diff --git a/ANALYSIS_REQUEST.md b/ANALYSIS_REQUEST.md new file mode 100644 index 0000000..ac84b1b --- /dev/null +++ b/ANALYSIS_REQUEST.md @@ -0,0 +1,199 @@ +# LAM_Audio2Expression 解析・実装依頼 + +## 依頼の背景 + +Audio2ExpressionサービスをGoogle Cloud Runにデプロイしようと48時間以上、40回以上試行したが、モデルが「mock」モードのままで正しく初期化されない。対症療法的な修正を繰り返しても解決できないため、根本的なアプローチの見直しが必要。 + +## 前任AIの反省点 + +**重要**: 前任AI(Claude)は以下の問題を抱えていた: + +1. **古い知識ベースからの推論に依存** + - 一般的な「Cloud Runデプロイ」パターンを適用しようとした + - LAM_Audio2Expression固有の設計思想を理解できていなかった + +2. **表面的なコード理解** + - コードを読んだが、なぜそのように設計されているかを理解していなかった + - 元々どのような環境・ユースケースを想定したコードなのかを考慮しなかった + +3. **対症療法の繰り返し** + - ログからエラーを見つけ→修正→デプロイ→また別のエラー、の無限ループ + - 根本原因を特定せず、見えている症状だけを修正し続けた + +4. **思い込み** + - 「モデルの読み込みや初期化がうまくいっていない」と決めつけていた + - 問題はそこではなく、もっと根本的なアプローチの誤りである可能性がある + +**この解析を行う際は、上記の落とし穴にハマらないよう注意してください。** + +## 解析対象コード + +### 主要ファイル + +**1. audio2exp-service/app.py** (現在のサービス実装) +- FastAPI を使用したWebサービス +- `/health`, `/debug`, `/api/audio2expression`, `/ws/{session_id}` エンドポイント +- `Audio2ExpressionEngine` クラスでモデル管理 + +**2. LAM_Audio2Expression/engines/infer.py** +- `InferBase` クラス: モデル構築の基底クラス +- `Audio2ExpressionInfer` クラス: 音声→表情推論 +- `infer_streaming_audio()`: リアルタイムストリーミング推論 + +**3. LAM_Audio2Expression/models/network.py** +- `Audio2Expression` クラス: PyTorchニューラルネットワーク +- wav2vec2 エンコーダー + Identity Encoder + Decoder構成 + +**4. LAM_Audio2Expression/engines/defaults.py** +- `default_config_parser()`: 設定ファイル読み込み +- `default_setup()`: バッチサイズ等の設定計算 +- `create_ddp_model()`: 分散データ並列ラッパー + +## 具体的な解析依頼 + +### Q1: モデル初期化が完了しない根本原因 + +```python +# app.py での初期化 +self.infer = INFER.build(dict(type=cfg.infer.type, cfg=cfg)) +self.infer.model.eval() +``` + +この処理がCloud Run環境で正常に完了しない理由を特定してください。 + +考えられる原因: +- [ ] メモリ不足 (8GiBで足りない?) +- [ ] CPU環境での動作制限 +- [ ] 分散処理設定が単一インスタンスで問題を起こす +- [ ] ファイルシステムの書き込み権限 +- [ ] タイムアウト (コールドスタート時間) +- [ ] その他 + +### Q2: default_setup() の問題 + +```python +# defaults.py +def default_setup(cfg): + world_size = comm.get_world_size() # Cloud Runでは1 + cfg.num_worker = cfg.num_worker if cfg.num_worker is not None else mp.cpu_count() + cfg.num_worker_per_gpu = cfg.num_worker // world_size + assert cfg.batch_size % world_size == 0 # 失敗する可能性? +``` + +推論時にこの設定が問題を起こしていないか確認してください。 + +### Q3: ロガー設定の問題 + +```python +# infer.py +self.logger = get_root_logger( + log_file=os.path.join(cfg.save_path, "infer.log"), + file_mode="a" if cfg.resume else "w", +) +``` + +Cloud Runのファイルシステムでログファイル作成が失敗する可能性を確認してください。 + +### Q4: wav2vec2 モデル読み込み + +```python +# network.py +if os.path.exists(pretrained_encoder_path): + self.audio_encoder = Wav2Vec2Model.from_pretrained(pretrained_encoder_path) +else: + config = Wav2Vec2Config.from_pretrained(wav2vec2_config_path) + self.audio_encoder = Wav2Vec2Model(config) # ランダム重み! +``` + +- wav2vec2-base-960h フォルダの構成は正しいか? +- HuggingFaceからのダウンロードが必要なファイルはないか? + +### Q5: 適切なデプロイ方法 + +Cloud Runが不適切な場合、以下の代替案を検討: +- Google Compute Engine (GPU インスタンス) +- Cloud Run Jobs (バッチ処理) +- Vertex AI Endpoints +- Kubernetes Engine + +## 期待する成果 + +### 1. 分析結果 +- 根本原因の特定 +- なぜ40回以上の試行で解決できなかったかの説明 + +### 2. 修正されたコード +``` +audio2exp-service/ +├── app.py # 修正版 +├── Dockerfile # 必要なら修正 +└── cloudbuild.yaml # 必要なら修正 +``` + +### 3. 動作確認方法 +```bash +# ヘルスチェック +curl https:///health +# 期待する応答: {"model_initialized": true, "mode": "inference", ...} + +# 推論テスト +curl -X POST https:///api/audio2expression \ + -H "Content-Type: application/json" \ + -d '{"audio_base64": "...", "session_id": "test"}' +``` + +## 技術スペック + +### モデル仕様 +| 項目 | 値 | +|------|-----| +| 入力サンプルレート | 24kHz (API) / 16kHz (内部) | +| 出力フレームレート | 30 fps | +| 出力次元 | 52 (ARKit blendshape) | +| モデルファイルサイズ | ~500MB (LAM) + ~400MB (wav2vec2) | + +### デプロイ環境 +| 項目 | 値 | +|------|-----| +| プラットフォーム | Cloud Run Gen 2 | +| リージョン | asia-northeast1 | +| メモリ | 8GiB | +| CPU | 4 | +| max-instances | 4 | + +### 依存関係 (requirements.txt) +``` +torch==2.0.1 +torchaudio==2.0.2 +transformers==4.30.2 +librosa==0.10.0 +fastapi==0.100.0 +uvicorn==0.23.0 +numpy==1.24.3 +scipy==1.11.1 +pydantic==2.0.3 +``` + +## ファイルの場所 + +```bash +# プロジェクトルート +cd /home/user/LAM_gpro + +# メインサービス +cat audio2exp-service/app.py + +# 推論エンジン +cat audio2exp-service/LAM_Audio2Expression/engines/infer.py + +# ニューラルネットワーク +cat audio2exp-service/LAM_Audio2Expression/models/network.py + +# 設定 +cat audio2exp-service/LAM_Audio2Expression/engines/defaults.py +cat audio2exp-service/LAM_Audio2Expression/configs/lam_audio2exp_config_streaming.py +``` + +--- + +以上、よろしくお願いいたします。 diff --git a/LAM_Audio2Expression_HANDOFF.md b/LAM_Audio2Expression_HANDOFF.md new file mode 100644 index 0000000..c109d4c --- /dev/null +++ b/LAM_Audio2Expression_HANDOFF.md @@ -0,0 +1,199 @@ +# LAM_Audio2Expression 引継ぎ・解析依頼文 + +## 1. プロジェクト概要 + +### 目的 +Audio2Expressionサービスを Google Cloud Run にデプロイし、音声からARKit 52 blendshape係数をリアルタイムで生成するAPIを提供する。 + +### リポジトリ構成 +``` +/home/user/LAM_gpro/ +├── audio2exp-service/ +│ ├── app.py # FastAPI サービス本体 +│ ├── Dockerfile # Dockerイメージ定義 +│ ├── cloudbuild.yaml # Cloud Build設定 +│ ├── requirements.txt # Python依存関係 +│ ├── start.sh # 起動スクリプト +│ ├── models/ # モデルファイル格納 +│ │ ├── LAM_audio2exp_streaming.tar # LAMモデル重み +│ │ └── wav2vec2-base-960h/ # wav2vec2事前学習モデル +│ └── LAM_Audio2Expression/ # LAMモデルソースコード +│ ├── configs/ +│ │ └── lam_audio2exp_config_streaming.py +│ ├── engines/ +│ │ ├── defaults.py # 設定パーサー・セットアップ +│ │ └── infer.py # 推論エンジン (Audio2ExpressionInfer) +│ ├── models/ +│ │ ├── __init__.py +│ │ ├── builder.py # モデルビルダー +│ │ ├── default.py # DefaultEstimator +│ │ ├── network.py # Audio2Expression ニューラルネットワーク +│ │ └── utils.py # 後処理ユーティリティ +│ └── utils/ +│ ├── comm.py # 分散処理ユーティリティ +│ ├── config.py # 設定管理 +│ ├── env.py # 環境設定 +│ └── logger.py # ロギング +``` + +## 2. コア技術アーキテクチャ + +### Audio2Expression モデル (network.py) + +```python +# 入力 → 出力フロー +input_audio_array (24kHz or 16kHz) + → wav2vec2 audio_encoder (768次元特徴) + → feature_projection (512次元) + → identity_encoder (話者特徴 + GRU) + → decoder (Conv1D + LayerNorm + ReLU) + → output_proj (52次元) + → sigmoid + → ARKit 52 blendshape coefficients (0-1) +``` + +### 重要なパラメータ +- **内部サンプルレート**: 16kHz +- **出力フレームレート**: 30 fps +- **出力次元**: 52 (ARKit blendshape) +- **identity classes**: 12 (話者ID用) + +### wav2vec2の読み込みロジック (network.py:40-44) +```python +if os.path.exists(pretrained_encoder_path): + self.audio_encoder = Wav2Vec2Model.from_pretrained(pretrained_encoder_path) +else: + # 警告: この場合、ランダム重みで初期化される + config = Wav2Vec2Config.from_pretrained(wav2vec2_config_path) + self.audio_encoder = Wav2Vec2Model(config) +``` + +### ストリーミング推論 (infer.py) + +`infer_streaming_audio()` メソッド: +1. コンテキスト管理 (`previous_audio`, `previous_expression`, `previous_volume`) +2. 64フレーム最大長でバッファリング +3. 16kHzへリサンプリング +4. 後処理パイプライン: + - `smooth_mouth_movements()` - 無音時の口動き抑制 + - `apply_frame_blending()` - フレーム間ブレンディング + - `apply_savitzky_golay_smoothing()` - 平滑化フィルタ + - `symmetrize_blendshapes()` - 左右対称化 + - `apply_random_eye_blinks_context()` - 瞬き追加 + +## 3. 現在の問題 + +### 症状 +- Cloud Runへのデプロイは成功する +- ヘルスチェック応答: + ```json + { + "model_initialized": false, + "mode": "mock", + "init_step": "...", + "init_error": "..." + } + ``` +- 48時間以上、40回以上のデプロイ試行で解決できていない + +### 試行した解決策(全て失敗) +1. gsutil でモデルダウンロード +2. Python GCSクライアントでモデルダウンロード +3. Cloud Storage FUSE でマウント +4. Dockerイメージにモデルを焼き込み +5. max-instances を 10 → 5 → 4 に削減(quota対策) +6. ステップ別エラー追跡を追加 + +### 重要な指摘 +ユーザーからの指摘: +> 「キミは、モデルの読み込みや、初期化が上手く行ってないと、思い込んでるでしょ?そうじゃなく、根本的にやり方が間違ってるんだよ!」 +> 「LAM_Audio2Expressionのロジックを本質的に理解できてないでしょ?」 + +つまり、問題は単なる「ファイルが見つからない」「初期化エラー」ではなく、**アプローチ自体が根本的に間違っている**可能性がある。 + +## 4. 解析依頼事項 + +### 4.1 根本原因の特定 +1. **LAM_Audio2Expressionの設計思想** + - このモデルは元々どのような環境で動作することを想定しているか? + - GPU必須か?CPU動作可能か? + - リアルタイムストリーミング vs バッチ処理の制約は? + +2. **Cloud Run適合性** + - コールドスタート時間の問題はないか? + - メモリ8GiBで十分か? + - CPUのみで実用的な速度が出るか? + +3. **初期化プロセス** + - `default_setup(cfg)` のバッチサイズ計算が問題を起こしていないか? + - `create_ddp_model()` がシングルプロセス環境で正しく動作するか? + - ロガー設定がCloud Run環境で問題を起こしていないか? + +### 4.2 app.py の問題点 +現在の `app.py` の初期化フローを確認: +```python +# lifespan内で非同期初期化 +loop = asyncio.get_event_loop() +await loop.run_in_executor(None, engine.initialize) +``` + +- この初期化方法は正しいか? +- エラーが正しくキャッチ・伝播されているか? + +### 4.3 設定ファイルの問題 +`lam_audio2exp_config_streaming.py`: +```python +num_worker = 16 # Cloud Runで問題になる? +batch_size = 16 # 推論時も必要? +``` + +## 5. 期待する成果物 + +1. **根本原因の分析レポート** + - なぜ現在のアプローチが機能しないのか + - Cloud Runでこのモデルを動作させることは可能か + +2. **正しい実装方針** + - 必要な場合、代替デプロイメント方法の提案 + - app.py の正しい実装 + +3. **動作する実装コード** + - モデル初期化が成功する + - `/health` エンドポイントで `model_initialized: true` を返す + - `/api/audio2expression` でリアルタイム推論が機能する + +## 6. 関連ファイル一覧 + +### 必読ファイル +| ファイル | 説明 | +|---------|------| +| `audio2exp-service/app.py` | FastAPIサービス本体 | +| `LAM_Audio2Expression/engines/infer.py` | 推論エンジン | +| `LAM_Audio2Expression/models/network.py` | ニューラルネットワーク定義 | +| `LAM_Audio2Expression/engines/defaults.py` | 設定パーサー | +| `LAM_Audio2Expression/configs/lam_audio2exp_config_streaming.py` | ストリーミング設定 | + +### 補助ファイル +| ファイル | 説明 | +|---------|------| +| `LAM_Audio2Expression/models/utils.py` | 後処理ユーティリティ | +| `LAM_Audio2Expression/utils/comm.py` | 分散処理ユーティリティ | +| `LAM_Audio2Expression/models/builder.py` | モデルビルダー | + +## 7. デプロイ環境 + +- **Cloud Run Gen 2** +- **メモリ**: 8GiB +- **CPU**: 4 +- **max-instances**: 4 +- **コンテナポート**: 8080 +- **リージョン**: asia-northeast1 + +## 8. Git情報 + +- **ブランチ**: `claude/implementation-testing-w2xCb` +- **最新コミット**: `4ba662c Simplify deployment: bake models into Docker image` + +--- + +作成日: 2026-02-07 diff --git a/audio2exp-service/.gcloudignore b/audio2exp-service/.gcloudignore new file mode 100644 index 0000000..28d1cdd --- /dev/null +++ b/audio2exp-service/.gcloudignore @@ -0,0 +1,12 @@ +# Cloud Build ignore file +# Unlike .gitignore, we INCLUDE LAM_Audio2Expression for the build + +exp/ +models/ +__pycache__/ +*.pyc +.git/ +.gitignore +*.md +*.txt +!requirements.txt diff --git a/audio2exp-service/.gitignore b/audio2exp-service/.gitignore new file mode 100644 index 0000000..8739a60 --- /dev/null +++ b/audio2exp-service/.gitignore @@ -0,0 +1,4 @@ +exp/ +models/ +__pycache__/ +*.pyc diff --git a/audio2exp-service/Dockerfile b/audio2exp-service/Dockerfile new file mode 100644 index 0000000..db7eead --- /dev/null +++ b/audio2exp-service/Dockerfile @@ -0,0 +1,32 @@ +FROM python:3.10-slim + +WORKDIR /app + +# System dependencies +RUN apt-get update && apt-get install -y --no-install-recommends \ + ffmpeg \ + && rm -rf /var/lib/apt/lists/* + +# Copy and install Python dependencies +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +# Copy LAM_Audio2Expression code +COPY LAM_Audio2Expression/ ./LAM_Audio2Expression/ + +# Copy models directory (downloaded during Cloud Build, fallback for FUSE) +COPY models/ ./models/ + +# Copy application code +COPY app.py . +COPY start.sh . +RUN chmod +x start.sh + +# Fixed paths - models served via GCS FUSE mount (primary), Docker-baked (fallback) +ENV LAM_A2E_PATH=/app/LAM_Audio2Expression +ENV LAM_WEIGHT_PATH=/app/models/lam_audio2exp_streaming.pth +ENV WAV2VEC_PATH=/app/models/wav2vec2-base-960h + +ENV PORT=8080 + +CMD ["./start.sh"] diff --git a/audio2exp-service/LAM_Audio2Expression/.gitignore b/audio2exp-service/LAM_Audio2Expression/.gitignore new file mode 100644 index 0000000..73c532f --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/.gitignore @@ -0,0 +1,18 @@ +image/ +__pycache__ +**/build/ +**/*.egg-info/ +**/dist/ +*.so +exp +weights +data +log +outputs/ +.vscode +.idea +*/.DS_Store +TEMP/ +pretrained/ +**/*.out +Dockerfile \ No newline at end of file diff --git a/audio2exp-service/LAM_Audio2Expression/LICENSE b/audio2exp-service/LAM_Audio2Expression/LICENSE new file mode 100644 index 0000000..f49a4e1 --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/audio2exp-service/LAM_Audio2Expression/README.md b/audio2exp-service/LAM_Audio2Expression/README.md new file mode 100644 index 0000000..7f9e2c2 --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/README.md @@ -0,0 +1,123 @@ +# LAM-A2E: Audio to Expression + +[![Website](https://raw.githubusercontent.com/prs-eth/Marigold/main/doc/badges/badge-website.svg)](https://aigc3d.github.io/projects/LAM/) +[![Apache License](https://img.shields.io/badge/📃-Apache--2.0-929292)](https://www.apache.org/licenses/LICENSE-2.0) +[![ModelScope Demo](https://img.shields.io/badge/%20ModelScope%20-Space-blue)](https://www.modelscope.cn/studios/Damo_XR_Lab/LAM-A2E) + +## Description +#### This project leverages audio input to generate ARKit blendshapes-driven facial expressions in ⚡real-time⚡, powering ultra-realistic 3D avatars generated by [LAM](https://github.com/aigc3d/LAM). +To enable ARKit-driven animation of the LAM model, we adapted ARKit blendshapes to align with FLAME's facial topology through manual customization. The LAM-A2E network follows an encoder-decoder architecture, as shown below. We adopt the state-of-the-art pre-trained speech model Wav2Vec for the audio encoder. The features extracted from the raw audio waveform are combined with style features and fed into the decoder, which outputs stylized blendshape coefficients. + +
+Architecture +
+ +## Demo + +
+ +
+ +## 📢 News + +**[May 21, 2025]** We have released a [Avatar Export Feature](https://www.modelscope.cn/studios/Damo_XR_Lab/LAM_Large_Avatar_Model), enabling users to generate facial expressions from audio using any [LAM-generated](https://github.com/aigc3d/LAM) 3D digital humans.
+**[April 21, 2025]** We have released the [ModelScope](https://www.modelscope.cn/studios/Damo_XR_Lab/LAM-A2E) Space !
+**[April 21, 2025]** We have released the WebGL Interactive Chatting Avatar SDK on [OpenAvatarChat](https://github.com/HumanAIGC-Engineering/OpenAvatarChat) (including LLM, ASR, TTS, Avatar), with which you can freely chat with our generated 3D Digital Human ! 🔥
+ +### To do list +- [ ] Release Huggingface space. +- [x] Release [Modelscope demo space](https://www.modelscope.cn/studios/Damo_XR_Lab/LAM-A2E). You can try the demo or pull the demo source code and deploy it on your own machine. +- [ ] Release the LAM-A2E model based on the Flame expression. +- [x] Release Interactive Chatting Avatar SDK with [OpenAvatarChat](https://www.modelscope.cn/studios/Damo_XR_Lab/LAM-A2E), including LLM, ASR, TTS, LAM-Avatars. + + + +## 🚀 Get Started +### Environment Setup +```bash +git clone git@github.com:aigc3d/LAM_Audio2Expression.git +cd LAM_Audio2Expression +# Create conda environment (currently only supports Python 3.10) +conda create -n lam_a2e python=3.10 +# Activate the conda environment +conda activate lam_a2e +# Install with Cuda 12.1 +sh ./scripts/install/install_cu121.sh +# Or Install with Cuda 11.8 +sh ./scripts/install/install_cu118.sh +``` + + +### Download + +``` +# HuggingFace download +# Download Assets and Model Weights +huggingface-cli download 3DAIGC/LAM_audio2exp --local-dir ./ +tar -xzvf LAM_audio2exp_assets.tar && rm -f LAM_audio2exp_assets.tar +tar -xzvf LAM_audio2exp_streaming.tar && rm -f LAM_audio2exp_streaming.tar + +# Or OSS Download (In case of HuggingFace download failing) +# Download Assets +wget https://virutalbuy-public.oss-cn-hangzhou.aliyuncs.com/share/aigc3d/data/LAM/LAM_audio2exp_assets.tar +tar -xzvf LAM_audio2exp_assets.tar && rm -f LAM_audio2exp_assets.tar +# Download Model Weights +wget https://virutalbuy-public.oss-cn-hangzhou.aliyuncs.com/share/aigc3d/data/LAM/LAM_audio2exp_streaming.tar +tar -xzvf LAM_audio2exp_streaming.tar && rm -f LAM_audio2exp_streaming.tar + +Or Modelscope Download +git clone https://www.modelscope.cn/Damo_XR_Lab/LAM_audio2exp.git ./modelscope_download +``` + + +### Quick Start Guide +#### Using Gradio Interface: +We provide a simple Gradio demo with **WebGL Render**, and you can get rendering results by uploading audio in seconds. + +[//]: # (teaser) +
+ +
+ + +``` +python app_lam_audio2exp.py +``` + +### Inference +```bash +# example: python inference.py --config-file configs/lam_audio2exp_config_streaming.py --options save_path=exp/audio2exp weight=pretrained_models/lam_audio2exp_streaming.tar audio_input=./assets/sample_audio/BarackObama_english.wav +python inference.py --config-file ${CONFIG_PATH} --options save_path=${SAVE_PATH} weight=${CHECKPOINT_PATH} audio_input=${AUDIO_INPUT} +``` + +### Acknowledgement +This work is built on many amazing research works and open-source projects: +- [FLAME](https://flame.is.tue.mpg.de) +- [FaceFormer](https://github.com/EvelynFan/FaceFormer) +- [Meshtalk](https://github.com/facebookresearch/meshtalk) +- [Unitalker](https://github.com/X-niper/UniTalker) +- [Pointcept](https://github.com/Pointcept/Pointcept) + +Thanks for their excellent works and great contribution. + + +### Related Works +Welcome to follow our other interesting works: +- [LAM](https://github.com/aigc3d/LAM) +- [LHM](https://github.com/aigc3d/LHM) + + +### Citation +``` +@inproceedings{he2025LAM, + title={LAM: Large Avatar Model for One-shot Animatable Gaussian Head}, + author={ + Yisheng He and Xiaodong Gu and Xiaodan Ye and Chao Xu and Zhengyi Zhao and Yuan Dong and Weihao Yuan and Zilong Dong and Liefeng Bo + }, + booktitle={arXiv preprint arXiv:2502.17796}, + year={2025} +} +``` diff --git a/audio2exp-service/LAM_Audio2Expression/app_lam_audio2exp.py b/audio2exp-service/LAM_Audio2Expression/app_lam_audio2exp.py new file mode 100644 index 0000000..56c2339 --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/app_lam_audio2exp.py @@ -0,0 +1,313 @@ +""" +Copyright 2024-2025 The Alibaba 3DAIGC Team Authors. All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +""" +import os +import base64 + +import gradio as gr +import argparse +from omegaconf import OmegaConf +from gradio_gaussian_render import gaussian_render + +from engines.defaults import ( + default_argument_parser, + default_config_parser, + default_setup, +) +from engines.infer import INFER +from pathlib import Path + +try: + import spaces +except: + pass + +import patoolib + +h5_rendering = True + + +def assert_input_image(input_image,input_zip_textbox): + if(os.path.exists(input_zip_textbox)): + return + if input_image is None: + raise gr.Error('No image selected or uploaded!') + + +def prepare_working_dir(): + import tempfile + working_dir = tempfile.TemporaryDirectory() + return working_dir + +def get_image_base64(path): + with open(path, 'rb') as image_file: + encoded_string = base64.b64encode(image_file.read()).decode() + return f'data:image/png;base64,{encoded_string}' + + +def do_render(): + print('WebGL rendering ....') + return + +def audio_loading(): + print("Audio loading ....") + return "None" + +def parse_configs(): + parser = argparse.ArgumentParser() + parser.add_argument("--config", type=str) + parser.add_argument("--infer", type=str) + args, unknown = parser.parse_known_args() + + cfg = OmegaConf.create() + cli_cfg = OmegaConf.from_cli(unknown) + + # parse from ENV + if os.environ.get("APP_INFER") is not None: + args.infer = os.environ.get("APP_INFER") + if os.environ.get("APP_MODEL_NAME") is not None: + cli_cfg.model_name = os.environ.get("APP_MODEL_NAME") + + args.config = args.infer if args.config is None else args.config + + if args.config is not None: + cfg_train = OmegaConf.load(args.config) + cfg.source_size = cfg_train.dataset.source_image_res + try: + cfg.src_head_size = cfg_train.dataset.src_head_size + except: + cfg.src_head_size = 112 + cfg.render_size = cfg_train.dataset.render_image.high + _relative_path = os.path.join( + cfg_train.experiment.parent, + cfg_train.experiment.child, + os.path.basename(cli_cfg.model_name).split("_")[-1], + ) + + cfg.save_tmp_dump = os.path.join("exps", "save_tmp", _relative_path) + cfg.image_dump = os.path.join("exps", "images", _relative_path) + cfg.video_dump = os.path.join("exps", "videos", _relative_path) # output path + + if args.infer is not None: + cfg_infer = OmegaConf.load(args.infer) + cfg.merge_with(cfg_infer) + cfg.setdefault( + "save_tmp_dump", os.path.join("exps", cli_cfg.model_name, "save_tmp") + ) + cfg.setdefault("image_dump", os.path.join("exps", cli_cfg.model_name, "images")) + cfg.setdefault( + "video_dump", os.path.join("dumps", cli_cfg.model_name, "videos") + ) + cfg.setdefault("mesh_dump", os.path.join("dumps", cli_cfg.model_name, "meshes")) + + cfg.motion_video_read_fps = 30 + cfg.merge_with(cli_cfg) + + cfg.setdefault("logger", "INFO") + + assert cfg.model_name is not None, "model_name is required" + + return cfg, cfg_train + + +def create_zip_archive(output_zip='assets/arkitWithBSData.zip', base_dir=""): + if os.path.exists(output_zip): + os.remove(output_zip) + print(f"Remove previous file: {output_zip}") + + try: + # 创建压缩包 + patoolib.create_archive( + archive=output_zip, + filenames=[base_dir], # 要压缩的目录 + verbosity=-1, # 静默模式 + program='zip' # 指定使用zip格式 + ) + print(f"Archive created successfully: {output_zip}") + except Exception as e: + raise ValueError(f"Archive creation failed: {str(e)}") + + +def demo_lam_audio2exp(infer, cfg): + def core_fn(image_path: str, audio_params, working_dir, input_zip_textbox): + + if(os.path.exists(input_zip_textbox)): + base_id = os.path.basename(input_zip_textbox).split(".")[0] + output_dir = os.path.join('assets', 'sample_lam', base_id) + # unzip_dir + if (not os.path.exists(os.path.join(output_dir, 'arkitWithBSData'))): + run_command = 'unzip -d '+output_dir+' '+input_zip_textbox + os.system(run_command) + rename_command = 'mv '+os.path.join(output_dir,base_id)+' '+os.path.join(output_dir,'arkitWithBSData') + os.system(rename_command) + else: + base_id = os.path.basename(image_path).split(".")[0] + + # set input audio + cfg.audio_input = audio_params + cfg.save_json_path = os.path.join("./assets/sample_lam", base_id, 'arkitWithBSData', 'bsData.json') + infer.infer() + + output_file_name = base_id+'_'+os.path.basename(audio_params).split(".")[0]+'.zip' + assetPrefix = 'gradio_api/file=assets/' + output_file_path = os.path.join('./assets',output_file_name) + + create_zip_archive(output_zip=output_file_path, base_dir=os.path.join("./assets/sample_lam", base_id)) + + return 'gradio_api/file='+audio_params, assetPrefix+output_file_name + + with gr.Blocks(analytics_enabled=False) as demo: + logo_url = './assets/images/logo.jpeg' + logo_base64 = get_image_base64(logo_url) + gr.HTML(f""" +
+
+

LAM-A2E: Audio to Expression

+
+
+ """) + + gr.HTML( + """

Notes: This project leverages audio input to generate ARKit blendshapes-driven facial expressions in ⚡real-time⚡, powering ultra-realistic 3D avatars generated by LAM.

""" + ) + + # DISPLAY + with gr.Row(): + with gr.Column(variant='panel', scale=1): + with gr.Tabs(elem_id='lam_input_image'): + with gr.TabItem('Input Image'): + with gr.Row(): + input_image = gr.Image(label='Input Image', + image_mode='RGB', + height=480, + width=270, + sources='upload', + type='filepath', # 'numpy', + elem_id='content_image', + interactive=False) + # EXAMPLES + with gr.Row(): + examples = [ + ['assets/sample_input/barbara.jpg'], + ['assets/sample_input/status.png'], + ['assets/sample_input/james.png'], + ['assets/sample_input/vfhq_case1.png'], + ] + gr.Examples( + examples=examples, + inputs=[input_image], + examples_per_page=20, + ) + + with gr.Column(): + with gr.Tabs(elem_id='lam_input_audio'): + with gr.TabItem('Input Audio'): + with gr.Row(): + audio_input = gr.Audio(label='Input Audio', + type='filepath', + waveform_options={ + 'sample_rate': 16000, + 'waveform_progress_color': '#4682b4' + }, + elem_id='content_audio') + + examples = [ + ['assets/sample_audio/Nangyanwen_chinese.wav'], + ['assets/sample_audio/LiBai_TTS_chinese.wav'], + ['assets/sample_audio/LinJing_TTS_chinese.wav'], + ['assets/sample_audio/BarackObama_english.wav'], + ['assets/sample_audio/HillaryClinton_english.wav'], + ['assets/sample_audio/XitongShi_japanese.wav'], + ['assets/sample_audio/FangXiao_japanese.wav'], + ] + gr.Examples( + examples=examples, + inputs=[audio_input], + examples_per_page=10, + ) + + # SETTING + with gr.Row(): + with gr.Column(variant='panel', scale=1): + input_zip_textbox = gr.Textbox( + label="Input Local Path to LAM-Generated ZIP File", + interactive=True, + placeholder="Input Local Path to LAM-Generated ZIP File", + visible=True + ) + submit = gr.Button('Generate', + elem_id='lam_generate', + variant='primary') + + if h5_rendering: + gr.set_static_paths(Path.cwd().absolute() / "assets/") + with gr.Row(): + gs = gaussian_render(width=380, height=680) + + working_dir = gr.State() + selected_audio = gr.Textbox(visible=False) + selected_render_file = gr.Textbox(visible=False) + + submit.click( + fn=assert_input_image, + inputs=[input_image,input_zip_textbox], + queue=False, + ).success( + fn=prepare_working_dir, + outputs=[working_dir], + queue=False, + ).success( + fn=core_fn, + inputs=[input_image, audio_input, + working_dir, input_zip_textbox], + outputs=[selected_audio, selected_render_file], + queue=False, + ).success( + fn=audio_loading, + outputs=[selected_audio], + js='''(output_component) => window.loadAudio(output_component)''' + ).success( + fn=do_render(), + outputs=[selected_render_file], + js='''(selected_render_file) => window.start(selected_render_file)''' + ) + + demo.queue() + demo.launch(inbrowser=True) + + + +def launch_gradio_app(): + os.environ.update({ + 'APP_ENABLED': '1', + 'APP_MODEL_NAME':'', + 'APP_INFER': 'configs/lam_audio2exp_streaming_config.py', + 'APP_TYPE': 'infer.audio2exp', + 'NUMBA_THREADING_LAYER': 'omp', + }) + + args = default_argument_parser().parse_args() + args.config_file = 'configs/lam_audio2exp_config_streaming.py' + cfg = default_config_parser(args.config_file, args.options) + cfg = default_setup(cfg) + + cfg.ex_vol = True + infer = INFER.build(dict(type=cfg.infer.type, cfg=cfg)) + + demo_lam_audio2exp(infer, cfg) + + +if __name__ == '__main__': + launch_gradio_app() diff --git a/audio2exp-service/LAM_Audio2Expression/assets/images/framework.png b/audio2exp-service/LAM_Audio2Expression/assets/images/framework.png new file mode 100644 index 0000000..210a975 Binary files /dev/null and b/audio2exp-service/LAM_Audio2Expression/assets/images/framework.png differ diff --git a/audio2exp-service/LAM_Audio2Expression/assets/images/logo.jpeg b/audio2exp-service/LAM_Audio2Expression/assets/images/logo.jpeg new file mode 100644 index 0000000..6fa8d78 Binary files /dev/null and b/audio2exp-service/LAM_Audio2Expression/assets/images/logo.jpeg differ diff --git a/audio2exp-service/LAM_Audio2Expression/assets/images/snapshot.png b/audio2exp-service/LAM_Audio2Expression/assets/images/snapshot.png new file mode 100644 index 0000000..8fc9bc9 Binary files /dev/null and b/audio2exp-service/LAM_Audio2Expression/assets/images/snapshot.png differ diff --git a/audio2exp-service/LAM_Audio2Expression/assets/images/teaser.jpg b/audio2exp-service/LAM_Audio2Expression/assets/images/teaser.jpg new file mode 100644 index 0000000..8c7c406 Binary files /dev/null and b/audio2exp-service/LAM_Audio2Expression/assets/images/teaser.jpg differ diff --git a/audio2exp-service/LAM_Audio2Expression/configs/lam_audio2exp_config.py b/audio2exp-service/LAM_Audio2Expression/configs/lam_audio2exp_config.py new file mode 100644 index 0000000..a1e4abb --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/configs/lam_audio2exp_config.py @@ -0,0 +1,92 @@ +weight = 'pretrained_models/lam_audio2exp.tar' # path to model weight +ex_vol = True # Isolates vocal track from audio file +audio_input = './assets/sample_audio/BarackObama.wav' +save_json_path = 'bsData.json' + +audio_sr = 16000 +fps = 30.0 + +movement_smooth = True +brow_movement = True +id_idx = 153 + +resume = False # whether to resume training process +evaluate = True # evaluate after each epoch training process +test_only = False # test process + +seed = None # train process will init a random seed and record +save_path = "exp/audio2exp" +num_worker = 16 # total worker in all gpu +batch_size = 16 # total batch size in all gpu +batch_size_val = None # auto adapt to bs 1 for each gpu +batch_size_test = None # auto adapt to bs 1 for each gpu +epoch = 100 # total epoch, data loop = epoch // eval_epoch +eval_epoch = 100 # sche total eval & checkpoint epoch + +sync_bn = False +enable_amp = False +empty_cache = False +find_unused_parameters = False + +mix_prob = 0 +param_dicts = None # example: param_dicts = [dict(keyword="block", lr_scale=0.1)] + +# model settings +model = dict( + type="DefaultEstimator", + backbone=dict( + type="Audio2Expression", + pretrained_encoder_type='wav2vec', + pretrained_encoder_path='facebook/wav2vec2-base-960h', + wav2vec2_config_path = 'configs/wav2vec2_config.json', + num_identity_classes=5016, + identity_feat_dim=64, + hidden_dim=512, + expression_dim=52, + norm_type='ln', + use_transformer=True, + num_attention_heads=8, + num_transformer_layers=6, + ), + criteria=[dict(type="L1Loss", loss_weight=1.0, ignore_index=-1)], +) + +dataset_type = 'audio2exp' +data_root = './' +data = dict( + train=dict( + type=dataset_type, + split="train", + data_root=data_root, + test_mode=False, + ), + val=dict( + type=dataset_type, + split="val", + data_root=data_root, + test_mode=False, + ), + test=dict( + type=dataset_type, + split="val", + data_root=data_root, + test_mode=True + ), +) + +# hook +hooks = [ + dict(type="CheckpointLoader"), + dict(type="IterationTimer", warmup_iter=2), + dict(type="InformationWriter"), + dict(type="SemSegEvaluator"), + dict(type="CheckpointSaver", save_freq=None), + dict(type="PreciseEvaluator", test_last=False), +] + +# Trainer +train = dict(type="DefaultTrainer") + +# Tester +infer = dict(type="Audio2ExpressionInfer", + verbose=True) diff --git a/audio2exp-service/LAM_Audio2Expression/configs/lam_audio2exp_config_streaming.py b/audio2exp-service/LAM_Audio2Expression/configs/lam_audio2exp_config_streaming.py new file mode 100644 index 0000000..3f44b92 --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/configs/lam_audio2exp_config_streaming.py @@ -0,0 +1,92 @@ +weight = 'pretrained_models/lam_audio2exp_streaming.tar' # path to model weight +ex_vol = True # extract +audio_input = './assets/sample_audio/BarackObama.wav' +save_json_path = 'bsData.json' + +audio_sr = 16000 +fps = 30.0 + +movement_smooth = False +brow_movement = False +id_idx = 0 + +resume = False # whether to resume training process +evaluate = True # evaluate after each epoch training process +test_only = False # test process + +seed = None # train process will init a random seed and record +save_path = "exp/audio2exp" +num_worker = 16 # total worker in all gpu +batch_size = 16 # total batch size in all gpu +batch_size_val = None # auto adapt to bs 1 for each gpu +batch_size_test = None # auto adapt to bs 1 for each gpu +epoch = 100 # total epoch, data loop = epoch // eval_epoch +eval_epoch = 100 # sche total eval & checkpoint epoch + +sync_bn = False +enable_amp = False +empty_cache = False +find_unused_parameters = False + +mix_prob = 0 +param_dicts = None # example: param_dicts = [dict(keyword="block", lr_scale=0.1)] + +# model settings +model = dict( + type="DefaultEstimator", + backbone=dict( + type="Audio2Expression", + pretrained_encoder_type='wav2vec', + pretrained_encoder_path='facebook/wav2vec2-base-960h', + wav2vec2_config_path = 'configs/wav2vec2_config.json', + num_identity_classes=12, + identity_feat_dim=64, + hidden_dim=512, + expression_dim=52, + norm_type='ln', + use_transformer=False, + num_attention_heads=8, + num_transformer_layers=6, + ), + criteria=[dict(type="L1Loss", loss_weight=1.0, ignore_index=-1)], +) + +dataset_type = 'audio2exp' +data_root = './' +data = dict( + train=dict( + type=dataset_type, + split="train", + data_root=data_root, + test_mode=False, + ), + val=dict( + type=dataset_type, + split="val", + data_root=data_root, + test_mode=False, + ), + test=dict( + type=dataset_type, + split="val", + data_root=data_root, + test_mode=True + ), +) + +# hook +hooks = [ + dict(type="CheckpointLoader"), + dict(type="IterationTimer", warmup_iter=2), + dict(type="InformationWriter"), + dict(type="SemSegEvaluator"), + dict(type="CheckpointSaver", save_freq=None), + dict(type="PreciseEvaluator", test_last=False), +] + +# Trainer +train = dict(type="DefaultTrainer") + +# Tester +infer = dict(type="Audio2ExpressionInfer", + verbose=True) diff --git a/audio2exp-service/LAM_Audio2Expression/configs/wav2vec2_config.json b/audio2exp-service/LAM_Audio2Expression/configs/wav2vec2_config.json new file mode 100644 index 0000000..8ca9cc7 --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/configs/wav2vec2_config.json @@ -0,0 +1,77 @@ +{ + "_name_or_path": "facebook/wav2vec2-base-960h", + "activation_dropout": 0.1, + "apply_spec_augment": true, + "architectures": [ + "Wav2Vec2ForCTC" + ], + "attention_dropout": 0.1, + "bos_token_id": 1, + "codevector_dim": 256, + "contrastive_logits_temperature": 0.1, + "conv_bias": false, + "conv_dim": [ + 512, + 512, + 512, + 512, + 512, + 512, + 512 + ], + "conv_kernel": [ + 10, + 3, + 3, + 3, + 3, + 2, + 2 + ], + "conv_stride": [ + 5, + 2, + 2, + 2, + 2, + 2, + 2 + ], + "ctc_loss_reduction": "sum", + "ctc_zero_infinity": false, + "diversity_loss_weight": 0.1, + "do_stable_layer_norm": false, + "eos_token_id": 2, + "feat_extract_activation": "gelu", + "feat_extract_dropout": 0.0, + "feat_extract_norm": "group", + "feat_proj_dropout": 0.1, + "feat_quantizer_dropout": 0.0, + "final_dropout": 0.1, + "gradient_checkpointing": false, + "hidden_act": "gelu", + "hidden_dropout": 0.1, + "hidden_dropout_prob": 0.1, + "hidden_size": 768, + "initializer_range": 0.02, + "intermediate_size": 3072, + "layer_norm_eps": 1e-05, + "layerdrop": 0.1, + "mask_feature_length": 10, + "mask_feature_prob": 0.0, + "mask_time_length": 10, + "mask_time_prob": 0.05, + "model_type": "wav2vec2", + "num_attention_heads": 12, + "num_codevector_groups": 2, + "num_codevectors_per_group": 320, + "num_conv_pos_embedding_groups": 16, + "num_conv_pos_embeddings": 128, + "num_feat_extract_layers": 7, + "num_hidden_layers": 12, + "num_negatives": 100, + "pad_token_id": 0, + "proj_codevector_dim": 256, + "transformers_version": "4.7.0.dev0", + "vocab_size": 32 +} diff --git a/audio2exp-service/LAM_Audio2Expression/engines/__init__.py b/audio2exp-service/LAM_Audio2Expression/engines/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/audio2exp-service/LAM_Audio2Expression/engines/defaults.py b/audio2exp-service/LAM_Audio2Expression/engines/defaults.py new file mode 100644 index 0000000..488148b --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/engines/defaults.py @@ -0,0 +1,147 @@ +""" +The code is base on https://github.com/Pointcept/Pointcept +""" + +import os +import sys +import argparse +import multiprocessing as mp +from torch.nn.parallel import DistributedDataParallel + + +import utils.comm as comm +from utils.env import get_random_seed, set_seed +from utils.config import Config, DictAction + + +def create_ddp_model(model, *, fp16_compression=False, **kwargs): + """ + Create a DistributedDataParallel model if there are >1 processes. + Args: + model: a torch.nn.Module + fp16_compression: add fp16 compression hooks to the ddp object. + See more at https://pytorch.org/docs/stable/ddp_comm_hooks.html#torch.distributed.algorithms.ddp_comm_hooks.default_hooks.fp16_compress_hook + kwargs: other arguments of :module:`torch.nn.parallel.DistributedDataParallel`. + """ + if comm.get_world_size() == 1: + return model + # kwargs['find_unused_parameters'] = True + if "device_ids" not in kwargs: + kwargs["device_ids"] = [comm.get_local_rank()] + if "output_device" not in kwargs: + kwargs["output_device"] = [comm.get_local_rank()] + ddp = DistributedDataParallel(model, **kwargs) + if fp16_compression: + from torch.distributed.algorithms.ddp_comm_hooks import default as comm_hooks + + ddp.register_comm_hook(state=None, hook=comm_hooks.fp16_compress_hook) + return ddp + + +def worker_init_fn(worker_id, num_workers, rank, seed): + """Worker init func for dataloader. + + The seed of each worker equals to num_worker * rank + worker_id + user_seed + + Args: + worker_id (int): Worker id. + num_workers (int): Number of workers. + rank (int): The rank of current process. + seed (int): The random seed to use. + """ + + worker_seed = num_workers * rank + worker_id + seed + set_seed(worker_seed) + + +def default_argument_parser(epilog=None): + parser = argparse.ArgumentParser( + epilog=epilog + or f""" + Examples: + Run on single machine: + $ {sys.argv[0]} --num-gpus 8 --config-file cfg.yaml + Change some config options: + $ {sys.argv[0]} --config-file cfg.yaml MODEL.WEIGHTS /path/to/weight.pth SOLVER.BASE_LR 0.001 + Run on multiple machines: + (machine0)$ {sys.argv[0]} --machine-rank 0 --num-machines 2 --dist-url [--other-flags] + (machine1)$ {sys.argv[0]} --machine-rank 1 --num-machines 2 --dist-url [--other-flags] + """, + formatter_class=argparse.RawDescriptionHelpFormatter, + ) + parser.add_argument( + "--config-file", default="", metavar="FILE", help="path to config file" + ) + parser.add_argument( + "--num-gpus", type=int, default=1, help="number of gpus *per machine*" + ) + parser.add_argument( + "--num-machines", type=int, default=1, help="total number of machines" + ) + parser.add_argument( + "--machine-rank", + type=int, + default=0, + help="the rank of this machine (unique per machine)", + ) + # PyTorch still may leave orphan processes in multi-gpu training. + # Therefore we use a deterministic way to obtain port, + # so that users are aware of orphan processes by seeing the port occupied. + # port = 2 ** 15 + 2 ** 14 + hash(os.getuid() if sys.platform != "win32" else 1) % 2 ** 14 + parser.add_argument( + "--dist-url", + # default="tcp://127.0.0.1:{}".format(port), + default="auto", + help="initialization URL for pytorch distributed backend. See " + "https://pytorch.org/docs/stable/distributed.html for details.", + ) + parser.add_argument( + "--options", nargs="+", action=DictAction, help="custom options" + ) + return parser + + +def default_config_parser(file_path, options): + # config name protocol: dataset_name/model_name-exp_name + if os.path.isfile(file_path): + cfg = Config.fromfile(file_path) + else: + sep = file_path.find("-") + cfg = Config.fromfile(os.path.join(file_path[:sep], file_path[sep + 1 :])) + + if options is not None: + cfg.merge_from_dict(options) + + if cfg.seed is None: + cfg.seed = get_random_seed() + + cfg.data.train.loop = cfg.epoch // cfg.eval_epoch + + os.makedirs(os.path.join(cfg.save_path, "model"), exist_ok=True) + if not cfg.resume: + cfg.dump(os.path.join(cfg.save_path, "config.py")) + return cfg + + +def default_setup(cfg): + # scalar by world size + world_size = comm.get_world_size() + cfg.num_worker = cfg.num_worker if cfg.num_worker is not None else mp.cpu_count() + cfg.num_worker_per_gpu = cfg.num_worker // world_size + assert cfg.batch_size % world_size == 0 + assert cfg.batch_size_val is None or cfg.batch_size_val % world_size == 0 + assert cfg.batch_size_test is None or cfg.batch_size_test % world_size == 0 + cfg.batch_size_per_gpu = cfg.batch_size // world_size + cfg.batch_size_val_per_gpu = ( + cfg.batch_size_val // world_size if cfg.batch_size_val is not None else 1 + ) + cfg.batch_size_test_per_gpu = ( + cfg.batch_size_test // world_size if cfg.batch_size_test is not None else 1 + ) + # update data loop + assert cfg.epoch % cfg.eval_epoch == 0 + # settle random seed + rank = comm.get_rank() + seed = None if cfg.seed is None else cfg.seed * cfg.num_worker_per_gpu + rank + set_seed(seed) + return cfg diff --git a/audio2exp-service/LAM_Audio2Expression/engines/hooks/__init__.py b/audio2exp-service/LAM_Audio2Expression/engines/hooks/__init__.py new file mode 100644 index 0000000..1ab2c4b --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/engines/hooks/__init__.py @@ -0,0 +1,5 @@ +from .default import HookBase +from .misc import * +from .evaluator import * + +from .builder import build_hooks diff --git a/audio2exp-service/LAM_Audio2Expression/engines/hooks/builder.py b/audio2exp-service/LAM_Audio2Expression/engines/hooks/builder.py new file mode 100644 index 0000000..e0a121c --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/engines/hooks/builder.py @@ -0,0 +1,15 @@ +""" +The code is base on https://github.com/Pointcept/Pointcept +""" + +from utils.registry import Registry + + +HOOKS = Registry("hooks") + + +def build_hooks(cfg): + hooks = [] + for hook_cfg in cfg: + hooks.append(HOOKS.build(hook_cfg)) + return hooks diff --git a/audio2exp-service/LAM_Audio2Expression/engines/hooks/default.py b/audio2exp-service/LAM_Audio2Expression/engines/hooks/default.py new file mode 100644 index 0000000..57150a7 --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/engines/hooks/default.py @@ -0,0 +1,29 @@ +""" +The code is base on https://github.com/Pointcept/Pointcept +""" + + +class HookBase: + """ + Base class for hooks that can be registered with :class:`TrainerBase`. + """ + + trainer = None # A weak reference to the trainer object. + + def before_train(self): + pass + + def before_epoch(self): + pass + + def before_step(self): + pass + + def after_step(self): + pass + + def after_epoch(self): + pass + + def after_train(self): + pass diff --git a/audio2exp-service/LAM_Audio2Expression/engines/hooks/evaluator.py b/audio2exp-service/LAM_Audio2Expression/engines/hooks/evaluator.py new file mode 100644 index 0000000..c0d2717 --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/engines/hooks/evaluator.py @@ -0,0 +1,577 @@ +""" +The code is base on https://github.com/Pointcept/Pointcept +""" + +import numpy as np +import torch +import torch.distributed as dist +from uuid import uuid4 + +import utils.comm as comm +from utils.misc import intersection_and_union_gpu + +from .default import HookBase +from .builder import HOOKS + + +@HOOKS.register_module() +class ClsEvaluator(HookBase): + def after_epoch(self): + if self.trainer.cfg.evaluate: + self.eval() + + def eval(self): + self.trainer.logger.info(">>>>>>>>>>>>>>>> Start Evaluation >>>>>>>>>>>>>>>>") + self.trainer.model.eval() + for i, input_dict in enumerate(self.trainer.val_loader): + for key in input_dict.keys(): + if isinstance(input_dict[key], torch.Tensor): + input_dict[key] = input_dict[key].cuda(non_blocking=True) + with torch.no_grad(): + output_dict = self.trainer.model(input_dict) + output = output_dict["cls_logits"] + loss = output_dict["loss"] + pred = output.max(1)[1] + label = input_dict["category"] + intersection, union, target = intersection_and_union_gpu( + pred, + label, + self.trainer.cfg.data.num_classes, + self.trainer.cfg.data.ignore_index, + ) + if comm.get_world_size() > 1: + dist.all_reduce(intersection), dist.all_reduce(union), dist.all_reduce( + target + ) + intersection, union, target = ( + intersection.cpu().numpy(), + union.cpu().numpy(), + target.cpu().numpy(), + ) + # Here there is no need to sync since sync happened in dist.all_reduce + self.trainer.storage.put_scalar("val_intersection", intersection) + self.trainer.storage.put_scalar("val_union", union) + self.trainer.storage.put_scalar("val_target", target) + self.trainer.storage.put_scalar("val_loss", loss.item()) + self.trainer.logger.info( + "Test: [{iter}/{max_iter}] " + "Loss {loss:.4f} ".format( + iter=i + 1, max_iter=len(self.trainer.val_loader), loss=loss.item() + ) + ) + loss_avg = self.trainer.storage.history("val_loss").avg + intersection = self.trainer.storage.history("val_intersection").total + union = self.trainer.storage.history("val_union").total + target = self.trainer.storage.history("val_target").total + iou_class = intersection / (union + 1e-10) + acc_class = intersection / (target + 1e-10) + m_iou = np.mean(iou_class) + m_acc = np.mean(acc_class) + all_acc = sum(intersection) / (sum(target) + 1e-10) + self.trainer.logger.info( + "Val result: mIoU/mAcc/allAcc {:.4f}/{:.4f}/{:.4f}.".format( + m_iou, m_acc, all_acc + ) + ) + for i in range(self.trainer.cfg.data.num_classes): + self.trainer.logger.info( + "Class_{idx}-{name} Result: iou/accuracy {iou:.4f}/{accuracy:.4f}".format( + idx=i, + name=self.trainer.cfg.data.names[i], + iou=iou_class[i], + accuracy=acc_class[i], + ) + ) + current_epoch = self.trainer.epoch + 1 + if self.trainer.writer is not None: + self.trainer.writer.add_scalar("val/loss", loss_avg, current_epoch) + self.trainer.writer.add_scalar("val/mIoU", m_iou, current_epoch) + self.trainer.writer.add_scalar("val/mAcc", m_acc, current_epoch) + self.trainer.writer.add_scalar("val/allAcc", all_acc, current_epoch) + self.trainer.logger.info("<<<<<<<<<<<<<<<<< End Evaluation <<<<<<<<<<<<<<<<<") + self.trainer.comm_info["current_metric_value"] = all_acc # save for saver + self.trainer.comm_info["current_metric_name"] = "allAcc" # save for saver + + def after_train(self): + self.trainer.logger.info( + "Best {}: {:.4f}".format("allAcc", self.trainer.best_metric_value) + ) + + +@HOOKS.register_module() +class SemSegEvaluator(HookBase): + def after_epoch(self): + if self.trainer.cfg.evaluate: + self.eval() + + def eval(self): + self.trainer.logger.info(">>>>>>>>>>>>>>>> Start Evaluation >>>>>>>>>>>>>>>>") + self.trainer.model.eval() + for i, input_dict in enumerate(self.trainer.val_loader): + for key in input_dict.keys(): + if isinstance(input_dict[key], torch.Tensor): + input_dict[key] = input_dict[key].cuda(non_blocking=True) + with torch.no_grad(): + output_dict = self.trainer.model(input_dict) + output = output_dict["seg_logits"] + loss = output_dict["loss"] + pred = output.max(1)[1] + segment = input_dict["segment"] + if "origin_coord" in input_dict.keys(): + idx, _ = pointops.knn_query( + 1, + input_dict["coord"].float(), + input_dict["offset"].int(), + input_dict["origin_coord"].float(), + input_dict["origin_offset"].int(), + ) + pred = pred[idx.flatten().long()] + segment = input_dict["origin_segment"] + intersection, union, target = intersection_and_union_gpu( + pred, + segment, + self.trainer.cfg.data.num_classes, + self.trainer.cfg.data.ignore_index, + ) + if comm.get_world_size() > 1: + dist.all_reduce(intersection), dist.all_reduce(union), dist.all_reduce( + target + ) + intersection, union, target = ( + intersection.cpu().numpy(), + union.cpu().numpy(), + target.cpu().numpy(), + ) + # Here there is no need to sync since sync happened in dist.all_reduce + self.trainer.storage.put_scalar("val_intersection", intersection) + self.trainer.storage.put_scalar("val_union", union) + self.trainer.storage.put_scalar("val_target", target) + self.trainer.storage.put_scalar("val_loss", loss.item()) + info = "Test: [{iter}/{max_iter}] ".format( + iter=i + 1, max_iter=len(self.trainer.val_loader) + ) + if "origin_coord" in input_dict.keys(): + info = "Interp. " + info + self.trainer.logger.info( + info + + "Loss {loss:.4f} ".format( + iter=i + 1, max_iter=len(self.trainer.val_loader), loss=loss.item() + ) + ) + loss_avg = self.trainer.storage.history("val_loss").avg + intersection = self.trainer.storage.history("val_intersection").total + union = self.trainer.storage.history("val_union").total + target = self.trainer.storage.history("val_target").total + iou_class = intersection / (union + 1e-10) + acc_class = intersection / (target + 1e-10) + m_iou = np.mean(iou_class) + m_acc = np.mean(acc_class) + all_acc = sum(intersection) / (sum(target) + 1e-10) + self.trainer.logger.info( + "Val result: mIoU/mAcc/allAcc {:.4f}/{:.4f}/{:.4f}.".format( + m_iou, m_acc, all_acc + ) + ) + for i in range(self.trainer.cfg.data.num_classes): + self.trainer.logger.info( + "Class_{idx}-{name} Result: iou/accuracy {iou:.4f}/{accuracy:.4f}".format( + idx=i, + name=self.trainer.cfg.data.names[i], + iou=iou_class[i], + accuracy=acc_class[i], + ) + ) + current_epoch = self.trainer.epoch + 1 + if self.trainer.writer is not None: + self.trainer.writer.add_scalar("val/loss", loss_avg, current_epoch) + self.trainer.writer.add_scalar("val/mIoU", m_iou, current_epoch) + self.trainer.writer.add_scalar("val/mAcc", m_acc, current_epoch) + self.trainer.writer.add_scalar("val/allAcc", all_acc, current_epoch) + self.trainer.logger.info("<<<<<<<<<<<<<<<<< End Evaluation <<<<<<<<<<<<<<<<<") + self.trainer.comm_info["current_metric_value"] = m_iou # save for saver + self.trainer.comm_info["current_metric_name"] = "mIoU" # save for saver + + def after_train(self): + self.trainer.logger.info( + "Best {}: {:.4f}".format("mIoU", self.trainer.best_metric_value) + ) + + +@HOOKS.register_module() +class InsSegEvaluator(HookBase): + def __init__(self, segment_ignore_index=(-1,), instance_ignore_index=-1): + self.segment_ignore_index = segment_ignore_index + self.instance_ignore_index = instance_ignore_index + + self.valid_class_names = None # update in before train + self.overlaps = np.append(np.arange(0.5, 0.95, 0.05), 0.25) + self.min_region_sizes = 100 + self.distance_threshes = float("inf") + self.distance_confs = -float("inf") + + def before_train(self): + self.valid_class_names = [ + self.trainer.cfg.data.names[i] + for i in range(self.trainer.cfg.data.num_classes) + if i not in self.segment_ignore_index + ] + + def after_epoch(self): + if self.trainer.cfg.evaluate: + self.eval() + + def associate_instances(self, pred, segment, instance): + segment = segment.cpu().numpy() + instance = instance.cpu().numpy() + void_mask = np.in1d(segment, self.segment_ignore_index) + + assert ( + pred["pred_classes"].shape[0] + == pred["pred_scores"].shape[0] + == pred["pred_masks"].shape[0] + ) + assert pred["pred_masks"].shape[1] == segment.shape[0] == instance.shape[0] + # get gt instances + gt_instances = dict() + for i in range(self.trainer.cfg.data.num_classes): + if i not in self.segment_ignore_index: + gt_instances[self.trainer.cfg.data.names[i]] = [] + instance_ids, idx, counts = np.unique( + instance, return_index=True, return_counts=True + ) + segment_ids = segment[idx] + for i in range(len(instance_ids)): + if instance_ids[i] == self.instance_ignore_index: + continue + if segment_ids[i] in self.segment_ignore_index: + continue + gt_inst = dict() + gt_inst["instance_id"] = instance_ids[i] + gt_inst["segment_id"] = segment_ids[i] + gt_inst["dist_conf"] = 0.0 + gt_inst["med_dist"] = -1.0 + gt_inst["vert_count"] = counts[i] + gt_inst["matched_pred"] = [] + gt_instances[self.trainer.cfg.data.names[segment_ids[i]]].append(gt_inst) + + # get pred instances and associate with gt + pred_instances = dict() + for i in range(self.trainer.cfg.data.num_classes): + if i not in self.segment_ignore_index: + pred_instances[self.trainer.cfg.data.names[i]] = [] + instance_id = 0 + for i in range(len(pred["pred_classes"])): + if pred["pred_classes"][i] in self.segment_ignore_index: + continue + pred_inst = dict() + pred_inst["uuid"] = uuid4() + pred_inst["instance_id"] = instance_id + pred_inst["segment_id"] = pred["pred_classes"][i] + pred_inst["confidence"] = pred["pred_scores"][i] + pred_inst["mask"] = np.not_equal(pred["pred_masks"][i], 0) + pred_inst["vert_count"] = np.count_nonzero(pred_inst["mask"]) + pred_inst["void_intersection"] = np.count_nonzero( + np.logical_and(void_mask, pred_inst["mask"]) + ) + if pred_inst["vert_count"] < self.min_region_sizes: + continue # skip if empty + segment_name = self.trainer.cfg.data.names[pred_inst["segment_id"]] + matched_gt = [] + for gt_idx, gt_inst in enumerate(gt_instances[segment_name]): + intersection = np.count_nonzero( + np.logical_and( + instance == gt_inst["instance_id"], pred_inst["mask"] + ) + ) + if intersection > 0: + gt_inst_ = gt_inst.copy() + pred_inst_ = pred_inst.copy() + gt_inst_["intersection"] = intersection + pred_inst_["intersection"] = intersection + matched_gt.append(gt_inst_) + gt_inst["matched_pred"].append(pred_inst_) + pred_inst["matched_gt"] = matched_gt + pred_instances[segment_name].append(pred_inst) + instance_id += 1 + return gt_instances, pred_instances + + def evaluate_matches(self, scenes): + overlaps = self.overlaps + min_region_sizes = [self.min_region_sizes] + dist_threshes = [self.distance_threshes] + dist_confs = [self.distance_confs] + + # results: class x overlap + ap_table = np.zeros( + (len(dist_threshes), len(self.valid_class_names), len(overlaps)), float + ) + for di, (min_region_size, distance_thresh, distance_conf) in enumerate( + zip(min_region_sizes, dist_threshes, dist_confs) + ): + for oi, overlap_th in enumerate(overlaps): + pred_visited = {} + for scene in scenes: + for _ in scene["pred"]: + for label_name in self.valid_class_names: + for p in scene["pred"][label_name]: + if "uuid" in p: + pred_visited[p["uuid"]] = False + for li, label_name in enumerate(self.valid_class_names): + y_true = np.empty(0) + y_score = np.empty(0) + hard_false_negatives = 0 + has_gt = False + has_pred = False + for scene in scenes: + pred_instances = scene["pred"][label_name] + gt_instances = scene["gt"][label_name] + # filter groups in ground truth + gt_instances = [ + gt + for gt in gt_instances + if gt["vert_count"] >= min_region_size + and gt["med_dist"] <= distance_thresh + and gt["dist_conf"] >= distance_conf + ] + if gt_instances: + has_gt = True + if pred_instances: + has_pred = True + + cur_true = np.ones(len(gt_instances)) + cur_score = np.ones(len(gt_instances)) * (-float("inf")) + cur_match = np.zeros(len(gt_instances), dtype=bool) + # collect matches + for gti, gt in enumerate(gt_instances): + found_match = False + for pred in gt["matched_pred"]: + # greedy assignments + if pred_visited[pred["uuid"]]: + continue + overlap = float(pred["intersection"]) / ( + gt["vert_count"] + + pred["vert_count"] + - pred["intersection"] + ) + if overlap > overlap_th: + confidence = pred["confidence"] + # if already have a prediction for this gt, + # the prediction with the lower score is automatically a false positive + if cur_match[gti]: + max_score = max(cur_score[gti], confidence) + min_score = min(cur_score[gti], confidence) + cur_score[gti] = max_score + # append false positive + cur_true = np.append(cur_true, 0) + cur_score = np.append(cur_score, min_score) + cur_match = np.append(cur_match, True) + # otherwise set score + else: + found_match = True + cur_match[gti] = True + cur_score[gti] = confidence + pred_visited[pred["uuid"]] = True + if not found_match: + hard_false_negatives += 1 + # remove non-matched ground truth instances + cur_true = cur_true[cur_match] + cur_score = cur_score[cur_match] + + # collect non-matched predictions as false positive + for pred in pred_instances: + found_gt = False + for gt in pred["matched_gt"]: + overlap = float(gt["intersection"]) / ( + gt["vert_count"] + + pred["vert_count"] + - gt["intersection"] + ) + if overlap > overlap_th: + found_gt = True + break + if not found_gt: + num_ignore = pred["void_intersection"] + for gt in pred["matched_gt"]: + if gt["segment_id"] in self.segment_ignore_index: + num_ignore += gt["intersection"] + # small ground truth instances + if ( + gt["vert_count"] < min_region_size + or gt["med_dist"] > distance_thresh + or gt["dist_conf"] < distance_conf + ): + num_ignore += gt["intersection"] + proportion_ignore = ( + float(num_ignore) / pred["vert_count"] + ) + # if not ignored append false positive + if proportion_ignore <= overlap_th: + cur_true = np.append(cur_true, 0) + confidence = pred["confidence"] + cur_score = np.append(cur_score, confidence) + + # append to overall results + y_true = np.append(y_true, cur_true) + y_score = np.append(y_score, cur_score) + + # compute average precision + if has_gt and has_pred: + # compute precision recall curve first + + # sorting and cumsum + score_arg_sort = np.argsort(y_score) + y_score_sorted = y_score[score_arg_sort] + y_true_sorted = y_true[score_arg_sort] + y_true_sorted_cumsum = np.cumsum(y_true_sorted) + + # unique thresholds + (thresholds, unique_indices) = np.unique( + y_score_sorted, return_index=True + ) + num_prec_recall = len(unique_indices) + 1 + + # prepare precision recall + num_examples = len(y_score_sorted) + # https://github.com/ScanNet/ScanNet/pull/26 + # all predictions are non-matched but also all of them are ignored and not counted as FP + # y_true_sorted_cumsum is empty + # num_true_examples = y_true_sorted_cumsum[-1] + num_true_examples = ( + y_true_sorted_cumsum[-1] + if len(y_true_sorted_cumsum) > 0 + else 0 + ) + precision = np.zeros(num_prec_recall) + recall = np.zeros(num_prec_recall) + + # deal with the first point + y_true_sorted_cumsum = np.append(y_true_sorted_cumsum, 0) + # deal with remaining + for idx_res, idx_scores in enumerate(unique_indices): + cumsum = y_true_sorted_cumsum[idx_scores - 1] + tp = num_true_examples - cumsum + fp = num_examples - idx_scores - tp + fn = cumsum + hard_false_negatives + p = float(tp) / (tp + fp) + r = float(tp) / (tp + fn) + precision[idx_res] = p + recall[idx_res] = r + + # first point in curve is artificial + precision[-1] = 1.0 + recall[-1] = 0.0 + + # compute average of precision-recall curve + recall_for_conv = np.copy(recall) + recall_for_conv = np.append(recall_for_conv[0], recall_for_conv) + recall_for_conv = np.append(recall_for_conv, 0.0) + + stepWidths = np.convolve( + recall_for_conv, [-0.5, 0, 0.5], "valid" + ) + # integrate is now simply a dot product + ap_current = np.dot(precision, stepWidths) + + elif has_gt: + ap_current = 0.0 + else: + ap_current = float("nan") + ap_table[di, li, oi] = ap_current + d_inf = 0 + o50 = np.where(np.isclose(self.overlaps, 0.5)) + o25 = np.where(np.isclose(self.overlaps, 0.25)) + oAllBut25 = np.where(np.logical_not(np.isclose(self.overlaps, 0.25))) + ap_scores = dict() + ap_scores["all_ap"] = np.nanmean(ap_table[d_inf, :, oAllBut25]) + ap_scores["all_ap_50%"] = np.nanmean(ap_table[d_inf, :, o50]) + ap_scores["all_ap_25%"] = np.nanmean(ap_table[d_inf, :, o25]) + ap_scores["classes"] = {} + for li, label_name in enumerate(self.valid_class_names): + ap_scores["classes"][label_name] = {} + ap_scores["classes"][label_name]["ap"] = np.average( + ap_table[d_inf, li, oAllBut25] + ) + ap_scores["classes"][label_name]["ap50%"] = np.average( + ap_table[d_inf, li, o50] + ) + ap_scores["classes"][label_name]["ap25%"] = np.average( + ap_table[d_inf, li, o25] + ) + return ap_scores + + def eval(self): + self.trainer.logger.info(">>>>>>>>>>>>>>>> Start Evaluation >>>>>>>>>>>>>>>>") + self.trainer.model.eval() + scenes = [] + for i, input_dict in enumerate(self.trainer.val_loader): + assert ( + len(input_dict["offset"]) == 1 + ) # currently only support bs 1 for each GPU + for key in input_dict.keys(): + if isinstance(input_dict[key], torch.Tensor): + input_dict[key] = input_dict[key].cuda(non_blocking=True) + with torch.no_grad(): + output_dict = self.trainer.model(input_dict) + + loss = output_dict["loss"] + + segment = input_dict["segment"] + instance = input_dict["instance"] + # map to origin + if "origin_coord" in input_dict.keys(): + idx, _ = pointops.knn_query( + 1, + input_dict["coord"].float(), + input_dict["offset"].int(), + input_dict["origin_coord"].float(), + input_dict["origin_offset"].int(), + ) + idx = idx.cpu().flatten().long() + output_dict["pred_masks"] = output_dict["pred_masks"][:, idx] + segment = input_dict["origin_segment"] + instance = input_dict["origin_instance"] + + gt_instances, pred_instance = self.associate_instances( + output_dict, segment, instance + ) + scenes.append(dict(gt=gt_instances, pred=pred_instance)) + + self.trainer.storage.put_scalar("val_loss", loss.item()) + self.trainer.logger.info( + "Test: [{iter}/{max_iter}] " + "Loss {loss:.4f} ".format( + iter=i + 1, max_iter=len(self.trainer.val_loader), loss=loss.item() + ) + ) + + loss_avg = self.trainer.storage.history("val_loss").avg + comm.synchronize() + scenes_sync = comm.gather(scenes, dst=0) + scenes = [scene for scenes_ in scenes_sync for scene in scenes_] + ap_scores = self.evaluate_matches(scenes) + all_ap = ap_scores["all_ap"] + all_ap_50 = ap_scores["all_ap_50%"] + all_ap_25 = ap_scores["all_ap_25%"] + self.trainer.logger.info( + "Val result: mAP/AP50/AP25 {:.4f}/{:.4f}/{:.4f}.".format( + all_ap, all_ap_50, all_ap_25 + ) + ) + for i, label_name in enumerate(self.valid_class_names): + ap = ap_scores["classes"][label_name]["ap"] + ap_50 = ap_scores["classes"][label_name]["ap50%"] + ap_25 = ap_scores["classes"][label_name]["ap25%"] + self.trainer.logger.info( + "Class_{idx}-{name} Result: AP/AP50/AP25 {AP:.4f}/{AP50:.4f}/{AP25:.4f}".format( + idx=i, name=label_name, AP=ap, AP50=ap_50, AP25=ap_25 + ) + ) + current_epoch = self.trainer.epoch + 1 + if self.trainer.writer is not None: + self.trainer.writer.add_scalar("val/loss", loss_avg, current_epoch) + self.trainer.writer.add_scalar("val/mAP", all_ap, current_epoch) + self.trainer.writer.add_scalar("val/AP50", all_ap_50, current_epoch) + self.trainer.writer.add_scalar("val/AP25", all_ap_25, current_epoch) + self.trainer.logger.info("<<<<<<<<<<<<<<<<< End Evaluation <<<<<<<<<<<<<<<<<") + self.trainer.comm_info["current_metric_value"] = all_ap_50 # save for saver + self.trainer.comm_info["current_metric_name"] = "AP50" # save for saver diff --git a/audio2exp-service/LAM_Audio2Expression/engines/hooks/misc.py b/audio2exp-service/LAM_Audio2Expression/engines/hooks/misc.py new file mode 100644 index 0000000..52b398e --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/engines/hooks/misc.py @@ -0,0 +1,460 @@ +""" +The code is base on https://github.com/Pointcept/Pointcept +""" + +import sys +import glob +import os +import shutil +import time +import torch +import torch.utils.data +from collections import OrderedDict + +if sys.version_info >= (3, 10): + from collections.abc import Sequence +else: + from collections import Sequence +from utils.timer import Timer +from utils.comm import is_main_process, synchronize, get_world_size +from utils.cache import shared_dict + +import utils.comm as comm +from engines.test import TESTERS + +from .default import HookBase +from .builder import HOOKS + + +@HOOKS.register_module() +class IterationTimer(HookBase): + def __init__(self, warmup_iter=1): + self._warmup_iter = warmup_iter + self._start_time = time.perf_counter() + self._iter_timer = Timer() + self._remain_iter = 0 + + def before_train(self): + self._start_time = time.perf_counter() + self._remain_iter = self.trainer.max_epoch * len(self.trainer.train_loader) + + def before_epoch(self): + self._iter_timer.reset() + + def before_step(self): + data_time = self._iter_timer.seconds() + self.trainer.storage.put_scalar("data_time", data_time) + + def after_step(self): + batch_time = self._iter_timer.seconds() + self._iter_timer.reset() + self.trainer.storage.put_scalar("batch_time", batch_time) + self._remain_iter -= 1 + remain_time = self._remain_iter * self.trainer.storage.history("batch_time").avg + t_m, t_s = divmod(remain_time, 60) + t_h, t_m = divmod(t_m, 60) + remain_time = "{:02d}:{:02d}:{:02d}".format(int(t_h), int(t_m), int(t_s)) + if "iter_info" in self.trainer.comm_info.keys(): + info = ( + "Data {data_time_val:.3f} ({data_time_avg:.3f}) " + "Batch {batch_time_val:.3f} ({batch_time_avg:.3f}) " + "Remain {remain_time} ".format( + data_time_val=self.trainer.storage.history("data_time").val, + data_time_avg=self.trainer.storage.history("data_time").avg, + batch_time_val=self.trainer.storage.history("batch_time").val, + batch_time_avg=self.trainer.storage.history("batch_time").avg, + remain_time=remain_time, + ) + ) + self.trainer.comm_info["iter_info"] += info + if self.trainer.comm_info["iter"] <= self._warmup_iter: + self.trainer.storage.history("data_time").reset() + self.trainer.storage.history("batch_time").reset() + + +@HOOKS.register_module() +class InformationWriter(HookBase): + def __init__(self): + self.curr_iter = 0 + self.model_output_keys = [] + + def before_train(self): + self.trainer.comm_info["iter_info"] = "" + self.curr_iter = self.trainer.start_epoch * len(self.trainer.train_loader) + + def before_step(self): + self.curr_iter += 1 + # MSC pretrain do not have offset information. Comment the code for support MSC + # info = "Train: [{epoch}/{max_epoch}][{iter}/{max_iter}] " \ + # "Scan {batch_size} ({points_num}) ".format( + # epoch=self.trainer.epoch + 1, max_epoch=self.trainer.max_epoch, + # iter=self.trainer.comm_info["iter"], max_iter=len(self.trainer.train_loader), + # batch_size=len(self.trainer.comm_info["input_dict"]["offset"]), + # points_num=self.trainer.comm_info["input_dict"]["offset"][-1] + # ) + info = "Train: [{epoch}/{max_epoch}][{iter}/{max_iter}] ".format( + epoch=self.trainer.epoch + 1, + max_epoch=self.trainer.max_epoch, + iter=self.trainer.comm_info["iter"] + 1, + max_iter=len(self.trainer.train_loader), + ) + self.trainer.comm_info["iter_info"] += info + + def after_step(self): + if "model_output_dict" in self.trainer.comm_info.keys(): + model_output_dict = self.trainer.comm_info["model_output_dict"] + self.model_output_keys = model_output_dict.keys() + for key in self.model_output_keys: + self.trainer.storage.put_scalar(key, model_output_dict[key].item()) + + for key in self.model_output_keys: + self.trainer.comm_info["iter_info"] += "{key}: {value:.4f} ".format( + key=key, value=self.trainer.storage.history(key).val + ) + lr = self.trainer.optimizer.state_dict()["param_groups"][0]["lr"] + self.trainer.comm_info["iter_info"] += "Lr: {lr:.5f}".format(lr=lr) + self.trainer.logger.info(self.trainer.comm_info["iter_info"]) + self.trainer.comm_info["iter_info"] = "" # reset iter info + if self.trainer.writer is not None: + self.trainer.writer.add_scalar("lr", lr, self.curr_iter) + for key in self.model_output_keys: + self.trainer.writer.add_scalar( + "train_batch/" + key, + self.trainer.storage.history(key).val, + self.curr_iter, + ) + + def after_epoch(self): + epoch_info = "Train result: " + for key in self.model_output_keys: + epoch_info += "{key}: {value:.4f} ".format( + key=key, value=self.trainer.storage.history(key).avg + ) + self.trainer.logger.info(epoch_info) + if self.trainer.writer is not None: + for key in self.model_output_keys: + self.trainer.writer.add_scalar( + "train/" + key, + self.trainer.storage.history(key).avg, + self.trainer.epoch + 1, + ) + + +@HOOKS.register_module() +class CheckpointSaver(HookBase): + def __init__(self, save_freq=None): + self.save_freq = save_freq # None or int, None indicate only save model last + + def after_epoch(self): + if is_main_process(): + is_best = False + if self.trainer.cfg.evaluate: + current_metric_value = self.trainer.comm_info["current_metric_value"] + current_metric_name = self.trainer.comm_info["current_metric_name"] + if current_metric_value > self.trainer.best_metric_value: + self.trainer.best_metric_value = current_metric_value + is_best = True + self.trainer.logger.info( + "Best validation {} updated to: {:.4f}".format( + current_metric_name, current_metric_value + ) + ) + self.trainer.logger.info( + "Currently Best {}: {:.4f}".format( + current_metric_name, self.trainer.best_metric_value + ) + ) + + filename = os.path.join( + self.trainer.cfg.save_path, "model", "model_last.pth" + ) + self.trainer.logger.info("Saving checkpoint to: " + filename) + torch.save( + { + "epoch": self.trainer.epoch + 1, + "state_dict": self.trainer.model.state_dict(), + "optimizer": self.trainer.optimizer.state_dict(), + "scheduler": self.trainer.scheduler.state_dict(), + "scaler": self.trainer.scaler.state_dict() + if self.trainer.cfg.enable_amp + else None, + "best_metric_value": self.trainer.best_metric_value, + }, + filename + ".tmp", + ) + os.replace(filename + ".tmp", filename) + if is_best: + shutil.copyfile( + filename, + os.path.join(self.trainer.cfg.save_path, "model", "model_best.pth"), + ) + if self.save_freq and (self.trainer.epoch + 1) % self.save_freq == 0: + shutil.copyfile( + filename, + os.path.join( + self.trainer.cfg.save_path, + "model", + f"epoch_{self.trainer.epoch + 1}.pth", + ), + ) + + +@HOOKS.register_module() +class CheckpointLoader(HookBase): + def __init__(self, keywords="", replacement=None, strict=False): + self.keywords = keywords + self.replacement = replacement if replacement is not None else keywords + self.strict = strict + + def before_train(self): + self.trainer.logger.info("=> Loading checkpoint & weight ...") + if self.trainer.cfg.weight and os.path.isfile(self.trainer.cfg.weight): + self.trainer.logger.info(f"Loading weight at: {self.trainer.cfg.weight}") + checkpoint = torch.load( + self.trainer.cfg.weight, + map_location=lambda storage, loc: storage.cuda(), + ) + self.trainer.logger.info( + f"Loading layer weights with keyword: {self.keywords}, " + f"replace keyword with: {self.replacement}" + ) + weight = OrderedDict() + for key, value in checkpoint["state_dict"].items(): + if not key.startswith("module."): + if comm.get_world_size() > 1: + key = "module." + key # xxx.xxx -> module.xxx.xxx + # Now all keys contain "module." no matter DDP or not. + if self.keywords in key: + key = key.replace(self.keywords, self.replacement) + if comm.get_world_size() == 1: + key = key[7:] # module.xxx.xxx -> xxx.xxx + weight[key] = value + load_state_info = self.trainer.model.load_state_dict( + weight, strict=self.strict + ) + self.trainer.logger.info(f"Missing keys: {load_state_info[0]}") + if self.trainer.cfg.resume: + self.trainer.logger.info( + f"Resuming train at eval epoch: {checkpoint['epoch']}" + ) + self.trainer.start_epoch = checkpoint["epoch"] + self.trainer.best_metric_value = checkpoint["best_metric_value"] + self.trainer.optimizer.load_state_dict(checkpoint["optimizer"]) + self.trainer.scheduler.load_state_dict(checkpoint["scheduler"]) + if self.trainer.cfg.enable_amp: + self.trainer.scaler.load_state_dict(checkpoint["scaler"]) + else: + self.trainer.logger.info(f"No weight found at: {self.trainer.cfg.weight}") + + +@HOOKS.register_module() +class PreciseEvaluator(HookBase): + def __init__(self, test_last=False): + self.test_last = test_last + + def after_train(self): + self.trainer.logger.info( + ">>>>>>>>>>>>>>>> Start Precise Evaluation >>>>>>>>>>>>>>>>" + ) + torch.cuda.empty_cache() + cfg = self.trainer.cfg + tester = TESTERS.build( + dict(type=cfg.test.type, cfg=cfg, model=self.trainer.model) + ) + if self.test_last: + self.trainer.logger.info("=> Testing on model_last ...") + else: + self.trainer.logger.info("=> Testing on model_best ...") + best_path = os.path.join( + self.trainer.cfg.save_path, "model", "model_best.pth" + ) + checkpoint = torch.load(best_path) + state_dict = checkpoint["state_dict"] + tester.model.load_state_dict(state_dict, strict=True) + tester.test() + + +@HOOKS.register_module() +class DataCacheOperator(HookBase): + def __init__(self, data_root, split): + self.data_root = data_root + self.split = split + self.data_list = self.get_data_list() + + def get_data_list(self): + if isinstance(self.split, str): + data_list = glob.glob(os.path.join(self.data_root, self.split, "*.pth")) + elif isinstance(self.split, Sequence): + data_list = [] + for split in self.split: + data_list += glob.glob(os.path.join(self.data_root, split, "*.pth")) + else: + raise NotImplementedError + return data_list + + def get_cache_name(self, data_path): + data_name = data_path.replace(os.path.dirname(self.data_root), "").split(".")[0] + return "pointcept" + data_name.replace(os.path.sep, "-") + + def before_train(self): + self.trainer.logger.info( + f"=> Caching dataset: {self.data_root}, split: {self.split} ..." + ) + if is_main_process(): + for data_path in self.data_list: + cache_name = self.get_cache_name(data_path) + data = torch.load(data_path) + shared_dict(cache_name, data) + synchronize() + + +@HOOKS.register_module() +class RuntimeProfiler(HookBase): + def __init__( + self, + forward=True, + backward=True, + interrupt=False, + warm_up=2, + sort_by="cuda_time_total", + row_limit=30, + ): + self.forward = forward + self.backward = backward + self.interrupt = interrupt + self.warm_up = warm_up + self.sort_by = sort_by + self.row_limit = row_limit + + def before_train(self): + self.trainer.logger.info("Profiling runtime ...") + from torch.profiler import profile, record_function, ProfilerActivity + + for i, input_dict in enumerate(self.trainer.train_loader): + if i == self.warm_up + 1: + break + for key in input_dict.keys(): + if isinstance(input_dict[key], torch.Tensor): + input_dict[key] = input_dict[key].cuda(non_blocking=True) + if self.forward: + with profile( + activities=[ProfilerActivity.CPU, ProfilerActivity.CUDA], + record_shapes=True, + profile_memory=True, + with_stack=True, + ) as forward_prof: + with record_function("model_inference"): + output_dict = self.trainer.model(input_dict) + else: + output_dict = self.trainer.model(input_dict) + loss = output_dict["loss"] + if self.backward: + with profile( + activities=[ProfilerActivity.CPU, ProfilerActivity.CUDA], + record_shapes=True, + profile_memory=True, + with_stack=True, + ) as backward_prof: + with record_function("model_inference"): + loss.backward() + self.trainer.logger.info(f"Profile: [{i + 1}/{self.warm_up + 1}]") + if self.forward: + self.trainer.logger.info( + "Forward profile: \n" + + str( + forward_prof.key_averages().table( + sort_by=self.sort_by, row_limit=self.row_limit + ) + ) + ) + forward_prof.export_chrome_trace( + os.path.join(self.trainer.cfg.save_path, "forward_trace.json") + ) + + if self.backward: + self.trainer.logger.info( + "Backward profile: \n" + + str( + backward_prof.key_averages().table( + sort_by=self.sort_by, row_limit=self.row_limit + ) + ) + ) + backward_prof.export_chrome_trace( + os.path.join(self.trainer.cfg.save_path, "backward_trace.json") + ) + if self.interrupt: + sys.exit(0) + + +@HOOKS.register_module() +class RuntimeProfilerV2(HookBase): + def __init__( + self, + interrupt=False, + wait=1, + warmup=1, + active=10, + repeat=1, + sort_by="cuda_time_total", + row_limit=30, + ): + self.interrupt = interrupt + self.wait = wait + self.warmup = warmup + self.active = active + self.repeat = repeat + self.sort_by = sort_by + self.row_limit = row_limit + + def before_train(self): + self.trainer.logger.info("Profiling runtime ...") + from torch.profiler import ( + profile, + record_function, + ProfilerActivity, + schedule, + tensorboard_trace_handler, + ) + + prof = profile( + activities=[ProfilerActivity.CPU, ProfilerActivity.CUDA], + schedule=schedule( + wait=self.wait, + warmup=self.warmup, + active=self.active, + repeat=self.repeat, + ), + on_trace_ready=tensorboard_trace_handler(self.trainer.cfg.save_path), + record_shapes=True, + profile_memory=True, + with_stack=True, + ) + prof.start() + for i, input_dict in enumerate(self.trainer.train_loader): + if i >= (self.wait + self.warmup + self.active) * self.repeat: + break + for key in input_dict.keys(): + if isinstance(input_dict[key], torch.Tensor): + input_dict[key] = input_dict[key].cuda(non_blocking=True) + with record_function("model_forward"): + output_dict = self.trainer.model(input_dict) + loss = output_dict["loss"] + with record_function("model_backward"): + loss.backward() + prof.step() + self.trainer.logger.info( + f"Profile: [{i + 1}/{(self.wait + self.warmup + self.active) * self.repeat}]" + ) + self.trainer.logger.info( + "Profile: \n" + + str( + prof.key_averages().table( + sort_by=self.sort_by, row_limit=self.row_limit + ) + ) + ) + prof.stop() + + if self.interrupt: + sys.exit(0) diff --git a/audio2exp-service/LAM_Audio2Expression/engines/infer.py b/audio2exp-service/LAM_Audio2Expression/engines/infer.py new file mode 100644 index 0000000..236671e --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/engines/infer.py @@ -0,0 +1,295 @@ +""" +Copyright 2024-2025 The Alibaba 3DAIGC Team Authors. All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +""" + +import os +import math +import time +import librosa +import numpy as np +from collections import OrderedDict + +import torch +import torch.utils.data +import torch.nn.functional as F + +from .defaults import create_ddp_model +import utils.comm as comm +from models import build_model +from utils.logger import get_root_logger +from utils.registry import Registry +from utils.misc import ( + AverageMeter, +) + +from models.utils import smooth_mouth_movements, apply_frame_blending, apply_savitzky_golay_smoothing, apply_random_brow_movement, \ + symmetrize_blendshapes, apply_random_eye_blinks, apply_random_eye_blinks_context, export_blendshape_animation, \ + RETURN_CODE, DEFAULT_CONTEXT, ARKitBlendShape + +INFER = Registry("infer") + +# Device detection for CPU/GPU support +def get_device(): + """Get the best available device (CUDA or CPU)""" + if torch.cuda.is_available(): + return torch.device('cuda') + else: + return torch.device('cpu') + +class InferBase: + def __init__(self, cfg, model=None, verbose=False) -> None: + torch.multiprocessing.set_sharing_strategy("file_system") + self.device = get_device() + self.logger = get_root_logger( + log_file=os.path.join(cfg.save_path, "infer.log"), + file_mode="a" if cfg.resume else "w", + ) + self.logger.info("=> Loading config ...") + self.logger.info(f"=> Using device: {self.device}") + self.cfg = cfg + self.verbose = verbose + if self.verbose: + self.logger.info(f"Save path: {cfg.save_path}") + self.logger.info(f"Config:\n{cfg.pretty_text}") + if model is None: + self.logger.info("=> Building model ...") + self.model = self.build_model() + else: + self.model = model + + def build_model(self): + model = build_model(self.cfg.model) + n_parameters = sum(p.numel() for p in model.parameters() if p.requires_grad) + self.logger.info(f"Num params: {n_parameters}") + model = create_ddp_model( + model.to(self.device), + broadcast_buffers=False, + find_unused_parameters=self.cfg.find_unused_parameters, + ) + if os.path.isfile(self.cfg.weight): + self.logger.info(f"Loading weight at: {self.cfg.weight}") + checkpoint = torch.load(self.cfg.weight, map_location=self.device, weights_only=False) + weight = OrderedDict() + for key, value in checkpoint["state_dict"].items(): + if key.startswith("module."): + if comm.get_world_size() == 1: + key = key[7:] # module.xxx.xxx -> xxx.xxx + else: + if comm.get_world_size() > 1: + key = "module." + key # xxx.xxx -> module.xxx.xxx + weight[key] = value + model.load_state_dict(weight, strict=True) + self.logger.info( + "=> Loaded weight '{}'".format( + self.cfg.weight + ) + ) + else: + raise RuntimeError("=> No checkpoint found at '{}'".format(self.cfg.weight)) + return model + + + def infer(self): + raise NotImplementedError + + + +@INFER.register_module() +class Audio2ExpressionInfer(InferBase): + def infer(self): + logger = get_root_logger() + logger.info(">>>>>>>>>>>>>>>> Start Inference >>>>>>>>>>>>>>>>") + batch_time = AverageMeter() + self.model.eval() + + # process audio-input + assert os.path.exists(self.cfg.audio_input) + if(self.cfg.ex_vol): + logger.info("Extract vocals ...") + vocal_path = self.extract_vocal_track(self.cfg.audio_input) + logger.info("=> Extract vocals at: {}".format(vocal_path if os.path.exists(vocal_path) else '... Failed')) + if(os.path.exists(vocal_path)): + self.cfg.audio_input = vocal_path + + with torch.no_grad(): + input_dict = {} + input_dict['id_idx'] = F.one_hot(torch.tensor(self.cfg.id_idx), + self.cfg.model.backbone.num_identity_classes).to(self.device)[None,...] + speech_array, ssr = librosa.load(self.cfg.audio_input, sr=16000) + input_dict['input_audio_array'] = torch.FloatTensor(speech_array).to(self.device)[None,...] + + end = time.time() + output_dict = self.model(input_dict) + batch_time.update(time.time() - end) + + logger.info( + "Infer: [{}] " + "Running Time: {batch_time.avg:.3f} ".format( + self.cfg.audio_input, + batch_time=batch_time, + ) + ) + + out_exp = output_dict['pred_exp'].squeeze().cpu().numpy() + + frame_length = math.ceil(speech_array.shape[0] / ssr * 30) + volume = librosa.feature.rms(y=speech_array, frame_length=int(1 / 30 * ssr), hop_length=int(1 / 30 * ssr))[0] + if (volume.shape[0] > frame_length): + volume = volume[:frame_length] + + if(self.cfg.movement_smooth): + out_exp = smooth_mouth_movements(out_exp, 0, volume) + + if (self.cfg.brow_movement): + out_exp = apply_random_brow_movement(out_exp, volume) + + pred_exp = self.blendshape_postprocess(out_exp) + + if(self.cfg.save_json_path is not None): + export_blendshape_animation(pred_exp, + self.cfg.save_json_path, + ARKitBlendShape, + fps=self.cfg.fps) + + logger.info("<<<<<<<<<<<<<<<<< End Evaluation <<<<<<<<<<<<<<<<<") + + def infer_streaming_audio(self, + audio: np.ndarray, + ssr: float, + context: dict): + + if (context is None): + context = DEFAULT_CONTEXT.copy() + max_frame_length = 64 + + frame_length = math.ceil(audio.shape[0] / ssr * 30) + output_context = DEFAULT_CONTEXT.copy() + + volume = librosa.feature.rms(y=audio, frame_length=min(int(1 / 30 * ssr), len(audio)), hop_length=int(1 / 30 * ssr))[0] + if (volume.shape[0] > frame_length): + volume = volume[:frame_length] + + # resample audio + if (ssr != self.cfg.audio_sr): + in_audio = librosa.resample(audio.astype(np.float32), orig_sr=ssr, target_sr=self.cfg.audio_sr) + else: + in_audio = audio.copy() + + start_frame = int(max_frame_length - in_audio.shape[0] / self.cfg.audio_sr * 30) + + if (context['is_initial_input'] or (context['previous_audio'] is None)): + blank_audio_length = self.cfg.audio_sr * max_frame_length // 30 - in_audio.shape[0] + blank_audio = np.zeros(blank_audio_length, dtype=np.float32) + + # pre-append + input_audio = np.concatenate([blank_audio, in_audio]) + output_context['previous_audio'] = input_audio + + else: + clip_pre_audio_length = self.cfg.audio_sr * max_frame_length // 30 - in_audio.shape[0] + clip_pre_audio = context['previous_audio'][-clip_pre_audio_length:] + input_audio = np.concatenate([clip_pre_audio, in_audio]) + output_context['previous_audio'] = input_audio + + with torch.no_grad(): + try: + input_dict = {} + input_dict['id_idx'] = F.one_hot(torch.tensor(self.cfg.id_idx), + self.cfg.model.backbone.num_identity_classes).to(self.device)[ + None, ...] + input_dict['input_audio_array'] = torch.FloatTensor(input_audio).to(self.device)[None, ...] + output_dict = self.model(input_dict) + out_exp = output_dict['pred_exp'].squeeze().cpu().numpy()[start_frame:, :] + except: + self.logger.error('Error: faided to predict expression.') + output_dict['pred_exp'] = torch.zeros((max_frame_length, 52)).float() + return + + + # post-process + if (context['previous_expression'] is None): + out_exp = self.apply_expression_postprocessing(out_exp, audio_volume=volume) + else: + previous_length = context['previous_expression'].shape[0] + out_exp = self.apply_expression_postprocessing(expression_params = np.concatenate([context['previous_expression'], out_exp], axis=0), + audio_volume=np.concatenate([context['previous_volume'], volume], axis=0), + processed_frames=previous_length)[previous_length:, :] + + if (context['previous_expression'] is not None): + output_context['previous_expression'] = np.concatenate([context['previous_expression'], out_exp], axis=0)[ + -max_frame_length:, :] + output_context['previous_volume'] = np.concatenate([context['previous_volume'], volume], axis=0)[-max_frame_length:] + else: + output_context['previous_expression'] = out_exp.copy() + output_context['previous_volume'] = volume.copy() + + output_context['first_input_flag'] = False + + return {"code": RETURN_CODE['SUCCESS'], + "expression": out_exp, + "headpose": None}, output_context + def apply_expression_postprocessing( + self, + expression_params: np.ndarray, + processed_frames: int = 0, + audio_volume: np.ndarray = None + ) -> np.ndarray: + """Applies full post-processing pipeline to facial expression parameters. + + Args: + expression_params: Raw output from animation model [num_frames, num_parameters] + processed_frames: Number of frames already processed in previous batches + audio_volume: Optional volume array for audio-visual synchronization + + Returns: + Processed expression parameters ready for animation synthesis + """ + # Pipeline execution order matters - maintain sequence + expression_params = smooth_mouth_movements(expression_params, processed_frames, audio_volume) + expression_params = apply_frame_blending(expression_params, processed_frames) + expression_params, _ = apply_savitzky_golay_smoothing(expression_params, window_length=5) + expression_params = symmetrize_blendshapes(expression_params) + expression_params = apply_random_eye_blinks_context(expression_params, processed_frames=processed_frames) + + return expression_params + + def extract_vocal_track( + self, + input_audio_path: str + ) -> str: + """Isolates vocal track from audio file using source separation. + + Args: + input_audio_path: Path to input audio file containing vocals+accompaniment + + Returns: + Path to isolated vocal track in WAV format + """ + separation_command = f'spleeter separate -p spleeter:2stems -o {self.cfg.save_path} {input_audio_path}' + os.system(separation_command) + + base_name = os.path.splitext(os.path.basename(input_audio_path))[0] + return os.path.join(self.cfg.save_path, base_name, 'vocals.wav') + + def blendshape_postprocess(self, + bs_array: np.ndarray + )->np.array: + + bs_array, _ = apply_savitzky_golay_smoothing(bs_array, window_length=5) + bs_array = symmetrize_blendshapes(bs_array) + bs_array = apply_random_eye_blinks(bs_array) + + return bs_array diff --git a/audio2exp-service/LAM_Audio2Expression/engines/launch.py b/audio2exp-service/LAM_Audio2Expression/engines/launch.py new file mode 100644 index 0000000..05f5671 --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/engines/launch.py @@ -0,0 +1,135 @@ +""" +Launcher + +modified from detectron2(https://github.com/facebookresearch/detectron2) + +""" + +import os +import logging +from datetime import timedelta +import torch +import torch.distributed as dist +import torch.multiprocessing as mp + +from utils import comm + +__all__ = ["DEFAULT_TIMEOUT", "launch"] + +DEFAULT_TIMEOUT = timedelta(minutes=30) + + +def _find_free_port(): + import socket + + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + # Binding to port 0 will cause the OS to find an available port for us + sock.bind(("", 0)) + port = sock.getsockname()[1] + sock.close() + # NOTE: there is still a chance the port could be taken by other processes. + return port + + +def launch( + main_func, + num_gpus_per_machine, + num_machines=1, + machine_rank=0, + dist_url=None, + cfg=(), + timeout=DEFAULT_TIMEOUT, +): + """ + Launch multi-gpu or distributed training. + This function must be called on all machines involved in the training. + It will spawn child processes (defined by ``num_gpus_per_machine``) on each machine. + Args: + main_func: a function that will be called by `main_func(*args)` + num_gpus_per_machine (int): number of GPUs per machine + num_machines (int): the total number of machines + machine_rank (int): the rank of this machine + dist_url (str): url to connect to for distributed jobs, including protocol + e.g. "tcp://127.0.0.1:8686". + Can be set to "auto" to automatically select a free port on localhost + timeout (timedelta): timeout of the distributed workers + args (tuple): arguments passed to main_func + """ + world_size = num_machines * num_gpus_per_machine + if world_size > 1: + if dist_url == "auto": + assert ( + num_machines == 1 + ), "dist_url=auto not supported in multi-machine jobs." + port = _find_free_port() + dist_url = f"tcp://127.0.0.1:{port}" + if num_machines > 1 and dist_url.startswith("file://"): + logger = logging.getLogger(__name__) + logger.warning( + "file:// is not a reliable init_method in multi-machine jobs. Prefer tcp://" + ) + + mp.spawn( + _distributed_worker, + nprocs=num_gpus_per_machine, + args=( + main_func, + world_size, + num_gpus_per_machine, + machine_rank, + dist_url, + cfg, + timeout, + ), + daemon=False, + ) + else: + main_func(*cfg) + + +def _distributed_worker( + local_rank, + main_func, + world_size, + num_gpus_per_machine, + machine_rank, + dist_url, + cfg, + timeout=DEFAULT_TIMEOUT, +): + assert ( + torch.cuda.is_available() + ), "cuda is not available. Please check your installation." + global_rank = machine_rank * num_gpus_per_machine + local_rank + try: + dist.init_process_group( + backend="NCCL", + init_method=dist_url, + world_size=world_size, + rank=global_rank, + timeout=timeout, + ) + except Exception as e: + logger = logging.getLogger(__name__) + logger.error("Process group URL: {}".format(dist_url)) + raise e + + # Setup the local process group (which contains ranks within the same machine) + assert comm._LOCAL_PROCESS_GROUP is None + num_machines = world_size // num_gpus_per_machine + for i in range(num_machines): + ranks_on_i = list( + range(i * num_gpus_per_machine, (i + 1) * num_gpus_per_machine) + ) + pg = dist.new_group(ranks_on_i) + if i == machine_rank: + comm._LOCAL_PROCESS_GROUP = pg + + assert num_gpus_per_machine <= torch.cuda.device_count() + torch.cuda.set_device(local_rank) + + # synchronize is needed here to prevent a possible timeout after calling init_process_group + # See: https://github.com/facebookresearch/maskrcnn-benchmark/issues/172 + comm.synchronize() + + main_func(*cfg) diff --git a/audio2exp-service/LAM_Audio2Expression/engines/train.py b/audio2exp-service/LAM_Audio2Expression/engines/train.py new file mode 100644 index 0000000..7de2364 --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/engines/train.py @@ -0,0 +1,299 @@ +""" +The code is base on https://github.com/Pointcept/Pointcept +""" + +import os +import sys +import weakref +import torch +import torch.nn as nn +import torch.utils.data +from functools import partial + +if sys.version_info >= (3, 10): + from collections.abc import Iterator +else: + from collections import Iterator +from tensorboardX import SummaryWriter + +from .defaults import create_ddp_model, worker_init_fn +from .hooks import HookBase, build_hooks +import utils.comm as comm +from datasets import build_dataset, point_collate_fn, collate_fn +from models import build_model +from utils.logger import get_root_logger +from utils.optimizer import build_optimizer +from utils.scheduler import build_scheduler +from utils.events import EventStorage +from utils.registry import Registry + + +TRAINERS = Registry("trainers") + + +class TrainerBase: + def __init__(self) -> None: + self.hooks = [] + self.epoch = 0 + self.start_epoch = 0 + self.max_epoch = 0 + self.max_iter = 0 + self.comm_info = dict() + self.data_iterator: Iterator = enumerate([]) + self.storage: EventStorage + self.writer: SummaryWriter + + def register_hooks(self, hooks) -> None: + hooks = build_hooks(hooks) + for h in hooks: + assert isinstance(h, HookBase) + # To avoid circular reference, hooks and trainer cannot own each other. + # This normally does not matter, but will cause memory leak if the + # involved objects contain __del__: + # See http://engineering.hearsaysocial.com/2013/06/16/circular-references-in-python/ + h.trainer = weakref.proxy(self) + self.hooks.extend(hooks) + + def train(self): + with EventStorage() as self.storage: + # => before train + self.before_train() + for self.epoch in range(self.start_epoch, self.max_epoch): + # => before epoch + self.before_epoch() + # => run_epoch + for ( + self.comm_info["iter"], + self.comm_info["input_dict"], + ) in self.data_iterator: + # => before_step + self.before_step() + # => run_step + self.run_step() + # => after_step + self.after_step() + # => after epoch + self.after_epoch() + # => after train + self.after_train() + + def before_train(self): + for h in self.hooks: + h.before_train() + + def before_epoch(self): + for h in self.hooks: + h.before_epoch() + + def before_step(self): + for h in self.hooks: + h.before_step() + + def run_step(self): + raise NotImplementedError + + def after_step(self): + for h in self.hooks: + h.after_step() + + def after_epoch(self): + for h in self.hooks: + h.after_epoch() + self.storage.reset_histories() + + def after_train(self): + # Sync GPU before running train hooks + comm.synchronize() + for h in self.hooks: + h.after_train() + if comm.is_main_process(): + self.writer.close() + + +@TRAINERS.register_module("DefaultTrainer") +class Trainer(TrainerBase): + def __init__(self, cfg): + super(Trainer, self).__init__() + self.epoch = 0 + self.start_epoch = 0 + self.max_epoch = cfg.eval_epoch + self.best_metric_value = -torch.inf + self.logger = get_root_logger( + log_file=os.path.join(cfg.save_path, "train.log"), + file_mode="a" if cfg.resume else "w", + ) + self.logger.info("=> Loading config ...") + self.cfg = cfg + self.logger.info(f"Save path: {cfg.save_path}") + self.logger.info(f"Config:\n{cfg.pretty_text}") + self.logger.info("=> Building model ...") + self.model = self.build_model() + self.logger.info("=> Building writer ...") + self.writer = self.build_writer() + self.logger.info("=> Building train dataset & dataloader ...") + self.train_loader = self.build_train_loader() + self.logger.info("=> Building val dataset & dataloader ...") + self.val_loader = self.build_val_loader() + self.logger.info("=> Building optimize, scheduler, scaler(amp) ...") + self.optimizer = self.build_optimizer() + self.scheduler = self.build_scheduler() + self.scaler = self.build_scaler() + self.logger.info("=> Building hooks ...") + self.register_hooks(self.cfg.hooks) + + def train(self): + with EventStorage() as self.storage: + # => before train + self.before_train() + self.logger.info(">>>>>>>>>>>>>>>> Start Training >>>>>>>>>>>>>>>>") + for self.epoch in range(self.start_epoch, self.max_epoch): + # => before epoch + # TODO: optimize to iteration based + if comm.get_world_size() > 1: + self.train_loader.sampler.set_epoch(self.epoch) + self.model.train() + self.data_iterator = enumerate(self.train_loader) + self.before_epoch() + # => run_epoch + for ( + self.comm_info["iter"], + self.comm_info["input_dict"], + ) in self.data_iterator: + # => before_step + self.before_step() + # => run_step + self.run_step() + # => after_step + self.after_step() + # => after epoch + self.after_epoch() + # => after train + self.after_train() + + def run_step(self): + input_dict = self.comm_info["input_dict"] + for key in input_dict.keys(): + if isinstance(input_dict[key], torch.Tensor): + input_dict[key] = input_dict[key].cuda(non_blocking=True) + with torch.cuda.amp.autocast(enabled=self.cfg.enable_amp): + output_dict = self.model(input_dict) + loss = output_dict["loss"] + self.optimizer.zero_grad() + if self.cfg.enable_amp: + self.scaler.scale(loss).backward() + self.scaler.step(self.optimizer) + + # When enable amp, optimizer.step call are skipped if the loss scaling factor is too large. + # Fix torch warning scheduler step before optimizer step. + scaler = self.scaler.get_scale() + self.scaler.update() + if scaler <= self.scaler.get_scale(): + self.scheduler.step() + else: + loss.backward() + self.optimizer.step() + self.scheduler.step() + if self.cfg.empty_cache: + torch.cuda.empty_cache() + self.comm_info["model_output_dict"] = output_dict + + def build_model(self): + model = build_model(self.cfg.model) + if self.cfg.sync_bn: + model = nn.SyncBatchNorm.convert_sync_batchnorm(model) + n_parameters = sum(p.numel() for p in model.parameters() if p.requires_grad) + # logger.info(f"Model: \n{self.model}") + self.logger.info(f"Num params: {n_parameters}") + model = create_ddp_model( + model.cuda(), + broadcast_buffers=False, + find_unused_parameters=self.cfg.find_unused_parameters, + ) + return model + + def build_writer(self): + writer = SummaryWriter(self.cfg.save_path) if comm.is_main_process() else None + self.logger.info(f"Tensorboard writer logging dir: {self.cfg.save_path}") + return writer + + def build_train_loader(self): + train_data = build_dataset(self.cfg.data.train) + + if comm.get_world_size() > 1: + train_sampler = torch.utils.data.distributed.DistributedSampler(train_data) + else: + train_sampler = None + + init_fn = ( + partial( + worker_init_fn, + num_workers=self.cfg.num_worker_per_gpu, + rank=comm.get_rank(), + seed=self.cfg.seed, + ) + if self.cfg.seed is not None + else None + ) + + train_loader = torch.utils.data.DataLoader( + train_data, + batch_size=self.cfg.batch_size_per_gpu, + shuffle=(train_sampler is None), + num_workers=0, + sampler=train_sampler, + collate_fn=partial(point_collate_fn, mix_prob=self.cfg.mix_prob), + pin_memory=True, + worker_init_fn=init_fn, + drop_last=True, + # persistent_workers=True, + ) + return train_loader + + def build_val_loader(self): + val_loader = None + if self.cfg.evaluate: + val_data = build_dataset(self.cfg.data.val) + if comm.get_world_size() > 1: + val_sampler = torch.utils.data.distributed.DistributedSampler(val_data) + else: + val_sampler = None + val_loader = torch.utils.data.DataLoader( + val_data, + batch_size=self.cfg.batch_size_val_per_gpu, + shuffle=False, + num_workers=self.cfg.num_worker_per_gpu, + pin_memory=True, + sampler=val_sampler, + collate_fn=collate_fn, + ) + return val_loader + + def build_optimizer(self): + return build_optimizer(self.cfg.optimizer, self.model, self.cfg.param_dicts) + + def build_scheduler(self): + assert hasattr(self, "optimizer") + assert hasattr(self, "train_loader") + self.cfg.scheduler.total_steps = len(self.train_loader) * self.cfg.eval_epoch + return build_scheduler(self.cfg.scheduler, self.optimizer) + + def build_scaler(self): + scaler = torch.cuda.amp.GradScaler() if self.cfg.enable_amp else None + return scaler + + +@TRAINERS.register_module("MultiDatasetTrainer") +class MultiDatasetTrainer(Trainer): + def build_train_loader(self): + from datasets import MultiDatasetDataloader + + train_data = build_dataset(self.cfg.data.train) + train_loader = MultiDatasetDataloader( + train_data, + self.cfg.batch_size_per_gpu, + self.cfg.num_worker_per_gpu, + self.cfg.mix_prob, + self.cfg.seed, + ) + self.comm_info["iter_per_epoch"] = len(train_loader) + return train_loader diff --git a/audio2exp-service/LAM_Audio2Expression/inference.py b/audio2exp-service/LAM_Audio2Expression/inference.py new file mode 100644 index 0000000..37ac22e --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/inference.py @@ -0,0 +1,48 @@ +""" +# Copyright 2024-2025 The Alibaba 3DAIGC Team Authors. All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +""" + +from engines.defaults import ( + default_argument_parser, + default_config_parser, + default_setup, +) +from engines.infer import INFER +from engines.launch import launch + + +def main_worker(cfg): + cfg = default_setup(cfg) + infer = INFER.build(dict(type=cfg.infer.type, cfg=cfg)) + infer.infer() + + +def main(): + args = default_argument_parser().parse_args() + cfg = default_config_parser(args.config_file, args.options) + + launch( + main_worker, + num_gpus_per_machine=args.num_gpus, + num_machines=args.num_machines, + machine_rank=args.machine_rank, + dist_url=args.dist_url, + cfg=(cfg,), + ) + + +if __name__ == "__main__": + main() diff --git a/audio2exp-service/LAM_Audio2Expression/inference_streaming_audio.py b/audio2exp-service/LAM_Audio2Expression/inference_streaming_audio.py new file mode 100644 index 0000000..c14b084 --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/inference_streaming_audio.py @@ -0,0 +1,60 @@ +""" +# Copyright 2024-2025 The Alibaba 3DAIGC Team Authors. All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +""" + +import numpy as np + +from engines.defaults import ( + default_argument_parser, + default_config_parser, + default_setup, +) +from engines.infer import INFER +import librosa +from tqdm import tqdm +import time + + +def export_json(bs_array, json_path): + from models.utils import export_blendshape_animation, ARKitBlendShape + export_blendshape_animation(bs_array, json_path, ARKitBlendShape, fps=30.0) + +if __name__ == '__main__': + args = default_argument_parser().parse_args() + args.config_file = 'configs/lam_audio2exp_config_streaming.py' + cfg = default_config_parser(args.config_file, args.options) + + + cfg = default_setup(cfg) + infer = INFER.build(dict(type=cfg.infer.type, cfg=cfg)) + infer.model.eval() + + audio, sample_rate = librosa.load(cfg.audio_input, sr=16000) + context = None + input_num = audio.shape[0]//16000+1 + gap = 16000 + all_exp = [] + for i in tqdm(range(input_num)): + + start = time.time() + output, context = infer.infer_streaming_audio(audio[i*gap:(i+1)*gap], sample_rate, context) + end = time.time() + print('Inference time {}'.format(end - start)) + all_exp.append(output['expression']) + + all_exp = np.concatenate(all_exp,axis=0) + + export_json(all_exp, cfg.save_json_path) \ No newline at end of file diff --git a/audio2exp-service/LAM_Audio2Expression/lam_modal.py b/audio2exp-service/LAM_Audio2Expression/lam_modal.py new file mode 100644 index 0000000..d50f746 --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/lam_modal.py @@ -0,0 +1,189 @@ +import os +import sys +import subprocess +import time +import shutil +import modal +import base64 + +# アプリ名を変更 +app = modal.App("lam-final-v33-ui-fix-v2") + +# --- 事前チェック --- +local_assets_path = "./assets/human_parametric_models/flame_assets/flame/flame2023.pkl" +if __name__ == "__main__": + if not os.path.exists(local_assets_path): + print(f"❌ CRITICAL ERROR: Local asset not found at: {local_assets_path}") + sys.exit(1) + +# --- UI修復パッチ (Base64) --- +# 1. GradioのExamplesを無効化 +# 2. サーバーポートを8080に固定 +PATCH_SCRIPT = """ +import re +import os + +path = '/root/LAM/app_lam.py' +if os.path.exists(path): + print("🛠️ Applying UI patch...") + with open(path, 'r') as f: + code = f.read() + + # 1. Examples機能を無効化するコードを注入 + patch_code = ''' +import gradio as gr +# --- PATCH START --- +try: + class DummyExamples: + def __init__(self, *args, **kwargs): pass + def attach_load_event(self, *args, **kwargs): pass + def render(self): pass + gr.Examples = DummyExamples + print("✅ Gradio Examples disabled to prevent UI crash.") +except Exception as e: + print(f"⚠️ Failed to disable examples: {e}") +# --- PATCH END --- +''' + code = code.replace('import gradio as gr', patch_code) + + # 2. 起動設定の強制書き換え + if '.launch(' in code: + code = re.sub(r'\.launch\s*\(', ".launch(server_name='0.0.0.0', server_port=8080, ", code) + print("✅ Server port forced to 8080.") + + with open(path, 'w') as f: + f.write(code) + print("🚀 Patch applied successfully.") +""" + +# スクリプトをBase64化 +patch_b64 = base64.b64encode(PATCH_SCRIPT.encode('utf-8')).decode('utf-8') +patch_cmd = f"python -c \"import base64; exec(base64.b64decode('{patch_b64}'))\"" + + +# --- 1. 環境構築 --- +image = ( + modal.Image.from_registry("nvidia/cuda:11.8.0-devel-ubuntu22.04", add_python="3.10") + .apt_install( + "git", "libgl1-mesa-glx", "libglib2.0-0", "ffmpeg", "wget", "tree", + "libusb-1.0-0", "build-essential", "ninja-build", + "clang", "llvm", "libclang-dev" + ) + + # 1. Base setup + .run_commands( + "python -m pip install --upgrade pip setuptools wheel", + "pip install 'numpy==1.23.5'" + ) + # 2. PyTorch 2.2.0 + .run_commands( + "pip install torch==2.2.0 torchvision==0.17.0 torchaudio==2.2.0 --index-url https://download.pytorch.org/whl/cu118" + ) + + # 3. Build Environment + .env({ + "FORCE_CUDA": "1", + "CUDA_HOME": "/usr/local/cuda", + "MAX_JOBS": "4", + "TORCH_CUDA_ARCH_LIST": "8.6", + "CC": "clang", + "CXX": "clang++" + }) + + # 4. Critical Build (no-build-isolation) + .run_commands( + "pip install chumpy==0.70 --no-build-isolation", + "pip install git+https://github.com/facebookresearch/pytorch3d.git@v0.7.7 --no-build-isolation" + ) + + # 5. Dependencies + .pip_install( + "gradio==3.50.2", + "omegaconf==2.3.0", + "pandas", + "scipy<1.14.0", + "opencv-python-headless", + "imageio[ffmpeg]", + "moviepy==1.0.3", + "rembg[gpu]", + "scikit-image", + "pillow", + "onnxruntime-gpu", + "huggingface_hub>=0.24.0", + "filelock", + "typeguard", + + "transformers==4.44.2", + "diffusers==0.30.3", + "accelerate==0.34.2", + "tyro==0.8.0", + "mediapipe==0.10.21", + + "tensorboard", + "rich", + "loguru", + "Cython", + "PyMCubes", + "trimesh", + "einops", + "plyfile", + "jaxtyping", + "ninja", + "numpy==1.23.5" + ) + + # 6. LAM 3D Libs + .run_commands( + "pip install git+https://github.com/ashawkey/diff-gaussian-rasterization.git --no-build-isolation", + "pip install git+https://github.com/ShenhanQian/nvdiffrast.git@backface-culling --no-build-isolation" + ) + + # 7. LAM Setup with UI Patch + .run_commands( + "mkdir -p /root/LAM", + "rm -rf /root/LAM", + "git clone https://github.com/aigc3d/LAM.git /root/LAM", + + # cpu_nms ビルド + "cd /root/LAM/external/landmark_detection/FaceBoxesV2/utils/nms && " + "echo \"from setuptools import setup, Extension; from Cython.Build import cythonize; import numpy; setup(ext_modules=cythonize([Extension('cpu_nms', ['cpu_nms.pyx'])]), include_dirs=[numpy.get_include()])\" > setup.py && " + "python setup.py build_ext --inplace", + + # ★パッチ適用(UIのサンプル機能を無効化) + patch_cmd + ) +) + +# --- 2. サーバー準備 --- +def setup_server(): + from huggingface_hub import snapshot_download + print("📥 Downloading checkpoints...") + try: + snapshot_download( + repo_id="3DAIGC/LAM-20K", + local_dir="/root/LAM/model_zoo/lam_models/releases/lam/lam-20k/step_045500", + local_dir_use_symlinks=False + ) + except Exception as e: + print(f"Checkpoints download warning: {e}") + +image = ( + image + .run_function(setup_server) + .add_local_dir("./assets", remote_path="/root/LAM/model_zoo", copy=True) +) + +# --- 3. アプリ起動 --- +@app.function( + image=image, + gpu="A10G", + timeout=3600 +) +@modal.web_server(8080) +def ui(): + os.chdir("/root/LAM") + import sys + print(f"🚀 Launching LAM App (Python {sys.version})") + + cmd = "python -u app_lam.py" + subprocess.Popen(cmd, shell=True, stdout=sys.stdout, stderr=sys.stderr).wait() \ No newline at end of file diff --git a/audio2exp-service/LAM_Audio2Expression/models/__init__.py b/audio2exp-service/LAM_Audio2Expression/models/__init__.py new file mode 100644 index 0000000..f4beb83 --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/models/__init__.py @@ -0,0 +1,7 @@ +from .builder import build_model + +from .default import DefaultEstimator + +# Backbones +from .network import Audio2Expression + diff --git a/audio2exp-service/LAM_Audio2Expression/models/builder.py b/audio2exp-service/LAM_Audio2Expression/models/builder.py new file mode 100644 index 0000000..eed2627 --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/models/builder.py @@ -0,0 +1,13 @@ +""" +Modified by https://github.com/Pointcept/Pointcept +""" + +from utils.registry import Registry + +MODELS = Registry("models") +MODULES = Registry("modules") + + +def build_model(cfg): + """Build models.""" + return MODELS.build(cfg) diff --git a/audio2exp-service/LAM_Audio2Expression/models/default.py b/audio2exp-service/LAM_Audio2Expression/models/default.py new file mode 100644 index 0000000..07655f6 --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/models/default.py @@ -0,0 +1,25 @@ +import torch.nn as nn + +from models.losses import build_criteria +from .builder import MODELS, build_model + +@MODELS.register_module() +class DefaultEstimator(nn.Module): + def __init__(self, backbone=None, criteria=None): + super().__init__() + self.backbone = build_model(backbone) + self.criteria = build_criteria(criteria) + + def forward(self, input_dict): + pred_exp = self.backbone(input_dict) + # train + if self.training: + loss = self.criteria(pred_exp, input_dict["gt_exp"]) + return dict(loss=loss) + # eval + elif "gt_exp" in input_dict.keys(): + loss = self.criteria(pred_exp, input_dict["gt_exp"]) + return dict(loss=loss, pred_exp=pred_exp) + # infer + else: + return dict(pred_exp=pred_exp) diff --git a/audio2exp-service/LAM_Audio2Expression/models/encoder/wav2vec.py b/audio2exp-service/LAM_Audio2Expression/models/encoder/wav2vec.py new file mode 100644 index 0000000..f11fc57 --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/models/encoder/wav2vec.py @@ -0,0 +1,248 @@ +import numpy as np +from typing import Optional, Tuple + +import torch +import torch.nn as nn +import torch.nn.functional as F +from torch.nn import BCEWithLogitsLoss, CrossEntropyLoss, MSELoss + +from dataclasses import dataclass +from transformers import Wav2Vec2Model, Wav2Vec2PreTrainedModel +from transformers.modeling_outputs import BaseModelOutput +from transformers.file_utils import ModelOutput + + +_CONFIG_FOR_DOC = "Wav2Vec2Config" +_HIDDEN_STATES_START_POSITION = 2 + + +# the implementation of Wav2Vec2Model is borrowed from https://huggingface.co/transformers/_modules/transformers/models/wav2vec2/modeling_wav2vec2.html#Wav2Vec2Model +# initialize our encoder with the pre-trained wav2vec 2.0 weights. +def _compute_mask_indices( + shape: Tuple[int, int], + mask_prob: float, + mask_length: int, + attention_mask: Optional[torch.Tensor] = None, + min_masks: int = 0, +) -> np.ndarray: + bsz, all_sz = shape + mask = np.full((bsz, all_sz), False) + + all_num_mask = int( + mask_prob * all_sz / float(mask_length) + + np.random.rand() + ) + all_num_mask = max(min_masks, all_num_mask) + mask_idcs = [] + padding_mask = attention_mask.ne(1) if attention_mask is not None else None + for i in range(bsz): + if padding_mask is not None: + sz = all_sz - padding_mask[i].long().sum().item() + num_mask = int( + mask_prob * sz / float(mask_length) + + np.random.rand() + ) + num_mask = max(min_masks, num_mask) + else: + sz = all_sz + num_mask = all_num_mask + + lengths = np.full(num_mask, mask_length) + + if sum(lengths) == 0: + lengths[0] = min(mask_length, sz - 1) + + min_len = min(lengths) + if sz - min_len <= num_mask: + min_len = sz - num_mask - 1 + + mask_idc = np.random.choice(sz - min_len, num_mask, replace=False) + mask_idc = np.asarray([mask_idc[j] + offset for j in range(len(mask_idc)) for offset in range(lengths[j])]) + mask_idcs.append(np.unique(mask_idc[mask_idc < sz])) + + min_len = min([len(m) for m in mask_idcs]) + for i, mask_idc in enumerate(mask_idcs): + if len(mask_idc) > min_len: + mask_idc = np.random.choice(mask_idc, min_len, replace=False) + mask[i, mask_idc] = True + return mask + + +# linear interpolation layer +def linear_interpolation(features, input_fps, output_fps, output_len=None): + features = features.transpose(1, 2) + seq_len = features.shape[2] / float(input_fps) + if output_len is None: + output_len = int(seq_len * output_fps) + output_features = F.interpolate(features, size=output_len, align_corners=True, mode='linear') + return output_features.transpose(1, 2) + + +class Wav2Vec2Model(Wav2Vec2Model): + def __init__(self, config): + super().__init__(config) + self.lm_head = nn.Linear(1024, 32) + + def forward( + self, + input_values, + attention_mask=None, + output_attentions=None, + output_hidden_states=None, + return_dict=None, + frame_num=None + ): + self.config.output_attentions = True + output_attentions = output_attentions if output_attentions is not None else self.config.output_attentions + output_hidden_states = ( + output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states + ) + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + + hidden_states = self.feature_extractor(input_values) + hidden_states = hidden_states.transpose(1, 2) + + hidden_states = linear_interpolation(hidden_states, 50, 30, output_len=frame_num) + + if attention_mask is not None: + output_lengths = self._get_feat_extract_output_lengths(attention_mask.sum(-1)) + attention_mask = torch.zeros( + hidden_states.shape[:2], dtype=hidden_states.dtype, device=hidden_states.device + ) + attention_mask[ + (torch.arange(attention_mask.shape[0], device=hidden_states.device), output_lengths - 1) + ] = 1 + attention_mask = attention_mask.flip([-1]).cumsum(-1).flip([-1]).bool() + + hidden_states = self.feature_projection(hidden_states)[0] + + encoder_outputs = self.encoder( + hidden_states, + attention_mask=attention_mask, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + return_dict=return_dict, + ) + hidden_states = encoder_outputs[0] + if not return_dict: + return (hidden_states,) + encoder_outputs[1:] + + return BaseModelOutput( + last_hidden_state=hidden_states, + hidden_states=encoder_outputs.hidden_states, + attentions=encoder_outputs.attentions, + ) + + +@dataclass +class SpeechClassifierOutput(ModelOutput): + loss: Optional[torch.FloatTensor] = None + logits: torch.FloatTensor = None + hidden_states: Optional[Tuple[torch.FloatTensor]] = None + attentions: Optional[Tuple[torch.FloatTensor]] = None + + +class Wav2Vec2ClassificationHead(nn.Module): + """Head for wav2vec classification task.""" + + def __init__(self, config): + super().__init__() + self.dense = nn.Linear(config.hidden_size, config.hidden_size) + self.dropout = nn.Dropout(config.final_dropout) + self.out_proj = nn.Linear(config.hidden_size, config.num_labels) + + def forward(self, features, **kwargs): + x = features + x = self.dropout(x) + x = self.dense(x) + x = torch.tanh(x) + x = self.dropout(x) + x = self.out_proj(x) + return x + + +class Wav2Vec2ForSpeechClassification(Wav2Vec2PreTrainedModel): + def __init__(self, config): + super().__init__(config) + self.num_labels = config.num_labels + self.pooling_mode = config.pooling_mode + self.config = config + + self.wav2vec2 = Wav2Vec2Model(config) + self.classifier = Wav2Vec2ClassificationHead(config) + + self.init_weights() + + def freeze_feature_extractor(self): + self.wav2vec2.feature_extractor._freeze_parameters() + + def merged_strategy( + self, + hidden_states, + mode="mean" + ): + if mode == "mean": + outputs = torch.mean(hidden_states, dim=1) + elif mode == "sum": + outputs = torch.sum(hidden_states, dim=1) + elif mode == "max": + outputs = torch.max(hidden_states, dim=1)[0] + else: + raise Exception( + "The pooling method hasn't been defined! Your pooling mode must be one of these ['mean', 'sum', 'max']") + + return outputs + + def forward( + self, + input_values, + attention_mask=None, + output_attentions=None, + output_hidden_states=None, + return_dict=None, + labels=None, + frame_num=None, + ): + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + outputs = self.wav2vec2( + input_values, + attention_mask=attention_mask, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + return_dict=return_dict, + ) + hidden_states = outputs[0] + hidden_states1 = linear_interpolation(hidden_states, 50, 30, output_len=frame_num) + hidden_states = self.merged_strategy(hidden_states1, mode=self.pooling_mode) + logits = self.classifier(hidden_states) + + loss = None + if labels is not None: + if self.config.problem_type is None: + if self.num_labels == 1: + self.config.problem_type = "regression" + elif self.num_labels > 1 and (labels.dtype == torch.long or labels.dtype == torch.int): + self.config.problem_type = "single_label_classification" + else: + self.config.problem_type = "multi_label_classification" + + if self.config.problem_type == "regression": + loss_fct = MSELoss() + loss = loss_fct(logits.view(-1, self.num_labels), labels) + elif self.config.problem_type == "single_label_classification": + loss_fct = CrossEntropyLoss() + loss = loss_fct(logits.view(-1, self.num_labels), labels.view(-1)) + elif self.config.problem_type == "multi_label_classification": + loss_fct = BCEWithLogitsLoss() + loss = loss_fct(logits, labels) + + if not return_dict: + output = (logits,) + outputs[2:] + return ((loss,) + output) if loss is not None else output + + return SpeechClassifierOutput( + loss=loss, + logits=logits, + hidden_states=hidden_states1, + attentions=outputs.attentions, + ) diff --git a/audio2exp-service/LAM_Audio2Expression/models/encoder/wavlm.py b/audio2exp-service/LAM_Audio2Expression/models/encoder/wavlm.py new file mode 100644 index 0000000..0e39b9b --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/models/encoder/wavlm.py @@ -0,0 +1,87 @@ +import numpy as np +import torch +from transformers import WavLMModel +from transformers.modeling_outputs import Wav2Vec2BaseModelOutput +from typing import Optional, Tuple, Union +import torch.nn.functional as F + +def linear_interpolation(features, output_len: int): + features = features.transpose(1, 2) + output_features = F.interpolate( + features, size=output_len, align_corners=True, mode='linear') + return output_features.transpose(1, 2) + +# the implementation of Wav2Vec2Model is borrowed from https://huggingface.co/transformers/_modules/transformers/models/wav2vec2/modeling_wav2vec2.html#Wav2Vec2Model # noqa: E501 +# initialize our encoder with the pre-trained wav2vec 2.0 weights. + + +class WavLMModel(WavLMModel): + def __init__(self, config): + super().__init__(config) + + def _freeze_wav2vec2_parameters(self, do_freeze: bool = True): + for param in self.parameters(): + param.requires_grad = (not do_freeze) + + def forward( + self, + input_values: Optional[torch.Tensor], + attention_mask: Optional[torch.Tensor] = None, + mask_time_indices: Optional[torch.FloatTensor] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + frame_num=None, + interpolate_pos: int = 0, + ) -> Union[Tuple, Wav2Vec2BaseModelOutput]: + + output_attentions = output_attentions if output_attentions is not None else self.config.output_attentions + output_hidden_states = ( + output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states + ) + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + + extract_features = self.feature_extractor(input_values) + extract_features = extract_features.transpose(1, 2) + + if interpolate_pos == 0: + extract_features = linear_interpolation( + extract_features, output_len=frame_num) + + if attention_mask is not None: + # compute reduced attention_mask corresponding to feature vectors + attention_mask = self._get_feature_vector_attention_mask( + extract_features.shape[1], attention_mask, add_adapter=False + ) + + hidden_states, extract_features = self.feature_projection(extract_features) + hidden_states = self._mask_hidden_states( + hidden_states, mask_time_indices=mask_time_indices, attention_mask=attention_mask + ) + + encoder_outputs = self.encoder( + hidden_states, + attention_mask=attention_mask, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + return_dict=return_dict, + ) + + hidden_states = encoder_outputs[0] + + if interpolate_pos == 1: + hidden_states = linear_interpolation( + hidden_states, output_len=frame_num) + + if self.adapter is not None: + hidden_states = self.adapter(hidden_states) + + if not return_dict: + return (hidden_states, extract_features) + encoder_outputs[1:] + + return Wav2Vec2BaseModelOutput( + last_hidden_state=hidden_states, + extract_features=extract_features, + hidden_states=encoder_outputs.hidden_states, + attentions=encoder_outputs.attentions, + ) \ No newline at end of file diff --git a/audio2exp-service/LAM_Audio2Expression/models/losses/__init__.py b/audio2exp-service/LAM_Audio2Expression/models/losses/__init__.py new file mode 100644 index 0000000..782a0d3 --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/models/losses/__init__.py @@ -0,0 +1,4 @@ +from .builder import build_criteria + +from .misc import CrossEntropyLoss, SmoothCELoss, DiceLoss, FocalLoss, BinaryFocalLoss, L1Loss +from .lovasz import LovaszLoss diff --git a/audio2exp-service/LAM_Audio2Expression/models/losses/builder.py b/audio2exp-service/LAM_Audio2Expression/models/losses/builder.py new file mode 100644 index 0000000..ec936be --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/models/losses/builder.py @@ -0,0 +1,28 @@ +""" +The code is base on https://github.com/Pointcept/Pointcept +""" + +from utils.registry import Registry + +LOSSES = Registry("losses") + + +class Criteria(object): + def __init__(self, cfg=None): + self.cfg = cfg if cfg is not None else [] + self.criteria = [] + for loss_cfg in self.cfg: + self.criteria.append(LOSSES.build(cfg=loss_cfg)) + + def __call__(self, pred, target): + if len(self.criteria) == 0: + # loss computation occur in model + return pred + loss = 0 + for c in self.criteria: + loss += c(pred, target) + return loss + + +def build_criteria(cfg): + return Criteria(cfg) diff --git a/audio2exp-service/LAM_Audio2Expression/models/losses/lovasz.py b/audio2exp-service/LAM_Audio2Expression/models/losses/lovasz.py new file mode 100644 index 0000000..dbdb844 --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/models/losses/lovasz.py @@ -0,0 +1,253 @@ +""" +The code is base on https://github.com/Pointcept/Pointcept +""" + +from typing import Optional +from itertools import filterfalse +import torch +import torch.nn.functional as F +from torch.nn.modules.loss import _Loss + +from .builder import LOSSES + +BINARY_MODE: str = "binary" +MULTICLASS_MODE: str = "multiclass" +MULTILABEL_MODE: str = "multilabel" + + +def _lovasz_grad(gt_sorted): + """Compute gradient of the Lovasz extension w.r.t sorted errors + See Alg. 1 in paper + """ + p = len(gt_sorted) + gts = gt_sorted.sum() + intersection = gts - gt_sorted.float().cumsum(0) + union = gts + (1 - gt_sorted).float().cumsum(0) + jaccard = 1.0 - intersection / union + if p > 1: # cover 1-pixel case + jaccard[1:p] = jaccard[1:p] - jaccard[0:-1] + return jaccard + + +def _lovasz_hinge(logits, labels, per_image=True, ignore=None): + """ + Binary Lovasz hinge loss + logits: [B, H, W] Logits at each pixel (between -infinity and +infinity) + labels: [B, H, W] Tensor, binary ground truth masks (0 or 1) + per_image: compute the loss per image instead of per batch + ignore: void class id + """ + if per_image: + loss = mean( + _lovasz_hinge_flat( + *_flatten_binary_scores(log.unsqueeze(0), lab.unsqueeze(0), ignore) + ) + for log, lab in zip(logits, labels) + ) + else: + loss = _lovasz_hinge_flat(*_flatten_binary_scores(logits, labels, ignore)) + return loss + + +def _lovasz_hinge_flat(logits, labels): + """Binary Lovasz hinge loss + Args: + logits: [P] Logits at each prediction (between -infinity and +infinity) + labels: [P] Tensor, binary ground truth labels (0 or 1) + """ + if len(labels) == 0: + # only void pixels, the gradients should be 0 + return logits.sum() * 0.0 + signs = 2.0 * labels.float() - 1.0 + errors = 1.0 - logits * signs + errors_sorted, perm = torch.sort(errors, dim=0, descending=True) + perm = perm.data + gt_sorted = labels[perm] + grad = _lovasz_grad(gt_sorted) + loss = torch.dot(F.relu(errors_sorted), grad) + return loss + + +def _flatten_binary_scores(scores, labels, ignore=None): + """Flattens predictions in the batch (binary case) + Remove labels equal to 'ignore' + """ + scores = scores.view(-1) + labels = labels.view(-1) + if ignore is None: + return scores, labels + valid = labels != ignore + vscores = scores[valid] + vlabels = labels[valid] + return vscores, vlabels + + +def _lovasz_softmax( + probas, labels, classes="present", class_seen=None, per_image=False, ignore=None +): + """Multi-class Lovasz-Softmax loss + Args: + @param probas: [B, C, H, W] Class probabilities at each prediction (between 0 and 1). + Interpreted as binary (sigmoid) output with outputs of size [B, H, W]. + @param labels: [B, H, W] Tensor, ground truth labels (between 0 and C - 1) + @param classes: 'all' for all, 'present' for classes present in labels, or a list of classes to average. + @param per_image: compute the loss per image instead of per batch + @param ignore: void class labels + """ + if per_image: + loss = mean( + _lovasz_softmax_flat( + *_flatten_probas(prob.unsqueeze(0), lab.unsqueeze(0), ignore), + classes=classes + ) + for prob, lab in zip(probas, labels) + ) + else: + loss = _lovasz_softmax_flat( + *_flatten_probas(probas, labels, ignore), + classes=classes, + class_seen=class_seen + ) + return loss + + +def _lovasz_softmax_flat(probas, labels, classes="present", class_seen=None): + """Multi-class Lovasz-Softmax loss + Args: + @param probas: [P, C] Class probabilities at each prediction (between 0 and 1) + @param labels: [P] Tensor, ground truth labels (between 0 and C - 1) + @param classes: 'all' for all, 'present' for classes present in labels, or a list of classes to average. + """ + if probas.numel() == 0: + # only void pixels, the gradients should be 0 + return probas * 0.0 + C = probas.size(1) + losses = [] + class_to_sum = list(range(C)) if classes in ["all", "present"] else classes + # for c in class_to_sum: + for c in labels.unique(): + if class_seen is None: + fg = (labels == c).type_as(probas) # foreground for class c + if classes == "present" and fg.sum() == 0: + continue + if C == 1: + if len(classes) > 1: + raise ValueError("Sigmoid output possible only with 1 class") + class_pred = probas[:, 0] + else: + class_pred = probas[:, c] + errors = (fg - class_pred).abs() + errors_sorted, perm = torch.sort(errors, 0, descending=True) + perm = perm.data + fg_sorted = fg[perm] + losses.append(torch.dot(errors_sorted, _lovasz_grad(fg_sorted))) + else: + if c in class_seen: + fg = (labels == c).type_as(probas) # foreground for class c + if classes == "present" and fg.sum() == 0: + continue + if C == 1: + if len(classes) > 1: + raise ValueError("Sigmoid output possible only with 1 class") + class_pred = probas[:, 0] + else: + class_pred = probas[:, c] + errors = (fg - class_pred).abs() + errors_sorted, perm = torch.sort(errors, 0, descending=True) + perm = perm.data + fg_sorted = fg[perm] + losses.append(torch.dot(errors_sorted, _lovasz_grad(fg_sorted))) + return mean(losses) + + +def _flatten_probas(probas, labels, ignore=None): + """Flattens predictions in the batch""" + if probas.dim() == 3: + # assumes output of a sigmoid layer + B, H, W = probas.size() + probas = probas.view(B, 1, H, W) + + C = probas.size(1) + probas = torch.movedim(probas, 1, -1) # [B, C, Di, Dj, ...] -> [B, Di, Dj, ..., C] + probas = probas.contiguous().view(-1, C) # [P, C] + + labels = labels.view(-1) + if ignore is None: + return probas, labels + valid = labels != ignore + vprobas = probas[valid] + vlabels = labels[valid] + return vprobas, vlabels + + +def isnan(x): + return x != x + + +def mean(values, ignore_nan=False, empty=0): + """Nan-mean compatible with generators.""" + values = iter(values) + if ignore_nan: + values = filterfalse(isnan, values) + try: + n = 1 + acc = next(values) + except StopIteration: + if empty == "raise": + raise ValueError("Empty mean") + return empty + for n, v in enumerate(values, 2): + acc += v + if n == 1: + return acc + return acc / n + + +@LOSSES.register_module() +class LovaszLoss(_Loss): + def __init__( + self, + mode: str, + class_seen: Optional[int] = None, + per_image: bool = False, + ignore_index: Optional[int] = None, + loss_weight: float = 1.0, + ): + """Lovasz loss for segmentation task. + It supports binary, multiclass and multilabel cases + Args: + mode: Loss mode 'binary', 'multiclass' or 'multilabel' + ignore_index: Label that indicates ignored pixels (does not contribute to loss) + per_image: If True loss computed per each image and then averaged, else computed per whole batch + Shape + - **y_pred** - torch.Tensor of shape (N, C, H, W) + - **y_true** - torch.Tensor of shape (N, H, W) or (N, C, H, W) + Reference + https://github.com/BloodAxe/pytorch-toolbelt + """ + assert mode in {BINARY_MODE, MULTILABEL_MODE, MULTICLASS_MODE} + super().__init__() + + self.mode = mode + self.ignore_index = ignore_index + self.per_image = per_image + self.class_seen = class_seen + self.loss_weight = loss_weight + + def forward(self, y_pred, y_true): + if self.mode in {BINARY_MODE, MULTILABEL_MODE}: + loss = _lovasz_hinge( + y_pred, y_true, per_image=self.per_image, ignore=self.ignore_index + ) + elif self.mode == MULTICLASS_MODE: + y_pred = y_pred.softmax(dim=1) + loss = _lovasz_softmax( + y_pred, + y_true, + class_seen=self.class_seen, + per_image=self.per_image, + ignore=self.ignore_index, + ) + else: + raise ValueError("Wrong mode {}.".format(self.mode)) + return loss * self.loss_weight diff --git a/audio2exp-service/LAM_Audio2Expression/models/losses/misc.py b/audio2exp-service/LAM_Audio2Expression/models/losses/misc.py new file mode 100644 index 0000000..48e26bb --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/models/losses/misc.py @@ -0,0 +1,241 @@ +""" +The code is base on https://github.com/Pointcept/Pointcept +""" + +import torch +import torch.nn as nn +import torch.nn.functional as F +from .builder import LOSSES + + +@LOSSES.register_module() +class CrossEntropyLoss(nn.Module): + def __init__( + self, + weight=None, + size_average=None, + reduce=None, + reduction="mean", + label_smoothing=0.0, + loss_weight=1.0, + ignore_index=-1, + ): + super(CrossEntropyLoss, self).__init__() + weight = torch.tensor(weight).cuda() if weight is not None else None + self.loss_weight = loss_weight + self.loss = nn.CrossEntropyLoss( + weight=weight, + size_average=size_average, + ignore_index=ignore_index, + reduce=reduce, + reduction=reduction, + label_smoothing=label_smoothing, + ) + + def forward(self, pred, target): + return self.loss(pred, target) * self.loss_weight + + +@LOSSES.register_module() +class L1Loss(nn.Module): + def __init__( + self, + weight=None, + size_average=None, + reduce=None, + reduction="mean", + label_smoothing=0.0, + loss_weight=1.0, + ignore_index=-1, + ): + super(L1Loss, self).__init__() + weight = torch.tensor(weight).cuda() if weight is not None else None + self.loss_weight = loss_weight + self.loss = nn.L1Loss(reduction='mean') + + def forward(self, pred, target): + return self.loss(pred, target[:,None]) * self.loss_weight + + +@LOSSES.register_module() +class SmoothCELoss(nn.Module): + def __init__(self, smoothing_ratio=0.1): + super(SmoothCELoss, self).__init__() + self.smoothing_ratio = smoothing_ratio + + def forward(self, pred, target): + eps = self.smoothing_ratio + n_class = pred.size(1) + one_hot = torch.zeros_like(pred).scatter(1, target.view(-1, 1), 1) + one_hot = one_hot * (1 - eps) + (1 - one_hot) * eps / (n_class - 1) + log_prb = F.log_softmax(pred, dim=1) + loss = -(one_hot * log_prb).total(dim=1) + loss = loss[torch.isfinite(loss)].mean() + return loss + + +@LOSSES.register_module() +class BinaryFocalLoss(nn.Module): + def __init__(self, gamma=2.0, alpha=0.5, logits=True, reduce=True, loss_weight=1.0): + """Binary Focal Loss + ` + """ + super(BinaryFocalLoss, self).__init__() + assert 0 < alpha < 1 + self.gamma = gamma + self.alpha = alpha + self.logits = logits + self.reduce = reduce + self.loss_weight = loss_weight + + def forward(self, pred, target, **kwargs): + """Forward function. + Args: + pred (torch.Tensor): The prediction with shape (N) + target (torch.Tensor): The ground truth. If containing class + indices, shape (N) where each value is 0≤targets[i]≤1, If containing class probabilities, + same shape as the input. + Returns: + torch.Tensor: The calculated loss + """ + if self.logits: + bce = F.binary_cross_entropy_with_logits(pred, target, reduction="none") + else: + bce = F.binary_cross_entropy(pred, target, reduction="none") + pt = torch.exp(-bce) + alpha = self.alpha * target + (1 - self.alpha) * (1 - target) + focal_loss = alpha * (1 - pt) ** self.gamma * bce + + if self.reduce: + focal_loss = torch.mean(focal_loss) + return focal_loss * self.loss_weight + + +@LOSSES.register_module() +class FocalLoss(nn.Module): + def __init__( + self, gamma=2.0, alpha=0.5, reduction="mean", loss_weight=1.0, ignore_index=-1 + ): + """Focal Loss + ` + """ + super(FocalLoss, self).__init__() + assert reduction in ( + "mean", + "sum", + ), "AssertionError: reduction should be 'mean' or 'sum'" + assert isinstance( + alpha, (float, list) + ), "AssertionError: alpha should be of type float" + assert isinstance(gamma, float), "AssertionError: gamma should be of type float" + assert isinstance( + loss_weight, float + ), "AssertionError: loss_weight should be of type float" + assert isinstance(ignore_index, int), "ignore_index must be of type int" + self.gamma = gamma + self.alpha = alpha + self.reduction = reduction + self.loss_weight = loss_weight + self.ignore_index = ignore_index + + def forward(self, pred, target, **kwargs): + """Forward function. + Args: + pred (torch.Tensor): The prediction with shape (N, C) where C = number of classes. + target (torch.Tensor): The ground truth. If containing class + indices, shape (N) where each value is 0≤targets[i]≤C−1, If containing class probabilities, + same shape as the input. + Returns: + torch.Tensor: The calculated loss + """ + # [B, C, d_1, d_2, ..., d_k] -> [C, B, d_1, d_2, ..., d_k] + pred = pred.transpose(0, 1) + # [C, B, d_1, d_2, ..., d_k] -> [C, N] + pred = pred.reshape(pred.size(0), -1) + # [C, N] -> [N, C] + pred = pred.transpose(0, 1).contiguous() + # (B, d_1, d_2, ..., d_k) --> (B * d_1 * d_2 * ... * d_k,) + target = target.view(-1).contiguous() + assert pred.size(0) == target.size( + 0 + ), "The shape of pred doesn't match the shape of target" + valid_mask = target != self.ignore_index + target = target[valid_mask] + pred = pred[valid_mask] + + if len(target) == 0: + return 0.0 + + num_classes = pred.size(1) + target = F.one_hot(target, num_classes=num_classes) + + alpha = self.alpha + if isinstance(alpha, list): + alpha = pred.new_tensor(alpha) + pred_sigmoid = pred.sigmoid() + target = target.type_as(pred) + one_minus_pt = (1 - pred_sigmoid) * target + pred_sigmoid * (1 - target) + focal_weight = (alpha * target + (1 - alpha) * (1 - target)) * one_minus_pt.pow( + self.gamma + ) + + loss = ( + F.binary_cross_entropy_with_logits(pred, target, reduction="none") + * focal_weight + ) + if self.reduction == "mean": + loss = loss.mean() + elif self.reduction == "sum": + loss = loss.total() + return self.loss_weight * loss + + +@LOSSES.register_module() +class DiceLoss(nn.Module): + def __init__(self, smooth=1, exponent=2, loss_weight=1.0, ignore_index=-1): + """DiceLoss. + This loss is proposed in `V-Net: Fully Convolutional Neural Networks for + Volumetric Medical Image Segmentation `_. + """ + super(DiceLoss, self).__init__() + self.smooth = smooth + self.exponent = exponent + self.loss_weight = loss_weight + self.ignore_index = ignore_index + + def forward(self, pred, target, **kwargs): + # [B, C, d_1, d_2, ..., d_k] -> [C, B, d_1, d_2, ..., d_k] + pred = pred.transpose(0, 1) + # [C, B, d_1, d_2, ..., d_k] -> [C, N] + pred = pred.reshape(pred.size(0), -1) + # [C, N] -> [N, C] + pred = pred.transpose(0, 1).contiguous() + # (B, d_1, d_2, ..., d_k) --> (B * d_1 * d_2 * ... * d_k,) + target = target.view(-1).contiguous() + assert pred.size(0) == target.size( + 0 + ), "The shape of pred doesn't match the shape of target" + valid_mask = target != self.ignore_index + target = target[valid_mask] + pred = pred[valid_mask] + + pred = F.softmax(pred, dim=1) + num_classes = pred.shape[1] + target = F.one_hot( + torch.clamp(target.long(), 0, num_classes - 1), num_classes=num_classes + ) + + total_loss = 0 + for i in range(num_classes): + if i != self.ignore_index: + num = torch.sum(torch.mul(pred[:, i], target[:, i])) * 2 + self.smooth + den = ( + torch.sum( + pred[:, i].pow(self.exponent) + target[:, i].pow(self.exponent) + ) + + self.smooth + ) + dice_loss = 1 - num / den + total_loss += dice_loss + loss = total_loss / num_classes + return self.loss_weight * loss diff --git a/audio2exp-service/LAM_Audio2Expression/models/network.py b/audio2exp-service/LAM_Audio2Expression/models/network.py new file mode 100644 index 0000000..cdedbed --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/models/network.py @@ -0,0 +1,646 @@ +import math +import os.path + +import torch + +import torch.nn as nn +import torch.nn.functional as F +import torchaudio as ta + +from models.encoder.wav2vec import Wav2Vec2Model +from models.encoder.wavlm import WavLMModel + +from models.builder import MODELS + +from transformers.models.wav2vec2.configuration_wav2vec2 import Wav2Vec2Config + +@MODELS.register_module("Audio2Expression") +class Audio2Expression(nn.Module): + def __init__(self, + device: torch.device = None, + pretrained_encoder_type: str = 'wav2vec', + pretrained_encoder_path: str = '', + wav2vec2_config_path: str = '', + num_identity_classes: int = 0, + identity_feat_dim: int = 64, + hidden_dim: int = 512, + expression_dim: int = 52, + norm_type: str = 'ln', + decoder_depth: int = 3, + use_transformer: bool = False, + num_attention_heads: int = 8, + num_transformer_layers: int = 6, + ): + super().__init__() + + self.device = device + + # Initialize audio feature encoder + if pretrained_encoder_type == 'wav2vec': + if os.path.exists(pretrained_encoder_path): + self.audio_encoder = Wav2Vec2Model.from_pretrained(pretrained_encoder_path) + else: + config = Wav2Vec2Config.from_pretrained(wav2vec2_config_path) + self.audio_encoder = Wav2Vec2Model(config) + encoder_output_dim = 768 + elif pretrained_encoder_type == 'wavlm': + self.audio_encoder = WavLMModel.from_pretrained(pretrained_encoder_path) + encoder_output_dim = 768 + else: + raise NotImplementedError(f"Encoder type {pretrained_encoder_type} not supported") + + self.audio_encoder.feature_extractor._freeze_parameters() + self.feature_projection = nn.Linear(encoder_output_dim, hidden_dim) + + self.identity_encoder = AudioIdentityEncoder( + hidden_dim, + num_identity_classes, + identity_feat_dim, + use_transformer, + num_attention_heads, + num_transformer_layers + ) + + self.decoder = nn.ModuleList([ + nn.Sequential(*[ + ConvNormRelu(hidden_dim, hidden_dim, norm=norm_type) + for _ in range(decoder_depth) + ]) + ]) + + self.output_proj = nn.Linear(hidden_dim, expression_dim) + + def freeze_encoder_parameters(self, do_freeze=False): + + for name, param in self.audio_encoder.named_parameters(): + if('feature_extractor' in name): + param.requires_grad = False + else: + param.requires_grad = (not do_freeze) + + def forward(self, input_dict): + + if 'time_steps' not in input_dict: + audio_length = input_dict['input_audio_array'].shape[1] + time_steps = math.ceil(audio_length / 16000 * 30) + else: + time_steps = input_dict['time_steps'] + + # Process audio through encoder + audio_input = input_dict['input_audio_array'].flatten(start_dim=1) + hidden_states = self.audio_encoder(audio_input, frame_num=time_steps).last_hidden_state + + # Project features to hidden dimension + audio_features = self.feature_projection(hidden_states).transpose(1, 2) + + # Process identity-conditioned features + audio_features = self.identity_encoder(audio_features, identity=input_dict['id_idx']) + + # Refine features through decoder + audio_features = self.decoder[0](audio_features) + + # Generate output parameters + audio_features = audio_features.permute(0, 2, 1) + expression_params = self.output_proj(audio_features) + + return torch.sigmoid(expression_params) + + +class AudioIdentityEncoder(nn.Module): + def __init__(self, + hidden_dim, + num_identity_classes=0, + identity_feat_dim=64, + use_transformer=False, + num_attention_heads = 8, + num_transformer_layers = 6, + dropout_ratio=0.1, + ): + super().__init__() + + in_dim = hidden_dim + identity_feat_dim + self.id_mlp = nn.Conv1d(num_identity_classes, identity_feat_dim, 1, 1) + self.first_net = SeqTranslator1D(in_dim, hidden_dim, + min_layers_num=3, + residual=True, + norm='ln' + ) + self.grus = nn.GRU(hidden_dim, hidden_dim, 1, batch_first=True) + self.dropout = nn.Dropout(dropout_ratio) + + self.use_transformer = use_transformer + if(self.use_transformer): + encoder_layer = nn.TransformerEncoderLayer(d_model=hidden_dim, nhead=num_attention_heads, dim_feedforward= 2 * hidden_dim, batch_first=True) + self.transformer_encoder = nn.TransformerEncoder(encoder_layer, num_layers=num_transformer_layers) + + def forward(self, + audio_features: torch.Tensor, + identity: torch.Tensor = None, + time_steps: int = None) -> tuple: + + audio_features = self.dropout(audio_features) + identity = identity.reshape(identity.shape[0], -1, 1).repeat(1, 1, audio_features.shape[2]).to(torch.float32) + identity = self.id_mlp(identity) + audio_features = torch.cat([audio_features, identity], dim=1) + + x = self.first_net(audio_features) + + if time_steps is not None: + x = F.interpolate(x, size=time_steps, align_corners=False, mode='linear') + + if(self.use_transformer): + x = x.permute(0, 2, 1) + x = self.transformer_encoder(x) + x = x.permute(0, 2, 1) + + return x + +class ConvNormRelu(nn.Module): + ''' + (B,C_in,H,W) -> (B, C_out, H, W) + there exist some kernel size that makes the result is not H/s + ''' + + def __init__(self, + in_channels, + out_channels, + type='1d', + leaky=False, + downsample=False, + kernel_size=None, + stride=None, + padding=None, + p=0, + groups=1, + residual=False, + norm='bn'): + ''' + conv-bn-relu + ''' + super(ConvNormRelu, self).__init__() + self.residual = residual + self.norm_type = norm + # kernel_size = k + # stride = s + + if kernel_size is None and stride is None: + if not downsample: + kernel_size = 3 + stride = 1 + else: + kernel_size = 4 + stride = 2 + + if padding is None: + if isinstance(kernel_size, int) and isinstance(stride, tuple): + padding = tuple(int((kernel_size - st) / 2) for st in stride) + elif isinstance(kernel_size, tuple) and isinstance(stride, int): + padding = tuple(int((ks - stride) / 2) for ks in kernel_size) + elif isinstance(kernel_size, tuple) and isinstance(stride, tuple): + padding = tuple(int((ks - st) / 2) for ks, st in zip(kernel_size, stride)) + else: + padding = int((kernel_size - stride) / 2) + + if self.residual: + if downsample: + if type == '1d': + self.residual_layer = nn.Sequential( + nn.Conv1d( + in_channels=in_channels, + out_channels=out_channels, + kernel_size=kernel_size, + stride=stride, + padding=padding + ) + ) + elif type == '2d': + self.residual_layer = nn.Sequential( + nn.Conv2d( + in_channels=in_channels, + out_channels=out_channels, + kernel_size=kernel_size, + stride=stride, + padding=padding + ) + ) + else: + if in_channels == out_channels: + self.residual_layer = nn.Identity() + else: + if type == '1d': + self.residual_layer = nn.Sequential( + nn.Conv1d( + in_channels=in_channels, + out_channels=out_channels, + kernel_size=kernel_size, + stride=stride, + padding=padding + ) + ) + elif type == '2d': + self.residual_layer = nn.Sequential( + nn.Conv2d( + in_channels=in_channels, + out_channels=out_channels, + kernel_size=kernel_size, + stride=stride, + padding=padding + ) + ) + + in_channels = in_channels * groups + out_channels = out_channels * groups + if type == '1d': + self.conv = nn.Conv1d(in_channels=in_channels, out_channels=out_channels, + kernel_size=kernel_size, stride=stride, padding=padding, + groups=groups) + self.norm = nn.BatchNorm1d(out_channels) + self.dropout = nn.Dropout(p=p) + elif type == '2d': + self.conv = nn.Conv2d(in_channels=in_channels, out_channels=out_channels, + kernel_size=kernel_size, stride=stride, padding=padding, + groups=groups) + self.norm = nn.BatchNorm2d(out_channels) + self.dropout = nn.Dropout2d(p=p) + if norm == 'gn': + self.norm = nn.GroupNorm(2, out_channels) + elif norm == 'ln': + self.norm = nn.LayerNorm(out_channels) + if leaky: + self.relu = nn.LeakyReLU(negative_slope=0.2) + else: + self.relu = nn.ReLU() + + def forward(self, x, **kwargs): + if self.norm_type == 'ln': + out = self.dropout(self.conv(x)) + out = self.norm(out.transpose(1,2)).transpose(1,2) + else: + out = self.norm(self.dropout(self.conv(x))) + if self.residual: + residual = self.residual_layer(x) + out += residual + return self.relu(out) + +""" from https://github.com/ai4r/Gesture-Generation-from-Trimodal-Context.git """ +class SeqTranslator1D(nn.Module): + ''' + (B, C, T)->(B, C_out, T) + ''' + def __init__(self, + C_in, + C_out, + kernel_size=None, + stride=None, + min_layers_num=None, + residual=True, + norm='bn' + ): + super(SeqTranslator1D, self).__init__() + + conv_layers = nn.ModuleList([]) + conv_layers.append(ConvNormRelu( + in_channels=C_in, + out_channels=C_out, + type='1d', + kernel_size=kernel_size, + stride=stride, + residual=residual, + norm=norm + )) + self.num_layers = 1 + if min_layers_num is not None and self.num_layers < min_layers_num: + while self.num_layers < min_layers_num: + conv_layers.append(ConvNormRelu( + in_channels=C_out, + out_channels=C_out, + type='1d', + kernel_size=kernel_size, + stride=stride, + residual=residual, + norm=norm + )) + self.num_layers += 1 + self.conv_layers = nn.Sequential(*conv_layers) + + def forward(self, x): + return self.conv_layers(x) + + +def audio_chunking(audio: torch.Tensor, frame_rate: int = 30, chunk_size: int = 16000): + """ + :param audio: 1 x T tensor containing a 16kHz audio signal + :param frame_rate: frame rate for video (we need one audio chunk per video frame) + :param chunk_size: number of audio samples per chunk + :return: num_chunks x chunk_size tensor containing sliced audio + """ + samples_per_frame = 16000 // frame_rate + padding = (chunk_size - samples_per_frame) // 2 + audio = torch.nn.functional.pad(audio.unsqueeze(0), pad=[padding, padding]).squeeze(0) + anchor_points = list(range(chunk_size//2, audio.shape[-1]-chunk_size//2, samples_per_frame)) + audio = torch.cat([audio[:, i-chunk_size//2:i+chunk_size//2] for i in anchor_points], dim=0) + return audio + +""" https://github.com/facebookresearch/meshtalk """ +class MeshtalkEncoder(nn.Module): + def __init__(self, latent_dim: int = 128, model_name: str = 'audio_encoder'): + """ + :param latent_dim: size of the latent audio embedding + :param model_name: name of the model, used to load and save the model + """ + super().__init__() + + self.melspec = ta.transforms.MelSpectrogram( + sample_rate=16000, n_fft=2048, win_length=800, hop_length=160, n_mels=80 + ) + + conv_len = 5 + self.convert_dimensions = torch.nn.Conv1d(80, 128, kernel_size=conv_len) + self.weights_init(self.convert_dimensions) + self.receptive_field = conv_len + + convs = [] + for i in range(6): + dilation = 2 * (i % 3 + 1) + self.receptive_field += (conv_len - 1) * dilation + convs += [torch.nn.Conv1d(128, 128, kernel_size=conv_len, dilation=dilation)] + self.weights_init(convs[-1]) + self.convs = torch.nn.ModuleList(convs) + self.code = torch.nn.Linear(128, latent_dim) + + self.apply(lambda x: self.weights_init(x)) + + def weights_init(self, m): + if isinstance(m, torch.nn.Conv1d): + torch.nn.init.xavier_uniform_(m.weight) + try: + torch.nn.init.constant_(m.bias, .01) + except: + pass + + def forward(self, audio: torch.Tensor): + """ + :param audio: B x T x 16000 Tensor containing 1 sec of audio centered around the current time frame + :return: code: B x T x latent_dim Tensor containing a latent audio code/embedding + """ + B, T = audio.shape[0], audio.shape[1] + x = self.melspec(audio).squeeze(1) + x = torch.log(x.clamp(min=1e-10, max=None)) + if T == 1: + x = x.unsqueeze(1) + + # Convert to the right dimensionality + x = x.view(-1, x.shape[2], x.shape[3]) + x = F.leaky_relu(self.convert_dimensions(x), .2) + + # Process stacks + for conv in self.convs: + x_ = F.leaky_relu(conv(x), .2) + if self.training: + x_ = F.dropout(x_, .2) + l = (x.shape[2] - x_.shape[2]) // 2 + x = (x[:, :, l:-l] + x_) / 2 + + x = torch.mean(x, dim=-1) + x = x.view(B, T, x.shape[-1]) + x = self.code(x) + + return {"code": x} + +class PeriodicPositionalEncoding(nn.Module): + def __init__(self, d_model, dropout=0.1, period=15, max_seq_len=64): + super(PeriodicPositionalEncoding, self).__init__() + self.dropout = nn.Dropout(p=dropout) + pe = torch.zeros(period, d_model) + position = torch.arange(0, period, dtype=torch.float).unsqueeze(1) + div_term = torch.exp(torch.arange(0, d_model, 2).float() * (-math.log(10000.0) / d_model)) + pe[:, 0::2] = torch.sin(position * div_term) + pe[:, 1::2] = torch.cos(position * div_term) + pe = pe.unsqueeze(0) # (1, period, d_model) + repeat_num = (max_seq_len//period) + 1 + pe = pe.repeat(1, repeat_num, 1) # (1, repeat_num, period, d_model) + self.register_buffer('pe', pe) + def forward(self, x): + # print(self.pe.shape, x.shape) + x = x + self.pe[:, :x.size(1), :] + return self.dropout(x) + + +class GeneratorTransformer(nn.Module): + def __init__(self, + n_poses, + each_dim: list, + dim_list: list, + training=True, + device=None, + identity=False, + num_classes=0, + ): + super().__init__() + + self.training = training + self.device = device + self.gen_length = n_poses + + norm = 'ln' + in_dim = 256 + out_dim = 256 + + self.encoder_choice = 'faceformer' + + self.audio_encoder = Wav2Vec2Model.from_pretrained("facebook/wav2vec2-base-960h") # "vitouphy/wav2vec2-xls-r-300m-phoneme""facebook/wav2vec2-base-960h" + self.audio_encoder.feature_extractor._freeze_parameters() + self.audio_feature_map = nn.Linear(768, in_dim) + + self.audio_middle = AudioEncoder(in_dim, out_dim, False, num_classes) + + self.dim_list = dim_list + + self.decoder = nn.ModuleList() + self.final_out = nn.ModuleList() + + self.hidden_size = 768 + self.transformer_de_layer = nn.TransformerDecoderLayer( + d_model=self.hidden_size, + nhead=4, + dim_feedforward=self.hidden_size*2, + batch_first=True + ) + self.face_decoder = nn.TransformerDecoder(self.transformer_de_layer, num_layers=4) + self.feature2face = nn.Linear(256, self.hidden_size) + + self.position_embeddings = PeriodicPositionalEncoding(self.hidden_size, period=64, max_seq_len=64) + self.id_maping = nn.Linear(12,self.hidden_size) + + + self.decoder.append(self.face_decoder) + self.final_out.append(nn.Linear(self.hidden_size, 32)) + + def forward(self, in_spec, gt_poses=None, id=None, pre_state=None, time_steps=None): + if gt_poses is None: + time_steps = 64 + else: + time_steps = gt_poses.shape[1] + + # vector, hidden_state = self.audio_encoder(in_spec, pre_state, time_steps=time_steps) + if self.encoder_choice == 'meshtalk': + in_spec = audio_chunking(in_spec.squeeze(-1), frame_rate=30, chunk_size=16000) + feature = self.audio_encoder(in_spec.unsqueeze(0))["code"].transpose(1, 2) + elif self.encoder_choice == 'faceformer': + hidden_states = self.audio_encoder(in_spec.reshape(in_spec.shape[0], -1), frame_num=time_steps).last_hidden_state + feature = self.audio_feature_map(hidden_states).transpose(1, 2) + else: + feature, hidden_state = self.audio_encoder(in_spec, pre_state, time_steps=time_steps) + + feature, _ = self.audio_middle(feature, id=None) + feature = self.feature2face(feature.permute(0,2,1)) + + id = id.unsqueeze(1).repeat(1,64,1).to(torch.float32) + id_feature = self.id_maping(id) + id_feature = self.position_embeddings(id_feature) + + for i in range(self.decoder.__len__()): + mid = self.decoder[i](tgt=id_feature, memory=feature) + out = self.final_out[i](mid) + + return out, None + +def linear_interpolation(features, output_len: int): + features = features.transpose(1, 2) + output_features = F.interpolate( + features, size=output_len, align_corners=True, mode='linear') + return output_features.transpose(1, 2) + +def init_biased_mask(n_head, max_seq_len, period): + + def get_slopes(n): + + def get_slopes_power_of_2(n): + start = (2**(-2**-(math.log2(n) - 3))) + ratio = start + return [start * ratio**i for i in range(n)] + + if math.log2(n).is_integer(): + return get_slopes_power_of_2(n) + else: + closest_power_of_2 = 2**math.floor(math.log2(n)) + return get_slopes_power_of_2(closest_power_of_2) + get_slopes( + 2 * closest_power_of_2)[0::2][:n - closest_power_of_2] + + slopes = torch.Tensor(get_slopes(n_head)) + bias = torch.div( + torch.arange(start=0, end=max_seq_len, + step=period).unsqueeze(1).repeat(1, period).view(-1), + period, + rounding_mode='floor') + bias = -torch.flip(bias, dims=[0]) + alibi = torch.zeros(max_seq_len, max_seq_len) + for i in range(max_seq_len): + alibi[i, :i + 1] = bias[-(i + 1):] + alibi = slopes.unsqueeze(1).unsqueeze(1) * alibi.unsqueeze(0) + mask = (torch.triu(torch.ones(max_seq_len, + max_seq_len)) == 1).transpose(0, 1) + mask = mask.float().masked_fill(mask == 0, float('-inf')).masked_fill( + mask == 1, float(0.0)) + mask = mask.unsqueeze(0) + alibi + return mask + + +# Alignment Bias +def enc_dec_mask(device, T, S): + mask = torch.ones(T, S) + for i in range(T): + mask[i, i] = 0 + return (mask == 1).to(device=device) + + +# Periodic Positional Encoding +class PeriodicPositionalEncoding(nn.Module): + + def __init__(self, d_model, dropout=0.1, period=25, max_seq_len=3000): + super(PeriodicPositionalEncoding, self).__init__() + self.dropout = nn.Dropout(p=dropout) + pe = torch.zeros(period, d_model) + position = torch.arange(0, period, dtype=torch.float).unsqueeze(1) + div_term = torch.exp( + torch.arange(0, d_model, 2).float() * + (-math.log(10000.0) / d_model)) + pe[:, 0::2] = torch.sin(position * div_term) + pe[:, 1::2] = torch.cos(position * div_term) + pe = pe.unsqueeze(0) # (1, period, d_model) + repeat_num = (max_seq_len // period) + 1 + pe = pe.repeat(1, repeat_num, 1) + self.register_buffer('pe', pe) + + def forward(self, x): + x = x + self.pe[:, :x.size(1), :] + return self.dropout(x) + + +class BaseModel(nn.Module): + """Base class for all models.""" + + def __init__(self): + super(BaseModel, self).__init__() + # self.logger = logging.getLogger(self.__class__.__name__) + + def forward(self, *x): + """Forward pass logic. + + :return: Model output + """ + raise NotImplementedError + + def freeze_model(self, do_freeze: bool = True): + for param in self.parameters(): + param.requires_grad = (not do_freeze) + + def summary(self, logger, writer=None): + """Model summary.""" + model_parameters = filter(lambda p: p.requires_grad, self.parameters()) + params = sum([np.prod(p.size()) + for p in model_parameters]) / 1e6 # Unit is Mega + logger.info('===>Trainable parameters: %.3f M' % params) + if writer is not None: + writer.add_text('Model Summary', + 'Trainable parameters: %.3f M' % params) + + +"""https://github.com/X-niper/UniTalker""" +class UniTalkerDecoderTransformer(BaseModel): + + def __init__(self, out_dim, identity_num, period=30, interpolate_pos=1) -> None: + super().__init__() + self.learnable_style_emb = nn.Embedding(identity_num, out_dim) + self.PPE = PeriodicPositionalEncoding( + out_dim, period=period, max_seq_len=3000) + self.biased_mask = init_biased_mask( + n_head=4, max_seq_len=3000, period=period) + decoder_layer = nn.TransformerDecoderLayer( + d_model=out_dim, + nhead=4, + dim_feedforward=2 * out_dim, + batch_first=True) + self.transformer_decoder = nn.TransformerDecoder( + decoder_layer, num_layers=1) + self.interpolate_pos = interpolate_pos + + def forward(self, hidden_states: torch.Tensor, style_idx: torch.Tensor, + frame_num: int): + style_idx = torch.argmax(style_idx, dim=1) + obj_embedding = self.learnable_style_emb(style_idx) + obj_embedding = obj_embedding.unsqueeze(1).repeat(1, frame_num, 1) + style_input = self.PPE(obj_embedding) + tgt_mask = self.biased_mask.repeat(style_idx.shape[0], 1, 1)[:, :style_input.shape[1], :style_input. + shape[1]].clone().detach().to( + device=style_input.device) + memory_mask = enc_dec_mask(hidden_states.device, style_input.shape[1], + frame_num) + feat_out = self.transformer_decoder( + style_input, + hidden_states, + tgt_mask=tgt_mask, + memory_mask=memory_mask) + if self.interpolate_pos == 2: + feat_out = linear_interpolation(feat_out, output_len=frame_num) + return feat_out \ No newline at end of file diff --git a/audio2exp-service/LAM_Audio2Expression/models/utils.py b/audio2exp-service/LAM_Audio2Expression/models/utils.py new file mode 100644 index 0000000..4b15130 --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/models/utils.py @@ -0,0 +1,752 @@ +import json +import time +import warnings +import numpy as np +from typing import List, Optional,Tuple +from scipy.signal import savgol_filter + + +ARKitLeftRightPair = [ + ("jawLeft", "jawRight"), + ("mouthLeft", "mouthRight"), + ("mouthSmileLeft", "mouthSmileRight"), + ("mouthFrownLeft", "mouthFrownRight"), + ("mouthDimpleLeft", "mouthDimpleRight"), + ("mouthStretchLeft", "mouthStretchRight"), + ("mouthPressLeft", "mouthPressRight"), + ("mouthLowerDownLeft", "mouthLowerDownRight"), + ("mouthUpperUpLeft", "mouthUpperUpRight"), + ("cheekSquintLeft", "cheekSquintRight"), + ("noseSneerLeft", "noseSneerRight"), + ("browDownLeft", "browDownRight"), + ("browOuterUpLeft", "browOuterUpRight"), + ("eyeBlinkLeft","eyeBlinkRight"), + ("eyeLookDownLeft","eyeLookDownRight"), + ("eyeLookInLeft", "eyeLookInRight"), + ("eyeLookOutLeft","eyeLookOutRight"), + ("eyeLookUpLeft","eyeLookUpRight"), + ("eyeSquintLeft","eyeSquintRight"), + ("eyeWideLeft","eyeWideRight") + ] + +ARKitBlendShape =[ + "browDownLeft", + "browDownRight", + "browInnerUp", + "browOuterUpLeft", + "browOuterUpRight", + "cheekPuff", + "cheekSquintLeft", + "cheekSquintRight", + "eyeBlinkLeft", + "eyeBlinkRight", + "eyeLookDownLeft", + "eyeLookDownRight", + "eyeLookInLeft", + "eyeLookInRight", + "eyeLookOutLeft", + "eyeLookOutRight", + "eyeLookUpLeft", + "eyeLookUpRight", + "eyeSquintLeft", + "eyeSquintRight", + "eyeWideLeft", + "eyeWideRight", + "jawForward", + "jawLeft", + "jawOpen", + "jawRight", + "mouthClose", + "mouthDimpleLeft", + "mouthDimpleRight", + "mouthFrownLeft", + "mouthFrownRight", + "mouthFunnel", + "mouthLeft", + "mouthLowerDownLeft", + "mouthLowerDownRight", + "mouthPressLeft", + "mouthPressRight", + "mouthPucker", + "mouthRight", + "mouthRollLower", + "mouthRollUpper", + "mouthShrugLower", + "mouthShrugUpper", + "mouthSmileLeft", + "mouthSmileRight", + "mouthStretchLeft", + "mouthStretchRight", + "mouthUpperUpLeft", + "mouthUpperUpRight", + "noseSneerLeft", + "noseSneerRight", + "tongueOut" +] + +MOUTH_BLENDSHAPES = [ "mouthDimpleLeft", + "mouthDimpleRight", + "mouthFrownLeft", + "mouthFrownRight", + "mouthFunnel", + "mouthLeft", + "mouthLowerDownLeft", + "mouthLowerDownRight", + "mouthPressLeft", + "mouthPressRight", + "mouthPucker", + "mouthRight", + "mouthRollLower", + "mouthRollUpper", + "mouthShrugLower", + "mouthShrugUpper", + "mouthSmileLeft", + "mouthSmileRight", + "mouthStretchLeft", + "mouthStretchRight", + "mouthUpperUpLeft", + "mouthUpperUpRight", + "jawForward", + "jawLeft", + "jawOpen", + "jawRight", + "noseSneerLeft", + "noseSneerRight", + "cheekPuff", + ] + +DEFAULT_CONTEXT ={ + 'is_initial_input': True, + 'previous_audio': None, + 'previous_expression': None, + 'previous_volume': None, + 'previous_headpose': None, +} + +RETURN_CODE = { + "SUCCESS": 0, + "AUDIO_LENGTH_ERROR": 1, + "CHECKPOINT_PATH_ERROR":2, + "MODEL_INFERENCE_ERROR":3, +} + +DEFAULT_CONTEXTRETURN = { + "code": RETURN_CODE['SUCCESS'], + "expression": None, + "headpose": None, +} + +BLINK_PATTERNS = [ + np.array([0.365, 0.950, 0.956, 0.917, 0.367, 0.119, 0.025]), + np.array([0.235, 0.910, 0.945, 0.778, 0.191, 0.235, 0.089]), + np.array([0.870, 0.950, 0.949, 0.696, 0.191, 0.073, 0.007]), + np.array([0.000, 0.557, 0.953, 0.942, 0.426, 0.148, 0.018]) +] + +# Postprocess +def symmetrize_blendshapes( + bs_params: np.ndarray, + mode: str = "average", + symmetric_pairs: list = ARKitLeftRightPair +) -> np.ndarray: + """ + Apply symmetrization to ARKit blendshape parameters (batched version) + + Args: + bs_params: numpy array of shape (N, 52), batch of ARKit parameters + mode: symmetrization mode ["average", "max", "min", "left_dominant", "right_dominant"] + symmetric_pairs: list of left-right parameter pairs + + Returns: + Symmetrized parameters with same shape (N, 52) + """ + + name_to_idx = {name: i for i, name in enumerate(ARKitBlendShape)} + + # Input validation + if bs_params.ndim != 2 or bs_params.shape[1] != 52: + raise ValueError("Input must be of shape (N, 52)") + + symmetric_bs = bs_params.copy() # Shape (N, 52) + + # Precompute valid index pairs + valid_pairs = [] + for left, right in symmetric_pairs: + left_idx = name_to_idx.get(left) + right_idx = name_to_idx.get(right) + if None not in (left_idx, right_idx): + valid_pairs.append((left_idx, right_idx)) + + # Vectorized processing + for l_idx, r_idx in valid_pairs: + left_col = symmetric_bs[:, l_idx] + right_col = symmetric_bs[:, r_idx] + + if mode == "average": + new_vals = (left_col + right_col) / 2 + elif mode == "max": + new_vals = np.maximum(left_col, right_col) + elif mode == "min": + new_vals = np.minimum(left_col, right_col) + elif mode == "left_dominant": + new_vals = left_col + elif mode == "right_dominant": + new_vals = right_col + else: + raise ValueError(f"Invalid mode: {mode}") + + # Update both columns simultaneously + symmetric_bs[:, l_idx] = new_vals + symmetric_bs[:, r_idx] = new_vals + + return symmetric_bs + + +def apply_random_eye_blinks( + input: np.ndarray, + blink_scale: tuple = (0.8, 1.0), + blink_interval: tuple = (60, 120), + blink_duration: int = 7 +) -> np.ndarray: + """ + Apply randomized eye blinks to blendshape parameters + + Args: + output: Input array of shape (N, 52) containing blendshape parameters + blink_scale: Tuple (min, max) for random blink intensity scaling + blink_interval: Tuple (min, max) for random blink spacing in frames + blink_duration: Number of frames for blink animation (fixed) + + Returns: + None (modifies output array in-place) + """ + # Define eye blink patterns (normalized 0-1) + + # Initialize parameters + n_frames = input.shape[0] + input[:,8:10] = np.zeros((n_frames,2)) + current_frame = 0 + + # Main blink application loop + while current_frame < n_frames - blink_duration: + # Randomize blink parameters + scale = np.random.uniform(*blink_scale) + pattern = BLINK_PATTERNS[np.random.randint(0, 4)] + + # Apply blink animation + blink_values = pattern * scale + input[current_frame:current_frame + blink_duration, 8] = blink_values + input[current_frame:current_frame + blink_duration, 9] = blink_values + + # Advance to next blink position + current_frame += blink_duration + np.random.randint(*blink_interval) + + return input + + +def apply_random_eye_blinks_context( + animation_params: np.ndarray, + processed_frames: int = 0, + intensity_range: tuple = (0.8, 1.0) +) -> np.ndarray: + """Applies random eye blink patterns to facial animation parameters. + + Args: + animation_params: Input facial animation parameters array with shape [num_frames, num_features]. + Columns 8 and 9 typically represent left/right eye blink parameters. + processed_frames: Number of already processed frames that shouldn't be modified + intensity_range: Tuple defining (min, max) scaling for blink intensity + + Returns: + Modified animation parameters array with random eye blinks added to unprocessed frames + """ + remaining_frames = animation_params.shape[0] - processed_frames + + # Only apply blinks if there's enough remaining frames (blink pattern requires 7 frames) + if remaining_frames <= 7: + return animation_params + + # Configure blink timing parameters + min_blink_interval = 40 # Minimum frames between blinks + max_blink_interval = 100 # Maximum frames between blinks + + # Find last blink in previously processed frames (column 8 > 0.5 indicates blink) + previous_blink_indices = np.where(animation_params[:processed_frames, 8] > 0.5)[0] + last_processed_blink = previous_blink_indices[-1] - 7 if previous_blink_indices.size > 0 else processed_frames + + # Calculate first new blink position + blink_interval = np.random.randint(min_blink_interval, max_blink_interval) + first_blink_start = max(0, blink_interval - last_processed_blink) + + # Apply first blink if there's enough space + if first_blink_start <= (remaining_frames - 7): + # Randomly select blink pattern and intensity + blink_pattern = BLINK_PATTERNS[np.random.randint(0, 4)] + intensity = np.random.uniform(*intensity_range) + + # Calculate blink frame range + blink_start = processed_frames + first_blink_start + blink_end = blink_start + 7 + + # Apply pattern to both eyes + animation_params[blink_start:blink_end, 8] = blink_pattern * intensity + animation_params[blink_start:blink_end, 9] = blink_pattern * intensity + + # Check space for additional blink + remaining_after_blink = animation_params.shape[0] - blink_end + if remaining_after_blink > min_blink_interval: + # Calculate second blink position + second_intensity = np.random.uniform(*intensity_range) + second_interval = np.random.randint(min_blink_interval, max_blink_interval) + + if (remaining_after_blink - 7) > second_interval: + second_pattern = BLINK_PATTERNS[np.random.randint(0, 4)] + second_blink_start = blink_end + second_interval + second_blink_end = second_blink_start + 7 + + # Apply second blink + animation_params[second_blink_start:second_blink_end, 8] = second_pattern * second_intensity + animation_params[second_blink_start:second_blink_end, 9] = second_pattern * second_intensity + + return animation_params + + +def export_blendshape_animation( + blendshape_weights: np.ndarray, + output_path: str, + blendshape_names: List[str], + fps: float, + rotation_data: Optional[np.ndarray] = None +) -> None: + """ + Export blendshape animation data to JSON format compatible with ARKit. + + Args: + blendshape_weights: 2D numpy array of shape (N, 52) containing animation frames + output_path: Full path for output JSON file (including .json extension) + blendshape_names: Ordered list of 52 ARKit-standard blendshape names + fps: Frame rate for timing calculations (frames per second) + rotation_data: Optional 3D rotation data array of shape (N, 3) + + Raises: + ValueError: If input dimensions are incompatible + IOError: If file writing fails + """ + # Validate input dimensions + if blendshape_weights.shape[1] != 52: + raise ValueError(f"Expected 52 blendshapes, got {blendshape_weights.shape[1]}") + if len(blendshape_names) != 52: + raise ValueError(f"Requires 52 blendshape names, got {len(blendshape_names)}") + if rotation_data is not None and len(rotation_data) != len(blendshape_weights): + raise ValueError("Rotation data length must match animation frames") + + # Build animation data structure + animation_data = { + "names":blendshape_names, + "metadata": { + "fps": fps, + "frame_count": len(blendshape_weights), + "blendshape_names": blendshape_names + }, + "frames": [] + } + + # Convert numpy array to serializable format + for frame_idx in range(blendshape_weights.shape[0]): + frame_data = { + "weights": blendshape_weights[frame_idx].tolist(), + "time": frame_idx / fps, + "rotation": rotation_data[frame_idx].tolist() if rotation_data else [] + } + animation_data["frames"].append(frame_data) + + # Safeguard against data loss + if not output_path.endswith('.json'): + output_path += '.json' + + # Write to file with error handling + try: + with open(output_path, 'w', encoding='utf-8') as json_file: + json.dump(animation_data, json_file, indent=2, ensure_ascii=False) + except Exception as e: + raise IOError(f"Failed to write animation data: {str(e)}") from e + + +def apply_savitzky_golay_smoothing( + input_data: np.ndarray, + window_length: int = 5, + polyorder: int = 2, + axis: int = 0, + validate: bool = True +) -> Tuple[np.ndarray, Optional[float]]: + """ + Apply Savitzky-Golay filter smoothing along specified axis of input data. + + Args: + input_data: 2D numpy array of shape (n_samples, n_features) + window_length: Length of the filter window (must be odd and > polyorder) + polyorder: Order of the polynomial fit + axis: Axis along which to filter (0: column-wise, 1: row-wise) + validate: Enable input validation checks when True + + Returns: + tuple: (smoothed_data, processing_time) + - smoothed_data: Smoothed output array + - processing_time: Execution time in seconds (None in validation mode) + + Raises: + ValueError: For invalid input dimensions or filter parameters + """ + # Validation mode timing bypass + processing_time = None + + if validate: + # Input integrity checks + if input_data.ndim != 2: + raise ValueError(f"Expected 2D input, got {input_data.ndim}D array") + + if window_length % 2 == 0 or window_length < 3: + raise ValueError("Window length must be odd integer ≥ 3") + + if polyorder >= window_length: + raise ValueError("Polynomial order must be < window length") + + # Store original dtype and convert to float64 for numerical stability + original_dtype = input_data.dtype + working_data = input_data.astype(np.float64) + + # Start performance timer + timer_start = time.perf_counter() + + try: + # Vectorized Savitzky-Golay application + smoothed_data = savgol_filter(working_data, + window_length=window_length, + polyorder=polyorder, + axis=axis, + mode='mirror') + except Exception as e: + raise RuntimeError(f"Filtering failed: {str(e)}") from e + + # Stop timer and calculate duration + processing_time = time.perf_counter() - timer_start + + # Restore original data type with overflow protection + return ( + np.clip(smoothed_data, + 0.0, + 1.0 + ).astype(original_dtype), + processing_time + ) + + +def _blend_region_start( + array: np.ndarray, + region: np.ndarray, + processed_boundary: int, + blend_frames: int +) -> None: + """Applies linear blend between last active frame and silent region start.""" + blend_length = min(blend_frames, region[0] - processed_boundary) + if blend_length <= 0: + return + + pre_frame = array[region[0] - 1] + for i in range(blend_length): + weight = (i + 1) / (blend_length + 1) + array[region[0] + i] = pre_frame * (1 - weight) + array[region[0] + i] * weight + +def _blend_region_end( + array: np.ndarray, + region: np.ndarray, + blend_frames: int +) -> None: + """Applies linear blend between silent region end and next active frame.""" + blend_length = min(blend_frames, array.shape[0] - region[-1] - 1) + if blend_length <= 0: + return + + post_frame = array[region[-1] + 1] + for i in range(blend_length): + weight = (i + 1) / (blend_length + 1) + array[region[-1] - i] = post_frame * (1 - weight) + array[region[-1] - i] * weight + +def find_low_value_regions( + signal: np.ndarray, + threshold: float, + min_region_length: int = 5 +) -> list: + """Identifies contiguous regions in a signal where values fall below a threshold. + + Args: + signal: Input 1D array of numerical values + threshold: Value threshold for identifying low regions + min_region_length: Minimum consecutive samples required to qualify as a region + + Returns: + List of numpy arrays, each containing indices for a qualifying low-value region + """ + low_value_indices = np.where(signal < threshold)[0] + contiguous_regions = [] + current_region_length = 0 + region_start_idx = 0 + + for i in range(1, len(low_value_indices)): + # Check if current index continues a consecutive sequence + if low_value_indices[i] != low_value_indices[i - 1] + 1: + # Finalize previous region if it meets length requirement + if current_region_length >= min_region_length: + contiguous_regions.append(low_value_indices[region_start_idx:i]) + # Reset tracking for new potential region + region_start_idx = i + current_region_length = 0 + current_region_length += 1 + + # Add the final region if it qualifies + if current_region_length >= min_region_length: + contiguous_regions.append(low_value_indices[region_start_idx:]) + + return contiguous_regions + + +def smooth_mouth_movements( + blend_shapes: np.ndarray, + processed_frames: int, + volume: np.ndarray = None, + silence_threshold: float = 0.001, + min_silence_duration: int = 7, + blend_window: int = 3 +) -> np.ndarray: + """Reduces jaw movement artifacts during silent periods in audio-driven animation. + + Args: + blend_shapes: Array of facial blend shape weights [num_frames, num_blendshapes] + processed_frames: Number of already processed frames that shouldn't be modified + volume: Audio volume array used to detect silent periods + silence_threshold: Volume threshold for considering a frame silent + min_silence_duration: Minimum consecutive silent frames to qualify for processing + blend_window: Number of frames to smooth at region boundaries + + Returns: + Modified blend shape array with reduced mouth movements during silence + """ + if volume is None: + return blend_shapes + + # Detect silence periods using volume data + silent_regions = find_low_value_regions( + volume, + threshold=silence_threshold, + min_region_length=min_silence_duration + ) + + for region_indices in silent_regions: + # Reduce mouth blend shapes in silent region + mouth_blend_indices = [ARKitBlendShape.index(name) for name in MOUTH_BLENDSHAPES] + for region_indice in region_indices.tolist(): + blend_shapes[region_indice, mouth_blend_indices] *= 0.1 + + try: + # Smooth transition into silent region + _blend_region_start( + blend_shapes, + region_indices, + processed_frames, + blend_window + ) + + # Smooth transition out of silent region + _blend_region_end( + blend_shapes, + region_indices, + blend_window + ) + except IndexError as e: + warnings.warn(f"Edge blending skipped at region {region_indices}: {str(e)}") + + return blend_shapes + + +def apply_frame_blending( + blend_shapes: np.ndarray, + processed_frames: int, + initial_blend_window: int = 3, + subsequent_blend_window: int = 5 +) -> np.ndarray: + """Smooths transitions between processed and unprocessed animation frames using linear blending. + + Args: + blend_shapes: Array of facial blend shape weights [num_frames, num_blendshapes] + processed_frames: Number of already processed frames (0 means no previous processing) + initial_blend_window: Max frames to blend at sequence start + subsequent_blend_window: Max frames to blend between processed and new frames + + Returns: + Modified blend shape array with smoothed transitions + """ + if processed_frames > 0: + # Blend transition between existing and new animation + _blend_animation_segment( + blend_shapes, + transition_start=processed_frames, + blend_window=subsequent_blend_window, + reference_frame=blend_shapes[processed_frames - 1] + ) + else: + # Smooth initial frames from neutral expression (zeros) + _blend_animation_segment( + blend_shapes, + transition_start=0, + blend_window=initial_blend_window, + reference_frame=np.zeros_like(blend_shapes[0]) + ) + return blend_shapes + + +def _blend_animation_segment( + array: np.ndarray, + transition_start: int, + blend_window: int, + reference_frame: np.ndarray +) -> None: + """Applies linear interpolation between reference frame and target frames. + + Args: + array: Blend shape array to modify + transition_start: Starting index for blending + blend_window: Maximum number of frames to blend + reference_frame: The reference frame to blend from + """ + actual_blend_length = min(blend_window, array.shape[0] - transition_start) + + for frame_offset in range(actual_blend_length): + current_idx = transition_start + frame_offset + blend_weight = (frame_offset + 1) / (actual_blend_length + 1) + + # Linear interpolation: ref_frame * (1 - weight) + current_frame * weight + array[current_idx] = (reference_frame * (1 - blend_weight) + + array[current_idx] * blend_weight) + + +BROW1 = np.array([[0.05597309, 0.05727929, 0.07995935, 0. , 0. ], + [0.00757574, 0.00936678, 0.12242376, 0. , 0. ], + [0. , 0. , 0.14943372, 0.04535687, 0.04264118], + [0. , 0. , 0.18015374, 0.09019445, 0.08736137], + [0. , 0. , 0.20549579, 0.12802747, 0.12450772], + [0. , 0. , 0.21098022, 0.1369939 , 0.13343132], + [0. , 0. , 0.20904602, 0.13903855, 0.13562402], + [0. , 0. , 0.20365039, 0.13977394, 0.13653506], + [0. , 0. , 0.19714841, 0.14096624, 0.13805152], + [0. , 0. , 0.20325482, 0.17303431, 0.17028868], + [0. , 0. , 0.21990852, 0.20164253, 0.19818163], + [0. , 0. , 0.23858181, 0.21908803, 0.21540019], + [0. , 0. , 0.2567876 , 0.23762083, 0.23396946], + [0. , 0. , 0.34093422, 0.27898848, 0.27651772], + [0. , 0. , 0.45288125, 0.35008961, 0.34887788], + [0. , 0. , 0.48076251, 0.36878952, 0.36778417], + [0. , 0. , 0.47798249, 0.36362219, 0.36145973], + [0. , 0. , 0.46186113, 0.33865979, 0.33597934], + [0. , 0. , 0.45264384, 0.33152157, 0.32891783], + [0. , 0. , 0.40986338, 0.29646468, 0.2945672 ], + [0. , 0. , 0.35628179, 0.23356403, 0.23155804], + [0. , 0. , 0.30870566, 0.1780673 , 0.17637439], + [0. , 0. , 0.25293985, 0.10710219, 0.10622486], + [0. , 0. , 0.18743332, 0.03252602, 0.03244236], + [0.02340254, 0.02364671, 0.15736724, 0. , 0. ]]) + +BROW2 = np.array([ + [0. , 0. , 0.09799323, 0.05944436, 0.05002545], + [0. , 0. , 0.09780276, 0.07674237, 0.01636653], + [0. , 0. , 0.11136199, 0.1027964 , 0.04249811], + [0. , 0. , 0.26883412, 0.15861984, 0.15832305], + [0. , 0. , 0.42191629, 0.27038204, 0.27007768], + [0. , 0. , 0.3404977 , 0.21633868, 0.21597538], + [0. , 0. , 0.27301185, 0.17176409, 0.17134669], + [0. , 0. , 0.25960442, 0.15670464, 0.15622253], + [0. , 0. , 0.22877269, 0.11805892, 0.11754539], + [0. , 0. , 0.1451605 , 0.06389034, 0.0636282 ]]) + +BROW3 = np.array([ + [0. , 0. , 0.124 , 0.0295, 0.0295], + [0. , 0. , 0.267 , 0.184 , 0.184 ], + [0. , 0. , 0.359 , 0.2765, 0.2765], + [0. , 0. , 0.3945, 0.3125, 0.3125], + [0. , 0. , 0.4125, 0.331 , 0.331 ], + [0. , 0. , 0.4235, 0.3445, 0.3445], + [0. , 0. , 0.4085, 0.3305, 0.3305], + [0. , 0. , 0.3695, 0.294 , 0.294 ], + [0. , 0. , 0.2835, 0.213 , 0.213 ], + [0. , 0. , 0.1795, 0.1005, 0.1005], + [0. , 0. , 0.108 , 0.014 , 0.014 ]]) + + +import numpy as np +from scipy.ndimage import label + + +def apply_random_brow_movement(input_exp, volume): + FRAME_SEGMENT = 150 + HOLD_THRESHOLD = 10 + VOLUME_THRESHOLD = 0.08 + MIN_REGION_LENGTH = 6 + STRENGTH_RANGE = (0.7, 1.3) + + BROW_PEAKS = { + 0: np.argmax(BROW1[:, 2]), + 1: np.argmax(BROW2[:, 2]) + } + + for seg_start in range(0, len(volume), FRAME_SEGMENT): + seg_end = min(seg_start + FRAME_SEGMENT, len(volume)) + seg_volume = volume[seg_start:seg_end] + + candidate_regions = [] + + high_vol_mask = seg_volume > VOLUME_THRESHOLD + labeled_array, num_features = label(high_vol_mask) + + for i in range(1, num_features + 1): + region = (labeled_array == i) + region_indices = np.where(region)[0] + if len(region_indices) >= MIN_REGION_LENGTH: + candidate_regions.append(region_indices) + + if candidate_regions: + selected_region = candidate_regions[np.random.choice(len(candidate_regions))] + region_start = selected_region[0] + region_end = selected_region[-1] + region_length = region_end - region_start + 1 + + brow_idx = np.random.randint(0, 2) + base_brow = BROW1 if brow_idx == 0 else BROW2 + peak_idx = BROW_PEAKS[brow_idx] + + if region_length > HOLD_THRESHOLD: + local_max_pos = seg_volume[selected_region].argmax() + global_peak_frame = seg_start + selected_region[local_max_pos] + + rise_anim = base_brow[:peak_idx + 1] + hold_frame = base_brow[peak_idx:peak_idx + 1] + + insert_start = max(global_peak_frame - peak_idx, seg_start) + insert_end = min(global_peak_frame + (region_length - local_max_pos), seg_end) + + strength = np.random.uniform(*STRENGTH_RANGE) + + if insert_start + len(rise_anim) <= seg_end: + input_exp[insert_start:insert_start + len(rise_anim), :5] += rise_anim * strength + hold_duration = insert_end - (insert_start + len(rise_anim)) + if hold_duration > 0: + input_exp[insert_start + len(rise_anim):insert_end, :5] += np.tile(hold_frame * strength, + (hold_duration, 1)) + else: + anim_length = base_brow.shape[0] + insert_pos = seg_start + region_start + (region_length - anim_length) // 2 + insert_pos = max(seg_start, min(insert_pos, seg_end - anim_length)) + + if insert_pos + anim_length <= seg_end: + strength = np.random.uniform(*STRENGTH_RANGE) + input_exp[insert_pos:insert_pos + anim_length, :5] += base_brow * strength + + return np.clip(input_exp, 0, 1) \ No newline at end of file diff --git a/audio2exp-service/LAM_Audio2Expression/requirements.txt b/audio2exp-service/LAM_Audio2Expression/requirements.txt new file mode 100644 index 0000000..5e29d79 --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/requirements.txt @@ -0,0 +1,11 @@ +#spleeter==2.4.0 +opencv_python_headless==4.11.0.86 +gradio==5.25.2 +omegaconf==2.3.0 +addict==2.4.0 +yapf==0.40.1 +librosa==0.11.0 +transformers==4.36.2 +termcolor==3.0.1 +numpy==1.26.3 +patool \ No newline at end of file diff --git a/audio2exp-service/LAM_Audio2Expression/scripts/install/install_cu118.sh b/audio2exp-service/LAM_Audio2Expression/scripts/install/install_cu118.sh new file mode 100644 index 0000000..c3cbc44 --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/scripts/install/install_cu118.sh @@ -0,0 +1,9 @@ +# install torch 2.1.2 +# or conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=11.8 -c pytorch -c nvidia +pip install torch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 --index-url https://download.pytorch.org/whl/cu118 + +# install dependencies +pip install -r requirements.txt + +# install H5-render +pip install wheels/gradio_gaussian_render-0.0.3-py3-none-any.whl \ No newline at end of file diff --git a/audio2exp-service/LAM_Audio2Expression/scripts/install/install_cu121.sh b/audio2exp-service/LAM_Audio2Expression/scripts/install/install_cu121.sh new file mode 100644 index 0000000..66a0f2c --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/scripts/install/install_cu121.sh @@ -0,0 +1,9 @@ +# install torch 2.1.2 +# or conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia +pip install torch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 --index-url https://download.pytorch.org/whl/cu121 + +# install dependencies +pip install -r requirements.txt + +# install H5-render +pip install wheels/gradio_gaussian_render-0.0.3-py3-none-any.whl \ No newline at end of file diff --git a/audio2exp-service/LAM_Audio2Expression/utils/__init__.py b/audio2exp-service/LAM_Audio2Expression/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/audio2exp-service/LAM_Audio2Expression/utils/cache.py b/audio2exp-service/LAM_Audio2Expression/utils/cache.py new file mode 100644 index 0000000..ac8bc33 --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/utils/cache.py @@ -0,0 +1,53 @@ +""" +The code is base on https://github.com/Pointcept/Pointcept +""" + +import os +import SharedArray + +try: + from multiprocessing.shared_memory import ShareableList +except ImportError: + import warnings + + warnings.warn("Please update python version >= 3.8 to enable shared_memory") +import numpy as np + + +def shared_array(name, var=None): + if var is not None: + # check exist + if os.path.exists(f"/dev/shm/{name}"): + return SharedArray.attach(f"shm://{name}") + # create shared_array + data = SharedArray.create(f"shm://{name}", var.shape, dtype=var.dtype) + data[...] = var[...] + data.flags.writeable = False + else: + data = SharedArray.attach(f"shm://{name}").copy() + return data + + +def shared_dict(name, var=None): + name = str(name) + assert "." not in name # '.' is used as sep flag + data = {} + if var is not None: + assert isinstance(var, dict) + keys = var.keys() + # current version only cache np.array + keys_valid = [] + for key in keys: + if isinstance(var[key], np.ndarray): + keys_valid.append(key) + keys = keys_valid + + ShareableList(sequence=keys, name=name + ".keys") + for key in keys: + if isinstance(var[key], np.ndarray): + data[key] = shared_array(name=f"{name}.{key}", var=var[key]) + else: + keys = list(ShareableList(name=name + ".keys")) + for key in keys: + data[key] = shared_array(name=f"{name}.{key}") + return data diff --git a/audio2exp-service/LAM_Audio2Expression/utils/comm.py b/audio2exp-service/LAM_Audio2Expression/utils/comm.py new file mode 100644 index 0000000..23bec8e --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/utils/comm.py @@ -0,0 +1,192 @@ +""" +The code is base on https://github.com/Pointcept/Pointcept +""" + +import functools +import numpy as np +import torch +import torch.distributed as dist + +_LOCAL_PROCESS_GROUP = None +""" +A torch process group which only includes processes that on the same machine as the current process. +This variable is set when processes are spawned by `launch()` in "engine/launch.py". +""" + + +def get_world_size() -> int: + if not dist.is_available(): + return 1 + if not dist.is_initialized(): + return 1 + return dist.get_world_size() + + +def get_rank() -> int: + if not dist.is_available(): + return 0 + if not dist.is_initialized(): + return 0 + return dist.get_rank() + + +def get_local_rank() -> int: + """ + Returns: + The rank of the current process within the local (per-machine) process group. + """ + if not dist.is_available(): + return 0 + if not dist.is_initialized(): + return 0 + assert ( + _LOCAL_PROCESS_GROUP is not None + ), "Local process group is not created! Please use launch() to spawn processes!" + return dist.get_rank(group=_LOCAL_PROCESS_GROUP) + + +def get_local_size() -> int: + """ + Returns: + The size of the per-machine process group, + i.e. the number of processes per machine. + """ + if not dist.is_available(): + return 1 + if not dist.is_initialized(): + return 1 + return dist.get_world_size(group=_LOCAL_PROCESS_GROUP) + + +def is_main_process() -> bool: + return get_rank() == 0 + + +def synchronize(): + """ + Helper function to synchronize (barrier) among all processes when + using distributed training + """ + if not dist.is_available(): + return + if not dist.is_initialized(): + return + world_size = dist.get_world_size() + if world_size == 1: + return + if dist.get_backend() == dist.Backend.NCCL: + # This argument is needed to avoid warnings. + # It's valid only for NCCL backend. + dist.barrier(device_ids=[torch.cuda.current_device()]) + else: + dist.barrier() + + +@functools.lru_cache() +def _get_global_gloo_group(): + """ + Return a process group based on gloo backend, containing all the ranks + The result is cached. + """ + if dist.get_backend() == "nccl": + return dist.new_group(backend="gloo") + else: + return dist.group.WORLD + + +def all_gather(data, group=None): + """ + Run all_gather on arbitrary picklable data (not necessarily tensors). + Args: + data: any picklable object + group: a torch process group. By default, will use a group which + contains all ranks on gloo backend. + Returns: + list[data]: list of data gathered from each rank + """ + if get_world_size() == 1: + return [data] + if group is None: + group = ( + _get_global_gloo_group() + ) # use CPU group by default, to reduce GPU RAM usage. + world_size = dist.get_world_size(group) + if world_size == 1: + return [data] + + output = [None for _ in range(world_size)] + dist.all_gather_object(output, data, group=group) + return output + + +def gather(data, dst=0, group=None): + """ + Run gather on arbitrary picklable data (not necessarily tensors). + Args: + data: any picklable object + dst (int): destination rank + group: a torch process group. By default, will use a group which + contains all ranks on gloo backend. + Returns: + list[data]: on dst, a list of data gathered from each rank. Otherwise, + an empty list. + """ + if get_world_size() == 1: + return [data] + if group is None: + group = _get_global_gloo_group() + world_size = dist.get_world_size(group=group) + if world_size == 1: + return [data] + rank = dist.get_rank(group=group) + + if rank == dst: + output = [None for _ in range(world_size)] + dist.gather_object(data, output, dst=dst, group=group) + return output + else: + dist.gather_object(data, None, dst=dst, group=group) + return [] + + +def shared_random_seed(): + """ + Returns: + int: a random number that is the same across all workers. + If workers need a shared RNG, they can use this shared seed to + create one. + All workers must call this function, otherwise it will deadlock. + """ + ints = np.random.randint(2**31) + all_ints = all_gather(ints) + return all_ints[0] + + +def reduce_dict(input_dict, average=True): + """ + Reduce the values in the dictionary from all processes so that process with rank + 0 has the reduced results. + Args: + input_dict (dict): inputs to be reduced. All the values must be scalar CUDA Tensor. + average (bool): whether to do average or sum + Returns: + a dict with the same keys as input_dict, after reduction. + """ + world_size = get_world_size() + if world_size < 2: + return input_dict + with torch.no_grad(): + names = [] + values = [] + # sort the keys so that they are consistent across processes + for k in sorted(input_dict.keys()): + names.append(k) + values.append(input_dict[k]) + values = torch.stack(values, dim=0) + dist.reduce(values, dst=0) + if dist.get_rank() == 0 and average: + # only main process gets accumulated, so only divide by + # world_size in this case + values /= world_size + reduced_dict = {k: v for k, v in zip(names, values)} + return reduced_dict diff --git a/audio2exp-service/LAM_Audio2Expression/utils/config.py b/audio2exp-service/LAM_Audio2Expression/utils/config.py new file mode 100644 index 0000000..3782825 --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/utils/config.py @@ -0,0 +1,696 @@ +""" +The code is base on https://github.com/Pointcept/Pointcept +""" +import ast +import copy +import os +import os.path as osp +import platform +import shutil +import sys +import tempfile +import uuid +import warnings +from argparse import Action, ArgumentParser +from collections import abc +from importlib import import_module + +from addict import Dict +from yapf.yapflib.yapf_api import FormatCode + +from .misc import import_modules_from_strings +from .path import check_file_exist + +if platform.system() == "Windows": + import regex as re +else: + import re + +BASE_KEY = "_base_" +DELETE_KEY = "_delete_" +DEPRECATION_KEY = "_deprecation_" +RESERVED_KEYS = ["filename", "text", "pretty_text"] + + +class ConfigDict(Dict): + def __missing__(self, name): + raise KeyError(name) + + def __getattr__(self, name): + try: + value = super(ConfigDict, self).__getattr__(name) + except KeyError: + ex = AttributeError( + f"'{self.__class__.__name__}' object has no " f"attribute '{name}'" + ) + except Exception as e: + ex = e + else: + return value + raise ex + + +def add_args(parser, cfg, prefix=""): + for k, v in cfg.items(): + if isinstance(v, str): + parser.add_argument("--" + prefix + k) + elif isinstance(v, int): + parser.add_argument("--" + prefix + k, type=int) + elif isinstance(v, float): + parser.add_argument("--" + prefix + k, type=float) + elif isinstance(v, bool): + parser.add_argument("--" + prefix + k, action="store_true") + elif isinstance(v, dict): + add_args(parser, v, prefix + k + ".") + elif isinstance(v, abc.Iterable): + parser.add_argument("--" + prefix + k, type=type(v[0]), nargs="+") + else: + print(f"cannot parse key {prefix + k} of type {type(v)}") + return parser + + +class Config: + """A facility for config and config files. + + It supports common file formats as configs: python/json/yaml. The interface + is the same as a dict object and also allows access config values as + attributes. + + Example: + >>> cfg = Config(dict(a=1, b=dict(b1=[0, 1]))) + >>> cfg.a + 1 + >>> cfg.b + {'b1': [0, 1]} + >>> cfg.b.b1 + [0, 1] + >>> cfg = Config.fromfile('tests/data/config/a.py') + >>> cfg.filename + "/home/kchen/projects/mmcv/tests/data/config/a.py" + >>> cfg.item4 + 'test' + >>> cfg + "Config [path: /home/kchen/projects/mmcv/tests/data/config/a.py]: " + "{'item1': [1, 2], 'item2': {'a': 0}, 'item3': True, 'item4': 'test'}" + """ + + @staticmethod + def _validate_py_syntax(filename): + with open(filename, "r", encoding="utf-8") as f: + # Setting encoding explicitly to resolve coding issue on windows + content = f.read() + try: + ast.parse(content) + except SyntaxError as e: + raise SyntaxError( + "There are syntax errors in config " f"file {filename}: {e}" + ) + + @staticmethod + def _substitute_predefined_vars(filename, temp_config_name): + file_dirname = osp.dirname(filename) + file_basename = osp.basename(filename) + file_basename_no_extension = osp.splitext(file_basename)[0] + file_extname = osp.splitext(filename)[1] + support_templates = dict( + fileDirname=file_dirname, + fileBasename=file_basename, + fileBasenameNoExtension=file_basename_no_extension, + fileExtname=file_extname, + ) + with open(filename, "r", encoding="utf-8") as f: + # Setting encoding explicitly to resolve coding issue on windows + config_file = f.read() + for key, value in support_templates.items(): + regexp = r"\{\{\s*" + str(key) + r"\s*\}\}" + value = value.replace("\\", "/") + config_file = re.sub(regexp, value, config_file) + with open(temp_config_name, "w", encoding="utf-8") as tmp_config_file: + tmp_config_file.write(config_file) + + @staticmethod + def _pre_substitute_base_vars(filename, temp_config_name): + """Substitute base variable placehoders to string, so that parsing + would work.""" + with open(filename, "r", encoding="utf-8") as f: + # Setting encoding explicitly to resolve coding issue on windows + config_file = f.read() + base_var_dict = {} + regexp = r"\{\{\s*" + BASE_KEY + r"\.([\w\.]+)\s*\}\}" + base_vars = set(re.findall(regexp, config_file)) + for base_var in base_vars: + randstr = f"_{base_var}_{uuid.uuid4().hex.lower()[:6]}" + base_var_dict[randstr] = base_var + regexp = r"\{\{\s*" + BASE_KEY + r"\." + base_var + r"\s*\}\}" + config_file = re.sub(regexp, f'"{randstr}"', config_file) + with open(temp_config_name, "w", encoding="utf-8") as tmp_config_file: + tmp_config_file.write(config_file) + return base_var_dict + + @staticmethod + def _substitute_base_vars(cfg, base_var_dict, base_cfg): + """Substitute variable strings to their actual values.""" + cfg = copy.deepcopy(cfg) + + if isinstance(cfg, dict): + for k, v in cfg.items(): + if isinstance(v, str) and v in base_var_dict: + new_v = base_cfg + for new_k in base_var_dict[v].split("."): + new_v = new_v[new_k] + cfg[k] = new_v + elif isinstance(v, (list, tuple, dict)): + cfg[k] = Config._substitute_base_vars(v, base_var_dict, base_cfg) + elif isinstance(cfg, tuple): + cfg = tuple( + Config._substitute_base_vars(c, base_var_dict, base_cfg) for c in cfg + ) + elif isinstance(cfg, list): + cfg = [ + Config._substitute_base_vars(c, base_var_dict, base_cfg) for c in cfg + ] + elif isinstance(cfg, str) and cfg in base_var_dict: + new_v = base_cfg + for new_k in base_var_dict[cfg].split("."): + new_v = new_v[new_k] + cfg = new_v + + return cfg + + @staticmethod + def _file2dict(filename, use_predefined_variables=True): + filename = osp.abspath(osp.expanduser(filename)) + check_file_exist(filename) + fileExtname = osp.splitext(filename)[1] + if fileExtname not in [".py", ".json", ".yaml", ".yml"]: + raise IOError("Only py/yml/yaml/json type are supported now!") + + with tempfile.TemporaryDirectory() as temp_config_dir: + temp_config_file = tempfile.NamedTemporaryFile( + dir=temp_config_dir, suffix=fileExtname + ) + if platform.system() == "Windows": + temp_config_file.close() + temp_config_name = osp.basename(temp_config_file.name) + # Substitute predefined variables + if use_predefined_variables: + Config._substitute_predefined_vars(filename, temp_config_file.name) + else: + shutil.copyfile(filename, temp_config_file.name) + # Substitute base variables from placeholders to strings + base_var_dict = Config._pre_substitute_base_vars( + temp_config_file.name, temp_config_file.name + ) + + if filename.endswith(".py"): + temp_module_name = osp.splitext(temp_config_name)[0] + sys.path.insert(0, temp_config_dir) + Config._validate_py_syntax(filename) + mod = import_module(temp_module_name) + sys.path.pop(0) + cfg_dict = { + name: value + for name, value in mod.__dict__.items() + if not name.startswith("__") + } + # delete imported module + del sys.modules[temp_module_name] + elif filename.endswith((".yml", ".yaml", ".json")): + raise NotImplementedError + # close temp file + temp_config_file.close() + + # check deprecation information + if DEPRECATION_KEY in cfg_dict: + deprecation_info = cfg_dict.pop(DEPRECATION_KEY) + warning_msg = ( + f"The config file {filename} will be deprecated " "in the future." + ) + if "expected" in deprecation_info: + warning_msg += f' Please use {deprecation_info["expected"]} ' "instead." + if "reference" in deprecation_info: + warning_msg += ( + " More information can be found at " + f'{deprecation_info["reference"]}' + ) + warnings.warn(warning_msg) + + cfg_text = filename + "\n" + with open(filename, "r", encoding="utf-8") as f: + # Setting encoding explicitly to resolve coding issue on windows + cfg_text += f.read() + + if BASE_KEY in cfg_dict: + cfg_dir = osp.dirname(filename) + base_filename = cfg_dict.pop(BASE_KEY) + base_filename = ( + base_filename if isinstance(base_filename, list) else [base_filename] + ) + + cfg_dict_list = list() + cfg_text_list = list() + for f in base_filename: + _cfg_dict, _cfg_text = Config._file2dict(osp.join(cfg_dir, f)) + cfg_dict_list.append(_cfg_dict) + cfg_text_list.append(_cfg_text) + + base_cfg_dict = dict() + for c in cfg_dict_list: + duplicate_keys = base_cfg_dict.keys() & c.keys() + if len(duplicate_keys) > 0: + raise KeyError( + "Duplicate key is not allowed among bases. " + f"Duplicate keys: {duplicate_keys}" + ) + base_cfg_dict.update(c) + + # Substitute base variables from strings to their actual values + cfg_dict = Config._substitute_base_vars( + cfg_dict, base_var_dict, base_cfg_dict + ) + + base_cfg_dict = Config._merge_a_into_b(cfg_dict, base_cfg_dict) + cfg_dict = base_cfg_dict + + # merge cfg_text + cfg_text_list.append(cfg_text) + cfg_text = "\n".join(cfg_text_list) + + return cfg_dict, cfg_text + + @staticmethod + def _merge_a_into_b(a, b, allow_list_keys=False): + """merge dict ``a`` into dict ``b`` (non-inplace). + + Values in ``a`` will overwrite ``b``. ``b`` is copied first to avoid + in-place modifications. + + Args: + a (dict): The source dict to be merged into ``b``. + b (dict): The origin dict to be fetch keys from ``a``. + allow_list_keys (bool): If True, int string keys (e.g. '0', '1') + are allowed in source ``a`` and will replace the element of the + corresponding index in b if b is a list. Default: False. + + Returns: + dict: The modified dict of ``b`` using ``a``. + + Examples: + # Normally merge a into b. + >>> Config._merge_a_into_b( + ... dict(obj=dict(a=2)), dict(obj=dict(a=1))) + {'obj': {'a': 2}} + + # Delete b first and merge a into b. + >>> Config._merge_a_into_b( + ... dict(obj=dict(_delete_=True, a=2)), dict(obj=dict(a=1))) + {'obj': {'a': 2}} + + # b is a list + >>> Config._merge_a_into_b( + ... {'0': dict(a=2)}, [dict(a=1), dict(b=2)], True) + [{'a': 2}, {'b': 2}] + """ + b = b.copy() + for k, v in a.items(): + if allow_list_keys and k.isdigit() and isinstance(b, list): + k = int(k) + if len(b) <= k: + raise KeyError(f"Index {k} exceeds the length of list {b}") + b[k] = Config._merge_a_into_b(v, b[k], allow_list_keys) + elif isinstance(v, dict) and k in b and not v.pop(DELETE_KEY, False): + allowed_types = (dict, list) if allow_list_keys else dict + if not isinstance(b[k], allowed_types): + raise TypeError( + f"{k}={v} in child config cannot inherit from base " + f"because {k} is a dict in the child config but is of " + f"type {type(b[k])} in base config. You may set " + f"`{DELETE_KEY}=True` to ignore the base config" + ) + b[k] = Config._merge_a_into_b(v, b[k], allow_list_keys) + else: + b[k] = v + return b + + @staticmethod + def fromfile(filename, use_predefined_variables=True, import_custom_modules=True): + cfg_dict, cfg_text = Config._file2dict(filename, use_predefined_variables) + if import_custom_modules and cfg_dict.get("custom_imports", None): + import_modules_from_strings(**cfg_dict["custom_imports"]) + return Config(cfg_dict, cfg_text=cfg_text, filename=filename) + + @staticmethod + def fromstring(cfg_str, file_format): + """Generate config from config str. + + Args: + cfg_str (str): Config str. + file_format (str): Config file format corresponding to the + config str. Only py/yml/yaml/json type are supported now! + + Returns: + obj:`Config`: Config obj. + """ + if file_format not in [".py", ".json", ".yaml", ".yml"]: + raise IOError("Only py/yml/yaml/json type are supported now!") + if file_format != ".py" and "dict(" in cfg_str: + # check if users specify a wrong suffix for python + warnings.warn('Please check "file_format", the file format may be .py') + with tempfile.NamedTemporaryFile( + "w", encoding="utf-8", suffix=file_format, delete=False + ) as temp_file: + temp_file.write(cfg_str) + # on windows, previous implementation cause error + # see PR 1077 for details + cfg = Config.fromfile(temp_file.name) + os.remove(temp_file.name) + return cfg + + @staticmethod + def auto_argparser(description=None): + """Generate argparser from config file automatically (experimental)""" + partial_parser = ArgumentParser(description=description) + partial_parser.add_argument("config", help="config file path") + cfg_file = partial_parser.parse_known_args()[0].config + cfg = Config.fromfile(cfg_file) + parser = ArgumentParser(description=description) + parser.add_argument("config", help="config file path") + add_args(parser, cfg) + return parser, cfg + + def __init__(self, cfg_dict=None, cfg_text=None, filename=None): + if cfg_dict is None: + cfg_dict = dict() + elif not isinstance(cfg_dict, dict): + raise TypeError("cfg_dict must be a dict, but " f"got {type(cfg_dict)}") + for key in cfg_dict: + if key in RESERVED_KEYS: + raise KeyError(f"{key} is reserved for config file") + + super(Config, self).__setattr__("_cfg_dict", ConfigDict(cfg_dict)) + super(Config, self).__setattr__("_filename", filename) + if cfg_text: + text = cfg_text + elif filename: + with open(filename, "r") as f: + text = f.read() + else: + text = "" + super(Config, self).__setattr__("_text", text) + + @property + def filename(self): + return self._filename + + @property + def text(self): + return self._text + + @property + def pretty_text(self): + indent = 4 + + def _indent(s_, num_spaces): + s = s_.split("\n") + if len(s) == 1: + return s_ + first = s.pop(0) + s = [(num_spaces * " ") + line for line in s] + s = "\n".join(s) + s = first + "\n" + s + return s + + def _format_basic_types(k, v, use_mapping=False): + if isinstance(v, str): + v_str = f"'{v}'" + else: + v_str = str(v) + + if use_mapping: + k_str = f"'{k}'" if isinstance(k, str) else str(k) + attr_str = f"{k_str}: {v_str}" + else: + attr_str = f"{str(k)}={v_str}" + attr_str = _indent(attr_str, indent) + + return attr_str + + def _format_list(k, v, use_mapping=False): + # check if all items in the list are dict + if all(isinstance(_, dict) for _ in v): + v_str = "[\n" + v_str += "\n".join( + f"dict({_indent(_format_dict(v_), indent)})," for v_ in v + ).rstrip(",") + if use_mapping: + k_str = f"'{k}'" if isinstance(k, str) else str(k) + attr_str = f"{k_str}: {v_str}" + else: + attr_str = f"{str(k)}={v_str}" + attr_str = _indent(attr_str, indent) + "]" + else: + attr_str = _format_basic_types(k, v, use_mapping) + return attr_str + + def _contain_invalid_identifier(dict_str): + contain_invalid_identifier = False + for key_name in dict_str: + contain_invalid_identifier |= not str(key_name).isidentifier() + return contain_invalid_identifier + + def _format_dict(input_dict, outest_level=False): + r = "" + s = [] + + use_mapping = _contain_invalid_identifier(input_dict) + if use_mapping: + r += "{" + for idx, (k, v) in enumerate(input_dict.items()): + is_last = idx >= len(input_dict) - 1 + end = "" if outest_level or is_last else "," + if isinstance(v, dict): + v_str = "\n" + _format_dict(v) + if use_mapping: + k_str = f"'{k}'" if isinstance(k, str) else str(k) + attr_str = f"{k_str}: dict({v_str}" + else: + attr_str = f"{str(k)}=dict({v_str}" + attr_str = _indent(attr_str, indent) + ")" + end + elif isinstance(v, list): + attr_str = _format_list(k, v, use_mapping) + end + else: + attr_str = _format_basic_types(k, v, use_mapping) + end + + s.append(attr_str) + r += "\n".join(s) + if use_mapping: + r += "}" + return r + + cfg_dict = self._cfg_dict.to_dict() + text = _format_dict(cfg_dict, outest_level=True) + # copied from setup.cfg + yapf_style = dict( + based_on_style="pep8", + blank_line_before_nested_class_or_def=True, + split_before_expression_after_opening_paren=True, + ) + text, _ = FormatCode(text, style_config=yapf_style) + + return text + + def __repr__(self): + return f"Config (path: {self.filename}): {self._cfg_dict.__repr__()}" + + def __len__(self): + return len(self._cfg_dict) + + def __getattr__(self, name): + return getattr(self._cfg_dict, name) + + def __getitem__(self, name): + return self._cfg_dict.__getitem__(name) + + def __setattr__(self, name, value): + if isinstance(value, dict): + value = ConfigDict(value) + self._cfg_dict.__setattr__(name, value) + + def __setitem__(self, name, value): + if isinstance(value, dict): + value = ConfigDict(value) + self._cfg_dict.__setitem__(name, value) + + def __iter__(self): + return iter(self._cfg_dict) + + def __getstate__(self): + return (self._cfg_dict, self._filename, self._text) + + def __setstate__(self, state): + _cfg_dict, _filename, _text = state + super(Config, self).__setattr__("_cfg_dict", _cfg_dict) + super(Config, self).__setattr__("_filename", _filename) + super(Config, self).__setattr__("_text", _text) + + def dump(self, file=None): + cfg_dict = super(Config, self).__getattribute__("_cfg_dict").to_dict() + if self.filename.endswith(".py"): + if file is None: + return self.pretty_text + else: + with open(file, "w", encoding="utf-8") as f: + f.write(self.pretty_text) + else: + import mmcv + + if file is None: + file_format = self.filename.split(".")[-1] + return mmcv.dump(cfg_dict, file_format=file_format) + else: + mmcv.dump(cfg_dict, file) + + def merge_from_dict(self, options, allow_list_keys=True): + """Merge list into cfg_dict. + + Merge the dict parsed by MultipleKVAction into this cfg. + + Examples: + >>> options = {'models.backbone.depth': 50, + ... 'models.backbone.with_cp':True} + >>> cfg = Config(dict(models=dict(backbone=dict(type='ResNet')))) + >>> cfg.merge_from_dict(options) + >>> cfg_dict = super(Config, self).__getattribute__('_cfg_dict') + >>> assert cfg_dict == dict( + ... models=dict(backbone=dict(depth=50, with_cp=True))) + + # Merge list element + >>> cfg = Config(dict(pipeline=[ + ... dict(type='LoadImage'), dict(type='LoadAnnotations')])) + >>> options = dict(pipeline={'0': dict(type='SelfLoadImage')}) + >>> cfg.merge_from_dict(options, allow_list_keys=True) + >>> cfg_dict = super(Config, self).__getattribute__('_cfg_dict') + >>> assert cfg_dict == dict(pipeline=[ + ... dict(type='SelfLoadImage'), dict(type='LoadAnnotations')]) + + Args: + options (dict): dict of configs to merge from. + allow_list_keys (bool): If True, int string keys (e.g. '0', '1') + are allowed in ``options`` and will replace the element of the + corresponding index in the config if the config is a list. + Default: True. + """ + option_cfg_dict = {} + for full_key, v in options.items(): + d = option_cfg_dict + key_list = full_key.split(".") + for subkey in key_list[:-1]: + d.setdefault(subkey, ConfigDict()) + d = d[subkey] + subkey = key_list[-1] + d[subkey] = v + + cfg_dict = super(Config, self).__getattribute__("_cfg_dict") + super(Config, self).__setattr__( + "_cfg_dict", + Config._merge_a_into_b( + option_cfg_dict, cfg_dict, allow_list_keys=allow_list_keys + ), + ) + + +class DictAction(Action): + """ + argparse action to split an argument into KEY=VALUE form + on the first = and append to a dictionary. List options can + be passed as comma separated values, i.e 'KEY=V1,V2,V3', or with explicit + brackets, i.e. 'KEY=[V1,V2,V3]'. It also support nested brackets to build + list/tuple values. e.g. 'KEY=[(V1,V2),(V3,V4)]' + """ + + @staticmethod + def _parse_int_float_bool(val): + try: + return int(val) + except ValueError: + pass + try: + return float(val) + except ValueError: + pass + if val.lower() in ["true", "false"]: + return True if val.lower() == "true" else False + return val + + @staticmethod + def _parse_iterable(val): + """Parse iterable values in the string. + + All elements inside '()' or '[]' are treated as iterable values. + + Args: + val (str): Value string. + + Returns: + list | tuple: The expanded list or tuple from the string. + + Examples: + >>> DictAction._parse_iterable('1,2,3') + [1, 2, 3] + >>> DictAction._parse_iterable('[a, b, c]') + ['a', 'b', 'c'] + >>> DictAction._parse_iterable('[(1, 2, 3), [a, b], c]') + [(1, 2, 3), ['a', 'b'], 'c'] + """ + + def find_next_comma(string): + """Find the position of next comma in the string. + + If no ',' is found in the string, return the string length. All + chars inside '()' and '[]' are treated as one element and thus ',' + inside these brackets are ignored. + """ + assert (string.count("(") == string.count(")")) and ( + string.count("[") == string.count("]") + ), f"Imbalanced brackets exist in {string}" + end = len(string) + for idx, char in enumerate(string): + pre = string[:idx] + # The string before this ',' is balanced + if ( + (char == ",") + and (pre.count("(") == pre.count(")")) + and (pre.count("[") == pre.count("]")) + ): + end = idx + break + return end + + # Strip ' and " characters and replace whitespace. + val = val.strip("'\"").replace(" ", "") + is_tuple = False + if val.startswith("(") and val.endswith(")"): + is_tuple = True + val = val[1:-1] + elif val.startswith("[") and val.endswith("]"): + val = val[1:-1] + elif "," not in val: + # val is a single value + return DictAction._parse_int_float_bool(val) + + values = [] + while len(val) > 0: + comma_idx = find_next_comma(val) + element = DictAction._parse_iterable(val[:comma_idx]) + values.append(element) + val = val[comma_idx + 1 :] + if is_tuple: + values = tuple(values) + return values + + def __call__(self, parser, namespace, values, option_string=None): + options = {} + for kv in values: + key, val = kv.split("=", maxsplit=1) + options[key] = self._parse_iterable(val) + setattr(namespace, self.dest, options) diff --git a/audio2exp-service/LAM_Audio2Expression/utils/env.py b/audio2exp-service/LAM_Audio2Expression/utils/env.py new file mode 100644 index 0000000..802ed90 --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/utils/env.py @@ -0,0 +1,33 @@ +""" +The code is base on https://github.com/Pointcept/Pointcept +""" + +import os +import random +import numpy as np +import torch +import torch.backends.cudnn as cudnn + +from datetime import datetime + + +def get_random_seed(): + seed = ( + os.getpid() + + int(datetime.now().strftime("%S%f")) + + int.from_bytes(os.urandom(2), "big") + ) + return seed + + +def set_seed(seed=None): + if seed is None: + seed = get_random_seed() + random.seed(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed(seed) + torch.cuda.manual_seed_all(seed) + cudnn.benchmark = False + cudnn.deterministic = True + os.environ["PYTHONHASHSEED"] = str(seed) diff --git a/audio2exp-service/LAM_Audio2Expression/utils/events.py b/audio2exp-service/LAM_Audio2Expression/utils/events.py new file mode 100644 index 0000000..90412dd --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/utils/events.py @@ -0,0 +1,585 @@ +""" +The code is base on https://github.com/Pointcept/Pointcept +""" + + +import datetime +import json +import logging +import os +import time +import torch +import numpy as np + +from typing import List, Optional, Tuple +from collections import defaultdict +from contextlib import contextmanager + +__all__ = [ + "get_event_storage", + "JSONWriter", + "TensorboardXWriter", + "CommonMetricPrinter", + "EventStorage", +] + +_CURRENT_STORAGE_STACK = [] + + +def get_event_storage(): + """ + Returns: + The :class:`EventStorage` object that's currently being used. + Throws an error if no :class:`EventStorage` is currently enabled. + """ + assert len( + _CURRENT_STORAGE_STACK + ), "get_event_storage() has to be called inside a 'with EventStorage(...)' context!" + return _CURRENT_STORAGE_STACK[-1] + + +class EventWriter: + """ + Base class for writers that obtain events from :class:`EventStorage` and process them. + """ + + def write(self): + raise NotImplementedError + + def close(self): + pass + + +class JSONWriter(EventWriter): + """ + Write scalars to a json file. + It saves scalars as one json per line (instead of a big json) for easy parsing. + Examples parsing such a json file: + :: + $ cat metrics.json | jq -s '.[0:2]' + [ + { + "data_time": 0.008433341979980469, + "iteration": 19, + "loss": 1.9228371381759644, + "loss_box_reg": 0.050025828182697296, + "loss_classifier": 0.5316952466964722, + "loss_mask": 0.7236229181289673, + "loss_rpn_box": 0.0856662318110466, + "loss_rpn_cls": 0.48198649287223816, + "lr": 0.007173333333333333, + "time": 0.25401854515075684 + }, + { + "data_time": 0.007216215133666992, + "iteration": 39, + "loss": 1.282649278640747, + "loss_box_reg": 0.06222952902317047, + "loss_classifier": 0.30682939291000366, + "loss_mask": 0.6970193982124329, + "loss_rpn_box": 0.038663312792778015, + "loss_rpn_cls": 0.1471673548221588, + "lr": 0.007706666666666667, + "time": 0.2490077018737793 + } + ] + $ cat metrics.json | jq '.loss_mask' + 0.7126231789588928 + 0.689423680305481 + 0.6776131987571716 + ... + """ + + def __init__(self, json_file, window_size=20): + """ + Args: + json_file (str): path to the json file. New data will be appended if the file exists. + window_size (int): the window size of median smoothing for the scalars whose + `smoothing_hint` are True. + """ + self._file_handle = open(json_file, "a") + self._window_size = window_size + self._last_write = -1 + + def write(self): + storage = get_event_storage() + to_save = defaultdict(dict) + + for k, (v, iter) in storage.latest_with_smoothing_hint( + self._window_size + ).items(): + # keep scalars that have not been written + if iter <= self._last_write: + continue + to_save[iter][k] = v + if len(to_save): + all_iters = sorted(to_save.keys()) + self._last_write = max(all_iters) + + for itr, scalars_per_iter in to_save.items(): + scalars_per_iter["iteration"] = itr + self._file_handle.write(json.dumps(scalars_per_iter, sort_keys=True) + "\n") + self._file_handle.flush() + try: + os.fsync(self._file_handle.fileno()) + except AttributeError: + pass + + def close(self): + self._file_handle.close() + + +class TensorboardXWriter(EventWriter): + """ + Write all scalars to a tensorboard file. + """ + + def __init__(self, log_dir: str, window_size: int = 20, **kwargs): + """ + Args: + log_dir (str): the directory to save the output events + window_size (int): the scalars will be median-smoothed by this window size + kwargs: other arguments passed to `torch.utils.tensorboard.SummaryWriter(...)` + """ + self._window_size = window_size + from torch.utils.tensorboard import SummaryWriter + + self._writer = SummaryWriter(log_dir, **kwargs) + self._last_write = -1 + + def write(self): + storage = get_event_storage() + new_last_write = self._last_write + for k, (v, iter) in storage.latest_with_smoothing_hint( + self._window_size + ).items(): + if iter > self._last_write: + self._writer.add_scalar(k, v, iter) + new_last_write = max(new_last_write, iter) + self._last_write = new_last_write + + # storage.put_{image,histogram} is only meant to be used by + # tensorboard writer. So we access its internal fields directly from here. + if len(storage._vis_data) >= 1: + for img_name, img, step_num in storage._vis_data: + self._writer.add_image(img_name, img, step_num) + # Storage stores all image data and rely on this writer to clear them. + # As a result it assumes only one writer will use its image data. + # An alternative design is to let storage store limited recent + # data (e.g. only the most recent image) that all writers can access. + # In that case a writer may not see all image data if its period is long. + storage.clear_images() + + if len(storage._histograms) >= 1: + for params in storage._histograms: + self._writer.add_histogram_raw(**params) + storage.clear_histograms() + + def close(self): + if hasattr(self, "_writer"): # doesn't exist when the code fails at import + self._writer.close() + + +class CommonMetricPrinter(EventWriter): + """ + Print **common** metrics to the terminal, including + iteration time, ETA, memory, all losses, and the learning rate. + It also applies smoothing using a window of 20 elements. + It's meant to print common metrics in common ways. + To print something in more customized ways, please implement a similar printer by yourself. + """ + + def __init__(self, max_iter: Optional[int] = None, window_size: int = 20): + """ + Args: + max_iter: the maximum number of iterations to train. + Used to compute ETA. If not given, ETA will not be printed. + window_size (int): the losses will be median-smoothed by this window size + """ + self.logger = logging.getLogger(__name__) + self._max_iter = max_iter + self._window_size = window_size + self._last_write = ( + None # (step, time) of last call to write(). Used to compute ETA + ) + + def _get_eta(self, storage) -> Optional[str]: + if self._max_iter is None: + return "" + iteration = storage.iter + try: + eta_seconds = storage.history("time").median(1000) * ( + self._max_iter - iteration - 1 + ) + storage.put_scalar("eta_seconds", eta_seconds, smoothing_hint=False) + return str(datetime.timedelta(seconds=int(eta_seconds))) + except KeyError: + # estimate eta on our own - more noisy + eta_string = None + if self._last_write is not None: + estimate_iter_time = (time.perf_counter() - self._last_write[1]) / ( + iteration - self._last_write[0] + ) + eta_seconds = estimate_iter_time * (self._max_iter - iteration - 1) + eta_string = str(datetime.timedelta(seconds=int(eta_seconds))) + self._last_write = (iteration, time.perf_counter()) + return eta_string + + def write(self): + storage = get_event_storage() + iteration = storage.iter + if iteration == self._max_iter: + # This hook only reports training progress (loss, ETA, etc) but not other data, + # therefore do not write anything after training succeeds, even if this method + # is called. + return + + try: + data_time = storage.history("data_time").avg(20) + except KeyError: + # they may not exist in the first few iterations (due to warmup) + # or when SimpleTrainer is not used + data_time = None + try: + iter_time = storage.history("time").global_avg() + except KeyError: + iter_time = None + try: + lr = "{:.5g}".format(storage.history("lr").latest()) + except KeyError: + lr = "N/A" + + eta_string = self._get_eta(storage) + + if torch.cuda.is_available(): + max_mem_mb = torch.cuda.max_memory_allocated() / 1024.0 / 1024.0 + else: + max_mem_mb = None + + # NOTE: max_mem is parsed by grep in "dev/parse_results.sh" + self.logger.info( + " {eta}iter: {iter} {losses} {time}{data_time}lr: {lr} {memory}".format( + eta=f"eta: {eta_string} " if eta_string else "", + iter=iteration, + losses=" ".join( + [ + "{}: {:.4g}".format(k, v.median(self._window_size)) + for k, v in storage.histories().items() + if "loss" in k + ] + ), + time="time: {:.4f} ".format(iter_time) + if iter_time is not None + else "", + data_time="data_time: {:.4f} ".format(data_time) + if data_time is not None + else "", + lr=lr, + memory="max_mem: {:.0f}M".format(max_mem_mb) + if max_mem_mb is not None + else "", + ) + ) + + +class EventStorage: + """ + The user-facing class that provides metric storage functionalities. + In the future we may add support for storing / logging other types of data if needed. + """ + + def __init__(self, start_iter=0): + """ + Args: + start_iter (int): the iteration number to start with + """ + self._history = defaultdict(AverageMeter) + self._smoothing_hints = {} + self._latest_scalars = {} + self._iter = start_iter + self._current_prefix = "" + self._vis_data = [] + self._histograms = [] + + # def put_image(self, img_name, img_tensor): + # """ + # Add an `img_tensor` associated with `img_name`, to be shown on + # tensorboard. + # Args: + # img_name (str): The name of the image to put into tensorboard. + # img_tensor (torch.Tensor or numpy.array): An `uint8` or `float` + # Tensor of shape `[channel, height, width]` where `channel` is + # 3. The image format should be RGB. The elements in img_tensor + # can either have values in [0, 1] (float32) or [0, 255] (uint8). + # The `img_tensor` will be visualized in tensorboard. + # """ + # self._vis_data.append((img_name, img_tensor, self._iter)) + + def put_scalar(self, name, value, n=1, smoothing_hint=False): + """ + Add a scalar `value` to the `HistoryBuffer` associated with `name`. + Args: + smoothing_hint (bool): a 'hint' on whether this scalar is noisy and should be + smoothed when logged. The hint will be accessible through + :meth:`EventStorage.smoothing_hints`. A writer may ignore the hint + and apply custom smoothing rule. + It defaults to True because most scalars we save need to be smoothed to + provide any useful signal. + """ + name = self._current_prefix + name + history = self._history[name] + history.update(value, n) + self._latest_scalars[name] = (value, self._iter) + + existing_hint = self._smoothing_hints.get(name) + if existing_hint is not None: + assert ( + existing_hint == smoothing_hint + ), "Scalar {} was put with a different smoothing_hint!".format(name) + else: + self._smoothing_hints[name] = smoothing_hint + + # def put_scalars(self, *, smoothing_hint=True, **kwargs): + # """ + # Put multiple scalars from keyword arguments. + # Examples: + # storage.put_scalars(loss=my_loss, accuracy=my_accuracy, smoothing_hint=True) + # """ + # for k, v in kwargs.items(): + # self.put_scalar(k, v, smoothing_hint=smoothing_hint) + # + # def put_histogram(self, hist_name, hist_tensor, bins=1000): + # """ + # Create a histogram from a tensor. + # Args: + # hist_name (str): The name of the histogram to put into tensorboard. + # hist_tensor (torch.Tensor): A Tensor of arbitrary shape to be converted + # into a histogram. + # bins (int): Number of histogram bins. + # """ + # ht_min, ht_max = hist_tensor.min().item(), hist_tensor.max().item() + # + # # Create a histogram with PyTorch + # hist_counts = torch.histc(hist_tensor, bins=bins) + # hist_edges = torch.linspace(start=ht_min, end=ht_max, steps=bins + 1, dtype=torch.float32) + # + # # Parameter for the add_histogram_raw function of SummaryWriter + # hist_params = dict( + # tag=hist_name, + # min=ht_min, + # max=ht_max, + # num=len(hist_tensor), + # sum=float(hist_tensor.sum()), + # sum_squares=float(torch.sum(hist_tensor**2)), + # bucket_limits=hist_edges[1:].tolist(), + # bucket_counts=hist_counts.tolist(), + # global_step=self._iter, + # ) + # self._histograms.append(hist_params) + + def history(self, name): + """ + Returns: + AverageMeter: the history for name + """ + ret = self._history.get(name, None) + if ret is None: + raise KeyError("No history metric available for {}!".format(name)) + return ret + + def histories(self): + """ + Returns: + dict[name -> HistoryBuffer]: the HistoryBuffer for all scalars + """ + return self._history + + def latest(self): + """ + Returns: + dict[str -> (float, int)]: mapping from the name of each scalar to the most + recent value and the iteration number its added. + """ + return self._latest_scalars + + def latest_with_smoothing_hint(self, window_size=20): + """ + Similar to :meth:`latest`, but the returned values + are either the un-smoothed original latest value, + or a median of the given window_size, + depend on whether the smoothing_hint is True. + This provides a default behavior that other writers can use. + """ + result = {} + for k, (v, itr) in self._latest_scalars.items(): + result[k] = ( + self._history[k].median(window_size) if self._smoothing_hints[k] else v, + itr, + ) + return result + + def smoothing_hints(self): + """ + Returns: + dict[name -> bool]: the user-provided hint on whether the scalar + is noisy and needs smoothing. + """ + return self._smoothing_hints + + def step(self): + """ + User should either: (1) Call this function to increment storage.iter when needed. Or + (2) Set `storage.iter` to the correct iteration number before each iteration. + The storage will then be able to associate the new data with an iteration number. + """ + self._iter += 1 + + @property + def iter(self): + """ + Returns: + int: The current iteration number. When used together with a trainer, + this is ensured to be the same as trainer.iter. + """ + return self._iter + + @iter.setter + def iter(self, val): + self._iter = int(val) + + @property + def iteration(self): + # for backward compatibility + return self._iter + + def __enter__(self): + _CURRENT_STORAGE_STACK.append(self) + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + assert _CURRENT_STORAGE_STACK[-1] == self + _CURRENT_STORAGE_STACK.pop() + + @contextmanager + def name_scope(self, name): + """ + Yields: + A context within which all the events added to this storage + will be prefixed by the name scope. + """ + old_prefix = self._current_prefix + self._current_prefix = name.rstrip("/") + "/" + yield + self._current_prefix = old_prefix + + def clear_images(self): + """ + Delete all the stored images for visualization. This should be called + after images are written to tensorboard. + """ + self._vis_data = [] + + def clear_histograms(self): + """ + Delete all the stored histograms for visualization. + This should be called after histograms are written to tensorboard. + """ + self._histograms = [] + + def reset_history(self, name): + ret = self._history.get(name, None) + if ret is None: + raise KeyError("No history metric available for {}!".format(name)) + ret.reset() + + def reset_histories(self): + for name in self._history.keys(): + self._history[name].reset() + + +class AverageMeter: + """Computes and stores the average and current value""" + + def __init__(self): + self.val = 0 + self.avg = 0 + self.total = 0 + self.count = 0 + + def reset(self): + self.val = 0 + self.avg = 0 + self.total = 0 + self.count = 0 + + def update(self, val, n=1): + self.val = val + self.total += val * n + self.count += n + self.avg = self.total / self.count + + +class HistoryBuffer: + """ + Track a series of scalar values and provide access to smoothed values over a + window or the global average of the series. + """ + + def __init__(self, max_length: int = 1000000) -> None: + """ + Args: + max_length: maximal number of values that can be stored in the + buffer. When the capacity of the buffer is exhausted, old + values will be removed. + """ + self._max_length: int = max_length + self._data: List[Tuple[float, float]] = [] # (value, iteration) pairs + self._count: int = 0 + self._global_avg: float = 0 + + def update(self, value: float, iteration: Optional[float] = None) -> None: + """ + Add a new scalar value produced at certain iteration. If the length + of the buffer exceeds self._max_length, the oldest element will be + removed from the buffer. + """ + if iteration is None: + iteration = self._count + if len(self._data) == self._max_length: + self._data.pop(0) + self._data.append((value, iteration)) + + self._count += 1 + self._global_avg += (value - self._global_avg) / self._count + + def latest(self) -> float: + """ + Return the latest scalar value added to the buffer. + """ + return self._data[-1][0] + + def median(self, window_size: int) -> float: + """ + Return the median of the latest `window_size` values in the buffer. + """ + return np.median([x[0] for x in self._data[-window_size:]]) + + def avg(self, window_size: int) -> float: + """ + Return the mean of the latest `window_size` values in the buffer. + """ + return np.mean([x[0] for x in self._data[-window_size:]]) + + def global_avg(self) -> float: + """ + Return the mean of all the elements in the buffer. Note that this + includes those getting removed due to limited buffer storage. + """ + return self._global_avg + + def values(self) -> List[Tuple[float, float]]: + """ + Returns: + list[(number, iteration)]: content of the current buffer. + """ + return self._data diff --git a/audio2exp-service/LAM_Audio2Expression/utils/logger.py b/audio2exp-service/LAM_Audio2Expression/utils/logger.py new file mode 100644 index 0000000..6e30c5d --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/utils/logger.py @@ -0,0 +1,167 @@ +""" +The code is base on https://github.com/Pointcept/Pointcept +""" + +import logging +import torch +import torch.distributed as dist + +from termcolor import colored + +logger_initialized = {} +root_status = 0 + + +class _ColorfulFormatter(logging.Formatter): + def __init__(self, *args, **kwargs): + self._root_name = kwargs.pop("root_name") + "." + super(_ColorfulFormatter, self).__init__(*args, **kwargs) + + def formatMessage(self, record): + log = super(_ColorfulFormatter, self).formatMessage(record) + if record.levelno == logging.WARNING: + prefix = colored("WARNING", "red", attrs=["blink"]) + elif record.levelno == logging.ERROR or record.levelno == logging.CRITICAL: + prefix = colored("ERROR", "red", attrs=["blink", "underline"]) + else: + return log + return prefix + " " + log + + +def get_logger(name, log_file=None, log_level=logging.INFO, file_mode="a", color=False): + """Initialize and get a logger by name. + + If the logger has not been initialized, this method will initialize the + logger by adding one or two handlers, otherwise the initialized logger will + be directly returned. During initialization, a StreamHandler will always be + added. If `log_file` is specified and the process rank is 0, a FileHandler + will also be added. + + Args: + name (str): Logger name. + log_file (str | None): The log filename. If specified, a FileHandler + will be added to the logger. + log_level (int): The logger level. Note that only the process of + rank 0 is affected, and other processes will set the level to + "Error" thus be silent most of the time. + file_mode (str): The file mode used in opening log file. + Defaults to 'a'. + color (bool): Colorful log output. Defaults to True + + Returns: + logging.Logger: The expected logger. + """ + logger = logging.getLogger(name) + + if name in logger_initialized: + return logger + # handle hierarchical names + # e.g., logger "a" is initialized, then logger "a.b" will skip the + # initialization since it is a child of "a". + for logger_name in logger_initialized: + if name.startswith(logger_name): + return logger + + logger.propagate = False + + stream_handler = logging.StreamHandler() + handlers = [stream_handler] + + if dist.is_available() and dist.is_initialized(): + rank = dist.get_rank() + else: + rank = 0 + + # only rank 0 will add a FileHandler + if rank == 0 and log_file is not None: + # Here, the default behaviour of the official logger is 'a'. Thus, we + # provide an interface to change the file mode to the default + # behaviour. + file_handler = logging.FileHandler(log_file, file_mode) + handlers.append(file_handler) + + plain_formatter = logging.Formatter( + "[%(asctime)s %(levelname)s %(filename)s line %(lineno)d %(process)d] %(message)s" + ) + if color: + formatter = _ColorfulFormatter( + colored("[%(asctime)s %(name)s]: ", "green") + "%(message)s", + datefmt="%m/%d %H:%M:%S", + root_name=name, + ) + else: + formatter = plain_formatter + for handler in handlers: + handler.setFormatter(formatter) + handler.setLevel(log_level) + logger.addHandler(handler) + + if rank == 0: + logger.setLevel(log_level) + else: + logger.setLevel(logging.ERROR) + + logger_initialized[name] = True + + return logger + + +def print_log(msg, logger=None, level=logging.INFO): + """Print a log message. + + Args: + msg (str): The message to be logged. + logger (logging.Logger | str | None): The logger to be used. + Some special loggers are: + - "silent": no message will be printed. + - other str: the logger obtained with `get_root_logger(logger)`. + - None: The `print()` method will be used to print log messages. + level (int): Logging level. Only available when `logger` is a Logger + object or "root". + """ + if logger is None: + print(msg) + elif isinstance(logger, logging.Logger): + logger.log(level, msg) + elif logger == "silent": + pass + elif isinstance(logger, str): + _logger = get_logger(logger) + _logger.log(level, msg) + else: + raise TypeError( + "logger should be either a logging.Logger object, str, " + f'"silent" or None, but got {type(logger)}' + ) + + +def get_root_logger(log_file=None, log_level=logging.INFO, file_mode="a"): + """Get the root logger. + + The logger will be initialized if it has not been initialized. By default a + StreamHandler will be added. If `log_file` is specified, a FileHandler will + also be added. The name of the root logger is the top-level package name. + + Args: + log_file (str | None): The log filename. If specified, a FileHandler + will be added to the root logger. + log_level (int): The root logger level. Note that only the process of + rank 0 is affected, while other processes will set the level to + "Error" and be silent most of the time. + file_mode (str): File Mode of logger. (w or a) + + Returns: + logging.Logger: The root logger. + """ + logger = get_logger( + name="pointcept", log_file=log_file, log_level=log_level, file_mode=file_mode + ) + return logger + + +def _log_api_usage(identifier: str): + """ + Internal function used to log the usage of different detectron2 components + inside facebook's infra. + """ + torch._C._log_api_usage_once("pointcept." + identifier) diff --git a/audio2exp-service/LAM_Audio2Expression/utils/misc.py b/audio2exp-service/LAM_Audio2Expression/utils/misc.py new file mode 100644 index 0000000..dbd257e --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/utils/misc.py @@ -0,0 +1,156 @@ +""" +The code is base on https://github.com/Pointcept/Pointcept +""" + +import os +import warnings +from collections import abc +import numpy as np +import torch +from importlib import import_module + + +class AverageMeter(object): + """Computes and stores the average and current value""" + + def __init__(self): + self.val = 0 + self.avg = 0 + self.sum = 0 + self.count = 0 + + def reset(self): + self.val = 0 + self.avg = 0 + self.sum = 0 + self.count = 0 + + def update(self, val, n=1): + self.val = val + self.sum += val * n + self.count += n + self.avg = self.sum / self.count + + +def intersection_and_union(output, target, K, ignore_index=-1): + # 'K' classes, output and target sizes are N or N * L or N * H * W, each value in range 0 to K - 1. + assert output.ndim in [1, 2, 3] + assert output.shape == target.shape + output = output.reshape(output.size).copy() + target = target.reshape(target.size) + output[np.where(target == ignore_index)[0]] = ignore_index + intersection = output[np.where(output == target)[0]] + area_intersection, _ = np.histogram(intersection, bins=np.arange(K + 1)) + area_output, _ = np.histogram(output, bins=np.arange(K + 1)) + area_target, _ = np.histogram(target, bins=np.arange(K + 1)) + area_union = area_output + area_target - area_intersection + return area_intersection, area_union, area_target + + +def intersection_and_union_gpu(output, target, k, ignore_index=-1): + # 'K' classes, output and target sizes are N or N * L or N * H * W, each value in range 0 to K - 1. + assert output.dim() in [1, 2, 3] + assert output.shape == target.shape + output = output.view(-1) + target = target.view(-1) + output[target == ignore_index] = ignore_index + intersection = output[output == target] + area_intersection = torch.histc(intersection, bins=k, min=0, max=k - 1) + area_output = torch.histc(output, bins=k, min=0, max=k - 1) + area_target = torch.histc(target, bins=k, min=0, max=k - 1) + area_union = area_output + area_target - area_intersection + return area_intersection, area_union, area_target + + +def make_dirs(dir_name): + if not os.path.exists(dir_name): + os.makedirs(dir_name, exist_ok=True) + + +def find_free_port(): + import socket + + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + # Binding to port 0 will cause the OS to find an available port for us + sock.bind(("", 0)) + port = sock.getsockname()[1] + sock.close() + # NOTE: there is still a chance the port could be taken by other processes. + return port + + +def is_seq_of(seq, expected_type, seq_type=None): + """Check whether it is a sequence of some type. + + Args: + seq (Sequence): The sequence to be checked. + expected_type (type): Expected type of sequence items. + seq_type (type, optional): Expected sequence type. + + Returns: + bool: Whether the sequence is valid. + """ + if seq_type is None: + exp_seq_type = abc.Sequence + else: + assert isinstance(seq_type, type) + exp_seq_type = seq_type + if not isinstance(seq, exp_seq_type): + return False + for item in seq: + if not isinstance(item, expected_type): + return False + return True + + +def is_str(x): + """Whether the input is an string instance. + + Note: This method is deprecated since python 2 is no longer supported. + """ + return isinstance(x, str) + + +def import_modules_from_strings(imports, allow_failed_imports=False): + """Import modules from the given list of strings. + + Args: + imports (list | str | None): The given module names to be imported. + allow_failed_imports (bool): If True, the failed imports will return + None. Otherwise, an ImportError is raise. Default: False. + + Returns: + list[module] | module | None: The imported modules. + + Examples: + >>> osp, sys = import_modules_from_strings( + ... ['os.path', 'sys']) + >>> import os.path as osp_ + >>> import sys as sys_ + >>> assert osp == osp_ + >>> assert sys == sys_ + """ + if not imports: + return + single_import = False + if isinstance(imports, str): + single_import = True + imports = [imports] + if not isinstance(imports, list): + raise TypeError(f"custom_imports must be a list but got type {type(imports)}") + imported = [] + for imp in imports: + if not isinstance(imp, str): + raise TypeError(f"{imp} is of type {type(imp)} and cannot be imported.") + try: + imported_tmp = import_module(imp) + except ImportError: + if allow_failed_imports: + warnings.warn(f"{imp} failed to import and is ignored.", UserWarning) + imported_tmp = None + else: + raise ImportError + imported.append(imported_tmp) + if single_import: + imported = imported[0] + return imported diff --git a/audio2exp-service/LAM_Audio2Expression/utils/optimizer.py b/audio2exp-service/LAM_Audio2Expression/utils/optimizer.py new file mode 100644 index 0000000..2eb70a3 --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/utils/optimizer.py @@ -0,0 +1,52 @@ +""" +The code is base on https://github.com/Pointcept/Pointcept +""" + +import torch +from utils.logger import get_root_logger +from utils.registry import Registry + +OPTIMIZERS = Registry("optimizers") + + +OPTIMIZERS.register_module(module=torch.optim.SGD, name="SGD") +OPTIMIZERS.register_module(module=torch.optim.Adam, name="Adam") +OPTIMIZERS.register_module(module=torch.optim.AdamW, name="AdamW") + + +def build_optimizer(cfg, model, param_dicts=None): + if param_dicts is None: + cfg.params = model.parameters() + else: + cfg.params = [dict(names=[], params=[], lr=cfg.lr)] + for i in range(len(param_dicts)): + param_group = dict(names=[], params=[]) + if "lr" in param_dicts[i].keys(): + param_group["lr"] = param_dicts[i].lr + if "momentum" in param_dicts[i].keys(): + param_group["momentum"] = param_dicts[i].momentum + if "weight_decay" in param_dicts[i].keys(): + param_group["weight_decay"] = param_dicts[i].weight_decay + cfg.params.append(param_group) + + for n, p in model.named_parameters(): + flag = False + for i in range(len(param_dicts)): + if param_dicts[i].keyword in n: + cfg.params[i + 1]["names"].append(n) + cfg.params[i + 1]["params"].append(p) + flag = True + break + if not flag: + cfg.params[0]["names"].append(n) + cfg.params[0]["params"].append(p) + + logger = get_root_logger() + for i in range(len(cfg.params)): + param_names = cfg.params[i].pop("names") + message = "" + for key in cfg.params[i].keys(): + if key != "params": + message += f" {key}: {cfg.params[i][key]};" + logger.info(f"Params Group {i+1} -{message} Params: {param_names}.") + return OPTIMIZERS.build(cfg=cfg) diff --git a/audio2exp-service/LAM_Audio2Expression/utils/path.py b/audio2exp-service/LAM_Audio2Expression/utils/path.py new file mode 100644 index 0000000..5d1da76 --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/utils/path.py @@ -0,0 +1,105 @@ +""" +The code is base on https://github.com/Pointcept/Pointcept +""" +import os +import os.path as osp +from pathlib import Path + +from .misc import is_str + + +def is_filepath(x): + return is_str(x) or isinstance(x, Path) + + +def fopen(filepath, *args, **kwargs): + if is_str(filepath): + return open(filepath, *args, **kwargs) + elif isinstance(filepath, Path): + return filepath.open(*args, **kwargs) + raise ValueError("`filepath` should be a string or a Path") + + +def check_file_exist(filename, msg_tmpl='file "{}" does not exist'): + if not osp.isfile(filename): + raise FileNotFoundError(msg_tmpl.format(filename)) + + +def mkdir_or_exist(dir_name, mode=0o777): + if dir_name == "": + return + dir_name = osp.expanduser(dir_name) + os.makedirs(dir_name, mode=mode, exist_ok=True) + + +def symlink(src, dst, overwrite=True, **kwargs): + if os.path.lexists(dst) and overwrite: + os.remove(dst) + os.symlink(src, dst, **kwargs) + + +def scandir(dir_path, suffix=None, recursive=False, case_sensitive=True): + """Scan a directory to find the interested files. + + Args: + dir_path (str | obj:`Path`): Path of the directory. + suffix (str | tuple(str), optional): File suffix that we are + interested in. Default: None. + recursive (bool, optional): If set to True, recursively scan the + directory. Default: False. + case_sensitive (bool, optional) : If set to False, ignore the case of + suffix. Default: True. + + Returns: + A generator for all the interested files with relative paths. + """ + if isinstance(dir_path, (str, Path)): + dir_path = str(dir_path) + else: + raise TypeError('"dir_path" must be a string or Path object') + + if (suffix is not None) and not isinstance(suffix, (str, tuple)): + raise TypeError('"suffix" must be a string or tuple of strings') + + if suffix is not None and not case_sensitive: + suffix = ( + suffix.lower() + if isinstance(suffix, str) + else tuple(item.lower() for item in suffix) + ) + + root = dir_path + + def _scandir(dir_path, suffix, recursive, case_sensitive): + for entry in os.scandir(dir_path): + if not entry.name.startswith(".") and entry.is_file(): + rel_path = osp.relpath(entry.path, root) + _rel_path = rel_path if case_sensitive else rel_path.lower() + if suffix is None or _rel_path.endswith(suffix): + yield rel_path + elif recursive and os.path.isdir(entry.path): + # scan recursively if entry.path is a directory + yield from _scandir(entry.path, suffix, recursive, case_sensitive) + + return _scandir(dir_path, suffix, recursive, case_sensitive) + + +def find_vcs_root(path, markers=(".git",)): + """Finds the root directory (including itself) of specified markers. + + Args: + path (str): Path of directory or file. + markers (list[str], optional): List of file or directory names. + + Returns: + The directory contained one of the markers or None if not found. + """ + if osp.isfile(path): + path = osp.dirname(path) + + prev, cur = None, osp.abspath(osp.expanduser(path)) + while cur != prev: + if any(osp.exists(osp.join(cur, marker)) for marker in markers): + return cur + prev, cur = cur, osp.split(cur)[0] + return None diff --git a/audio2exp-service/LAM_Audio2Expression/utils/registry.py b/audio2exp-service/LAM_Audio2Expression/utils/registry.py new file mode 100644 index 0000000..bd0e55c --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/utils/registry.py @@ -0,0 +1,318 @@ +""" +The code is base on https://github.com/Pointcept/Pointcept +""" +import inspect +import warnings +from functools import partial + +from .misc import is_seq_of + + +def build_from_cfg(cfg, registry, default_args=None): + """Build a module from configs dict. + + Args: + cfg (dict): Config dict. It should at least contain the key "type". + registry (:obj:`Registry`): The registry to search the type from. + default_args (dict, optional): Default initialization arguments. + + Returns: + object: The constructed object. + """ + if not isinstance(cfg, dict): + raise TypeError(f"cfg must be a dict, but got {type(cfg)}") + if "type" not in cfg: + if default_args is None or "type" not in default_args: + raise KeyError( + '`cfg` or `default_args` must contain the key "type", ' + f"but got {cfg}\n{default_args}" + ) + if not isinstance(registry, Registry): + raise TypeError( + "registry must be an mmcv.Registry object, " f"but got {type(registry)}" + ) + if not (isinstance(default_args, dict) or default_args is None): + raise TypeError( + "default_args must be a dict or None, " f"but got {type(default_args)}" + ) + + args = cfg.copy() + + if default_args is not None: + for name, value in default_args.items(): + args.setdefault(name, value) + + obj_type = args.pop("type") + if isinstance(obj_type, str): + obj_cls = registry.get(obj_type) + if obj_cls is None: + raise KeyError(f"{obj_type} is not in the {registry.name} registry") + elif inspect.isclass(obj_type): + obj_cls = obj_type + else: + raise TypeError(f"type must be a str or valid type, but got {type(obj_type)}") + try: + return obj_cls(**args) + except Exception as e: + # Normal TypeError does not print class name. + raise type(e)(f"{obj_cls.__name__}: {e}") + + +class Registry: + """A registry to map strings to classes. + + Registered object could be built from registry. + Example: + >>> MODELS = Registry('models') + >>> @MODELS.register_module() + >>> class ResNet: + >>> pass + >>> resnet = MODELS.build(dict(type='ResNet')) + + Please refer to + https://mmcv.readthedocs.io/en/latest/understand_mmcv/registry.html for + advanced usage. + + Args: + name (str): Registry name. + build_func(func, optional): Build function to construct instance from + Registry, func:`build_from_cfg` is used if neither ``parent`` or + ``build_func`` is specified. If ``parent`` is specified and + ``build_func`` is not given, ``build_func`` will be inherited + from ``parent``. Default: None. + parent (Registry, optional): Parent registry. The class registered in + children registry could be built from parent. Default: None. + scope (str, optional): The scope of registry. It is the key to search + for children registry. If not specified, scope will be the name of + the package where class is defined, e.g. mmdet, mmcls, mmseg. + Default: None. + """ + + def __init__(self, name, build_func=None, parent=None, scope=None): + self._name = name + self._module_dict = dict() + self._children = dict() + self._scope = self.infer_scope() if scope is None else scope + + # self.build_func will be set with the following priority: + # 1. build_func + # 2. parent.build_func + # 3. build_from_cfg + if build_func is None: + if parent is not None: + self.build_func = parent.build_func + else: + self.build_func = build_from_cfg + else: + self.build_func = build_func + if parent is not None: + assert isinstance(parent, Registry) + parent._add_children(self) + self.parent = parent + else: + self.parent = None + + def __len__(self): + return len(self._module_dict) + + def __contains__(self, key): + return self.get(key) is not None + + def __repr__(self): + format_str = ( + self.__class__.__name__ + f"(name={self._name}, " + f"items={self._module_dict})" + ) + return format_str + + @staticmethod + def infer_scope(): + """Infer the scope of registry. + + The name of the package where registry is defined will be returned. + + Example: + # in mmdet/models/backbone/resnet.py + >>> MODELS = Registry('models') + >>> @MODELS.register_module() + >>> class ResNet: + >>> pass + The scope of ``ResNet`` will be ``mmdet``. + + + Returns: + scope (str): The inferred scope name. + """ + # inspect.stack() trace where this function is called, the index-2 + # indicates the frame where `infer_scope()` is called + filename = inspect.getmodule(inspect.stack()[2][0]).__name__ + split_filename = filename.split(".") + return split_filename[0] + + @staticmethod + def split_scope_key(key): + """Split scope and key. + + The first scope will be split from key. + + Examples: + >>> Registry.split_scope_key('mmdet.ResNet') + 'mmdet', 'ResNet' + >>> Registry.split_scope_key('ResNet') + None, 'ResNet' + + Return: + scope (str, None): The first scope. + key (str): The remaining key. + """ + split_index = key.find(".") + if split_index != -1: + return key[:split_index], key[split_index + 1 :] + else: + return None, key + + @property + def name(self): + return self._name + + @property + def scope(self): + return self._scope + + @property + def module_dict(self): + return self._module_dict + + @property + def children(self): + return self._children + + def get(self, key): + """Get the registry record. + + Args: + key (str): The class name in string format. + + Returns: + class: The corresponding class. + """ + scope, real_key = self.split_scope_key(key) + if scope is None or scope == self._scope: + # get from self + if real_key in self._module_dict: + return self._module_dict[real_key] + else: + # get from self._children + if scope in self._children: + return self._children[scope].get(real_key) + else: + # goto root + parent = self.parent + while parent.parent is not None: + parent = parent.parent + return parent.get(key) + + def build(self, *args, **kwargs): + return self.build_func(*args, **kwargs, registry=self) + + def _add_children(self, registry): + """Add children for a registry. + + The ``registry`` will be added as children based on its scope. + The parent registry could build objects from children registry. + + Example: + >>> models = Registry('models') + >>> mmdet_models = Registry('models', parent=models) + >>> @mmdet_models.register_module() + >>> class ResNet: + >>> pass + >>> resnet = models.build(dict(type='mmdet.ResNet')) + """ + + assert isinstance(registry, Registry) + assert registry.scope is not None + assert ( + registry.scope not in self.children + ), f"scope {registry.scope} exists in {self.name} registry" + self.children[registry.scope] = registry + + def _register_module(self, module_class, module_name=None, force=False): + if not inspect.isclass(module_class): + raise TypeError("module must be a class, " f"but got {type(module_class)}") + + if module_name is None: + module_name = module_class.__name__ + if isinstance(module_name, str): + module_name = [module_name] + for name in module_name: + if not force and name in self._module_dict: + raise KeyError(f"{name} is already registered " f"in {self.name}") + self._module_dict[name] = module_class + + def deprecated_register_module(self, cls=None, force=False): + warnings.warn( + "The old API of register_module(module, force=False) " + "is deprecated and will be removed, please use the new API " + "register_module(name=None, force=False, module=None) instead." + ) + if cls is None: + return partial(self.deprecated_register_module, force=force) + self._register_module(cls, force=force) + return cls + + def register_module(self, name=None, force=False, module=None): + """Register a module. + + A record will be added to `self._module_dict`, whose key is the class + name or the specified name, and value is the class itself. + It can be used as a decorator or a normal function. + + Example: + >>> backbones = Registry('backbone') + >>> @backbones.register_module() + >>> class ResNet: + >>> pass + + >>> backbones = Registry('backbone') + >>> @backbones.register_module(name='mnet') + >>> class MobileNet: + >>> pass + + >>> backbones = Registry('backbone') + >>> class ResNet: + >>> pass + >>> backbones.register_module(ResNet) + + Args: + name (str | None): The module name to be registered. If not + specified, the class name will be used. + force (bool, optional): Whether to override an existing class with + the same name. Default: False. + module (type): Module class to be registered. + """ + if not isinstance(force, bool): + raise TypeError(f"force must be a boolean, but got {type(force)}") + # NOTE: This is a walkaround to be compatible with the old api, + # while it may introduce unexpected bugs. + if isinstance(name, type): + return self.deprecated_register_module(name, force=force) + + # raise the error ahead of time + if not (name is None or isinstance(name, str) or is_seq_of(name, str)): + raise TypeError( + "name must be either of None, an instance of str or a sequence" + f" of str, but got {type(name)}" + ) + + # use it as a normal method: x.register_module(module=SomeClass) + if module is not None: + self._register_module(module_class=module, module_name=name, force=force) + return module + + # use it as a decorator: @x.register_module() + def _register(cls): + self._register_module(module_class=cls, module_name=name, force=force) + return cls + + return _register diff --git a/audio2exp-service/LAM_Audio2Expression/utils/scheduler.py b/audio2exp-service/LAM_Audio2Expression/utils/scheduler.py new file mode 100644 index 0000000..bb31459 --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/utils/scheduler.py @@ -0,0 +1,144 @@ +""" +The code is base on https://github.com/Pointcept/Pointcept +""" + +import torch.optim.lr_scheduler as lr_scheduler +from .registry import Registry + +SCHEDULERS = Registry("schedulers") + + +@SCHEDULERS.register_module() +class MultiStepLR(lr_scheduler.MultiStepLR): + def __init__( + self, + optimizer, + milestones, + total_steps, + gamma=0.1, + last_epoch=-1, + verbose=False, + ): + super().__init__( + optimizer=optimizer, + milestones=[rate * total_steps for rate in milestones], + gamma=gamma, + last_epoch=last_epoch, + verbose=verbose, + ) + + +@SCHEDULERS.register_module() +class MultiStepWithWarmupLR(lr_scheduler.LambdaLR): + def __init__( + self, + optimizer, + milestones, + total_steps, + gamma=0.1, + warmup_rate=0.05, + warmup_scale=1e-6, + last_epoch=-1, + verbose=False, + ): + milestones = [rate * total_steps for rate in milestones] + + def multi_step_with_warmup(s): + factor = 1.0 + for i in range(len(milestones)): + if s < milestones[i]: + break + factor *= gamma + + if s <= warmup_rate * total_steps: + warmup_coefficient = 1 - (1 - s / warmup_rate / total_steps) * ( + 1 - warmup_scale + ) + else: + warmup_coefficient = 1.0 + return warmup_coefficient * factor + + super().__init__( + optimizer=optimizer, + lr_lambda=multi_step_with_warmup, + last_epoch=last_epoch, + verbose=verbose, + ) + + +@SCHEDULERS.register_module() +class PolyLR(lr_scheduler.LambdaLR): + def __init__(self, optimizer, total_steps, power=0.9, last_epoch=-1, verbose=False): + super().__init__( + optimizer=optimizer, + lr_lambda=lambda s: (1 - s / (total_steps + 1)) ** power, + last_epoch=last_epoch, + verbose=verbose, + ) + + +@SCHEDULERS.register_module() +class ExpLR(lr_scheduler.LambdaLR): + def __init__(self, optimizer, total_steps, gamma=0.9, last_epoch=-1, verbose=False): + super().__init__( + optimizer=optimizer, + lr_lambda=lambda s: gamma ** (s / total_steps), + last_epoch=last_epoch, + verbose=verbose, + ) + + +@SCHEDULERS.register_module() +class CosineAnnealingLR(lr_scheduler.CosineAnnealingLR): + def __init__(self, optimizer, total_steps, eta_min=0, last_epoch=-1, verbose=False): + super().__init__( + optimizer=optimizer, + T_max=total_steps, + eta_min=eta_min, + last_epoch=last_epoch, + verbose=verbose, + ) + + +@SCHEDULERS.register_module() +class OneCycleLR(lr_scheduler.OneCycleLR): + r""" + torch.optim.lr_scheduler.OneCycleLR, Block total_steps + """ + + def __init__( + self, + optimizer, + max_lr, + total_steps=None, + pct_start=0.3, + anneal_strategy="cos", + cycle_momentum=True, + base_momentum=0.85, + max_momentum=0.95, + div_factor=25.0, + final_div_factor=1e4, + three_phase=False, + last_epoch=-1, + verbose=False, + ): + super().__init__( + optimizer=optimizer, + max_lr=max_lr, + total_steps=total_steps, + pct_start=pct_start, + anneal_strategy=anneal_strategy, + cycle_momentum=cycle_momentum, + base_momentum=base_momentum, + max_momentum=max_momentum, + div_factor=div_factor, + final_div_factor=final_div_factor, + three_phase=three_phase, + last_epoch=last_epoch, + verbose=verbose, + ) + + +def build_scheduler(cfg, optimizer): + cfg.optimizer = optimizer + return SCHEDULERS.build(cfg=cfg) diff --git a/audio2exp-service/LAM_Audio2Expression/utils/timer.py b/audio2exp-service/LAM_Audio2Expression/utils/timer.py new file mode 100644 index 0000000..7b7e9cb --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/utils/timer.py @@ -0,0 +1,71 @@ +""" +The code is base on https://github.com/Pointcept/Pointcept +""" + +from time import perf_counter +from typing import Optional + + +class Timer: + """ + A timer which computes the time elapsed since the start/reset of the timer. + """ + + def __init__(self) -> None: + self.reset() + + def reset(self) -> None: + """ + Reset the timer. + """ + self._start = perf_counter() + self._paused: Optional[float] = None + self._total_paused = 0 + self._count_start = 1 + + def pause(self) -> None: + """ + Pause the timer. + """ + if self._paused is not None: + raise ValueError("Trying to pause a Timer that is already paused!") + self._paused = perf_counter() + + def is_paused(self) -> bool: + """ + Returns: + bool: whether the timer is currently paused + """ + return self._paused is not None + + def resume(self) -> None: + """ + Resume the timer. + """ + if self._paused is None: + raise ValueError("Trying to resume a Timer that is not paused!") + # pyre-fixme[58]: `-` is not supported for operand types `float` and + # `Optional[float]`. + self._total_paused += perf_counter() - self._paused + self._paused = None + self._count_start += 1 + + def seconds(self) -> float: + """ + Returns: + (float): the total number of seconds since the start/reset of the + timer, excluding the time when the timer is paused. + """ + if self._paused is not None: + end_time: float = self._paused # type: ignore + else: + end_time = perf_counter() + return end_time - self._start - self._total_paused + + def avg_seconds(self) -> float: + """ + Returns: + (float): the average number of seconds between every start/reset and + pause. + """ + return self.seconds() / self._count_start diff --git a/audio2exp-service/LAM_Audio2Expression/utils/visualization.py b/audio2exp-service/LAM_Audio2Expression/utils/visualization.py new file mode 100644 index 0000000..053cb64 --- /dev/null +++ b/audio2exp-service/LAM_Audio2Expression/utils/visualization.py @@ -0,0 +1,86 @@ +""" +The code is base on https://github.com/Pointcept/Pointcept +""" + +import os +import open3d as o3d +import numpy as np +import torch + + +def to_numpy(x): + if isinstance(x, torch.Tensor): + x = x.clone().detach().cpu().numpy() + assert isinstance(x, np.ndarray) + return x + + +def save_point_cloud(coord, color=None, file_path="pc.ply", logger=None): + os.makedirs(os.path.dirname(file_path), exist_ok=True) + coord = to_numpy(coord) + if color is not None: + color = to_numpy(color) + pcd = o3d.geometry.PointCloud() + pcd.points = o3d.utility.Vector3dVector(coord) + pcd.colors = o3d.utility.Vector3dVector( + np.ones_like(coord) if color is None else color + ) + o3d.io.write_point_cloud(file_path, pcd) + if logger is not None: + logger.info(f"Save Point Cloud to: {file_path}") + + +def save_bounding_boxes( + bboxes_corners, color=(1.0, 0.0, 0.0), file_path="bbox.ply", logger=None +): + bboxes_corners = to_numpy(bboxes_corners) + # point list + points = bboxes_corners.reshape(-1, 3) + # line list + box_lines = np.array( + [ + [0, 1], + [1, 2], + [2, 3], + [3, 0], + [4, 5], + [5, 6], + [6, 7], + [7, 0], + [0, 4], + [1, 5], + [2, 6], + [3, 7], + ] + ) + lines = [] + for i, _ in enumerate(bboxes_corners): + lines.append(box_lines + i * 8) + lines = np.concatenate(lines) + # color list + color = np.array([color for _ in range(len(lines))]) + # generate line set + line_set = o3d.geometry.LineSet() + line_set.points = o3d.utility.Vector3dVector(points) + line_set.lines = o3d.utility.Vector2iVector(lines) + line_set.colors = o3d.utility.Vector3dVector(color) + o3d.io.write_line_set(file_path, line_set) + + if logger is not None: + logger.info(f"Save Boxes to: {file_path}") + + +def save_lines( + points, lines, color=(1.0, 0.0, 0.0), file_path="lines.ply", logger=None +): + points = to_numpy(points) + lines = to_numpy(lines) + colors = np.array([color for _ in range(len(lines))]) + line_set = o3d.geometry.LineSet() + line_set.points = o3d.utility.Vector3dVector(points) + line_set.lines = o3d.utility.Vector2iVector(lines) + line_set.colors = o3d.utility.Vector3dVector(colors) + o3d.io.write_line_set(file_path, line_set) + + if logger is not None: + logger.info(f"Save Lines to: {file_path}") diff --git a/audio2exp-service/LAM_Audio2Expression/wheels/gradio_gaussian_render-0.0.3-py3-none-any.whl b/audio2exp-service/LAM_Audio2Expression/wheels/gradio_gaussian_render-0.0.3-py3-none-any.whl new file mode 100644 index 0000000..739925e Binary files /dev/null and b/audio2exp-service/LAM_Audio2Expression/wheels/gradio_gaussian_render-0.0.3-py3-none-any.whl differ diff --git a/audio2exp-service/README.md b/audio2exp-service/README.md new file mode 100644 index 0000000..fea64eb --- /dev/null +++ b/audio2exp-service/README.md @@ -0,0 +1,201 @@ +# Audio2Expression Service + +gourmet-sp の TTS 音声から表情データを生成するマイクロサービス。 + +## アーキテクチャ + +``` +┌─ gourmet-sp (既存) ─────────────────────────────┐ +│ ユーザー → LLM → GCP TTS → 音声(base64) │ +└────────────────────────┬────────────────────────┘ + │ POST /api/audio2expression + ▼ +┌─ Audio2Expression Service (このサービス) ───────┐ +│ 音声 → Audio2Expression → 表情データ (52ch) │ +└────────────────────────┬────────────────────────┘ + │ WebSocket + ▼ +┌─ ブラウザ ──────────────────────────────────────┐ +│ LAMAvatar (WebGL) ← 表情データで口パク │ +└─────────────────────────────────────────────────┘ +``` + +## セットアップ + +### 1. 依存関係のインストール + +```bash +cd audio2exp-service +pip install -r requirements.txt +``` + +### 2. モデルのダウンロード(オプション) + +Audio2Expression モデルを使用する場合: + +```bash +# HuggingFaceからダウンロード +huggingface-cli download 3DAIGC/LAM_audio2exp --local-dir ./models +``` + +モデルがない場合は**モックモード**で動作します(音声振幅に基づく簡易的な口パク)。 + +### 3. サービス起動 + +```bash +# 基本起動(モックモード) +python app.py + +# モデル指定 +python app.py --model-path ./models/pretrained_models/lam_audio2exp_streaming.tar + +# ポート指定 +python app.py --port 8283 +``` + +## API + +### REST API + +#### POST /api/audio2expression + +TTS音声を表情データに変換。 + +**Request:** +```json +{ + "audio_base64": "base64エンコードされた音声 (PCM 16-bit, 16kHz)", + "session_id": "セッションID", + "is_final": false +} +``` + +**Response:** +```json +{ + "session_id": "セッションID", + "channels": ["browDownLeft", "browDownRight", ...], + "weights": [[0.0, 0.1, ...]], + "timestamp": 1234567890.123 +} +``` + +### WebSocket + +#### WS /ws/{session_id} + +リアルタイム表情データストリーミング。 + +**接続:** +```javascript +const ws = new WebSocket('ws://localhost:8283/ws/my-session'); +``` + +**受信データ:** +```json +{ + "type": "expression", + "session_id": "my-session", + "channels": ["browDownLeft", ...], + "weights": [[0.0, 0.1, ...]], + "is_final": false, + "timestamp": 1234567890.123 +} +``` + +## gourmet-sp との連携 + +### バックエンド側(最小変更) + +TTS音声取得後に、このサービスにも送信: + +```python +# 既存のTTS処理後に追加 +async def send_to_audio2expression(audio_base64: str, session_id: str): + async with aiohttp.ClientSession() as session: + await session.post( + "http://localhost:8283/api/audio2expression", + json={ + "audio_base64": audio_base64, + "session_id": session_id, + "is_final": False + } + ) +``` + +### フロントエンド側(LAMAvatar) + +WebSocket接続: + +```javascript +const controller = window.lamAvatarController; +await controller.connectWebSocket('ws://localhost:8283/ws/' + sessionId); +``` + +## GCP Cloud Run デプロイ + +### PowerShell スクリプトでデプロイ(推奨) + +```powershell +cd audio2exp-service +./deploy.ps1 +``` + +### 手動デプロイ + +```bash +cd audio2exp-service + +# ビルド +gcloud builds submit --tag gcr.io/hp-support-477512/audio2exp-service --project hp-support-477512 + +# デプロイ +gcloud run deploy audio2exp-service \ + --image gcr.io/hp-support-477512/audio2exp-service \ + --platform managed \ + --region us-central1 \ + --allow-unauthenticated \ + --memory 1Gi \ + --cpu 1 \ + --timeout 300 \ + --project hp-support-477512 +``` + +### デプロイ後の確認 + +```bash +# サービスURLを取得 +gcloud run services describe audio2exp-service \ + --region us-central1 \ + --format 'value(status.url)' \ + --project hp-support-477512 + +# ヘルスチェック +curl https://audio2exp-service-xxxxx-uc.a.run.app/health +``` + +## gourmet-support との連携設定 + +### 1. gourmet-support の deploy.ps1 に環境変数を追加 + +```powershell +# deploy.ps1 の環境変数部分に追加 +$AUDIO2EXP_SERVICE_URL = "https://audio2exp-service-xxxxx-uc.a.run.app" + +# --set-env-vars に追加 +--set-env-vars "...,AUDIO2EXP_SERVICE_URL=$AUDIO2EXP_SERVICE_URL" +``` + +### 2. バックエンドコードの追加 + +`integration/gourmet_support_patch.py` を参照して、 +TTS処理後に audio2exp-service へ音声を転送するコードを追加。 + +## 動作モード + +| モード | 条件 | 精度 | +|--------|------|------| +| 推論モード | Audio2Expressionモデルあり | 高精度 | +| モックモード | モデルなし | 音声振幅ベース(簡易) | + +モックモードでも口パクの動作確認は可能です。 diff --git a/audio2exp-service/app.py b/audio2exp-service/app.py new file mode 100644 index 0000000..3ad9aaf --- /dev/null +++ b/audio2exp-service/app.py @@ -0,0 +1,427 @@ +""" +Audio2Expression Service for LAM Lip Sync - Cloud Run Optimized +Bypass DDP initialization and use /tmp for all file writes. +""" + +import asyncio +import base64 +import json +import os +import struct +import sys +import time +import logging +import traceback +from contextlib import asynccontextmanager +from typing import Dict, List +import numpy as np +from fastapi import FastAPI, WebSocket, WebSocketDisconnect, HTTPException +from fastapi.middleware.cors import CORSMiddleware +from pydantic import BaseModel +import uvicorn +import torch + +# --- 1. Logger setup --- +# Cloud Run restricts filesystem writes. Use stdout only. +logging.basicConfig(level=logging.INFO, stream=sys.stdout) +logger = logging.getLogger("Audio2Expression") + +# --- Path configuration --- +SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) + +# Cloud Run: GCS FUSE mount path (primary), Docker-baked models (fallback) +MOUNT_PATH = os.environ.get("MODEL_MOUNT_PATH", "/mnt/models") +MODEL_SUBDIR = os.environ.get("MODEL_SUBDIR", "audio2exp") + +# LAM module path resolution +LAM_A2E_CANDIDATES = [ + os.environ.get("LAM_A2E_PATH"), + os.path.join(SCRIPT_DIR, "LAM_Audio2Expression"), +] +LAM_A2E_PATH = None +for candidate in LAM_A2E_CANDIDATES: + if candidate and os.path.exists(candidate): + LAM_A2E_PATH = os.path.abspath(candidate) + break + +if LAM_A2E_PATH: + sys.path.insert(0, LAM_A2E_PATH) + logger.info(f"Added LAM_Audio2Expression to path: {LAM_A2E_PATH}") +else: + logger.error("LAM_Audio2Expression not found!") + +# --- ARKit 52 channels --- +ARKIT_CHANNELS = [ + "browDownLeft", "browDownRight", "browInnerUp", "browOuterUpLeft", "browOuterUpRight", + "cheekPuff", "cheekSquintLeft", "cheekSquintRight", + "eyeBlinkLeft", "eyeBlinkRight", "eyeLookDownLeft", "eyeLookDownRight", + "eyeLookInLeft", "eyeLookInRight", "eyeLookOutLeft", "eyeLookOutRight", + "eyeLookUpLeft", "eyeLookUpRight", "eyeSquintLeft", "eyeSquintRight", + "eyeWideLeft", "eyeWideRight", + "jawForward", "jawLeft", "jawOpen", "jawRight", + "mouthClose", "mouthDimpleLeft", "mouthDimpleRight", "mouthFrownLeft", "mouthFrownRight", + "mouthFunnel", "mouthLeft", "mouthLowerDownLeft", "mouthLowerDownRight", + "mouthPressLeft", "mouthPressRight", "mouthPucker", "mouthRight", + "mouthRollLower", "mouthRollUpper", "mouthShrugLower", "mouthShrugUpper", + "mouthSmileLeft", "mouthSmileRight", "mouthStretchLeft", "mouthStretchRight", + "mouthUpperUpLeft", "mouthUpperUpRight", + "noseSneerLeft", "noseSneerRight", + "tongueOut" +] + + +# --- JBIN bundle generator --- +def create_jbin_bundle(expression: np.ndarray, audio: np.ndarray, + expression_sample_rate: int = 30, + audio_sample_rate: int = 24000, + batch_id: int = 0, + start_of_batch: bool = False, + end_of_batch: bool = False) -> bytes: + if audio.dtype == np.float32: + audio_int16 = (audio * 32767).astype(np.int16) + else: + audio_int16 = audio.astype(np.int16) + + expression_f32 = np.ascontiguousarray(expression.astype(np.float32)) + expression_bytes = expression_f32.tobytes() + audio_bytes = audio_int16.tobytes() + + descriptor = { + "data_records": { + "arkit_face": { + "data_type": "float32", + "data_offset": 0, + "shape": list(expression_f32.shape), + "channel_names": ARKIT_CHANNELS, + "sample_rate": expression_sample_rate, + "data_id": 0, + "timeline_axis": 0, + "channel_axis": 1 + }, + "avatar_audio": { + "data_type": "int16", + "data_offset": len(expression_bytes), + "shape": [1, len(audio_int16)], + "sample_rate": audio_sample_rate, + "data_id": 1, + "timeline_axis": 1 + } + }, + "metadata": {}, + "events": [], + "batch_id": batch_id, + "start_of_batch": start_of_batch, + "end_of_batch": end_of_batch + } + json_bytes = json.dumps(descriptor).encode('utf-8') + header = (b'JBIN' + + struct.pack(' str: + """Resolve model file: FUSE mount first, then Docker-baked fallback.""" + candidates = [] + fuse_dir = os.path.join(MOUNT_PATH, MODEL_SUBDIR) + if subdir: + candidates.append(os.path.join(fuse_dir, subdir)) + candidates.append(os.path.join(SCRIPT_DIR, "models", subdir)) + else: + candidates.append(os.path.join(fuse_dir, filename)) + candidates.append(os.path.join(SCRIPT_DIR, "models", filename)) + + for path in candidates: + if os.path.exists(path): + logger.info(f"Found: {path}") + return path + logger.error(f"NOT FOUND: {filename} (searched {candidates})") + return None + + def initialize(self): + if self.initialized: + return + if not LAM_A2E_PATH: + logger.error("Cannot initialize: LAM_A2E_PATH not found") + return + + try: + logger.info("Initializing Audio2Expression Engine...") + + from engines.defaults import default_config_parser + from engines.infer import INFER + + # --- CRITICAL: Force DDP environment for single-process --- + os.environ["WORLD_SIZE"] = "1" + os.environ["RANK"] = "0" + os.environ["MASTER_ADDR"] = "localhost" + os.environ["MASTER_PORT"] = "12345" + + # Resolve model paths via FUSE mount (primary) or Docker-baked (fallback) + lam_weight_path = self._resolve_model_path("lam_audio2exp_streaming.pth") + wav2vec_path = self._resolve_model_path(None, subdir="wav2vec2-base-960h") + + if not lam_weight_path: + logger.error("LAM model weight (.pth) not found. Aborting.") + return + if not wav2vec_path: + logger.error("wav2vec2 model not found. Aborting.") + return + + # wav2vec config: use config.json from the model directory itself + wav2vec_config = os.path.join(wav2vec_path, "config.json") + if not os.path.exists(wav2vec_config): + logger.error(f"wav2vec2 config.json not found at: {wav2vec_config}") + return + logger.info(f"wav2vec2 config: {wav2vec_config}") + + config_file = os.path.join(LAM_A2E_PATH, "configs", + "lam_audio2exp_config_streaming.py") + + # --- CRITICAL: Config override to bypass DDP --- + # save_path -> /tmp (only writable dir on Cloud Run) + # This allows default_config_parser's os.makedirs() and cfg.dump() to succeed. + save_path = "/tmp/audio2exp_logs" + os.makedirs(save_path, exist_ok=True) + os.makedirs(os.path.join(save_path, "model"), exist_ok=True) + + cfg_options = { + "weight": lam_weight_path, + "save_path": save_path, + "model": { + "backbone": { + "wav2vec2_config_path": wav2vec_config, + "pretrained_encoder_path": wav2vec_path + } + }, + "num_worker": 0, + "batch_size": 1, + } + + logger.info(f"Loading config: {config_file}") + logger.info(f"Model weight: {lam_weight_path}") + logger.info(f"wav2vec2 path: {wav2vec_path}") + cfg = default_config_parser(config_file, cfg_options) + + # --- CRITICAL: Skip default_setup() entirely --- + # default_setup() calls comm.get_world_size(), batch_size asserts, + # and num_worker calculations that are unnecessary for inference. + # Instead, set the minimal required fields manually. + cfg.device = torch.device('cpu') + cfg.num_worker = 0 + cfg.num_worker_per_gpu = 0 + cfg.batch_size_per_gpu = 1 + cfg.batch_size_val_per_gpu = 1 + cfg.batch_size_test_per_gpu = 1 + + logger.info("Building INFER model (skipping default_setup)...") + self.infer = INFER.build(dict(type=cfg.infer.type, cfg=cfg)) + + # Force CPU + eval mode + self.infer.model.to(torch.device('cpu')) + self.infer.model.eval() + + # Warmup inference + logger.info("Running warmup inference...") + dummy_audio = np.zeros(self.input_sample_rate, dtype=np.float32) + self.infer.infer_streaming_audio( + audio=dummy_audio, ssr=self.input_sample_rate, context=None + ) + + self.initialized = True + logger.info("Model initialized successfully!") + + except Exception as e: + logger.critical(f"Initialization FAILED: {e}") + traceback.print_exc() + self.initialized = False + + def process_full_audio(self, audio: np.ndarray, + sample_rate: int = 24000) -> np.ndarray: + if not self.initialized: + logger.warning("Model not initialized, returning mock expression.") + return self._mock_expression(audio, sample_rate=sample_rate) + + chunk_samples = sample_rate + all_expressions = [] + context = None + + try: + for start in range(0, len(audio), chunk_samples): + end = min(start + chunk_samples, len(audio)) + chunk = audio[start:end] + if len(chunk) < sample_rate // 10: + continue + + result, context = self.infer.infer_streaming_audio( + audio=chunk, ssr=sample_rate, context=context + ) + expr = result.get("expression") + if expr is not None: + all_expressions.append(expr.astype(np.float32)) + + if not all_expressions: + return np.zeros((1, 52), dtype=np.float32) + + return np.concatenate(all_expressions, axis=0) + + except Exception as e: + logger.error(f"Inference error: {e}") + return self._mock_expression(audio, sample_rate=sample_rate) + + def _mock_expression(self, audio: np.ndarray, + sample_rate: int = 24000) -> np.ndarray: + frame_rate = 30 + samples_per_frame = sample_rate // frame_rate + num_frames = max(1, len(audio) // samples_per_frame) + return np.zeros((num_frames, 52), dtype=np.float32) + + +# --- FastAPI Setup --- +engine = Audio2ExpressionEngine() +active_connections: Dict[str, WebSocket] = {} +session_batch_ids: Dict[str, int] = {} +session_chunk_counts: Dict[str, int] = {} + + +class AudioRequest(BaseModel): + audio_base64: str + session_id: str + is_start: bool = False + is_final: bool = False + audio_format: str = "pcm" + sample_rate: int = 24000 + + +class ExpressionResponse(BaseModel): + session_id: str + names: List[str] + frames: List[dict] + frame_rate: int = 30 + timestamp: float + batch_id: int = 0 + + +@asynccontextmanager +async def lifespan(app: FastAPI): + # Synchronous model load at startup + engine.initialize() + yield + + +app = FastAPI(title="Gourmet AI Concierge LipSync", lifespan=lifespan) +app.add_middleware( + CORSMiddleware, + allow_origins=["*"], allow_methods=["*"], allow_headers=["*"] +) + + +@app.get("/health") +async def health_check(): + return { + "status": "ok", + "model_initialized": engine.initialized, + "mode": "inference" if engine.initialized else "mock", + "mount_check": os.path.exists(os.path.join(MOUNT_PATH, MODEL_SUBDIR)) + } + + +@app.post("/api/audio2expression", response_model=ExpressionResponse) +async def process_audio_endpoint(request: AudioRequest): + try: + audio_bytes = base64.b64decode(request.audio_base64) + + if request.audio_format == "mp3": + try: + from pydub import AudioSegment + import io + seg = AudioSegment.from_mp3(io.BytesIO(audio_bytes)).set_channels(1) + audio_int16 = np.array(seg.get_array_of_samples(), dtype=np.int16) + actual_sr = seg.frame_rate + except ImportError: + audio_int16 = np.frombuffer(audio_bytes, dtype=np.int16) + actual_sr = request.sample_rate + else: + audio_int16 = np.frombuffer(audio_bytes, dtype=np.int16) + actual_sr = request.sample_rate + + audio_float = audio_int16.astype(np.float32) / 32768.0 + + sid = request.session_id + if request.is_start or sid not in session_batch_ids: + session_batch_ids[sid] = session_batch_ids.get(sid, 0) + 1 + session_chunk_counts[sid] = 0 + + batch_id = session_batch_ids[sid] + session_chunk_counts[sid] = session_chunk_counts.get(sid, 0) + 1 + is_start_chunk = (session_chunk_counts[sid] == 1) + + expression = engine.process_full_audio(audio_float, sample_rate=actual_sr) + + if expression is None: + raise HTTPException(status_code=500, detail="Inference failed") + + # Send JBIN via WebSocket if connected + if sid in active_connections: + await send_bundled_to_ws( + active_connections[sid], expression, audio_int16, sid, + batch_id=batch_id, + start_of_batch=is_start_chunk, + end_of_batch=request.is_final, + audio_sample_rate=actual_sr + ) + + frames = [{"weights": row} for row in expression.tolist()] + return ExpressionResponse( + session_id=sid, names=ARKIT_CHANNELS, frames=frames, + frame_rate=30, timestamp=time.time(), batch_id=batch_id + ) + + except HTTPException: + raise + except Exception as e: + logger.error(f"API Error: {e}") + traceback.print_exc() + raise HTTPException(status_code=500, detail=str(e)) + + +async def send_bundled_to_ws(ws: WebSocket, expression: np.ndarray, + audio: np.ndarray, session_id: str, + batch_id: int, start_of_batch: bool, + end_of_batch: bool, audio_sample_rate: int): + try: + jbin_data = create_jbin_bundle( + expression, audio, 30, audio_sample_rate, + batch_id, start_of_batch, end_of_batch + ) + await ws.send_bytes(jbin_data) + except Exception as e: + logger.error(f"WS Send Error [{session_id}]: {e}") + + +@app.websocket("/ws/{session_id}") +async def websocket_endpoint(websocket: WebSocket, session_id: str): + await websocket.accept() + active_connections[session_id] = websocket + try: + while True: + data = await websocket.receive_text() + msg = json.loads(data) + if msg.get("type") == "ping": + await websocket.send_json({"type": "pong"}) + except WebSocketDisconnect: + pass + finally: + active_connections.pop(session_id, None) + + +if __name__ == "__main__": + uvicorn.run(app, host="0.0.0.0", port=int(os.environ.get("PORT", 8080))) diff --git a/audio2exp-service/cloudbuild.yaml b/audio2exp-service/cloudbuild.yaml new file mode 100644 index 0000000..8398cfc --- /dev/null +++ b/audio2exp-service/cloudbuild.yaml @@ -0,0 +1,80 @@ +# Cloud Build configuration for audio2exp-service +# Models are baked into Docker image (fallback) AND served via GCS FUSE mount (primary) + +options: + machineType: 'E2_HIGHCPU_8' + diskSizeGb: 100 + +steps: + # Step 1: Download models from GCS (baked into image as fallback) + - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk' + entrypoint: 'bash' + args: + - '-c' + - | + mkdir -p models + echo "Downloading LAM model..." + gsutil cp gs://hp-support-477512-models/audio2exp/lam_audio2exp_streaming.pth models/ + echo "Downloading wav2vec2 model..." + gsutil -m cp -r gs://hp-support-477512-models/audio2exp/wav2vec2-base-960h models/ + echo "Models downloaded:" + ls -la models/ + ls -la models/wav2vec2-base-960h/ || true + + # Step 2: Build Docker image (models are copied into image) + - name: 'gcr.io/cloud-builders/docker' + args: + - 'build' + - '--no-cache' + - '-t' + - 'gcr.io/$PROJECT_ID/audio2exp-service:$BUILD_ID' + - '-t' + - 'gcr.io/$PROJECT_ID/audio2exp-service:latest' + - '.' + + # Step 3: Push to Container Registry + - name: 'gcr.io/cloud-builders/docker' + args: + - 'push' + - '--all-tags' + - 'gcr.io/$PROJECT_ID/audio2exp-service' + + # Step 4: Deploy to Cloud Run with GCS FUSE volume mount + - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk' + entrypoint: gcloud + args: + - 'run' + - 'deploy' + - 'audio2exp-service' + - '--image' + - 'gcr.io/$PROJECT_ID/audio2exp-service:$BUILD_ID' + - '--region' + - 'us-central1' + - '--platform' + - 'managed' + - '--allow-unauthenticated' + - '--execution-environment' + - 'gen2' + - '--memory' + - '8Gi' + - '--cpu' + - '4' + - '--cpu-boost' + - '--timeout' + - '300' + - '--concurrency' + - '10' + - '--min-instances' + - '0' + - '--max-instances' + - '4' + - '--add-volume' + - 'name=models,type=cloud-storage,bucket=hp-support-477512-models' + - '--add-volume-mount' + - 'volume=models,mount-path=/mnt/models' + +images: + - 'gcr.io/$PROJECT_ID/audio2exp-service:$BUILD_ID' + - 'gcr.io/$PROJECT_ID/audio2exp-service:latest' + +timeout: '3600s' diff --git a/audio2exp-service/cpu_support.patch b/audio2exp-service/cpu_support.patch new file mode 100644 index 0000000..854c442 --- /dev/null +++ b/audio2exp-service/cpu_support.patch @@ -0,0 +1,69 @@ +diff --git a/engines/infer.py b/engines/infer.py +index ffd6cfe..a5eac9f 100644 +--- a/engines/infer.py ++++ b/engines/infer.py +@@ -41,14 +41,24 @@ from models.utils import smooth_mouth_movements, apply_frame_blending, apply_sav + + INFER = Registry("infer") + ++# Device detection for CPU/GPU support ++def get_device(): ++ """Get the best available device (CUDA or CPU)""" ++ if torch.cuda.is_available(): ++ return torch.device('cuda') ++ else: ++ return torch.device('cpu') ++ + class InferBase: + def __init__(self, cfg, model=None, verbose=False) -> None: + torch.multiprocessing.set_sharing_strategy("file_system") ++ self.device = get_device() + self.logger = get_root_logger( + log_file=os.path.join(cfg.save_path, "infer.log"), + file_mode="a" if cfg.resume else "w", + ) + self.logger.info("=> Loading config ...") ++ self.logger.info(f"=> Using device: {self.device}") + self.cfg = cfg + self.verbose = verbose + if self.verbose: +@@ -65,13 +75,13 @@ class InferBase: + n_parameters = sum(p.numel() for p in model.parameters() if p.requires_grad) + self.logger.info(f"Num params: {n_parameters}") + model = create_ddp_model( +- model.cuda(), ++ model.to(self.device), + broadcast_buffers=False, + find_unused_parameters=self.cfg.find_unused_parameters, + ) + if os.path.isfile(self.cfg.weight): + self.logger.info(f"Loading weight at: {self.cfg.weight}") +- checkpoint = torch.load(self.cfg.weight) ++ checkpoint = torch.load(self.cfg.weight, map_location=self.device) + weight = OrderedDict() + for key, value in checkpoint["state_dict"].items(): + if key.startswith("module."): +@@ -117,9 +127,9 @@ class Audio2ExpressionInfer(InferBase): + with torch.no_grad(): + input_dict = {} + input_dict['id_idx'] = F.one_hot(torch.tensor(self.cfg.id_idx), +- self.cfg.model.backbone.num_identity_classes).cuda(non_blocking=True)[None,...] ++ self.cfg.model.backbone.num_identity_classes).to(self.device)[None,...] + speech_array, ssr = librosa.load(self.cfg.audio_input, sr=16000) +- input_dict['input_audio_array'] = torch.FloatTensor(speech_array).cuda(non_blocking=True)[None,...] ++ input_dict['input_audio_array'] = torch.FloatTensor(speech_array).to(self.device)[None,...] + + end = time.time() + output_dict = self.model(input_dict) +@@ -198,9 +208,9 @@ class Audio2ExpressionInfer(InferBase): + try: + input_dict = {} + input_dict['id_idx'] = F.one_hot(torch.tensor(self.cfg.id_idx), +- self.cfg.model.backbone.num_identity_classes).cuda(non_blocking=True)[ ++ self.cfg.model.backbone.num_identity_classes).to(self.device)[ + None, ...] +- input_dict['input_audio_array'] = torch.FloatTensor(input_audio).cuda(non_blocking=True)[None, ...] ++ input_dict['input_audio_array'] = torch.FloatTensor(input_audio).to(self.device)[None, ...] + output_dict = self.model(input_dict) + out_exp = output_dict['pred_exp'].squeeze().cpu().numpy()[start_frame:, :] + except: diff --git a/audio2exp-service/deploy.ps1 b/audio2exp-service/deploy.ps1 new file mode 100644 index 0000000..c62da94 --- /dev/null +++ b/audio2exp-service/deploy.ps1 @@ -0,0 +1,69 @@ +# Audio2Expression Service デプロイスクリプト (PowerShell) + +# 設定 +$PROJECT_ID = "hp-support-477512" +$SERVICE_NAME = "audio2exp-service" +$REGION = "us-central1" +$IMAGE_NAME = "gcr.io/$PROJECT_ID/$SERVICE_NAME" + +Write-Host "====================================" -ForegroundColor Cyan +Write-Host "Audio2Expression Service デプロイ" -ForegroundColor Cyan +Write-Host "====================================" -ForegroundColor Cyan +Write-Host "" + +# デバッグ: 変数確認 +Write-Host "PROJECT_ID: $PROJECT_ID" -ForegroundColor Gray +Write-Host "IMAGE_NAME: $IMAGE_NAME" -ForegroundColor Gray +Write-Host "" + +# 1. イメージビルド +Write-Host "[1/3] Dockerイメージをビルド中..." -ForegroundColor Yellow +gcloud builds submit --tag "$IMAGE_NAME" --project "$PROJECT_ID" + +if ($LASTEXITCODE -ne 0) { + Write-Host "ビルドに失敗しました" -ForegroundColor Red + exit 1 +} +Write-Host "ビルド完了" -ForegroundColor Green +Write-Host "" + +# 2. Cloud Runにデプロイ +Write-Host "[2/3] Cloud Runにデプロイ中..." -ForegroundColor Yellow +gcloud run deploy "$SERVICE_NAME" ` + --image "$IMAGE_NAME" ` + --platform managed ` + --region "$REGION" ` + --allow-unauthenticated ` + --memory 1Gi ` + --cpu 1 ` + --timeout 300 ` + --max-instances 10 ` + --project "$PROJECT_ID" + +if ($LASTEXITCODE -ne 0) { + Write-Host "デプロイに失敗しました" -ForegroundColor Red + exit 1 +} +Write-Host "デプロイ完了" -ForegroundColor Green +Write-Host "" + +# 3. URLを取得 +Write-Host "[3/3] サービスURLを取得中..." -ForegroundColor Yellow +$SERVICE_URL = gcloud run services describe "$SERVICE_NAME" ` + --region "$REGION" ` + --format 'value(status.url)' ` + --project "$PROJECT_ID" + +Write-Host "" +Write-Host "====================================" -ForegroundColor Cyan +Write-Host "デプロイが完了しました!" -ForegroundColor Green +Write-Host "====================================" -ForegroundColor Cyan +Write-Host "" +Write-Host "サービスURL: $SERVICE_URL" -ForegroundColor Yellow +Write-Host "" +Write-Host "次のステップ:" -ForegroundColor Cyan +Write-Host "1. gourmet-support に環境変数を追加:" +Write-Host " AUDIO2EXP_SERVICE_URL=$SERVICE_URL" -ForegroundColor Yellow +Write-Host "" +Write-Host "2. gourmet-support の deploy.ps1 を修正して再デプロイ" +Write-Host "" diff --git a/audio2exp-service/fix_gcs_model.sh b/audio2exp-service/fix_gcs_model.sh new file mode 100755 index 0000000..cd55e6a --- /dev/null +++ b/audio2exp-service/fix_gcs_model.sh @@ -0,0 +1,54 @@ +#!/bin/bash +# Fix the corrupted model file in GCS +# The issue: GCS has a 356MB file but the correct file is 390MB + +set -e + +# Correct model file path +LOCAL_MODEL="/home/user/LAM_gpro/OpenAvatarChat/models/LAM_audio2exp/pretrained_models/lam_audio2exp_streaming.tar" + +# GCS destination +GCS_BUCKET="gs://hp-support-477512-models/audio2exp" + +echo "=== Fixing GCS Model File ===" +echo "" + +# Check local file +echo "[1/4] Checking local model file..." +if [ ! -f "$LOCAL_MODEL" ]; then + echo "ERROR: Local model file not found: $LOCAL_MODEL" + exit 1 +fi + +LOCAL_SIZE=$(stat -c%s "$LOCAL_MODEL" 2>/dev/null || stat -f%z "$LOCAL_MODEL") +echo "Local file size: $LOCAL_SIZE bytes ($(numfmt --to=iec $LOCAL_SIZE 2>/dev/null || echo "$LOCAL_SIZE"))" +echo "Local file hash: $(md5sum "$LOCAL_MODEL" | cut -d' ' -f1)" + +# Verify local file works with PyTorch +echo "" +echo "[2/4] Verifying local file works with PyTorch..." +python3 -c " +import torch +checkpoint = torch.load('$LOCAL_MODEL', map_location='cpu', weights_only=False) +print(f'SUCCESS: Loaded checkpoint with {len(checkpoint[\"state_dict\"])} parameters') +" || { echo "ERROR: Local file is invalid"; exit 1; } + +# Upload to GCS +echo "" +echo "[3/4] Uploading correct model to GCS..." +echo "Destination: $GCS_BUCKET/lam_audio2exp_streaming.tar" +gsutil cp "$LOCAL_MODEL" "$GCS_BUCKET/lam_audio2exp_streaming.tar" + +# Verify upload +echo "" +echo "[4/4] Verifying GCS file..." +gsutil ls -la "$GCS_BUCKET/lam_audio2exp_streaming.tar" + +echo "" +echo "=== DONE ===" +echo "The correct model file has been uploaded to GCS." +echo "Now redeploy the Cloud Run service to use the fixed model." +echo "" +echo "To redeploy, run:" +echo " cd /home/user/LAM_gpro/audio2exp-service" +echo " gcloud builds submit --config=cloudbuild.yaml" diff --git a/audio2exp-service/integration/app_customer_support_modified.py b/audio2exp-service/integration/app_customer_support_modified.py new file mode 100644 index 0000000..ccf9bed --- /dev/null +++ b/audio2exp-service/integration/app_customer_support_modified.py @@ -0,0 +1,884 @@ +# -*- coding: utf-8 -*- +""" +汎用カスタマーサポートシステム (Gemini API版) - 改善版 +モジュール分割版(3ファイル構成) + +分割構成: +- api_integrations.py: 外部API連携 +- support_core.py: ビジネスロジック・コアクラス +- app_customer_support.py: Webアプリケーション層(本ファイル) +""" +import os +import re +import json +import time +import base64 +import logging +import threading +import queue +import requests +from datetime import datetime +from flask import Flask, request, jsonify, render_template +from flask_cors import CORS +from flask_socketio import SocketIO, emit +from google import genai +from google.genai import types +from google.cloud import texttospeech +from google.cloud import speech + +# 新しいモジュールからインポート +from api_integrations import ( + enrich_shops_with_photos, + extract_area_from_text, + GOOGLE_PLACES_API_KEY +) +from support_core import ( + load_system_prompts, + INITIAL_GREETINGS, + SYSTEM_PROMPTS, + SupportSession, + SupportAssistant +) + +# ロギング設定 +logging.basicConfig( + level=logging.INFO, + format='%(asctime)s [%(levelname)s] %(message)s' +) +logger = logging.getLogger(__name__) + +# 長期記憶モジュールをインポート +try: + from long_term_memory import LongTermMemory, PreferenceExtractor, extract_name_from_text + LONG_TERM_MEMORY_ENABLED = True +except Exception as e: + logger.warning(f"[LTM] 長期記憶モジュールのインポート失敗: {e}") + LONG_TERM_MEMORY_ENABLED = False + +# ======================================== +# Audio2Expression Service 設定 +# ======================================== +AUDIO2EXP_SERVICE_URL = os.getenv("AUDIO2EXP_SERVICE_URL", "") +if AUDIO2EXP_SERVICE_URL: + logger.info(f"[Audio2Exp] サービスURL設定済み: {AUDIO2EXP_SERVICE_URL}") +else: + logger.info("[Audio2Exp] サービスURL未設定(リップシンク無効)") + +app = Flask(__name__) +app.config["JSON_AS_ASCII"] = False # UTF-8エンコーディングを有効化 + +# ======================================== +# CORS & SocketIO 設定 (Claudeアドバイス適用版) +# ======================================== + +# 許可するオリジン(末尾のスラッシュなし) +allowed_origins = [ + "https://gourmet-sp-two.vercel.app", + "https://gourmet-sp.vercel.app", + "http://localhost:4321" +] + +# SocketIO初期化 (cors_allowed_originsを明示的に指定) +socketio = SocketIO( + app, + cors_allowed_origins=allowed_origins, + async_mode='threading', + logger=False, + engineio_logger=False +) + +# Flask-CORS初期化 (supports_credentials=True) +CORS(app, resources={ + r"/*": { + "origins": allowed_origins, + "methods": ["GET", "POST", "OPTIONS"], + "allow_headers": ["Content-Type", "Authorization"], + "supports_credentials": True + } +}) + +# 【重要】全レスポンスに強制的にCORSヘッダーを注入するフック +@app.after_request +def after_request(response): + origin = request.headers.get('Origin') + if origin in allowed_origins: + response.headers['Access-Control-Allow-Origin'] = origin + response.headers['Access-Control-Allow-Credentials'] = 'true' + response.headers['Access-Control-Allow-Methods'] = 'GET, POST, OPTIONS' + response.headers['Access-Control-Allow-Headers'] = 'Content-Type, Authorization' + # UTF-8エンコーディングを明示 + if response.content_type and 'application/json' in response.content_type: + response.headers['Content-Type'] = 'application/json; charset=utf-8' + return response + +# Google Cloud TTS/STT初期化 +tts_client = texttospeech.TextToSpeechClient() +stt_client = speech.SpeechClient() + +# プロンプト読み込み +SYSTEM_PROMPTS = load_system_prompts() + + +# ======================================== +# Audio2Expression: 表情フレーム取得関数 +# ======================================== +def get_expression_frames(audio_base64: str, session_id: str, audio_format: str = 'mp3'): + """ + Audio2Expression サービスに音声を送信して表情フレームを取得 + MP3をそのまま送信(audio2exp-serviceがpydubで変換対応済み) + + Returns: dict with {names, frames, frame_rate} or None + """ + if not AUDIO2EXP_SERVICE_URL or not session_id: + return None + + try: + response = requests.post( + f"{AUDIO2EXP_SERVICE_URL}/api/audio2expression", + json={ + "audio_base64": audio_base64, + "session_id": session_id, + "is_start": True, + "is_final": True, + "audio_format": audio_format + }, + timeout=10 + ) + if response.status_code == 200: + result = response.json() + frame_count = len(result.get('frames', [])) + logger.info(f"[Audio2Exp] 表情生成成功: {frame_count}フレーム, session={session_id}") + return result + else: + logger.warning(f"[Audio2Exp] 送信失敗: status={response.status_code}") + return None + except Exception as e: + logger.warning(f"[Audio2Exp] 送信エラー: {e}") + return None + + +@app.route('/') +def index(): + """フロントエンド表示""" + return render_template('support.html') + + +@app.route('/api/session/start', methods=['POST', 'OPTIONS']) +def start_session(): + """ + セッション開始 - モード対応 + + 【重要】改善されたフロー: + 1. セッション初期化(モード・言語設定) + 2. アシスタント作成(最新の状態で) + 3. 初回メッセージ生成 + 4. 履歴に追加 + """ + if request.method == 'OPTIONS': + return '', 204 + + try: + data = request.json or {} + user_info = data.get('user_info', {}) + language = data.get('language', 'ja') + mode = data.get('mode', 'chat') + + # 1. セッション初期化 + session = SupportSession() + session.initialize(user_info, language=language, mode=mode) + logger.info(f"[Start Session] 新規セッション作成: {session.session_id}") + + # 2. アシスタント作成(最新の状態で) + assistant = SupportAssistant(session, SYSTEM_PROMPTS) + + # 3. 初回メッセージ生成 + initial_message = assistant.get_initial_message() + + # 4. 履歴に追加(roleは'model') + session.add_message('model', initial_message, 'chat') + + logger.info(f"[API] セッション開始: {session.session_id}, 言語: {language}, モード: {mode}") + + # レスポンス作成 + response_data = { + 'session_id': session.session_id, + 'initial_message': initial_message + } + + # コンシェルジュモードのみ、名前情報を返す + if mode == 'concierge': + session_data = session.get_data() + profile = session_data.get('long_term_profile') if session_data else None + if profile: + response_data['user_profile'] = { + 'preferred_name': profile.get('preferred_name'), + 'name_honorific': profile.get('name_honorific') + } + logger.info(f"[API] user_profile を返却: {response_data['user_profile']}") + + return jsonify(response_data) + + except Exception as e: + logger.error(f"[API] セッション開始エラー: {e}") + return jsonify({'error': str(e)}), 500 + + +@app.route('/api/chat', methods=['POST', 'OPTIONS']) +def chat(): + """ + チャット処理 - 改善版 + + 【重要】改善されたフロー(順序を厳守): + 1. 状態確定 (State First): モード・言語を更新 + 2. ユーザー入力を記録: メッセージを履歴に追加 + 3. 知能生成 (Assistant作成): 最新の状態でアシスタントを作成 + 4. 推論開始: Gemini APIを呼び出し + 5. アシスタント応答を記録: 履歴に追加 + """ + if request.method == 'OPTIONS': + return '', 204 + + try: + data = request.json + session_id = data.get('session_id') + user_message = data.get('message') + stage = data.get('stage', 'conversation') + language = data.get('language', 'ja') + mode = data.get('mode', 'chat') + + if not session_id or not user_message: + return jsonify({'error': 'session_idとmessageが必要です'}), 400 + + session = SupportSession(session_id) + session_data = session.get_data() + + if not session_data: + return jsonify({'error': 'セッションが見つかりません'}), 404 + + logger.info(f"[Chat] セッション: {session_id}, モード: {mode}, 言語: {language}") + + # 1. 状態確定 (State First) + session.update_language(language) + session.update_mode(mode) + + # 2. ユーザー入力を記録 + session.add_message('user', user_message, 'chat') + + # 3. 知能生成 (Assistant作成) + assistant = SupportAssistant(session, SYSTEM_PROMPTS) + + # 4. 推論開始 + result = assistant.process_user_message(user_message, stage) + + # 5. アシスタント応答を記録 + session.add_message('model', result['response'], 'chat') + + if result['summary']: + session.add_message('model', result['summary'], 'summary') + + # ショップデータ処理 + shops = result.get('shops') or [] # None対策 + response_text = result['response'] + is_followup = result.get('is_followup', False) + + # 多言語メッセージ辞書 + shop_messages = { + 'ja': { + 'intro': lambda count: f"ご希望に合うお店を{count}件ご紹介します。\n\n", + 'not_found': "申し訳ございません。条件に合うお店が見つかりませんでした。別の条件でお探しいただけますか?" + }, + 'en': { + 'intro': lambda count: f"Here are {count} restaurant recommendations for you.\n\n", + 'not_found': "Sorry, we couldn't find any restaurants matching your criteria. Would you like to search with different conditions?" + }, + 'zh': { + 'intro': lambda count: f"为您推荐{count}家餐厅。\n\n", + 'not_found': "很抱歉,没有找到符合条件的餐厅。要用其他条件搜索吗?" + }, + 'ko': { + 'intro': lambda count: f"고객님께 {count}개의 식당을 추천합니다.\n\n", + 'not_found': "죄송합니다. 조건에 맞는 식당을 찾을 수 없었습니다. 다른 조건으로 찾으시겠습니까?" + } + } + + current_messages = shop_messages.get(language, shop_messages['ja']) + + if shops and not is_followup: + original_count = len(shops) + area = extract_area_from_text(user_message, language) + logger.info(f"[Chat] 抽出エリア: '{area}' from '{user_message}'") + + # Places APIで写真を取得 + shops = enrich_shops_with_photos(shops, area, language) or [] + + if shops: + shop_list = [] + for i, shop in enumerate(shops, 1): + name = shop.get('name', '') + shop_area = shop.get('area', '') + description = shop.get('description', '') + if shop_area: + shop_list.append(f"{i}. **{name}**({shop_area}): {description}") + else: + shop_list.append(f"{i}. **{name}**: {description}") + + response_text = current_messages['intro'](len(shops)) + "\n\n".join(shop_list) + logger.info(f"[Chat] {len(shops)}件のショップデータを返却(元: {original_count}件, 言語: {language})") + else: + response_text = current_messages['not_found'] + logger.warning(f"[Chat] 全店舗が除外されました(元: {original_count}件)") + + elif is_followup: + logger.info(f"[Chat] 深掘り質問への回答: {response_text[:100]}...") + + # ======================================== + # 長期記憶: LLMからのaction処理(新設計版) + # ======================================== + if LONG_TERM_MEMORY_ENABLED: + try: + # user_id をセッションデータから取得 + user_id = session_data.get('user_id') + + # ======================================== + # LLMからのaction指示を処理 + # ======================================== + # 初回訪問時の名前登録も、名前変更も、すべてLLMのactionで統一 + action = result.get('action') + if action and action.get('type') == 'update_user_profile': + updates = action.get('updates', {}) + if updates and user_id: + ltm = LongTermMemory() + # user_id をキーにしてプロファイルを更新(UPSERT動作) + success = ltm.update_profile(user_id, updates) + if success: + logger.info(f"[LTM] LLMからの指示でプロファイル更新成功: updates={updates}, user_id={user_id}") + else: + logger.error(f"[LTM] LLMからの指示でプロファイル更新失敗: updates={updates}, user_id={user_id}") + elif not user_id: + logger.warning(f"[LTM] user_id が空のためプロファイル更新をスキップ: action={action}") + + # ======================================== + # ショップカード提示時にサマリーを保存(マージ) + # ======================================== + if shops and not is_followup and user_id and mode == 'concierge': + try: + # 提案した店舗名を取得 + shop_names = [s.get('name', '不明') for s in shops] + timestamp = datetime.now().strftime('%Y-%m-%d %H:%M') + + # サマリーを生成 + shop_summary = f"[{timestamp}] 検索条件: {user_message[:100]}\n提案店舗: {', '.join(shop_names)}" + + ltm = LongTermMemory() + if ltm.append_conversation_summary(user_id, shop_summary): + logger.info(f"[LTM] ショップ提案サマリー保存成功: {len(shops)}件") + else: + logger.warning(f"[LTM] ショップ提案サマリー保存失敗") + except Exception as e: + logger.error(f"[LTM] ショップサマリー保存エラー: {e}") + + except Exception as e: + logger.error(f"[LTM] 処理エラー: {e}") + + # 【デバッグ】最終的なshopsの内容を確認 + logger.info(f"[Chat] 最終shops配列: {len(shops)}件") + if shops: + logger.info(f"[Chat] shops[0] keys: {list(shops[0].keys())}") + return jsonify({ + 'response': response_text, + 'summary': result['summary'], + 'shops': shops, + 'should_confirm': result['should_confirm'], + 'is_followup': is_followup + }) + + except Exception as e: + logger.error(f"[API] チャットエラー: {e}") + return jsonify({'error': str(e)}), 500 + + +@app.route('/api/finalize', methods=['POST', 'OPTIONS']) +def finalize_session(): + """セッション完了""" + if request.method == 'OPTIONS': + return '', 204 + + try: + data = request.json + session_id = data.get('session_id') + + if not session_id: + return jsonify({'error': 'session_idが必要です'}), 400 + + session = SupportSession(session_id) + session_data = session.get_data() + + if not session_data: + return jsonify({'error': 'セッションが見つかりません'}), 404 + + assistant = SupportAssistant(session, SYSTEM_PROMPTS) + final_summary = assistant.generate_final_summary() + + # ======================================== + # 長期記憶: セッション終了時にサマリーを追記(マージ) + # ======================================== + if LONG_TERM_MEMORY_ENABLED and session_data.get('mode') == 'concierge': + user_id = session_data.get('user_id') + if user_id and final_summary: + try: + ltm = LongTermMemory() + # 既存サマリーにマージ(過去セッションの記録を保持) + ltm.append_conversation_summary(user_id, final_summary) + logger.info(f"[LTM] セッション終了サマリー追記成功: user_id={user_id}") + except Exception as e: + logger.error(f"[LTM] サマリー保存エラー: {e}") + + logger.info(f"[LTM] セッション終了: {session_id}") + + return jsonify({ + 'summary': final_summary, + 'session_id': session_id + }) + + except Exception as e: + logger.error(f"[API] 完了処理エラー: {e}") + return jsonify({'error': str(e)}), 500 + + +@app.route('/api/cancel', methods=['POST', 'OPTIONS']) +def cancel_processing(): + """処理中止""" + if request.method == 'OPTIONS': + return '', 204 + + try: + data = request.json + session_id = data.get('session_id') + + if not session_id: + return jsonify({'error': 'session_idが必要です'}), 400 + + logger.info(f"[API] 処理中止リクエスト: {session_id}") + + # セッションのステータスを更新 + session = SupportSession(session_id) + session_data = session.get_data() + + if session_data: + session.update_status('cancelled') + + return jsonify({ + 'success': True, + 'message': '処理を中止しました' + }) + + except Exception as e: + logger.error(f"[API] 中止処理エラー: {e}") + return jsonify({'error': str(e)}), 500 + + +@app.route('/api/tts/synthesize', methods=['POST', 'OPTIONS']) +def synthesize_speech(): + """ + 音声合成 - Audio2Expression対応版 + + session_id が指定された場合、Audio2Expressionサービスにも音声を送信 + """ + if request.method == 'OPTIONS': + return '', 204 + + try: + data = request.json + text = data.get('text', '') + language_code = data.get('language_code', 'ja-JP') + voice_name = data.get('voice_name', 'ja-JP-Chirp3-HD-Leda') + speaking_rate = data.get('speaking_rate', 1.0) + pitch = data.get('pitch', 0.0) + session_id = data.get('session_id', '') # ★追加: リップシンク用セッションID + + if not text: + return jsonify({'success': False, 'error': 'テキストが必要です'}), 400 + + MAX_CHARS = 1000 + if len(text) > MAX_CHARS: + logger.warning(f"[TTS] テキストが長すぎるため切り詰めます: {len(text)} → {MAX_CHARS} 文字") + text = text[:MAX_CHARS] + '...' + + logger.info(f"[TTS] 合成開始: {len(text)} 文字, session_id={session_id}") + + synthesis_input = texttospeech.SynthesisInput(text=text) + + try: + voice = texttospeech.VoiceSelectionParams( + language_code=language_code, + name=voice_name + ) + except Exception as voice_error: + logger.warning(f"[TTS] 指定音声が無効、デフォルトに変更: {voice_error}") + voice = texttospeech.VoiceSelectionParams( + language_code=language_code, + name='ja-JP-Neural2-B' + ) + + # ★ MP3形式(フロントエンド再生用) + audio_config_mp3 = texttospeech.AudioConfig( + audio_encoding=texttospeech.AudioEncoding.MP3, + speaking_rate=speaking_rate, + pitch=pitch + ) + + response_mp3 = tts_client.synthesize_speech( + input=synthesis_input, + voice=voice, + audio_config=audio_config_mp3 + ) + + audio_base64 = base64.b64encode(response_mp3.audio_content).decode('utf-8') + logger.info(f"[TTS] MP3合成成功: {len(audio_base64)} bytes (base64)") + + # ======================================== + # ★ 同期Expression生成: TTS応答にexpression同梱(遅延ゼロのリップシンク) + # min-instances=1でコールドスタート排除済み + # ======================================== + expression_data = None + if AUDIO2EXP_SERVICE_URL and session_id: + try: + exp_start = time.time() + expression_data = get_expression_frames(audio_base64, session_id, 'mp3') + exp_elapsed = time.time() - exp_start + frame_count = len(expression_data.get('frames', [])) if expression_data else 0 + logger.info(f"[Audio2Exp] 同期生成完了: {exp_elapsed:.2f}秒, {frame_count}フレーム") + except Exception as e: + logger.warning(f"[Audio2Exp] 同期生成エラー: {e}") + + result = { + 'success': True, + 'audio': audio_base64 + } + if expression_data: + result['expression'] = expression_data + + return jsonify(result) + + except Exception as e: + logger.error(f"[TTS] エラー: {e}", exc_info=True) + return jsonify({ + 'success': False, + 'error': str(e) + }), 500 + + +@app.route('/api/stt/transcribe', methods=['POST', 'OPTIONS']) +def transcribe_audio(): + """音声認識""" + if request.method == 'OPTIONS': + return '', 204 + + try: + data = request.json + audio_base64 = data.get('audio', '') + language_code = data.get('language_code', 'ja-JP') + + if not audio_base64: + return jsonify({'success': False, 'error': '音声データが必要です'}), 400 + + logger.info(f"[STT] 認識開始: {len(audio_base64)} bytes (base64)") + + audio_content = base64.b64decode(audio_base64) + audio = speech.RecognitionAudio(content=audio_content) + + config = speech.RecognitionConfig( + encoding=speech.RecognitionConfig.AudioEncoding.WEBM_OPUS, + sample_rate_hertz=48000, + language_code=language_code, + enable_automatic_punctuation=True, + model='default' + ) + + response = stt_client.recognize(config=config, audio=audio) + + transcript = '' + if response.results: + transcript = response.results[0].alternatives[0].transcript + confidence = response.results[0].alternatives[0].confidence + logger.info(f"[STT] 認識成功: '{transcript}' (信頼度: {confidence:.2f})") + else: + logger.warning("[STT] 音声が認識されませんでした") + + return jsonify({ + 'success': True, + 'transcript': transcript + }) + + except Exception as e: + logger.error(f"[STT] エラー: {e}", exc_info=True) + return jsonify({ + 'success': False, + 'error': str(e) + }), 500 + + +@app.route('/api/stt/stream', methods=['POST', 'OPTIONS']) +def transcribe_audio_streaming(): + """音声認識 (Streaming)""" + if request.method == 'OPTIONS': + return '', 204 + + try: + data = request.json + audio_base64 = data.get('audio', '') + language_code = data.get('language_code', 'ja-JP') + + if not audio_base64: + return jsonify({'success': False, 'error': '音声データが必要です'}), 400 + + logger.info(f"[STT Streaming] 認識開始: {len(audio_base64)} bytes (base64)") + + audio_content = base64.b64decode(audio_base64) + + recognition_config = speech.RecognitionConfig( + encoding=speech.RecognitionConfig.AudioEncoding.WEBM_OPUS, + sample_rate_hertz=48000, + language_code=language_code, + enable_automatic_punctuation=True, + model='default' + ) + + streaming_config = speech.StreamingRecognitionConfig( + config=recognition_config, + interim_results=False, + single_utterance=True + ) + + CHUNK_SIZE = 1024 * 16 + + def audio_generator(): + for i in range(0, len(audio_content), CHUNK_SIZE): + chunk = audio_content[i:i + CHUNK_SIZE] + yield speech.StreamingRecognizeRequest(audio_content=chunk) + + responses = stt_client.streaming_recognize(streaming_config, audio_generator()) + + transcript = '' + confidence = 0.0 + + for response in responses: + if not response.results: + continue + + for result in response.results: + if result.is_final and result.alternatives: + transcript = result.alternatives[0].transcript + confidence = result.alternatives[0].confidence + logger.info(f"[STT Streaming] 認識成功: '{transcript}' (信頼度: {confidence:.2f})") + break + + if transcript: + break + + if not transcript: + logger.warning("[STT Streaming] 音声が認識されませんでした") + + return jsonify({ + 'success': True, + 'transcript': transcript, + 'confidence': confidence + }) + + except Exception as e: + logger.error(f"[STT Streaming] エラー: {e}", exc_info=True) + return jsonify({ + 'success': False, + 'error': str(e) + }), 500 + + +@app.route('/api/session/', methods=['GET', 'OPTIONS']) +def get_session(session_id): + """セッション情報取得""" + if request.method == 'OPTIONS': + return '', 204 + + try: + session = SupportSession(session_id) + data = session.get_data() + + if not data: + return jsonify({'error': 'セッションが見つかりません'}), 404 + + return jsonify(data) + + except Exception as e: + logger.error(f"[API] セッション取得エラー: {e}") + return jsonify({'error': str(e)}), 500 + + +@app.route('/health', methods=['GET', 'OPTIONS']) +def health_check(): + """ヘルスチェック""" + if request.method == 'OPTIONS': + return '', 204 + + return jsonify({ + 'status': 'healthy', + 'timestamp': datetime.now().isoformat(), + 'services': { + 'gemini': 'ok', + 'ram_session': 'ok', + 'tts': 'ok', + 'stt': 'ok', + 'places_api': 'ok' if GOOGLE_PLACES_API_KEY else 'not configured', + 'audio2exp': 'ok' if AUDIO2EXP_SERVICE_URL else 'not configured' + } + }) + + +# ======================================== +# WebSocket Streaming STT +# ======================================== + +active_streams = {} + +@socketio.on('connect') +def handle_connect(): + logger.info(f"[WebSocket STT] クライアント接続: {request.sid}") + emit('connected', {'status': 'ready'}) + +@socketio.on('disconnect') +def handle_disconnect(): + logger.info(f"[WebSocket STT] クライアント切断: {request.sid}") + if request.sid in active_streams: + stream_data = active_streams[request.sid] + if 'stop_event' in stream_data: + stream_data['stop_event'].set() + del active_streams[request.sid] + +@socketio.on('start_stream') +def handle_start_stream(data): + language_code = data.get('language_code', 'ja-JP') + sample_rate = data.get('sample_rate', 16000) # フロントエンドから受け取る + client_sid = request.sid + logger.info(f"[WebSocket STT] ストリーム開始: {client_sid}, 言語: {language_code}, サンプルレート: {sample_rate}Hz") + + recognition_config = speech.RecognitionConfig( + encoding=speech.RecognitionConfig.AudioEncoding.LINEAR16, + sample_rate_hertz=sample_rate, # 動的に設定 + language_code=language_code, + enable_automatic_punctuation=True, + model='latest_long' # より高精度なモデルに変更 + ) + + streaming_config = speech.StreamingRecognitionConfig( + config=recognition_config, + interim_results=True, + single_utterance=False + ) + + audio_queue = queue.Queue() + stop_event = threading.Event() + + active_streams[client_sid] = { + 'audio_queue': audio_queue, + 'stop_event': stop_event, + 'streaming_config': streaming_config + } + + def audio_generator(): + while not stop_event.is_set(): + try: + chunk = audio_queue.get(timeout=0.5) + if chunk is None: + break + yield speech.StreamingRecognizeRequest(audio_content=chunk) + except queue.Empty: + continue + + def recognition_thread(): + try: + logger.info(f"[WebSocket STT] 認識スレッド開始: {client_sid}") + responses = stt_client.streaming_recognize(streaming_config, audio_generator()) + + for response in responses: + if stop_event.is_set(): + break + + if not response.results: + continue + + result = response.results[0] + + if result.alternatives: + transcript = result.alternatives[0].transcript + confidence = result.alternatives[0].confidence if result.is_final else 0.0 + + socketio.emit('transcript', { + 'text': transcript, + 'is_final': result.is_final, + 'confidence': confidence + }, room=client_sid) + + if result.is_final: + logger.info(f"[WebSocket STT] 最終認識: '{transcript}' (信頼度: {confidence:.2f})") + else: + logger.debug(f"[WebSocket STT] 途中認識: '{transcript}'") + + except Exception as e: + logger.error(f"[WebSocket STT] 認識エラー: {e}", exc_info=True) + socketio.emit('error', {'message': str(e)}, room=client_sid) + + thread = threading.Thread(target=recognition_thread, daemon=True) + thread.start() + + emit('stream_started', {'status': 'streaming'}) + +@socketio.on('audio_chunk') +def handle_audio_chunk(data): + if request.sid not in active_streams: + logger.warning(f"[WebSocket STT] 未初期化のストリーム: {request.sid}") + return + + try: + chunk_base64 = data.get('chunk', '') + if not chunk_base64: + return + + # ★★★ sample_rateを取得(16kHzで受信) ★★★ + sample_rate = data.get('sample_rate', 16000) + + # ★★★ 統計情報を取得してログ出力(必ず出力) ★★★ + stats = data.get('stats') + logger.info(f"[audio_chunk受信] sample_rate: {sample_rate}Hz, stats: {stats}") + + if stats: + logger.info(f"[AudioWorklet統計] サンプルレート: {sample_rate}Hz, " + f"サンプル総数: {stats.get('totalSamples')}, " + f"送信チャンク数: {stats.get('chunksSent')}, " + f"空入力回数: {stats.get('emptyInputCount')}, " + f"process呼び出し回数: {stats.get('processCalls')}, " + f"オーバーフロー回数: {stats.get('overflowCount', 0)}") # ★ オーバーフロー追加 + + audio_chunk = base64.b64decode(chunk_base64) + + # ★★★ 16kHzそのままGoogle STTに送る ★★★ + stream_data = active_streams[request.sid] + stream_data['audio_queue'].put(audio_chunk) + + except Exception as e: + logger.error(f"[WebSocket STT] チャンク処理エラー: {e}", exc_info=True) + +@socketio.on('stop_stream') +def handle_stop_stream(): + logger.info(f"[WebSocket STT] ストリーム停止: {request.sid}") + + if request.sid in active_streams: + stream_data = active_streams[request.sid] + stream_data['audio_queue'].put(None) + stream_data['stop_event'].set() + del active_streams[request.sid] + + emit('stream_stopped', {'status': 'stopped'}) + + +if __name__ == '__main__': + port = int(os.getenv('PORT', 8080)) + socketio.run(app, host='0.0.0.0', port=port, debug=False) diff --git a/audio2exp-service/integration/gourmet_support_integration.py b/audio2exp-service/integration/gourmet_support_integration.py new file mode 100644 index 0000000..58b9a6c --- /dev/null +++ b/audio2exp-service/integration/gourmet_support_integration.py @@ -0,0 +1,129 @@ +""" +gourmet-support 連携用コード + +このファイルを gourmet-support バックエンドに追加し、 +TTS処理後に audio2exp-service へ音声を転送します。 + +使用方法: + 1. このファイルを gourmet-support/app/ にコピー + 2. TTS処理部分で send_audio_to_expression() を呼び出し +""" + +import asyncio +import aiohttp +import os +from typing import Optional + +# Audio2Expression Service URL (環境変数で設定) +AUDIO2EXP_SERVICE_URL = os.getenv( + "AUDIO2EXP_SERVICE_URL", + "https://audio2exp-service-xxxxx-an.a.run.app" # Cloud Run URL +) + + +async def send_audio_to_expression( + audio_base64: str, + session_id: str, + is_final: bool = False +) -> Optional[dict]: + """ + TTS音声を Audio2Expression サービスに送信 + + Args: + audio_base64: Base64エンコードされた音声データ (PCM 16-bit, サンプルレート任意) + session_id: セッションID (WebSocket接続と紐付け) + is_final: 音声ストリームの最終チャンクかどうか + + Returns: + 表情データ (成功時) または None (失敗時) + + Usage: + # TTS処理後 + tts_audio_base64 = synthesize_tts(text) + await send_audio_to_expression(tts_audio_base64, session_id) + """ + if not AUDIO2EXP_SERVICE_URL: + return None + + try: + async with aiohttp.ClientSession() as session: + async with session.post( + f"{AUDIO2EXP_SERVICE_URL}/api/audio2expression", + json={ + "audio_base64": audio_base64, + "session_id": session_id, + "is_final": is_final + }, + timeout=aiohttp.ClientTimeout(total=10) + ) as response: + if response.status == 200: + return await response.json() + else: + print(f"[Audio2Exp] Error: {response.status}") + return None + except Exception as e: + print(f"[Audio2Exp] Request failed: {e}") + return None + + +def send_audio_to_expression_sync( + audio_base64: str, + session_id: str, + is_final: bool = False +) -> Optional[dict]: + """ + 同期版: TTS音声を Audio2Expression サービスに送信 + """ + import requests + + if not AUDIO2EXP_SERVICE_URL: + return None + + try: + response = requests.post( + f"{AUDIO2EXP_SERVICE_URL}/api/audio2expression", + json={ + "audio_base64": audio_base64, + "session_id": session_id, + "is_final": is_final + }, + timeout=10 + ) + if response.status_code == 200: + return response.json() + else: + print(f"[Audio2Exp] Error: {response.status_code}") + return None + except Exception as e: + print(f"[Audio2Exp] Request failed: {e}") + return None + + +# ============================================ +# 既存の TTS 処理への組み込み例 +# ============================================ +# +# Before (既存コード): +# ```python +# @app.post("/api/tts/synthesize") +# async def synthesize_tts(request: TTSRequest): +# audio_base64 = await gcp_tts_synthesize(request.text) +# return {"success": True, "audio": audio_base64} +# ``` +# +# After (変更後): +# ```python +# from gourmet_support_integration import send_audio_to_expression +# +# @app.post("/api/tts/synthesize") +# async def synthesize_tts(request: TTSRequest): +# audio_base64 = await gcp_tts_synthesize(request.text) +# +# # Audio2Expression に送信 (非同期、レスポンスを待たない) +# if request.session_id: +# asyncio.create_task( +# send_audio_to_expression(audio_base64, request.session_id) +# ) +# +# return {"success": True, "audio": audio_base64} +# ``` diff --git a/audio2exp-service/integration/gourmet_support_patch.py b/audio2exp-service/integration/gourmet_support_patch.py new file mode 100644 index 0000000..ef60569 --- /dev/null +++ b/audio2exp-service/integration/gourmet_support_patch.py @@ -0,0 +1,198 @@ +""" +gourmet-support TTS エンドポイント修正パッチ + +app_customer_support.py の synthesize_speech() 関数を以下のように修正してください。 + +【変更点】 +1. session_id パラメータを追加 +2. LINEAR16形式でも音声生成(Audio2Expression用) +3. audio2exp-service への非同期送信を追加 +""" + +# ============================================ +# 追加するインポート (ファイル先頭に追加) +# ============================================ +""" +import asyncio +import aiohttp +import os + +AUDIO2EXP_SERVICE_URL = os.getenv("AUDIO2EXP_SERVICE_URL", "") +""" + +# ============================================ +# 追加する関数 (ファイル内に追加) +# ============================================ +""" +async def send_to_audio2exp_async(audio_base64_pcm: str, session_id: str): + '''Audio2Expression サービスに非同期で音声を送信''' + if not AUDIO2EXP_SERVICE_URL or not session_id: + return + + try: + async with aiohttp.ClientSession() as session: + await session.post( + f"{AUDIO2EXP_SERVICE_URL}/api/audio2expression", + json={ + "audio_base64": audio_base64_pcm, + "session_id": session_id, + "is_final": True + }, + timeout=aiohttp.ClientTimeout(total=10) + ) + logger.info(f"[Audio2Exp] 送信成功: session={session_id}") + except Exception as e: + logger.warning(f"[Audio2Exp] 送信失敗: {e}") + + +def send_to_audio2exp(audio_base64_pcm: str, session_id: str): + '''Audio2Expression サービスに音声を送信(同期ラッパー)''' + if not AUDIO2EXP_SERVICE_URL or not session_id: + return + + try: + # 新しいイベントループで非同期実行 + loop = asyncio.new_event_loop() + asyncio.set_event_loop(loop) + loop.run_until_complete(send_to_audio2exp_async(audio_base64_pcm, session_id)) + loop.close() + except Exception as e: + logger.warning(f"[Audio2Exp] 送信失敗: {e}") +""" + +# ============================================ +# synthesize_speech() 関数の修正版 +# ============================================ +MODIFIED_SYNTHESIZE_SPEECH = ''' +@app.route('/api/tts/synthesize', methods=['POST', 'OPTIONS']) +def synthesize_speech(): + """音声合成 - Audio2Expression対応版""" + if request.method == 'OPTIONS': + return '', 204 + + try: + data = request.json + text = data.get('text', '') + language_code = data.get('language_code', 'ja-JP') + voice_name = data.get('voice_name', 'ja-JP-Chirp3-HD-Leda') + speaking_rate = data.get('speaking_rate', 1.0) + pitch = data.get('pitch', 0.0) + session_id = data.get('session_id', '') # ★追加: セッションID + + if not text: + return jsonify({'success': False, 'error': 'テキストが必要です'}), 400 + + MAX_CHARS = 1000 + if len(text) > MAX_CHARS: + logger.warning(f"[TTS] テキストが長すぎるため切り詰めます: {len(text)} → {MAX_CHARS} 文字") + text = text[:MAX_CHARS] + '...' + + logger.info(f"[TTS] 合成開始: {len(text)} 文字") + + synthesis_input = texttospeech.SynthesisInput(text=text) + + try: + voice = texttospeech.VoiceSelectionParams( + language_code=language_code, + name=voice_name + ) + except Exception as voice_error: + logger.warning(f"[TTS] 指定音声が無効、デフォルトに変更: {voice_error}") + voice = texttospeech.VoiceSelectionParams( + language_code=language_code, + name='ja-JP-Neural2-B' + ) + + # ★ MP3形式(フロントエンド再生用) + audio_config_mp3 = texttospeech.AudioConfig( + audio_encoding=texttospeech.AudioEncoding.MP3, + speaking_rate=speaking_rate, + pitch=pitch + ) + + response_mp3 = tts_client.synthesize_speech( + input=synthesis_input, + voice=voice, + audio_config=audio_config_mp3 + ) + + audio_base64 = base64.b64encode(response_mp3.audio_content).decode('utf-8') + logger.info(f"[TTS] MP3合成成功: {len(audio_base64)} bytes (base64)") + + # ★ Audio2Expression用にLINEAR16形式も生成して送信 + if AUDIO2EXP_SERVICE_URL and session_id: + try: + audio_config_pcm = texttospeech.AudioConfig( + audio_encoding=texttospeech.AudioEncoding.LINEAR16, + sample_rate_hertz=16000, + speaking_rate=speaking_rate, + pitch=pitch + ) + + response_pcm = tts_client.synthesize_speech( + input=synthesis_input, + voice=voice, + audio_config=audio_config_pcm + ) + + audio_base64_pcm = base64.b64encode(response_pcm.audio_content).decode('utf-8') + + # 非同期で送信(レスポンスを待たない) + import threading + thread = threading.Thread( + target=send_to_audio2exp, + args=(audio_base64_pcm, session_id) + ) + thread.start() + + logger.info(f"[TTS] Audio2Exp送信開始: session={session_id}") + except Exception as e: + logger.warning(f"[TTS] Audio2Exp送信準備エラー: {e}") + + return jsonify({ + 'success': True, + 'audio': audio_base64 + }) + + except Exception as e: + logger.error(f"[TTS] エラー: {e}", exc_info=True) + return jsonify({'success': False, 'error': str(e)}), 500 +''' + +# ============================================ +# フロントエンド側の変更 (core-controller.ts) +# ============================================ +FRONTEND_CHANGE = ''' +// TTS呼び出し時に session_id を追加 + +// Before: +const response = await fetch(`${this.apiBase}/api/tts/synthesize`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + text: cleanText, + language_code: langConfig.tts, + voice_name: langConfig.voice + }) +}); + +// After: +const response = await fetch(`${this.apiBase}/api/tts/synthesize`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + text: cleanText, + language_code: langConfig.tts, + voice_name: langConfig.voice, + session_id: this.sessionId // ★追加 + }) +}); +''' + +if __name__ == "__main__": + print("=== gourmet-support TTS 修正パッチ ===") + print("\n1. インポート追加") + print("2. send_to_audio2exp 関数追加") + print("3. synthesize_speech() 関数を修正版に置換") + print("4. フロントエンド (core-controller.ts) に session_id 追加") + print("\n詳細はこのファイルを参照してください。") diff --git a/audio2exp-service/requirements.txt b/audio2exp-service/requirements.txt new file mode 100644 index 0000000..18dad79 --- /dev/null +++ b/audio2exp-service/requirements.txt @@ -0,0 +1,18 @@ +fastapi>=0.100.0 +uvicorn>=0.23.0 +websockets>=11.0 +numpy<2 +pydantic>=2.0.0 + +# Audio processing +pydub>=0.25.0 + +# For Audio2Expression (CPU mode) +torch>=2.0.0 +torchaudio>=2.0.0 +transformers==4.36.2 +librosa>=0.10.0 +omegaconf>=2.3.0 +addict>=2.4.0 +yapf +termcolor diff --git a/audio2exp-service/run_local.sh b/audio2exp-service/run_local.sh new file mode 100755 index 0000000..75e80b6 --- /dev/null +++ b/audio2exp-service/run_local.sh @@ -0,0 +1,43 @@ +#!/bin/bash +# Local run script for audio2exp-service with real LAM Audio2Expression model +# This script sets up the correct paths for the OpenAvatarChat models + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" + +# Set environment variables for model paths +export LAM_A2E_PATH="$PROJECT_ROOT/OpenAvatarChat/src/handlers/avatar/lam/LAM_Audio2Expression" +export LAM_WEIGHT_PATH="$PROJECT_ROOT/OpenAvatarChat/models/LAM_audio2exp/pretrained_models/lam_audio2exp_streaming.tar" +export WAV2VEC_PATH="$PROJECT_ROOT/OpenAvatarChat/models/wav2vec2-base-960h" + +echo "========================================" +echo "Audio2Expression Service - Local Mode" +echo "========================================" +echo "LAM_A2E_PATH: $LAM_A2E_PATH" +echo "LAM_WEIGHT_PATH: $LAM_WEIGHT_PATH" +echo "WAV2VEC_PATH: $WAV2VEC_PATH" +echo "========================================" + +# Check if paths exist +if [ ! -d "$LAM_A2E_PATH" ]; then + echo "ERROR: LAM_Audio2Expression not found at $LAM_A2E_PATH" + echo "Run: cd $PROJECT_ROOT/OpenAvatarChat && git submodule update --init src/handlers/avatar/lam/LAM_Audio2Expression" + exit 1 +fi + +if [ ! -f "$LAM_WEIGHT_PATH" ]; then + echo "ERROR: Model weights not found at $LAM_WEIGHT_PATH" + echo "Run: wget https://virutalbuy-public.oss-cn-hangzhou.aliyuncs.com/share/aigc3d/data/LAM/LAM_audio2exp_streaming.tar -P $PROJECT_ROOT/OpenAvatarChat/models/LAM_audio2exp/" + echo " tar -xzvf $PROJECT_ROOT/OpenAvatarChat/models/LAM_audio2exp/LAM_audio2exp_streaming.tar -C $PROJECT_ROOT/OpenAvatarChat/models/LAM_audio2exp" + exit 1 +fi + +if [ ! -d "$WAV2VEC_PATH" ]; then + echo "ERROR: wav2vec2 model not found at $WAV2VEC_PATH" + echo "Run: git clone --depth 1 https://www.modelscope.cn/AI-ModelScope/wav2vec2-base-960h.git $WAV2VEC_PATH" + exit 1 +fi + +# Run the service +cd "$SCRIPT_DIR" +python app.py --host 0.0.0.0 --port 8283 diff --git a/audio2exp-service/start.sh b/audio2exp-service/start.sh new file mode 100644 index 0000000..183ad83 --- /dev/null +++ b/audio2exp-service/start.sh @@ -0,0 +1,8 @@ +#!/bin/bash +set -e + +echo "[Startup] Starting Audio2Expression service..." +echo "[Startup] Checking FUSE mount contents:" +ls -l /mnt/models/audio2exp/ || echo "[Startup] WARNING: FUSE mount not available" + +exec uvicorn app:app --host 0.0.0.0 --port ${PORT:-8080} --workers 1 diff --git a/audio2exp-service/test_client.py b/audio2exp-service/test_client.py new file mode 100644 index 0000000..b29b79e --- /dev/null +++ b/audio2exp-service/test_client.py @@ -0,0 +1,163 @@ +""" +Test client for Audio2Expression Service + +Usage: + # Test with audio file + python test_client.py --audio test.wav + + # Test with generated sine wave + python test_client.py --generate + + # Test WebSocket connection + python test_client.py --websocket --session test-session +""" + +import argparse +import asyncio +import base64 +import json +import numpy as np +import requests +import websockets + + +def generate_test_audio(duration: float = 1.0, sample_rate: int = 16000) -> bytes: + """Generate test audio (sine wave with varying amplitude)""" + t = np.linspace(0, duration, int(sample_rate * duration)) + # Varying amplitude to simulate speech + amplitude = 0.5 * (1 + np.sin(2 * np.pi * 2 * t)) # 2Hz modulation + audio = (amplitude * np.sin(2 * np.pi * 440 * t) * 32767).astype(np.int16) + return audio.tobytes() + + +def load_audio_file(path: str) -> bytes: + """Load audio file and convert to PCM 16-bit""" + try: + import librosa + audio, sr = librosa.load(path, sr=16000) + audio_int16 = (audio * 32767).astype(np.int16) + return audio_int16.tobytes() + except ImportError: + print("librosa not installed, using wave module") + import wave + with wave.open(path, 'rb') as wf: + return wf.readframes(wf.getnframes()) + + +def test_rest_api(host: str, audio_bytes: bytes, session_id: str): + """Test REST API endpoint""" + print(f"\n=== Testing REST API: {host}/api/audio2expression ===") + + audio_base64 = base64.b64encode(audio_bytes).decode('utf-8') + + response = requests.post( + f"{host}/api/audio2expression", + json={ + "audio_base64": audio_base64, + "session_id": session_id, + "is_final": True + } + ) + + if response.status_code == 200: + data = response.json() + print(f"✅ Success!") + print(f" Session ID: {data['session_id']}") + print(f" Channels: {len(data['channels'])} (52 expected)") + print(f" Frames: {len(data['weights'])}") + if data['weights']: + # Show some key channels + channels = data['channels'] + weights = data['weights'][0] + jaw_open_idx = channels.index('jawOpen') if 'jawOpen' in channels else -1 + if jaw_open_idx >= 0: + print(f" jawOpen: {weights[jaw_open_idx]:.4f}") + else: + print(f"❌ Error: {response.status_code}") + print(f" {response.text}") + + +async def test_websocket(host: str, session_id: str, audio_bytes: bytes): + """Test WebSocket endpoint""" + ws_url = host.replace("http://", "ws://").replace("https://", "wss://") + ws_url = f"{ws_url}/ws/{session_id}" + + print(f"\n=== Testing WebSocket: {ws_url} ===") + + try: + async with websockets.connect(ws_url) as ws: + print("✅ Connected!") + + # Send audio data + audio_base64 = base64.b64encode(audio_bytes).decode('utf-8') + await ws.send(json.dumps({ + "type": "audio", + "audio": audio_base64, + "is_final": True + })) + print(" Sent audio data") + + # Receive expression data + try: + response = await asyncio.wait_for(ws.recv(), timeout=5.0) + data = json.loads(response) + print(f" Received: {data['type']}") + if data['type'] == 'expression': + print(f" Channels: {len(data['channels'])}") + print(f" Frames: {len(data['weights'])}") + except asyncio.TimeoutError: + print(" ⚠️ No response (timeout)") + + except Exception as e: + print(f"❌ Connection failed: {e}") + + +def test_health(host: str): + """Test health endpoint""" + print(f"\n=== Testing Health: {host}/health ===") + try: + response = requests.get(f"{host}/health") + data = response.json() + print(f"✅ Status: {data['status']}") + print(f" Mode: {data['mode']}") + print(f" Initialized: {data['initialized']}") + except Exception as e: + print(f"❌ Error: {e}") + + +def main(): + parser = argparse.ArgumentParser(description="Test Audio2Expression Service") + parser.add_argument("--host", default="http://localhost:8283", help="Service URL") + parser.add_argument("--audio", help="Path to audio file (WAV)") + parser.add_argument("--generate", action="store_true", help="Generate test audio") + parser.add_argument("--websocket", action="store_true", help="Test WebSocket") + parser.add_argument("--session", default="test-session", help="Session ID") + parser.add_argument("--health", action="store_true", help="Test health endpoint only") + args = parser.parse_args() + + # Health check + test_health(args.host) + + if args.health: + return + + # Prepare audio + if args.audio: + print(f"\nLoading audio from: {args.audio}") + audio_bytes = load_audio_file(args.audio) + else: + print("\nGenerating test audio (1 second sine wave)") + audio_bytes = generate_test_audio(1.0) + + print(f"Audio size: {len(audio_bytes)} bytes") + + # Test REST API + test_rest_api(args.host, audio_bytes, args.session) + + # Test WebSocket + if args.websocket: + asyncio.run(test_websocket(args.host, args.session, audio_bytes)) + + +if __name__ == "__main__": + main() diff --git a/gourmet-sp/README.md b/gourmet-sp/README.md new file mode 100644 index 0000000..dcc0e23 --- /dev/null +++ b/gourmet-sp/README.md @@ -0,0 +1,236 @@ +# Gourmet Support AI - LAM 3D Avatar Integration + +このディレクトリは、グルメサポートAIのコンシェルジュモードに LAM (Large Avatar Model) 3Dアバターを統合するためのテスト環境です。 + +## セットアップ手順 + +### 1. ローカル環境にコピー + +このディレクトリの `src/` と `public/` を、ローカルの gourmet-sp プロジェクトにコピーしてください。 + +```bash +# ローカルのgourmet-spディレクトリで実行 +cp -r /path/to/LAM_gpro/gourmet-sp/src ./ +cp -r /path/to/LAM_gpro/gourmet-sp/public ./ +``` + +### 2. NPMパッケージのインストール + +LAM WebGL レンダラーをインストール: + +```bash +npm install gaussian-splat-renderer-for-lam +``` + +### 3. アバターファイルの配置 + +LAMで生成した3Dアバター(.zipファイル)を配置: + +```bash +mkdir -p public/avatar +cp /path/to/your-avatar.zip public/avatar/concierge.zip +``` + +### 4. 開発サーバーの起動 + +```bash +npm run dev +# http://localhost:4321/concierge でアクセス +``` + +## コンポーネント構成 + +``` +src/ +├── components/ +│ ├── Concierge.astro # メインコンシェルジュUI(LAM統合済み) +│ └── LAMAvatar.astro # LAM 3Dアバターコンポーネント +└── pages/ + └── concierge.astro # コンシェルジュページ +``` + +## LAMAvatar コンポーネントの使い方 + +```astro +--- +import LAMAvatar from '../components/LAMAvatar.astro'; +--- + + +``` + +### Props + +| Prop | Type | Default | Description | +|------|------|---------|-------------| +| `avatarPath` | string | `/avatar/concierge.zip` | アバター.zipファイルのパス | +| `width` | string | `100%` | コンテナの幅 | +| `height` | string | `100%` | コンテナの高さ | +| `wsUrl` | string | `''` | OpenAvatarChat WebSocket URL | +| `autoConnect` | boolean | `false` | 自動WebSocket接続 | + +### JavaScript API + +```javascript +// グローバルにアクセス可能 +const controller = window.lamAvatarController; + +// 状態を設定(Idle, Listening, Thinking, Responding) +controller.setChatState('Responding'); + +// 表情データを設定(Audio2Expressionの出力) +controller.setExpressionData({ + 'jawOpen': 0.5, + 'mouthSmile_L': 0.3, + 'mouthSmile_R': 0.3, + // ... 他のARKitブレンドシェイプ +}); + +// Audio2Expressionフレームから更新 +controller.updateFromAudio2Expression({ + names: ['jawOpen', 'mouthSmile_L', ...], + weights: [0.5, 0.3, ...] +}); +``` + +## Concierge コンポーネントの設定 + +```astro +--- +import ConciergeComponent from '../components/Concierge.astro'; +--- + + + + + + +``` + +## 3Dアバターの生成方法 + +1. **コンシェルジュ画像を用意** + - 正面向きの顔写真 + - 高解像度推奨(512x512以上) + +2. **LAMで3Dアバターを生成**(GPU環境が必要) + ```bash + cd /path/to/LAM_gpro + python app_lam.py + # Gradio UIで画像をアップロード + # ZIPファイルをエクスポート + ``` + +3. **生成されたZIPを配置** + ```bash + cp generated_avatar.zip public/avatar/concierge.zip + ``` + +## OpenAvatarChat WebSocket 連携(リップシンク) + +OpenAvatarChatバックエンドとWebSocketで接続して、リアルタイムリップシンクを実現します。 + +### 接続方法 + +```astro + + +``` + +```javascript +// または、JavaScriptから手動接続 +const controller = window.lamAvatarController; + +// WebSocket接続 +await controller.connectWebSocket('wss://your-server:8282/ws'); + +// 接続状態の確認 +console.log('Connected:', controller.isWebSocketConnected()); + +// 切断 +controller.disconnectWebSocket(); +``` + +### イベントリスナー + +```javascript +// 接続状態の変更を監視 +document.getElementById('lamAvatarContainer').addEventListener('lamConnectionChange', (e) => { + console.log('WebSocket connected:', e.detail.connected); +}); + +// チャット状態の変更を監視 +document.getElementById('lamAvatarContainer').addEventListener('lamStateChange', (e) => { + console.log('Chat state:', e.detail.state); +}); +``` + +### データフロー + +1. **OpenAvatarChat バックエンド** がAudio2Expressionで音声を解析 +2. **JBIN形式** でARKit表情データ(52チャンネル)をWebSocket送信 +3. **LAMWebSocketManager** がバイナリをパースして表情データに変換 +4. **GaussianSplatRenderer** がリアルタイムでアバターを更新 + +### ファイル構成 + +``` +src/scripts/lam/ +└── lam-websocket-manager.ts # JBIN パーサー & WebSocket管理 +``` + +## Audio2Expression との連携(手動モード) + +WebSocketを使わずに、手動で表情データを設定する場合: + +```javascript +// バックエンドからの表情データを受信 +socket.on('expression_frame', (frame) => { + window.lamAvatarController.updateFromAudio2Expression(frame); +}); +``` + +## トラブルシューティング + +### NPMパッケージがインストールできない + +```bash +# Node.js 18以上が必要 +node --version + +# キャッシュクリア +npm cache clean --force +npm install gaussian-splat-renderer-for-lam +``` + +### 3Dアバターが表示されない + +1. ブラウザがWebGL 2.0をサポートしているか確認 +2. アバター.zipファイルのパスが正しいか確認 +3. コンソールエラーを確認 + +### フォールバック画像が表示される + +NPMパッケージがインストールされていないか、WebGLが利用できない場合、自動的に2D画像にフォールバックします。 + +## 関連リポジトリ + +- [LAM (Large Avatar Model)](https://github.com/aigc3d/LAM) - 3Dアバター生成 +- [LAM_WebRender](https://github.com/aigc3d/LAM_WebRender) - WebGLレンダラー +- [LAM_Audio2Expression](https://github.com/aigc3d/LAM_Audio2Expression) - 音声→表情変換 +- [OpenAvatarChat](https://github.com/HumanAIGC-Engineering/OpenAvatarChat) - 統合SDK diff --git a/gourmet-sp/public/TripAdvisor-logo.png b/gourmet-sp/public/TripAdvisor-logo.png new file mode 100644 index 0000000..29b4799 Binary files /dev/null and b/gourmet-sp/public/TripAdvisor-logo.png differ diff --git a/gourmet-sp/public/audio-processor.js b/gourmet-sp/public/audio-processor.js new file mode 100644 index 0000000..5265b5c --- /dev/null +++ b/gourmet-sp/public/audio-processor.js @@ -0,0 +1,55 @@ +/** + * AudioWorklet Processor for Real-time PCM Extraction + * iPhone完全最適化版 + */ + +class AudioProcessor extends AudioWorkletProcessor { + constructor() { + super(); + // ★★★ さらにバッファを小さく(遅延最小化) ★★★ + this.bufferSize = 1024; // 2048 → 1024(約0.064秒) + this.buffer = new Int16Array(this.bufferSize); + this.bufferIndex = 0; + this.sampleCount = 0; + } + + process(inputs, outputs, parameters) { + const input = inputs[0]; + + // ★★★ 入力がない場合もカウント(デバッグ用) ★★★ + if (!input || input.length === 0) { + return true; + } + + const channelData = input[0]; + if (!channelData || channelData.length === 0) { + return true; + } + + // Float32Array を Int16Array に変換 + for (let i = 0; i < channelData.length; i++) { + this.sampleCount++; + + // Float32 (-1.0 ~ 1.0) を Int16 (-32768 ~ 32767) に変換 + const s = Math.max(-1, Math.min(1, channelData[i])); + const int16Value = Math.round(s < 0 ? s * 0x8000 : s * 0x7FFF); + + // バッファに書き込み + this.buffer[this.bufferIndex++] = int16Value; + + // バッファサイズに達したら送信 + if (this.bufferIndex >= this.bufferSize) { + // ★★★ コピーではなく新しいバッファを作成 ★★★ + const chunk = new Int16Array(this.buffer); + this.port.postMessage({ audioChunk: chunk }); + + // バッファリセット + this.bufferIndex = 0; + } + } + + return true; + } +} + +registerProcessor('audio-processor', AudioProcessor); diff --git a/gourmet-sp/public/avatar/concierge.zip b/gourmet-sp/public/avatar/concierge.zip new file mode 100644 index 0000000..2ab7869 Binary files /dev/null and b/gourmet-sp/public/avatar/concierge.zip differ diff --git a/gourmet-sp/public/avatar/p2-1.zip b/gourmet-sp/public/avatar/p2-1.zip new file mode 100644 index 0000000..2ab7869 Binary files /dev/null and b/gourmet-sp/public/avatar/p2-1.zip differ diff --git a/gourmet-sp/public/avatar/test_expression_1s.json b/gourmet-sp/public/avatar/test_expression_1s.json new file mode 100644 index 0000000..d1b4a89 --- /dev/null +++ b/gourmet-sp/public/avatar/test_expression_1s.json @@ -0,0 +1,61359 @@ +{ + "names": [ + "browDownLeft", + "browDownRight", + "browInnerUp", + "browOuterUpLeft", + "browOuterUpRight", + "cheekPuff", + "cheekSquintLeft", + "cheekSquintRight", + "eyeBlinkLeft", + "eyeBlinkRight", + "eyeLookDownLeft", + "eyeLookDownRight", + "eyeLookInLeft", + "eyeLookInRight", + "eyeLookOutLeft", + "eyeLookOutRight", + "eyeLookUpLeft", + "eyeLookUpRight", + "eyeSquintLeft", + "eyeSquintRight", + "eyeWideLeft", + "eyeWideRight", + "jawForward", + "jawLeft", + "jawOpen", + "jawRight", + "mouthClose", + "mouthDimpleLeft", + "mouthDimpleRight", + "mouthFrownLeft", + "mouthFrownRight", + "mouthFunnel", + "mouthLeft", + "mouthLowerDownLeft", + "mouthLowerDownRight", + "mouthPressLeft", + "mouthPressRight", + "mouthPucker", + "mouthRight", + "mouthRollLower", + "mouthRollUpper", + "mouthShrugLower", + "mouthShrugUpper", + "mouthSmileLeft", + "mouthSmileRight", + "mouthStretchLeft", + "mouthStretchRight", + "mouthUpperUpLeft", + "mouthUpperUpRight", + "noseSneerLeft", + "noseSneerRight", + "tongueOut" + ], + "frames": [ + { + "weights": [ + 0.010217864066362381, + 0.010217864066362381, + 0.02888475, + 0.014926525, + 0.014926525, + 0.07292424887418747, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02290765792699218, + 0.05702803730964661, + 0.02290765792699218, + 0.0, + 0.25311286747455597, + 0.25311286747455597, + 0.0001734239747747779, + 0.0001734239747747779, + 0.007046175189316273, + 0.07485681399703026, + 0.4629000723361969, + 0.4629000723361969, + 0.0, + 0.0, + 0.004272985737770796, + 0.07485681399703026, + 0.0036632276605814695, + 0.07352292537689209, + 0.0, + 0.3630315661430359, + 0.425, + 0.425, + 0.02554463446140289, + 0.02554463446140289, + 0.07326992228627205, + 0.07326992228627205, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 0.0, + "rotation": [] + }, + { + "weights": [ + 0.011249640490859747, + 0.011249640490859747, + 0.02888475, + 0.014926525, + 0.014926525, + 0.07888130843639374, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.025544995354578496, + 0.04773041009902954, + 0.025544995354578496, + 0.002005907939746976, + 0.25820255279541016, + 0.25820255279541016, + 0.0001626067329198122, + 0.0001626067329198122, + 0.00803977157920599, + 0.08635301515460014, + 0.5130475163459778, + 0.5130475163459778, + 0.0, + 0.0, + 0.0031166416592895985, + 0.08635301515460014, + 0.006865739356726408, + 0.08750926703214645, + 0.0, + 0.40578410029411316, + 0.42563881874084475, + 0.42563881874084475, + 0.025129978358745576, + 0.025129978358745576, + 0.0728549174964428, + 0.0728549174964428, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 0.03333333333333333, + "rotation": [] + }, + { + "weights": [ + 0.011618887539952993, + 0.011618887539952993, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0881870910525322, + 0.0004728191124740988, + 0.0004728191124740988, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.048122525215148926, + 0.048122525215148926, + 0.05126333, + 0.02674161447779894, + 0.037953779101371765, + 0.02674161447779894, + 0.004572156351059675, + 0.26536116003990173, + 0.26536116003990173, + 0.00011064613936468959, + 0.00011064613936468959, + 0.008136077784001827, + 0.09589310362935066, + 0.5389725565910339, + 0.5389725565910339, + 0.0, + 0.0, + 0.001792917842976749, + 0.09589310362935066, + 0.009451289661228657, + 0.09596022218465805, + 0.0, + 0.4337686598300934, + 0.44055160880088806, + 0.44055160880088806, + 0.02526119202375412, + 0.02526119202375412, + 0.06805646046996117, + 0.06805646046996117, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 0.06666666666666667, + "rotation": [] + }, + { + "weights": [ + 0.011100544594228268, + 0.011100544594228268, + 0.02888475, + 0.014926525, + 0.014926525, + 0.10458646714687347, + 0.0012963976478204131, + 0.0012963976478204131, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05091848038136959, + 0.05091848038136959, + 0.05126333, + 0.026421758258805276, + 0.024901470541954043, + 0.026421758258805276, + 0.005328115541487932, + 0.2757483720779419, + 0.2757483720779419, + 7.909014675533399e-06, + 7.909014675533399e-06, + 0.006894573103636503, + 0.10433710739016533, + 0.5320389866828918, + 0.5320389866828918, + 0.0, + 0.0, + 6.93705296725966e-05, + 0.10433710739016533, + 0.01169425155967474, + 0.09834016114473343, + 0.0, + 0.44623807072639465, + 0.4705091714859009, + 0.4705091714859009, + 0.02591417282819748, + 0.02591417282819748, + 0.05696173757314682, + 0.05696173757314682, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 0.1, + "rotation": [] + }, + { + "weights": [ + 0.01044272817671299, + 0.01044272817671299, + 0.02888475, + 0.014926525, + 0.014926525, + 0.11411560326814651, + 0.0024868247855920345, + 0.0024868247855920345, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.051152804866433144, + 0.051152804866433144, + 0.05126333, + 0.02491137097226143, + 0.0187437042593956, + 0.02491137097226143, + 0.004997161217033863, + 0.28497277200222015, + 0.28497277200222015, + 0.0, + 0.0, + 0.0055251410230994225, + 0.10866756737232208, + 0.5254921615123749, + 0.5254921615123749, + 0.0, + 0.0, + 0.0, + 0.10866756737232208, + 0.012654111720621586, + 0.09657314419746399, + 0.0, + 0.4453481137752533, + 0.5018736720085144, + 0.5018736720085144, + 0.027288329601287842, + 0.027288329601287842, + 0.04651315324008465, + 0.04651315324008465, + 0.05420222500000001, + 0.05420222500000001, + 0.0006034378311596811 + ], + "time": 0.13333333333333333, + "rotation": [] + }, + { + "weights": [ + 0.010298647917807102, + 0.010298647917807102, + 0.02888475, + 0.014926525, + 0.014926525, + 0.11457867920398712, + 0.003433129983022809, + 0.003433129983022809, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05002111196517944, + 0.05002111196517944, + 0.05126333, + 0.023548359895215035, + 0.016525357961654663, + 0.023548359895215035, + 0.004269674886018038, + 0.29089392721652985, + 0.29089392721652985, + 0.0, + 0.0, + 0.00404910184442997, + 0.10958700254559517, + 0.5151052474975586, + 0.5151052474975586, + 2.213301513620536e-06, + 2.213301513620536e-06, + 0.0, + 0.10958700254559517, + 0.013254616409540176, + 0.09527437388896942, + 0.0, + 0.43486151099205017, + 0.5203955173492432, + 0.5203955173492432, + 0.02853139489889145, + 0.02853139489889145, + 0.034070489928126335, + 0.034070489928126335, + 0.05420222500000001, + 0.05420222500000001, + 0.0015510313678532839 + ], + "time": 0.16666666666666666, + "rotation": [] + }, + { + "weights": [ + 0.011020943988114595, + 0.011020943988114595, + 0.02888475, + 0.014926525, + 0.014926525, + 0.10469871014356613, + 0.0031204087426885962, + 0.0031204087426885962, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.04961617849767208, + 0.04961617849767208, + 0.05126333, + 0.02259004945503235, + 0.0179340660572052, + 0.02259004945503235, + 0.0036901477724313736, + 0.2971316874027252, + 0.2971316874027252, + 9.20079299248755e-05, + 9.20079299248755e-05, + 0.004439019598066807, + 0.10818687453866005, + 0.4775692820549011, + 0.4775692820549011, + 8.97106874617748e-05, + 8.97106874617748e-05, + 0.0, + 0.10818687453866005, + 0.014897257089614868, + 0.097531758248806, + 0.0, + 0.41941776871681213, + 0.517745167016983, + 0.517745167016983, + 0.02855086475610733, + 0.02855086475610733, + 0.01845699269324541, + 0.01845699269324541, + 0.05420222500000001, + 0.05420222500000001, + 0.0019528955454006791 + ], + "time": 0.2, + "rotation": [] + }, + { + "weights": [ + 0.01163622085005045, + 0.01163622085005045, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0796319842338562, + 0.0017290582763962448, + 0.0017290582763962448, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.04929005354642868, + 0.04929005354642868, + 0.05126333, + 0.021463900717065335, + 0.03219618797302246, + 0.021463900717065335, + 0.003126319032162428, + 0.3049660474061966, + 0.3049660474061966, + 0.00034312033094465735, + 0.00034312033094465735, + 0.0066312383860349655, + 0.10121116042137146, + 0.4046085625886917, + 0.4046085625886917, + 0.000751512823626399, + 0.000751512823626399, + 0.0028474656865000725, + 0.10121116042137146, + 0.016702886670827866, + 0.09828028827905655, + 0.00033460737904533744, + 0.40730997920036316, + 0.49276360869407654, + 0.49276360869407654, + 0.026547573506832123, + 0.026547573506832123, + 0.006801725830882788, + 0.006801725830882788, + 0.05420222500000001, + 0.05420222500000001, + 0.0012775392970070243 + ], + "time": 0.23333333333333334, + "rotation": [] + }, + { + "weights": [ + 0.012158853001892567, + 0.012158853001892567, + 0.02888475, + 0.014926525, + 0.014926525, + 0.044131238013505936, + 0.0006171895656734705, + 0.0006171895656734705, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05065108835697174, + 0.05065108835697174, + 0.05126333, + 0.02103409581454158, + 0.07135995030403137, + 0.02103409581454158, + 0.0035146058071404696, + 0.3060605376958847, + 0.3060605376958847, + 0.00035700026201084255, + 0.00035700026201084255, + 0.00830094050616026, + 0.08614736795425415, + 0.341087207198143, + 0.341087207198143, + 0.0006395131349563599, + 0.0006395131349563599, + 0.005117146763950586, + 0.08614736795425415, + 0.02198062837123871, + 0.1028519943356514, + 0.0, + 0.40888917446136475, + 0.4474384933710098, + 0.4474384933710098, + 0.023550622165203094, + 0.023550622165203094, + 0.003278148709796369, + 0.003278148709796369, + 0.05420222500000001, + 0.05420222500000001, + 0.0001701898581814021 + ], + "time": 0.26666666666666666, + "rotation": [] + }, + { + "weights": [ + 0.012928841169923544, + 0.012928841169923544, + 0.02888475, + 0.014926525, + 0.014926525, + 0.013474776409566402, + 0.00013995447079651058, + 0.00013995447079651058, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.054653508588671684, + 0.054653508588671684, + 0.05126333, + 0.023769267747268678, + 0.12901628017425537, + 0.023769267747268678, + 0.004045723006129265, + 0.30132706463336945, + 0.30132706463336945, + 0.00035972521873191, + 0.00035972521873191, + 0.007635345216840506, + 0.06376465409994125, + 0.31599920988082886, + 0.31599920988082886, + 0.0, + 0.0, + 0.00556620629504323, + 0.06376465409994125, + 0.036622632294893265, + 0.12123282998800278, + 0.0, + 0.4115146994590759, + 0.425, + 0.425, + 0.021181842684745787, + 0.021181842684745787, + 0.003564341808669269, + 0.003564341808669269, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 0.3, + "rotation": [] + }, + { + "weights": [ + 0.012931571807712317, + 0.012931571807712317, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06139224395155907, + 0.06139224395155907, + 0.05126333, + 0.031167599285111428, + 0.17017965316772463, + 0.031167599285111428, + 0.003459879197180271, + 0.3144974410533905, + 0.3144974410533905, + 0.0010826934594660997, + 0.0010826934594660997, + 0.004912173841148615, + 0.04197490029036999, + 0.2795153260231018, + 0.2795153260231018, + 0.0, + 0.0, + 0.005109257064759731, + 0.04197490029036999, + 0.06355348229408264, + 0.15798480808734894, + 0.0, + 0.37135010957717896, + 0.425, + 0.425, + 0.020314829796552657, + 0.020314829796552657, + 0.0019454952562227845, + 0.0019454952562227845, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 0.3333333333333333, + "rotation": [] + }, + { + "weights": [ + 0.010084759443998337, + 0.010084759443998337, + 0.02888475, + 0.014995943815333247, + 0.014995943815333247, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06848049536347389, + 0.06848049536347389, + 0.05126333, + 0.04511469416320324, + 0.1643766164779663, + 0.04511469416320324, + 0.0029363178182393312, + 0.36261583864688873, + 0.36261583864688873, + 0.0013527262955904007, + 0.0013527262955904007, + 0.0014250559033825994, + 0.027954853139817715, + 0.18466145545244217, + 0.18466145545244217, + 0.0, + 0.0, + 0.004575492814183235, + 0.027954853139817715, + 0.09657654166221619, + 0.18925364315509796, + 0.0027132518589496613, + 0.2634768784046173, + 0.425, + 0.425, + 0.020095065981149674, + 0.020095065981149674, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 0.36666666666666664, + "rotation": [] + }, + { + "weights": [ + 0.005547535140067339, + 0.005547535140067339, + 0.02888475, + 0.015285364412588476, + 0.015285364412588476, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07221642881631851, + 0.07221642881631851, + 0.05126333, + 0.0552915595471859, + 0.12408196926116943, + 0.0552915595471859, + 0.002209821017459035, + 0.41678957641124725, + 0.41678957641124725, + 0.0006517539266496896, + 0.0006517539266496896, + 0.0, + 0.026504253037273884, + 0.07909319922327995, + 0.07909319922327995, + 0.0, + 0.0, + 0.0047758654691278934, + 0.026504253037273884, + 0.11678916960954666, + 0.1895575374364853, + 0.011300535872578621, + 0.1445492058992386, + 0.425, + 0.425, + 0.01985742151737213, + 0.01985742151737213, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 0.4, + "rotation": [] + }, + { + "weights": [ + 0.0021030697971582413, + 0.0021030697971582413, + 0.02888475, + 0.01517836324859172, + 0.01517836324859172, + 0.005026418715715408, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07207776606082916, + 0.07207776606082916, + 0.05126333, + 0.056567342951893806, + 0.08740797638893127, + 0.056567342951893806, + 0.0017624845495447516, + 0.4236305505037308, + 0.4236305505037308, + 0.0, + 0.0, + 0.0005326243117451668, + 0.03591870702803135, + 0.035161254927515984, + 0.035161254927515984, + 0.0, + 0.0, + 0.004508562386035919, + 0.03591870702803135, + 0.10260935127735138, + 0.15260855853557587, + 0.01371168065816164, + 0.09330631792545319, + 0.425, + 0.425, + 0.01979597955942154, + 0.01979597955942154, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 0.43333333333333335, + "rotation": [] + }, + { + "weights": [ + 0.002507770201191306, + 0.002507770201191306, + 0.02888475, + 0.014926525, + 0.014926525, + 0.01315927691757679, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06672748550772667, + 0.06672748550772667, + 0.05126333, + 0.05352836288511753, + 0.07275993824005127, + 0.05352836288511753, + 0.0011119473492726684, + 0.3742446154356003, + 0.3742446154356003, + 0.0, + 0.0, + 0.0033823687117546797, + 0.049335068091750145, + 0.06471613049507141, + 0.06471613049507141, + 0.0, + 0.0, + 0.002531616482883692, + 0.049335068091750145, + 0.06145668029785156, + 0.1035790741443634, + 0.01032601110637188, + 0.13245674967765808, + 0.425, + 0.425, + 0.02013692483305931, + 0.02013692483305931, + 0.006460593082010746, + 0.006460593082010746, + 0.05420222500000001, + 0.05420222500000001, + 0.00025979167548939586 + ], + "time": 0.4666666666666667, + "rotation": [] + }, + { + "weights": [ + 0.005398449255153537, + 0.005398449255153537, + 0.02888475, + 0.014926525, + 0.014926525, + 0.02326470986008644, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.058945298194885254, + 0.058945298194885254, + 0.05126333, + 0.050284186378121376, + 0.0700285017490387, + 0.050284186378121376, + 0.0015637138858437538, + 0.30662621557712555, + 0.30662621557712555, + 3.2960128737613556e-05, + 3.2960128737613556e-05, + 0.0060929059982299805, + 0.060593144968152046, + 0.13735086470842361, + 0.13735086470842361, + 0.0, + 0.0, + 0.0, + 0.060593144968152046, + 0.025288868695497513, + 0.07035539299249649, + 0.003553057089447975, + 0.22204351425170898, + 0.425, + 0.425, + 0.020596207678318025, + 0.020596207678318025, + 0.0193928349763155, + 0.0193928349763155, + 0.05420222500000001, + 0.05420222500000001, + 0.00021087474306114018 + ], + "time": 0.5, + "rotation": [] + }, + { + "weights": [ + 0.008505250792950392, + 0.008505250792950392, + 0.02888475, + 0.014926525, + 0.014926525, + 0.03772033751010895, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.050516488030552864, + 0.050516488030552864, + 0.05126333, + 0.04616829194128513, + 0.06620563268661499, + 0.04616829194128513, + 0.0024755278136581182, + 0.2603660970926285, + 0.2603660970926285, + 0.0001407493487931788, + 0.0001407493487931788, + 0.006858352571725845, + 0.06829846650362015, + 0.22036534547805786, + 0.22036534547805786, + 0.0, + 0.0, + 0.0, + 0.06829846650362015, + 0.012058882042765617, + 0.06182071566581726, + 0.00059408851666376, + 0.3137224018573761, + 0.425, + 0.425, + 0.020874140411615373, + 0.020874140411615373, + 0.030509267933666706, + 0.030509267933666706, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 0.5333333333333333, + "rotation": [] + }, + { + "weights": [ + 0.009934688918292522, + 0.009934688918292522, + 0.02888475, + 0.014926525, + 0.014926525, + 0.05466007441282272, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.04580526016876697, + 0.04580526016876697, + 0.05126333, + 0.040341829881072044, + 0.05749688148498536, + 0.040341829881072044, + 0.003181777661666274, + 0.24133365601301193, + 0.24133365601301193, + 0.00022170018637552858, + 0.00022170018637552858, + 0.005780468229204416, + 0.07558904960751534, + 0.28691989183425903, + 0.28691989183425903, + 0.0, + 0.0, + 0.0, + 0.07558904960751534, + 0.011227844282984734, + 0.06845375150442123, + 0.0, + 0.37955018877983093, + 0.425, + 0.425, + 0.021181610971689226, + 0.021181610971689226, + 0.03579613380134106, + 0.03579613380134106, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 0.5666666666666667, + "rotation": [] + }, + { + "weights": [ + 0.010993119329214096, + 0.010993119329214096, + 0.02888475, + 0.014926525, + 0.014926525, + 0.071051225066185, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03387438031481266, + 0.04629865288734436, + 0.03387438031481266, + 0.0034702320117503405, + 0.24188383668661118, + 0.24188383668661118, + 0.00022395026753656565, + 0.00022395026753656565, + 0.004134897142648697, + 0.08308770507574081, + 0.3299359232187271, + 0.3299359232187271, + 0.0, + 0.0, + 0.0, + 0.08308770507574081, + 0.01232230756431818, + 0.07846168428659439, + 0.0, + 0.41616135835647583, + 0.425, + 0.425, + 0.02178385928273201, + 0.02178385928273201, + 0.03562057949602604, + 0.03562057949602604, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 0.6, + "rotation": [] + }, + { + "weights": [ + 0.01181231765076518, + 0.01181231765076518, + 0.02888475, + 0.014926525, + 0.014926525, + 0.08600444346666336, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.030952200206086636, + 0.03486507833003998, + 0.030952200206086636, + 0.0029366693925112486, + 0.25370578467845917, + 0.25370578467845917, + 0.00032094885827973487, + 0.00032094885827973487, + 0.003076491877436638, + 0.0912940762937069, + 0.3489060252904892, + 0.3489060252904892, + 0.0, + 0.0, + 0.0, + 0.0912940762937069, + 0.014050764963030815, + 0.08676227182149887, + 0.0, + 0.43440455198287964, + 0.425, + 0.425, + 0.023025428503751756, + 0.023025428503751756, + 0.0288443211466074, + 0.0288443211466074, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 0.6333333333333333, + "rotation": [] + }, + { + "weights": [ + 0.01272746454924345, + 0.01272746454924345, + 0.02888475, + 0.014926525, + 0.014926525, + 0.1009310856461525, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.028935247013435365, + 0.024936842918396, + 0.028935247013435365, + 0.0026376217138022184, + 0.27082447707653046, + 0.27082447707653046, + 0.0003348941565491259, + 0.0003348941565491259, + 0.0034389817155897617, + 0.09909406676888466, + 0.35025401413440704, + 0.35025401413440704, + 0.0, + 0.0, + 0.0, + 0.09909406676888466, + 0.01662633754312992, + 0.09271243959665298, + 0.0, + 0.44112133979797363, + 0.43814580142498016, + 0.43814580142498016, + 0.024950122833251952, + 0.024950122833251952, + 0.01979319006204605, + 0.01979319006204605, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 0.6666666666666666, + "rotation": [] + }, + { + "weights": [ + 0.013388404622673988, + 0.013388404622673988, + 0.02888475, + 0.014926525, + 0.014926525, + 0.11298015713691711, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02707991460906029, + 0.019135665893554688, + 0.02707991460906029, + 0.002272042678669095, + 0.2877398729324341, + 0.2877398729324341, + 0.00019431679975241424, + 0.00019431679975241424, + 0.0036831668112426996, + 0.10549444332718849, + 0.3478914350271225, + 0.3478914350271225, + 0.0, + 0.0, + 0.0, + 0.10549444332718849, + 0.018867127597332, + 0.0968589335680008, + 0.0, + 0.4422677159309387, + 0.4765673279762268, + 0.4765673279762268, + 0.027052409946918488, + 0.027052409946918488, + 0.012234954163432121, + 0.012234954163432121, + 0.05420222500000001, + 0.05420222500000001, + 0.00016106523980852216 + ], + "time": 0.7, + "rotation": [] + }, + { + "weights": [ + 0.013933476991951466, + 0.013933476991951466, + 0.02888475, + 0.014926525, + 0.014926525, + 0.11859220266342163, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02508832598672867, + 0.019138826429843905, + 0.02508832598672867, + 0.0019498252077028155, + 0.29768961668014526, + 0.29768961668014526, + 0.00011450171004980802, + 0.00011450171004980802, + 0.0035630622878670692, + 0.10928405448794365, + 0.3555721789598465, + 0.3555721789598465, + 0.0, + 0.0, + 0.0, + 0.10928405448794365, + 0.020141810178756714, + 0.09870705008506775, + 0.0, + 0.44175198674201965, + 0.49837784469127655, + 0.49837784469127655, + 0.028886181116104127, + 0.028886181116104127, + 0.007978038163855672, + 0.007978038163855672, + 0.05420222500000001, + 0.05420222500000001, + 0.0011752459686249495 + ], + "time": 0.7333333333333333, + "rotation": [] + }, + { + "weights": [ + 0.014952751342207193, + 0.014952751342207193, + 0.02888475, + 0.014926525, + 0.014926525, + 0.11369156837463379, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.023729636712089778, + 0.02399122565984726, + 0.023729636712089778, + 0.0018214109586551785, + 0.2994415909051895, + 0.2994415909051895, + 0.00016796626150608062, + 0.00016796626150608062, + 0.0030354654882103205, + 0.11078787967562675, + 0.3646850436925888, + 0.3646850436925888, + 0.0, + 0.0, + 0.0, + 0.11078787967562675, + 0.021110018715262413, + 0.10183071345090866, + 0.00015036910190247, + 0.4440504312515259, + 0.5021494030952454, + 0.5021494030952454, + 0.030157853662967683, + 0.030157853662967683, + 0.0044968645088374615, + 0.0044968645088374615, + 0.05420222500000001, + 0.05420222500000001, + 0.0014537640381604433 + ], + "time": 0.7666666666666667, + "rotation": [] + }, + { + "weights": [ + 0.016395886428654194, + 0.016395886428654194, + 0.02888475, + 0.015004044051633626, + 0.015004044051633626, + 0.1013488918542862, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02352022696854234, + 0.031098198890686036, + 0.02352022696854234, + 0.0027155030984431505, + 0.29815924167633057, + 0.29815924167633057, + 0.0004204767756164074, + 0.0004204767756164074, + 0.0036995161790400743, + 0.11098353937268257, + 0.35912470519542694, + 0.35912470519542694, + 0.0, + 0.0, + 0.0, + 0.11098353937268257, + 0.023307619616389275, + 0.10778076946735382, + 0.0, + 0.4480384588241577, + 0.49517013132572174, + 0.49517013132572174, + 0.030680364370346068, + 0.030680364370346068, + 0.0021578710293397307, + 0.0021578710293397307, + 0.05420222500000001, + 0.05420222500000001, + 0.0008242895128205419 + ], + "time": 0.8, + "rotation": [] + }, + { + "weights": [ + 0.018469699658453465, + 0.018469699658453465, + 0.02888475, + 0.015772578017672, + 0.015772578017672, + 0.089055135846138, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.04528147690222263, + 0.04528147690222263, + 0.05126333, + 0.024556374555543662, + 0.03712552785873413, + 0.024556374555543662, + 0.00512717617675662, + 0.2971865385770798, + 0.2971865385770798, + 0.00045146311167627574, + 0.00045146311167627574, + 0.005496651399880648, + 0.11073707789182663, + 0.34528957307338715, + 0.34528957307338715, + 0.0, + 0.0, + 0.0, + 0.11073707789182663, + 0.02713860385119915, + 0.11351709812879562, + 0.0, + 0.4497250020503998, + 0.4861656576395035, + 0.4861656576395035, + 0.03052751421928406, + 0.03052751421928406, + 0.0015719662769697607, + 0.0015719662769697607, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 0.8333333333333334, + "rotation": [] + }, + { + "weights": [ + 0.021462373435497284, + 0.021462373435497284, + 0.02888475, + 0.01572624343901634, + 0.01572624343901634, + 0.07787750661373138, + 0.0012718582293018699, + 0.0012718582293018699, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02544142297105551, + 0.04564849436283112, + 0.02544142297105551, + 0.006649363785982132, + 0.29521776735782623, + 0.29521776735782623, + 0.00032873672898858786, + 0.00032873672898858786, + 0.006821854040026665, + 0.10716525465250015, + 0.3379559814929962, + 0.3379559814929962, + 0.0, + 0.0, + 0.0, + 0.10716525465250015, + 0.0307125523686409, + 0.11743129789829254, + 0.0, + 0.4535134732723236, + 0.4817405194044113, + 0.4817405194044113, + 0.02933475226163864, + 0.02933475226163864, + 0.0032516830833628774, + 0.0032516830833628774, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 0.8666666666666667, + "rotation": [] + }, + { + "weights": [ + 0.025959298014640808, + 0.025959298014640808, + 0.02888475, + 0.015121783190292715, + 0.015121783190292715, + 0.06331217288970947, + 0.005086669931188226, + 0.005086669931188226, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.025772225955591203, + 0.06051262617111206, + 0.025772225955591203, + 0.006532689090818167, + 0.2909218370914459, + 0.2909218370914459, + 0.00045108577469363806, + 0.00045108577469363806, + 0.01065588928759098, + 0.09814860299229622, + 0.34556205570697784, + 0.34556205570697784, + 0.0, + 0.0, + 0.0001928455603774637, + 0.09814860299229622, + 0.03712959587574005, + 0.12188564985990524, + 0.0, + 0.4523828625679016, + 0.4781024307012558, + 0.4781024307012558, + 0.027942273020744323, + 0.027942273020744323, + 0.007360507966950536, + 0.007360507966950536, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 0.9, + "rotation": [] + }, + { + "weights": [ + 0.03331658989191055, + 0.03331658989191055, + 0.02888475, + 0.014926525, + 0.014926525, + 0.04868151992559433, + 0.013050910085439682, + 0.013050910085439682, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.026321996847257615, + 0.0778321146965027, + 0.026321996847257615, + 0.01080382615327835, + 0.2881568670272827, + 0.2881568670272827, + 0.0006748275598511099, + 0.0006748275598511099, + 0.016998259350657463, + 0.08475397527217865, + 0.35533013939857483, + 0.35533013939857483, + 0.0, + 0.0, + 0.004411508794873953, + 0.08475397527217865, + 0.04596699774265289, + 0.1277189701795578, + 0.0, + 0.4462381601333618, + 0.4664264917373657, + 0.4664264917373657, + 0.026596324145793916, + 0.026596324145793916, + 0.01129211438819766, + 0.01129211438819766, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 0.9333333333333333, + "rotation": [] + }, + { + "weights": [ + 0.04309541545808315, + 0.04309541545808315, + 0.02888475, + 0.014926525, + 0.014926525, + 0.03289402276277542, + 0.024241977371275425, + 0.024241977371275425, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05857740057008266, + 0.05857740057008266, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.026856452139184476, + 0.09879921078681947, + 0.026856452139184476, + 0.01779160648584366, + 0.2859908640384674, + 0.2859908640384674, + 0.0010612162295728922, + 0.0010612162295728922, + 0.02591576799750328, + 0.06665144301950932, + 0.37000803649425507, + 0.37000803649425507, + 0.0014565579476766288, + 0.0014565579476766288, + 0.01144256629049778, + 0.06665144301950932, + 0.05740485340356827, + 0.13483993709087372, + 0.0, + 0.4350862503051758, + 0.4490208178758621, + 0.4490208178758621, + 0.025215478986501692, + 0.025215478986501692, + 0.01580476388335228, + 0.01580476388335228, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 0.9666666666666667, + "rotation": [] + }, + { + "weights": [ + 0.10078420519190968, + 0.10218605498474777, + 0.11469932528170944, + 0.020616149095632683, + 0.020616149095632683, + 0.0269292558232943, + 0.02197482448204286, + 0.02197482448204286, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.04928703460362418, + 0.04928703460362418, + 0.05126333, + 0.0313173374113356, + 0.10638456287838159, + 0.0313173374113356, + 0.015805494378963923, + 0.289934076014019, + 0.289934076014019, + 0.0001701094629464759, + 0.0001701094629464759, + 0.022872857146319876, + 0.06314312237359224, + 0.3373507142599138, + 0.3373507142599138, + 0.000981179140286431, + 0.000981179140286431, + 0.01032442253393431, + 0.06314312237359224, + 0.05947851528014452, + 0.1333428821393421, + 0.0, + 0.4512359356596354, + 0.43105880234922656, + 0.43105880234922656, + 0.007406275472470689, + 0.007406275472470689, + 0.014236549172727826, + 0.014236549172727826, + 0.05722147956562098, + 0.05722147956562098, + 0.0 + ], + "time": 1.0, + "rotation": [] + }, + { + "weights": [ + 0.04438378117422488, + 0.04630597460016635, + 0.16027329891629222, + 0.019130883120567908, + 0.019130883120567908, + 0.025058413296937927, + 0.01665658138115845, + 0.01665658138115845, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05815452733554201, + 0.05815452733554201, + 0.05126333, + 0.03095042464149077, + 0.10426106373469031, + 0.03095042464149077, + 0.012271904277925684, + 0.29126503283069227, + 0.29126503283069227, + 8.923064185572516e-05, + 8.923064185572516e-05, + 0.017637302726507178, + 0.062969736932289, + 0.28743312703002055, + 0.28743312703002055, + 0.00021518175379328772, + 0.00021518175379328772, + 0.007919741350980027, + 0.062969736932289, + 0.060254424171788314, + 0.12848480244477584, + 0.0, + 0.46346424477440945, + 0.425, + 0.425, + 0.010208252157483777, + 0.010208252157483777, + 0.011192060820758336, + 0.011192060820758336, + 0.05420222500000001, + 0.05420222500000001, + 8.631050586700426e-05 + ], + "time": 1.0333333333333334, + "rotation": [] + }, + { + "weights": [ + 0.03277772657041037, + 0.03277772657041037, + 0.18926113143088819, + 0.06650354870101571, + 0.06358899544430732, + 0.024650687458259705, + 0.01237295787182769, + 0.01237295787182769, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06670256485090115, + 0.06670256485090115, + 0.05126333, + 0.030606053580442914, + 0.09240619680711196, + 0.030606053580442914, + 0.009888648675821184, + 0.28706122296197056, + 0.28706122296197056, + 4.6047457560364646e-05, + 4.6047457560364646e-05, + 0.014097028438534047, + 0.061624683572777644, + 0.2307605847184146, + 0.2307605847184146, + 0.0, + 0.0, + 0.00650220514009041, + 0.061624683572777644, + 0.06338825864451268, + 0.12008406615683004, + 0.0, + 0.4519585728645322, + 0.425, + 0.425, + 0.012775099607450612, + 0.012775099607450612, + 0.00887471571830766, + 0.00887471571830766, + 0.05420222500000001, + 0.05420222500000001, + 0.0007194031029939648 + ], + "time": 1.0666666666666667, + "rotation": [] + }, + { + "weights": [ + 0.02995254397392271, + 0.02995254397392271, + 0.22223070245598553, + 0.11338196363020811, + 0.11034142419436846, + 0.025841737432139248, + 0.008438916586428166, + 0.008438916586428166, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06871612600089841, + 0.06871612600089841, + 0.05126333, + 0.030492590700381194, + 0.07094133730445587, + 0.030492590700381194, + 0.007683855614491867, + 0.27770447078205274, + 0.27770447078205274, + 0.00011453743979689594, + 0.00011453743979689594, + 0.010824461245820628, + 0.05929529771563549, + 0.16621489475170764, + 0.16621489475170764, + 0.0, + 0.0, + 0.005181073100261741, + 0.05929529771563549, + 0.06937954957996093, + 0.10640663788432161, + 0.00011170887876124332, + 0.40805151959260283, + 0.425, + 0.425, + 0.015425673198132279, + 0.015425673198132279, + 0.006711613715049762, + 0.006711613715049762, + 0.05420222500000001, + 0.05420222500000001, + 0.001135750061699322 + ], + "time": 1.1, + "rotation": [] + }, + { + "weights": [ + 0.027348559079248262, + 0.027348559079248262, + 0.24942848804976347, + 0.15267482195963777, + 0.14889732937937294, + 0.026746229987059306, + 0.0042613896763040865, + 0.0042613896763040865, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06008921500227053, + 0.06008921500227053, + 0.05126333, + 0.030305234071301205, + 0.04194829607293717, + 0.030305234071301205, + 0.0047854057989925826, + 0.2595983566272825, + 0.2595983566272825, + 0.0006912740608788134, + 0.0006912740608788134, + 0.006709204330330798, + 0.05578495643678163, + 0.09398607904357564, + 0.09398607904357564, + 0.0, + 0.0, + 0.0036350384531986125, + 0.05578495643678163, + 0.07720743878966282, + 0.08662885487789196, + 0.00973763992743832, + 0.32658275777385326, + 0.425, + 0.425, + 0.018017125162340338, + 0.018017125162340338, + 0.004281711239101628, + 0.004281711239101628, + 0.05420222500000001, + 0.05420222500000001, + 0.0009245530036943294 + ], + "time": 1.1333333333333333, + "rotation": [] + }, + { + "weights": [ + 0.024885876822684477, + 0.024885876822684477, + 0.25531452928336856, + 0.16195214920386075, + 0.15812869028871057, + 0.02650876737066676, + 0.0013554554366107482, + 0.0013554554366107482, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.04606391070345591, + 0.04606391070345591, + 0.05126333, + 0.03030181057927945, + 0.01825843832322528, + 0.03030181057927945, + 0.0025299304830176473, + 0.23414618713515134, + 0.23414618713515134, + 0.001817422463957751, + 0.001817422463957751, + 0.0034500226378440827, + 0.0516352610396487, + 0.04365725974951468, + 0.04365725974951468, + 0.0, + 0.0, + 0.002452594174870421, + 0.0516352610396487, + 0.0802971467375755, + 0.06633814323161326, + 0.026234050467610345, + 0.23130859349455138, + 0.425, + 0.425, + 0.018965212545224586, + 0.018965212545224586, + 0.002827294703040802, + 0.002827294703040802, + 0.05420222500000001, + 0.05420222500000001, + 0.0005843536928296085 + ], + "time": 1.1666666666666667, + "rotation": [] + }, + { + "weights": [ + 0.02144647811406424, + 0.02144647811406424, + 0.25323869260498283, + 0.16414652386235595, + 0.16048195628224612, + 0.02354708798229693, + 0.0004712582066921246, + 0.0004712582066921246, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.030235855274350996, + 0.005727898776531213, + 0.030235855274350996, + 0.0015665785392879363, + 0.20466709200824995, + 0.20466709200824995, + 0.004006745336311202, + 0.004006745336311202, + 0.002610865820731433, + 0.046011908751513245, + 0.023318274957793077, + 0.023318274957793077, + 0.0, + 0.0, + 0.0020326192490756497, + 0.046011908751513245, + 0.07195318500910483, + 0.04574299768677777, + 0.04594140441289968, + 0.1392405853739806, + 0.425, + 0.425, + 0.0175296596693141, + 0.0175296596693141, + 0.0025151999933379025, + 0.0025151999933379025, + 0.05420222500000001, + 0.05420222500000001, + 0.0007649706676602358 + ], + "time": 1.2, + "rotation": [] + }, + { + "weights": [ + 0.015798729498471525, + 0.015798729498471525, + 0.24744795397557617, + 0.1649357646517873, + 0.1614597094864011, + 0.020378838585955746, + 0.000967327358999422, + 0.000967327358999422, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.030362929023626188, + 0.003296892940998074, + 0.030362929023626188, + 0.0009277043797607928, + 0.17625301341925337, + 0.17625301341925337, + 0.007669898242290525, + 0.007669898242290525, + 0.004988027683326173, + 0.03968586559806549, + 0.024649102347237706, + 0.024649102347237706, + 0.0, + 0.0, + 0.0027834473576928863, + 0.03968586559806549, + 0.051337614549057796, + 0.028187271314007875, + 0.0634272579103708, + 0.06458569977964669, + 0.425, + 0.425, + 0.014634176769426882, + 0.014634176769426882, + 0.0013120477886072223, + 0.0013120477886072223, + 0.05420222500000001, + 0.05420222500000001, + 0.0010775610006281302 + ], + "time": 1.2333333333333334, + "rotation": [] + }, + { + "weights": [ + 0.009209548176399292, + 0.009209548176399292, + 0.2404698500741541, + 0.16759522209421499, + 0.16446706436325415, + 0.017063395359686432, + 0.001268332691064902, + 0.001268332691064902, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02995037004653317, + 0.003548051885196135, + 0.02995037004653317, + 0.0, + 0.14953303752200936, + 0.14953303752200936, + 0.014188858723001806, + 0.014188858723001806, + 0.006732220734868728, + 0.03407239051801816, + 0.027982193976640684, + 0.027982193976640684, + 0.00821432881057261, + 0.00821432881057261, + 0.003442118609590184, + 0.03407239051801816, + 0.028576932315315502, + 0.016837150177785316, + 0.08112546333244863, + 0.020439756768090362, + 0.425, + 0.425, + 0.011456120541053152, + 0.011456120541053152, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.0012568487386618334 + ], + "time": 1.2666666666666666, + "rotation": [] + }, + { + "weights": [ + 0.00361179315618106, + 0.00361179315618106, + 0.2470234173636079, + 0.20411424937712822, + 0.20116756368832858, + 0.01340609437652996, + 0.002236252996538365, + 0.002236252996538365, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.028466204492997436, + 0.011042951004845744, + 0.028466204492997436, + 0.0, + 0.11791507897100273, + 0.11791507897100273, + 0.028662104872720563, + 0.028662104872720563, + 0.004639616289309091, + 0.031239834108522938, + 0.03289755774395805, + 0.03289755774395805, + 0.04791348965040272, + 0.04791348965040272, + 0.0128374866076878, + 0.031239834108522938, + 0.010759309040648587, + 0.01624836751392908, + 0.09803163771118431, + 0.007562025423560815, + 0.425, + 0.425, + 0.008049418697399748, + 0.008049418697399748, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.0014429423691970952 + ], + "time": 1.3, + "rotation": [] + }, + { + "weights": [ + 0.00019424107990094513, + 0.00019424107990094513, + 0.27141343722490585, + 0.23637669035878708, + 0.23266235721835427, + 0.005413669879947387, + 0.003091764340310223, + 0.003091764340310223, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.026303069764838215, + 0.03233374706336428, + 0.026303069764838215, + 0.0009723384648428427, + 0.07523499152490067, + 0.07523499152490067, + 0.0540198798690523, + 0.0540198798690523, + 0.0002315344555037348, + 0.03845031559467313, + 0.029928863367864048, + 0.029928863367864048, + 0.1121045675660882, + 0.1121045675660882, + 0.046193759156657084, + 0.03845031559467313, + 0.00408871982778821, + 0.027790926503283617, + 0.10971344411373132, + 0.004063814878463742, + 0.425, + 0.425, + 0.004602536958243163, + 0.004602536958243163, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.00203290217156921 + ], + "time": 1.3333333333333333, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.3080298290555468, + 0.2550844744537253, + 0.251126583058824, + 0.0, + 0.0020231440330722495, + 0.0020231440330722495, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05450311923133472, + 0.05450311923133472, + 0.05126333, + 0.025574006558352874, + 0.06714253962039944, + 0.025574006558352874, + 0.0018622494169643936, + 0.032730021434170836, + 0.032730021434170836, + 0.08491915664502547, + 0.08491915664502547, + 0.0009613458599363031, + 0.060361568842615364, + 0.019104569618191028, + 0.019104569618191028, + 0.16265753065901134, + 0.16265753065901134, + 0.10777708430375366, + 0.060361568842615364, + 0.009422394952603741, + 0.04842285934303485, + 0.10222114324569698, + 0.0, + 0.425, + 0.425, + 0.0023122428570474876, + 0.0023122428570474876, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.0025573956647089533 + ], + "time": 1.3666666666666667, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.33907757445032255, + 0.2740529422069313, + 0.2701341914198579, + 0.0, + 0.0005396269261837001, + 0.0005396269261837001, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07206562704273628, + 0.07206562704273628, + 0.05126333, + 0.027264804332207945, + 0.10442242273262564, + 0.027264804332207945, + 0.002464076264628341, + 0.005168384686112389, + 0.005168384686112389, + 0.10906983307429716, + 0.10906983307429716, + 0.006936152066503248, + 0.08736700772174762, + 0.010312983553324419, + 0.010312983553324419, + 0.1763077311217784, + 0.1763077311217784, + 0.16882637121847688, + 0.08736700772174762, + 0.02034162836415426, + 0.06284222288855482, + 0.07574821731873917, + 0.0, + 0.425, + 0.425, + 0.0013389682929430679, + 0.0013389682929430679, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.0023955658876470146 + ], + "time": 1.4, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.43446354485533745, + 0.3172984624528196, + 0.31464677481375014, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0850733506360224, + 0.0850733506360224, + 0.05126333, + 0.031812137730243537, + 0.12310918944222582, + 0.031812137730243537, + 0.004091132532006926, + 0.00267327630094117, + 0.00267327630094117, + 0.11385916139398296, + 0.11385916139398296, + 0.012241872293608524, + 0.0939058544912508, + 0.0074769829000745445, + 0.0074769829000745445, + 0.15792727475719784, + 0.15792727475719784, + 0.17215380434479025, + 0.0939058544912508, + 0.024363126073564785, + 0.07246070844786504, + 0.05953185962779177, + 0.0, + 0.425, + 0.425, + 0.0010741395982248434, + 0.0010741395982248434, + 0.0001810012119156974, + 0.0001810012119156974, + 0.05420222500000001, + 0.05420222500000001, + 0.0016504027747682151 + ], + "time": 1.4333333333333333, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.5534849437107997, + 0.3932268828529342, + 0.39192642086435997, + 0.0, + 7.195733820221262e-05, + 7.195733820221262e-05, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.09371730972613602, + 0.09371730972613602, + 0.05126333, + 0.03772193044424055, + 0.11714837993894299, + 0.03772193044424055, + 0.0036019600262599313, + 0.059642391917960925, + 0.059642391917960925, + 0.09393908628395621, + 0.09393908628395621, + 0.014835839825017103, + 0.06966019141088635, + 0.008734084346464697, + 0.008734084346464697, + 0.11181603002228901, + 0.11181603002228901, + 0.11395340141441135, + 0.06966019141088635, + 0.03716315744178633, + 0.10785923174449369, + 0.07660771778651643, + 0.0, + 0.425, + 0.425, + 0.0011383346574647072, + 0.0011383346574647072, + 0.0001602727387632642, + 0.0001602727387632642, + 0.05420222500000001, + 0.05420222500000001, + 0.0016522355643766255 + ], + "time": 1.4666666666666666, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.5757443422315708, + 0.413322456745399, + 0.41224348745338424, + 0.004459503293037412, + 0.00043881372548639776, + 0.00043881372548639776, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.099036686441728, + 0.099036686441728, + 0.05126333, + 0.04611414191978316, + 0.09925833123070847, + 0.04611414191978316, + 0.0017521262501499469, + 0.20238866521311644, + 0.20238866521311644, + 0.05910224212067464, + 0.05910224212067464, + 0.012946252099105285, + 0.032282898641590535, + 0.007836030210767467, + 0.007836030210767467, + 0.05616918812905035, + 0.05616918812905035, + 0.048408484778233896, + 0.032282898641590535, + 0.06352696312325339, + 0.1665999484913689, + 0.0916903439377035, + 0.0, + 0.425, + 0.425, + 0.0031512272251503783, + 0.0031512272251503783, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.0022464801956500313 + ], + "time": 1.5, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.560374458264207, + 0.4073631947834051, + 0.4050423831902182, + 0.006747062504291532, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.09732921048998827, + 0.09732921048998827, + 0.05126333, + 0.05106074011751581, + 0.09271726165499, + 0.05106074011751581, + 0.001797374510871511, + 0.3648573941950285, + 0.3648573941950285, + 0.027679419980517435, + 0.027679419980517435, + 0.008182291047913683, + 0.0093758541691516, + 0.007907811765159865, + 0.007907811765159865, + 0.015902639366686327, + 0.015902639366686327, + 0.020848272953714622, + 0.0093758541691516, + 0.08099017334835866, + 0.19621515848806917, + 0.06744533096040994, + 0.006176348562751485, + 0.425, + 0.425, + 0.007357217818498607, + 0.007357217818498607, + 0.0003376405153955729, + 0.0003376405153955729, + 0.05420222500000001, + 0.05420222500000001, + 0.0024199583966817164 + ], + "time": 1.5333333333333334, + "rotation": [] + }, + { + "weights": [ + 0.00038416949766022744, + 0.00038416949766022744, + 0.5319728766789666, + 0.37913727938262753, + 0.3762605466638916, + 0.004045946257455006, + 0.00048404697860990234, + 0.00048404697860990234, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.08809895653809816, + 0.08809895653809816, + 0.05126333, + 0.053069885607276615, + 0.10544960771288184, + 0.053069885607276615, + 0.003794596241121844, + 0.4461121473993571, + 0.4461121473993571, + 0.009505383745002153, + 0.009505383745002153, + 0.004365556793553485, + 0.006627956950770948, + 0.037102542285408255, + 0.037102542285408255, + 0.004034357677612979, + 0.004034357677612979, + 0.01256912797689437, + 0.006627956950770948, + 0.06311291083693502, + 0.16716287859848558, + 0.026179329625197797, + 0.03200991792338232, + 0.425, + 0.425, + 0.012154637229229716, + 0.012154637229229716, + 0.0006279477051326197, + 0.0006279477051326197, + 0.05420222500000001, + 0.05420222500000001, + 0.0015541531411664819 + ], + "time": 1.5666666666666667, + "rotation": [] + }, + { + "weights": [ + 0.005162206611462999, + 0.005162206611462999, + 0.5146745779998779, + 0.3707245989747822, + 0.3679301935394705, + 0.0016331898314612223, + 0.0007774611668927326, + 0.0007774611668927326, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07714221019830017, + 0.07714221019830017, + 0.05126333, + 0.048123521783522166, + 0.12168914692742479, + 0.048123521783522166, + 0.0028778707209442325, + 0.4346087970903939, + 0.4346087970903939, + 0.0021032294877139555, + 0.0021032294877139555, + 0.0037021176091262243, + 0.018288950369294184, + 0.11971296311489166, + 0.11971296311489166, + 0.0015953577788812754, + 0.0015953577788812754, + 0.0070151038467884015, + 0.018288950369294184, + 0.031081689468451888, + 0.11310827072177608, + 0.005697067081928244, + 0.10425941773823322, + 0.425, + 0.425, + 0.016294555642775117, + 0.016294555642775117, + 0.004131428950599258, + 0.004131428950599258, + 0.05420222500000001, + 0.05420222500000001, + 0.0006425104237028526 + ], + "time": 1.6, + "rotation": [] + }, + { + "weights": [ + 0.010725754818746016, + 0.010725754818746016, + 0.4687614108060956, + 0.3331005796943903, + 0.33106415193071365, + 0.005144476677690228, + 0.0008099222356187443, + 0.0008099222356187443, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0717434931014265, + 0.0717434931014265, + 0.05126333, + 0.039595270689044657, + 0.12360956668853754, + 0.039595270689044657, + 0.0014375456176432104, + 0.39500837964670976, + 0.39500837964670976, + 0.0, + 0.0, + 0.004310062314782821, + 0.03751076833744132, + 0.23070901046906186, + 0.23070901046906186, + 0.0, + 0.0, + 0.0031505547397370818, + 0.03751076833744132, + 0.01022456000958169, + 0.07784608368362694, + 0.003028469639165058, + 0.21416225944246553, + 0.425, + 0.425, + 0.020039851133312487, + 0.020039851133312487, + 0.012358898895659609, + 0.012358898895659609, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 1.6333333333333333, + "rotation": [] + }, + { + "weights": [ + 0.015507851514433103, + 0.015507851514433103, + 0.4112561735978305, + 0.2655938707892597, + 0.2634409871068716, + 0.017013737665755396, + 0.0006014260130801369, + 0.0006014260130801369, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07131962467517167, + 0.07131962467517167, + 0.05126333, + 0.03364077608801909, + 0.10995269128254477, + 0.03364077608801909, + 0.001452496534745607, + 0.36459423984800043, + 0.36459423984800043, + 0.0, + 0.0, + 0.005325465649366376, + 0.0609974419964211, + 0.32291042645062706, + 0.32291042645062706, + 0.0, + 0.0, + 0.002745466007451924, + 0.0609974419964211, + 0.006486970079796648, + 0.07153286614588324, + 0.0004975444504192888, + 0.3284207318510326, + 0.43568040643419514, + 0.43568040643419514, + 0.02311622470617293, + 0.02311622470617293, + 0.02249031684228351, + 0.02249031684228351, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 1.6666666666666667, + "rotation": [] + }, + { + "weights": [ + 0.01666445452719926, + 0.01666445452719926, + 0.36019616136039495, + 0.20603325261923075, + 0.20421637501029372, + 0.03666537180542944, + 0.00016382788973195203, + 0.00016382788973195203, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07304378492491581, + 0.07304378492491581, + 0.05126333, + 0.031592650491036, + 0.08865374241556435, + 0.031592650491036, + 0.001951706439389713, + 0.3416861406394412, + 0.3416861406394412, + 0.0, + 0.0, + 0.006577633640595841, + 0.08215778007038997, + 0.3743481301835603, + 0.3743481301835603, + 0.0, + 0.0, + 0.0023339731286146793, + 0.08215778007038997, + 0.009834298172167362, + 0.08190048911741797, + 0.0, + 0.4120171725749967, + 0.43973422774246734, + 0.43973422774246734, + 0.0250029708445072, + 0.0250029708445072, + 0.026179807207414068, + 0.026179807207414068, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 1.7, + "rotation": [] + }, + { + "weights": [ + 0.016657486212040686, + 0.016657486212040686, + 0.30034675912800435, + 0.1298715432697952, + 0.1289299685654998, + 0.059478281225476916, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0748148323169776, + 0.0748148323169776, + 0.05126333, + 0.03054303217448779, + 0.06267091240201673, + 0.03054303217448779, + 0.0014351343203868176, + 0.32230035747800534, + 0.32230035747800534, + 0.0, + 0.0, + 0.005636645427771973, + 0.09858582349760187, + 0.38778504558971927, + 0.38778504558971927, + 5.036709564072737e-05, + 5.036709564072737e-05, + 0.004111375692965727, + 0.09858582349760187, + 0.015920676929610106, + 0.09394832019295006, + 0.0, + 0.4633604909692489, + 0.43812584749289896, + 0.43812584749289896, + 0.02591256710035459, + 0.02591256710035459, + 0.021589613147079932, + 0.021589613147079932, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 1.7333333333333334, + "rotation": [] + }, + { + "weights": [ + 0.01621771297816718, + 0.01621771297816718, + 0.2300433480806589, + 0.049834344934809205, + 0.04974455872008801, + 0.08082271867564741, + 4.447101881461461e-05, + 4.447101881461461e-05, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07401749550231862, + 0.07401749550231862, + 0.05126333, + 0.030030553035261965, + 0.03727001598903109, + 0.030030553035261965, + 0.0017390315354402562, + 0.30172724234206316, + 0.30172724234206316, + 0.000419289507304451, + 0.000419289507304451, + 0.005113589657204488, + 0.10672950819134706, + 0.3757205746003558, + 0.3757205746003558, + 0.0008356274238654542, + 0.0008356274238654542, + 0.00567608496307262, + 0.10672950819134706, + 0.021656480112246093, + 0.10094536691904063, + 0.0019874012895992814, + 0.47522978186607334, + 0.4289166471787859, + 0.4289166471787859, + 0.025798978656530365, + 0.025798978656530365, + 0.015443380576159262, + 0.015443380576159262, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 1.7666666666666666, + "rotation": [] + }, + { + "weights": [ + 0.03944071225154058, + 0.039702762216260595, + 0.19777560346310136, + 0.014926525, + 0.014926525, + 0.09378991925290647, + 0.0005137883193258722, + 0.0005137883193258722, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06772307540689192, + 0.06772307540689192, + 0.05126333, + 0.029730445138933994, + 0.02261157878807611, + 0.029730445138933994, + 0.0034186572235609773, + 0.2745298311114309, + 0.2745298311114309, + 0.0011341305895309357, + 0.0011341305895309357, + 0.007837473601102821, + 0.1076273756367819, + 0.36925376398222765, + 0.36925376398222765, + 0.0019849670252629677, + 0.0019849670252629677, + 0.006064809918669714, + 0.1076273756367819, + 0.02414962926081247, + 0.10128239776406964, + 0.0035722635686397533, + 0.46009774548666793, + 0.425, + 0.425, + 0.02477735610944883, + 0.02477735610944883, + 0.01575500930526426, + 0.01575500930526426, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 1.8, + "rotation": [] + }, + { + "weights": [ + 0.014146005202616952, + 0.014146005202616952, + 0.02888475, + 0.015007227021155357, + 0.015007227021155357, + 0.09210456109472678, + 0.0017495008651167124, + 0.0017495008651167124, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06379390417465139, + 0.06379390417465139, + 0.05126333, + 0.02832497871117353, + 0.02315041848591394, + 0.02832497871117353, + 0.008357726709384998, + 0.24264163055590207, + 0.24264163055590207, + 0.001205327434997473, + 0.001205327434997473, + 0.017569265833922782, + 0.1021610861378056, + 0.3819913234029495, + 0.3819913234029495, + 0.002901509350963999, + 0.002901509350963999, + 0.006173980981111523, + 0.1021610861378056, + 0.024151022838694695, + 0.1029668143817356, + 0.0029644781989710644, + 0.41079496996743314, + 0.425, + 0.425, + 0.02393103399447031, + 0.02393103399447031, + 0.019514507986605156, + 0.019514507986605156, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 1.8333333333333333, + "rotation": [] + }, + { + "weights": [ + 0.025457603883530397, + 0.025457603883530397, + 0.02888475, + 0.014926525, + 0.014926525, + 0.07656225317290846, + 0.009447361429088873, + 0.009447361429088873, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07144884126526964, + 0.07144884126526964, + 0.05126333, + 0.02565319867308071, + 0.03740235677787234, + 0.02565319867308071, + 0.015622632032526382, + 0.21118948502199975, + 0.21118948502199975, + 0.0007525907456874843, + 0.0007525907456874843, + 0.03590202980807847, + 0.09071549453905646, + 0.39510274274008594, + 0.39510274274008594, + 0.0046661162748932805, + 0.0046661162748932805, + 0.008643708551036454, + 0.09071549453905646, + 0.028984877573592305, + 0.1096482302461351, + 0.005464135323251993, + 0.33699235149792245, + 0.425, + 0.425, + 0.02375684159142629, + 0.02375684159142629, + 0.02209860243435416, + 0.02209860243435416, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 1.8666666666666667, + "rotation": [] + }, + { + "weights": [ + 0.04655618566487514, + 0.04655618566487514, + 0.03568613300366059, + 0.014926525, + 0.014926525, + 0.052706064283847776, + 0.02326161637237028, + 0.02326161637237028, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.08904991056770081, + 0.08904991056770081, + 0.09094053395092483, + 0.09094053395092483, + 0.05126333, + 0.023952068939628937, + 0.05381217854363575, + 0.023952068939628937, + 0.024725507080022767, + 0.1814823365637233, + 0.1814823365637233, + 0.0004041776247322556, + 0.0004041776247322556, + 0.060570144546883406, + 0.07408760881849694, + 0.37510610605989164, + 0.37510610605989164, + 0.006539617824767313, + 0.006539617824767313, + 0.014514209383300362, + 0.07408760881849694, + 0.037000281576599375, + 0.11178152688911977, + 0.011012245608227587, + 0.24493517747947133, + 0.425, + 0.425, + 0.024381295038121073, + 0.024381295038121073, + 0.024528649263083922, + 0.024528649263083922, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 1.9, + "rotation": [] + }, + { + "weights": [ + 0.06704372396426539, + 0.06704372396426539, + 0.051350779246006666, + 0.014997725987559727, + 0.014997725987559727, + 0.039463652670383376, + 0.03584909618033892, + 0.03584909618033892, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.13748896513134234, + 0.13748896513134234, + 0.09854672662913788, + 0.09854672662913788, + 0.05266998724213666, + 0.023910271961774116, + 0.06641637154987878, + 0.023910271961774116, + 0.03150884861658723, + 0.15292430775506138, + 0.15292430775506138, + 0.0009924602654895604, + 0.0009924602654895604, + 0.08091023298246519, + 0.05723503615174969, + 0.34529784364359695, + 0.34529784364359695, + 0.010906922338264324, + 0.010906922338264324, + 0.0235566657302635, + 0.05723503615174969, + 0.041395704554659955, + 0.11016802106584812, + 0.015145203790494364, + 0.18293418075357137, + 0.425, + 0.425, + 0.02467166381222859, + 0.02467166381222859, + 0.02896393109112977, + 0.02896393109112977, + 0.054851929400938915, + 0.054851929400938915, + 0.0 + ], + "time": 1.9333333333333333, + "rotation": [] + }, + { + "weights": [ + 0.08959843263562232, + 0.08959843263562232, + 0.06837659707026818, + 0.015492187653820173, + 0.015492187653820173, + 0.03176969215273846, + 0.04912225325325767, + 0.04912225325325767, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.18769516330212346, + 0.18769516330212346, + 0.10028947629034504, + 0.10028947629034504, + 0.05933982213693002, + 0.026882105081209078, + 0.07683840913431983, + 0.026882105081209078, + 0.03701022875362205, + 0.12538569505725564, + 0.12538569505725564, + 0.0024137029131608354, + 0.0024137029131608354, + 0.09971133481178963, + 0.03891889431646884, + 0.30004914913858655, + 0.30004914913858655, + 0.01706873497792652, + 0.01706873497792652, + 0.03578605776918785, + 0.03891889431646884, + 0.04383380466273849, + 0.10411116353103081, + 0.01905137534652436, + 0.1390480531113486, + 0.425, + 0.425, + 0.02488785918269836, + 0.02488785918269836, + 0.035255461744964106, + 0.035255461744964106, + 0.06324962796299899, + 0.06324962796299899, + 0.0005796459636517935 + ], + "time": 1.9666666666666666, + "rotation": [] + }, + { + "weights": [ + 0.07862632156203993, + 0.07862632156203993, + 0.06180887898392208, + 0.021380508480250478, + 0.021380508480250478, + 0.03731570838107937, + 0.0434061228513375, + 0.0434061228513375, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.16388411052214585, + 0.16388411052214585, + 0.09678733729890396, + 0.09678733729890396, + 0.05402867656961381, + 0.030823168753793317, + 0.06559220784456546, + 0.030823168753793317, + 0.03229633418735441, + 0.12999386094079712, + 0.12999386094079712, + 7.2279354810804615e-06, + 7.2279354810804615e-06, + 0.08829651783720971, + 0.04428752388425009, + 0.29546199010849766, + 0.29546199010849766, + 0.016561240786496456, + 0.016561240786496456, + 0.03240923635256125, + 0.04428752388425009, + 0.03940770122773789, + 0.09359315146495681, + 0.0247887777582723, + 0.1406371337013177, + 0.425, + 0.425, + 0.0066264917090788494, + 0.0066264917090788494, + 0.03049389000715951, + 0.03049389000715951, + 0.06081642702993594, + 0.06081642702993594, + 0.00038939911517358965 + ], + "time": 2.0, + "rotation": [] + }, + { + "weights": [ + 0.06059009651875205, + 0.06059009651875205, + 0.05247126452270001, + 0.02085041118238335, + 0.02085041118238335, + 0.035865720006681534, + 0.03543789119991869, + 0.03543789119991869, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.1273134794485355, + 0.1273134794485355, + 0.09596928173587421, + 0.09596928173587421, + 0.05126333, + 0.029737026476258192, + 0.05800859581856495, + 0.029737026476258192, + 0.025565867733565072, + 0.12178643464687303, + 0.12178643464687303, + 0.0034378841551286773, + 0.0034378841551286773, + 0.07177561209315339, + 0.050901531995761876, + 0.28658016132456876, + 0.28658016132456876, + 0.016584297464716985, + 0.016584297464716985, + 0.03786615809159616, + 0.050901531995761876, + 0.03186781782479509, + 0.08365409899325585, + 0.027340839980613596, + 0.12521675143923056, + 0.425, + 0.425, + 0.006870925745793744, + 0.006870925745793744, + 0.02393767179122991, + 0.02393767179122991, + 0.05423317227409418, + 0.05423317227409418, + 0.0 + ], + "time": 2.033333333333333, + "rotation": [] + }, + { + "weights": [ + 0.04477745989071467, + 0.04477745989071467, + 0.05061313392860543, + 0.020573744018851856, + 0.020573744018851856, + 0.024770066354955877, + 0.028497992352848573, + 0.028497992352848573, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.09750762195991608, + 0.09750762195991608, + 0.1015498806589415, + 0.1015498806589415, + 0.05126333, + 0.030064534221998864, + 0.07024083243949068, + 0.030064534221998864, + 0.01955664730630812, + 0.08994885648467693, + 0.08994885648467693, + 0.021416238586019178, + 0.021416238586019178, + 0.056979848550898646, + 0.05862311114157942, + 0.23781291970184842, + 0.23781291970184842, + 0.02055653658296379, + 0.02055653658296379, + 0.0774439297217343, + 0.05862311114157942, + 0.024314351858837232, + 0.08123239619391294, + 0.02456209313656601, + 0.08698264541370512, + 0.425, + 0.425, + 0.005305042551564313, + 0.005305042551564313, + 0.017630657314189824, + 0.017630657314189824, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 2.066666666666667, + "rotation": [] + }, + { + "weights": [ + 0.029319948694180847, + 0.029319948694180847, + 0.055571384319946834, + 0.01988337204988945, + 0.01988337204988945, + 0.01377525443122496, + 0.019115773776900886, + 0.019115773776900886, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0667848581980381, + 0.0667848581980381, + 0.10964561081713144, + 0.10964561081713144, + 0.05126333, + 0.031129931628705365, + 0.09692597511268791, + 0.031129931628705365, + 0.014059808069751357, + 0.05218971716240037, + 0.05218971716240037, + 0.05768219869388706, + 0.05768219869388706, + 0.04050099526842432, + 0.07494424819236703, + 0.15709274098986653, + 0.15709274098986653, + 0.03394097806442349, + 0.03394097806442349, + 0.15533848929085892, + 0.07494424819236703, + 0.02126935177615708, + 0.08469041827179127, + 0.01877559934343609, + 0.05286337779391369, + 0.425, + 0.425, + 0.003151696468038215, + 0.003151696468038215, + 0.0119499452456477, + 0.0119499452456477, + 0.05420222500000001, + 0.05420222500000001, + 3.327779649269001e-05 + ], + "time": 2.1, + "rotation": [] + }, + { + "weights": [ + 0.012881425029921274, + 0.012881425029921274, + 0.06428606973973663, + 0.01791568367161421, + 0.01791568367161421, + 0.0063445439047756435, + 0.00813658341489807, + 0.00813658341489807, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.11553738987516779, + 0.11553738987516779, + 0.05126333, + 0.03188846322825802, + 0.1228205440125497, + 0.03188846322825802, + 0.008493201774608359, + 0.01936555604697485, + 0.01936555604697485, + 0.10492342548054086, + 0.10492342548054086, + 0.02324306569486652, + 0.09897741883942458, + 0.06878361458022163, + 0.06878361458022163, + 0.05977796883417329, + 0.05977796883417329, + 0.26115875527161303, + 0.09897741883942458, + 0.027202785759657396, + 0.08598899385454695, + 0.017223366706752438, + 0.024446547623394245, + 0.425, + 0.425, + 0.001561522459928071, + 0.001561522459928071, + 0.007041143539938181, + 0.007041143539938181, + 0.05420222500000001, + 0.05420222500000001, + 0.000710037624095978 + ], + "time": 2.1333333333333333, + "rotation": [] + }, + { + "weights": [ + 0.0020288668702147404, + 0.0020288668702147404, + 0.0707335302887522, + 0.016109633577063995, + 0.016109633577063995, + 0.002462935852152956, + 0.0018195281884804027, + 0.0018195281884804027, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.11751330551292209, + 0.11751330551292209, + 0.05126333, + 0.031927480122468585, + 0.1366787538990682, + 0.031927480122468585, + 0.004782440527437288, + 0.001507049517287879, + 0.001507049517287879, + 0.13818742401774736, + 0.13818742401774736, + 0.011401075830264958, + 0.11646630478148551, + 0.01669940269115017, + 0.01669940269115017, + 0.08830431376792941, + 0.08830431376792941, + 0.3377425315907717, + 0.11646630478148551, + 0.03663387781199142, + 0.0840971948480119, + 0.020272944828077222, + 0.005792626583454546, + 0.425, + 0.425, + 0.0009481620219897241, + 0.0009481620219897241, + 0.004114022845668449, + 0.004114022845668449, + 0.05420222500000001, + 0.05420222500000001, + 0.0014779771043329816 + ], + "time": 2.1666666666666665, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.07229606578316611, + 0.01543031339037151, + 0.01543031339037151, + 0.0, + 0.0006124393894261087, + 0.0006124393894261087, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.11578288869666195, + 0.11578288869666195, + 0.05126333, + 0.033570671975018396, + 0.13771929759030432, + 0.033570671975018396, + 0.004359903685102352, + 0.0, + 0.0, + 0.14506430792550798, + 0.14506430792550798, + 0.008242658918001206, + 0.12164671079692785, + 0.0008557522889910884, + 0.0008557522889910884, + 0.11402317409764742, + 0.11402317409764742, + 0.33898003022927703, + 0.12164671079692785, + 0.03758872878642713, + 0.0777349916070091, + 0.03641404660532667, + 0.0, + 0.425, + 0.425, + 0.001092474781737035, + 0.001092474781737035, + 0.0019573017981435554, + 0.0019573017981435554, + 0.05420222500000001, + 0.05420222500000001, + 0.0016394523090245763 + ], + "time": 2.2, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.07053223656756533, + 0.016277480711381093, + 0.016277480711381093, + 0.0, + 0.0015117985129888562, + 0.0015117985129888562, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.10969809698207032, + 0.10969809698207032, + 0.05126333, + 0.039574129081198124, + 0.12462378399712692, + 0.039574129081198124, + 0.004332630153346272, + 0.012075401004403795, + 0.012075401004403795, + 0.12051790522677552, + 0.12051790522677552, + 0.009788448044231953, + 0.1045634723667587, + 0.007199492944138387, + 0.007199492944138387, + 0.12352743744850152, + 0.12352743744850152, + 0.23977237407650254, + 0.1045634723667587, + 0.03268333183867588, + 0.08623793699911657, + 0.06896661764809059, + 0.0006737035300050448, + 0.425, + 0.425, + 0.0008708453976682247, + 0.0008708453976682247, + 0.0013614114240876256, + 0.0013614114240876256, + 0.05420222500000001, + 0.05420222500000001, + 0.001275456776576382 + ], + "time": 2.2333333333333334, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.06464192750198497, + 0.01702163975208759, + 0.01702163975208759, + 0.0, + 0.0008048896943884228, + 0.0008048896943884228, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.10187334152204644, + 0.10187334152204644, + 0.05126333, + 0.04471978071544849, + 0.11345430067607327, + 0.04471978071544849, + 0.0018706571177712495, + 0.11312800286603816, + 0.11312800286603816, + 0.0799041079623358, + 0.0799041079623358, + 0.01012772428137915, + 0.06511410208685053, + 0.005729326871888974, + 0.005729326871888974, + 0.09438404182770418, + 0.09438404182770418, + 0.1200811741607529, + 0.06511410208685053, + 0.049365735054016084, + 0.1260953771216528, + 0.08911646844020907, + 0.002580413594841953, + 0.425, + 0.425, + 0.0012162074659551876, + 0.0012162074659551876, + 0.000896457862108945, + 0.000896457862108945, + 0.05420222500000001, + 0.05420222500000001, + 0.0010939537946666985 + ], + "time": 2.2666666666666666, + "rotation": [] + }, + { + "weights": [ + 0.00028125542615141136, + 0.00028125542615141136, + 0.05512158785547525, + 0.01713692700279372, + 0.01713692700279372, + 0.0017603693263871323, + 0.0018385171025459247, + 0.0018385171025459247, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.09428368285298341, + 0.09428368285298341, + 0.05126333, + 0.047878381929227255, + 0.12550475461142396, + 0.047878381929227255, + 0.0004692262737080443, + 0.288862139438944, + 0.288862139438944, + 0.038935790679284474, + 0.038935790679284474, + 0.008455430184091835, + 0.022848419579012035, + 0.000564001234514369, + 0.000564001234514369, + 0.042020587942429924, + 0.042020587942429924, + 0.04021098726828179, + 0.022848419579012035, + 0.07917526385613846, + 0.17785421290567932, + 0.06828513113515713, + 0.008825651449816558, + 0.425, + 0.425, + 0.003748798242637086, + 0.003748798242637086, + 0.0015099237406892428, + 0.0015099237406892428, + 0.05420222500000001, + 0.05420222500000001, + 0.001061537542513438 + ], + "time": 2.3, + "rotation": [] + }, + { + "weights": [ + 0.003194758588714256, + 0.003194758588714256, + 0.046501723251172446, + 0.015834929156002996, + 0.015834929156002996, + 0.0032832407525607513, + 0.0025809823601905778, + 0.0025809823601905778, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.088454820215702, + 0.088454820215702, + 0.05126333, + 0.05074219937835418, + 0.177622730731964, + 0.05074219937835418, + 0.0027299556881189334, + 0.4264168358274866, + 0.4264168358274866, + 0.014279047459630018, + 0.014279047459630018, + 0.010364510118961327, + 0.0016152607410081757, + 0.01426553800702093, + 0.01426553800702093, + 0.006610897103590613, + 0.006610897103590613, + 0.016520517505705337, + 0.0016152607410081757, + 0.09485760246004372, + 0.188866222330502, + 0.02968696989119051, + 0.024271522941333876, + 0.425, + 0.425, + 0.008626615431691914, + 0.008626615431691914, + 0.0022001395800283962, + 0.0022001395800283962, + 0.05420222500000001, + 0.05420222500000001, + 0.00057324224284717 + ], + "time": 2.3333333333333335, + "rotation": [] + }, + { + "weights": [ + 0.009928168037108007, + 0.009928168037108007, + 0.039426683794174855, + 0.014926525, + 0.014926525, + 0.0, + 0.002301260170393756, + 0.002301260170393756, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0841420567461422, + 0.0841420567461422, + 0.05126333, + 0.05276632670845301, + 0.24564821072987134, + 0.05276632670845301, + 0.004810296940351169, + 0.4579423461641582, + 0.4579423461641582, + 0.004319821745822467, + 0.004319821745822467, + 0.010525209137371603, + 0.0, + 0.06856408395937506, + 0.06856408395937506, + 0.0011854749705110237, + 0.0011854749705110237, + 0.0072508871222713095, + 0.0, + 0.08857249915599819, + 0.15776771860463268, + 0.0077076129615306745, + 0.0838494664856365, + 0.425, + 0.425, + 0.013523786254227154, + 0.013523786254227154, + 0.002384697832167147, + 0.002384697832167147, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 2.3666666666666667, + "rotation": [] + }, + { + "weights": [ + 0.016636652605874186, + 0.016636652605874186, + 0.03178494993065083, + 0.014926525, + 0.014926525, + 0.0, + 0.00045647637120314975, + 0.00045647637120314975, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.08103982784918372, + 0.08103982784918372, + 0.05126333, + 0.052346731722354864, + 0.2891637631825037, + 0.052346731722354864, + 0.003979740418227654, + 0.4379576402051106, + 0.4379576402051106, + 0.0012917703820858133, + 0.0012917703820858133, + 0.009426941403320854, + 0.0006924050061830439, + 0.13009318028177527, + 0.13009318028177527, + 0.001423489169350691, + 0.001423489169350691, + 0.004385017463937399, + 0.0006924050061830439, + 0.08510648608207698, + 0.12423945069313042, + 0.003917740551488736, + 0.19317241188670897, + 0.425, + 0.425, + 0.01660117055688585, + 0.01660117055688585, + 0.002421666455588169, + 0.002421666455588169, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 2.4, + "rotation": [] + }, + { + "weights": [ + 0.02095405486013207, + 0.02095405486013207, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0, + 0.00014989203773438918, + 0.00014989203773438918, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07740598438041546, + 0.07740598438041546, + 0.05126333, + 0.052372683265379465, + 0.28043858323778414, + 0.052372683265379465, + 0.002100700748685214, + 0.4260343023708886, + 0.4260343023708886, + 0.00019634988491556418, + 0.00019634988491556418, + 0.005384077557495658, + 0.005799647327512495, + 0.16508446325148846, + 0.16508446325148846, + 0.0008094960025378632, + 0.0008094960025378632, + 0.0030339155811816435, + 0.005799647327512495, + 0.08382353718791685, + 0.11158083166394908, + 0.0025461243731634935, + 0.32315738201141336, + 0.45767893833773454, + 0.45767893833773454, + 0.01812568619847297, + 0.01812568619847297, + 0.003844937349536587, + 0.003844937349536587, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 2.433333333333333, + "rotation": [] + }, + { + "weights": [ + 0.02171483721051896, + 0.02171483721051896, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0, + 0.00021278977261057918, + 0.00021278977261057918, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07444505074194495, + 0.07444505074194495, + 0.05126333, + 0.05132134354540277, + 0.23480054855346666, + 0.05132134354540277, + 0.0010359569885102758, + 0.4115710748093466, + 0.4115710748093466, + 0.0, + 0.0, + 0.004975645244121548, + 0.023449305857398663, + 0.178637348966939, + 0.178637348966939, + 0.0, + 0.0, + 0.001651148384969148, + 0.023449305857398663, + 0.07299553028174804, + 0.10785913169383995, + 0.0023398930472987027, + 0.42279436588287334, + 0.4490395584276742, + 0.4490395584276742, + 0.019282041043043124, + 0.019282041043043124, + 0.005926754352237494, + 0.005926754352237494, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 2.466666666666667, + "rotation": [] + }, + { + "weights": [ + 0.020980702926005623, + 0.020980702926005623, + 0.02888475, + 0.014926525, + 0.014926525, + 0.005609795876911703, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0715736331152064, + 0.0715736331152064, + 0.05126333, + 0.04719239191285199, + 0.17513885838644835, + 0.04719239191285199, + 0.0009772159658106303, + 0.3840082347393034, + 0.3840082347393034, + 0.0, + 0.0, + 0.006199576492820463, + 0.04806440942255511, + 0.19231969778026842, + 0.19231969778026842, + 0.0, + 0.0, + 0.0012367564453078157, + 0.04806440942255511, + 0.054403266949312995, + 0.10413823468344546, + 0.0013541960290500085, + 0.48549448081425234, + 0.425, + 0.425, + 0.02057078216757092, + 0.02057078216757092, + 0.006611299434942855, + 0.006611299434942855, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 2.5, + "rotation": [] + }, + { + "weights": [ + 0.02016194119517291, + 0.02016194119517291, + 0.02888475, + 0.014926525, + 0.014926525, + 0.017542697489261613, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06599379410701134, + 0.06599379410701134, + 0.05126333, + 0.04200260820133343, + 0.12009108901023857, + 0.04200260820133343, + 0.0005850224522873754, + 0.352448785305023, + 0.352448785305023, + 0.0, + 0.0, + 0.0063723179910864115, + 0.0722111454499619, + 0.1976604770336831, + 0.1976604770336831, + 0.0, + 0.0, + 0.0023316407310111174, + 0.0722111454499619, + 0.039496907378946004, + 0.10057705747229706, + 0.0012008900088923311, + 0.5136695001806528, + 0.425, + 0.425, + 0.02161426039678709, + 0.02161426039678709, + 0.005222896007554869, + 0.005222896007554869, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 2.533333333333333, + "rotation": [] + }, + { + "weights": [ + 0.018086345068046017, + 0.018086345068046017, + 0.02888475, + 0.014926525, + 0.014926525, + 0.03736524220023834, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05771123351795329, + 0.05771123351795329, + 0.05126333, + 0.038429644437772865, + 0.07906016324247628, + 0.038429644437772865, + 0.00042391824203410274, + 0.3252531362431388, + 0.3252531362431388, + 0.0, + 0.0, + 0.0044648309903485405, + 0.08754825634615757, + 0.19378662109374986, + 0.19378662109374986, + 5.110991852624073e-05, + 5.110991852624073e-05, + 0.0028753616980143944, + 0.08754825634615757, + 0.03390898874827791, + 0.09980100329433163, + 0.0018059292009898588, + 0.5166007212230135, + 0.425, + 0.425, + 0.02246063355888638, + 0.02246063355888638, + 0.003763098083436486, + 0.003763098083436486, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 2.566666666666667, + "rotation": [] + }, + { + "weights": [ + 0.015102333149739664, + 0.015102333149739664, + 0.02888475, + 0.014926525, + 0.014926525, + 0.06113277961100848, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.04904633691268305, + 0.04904633691268305, + 0.05126333, + 0.035852404995512274, + 0.054407507777214016, + 0.035852404995512274, + 0.0007549670824248871, + 0.29868340151650546, + 0.29868340151650546, + 8.330425197657725e-05, + 8.330425197657725e-05, + 0.002762636435883384, + 0.09505154309528209, + 0.20184780231543936, + 0.20184780231543936, + 0.0002407673214163098, + 0.0002407673214163098, + 0.0017790856039417635, + 0.09505154309528209, + 0.03041861823626925, + 0.09911153295210423, + 0.0014045520552567069, + 0.5065202747072489, + 0.425, + 0.425, + 0.023422039832387637, + 0.023422039832387637, + 0.005768708538796217, + 0.005768708538796217, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 2.6, + "rotation": [] + }, + { + "weights": [ + 0.01339835072202341, + 0.01339835072202341, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0835964723357132, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03411555731172493, + 0.03887128812926154, + 0.03411555731172493, + 0.0014091767703316035, + 0.27490944266319256, + 0.27490944266319256, + 0.00043627040859843985, + 0.00043627040859843985, + 0.0023060803966862796, + 0.09891145463500699, + 0.23412330406052712, + 0.23412330406052712, + 0.0003082899110657826, + 0.0003082899110657826, + 2.1061447582074506e-05, + 0.09891145463500699, + 0.025681810719626275, + 0.09792483896017068, + 0.0, + 0.4974501788616177, + 0.425, + 0.425, + 0.0245984061700957, + 0.0245984061700957, + 0.010515325489853105, + 0.010515325489853105, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 2.6333333333333333, + "rotation": [] + }, + { + "weights": [ + 0.014026177541485847, + 0.014026177541485847, + 0.02888475, + 0.014926525, + 0.014926525, + 0.10153778972370278, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03158625837184974, + 0.02791017166205813, + 0.03158625837184974, + 0.0017169681510754982, + 0.26238004437514695, + 0.26238004437514695, + 0.0005683893725342514, + 0.0005683893725342514, + 0.002595234236546923, + 0.1022411211260727, + 0.27215828852994084, + 0.27215828852994084, + 0.0003595090338162011, + 0.0003595090338162011, + 0.0, + 0.1022411211260727, + 0.022592287084885993, + 0.096691825560161, + 0.0, + 0.4958949335983818, + 0.42970628099782104, + 0.42970628099782104, + 0.025851601064205153, + 0.025851601064205153, + 0.013526851949947214, + 0.013526851949947214, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 2.6666666666666665, + "rotation": [] + }, + { + "weights": [ + 0.015063991477446888, + 0.015063991477446888, + 0.02888475, + 0.014926525, + 0.014926525, + 0.10942463747092651, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.028604676407186638, + 0.023874747242246336, + 0.028604676407186638, + 0.0024541144458843115, + 0.2608480396015302, + 0.2608480396015302, + 0.00044805855523528774, + 0.00044805855523528774, + 0.002735342936856404, + 0.10302688181400294, + 0.2929820450288907, + 0.2929820450288907, + 0.0006738844194582527, + 0.0006738844194582527, + 0.0, + 0.10302688181400294, + 0.02298280298709868, + 0.09550162681511465, + 0.0, + 0.4971315051828109, + 0.44008630939892335, + 0.44008630939892335, + 0.026533007919788344, + 0.026533007919788344, + 0.011879670540136944, + 0.011879670540136944, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 2.7, + "rotation": [] + }, + { + "weights": [ + 0.015322483384183468, + 0.015322483384183468, + 0.02888475, + 0.014926525, + 0.014926525, + 0.10183289721608157, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.026093223097957197, + 0.0307478811911174, + 0.026093223097957197, + 0.0031127163874251486, + 0.2536425873637198, + 0.2536425873637198, + 0.00030360557903934775, + 0.00030360557903934775, + 0.004957513830491472, + 0.09863520626510887, + 0.3110597785030091, + 0.3110597785030091, + 0.0012822535953351424, + 0.0012822535953351424, + 0.0, + 0.09863520626510887, + 0.02257684000900812, + 0.09086590238979879, + 0.0, + 0.49367189747946577, + 0.425, + 0.425, + 0.02596568405628203, + 0.02596568405628203, + 0.011158924549818032, + 0.011158924549818032, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 2.7333333333333334, + "rotation": [] + }, + { + "weights": [ + 0.01452593853963272, + 0.01452593853963272, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0769971774092742, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.026536365910124093, + 0.046848741344043154, + 0.026536365910124093, + 0.0027689960718687073, + 0.23658799912248324, + 0.23658799912248324, + 0.0007136607000471221, + 0.0007136607000471221, + 0.006627739007983885, + 0.0903991145747048, + 0.3432838678359983, + 0.3432838678359983, + 0.001548882467406136, + 0.001548882467406136, + 0.0, + 0.0903991145747048, + 0.021224989316293158, + 0.08937279220138272, + 0.0, + 0.47587207385471864, + 0.425, + 0.425, + 0.024422929201807282, + 0.024422929201807282, + 0.014820485801569043, + 0.014820485801569043, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 2.7666666666666666, + "rotation": [] + }, + { + "weights": [ + 0.012673506220536566, + 0.012673506220536566, + 0.02888475, + 0.014926525, + 0.014926525, + 0.04948749414512086, + 0.0002667476356561684, + 0.0002667476356561684, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03034137683557033, + 0.06146844301904948, + 0.03034137683557033, + 0.0028152211569249597, + 0.22495736266885474, + 0.22495736266885474, + 0.0012993803756710669, + 0.0012993803756710669, + 0.008505587439451893, + 0.08143851187612325, + 0.36531979186194263, + 0.36531979186194263, + 0.0015786713255303239, + 0.0015786713255303239, + 0.0016921999664711084, + 0.08143851187612325, + 0.021848200900214044, + 0.10068357416561666, + 0.0, + 0.4241633832454679, + 0.425, + 0.425, + 0.022358572653361716, + 0.022358572653361716, + 0.020119600636618468, + 0.020119600636618468, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 2.8, + "rotation": [] + }, + { + "weights": [ + 0.010904624259897633, + 0.010904624259897633, + 0.02888475, + 0.015805105918771198, + 0.015805105918771198, + 0.03227723560162951, + 0.004132012410887646, + 0.004132012410887646, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.04803617758942499, + 0.04803617758942499, + 0.05126333, + 0.03315867956497259, + 0.0671041553361075, + 0.03315867956497259, + 0.006331859435886138, + 0.22778192332812705, + 0.22778192332812705, + 0.001430763982768569, + 0.001430763982768569, + 0.012703370196478696, + 0.07383687474897926, + 0.3453224688768385, + 0.3453224688768385, + 0.0015236089272158478, + 0.0015236089272158478, + 0.008037915067481138, + 0.07383687474897926, + 0.023136865986245005, + 0.11876834141356599, + 0.0030963618840490047, + 0.34077595855508513, + 0.425, + 0.425, + 0.020618985380445196, + 0.020618985380445196, + 0.022721359586077065, + 0.022721359586077065, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 2.8333333333333335, + "rotation": [] + }, + { + "weights": [ + 0.013819295912981023, + 0.013819295912981023, + 0.03149821526770079, + 0.016984544428882597, + 0.016984544428882597, + 0.02475660262363296, + 0.012358660916132578, + 0.012358660916132578, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06920037179120944, + 0.06920037179120944, + 0.05126333, + 0.031078816410510194, + 0.0727353363377707, + 0.031078816410510194, + 0.016061227875096448, + 0.22599239434514712, + 0.22599239434514712, + 0.0002334845305553504, + 0.0002334845305553504, + 0.030523756518959975, + 0.06642057044165471, + 0.3148272889001027, + 0.3148272889001027, + 0.001237569589700017, + 0.001237569589700017, + 0.014953531264992688, + 0.06642057044165471, + 0.024559804903609397, + 0.12552124581166668, + 0.009353582773889809, + 0.25952119401523027, + 0.425, + 0.425, + 0.019737171509436185, + 0.019737171509436185, + 0.021548437087663568, + 0.021548437087663568, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 2.8666666666666667, + "rotation": [] + }, + { + "weights": [ + 0.024517856405249647, + 0.024517856405249647, + 0.05553074542965204, + 0.019026135334497856, + 0.019026135334497856, + 0.017824039076055787, + 0.023874191161511186, + 0.023874191161511186, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.11463543642312282, + 0.11463543642312282, + 0.09663351486836155, + 0.09663351486836155, + 0.05126333, + 0.02866001725196837, + 0.08991560595376145, + 0.02866001725196837, + 0.030193675522293344, + 0.20085927663104863, + 0.20085927663104863, + 0.0, + 0.0, + 0.06310557063136779, + 0.05642491435366014, + 0.3193839626652852, + 0.3193839626652852, + 0.001175217197409697, + 0.001175217197409697, + 0.024851088864462703, + 0.05642491435366014, + 0.02585499701755386, + 0.11451400518417351, + 0.011583419569901051, + 0.20768388594899845, + 0.425, + 0.425, + 0.021290322712489523, + 0.021290322712489523, + 0.02463323045521973, + 0.02463323045521973, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 2.9, + "rotation": [] + }, + { + "weights": [ + 0.039444069590951696, + 0.039444069590951696, + 0.07920010494334352, + 0.02208835173985549, + 0.02208835173985549, + 0.014794346051556707, + 0.03258609027335685, + 0.03258609027335685, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.17085974421352135, + 0.17085974421352135, + 0.11263019261615609, + 0.11263019261615609, + 0.05126333, + 0.029973598569631554, + 0.11211103745869222, + 0.029973598569631554, + 0.044547117235405095, + 0.16650947875210204, + 0.16650947875210204, + 0.0, + 0.0, + 0.0893176299120698, + 0.04562730139919684, + 0.34663055028234185, + 0.34663055028234185, + 0.002626493919108595, + 0.002626493919108595, + 0.029518867975899123, + 0.04562730139919684, + 0.02605978793331553, + 0.10986021161079397, + 0.012740196500505716, + 0.1837648813213619, + 0.425, + 0.425, + 0.024511102076087664, + 0.024511102076087664, + 0.032649334892630555, + 0.032649334892630555, + 0.056228775141785134, + 0.056228775141785134, + 0.0 + ], + "time": 2.933333333333333, + "rotation": [] + }, + { + "weights": [ + 0.05951868532491579, + 0.05951868532491579, + 0.10579568903361043, + 0.026183206375707212, + 0.026183206375707212, + 0.014861699725900363, + 0.04016182593602152, + 0.04016182593602152, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.22711201030760986, + 0.22711201030760986, + 0.12177152250494264, + 0.12177152250494264, + 0.06681897001607076, + 0.03407692871987817, + 0.14113831503050664, + 0.03407692871987817, + 0.06026979365519115, + 0.11938085587961311, + 0.11938085587961311, + 0.0, + 0.0, + 0.11499067720557955, + 0.03345019588513026, + 0.3997714115040639, + 0.3997714115040639, + 0.005962454767099451, + 0.005962454767099451, + 0.031161705510956858, + 0.03345019588513026, + 0.02564197959644451, + 0.10547431111335742, + 0.011909681132861543, + 0.18722683702196372, + 0.425, + 0.425, + 0.029564582386187133, + 0.029564582386187133, + 0.0453672772273421, + 0.0453672772273421, + 0.06395607607627868, + 0.06395607607627868, + 0.0003348777868918049 + ], + "time": 2.966666666666667, + "rotation": [] + }, + { + "weights": [ + 0.051804471111216464, + 0.051804471111216464, + 0.10326484229694408, + 0.026040629368477168, + 0.026040629368477168, + 0.01319644416524032, + 0.034680745115687354, + 0.034680745115687354, + 0.7912971587121694, + 0.7912971587121694, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.19802219872806373, + 0.19802219872806373, + 0.11974759620823405, + 0.11974759620823405, + 0.05811967309274639, + 0.03455860885960134, + 0.13893770393708924, + 0.03455860885960134, + 0.05279016627721822, + 0.09741921555732358, + 0.09741921555732358, + 0.018890543608438386, + 0.018890543608438386, + 0.10051908563898523, + 0.044260209507378495, + 0.34415798384316065, + 0.34415798384316065, + 0.02103171983873154, + 0.02103171983873154, + 0.08781175345638567, + 0.044260209507378495, + 0.025762124717438262, + 0.10042048197417014, + 0.013242351914293496, + 0.15955857105806545, + 0.425, + 0.425, + 0.0052941181181036644, + 0.0052941181181036644, + 0.039562016516214285, + 0.039562016516214285, + 0.061368299522330014, + 0.061368299522330014, + 0.0007294016757181745 + ], + "time": 3.0, + "rotation": [] + }, + { + "weights": [ + 0.038932114245281285, + 0.038932114245281285, + 0.09340798585187812, + 0.023734836245601736, + 0.023734836245601736, + 0.010942808609633203, + 0.02652390666660805, + 0.02652390666660805, + 0.8638683650214681, + 0.8638683650214681, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.15246387822110008, + 0.15246387822110008, + 0.11374343069536332, + 0.11374343069536332, + 0.05126333, + 0.033475808969034904, + 0.1287566217922028, + 0.033475808969034904, + 0.040573246685034085, + 0.08041892101367296, + 0.08041892101367296, + 0.042216355573563326, + 0.042216355573563326, + 0.07880177732024865, + 0.06031144236524891, + 0.26670469785375217, + 0.26670469785375217, + 0.037986002844713956, + 0.037986002844713956, + 0.1529533593427566, + 0.06031144236524891, + 0.024634450815972795, + 0.09233773148485579, + 0.013380939442486979, + 0.12586293394366876, + 0.425, + 0.425, + 0.004266572172797857, + 0.004266572172797857, + 0.03033475912220418, + 0.03033475912220418, + 0.05526707452219576, + 0.05526707452219576, + 0.0008230509325152374 + ], + "time": 3.033333333333333, + "rotation": [] + }, + { + "weights": [ + 0.028939949614661054, + 0.028939949614661054, + 0.08215153690959719, + 0.021762400467105418, + 0.021762400467105418, + 0.008033288323453484, + 0.019439708544606582, + 0.019439708544606582, + 0.863490792084581, + 0.863490792084581, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.11457678742839807, + 0.11457678742839807, + 0.10591618083417403, + 0.10591618083417403, + 0.05126333, + 0.03271652849160619, + 0.1170901565892355, + 0.03271652849160619, + 0.029952367999690706, + 0.06056336348078066, + 0.06056336348078066, + 0.05845288191522868, + 0.05845288191522868, + 0.06043722339506653, + 0.06945136977093552, + 0.19944819398224323, + 0.19944819398224323, + 0.056518978213093075, + 0.056518978213093075, + 0.1891137178455079, + 0.06945136977093552, + 0.020559862362486955, + 0.07592665752662069, + 0.015512078654553193, + 0.09612585268914685, + 0.425, + 0.425, + 0.00343724113117371, + 0.00343724113117371, + 0.02267495453623786, + 0.02267495453623786, + 0.05420222500000001, + 0.05420222500000001, + 0.0001319745023335746 + ], + "time": 3.066666666666667, + "rotation": [] + }, + { + "weights": [ + 0.019243901338250845, + 0.019243901338250845, + 0.06609228789096783, + 0.019803238891353263, + 0.019803238891353263, + 0.00461852319893382, + 0.013528469674998787, + 0.013528469674998787, + 0.6329277025291564, + 0.6329277025291564, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.07783211047894179, + 0.07783211047894179, + 0.09452023316352132, + 0.09452023316352132, + 0.05126333, + 0.0328203171858843, + 0.09799080703939704, + 0.0328203171858843, + 0.01947538395123999, + 0.045274323970079314, + 0.045274323970079314, + 0.0596842816613969, + 0.0596842816613969, + 0.043119320681407294, + 0.06487157254346773, + 0.13561450260735672, + 0.13561450260735672, + 0.07614335823094556, + 0.07614335823094556, + 0.17208337301299675, + 0.06487157254346773, + 0.013637005715143096, + 0.053053448473413714, + 0.025821713535558594, + 0.06671334544108017, + 0.425, + 0.425, + 0.002865637195961813, + 0.002865637195961813, + 0.015440435716438845, + 0.015440435716438845, + 0.05420222500000001, + 0.05420222500000001, + 1.841952048596974e-05 + ], + "time": 3.1, + "rotation": [] + }, + { + "weights": [ + 0.009927336480341787, + 0.009927336480341787, + 0.043918912093452826, + 0.017598169263614547, + 0.017598169263614547, + 0.0031826895718671784, + 0.007964619038639213, + 0.007964619038639213, + 0.17377860585942825, + 0.17377860585942825, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07768602010192102, + 0.07768602010192102, + 0.05126333, + 0.03341074732212213, + 0.06966334949180379, + 0.03341074732212213, + 0.009495384902685405, + 0.06076565599588504, + 0.06076565599588504, + 0.0466940520207087, + 0.0466940520207087, + 0.023931028585450154, + 0.04446904122639367, + 0.0676069396161505, + 0.0676069396161505, + 0.0829473115052698, + 0.0829473115052698, + 0.1148685169736949, + 0.04446904122639367, + 0.00660223434976979, + 0.03387087507439507, + 0.03610920721474957, + 0.03387187561261, + 0.425, + 0.425, + 0.0029277244154794664, + 0.0029277244154794664, + 0.006880343924941752, + 0.006880343924941752, + 0.05420222500000001, + 0.05420222500000001, + 0.0011935222501150604 + ], + "time": 3.1333333333333333, + "rotation": [] + }, + { + "weights": [ + 0.005745299579385585, + 0.005745299579385585, + 0.02888475, + 0.015879742426178296, + 0.015879742426178296, + 0.004559251255526831, + 0.0038282198361976375, + 0.0038282198361976375, + 0.06600771308220017, + 0.06600771308220017, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05998337776229086, + 0.05998337776229086, + 0.05126333, + 0.03372427303645712, + 0.040960580105684215, + 0.03372427303645712, + 0.0035523087829731526, + 0.11490809326573284, + 0.11490809326573284, + 0.028166538732392426, + 0.028166538732392426, + 0.011210492239618775, + 0.021630451957105966, + 0.022337503480363834, + 0.022337503480363834, + 0.06632338892820536, + 0.06632338892820536, + 0.05408939103234783, + 0.021630451957105966, + 0.010718396677046396, + 0.028003137856721854, + 0.03854745686966544, + 0.009022234739089485, + 0.425, + 0.425, + 0.004303724678590587, + 0.004303724678590587, + 0.0005160211319369908, + 0.0005160211319369908, + 0.05420222500000001, + 0.05420222500000001, + 0.0020065872872970535 + ], + "time": 3.1666666666666665, + "rotation": [] + }, + { + "weights": [ + 0.007462122866845855, + 0.007462122866845855, + 0.02888475, + 0.014969942401501358, + 0.014969942401501358, + 0.00653099347742236, + 0.0021912808931071523, + 0.0021912808931071523, + 0.006465500669029916, + 0.006465500669029916, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.046105904874865364, + 0.046105904874865364, + 0.05126333, + 0.0334185781439868, + 0.02077030424804102, + 0.0334185781439868, + 0.0016897223010535656, + 0.17511137473872113, + 0.17511137473872113, + 0.01491759311939988, + 0.01491759311939988, + 0.007297729601209255, + 0.011066501037578792, + 0.010221483284721559, + 0.010221483284721559, + 0.03763226290556543, + 0.03763226290556543, + 0.02090097526734579, + 0.011066501037578792, + 0.023908959143624002, + 0.02670085934123821, + 0.038445038631254286, + 0.0, + 0.425, + 0.425, + 0.006884179925234338, + 0.006884179925234338, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.000747826957733047 + ], + "time": 3.2, + "rotation": [] + }, + { + "weights": [ + 0.012029679518725184, + 0.012029679518725184, + 0.02888475, + 0.014926525, + 0.014926525, + 0.007565569664750776, + 0.0034040457236447484, + 0.0034040457236447484, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03286843703563144, + 0.010132197482245302, + 0.03286843703563144, + 0.0014346187368833587, + 0.2061086421566349, + 0.2061086421566349, + 0.009525922025953013, + 0.009525922025953013, + 0.010121515499694003, + 0.014429173206112204, + 0.022621167504361685, + 0.022621167504361685, + 0.016243824575628542, + 0.016243824575628542, + 0.009208342419671152, + 0.014429173206112204, + 0.0378991164267063, + 0.022575915658048208, + 0.045956527654613735, + 0.0, + 0.425, + 0.425, + 0.009711033419838968, + 0.009711033419838968, + 0.0002807571153555596, + 0.0002807571153555596, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 3.2333333333333334, + "rotation": [] + }, + { + "weights": [ + 0.015209139936736643, + 0.015209139936736643, + 0.02888475, + 0.014926525, + 0.014926525, + 0.00837017308388437, + 0.0041789479620222515, + 0.0041789479620222515, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.031929646265117774, + 0.003831943230969562, + 0.031929646265117774, + 0.0, + 0.21112977734633842, + 0.21112977734633842, + 0.009666297510266297, + 0.009666297510266297, + 0.008734063804149624, + 0.021718562114983787, + 0.02424634168190614, + 0.02424634168190614, + 0.0066408823111227516, + 0.0066408823111227516, + 0.005466234910168814, + 0.021718562114983787, + 0.042426262583051384, + 0.015645055738942953, + 0.05932433466826163, + 0.0, + 0.425, + 0.425, + 0.011711405898843485, + 0.011711405898843485, + 0.0010257506743073456, + 0.0010257506743073456, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 3.2666666666666666, + "rotation": [] + }, + { + "weights": [ + 0.01765751133539846, + 0.01765751133539846, + 0.02888475, + 0.014926525, + 0.014926525, + 0.009944760054349893, + 0.003971683613157697, + 0.003971683613157697, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03083088115159375, + 0.0007873740366526997, + 0.03083088115159375, + 0.0, + 0.20660505379949284, + 0.20660505379949284, + 0.011929188370704644, + 0.011929188370704644, + 0.006555097337279997, + 0.02729075477857673, + 0.02270189821720122, + 0.02270189821720122, + 0.002313142216631342, + 0.002313142216631342, + 0.0015304101497999245, + 0.02729075477857673, + 0.041747877853257294, + 0.012167361112577567, + 0.07008133796708921, + 0.0, + 0.425, + 0.425, + 0.012751581498554768, + 0.012751581498554768, + 0.0022240266736064623, + 0.0022240266736064623, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 3.3, + "rotation": [] + }, + { + "weights": [ + 0.018735741265118115, + 0.018735741265118115, + 0.02888475, + 0.014926525, + 0.014926525, + 0.011439577064343854, + 0.003226234916863695, + 0.003226234916863695, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03014302370041029, + 8.527270385197184e-05, + 0.03014302370041029, + 0.0, + 0.1963372937270572, + 0.1963372937270572, + 0.014790030238883829, + 0.014790030238883829, + 0.005336051434278484, + 0.029829572087952054, + 0.02155243589409759, + 0.02155243589409759, + 0.0002268806099891658, + 0.0002268806099891658, + 0.0, + 0.029829572087952054, + 0.03645455400858605, + 0.010027170713458737, + 0.0775928967765399, + 0.0035386299448353885, + 0.425, + 0.425, + 0.012958000962223317, + 0.012958000962223317, + 0.003984366290803464, + 0.003984366290803464, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 3.3333333333333335, + "rotation": [] + }, + { + "weights": [ + 0.018161620652036997, + 0.018161620652036997, + 0.02888475, + 0.014926525, + 0.014926525, + 0.012253174185752861, + 0.002295452841956699, + 0.002295452841956699, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02985561350928306, + 0.00029859202248709517, + 0.02985561350928306, + 0.0, + 0.183093257674149, + 0.183093257674149, + 0.016950422269957396, + 0.016950422269957396, + 0.004875471336500983, + 0.02925402325178894, + 0.021231313848069724, + 0.021231313848069724, + 0.0, + 0.0, + 0.0, + 0.02925402325178894, + 0.03013566051210674, + 0.007510174172265184, + 0.08428722258125028, + 0.0066854780273778065, + 0.425, + 0.425, + 0.012471715978213713, + 0.012471715978213713, + 0.005688658662672551, + 0.005688658662672551, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 3.3666666666666667, + "rotation": [] + }, + { + "weights": [ + 0.017305569909512986, + 0.017305569909512986, + 0.02888475, + 0.014926525, + 0.014926525, + 0.012057879886456891, + 0.001748854061588644, + 0.001748854061588644, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.029784094694293564, + 0.0007344949756349833, + 0.029784094694293564, + 0.0011191629571840162, + 0.17984815554959424, + 0.17984815554959424, + 0.019294843822717657, + 0.019294843822717657, + 0.004455329477787016, + 0.028362210499388817, + 0.01846830160490103, + 0.01846830160490103, + 0.0, + 0.0, + 0.0, + 0.028362210499388817, + 0.026816787400415952, + 0.004358795402305464, + 0.09689965575933451, + 0.009351572820118491, + 0.425, + 0.425, + 0.012241505984749107, + 0.012241505984749107, + 0.006895005878593237, + 0.006895005878593237, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 3.4, + "rotation": [] + }, + { + "weights": [ + 0.0171274199815733, + 0.0171274199815733, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0115324461034366, + 0.0015718204568007151, + 0.0015718204568007151, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.029771264528413492, + 0.0006325171334402899, + 0.029771264528413492, + 0.0015805459365115628, + 0.12700073757341923, + 0.12700073757341923, + 0.014602002961294982, + 0.014602002961294982, + 0.003110225158078328, + 0.019559385084680136, + 0.011338543317147658, + 0.011338543317147658, + 0.0, + 0.0, + 0.0, + 0.019559385084680136, + 0.01844705956322805, + 0.001636773177555628, + 0.07424034961632317, + 0.007673009783029552, + 0.425, + 0.425, + 0.008537468309913357, + 0.008537468309913357, + 0.005426458290645052, + 0.005426458290645052, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 3.433333333333333, + "rotation": [] + }, + { + "weights": [ + 0.01823302576584474, + 0.01823302576584474, + 0.02888475, + 0.014926525, + 0.014926525, + 0.01138993533594267, + 0.0015398824121803036, + 0.0015398824121803036, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.029579001338178083, + 0.0001348431621279034, + 0.029579001338178083, + 0.0015485388226807108, + 0.06160655485732211, + 0.06160655485732211, + 0.00756829228145735, + 0.00756829228145735, + 0.0017487624287605271, + 0.009127317922455917, + 0.004946989076478137, + 0.004946989076478137, + 0.00010275872690337044, + 0.00010275872690337044, + 7.765014788934167e-05, + 0.009127317922455917, + 0.00888293034264019, + 0.00020780097161020506, + 0.03748651483229226, + 0.004215947815350122, + 0.425, + 0.425, + 0.004125195430857792, + 0.004125195430857792, + 0.003063826215054306, + 0.003063826215054306, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 3.466666666666667, + "rotation": [] + }, + { + "weights": [ + 0.020018942042120853, + 0.020018942042120853, + 0.02888475, + 0.014926525, + 0.014926525, + 0.01174154952168464, + 0.0013335658037768934, + 0.0013335658037768934, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.029277127015627447, + 0.0, + 0.029277127015627447, + 0.0016314297116228503, + 0.017814259443964253, + 0.017814259443964253, + 0.002571046505655558, + 0.002571046505655558, + 0.0008087799804551253, + 0.0023177605122327765, + 0.0015657071343490034, + 0.0015657071343490034, + 0.00012917808123997273, + 0.00012917808123997273, + 0.0004185548983514307, + 0.0023177605122327765, + 0.0023100181775433637, + 0.0, + 0.010921563676425374, + 0.001882087375436508, + 0.425, + 0.425, + 0.001226495674678256, + 0.001226495674678256, + 0.0011393993081791046, + 0.0011393993081791046, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 3.5, + "rotation": [] + }, + { + "weights": [ + 0.02165176969553742, + 0.02165176969553742, + 0.02888475, + 0.014926525, + 0.014926525, + 0.012222209147044583, + 0.0010829581945602377, + 0.0010829581945602377, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02918039979980945, + 3.2461047172546386e-05, + 0.02918039979980945, + 0.001957024148266229, + 0.027900221177509836, + 0.027900221177509836, + 0.003907295886959346, + 0.003907295886959346, + 0.0012805523829800738, + 0.0038282084358589974, + 0.00265804176884038, + 0.00265804176884038, + 0.00013485810586384356, + 0.00013485810586384356, + 0.0005111509189009663, + 0.0038282084358589974, + 0.003724845754248753, + 1.3153084686824228e-05, + 0.016971228122711172, + 0.0029312763575996656, + 0.425, + 0.425, + 0.0019096839555672227, + 0.0019096839555672227, + 0.0015463371415223386, + 0.0015463371415223386, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 3.533333333333333, + "rotation": [] + }, + { + "weights": [ + 0.02253462565796715, + 0.02253462565796715, + 0.02888475, + 0.014926525, + 0.014926525, + 0.01287731177040508, + 0.001073959197050758, + 0.001073959197050758, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02937904877623762, + 0.0, + 0.02937904877623762, + 0.0023578431656850222, + 0.027699484186513065, + 0.027699484186513065, + 0.003911757503237041, + 0.003911757503237041, + 0.001310459226369857, + 0.003773951530456541, + 0.002680840705122265, + 0.002680840705122265, + 0.00012066464338983797, + 0.00012066464338983797, + 0.0006772416963108944, + 0.003773951530456541, + 0.003693731044019969, + 6.900359477315625e-05, + 0.017043478403772617, + 0.0033085176561559932, + 0.425, + 0.425, + 0.0018751984664372022, + 0.0018751984664372022, + 0.0014406818630439884, + 0.0014406818630439884, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 3.566666666666667, + "rotation": [] + }, + { + "weights": [ + 0.022126812221748476, + 0.022126812221748476, + 0.02888475, + 0.014926525, + 0.014926525, + 0.013769974559545508, + 0.001426528427483779, + 0.001426528427483779, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02927330305835451, + 0.0, + 0.02927330305835451, + 0.0029130899813026175, + 0.028266324060303806, + 0.028266324060303806, + 0.0038310256174632464, + 0.0038310256174632464, + 0.0012261109266962318, + 0.0037064630218914553, + 0.002575286499091556, + 0.002575286499091556, + 0.0001960111462644166, + 0.0001960111462644166, + 0.00096737779410822, + 0.0037064630218914553, + 0.004023525395563669, + 6.661780178546893e-05, + 0.01789409961019242, + 0.0038330613608871167, + 0.425, + 0.425, + 0.0018810295122010355, + 0.0018810295122010355, + 0.0014834659120866222, + 0.0014834659120866222, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 3.6, + "rotation": [] + }, + { + "weights": [ + 0.01843492104006664, + 0.01843492104006664, + 0.02888475, + 0.014926525, + 0.014926525, + 0.014492140071732648, + 0.002554480312392114, + 0.002554480312392114, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.028677112548302918, + 0.0, + 0.028677112548302918, + 0.0034171004280714036, + 0.029852284363337908, + 0.029852284363337908, + 0.0037248249990599475, + 0.0037248249990599475, + 0.0010301003498690464, + 0.003777738958597181, + 0.0023500233143568024, + 0.0023500233143568024, + 0.0005878435022064613, + 0.0005878435022064613, + 0.0012045385196272809, + 0.003777738958597181, + 0.004798840795244487, + 0.0003662137687206263, + 0.020235563261168328, + 0.004195916439805709, + 0.425, + 0.425, + 0.0019259409691606236, + 0.0019259409691606236, + 0.00140502244234085, + 0.00140502244234085, + 0.05420222500000001, + 0.05420222500000001, + 7.398964038916991e-05 + ], + "time": 3.6333333333333333, + "rotation": [] + }, + { + "weights": [ + 0.011984123316194323, + 0.011984123316194323, + 0.02888475, + 0.014926525, + 0.014926525, + 0.014366014621087475, + 0.003707093472725577, + 0.003707093472725577, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02803002957024165, + 9.025318281991127e-05, + 0.02803002957024165, + 0.002422793708475572, + 0.03254885247775485, + 0.03254885247775485, + 0.0037895579423223207, + 0.0037895579423223207, + 0.0009220691451004568, + 0.0040282759921891325, + 0.002400012090802191, + 0.002400012090802191, + 0.00141607638980661, + 0.00141607638980661, + 0.001287457152668918, + 0.0040282759921891325, + 0.005485541735376628, + 0.0013820434468133098, + 0.02421416044235228, + 0.004014965434159549, + 0.425, + 0.425, + 0.0020008996256760175, + 0.0020008996256760175, + 0.0010930845726813583, + 0.0010930845726813583, + 0.05420222500000001, + 0.05420222500000001, + 0.00024380093174321293 + ], + "time": 3.6666666666666665, + "rotation": [] + }, + { + "weights": [ + 0.006474360105182439, + 0.006474360105182439, + 0.02888475, + 0.015922601574784687, + 0.015922601574784687, + 0.014937546317066456, + 0.003974620552201354, + 0.003974620552201354, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02689265647938694, + 0.000369997578007834, + 0.02689265647938694, + 0.0, + 0.035754530387265324, + 0.035754530387265324, + 0.003943569877317971, + 0.003943569877317971, + 0.0008402253261634274, + 0.0045108432961361725, + 0.0032071657798119933, + 0.0032071657798119933, + 0.0033441729577524297, + 0.0033441729577524297, + 0.0011818486558539515, + 0.0045108432961361725, + 0.005634440971272329, + 0.003222721336143355, + 0.028020215715680787, + 0.003472638194050106, + 0.425, + 0.425, + 0.002028808436223438, + 0.002028808436223438, + 0.0007771053324852666, + 0.0007771053324852666, + 0.05420222500000001, + 0.05420222500000001, + 0.0004401685936110357 + ], + "time": 3.7, + "rotation": [] + }, + { + "weights": [ + 0.003403682820498941, + 0.003403682820498941, + 0.02888475, + 0.017836556477757178, + 0.017836556477757178, + 0.014964104124477923, + 0.0042543069193405735, + 0.0042543069193405735, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.024599098060636176, + 0.001142359699521745, + 0.024599098060636176, + 0.0, + 0.03667100842509949, + 0.03667100842509949, + 0.004134892957551137, + 0.004134892957551137, + 0.0013318168478352673, + 0.005131683977586879, + 0.005439812317490573, + 0.005439812317490573, + 0.006841085074203351, + 0.006841085074203351, + 0.003028319206620964, + 0.005131683977586879, + 0.004800891237599506, + 0.005073410208736145, + 0.027624303145068016, + 0.0028265985846519454, + 0.425, + 0.425, + 0.0019688327653067444, + 0.0019688327653067444, + 0.0006404652127197806, + 0.0006404652127197806, + 0.05420222500000001, + 0.05420222500000001, + 0.000847094133496284 + ], + "time": 3.7333333333333334, + "rotation": [] + }, + { + "weights": [ + 0.0016151408797928251, + 0.0016151408797928251, + 0.029731265987668704, + 0.018253477556915962, + 0.018253477556915962, + 0.01663737999541418, + 0.005183787138334339, + 0.005183787138334339, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.022700107808447903, + 0.0033563050968306385, + 0.022700107808447903, + 0.0, + 0.03482643340315136, + 0.03482643340315136, + 0.003985721330557549, + 0.003985721330557549, + 0.0022418771897043483, + 0.006456913501024243, + 0.010083136388233722, + 0.010083136388233722, + 0.008967258887631549, + 0.008967258887631549, + 0.006283038090914484, + 0.006456913501024243, + 0.003568380262170517, + 0.007214881532958572, + 0.020268729541982913, + 0.0032155198497431595, + 0.425, + 0.425, + 0.0019072405568190975, + 0.0019072405568190975, + 0.000625664666295051, + 0.000625664666295051, + 0.05420222500000001, + 0.05420222500000001, + 0.0016303386805312965 + ], + "time": 3.7666666666666666, + "rotation": [] + }, + { + "weights": [ + 0.0006038320383855266, + 0.0006038320383855266, + 0.03289350068994929, + 0.017176792185772484, + 0.017176792185772484, + 0.018279188126325598, + 0.007642003887199924, + 0.007642003887199924, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.047783565601067855, + 0.047783565601067855, + 0.05126333, + 0.022747368011979713, + 0.0025162281308855265, + 0.022747368011979713, + 0.002150237467139957, + 0.022491174765995547, + 0.022491174765995547, + 0.0031417973797236154, + 0.0031417973797236154, + 0.00024497193949562634, + 0.005096887882266719, + 0.0014368943444319831, + 0.0014368943444319831, + 0.006416494782481871, + 0.006416494782481871, + 0.005786745526960911, + 0.005096887882266719, + 0.0015793503395148665, + 0.005659074006336069, + 0.009414493324501163, + 0.0, + 0.425, + 0.425, + 0.0010535152171339288, + 0.0010535152171339288, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.0023820795917085225 + ], + "time": 3.8, + "rotation": [] + }, + { + "weights": [ + 0.001097532920539377, + 0.001097532920539377, + 0.0366072648337909, + 0.015572430832596506, + 0.015572430832596506, + 0.021680542081594457, + 0.011717191997117222, + 0.011717191997117222, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05667755896491661, + 0.05667755896491661, + 0.05126333, + 0.02376581767609562, + 0.02158407941034861, + 0.02376581767609562, + 0.007704415292079955, + 0.05392135847892077, + 0.05392135847892077, + 0.002948450941592453, + 0.002948450941592453, + 0.015930344504969447, + 0.0176065515407494, + 0.09063564194100238, + 0.09063564194100238, + 0.008335383875029422, + 0.008335383875029422, + 0.02070400519030434, + 0.0176065515407494, + 0.003846155937228881, + 0.018582120750631592, + 0.010016514552491045, + 0.023916281930037888, + 0.425, + 0.425, + 0.004828553450959066, + 0.004828553450959066, + 0.005737076375101289, + 0.005737076375101289, + 0.05420222500000001, + 0.05420222500000001, + 0.0029016410931944833 + ], + "time": 3.8333333333333335, + "rotation": [] + }, + { + "weights": [ + 0.007197442464530461, + 0.007197442464530461, + 0.04050517518605502, + 0.014926525, + 0.014926525, + 0.023573241489274147, + 0.016860423902315742, + 0.016860423902315742, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07147455423005986, + 0.07147455423005986, + 0.05126333, + 0.024544590624139308, + 0.0503153369426727, + 0.024544590624139308, + 0.01608338195032306, + 0.09629991380231716, + 0.09629991380231716, + 0.0024706188557403414, + 0.0024706188557403414, + 0.0435788995666163, + 0.035403500114168415, + 0.23085876220038945, + 0.23085876220038945, + 0.01131644064826624, + 0.01131644064826624, + 0.037581773442881425, + 0.035403500114168415, + 0.0071994112644876715, + 0.035382190218993574, + 0.01587997246001447, + 0.08041264450975821, + 0.425, + 0.425, + 0.011069076214517859, + 0.011069076214517859, + 0.01605514703584568, + 0.01605514703584568, + 0.05420222500000001, + 0.05420222500000001, + 0.0023918575208101943 + ], + "time": 3.8666666666666667, + "rotation": [] + }, + { + "weights": [ + 0.018095757705824705, + 0.018095757705824705, + 0.04963893805231364, + 0.014926525, + 0.014926525, + 0.023410777428320463, + 0.021673430582242338, + 0.021673430582242338, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.09173188143010645, + 0.09173188143010645, + 0.0907054364149059, + 0.0907054364149059, + 0.05126333, + 0.025851333453010827, + 0.08002901162419998, + 0.025851333453010827, + 0.022908988515181188, + 0.1232994624972343, + 0.1232994624972343, + 0.0014185684701161715, + 0.0014185684701161715, + 0.07240070023706976, + 0.04913336661245139, + 0.3548477435963493, + 0.3548477435963493, + 0.011355508996972012, + 0.011355508996972012, + 0.04411050356924531, + 0.04913336661245139, + 0.010296122623341418, + 0.05031375169754026, + 0.015412658729723515, + 0.14849834727389466, + 0.425, + 0.425, + 0.017389113664627066, + 0.017389113664627066, + 0.02832897856831549, + 0.02832897856831549, + 0.05420222500000001, + 0.05420222500000001, + 0.0002563483480896264 + ], + "time": 3.9, + "rotation": [] + }, + { + "weights": [ + 0.03006284082574502, + 0.03006284082574502, + 0.05694654690367833, + 0.014926525, + 0.014926525, + 0.021902352039303085, + 0.02635640980941907, + 0.02635640980941907, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.12552233128143203, + 0.12552233128143203, + 0.10256060601345124, + 0.10256060601345124, + 0.055367451427238285, + 0.030678055807948097, + 0.09647253734724859, + 0.030678055807948097, + 0.02641084627913575, + 0.12021008729934679, + 0.12021008729934679, + 0.0010094347170421043, + 0.0010094347170421043, + 0.08753992979015612, + 0.049796848690935515, + 0.4039875260421205, + 0.4039875260421205, + 0.009185408401702129, + 0.009185408401702129, + 0.040128085389733274, + 0.049796848690935515, + 0.012031596473285125, + 0.058281491696834546, + 0.011639810566391262, + 0.1884400991456849, + 0.425, + 0.425, + 0.02127675190567969, + 0.02127675190567969, + 0.03820995893329379, + 0.03820995893329379, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 3.933333333333333, + "rotation": [] + }, + { + "weights": [ + 0.0439658080360719, + 0.0439658080360719, + 0.06442481290016853, + 0.014926525, + 0.014926525, + 0.018631992063352025, + 0.03087013858769619, + 0.03087013858769619, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.15884587719504317, + 0.15884587719504317, + 0.10978391622858377, + 0.10978391622858377, + 0.06387172623404429, + 0.03890486620366571, + 0.10176439676965986, + 0.03890486620366571, + 0.026875713547425586, + 0.0870653687417505, + 0.0870653687417505, + 0.000801158569220985, + 0.000801158569220985, + 0.09153036407061974, + 0.03854571591530523, + 0.3860847210032595, + 0.3860847210032595, + 0.003949936718813009, + 0.003949936718813009, + 0.024047884568571983, + 0.03854571591530523, + 0.012363725262028825, + 0.059251595735549896, + 0.0030751795534576746, + 0.20858242524521683, + 0.425, + 0.425, + 0.0230165229141712, + 0.0230165229141712, + 0.04633981592953201, + 0.04633981592953201, + 0.05810549659311019, + 0.05810549659311019, + 0.00019509518252951597 + ], + "time": 3.966666666666667, + "rotation": [] + }, + { + "weights": [ + 0.04102736478861494, + 0.04102736478861494, + 0.05683747858087825, + 0.02070032633174975, + 0.02070032633174975, + 0.018015129217992, + 0.026724811239472117, + 0.026724811239472117, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.13768581430129948, + 0.13768581430129948, + 0.09809189094015111, + 0.09809189094015111, + 0.05412756174118535, + 0.04003224748585901, + 0.10611350287466628, + 0.04003224748585901, + 0.022301545044380287, + 0.13147193731580437, + 0.13147193731580437, + 0.00010157984217527452, + 0.00010157984217527452, + 0.07830806753064688, + 0.03986117557324716, + 0.33088323385222784, + 0.33088323385222784, + 0.002770261995646415, + 0.002770261995646415, + 0.020059804340913114, + 0.03986117557324716, + 0.023560902214780126, + 0.06724904036096158, + 0.002610559545305313, + 0.2608077126980637, + 0.4277244204282758, + 0.4277244204282758, + 0.0073545655846028015, + 0.0073545655846028015, + 0.039003932828970564, + 0.039003932828970564, + 0.05871778831079625, + 0.05871778831079625, + 3.6498176909613025e-06 + ], + "time": 4.0, + "rotation": [] + }, + { + "weights": [ + 0.034995793107719615, + 0.034995793107719615, + 0.04460224425863648, + 0.01930082841593583, + 0.01930082841593583, + 0.02643226530580291, + 0.020827166492208102, + 0.020827166492208102, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.10675644806275755, + 0.10675644806275755, + 0.08255691944311051, + 0.08255691944311051, + 0.05126333, + 0.038640796606029745, + 0.09869563874744228, + 0.038640796606029745, + 0.017383085584844478, + 0.17568116320031005, + 0.17568116320031005, + 2.652676610187393e-05, + 2.652676610187393e-05, + 0.06391144846166871, + 0.047928733733438256, + 0.2820554476266811, + 0.2820554476266811, + 0.002532090690164336, + 0.002532090690164336, + 0.0168400929690826, + 0.047928733733438256, + 0.02864220965476261, + 0.07153398112172166, + 0.0033756766929512955, + 0.31827377770628223, + 0.425, + 0.425, + 0.01102477783021472, + 0.01102477783021472, + 0.03329648547229308, + 0.03329648547229308, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 4.033333333333333, + "rotation": [] + }, + { + "weights": [ + 0.030658965132066153, + 0.030658965132066153, + 0.034093882968383143, + 0.017938364432623723, + 0.017938364432623723, + 0.04056780492620806, + 0.015636702912992646, + 0.015636702912992646, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.08095928624804523, + 0.08095928624804523, + 0.06777194075818563, + 0.06777194075818563, + 0.05126333, + 0.040405081718095676, + 0.08208288567406785, + 0.040405081718095676, + 0.0131926165353174, + 0.18528852130685514, + 0.18528852130685514, + 0.0, + 0.0, + 0.05254375690328213, + 0.055910033572997314, + 0.28900870392365074, + 0.28900870392365074, + 0.0022312176679926228, + 0.0022312176679926228, + 0.0125541467006717, + 0.055910033572997314, + 0.023638291284441934, + 0.06855227674224541, + 0.002963425107300283, + 0.37626615045326073, + 0.425, + 0.425, + 0.013648736932873717, + 0.013648736932873717, + 0.044951127353789505, + 0.044951127353789505, + 0.05420222500000001, + 0.05420222500000001, + 9.954535801495762e-05 + ], + "time": 4.066666666666666, + "rotation": [] + }, + { + "weights": [ + 0.024526688438795838, + 0.024526688438795838, + 0.029783897367971254, + 0.016553963048499425, + 0.016553963048499425, + 0.04502008287679579, + 0.010343482644696308, + 0.010343482644696308, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.056395088570813275, + 0.056395088570813275, + 0.07468535197632648, + 0.051230403479366034, + 0.06807051718235012, + 0.051230403479366034, + 0.007059578370258555, + 0.16104370267263465, + 0.16104370267263465, + 0.0, + 0.0, + 0.06548776752891984, + 0.058386408040920844, + 0.36723607838153804, + 0.36723607838153804, + 0.004689583173465156, + 0.004689583173465156, + 0.008839397419776199, + 0.058386408040920844, + 0.015926748230343762, + 0.054805588782543185, + 0.0018057356597412214, + 0.4191680922820452, + 0.425, + 0.425, + 0.013540592857698592, + 0.013540592857698592, + 0.07627823198302866, + 0.07627823198302866, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 4.1, + "rotation": [] + }, + { + "weights": [ + 0.016229107271955926, + 0.016229107271955926, + 0.034574330179717644, + 0.016048839745936506, + 0.016048839745936506, + 0.031356652686689156, + 0.006077737013087126, + 0.006077737013087126, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05248413109277579, + 0.05248413109277579, + 0.1154947678536987, + 0.07309350376682618, + 0.05078848630270987, + 0.07309350376682618, + 0.0011267036244155932, + 0.10929316755419677, + 0.10929316755419677, + 0.0025038960967587306, + 0.0025038960967587306, + 0.14019649601849354, + 0.06002025059671422, + 0.486068720980566, + 0.486068720980566, + 0.017262312478202126, + 0.017262312478202126, + 0.02335009632135427, + 0.06002025059671422, + 0.010977394671565813, + 0.03227607503781714, + 0.0, + 0.4037487989007208, + 0.425, + 0.425, + 0.010321940016420108, + 0.010321940016420108, + 0.10362759536469261, + 0.10362759536469261, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 4.133333333333334, + "rotation": [] + }, + { + "weights": [ + 0.008218455099481704, + 0.008218455099481704, + 0.044963573241720366, + 0.01712685054728099, + 0.01712685054728099, + 0.013120437230990847, + 0.002525584596988495, + 0.002525584596988495, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06066173039528785, + 0.06066173039528785, + 0.13366906046411206, + 0.09526476269321776, + 0.032121266792015137, + 0.09526476269321776, + 0.0, + 0.05041691939852064, + 0.05041691939852064, + 0.011763655941605711, + 0.011763655941605711, + 0.24353416125871685, + 0.06802939153447439, + 0.5605641237472998, + 0.5605641237472998, + 0.029949566063528145, + 0.029949566063528145, + 0.08895103778264346, + 0.06802939153447439, + 0.009747293935138346, + 0.015340311252645067, + 0.0, + 0.2967822581991856, + 0.425, + 0.425, + 0.0058941209598098445, + 0.0058941209598098445, + 0.08911865288338487, + 0.08911865288338487, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 4.166666666666667, + "rotation": [] + }, + { + "weights": [ + 0.003184515731219123, + 0.003184515731219123, + 0.055817988034413756, + 0.018484233864605425, + 0.018484233864605425, + 0.004608506800568828, + 6.330440410089714e-05, + 6.330440410089714e-05, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07301387368492322, + 0.07301387368492322, + 0.11962399898058901, + 0.10849257151463196, + 0.017165382618806787, + 0.10849257151463196, + 0.0, + 0.0102727982902101, + 0.0102727982902101, + 0.030807012488630638, + 0.030807012488630638, + 0.2929456830547779, + 0.08621262959451695, + 0.556030764104152, + 0.556030764104152, + 0.027127723605276967, + 0.027127723605276967, + 0.21484944286303845, + 0.08621262959451695, + 0.01232880890217362, + 0.020326024686651553, + 0.0, + 0.15107917091493694, + 0.425, + 0.425, + 0.0027360382588420573, + 0.0027360382588420573, + 0.045494277556027654, + 0.045494277556027654, + 0.05420222500000001, + 0.05420222500000001, + 0.001250510159119659 + ], + "time": 4.2, + "rotation": [] + }, + { + "weights": [ + 0.001140935852059295, + 0.001140935852059295, + 0.06209125135626108, + 0.018686529302722382, + 0.018686529302722382, + 0.002638172251837592, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.08038926066032473, + 0.08038926066032473, + 0.09076763481966083, + 0.10974281930497709, + 0.014123901086194164, + 0.10974281930497709, + 0.0, + 0.0, + 0.0, + 0.060876756672348264, + 0.060876756672348264, + 0.2426641970872878, + 0.10721659319741379, + 0.49861032962799046, + 0.49861032962799046, + 0.012360612915030541, + 0.012360612915030541, + 0.38502233901194144, + 0.10721659319741379, + 0.010788675823381964, + 0.043785460559385134, + 0.0, + 0.04719026131289341, + 0.425, + 0.425, + 0.0016764177754521354, + 0.0016764177754521354, + 0.009916440863162266, + 0.009916440863162266, + 0.05420222500000001, + 0.05420222500000001, + 0.0018127630863870882 + ], + "time": 4.233333333333333, + "rotation": [] + }, + { + "weights": [ + 0.0005761675004448201, + 0.0005761675004448201, + 0.062190227423395396, + 0.0180935288119718, + 0.0180935288119718, + 0.0005725081477846414, + 0.0006993261498532118, + 0.0006993261498532118, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07910525852016036, + 0.07910525852016036, + 0.057765583055359934, + 0.10342640227505133, + 0.018550817200115737, + 0.10342640227505133, + 0.001689291545855147, + 0.0, + 0.0, + 0.09558874602828701, + 0.09558874602828701, + 0.14576257105384544, + 0.12451160645910664, + 0.45173250607081794, + 0.45173250607081794, + 0.002812835068574969, + 0.002812835068574969, + 0.5439263062817707, + 0.12451160645910664, + 0.005181004532745902, + 0.0704437780060938, + 0.0, + 0.0118639857641288, + 0.425, + 0.425, + 0.001637476602835314, + 0.001637476602835314, + 0.001904014205293991, + 0.001904014205293991, + 0.05420222500000001, + 0.05420222500000001, + 0.0021314739382692735 + ], + "time": 4.266666666666667, + "rotation": [] + }, + { + "weights": [ + 0.0014753540445651319, + 0.0014753540445651319, + 0.05557308409895212, + 0.017460588313125882, + 0.017460588313125882, + 0.0, + 0.003858862511281454, + 0.003858862511281454, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0722208522792373, + 0.0722208522792373, + 0.05126333, + 0.08984752499631468, + 0.02365247952086584, + 0.08984752499631468, + 0.006315452499049048, + 5.774798669985343e-05, + 5.774798669985343e-05, + 0.11892279003347664, + 0.11892279003347664, + 0.06957670024463103, + 0.12849767868007927, + 0.4290745432887756, + 0.4290745432887756, + 0.0019061239968453116, + 0.0019061239968453116, + 0.6269590216023577, + 0.12849767868007927, + 0.0008278505078383835, + 0.07967331984213416, + 0.0, + 0.004653531206505633, + 0.425, + 0.425, + 0.0012783557389463688, + 0.0012783557389463688, + 0.0026201205727245103, + 0.0026201205727245103, + 0.05420222500000001, + 0.05420222500000001, + 0.0018329359591007224 + ], + "time": 4.3, + "rotation": [] + }, + { + "weights": [ + 0.001851152495614118, + 0.001851152495614118, + 0.04781332590750283, + 0.017116157551448002, + 0.017116157551448002, + 0.0, + 0.0070471729750611915, + 0.0070471729750611915, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06323202896331034, + 0.06323202896331034, + 0.05126333, + 0.07550095404897413, + 0.024306829742022914, + 0.07550095404897413, + 0.008092601171561646, + 0.0007043515198997082, + 0.0007043515198997082, + 0.11690910969461707, + 0.11690910969461707, + 0.06931098678282321, + 0.1149641192385128, + 0.43205603786877195, + 0.43205603786877195, + 0.0018429200031927643, + 0.0018429200031927643, + 0.5757807620934074, + 0.1149641192385128, + 0.001853333520037786, + 0.06507897552634986, + 0.0, + 0.0035114611365965375, + 0.425, + 0.425, + 0.0008211757295898021, + 0.0008211757295898021, + 0.003723722696304317, + 0.003723722696304317, + 0.05420222500000001, + 0.05420222500000001, + 0.000542161693530423 + ], + "time": 4.333333333333333, + "rotation": [] + }, + { + "weights": [ + 0.004991145937570499, + 0.004991145937570499, + 0.04383510691778998, + 0.016525957042104175, + 0.016525957042104175, + 0.0020922971623284466, + 0.008665225056133095, + 0.008665225056133095, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05453798749617164, + 0.05453798749617164, + 0.05126333, + 0.06934174139584809, + 0.021005076766014086, + 0.06934174139584809, + 0.007293816349868259, + 0.0028009346021073186, + 0.0028009346021073186, + 0.09266147860458915, + 0.09266147860458915, + 0.1438685097864695, + 0.08671730607748027, + 0.46234988740512273, + 0.46234988740512273, + 0.0010625733860901419, + 0.0010625733860901419, + 0.421874777972698, + 0.08671730607748027, + 0.0018523876156125735, + 0.03834962616009369, + 0.0, + 0.008071327528783243, + 0.425, + 0.425, + 0.0011287955939769737, + 0.0011287955939769737, + 0.007240087844963577, + 0.007240087844963577, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 4.366666666666666, + "rotation": [] + }, + { + "weights": [ + 0.011101747996040745, + 0.011101747996040745, + 0.04608772077730721, + 0.015909518993877683, + 0.015909518993877683, + 0.006605463687862667, + 0.008489655896223013, + 0.008489655896223013, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.047843029669352916, + 0.047843029669352916, + 0.08158246779016082, + 0.07612751466887333, + 0.0217468163371086, + 0.07612751466887333, + 0.006599269687597237, + 0.006449082254299092, + 0.006449082254299092, + 0.0617809681168624, + 0.0617809681168624, + 0.2482097798160143, + 0.05664836189576554, + 0.5193104343754902, + 0.5193104343754902, + 0.0, + 0.0, + 0.24011533047471711, + 0.05664836189576554, + 0.0022488181080136966, + 0.019437213561364568, + 0.0, + 0.032783111876675035, + 0.425, + 0.425, + 0.0021592744705932468, + 0.0021592744705932468, + 0.023628282094640372, + 0.023628282094640372, + 0.054995406295862526, + 0.054995406295862526, + 0.0 + ], + "time": 4.4, + "rotation": [] + }, + { + "weights": [ + 0.018953843494611117, + 0.018953843494611117, + 0.050244736245700264, + 0.01534356863426072, + 0.01534356863426072, + 0.005068729604993546, + 0.00704998879560402, + 0.00704998879560402, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.04532825446778705, + 0.04532825446778705, + 0.12372452063219881, + 0.09165190745677261, + 0.027306347574506475, + 0.09165190745677261, + 0.0062011899160487275, + 0.010296532325446599, + 0.010296532325446599, + 0.03835700518318582, + 0.03835700518318582, + 0.3254633209535052, + 0.03825939670205114, + 0.5876382346664153, + 0.5876382346664153, + 0.0, + 0.0, + 0.10515298224719499, + 0.03825939670205114, + 0.004353518464735574, + 0.013392102292605798, + 0.0, + 0.08598902917334006, + 0.425, + 0.425, + 0.0031043103337287893, + 0.0031043103337287893, + 0.054158902993159605, + 0.054158902993159605, + 0.05923792116798775, + 0.05923792116798775, + 0.00025538852704422787 + ], + "time": 4.433333333333334, + "rotation": [] + }, + { + "weights": [ + 0.022714261364723945, + 0.022714261364723945, + 0.051877951302698656, + 0.01518335001864365, + 0.01518335001864365, + 0.0, + 0.005034957999097447, + 0.005034957999097447, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.045864272066637436, + 0.045864272066637436, + 0.15395215579441607, + 0.1115834743848868, + 0.03050440434898647, + 0.1115834743848868, + 0.005909283299531252, + 0.015917287208139883, + 0.015917287208139883, + 0.024788763203791194, + 0.024788763203791194, + 0.35030374697276506, + 0.035507485270500155, + 0.6493630426270618, + 0.6493630426270618, + 0.0, + 0.0, + 0.03012461864522522, + 0.035507485270500155, + 0.006189858487674166, + 0.015374502912163725, + 0.0, + 0.1597771268337964, + 0.425, + 0.425, + 0.0030964200092213475, + 0.0030964200092213475, + 0.09186579800610026, + 0.09186579800610026, + 0.05745739815413202, + 0.05745739815413202, + 0.0014401046559214582 + ], + "time": 4.466666666666667, + "rotation": [] + }, + { + "weights": [ + 0.02364977489092519, + 0.02364977489092519, + 0.048781813361815016, + 0.014998833888894489, + 0.014998833888894489, + 0.0, + 0.0037515176393623836, + 0.0037515176393623836, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.050771779300911056, + 0.050771779300911056, + 0.1628022074699401, + 0.12903840690851204, + 0.028050202301570334, + 0.12903840690851204, + 0.00401412225993616, + 0.023894701286086, + 0.023894701286086, + 0.01652375284050191, + 0.01652375284050191, + 0.32304674429552876, + 0.04132510492844239, + 0.6961881160736081, + 0.6961881160736081, + 0.0021491911262273775, + 0.0021491911262273775, + 0.0, + 0.04132510492844239, + 0.004660132633788243, + 0.020289474725723254, + 0.0, + 0.22528419792652118, + 0.425, + 0.425, + 0.0022716152880872986, + 0.0022716152880872986, + 0.13071850022034978, + 0.13071850022034978, + 0.05420222500000001, + 0.05420222500000001, + 0.002633589905287537 + ], + "time": 4.5, + "rotation": [] + }, + { + "weights": [ + 0.023539092019200313, + 0.023539092019200313, + 0.04227471788014682, + 0.014926525, + 0.014926525, + 0.0, + 0.0036684696363019067, + 0.0036684696363019067, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05572681448289323, + 0.05572681448289323, + 0.1506285982472555, + 0.13657508300883422, + 0.028785936576979483, + 0.13657508300883422, + 0.0026597103902271796, + 0.03723578540874377, + 0.03723578540874377, + 0.010705300016062593, + 0.010705300016062593, + 0.2621357074805667, + 0.04459677647267067, + 0.7360222756862635, + 0.7360222756862635, + 0.003941524454525537, + 0.003941524454525537, + 0.0, + 0.04459677647267067, + 0.001107277188982282, + 0.026515292163406083, + 0.0, + 0.27315777880804865, + 0.425, + 0.425, + 0.0014620951775993608, + 0.0014620951775993608, + 0.16534209357840665, + 0.16534209357840665, + 0.05420222500000001, + 0.05420222500000001, + 0.0033117698505520806 + ], + "time": 4.533333333333333, + "rotation": [] + }, + { + "weights": [ + 0.023444779749427512, + 0.023444779749427512, + 0.03582989914076667, + 0.014926525, + 0.014926525, + 0.0, + 0.0033977715498102546, + 0.0033977715498102546, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.059605169722012075, + 0.059605169722012075, + 0.1268856484975133, + 0.12880220093897404, + 0.04265536206109181, + 0.12880220093897404, + 0.0032939483278564023, + 0.051940560367490535, + 0.051940560367490535, + 0.008429633975028985, + 0.008429633975028985, + 0.18908877777201777, + 0.041628883459738295, + 0.7759312365736275, + 0.7759312365736275, + 0.0035929953945534553, + 0.0035929953945534553, + 0.0, + 0.041628883459738295, + 0.0, + 0.033508784164275426, + 0.0, + 0.29247306457587635, + 0.425, + 0.425, + 0.0014848610439470826, + 0.0014848610439470826, + 0.18129973528640603, + 0.18129973528640603, + 0.05420222500000001, + 0.05420222500000001, + 0.002495878748595713 + ], + "time": 4.566666666666666, + "rotation": [] + }, + { + "weights": [ + 0.021428217047027166, + 0.021428217047027166, + 0.03200888027037891, + 0.015001762765345572, + 0.015001762765345572, + 0.0, + 0.0023032393905201114, + 0.0023032393905201114, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06335776826100686, + 0.06335776826100686, + 0.0961198102150644, + 0.11183511061327792, + 0.05906736697469436, + 0.11183511061327792, + 0.004427471690412077, + 0.06752447427383487, + 0.06752447427383487, + 0.009895027992980815, + 0.009895027992980815, + 0.12408595383167259, + 0.036773341947368185, + 0.7956153622695373, + 0.7956153622695373, + 0.0012330074927636545, + 0.0012330074927636545, + 0.0, + 0.036773341947368185, + 0.0, + 0.03893460524933677, + 0.0, + 0.27442338424069523, + 0.425, + 0.425, + 0.002072630609784806, + 0.002072630609784806, + 0.1657822307731423, + 0.1657822307731423, + 0.05420222500000001, + 0.05420222500000001, + 0.0008879515209368292 + ], + "time": 4.6, + "rotation": [] + }, + { + "weights": [ + 0.01756593103387525, + 0.01756593103387525, + 0.03037902808615138, + 0.016202439527977532, + 0.016202439527977532, + 0.0, + 0.001408652262762188, + 0.001408652262762188, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06640816676829539, + 0.06640816676829539, + 0.06216437342975817, + 0.09115548846977092, + 0.06260241261550355, + 0.09115548846977092, + 0.0044798053934105775, + 0.07851438474442274, + 0.07851438474442274, + 0.011680672456111221, + 0.011680672456111221, + 0.08244498861687519, + 0.03760389903826371, + 0.7604681057589391, + 0.7604681057589391, + 0.00026649018483502465, + 0.00026649018483502465, + 0.0, + 0.03760389903826371, + 0.0, + 0.03785885066858358, + 0.0, + 0.22305705164160036, + 0.425, + 0.425, + 0.0026257884395974006, + 0.0026257884395974006, + 0.12370067510221679, + 0.12370067510221679, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 4.633333333333334, + "rotation": [] + }, + { + "weights": [ + 0.013420528253274297, + 0.013420528253274297, + 0.029478144326380306, + 0.017121547780417714, + 0.017121547780417714, + 0.00011644347437790462, + 0.0011747352845434622, + 0.0011747352845434622, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06681273196424753, + 0.06681273196424753, + 0.05126333, + 0.07265772798231665, + 0.05224768723760329, + 0.07265772798231665, + 0.005068072596830979, + 0.08225180139499047, + 0.08225180139499047, + 0.01136356921068259, + 0.01136356921068259, + 0.06795286834239955, + 0.043966802262834115, + 0.6611833299909315, + 0.6611833299909315, + 0.0010169809684157354, + 0.0010169809684157354, + 0.0028660202664988347, + 0.043966802262834115, + 0.0, + 0.03226133755275179, + 0.0, + 0.1620995825954845, + 0.425, + 0.425, + 0.0028682548605969958, + 0.0028682548605969958, + 0.07330467937780275, + 0.07330467937780275, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 4.666666666666667, + "rotation": [] + }, + { + "weights": [ + 0.010289371705480978, + 0.010289371705480978, + 0.029525889349835244, + 0.0170827807598005, + 0.0170827807598005, + 0.006335928078208647, + 0.0013840352517685709, + 0.0013840352517685709, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06681831638727866, + 0.06681831638727866, + 0.05126333, + 0.05719572023621623, + 0.04165246367454526, + 0.05719572023621623, + 0.005732375902256792, + 0.07435048014989916, + 0.07435048014989916, + 0.009083670622536108, + 0.009083670622536108, + 0.07150946067912234, + 0.050496273274932564, + 0.5348121847425185, + 0.5348121847425185, + 0.005908546197627268, + 0.005908546197627268, + 0.018188733155173904, + 0.050496273274932564, + 0.0, + 0.026581331448895573, + 0.0018093296459742946, + 0.10770431490881095, + 0.425, + 0.425, + 0.00295252813292401, + 0.00295252813292401, + 0.03482429512909478, + 0.03482429512909478, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 4.7, + "rotation": [] + }, + { + "weights": [ + 0.008121835839535503, + 0.008121835839535503, + 0.030538774601050766, + 0.016763728964028356, + 0.016763728964028356, + 0.009795262025935303, + 0.0026640261390379477, + 0.0026640261390379477, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06811800811971933, + 0.06811800811971933, + 0.05126333, + 0.046234202491385566, + 0.03636625375066482, + 0.046234202491385566, + 0.005526922683098483, + 0.057809759623237984, + 0.057809759623237984, + 0.007661887375371793, + 0.007661887375371793, + 0.0819562801292964, + 0.05384665557316368, + 0.4308660353933059, + 0.4308660353933059, + 0.011838454407240656, + 0.011838454407240656, + 0.037286599831921695, + 0.05384665557316368, + 0.0, + 0.023199504773531627, + 0.00591377605284963, + 0.06692440914256227, + 0.425, + 0.425, + 0.002887984125741889, + 0.002887984125741889, + 0.015170013558651706, + 0.015170013558651706, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 4.733333333333333, + "rotation": [] + }, + { + "weights": [ + 0.0066905906157834144, + 0.0066905906157834144, + 0.030827744305133804, + 0.016594020171375956, + 0.016594020171375956, + 0.01350352093577384, + 0.00460728537291288, + 0.00460728537291288, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06775608536388189, + 0.06775608536388189, + 0.05126333, + 0.039709016521062145, + 0.03249051775251114, + 0.039709016521062145, + 0.00480162788714681, + 0.04120006657072473, + 0.04120006657072473, + 0.007553895360657143, + 0.007553895360657143, + 0.09166452884674067, + 0.057717361886586424, + 0.3701243685824528, + 0.3701243685824528, + 0.015707753465643945, + 0.015707753465643945, + 0.05551085961716513, + 0.057717361886586424, + 0.0, + 0.020113612551774285, + 0.009119947893278935, + 0.04175074409161292, + 0.425, + 0.425, + 0.0028587112096803507, + 0.0028587112096803507, + 0.011172343284956036, + 0.011172343284956036, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 4.766666666666667, + "rotation": [] + }, + { + "weights": [ + 0.005569004134408059, + 0.005569004134408059, + 0.030928731603281818, + 0.01568951814357485, + 0.01568951814357485, + 0.018547453731298433, + 0.006825049174949522, + 0.006825049174949522, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06482596445296487, + 0.06482596445296487, + 0.05126333, + 0.03836094960570333, + 0.03134637968880788, + 0.03836094960570333, + 0.006370955359722881, + 0.033882308964218386, + 0.033882308964218386, + 0.007184388307588438, + 0.007184388307588438, + 0.09391247246946602, + 0.06031094230711456, + 0.3501133965594426, + 0.3501133965594426, + 0.016165358839290475, + 0.016165358839290475, + 0.0748712388532502, + 0.06031094230711456, + 0.0, + 0.020174360488142272, + 0.010227836987801954, + 0.040240324607917204, + 0.425, + 0.425, + 0.003186368995479172, + 0.003186368995479172, + 0.018024287931621065, + 0.018024287931621065, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 4.8, + "rotation": [] + }, + { + "weights": [ + 0.012118452494697899, + 0.012118452494697899, + 0.036746967796768434, + 0.014926525, + 0.014926525, + 0.02480130312698227, + 0.012723364062341185, + 0.012723364062341185, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.057500784901781565, + 0.057500784901781565, + 0.061966670091663054, + 0.061966670091663054, + 0.05126333, + 0.03668237222092491, + 0.03496178993156976, + 0.03668237222092491, + 0.012566291873476328, + 0.03952196533126488, + 0.03952196533126488, + 0.005601342317781275, + 0.005601342317781275, + 0.09034192774976998, + 0.058715935902936084, + 0.34705552543912593, + 0.34705552543912593, + 0.01409993778382028, + 0.01409993778382028, + 0.08862991971629001, + 0.058715935902936084, + 0.0, + 0.026928022078105362, + 0.014071339794567645, + 0.06186364857213834, + 0.425, + 0.425, + 0.005813075176307129, + 0.005813075176307129, + 0.027370238756494844, + 0.027370238756494844, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 4.833333333333333, + "rotation": [] + }, + { + "weights": [ + 0.03644028007984158, + 0.03644028007984158, + 0.05084296518138474, + 0.014926525, + 0.014926525, + 0.02911932021379469, + 0.02528014249567473, + 0.02528014249567473, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.13082091119140377, + 0.13082091119140377, + 0.05916796731097354, + 0.05916796731097354, + 0.05126333, + 0.033204831129738245, + 0.04589212366512841, + 0.033204831129738245, + 0.019281948823481786, + 0.05074217883603911, + 0.05074217883603911, + 0.0037456136729036036, + 0.0037456136729036036, + 0.09225057044199529, + 0.051285544942532235, + 0.3577653944492338, + 0.3577653944492338, + 0.012130721312548425, + 0.012130721312548425, + 0.08604996651411051, + 0.051285544942532235, + 0.00828781218401023, + 0.03867628122014657, + 0.022344608924218575, + 0.11086406239441457, + 0.425, + 0.425, + 0.011534785473985324, + 0.011534785473985324, + 0.03728651963174341, + 0.03728651963174341, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 4.866666666666666, + "rotation": [] + }, + { + "weights": [ + 0.07657819991665223, + 0.07657819991665223, + 0.07073600739240643, + 0.014926525, + 0.014926525, + 0.029147594209228224, + 0.04302217430834257, + 0.04302217430834257, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.22404992500586157, + 0.22404992500586157, + 0.05375615278525009, + 0.05375615278525009, + 0.05126333, + 0.03138765370739356, + 0.062656534739903, + 0.03138765370739356, + 0.02635318929595605, + 0.05734562538564202, + 0.05734562538564202, + 0.0023694833713982775, + 0.0023694833713982775, + 0.10256317555904382, + 0.04251987220985547, + 0.3777361822979789, + 0.3777361822979789, + 0.012038801424205294, + 0.012038801424205294, + 0.06950035861560272, + 0.04251987220985547, + 0.01647266745567321, + 0.049888233467936485, + 0.027646372041531957, + 0.16143909075430452, + 0.425, + 0.425, + 0.019021542386284885, + 0.019021542386284885, + 0.046610882851694284, + 0.046610882851694284, + 0.06256006842667816, + 0.06256006842667816, + 8.155261831624186e-05 + ], + "time": 4.9, + "rotation": [] + }, + { + "weights": [ + 0.11106823294290465, + 0.11106823294290465, + 0.08643556833267205, + 0.014926525, + 0.014926525, + 0.028684963179486107, + 0.05666121082114317, + 0.05666121082114317, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.2921758221196275, + 0.2921758221196275, + 0.050787410299692776, + 0.050787410299692776, + 0.05419251567551065, + 0.030250010612819858, + 0.08093603185244964, + 0.030250010612819858, + 0.033208760033760734, + 0.05617875941097732, + 0.05617875941097732, + 0.0018114160267370069, + 0.0018114160267370069, + 0.11282738596200935, + 0.03515095912984437, + 0.3997391543218066, + 0.3997391543218066, + 0.016102960333228104, + 0.016102960333228104, + 0.05849619890962322, + 0.03515095912984437, + 0.020323503762483576, + 0.0605826381593942, + 0.026189425374780383, + 0.1946982002684047, + 0.425, + 0.425, + 0.024881442811872264, + 0.024881442811872264, + 0.05679370359118491, + 0.05679370359118491, + 0.07059654964322803, + 0.07059654964322803, + 0.000561154474105153 + ], + "time": 4.933333333333334, + "rotation": [] + }, + { + "weights": [ + 0.14535142774028426, + 0.14535142774028426, + 0.10043454915285104, + 0.014926525, + 0.014926525, + 0.02660523152777124, + 0.06856837038482932, + 0.06856837038482932, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.346613045835069, + 0.346613045835069, + 0.04880479579525328, + 0.04880479579525328, + 0.06734314369303837, + 0.030359113083354036, + 0.10212709920746932, + 0.030359113083354036, + 0.03999865283923487, + 0.04800311364233488, + 0.04800311364233488, + 0.001914242136159113, + 0.001914242136159113, + 0.12503669708967197, + 0.028345811792782324, + 0.4268846618277683, + 0.4268846618277683, + 0.02374376207590103, + 0.02374376207590103, + 0.04798413940838399, + 0.028345811792782324, + 0.020461447536945315, + 0.07061853446066371, + 0.01861729068415505, + 0.21615309736558355, + 0.425, + 0.425, + 0.029954498543270973, + 0.029954498543270973, + 0.06784732344427272, + 0.06784732344427272, + 0.08318661948932063, + 0.08318661948932063, + 0.0005912173007215768 + ], + "time": 4.966666666666667, + "rotation": [] + }, + { + "weights": [ + 0.1305067344191071, + 0.1305067344191071, + 0.09296732456911166, + 0.020859862429835452, + 0.020859862429835452, + 0.02113223986814213, + 0.058821300643901606, + 0.058821300643901606, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.2997506962384594, + 0.2997506962384594, + 0.04743192087377407, + 0.04743192087377407, + 0.05999348348754193, + 0.03591938894657787, + 0.1347382491445864, + 0.03591938894657787, + 0.0360121820623777, + 0.06739409748642208, + 0.06739409748642208, + 0.0014446114274413394, + 0.0014446114274413394, + 0.10810043377890456, + 0.025611366783110302, + 0.4837428667877801, + 0.4837428667877801, + 0.02045222503266163, + 0.02045222503266163, + 0.03803314903725666, + 0.025611366783110302, + 0.02384052365308712, + 0.08210926049167189, + 0.014538524353585262, + 0.2802954450128027, + 0.425, + 0.425, + 0.0072425766899168, + 0.0072425766899168, + 0.07346193218983851, + 0.07346193218983851, + 0.07761300042415084, + 0.07761300042415084, + 0.0005427393755641108 + ], + "time": 5.0, + "rotation": [] + }, + { + "weights": [ + 0.10742171937156277, + 0.10742171937156277, + 0.08286702796107237, + 0.019351148519700365, + 0.019351148519700365, + 0.01608027666807172, + 0.04542125479007754, + 0.04542125479007754, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.2339311609000319, + 0.2339311609000319, + 0.04571933579810911, + 0.04571933579810911, + 0.05126333, + 0.03907873795500819, + 0.19117731809616073, + 0.03907873795500819, + 0.030373383943168856, + 0.08744130322620973, + 0.08744130322620973, + 0.003089494501196201, + 0.003089494501196201, + 0.08633039778187147, + 0.02232327021747113, + 0.5279672656740455, + 0.5279672656740455, + 0.015464417547697104, + 0.015464417547697104, + 0.02904860702831115, + 0.02232327021747113, + 0.03834501178491679, + 0.09721922005216269, + 0.011343361401841744, + 0.3585900018612541, + 0.425, + 0.425, + 0.008810562103277153, + 0.008810562103277153, + 0.0647791510713951, + 0.0647791510713951, + 0.06883575031090342, + 0.06883575031090342, + 7.1743414515538085e-06 + ], + "time": 5.033333333333333, + "rotation": [] + }, + { + "weights": [ + 0.0898055476934781, + 0.0898055476934781, + 0.07337825713413096, + 0.01775845627410003, + 0.01775845627410003, + 0.013339362825666133, + 0.034216670901514534, + 0.034216670901514534, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.17718584345919722, + 0.17718584345919722, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.039283428194799554, + 0.2486648921455654, + 0.039283428194799554, + 0.025253031329650937, + 0.10701387255851702, + 0.10701387255851702, + 0.003948709346087914, + 0.003948709346087914, + 0.06941032175506853, + 0.01657271021311833, + 0.5084767304360862, + 0.5084767304360862, + 0.011484118338142115, + 0.011484118338142115, + 0.022198300482705192, + 0.01657271021311833, + 0.06271703722221506, + 0.11519297890897297, + 0.007753750575440265, + 0.4217616895479812, + 0.425, + 0.425, + 0.01030394776218703, + 0.01030394776218703, + 0.04619663734255086, + 0.04619663734255086, + 0.06319258768167127, + 0.06319258768167127, + 0.0 + ], + "time": 5.066666666666666, + "rotation": [] + }, + { + "weights": [ + 0.07160713969774182, + 0.07160713969774182, + 0.0602600665319533, + 0.016125736937308763, + 0.016125736937308763, + 0.010218471075807284, + 0.02304698721328303, + 0.02304698721328303, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.1193280391173347, + 0.1193280391173347, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.0387409598788335, + 0.2744290599936529, + 0.0387409598788335, + 0.018122047760213398, + 0.14065398777879407, + 0.14065398777879407, + 0.0033083316426546785, + 0.0033083316426546785, + 0.05200781797369314, + 0.010230094145628645, + 0.39454031710823345, + 0.39454031710823345, + 0.0078009793268782705, + 0.0078009793268782705, + 0.017018778298404924, + 0.010230094145628645, + 0.09040373485712772, + 0.12889711571236442, + 0.0048200540599368825, + 0.44518275466703205, + 0.425, + 0.425, + 0.010952673480979025, + 0.010952673480979025, + 0.028000987494098246, + 0.028000987494098246, + 0.055754527055904564, + 0.055754527055904564, + 0.0 + ], + "time": 5.1, + "rotation": [] + }, + { + "weights": [ + 0.04892388486689851, + 0.04892388486689851, + 0.04099302669720987, + 0.014926525, + 0.014926525, + 0.003234389080685005, + 0.010965408675252208, + 0.010965408675252208, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.037441469199549965, + 0.2597102483373108, + 0.037441469199549965, + 0.008527928085769612, + 0.19578756953279167, + 0.19578756953279167, + 0.0017511781064229594, + 0.0017511781064229594, + 0.02790733983119325, + 0.00538320829661017, + 0.2134611178797725, + 0.2134611178797725, + 0.004231948684014023, + 0.004231948684014023, + 0.011723500762426209, + 0.00538320829661017, + 0.11700951361230434, + 0.13247885100898282, + 0.003309694824068722, + 0.4121849900240798, + 0.425, + 0.425, + 0.011127740060370787, + 0.011127740060370787, + 0.012483754077812218, + 0.012483754077812218, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 5.133333333333334, + "rotation": [] + }, + { + "weights": [ + 0.029332058321760602, + 0.029332058321760602, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0, + 0.0032452634691583814, + 0.0032452634691583814, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.0350764201273331, + 0.21221229383410228, + 0.0350764201273331, + 0.0011444142010367012, + 0.2481906096530811, + 0.2481906096530811, + 0.0005044697269949374, + 0.0005044697269949374, + 0.007671637279646727, + 0.0028113850035077414, + 0.06977058716726539, + 0.06977058716726539, + 0.0012507784685918252, + 0.0012507784685918252, + 0.007033281084720267, + 0.0028113850035077414, + 0.12888587159769868, + 0.11906915993562761, + 0.0031240680296810283, + 0.32672865340296087, + 0.425, + 0.425, + 0.010581140570889923, + 0.010581140570889923, + 0.0036228269559084093, + 0.0036228269559084093, + 0.05420222500000001, + 0.05420222500000001, + 0.0005667199711410364 + ], + "time": 5.166666666666667, + "rotation": [] + }, + { + "weights": [ + 0.019379167961983038, + 0.019379167961983038, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0, + 0.0004945042670457336, + 0.0004945042670457336, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.033496505457085594, + 0.1525141280013687, + 0.033496505457085594, + 0.0, + 0.2759077162774544, + 0.2759077162774544, + 0.0, + 0.0, + 0.0, + 0.001955031701268589, + 0.01170567216313613, + 0.01170567216313613, + 0.0, + 0.0, + 0.0038832099460141367, + 0.001955031701268589, + 0.12056778062667159, + 0.09533262814262078, + 0.0040432618710459466, + 0.22672962018117598, + 0.425, + 0.425, + 0.009867236524014443, + 0.009867236524014443, + 0.0012655322329730393, + 0.0012655322329730393, + 0.05420222500000001, + 0.05420222500000001, + 0.0007456370663582059 + ], + "time": 5.2, + "rotation": [] + }, + { + "weights": [ + 0.019346161053649003, + 0.019346161053649003, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0, + 0.00056342924279826, + 0.00056342924279826, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03181595774935245, + 0.10633825438363205, + 0.03181595774935245, + 0.0, + 0.26968903946025014, + 0.26968903946025014, + 0.0, + 0.0, + 0.0022160872817039478, + 0.0034886932266609983, + 0.012322397476860442, + 0.012322397476860442, + 0.0, + 0.0, + 0.0032438221054949907, + 0.0034886932266609983, + 0.09868840277194971, + 0.07075410974877216, + 0.005764419053282054, + 0.1552377475159508, + 0.425, + 0.425, + 0.009152918479272291, + 0.009152918479272291, + 0.002535540104976721, + 0.002535540104976721, + 0.05420222500000001, + 0.05420222500000001, + 0.000499256886541843 + ], + "time": 5.233333333333333, + "rotation": [] + }, + { + "weights": [ + 0.01894541936261312, + 0.01894541936261312, + 0.02888475, + 0.014938696314732687, + 0.014938696314732687, + 0.0012444325855800074, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.030040727015940797, + 0.0843277924401419, + 0.030040727015940797, + 0.00063055058874722, + 0.24543813552175237, + 0.24543813552175237, + 0.0, + 0.0, + 0.0032329549746853946, + 0.007984015318964203, + 0.01445592184151921, + 0.01445592184151921, + 0.0, + 0.0, + 0.004053808908377372, + 0.007984015318964203, + 0.07570100000926422, + 0.0547123951571328, + 0.00623835804206984, + 0.12337196809904907, + 0.425, + 0.425, + 0.008872873932123179, + 0.008872873932123179, + 0.002986633990492138, + 0.002986633990492138, + 0.05420222500000001, + 0.05420222500000001, + 0.0005845792591571803 + ], + "time": 5.266666666666667, + "rotation": [] + }, + { + "weights": [ + 0.01601271035947969, + 0.01601271035947969, + 0.02888475, + 0.014926525, + 0.014926525, + 0.004319434825863154, + 4.416533878871371e-05, + 4.416533878871371e-05, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.0275106470157361, + 0.07514126556260242, + 0.0275106470157361, + 0.0013370734240327556, + 0.21082127775464726, + 0.21082127775464726, + 0.0010861143296850573, + 0.0010861143296850573, + 0.0032646496381078423, + 0.01374225076287984, + 0.017754983210137902, + 0.017754983210137902, + 0.0, + 0.0, + 0.006414743346561275, + 0.01374225076287984, + 0.051741720523153, + 0.04197691977024076, + 0.005237584135362074, + 0.10447277746030256, + 0.425, + 0.425, + 0.008405348637274329, + 0.008405348637274329, + 0.0028933301301939133, + 0.0028933301301939133, + 0.05420222500000001, + 0.05420222500000001, + 0.0010355116799473756 + ], + "time": 5.3, + "rotation": [] + }, + { + "weights": [ + 0.011242496648005071, + 0.011242496648005071, + 0.02888475, + 0.014988936856940131, + 0.014988936856940131, + 0.008402287534305022, + 5.124504012720922e-05, + 5.124504012720922e-05, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.024921103186729292, + 0.06626491027218952, + 0.024921103186729292, + 0.002045699950706745, + 0.18035905957221976, + 0.18035905957221976, + 0.0032580665269467428, + 0.0032580665269467428, + 0.004433373894010269, + 0.017805346859885104, + 0.01878040459539208, + 0.01878040459539208, + 0.0002985622201647075, + 0.0002985622201647075, + 0.0070603073840694724, + 0.017805346859885104, + 0.03265748620033262, + 0.0346188928399767, + 0.011303797896419238, + 0.07255836815706318, + 0.425, + 0.425, + 0.007873807975224082, + 0.007873807975224082, + 0.001715357521814958, + 0.001715357521814958, + 0.05420222500000001, + 0.05420222500000001, + 0.0016560660409075862 + ], + "time": 5.333333333333333, + "rotation": [] + }, + { + "weights": [ + 0.00673111568072012, + 0.00673111568072012, + 0.02888475, + 0.01583931818659578, + 0.01583931818659578, + 0.01259379652994019, + 8.378204490457259e-05, + 8.378204490457259e-05, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.023979699896738524, + 0.05304272966725483, + 0.023979699896738524, + 0.002633546326043349, + 0.1710292047687938, + 0.1710292047687938, + 0.0051488098728337435, + 0.0051488098728337435, + 0.0068696479712213755, + 0.01910179093746201, + 0.01810756820653165, + 0.01810756820653165, + 0.001417161923434052, + 0.001417161923434052, + 0.006832379967506439, + 0.01910179093746201, + 0.02812457042081013, + 0.04145338024411879, + 0.03726594607744896, + 0.038866959192923115, + 0.425, + 0.425, + 0.007962291687726969, + 0.007962291687726969, + 0.001756076049059628, + 0.001756076049059628, + 0.05420222500000001, + 0.05420222500000001, + 0.0022190289571881283 + ], + "time": 5.366666666666666, + "rotation": [] + }, + { + "weights": [ + 0.003562287267829689, + 0.003562287267829689, + 0.03169689401984213, + 0.017060815969234873, + 0.017060815969234873, + 0.014567799866199486, + 0.0003279831726104018, + 0.0003279831726104018, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.024504350437473565, + 0.037803082466125466, + 0.024504350437473565, + 0.002734667119303983, + 0.1939855254122188, + 0.1939855254122188, + 0.005230725476784363, + 0.005230725476784363, + 0.008088942723614826, + 0.01865529210439749, + 0.0161693011011396, + 0.0161693011011396, + 0.003972019148724418, + 0.003972019148724418, + 0.0072269166154520816, + 0.01865529210439749, + 0.03832878704581939, + 0.06347178348473137, + 0.0845728748611041, + 0.019033729231783307, + 0.425, + 0.425, + 0.009138820043631956, + 0.009138820043631956, + 0.0032316003393914, + 0.0032316003393914, + 0.05420222500000001, + 0.05420222500000001, + 0.0024044365755149285 + ], + "time": 5.4, + "rotation": [] + }, + { + "weights": [ + 0.0006376027528728753, + 0.0006376027528728753, + 0.03785059441413196, + 0.017837028791348592, + 0.017837028791348592, + 0.014461316806929444, + 0.0013990103134087148, + 0.0013990103134087148, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.0246185495042743, + 0.029060355424880963, + 0.0246185495042743, + 0.0011672287447644122, + 0.23877284995147147, + 0.23877284995147147, + 0.0039278185128101255, + 0.0039278185128101255, + 0.0069425520087991405, + 0.01718039491346903, + 0.01511679829231329, + 0.01511679829231329, + 0.006158957444131372, + 0.006158957444131372, + 0.007385659976197136, + 0.01718039491346903, + 0.04879023613674298, + 0.08327684998512264, + 0.12393595640148429, + 0.014476335208330825, + 0.425, + 0.425, + 0.010780765776123313, + 0.010780765776123313, + 0.005513058908815892, + 0.005513058908815892, + 0.05420222500000001, + 0.05420222500000001, + 0.001873230189085006 + ], + "time": 5.433333333333334, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.04065911461200031, + 0.017623895566929407, + 0.017623895566929407, + 0.01435118807213646, + 0.0020742086028414097, + 0.0020742086028414097, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.023772086195471623, + 0.033120632682527795, + 0.023772086195471623, + 0.0, + 0.2778782082455497, + 0.2778782082455497, + 0.0024021955872220637, + 0.0024021955872220637, + 0.004887597901480535, + 0.017314876296690523, + 0.020075725551162424, + 0.020075725551162424, + 0.007113850329603464, + 0.007113850329603464, + 0.006309352442622181, + 0.017314876296690523, + 0.04324694403580255, + 0.0851205189313207, + 0.118454615718552, + 0.015373094326683443, + 0.425, + 0.425, + 0.012431494827781397, + 0.012431494827781397, + 0.007035610518817386, + 0.007035610518817386, + 0.05420222500000001, + 0.05420222500000001, + 0.0009206947471414288 + ], + "time": 5.466666666666667, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.040404466858931926, + 0.01695937982682432, + 0.01695937982682432, + 0.015643829426595132, + 0.0035784880763718033, + 0.0035784880763718033, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.022752534883186813, + 0.045172430191721215, + 0.022752534883186813, + 0.0011142281881932692, + 0.2845912477799823, + 0.2845912477799823, + 0.0013399229970361495, + 0.0013399229970361495, + 0.004870512762239997, + 0.020189835503697382, + 0.05518494008907246, + 0.05518494008907246, + 0.006494786191199503, + 0.006494786191199503, + 0.005528271051922011, + 0.020189835503697382, + 0.023151118095431994, + 0.06748858881848195, + 0.07349073583526267, + 0.023250749015382342, + 0.425, + 0.425, + 0.01386751326067106, + 0.01386751326067106, + 0.008933056438607825, + 0.008933056438607825, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 5.5, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.038182858058384464, + 0.017100604145141328, + 0.017100604145141328, + 0.0190853181694235, + 0.005542306974530216, + 0.005542306974530216, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.021832958361756118, + 0.050146303517477835, + 0.021832958361756118, + 0.0029703361015500753, + 0.2635876825877597, + 0.2635876825877597, + 0.0007692179349916314, + 0.0007692179349916314, + 0.006489072314330506, + 0.025851110422185478, + 0.11463710208024291, + 0.11463710208024291, + 0.004812890344432417, + 0.004812890344432417, + 0.006428561812000612, + 0.025851110422185478, + 0.005993201796497611, + 0.04588199146091935, + 0.03141920497374872, + 0.030043183373553398, + 0.425, + 0.425, + 0.014864832013845433, + 0.014864832013845433, + 0.008381924751613817, + 0.008381924751613817, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 5.533333333333333, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.03752470229353221, + 0.01839986321172305, + 0.01839986321172305, + 0.026191624360425117, + 0.00807021139854831, + 0.00807021139854831, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.04639396550624029, + 0.04639396550624029, + 0.05126333, + 0.02123369097479173, + 0.03792993187904356, + 0.02123369097479173, + 0.002940106904134153, + 0.23670948062624236, + 0.23670948062624236, + 0.001064820316221032, + 0.001064820316221032, + 0.008133525294916965, + 0.03187655322253702, + 0.15954249618308877, + 0.15954249618308877, + 0.007780591079166949, + 0.007780591079166949, + 0.007174354033278562, + 0.03187655322253702, + 0.0006957913083689513, + 0.030488852784037568, + 0.035142803351793934, + 0.02712130945708069, + 0.425, + 0.425, + 0.014946645625999986, + 0.014946645625999986, + 0.006210388562508988, + 0.006210388562508988, + 0.05420222500000001, + 0.05420222500000001, + 0.00025201237627438104 + ], + "time": 5.566666666666666, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.037845997193029925, + 0.01970835099317959, + 0.01970835099317959, + 0.033325411805084755, + 0.009662559116259212, + 0.009662559116259212, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05210084617137906, + 0.05210084617137906, + 0.05126333, + 0.022396297665402888, + 0.017253651789256495, + 0.022396297665402888, + 0.001551955266456518, + 0.22448625394276195, + 0.22448625394276195, + 0.0018050961089985703, + 0.0018050961089985703, + 0.0075790760772568785, + 0.04066078098756924, + 0.1540629652994019, + 0.1540629652994019, + 0.027947061242801784, + 0.027947061242801784, + 0.009165711567870202, + 0.04066078098756924, + 0.005574504924671986, + 0.024059015512466413, + 0.08781441019049707, + 0.01860310552375656, + 0.425, + 0.425, + 0.014811789946896681, + 0.014811789946896681, + 0.0059256063242043725, + 0.0059256063242043725, + 0.05420222500000001, + 0.05420222500000001, + 0.001519435670758996 + ], + "time": 5.6, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.03674661176545277, + 0.019992134827075, + 0.019992134827075, + 0.036657243009124464, + 0.010072729603520457, + 0.010072729603520457, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.059527731527175186, + 0.059527731527175186, + 0.05126333, + 0.025228133124788485, + 0.0033506768941879215, + 0.025228133124788485, + 0.0006046152008431292, + 0.21288517096212922, + 0.21288517096212922, + 0.0022994182817637912, + 0.0022994182817637912, + 0.00838286482862063, + 0.05154938639274663, + 0.12371027927313524, + 0.12371027927313524, + 0.05318742548780779, + 0.05318742548780779, + 0.013520363585225164, + 0.05154938639274663, + 0.013041621872356954, + 0.020826345895017882, + 0.14557252137788698, + 0.010814807457583283, + 0.425, + 0.425, + 0.014796999714204234, + 0.014796999714204234, + 0.008922249398061202, + 0.008922249398061202, + 0.05420222500000001, + 0.05420222500000001, + 0.001957914179989269 + ], + "time": 5.633333333333334, + "rotation": [] + }, + { + "weights": [ + 0.0023298529375876693, + 0.0023298529375876693, + 0.03300484386937957, + 0.019380640185856134, + 0.019380640185856134, + 0.03468928177441868, + 0.008099248652745566, + 0.008099248652745566, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06597102162029059, + 0.06597102162029059, + 0.05126333, + 0.028976576900731833, + 0.002496826648712155, + 0.028976576900731833, + 0.0007081169302442238, + 0.18382516567196155, + 0.18382516567196155, + 0.002211708671280315, + 0.002211708671280315, + 0.017599771810429425, + 0.06039968947214736, + 0.11790894003851066, + 0.11790894003851066, + 0.060878240769462896, + 0.060878240769462896, + 0.020255610266966467, + 0.06039968947214736, + 0.01801182084849902, + 0.021094492556793337, + 0.14909393574510293, + 0.006523570790886874, + 0.425, + 0.425, + 0.0142804444687707, + 0.0142804444687707, + 0.010901762039533677, + 0.010901762039533677, + 0.05420222500000001, + 0.05420222500000001, + 0.0014090426532285547 + ], + "time": 5.666666666666667, + "rotation": [] + }, + { + "weights": [ + 0.004303769607629093, + 0.004303769607629093, + 0.02888475, + 0.01824556674331188, + 0.01824556674331188, + 0.0323110415467194, + 0.005514282287497602, + 0.005514282287497602, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0710343590272324, + 0.0710343590272324, + 0.05126333, + 0.031523942088266095, + 0.006137123022760659, + 0.031523942088266095, + 0.0011940267602247843, + 0.1379420612539563, + 0.1379420612539563, + 0.0018684402480721464, + 0.0018684402480721464, + 0.03406320214271543, + 0.06270337876464635, + 0.15038439429232042, + 0.15038439429232042, + 0.04335950144699639, + 0.04335950144699639, + 0.024510532910270336, + 0.06270337876464635, + 0.015836354451520093, + 0.022568078605192037, + 0.0989899154220308, + 0.004320504622799998, + 0.425, + 0.425, + 0.012960869989224836, + 0.012960869989224836, + 0.009116600054715353, + 0.009116600054715353, + 0.05420222500000001, + 0.05420222500000001, + 0.00015161122594560875 + ], + "time": 5.7, + "rotation": [] + }, + { + "weights": [ + 0.004673331550189425, + 0.004673331550189425, + 0.02888475, + 0.017074883995862686, + 0.017074883995862686, + 0.030120521145207524, + 0.0031654267571866487, + 0.0031654267571866487, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07204339727759357, + 0.07204339727759357, + 0.05126333, + 0.033904699175309444, + 0.011733156187193727, + 0.033904699175309444, + 0.001734204530449849, + 0.1040643434439386, + 0.1040643434439386, + 0.0013833812863699017, + 0.0013833812863699017, + 0.048625258037022154, + 0.060353103226848975, + 0.2021049460130077, + 0.2021049460130077, + 0.02228451027934039, + 0.02228451027934039, + 0.022829253332955483, + 0.060353103226848975, + 0.011371587749038417, + 0.026193188929132038, + 0.04342800708753719, + 0.024092225890074433, + 0.425, + 0.425, + 0.01102442407182284, + 0.01102442407182284, + 0.0143287831917405, + 0.0143287831917405, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 5.733333333333333, + "rotation": [] + }, + { + "weights": [ + 0.005846371102545939, + 0.005846371102545939, + 0.02888475, + 0.015711701236151968, + 0.015711701236151968, + 0.02731873669794626, + 0.002499113404857259, + 0.002499113404857259, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06805475205183026, + 0.06805475205183026, + 0.05126333, + 0.03956460771816116, + 0.02105516357081276, + 0.03956460771816116, + 0.003063853104997956, + 0.09196759813598218, + 0.09196759813598218, + 0.0012266132421791542, + 0.0012266132421791542, + 0.06073082451309473, + 0.05363187880388325, + 0.27340533733367905, + 0.27340533733367905, + 0.01093455372112137, + 0.01093455372112137, + 0.01784674168697424, + 0.05363187880388325, + 0.0079345771244594, + 0.02664018571376799, + 0.01546312176755495, + 0.07669641769358085, + 0.425, + 0.425, + 0.009456372048173626, + 0.009456372048173626, + 0.03372707734150544, + 0.03372707734150544, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 5.766666666666667, + "rotation": [] + }, + { + "weights": [ + 0.007084990691925794, + 0.007084990691925794, + 0.02888475, + 0.014926525, + 0.014926525, + 0.023926315882376252, + 0.002305744089452282, + 0.002305744089452282, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0640396915376186, + 0.0640396915376186, + 0.0534186282860381, + 0.04766780281705513, + 0.040076602867671396, + 0.04766780281705513, + 0.005312938948294943, + 0.09630683319909226, + 0.09630683319909226, + 0.0021175713358180847, + 0.0021175713358180847, + 0.0723390487687928, + 0.04586626818137507, + 0.37440320721694376, + 0.37440320721694376, + 0.007846100974295816, + 0.007846100974295816, + 0.016618550089853138, + 0.04586626818137507, + 0.003199413471988267, + 0.026828011763947335, + 0.004695889992373325, + 0.14878633804619304, + 0.425, + 0.425, + 0.008785660692623678, + 0.008785660692623678, + 0.06071238366088694, + 0.06071238366088694, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 5.8, + "rotation": [] + }, + { + "weights": [ + 0.007903774215706753, + 0.007903774215706753, + 0.02888475, + 0.014926525, + 0.014926525, + 0.02053206254328999, + 0.0021940275294972307, + 0.0021940275294972307, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06718078394021303, + 0.06718078394021303, + 0.06392740766916952, + 0.0527932490621294, + 0.06618857375213075, + 0.0527932490621294, + 0.007474303139107564, + 0.10885490828326763, + 0.10885490828326763, + 0.004557356592267749, + 0.004557356592267749, + 0.0751158838825566, + 0.03972778320312498, + 0.4845427036285398, + 0.4845427036285398, + 0.007065619182373792, + 0.007065619182373792, + 0.018464436648147436, + 0.03972778320312498, + 0.0, + 0.03330630622804163, + 0.0005107629512037532, + 0.20702115425041734, + 0.425, + 0.425, + 0.009267156613724566, + 0.009267156613724566, + 0.07631968376891951, + 0.07631968376891951, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 5.833333333333333, + "rotation": [] + }, + { + "weights": [ + 0.00866664839642388, + 0.00866664839642388, + 0.02888475, + 0.01537560980289936, + 0.01537560980289936, + 0.01864834502339362, + 0.0017435785416247582, + 0.0017435785416247582, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0735698598836149, + 0.0735698598836149, + 0.0667353982371943, + 0.05455339955432071, + 0.0895650812557765, + 0.05455339955432071, + 0.006582927770380459, + 0.13115723388535627, + 0.13115723388535627, + 0.007502682523003642, + 0.007502682523003642, + 0.06303170610751421, + 0.040131372213363624, + 0.552359239544187, + 0.552359239544187, + 0.006062034943274086, + 0.006062034943274086, + 0.018175287544727314, + 0.040131372213363624, + 0.0, + 0.04854150079190728, + 0.0, + 0.2337492248841693, + 0.425, + 0.425, + 0.010010697458471565, + 0.010010697458471565, + 0.07372630579130987, + 0.07372630579130987, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 5.866666666666666, + "rotation": [] + }, + { + "weights": [ + 0.009098781086504455, + 0.009098781086504455, + 0.02888475, + 0.01704396520397254, + 0.01704396520397254, + 0.015670012895550037, + 0.0003225863778165405, + 0.0003225863778165405, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07590529652578486, + 0.07590529652578486, + 0.06270878921662054, + 0.05341100682105334, + 0.10280018499919341, + 0.05341100682105334, + 0.007735408842563623, + 0.15100923382810177, + 0.15100923382810177, + 0.009928071339215546, + 0.009928071339215546, + 0.05191648368324549, + 0.04445980020931786, + 0.5593714313847675, + 0.5593714313847675, + 0.004932549223303792, + 0.004932549223303792, + 0.016098972995366355, + 0.04445980020931786, + 0.0, + 0.06834518483706879, + 0.001203643424170358, + 0.23812685395990085, + 0.425, + 0.425, + 0.01068906826632363, + 0.01068906826632363, + 0.05518758924944057, + 0.05518758924944057, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 5.9, + "rotation": [] + }, + { + "weights": [ + 0.008975548297166819, + 0.008975548297166819, + 0.030608929267951394, + 0.017557316646530964, + 0.017557316646530964, + 0.015662937717778328, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07519689553550307, + 0.07519689553550307, + 0.05544893709676604, + 0.05610714512211931, + 0.10988721575055793, + 0.05610714512211931, + 0.014936096686869852, + 0.16021768589104912, + 0.16021768589104912, + 0.012482000993830806, + 0.012482000993830806, + 0.05040849851710452, + 0.048354422939675165, + 0.5330231734684531, + 0.5330231734684531, + 0.004153648577630516, + 0.004153648577630516, + 0.025818783523780947, + 0.048354422939675165, + 0.003958676010370257, + 0.08655474569116314, + 0.0, + 0.23411344332354386, + 0.425, + 0.425, + 0.010802521918501163, + 0.010802521918501163, + 0.04283226409128729, + 0.04283226409128729, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 5.933333333333334, + "rotation": [] + }, + { + "weights": [ + 0.008268718980252736, + 0.008268718980252736, + 0.03281945894871437, + 0.017442108638071326, + 0.017442108638071326, + 0.01766336240938731, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07115287972348071, + 0.07115287972348071, + 0.05126333, + 0.061061507569891996, + 0.10987274476460036, + 0.061061507569891996, + 0.02701457347720861, + 0.1611261943621293, + 0.1611261943621293, + 0.014984921898160647, + 0.014984921898160647, + 0.056526728080851636, + 0.053174260099019294, + 0.46652976104191307, + 0.46652976104191307, + 0.003490358591079707, + 0.003490358591079707, + 0.04390777775219508, + 0.053174260099019294, + 0.011901004984974862, + 0.10494262554815831, + 0.0, + 0.21817004595484024, + 0.425, + 0.425, + 0.010527979454823888, + 0.010527979454823888, + 0.030778606289199352, + 0.030778606289199352, + 0.05420222500000001, + 0.05420222500000001, + 0.0017428182065486932 + ], + "time": 5.966666666666667, + "rotation": [] + }, + { + "weights": [ + 0.007565563622684695, + 0.007565563622684695, + 0.029697950580062266, + 0.02218609578453769, + 0.02218609578453769, + 0.029206328815748882, + 0.0006667032095027104, + 0.0006667032095027104, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07211020069158797, + 0.07211020069158797, + 0.05126333, + 0.05509245116542383, + 0.09217126033784566, + 0.05509245116542383, + 0.023632312032139093, + 0.17434232432420535, + 0.17434232432420535, + 0.002811822094105585, + 0.002811822094105585, + 0.04902741246381578, + 0.060018488749050705, + 0.4299720004322569, + 0.4299720004322569, + 0.0034258132374712304, + 0.0034258132374712304, + 0.039577329903587574, + 0.060018488749050705, + 0.013046143846142853, + 0.10001773060052359, + 0.00943976296555427, + 0.21139983027007672, + 0.425, + 0.425, + 0.00546872409728108, + 0.00546872409728108, + 0.024527509565129297, + 0.024527509565129297, + 0.05648621036254848, + 0.05648621036254848, + 0.0015496143929305548 + ], + "time": 6.0, + "rotation": [] + }, + { + "weights": [ + 0.0064120326279884215, + 0.0064120326279884215, + 0.02888475, + 0.021219108573762795, + 0.021219108573762795, + 0.038891226691859085, + 0.0021777190423260115, + 0.0021777190423260115, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0751713534196217, + 0.0751713534196217, + 0.05126333, + 0.04890400405441005, + 0.07092057673704044, + 0.04890400405441005, + 0.016151900255742157, + 0.1850795889184586, + 0.1850795889184586, + 0.002818277714153127, + 0.002818277714153127, + 0.03896911605483004, + 0.06660309426841277, + 0.3778344944829026, + 0.3778344944829026, + 0.010538576507852176, + 0.010538576507852176, + 0.03321842852802501, + 0.06660309426841277, + 0.013277027720496761, + 0.08447017343271337, + 0.040778005265054214, + 0.18377825316219076, + 0.425, + 0.425, + 0.00891703835271653, + 0.00891703835271653, + 0.020000206656931356, + 0.020000206656931356, + 0.05420222500000001, + 0.05420222500000001, + 0.0007036791316100541 + ], + "time": 6.033333333333333, + "rotation": [] + }, + { + "weights": [ + 0.00474777176444019, + 0.00474777176444019, + 0.02888475, + 0.020465465728882373, + 0.020465465728882373, + 0.041178315877914415, + 0.0052751864938597555, + 0.0052751864938597555, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07864237677838114, + 0.07864237677838114, + 0.05126333, + 0.043728362236704094, + 0.051558494653020495, + 0.043728362236704094, + 0.01057408379856496, + 0.18626323496656738, + 0.18626323496656738, + 0.0031986746996907206, + 0.0031986746996907206, + 0.029968652448483832, + 0.07095924732940531, + 0.31115560733846204, + 0.31115560733846204, + 0.03246980495750901, + 0.03246980495750901, + 0.03557572846433943, + 0.07095924732940531, + 0.014905923152608525, + 0.06465663638498095, + 0.08978675912533482, + 0.137976884629045, + 0.425, + 0.425, + 0.011397863145385463, + 0.011397863145385463, + 0.016002247715368824, + 0.016002247715368824, + 0.05420222500000001, + 0.05420222500000001, + 1.4883120145117582e-05 + ], + "time": 6.066666666666666, + "rotation": [] + }, + { + "weights": [ + 0.0027503284936149877, + 0.0027503284936149877, + 0.029116453833523227, + 0.020074191450651254, + 0.020074191450651254, + 0.033769225861345, + 0.010276212793819246, + 0.010276212793819246, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.08057887497402366, + 0.08057887497402366, + 0.05126333, + 0.03651199022520994, + 0.03204690608240303, + 0.03651199022520994, + 0.006855918308498243, + 0.17173651547304208, + 0.17173651547304208, + 0.004877929997053877, + 0.004877929997053877, + 0.021452264381306478, + 0.07016619775621659, + 0.2549612684618855, + 0.2549612684618855, + 0.07519028541587643, + 0.07519028541587643, + 0.05409141665413261, + 0.07016619775621659, + 0.01641675810373964, + 0.04264684012603188, + 0.13519770304361972, + 0.09053134279591682, + 0.425, + 0.425, + 0.013088427291029969, + 0.013088427291029969, + 0.012357092218562224, + 0.012357092218562224, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 6.1, + "rotation": [] + }, + { + "weights": [ + 0.0008707636647990755, + 0.0008707636647990755, + 0.03013079968616871, + 0.020924895792576188, + 0.020924895792576188, + 0.018163009054806757, + 0.015172933095267835, + 0.015172933095267835, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.08044935904544627, + 0.08044935904544627, + 0.05126333, + 0.02998094183751543, + 0.016621389157918002, + 0.02998094183751543, + 0.003659880184513025, + 0.12723264144518132, + 0.12723264144518132, + 0.015351487888542754, + 0.015351487888542754, + 0.012256988331574145, + 0.06258139813813016, + 0.20722600797406648, + 0.20722600797406648, + 0.1416767554357647, + 0.1416767554357647, + 0.10732119769871633, + 0.06258139813813016, + 0.013448941821143735, + 0.024994404123855257, + 0.1519137035168352, + 0.04346302578643869, + 0.425, + 0.425, + 0.012953481232136682, + 0.012953481232136682, + 0.005879403592790558, + 0.005879403592790558, + 0.05420222500000001, + 0.05420222500000001, + 0.0003145426227932885 + ], + "time": 6.133333333333334, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.0319407237883733, + 0.02213340297321216, + 0.02213340297321216, + 0.0050400519735959055, + 0.016587781300768246, + 0.016587781300768246, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07801209482915543, + 0.07801209482915543, + 0.05126333, + 0.02417843009133757, + 0.02044637040824304, + 0.02417843009133757, + 0.002972808514189505, + 0.06691204410122362, + 0.06691204410122362, + 0.0400288408854786, + 0.0400288408854786, + 0.006020874958865491, + 0.056791111907484544, + 0.16276285766947013, + 0.16276285766947013, + 0.19470938486712308, + 0.19470938486712308, + 0.1868330491805562, + 0.056791111907484544, + 0.004274026538644516, + 0.024026452541655405, + 0.11473237116421967, + 0.011216994244225151, + 0.425, + 0.425, + 0.009994142230402445, + 0.009994142230402445, + 0.00011894978126700891, + 0.00011894978126700891, + 0.05420222500000001, + 0.05420222500000001, + 0.0013959685553397445 + ], + "time": 6.166666666666667, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.036867904427404286, + 0.02213757388386471, + 0.02213757388386471, + 0.0007189571462115436, + 0.012269327277317636, + 0.012269327277317636, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07872591696071377, + 0.07872591696071377, + 0.05126333, + 0.02288806284338265, + 0.04989296170521753, + 0.02288806284338265, + 0.0041629998567181475, + 0.01892479860584953, + 0.01892479860584953, + 0.07419085076512119, + 0.07419085076512119, + 0.0049435600090999956, + 0.06177051986662705, + 0.10810178725086908, + 0.10810178725086908, + 0.19581930584141177, + 0.19581930584141177, + 0.2684358216639683, + 0.06177051986662705, + 0.0, + 0.03756958469520416, + 0.05067634476082662, + 0.0, + 0.425, + 0.425, + 0.0054752950746489995, + 0.0054752950746489995, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.0022154649879251196 + ], + "time": 6.2, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.04385661567960464, + 0.020032505159418238, + 0.020032505159418238, + 0.00262982068317277, + 0.0060944272205233525, + 0.0060944272205233525, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0837564851556505, + 0.0837564851556505, + 0.05126333, + 0.02576788205422946, + 0.08774424208062032, + 0.02576788205422946, + 0.006204725642289431, + 0.0018270281010440356, + 0.0018270281010440356, + 0.10033070342881334, + 0.10033070342881334, + 0.008626239746809001, + 0.07803229881184437, + 0.05771230304879798, + 0.05771230304879798, + 0.1443247865353311, + 0.1443247865353311, + 0.30585082428795934, + 0.07803229881184437, + 0.0, + 0.05046032512826576, + 0.006859931136880588, + 0.000914875205074037, + 0.425, + 0.425, + 0.001988142973610331, + 0.001988142973610331, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.001611600523548466 + ], + "time": 6.233333333333333, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.04933153454746516, + 0.018028804607176097, + 0.018028804607176097, + 0.0027567218456949483, + 0.003143615834414956, + 0.003143615834414956, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.09252452147858478, + 0.09252452147858478, + 0.05126333, + 0.03028220278113501, + 0.1059381416865757, + 0.03028220278113501, + 0.006398300859811047, + 0.002201798052660046, + 0.002201798052660046, + 0.10508981559957772, + 0.10508981559957772, + 0.01067077315279415, + 0.0838047267070838, + 0.022377469550286, + 0.022377469550286, + 0.10014460257121488, + 0.10014460257121488, + 0.26838074560676295, + 0.0838047267070838, + 0.0, + 0.055373506460870976, + 0.0015611151499407526, + 0.0005062057503632133, + 0.425, + 0.425, + 0.0008782090991735446, + 0.0008782090991735446, + 0.0016184118576347824, + 0.0016184118576347824, + 0.05420222500000001, + 0.05420222500000001, + 0.0007475792297295155 + ], + "time": 6.266666666666667, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.05029226477657043, + 0.017256224581724572, + 0.017256224581724572, + 0.004490803394998821, + 0.0032528967663113537, + 0.0032528967663113537, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.09847051597067281, + 0.09847051597067281, + 0.05126333, + 0.03485605646758692, + 0.09937716586249211, + 0.03485605646758692, + 0.005270778241434264, + 0.04778957478702063, + 0.04778957478702063, + 0.08554621760334283, + 0.08554621760334283, + 0.009298086272818695, + 0.06516427079747827, + 0.012050860162292197, + 0.012050860162292197, + 0.07424173333815162, + 0.07424173333815162, + 0.16343653574585904, + 0.06516427079747827, + 0.007563247691307737, + 0.07871906970228462, + 0.020903410230364104, + 0.0, + 0.425, + 0.425, + 0.0014905806417976092, + 0.0014905806417976092, + 0.0022509625713740067, + 0.0022509625713740067, + 0.05420222500000001, + 0.05420222500000001, + 0.0004391905984708237 + ], + "time": 6.3, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.04725351259112355, + 0.017674519068979534, + 0.017674519068979534, + 0.0068508285496916045, + 0.0031965948308684974, + 0.0031965948308684974, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.09808084209050445, + 0.09808084209050445, + 0.05126333, + 0.044900860211678884, + 0.0817492088249751, + 0.044900860211678884, + 0.002974676147901584, + 0.17686609450195506, + 0.17686609450195506, + 0.05454441648508819, + 0.05454441648508819, + 0.0075730478124959085, + 0.031115113185452542, + 0.0071492357977798945, + 0.0071492357977798945, + 0.04797145442238873, + 0.04797145442238873, + 0.06520370463175428, + 0.031115113185452542, + 0.04077307645763667, + 0.13348328088011052, + 0.05012595270361217, + 0.0, + 0.425, + 0.425, + 0.00413465468479054, + 0.00413465468479054, + 0.0022756622172892082, + 0.0022756622172892082, + 0.05420222500000001, + 0.05420222500000001, + 0.0007070034742355342 + ], + "time": 6.333333333333333, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.041255915697131815, + 0.01758868854015827, + 0.01758868854015827, + 0.008843623953206195, + 0.002846815856173633, + 0.002846815856173633, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.09032014948981143, + 0.09032014948981143, + 0.05126333, + 0.05370844889964373, + 0.07239927359989706, + 0.05370844889964373, + 0.0018630550575575644, + 0.3561759632612975, + 0.3561759632612975, + 0.02684542049254688, + 0.02684542049254688, + 0.0057686302278723, + 0.00837112870067357, + 0.0039709831987108455, + 0.0039709831987108455, + 0.018934134287493555, + 0.018934134287493555, + 0.01839319752263169, + 0.00837112870067357, + 0.08517925622207773, + 0.18791965522936402, + 0.06173355792249949, + 0.0027849010058811673, + 0.425, + 0.425, + 0.008571136471416264, + 0.008571136471416264, + 0.002325687876769473, + 0.002325687876769473, + 0.05420222500000001, + 0.05420222500000001, + 0.0011355543775217868 + ], + "time": 6.366666666666666, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.03482002174215655, + 0.016536042999495095, + 0.016536042999495095, + 0.0061833495540278265, + 0.002587491420230694, + 0.002587491420230694, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.08077380050505906, + 0.08077380050505906, + 0.05126333, + 0.05822146811655586, + 0.08744590265410282, + 0.05822146811655586, + 0.0025845721596851933, + 0.4908326249037468, + 0.4908326249037468, + 0.010648839396557627, + 0.010648839396557627, + 0.004827285132237841, + 0.003085625384535104, + 0.0035982564091682325, + 0.0035982564091682325, + 0.005552226890410688, + 0.005552226890410688, + 0.008751071018299878, + 0.003085625384535104, + 0.11075854003429407, + 0.2005953162908553, + 0.04377048260399271, + 0.01274333138551029, + 0.425, + 0.425, + 0.013054286449083252, + 0.013054286449083252, + 0.0026786018961242252, + 0.0026786018961242252, + 0.05420222500000001, + 0.05420222500000001, + 0.0009189529078347336 + ], + "time": 6.4, + "rotation": [] + }, + { + "weights": [ + 0.0018997766343610608, + 0.0018997766343610608, + 0.02888475, + 0.015131833191979952, + 0.015131833191979952, + 0.0009145696248326978, + 0.0017373572968478702, + 0.0017373572968478702, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07442134267517495, + 0.07442134267517495, + 0.05126333, + 0.05761748371379713, + 0.1314463898113795, + 0.05761748371379713, + 0.0022102331410029097, + 0.5231243286814006, + 0.5231243286814006, + 0.003273296009283509, + 0.003273296009283509, + 0.0032820080007825558, + 0.0033621675467916863, + 0.02718625031411645, + 0.02718625031411645, + 0.004188041282551627, + 0.004188041282551627, + 0.005274944034005909, + 0.0033621675467916863, + 0.10130531638860697, + 0.16877901000635953, + 0.018733411175864068, + 0.052059546325887905, + 0.425, + 0.425, + 0.01595258844750267, + 0.01595258844750267, + 0.002314631294991287, + 0.002314631294991287, + 0.05420222500000001, + 0.05420222500000001, + 0.0008922852575778957 + ], + "time": 6.433333333333334, + "rotation": [] + }, + { + "weights": [ + 0.009205322153866284, + 0.009205322153866284, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0, + 0.0009278623719832721, + 0.0009278623719832721, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07062878007335319, + 0.07062878007335319, + 0.05126333, + 0.05325399397739339, + 0.18429923023496347, + 0.05325399397739339, + 0.0009168650090162239, + 0.4917830978121074, + 0.4917830978121074, + 0.000584903774516922, + 0.000584903774516922, + 0.0023612163960933675, + 0.006291782802769112, + 0.08731776928263046, + 0.08731776928263046, + 0.0005352646644626336, + 0.0005352646644626336, + 0.003287240656624945, + 0.006291782802769112, + 0.0817857403840337, + 0.13128883881228304, + 0.006773558046136576, + 0.14487045034766188, + 0.425, + 0.425, + 0.0181292820402554, + 0.0181292820402554, + 0.0030270713115377068, + 0.0030270713115377068, + 0.05420222500000001, + 0.05420222500000001, + 0.0005308380882654868 + ], + "time": 6.466666666666667, + "rotation": [] + }, + { + "weights": [ + 0.017143309196191163, + 0.017143309196191163, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0, + 0.0008010471372732089, + 0.0008010471372732089, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06629750989377495, + 0.06629750989377495, + 0.05126333, + 0.04792462433023109, + 0.21729677268436967, + 0.04792462433023109, + 0.0, + 0.4591763424021854, + 0.4591763424021854, + 0.0, + 0.0, + 0.0009155731116022373, + 0.01363856602194053, + 0.14549601163182932, + 0.14549601163182932, + 0.0, + 0.0, + 0.0029113703008208937, + 0.01363856602194053, + 0.07579411630119591, + 0.11511769167014524, + 0.002800980955362317, + 0.26461353429726175, + 0.4403433586869918, + 0.4403433586869918, + 0.020189004646880275, + 0.020189004646880275, + 0.003999077941157986, + 0.003999077941157986, + 0.05420222500000001, + 0.05420222500000001, + 0.0001408500862973076 + ], + "time": 6.5, + "rotation": [] + }, + { + "weights": [ + 0.02040453954998935, + 0.02040453954998935, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0, + 0.0006581972818821663, + 0.0006581972818821663, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06112219520977562, + 0.06112219520977562, + 0.05126333, + 0.04280494158821444, + 0.2198258498736789, + 0.04280494158821444, + 0.0, + 0.4588257972683223, + 0.4588257972683223, + 0.0, + 0.0, + 0.0010686887162072308, + 0.024296124452458948, + 0.1512806730610983, + 0.1512806730610983, + 0.0, + 0.0, + 0.002489716765869939, + 0.024296124452458948, + 0.08874711458172112, + 0.12129249019282198, + 0.002911339700222013, + 0.3526384374925067, + 0.465749782323837, + 0.465749782323837, + 0.021394127202885478, + 0.021394127202885478, + 0.003560663506920847, + 0.003560663506920847, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 6.533333333333333, + "rotation": [] + }, + { + "weights": [ + 0.020176009354846806, + 0.020176009354846806, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0, + 0.0013323653688920387, + 0.0013323653688920387, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.058480035034673514, + 0.058480035034673514, + 0.05126333, + 0.03815061444682732, + 0.2059343089376176, + 0.03815061444682732, + 0.0, + 0.46907601569380053, + 0.46907601569380053, + 0.0, + 0.0, + 0.0026421124381678426, + 0.031183020557676022, + 0.11573624004210736, + 0.11573624004210736, + 0.0, + 0.0, + 0.0033858661606375644, + 0.031183020557676022, + 0.1019317712102617, + 0.13074174480778825, + 0.0037863018257277333, + 0.38905002645083814, + 0.45890304446220376, + 0.45890304446220376, + 0.02140972627060753, + 0.02140972627060753, + 0.0018087959050067815, + 0.0018087959050067815, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 6.566666666666666, + "rotation": [] + }, + { + "weights": [ + 0.019164125887410968, + 0.019164125887410968, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0, + 0.0021401034268949703, + 0.0021401034268949703, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06021225000066413, + 0.06021225000066413, + 0.05126333, + 0.034812803452392294, + 0.194305932181222, + 0.034812803452392294, + 0.00043169686437717473, + 0.44895009313310874, + 0.44895009313310874, + 0.0, + 0.0, + 0.0050468552325453045, + 0.0357535630996738, + 0.10799472576805515, + 0.10799472576805515, + 0.0, + 0.0, + 0.003482079166652899, + 0.0357535630996738, + 0.09810849385602129, + 0.1334006283964429, + 0.002609761697905403, + 0.4083780007702961, + 0.4288453753505432, + 0.4288453753505432, + 0.021167973407677232, + 0.021167973407677232, + 0.001993716827460696, + 0.001993716827460696, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 6.6, + "rotation": [] + }, + { + "weights": [ + 0.019377569348684367, + 0.019377569348684367, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0, + 0.0018485924029456708, + 0.0018485924029456708, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.061870717895882436, + 0.061870717895882436, + 0.05126333, + 0.03424437119794163, + 0.18438631807054784, + 0.03424437119794163, + 0.0013969227355638777, + 0.3908996134996412, + 0.3908996134996412, + 0.0, + 0.0, + 0.007754548745495929, + 0.04226794876158235, + 0.15323105954698146, + 0.15323105954698146, + 0.0, + 0.0, + 0.0027271059142159547, + 0.04226794876158235, + 0.07561513121638974, + 0.1289219751954078, + 0.0005792959460190357, + 0.4371701828071046, + 0.425, + 0.425, + 0.021258046371596187, + 0.021258046371596187, + 0.004865022895059412, + 0.004865022895059412, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 6.633333333333334, + "rotation": [] + }, + { + "weights": [ + 0.019249172934464036, + 0.019249172934464036, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0011709165360246345, + 0.0007023358917129885, + 0.0007023358917129885, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06008228728813781, + 0.06008228728813781, + 0.05126333, + 0.036621478253177214, + 0.15741692474910185, + 0.036621478253177214, + 0.0022110073195238185, + 0.3212799325585364, + 0.3212799325585364, + 4.6539828181266726e-05, + 4.6539828181266726e-05, + 0.009275705793074195, + 0.0542883818703038, + 0.21989526290978692, + 0.21989526290978692, + 0.0, + 0.0, + 0.0018578179712806415, + 0.0542883818703038, + 0.04884674527815407, + 0.11627797654696867, + 0.0, + 0.47190363492284476, + 0.425, + 0.425, + 0.020889040934188013, + 0.020889040934188013, + 0.011099875106343193, + 0.011099875106343193, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 6.666666666666667, + "rotation": [] + }, + { + "weights": [ + 0.017711309450013285, + 0.017711309450013285, + 0.02888475, + 0.014926525, + 0.014926525, + 0.017466231754847922, + 0.0005389354856950893, + 0.0005389354856950893, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.056362101329224416, + 0.056362101329224416, + 0.05126333, + 0.04142434948257036, + 0.1074498548677989, + 0.04142434948257036, + 0.0027545275831861137, + 0.26957152656146444, + 0.26957152656146444, + 0.00033870472206867146, + 0.00033870472206867146, + 0.007703988254070276, + 0.06996562049857204, + 0.2573701905352727, + 0.2573701905352727, + 0.0, + 0.0, + 0.0021508326155266575, + 0.06996562049857204, + 0.031026118780885403, + 0.10132020499025066, + 0.0003097979085785993, + 0.49207100016730143, + 0.425, + 0.425, + 0.019921778781073422, + 0.019921778781073422, + 0.01850577491734708, + 0.01850577491734708, + 0.05420222500000001, + 0.05420222500000001, + 0.00011333769985607677 + ], + "time": 6.7, + "rotation": [] + }, + { + "weights": [ + 0.015091036606047825, + 0.015091036606047825, + 0.02888475, + 0.014926525, + 0.014926525, + 0.04346654713153837, + 0.0008913126042378795, + 0.0008913126042378795, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.053930140552776167, + 0.053930140552776167, + 0.05126333, + 0.04182599229472021, + 0.05574859832014352, + 0.04182599229472021, + 0.002484678483701176, + 0.23627658443791513, + 0.23627658443791513, + 0.0008425446104125248, + 0.0008425446104125248, + 0.008433979377150527, + 0.07982119758214265, + 0.25813377265419263, + 0.25813377265419263, + 0.00030294694006442995, + 0.00030294694006442995, + 0.003995888507259741, + 0.07982119758214265, + 0.024060413773570724, + 0.0859572861875806, + 0.003056729265621728, + 0.47993570395878354, + 0.425, + 0.425, + 0.01849764583366257, + 0.01849764583366257, + 0.02299922010196106, + 0.02299922010196106, + 0.05420222500000001, + 0.05420222500000001, + 0.0005280660731451848 + ], + "time": 6.733333333333333, + "rotation": [] + }, + { + "weights": [ + 0.013241499422916336, + 0.013241499422916336, + 0.02888475, + 0.014926525, + 0.014926525, + 0.06364169440099168, + 0.0013254420499184292, + 0.0013254420499184292, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05297053924628663, + 0.05297053924628663, + 0.05126333, + 0.03668904921838213, + 0.027111565896442938, + 0.03668904921838213, + 0.0037714449555746113, + 0.21169637079749776, + 0.21169637079749776, + 0.0011181905187134225, + 0.0011181905187134225, + 0.015200902521610249, + 0.08021747895649498, + 0.25279874524899876, + 0.25279874524899876, + 0.002157413746629441, + 0.002157413746629441, + 0.007239947148731772, + 0.08021747895649498, + 0.022282292480979633, + 0.07337506349597654, + 0.006668672284909654, + 0.4319828314440589, + 0.425, + 0.425, + 0.016961208709648668, + 0.016961208709648668, + 0.024671659113040978, + 0.024671659113040978, + 0.05420222500000001, + 0.05420222500000001, + 0.0012274129050118575 + ], + "time": 6.766666666666667, + "rotation": [] + }, + { + "weights": [ + 0.012518503330647936, + 0.012518503330647936, + 0.02888475, + 0.014926525, + 0.014926525, + 0.06353668591805864, + 0.001899836970759288, + 0.001899836970759288, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05539269426039284, + 0.05539269426039284, + 0.05126333, + 0.03214957686708926, + 0.026846150755882245, + 0.03214957686708926, + 0.007239024959770692, + 0.18655209945780882, + 0.18655209945780882, + 0.0014747159635382031, + 0.0014747159635382031, + 0.02699016465672423, + 0.07475626245141026, + 0.2775518302406582, + 0.2775518302406582, + 0.005186180318040504, + 0.005186180318040504, + 0.014010595490357696, + 0.07475626245141026, + 0.019398925666298174, + 0.06307676264217918, + 0.009164122172764364, + 0.3566552260092325, + 0.425, + 0.425, + 0.0152439540198871, + 0.0152439540198871, + 0.026553078288478495, + 0.026553078288478495, + 0.05420222500000001, + 0.05420222500000001, + 0.0016460872122219623 + ], + "time": 6.8, + "rotation": [] + }, + { + "weights": [ + 0.013245638167219494, + 0.013245638167219494, + 0.02888475, + 0.015006588612835065, + 0.015006588612835065, + 0.04643115784440719, + 0.003402940436665498, + 0.003402940436665498, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06568786379482061, + 0.06568786379482061, + 0.05126333, + 0.029108857834801667, + 0.0436145256246839, + 0.029108857834801667, + 0.012353144080511155, + 0.16595651635101852, + 0.16595651635101852, + 0.0018575326912105075, + 0.0018575326912105075, + 0.03991257303527421, + 0.06754126075123035, + 0.31362486204930695, + 0.31362486204930695, + 0.008179706202021663, + 0.008179706202021663, + 0.02485390776502233, + 0.06754126075123035, + 0.01684162052614347, + 0.06415652206965851, + 0.011143529947314938, + 0.27061716658728446, + 0.425, + 0.425, + 0.014227371322257171, + 0.014227371322257171, + 0.025733614100941576, + 0.025733614100941576, + 0.05420222500000001, + 0.05420222500000001, + 0.0012511199606316423 + ], + "time": 6.833333333333333, + "rotation": [] + }, + { + "weights": [ + 0.016735469523285106, + 0.016735469523285106, + 0.02888475, + 0.015837339525262967, + 0.015837339525262967, + 0.029169994805540337, + 0.007702462288684073, + 0.007702462288684073, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.08084733321198391, + 0.08084733321198391, + 0.05126333, + 0.02683265682079383, + 0.06528286635875699, + 0.02683265682079383, + 0.019311543673809075, + 0.15641662222998476, + 0.15641662222998476, + 0.0019098235267613604, + 0.0019098235267613604, + 0.052513013088277376, + 0.058642164724213706, + 0.3239139441932949, + 0.3239139441932949, + 0.00923479558633906, + 0.00923479558633906, + 0.03409661797008342, + 0.058642164724213706, + 0.020283541615520193, + 0.07962153766836433, + 0.014491832149880264, + 0.19411482576813005, + 0.425, + 0.425, + 0.014177273362874976, + 0.014177273362874976, + 0.021111032712672426, + 0.021111032712672426, + 0.05420222500000001, + 0.05420222500000001, + 0.0010180111442293432 + ], + "time": 6.866666666666666, + "rotation": [] + }, + { + "weights": [ + 0.017864202362086083, + 0.017864202362086083, + 0.04097228263105663, + 0.0169030473173918, + 0.0169030473173918, + 0.01743606105446814, + 0.014227609502683786, + 0.014227609502683786, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.07120254401649742, + 0.07120254401649742, + 0.0953330693500382, + 0.0953330693500382, + 0.05126333, + 0.026323512721098487, + 0.08452628757272444, + 0.026323512721098487, + 0.02701357709509984, + 0.15960632285901472, + 0.15960632285901472, + 0.0017014280493770316, + 0.0017014280493770316, + 0.06213892410908423, + 0.04802722223103044, + 0.29489313725914257, + 0.29489313725914257, + 0.008511378589485369, + 0.008511378589485369, + 0.03980023978011946, + 0.04802722223103044, + 0.02583371336971009, + 0.09970849518265038, + 0.016549049211399887, + 0.13458503016403733, + 0.425, + 0.425, + 0.015057560631207048, + 0.015057560631207048, + 0.01632056685962846, + 0.01632056685962846, + 0.05420222500000001, + 0.05420222500000001, + 0.0013551412948540269 + ], + "time": 6.9, + "rotation": [] + }, + { + "weights": [ + 0.019435625629765634, + 0.019435625629765634, + 0.04931378918034687, + 0.017182805283280096, + 0.017182805283280096, + 0.01269380524754523, + 0.017587549764929065, + 0.017587549764929065, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.09640420036656511, + 0.09640420036656511, + 0.10554762397493628, + 0.10554762397493628, + 0.05126333, + 0.027310099391888887, + 0.09537379903452729, + 0.027310099391888887, + 0.028826557259474438, + 0.1631907292774744, + 0.1631907292774744, + 0.0020250072782593094, + 0.0020250072782593094, + 0.06338671041386464, + 0.03945369198918339, + 0.26717855440718763, + 0.26717855440718763, + 0.00781188857342515, + 0.00781188857342515, + 0.04153918272682596, + 0.03945369198918339, + 0.027076940664223226, + 0.10810394989592677, + 0.017471142432519356, + 0.09924581412758132, + 0.425, + 0.425, + 0.016260810856308244, + 0.016260810856308244, + 0.016199298868221888, + 0.016199298868221888, + 0.05420222500000001, + 0.05420222500000001, + 0.0029027200703109998 + ], + "time": 6.933333333333334, + "rotation": [] + }, + { + "weights": [ + 0.020600557859454825, + 0.020600557859454825, + 0.05584592010293685, + 0.016968195673097198, + 0.016968195673097198, + 0.014224610477685931, + 0.019247211722124888, + 0.019247211722124888, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.11952039423797806, + 0.11952039423797806, + 0.11236796921917361, + 0.11236796921917361, + 0.05126333, + 0.03309532792440482, + 0.09978065822805665, + 0.03309532792440482, + 0.026538489067128666, + 0.17038371690681986, + 0.17038371690681986, + 0.002673027201422621, + 0.002673027201422621, + 0.05771320749606398, + 0.03201127536594864, + 0.23130726750407882, + 0.23130726750407882, + 0.006603975061859396, + 0.006603975061859396, + 0.039476047030517, + 0.03201127536594864, + 0.02549546126808435, + 0.1090435766748018, + 0.01714662473116601, + 0.08596115431615273, + 0.425, + 0.425, + 0.01793490084154264, + 0.01793490084154264, + 0.01967534494719334, + 0.01967534494719334, + 0.05420222500000001, + 0.05420222500000001, + 0.005471264677388325 + ], + "time": 6.966666666666667, + "rotation": [] + }, + { + "weights": [ + 0.023072087156909442, + 0.023072087156909442, + 0.052795749749405395, + 0.021491844395111252, + 0.021491844395111252, + 0.011642607737864765, + 0.016686225330558437, + 0.016686225330558437, + 0.0002587483614832065, + 0.0002587483614832065, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.10489349079375354, + 0.10489349079375354, + 0.10254211483282485, + 0.10254211483282485, + 0.05126333, + 0.034888767204771964, + 0.13856966604261964, + 0.034888767204771964, + 0.023064864199128583, + 0.1980758768583639, + 0.1980758768583639, + 0.00039431551261203063, + 0.00039431551261203063, + 0.04988476428855835, + 0.0276778110174373, + 0.20711705684408416, + 0.20711705684408416, + 0.0056771773226609755, + 0.0056771773226609755, + 0.034622198316382614, + 0.0276778110174373, + 0.04599989707169883, + 0.11941220280061754, + 0.015016989002929231, + 0.17317246965202326, + 0.425, + 0.425, + 0.005961989220449708, + 0.005961989220449708, + 0.017270017108582194, + 0.017270017108582194, + 0.057316951057037276, + 0.057316951057037276, + 0.004996929193663147 + ], + "time": 7.0, + "rotation": [] + }, + { + "weights": [ + 0.02448826969734258, + 0.02448826969734258, + 0.044682459036509144, + 0.019930444410184673, + 0.019930444410184673, + 0.00857946666933241, + 0.013628752004089084, + 0.013628752004089084, + 0.4676941234577343, + 0.4676941234577343, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0819320919125207, + 0.0819320919125207, + 0.08716935077238638, + 0.08716935077238638, + 0.05126333, + 0.03496819533354599, + 0.15475253712563275, + 0.03496819533354599, + 0.018510076047719537, + 0.23347681931086922, + 0.23347681931086922, + 0.00022974566713951128, + 0.00022974566713951128, + 0.04108369652004462, + 0.02473561391677881, + 0.16930648638378984, + 0.16930648638378984, + 0.004904029624802717, + 0.004904029624802717, + 0.028253526129715458, + 0.02473561391677881, + 0.06753814305577953, + 0.12428130550043906, + 0.012703788670755552, + 0.2512320641960415, + 0.425, + 0.425, + 0.008275180650608874, + 0.008275180650608874, + 0.014031120327611748, + 0.014031120327611748, + 0.05420222500000001, + 0.05420222500000001, + 0.004243124985978713 + ], + "time": 7.033333333333333, + "rotation": [] + }, + { + "weights": [ + 0.02416636516739213, + 0.02416636516739213, + 0.03318317181297707, + 0.01856897678295118, + 0.01856897678295118, + 0.007615054505211962, + 0.010719742203530443, + 0.010719742203530443, + 0.8003427765208179, + 0.8003427765208179, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.06100934290194079, + 0.06100934290194079, + 0.07119592460138449, + 0.07119592460138449, + 0.05126333, + 0.0353325301838076, + 0.13221752894776195, + 0.0353325301838076, + 0.013284756806180107, + 0.26491440726178006, + 0.26491440726178006, + 7.279937215415459e-05, + 7.279937215415459e-05, + 0.03141542114317412, + 0.025367428675027795, + 0.1221897559506551, + 0.1221897559506551, + 0.00391107337283236, + 0.00391107337283236, + 0.02102954177119367, + 0.025367428675027795, + 0.08115210873740053, + 0.11620997626866598, + 0.010927645542791894, + 0.2784591047891547, + 0.425, + 0.425, + 0.010391433026109415, + 0.010391433026109415, + 0.011344571817400189, + 0.011344571817400189, + 0.05420222500000001, + 0.05420222500000001, + 0.0037900546698697943 + ], + "time": 7.066666666666666, + "rotation": [] + }, + { + "weights": [ + 0.023132945047247958, + 0.023132945047247958, + 0.02888475, + 0.017142465285535424, + 0.017142465285535424, + 0.011474178660483579, + 0.007130315121529349, + 0.007130315121529349, + 0.791680227237575, + 0.791680227237575, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.054386410738031014, + 0.054386410738031014, + 0.05126333, + 0.035448046525319396, + 0.08829742076851063, + 0.035448046525319396, + 0.008058524234885591, + 0.28508648659501734, + 0.28508648659501734, + 8.065745110313077e-05, + 8.065745110313077e-05, + 0.021340897395497237, + 0.03139081772505524, + 0.08092799314430771, + 0.08092799314430771, + 0.0021812429917710124, + 0.0021812429917710124, + 0.013383898014823575, + 0.03139081772505524, + 0.08777170280615483, + 0.09769679208596536, + 0.016755594100270933, + 0.2633552929475192, + 0.425, + 0.425, + 0.013218459018639144, + 0.013218459018639144, + 0.008477393533324901, + 0.008477393533324901, + 0.05420222500000001, + 0.05420222500000001, + 0.0027921926939771264 + ], + "time": 7.1, + "rotation": [] + }, + { + "weights": [ + 0.022645437572354148, + 0.022645437572354148, + 0.02888475, + 0.015497608163866732, + 0.015497608163866732, + 0.020212273913479975, + 0.003719630466400305, + 0.003719630466400305, + 0.35776970464510033, + 0.35776970464510033, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.034867009753907496, + 0.039769355962065565, + 0.034867009753907496, + 0.0025644968278930864, + 0.2894662405013225, + 0.2894662405013225, + 0.000482213161423561, + 0.000482213161423561, + 0.01159334552582022, + 0.039927851756413744, + 0.03928525326355374, + 0.03928525326355374, + 0.0005639770880442878, + 0.0005639770880442878, + 0.0057346915849326024, + 0.039927851756413744, + 0.09156805849298322, + 0.0734041118784015, + 0.04273413282977477, + 0.21201754561897834, + 0.425, + 0.425, + 0.016502635990377178, + 0.016502635990377178, + 0.005471418002734374, + 0.005471418002734374, + 0.05420222500000001, + 0.05420222500000001, + 0.001067322456486978 + ], + "time": 7.133333333333334, + "rotation": [] + }, + { + "weights": [ + 0.022600987302709586, + 0.022600987302709586, + 0.02888475, + 0.014926525, + 0.014926525, + 0.02825308674148149, + 0.002727162604391269, + 0.002727162604391269, + 0.12461888369385545, + 0.12461888369385545, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.0340744629129527, + 0.006949433523781433, + 0.0340744629129527, + 0.0, + 0.27409363780094637, + 0.27409363780094637, + 0.0015563407898367353, + 0.0015563407898367353, + 0.006577714870170665, + 0.044832251731838475, + 0.011984323372646238, + 0.011984323372646238, + 0.0006882868768001079, + 0.0006882868768001079, + 0.001507916001945122, + 0.044832251731838475, + 0.09209959398118812, + 0.05345639498410172, + 0.08089149977783763, + 0.14412471424864254, + 0.425, + 0.425, + 0.01843794246413269, + 0.01843794246413269, + 0.003659743317307864, + 0.003659743317307864, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 7.166666666666667, + "rotation": [] + }, + { + "weights": [ + 0.021818047621268388, + 0.021818047621268388, + 0.02888475, + 0.014926525, + 0.014926525, + 0.030351312149848243, + 0.0032836576162514316, + 0.0032836576162514316, + 0.014836033774928988, + 0.014836033774928988, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03296789902849189, + 0.0, + 0.03296789902849189, + 0.0, + 0.24300087803480563, + 0.24300087803480563, + 0.003297148836902055, + 0.003297148836902055, + 0.004879500654583072, + 0.04480099828115529, + 0.0032150419786268307, + 0.0032150419786268307, + 0.0025176838808217816, + 0.0025176838808217816, + 0.0017232094592965978, + 0.04480099828115529, + 0.08436758221412187, + 0.035312273766921476, + 0.1123051904126697, + 0.08488222160205544, + 0.425, + 0.425, + 0.01807659147801447, + 0.01807659147801447, + 0.0020611790704483874, + 0.0020611790704483874, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 7.2, + "rotation": [] + }, + { + "weights": [ + 0.019383633855198097, + 0.019383633855198097, + 0.02888475, + 0.014926525, + 0.014926525, + 0.02658344720091137, + 0.0035611805306481445, + 0.0035611805306481445, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03216696173254353, + 0.0, + 0.03216696173254353, + 0.0017204673362097565, + 0.20729092104094357, + 0.20729092104094357, + 0.005968589062935537, + 0.005968589062935537, + 0.004849872738122938, + 0.042096665182283916, + 0.006602445191570687, + 0.006602445191570687, + 0.003483765199780463, + 0.003483765199780463, + 0.0038162641493337483, + 0.042096665182283916, + 0.06747309459107259, + 0.018498908675142686, + 0.12385616706950317, + 0.04731663816741531, + 0.425, + 0.425, + 0.016091760503394253, + 0.016091760503394253, + 0.0014241872754480144, + 0.0014241872754480144, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 7.233333333333333, + "rotation": [] + }, + { + "weights": [ + 0.015995175897010726, + 0.015995175897010726, + 0.02888475, + 0.014926525, + 0.014926525, + 0.02139522763235227, + 0.002181803654613238, + 0.002181803654613238, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03198572066515104, + 0.0, + 0.03198572066515104, + 0.0025326040989187134, + 0.1781057230063846, + 0.1781057230063846, + 0.009465524516999715, + 0.009465524516999715, + 0.0032404005527496317, + 0.03799285760947634, + 0.005996468290686604, + 0.005996468290686604, + 0.0022479319678885587, + 0.0022479319678885587, + 0.0026874001869665715, + 0.03799285760947634, + 0.04849629242505343, + 0.0030253035681588264, + 0.1215847560337611, + 0.026268045817102688, + 0.425, + 0.425, + 0.01399790480732917, + 0.01399790480732917, + 0.0023462857119739035, + 0.0023462857119739035, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 7.266666666666667, + "rotation": [] + }, + { + "weights": [ + 0.013919345422514839, + 0.013919345422514839, + 0.02888475, + 0.014926525, + 0.014926525, + 0.016606459979500082, + 0.0011817646878106247, + 0.0011817646878106247, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03194280473551, + 0.0, + 0.03194280473551, + 0.0018262806148933504, + 0.15769742663417535, + 0.15769742663417535, + 0.013110985420644275, + 0.013110985420644275, + 0.002045046112367084, + 0.032285199899758595, + 0.006249107633318216, + 0.006249107633318216, + 0.00014441220888069655, + 0.00014441220888069655, + 0.0, + 0.032285199899758595, + 0.03305196762084959, + 0.0, + 0.11138758723224905, + 0.01352466249040194, + 0.425, + 0.425, + 0.012190754434892103, + 0.012190754434892103, + 0.004869215243629044, + 0.004869215243629044, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 7.3, + "rotation": [] + }, + { + "weights": [ + 0.014314126782119265, + 0.014314126782119265, + 0.02888475, + 0.014926525, + 0.014926525, + 0.012891603048358638, + 0.0006850212147193291, + 0.0006850212147193291, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.031124491130490976, + 0.0, + 0.031124491130490976, + 0.00041291551398379425, + 0.15655869522265017, + 0.15655869522265017, + 0.017258404529520436, + 0.017258404529520436, + 0.0007668228660311011, + 0.027316369627203248, + 0.007424217622194968, + 0.007424217622194968, + 0.0004401823558977669, + 0.0004401823558977669, + 0.0, + 0.027316369627203248, + 0.024450987662587832, + 0.0, + 0.1060705878053392, + 0.006702719799109863, + 0.425, + 0.425, + 0.011601909369230265, + 0.011601909369230265, + 0.0061706669043217355, + 0.0061706669043217355, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 7.333333333333333, + "rotation": [] + }, + { + "weights": [ + 0.01695354269551378, + 0.01695354269551378, + 0.02888475, + 0.014926525, + 0.014926525, + 0.010236113305602748, + 0.0005026465880551505, + 0.0005026465880551505, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.029739572313038955, + 0.0, + 0.029739572313038955, + 0.0, + 0.11371590384415212, + 0.11371590384415212, + 0.013951493514435625, + 0.013951493514435625, + 0.00023228274924414467, + 0.01751527562737464, + 0.005842062703200746, + 0.005842062703200746, + 0.001180402157562119, + 0.001180402157562119, + 0.0, + 0.01751527562737464, + 0.015592056938580096, + 0.0, + 0.07365780655826837, + 0.00336972681539399, + 0.425, + 0.425, + 0.0081880509853363, + 0.0081880509853363, + 0.004312017365757906, + 0.004312017365757906, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 7.366666666666666, + "rotation": [] + }, + { + "weights": [ + 0.01968769984585897, + 0.01968769984585897, + 0.02888475, + 0.015210312924765858, + 0.015210312924765858, + 0.009257551814828595, + 0.0004984152303742508, + 0.0004984152303742508, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.028878687154857766, + 0.0, + 0.028878687154857766, + 0.0, + 0.05752411646502355, + 0.05752411646502355, + 0.007508063788924893, + 0.007508063788924893, + 1.2017147881643444e-06, + 0.00781886787286826, + 0.0031606919212000687, + 0.0031606919212000687, + 0.0017145579201834533, + 0.0017145579201834533, + 0.0, + 0.00781886787286826, + 0.007794760252748211, + 0.0, + 0.0353410863450595, + 0.0018708384888512734, + 0.425, + 0.425, + 0.004089330481631412, + 0.004089330481631412, + 0.00170023475108402, + 0.00170023475108402, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 7.4, + "rotation": [] + }, + { + "weights": [ + 0.021815531301711273, + 0.021815531301711273, + 0.02888475, + 0.015328799880527768, + 0.015328799880527768, + 0.009227533319166724, + 0.0005855329002120662, + 0.0005855329002120662, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02874126598540646, + 0.0, + 0.02874126598540646, + 0.0, + 0.01832181560141697, + 0.01832181560141697, + 0.0026063454066004043, + 0.0026063454066004043, + 0.0, + 0.002113041526504922, + 0.001079653693096977, + 0.001079653693096977, + 0.0010190671788794644, + 0.0010190671788794644, + 0.0, + 0.002113041526504922, + 0.002771119879824771, + 5.4508660520826417e-05, + 0.010343298486300861, + 0.0009061179629393978, + 0.425, + 0.425, + 0.0013371605149337207, + 0.0013371605149337207, + 0.0002367097511887544, + 0.0002367097511887544, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 7.433333333333334, + "rotation": [] + }, + { + "weights": [ + 0.022913081890770355, + 0.022913081890770355, + 0.02888475, + 0.015285039693668227, + 0.015285039693668227, + 0.009313395832266121, + 0.0006077917359237157, + 0.0006077917359237157, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.028904677600556775, + 0.0, + 0.028904677600556775, + 0.0, + 0.02808706709316797, + 0.02808706709316797, + 0.003914650619029997, + 0.003914650619029997, + 5.8248447520392206e-05, + 0.0035076831494058863, + 0.0015146924981049121, + 0.0015146924981049121, + 0.0010454912164381566, + 0.0010454912164381566, + 0.0, + 0.0035076831494058863, + 0.004013652099030356, + 0.0, + 0.016217317623751497, + 0.001425104503120694, + 0.425, + 0.425, + 0.0020621095384870244, + 0.0020621095384870244, + 0.0005432195615555555, + 0.0005432195615555555, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 7.466666666666667, + "rotation": [] + }, + { + "weights": [ + 0.02339696336005414, + 0.02339696336005414, + 0.02888475, + 0.015080788891781396, + 0.015080788891781396, + 0.00935745409556797, + 0.0006769331837339057, + 0.0006769331837339057, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.029085677375574787, + 0.0, + 0.029085677375574787, + 0.0, + 0.028035517207213798, + 0.028035517207213798, + 0.0040124154772077265, + 0.0040124154772077265, + 0.0002788993290492465, + 0.0034862004752669994, + 0.0015268168172665997, + 0.0015268168172665997, + 0.0007066750952175681, + 0.0007066750952175681, + 0.0, + 0.0034862004752669994, + 0.0038395265383379777, + 0.0, + 0.01601865951504025, + 0.0016109666866915557, + 0.425, + 0.425, + 0.002048387314592088, + 0.002048387314592088, + 0.0006297410758478298, + 0.0006297410758478298, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 7.5, + "rotation": [] + }, + { + "weights": [ + 0.022792880716068394, + 0.022792880716068394, + 0.02888475, + 0.014926525, + 0.014926525, + 0.009479869157075877, + 0.0007823541760444637, + 0.0007823541760444637, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.0292549043285363, + 0.0, + 0.0292549043285363, + 0.0, + 0.027977881729602798, + 0.027977881729602798, + 0.0040671248393399344, + 0.0040671248393399344, + 0.000455707822527204, + 0.0034438589002404874, + 0.0016212390256779524, + 0.0016212390256779524, + 0.00031392433813640027, + 0.00031392433813640027, + 0.0, + 0.0034438589002404874, + 0.00369580777628081, + 0.0, + 0.015964912516730163, + 0.0017441777884960163, + 0.425, + 0.425, + 0.0019950401314667277, + 0.0019950401314667277, + 0.0007573178916105199, + 0.0007573178916105199, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 7.533333333333333, + "rotation": [] + }, + { + "weights": [ + 0.020681433752179134, + 0.020681433752179134, + 0.02888475, + 0.014926525, + 0.014926525, + 0.009244931914976658, + 0.0009293282870203251, + 0.0009293282870203251, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02917979891048431, + 0.0, + 0.02917979891048431, + 0.000661003556368606, + 0.027592720687389355, + 0.027592720687389355, + 0.004068767470972875, + 0.004068767470972875, + 0.0006359744710581639, + 0.0032580554059573564, + 0.0019493381891931797, + 0.0019493381891931797, + 4.682080554110649e-05, + 4.682080554110649e-05, + 0.0, + 0.0032580554059573564, + 0.0034719590204102635, + 0.0, + 0.015725309593336914, + 0.001843804163592201, + 0.425, + 0.425, + 0.0019106577560305583, + 0.0019106577560305583, + 0.0006890646501311232, + 0.0006890646501311232, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 7.566666666666666, + "rotation": [] + }, + { + "weights": [ + 0.014805119165352404, + 0.014805119165352404, + 0.02888475, + 0.014926525, + 0.014926525, + 0.009235527259962895, + 0.0010981288538979624, + 0.0010981288538979624, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.028826267371044153, + 0.0007144837209156565, + 0.028826267371044153, + 0.0019457573029545256, + 0.025498121753334983, + 0.025498121753334983, + 0.004365071143422805, + 0.004365071143422805, + 0.0006956399551459719, + 0.0029441623815468355, + 0.002434614726475305, + 0.002434614726475305, + 0.0004207667335867877, + 0.0004207667335867877, + 0.0, + 0.0029441623815468355, + 0.0027466257129396695, + 0.0, + 0.014846978336572638, + 0.001984028773648397, + 0.425, + 0.425, + 0.0016421955515231394, + 0.0016421955515231394, + 4.246519213276247e-05, + 4.246519213276247e-05, + 0.05420222500000001, + 0.05420222500000001, + 0.00021821696843419706 + ], + "time": 7.6, + "rotation": [] + }, + { + "weights": [ + 0.00732223974274737, + 0.00732223974274737, + 0.02888475, + 0.01516486017886843, + 0.01516486017886843, + 0.007600936293601986, + 0.00195279256440699, + 0.00195279256440699, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.028131636118074142, + 0.005119350756917676, + 0.028131636118074142, + 0.003946884067097145, + 0.019192829728126515, + 0.019192829728126515, + 0.006677404659134996, + 0.006677404659134996, + 8.77606655870165e-05, + 0.0036991000814097235, + 0.0033206636884382775, + 0.0033206636884382775, + 0.0016081150408302023, + 0.0016081150408302023, + 0.004446132457149875, + 0.0036991000814097235, + 0.002388795422656193, + 0.0019868714788130334, + 0.011958285974604736, + 0.0018163752342973429, + 0.425, + 0.425, + 0.0011396866291761391, + 0.0011396866291761391, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.00242650413087436 + ], + "time": 7.633333333333334, + "rotation": [] + }, + { + "weights": [ + 0.0017888498093400658, + 0.0017888498093400658, + 0.03838599952203885, + 0.015726511606699398, + 0.015726511606699398, + 0.004267317801713941, + 0.002673148856099162, + 0.002673148856099162, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.027945372561082836, + 0.014016077280044545, + 0.027945372561082836, + 0.0036970684604187083, + 0.010487531982362266, + 0.010487531982362266, + 0.012509276977607175, + 0.012509276977607175, + 0.0, + 0.008607262649706427, + 0.0034736073229994077, + 0.0034736073229994077, + 0.0033233496280653117, + 0.0033233496280653117, + 0.019847048481128032, + 0.008607262649706427, + 0.0046278096096856215, + 0.0075468330298151245, + 0.007598421403339927, + 0.0007813862817628038, + 0.425, + 0.425, + 0.0006074536336319784, + 0.0006074536336319784, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.0048954634261982755 + ], + "time": 7.666666666666667, + "rotation": [] + }, + { + "weights": [ + 0.0005444512835570738, + 0.0005444512835570738, + 0.06322282696408882, + 0.015545158567724227, + 0.015545158567724227, + 0.0008270012480872007, + 0.00202962940425745, + 0.00202962940425745, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.054643883795610464, + 0.054643883795610464, + 0.05126333, + 0.030165094502094127, + 0.026157129696437277, + 0.030165094502094127, + 0.0, + 0.0033549595943519013, + 0.0033549595943519013, + 0.020537687293120784, + 0.020537687293120784, + 0.0, + 0.01724541773753506, + 0.0027362087581838867, + 0.0027362087581838867, + 0.004411743528076578, + 0.004411743528076578, + 0.044063931384256884, + 0.01724541773753506, + 0.010714922355754029, + 0.015208911842533514, + 0.004006727742297306, + 0.0, + 0.425, + 0.425, + 0.00029119753944022294, + 0.00029119753944022294, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.00569042127047266 + ], + "time": 7.7, + "rotation": [] + }, + { + "weights": [ + 0.0008572585614664205, + 0.0008572585614664205, + 0.07838462037699559, + 0.01503620131794657, + 0.01503620131794657, + 0.0, + 0.000139201698558671, + 0.000139201698558671, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07292403078504966, + 0.07292403078504966, + 0.05126333, + 0.03419404944440568, + 0.037400821685791, + 0.03419404944440568, + 0.0, + 0.00033379474388701405, + 0.00033379474388701405, + 0.02588733259269168, + 0.02588733259269168, + 0.0006160921497004369, + 0.025233688961182308, + 0.0016061987302133, + 0.0016061987302133, + 0.004275912003857746, + 0.004275912003857746, + 0.06206635262284957, + 0.025233688961182308, + 0.017218030286686753, + 0.020759827707494995, + 0.002431655057838983, + 0.0, + 0.425, + 0.425, + 0.00016247003099748052, + 0.00016247003099748052, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.004221287529383385 + ], + "time": 7.733333333333333, + "rotation": [] + }, + { + "weights": [ + 0.0017927125096321096, + 0.0017927125096321096, + 0.0781411875571523, + 0.014926525, + 0.014926525, + 0.0, + 0.00019585470269833233, + 0.00019585470269833233, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.08698160345000874, + 0.08698160345000874, + 0.05126333, + 0.03874877600797583, + 0.029628125054495635, + 0.03874877600797583, + 0.0, + 0.0, + 0.0, + 0.021710666826793113, + 0.021710666826793113, + 0.0003321939068181152, + 0.023787253360663126, + 0.0, + 0.0, + 0.002725177987345625, + 0.002725177987345625, + 0.05244987440960745, + 0.023787253360663126, + 0.01568175090210777, + 0.015572320606027316, + 0.0012679082368101374, + 0.0, + 0.425, + 0.425, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.0022234873846173273 + ], + "time": 7.766666666666667, + "rotation": [] + }, + { + "weights": [ + 0.0026054329904062388, + 0.0026054329904062388, + 0.06793541056769231, + 0.014926525, + 0.014926525, + 0.0012640741254602147, + 0.0017502559548509956, + 0.0017502559548509956, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.09480310412389886, + 0.09480310412389886, + 0.05126333, + 0.04263951357986244, + 0.09140602983747204, + 0.04263951357986244, + 0.003467331094933406, + 0.026720876688403717, + 0.026720876688403717, + 0.021088417349117133, + 0.021088417349117133, + 0.00668538422456809, + 0.027325821777007396, + 0.007460093264068868, + 0.007460093264068868, + 0.004159225677805285, + 0.004159225677805285, + 0.054500542623656105, + 0.027325821777007396, + 0.023354391923972526, + 0.034573089906147526, + 0.0025109647640160116, + 0.0049334630157266265, + 0.425, + 0.425, + 0.0009997846335172643, + 0.0009997846335172643, + 0.0020333520988268486, + 0.0020333520988268486, + 0.05420222500000001, + 0.05420222500000001, + 0.0022787144141537784 + ], + "time": 7.8, + "rotation": [] + }, + { + "weights": [ + 0.004367227958781373, + 0.004367227958781373, + 0.057574061623641384, + 0.014926525, + 0.014926525, + 0.004984888540846957, + 0.006548027900446733, + 0.006548027900446733, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0991245452846799, + 0.0991245452846799, + 0.05126333, + 0.04259681627154348, + 0.17429064519064758, + 0.04259681627154348, + 0.005255526982780011, + 0.10079788652913904, + 0.10079788652913904, + 0.018272648239774356, + 0.018272648239774356, + 0.01630242177418299, + 0.025431959876524537, + 0.022336112079875788, + 0.022336112079875788, + 0.005636594668030736, + 0.005636594668030736, + 0.05481536236192496, + 0.025431959876524537, + 0.03420591371400014, + 0.05766198664903638, + 0.009559361349259096, + 0.026973589914185636, + 0.425, + 0.425, + 0.003347474992275235, + 0.003347474992275235, + 0.0078117648059768275, + 0.0078117648059768275, + 0.05420222500000001, + 0.05420222500000001, + 0.0031737944643412297 + ], + "time": 7.833333333333333, + "rotation": [] + }, + { + "weights": [ + 0.014043509933565334, + 0.014043509933565334, + 0.050454909886632614, + 0.014926525, + 0.014926525, + 0.01080579789621489, + 0.01612761235529822, + 0.01612761235529822, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0638461899411465, + 0.0638461899411465, + 0.10535007630075721, + 0.10535007630075721, + 0.05126333, + 0.03744153146232875, + 0.22863496971130362, + 0.03744153146232875, + 0.006572381127625699, + 0.18086440199187814, + 0.18086440199187814, + 0.013328013139577311, + 0.013328013139577311, + 0.02976413193557942, + 0.018855956832745234, + 0.06303603730031418, + 0.06303603730031418, + 0.0055559558953557665, + 0.0055559558953557665, + 0.050982677734323884, + 0.018855956832745234, + 0.04171444122280391, + 0.06599944557462417, + 0.01990069035972867, + 0.06875212235110142, + 0.425, + 0.425, + 0.007728091524115627, + 0.007728091524115627, + 0.018383082188665852, + 0.018383082188665852, + 0.05420222500000001, + 0.05420222500000001, + 0.004958331185792171 + ], + "time": 7.866666666666666, + "rotation": [] + }, + { + "weights": [ + 0.0321583500930241, + 0.0321583500930241, + 0.05487107698406488, + 0.014926525, + 0.014926525, + 0.008961264789104457, + 0.03349832966923712, + 0.03349832966923712, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.12495650305811842, + 0.12495650305811842, + 0.11162103755133487, + 0.11162103755133487, + 0.05126333, + 0.03618034810892171, + 0.21092023236410948, + 0.03618034810892171, + 0.009927422380340944, + 0.22375932346497251, + 0.22375932346497251, + 0.0027969110637370994, + 0.0027969110637370994, + 0.04523899810654774, + 0.005720163256462125, + 0.12238264530897133, + 0.12238264530897133, + 0.0047625662492854215, + 0.0047625662492854215, + 0.028505667245813757, + 0.005720163256462125, + 0.03766815492085046, + 0.052536212333611054, + 0.02688755095005034, + 0.12175879382661403, + 0.425, + 0.425, + 0.01280855130404233, + 0.01280855130404233, + 0.03243028846170219, + 0.03243028846170219, + 0.05420222500000001, + 0.05420222500000001, + 0.005194082856178281 + ], + "time": 7.9, + "rotation": [] + }, + { + "weights": [ + 0.05112377586109295, + 0.05112377586109295, + 0.06500854896647584, + 0.014926525, + 0.014926525, + 0.007435602694749823, + 0.051890840008854855, + 0.051890840008854855, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.17166700163590043, + 0.17166700163590043, + 0.10781166723796287, + 0.10781166723796287, + 0.05126333, + 0.036789070335882024, + 0.20070634296962175, + 0.036789070335882024, + 0.015531013307294669, + 0.2437698152448448, + 0.2437698152448448, + 0.0, + 0.0, + 0.05715853923133439, + 0.002853777366025099, + 0.18276574313640587, + 0.18276574313640587, + 0.006902084579425193, + 0.006902084579425193, + 0.02681853861681048, + 0.002853777366025099, + 0.03345876697983057, + 0.05336405507155821, + 0.02933765240013596, + 0.17283752400960242, + 0.4431154535285061, + 0.4431154535285061, + 0.01817840252071618, + 0.01817840252071618, + 0.04413646267993108, + 0.04413646267993108, + 0.06044348673551524, + 0.06044348673551524, + 0.00427821036428213 + ], + "time": 7.933333333333334, + "rotation": [] + }, + { + "weights": [ + 0.0729909594303795, + 0.0729909594303795, + 0.08248378272567469, + 0.014926525, + 0.014926525, + 0.00415404736995696, + 0.07319458462297915, + 0.07319458462297915, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.2131462951057722, + 0.2131462951057722, + 0.0963445428226674, + 0.0963445428226674, + 0.05527569366885084, + 0.04008587955364157, + 0.18590727942330476, + 0.04008587955364157, + 0.023248158661382537, + 0.24021141816462765, + 0.24021141816462765, + 0.0, + 0.0, + 0.0679727577205215, + 0.007525815415595258, + 0.2502363435924052, + 0.2502363435924052, + 0.011444097038890627, + 0.011444097038890627, + 0.03934632507818081, + 0.007525815415595258, + 0.027881157611097565, + 0.06254455851657044, + 0.027583234757184938, + 0.22578751540609768, + 0.5325743382530548, + 0.5325743382530548, + 0.024097749330103384, + 0.024097749330103384, + 0.05535061984722101, + 0.05535061984722101, + 0.06946723643080778, + 0.06946723643080778, + 0.002258324809372423 + ], + "time": 7.966666666666667, + "rotation": [] + }, + { + "weights": [ + 0.06402557843953974, + 0.06402557843953974, + 0.07452865235254057, + 0.02069032700509775, + 0.02069032700509775, + 0.01768317230400583, + 0.06468042561518289, + 0.06468042561518289, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.1835567744988566, + 0.1835567744988566, + 0.08638330009670875, + 0.08638330009670875, + 0.05534590735387032, + 0.038151489115085695, + 0.1568417640543306, + 0.038151489115085695, + 0.019806575215671855, + 0.22713864219938784, + 0.22713864219938784, + 0.0002789976764913824, + 0.0002789976764913824, + 0.061131394889180304, + 0.014349758701056842, + 0.25567668266949173, + 0.25567668266949173, + 0.011494135174798914, + 0.011494135174798914, + 0.037903827888777004, + 0.014349758701056842, + 0.023904949936027375, + 0.054361863772631816, + 0.028675551418037588, + 0.225070700342355, + 0.504262851715898, + 0.504262851715898, + 0.006523614979286982, + 0.006523614979286982, + 0.05360840607269783, + 0.05360840607269783, + 0.06390810040312363, + 0.06390810040312363, + 0.0014853178638787469 + ], + "time": 8.0, + "rotation": [] + }, + { + "weights": [ + 0.04972471166402097, + 0.04972471166402097, + 0.06085567032652234, + 0.01933736542456195, + 0.01933736542456195, + 0.03279434747639154, + 0.050312619458972654, + 0.050312619458972654, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.14041335570315502, + 0.14041335570315502, + 0.0762269675554263, + 0.0762269675554263, + 0.05316906878281205, + 0.03497406940676756, + 0.12518196543057739, + 0.03497406940676756, + 0.015029466781942608, + 0.2132559547112099, + 0.2132559547112099, + 0.0004620088135734907, + 0.0004620088135734907, + 0.04863262637740086, + 0.022472203682575895, + 0.25704754512934436, + 0.25704754512934436, + 0.009586320409462556, + 0.009586320409462556, + 0.03117897255967056, + 0.022472203682575895, + 0.019913863639036772, + 0.04373137271475218, + 0.026409463495725632, + 0.21487013718911568, + 0.4475773475709409, + 0.4475773475709409, + 0.008299321738736964, + 0.008299321738736964, + 0.047539913104403544, + 0.047539913104403544, + 0.057436655448338744, + 0.057436655448338744, + 0.0009203358065514319 + ], + "time": 8.033333333333333, + "rotation": [] + }, + { + "weights": [ + 0.03903565845851384, + 0.03903565845851384, + 0.048311579174229013, + 0.018070203148125918, + 0.018070203148125918, + 0.03633175327309538, + 0.038351956605246, + 0.038351956605246, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.10439206635845547, + 0.10439206635845547, + 0.06729384027421463, + 0.06729384027421463, + 0.05126333, + 0.03238274915977732, + 0.0958965429237909, + 0.03238274915977732, + 0.01196760899994322, + 0.1973824460059402, + 0.1973824460059402, + 0.00033089806525302693, + 0.00033089806525302693, + 0.03677163419446772, + 0.031075198988297137, + 0.2700848899249517, + 0.2700848899249517, + 0.007243775882359053, + 0.007243775882359053, + 0.023275777750781566, + 0.031075198988297137, + 0.014174365837659124, + 0.03634371470127781, + 0.019722529500722855, + 0.19868339342730373, + 0.425, + 0.425, + 0.009452242407415587, + 0.009452242407415587, + 0.038367963502449615, + 0.038367963502449615, + 0.05420222500000001, + 0.05420222500000001, + 0.00023141741486532247 + ], + "time": 8.066666666666666, + "rotation": [] + }, + { + "weights": [ + 0.028535168742140106, + 0.028535168742140106, + 0.03866485390989549, + 0.017469137713695022, + 0.017469137713695022, + 0.02789481917307489, + 0.02667972762581136, + 0.02667972762581136, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.06991372340403133, + 0.06991372340403133, + 0.06507270007970778, + 0.06507270007970778, + 0.05126333, + 0.02905441008277722, + 0.08267554408028, + 0.02905441008277722, + 0.008056165753043295, + 0.16793228930660642, + 0.16793228930660642, + 0.0003431665130136938, + 0.0003431665130136938, + 0.028083394556528023, + 0.03343381297198078, + 0.2766223562970046, + 0.2766223562970046, + 0.0059667697708521514, + 0.0059667697708521514, + 0.015495530028073525, + 0.03343381297198078, + 0.0063076991055692755, + 0.03186158912167659, + 0.012326420719424863, + 0.15202930147449167, + 0.425, + 0.425, + 0.008497524739021342, + 0.008497524739021342, + 0.0261429513848963, + 0.0261429513848963, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 8.1, + "rotation": [] + }, + { + "weights": [ + 0.015073906826552267, + 0.015073906826552267, + 0.036644797124931565, + 0.017208578938689115, + 0.017208578938689115, + 0.012422226585802571, + 0.014328342217597212, + 0.014328342217597212, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07676396897936955, + 0.07676396897936955, + 0.05126333, + 0.028222039870285542, + 0.10450335233024988, + 0.028222039870285542, + 0.00404666967551005, + 0.11230201263132741, + 0.11230201263132741, + 0.009519422840814846, + 0.009519422840814846, + 0.020964430589355564, + 0.038858160867425426, + 0.2357487058710483, + 0.2357487058710483, + 0.005741334010777218, + 0.005741334010777218, + 0.028264752045577844, + 0.038858160867425426, + 0.0004502083791964604, + 0.03678231309820596, + 0.004839130977079971, + 0.08348231599495114, + 0.425, + 0.425, + 0.005208729437454822, + 0.005208729437454822, + 0.013562258042293735, + 0.013562258042293735, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 8.133333333333333, + "rotation": [] + }, + { + "weights": [ + 0.003402396981053202, + 0.003402396981053202, + 0.04836415699854186, + 0.01641040942260333, + 0.01641040942260333, + 0.00023678803018160974, + 0.004425142367503469, + 0.004425142367503469, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.10110691905933977, + 0.10110691905933977, + 0.05126333, + 0.030993521224911398, + 0.15875828723031638, + 0.030993521224911398, + 0.0025858558042031895, + 0.048926734985137436, + 0.048926734985137436, + 0.040903940285955134, + 0.040903940285955134, + 0.015575609059662227, + 0.06334205245257027, + 0.14653877466917029, + 0.14653877466917029, + 0.005261567118672688, + 0.005261567118672688, + 0.10622726824818818, + 0.06334205245257027, + 0.008696497152654479, + 0.05627252598806299, + 0.0006384160050323996, + 0.029061560934903648, + 0.425, + 0.425, + 0.0019460025712847693, + 0.0019460025712847693, + 0.00429524956309065, + 0.00429524956309065, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 8.166666666666666, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.06790800569160857, + 0.015511467666387557, + 0.015511467666387557, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.12843888038579293, + 0.12843888038579293, + 0.05126333, + 0.03700075839475099, + 0.21456389973601508, + 0.03700075839475099, + 0.004002592110547843, + 0.00938657404740853, + 0.00938657404740853, + 0.08962425046733442, + 0.08962425046733442, + 0.011292849842230876, + 0.10887127980627873, + 0.057794462037937935, + 0.057794462037937935, + 0.006458379452934066, + 0.006458379452934066, + 0.2374665669450649, + 0.10887127980627873, + 0.04448647300807795, + 0.09272154385566098, + 0.002351897678204943, + 0.008520891642083913, + 0.425, + 0.425, + 0.0007743977108171999, + 0.0007743977108171999, + 0.00045210974880170946, + 0.00045210974880170946, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 8.2, + "rotation": [] + }, + { + "weights": [ + 9.29374779973678e-06, + 9.29374779973678e-06, + 0.0864996377910886, + 0.015128796335328647, + 0.015128796335328647, + 0.0, + 0.00044728368520736674, + 0.00044728368520736674, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.1456550031900405, + 0.1456550031900405, + 0.05126333, + 0.04651193980659754, + 0.2500805912699017, + 0.04651193980659754, + 0.005470289576000398, + 0.00035590295280728745, + 0.00035590295280728745, + 0.1332598615544182, + 0.1332598615544182, + 0.012637104945523392, + 0.1507949286273547, + 0.017859868119869893, + 0.017859868119869893, + 0.011763897272092948, + 0.011763897272092948, + 0.36091147725071204, + 0.1507949286273547, + 0.10074594946844231, + 0.13336592933961317, + 0.008898766658135819, + 0.008457622038466584, + 0.425, + 0.425, + 0.0012088356167078013, + 0.0012088356167078013, + 0.0020002927631139742, + 0.0020002927631139742, + 0.05420222500000001, + 0.05420222500000001, + 0.00113430805504322 + ], + "time": 8.233333333333333, + "rotation": [] + }, + { + "weights": [ + 0.0015275421419313965, + 0.0015275421419313965, + 0.09436736915792732, + 0.014926525, + 0.014926525, + 0.0, + 0.000539668496432049, + 0.000539668496432049, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.1521173153604779, + 0.1521173153604779, + 0.05126333, + 0.05574645953519001, + 0.27878079686846036, + 0.05574645953519001, + 0.0072127288074365645, + 0.0, + 0.0, + 0.14855771413871213, + 0.14855771413871213, + 0.01436811536550521, + 0.1700246169098785, + 0.006938131632549416, + 0.006938131632549416, + 0.018497410150510915, + 0.018497410150510915, + 0.4039670365197316, + 0.1700246169098785, + 0.14943040013313286, + 0.15673412616763788, + 0.013214875012636178, + 0.008338617214134755, + 0.425, + 0.425, + 0.0014015222340822214, + 0.0014015222340822214, + 0.003663510350244384, + 0.003663510350244384, + 0.05420222500000001, + 0.05420222500000001, + 0.001667233955647263 + ], + "time": 8.266666666666667, + "rotation": [] + }, + { + "weights": [ + 0.0028010150417685483, + 0.0028010150417685483, + 0.09214582060064583, + 0.014926525, + 0.014926525, + 0.0017522242452417086, + 0.00048041690274008657, + 0.00048041690274008657, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.15065796162400918, + 0.15065796162400918, + 0.05126333, + 0.059847950562834706, + 0.3, + 0.059847950562834706, + 0.008375891896763014, + 0.006043928728571939, + 0.006043928728571939, + 0.12172555008104861, + 0.12172555008104861, + 0.011697589818920402, + 0.15258138376687247, + 0.0, + 0.0, + 0.019566287313188817, + 0.019566287313188817, + 0.3202026620507239, + 0.15258138376687247, + 0.1614720193403107, + 0.15108137045587802, + 0.012006332938160209, + 0.0070845853005136695, + 0.425, + 0.425, + 0.0009390898581062037, + 0.0009390898581062037, + 0.0028444013159189888, + 0.0028444013159189888, + 0.05420222500000001, + 0.05420222500000001, + 0.00252723063209227 + ], + "time": 8.3, + "rotation": [] + }, + { + "weights": [ + 0.007722693788153779, + 0.007722693788153779, + 0.07972996511629646, + 0.014926525, + 0.014926525, + 0.0066045464149543185, + 0.0005932435992040798, + 0.0005932435992040798, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.1439192763396671, + 0.1439192763396671, + 0.05126333, + 0.05441688815397873, + 0.3, + 0.05441688815397873, + 0.007473875555608949, + 0.0658558424030031, + 0.0658558424030031, + 0.06783781864813392, + 0.06783781864813392, + 0.008820938212530948, + 0.09826043874823616, + 0.0, + 0.0, + 0.011829245729105807, + 0.011829245729105807, + 0.17187956478446711, + 0.09826043874823616, + 0.15782233136040813, + 0.14419007684503274, + 0.007023822196892325, + 0.010389327896492807, + 0.425, + 0.425, + 0.0009060935356787262, + 0.0009060935356787262, + 0.0021804606941129463, + 0.0021804606941129463, + 0.05420222500000001, + 0.05420222500000001, + 0.003689135531229631 + ], + "time": 8.333333333333334, + "rotation": [] + }, + { + "weights": [ + 0.016479148795562122, + 0.016479148795562122, + 0.06506714437689096, + 0.014926525, + 0.014926525, + 0.010164013930729453, + 0.0018526602270347715, + 0.0018526602270347715, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.13498866260051717, + 0.13498866260051717, + 0.05126333, + 0.042320114959563504, + 0.3, + 0.042320114959563504, + 0.00526686697932226, + 0.16010090237749464, + 0.16010090237749464, + 0.022009976793612735, + 0.022009976793612735, + 0.009379197337797704, + 0.041009260594312605, + 0.0, + 0.0, + 0.0022297603743416904, + 0.0022297603743416904, + 0.05330471484921867, + 0.041009260594312605, + 0.15603680525507235, + 0.13368153103760302, + 0.0038569554686546294, + 0.03128836208156174, + 0.425, + 0.425, + 0.0027672987484506175, + 0.0027672987484506175, + 0.0032828481601817243, + 0.0032828481601817243, + 0.05420222500000001, + 0.05420222500000001, + 0.003110056157623017 + ], + "time": 8.366666666666667, + "rotation": [] + }, + { + "weights": [ + 0.028433494881859832, + 0.028433494881859832, + 0.051389413007668056, + 0.014926525, + 0.014926525, + 0.009095904443945198, + 0.006736335471006372, + 0.006736335471006372, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.12415217554994984, + 0.12415217554994984, + 0.05126333, + 0.03388950733503546, + 0.3, + 0.03388950733503546, + 0.0040884536291871726, + 0.2485887913299457, + 0.2485887913299457, + 0.003951367924788162, + 0.003951367924788162, + 0.011301773999418525, + 0.009752781649253184, + 0.003899832442402838, + 0.003899832442402838, + 0.0, + 0.0, + 0.014105789177119714, + 0.009752781649253184, + 0.16025497572762615, + 0.11086266807147428, + 0.002509593963623045, + 0.1009266657488686, + 0.425, + 0.425, + 0.007123229115137028, + 0.007123229115137028, + 0.00537962410598993, + 0.00537962410598993, + 0.05420222500000001, + 0.05420222500000001, + 0.001294041637863431 + ], + "time": 8.4, + "rotation": [] + }, + { + "weights": [ + 0.035330915850188035, + 0.035330915850188035, + 0.040573939042431936, + 0.014926525, + 0.014926525, + 0.0057440178734915566, + 0.008627594481887558, + 0.008627594481887558, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.10939187673585749, + 0.10939187673585749, + 0.05126333, + 0.03245181046727997, + 0.3, + 0.03245181046727997, + 0.004164914181455967, + 0.313130040679659, + 0.313130040679659, + 0.0006056401186755705, + 0.0006056401186755705, + 0.009162485918828414, + 0.003505300643986885, + 0.008895747629659511, + 0.008895747629659511, + 0.0, + 0.0, + 0.0011897653208247198, + 0.003505300643986885, + 0.15904307280267976, + 0.08286193949835635, + 0.001965271149362835, + 0.2042053702686513, + 0.4331498354673383, + 0.4331498354673383, + 0.011749031091375003, + 0.011749031091375003, + 0.006420463775949815, + 0.006420463775949815, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 8.433333333333334, + "rotation": [] + }, + { + "weights": [ + 0.036653011105954626, + 0.036653011105954626, + 0.03138700505452495, + 0.014926525, + 0.014926525, + 0.0018601779426847171, + 0.006863224719251901, + 0.006863224719251901, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.09140114486217493, + 0.09140114486217493, + 0.05126333, + 0.033537047295522, + 0.3, + 0.033537047295522, + 0.0036606867132442317, + 0.3830485818641524, + 0.3830485818641524, + 0.0, + 0.0, + 0.00672952926584652, + 0.000543441463794026, + 0.010421210899949067, + 0.010421210899949067, + 0.0, + 0.0, + 0.0, + 0.000543441463794026, + 0.1601525093827928, + 0.0792421624064445, + 0.0022515093641621705, + 0.29755572889532345, + 0.4814924214567454, + 0.4814924214567454, + 0.014380910503012784, + 0.014380910503012784, + 0.007169031777552192, + 0.007169031777552192, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 8.466666666666667, + "rotation": [] + }, + { + "weights": [ + 0.03621239704745154, + 0.03621239704745154, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0, + 0.005329128454572385, + 0.005329128454572385, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07903693116136955, + 0.07903693116136955, + 0.05126333, + 0.03840502133326869, + 0.3, + 0.03840502133326869, + 0.003464968495869209, + 0.4461599592651637, + 0.4461599592651637, + 0.0, + 0.0, + 0.0058281746293817206, + 0.0, + 0.011219900952918183, + 0.011219900952918183, + 6.661010640008139e-05, + 6.661010640008139e-05, + 0.001510337766792092, + 0.0, + 0.155119613451617, + 0.08960778713226314, + 0.005989196896553035, + 0.35460496076515724, + 0.47285309604236025, + 0.47285309604236025, + 0.014943404559578205, + 0.014943404559578205, + 0.00711016657629183, + 0.00711016657629183, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 8.5, + "rotation": [] + }, + { + "weights": [ + 0.03683090388242685, + 0.03683090388242685, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0, + 0.004846969093861321, + 0.004846969093861321, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07292946326945504, + 0.07292946326945504, + 0.05126333, + 0.04078826159238813, + 0.22411305121013086, + 0.04078826159238813, + 0.002710615943319029, + 0.4724683416741232, + 0.4724683416741232, + 0.0, + 0.0, + 0.007010238298348013, + 0.006167297916752943, + 0.010095316118427676, + 0.010095316118427676, + 0.00040653507624353695, + 0.00040653507624353695, + 0.0025340352540037447, + 0.006167297916752943, + 0.13939697721174776, + 0.09489253205912448, + 0.009190262960536134, + 0.3978563845157621, + 0.4490511804819104, + 0.4490511804819104, + 0.016087724758046006, + 0.016087724758046006, + 0.005601273423859047, + 0.005601273423859047, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 8.533333333333333, + "rotation": [] + }, + { + "weights": [ + 0.03411745884056601, + 0.03411745884056601, + 0.02888475, + 0.014926525, + 0.014926525, + 0.00776895380445888, + 0.004130754393658466, + 0.004130754393658466, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06586748074207983, + 0.06586748074207983, + 0.05126333, + 0.03999148064426011, + 0.14691347667149127, + 0.03999148064426011, + 0.002370879719299928, + 0.4542376624686375, + 0.4542376624686375, + 0.0, + 0.0, + 0.009276286512613292, + 0.030204857014385696, + 0.016812546976975016, + 0.016812546976975016, + 0.0, + 0.0, + 0.0021030391699501435, + 0.030204857014385696, + 0.11295012640101562, + 0.09318415522575374, + 0.01077753507665225, + 0.44183699744088284, + 0.4348340792315344, + 0.4348340792315344, + 0.018785003636564518, + 0.018785003636564518, + 0.006317332440188948, + 0.006317332440188948, + 0.05420222500000001, + 0.05420222500000001, + 0.0005425323865243365 + ], + "time": 8.566666666666666, + "rotation": [] + }, + { + "weights": [ + 0.02756277157792022, + 0.02756277157792022, + 0.02888475, + 0.014926525, + 0.014926525, + 0.034915807311023964, + 0.002950674801000525, + 0.002950674801000525, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05627411721008162, + 0.05627411721008162, + 0.05126333, + 0.035487200532640706, + 0.0927149948051997, + 0.035487200532640706, + 0.0019239758207861852, + 0.4066960053784504, + 0.4066960053784504, + 0.0, + 0.0, + 0.008999632831130703, + 0.059193862282804044, + 0.04307714934859953, + 0.04307714934859953, + 0.0, + 0.0, + 0.0016159254325819853, + 0.059193862282804044, + 0.08204673826694484, + 0.08963897462402066, + 0.010362679724182398, + 0.48329250046185057, + 0.4428732514381406, + 0.4428732514381406, + 0.022158348326172132, + 0.022158348326172132, + 0.00949890076049736, + 0.00949890076049736, + 0.05420222500000001, + 0.05420222500000001, + 0.0012572747522166792 + ], + "time": 8.6, + "rotation": [] + }, + { + "weights": [ + 0.020857659674116527, + 0.020857659674116527, + 0.02888475, + 0.014926525, + 0.014926525, + 0.06953102595039773, + 0.002707134539793643, + 0.002707134539793643, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.04722613133490083, + 0.04722613133490083, + 0.05126333, + 0.031517659998189715, + 0.06166294302259169, + 0.031517659998189715, + 0.002425963398335234, + 0.36350264251232123, + 0.36350264251232123, + 0.0, + 0.0, + 0.006954621949366156, + 0.07994355921234399, + 0.08924741574696127, + 0.08924741574696127, + 0.0, + 0.0, + 0.002445800070251736, + 0.07994355921234399, + 0.05423298063022747, + 0.08980398433549058, + 0.008247784844466612, + 0.5136261386530737, + 0.4721865739141189, + 0.4721865739141189, + 0.024746608606406605, + 0.024746608606406605, + 0.01278804886553968, + 0.01278804886553968, + 0.05420222500000001, + 0.05420222500000001, + 0.0009473722960267745 + ], + "time": 8.633333333333333, + "rotation": [] + }, + { + "weights": [ + 0.016928639981363493, + 0.016928639981363493, + 0.02888475, + 0.014926525, + 0.014926525, + 0.09244995894176614, + 0.0025555836568985652, + 0.0025555836568985652, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.04515618245740617, + 0.04515618245740617, + 0.05126333, + 0.026361921288961337, + 0.053872548341751064, + 0.026361921288961337, + 0.0030318227530057923, + 0.34089769721031166, + 0.34089769721031166, + 0.0, + 0.0, + 0.004981783777475353, + 0.08864901853459217, + 0.14065086916089048, + 0.14065086916089048, + 4.407092928886415e-05, + 4.407092928886415e-05, + 0.0030198486056178795, + 0.08864901853459217, + 0.03671759430851253, + 0.09112595106874188, + 0.005606954544782636, + 0.5265729759420664, + 0.5052116262061253, + 0.5052116262061253, + 0.026137470688138674, + 0.026137470688138674, + 0.012952814756759565, + 0.012952814756759565, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 8.666666666666666, + "rotation": [] + }, + { + "weights": [ + 0.015622452460229388, + 0.015622452460229388, + 0.02888475, + 0.014926525, + 0.014926525, + 0.09158982879349159, + 0.0013008635025471443, + 0.0013008635025471443, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02085538856986863, + 0.06654822111129757, + 0.02085538856986863, + 0.0043970365942056664, + 0.327427040679114, + 0.327427040679114, + 0.0, + 0.0, + 0.005894336955887928, + 0.08726695392812997, + 0.21603339239954936, + 0.21603339239954936, + 0.0001338113631520952, + 0.0001338113631520952, + 0.002323080865400177, + 0.08726695392812997, + 0.025881686593805027, + 0.09224913716316217, + 0.0030224398842879693, + 0.5306914142199921, + 0.5144857095820561, + 0.5144857095820561, + 0.026670628296477438, + 0.026670628296477438, + 0.019887106227023246, + 0.019887106227023246, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 8.7, + "rotation": [] + }, + { + "weights": [ + 0.016032617086810717, + 0.016032617086810717, + 0.02888475, + 0.014926525, + 0.014926525, + 0.07014896305544031, + 9.221531716840589e-05, + 9.221531716840589e-05, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.01878146238394567, + 0.09666930624416892, + 0.01878146238394567, + 0.005585530493408438, + 0.30731723521436943, + 0.30731723521436943, + 0.0, + 0.0, + 0.006147422854389459, + 0.07995802600468903, + 0.33418193353073916, + 0.33418193353073916, + 6.423438233988625e-05, + 6.423438233988625e-05, + 0.000752057614071028, + 0.07995802600468903, + 0.016542852244206825, + 0.0962001781378473, + 0.0, + 0.5420169149126322, + 0.49502473558698357, + 0.49502473558698357, + 0.02688117376395633, + 0.02688117376395633, + 0.04078083022364546, + 0.04078083022364546, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 8.733333333333333, + "rotation": [] + }, + { + "weights": [ + 0.016663016831236218, + 0.016663016831236218, + 0.02888475, + 0.014926525, + 0.014926525, + 0.04296659039599552, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.021224871163745607, + 0.12576994282858706, + 0.021224871163745607, + 0.006684878189116712, + 0.28451055565050654, + 0.28451055565050654, + 3.908004079546244e-05, + 3.908004079546244e-05, + 0.006780856528452458, + 0.07285670999969751, + 0.46358253338507216, + 0.46358253338507216, + 0.0, + 0.0, + 0.0, + 0.07285670999969751, + 0.011331652424165173, + 0.1047449831451688, + 0.0, + 0.5520137429237363, + 0.46001403118882833, + 0.46001403118882833, + 0.02637360819748468, + 0.02637360819748468, + 0.064860944875649, + 0.064860944875649, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 8.766666666666667, + "rotation": [] + }, + { + "weights": [ + 0.016164545448763022, + 0.016164545448763022, + 0.02888475, + 0.014926525, + 0.014926525, + 0.027606997106756462, + 0.000612202898732253, + 0.000612202898732253, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02678517727749109, + 0.12871565478188646, + 0.02678517727749109, + 0.007696739491075273, + 0.26637958501066467, + 0.26637958501066467, + 0.000710264120383986, + 0.000710264120383986, + 0.013292159246546868, + 0.07107203943388798, + 0.5506038963794706, + 0.5506038963794706, + 2.0829162427356653e-06, + 2.0829162427356653e-06, + 0.0008147397477711938, + 0.07107203943388798, + 0.011161884771926055, + 0.10953935235738749, + 0.0, + 0.5472846618720459, + 0.425, + 0.425, + 0.02434670173696108, + 0.02434670173696108, + 0.0781172325036355, + 0.0781172325036355, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 8.8, + "rotation": [] + }, + { + "weights": [ + 0.01585236641445329, + 0.01585236641445329, + 0.02888475, + 0.014926525, + 0.014926525, + 0.03160348843250954, + 0.0018467643630823908, + 0.0018467643630823908, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.032804588726412565, + 0.10426922185080385, + 0.032804588726412565, + 0.009744947057749538, + 0.24394141818795873, + 0.24394141818795873, + 0.0008187306303131791, + 0.0008187306303131791, + 0.03402914649673869, + 0.07504986503294532, + 0.5882977881601875, + 0.5882977881601875, + 0.0009072134005171905, + 0.0009072134005171905, + 0.004481951812548294, + 0.07504986503294532, + 0.012585195153951638, + 0.10278627468006946, + 0.0, + 0.5228047592299322, + 0.425, + 0.425, + 0.020842432464872072, + 0.020842432464872072, + 0.08377023498926839, + 0.08377023498926839, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 8.833333333333334, + "rotation": [] + }, + { + "weights": [ + 0.01696913165173359, + 0.01696913165173359, + 0.02888475, + 0.014926525, + 0.014926525, + 0.04146011226943559, + 0.003606954030692575, + 0.003606954030692575, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.04600201589720587, + 0.07655477762222285, + 0.04600201589720587, + 0.010672188616756876, + 0.2050566495529242, + 0.2050566495529242, + 0.00019118037972865346, + 0.00019118037972865346, + 0.06502464605229237, + 0.07889106678111207, + 0.608945138113839, + 0.608945138113839, + 0.0023644046591860895, + 0.0023644046591860895, + 0.007802792079746719, + 0.07889106678111207, + 0.010538528220994124, + 0.08419188175882608, + 0.0, + 0.48604842850140134, + 0.425, + 0.425, + 0.017008226364850988, + 0.017008226364850988, + 0.09395181834697719, + 0.09395181834697719, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 8.866666666666667, + "rotation": [] + }, + { + "weights": [ + 0.021590948424168983, + 0.021590948424168983, + 0.0346934985901628, + 0.014926525, + 0.014926525, + 0.04277923224227767, + 0.005648751849574699, + 0.005648751849574699, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.04640085659921167, + 0.04640085659921167, + 0.06862512459712365, + 0.05664871856570241, + 0.0671316984721592, + 0.05664871856570241, + 0.012713035036410596, + 0.15794461773974544, + 0.15794461773974544, + 0.0, + 0.0, + 0.10204731619783805, + 0.07894089525299408, + 0.6380487195083069, + 0.6380487195083069, + 0.0038469183125666192, + 0.0038469183125666192, + 0.012523201068064989, + 0.07894089525299408, + 0.00892457185047013, + 0.06811766730887545, + 0.0, + 0.445093876974923, + 0.425, + 0.425, + 0.015224050283431998, + 0.015224050283431998, + 0.10465168686849724, + 0.10465168686849724, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 8.9, + "rotation": [] + }, + { + "weights": [ + 0.028649875867579652, + 0.028649875867579652, + 0.04364502302237917, + 0.015177994967058045, + 0.015177994967058045, + 0.03611627465912271, + 0.009208302392757361, + 0.009208302392757361, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.06604406495711632, + 0.06604406495711632, + 0.05848978459835049, + 0.05848978459835049, + 0.08343371136912271, + 0.06150364279747004, + 0.0723772658620561, + 0.06150364279747004, + 0.01774175028715813, + 0.12111493104270513, + 0.12111493104270513, + 0.0, + 0.0, + 0.11980328421507556, + 0.0723433060837643, + 0.6589257802282056, + 0.6589257802282056, + 0.0032060153250183356, + 0.0032060153250183356, + 0.015356972747083218, + 0.0723433060837643, + 0.005988791052784234, + 0.06075187602213444, + 0.0, + 0.40668629748480634, + 0.425, + 0.425, + 0.014708255529403674, + 0.014708255529403674, + 0.10390720122626843, + 0.10390720122626843, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 8.933333333333334, + "rotation": [] + }, + { + "weights": [ + 0.03836305109517913, + 0.03836305109517913, + 0.056086296162434955, + 0.016015328786753925, + 0.016015328786753925, + 0.02146271201116695, + 0.0140124310140631, + 0.0140124310140631, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0943098221506391, + 0.0943098221506391, + 0.07139802873134608, + 0.07139802873134608, + 0.09444162020725853, + 0.061498750746250094, + 0.09244991268430432, + 0.061498750746250094, + 0.025268533985529605, + 0.08977660057800137, + 0.08977660057800137, + 0.0005320861134012901, + 0.0005320861134012901, + 0.1253163804965359, + 0.06008942345423349, + 0.6756067463329855, + 0.6756067463329855, + 0.0016922981611319926, + 0.0016922981611319926, + 0.017344868968107864, + 0.06008942345423349, + 0.002294218114444177, + 0.06031170380966997, + 0.0, + 0.36895325098718895, + 0.425, + 0.425, + 0.01568089827895163, + 0.01568089827895163, + 0.0945670616413865, + 0.0945670616413865, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 8.966666666666667, + "rotation": [] + }, + { + "weights": [ + 0.032902072406038096, + 0.032902072406038096, + 0.06162666145129263, + 0.02180848725573348, + 0.02180848725573348, + 0.01641847439414381, + 0.012200860980150541, + 0.012200860980150541, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.08365972663060484, + 0.08365972663060484, + 0.07931400619802012, + 0.07931400619802012, + 0.08218436457432134, + 0.05984212000455168, + 0.10722206519574527, + 0.05984212000455168, + 0.02332260640623159, + 0.07827482908926121, + 0.07827482908926121, + 0.0073034123955117046, + 0.0073034123955117046, + 0.10874033723710738, + 0.06511609824944503, + 0.5767843396084844, + 0.5767843396084844, + 0.006863557180250373, + 0.006863557180250373, + 0.02983407227803957, + 0.06511609824944503, + 0.010052665212527408, + 0.07426202673693083, + 0.013520691614775423, + 0.31089869871988957, + 0.425, + 0.425, + 0.0028312805770053717, + 0.0028312805770053717, + 0.0796594546842356, + 0.0796594546842356, + 0.05685801119570845, + 0.05685801119570845, + 5.286076505269308e-05 + ], + "time": 9.0, + "rotation": [] + }, + { + "weights": [ + 0.02368444419865095, + 0.02368444419865095, + 0.0670177810248874, + 0.020663039795015194, + 0.020663039795015194, + 0.013698960947138896, + 0.00909960287002225, + 0.00909960287002225, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.06572938712668555, + 0.06572938712668555, + 0.08960962884482876, + 0.08960962884482876, + 0.06558870894036112, + 0.05843131311592595, + 0.12188045751480821, + 0.05843131311592595, + 0.01882593953272414, + 0.06324273528797268, + 0.06324273528797268, + 0.021024892177565813, + 0.021024892177565813, + 0.08936510877240261, + 0.0788181440106459, + 0.4551105651649684, + 0.4551105651649684, + 0.016018157399126452, + 0.016018157399126452, + 0.05513711396959563, + 0.0788181440106459, + 0.022072917010102937, + 0.0859744144337517, + 0.031041836170923126, + 0.24776570470560133, + 0.425, + 0.425, + 0.002463303374037853, + 0.002463303374037853, + 0.063741086693924, + 0.063741086693924, + 0.05420222500000001, + 0.05420222500000001, + 0.0005186249635049271 + ], + "time": 9.033333333333333, + "rotation": [] + }, + { + "weights": [ + 0.016618326173296977, + 0.016618326173296977, + 0.0682031172726835, + 0.019173283849068197, + 0.019173283849068197, + 0.009937160036393552, + 0.007961377408355468, + 0.007961377408355468, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.09977519038532454, + 0.09977519038532454, + 0.05126333, + 0.05768994784780905, + 0.13174765552793222, + 0.05768994784780905, + 0.015337614592031687, + 0.048226834687271146, + 0.048226834687271146, + 0.029153930174951825, + 0.029153930174951825, + 0.07165256392742897, + 0.08384080444063449, + 0.34289125917213253, + 0.34289125917213253, + 0.022877472000462657, + 0.022877472000462657, + 0.06939347955132166, + 0.08384080444063449, + 0.02568822801113127, + 0.08432001993060104, + 0.0349340969962733, + 0.18591578150434132, + 0.425, + 0.425, + 0.0020030018293431795, + 0.0020030018293431795, + 0.048354767854990634, + 0.048354767854990634, + 0.05420222500000001, + 0.05420222500000001, + 0.0015387953791235168 + ], + "time": 9.066666666666666, + "rotation": [] + }, + { + "weights": [ + 0.011918903701007354, + 0.011918903701007354, + 0.05908499690038813, + 0.01725737119069133, + 0.01725737119069133, + 0.007124085511480044, + 0.0073797183754366015, + 0.0073797183754366015, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.10138853380367863, + 0.10138853380367863, + 0.05126333, + 0.05650940984487528, + 0.1292819088981264, + 0.05650940984487528, + 0.011138731950805288, + 0.0656979594557057, + 0.0656979594557057, + 0.023481897089075995, + 0.023481897089075995, + 0.052473238642726565, + 0.06751654309531047, + 0.2337083336675448, + 0.2337083336675448, + 0.01976801204894269, + 0.01976801204894269, + 0.05509615644723884, + 0.06751654309531047, + 0.017082590716225747, + 0.06870353044498528, + 0.02455769876639047, + 0.1279531508684157, + 0.425, + 0.425, + 0.0019060363978857056, + 0.0019060363978857056, + 0.03236806519063451, + 0.03236806519063451, + 0.05420222500000001, + 0.05420222500000001, + 0.0016321228196223571 + ], + "time": 9.1, + "rotation": [] + }, + { + "weights": [ + 0.007414606282880307, + 0.007414606282880307, + 0.040863552575005936, + 0.015298129084295833, + 0.015298129084295833, + 0.009522288121333725, + 0.006353656834713655, + 0.006353656834713655, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.09284433534102773, + 0.09284433534102773, + 0.05126333, + 0.052988889217376677, + 0.10834133668659487, + 0.052988889217376677, + 0.007660195313197662, + 0.12924453813240527, + 0.12924453813240527, + 0.01063679092532264, + 0.01063679092532264, + 0.028975545504466176, + 0.04405545293651263, + 0.1261967121120414, + 0.1261967121120414, + 0.011388352109993592, + 0.011388352109993592, + 0.028272778114088522, + 0.04405545293651263, + 0.006028726014758447, + 0.05029083793463346, + 0.014061710202977761, + 0.10285710675527844, + 0.425, + 0.425, + 0.004277991765347261, + 0.004277991765347261, + 0.016784290214240223, + 0.016784290214240223, + 0.05420222500000001, + 0.05420222500000001, + 0.0006178119308536959 + ], + "time": 9.133333333333333, + "rotation": [] + }, + { + "weights": [ + 0.006150824349297547, + 0.006150824349297547, + 0.02888475, + 0.014926525, + 0.014926525, + 0.023352682791194124, + 0.004178121858561523, + 0.004178121858561523, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07820121836449415, + 0.07820121836449415, + 0.05126333, + 0.046613161500011144, + 0.08397999960062451, + 0.046613161500011144, + 0.004145091227160725, + 0.2152058303052064, + 0.2152058303052064, + 0.002948475963643235, + 0.002948475963643235, + 0.011704113945669045, + 0.037005840006227364, + 0.07257756665653103, + 0.07257756665653103, + 0.004260856480318669, + 0.004260856480318669, + 0.011679579909434721, + 0.037005840006227364, + 0.0025335385848064772, + 0.03946681296338837, + 0.009453766367265151, + 0.14557878738763372, + 0.425, + 0.425, + 0.0096684867799282, + 0.0096684867799282, + 0.0072722193454297125, + 0.0072722193454297125, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 9.166666666666666, + "rotation": [] + }, + { + "weights": [ + 0.009777489431506511, + 0.009777489431506511, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0390658963532472, + 0.0025022548159622402, + 0.0025022548159622402, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06622318495597154, + 0.06622318495597154, + 0.05126333, + 0.03659365761492932, + 0.0729487479122317, + 0.03659365761492932, + 0.002124348874583991, + 0.296509024888581, + 0.296509024888581, + 0.0005580025628902843, + 0.0005580025628902843, + 0.0038847404535935813, + 0.04766031470225779, + 0.07649097495693327, + 0.07649097495693327, + 0.0014630342924929385, + 0.0014630342924929385, + 0.005547241690397562, + 0.04766031470225779, + 0.005366278680003414, + 0.04137404605138056, + 0.006695679788078577, + 0.2429249225891365, + 0.425, + 0.425, + 0.01581196644657424, + 0.01581196644657424, + 0.003955760475020016, + 0.003955760475020016, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 9.2, + "rotation": [] + }, + { + "weights": [ + 0.01706839618938309, + 0.01706839618938309, + 0.02888475, + 0.014926525, + 0.014926525, + 0.040410551641668575, + 0.0011062251403927794, + 0.0011062251403927794, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05985218446169577, + 0.05985218446169577, + 0.05126333, + 0.029599652857476635, + 0.08987985304423736, + 0.029599652857476635, + 0.0016414427730653955, + 0.3599445634654588, + 0.3599445634654588, + 0.0, + 0.0, + 0.00434519861425672, + 0.05746128442031994, + 0.12051853739789545, + 0.12051853739789545, + 0.00023932472935744658, + 0.00023932472935744658, + 0.001491047042821133, + 0.05746128442031994, + 0.014012199427400306, + 0.05250242799520489, + 0.004438182605164389, + 0.3515584988253455, + 0.5176244365317477, + 0.5176244365317477, + 0.019977218125547667, + 0.019977218125547667, + 0.004967833363584107, + 0.004967833363584107, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 9.233333333333333, + "rotation": [] + }, + { + "weights": [ + 0.022590074342276355, + 0.022590074342276355, + 0.02888475, + 0.014926525, + 0.014926525, + 0.02616526356765201, + 0.0004242916125804183, + 0.0004242916125804183, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05808877529842509, + 0.05808877529842509, + 0.05126333, + 0.02444837598165716, + 0.14230266383716028, + 0.02444837598165716, + 0.001926516171079128, + 0.3910931753260747, + 0.3910931753260747, + 0.0, + 0.0, + 0.0014767902238028378, + 0.054701552859374426, + 0.18585945995790606, + 0.18585945995790606, + 8.847926344190309e-05, + 8.847926344190309e-05, + 0.0, + 0.054701552859374426, + 0.029902274800198397, + 0.07327789983579086, + 0.0026456367756639196, + 0.44701862505504036, + 0.5512768937008719, + 0.5512768937008719, + 0.022125785116638444, + 0.022125785116638444, + 0.0076716672363025765, + 0.0076716672363025765, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 9.266666666666667, + "rotation": [] + }, + { + "weights": [ + 0.026721516624093042, + 0.026721516624093042, + 0.02888475, + 0.014926525, + 0.014926525, + 0.009020558957542684, + 0.0001207222895962851, + 0.0001207222895962851, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05642856056136741, + 0.05642856056136741, + 0.05126333, + 0.024121496180162426, + 0.21609881264822814, + 0.024121496180162426, + 0.0013717916494767573, + 0.38672965509550894, + 0.38672965509550894, + 0.0, + 0.0, + 7.623402135712712e-05, + 0.041676728693502266, + 0.2763795421591826, + 0.2763795421591826, + 0.00023453916822160968, + 0.00023453916822160968, + 0.0, + 0.041676728693502266, + 0.05627867047275812, + 0.1074086067931992, + 0.0, + 0.5304334274360109, + 0.5195600714002333, + 0.5195600714002333, + 0.02282587768776075, + 0.02282587768776075, + 0.009849458640175201, + 0.009849458640175201, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 9.3, + "rotation": [] + }, + { + "weights": [ + 0.02889100997043506, + 0.02889100997043506, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05569732716040948, + 0.05569732716040948, + 0.05126333, + 0.030017204042880188, + 0.26390356336321136, + 0.030017204042880188, + 4.079267548929351e-05, + 0.37365705754075706, + 0.37365705754075706, + 0.0, + 0.0, + 0.0004469081759452814, + 0.027952560463121938, + 0.3233930596283502, + 0.3233930596283502, + 0.0007883299674306594, + 0.0007883299674306594, + 0.0, + 0.027952560463121938, + 0.08710129814488543, + 0.1462340548634528, + 0.0, + 0.5821495337145666, + 0.4573012701102663, + 0.4573012701102663, + 0.02228569537401198, + 0.02228569537401198, + 0.008631141829703532, + 0.008631141829703532, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 9.333333333333334, + "rotation": [] + }, + { + "weights": [ + 0.027015966150377463, + 0.027015966150377463, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05456645547279286, + 0.05456645547279286, + 0.05126333, + 0.03855178201837198, + 0.24947753565652017, + 0.03855178201837198, + 0.0, + 0.37220430842467694, + 0.37220430842467694, + 0.0, + 0.0, + 0.001904927619865962, + 0.02363156867878776, + 0.273149547513042, + 0.273149547513042, + 0.001161030626722744, + 0.001161030626722744, + 0.0016941889455275867, + 0.02363156867878776, + 0.10964443172727306, + 0.1649559361594063, + 0.0006709040275641844, + 0.5784548401832578, + 0.425, + 0.425, + 0.021064807346888936, + 0.021064807346888936, + 0.00529689885941999, + 0.00529689885941999, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 9.366666666666667, + "rotation": [] + }, + { + "weights": [ + 0.021768987870642104, + 0.021768987870642104, + 0.02888475, + 0.014926525, + 0.014926525, + 0.002654012824807847, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05221338128404955, + 0.05221338128404955, + 0.05126333, + 0.046604872441717536, + 0.19275254453931526, + 0.046604872441717536, + 0.0, + 0.3636267606701168, + 0.3636267606701168, + 0.0, + 0.0, + 0.0010292467262063701, + 0.02981530475829327, + 0.17455335035920133, + 0.17455335035920133, + 0.000818337446876934, + 0.000818337446876934, + 0.0028544991343681285, + 0.02981530475829327, + 0.1077137947082519, + 0.14933959117957518, + 0.0028640909918716956, + 0.5174200969082966, + 0.425, + 0.425, + 0.01943419373461177, + 0.01943419373461177, + 0.003129610818411621, + 0.003129610818411621, + 0.05420222500000001, + 0.05420222500000001, + 0.0005339133952345167 + ], + "time": 9.4, + "rotation": [] + }, + { + "weights": [ + 0.015180929457502696, + 0.015180929457502696, + 0.02888475, + 0.014926525, + 0.014926525, + 0.005843702065093175, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05043391058487549, + 0.05043391058487549, + 0.05126333, + 0.04427212152097904, + 0.13336006777627119, + 0.04427212152097904, + 0.0, + 0.32474845307213906, + 0.32474845307213906, + 0.0, + 0.0, + 0.00015867927244731276, + 0.03998756275645322, + 0.10705589556268275, + 0.10705589556268275, + 0.0, + 0.0, + 0.003981536560292752, + 0.03998756275645322, + 0.0783638629530157, + 0.10981544873544143, + 0.004132748501641407, + 0.40465801741395657, + 0.425, + 0.425, + 0.016903955021074828, + 0.016903955021074828, + 0.0005622497094529011, + 0.0005622497094529011, + 0.05420222500000001, + 0.05420222500000001, + 0.00029589539127690455 + ], + "time": 9.433333333333334, + "rotation": [] + }, + { + "weights": [ + 0.009669057945055615, + 0.009669057945055615, + 0.02888475, + 0.015280668810561043, + 0.015280668810561043, + 0.006995649848665506, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05259890715990745, + 0.05259890715990745, + 0.05126333, + 0.03728602352951252, + 0.09668690851756499, + 0.03728602352951252, + 0.0, + 0.2629764569657188, + 0.2629764569657188, + 0.0006203786067531566, + 0.0006203786067531566, + 0.0018078525151525209, + 0.045098732039332366, + 0.08078901001385275, + 0.08078901001385275, + 0.004404560556369165, + 0.004404560556369165, + 0.006545185809954996, + 0.045098732039332366, + 0.03981157200677052, + 0.075621228984424, + 0.008209749151553421, + 0.2505277045603308, + 0.425, + 0.425, + 0.013087804886911589, + 0.013087804886911589, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 9.466666666666667, + "rotation": [] + }, + { + "weights": [ + 0.003980648198298043, + 0.003980648198298043, + 0.02888475, + 0.016767561542687413, + 0.016767561542687413, + 0.005331839621067044, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05975101419857566, + 0.05975101419857566, + 0.05126333, + 0.03337141918586253, + 0.08291594573429648, + 0.03337141918586253, + 0.0014877444731869853, + 0.20342645772865828, + 0.20342645772865828, + 0.00424002072740612, + 0.00424002072740612, + 0.0042343423834868815, + 0.04331661335059572, + 0.05777074987334861, + 0.05777074987334861, + 0.012579382956027979, + 0.012579382956027979, + 0.010507640082921293, + 0.04331661335059572, + 0.012496762084109426, + 0.07210172478641777, + 0.017451546554054523, + 0.10626502281853123, + 0.425, + 0.425, + 0.008815306025956354, + 0.008815306025956354, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 9.5, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.04288385042122429, + 0.018522846273564608, + 0.018522846273564608, + 0.004514192470482414, + 0.0004809739001627476, + 0.0004809739001627476, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07032308786043096, + 0.07032308786043096, + 0.05126333, + 0.033272000926769796, + 0.08963928427015028, + 0.033272000926769796, + 0.005498859705403444, + 0.17919266351631696, + 0.17919266351631696, + 0.009724971145125367, + 0.009724971145125367, + 0.008959737632955819, + 0.03944200011236325, + 0.027303453321967784, + 0.027303453321967784, + 0.015436513908207411, + 0.015436513908207411, + 0.014288659979190137, + 0.03944200011236325, + 0.019505420540060298, + 0.11662653642041335, + 0.030709012757454583, + 0.02149692055370123, + 0.425, + 0.425, + 0.005476974600127761, + 0.005476974600127761, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.0001757865239466938 + ], + "time": 9.533333333333333, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.05583961691175185, + 0.01935594465106487, + 0.01935594465106487, + 0.006413110345602032, + 0.0014576521569064679, + 0.0014576521569064679, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.08262767648058274, + 0.08262767648058274, + 0.05126333, + 0.034743424976334564, + 0.11430142130170542, + 0.034743424976334564, + 0.009798898581149318, + 0.2097436006580079, + 0.2097436006580079, + 0.01157037934554474, + 0.01157037934554474, + 0.013515182052339819, + 0.03406526697799562, + 0.010112159965293733, + 0.010112159965293733, + 0.010267864327345569, + 0.010267864327345569, + 0.017547208656157755, + 0.03406526697799562, + 0.05147867149540353, + 0.1830226921609469, + 0.03245344279067855, + 0.002445558458566652, + 0.425, + 0.425, + 0.0038318661334259137, + 0.0038318661334259137, + 6.698714569210997e-05, + 6.698714569210997e-05, + 0.05420222500000001, + 0.05420222500000001, + 0.0013596682942339346 + ], + "time": 9.566666666666666, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.06119835696050095, + 0.018324021516652786, + 0.018324021516652786, + 0.008031315143619261, + 0.0015267463600529083, + 0.0015267463600529083, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.08918611471142082, + 0.08918611471142082, + 0.05126333, + 0.038091258651443874, + 0.16195317370550966, + 0.038091258651443874, + 0.012586800461368893, + 0.2734550399439674, + 0.2734550399439674, + 0.007856225999338284, + 0.007856225999338284, + 0.016399158430950973, + 0.024190183263272033, + 0.022341635397502318, + 0.022341635397502318, + 0.004662350166056834, + 0.004662350166056834, + 0.019080598253224564, + 0.024190183263272033, + 0.07598091300044738, + 0.2205521366425922, + 0.023113980942538793, + 0.005558857162083879, + 0.425, + 0.425, + 0.0048857074656656774, + 0.0048857074656656774, + 0.0017606733899031353, + 0.0017606733899031353, + 0.05420222500000001, + 0.05420222500000001, + 0.0016674449667334551 + ], + "time": 9.6, + "rotation": [] + }, + { + "weights": [ + 0.0031887781673244045, + 0.0031887781673244045, + 0.059453936559813333, + 0.01615529416982378, + 0.01615529416982378, + 0.006074505725077217, + 0.0014667688669370745, + 0.0014667688669370745, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.08873144718153131, + 0.08873144718153131, + 0.05126333, + 0.04395047585879051, + 0.2168897032737731, + 0.04395047585879051, + 0.013042515888810152, + 0.3061865410634448, + 0.3061865410634448, + 0.003247479930786147, + 0.003247479930786147, + 0.016402151754924217, + 0.011021171084472103, + 0.09903257952204764, + 0.09903257952204764, + 0.0021096244188291667, + 0.0021096244188291667, + 0.018621662205883426, + 0.011021171084472103, + 0.06517557459218158, + 0.1940141662955283, + 0.011683057461466098, + 0.04396892711520191, + 0.425, + 0.425, + 0.0074714838447315305, + 0.0074714838447315305, + 0.004373310479734622, + 0.004373310479734622, + 0.05420222500000001, + 0.05420222500000001, + 0.00048309764159577226 + ], + "time": 9.633333333333333, + "rotation": [] + }, + { + "weights": [ + 0.010226682892867493, + 0.010226682892867493, + 0.05307068116962907, + 0.014926525, + 0.014926525, + 0.0030889768685613316, + 0.003110567526891826, + 0.003110567526891826, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.08130442010504854, + 0.08130442010504854, + 0.05126333, + 0.049832824457968966, + 0.23698737893785735, + 0.049832824457968966, + 0.011950735960687903, + 0.2947483509778974, + 0.2947483509778974, + 0.0015523466138568293, + 0.0015523466138568293, + 0.018215494283608018, + 0.002395651715674567, + 0.23509950733610552, + 0.23509950733610552, + 0.000889837050012179, + 0.000889837050012179, + 0.01562963612377643, + 0.002395651715674567, + 0.03465106221182004, + 0.13137612129960735, + 0.008611179356064109, + 0.1372038614537034, + 0.425, + 0.425, + 0.010549515821039671, + 0.010549515821039671, + 0.008774371072649948, + 0.008774371072649948, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 9.666666666666666, + "rotation": [] + }, + { + "weights": [ + 0.014404123329690516, + 0.014404123329690516, + 0.0425413798008646, + 0.014926525, + 0.014926525, + 0.00640041232109069, + 0.004977295035496351, + 0.004977295035496351, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07408563217946457, + 0.07408563217946457, + 0.05126333, + 0.05053728808249743, + 0.20121206436838412, + 0.05053728808249743, + 0.01178005598485469, + 0.27479689589568534, + 0.27479689589568534, + 0.0007651689861501961, + 0.0007651689861501961, + 0.019991990498134056, + 0.010147344480667786, + 0.3543579900903359, + 0.3543579900903359, + 0.0003327230789831703, + 0.0003327230789831703, + 0.013661401426153515, + 0.010147344480667786, + 0.013972368197781686, + 0.08075618637459613, + 0.006849835600171766, + 0.2682015116725648, + 0.425, + 0.425, + 0.013207212601389195, + 0.013207212601389195, + 0.02330756160829747, + 0.02330756160829747, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 9.7, + "rotation": [] + }, + { + "weights": [ + 0.016455869829016062, + 0.016455869829016062, + 0.02972948317016872, + 0.014926525, + 0.014926525, + 0.023961300296442833, + 0.005541191988491584, + 0.005541191988491584, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06850703475730757, + 0.06850703475730757, + 0.05126333, + 0.048599971937281716, + 0.13495041097913463, + 0.048599971937281716, + 0.012497417681983532, + 0.2708213933876581, + 0.2708213933876581, + 0.0, + 0.0, + 0.021616494229861654, + 0.034696959717465274, + 0.39743479468992754, + 0.39743479468992754, + 0.0, + 0.0, + 0.013021699073059211, + 0.034696959717465274, + 0.007892377142395286, + 0.06252776575939992, + 0.006315052402870992, + 0.384946126597268, + 0.425, + 0.425, + 0.01577986483063016, + 0.01577986483063016, + 0.04302831582192861, + 0.04302831582192861, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 9.733333333333333, + "rotation": [] + }, + { + "weights": [ + 0.017453121899494092, + 0.017453121899494092, + 0.02888475, + 0.014926525, + 0.014926525, + 0.05034133887716699, + 0.00512978968077472, + 0.00512978968077472, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06675513152565271, + 0.06675513152565271, + 0.05126333, + 0.042526968887874037, + 0.0840760013035365, + 0.042526968887874037, + 0.013131253900272498, + 0.2668531079377445, + 0.2668531079377445, + 0.0, + 0.0, + 0.025913176685571655, + 0.06117517898923581, + 0.3918675912278037, + 0.3918675912278037, + 0.0007182429145489411, + 0.0007182429145489411, + 0.013779449649155132, + 0.06117517898923581, + 0.01018276895795549, + 0.06474258537803373, + 0.008349068143538061, + 0.46697990383420646, + 0.425, + 0.425, + 0.01719329039965356, + 0.01719329039965356, + 0.056757751293480374, + 0.056757751293480374, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 9.766666666666667, + "rotation": [] + }, + { + "weights": [ + 0.020045038844857886, + 0.020045038844857886, + 0.02888475, + 0.014926525, + 0.014926525, + 0.06881216466426845, + 0.0058068259486130265, + 0.0058068259486130265, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06687768570014405, + 0.06687768570014405, + 0.05126333, + 0.036796948154057756, + 0.060997551168714206, + 0.036796948154057756, + 0.012876382470130912, + 0.25450026818684157, + 0.25450026818684157, + 0.0, + 0.0, + 0.03546070605516432, + 0.07523359422172815, + 0.39342565068176794, + 0.39342565068176794, + 0.0029919449772153562, + 0.0029919449772153562, + 0.01369632711367947, + 0.07523359422172815, + 0.013611076027154913, + 0.07349691731589177, + 0.009897065481969284, + 0.5134903694902144, + 0.425, + 0.425, + 0.01800301051565578, + 0.01800301051565578, + 0.05821905929063044, + 0.05821905929063044, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 9.8, + "rotation": [] + }, + { + "weights": [ + 0.025946649430053557, + 0.025946649430053557, + 0.02888475, + 0.014926525, + 0.014926525, + 0.06750317748103819, + 0.008778623684442464, + 0.008778623684442464, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06793312675186561, + 0.06793312675186561, + 0.05126333, + 0.03004331420344386, + 0.059327217681067294, + 0.03004331420344386, + 0.014981413366539128, + 0.23538648294551018, + 0.23538648294551018, + 0.00038051179410623643, + 0.00038051179410623643, + 0.043439561341490046, + 0.07976940375353604, + 0.4079623937606809, + 0.4079623937606809, + 0.00487272614347083, + 0.00487272614347083, + 0.012476235787783344, + 0.07976940375353604, + 0.017723343947104037, + 0.08369540976626527, + 0.009138954643692285, + 0.5154017031192777, + 0.425, + 0.425, + 0.018957626904760078, + 0.018957626904760078, + 0.052922767959535086, + 0.052922767959535086, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 9.833333333333334, + "rotation": [] + }, + { + "weights": [ + 0.03297786494450908, + 0.03297786494450908, + 0.02888475, + 0.015728255734398705, + 0.015728255734398705, + 0.05152800902724263, + 0.013774282039542275, + 0.013774282039542275, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.06423129335577996, + 0.06423129335577996, + 0.06863446310162541, + 0.06863446310162541, + 0.05126333, + 0.025551952946222846, + 0.06864772694451464, + 0.025551952946222846, + 0.019763165446264393, + 0.21812549510172421, + 0.21812549510172421, + 0.0002889909475509608, + 0.0002889909475509608, + 0.04876129893319944, + 0.07839840991156437, + 0.420412645595414, + 0.420412645595414, + 0.005154740703957419, + 0.005154740703957419, + 0.008040089532732959, + 0.07839840991156437, + 0.01955694875546863, + 0.08982533982821868, + 0.007323023676872249, + 0.4739071309566495, + 0.425, + 0.425, + 0.01975456667797905, + 0.01975456667797905, + 0.042108264592077026, + 0.042108264592077026, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 9.866666666666667, + "rotation": [] + }, + { + "weights": [ + 0.03678144509238854, + 0.03678144509238854, + 0.036333978388990655, + 0.016399994439863477, + 0.016399994439863477, + 0.031412980599062765, + 0.019742836164576658, + 0.019742836164576658, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.09105938257915627, + 0.09105938257915627, + 0.06805500739387099, + 0.06805500739387099, + 0.05126333, + 0.02372955681791748, + 0.08998553446360992, + 0.02372955681791748, + 0.023281277662941375, + 0.21496735321623928, + 0.21496735321623928, + 0.00019211268118981788, + 0.00019211268118981788, + 0.049411726849419704, + 0.07062128058501647, + 0.405157360434532, + 0.405157360434532, + 0.004230904339679648, + 0.004230904339679648, + 0.006421237824750794, + 0.07062128058501647, + 0.020030711059059403, + 0.09835170528718397, + 0.00593253299593925, + 0.410872069426945, + 0.425, + 0.425, + 0.020341242956263668, + 0.020341242956263668, + 0.031983939558267574, + 0.031983939558267574, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 9.9, + "rotation": [] + }, + { + "weights": [ + 0.043483843068991355, + 0.043483843068991355, + 0.043744313078267205, + 0.016245098997990745, + 0.016245098997990745, + 0.022338120958634758, + 0.023345900938979196, + 0.023345900938979196, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.10913446300796097, + 0.10913446300796097, + 0.06635309968675882, + 0.06635309968675882, + 0.05126333, + 0.025045223313606802, + 0.11011680211339675, + 0.025045223313606802, + 0.026070717136774724, + 0.21815579363277962, + 0.21815579363277962, + 0.0002593148037392111, + 0.0002593148037392111, + 0.052461636492184195, + 0.061551266270024385, + 0.38033460378646816, + 0.38033460378646816, + 0.003274932104562007, + 0.003274932104562007, + 0.005717699748596969, + 0.061551266270024385, + 0.025851147728306885, + 0.10927050496850686, + 0.006585939973592752, + 0.36196053198405626, + 0.425, + 0.425, + 0.02146020455019813, + 0.02146020455019813, + 0.027894672751426666, + 0.027894672751426666, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 9.933333333333334, + "rotation": [] + }, + { + "weights": [ + 0.05133232181625702, + 0.05133232181625702, + 0.04952098929456297, + 0.015310946001024926, + 0.015310946001024926, + 0.02009478967104636, + 0.025499782418566062, + 0.025499782418566062, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.12082536710160115, + 0.12082536710160115, + 0.06363095736929342, + 0.06363095736929342, + 0.05126333, + 0.032420019725603696, + 0.13296940156391687, + 0.032420019725603696, + 0.027926379867962408, + 0.22974124593394118, + 0.22974124593394118, + 0.0009451492553177694, + 0.0009451492553177694, + 0.05627899159278184, + 0.04969321170023504, + 0.3414916276931758, + 0.3414916276931758, + 0.0020040246258888894, + 0.0020040246258888894, + 0.00656764431457434, + 0.04969321170023504, + 0.035263506110225384, + 0.12275703975132524, + 0.008801670372486107, + 0.31756873386246753, + 0.425, + 0.425, + 0.022934055817978704, + 0.022934055817978704, + 0.028368561528623062, + 0.028368561528623062, + 0.05420222500000001, + 0.05420222500000001, + 0.0013577294668981046 + ], + "time": 9.966666666666667, + "rotation": [] + }, + { + "weights": [ + 0.046081522433150515, + 0.046081522433150515, + 0.043621852224705306, + 0.020812134198666073, + 0.020812134198666073, + 0.02124292709034718, + 0.02236275908613232, + 0.02236275908613232, + 0.0002874969396752051, + 0.0002874969396752051, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.10459755164843526, + 0.10459755164843526, + 0.059646935333706796, + 0.059646935333706796, + 0.05126333, + 0.03306382750653766, + 0.12676860947349433, + 0.03306382750653766, + 0.024633774236794907, + 0.24996682617331817, + 0.24996682617331817, + 0.00024924003473810884, + 0.00024924003473810884, + 0.04907269815857307, + 0.054692816356209595, + 0.3202127660739984, + 0.3202127660739984, + 0.0015392736616690107, + 0.0015392736616690107, + 0.006996221104953557, + 0.054692816356209595, + 0.03693810804056469, + 0.12293624757098487, + 0.008390199091462852, + 0.3360817121851193, + 0.4355903232097623, + 0.4355903232097623, + 0.007620446636076679, + 0.007620446636076679, + 0.024715729559372526, + 0.024715729559372526, + 0.05678718642004103, + 0.05678718642004103, + 0.0012217694237118706 + ], + "time": 10.0, + "rotation": [] + }, + { + "weights": [ + 0.03946669559393605, + 0.03946669559393605, + 0.03734135997614685, + 0.01926693980256398, + 0.01926693980256398, + 0.017538001246395533, + 0.017826135179382675, + 0.017826135179382675, + 0.5196578962951348, + 0.5196578962951348, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0828348353327739, + 0.0828348353327739, + 0.05744477882981292, + 0.05744477882981292, + 0.05126333, + 0.030808653559537033, + 0.13403583980741943, + 0.030808653559537033, + 0.019896366833043924, + 0.2708846671240667, + 0.2708846671240667, + 0.0002400506388817337, + 0.0002400506388817337, + 0.039650547823735595, + 0.05612028936545048, + 0.30018915569498383, + 0.30018915569498383, + 0.0008221750812871088, + 0.0008221750812871088, + 0.007028294310328499, + 0.05612028936545048, + 0.038996006903194214, + 0.12150419496354589, + 0.0066722438094161726, + 0.3712884670212149, + 0.44159593042873174, + 0.44159593042873174, + 0.010497771765504555, + 0.010497771765504555, + 0.0201773431861684, + 0.0201773431861684, + 0.05420222500000001, + 0.05420222500000001, + 0.0009664893682513937 + ], + "time": 10.033333333333333, + "rotation": [] + }, + { + "weights": [ + 0.03671845387933505, + 0.03671845387933505, + 0.033400671649724205, + 0.0178693049727244, + 0.0178693049727244, + 0.009978631245238418, + 0.013251445864859414, + 0.013251445864859414, + 0.8892659169778959, + 0.8892659169778959, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.06354294407314481, + 0.06354294407314481, + 0.05651281555848455, + 0.05651281555848455, + 0.05126333, + 0.029428282964532447, + 0.17096621326037806, + 0.029428282964532447, + 0.01490542577064062, + 0.28598459341696303, + 0.28598459341696303, + 0.00013381426597646034, + 0.00013381426597646034, + 0.030885999649763067, + 0.04695509972849057, + 0.28315481916069946, + 0.28315481916069946, + 0.00020667424957666896, + 0.00020667424957666896, + 0.006480287228311805, + 0.04695509972849057, + 0.047721903079322364, + 0.12619806059769206, + 0.004773563678775509, + 0.41754372460501477, + 0.4348849422165323, + 0.4348849422165323, + 0.012211057252117557, + 0.012211057252117557, + 0.01595539640901341, + 0.01595539640901341, + 0.05420222500000001, + 0.05420222500000001, + 0.000872767530381681 + ], + "time": 10.066666666666666, + "rotation": [] + }, + { + "weights": [ + 0.03631733019082316, + 0.03631733019082316, + 0.02888475, + 0.016698209604980037, + 0.016698209604980037, + 0.004583717563322598, + 0.008412781918776164, + 0.008412781918776164, + 0.8796409037239294, + 0.8796409037239294, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.054802189075521, + 0.054802189075521, + 0.05126333, + 0.029073691666482337, + 0.22187295153027478, + 0.029073691666482337, + 0.009498320723928144, + 0.29527685188111785, + 0.29527685188111785, + 7.21123069413893e-05, + 7.21123069413893e-05, + 0.021081074504625204, + 0.03372326027158466, + 0.26074630224278966, + 0.26074630224278966, + 8.233534615663658e-06, + 8.233534615663658e-06, + 0.005282178840466903, + 0.03372326027158466, + 0.06802158323781826, + 0.13828475815909236, + 0.003067214325779956, + 0.48089898455710584, + 0.425, + 0.425, + 0.013438243231603067, + 0.013438243231603067, + 0.0115353852377406, + 0.0115353852377406, + 0.05420222500000001, + 0.05420222500000001, + 0.0007590917249520627 + ], + "time": 10.1, + "rotation": [] + }, + { + "weights": [ + 0.035629433750168575, + 0.035629433750168575, + 0.02888475, + 0.015360220732367634, + 0.015360220732367634, + 0.0009618711775662887, + 0.0036581773813940573, + 0.0036581773813940573, + 0.3975201798549132, + 0.3975201798549132, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05015913828725917, + 0.05015913828725917, + 0.05126333, + 0.029694643936469724, + 0.25813395372053377, + 0.029694643936469724, + 0.0037158922941604453, + 0.311567500937147, + 0.311567500937147, + 5.0322182446109975e-05, + 5.0322182446109975e-05, + 0.00983686341923109, + 0.021342641096055284, + 0.1968266201445033, + 0.1968266201445033, + 0.00025810579737635636, + 0.00025810579737635636, + 0.004543286290741998, + 0.021342641096055284, + 0.09883354212151087, + 0.15091833646402866, + 0.0015641296158234255, + 0.5390943782021396, + 0.425, + 0.425, + 0.014734616217179355, + 0.014734616217179355, + 0.006192066697847265, + 0.006192066697847265, + 0.05420222500000001, + 0.05420222500000001, + 0.0006912508059521112 + ], + "time": 10.133333333333333, + "rotation": [] + }, + { + "weights": [ + 0.03448109812654401, + 0.03448109812654401, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0, + 0.000835516387216593, + 0.000835516387216593, + 0.13846482923544645, + 0.13846482923544645, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.04504553995490365, + 0.04504553995490365, + 0.05126333, + 0.031505622429255, + 0.25106432875808393, + 0.031505622429255, + 0.00014649654192165607, + 0.3345235245690052, + 0.3345235245690052, + 7.618400743326207e-05, + 7.618400743326207e-05, + 0.0024676019348660247, + 0.0132873470568079, + 0.10712680915636669, + 0.10712680915636669, + 0.0006463939339226603, + 0.0006463939339226603, + 0.00409019936370302, + 0.0132873470568079, + 0.12315006823868162, + 0.15391944028893287, + 0.0007388453824179503, + 0.5463114495666657, + 0.425, + 0.425, + 0.015841227977008227, + 0.015841227977008227, + 0.0017539816642446148, + 0.0017539816642446148, + 0.05420222500000001, + 0.05420222500000001, + 0.0008315645135482959 + ], + "time": 10.166666666666666, + "rotation": [] + }, + { + "weights": [ + 0.03250154375421756, + 0.03250154375421756, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0, + 0.00017902596397515448, + 0.00017902596397515448, + 0.016484410887706802, + 0.016484410887706802, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.0333118249511828, + 0.20279238498940746, + 0.0333118249511828, + 0.0, + 0.35081062294998927, + 0.35081062294998927, + 4.288172045275946e-05, + 4.288172045275946e-05, + 0.0007923171578013157, + 0.013292481394066486, + 0.03815461222614558, + 0.03815461222614558, + 0.0004914361044612466, + 0.0004914361044612466, + 0.002790268578623629, + 0.013292481394066486, + 0.13032416523871365, + 0.140847759696902, + 0.0009451024553605473, + 0.49554249112703336, + 0.425, + 0.425, + 0.01680034903829194, + 0.01680034903829194, + 0.00011392085413847636, + 0.00011392085413847636, + 0.05420222500000001, + 0.05420222500000001, + 0.0010196064876354465 + ], + "time": 10.2, + "rotation": [] + }, + { + "weights": [ + 0.029957990561212795, + 0.029957990561212795, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0018767535686492897, + 0.00010327861777373714, + 0.00010327861777373714, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03433918654156003, + 0.1338571631908416, + 0.03433918654156003, + 0.0, + 0.3482005936758857, + 0.3482005936758857, + 1.6303019864218505e-05, + 1.6303019864218505e-05, + 0.0029875256121158584, + 0.02242404684158307, + 0.012889889414821337, + 0.012889889414821337, + 0.0, + 0.0, + 0.001013730133750608, + 0.02242404684158307, + 0.12275092984948832, + 0.11590569508927202, + 0.0018121111605848526, + 0.40531913042068457, + 0.425, + 0.425, + 0.017711577756064266, + 0.017711577756064266, + 0.0003588291550321234, + 0.0003588291550321234, + 0.05420222500000001, + 0.05420222500000001, + 0.0007927760747926571 + ], + "time": 10.233333333333333, + "rotation": [] + }, + { + "weights": [ + 0.02651899025908537, + 0.02651899025908537, + 0.02888475, + 0.014926525, + 0.014926525, + 0.010375024697610303, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03413017684097221, + 0.07126538319247105, + 0.03413017684097221, + 0.0, + 0.33008520518030415, + 0.33008520518030415, + 0.00019717788498382983, + 0.00019717788498382983, + 0.003932809723275046, + 0.034795689569520075, + 0.006980526766606733, + 0.006980526766606733, + 0.0, + 0.0, + 0.0006611599453857956, + 0.034795689569520075, + 0.11333034975188112, + 0.08929537577288485, + 0.015643549816949015, + 0.3046554424933023, + 0.425, + 0.425, + 0.018805702051946083, + 0.018805702051946083, + 0.0015002800816936144, + 0.0015002800816936144, + 0.05420222500000001, + 0.05420222500000001, + 0.0003899418349776946 + ], + "time": 10.266666666666667, + "rotation": [] + }, + { + "weights": [ + 0.023350606592638136, + 0.023350606592638136, + 0.02888475, + 0.014926525, + 0.014926525, + 0.02007804321391241, + 0.0008904725712324886, + 0.0008904725712324886, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03361813765853064, + 0.026242591994149325, + 0.03361813765853064, + 0.0, + 0.29934730827808365, + 0.29934730827808365, + 0.001013058037164487, + 0.001013058037164487, + 0.0050746354673589945, + 0.04245334427271569, + 0.005399170677576741, + 0.005399170677576741, + 0.00041976171944822517, + 0.00041976171944822517, + 0.002022831288299389, + 0.04245334427271569, + 0.10442130246332706, + 0.0684696467859404, + 0.04809652364679742, + 0.20018664630396013, + 0.425, + 0.425, + 0.0189373609636511, + 0.0189373609636511, + 0.0032424859436494943, + 0.0032424859436494943, + 0.05420222500000001, + 0.05420222500000001, + 0.00015758731003318486 + ], + "time": 10.3, + "rotation": [] + }, + { + "weights": [ + 0.020388034185660722, + 0.020388034185660722, + 0.02888475, + 0.014926525, + 0.014926525, + 0.026939712890556865, + 0.002190722072763101, + 0.002190722072763101, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03316921585674217, + 0.0037888776404516964, + 0.03316921585674217, + 0.0, + 0.26019305310079016, + 0.26019305310079016, + 0.002266758802330253, + 0.002266758802330253, + 0.005592483282089231, + 0.044110880526048765, + 0.005128107326371326, + 0.005128107326371326, + 0.0034114770591258986, + 0.0034114770591258986, + 0.004238026349672247, + 0.044110880526048765, + 0.09420050148453026, + 0.05107458452028885, + 0.08712224172694338, + 0.1144985520413943, + 0.425, + 0.425, + 0.017877005274806693, + 0.017877005274806693, + 0.0038183793292513894, + 0.0038183793292513894, + 0.05420222500000001, + 0.05420222500000001, + 0.000624714259590421 + ], + "time": 10.333333333333334, + "rotation": [] + }, + { + "weights": [ + 0.018040488766772396, + 0.018040488766772396, + 0.02888475, + 0.014926525, + 0.014926525, + 0.027623361987727014, + 0.0028721556865743216, + 0.0028721556865743216, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03247433618012768, + 0.0, + 0.03247433618012768, + 0.0003898895744766505, + 0.2200273371168544, + 0.2200273371168544, + 0.004261773005127903, + 0.004261773005127903, + 0.005389782147748126, + 0.041942259882177604, + 0.006744493118354248, + 0.006744493118354248, + 0.005071039178541726, + 0.005071039178541726, + 0.005857712110238413, + 0.041942259882177604, + 0.07738133817911144, + 0.03329112391386711, + 0.1109313904174736, + 0.06078047534184791, + 0.425, + 0.425, + 0.015959199454103186, + 0.015959199454103186, + 0.0036881753110459847, + 0.0036881753110459847, + 0.05420222500000001, + 0.05420222500000001, + 0.0010153130229030333 + ], + "time": 10.366666666666667, + "rotation": [] + }, + { + "weights": [ + 0.015612490115953333, + 0.015612490115953333, + 0.02888475, + 0.014926525, + 0.014926525, + 0.024592668776001234, + 0.002295556418331605, + 0.002295556418331605, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.031856296310291285, + 0.0, + 0.031856296310291285, + 0.0013107860710338815, + 0.18566506611449365, + 0.18566506611449365, + 0.007420284138726333, + 0.007420284138726333, + 0.005373892188072202, + 0.03840854886387074, + 0.010522528578128127, + 0.010522528578128127, + 0.004623680082815032, + 0.004623680082815032, + 0.0053491037605064235, + 0.03840854886387074, + 0.05696485787630078, + 0.01677574323756353, + 0.11656509786844246, + 0.03615729271301198, + 0.425, + 0.425, + 0.01408419802784919, + 0.01408419802784919, + 0.004690773279539174, + 0.004690773279539174, + 0.05420222500000001, + 0.05420222500000001, + 0.0009640929422208237 + ], + "time": 10.4, + "rotation": [] + }, + { + "weights": [ + 0.013761853426694861, + 0.013761853426694861, + 0.02888475, + 0.014926525, + 0.014926525, + 0.02027972808906009, + 0.0014248364671532586, + 0.0014248364671532586, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.031240322060706947, + 0.0, + 0.031240322060706947, + 0.002159929784413958, + 0.17016709957803988, + 0.17016709957803988, + 0.012529665911836279, + 0.012529665911836279, + 0.005896160240684234, + 0.034698324448295986, + 0.015368735481585767, + 0.015368735481585767, + 0.0024999943694898044, + 0.0024999943694898044, + 0.002972304943416798, + 0.034698324448295986, + 0.04098807273166518, + 0.0057944959189210575, + 0.11945658811501089, + 0.026960599071213162, + 0.425, + 0.425, + 0.013315832819257457, + 0.013315832819257457, + 0.007563098551971569, + 0.007563098551971569, + 0.05420222500000001, + 0.05420222500000001, + 0.0003700918384960717 + ], + "time": 10.433333333333334, + "rotation": [] + }, + { + "weights": [ + 0.013238420483789266, + 0.013238420483789266, + 0.02888475, + 0.014926525, + 0.014926525, + 0.01668823595557893, + 0.0009757886175066227, + 0.0009757886175066227, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.030783772993124545, + 6.552997657230942e-05, + 0.030783772993124545, + 0.002197524798767906, + 0.11717078830514628, + 0.11717078830514628, + 0.011403151827199112, + 0.011403151827199112, + 0.004467905866248265, + 0.022388501593044813, + 0.012592127365725375, + 0.012592127365725375, + 0.0008416140505245746, + 0.0008416140505245746, + 0.0008582921432597287, + 0.022388501593044813, + 0.023783931966338823, + 0.0008558983994381749, + 0.08529240301677155, + 0.016971967230950073, + 0.425, + 0.425, + 0.00926012607131685, + 0.00926012607131685, + 0.006748440292264731, + 0.006748440292264731, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 10.466666666666667, + "rotation": [] + }, + { + "weights": [ + 0.01489282101392745, + 0.01489282101392745, + 0.02888475, + 0.014926525, + 0.014926525, + 0.013751659223011553, + 0.0010664312235478838, + 0.0010664312235478838, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03004877864551816, + 0.00043708099637712746, + 0.03004877864551816, + 0.0018346696892487142, + 0.05733023217746185, + 0.05733023217746185, + 0.006719386809638564, + 0.006719386809638564, + 0.0020087043302399756, + 0.009352783752339219, + 0.006020188597696164, + 0.006020188597696164, + 0.00011724259172167083, + 0.00011724259172167083, + 0.00017360207092549085, + 0.009352783752339219, + 0.009879537437643315, + 0.0, + 0.041686555998665914, + 0.007121379535113057, + 0.425, + 0.425, + 0.004447923813547404, + 0.004447923813547404, + 0.0037069559363382184, + 0.0037069559363382184, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 10.5, + "rotation": [] + }, + { + "weights": [ + 0.017626822420528945, + 0.017626822420528945, + 0.02888475, + 0.014926525, + 0.014926525, + 0.012102988894496639, + 0.0016737454770398982, + 0.0016737454770398982, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.029603324982560696, + 5.4096886089869845e-05, + 0.029603324982560696, + 0.001497955813205667, + 0.018221319743565126, + 0.018221319743565126, + 0.0025469284823962596, + 0.0025469284823962596, + 0.0006907059252262107, + 0.00175110782895769, + 0.0008489238364355882, + 0.0008489238364355882, + 1.2824130909783442e-05, + 1.2824130909783442e-05, + 9.939404869718195e-05, + 0.00175110782895769, + 0.002456169873476024, + 0.0, + 0.011924360777650545, + 0.0015524490709815676, + 0.425, + 0.425, + 0.0012555258486952083, + 0.0012555258486952083, + 0.0012066646558897818, + 0.0012066646558897818, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 10.533333333333333, + "rotation": [] + }, + { + "weights": [ + 0.020621126065296775, + 0.020621126065296775, + 0.02888475, + 0.014926525, + 0.014926525, + 0.011249690715755729, + 0.002190299658104776, + 0.002190299658104776, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.029517117986545556, + 0.0, + 0.029517117986545556, + 0.0017392578202166716, + 0.02826244618211472, + 0.02826244618211472, + 0.0036328933451856863, + 0.0036328933451856863, + 0.0011188004910945885, + 0.0033043440644230145, + 0.0017617192757981152, + 0.0017617192757981152, + 3.1180733016559035e-05, + 3.1180733016559035e-05, + 0.0002972116454371382, + 0.0033043440644230145, + 0.004172466461147578, + 0.0, + 0.018350662631647918, + 0.0031748386046716124, + 0.425, + 0.425, + 0.001964339950254984, + 0.001964339950254984, + 0.0016914479540927059, + 0.0016914479540927059, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 10.566666666666666, + "rotation": [] + }, + { + "weights": [ + 0.022566719858774103, + 0.022566719858774103, + 0.02888475, + 0.014926525, + 0.014926525, + 0.01114289760589599, + 0.0024867434520274385, + 0.0024867434520274385, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02954822825835704, + 0.0, + 0.02954822825835704, + 0.0024026591862950993, + 0.028147510204996364, + 0.028147510204996364, + 0.0036613612600735227, + 0.0036613612600735227, + 0.0012103764925684242, + 0.0031891202500888257, + 0.0019358905191932396, + 0.0019358905191932396, + 3.256654100758687e-05, + 3.256654100758687e-05, + 0.0004379682868186914, + 0.0031891202500888257, + 0.004030601957014626, + 0.0, + 0.01788349300622939, + 0.0035144078412226248, + 0.425, + 0.425, + 0.0019034655519894182, + 0.0019034655519894182, + 0.0016571964376739083, + 0.0016571964376739083, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 10.6, + "rotation": [] + }, + { + "weights": [ + 0.0232524540009243, + 0.0232524540009243, + 0.02888475, + 0.014926525, + 0.014926525, + 0.011310876905918114, + 0.0027956500050744827, + 0.0027956500050744827, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02950141610081127, + 1.2085012027195548e-05, + 0.02950141610081127, + 0.003126147063449023, + 0.0281993434684617, + 0.0281993434684617, + 0.00366093844601086, + 0.00366093844601086, + 0.0012434005098683487, + 0.003196409291454722, + 0.002152115681341715, + 0.002152115681341715, + 2.9915486063275994e-05, + 2.9915486063275994e-05, + 0.0005479383122708113, + 0.003196409291454722, + 0.00401404621345656, + 0.0, + 0.017986316893781926, + 0.004009675117475644, + 0.425, + 0.425, + 0.0018673159394945404, + 0.0018673159394945404, + 0.001737302845077854, + 0.001737302845077854, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 10.633333333333333, + "rotation": [] + }, + { + "weights": [ + 0.022156422957777967, + 0.022156422957777967, + 0.02888475, + 0.014926525, + 0.014926525, + 0.013426574958222245, + 0.0031500475414629474, + 0.0031500475414629474, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.029428988048896786, + 0.0, + 0.029428988048896786, + 0.003996216785162685, + 0.028838344216346727, + 0.028838344216346727, + 0.003533636761563162, + 0.003533636761563162, + 0.0012441653438976827, + 0.003466487239514076, + 0.002158764983926499, + 0.002158764983926499, + 0.00011189991874354215, + 0.00011189991874354215, + 0.0007115243122513801, + 0.003466487239514076, + 0.004261760796819412, + 0.0, + 0.019251765395913792, + 0.0052941349468060865, + 0.425, + 0.425, + 0.0018975709847041528, + 0.0018975709847041528, + 0.002041696570813654, + 0.002041696570813654, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 10.666666666666666, + "rotation": [] + }, + { + "weights": [ + 0.019014240215931608, + 0.019014240215931608, + 0.02888475, + 0.014926525, + 0.014926525, + 0.017893756074564785, + 0.00335080573734428, + 0.00335080573734428, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.029912892402106688, + 0.0, + 0.029912892402106688, + 0.004637401843709603, + 0.030284389044557283, + 0.030284389044557283, + 0.0031903314313718235, + 0.0031903314313718235, + 0.00138979999082429, + 0.004258861116000582, + 0.0021322180862937638, + 0.0021322180862937638, + 0.00035672609295163817, + 0.00035672609295163817, + 0.0009250304781432657, + 0.004258861116000582, + 0.004947981068066185, + 0.00017796668623174913, + 0.021592010174478794, + 0.008437333883983742, + 0.425, + 0.425, + 0.00202504361953054, + 0.00202504361953054, + 0.002433965349836007, + 0.002433965349836007, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 10.7, + "rotation": [] + }, + { + "weights": [ + 0.015199146845511019, + 0.015199146845511019, + 0.02888475, + 0.014926525, + 0.014926525, + 0.025667178843702575, + 0.003912229230627415, + 0.003912229230627415, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02981075691627025, + 0.0, + 0.02981075691627025, + 0.004555293392123918, + 0.032510961975370116, + 0.032510961975370116, + 0.0026556194424629193, + 0.0026556194424629193, + 0.0015187443367072507, + 0.005534492943968089, + 0.0032438864452498267, + 0.0032438864452498267, + 0.0006382635129349569, + 0.0006382635129349569, + 0.001194889063813856, + 0.005534492943968089, + 0.005528365331036701, + 0.0010942935730729776, + 0.022904716389519818, + 0.014076228322727332, + 0.425, + 0.425, + 0.002285737505980899, + 0.002285737505980899, + 0.003024614868419509, + 0.003024614868419509, + 0.05420222500000001, + 0.05420222500000001, + 0.0006815853395632331 + ], + "time": 10.733333333333333, + "rotation": [] + }, + { + "weights": [ + 0.011566087071384696, + 0.011566087071384696, + 0.02888475, + 0.014926525, + 0.014926525, + 0.03844943057213508, + 0.005196669611281579, + 0.005196669611281579, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.027162717594455987, + 3.084743874413585e-05, + 0.027162717594455987, + 0.0034705538768321255, + 0.035571704506874066, + 0.035571704506874066, + 0.002001880784119877, + 0.002001880784119877, + 0.0014877499001366744, + 0.006843033879995342, + 0.007746323485459594, + 0.007746323485459594, + 0.0006158834376505441, + 0.0006158834376505441, + 0.0013923146096723412, + 0.006843033879995342, + 0.00527869716286659, + 0.0026038592308759673, + 0.020150859121765397, + 0.020804167922054008, + 0.425, + 0.425, + 0.0026609260737895948, + 0.0026609260737895948, + 0.00401970680270876, + 0.00401970680270876, + 0.05420222500000001, + 0.05420222500000001, + 0.0015555846371820988 + ], + "time": 10.766666666666667, + "rotation": [] + }, + { + "weights": [ + 0.007967094252152097, + 0.007967094252152097, + 0.02888475, + 0.014926525, + 0.014926525, + 0.05223565559302055, + 0.0058571930242968424, + 0.0058571930242968424, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.023064429119053226, + 0.001353237935474939, + 0.023064429119053226, + 0.0024120395537465793, + 0.03911191591194696, + 0.03911191591194696, + 0.0013536129907837928, + 0.0013536129907837928, + 0.0011144447752407614, + 0.008033700734376904, + 0.017871515793459747, + 0.017871515793459747, + 0.0005203171819448468, + 0.0005203171819448468, + 0.001525002265615122, + 0.008033700734376904, + 0.0038264883203165847, + 0.004772913338882579, + 0.013093260462794978, + 0.027362818675381782, + 0.425, + 0.425, + 0.003100272357463835, + 0.003100272357463835, + 0.0055370386370590715, + 0.0055370386370590715, + 0.05420222500000001, + 0.05420222500000001, + 0.0020324116838829846 + ], + "time": 10.8, + "rotation": [] + }, + { + "weights": [ + 0.004997000896504943, + 0.004997000896504943, + 0.02888475, + 0.014926525, + 0.014926525, + 0.05840830749699045, + 0.004684489213728476, + 0.004684489213728476, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.0202140490315158, + 0.004638496186052047, + 0.0202140490315158, + 0.002580670273995823, + 0.04273917572838917, + 0.04273917572838917, + 0.0008122616388968055, + 0.0008122616388968055, + 0.0009839879189218787, + 0.0090835305409772, + 0.033072101665394635, + 0.033072101665394635, + 0.00041683529104505243, + 0.00041683529104505243, + 0.0015489169795598295, + 0.0090835305409772, + 0.001962677580969673, + 0.0073686087663684535, + 0.005667860933712546, + 0.0333299205132893, + 0.425, + 0.425, + 0.0035277016503470265, + 0.0035277016503470265, + 0.0068709395400115385, + 0.0068709395400115385, + 0.05420222500000001, + 0.05420222500000001, + 0.0024962507986596638 + ], + "time": 10.833333333333334, + "rotation": [] + }, + { + "weights": [ + 0.004908765879060538, + 0.004908765879060538, + 0.02888475, + 0.014926525, + 0.014926525, + 0.05264588626367703, + 0.0029674483396645085, + 0.0029674483396645085, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.020272623287603854, + 0.009418194634573794, + 0.020272623287603854, + 0.00500258267857134, + 0.0451223386611257, + 0.0451223386611257, + 0.0004548126193029536, + 0.0004548126193029536, + 0.0013401236278670165, + 0.009819663347942483, + 0.04920841649174688, + 0.04920841649174688, + 0.00040463579552514194, + 0.00040463579552514194, + 0.0012988773613635976, + 0.009819663347942483, + 0.0008635211842400677, + 0.009421404908810337, + 0.0015902163939816591, + 0.040399187718118915, + 0.425, + 0.425, + 0.003757821794067108, + 0.003757821794067108, + 0.007598307505249973, + 0.007598307505249973, + 0.05420222500000001, + 0.05420222500000001, + 0.003021309019199438 + ], + "time": 10.866666666666667, + "rotation": [] + }, + { + "weights": [ + 0.00670042764395475, + 0.00670042764395475, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0417055937860693, + 0.0016670829017779642, + 0.0016670829017779642, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02198201108493396, + 0.014288721178259162, + 0.02198201108493396, + 0.007849030988290902, + 0.046195820399693055, + 0.046195820399693055, + 0.0002638632242700881, + 0.0002638632242700881, + 0.0023165871415819425, + 0.010527641624212259, + 0.06183722521577559, + 0.06183722521577559, + 1.6193155731473614e-05, + 1.6193155731473614e-05, + 0.0008781249076127999, + 0.010527641624212259, + 0.001153728280748639, + 0.011111686910901744, + 0.00037711445774350755, + 0.048596447791372004, + 0.425, + 0.425, + 0.003740898809262683, + 0.003740898809262683, + 0.006656956475760252, + 0.006656956475760252, + 0.05420222500000001, + 0.05420222500000001, + 0.002557022497057913 + ], + "time": 10.9, + "rotation": [] + }, + { + "weights": [ + 0.009161477722227567, + 0.009161477722227567, + 0.02888475, + 0.014926525, + 0.014926525, + 0.03678778463176316, + 0.001750578910910656, + 0.001750578910910656, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.024421820781948905, + 0.017712123947484133, + 0.024421820781948905, + 0.008036745851859439, + 0.04662091723510193, + 0.04662091723510193, + 0.00018774320265012136, + 0.00018774320265012136, + 0.0026881245630128027, + 0.011033932864665977, + 0.0686991725649152, + 0.0686991725649152, + 0.0, + 0.0, + 0.0008575554285198446, + 0.011033932864665977, + 0.0017283094993659422, + 0.01356191669191632, + 0.00032718958599227063, + 0.055514381272452194, + 0.425, + 0.425, + 0.003610488380704603, + 0.003610488380704603, + 0.005828765141112458, + 0.005828765141112458, + 0.05420222500000001, + 0.05420222500000001, + 0.0023775458335876447 + ], + "time": 10.933333333333334, + "rotation": [] + }, + { + "weights": [ + 0.01253347769379615, + 0.01253347769379615, + 0.02888475, + 0.014926525, + 0.014926525, + 0.034876447596720275, + 0.002897750273612992, + 0.002897750273612992, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02788878095771006, + 0.020124944950853048, + 0.02788878095771006, + 0.006374698085710389, + 0.046207963398524635, + 0.046207963398524635, + 0.0002398451159575157, + 0.0002398451159575157, + 0.00275960890310151, + 0.011405685991048803, + 0.07047488336052207, + 0.07047488336052207, + 2.807932240622604e-06, + 2.807932240622604e-06, + 0.001082706144079566, + 0.011405685991048803, + 0.002866880084787096, + 0.01647937259503772, + 0.0017788071504661052, + 0.061826476965631726, + 0.425, + 0.425, + 0.003329100706747595, + 0.003329100706747595, + 0.004637520770941453, + 0.004637520770941453, + 0.05420222500000001, + 0.05420222500000001, + 0.0020980032160878167 + ], + "time": 10.966666666666667, + "rotation": [] + }, + { + "weights": [ + 0.012802399782729984, + 0.012802399782729984, + 0.02888475, + 0.02067250947378453, + 0.02067250947378453, + 0.040306335475270405, + 0.002561616916114424, + 0.002561616916114424, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.04571941881735157, + 0.04571941881735157, + 0.05126333, + 0.031095411491675502, + 0.006824894190677969, + 0.031095411491675502, + 0.005329115929946818, + 0.03399558355783926, + 0.03399558355783926, + 7.172918059749107e-05, + 7.172918059749107e-05, + 0.0008573511256652615, + 0.011169789126657292, + 0.04100297854635987, + 0.04100297854635987, + 0.0, + 0.0, + 0.0004612726165425207, + 0.011169789126657292, + 0.0023356593565065017, + 0.012654022931322745, + 0.00010885945365948004, + 0.048213271941295245, + 0.425, + 0.425, + 0.0024855275756436924, + 0.0024855275756436924, + 0.0009914552374103015, + 0.0009914552374103015, + 0.05680878609224359, + 0.05680878609224359, + 0.0019207313151231814 + ], + "time": 11.0, + "rotation": [] + }, + { + "weights": [ + 0.012849056773952063, + 0.012849056773952063, + 0.02888475, + 0.019306098442205245, + 0.019306098442205245, + 0.043194742749134665, + 0.001827973568634616, + 0.001827973568634616, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.04668391127660771, + 0.04668391127660771, + 0.05126333, + 0.029475983798623876, + 0.01902592054889314, + 0.029475983798623876, + 0.004636831860989318, + 0.09602473449707025, + 0.09602473449707025, + 0.00014479190560545585, + 0.00014479190560545585, + 0.0015750905601751228, + 0.03126238250590504, + 0.10069963490395312, + 0.10069963490395312, + 0.0, + 0.0, + 0.000990465644658321, + 0.03126238250590504, + 0.006789306830792196, + 0.03560351588044845, + 0.0, + 0.13935880906241271, + 0.425, + 0.425, + 0.007812452212174728, + 0.007812452212174728, + 0.0008633402509703504, + 0.0008633402509703504, + 0.05420222500000001, + 0.05420222500000001, + 0.0015824659949257242 + ], + "time": 11.033333333333333, + "rotation": [] + }, + { + "weights": [ + 0.013712256508214123, + 0.013712256508214123, + 0.02888475, + 0.018085084485453533, + 0.018085084485453533, + 0.03987316616943902, + 0.0009961314033716906, + 0.0009961314033716906, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.04792728444553304, + 0.04792728444553304, + 0.05126333, + 0.02761442064950849, + 0.04031484800492011, + 0.02761442064950849, + 0.0040756083509352475, + 0.1681609384758131, + 0.1681609384758131, + 0.00011449111808756623, + 0.00011449111808756623, + 0.0016389801736388873, + 0.05203305259559833, + 0.17033228804809697, + 0.17033228804809697, + 0.0, + 0.0, + 0.0010682568125692858, + 0.05203305259559833, + 0.01190968670163835, + 0.06145994161282264, + 0.0, + 0.2526929221068108, + 0.425, + 0.425, + 0.013671229957086691, + 0.013671229957086691, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.0009592452485646508 + ], + "time": 11.066666666666666, + "rotation": [] + }, + { + "weights": [ + 0.014649241932091248, + 0.014649241932091248, + 0.02888475, + 0.0167319028523268, + 0.0167319028523268, + 0.03305321917647405, + 0.0001866473594591725, + 0.0001866473594591725, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.04780307910089286, + 0.04780307910089286, + 0.05126333, + 0.02598835135408134, + 0.068918044418948, + 0.02598835135408134, + 0.0038022771987709187, + 0.20930548509245814, + 0.20930548509245814, + 0.00013617235019847384, + 0.00013617235019847384, + 0.0018710417094684763, + 0.061257816341661234, + 0.24926581702629708, + 0.24926581702629708, + 0.0, + 0.0, + 0.0, + 0.061257816341661234, + 0.014985202034314464, + 0.07823505228757853, + 0.0, + 0.34880990051655525, + 0.425, + 0.425, + 0.01714738900224367, + 0.01714738900224367, + 0.004225418544418744, + 0.004225418544418744, + 0.05420222500000001, + 0.05420222500000001, + 0.00034676168468736394 + ], + "time": 11.1, + "rotation": [] + }, + { + "weights": [ + 0.015309601336540201, + 0.015309601336540201, + 0.02888475, + 0.014983943854219004, + 0.014983943854219004, + 0.02473658594093759, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.045943265199964105, + 0.045943265199964105, + 0.05126333, + 0.0278560312590561, + 0.10154963658251726, + 0.0278560312590561, + 0.0018735075043514334, + 0.2321581874689276, + 0.2321581874689276, + 0.0004729888552925135, + 0.0004729888552925135, + 0.002327529305422382, + 0.06749962762225238, + 0.4013763055150198, + 0.4013763055150198, + 0.0, + 0.0, + 0.0, + 0.06749962762225238, + 0.01471412581848043, + 0.09300469675485776, + 0.0, + 0.4686197714904536, + 0.425, + 0.425, + 0.020089193488388633, + 0.020089193488388633, + 0.0327497210135113, + 0.0327497210135113, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 11.133333333333333, + "rotation": [] + }, + { + "weights": [ + 0.015271477912153508, + 0.015271477912153508, + 0.02888475, + 0.014926525, + 0.014926525, + 0.01925037898275316, + 8.386230048704499e-05, + 8.386230048704499e-05, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03921600267649407, + 0.11309894989164504, + 0.03921600267649407, + 0.0, + 0.22020176256822066, + 0.22020176256822066, + 0.0008140824432628872, + 0.0008140824432628872, + 0.00893156819842298, + 0.06721990514057019, + 0.5743261771000159, + 0.5743261771000159, + 0.0, + 0.0, + 0.001543770966625639, + 0.06721990514057019, + 0.01005489671364122, + 0.09366108153328598, + 0.0, + 0.5562403563630821, + 0.425, + 0.425, + 0.01910557746319381, + 0.01910557746319381, + 0.08425810470118811, + 0.08425810470118811, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 11.166666666666666, + "rotation": [] + }, + { + "weights": [ + 0.015686569546482385, + 0.015686569546482385, + 0.02888475, + 0.014926525, + 0.014926525, + 0.01681110118572808, + 0.0005122559766133066, + 0.0005122559766133066, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.09230896722181409, + 0.07395949275186722, + 0.09180890137835421, + 0.07395949275186722, + 0.0, + 0.18009383938434165, + 0.18009383938434165, + 0.0009045521054245069, + 0.0009045521054245069, + 0.04527962924248098, + 0.06497163633661607, + 0.7018625789726263, + 0.7018625789726263, + 0.001948999999372321, + 0.001948999999372321, + 0.0019009047936382026, + 0.06497163633661607, + 0.005347901877943347, + 0.07733171935701852, + 0.0, + 0.584480233506037, + 0.425, + 0.425, + 0.014123082839662923, + 0.014123082839662923, + 0.14055690076199107, + 0.14055690076199107, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 11.2, + "rotation": [] + }, + { + "weights": [ + 0.01621741814804928, + 0.01621741814804928, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0145821098770414, + 0.0009440806893897905, + 0.0009440806893897905, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.04810611366161276, + 0.04810611366161276, + 0.13830985107592164, + 0.11542923503688399, + 0.05298344101224624, + 0.11542923503688399, + 0.0, + 0.12686998657882206, + 0.12686998657882206, + 0.00104144440564726, + 0.00104144440564726, + 0.12447077376501893, + 0.0649981679660933, + 0.7545976945332113, + 0.7545976945332113, + 0.017945634440651947, + 0.017945634440651947, + 0.0, + 0.0649981679660933, + 0.0033691792615822354, + 0.05381535626947877, + 0.0, + 0.5597570879118781, + 0.425, + 0.425, + 0.007848621814378665, + 0.007848621814378665, + 0.18150878165449405, + 0.18150878165449405, + 0.05420222500000001, + 0.05420222500000001, + 0.00046646648219653516 + ], + "time": 11.233333333333333, + "rotation": [] + }, + { + "weights": [ + 0.016076384192066525, + 0.016076384192066525, + 0.03142423773450509, + 0.015156840214258602, + 0.015156840214258602, + 0.00950254808579172, + 0.0007894191757908885, + 0.0007894191757908885, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05660911159855976, + 0.05660911159855976, + 0.17368471665041776, + 0.15186324151498923, + 0.023723186382225564, + 0.15186324151498923, + 0.0, + 0.08514758901936662, + 0.08514758901936662, + 0.002242937692041906, + 0.002242937692041906, + 0.22322354955332607, + 0.0690150749470506, + 0.7639266363212036, + 0.7639266363212036, + 0.047163106980068314, + 0.047163106980068314, + 0.004505526041612024, + 0.0690150749470506, + 0.004399040554250986, + 0.034642980833138715, + 0.0, + 0.53837239912578, + 0.425, + 0.425, + 0.004458575717040468, + 0.004458575717040468, + 0.20036947237593777, + 0.20036947237593777, + 0.05420222500000001, + 0.05420222500000001, + 0.001139082892664841 + ], + "time": 11.266666666666667, + "rotation": [] + }, + { + "weights": [ + 0.01415465141513517, + 0.01415465141513517, + 0.035366512196404576, + 0.015584996502865382, + 0.015584996502865382, + 0.0028216518461704233, + 0.0002429508471063204, + 0.0002429508471063204, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06492772097034111, + 0.06492772097034111, + 0.20007001970495486, + 0.1742171204515865, + 0.009378825426101675, + 0.1742171204515865, + 0.00276258383611483, + 0.057711501712245566, + 0.057711501712245566, + 0.005147412473868043, + 0.005147412473868043, + 0.3025072067975997, + 0.07182975283690857, + 0.7434655615261618, + 0.7434655615261618, + 0.07320976105651682, + 0.07320976105651682, + 0.017297600741897297, + 0.07182975283690857, + 0.006918225969587049, + 0.020679062179156698, + 0.0, + 0.5224903949669426, + 0.425, + 0.425, + 0.0033922266747270285, + 0.0033922266747270285, + 0.19024577960371963, + 0.19024577960371963, + 0.05420222500000001, + 0.05420222500000001, + 0.0004682535039527075 + ], + "time": 11.3, + "rotation": [] + }, + { + "weights": [ + 0.011976799608341278, + 0.011976799608341278, + 0.039794056064316186, + 0.015441104876694678, + 0.015441104876694678, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06928824968636033, + 0.06928824968636033, + 0.2213555766003471, + 0.18166852593421925, + 0.004702853347573957, + 0.18166852593421925, + 0.007474238418840933, + 0.04036477264016864, + 0.04036477264016864, + 0.009123774365122824, + 0.009123774365122824, + 0.3493066417319432, + 0.0721970978592123, + 0.7143966180937626, + 0.7143966180937626, + 0.08208543855164728, + 0.08208543855164728, + 0.035788036157776176, + 0.0721970978592123, + 0.012711898024593073, + 0.01133374476007052, + 0.0, + 0.5056518128940035, + 0.425, + 0.425, + 0.003654357625969816, + 0.003654357625969816, + 0.15698225444981023, + 0.15698225444981023, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 11.333333333333334, + "rotation": [] + }, + { + "weights": [ + 0.010644310686205107, + 0.010644310686205107, + 0.04385675628270419, + 0.015440711432820728, + 0.015440711432820728, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06910045860069135, + 0.06910045860069135, + 0.23218792719500392, + 0.17948227311883644, + 0.0030232567446572415, + 0.17948227311883644, + 0.009594271924080588, + 0.0264096161882792, + 0.0264096161882792, + 0.012935067138501571, + 0.012935067138501571, + 0.36805631092616464, + 0.07159432885902264, + 0.6886869507176532, + 0.6886869507176532, + 0.07795556879469323, + 0.07795556879469323, + 0.05842475486653188, + 0.07159432885902264, + 0.017707179806062144, + 0.007632682951433312, + 0.0014694313917841223, + 0.4766972243785855, + 0.425, + 0.425, + 0.003987763231354098, + 0.003987763231354098, + 0.11699326155441142, + 0.11699326155441142, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 11.366666666666667, + "rotation": [] + }, + { + "weights": [ + 0.01020102104438202, + 0.01020102104438202, + 0.04735462857144217, + 0.01582106548815727, + 0.01582106548815727, + 0.0, + 0.00011165068883981015, + 0.00011165068883981015, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06614636938486776, + 0.06614636938486776, + 0.2292236724070139, + 0.17211606885705666, + 0.0022678762674331644, + 0.17211606885705666, + 0.008753814189029586, + 0.016934750415384756, + 0.016934750415384756, + 0.01512000722544533, + 0.01512000722544533, + 0.36475178684507076, + 0.07046994407262117, + 0.6628625188555032, + 0.6628625188555032, + 0.07209953963756557, + 0.07209953963756557, + 0.07808784129364146, + 0.07046994407262117, + 0.019200101175478518, + 0.006628445482679771, + 0.004245310808931076, + 0.4370046181338172, + 0.425, + 0.425, + 0.004175583108195234, + 0.004175583108195234, + 0.08889177175504814, + 0.08889177175504814, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 11.4, + "rotation": [] + }, + { + "weights": [ + 0.010453472180025913, + 0.010453472180025913, + 0.049287504489932715, + 0.01579154389300278, + 0.01579154389300278, + 0.0, + 0.0003460279133703025, + 0.0003460279133703025, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06393347829580304, + 0.06393347829580304, + 0.21306544457163118, + 0.15975778443472716, + 0.004159674090998509, + 0.15975778443472716, + 0.00700151334915842, + 0.012129772028752726, + 0.012129772028752726, + 0.015544488131999962, + 0.015544488131999962, + 0.35028471350669843, + 0.06929820956928386, + 0.6358671001025604, + 0.6358671001025604, + 0.06924597950918329, + 0.06924597950918329, + 0.07457142945911199, + 0.06929820956928386, + 0.01448420562914439, + 0.006789444014430042, + 0.005992553595985682, + 0.3888290051903041, + 0.425, + 0.425, + 0.004106035450739518, + 0.004106035450739518, + 0.07620091241385252, + 0.07620091241385252, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 11.433333333333334, + "rotation": [] + }, + { + "weights": [ + 0.011159627033131458, + 0.011159627033131458, + 0.05081502624920434, + 0.015273164692220686, + 0.015273164692220686, + 0.0, + 0.0006094438755618669, + 0.0006094438755618669, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06547598700438223, + 0.06547598700438223, + 0.18581700537885926, + 0.1382340771811348, + 0.009827660066740847, + 0.1382340771811348, + 0.005580745803724439, + 0.009969547923122124, + 0.009969547923122124, + 0.014655708330018172, + 0.014655708330018172, + 0.3285300978592462, + 0.06615282839962411, + 0.6195951487336837, + 0.6195951487336837, + 0.06331245593194447, + 0.06331245593194447, + 0.051308404574436764, + 0.06615282839962411, + 0.00663281849452427, + 0.00572646127215453, + 0.005503173811095099, + 0.3173128530383108, + 0.425, + 0.425, + 0.00421911297632115, + 0.00421911297632115, + 0.06886679351861984, + 0.06886679351861984, + 0.057248739987902295, + 0.057248739987902295, + 0.0 + ], + "time": 11.466666666666667, + "rotation": [] + }, + { + "weights": [ + 0.011430515481957362, + 0.011430515481957362, + 0.052921781156744244, + 0.015237451664590153, + 0.015237451664590153, + 0.0, + 0.0012737934810242472, + 0.0012737934810242472, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06777019170778134, + 0.06777019170778134, + 0.14816182915653492, + 0.11239176573497901, + 0.01909369081258773, + 0.11239176573497901, + 0.0030767773011965384, + 0.010542881036443356, + 0.010542881036443356, + 0.014031394038881564, + 0.014031394038881564, + 0.287674361680235, + 0.061093297015343356, + 0.6053915198360167, + 0.6053915198360167, + 0.04848861912531509, + 0.04848861912531509, + 0.024544532011662193, + 0.061093297015343356, + 0.0, + 0.008259296417236318, + 0.004340382878269465, + 0.21076949637915393, + 0.425, + 0.425, + 0.004679806722061972, + 0.004679806722061972, + 0.05027576062296116, + 0.05027576062296116, + 0.05822016414177519, + 0.05822016414177519, + 0.0 + ], + "time": 11.5, + "rotation": [] + }, + { + "weights": [ + 0.008443943145019664, + 0.008443943145019664, + 0.053325003917728125, + 0.01586613303903784, + 0.01586613303903784, + 0.0, + 0.003890321197520407, + 0.003890321197520407, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06861409257565222, + 0.06861409257565222, + 0.10151541653488357, + 0.08986742890306876, + 0.029487486141068577, + 0.08986742890306876, + 0.0035788880594606887, + 0.03167951274663206, + 0.03167951274663206, + 0.015234933303935178, + 0.015234933303935178, + 0.2098066290574413, + 0.05294635647109573, + 0.5581528627446717, + 0.5581528627446717, + 0.029334481433033924, + 0.029334481433033924, + 0.011225141771137703, + 0.05294635647109573, + 0.0, + 0.027017369972807997, + 0.005060649343899314, + 0.10123587186847408, + 0.425, + 0.425, + 0.005484006511313571, + 0.005484006511313571, + 0.02716185282915829, + 0.02716185282915829, + 0.0544650448052723, + 0.0544650448052723, + 0.0 + ], + "time": 11.533333333333333, + "rotation": [] + }, + { + "weights": [ + 0.003739007615617341, + 0.003739007615617341, + 0.04856297182185307, + 0.0168097963296066, + 0.0168097963296066, + 0.0, + 0.007289306214079257, + 0.007289306214079257, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06629261012588225, + 0.06629261012588225, + 0.05638850009334935, + 0.07553105024354795, + 0.0364106870974813, + 0.07553105024354795, + 0.004755065556881681, + 0.10115329663136167, + 0.10115329663136167, + 0.018294742511851435, + 0.018294742511851435, + 0.11717004116092403, + 0.04186522284788742, + 0.4295531376131941, + 0.4295531376131941, + 0.01606625523418187, + 0.01606625523418187, + 0.009285135647015906, + 0.04186522284788742, + 0.011184043437242493, + 0.07393089729760369, + 0.00877829907195908, + 0.02783496832208971, + 0.425, + 0.425, + 0.006605802641383235, + 0.006605802641383235, + 0.010697477949517104, + 0.010697477949517104, + 0.05420222500000001, + 0.05420222500000001, + 0.0009478160579289703 + ], + "time": 11.566666666666666, + "rotation": [] + }, + { + "weights": [ + 0.0007439082754509782, + 0.0007439082754509782, + 0.041021385469606916, + 0.01770061084257466, + 0.01770061084257466, + 0.0, + 0.010138933367228929, + 0.010138933367228929, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06548273233430724, + 0.06548273233430724, + 0.05126333, + 0.06742902238454135, + 0.04047090487820759, + 0.06742902238454135, + 0.004638085717202295, + 0.22345677244343914, + 0.22345677244343914, + 0.022082033178635996, + 0.022082033178635996, + 0.046802202825035326, + 0.028041041815387333, + 0.23911589298929473, + 0.23911589298929473, + 0.013983965851366511, + 0.013983965851366511, + 0.01213489374411957, + 0.028041041815387333, + 0.04324591681361196, + 0.14052304343453467, + 0.021140516123601356, + 0.0, + 0.425, + 0.425, + 0.008463813540126592, + 0.008463813540126592, + 0.005033730342984195, + 0.005033730342984195, + 0.05420222500000001, + 0.05420222500000001, + 0.0022700213161962364 + ], + "time": 11.6, + "rotation": [] + }, + { + "weights": [ + 0.0006569430764232359, + 0.0006569430764232359, + 0.03583734184503553, + 0.018480756240782735, + 0.018480756240782735, + 0.0, + 0.01121146028994449, + 0.01121146028994449, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06580240353941913, + 0.06580240353941913, + 0.05126333, + 0.06622745863028931, + 0.04505083867481774, + 0.06622745863028931, + 0.0016338634969932679, + 0.3730987025158744, + 0.3730987025158744, + 0.02167748057416506, + 0.02167748057416506, + 0.015696033622537322, + 0.016102863502289556, + 0.08122891017368855, + 0.08122891017368855, + 0.013167470613760602, + 0.013167470613760602, + 0.012040268177432667, + 0.016102863502289556, + 0.09180861434766219, + 0.20833985954523077, + 0.03794763631054332, + 0.0, + 0.425, + 0.425, + 0.011406034146036415, + 0.011406034146036415, + 0.002372071719063178, + 0.002372071719063178, + 0.05420222500000001, + 0.05420222500000001, + 0.002043717647237436 + ], + "time": 11.633333333333333, + "rotation": [] + }, + { + "weights": [ + 0.0001253488340548104, + 0.0001253488340548104, + 0.034809595240013924, + 0.01870976755716732, + 0.01870976755716732, + 0.0, + 0.010130786556484438, + 0.010130786556484438, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06753617205790106, + 0.06753617205790106, + 0.05126333, + 0.07071170210838312, + 0.06095772751740043, + 0.07071170210838312, + 0.0009196241885157556, + 0.5124458640813825, + 0.5124458640813825, + 0.01627800598740577, + 0.01627800598740577, + 0.0045525258140904495, + 0.00791427421250513, + 0.012672404412712338, + 0.012672404412712338, + 0.009246959324393948, + 0.009246959324393948, + 0.010189803370407643, + 0.00791427421250513, + 0.13773389139345707, + 0.25873263350554865, + 0.04407189371330396, + 0.0, + 0.425, + 0.425, + 0.01495926576001303, + 0.01495926576001303, + 0.0021468310350818277, + 0.0021468310350818277, + 0.05420222500000001, + 0.05420222500000001, + 0.000943152313785893 + ], + "time": 11.666666666666666, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.03454908451863696, + 0.017474572840032575, + 0.017474572840032575, + 0.0, + 0.008400816164378605, + 0.008400816164378605, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07077040406210078, + 0.07077040406210078, + 0.05126333, + 0.07486541409577639, + 0.097362088390759, + 0.07486541409577639, + 0.0026275133847125922, + 0.5978390480790816, + 0.5978390480790816, + 0.009092592972197697, + 0.009092592972197697, + 0.004507541550057271, + 0.003919461169945339, + 0.009864988390888467, + 0.009864988390888467, + 0.0031801357599241364, + 0.0031801357599241364, + 0.008740336581000254, + 0.003919461169945339, + 0.1543250837496348, + 0.2710290823663983, + 0.032531239943844915, + 0.00965932522501263, + 0.425, + 0.425, + 0.018525205254554738, + 0.018525205254554738, + 0.002375899255275725, + 0.002375899255275725, + 0.05420222500000001, + 0.05420222500000001, + 8.838748825447867e-05 + ], + "time": 11.7, + "rotation": [] + }, + { + "weights": [ + 0.0032202174088784593, + 0.0032202174088784593, + 0.031346446541803206, + 0.015469881360571043, + 0.015469881360571043, + 0.0, + 0.006182970598872215, + 0.006182970598872215, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07667901335018017, + 0.07667901335018017, + 0.05126333, + 0.07494703222598345, + 0.1527701578821454, + 0.07494703222598345, + 0.004408871392453354, + 0.5935909577778404, + 0.5935909577778404, + 0.004184816150393867, + 0.004184816150393867, + 0.008826986487422667, + 0.0025883185145045996, + 0.03643889171736578, + 0.03643889171736578, + 0.0007393442360418175, + 0.0007393442360418175, + 0.007475397549569602, + 0.0025883185145045996, + 0.1358842949782098, + 0.2333216526678629, + 0.01661818144576889, + 0.03649806816663058, + 0.425, + 0.425, + 0.02088186359831264, + 0.02088186359831264, + 0.002447442909968749, + 0.002447442909968749, + 0.05420222500000001, + 0.05420222500000001, + 0.0005694703332015444 + ], + "time": 11.733333333333333, + "rotation": [] + }, + { + "weights": [ + 0.011654037982225411, + 0.011654037982225411, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0, + 0.003632520159174287, + 0.003632520159174287, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.08156290724873538, + 0.08156290724873538, + 0.05126333, + 0.06948039872305731, + 0.20218551635742177, + 0.06948039872305731, + 0.005131309233339767, + 0.5286824460540496, + 0.5286824460540496, + 0.0014270220763449143, + 0.0014270220763449143, + 0.013098172949893128, + 0.0055685595875339805, + 0.08245315583688868, + 0.08245315583688868, + 0.0, + 0.0, + 0.006727674975991246, + 0.0055685595875339805, + 0.10773193878786899, + 0.1741110065153666, + 0.007674335581915713, + 0.11292108606014925, + 0.425, + 0.425, + 0.021398834117821272, + 0.021398834117821272, + 0.004131755445684703, + 0.004131755445684703, + 0.05420222500000001, + 0.05420222500000001, + 0.0008019712354455672 + ], + "time": 11.766666666666667, + "rotation": [] + }, + { + "weights": [ + 0.02039124071598052, + 0.02039124071598052, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0, + 0.0014932215280298662, + 0.0014932215280298662, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.08178263945238926, + 0.08178263945238926, + 0.05126333, + 0.060683014190622706, + 0.22116297006607044, + 0.060683014190622706, + 0.003826689174664869, + 0.4654185823031831, + 0.4654185823031831, + 0.00014575510768086733, + 0.00014575510768086733, + 0.011409885755607054, + 0.013775428012013428, + 0.11466133690306113, + 0.11466133690306113, + 0.00021250375679561062, + 0.00021250375679561062, + 0.004939732707238621, + 0.013775428012013428, + 0.09357603575502117, + 0.12923074875559118, + 0.004756760703665866, + 0.23027860511626502, + 0.425, + 0.425, + 0.020594440272876182, + 0.020594440272876182, + 0.00671239416780216, + 0.00671239416780216, + 0.05420222500000001, + 0.05420222500000001, + 0.0005587036056177955 + ], + "time": 11.8, + "rotation": [] + }, + { + "weights": [ + 0.025341257107044955, + 0.025341257107044955, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0, + 0.001403408623965722, + 0.001403408623965722, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07879839667252127, + 0.07879839667252127, + 0.05126333, + 0.05051359571516511, + 0.20895674739565157, + 0.05051359571516511, + 0.004067088730101072, + 0.43611815316336466, + 0.43611815316336466, + 0.0001358239725232123, + 0.0001358239725232123, + 0.010194538533687583, + 0.02750981826601282, + 0.11340970982398299, + 0.11340970982398299, + 0.0005086548094238552, + 0.0005086548094238552, + 0.003142852708697317, + 0.02750981826601282, + 0.09359291770628515, + 0.10988850508417394, + 0.005032214415924886, + 0.3508114542279923, + 0.42508666685649316, + 0.42508666685649316, + 0.0202714814032827, + 0.0202714814032827, + 0.008200131343411543, + 0.008200131343411543, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 11.833333333333334, + "rotation": [] + }, + { + "weights": [ + 0.029532573824482287, + 0.029532573824482287, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0, + 0.002673153106921484, + 0.002673153106921484, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07590277684586384, + 0.07590277684586384, + 0.05126333, + 0.039739594714982146, + 0.18326715060642776, + 0.039739594714982146, + 0.00586261783859559, + 0.4163673609495161, + 0.4163673609495161, + 5.2533293575314544e-05, + 5.2533293575314544e-05, + 0.01254432685673236, + 0.041167024456496726, + 0.10597230898482451, + 0.10597230898482451, + 0.0005804347672632762, + 0.0005804347672632762, + 0.0011323126099471521, + 0.041167024456496726, + 0.08791282794305252, + 0.10293934260095863, + 0.0065117515623569445, + 0.43279883648667994, + 0.4397782615252901, + 0.4397782615252901, + 0.020459762258189053, + 0.020459762258189053, + 0.007080925149577, + 0.007080925149577, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 11.866666666666667, + "rotation": [] + }, + { + "weights": [ + 0.03421183968228951, + 0.03421183968228951, + 0.02888475, + 0.014926525, + 0.014926525, + 0.004107812259878428, + 0.004475142933162193, + 0.004475142933162193, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07501353706632337, + 0.07501353706632337, + 0.05126333, + 0.03139071884201526, + 0.16232026849474215, + 0.03139071884201526, + 0.009644699216421155, + 0.3884909076350074, + 0.3884909076350074, + 0.0, + 0.0, + 0.01803023149924618, + 0.05148152309869014, + 0.11418722484792974, + 0.11418722484792974, + 0.0, + 0.0, + 0.0013624746618526315, + 0.05148152309869014, + 0.07680939372096739, + 0.10260753972189762, + 0.009177992280040464, + 0.48387040666171455, + 0.44679040014743776, + 0.44679040014743776, + 0.021219507540975284, + 0.021219507540975284, + 0.003916647205395356, + 0.003916647205395356, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 11.9, + "rotation": [] + }, + { + "weights": [ + 0.03557760917714661, + 0.03557760917714661, + 0.02888475, + 0.014926525, + 0.014926525, + 0.009939224379403248, + 0.005495317739301489, + 0.005495317739301489, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07108669919627046, + 0.07108669919627046, + 0.05126333, + 0.02793092812047958, + 0.15204253809792645, + 0.02793092812047958, + 0.013448019897831332, + 0.3563630512782503, + 0.3563630512782503, + 0.0, + 0.0, + 0.023336039696420924, + 0.05574419205742219, + 0.1351667943809713, + 0.1351667943809713, + 0.0, + 0.0, + 0.0010077212138899737, + 0.05574419205742219, + 0.0665087808455739, + 0.10460884443351191, + 0.008907006574528555, + 0.5054071554115835, + 0.4407007962465283, + 0.4407007962465283, + 0.022027395708220328, + 0.022027395708220328, + 0.003087070637515607, + 0.003087070637515607, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 11.933333333333334, + "rotation": [] + }, + { + "weights": [ + 0.03462957093226056, + 0.03462957093226056, + 0.02888475, + 0.014926525, + 0.014926525, + 0.01672677376440593, + 0.005946860708562384, + 0.005946860708562384, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06539064113582874, + 0.06539064113582874, + 0.05126333, + 0.0260850467775917, + 0.1503614970615931, + 0.0260850467775917, + 0.0176721974009914, + 0.3190254317862644, + 0.3190254317862644, + 0.0, + 0.0, + 0.02917788656694547, + 0.05468851950551777, + 0.16920900653515536, + 0.16920900653515536, + 0.0, + 0.0, + 0.0007350273629916559, + 0.05468851950551777, + 0.0555658555456569, + 0.11009206729275825, + 0.006888862912143972, + 0.49674655624798325, + 0.4259481953723088, + 0.4259481953723088, + 0.022997797642435324, + 0.022997797642435324, + 0.0033222381823829195, + 0.0033222381823829195, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 11.966666666666667, + "rotation": [] + }, + { + "weights": [ + 0.031748747068653674, + 0.031748747068653674, + 0.02888475, + 0.020809966441501657, + 0.020809966441501657, + 0.014245458087142624, + 0.0053154867673672794, + 0.0053154867673672794, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.060241149999961434, + 0.060241149999961434, + 0.05126333, + 0.03199403786287995, + 0.15929972732310374, + 0.03199403786287995, + 0.014955022397829639, + 0.3343759247822822, + 0.3343759247822822, + 0.0, + 0.0, + 0.025965348502912464, + 0.04780310994489301, + 0.14597612515370645, + 0.14597612515370645, + 1.1160189197177044e-05, + 1.1160189197177044e-05, + 0.0009014583706893776, + 0.04780310994489301, + 0.0680031038242942, + 0.11402044652067865, + 0.006474654456587866, + 0.48359450696276907, + 0.425, + 0.425, + 0.006252588005414619, + 0.006252588005414619, + 0.0024710182006135017, + 0.0024710182006135017, + 0.05684627736058887, + 0.05684627736058887, + 0.0001852713880084809 + ], + "time": 12.0, + "rotation": [] + }, + { + "weights": [ + 0.027522004005454806, + 0.027522004005454806, + 0.02888475, + 0.01958240563621112, + 0.01958240563621112, + 0.011436444946697771, + 0.004355053521604048, + 0.004355053521604048, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.055294943884724564, + 0.055294943884724564, + 0.05126333, + 0.032759389679111975, + 0.1570329720633369, + 0.032759389679111975, + 0.011151214160158155, + 0.36089807394004964, + 0.36089807394004964, + 0.0, + 0.0, + 0.020816955360628286, + 0.04484328507844884, + 0.11588701816896585, + 0.11588701816896585, + 0.0, + 0.0, + 0.0012358651363423884, + 0.04484328507844884, + 0.07455894471633989, + 0.1108121045998163, + 0.006286271661519996, + 0.46046316595304526, + 0.425, + 0.425, + 0.00884684148856571, + 0.00884684148856571, + 0.0015598552168479937, + 0.0015598552168479937, + 0.05420222500000001, + 0.05420222500000001, + 0.0002302306038992745 + ], + "time": 12.033333333333333, + "rotation": [] + }, + { + "weights": [ + 0.023656711208501012, + 0.023656711208501012, + 0.02888475, + 0.018424548211139608, + 0.018424548211139608, + 0.011544134042092724, + 0.0031895012195621163, + 0.0031895012195621163, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05034562320049313, + 0.05034562320049313, + 0.05126333, + 0.03246657871353115, + 0.1454040420055388, + 0.03246657871353115, + 0.008503234016409667, + 0.3700625509023663, + 0.3700625509023663, + 0.0, + 0.0, + 0.01562510111502237, + 0.048862767997862974, + 0.10960043447890441, + 0.10960043447890441, + 0.0, + 0.0, + 0.0009471999281751252, + 0.048862767997862974, + 0.06387842776519903, + 0.10260477332132191, + 0.005461692011782093, + 0.44466771738869765, + 0.425, + 0.425, + 0.012418616120304371, + 0.012418616120304371, + 0.003335698993344387, + 0.003335698993344387, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 12.066666666666666, + "rotation": [] + }, + { + "weights": [ + 0.021462433173188123, + 0.021462433173188123, + 0.02888475, + 0.017159514787323586, + 0.017159514787323586, + 0.014047485980249578, + 0.0018319621172157039, + 0.0018319621172157039, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.04564521614508853, + 0.04564521614508853, + 0.05126333, + 0.031111179744530627, + 0.13489421833129145, + 0.031111179744530627, + 0.006239753552446403, + 0.3567008177439369, + 0.3567008177439369, + 0.0, + 0.0, + 0.010349104730855839, + 0.05727039587994411, + 0.13351045774207215, + 0.13351045774207215, + 0.0, + 0.0, + 0.0, + 0.05727039587994411, + 0.04468828336823547, + 0.09572609691392799, + 0.003754354623102001, + 0.45420206217538706, + 0.42506858614229004, + 0.42506858614229004, + 0.01678249780904678, + 0.01678249780904678, + 0.0073038882309836945, + 0.0073038882309836945, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 12.1, + "rotation": [] + }, + { + "weights": [ + 0.019403085795668303, + 0.019403085795668303, + 0.02888475, + 0.01563533745438201, + 0.01563533745438201, + 0.02146500044939468, + 0.00036841899492353247, + 0.00036841899492353247, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02918545011953335, + 0.11969130296285453, + 0.02918545011953335, + 0.004081723306408833, + 0.33101927936482567, + 0.33101927936482567, + 0.0, + 0.0, + 0.004512433639290376, + 0.06818234045033142, + 0.18531259270853723, + 0.18531259270853723, + 0.0, + 0.0, + 0.0, + 0.06818234045033142, + 0.028518127378355042, + 0.09288007317453006, + 0.0015110818372697224, + 0.47828818522342986, + 0.425, + 0.425, + 0.021314522260386916, + 0.021314522260386916, + 0.011436070154744137, + 0.011436070154744137, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 12.133333333333333, + "rotation": [] + }, + { + "weights": [ + 0.01734305712413422, + 0.01734305712413422, + 0.02888475, + 0.014926525, + 0.014926525, + 0.03473821667080021, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.027569750605056075, + 0.09774644360250351, + 0.027569750605056075, + 0.0028418831453107425, + 0.30534026125255875, + 0.30534026125255875, + 0.0, + 0.0, + 0.001224467933786157, + 0.07883437730067841, + 0.23952102457078123, + 0.23952102457078123, + 0.0, + 0.0, + 0.0, + 0.07883437730067841, + 0.021476711095595825, + 0.09283219855658856, + 0.0, + 0.49625677512616495, + 0.425, + 0.425, + 0.023952034718163144, + 0.023952034718163144, + 0.013108846068534309, + 0.013108846068534309, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 12.166666666666666, + "rotation": [] + }, + { + "weights": [ + 0.01563631603950444, + 0.01563631603950444, + 0.02888475, + 0.014926525, + 0.014926525, + 0.051761053441738564, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.026834808191200932, + 0.07282213405686978, + 0.026834808191200932, + 0.002366895794450323, + 0.28696595679132286, + 0.28696595679132286, + 7.037597575357946e-06, + 7.037597575357946e-06, + 0.0, + 0.08840284184305638, + 0.27404859604427995, + 0.27404859604427995, + 5.162206611462998e-05, + 5.162206611462998e-05, + 0.0, + 0.08840284184305638, + 0.01991841623977738, + 0.0957259280188959, + 0.0, + 0.5007327541526481, + 0.425, + 0.425, + 0.02454480155986181, + 0.02454480155986181, + 0.013654071064855972, + 0.013654071064855972, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 12.2, + "rotation": [] + }, + { + "weights": [ + 0.015095946565270415, + 0.015095946565270415, + 0.02888475, + 0.014926525, + 0.014926525, + 0.06784744039177891, + 0.00011530100101871148, + 0.00011530100101871148, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.026767728736181936, + 0.052860661319323925, + 0.026767728736181936, + 0.002254952037973062, + 0.2794468011174881, + 0.2794468011174881, + 0.0005143991475259617, + 0.0005143991475259617, + 0.0, + 0.09605696712221412, + 0.28578567781618647, + 0.28578567781618647, + 0.00036338881722518365, + 0.00036338881722518365, + 0.0, + 0.09605696712221412, + 0.020044360948460432, + 0.10149166413715902, + 0.0, + 0.4984436435358862, + 0.425, + 0.425, + 0.024268683195114122, + 0.024268683195114122, + 0.013404971680470869, + 0.013404971680470869, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 12.233333333333333, + "rotation": [] + }, + { + "weights": [ + 0.01506316558058772, + 0.01506316558058772, + 0.02888475, + 0.014926525, + 0.014926525, + 0.07963809509362489, + 0.00025014637171157756, + 0.00025014637171157756, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.026410744677520817, + 0.04235171369143892, + 0.026410744677520817, + 0.002347655980182544, + 0.282993167213031, + 0.282993167213031, + 0.0008687613615100932, + 0.0008687613615100932, + 0.0, + 0.10181400350161955, + 0.29320940503052284, + 0.29320940503052284, + 0.0003984631172248294, + 0.0003984631172248294, + 0.0, + 0.10181400350161955, + 0.01973669199006897, + 0.10811096195663719, + 0.0, + 0.4975530317851472, + 0.4472318176712306, + 0.4472318176712306, + 0.024944806929145524, + 0.024944806929145524, + 0.012651821784675114, + 0.012651821784675114, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 12.266666666666667, + "rotation": [] + }, + { + "weights": [ + 0.0153870669592704, + 0.0153870669592704, + 0.02888475, + 0.014926525, + 0.014926525, + 0.08292664683290886, + 0.0003957313418920549, + 0.0003957313418920549, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.025179283605978486, + 0.04476155936717985, + 0.025179283605978486, + 0.002907176209347587, + 0.29396765530109387, + 0.29396765530109387, + 0.0008638451388105747, + 0.0008638451388105747, + 0.0002110291804586135, + 0.10413173447762211, + 0.3092840829065866, + 0.3092840829065866, + 8.636441613946645e-05, + 8.636441613946645e-05, + 0.0, + 0.10413173447762211, + 0.01952941353831971, + 0.11375666388443531, + 0.0, + 0.502446206126894, + 0.4859842509031293, + 0.4859842509031293, + 0.026014060505798874, + 0.026014060505798874, + 0.010321490227111743, + 0.010321490227111743, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 12.3, + "rotation": [] + }, + { + "weights": [ + 0.015860400082809575, + 0.015860400082809575, + 0.02888475, + 0.014926525, + 0.014926525, + 0.07489332907966201, + 0.0003902362726096595, + 0.0003902362726096595, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.023281323423166952, + 0.058973380327224705, + 0.023281323423166952, + 0.003181223657780458, + 0.3104531777756553, + 0.3104531777756553, + 0.0006194352222207399, + 0.0006194352222207399, + 0.0020130772675786687, + 0.1023764636899743, + 0.32867603983197874, + 0.32867603983197874, + 0.0, + 0.0, + 0.0, + 0.1023764636899743, + 0.018212868805442525, + 0.1169071972370147, + 0.0, + 0.5143815892083301, + 0.5202113147292815, + 0.5202113147292815, + 0.026702193213360637, + 0.026702193213360637, + 0.0072013094222971325, + 0.0072013094222971325, + 0.05420222500000001, + 0.05420222500000001, + 0.00041164952729429513 + ], + "time": 12.333333333333334, + "rotation": [] + }, + { + "weights": [ + 0.01684404534420796, + 0.01684404534420796, + 0.02888475, + 0.014926525, + 0.014926525, + 0.05487942397594449, + 5.9348291584423614e-05, + 5.9348291584423614e-05, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.021166731037023406, + 0.08264772287436889, + 0.021166731037023406, + 0.00359093980597598, + 0.3299555612461906, + 0.3299555612461906, + 0.00030771743073793376, + 0.00030771743073793376, + 0.0039077246827738605, + 0.09595959846462516, + 0.3417307760034287, + 0.3417307760034287, + 0.0, + 0.0, + 0.0, + 0.09595959846462516, + 0.017919558180229993, + 0.11677501201629632, + 0.0, + 0.5359972783497398, + 0.5391597173043656, + 0.5391597173043656, + 0.02654894488198415, + 0.02654894488198415, + 0.006007185631564681, + 0.006007185631564681, + 0.05420222500000001, + 0.05420222500000001, + 0.0004851033645016806 + ], + "time": 12.366666666666667, + "rotation": [] + }, + { + "weights": [ + 0.0181682311530624, + 0.0181682311530624, + 0.02888475, + 0.014926525, + 0.014926525, + 0.030825280504567263, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.01934849927769661, + 0.12138230153492513, + 0.01934849927769661, + 0.003510211188612238, + 0.3445147731474466, + 0.3445147731474466, + 0.00011467540902750826, + 0.00011467540902750826, + 0.004979121365717477, + 0.08379262760281558, + 0.3515748637063161, + 0.3515748637063161, + 0.0, + 0.0, + 0.0, + 0.08379262760281558, + 0.024047422728368198, + 0.11809988617897027, + 0.0, + 0.5670642461095534, + 0.5348682986838473, + 0.5348682986838473, + 0.02575283978666576, + 0.02575283978666576, + 0.007483467246804914, + 0.007483467246804914, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 12.4, + "rotation": [] + }, + { + "weights": [ + 0.0207970087549516, + 0.0207970087549516, + 0.02888475, + 0.014926525, + 0.014926525, + 0.012320536481482632, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.019281962186986377, + 0.1663705478395734, + 0.019281962186986377, + 0.0030765505241496204, + 0.34708264725548865, + 0.34708264725548865, + 0.0, + 0.0, + 0.005633636244705743, + 0.06892179511487481, + 0.36226295615945525, + 0.36226295615945525, + 0.0, + 0.0, + 0.0, + 0.06892179511487481, + 0.03752077094146181, + 0.12763552069663991, + 0.0, + 0.6037471413612363, + 0.5084761738777157, + 0.5084761738777157, + 0.024824356181280937, + 0.024824356181280937, + 0.009145109767892528, + 0.009145109767892528, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 12.433333333333334, + "rotation": [] + }, + { + "weights": [ + 0.02395206849489892, + 0.02395206849489892, + 0.02888475, + 0.014926525, + 0.014926525, + 0.003651818952390121, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02189530673605476, + 0.19578806127820686, + 0.02189530673605476, + 0.001838887363140071, + 0.3418842247554232, + 0.3418842247554232, + 0.0, + 0.0, + 0.005784657384668075, + 0.05571253943656169, + 0.35018711600984825, + 0.35018711600984825, + 0.0, + 0.0, + 0.0001578551051872114, + 0.05571253943656169, + 0.05399176510316982, + 0.14268680512905113, + 0.0, + 0.6314502528735566, + 0.46900852152279415, + 0.46900852152279415, + 0.023592997917107162, + 0.023592997917107162, + 0.00728793752246669, + 0.00728793752246669, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 12.466666666666667, + "rotation": [] + }, + { + "weights": [ + 0.02671616716044288, + 0.02671616716044288, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0013039427144186815, + 0.00017481196139539987, + 0.00017481196139539987, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02604297396097285, + 0.19161847659519732, + 0.02604297396097285, + 0.0008270271987255126, + 0.3364207944699694, + 0.3364207944699694, + 0.0, + 0.0, + 0.005303333593266348, + 0.04868001379072663, + 0.2907841044877255, + 0.2907841044877255, + 0.0, + 0.0, + 0.002988872091685021, + 0.04868001379072663, + 0.06710548081568304, + 0.1502421740974698, + 0.0, + 0.6350152679852072, + 0.4260042620556692, + 0.4260042620556692, + 0.022093126411948872, + 0.022093126411948872, + 0.0038385072589984938, + 0.0038385072589984938, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 12.5, + "rotation": [] + }, + { + "weights": [ + 0.028034284524619563, + 0.028034284524619563, + 0.02888475, + 0.014926525, + 0.014926525, + 0.002100197438682827, + 0.0002035890306745256, + 0.0002035890306745256, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.029060983703428675, + 0.16458287715911857, + 0.029060983703428675, + 0.0, + 0.32926493329661216, + 0.32926493329661216, + 0.0, + 0.0, + 0.003962967438357215, + 0.046814785312328994, + 0.2010213048330374, + 0.2010213048330374, + 0.00016525941235678537, + 0.00016525941235678537, + 0.00483010009463344, + 0.046814785312328994, + 0.07471256873437332, + 0.1426923066377639, + 0.0, + 0.6116713949612206, + 0.425, + 0.425, + 0.020483445056847148, + 0.020483445056847148, + 0.0007737437263131132, + 0.0007737437263131132, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 12.533333333333333, + "rotation": [] + }, + { + "weights": [ + 0.029524703856025406, + 0.029524703856025406, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0035861573049000314, + 3.6800280213356005e-05, + 3.6800280213356005e-05, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02935900027500152, + 0.1368771028518676, + 0.02935900027500152, + 0.0, + 0.3117469389523777, + 0.3117469389523777, + 0.0, + 0.0, + 0.002492989599704741, + 0.046569743486387365, + 0.12474652645843362, + 0.12474652645843362, + 0.00023172306162970398, + 0.00023172306162970398, + 0.005919099865215162, + 0.046569743486387365, + 0.07542419965778074, + 0.12434451601334973, + 0.0, + 0.5765395011220656, + 0.425, + 0.425, + 0.01891032304082597, + 0.01891032304082597, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 12.566666666666666, + "rotation": [] + }, + { + "weights": [ + 0.031534137975956694, + 0.031534137975956694, + 0.02888475, + 0.014926525, + 0.014926525, + 0.00467608006937163, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.027359470717432836, + 0.12559843301773063, + 0.027359470717432836, + 0.0, + 0.2827350471700939, + 0.2827350471700939, + 0.00013767584077348658, + 0.00013767584077348658, + 0.0014985940286091387, + 0.04190817831882407, + 0.08281598389148706, + 0.08281598389148706, + 0.00010545860443796423, + 0.00010545860443796423, + 0.005416020524821109, + 0.04190817831882407, + 0.07109040873391284, + 0.10639468814645488, + 0.0, + 0.5463368756430487, + 0.425, + 0.425, + 0.016925063878297796, + 0.016925063878297796, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.00014529017997639505 + ], + "time": 12.6, + "rotation": [] + }, + { + "weights": [ + 0.0335172283596226, + 0.0335172283596226, + 0.02888475, + 0.015326271898531231, + 0.015326271898531231, + 0.004981565262590133, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.024278773918571812, + 0.13907329797744744, + 0.024278773918571812, + 0.0, + 0.24619413912296284, + 0.24619413912296284, + 0.0003849878032425682, + 0.0003849878032425682, + 0.00015775561332702614, + 0.031939092265175904, + 0.06574606820940967, + 0.06574606820940967, + 2.4833051221711284e-05, + 2.4833051221711284e-05, + 0.0030267097455050247, + 0.031939092265175904, + 0.06803986323731283, + 0.09662394906793315, + 0.0, + 0.5259884663990563, + 0.425, + 0.425, + 0.014583096631935655, + 0.014583096631935655, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.0006893486848899293 + ], + "time": 12.633333333333333, + "rotation": [] + }, + { + "weights": [ + 0.03369233437946863, + 0.03369233437946863, + 0.02888475, + 0.015800772767532893, + 0.015800772767532893, + 0.003994008792298179, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02143482471984897, + 0.17050154311316346, + 0.02143482471984897, + 0.0014097512400309945, + 0.20797262298209315, + 0.20797262298209315, + 0.0007738086240299573, + 0.0007738086240299573, + 0.0, + 0.020498901911612057, + 0.061834178013460944, + 0.061834178013460944, + 0.0, + 0.0, + 0.0, + 0.020498901911612057, + 0.06944023328168047, + 0.0949765795043536, + 0.0, + 0.509163244281496, + 0.425, + 0.425, + 0.0124464064836502, + 0.0124464064836502, + 0.0018611822144261416, + 0.0018611822144261416, + 0.05420222500000001, + 0.05420222500000001, + 0.00089366076780217 + ], + "time": 12.666666666666666, + "rotation": [] + }, + { + "weights": [ + 0.03129552107836517, + 0.03129552107836517, + 0.02888475, + 0.01578310765381132, + 0.01578310765381132, + 0.002009856381586618, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.019419828475409916, + 0.20502977507454997, + 0.019419828475409916, + 0.004168680493187689, + 0.17516768681151518, + 0.17516768681151518, + 0.0011944896308705203, + 0.0011944896308705203, + 0.0, + 0.011465262688164193, + 0.06071293588195525, + 0.06071293588195525, + 0.0, + 0.0, + 0.0, + 0.011465262688164193, + 0.07314299536602833, + 0.09661785789898458, + 0.0, + 0.49007923007011384, + 0.425, + 0.425, + 0.010768130379063736, + 0.010768130379063736, + 0.005916997377893751, + 0.005916997377893751, + 0.05420222500000001, + 0.05420222500000001, + 0.0001638676971197128 + ], + "time": 12.7, + "rotation": [] + }, + { + "weights": [ + 0.026882498817784428, + 0.026882498817784428, + 0.02888475, + 0.015298890695526939, + 0.015298890695526939, + 0.0006876534649303974, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.018559596812974727, + 0.2278334433691841, + 0.018559596812974727, + 0.006338231694618503, + 0.15198856868914185, + 0.15198856868914185, + 0.0016171333938837043, + 0.0016171333938837043, + 0.001309474664075033, + 0.004994153909917385, + 0.05947132291538371, + 0.05947132291538371, + 0.0, + 0.0, + 0.0, + 0.004994153909917385, + 0.07239738894360402, + 0.09619761386087958, + 0.0, + 0.4526003624711715, + 0.425, + 0.425, + 0.00937999531626701, + 0.00937999531626701, + 0.007279776994671137, + 0.007279776994671137, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 12.733333333333333, + "rotation": [] + }, + { + "weights": [ + 0.02143780719488858, + 0.02143780719488858, + 0.03523069130522862, + 0.014926525, + 0.014926525, + 0.00030018559523991136, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.019108503437291896, + 0.2314071318081446, + 0.019108503437291896, + 0.00681216821872762, + 0.13895975713218955, + 0.13895975713218955, + 0.0023000851233622843, + 0.0023000851233622843, + 0.0045751459896564445, + 0.0013362294329064214, + 0.05816113331488197, + 0.05816113331488197, + 0.0, + 0.0, + 0.0, + 0.0013362294329064214, + 0.06376568526029583, + 0.09340440439326417, + 0.0, + 0.38373391543115865, + 0.425, + 0.425, + 0.00814931132963725, + 0.00814931132963725, + 0.0059202645506177595, + 0.0059202645506177595, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 12.766666666666667, + "rotation": [] + }, + { + "weights": [ + 0.014439913657094742, + 0.014439913657094742, + 0.045393912494182564, + 0.014926525, + 0.014926525, + 0.00041846579739025606, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02127869977252245, + 0.21096268074853067, + 0.02127869977252245, + 0.0069476000964641535, + 0.13574841043778818, + 0.13574841043778818, + 0.0034840531939906703, + 0.0034840531939906703, + 0.009141370175140238, + 0.0012860619862164746, + 0.05675691398126735, + 0.05675691398126735, + 0.0, + 0.0, + 0.0011268686636217975, + 0.0012860619862164746, + 0.04736913549048557, + 0.08898447283676687, + 0.0, + 0.2834413588047026, + 0.425, + 0.425, + 0.007304421551525589, + 0.007304421551525589, + 0.004971327712493281, + 0.004971327712493281, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 12.8, + "rotation": [] + }, + { + "weights": [ + 0.007452263097677906, + 0.007452263097677906, + 0.054678396348442314, + 0.014926525, + 0.014926525, + 0.0015632347336837216, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02239429476307392, + 0.17424198763711102, + 0.02239429476307392, + 0.007119714654982086, + 0.1376490714294569, + 0.1376490714294569, + 0.006216355341353582, + 0.006216355341353582, + 0.0162054811737367, + 0.00509495353326201, + 0.048836482954876734, + 0.048836482954876734, + 0.0022799207163708523, + 0.0022799207163708523, + 0.012445943190583151, + 0.00509495353326201, + 0.0361535378864833, + 0.08405560872384475, + 0.006091031751462385, + 0.1690444058605602, + 0.425, + 0.425, + 0.006563696100243497, + 0.006563696100243497, + 0.004500597795205455, + 0.004500597795205455, + 0.05420222500000001, + 0.05420222500000001, + 0.0005747774083699495 + ], + "time": 12.833333333333334, + "rotation": [] + }, + { + "weights": [ + 0.004112914843218664, + 0.004112914843218664, + 0.06147373233522684, + 0.015011373428912842, + 0.015011373428912842, + 0.0032120562025478895, + 0.0012426648887672585, + 0.0012426648887672585, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02232585112200737, + 0.13835889918463562, + 0.02232585112200737, + 0.007669347537947548, + 0.1349672445229121, + 0.1349672445229121, + 0.01037635580237422, + 0.01037635580237422, + 0.024649384138839575, + 0.014364380163273634, + 0.03952383814113478, + 0.03952383814113478, + 0.010554427147975984, + 0.010554427147975984, + 0.02869443085842897, + 0.014364380163273634, + 0.038215422843183765, + 0.07877149645771295, + 0.027128488676888586, + 0.08124443446951247, + 0.425, + 0.425, + 0.0060189739667943516, + 0.0060189739667943516, + 0.0038027619809976624, + 0.0038027619809976624, + 0.05420222500000001, + 0.05420222500000001, + 0.0017503375719700532 + ], + "time": 12.866666666666667, + "rotation": [] + }, + { + "weights": [ + 0.003028723943446362, + 0.003028723943446362, + 0.06520902344158713, + 0.01601454839165483, + 0.01601454839165483, + 0.003447610672031128, + 0.0035813584857221133, + 0.0035813584857221133, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.023642764046612124, + 0.11845732246126439, + 0.023642764046612124, + 0.008218166671161136, + 0.12799284287861407, + 0.12799284287861407, + 0.016447291161332804, + 0.016447291161332804, + 0.02886914280908447, + 0.02490882286801933, + 0.033382378092833905, + 0.033382378092833905, + 0.020087873802653367, + 0.020087873802653367, + 0.05377059022762943, + 0.02490882286801933, + 0.04699196325881138, + 0.07667142791407444, + 0.050365281956536403, + 0.03485043272376057, + 0.425, + 0.425, + 0.006031051517597263, + 0.006031051517597263, + 0.0022026009591562387, + 0.0022026009591562387, + 0.05420222500000001, + 0.05420222500000001, + 0.0025700594697679775 + ], + "time": 12.9, + "rotation": [] + }, + { + "weights": [ + 0.001888675695019106, + 0.001888675695019106, + 0.06874358866895944, + 0.017079867476350236, + 0.017079867476350236, + 0.004428341878311972, + 0.008029245558593953, + 0.008029245558593953, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.0260780798727216, + 0.11127753393990636, + 0.0260780798727216, + 0.009889475242899992, + 0.12411309246506001, + 0.12411309246506001, + 0.020886200112955895, + 0.020886200112955895, + 0.02800718157419134, + 0.030967490840703223, + 0.03371232503226823, + 0.03371232503226823, + 0.026536591005112433, + 0.026536591005112433, + 0.07176099337105238, + 0.030967490840703223, + 0.04974212625197, + 0.07565023920365736, + 0.05601566774504521, + 0.016002095118164944, + 0.425, + 0.425, + 0.006543826748217849, + 0.006543826748217849, + 0.003253092044698338, + 0.003253092044698338, + 0.05420222500000001, + 0.05420222500000001, + 0.0046670689912778965 + ], + "time": 12.933333333333334, + "rotation": [] + }, + { + "weights": [ + 0.0011511817840593169, + 0.0011511817840593169, + 0.07148701718875333, + 0.018387736220996036, + 0.018387736220996036, + 0.005501329366649899, + 0.013766060822776385, + 0.013766060822776385, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.029864398036508217, + 0.11723751272473995, + 0.029864398036508217, + 0.01238907829725316, + 0.12169706395694177, + 0.12169706395694177, + 0.02460625565477778, + 0.02460625565477778, + 0.022289080119558706, + 0.034097431041300266, + 0.039713835396936945, + 0.039713835396936945, + 0.030923240951129354, + 0.030923240951129354, + 0.08721447994134254, + 0.034097431041300266, + 0.049338606425694015, + 0.0763170998011316, + 0.048958993596689995, + 0.02853333242237563, + 0.425, + 0.425, + 0.007598498857447072, + 0.007598498857447072, + 0.006080046415861163, + 0.006080046415861163, + 0.05420222500000001, + 0.05420222500000001, + 0.00752148577677352 + ], + "time": 12.966666666666667, + "rotation": [] + }, + { + "weights": [ + 0.0007517512047625285, + 0.0007517512047625285, + 0.07034062482264566, + 0.0224793684432134, + 0.0224793684432134, + 0.004587244961131993, + 0.012521190775089517, + 0.012521190775089517, + 0.7530181138880028, + 0.7530181138880028, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.049514007157325804, + 0.049514007157325804, + 0.05126333, + 0.03615402091665805, + 0.11244758950771905, + 0.03615402091665805, + 0.010152799260302048, + 0.10034707221360925, + 0.10034707221360925, + 0.028388954606348125, + 0.028388954606348125, + 0.01900478785185988, + 0.04886138717244773, + 0.05067940436176901, + 0.05067940436176901, + 0.027846172100224435, + 0.027846172100224435, + 0.15851094166057644, + 0.04886138717244773, + 0.04135500063904282, + 0.07804940532664854, + 0.0411747030744037, + 0.02485270031860891, + 0.425, + 0.425, + 0.0014256296067771033, + 0.0014256296067771033, + 0.005108557769927339, + 0.005108557769927339, + 0.05656826611236361, + 0.05656826611236361, + 0.006676389591476947 + ], + "time": 13.0, + "rotation": [] + }, + { + "weights": [ + 8.084056455464464e-05, + 8.084056455464464e-05, + 0.06801469914969935, + 0.020955167427684232, + 0.020955167427684232, + 0.004571031956445599, + 0.010635175101370322, + 0.010635175101370322, + 0.822078683986022, + 0.822078683986022, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05704213922566501, + 0.05704213922566501, + 0.05126333, + 0.04297135562260557, + 0.10665524028596403, + 0.04297135562260557, + 0.007077051641508218, + 0.09317564781577799, + 0.09317564781577799, + 0.04618928121668949, + 0.04618928121668949, + 0.016291436836833012, + 0.05597535174872189, + 0.044878052707229305, + 0.044878052707229305, + 0.026256066383350436, + 0.026256066383350436, + 0.17365167838122159, + 0.05597535174872189, + 0.038198130258492, + 0.0924778834694907, + 0.03750361221886811, + 0.017731431942610468, + 0.425, + 0.425, + 0.0012132700809410618, + 0.0012132700809410618, + 0.003735162002877107, + 0.003735162002877107, + 0.05420222500000001, + 0.05420222500000001, + 0.005138339687670976 + ], + "time": 13.033333333333333, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.06359934189489903, + 0.019895645351438857, + 0.019895645351438857, + 0.0071735688086066885, + 0.009723325366420399, + 0.009723325366420399, + 0.8217193761613198, + 0.8217193761613198, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06528735223883422, + 0.06528735223883422, + 0.05126333, + 0.04922958546868099, + 0.10998137201581665, + 0.04922958546868099, + 0.005072056482146887, + 0.1542018276905373, + 0.1542018276905373, + 0.04653880927179539, + 0.04653880927179539, + 0.015525048412382574, + 0.04428482263881177, + 0.0291259394958615, + 0.0291259394958615, + 0.022990731868360703, + 0.022990731868360703, + 0.12367625126082975, + 0.04428482263881177, + 0.05590473030294684, + 0.13675273582339276, + 0.03480863717517678, + 0.01457282067941764, + 0.425, + 0.425, + 0.0019998322688043095, + 0.0019998322688043095, + 0.0035586984961160566, + 0.0035586984961160566, + 0.05420222500000001, + 0.05420222500000001, + 0.0038819532043167485 + ], + "time": 13.066666666666666, + "rotation": [] + }, + { + "weights": [ + 0.0016586852925164325, + 0.0016586852925164325, + 0.057451947778463304, + 0.018900689864730605, + 0.018900689864730605, + 0.0092508733627342, + 0.01007439279041829, + 0.01007439279041829, + 0.6023097891083613, + 0.6023097891083613, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07326966757747691, + 0.07326966757747691, + 0.05126333, + 0.058545700129949786, + 0.14091087818145734, + 0.058545700129949786, + 0.0049540106828014005, + 0.2868984869548251, + 0.2868984869548251, + 0.03436519701566013, + 0.03436519701566013, + 0.0160639117693617, + 0.021817203123299822, + 0.02188552337742985, + 0.02188552337742985, + 0.01588766296349819, + 0.01588766296349819, + 0.0637570581088463, + 0.021817203123299822, + 0.08848924218189141, + 0.19582108323063158, + 0.027384464691082605, + 0.014730449819139043, + 0.425, + 0.425, + 0.004521459722093169, + 0.004521459722093169, + 0.004337431721034502, + 0.004337431721034502, + 0.05420222500000001, + 0.05420222500000001, + 0.0031338303039471285 + ], + "time": 13.1, + "rotation": [] + }, + { + "weights": [ + 0.008771935220250257, + 0.008771935220250257, + 0.04848593774701458, + 0.016734806967060447, + 0.016734806967060447, + 0.008689402051422056, + 0.00845483719982637, + 0.00845483719982637, + 0.16537205596861296, + 0.16537205596861296, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.08219473051991971, + 0.08219473051991971, + 0.05126333, + 0.06715430464352626, + 0.21560801017203285, + 0.06715430464352626, + 0.005057911836117705, + 0.41918037791742735, + 0.41918037791742735, + 0.020815724801905695, + 0.020815724801905695, + 0.015405993808288951, + 0.004699311964657324, + 0.029230848166863506, + 0.029230848166863506, + 0.006065782472541942, + 0.006065782472541942, + 0.028129845709875707, + 0.004699311964657324, + 0.11705886469811802, + 0.22124206380373754, + 0.015378237909250907, + 0.02271926172787232, + 0.425, + 0.425, + 0.009779443423069856, + 0.009779443423069856, + 0.0021960001111309326, + 0.0021960001111309326, + 0.05420222500000001, + 0.05420222500000001, + 0.002714903831963432 + ], + "time": 13.133333333333333, + "rotation": [] + }, + { + "weights": [ + 0.017402741686269936, + 0.017402741686269936, + 0.03658428033091582, + 0.014926525, + 0.014926525, + 0.0061021652452799705, + 0.005354136834111138, + 0.005354136834111138, + 0.06281458622714299, + 0.06281458622714299, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.08849233593213458, + 0.08849233593213458, + 0.05126333, + 0.06871338905022562, + 0.2850818652328178, + 0.06871338905022562, + 0.003975618292140411, + 0.463000854728173, + 0.463000854728173, + 0.010381731312874013, + 0.010381731312874013, + 0.009699015679712191, + 0.0003649727414761256, + 0.04256851274140025, + 0.04256851274140025, + 0.0008586230858856298, + 0.0008586230858856298, + 0.011568054949902746, + 0.0003649727414761256, + 0.12799808673712665, + 0.18956643337497897, + 0.007887158199232443, + 0.055600699473704565, + 0.425, + 0.425, + 0.014781088350196267, + 0.014781088350196267, + 0.0004900382050522123, + 0.0004900382050522123, + 0.05420222500000001, + 0.05420222500000001, + 0.0027890079483693943 + ], + "time": 13.166666666666666, + "rotation": [] + }, + { + "weights": [ + 0.02192719073129855, + 0.02192719073129855, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0031573298862394, + 0.0020406219541874446, + 0.0020406219541874446, + 0.0061527317083486105, + 0.0061527317083486105, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.08904869997098658, + 0.08904869997098658, + 0.05126333, + 0.061412074719949694, + 0.3, + 0.061412074719949694, + 0.0020427632807012708, + 0.43792464590194247, + 0.43792464590194247, + 0.004193938516004349, + 0.004193938516004349, + 0.003722928443885577, + 9.901642799377362e-05, + 0.04150112385652501, + 0.04150112385652501, + 0.0, + 0.0, + 0.007305237321297118, + 9.901642799377362e-05, + 0.1324323196861208, + 0.1378592727713438, + 0.006885936921652479, + 0.10786627716783961, + 0.425, + 0.425, + 0.016261060189927103, + 0.016261060189927103, + 0.0005862005703075192, + 0.0005862005703075192, + 0.05420222500000001, + 0.05420222500000001, + 0.002449193106470058 + ], + "time": 13.2, + "rotation": [] + }, + { + "weights": [ + 0.021478929077940315, + 0.021478929077940315, + 0.02888475, + 0.014926525, + 0.014926525, + 0.000800144353083201, + 0.0014178684713052842, + 0.0014178684713052842, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.08576606022460115, + 0.08576606022460115, + 0.05126333, + 0.05006010149206431, + 0.26684776714869896, + 0.05006010149206431, + 0.0012254047141011255, + 0.386658619557108, + 0.386658619557108, + 0.0011383055975394568, + 0.0011383055975394568, + 0.0015481239983013665, + 0.0009041454509964966, + 0.025021490827202782, + 0.025021490827202782, + 0.000699091436607496, + 0.000699091436607496, + 0.007789967634848177, + 0.0009041454509964966, + 0.12449432717902312, + 0.10006206546510962, + 0.0076375329068728804, + 0.1321251344467912, + 0.425, + 0.425, + 0.012842193219278533, + 0.012842193219278533, + 0.001994752777474266, + 0.001994752777474266, + 0.05420222500000001, + 0.05420222500000001, + 0.0022937786898442666 + ], + "time": 13.233333333333333, + "rotation": [] + }, + { + "weights": [ + 0.01780267283320426, + 0.01780267283320426, + 0.03193659686616487, + 0.01551497796871594, + 0.01551497796871594, + 0.0, + 0.0011362119245209858, + 0.0011362119245209858, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.08853266505258418, + 0.08853266505258418, + 0.05126333, + 0.042401993008596525, + 0.23350107397351932, + 0.042401993008596525, + 0.0031273171771317694, + 0.30735604289386936, + 0.30735604289386936, + 0.0006741035170853091, + 0.0006741035170853091, + 0.006578166782855982, + 0.01247119878285696, + 0.013586582615971553, + 0.013586582615971553, + 0.002848215427781852, + 0.002848215427781852, + 0.014082463910537081, + 0.01247119878285696, + 0.09974314762013294, + 0.0842817598155566, + 0.008751291249479562, + 0.09885802343487735, + 0.425, + 0.425, + 0.007140802682510439, + 0.007140802682510439, + 0.0025253146487687304, + 0.0025253146487687304, + 0.05420222500000001, + 0.05420222500000001, + 0.0023864477606756335 + ], + "time": 13.266666666666667, + "rotation": [] + }, + { + "weights": [ + 0.011979653074273034, + 0.011979653074273034, + 0.05036743709019249, + 0.01626790229818412, + 0.01626790229818412, + 0.0003981214548860275, + 0.00080834090310548, + 0.00080834090310548, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.09884425082377019, + 0.09884425082377019, + 0.05126333, + 0.04273631327918595, + 0.21886141436440593, + 0.04273631327918595, + 0.007771002720775345, + 0.18405731320381152, + 0.18405731320381152, + 0.011799306025994664, + 0.011799306025994664, + 0.017119879594870966, + 0.04555450971903542, + 0.015773148408957882, + 0.015773148408957882, + 0.007360682130924289, + 0.007360682130924289, + 0.07233646355037172, + 0.04555450971903542, + 0.07360815065247667, + 0.08657542424542557, + 0.011591682050909307, + 0.04531729753528319, + 0.425, + 0.425, + 0.002581687553652693, + 0.002581687553652693, + 0.003247824816831519, + 0.003247824816831519, + 0.05420222500000001, + 0.05420222500000001, + 0.002195775721754345 + ], + "time": 13.3, + "rotation": [] + }, + { + "weights": [ + 0.007122202563498697, + 0.007122202563498697, + 0.07296707534364288, + 0.015785505410302707, + 0.015785505410302707, + 0.0014784224331378935, + 0.00011124697380832248, + 0.00011124697380832248, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.11708329766988748, + 0.11708329766988748, + 0.05126333, + 0.050629690023405186, + 0.22087076289313165, + 0.050629690023405186, + 0.010393593047878565, + 0.06929164688502033, + 0.06929164688502033, + 0.042302482992942814, + 0.042302482992942814, + 0.028071620208876456, + 0.10002329140635469, + 0.01590112176324639, + 0.01590112176324639, + 0.012649205726172237, + 0.012649205726172237, + 0.189213015777724, + 0.10002329140635469, + 0.07544419339724945, + 0.11735616305044713, + 0.013399443243231085, + 0.014020127377339757, + 0.425, + 0.425, + 0.0007638297336442118, + 0.0007638297336442118, + 0.002708663551935126, + 0.002708663551935126, + 0.05420222500000001, + 0.05420222500000001, + 0.0023956092872789913 + ], + "time": 13.333333333333334, + "rotation": [] + }, + { + "weights": [ + 0.003039502112993169, + 0.003039502112993169, + 0.08541029925857266, + 0.01519913098696913, + 0.01519913098696913, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.13548032843640864, + 0.13548032843640864, + 0.05126333, + 0.058059634906905, + 0.21704793044498977, + 0.058059634906905, + 0.011101891113711248, + 0.013525033742189383, + 0.013525033742189383, + 0.07885434114507263, + 0.07885434114507263, + 0.03149883853537693, + 0.14341715244310238, + 0.012647806533745346, + 0.012647806533745346, + 0.014007942032601145, + 0.014007942032601145, + 0.303563262096473, + 0.14341715244310238, + 0.09171231601919441, + 0.14737899260861526, + 0.013844666949340268, + 0.007098747789859763, + 0.425, + 0.425, + 0.001134747559470789, + 0.001134747559470789, + 0.0011280491548989486, + 0.0011280491548989486, + 0.05420222500000001, + 0.05420222500000001, + 0.0024037393076079216 + ], + "time": 13.366666666666667, + "rotation": [] + }, + { + "weights": [ + 0.0017941896138446653, + 0.0017941896138446653, + 0.08262413804020197, + 0.015361857680888855, + 0.015361857680888855, + 0.0, + 3.4060515463352e-05, + 3.4060515463352e-05, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.14448755830526344, + 0.14448755830526344, + 0.05126333, + 0.0654051136757646, + 0.2029542936597551, + 0.0654051136757646, + 0.010652089132262121, + 0.004292425832578105, + 0.004292425832578105, + 0.09114464082888189, + 0.09114464082888189, + 0.042187969918761906, + 0.14322586831237583, + 0.008472962464605034, + 0.008472962464605034, + 0.012445697880217, + 0.012445697880217, + 0.31733416297606043, + 0.14322586831237583, + 0.08617556435721256, + 0.13893832883664534, + 0.011943031847476953, + 0.005570997191326948, + 0.425, + 0.425, + 0.0012920352550489555, + 0.0012920352550489555, + 0.0007114777607577171, + 0.0007114777607577171, + 0.05420222500000001, + 0.05420222500000001, + 0.001810387362326893 + ], + "time": 13.4, + "rotation": [] + }, + { + "weights": [ + 0.0027719065546989415, + 0.0027719065546989415, + 0.06716892080647602, + 0.01523988843019281, + 0.01523988843019281, + 0.0, + 0.002102874385725173, + 0.002102874385725173, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.1341392160526343, + 0.1341392160526343, + 0.05126333, + 0.07412357138735903, + 0.17272541131292063, + 0.07412357138735903, + 0.008897249374006471, + 0.005988805608025614, + 0.005988805608025614, + 0.07064855577690257, + 0.07064855577690257, + 0.08911817499569478, + 0.10052933208644385, + 0.061397073258246636, + 0.061397073258246636, + 0.00933283591376883, + 0.00933283591376883, + 0.21905432774552264, + 0.10052933208644385, + 0.05271845662168091, + 0.08797853785966119, + 0.011111301928758616, + 0.023421007394790624, + 0.425, + 0.425, + 0.0014441278736506181, + 0.0014441278736506181, + 0.0040801235341599885, + 0.0040801235341599885, + 0.05420222500000001, + 0.05420222500000001, + 0.003560559877327508 + ], + "time": 13.433333333333334, + "rotation": [] + }, + { + "weights": [ + 0.006669689023068968, + 0.006669689023068968, + 0.05484744746770174, + 0.014926525, + 0.014926525, + 0.0, + 0.005384400101112465, + 0.005384400101112465, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.11510958884443549, + 0.11510958884443549, + 0.05126333, + 0.0857889821486813, + 0.13345684085573462, + 0.0857889821486813, + 0.00395661846601537, + 0.010408051684498779, + 0.010408051684498779, + 0.039851801076105635, + 0.039851801076105635, + 0.15510033794811787, + 0.05190384882901393, + 0.20423917855535223, + 0.20423917855535223, + 0.006099527196160381, + 0.006099527196160381, + 0.09215285671608782, + 0.05190384882901393, + 0.017885294609836153, + 0.04043977361704619, + 0.007884529020105085, + 0.07947892567941114, + 0.425, + 0.425, + 0.0014271399006247512, + 0.0014271399006247512, + 0.03462512946820682, + 0.03462512946820682, + 0.05420222500000001, + 0.05420222500000001, + 0.006278636226696624 + ], + "time": 13.466666666666667, + "rotation": [] + }, + { + "weights": [ + 0.013708288541861935, + 0.013708288541861935, + 0.04737628708992683, + 0.014926525, + 0.014926525, + 0.0014124780893325789, + 0.007121581750522764, + 0.007121581750522764, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.09815302693418089, + 0.09815302693418089, + 0.06164303193134917, + 0.09889010542205397, + 0.08882727835859566, + 0.09889010542205397, + 0.00219508534563439, + 0.0186731431899326, + 0.0186731431899326, + 0.019064431946192454, + 0.019064431946192454, + 0.2012386407170976, + 0.02657128173325741, + 0.40371606115783937, + 0.40371606115783937, + 0.0029642153797405065, + 0.0029642153797405065, + 0.01909468642968149, + 0.02657128173325741, + 0.0, + 0.017402704379388245, + 0.003124388200896125, + 0.17957269081047594, + 0.425, + 0.425, + 0.001739026318703378, + 0.001739026318703378, + 0.0986604576664311, + 0.0986604576664311, + 0.05420222500000001, + 0.05420222500000001, + 0.007016003690659996 + ], + "time": 13.5, + "rotation": [] + }, + { + "weights": [ + 0.02334556358733346, + 0.02334556358733346, + 0.04150179049798418, + 0.014926525, + 0.014926525, + 0.005021639700446804, + 0.006267302223880373, + 0.006267302223880373, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.08601856928850918, + 0.08601856928850918, + 0.10018671261412751, + 0.11525008667792586, + 0.053896208533218894, + 0.11525008667792586, + 0.004898677447012489, + 0.038693788328341056, + 0.038693788328341056, + 0.010177992151251852, + 0.010177992151251852, + 0.20124609427792672, + 0.024415376569543547, + 0.56731564274856, + 0.56731564274856, + 0.007566894457808558, + 0.007566894457808558, + 0.0029946208798459495, + 0.024415376569543547, + 0.0, + 0.016123063968760613, + 0.0, + 0.28767141423055087, + 0.425, + 0.425, + 0.0020047254913619574, + 0.0020047254913619574, + 0.17109784944249043, + 0.17109784944249043, + 0.05420222500000001, + 0.05420222500000001, + 0.004649585112929342 + ], + "time": 13.533333333333333, + "rotation": [] + }, + { + "weights": [ + 0.0311398732076798, + 0.0311398732076798, + 0.03199861196002788, + 0.014926525, + 0.014926525, + 0.015497149952820359, + 0.003116200172475404, + 0.003116200172475404, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07196086948471406, + 0.07196086948471406, + 0.12301593039716988, + 0.1256913573614188, + 0.02887402517454963, + 0.1256913573614188, + 0.007713200391403263, + 0.07415545941995719, + 0.07415545941995719, + 0.005419695050056487, + 0.005419695050056487, + 0.1655300120157854, + 0.03158384194331508, + 0.6537064441612785, + 0.6537064441612785, + 0.01565571145287581, + 0.01565571145287581, + 0.004492012763928086, + 0.03158384194331508, + 0.0, + 0.020309625459568825, + 0.0, + 0.3656296432018278, + 0.425, + 0.425, + 0.0027245759112494313, + 0.0027245759112494313, + 0.2079927496612071, + 0.2079927496612071, + 0.05420222500000001, + 0.05420222500000001, + 0.0029606342049581648 + ], + "time": 13.566666666666666, + "rotation": [] + }, + { + "weights": [ + 0.03233992917729274, + 0.03233992917729274, + 0.02888475, + 0.014926525, + 0.014926525, + 0.03146187950457843, + 0.0005210778675973408, + 0.0005210778675973408, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.058808857841151065, + 0.058808857841151065, + 0.12314815244504376, + 0.12285668360335479, + 0.01392879320042473, + 0.12285668360335479, + 0.0071688670398933505, + 0.12464379434074668, + 0.12464379434074668, + 0.002676942392385429, + 0.002676942392385429, + 0.10963236891797604, + 0.042234401883823505, + 0.6695934508528024, + 0.6695934508528024, + 0.01727871956037623, + 0.01727871956037623, + 0.0062881568047617135, + 0.042234401883823505, + 0.0, + 0.02753267341426439, + 0.0, + 0.39603878855705243, + 0.425, + 0.425, + 0.004366013758948868, + 0.004366013758948868, + 0.20171049843941405, + 0.20171049843941405, + 0.05420222500000001, + 0.05420222500000001, + 0.0009952128465686516 + ], + "time": 13.6, + "rotation": [] + }, + { + "weights": [ + 0.02861699195844785, + 0.02861699195844785, + 0.02888475, + 0.014926525, + 0.014926525, + 0.05237284483654155, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05103507355919903, + 0.05103507355919903, + 0.10826043007629252, + 0.10345635020307127, + 0.007213156223297113, + 0.10345635020307127, + 0.005775991574461968, + 0.1746146956724779, + 0.1746146956724779, + 0.0013813696681920962, + 0.0013813696681920962, + 0.058648059942892586, + 0.053642352989741696, + 0.6372529302324564, + 0.6372529302324564, + 0.010843854770064347, + 0.010843854770064347, + 0.006001258541696836, + 0.053642352989741696, + 0.0, + 0.036459491135818596, + 0.0023771999137742173, + 0.39491470881870794, + 0.425, + 0.425, + 0.007974869039441853, + 0.007974869039441853, + 0.16575898070420528, + 0.16575898070420528, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 13.633333333333333, + "rotation": [] + }, + { + "weights": [ + 0.023307882329182954, + 0.023307882329182954, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0716968147882393, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.04644601435533589, + 0.04644601435533589, + 0.08129145779779974, + 0.07707802349967612, + 0.006332323168005256, + 0.07707802349967612, + 0.004909589979797599, + 0.2170521390225205, + 0.2170521390225205, + 0.0008730736388159642, + 0.0008730736388159642, + 0.026512284896203428, + 0.06611845392201623, + 0.5875596923487524, + 0.5875596923487524, + 0.004767955706587856, + 0.004767955706587856, + 0.00231664849977408, + 0.06611845392201623, + 0.0020350110850163865, + 0.05044479343507968, + 0.002979270581688199, + 0.3893184559685841, + 0.425, + 0.425, + 0.013078067893428455, + 0.013078067893428455, + 0.123021454204406, + 0.123021454204406, + 0.05420222500000001, + 0.05420222500000001, + 0.00023332179657050513 + ], + "time": 13.666666666666666, + "rotation": [] + }, + { + "weights": [ + 0.019803532479064793, + 0.019803532479064793, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0860065908304282, + 2.9992545023560544e-05, + 2.9992545023560544e-05, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.051646134470190286, + 0.051220360238637214, + 0.009782453434807907, + 0.051220360238637214, + 0.005376718632344686, + 0.25033213666507165, + 0.25033213666507165, + 0.0005834352171846795, + 0.0005834352171846795, + 0.009829432943037567, + 0.0775394635541098, + 0.5473336585930412, + 0.5473336585930412, + 0.0021728786772915276, + 0.0021728786772915276, + 0.0, + 0.0775394635541098, + 0.0035792783967086225, + 0.06504712424107956, + 0.0007339426449366974, + 0.39306900501251196, + 0.425, + 0.425, + 0.018378142352615073, + 0.018378142352615073, + 0.0855629113635846, + 0.0855629113635846, + 0.05420222500000001, + 0.05420222500000001, + 0.001058866509369441 + ], + "time": 13.7, + "rotation": [] + }, + { + "weights": [ + 0.018822018456246162, + 0.018822018456246162, + 0.02888475, + 0.014938946388148579, + 0.014938946388148579, + 0.09378155342170165, + 3.318049545799e-06, + 3.318049545799e-06, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.032462531746322076, + 0.018756267343248628, + 0.032462531746322076, + 0.005662124178239274, + 0.2755778455308504, + 0.2755778455308504, + 0.00011757943280307297, + 0.00011757943280307297, + 0.003482383808919358, + 0.08727842005235803, + 0.530931689909526, + 0.530931689909526, + 0.0003619413556797159, + 0.0003619413556797159, + 0.0, + 0.08727842005235803, + 0.004406811935561041, + 0.07532596332686284, + 0.0, + 0.403763174159186, + 0.43623753062316317, + 0.43623753062316317, + 0.022950189475502276, + 0.022950189475502276, + 0.05745246567364246, + 0.05745246567364246, + 0.05420222500000001, + 0.05420222500000001, + 0.0013005173099892473 + ], + "time": 13.733333333333333, + "rotation": [] + }, + { + "weights": [ + 0.01821351712569593, + 0.01821351712569593, + 0.02888475, + 0.01532369766971656, + 0.01532369766971656, + 0.09306313395500178, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.024566904900153362, + 0.0319905113322394, + 0.024566904900153362, + 0.005265165413064613, + 0.2903941982558794, + 0.2903941982558794, + 0.0, + 0.0, + 0.0008550082998616334, + 0.09151316402213909, + 0.5310794004372186, + 0.5310794004372186, + 8.505981947694492e-05, + 8.505981947694492e-05, + 0.0, + 0.09151316402213909, + 0.0054823163364614725, + 0.07999501228332515, + 0.0, + 0.40957110779626005, + 0.4746148096663609, + 0.4746148096663609, + 0.026025212790284823, + 0.026025212790284823, + 0.03812940384128262, + 0.03812940384128262, + 0.05420222500000001, + 0.05420222500000001, + 0.0011987718088286258 + ], + "time": 13.766666666666667, + "rotation": [] + }, + { + "weights": [ + 0.016583603088344834, + 0.016583603088344834, + 0.02888475, + 0.015249817765735897, + 0.015249817765735897, + 0.0826674249555383, + 5.938372175608132e-06, + 5.938372175608132e-06, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.020862539956436155, + 0.046235434157507735, + 0.020862539956436155, + 0.0038828547644828015, + 0.29390209359782066, + 0.29390209359782066, + 8.057792271886545e-05, + 8.057792271886545e-05, + 0.0021015611078057947, + 0.09226155845182278, + 0.5273839827094757, + 0.5273839827094757, + 8.15975346735546e-05, + 8.15975346735546e-05, + 0.0, + 0.09226155845182278, + 0.007090558963162554, + 0.08483388870954509, + 0.0005805924534797669, + 0.4126491137913293, + 0.47699088326522254, + 0.47699088326522254, + 0.027092828218426006, + 0.027092828218426006, + 0.02909938565322329, + 0.02909938565322329, + 0.05420222500000001, + 0.05420222500000001, + 0.0007617457104580742 + ], + "time": 13.8, + "rotation": [] + }, + { + "weights": [ + 0.014686655532568682, + 0.014686655532568682, + 0.02888475, + 0.015507909709340503, + 0.015507909709340503, + 0.06940163852913035, + 0.0006379032906677033, + 0.0006379032906677033, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.04611811111240045, + 0.04611811111240045, + 0.05126333, + 0.021783079758110384, + 0.05684766369206562, + 0.021783079758110384, + 0.005369880223380663, + 0.2917013066155568, + 0.2917013066155568, + 0.00036536838160827745, + 0.00036536838160827745, + 0.005119580881936205, + 0.09217396655252996, + 0.5110247262886589, + 0.5110247262886589, + 0.0, + 0.0, + 0.0014035543360348258, + 0.09217396655252996, + 0.009194011347634446, + 0.09390893386942994, + 0.00017592598284993832, + 0.4068782329559324, + 0.46175577512809185, + 0.46175577512809185, + 0.026444006647382445, + 0.026444006647382445, + 0.028102499299815703, + 0.028102499299815703, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 13.833333333333334, + "rotation": [] + }, + { + "weights": [ + 0.018961307539471547, + 0.018961307539471547, + 0.02888475, + 0.015774822661405973, + 0.015774822661405973, + 0.054410942324570215, + 0.004591362896774492, + 0.004591362896774492, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05143635517784524, + 0.05143635517784524, + 0.05126333, + 0.024412400693589617, + 0.0658285739592143, + 0.024412400693589617, + 0.009929778347057949, + 0.28580452757222297, + 0.28580452757222297, + 0.0004094234790786036, + 0.0004094234790786036, + 0.010870165058544696, + 0.09087579825094763, + 0.47910653097288924, + 0.47910653097288924, + 0.0, + 0.0, + 0.0, + 0.09087579825094763, + 0.013041011882679795, + 0.10256623753479542, + 0.0, + 0.38832351735659987, + 0.4502192305667057, + 0.4502192305667057, + 0.02477853019322666, + 0.02477853019322666, + 0.030189491143184033, + 0.030189491143184033, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 13.866666666666667, + "rotation": [] + }, + { + "weights": [ + 0.029045357887766174, + 0.029045357887766174, + 0.02888475, + 0.015572556640971727, + 0.015572556640971727, + 0.04211433721440176, + 0.012481347145512692, + 0.012481347145512692, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06061676309577052, + 0.06061676309577052, + 0.05126333, + 0.02679747467364004, + 0.07501496161733351, + 0.02679747467364004, + 0.016411348498825508, + 0.2755199545196123, + 0.2755199545196123, + 0.0, + 0.0, + 0.02241683070148739, + 0.08700569059167584, + 0.43992954577718435, + 0.43992954577718435, + 0.0001370844564267563, + 0.0001370844564267563, + 0.0010249281501663568, + 0.08700569059167584, + 0.020065993602786734, + 0.10513688623905175, + 0.0019696690142154676, + 0.3570598048823218, + 0.4437598296574181, + 0.4437598296574181, + 0.023925649906907747, + 0.023925649906907747, + 0.02890571637877394, + 0.02890571637877394, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 13.9, + "rotation": [] + }, + { + "weights": [ + 0.04674972717517187, + 0.04674972717517187, + 0.030477468908897458, + 0.015844092837952885, + 0.015844092837952885, + 0.03490368596145081, + 0.021973063843324772, + 0.021973063843324772, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.08508037339363775, + 0.08508037339363775, + 0.06545251373733788, + 0.06545251373733788, + 0.05126333, + 0.030499666689762037, + 0.08365247947829103, + 0.030499666689762037, + 0.022279484929250803, + 0.2617465366210254, + 0.2617465366210254, + 0.0, + 0.0, + 0.03811430739504949, + 0.08007220444934701, + 0.40848190230982606, + 0.40848190230982606, + 0.0015806709017072403, + 0.0015806709017072403, + 0.003856034982683401, + 0.08007220444934701, + 0.027416261179106553, + 0.10775573849678032, + 0.005074832588434217, + 0.3321553639003205, + 0.4355065707649499, + 0.4355065707649499, + 0.023738824171679346, + 0.023738824171679346, + 0.03228532459054672, + 0.03228532459054672, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 13.933333333333334, + "rotation": [] + }, + { + "weights": [ + 0.07154096871880547, + 0.07154096871880547, + 0.043550054808812466, + 0.016298495286828446, + 0.016298495286828446, + 0.03190294163567677, + 0.033704774081706995, + 0.033704774081706995, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.13291700423828187, + 0.13291700423828187, + 0.06812271720596716, + 0.06812271720596716, + 0.05126333, + 0.03735148451690162, + 0.09207879338945651, + 0.03735148451690162, + 0.028130671687956344, + 0.24399968151535278, + 0.24399968151535278, + 0.00011236227516617106, + 0.00011236227516617106, + 0.058627606289727345, + 0.0702938056417873, + 0.38026577149118646, + 0.38026577149118646, + 0.005871626042893957, + 0.005871626042893957, + 0.008676986469488055, + 0.0702938056417873, + 0.03586566767522264, + 0.10876437127590172, + 0.009611926972866053, + 0.309206994090761, + 0.42719338153089753, + 0.42719338153089753, + 0.02425012326666285, + 0.02425012326666285, + 0.0383029697196824, + 0.0383029697196824, + 0.05448448108165707, + 0.05448448108165707, + 0.0 + ], + "time": 13.966666666666667, + "rotation": [] + }, + { + "weights": [ + 0.06455646716362354, + 0.06455646716362354, + 0.039222637661384244, + 0.021357040140472752, + 0.021357040140472752, + 0.028882874494709908, + 0.029601609523496792, + 0.029601609523496792, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.11821717329342288, + 0.11821717329342288, + 0.06423453683502406, + 0.06423453683502406, + 0.05126333, + 0.03807173408137087, + 0.09068292419440067, + 0.03807173408137087, + 0.02457390577945741, + 0.24863262940628958, + 0.24863262940628958, + 0.0, + 0.0, + 0.051750084191155246, + 0.06563073421239234, + 0.3284853370477547, + 0.3284853370477547, + 0.004904561974868483, + 0.004904561974868483, + 0.008995894044225863, + 0.06563073421239234, + 0.035578746698340546, + 0.10306444695308083, + 0.009530070565995707, + 0.29927936933073, + 0.425, + 0.425, + 0.006389625530847068, + 0.006389625530847068, + 0.03263490263613406, + 0.03263490263613406, + 0.05710455500404064, + 0.05710455500404064, + 0.0 + ], + "time": 14.0, + "rotation": [] + }, + { + "weights": [ + 0.0513097983385835, + 0.0513097983385835, + 0.031241014564321126, + 0.019832406388886992, + 0.019832406388886992, + 0.028598641604185075, + 0.02258446214587559, + 0.02258446214587559, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.09190499223768701, + 0.09190499223768701, + 0.0576946264931133, + 0.0576946264931133, + 0.05126333, + 0.03534737426379736, + 0.0847953287192752, + 0.03534737426379736, + 0.01914276616603488, + 0.2528403011106306, + 0.2528403011106306, + 2.5271802785850686e-05, + 2.5271802785850686e-05, + 0.039276621100448404, + 0.06403753299798275, + 0.28663923722647433, + 0.28663923722647433, + 0.0031893974081391376, + 0.0031893974081391376, + 0.007537826696144676, + 0.06403753299798275, + 0.028753931217250332, + 0.09376552367494209, + 0.008069669384331922, + 0.298858397347586, + 0.425, + 0.425, + 0.008690070352384015, + 0.008690070352384015, + 0.025851001284484323, + 0.025851001284484323, + 0.05420222500000001, + 0.05420222500000001, + 5.422449182896383e-05 + ], + "time": 14.033333333333333, + "rotation": [] + }, + { + "weights": [ + 0.041479435449998256, + 0.041479435449998256, + 0.02888475, + 0.01846682574402775, + 0.01846682574402775, + 0.030559716746211024, + 0.017043916438706206, + 0.017043916438706206, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.07061879180504801, + 0.07061879180504801, + 0.04958187728854156, + 0.04958187728854156, + 0.05126333, + 0.03265811928583527, + 0.07869312618459966, + 0.03265811928583527, + 0.014690649301545409, + 0.25108627155423136, + 0.25108627155423136, + 0.00013729225538138828, + 0.00013729225538138828, + 0.028426187432238015, + 0.06379703722361998, + 0.26615254602261906, + 0.26615254602261906, + 0.0022693941901837074, + 0.0022693941901837074, + 0.005219436789463669, + 0.06379703722361998, + 0.020355920333947425, + 0.08466808029583514, + 0.006368752036775855, + 0.3107629397085731, + 0.425, + 0.425, + 0.011170943883912895, + 0.011170943883912895, + 0.021951398399791527, + 0.021951398399791527, + 0.05420222500000001, + 0.05420222500000001, + 0.00014172832348517006 + ], + "time": 14.066666666666666, + "rotation": [] + }, + { + "weights": [ + 0.03290688601721608, + 0.03290688601721608, + 0.02888475, + 0.017048710753808472, + 0.017048710753808472, + 0.03179258555173871, + 0.011450236270736363, + 0.011450236270736363, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.029909679024348535, + 0.073401398942584, + 0.029909679024348535, + 0.010506091732531773, + 0.2500841936894823, + 0.2500841936894823, + 0.00024379461378391289, + 0.00024379461378391289, + 0.0170135879090854, + 0.06372466286023451, + 0.2492526281092845, + 0.2492526281092845, + 0.0018050716214236756, + 0.0018050716214236756, + 0.002572132582731897, + 0.06372466286023451, + 0.018083196204333053, + 0.07879125184956043, + 0.004454926933561048, + 0.33253881193342627, + 0.425, + 0.425, + 0.01360355605965568, + 0.01360355605965568, + 0.0185500549640329, + 0.0185500549640329, + 0.05420222500000001, + 0.05420222500000001, + 8.671808810461131e-05 + ], + "time": 14.1, + "rotation": [] + }, + { + "weights": [ + 0.024324076062917286, + 0.024324076062917286, + 0.02888475, + 0.015366498341198546, + 0.015366498341198546, + 0.030108185075983687, + 0.005149230297566166, + 0.005149230297566166, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02818907101997336, + 0.06514886353210522, + 0.02818907101997336, + 0.006046530580810156, + 0.2502798527600812, + 0.2502798527600812, + 0.0002583958014554412, + 0.0002583958014554412, + 0.005245790653893732, + 0.06265196498103283, + 0.2089576299468269, + 0.2089576299468269, + 0.0014300144438435427, + 0.0014300144438435427, + 0.0009810447544936506, + 0.06265196498103283, + 0.024905186012184517, + 0.0744160483493691, + 0.0034479695948816448, + 0.3464139438567516, + 0.425, + 0.425, + 0.016000847783502258, + 0.016000847783502258, + 0.013465721383183981, + 0.013465721383183981, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 14.133333333333333, + "rotation": [] + }, + { + "weights": [ + 0.018595275821506357, + 0.018595275821506357, + 0.02888475, + 0.014926525, + 0.014926525, + 0.027084626969026044, + 0.0006792517804673724, + 0.0006792517804673724, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.028275554341677177, + 0.055728108466887916, + 0.028275554341677177, + 0.002960927437952888, + 0.245154056141571, + 0.245154056141571, + 0.00028652950994556325, + 0.00028652950994556325, + 0.0, + 0.060572005677588095, + 0.15997761442953218, + 0.15997761442953218, + 0.0010931445141227872, + 0.0010931445141227872, + 0.0008191709746891737, + 0.060572005677588095, + 0.036010055122326814, + 0.07095031925610129, + 0.003187142418963566, + 0.3388927698621943, + 0.425, + 0.425, + 0.017288627515885287, + 0.017288627515885287, + 0.00879528933793914, + 0.00879528933793914, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 14.166666666666666, + "rotation": [] + }, + { + "weights": [ + 0.015592919473099152, + 0.015592919473099152, + 0.02888475, + 0.014926525, + 0.014926525, + 0.02577527901499854, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02908860205366172, + 0.04799280089504862, + 0.02908860205366172, + 0.0021795945777082614, + 0.22704803465884543, + 0.22704803465884543, + 0.000435127202290281, + 0.000435127202290281, + 0.0, + 0.05772242164125245, + 0.13007712535712174, + 0.13007712535712174, + 0.0006954323705665913, + 0.0006954323705665913, + 0.001411685064454011, + 0.05772242164125245, + 0.04024750654946783, + 0.06578674978443551, + 0.0032435002071516837, + 0.30920885543433974, + 0.425, + 0.425, + 0.016668939783135227, + 0.016668939783135227, + 0.006417629115131432, + 0.006417629115131432, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 14.2, + "rotation": [] + }, + { + "weights": [ + 0.014007879234850397, + 0.014007879234850397, + 0.02888475, + 0.014926525, + 0.014926525, + 0.026099853962659823, + 5.533285439014436e-05, + 5.533285439014436e-05, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.029213158831888603, + 0.04393691888877321, + 0.029213158831888603, + 0.0027646297788513543, + 0.19429474536861682, + 0.19429474536861682, + 0.0007756917108781628, + 0.0007756917108781628, + 0.00048721645559583185, + 0.05468118792133669, + 0.13181403811488823, + 0.13181403811488823, + 0.0009614610246249599, + 0.0009614610246249599, + 0.001842896227857895, + 0.05468118792133669, + 0.031754557149750826, + 0.05612765800740035, + 0.003994764281170706, + 0.2583428493567874, + 0.425, + 0.425, + 0.01421143576502799, + 0.01421143576502799, + 0.005921307099717001, + 0.005921307099717001, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 14.233333333333333, + "rotation": [] + }, + { + "weights": [ + 0.010032328324658526, + 0.010032328324658526, + 0.02888475, + 0.014926525, + 0.014926525, + 0.02363115921616553, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.045151821366490624, + 0.045151821366490624, + 0.05126333, + 0.02773727741926329, + 0.04372449670519145, + 0.02773727741926329, + 0.002416674626458967, + 0.15186273317251878, + 0.15186273317251878, + 0.001236170149807417, + 0.001236170149807417, + 0.00954386304531778, + 0.0507743703467505, + 0.14777191770928239, + 0.14777191770928239, + 0.002104154229164122, + 0.002104154229164122, + 0.0018833337551248882, + 0.0507743703467505, + 0.016214028054050027, + 0.04030791031462803, + 0.00450866775853293, + 0.1798134227416344, + 0.425, + 0.425, + 0.010832499015544136, + 0.010832499015544136, + 0.004583791749817981, + 0.004583791749817981, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 14.266666666666667, + "rotation": [] + }, + { + "weights": [ + 0.005349177574472765, + 0.005349177574472765, + 0.02888475, + 0.016119362574089593, + 0.016119362574089593, + 0.018438049512250074, + 0.0006689638098967923, + 0.0006689638098967923, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.053016061495457345, + 0.053016061495457345, + 0.05126333, + 0.025915906623894144, + 0.05014370688370293, + 0.025915906623894144, + 0.002414024381765296, + 0.10851622340934611, + 0.10851622340934611, + 0.003937308532851078, + 0.003937308532851078, + 0.02049667430775505, + 0.04544035015361647, + 0.15870300180145663, + 0.15870300180145663, + 0.001887546799012588, + 0.001887546799012588, + 0.01087953167568359, + 0.04544035015361647, + 0.0025548086102519683, + 0.031203813797661212, + 0.0036269861672605748, + 0.09181467954601553, + 0.425, + 0.425, + 0.007053566942257536, + 0.007053566942257536, + 0.003715417321239197, + 0.003715417321239197, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 14.3, + "rotation": [] + }, + { + "weights": [ + 0.0010720977027501369, + 0.0010720977027501369, + 0.033111174191747375, + 0.018029805220150262, + 0.018029805220150262, + 0.014025822920458647, + 0.0021605456181402706, + 0.0021605456181402706, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06038709341415334, + 0.06038709341415334, + 0.05126333, + 0.025967996027676715, + 0.06530241404260904, + 0.025967996027676715, + 0.002948052209935016, + 0.06637236180582212, + 0.06637236180582212, + 0.016088684725442094, + 0.016088684725442094, + 0.025225502465452455, + 0.0425256906875542, + 0.13477415676627835, + 0.13477415676627835, + 0.010351659304329314, + 0.010351659304329314, + 0.034204336907714586, + 0.0425256906875542, + 0.0, + 0.03587509478841507, + 0.007467730662652414, + 0.02765103275222435, + 0.425, + 0.425, + 0.0038964747690728705, + 0.0038964747690728705, + 0.003041393549314565, + 0.003041393549314565, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 14.333333333333334, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.045484216245157354, + 0.019616235048129895, + 0.019616235048129895, + 0.010832608384745455, + 0.0029395795028124526, + 0.0029395795028124526, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06570190462682925, + 0.06570190462682925, + 0.05126333, + 0.02778242644756453, + 0.08211471779005863, + 0.02778242644756453, + 0.0035486251381891096, + 0.032973011795963535, + 0.032973011795963535, + 0.03763574822672774, + 0.03763574822672774, + 0.02007714988929884, + 0.04709283432790208, + 0.08245260055576048, + 0.08245260055576048, + 0.04452162661722725, + 0.04452162661722725, + 0.059525578522256414, + 0.04709283432790208, + 0.0, + 0.04755469597876069, + 0.02553653365799357, + 0.004408754408359517, + 0.425, + 0.425, + 0.0019421896551336548, + 0.0019421896551336548, + 0.0022711737746638895, + 0.0022711737746638895, + 0.05420222500000001, + 0.05420222500000001, + 0.0007691638810294012 + ], + "time": 14.366666666666667, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.05468766668013161, + 0.02032082160723822, + 0.02032082160723822, + 0.006705656966992783, + 0.0020223831824426122, + 0.0020223831824426122, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06937563105353284, + 0.06937563105353284, + 0.05126333, + 0.03011038009911196, + 0.09151807427406305, + 0.03011038009911196, + 0.0037261741501944385, + 0.0174360913091472, + 0.0174360913091472, + 0.05721542828849381, + 0.05721542828849381, + 0.01273889711924961, + 0.0547611944377422, + 0.03796537614294458, + 0.03796537614294458, + 0.10071685143879477, + 0.10071685143879477, + 0.06589721909591127, + 0.0547611944377422, + 0.0, + 0.05380006283521649, + 0.05752353583063395, + 0.002622409856745171, + 0.425, + 0.425, + 0.0011030911122049594, + 0.0011030911122049594, + 0.0016716272570192802, + 0.0016716272570192802, + 0.05420222500000001, + 0.05420222500000001, + 0.0013959020642297603 + ], + "time": 14.4, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.05895681604743001, + 0.020402722114449906, + 0.020402722114449906, + 0.0036181900118078475, + 0.00264050624599414, + 0.00264050624599414, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07417569181748795, + 0.07417569181748795, + 0.05126333, + 0.03191407774477617, + 0.09133430276598245, + 0.03191407774477617, + 0.0032549944905830262, + 0.03935466419373236, + 0.03935466419373236, + 0.058329463196652255, + 0.058329463196652255, + 0.007285345771483006, + 0.05432387648948599, + 0.019363026108060545, + 0.019363026108060545, + 0.13835787294166424, + 0.13835787294166424, + 0.04833699166774747, + 0.05432387648948599, + 0.0025181484541722692, + 0.06539055747645238, + 0.07804713057620181, + 0.004191282923732482, + 0.425, + 0.425, + 0.0010247247719338951, + 0.0010247247719338951, + 0.0022081822023860033, + 0.0022081822023860033, + 0.05420222500000001, + 0.05420222500000001, + 0.0014335521629878446 + ], + "time": 14.433333333333334, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.057706684512751405, + 0.01994724672874995, + 0.01994724672874995, + 0.004083602343286784, + 0.004389209506501042, + 0.004389209506501042, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07772623917886186, + 0.07772623917886186, + 0.05126333, + 0.03447295144502026, + 0.09331760065896165, + 0.03447295144502026, + 0.0027371326328388262, + 0.11019837337412997, + 0.11019837337412997, + 0.04129285191851001, + 0.04129285191851001, + 0.008634000590869353, + 0.03852394397503561, + 0.017078110682112815, + 0.017078110682112815, + 0.1162624004430004, + 0.1162624004430004, + 0.028121969157031586, + 0.03852394397503561, + 0.00996196546724864, + 0.08933353913681842, + 0.06491466004933627, + 0.005143543758562628, + 0.425, + 0.425, + 0.001998791944767746, + 0.001998791944767746, + 0.003920665276902061, + 0.003920665276902061, + 0.05420222500000001, + 0.05420222500000001, + 0.0012372705287167 + ], + "time": 14.466666666666667, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.05212305688432282, + 0.018522144535309246, + 0.018522144535309246, + 0.005241976252623964, + 0.0059601182051535135, + 0.0059601182051535135, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07652357891201969, + 0.07652357891201969, + 0.05126333, + 0.03886395820549554, + 0.1049418027060372, + 0.03886395820549554, + 0.002752326847985385, + 0.20589054386530592, + 0.20589054386530592, + 0.019844295922666774, + 0.019844295922666774, + 0.010120900613921024, + 0.019999160790549843, + 0.03071414338690892, + 0.03071414338690892, + 0.05658115808452875, + 0.05658115808452875, + 0.01511220741085707, + 0.019999160790549843, + 0.010511668132884155, + 0.10971332724605283, + 0.032438243925571424, + 0.011539295422179345, + 0.425, + 0.425, + 0.003949043080210683, + 0.003949043080210683, + 0.005038337728806902, + 0.005038337728806902, + 0.05420222500000001, + 0.05420222500000001, + 0.00030626199607338203 + ], + "time": 14.5, + "rotation": [] + }, + { + "weights": [ + 0.0011519671816911006, + 0.0011519671816911006, + 0.042220039399606814, + 0.016522158948989594, + 0.016522158948989594, + 0.004260047205856867, + 0.005881182723013415, + 0.005881182723013415, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07154702171683307, + 0.07154702171683307, + 0.05126333, + 0.043926258331962974, + 0.12142698832920612, + 0.043926258331962974, + 0.003737861237355639, + 0.2900657849652425, + 0.2900657849652425, + 0.006688144886866204, + 0.006688144886866204, + 0.009046124134744912, + 0.009962476031588648, + 0.05397729054093357, + 0.05397729054093357, + 0.011534058382468546, + 0.011534058382468546, + 0.009384764291878251, + 0.009962476031588648, + 0.008852118573018476, + 0.10777381977864668, + 0.010960718244314181, + 0.03135680620159419, + 0.425, + 0.425, + 0.007022238230066635, + 0.007022238230066635, + 0.004392146971076725, + 0.004392146971076725, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 14.533333333333333, + "rotation": [] + }, + { + "weights": [ + 0.0052087676046150035, + 0.0052087676046150035, + 0.031249637582472373, + 0.015252230263733181, + 0.015252230263733181, + 0.0017750810299600862, + 0.004485130196969422, + 0.004485130196969422, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0694016052143914, + 0.0694016052143914, + 0.05126333, + 0.04341631781842025, + 0.1354728722572326, + 0.04341631781842025, + 0.003906509872259836, + 0.354486258966582, + 0.354486258966582, + 0.0019382570620759235, + 0.0019382570620759235, + 0.004033079317637849, + 0.011187747187380272, + 0.06636100283690857, + 0.06636100283690857, + 0.0007591220417192952, + 0.0007591220417192952, + 0.0041388839416738035, + 0.011187747187380272, + 0.017235409468412385, + 0.09297000850949963, + 0.007017137003796435, + 0.0758333241300923, + 0.425, + 0.425, + 0.010321923467729765, + 0.010321923467729765, + 0.001488195772149732, + 0.001488195772149732, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 14.566666666666666, + "rotation": [] + }, + { + "weights": [ + 0.00937946446772132, + 0.00937946446772132, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0, + 0.0025013644115201047, + 0.0025013644115201047, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07157415215458185, + 0.07157415215458185, + 0.05126333, + 0.0381970162370375, + 0.15551708527973712, + 0.0381970162370375, + 0.003573914441013973, + 0.40629627619470843, + 0.40629627619470843, + 0.0005520981716524269, + 0.0005520981716524269, + 0.002552827234779084, + 0.01501235737066183, + 0.07046226922954826, + 0.07046226922954826, + 0.0007707189502460606, + 0.0007707189502460606, + 0.0018679822129862634, + 0.01501235737066183, + 0.03765648262841359, + 0.08633427619934077, + 0.006317346649510516, + 0.14809409113866934, + 0.425, + 0.425, + 0.013497545357261376, + 0.013497545357261376, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 14.6, + "rotation": [] + }, + { + "weights": [ + 0.013937960884400769, + 0.013937960884400769, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0, + 0.000901224750227161, + 0.000901224750227161, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07483264633587425, + 0.07483264633587425, + 0.05126333, + 0.034185281281848626, + 0.18712210859571174, + 0.034185281281848626, + 0.0023418811881648627, + 0.42333228460379985, + 0.42333228460379985, + 0.00014639728636081705, + 0.00014639728636081705, + 0.0016282845820699402, + 0.01889356562335575, + 0.10775210133620663, + 0.10775210133620663, + 0.0, + 0.0, + 0.0004319985995867416, + 0.01889356562335575, + 0.05354688891342706, + 0.09217285769326342, + 0.004295667686632698, + 0.24459324393953583, + 0.43383841855185346, + 0.43383841855185346, + 0.016327083366257794, + 0.016327083366257794, + 0.0009854586129741994, + 0.0009854586129741994, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 14.633333333333333, + "rotation": [] + }, + { + "weights": [ + 0.01899725329130887, + 0.01899725329130887, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0, + 6.571348224367399e-05, + 6.571348224367399e-05, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07591022646852898, + 0.07591022646852898, + 0.05126333, + 0.034556488152949455, + 0.21315771068845468, + 0.034556488152949455, + 0.0015153063727276657, + 0.4028221466711587, + 0.4028221466711587, + 0.0, + 0.0, + 0.00310796477964946, + 0.023635916518313527, + 0.18476959679807925, + 0.18476959679807925, + 0.0, + 0.0, + 0.0, + 0.023635916518313527, + 0.05890916181462149, + 0.10492852074759342, + 0.0015738192413534422, + 0.3471110544034411, + 0.433593599285398, + 0.433593599285398, + 0.018705583001886083, + 0.018705583001886083, + 0.005135363406900845, + 0.005135363406900845, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 14.666666666666666, + "rotation": [] + }, + { + "weights": [ + 0.021343536541930254, + 0.021343536541930254, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0, + 0.00036611395355846173, + 0.00036611395355846173, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07453237138688559, + 0.07453237138688559, + 0.05126333, + 0.040131262796265714, + 0.20134340218135283, + 0.040131262796265714, + 0.0005760694787438417, + 0.3678586112601414, + 0.3678586112601414, + 0.0, + 0.0, + 0.003969639646155491, + 0.03530318912650855, + 0.25157446318439064, + 0.25157446318439064, + 0.0, + 0.0, + 0.0009471934554832312, + 0.03530318912650855, + 0.055439701037747494, + 0.11097251325845713, + 0.0012132430715220302, + 0.4285788748945506, + 0.425, + 0.425, + 0.020163212248257217, + 0.020163212248257217, + 0.007689123973250383, + 0.007689123973250383, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 14.7, + "rotation": [] + }, + { + "weights": [ + 0.01845617555081843, + 0.01845617555081843, + 0.02888475, + 0.014926525, + 0.014926525, + 0.01119572509612355, + 0.0007409154304436267, + 0.0007409154304436267, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06943999789655206, + 0.06943999789655206, + 0.05126333, + 0.045550802988665415, + 0.14847864287240156, + 0.045550802988665415, + 0.0013455161292638084, + 0.33266661358731114, + 0.33266661358731114, + 0.0, + 0.0, + 0.0067263864512954385, + 0.05493800794439653, + 0.2784186099256787, + 0.2784186099256787, + 0.0, + 0.0, + 0.002714906592986411, + 0.05493800794439653, + 0.04515349492430684, + 0.1044330790638923, + 0.00304247343114444, + 0.4724869021347588, + 0.425, + 0.425, + 0.020472690633365077, + 0.020472690633365077, + 0.014417595176824491, + 0.014417595176824491, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 14.733333333333333, + "rotation": [] + }, + { + "weights": [ + 0.013271927567464956, + 0.013271927567464956, + 0.02888475, + 0.014926525, + 0.014926525, + 0.03386056040014537, + 0.002335479509617599, + 0.002335479509617599, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06260391149137698, + 0.06260391149137698, + 0.05126333, + 0.04547862516982212, + 0.0876340952941349, + 0.04547862516982212, + 0.0038145111674176765, + 0.28858065264565586, + 0.28858065264565586, + 0.0003643628366158475, + 0.0003643628366158475, + 0.013410723102944227, + 0.07212055101990696, + 0.29743196666240673, + 0.29743196666240673, + 0.0004013436181204657, + 0.0004013436181204657, + 0.006810063828847234, + 0.07212055101990696, + 0.030195376596280486, + 0.08919841285262783, + 0.005454920125859121, + 0.4781881145068575, + 0.425, + 0.425, + 0.019568616641419262, + 0.019568616641419262, + 0.029902252554893476, + 0.029902252554893476, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 14.766666666666667, + "rotation": [] + }, + { + "weights": [ + 0.014069764821657098, + 0.014069764821657098, + 0.02888475, + 0.014926525, + 0.014926525, + 0.055921800221715626, + 0.005382861942052836, + 0.005382861942052836, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.060812604586992905, + 0.060812604586992905, + 0.05126333, + 0.04052901307919193, + 0.052175186020987335, + 0.04052901307919193, + 0.008836148549536503, + 0.2364997674311909, + 0.2364997674311909, + 0.0007473203626328277, + 0.0007473203626328277, + 0.028112345135637675, + 0.07799920562122545, + 0.3443263999053408, + 0.3443263999053408, + 0.0010511893246855047, + 0.0010511893246855047, + 0.011972446846110471, + 0.07799920562122545, + 0.021320762591702583, + 0.07748651589666089, + 0.006453411706856315, + 0.45585845453398544, + 0.425, + 0.425, + 0.017923893226044506, + 0.017923893226044506, + 0.051249876857868235, + 0.051249876857868235, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 14.8, + "rotation": [] + }, + { + "weights": [ + 0.030306461080908752, + 0.030306461080908752, + 0.02888475, + 0.014926525, + 0.014926525, + 0.06091059169598985, + 0.012388821591490072, + 0.012388821591490072, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.07082204939797515, + 0.07082204939797515, + 0.07081048674881454, + 0.07081048674881454, + 0.05126333, + 0.03085566575505902, + 0.04458668572562079, + 0.03085566575505902, + 0.015362447486924264, + 0.1817590808229786, + 0.1817590808229786, + 0.0008942432428843204, + 0.0008942432428843204, + 0.05095025130680626, + 0.07350810154208111, + 0.3961227689470561, + 0.3961227689470561, + 0.0019036185794642979, + 0.0019036185794642979, + 0.018839633345071747, + 0.07350810154208111, + 0.02118739049349511, + 0.07007366738149094, + 0.009057509313736637, + 0.39974180204527693, + 0.425, + 0.425, + 0.0173625102000577, + 0.0173625102000577, + 0.0602199223690799, + 0.0602199223690799, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 14.833333333333334, + "rotation": [] + }, + { + "weights": [ + 0.06281396344836265, + 0.06281396344836265, + 0.041179262208087083, + 0.014926525, + 0.014926525, + 0.049482764410121075, + 0.024550304661637955, + 0.024550304661637955, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.14891340844333165, + 0.14891340844333165, + 0.088771892817957, + 0.088771892817957, + 0.05126333, + 0.02405119236860377, + 0.052276588167462994, + 0.02405119236860377, + 0.02540718609733239, + 0.1307445252048117, + 0.1307445252048117, + 0.0006074248334126808, + 0.0006074248334126808, + 0.08166349780346661, + 0.06530717185565399, + 0.42613079377583074, + 0.42613079377583074, + 0.0035247038517679467, + 0.0035247038517679467, + 0.02753742111048526, + 0.06530717185565399, + 0.0238763962473188, + 0.06676957117659701, + 0.014899401207055355, + 0.33063621052673864, + 0.425, + 0.425, + 0.01847797068102018, + 0.01847797068102018, + 0.057666234938161684, + 0.057666234938161684, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 14.866666666666667, + "rotation": [] + }, + { + "weights": [ + 0.09798262140580581, + 0.09798262140580581, + 0.059205280723316295, + 0.014926525, + 0.014926525, + 0.03499367960861749, + 0.03702121978359561, + 0.03702121978359561, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.22672587079661222, + 0.22672587079661222, + 0.10511798965079439, + 0.10511798965079439, + 0.0587887353130749, + 0.021831268357203004, + 0.07305883680071146, + 0.021831268357203004, + 0.03885203892631188, + 0.08973539093775403, + 0.08973539093775403, + 0.00046449380793741723, + 0.00046449380793741723, + 0.11509985114846905, + 0.05498144690479548, + 0.42907152388777026, + 0.42907152388777026, + 0.005795086521123133, + 0.005795086521123133, + 0.04583275318145749, + 0.05498144690479548, + 0.024567381505455274, + 0.07016006963593616, + 0.020068783472691254, + 0.2677143411976949, + 0.425, + 0.425, + 0.02102854243346622, + 0.02102854243346622, + 0.051319783500262645, + 0.051319783500262645, + 0.06148026014467749, + 0.06148026014467749, + 0.0 + ], + "time": 14.9, + "rotation": [] + }, + { + "weights": [ + 0.12303556885038097, + 0.12303556885038097, + 0.07338907351451256, + 0.014926525, + 0.014926525, + 0.02966292415346413, + 0.04472524619528224, + 0.04472524619528224, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.2777600365025654, + 0.2777600365025654, + 0.11285281234553873, + 0.11285281234553873, + 0.06603454755885255, + 0.02254412615937845, + 0.09360229270798813, + 0.02254412615937845, + 0.04816533641091412, + 0.06409662195614395, + 0.06409662195614395, + 0.0009207445236721207, + 0.0009207445236721207, + 0.1359558139528546, + 0.043228246590920824, + 0.42631095903260335, + 0.42631095903260335, + 0.009409461063998082, + 0.009409461063998082, + 0.06012452021241187, + 0.043228246590920824, + 0.02618852715407097, + 0.07588249125650945, + 0.02135307740952285, + 0.230750540750367, + 0.425, + 0.425, + 0.023359819012028816, + 0.023359819012028816, + 0.05054397710732049, + 0.05054397710732049, + 0.06704187497951404, + 0.06704187497951404, + 0.0019762440717646045 + ], + "time": 14.933333333333334, + "rotation": [] + }, + { + "weights": [ + 0.14122459494641842, + 0.14122459494641842, + 0.08568835955645351, + 0.014926525, + 0.014926525, + 0.030514149580682978, + 0.04889540648353949, + 0.04889540648353949, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.30898538189274893, + 0.30898538189274893, + 0.11385559854762883, + 0.11385559854762883, + 0.07026777874146181, + 0.02905262607548917, + 0.11794108118329723, + 0.02905262607548917, + 0.05545788263635971, + 0.052441844769886434, + 0.052441844769886434, + 0.0018582989940685887, + 0.0018582989940685887, + 0.14845280860151552, + 0.02981178026114185, + 0.41329034652028723, + 0.41329034652028723, + 0.014186570819999484, + 0.014186570819999484, + 0.07401867024600504, + 0.02981178026114185, + 0.028098472739968964, + 0.08530532462256286, + 0.01953775605985094, + 0.21490975150040204, + 0.425, + 0.425, + 0.02587522753647394, + 0.02587522753647394, + 0.05332992342965941, + 0.05332992342965941, + 0.07241271928484948, + 0.07241271928484948, + 0.005654248196099486 + ], + "time": 14.966666666666667, + "rotation": [] + }, + { + "weights": [ + 0.1220295327074419, + 0.1220295327074419, + 0.08318346734101664, + 0.020852775854449383, + 0.020852775854449383, + 0.024892447312571512, + 0.0416351587260395, + 0.0416351587260395, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.26502469581501126, + 0.26502469581501126, + 0.10897163314529407, + 0.10897163314529407, + 0.060259985393483324, + 0.03380291201171855, + 0.13989675652088748, + 0.03380291201171855, + 0.04798466337429745, + 0.057516794076607404, + 0.057516794076607404, + 0.002494298722242715, + 0.002494298722242715, + 0.12764080701383182, + 0.0309746240462068, + 0.3620562278684603, + 0.3620562278684603, + 0.013541147822678885, + 0.013541147822678885, + 0.06768374349921936, + 0.0309746240462068, + 0.03087874542896436, + 0.09041657375843333, + 0.016835020044628425, + 0.19534894587535412, + 0.425, + 0.425, + 0.004801176060082348, + 0.004801176060082348, + 0.0457652600052557, + 0.0457652600052557, + 0.06520979050591921, + 0.06520979050591921, + 0.005140075339194462 + ], + "time": 15.0, + "rotation": [] + }, + { + "weights": [ + 0.09440197565903255, + 0.09440197565903255, + 0.08379402639610418, + 0.019543200113446825, + 0.019543200113446825, + 0.01881182410177726, + 0.0321714620815501, + 0.0321714620815501, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.2080205862898199, + 0.2080205862898199, + 0.11025742888450608, + 0.11025742888450608, + 0.05126333, + 0.0357455680868823, + 0.15806384404500315, + 0.0357455680868823, + 0.03869944895129823, + 0.049360960846145836, + 0.049360960846145836, + 0.015601599710683011, + 0.015601599710683011, + 0.10209838669924495, + 0.05053336375526012, + 0.29076902021964346, + 0.29076902021964346, + 0.01416775562046538, + 0.01416775562046538, + 0.09643890453236437, + 0.05053336375526012, + 0.04142414984248929, + 0.10049208062035683, + 0.01735045622502052, + 0.1591030344721815, + 0.425, + 0.425, + 0.003984587859184964, + 0.003984587859184964, + 0.03574299868196246, + 0.03574299868196246, + 0.058375692111331375, + 0.058375692111331375, + 0.004080701991915701 + ], + "time": 15.033333333333333, + "rotation": [] + }, + { + "weights": [ + 0.06994585189968341, + 0.06994585189968341, + 0.09276876223406615, + 0.018407901937705445, + 0.018407901937705445, + 0.014680698141455617, + 0.023922818440145655, + 0.023922818440145655, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.15923907059643927, + 0.15923907059643927, + 0.11965086832642544, + 0.11965086832642544, + 0.05126333, + 0.041008950876338116, + 0.1753041274206978, + 0.041008950876338116, + 0.030352467551295205, + 0.030941297659384265, + 0.030941297659384265, + 0.046050553139033036, + 0.046050553139033036, + 0.07942198376570418, + 0.08523577837539562, + 0.21604853456041612, + 0.21604853456041612, + 0.020250996907374672, + 0.020250996907374672, + 0.18592311585588103, + 0.08523577837539562, + 0.06760894975491927, + 0.12375596612691867, + 0.022474530392459436, + 0.11314883301300648, + 0.425, + 0.425, + 0.003153225280344482, + 0.003153225280344482, + 0.026210052047723077, + 0.026210052047723077, + 0.05420222500000001, + 0.05420222500000001, + 0.0040391523790146615 + ], + "time": 15.066666666666666, + "rotation": [] + }, + { + "weights": [ + 0.046562514542823695, + 0.046562514542823695, + 0.10217382771273448, + 0.017149700687427064, + 0.017149700687427064, + 0.010174221793810504, + 0.016447667793060325, + 0.016447667793060325, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.10866414054873427, + 0.10866414054873427, + 0.13126693371505954, + 0.13126693371505954, + 0.05126333, + 0.04736661738937806, + 0.19755788167317692, + 0.04736661738937806, + 0.020671184811120204, + 0.018482101096638552, + 0.018482101096638552, + 0.08751818956949167, + 0.08751818956949167, + 0.05777776298068811, + 0.12578208804840124, + 0.1440437796392609, + 0.1440437796392609, + 0.026846193637521477, + 0.026846193637521477, + 0.3083501253277061, + 0.12578208804840124, + 0.10885395095461885, + 0.15745450059572844, + 0.023215848668700148, + 0.07227126423801686, + 0.425, + 0.425, + 0.0025132092432606765, + 0.0025132092432606765, + 0.01672858102247117, + 0.01672858102247117, + 0.05420222500000001, + 0.05420222500000001, + 0.004292034544050692 + ], + "time": 15.1, + "rotation": [] + }, + { + "weights": [ + 0.022119735285487684, + 0.022119735285487684, + 0.10101566640900911, + 0.015215858475597699, + 0.015215858475597699, + 0.004048620218119643, + 0.008238810582092769, + 0.008238810582092769, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.13710288670547552, + 0.13710288670547552, + 0.05126333, + 0.05375273879997581, + 0.2337123299261338, + 0.05375273879997581, + 0.010397842580002726, + 0.011582722873331907, + 0.011582722873331907, + 0.11517392695947563, + 0.11517392695947563, + 0.034884697587108895, + 0.15254327572375326, + 0.06640233634508577, + 0.06640233634508577, + 0.026981032514298436, + 0.026981032514298436, + 0.3760844838051567, + 0.15254327572375326, + 0.13570049619694952, + 0.16812624482273233, + 0.017152435201771392, + 0.030093795372819372, + 0.425, + 0.425, + 0.0014873027884585097, + 0.0014873027884585097, + 0.0071678959153795236, + 0.0071678959153795236, + 0.05420222500000001, + 0.05420222500000001, + 0.003743230102165619 + ], + "time": 15.133333333333333, + "rotation": [] + }, + { + "weights": [ + 0.006875903190550744, + 0.006875903190550744, + 0.08318005532786549, + 0.014926525, + 0.014926525, + 0.0018157788320463503, + 0.0025865025004866136, + 0.0025865025004866136, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.13010951073194027, + 0.13010951073194027, + 0.05126333, + 0.057023363765709226, + 0.26663158313595503, + 0.057023363765709226, + 0.004398629968909884, + 0.01739883973814392, + 0.01739883973814392, + 0.09615520759007452, + 0.09615520759007452, + 0.01903725068179927, + 0.13138966936390004, + 0.017501102720900424, + 0.017501102720900424, + 0.018945231486339947, + 0.018945231486339947, + 0.3033186547990354, + 0.13138966936390004, + 0.11784380890885172, + 0.1333897128397104, + 0.006882086657747924, + 0.006678487694993296, + 0.425, + 0.425, + 0.0006615347788346047, + 0.0006615347788346047, + 0.0005237459805699002, + 0.0005237459805699002, + 0.05420222500000001, + 0.05420222500000001, + 0.0033499400203629397 + ], + "time": 15.166666666666666, + "rotation": [] + }, + { + "weights": [ + 0.005940184247660997, + 0.005940184247660997, + 0.05636408276475811, + 0.014926525, + 0.014926525, + 0.0018844873959920833, + 0.0009013538951130231, + 0.0009013538951130231, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.11171616914473012, + 0.11171616914473012, + 0.05126333, + 0.05490936317994275, + 0.2770835718135443, + 0.05490936317994275, + 0.002179421081245704, + 0.06450159626803831, + 0.06450159626803831, + 0.04947157373026162, + 0.04947157373026162, + 0.011769159011998948, + 0.07406616556439165, + 0.009538025375531637, + 0.009538025375531637, + 0.008074622675396345, + 0.008074622675396345, + 0.15583924776209243, + 0.07406616556439165, + 0.08008372643468326, + 0.08680280352733569, + 0.0029071753335242344, + 0.007483637431750484, + 0.425, + 0.425, + 0.0013466173809249776, + 0.0013466173809249776, + 0.00015130958215770602, + 0.00015130958215770602, + 0.05420222500000001, + 0.05420222500000001, + 0.002998817329275971 + ], + "time": 15.2, + "rotation": [] + }, + { + "weights": [ + 0.014835711435547887, + 0.014835711435547887, + 0.031762085429259686, + 0.014926525, + 0.014926525, + 0.0032363577612808756, + 0.0020903902993138334, + 0.0020903902993138334, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.09242254176310125, + 0.09242254176310125, + 0.05126333, + 0.05106366340603144, + 0.2501300052234103, + 0.05106366340603144, + 0.00317803870753518, + 0.14586023568574863, + 0.14586023568574863, + 0.012290587985355924, + 0.012290587985355924, + 0.011783901602029793, + 0.023065362923911616, + 0.019051019953829892, + 0.019051019953829892, + 0.0011013722047209717, + 0.0011013722047209717, + 0.04606894283954581, + 0.023065362923911616, + 0.06277672307831897, + 0.059107690198080834, + 0.0029915892652102845, + 0.029649420082569107, + 0.425, + 0.425, + 0.0036740808774317992, + 0.0036740808774317992, + 0.003761220656867536, + 0.003761220656867536, + 0.05420222500000001, + 0.05420222500000001, + 0.0027657137651528616 + ], + "time": 15.233333333333333, + "rotation": [] + }, + { + "weights": [ + 0.01914491986057587, + 0.01914491986057587, + 0.02888475, + 0.014926525, + 0.014926525, + 0.004544859166656218, + 0.003957509415756377, + 0.003957509415756377, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07715477533638473, + 0.07715477533638473, + 0.05126333, + 0.04904745944908684, + 0.19410181897027143, + 0.04904745944908684, + 0.003396920434066225, + 0.23720777795783096, + 0.23720777795783096, + 0.003006459960181793, + 0.003006459960181793, + 0.010132254553692675, + 0.005714366851108405, + 0.012642834654876159, + 0.012642834654876159, + 0.0, + 0.0, + 0.01590425024873442, + 0.005714366851108405, + 0.07748161575623916, + 0.054494737301553964, + 0.007242869160005019, + 0.050572668654578046, + 0.425, + 0.425, + 0.006997792167322972, + 0.006997792167322972, + 0.006706195364573168, + 0.006706195364573168, + 0.05420222500000001, + 0.05420222500000001, + 0.0019136158483368999 + ], + "time": 15.266666666666667, + "rotation": [] + }, + { + "weights": [ + 0.020568247645028986, + 0.020568247645028986, + 0.02888475, + 0.014926525, + 0.014926525, + 0.005721688589879441, + 0.005264409372050844, + 0.005264409372050844, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0629903398454189, + 0.0629903398454189, + 0.05126333, + 0.04712129666336942, + 0.12446370806012828, + 0.04712129666336942, + 0.0036432482368711897, + 0.30313771430935166, + 0.30313771430935166, + 0.0009525712769079403, + 0.0009525712769079403, + 0.009680197175059994, + 0.0032863391297204103, + 0.00625030137598514, + 0.00625030137598514, + 0.0, + 0.0, + 0.006190966994368597, + 0.0032863391297204103, + 0.09490532491888314, + 0.0521378940769604, + 0.014581943196909758, + 0.06652460534657748, + 0.425, + 0.425, + 0.010394248424896165, + 0.010394248424896165, + 0.008432215345757344, + 0.008432215345757344, + 0.05420222500000001, + 0.05420222500000001, + 0.001426455192267894 + ], + "time": 15.3, + "rotation": [] + }, + { + "weights": [ + 0.021913884180997087, + 0.021913884180997087, + 0.02888475, + 0.014926525, + 0.014926525, + 0.005490258016756598, + 0.00558911678381264, + 0.00558911678381264, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.04852699067975791, + 0.04852699067975791, + 0.05126333, + 0.04350898233907561, + 0.06855344082627972, + 0.04350898233907561, + 0.0028519865441402137, + 0.3373669460415838, + 0.3373669460415838, + 0.0005257933507008206, + 0.0005257933507008206, + 0.010270104131528304, + 0.008799169425453451, + 0.008271312766841475, + 0.008271312766841475, + 0.0002751014594520841, + 0.0002751014594520841, + 0.0026763904174523664, + 0.008799169425453451, + 0.10442882009914937, + 0.05525401298488886, + 0.02509314779724392, + 0.07695003673434253, + 0.425, + 0.425, + 0.013690521333898812, + 0.013690521333898812, + 0.00919708982110023, + 0.00919708982110023, + 0.05420222500000001, + 0.05420222500000001, + 0.0008386171822037011 + ], + "time": 15.333333333333334, + "rotation": [] + }, + { + "weights": [ + 0.024490608647465693, + 0.024490608647465693, + 0.02888475, + 0.014926525, + 0.014926525, + 0.008879398341689784, + 0.005205244271616847, + 0.005205244271616847, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.0379932460508176, + 0.037124131407056504, + 0.0379932460508176, + 0.0017909508431330314, + 0.33562703728675825, + 0.33562703728675825, + 0.0005836234710711448, + 0.0005836234710711448, + 0.009864555192845202, + 0.020387732556888024, + 0.011236093778695371, + 0.011236093778695371, + 0.0003049032496554509, + 0.0003049032496554509, + 0.0022968268886740697, + 0.020387732556888024, + 0.10430841935532428, + 0.05559125500065937, + 0.04194065790091239, + 0.08538214777197152, + 0.425, + 0.425, + 0.016270587061132692, + 0.016270587061132692, + 0.008964168014270914, + 0.008964168014270914, + 0.05420222500000001, + 0.05420222500000001, + 0.0004012053832411763 + ], + "time": 15.366666666666667, + "rotation": [] + }, + { + "weights": [ + 0.024497149299298, + 0.024497149299298, + 0.02888475, + 0.014926525, + 0.014926525, + 0.017140035650559826, + 0.004497408328045689, + 0.004497408328045689, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.033486060843759935, + 0.02055443159171512, + 0.033486060843759935, + 0.00037079806871978267, + 0.31420710235834104, + 0.31420710235834104, + 0.0011711175819592808, + 0.0011711175819592808, + 0.0074557054255689845, + 0.03263187478961688, + 0.011844627186655993, + 0.011844627186655993, + 0.0003606313573462618, + 0.0003606313573462618, + 0.0035751170212669006, + 0.03263187478961688, + 0.1003954961895942, + 0.0543967470526695, + 0.06333969352500776, + 0.08857111824410298, + 0.425, + 0.425, + 0.018045256521020604, + 0.018045256521020604, + 0.007479503218616754, + 0.007479503218616754, + 0.05420222500000001, + 0.05420222500000001, + 0.00016976507114512554 + ], + "time": 15.4, + "rotation": [] + }, + { + "weights": [ + 0.022713169774838844, + 0.022713169774838844, + 0.02888475, + 0.014926525, + 0.014926525, + 0.02387479490467479, + 0.0033043007033744004, + 0.0033043007033744004, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03241655905633585, + 0.009777522683143608, + 0.03241655905633585, + 0.0, + 0.2829258458954946, + 0.2829258458954946, + 0.0020844255670505957, + 0.0020844255670505957, + 0.005125089415482109, + 0.040203772751348336, + 0.0120808791901384, + 0.0120808791901384, + 0.0014706837279455994, + 0.0014706837279455994, + 0.00537525537157697, + 0.040203772751348336, + 0.09325215071439738, + 0.049728045240044566, + 0.0829975449613162, + 0.08003314861229484, + 0.425, + 0.425, + 0.0186680202611855, + 0.0186680202611855, + 0.005878397250281909, + 0.005878397250281909, + 0.05420222500000001, + 0.05420222500000001, + 0.0004372366571000641 + ], + "time": 15.433333333333334, + "rotation": [] + }, + { + "weights": [ + 0.020733931234904683, + 0.020733931234904683, + 0.02888475, + 0.014926525, + 0.014926525, + 0.025930535154683236, + 0.0030336876200245944, + 0.0030336876200245944, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03176429952131271, + 0.002221729244504654, + 0.03176429952131271, + 0.0, + 0.2475523452673638, + 0.2475523452673638, + 0.0038158476698611442, + 0.0038158476698611442, + 0.004060497134923932, + 0.043380651623010615, + 0.012003092042037412, + 0.012003092042037412, + 0.00263861949954714, + 0.00263861949954714, + 0.006639110137309344, + 0.043380651623010615, + 0.0810257317764418, + 0.040200298439179126, + 0.09407078794070647, + 0.063171902511801, + 0.425, + 0.425, + 0.01805485563618795, + 0.01805485563618795, + 0.0039047306004379454, + 0.0039047306004379454, + 0.05420222500000001, + 0.05420222500000001, + 0.0009697663730808663 + ], + "time": 15.466666666666667, + "rotation": [] + }, + { + "weights": [ + 0.01983736841274158, + 0.01983736841274158, + 0.02888475, + 0.014926525, + 0.014926525, + 0.02422788536974361, + 0.002929148244272384, + 0.002929148244272384, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03115605918726171, + 0.0, + 0.03115605918726171, + 0.0002600933791005183, + 0.21328571098191385, + 0.21328571098191385, + 0.006789907190416536, + 0.006789907190416536, + 0.0038977204688957733, + 0.04358834294336181, + 0.010633285716176027, + 0.010633285716176027, + 0.0026199171053511742, + 0.0026199171053511742, + 0.006461997343493357, + 0.04358834294336181, + 0.06451419357742579, + 0.025898539381367804, + 0.10145477609974993, + 0.04322466435176983, + 0.425, + 0.425, + 0.01659747681447437, + 0.01659747681447437, + 0.00237344643101096, + 0.00237344643101096, + 0.05420222500000001, + 0.05420222500000001, + 0.001096053128795964 + ], + "time": 15.5, + "rotation": [] + }, + { + "weights": [ + 0.018185355248195777, + 0.018185355248195777, + 0.02888475, + 0.014926525, + 0.014926525, + 0.021658422478607713, + 0.0022079088525580495, + 0.0022079088525580495, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03075977829187529, + 0.0, + 0.03075977829187529, + 0.0014700869264613298, + 0.1965492012671061, + 0.1965492012671061, + 0.011628230393997255, + 0.011628230393997255, + 0.0043424783434186645, + 0.04325120540601864, + 0.009434132884655676, + 0.009434132884655676, + 0.0012077633185046052, + 0.0012077633185046052, + 0.003660222943872211, + 0.04325120540601864, + 0.04928597437483921, + 0.011336980855890674, + 0.11255011967250272, + 0.026850975751876813, + 0.425, + 0.425, + 0.015858672508171617, + 0.015858672508171617, + 0.001155065798333712, + 0.001155065798333712, + 0.05420222500000001, + 0.05420222500000001, + 0.0007084145875913753 + ], + "time": 15.533333333333333, + "rotation": [] + }, + { + "weights": [ + 0.016476590824978682, + 0.016476590824978682, + 0.02888475, + 0.014926525, + 0.014926525, + 0.018777557888201294, + 0.0015109135436692398, + 0.0015109135436692398, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03058650556721278, + 0.0, + 0.03058650556721278, + 0.0023620314496968463, + 0.13457251719066066, + 0.13457251719066066, + 0.010580558515020775, + 0.010580558515020775, + 0.002973380940301076, + 0.029755234047770484, + 0.006411706922309735, + 0.006411706922309735, + 5.987510085105882e-05, + 5.987510085105882e-05, + 0.0008443307131528845, + 0.029755234047770484, + 0.02815837779215402, + 0.002111585863998955, + 0.08413755152906685, + 0.012593516622270847, + 0.425, + 0.425, + 0.010965586828333984, + 0.010965586828333984, + 0.0006517567884709147, + 0.0006517567884709147, + 0.05420222500000001, + 0.05420222500000001, + 1.966407788651332e-05 + ], + "time": 15.566666666666666, + "rotation": [] + }, + { + "weights": [ + 0.015553082126591879, + 0.015553082126591879, + 0.02888475, + 0.014926525, + 0.014926525, + 0.015894384362867893, + 0.001092317467555403, + 0.001092317467555403, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.0301954617913648, + 0.0, + 0.0301954617913648, + 0.0023056464070188134, + 0.06466650332723341, + 0.06466650332723341, + 0.006362995260528153, + 0.006362995260528153, + 0.0010754431784152979, + 0.013107843271323603, + 0.003205725454858369, + 0.003205725454858369, + 0.0, + 0.0, + 0.0, + 0.013107843271323603, + 0.010863266629832122, + 0.0, + 0.04178814470767972, + 0.0038433586486748246, + 0.425, + 0.425, + 0.005182034151894702, + 0.005182034151894702, + 0.000852228099746363, + 0.000852228099746363, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 15.6, + "rotation": [] + }, + { + "weights": [ + 0.015972526877054135, + 0.015972526877054135, + 0.02888475, + 0.014926525, + 0.014926525, + 0.013497385808399737, + 0.0009059088105069734, + 0.0009059088105069734, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02951761137463637, + 0.0, + 0.02951761137463637, + 0.0015699751009898518, + 0.019382522744791818, + 0.019382522744791818, + 0.002594096601009366, + 0.002594096601009366, + 0.0, + 0.0024057115933724758, + 0.0009578048650707504, + 0.0009578048650707504, + 0.0, + 0.0, + 0.0, + 0.0024057115933724758, + 0.0019482736289501146, + 0.0, + 0.012205545348780478, + 0.0004934268551213383, + 0.425, + 0.425, + 0.0013720943714891141, + 0.0013720943714891141, + 0.0010066312977245868, + 0.0010066312977245868, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 15.633333333333333, + "rotation": [] + }, + { + "weights": [ + 0.017761655896902075, + 0.017761655896902075, + 0.02888475, + 0.014926525, + 0.014926525, + 0.012396319849150513, + 0.000896697311795183, + 0.000896697311795183, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02877563194806507, + 0.0, + 0.02877563194806507, + 0.0009052389767020934, + 0.030667040731225677, + 0.030667040731225677, + 0.0036554980405739354, + 0.0036554980405739354, + 0.0002590942595686229, + 0.004175233521631783, + 0.0016766541451215733, + 0.0016766541451215733, + 0.0, + 0.0, + 0.0, + 0.004175233521631783, + 0.004008958211966921, + 0.0, + 0.018769008985587518, + 0.0018919950297900598, + 0.425, + 0.425, + 0.0022291360071727195, + 0.0022291360071727195, + 0.0014550866692193908, + 0.0014550866692193908, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 15.666666666666666, + "rotation": [] + }, + { + "weights": [ + 0.020299090870789106, + 0.020299090870789106, + 0.02888475, + 0.014926525, + 0.014926525, + 0.012147075576441622, + 0.0011605385092220129, + 0.0011605385092220129, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.028453965477469305, + 0.0, + 0.028453965477469305, + 0.000772375593494091, + 0.030395702506814667, + 0.030395702506814667, + 0.0037074566866670314, + 0.0037074566866670314, + 0.0006231629209859026, + 0.003782965711184908, + 0.0019785543744053145, + 0.0019785543744053145, + 9.544257606778826e-06, + 9.544257606778826e-06, + 0.0, + 0.003782965711184908, + 0.003951879186289649, + 0.0, + 0.018380588335650296, + 0.002320464381149835, + 0.425, + 0.425, + 0.002176856658288409, + 0.002176856658288409, + 0.0016644013140882756, + 0.0016644013140882756, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 15.7, + "rotation": [] + }, + { + "weights": [ + 0.021544894522854248, + 0.021544894522854248, + 0.02888475, + 0.014926525, + 0.014926525, + 0.012577681456293371, + 0.0014556889089622658, + 0.0014556889089622658, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.028536553300741056, + 0.0, + 0.028536553300741056, + 0.0013261195006115086, + 0.0298426825233868, + 0.0298426825233868, + 0.003722296076161519, + 0.003722296076161519, + 0.0011520883440971367, + 0.0038216511585882707, + 0.0022248750925064073, + 0.0022248750925064073, + 2.8547186936650946e-05, + 2.8547186936650946e-05, + 7.963512092828737e-05, + 0.0038216511585882707, + 0.004025385358503884, + 0.0, + 0.018526627761977048, + 0.002880625001021792, + 0.425, + 0.425, + 0.0021304491290024337, + 0.0021304491290024337, + 0.0016054159615721013, + 0.0016054159615721013, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 15.733333333333333, + "rotation": [] + }, + { + "weights": [ + 0.02186128252318926, + 0.02186128252318926, + 0.02888475, + 0.014926525, + 0.014926525, + 0.01390474896345819, + 0.0018852596038154172, + 0.0018852596038154172, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.028752304818837296, + 0.00016544236455644853, + 0.028752304818837296, + 0.0024134115914681113, + 0.029462640157767686, + 0.029462640157767686, + 0.0035964026621409808, + 0.0035964026621409808, + 0.0017631817076887392, + 0.004043415835393325, + 0.0024925782531499845, + 0.0024925782531499845, + 4.878544381686566e-06, + 4.878544381686566e-06, + 0.0006600326153316663, + 0.004043415835393325, + 0.004258529969624107, + 0.0005399871404681883, + 0.01912068371261868, + 0.004054382209266932, + 0.425, + 0.425, + 0.002117279980863842, + 0.002117279980863842, + 0.001433431687099592, + 0.001433431687099592, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 15.766666666666667, + "rotation": [] + }, + { + "weights": [ + 0.027171400375664213, + 0.027171400375664213, + 0.02888475, + 0.014926525, + 0.014926525, + 0.015969702494995925, + 0.005226005121533355, + 0.005226005121533355, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02883095139141014, + 0.0010809282234736845, + 0.02883095139141014, + 0.003143963816442658, + 0.03038855586733135, + 0.03038855586733135, + 0.003308463143450871, + 0.003308463143450871, + 0.0024719769614083413, + 0.0038791108317673185, + 0.0035048392840794132, + 0.0035048392840794132, + 0.0001737756069217407, + 0.0001737756069217407, + 0.0015957389878375181, + 0.0038791108317673185, + 0.005051755628415514, + 0.0017643297889402922, + 0.019471601673534927, + 0.006088999403374532, + 0.425, + 0.425, + 0.0022894368512289846, + 0.0022894368512289846, + 0.0019377072900533662, + 0.0019377072900533662, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 15.8, + "rotation": [] + }, + { + "weights": [ + 0.04145337053175481, + 0.04145337053175481, + 0.02888475, + 0.014926525, + 0.014926525, + 0.020402779323714107, + 0.0137309634592384, + 0.0137309634592384, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02838346542293957, + 0.0019377617665699539, + 0.02838346542293957, + 0.003439225609015139, + 0.03283071471112113, + 0.03283071471112113, + 0.0027833595957074833, + 0.0027833595957074833, + 0.003157527670264242, + 0.003522274728332245, + 0.0061510301168475785, + 0.0061510301168475785, + 0.0009163990670016827, + 0.0009163990670016827, + 0.0027094032761773874, + 0.003522274728332245, + 0.006699420192411963, + 0.0031296471080609714, + 0.018806584051677146, + 0.008949449104922153, + 0.425, + 0.425, + 0.002678077438047952, + 0.002678077438047952, + 0.003301973497228961, + 0.003301973497228961, + 0.05420222500000001, + 0.05420222500000001, + 0.00169685807611261 + ], + "time": 15.833333333333334, + "rotation": [] + }, + { + "weights": [ + 0.062054247675197426, + 0.062054247675197426, + 0.02888475, + 0.014926525, + 0.014926525, + 0.024963714288813714, + 0.02778537528190228, + 0.02778537528190228, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.06363988319145779, + 0.06363988319145779, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.0262838598264483, + 0.002401226622717719, + 0.0262838598264483, + 0.005048564888004743, + 0.036387906670570354, + 0.036387906670570354, + 0.0021185950349484157, + 0.0021185950349484157, + 0.004157965523856024, + 0.003535153203244718, + 0.010424543746880115, + 0.010424543746880115, + 0.002177951319941452, + 0.002177951319941452, + 0.0039224981995565535, + 0.003535153203244718, + 0.008353461474180217, + 0.004490858571869984, + 0.017512197835104795, + 0.014823170006275166, + 0.425, + 0.425, + 0.003118408164807727, + 0.003118408164807727, + 0.004990825099604468, + 0.004990825099604468, + 0.05420222500000001, + 0.05420222500000001, + 0.0038754411840013075 + ], + "time": 15.866666666666667, + "rotation": [] + }, + { + "weights": [ + 0.07961813285946842, + 0.07961813285946842, + 0.030097258676375645, + 0.014926525, + 0.014926525, + 0.02991874707596641, + 0.041147291048296834, + 0.041147291048296834, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.09179960710129563, + 0.09179960710129563, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.024346054790099346, + 0.0034875383547374166, + 0.024346054790099346, + 0.00786373229431254, + 0.038758961473192466, + 0.038758961473192466, + 0.001264592348997081, + 0.001264592348997081, + 0.0055291043754134815, + 0.004669179969600266, + 0.017732685442481712, + 0.017732685442481712, + 0.0029985732851283875, + 0.0029985732851283875, + 0.00397868214441197, + 0.004669179969600266, + 0.008227999508380886, + 0.00687862746417522, + 0.014415789140122268, + 0.02430469338382992, + 0.425, + 0.425, + 0.003572114944458006, + 0.003572114944458006, + 0.006406133999781946, + 0.006406133999781946, + 0.05872068493948765, + 0.05872068493948765, + 0.00436464872743402 + ], + "time": 15.9, + "rotation": [] + }, + { + "weights": [ + 0.09075713381171219, + 0.09075713381171219, + 0.03510002839778147, + 0.014926525, + 0.014926525, + 0.03320744803973605, + 0.04974863899073427, + 0.04974863899073427, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.1055083018594554, + 0.1055083018594554, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.023040446445169782, + 0.004769159027508323, + 0.023040446445169782, + 0.011109037165130885, + 0.038957538264138315, + 0.038957538264138315, + 0.0006911997736564694, + 0.0006911997736564694, + 0.007451021288122443, + 0.005014427386756452, + 0.024535418344395488, + 0.024535418344395488, + 0.003363618398351327, + 0.003363618398351327, + 0.004564883309815607, + 0.005014427386756452, + 0.007386008203029627, + 0.009128023907542224, + 0.011675471982785627, + 0.030570155254432116, + 0.425, + 0.425, + 0.003938751488924023, + 0.003938751488924023, + 0.0074794075478400454, + 0.0074794075478400454, + 0.06374431910714182, + 0.06374431910714182, + 0.0022571136642779537 + ], + "time": 15.933333333333334, + "rotation": [] + }, + { + "weights": [ + 0.09646336138248432, + 0.09646336138248432, + 0.04174038038722101, + 0.014926525, + 0.014926525, + 0.03528484957558763, + 0.054723640211990866, + 0.054723640211990866, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.10754619615950745, + 0.10754619615950745, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.022269150367628842, + 0.006404249889510014, + 0.022269150367628842, + 0.014934405724384953, + 0.03728585519960942, + 0.03728585519960942, + 0.00027657771908811015, + 0.00027657771908811015, + 0.009886117375322745, + 0.005061477462628054, + 0.03181365198322703, + 0.03181365198322703, + 0.003271577815924369, + 0.003271577815924369, + 0.005232942567339961, + 0.005061477462628054, + 0.0055341160297393745, + 0.011594910621643058, + 0.008689690338713776, + 0.035496082561356654, + 0.425, + 0.425, + 0.004253068715333935, + 0.004253068715333935, + 0.00826076279793466, + 0.00826076279793466, + 0.06669892092291047, + 0.06669892092291047, + 0.0 + ], + "time": 15.966666666666667, + "rotation": [] + }, + { + "weights": [ + 0.08304322059221905, + 0.08304322059221905, + 0.04423919462174373, + 0.020682682957757992, + 0.020682682957757992, + 0.030060049309110094, + 0.04706627505128172, + 0.04706627505128172, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.09182540309862505, + 0.09182540309862505, + 0.04692448955613665, + 0.04692448955613665, + 0.05126333, + 0.029034776881654102, + 0.002848681529784683, + 0.029034776881654102, + 0.013797615019408153, + 0.003958460520157171, + 0.003958460520157171, + 0.0, + 0.0, + 0.0017895670380316607, + 0.0006336969949178333, + 0.00726660362813545, + 0.00726660362813545, + 0.0, + 0.0, + 0.0007353142501469556, + 0.0006336969949178333, + 0.00010369577407836478, + 0.0, + 0.0, + 0.009478235394107231, + 0.425, + 0.425, + 0.00012988820977437998, + 0.00012988820977437998, + 0.001379943341592033, + 0.001379943341592033, + 0.06277571764044823, + 0.06277571764044823, + 0.0 + ], + "time": 16.0, + "rotation": [] + }, + { + "weights": [ + 0.0644212704240565, + 0.0644212704240565, + 0.04621396089593564, + 0.020057004888355615, + 0.020057004888355615, + 0.02419404745811503, + 0.03708315660423107, + 0.03708315660423107, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.07417450912208064, + 0.07417450912208064, + 0.04807980834717453, + 0.04807980834717453, + 0.05126333, + 0.029329457576196184, + 0.017707071833383457, + 0.029329457576196184, + 0.011441399852213041, + 0.04663790621927802, + 0.04663790621927802, + 0.0011318863032545332, + 0.0011318863032545332, + 0.0014543867097014452, + 0.0011419668376800541, + 0.008901000515336075, + 0.008901000515336075, + 0.0010617629921152443, + 0.0010617629921152443, + 0.0023923405753005092, + 0.0011419668376800541, + 0.008322544234139572, + 0.021743692318598407, + 0.005075995405515022, + 0.011192318737506857, + 0.425, + 0.425, + 0.0016549715936183917, + 0.0016549715936183917, + 0.00131005860421629, + 0.00131005860421629, + 0.056979448219527724, + 0.056979448219527724, + 0.00028075948357582077 + ], + "time": 16.033333333333335, + "rotation": [] + }, + { + "weights": [ + 0.046953060930328624, + 0.046953060930328624, + 0.04925553125462357, + 0.020706727012224875, + 0.020706727012224875, + 0.019595385129962613, + 0.02805737169525982, + 0.02805737169525982, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05970066338777534, + 0.05970066338777534, + 0.05130069616907866, + 0.05130069616907866, + 0.05126333, + 0.030732715060448213, + 0.036842803296021034, + 0.030732715060448213, + 0.008634794677241833, + 0.1149661773017474, + 0.1149661773017474, + 0.009402782496203261, + 0.009402782496203261, + 0.002191163875162598, + 0.0035399146191775763, + 0.007800514215869556, + 0.007800514215869556, + 0.008773647085364367, + 0.008773647085364367, + 0.0066769146331186755, + 0.0035399146191775763, + 0.024521642855235493, + 0.06889506160361422, + 0.041466967012201, + 0.008206978863903447, + 0.425, + 0.425, + 0.0036604348403002514, + 0.0036604348403002514, + 0.00132687107393784, + 0.00132687107393784, + 0.05420222500000001, + 0.05420222500000001, + 0.0005749654823115891 + ], + "time": 16.066666666666666, + "rotation": [] + }, + { + "weights": [ + 0.029753942503815547, + 0.029753942503815547, + 0.054016244322771065, + 0.021995561004066917, + 0.021995561004066917, + 0.014751951112633633, + 0.018739629217556522, + 0.018739629217556522, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05729176005964071, + 0.05729176005964071, + 0.05126333, + 0.03359107572493842, + 0.054810072277841085, + 0.03359107572493842, + 0.0052334323414557, + 0.1758555595931552, + 0.1758555595931552, + 0.024990999764722004, + 0.024990999764722004, + 0.006214630894008132, + 0.008914656867938376, + 0.007631558968907305, + 0.007631558968907305, + 0.028230634256487787, + 0.028230634256487787, + 0.011922009366254005, + 0.008914656867938376, + 0.044715513243561676, + 0.12350957296575812, + 0.11662193598207968, + 0.0049756022422086585, + 0.425, + 0.425, + 0.004901989334608825, + 0.004901989334608825, + 0.0017785412064265623, + 0.0017785412064265623, + 0.05420222500000001, + 0.05420222500000001, + 0.0008504360914230343 + ], + "time": 16.1, + "rotation": [] + }, + { + "weights": [ + 0.01118830210573614, + 0.01118830210573614, + 0.06146631275208624, + 0.022802743861167766, + 0.022802743861167766, + 0.010648769724632592, + 0.00796943515463142, + 0.00796943515463142, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06501177121417634, + 0.06501177121417634, + 0.05126333, + 0.03981755234970477, + 0.07117003880675954, + 0.03981755234970477, + 0.0016569994958070065, + 0.2092454884995002, + 0.2092454884995002, + 0.040324769778987156, + 0.040324769778987156, + 0.01267871717123352, + 0.015268943329183313, + 0.0062482764932675385, + 0.0062482764932675385, + 0.043967223081210614, + 0.043967223081210614, + 0.015354206943005112, + 0.015268943329183313, + 0.06809392104801673, + 0.16866222387211655, + 0.19325947843717062, + 0.0, + 0.425, + 0.425, + 0.004600167615662016, + 0.004600167615662016, + 0.001901214903271217, + 0.001901214903271217, + 0.05420222500000001, + 0.05420222500000001, + 0.0004096775271353265 + ], + "time": 16.133333333333333, + "rotation": [] + }, + { + "weights": [ + 3.0485774789534414e-05, + 3.0485774789534414e-05, + 0.06681248077780613, + 0.021669126118678363, + 0.021669126118678363, + 0.00916478162213247, + 0.002298954757956824, + 0.002298954757956824, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07225114194364107, + 0.07225114194364107, + 0.05126333, + 0.04662537708172487, + 0.10859077061370921, + 0.04662537708172487, + 0.002003087350642497, + 0.26804763729110037, + 0.26804763729110037, + 0.041820838177911455, + 0.041820838177911455, + 0.014553975727424322, + 0.018199151209118407, + 0.0030612625645131423, + 0.0030612625645131423, + 0.04213008766159109, + 0.04213008766159109, + 0.018203623056928714, + 0.018199151209118407, + 0.09189609423194608, + 0.20632440543855932, + 0.18499994961254443, + 0.0, + 0.425, + 0.425, + 0.004495686093355925, + 0.004495686093355925, + 0.0021575778271166633, + 0.0021575778271166633, + 0.05420222500000001, + 0.05420222500000001, + 9.1776464666639e-05 + ], + "time": 16.166666666666668, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.06665449919217092, + 0.01924410131030423, + 0.01924410131030423, + 0.009009059322427727, + 0.0020981829962217974, + 0.0020981829962217974, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07658736353497038, + 0.07658736353497038, + 0.05126333, + 0.0499589362562944, + 0.16988249055254206, + 0.0499589362562944, + 0.0037173581412014507, + 0.33508260233548204, + 0.33508260233548204, + 0.02766328372696436, + 0.02766328372696436, + 0.013089828731484551, + 0.013290740988502386, + 0.0068813804837513795, + 0.0068813804837513795, + 0.022960291749847164, + 0.022960291749847164, + 0.017519605055192893, + 0.013290740988502386, + 0.0959340656127248, + 0.21826874161277487, + 0.10186592584221942, + 0.008167432385804686, + 0.425, + 0.425, + 0.005100426507443186, + 0.005100426507443186, + 0.0038622405871900954, + 0.0038622405871900954, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 16.2, + "rotation": [] + }, + { + "weights": [ + 0.0015827535784670266, + 0.0015827535784670266, + 0.06183970645070072, + 0.01656907935282775, + 0.01656907935282775, + 0.00824023027505193, + 0.005141002199213417, + 0.005141002199213417, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07758855723908964, + 0.07758855723908964, + 0.05126333, + 0.05136712651167594, + 0.24421016386577046, + 0.05136712651167594, + 0.005884677417842403, + 0.365378427505493, + 0.365378427505493, + 0.010714413185736954, + 0.010714413185736954, + 0.012450914510658802, + 0.005993252487054889, + 0.050894831120967834, + 0.050894831120967834, + 0.008332135342061512, + 0.008332135342061512, + 0.01363906546362808, + 0.005993252487054889, + 0.07806236743926998, + 0.18864408348287845, + 0.02419532931276727, + 0.039062176112617725, + 0.425, + 0.425, + 0.006681181282869403, + 0.006681181282869403, + 0.00512272984321628, + 0.00512272984321628, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 16.233333333333334, + "rotation": [] + }, + { + "weights": [ + 0.009930611002658088, + 0.009930611002658088, + 0.05227637604943341, + 0.015333376506096294, + 0.015333376506096294, + 0.0049988721098218605, + 0.005120001433949382, + 0.005120001433949382, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0767910903053624, + 0.0767910903053624, + 0.05126333, + 0.052640473629747095, + 0.2918467106137956, + 0.052640473629747095, + 0.006469001567789483, + 0.3653595221894126, + 0.3653595221894126, + 0.0026836174932707594, + 0.0026836174932707594, + 0.013597412620271948, + 0.0023971829430333175, + 0.1264372976230723, + 0.1264372976230723, + 0.0027912717312574354, + 0.0027912717312574354, + 0.009982130889381675, + 0.0023971829430333175, + 0.06275744991643084, + 0.14239661949021468, + 0.005412611046007689, + 0.11625774055719368, + 0.425, + 0.425, + 0.009621885509363238, + 0.009621885509363238, + 0.004720393275575977, + 0.004720393275575977, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 16.266666666666666, + "rotation": [] + }, + { + "weights": [ + 0.01643167901784181, + 0.01643167901784181, + 0.037743267656436964, + 0.014926525, + 0.014926525, + 0.0038216566400868504, + 0.0040158351284584805, + 0.0040158351284584805, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07602156347462105, + 0.07602156347462105, + 0.05126333, + 0.0544595333082335, + 0.27148201465606675, + 0.0544595333082335, + 0.006830484646239447, + 0.36718473732471446, + 0.36718473732471446, + 0.000788695075482661, + 0.000788695075482661, + 0.01085489488073757, + 0.003501391863184311, + 0.1734214606029646, + 0.1734214606029646, + 0.0023490463782634037, + 0.0023490463782634037, + 0.009076158516108985, + 0.003501391863184311, + 0.05571697396891454, + 0.10509710056441163, + 0.005862490087747569, + 0.22757889074938625, + 0.425, + 0.425, + 0.012994927657502032, + 0.012994927657502032, + 0.0034106848761439297, + 0.0034106848761439297, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 16.3, + "rotation": [] + }, + { + "weights": [ + 0.017617449457091934, + 0.017617449457091934, + 0.02888475, + 0.014926525, + 0.014926525, + 0.009864301234483707, + 0.00365088772960007, + 0.00365088772960007, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07376947541322024, + 0.07376947541322024, + 0.05126333, + 0.0526436529521431, + 0.19650338206972384, + 0.0526436529521431, + 0.004803718436908507, + 0.3840651912348609, + 0.3840651912348609, + 0.00020034960437832102, + 0.00020034960437832102, + 0.008475830938134869, + 0.021721989701368963, + 0.16274469175509038, + 0.16274469175509038, + 0.0006169247840132025, + 0.0006169247840132025, + 0.007964004682643067, + 0.021721989701368963, + 0.05132286506039753, + 0.0868006744555064, + 0.006626844086817328, + 0.3388728695256368, + 0.46669590898922486, + 0.46669590898922486, + 0.016988929829427162, + 0.016988929829427162, + 0.0043809246005756496, + 0.0043809246005756496, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 16.333333333333332, + "rotation": [] + }, + { + "weights": [ + 0.016288368989314343, + 0.016288368989314343, + 0.02888475, + 0.014926525, + 0.014926525, + 0.03270762956568171, + 0.002962073158206682, + 0.002962073158206682, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06980992188411096, + 0.06980992188411096, + 0.05126333, + 0.0449545871466398, + 0.11970176586082998, + 0.0449545871466398, + 0.00180572581344417, + 0.39150329870837053, + 0.39150329870837053, + 9.806510559948368e-06, + 9.806510559948368e-06, + 0.009191453669752388, + 0.054076314305088316, + 0.1357666332806859, + 0.1357666332806859, + 0.0, + 0.0, + 0.006127714658422125, + 0.054076314305088316, + 0.04507875719240731, + 0.08242530609880169, + 0.008720206469297404, + 0.423780594553266, + 0.49739485255309485, + 0.49739485255309485, + 0.021145012165818884, + 0.021145012165818884, + 0.004835939766573052, + 0.004835939766573052, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 16.366666666666667, + "rotation": [] + }, + { + "weights": [ + 0.01623131012810127, + 0.01623131012810127, + 0.02888475, + 0.014926525, + 0.014926525, + 0.06726391592196052, + 0.003443224062877039, + 0.003443224062877039, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06613681619720796, + 0.06613681619720796, + 0.05126333, + 0.034410198344539907, + 0.06886186897754665, + 0.034410198344539907, + 0.0004496965524075278, + 0.3817992550986151, + 0.3817992550986151, + 0.0, + 0.0, + 0.010368619965655457, + 0.08329521497445443, + 0.13422702295439576, + 0.13422702295439576, + 0.0002830591052770612, + 0.0002830591052770612, + 0.0054180072354418855, + 0.08329521497445443, + 0.04147353491612841, + 0.08578842665467938, + 0.009408471201147347, + 0.4904726224286213, + 0.5219718860728397, + 0.5219718860728397, + 0.02488219546420232, + 0.02488219546420232, + 0.003829499041395526, + 0.003829499041395526, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 16.4, + "rotation": [] + }, + { + "weights": [ + 0.018506454516734383, + 0.018506454516734383, + 0.02888475, + 0.014926525, + 0.014926525, + 0.10080122639025954, + 0.006573835081819973, + 0.006573835081819973, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06131708137691017, + 0.06131708137691017, + 0.05126333, + 0.029595541946413853, + 0.04126622957842688, + 0.029595541946413853, + 0.0010487914750618582, + 0.365238234400749, + 0.365238234400749, + 2.795851373645871e-05, + 2.795851373645871e-05, + 0.008402425902230396, + 0.09906534169401436, + 0.15715838904891685, + 0.15715838904891685, + 0.0013112506696156083, + 0.0013112506696156083, + 0.004022250590579848, + 0.09906534169401436, + 0.03834691452128544, + 0.09550565608910147, + 0.008902845851012635, + 0.5325572882379801, + 0.5531658692019323, + 0.5531658692019323, + 0.02724259827818188, + 0.02724259827818188, + 0.002895275569920026, + 0.002895275569920026, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 16.433333333333334, + "rotation": [] + }, + { + "weights": [ + 0.02012689651123114, + 0.02012689651123114, + 0.02888475, + 0.015458651898713791, + 0.015458651898713791, + 0.1217537241322653, + 0.013518338763554176, + 0.013518338763554176, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05406140615897516, + 0.05406140615897516, + 0.05126333, + 0.025339938293434207, + 0.02859257987567354, + 0.025339938293434207, + 0.0038823550533769366, + 0.3468718618154524, + 0.3468718618154524, + 0.00025485320116526303, + 0.00025485320116526303, + 0.0035921484231948827, + 0.10516937747597688, + 0.19910461817468905, + 0.19910461817468905, + 0.0032273281897817322, + 0.0032273281897817322, + 0.002045101233358893, + 0.10516937747597688, + 0.036787758874041676, + 0.10430023542472289, + 0.0065757420446191485, + 0.5499397099018093, + 0.5866366480078014, + 0.5866366480078014, + 0.028654090357678262, + 0.028654090357678262, + 0.0052117037986006, + 0.0052117037986006, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 16.466666666666665, + "rotation": [] + }, + { + "weights": [ + 0.01881307682820728, + 0.01881307682820728, + 0.02888475, + 0.016299224645450455, + 0.016299224645450455, + 0.12635547774178635, + 0.018808063578658864, + 0.018808063578658864, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.021807167804490837, + 0.02915254959038324, + 0.021807167804490837, + 0.006483572229210817, + 0.32570775321551715, + 0.32570775321551715, + 0.00032583935868128055, + 0.00032583935868128055, + 0.0, + 0.10655244578208237, + 0.2640057512692041, + 0.2640057512692041, + 0.004694983256714682, + 0.004694983256714682, + 0.0, + 0.10655244578208237, + 0.032394911987440905, + 0.11022366668496807, + 0.003311149456671304, + 0.5556426439966471, + 0.6040591342108588, + 0.6040591342108588, + 0.0297811853459903, + 0.0297811853459903, + 0.01242180204551134, + 0.01242180204551134, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 16.5, + "rotation": [] + }, + { + "weights": [ + 0.013296401633747979, + 0.013296401633747979, + 0.02888475, + 0.015895328298762185, + 0.015895328298762185, + 0.11058812279786376, + 0.01843475375457533, + 0.01843475375457533, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.018576357479430268, + 0.04226282238960263, + 0.018576357479430268, + 0.0068989997463566885, + 0.30707400143146496, + 0.30707400143146496, + 0.0003768931701779363, + 0.0003768931701779363, + 0.0, + 0.10511640863759171, + 0.33124935265098276, + 0.33124935265098276, + 0.004402013495564459, + 0.004402013495564459, + 0.0, + 0.10511640863759171, + 0.024757636764219815, + 0.11346058590071534, + 0.0014217865254197784, + 0.5511912848268233, + 0.5866933801344459, + 0.5866933801344459, + 0.030500937019075646, + 0.030500937019075646, + 0.01841450823204857, + 0.01841450823204857, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 16.533333333333335, + "rotation": [] + }, + { + "weights": [ + 0.008810972422361368, + 0.008810972422361368, + 0.02888475, + 0.014944022255835531, + 0.014944022255835531, + 0.08044754916003768, + 0.011975669867492142, + 0.011975669867492142, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.04561601637953689, + 0.04561601637953689, + 0.05126333, + 0.018311285512611866, + 0.06156720995903012, + 0.018311285512611866, + 0.005309613408254723, + 0.2996770130736486, + 0.2996770130736486, + 0.000793564314288752, + 0.000793564314288752, + 0.002147632624421799, + 0.10043785806213101, + 0.36075279584952746, + 0.36075279584952746, + 0.002567337027617862, + 0.002567337027617862, + 0.0, + 0.10043785806213101, + 0.019149166345596304, + 0.11597602920872818, + 0.0029160051473549418, + 0.5308302019323619, + 0.5341539936406269, + 0.5341539936406269, + 0.02971275406224385, + 0.02971275406224385, + 0.01679242040429796, + 0.01679242040429796, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 16.566666666666666, + "rotation": [] + }, + { + "weights": [ + 0.0077328258859259685, + 0.0077328258859259685, + 0.02888475, + 0.014926525, + 0.014926525, + 0.05387859599930896, + 0.005342829227447506, + 0.005342829227447506, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0614960526249238, + 0.0614960526249238, + 0.05126333, + 0.020448871188754013, + 0.07502392249447956, + 0.020448871188754013, + 0.004249514413199252, + 0.29628261689628854, + 0.29628261689628854, + 0.0010291267479104651, + 0.0010291267479104651, + 0.005025776688541681, + 0.09469281413725439, + 0.35269926828997455, + 0.35269926828997455, + 0.0007702584245375217, + 0.0007702584245375217, + 0.0, + 0.09469281413725439, + 0.017640269760574603, + 0.11344143705708634, + 0.0045543898429189385, + 0.4983975137983047, + 0.46493472882679504, + 0.46493472882679504, + 0.027322646294321316, + 0.027322646294321316, + 0.010079938066857193, + 0.010079938066857193, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 16.6, + "rotation": [] + }, + { + "weights": [ + 0.007526410291237486, + 0.007526410291237486, + 0.02888475, + 0.015314759953232492, + 0.015314759953232492, + 0.042524870591504206, + 0.0022492804564535596, + 0.0022492804564535596, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0743429207376071, + 0.0743429207376071, + 0.05126333, + 0.02477130992905855, + 0.07309557105813705, + 0.02477130992905855, + 0.0031359038881159235, + 0.28040654637983853, + 0.28040654637983853, + 0.0007600446657410685, + 0.0007600446657410685, + 0.008918424695730202, + 0.09006559689130098, + 0.3508055261203219, + 0.3508055261203219, + 1.9308818238121842e-05, + 1.9308818238121842e-05, + 0.0, + 0.09006559689130098, + 0.01566382891365459, + 0.10377774600471765, + 0.0029886089265346513, + 0.4655578706945689, + 0.425, + 0.425, + 0.02455606224281446, + 0.02455606224281446, + 0.009637931787541926, + 0.009637931787541926, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 16.633333333333333, + "rotation": [] + }, + { + "weights": [ + 0.005579005235007828, + 0.005579005235007828, + 0.02888475, + 0.016082159430339676, + 0.016082159430339676, + 0.0431343435176781, + 0.0025177729249532717, + 0.0025177729249532717, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07946634510798109, + 0.07946634510798109, + 0.05126333, + 0.02758608885411126, + 0.059187529683113076, + 0.02758608885411126, + 0.001018214836117944, + 0.24631791668278818, + 0.24631791668278818, + 0.0007063539392713985, + 0.0007063539392713985, + 0.018142081052064885, + 0.08611088139670231, + 0.37181345905576413, + 0.37181345905576413, + 0.0002614175102540414, + 0.0002614175102540414, + 0.0009332249672817322, + 0.08611088139670231, + 0.010804469138383859, + 0.08627523119960508, + 0.0008492422955376747, + 0.42318339858736287, + 0.425, + 0.425, + 0.02164567996348652, + 0.02164567996348652, + 0.015067553520202628, + 0.015067553520202628, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 16.666666666666668, + "rotation": [] + }, + { + "weights": [ + 0.00395112609756844, + 0.00395112609756844, + 0.02888475, + 0.01668315519234725, + 0.01668315519234725, + 0.047314997549567875, + 0.002655456501192279, + 0.002655456501192279, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07944776224238527, + 0.07944776224238527, + 0.05126333, + 0.03065327634006159, + 0.04152726726872578, + 0.03065327634006159, + 0.0, + 0.2038368336856364, + 0.2038368336856364, + 0.0009824941187564812, + 0.0009824941187564812, + 0.03251501279217854, + 0.08305349892803596, + 0.39195689558982827, + 0.39195689558982827, + 0.003828969145459785, + 0.003828969145459785, + 0.0045626460042382955, + 0.08305349892803596, + 0.0072127766907215075, + 0.06620715707540509, + 0.0023053236305713635, + 0.35814371492181485, + 0.425, + 0.425, + 0.0177850571487631, + 0.0177850571487631, + 0.022177818178066175, + 0.022177818178066175, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 16.7, + "rotation": [] + }, + { + "weights": [ + 0.004658379458955354, + 0.004658379458955354, + 0.02888475, + 0.016854016909128595, + 0.016854016909128595, + 0.04552048093506266, + 0.0019420001655817017, + 0.0019420001655817017, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07926386030656946, + 0.07926386030656946, + 0.05126333, + 0.03318864367139611, + 0.027967310718127643, + 0.03318864367139611, + 4.010711896366135e-05, + 0.15483338816889686, + 0.15483338816889686, + 0.0011052330104368065, + 0.0011052330104368065, + 0.05791760299886972, + 0.08178697749972338, + 0.4091396050793782, + 0.4091396050793782, + 0.009509356080421374, + 0.009509356080421374, + 0.009368829156405151, + 0.08178697749972338, + 0.005758198669978546, + 0.047894872937883616, + 0.005814115915979655, + 0.27716118523052746, + 0.425, + 0.425, + 0.013332568449633453, + 0.013332568449633453, + 0.03170282657125165, + 0.03170282657125165, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 16.733333333333334, + "rotation": [] + }, + { + "weights": [ + 0.006248337243284494, + 0.006248337243284494, + 0.029064577179295656, + 0.016630225363073348, + 0.016630225363073348, + 0.034643153739827, + 0.002663592954299278, + 0.002663592954299278, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.09175111555627408, + 0.09175111555627408, + 0.05224317557045388, + 0.036620424421770215, + 0.030736730694770786, + 0.036620424421770215, + 0.005605059699155384, + 0.1032786369589822, + 0.1032786369589822, + 0.0014873888104089653, + 0.0014873888104089653, + 0.09282848100577076, + 0.07791926860809321, + 0.4354328670672005, + 0.4354328670672005, + 0.015025647330496984, + 0.015025647330496984, + 0.022595853065805756, + 0.07791926860809321, + 0.007250780718667161, + 0.044547524622508425, + 0.00799302607774734, + 0.1869337105325289, + 0.425, + 0.425, + 0.009881292240960252, + 0.009881292240960252, + 0.036730706957834085, + 0.036730706957834085, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 16.766666666666666, + "rotation": [] + }, + { + "weights": [ + 0.008287607559135976, + 0.008287607559135976, + 0.0409572335226195, + 0.016291414946868758, + 0.016291414946868758, + 0.024343590757676517, + 0.004391714671094499, + 0.004391714671094499, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.11819831920521592, + 0.11819831920521592, + 0.06139013149908607, + 0.042469158023595785, + 0.050961477841649706, + 0.042469158023595785, + 0.01805246830086356, + 0.057884176261723, + 0.057884176261723, + 0.0030644374633473975, + 0.0030644374633473975, + 0.1281984651727335, + 0.06840291885393003, + 0.4518001760755264, + 0.4518001760755264, + 0.018505674520773535, + 0.018505674520773535, + 0.0517038726646985, + 0.06840291885393003, + 0.011610124898808336, + 0.06029849776199882, + 0.008923924501453122, + 0.1134745897991316, + 0.425, + 0.425, + 0.008957209395510804, + 0.008957209395510804, + 0.032407681351261465, + 0.032407681351261465, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 16.8, + "rotation": [] + }, + { + "weights": [ + 0.011792455001601143, + 0.011792455001601143, + 0.05537061127168788, + 0.015903697908475737, + 0.015903697908475737, + 0.023684699726956214, + 0.00783866389122392, + 0.00783866389122392, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.07789741884917016, + 0.07789741884917016, + 0.15458058906452987, + 0.15458058906452987, + 0.06556201034358566, + 0.04732901571052412, + 0.07534367850848603, + 0.04732901571052412, + 0.0373339577711054, + 0.03225436583161352, + 0.03225436583161352, + 0.0083713215802397, + 0.0083713215802397, + 0.15183777064085, + 0.0550001150263207, + 0.4137833912457737, + 0.4137833912457737, + 0.020161800192935116, + 0.020161800192935116, + 0.09580709300935263, + 0.0550001150263207, + 0.01830965078302791, + 0.08557711179767333, + 0.010833203792572013, + 0.06489994951656881, + 0.425, + 0.425, + 0.010810403632266175, + 0.010810403632266175, + 0.023354982824197824, + 0.023354982824197824, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 16.833333333333332, + "rotation": [] + }, + { + "weights": [ + 0.01901131426649433, + 0.01901131426649433, + 0.06597112800393783, + 0.01615095904950346, + 0.01615095904950346, + 0.031157529034784845, + 0.013212246820330611, + 0.013212246820330611, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.11312464832195208, + 0.11312464832195208, + 0.18194708515490793, + 0.18194708515490793, + 0.06657567673495834, + 0.044265159698469274, + 0.0864852678775787, + 0.044265159698469274, + 0.053648341340678043, + 0.024892418352620925, + 0.024892418352620925, + 0.019641886561044614, + 0.019641886561044614, + 0.16308435797691337, + 0.044316390209964314, + 0.320657426544598, + 0.320657426544598, + 0.022419039026967104, + 0.022419039026967104, + 0.14823086368186125, + 0.044316390209964314, + 0.026511674906526277, + 0.1016565493174961, + 0.019590352049895683, + 0.04389199699674331, + 0.425, + 0.425, + 0.014335665298359727, + 0.014335665298359727, + 0.019405148524258807, + 0.019405148524258807, + 0.05420222500000001, + 0.05420222500000001, + 0.0011628958529659678 + ], + "time": 16.866666666666667, + "rotation": [] + }, + { + "weights": [ + 0.028051194176077827, + 0.028051194176077827, + 0.07576716286795476, + 0.017678889100591795, + 0.017678889100591795, + 0.035891312254326665, + 0.01848236436822584, + 0.01848236436822584, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.13608364143541873, + 0.13608364143541873, + 0.19360344537666857, + 0.19360344537666857, + 0.06151435449719426, + 0.03251484142882481, + 0.08735992125102449, + 0.03251484142882481, + 0.05937835137758933, + 0.024388862880212903, + 0.024388862880212903, + 0.033838521423084376, + 0.033838521423084376, + 0.15911969457353856, + 0.04188370704650876, + 0.21465493940881308, + 0.21465493940881308, + 0.02572120593062467, + 0.02572120593062467, + 0.1898729220032691, + 0.04188370704650876, + 0.03515615218452042, + 0.10080512613058085, + 0.031906250864267335, + 0.032003104899610765, + 0.425, + 0.425, + 0.016884858033486765, + 0.016884858033486765, + 0.017229949949043123, + 0.017229949949043123, + 0.05420222500000001, + 0.05420222500000001, + 0.0031021098739334495 + ], + "time": 16.9, + "rotation": [] + }, + { + "weights": [ + 0.031623075902461995, + 0.031623075902461995, + 0.08525524160691662, + 0.018452461224068233, + 0.018452461224068233, + 0.042078592202493076, + 0.021707572708172446, + 0.021707572708172446, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.15107901309217714, + 0.15107901309217714, + 0.2025660908647944, + 0.2025660908647944, + 0.05890574455261225, + 0.027280283019834917, + 0.0825367423466273, + 0.027280283019834917, + 0.05853166175740101, + 0.028200742655566744, + 0.028200742655566744, + 0.042391236030629664, + 0.042391236030629664, + 0.15387400048119676, + 0.040734709054231606, + 0.1491159572132996, + 0.1491159572132996, + 0.028820552384214722, + 0.028820552384214722, + 0.20810551494359944, + 0.040734709054231606, + 0.04469566036547929, + 0.1006013393402099, + 0.04203354641795157, + 0.02753944631133759, + 0.425, + 0.425, + 0.018180103983197884, + 0.018180103983197884, + 0.0188072325129594, + 0.0188072325129594, + 0.05420222500000001, + 0.05420222500000001, + 0.004862732493451661 + ], + "time": 16.933333333333334, + "rotation": [] + }, + { + "weights": [ + 0.03169755451381205, + 0.03169755451381205, + 0.09447406487805494, + 0.019036859646990634, + 0.019036859646990634, + 0.04874402593289097, + 0.02320455049297638, + 0.02320455049297638, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.15718468299933827, + 0.15718468299933827, + 0.20508061221667678, + 0.20508061221667678, + 0.057070806622505146, + 0.024493885245530256, + 0.07117844888142169, + 0.024493885245530256, + 0.050016773385660906, + 0.03675324645425591, + 0.03675324645425591, + 0.04753431600119382, + 0.04753431600119382, + 0.14363669838224127, + 0.04285483025014396, + 0.11015796757170132, + 0.11015796757170132, + 0.0320720037711518, + 0.0320720037711518, + 0.206469018757343, + 0.04285483025014396, + 0.05503109863826201, + 0.0965561747550963, + 0.05146972611546513, + 0.03209643342665261, + 0.425, + 0.425, + 0.018304317274263914, + 0.018304317274263914, + 0.023479325803262834, + 0.023479325803262834, + 0.05420222500000001, + 0.05420222500000001, + 0.006208057222621779 + ], + "time": 16.966666666666665, + "rotation": [] + }, + { + "weights": [ + 0.030937925603772884, + 0.030937925603772884, + 0.0844930986930824, + 0.022458585063590122, + 0.022458585063590122, + 0.040734690824384114, + 0.020437723934574367, + 0.020437723934574367, + 0.3532907794342267, + 0.3532907794342267, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.13565544641823774, + 0.13565544641823774, + 0.1797742596661454, + 0.1797742596661454, + 0.05126333, + 0.029085813931221317, + 0.09162361300072691, + 0.029085813931221317, + 0.042279509142623975, + 0.08120301040408963, + 0.08120301040408963, + 0.008007861793335186, + 0.008007861793335186, + 0.12259790722559487, + 0.03941218211138171, + 0.10612097125170986, + 0.10612097125170986, + 0.027636026394407733, + 0.027636026394407733, + 0.17523393607565302, + 0.03941218211138171, + 0.057255133449220244, + 0.09906114583923686, + 0.04506858267599623, + 0.11601407351745219, + 0.425, + 0.425, + 0.005372328175634748, + 0.005372328175634748, + 0.02151996486167719, + 0.02151996486167719, + 0.05800415199676354, + 0.05800415199676354, + 0.005149313167852604 + ], + "time": 17.0, + "rotation": [] + }, + { + "weights": [ + 0.029882012210076737, + 0.029882012210076737, + 0.07135216572454987, + 0.02070605499477295, + 0.02070605499477295, + 0.029558290505693013, + 0.016871515335515123, + 0.016871515335515123, + 0.9188147663337388, + 0.9188147663337388, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.10997633066560526, + 0.10997633066560526, + 0.14917417530502566, + 0.14917417530502566, + 0.05126333, + 0.026658051912038887, + 0.11873437291099898, + 0.026658051912038887, + 0.03491665992797123, + 0.12165192752366968, + 0.12165192752366968, + 0.006035408074923206, + 0.006035408074923206, + 0.09888134616471458, + 0.03412506296521137, + 0.10617062566535806, + 0.10617062566535806, + 0.02177217001361504, + 0.02177217001361504, + 0.1379900930848502, + 0.03412506296521137, + 0.05782200523785175, + 0.09890005247933509, + 0.036415915687878886, + 0.20975154964696777, + 0.425, + 0.425, + 0.006936151838018774, + 0.006936151838018774, + 0.019840960311038134, + 0.019840960311038134, + 0.05489422297446943, + 0.05489422297446943, + 0.0037016820162534677 + ], + "time": 17.033333333333335, + "rotation": [] + }, + { + "weights": [ + 0.029137618427297875, + 0.029137618427297875, + 0.061494010074862326, + 0.01942430355521951, + 0.01942430355521951, + 0.01971231797443965, + 0.01318058718461542, + 0.01318058718461542, + 0.9243243786283757, + 0.9243243786283757, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.08781104250145796, + 0.08781104250145796, + 0.12247966937720758, + 0.12247966937720758, + 0.05126333, + 0.023074098626995936, + 0.15076879688671646, + 0.023074098626995936, + 0.02736963752124985, + 0.1403918302218828, + 0.1403918302218828, + 0.004524176293185772, + 0.004524176293185772, + 0.07640983323965744, + 0.028188262015048905, + 0.1010486496346337, + 0.1010486496346337, + 0.01630010229668445, + 0.01630010229668445, + 0.10280167938077002, + 0.028188262015048905, + 0.060602106153964934, + 0.09647248057382435, + 0.02932565733790394, + 0.2851502813398836, + 0.425, + 0.425, + 0.007723198726241072, + 0.007723198726241072, + 0.020732548832893355, + 0.020732548832893355, + 0.05420222500000001, + 0.05420222500000001, + 0.0026855018788150345 + ], + "time": 17.066666666666666, + "rotation": [] + }, + { + "weights": [ + 0.02709666458623748, + 0.02709666458623748, + 0.05608729131164999, + 0.01843150184509731, + 0.01843150184509731, + 0.012527356012946057, + 0.008583965853211417, + 0.008583965853211417, + 0.8864030563666938, + 0.8864030563666938, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.06425576762163204, + 0.06425576762163204, + 0.0983547938189335, + 0.0983547938189335, + 0.05126333, + 0.019623602687220118, + 0.19457909845170507, + 0.019623602687220118, + 0.01961626537765062, + 0.13150989665161988, + 0.13150989665161988, + 0.003979615635726417, + 0.003979615635726417, + 0.055166531886373174, + 0.02089597303420302, + 0.09961565889063331, + 0.09961565889063331, + 0.011105898129088526, + 0.011105898129088526, + 0.06847612952281307, + 0.02089597303420302, + 0.061255835564363516, + 0.09164290513311105, + 0.020464943526756173, + 0.32164970657655156, + 0.425, + 0.425, + 0.0072795675031485955, + 0.0072795675031485955, + 0.01932393333741595, + 0.01932393333741595, + 0.05420222500000001, + 0.05420222500000001, + 0.0017355747520923595 + ], + "time": 17.1, + "rotation": [] + }, + { + "weights": [ + 0.020790264431741964, + 0.020790264431741964, + 0.05447287476919333, + 0.017051607026823793, + 0.017051607026823793, + 0.006407661860441255, + 0.0025757622456520145, + 0.0025757622456520145, + 0.35511223560377747, + 0.35511223560377747, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07322112783130733, + 0.07322112783130733, + 0.05126333, + 0.01957081365002768, + 0.24092278343317447, + 0.01957081365002768, + 0.011708989859349548, + 0.09894681866654524, + 0.09894681866654524, + 0.004478961072598585, + 0.004478961072598585, + 0.034152758034820416, + 0.016704038442777715, + 0.09340474605965773, + 0.09340474605965773, + 0.0062724266046670744, + 0.0062724266046670744, + 0.03933960326681171, + 0.016704038442777715, + 0.053139440641313956, + 0.08229733193914088, + 0.008213925145211663, + 0.2766318197011135, + 0.425, + 0.425, + 0.005268116043036687, + 0.005268116043036687, + 0.015383221881628838, + 0.015383221881628838, + 0.05420222500000001, + 0.05420222500000001, + 0.0012909623658677336 + ], + "time": 17.133333333333333, + "rotation": [] + }, + { + "weights": [ + 0.010297308702554017, + 0.010297308702554017, + 0.05761155003795815, + 0.01553024831150808, + 0.01553024831150808, + 0.002994069119497217, + 0.0, + 0.0, + 0.11517460191313025, + 0.11517460191313025, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06100621512501819, + 0.06100621512501819, + 0.05126333, + 0.023826896006070436, + 0.2565958861136921, + 0.023826896006070436, + 0.010997697271558693, + 0.05619427928663026, + 0.05619427928663026, + 0.009701304801158144, + 0.009701304801158144, + 0.024939263891808817, + 0.03022744446992872, + 0.07253251206205812, + 0.07253251206205812, + 0.002901176065966787, + 0.002901176065966787, + 0.042297203221491365, + 0.03022744446992872, + 0.039077671516914735, + 0.0741814039434705, + 0.0, + 0.15809114285269554, + 0.425, + 0.425, + 0.002899594982911127, + 0.002899594982911127, + 0.010114762123522095, + 0.010114762123522095, + 0.05420222500000001, + 0.05420222500000001, + 0.001292437253405852 + ], + "time": 17.166666666666668, + "rotation": [] + }, + { + "weights": [ + 0.0005182060413062557, + 0.0005182060413062557, + 0.06438824307249513, + 0.014926525, + 0.014926525, + 0.0028395371868902303, + 0.0, + 0.0, + 0.024519019444644748, + 0.024519019444644748, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06563488946657395, + 0.06563488946657395, + 0.05126333, + 0.03050623164800359, + 0.2310909562354184, + 0.03050623164800359, + 0.0202389533433835, + 0.02545342088962086, + 0.02545342088962086, + 0.020680731398809916, + 0.020680731398809916, + 0.029018012773321583, + 0.05855794701858287, + 0.044304353464014644, + 0.044304353464014644, + 0.0047721193061799365, + 0.0047721193061799365, + 0.06722868188949564, + 0.05855794701858287, + 0.03708531685933772, + 0.08130719604236734, + 0.0, + 0.05081908188000013, + 0.425, + 0.425, + 0.0016537845985773862, + 0.0016537845985773862, + 0.004848329614923921, + 0.004848329614923921, + 0.05420222500000001, + 0.05420222500000001, + 0.0021350902280941287 + ], + "time": 17.2, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.07328055799007412, + 0.01585841056546756, + 0.01585841056546756, + 0.005272944165127615, + 0.003607157957074896, + 0.003607157957074896, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.08225584567657535, + 0.08225584567657535, + 0.05126333, + 0.0368887742183038, + 0.1806494450569152, + 0.0368887742183038, + 0.02676881769938127, + 0.009858441033533632, + 0.009858441033533632, + 0.031842086879270405, + 0.031842086879270405, + 0.03620452061295507, + 0.07923925141138687, + 0.025608183337109413, + 0.025608183337109413, + 0.014923914601760239, + 0.014923914601760239, + 0.08380062537533892, + 0.07923925141138687, + 0.04681805691548754, + 0.09279432573488774, + 0.03947994389704293, + 0.006351188783134714, + 0.425, + 0.425, + 0.0015697360837033803, + 0.0015697360837033803, + 0.001217189989984034, + 0.001217189989984034, + 0.05420222500000001, + 0.05420222500000001, + 0.0023773450936589906 + ], + "time": 17.233333333333334, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.0776277171713965, + 0.017226873125899857, + 0.017226873125899857, + 0.006843329753194532, + 0.005384508932807614, + 0.005384508932807614, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.09124317584293223, + 0.09124317584293223, + 0.05126333, + 0.03720011045890193, + 0.14195886577878672, + 0.03720011045890193, + 0.02151922707312872, + 0.006262606249323907, + 0.006262606249323907, + 0.037318395610366525, + 0.037318395610366525, + 0.03350538334676195, + 0.07311872344996245, + 0.01680247437741074, + 0.01680247437741074, + 0.03434129075280255, + 0.03434129075280255, + 0.07196328810283112, + 0.07311872344996245, + 0.04976673030427521, + 0.08800929763487403, + 0.09909669277923443, + 0.004930291644164487, + 0.425, + 0.425, + 0.0018835900990026328, + 0.0018835900990026328, + 0.0001363571733236307, + 0.0001363571733236307, + 0.05420222500000001, + 0.05420222500000001, + 0.003542549242930751 + ], + "time": 17.266666666666666, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.07704134902783799, + 0.017807729436369622, + 0.017807729436369622, + 0.008969876063721516, + 0.0030909362714737643, + 0.0030909362714737643, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.09201307051948135, + 0.09201307051948135, + 0.05126333, + 0.033382643911279264, + 0.12272874900272908, + 0.033382643911279264, + 0.011315183926905897, + 0.006433975324034686, + 0.006433975324034686, + 0.04265308580228258, + 0.04265308580228258, + 0.028767552546092423, + 0.056015634430306264, + 0.012833138235977709, + 0.012833138235977709, + 0.055875548374439955, + 0.055875548374439955, + 0.07628782136099674, + 0.056015634430306264, + 0.03830839917063711, + 0.06893253432852876, + 0.12616364306637212, + 0.006527539661952424, + 0.425, + 0.425, + 0.002475854621401853, + 0.002475854621401853, + 0.0011123508081904473, + 0.0011123508081904473, + 0.05420222500000001, + 0.05420222500000001, + 0.004969928892595425 + ], + "time": 17.3, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.07514902310711993, + 0.017485658133155276, + 0.017485658133155276, + 0.011754162290266577, + 0.00015016560043607392, + 0.00015016560043607392, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.08560460763318194, + 0.08560460763318194, + 0.05126333, + 0.03144487344030243, + 0.12230743135724742, + 0.03144487344030243, + 0.0078031584221337465, + 0.009281655693692815, + 0.009281655693692815, + 0.05479573922497882, + 0.05479573922497882, + 0.028113355381148182, + 0.051372895602669, + 0.013841399816530082, + 0.013841399816530082, + 0.07199016208095207, + 0.07199016208095207, + 0.11166096010378423, + 0.051372895602669, + 0.02600303324205533, + 0.05981873508010588, + 0.09691784062555853, + 0.007517641463450018, + 0.425, + 0.425, + 0.0030546327094946573, + 0.0030546327094946573, + 0.0020107571833900034, + 0.0020107571833900034, + 0.05420222500000001, + 0.05420222500000001, + 0.006076914657439501 + ], + "time": 17.333333333333332, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.07661823907068793, + 0.01667356214408125, + 0.01667356214408125, + 0.012068477592297955, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.08105949706264899, + 0.08105949706264899, + 0.05126333, + 0.033121358808486115, + 0.13072706529072345, + 0.033121358808486115, + 0.007473419553467201, + 0.009897538939757, + 0.009897538939757, + 0.06855226035628996, + 0.06855226035628996, + 0.030830654182604365, + 0.0679373083370072, + 0.018435984211308605, + 0.018435984211308605, + 0.07527222585465224, + 0.07527222585465224, + 0.15330228273357654, + 0.0679373083370072, + 0.024941669936690995, + 0.06957358058009824, + 0.05727735310792919, + 0.005655894854239052, + 0.425, + 0.425, + 0.0030936206717576283, + 0.0030936206717576283, + 0.0029176632607621792, + 0.0029176632607621792, + 0.05420222500000001, + 0.05420222500000001, + 0.005525057177458488 + ], + "time": 17.366666666666667, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.08115405270031516, + 0.015565312973641667, + 0.015565312973641667, + 0.010548322647809976, + 0.0002576322228248625, + 0.0002576322228248625, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.08297872607197075, + 0.08297872607197075, + 0.05126333, + 0.037053880201918715, + 0.1449118665286472, + 0.037053880201918715, + 0.008241859996425249, + 0.009362067840993395, + 0.009362067840993395, + 0.06855187829051695, + 0.06855187829051695, + 0.03773411640099114, + 0.08895418755710122, + 0.020248421654105172, + 0.020248421654105172, + 0.0640510648488998, + 0.0640510648488998, + 0.15809231634650905, + 0.08895418755710122, + 0.0324037122939314, + 0.08906093154634742, + 0.031892076134681674, + 0.0025721276445048163, + 0.425, + 0.425, + 0.0025509956958038446, + 0.0025509956958038446, + 0.0025225151330232603, + 0.0025225151330232603, + 0.05420222500000001, + 0.05420222500000001, + 0.005332899945122852 + ], + "time": 17.4, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.08354600816965099, + 0.014926525, + 0.014926525, + 0.00834179893136024, + 0.0026786920747586635, + 0.0026786920747586635, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.09174611132059773, + 0.09174611132059773, + 0.05126333, + 0.04141204426331177, + 0.17148631538663583, + 0.04141204426331177, + 0.011092844765101154, + 0.023394143182252115, + 0.023394143182252115, + 0.047542218608515575, + 0.047542218608515575, + 0.04793671869805878, + 0.08164890871516292, + 0.02253793914403232, + 0.02253793914403232, + 0.03959226656172954, + 0.03959226656172954, + 0.12019017296177993, + 0.08164890871516292, + 0.037834311702421713, + 0.11096610831362855, + 0.01814697810581751, + 0.0019317928169454782, + 0.425, + 0.425, + 0.00245386623910495, + 0.00245386623910495, + 0.0023201829620770023, + 0.0023201829620770023, + 0.05420222500000001, + 0.05420222500000001, + 0.00581436633531536 + ], + "time": 17.433333333333334, + "rotation": [] + }, + { + "weights": [ + 0.00033885490681443667, + 0.00033885490681443667, + 0.07875691396849492, + 0.014926525, + 0.014926525, + 0.005034024587699341, + 0.006460745878783716, + 0.006460745878783716, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.10590043514966958, + 0.10590043514966958, + 0.05126333, + 0.041212484134095034, + 0.2044863442012241, + 0.041212484134095034, + 0.015058132420693118, + 0.05441196334681338, + 0.05441196334681338, + 0.020774551467703906, + 0.020774551467703906, + 0.056516615407807454, + 0.04948656895597063, + 0.05783243860517225, + 0.05783243860517225, + 0.014707703888416279, + 0.014707703888416279, + 0.07504987546375814, + 0.04948656895597063, + 0.030343671568802407, + 0.11687017998525069, + 0.008644685468503398, + 0.012417576036282931, + 0.425, + 0.425, + 0.0036874221478189707, + 0.0036874221478189707, + 0.004635287302413154, + 0.004635287302413154, + 0.05420222500000001, + 0.05420222500000001, + 0.0054101661645940356 + ], + "time": 17.466666666666665, + "rotation": [] + }, + { + "weights": [ + 0.014179153261440133, + 0.014179153261440133, + 0.06828414350748058, + 0.014926525, + 0.014926525, + 0.0034025621201310796, + 0.011900555934490895, + 0.011900555934490895, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.12646183584417608, + 0.12646183584417608, + 0.05126333, + 0.03906271063855714, + 0.21521603209631773, + 0.03906271063855714, + 0.02052523695996828, + 0.08670802789607213, + 0.08670802789607213, + 0.004748591952291975, + 0.004748591952291975, + 0.06041959843465256, + 0.018154909687915, + 0.13492014812571654, + 0.13492014812571654, + 0.001436586145843774, + 0.001436586145843774, + 0.05243403209107259, + 0.018154909687915, + 0.014417724737099229, + 0.09638953315360199, + 0.006147745570966171, + 0.05317116337163104, + 0.425, + 0.425, + 0.006722790295524252, + 0.006722790295524252, + 0.009590140078216784, + 0.009590140078216784, + 0.05420222500000001, + 0.05420222500000001, + 0.0024442102493984347 + ], + "time": 17.5, + "rotation": [] + }, + { + "weights": [ + 0.028849586711398176, + 0.028849586711398176, + 0.05700983319963725, + 0.014926525, + 0.014926525, + 0.006968894068683888, + 0.01740063178752149, + 0.01740063178752149, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05880669245404514, + 0.05880669245404514, + 0.1433607579341956, + 0.1433607579341956, + 0.05126333, + 0.03784144339816908, + 0.18260666949408386, + 0.03784144339816908, + 0.02349952629634311, + 0.10485303886234754, + 0.10485303886234754, + 0.001302255768594995, + 0.001302255768594995, + 0.06152190853442461, + 0.007663488348147687, + 0.2135120751602308, + 0.2135120751602308, + 0.00015493072569370175, + 0.00015493072569370175, + 0.04588912427425382, + 0.007663488348147687, + 0.0023358512137617348, + 0.06037748243127546, + 0.007900914230516974, + 0.12324913846594938, + 0.425, + 0.425, + 0.010547981448471539, + 0.010547981448471539, + 0.017747742044074182, + 0.017747742044074182, + 0.05530655919895955, + 0.05530655919895955, + 0.0 + ], + "time": 17.533333333333335, + "rotation": [] + }, + { + "weights": [ + 0.03872206277613127, + 0.03872206277613127, + 0.047682749586445916, + 0.014926525, + 0.014926525, + 0.022793475857802784, + 0.02200802708310739, + 0.02200802708310739, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.06498769101287634, + 0.06498769101287634, + 0.14165804141334118, + 0.14165804141334118, + 0.05126333, + 0.03884987336184295, + 0.1226896507399422, + 0.03884987336184295, + 0.0236338475453002, + 0.12023337973015641, + 0.12023337973015641, + 0.0008887881825544994, + 0.0008887881825544994, + 0.05710192844271657, + 0.014974548148789563, + 0.2660543320434432, + 0.2660543320434432, + 0.001960443252963678, + 0.001960443252963678, + 0.03380368197602883, + 0.014974548148789563, + 0.0, + 0.03916109119142802, + 0.010998531856707159, + 0.20817511475511946, + 0.425, + 0.425, + 0.01481819054910114, + 0.01481819054910114, + 0.034898680288876785, + 0.034898680288876785, + 0.05694160904125758, + 0.05694160904125758, + 0.0 + ], + "time": 17.566666666666666, + "rotation": [] + }, + { + "weights": [ + 0.04573998110634937, + 0.04573998110634937, + 0.04010318113224845, + 0.014926525, + 0.014926525, + 0.04710049810154095, + 0.024772981793752723, + 0.024772981793752723, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.06621006950736043, + 0.06621006950736043, + 0.11714615225791924, + 0.11714615225791924, + 0.05126333, + 0.038036160916089995, + 0.07373261528355729, + 0.038036160916089995, + 0.018171614302056164, + 0.14012149018900727, + 0.14012149018900727, + 0.0011095141140477992, + 0.0011095141140477992, + 0.047681792612586676, + 0.03566579899883694, + 0.3185702905058859, + 0.3185702905058859, + 0.0037273403789315884, + 0.0037273403789315884, + 0.01937060632875986, + 0.03566579899883694, + 0.0007032855280808026, + 0.040088909864425634, + 0.01079007397804941, + 0.280802793587957, + 0.425, + 0.425, + 0.01859936650310243, + 0.01859936650310243, + 0.056702350558979146, + 0.056702350558979146, + 0.05588208539067949, + 0.05588208539067949, + 0.0 + ], + "time": 17.6, + "rotation": [] + }, + { + "weights": [ + 0.04775286018848417, + 0.04775286018848417, + 0.03564102096217017, + 0.014926525, + 0.014926525, + 0.07189459619777538, + 0.026184612432760837, + 0.026184612432760837, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.06214021534792011, + 0.06214021534792011, + 0.0859906231186219, + 0.0859906231186219, + 0.05126333, + 0.03274422750941343, + 0.051249026741300274, + 0.03274422750941343, + 0.013656123567904736, + 0.16321275436452448, + 0.16321275436452448, + 0.0012291392630764408, + 0.0012291392630764408, + 0.03960069040102616, + 0.06040243917543971, + 0.3903535749231064, + 0.3903535749231064, + 0.004418352645422729, + 0.004418352645422729, + 0.009323317970016166, + 0.06040243917543971, + 0.005689540079661775, + 0.05272779124123707, + 0.005354902786867956, + 0.333010565808841, + 0.49389182073729354, + 0.49389182073729354, + 0.02209874242544173, + 0.02209874242544173, + 0.06944278925657268, + 0.06944278925657268, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 17.633333333333333, + "rotation": [] + }, + { + "weights": [ + 0.04285572293613636, + 0.04285572293613636, + 0.033536214966859115, + 0.014926525, + 0.014926525, + 0.08691560743110516, + 0.023734978692872173, + 0.023734978692872173, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06500161731881751, + 0.06500161731881751, + 0.05126333, + 0.025747716711924072, + 0.04772946025644027, + 0.025747716711924072, + 0.010379109638077866, + 0.18964069059916894, + 0.18964069059916894, + 0.001299245156613843, + 0.001299245156613843, + 0.034134026510374865, + 0.07703383713960643, + 0.450803431017058, + 0.450803431017058, + 0.0035849411040544486, + 0.0035849411040544486, + 0.0029142614720123125, + 0.07703383713960643, + 0.010241894317524768, + 0.06421831399202343, + 0.0, + 0.3552112357957021, + 0.5579645382506504, + 0.5579645382506504, + 0.02497033576880181, + 0.02497033576880181, + 0.06499932919229776, + 0.06499932919229776, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 17.666666666666668, + "rotation": [] + }, + { + "weights": [ + 0.03142511067645888, + 0.03142511067645888, + 0.03178148833768706, + 0.014926525, + 0.014926525, + 0.09400433897972102, + 0.01859136897006204, + 0.01859136897006204, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05558805433767179, + 0.05558805433767179, + 0.05126333, + 0.02160251823688677, + 0.045583928312574094, + 0.02160251823688677, + 0.008707127813249822, + 0.2198391801544597, + 0.2198391801544597, + 0.0011879333667457097, + 0.0011879333667457097, + 0.027964860679847835, + 0.08669330525611123, + 0.48460518462317304, + 0.48460518462317304, + 0.00283298681357077, + 0.00283298681357077, + 0.0, + 0.08669330525611123, + 0.012296961992979043, + 0.07092755841357364, + 0.0, + 0.35820300664220517, + 0.5836098585809977, + 0.5836098585809977, + 0.02731282630137033, + 0.02731282630137033, + 0.05335002041288781, + 0.05335002041288781, + 0.05420222500000001, + 0.05420222500000001, + 0.0007595476561358993 + ], + "time": 17.7, + "rotation": [] + }, + { + "weights": [ + 0.021877297599400776, + 0.021877297599400776, + 0.02888475, + 0.014926525, + 0.014926525, + 0.09501869848796293, + 0.0161565334403089, + 0.0161565334403089, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0520412773958274, + 0.0520412773958274, + 0.05710362036313326, + 0.01937571616878952, + 0.04143530155931198, + 0.01937571616878952, + 0.007237253138529398, + 0.24753864599125713, + 0.24753864599125713, + 0.0010075420966105795, + 0.0010075420966105795, + 0.021544671910149693, + 0.09212686909096576, + 0.5008988235677989, + 0.5008988235677989, + 0.0026841247454285604, + 0.0026841247454285604, + 0.0, + 0.09212686909096576, + 0.012590260803699486, + 0.072855546431882, + 0.0, + 0.347696587869099, + 0.583762169735772, + 0.583762169735772, + 0.02876807925956588, + 0.02876807925956588, + 0.04513084707515577, + 0.04513084707515577, + 0.05420222500000001, + 0.05420222500000001, + 0.0022209153111491875 + ], + "time": 17.733333333333334, + "rotation": [] + }, + { + "weights": [ + 0.01935324376182895, + 0.01935324376182895, + 0.02888475, + 0.014926525, + 0.014926525, + 0.09009738021663252, + 0.02319756735648426, + 0.02319756735648426, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05057710696543963, + 0.05057710696543963, + 0.06829291284084316, + 0.018533881213872092, + 0.03798761657306124, + 0.018533881213872092, + 0.006851001296724588, + 0.26079445353576103, + 0.26079445353576103, + 0.001041081191173621, + 0.001041081191173621, + 0.01935936739402156, + 0.09533107807593681, + 0.519703633870397, + 0.519703633870397, + 0.003288893002484523, + 0.003288893002484523, + 0.0, + 0.09533107807593681, + 0.012979649007320395, + 0.07133191206625525, + 0.0018152635012354157, + 0.3256875676768165, + 0.5944574781826562, + 0.5944574781826562, + 0.029923757783004195, + 0.029923757783004195, + 0.04439750207321981, + 0.04439750207321981, + 0.05420222500000001, + 0.05420222500000001, + 0.0029926159818257593 + ], + "time": 17.766666666666666, + "rotation": [] + }, + { + "weights": [ + 0.03432677377547533, + 0.03432677377547533, + 0.03341672574835162, + 0.014926525, + 0.014926525, + 0.07391391439097264, + 0.04388855562678402, + 0.04388855562678402, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05809975149376048, + 0.05809975149376048, + 0.0837484081940991, + 0.0181556725, + 0.042512847525732825, + 0.0181556725, + 0.0057176460245890225, + 0.2493458094341413, + 0.2493458094341413, + 0.0015059364014970394, + 0.0015059364014970394, + 0.02603535928896493, + 0.09072562339050425, + 0.5448332484279357, + 0.5448332484279357, + 0.005141665068055899, + 0.005141665068055899, + 0.0, + 0.09072562339050425, + 0.01611352797065461, + 0.06501266977616715, + 0.00499713410224233, + 0.2712613446371894, + 0.6344546914100644, + 0.6344546914100644, + 0.031538420234407685, + 0.031538420234407685, + 0.05603048279881474, + 0.05603048279881474, + 0.05420222500000001, + 0.05420222500000001, + 0.0010023268737963259 + ], + "time": 17.8, + "rotation": [] + }, + { + "weights": [ + 0.08004198079662658, + 0.08004198079662658, + 0.048359857712473156, + 0.014926525, + 0.014926525, + 0.04600289357560018, + 0.07774734531662289, + 0.07774734531662289, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0986934130745274, + 0.0986934130745274, + 0.07045672754091872, + 0.07045672754091872, + 0.10851557212216507, + 0.019355750235951968, + 0.06632212877273555, + 0.019355750235951968, + 0.008010930567979807, + 0.2123740419745444, + 0.2123740419745444, + 0.0019835719027157333, + 0.0019835719027157333, + 0.049041623515742136, + 0.07173791555687781, + 0.5609636834689545, + 0.5609636834689545, + 0.009850983827241824, + 0.009850983827241824, + 0.0, + 0.07173791555687781, + 0.022679195553064333, + 0.057987403018133946, + 0.008346185567123543, + 0.19332337336880806, + 0.6930853298732209, + 0.6930853298732209, + 0.034673245549201946, + 0.034673245549201946, + 0.08155261922095498, + 0.08155261922095498, + 0.0670662576963571, + 0.0670662576963571, + 0.0 + ], + "time": 17.833333333333332, + "rotation": [] + }, + { + "weights": [ + 0.15413889421948357, + 0.15413889421948357, + 0.0622560158371925, + 0.014926525, + 0.014926525, + 0.019374873702015183, + 0.11412251112716532, + 0.11412251112716532, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.1876056863793304, + 0.1876056863793304, + 0.07562932595610614, + 0.07562932595610614, + 0.1336465976067951, + 0.020367957271459444, + 0.11091275572776788, + 0.020367957271459444, + 0.014892334770411244, + 0.17011167109012593, + 0.17011167109012593, + 0.0017334850460922868, + 0.0017334850460922868, + 0.07575879618525501, + 0.04085863522653066, + 0.5585225999355312, + 0.5585225999355312, + 0.016267285123467437, + 0.016267285123467437, + 8.151382207870423e-05, + 0.04085863522653066, + 0.02689145377704074, + 0.05580746318612777, + 0.0145850546658039, + 0.1356618744986397, + 0.7407671306814463, + 0.7407671306814463, + 0.03757079575742992, + 0.03757079575742992, + 0.10796854831278319, + 0.10796854831278319, + 0.10564523733087941, + 0.10564523733087941, + 0.0024768484490258333 + ], + "time": 17.866666666666667, + "rotation": [] + }, + { + "weights": [ + 0.22481857634016433, + 0.22481857634016433, + 0.06503944514053205, + 0.014926525, + 0.014926525, + 0.006471864666257578, + 0.14412816826786307, + 0.14412816826786307, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.2698270477354525, + 0.2698270477354525, + 0.06587630675307338, + 0.06587630675307338, + 0.14889403070722299, + 0.020160266802603178, + 0.15722570402281616, + 0.020160266802603178, + 0.023548383225819883, + 0.14260129587990888, + 0.14260129587990888, + 0.0009897402624067446, + 0.0009897402624067446, + 0.09468937803591995, + 0.017081343808344418, + 0.5496116459369655, + 0.5496116459369655, + 0.019893858102815482, + 0.019893858102815482, + 0.001709220977500078, + 0.017081343808344418, + 0.02759789803198404, + 0.058419438132217914, + 0.02220087663403578, + 0.12993961019175385, + 0.7649170041084286, + 0.7649170041084286, + 0.03830278749976837, + 0.03830278749976837, + 0.1225845432707241, + 0.1225845432707241, + 0.14454606015767363, + 0.14454606015767363, + 0.008033562957176138 + ], + "time": 17.9, + "rotation": [] + }, + { + "weights": [ + 0.2698473573795386, + 0.2698473573795386, + 0.06460443830915856, + 0.014926525, + 0.014926525, + 0.00216649685587203, + 0.16278656976563577, + 0.16278656976563577, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.3170369051396845, + 0.3170369051396845, + 0.05955693264092711, + 0.05955693264092711, + 0.1544981543506893, + 0.0205193371302683, + 0.1790054278714316, + 0.0205193371302683, + 0.026565372132297045, + 0.12903467097452698, + 0.12903467097452698, + 0.0006018339532394216, + 0.0006018339532394216, + 0.10270870955927025, + 0.010252919473818373, + 0.5458211302757259, + 0.5458211302757259, + 0.023236462234386364, + 0.023236462234386364, + 0.00920393159613013, + 0.010252919473818373, + 0.028871465367930255, + 0.06288645288773943, + 0.027360155326979482, + 0.13745607904025475, + 0.7642705857753749, + 0.7642705857753749, + 0.03754343671458106, + 0.03754343671458106, + 0.12931431712848787, + 0.12931431712848787, + 0.16791048826915872, + 0.16791048826915872, + 0.008944016482148848 + ], + "time": 17.933333333333334, + "rotation": [] + }, + { + "weights": [ + 0.29499899202159463, + 0.29499899202159463, + 0.05859075071556223, + 0.014926525, + 0.014926525, + 0.007697496776069936, + 0.17151414613638588, + 0.17151414613638588, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.33643449768424005, + 0.33643449768424005, + 0.05211463070341511, + 0.05211463070341511, + 0.14995750997747676, + 0.020859236049688885, + 0.18292861001832136, + 0.020859236049688885, + 0.02559312101719631, + 0.12944060308592645, + 0.12944060308592645, + 0.00036562336467405916, + 0.00036562336467405916, + 0.10050170730267242, + 0.011292026085512975, + 0.544864517450332, + 0.544864517450332, + 0.025531176397843004, + 0.025531176397843004, + 0.021252145571634178, + 0.011292026085512975, + 0.029726022694792027, + 0.06966944443328037, + 0.031184363950576083, + 0.1676160033260071, + 0.7395663619041435, + 0.7395663619041435, + 0.03505081926073344, + 0.03505081926073344, + 0.12719003121767708, + 0.12719003121767708, + 0.17932057316814143, + 0.17932057316814143, + 0.007002261893025458 + ], + "time": 17.966666666666665, + "rotation": [] + }, + { + "weights": [ + 0.25368795936103555, + 0.25368795936103555, + 0.0536003954029407, + 0.021056578956269986, + 0.021056578956269986, + 0.012779386393269728, + 0.14746138614570686, + 0.14746138614570686, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.2893544096889946, + 0.2893544096889946, + 0.050836143777737305, + 0.050836143777737305, + 0.13007025341268885, + 0.02812759127192925, + 0.16422108750846093, + 0.02812759127192925, + 0.024174687117718266, + 0.13651636420666746, + 0.13651636420666746, + 0.0001323122511369167, + 0.0001323122511369167, + 0.09152194215529616, + 0.019376480003603445, + 0.49679526511402283, + 0.49679526511402283, + 0.022277286325131523, + 0.022277286325131523, + 0.021979103673781662, + 0.019376480003603445, + 0.02951286612724766, + 0.07003924419077068, + 0.029566844521077683, + 0.1893731963310109, + 0.665060066112449, + 0.665060066112449, + 0.009151657048800355, + 0.009151657048800355, + 0.10974404794132303, + 0.10974404794132303, + 0.15418169733770426, + 0.15418169733770426, + 0.0056726949569471325 + ], + "time": 18.0, + "rotation": [] + }, + { + "weights": [ + 0.1998365328868938, + 0.1998365328868938, + 0.052008428034328216, + 0.020318593531350175, + 0.020318593531350175, + 0.015058596751519618, + 0.11761608114022568, + 0.11761608114022568, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.23365347183176416, + 0.23365347183176416, + 0.05441988658692147, + 0.05441988658692147, + 0.10728135160392221, + 0.026715085875895134, + 0.14450810443787335, + 0.026715085875895134, + 0.02322409292239514, + 0.1330167468105042, + 0.1330167468105042, + 0.00014887904019893265, + 0.00014887904019893265, + 0.08451527765109415, + 0.026542144481624858, + 0.43763241689829535, + 0.43763241689829535, + 0.01767861944224151, + 0.01767861944224151, + 0.023488265120734757, + 0.026542144481624858, + 0.02776683292218613, + 0.0680815492357526, + 0.027278793638660766, + 0.18823458921341646, + 0.5632427639194888, + 0.5632427639194888, + 0.01102885919383593, + 0.01102885919383593, + 0.08925893451308903, + 0.08925893451308903, + 0.12342688988539421, + 0.12342688988539421, + 0.004698994099384254 + ], + "time": 18.033333333333335, + "rotation": [] + }, + { + "weights": [ + 0.15250146441560755, + 0.15250146441560755, + 0.057668989417808326, + 0.02033498801001412, + 0.02033498801001412, + 0.016435776225158148, + 0.0916654395737817, + 0.0916654395737817, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.19442325761275603, + 0.19442325761275603, + 0.06203124866421726, + 0.06203124866421726, + 0.08709255198815026, + 0.024754853896310495, + 0.12922066552298397, + 0.024754853896310495, + 0.025015753128432766, + 0.11375995972858993, + 0.11375995972858993, + 2.2355856502794502e-05, + 2.2355856502794502e-05, + 0.08434244729578486, + 0.02891188961054596, + 0.37173443261001743, + 0.37173443261001743, + 0.013882111185895529, + 0.013882111185895529, + 0.03354880754237194, + 0.02891188961054596, + 0.02538032084703442, + 0.06861750696386604, + 0.025731468041028268, + 0.1570055608238491, + 0.43978813051112997, + 0.43978813051112997, + 0.011986311831644593, + 0.011986311831644593, + 0.06949057544448534, + 0.06949057544448534, + 0.09900926147986727, + 0.09900926147986727, + 0.004808356000908776 + ], + "time": 18.066666666666666, + "rotation": [] + }, + { + "weights": [ + 0.10595833613936381, + 0.10595833613936381, + 0.07434565549095465, + 0.02213743102162951, + 0.02213743102162951, + 0.02090838860188211, + 0.06695554900382236, + 0.06695554900382236, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.1717015409043855, + 0.1717015409043855, + 0.07784585436539984, + 0.07784585436539984, + 0.06978259648950318, + 0.023267640758809927, + 0.11181771851721255, + 0.023267640758809927, + 0.03344560302350489, + 0.08703169001355046, + 0.08703169001355046, + 0.0, + 0.0, + 0.09116158208676738, + 0.02781349076401618, + 0.2876557469722767, + 0.2876557469722767, + 0.012308491837410687, + 0.012308491837410687, + 0.05241279527766716, + 0.02781349076401618, + 0.026226334415730943, + 0.07643526161000837, + 0.028047126336466676, + 0.10812741298051094, + 0.425, + 0.425, + 0.013327460323061252, + 0.013327460323061252, + 0.04954485957998596, + 0.04954485957998596, + 0.07746620682910788, + 0.07746620682910788, + 0.006897089869848313 + ], + "time": 18.1, + "rotation": [] + }, + { + "weights": [ + 0.0561849430566463, + 0.0561849430566463, + 0.10149355407170692, + 0.026200867927659688, + 0.026200867927659688, + 0.028095104364919, + 0.04217857690375977, + 0.04217857690375977, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.15865228986101476, + 0.15865228986101476, + 0.104907176058714, + 0.104907176058714, + 0.0529222906750886, + 0.021934629860964408, + 0.0977605632916599, + 0.021934629860964408, + 0.05185968435135013, + 0.05900194865885837, + 0.05900194865885837, + 0.0, + 0.0, + 0.1047789244445002, + 0.027411816291080228, + 0.1881620779172294, + 0.1881620779172294, + 0.012912621549805806, + 0.012912621549805806, + 0.07582354684670763, + 0.027411816291080228, + 0.034186972405026536, + 0.08844027407011201, + 0.03502236184493009, + 0.07434832569287739, + 0.425, + 0.425, + 0.015717782508921453, + 0.015717782508921453, + 0.02854590310252641, + 0.02854590310252641, + 0.06332477188471383, + 0.06332477188471383, + 0.009431925840092958 + ], + "time": 18.133333333333333, + "rotation": [] + }, + { + "weights": [ + 0.024634447155558306, + 0.024634447155558306, + 0.12528790415245653, + 0.03508025381659506, + 0.03508025381659506, + 0.033253736267892665, + 0.02687358191274864, + 0.02687358191274864, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.1531006819222654, + 0.1531006819222654, + 0.13494422570479153, + 0.13494422570479153, + 0.05126333, + 0.020862115541606132, + 0.11083889280533295, + 0.020862115541606132, + 0.06982450560913703, + 0.04040091094313832, + 0.04040091094313832, + 0.0, + 0.0, + 0.11858553371563242, + 0.02664547940944225, + 0.1266851533949374, + 0.1266851533949374, + 0.014426021408669793, + 0.014426021408669793, + 0.08616619593197741, + 0.02664547940944225, + 0.047302081378138766, + 0.09761911897634969, + 0.0410671739128171, + 0.07097261870393942, + 0.425, + 0.425, + 0.017589232275558968, + 0.017589232275558968, + 0.015678441341282136, + 0.015678441341282136, + 0.057125678659232085, + 0.057125678659232085, + 0.009266635016063035 + ], + "time": 18.166666666666668, + "rotation": [] + }, + { + "weights": [ + 0.019040712950066933, + 0.019040712950066933, + 0.12959841942756753, + 0.03939012085247941, + 0.03939012085247941, + 0.03171237749408701, + 0.022108413743197296, + 0.022108413743197296, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.14223761517022332, + 0.14223761517022332, + 0.15431551190055137, + 0.15431551190055137, + 0.05126333, + 0.022086050898171228, + 0.15163917847798788, + 0.022086050898171228, + 0.07529119683638667, + 0.034279208108022485, + 0.034279208108022485, + 0.0, + 0.0, + 0.12390089792712604, + 0.021657756986286553, + 0.12582243019981038, + 0.12582243019981038, + 0.013461712589297362, + 0.013461712589297362, + 0.07856881547253575, + 0.021657756986286553, + 0.05427805459620999, + 0.09667244473282166, + 0.038162515900116774, + 0.08125542890356507, + 0.425, + 0.425, + 0.017401475718495787, + 0.017401475718495787, + 0.011482812609067371, + 0.011482812609067371, + 0.05547585334475409, + 0.05547585334475409, + 0.0055393753379431275 + ], + "time": 18.2, + "rotation": [] + }, + { + "weights": [ + 0.028518581177507114, + 0.028518581177507114, + 0.11035070376736772, + 0.03309557884931563, + 0.03309557884931563, + 0.027511886720146435, + 0.021609543796096517, + 0.021609543796096517, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.11980822160840027, + 0.11980822160840027, + 0.15594581397516377, + 0.15594581397516377, + 0.05126333, + 0.02569933455739123, + 0.18007914815630222, + 0.02569933455739123, + 0.06157103750322543, + 0.04708531743713785, + 0.04708531743713785, + 0.0, + 0.0, + 0.11326178546462734, + 0.01186020003099526, + 0.14205139449664517, + 0.14205139449664517, + 0.009746830325041492, + 0.009746830325041492, + 0.05973714121750419, + 0.01186020003099526, + 0.04649410801274434, + 0.08306927978992457, + 0.02945617378822393, + 0.07675848571317533, + 0.425, + 0.425, + 0.014820522538253231, + 0.014820522538253231, + 0.011775747926107468, + 0.011775747926107468, + 0.05496147528745548, + 0.05496147528745548, + 0.0019162146374583225 + ], + "time": 18.233333333333334, + "rotation": [] + }, + { + "weights": [ + 0.02544480841606854, + 0.02544480841606854, + 0.0805388354829379, + 0.02379910621315002, + 0.02379910621315002, + 0.026211413208927413, + 0.015645644973431308, + 0.015645644973431308, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.08283625229128765, + 0.08283625229128765, + 0.14173928531152855, + 0.14173928531152855, + 0.05126333, + 0.02831405168967008, + 0.16500625848770134, + 0.02831405168967008, + 0.03984874545463491, + 0.06707497526492387, + 0.06707497526492387, + 0.00025181962177157354, + 0.00025181962177157354, + 0.09039913724575718, + 0.006762641082916936, + 0.12061265941177089, + 0.12061265941177089, + 0.005636911386890066, + 0.005636911386890066, + 0.040227664581366916, + 0.006762641082916936, + 0.03067053375499587, + 0.06028896208320341, + 0.02298522421291895, + 0.05122148160423548, + 0.425, + 0.425, + 0.011236844653529773, + 0.011236844653529773, + 0.010198782544050891, + 0.010198782544050891, + 0.05420222500000001, + 0.05420222500000001, + 0.0010753823710339398 + ], + "time": 18.266666666666666, + "rotation": [] + }, + { + "weights": [ + 0.015046101382800502, + 0.015046101382800502, + 0.05999279107366286, + 0.01854699764988013, + 0.01854699764988013, + 0.028088906726666845, + 0.01153648892151457, + 0.01153648892151457, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.11606851252061974, + 0.11606851252061974, + 0.05126333, + 0.027877707399251796, + 0.1237087975229535, + 0.027877707399251796, + 0.024353947011487808, + 0.07734196819365022, + 0.07734196819365022, + 0.0003432110909904718, + 0.0003432110909904718, + 0.06900413866553984, + 0.0038689284585416246, + 0.09423336024795254, + 0.09423336024795254, + 0.007851665653288358, + 0.007851665653288358, + 0.049016888652528984, + 0.0038689284585416246, + 0.019995918763535347, + 0.040514390809195354, + 0.02879710436931677, + 0.02823106774262018, + 0.425, + 0.425, + 0.008069374492125848, + 0.008069374492125848, + 0.010546968677746392, + 0.010546968677746392, + 0.05420222500000001, + 0.05420222500000001, + 0.002092592498021465 + ], + "time": 18.3, + "rotation": [] + }, + { + "weights": [ + 0.006469311032976418, + 0.006469311032976418, + 0.05465527538742334, + 0.016409170787800378, + 0.016409170787800378, + 0.026162094197102942, + 0.01043648181616195, + 0.01043648181616195, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.09163180004273136, + 0.09163180004273136, + 0.05126333, + 0.02699988201562268, + 0.09755517142159592, + 0.02699988201562268, + 0.02173770703375338, + 0.061520553433469335, + 0.061520553433469335, + 0.008060219780142807, + 0.008060219780142807, + 0.058040449342557324, + 0.01336390063432709, + 0.08464228808879848, + 0.08464228808879848, + 0.01561332651014838, + 0.01561332651014838, + 0.12297862874610074, + 0.01336390063432709, + 0.01718732363411357, + 0.033154647903782954, + 0.0365357247846467, + 0.018892341958624964, + 0.425, + 0.425, + 0.0062905015157801725, + 0.0062905015157801725, + 0.008743190831903896, + 0.008743190831903896, + 0.05420222500000001, + 0.05420222500000001, + 0.0030856572889855914 + ], + "time": 18.333333333333332, + "rotation": [] + }, + { + "weights": [ + 0.002635904561196052, + 0.002635904561196052, + 0.06408259123563763, + 0.01652993240581853, + 0.01652993240581853, + 0.021667517402342372, + 0.009454400910596756, + 0.009454400910596756, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.08086028748324933, + 0.08086028748324933, + 0.05126333, + 0.028942777581336832, + 0.10028513704027442, + 0.028942777581336832, + 0.022420001189623548, + 0.03229458427854945, + 0.03229458427854945, + 0.03716488337410345, + 0.03716488337410345, + 0.05480362113033019, + 0.04259307365864512, + 0.07084842090095789, + 0.07084842090095789, + 0.019557072781026356, + 0.019557072781026356, + 0.26798357665538775, + 0.04259307365864512, + 0.02229183986783026, + 0.05261017978191372, + 0.03302635837878498, + 0.013948079517909452, + 0.425, + 0.425, + 0.004996212486709864, + 0.004996212486709864, + 0.0031385064657245346, + 0.0031385064657245346, + 0.05420222500000001, + 0.05420222500000001, + 0.0036757831860865847 + ], + "time": 18.366666666666667, + "rotation": [] + }, + { + "weights": [ + 0.0025474813899823583, + 0.0025474813899823583, + 0.07742476356881, + 0.016543208382510458, + 0.016543208382510458, + 0.018783970070736736, + 0.005918289082390918, + 0.005918289082390918, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.08654503396579191, + 0.08654503396579191, + 0.05126333, + 0.032203858497775614, + 0.12552477632250097, + 0.032203858497775614, + 0.018863154255918085, + 0.010967925563454618, + 0.010967925563454618, + 0.08531987223242006, + 0.08531987223242006, + 0.049919105959790065, + 0.08853378180148341, + 0.03829317188688684, + 0.03829317188688684, + 0.017688057970787787, + 0.017688057970787787, + 0.4289551966956682, + 0.08853378180148341, + 0.042558929643460655, + 0.0941971023167882, + 0.019791987964085156, + 0.005367357177393774, + 0.425, + 0.425, + 0.003660429316971981, + 0.003660429316971981, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.00373627013925995 + ], + "time": 18.4, + "rotation": [] + }, + { + "weights": [ + 0.0024227253028324654, + 0.0024227253028324654, + 0.08889559145484646, + 0.015665918429534093, + 0.015665918429534093, + 0.016829089926821836, + 0.0034220279061368507, + 0.0034220279061368507, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.10240682406084872, + 0.10240682406084872, + 0.05126333, + 0.03643502789948666, + 0.15545908791678284, + 0.03643502789948666, + 0.014534407428332728, + 0.005790589244237961, + 0.005790589244237961, + 0.1268862919722284, + 0.1268862919722284, + 0.04402440743786945, + 0.1343301980090992, + 0.014117908052035727, + 0.014117908052035727, + 0.018136622251144464, + 0.018136622251144464, + 0.5262883697237284, + 0.1343301980090992, + 0.0792688236704894, + 0.14204308518341602, + 0.01171175241470336, + 0.0, + 0.425, + 0.425, + 0.0024429297074675545, + 0.0024429297074675545, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.0032051270029374514 + ], + "time": 18.433333333333334, + "rotation": [] + }, + { + "weights": [ + 0.002018113860062189, + 0.002018113860062189, + 0.08848906521286279, + 0.014926525, + 0.014926525, + 0.011491846506084707, + 0.002365874838350073, + 0.002365874838350073, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.12063141241669648, + 0.12063141241669648, + 0.05126333, + 0.04542610102466172, + 0.19081458159855424, + 0.04542610102466172, + 0.015140493001256663, + 0.005186647283179406, + 0.005186647283179406, + 0.1334883255192211, + 0.1334883255192211, + 0.03940277307161261, + 0.1573932700391326, + 0.007792855426669113, + 0.007792855426669113, + 0.020305889818285183, + 0.020305889818285183, + 0.498655163816043, + 0.1573932700391326, + 0.1048293124352182, + 0.15948622950485766, + 0.010302865824529097, + 0.0, + 0.425, + 0.425, + 0.0015560041740536677, + 0.0015560041740536677, + 0.0017968711044107155, + 0.0017968711044107155, + 0.05420222500000001, + 0.05420222500000001, + 0.002124616823026111 + ], + "time": 18.466666666666665, + "rotation": [] + }, + { + "weights": [ + 0.0008892966434359532, + 0.0008892966434359532, + 0.07928412130900787, + 0.014926525, + 0.014926525, + 0.008548238234860553, + 0.0020969378229762814, + 0.0020969378229762814, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.13156404718756667, + 0.13156404718756667, + 0.05126333, + 0.05288033006446699, + 0.22930224043982356, + 0.05288033006446699, + 0.01592976147575037, + 0.028809524779873197, + 0.028809524779873197, + 0.09527498161154128, + 0.09527498161154128, + 0.03386300706437654, + 0.13026301600038998, + 0.010379060144935327, + 0.010379060144935327, + 0.01659126204571553, + 0.01659126204571553, + 0.3348752404962265, + 0.13026301600038998, + 0.09570640687431603, + 0.15452999004295886, + 0.00649205244013241, + 0.0, + 0.425, + 0.425, + 0.0012785555049777018, + 0.0012785555049777018, + 0.00271264419757894, + 0.00271264419757894, + 0.05420222500000001, + 0.05420222500000001, + 0.0013293515890836706 + ], + "time": 18.5, + "rotation": [] + }, + { + "weights": [ + 0.004657588739480288, + 0.004657588739480288, + 0.0639160930046013, + 0.014926525, + 0.014926525, + 0.0047871858945914645, + 0.001617668056860565, + 0.001617668056860565, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.12981216130512097, + 0.12981216130512097, + 0.05126333, + 0.05585618380989344, + 0.2612766119412012, + 0.05585618380989344, + 0.013749703285949563, + 0.11326902157493993, + 0.11326902157493993, + 0.04369676862976378, + 0.04369676862976378, + 0.02648584624486309, + 0.06985562812270858, + 0.019466219576341752, + 0.019466219576341752, + 0.006503778350140363, + 0.006503778350140363, + 0.14972832282739015, + 0.06985562812270858, + 0.07440610591854363, + 0.14695053483758644, + 0.0023910268076828525, + 0.007709828657763338, + 0.425, + 0.425, + 0.002638932743242807, + 0.002638932743242807, + 0.0017743626210306365, + 0.0017743626210306365, + 0.05420222500000001, + 0.05420222500000001, + 0.001994776166975497 + ], + "time": 18.533333333333335, + "rotation": [] + }, + { + "weights": [ + 0.011208797299436156, + 0.011208797299436156, + 0.0475335040262767, + 0.014926525, + 0.014926525, + 0.001062828089509691, + 0.003050664200314452, + 0.003050664200314452, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.12165891538773257, + 0.12165891538773257, + 0.05126333, + 0.054722914312567, + 0.2636483584131512, + 0.054722914312567, + 0.010484399646520608, + 0.23527196329087008, + 0.23527196329087008, + 0.010675042375390005, + 0.010675042375390005, + 0.016753832144396637, + 0.019961621625614996, + 0.02840264269283838, + 0.02840264269283838, + 6.308872252702648e-05, + 6.308872252702648e-05, + 0.04062222782522435, + 0.019961621625614996, + 0.0634041811738695, + 0.13819202759436192, + 0.002406156488827294, + 0.02265391599919113, + 0.425, + 0.425, + 0.005686229126793995, + 0.005686229126793995, + 0.0006669924195323665, + 0.0006669924195323665, + 0.05420222500000001, + 0.05420222500000001, + 0.003264134350631917 + ], + "time": 18.566666666666666, + "rotation": [] + }, + { + "weights": [ + 0.015795214341155113, + 0.015795214341155113, + 0.03346372896007127, + 0.014926525, + 0.014926525, + 0.0, + 0.005482842340799312, + 0.005482842340799312, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.11319738732916962, + 0.11319738732916962, + 0.05126333, + 0.05255529806017873, + 0.2259440439088003, + 0.05255529806017873, + 0.010038261168769422, + 0.3336329071649482, + 0.3336329071649482, + 0.003190094154145165, + 0.003190094154145165, + 0.009730954095721238, + 0.004464845425848438, + 0.03686192413525919, + 0.03686192413525919, + 0.0, + 0.0, + 0.017644336447119692, + 0.004464845425848438, + 0.05689239459378376, + 0.10937609821557992, + 0.004785363376140592, + 0.052943479163306065, + 0.425, + 0.425, + 0.009004180841147893, + 0.009004180841147893, + 0.0005110031259911394, + 0.0005110031259911394, + 0.05420222500000001, + 0.05420222500000001, + 0.0031868671998381603 + ], + "time": 18.6, + "rotation": [] + }, + { + "weights": [ + 0.014459659105965063, + 0.014459659105965063, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0009964449065072165, + 0.006467332571212731, + 0.006467332571212731, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.10141037223594523, + 0.10141037223594523, + 0.05126333, + 0.04549069622797623, + 0.16870478085109158, + 0.04549069622797623, + 0.009598910595689496, + 0.36878383138350057, + 0.36878383138350057, + 0.0012438216043769233, + 0.0012438216043769233, + 0.006614751688071654, + 0.01119448198005556, + 0.06278305851987426, + 0.06278305851987426, + 0.0, + 0.0, + 0.009887613781860888, + 0.01119448198005556, + 0.038133546390703724, + 0.07240919683660775, + 0.0061092476759638074, + 0.11470285010124948, + 0.425, + 0.425, + 0.012793083100446623, + 0.012793083100446623, + 0.0023032752131777103, + 0.0023032752131777103, + 0.05420222500000001, + 0.05420222500000001, + 0.0018458478951028407 + ], + "time": 18.633333333333333, + "rotation": [] + }, + { + "weights": [ + 0.01087559961846896, + 0.01087559961846896, + 0.02888475, + 0.014926525, + 0.014926525, + 0.012761115814958288, + 0.004807604377024937, + 0.004807604377024937, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.08550225283418378, + 0.08550225283418378, + 0.05126333, + 0.036784511112741045, + 0.1224467468261718, + 0.036784511112741045, + 0.009743492145623475, + 0.3546129162822449, + 0.3546129162822449, + 0.0003237805759168359, + 0.0003237805759168359, + 0.010318555895771292, + 0.03120241193100808, + 0.1353412780378545, + 0.1353412780378545, + 0.0, + 0.0, + 0.005164071225694243, + 0.03120241193100808, + 0.019632726269108895, + 0.05314888379403519, + 0.005702023208141323, + 0.2055460313601152, + 0.425, + 0.425, + 0.016768303556101656, + 0.016768303556101656, + 0.01644760625702993, + 0.01644760625702993, + 0.05420222500000001, + 0.05420222500000001, + 0.0002165910654834336 + ], + "time": 18.666666666666668, + "rotation": [] + }, + { + "weights": [ + 0.007462836615741247, + 0.007462836615741247, + 0.02888475, + 0.014926525, + 0.014926525, + 0.03518579133919305, + 0.0023587456305644325, + 0.0023587456305644325, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07375794585262022, + 0.07375794585262022, + 0.05126333, + 0.03172956874629701, + 0.09164512200014927, + 0.03172956874629701, + 0.010612557243023594, + 0.3079309614641324, + 0.3079309614641324, + 0.0, + 0.0, + 0.017086612752505698, + 0.05550253190366282, + 0.23348315198506614, + 0.23348315198506614, + 0.0012097770082099093, + 0.0012097770082099093, + 0.005170518505786143, + 0.05550253190366282, + 0.011237799695559901, + 0.04952835057462962, + 0.005959567214761458, + 0.2914919644594191, + 0.425, + 0.425, + 0.01957550476704324, + 0.01957550476704324, + 0.03494530309523853, + 0.03494530309523853, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 18.7, + "rotation": [] + }, + { + "weights": [ + 0.006528993802411208, + 0.006528993802411208, + 0.02888475, + 0.014926525, + 0.014926525, + 0.059905196619885276, + 0.0012673579289444836, + 0.0012673579289444836, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06800059495227673, + 0.06800059495227673, + 0.05126333, + 0.030743604145768023, + 0.06282670004027227, + 0.030743604145768023, + 0.010581219622067036, + 0.25676860851900907, + 0.25676860851900907, + 8.888228131192064e-05, + 8.888228131192064e-05, + 0.024853925087622214, + 0.07114255183509414, + 0.3131785305482999, + 0.3131785305482999, + 0.0024091523672853184, + 0.0024091523672853184, + 0.00796965850251061, + 0.07114255183509414, + 0.012481021881103506, + 0.050764222868851225, + 0.005718194374016349, + 0.3460867822170256, + 0.425, + 0.425, + 0.01921095196689877, + 0.01921095196689877, + 0.050427496459867244, + 0.050427496459867244, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 18.733333333333334, + "rotation": [] + }, + { + "weights": [ + 0.013392148699079225, + 0.013392148699079225, + 0.02888475, + 0.014926525, + 0.014926525, + 0.07447646089962547, + 0.00264070020722491, + 0.00264070020722491, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06697847087468417, + 0.06697847087468417, + 0.05126333, + 0.030610529272507934, + 0.0389650372947965, + 0.030610529272507934, + 0.010504592156835958, + 0.20532632470130907, + 0.20532632470130907, + 0.0002926607802510261, + 0.0002926607802510261, + 0.04112130222576002, + 0.07636596076190469, + 0.36799964542899793, + 0.36799964542899793, + 0.0030910457617470176, + 0.0030910457617470176, + 0.00981002742690699, + 0.07636596076190469, + 0.01643153971859386, + 0.04918089807033536, + 0.007485902202980855, + 0.3743418208190371, + 0.425, + 0.425, + 0.01723117255738802, + 0.01723117255738802, + 0.06350471473165917, + 0.06350471473165917, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 18.766666666666666, + "rotation": [] + }, + { + "weights": [ + 0.041318425190235854, + 0.041318425190235854, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0666965026940618, + 0.010256094758265777, + 0.010256094758265777, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06916697046586441, + 0.06916697046586441, + 0.05710498743823593, + 0.03188337872603108, + 0.037785710096359226, + 0.03188337872603108, + 0.012073453941515506, + 0.15171237476170052, + 0.15171237476170052, + 0.00010779148765972685, + 0.00010779148765972685, + 0.07601859016077854, + 0.06998965117548189, + 0.4250612863472527, + 0.4250612863472527, + 0.004070648284895077, + 0.004070648284895077, + 0.011747795236962174, + 0.06998965117548189, + 0.017493487681661323, + 0.044056788725512344, + 0.007706892596823825, + 0.38253479174205207, + 0.425, + 0.425, + 0.0173277754655906, + 0.0173277754655906, + 0.0833001757838896, + 0.0833001757838896, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 18.8, + "rotation": [] + }, + { + "weights": [ + 0.10249953730297934, + 0.10249953730297934, + 0.04138641000858373, + 0.014926525, + 0.014926525, + 0.04171071989195685, + 0.024570635686229365, + 0.024570635686229365, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.11880639626511498, + 0.11880639626511498, + 0.08286294734903739, + 0.08286294734903739, + 0.08011587443096292, + 0.031828287190624624, + 0.06642223060131068, + 0.031828287190624624, + 0.022424309434635283, + 0.09461840673216745, + 0.09461840673216745, + 0.0, + 0.0, + 0.12505227572151584, + 0.054665452601121975, + 0.4795258066483904, + 0.4795258066483904, + 0.004930528067052362, + 0.004930528067052362, + 0.01878954068358454, + 0.054665452601121975, + 0.01804030548248971, + 0.043050798348018074, + 0.006349425443581169, + 0.3608528205326623, + 0.425, + 0.425, + 0.02100386034165109, + 0.02100386034165109, + 0.0928915898182562, + 0.0928915898182562, + 0.05741631078323397, + 0.05741631078323397, + 0.0 + ], + "time": 18.833333333333332, + "rotation": [] + }, + { + "weights": [ + 0.18001977471368644, + 0.18001977471368644, + 0.05196431928447312, + 0.014926525, + 0.014926525, + 0.01937148028186388, + 0.04013856787766727, + 0.04013856787766727, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.20489596394555898, + 0.20489596394555898, + 0.10692227631807322, + 0.10692227631807322, + 0.0987460628151893, + 0.02825254622314656, + 0.11051167743546615, + 0.02825254622314656, + 0.039460583456924964, + 0.054366736592990975, + 0.054366736592990975, + 5.2811281389689774e-05, + 5.2811281389689774e-05, + 0.16372650435992642, + 0.036308942894850434, + 0.5072430023125236, + 0.5072430023125236, + 0.005192861706018445, + 0.005192861706018445, + 0.029965921810695084, + 0.036308942894850434, + 0.0190469382064683, + 0.05428606569766995, + 0.006038892162697652, + 0.30611839847905276, + 0.425, + 0.425, + 0.0257320663332939, + 0.0257320663332939, + 0.08668741722192078, + 0.08668741722192078, + 0.07547947591436757, + 0.07547947591436757, + 0.0063551900376166565 + ], + "time": 18.866666666666667, + "rotation": [] + }, + { + "weights": [ + 0.2378316654690673, + 0.2378316654690673, + 0.05241257718631197, + 0.014926525, + 0.014926525, + 0.01160767770239284, + 0.05095579472503489, + 0.05095579472503489, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.26676569793905514, + 0.26676569793905514, + 0.13460567306194982, + 0.13460567306194982, + 0.1076333114079066, + 0.020761958536292813, + 0.14552948679242808, + 0.020761958536292813, + 0.058437448048165835, + 0.03835337837891917, + 0.03835337837891917, + 0.0005107895248303454, + 0.0005107895248303454, + 0.17666950736727022, + 0.024358660248773423, + 0.5027518080813541, + 0.5027518080813541, + 0.00555404938225235, + 0.00555404938225235, + 0.04557429541434557, + 0.024358660248773423, + 0.01967190642442021, + 0.07290097730500353, + 0.008529440313577647, + 0.23680217010634272, + 0.425, + 0.425, + 0.028892044978482367, + 0.028892044978482367, + 0.07366550229489799, + 0.07366550229489799, + 0.09892689851777889, + 0.09892689851777889, + 0.014488994436604629 + ], + "time": 18.9, + "rotation": [] + }, + { + "weights": [ + 0.26000793012125134, + 0.26000793012125134, + 0.05083078976188382, + 0.014926525, + 0.014926525, + 0.00920615281377516, + 0.05525721282299071, + 0.05525721282299071, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.3003600712333404, + 0.3003600712333404, + 0.1517971095229897, + 0.1517971095229897, + 0.10915077371256685, + 0.018701372827802362, + 0.16153075558798644, + 0.018701372827802362, + 0.07602485774883197, + 0.03286978251167702, + 0.03286978251167702, + 0.0005159245005675723, + 0.0005159245005675723, + 0.17673172610146642, + 0.019100887182035592, + 0.5027965226343697, + 0.5027965226343697, + 0.005565091834536616, + 0.005565091834536616, + 0.05553492786628855, + 0.019100887182035592, + 0.021115897170134942, + 0.0854125870125634, + 0.007375052571296686, + 0.1854202376944676, + 0.425, + 0.425, + 0.03051590038197378, + 0.03051590038197378, + 0.06568958647549146, + 0.06568958647549146, + 0.10796613267489835, + 0.10796613267489835, + 0.017952318915298988 + ], + "time": 18.933333333333334, + "rotation": [] + }, + { + "weights": [ + 0.250616745757205, + 0.250616745757205, + 0.0454205332057816, + 0.014926525, + 0.014926525, + 0.014262242402349141, + 0.05364856163838075, + 0.05364856163838075, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.3070688956550186, + 0.3070688956550186, + 0.16185846541609072, + 0.16185846541609072, + 0.10360763583864475, + 0.01833263153245892, + 0.1612809423037936, + 0.01833263153245892, + 0.09259245539350161, + 0.04178868713123455, + 0.04178868713123455, + 0.00060862510082578, + 0.00060862510082578, + 0.16086919094834995, + 0.02037346206073248, + 0.49844970532825983, + 0.49844970532825983, + 0.005410282766180375, + 0.005410282766180375, + 0.062471561240298366, + 0.02037346206073248, + 0.02286751280937875, + 0.09506961745875217, + 0.004118576645851127, + 0.1435640152011596, + 0.425, + 0.425, + 0.030674115461962515, + 0.030674115461962515, + 0.060263218358159, + 0.060263218358159, + 0.10385363282901891, + 0.10385363282901891, + 0.018271423211055116 + ], + "time": 18.966666666666665, + "rotation": [] + }, + { + "weights": [ + 0.2184529272015806, + 0.2184529272015806, + 0.047984006154496564, + 0.021568543907867496, + 0.021568543907867496, + 0.013346579342472253, + 0.04665037715766369, + 0.04665037715766369, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.2648755463772785, + 0.2648755463772785, + 0.15004734730867486, + 0.15004734730867486, + 0.08717381338265769, + 0.027249108877276502, + 0.2302330326839367, + 0.027249108877276502, + 0.08152995840019098, + 0.07833716516287952, + 0.07833716516287952, + 0.0, + 0.0, + 0.1409021257282214, + 0.018532399168542123, + 0.42903234422713665, + 0.42903234422713665, + 0.004992564316002684, + 0.004992564316002684, + 0.055137225865912215, + 0.018532399168542123, + 0.0505659574919006, + 0.10488956082840345, + 0.0041820807684035425, + 0.20523913524994192, + 0.4354360675244102, + 0.4354360675244102, + 0.008392529768542354, + 0.008392529768542354, + 0.051093089074073714, + 0.051093089074073714, + 0.08789299721557153, + 0.08789299721557153, + 0.015894234948443078 + ], + "time": 19.0, + "rotation": [] + }, + { + "weights": [ + 0.18145283041965377, + 0.18145283041965377, + 0.04739647525407012, + 0.02067372531358673, + 0.02067372531358673, + 0.010509725624606676, + 0.03832505116948763, + 0.03832505116948763, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.21519058222571974, + 0.21519058222571974, + 0.13111141820748634, + 0.13111141820748634, + 0.07031566091768789, + 0.028422452720977803, + 0.2769348183132351, + 0.028422452720977803, + 0.06509849936479606, + 0.1300719877793674, + 0.1300719877793674, + 0.0, + 0.0, + 0.11905306006471301, + 0.014634687653077476, + 0.3391235564791017, + 0.3391235564791017, + 0.004577326047278581, + 0.004577326047278581, + 0.045931776994395775, + 0.014634687653077476, + 0.08115349078462232, + 0.11459875206152588, + 0.0063182520369688576, + 0.2619685612973709, + 0.42978149099009355, + 0.42978149099009355, + 0.010458686145998172, + 0.010458686145998172, + 0.04195743880811185, + 0.04195743880811185, + 0.0708968716097019, + 0.0708968716097019, + 0.01322493439628962 + ], + "time": 19.033333333333335, + "rotation": [] + }, + { + "weights": [ + 0.143650969277535, + 0.143650969277535, + 0.03973488656005683, + 0.018889670049802916, + 0.018889670049802916, + 0.008319131125296829, + 0.0303055049452398, + 0.0303055049452398, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.1686233528756667, + 0.1686233528756667, + 0.1099747979215212, + 0.1099747979215212, + 0.05513373924685368, + 0.031259676957548936, + 0.2574313247203825, + 0.031259676957548936, + 0.05003254038414779, + 0.19523667081126134, + 0.19523667081126134, + 0.0, + 0.0, + 0.09556873698851878, + 0.010475436631324019, + 0.250686287627156, + 0.250686287627156, + 0.004112781876964224, + 0.004112781876964224, + 0.03656731199672708, + 0.010475436631324019, + 0.10079987437597338, + 0.11342480587107784, + 0.008788467198610293, + 0.2717135738049231, + 0.425, + 0.425, + 0.011184824907353935, + 0.011184824907353935, + 0.03378424132242794, + 0.03378424132242794, + 0.06199989005845884, + 0.06199989005845884, + 0.01019457003899981 + ], + "time": 19.066666666666666, + "rotation": [] + }, + { + "weights": [ + 0.10191534569575661, + 0.10191534569575661, + 0.02888475, + 0.016184963589295203, + 0.016184963589295203, + 0.009276865387246695, + 0.021934118323648936, + 0.021934118323648936, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.11705637258433144, + 0.11705637258433144, + 0.08925440923443854, + 0.08925440923443854, + 0.05126333, + 0.03648183555753263, + 0.18987404865877952, + 0.03648183555753263, + 0.03330475436080065, + 0.2735064010180177, + 0.2735064010180177, + 0.0, + 0.0, + 0.07022794098371543, + 0.011467566256899193, + 0.1620212952473332, + 0.1620212952473332, + 0.005178710507849848, + 0.005178710507849848, + 0.024724751662108135, + 0.011467566256899193, + 0.11474876513793349, + 0.09566965933356959, + 0.02041257573735144, + 0.2577612314905437, + 0.425, + 0.425, + 0.012132686114027376, + 0.012132686114027376, + 0.02633126217517111, + 0.02633126217517111, + 0.05420222500000001, + 0.05420222500000001, + 0.0065367917308495034 + ], + "time": 19.1, + "rotation": [] + }, + { + "weights": [ + 0.055784806125119366, + 0.055784806125119366, + 0.02888475, + 0.014926525, + 0.014926525, + 0.02002089235348764, + 0.012284508090130462, + 0.012284508090130462, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.06000947749074279, + 0.06000947749074279, + 0.06779336922377545, + 0.06779336922377545, + 0.05126333, + 0.04246470161426382, + 0.10920013048332554, + 0.04246470161426382, + 0.015431923988215017, + 0.3471565994681143, + 0.3471565994681143, + 0.0, + 0.0, + 0.042431331383583855, + 0.02139732789362266, + 0.06852000297040853, + 0.06852000297040853, + 0.007475828083776896, + 0.007475828083776896, + 0.010743985142856568, + 0.02139732789362266, + 0.12163956327300486, + 0.06961463781441145, + 0.05699925873251184, + 0.2387905076206945, + 0.425, + 0.425, + 0.014801625245687903, + 0.014801625245687903, + 0.02498371554982092, + 0.02498371554982092, + 0.05420222500000001, + 0.05420222500000001, + 0.0025149647773680577 + ], + "time": 19.133333333333333, + "rotation": [] + }, + { + "weights": [ + 0.024079577191447703, + 0.024079577191447703, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0385125309806697, + 0.0039718247531932175, + 0.0039718247531932175, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05128070791613079, + 0.05128070791613079, + 0.05126333, + 0.04349989229069175, + 0.04983524800320057, + 0.04349989229069175, + 0.003183261034154915, + 0.3751308297776444, + 0.3751308297776444, + 0.0, + 0.0, + 0.02041298689890879, + 0.03746386450620328, + 0.010098595857924313, + 0.010098595857924313, + 0.009070618899957254, + 0.009070618899957254, + 0.0007758096622645207, + 0.03746386450620328, + 0.11759575682331098, + 0.05126528655996125, + 0.10073771412883481, + 0.22517438316831767, + 0.425, + 0.425, + 0.018641341332270165, + 0.018641341332270165, + 0.026784573681652532, + 0.026784573681652532, + 0.05420222500000001, + 0.05420222500000001, + 5.2713849866875464e-05 + ], + "time": 19.166666666666668, + "rotation": [] + }, + { + "weights": [ + 0.012078656978449034, + 0.012078656978449034, + 0.02888475, + 0.014926525, + 0.014926525, + 0.05622896666277426, + 0.0002316760669025228, + 0.0002316760669025228, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.04082450811857113, + 0.019660907680890984, + 0.04082450811857113, + 0.0, + 0.3488222532354445, + 0.3488222532354445, + 0.00010902942527365883, + 0.00010902942527365883, + 0.009367919892680883, + 0.05203493596301696, + 0.0014916854260527317, + 0.0014916854260527317, + 0.007648296629135702, + 0.007648296629135702, + 0.0, + 0.05203493596301696, + 0.10035001362921017, + 0.04440476787333583, + 0.11569898011428964, + 0.2199750453294539, + 0.425, + 0.425, + 0.02135014248563318, + 0.02135014248563318, + 0.024169847049883425, + 0.024169847049883425, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 19.2, + "rotation": [] + }, + { + "weights": [ + 0.013001269607671662, + 0.013001269607671662, + 0.02888475, + 0.014926525, + 0.014926525, + 0.06637017780116623, + 0.0008677505488906582, + 0.0008677505488906582, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03665507531591822, + 0.012235160725457318, + 0.03665507531591822, + 0.00036202919270311045, + 0.2947424877967152, + 0.2947424877967152, + 0.0005488418235576576, + 0.0005488418235576576, + 0.008269177802971425, + 0.06134368926286694, + 0.025515949087483527, + 0.025515949087483527, + 0.005403835752180642, + 0.005403835752180642, + 0.0011973191917474773, + 0.06134368926286694, + 0.07919215027775078, + 0.04470378437212533, + 0.09331084287592338, + 0.2283023919378007, + 0.425, + 0.425, + 0.02238101610115595, + 0.02238101610115595, + 0.01470009322677339, + 0.01470009322677339, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 19.233333333333334, + "rotation": [] + }, + { + "weights": [ + 0.010567223280668253, + 0.010567223280668253, + 0.02888475, + 0.014926525, + 0.014926525, + 0.07054377719759937, + 0.0014846536730016972, + 0.0014846536730016972, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03560761404126303, + 0.011356821102755404, + 0.03560761404126303, + 0.0008875069657473689, + 0.2529031393783432, + 0.2529031393783432, + 0.0008580233785323793, + 0.0008580233785323793, + 0.007302065193653102, + 0.06507590434380936, + 0.04469488247164656, + 0.04469488247164656, + 0.003590544925204342, + 0.003590544925204342, + 0.0034210018747087016, + 0.06507590434380936, + 0.06241813791649678, + 0.0451007368309157, + 0.06399445735982481, + 0.2400373956986835, + 0.425, + 0.425, + 0.02219505041837691, + 0.02219505041837691, + 0.007946049448634892, + 0.007946049448634892, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 19.266666666666666, + "rotation": [] + }, + { + "weights": [ + 0.009014818790767869, + 0.009014818790767869, + 0.02888475, + 0.014926525, + 0.014926525, + 0.07032445871404236, + 0.0019587624219379244, + 0.0019587624219379244, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03554684609476429, + 0.010317193780626564, + 0.03554684609476429, + 0.0007109995523933318, + 0.22827189735003867, + 0.22827189735003867, + 0.0009332870206396488, + 0.0009332870206396488, + 0.0066517928881304565, + 0.06413665679948666, + 0.05916481465101239, + 0.05916481465101239, + 0.003270746022462843, + 0.003270746022462843, + 0.004255236971325106, + 0.06413665679948666, + 0.05375218008245737, + 0.04408464687211171, + 0.05005192746009142, + 0.23515472284385122, + 0.425, + 0.425, + 0.021641549936362664, + 0.021641549936362664, + 0.00591901059129408, + 0.00591901059129408, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 19.3, + "rotation": [] + }, + { + "weights": [ + 0.00932937035603182, + 0.00932937035603182, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0651177960847105, + 0.0019991544008787178, + 0.0019991544008787178, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.035886057831170895, + 0.006538307496479576, + 0.035886057831170895, + 9.214900616955535e-05, + 0.2219362209950173, + 0.2219362209950173, + 0.0010767117315637208, + 0.0010767117315637208, + 0.006507638841867443, + 0.06072171298520902, + 0.05907173401543069, + 0.05907173401543069, + 0.003972611416663441, + 0.003972611416663441, + 0.004738969641870683, + 0.06072171298520902, + 0.055795940543924026, + 0.04203792661428449, + 0.05453387105039184, + 0.20492585684571935, + 0.425, + 0.425, + 0.020908202550240913, + 0.020908202550240913, + 0.0053581515859280286, + 0.0053581515859280286, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 19.333333333333332, + "rotation": [] + }, + { + "weights": [ + 0.01171103832977158, + 0.01171103832977158, + 0.02888475, + 0.014926525, + 0.014926525, + 0.05623191062893183, + 0.0022161316060061954, + 0.0022161316060061954, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.0358142962336908, + 0.0012810324771063656, + 0.0358142962336908, + 0.0, + 0.22550184449979221, + 0.22550184449979221, + 0.0016626827179321208, + 0.0016626827179321208, + 0.006763365332569391, + 0.05684189785804064, + 0.04754185155034062, + 0.04754185155034062, + 0.005036567098328043, + 0.005036567098328043, + 0.005113929949168645, + 0.05684189785804064, + 0.06376547408955434, + 0.039974234146731215, + 0.06892045597944937, + 0.15922851881810587, + 0.425, + 0.425, + 0.020264152586460103, + 0.020264152586460103, + 0.004102912531899552, + 0.004102912531899552, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 19.366666666666667, + "rotation": [] + }, + { + "weights": [ + 0.015266246934022214, + 0.015266246934022214, + 0.02888475, + 0.014926525, + 0.014926525, + 0.045508792996406526, + 0.0030495435398604173, + 0.0030495435398604173, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03481174546994753, + 0.0, + 0.03481174546994753, + 0.0, + 0.22736793501036495, + 0.22736793501036495, + 0.0029182777779975084, + 0.0029182777779975084, + 0.006957740017345969, + 0.0526871424168348, + 0.03655041945832114, + 0.03655041945832114, + 0.004992723571402683, + 0.004992723571402683, + 0.005218818018745096, + 0.0526871424168348, + 0.06962141905512124, + 0.03766745419374532, + 0.08181064607841623, + 0.11395456854786185, + 0.425, + 0.425, + 0.01955223671027591, + 0.01955223671027591, + 0.0028047709858843245, + 0.0028047709858843245, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 19.4, + "rotation": [] + }, + { + "weights": [ + 0.018364926613867273, + 0.018364926613867273, + 0.02888475, + 0.014926525, + 0.014926525, + 0.03516346588730811, + 0.003947700453656058, + 0.003947700453656058, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03370458647910458, + 0.0, + 0.03370458647910458, + 0.0, + 0.21968676703316814, + 0.21968676703316814, + 0.0051761638120348934, + 0.0051761638120348934, + 0.007020317656653264, + 0.04848021896822109, + 0.031217620521783805, + 0.031217620521783805, + 0.004359336942434309, + 0.004359336942434309, + 0.004783212978925021, + 0.04848021896822109, + 0.06827909605843677, + 0.032463018010769555, + 0.09002333794321327, + 0.07740819092307766, + 0.425, + 0.425, + 0.018597621555839255, + 0.018597621555839255, + 0.0012948551614369657, + 0.0012948551614369657, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 19.433333333333334, + "rotation": [] + }, + { + "weights": [ + 0.020820191263088147, + 0.020820191263088147, + 0.02888475, + 0.014926525, + 0.014926525, + 0.025498788378068363, + 0.00431266474271459, + 0.00431266474271459, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03305833019617897, + 0.0, + 0.03305833019617897, + 0.00023158438354065362, + 0.20498763493129174, + 0.20498763493129174, + 0.008205438823040038, + 0.008205438823040038, + 0.006448096994842798, + 0.0445352856069803, + 0.027484439100537966, + 0.027484439100537966, + 0.003810692897864748, + 0.003810692897864748, + 0.004114687968311563, + 0.0445352856069803, + 0.05996806791850495, + 0.023287252389958914, + 0.09620189539023802, + 0.04982016810349053, + 0.425, + 0.425, + 0.017317990490368425, + 0.017317990490368425, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 19.466666666666665, + "rotation": [] + }, + { + "weights": [ + 0.022791885877294187, + 0.022791885877294187, + 0.02888475, + 0.014926525, + 0.014926525, + 0.017941359536988385, + 0.004004687423418673, + 0.004004687423418673, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.032841095107830585, + 0.0, + 0.032841095107830585, + 0.00040607116950143625, + 0.1896318957209586, + 0.1896318957209586, + 0.011243678741157049, + 0.011243678741157049, + 0.005209139202322276, + 0.04003373799579482, + 0.024033525266817624, + 0.024033525266817624, + 0.0031790398593459796, + 0.0031790398593459796, + 0.003161991480737923, + 0.04003373799579482, + 0.04840547846896305, + 0.012759419424193237, + 0.10191572351115086, + 0.0287228325647967, + 0.425, + 0.425, + 0.01598554498382976, + 0.01598554498382976, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 19.5, + "rotation": [] + }, + { + "weights": [ + 0.024258269263165322, + 0.024258269263165322, + 0.02888475, + 0.014926525, + 0.014926525, + 0.013191437827689298, + 0.0037233377474227103, + 0.0037233377474227103, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.032273703326960286, + 0.0, + 0.032273703326960286, + 0.0009675373190215651, + 0.17759645496095922, + 0.17759645496095922, + 0.013354754437293318, + 0.013354754437293318, + 0.004210021559681209, + 0.03439468666911123, + 0.021176551229187407, + 0.021176551229187407, + 0.0017726878502539215, + 0.0017726878502539215, + 0.0015270559183721026, + 0.03439468666911123, + 0.037365985023123854, + 0.005437751380460598, + 0.10529536030122207, + 0.016874696101461126, + 0.425, + 0.425, + 0.014929517039230882, + 0.014929517039230882, + 0.0010444677567907732, + 0.0010444677567907732, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 19.533333333333335, + "rotation": [] + }, + { + "weights": [ + 0.024315890403730514, + 0.024315890403730514, + 0.02888475, + 0.014926525, + 0.014926525, + 0.011265726387500757, + 0.0035755223528082863, + 0.0035755223528082863, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.031093922994854785, + 1.7711094447544868e-05, + 0.031093922994854785, + 0.0011179962561332748, + 0.16849600694009226, + 0.16849600694009226, + 0.01469065444810049, + 0.01469065444810049, + 0.003750133727278026, + 0.02888971322349138, + 0.018703067622014444, + 0.018703067622014444, + 0.0005329695131097516, + 0.0005329695131097516, + 0.0, + 0.02888971322349138, + 0.028759963278259533, + 0.0022878698472465764, + 0.10517147864614207, + 0.013910382453884387, + 0.425, + 0.425, + 0.01411198437213897, + 0.01411198437213897, + 0.003529375565371341, + 0.003529375565371341, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 19.566666666666666, + "rotation": [] + }, + { + "weights": [ + 0.023502082430890615, + 0.023502082430890615, + 0.02888475, + 0.014926525, + 0.014926525, + 0.010666217761380326, + 0.003620882418804933, + 0.003620882418804933, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.029821578778150414, + 0.0, + 0.029821578778150414, + 0.0009699762266661433, + 0.16088668214423307, + 0.16088668214423307, + 0.015617010572126926, + 0.015617010572126926, + 0.0034222749727112886, + 0.024464217945933328, + 0.01626570006566387, + 0.01626570006566387, + 7.14228621550964e-06, + 7.14228621550964e-06, + 0.0, + 0.024464217945933328, + 0.023381845014435892, + 0.001669286883303096, + 0.10169784107378545, + 0.015498495368020865, + 0.425, + 0.425, + 0.013361990622111719, + 0.013361990622111719, + 0.0060396694445184265, + 0.0060396694445184265, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 19.6, + "rotation": [] + }, + { + "weights": [ + 0.022864269438598823, + 0.022864269438598823, + 0.02888475, + 0.014926525, + 0.014926525, + 0.010721586431775768, + 0.003551697245399865, + 0.003551697245399865, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02904736436140809, + 0.0, + 0.02904736436140809, + 0.0006586132870454867, + 0.1649160995227949, + 0.1649160995227949, + 0.017571707955428523, + 0.017571707955428523, + 0.003894451558589933, + 0.022316815608314094, + 0.015197210407682819, + 0.015197210407682819, + 0.0, + 0.0, + 0.0, + 0.022316815608314094, + 0.02199769318103789, + 0.0012289197423628391, + 0.10369956970214839, + 0.01747340404561587, + 0.425, + 0.425, + 0.013320983639785216, + 0.013320983639785216, + 0.008576790323214867, + 0.008576790323214867, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 19.633333333333333, + "rotation": [] + }, + { + "weights": [ + 0.023078780514853327, + 0.023078780514853327, + 0.02888475, + 0.014926525, + 0.014926525, + 0.011180442890950604, + 0.0033829646517655656, + 0.0033829646517655656, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.028870396893827567, + 0.0, + 0.028870396893827567, + 0.0009234061597713395, + 0.1200808833752359, + 0.1200808833752359, + 0.013363003322056356, + 0.013363003322056356, + 0.0033377749153545907, + 0.015172582556094433, + 0.0107258789134877, + 0.0107258789134877, + 0.0, + 0.0, + 0.0, + 0.015172582556094433, + 0.015673926153353272, + 0.0005901535919734406, + 0.07496327349117819, + 0.013470577193158008, + 0.425, + 0.425, + 0.009452770335333684, + 0.009452770335333684, + 0.007094757306788645, + 0.007094757306788645, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 19.666666666666668, + "rotation": [] + }, + { + "weights": [ + 0.02333218843809195, + 0.02333218843809195, + 0.02888475, + 0.014926525, + 0.014926525, + 0.01219183866466794, + 0.0034902783576399067, + 0.0034902783576399067, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.028786421399919642, + 0.0, + 0.028786421399919642, + 0.002014228598480777, + 0.06050100611788882, + 0.06050100611788882, + 0.006879552083356036, + 0.006879552083356036, + 0.0021982547215052997, + 0.007278908065387176, + 0.00526072127478463, + 0.00526072127478463, + 0.0, + 0.0, + 0.00016822518248643198, + 0.007278908065387176, + 0.00793062554938452, + 6.677352956363113e-05, + 0.038097144620759124, + 0.007415292241743627, + 0.425, + 0.425, + 0.004563398267541609, + 0.004563398267541609, + 0.0039062020235827964, + 0.0039062020235827964, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 19.7, + "rotation": [] + }, + { + "weights": [ + 0.022914385981857764, + 0.022914385981857764, + 0.02888475, + 0.014926525, + 0.014926525, + 0.013812376026596334, + 0.004016825869413356, + 0.004016825869413356, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.0287539497473778, + 1.553581442151761e-05, + 0.0287539497473778, + 0.0036737411881663947, + 0.019298052234309034, + 0.019298052234309034, + 0.002056009724736211, + 0.002056009724736211, + 0.001247574963739939, + 0.0022612380342824086, + 0.0015914860154901207, + 0.0015914860154901207, + 0.0001180704257317951, + 0.0001180704257317951, + 0.0005867842771112915, + 0.0022612380342824086, + 0.0028958151170185597, + 2.3093340652329333e-05, + 0.013390867412090286, + 0.004145247489213939, + 0.425, + 0.425, + 0.0012773991652897405, + 0.0012773991652897405, + 0.0017962409662348863, + 0.0017962409662348863, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 19.733333333333334, + "rotation": [] + }, + { + "weights": [ + 0.021548522529857488, + 0.021548522529857488, + 0.02888475, + 0.014926525, + 0.014926525, + 0.01664483653647558, + 0.00523565802723169, + 0.00523565802723169, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.028857014214177808, + 0.00037365809508732367, + 0.028857014214177808, + 0.005266074463725087, + 0.029726366230419684, + 0.029726366230419684, + 0.002856911378247396, + 0.002856911378247396, + 0.0020292970963886794, + 0.003623138219118116, + 0.002973885110446383, + 0.002973885110446383, + 0.00030985881175313654, + 0.00030985881175313654, + 0.0010463305003941053, + 0.003623138219118116, + 0.004877257708992274, + 0.0005248214943068363, + 0.021158132467951084, + 0.008787716052361892, + 0.425, + 0.425, + 0.0021299713807446602, + 0.0021299713807446602, + 0.0031606630395565696, + 0.0031606630395565696, + 0.05420222500000001, + 0.05420222500000001, + 0.0001950894083295548 + ], + "time": 19.766666666666666, + "rotation": [] + }, + { + "weights": [ + 0.019696974514850536, + 0.019696974514850536, + 0.02888475, + 0.014926525, + 0.014926525, + 0.02196376983608517, + 0.0072556924740118595, + 0.0072556924740118595, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02864701241556508, + 0.0009455585139138353, + 0.02864701241556508, + 0.006206971539982724, + 0.030324570749487176, + 0.030324570749487176, + 0.002343941143580844, + 0.002343941143580844, + 0.0028301419317722305, + 0.003785000837274958, + 0.0050604784914425405, + 0.0050604784914425405, + 0.0006470312337790213, + 0.0006470312337790213, + 0.0017591370083391655, + 0.003785000837274958, + 0.005504385914121352, + 0.0016504683771303712, + 0.02124499542372566, + 0.01390361293085983, + 0.425, + 0.425, + 0.002368430427142551, + 0.002368430427142551, + 0.004462489682648861, + 0.004462489682648861, + 0.05420222500000001, + 0.05420222500000001, + 0.0008795328172189843 + ], + "time": 19.8, + "rotation": [] + }, + { + "weights": [ + 0.017588345759681285, + 0.017588345759681285, + 0.02888475, + 0.014926525, + 0.014926525, + 0.029554381753717135, + 0.009862403924177794, + 0.009862403924177794, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.026930941953014643, + 0.0014926951868193482, + 0.026930941953014643, + 0.005891831418765439, + 0.03174094540732246, + 0.03174094540732246, + 0.00182821434523378, + 0.00182821434523378, + 0.003616930586951118, + 0.004003933210458072, + 0.00972941484834466, + 0.00972941484834466, + 0.0010005897389990938, + 0.0010005897389990938, + 0.0024038071345005704, + 0.004003933210458072, + 0.005650821860347472, + 0.0031232400664261387, + 0.019203432755810865, + 0.018417682839291426, + 0.425, + 0.425, + 0.002676828648362839, + 0.002676828648362839, + 0.006027833207377362, + 0.006027833207377362, + 0.05420222500000001, + 0.05420222500000001, + 0.0016118938103318202 + ], + "time": 19.833333333333332, + "rotation": [] + }, + { + "weights": [ + 0.014453974685498638, + 0.014453974685498638, + 0.03289053142070769, + 0.014926525, + 0.014926525, + 0.03804189232843261, + 0.012279369116627737, + 0.012279369116627737, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02437819321542399, + 0.002127149428640092, + 0.02437819321542399, + 0.0051109206995793716, + 0.03344780589853012, + 0.03344780589853012, + 0.0013131167085043013, + 0.0013131167085043013, + 0.0038556211654629004, + 0.0043844619074038076, + 0.016991265692881168, + 0.016991265692881168, + 0.001272583247295447, + 0.001272583247295447, + 0.002219769294772828, + 0.0043844619074038076, + 0.004695105467523844, + 0.004330178531152859, + 0.014110232176525244, + 0.022365570919854288, + 0.425, + 0.425, + 0.0029198714239256707, + 0.0029198714239256707, + 0.007425232247582499, + 0.007425232247582499, + 0.05420222500000001, + 0.05420222500000001, + 0.0029182944712894286 + ], + "time": 19.866666666666667, + "rotation": [] + }, + { + "weights": [ + 0.012589721355055053, + 0.012589721355055053, + 0.0346062328134264, + 0.014926525, + 0.014926525, + 0.04178060836025645, + 0.014135621009128428, + 0.014135621009128428, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05400197835905208, + 0.023182218460988314, + 0.003958445285047802, + 0.023182218460988314, + 0.005058292858302589, + 0.03457256057432717, + 0.03457256057432717, + 0.0008712705075740807, + 0.0008712705075740807, + 0.003926827087998388, + 0.005074687461767875, + 0.02688138408320289, + 0.02688138408320289, + 0.001275518568498747, + 0.001275518568498747, + 0.0015777697999562528, + 0.005074687461767875, + 0.0033071217792374724, + 0.004768346675804679, + 0.008812450000217976, + 0.026050553406987854, + 0.425, + 0.425, + 0.0030758672824927717, + 0.0030758672824927717, + 0.007789318598806853, + 0.007789318598806853, + 0.05420222500000001, + 0.05420222500000001, + 0.004334358179143495 + ], + "time": 19.9, + "rotation": [] + }, + { + "weights": [ + 0.013012643051998944, + 0.013012643051998944, + 0.03443175532988137, + 0.014926525, + 0.014926525, + 0.0423741311899253, + 0.01643720357013599, + 0.01643720357013599, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05949139126709527, + 0.023822437432019363, + 0.006365504877907885, + 0.023822437432019363, + 0.005377123318612573, + 0.034781423253672436, + 0.034781423253672436, + 0.000689239587634801, + 0.000689239587634801, + 0.004539961516857146, + 0.00558038455035005, + 0.036758486245359684, + 0.036758486245359684, + 0.0011486467506204318, + 0.0011486467506204318, + 0.001345158229981149, + 0.00558038455035005, + 0.0021778980323246527, + 0.006052447621311456, + 0.005277000207986146, + 0.030251975996153667, + 0.425, + 0.425, + 0.0033325630213533104, + 0.0033325630213533104, + 0.008601105473935597, + 0.008601105473935597, + 0.05420222500000001, + 0.05420222500000001, + 0.00570146667637995 + ], + "time": 19.933333333333334, + "rotation": [] + }, + { + "weights": [ + 0.015460905831839341, + 0.015460905831839341, + 0.03219487411635258, + 0.014926525, + 0.014926525, + 0.03943176173738066, + 0.01891391269330466, + 0.01891391269330466, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.06600197223680357, + 0.026204960306664186, + 0.009520103360925397, + 0.026204960306664186, + 0.006224359199404712, + 0.034161669824804536, + 0.034161669824804536, + 0.0007114583067595947, + 0.0007114583067595947, + 0.005527632534503934, + 0.0060552822692053615, + 0.047356521806546606, + 0.047356521806546606, + 0.0008600102418235354, + 0.0008600102418235354, + 0.0013011307801519107, + 0.0060552822692053615, + 0.0011266790969031177, + 0.007759342512914107, + 0.0029456938271011576, + 0.03482785007783341, + 0.425, + 0.425, + 0.003645121020930152, + 0.003645121020930152, + 0.009487908147275438, + 0.009487908147275438, + 0.05420222500000001, + 0.05420222500000001, + 0.0070643415142382865 + ], + "time": 19.966666666666665, + "rotation": [] + }, + { + "weights": [ + 0.013415770260427048, + 0.013415770260427048, + 0.033271004242353644, + 0.021183954481293243, + 0.021183954481293243, + 0.033561616899813046, + 0.017043227285184707, + 0.017043227285184707, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.046958220729328405, + 0.046958220729328405, + 0.05891937904731447, + 0.03100751436845143, + 0.00150685892552745, + 0.03100751436845143, + 0.005942018299940079, + 0.00520741886310024, + 0.00520741886310024, + 0.0002691369406424814, + 0.0002691369406424814, + 0.0007911791022334764, + 0.0004300971145228438, + 0.0027630208032877073, + 0.0027630208032877073, + 0.0003256064620147752, + 0.0003256064620147752, + 0.0003311937191960754, + 0.0004300971145228438, + 0.000427326341946514, + 0.0022809747673621745, + 0.0007895699294245959, + 0.003258136452927058, + 0.425, + 0.425, + 1.5045304706306964e-05, + 1.5045304706306964e-05, + 0.001172509958488597, + 0.001172509958488597, + 0.05754131093160651, + 0.05754131093160651, + 0.0063340587350128 + ], + "time": 20.0, + "rotation": [] + }, + { + "weights": [ + 0.01105483151262713, + 0.01105483151262713, + 0.03417480988871479, + 0.020034826727353273, + 0.020034826727353273, + 0.027175424602769623, + 0.014000680109131178, + 0.014000680109131178, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05020463871803213, + 0.05020463871803213, + 0.05126333, + 0.031515512747189195, + 0.01632894917102086, + 0.031515512747189195, + 0.0055625854725284175, + 0.03231230349200109, + 0.03231230349200109, + 0.0010092612807594589, + 0.0010092612807594589, + 0.0035506238199415636, + 0.003950722217559808, + 0.03595528418677191, + 0.03595528418677191, + 0.0004909969326995664, + 0.0004909969326995664, + 0.0019309958400470853, + 0.003950722217559808, + 0.0, + 0.010687725836322413, + 0.0011040973634946901, + 0.00803860777332667, + 0.425, + 0.425, + 0.00116319650360516, + 0.00116319650360516, + 0.0027022027703268135, + 0.0027022027703268135, + 0.05451839596286148, + 0.05451839596286148, + 0.004792005284911106 + ], + "time": 20.033333333333335, + "rotation": [] + }, + { + "weights": [ + 0.010169678287846685, + 0.010169678287846685, + 0.03167813771537368, + 0.0186297949161693, + 0.0186297949161693, + 0.025968971369521913, + 0.011111537037816418, + 0.011111537037816418, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.051949829467092555, + 0.051949829467092555, + 0.05126333, + 0.03347839591071349, + 0.03496260168126649, + 0.03347839591071349, + 0.00567166358897728, + 0.08099877684882703, + 0.08099877684882703, + 0.0013228568231953037, + 0.0013228568231953037, + 0.006964892879128453, + 0.014997039389397403, + 0.11187013429616172, + 0.11187013429616172, + 0.0004644143576068534, + 0.0004644143576068534, + 0.005272752043391974, + 0.014997039389397403, + 0.0, + 0.02307460738718508, + 0.0006360065011041494, + 0.046805176251700886, + 0.425, + 0.425, + 0.0040664532106263265, + 0.0040664532106263265, + 0.011495829812650162, + 0.011495829812650162, + 0.05420222500000001, + 0.05420222500000001, + 0.0032129230776003397 + ], + "time": 20.066666666666666, + "rotation": [] + }, + { + "weights": [ + 0.010147453711501175, + 0.010147453711501175, + 0.02888475, + 0.016993310889699798, + 0.016993310889699798, + 0.03771231955006005, + 0.00760343847352833, + 0.00760343847352833, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.052494342371412886, + 0.052494342371412886, + 0.05126333, + 0.035832401557633745, + 0.045502918137255155, + 0.035832401557633745, + 0.0062671389785550835, + 0.14080252936624338, + 0.14080252936624338, + 0.001154023771670957, + 0.001154023771670957, + 0.00799872276754606, + 0.03446808313330013, + 0.20910208349710405, + 0.20910208349710405, + 0.0002222246566698662, + 0.0002222246566698662, + 0.008252758720446195, + 0.03446808313330013, + 0.0, + 0.037015442582822966, + 0.0005206679254770271, + 0.13131229432991562, + 0.425, + 0.425, + 0.008802622524499887, + 0.008802622524499887, + 0.023948548411329575, + 0.023948548411329575, + 0.05420222500000001, + 0.05420222500000001, + 0.0015014148982507823 + ], + "time": 20.1, + "rotation": [] + }, + { + "weights": [ + 0.011596417486110094, + 0.011596417486110094, + 0.02888475, + 0.015269804865636142, + 0.015269804865636142, + 0.06652711764991684, + 0.00431826030683456, + 0.00431826030683456, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05400976542669875, + 0.05400976542669875, + 0.05126333, + 0.034816646957684855, + 0.037882145860292454, + 0.034816646957684855, + 0.006199126458238983, + 0.19654615648924076, + 0.19654615648924076, + 0.0004382765786830953, + 0.0004382765786830953, + 0.006194908781846361, + 0.05938566824200807, + 0.28979704030504827, + 0.28979704030504827, + 9.611152015170246e-05, + 9.611152015170246e-05, + 0.008389469034959665, + 0.05938566824200807, + 0.0012144556082734433, + 0.052361989250718305, + 0.0007162482869868368, + 0.25473358707111693, + 0.425, + 0.425, + 0.01479262001539249, + 0.01479262001539249, + 0.03327204023762827, + 0.03327204023762827, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 20.133333333333333, + "rotation": [] + }, + { + "weights": [ + 0.014821264340105096, + 0.014821264340105096, + 0.02888475, + 0.014926525, + 0.014926525, + 0.09803785989783242, + 0.004411583842557603, + 0.004411583842557603, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.057860058620111295, + 0.057860058620111295, + 0.05126333, + 0.030268807646742484, + 0.03126415255424926, + 0.030268807646742484, + 0.005876471549272534, + 0.25225889221721753, + 0.25225889221721753, + 0.0002458978476362035, + 0.0002458978476362035, + 0.007510722695929659, + 0.08255898936427365, + 0.34731778905914734, + 0.34731778905914734, + 0.0005371973927836024, + 0.0005371973927836024, + 0.005440728997211064, + 0.08255898936427365, + 0.007192560937088359, + 0.07170668803465606, + 0.0012313979792959828, + 0.36121513736710237, + 0.46996060032503917, + 0.46996060032503917, + 0.020985285596010626, + 0.020985285596010626, + 0.03277253811274254, + 0.03277253811274254, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 20.166666666666668, + "rotation": [] + }, + { + "weights": [ + 0.0204756293548461, + 0.0204756293548461, + 0.02888475, + 0.015063786200003964, + 0.015063786200003964, + 0.11519007731000983, + 0.00976262972870727, + 0.00976262972870727, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.061562029767479653, + 0.061562029767479653, + 0.05126333, + 0.025421049745061593, + 0.02880103663369099, + 0.025421049745061593, + 0.005970051321866253, + 0.2906964285733747, + 0.2906964285733747, + 8.480105305822291e-05, + 8.480105305822291e-05, + 0.01211154851998601, + 0.09612863018622197, + 0.3711117877542362, + 0.3711117877542362, + 0.0015763417978219832, + 0.0015763417978219832, + 0.000980284627694256, + 0.09612863018622197, + 0.013762466230380285, + 0.08828245398566426, + 0.0012044213322048277, + 0.4235805137900671, + 0.5676873904381476, + 0.5676873904381476, + 0.026011426715502918, + 0.026011426715502918, + 0.027276749659329635, + 0.027276749659329635, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 20.2, + "rotation": [] + }, + { + "weights": [ + 0.026560420170426355, + 0.026560420170426355, + 0.02888475, + 0.01567995952763489, + 0.01567995952763489, + 0.11483678860323762, + 0.018854390237746484, + 0.018854390237746484, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06509156115353104, + 0.06509156115353104, + 0.05126333, + 0.021932762454486915, + 0.032978687712124394, + 0.021932762454486915, + 0.0073859437767948375, + 0.31135078711169084, + 0.31135078711169084, + 0.00013207307467902335, + 0.00013207307467902335, + 0.015797442729984002, + 0.09906546792813706, + 0.3722917803696222, + 0.3722917803696222, + 0.0026828042098454054, + 0.0026828042098454054, + 0.0, + 0.09906546792813706, + 0.0190008198576314, + 0.09779195402349738, + 0.0011312429394040784, + 0.4454934324537002, + 0.6260542677981509, + 0.6260542677981509, + 0.029663247976984282, + 0.029663247976984282, + 0.0211327555988516, + 0.0211327555988516, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 20.233333333333334, + "rotation": [] + }, + { + "weights": [ + 0.031220657005906087, + 0.031220657005906087, + 0.02888475, + 0.015533692337059292, + 0.015533692337059292, + 0.10955712624958577, + 0.02715571969747542, + 0.02715571969747542, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06983248043273173, + 0.06983248043273173, + 0.05126333, + 0.020254822945844447, + 0.040490868006433735, + 0.020254822945844447, + 0.009612487655665188, + 0.3304484397172926, + 0.3304484397172926, + 0.00028154222086803704, + 0.00028154222086803704, + 0.01664885069642747, + 0.09964080889310149, + 0.37855546474456764, + 0.37855546474456764, + 0.003515862726739473, + 0.003515862726739473, + 0.0, + 0.09964080889310149, + 0.022175096188272736, + 0.10537509300879064, + 0.001166678220033645, + 0.46318245019231497, + 0.6674175330570762, + 0.6674175330570762, + 0.03290220601218086, + 0.03290220601218086, + 0.0205255605014307, + 0.0205255605014307, + 0.05420222500000001, + 0.05420222500000001, + 0.0021281731980187543 + ], + "time": 20.266666666666666, + "rotation": [] + }, + { + "weights": [ + 0.03274404409208466, + 0.03274404409208466, + 0.02888475, + 0.014970494221914835, + 0.014970494221914835, + 0.10263519499983101, + 0.03119171155350547, + 0.03119171155350547, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07531731224485802, + 0.07531731224485802, + 0.05126333, + 0.018825118595292057, + 0.050093496782439066, + 0.018825118595292057, + 0.011616070235946341, + 0.34176599596227897, + 0.34176599596227897, + 0.0004268974313578965, + 0.0004268974313578965, + 0.016075515800288737, + 0.10029125830956861, + 0.39147661413465207, + 0.39147661413465207, + 0.003622729331254957, + 0.003622729331254957, + 0.0, + 0.10029125830956861, + 0.022486899367400566, + 0.11035844790084015, + 0.0009477413126400534, + 0.4769659076418193, + 0.6883047980921605, + 0.6883047980921605, + 0.03486759002719605, + 0.03486759002719605, + 0.022719965901757976, + 0.022719965901757976, + 0.05420222500000001, + 0.05420222500000001, + 0.003902894684246607 + ], + "time": 20.3, + "rotation": [] + }, + { + "weights": [ + 0.032137560950858235, + 0.032137560950858235, + 0.02888475, + 0.014926525, + 0.014926525, + 0.08912741318345066, + 0.028944565781525187, + 0.028944565781525187, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07727147894246233, + 0.07727147894246233, + 0.05126333, + 0.0181556725, + 0.06855265685490196, + 0.0181556725, + 0.013371870666742317, + 0.33885551180158324, + 0.33885551180158324, + 0.0004544277369443857, + 0.0004544277369443857, + 0.017799179362399227, + 0.09996512436441007, + 0.4220563352107999, + 0.4220563352107999, + 0.0030634766178471687, + 0.0030634766178471687, + 0.0, + 0.09996512436441007, + 0.021368646941014684, + 0.11367514090878617, + 0.0007051356136798857, + 0.495073592662811, + 0.6848845362663265, + 0.6848845362663265, + 0.03512773334980009, + 0.03512773334980009, + 0.024832649262888078, + 0.024832649262888078, + 0.05420222500000001, + 0.05420222500000001, + 0.003487510021243775 + ], + "time": 20.333333333333332, + "rotation": [] + }, + { + "weights": [ + 0.028867223433085832, + 0.028867223433085832, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0629734278789588, + 0.021478017279878248, + 0.021478017279878248, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07342482033584795, + 0.07342482033584795, + 0.05126333, + 0.0181556725, + 0.09934857317379538, + 0.0181556725, + 0.015330706323896126, + 0.32169805381979244, + 0.32169805381979244, + 0.00041487400286963994, + 0.00041487400286963994, + 0.02260687303330216, + 0.09488681533506933, + 0.45785349394593894, + 0.45785349394593894, + 0.0015639891581875928, + 0.0015639891581875928, + 0.0, + 0.09488681533506933, + 0.01985865426915031, + 0.11665782204696103, + 0.0, + 0.5175339758396146, + 0.6512230225971763, + 0.6512230225971763, + 0.03346343662057602, + 0.03346343662057602, + 0.023176764670227244, + 0.023176764670227244, + 0.05420222500000001, + 0.05420222500000001, + 0.001237881449716431 + ], + "time": 20.366666666666667, + "rotation": [] + }, + { + "weights": [ + 0.022629148646124756, + 0.022629148646124756, + 0.02888475, + 0.014926525, + 0.014926525, + 0.03301514121038571, + 0.011991894484630644, + 0.011991894484630644, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06557711655540122, + 0.06557711655540122, + 0.05126333, + 0.0181556725, + 0.13194209745952054, + 0.0181556725, + 0.017139134077089165, + 0.30219353990895387, + 0.30219353990895387, + 0.0003014115819574466, + 0.0003014115819574466, + 0.02643134242721965, + 0.08389939197472158, + 0.46407839400427653, + 0.46407839400427653, + 0.0003030108021838321, + 0.0003030108021838321, + 0.0, + 0.08389939197472158, + 0.022273059189319596, + 0.1250389724969863, + 0.0, + 0.5290622924055369, + 0.5835940803800307, + 0.5835940803800307, + 0.03056152756725037, + 0.03056152756725037, + 0.01768906225583382, + 0.01768906225583382, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 20.4, + "rotation": [] + }, + { + "weights": [ + 0.017262240845177843, + 0.017262240845177843, + 0.02888475, + 0.014926525, + 0.014926525, + 0.009928986110857546, + 0.0039023658460272176, + 0.0039023658460272176, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.058040662322725534, + 0.058040662322725534, + 0.05126333, + 0.01859428481367503, + 0.15416456222534172, + 0.01859428481367503, + 0.016006615225757862, + 0.29696241489478503, + 0.29696241489478503, + 4.873158110837847e-05, + 4.873158110837847e-05, + 0.02502236999571322, + 0.06884931086429524, + 0.4035807692578859, + 0.4035807692578859, + 0.0, + 0.0, + 0.0018240746376769874, + 0.06884931086429524, + 0.0326363180364881, + 0.13395902599607187, + 0.0, + 0.5166340444769175, + 0.49737090510981397, + 0.49737090510981397, + 0.026405913255044378, + 0.026405913255044378, + 0.009957506653985801, + 0.009957506653985801, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 20.433333333333334, + "rotation": [] + }, + { + "weights": [ + 0.016443391676459983, + 0.016443391676459983, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0008701700185026404, + 1.6530017767633128e-05, + 1.6530017767633128e-05, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.053874434104987524, + 0.053874434104987524, + 0.05126333, + 0.023309954727158542, + 0.15983699253627226, + 0.023309954727158542, + 0.012589314087693173, + 0.29698316242013645, + 0.29698316242013645, + 0.0, + 0.0, + 0.019316470197268884, + 0.0538109150848218, + 0.3054456553288867, + 0.3054456553288867, + 2.1961969988686745e-05, + 2.1961969988686745e-05, + 0.004855807804103406, + 0.0538109150848218, + 0.045888175708906964, + 0.13630086609295428, + 0.0, + 0.47634397489683944, + 0.425, + 0.425, + 0.021903698742389666, + 0.021903698742389666, + 0.002870060816141109, + 0.002870060816141109, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 20.466666666666665, + "rotation": [] + }, + { + "weights": [ + 0.017595898466450818, + 0.017595898466450818, + 0.02888475, + 0.014926525, + 0.014926525, + 0.00015076462711606552, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05340686025364055, + 0.05340686025364055, + 0.05126333, + 0.027594062332420004, + 0.1524135848454066, + 0.027594062332420004, + 0.009171320604426514, + 0.29125526888029896, + 0.29125526888029896, + 0.0, + 0.0, + 0.014732759020158213, + 0.04265589543751305, + 0.21203108600207723, + 0.21203108600207723, + 3.52223004613605e-05, + 3.52223004613605e-05, + 0.0081857877384339, + 0.04265589543751305, + 0.05435355944292883, + 0.13404158609254013, + 0.0016064807772636404, + 0.40579620344298206, + 0.425, + 0.425, + 0.01813938334584235, + 0.01813938334584235, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 20.5, + "rotation": [] + }, + { + "weights": [ + 0.015252059298966603, + 0.015252059298966603, + 0.02888475, + 0.015020182782536914, + 0.015020182782536914, + 0.0029966807791164916, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.056752875553710086, + 0.056752875553710086, + 0.05126333, + 0.03188810808087519, + 0.13235714673995966, + 0.03188810808087519, + 0.007366576338452948, + 0.2836541524955203, + 0.2836541524955203, + 0.0, + 0.0, + 0.011858928522893353, + 0.03677953566823684, + 0.13848427651183937, + 0.13848427651183937, + 0.0, + 0.0, + 0.011922136787325135, + 0.03677953566823684, + 0.05739816682679309, + 0.1335290998220443, + 0.0023575759359768427, + 0.29891793312770965, + 0.425, + 0.425, + 0.015952159634658257, + 0.015952159634658257, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 20.533333333333335, + "rotation": [] + }, + { + "weights": [ + 0.00924187621900013, + 0.00924187621900013, + 0.02888475, + 0.015480997041418892, + 0.015480997041418892, + 0.007474580832890098, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06266977920063901, + 0.06266977920063901, + 0.05126333, + 0.03642566363726342, + 0.09923428569521217, + 0.03642566363726342, + 0.006136868907404793, + 0.2893941185304095, + 0.2893941185304095, + 0.0, + 0.0, + 0.00941939513598169, + 0.033641789374606934, + 0.07532012877719738, + 0.07532012877719738, + 0.0, + 0.0, + 0.013421666808426373, + 0.033641789374606934, + 0.060084925591945615, + 0.13025013421263004, + 0.0049695909023284805, + 0.1693636291261229, + 0.425, + 0.425, + 0.014880347166742589, + 0.014880347166742589, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 20.566666666666666, + "rotation": [] + }, + { + "weights": [ + 0.001938738354614801, + 0.001938738354614801, + 0.02888475, + 0.017287255983818597, + 0.017287255983818597, + 0.010420019924640651, + 0.0005100915873689305, + 0.0005100915873689305, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06943198958677901, + 0.06943198958677901, + 0.05126333, + 0.03898416715008869, + 0.06185506211859835, + 0.03898416715008869, + 0.00536984003681157, + 0.30464793912002, + 0.30464793912002, + 0.0003016829176340231, + 0.0003016829176340231, + 0.008018479815551207, + 0.029317985315408007, + 0.03634570091962812, + 0.03634570091962812, + 0.0, + 0.0, + 0.01569084232406956, + 0.029317985315408007, + 0.06552034297159737, + 0.12593260790620525, + 0.029231657194239726, + 0.06578083974974491, + 0.425, + 0.425, + 0.01500354568873132, + 0.01500354568873132, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 6.866439112595143e-05 + ], + "time": 20.6, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.03396311689700397, + 0.020015098155095914, + 0.020015098155095914, + 0.00957701355218887, + 0.002777860779315231, + 0.002777860779315231, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07340076927627831, + 0.07340076927627831, + 0.05126333, + 0.0395934039460761, + 0.034729401894978085, + 0.0395934039460761, + 0.0036029798111745265, + 0.31281265573842165, + 0.31281265573842165, + 0.006571713046370334, + 0.006571713046370334, + 0.008531357347965235, + 0.024385670891829886, + 0.024837307844843164, + 0.024837307844843164, + 0.012119340470858966, + 0.012119340470858966, + 0.020823894441127762, + 0.024385670891829886, + 0.06897905979837686, + 0.12248600104025426, + 0.08199150711297984, + 0.013820755747812113, + 0.425, + 0.425, + 0.015459497592278881, + 0.015459497592278881, + 0.003981377304132494, + 0.003981377304132494, + 0.05420222500000001, + 0.05420222500000001, + 0.0013422035745212003 + ], + "time": 20.633333333333333, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.04125060854213576, + 0.02303805303415843, + 0.02303805303415843, + 0.005182349894727976, + 0.006712400640494055, + 0.006712400640494055, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07398480166281968, + 0.07398480166281968, + 0.05126333, + 0.0398807492639337, + 0.024755680007593955, + 0.0398807492639337, + 0.0017347535451075844, + 0.29813475906848885, + 0.29813475906848885, + 0.020756766470315453, + 0.020756766470315453, + 0.009187394965972212, + 0.021340102915252943, + 0.02523530200123785, + 0.02523530200123785, + 0.05590996987053322, + 0.05590996987053322, + 0.02724005026476722, + 0.021340102915252943, + 0.06321446959461481, + 0.1135530872004372, + 0.146340559210096, + 0.002996899187564843, + 0.425, + 0.425, + 0.014705297074147625, + 0.014705297074147625, + 0.0060908965101199464, + 0.0060908965101199464, + 0.05420222500000001, + 0.05420222500000001, + 0.0019464176680360512 + ], + "time": 20.666666666666668, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.04528428528990062, + 0.025013502262019423, + 0.025013502262019423, + 0.001898154084171565, + 0.007846091681026983, + 0.007846091681026983, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0725939829434667, + 0.0725939829434667, + 0.05126333, + 0.03986233116260594, + 0.026469922746930788, + 0.03986233116260594, + 0.0016758766025304775, + 0.2539772558425153, + 0.2539772558425153, + 0.03825422442385127, + 0.03825422442385127, + 0.012622051473174765, + 0.023649165726133743, + 0.02667946517467497, + 0.02667946517467497, + 0.12319255700068808, + 0.12319255700068808, + 0.036608704179525345, + 0.023649165726133743, + 0.04474706000515391, + 0.09285153618880676, + 0.18264221634183603, + 0.0022704328277281323, + 0.425, + 0.425, + 0.011951857209205621, + 0.011951857209205621, + 0.005199960565992761, + 0.005199960565992761, + 0.05420222500000001, + 0.05420222500000001, + 0.001987073224570069 + ], + "time": 20.7, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.04618684787835391, + 0.02517259429663181, + 0.02517259429663181, + 0.0018841853099209904, + 0.007223948543625214, + 0.007223948543625214, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07117050960659976, + 0.07117050960659976, + 0.05126333, + 0.041152129109416666, + 0.03700583300420214, + 0.041152129109416666, + 0.004909789821665197, + 0.189223795809916, + 0.189223795809916, + 0.050218192296368716, + 0.050218192296368716, + 0.024254469946026785, + 0.02967285982200076, + 0.03142881627593719, + 0.03142881627593719, + 0.17717395158750662, + 0.17717395158750662, + 0.06140113893364153, + 0.02967285982200076, + 0.025067883942808407, + 0.07443743454558505, + 0.16183141246438018, + 0.004196642339229581, + 0.425, + 0.425, + 0.008913956369672498, + 0.008913956369672498, + 0.003539915036942275, + 0.003539915036942275, + 0.05420222500000001, + 0.05420222500000001, + 0.0017513884497540328 + ], + "time": 20.733333333333334, + "rotation": [] + }, + { + "weights": [ + 0.00015480800398758445, + 0.00015480800398758445, + 0.046901953433241134, + 0.022557758646903032, + 0.022557758646903032, + 0.004259821559701643, + 0.009847293261970785, + 0.009847293261970785, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07296917981335091, + 0.07296917981335091, + 0.05126333, + 0.04359932791973861, + 0.052361263377325856, + 0.04359932791973861, + 0.012904192201261001, + 0.12295735430504587, + 0.12295735430504587, + 0.04876796381814137, + 0.04876796381814137, + 0.04884997691426955, + 0.037053282452481115, + 0.06005804996405324, + 0.06005804996405324, + 0.1713896088834319, + 0.1713896088834319, + 0.09548970375742226, + 0.037053282452481115, + 0.012315855281693584, + 0.0673750681536538, + 0.0974843792085136, + 0.003470659628510472, + 0.425, + 0.425, + 0.006951319000550673, + 0.006951319000550673, + 0.0025698015732424574, + 0.0025698015732424574, + 0.05420222500000001, + 0.05420222500000001, + 0.0015066392187561301 + ], + "time": 20.766666666666666, + "rotation": [] + }, + { + "weights": [ + 0.0008167047053575498, + 0.0008167047053575498, + 0.0525848744171006, + 0.01877831550636223, + 0.01877831550636223, + 0.010972367333514345, + 0.014834857944931293, + 0.014834857944931293, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.060740902594157584, + 0.060740902594157584, + 0.08633714318275446, + 0.08633714318275446, + 0.05126333, + 0.047903502093894115, + 0.06297772518226075, + 0.047903502093894115, + 0.02279766959005167, + 0.07300861451242646, + 0.07300861451242646, + 0.035360033810138684, + 0.035360033810138684, + 0.09410059095493378, + 0.04011421219578809, + 0.13074985902224256, + 0.13074985902224256, + 0.10627392889665699, + 0.10627392889665699, + 0.12185953706502908, + 0.04011421219578809, + 0.010253653462444026, + 0.0671727061271667, + 0.04166937571551115, + 0.0019497433943407774, + 0.425, + 0.425, + 0.0077323444400514835, + 0.0077323444400514835, + 0.003848920709320472, + 0.003848920709320472, + 0.05420222500000001, + 0.05420222500000001, + 0.0007211624511650625 + ], + "time": 20.8, + "rotation": [] + }, + { + "weights": [ + 0.010167730386768058, + 0.010167730386768058, + 0.06755871464099199, + 0.016023328528359276, + 0.016023328528359276, + 0.016119073012045442, + 0.022574730084410723, + 0.022574730084410723, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.11643332035413803, + 0.11643332035413803, + 0.11568426383393143, + 0.11568426383393143, + 0.05126333, + 0.04922396370342797, + 0.07124103358813691, + 0.04922396370342797, + 0.03426439889839715, + 0.04525223177458555, + 0.04525223177458555, + 0.017341490085901946, + 0.017341490085901946, + 0.14930027861680295, + 0.0393330249403204, + 0.2361526123114993, + 0.2361526123114993, + 0.040585406151201014, + 0.040585406151201014, + 0.11973818327699383, + 0.0393330249403204, + 0.013812600927693494, + 0.06469207682779854, + 0.021770604753068495, + 0.026860704432640735, + 0.425, + 0.425, + 0.012116100809403821, + 0.012116100809403821, + 0.01287887708417006, + 0.01287887708417006, + 0.05420222500000001, + 0.05420222500000001, + 0.00021297367555754484 + ], + "time": 20.833333333333332, + "rotation": [] + }, + { + "weights": [ + 0.0315242321363517, + 0.0315242321363517, + 0.08650304057768407, + 0.01516432714304515, + 0.01516432714304515, + 0.01824886490191731, + 0.03245491374816212, + 0.03245491374816212, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.19967117591627995, + 0.19967117591627995, + 0.1544057625745023, + 0.1544057625745023, + 0.06112496847552909, + 0.044392549459423315, + 0.08085154652595516, + 0.044392549459423315, + 0.04189474454947878, + 0.03816502057015893, + 0.03816502057015893, + 0.004736592112375152, + 0.004736592112375152, + 0.18887652031012933, + 0.036311503340091006, + 0.3348918691277502, + 0.3348918691277502, + 0.009478664797331591, + 0.009478664797331591, + 0.09602846481970373, + 0.036311503340091006, + 0.018760383129119863, + 0.06225520649126594, + 0.02193630327071461, + 0.09454324830855637, + 0.425, + 0.425, + 0.01940283834934233, + 0.01940283834934233, + 0.029269785846450482, + 0.029269785846450482, + 0.06112895111342939, + 0.06112895111342939, + 0.0009518744690077641 + ], + "time": 20.866666666666667, + "rotation": [] + }, + { + "weights": [ + 0.059246350851442094, + 0.059246350851442094, + 0.10611254381281983, + 0.017084981235561368, + 0.017084981235561368, + 0.015713211681161597, + 0.04337686872375861, + 0.04337686872375861, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.27886968414698315, + 0.27886968414698315, + 0.18931641674467486, + 0.18931641674467486, + 0.07543298006057735, + 0.031921730323561576, + 0.09621338980538499, + 0.031921730323561576, + 0.04998910043920786, + 0.03956784786922589, + 0.03956784786922589, + 3.439039124974097e-05, + 3.439039124974097e-05, + 0.19626233407429278, + 0.0335477448068559, + 0.4115370182054381, + 0.4115370182054381, + 0.00884967169591358, + 0.00884967169591358, + 0.07230548262596126, + 0.0335477448068559, + 0.020777770983321314, + 0.06254424793379643, + 0.021795581653714168, + 0.17348546997777042, + 0.425, + 0.425, + 0.026461599086012144, + 0.026461599086012144, + 0.046845474573118315, + 0.046845474573118315, + 0.07092045543904064, + 0.07092045543904064, + 0.0015573035127350253 + ], + "time": 20.9, + "rotation": [] + }, + { + "weights": [ + 0.07956281221870859, + 0.07956281221870859, + 0.118605285670076, + 0.019241539123353954, + 0.019241539123353954, + 0.012808619333165022, + 0.050110095712755376, + 0.050110095712755376, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.326086783089808, + 0.326086783089808, + 0.21050757776413637, + 0.21050757776413637, + 0.0873311161994933, + 0.02617031370422667, + 0.10616534062794272, + 0.02617031370422667, + 0.05584546434027804, + 0.038581704880510034, + 0.038581704880510034, + 0.0, + 0.0, + 0.19016375456537504, + 0.02967048687860367, + 0.45562624399151075, + 0.45562624399151075, + 0.009230227316064472, + 0.009230227316064472, + 0.058464911580085724, + 0.02967048687860367, + 0.023979092070034555, + 0.06680784544774461, + 0.021953846514224988, + 0.2135663869657685, + 0.425, + 0.425, + 0.030453725414616696, + 0.030453725414616696, + 0.05942953569548468, + 0.05942953569548468, + 0.08131485333932295, + 0.08131485333932295, + 0.0013608646179948515 + ], + "time": 20.933333333333334, + "rotation": [] + }, + { + "weights": [ + 0.09582520087382615, + 0.09582520087382615, + 0.12614710820572705, + 0.02231428559392452, + 0.02231428559392452, + 0.008843693350042602, + 0.05380410873996355, + 0.05380410873996355, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.3489249958523681, + 0.3489249958523681, + 0.22083546870521123, + 0.22083546870521123, + 0.09728690460324271, + 0.023523707554808652, + 0.11307011468069886, + 0.023523707554808652, + 0.059951945500714386, + 0.038203563594392344, + 0.038203563594392344, + 0.0, + 0.0, + 0.16644225290843406, + 0.02487783851101991, + 0.47065756044217455, + 0.47065756044217455, + 0.016291818741176786, + 0.016291818741176786, + 0.052460928261280015, + 0.02487783851101991, + 0.027489241851227607, + 0.07468142168862477, + 0.023174567893147445, + 0.22704768015870003, + 0.425, + 0.425, + 0.032147471840892484, + 0.032147471840892484, + 0.06843011089201481, + 0.06843011089201481, + 0.08496918148760281, + 0.08496918148760281, + 0.00046002016003642455 + ], + "time": 20.966666666666665, + "rotation": [] + }, + { + "weights": [ + 0.08649176448913039, + 0.08649176448913039, + 0.11095338341963722, + 0.023935221216988854, + 0.023935221216988854, + 0.012795207537964069, + 0.04609646271743178, + 0.04609646271743178, + 0.0002529856357363902, + 0.0002529856357363902, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.30010767852963505, + 0.30010767852963505, + 0.19862100356543527, + 0.19862100356543527, + 0.10241697348299461, + 0.03913398157146304, + 0.09774861124421451, + 0.03913398157146304, + 0.05160653397342703, + 0.04894241499100002, + 0.04894241499100002, + 0.0001350651240153681, + 0.0001350651240153681, + 0.16383376419746937, + 0.030901398574489876, + 0.50033289537746, + 0.50033289537746, + 0.022187852121281347, + 0.022187852121281347, + 0.04532208518258156, + 0.030901398574489876, + 0.02289330405569601, + 0.06823626802740043, + 0.019716906685914283, + 0.2716457137876015, + 0.425, + 0.425, + 0.006401420382820819, + 0.006401420382820819, + 0.08844906561684843, + 0.08844906561684843, + 0.07281735981250695, + 0.07281735981250695, + 0.0 + ], + "time": 21.0, + "rotation": [] + }, + { + "weights": [ + 0.0726391987875103, + 0.0726391987875103, + 0.09139897041022765, + 0.021628893717439056, + 0.021628893717439056, + 0.017777484619901272, + 0.03611685746970271, + 0.03611685746970271, + 0.4572778527944726, + 0.4572778527944726, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.23844396025829348, + 0.23844396025829348, + 0.1707069516891523, + 0.1707069516891523, + 0.1113095180619329, + 0.05487210174046807, + 0.07861915755839564, + 0.05487210174046807, + 0.041897736019676585, + 0.06488412171602242, + 0.06488412171602242, + 0.0002699707037148375, + 0.0002699707037148375, + 0.15935418790294992, + 0.03771026603700145, + 0.5312296125150855, + 0.5312296125150855, + 0.02618088560799755, + 0.02618088560799755, + 0.038076299038671255, + 0.03771026603700145, + 0.017444682263192655, + 0.05807899415847796, + 0.01607135775543392, + 0.3129088467430497, + 0.425, + 0.425, + 0.006523369589022218, + 0.006523369589022218, + 0.1095453071984506, + 0.1095453071984506, + 0.06272298921709217, + 0.06272298921709217, + 0.0 + ], + "time": 21.033333333333335, + "rotation": [] + }, + { + "weights": [ + 0.06066685938941573, + 0.06066685938941573, + 0.07365091464349191, + 0.019595056533437964, + 0.019595056533437964, + 0.02450639914189064, + 0.026987953560559837, + 0.026987953560559837, + 0.7825179064497689, + 0.7825179064497689, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.18342633696405997, + 0.18342633696405997, + 0.14409778807312235, + 0.14409778807312235, + 0.12112168664378764, + 0.06296383529635408, + 0.06351208880543702, + 0.06296383529635408, + 0.034496628376655236, + 0.0865621003987533, + 0.0865621003987533, + 0.00022490252765627303, + 0.00022490252765627303, + 0.1393738743449959, + 0.04243451098113183, + 0.5622623906603874, + 0.5622623906603874, + 0.022942329384386517, + 0.022942329384386517, + 0.030230076777349582, + 0.04243451098113183, + 0.012965927193207383, + 0.049901804168309444, + 0.012006594533366798, + 0.3318363679572937, + 0.425, + 0.425, + 0.0072190462499856865, + 0.0072190462499856865, + 0.12466874749266665, + 0.12466874749266665, + 0.05619248971664793, + 0.05619248971664793, + 0.0 + ], + "time": 21.066666666666666, + "rotation": [] + }, + { + "weights": [ + 0.04683475534298585, + 0.04683475534298585, + 0.054689540554370135, + 0.017510869709442115, + 0.017510869709442115, + 0.038119062603939116, + 0.018232306341330183, + 0.018232306341330183, + 0.7740482855217105, + 0.7740482855217105, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.1278566966853325, + 0.1278566966853325, + 0.11280082538723935, + 0.11280082538723935, + 0.118854308766978, + 0.062198558476354346, + 0.0492764787730716, + 0.062198558476354346, + 0.027693281699681535, + 0.11962713820948478, + 0.11962713820948478, + 7.103906024158706e-05, + 7.103906024158706e-05, + 0.10318618047805049, + 0.04761756086899407, + 0.5847574826507337, + 0.5847574826507337, + 0.014398614521182702, + 0.014398614521182702, + 0.02105673876191886, + 0.04761756086899407, + 0.007975038708675464, + 0.04544566101616333, + 0.006139572443706637, + 0.330103527382016, + 0.425, + 0.425, + 0.009162527026165091, + 0.009162527026165091, + 0.1254635215426484, + 0.1254635215426484, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 21.1, + "rotation": [] + }, + { + "weights": [ + 0.03073699891250451, + 0.03073699891250451, + 0.031516168931004916, + 0.015626540041937986, + 0.015626540041937986, + 0.06086346702966962, + 0.009698953827348884, + 0.009698953827348884, + 0.34980162060943387, + 0.34980162060943387, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.06596560950099555, + 0.06596560950099555, + 0.07328276001398451, + 0.07328276001398451, + 0.09483238577842705, + 0.05311404667541279, + 0.02990714008285072, + 0.05311404667541279, + 0.018785826347666918, + 0.16947504077030678, + 0.16947504077030678, + 1.3401602877170896e-05, + 1.3401602877170896e-05, + 0.05712441393712745, + 0.05757701474286257, + 0.5733510788606133, + 0.5733510788606133, + 0.005443953245903554, + 0.005443953245903554, + 0.009935891690797024, + 0.05757701474286257, + 0.003623982084040733, + 0.04639918149658, + 0.00011031122789496015, + 0.3293061113398089, + 0.425, + 0.425, + 0.012947549778831242, + 0.012947549778831242, + 0.10701509708247212, + 0.10701509708247212, + 0.05420222500000001, + 0.05420222500000001, + 0.0008511356847221341 + ], + "time": 21.133333333333333, + "rotation": [] + }, + { + "weights": [ + 0.019319904993991447, + 0.019319904993991447, + 0.02888475, + 0.014926525, + 0.014926525, + 0.08399137629538161, + 0.0044961352395463915, + 0.0044961352395463915, + 0.12184342863208997, + 0.12184342863208997, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05944228221263201, + 0.03931849041839641, + 0.012469660362418806, + 0.03931849041839641, + 0.010373966816660692, + 0.21692717000994136, + 0.21692717000994136, + 0.0, + 0.0, + 0.021834502055936907, + 0.07042047731844438, + 0.5119974409743229, + 0.5119974409743229, + 0.0016772034756687196, + 0.0016772034756687196, + 0.0017311989542628998, + 0.07042047731844438, + 0.0029364918141948897, + 0.05230300942549897, + 0.0, + 0.33430618894495506, + 0.425, + 0.425, + 0.0173034015353845, + 0.0173034015353845, + 0.07297239013776483, + 0.07297239013776483, + 0.05420222500000001, + 0.05420222500000001, + 0.0016339713411063555 + ], + "time": 21.166666666666668, + "rotation": [] + }, + { + "weights": [ + 0.01501101613348843, + 0.01501101613348843, + 0.02888475, + 0.015083635933484111, + 0.015083635933484111, + 0.09993975583691982, + 0.002633773687067535, + 0.002633773687067535, + 0.014505612382788236, + 0.014505612382788236, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.030741165273665754, + 0.0032919823594239257, + 0.030741165273665754, + 0.004438699638014847, + 0.24354201613716311, + 0.24354201613716311, + 0.00016076857698083444, + 0.00016076857698083444, + 0.005331996505965985, + 0.08164580584503706, + 0.42158530647961434, + 0.42158530647961434, + 0.0005364032173339195, + 0.0005364032173339195, + 0.0, + 0.08164580584503706, + 0.006477194589619728, + 0.058042357995802006, + 0.0, + 0.33954420900998655, + 0.425, + 0.425, + 0.02064232039384695, + 0.02064232039384695, + 0.03745649748234722, + 0.03745649748234722, + 0.05420222500000001, + 0.05420222500000001, + 0.0012644619163962039 + ], + "time": 21.2, + "rotation": [] + }, + { + "weights": [ + 0.01605417510228497, + 0.01605417510228497, + 0.02888475, + 0.01534819203883171, + 0.01534819203883171, + 0.10406741840498783, + 0.002775515489546314, + 0.002775515489546314, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.028065692306453154, + 0.0030610850879124207, + 0.028065692306453154, + 0.0024520775768905856, + 0.24594144054821546, + 0.24594144054821546, + 0.0003304467573096708, + 0.0003304467573096708, + 0.0031373414610113386, + 0.08682234744940481, + 0.3315185353159903, + 0.3315185353159903, + 0.0012462643108197614, + 0.0012462643108197614, + 0.0, + 0.08682234744940481, + 0.015271759352513712, + 0.06211061200925278, + 0.002720558111156735, + 0.3363304759774887, + 0.425, + 0.425, + 0.022445523760148446, + 0.022445523760148446, + 0.013047966334436608, + 0.013047966334436608, + 0.05420222500000001, + 0.05420222500000001, + 0.0001540700505886758 + ], + "time": 21.233333333333334, + "rotation": [] + }, + { + "weights": [ + 0.01677513790449925, + 0.01677513790449925, + 0.02888475, + 0.015017714724495751, + 0.015017714724495751, + 0.0997058144637516, + 0.0022627149109861666, + 0.0022627149109861666, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.027958640288917674, + 0.004018590620585847, + 0.027958640288917674, + 0.0015812136299375966, + 0.23918654599360042, + 0.23918654599360042, + 0.0004620728473777747, + 0.0004620728473777747, + 0.0024220854043960553, + 0.08705344200134273, + 0.26078209515128803, + 0.26078209515128803, + 0.0009298494351761678, + 0.0009298494351761678, + 0.00015937493049672678, + 0.08705344200134273, + 0.02693933025002478, + 0.064687148800918, + 0.003691420810563222, + 0.33021945101874195, + 0.425, + 0.425, + 0.0231949638043131, + 0.0231949638043131, + 0.0027594815407480464, + 0.0027594815407480464, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 21.266666666666666, + "rotation": [] + }, + { + "weights": [ + 0.017778242113334782, + 0.017778242113334782, + 0.02888475, + 0.014926525, + 0.014926525, + 0.08784054123929563, + 0.0019601531526339897, + 0.0019601531526339897, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02891251896410601, + 0.006689197974545611, + 0.02891251896410601, + 0.0017725070273237557, + 0.22533717325755515, + 0.22533717325755515, + 0.0005605445409725816, + 0.0005605445409725816, + 0.0030222633055278217, + 0.08312187886663841, + 0.20950981910739613, + 0.20950981910739613, + 0.0002900547747101101, + 0.0002900547747101101, + 0.00032272406720689373, + 0.08312187886663841, + 0.03779175387961522, + 0.06693881707532062, + 0.0031904903905732272, + 0.3215626554829732, + 0.425, + 0.425, + 0.022883289882114945, + 0.022883289882114945, + 0.0008517193741032038, + 0.0008517193741032038, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 21.3, + "rotation": [] + }, + { + "weights": [ + 0.01828107267085994, + 0.01828107267085994, + 0.02888475, + 0.014926525, + 0.014926525, + 0.07233440929225508, + 0.0014139026602996239, + 0.0014139026602996239, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.029244020733274048, + 0.010758939342839372, + 0.029244020733274048, + 0.001885619473510554, + 0.2081665630851472, + 0.2081665630851472, + 0.0007414352072269783, + 0.0007414352072269783, + 0.0020631553871291015, + 0.07602928876876827, + 0.175581310050828, + 0.175581310050828, + 0.0, + 0.0, + 0.0, + 0.07602928876876827, + 0.04292280205658502, + 0.06614356232540944, + 0.0019472557519163393, + 0.31190147399902324, + 0.425, + 0.425, + 0.02164821643914494, + 0.02164821643914494, + 0.0012504467474562767, + 0.0012504467474562767, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 21.333333333333332, + "rotation": [] + }, + { + "weights": [ + 0.018090916717691072, + 0.018090916717691072, + 0.02888475, + 0.014926525, + 0.014926525, + 0.05648241852010996, + 0.0008490133165780982, + 0.0008490133165780982, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.028473358540486604, + 0.015795740442616592, + 0.028473358540486604, + 0.0019022580169673466, + 0.18960458338260638, + 0.18960458338260638, + 0.0010207517771050327, + 0.0010207517771050327, + 0.0, + 0.06714241089565409, + 0.15843861145632598, + 0.15843861145632598, + 0.0, + 0.0, + 0.0, + 0.06714241089565409, + 0.04327481346470967, + 0.06290629548685887, + 0.0015375806816986617, + 0.2944043751273835, + 0.425, + 0.425, + 0.01995195020522389, + 0.01995195020522389, + 0.0026411098028932285, + 0.0026411098028932285, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 21.366666666666667, + "rotation": [] + }, + { + "weights": [ + 0.01718431197639022, + 0.01718431197639022, + 0.02888475, + 0.014926525, + 0.014926525, + 0.04231161719986368, + 0.0007681421802512231, + 0.0007681421802512231, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.027117335416200497, + 0.02031150319746561, + 0.027117335416200497, + 0.001754012896812387, + 0.1746361085346766, + 0.1746361085346766, + 0.0014605549975697475, + 0.0014605549975697475, + 0.0, + 0.05886451926614553, + 0.15049033835530273, + 0.15049033835530273, + 0.0, + 0.0, + 0.0, + 0.05886451926614553, + 0.04096930857215607, + 0.06105075116668425, + 0.0019936100712844296, + 0.26322053372859944, + 0.425, + 0.425, + 0.01809617402298109, + 0.01809617402298109, + 0.004543254724038496, + 0.004543254724038496, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 21.4, + "rotation": [] + }, + { + "weights": [ + 0.01579717868672949, + 0.01579717868672949, + 0.02888475, + 0.014926525, + 0.014926525, + 0.028793919725077475, + 0.0012079494805740452, + 0.0012079494805740452, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02551040465047802, + 0.028787018784454867, + 0.02551040465047802, + 0.0015517626889049998, + 0.17074300476482923, + 0.17074300476482923, + 0.0018767648709139644, + 0.0018767648709139644, + 0.0, + 0.05134032767798216, + 0.13897302161369998, + 0.13897302161369998, + 0.0, + 0.0, + 0.0, + 0.05134032767798216, + 0.03773165621927804, + 0.06274979242256706, + 0.0023254522255488795, + 0.22600639036723533, + 0.425, + 0.425, + 0.016175410641091202, + 0.016175410641091202, + 0.006065752676555085, + 0.006065752676555085, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 21.433333333333334, + "rotation": [] + }, + { + "weights": [ + 0.013331850192376538, + 0.013331850192376538, + 0.02888475, + 0.014926525, + 0.014926525, + 0.015671561551945542, + 0.001328623387962579, + 0.001328623387962579, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02316961037562847, + 0.05364399990865159, + 0.02316961037562847, + 0.0017937038492943547, + 0.18390660967145636, + 0.18390660967145636, + 0.002042625771303261, + 0.002042625771303261, + 0.0, + 0.04303869354937755, + 0.12264892128961419, + 0.12264892128961419, + 0.0, + 0.0, + 0.0, + 0.04303869354937755, + 0.03410857128245488, + 0.06953727858407152, + 0.001146758560623441, + 0.20156394541263567, + 0.425, + 0.425, + 0.014469359772545941, + 0.014469359772545941, + 0.0057327001754726645, + 0.0057327001754726645, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 21.466666666666665, + "rotation": [] + }, + { + "weights": [ + 0.01106105045016322, + 0.01106105045016322, + 0.02888475, + 0.014926525, + 0.014926525, + 0.005979263782501215, + 0.0008861340050186424, + 0.0008861340050186424, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.021073928600799353, + 0.10157727752413065, + 0.021073928600799353, + 0.002324254245364239, + 0.20564265996217718, + 0.20564265996217718, + 0.0017951442354491767, + 0.0017951442354491767, + 0.0, + 0.03169832701927848, + 0.12317283142890241, + 0.12317283142890241, + 0.0, + 0.0, + 0.0, + 0.03169832701927848, + 0.02762513032981326, + 0.0780423066445759, + 0.0, + 0.20263813223157598, + 0.425, + 0.425, + 0.01358422451785632, + 0.01358422451785632, + 0.005209562129208017, + 0.005209562129208017, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 21.5, + "rotation": [] + }, + { + "weights": [ + 0.009412282971399163, + 0.009412282971399163, + 0.0349962804732578, + 0.014968754032379558, + 0.014968754032379558, + 0.001248668772833686, + 0.0006732855125197338, + 0.0006732855125197338, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02056951399662086, + 0.16071818726403364, + 0.02056951399662086, + 0.003379173962665454, + 0.22572445379836206, + 0.22572445379836206, + 0.0011864595208317035, + 0.0011864595208317035, + 0.0024233151759420115, + 0.01957548062450118, + 0.1557896387364182, + 0.1557896387364182, + 0.0, + 0.0, + 0.0, + 0.01957548062450118, + 0.020547201803752344, + 0.08601594673735749, + 0.0, + 0.23608388943331568, + 0.425, + 0.425, + 0.01353049987128802, + 0.01353049987128802, + 0.006701755284198688, + 0.006701755284198688, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 21.533333333333335, + "rotation": [] + }, + { + "weights": [ + 0.009768664836883538, + 0.009768664836883538, + 0.04379060880414075, + 0.014999122386018889, + 0.014999122386018889, + 0.0, + 0.0008308191650680128, + 0.0008308191650680128, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.021843846746677328, + 0.20297168936048227, + 0.021843846746677328, + 0.004304617523614846, + 0.23792808119739792, + 0.23792808119739792, + 0.0005678591644391413, + 0.0005678591644391413, + 0.00506946380649294, + 0.010788913430379962, + 0.2122996705983365, + 0.2122996705983365, + 0.0, + 0.0, + 0.0004876199577535905, + 0.010788913430379962, + 0.014980430901050558, + 0.09000171571969981, + 0.0, + 0.2939289029155457, + 0.425, + 0.425, + 0.014048493994133803, + 0.014048493994133803, + 0.011412687227129927, + 0.011412687227129927, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 21.566666666666666, + "rotation": [] + }, + { + "weights": [ + 0.010897094995847765, + 0.010897094995847765, + 0.04545795395970342, + 0.014926525, + 0.014926525, + 0.0, + 0.0012501710892787996, + 0.0012501710892787996, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.023481313663757865, + 0.2125020742416381, + 0.023481313663757865, + 0.0050399055371859215, + 0.2454034939408301, + 0.2454034939408301, + 0.0002032980755237594, + 0.0002032980755237594, + 0.004573999345302579, + 0.011238844306873413, + 0.26808204139981934, + 0.26808204139981934, + 0.0, + 0.0, + 0.0005610080435872078, + 0.011238844306873413, + 0.011850996528353003, + 0.09103989068950921, + 0.0, + 0.3594701715878076, + 0.425, + 0.425, + 0.014818595222064418, + 0.014818595222064418, + 0.01851794426994663, + 0.01851794426994663, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 21.6, + "rotation": [] + }, + { + "weights": [ + 0.013051547136689929, + 0.013051547136689929, + 0.04118704061423027, + 0.014926525, + 0.014926525, + 0.0016787894070148432, + 0.001012496523825185, + 0.001012496523825185, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02681466201888084, + 0.187253063406263, + 0.02681466201888084, + 0.005038165367607557, + 0.24203166642359314, + 0.24203166642359314, + 0.0002787872563515388, + 0.0002787872563515388, + 0.006562929494040347, + 0.021864559328449606, + 0.3268566576497894, + 0.3268566576497894, + 0.0, + 0.0, + 0.0, + 0.021864559328449606, + 0.009042790319238384, + 0.08812761477061676, + 0.0, + 0.41702037283352417, + 0.425, + 0.425, + 0.01556997735585484, + 0.01556997735585484, + 0.0351178133594138, + 0.0351178133594138, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 21.633333333333333, + "rotation": [] + }, + { + "weights": [ + 0.014465330567743089, + 0.014465330567743089, + 0.034206530345337716, + 0.014926525, + 0.014926525, + 0.013739666662045878, + 0.000827818397166473, + 0.000827818397166473, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.032454210618600834, + 0.13614877164363853, + 0.032454210618600834, + 0.003988028291080677, + 0.22348325039659214, + 0.22348325039659214, + 0.00040104402295712885, + 0.00040104402295712885, + 0.011718134262732084, + 0.03862781784098061, + 0.3987017095088956, + 0.3987017095088956, + 0.00042672056172575224, + 0.00042672056172575224, + 0.00046361229781593507, + 0.03862781784098061, + 0.005977504806859149, + 0.0803032306688172, + 0.0, + 0.460003579514367, + 0.425, + 0.425, + 0.015433596670627586, + 0.015433596670627586, + 0.06561925552253207, + 0.06561925552253207, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 21.666666666666668, + "rotation": [] + }, + { + "weights": [ + 0.01354672203638723, + 0.01354672203638723, + 0.02888475, + 0.014926525, + 0.014926525, + 0.03251982810241834, + 0.0005502091454608097, + 0.0005502091454608097, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.048186660451548416, + 0.08084619266646245, + 0.048186660451548416, + 0.0019834367159221834, + 0.19227651283144936, + 0.19227651283144936, + 0.0005253237778586997, + 0.0005253237778586997, + 0.029056486487388587, + 0.05457426980137822, + 0.4821473973137989, + 0.4821473973137989, + 0.00179429511938776, + 0.00179429511938776, + 0.004069777072540348, + 0.05457426980137822, + 0.003459861448832918, + 0.06666409522294994, + 0.0, + 0.48360686217035537, + 0.425, + 0.425, + 0.013476482225315906, + 0.013476482225315906, + 0.10139065890439913, + 0.10139065890439913, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 21.7, + "rotation": [] + }, + { + "weights": [ + 0.011848844162055417, + 0.011848844162055417, + 0.02888475, + 0.014926525, + 0.014926525, + 0.04856955749647956, + 0.0005085847007908989, + 0.0005085847007908989, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.08416201796914845, + 0.06938645775829039, + 0.03898131796291893, + 0.06938645775829039, + 0.0015834626608661228, + 0.15753134595496304, + 0.15753134595496304, + 0.0009033608496455206, + 0.0009033608496455206, + 0.06505809383732927, + 0.06531620387520105, + 0.5431713632174897, + 0.5431713632174897, + 0.008515499479004308, + 0.008515499479004308, + 0.010922424082777323, + 0.06531620387520105, + 0.002065125107765196, + 0.05063462475580825, + 0.0, + 0.481734935726438, + 0.425, + 0.425, + 0.010175810349839068, + 0.010175810349839068, + 0.1282365423228059, + 0.1282365423228059, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 21.733333333333334, + "rotation": [] + }, + { + "weights": [ + 0.011905474801148678, + 0.011905474801148678, + 0.02888475, + 0.014926525, + 0.014926525, + 0.051174897061926954, + 0.00026984133624604733, + 0.00026984133624604733, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.11292604825326369, + 0.08635525320257455, + 0.01838713892868585, + 0.08635525320257455, + 0.0031644707013453724, + 0.12190218370939997, + 0.12190218370939997, + 0.0014700712948771451, + 0.0014700712948771451, + 0.12312039583921425, + 0.06933720851583136, + 0.5729862225907186, + 0.5729862225907186, + 0.021439910547009527, + 0.021439910547009527, + 0.017469538641827438, + 0.06933720851583136, + 0.0024091827017920335, + 0.03466258267206803, + 0.0, + 0.4590035974979398, + 0.425, + 0.425, + 0.0072699416322367484, + 0.0072699416322367484, + 0.1421158641576766, + 0.1421158641576766, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 21.766666666666666, + "rotation": [] + }, + { + "weights": [ + 0.015921477255012296, + 0.015921477255012296, + 0.02888475, + 0.014926525, + 0.014926525, + 0.03886178604194094, + 0.0006417982080685233, + 0.0006417982080685233, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05368820647043837, + 0.05368820647043837, + 0.13514627856867645, + 0.08996604382991785, + 0.01565434711320058, + 0.08996604382991785, + 0.007697858994028392, + 0.08766500800848002, + 0.08766500800848002, + 0.0018498560400413608, + 0.0018498560400413608, + 0.18136260977813165, + 0.06779568812676834, + 0.5844746078763686, + 0.5844746078763686, + 0.029650985689035472, + 0.029650985689035472, + 0.022241731759692927, + 0.06779568812676834, + 0.004417040518351961, + 0.024445776055966085, + 0.0, + 0.41387093663215613, + 0.425, + 0.425, + 0.006685602324349535, + 0.006685602324349535, + 0.14343727145876195, + 0.14343727145876195, + 0.05420222500000001, + 0.05420222500000001, + 0.00010443199425935696 + ], + "time": 21.8, + "rotation": [] + }, + { + "weights": [ + 0.023777279523866504, + 0.023777279523866504, + 0.04184702735926422, + 0.014926525, + 0.014926525, + 0.022030671047312857, + 0.002708728132503371, + 0.002708728132503371, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.057870592207926494, + 0.057870592207926494, + 0.08106382797871312, + 0.08106382797871312, + 0.14564780976091105, + 0.08130927820290834, + 0.035930469802447705, + 0.08130927820290834, + 0.015505498461425293, + 0.06022676091108999, + 0.06022676091108999, + 0.0015752950896109844, + 0.0015752950896109844, + 0.21113169022968825, + 0.06021729441625728, + 0.5861643220697128, + 0.5861643220697128, + 0.026305613773209693, + 0.026305613773209693, + 0.02303739732929637, + 0.06021729441625728, + 0.00754808794174875, + 0.029975053295493104, + 0.0, + 0.33351226363863246, + 0.425, + 0.425, + 0.008494145189012795, + 0.008494145189012795, + 0.12337411780442503, + 0.12337411780442503, + 0.05420222500000001, + 0.05420222500000001, + 0.0019420259499124105 + ], + "time": 21.833333333333332, + "rotation": [] + }, + { + "weights": [ + 0.033143132392849224, + 0.033143132392849224, + 0.058008175609367205, + 0.014926525, + 0.014926525, + 0.015559630734579893, + 0.008113839018291656, + 0.008113839018291656, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.10166677742132113, + 0.10166677742132113, + 0.11619744252945689, + 0.11619744252945689, + 0.14792751925332198, + 0.06852213234773699, + 0.06463851358209334, + 0.06852213234773699, + 0.02701518817671706, + 0.04619685853166237, + 0.04619685853166237, + 0.001155843899718352, + 0.001155843899718352, + 0.20887859037944237, + 0.049808875045606035, + 0.5776461992944987, + 0.5776461992944987, + 0.018338690432054643, + 0.018338690432054643, + 0.02589403284447532, + 0.049808875045606035, + 0.011866886594465794, + 0.05008038117417264, + 0.0, + 0.24050253714833925, + 0.425, + 0.425, + 0.011874237060546867, + 0.011874237060546867, + 0.09404576905071729, + 0.09404576905071729, + 0.05420222500000001, + 0.05420222500000001, + 0.004450888186693189 + ], + "time": 21.866666666666667, + "rotation": [] + }, + { + "weights": [ + 0.04187981148383445, + 0.04187981148383445, + 0.07240189015865323, + 0.014926525, + 0.014926525, + 0.015926363319158542, + 0.014944288048094927, + 0.014944288048094927, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.1417130288801022, + 0.1417130288801022, + 0.14166422411799423, + 0.14166422411799423, + 0.13674478616033275, + 0.057865059588636636, + 0.08760392487049098, + 0.057865059588636636, + 0.03911233597568101, + 0.04220977090299127, + 0.04220977090299127, + 0.0009100578379418163, + 0.0009100578379418163, + 0.18586600593158167, + 0.04026142667446815, + 0.5581850886344906, + 0.5581850886344906, + 0.01421884841152599, + 0.01421884841152599, + 0.03463864486132348, + 0.04026142667446815, + 0.016469091070549818, + 0.07218037125255376, + 0.0, + 0.16030376723834439, + 0.425, + 0.425, + 0.016073322296142566, + 0.016073322296142566, + 0.06537999718316959, + 0.06537999718316959, + 0.05420222500000001, + 0.05420222500000001, + 0.00625940037092992 + ], + "time": 21.9, + "rotation": [] + }, + { + "weights": [ + 0.04955958881016284, + 0.04955958881016284, + 0.08369307816028589, + 0.014926525, + 0.014926525, + 0.020362070947885502, + 0.023048049564074177, + 0.023048049564074177, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.17063223873930305, + 0.17063223873930305, + 0.1453546665608882, + 0.1453546665608882, + 0.12371834559100009, + 0.05301052752350053, + 0.10499626100063315, + 0.05301052752350053, + 0.0453576645680836, + 0.042975485697388606, + 0.042975485697388606, + 0.0007997622447354442, + 0.0007997622447354442, + 0.16936464096818638, + 0.03421042119818073, + 0.5462671935558316, + 0.5462671935558316, + 0.014477195697171336, + 0.014477195697171336, + 0.037618333527020015, + 0.03421042119818073, + 0.02185805322868482, + 0.08532902742070803, + 0.0, + 0.11601842726979925, + 0.425, + 0.425, + 0.01973130077123641, + 0.01973130077123641, + 0.05268881257091246, + 0.05268881257091246, + 0.05709436129701237, + 0.05709436129701237, + 0.006799199325697761 + ], + "time": 21.933333333333334, + "rotation": [] + }, + { + "weights": [ + 0.05628506171384022, + 0.05628506171384022, + 0.09185835272073738, + 0.014926525, + 0.014926525, + 0.029311344027519212, + 0.03222945527439669, + 0.03222945527439669, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.18993911397244237, + 0.18993911397244237, + 0.13056098595261562, + 0.13056098595261562, + 0.10598154578890112, + 0.05276544855109276, + 0.11666318356990801, + 0.05276544855109276, + 0.0475920321685927, + 0.049815079569816526, + 0.049815079569816526, + 0.0008602540354643539, + 0.0008602540354643539, + 0.15256482490471415, + 0.0310435562261513, + 0.537532544136047, + 0.537532544136047, + 0.018543436537895874, + 0.018543436537895874, + 0.03790080797459394, + 0.0310435562261513, + 0.028025371687752848, + 0.09213917079780773, + 0.0, + 0.10191715189388814, + 0.425, + 0.425, + 0.023237233012914648, + 0.023237233012914648, + 0.05220345088413781, + 0.05220345088413781, + 0.05872437345584901, + 0.05872437345584901, + 0.006206017759229453 + ], + "time": 21.966666666666665, + "rotation": [] + }, + { + "weights": [ + 0.04957231900635719, + 0.04957231900635719, + 0.0832319509592793, + 0.021433024845033368, + 0.021433024845033368, + 0.027145205661654445, + 0.02912514297307472, + 0.02912514297307472, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.16377896379932844, + 0.16377896379932844, + 0.12182859913579037, + 0.12182859913579037, + 0.09686778096824265, + 0.04850778550061635, + 0.10087117505357363, + 0.04850778550061635, + 0.04154853318444113, + 0.05058908357063211, + 0.05058908357063211, + 0.0006236318333822011, + 0.0006236318333822011, + 0.13707491741978167, + 0.034928911345041475, + 0.5297993083085326, + 0.5297993083085326, + 0.025120101893688115, + 0.025120101893688115, + 0.05315366756956587, + 0.034928911345041475, + 0.02454144534711933, + 0.08164017902877245, + 0.005392344863641827, + 0.09193944372743562, + 0.425, + 0.425, + 0.005088878968748304, + 0.005088878968748304, + 0.04694314415940415, + 0.04694314415940415, + 0.05954981257124119, + 0.05954981257124119, + 0.004922462547717446 + ], + "time": 22.0, + "rotation": [] + }, + { + "weights": [ + 0.0391590670283351, + 0.0391590670283351, + 0.07160305001196399, + 0.02107666906806673, + 0.02107666906806673, + 0.021431577028263163, + 0.024789453688121948, + 0.024789453688121948, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.1303807557161364, + 0.1303807557161364, + 0.1159668978481064, + 0.1159668978481064, + 0.08291250194112451, + 0.04365760494200949, + 0.08505510643834147, + 0.04365760494200949, + 0.03411873431787601, + 0.043803321206498644, + 0.043803321206498644, + 0.007859093361667216, + 0.007859093361667216, + 0.1160142551930176, + 0.04180748193036938, + 0.4942118470157891, + 0.4942118470157891, + 0.03785147237635791, + 0.03785147237635791, + 0.09137602828088254, + 0.04180748193036938, + 0.01933360103340374, + 0.07592549792357842, + 0.008697748645430516, + 0.07505152356766512, + 0.425, + 0.425, + 0.004864614350809933, + 0.004864614350809933, + 0.03704615321365137, + 0.03704615321365137, + 0.05443317667965796, + 0.05443317667965796, + 0.0036809454006808103 + ], + "time": 22.033333333333335, + "rotation": [] + }, + { + "weights": [ + 0.028655014945460168, + 0.028655014945460168, + 0.06396620342774043, + 0.021014334769418577, + 0.021014334769418577, + 0.017062261913503903, + 0.02140807424272808, + 0.02140807424272808, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.10302226363814292, + 0.10302226363814292, + 0.1103799818349735, + 0.1103799818349735, + 0.06220141596027776, + 0.04040422056402473, + 0.0798747797523225, + 0.04040422056402473, + 0.02745389509946105, + 0.03352666201868222, + 0.03352666201868222, + 0.027910466002034274, + 0.027910466002034274, + 0.08843705651483352, + 0.051012160150068105, + 0.4043584720896819, + 0.4043584720896819, + 0.05830037088266437, + 0.05830037088266437, + 0.145689424100731, + 0.051012160150068105, + 0.013524415450436714, + 0.0799092593469789, + 0.0069814796426466465, + 0.053251075425318234, + 0.425, + 0.425, + 0.003964109680482316, + 0.003964109680482316, + 0.02531504477374253, + 0.02531504477374253, + 0.05420222500000001, + 0.05420222500000001, + 0.0027719616889953585 + ], + "time": 22.066666666666666, + "rotation": [] + }, + { + "weights": [ + 0.01793911966184772, + 0.01793911966184772, + 0.0590117696140493, + 0.020625277273384045, + 0.020625277273384045, + 0.01349291553099949, + 0.017376219935803877, + 0.017376219935803877, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.07740719628830743, + 0.07740719628830743, + 0.10414510773760921, + 0.10414510773760921, + 0.05126333, + 0.03807713424875618, + 0.08030456677788772, + 0.03807713424875618, + 0.020198204536877908, + 0.025478614077326756, + 0.025478614077326756, + 0.05737159944680472, + 0.05737159944680472, + 0.05921058793153072, + 0.06060920455271286, + 0.2694902635046411, + 0.2694902635046411, + 0.09742296258253703, + 0.09742296258253703, + 0.19075043213864157, + 0.06060920455271286, + 0.007258009130046471, + 0.08165838801789843, + 0.010738404769273017, + 0.03438100885777242, + 0.425, + 0.425, + 0.0028096845100323334, + 0.0028096845100323334, + 0.015194493784968323, + 0.015194493784968323, + 0.05420222500000001, + 0.05420222500000001, + 0.0024144661657157377 + ], + "time": 22.1, + "rotation": [] + }, + { + "weights": [ + 0.006160033500949731, + 0.006160033500949731, + 0.05473856566917324, + 0.020106111701914807, + 0.020106111701914807, + 0.007936604799968848, + 0.013676024662824905, + 0.013676024662824905, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.09345240414852181, + 0.09345240414852181, + 0.05126333, + 0.036177652812987335, + 0.0768971736402738, + 0.036177652812987335, + 0.011035783685186273, + 0.026778414449876227, + 0.026778414449876227, + 0.08472289744550675, + 0.08472289744550675, + 0.028982137666419612, + 0.061301475434887134, + 0.12244860798120485, + 0.12244860798120485, + 0.16824632375672144, + 0.16824632375672144, + 0.19704049416748026, + 0.061301475434887134, + 0.002070496811651854, + 0.07453070823128527, + 0.04146216797331966, + 0.017738291578126578, + 0.425, + 0.425, + 0.001775773441436743, + 0.001775773441436743, + 0.006905147543202341, + 0.006905147543202341, + 0.05420222500000001, + 0.05420222500000001, + 0.002014840436453112 + ], + "time": 22.133333333333333, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.05017171297754557, + 0.01981908639388561, + 0.01981908639388561, + 0.004362257782902033, + 0.011353199745205279, + 0.011353199745205279, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.08215511417814658, + 0.08215511417814658, + 0.05126333, + 0.03566724373217746, + 0.06507139381340568, + 0.03566724373217746, + 0.0033131706376312913, + 0.059640466592141506, + 0.059640466592141506, + 0.08974899438202985, + 0.08974899438202985, + 0.011884923315778055, + 0.049572504809012194, + 0.03158495677368976, + 0.03158495677368976, + 0.229262421050546, + 0.229262421050546, + 0.1584838652899678, + 0.049572504809012194, + 0.002901366824398232, + 0.07339139137188994, + 0.08020537463682034, + 0.008867130869505347, + 0.425, + 0.425, + 0.001898594807088373, + 0.001898594807088373, + 0.0025851031784348303, + 0.0025851031784348303, + 0.05420222500000001, + 0.05420222500000001, + 0.0015889346287870883 + ], + "time": 22.166666666666668, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.04903283955795422, + 0.0195125168848208, + 0.0195125168848208, + 0.007023067506296289, + 0.012298450191999415, + 0.012298450191999415, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07325181690709927, + 0.07325181690709927, + 0.05126333, + 0.0390072929676698, + 0.057031958247934035, + 0.0390072929676698, + 0.00027165983100326473, + 0.13466091973707073, + 0.13466091973707073, + 0.06832032883077552, + 0.06832032883077552, + 0.01404196309495944, + 0.03265691419949335, + 0.00428473302296227, + 0.00428473302296227, + 0.21168012609211145, + 0.21168012609211145, + 0.10010847999201132, + 0.03265691419949335, + 0.008415847195654495, + 0.09050840989135353, + 0.08575746230781074, + 0.004512160263803533, + 0.425, + 0.425, + 0.0037591829790600676, + 0.0037591829790600676, + 0.002644226965209352, + 0.002644226965209352, + 0.05420222500000001, + 0.05420222500000001, + 0.0018732644906457579 + ], + "time": 22.2, + "rotation": [] + }, + { + "weights": [ + 2.046472259930102e-05, + 2.046472259930102e-05, + 0.051636279267924134, + 0.01768760079839161, + 0.01768760079839161, + 0.012841884046792977, + 0.017009880553398804, + 0.017009880553398804, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06876961418560569, + 0.06876961418560569, + 0.05126333, + 0.043251237645745254, + 0.06766092675072803, + 0.043251237645745254, + 0.00424037555764828, + 0.20967697272343283, + 0.20967697272343283, + 0.03401260027528872, + 0.03401260027528872, + 0.034466268760817376, + 0.019388751632400905, + 0.056564025793756696, + 0.056564025793756696, + 0.1119038648371185, + 0.1119038648371185, + 0.05147063631032191, + 0.019388751632400905, + 0.00927241912909916, + 0.1108010983892849, + 0.052592823654413194, + 0.012752321788242867, + 0.425, + 0.425, + 0.007683736772409503, + 0.007683736772409503, + 0.007330782032970866, + 0.007330782032970866, + 0.05420222500000001, + 0.05420222500000001, + 0.0024454925209283817 + ], + "time": 22.233333333333334, + "rotation": [] + }, + { + "weights": [ + 0.009470595658889833, + 0.009470595658889833, + 0.05559436998197007, + 0.015678648065794533, + 0.015678648065794533, + 0.012091738198484685, + 0.023539412660258142, + 0.023539412660258142, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0653071227350405, + 0.0653071227350405, + 0.06528427632791652, + 0.06528427632791652, + 0.05126333, + 0.04578847853200774, + 0.09906551701681948, + 0.04578847853200774, + 0.012133093178272238, + 0.23042719598327355, + 0.23042719598327355, + 0.01048368285277059, + 0.01048368285277059, + 0.05252927009548457, + 0.014811969442026942, + 0.19313977025449264, + 0.19313977025449264, + 0.025509050861000984, + 0.025509050861000984, + 0.029583296924829458, + 0.014811969442026942, + 0.0023063906601497094, + 0.10477833960737495, + 0.019538376586777807, + 0.04510209124003134, + 0.425, + 0.425, + 0.013422506935894479, + 0.013422506935894479, + 0.0139061274539147, + 0.0139061274539147, + 0.05420222500000001, + 0.05420222500000001, + 0.001552728563547134 + ], + "time": 22.266666666666666, + "rotation": [] + }, + { + "weights": [ + 0.020559011798884176, + 0.020559011798884176, + 0.0586181459682328, + 0.015160661829920494, + 0.015160661829920494, + 0.010986909376723416, + 0.0275313852354884, + 0.0275313852354884, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.08927897672568044, + 0.08927897672568044, + 0.05965174473822113, + 0.05965174473822113, + 0.05126333, + 0.043984559976628826, + 0.12586151225226258, + 0.043984559976628826, + 0.02058487432077526, + 0.20903618207999625, + 0.20903618207999625, + 0.0009441430361143144, + 0.0009441430361143144, + 0.06283816067235806, + 0.019330354886395576, + 0.3831536746450831, + 0.3831536746450831, + 0.0, + 0.0, + 0.022906564548611626, + 0.019330354886395576, + 0.0, + 0.08285556265286032, + 0.003212942183017725, + 0.11977041693670401, + 0.425, + 0.425, + 0.019810750314167555, + 0.019810750314167555, + 0.029443313899849125, + 0.029443313899849125, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 22.3, + "rotation": [] + }, + { + "weights": [ + 0.02736303244850464, + 0.02736303244850464, + 0.05802417950970783, + 0.015997369268661906, + 0.015997369268661906, + 0.0201845059437411, + 0.026133711183709742, + 0.026133711183709742, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.09530299625226425, + 0.09530299625226425, + 0.0525651111666645, + 0.0525651111666645, + 0.0586086487131459, + 0.03895197755524088, + 0.127854014635086, + 0.03895197755524088, + 0.02557063129331383, + 0.20315555057355322, + 0.20315555057355322, + 0.0, + 0.0, + 0.06168742020215304, + 0.03387324799384388, + 0.5103063528026851, + 0.5103063528026851, + 0.0028371664562395617, + 0.0028371664562395617, + 0.016147036304963478, + 0.03387324799384388, + 0.0, + 0.07075328230857844, + 0.0, + 0.21589318088122764, + 0.45958984345197657, + 0.45958984345197657, + 0.024645944855042852, + 0.024645944855042852, + 0.044115631202501886, + 0.044115631202501886, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 22.333333333333332, + "rotation": [] + }, + { + "weights": [ + 0.02593801877062234, + 0.02593801877062234, + 0.04978564706231864, + 0.01613525625905582, + 0.01613525625905582, + 0.04138792678713796, + 0.019919658019872638, + 0.019919658019872638, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.07603228097515442, + 0.07603228097515442, + 0.04745886698589324, + 0.04745886698589324, + 0.05126333, + 0.03131418669862405, + 0.10202090374061035, + 0.03131418669862405, + 0.022904095479420242, + 0.23271446802786405, + 0.23271446802786405, + 0.0, + 0.0, + 0.05171970187553335, + 0.05463002600840157, + 0.5144258294786723, + 0.5144258294786723, + 0.0023440527596643975, + 0.0023440527596643975, + 0.0039101923150675596, + 0.05463002600840157, + 0.007183339978967389, + 0.0751132841621126, + 0.0, + 0.3089367858001162, + 0.49577497329030695, + 0.49577497329030695, + 0.026937087923288326, + 0.026937087923288326, + 0.046888199501803916, + 0.046888199501803916, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 22.366666666666667, + "rotation": [] + }, + { + "weights": [ + 0.02157941013574599, + 0.02157941013574599, + 0.03487891844872915, + 0.01565436305799416, + 0.01565436305799416, + 0.06674215293356348, + 0.011791397251987024, + 0.011791397251987024, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.04771625367658476, + 0.04771625367658476, + 0.05126333, + 0.02698243025459834, + 0.06645282834768292, + 0.02698243025459834, + 0.01560873409200991, + 0.27098240894930686, + 0.27098240894930686, + 1.4280692807265674e-05, + 1.4280692807265674e-05, + 0.036758659886462326, + 0.07656623470996102, + 0.43921736351081275, + 0.43921736351081275, + 0.0023229459566729395, + 0.0023229459566729395, + 0.0, + 0.07656623470996102, + 0.018089159578084935, + 0.08147860552583416, + 0.0035263249916689717, + 0.3789429392133438, + 0.4932204229491095, + 0.4932204229491095, + 0.027589054299252357, + 0.027589054299252357, + 0.03448202165641953, + 0.03448202165641953, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 22.4, + "rotation": [] + }, + { + "weights": [ + 0.016518334046538376, + 0.016518334046538376, + 0.02888475, + 0.015056485470403261, + 0.015056485470403261, + 0.08979034924081389, + 0.0056485806325716585, + 0.0056485806325716585, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.050591064297727154, + 0.050591064297727154, + 0.05126333, + 0.026343848229342867, + 0.03635034173727033, + 0.026343848229342867, + 0.008217457894768028, + 0.2906249372022491, + 0.2906249372022491, + 0.0002341417760388659, + 0.0002341417760388659, + 0.024524251424840503, + 0.09330001484070499, + 0.3610742947884966, + 0.3610742947884966, + 0.0024763166904449444, + 0.0024763166904449444, + 0.0, + 0.09330001484070499, + 0.02434865481087138, + 0.08545244378702976, + 0.007401769927569794, + 0.42639127373695346, + 0.48463644853660015, + 0.48463644853660015, + 0.027631978520325236, + 0.027631978520325236, + 0.023547804834587217, + 0.023547804834587217, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 22.433333333333334, + "rotation": [] + }, + { + "weights": [ + 0.014569368000541405, + 0.014569368000541405, + 0.02888475, + 0.014926525, + 0.014926525, + 0.10625303217342916, + 0.0037962492488856784, + 0.0037962492488856784, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05460315229637279, + 0.05460315229637279, + 0.05126333, + 0.025888984429873054, + 0.020349742046424302, + 0.025888984429873054, + 0.006543210348380459, + 0.2881150720374923, + 0.2881150720374923, + 0.00029223859526350006, + 0.00029223859526350006, + 0.018388661210026046, + 0.10193539357611106, + 0.31762019012655507, + 0.31762019012655507, + 0.0034847553819417933, + 0.0034847553819417933, + 0.0004585600325039458, + 0.10193539357611106, + 0.028354818373918515, + 0.08971955031156534, + 0.00876169885907854, + 0.45040736879621207, + 0.49038139794554003, + 0.49038139794554003, + 0.027742470034531164, + 0.027742470034531164, + 0.018793693344507888, + 0.018793693344507888, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 22.466666666666665, + "rotation": [] + }, + { + "weights": [ + 0.015775437214012644, + 0.015775437214012644, + 0.02888475, + 0.014969968796327454, + 0.014969968796327454, + 0.10947660718645362, + 0.009164937465850788, + 0.009164937465850788, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.058788331491606546, + 0.058788331491606546, + 0.05126333, + 0.024554448646982394, + 0.019467118339879158, + 0.024554448646982394, + 0.008191460583891181, + 0.2693251188312257, + 0.2693251188312257, + 0.0004907482727763373, + 0.0004907482727763373, + 0.017590433305927675, + 0.1021148509212902, + 0.3163678795099256, + 0.3163678795099256, + 0.0043215724240456286, + 0.0043215724240456286, + 0.0, + 0.1021148509212902, + 0.030370257156235814, + 0.09295563506228578, + 0.008914361894130701, + 0.4474863444055827, + 0.5151345844779692, + 0.5151345844779692, + 0.028501447311469467, + 0.028501447311469467, + 0.021634401859981656, + 0.021634401859981656, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 22.5, + "rotation": [] + }, + { + "weights": [ + 0.023734979837068473, + 0.023734979837068473, + 0.02888475, + 0.015137964168316295, + 0.015137964168316295, + 0.09719349582280426, + 0.023064838901960413, + 0.023064838901960413, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06357006169855592, + 0.06357006169855592, + 0.05126333, + 0.02122649029465079, + 0.030417206840855717, + 0.02122649029465079, + 0.01135301162887896, + 0.2420175780143055, + 0.2420175780143055, + 0.000837525384933022, + 0.000837525384933022, + 0.02273285229291233, + 0.09490940969969539, + 0.3550398681844982, + 0.3550398681844982, + 0.0052610109959329845, + 0.0052610109959329845, + 0.0, + 0.09490940969969539, + 0.03058671355247496, + 0.09199196760143548, + 0.00860432971801076, + 0.4104875854083468, + 0.5580614622150146, + 0.5580614622150146, + 0.03031054790530884, + 0.03031054790530884, + 0.030788421790514654, + 0.030788421790514654, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 22.533333333333335, + "rotation": [] + }, + { + "weights": [ + 0.04166476465761659, + 0.04166476465761659, + 0.04164731252406322, + 0.015058059245899064, + 0.015058059245899064, + 0.07451548331550185, + 0.040966480484764464, + 0.040966480484764464, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05826540037631646, + 0.05826540037631646, + 0.0715132843703031, + 0.0715132843703031, + 0.05126333, + 0.0181556725, + 0.05050328301531925, + 0.0181556725, + 0.014486245970640854, + 0.21046672293118057, + 0.21046672293118057, + 0.001241783257241227, + 0.001241783257241227, + 0.03370811843446321, + 0.08284049582268505, + 0.41877098040921323, + 0.41877098040921323, + 0.006327793667359007, + 0.006327793667359007, + 0.0, + 0.08284049582268505, + 0.028631512288536328, + 0.08549030487026482, + 0.008977173162358142, + 0.34945491041455934, + 0.6085659265518186, + 0.6085659265518186, + 0.032737333050795944, + 0.032737333050795944, + 0.04403433887554064, + 0.04403433887554064, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 22.566666666666666, + "rotation": [] + }, + { + "weights": [ + 0.06711094661482739, + 0.06711094661482739, + 0.053363624215126006, + 0.014926525, + 0.014926525, + 0.05184011672224314, + 0.0549851760002119, + 0.0549851760002119, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.09686508748148163, + 0.09686508748148163, + 0.07730109941746503, + 0.07730109941746503, + 0.06531349218317437, + 0.0181556725, + 0.0747291357176644, + 0.0181556725, + 0.018226041538374753, + 0.18357985722167142, + 0.18357985722167142, + 0.0014202020782977335, + 0.0014202020782977335, + 0.04605153458459034, + 0.0703254683741501, + 0.4809607765504289, + 0.4809607765504289, + 0.007590312430901183, + 0.007590312430901183, + 0.0, + 0.0703254683741501, + 0.02462579991136277, + 0.07818549999168936, + 0.009402213777814587, + 0.2907719799450464, + 0.6482720894472935, + 0.6482720894472935, + 0.034804499915667926, + 0.034804499915667926, + 0.05483305664466957, + 0.05483305664466957, + 0.05698744594441242, + 0.05698744594441242, + 0.0 + ], + "time": 22.6, + "rotation": [] + }, + { + "weights": [ + 0.08812573488269529, + 0.08812573488269529, + 0.058452749465193035, + 0.014926525, + 0.014926525, + 0.03814467447144642, + 0.059108984044619936, + 0.059108984044619936, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.11985120656234871, + 0.11985120656234871, + 0.0724077756383589, + 0.0724077756383589, + 0.0771297401615551, + 0.0181556725, + 0.09314992989812575, + 0.0181556725, + 0.021528487067137433, + 0.17073790771620603, + 0.17073790771620603, + 0.0011742384878120245, + 0.0011742384878120245, + 0.05473412775567597, + 0.06257983882512361, + 0.5198939906699314, + 0.5198939906699314, + 0.007838764201317511, + 0.007838764201317511, + 0.0, + 0.06257983882512361, + 0.020349468077932073, + 0.0771125882863998, + 0.007556803418057301, + 0.2569663124425069, + 0.6681749326842168, + 0.6681749326842168, + 0.035722346774169356, + 0.035722346774169356, + 0.05970940531364506, + 0.05970940531364506, + 0.059451648762474045, + 0.059451648762474045, + 0.0 + ], + "time": 22.633333333333333, + "rotation": [] + }, + { + "weights": [ + 0.0940099517149584, + 0.0940099517149584, + 0.05740978558148654, + 0.014926525, + 0.014926525, + 0.03795023347650253, + 0.05382181272975033, + 0.05382181272975033, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.1175601936344589, + 0.1175601936344589, + 0.05655601610030443, + 0.05655601610030443, + 0.07509048293743811, + 0.0181556725, + 0.09500990901674539, + 0.0181556725, + 0.02222049832344054, + 0.17702819534710462, + 0.17702819534710462, + 0.0006943522619881795, + 0.0006943522619881795, + 0.057087863555976295, + 0.06253498473337714, + 0.5255002737045285, + 0.5255002737045285, + 0.007532488661152971, + 0.007532488661152971, + 0.0, + 0.06253498473337714, + 0.017794257189546303, + 0.08317128313439227, + 0.0030386535184723966, + 0.25033815077372945, + 0.6690904395920886, + 0.6690904395920886, + 0.03574435357536586, + 0.03574435357536586, + 0.057547494609441044, + 0.057547494609441044, + 0.058138815908850255, + 0.058138815908850255, + 0.0 + ], + "time": 22.666666666666668, + "rotation": [] + }, + { + "weights": [ + 0.08154865327690325, + 0.08154865327690325, + 0.052416953444480864, + 0.014926525, + 0.014926525, + 0.051909359438078714, + 0.04376261016087871, + 0.04376261016087871, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.09165300354361527, + 0.09165300354361527, + 0.044993344749835545, + 0.044993344749835545, + 0.06499428493635992, + 0.018349125694307432, + 0.07833232062203539, + 0.018349125694307432, + 0.01882269483591828, + 0.1973510499511445, + 0.1973510499511445, + 0.0006047872121312783, + 0.0006047872121312783, + 0.05371937432459419, + 0.07005824467965531, + 0.49656568808214974, + 0.49656568808214974, + 0.007007391990295474, + 0.007007391990295474, + 0.0, + 0.07005824467965531, + 0.01813050178544861, + 0.0900263552154813, + 0.0005417125565665092, + 0.26338050876344943, + 0.6536298045090263, + 0.6536298045090263, + 0.03524826415947503, + 0.03524826415947503, + 0.049430529108004884, + 0.049430529108004884, + 0.05468298157865761, + 0.05468298157865761, + 0.0 + ], + "time": 22.7, + "rotation": [] + }, + { + "weights": [ + 0.057693665554480855, + 0.057693665554480855, + 0.04674027189612386, + 0.014926525, + 0.014926525, + 0.07029457635113168, + 0.03276442150984489, + 0.03276442150984489, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05782088598174536, + 0.05782088598174536, + 0.0448066525, + 0.0448066525, + 0.053496406227350204, + 0.019915680153917585, + 0.05503019639423912, + 0.019915680153917585, + 0.013154417063508707, + 0.21504785673958904, + 0.21504785673958904, + 0.0008504570288849725, + 0.0008504570288849725, + 0.0478755743375846, + 0.07882222357605181, + 0.4569868313414707, + 0.4569868313414707, + 0.006815489993563716, + 0.006815489993563716, + 0.0, + 0.07882222357605181, + 0.020391902859721853, + 0.08864555869783669, + 0.0020828567445278145, + 0.28043618883405397, + 0.6126715353557037, + 0.6126715353557037, + 0.03412926784583499, + 0.03412926784583499, + 0.03861461619713474, + 0.03861461619713474, + 0.05420222500000001, + 0.05420222500000001, + 0.0022483754636985903 + ], + "time": 22.733333333333334, + "rotation": [] + }, + { + "weights": [ + 0.032359796443155814, + 0.032359796443155814, + 0.0426634249942643, + 0.015000174248343875, + 0.015000174248343875, + 0.07947370686701362, + 0.023037795855530653, + 0.023037795855530653, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.04571056318294319, + 0.04571056318294319, + 0.05126333, + 0.018928799743987153, + 0.04149284839630124, + 0.018928799743987153, + 0.00922824474317686, + 0.2140311322041919, + 0.2140311322041919, + 0.0009633138562951764, + 0.0009633138562951764, + 0.042740366927215, + 0.08199009687772814, + 0.43723474528108297, + 0.43723474528108297, + 0.006967756072325361, + 0.006967756072325361, + 0.003030437124626973, + 0.08199009687772814, + 0.021448112385613567, + 0.07944776628698616, + 0.005780746149165287, + 0.28345088745866487, + 0.5446920314005439, + 0.5446920314005439, + 0.031850983372756395, + 0.031850983372756395, + 0.02947456432240348, + 0.02947456432240348, + 0.05420222500000001, + 0.05420222500000001, + 0.0030121079513004832 + ], + "time": 22.766666666666666, + "rotation": [] + }, + { + "weights": [ + 0.017936301896614673, + 0.017936301896614673, + 0.046567425451108355, + 0.01615239504247665, + 0.01615239504247665, + 0.07327567903058865, + 0.018527834915689045, + 0.018527834915689045, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06641652791627811, + 0.06641652791627811, + 0.053892323055437605, + 0.0181556725, + 0.04702161431312558, + 0.0181556725, + 0.014155788400343476, + 0.19158424798931384, + 0.19158424798931384, + 0.0004590244734260651, + 0.0004590244734260651, + 0.049771772112165144, + 0.07833559885621066, + 0.43404723874160195, + 0.43404723874160195, + 0.0066445405728050595, + 0.0066445405728050595, + 0.014830340165644874, + 0.07833559885621066, + 0.02349968180060385, + 0.08084235084908342, + 0.009192589936511852, + 0.25310529427868966, + 0.4582136550119943, + 0.4582136550119943, + 0.029346896878310595, + 0.029346896878310595, + 0.025799193552562154, + 0.025799193552562154, + 0.05420222500000001, + 0.05420222500000001, + 0.0024966294212000694 + ], + "time": 22.8, + "rotation": [] + }, + { + "weights": [ + 0.016611605031149716, + 0.016611605031149716, + 0.06016963528735293, + 0.017917352542832235, + 0.017917352542832235, + 0.05535199833767752, + 0.023114281812948827, + 0.023114281812948827, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.06671668887138363, + 0.06671668887138363, + 0.10837378970214293, + 0.10837378970214293, + 0.05925668456724709, + 0.0181556725, + 0.06565312215260093, + 0.0181556725, + 0.03147955920015061, + 0.15856669449380456, + 0.15856669449380456, + 5.4640954892550196e-05, + 5.4640954892550196e-05, + 0.07577320741755617, + 0.06584723953689844, + 0.3974248534866739, + 0.3974248534866739, + 0.007641856771494655, + 0.007641856771494655, + 0.03513114348586115, + 0.06584723953689844, + 0.0335303727005209, + 0.10397714610610682, + 0.01452161776168005, + 0.1869420907327106, + 0.425, + 0.425, + 0.027528765286718083, + 0.027528765286718083, + 0.02590211845402205, + 0.02590211845402205, + 0.05420222500000001, + 0.05420222500000001, + 0.002575742772647311 + ], + "time": 22.833333333333332, + "rotation": [] + }, + { + "weights": [ + 0.027489098986344662, + 0.027489098986344662, + 0.08262537462370731, + 0.02208694283506461, + 0.02208694283506461, + 0.03985811557088577, + 0.03550225613372664, + 0.03550225613372664, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.13745927624404422, + 0.13745927624404422, + 0.1666078554732458, + 0.1666078554732458, + 0.06391751553331099, + 0.0181556725, + 0.08225534967013765, + 0.0181556725, + 0.051719615395579996, + 0.13065107443502963, + 0.13065107443502963, + 0.0, + 0.0, + 0.11287876548511636, + 0.048063247105372776, + 0.3125291794538496, + 0.3125291794538496, + 0.011665165557392998, + 0.011665165557392998, + 0.05751628266381363, + 0.048063247105372776, + 0.052863971356834655, + 0.13798894754477903, + 0.025605170375534454, + 0.11442299719367702, + 0.425, + 0.425, + 0.026460135323660698, + 0.026460135323660698, + 0.024559173599949892, + 0.024559173599949892, + 0.05909500844167061, + 0.05909500844167061, + 0.004172666477305546 + ], + "time": 22.866666666666667, + "rotation": [] + }, + { + "weights": [ + 0.042227677521961056, + 0.042227677521961056, + 0.11168047189712518, + 0.030690743082336002, + 0.030690743082336002, + 0.03357826886432509, + 0.048353016137012386, + 0.048353016137012386, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.21184740045240935, + 0.21184740045240935, + 0.21558827257582108, + 0.21558827257582108, + 0.06658485808542794, + 0.01880943463086503, + 0.08115987028394422, + 0.01880943463086503, + 0.06185516741658957, + 0.10807070934346738, + 0.10807070934346738, + 0.0, + 0.0, + 0.1336154754672731, + 0.03042905350614869, + 0.2177309915423392, + 0.2177309915423392, + 0.01805624882025377, + 0.01805624882025377, + 0.07151173938597949, + 0.03042905350614869, + 0.06601703848157607, + 0.1525164978844778, + 0.037925565881388505, + 0.0682903191873005, + 0.425, + 0.425, + 0.025675507272992802, + 0.025675507272992802, + 0.022251753721918364, + 0.022251753721918364, + 0.06726770801126206, + 0.06726770801126206, + 0.005015176082296027 + ], + "time": 22.9, + "rotation": [] + }, + { + "weights": [ + 0.052995691767760644, + 0.052995691767760644, + 0.1329652249813079, + 0.04349459878035952, + 0.04349459878035952, + 0.029944493834461457, + 0.05746257265231434, + 0.05746257265231434, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.2529728448816707, + 0.2529728448816707, + 0.24081300209675505, + 0.24081300209675505, + 0.06994147066559107, + 0.019168329869886126, + 0.07909276706831787, + 0.019168329869886126, + 0.06520047107977521, + 0.09150513623441961, + 0.09150513623441961, + 0.0, + 0.0, + 0.13889470526150283, + 0.021045122162571962, + 0.18307217955589272, + 0.18307217955589272, + 0.023266270916376782, + 0.023266270916376782, + 0.07292456211788309, + 0.021045122162571962, + 0.06985791368143895, + 0.14757409776960087, + 0.04738485249025477, + 0.052382514945098296, + 0.425, + 0.425, + 0.026292097909109913, + 0.026292097909109913, + 0.025050578745348093, + 0.025050578745348093, + 0.07494440964822252, + 0.07494440964822252, + 0.00510957600282771 + ], + "time": 22.933333333333334, + "rotation": [] + }, + { + "weights": [ + 0.06226857352469643, + 0.06226857352469643, + 0.1507211074233054, + 0.05625662332666769, + 0.05625662332666769, + 0.03073041918022288, + 0.06403345266090965, + 0.06403345266090965, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.27076921335288445, + 0.27076921335288445, + 0.24599296950868177, + 0.24599296950868177, + 0.07338412574359345, + 0.01903336230967147, + 0.07173264537538791, + 0.01903336230967147, + 0.060903510930282664, + 0.08053279912897508, + 0.08053279912897508, + 0.000764816189517402, + 0.000764816189517402, + 0.12850593669073904, + 0.018093020735042417, + 0.19081676751375173, + 0.19081676751375173, + 0.028090437554887344, + 0.028090437554887344, + 0.06293569962893206, + 0.018093020735042417, + 0.06510050807680398, + 0.12341722079685737, + 0.055029292883617485, + 0.06551874812160216, + 0.425, + 0.425, + 0.028035674010004293, + 0.028035674010004293, + 0.031471146430288026, + 0.031471146430288026, + 0.08014774431607544, + 0.08014774431607544, + 0.00442214299525533 + ], + "time": 22.966666666666665, + "rotation": [] + }, + { + "weights": [ + 0.11295830522906455, + 0.11426450522906455, + 0.21247080598789042, + 0.04895964295596995, + 0.04895964295596995, + 0.03438950016689133, + 0.05479348400392288, + 0.05479348400392288, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.2314472381431658, + 0.2314472381431658, + 0.21840306563543593, + 0.21840306563543593, + 0.08845299340632488, + 0.033338514870565016, + 0.06266328034129261, + 0.033338514870565016, + 0.05219764331324005, + 0.09144090604417163, + 0.09144090604417163, + 0.00011824792005964367, + 0.00011824792005964367, + 0.12288892810594038, + 0.02434841157323646, + 0.2735638777414954, + 0.2735638777414954, + 0.02699995256744981, + 0.02699995256744981, + 0.052686534006097796, + 0.02434841157323646, + 0.05399711004401342, + 0.10610718626326218, + 0.047065458156827285, + 0.12132904438137188, + 0.425, + 0.425, + 0.006024596880710846, + 0.006024596880710846, + 0.05645241618308481, + 0.05645241618308481, + 0.06870797690954428, + 0.06870797690954428, + 0.0032516808354226046 + ], + "time": 23.0, + "rotation": [] + }, + { + "weights": [ + 0.056095063500139306, + 0.057886103500139306, + 0.23083207136419648, + 0.03794648690770066, + 0.03794648690770066, + 0.03872473740151945, + 0.04262432339601211, + 0.04262432339601211, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.18115133458659746, + 0.18115133458659746, + 0.18276118460510432, + 0.18276118460510432, + 0.1011723543916429, + 0.03948982522447516, + 0.05742351285048885, + 0.03948982522447516, + 0.04308030373372485, + 0.11323736764135803, + 0.11323736764135803, + 0.0, + 0.0, + 0.11087213293427495, + 0.030972545416582165, + 0.376780197024345, + 0.376780197024345, + 0.02177761429477303, + 0.02177761429477303, + 0.04244140496122688, + 0.030972545416582165, + 0.040981335778321484, + 0.09185281968897278, + 0.03466561748867938, + 0.16975620545092074, + 0.425, + 0.425, + 0.007189379359994609, + 0.007189379359994609, + 0.08045388481446669, + 0.08045388481446669, + 0.06123485743567303, + 0.06123485743567303, + 0.0023580509814478063 + ], + "time": 23.033333333333335, + "rotation": [] + }, + { + "weights": [ + 0.04067154613190459, + 0.04067154613190459, + 0.2367782993454135, + 0.07396048188040008, + 0.07124479188040009, + 0.0430030382105282, + 0.03223051326349372, + 0.03223051326349372, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.13653388162409608, + 0.13653388162409608, + 0.14811215890305363, + 0.14811215890305363, + 0.10089098385402126, + 0.03988558587103791, + 0.055646532454660884, + 0.03988558587103791, + 0.03481832519838847, + 0.14301499165594567, + 0.14301499165594567, + 0.0, + 0.0, + 0.09056578142834545, + 0.03647026467536174, + 0.47285974398255304, + 0.47285974398255304, + 0.014765067065932901, + 0.014765067065932901, + 0.0324329644441604, + 0.03647026467536174, + 0.028207672041441673, + 0.08057445540492009, + 0.0228956627260361, + 0.2007988049515655, + 0.425, + 0.425, + 0.00927411655017307, + 0.00927411655017307, + 0.09228616021573538, + 0.09228616021573538, + 0.054779743100407854, + 0.054779743100407854, + 0.00201338066586426 + ], + "time": 23.066666666666666, + "rotation": [] + }, + { + "weights": [ + 0.03219060048993141, + 0.03219060048993141, + 0.24379155276380726, + 0.11399007538615764, + 0.11115699538615764, + 0.047170734440996495, + 0.021773132914677223, + 0.021773132914677223, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.09226610954141325, + 0.09226610954141325, + 0.11362301054454971, + 0.11362301054454971, + 0.0852018756880646, + 0.03567935825026976, + 0.052590851358004925, + 0.03567935825026976, + 0.026505024469501877, + 0.18005104004627168, + 0.18005104004627168, + 0.0, + 0.0, + 0.06598986018271663, + 0.04510468349215527, + 0.5496109249336375, + 0.5496109249336375, + 0.008480619976208312, + 0.008480619976208312, + 0.022679319299225256, + 0.04510468349215527, + 0.016929440714773654, + 0.07328916910503581, + 0.012569289814148607, + 0.23127677277440103, + 0.425, + 0.425, + 0.011962196711982991, + 0.011962196711982991, + 0.09039447259690075, + 0.09039447259690075, + 0.05420222500000001, + 0.05420222500000001, + 0.0018681190907955147 + ], + "time": 23.1, + "rotation": [] + }, + { + "weights": [ + 0.023195121365719686, + 0.023195121365719686, + 0.239707272185693, + 0.1465982806345097, + 0.14307853063450968, + 0.052273329325070964, + 0.010062766396567259, + 0.010062766396567259, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07904188066492876, + 0.07904188066492876, + 0.0564575574090894, + 0.031885721848887896, + 0.04364799567428571, + 0.031885721848887896, + 0.016497937187451066, + 0.2210160879689413, + 0.2210160879689413, + 0.0, + 0.0, + 0.03824533661130532, + 0.05883174417426388, + 0.5922717010691049, + 0.5922717010691049, + 0.0028860043779927805, + 0.0028860043779927805, + 0.011253579539677653, + 0.05883174417426388, + 0.008049588682142637, + 0.0677203755678773, + 0.004070993291378822, + 0.27184494891539707, + 0.425, + 0.425, + 0.014972548179642674, + 0.014972548179642674, + 0.07639383697388119, + 0.07639383697388119, + 0.05420222500000001, + 0.05420222500000001, + 0.0013040943263846177 + ], + "time": 23.133333333333333, + "rotation": [] + }, + { + "weights": [ + 0.01732421753433893, + 0.01732421753433893, + 0.23986497, + 0.15211943986407123, + 0.14855685986407122, + 0.05692198202926282, + 0.0015311157465817322, + 0.0015311157465817322, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05773495073221163, + 0.05773495073221163, + 0.05126333, + 0.0304697330587411, + 0.03280789879511812, + 0.0304697330587411, + 0.008168730909118838, + 0.24908525333416692, + 0.24908525333416692, + 0.0, + 0.0, + 0.01597708662857813, + 0.07241597348786127, + 0.567025202299867, + 0.567025202299867, + 0.00011610832673554451, + 0.00011610832673554451, + 0.002688429741835102, + 0.07241597348786127, + 0.004981076139576575, + 0.06615420047117734, + 0.0, + 0.3050210019337886, + 0.425, + 0.425, + 0.017417873355685436, + 0.017417873355685436, + 0.055019600880237225, + 0.055019600880237225, + 0.05420222500000001, + 0.05420222500000001, + 0.0010011407383242426 + ], + "time": 23.166666666666668, + "rotation": [] + }, + { + "weights": [ + 0.015669644654405353, + 0.015669644654405353, + 0.23793077, + 0.153965075, + 0.150550545, + 0.061273881735242106, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05104611047980734, + 0.05104611047980734, + 0.05126333, + 0.030856873345762818, + 0.02510031386297575, + 0.030856873345762818, + 0.00372395781648098, + 0.2602646737941064, + 0.2602646737941064, + 0.0001848802560731311, + 0.0001848802560731311, + 0.0037607725063452885, + 0.08183026078176128, + 0.4858841426670549, + 0.4858841426670549, + 0.0, + 0.0, + 0.0, + 0.08183026078176128, + 0.008879645351244473, + 0.0695437001360922, + 0.0, + 0.3246768851882339, + 0.425, + 0.425, + 0.019182115346862334, + 0.019182115346862334, + 0.034924404666740044, + 0.034924404666740044, + 0.05420222500000001, + 0.05420222500000001, + 0.0010455386462260262 + ], + "time": 23.2, + "rotation": [] + }, + { + "weights": [ + 0.01701289739991936, + 0.01701289739991936, + 0.23253513999999997, + 0.154700465, + 0.151461585, + 0.06623092453394613, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05225134135356968, + 0.05225134135356968, + 0.05126333, + 0.0321806462139259, + 0.02203388295003345, + 0.0321806462139259, + 0.0031376634990530334, + 0.258751643342631, + 0.258751643342631, + 0.0005912708487760805, + 0.0005912708487760805, + 0.0, + 0.08756591209343496, + 0.3918314333472931, + 0.3918314333472931, + 0.0, + 0.0, + 0.0, + 0.08756591209343496, + 0.01618528568318911, + 0.07693546137639451, + 0.0, + 0.3404691023485999, + 0.425, + 0.425, + 0.02064328515103884, + 0.02064328515103884, + 0.022083976784987094, + 0.022083976784987094, + 0.05420222500000001, + 0.05420222500000001, + 0.0010427742664303095 + ], + "time": 23.233333333333334, + "rotation": [] + }, + { + "weights": [ + 0.0178989398160151, + 0.0178989398160151, + 0.22603316, + 0.155892765, + 0.152978045, + 0.0760758658604962, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.04802405823554309, + 0.04802405823554309, + 0.05126333, + 0.032912527762177325, + 0.01912263231618063, + 0.032912527762177325, + 0.003110117478562251, + 0.2558400151985031, + 0.2558400151985031, + 0.000986681188223883, + 0.000986681188223883, + 0.0, + 0.09326089429003846, + 0.33202509624617416, + 0.33202509624617416, + 0.0, + 0.0, + 0.0, + 0.09326089429003846, + 0.020506085561854487, + 0.08416055696351182, + 0.0, + 0.37193975704056853, + 0.425, + 0.425, + 0.02243318662047385, + 0.02243318662047385, + 0.01650192812085151, + 0.01650192812085151, + 0.05420222500000001, + 0.05420222500000001, + 0.00043644053595406646 + ], + "time": 23.266666666666666, + "rotation": [] + }, + { + "weights": [ + 0.018730054050683963, + 0.018730054050683963, + 0.23213957000000002, + 0.187960835, + 0.185215205, + 0.09013982628073006, + 0.00024448639181043395, + 0.00024448639181043395, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03196490752147197, + 0.015943362287112635, + 0.03196490752147197, + 0.004193483439407175, + 0.24969049010957978, + 0.24969049010957978, + 0.00117211336802159, + 0.00117211336802159, + 0.0, + 0.09812641644052092, + 0.30094029945986595, + 0.30094029945986595, + 0.0, + 0.0, + 0.0, + 0.09812641644052092, + 0.022500291466712938, + 0.09088439622095648, + 0.0, + 0.4106914699077604, + 0.425, + 0.425, + 0.0241817431790488, + 0.0241817431790488, + 0.013323197407381866, + 0.013323197407381866, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 23.3, + "rotation": [] + }, + { + "weights": [ + 0.01878100692161491, + 0.01878100692161491, + 0.24879327, + 0.21656905499999998, + 0.213108155, + 0.10544764569827483, + 0.002035465949614132, + 0.002035465949614132, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.029688910227625022, + 0.013778587792600896, + 0.029688910227625022, + 0.006109626032412049, + 0.243272321139063, + 0.243272321139063, + 0.0009741533777144331, + 0.0009741533777144331, + 0.0007289524589266088, + 0.10157310611435338, + 0.292627515537398, + 0.292627515537398, + 0.0, + 0.0, + 0.0, + 0.10157310611435338, + 0.023973504241023732, + 0.09570114335843488, + 0.0, + 0.4415618922029221, + 0.4419251463242937, + 0.4419251463242937, + 0.02583539524248667, + 0.02583539524248667, + 0.01194548359406845, + 0.01194548359406845, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 23.333333333333332, + "rotation": [] + }, + { + "weights": [ + 0.018734600794102454, + 0.018734600794102454, + 0.26746656, + 0.23405470681050913, + 0.23036686681050914, + 0.11445963127272463, + 0.004560388937326411, + 0.004560388937326411, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.027208386353972294, + 0.013791475551468979, + 0.027208386353972294, + 0.00758537382685712, + 0.2378171746219906, + 0.2378171746219906, + 0.0006523975816422271, + 0.0006523975816422271, + 0.004519555824143544, + 0.10221967175602907, + 0.2965427134718212, + 0.2965427134718212, + 0.0, + 0.0, + 0.0, + 0.10221967175602907, + 0.025706905233008503, + 0.09731929749250406, + 0.0, + 0.45154868875231036, + 0.4711157441139219, + 0.4711157441139219, + 0.027105436750820687, + 0.027105436750820687, + 0.01206607483327388, + 0.01206607483327388, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 23.366666666666667, + "rotation": [] + }, + { + "weights": [ + 0.019611733779311167, + 0.019611733779311167, + 0.28567235, + 0.2529047085739006, + 0.2492533385739006, + 0.11337023036820543, + 0.00655400860123336, + 0.00655400860123336, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.045690771141334935, + 0.045690771141334935, + 0.05126333, + 0.025544782613893233, + 0.014561368610177712, + 0.025544782613893233, + 0.007797634268977807, + 0.22962606783424094, + 0.22962606783424094, + 0.0005176601509031436, + 0.0005176601509031436, + 0.008120799064636225, + 0.09862663171121047, + 0.29643094986677154, + 0.29643094986677154, + 0.0, + 0.0, + 0.0, + 0.09862663171121047, + 0.02679458249892506, + 0.09322224685123984, + 0.0, + 0.4360317179134911, + 0.47283048672335465, + 0.47283048672335465, + 0.027417393667357293, + 0.027417393667357293, + 0.011768007810626705, + 0.011768007810626705, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 23.4, + "rotation": [] + }, + { + "weights": [ + 0.021021236505891584, + 0.021021236505891584, + 0.36981897, + 0.2944831412465783, + 0.29201238124657836, + 0.1027866899967193, + 0.007009829254820939, + 0.007009829254820939, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0503235512013946, + 0.0503235512013946, + 0.05126333, + 0.025398841333000313, + 0.0146357204232897, + 0.025398841333000313, + 0.0070440801658800635, + 0.2173088788986205, + 0.2173088788986205, + 0.0006656571377867029, + 0.0006656571377867029, + 0.010691189127308976, + 0.09115760720201896, + 0.27993711722748604, + 0.27993711722748604, + 9.428603308541544e-06, + 9.428603308541544e-06, + 0.0, + 0.09115760720201896, + 0.029986755549907665, + 0.08351450498614987, + 0.00016775365386690434, + 0.40065125823020914, + 0.4376125859362736, + 0.4376125859362736, + 0.026398249949727726, + 0.026398249949727726, + 0.010269881811525133, + 0.010269881811525133, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 23.433333333333334, + "rotation": [] + }, + { + "weights": [ + 0.02151219711772032, + 0.02151219711772032, + 0.481766, + 0.3654236009661218, + 0.3642118709661218, + 0.08831684514880175, + 0.005589970167992367, + 0.005589970167992367, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05058273779494419, + 0.05058273779494419, + 0.05126333, + 0.02685865929385866, + 0.012533404954842155, + 0.02685865929385866, + 0.005597806642098083, + 0.20359789133071887, + 0.20359789133071887, + 0.0009334861716654678, + 0.0009334861716654678, + 0.010215126510177334, + 0.08187230032469539, + 0.24458965041807706, + 0.24458965041807706, + 0.0, + 0.0, + 0.0, + 0.08187230032469539, + 0.03441046965973715, + 0.07226504236459727, + 4.592857190539455e-06, + 0.3519681777272904, + 0.425, + 0.425, + 0.024451427630015767, + 0.024451427630015767, + 0.008056283076958992, + 0.008056283076958992, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 23.466666666666665, + "rotation": [] + }, + { + "weights": [ + 0.020456088334321963, + 0.020456088334321963, + 0.5096472599999999, + 0.3837888758552837, + 0.38278352585528375, + 0.07326530526791296, + 0.0034125350615275734, + 0.0034125350615275734, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.045930274844282, + 0.045930274844282, + 0.05126333, + 0.029257544494989254, + 0.008078257569244926, + 0.029257544494989254, + 0.003686714734482976, + 0.1933950330529893, + 0.1933950330529893, + 0.0013795774383470404, + 0.0013795774383470404, + 0.007105105583156854, + 0.07215137375252584, + 0.19513551028711446, + 0.19513551028711446, + 0.0, + 0.0, + 0.0, + 0.07215137375252584, + 0.03937913669007163, + 0.0627860382199287, + 0.0019544127796377398, + 0.2904919777597698, + 0.425, + 0.425, + 0.02221785355891499, + 0.02221785355891499, + 0.005985322102372132, + 0.005985322102372132, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 23.5, + "rotation": [] + }, + { + "weights": [ + 0.019322242641023217, + 0.019322242641023217, + 0.5068672399999999, + 0.37854871500000004, + 0.376386255, + 0.05929137276751651, + 0.002028268422665339, + 0.002028268422665339, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.031340424070224755, + 0.0026808152028492504, + 0.031340424070224755, + 0.0016087535935054918, + 0.18900324212653286, + 0.18900324212653286, + 0.0022957385610789046, + 0.0022957385610789046, + 0.004376875715596332, + 0.06273994387260501, + 0.13954485569681432, + 0.13954485569681432, + 0.0, + 0.0, + 0.0, + 0.06273994387260501, + 0.04441882329327717, + 0.053808534571102656, + 0.01760672000902038, + 0.21709877763475677, + 0.425, + 0.425, + 0.02025924163205282, + 0.02025924163205282, + 0.0038289265041904766, + 0.0038289265041904766, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 23.533333333333335, + "rotation": [] + }, + { + "weights": [ + 0.019447333525334076, + 0.019447333525334076, + 0.49074588, + 0.35358631500000004, + 0.35090586500000004, + 0.04652154977832519, + 0.00236929317803255, + 0.00236929317803255, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03230778105858666, + 0.0, + 0.03230778105858666, + 0.0006050299054809975, + 0.1881019536937985, + 0.1881019536937985, + 0.0039399410810853725, + 0.0039399410810853725, + 0.004923964078937255, + 0.054087073622005294, + 0.0890272323574338, + 0.0890272323574338, + 0.0011162962764501565, + 0.0011162962764501565, + 0.0007576291050229748, + 0.054087073622005294, + 0.04942103581769123, + 0.04367701022752691, + 0.045227173077208624, + 0.14196457841566623, + 0.425, + 0.425, + 0.018636720670121044, + 0.018636720670121044, + 0.0021488789602049745, + 0.0021488789602049745, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 23.566666666666666, + "rotation": [] + }, + { + "weights": [ + 0.021053273762975406, + 0.021053273762975406, + 0.48152859000000003, + 0.346448095, + 0.34384435500000005, + 0.03603067568370272, + 0.0034929018135049492, + 0.0034929018135049492, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03252100512687069, + 0.0, + 0.03252100512687069, + 0.0, + 0.1853945336171558, + 0.1853945336171558, + 0.006137427458805694, + 0.006137427458805694, + 0.0074523732066154435, + 0.04708653182855671, + 0.05454197206667488, + 0.05454197206667488, + 0.0031140386526073718, + 0.0031140386526073718, + 0.0030969037474798287, + 0.04708653182855671, + 0.05054003851754322, + 0.033990092735205354, + 0.07069130039640831, + 0.08163089283875052, + 0.425, + 0.425, + 0.017222452525581623, + 0.017222452525581623, + 0.0008898907341063015, + 0.0008898907341063015, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 23.6, + "rotation": [] + }, + { + "weights": [ + 0.022382501113627627, + 0.022382501113627627, + 0.43874813, + 0.311391205, + 0.309493725, + 0.0278436919408185, + 0.004286617858867558, + 0.004286617858867558, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03204084676592962, + 0.0, + 0.03204084676592962, + 0.0, + 0.17916127209152483, + 0.17916127209152483, + 0.008602423050573888, + 0.008602423050573888, + 0.009351875633001322, + 0.041846164103065187, + 0.03740215418594221, + 0.03740215418594221, + 0.003423620441130228, + 0.003423620441130228, + 0.004963815079203671, + 0.041846164103065187, + 0.04566197735922675, + 0.025611351430416093, + 0.08463050414408951, + 0.043569643848708664, + 0.425, + 0.425, + 0.015968526112181792, + 0.015968526112181792, + 9.373434420142831e-05, + 9.373434420142831e-05, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 23.633333333333333, + "rotation": [] + }, + { + "weights": [ + 0.02287058016019207, + 0.02287058016019207, + 0.38516654, + 0.248490555, + 0.246484565, + 0.022037437025989794, + 0.004355933204559341, + 0.004355933204559341, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.031235365561964844, + 0.0, + 0.031235365561964844, + 0.0, + 0.17225882006543014, + 0.17225882006543014, + 0.011024338065513537, + 0.011024338065513537, + 0.010004228247063495, + 0.03785578384995458, + 0.03147343162979396, + 0.03147343162979396, + 0.003001212062580243, + 0.003001212062580243, + 0.005122963764837807, + 0.03785578384995458, + 0.03812770290034156, + 0.017771279492548524, + 0.09127616350139886, + 0.024916312524250556, + 0.425, + 0.425, + 0.01511808154838425, + 0.01511808154838425, + 0.0001586275574352054, + 0.0001586275574352054, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 23.666666666666668, + "rotation": [] + }, + { + "weights": [ + 0.022998969336705536, + 0.022998969336705536, + 0.33759041, + 0.192993825, + 0.191300915, + 0.017909387818404593, + 0.004461851310251012, + 0.004461851310251012, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.030114461420726088, + 0.0, + 0.030114461420726088, + 0.0, + 0.16653938038008545, + 0.16653938038008545, + 0.012888405833925514, + 0.012888405833925514, + 0.010206160481486995, + 0.03359075188636777, + 0.029004538804292664, + 0.029004538804292664, + 0.002360148302146365, + 0.002360148302146365, + 0.004079532084454381, + 0.03359075188636777, + 0.031162079317229117, + 0.01109083678041185, + 0.0944625460675784, + 0.017771883042795304, + 0.425, + 0.425, + 0.014602151534387034, + 0.014602151534387034, + 0.0019480531103909, + 0.0019480531103909, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 23.7, + "rotation": [] + }, + { + "weights": [ + 0.023601687327027304, + 0.023601687327027304, + 0.28182460000000004, + 0.122028715, + 0.121151385, + 0.015499354898929587, + 0.004772807824026257, + 0.004772807824026257, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.029154838401115955, + 0.00047093178544725694, + 0.029154838401115955, + 0.0, + 0.16177864159856514, + 0.16177864159856514, + 0.013924489074519694, + 0.013924489074519694, + 0.010889697500637594, + 0.029138808537806767, + 0.027420535577195013, + 0.027420535577195013, + 0.0017665691141571305, + 0.0017665691141571305, + 0.0027484574421708053, + 0.029138808537806767, + 0.02668125554919241, + 0.00695222030792917, + 0.09603490616594036, + 0.015931019240191992, + 0.425, + 0.425, + 0.014280337925468164, + 0.014280337925468164, + 0.004664595504956583, + 0.004664595504956583, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 23.733333333333334, + "rotation": [] + }, + { + "weights": [ + 0.02447951318962232, + 0.02447951318962232, + 0.21631806999999997, + 0.047452545, + 0.047368885, + 0.013978020314659383, + 0.005303544850487792, + 0.005303544850487792, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02830623557826723, + 0.001197510276521955, + 0.02830623557826723, + 0.0002529719644891363, + 0.15690764912537158, + 0.15690764912537158, + 0.014475814934287744, + 0.014475814934287744, + 0.011765356681176587, + 0.024920229933091557, + 0.027008627248661845, + 0.027008627248661845, + 0.0012721785477229517, + 0.0012721785477229517, + 0.002021165158865706, + 0.024920229933091557, + 0.023825505162988377, + 0.004783147307378902, + 0.09607712328433986, + 0.01708534338644572, + 0.425, + 0.425, + 0.014022037897791172, + 0.014022037897791172, + 0.007657887533839255, + 0.007657887533839255, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 23.766666666666666, + "rotation": [] + }, + { + "weights": [ + 0.048990399483701826, + 0.04923456948370183, + 0.18625198999999998, + 0.014926525, + 0.014926525, + 0.013403673576457152, + 0.005814419493877459, + 0.005814419493877459, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02800130401640551, + 0.0015355690887996118, + 0.02800130401640551, + 0.0007943920691364573, + 0.15183677715914579, + 0.15183677715914579, + 0.01486696183681487, + 0.01486696183681487, + 0.012126830965280526, + 0.02176190109125204, + 0.027981206242527264, + 0.027981206242527264, + 0.0010485983320644916, + 0.0010485983320644916, + 0.002344060296724948, + 0.02176190109125204, + 0.02179784870573451, + 0.0037332843989133805, + 0.09442665704659048, + 0.020766848698258386, + 0.425, + 0.425, + 0.013808999210596076, + 0.013808999210596076, + 0.010260609191443233, + 0.010260609191443233, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 23.8, + "rotation": [] + }, + { + "weights": [ + 0.02710092328488825, + 0.02710092328488825, + 0.02888475, + 0.014926525, + 0.014926525, + 0.013328437932900013, + 0.006238867788176448, + 0.006238867788176448, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.027596421904685833, + 0.0022271712337221406, + 0.027596421904685833, + 0.0012636648224932797, + 0.15000031654323842, + 0.15000031654323842, + 0.015379892587661734, + 0.015379892587661734, + 0.012006822867052888, + 0.019543459532516332, + 0.028723570810896992, + 0.028723570810896992, + 0.0014753788177456167, + 0.0014753788177456167, + 0.003658105719036288, + 0.019543459532516332, + 0.020918747889144065, + 0.003998972528747147, + 0.09511628555400026, + 0.024674354866147025, + 0.425, + 0.425, + 0.013609649368694843, + 0.013609649368694843, + 0.011406601273587766, + 0.011406601273587766, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 23.833333333333332, + "rotation": [] + }, + { + "weights": [ + 0.02715623078069515, + 0.02715623078069515, + 0.02888475, + 0.014926525, + 0.014926525, + 0.013956702607018598, + 0.006110432278364893, + 0.006110432278364893, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02696270984500067, + 0.002373564924512589, + 0.02696270984500067, + 0.0018889514363503866, + 0.15212191385882234, + 0.15212191385882234, + 0.014946090770619248, + 0.014946090770619248, + 0.013244933954307004, + 0.018785185207213662, + 0.026428171885865062, + 0.026428171885865062, + 0.0017407927928226323, + 0.0017407927928226323, + 0.004292731825262306, + 0.018785185207213662, + 0.021633606191192343, + 0.005281396582722659, + 0.09539799562522337, + 0.029848518701536295, + 0.425, + 0.425, + 0.013050267526081624, + 0.013050267526081624, + 0.01021708188844578, + 0.01021708188844578, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 23.866666666666667, + "rotation": [] + }, + { + "weights": [ + 0.026110986992716773, + 0.026110986992716773, + 0.02888475, + 0.014926525, + 0.014926525, + 0.016838958327259325, + 0.007096300832927222, + 0.007096300832927222, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.026193956810272756, + 0.005058565735816953, + 0.026193956810272756, + 0.0038178025877901463, + 0.15471012443304055, + 0.15471012443304055, + 0.013916433666433598, + 0.013916433666433598, + 0.012388059922627032, + 0.018100921543581134, + 0.023545717128685528, + 0.023545717128685528, + 0.002799910839114869, + 0.002799910839114869, + 0.005684439398880513, + 0.018100921543581134, + 0.021653721481561646, + 0.008991650811263487, + 0.09366507296051292, + 0.03968433594065051, + 0.425, + 0.425, + 0.012533344583851944, + 0.012533344583851944, + 0.009456662966736718, + 0.009456662966736718, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 23.9, + "rotation": [] + }, + { + "weights": [ + 0.02475791182368992, + 0.02475791182368992, + 0.02888475, + 0.014926525, + 0.014926525, + 0.02058452750955308, + 0.009007992921397083, + 0.009007992921397083, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.026106286733102113, + 0.008395454287528989, + 0.026106286733102113, + 0.0052266802239630894, + 0.1558673188090323, + 0.1558673188090323, + 0.013240320341927653, + 0.013240320341927653, + 0.014461454216923025, + 0.01846493785934787, + 0.026062282387699375, + 0.026062282387699375, + 0.0033872709476522023, + 0.0033872709476522023, + 0.006417140936745061, + 0.01846493785934787, + 0.024819129705429068, + 0.016345648999725064, + 0.08992594437939773, + 0.05638213067182469, + 0.425, + 0.425, + 0.013028510787657316, + 0.013028510787657316, + 0.01302035541406699, + 0.01302035541406699, + 0.05420222500000001, + 0.05420222500000001, + 0.0009281592709677558 + ], + "time": 23.933333333333334, + "rotation": [] + }, + { + "weights": [ + 0.022865349426865557, + 0.022865349426865557, + 0.02888475, + 0.014926525, + 0.014926525, + 0.025641276474509905, + 0.011919431155547493, + 0.011919431155547493, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.026524687231475285, + 0.012897112965583803, + 0.026524687231475285, + 0.006676919093089443, + 0.15592633485794047, + 0.15592633485794047, + 0.012632954801831913, + 0.012632954801831913, + 0.0180105227444853, + 0.019611580190913996, + 0.03240385012967244, + 0.03240385012967244, + 0.0038466975358980027, + 0.0038466975358980027, + 0.006906349185322006, + 0.019611580190913996, + 0.02998134568333625, + 0.027028697782329143, + 0.08393219347511008, + 0.07943808803600919, + 0.425, + 0.425, + 0.01426151011671337, + 0.01426151011671337, + 0.019899283216467924, + 0.019899283216467924, + 0.05420222500000001, + 0.05420222500000001, + 0.0023844088826860703 + ], + "time": 23.966666666666665, + "rotation": [] + }, + { + "weights": [ + 0.021531207078092123, + 0.021531207078092123, + 0.02888475, + 0.020521295328305784, + 0.020521295328305784, + 0.025449270561438808, + 0.010554370438192205, + 0.010554370438192205, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.031304804154386794, + 0.011291314318066547, + 0.031304804154386794, + 0.0063021645534048635, + 0.16043963196731723, + 0.16043963196731723, + 0.005235048203687274, + 0.005235048203687274, + 0.016361312950853572, + 0.02172100263945502, + 0.03090171241993398, + 0.03090171241993398, + 0.0038620799569552416, + 0.0038620799569552416, + 0.007140026611155587, + 0.02172100263945502, + 0.03079768737511973, + 0.023999879640989544, + 0.09162203541215569, + 0.0782455575815876, + 0.425, + 0.425, + 0.004478581744229707, + 0.004478581744229707, + 0.01881954812894568, + 0.01881954812894568, + 0.056994209671665366, + 0.056994209671665366, + 0.0021854934179965325 + ], + "time": 24.0, + "rotation": [] + }, + { + "weights": [ + 0.01981397837932618, + 0.01981397837932618, + 0.02888475, + 0.018862134026132762, + 0.018862134026132762, + 0.026767081767320604, + 0.008361648380135488, + 0.008361648380135488, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.031410251991145034, + 0.008565461192812233, + 0.031410251991145034, + 0.005472119267852529, + 0.14122989776588601, + 0.14122989776588601, + 0.005516930289211723, + 0.005516930289211723, + 0.013123005841459534, + 0.020074253192260125, + 0.025446652103038037, + 0.025446652103038037, + 0.003401623825941764, + 0.003401623825941764, + 0.00630362622085071, + 0.020074253192260125, + 0.026640149922597955, + 0.018199388345792166, + 0.08413412519863661, + 0.06681098117714829, + 0.425, + 0.425, + 0.004623141078721905, + 0.004623141078721905, + 0.01529234612449293, + 0.01529234612449293, + 0.05420222500000001, + 0.05420222500000001, + 0.0017583786909069327 + ], + "time": 24.033333333333335, + "rotation": [] + }, + { + "weights": [ + 0.016885419908378788, + 0.016885419908378788, + 0.02888475, + 0.01748384620704753, + 0.01748384620704753, + 0.034039767671908625, + 0.006787034366945064, + 0.006787034366945064, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.052155660612348796, + 0.031158105513925206, + 0.00639846165691103, + 0.031158105513925206, + 0.004450966575781678, + 0.10720496748174924, + 0.10720496748174924, + 0.003675023591944146, + 0.003675023591944146, + 0.009914785889642569, + 0.016043611216757958, + 0.020274665398257095, + 0.020274665398257095, + 0.0027199143676885514, + 0.0027199143676885514, + 0.00493170392566493, + 0.016043611216757958, + 0.020192386678286944, + 0.013691529099430347, + 0.06353841500622877, + 0.05543189217469516, + 0.425, + 0.425, + 0.0036448295371872995, + 0.0036448295371872995, + 0.012367511271898229, + 0.012367511271898229, + 0.05420222500000001, + 0.05420222500000001, + 0.0014010402240923466 + ], + "time": 24.066666666666666, + "rotation": [] + }, + { + "weights": [ + 0.012807304314559401, + 0.012807304314559401, + 0.02888475, + 0.01637828875335784, + 0.01637828875335784, + 0.047591902989716724, + 0.005143374291115568, + 0.005143374291115568, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.054584007098632065, + 0.0293409768048216, + 0.0043652958415803435, + 0.0293409768048216, + 0.0028829687133630983, + 0.07178852603549038, + 0.07178852603549038, + 0.001673804410156747, + 0.001673804410156747, + 0.006434387706574933, + 0.011541041192554276, + 0.017796028440906872, + 0.017796028440906872, + 0.0018520520361406446, + 0.0018520520361406446, + 0.0034772193875341143, + 0.011541041192554276, + 0.01256991269333021, + 0.009477308318018907, + 0.03843286688838681, + 0.043109405746772134, + 0.425, + 0.425, + 0.002589029346193583, + 0.002589029346193583, + 0.009138800223313622, + 0.009138800223313622, + 0.05420222500000001, + 0.05420222500000001, + 0.0007738028786012101 + ], + "time": 24.1, + "rotation": [] + }, + { + "weights": [ + 0.007149467772493752, + 0.007149467772493752, + 0.02888475, + 0.015530771748810153, + 0.015530771748810153, + 0.0592923555837399, + 0.0034281461932031136, + 0.0034281461932031136, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.025683534087983777, + 0.0024811619066056733, + 0.025683534087983777, + 0.0008117338798490348, + 0.05336420022305982, + 0.05336420022305982, + 0.001549956619212415, + 0.001549956619212415, + 0.003704730342237313, + 0.010869218408808001, + 0.021704790892751024, + 0.021704790892751024, + 0.0012794306045588173, + 0.0012794306045588173, + 0.00316992364152252, + 0.010869218408808001, + 0.006961203501338046, + 0.0053042386908109425, + 0.024329407263268387, + 0.034076062021206804, + 0.425, + 0.425, + 0.00303421529874104, + 0.00303421529874104, + 0.005409460521119383, + 0.005409460521119383, + 0.05420222500000001, + 0.05420222500000001, + 0.0003171775816958775 + ], + "time": 24.133333333333333, + "rotation": [] + }, + { + "weights": [ + 0.0019228474103978686, + 0.0019228474103978686, + 0.03196585455512317, + 0.015967477994051658, + 0.015967477994051658, + 0.05705891482988179, + 0.003426128758915831, + 0.003426128758915831, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02270428710584819, + 0.002307266116142271, + 0.02270428710584819, + 0.0, + 0.04006227629525318, + 0.04006227629525318, + 0.0014538843617451422, + 0.0014538843617451422, + 0.001766912839850599, + 0.009871513276379928, + 0.025759176727460344, + 0.025759176727460344, + 0.0007858349922664305, + 0.0007858349922664305, + 0.002943647875621609, + 0.009871513276379928, + 0.00219526437776429, + 0.006703370395971799, + 0.010803908283004947, + 0.01985392455391737, + 0.425, + 0.425, + 0.003165030295751531, + 0.003165030295751531, + 0.0018247600367330761, + 0.0018247600367330761, + 0.05420222500000001, + 0.05420222500000001, + 0.0002296193780339489 + ], + "time": 24.166666666666668, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.04226591725233961, + 0.017595800291103973, + 0.017595800291103973, + 0.040753735402712994, + 0.006131127476692196, + 0.006131127476692196, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.04539058498209482, + 0.04539058498209482, + 0.05126333, + 0.02287796435614632, + 0.0, + 0.02287796435614632, + 0.0024517579781062576, + 0.017850409362997276, + 0.017850409362997276, + 0.0013691054432747915, + 0.0013691054432747915, + 0.0006316642736902024, + 0.00689982805553139, + 0.01984888538262064, + 0.01984888538262064, + 0.0005598531180650598, + 0.0005598531180650598, + 0.0018387659855795123, + 0.00689982805553139, + 0.0, + 0.002669140626581322, + 0.004238744440431494, + 0.006582483894818893, + 0.425, + 0.425, + 0.0022574883553446528, + 0.0022574883553446528, + 2.4042247547482565e-05, + 2.4042247547482565e-05, + 0.05420222500000001, + 0.05420222500000001, + 0.00150068312427219 + ], + "time": 24.2, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.05259717181324956, + 0.019139962377843853, + 0.019139962377843853, + 0.022758154038872023, + 0.008806609076314734, + 0.008806609076314734, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06092336986746104, + 0.06092336986746104, + 0.05126333, + 0.026466720224315093, + 0.018409115961619767, + 0.026466720224315093, + 0.007629035565436681, + 0.1406369347231728, + 0.1406369347231728, + 0.0011851098508174926, + 0.0011851098508174926, + 0.004457040876150129, + 0.013726449587515415, + 0.019729666049991317, + 0.019729666049991317, + 0.001478361998285565, + 0.001478361998285565, + 0.005497857981494492, + 0.013726449587515415, + 0.023567142401422762, + 0.08201279134622637, + 0.00797938568251473, + 0.0030675264341490554, + 0.425, + 0.425, + 0.00618374343003545, + 0.00618374343003545, + 0.00031436768227389826, + 0.00031436768227389826, + 0.05420222500000001, + 0.05420222500000001, + 0.0030189899461609965 + ], + "time": 24.233333333333334, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.05766484652246745, + 0.018813277781560757, + 0.018813277781560757, + 0.00954729770975453, + 0.009277167171239848, + 0.009277167171239848, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0753945018031767, + 0.0753945018031767, + 0.05126333, + 0.03187828893409728, + 0.07547711048807412, + 0.03187828893409728, + 0.011214361605899668, + 0.30691990230764643, + 0.30691990230764643, + 0.0005797615626028602, + 0.0005797615626028602, + 0.010826593573604305, + 0.019567253086715926, + 0.0359674195519515, + 0.0359674195519515, + 0.0025722941436937866, + 0.0025722941436937866, + 0.012134021440786968, + 0.019567253086715926, + 0.04796345131737843, + 0.1793354125108037, + 0.01001846914844853, + 0.007495682452406188, + 0.425, + 0.425, + 0.011748070457151951, + 0.011748070457151951, + 0.0015367015797112657, + 0.0015367015797112657, + 0.05420222500000001, + 0.05420222500000001, + 0.0035796650552323873 + ], + "time": 24.266666666666666, + "rotation": [] + }, + { + "weights": [ + 0.0010233201884797631, + 0.0010233201884797631, + 0.056764126036848314, + 0.017364678213125637, + 0.017364678213125637, + 0.0, + 0.007736735465005035, + 0.007736735465005035, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.08260429549430093, + 0.08260429549430093, + 0.05126333, + 0.03720649267945969, + 0.1606954671144485, + 0.03720649267945969, + 0.011499379096286632, + 0.40401432752609234, + 0.40401432752609234, + 0.0006252025722392965, + 0.0006252025722392965, + 0.015873368169580182, + 0.019124890371624903, + 0.11330014392733567, + 0.11330014392733567, + 0.002180665146027292, + 0.002180665146027292, + 0.016953013225325508, + 0.019124890371624903, + 0.05267068071024756, + 0.22397266822201856, + 0.010140148614134103, + 0.04142151623964306, + 0.425, + 0.425, + 0.01594642187867845, + 0.01594642187867845, + 0.0038343781206224624, + 0.0038343781206224624, + 0.05420222500000001, + 0.05420222500000001, + 0.0017742914812905438 + ], + "time": 24.3, + "rotation": [] + }, + { + "weights": [ + 0.009731060053621014, + 0.009731060053621014, + 0.05034054815769193, + 0.015855512183178492, + 0.015855512183178492, + 0.0, + 0.006065609612103016, + 0.006065609612103016, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.08254553420203069, + 0.08254553420203069, + 0.05126333, + 0.04677740010832035, + 0.21675669159208014, + 0.04677740010832035, + 0.010305618508053671, + 0.35148065175328913, + 0.35148065175328913, + 0.0008393547374622095, + 0.0008393547374622095, + 0.015354068364415841, + 0.009340216578649613, + 0.2296984574624469, + 0.2296984574624469, + 0.0007808143006903781, + 0.0007808143006903781, + 0.01587894992636782, + 0.009340216578649613, + 0.033453668866838704, + 0.1688517127718243, + 0.006279369869402472, + 0.12543225224528987, + 0.425, + 0.425, + 0.01579254578266824, + 0.01579254578266824, + 0.0057684307385768175, + 0.0057684307385768175, + 0.05420222500000001, + 0.05420222500000001, + 8.024650492838422e-05 + ], + "time": 24.333333333333332, + "rotation": [] + }, + { + "weights": [ + 0.016918234154582015, + 0.016918234154582015, + 0.03895880814109527, + 0.014937459039387702, + 0.014937459039387702, + 0.0, + 0.004908202003155433, + 0.004908202003155433, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07837898805737491, + 0.07837898805737491, + 0.05126333, + 0.052210454589554214, + 0.21409809367997293, + 0.052210454589554214, + 0.008783928078732316, + 0.3298944251877919, + 0.3298944251877919, + 0.0007254996879159337, + 0.0007254996879159337, + 0.014037090007747915, + 0.01330303708091377, + 0.3097854176802293, + 0.3097854176802293, + 0.0, + 0.0, + 0.014032461307942858, + 0.01330303708091377, + 0.029107695817947365, + 0.12355433042560297, + 0.004330195486545559, + 0.22905574068427073, + 0.425, + 0.425, + 0.017081999480724325, + 0.017081999480724325, + 0.0059669253283313305, + 0.0059669253283313305, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 24.366666666666667, + "rotation": [] + }, + { + "weights": [ + 0.017317642723875377, + 0.017317642723875377, + 0.02888475, + 0.014926525, + 0.014926525, + 0.008106787130236617, + 0.0046304338944277565, + 0.0046304338944277565, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07482200041413303, + 0.07482200041413303, + 0.05126333, + 0.05292557030916211, + 0.15633766736303048, + 0.05292557030916211, + 0.006567724069048248, + 0.33058408073016554, + 0.33058408073016554, + 7.403790085975605e-05, + 7.403790085975605e-05, + 0.013231549837759555, + 0.029861743681664957, + 0.2778252583529267, + 0.2778252583529267, + 0.0001678058877587312, + 0.0001678058877587312, + 0.01297619129930223, + 0.029861743681664957, + 0.03266309563602718, + 0.09106064758130478, + 0.004299471846648617, + 0.28783818696226376, + 0.425, + 0.425, + 0.01857127398252486, + 0.01857127398252486, + 0.005785773481641493, + 0.005785773481641493, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 24.4, + "rotation": [] + }, + { + "weights": [ + 0.011503214841442441, + 0.011503214841442441, + 0.02888475, + 0.014926525, + 0.014926525, + 0.03153123514992848, + 0.0035902021785399725, + 0.0035902021785399725, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07243410572409625, + 0.07243410572409625, + 0.05126333, + 0.049082136526703804, + 0.08553978247301915, + 0.049082136526703804, + 0.003434308591697895, + 0.3347007312944955, + 0.3347007312944955, + 0.0, + 0.0, + 0.0140679865011147, + 0.05358713023098449, + 0.18987165274364598, + 0.18987165274364598, + 0.0026652213452117764, + 0.0026652213452117764, + 0.01278036353843552, + 0.05358713023098449, + 0.036880531907081585, + 0.06883662513324187, + 0.021170908531972323, + 0.29622940889426624, + 0.425, + 0.425, + 0.020076103402035566, + 0.020076103402035566, + 0.009554866887629025, + 0.009554866887629025, + 0.05420222500000001, + 0.05420222500000001, + 0.0005333838984370228 + ], + "time": 24.433333333333334, + "rotation": [] + }, + { + "weights": [ + 0.007761312648653979, + 0.007761312648653979, + 0.02888475, + 0.014926525, + 0.014926525, + 0.061772029527596035, + 0.0022873609393302867, + 0.0022873609393302867, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07153134016054014, + 0.07153134016054014, + 0.05126333, + 0.04362116338951245, + 0.03290416044848303, + 0.04362116338951245, + 0.0005925950062062052, + 0.3396382097687038, + 0.3396382097687038, + 0.0, + 0.0, + 0.01509306420172963, + 0.07313653347747662, + 0.12250024463449197, + 0.12250024463449197, + 0.007530596506382733, + 0.007530596506382733, + 0.013891008895422724, + 0.07313653347747662, + 0.046365900976317244, + 0.05837044737168717, + 0.06001328346984723, + 0.3016489795276095, + 0.425, + 0.425, + 0.02156285341296876, + 0.02156285341296876, + 0.01750789164964641, + 0.01750789164964641, + 0.05420222500000001, + 0.05420222500000001, + 0.0014561071991920464 + ], + "time": 24.466666666666665, + "rotation": [] + }, + { + "weights": [ + 0.009041075993861464, + 0.009041075993861464, + 0.02888475, + 0.014926525, + 0.014926525, + 0.08488668096917013, + 0.0019111877772957071, + 0.0019111877772957071, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07053210235067772, + 0.07053210235067772, + 0.05126333, + 0.039395483370338144, + 0.007102939486503585, + 0.039395483370338144, + 0.0, + 0.3509373281683239, + 0.3509373281683239, + 8.955278034721095e-05, + 8.955278034721095e-05, + 0.017092917008059354, + 0.08505018172519543, + 0.09395636298826757, + 0.09395636298826757, + 0.011931542599839817, + 0.011931542599839817, + 0.014039917396647582, + 0.08505018172519543, + 0.062679619874273, + 0.060278398650033094, + 0.0993775575288704, + 0.330067102398191, + 0.425, + 0.425, + 0.023080852457455215, + 0.023080852457455215, + 0.021123549395373878, + 0.021123549395373878, + 0.05420222500000001, + 0.05420222500000001, + 0.0019129543698259755 + ], + "time": 24.5, + "rotation": [] + }, + { + "weights": [ + 0.009932877149965075, + 0.009932877149965075, + 0.02888475, + 0.014926525, + 0.014926525, + 0.08386706571493827, + 0.0030299676116555914, + 0.0030299676116555914, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07201736803565703, + 0.07201736803565703, + 0.05126333, + 0.034050097901906266, + 0.011111523849623524, + 0.034050097901906266, + 0.0, + 0.36121165880135103, + 0.36121165880135103, + 0.00057841297804511, + 0.00057841297804511, + 0.019892040001494533, + 0.0879714513463633, + 0.08718525192567275, + 0.08718525192567275, + 0.013679287343152925, + 0.013679287343152925, + 0.013277221763772617, + 0.0879714513463633, + 0.07476363033056255, + 0.06774878565754205, + 0.10184473586933948, + 0.3595683668340954, + 0.43717361475740135, + 0.43717361475740135, + 0.02405084744095801, + 0.02405084744095801, + 0.018260607522513177, + 0.018260607522513177, + 0.05420222500000001, + 0.05420222500000001, + 0.0008163850754499433 + ], + "time": 24.533333333333335, + "rotation": [] + }, + { + "weights": [ + 0.0076016481167503714, + 0.0076016481167503714, + 0.02888475, + 0.014926525, + 0.014926525, + 0.056645615292446924, + 0.004057532369292206, + 0.004057532369292206, + 0.0003028454441394033, + 0.0003028454441394033, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07268099710345263, + 0.07268099710345263, + 0.05126333, + 0.029846436788817127, + 0.054819127065794754, + 0.029846436788817127, + 0.003976923493402343, + 0.3608305343559808, + 0.3608305343559808, + 0.0006427859578148592, + 0.0006427859578148592, + 0.021803301147052208, + 0.07814487463661599, + 0.10044920572212757, + 0.10044920572212757, + 0.010507868097296778, + 0.010507868097296778, + 0.0117928755203528, + 0.07814487463661599, + 0.06952912211418148, + 0.07632560070071898, + 0.06330775512116292, + 0.37835377369608175, + 0.4540924991880142, + 0.4540924991880142, + 0.022857192839894964, + 0.022857192839894964, + 0.01420673318207263, + 0.01420673318207263, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 24.566666666666666, + "rotation": [] + }, + { + "weights": [ + 0.00801066099000828, + 0.00801066099000828, + 0.029611127663935918, + 0.014926525, + 0.014926525, + 0.023319535489593216, + 0.002455383100147757, + 0.002455383100147757, + 0.5474007013147376, + 0.5474007013147376, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06894925321851454, + 0.06894925321851454, + 0.05126333, + 0.027653189528025212, + 0.15449221295969817, + 0.027653189528025212, + 0.007314765020938853, + 0.3404861511928693, + 0.3404861511928693, + 0.00017297412335340431, + 0.00017297412335340431, + 0.02079847848841121, + 0.05505141760887841, + 0.1544025486069065, + 0.1544025486069065, + 0.005518341277326854, + 0.005518341277326854, + 0.008831488547314486, + 0.05505141760887841, + 0.057338307159287547, + 0.09169149185929976, + 0.022023824921676073, + 0.39744853888239157, + 0.44428297579288456, + 0.44428297579288456, + 0.02018813759088515, + 0.02018813759088515, + 0.013550767834697445, + 0.013550767834697445, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 24.6, + "rotation": [] + }, + { + "weights": [ + 0.015047695381300782, + 0.015047695381300782, + 0.0403464511569057, + 0.014926525, + 0.014926525, + 0.0007208462272371508, + 0.0, + 0.0, + 0.9367408637095523, + 0.9367408637095523, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0648549616336822, + 0.0648549616336822, + 0.05126333, + 0.028849721319797374, + 0.2895543442453655, + 0.028849721319797374, + 0.008461418495114356, + 0.2892004626137868, + 0.2892004626137868, + 0.00024822369417441646, + 0.00024822369417441646, + 0.016766144441706782, + 0.02916593233655604, + 0.26127779537013585, + 0.26127779537013585, + 0.00043684957282883656, + 0.00043684957282883656, + 0.004933594739330663, + 0.02916593233655604, + 0.05957579250846587, + 0.11138948202133173, + 0.00263069814869335, + 0.4362187232289993, + 0.425, + 0.425, + 0.017532187977007445, + 0.017532187977007445, + 0.012580986480627734, + 0.012580986480627734, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 24.633333333333333, + "rotation": [] + }, + { + "weights": [ + 0.023176682048610266, + 0.023176682048610266, + 0.05147887542843816, + 0.014950677753045899, + 0.014950677753045899, + 0.0, + 0.0, + 0.0, + 0.9266020030418939, + 0.9266020030418939, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0660318441689014, + 0.0660318441689014, + 0.05126333, + 0.033051043954102646, + 0.3, + 0.033051043954102646, + 0.009771684982946935, + 0.21764533583606976, + 0.21764533583606976, + 0.0033801672627617185, + 0.0033801672627617185, + 0.015364864149263916, + 0.0105913912345256, + 0.3724610654371124, + 0.3724610654371124, + 0.0, + 0.0, + 0.0034881236763404906, + 0.0105913912345256, + 0.07583361800227842, + 0.13237884342670433, + 0.0, + 0.4570656793458119, + 0.425, + 0.425, + 0.015478646201746795, + 0.015478646201746795, + 0.010409115840281754, + 0.010409115840281754, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 24.666666666666668, + "rotation": [] + }, + { + "weights": [ + 0.025644938088953483, + 0.025644938088953483, + 0.0614010957734925, + 0.014926525, + 0.014926525, + 0.0, + 0.0, + 0.0, + 0.4187424588190125, + 0.4187424588190125, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07590883108122004, + 0.07590883108122004, + 0.05126333, + 0.04027988820203711, + 0.3, + 0.04027988820203711, + 0.010804558079689736, + 0.1599994045283112, + 0.1599994045283112, + 0.007731837713425708, + 0.007731837713425708, + 0.020659683112587236, + 0.0063406390936246865, + 0.38225406653114713, + 0.38225406653114713, + 0.0, + 0.0, + 0.007418098952621215, + 0.0063406390936246865, + 0.08618005918604983, + 0.14613683436598088, + 0.0, + 0.37998247934239227, + 0.425, + 0.425, + 0.012468092340443809, + 0.012468092340443809, + 0.007528760922806599, + 0.007528760922806599, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 24.7, + "rotation": [] + }, + { + "weights": [ + 0.020520689604537817, + 0.020520689604537817, + 0.06644135309117177, + 0.014926525, + 0.014926525, + 0.002645649654524666, + 0.0, + 0.0, + 0.1458570054862811, + 0.1458570054862811, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.08923232448952534, + 0.08923232448952534, + 0.05126333, + 0.04681045045810084, + 0.3, + 0.04681045045810084, + 0.011337265106184137, + 0.12292376064828456, + 0.12292376064828456, + 0.00859394910978153, + 0.00859394910978153, + 0.026214233572993947, + 0.015682076636169627, + 0.26743985936045633, + 0.26743985936045633, + 0.0, + 0.0, + 0.015559675351583521, + 0.015682076636169627, + 0.0731858602591923, + 0.143122283901487, + 0.0, + 0.21759153700300612, + 0.425, + 0.425, + 0.008564587985830641, + 0.008564587985830641, + 0.005713889694639611, + 0.005713889694639611, + 0.05420222500000001, + 0.05420222500000001, + 0.002049520638372216 + ], + "time": 24.733333333333334, + "rotation": [] + }, + { + "weights": [ + 0.013505601989371428, + 0.013505601989371428, + 0.06643504308802738, + 0.014926525, + 0.014926525, + 0.004222225717135836, + 0.0005081100721976581, + 0.0005081100721976581, + 0.017364458704513062, + 0.017364458704513062, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.10142081167016705, + 0.10142081167016705, + 0.05126333, + 0.05178059866385797, + 0.2636971763202121, + 0.05178059866385797, + 0.01137237112436975, + 0.09357831031084055, + 0.09357831031084055, + 0.00448020368681422, + 0.00448020368681422, + 0.028283059171267902, + 0.034621487039008296, + 0.13060776985117356, + 0.13060776985117356, + 0.004845750651189255, + 0.004845750651189255, + 0.0269227781199983, + 0.034621487039008296, + 0.04709601891892294, + 0.11485544379268367, + 0.0012193903326988185, + 0.0808334433606692, + 0.425, + 0.425, + 0.004394620805978772, + 0.004394620805978772, + 0.004812800511717793, + 0.004812800511717793, + 0.05420222500000001, + 0.05420222500000001, + 0.0017135224438139364 + ], + "time": 24.766666666666666, + "rotation": [] + }, + { + "weights": [ + 0.008071031341595303, + 0.008071031341595303, + 0.0657153568097523, + 0.014926525, + 0.014926525, + 0.0034300807331289537, + 0.004249274078756568, + 0.004249274078756568, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.10773652664252684, + 0.10773652664252684, + 0.05126333, + 0.05784459672868249, + 0.16114551782608022, + 0.05784459672868249, + 0.012039235393915852, + 0.07413890968476017, + 0.07413890968476017, + 0.0008067265814835455, + 0.0008067265814835455, + 0.03654774565781863, + 0.049628443816410614, + 0.06379098658050804, + 0.06379098658050804, + 0.014319630552615429, + 0.014319630552615429, + 0.0444760879235608, + 0.049628443816410614, + 0.02966597271817069, + 0.0840900531836918, + 0.01704157527003968, + 0.029959039922271415, + 0.425, + 0.425, + 0.0024503461431179705, + 0.0024503461431179705, + 0.005907609127461905, + 0.005907609127461905, + 0.05420222500000001, + 0.05420222500000001, + 0.00020939082439456612 + ], + "time": 24.8, + "rotation": [] + }, + { + "weights": [ + 0.004766717233828132, + 0.004766717233828132, + 0.06428174482924594, + 0.014926525, + 0.014926525, + 0.004371937364339825, + 0.008259333896317647, + 0.008259333896317647, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.10793947609407556, + 0.10793947609407556, + 0.05126333, + 0.062379650132996664, + 0.0946350399085453, + 0.062379650132996664, + 0.010836014577320637, + 0.07711592731731273, + 0.07711592731731273, + 0.0014529571243162656, + 0.0014529571243162656, + 0.061285649346453766, + 0.05107312101338588, + 0.06542206630110735, + 0.06542206630110735, + 0.02496782557240553, + 0.02496782557240553, + 0.06223395738218509, + 0.05107312101338588, + 0.02744847397719109, + 0.06056657470762725, + 0.037092502840927646, + 0.038128600588866614, + 0.425, + 0.425, + 0.0033495694398879977, + 0.0033495694398879977, + 0.010228966815131045, + 0.010228966815131045, + 0.05420222500000001, + 0.05420222500000001, + 0.0004960225895047181 + ], + "time": 24.833333333333332, + "rotation": [] + }, + { + "weights": [ + 0.0017445890232920627, + 0.0017445890232920627, + 0.06009365341493058, + 0.015144565435943603, + 0.015144565435943603, + 0.00850012994238308, + 0.011222048549513725, + 0.011222048549513725, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.09861443904893732, + 0.09861443904893732, + 0.05126333, + 0.06545445780668936, + 0.06213805096490038, + 0.06545445780668936, + 0.010073166407112559, + 0.09549636223486485, + 0.09549636223486485, + 0.003653635692317037, + 0.003653635692317037, + 0.09371485774006158, + 0.041624762703265435, + 0.1105395800301006, + 0.1105395800301006, + 0.033406993108136294, + 0.033406993108136294, + 0.07258669074092589, + 0.041624762703265435, + 0.0278202107974461, + 0.04098065298582824, + 0.04698625781706399, + 0.06759132859962323, + 0.425, + 0.425, + 0.0060271343642047445, + 0.0060271343642047445, + 0.018174227885901915, + 0.018174227885901915, + 0.05420222500000001, + 0.05420222500000001, + 0.0019519066171986702 + ], + "time": 24.866666666666667, + "rotation": [] + }, + { + "weights": [ + 0.0022279709311468234, + 0.0022279709311468234, + 0.06034543280090601, + 0.015735502009431974, + 0.015735502009431974, + 0.014904799844537454, + 0.014435988584799416, + 0.014435988584799416, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07533424954329214, + 0.07533424954329214, + 0.05704631039074486, + 0.07035437236939154, + 0.05053711857114516, + 0.07035437236939154, + 0.007708024818982391, + 0.1102726063558033, + 0.1102726063558033, + 0.003620424129601034, + 0.003620424129601034, + 0.11979268725429257, + 0.035254990575568995, + 0.20358900619404646, + 0.20358900619404646, + 0.036592163225369775, + 0.036592163225369775, + 0.07177541404962537, + 0.035254990575568995, + 0.02487023334418023, + 0.025120397550719105, + 0.04271161173071178, + 0.11265580611569534, + 0.425, + 0.425, + 0.007690195010176722, + 0.007690195010176722, + 0.032586602094982334, + 0.032586602094982334, + 0.05420222500000001, + 0.05420222500000001, + 0.003966553855155194 + ], + "time": 24.9, + "rotation": [] + }, + { + "weights": [ + 0.006121987184243541, + 0.006121987184243541, + 0.06589654045445573, + 0.016776394259203502, + 0.016776394259203502, + 0.016492773486035197, + 0.021034260147384222, + 0.021034260147384222, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05375607130782937, + 0.05375607130782937, + 0.07451380331601411, + 0.0716409538473401, + 0.04679431898253297, + 0.0716409538473401, + 0.009228775663567435, + 0.11748654948813567, + 0.11748654948813567, + 0.002751136193318024, + 0.002751136193318024, + 0.12667945516960954, + 0.03152401889009133, + 0.2985614078385488, + 0.2985614078385488, + 0.03506096055997267, + 0.03506096055997267, + 0.06466419547796244, + 0.03152401889009133, + 0.02208920908825736, + 0.022061423531600406, + 0.03883433448416841, + 0.14588786193302686, + 0.425, + 0.425, + 0.009616121527339722, + 0.009616121527339722, + 0.047691805181758716, + 0.047691805181758716, + 0.05420222500000001, + 0.05420222500000001, + 0.004506877144532544 + ], + "time": 24.933333333333334, + "rotation": [] + }, + { + "weights": [ + 0.013504315380539214, + 0.013504315380539214, + 0.07668363835130412, + 0.018135778606489045, + 0.018135778606489045, + 0.015013260607208508, + 0.03019976828779492, + 0.03019976828779492, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.08848230934568807, + 0.07092051867927814, + 0.05479296003069191, + 0.07092051867927814, + 0.013148504562143759, + 0.11853370826159197, + 0.11853370826159197, + 0.0007003055459686668, + 0.0007003055459686668, + 0.11802679513181949, + 0.03075349788580619, + 0.40848117651683913, + 0.40848117651683913, + 0.028625656957072837, + 0.028625656957072837, + 0.05049104094505303, + 0.03075349788580619, + 0.01899261761988911, + 0.030111454906208174, + 0.03220885257635793, + 0.17395708156483494, + 0.425, + 0.425, + 0.011527076794632832, + 0.011527076794632832, + 0.06506872328796554, + 0.06506872328796554, + 0.05420222500000001, + 0.05420222500000001, + 0.004175200712467944 + ], + "time": 24.966666666666665, + "rotation": [] + }, + { + "weights": [ + 0.011904209317626795, + 0.011904209317626795, + 0.1720767630680924, + 0.08173685327135385, + 0.07231794827135385, + 0.023537885424535263, + 0.02859334507323546, + 0.02859334507323546, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.04529790441325601, + 0.04529790441325601, + 0.09331435407404176, + 0.06532582969081632, + 0.048462221549076215, + 0.06532582969081632, + 0.011924705808462725, + 0.11675441772201826, + 0.11675441772201826, + 0.0003337166090654266, + 0.0003337166090654266, + 0.10808568835157101, + 0.03248945311168014, + 0.4123661496059419, + 0.4123661496059419, + 0.029656375904827247, + 0.029656375904827247, + 0.05332377065505291, + 0.03248945311168014, + 0.01753124096107724, + 0.0274549711594472, + 0.0360999651689107, + 0.18385317140087765, + 0.425, + 0.425, + 0.004447605383791481, + 0.004447605383791481, + 0.06727723851027023, + 0.06727723851027023, + 0.05854979218897989, + 0.05854979218897989, + 0.002849952204495059 + ], + "time": 25.0, + "rotation": [] + }, + { + "weights": [ + 0.009179002303807504, + 0.009179002303807504, + 0.16865781589133208, + 0.0979190662324122, + 0.0375432262324122, + 0.029847646149850998, + 0.025621705546620323, + 0.025621705546620323, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.04789072534856953, + 0.04789072534856953, + 0.08807556267295558, + 0.05758787272941489, + 0.0392895866291863, + 0.05758787272941489, + 0.010235168128496112, + 0.11160923551235868, + 0.11160923551235868, + 0.0009387117186117732, + 0.0009387117186117732, + 0.09852992175590411, + 0.035950823092744416, + 0.38366308673506655, + 0.38366308673506655, + 0.035523873603060085, + 0.035523873603060085, + 0.06357033919720415, + 0.035950823092744416, + 0.017582140543631126, + 0.025198071467734503, + 0.04672396892593014, + 0.1631933806907561, + 0.425, + 0.425, + 0.006906347105190861, + 0.006906347105190861, + 0.058449241944721717, + 0.058449241944721717, + 0.05583710840668439, + 0.05583710840668439, + 0.0017972881595293673 + ], + "time": 25.033333333333335, + "rotation": [] + }, + { + "weights": [ + 0.007649155373552011, + 0.007649155373552011, + 0.18264655734931937, + 0.12364316759373581, + 0.06334487759373579, + 0.030885260286075703, + 0.02495799527636594, + 0.02495799527636594, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.054700256982471565, + 0.054700256982471565, + 0.07563830161733279, + 0.05165408679417193, + 0.0333023650518485, + 0.05165408679417193, + 0.012912149720692196, + 0.10001197922974817, + 0.10001197922974817, + 0.0014030934753661434, + 0.0014030934753661434, + 0.09816040896943627, + 0.04285942534250868, + 0.34538702299552276, + 0.34538702299552276, + 0.04149747691782453, + 0.04149747691782453, + 0.07406566100461134, + 0.04285942534250868, + 0.02013217689735547, + 0.032763899915984676, + 0.05168314400528154, + 0.12145519070327265, + 0.425, + 0.425, + 0.00924336009845137, + 0.00924336009845137, + 0.04443562013496241, + 0.04443562013496241, + 0.05420222500000001, + 0.05420222500000001, + 0.0013714037170367576 + ], + "time": 25.066666666666666, + "rotation": [] + }, + { + "weights": [ + 0.007668344880498586, + 0.007668344880498586, + 0.34236062175948273, + 0.1790085443615935, + 0.17871175436159348, + 0.03115999517696242, + 0.02608974772017625, + 0.02608974772017625, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.06070985414391297, + 0.06070985414391297, + 0.06795901941218849, + 0.06795901941218849, + 0.06181255323546267, + 0.04874139775832488, + 0.029888132980891602, + 0.04874139775832488, + 0.018735244759314103, + 0.08372473748666892, + 0.08372473748666892, + 0.0008421755788759102, + 0.0008421755788759102, + 0.11039891434567306, + 0.05254108398443173, + 0.29713580640298953, + 0.29713580640298953, + 0.03710432691233496, + 0.03710432691233496, + 0.07737950760693771, + 0.05254108398443173, + 0.024942344178756057, + 0.050443814694881406, + 0.04494848561783628, + 0.07836809186708348, + 0.425, + 0.425, + 0.011855529965744124, + 0.011855529965744124, + 0.030702156413878683, + 0.030702156413878683, + 0.05420222500000001, + 0.05420222500000001, + 0.0015909427244748383 + ], + "time": 25.1, + "rotation": [] + }, + { + "weights": [ + 0.010104460319390097, + 0.010104460319390097, + 0.49742597009041023, + 0.2894661403396718, + 0.2891617903396717, + 0.033813231414069916, + 0.027952847235715693, + 0.027952847235715693, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0820083811717159, + 0.0820083811717159, + 0.08044600396747871, + 0.08044600396747871, + 0.054593102808306766, + 0.046771744606496884, + 0.029383082304073816, + 0.046771744606496884, + 0.022853535257127806, + 0.07323874615512935, + 0.07323874615512935, + 0.00010833697034296288, + 0.00010833697034296288, + 0.12239486135694438, + 0.05936076730337675, + 0.27163062646174085, + 0.27163062646174085, + 0.025053676943592458, + 0.025053676943592458, + 0.06619423216652298, + 0.05936076730337675, + 0.028398351390548287, + 0.0672546180961083, + 0.032953370307781234, + 0.06811889228113241, + 0.425, + 0.425, + 0.015349401358702547, + 0.015349401358702547, + 0.023646704170117955, + 0.023646704170117955, + 0.05420222500000001, + 0.05420222500000001, + 0.0010748958042791096 + ], + "time": 25.133333333333333, + "rotation": [] + }, + { + "weights": [ + 0.012280111499890983, + 0.012280111499890983, + 0.41394929217766097, + 0.23398543160406488, + 0.2336221316040649, + 0.04081327430447751, + 0.02910703413416535, + 0.02910703413416535, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.09559639836524073, + 0.09559639836524073, + 0.07720195586613998, + 0.07720195586613998, + 0.05503321599291292, + 0.04364092102768467, + 0.03292393509952387, + 0.04364092102768467, + 0.021635609792583436, + 0.08314584845182842, + 0.08314584845182842, + 0.0, + 0.0, + 0.11572755900572751, + 0.05878341173791152, + 0.3107822033854162, + 0.3107822033854162, + 0.013041773068965687, + 0.013041773068965687, + 0.04566969883229048, + 0.05878341173791152, + 0.024041047795694687, + 0.06725389447899494, + 0.021477440800897914, + 0.10428604808388915, + 0.425, + 0.425, + 0.018582131928965746, + 0.018582131928965746, + 0.03241335676792931, + 0.03241335676792931, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 25.166666666666668, + "rotation": [] + }, + { + "weights": [ + 0.012159508942645418, + 0.012159508942645418, + 0.3347032627326133, + 0.18868895597266963, + 0.1882715659726696, + 0.05209967757670244, + 0.02680027576315462, + 0.02680027576315462, + 0.2970150571453133, + 0.2970150571453133, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.08722900742667125, + 0.08722900742667125, + 0.054643599093190706, + 0.054643599093190706, + 0.058592765615606765, + 0.04036477959733835, + 0.038872090960643715, + 0.04036477959733835, + 0.01710679039796243, + 0.11563594359752469, + 0.11563594359752469, + 0.00040287500078248185, + 0.00040287500078248185, + 0.08852926138408325, + 0.0570951852825831, + 0.40140819480984774, + 0.40140819480984774, + 0.006799647170594147, + 0.006799647170594147, + 0.02407206189951725, + 0.0570951852825831, + 0.012857719193003608, + 0.05911355688483736, + 0.009534937141805273, + 0.17593852358661127, + 0.425, + 0.425, + 0.02028634640664165, + 0.02028634640664165, + 0.052867452818520184, + 0.052867452818520184, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 25.2, + "rotation": [] + }, + { + "weights": [ + 0.00964957007340022, + 0.00964957007340022, + 0.30118273450911454, + 0.17332281255884172, + 0.1728406975588417, + 0.06635814766798696, + 0.020954159833490835, + 0.020954159833490835, + 0.7724566736941407, + 0.7724566736941407, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.062292680676494294, + 0.062292680676494294, + 0.0448066525, + 0.0448066525, + 0.056429917471749406, + 0.035772298808608716, + 0.04004122946943554, + 0.035772298808608716, + 0.012280839628406925, + 0.16267271361180705, + 0.16267271361180705, + 0.0009402086485975552, + 0.0009402086485975552, + 0.05501031364713392, + 0.06279238542275765, + 0.49031143614224, + 0.49031143614224, + 0.0012543688129101464, + 0.0012543688129101464, + 0.00764065901083605, + 0.06279238542275765, + 0.0024742506444454153, + 0.05711976545197619, + 0.0, + 0.25180408614022376, + 0.425, + 0.425, + 0.020852916517427978, + 0.020852916517427978, + 0.06607388952480892, + 0.06607388952480892, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 25.233333333333334, + "rotation": [] + }, + { + "weights": [ + 0.008228667373103748, + 0.008228667373103748, + 0.257657445, + 0.1341488422941678, + 0.13363530229416778, + 0.08102938032576011, + 0.015539946407079685, + 0.015539946407079685, + 0.7770886593156188, + 0.7770886593156188, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.029055417667366093, + 0.0327726934637342, + 0.029055417667366093, + 0.009207699447870248, + 0.20764461532235134, + 0.20764461532235134, + 0.0005428671856809936, + 0.0005428671856809936, + 0.03066233093185082, + 0.07729684976594785, + 0.5366210992847167, + 0.5366210992847167, + 0.0, + 0.0, + 0.0, + 0.07729684976594785, + 0.0004900324557508711, + 0.06565598547458645, + 0.0, + 0.3132858761719293, + 0.4387573838233945, + 0.4387573838233945, + 0.02236761514629635, + 0.02236761514629635, + 0.05793821657342567, + 0.05793821657342567, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 25.266666666666666, + "rotation": [] + }, + { + "weights": [ + 0.009045232247029026, + 0.009045232247029026, + 0.174045255, + 0.07956355739081587, + 0.07930141739081586, + 0.08916792092578749, + 0.015514450759759959, + 0.015514450759759959, + 0.7452078281299971, + 0.7452078281299971, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.046909623726138015, + 0.046909623726138015, + 0.05126333, + 0.025980584342388764, + 0.025762590425355076, + 0.025980584342388764, + 0.00849625079759529, + 0.2400111236742563, + 0.2400111236742563, + 9.753429829808197e-05, + 9.753429829808197e-05, + 0.0205435877399785, + 0.09079293172274311, + 0.5510785341262814, + 0.5510785341262814, + 0.00031013047056538607, + 0.00031013047056538607, + 0.0, + 0.09079293172274311, + 0.004917818520750312, + 0.07378918528556819, + 0.0, + 0.3411484024354388, + 0.49965585172176336, + 0.49965585172176336, + 0.02597867748567035, + 0.02597867748567035, + 0.04301349318453241, + 0.04301349318453241, + 0.05420222500000001, + 0.05420222500000001, + 0.0023687754624656257 + ], + "time": 25.3, + "rotation": [] + }, + { + "weights": [ + 0.011857590026089115, + 0.011857590026089115, + 0.029371868446469288, + 0.015657490013452256, + 0.015657490013452256, + 0.07660406519259721, + 0.02355254896517309, + 0.02355254896517309, + 0.2985463733861537, + 0.2985463733861537, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07048194057175088, + 0.07048194057175088, + 0.05217669521059305, + 0.021948861908523694, + 0.029341646347727075, + 0.021948861908523694, + 0.008233324651207232, + 0.25570460047040655, + 0.25570460047040655, + 0.000272893636221332, + 0.000272893636221332, + 0.028141329277838953, + 0.08722099087068008, + 0.5010681329028944, + 0.5010681329028944, + 0.007427714153059886, + 0.007427714153059886, + 0.0, + 0.08722099087068008, + 0.013649251524891156, + 0.07846048665898181, + 0.012080835125276013, + 0.28255036090101504, + 0.5049977034330366, + 0.5049977034330366, + 0.03036477225167409, + 0.03036477225167409, + 0.036986479429262004, + 0.036986479429262004, + 0.05420222500000001, + 0.05420222500000001, + 0.0051767697557806944 + ], + "time": 25.333333333333332, + "rotation": [] + }, + { + "weights": [ + 0.018487213764871856, + 0.018487213764871856, + 0.06018365382083821, + 0.0167445236556421, + 0.0167445236556421, + 0.05163097232580182, + 0.0391459630003997, + 0.0391459630003997, + 0.09682842847950923, + 0.09682842847950923, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.08094195462763304, + 0.08094195462763304, + 0.10436640706445484, + 0.10436640706445484, + 0.0712323284574917, + 0.019058486651985306, + 0.04441526063850945, + 0.019058486651985306, + 0.021024644640939557, + 0.26090988772256024, + 0.26090988772256024, + 0.0007478714870688103, + 0.0007478714870688103, + 0.05828828630702832, + 0.06462365112134386, + 0.37221212961844014, + 0.37221212961844014, + 0.01597691843552248, + 0.01597691843552248, + 0.011339933132486674, + 0.06462365112134386, + 0.04797321877309252, + 0.1146402071629251, + 0.029991509233202235, + 0.16257315214191154, + 0.4261236314262662, + 0.4261236314262662, + 0.03447271185261861, + 0.03447271185261861, + 0.03839683349111248, + 0.03839683349111248, + 0.05420222500000001, + 0.05420222500000001, + 0.008299366491181506 + ], + "time": 25.366666666666667, + "rotation": [] + }, + { + "weights": [ + 0.03356278839388062, + 0.03356278839388062, + 0.09544775464705053, + 0.01929169350491864, + 0.01929169350491864, + 0.028379532694816568, + 0.056892935984900986, + 0.056892935984900986, + 0.02061338247536692, + 0.02061338247536692, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.15303201100655955, + 0.15303201100655955, + 0.13732118053095674, + 0.13732118053095674, + 0.09896963472877225, + 0.01957501499550104, + 0.06786602914333338, + 0.01957501499550104, + 0.049514868536165754, + 0.2270077725606304, + 0.2270077725606304, + 0.0006160331204799668, + 0.0006160331204799668, + 0.10331246049276414, + 0.038290176899837575, + 0.24603968667132498, + 0.24603968667132498, + 0.021112839105938152, + 0.021112839105938152, + 0.0315075470533754, + 0.038290176899837575, + 0.08306798903005459, + 0.1669099245752606, + 0.04371470138430593, + 0.061379186170441705, + 0.425, + 0.425, + 0.03647638244288306, + 0.03647638244288306, + 0.033752162488443496, + 0.033752162488443496, + 0.06179339011255433, + 0.06179339011255433, + 0.00928813368082046 + ], + "time": 25.4, + "rotation": [] + }, + { + "weights": [ + 0.06629288984196521, + 0.06629288984196521, + 0.12056369526045657, + 0.02086314042819159, + 0.02086314042819159, + 0.021982398842062253, + 0.07145075947046275, + 0.07145075947046275, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.23437924299921298, + 0.23437924299921298, + 0.14961165530341003, + 0.14961165530341003, + 0.11300058556454515, + 0.020450394539784703, + 0.11416111622537879, + 0.020450394539784703, + 0.08734439893492627, + 0.1569918105112654, + 0.1569918105112654, + 0.0, + 0.0, + 0.14289217495492518, + 0.02297777385850036, + 0.254617316169398, + 0.254617316169398, + 0.01912441703357866, + 0.01912441703357866, + 0.05117558621402295, + 0.02297777385850036, + 0.09312325119972226, + 0.20382513574191494, + 0.04148535206913946, + 0.04726038553885046, + 0.425, + 0.425, + 0.03842097789049147, + 0.03842097789049147, + 0.02823583268161329, + 0.02823583268161329, + 0.07146987824567723, + 0.07146987824567723, + 0.008974488744778289 + ], + "time": 25.433333333333334, + "rotation": [] + }, + { + "weights": [ + 0.11363064731870373, + 0.11363064731870373, + 0.12685104778834744, + 0.01934708335625035, + 0.01934708335625035, + 0.017192627489566792, + 0.08105652220547195, + 0.08105652220547195, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.29696723840066347, + 0.29696723840066347, + 0.1257754513195582, + 0.1257754513195582, + 0.11316006949969694, + 0.024246662908366738, + 0.17241797174726206, + 0.024246662908366738, + 0.10290063257728299, + 0.08317391020911075, + 0.08317391020911075, + 0.0, + 0.0, + 0.15714464187622063, + 0.01698547364877802, + 0.38908899149724396, + 0.38908899149724396, + 0.015992232598364343, + 0.015992232598364343, + 0.05644613983375683, + 0.01698547364877802, + 0.06212364158460069, + 0.1759923871074403, + 0.030031435830252494, + 0.09224768110683979, + 0.425, + 0.425, + 0.04123845360108782, + 0.04123845360108782, + 0.03236324701990398, + 0.03236324701990398, + 0.08517543359526561, + 0.08517543359526561, + 0.004366258265716687 + ], + "time": 25.466666666666665, + "rotation": [] + }, + { + "weights": [ + 0.15660961020205694, + 0.15660961020205694, + 0.12576159323964792, + 0.0169268242488139, + 0.0169268242488139, + 0.012223252334765018, + 0.08666142619081901, + 0.08666142619081901, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.3290375490273746, + 0.3290375490273746, + 0.08128748280661442, + 0.08128748280661442, + 0.10950151085853571, + 0.02863299894545758, + 0.19665612050465167, + 0.02863299894545758, + 0.08983534574508661, + 0.04884157095636637, + 0.04884157095636637, + 0.0, + 0.0, + 0.15856253717626834, + 0.016079294654939846, + 0.5138658819454054, + 0.5138658819454054, + 0.013802917700793053, + 0.013802917700793053, + 0.04606940043824057, + 0.016079294654939846, + 0.033889088673250994, + 0.12502345655645636, + 0.01787424076880726, + 0.1689124092459678, + 0.425, + 0.425, + 0.0444388407043048, + 0.0444388407043048, + 0.05408563531403028, + 0.05408563531403028, + 0.10062434843608306, + 0.10062434843608306, + 0.0 + ], + "time": 25.5, + "rotation": [] + }, + { + "weights": [ + 0.17061400381582115, + 0.17061400381582115, + 0.12862596767289292, + 0.016217488157448764, + 0.016217488157448764, + 0.010295621625014705, + 0.08720717291746816, + 0.08720717291746816, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.32932055507387414, + 0.32932055507387414, + 0.0448066525, + 0.0448066525, + 0.10695059469767973, + 0.029587697663477474, + 0.16548727376120423, + 0.029587697663477474, + 0.06047272384166714, + 0.03949410952627656, + 0.03949410952627656, + 0.0014629521560189974, + 0.0014629521560189974, + 0.16340266721589214, + 0.017930307372340124, + 0.5342418551445005, + 0.5342418551445005, + 0.015601487777062814, + 0.015601487777062814, + 0.03715983544077189, + 0.017930307372340124, + 0.02199988216161726, + 0.07828008042914521, + 0.020054342384849263, + 0.24461645526545375, + 0.425, + 0.425, + 0.04340242428439002, + 0.04340242428439002, + 0.08018547578581739, + 0.08018547578581739, + 0.11446770748921797, + 0.11446770748921797, + 0.0 + ], + "time": 25.533333333333335, + "rotation": [] + }, + { + "weights": [ + 0.1559884650366646, + 0.1559884650366646, + 0.13698607065847934, + 0.017050342102687015, + 0.017050342102687015, + 0.019468050662960312, + 0.08355199343391823, + 0.08355199343391823, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.3106453929628643, + 0.3106453929628643, + 0.0448066525, + 0.0448066525, + 0.0943257421255111, + 0.025057779891150322, + 0.11613111802509846, + 0.025057779891150322, + 0.04137034362980295, + 0.044864125975540674, + 0.044864125975540674, + 0.0020249950119094655, + 0.0020249950119094655, + 0.17088210199560427, + 0.022829329302268355, + 0.48140336828572383, + 0.48140336828572383, + 0.018160076519208285, + 0.018160076519208285, + 0.04014481710536137, + 0.022829329302268355, + 0.026927403041294627, + 0.06139159756047381, + 0.03047750751887047, + 0.2964532064540044, + 0.425, + 0.425, + 0.0391720219169344, + 0.0391720219169344, + 0.0947937523147889, + 0.0947937523147889, + 0.11896446847489896, + 0.11896446847489896, + 0.0 + ], + "time": 25.566666666666666, + "rotation": [] + }, + { + "weights": [ + 0.12947052280817706, + 0.12947052280817706, + 0.14031733231885085, + 0.01916828256687709, + 0.01916828256687709, + 0.028409121504851732, + 0.07699684021728374, + 0.07699684021728374, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.2855748463954243, + 0.2855748463954243, + 0.0448066525, + 0.0448066525, + 0.08192867125783643, + 0.02129789537617137, + 0.08571343830653594, + 0.02129789537617137, + 0.03514519105000153, + 0.053892113108720066, + 0.053892113108720066, + 0.0006303870664643386, + 0.0006303870664643386, + 0.16943468281200944, + 0.030203404849661233, + 0.43519435737814194, + 0.43519435737814194, + 0.019442990954433158, + 0.019442990954433158, + 0.04447467518704276, + 0.030203404849661233, + 0.03136194071599414, + 0.05853297710418698, + 0.037923300692013315, + 0.312914015991347, + 0.425, + 0.425, + 0.034774520269462025, + 0.034774520269462025, + 0.09051841955099782, + 0.09051841955099782, + 0.10932342442018639, + 0.10932342442018639, + 0.0 + ], + "time": 25.6, + "rotation": [] + }, + { + "weights": [ + 0.10051091850868288, + 0.10051091850868288, + 0.13840729679380137, + 0.022667827298085343, + 0.022667827298085343, + 0.03292137490851536, + 0.06883917786180968, + 0.06883917786180968, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.25680974402597956, + 0.25680974402597956, + 0.0448066525, + 0.0448066525, + 0.07444521178092271, + 0.020359094174844865, + 0.0728623955590384, + 0.020359094174844865, + 0.03371150738426615, + 0.06427490535591326, + 0.06427490535591326, + 0.0, + 0.0, + 0.15828307696751176, + 0.03985967004139506, + 0.42889705470630074, + 0.42889705470630074, + 0.018699915281363888, + 0.018699915281363888, + 0.042200185837490196, + 0.03985967004139506, + 0.03130435922316141, + 0.061868283365453955, + 0.03648259373647824, + 0.30174877984183157, + 0.425, + 0.425, + 0.032856111824512466, + 0.032856111824512466, + 0.07886038768504343, + 0.07886038768504343, + 0.09092256879167893, + 0.09092256879167893, + 0.0 + ], + "time": 25.633333333333333, + "rotation": [] + }, + { + "weights": [ + 0.06820365696081089, + 0.06820365696081089, + 0.1322761748518262, + 0.026585147157862518, + 0.026585147157862518, + 0.037453564682177115, + 0.05843688095254554, + 0.05843688095254554, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.22180513803447982, + 0.22180513803447982, + 0.0448066525, + 0.0448066525, + 0.06953923553228375, + 0.02294459577117646, + 0.06303579245294841, + 0.02294459577117646, + 0.030176295393279602, + 0.0834918423954929, + 0.0834918423954929, + 0.0, + 0.0, + 0.14009986690112514, + 0.047336966810481856, + 0.4205645254680086, + 0.4205645254680086, + 0.016436785885265884, + 0.016436785885265884, + 0.035399553924798946, + 0.047336966810481856, + 0.03135723365204673, + 0.06690417272703984, + 0.0335658761007445, + 0.26842777175562704, + 0.425, + 0.425, + 0.03185905218124388, + 0.03185905218124388, + 0.06657479666173455, + 0.06657479666173455, + 0.07108253527964861, + 0.07108253527964861, + 0.0 + ], + "time": 25.666666666666668, + "rotation": [] + }, + { + "weights": [ + 0.038217969797551606, + 0.038217969797551606, + 0.11915770683969762, + 0.029613877540188162, + 0.029613877540188162, + 0.043208118741001375, + 0.04721995655979426, + 0.04721995655979426, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.1847865575126238, + 0.1847865575126238, + 0.05352184405284265, + 0.05352184405284265, + 0.05860768056341577, + 0.02397082950919865, + 0.04747289129665917, + 0.02397082950919865, + 0.024304804738078785, + 0.1270401554448263, + 0.1270401554448263, + 0.00012154160092385227, + 0.00012154160092385227, + 0.11386290426765164, + 0.05116914100944993, + 0.3641445526054925, + 0.3641445526054925, + 0.01527396094586167, + 0.01527396094586167, + 0.02896232152623788, + 0.05116914100944993, + 0.03204959822552543, + 0.07258153089455191, + 0.0367395150874342, + 0.21848101913928974, + 0.425, + 0.425, + 0.030924479748521517, + 0.030924479748521517, + 0.051852387855095494, + 0.051852387855095494, + 0.06132201984447341, + 0.06132201984447341, + 0.0015005448034831452 + ], + "time": 25.7, + "rotation": [] + }, + { + "weights": [ + 0.01937225841517958, + 0.01937225841517958, + 0.1021419037665639, + 0.03146112039685248, + 0.03146112039685248, + 0.04684482738375661, + 0.03889400788715905, + 0.03889400788715905, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.15528294784682128, + 0.15528294784682128, + 0.06796914248594212, + 0.06796914248594212, + 0.05126333, + 0.024717838442575246, + 0.027694925836154374, + 0.024717838442575246, + 0.01989208353417259, + 0.19194149311099723, + 0.19194149311099723, + 0.0002855210754621241, + 0.0002855210754621241, + 0.08851009053843356, + 0.05428664077605516, + 0.25779995960848656, + 0.25779995960848656, + 0.015014022615339066, + 0.015014022615339066, + 0.024707852303981766, + 0.05428664077605516, + 0.03758071831294466, + 0.08077157714537207, + 0.05634020801101409, + 0.171413675376347, + 0.425, + 0.425, + 0.029692944032805292, + 0.029692944032805292, + 0.036269025584416706, + 0.036269025584416706, + 0.054874035672708224, + 0.054874035672708224, + 0.0036913344104375144 + ], + "time": 25.733333333333334, + "rotation": [] + }, + { + "weights": [ + 0.013240841110902162, + 0.013240841110902162, + 0.08635269446032383, + 0.029385224437074985, + 0.029385224437074985, + 0.04912458157965112, + 0.035202452540397625, + 0.035202452540397625, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.13679069046463277, + 0.13679069046463277, + 0.08417221217283176, + 0.08417221217283176, + 0.05126333, + 0.0255226759962041, + 0.01680859071867805, + 0.0255226759962041, + 0.01907826614167008, + 0.24456351292984813, + 0.24456351292984813, + 0.000297952531753773, + 0.000297952531753773, + 0.07283625070537834, + 0.06048340563263209, + 0.17190238961151655, + 0.17190238961151655, + 0.01567224684570516, + 0.01567224684570516, + 0.02254503667354582, + 0.06048340563263209, + 0.04667030785764964, + 0.08671677538326804, + 0.07376319201929224, + 0.1577920194183076, + 0.425, + 0.425, + 0.029097767855439848, + 0.029097767855439848, + 0.025706673493342724, + 0.025706673493342724, + 0.05420222500000001, + 0.05420222500000001, + 0.0036958414529051084 + ], + "time": 25.766666666666666, + "rotation": [] + }, + { + "weights": [ + 0.01606015459235224, + 0.01606015459235224, + 0.07888258099555964, + 0.026745263327996382, + 0.026745263327996382, + 0.04334778115153311, + 0.03586117694420472, + 0.03586117694420472, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.1345534682273864, + 0.1345534682273864, + 0.09971877251352576, + 0.09971877251352576, + 0.05126333, + 0.02430565912578208, + 0.030720717140606448, + 0.02430565912578208, + 0.022854431239621966, + 0.23835628224270672, + 0.23835628224270672, + 0.0003552727108555179, + 0.0003552727108555179, + 0.08097552784851614, + 0.06292860811310153, + 0.1908309561865669, + 0.1908309561865669, + 0.014599114071045595, + 0.014599114071045595, + 0.02407337075897624, + 0.06292860811310153, + 0.04951079402651103, + 0.08339051455259319, + 0.06967637363289081, + 0.19405998843056801, + 0.425, + 0.425, + 0.028800454820905395, + 0.028800454820905395, + 0.028494110463985353, + 0.028494110463985353, + 0.05420222500000001, + 0.05420222500000001, + 0.002063095915530408 + ], + "time": 25.8, + "rotation": [] + }, + { + "weights": [ + 0.033113465271890144, + 0.033113465271890144, + 0.08179864074502669, + 0.02296784089135033, + 0.02296784089135033, + 0.03029883759362355, + 0.03894051834940908, + 0.03894051834940908, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.15444030633994504, + 0.15444030633994504, + 0.11941117037619856, + 0.11941117037619856, + 0.06718925173793516, + 0.02168147227895532, + 0.07630243863378249, + 0.02168147227895532, + 0.031693467763917765, + 0.17620642036199557, + 0.17620642036199557, + 0.0002473827458119817, + 0.0002473827458119817, + 0.11333851580108908, + 0.05646656315241538, + 0.3117265360695973, + 0.3117265360695973, + 0.012321160414389194, + 0.012321160414389194, + 0.026048480133925155, + 0.05646656315241538, + 0.04187826492956705, + 0.0762853445751326, + 0.04429436549544332, + 0.24532838506357998, + 0.425, + 0.425, + 0.03009994081088473, + 0.03009994081088473, + 0.04396537427923507, + 0.04396537427923507, + 0.0553608672525978, + 0.0553608672525978, + 0.0008837849700025142 + ], + "time": 25.833333333333332, + "rotation": [] + }, + { + "weights": [ + 0.05964179217283211, + 0.05964179217283211, + 0.08923991961138583, + 0.01870385403134754, + 0.01870385403134754, + 0.016620503259556624, + 0.04073996522596902, + 0.04073996522596902, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.18475233827318455, + 0.18475233827318455, + 0.13905857535345206, + 0.13905857535345206, + 0.09868446450148305, + 0.023561078496277317, + 0.12781370478016982, + 0.023561078496277317, + 0.04136808743434291, + 0.10650225707462849, + 0.10650225707462849, + 0.0001817054211694214, + 0.0001817054211694214, + 0.1517391566719327, + 0.04319395673062118, + 0.4510883365358623, + 0.4510883365358623, + 0.00992022079548665, + 0.00992022079548665, + 0.02355150676199367, + 0.04319395673062118, + 0.030158756247588545, + 0.06630251173462183, + 0.023830668787871073, + 0.2883385083505084, + 0.425, + 0.425, + 0.030696661855493256, + 0.030696661855493256, + 0.061366638248520206, + 0.061366638248520206, + 0.06094138596661702, + 0.06094138596661702, + 0.00038792581430503254 + ], + "time": 25.866666666666667, + "rotation": [] + }, + { + "weights": [ + 0.08747499569186137, + 0.08747499569186137, + 0.09014166359390526, + 0.016025967683662004, + 0.016025967683662004, + 0.006919955887964787, + 0.04019854499825407, + 0.04019854499825407, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.20711633733340662, + 0.20711633733340662, + 0.14286789745092382, + 0.14286789745092382, + 0.11191743697438916, + 0.02891230769455431, + 0.1451722860336303, + 0.02891230769455431, + 0.04228197980139935, + 0.08297558341707496, + 0.08297558341707496, + 7.279105883623873e-05, + 7.279105883623873e-05, + 0.16118626935141417, + 0.03459618389606474, + 0.51387283205986, + 0.51387283205986, + 0.009075770101376935, + 0.009075770101376935, + 0.017008860329432135, + 0.03459618389606474, + 0.02570910879543848, + 0.059853576123714405, + 0.015221502206155223, + 0.30618816358702505, + 0.425, + 0.425, + 0.030246271320751715, + 0.030246271320751715, + 0.07070833556354042, + 0.07070833556354042, + 0.06406850938208715, + 0.06406850938208715, + 0.0007693749453340254 + ], + "time": 25.9, + "rotation": [] + }, + { + "weights": [ + 0.10659050020788394, + 0.10659050020788394, + 0.08734058248145235, + 0.014926525, + 0.014926525, + 0.004839410100664389, + 0.043388417469603646, + 0.043388417469603646, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.22050669874463746, + 0.22050669874463746, + 0.12973124235868444, + 0.12973124235868444, + 0.11004897100584843, + 0.03459086194634435, + 0.13523650646209703, + 0.03459086194634435, + 0.039029512607625536, + 0.08139006750924242, + 0.08139006750924242, + 0.0, + 0.0, + 0.15660834780761157, + 0.02923677600920197, + 0.5265692859888074, + 0.5265692859888074, + 0.009576185579810817, + 0.009576185579810817, + 0.012060410023799949, + 0.02923677600920197, + 0.02795317534889491, + 0.056950105726718867, + 0.008995335336242388, + 0.3274119572980062, + 0.425, + 0.425, + 0.027995943937982815, + 0.027995943937982815, + 0.0749726559966802, + 0.0749726559966802, + 0.06788975592093056, + 0.06788975592093056, + 0.0006649872554200032 + ], + "time": 25.933333333333334, + "rotation": [] + }, + { + "weights": [ + 0.11930213996342245, + 0.11930213996342245, + 0.08012450124536231, + 0.014926525, + 0.014926525, + 0.008809176406690027, + 0.04875399225524489, + 0.04875399225524489, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.22499043920210404, + 0.22499043920210404, + 0.09922877401113497, + 0.09922877401113497, + 0.09179377470697668, + 0.040288069657981374, + 0.09607445955276468, + 0.040288069657981374, + 0.030276727197425676, + 0.10689749802861892, + 0.10689749802861892, + 0.0, + 0.0, + 0.13426696913582914, + 0.02728185504674908, + 0.4845601052045818, + 0.4845601052045818, + 0.011445002497306882, + 0.011445002497306882, + 0.0075355403923562415, + 0.02728185504674908, + 0.03661606929131914, + 0.05680449008941647, + 0.007333674335053969, + 0.34574603693825834, + 0.425, + 0.425, + 0.024003601840564152, + 0.024003601840564152, + 0.07368237115442744, + 0.07368237115442744, + 0.0732699424028396, + 0.0732699424028396, + 0.00033558378262179195 + ], + "time": 25.966666666666665, + "rotation": [] + }, + { + "weights": [ + 0.10510014530955519, + 0.10510014530955519, + 0.07260256269604562, + 0.02059226102638335, + 0.02059226102638335, + 0.0076737522257833805, + 0.044245288630782684, + 0.044245288630782684, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.20214538529667286, + 0.20214538529667286, + 0.09691487814344094, + 0.09691487814344094, + 0.0775397281178912, + 0.04319041360169644, + 0.09329333138465856, + 0.04319041360169644, + 0.02693673864969992, + 0.1724325397762716, + 0.1724325397762716, + 0.0, + 0.0, + 0.1182511220760894, + 0.027162954456039792, + 0.41235164917650613, + 0.41235164917650613, + 0.010467413141056373, + 0.010467413141056373, + 0.00831847049283229, + 0.027162954456039792, + 0.05099900603851894, + 0.07367106822274974, + 0.014464257409682055, + 0.3080718566578663, + 0.425, + 0.425, + 0.007623150924598268, + 0.007623150924598268, + 0.06542653232280685, + 0.06542653232280685, + 0.06625534648982367, + 0.06625534648982367, + 0.0003186532424217984 + ], + "time": 26.0, + "rotation": [] + }, + { + "weights": [ + 0.0927102960291362, + 0.0927102960291362, + 0.06368292988765797, + 0.019210029467443508, + 0.019210029467443508, + 0.006924173945472333, + 0.03960395473986858, + 0.03960395473986858, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.17639208382793808, + 0.17639208382793808, + 0.09795747257414304, + 0.09795747257414304, + 0.06846604609773263, + 0.044901481111134754, + 0.10089870838891873, + 0.044901481111134754, + 0.02730736187880944, + 0.19669436798209225, + 0.19669436798209225, + 0.0, + 0.0, + 0.10805200529949983, + 0.031236123896780425, + 0.3732913198925195, + 0.3732913198925195, + 0.008449704643516303, + 0.008449704643516303, + 0.009706039504990674, + 0.031236123896780425, + 0.04737356454133983, + 0.07606029141516907, + 0.015964845000278362, + 0.29766332819348257, + 0.425, + 0.425, + 0.011684560977277292, + 0.011684560977277292, + 0.06539223557781595, + 0.06539223557781595, + 0.06178533332078896, + 0.06178533332078896, + 0.0002799272537231441 + ], + "time": 26.033333333333335, + "rotation": [] + }, + { + "weights": [ + 0.09207158823098449, + 0.09207158823098449, + 0.05513037083936581, + 0.018007996042157238, + 0.018007996042157238, + 0.01101860733968869, + 0.03659222809863938, + 0.03659222809863938, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.15497873201966264, + 0.15497873201966264, + 0.09172138824526742, + 0.09172138824526742, + 0.06481308790722057, + 0.04692492850923108, + 0.10527864115578772, + 0.04692492850923108, + 0.028693936259618795, + 0.1698036421622548, + 0.1698036421622548, + 6.338628757345872e-06, + 6.338628757345872e-06, + 0.10236037714140737, + 0.03875879725175241, + 0.38965352135045145, + 0.38965352135045145, + 0.006095002019511794, + 0.006095002019511794, + 0.008678203651548482, + 0.03875879725175241, + 0.03219748022300853, + 0.06481451009001045, + 0.008277862492416573, + 0.3382803900965619, + 0.425, + 0.425, + 0.0158594918165888, + 0.0158594918165888, + 0.07427859859807141, + 0.07427859859807141, + 0.05910934073773126, + 0.05910934073773126, + 0.0 + ], + "time": 26.066666666666666, + "rotation": [] + }, + { + "weights": [ + 0.09487202234920994, + 0.09487202234920994, + 0.04737635006507231, + 0.01695086688338166, + 0.01695086688338166, + 0.01863873799641925, + 0.0318000562400335, + 0.0318000562400335, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.1313423899844997, + 0.1313423899844997, + 0.08073187869574333, + 0.08073187869574333, + 0.06097499820448098, + 0.049817417606356565, + 0.10305106151671624, + 0.049817417606356565, + 0.028042564647538296, + 0.13730482764187302, + 0.13730482764187302, + 0.00012305855895170832, + 0.00012305855895170832, + 0.09647009032113199, + 0.045694221024002314, + 0.42853984179950855, + 0.42853984179950855, + 0.0031975474297290707, + 0.0031975474297290707, + 0.006011228460729821, + 0.045694221024002314, + 0.021678557353360287, + 0.058667794011888, + 0.0, + 0.4054739326238629, + 0.425, + 0.425, + 0.018849833162057954, + 0.018849833162057954, + 0.08230667838028492, + 0.08230667838028492, + 0.05625281111392905, + 0.05625281111392905, + 0.0 + ], + "time": 26.1, + "rotation": [] + }, + { + "weights": [ + 0.08907325446909782, + 0.08907325446909782, + 0.03693338792973834, + 0.01565916009156817, + 0.01565916009156817, + 0.02182678188495083, + 0.022703496818145603, + 0.022703496818145603, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.09451562008459341, + 0.09451562008459341, + 0.06759836538739142, + 0.06759836538739142, + 0.05126333, + 0.05087416677070512, + 0.10309338482220959, + 0.05087416677070512, + 0.02282333375417252, + 0.13000921429825468, + 0.13000921429825468, + 0.0007358682474642543, + 0.0007358682474642543, + 0.08167932843776779, + 0.04658260564364135, + 0.44204072529361327, + 0.44204072529361327, + 0.0003985064002830955, + 0.0003985064002830955, + 0.0038765998561328006, + 0.04658260564364135, + 0.014863386434965377, + 0.06075443764527634, + 0.0, + 0.4783442978834616, + 0.425, + 0.425, + 0.018833690469402833, + 0.018833690469402833, + 0.08254343863399251, + 0.08254343863399251, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 26.133333333333333, + "rotation": [] + }, + { + "weights": [ + 0.07166237531419917, + 0.07166237531419917, + 0.02888475, + 0.015004246338947841, + 0.015004246338947841, + 0.013834432330058537, + 0.012926144680312387, + 0.012926144680312387, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.058736680180664184, + 0.058736680180664184, + 0.057691295892000165, + 0.057691295892000165, + 0.05126333, + 0.04735191414930988, + 0.11916619362149915, + 0.04735191414930988, + 0.014602779431686709, + 0.14318572225619325, + 0.14318572225619325, + 0.0018560755279447342, + 0.0018560755279447342, + 0.05839723136656134, + 0.039184379386050336, + 0.4329654094151086, + 0.4329654094151086, + 0.0, + 0.0, + 0.002648298751980977, + 0.039184379386050336, + 0.01105590327053653, + 0.07126983906541548, + 0.0, + 0.5267426268421871, + 0.425, + 0.425, + 0.016297935030411694, + 0.016297935030411694, + 0.07129594049283433, + 0.07129594049283433, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 26.166666666666668, + "rotation": [] + }, + { + "weights": [ + 0.05021171924563084, + 0.05021171924563084, + 0.02888475, + 0.014961099796950816, + 0.014961099796950816, + 0.001655348055824939, + 0.005609994334149722, + 0.005609994334149722, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05281067295266046, + 0.05281067295266046, + 0.05126333, + 0.042530715021171714, + 0.14423838448524468, + 0.042530715021171714, + 0.007426500063845693, + 0.16506092949485282, + 0.16506092949485282, + 0.0029275406903720314, + 0.0029275406903720314, + 0.03577843930648296, + 0.02965296665472642, + 0.41057875556605183, + 0.41057875556605183, + 0.0, + 0.0, + 2.689727933659266e-05, + 0.02965296665472642, + 0.015439316403804982, + 0.09087858693940294, + 0.0, + 0.5371934516575868, + 0.425, + 0.425, + 0.013841735424679143, + 0.013841735424679143, + 0.05237042949667996, + 0.05237042949667996, + 0.05420222500000001, + 0.05420222500000001, + 0.00016008814606739558 + ], + "time": 26.2, + "rotation": [] + }, + { + "weights": [ + 0.03574573754199911, + 0.03574573754199911, + 0.02888475, + 0.01529492294204848, + 0.01529492294204848, + 0.0, + 0.0024559952185622264, + 0.0024559952185622264, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05057947997535975, + 0.05057947997535975, + 0.05126333, + 0.041514974938971626, + 0.15278710876192358, + 0.041514974938971626, + 0.0042465457426650146, + 0.19206514209508885, + 0.19206514209508885, + 0.0028542567164237995, + 0.0028542567164237995, + 0.0233155310153961, + 0.026491356747491, + 0.3629930528146878, + 0.3629930528146878, + 0.0, + 0.0, + 0.0, + 0.026491356747491, + 0.027348801280770968, + 0.10932630619832442, + 0.0, + 0.513738565785544, + 0.425, + 0.425, + 0.013430314872946048, + 0.013430314872946048, + 0.030158011109701205, + 0.030158011109701205, + 0.05420222500000001, + 0.05420222500000001, + 0.0007069388404488562 + ], + "time": 26.233333333333334, + "rotation": [] + }, + { + "weights": [ + 0.027753141203096916, + 0.027753141203096916, + 0.02888475, + 0.015050029010131699, + 0.015050029010131699, + 0.0, + 0.0007989570099328236, + 0.0007989570099328236, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.046762988450271714, + 0.046762988450271714, + 0.05126333, + 0.04391929092151776, + 0.13674976382936743, + 0.04391929092151776, + 0.0033371032880885236, + 0.2198011926242282, + 0.2198011926242282, + 0.001987560135977608, + 0.001987560135977608, + 0.01785539633461406, + 0.03266984394618441, + 0.29032806392226884, + 0.29032806392226884, + 0.0, + 0.0, + 0.0, + 0.03266984394618441, + 0.036414330133369976, + 0.11237281603472567, + 0.0, + 0.4812993586063382, + 0.425, + 0.425, + 0.014648066077913547, + 0.014648066077913547, + 0.01549058812005178, + 0.01549058812005178, + 0.05420222500000001, + 0.05420222500000001, + 0.000299365712063653 + ], + "time": 26.266666666666666, + "rotation": [] + }, + { + "weights": [ + 0.023155968662883542, + 0.023155968662883542, + 0.02888475, + 0.014926525, + 0.014926525, + 0.009240833031279691, + 0.00025903971067496687, + 0.00025903971067496687, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.04648635887673921, + 0.10509501542363842, + 0.04648635887673921, + 0.003657884589795553, + 0.23557298375027508, + 0.23557298375027508, + 0.001205579634489757, + 0.001205579634489757, + 0.01336543740970747, + 0.045480998392615976, + 0.24200927381004592, + 0.24200927381004592, + 3.852865525654383e-05, + 3.852865525654383e-05, + 0.0, + 0.045480998392615976, + 0.032955591380596144, + 0.09936717088733395, + 0.0, + 0.45349034156118095, + 0.425, + 0.425, + 0.01634114093014171, + 0.01634114093014171, + 0.015869480451302855, + 0.015869480451302855, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 26.3, + "rotation": [] + }, + { + "weights": [ + 0.018667191240404325, + 0.018667191240404325, + 0.02888475, + 0.014926525, + 0.014926525, + 0.027765960565635118, + 3.131681254931842e-05, + 3.131681254931842e-05, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.04554942505700245, + 0.07405158911432534, + 0.04554942505700245, + 0.0049912670095052, + 0.23433818306241702, + 0.23433818306241702, + 0.0011153532684381512, + 0.0011153532684381512, + 0.008688875819955547, + 0.060010887576000996, + 0.2447440379432268, + 0.2447440379432268, + 0.00012459664472511827, + 0.00012459664472511827, + 0.0011933030826704837, + 0.060010887576000996, + 0.02194902684007371, + 0.08630951898438585, + 0.0, + 0.4398564500468115, + 0.425, + 0.425, + 0.01778213254043033, + 0.01778213254043033, + 0.0287256747484207, + 0.0287256747484207, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 26.333333333333332, + "rotation": [] + }, + { + "weights": [ + 0.015086948924830973, + 0.015086948924830973, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0546251656753676, + 0.000471959482612354, + 0.000471959482612354, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.04035079702734945, + 0.04851515880652833, + 0.04035079702734945, + 0.007457426749169822, + 0.22487850018909986, + 0.22487850018909986, + 0.0013094416140977817, + 0.0013094416140977817, + 0.007290917315653386, + 0.07218323626688544, + 0.27769543294395704, + 0.27769543294395704, + 0.00024997677121843585, + 0.00024997677121843585, + 0.0033935292890029277, + 0.07218323626688544, + 0.014933226789746953, + 0.08152033367327277, + 0.0, + 0.4334966949054171, + 0.425, + 0.425, + 0.019284193366765966, + 0.019284193366765966, + 0.03837823865136927, + 0.03837823865136927, + 0.05420222500000001, + 0.05420222500000001, + 0.00018872618675231932 + ], + "time": 26.366666666666667, + "rotation": [] + }, + { + "weights": [ + 0.011988933171544749, + 0.011988933171544749, + 0.02888475, + 0.014926525, + 0.014926525, + 0.08111451598150385, + 0.001635205379820294, + 0.001635205379820294, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03238829059561933, + 0.031768084381307855, + 0.03238829059561933, + 0.009412645694932761, + 0.21487857976130065, + 0.21487857976130065, + 0.0015203242576015837, + 0.0015203242576015837, + 0.010106701084545673, + 0.08162095355136048, + 0.3113112464547156, + 0.3113112464547156, + 0.0007071762212685172, + 0.0007071762212685172, + 0.004335607202457528, + 0.08162095355136048, + 0.01468841029064995, + 0.0806252532771655, + 0.0, + 0.4282461830547875, + 0.425, + 0.425, + 0.020933512768575115, + 0.020933512768575115, + 0.039463651526187124, + 0.039463651526187124, + 0.05420222500000001, + 0.05420222500000001, + 0.0003025134227105549 + ], + "time": 26.4, + "rotation": [] + }, + { + "weights": [ + 0.010278587069894578, + 0.010278587069894578, + 0.02888475, + 0.015425309486173901, + 0.015425309486173901, + 0.09770866600530484, + 0.0048572387812393005, + 0.0048572387812393005, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.027707995493321074, + 0.022373652458190903, + 0.027707995493321074, + 0.01097931911104491, + 0.20922056181090204, + 0.20922056181090204, + 0.0015706496446260376, + 0.0015706496446260376, + 0.016132592782378188, + 0.08929717679108887, + 0.33886293981756466, + 0.33886293981756466, + 0.0011486938755427079, + 0.0011486938755427079, + 0.00360156829868044, + 0.08929717679108887, + 0.016738389538867124, + 0.08245734572410579, + 0.0, + 0.4229899627821784, + 0.425, + 0.425, + 0.023133661683116626, + 0.023133661683116626, + 0.036490622109600454, + 0.036490622109600454, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 26.433333333333334, + "rotation": [] + }, + { + "weights": [ + 0.01207905842789581, + 0.01207905842789581, + 0.03462279007903165, + 0.017752449321446415, + 0.017752449321446415, + 0.10033141672611232, + 0.011903858430949696, + 0.011903858430949696, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.024067329261808053, + 0.024799072699887396, + 0.024067329261808053, + 0.011916853434273168, + 0.20919267471347525, + 0.20919267471347525, + 0.0013834296020546121, + 0.0013834296020546121, + 0.022868614430938433, + 0.09237485889877586, + 0.3669185199907846, + 0.3669185199907846, + 0.002489215375057287, + 0.002489215375057287, + 0.0017403817469520218, + 0.09237485889877586, + 0.01872325177703584, + 0.08603498190641398, + 0.0024618044495582567, + 0.4191087024552479, + 0.48835350189890153, + 0.48835350189890153, + 0.025811150797775795, + 0.025811150797775795, + 0.03530919216573236, + 0.03530919216573236, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 26.466666666666665, + "rotation": [] + }, + { + "weights": [ + 0.01935947308582918, + 0.01935947308582918, + 0.04753731712698934, + 0.019530310003371916, + 0.019530310003371916, + 0.0907559076590197, + 0.024543345739532776, + 0.024543345739532776, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05843108585544653, + 0.05843108585544653, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02167038216956445, + 0.03416576828275406, + 0.02167038216956445, + 0.012683846375771924, + 0.21718790062836224, + 0.21718790062836224, + 0.001233330565903867, + 0.001233330565903867, + 0.0291533302515745, + 0.0880225310900381, + 0.3985741215092793, + 0.3985741215092793, + 0.005065829280231677, + 0.005065829280231677, + 0.0, + 0.0880225310900381, + 0.02106733779822076, + 0.08744112636361798, + 0.005218873811619619, + 0.4089627785342078, + 0.5651786297559735, + 0.5651786297559735, + 0.028498816277299593, + 0.028498816277299593, + 0.03915954934699192, + 0.03915954934699192, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 26.5, + "rotation": [] + }, + { + "weights": [ + 0.03043635037860698, + 0.03043635037860698, + 0.059563909258161234, + 0.02030073042481899, + 0.02030073042481899, + 0.07520829811692234, + 0.04341031092086006, + 0.04341031092086006, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.08711175136268134, + 0.08711175136268134, + 0.04507549320172581, + 0.04507549320172581, + 0.05126333, + 0.020014552019360407, + 0.043750065522534486, + 0.020014552019360407, + 0.013417798440371234, + 0.23079730676753168, + 0.23079730676753168, + 0.0015484039006488652, + 0.0015484039006488652, + 0.034867165131228284, + 0.07667712255247996, + 0.42180768932614987, + 0.42180768932614987, + 0.007760339922138619, + 0.007760339922138619, + 0.0, + 0.07667712255247996, + 0.021978087510381415, + 0.08153194636106487, + 0.0070958175829478635, + 0.38242217983518306, + 0.6443991473742889, + 0.6443991473742889, + 0.0306201694692884, + 0.0306201694692884, + 0.049490919922079324, + 0.049490919922079324, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 26.533333333333335, + "rotation": [] + }, + { + "weights": [ + 0.0416928972782833, + 0.0416928972782833, + 0.07263669392892289, + 0.02083162234352929, + 0.02083162234352929, + 0.05904618107846802, + 0.06551761097673856, + 0.06551761097673856, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.1159233208213533, + 0.1159233208213533, + 0.05433583807732374, + 0.05433583807732374, + 0.05126333, + 0.019033206579232388, + 0.048637550473213165, + 0.019033206579232388, + 0.0132381043263844, + 0.24325604523931216, + 0.24325604523931216, + 0.002188170365989207, + 0.002188170365989207, + 0.04146410455661158, + 0.06359925238149503, + 0.4326184200389042, + 0.4326184200389042, + 0.009211381471582816, + 0.009211381471582816, + 0.0, + 0.06359925238149503, + 0.021965798309871117, + 0.06985732870442522, + 0.008497803551810124, + 0.3390237637928552, + 0.711843986170632, + 0.711843986170632, + 0.03217675792319432, + 0.03217675792319432, + 0.06640920601785179, + 0.06640920601785179, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 26.566666666666666, + "rotation": [] + }, + { + "weights": [ + 0.05038562965180189, + 0.05038562965180189, + 0.0853831936206136, + 0.021754299956259722, + 0.021754299956259722, + 0.041801941022276856, + 0.0848418755722897, + 0.0848418755722897, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.14232694134116164, + 0.14232694134116164, + 0.059094807558826006, + 0.059094807558826006, + 0.05973935829741611, + 0.0181556725, + 0.05639994910785126, + 0.0181556725, + 0.013360713422298422, + 0.24349487487758895, + 0.24349487487758895, + 0.0026622801939291596, + 0.0026622801939291596, + 0.048173119127750366, + 0.05244903654924457, + 0.44578472886766674, + 0.44578472886766674, + 0.009643345964806416, + 0.009643345964806416, + 0.0018448449338653247, + 0.05244903654924457, + 0.020752189201968044, + 0.05601949393749234, + 0.009367994219064708, + 0.29748596804482574, + 0.7554921703679216, + 0.7554921703679216, + 0.033745096794196516, + 0.033745096794196516, + 0.08577827295022347, + 0.08577827295022347, + 0.057866391389788205, + 0.057866391389788205, + 0.0 + ], + "time": 26.6, + "rotation": [] + }, + { + "weights": [ + 0.056185218106423074, + 0.056185218106423074, + 0.09216919796807421, + 0.022182879916810304, + 0.022182879916810304, + 0.019419347707714342, + 0.09415786096027914, + 0.09415786096027914, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.16231488340667308, + 0.16231488340667308, + 0.05632757539195671, + 0.05632757539195671, + 0.06913599105817927, + 0.0181556725, + 0.0881641553129468, + 0.0181556725, + 0.01872576709304536, + 0.22874155236142008, + 0.22874155236142008, + 0.002495262263608829, + 0.002495262263608829, + 0.05586921327880447, + 0.0405368904849248, + 0.4734026265995841, + 0.4734026265995841, + 0.008382106598998814, + 0.008382106598998814, + 0.005121137082044565, + 0.0405368904849248, + 0.0163622851882662, + 0.045803566702774565, + 0.01012379441942487, + 0.2860914409160612, + 0.7670558733599522, + 0.7670558733599522, + 0.03400009487356456, + 0.03400009487356456, + 0.10169926966939649, + 0.10169926966939649, + 0.061300336206888455, + 0.061300336206888455, + 0.0 + ], + "time": 26.633333333333333, + "rotation": [] + }, + { + "weights": [ + 0.05660399161279199, + 0.05660399161279199, + 0.09257958403655456, + 0.021966321181524816, + 0.021966321181524816, + 0.0, + 0.08792311708842, + 0.08792311708842, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.16537506335547986, + 0.16537506335547986, + 0.05270460317177429, + 0.05270460317177429, + 0.06640076882072854, + 0.0181556725, + 0.16488173842430107, + 0.0181556725, + 0.02491206255342278, + 0.21056159479277464, + 0.21056159479277464, + 0.002188295454585125, + 0.002188295454585125, + 0.06359702582870208, + 0.024053519764649003, + 0.501951912471226, + 0.501951912471226, + 0.0059583988306777785, + 0.0059583988306777785, + 0.005003719437601309, + 0.024053519764649003, + 0.01137805102126938, + 0.05100408451897754, + 0.009430154838732305, + 0.32672736815043835, + 0.7426444309098376, + 0.7426444309098376, + 0.03086910809789383, + 0.03086910809789383, + 0.10236416932727604, + 0.10236416932727604, + 0.06292615230516978, + 0.06292615230516978, + 0.0 + ], + "time": 26.666666666666668, + "rotation": [] + }, + { + "weights": [ + 0.05115130405340873, + 0.05115130405340873, + 0.08692034589392793, + 0.020754169992589264, + 0.020754169992589264, + 0.0, + 0.0667456280706184, + 0.0667456280706184, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.14258913780961707, + 0.14258913780961707, + 0.054313871104802375, + 0.054313871104802375, + 0.05126333, + 0.0181556725, + 0.2614925350461686, + 0.0181556725, + 0.024556221706526608, + 0.2023622259497641, + 0.2023622259497641, + 0.0019042779891086463, + 0.0019042779891086463, + 0.06573594265750474, + 0.010629996763808379, + 0.4995867226805003, + 0.4995867226805003, + 0.0035067338230354425, + 0.0035067338230354425, + 0.002083477796986698, + 0.010629996763808379, + 0.013699311869485026, + 0.0715925303953034, + 0.007823454588651654, + 0.4082149650369369, + 0.683331911052976, + 0.683331911052976, + 0.025229719430208193, + 0.025229719430208193, + 0.0802007096420441, + 0.0802007096420441, + 0.061194768185352584, + 0.061194768185352584, + 0.0 + ], + "time": 26.7, + "rotation": [] + }, + { + "weights": [ + 0.04369179398885792, + 0.04369179398885792, + 0.077313106400626, + 0.018908339313649446, + 0.018908339313649446, + 0.0, + 0.04267754666507241, + 0.04267754666507241, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.10480768206928451, + 0.10480768206928451, + 0.05880978730108054, + 0.05880978730108054, + 0.05126333, + 0.0181556725, + 0.3, + 0.0181556725, + 0.018160720116325777, + 0.21125998752457742, + 0.21125998752457742, + 0.0017312039767525017, + 0.0017312039767525017, + 0.05826246802295954, + 0.004825715800481178, + 0.4413680163877348, + 0.4413680163877348, + 0.00180604899568217, + 0.00180604899568217, + 0.0, + 0.004825715800481178, + 0.03022945629698888, + 0.0971614846161433, + 0.005126412319285526, + 0.4886653508458816, + 0.6078796650682173, + 0.6078796650682173, + 0.020387558830635876, + 0.020387558830635876, + 0.04886930124568085, + 0.04886930124568085, + 0.05718123227280479, + 0.05718123227280479, + 0.0 + ], + "time": 26.733333333333334, + "rotation": [] + }, + { + "weights": [ + 0.0405050239392689, + 0.0405050239392689, + 0.0638949883835656, + 0.01684100074482577, + 0.01684100074482577, + 0.0, + 0.027551992077912583, + 0.027551992077912583, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0723674499562808, + 0.0723674499562808, + 0.05848880197320662, + 0.05848880197320662, + 0.05126333, + 0.0181556725, + 0.3, + 0.0181556725, + 0.013204954444829898, + 0.22948458514043246, + 0.22948458514043246, + 0.0012271483827914504, + 0.0012271483827914504, + 0.04522031556282722, + 0.004921669991953029, + 0.34113896574292846, + 0.34113896574292846, + 0.0006424047585044581, + 0.0006424047585044581, + 0.0018977631482162628, + 0.004921669991953029, + 0.0483764294002737, + 0.11175978183746332, + 0.0010874336319310314, + 0.5257068157196042, + 0.5302139307771407, + 0.5302139307771407, + 0.01830913622464451, + 0.01830913622464451, + 0.027442688069173247, + 0.027442688069173247, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 26.766666666666666, + "rotation": [] + }, + { + "weights": [ + 0.04349874880697043, + 0.04349874880697043, + 0.05143212761197768, + 0.015183260611676488, + 0.015183260611676488, + 0.0, + 0.025197829731873084, + 0.025197829731873084, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.06005843278194834, + 0.06005843278194834, + 0.052101457651172335, + 0.052101457651172335, + 0.05126333, + 0.02377783381282704, + 0.26134765659059783, + 0.02377783381282704, + 0.010102987861526858, + 0.24079711075339988, + 0.24079711075339988, + 0.0008102784741536841, + 0.0008102784741536841, + 0.035962167807987735, + 0.005315376578697133, + 0.23988147356680445, + 0.23988147356680445, + 0.0002437035420111237, + 0.0002437035420111237, + 0.005184849937047273, + 0.005315376578697133, + 0.053927529922553445, + 0.10775515926735735, + 0.0, + 0.5197798294680456, + 0.46676325755459896, + 0.46676325755459896, + 0.01813050348843846, + 0.01813050348843846, + 0.02292222372655356, + 0.02292222372655356, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 26.8, + "rotation": [] + }, + { + "weights": [ + 0.05618553949253896, + 0.05618553949253896, + 0.041525604469435526, + 0.014926525, + 0.014926525, + 0.0, + 0.030659113026091013, + 0.030659113026091013, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.06734983016337663, + 0.06734983016337663, + 0.04644743970686366, + 0.04644743970686366, + 0.05126333, + 0.026835769753194877, + 0.1793947322028023, + 0.026835769753194877, + 0.006945105415901962, + 0.23596304399626583, + 0.23596304399626583, + 0.0006085386790800837, + 0.0006085386790800837, + 0.03306334135787825, + 0.013647317793220273, + 0.1684947929212024, + 0.1684947929212024, + 0.0023263599191393146, + 0.0023263599191393146, + 0.010686731571331614, + 0.013647317793220273, + 0.04701818270342688, + 0.08686615952423635, + 0.0, + 0.47904600756508936, + 0.42851528695651453, + 0.42851528695651453, + 0.019310812205076206, + 0.019310812205076206, + 0.029922309571078824, + 0.029922309571078824, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 26.833333333333332, + "rotation": [] + }, + { + "weights": [ + 0.0777265000556196, + 0.0777265000556196, + 0.03801958241633004, + 0.014926525, + 0.014926525, + 0.011505276922668724, + 0.043346403006996395, + 0.043346403006996395, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.09159220260168818, + 0.09159220260168818, + 0.04577054530382153, + 0.04577054530382153, + 0.05126333, + 0.025754390117137087, + 0.10829093796866274, + 0.025754390117137087, + 0.006606276692556479, + 0.21305373183318535, + 0.21305373183318535, + 0.000485447532430823, + 0.000485447532430823, + 0.0348807167794023, + 0.022581694022353195, + 0.14004811623266755, + 0.14004811623266755, + 0.007422859860318043, + 0.007422859860318043, + 0.01661702280065842, + 0.022581694022353195, + 0.03791553974151608, + 0.06182215724672586, + 0.011299416422843926, + 0.4084278285503385, + 0.425, + 0.425, + 0.020843635861362717, + 0.020843635861362717, + 0.04389257242104834, + 0.04389257242104834, + 0.05705256415187562, + 0.05705256415187562, + 0.0 + ], + "time": 26.866666666666667, + "rotation": [] + }, + { + "weights": [ + 0.10184605371739178, + 0.10184605371739178, + 0.044810493929045514, + 0.014926525, + 0.014926525, + 0.027772088295647063, + 0.05675894274775468, + 0.05675894274775468, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.12338522023388311, + 0.12338522023388311, + 0.04894305675157476, + 0.04894305675157476, + 0.05126333, + 0.023772992691647322, + 0.06979470065661834, + 0.023772992691647322, + 0.010890125150659248, + 0.1803427018225192, + 0.1803427018225192, + 0.0003896061921425692, + 0.0003896061921425692, + 0.043139709745134605, + 0.024929608950125304, + 0.1543280650462422, + 0.1543280650462422, + 0.01312230548688343, + 0.01312230548688343, + 0.024855707505983954, + 0.024929608950125304, + 0.03558965580804005, + 0.047233132805143054, + 0.02475924997457435, + 0.31961287515504, + 0.425, + 0.425, + 0.023212468155792768, + 0.023212468155792768, + 0.05430803567703278, + 0.05430803567703278, + 0.06217095804988587, + 0.06217095804988587, + 0.0 + ], + "time": 26.9, + "rotation": [] + }, + { + "weights": [ + 0.11709285298628458, + 0.11709285298628458, + 0.053352376392909406, + 0.014926525, + 0.014926525, + 0.03154189379087513, + 0.0668314444433365, + 0.0668314444433365, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.1443289467266627, + 0.1443289467266627, + 0.05339537869606695, + 0.05339537869606695, + 0.05126333, + 0.022722409312038075, + 0.05499246920858108, + 0.022722409312038075, + 0.014816946416561085, + 0.14812979623675326, + 0.14812979623675326, + 0.000788325489099536, + 0.000788325489099536, + 0.053179310368640056, + 0.022168519574084423, + 0.18464311978646675, + 0.18464311978646675, + 0.01633114601884568, + 0.01633114601884568, + 0.030745942012539905, + 0.022168519574084423, + 0.036704870845590286, + 0.042531888825552755, + 0.03127935688410485, + 0.2517881018774847, + 0.425, + 0.425, + 0.024958490942205674, + 0.024958490942205674, + 0.06256994730127706, + 0.06256994730127706, + 0.06753500205065519, + 0.06753500205065519, + 0.0 + ], + "time": 26.933333333333334, + "rotation": [] + }, + { + "weights": [ + 0.12637698772762493, + 0.12637698772762493, + 0.06601930792842586, + 0.01647818838966506, + 0.01647818838966506, + 0.025565787457994014, + 0.0747777723574212, + 0.0747777723574212, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.15952119060925068, + 0.15952119060925068, + 0.05968693473509373, + 0.05968693473509373, + 0.059346554002591506, + 0.022193666992266856, + 0.0661284131663186, + 0.022193666992266856, + 0.019744780526629504, + 0.1132384367287157, + 0.1132384367287157, + 0.0015677919160641193, + 0.0015677919160641193, + 0.06641533726028032, + 0.014080848744405131, + 0.2382359127913201, + 0.2382359127913201, + 0.017800963829670613, + 0.017800963829670613, + 0.03549398229058296, + 0.014080848744405131, + 0.041789329477718865, + 0.04744372240134642, + 0.03297705368271894, + 0.19480710370199994, + 0.425, + 0.425, + 0.02647668497903003, + 0.02647668497903003, + 0.06818871676389657, + 0.06818871676389657, + 0.07704614906438755, + 0.07704614906438755, + 0.0 + ], + "time": 26.966666666666665, + "rotation": [] + }, + { + "weights": [ + 0.11151246136599238, + 0.11151246136599238, + 0.05720648432251843, + 0.021245485660251567, + 0.021245485660251567, + 0.028714704265703907, + 0.06470013436626912, + 0.06470013436626912, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.13783823696471942, + 0.13783823696471942, + 0.0554979499471278, + 0.0554979499471278, + 0.05126333, + 0.029890000235175455, + 0.05629571689959281, + 0.029890000235175455, + 0.017178506183590035, + 0.12431812121754576, + 0.12431812121754576, + 0.0008584466749010283, + 0.0008584466749010283, + 0.05826082491246205, + 0.019574341215319938, + 0.20941323185732347, + 0.20941323185732347, + 0.016033696984352683, + 0.016033696984352683, + 0.03138311531071603, + 0.019574341215319938, + 0.04701444844810325, + 0.04510320368115181, + 0.04398750909534438, + 0.1822161646653597, + 0.425, + 0.425, + 0.007312978456316341, + 0.007312978456316341, + 0.05872730668292052, + 0.05872730668292052, + 0.06731735510154704, + 0.06731735510154704, + 0.0 + ], + "time": 27.0, + "rotation": [] + }, + { + "weights": [ + 0.09167122637764318, + 0.09167122637764318, + 0.04508704094304918, + 0.01938715341263975, + 0.01938715341263975, + 0.031722667884258954, + 0.0512988266246836, + 0.0512988266246836, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.1088436166179321, + 0.1088436166179321, + 0.05068805923774121, + 0.05068805923774121, + 0.05126333, + 0.03058203424951087, + 0.0430018914313543, + 0.03058203424951087, + 0.013602243002415396, + 0.13858607858419397, + 0.13858607858419397, + 0.0019850241492413677, + 0.0019850241492413677, + 0.045723474699826426, + 0.026156556384549216, + 0.16395386672090895, + 0.16395386672090895, + 0.013568968308113851, + 0.013568968308113851, + 0.025912933317678275, + 0.026156556384549216, + 0.048807911220050945, + 0.03781572390525108, + 0.05936298324238682, + 0.16695261526675426, + 0.425, + 0.425, + 0.009141052957092003, + 0.009141052957092003, + 0.04607968204433005, + 0.04607968204433005, + 0.0606630473984206, + 0.0606630473984206, + 3.9102882146835295e-05 + ], + "time": 27.033333333333335, + "rotation": [] + }, + { + "weights": [ + 0.07362024541944256, + 0.07362024541944256, + 0.03568923048941147, + 0.017816705217475547, + 0.017816705217475547, + 0.030438544468155894, + 0.03934678254715561, + 0.03934678254715561, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.08247793784498095, + 0.08247793784498095, + 0.04717119402651271, + 0.04717119402651271, + 0.05126333, + 0.03080903397851032, + 0.03201996518032888, + 0.03080903397851032, + 0.011013014356805264, + 0.14217561701578735, + 0.14217561701578735, + 0.004243944644678514, + 0.004243944644678514, + 0.03480713702738282, + 0.02871327346323853, + 0.12553982692105414, + 0.12553982692105414, + 0.010717536615473866, + 0.010717536615473866, + 0.021252545794205976, + 0.02871327346323853, + 0.04539097792335915, + 0.026653751730918836, + 0.07407212903989209, + 0.13465196995862871, + 0.425, + 0.425, + 0.01013772368643964, + 0.01013772368643964, + 0.03581342883408066, + 0.03581342883408066, + 0.05489970946873186, + 0.05489970946873186, + 0.00015667676925659176 + ], + "time": 27.066666666666666, + "rotation": [] + }, + { + "weights": [ + 0.05547018361588313, + 0.05547018361588313, + 0.02888475, + 0.016348851659046808, + 0.016348851659046808, + 0.02583446483172119, + 0.02675016321951431, + 0.02675016321951431, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03068529228632682, + 0.02098168895358129, + 0.03068529228632682, + 0.007972716771820109, + 0.14300064001054974, + 0.14300064001054974, + 0.007964838172541925, + 0.007964838172541925, + 0.023979636565560368, + 0.0281759022735059, + 0.08772379104934977, + 0.08772379104934977, + 0.006906866441879943, + 0.006906866441879943, + 0.015382501877666918, + 0.0281759022735059, + 0.03809830695390699, + 0.012889569589779463, + 0.08559607166264732, + 0.0942493694523969, + 0.425, + 0.425, + 0.010703194277627118, + 0.010703194277627118, + 0.027188567817211122, + 0.027188567817211122, + 0.05420222500000001, + 0.05420222500000001, + 0.00015145577490329745 + ], + "time": 27.1, + "rotation": [] + }, + { + "weights": [ + 0.03616042310574728, + 0.03616042310574728, + 0.02888475, + 0.014926525, + 0.014926525, + 0.019216520322524754, + 0.012603562783994725, + 0.012603562783994725, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.03040901247731586, + 0.009396781150986537, + 0.03040901247731586, + 0.00393813607861053, + 0.14649782781799622, + 0.14649782781799622, + 0.01289373079585481, + 0.01289373079585481, + 0.012606021087287225, + 0.025844831937024363, + 0.0481497731298005, + 0.0481497731298005, + 0.0026521537891354635, + 0.0026521537891354635, + 0.007042794265043057, + 0.025844831937024363, + 0.029825423495704603, + 0.0, + 0.0946230524028239, + 0.048452663880323, + 0.425, + 0.425, + 0.011490416999313288, + 0.011490416999313288, + 0.018064720022435074, + 0.018064720022435074, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 27.133333333333333, + "rotation": [] + }, + { + "weights": [ + 0.023467216090280164, + 0.023467216090280164, + 0.02888475, + 0.014926525, + 0.014926525, + 0.01380036971550814, + 0.002972627502618998, + 0.002972627502618998, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02974202781788326, + 0.0018135631789966467, + 0.02974202781788326, + 0.0010906009510995764, + 0.16163517932806687, + 0.16163517932806687, + 0.017938311119971562, + 0.017938311119971562, + 0.005115207299894212, + 0.024223471662143652, + 0.02304807327535685, + 0.02304807327535685, + 0.0004027843391712823, + 0.0004027843391712823, + 0.0, + 0.024223471662143652, + 0.02491596350864487, + 0.0, + 0.10463340776763395, + 0.018682100806309228, + 0.425, + 0.425, + 0.013322684803300965, + 0.013322684803300965, + 0.011952163399178145, + 0.011952163399178145, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 27.166666666666668, + "rotation": [] + }, + { + "weights": [ + 0.019439109344111402, + 0.019439109344111402, + 0.02888475, + 0.014926525, + 0.014926525, + 0.011131215211840302, + 0.00032565257654582313, + 0.00032565257654582313, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.028857409969876943, + 0.0, + 0.028857409969876943, + 0.00018724237160034902, + 0.12226946587009083, + 0.12226946587009083, + 0.014534436545862658, + 0.014534436545862658, + 0.0014692781150949228, + 0.016599540500046334, + 0.009764979024778814, + 0.009764979024778814, + 6.065532489090545e-06, + 6.065532489090545e-06, + 0.0, + 0.016599540500046334, + 0.01624187202782046, + 0.0, + 0.07745335591462797, + 0.005746412324358002, + 0.425, + 0.425, + 0.010380840967747624, + 0.010380840967747624, + 0.006746035554655348, + 0.006746035554655348, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 27.2, + "rotation": [] + }, + { + "weights": [ + 0.020967846177518356, + 0.020967846177518356, + 0.02888475, + 0.014926525, + 0.014926525, + 0.010644850134849542, + 0.0017845327500253907, + 0.0017845327500253907, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.028191462364403855, + 0.0, + 0.028191462364403855, + 0.00038289636972227247, + 0.06211447945662903, + 0.06211447945662903, + 0.007393696248531337, + 0.007393696248531337, + 0.0009972134445394782, + 0.0078728786855936, + 0.006335931878004751, + 0.006335931878004751, + 5.149622048650465e-05, + 5.149622048650465e-05, + 0.0, + 0.0078728786855936, + 0.0076259436777659775, + 0.0, + 0.037543805582182725, + 0.004217794771705353, + 0.425, + 0.425, + 0.0053604074205671004, + 0.0053604074205671004, + 0.0037543036735483547, + 0.0037543036735483547, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 27.233333333333334, + "rotation": [] + }, + { + "weights": [ + 0.02057210864233118, + 0.02057210864233118, + 0.02888475, + 0.014926525, + 0.014926525, + 0.010402459864105491, + 0.002448251623926417, + 0.002448251623926417, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.028022690322606215, + 0.0, + 0.028022690322606215, + 0.00015630552911066566, + 0.01943933142083029, + 0.01943933142083029, + 0.0023706251042229756, + 0.0023706251042229756, + 6.295549018042041e-06, + 0.0023951482453516515, + 0.0013770992628165627, + 0.0013770992628165627, + 4.07876712935311e-05, + 4.07876712935311e-05, + 0.0, + 0.0023951482453516515, + 0.0019387136399745908, + 0.0010181624335902078, + 0.0108373656443187, + 0.0007599958990301386, + 0.425, + 0.425, + 0.001694309719971246, + 0.001694309719971246, + 0.0008818675896951115, + 0.0008818675896951115, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 27.266666666666666, + "rotation": [] + }, + { + "weights": [ + 0.020340297078447672, + 0.020340297078447672, + 0.02888475, + 0.014926525, + 0.014926525, + 0.009844182218824108, + 0.0028063751424529703, + 0.0028063751424529703, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.028088127920494074, + 0.0, + 0.028088127920494074, + 0.0002646994111793379, + 0.029324530405657613, + 0.029324530405657613, + 0.003602005094289777, + 0.003602005094289777, + 0.0002633235710007801, + 0.003716582709125108, + 0.002665628641843794, + 0.002665628641843794, + 8.388476712363103e-05, + 8.388476712363103e-05, + 0.0, + 0.003716582709125108, + 0.0031505348639828796, + 0.0010105094313621517, + 0.016855813775743744, + 0.001766545921564101, + 0.425, + 0.425, + 0.002493110277823038, + 0.002493110277823038, + 0.0013257526499884462, + 0.0013257526499884462, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 27.3, + "rotation": [] + }, + { + "weights": [ + 0.02004084991557256, + 0.02004084991557256, + 0.02888475, + 0.014926525, + 0.014926525, + 0.009595910672630575, + 0.002880929802943552, + 0.002880929802943552, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02831755833203724, + 0.0, + 0.02831755833203724, + 0.0005994938596683947, + 0.02892725233520779, + 0.02892725233520779, + 0.003559851020574568, + 0.003559851020574568, + 0.0004872652675424299, + 0.0036625754726784545, + 0.0031778163569314124, + 0.0031778163569314124, + 7.120859410081587e-05, + 7.120859410081587e-05, + 0.0, + 0.0036625754726784545, + 0.0030930200006280602, + 0.0008816380160195482, + 0.017154205739498128, + 0.0024393812247685007, + 0.425, + 0.425, + 0.0023909083349364134, + 0.0023909083349364134, + 0.0013148442868675494, + 0.0013148442868675494, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 27.333333333333332, + "rotation": [] + }, + { + "weights": [ + 0.01944625853960002, + 0.01944625853960002, + 0.02888475, + 0.014926525, + 0.014926525, + 0.010471431485244199, + 0.0031894958511527074, + 0.0031894958511527074, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.028446933992030958, + 0.0, + 0.028446933992030958, + 0.0016059349723426348, + 0.028931731496538417, + 0.028931731496538417, + 0.003444212291921886, + 0.003444212291921886, + 0.000796699225902557, + 0.0037355250013726077, + 0.003408003587807926, + 0.003408003587807926, + 8.503593504428854e-05, + 8.503593504428854e-05, + 0.0, + 0.0037355250013726077, + 0.00330991527863911, + 0.0005167476513556067, + 0.01848510431391851, + 0.0031648286112717196, + 0.425, + 0.425, + 0.00229639114652361, + 0.00229639114652361, + 0.001746134922972746, + 0.001746134922972746, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 27.366666666666667, + "rotation": [] + }, + { + "weights": [ + 0.01831173617392777, + 0.01831173617392777, + 0.02888475, + 0.014926525, + 0.014926525, + 0.013024836885077603, + 0.004005120421892828, + 0.004005120421892828, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.028449667237522937, + 0.0, + 0.028449667237522937, + 0.0027158053525324364, + 0.029512887341635548, + 0.029512887341635548, + 0.0031491626522370726, + 0.0031491626522370726, + 0.0012081845530441822, + 0.003993853053876329, + 0.0030860571988991312, + 0.0030860571988991312, + 0.00021363956587655184, + 0.00021363956587655184, + 0.00022431297493832436, + 0.003993853053876329, + 0.003985291974885121, + 0.0004949593756880075, + 0.02080045712845665, + 0.004669747714485436, + 0.425, + 0.425, + 0.002233038621289388, + 0.002233038621289388, + 0.002695103591041904, + 0.002695103591041904, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 27.4, + "rotation": [] + }, + { + "weights": [ + 0.017426848065640238, + 0.017426848065640238, + 0.02888475, + 0.014926525, + 0.014926525, + 0.018352382523672908, + 0.004961856314912435, + 0.004961856314912435, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.0292999472925009, + 0.0003272457293101718, + 0.0292999472925009, + 0.004148349066131879, + 0.030738193605627316, + 0.030738193605627316, + 0.0026892758948462337, + 0.0026892758948462337, + 0.0015341230588299878, + 0.004603884305272781, + 0.00293015122413635, + 0.00293015122413635, + 0.0005717213505080764, + 0.0005717213505080764, + 0.0008516155263142922, + 0.004603884305272781, + 0.00504610295806612, + 0.0008928773871489927, + 0.023153241872787462, + 0.009159000537225171, + 0.425, + 0.425, + 0.002281746566295622, + 0.002281746566295622, + 0.004305828336094103, + 0.004305828336094103, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 27.433333333333334, + "rotation": [] + }, + { + "weights": [ + 0.01640561004834515, + 0.01640561004834515, + 0.02888475, + 0.014926525, + 0.014926525, + 0.02945490511400357, + 0.006122474285906976, + 0.006122474285906976, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.061375758371182816, + 0.030232353447627335, + 0.0006432383911950245, + 0.030232353447627335, + 0.005234702716448474, + 0.03301652563469749, + 0.03301652563469749, + 0.0021160047490681906, + 0.0021160047490681906, + 0.0016682275278227662, + 0.005681397914886471, + 0.004823793768882747, + 0.004823793768882747, + 0.0009858841555459154, + 0.0009858841555459154, + 0.001363784948896084, + 0.005681397914886471, + 0.005875861708606989, + 0.001796162894793918, + 0.023535985435758307, + 0.017372511753014144, + 0.425, + 0.425, + 0.002476870123829159, + 0.002476870123829159, + 0.0066057267731853865, + 0.0066057267731853865, + 0.05420222500000001, + 0.05420222500000001, + 0.0004430775663682391 + ], + "time": 27.466666666666665, + "rotation": [] + }, + { + "weights": [ + 0.013738694414496414, + 0.013738694414496414, + 0.02888475, + 0.014926525, + 0.014926525, + 0.04805101156234738, + 0.0070367623719253675, + 0.0070367623719253675, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.06628285401633804, + 0.029520815656477378, + 0.0007176751068660187, + 0.029520815656477378, + 0.005210802710748141, + 0.03653747418097085, + 0.03653747418097085, + 0.0015044645076351497, + 0.0015044645076351497, + 0.0014740639499255582, + 0.007171468553798535, + 0.011201475762895166, + 0.011201475762895166, + 0.0009977381410343302, + 0.0009977381410343302, + 0.0012005237942295409, + 0.007171468553798535, + 0.005769445257527485, + 0.0030814447892563664, + 0.02013344392180442, + 0.027448307956968017, + 0.425, + 0.425, + 0.00281081004653658, + 0.00281081004653658, + 0.009324100938226491, + 0.009324100938226491, + 0.05420222500000001, + 0.05420222500000001, + 0.0007416903440441401 + ], + "time": 27.5, + "rotation": [] + }, + { + "weights": [ + 0.009509617835283275, + 0.009509617835283275, + 0.02888475, + 0.014926525, + 0.014926525, + 0.06967033243605066, + 0.0065044614286827165, + 0.0065044614286827165, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.06369717514940668, + 0.026848363815497666, + 0.0006865826674870078, + 0.026848363815497666, + 0.0040661874593102484, + 0.04087391780955449, + 0.04087391780955449, + 0.0009528218183134276, + 0.0009528218183134276, + 0.0009907452762126917, + 0.009113798790744369, + 0.02251698823911802, + 0.02251698823911802, + 0.0004910592628376822, + 0.0004910592628376822, + 0.0006146128648625948, + 0.009113798790744369, + 0.0043615574709006694, + 0.004974993893078392, + 0.01247392460703849, + 0.036625644436904345, + 0.425, + 0.425, + 0.003237559757062365, + 0.003237559757062365, + 0.011156326883605542, + 0.011156326883605542, + 0.05420222500000001, + 0.05420222500000001, + 0.000697328788893563 + ], + "time": 27.533333333333335, + "rotation": [] + }, + { + "weights": [ + 0.006195833241300919, + 0.006195833241300919, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0837993384471961, + 0.0038615820995931095, + 0.0038615820995931095, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05310434060437336, + 0.023963894075404914, + 0.0011831861393792277, + 0.023963894075404914, + 0.002531649451702832, + 0.04542435224567138, + 0.04542435224567138, + 0.0005974711866251056, + 0.0005974711866251056, + 0.0004737215595585955, + 0.011359840748565532, + 0.03708649113774297, + 0.03708649113774297, + 0.0, + 0.0, + 0.00022818638277905307, + 0.011359840748565532, + 0.0026087042689323407, + 0.007620413569467403, + 0.004984694144555497, + 0.04418698489665983, + 0.425, + 0.425, + 0.0037890088983944456, + 0.0037890088983944456, + 0.010889774651399673, + 0.010889774651399673, + 0.05420222500000001, + 0.05420222500000001, + 0.001003337225743702 + ], + "time": 27.566666666666666, + "rotation": [] + }, + { + "weights": [ + 0.005261094469044886, + 0.005261094469044886, + 0.02888475, + 0.014926525, + 0.014926525, + 0.08228519548262864, + 0.001288812294868485, + 0.001288812294868485, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02175637666437728, + 0.0, + 0.02175637666437728, + 0.0009298275856833362, + 0.03099558353424068, + 0.03099558353424068, + 0.00034429272237632917, + 0.00034429272237632917, + 0.0, + 0.008371135422161637, + 0.02661866019879064, + 0.02661866019879064, + 0.0, + 0.0, + 0.0001422322328601562, + 0.008371135422161637, + 0.0011723306562219332, + 0.005182235123855716, + 0.0009212692294801971, + 0.030811937791960533, + 0.425, + 0.425, + 0.002649788430758881, + 0.002649788430758881, + 0.0072243819705077525, + 0.0072243819705077525, + 0.05420222500000001, + 0.05420222500000001, + 0.001549300232103892 + ], + "time": 27.6, + "rotation": [] + }, + { + "weights": [ + 0.005430367748652182, + 0.005430367748652182, + 0.02888475, + 0.014926525, + 0.014926525, + 0.06675319618412423, + 0.0006915537573929329, + 0.0006915537573929329, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.020207575780828678, + 0.019268476707594715, + 0.020207575780828678, + 0.0007267997999276417, + 0.11443703740835182, + 0.11443703740835182, + 0.0006939337567559306, + 0.0006939337567559306, + 0.0020086119536842587, + 0.030501606975282924, + 0.12004719989640364, + 0.12004719989640364, + 0.0, + 0.0, + 0.0005406878635819464, + 0.030501606975282924, + 0.002799933744328361, + 0.029980472368853414, + 0.0, + 0.10990509305681495, + 0.425, + 0.425, + 0.00939144188165664, + 0.00939144188165664, + 0.006905626910073412, + 0.006905626910073412, + 0.05420222500000001, + 0.05420222500000001, + 0.0015058523310082293 + ], + "time": 27.633333333333333, + "rotation": [] + }, + { + "weights": [ + 0.007766826956399845, + 0.007766826956399845, + 0.02888475, + 0.014926525, + 0.014926525, + 0.045407757375921495, + 0.0028871713339218043, + 0.0028871713339218043, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.019309450092948505, + 0.0664194626808166, + 0.019309450092948505, + 0.004546652012504633, + 0.22126454864229464, + 0.22126454864229464, + 0.0010546328389152346, + 0.0010546328389152346, + 0.009321091047355099, + 0.05775352869715006, + 0.28023189953395283, + 0.28023189953395283, + 0.0, + 0.0, + 0.0015686041582375755, + 0.05775352869715006, + 0.004922124339001516, + 0.06665953981024875, + 0.0, + 0.2208373299666812, + 0.425, + 0.425, + 0.018900615308965946, + 0.018900615308965946, + 0.011711065880954257, + 0.011711065880954257, + 0.05420222500000001, + 0.05420222500000001, + 4.381691770894187e-05 + ], + "time": 27.666666666666668, + "rotation": [] + }, + { + "weights": [ + 0.012023723790688168, + 0.012023723790688168, + 0.038840322835104774, + 0.015615505566041127, + 0.015615505566041127, + 0.021671141151870986, + 0.008609621359833643, + 0.008609621359833643, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0452937261889083, + 0.0452937261889083, + 0.05126333, + 0.01819470843335833, + 0.14239720647675644, + 0.01819470843335833, + 0.014580637050260381, + 0.270605321569102, + 0.270605321569102, + 0.0009834224950921319, + 0.0009834224950921319, + 0.02436233523700917, + 0.06909332104027269, + 0.4525327658653257, + 0.4525327658653257, + 0.0, + 0.0, + 0.0030267435298966493, + 0.06909332104027269, + 0.00730154671839305, + 0.0991709189329828, + 0.0, + 0.3042365867750984, + 0.5319707895176748, + 0.5319707895176748, + 0.02586903775589805, + 0.02586903775589805, + 0.019041626453399647, + 0.019041626453399647, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 27.7, + "rotation": [] + }, + { + "weights": [ + 0.016767549089023035, + 0.016767549089023035, + 0.06062524435775617, + 0.018481247500136237, + 0.018481247500136237, + 0.0, + 0.018977026395233604, + 0.018977026395233604, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05424413233995434, + 0.05424413233995434, + 0.05126333, + 0.0181556725, + 0.21944781712123318, + 0.0181556725, + 0.02787201206332869, + 0.19568856486252365, + 0.19568856486252365, + 0.0004629064156740371, + 0.0004629064156740371, + 0.045857543711151375, + 0.04983199409076143, + 0.540218758157321, + 0.540218758157321, + 0.0, + 0.0, + 0.003823272571233763, + 0.04983199409076143, + 0.007716805274997433, + 0.10251349487474981, + 0.0, + 0.28583006220204477, + 0.5113079505307332, + 0.5113079505307332, + 0.02676217249461581, + 0.02676217249461581, + 0.026005122730774523, + 0.026005122730774523, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 27.733333333333334, + "rotation": [] + }, + { + "weights": [ + 0.020994712066437507, + 0.020994712066437507, + 0.09200210443564819, + 0.023245018082556718, + 0.023245018082556718, + 0.0, + 0.03135709937528838, + 0.03135709937528838, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.098831001003938, + 0.098831001003938, + 0.0629867811288152, + 0.0629867811288152, + 0.06236005154039175, + 0.0181556725, + 0.2727751983915055, + 0.0181556725, + 0.04346148275903291, + 0.13040783602212147, + 0.13040783602212147, + 0.0, + 0.0, + 0.07272687453244409, + 0.03464535343061598, + 0.6214141743523731, + 0.6214141743523731, + 0.0, + 0.0, + 0.007105701955567505, + 0.03464535343061598, + 0.009163871194635112, + 0.10273567672286708, + 0.0, + 0.2610696183783666, + 0.4990911194256371, + 0.4990911194256371, + 0.030032124391623893, + 0.030032124391623893, + 0.035697878072304366, + 0.035697878072304366, + 0.05575735934533493, + 0.05575735934533493, + 0.0 + ], + "time": 27.766666666666666, + "rotation": [] + }, + { + "weights": [ + 0.028689202346972042, + 0.028689202346972042, + 0.12192842385598585, + 0.02977127845266034, + 0.02977127845266034, + 0.0, + 0.0420081669198615, + 0.0420081669198615, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.15282099624829623, + 0.15282099624829623, + 0.07614141186433174, + 0.07614141186433174, + 0.07698773528848371, + 0.022565550942506098, + 0.26381027698516835, + 0.022565550942506098, + 0.05438137272638931, + 0.08140145045305996, + 0.08140145045305996, + 0.0, + 0.0, + 0.10337435390268047, + 0.024334383795836127, + 0.6212039445127757, + 0.6212039445127757, + 0.0034173300223691097, + 0.0034173300223691097, + 0.020085183211735302, + 0.024334383795836127, + 0.01265751048922538, + 0.08938103637525008, + 0.0, + 0.21466225087642657, + 0.45017682569367523, + 0.45017682569367523, + 0.03133046252386909, + 0.03133046252386909, + 0.043586251219468436, + 0.043586251219468436, + 0.062122676930547766, + 0.062122676930547766, + 0.0 + ], + "time": 27.8, + "rotation": [] + }, + { + "weights": [ + 0.03612328703914368, + 0.03612328703914368, + 0.14317464487893233, + 0.040816490165889244, + 0.040816490165889244, + 0.01349305765969412, + 0.04624149003731351, + 0.04624149003731351, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.20015292710491578, + 0.20015292710491578, + 0.09814278472747115, + 0.09814278472747115, + 0.079754022189549, + 0.024037782182650895, + 0.21149837630135662, + 0.024037782182650895, + 0.06331398870263777, + 0.05653063489922451, + 0.05653063489922451, + 0.0, + 0.0, + 0.13482660608632216, + 0.01899025253951548, + 0.5138075886028151, + 0.5138075886028151, + 0.010772271081805222, + 0.010772271081805222, + 0.050932723070893936, + 0.01899025253951548, + 0.021612428660903647, + 0.07611210473946158, + 0.012376217331205086, + 0.16642057044165465, + 0.425, + 0.425, + 0.029716118063245485, + 0.029716118063245485, + 0.045249434613755746, + 0.045249434613755746, + 0.06625241302940776, + 0.06625241302940776, + 0.0 + ], + "time": 27.833333333333332, + "rotation": [] + }, + { + "weights": [ + 0.03665363769978283, + 0.03665363769978283, + 0.1577042505145072, + 0.05595191067882943, + 0.05595191067882943, + 0.028221958343471788, + 0.043001734119440804, + 0.043001734119440804, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.223632132581302, + 0.223632132581302, + 0.130174446851015, + 0.130174446851015, + 0.07550641638892033, + 0.021295469041381552, + 0.15407780681337618, + 0.021295469041381552, + 0.06875476826514512, + 0.04519365860947538, + 0.04519365860947538, + 0.0001741530270581793, + 0.0001741530270581793, + 0.16167876890727445, + 0.017641707057399397, + 0.3594000978129248, + 0.3594000978129248, + 0.01786123753658362, + 0.01786123753658362, + 0.10020293252808701, + 0.017641707057399397, + 0.03372758573719432, + 0.06980936718838551, + 0.03647026887961795, + 0.1338152885437011, + 0.425, + 0.425, + 0.028925360696656344, + 0.028925360696656344, + 0.041338998238955205, + 0.041338998238955205, + 0.06755209731126784, + 0.06755209731126784, + 0.0 + ], + "time": 27.866666666666667, + "rotation": [] + }, + { + "weights": [ + 0.03286787574844699, + 0.03286787574844699, + 0.17484046901975347, + 0.07688510460512973, + 0.07688510460512973, + 0.03595682073916706, + 0.03717700687370128, + 0.03717700687370128, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.22392772776739925, + 0.22392772776739925, + 0.15378301026565677, + 0.15378301026565677, + 0.07408392322914936, + 0.02126187982073273, + 0.11866847566195889, + 0.02126187982073273, + 0.07107805247817717, + 0.03690002310488903, + 0.03690002310488903, + 0.006246844560706186, + 0.006246844560706186, + 0.17313145356518872, + 0.019907431570546957, + 0.2386764445475168, + 0.2386764445475168, + 0.021448727191558895, + 0.021448727191558895, + 0.15015417401279713, + 0.019907431570546957, + 0.043024359749896164, + 0.0717908395188195, + 0.05435842967459131, + 0.12508596096720007, + 0.425, + 0.425, + 0.028740468067782243, + 0.028740468067782243, + 0.037920049631169836, + 0.037920049631169836, + 0.06628289857003619, + 0.06628289857003619, + 0.005477421863802838 + ], + "time": 27.9, + "rotation": [] + }, + { + "weights": [ + 0.03049290238746573, + 0.03049290238746573, + 0.1888848130192074, + 0.09941382503935262, + 0.09941382503935262, + 0.04422197075826778, + 0.03406349745179922, + 0.03406349745179922, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.21973096302577416, + 0.21973096302577416, + 0.17080718034080083, + 0.17080718034080083, + 0.07288082561322615, + 0.020977589640058105, + 0.09508982266698554, + 0.020977589640058105, + 0.06896783156054355, + 0.032849039935639895, + 0.032849039935639895, + 0.013639305826675673, + 0.013639305826675673, + 0.1778011513607841, + 0.022866978815623665, + 0.1699229527797016, + 0.1699229527797016, + 0.022742448773767254, + 0.022742448773767254, + 0.18129257666213153, + 0.022866978815623665, + 0.04723427412765363, + 0.07217222218002588, + 0.05995690833244996, + 0.12420218842370159, + 0.425, + 0.425, + 0.028140904179641157, + 0.028140904179641157, + 0.03744534610637595, + 0.03744534610637595, + 0.06316894916474065, + 0.06316894916474065, + 0.010479534390781604 + ], + "time": 27.933333333333334, + "rotation": [] + }, + { + "weights": [ + 0.028366506605276003, + 0.028366506605276003, + 0.20116177712167993, + 0.1247200633798326, + 0.1247200633798326, + 0.05135789375220023, + 0.03239408231207298, + 0.03239408231207298, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.20617055552346353, + 0.20617055552346353, + 0.18071415988462297, + 0.18071415988462297, + 0.07180184828383575, + 0.0202364366425303, + 0.08509450622967302, + 0.0202364366425303, + 0.06226132724966315, + 0.03307560671653062, + 0.03307560671653062, + 0.022858973899523592, + 0.022858973899523592, + 0.1734554593052181, + 0.02754333793584786, + 0.14733551059450417, + 0.14733551059450417, + 0.02135893566800013, + 0.02135893566800013, + 0.1987741300037927, + 0.02754333793584786, + 0.04694783974971085, + 0.0727796213967459, + 0.05463874095252571, + 0.13569257642541602, + 0.425, + 0.425, + 0.02728349592004502, + 0.02728349592004502, + 0.039110293931194695, + 0.039110293931194695, + 0.058047392921014455, + 0.058047392921014455, + 0.01443879367517573 + ], + "time": 27.966666666666665, + "rotation": [] + }, + { + "weights": [ + 0.040487124412035405, + 0.040487124412035405, + 0.19415006726878814, + 0.11325731405760245, + 0.11325731405760245, + 0.04608924921525978, + 0.04587822989186861, + 0.04587822989186861, + 0.7475245241174275, + 0.7475245241174275, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.22405474714884116, + 0.22405474714884116, + 0.1733648279243381, + 0.1733648279243381, + 0.0775917149684866, + 0.02652646521997154, + 0.08602145028763063, + 0.02652646521997154, + 0.0548832011638449, + 0.04178738680522452, + 0.04178738680522452, + 0.004237187053089592, + 0.004237187053089592, + 0.16182388423859645, + 0.026727590441298275, + 0.19941008777034513, + 0.19941008777034513, + 0.020079848293062953, + 0.020079848293062953, + 0.17287864385362767, + 0.026727590441298275, + 0.04333993353912612, + 0.06862324758857277, + 0.04852338853133766, + 0.14815753974476623, + 0.4718538654418216, + 0.4718538654418216, + 0.01001949744216438, + 0.01001949744216438, + 0.050864503493114346, + 0.050864503493114346, + 0.06678374261638445, + 0.06678374261638445, + 0.01129580204026633 + ], + "time": 28.0, + "rotation": [] + }, + { + "weights": [ + 0.061110601166174464, + 0.061110601166174464, + 0.17705081374872275, + 0.09185445064767475, + 0.09185445064767475, + 0.038369949020090506, + 0.0659834533220245, + 0.0659834533220245, + 0.8160812677676583, + 0.8160812677676583, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.24669254606678348, + 0.24669254606678348, + 0.15757046231911281, + 0.15757046231911281, + 0.0854596348035902, + 0.024677516279241238, + 0.08798416875657569, + 0.024677516279241238, + 0.0463407370306196, + 0.0585898336555276, + 0.0585898336555276, + 0.003519127220048434, + 0.003519127220048434, + 0.14564804165136225, + 0.02477249206442914, + 0.2691341042518614, + 0.2691341042518614, + 0.018547956388266288, + 0.018547956388266288, + 0.13721347517733043, + 0.02477249206442914, + 0.03870179450937675, + 0.062357089420159585, + 0.04017578888507106, + 0.1557683748858314, + 0.546222366605486, + 0.546222366605486, + 0.01542976510524749, + 0.01542976510524749, + 0.06740326611768627, + 0.06740326611768627, + 0.07845379998234968, + 0.07845379998234968, + 0.007748463962759282 + ], + "time": 28.033333333333335, + "rotation": [] + }, + { + "weights": [ + 0.08470084064507052, + 0.08470084064507052, + 0.15677016292299523, + 0.07210737448185675, + 0.07210737448185675, + 0.030543453512447187, + 0.0876483436673879, + 0.0876483436673879, + 0.8157245812474824, + 0.8157245812474824, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.26137448975018074, + 0.26137448975018074, + 0.13868023008108127, + 0.13868023008108127, + 0.09311117519225384, + 0.02332413839553424, + 0.0908542618581226, + 0.02332413839553424, + 0.03860395369785167, + 0.0802180955984762, + 0.0802180955984762, + 0.002838260895073678, + 0.002838260895073678, + 0.12723230293818866, + 0.022167027302618506, + 0.33944774802241984, + 0.33944774802241984, + 0.01671039235911197, + 0.01671039235911197, + 0.10447987626705836, + 0.022167027302618506, + 0.032825105477656595, + 0.05573529207280698, + 0.029451622175318784, + 0.15768547398703425, + 0.6318720008645735, + 0.6318720008645735, + 0.020219012226377203, + 0.020219012226377203, + 0.08513421812759972, + 0.08513421812759972, + 0.0905191919948761, + 0.0905191919948761, + 0.005596969103706729 + ], + "time": 28.066666666666666, + "rotation": [] + }, + { + "weights": [ + 0.105505231794502, + 0.105505231794502, + 0.1375608405896594, + 0.05323019543928753, + 0.05323019543928753, + 0.021399635644186087, + 0.1046988271531604, + 0.1046988271531604, + 0.5979156811378654, + 0.5979156811378654, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.2645074051050911, + 0.2645074051050911, + 0.11666752916006803, + 0.11666752916006803, + 0.10453740592513756, + 0.02232037995539994, + 0.10269921194939378, + 0.02232037995539994, + 0.03472170443052333, + 0.09775056477103908, + 0.09775056477103908, + 0.001947069418283976, + 0.001947069418283976, + 0.11262332924774701, + 0.018266599350387117, + 0.4223239038671764, + 0.4223239038671764, + 0.015128672176173738, + 0.015128672176173738, + 0.07187293794538284, + 0.018266599350387117, + 0.025187601929619167, + 0.05146539331901636, + 0.018400987805355117, + 0.16107118370987106, + 0.7026841643310724, + 0.7026841643310724, + 0.025258551058315083, + 0.025258551058315083, + 0.10271453745663159, + 0.10271453745663159, + 0.10027004713078083, + 0.10027004713078083, + 0.0034448975342370185 + ], + "time": 28.1, + "rotation": [] + }, + { + "weights": [ + 0.1194414012549685, + 0.1194414012549685, + 0.12092114048142, + 0.03337328193164396, + 0.03337328193164396, + 0.012414867911918618, + 0.10990575374997386, + 0.10990575374997386, + 0.1641655959668509, + 0.1641655959668509, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.24918156760687715, + 0.24918156760687715, + 0.0909293070658534, + 0.0909293070658534, + 0.12309939556786795, + 0.022654205722725224, + 0.12427938295708213, + 0.022654205722725224, + 0.03491307408656592, + 0.10065342266442007, + 0.10065342266442007, + 0.0010286915638648777, + 0.0010286915638648777, + 0.1095742605636719, + 0.014245399929215596, + 0.5237487920530796, + 0.5237487920530796, + 0.013514105400742101, + 0.013514105400742101, + 0.03683093919621484, + 0.014245399929215596, + 0.017205475566743973, + 0.05067858318893273, + 0.007959545846699024, + 0.17868700928834008, + 0.7275549880379718, + 0.7275549880379718, + 0.03131114173997825, + 0.03131114173997825, + 0.12108306949945527, + 0.12108306949945527, + 0.10450613398331324, + 0.10450613398331324, + 9.272027152533324e-05 + ], + "time": 28.133333333333333, + "rotation": [] + }, + { + "weights": [ + 0.11736328145603131, + 0.11736328145603131, + 0.10944630305377798, + 0.02306267720759284, + 0.02306267720759284, + 0.008939910427648185, + 0.09918562895029169, + 0.09918562895029169, + 0.06235632690777731, + 0.06235632690777731, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.21413928196746462, + 0.21413928196746462, + 0.06642226535978969, + 0.06642226535978969, + 0.1360525512147922, + 0.02896364151345327, + 0.13347454294379868, + 0.02896364151345327, + 0.03442900572200208, + 0.09212935157880485, + 0.09212935157880485, + 0.0004124500563482237, + 0.0004124500563482237, + 0.11883002938056471, + 0.013800855936596579, + 0.5937311686544999, + 0.5937311686544999, + 0.0106404287618946, + 0.0106404287618946, + 0.011403775818227792, + 0.013800855936596579, + 0.013348180137726717, + 0.05037976874380693, + 0.000767840162223694, + 0.20586342669263163, + 0.6798143306800293, + 0.6798143306800293, + 0.034192718813857235, + 0.034192718813857235, + 0.13459688931551506, + 0.13459688931551506, + 0.09737754521501524, + 0.09737754521501524, + 0.0 + ], + "time": 28.166666666666668, + "rotation": [] + }, + { + "weights": [ + 0.10566429441870773, + 0.10566429441870773, + 0.10202861261306972, + 0.018745689225382996, + 0.018745689225382996, + 0.012133093570568115, + 0.08032381836553004, + 0.08032381836553004, + 0.006107844894405241, + 0.006107844894405241, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.17551933808594322, + 0.17551933808594322, + 0.04614988257230227, + 0.04614988257230227, + 0.13584507438297166, + 0.03594911808425012, + 0.11752641344800281, + 0.03594911808425012, + 0.02773914471420705, + 0.08222888747648313, + 0.08222888747648313, + 0.000168319188312114, + 0.000168319188312114, + 0.13112871671817733, + 0.01661034768029134, + 0.6082156797087919, + 0.6082156797087919, + 0.006989065071529875, + 0.006989065071529875, + 0.0, + 0.01661034768029134, + 0.012916213232947848, + 0.043572830309977315, + 0.0, + 0.23973425165731066, + 0.5834718544142584, + 0.5834718544142584, + 0.03177476165902856, + 0.03177476165902856, + 0.14672794514544757, + 0.14672794514544757, + 0.08336612345978806, + 0.08336612345978806, + 0.0 + ], + "time": 28.2, + "rotation": [] + }, + { + "weights": [ + 0.09921625277825757, + 0.09921625277825757, + 0.09504886737891599, + 0.01763503519607203, + 0.01763503519607203, + 0.02103954766477856, + 0.0626739350280591, + 0.0626739350280591, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.15470432873283102, + 0.15470432873283102, + 0.0448066525, + 0.0448066525, + 0.12333410190684448, + 0.038647823088935426, + 0.08405196428298946, + 0.038647823088935426, + 0.016951514088681757, + 0.07743446475693153, + 0.07743446475693153, + 0.00011480420395465818, + 0.00011480420395465818, + 0.13415962925979064, + 0.02230522824185234, + 0.5685320675373073, + 0.5685320675373073, + 0.005619450605341362, + 0.005619450605341362, + 0.0022257675217198427, + 0.02230522824185234, + 0.01220770393099103, + 0.03389729389122552, + 0.0003485758921929743, + 0.26873898591314027, + 0.4780691261802398, + 0.4780691261802398, + 0.02657876755510056, + 0.02657876755510056, + 0.15340462603739322, + 0.15340462603739322, + 0.07141726240515704, + 0.07141726240515704, + 0.0 + ], + "time": 28.233333333333334, + "rotation": [] + }, + { + "weights": [ + 0.10802902568663864, + 0.10802902568663864, + 0.08745286124093186, + 0.0166497194878946, + 0.0166497194878946, + 0.02585448047944476, + 0.05441831036337781, + 0.05441831036337781, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.16021589530365798, + 0.16021589530365798, + 0.0448066525, + 0.0448066525, + 0.10228371747902455, + 0.03411084810005765, + 0.05478755176067349, + 0.03411084810005765, + 0.008886471816471637, + 0.07291001326271462, + 0.07291001326271462, + 0.00028443413986159173, + 0.00028443413986159173, + 0.12699886006968353, + 0.026081321175609302, + 0.49266196170023485, + 0.49266196170023485, + 0.00732629631779023, + 0.00732629631779023, + 0.011296844542292604, + 0.026081321175609302, + 0.009540995316846022, + 0.02817563228309152, + 0.007908477421317775, + 0.2583858021668024, + 0.425, + 0.425, + 0.023509438974516718, + 0.023509438974516718, + 0.13712937592395708, + 0.13712937592395708, + 0.06982563303972242, + 0.06982563303972242, + 0.0 + ], + "time": 28.266666666666666, + "rotation": [] + }, + { + "weights": [ + 0.11715599490063525, + 0.11715599490063525, + 0.08592683864491321, + 0.01577483500808239, + 0.01577483500808239, + 0.027144165124211975, + 0.05266946671264509, + 0.05266946671264509, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.18309487572738092, + 0.18309487572738092, + 0.0448066525, + 0.0448066525, + 0.0792297740067754, + 0.026085615796702235, + 0.036440349689551746, + 0.026085615796702235, + 0.009675871634057583, + 0.07313734101397645, + 0.07313734101397645, + 0.0012499916190946729, + 0.0012499916190946729, + 0.11883375942707054, + 0.023318555658417076, + 0.366449010904346, + 0.366449010904346, + 0.011858412250876419, + 0.011858412250876419, + 0.028524783938857046, + 0.023318555658417076, + 0.013171342441013867, + 0.0415223236594881, + 0.02353995511574403, + 0.18521526860339294, + 0.425, + 0.425, + 0.0224582084587642, + 0.0224582084587642, + 0.0977522161922284, + 0.0977522161922284, + 0.0704878955645997, + 0.0704878955645997, + 0.0038117452391556303 + ], + "time": 28.3, + "rotation": [] + }, + { + "weights": [ + 0.11588308502520828, + 0.11588308502520828, + 0.0912090931619916, + 0.015825226477765353, + 0.015825226477765353, + 0.0328643565731389, + 0.055317542222993676, + 0.055317542222993676, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.21152427558388018, + 0.21152427558388018, + 0.0448066525, + 0.0448066525, + 0.060859158209391966, + 0.020372675271794795, + 0.02502410714115414, + 0.020372675271794795, + 0.015838436782360066, + 0.08853455909660879, + 0.08853455909660879, + 0.0037841443597738207, + 0.0037841443597738207, + 0.11613222956657404, + 0.020168685487338463, + 0.2221542538276739, + 0.2221542538276739, + 0.019604599928217264, + 0.019604599928217264, + 0.04769860875925845, + 0.020168685487338463, + 0.03265673337238173, + 0.07599051940654, + 0.052805755287408794, + 0.09307109984968384, + 0.425, + 0.425, + 0.022545454140220356, + 0.022545454140220356, + 0.05686405798686399, + 0.05686405798686399, + 0.0695102333589036, + 0.0695102333589036, + 0.012189462062503605 + ], + "time": 28.333333333333332, + "rotation": [] + }, + { + "weights": [ + 0.10476904500808029, + 0.10476904500808029, + 0.09806843783174236, + 0.01595893363922596, + 0.01595893363922596, + 0.04502474676285469, + 0.058485272952488454, + 0.058485272952488454, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.24045908812965652, + 0.24045908812965652, + 0.0448066525, + 0.0448066525, + 0.058200452583176715, + 0.02016654000520127, + 0.017161366045474993, + 0.02016654000520127, + 0.022932503319212354, + 0.1187124451356274, + 0.1187124451356274, + 0.0077077775036117815, + 0.0077077775036117815, + 0.12030021761144905, + 0.020672949164041436, + 0.11380848437547675, + 0.11380848437547675, + 0.03006945255079438, + 0.03006945255079438, + 0.061249366402626, + 0.020672949164041436, + 0.07039626155580789, + 0.12015824126345764, + 0.08595527841576503, + 0.03491991210196696, + 0.425, + 0.425, + 0.023687414228916154, + 0.023687414228916154, + 0.033950384041028334, + 0.033950384041028334, + 0.06716439261955123, + 0.06716439261955123, + 0.019392973397459292 + ], + "time": 28.366666666666667, + "rotation": [] + }, + { + "weights": [ + 0.09508476715002735, + 0.09508476715002735, + 0.1037853375077247, + 0.015701947255345072, + 0.015701947255345072, + 0.053890330131564794, + 0.060850835485117744, + 0.060850835485117744, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.2660916483827998, + 0.2660916483827998, + 0.05014633350074288, + 0.05014633350074288, + 0.0631589408431734, + 0.020276043450017656, + 0.016654723329203452, + 0.020276043450017656, + 0.031033623165317922, + 0.13579231798648828, + 0.13579231798648828, + 0.009799931459128853, + 0.009799931459128853, + 0.13081485841955448, + 0.02251652861014007, + 0.06818539255431713, + 0.06818539255431713, + 0.03349993324705531, + 0.03349993324705531, + 0.07015439718961712, + 0.02251652861014007, + 0.09979321871485024, + 0.14755755471331725, + 0.1019975218389715, + 0.01685498362140994, + 0.425, + 0.425, + 0.02555453664490153, + 0.02555453664490153, + 0.022802698186465655, + 0.022802698186465655, + 0.06540282130164007, + 0.06540282130164007, + 0.02133705850158418 + ], + "time": 28.4, + "rotation": [] + }, + { + "weights": [ + 0.09601826646498265, + 0.09601826646498265, + 0.10931873534406929, + 0.014926525, + 0.014926525, + 0.04831869538341248, + 0.06255067757197785, + 0.06255067757197785, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.2895136000854627, + 0.2895136000854627, + 0.06012086639446869, + 0.06012086639446869, + 0.07069237849542069, + 0.020516141576250282, + 0.03484480342694688, + 0.020516141576250282, + 0.043895245556320434, + 0.1174316003918647, + 0.1174316003918647, + 0.007902401052415367, + 0.007902401052415367, + 0.14466027745178758, + 0.019529870405260993, + 0.09243100817714411, + 0.09243100817714411, + 0.027433927197541494, + 0.027433927197541494, + 0.07559909735407143, + 0.019529870405260993, + 0.09415633635861528, + 0.14459925421646655, + 0.08595038098948338, + 0.02349023632705209, + 0.425, + 0.425, + 0.028657910823822002, + 0.028657910823822002, + 0.020906425294067162, + 0.020906425294067162, + 0.06652574215539113, + 0.06652574215539113, + 0.01761393890316996 + ], + "time": 28.433333333333334, + "rotation": [] + }, + { + "weights": [ + 0.10951542545642165, + 0.10951542545642165, + 0.11348180643149777, + 0.014926525, + 0.014926525, + 0.03441322701317921, + 0.06218654912497312, + 0.06218654912497312, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.3080769887992312, + 0.3080769887992312, + 0.0683281592492546, + 0.0683281592492546, + 0.0788627458470208, + 0.019798986180376326, + 0.07560476102999275, + 0.019798986180376326, + 0.06571342966386247, + 0.07626776495682336, + 0.07626776495682336, + 0.003702244496505173, + 0.003702244496505173, + 0.16022721571581694, + 0.017973959698740917, + 0.19082585179379996, + 0.19082585179379996, + 0.017945653226758743, + 0.017945653226758743, + 0.0808210975357464, + 0.017973959698740917, + 0.06492003692047933, + 0.12478263463292796, + 0.05513906835445333, + 0.05583267877144469, + 0.425, + 0.425, + 0.032895255450691475, + 0.032895255450691475, + 0.023912319966724924, + 0.023912319966724924, + 0.07095177429062975, + 0.07095177429062975, + 0.01087737655533211 + ], + "time": 28.466666666666665, + "rotation": [] + }, + { + "weights": [ + 0.12872436099818768, + 0.12872436099818768, + 0.11637591804776866, + 0.014926525, + 0.014926525, + 0.020670488689626954, + 0.06185348784284929, + 0.06185348784284929, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.3184720665216444, + 0.3184720665216444, + 0.07113933275852882, + 0.07113933275852882, + 0.0901993008596556, + 0.020387504249811162, + 0.12388633906841272, + 0.020387504249811162, + 0.08806411890046933, + 0.041657512821257084, + 0.041657512821257084, + 0.0011736360578132516, + 0.0011736360578132516, + 0.18162090480327595, + 0.01815178526033247, + 0.3185715174036365, + 0.3185715174036365, + 0.013087938752557541, + 0.013087938752557541, + 0.08730077402932299, + 0.01815178526033247, + 0.042030312972409355, + 0.10775084410394935, + 0.031009598182780377, + 0.11156148447522089, + 0.425, + 0.425, + 0.03782531772341045, + 0.03782531772341045, + 0.03268719243683983, + 0.03268719243683983, + 0.08167915216514038, + 0.08167915216514038, + 0.005296357614653447 + ], + "time": 28.5, + "rotation": [] + }, + { + "weights": [ + 0.14814416457499768, + 0.14814416457499768, + 0.11980605040277746, + 0.01567436600425175, + 0.01567436600425175, + 0.01743888918842587, + 0.06341511495411392, + 0.06341511495411392, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.31520645235265987, + 0.31520645235265987, + 0.0646748130874974, + 0.0646748130874974, + 0.09531878275530674, + 0.02362652671124253, + 0.14404410345213745, + 0.02362652671124253, + 0.09434603282383505, + 0.028120238733078732, + 0.028120238733078732, + 0.00037041887241814767, + 0.00037041887241814767, + 0.20670223789555675, + 0.019096105199839376, + 0.3878509249005997, + 0.3878509249005997, + 0.012087921239435664, + 0.012087921239435664, + 0.10247439358915594, + 0.019096105199839376, + 0.036929188881601585, + 0.09718594912971763, + 0.027971052218760742, + 0.16479349253433082, + 0.425, + 0.425, + 0.040072976733957, + 0.040072976733957, + 0.044792025882218534, + 0.044792025882218534, + 0.09355481192469592, + 0.09355481192469592, + 0.004745510486619808 + ], + "time": 28.533333333333335, + "rotation": [] + }, + { + "weights": [ + 0.16366514542273103, + 0.16366514542273103, + 0.12315791440861558, + 0.01644280073953288, + 0.01644280073953288, + 0.021228265123707894, + 0.06822366554822237, + 0.06822366554822237, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.3029977304594855, + 0.3029977304594855, + 0.052161840562309505, + 0.052161840562309505, + 0.08407742402383254, + 0.022723537550440844, + 0.12072811050074435, + 0.022723537550440844, + 0.08050097737993508, + 0.027400447295180368, + 0.027400447295180368, + 0.0002102877439132757, + 0.0002102877439132757, + 0.21972083151340474, + 0.020957083241747942, + 0.35549381077289566, + 0.35549381077289566, + 0.013199006952345365, + 0.013199006952345365, + 0.12841298537594925, + 0.020957083241747942, + 0.0380077072552272, + 0.08443290931837895, + 0.03955241750393593, + 0.1915226672376904, + 0.425, + 0.425, + 0.038506010941096694, + 0.038506010941096694, + 0.05513547573770792, + 0.05513547573770792, + 0.10413273551634375, + 0.10413273551634375, + 0.009043062105774873 + ], + "time": 28.566666666666666, + "rotation": [] + }, + { + "weights": [ + 0.17621274100882656, + 0.17621274100882656, + 0.12126534857920232, + 0.01684907515189239, + 0.01684907515189239, + 0.0252638137766293, + 0.07297896460763041, + 0.07297896460763041, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.29106505300317476, + 0.29106505300317476, + 0.0448066525, + 0.0448066525, + 0.06365124945129663, + 0.0181556725, + 0.07295974203518456, + 0.0181556725, + 0.05549004131129806, + 0.03149915648890391, + 0.03149915648890391, + 8.7496486625501e-05, + 8.7496486625501e-05, + 0.20870009532996575, + 0.026566034369170648, + 0.26527362614870054, + 0.26527362614870054, + 0.01566712749855858, + 0.01566712749855858, + 0.1474358488406453, + 0.026566034369170648, + 0.0392788482563836, + 0.06769642276423313, + 0.05717162122683862, + 0.19080369600227887, + 0.425, + 0.425, + 0.03366542971559931, + 0.03366542971559931, + 0.06136213413306641, + 0.06136213413306641, + 0.10769155163850097, + 0.10769155163850097, + 0.015014801041356149 + ], + "time": 28.6, + "rotation": [] + }, + { + "weights": [ + 0.19107880336897703, + 0.19107880336897703, + 0.10937169215508863, + 0.016243690039981433, + 0.016243690039981433, + 0.027545892021485725, + 0.07925540464265, + 0.07925540464265, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.29103765189647657, + 0.29103765189647657, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.0181556725, + 0.032827577080045404, + 0.0181556725, + 0.03310320143188747, + 0.03979499991983172, + 0.03979499991983172, + 0.00021173991529004903, + 0.00021173991529004903, + 0.17979880784239077, + 0.03430146823770232, + 0.18426942527294146, + 0.18426942527294146, + 0.020203478368265276, + 0.020203478368265276, + 0.13860054910182945, + 0.03430146823770232, + 0.03869729808398653, + 0.05031149813107079, + 0.07676541560462538, + 0.18822388734136297, + 0.425, + 0.425, + 0.028742890592132274, + 0.028742890592132274, + 0.06733093820512291, + 0.06733093820512291, + 0.10764812475868628, + 0.10764812475868628, + 0.01712611099439007 + ], + "time": 28.633333333333333, + "rotation": [] + }, + { + "weights": [ + 0.2129958833966935, + 0.2129958833966935, + 0.09330685479300357, + 0.014926525, + 0.014926525, + 0.02870531348245483, + 0.08930101256285389, + 0.08930101256285389, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.3112741785390034, + 0.3112741785390034, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.0181556725, + 0.012291603428976864, + 0.0181556725, + 0.017748993581959166, + 0.05319159504558356, + 0.05319159504558356, + 0.00032917098341775776, + 0.00032917098341775776, + 0.1524415011916841, + 0.03869317772665192, + 0.1479125291109084, + 0.1479125291109084, + 0.02623595297336577, + 0.02623595297336577, + 0.10870997394834239, + 0.03869317772665192, + 0.04064454180853705, + 0.036896565343652425, + 0.09715569232191353, + 0.19802226381642465, + 0.425, + 0.425, + 0.02545840640153202, + 0.02545840640153202, + 0.074058789600219, + 0.074058789600219, + 0.11112388638513424, + 0.11112388638513424, + 0.01342284591602427 + ], + "time": 28.666666666666668, + "rotation": [] + }, + { + "weights": [ + 0.23476386559861034, + 0.23476386559861034, + 0.08280154360192157, + 0.014926525, + 0.014926525, + 0.028102246565478172, + 0.09981737317783486, + 0.09981737317783486, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.34594249640192287, + 0.34594249640192287, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.0181556725, + 0.01394424727984836, + 0.0181556725, + 0.014614764654210624, + 0.06421995003308564, + 0.06421995003308564, + 0.000586160387777324, + 0.000586160387777324, + 0.1388118054185594, + 0.03647190112886682, + 0.16427723637648978, + 0.16427723637648978, + 0.029913327816341588, + 0.029913327816341588, + 0.08025986339364728, + 0.03647190112886682, + 0.04417547839028492, + 0.0350542570863451, + 0.1038472467235156, + 0.21374231321471066, + 0.425, + 0.425, + 0.02496766594903808, + 0.02496766594903808, + 0.07925832101276939, + 0.07925832101276939, + 0.1189349863146032, + 0.1189349863146032, + 0.006675659146692068 + ], + "time": 28.7, + "rotation": [] + }, + { + "weights": [ + 0.2483532960925782, + 0.2483532960925782, + 0.08140455271516522, + 0.014926525, + 0.014926525, + 0.02342696796570504, + 0.10422054390822133, + 0.10422054390822133, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.3824637085199354, + 0.3824637085199354, + 0.04750317116933206, + 0.04750317116933206, + 0.05204187248434336, + 0.0181556725, + 0.03051372596195764, + 0.0181556725, + 0.019276417632188105, + 0.06309618705085343, + 0.06309618705085343, + 0.0005538118717127611, + 0.0005538118717127611, + 0.13806440106460016, + 0.030477841078702876, + 0.2175698914698191, + 0.2175698914698191, + 0.02757840523762361, + 0.02757840523762361, + 0.06597831164087564, + 0.030477841078702876, + 0.04367413903985702, + 0.044119686526911575, + 0.08469647275550021, + 0.2198702824967247, + 0.425, + 0.425, + 0.02624104233724729, + 0.02624104233724729, + 0.07900519605193815, + 0.07900519605193815, + 0.1224020026624202, + 0.1224020026624202, + 0.0012415643249239225 + ], + "time": 28.733333333333334, + "rotation": [] + }, + { + "weights": [ + 0.25627686530351623, + 0.25627686530351623, + 0.08269822959389, + 0.01537063105885233, + 0.01537063105885233, + 0.017800109620605187, + 0.10239625679595124, + 0.10239625679595124, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.41336596012115456, + 0.41336596012115456, + 0.07680697787020883, + 0.07680697787020883, + 0.06040889109883986, + 0.02004176543227263, + 0.05488856443337029, + 0.02004176543227263, + 0.02787281109818389, + 0.052632239833474134, + 0.052632239833474134, + 0.00024387371859380162, + 0.00024387371859380162, + 0.14066853352955402, + 0.024597765186003262, + 0.2888777881860731, + 0.2888777881860731, + 0.022257307358086096, + 0.022257307358086096, + 0.06005227948938094, + 0.024597765186003262, + 0.03785290803228104, + 0.05594407298735207, + 0.054931336268782584, + 0.21359171186174652, + 0.425, + 0.425, + 0.027897967334304517, + 0.027897967334304517, + 0.0742868843887533, + 0.0742868843887533, + 0.11914655949388225, + 0.11914655949388225, + 0.0 + ], + "time": 28.766666666666666, + "rotation": [] + }, + { + "weights": [ + 0.2669547447136469, + 0.2669547447136469, + 0.081457521872861, + 0.01611014716382299, + 0.01611014716382299, + 0.01288230387227875, + 0.10047897068517543, + 0.10047897068517543, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.4428199027265819, + 0.4428199027265819, + 0.10589459586356362, + 0.10589459586356362, + 0.06614826257739743, + 0.023260568029114165, + 0.07717968293598716, + 0.023260568029114165, + 0.03647743777504987, + 0.043079077133110565, + 0.043079077133110565, + 0.00012531386422259458, + 0.00012531386422259458, + 0.14109731103692727, + 0.01973880263311521, + 0.3554453592215263, + 0.3554453592215263, + 0.01832078280193464, + 0.01832078280193464, + 0.05812362389905109, + 0.01973880263311521, + 0.03118676734822135, + 0.06391740462609696, + 0.035252404638699095, + 0.20693659526961178, + 0.425, + 0.425, + 0.029536830527441826, + 0.029536830527441826, + 0.06971426957419936, + 0.06971426957419936, + 0.11511069302047996, + 0.11511069302047996, + 0.0 + ], + "time": 28.8, + "rotation": [] + }, + { + "weights": [ + 0.2841282112257819, + 0.2841282112257819, + 0.07616788340466359, + 0.015875872171901975, + 0.015875872171901975, + 0.009450492901461459, + 0.10439086269055087, + 0.10439086269055087, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.466228709050587, + 0.466228709050587, + 0.1266119811151708, + 0.1266119811151708, + 0.07156497112342286, + 0.024301116700683308, + 0.09824631588799608, + 0.024301116700683308, + 0.04312981170203002, + 0.04247390824769222, + 0.04247390824769222, + 4.6520962246826654e-05, + 4.6520962246826654e-05, + 0.13655625198568608, + 0.016451910151434785, + 0.40553702414035775, + 0.40553702414035775, + 0.017588621005415906, + 0.017588621005415906, + 0.053815784837518386, + 0.016451910151434785, + 0.02838143280574252, + 0.06864636114665437, + 0.02939929302249634, + 0.20504667929240622, + 0.425, + 0.425, + 0.030953472597258412, + 0.030953472597258412, + 0.06856093002217152, + 0.06856093002217152, + 0.11418949014374181, + 0.11418949014374181, + 0.0 + ], + "time": 28.833333333333332, + "rotation": [] + }, + { + "weights": [ + 0.30792926933084197, + 0.30792926933084197, + 0.06609868982008521, + 0.015108523997364042, + 0.015108523997364042, + 0.007954456337860648, + 0.11165446096232953, + 0.11165446096232953, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.47685071911130605, + 0.47685071911130605, + 0.13799366110137523, + 0.13799366110137523, + 0.07924418662275581, + 0.024014063498803535, + 0.12176000373704086, + 0.024014063498803535, + 0.046964945005519024, + 0.047755436492817716, + 0.047755436492817716, + 8.589421531983777e-05, + 8.589421531983777e-05, + 0.13104665236813673, + 0.015103681931006047, + 0.441028582198279, + 0.441028582198279, + 0.018263487278350754, + 0.018263487278350754, + 0.047623342914240675, + 0.015103681931006047, + 0.02891156109316007, + 0.07084191931145528, + 0.0296490362712315, + 0.20291522741317738, + 0.436177656480244, + 0.436177656480244, + 0.032400996599878565, + 0.032400996599878565, + 0.07090495824813839, + 0.07090495824813839, + 0.11708221009799405, + 0.11708221009799405, + 0.0 + ], + "time": 28.866666666666667, + "rotation": [] + }, + { + "weights": [ + 0.3295456566980905, + 0.3295456566980905, + 0.05545525891440252, + 0.014926525, + 0.014926525, + 0.006772770732641216, + 0.1155070499650069, + 0.1155070499650069, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.47178643473557036, + 0.47178643473557036, + 0.14332435641969943, + 0.14332435641969943, + 0.09073736369609828, + 0.023662405354636044, + 0.14870083502360745, + 0.023662405354636044, + 0.049186792331082446, + 0.05135141632386613, + 0.05135141632386613, + 0.0002680655031664562, + 0.0002680655031664562, + 0.13050912448338092, + 0.015939527563750736, + 0.4734201848506925, + 0.4734201848506925, + 0.01717578691563435, + 0.01717578691563435, + 0.044209484330245394, + 0.015939527563750736, + 0.026018342162881562, + 0.07050793277365816, + 0.02672804551465169, + 0.1985441893339156, + 0.4672088844435553, + 0.4672088844435553, + 0.03378763113703045, + 0.03378763113703045, + 0.07245067900844979, + 0.07245067900844979, + 0.12110471470015383, + 0.12110471470015383, + 0.0001266922003456524 + ], + "time": 28.9, + "rotation": [] + }, + { + "weights": [ + 0.3420876507248195, + 0.3420876507248195, + 0.050165996168340915, + 0.014926525, + 0.014926525, + 0.005263780802488321, + 0.11557287392871712, + 0.11557287392871712, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.46686911497797245, + 0.46686911497797245, + 0.15039245294673093, + 0.15039245294673093, + 0.09908928275108332, + 0.02350566195590154, + 0.16534096206937515, + 0.02350566195590154, + 0.05797134307878354, + 0.05068876008902272, + 0.05068876008902272, + 0.00030620955329920533, + 0.00030620955329920533, + 0.13669419501508975, + 0.016159908100962624, + 0.5006024628877637, + 0.5006024628877637, + 0.015270982390003532, + 0.015270982390003532, + 0.047025161768708856, + 0.016159908100962624, + 0.02406958479966434, + 0.07471807875803535, + 0.020275005857859317, + 0.19566284418106064, + 0.4846254280635285, + 0.4846254280635285, + 0.03481871651751652, + 0.03481871651751652, + 0.07397065322313985, + 0.07397065322313985, + 0.12306413001247807, + 0.12306413001247807, + 0.0012651941339884482 + ], + "time": 28.933333333333334, + "rotation": [] + }, + { + "weights": [ + 0.3473983219691682, + 0.3473983219691682, + 0.04861745493752612, + 0.014926525, + 0.014926525, + 0.003561191260814658, + 0.11183913861002229, + 0.11183913861002229, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.4580895291907441, + 0.4580895291907441, + 0.15709334548030565, + 0.15709334548030565, + 0.1062077730894088, + 0.023478649663073656, + 0.17505061694553914, + 0.023478649663073656, + 0.07108648632253914, + 0.04642288440040174, + 0.04642288440040174, + 0.0003240677927221569, + 0.0003240677927221569, + 0.14920346311160482, + 0.01650406513363121, + 0.523035696148872, + 0.523035696148872, + 0.012295377094830764, + 0.012295377094830764, + 0.05525839371340608, + 0.01650406513363121, + 0.02182662582823206, + 0.08141438556568958, + 0.010551651992968113, + 0.1934002548456191, + 0.4913557933909547, + 0.4913557933909547, + 0.035593656258923634, + 0.035593656258923634, + 0.07524132781795086, + 0.07524132781795086, + 0.1238637890134538, + 0.1238637890134538, + 0.0023119368457368444 + ], + "time": 28.966666666666665, + "rotation": [] + }, + { + "weights": [ + 0.2997476126092678, + 0.2997476126092678, + 0.044954311942973044, + 0.020734957739081607, + 0.020734957739081607, + 0.002577479783268193, + 0.0945211264911125, + 0.0945211264911125, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.38995041593402346, + 0.38995041593402346, + 0.14393879381065444, + 0.14393879381065444, + 0.09203684772320436, + 0.029820753892948304, + 0.19894520964590046, + 0.029820753892948304, + 0.06333589402546932, + 0.09958549695862381, + 0.09958549695862381, + 0.0, + 0.0, + 0.12978030594889384, + 0.01539725182267524, + 0.45841967613214485, + 0.45841967613214485, + 0.010263295216473161, + 0.010263295216473161, + 0.0477530087415939, + 0.01539725182267524, + 0.03914129434090078, + 0.09563535019451247, + 0.008387101953025538, + 0.2506201259295143, + 0.48667223782969093, + 0.48667223782969093, + 0.008745841630502613, + 0.008745841630502613, + 0.06373528649650351, + 0.06373528649650351, + 0.10733890279722036, + 0.10733890279722036, + 0.0017514876248378327 + ], + "time": 29.0, + "rotation": [] + }, + { + "weights": [ + 0.2416721434465473, + 0.2416721434465473, + 0.04012624096302754, + 0.019360522591854726, + 0.019360522591854726, + 0.0013740999712830433, + 0.07506108519709878, + 0.07506108519709878, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.30934479126617964, + 0.30934479126617964, + 0.12397445967154824, + 0.12397445967154824, + 0.0731263485160611, + 0.029529794936557486, + 0.2093062780016943, + 0.029529794936557486, + 0.050430628790387025, + 0.15440495915356126, + 0.15440495915356126, + 0.0, + 0.0, + 0.1030725587691578, + 0.015138552377798703, + 0.3684809111768287, + 0.3684809111768287, + 0.008279540975178972, + 0.008279540975178972, + 0.03658921714162536, + 0.015138552377798703, + 0.05174844846838992, + 0.10172964022273101, + 0.00770946035072914, + 0.31566246151924104, + 0.4671884760970155, + 0.4671884760970155, + 0.010128512917529957, + 0.010128512917529957, + 0.05023931747391102, + 0.05023931747391102, + 0.0880944686542663, + 0.0880944686542663, + 0.0009020761897166566 + ], + "time": 29.033333333333335, + "rotation": [] + }, + { + "weights": [ + 0.18772149386682652, + 0.18772149386682652, + 0.03565233368426557, + 0.0180099639267574, + 0.0180099639267574, + 0.0, + 0.0578458842355757, + 0.0578458842355757, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.23480612215186825, + 0.23480612215186825, + 0.10160956325541637, + 0.10160956325541637, + 0.05589362309713442, + 0.028536624107865935, + 0.2013370432172501, + 0.028536624107865935, + 0.03861362987663592, + 0.1860008503177335, + 0.1860008503177335, + 0.0, + 0.0, + 0.07830133959650981, + 0.0168513823500169, + 0.2847025888838935, + 0.2847025888838935, + 0.006316517692591448, + 0.006316517692591448, + 0.02658227813164033, + 0.0168513823500169, + 0.051882010964410606, + 0.0967807818736348, + 0.0071596325508185565, + 0.3666027786476269, + 0.4325893153037339, + 0.4325893153037339, + 0.010751981183886518, + 0.010751981183886518, + 0.04151781821357346, + 0.04151781821357346, + 0.07095612565587665, + 0.07095612565587665, + 0.00014949639194778049 + ], + "time": 29.066666666666666, + "rotation": [] + }, + { + "weights": [ + 0.133363590354011, + 0.133363590354011, + 0.03315093460537136, + 0.01623653569217114, + 0.01623653569217114, + 0.0, + 0.04240411306465304, + 0.04240411306465304, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.16526373864284555, + 0.16526373864284555, + 0.07637049561100337, + 0.07637049561100337, + 0.05126333, + 0.026181742958193612, + 0.18847614333743126, + 0.026181742958193612, + 0.026182128316057547, + 0.1973779449505464, + 0.1973779449505464, + 0.0, + 0.0, + 0.05289781455482747, + 0.018617541919506715, + 0.20619295541019644, + 0.20619295541019644, + 0.004667455543364787, + 0.004667455543364787, + 0.017401807214177754, + 0.018617541919506715, + 0.046868363200199, + 0.08502437174320215, + 0.007695402169511415, + 0.4006240071285336, + 0.425, + 0.425, + 0.010822586354755212, + 0.010822586354755212, + 0.0381153874276649, + 0.0381153874276649, + 0.061750412875278646, + 0.061750412875278646, + 0.0 + ], + "time": 29.1, + "rotation": [] + }, + { + "weights": [ + 0.07566116169867965, + 0.07566116169867965, + 0.033403354926528954, + 0.01523948132191726, + 0.01523948132191726, + 0.0, + 0.027680498098568054, + 0.027680498098568054, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.09807126073306094, + 0.09807126073306094, + 0.04962517108704864, + 0.04962517108704864, + 0.05126333, + 0.022209009936650884, + 0.18585437240081568, + 0.022209009936650884, + 0.01337800232291245, + 0.19218796904192476, + 0.19218796904192476, + 6.573168453158562e-05, + 6.573168453158562e-05, + 0.02763161045505477, + 0.017738456336692673, + 0.12250667269740775, + 0.12250667269740775, + 0.0032209375700881634, + 0.0032209375700881634, + 0.009315951490635351, + 0.017738456336692673, + 0.04711611008765743, + 0.07085712170418423, + 0.009481297157654136, + 0.4210583291451134, + 0.425, + 0.425, + 0.010362145120736684, + 0.010362145120736684, + 0.03560816189400899, + 0.03560816189400899, + 0.055423352557417274, + 0.055423352557417274, + 0.0 + ], + "time": 29.133333333333333, + "rotation": [] + }, + { + "weights": [ + 0.0365986659294184, + 0.0365986659294184, + 0.03751625660122655, + 0.016193260548116137, + 0.016193260548116137, + 0.0, + 0.01826027178566673, + 0.01826027178566673, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05928836060367941, + 0.05928836060367941, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.018215061558424502, + 0.19792596274006113, + 0.018215061558424502, + 0.007219324739535845, + 0.1633414122827198, + 0.1633414122827198, + 0.0004918374029007184, + 0.0004918374029007184, + 0.015683199322345288, + 0.013194530497172043, + 0.07062801150338985, + 0.07062801150338985, + 0.002860972514870213, + 0.002860972514870213, + 0.005379837005190089, + 0.013194530497172043, + 0.051982343437112076, + 0.06050433577323443, + 0.010284493492574102, + 0.4197204893827436, + 0.425, + 0.425, + 0.009530005717885731, + 0.009530005717885731, + 0.033273042966516626, + 0.033273042966516626, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 29.166666666666668, + "rotation": [] + }, + { + "weights": [ + 0.023447578681290743, + 0.023447578681290743, + 0.043258934085618456, + 0.017588265758429252, + 0.017588265758429252, + 0.0, + 0.014780424925289585, + 0.014780424925289585, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.0181556725, + 0.2141064504117381, + 0.0181556725, + 0.007658566178810987, + 0.118925566431515, + 0.118925566431515, + 0.0015449580839093841, + 0.0015449580839093841, + 0.01905438928427744, + 0.006287621720028771, + 0.06702207802661822, + 0.06702207802661822, + 0.003495158299955785, + 0.003495158299955785, + 0.004832496381535821, + 0.006287621720028771, + 0.055433531517581035, + 0.05857162040715311, + 0.007234319272089975, + 0.3998237376979417, + 0.425, + 0.425, + 0.008754164785694098, + 0.008754164785694098, + 0.03288760427955764, + 0.03288760427955764, + 0.054289944767558246, + 0.054289944767558246, + 0.0 + ], + "time": 29.2, + "rotation": [] + }, + { + "weights": [ + 0.02781284363674264, + 0.02781284363674264, + 0.0457718488361154, + 0.01726894948154449, + 0.01726894948154449, + 0.001993593254259654, + 0.014500586741736949, + 0.014500586741736949, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.0181556725, + 0.20955659559794826, + 0.0181556725, + 0.009558277364288053, + 0.08464049398899072, + 0.08464049398899072, + 0.0027756317784743637, + 0.0027756317784743637, + 0.02799960683499062, + 0.0015179255312042547, + 0.09777153230139181, + 0.09777153230139181, + 0.002512933686375617, + 0.002512933686375617, + 0.0046075344484831585, + 0.0015179255312042547, + 0.049674997159412905, + 0.06181079319545197, + 0.0008431752877576, + 0.365893598113741, + 0.425, + 0.425, + 0.008528499177524015, + 0.008528499177524015, + 0.034259205870330316, + 0.034259205870330316, + 0.05580235680753945, + 0.05580235680753945, + 0.0 + ], + "time": 29.233333333333334, + "rotation": [] + }, + { + "weights": [ + 0.02692540764276469, + 0.02692540764276469, + 0.04126207035567077, + 0.016067242090742246, + 0.016067242090742246, + 0.0014289937913417785, + 0.01243668773344584, + 0.01243668773344584, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.019339590618476867, + 0.17465947934559406, + 0.019339590618476867, + 0.006972088345459525, + 0.08488949920449931, + 0.08488949920449931, + 0.003367502030783464, + 0.003367502030783464, + 0.028730965937886904, + 0.003455487612102707, + 0.115005580655166, + 0.115005580655166, + 0.0, + 0.0, + 0.0003173070294516418, + 0.003455487612102707, + 0.03731725301061356, + 0.06369533219507759, + 0.0, + 0.33366217613220195, + 0.425, + 0.425, + 0.009113349659102297, + 0.009113349659102297, + 0.031604124472609574, + 0.031604124472609574, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 29.266666666666666, + "rotation": [] + }, + { + "weights": [ + 0.02401884453637258, + 0.02401884453637258, + 0.03255210907331533, + 0.01551748615345546, + 0.01551748615345546, + 0.006643139570951454, + 0.010612429917923036, + 0.010612429917923036, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02329696126051732, + 0.11546932365213114, + 0.02329696126051732, + 0.005935884493270087, + 0.10623666878257473, + 0.10623666878257473, + 0.003111462531877414, + 0.003111462531877414, + 0.024005724808999457, + 0.015045651820089125, + 0.1253936402499675, + 0.1253936402499675, + 0.0, + 0.0, + 0.0, + 0.015045651820089125, + 0.02298612339156013, + 0.060900860386235336, + 0.0, + 0.3008020554270061, + 0.425, + 0.425, + 0.010876987917082644, + 0.010876987917082644, + 0.027451111003756506, + 0.027451111003756506, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 29.3, + "rotation": [] + }, + { + "weights": [ + 0.019553752296737253, + 0.019553752296737253, + 0.02888475, + 0.015555289441472461, + 0.015555289441472461, + 0.027927264784063592, + 0.009370650637096587, + 0.009370650637096587, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.025430385574522357, + 0.055876639570508646, + 0.025430385574522357, + 0.005967681522348094, + 0.1300404939268316, + 0.1300404939268316, + 0.0023572919171835683, + 0.0023572919171835683, + 0.015991794584052893, + 0.031193748236234678, + 0.1366212126399789, + 0.1366212126399789, + 0.0, + 0.0, + 0.001541153780583823, + 0.031193748236234678, + 0.015118576266935883, + 0.05361269898712632, + 0.0, + 0.27005355443273255, + 0.425, + 0.425, + 0.013456299539123256, + 0.013456299539123256, + 0.024167014073048304, + 0.024167014073048304, + 0.05420222500000001, + 0.05420222500000001, + 0.0002142809863601412 + ], + "time": 29.333333333333332, + "rotation": [] + }, + { + "weights": [ + 0.012927537358232898, + 0.012927537358232898, + 0.02888475, + 0.015803811220737183, + 0.015803811220737183, + 0.06014573637928278, + 0.008174597997484457, + 0.008174597997484457, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.025706011421802382, + 0.015373834627015234, + 0.025706011421802382, + 0.00405543449201754, + 0.1498189895280769, + 0.1498189895280769, + 0.0017686907614448226, + 0.0017686907614448226, + 0.008765718660184309, + 0.0449030808572258, + 0.14697145628077635, + 0.14697145628077635, + 0.0007832918316125861, + 0.0007832918316125861, + 0.005920099839568135, + 0.0449030808572258, + 0.012433976786477216, + 0.041860833391547184, + 0.009728527601276115, + 0.2466761342116763, + 0.425, + 0.425, + 0.015489962867328089, + 0.015489962867328089, + 0.0251217907560723, + 0.0251217907560723, + 0.05420222500000001, + 0.05420222500000001, + 0.00020495786198547925 + ], + "time": 29.366666666666667, + "rotation": [] + }, + { + "weights": [ + 0.006889287914548597, + 0.006889287914548597, + 0.02888475, + 0.016051565483763557, + 0.016051565483763557, + 0.08850785334195405, + 0.006484681008649721, + 0.006484681008649721, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.026383773921679766, + 0.0, + 0.026383773921679766, + 0.0, + 0.16844527785267138, + 0.16844527785267138, + 0.0016854759199278688, + 0.0016854759199278688, + 0.005198133843285693, + 0.05311469456979204, + 0.1491732241851942, + 0.1491732241851942, + 0.0036256785903658164, + 0.0036256785903658164, + 0.008214596100151534, + 0.05311469456979204, + 0.012871042958327694, + 0.029335119788135782, + 0.03887338595730915, + 0.2373696318694522, + 0.425, + 0.425, + 0.016092276466744278, + 0.016092276466744278, + 0.030344758448856198, + 0.030344758448856198, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 29.4, + "rotation": [] + }, + { + "weights": [ + 0.002705229579338003, + 0.002705229579338003, + 0.02888475, + 0.015689244547611645, + 0.015689244547611645, + 0.10435566359332624, + 0.004788069812847032, + 0.004788069812847032, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02857784010771615, + 0.0, + 0.02857784010771615, + 0.0, + 0.18288836500474376, + 0.18288836500474376, + 0.0018920048392776923, + 0.0018920048392776923, + 0.0043325078274522475, + 0.0583549051412514, + 0.15131280592509672, + 0.15131280592509672, + 0.007438081369868343, + 0.007438081369868343, + 0.010417110233434602, + 0.0583549051412514, + 0.012206771224737161, + 0.018537447814430497, + 0.06790777945092742, + 0.24196801781654342, + 0.425, + 0.425, + 0.015949571026223037, + 0.015949571026223037, + 0.03839275429823567, + 0.03839275429823567, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 29.433333333333334, + "rotation": [] + }, + { + "weights": [ + 0.0012006532666938635, + 0.0012006532666938635, + 0.02888475, + 0.01493849647951739, + 0.01493849647951739, + 0.11078897544315877, + 0.0036247924968068066, + 0.0036247924968068066, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05656704221452982, + 0.030769652972087856, + 0.0, + 0.030769652972087856, + 0.0, + 0.1902127825788088, + 0.1902127825788088, + 0.0019479288706289858, + 0.0019479288706289858, + 0.004555511687483103, + 0.0620090613939932, + 0.16144279497010355, + 0.16144279497010355, + 0.010025118025285853, + 0.010025118025285853, + 0.012983785875673799, + 0.0620090613939932, + 0.011562744102307721, + 0.013161284210426458, + 0.07651734756571903, + 0.2490244648286273, + 0.425, + 0.425, + 0.016159761313881183, + 0.016159761313881183, + 0.04260550505880797, + 0.04260550505880797, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 29.466666666666665, + "rotation": [] + }, + { + "weights": [ + 0.0007354946008750363, + 0.0007354946008750363, + 0.02888475, + 0.014926525, + 0.014926525, + 0.10989885330200189, + 0.003852903224261741, + 0.003852903224261741, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05822332394974569, + 0.030413946022768697, + 0.0018399726493017997, + 0.030413946022768697, + 0.0, + 0.18670922219753255, + 0.18670922219753255, + 0.0017047300841659297, + 0.0017047300841659297, + 0.006034552838121137, + 0.06208302926804335, + 0.1841081163712909, + 0.1841081163712909, + 0.010079539301139962, + 0.010079539301139962, + 0.01316112761518784, + 0.06208302926804335, + 0.010602872605834682, + 0.010209841440830906, + 0.06584886956427774, + 0.2472804967846188, + 0.425, + 0.425, + 0.016093597965581068, + 0.016093597965581068, + 0.04120323461081298, + 0.04120323461081298, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 29.5, + "rotation": [] + }, + { + "weights": [ + 0.0013347661122679703, + 0.0013347661122679703, + 0.02888475, + 0.014926525, + 0.014926525, + 0.0988711805215903, + 0.00427918921756957, + 0.00427918921756957, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.0544794254004955, + 0.027694395389763964, + 0.006408058745520451, + 0.027694395389763964, + 0.0, + 0.16855406920824723, + 0.16855406920824723, + 0.0012970974389463652, + 0.0012970974389463652, + 0.008302507975271763, + 0.059350409624831985, + 0.2195531606674193, + 0.2195531606674193, + 0.009844295627304479, + 0.009844295627304479, + 0.013815194288534768, + 0.059350409624831985, + 0.00962981549756867, + 0.008574774169496119, + 0.04708302063601355, + 0.21977304177624826, + 0.425, + 0.425, + 0.015148363134690684, + 0.015148363134690684, + 0.03249691501259802, + 0.03249691501259802, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 29.533333333333335, + "rotation": [] + }, + { + "weights": [ + 0.0021744320169091213, + 0.0021744320169091213, + 0.02888475, + 0.014926525, + 0.014926525, + 0.07666694234524449, + 0.004753723740577694, + 0.004753723740577694, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02483709070601054, + 0.01174932752336774, + 0.02483709070601054, + 0.0008382758790893206, + 0.1395777045616081, + 0.1395777045616081, + 0.001394562500395943, + 0.001394562500395943, + 0.014473827821867798, + 0.05433978257434706, + 0.2502223678997583, + 0.2502223678997583, + 0.008863204531371585, + 0.008863204531371585, + 0.01720123607665299, + 0.05433978257434706, + 0.007723677796976901, + 0.010922341261591216, + 0.03273949287831781, + 0.14859315752983082, + 0.425, + 0.425, + 0.013671477841479429, + 0.013671477841479429, + 0.01913325464619056, + 0.01913325464619056, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 29.566666666666666, + "rotation": [] + }, + { + "weights": [ + 0.0020227563700505654, + 0.0020227563700505654, + 0.03618070036172864, + 0.016607043413730347, + 0.016607043413730347, + 0.051641503615038706, + 0.0063182009250989934, + 0.0063182009250989934, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.05429723268108705, + 0.05429723268108705, + 0.05126333, + 0.024556051612788607, + 0.01647653170994349, + 0.024556051612788607, + 0.004294769286311095, + 0.11772095550383832, + 0.11772095550383832, + 0.0050140340799199636, + 0.0050140340799199636, + 0.021771730269704533, + 0.047147236391901944, + 0.24229105125580502, + 0.24229105125580502, + 0.012256330890314908, + 0.012256330890314908, + 0.02627409872199806, + 0.047147236391901944, + 0.009149282425642008, + 0.03342439723866324, + 0.03291518837213514, + 0.06577778937561167, + 0.425, + 0.425, + 0.012235476119177675, + 0.012235476119177675, + 0.008206504463617285, + 0.008206504463617285, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 29.6, + "rotation": [] + }, + { + "weights": [ + 0.0011139636327113425, + 0.0011139636327113425, + 0.04816199471907953, + 0.01999635073810577, + 0.01999635073810577, + 0.03428321416888916, + 0.009362709741773344, + 0.009362709741773344, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.06607869714498515, + 0.06607869714498515, + 0.05126333, + 0.02641722489982264, + 0.02206234599862779, + 0.02641722489982264, + 0.010400114607598094, + 0.10798318258353637, + 0.10798318258353637, + 0.015495503874761707, + 0.015495503874761707, + 0.029561672253268088, + 0.03961466486964905, + 0.18366975347910597, + 0.18366975347910597, + 0.033861474213855575, + 0.033861474213855575, + 0.038866245427301924, + 0.03961466486964905, + 0.01595287397503852, + 0.07313320056668346, + 0.047522551087396454, + 0.01011558058006421, + 0.425, + 0.425, + 0.010830465193305692, + 0.010830465193305692, + 0.002157933145229303, + 0.002157933145229303, + 0.05420222500000001, + 0.05420222500000001, + 0.0010026699198143816 + ], + "time": 29.633333333333333, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.05849144054310659, + 0.02254422498655932, + 0.02254422498655932, + 0.02660961715238433, + 0.012274758976751132, + 0.012274758976751132, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.07658034759972773, + 0.07658034759972773, + 0.05126333, + 0.028486211537074355, + 0.02725585103034972, + 0.028486211537074355, + 0.016960406369928793, + 0.10147953618850021, + 0.10147953618850021, + 0.030205968426806572, + 0.030205968426806572, + 0.03815641232899255, + 0.03443510543022835, + 0.11258847309010361, + 0.11258847309010361, + 0.07687680918191156, + 0.07687680918191156, + 0.05646432611559116, + 0.03443510543022835, + 0.021980153982128405, + 0.105292023345828, + 0.061139189877680335, + 0.0, + 0.425, + 0.425, + 0.009466906573091228, + 0.009466906573091228, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.0039885716778891404 + ], + "time": 29.666666666666668, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.06318324229546951, + 0.02249085903222833, + 0.02249085903222833, + 0.02272277038012231, + 0.014265254831739824, + 0.014265254831739824, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.08185308735285482, + 0.08185308735285482, + 0.05126333, + 0.030398120510614933, + 0.030036646979195714, + 0.030398120510614933, + 0.021947886156184322, + 0.0922606766223907, + 0.0922606766223907, + 0.03720227929098264, + 0.03720227929098264, + 0.05187828955905775, + 0.03607095990862163, + 0.07376753400479039, + 0.07376753400479039, + 0.1160686438903212, + 0.1160686438903212, + 0.07508666643074577, + 0.03607095990862163, + 0.02264602599399429, + 0.10750249730689179, + 0.06426310528601915, + 0.0, + 0.425, + 0.425, + 0.009268610477447503, + 0.009268610477447503, + 0.0, + 0.0, + 0.05420222500000001, + 0.05420222500000001, + 0.005516059403972963 + ], + "time": 29.7, + "rotation": [] + }, + { + "weights": [ + 0.0, + 0.0, + 0.06148998503174097, + 0.020976085056702745, + 0.020976085056702745, + 0.02180411932723861, + 0.017203801763909194, + 0.017203801763909194, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05707235620132172, + 0.05707235620132172, + 0.07746172382363248, + 0.07746172382363248, + 0.05126333, + 0.033038798605581, + 0.029104418328830158, + 0.033038798605581, + 0.02288304796176296, + 0.08587388502699983, + 0.08587388502699983, + 0.03016915723681448, + 0.03016915723681448, + 0.06420778759888236, + 0.04132734100733482, + 0.09872571315084178, + 0.09872571315084178, + 0.10978203652692686, + 0.10978203652692686, + 0.0862961683954511, + 0.04132734100733482, + 0.020333351514169137, + 0.08656501003674094, + 0.049865948089531466, + 0.0, + 0.425, + 0.425, + 0.010571088833468294, + 0.010571088833468294, + 0.0011764813480632614, + 0.0011764813480632614, + 0.05420222500000001, + 0.05420222500000001, + 0.005314710576619419 + ], + "time": 29.733333333333334, + "rotation": [] + }, + { + "weights": [ + 0.002178901247680181, + 0.002178901247680181, + 0.06148001274892258, + 0.017909742945558, + 0.017909742945558, + 0.024117645514862864, + 0.022024279220827975, + 0.022024279220827975, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.06089861020445819, + 0.06089861020445819, + 0.06418349189417699, + 0.06418349189417699, + 0.05126333, + 0.036799510940909365, + 0.034433908377374894, + 0.036799510940909365, + 0.022528278135827598, + 0.07983123122581409, + 0.07983123122581409, + 0.01530083995046359, + 0.01530083995046359, + 0.0765923815114157, + 0.04414206253630772, + 0.19599385123167706, + 0.19599385123167706, + 0.064100804818528, + 0.064100804818528, + 0.07323761710098808, + 0.04414206253630772, + 0.017384110604013705, + 0.0635769861085074, + 0.030527792019503442, + 0.01985386556812693, + 0.425, + 0.425, + 0.013778886773756566, + 0.013778886773756566, + 0.010331413056701412, + 0.010331413056701412, + 0.05420222500000001, + 0.05420222500000001, + 0.002459949015506675 + ], + "time": 29.766666666666666, + "rotation": [] + }, + { + "weights": [ + 0.018829461745917778, + 0.018829461745917778, + 0.06742390309061319, + 0.015312623392809458, + 0.015312623392809458, + 0.02767540599618638, + 0.030386417199458372, + 0.030386417199458372, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.09402095228433603, + 0.09402095228433603, + 0.049921588173934356, + 0.049921588173934356, + 0.05491074733436105, + 0.03940539881587026, + 0.05088921027524127, + 0.03940539881587026, + 0.019785246040139867, + 0.07146343040679179, + 0.07146343040679179, + 0.0048176305701157825, + 0.0048176305701157825, + 0.08737171334879734, + 0.037784832010843906, + 0.3363975157695155, + 0.3363975157695155, + 0.021642127792750064, + 0.021642127792750064, + 0.04439572074583596, + 0.037784832010843906, + 0.014479780197143546, + 0.047018606747899705, + 0.013474286560501359, + 0.07498042391879213, + 0.425, + 0.425, + 0.018804098452840524, + 0.018804098452840524, + 0.029444472531654983, + 0.029444472531654983, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 29.8, + "rotation": [] + }, + { + "weights": [ + 0.05700020225984706, + 0.05700020225984706, + 0.07686989669288903, + 0.014926525, + 0.014926525, + 0.027346763227667114, + 0.04137591887265441, + 0.04137591887265441, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.14658623720918373, + 0.14658623720918373, + 0.0448066525, + 0.0448066525, + 0.07678640995706826, + 0.038904811202415374, + 0.07839088397366656, + 0.038904811202415374, + 0.018444429497633648, + 0.06368488254291667, + 0.06368488254291667, + 0.0013221187530351515, + 0.0013221187530351515, + 0.09953783558947693, + 0.026587074422942725, + 0.45935781704527967, + 0.45935781704527967, + 0.009096222876438062, + 0.009096222876438062, + 0.018724502889173357, + 0.026587074422942725, + 0.013565989690167556, + 0.04107830865042547, + 0.006691505334206984, + 0.14490028470754615, + 0.425, + 0.425, + 0.0251961146720818, + 0.0251961146720818, + 0.056155418338520155, + 0.056155418338520155, + 0.05961976363645382, + 0.05961976363645382, + 0.0 + ], + "time": 29.833333333333332, + "rotation": [] + }, + { + "weights": [ + 0.11810298381107187, + 0.11810298381107187, + 0.07994784265756602, + 0.014926525, + 0.014926525, + 0.022138332149812142, + 0.053178761526942224, + 0.053178761526942224, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.1949256974671567, + 0.1949256974671567, + 0.0448066525, + 0.0448066525, + 0.09947298797113549, + 0.03517719132027454, + 0.10814276303563793, + 0.03517719132027454, + 0.017493991021599077, + 0.0610805824398994, + 0.0610805824398994, + 0.0015321065618523518, + 0.0015321065618523518, + 0.112293221269335, + 0.016495017893612372, + 0.5178896989141188, + 0.5178896989141188, + 0.011920627579092971, + 0.011920627579092971, + 0.009234165293829772, + 0.016495017893612372, + 0.013996873689549301, + 0.040414384433201354, + 0.007396795068468361, + 0.2003882314477647, + 0.425, + 0.425, + 0.03134279785411696, + 0.03134279785411696, + 0.08396333746079883, + 0.08396333746079883, + 0.0720378378938351, + 0.0720378378938351, + 0.0 + ], + "time": 29.866666666666667, + "rotation": [] + }, + { + "weights": [ + 0.1746054316205637, + 0.1746054316205637, + 0.07572405082838872, + 0.014926525, + 0.014926525, + 0.014399845472403925, + 0.06089466006628101, + 0.06089466006628101, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.22259394590343734, + 0.22259394590343734, + 0.0448066525, + 0.0448066525, + 0.1171670883893966, + 0.02868704101336852, + 0.13278698257037566, + 0.02868704101336852, + 0.022664643770882044, + 0.06060484610497949, + 0.06060484610497949, + 0.0017408070114574253, + 0.0017408070114574253, + 0.1281326445085661, + 0.013937828224152318, + 0.5228947613920482, + 0.5228947613920482, + 0.014454534623239715, + 0.014454534623239715, + 0.013485578820109357, + 0.013937828224152318, + 0.01375503997717584, + 0.0468340571437563, + 0.01275311772312436, + 0.22306501184191013, + 0.425, + 0.425, + 0.03523096906287328, + 0.03523096906287328, + 0.09879933632910247, + 0.09879933632910247, + 0.08866662079734457, + 0.08866662079734457, + 0.0015072911445583605 + ], + "time": 29.9, + "rotation": [] + }, + { + "weights": [ + 0.20910849283848476, + 0.20910849283848476, + 0.07418224087783262, + 0.014926525, + 0.014926525, + 0.010589445914540963, + 0.06613719005669862, + 0.06613719005669862, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.23831941293818587, + 0.23831941293818587, + 0.0448066525, + 0.0448066525, + 0.12172067761421193, + 0.02602142651698416, + 0.1462240394524165, + 0.02602142651698416, + 0.03390610047749108, + 0.05821301676332946, + 0.05821301676332946, + 0.001376560100221207, + 0.001376560100221207, + 0.14295613403831203, + 0.013145659025758498, + 0.5164762662989748, + 0.5164762662989748, + 0.014913220969693986, + 0.014913220969693986, + 0.022602288424968708, + 0.013145659025758498, + 0.01601958242910248, + 0.05915999689272468, + 0.014290587923356454, + 0.22295133726937416, + 0.428976484281676, + 0.428976484281676, + 0.03634103098085946, + 0.03634103098085946, + 0.10156192295253272, + 0.10156192295253272, + 0.09836527572146478, + 0.09836527572146478, + 0.004422061491225446 + ], + "time": 29.933333333333334, + "rotation": [] + }, + { + "weights": [ + 0.22645603397062836, + 0.22645603397062836, + 0.0727227385554994, + 0.014926525, + 0.014926525, + 0.009055227466991961, + 0.06858465283044742, + 0.06858465283044742, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.24042139436517423, + 0.24042139436517423, + 0.0448066525, + 0.0448066525, + 0.11564398705959303, + 0.025447342598012485, + 0.15006751247814717, + 0.025447342598012485, + 0.05104755727308134, + 0.05501208044588561, + 0.05501208044588561, + 0.0007326509098389302, + 0.0007326509098389302, + 0.15753431000879828, + 0.015533267240971316, + 0.48780979471547226, + 0.48780979471547226, + 0.014314962763871442, + 0.014314962763871442, + 0.039039033278822896, + 0.015533267240971316, + 0.01995666314448629, + 0.07750838888542985, + 0.013980941580874564, + 0.1983149089983529, + 0.425, + 0.425, + 0.03484666688101629, + 0.03484666688101629, + 0.09210512898862357, + 0.09210512898862357, + 0.1013423808451209, + 0.1013423808451209, + 0.008084440657070705 + ], + "time": 29.966666666666665, + "rotation": [] + }, + { + "weights": [ + 0.21191412537377685, + 0.21191412537377685, + 0.08175018556365338, + 0.021991684474486163, + 0.021991684474486163, + 0.009589496361864654, + 0.07140180100135647, + 0.07140180100135647, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.2525617493415363, + 0.2525617493415363, + 0.07623090862570495, + 0.07623090862570495, + 0.12077015804392928, + 0.029311866859317505, + 0.17141439741647146, + 0.029311866859317505, + 0.056420207481805915, + 0.05474527476976308, + 0.05474527476976308, + 8.697935356584289e-05, + 8.697935356584289e-05, + 0.15903582943134553, + 0.014826478673854736, + 0.5141253833503134, + 0.5141253833503134, + 0.013838076370888595, + 0.013838076370888595, + 0.038464033229365216, + 0.014826478673854736, + 0.020889797663810293, + 0.0837099171222066, + 0.012927919879150209, + 0.19345934042719726, + 0.4510000049662426, + 0.4510000049662426, + 0.012417914240092634, + 0.012417914240092634, + 0.08798200512925775, + 0.08798200512925775, + 0.09977818350402663, + 0.09977818350402663, + 0.00804529229318406 + ], + "time": 30.0, + "rotation": [] + }, + { + "weights": [ + 0.19261269242990564, + 0.19261269242990564, + 0.09155562477452403, + 0.022184779480312434, + 0.022184779480312434, + 0.00987324285365285, + 0.07512074478325381, + 0.07512074478325381, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.2649467509417304, + 0.2649467509417304, + 0.11280687883130748, + 0.11280687883130748, + 0.13118420314221135, + 0.02698491840259789, + 0.20502019371305177, + 0.02698491840259789, + 0.06017805167606893, + 0.056166371756366254, + 0.056166371756366254, + 0.00010931447265847085, + 0.00010931447265847085, + 0.15634909910815092, + 0.014007973453650856, + 0.5529774626096084, + 0.5529774626096084, + 0.013010255566665081, + 0.013010255566665081, + 0.03386694301097164, + 0.014007973453650856, + 0.021116827676693584, + 0.08953640801565978, + 0.011531865029107937, + 0.18682811827886647, + 0.48322555053801736, + 0.48322555053801736, + 0.02067281219221295, + 0.02067281219221295, + 0.0847716839895361, + 0.0847716839895361, + 0.09795185373652537, + 0.09795185373652537, + 0.0071664172889930825 + ], + "time": 30.033333333333335, + "rotation": [] + }, + { + "weights": [ + 0.1804868017988544, + 0.1804868017988544, + 0.09685972748058175, + 0.021545794901336256, + 0.021545794901336256, + 0.008495385625532686, + 0.07993326461208711, + 0.07993326461208711, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.27369645748819593, + 0.27369645748819593, + 0.134383672042004, + 0.134383672042004, + 0.13965654351881557, + 0.024252466237794663, + 0.22429112851619704, + 0.024252466237794663, + 0.06150255671569274, + 0.058625894997801034, + 0.058625894997801034, + 1.7330156123664657e-05, + 1.7330156123664657e-05, + 0.15160661116242397, + 0.013786121065329216, + 0.5702718428203033, + 0.5702718428203033, + 0.012338371774447798, + 0.012338371774447798, + 0.030652989659990564, + 0.013786121065329216, + 0.022097999442900917, + 0.09389114465032296, + 0.011559543758630733, + 0.1785655319690702, + 0.5108925640583035, + 0.5108925640583035, + 0.028322207054921538, + 0.028322207054921538, + 0.08445587799485232, + 0.08445587799485232, + 0.09820311316954228, + 0.09820311316954228, + 0.005579202622175214 + ], + "time": 30.066666666666666, + "rotation": [] + }, + { + "weights": [ + 0.17709536133777515, + 0.17709536133777515, + 0.09762044917969467, + 0.019448011813801125, + 0.019448011813801125, + 0.006722753956204361, + 0.0852319051644631, + 0.0852319051644631, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.2732413992285726, + 0.2732413992285726, + 0.1314764505641973, + 0.1314764505641973, + 0.13537273023809693, + 0.023185265631902763, + 0.2006664199488502, + 0.023185265631902763, + 0.053114878936182844, + 0.06348999231344173, + 0.06348999231344173, + 5.6576584554499e-05, + 5.6576584554499e-05, + 0.14226726187126967, + 0.013831552583724246, + 0.5380330568268181, + 0.5380330568268181, + 0.013930944308993347, + 0.013930944308993347, + 0.02815610124241736, + 0.013831552583724246, + 0.023881568440369184, + 0.0837698524196942, + 0.020316859157312465, + 0.18271029946349895, + 0.5243718893755047, + 0.5243718893755047, + 0.03242504490273337, + 0.03242504490273337, + 0.09516736859721789, + 0.09516736859721789, + 0.10099768360101032, + 0.10099768360101032, + 0.0029551500099755453 + ], + "time": 30.1, + "rotation": [] + }, + { + "weights": [ + 0.18000132380800982, + 0.18000132380800982, + 0.09735361077854415, + 0.01673345419886907, + 0.01673345419886907, + 0.007292304820552157, + 0.0899937053491063, + 0.0899937053491063, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.26081319068362097, + 0.26081319068362097, + 0.10752404446157442, + 0.10752404446157442, + 0.11425724222546522, + 0.02027479620751778, + 0.1376261683548388, + 0.02027479620751778, + 0.03698265227989678, + 0.06927096522280143, + 0.06927096522280143, + 0.00021744437763074608, + 0.00021744437763074608, + 0.13167157284864756, + 0.014896285584462531, + 0.4606021455700703, + 0.4606021455700703, + 0.017470260294040234, + 0.017470260294040234, + 0.026760801990472118, + 0.014896285584462531, + 0.0270215385032146, + 0.0635300911405459, + 0.03816366108248426, + 0.2160734606802867, + 0.5076332684357958, + 0.5076332684357958, + 0.033695251236561995, + 0.033695251236561995, + 0.11918764337187715, + 0.11918764337187715, + 0.10684470427634352, + 0.10684470427634352, + 0.0 + ], + "time": 30.133333333333333, + "rotation": [] + }, + { + "weights": [ + 0.18705353915083156, + 0.18705353915083156, + 0.09520613056056348, + 0.014926525, + 0.014926525, + 0.012886139336897393, + 0.09075164811495609, + 0.09075164811495609, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.2428150364999867, + 0.2428150364999867, + 0.07450339099080122, + 0.07450339099080122, + 0.09245569305760515, + 0.0181556725, + 0.07586132368262927, + 0.0181556725, + 0.02299253640582365, + 0.07121296018362042, + 0.07121296018362042, + 0.0006996777034326623, + 0.0006996777034326623, + 0.13058522453721683, + 0.021553547526044492, + 0.3900695878145643, + 0.3900695878145643, + 0.02002909633806164, + 0.02002909633806164, + 0.0255471613470997, + 0.021553547526044492, + 0.030360364272278166, + 0.04404653201297834, + 0.05172140656077129, + 0.27826817642669266, + 0.46056628193174065, + 0.46056628193174065, + 0.03384696081098243, + 0.03384696081098243, + 0.14764931950185972, + 0.14764931950185972, + 0.11073681256752835, + 0.11073681256752835, + 0.0 + ], + "time": 30.166666666666668, + "rotation": [] + }, + { + "weights": [ + 0.19345342661957338, + 0.19345342661957338, + 0.09051021904361486, + 0.014926525, + 0.014926525, + 0.022875282641272143, + 0.08405520428732338, + 0.08405520428732338, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.23272396886835278, + 0.23272396886835278, + 0.05425295083673555, + 0.05425295083673555, + 0.08490181446075434, + 0.0181556725, + 0.046209453283523994, + 0.0181556725, + 0.01749297543751949, + 0.06669784502791504, + 0.06669784502791504, + 0.0012936155707926997, + 0.0012936155707926997, + 0.14325390828811385, + 0.03120372715539164, + 0.3732380411089681, + 0.3732380411089681, + 0.018789325704684053, + 0.018789325704684053, + 0.02483780678361653, + 0.03120372715539164, + 0.03256931720187468, + 0.037726925754425454, + 0.05006883131454183, + 0.34551739282753985, + 0.425, + 0.425, + 0.034198953967921566, + 0.034198953967921566, + 0.1648690598724143, + 0.1648690598724143, + 0.10628631890808435, + 0.10628631890808435, + 0.00018777567817240254 + ], + "time": 30.2, + "rotation": [] + }, + { + "weights": [ + 0.1948707555021557, + 0.1948707555021557, + 0.08192825870854509, + 0.014926525, + 0.014926525, + 0.02952866415892327, + 0.07016551223184378, + 0.07016551223184378, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.22712966672011772, + 0.22712966672011772, + 0.05651869747255526, + 0.05651869747255526, + 0.09170755403382433, + 0.022183228443775845, + 0.04620369315147397, + 0.022183228443775845, + 0.017569985772882178, + 0.058730310308081735, + 0.058730310308081735, + 0.001275283794384449, + 0.001275283794384449, + 0.1621625393629073, + 0.0385560220240482, + 0.404703229665756, + 0.404703229665756, + 0.014643031332109648, + 0.014643031332109648, + 0.023152322428567056, + 0.0385560220240482, + 0.030278349348476938, + 0.03751229665109087, + 0.03652980040226662, + 0.3886833752904617, + 0.425, + 0.425, + 0.03324664597000393, + 0.03324664597000393, + 0.1651737147143908, + 0.1651737147143908, + 0.09381407584462842, + 0.09381407584462842, + 0.004130871966481207 + ], + "time": 30.233333333333334, + "rotation": [] + }, + { + "weights": [ + 0.19422831897224685, + 0.19422831897224685, + 0.07171323916741776, + 0.014926525, + 0.014926525, + 0.02913174905947275, + 0.05692862149860174, + 0.05692862149860174, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.22163464725017534, + 0.22163464725017534, + 0.07313001682715753, + 0.07313001682715753, + 0.09795725132737836, + 0.03260652122220821, + 0.053522759675979595, + 0.03260652122220821, + 0.01816657781600951, + 0.05220043733716008, + 0.05220043733716008, + 0.0006093595482941181, + 0.0006093595482941181, + 0.17035034384046271, + 0.038600524820919524, + 0.449701232569558, + 0.449701232569558, + 0.009931281102555131, + 0.009931281102555131, + 0.018767923688782103, + 0.038600524820919524, + 0.02403192839452197, + 0.0378644171037844, + 0.021588866838387066, + 0.39834208233015855, + 0.425, + 0.425, + 0.0316844753708158, + 0.0316844753708158, + 0.157069441463266, + 0.157069441463266, + 0.08172128604991091, + 0.08172128604991091, + 0.006746635665850977 + ], + "time": 30.266666666666666, + "rotation": [] + }, + { + "weights": [ + 0.20082079023122776, + 0.20082079023122776, + 0.06044589110783165, + 0.014926525, + 0.014926525, + 0.023816071770020878, + 0.05129088833928105, + 0.05129088833928105, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.2180617681571414, + 0.2180617681571414, + 0.08235806492822506, + 0.08235806492822506, + 0.1014810340745108, + 0.03863313578601393, + 0.05880919541631422, + 0.03863313578601393, + 0.01778525241783686, + 0.04796326506350719, + 0.04796326506350719, + 0.00045758633874356717, + 0.00045758633874356717, + 0.16590667068958273, + 0.033137760377888154, + 0.4896950555699209, + 0.4896950555699209, + 0.007114342600107189, + 0.007114342600107189, + 0.01125972161867788, + 0.033137760377888154, + 0.018052563603435233, + 0.034670222603848985, + 0.010793035051652355, + 0.38012909208025225, + 0.425, + 0.425, + 0.029734564891883287, + 0.029734564891883287, + 0.154388694678034, + 0.154388694678034, + 0.07880940224443159, + 0.07880940224443159, + 0.007394864303725103 + ], + "time": 30.3, + "rotation": [] + }, + { + "weights": [ + 0.21541526871068123, + 0.21541526871068123, + 0.05031943299940651, + 0.014926525, + 0.014926525, + 0.01941986105271747, + 0.055296315944620505, + 0.055296315944620505, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.22093326193945736, + 0.22093326193945736, + 0.07325612562043322, + 0.07325612562043322, + 0.10299307235649648, + 0.038894686262522404, + 0.06840870244162418, + 0.038894686262522404, + 0.01715331668300287, + 0.045093043254954446, + 0.045093043254954446, + 0.0005442952604166095, + 0.0005442952604166095, + 0.1531678731952394, + 0.024587565953178053, + 0.5233476911272318, + 0.5233476911272318, + 0.006841599941253657, + 0.006841599941253657, + 0.005867547342287637, + 0.024587565953178053, + 0.015504470680441165, + 0.03142326649810585, + 0.005967683132205686, + 0.3413422260965618, + 0.425, + 0.425, + 0.029082148969173417, + 0.029082148969173417, + 0.1605711285557065, + 0.1605711285557065, + 0.08596158283097399, + 0.08596158283097399, + 0.0034840316378644516 + ], + "time": 30.333333333333332, + "rotation": [] + }, + { + "weights": [ + 0.22318778272185993, + 0.22318778272185993, + 0.04487133026123044, + 0.014926525, + 0.014926525, + 0.016255085596016464, + 0.0604710117514644, + 0.0604710117514644, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.2166870606797081, + 0.2166870606797081, + 0.054903411120176285, + 0.054903411120176285, + 0.10316101312637323, + 0.03758550392729893, + 0.08938636933054239, + 0.03758550392729893, + 0.01673268335206167, + 0.04355931319296358, + 0.04355931319296358, + 0.0007451017134423763, + 0.0007451017134423763, + 0.13976068454129348, + 0.01572387980829391, + 0.5615799984761644, + 0.5615799984761644, + 0.008036179095506663, + 0.008036179095506663, + 0.006747720523604318, + 0.01572387980829391, + 0.01499372763293129, + 0.029510836888636843, + 0.0031901296760354697, + 0.2967313191720416, + 0.425, + 0.425, + 0.02890735813549585, + 0.02890735813549585, + 0.15898113772273054, + 0.15898113772273054, + 0.09363977376903801, + 0.09363977376903801, + 0.0 + ], + "time": 30.366666666666667, + "rotation": [] + }, + { + "weights": [ + 0.20738698297313268, + 0.20738698297313268, + 0.04375113695859906, + 0.014926525, + 0.014926525, + 0.015038249109472537, + 0.05782134256192613, + 0.05782134256192613, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.1946204125881194, + 0.1946204125881194, + 0.0448066525, + 0.0448066525, + 0.09637000890714775, + 0.03621759255017551, + 0.11056306464331485, + 0.03621759255017551, + 0.01726968442755085, + 0.047153080308011575, + 0.047153080308011575, + 0.0009154044091701501, + 0.0009154044091701501, + 0.12412642325673777, + 0.011240193420755005, + 0.5803475047860823, + 0.5803475047860823, + 0.009666307430182179, + 0.009666307430182179, + 0.013704776617565317, + 0.011240193420755005, + 0.014895275128739211, + 0.029658058126057874, + 0.0030465315495218515, + 0.24726879681859681, + 0.425, + 0.425, + 0.027494249216147813, + 0.027494249216147813, + 0.13121704368719025, + 0.13121704368719025, + 0.0889439789312226, + 0.0889439789312226, + 0.0 + ], + "time": 30.4, + "rotation": [] + }, + { + "weights": [ + 0.16490917312247402, + 0.16490917312247402, + 0.04876269825867241, + 0.014926525, + 0.014926525, + 0.01785635479858942, + 0.04736975662942441, + 0.04736975662942441, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.15932995123522614, + 0.15932995123522614, + 0.0448066525, + 0.0448066525, + 0.07908176513654841, + 0.033271573004978024, + 0.11576726470674781, + 0.033271573004978024, + 0.020409804848687978, + 0.057508079867277795, + 0.057508079867277795, + 0.001238831439986824, + 0.001238831439986824, + 0.11286633184977932, + 0.011270806419530075, + 0.5312639479126247, + 0.5312639479126247, + 0.011211517426584442, + 0.011211517426584442, + 0.023142356292477656, + 0.011270806419530075, + 0.01542343028954096, + 0.039481648323791335, + 0.0072127093694039695, + 0.1803057350218295, + 0.425, + 0.425, + 0.02378424648727688, + 0.02378424648727688, + 0.08686031044593874, + 0.08686031044593874, + 0.07035453117319512, + 0.07035453117319512, + 0.0 + ], + "time": 30.433333333333334, + "rotation": [] + }, + { + "weights": [ + 0.11197681086403977, + 0.11197681086403977, + 0.061252588672297305, + 0.014926525, + 0.014926525, + 0.020946036917822687, + 0.03699282186904121, + 0.03699282186904121, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.13024176167590268, + 0.13024176167590268, + 0.05244654017899714, + 0.05244654017899714, + 0.06219770078148157, + 0.02855694437665597, + 0.10530686037881028, + 0.02855694437665597, + 0.03112029044755865, + 0.06527499269161902, + 0.06527499269161902, + 0.0011527611754302447, + 0.0011527611754302447, + 0.11529478175299501, + 0.015885636928890418, + 0.40272858270576994, + 0.40272858270576994, + 0.014570267658148485, + 0.014570267658148485, + 0.043194003855543436, + 0.015885636928890418, + 0.021362722132887143, + 0.06815327852964397, + 0.01573174787419182, + 0.10757541560700953, + 0.425, + 0.425, + 0.019905525743961323, + 0.019905525743961323, + 0.050840378153536966, + 0.050840378153536966, + 0.059739044691061276, + 0.059739044691061276, + 0.006678382387118676 + ], + "time": 30.466666666666665, + "rotation": [] + }, + { + "weights": [ + 0.07098696338278902, + 0.07098696338278902, + 0.0809677471007619, + 0.014926525, + 0.014926525, + 0.02798478443707737, + 0.030035036536199683, + 0.030035036536199683, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.12260820610182618, + 0.12260820610182618, + 0.06967075717236311, + 0.06967075717236311, + 0.05568861950721056, + 0.02594221330114772, + 0.09926419973373407, + 0.02594221330114772, + 0.057953944802284205, + 0.057764661658023055, + 0.057764661658023055, + 0.0048094261969838775, + 0.0048094261969838775, + 0.14416357151099607, + 0.025654787517019665, + 0.25926117279699856, + 0.25926117279699856, + 0.01928238198161124, + 0.01928238198161124, + 0.09842136358576155, + 0.025654787517019665, + 0.03674579017928666, + 0.11324253976345056, + 0.026247948567782113, + 0.05867631179945805, + 0.425, + 0.425, + 0.019432709770543222, + 0.019432709770543222, + 0.03169311202530348, + 0.03169311202530348, + 0.054904235643226065, + 0.054904235643226065, + 0.015817596976246143 + ], + "time": 30.5, + "rotation": [] + }, + { + "weights": [ + 0.04753923219229491, + 0.04753923219229491, + 0.10279461124113622, + 0.015668883813830102, + 0.015668883813830102, + 0.04317784245525085, + 0.026903551949986372, + 0.026903551949986372, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.1353668061750275, + 0.1353668061750275, + 0.09004252079342087, + 0.09004252079342087, + 0.062154036973203895, + 0.025637665356732432, + 0.11123983553477688, + 0.025637665356732432, + 0.09874829617994167, + 0.040368745502616654, + 0.040368745502616654, + 0.015697477582309917, + 0.015697477582309917, + 0.19163346248013624, + 0.03847630208890351, + 0.16356352205787375, + 0.16356352205787375, + 0.02399012092500924, + 0.02399012092500924, + 0.19627998577696926, + 0.03847630208890351, + 0.06039906676326476, + 0.15804578959941856, + 0.03885210773774554, + 0.04067281026925356, + 0.425, + 0.425, + 0.02262122239385331, + 0.02262122239385331, + 0.020549690723419174, + 0.020549690723419174, + 0.05588848480079105, + 0.05588848480079105, + 0.021831019941185192 + ], + "time": 30.533333333333335, + "rotation": [] + }, + { + "weights": [ + 0.037560967302748105, + 0.037560967302748105, + 0.11965833242450435, + 0.017398973235613277, + 0.017398973235613277, + 0.06243745748485835, + 0.026583331876567418, + 0.026583331876567418, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.15504909221615099, + 0.15504909221615099, + 0.10819597531642226, + 0.10819597531642226, + 0.06688968166708942, + 0.023820536336552414, + 0.14024420193263454, + 0.023820536336552414, + 0.14075400690947254, + 0.029251718494508926, + 0.029251718494508926, + 0.0269120238774589, + 0.0269120238774589, + 0.2366501395191464, + 0.04575213365522876, + 0.13325163722038258, + 0.13325163722038258, + 0.022927591151424807, + 0.022927591151424807, + 0.2896552219986914, + 0.04575213365522876, + 0.07711589187383647, + 0.18857011113847993, + 0.045618956536054585, + 0.04441906362771984, + 0.425, + 0.425, + 0.026421541571617115, + 0.026421541571617115, + 0.012995155794279907, + 0.012995155794279907, + 0.059154887666950214, + 0.059154887666950214, + 0.023420759290456762 + ], + "time": 30.566666666666666, + "rotation": [] + }, + { + "weights": [ + 0.03491902644080773, + 0.03491902644080773, + 0.12351041095597397, + 0.01907349356638295, + 0.01907349356638295, + 0.0685577252081462, + 0.029039576889148763, + 0.029039576889148763, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.1699263259768485, + 0.1699263259768485, + 0.12376466340252323, + 0.12376466340252323, + 0.06941458018762721, + 0.02174284555851834, + 0.17666061810084743, + 0.02174284555851834, + 0.16780766738312575, + 0.030345277514840854, + 0.030345277514840854, + 0.02453764357471039, + 0.02453764357471039, + 0.25547722918646665, + 0.03952945222013761, + 0.15785022782427915, + 0.15785022782427915, + 0.017759823000856798, + 0.017759823000856798, + 0.3169421506779533, + 0.03952945222013761, + 0.07584899791649405, + 0.19841934272221146, + 0.04038578388946395, + 0.05555740754519187, + 0.425, + 0.425, + 0.028257257001740577, + 0.028257257001740577, + 0.009045404568314545, + 0.009045404568314545, + 0.0627136260901955, + 0.0627136260901955, + 0.021267211916191228 + ], + "time": 30.6, + "rotation": [] + }, + { + "weights": [ + 0.041311817350132105, + 0.041311817350132105, + 0.11490937705550869, + 0.019511682753603113, + 0.019511682753603113, + 0.0570742458105087, + 0.033517691732517285, + 0.033517691732517285, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.18175690855298715, + 0.18175690855298715, + 0.14157734300409036, + 0.14157734300409036, + 0.07139893067734579, + 0.02201434035918541, + 0.20362775496074123, + 0.02201434035918541, + 0.16591152740376328, + 0.0350797026019011, + 0.0350797026019011, + 0.011836803841870271, + 0.011836803841870271, + 0.23740598133632101, + 0.02748492624876753, + 0.22491430597645884, + 0.22491430597645884, + 0.013054021022149486, + 0.013054021022149486, + 0.2617178810494285, + 0.02748492624876753, + 0.060346560393060925, + 0.18346134700945435, + 0.0315462360956839, + 0.06354303924100736, + 0.425, + 0.425, + 0.028370619841984322, + 0.028370619841984322, + 0.009591774110283162, + 0.009591774110283162, + 0.06573956976966447, + 0.06573956976966447, + 0.01583307587674685 + ], + "time": 30.633333333333333, + "rotation": [] + }, + { + "weights": [ + 0.05296188151197771, + 0.05296188151197771, + 0.10542539720024376, + 0.019311316950531683, + 0.019311316950531683, + 0.03965402415820528, + 0.04308165742882658, + 0.04308165742882658, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.18755092301539003, + 0.18755092301539003, + 0.15799932330846778, + 0.15799932330846778, + 0.07725064882210318, + 0.026355666906705908, + 0.19547217096601205, + 0.026355666906705908, + 0.12720716127327503, + 0.04167412463575599, + 0.04167412463575599, + 0.00185947121054466, + 0.00185947121054466, + 0.1949492050068718, + 0.01856547155018362, + 0.2934185728430746, + 0.2934185728430746, + 0.012652639618941707, + 0.012652639618941707, + 0.16659071743488302, + 0.01856547155018362, + 0.041848596824066955, + 0.14267492762633724, + 0.02690370439418723, + 0.06584701708384919, + 0.425, + 0.425, + 0.02771826578038078, + 0.02771826578038078, + 0.01703518408217599, + 0.01703518408217599, + 0.0689211792810399, + 0.0689211792810399, + 0.008268077777964723 + ], + "time": 30.666666666666668, + "rotation": [] + }, + { + "weights": [ + 0.06252589566367009, + 0.06252589566367009, + 0.09937468405280789, + 0.018405713993010518, + 0.018405713993010518, + 0.02609422281384466, + 0.05240980168538431, + 0.05240980168538431, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.17461342268756447, + 0.17461342268756447, + 0.15672721713781348, + 0.15672721713781348, + 0.0800324405942644, + 0.027481732490871616, + 0.1525910370690481, + 0.027481732490871616, + 0.07452863609152176, + 0.055404152667948146, + 0.055404152667948146, + 0.0, + 0.0, + 0.15241425867591576, + 0.01747874163889458, + 0.3397137465221539, + 0.3397137465221539, + 0.013879986559706067, + 0.013879986559706067, + 0.08296822149838715, + 0.01747874163889458, + 0.028165366181305457, + 0.09118967439447123, + 0.027506133488246355, + 0.09432636329105915, + 0.425, + 0.425, + 0.026736802331038867, + 0.026736802331038867, + 0.03502878219421418, + 0.03502878219421418, + 0.07272274142929482, + 0.07272274142929482, + 0.002840132425938331 + ], + "time": 30.7, + "rotation": [] + }, + { + "weights": [ + 0.06299763843417164, + 0.06299763843417164, + 0.09075077133519303, + 0.016715143302208354, + 0.016715143302208354, + 0.029949946595089753, + 0.055208893173507245, + 0.055208893173507245, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.13957970046571316, + 0.13957970046571316, + 0.13093457743525497, + 0.13093457743525497, + 0.07296943196228568, + 0.027332859140421644, + 0.10152683820043285, + 0.027332859140421644, + 0.03756434720541747, + 0.07885423994490073, + 0.07885423994490073, + 0.0003323598418916972, + 0.0003323598418916972, + 0.12133832637752798, + 0.025102622354669212, + 0.3641191772052218, + 0.3641191772052218, + 0.013291933281081057, + 0.013291933281081057, + 0.036676982896668535, + 0.025102622354669212, + 0.01956583751099449, + 0.05411991562162123, + 0.025706966221332533, + 0.16548662036657324, + 0.425, + 0.425, + 0.025950698831251673, + 0.025950698831251673, + 0.05864906199276444, + 0.05864906199276444, + 0.07386285630719999, + 0.07386285630719999, + 0.0 + ], + "time": 30.733333333333334, + "rotation": [] + }, + { + "weights": [ + 0.057253897030438664, + 0.057253897030438664, + 0.08018812068871084, + 0.014926525, + 0.014926525, + 0.045905930974653765, + 0.053300594325576475, + 0.053300594325576475, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.10532011996422488, + 0.10532011996422488, + 0.10087704882025711, + 0.10087704882025711, + 0.0635863906570843, + 0.025505637483937384, + 0.07101073980331417, + 0.025505637483937384, + 0.023298570726598994, + 0.10101450218686031, + 0.10101450218686031, + 0.0008760312046589593, + 0.0008760312046589593, + 0.10215650988476611, + 0.03812109484736406, + 0.3948955420936855, + 0.3948955420936855, + 0.012897786524678972, + 0.012897786524678972, + 0.024580763812575998, + 0.03812109484736406, + 0.017812863311597267, + 0.04075432441064287, + 0.025299866550735052, + 0.2465733585613113, + 0.47782707086631204, + 0.47782707086631204, + 0.025291249028273975, + 0.025291249028273975, + 0.08016895763576026, + 0.08016895763576026, + 0.07076063262564791, + 0.07076063262564791, + 0.0 + ], + "time": 30.766666666666666, + "rotation": [] + }, + { + "weights": [ + 0.0559269057852881, + 0.0559269057852881, + 0.07868156028645375, + 0.014926525, + 0.014926525, + 0.056266871307577376, + 0.05425472483038899, + 0.05425472483038899, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.10181970862405634, + 0.10181970862405634, + 0.09461841679045124, + 0.09461841679045124, + 0.06186772968087874, + 0.02222947541393825, + 0.06394586035183494, + 0.02222947541393825, + 0.018777178174683013, + 0.10528895077960826, + 0.10528895077960826, + 0.000643740865135831, + 0.000643740865135831, + 0.0990593397191592, + 0.04698774189289125, + 0.42368069844586487, + 0.42368069844586487, + 0.015261425077915183, + 0.015261425077915183, + 0.03662910759449003, + 0.04698774189289125, + 0.02027646047728401, + 0.040318980387278935, + 0.026611621252128043, + 0.28525568587439387, + 0.4909521694694244, + 0.4909521694694244, + 0.025242921731301705, + 0.025242921731301705, + 0.08811133083488255, + 0.08811133083488255, + 0.06985956458031381, + 0.06985956458031381, + 0.0 + ], + "time": 30.8, + "rotation": [] + }, + { + "weights": [ + 0.06759708103324681, + 0.06759708103324681, + 0.08824803829193109, + 0.015140125794621194, + 0.015140125794621194, + 0.04423350638576914, + 0.05963615663349625, + 0.05963615663349625, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.1398821584880351, + 0.1398821584880351, + 0.11416498007518898, + 0.11416498007518898, + 0.06896083801984783, + 0.020666157074096542, + 0.07438574348177225, + 0.020666157074096542, + 0.02420257329940794, + 0.0886337782655443, + 0.0886337782655443, + 0.000736557560906346, + 0.000736557560906346, + 0.11654120790106903, + 0.0417323461467666, + 0.42743150719574496, + 0.42743150719574496, + 0.01987754763769251, + 0.01987754763769251, + 0.05983142437679424, + 0.0417323461467666, + 0.02534197792410849, + 0.04585556515625542, + 0.03273447523159638, + 0.25843856845583224, + 0.45607208779879954, + 0.45607208779879954, + 0.02598081401416232, + 0.02598081401416232, + 0.08583340091364719, + 0.08583340091364719, + 0.07126654375876695, + 0.07126654375876695, + 0.0 + ], + "time": 30.833333333333332, + "rotation": [] + }, + { + "weights": [ + 0.09048294275999064, + 0.09048294275999064, + 0.09928811575685223, + 0.016228831772844447, + 0.016228831772844447, + 0.026136859187058024, + 0.06707673668861386, + 0.06707673668861386, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.1980715795287063, + 0.1980715795287063, + 0.1406148619949817, + 0.1406148619949817, + 0.07226099967956538, + 0.019871936305116925, + 0.08938786455563132, + 0.019871936305116925, + 0.03729506959872584, + 0.073156464099884, + 0.073156464099884, + 0.0010756068902888463, + 0.0010756068902888463, + 0.13611409855740403, + 0.0316534944676927, + 0.40041237941810043, + 0.40041237941810043, + 0.02314173768141439, + 0.02314173768141439, + 0.07368478604725426, + 0.0316534944676927, + 0.029557666927576047, + 0.0602971717715263, + 0.04077221788465974, + 0.20691481956413804, + 0.425, + 0.425, + 0.02723102111901554, + 0.02723102111901554, + 0.07622439259929312, + 0.07622439259929312, + 0.07669067659548347, + 0.07669067659548347, + 0.00316161625087261 + ], + "time": 30.866666666666667, + "rotation": [] + }, + { + "weights": [ + 0.11394375892622124, + 0.11394375892622124, + 0.10543918503182267, + 0.017446640506937842, + 0.017446640506937842, + 0.01634264141321181, + 0.07708604527371266, + 0.07708604527371266, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.2513724823083195, + 0.2513724823083195, + 0.1565469491694654, + 0.1565469491694654, + 0.07582040854862754, + 0.019211007354338852, + 0.10278779711042126, + 0.019211007354338852, + 0.0508793022483587, + 0.07662468999624247, + 0.07662468999624247, + 0.001406700176386428, + 0.001406700176386428, + 0.14268512214933116, + 0.023683269814188977, + 0.3602915861776894, + 0.3602915861776894, + 0.02467081315283263, + 0.02467081315283263, + 0.06724700076239445, + 0.023683269814188977, + 0.03610180563160349, + 0.07851359226873939, + 0.048788168600627325, + 0.162500534738813, + 0.425, + 0.425, + 0.028101592617375493, + 0.028101592617375493, + 0.0670159669326884, + 0.0670159669326884, + 0.08275073042937683, + 0.08275073042937683, + 0.009186686069837633 + ], + "time": 30.9, + "rotation": [] + }, + { + "weights": [ + 0.12933418505958139, + 0.12933418505958139, + 0.10726585111447735, + 0.017770362699157168, + 0.017770362699157168, + 0.013427112996578196, + 0.08399107626506253, + 0.08399107626506253, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.28618027887174036, + 0.28618027887174036, + 0.16658002638391076, + 0.16658002638391076, + 0.07958753023828774, + 0.019460112407627444, + 0.11206597907202578, + 0.019460112407627444, + 0.05718552656471724, + 0.08282719999551769, + 0.08282719999551769, + 0.0014735895352038946, + 0.0014735895352038946, + 0.14044803423540925, + 0.0202860966457852, + 0.34528563065188256, + 0.34528563065188256, + 0.02495258399950604, + 0.02495258399950604, + 0.0602875085813658, + 0.0202860966457852, + 0.042560806976897333, + 0.08908948515142703, + 0.049610049809728315, + 0.13925190184797548, + 0.425, + 0.425, + 0.028816948660782382, + 0.028816948660782382, + 0.06147070665444642, + 0.06147070665444642, + 0.08662242080484113, + 0.08662242080484113, + 0.01237731485494545 + ], + "time": 30.933333333333334, + "rotation": [] + }, + { + "weights": [ + 0.13897742597120136, + 0.13897742597120136, + 0.10493563073022014, + 0.017490812976996555, + 0.017490812976996555, + 0.017612066119909273, + 0.08934980364782459, + 0.08934980364782459, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.306391837767192, + 0.306391837767192, + 0.17002310124891126, + 0.17002310124891126, + 0.08374055794307156, + 0.020443882359813963, + 0.11812828098024633, + 0.020443882359813963, + 0.05821031369268888, + 0.09589692875742904, + 0.09589692875742904, + 0.0012763821117446883, + 0.0012763821117446883, + 0.12832711253847384, + 0.02088353603280012, + 0.34555938754762916, + 0.34555938754762916, + 0.023990357747035347, + 0.023990357747035347, + 0.047870817354747165, + 0.02088353603280012, + 0.04973503106406753, + 0.09506287447043814, + 0.04512183783309795, + 0.13320121637412463, + 0.425, + 0.425, + 0.0293156171270779, + 0.0293156171270779, + 0.05809365979262754, + 0.05809365979262754, + 0.08930596017411774, + 0.08930596017411774, + 0.013508075236209794 + ], + "time": 30.966666666666665, + "rotation": [] + }, + { + "weights": [ + 0.12354604635615721, + 0.12354604635615721, + 0.09246490983153063, + 0.021991745175273286, + 0.021991745175273286, + 0.021072088472899916, + 0.07713370847842027, + 0.07713370847842027, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.26225185709732995, + 0.26225185709732995, + 0.14910394952638797, + 0.14910394952638797, + 0.09392468124830793, + 0.03387412613058846, + 0.10586149999965602, + 0.03387412613058846, + 0.050350076082561604, + 0.10273131508557556, + 0.10273131508557556, + 7.719620401799966e-05, + 7.719620401799966e-05, + 0.12314418349136284, + 0.024988521912901733, + 0.3955997467811413, + 0.3955997467811413, + 0.022971757533168075, + 0.022971757533168075, + 0.039150278974881915, + 0.024988521912901733, + 0.04301231433035559, + 0.08589463331362812, + 0.037886835106578746, + 0.1920367218645249, + 0.425, + 0.425, + 0.00661540829533216, + 0.00661540829533216, + 0.08140658342615266, + 0.08140658342615266, + 0.0771988270535659, + 0.0771988270535659, + 0.012227818697538898 + ], + "time": 31.0, + "rotation": [] + }, + { + "weights": [ + 0.10512872712597945, + 0.10512872712597945, + 0.07573567224400372, + 0.020521985580549008, + 0.020521985580549008, + 0.023048223732482796, + 0.06132077032123638, + 0.06132077032123638, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.20736135136602146, + 0.20736135136602146, + 0.12457575982525215, + 0.12457575982525215, + 0.10644073486328114, + 0.049649484592416825, + 0.08859454526787701, + 0.049649484592416825, + 0.04132105954257499, + 0.10749613848470493, + 0.10749613848470493, + 0.0, + 0.0, + 0.11769810773077452, + 0.029276515144322553, + 0.45865748638198456, + 0.45865748638198456, + 0.024571880831250097, + 0.024571880831250097, + 0.03191677883178699, + 0.029276515144322553, + 0.03173926845192905, + 0.07422654288155678, + 0.029381314132894736, + 0.2680035957268303, + 0.425, + 0.425, + 0.006541919379007241, + 0.006541919379007241, + 0.11701900511980046, + 0.11701900511980046, + 0.06568581768899404, + 0.06568581768899404, + 0.010841920696908508 + ], + "time": 31.033333333333335, + "rotation": [] + }, + { + "weights": [ + 0.09286143939409924, + 0.09286143939409924, + 0.05988206184868293, + 0.01938313446741785, + 0.01938313446741785, + 0.022208659936274786, + 0.046489983963380895, + 0.046489983963380895, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.16145449800948986, + 0.16145449800948986, + 0.10521433241665348, + 0.10521433241665348, + 0.11795047053268967, + 0.0675598643149832, + 0.07931229974542336, + 0.0675598643149832, + 0.03410198627305877, + 0.11033403016626825, + 0.11033403016626825, + 0.0, + 0.0, + 0.10959989146462498, + 0.030907593487894923, + 0.5386742059673578, + 0.5386742059673578, + 0.02108524534851311, + 0.02108524534851311, + 0.024537405524668904, + 0.030907593487894923, + 0.02055564605231793, + 0.06480343309896322, + 0.019150438798325363, + 0.33941182345151877, + 0.425, + 0.425, + 0.00632689857908657, + 0.00632689857908657, + 0.15448169229286046, + 0.15448169229286046, + 0.06072204711370483, + 0.06072204711370483, + 0.00997296503878065 + ], + "time": 31.066666666666666, + "rotation": [] + }, + { + "weights": [ + 0.08545514226314559, + 0.08545514226314559, + 0.04744949784307246, + 0.018592579619094073, + 0.018592579619094073, + 0.017124641331888367, + 0.031050122196653006, + 0.031050122196653006, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.1188919767426946, + 0.1188919767426946, + 0.08806673283023482, + 0.08806673283023482, + 0.12086033679190127, + 0.08222483683655461, + 0.09018215522879637, + 0.08222483683655461, + 0.028182633997251554, + 0.11353196590429251, + 0.11353196590429251, + 0.0004461839311490098, + 0.0004461839311490098, + 0.09296292627141581, + 0.029053458593608337, + 0.658474310806819, + 0.658474310806819, + 0.012007896815027497, + 0.012007896815027497, + 0.018285496608309772, + 0.029053458593608337, + 0.007760076792467189, + 0.059786203645524436, + 0.0065438247862316095, + 0.402014614712624, + 0.425, + 0.425, + 0.00841370991156214, + 0.00841370991156214, + 0.1886231230837957, + 0.1886231230837957, + 0.05692666091479674, + 0.05692666091479674, + 0.007821983719865474 + ], + "time": 31.1, + "rotation": [] + }, + { + "weights": [ + 0.08079961005877064, + 0.08079961005877064, + 0.03737863461607366, + 0.017568642402115996, + 0.017568642402115996, + 0.009930066994967906, + 0.01562680113382736, + 0.01562680113382736, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.07460062183959235, + 0.07460062183959235, + 0.0665397265989358, + 0.0665397265989358, + 0.1060364898370236, + 0.0908559631250682, + 0.1181920469638441, + 0.0908559631250682, + 0.024313079560441604, + 0.12185590688671376, + 0.12185590688671376, + 0.0009644930715869068, + 0.0009644930715869068, + 0.06667872419111984, + 0.026006406378381083, + 0.8134839506497995, + 0.8134839506497995, + 0.0030226681139446775, + 0.0030226681139446775, + 0.013877771086420618, + 0.026006406378381083, + 0.0, + 0.061114863516116565, + 0.0, + 0.4459218055050387, + 0.425, + 0.425, + 0.013148902816594043, + 0.013148902816594043, + 0.2090830145107239, + 0.2090830145107239, + 0.05420222500000001, + 0.05420222500000001, + 0.00337659915719105 + ], + "time": 31.133333333333333, + "rotation": [] + }, + { + "weights": [ + 0.07993606730383265, + 0.07993606730383265, + 0.03221588133549201, + 0.015975420409422153, + 0.015975420409422153, + 0.0036954679659434685, + 0.008803557428740408, + 0.008803557428740408, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.048076956316220484, + 0.048076956316220484, + 0.07848243775720493, + 0.0858102724896655, + 0.14561510918091747, + 0.0858102724896655, + 0.02338224341826778, + 0.13517830391015317, + 0.13517830391015317, + 0.0006901290739534839, + 0.0006901290739534839, + 0.04614812954956168, + 0.02544890323045605, + 0.9128329932446377, + 0.9128329932446377, + 0.0012822883865054747, + 0.0012822883865054747, + 0.012181602903850822, + 0.02544890323045605, + 0.0, + 0.06919371273444619, + 0.0, + 0.43431547042058416, + 0.425, + 0.425, + 0.016997031378989308, + 0.016997031378989308, + 0.19483699086065184, + 0.19483699086065184, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 31.166666666666668, + "rotation": [] + }, + { + "weights": [ + 0.08356543280640422, + 0.08356543280640422, + 0.03365806842032742, + 0.014926525, + 0.014926525, + 0.002448060203875812, + 0.013772994440942233, + 0.013772994440942233, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.057529360010307624, + 0.0683574431770791, + 0.15444446488302574, + 0.0683574431770791, + 0.024354735038110174, + 0.14500795023781904, + 0.14500795023781904, + 0.00034582288622219407, + 0.00034582288622219407, + 0.04900155301757002, + 0.027041321938705367, + 0.8824417889239832, + 0.8824417889239832, + 0.00321827469013479, + 0.00321827469013479, + 0.012006711557469496, + 0.027041321938705367, + 0.0029523485876163627, + 0.07714133017525376, + 0.0, + 0.3570314087369002, + 0.425, + 0.425, + 0.01837709201178988, + 0.01837709201178988, + 0.14474323215989426, + 0.14474323215989426, + 0.05420222500000001, + 0.05420222500000001, + 0.0 + ], + "time": 31.2, + "rotation": [] + }, + { + "weights": [ + 0.09213765071971071, + 0.09213765071971071, + 0.04503962844610211, + 0.014926525, + 0.014926525, + 0.004712231137922828, + 0.028238608934251307, + 0.028238608934251307, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.09615068808197968, + 0.09615068808197968, + 0.04667725084307533, + 0.04667725084307533, + 0.05406968700034274, + 0.04950914569199082, + 0.14462809562683096, + 0.04950914569199082, + 0.027765607727425423, + 0.14289433040789187, + 0.14289433040789187, + 0.0, + 0.0, + 0.07105039017541065, + 0.028375512481267948, + 0.7373700780527928, + 0.7373700780527928, + 0.007330226339399811, + 0.007330226339399811, + 0.013481167012027322, + 0.028375512481267948, + 0.017068955621549052, + 0.08288016936608719, + 0.0025148070284298474, + 0.250700875691005, + 0.425, + 0.425, + 0.019615575373172746, + 0.019615575373172746, + 0.08385092962001045, + 0.08385092962001045, + 0.05580128682433808, + 0.05580128682433808, + 0.0 + ], + "time": 31.233333333333334, + "rotation": [] + }, + { + "weights": [ + 0.1042584217020443, + 0.1042584217020443, + 0.06313907951116558, + 0.014926525, + 0.014926525, + 0.008712298742362425, + 0.04393811625029357, + 0.04393811625029357, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.1620812884398868, + 0.1620812884398868, + 0.05395590625703332, + 0.05395590625703332, + 0.05939381335462839, + 0.03870559148490427, + 0.121890548978533, + 0.03870559148490427, + 0.03290417896849766, + 0.13167732602783605, + 0.13167732602783605, + 0.0, + 0.0, + 0.09165676129715777, + 0.025812727252819696, + 0.563501549192837, + 0.563501549192837, + 0.010505149194172444, + 0.010505149194172444, + 0.016037815569766918, + 0.025812727252819696, + 0.026841561283384035, + 0.0859962450606482, + 0.008501709465469626, + 0.1669391610792704, + 0.425, + 0.425, + 0.023231135798352093, + 0.023231135798352093, + 0.05014272576996255, + 0.05014272576996255, + 0.06074161280401365, + 0.06074161280401365, + 0.0 + ], + "time": 31.266666666666666, + "rotation": [] + }, + { + "weights": [ + 0.11578074416943952, + 0.11578074416943952, + 0.08270075566002297, + 0.014926525, + 0.014926525, + 0.011058193658079415, + 0.05966297209795029, + 0.05966297209795029, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.23510463961533123, + 0.23510463961533123, + 0.06212266438773697, + 0.06212266438773697, + 0.0601980239152908, + 0.030206403482173152, + 0.09313648283481593, + 0.030206403482173152, + 0.03534276373684404, + 0.12175816180450569, + 0.12175816180450569, + 0.0, + 0.0, + 0.09671970052378513, + 0.02067267021962573, + 0.40627256163528963, + 0.40627256163528963, + 0.013717473670840256, + 0.013717473670840256, + 0.021804247743317046, + 0.02067267021962573, + 0.03367288921560558, + 0.08602411448955531, + 0.0175110529576029, + 0.11469925322702945, + 0.425, + 0.425, + 0.02675018355250357, + 0.02675018355250357, + 0.041000199105058366, + 0.041000199105058366, + 0.06748255465634481, + 0.06748255465634481, + 0.0 + ], + "time": 31.3, + "rotation": [] + }, + { + "weights": [ + 0.12285512164235109, + 0.12285512164235109, + 0.09787273534706656, + 0.014926525, + 0.014926525, + 0.011819525275911597, + 0.07390445438878873, + 0.07390445438878873, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.29507955781051076, + 0.29507955781051076, + 0.07270887605845924, + 0.07270887605845924, + 0.05579522805554523, + 0.02094036904066222, + 0.06257479156766615, + 0.02094036904066222, + 0.032739648595452295, + 0.11869248801044048, + 0.11869248801044048, + 0.0, + 0.0, + 0.09097033760377334, + 0.015527410432696332, + 0.28243396197046533, + 0.28243396197046533, + 0.01664569199617419, + 0.01664569199617419, + 0.02890532905501977, + 0.015527410432696332, + 0.03855437210627962, + 0.08080817993198118, + 0.030143604001828583, + 0.08503356597253248, + 0.425, + 0.425, + 0.028497881591320016, + 0.028497881591320016, + 0.04182756910366669, + 0.04182756910366669, + 0.07967208740966655, + 0.07967208740966655, + 0.0 + ], + "time": 31.333333333333332, + "rotation": [] + }, + { + "weights": [ + 0.12589591943791928, + 0.12589591943791928, + 0.10778923481702798, + 0.015459107608154159, + 0.015459107608154159, + 0.011611171598945338, + 0.0862807741122586, + 0.0862807741122586, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.33424277433327243, + 0.33424277433327243, + 0.08704152650066779, + 0.08704152650066779, + 0.05179358837859968, + 0.018959351488346033, + 0.03810856099639618, + 0.018959351488346033, + 0.0289180776370423, + 0.1208513082138129, + 0.1208513082138129, + 0.0, + 0.0, + 0.08525215089321131, + 0.013029200437345666, + 0.1972779221832751, + 0.1972779221832751, + 0.018076305730002257, + 0.018076305730002257, + 0.03538450407130375, + 0.013029200437345666, + 0.042961579348359764, + 0.07532838668142042, + 0.0437858387827873, + 0.07167035405124933, + 0.425, + 0.425, + 0.028776965779917563, + 0.028776965779917563, + 0.03984503751354556, + 0.03984503751354556, + 0.0901540022875581, + 0.0901540022875581, + 0.0 + ], + "time": 31.366666666666667, + "rotation": [] + }, + { + "weights": [ + 0.13298957635249403, + 0.13298957635249403, + 0.11144842995064592, + 0.015336153443921634, + 0.015336153443921634, + 0.012758971857173094, + 0.09585175578083305, + 0.09585175578083305, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.35348049785409635, + 0.35348049785409635, + 0.10076145072068482, + 0.10076145072068482, + 0.05151462682655877, + 0.018806403415367604, + 0.023707757762500198, + 0.018806403415367604, + 0.027227895281144537, + 0.12688097879290572, + 0.12688097879290572, + 0.0, + 0.0, + 0.08504917472600931, + 0.012204671677734162, + 0.1451090072946888, + 0.1451090072946888, + 0.018457493718181325, + 0.018457493718181325, + 0.03773542381823061, + 0.012204671677734162, + 0.0483298661453383, + 0.07297200858592984, + 0.055040707758494754, + 0.06756570488214489, + 0.425, + 0.425, + 0.028690068551472235, + 0.028690068551472235, + 0.039949335211089655, + 0.039949335211089655, + 0.09856303014925542, + 0.09856303014925542, + 0.0 + ], + "time": 31.4, + "rotation": [] + }, + { + "weights": [ + 0.15202181339263907, + 0.15202181339263907, + 0.10688231928007938, + 0.015091114066027913, + 0.015091114066027913, + 0.015865195223263323, + 0.10435877484934664, + 0.10435877484934664, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.3594249627419878, + 0.3594249627419878, + 0.1088532667074884, + 0.1088532667074884, + 0.05323100611567494, + 0.01937042340937955, + 0.017821426221302568, + 0.01937042340937955, + 0.026168232570801447, + 0.1391181761665003, + 0.1391181761665003, + 0.0, + 0.0, + 0.08685558800186424, + 0.012477986953620393, + 0.11515474425894867, + 0.11515474425894867, + 0.01974873457636151, + 0.01974873457636151, + 0.03829708737986426, + 0.012477986953620393, + 0.057439282962254076, + 0.072402240548815, + 0.06851984081523756, + 0.06771025295768461, + 0.425, + 0.425, + 0.028259735022272366, + 0.028259735022272366, + 0.041827237552830125, + 0.041827237552830125, + 0.10793428910630083, + 0.10793428910630083, + 0.0 + ], + "time": 31.433333333333334, + "rotation": [] + }, + { + "weights": [ + 0.1845363348722457, + 0.1845363348722457, + 0.09591800549200596, + 0.01515186535515717, + 0.01515186535515717, + 0.020584981249911434, + 0.11373401827045843, + 0.11373401827045843, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.3595063954591749, + 0.3595063954591749, + 0.11539244077035352, + 0.11539244077035352, + 0.05572703172053606, + 0.02008859400007827, + 0.015176126275743745, + 0.02008859400007827, + 0.025420716192041108, + 0.15484475365706846, + 0.15484475365706846, + 0.0, + 0.0, + 0.09044226514441621, + 0.013356637049998548, + 0.09892980733088079, + 0.09892980733088079, + 0.022713226878217276, + 0.022713226878217276, + 0.0387643447944096, + 0.013356637049998548, + 0.06930696900401792, + 0.07188336168016703, + 0.08559363303439954, + 0.0678402523909296, + 0.425, + 0.425, + 0.027608652029718656, + 0.027608652029718656, + 0.04438900814524716, + 0.04438900814524716, + 0.11909024545124593, + 0.11909024545124593, + 0.0 + ], + "time": 31.466666666666665, + "rotation": [] + }, + { + "weights": [ + 0.2194967135787009, + 0.2194967135787009, + 0.08314290195703501, + 0.015461355927286147, + 0.015461355927286147, + 0.02496734506317546, + 0.12209216707519116, + 0.12209216707519116, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.354385858774185, + 0.354385858774185, + 0.12430332909737307, + 0.12430332909737307, + 0.058568361295121024, + 0.020559698654960906, + 0.014807033496243606, + 0.020559698654960906, + 0.025833547966820837, + 0.16889443929706294, + 0.16889443929706294, + 0.0, + 0.0, + 0.09512672168867922, + 0.014588710186736915, + 0.09098567419818464, + 0.09098567419818464, + 0.025657609477639183, + 0.025657609477639183, + 0.04003966652921266, + 0.014588710186736915, + 0.0782450824975967, + 0.07296779219593316, + 0.09853217899799341, + 0.065759564936161, + 0.425, + 0.425, + 0.027007567201341887, + 0.027007567201341887, + 0.046606923480119, + 0.046606923480119, + 0.12872689238616392, + 0.12872689238616392, + 0.0 + ], + "time": 31.5, + "rotation": [] + }, + { + "weights": [ + 0.24142392597028173, + 0.24142392597028173, + 0.07272401686225614, + 0.016047382035976818, + 0.016047382035976818, + 0.0268457525542804, + 0.12412847259214939, + 0.12412847259214939, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.3384453650031769, + 0.3384453650031769, + 0.13500657177397174, + 0.13500657177397174, + 0.06124171774302207, + 0.020751922250682286, + 0.016012627865586954, + 0.020751922250682286, + 0.02661396344857555, + 0.1776019492319651, + 0.1776019492319651, + 0.0, + 0.0, + 0.09868279312338142, + 0.015339269116520874, + 0.08960920944809908, + 0.08960920944809908, + 0.026549410314432198, + 0.026549410314432198, + 0.039326457359961084, + 0.015339269116520874, + 0.08018326312303539, + 0.07387145800249914, + 0.10032677863325386, + 0.06264867271695815, + 0.425, + 0.425, + 0.02670311761753898, + 0.02670311761753898, + 0.04764890559017656, + 0.04764890559017656, + 0.13139420854193817, + 0.13139420854193817, + 0.0 + ], + "time": 31.533333333333335, + "rotation": [] + }, + { + "weights": [ + 0.24509571450097206, + 0.24509571450097206, + 0.0664856585008757, + 0.01685422238549777, + 0.01685422238549777, + 0.025161340726273386, + 0.11863950544169964, + 0.11863950544169964, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.3121184410793439, + 0.3121184410793439, + 0.1389861478337219, + 0.1389861478337219, + 0.06245449738843097, + 0.020702366815969944, + 0.017033957668713153, + 0.020702366815969944, + 0.026669734024575762, + 0.1825191312602587, + 0.1825191312602587, + 0.0, + 0.0, + 0.09849710719926012, + 0.01541922003296868, + 0.08934254454714906, + 0.08934254454714906, + 0.024826819369835502, + 0.024826819369835502, + 0.03577847400946275, + 0.01541922003296868, + 0.07749694074903211, + 0.0730522879532405, + 0.09353754243680404, + 0.05903329114828787, + 0.425, + 0.425, + 0.02672734424471853, + 0.02672734424471853, + 0.04718107394874094, + 0.04718107394874094, + 0.12656568938067975, + 0.12656568938067975, + 0.0 + ], + "time": 31.566666666666666, + "rotation": [] + }, + { + "weights": [ + 0.2345053430114472, + 0.2345053430114472, + 0.06112473479339051, + 0.017332108266138346, + 0.017332108266138346, + 0.022175169736146916, + 0.10783207948718745, + 0.10783207948718745, + 0.2312835212554347, + 0.2312835212554347, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.27844526341983233, + 0.27844526341983233, + 0.13104064645511754, + 0.13104064645511754, + 0.05992633540715486, + 0.020367731305993626, + 0.016351281515189574, + 0.020367731305993626, + 0.024975906312465653, + 0.1999611201456614, + 0.1999611201456614, + 4.586566113201633e-05, + 4.586566113201633e-05, + 0.09717756254332402, + 0.016140460129827255, + 0.0871859242873532, + 0.0871859242873532, + 0.022241363573287203, + 0.022241363573287203, + 0.03070449931813136, + 0.016140460129827255, + 0.07771646078143796, + 0.07230669945478435, + 0.09163099638053344, + 0.05803744916404993, + 0.425, + 0.425, + 0.027850883475371756, + 0.027850883475371756, + 0.04604818395738089, + 0.04604818395738089, + 0.116236113756895, + 0.116236113756895, + 0.0 + ], + "time": 31.6, + "rotation": [] + }, + { + "weights": [ + 0.21284072271415155, + 0.21284072271415155, + 0.05319546961358612, + 0.017204293822090284, + 0.017204293822090284, + 0.020414234591381877, + 0.09411681810660016, + 0.09411681810660016, + 0.8964150840376498, + 0.8964150840376498, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.23349522330931244, + 0.23349522330931244, + 0.11118140300469734, + 0.11118140300469734, + 0.05377005689910477, + 0.019970716741292135, + 0.01051986247301101, + 0.019970716741292135, + 0.021455879562667424, + 0.15115837471825727, + 0.15115837471825727, + 0.0002421661479664699, + 0.0002421661479664699, + 0.06637117952108379, + 0.011574767186705548, + 0.058498398917061906, + 0.058498398917061906, + 0.01427551491452114, + 0.01427551491452114, + 0.018713704664260138, + 0.011574767186705548, + 0.05541192569902962, + 0.050081938164574735, + 0.06542916940791263, + 0.04062406335558208, + 0.425, + 0.425, + 0.020056931384972155, + 0.020056931384972155, + 0.03120496803628545, + 0.03120496803628545, + 0.1033033727535179, + 0.1033033727535179, + 0.0 + ], + "time": 31.633333333333333, + "rotation": [] + }, + { + "weights": [ + 0.18061817522559837, + 0.18061817522559837, + 0.04299938013511042, + 0.01671023491292953, + 0.01671023491292953, + 0.018980226133550902, + 0.07579539865255353, + 0.07579539865255353, + 0.930703364482816, + 0.930703364482816, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.1765673028571264, + 0.1765673028571264, + 0.0854090822594506, + 0.0854090822594506, + 0.05126333, + 0.02028708324138028, + 0.00429289387805121, + 0.02028708324138028, + 0.016687328687735956, + 0.07799631438085007, + 0.07799631438085007, + 0.00044130202489239806, + 0.00044130202489239806, + 0.028684734893696627, + 0.005523304058504952, + 0.024182854188340035, + 0.024182854188340035, + 0.005763201282492702, + 0.005763201282492702, + 0.006560700929590629, + 0.005523304058504952, + 0.02633889057806558, + 0.022219235630972032, + 0.033844177722930885, + 0.01883738034537859, + 0.425, + 0.425, + 0.009517027944326394, + 0.009517027944326394, + 0.01312716864581618, + 0.01312716864581618, + 0.08602106374289303, + 0.08602106374289303, + 0.0 + ], + "time": 31.666666666666668, + "rotation": [] + }, + { + "weights": [ + 0.14179290139249384, + 0.14179290139249384, + 0.033156229076640925, + 0.01626134828852517, + 0.01626134828852517, + 0.016178563556500835, + 0.05373700362231047, + 0.05373700362231047, + 0.766290265773183, + 0.766290265773183, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.11647835911384644, + 0.11647835911384644, + 0.061818129995039495, + 0.061818129995039495, + 0.05126333, + 0.02171197530183894, + 0.0006382919549942, + 0.02171197530183894, + 0.012049199348049497, + 0.023721626443522284, + 0.023721626443522284, + 0.000601526756105678, + 0.000601526756105678, + 0.0035629660742623375, + 0.0016721075480537735, + 0.0018764348115239743, + 0.0018764348115239743, + 0.0005589664940323129, + 0.0005589664940323129, + 0.0, + 0.0016721075480537735, + 0.005480414969580504, + 0.0029812486363308697, + 0.01346595555543898, + 0.003919892268521437, + 0.425, + 0.425, + 0.00231852276410375, + 0.00231852276410375, + 0.0014151662694556325, + 0.0014151662694556325, + 0.0667876883907754, + 0.0667876883907754, + 0.00014675536325999675 + ], + "time": 31.7, + "rotation": [] + }, + { + "weights": [ + 0.1054449102708271, + 0.1054449102708271, + 0.02888475, + 0.015987678777445384, + 0.015987678777445384, + 0.012462404370307914, + 0.03354235443153549, + 0.03354235443153549, + 0.18822919618766965, + 0.18822919618766965, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.06895890978298012, + 0.06895890978298012, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.023573273173224243, + 0.0010213000604084553, + 0.023573273173224243, + 0.00803315908248935, + 0.03383040985890795, + 0.03383040985890795, + 0.0012418822345456899, + 0.0012418822345456899, + 0.0059890753882271865, + 0.002925721297838856, + 0.003984122340168269, + 0.003984122340168269, + 0.001130244705293859, + 0.001130244705293859, + 0.00021131055961762116, + 0.002925721297838856, + 0.0076680104860237614, + 0.004145885131188799, + 0.020471483383859894, + 0.006657304550920211, + 0.425, + 0.425, + 0.0035761952144759018, + 0.0035761952144759018, + 0.002529836414115768, + 0.002529836414115768, + 0.05674440518476383, + 0.05674440518476383, + 0.0003009953669139316 + ], + "time": 31.733333333333334, + "rotation": [] + }, + { + "weights": [ + 0.07938508923564634, + 0.07938508923564634, + 0.02888475, + 0.015702601735632076, + 0.015702601735632076, + 0.010539851763418736, + 0.020861738281590582, + 0.020861738281590582, + 0.23193455686732217, + 0.23193455686732217, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02509065078074864, + 0.0005241326945168628, + 0.02509065078074864, + 0.005183426330664324, + 0.03102508838687622, + 0.03102508838687622, + 0.0019685654576335624, + 0.0019685654576335624, + 0.003979383153574804, + 0.0030589398342583843, + 0.0027363448057855858, + 0.0027363448057855858, + 0.0007600780257156912, + 0.0007600780257156912, + 0.000323529689173613, + 0.0030589398342583843, + 0.005598377500261575, + 0.00213501419339861, + 0.020515217270169927, + 0.006477700578314914, + 0.425, + 0.425, + 0.003192822247743605, + 0.003192822247743605, + 0.0017507225754005555, + 0.0017507225754005555, + 0.05420222500000001, + 0.05420222500000001, + 0.0003569194248744417 + ], + "time": 31.766666666666666, + "rotation": [] + }, + { + "weights": [ + 0.0668003023735114, + 0.0668003023735114, + 0.02888475, + 0.01531002404489449, + 0.01531002404489449, + 0.010049339703151153, + 0.01596600200448716, + 0.01596600200448716, + 0.08783748178499995, + 0.08783748178499995, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.026034019879820684, + 0.0005124536582401817, + 0.026034019879820684, + 0.004359559741403372, + 0.02946590589625493, + 0.02946590589625493, + 0.002499092368142944, + 0.002499092368142944, + 0.0034070052632263707, + 0.0029520647573683927, + 0.0027961745645318694, + 0.0027961745645318694, + 0.0005594236244048387, + 0.0005594236244048387, + 0.0008341827429831023, + 0.0029520647573683927, + 0.004706812735114776, + 0.0017010890905346174, + 0.020157338210514603, + 0.006711440533399579, + 0.425, + 0.425, + 0.0029110074043273908, + 0.0029110074043273908, + 0.002049448867993694, + 0.002049448867993694, + 0.05420222500000001, + 0.05420222500000001, + 0.00041319786437920127 + ], + "time": 31.8, + "rotation": [] + }, + { + "weights": [ + 0.06876081547566819, + 0.06876081547566819, + 0.02888475, + 0.014941670001104218, + 0.014941670001104218, + 0.010469071354184825, + 0.016589658308242036, + 0.016589658308242036, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.025698115535968707, + 0.0010198357445853092, + 0.025698115535968707, + 0.005799073180449857, + 0.0299200295124735, + 0.0299200295124735, + 0.002567204343421117, + 0.002567204343421117, + 0.004141366417918884, + 0.0026291792014879823, + 0.003498401343822477, + 0.003498401343822477, + 0.0006207925560218943, + 0.0006207925560218943, + 0.001163662189085568, + 0.0026291792014879823, + 0.005266490025179723, + 0.0026323535719088124, + 0.020669559793812877, + 0.007566943466663356, + 0.425, + 0.425, + 0.0028347731871264303, + 0.0028347731871264303, + 0.002916815818420477, + 0.002916815818420477, + 0.05420222500000001, + 0.05420222500000001, + 0.0007902422387685088 + ], + "time": 31.833333333333332, + "rotation": [] + }, + { + "weights": [ + 0.08340976887515607, + 0.08340976887515607, + 0.02888475, + 0.014926525, + 0.014926525, + 0.011146515075649524, + 0.021677831773247024, + 0.021677831773247024, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.05687245, + 0.05687245, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.023744400316939352, + 0.0005450400965554353, + 0.023744400316939352, + 0.007854203161384373, + 0.02038241731269016, + 0.02038241731269016, + 0.0017500961390989154, + 0.0017500961390989154, + 0.0030193791644913745, + 0.001656923131751161, + 0.0016958133024828719, + 0.0016958133024828719, + 0.00011011468512671195, + 0.00011011468512671195, + 0.000849798015717948, + 0.001656923131751161, + 0.004186707756349012, + 0.001769491391522539, + 0.014679563939571361, + 0.00400310341800961, + 0.425, + 0.425, + 0.0017286704991544971, + 0.0017286704991544971, + 0.001948610363262037, + 0.001948610363262037, + 0.05420222500000001, + 0.05420222500000001, + 0.0016056810904826425 + ], + "time": 31.866666666666667, + "rotation": [] + }, + { + "weights": [ + 0.10000774168542448, + 0.10000774168542448, + 0.03480897694826124, + 0.014926525, + 0.014926525, + 0.01704272074358803, + 0.029134573707623124, + 0.029134573707623124, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.06651906812829628, + 0.06651906812829628, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02178588591285535, + 0.00569529499326433, + 0.02178588591285535, + 0.010061602094875909, + 0.06859564185142514, + 0.06859564185142514, + 0.0030984758489898253, + 0.0030984758489898253, + 0.01600609210985046, + 0.003227210185889684, + 0.013037007238183691, + 0.013037007238183691, + 0.004417344028396263, + 0.004417344028396263, + 0.003461815118789671, + 0.003227210185889684, + 0.017263737874371653, + 0.013752245477267666, + 0.04461894507919036, + 0.029143319087369078, + 0.425, + 0.425, + 0.006806018348251066, + 0.006806018348251066, + 0.008660691502903183, + 0.008660691502903183, + 0.054253389722825104, + 0.054253389722825104, + 0.0026303648948669415 + ], + "time": 31.9, + "rotation": [] + }, + { + "weights": [ + 0.11008984584893487, + 0.11008984584893487, + 0.03662730678915975, + 0.014926525, + 0.014926525, + 0.023730344538177753, + 0.03645788399236541, + 0.03645788399236541, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.07952232674828591, + 0.07952232674828591, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.021912765867832043, + 0.012766778656414575, + 0.021912765867832043, + 0.011818866099097889, + 0.116990176141262, + 0.116990176141262, + 0.004331490403839519, + 0.004331490403839519, + 0.031212532137121458, + 0.006884171725916008, + 0.033119103653090315, + 0.033119103653090315, + 0.008523609840444153, + 0.008523609840444153, + 0.005153846479952334, + 0.006884171725916008, + 0.03228359950440268, + 0.02831461058131285, + 0.06784740341561178, + 0.06368188393967492, + 0.425, + 0.425, + 0.013145545465605594, + 0.013145545465605594, + 0.018712907960372303, + 0.018712907960372303, + 0.05711117033902337, + 0.05711117033902337, + 0.003793887048959731 + ], + "time": 31.933333333333334, + "rotation": [] + }, + { + "weights": [ + 0.1158742608768598, + 0.1158742608768598, + 0.034709114581346484, + 0.014926525, + 0.014926525, + 0.03243240522486822, + 0.04435443010713371, + 0.04435443010713371, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.08894885113196704, + 0.08894885113196704, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.023598038530599386, + 0.022840844852583746, + 0.023598038530599386, + 0.0133272161840328, + 0.18194962799549094, + 0.18194962799549094, + 0.006097399013383045, + 0.006097399013383045, + 0.052037163249083904, + 0.012789883174534354, + 0.06328127107449938, + 0.06328127107449938, + 0.013852971797542909, + 0.013852971797542909, + 0.007032604850828644, + 0.012789883174534354, + 0.052726468188422033, + 0.04841857081013065, + 0.0964355567523411, + 0.11318973202790533, + 0.425, + 0.425, + 0.022156836096729544, + 0.022156836096729544, + 0.033423820499862936, + 0.033423820499862936, + 0.059291591797846696, + 0.059291591797846696, + 0.005104398913681505 + ], + "time": 31.966666666666665, + "rotation": [] + }, + { + "weights": [ + 0.10823156292974728, + 0.10823156292974728, + 0.0328858004723276, + 0.02063020234527565, + 0.02063020234527565, + 0.029876251763024275, + 0.04085489287516288, + 0.04085489287516288, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.08150750538651014, + 0.08150750538651014, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.029566647782706547, + 0.020517001437411003, + 0.029566647782706547, + 0.012687380523325817, + 0.16413656644026423, + 0.16413656644026423, + 0.001448648316679762, + 0.001448648316679762, + 0.046586672846607974, + 0.01164217059836298, + 0.05690292989133162, + 0.05690292989133162, + 0.012244187958589206, + 0.012244187958589206, + 0.00633709651373681, + 0.01164217059836298, + 0.04724599921956754, + 0.04304854178479331, + 0.08720414356715006, + 0.10185264389754148, + 0.425, + 0.425, + 0.004309005280968279, + 0.004309005280968279, + 0.03032475676608023, + 0.03032475676608023, + 0.060917908006341934, + 0.060917908006341934, + 0.004680827313235823 + ], + "time": 32.0, + "rotation": [] + }, + { + "weights": [ + 0.10259472223974395, + 0.10259472223974395, + 0.03338328869569865, + 0.019054725361225034, + 0.019054725361225034, + 0.026228638631956895, + 0.03738156000950504, + 0.03738156000950504, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.07734417878091324, + 0.07734417878091324, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.028763731159744597, + 0.01603890623932792, + 0.028763731159744597, + 0.01196783929176272, + 0.13086222090891414, + 0.13086222090891414, + 0.0014881995030811843, + 0.0014881995030811843, + 0.03678769581374664, + 0.009058473038354085, + 0.04413794450107071, + 0.04413794450107071, + 0.009464521993483807, + 0.009464521993483807, + 0.005321910182634984, + 0.009058473038354085, + 0.03720707371121357, + 0.0333492253756239, + 0.07103651164543054, + 0.07970131693851376, + 0.425, + 0.425, + 0.003929362829810094, + 0.003929362829810094, + 0.02419344094714946, + 0.02419344094714946, + 0.05924901093474874, + 0.05924901093474874, + 0.0042637079599357735 + ], + "time": 32.03333333333333, + "rotation": [] + }, + { + "weights": [ + 0.10380974936165968, + 0.10380974936165968, + 0.03778645720865042, + 0.017484966401840277, + 0.017484966401840277, + 0.025081050236310257, + 0.038487353255706146, + 0.038487353255706146, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.08617417562220768, + 0.08617417562220768, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.02783683322614133, + 0.012906926700047075, + 0.02783683322614133, + 0.012039218650066411, + 0.10520562145326808, + 0.10520562145326808, + 0.0013109627002584072, + 0.0013109627002584072, + 0.03045107135283092, + 0.007097265539424755, + 0.03574402937931671, + 0.03574402937931671, + 0.007565408828003059, + 0.007565408828003059, + 0.004761920409010984, + 0.007097265539424755, + 0.029978561880333043, + 0.026684321617441494, + 0.05850109494158194, + 0.06405008825872623, + 0.425, + 0.425, + 0.003873570199949397, + 0.003873570199949397, + 0.02022233805752225, + 0.02022233805752225, + 0.060150122342196084, + 0.060150122342196084, + 0.004511593894234722 + ], + "time": 32.06666666666667, + "rotation": [] + }, + { + "weights": [ + 0.10978317392014311, + 0.10978317392014311, + 0.046571460401728, + 0.015738693129830585, + 0.015738693129830585, + 0.02509120706291424, + 0.043957543754506646, + 0.043957543754506646, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.11217464041851805, + 0.11217464041851805, + 0.0448066525, + 0.0448066525, + 0.05126333, + 0.026497070540069452, + 0.009858150397028234, + 0.026497070540069452, + 0.01318512272887995, + 0.07874772203110506, + 0.07874772203110506, + 0.001004082223471431, + 0.001004082223471431, + 0.025576143172525195, + 0.005295279749802177, + 0.02871884987467809, + 0.02871884987467809, + 0.005938813051297546, + 0.005938813051297546, + 0.004637810728024864, + 0.005295279749802177, + 0.023010209131808484, + 0.020555206792695162, + 0.04529961478142507, + 0.049064775769199626, + 0.425, + 0.425, + 0.003947912002177463, + 0.003947912002177463, + 0.016650162482900268, + 0.016650162482900268, + 0.06378586944013667, + 0.06378586944013667, + 0.004922339754799998 + ], + "time": 32.1, + "rotation": [] + }, + { + "weights": [ + 0.12136542438447061, + 0.12136542438447061, + 0.06118660810447871, + 0.014926525, + 0.014926525, + 0.024658440506579907, + 0.05606231394952451, + 0.05606231394952451, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.16774222996719423, + 0.16774222996719423, + 0.05459356110652059, + 0.05459356110652059, + 0.05229859369262538, + 0.024657252054994052, + 0.006639051013576736, + 0.024657252054994052, + 0.015474488219233586, + 0.04808361725651078, + 0.04808361725651078, + 0.0006087495084365407, + 0.0006087495084365407, + 0.021884765966713002, + 0.0036096855901992624, + 0.02291871202539423, + 0.02291871202539423, + 0.00436925703031169, + 0.00436925703031169, + 0.005248603289148633, + 0.0036096855901992624, + 0.015387448125753258, + 0.01427048613622682, + 0.02888995694343733, + 0.03323772711778172, + 0.425, + 0.425, + 0.004189771606938366, + 0.004189771606938366, + 0.013160519530882632, + 0.013160519530882632, + 0.07343695650496412, + 0.07343695650496412, + 0.005066939581717761 + ], + "time": 32.13333333333333, + "rotation": [] + }, + { + "weights": [ + 0.13656010160032575, + 0.13656010160032575, + 0.07701040006109641, + 0.014926525, + 0.014926525, + 0.022191592889780887, + 0.07198033457051731, + 0.07198033457051731, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.24206443805931768, + 0.24206443805931768, + 0.08447643233150995, + 0.08447643233150995, + 0.05680310400092476, + 0.022430933245077632, + 0.005045353204376841, + 0.022430933245077632, + 0.018532180291581508, + 0.0246578232688563, + 0.0246578232688563, + 0.00030346171924198134, + 0.00030346171924198134, + 0.02113587294792641, + 0.0026032104127261093, + 0.02292293738649814, + 0.02292293738649814, + 0.003370014727267681, + 0.003370014727267681, + 0.006664785816201138, + 0.0026032104127261093, + 0.00997128519963244, + 0.010400709886027834, + 0.015914487822931627, + 0.022981802792573447, + 0.425, + 0.425, + 0.0046516579049217435, + 0.0046516579049217435, + 0.01106025081629655, + 0.01106025081629655, + 0.09078630682413283, + 0.09078630682413283, + 0.004727383053728509 + ], + "time": 32.166666666666664, + "rotation": [] + }, + { + "weights": [ + 0.15282540384908105, + 0.15282540384908105, + 0.08771350335861951, + 0.014926525, + 0.014926525, + 0.017749668206183268, + 0.08609904095150372, + 0.08609904095150372, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.3145731572905668, + 0.3145731572905668, + 0.12321946846078163, + 0.12321946846078163, + 0.06257896767319157, + 0.02026165184910051, + 0.00613489979700166, + 0.02026165184910051, + 0.02259728685800669, + 0.013602068756307865, + 0.013602068756307865, + 0.00016494139167271086, + 0.00016494139167271086, + 0.022579331033692057, + 0.0024099407639278417, + 0.031298204157121305, + 0.031298204157121305, + 0.0030459369478785243, + 0.0030459369478785243, + 0.008203673895448441, + 0.0024099407639278417, + 0.007561290821250599, + 0.009622202050777108, + 0.010023266191385223, + 0.02095795207090522, + 0.425, + 0.425, + 0.0052677742029817705, + 0.0052677742029817705, + 0.01082127492357881, + 0.01082127492357881, + 0.10525153276743517, + 0.10525153276743517, + 0.004523336067795751 + ], + "time": 32.2, + "rotation": [] + }, + { + "weights": [ + 0.168800626695156, + 0.168800626695156, + 0.08985121931348522, + 0.014926525, + 0.014926525, + 0.012841782612459992, + 0.09360970844115524, + 0.09360970844115524, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.367228722146579, + 0.367228722146579, + 0.16339909583330145, + 0.16339909583330145, + 0.06808011191231861, + 0.01885223864214182, + 0.009358191626412524, + 0.01885223864214182, + 0.027271136109318035, + 0.012740131116339131, + 0.012740131116339131, + 0.00017032182509345655, + 0.00017032182509345655, + 0.024682779865605475, + 0.0027368819820029378, + 0.04542091261063301, + 0.04542091261063301, + 0.003115596643515994, + 0.003115596643515994, + 0.00918645743812833, + 0.0027368819820029378, + 0.007200053163937155, + 0.010760419964790338, + 0.009859374719006669, + 0.02492121015276226, + 0.425, + 0.425, + 0.00586407090936388, + 0.00586407090936388, + 0.011751692923051964, + 0.011751692923051964, + 0.11324524453708097, + 0.11324524453708097, + 0.004678065702319142 + ], + "time": 32.233333333333334, + "rotation": [] + }, + { + "weights": [ + 0.18892468682357233, + 0.18892468682357233, + 0.08629727470023286, + 0.014926525, + 0.014926525, + 0.009170426641191748, + 0.0957100499953542, + 0.0957100499953542, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.40185540531362784, + 0.40185540531362784, + 0.2001185143632547, + 0.2001185143632547, + 0.07112443766423629, + 0.018309229764379095, + 0.011987465568951193, + 0.018309229764379095, + 0.03174808653337613, + 0.011444958767720625, + 0.011444958767720625, + 0.00015564015454479617, + 0.00015564015454479617, + 0.024970297557967036, + 0.0028224167068089745, + 0.05560961501938953, + 0.05560961501938953, + 0.002985216895384446, + 0.002985216895384446, + 0.009587161498410355, + 0.0028224167068089745, + 0.006230525353125159, + 0.011326093801430289, + 0.00882517305868012, + 0.026435431667736584, + 0.425, + 0.425, + 0.006272377354758124, + 0.006272377354758124, + 0.011846182995608868, + 0.011846182995608868, + 0.11549181618860782, + 0.11549181618860782, + 0.005810848250985142 + ], + "time": 32.266666666666666, + "rotation": [] + }, + { + "weights": [ + 0.21082376880305143, + 0.21082376880305143, + 0.08025927586214879, + 0.014926525, + 0.014926525, + 0.007317517697811122, + 0.09481831437775062, + 0.09481831437775062, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.41369639039039585, + 0.41369639039039585, + 0.22300765578235887, + 0.22300765578235887, + 0.07528927751949852, + 0.018229126071115223, + 0.013804278697286324, + 0.018229126071115223, + 0.03522878629820685, + 0.011497049438101897, + 0.011497049438101897, + 0.00014682055530803535, + 0.00014682055530803535, + 0.0249346750974655, + 0.0029175266117921874, + 0.06198951682874131, + 0.06198951682874131, + 0.0029317157609122122, + 0.0029317157609122122, + 0.00950958975723811, + 0.0029175266117921874, + 0.005706140654427661, + 0.011839137673377985, + 0.008230410218238827, + 0.027642852067947372, + 0.425, + 0.425, + 0.006478325579847605, + 0.006478325579847605, + 0.011953338682651513, + 0.011953338682651513, + 0.11495999693870537, + 0.11495999693870537, + 0.007455116191080634 + ], + "time": 32.3, + "rotation": [] + }, + { + "weights": [ + 0.2265617421695163, + 0.2265617421695163, + 0.07618142132248193, + 0.014926525, + 0.014926525, + 0.0069606252014636945, + 0.09260628713028767, + 0.09260628713028767, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.40882273103509603, + 0.40882273103509603, + 0.22429305825914642, + 0.22429305825914642, + 0.08116903177329468, + 0.0181556725, + 0.0159885150023869, + 0.0181556725, + 0.03940836074096814, + 0.011385950797370497, + 0.011385950797370497, + 0.00019432425232870226, + 0.00019432425232870226, + 0.025010523625782544, + 0.0035813779490334627, + 0.06822957660470685, + 0.06822957660470685, + 0.002776665895112922, + 0.002776665895112922, + 0.009690686294010702, + 0.0035813779490334627, + 0.0049754288792610134, + 0.012123050391674035, + 0.0075210271562848735, + 0.029824645178658606, + 0.425, + 0.425, + 0.006644997886248993, + 0.006644997886248993, + 0.012544246379818227, + 0.012544246379818227, + 0.11393635485853461, + 0.11393635485853461, + 0.009070168967757902 + ], + "time": 32.333333333333336, + "rotation": [] + }, + { + "weights": [ + 0.23221656786543976, + 0.23221656786543976, + 0.07567441122872484, + 0.014926525, + 0.014926525, + 0.006528554856777185, + 0.09152075446077748, + 0.09152075446077748, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.4001597170318872, + 0.4001597170318872, + 0.21916356342179416, + 0.21916356342179416, + 0.08540652777467453, + 0.0181556725, + 0.01941682117325918, + 0.0181556725, + 0.0424672638731343, + 0.010365290035094527, + 0.010365290035094527, + 0.00020052623056939653, + 0.00020052623056939653, + 0.025804151807512533, + 0.0038035872818103834, + 0.07606858415263035, + 0.07606858415263035, + 0.002627785030220234, + 0.002627785030220234, + 0.00983803144523075, + 0.0038035872818103834, + 0.004464390724897381, + 0.012809208929538716, + 0.006066198263849526, + 0.032816995808056394, + 0.425, + 0.425, + 0.006889633025441845, + 0.006889633025441845, + 0.013641587676746496, + 0.013641587676746496, + 0.11248524667961246, + 0.11248524667961246, + 0.010434494619922973 + ], + "time": 32.36666666666667, + "rotation": [] + }, + { + "weights": [ + 0.2286254295281, + 0.2286254295281, + 0.07832114036594114, + 0.014926525, + 0.014926525, + 0.006411599367856971, + 0.09084942670805103, + 0.09084942670805103, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.384190963847296, + 0.384190963847296, + 0.20354182358298956, + 0.20354182358298956, + 0.08902097323111119, + 0.019387203880718757, + 0.023902451413018347, + 0.019387203880718757, + 0.04490583432572224, + 0.008612622714468405, + 0.008612622714468405, + 0.0001911318552281173, + 0.0001911318552281173, + 0.02716798143727436, + 0.0038701823247330493, + 0.08525634561266213, + 0.08525634561266213, + 0.0024459165866885842, + 0.0024459165866885842, + 0.010019695035048883, + 0.0038701823247330493, + 0.004031664133071894, + 0.013700093030929558, + 0.004006709626742764, + 0.03675504480089456, + 0.425, + 0.425, + 0.007183785149029317, + 0.007183785149029317, + 0.015270667384777744, + 0.015270667384777744, + 0.11065879102264121, + 0.11065879102264121, + 0.011558394160653858 + ], + "time": 32.4, + "rotation": [] + } + ], + "head_pose": [ + [ + -0.0004131778472357618, + -0.0006800400018932272, + -0.00014456766276556537 + ], + [ + 0.0008359415599415558, + -0.0011269612582627824, + -0.0004927473220455261 + ], + [ + 0.0019007500537134969, + -0.0015162655392383939, + -0.0007885305550374837 + ], + [ + 0.0027812476340800607, + -0.001847952844820062, + -0.0010319173617414383 + ], + [ + 0.0034774343010412485, + -0.002122023175007787, + -0.0012229077421573894 + ], + [ + 0.003989310054597061, + -0.0023384765298015684, + -0.0013615016962853378 + ], + [ + 0.004316874894747483, + -0.002497312909201401, + -0.0014476992241252784 + ], + [ + 0.004752627390433177, + -0.002421757474076543, + -0.0014209970942289623 + ], + [ + 0.004723955856076344, + -0.0023874117838496678, + -0.0013270491415853253 + ], + [ + 0.004474726237309017, + -0.00243073975043769, + -0.001224603999451373 + ], + [ + 0.0038095358749316317, + -0.002505947474174139, + -0.0011694809897798315 + ], + [ + 0.0024623198677012226, + -0.0025236905548763813, + -0.001160951767992999 + ], + [ + 0.0008706269680496174, + -0.0026605918084746678, + -0.0011308047475664237 + ], + [ + -0.0011650447821238666, + -0.0028939793130023325, + -0.0011806228431865949 + ], + [ + -0.002618849926391045, + -0.0032585956848085996, + -0.0012721978594286108 + ], + [ + -0.003388648090901344, + -0.003575689685181729, + -0.0013505442822743983 + ], + [ + -0.0035178728124168964, + -0.0037635216032742952, + -0.001399757306248311 + ], + [ + -0.0030592157498162, + -0.0038647843733644197, + -0.0014710979879028099 + ], + [ + -0.002105264103831373, + -0.0037816606411856983, + -0.0015417285710437926 + ], + [ + -0.0010904573184314958, + -0.003639036366290033, + -0.0015380234320452192 + ], + [ + -0.0003308085286394347, + -0.0033064969670164703, + -0.0014533115485131625 + ], + [ + -5.498453114126071e-05, + -0.002862617839648811, + -0.0012799006599178468 + ], + [ + -0.0005326787086166699, + -0.0023994888857877404, + -0.0010435400988413317 + ], + [ + -0.0020383456410428607, + -0.001964453560946372, + -0.0008409616839184738 + ], + [ + -0.0028481983991040837, + -0.0017991279562754384, + -0.0007058155114595839 + ], + [ + -0.0038675098217315646, + -0.001724350051540331, + -0.0005769165628005041 + ], + [ + -0.005096279908925306, + -0.0017401198467410558, + -0.00045426483794123616 + ], + [ + -0.006534508660685309, + -0.0018464373418776133, + -0.0003378603368817802 + ], + [ + -0.00818219607701157, + -0.002043302536950003, + -0.0002277030596221361 + ], + [ + -0.010039342157904094, + -0.0023307154319582245, + -0.00012379300616230425 + ], + [ + -0.002267504869116158, + -0.0022187657919822143, + 0.0014242354372134569 + ], + [ + 0.0017394401922223653, + -0.002457083446713767, + 0.0025193398367451296 + ], + [ + 0.005226316299672148, + -0.0026138310720829074, + 0.0035171367828230396 + ], + [ + 0.008193123453233192, + -0.0026890086680896345, + 0.004417626275447188 + ], + [ + 0.010639861652905496, + -0.002682616234733948, + 0.005220808314617573 + ], + [ + 0.01256653089868906, + -0.0025946537720158494, + 0.005926682900334196 + ], + [ + 0.013973131190583857, + -0.0024251212799353307, + 0.006535250032597039 + ], + [ + 0.013925356601319763, + -0.0020737307113822784, + 0.006977329866456166 + ], + [ + 0.013651066692839301, + -0.0015703464243489707, + 0.007366479594328368 + ], + [ + 0.013279165808953365, + -0.0010812133602129026, + 0.007682340098369999 + ], + [ + 0.012865337595644155, + -0.0007419937684787546, + 0.007934832879517227 + ], + [ + 0.013402171112061476, + -0.0006898469097143803, + 0.008045626019233369 + ], + [ + 0.013574166349519875, + -0.0008527872461553116, + 0.00805544784035275 + ], + [ + 0.013459114558510465, + -0.0012347589400746913, + 0.00799706850686743 + ], + [ + 0.01337157511229477, + -0.001950879930841476, + 0.007823665641911368 + ], + [ + 0.013487618416539901, + -0.0028680081917687034, + 0.007682827565361719 + ], + [ + 0.013752281957716973, + -0.003798980982835209, + 0.007612494431590087 + ], + [ + 0.014138289944087834, + -0.004609393996977577, + 0.007484151820892284 + ], + [ + 0.014894924580855307, + -0.005105035026020975, + 0.007302508057640737 + ], + [ + 0.015530277209746899, + -0.005247605675112322, + 0.007088367421748233 + ], + [ + 0.015710593300916086, + -0.005162168703980895, + 0.006883657444009646 + ], + [ + 0.014748155143670312, + -0.004917511751671016, + 0.006661663647237693 + ], + [ + 0.012348641258681261, + -0.004550579336173293, + 0.006448046474255677 + ], + [ + 0.008583183059063335, + -0.00417763755356424, + 0.006216229844615102 + ], + [ + 0.00547176044900422, + -0.004071073066290837, + 0.006289705202377585 + ], + [ + 0.001816020098807115, + -0.004006601173981838, + 0.006464738980973928 + ], + [ + -0.0023840379915279555, + -0.003984221876637254, + 0.006741331180404148 + ], + [ + -0.007128413822000999, + -0.004003935174257085, + 0.007119481800668247 + ], + [ + -0.012417107392612016, + -0.0040657410668413305, + 0.007599190841766222 + ], + [ + -0.018250118703361, + -0.0041696395543899915, + 0.008180458303698075 + ], + [ + -0.01257841353692685, + -0.0031851855427920497, + 0.005912660176637407 + ], + [ + -0.007539437651976103, + -0.002730437483158173, + 0.004227572674166975 + ], + [ + -0.0031958297851728736, + -0.0023505906368530244, + 0.002739661046069661 + ], + [ + 0.00045241006348283735, + -0.0020456450038766048, + 0.0014489252923454675 + ], + [ + 0.0034052818939910266, + -0.0018156005842289136, + 0.00035536541299439374 + ], + [ + 0.005662785706351703, + -0.0016604573779099513, + -0.0005410185919835601 + ], + [ + 0.007224921500564845, + -0.001580215384919713, + -0.0012402267225883929 + ], + [ + 0.007704539710046815, + -0.0017477890638616055, + -0.0015930020374357774 + ], + [ + 0.0074839962233976, + -0.0019326867608907765, + -0.001747640432765239 + ], + [ + 0.006685148014898671, + -0.0021210396099300014, + -0.0017597467765585132 + ], + [ + 0.005456857587520229, + -0.002297710349601629, + -0.001722888473976187 + ], + [ + 0.0042509103869768595, + -0.002120408968139999, + -0.00175545318571916 + ], + [ + 0.003006237574815797, + -0.0021169341629356884, + -0.001683088363807384 + ], + [ + 0.0017206725284264123, + -0.002096205482243532, + -0.0015880696202522737 + ], + [ + 0.0007989963880405317, + -0.0022919442956360185, + -0.0014080066221052279 + ], + [ + 0.00015688893971588458, + -0.0024739923135715424, + -0.0011835849722344862 + ], + [ + -7.170184018269614e-05, + -0.002574084840520004, + -0.0009715477604128357 + ], + [ + 0.0003097329481644483, + -0.002709943641527256, + -0.0008115574555650283 + ], + [ + 0.0014070716899738072, + -0.002561591819793167, + -0.000737298751726315 + ], + [ + 0.0028810574887670145, + -0.002456858358186188, + -0.0006956617831195275 + ], + [ + 0.004414266258670429, + -0.0020898708393172903, + -0.0006841190234464214 + ], + [ + 0.005730358767892292, + -0.0016005382703782095, + -0.0006952520728607383 + ], + [ + 0.006622687580921311, + -0.001103207648084267, + -0.0007232497462306207 + ], + [ + 0.006895571555554011, + -0.0005602022634769802, + -0.0007858306513275968 + ], + [ + 0.006488194745258452, + -0.0003344121419124966, + -0.0007690982994816323 + ], + [ + 0.0056113891499789004, + -0.00019293890013895613, + -0.0007394638324709303 + ], + [ + 0.004265154769715367, + -0.00013578253815636114, + -0.0006969272502954927 + ], + [ + 0.0024494916044678523, + -0.00016294305596471206, + -0.0006414885529553197 + ], + [ + 0.00016439965423636102, + -0.00027442045356400845, + -0.0005731477404504113 + ], + [ + -0.0025901210809791166, + -0.0004702147309542503, + -0.0004919048127807671 + ], + [ + -0.004620683440267481, + -0.0019497673806505198, + -0.0015268432309598968 + ], + [ + -0.004283362276374131, + -0.00315153414384304, + -0.0023698701900810963 + ], + [ + -0.0040092554031563345, + -0.00419134945359226, + -0.003033101097293121 + ], + [ + -0.003798362820614092, + -0.0050692133098981795, + -0.0035165359525959703 + ], + [ + -0.0036506845287474035, + -0.005785125712760799, + -0.003820174755989645 + ], + [ + -0.003566220527556269, + -0.006339086662180118, + -0.0039440175074741445 + ], + [ + -0.003544970817040677, + -0.006731096158156122, + -0.00388806420704946 + ], + [ + -0.003181986795466534, + -0.006768139018651662, + -0.0034498740102964177 + ], + [ + -0.003071181670237377, + -0.00669854604338206, + -0.0028229341272663724 + ], + [ + -0.0029837239159265505, + -0.006623898260288431, + -0.0021429129631870083 + ], + [ + -0.0029176022887417046, + -0.006600152384734912, + -0.00155293278141458 + ], + [ + -0.003558463566096924, + -0.006498219940707297, + -0.001092444084693581 + ], + [ + -0.005055876622114448, + -0.006472005386574716, + -0.0009129339626514897 + ], + [ + -0.007541125228528241, + -0.006564131087938957, + -0.0008996292138188772 + ], + [ + -0.010482373687774854, + -0.0066592626050124394, + -0.0009569263544358525 + ], + [ + -0.013606293210924034, + -0.006703531024464202, + -0.0010650600895972307 + ], + [ + -0.016750190797962507, + -0.006667486824973996, + -0.0012079209632422671 + ], + [ + -0.01959606219698263, + -0.0065390969524543405, + -0.0013470855816118854 + ], + [ + -0.022048025761845797, + -0.006319676959518624, + -0.0014173859538374604 + ], + [ + -0.023866029113974455, + -0.006006680233120814, + -0.0014140024835749135 + ], + [ + -0.024757760206190735, + -0.005675019940079877, + -0.0014009930513768252 + ], + [ + -0.0244946932919645, + -0.005346545217442168, + -0.0014601894263482646 + ], + [ + -0.023523224468371427, + -0.004974810053882092, + -0.001575743465709791 + ], + [ + -0.02286436729122029, + -0.00453190493417197, + -0.0016756860813501038 + ], + [ + -0.023532893533212033, + -0.004485196370512107, + -0.0015818153417346426 + ], + [ + -0.02452243536098702, + -0.0045433823919525645, + -0.001430709227048246 + ], + [ + -0.02583299277454531, + -0.004706462998493355, + -0.0012223677372909187 + ], + [ + -0.02746456577388691, + -0.004974438190134477, + -0.0009567908724626604 + ], + [ + -0.029417154359011814, + -0.005347307966875932, + -0.0006339786325634714 + ], + [ + -0.031690758529920024, + -0.005825072328717717, + -0.00025393101759335233 + ], + [ + -0.024104188507385042, + -0.005168253391164938, + -0.0004789346413307764 + ], + [ + -0.01799019483602364, + -0.004554390591773469, + -0.0006376593056857802 + ], + [ + -0.012654337396716075, + -0.004017458969645918, + -0.0007649722008382957 + ], + [ + -0.00809661618946235, + -0.0035574585247822857, + -0.0008608733267883224 + ], + [ + -0.004317031214262457, + -0.0031743892571825722, + -0.0009253626835358608 + ], + [ + -0.001315582471116402, + -0.002868251166846777, + -0.0009584402710809106 + ], + [ + 0.0009077300399758175, + -0.0026390442537748936, + -0.0009601060894234699 + ], + [ + 0.0019378813783256141, + -0.002491199686523329, + -0.0008963589132881802 + ], + [ + 0.0021954129845338814, + -0.002459313311456395, + -0.0007898440246029949 + ], + [ + 0.0018257114535583981, + -0.0025411348960158653, + -0.0006640273216581264 + ], + [ + 0.0010109469641387543, + -0.0026592089783616553, + -0.0005462603356331634 + ], + [ + -0.0001529163031837995, + -0.002669740487916605, + -0.0005000806799921092 + ], + [ + -0.0015213703741739414, + -0.0027949660937996766, + -0.00044071983317584516 + ], + [ + -0.003227814155796242, + -0.0029864926359816175, + -0.00047053280027006784 + ], + [ + -0.004427184650522974, + -0.00327306669144057, + -0.0005455889061246382 + ], + [ + -0.005152461733058571, + -0.0035248921388891497, + -0.000612867955458754 + ], + [ + -0.005441226899643843, + -0.0036691959491900275, + -0.0006565509052322832 + ], + [ + -0.005225131775275971, + -0.0037393139804481287, + -0.0007418071684862831 + ], + [ + -0.004481590115992598, + -0.0036679163165614045, + -0.0008633372315031956 + ], + [ + -0.0035500710685511068, + -0.0035906784080739604, + -0.0009553473982029765 + ], + [ + -0.002712963681539503, + -0.003348048548321751, + -0.0009513445671067084 + ], + [ + -0.0023718207131280186, + -0.002979847893528036, + -0.0008375511883699539 + ], + [ + -0.0028092038437713897, + -0.0025563864337117977, + -0.0006410819122167394 + ], + [ + -0.0042732782333296465, + -0.002149996006902146, + -0.00047310109288037827 + ], + [ + -0.005016295896704532, + -0.002034935605642028, + -0.0003495063959217104 + ], + [ + -0.0059486420974855115, + -0.00200691606293975, + -0.00021681026850974743 + ], + [ + -0.007070316835672593, + -0.0020659373787953175, + -7.50127106444908e-05 + ], + [ + -0.008381320111265779, + -0.0022119995532087306, + 7.588627767405958e-05 + ], + [ + -0.009881651924265066, + -0.0024451025861799897, + 0.00023588669644590337 + ], + [ + -0.011571312274670459, + -0.0027652464777090944, + 0.0004049885456710409 + ], + [ + -0.01170060208898985, + -0.0035184762652438707, + -0.0007215289424008015 + ], + [ + -0.009898114908336074, + -0.003972106396926039, + -0.0015430649167573727 + ], + [ + -0.008373458735168997, + -0.004375428096285225, + -0.0021803864755742452 + ], + [ + -0.00712663356948862, + -0.004728441363321427, + -0.0026334936188514195 + ], + [ + -0.006157639411294939, + -0.005031146198034646, + -0.0029023863465888955 + ], + [ + -0.005466476260587958, + -0.005283542600424881, + -0.002987064658786673 + ], + [ + -0.00505314411736766, + -0.005485630570492121, + -0.002887528555444746 + ], + [ + -0.004720385759521725, + -0.005513911426935086, + -0.002365881231638632 + ], + [ + -0.004862955844696138, + -0.005553747203965773, + -0.0016473597025003762 + ], + [ + -0.005153654940256987, + -0.005675905865660464, + -0.0008945748556322904 + ], + [ + -0.0054850249673175765, + -0.005892940126768003, + -0.0002768743810932646 + ], + [ + -0.006339570408003432, + -0.005956097797339127, + 0.0001498059109547005 + ], + [ + -0.007850857984541363, + -0.006024640446513783, + 0.0002833562397724532 + ], + [ + -0.010035096704654986, + -0.006161941881265521, + 0.0002146120091949478 + ], + [ + -0.012502949825523673, + -0.006234571347378714, + 8.048981141348918e-05 + ], + [ + -0.015219160260382423, + -0.0062255451933808945, + -0.00010439927539849013 + ], + [ + -0.018178690979988966, + -0.00615413170259085, + -0.0003409079943575544 + ], + [ + -0.02112937688650601, + -0.006039413132648728, + -0.0005935980518327723 + ], + [ + -0.023873691447186665, + -0.005887910501220257, + -0.0007626069858308012 + ], + [ + -0.026115362301124066, + -0.005672636831526759, + -0.0008364435236536456 + ], + [ + -0.02764224122745338, + -0.005451767188151854, + -0.0008703694054726467 + ], + [ + -0.028187192580156183, + -0.005211924002936526, + -0.000977206333747299 + ], + [ + -0.028101820971519677, + -0.004853199953288137, + -0.0011415961664702514 + ], + [ + -0.028236200935407123, + -0.0043001044784218975, + -0.0012763110307932603 + ], + [ + -0.02954615419676033, + -0.004224663078379433, + -0.0011766645246297672 + ], + [ + -0.031117472110932416, + -0.004227602591802825, + -0.000996131626442159 + ], + [ + -0.032950154677923456, + -0.004308923018692087, + -0.00073471233623044 + ], + [ + -0.03504420189773345, + -0.004468624359047218, + -0.00039240665399461073 + ], + [ + -0.0373996137703624, + -0.004706706612868219, + 3.078542026532983e-05 + ], + [ + -0.04001639029581029, + -0.005023169780155089, + 0.0005348638865493812 + ], + [ + -0.02898642666567148, + -0.0038132625419050274, + 0.00017112449204315937 + ], + [ + -0.020040755503104028, + -0.003285604049756093, + -5.99680996492428e-05 + ], + [ + -0.012279264526700702, + -0.0028436064784807553, + -0.00028046903940482835 + ], + [ + -0.0057019537364615056, + -0.0024872698280790145, + -0.0004903783272235973 + ], + [ + -0.0003088231323864349, + -0.0022165940985508707, + -0.0006896959631055497 + ], + [ + 0.00390012728552451, + -0.0020315792898963235, + -0.0008784219470506854 + ], + [ + 0.006924897517271321, + -0.0019322254021153665, + -0.0010565562790590018 + ], + [ + 0.007905859560995541, + -0.0021037871557596038, + -0.0012460685984906903 + ], + [ + 0.0077335983403130845, + -0.002312773425331896, + -0.0014141849916191902 + ], + [ + 0.006722585018763761, + -0.0025530065933084423, + -0.0015523779067723093 + ], + [ + 0.0052724085933784455, + -0.002779346009552521, + -0.0016541018580553289 + ], + [ + 0.004170431460144888, + -0.0026189634041688227, + -0.0017130115051440008 + ], + [ + 0.0028931738525380273, + -0.0026119092068228773, + -0.0016639819018119902 + ], + [ + 0.0014358222528523916, + -0.002552508086413775, + -0.0015591827673096118 + ], + [ + 0.00026142101501250455, + -0.002706292425947083, + -0.001366270646392122 + ], + [ + -0.0005559947729008312, + -0.0028616753419048613, + -0.0011299936783660304 + ], + [ + -0.0009200893725620663, + -0.0029073898766904813, + -0.0008986445243590152 + ], + [ + -0.0005958881361848383, + -0.0029517079089028627, + -0.0007345700650694752 + ], + [ + 0.0006355811568535075, + -0.002744044792946845, + -0.0006765625921149723 + ], + [ + 0.0023177715663440456, + -0.0025648729074074237, + -0.0006514593644252734 + ], + [ + 0.004026514322735062, + -0.0021906324673615853, + -0.0006732611886632926 + ], + [ + 0.005449007696391032, + -0.0017426258633100157, + -0.0007249684923848992 + ], + [ + 0.0063290976762344995, + -0.0013019076444865801, + -0.0007779712370144056 + ], + [ + 0.006410935836579293, + -0.0008383144771056282, + -0.0008363651881855307 + ], + [ + 0.005891334882757546, + -0.0006675091910384257, + -0.0007990405411065632 + ], + [ + 0.004832426431571052, + -0.0005900292245369452, + -0.000732050087279675 + ], + [ + 0.0032342104830198315, + -0.000605874577601191, + -0.0006353938267048686 + ], + [ + 0.0010966870371038853, + -0.0007150452502311631, + -0.0005090717593821436 + ], + [ + -0.0015801439061767868, + -0.0009175412424268607, + -0.00035308388531150067 + ], + [ + -0.004796282346822179, + -0.0012133625541882864, + -0.00016743020449293912 + ], + [ + -0.0066864916103133035, + -0.002271009420015834, + -0.0009630555270629404 + ], + [ + -0.00629361483663479, + -0.002909982859686993, + -0.001497991105055772 + ], + [ + -0.005978879947570846, + -0.003467392455992202, + -0.0018964819686695983 + ], + [ + -0.005742286943121471, + -0.003943238208931462, + -0.0021585281179044187 + ], + [ + -0.005583835823286664, + -0.004337520118504773, + -0.0022841295527602345 + ], + [ + -0.005503526588066427, + -0.0046502381847121355, + -0.0022732862732370443 + ], + [ + -0.005501359237460745, + -0.004881392407553536, + -0.0021259982793348435 + ], + [ + -0.005176868531350897, + -0.004837423596509937, + -0.0016506811298589196 + ], + [ + -0.005119364777519493, + -0.004784075346723406, + -0.0010279957097209158 + ], + [ + -0.005148481190966689, + -0.004828744900573841, + -0.0003825988793794087 + ], + [ + -0.005283311609546388, + -0.005014144306813732, + 0.00014676831375152566 + ], + [ + -0.006087090688063198, + -0.005153352348613664, + 0.000489759004860101 + ], + [ + -0.007706251463013791, + -0.005349852475303575, + 0.0005721485363578809 + ], + [ + -0.010093582580901244, + -0.005624224059021288, + 0.0004872446901197793 + ], + [ + -0.012721665128036406, + -0.005833556913004089, + 0.0003556340282342273 + ], + [ + -0.015480173248084391, + -0.005924454057563125, + 0.00019384155677318137 + ], + [ + -0.018315753733294738, + -0.00589051614873232, + -2.5940828013719424e-06 + ], + [ + -0.02100377601386401, + -0.005750981662625242, + -0.00021421099428766153 + ], + [ + -0.023437796598174875, + -0.005513040794473463, + -0.0003612319076256501 + ], + [ + -0.025348836452974262, + -0.005199159658831351, + -0.0004420758112323292 + ], + [ + -0.026613968998934357, + -0.004899668798381517, + -0.0004932303489373174 + ], + [ + -0.027009890937812083, + -0.004627321905127426, + -0.0005997557253514931 + ], + [ + -0.02684730912734388, + -0.004297825546372973, + -0.0007557120596766425 + ], + [ + -0.02690823344326596, + -0.003834581459081799, + -0.0008905362945414554 + ], + [ + -0.02777698522407085, + -0.0037053918804341103, + -0.0007996597760637392 + ], + [ + -0.028811853366786648, + -0.0036368021843057406, + -0.0006313879273837399 + ], + [ + -0.030012837871413428, + -0.003628812370696703, + -0.0003857207485014596 + ], + [ + -0.03137993873795119, + -0.0036814224396069972, + -6.265823941689825e-05 + ], + [ + -0.032913155966399925, + -0.0037946323910366233, + 0.00033779959986994415 + ], + [ + -0.034612489556759635, + -0.003968442224985581, + 0.0008156527693590683 + ], + [ + -0.028278543220077543, + -0.005200724807295773, + -0.0005974712087766925 + ], + [ + -0.02195967501268634, + -0.006043400055458896, + -0.0017913348656526194 + ], + [ + -0.016509597036738335, + -0.0067498934804877085, + -0.002768945863234791 + ], + [ + -0.011928309292233534, + -0.0073202050823822085, + -0.0035303042015232067 + ], + [ + -0.008215811779171928, + -0.007754334861142398, + -0.004075409880517867 + ], + [ + -0.005372104497553522, + -0.008052282816768275, + -0.004404262900218773 + ], + [ + -0.003397187447378299, + -0.00821404894925982, + -0.004516863260625914 + ], + [ + -0.0027256118675774515, + -0.008055095959829258, + -0.004212627577150476 + ], + [ + -0.003085859072488608, + -0.00779644826905381, + -0.003665890713886434 + ], + [ + -0.0038461052289135603, + -0.007512008271272633, + -0.003009030139067657 + ], + [ + -0.004519823056592615, + -0.007299143935716762, + -0.002412044811290151 + ], + [ + -0.005222741490498669, + -0.007088311014167123, + -0.0019514745899961966 + ], + [ + -0.006635713835023719, + -0.007050787939531544, + -0.0017642473585644186 + ], + [ + -0.009125757689108584, + -0.007215912144301019, + -0.001726505039391187 + ], + [ + -0.012247164215345028, + -0.007438513583138508, + -0.0017682144850510182 + ], + [ + -0.015757739162487322, + -0.007649607464005699, + -0.001883421958791571 + ], + [ + -0.01942766319309034, + -0.007803203445090538, + -0.002053752549784382 + ], + [ + -0.022756011995311187, + -0.007853205286321994, + -0.002220259108913096 + ], + [ + -0.025355111988227173, + -0.007773417369443834, + -0.0023099688429456585 + ], + [ + -0.02703364791732317, + -0.0075478891138477935, + -0.0023135715048778426 + ], + [ + -0.02752147824261007, + -0.007191448069639019, + -0.002270542317943036 + ], + [ + -0.02654426912539725, + -0.006735909535151812, + -0.0022548876230394283 + ], + [ + -0.024623382262386292, + -0.006206230178692934, + -0.0022733455235740404 + ], + [ + -0.02296458552808403, + -0.005615593495800586, + -0.0022893069991776313 + ], + [ + -0.023588402673765933, + -0.005651928739584918, + -0.0021676622201951055 + ], + [ + -0.024774403440624492, + -0.005859310042060185, + -0.002003373835379913 + ], + [ + -0.02652258782865977, + -0.0062377374032264, + -0.0017964418447320597 + ], + [ + -0.028832955837871762, + -0.006787210823083567, + -0.001546866248251545 + ], + [ + -0.03170550746826048, + -0.007507730301631684, + -0.0012546470459383692 + ], + [ + -0.03514024271982591, + -0.00839929583887075, + -0.0009197842377925325 + ], + [ + -0.025442777160117107, + -0.006866543766306669, + -0.0010978097564759383 + ], + [ + -0.018063593045604315, + -0.005728934050416849, + -0.0012292184500171783 + ], + [ + -0.011621727866168451, + -0.004717540832955135, + -0.0013295881226649561 + ], + [ + -0.006117181621809513, + -0.0038323641139215246, + -0.0013989187744192712 + ], + [ + -0.0015499543125274962, + -0.00307340389331602, + -0.001437210405280124 + ], + [ + 0.0020799540616775955, + -0.0024406601711386205, + -0.0014444630152475146 + ], + [ + 0.00477254350080577, + -0.0019341329473893212, + -0.001420676604321439 + ], + [ + 0.005908288454545182, + -0.0016260487786924935, + -0.0013280105040349933 + ], + [ + 0.0061385682936253155, + -0.0014384421543735266, + -0.0011903761229154295 + ], + [ + 0.005688454640318575, + -0.0013776764698428187, + -0.0010392672432770853 + ], + [ + 0.004778668354613121, + -0.001390963671728526, + -0.000905964828400994 + ], + [ + 0.003830329838612425, + -0.0013388635905319617, + -0.0008664815465427851 + ], + [ + 0.0025644997091805516, + -0.0014352022190653947, + -0.0008300377197097231 + ], + [ + 0.0006825292543914258, + -0.0016656947671339832, + -0.0008944117257293436 + ], + [ + -0.0008526602535485637, + -0.002076071170798236, + -0.001020171367449487 + ], + [ + -0.00204046390676387, + -0.002539727325197919, + -0.0011488871430503094 + ], + [ + -0.0028877270432326784, + -0.002954312009138104, + -0.001242824443333625 + ], + [ + -0.003254840136947751, + -0.0032989911007348695, + -0.001356389735243449 + ], + [ + -0.0030363263929358776, + -0.0034694194606322724, + -0.0014972425314951293 + ], + [ + -0.002463910263634558, + -0.0035655322611489095, + -0.0015936955948257618 + ], + [ + -0.0017295802393448132, + -0.0034178646782750785, + -0.0015822233479013824 + ], + [ + -0.001318538287206611, + -0.003107071320357948, + -0.001453543110924878 + ], + [ + -0.0016318378186325057, + -0.002744686392988247, + -0.0012380807395716538 + ], + [ + -0.002992271998186764, + -0.0023879025249932163, + -0.0010539500592066805 + ], + [ + -0.0037885824613731797, + -0.002333558216391488, + -0.0008803262496513533 + ], + [ + -0.004787112275796654, + -0.002355067916358899, + -0.0006849441702905942 + ], + [ + -0.0059878614414571926, + -0.002452431624895456, + -0.00046780382112440646 + ], + [ + -0.007390829958354795, + -0.002625649342001158, + -0.00022890520215278968 + ], + [ + -0.008996017826489459, + -0.002874721067676006, + 3.1751686624255935e-05 + ], + [ + -0.010803425045861187, + -0.0031996468019199996, + 0.00031416684520672996 + ], + [ + -0.0019488616645421805, + -0.0032006255603434053, + 0.0020617931626032183 + ], + [ + 0.0034376073931463753, + -0.0035524918700426972, + 0.0034248005657670916 + ], + [ + 0.00810139244935033, + -0.0038039078790441157, + 0.004729350050882104 + ], + [ + 0.012042493504069687, + -0.0039548735873476595, + 0.005975441617948254 + ], + [ + 0.015260910557304441, + -0.00400538899495333, + 0.007163075266965542 + ], + [ + 0.017756643609054597, + -0.003955454101861126, + 0.008292250997933969 + ], + [ + 0.019529692659320103, + -0.003805068908071038, + 0.009362968810853516 + ], + [ + 0.01963298376190308, + -0.0034324735495453633, + 0.010445910110978793 + ], + [ + 0.019303839042021757, + -0.0028910336028203382, + 0.011475780649762752 + ], + [ + 0.018691194099504163, + -0.002356673184283226, + 0.012385697555539794 + ], + [ + 0.01785789287209928, + -0.0019826224085134694, + 0.013134844912283235 + ], + [ + 0.017747203694544467, + -0.0019040274983697025, + 0.013547995773346078 + ], + [ + 0.017190946774137208, + -0.002067596229641223, + 0.013689615599875908 + ], + [ + 0.016238281152521863, + -0.0025145511337004572, + 0.013672053262780086 + ], + [ + 0.015283583462871017, + -0.0033195575197482634, + 0.01347821903577524 + ], + [ + 0.014501320922900005, + -0.004335572965379579, + 0.01326642372050626 + ], + [ + 0.01385933678936812, + -0.005377458374767192, + 0.013087678931039692 + ], + [ + 0.013434605220264566, + -0.006274507670669177, + 0.012881471722582787 + ], + [ + 0.013492067648408199, + -0.0068412292394263025, + 0.012687653422098256 + ], + [ + 0.013426573294711329, + -0.0069964634399180435, + 0.012464521098283861 + ], + [ + 0.013113559068704218, + -0.006866308418884919, + 0.012194705169486696 + ], + [ + 0.011876656887290896, + -0.006536087666429536, + 0.011821687948752848 + ], + [ + 0.009448029900390287, + -0.006051286669995581, + 0.011368253676944886 + ], + [ + 0.006026551699046578, + -0.005522959875891889, + 0.010876891999988097 + ], + [ + 0.0032409584636234837, + -0.005314505786762225, + 0.010730721900383792 + ], + [ + 8.850472688556876e-05, + -0.005142975339438186, + 0.010669548539949163 + ], + [ + -0.0034308095111671485, + -0.005008368533919788, + 0.010693371918684236 + ], + [ + -0.007316984250534663, + -0.004910685370207028, + 0.010802192036589012 + ], + [ + -0.011570019491216972, + -0.004849925848299909, + 0.010996008893663492 + ], + [ + -0.016189915233214086, + -0.004826089968198431, + 0.011274822489907674 + ], + [ + -0.02140360174622582, + -0.0013253180332584488, + 0.010134204153087098 + ], + [ + -0.02632677411975517, + 0.0006942998437163748, + 0.008806350406501982 + ], + [ + -0.030833704136806014, + 0.0027003918953101298, + 0.007842595624569265 + ], + [ + -0.03492439179737836, + 0.004692958121522815, + 0.0072429398072889496 + ], + [ + -0.03859883710147219, + 0.006671998522354431, + 0.007007382954661032 + ], + [ + -0.04185704004908752, + 0.008637513097804979, + 0.0071359250666855134 + ], + [ + -0.044699000640224244, + 0.010589501847874438, + 0.007628566143362379 + ], + [ + -0.04719613737644733, + 0.012398865676679041, + 0.008786516143727557 + ], + [ + -0.04910660851362885, + 0.014335885774237396, + 0.010342240851298534 + ], + [ + -0.05058061597905294, + 0.016405764617644703, + 0.012194439436414777 + ], + [ + -0.051746603020795784, + 0.01850683354818591, + 0.014073544973131399 + ], + [ + -0.05223877649744618, + 0.02028527521745792, + 0.015481986912714917 + ], + [ + -0.05229320901928808, + 0.02164357780819745, + 0.016533398943798083 + ], + [ + -0.05234802641408444, + 0.02253898909295326, + 0.017086514395443494 + ], + [ + -0.05185925735480894, + 0.023055997968485696, + 0.017291630361809533 + ], + [ + -0.05124119484072817, + 0.023311923562696187, + 0.017257782651291183 + ], + [ + -0.05087259268517999, + 0.023565830344194273, + 0.017180079073352412 + ], + [ + -0.05031478028705386, + 0.02409605474121903, + 0.017292739462042777 + ], + [ + -0.049726644987050726, + 0.0250651284294097, + 0.017623900267674526 + ], + [ + -0.0487048914988426, + 0.02644919049893897, + 0.01822586802555702 + ], + [ + -0.046925738907116044, + 0.02816501519100694, + 0.01909525633515383 + ], + [ + -0.04500806085385796, + 0.030006631591640368, + 0.020152764092609465 + ], + [ + -0.043269267702349325, + 0.03167998511480699, + 0.021244346373204236 + ], + [ + -0.04180074518395491, + 0.0328352509866648, + 0.022225107862177587 + ], + [ + -0.04115054207274761, + 0.03308461185397986, + 0.022519662473009995 + ], + [ + -0.040847848647786414, + 0.032849083358293986, + 0.022569106140557474 + ], + [ + -0.040892664909071424, + 0.03212866549960728, + 0.022373438864820083 + ], + [ + -0.04128499085660264, + 0.030923358277919734, + 0.021932660645797818 + ], + [ + -0.04202482649038006, + 0.029233161693231348, + 0.02124677148349068 + ], + [ + -0.04311217181040368, + 0.027058075745542122, + 0.02031577137789867 + ], + [ + -0.03239816275717413, + 0.019701555245479542, + 0.01535016807322041 + ], + [ + -0.02362620337042995, + 0.014133408603239736, + 0.011386396925437303 + ], + [ + -0.016000058167425613, + 0.009276016832716987, + 0.007925282501240593 + ], + [ + -0.009519727148161121, + 0.005129379933911295, + 0.004966824800630277 + ], + [ + -0.004185210312636467, + 0.0016934979068226573, + 0.002511023823606358 + ], + [ + 3.4923391483351884e-06, + -0.0010316292485489237, + 0.000557879570168833 + ], + [ + 0.0030463808071933113, + -0.003046001532203445, + -0.0008926079596822875 + ], + [ + 0.004143939524097382, + -0.003704601533146089, + -0.001402039892088485 + ], + [ + 0.00417615689193155, + -0.0036796468451864156, + -0.0014111699415219963 + ], + [ + 0.0034014720853414605, + -0.003266773033186428, + -0.0011230091219923326 + ], + [ + 0.0021569867868030963, + -0.002834474426386619, + -0.0007992893781818011 + ], + [ + 0.0009773681484823175, + -0.0026880832266386757, + -0.0007995209634909283 + ], + [ + -0.0004817820069931161, + -0.0027084626360137603, + -0.0007293340604197203 + ], + [ + -0.0023275961197767136, + -0.0028002522544692617, + -0.0006978140390469079 + ], + [ + -0.0037122762566433824, + -0.003056638353478423, + -0.000680260917756193 + ], + [ + -0.004611291468023323, + -0.0033191287392061253, + -0.0006619286380182502 + ], + [ + -0.0049957429838998054, + -0.0035000339017210533, + -0.0006527118581563413 + ], + [ + -0.0047476830871940115, + -0.003640614484769454, + -0.0007081418522560962 + ], + [ + -0.003744519489699512, + -0.003596333031376967, + -0.0008016158072701326 + ], + [ + -0.0022636279465530693, + -0.0035188036937530316, + -0.0008403394809868338 + ], + [ + -0.000722524880627631, + -0.0031902673809717525, + -0.0008090447980899289 + ], + [ + 0.0003830060145450284, + -0.0027220857221216567, + -0.0007103394980734615 + ], + [ + 0.0007495045235011103, + -0.0022341501460891155, + -0.0005722424708367259 + ], + [ + 0.0001446121822807644, + -0.0017701295356892825, + -0.00046165485839767025 + ], + [ + -0.0005180563091696311, + -0.0015914023752042357, + -0.00038689434036434764 + ], + [ + -0.001620809348543236, + -0.0015018614679386168, + -0.0003124677585875288 + ], + [ + -0.003163646935840052, + -0.0015015068138924314, + -0.00023837511306721464 + ], + [ + -0.00514656907106008, + -0.0015903384130656782, + -0.00016461640380340513 + ], + [ + -0.007569575754203323, + -0.0017683562654583584, + -9.119163079610037e-05 + ], + [ + -0.010432666985269776, + -0.0020355603710704726, + -1.8100794045300384e-05 + ], + [ + 0.0007623400374674751, + 7.692816330553022e-05, + 8.073857720053783e-05 + ], + [ + 0.007595957012763995, + 0.0009236142535906314, + -4.346845427560948e-05 + ], + [ + 0.014217105692114571, + 0.001663339795789385, + -8.451392382347317e-05 + ], + [ + 0.020625786075519202, + 0.0022961047899017904, + -4.239783144305326e-05 + ], + [ + 0.02682199816297789, + 0.0028219092359278485, + 8.287982286565031e-05 + ], + [ + 0.03280574195449064, + 0.003240753133867559, + 0.00029131903910263753 + ], + [ + 0.03857701745005736, + 0.003552636483720913, + 0.0005829198172679075 + ], + [ + 0.04397014486949016, + 0.0034377372144587643, + 0.000992030253788194 + ], + [ + 0.04963639959479997, + 0.0033620629003739667, + 0.0015299917142853612 + ], + [ + 0.05512619310551231, + 0.003287267516236828, + 0.002125305681094826 + ], + [ + 0.0598865902446694, + 0.0032343994185440785, + 0.0027149529916455205 + ], + [ + 0.06346795267738692, + 0.0034295331415209497, + 0.003236910959967188 + ], + [ + 0.06519589043383793, + 0.003743448396084959, + 0.003595150966849249 + ], + [ + 0.06526230316433566, + 0.004327954452542617, + 0.00391851643334452 + ], + [ + 0.06418741262216919, + 0.004972218613466882, + 0.004117369346666851 + ], + [ + 0.06197661106029004, + 0.005701765362129047, + 0.004322191157587988 + ], + [ + 0.058604319357481276, + 0.006541132304393439, + 0.004561281108411851 + ], + [ + 0.05482532321001454, + 0.007471260982624104, + 0.0047860421993987535 + ], + [ + 0.0513139469223577, + 0.008565503110240194, + 0.005166150605998392 + ], + [ + 0.04870543005461929, + 0.009739121124749018, + 0.0057612514068907435 + ], + [ + 0.04664498335677969, + 0.010910586675676934, + 0.0066762534294172 + ], + [ + 0.044037861049980864, + 0.011924972712163574, + 0.007819923105184276 + ], + [ + 0.040169051222968315, + 0.012758041773372513, + 0.009116819784528909 + ], + [ + 0.03480665916358965, + 0.013392934756235913, + 0.010460976257334501 + ], + [ + 0.029700850572615727, + 0.01364485442103515, + 0.011472577126919188 + ], + [ + 0.024080219708939525, + 0.013671476722112915, + 0.012450819169884823 + ], + [ + 0.017944766572561145, + 0.01347280165946924, + 0.013395702386231428 + ], + [ + 0.01129449116348058, + 0.013048829233104128, + 0.014307226775959001 + ], + [ + 0.0041293934816978295, + 0.012399559443017572, + 0.015185392339067547 + ], + [ + -0.0035505264727870994, + 0.011524992289209581, + 0.016030199075557063 + ], + [ + -0.00983152024325033, + 0.011754232670292797, + 0.013451289971839695 + ], + [ + -0.0147394607685609, + 0.012361539370251232, + 0.010517606829934769 + ], + [ + -0.01905173885314603, + 0.013132093835431987, + 0.0081366663048798 + ], + [ + -0.02276835449700573, + 0.014065896065835063, + 0.0063084683966747835 + ], + [ + -0.02588930770013999, + 0.015162946061460458, + 0.005033013105319726 + ], + [ + -0.02841459846254881, + 0.016423243822308177, + 0.004310300430814623 + ], + [ + -0.030344226784232133, + 0.017846789348378172, + 0.004140330373159461 + ], + [ + -0.031194974065867073, + 0.019852133145686002, + 0.004853713799727055 + ], + [ + -0.03155133557646462, + 0.021988068010243726, + 0.006154995314142523 + ], + [ + -0.03132179623985233, + 0.024062579221860586, + 0.007865560719154237 + ], + [ + -0.03068884674539482, + 0.02590358354969821, + 0.009724239937915097 + ], + [ + -0.0302648564547138, + 0.02696680884081407, + 0.011272252300648936 + ], + [ + -0.029909887947670327, + 0.027464414339087213, + 0.012792154563829056 + ], + [ + -0.03074172600836047, + 0.027536746699590414, + 0.014043200105769347 + ], + [ + -0.03157898268044669, + 0.02735497100614749, + 0.015246852309922704 + ], + [ + -0.032609507723788865, + 0.02708001364805805, + 0.016355879309199167 + ], + [ + -0.03395035723933636, + 0.026958084464536985, + 0.01746870482924425 + ], + [ + -0.03515753691373247, + 0.027220781961176194, + 0.018795345040039425 + ], + [ + -0.03640631323054096, + 0.028050928480516595, + 0.020274429968347555 + ], + [ + -0.03716398373775015, + 0.029263288081072543, + 0.021995113469022276 + ], + [ + -0.03669858122311835, + 0.030750562009105274, + 0.023753802377626677 + ], + [ + -0.035252732856362747, + 0.03234162022897311, + 0.025407137319084637 + ], + [ + -0.033342098347995335, + 0.03382480704685829, + 0.026853349408074236 + ], + [ + -0.031202723940563715, + 0.03486662364680559, + 0.028009803950963467 + ], + [ + -0.03020418699115529, + 0.03496698685341889, + 0.028304880079121013 + ], + [ + -0.029352187382045196, + 0.03460677034589146, + 0.028172554915465803 + ], + [ + -0.028646725113233525, + 0.03378597412422339, + 0.027612828459997907 + ], + [ + -0.02808780018472027, + 0.032504598188414675, + 0.026625700712717332 + ], + [ + -0.027675412596505432, + 0.030762642538465307, + 0.025211171673624078 + ], + [ + -0.027409562348589014, + 0.02856010717437529, + 0.023369241342718138 + ], + [ + -0.01603025651942261, + 0.02069767511565261, + 0.01821734558242314 + ], + [ + -0.009538619670516859, + 0.01493457620911451, + 0.014182759382148444 + ], + [ + -0.0037502414555855013, + 0.009974415444950918, + 0.010661229308257013 + ], + [ + 0.0013348781253714678, + 0.005817192823161836, + 0.007652755360748848 + ], + [ + 0.005716739072354045, + 0.002462908343747263, + 0.005157337539623948 + ], + [ + 0.00939534138536223, + -8.843799329279894e-05, + 0.0031749758448823134 + ], + [ + 0.012370685064396005, + -0.0018368461879583672, + 0.0017056702765239295 + ], + [ + 0.013578769651816574, + -0.0019376861964817264, + 0.001246438576998175 + ], + [ + 0.014446055006889193, + -0.0012290272574531083, + 0.001273645305873362 + ], + [ + 0.01512663681865445, + -0.000171161662241664, + 0.0015657381638110289 + ], + [ + 0.015679604679511523, + 0.0007195614524140076, + 0.0018539691731050234 + ], + [ + 0.016857513448138385, + 0.0008631974423974698, + 0.0017607010244389757 + ], + [ + 0.017377998336085214, + 0.0007444885391465175, + 0.0016652735689164167 + ], + [ + 0.017115919364793057, + 0.00045910446325997725, + 0.0015543716126810022 + ], + [ + 0.01642860726656581, + -4.1783114501274554e-05, + 0.0013433437104272076 + ], + [ + 0.01550650009911852, + -0.0006054256329179005, + 0.0010984310310396944 + ], + [ + 0.014460033137369275, + -0.0010826044891412397, + 0.0008787595501908501 + ], + [ + 0.01354627289200617, + -0.001430341798021173, + 0.0006540087297159848 + ], + [ + 0.01324904348365873, + -0.001581823299004777, + 0.0004360127295107795 + ], + [ + 0.013171513172853385, + -0.001543154539047697, + 0.00023567748334874254 + ], + [ + 0.013066703690002027, + -0.0014019221430433665, + 8.797350383264044e-05 + ], + [ + 0.01234215269679435, + -0.001281474771823974, + 3.631916447232801e-05 + ], + [ + 0.010638532819199718, + -0.0012226572748281557, + 0.00011129791126604833 + ], + [ + 0.007910952349120495, + -0.0012634705511314448, + 0.0002474199616389224 + ], + [ + 0.005536436255578182, + -0.0013301149624505215, + 0.0004976377225745973 + ], + [ + 0.002758683507658439, + -0.0014452830665183524, + 0.000838623878656789 + ], + [ + -0.00042230589463870816, + -0.0016089748633349417, + 0.0012703784298854976 + ], + [ + -0.004006531951313258, + -0.0018211903529002896, + 0.001792901376260723 + ], + [ + -0.007993994662365216, + -0.0020819295352143955, + 0.002406192717782466 + ], + [ + -0.012384694027794567, + -0.0023911924102772604, + 0.003110252454450725 + ], + [ + -0.008314700665940198, + -0.002178692579777198, + 0.002196167994755283 + ], + [ + -0.0048555864141097155, + -0.0022845181409784174, + 0.0014942647053764475 + ], + [ + -0.0018798621079925268, + -0.002387785705817209, + 0.0008712271386211122 + ], + [ + 0.0006124722524113689, + -0.002488495274293573, + 0.0003270552944892773 + ], + [ + 0.0026214166671019723, + -0.002586646846407509, + -0.00013825082701905732 + ], + [ + 0.004146971136079281, + -0.0026822404221590167, + -0.0005246912259038918 + ], + [ + 0.005189135659343292, + -0.0027752760015480916, + -0.0008322659021652265 + ], + [ + 0.005557127876208383, + -0.0029209041878408785, + -0.0009899462648346367 + ], + [ + 0.005443049931623138, + -0.0030327134592051212, + -0.0010715802325269564 + ], + [ + 0.004928197288232567, + -0.0031332403200229966, + -0.0011109569537157379 + ], + [ + 0.003995309729994765, + -0.0032512194193583654, + -0.0011528482457355909 + ], + [ + 0.0027161189844740682, + -0.0031887827141707102, + -0.0012558707621934725 + ], + [ + 0.0011939698292894815, + -0.003293049666713263, + -0.0012861145693662287 + ], + [ + -0.0008174799919376817, + -0.003413033054380844, + -0.0013092276350060417 + ], + [ + -0.0024648283699465704, + -0.0036994572863105505, + -0.0012883477427407123 + ], + [ + -0.00365414459949243, + -0.003932484212333617, + -0.0012226760278227602 + ], + [ + -0.004288968186290587, + -0.003993214807805337, + -0.0011195994181066621 + ], + [ + -0.004185173900581611, + -0.003956294254541152, + -0.0010274312366711793 + ], + [ + -0.0030928300572054942, + -0.003688461091499534, + -0.0009809269294486815 + ], + [ + -0.0014475030827671377, + -0.003401307579938917, + -0.0009182504275842684 + ], + [ + 0.0003417807065843974, + -0.0029106480124933996, + -0.0008526986094004668 + ], + [ + 0.001862135674054273, + -0.002347654610614198, + -0.0007924066240096936 + ], + [ + 0.002756825677200733, + -0.0018431922928317285, + -0.0007488241024792851 + ], + [ + 0.002705324550642058, + -0.001420952765922102, + -0.0007477363249935197 + ], + [ + 0.0021136617463447336, + -0.0012714812293872883, + -0.0006960051188957718 + ], + [ + 0.0009609965983264288, + -0.0012435372386751607, + -0.0006363672478458876 + ], + [ + -0.000752670893412858, + -0.0013371207937857223, + -0.0005688227118438691 + ], + [ + -0.0030273407288731284, + -0.0015522318947189728, + -0.0004933715108897164 + ], + [ + -0.005863012908054381, + -0.0018888705414749126, + -0.0004100136449834295 + ], + [ + -0.009259687430956622, + -0.0023470367340535404, + -0.0003187491141250084 + ], + [ + -0.009059337750429509, + -0.003554897109321929, + -0.001415413830626494 + ], + [ + -0.01161398041917081, + -0.005401884435983839, + -0.0022371846650109696 + ], + [ + -0.013823429528521555, + -0.0069183561348392705, + -0.0029166832321075977 + ], + [ + -0.01568768507848174, + -0.00810431220588822, + -0.003453909531916379 + ], + [ + -0.017206747069051363, + -0.008959752649130692, + -0.003848863564437314 + ], + [ + -0.01838061550023043, + -0.009484677464566682, + -0.004101545329670401 + ], + [ + -0.01920929037201889, + -0.00967908665219617, + -0.004211954827615632 + ], + [ + -0.019974805349045315, + -0.00932297531283406, + -0.003985403947198565 + ], + [ + -0.020291374474142188, + -0.008585558314818267, + -0.003609034314522144 + ], + [ + -0.019928474059769767, + -0.007707913941896348, + -0.0032160425338439453 + ], + [ + -0.01890759673399142, + -0.0069410409528653065, + -0.0029401195752719374 + ], + [ + -0.01727230016473797, + -0.006024583516867509, + -0.0028338572043415614 + ], + [ + -0.015872769062535555, + -0.005635802164985059, + -0.002967581428286432 + ], + [ + -0.016036927280233572, + -0.005828548013734929, + -0.003255663208065748 + ], + [ + -0.017266475000075197, + -0.0064889520451909665, + -0.003709247225122665 + ], + [ + -0.01928477769455176, + -0.007561851078079563, + -0.004280208718055275 + ], + [ + -0.021629621704323154, + -0.00889497979056555, + -0.004885262624174432 + ], + [ + -0.023548869223335968, + -0.010260129836647824, + -0.005421389723613813 + ], + [ + -0.024816039831920274, + -0.011454581084464826, + -0.005808777554124805 + ], + [ + -0.02496435658336451, + -0.012452403241870379, + -0.005990424031490225 + ], + [ + -0.024208068613220522, + -0.01330917237974775, + -0.00601426053544629 + ], + [ + -0.02275261575890219, + -0.014093961870376988, + -0.005975192154099021 + ], + [ + -0.02128724208713987, + -0.014833255921444587, + -0.005891278771491058 + ], + [ + -0.02083994643069638, + -0.015597855009425766, + -0.005728831022178125 + ], + [ + -0.02153758974029794, + -0.01676267190854793, + -0.005471736277794005 + ], + [ + -0.022886905521937444, + -0.01805639369649382, + -0.005135131777362698 + ], + [ + -0.02488789377561494, + -0.01947902037326347, + -0.004719017520884215 + ], + [ + -0.027540554501330437, + -0.02103055193885688, + -0.00422339350835856 + ], + [ + -0.03084488769908393, + -0.02271098839327405, + -0.0036482597397857293 + ], + [ + -0.03480089336887542, + -0.02452032973651498, + -0.0029936162151657252 + ], + [ + -0.02634248350049769, + -0.018776690197343657, + -0.002555586599281929 + ], + [ + -0.020094006034680683, + -0.014888743608420003, + -0.00228364366805246 + ], + [ + -0.014588312254077175, + -0.011487213564558493, + -0.0020277033909971457 + ], + [ + -0.009825402158687161, + -0.00857210006575913, + -0.001787765768115987 + ], + [ + -0.005805275748510641, + -0.006143403112021911, + -0.0015638307994089837 + ], + [ + -0.002527933023547615, + -0.004201122703346837, + -0.0013558984848761357 + ], + [ + 6.626016201931941e-06, + -0.002745258839733898, + -0.001163968824517439 + ], + [ + 0.0014159104391798197, + -0.002268061031763936, + -0.0009997370391830159 + ], + [ + 0.0020705015158311076, + -0.002245895212076418, + -0.0008434265780920782 + ], + [ + 0.0021318242598665424, + -0.0025155369404847414, + -0.0007138853963630382 + ], + [ + 0.0017052716457607417, + -0.0028024359857580306, + -0.0006074131098098976 + ], + [ + 0.0009945415987082271, + -0.002624441467663725, + -0.0005033934033291971 + ], + [ + -0.0002594553028457181, + -0.0026055042431965174, + -0.0003978272298232562 + ], + [ + -0.0025207114345331366, + -0.00278813600731765, + -0.00043552806107942865 + ], + [ + -0.004711229328455198, + -0.0031812925315140884, + -0.0005409022794647133 + ], + [ + -0.006691898044954419, + -0.0036123045818820996, + -0.0006516550332178008 + ], + [ + -0.008216480751227728, + -0.003982258080925042, + -0.0007481915512815853 + ], + [ + -0.008852780660842729, + -0.004288514624766517, + -0.0008738770937570428 + ], + [ + -0.00834522872193275, + -0.004410929046297404, + -0.0009849058454729225 + ], + [ + -0.007113474478536001, + -0.004409956495479176, + -0.0010159998915000514 + ], + [ + -0.005456102115438553, + -0.004114680015768819, + -0.0009232064929741825 + ], + [ + -0.0039940972415945615, + -0.003634034602338203, + -0.000729006903460059 + ], + [ + -0.0033333871605418955, + -0.003122515076345411, + -0.0004615348020866587 + ], + [ + -0.003987279912658799, + -0.0026595076356265438, + -0.00018855782895174826 + ], + [ + -0.00487675290623346, + -0.0026793037510458406, + 3.156352997476684e-05 + ], + [ + -0.006332718767201411, + -0.002852089704116917, + 0.0002672308376913345 + ], + [ + -0.008355177495562659, + -0.0031778654948397818, + 0.0005184440941979529 + ], + [ + -0.010944129091317204, + -0.003656631123214435, + 0.0007852032994946226 + ], + [ + -0.01409957355446504, + -0.0042883865892408765, + 0.0010675084535813435 + ], + [ + -0.017821510885006178, + -0.0050731318929191065, + 0.0013653595564581153 + ], + [ + -0.012390191034768641, + -0.004192478597058361, + 0.0006885379179246845 + ], + [ + -0.008989733685753665, + -0.0037341219359827544, + 5.270200072055324e-05 + ], + [ + -0.005929607051424993, + -0.0032975227536743926, + -0.0004845232406320199 + ], + [ + -0.0032098111317826264, + -0.0028826810501332754, + -0.0009231378061330352 + ], + [ + -0.0008303459268265631, + -0.002489596825359403, + -0.001263141695782492 + ], + [ + 0.0012087885634431972, + -0.0021182700793527754, + -0.0015045349095803907 + ], + [ + 0.002907592339026654, + -0.0017687008121133867, + -0.0016473174475267276 + ], + [ + 0.004023734409583757, + -0.0014581051525764147, + -0.001596039878618095 + ], + [ + 0.0048850562496457785, + -0.0011358396947373534, + -0.001434930824808997 + ], + [ + 0.00553481462352083, + -0.0008508552419781673, + -0.0012420886257367278 + ], + [ + 0.005885601014476856, + -0.0006264543189327085, + -0.0010875986076469136 + ], + [ + 0.005965236190542714, + -0.00039587987526340426, + -0.0010301503530216385 + ], + [ + 0.005433755382056923, + -0.0003402941776390108, + -0.000996293779510192 + ], + [ + 0.0040212438791292025, + -0.0005238178233258041, + -0.0010682459552804244 + ], + [ + 0.0025600698575541777, + -0.0009613334764994805, + -0.0011947790517443223 + ], + [ + 0.0011378057739786789, + -0.0015144560555985797, + -0.0012991055462765917 + ], + [ + -0.00013731936592474277, + -0.0020572943081461305, + -0.0013416584856974327 + ], + [ + -0.0010035347025457528, + -0.002556314860525509, + -0.0013739197967446459 + ], + [ + -0.0012281945180050145, + -0.0029467938601830217, + -0.001391922588616902 + ], + [ + -0.0010084569492850646, + -0.003179710610519232, + -0.001320540349614751 + ], + [ + -0.00044691956572518127, + -0.0031590419115036066, + -0.001156695803127182 + ], + [ + -2.805012141035641e-05, + -0.0029767360878123275, + -0.0009396939535467014 + ], + [ + -0.00024035942990985988, + -0.002721098097870696, + -0.0006954404578610449 + ], + [ + -0.0014068335091480528, + -0.002432303686341913, + -0.0004813618937925312 + ], + [ + -0.002308682570760518, + -0.0023985355547509243, + -0.00028967674910258183 + ], + [ + -0.00347099799029857, + -0.0024088205199850722, + -9.634479792813518e-05 + ], + [ + -0.004893779767762214, + -0.002463158582044362, + 9.863395973080708e-05 + ], + [ + -0.006577027903151447, + -0.002561549740928793, + 0.00029525952387424474 + ], + [ + -0.008520742396466269, + -0.002703993996638366, + 0.000493531894502178 + ], + [ + -0.010724923247706686, + -0.0028904913491730804, + 0.0006934510716146071 + ], + [ + -0.011509777137600251, + -0.003159372384641098, + -2.869191256166154e-05 + ], + [ + -0.00978118429680747, + -0.0032105254904256407, + -0.0003394786356323185 + ], + [ + -0.008364421233437669, + -0.0032906823824325254, + -0.0005340290356335063 + ], + [ + -0.007259487947490852, + -0.0033998430606617517, + -0.0006123431125652253 + ], + [ + -0.006466384438967016, + -0.0035380075251133206, + -0.0005744208664274751 + ], + [ + -0.005985110707866161, + -0.0037051757757872316, + -0.0004202622972202559 + ], + [ + -0.005815666754188277, + -0.0039013478126834747, + -0.0001498674049435671 + ], + [ + -0.005757800806779857, + -0.004154190280905369, + 0.00047740739876377016 + ], + [ + -0.006186652893759468, + -0.004453319210916061, + 0.001181398902614326 + ], + [ + -0.006763105317588038, + -0.004797825038079334, + 0.0018552454858779747 + ], + [ + -0.007345895199925656, + -0.005153227184334418, + 0.0023916895542942834 + ], + [ + -0.008397672321646149, + -0.005201371170891959, + 0.0027349361498087738 + ], + [ + -0.0101942841125836, + -0.005185325997828785, + 0.0027472626992401596 + ], + [ + -0.01297300460189478, + -0.005185910731202503, + 0.0025913947022838278 + ], + [ + -0.016240152884290586, + -0.005172449576704124, + 0.002440381523094437 + ], + [ + -0.01989254937190506, + -0.005132365951835666, + 0.002309988785845423 + ], + [ + -0.023898166411207837, + -0.005069418777468952, + 0.0021988260389657404 + ], + [ + -0.02801349948232345, + -0.005006785656921155, + 0.0021044006316282187 + ], + [ + -0.03199920558450233, + -0.00500056837808336, + 0.002046247302762679 + ], + [ + -0.035320442060065856, + -0.00496651914428513, + 0.0020316031366506174 + ], + [ + -0.037669618446886106, + -0.004886067205242952, + 0.001983599187006092 + ], + [ + -0.038672453886251165, + -0.004667798247705463, + 0.00184440601105002 + ], + [ + -0.03856338325463841, + -0.004162340078249981, + 0.0016449139913715712 + ], + [ + -0.03811567837252077, + -0.0033224162861179626, + 0.0014531702833407395 + ], + [ + -0.038227260191703506, + -0.0029109450089734178, + 0.0015041842200963773 + ], + [ + -0.03812211282184327, + -0.0024860224398373415, + 0.0016268707908836063 + ], + [ + -0.03780023626294014, + -0.0020476485787097438, + 0.0018212299957024313 + ], + [ + -0.03726163051499412, + -0.001595823425590625, + 0.002087261834552853 + ], + [ + -0.0365062955780052, + -0.001130546980479985, + 0.0024249663074348703 + ], + [ + -0.035534231451973396, + -0.0006518192433778228, + 0.0028343434143484835 + ], + [ + -0.027150000425776546, + -0.0010871284909825217, + 0.001969420728473097 + ], + [ + -0.020301291788167756, + -0.0015048195117855529, + 0.0012624164481725379 + ], + [ + -0.014323439542678625, + -0.0018623360744208304, + 0.0006498499899616867 + ], + [ + -0.00921644368930915, + -0.002159678178888354, + 0.0001317213538405428 + ], + [ + -0.004980304228059337, + -0.0023968458251881243, + -0.0002919694601908932 + ], + [ + -0.0016150211589291766, + -0.0025738390133201406, + -0.000621222452132622 + ], + [ + 0.0008794055180813382, + -0.0026906577432843975, + -0.0008560376219846418 + ], + [ + 0.001958156254686288, + -0.002686833724653393, + -0.0009255940736630662 + ], + [ + 0.0022264675333538092, + -0.002632963621557856, + -0.000885940017647806 + ], + [ + 0.0018476284802546982, + -0.0025703057172753803, + -0.0007781996530884054 + ], + [ + 0.0010248333849918918, + -0.002523623536537244, + -0.0006569981639057627 + ], + [ + 2.6419376981283232e-05, + -0.002411686201176854, + -0.0006160939709960133 + ], + [ + -0.0012256281159918382, + -0.0024449815574533055, + -0.0005532662451858566 + ], + [ + -0.00283662328070265, + -0.002552526939823183, + -0.0005559977363299794 + ], + [ + -0.004025155605395594, + -0.0027864067124083757, + -0.0005799346484335851 + ], + [ + -0.004866968631462017, + -0.003007364935513909, + -0.0006091969556632046 + ], + [ + -0.005313688257923707, + -0.003149605592322435, + -0.000641589756692763 + ], + [ + -0.005198865444614882, + -0.0032284298416905208, + -0.000724511588382832 + ], + [ + -0.004427839360307684, + -0.0031494247627598224, + -0.000847206583508848 + ], + [ + -0.003204172241254695, + -0.0030662351703020724, + -0.0009287868996396313 + ], + [ + -0.0018670253196434762, + -0.002769662218785455, + -0.0009248986411907723 + ], + [ + -0.0008965056415238966, + -0.0023412566782945094, + -0.0008211233858783046 + ], + [ + -0.0006596413950306529, + -0.0019122178143065184, + -0.0006501336062907446 + ], + [ + -0.0015209159625386227, + -0.0015351260476141855, + -0.0005303273494985074 + ], + [ + -0.002465402492523326, + -0.0014784359196404646, + -0.0004380723772397493 + ], + [ + -0.0038773453115124833, + -0.0015323524576539849, + -0.0003413133156625667 + ], + [ + -0.005756744419506097, + -0.001696875661654751, + -0.00024005016476696126 + ], + [ + -0.00810359981650417, + -0.0019720055316427617, + -0.0001342829245529329 + ], + [ + -0.010917911502506702, + -0.002357742067618019, + -2.401159502048167e-05 + ], + [ + -0.014199679477513692, + -0.002854085269580522, + 9.076382383039279e-05 + ], + [ + -0.009921246434901778, + -0.0024651158368023366, + -2.6579661217651945e-05 + ], + [ + -0.006126868037097961, + -0.002458911607199793, + -0.0001837463598473921 + ], + [ + -0.002880135343448418, + -0.002462595245692246, + -0.00033276951398041396 + ], + [ + -0.0001810483539531494, + -0.002476166752279696, + -0.0004736491236167174 + ], + [ + 0.001970392931387845, + -0.0024996261269621435, + -0.0006063851887563026 + ], + [ + 0.003574188512574565, + -0.0025329733697395875, + -0.0007309777093991693 + ], + [ + 0.004630338389607013, + -0.0025762084806120232, + -0.0008474266855453159 + ], + [ + 0.004861872012261388, + -0.002698062034820912, + -0.0009823227273593723 + ], + [ + 0.00456059477810016, + -0.002804926789144271, + -0.001098806794578289 + ], + [ + 0.0038134894040307648, + -0.0029029491112762635, + -0.0011789258859544781 + ], + [ + 0.002679936290294901, + -0.0030012004662805214, + -0.0012193717637963126 + ], + [ + 0.0013684536958264305, + -0.0028758793334236125, + -0.0012446337755529628 + ], + [ + -4.408286126368811e-05, + -0.002957705343300902, + -0.0011869372664654312 + ], + [ + -0.0017630488348816904, + -0.003115141387629381, + -0.00115249953101389 + ], + [ + -0.0029968867529762922, + -0.0034641331892767318, + -0.0011045875817374076 + ], + [ + -0.0037175369511491833, + -0.003763631864430939, + -0.0010422603197516526 + ], + [ + -0.003909778352849914, + -0.0038998158198828305, + -0.000973933279866992 + ], + [ + -0.003488582261361794, + -0.003924948101755823, + -0.0009356849568927778 + ], + [ + -0.002361628970547693, + -0.003695299518559333, + -0.0009455458047662869 + ], + [ + -0.0008228493305565203, + -0.0034557311596261093, + -0.0009392922170523259 + ], + [ + 0.000719585811646391, + -0.002997625769294108, + -0.0008998487964420499 + ], + [ + 0.0019008736678483111, + -0.0024351444475507735, + -0.000814789880147799 + ], + [ + 0.002458820279366312, + -0.0019005212795409699, + -0.0007041405327529152 + ], + [ + 0.0021532251818779965, + -0.001445405866878419, + -0.0006350005411670748 + ], + [ + 0.0015338623854844868, + -0.0012780787050215609, + -0.0005758754142113124 + ], + [ + 0.00044092994216580507, + -0.0012327995778519214, + -0.0005193341089807028 + ], + [ + -0.0011255721480780455, + -0.0013095684853695073, + -0.0004653766254752482 + ], + [ + -0.0031656438852470624, + -0.001508385427574318, + -0.0004140029636949487 + ], + [ + -0.005679285269341252, + -0.001829250404466355, + -0.000365213123639804 + ], + [ + -0.008666496300360605, + -0.002272163416045616, + -0.0003190071053098142 + ], + [ + -0.006118898839441728, + -0.0020956010527361678, + -0.00026483627367901853 + ], + [ + -0.0034142980582584654, + -0.002219466258451164, + -0.00034000406525143656 + ], + [ + -0.0011125284669022606, + -0.002336494343055049, + -0.00041957923447249725 + ], + [ + 0.0007864099346268872, + -0.0024466853065478224, + -0.0005035617813422005 + ], + [ + 0.002282517146328977, + -0.0025500391489294842, + -0.0005919517058605464 + ], + [ + 0.003375793168204009, + -0.002646555870200035, + -0.0006847490080275349 + ], + [ + 0.0040662380002519745, + -0.0027362354703594684, + -0.0007819536878431642 + ], + [ + 0.004239012934834014, + -0.002872467068391587, + -0.0009367951392005734 + ], + [ + 0.003987666197114507, + -0.0029860374557029454, + -0.001079353895049206 + ], + [ + 0.0033566154498492562, + -0.0030928682860448782, + -0.0011919835192340503 + ], + [ + 0.002393325279570662, + -0.0031837701436367607, + -0.0012550025067184836 + ], + [ + 0.0011544293172240502, + -0.0030565287233136887, + -0.0012650965413285 + ], + [ + -0.00011082068454842585, + -0.0030393593402452015, + -0.0011829782979116883 + ], + [ + -0.001509239842132027, + -0.0030007366901999657, + -0.0010974472671970489 + ], + [ + -0.002361204140934517, + -0.003109233479369579, + -0.0009848152529245144 + ], + [ + -0.0027045188273836255, + -0.003221507796476283, + -0.0008654542899967271 + ], + [ + -0.002587355950145776, + -0.003267093432709824, + -0.0007644595226361178 + ], + [ + -0.001973889841222092, + -0.0032732542562622655, + -0.0007195002526084449 + ], + [ + -0.0008651851495962857, + -0.003073124406655162, + -0.0007441952455618638 + ], + [ + 0.0005194972316465763, + -0.002913020016116924, + -0.0007592463120669611 + ], + [ + 0.0017730889926422496, + -0.002591239399622358, + -0.0007579566415016701 + ], + [ + 0.002590743335509768, + -0.0021968194941183227, + -0.0007213021473733172 + ], + [ + 0.0027659185085645516, + -0.0018134569772324657, + -0.000657016754005207 + ], + [ + 0.0020785933225491954, + -0.0014493302590899556, + -0.000628497645177302 + ], + [ + 0.0012638977893500085, + -0.0013174404240019876, + -0.0006026649775897476 + ], + [ + 2.3245200743038808e-05, + -0.001268312946190809, + -0.0005764220919057107 + ], + [ + -0.0016433644432717082, + -0.0013019478256564238, + -0.0005497689881251927 + ], + [ + -0.0037359311426942324, + -0.0014183450623988314, + -0.0005227056662481939 + ], + [ + -0.006254454897524532, + -0.0016175046564180324, + -0.0004952321262747141 + ], + [ + -0.009198935707762607, + -0.0018994266077140272, + -0.0004673483682047532 + ], + [ + -0.0057397092385054705, + -0.0019344439209413235, + -0.0006437815211238987 + ], + [ + -0.0033285787811693462, + -0.0019211085728963908, + -0.0008500996713868006 + ], + [ + -0.0011963573573248332, + -0.0018975466960218295, + -0.0010279057429493056 + ], + [ + 0.0006569550330280697, + -0.00186375829031764, + -0.0011771997358114134 + ], + [ + 0.0022313583898893622, + -0.0018197433557838219, + -0.001297981649973124 + ], + [ + 0.0035268527132590434, + -0.0017655018924203753, + -0.0013902514854344378 + ], + [ + 0.004543438003137102, + -0.0017010339002272955, + -0.001454009242195351 + ], + [ + 0.005089341560350869, + -0.0015926398757721604, + -0.0014705836385630075 + ], + [ + 0.00545079158926684, + -0.0014536156148550366, + -0.0014443548925858855 + ], + [ + 0.005711760205442507, + -0.0013204339483807127, + -0.0014022214002262835 + ], + [ + 0.005737446948883382, + -0.0012280037187433646, + -0.0013710732920777296 + ], + [ + 0.005390263292837594, + -0.0011713262085865745, + -0.0013883413073631366 + ], + [ + 0.0045390715183287285, + -0.0013001388258397561, + -0.0013807245199592706 + ], + [ + 0.0030152481480092905, + -0.0015964297282607565, + -0.0014353059263983192 + ], + [ + 0.001658785735517485, + -0.0020732608560341307, + -0.001536454747832703 + ], + [ + 0.0005441555358243709, + -0.002574186406849058, + -0.0016283721460881306 + ], + [ + -0.0003434347538473977, + -0.0029788865811362524, + -0.001671885309072963 + ], + [ + -0.0008757019248902171, + -0.003283366231953272, + -0.0017072363755489734 + ], + [ + -0.0008982436444455868, + -0.003445660562894682, + -0.0017716059053979774 + ], + [ + -0.0004730258698714655, + -0.0034876353190365136, + -0.0017812909389892584 + ], + [ + 0.00029944639968824407, + -0.0032777305709074207, + -0.0017212109834617286 + ], + [ + 0.0009497695320440216, + -0.002895382540395711, + -0.001581175209263898 + ], + [ + 0.0008686867181340019, + -0.002473566511619261, + -0.001372883797638612 + ], + [ + -0.0005582913330368726, + -0.002097128835326445, + -0.0012124017442265889 + ], + [ + -0.0017304351835847626, + -0.0021119509969640864, + -0.0010541475682621947 + ], + [ + -0.003289262954637705, + -0.0022531530338437194, + -0.0008839572415349582 + ], + [ + -0.0052347746461957004, + -0.0025207349459653496, + -0.0007018307640448817 + ], + [ + -0.007566970258258751, + -0.002914696733328977, + -0.0005077681357919658 + ], + [ + -0.010285849790826855, + -0.0034350383959346007, + -0.00030176935677620983 + ], + [ + -0.01339141324390001, + -0.004081759933782221, + -8.383442699761465e-05 + ], + [ + -0.009193124144869436, + -0.0031835715612757473, + -0.00020924961491324904 + ], + [ + -0.005872410294293313, + -0.002826323965713918, + -0.00029262176661959735 + ], + [ + -0.003013581832742717, + -0.0025345828158168313, + -0.00038114715731158355 + ], + [ + -0.0006166387602176485, + -0.0023083481115844864, + -0.00047482578698920775 + ], + [ + 0.0013184189232818902, + -0.0021476198530168836, + -0.0005736576556524698 + ], + [ + 0.002791591217755903, + -0.0020523980401140236, + -0.0006776427633013699 + ], + [ + 0.0038028781232043833, + -0.002022682672875901, + -0.0007867811099359062 + ], + [ + 0.004048289137207485, + -0.002222424920081819, + -0.0009432220185112846 + ], + [ + 0.003834082070318393, + -0.0024472299703194454, + -0.0010902338937848542 + ], + [ + 0.0032795134142069977, + -0.0026544634566992237, + -0.0012043907945638928 + ], + [ + 0.002497446673871585, + -0.002797151888107578, + -0.0012735545045989855 + ], + [ + 0.001690311967218, + -0.002675546531111539, + -0.0013007584663619963 + ], + [ + 0.0008102182371327613, + -0.0026439679550797728, + -0.001224995853644465 + ], + [ + -0.00029526362208258996, + -0.002575291230229556, + -0.001119778411366025 + ], + [ + -0.0012044389606279777, + -0.002734224244689136, + -0.0009738989421417621 + ], + [ + -0.0018473016800983114, + -0.0029231865608407587, + -0.0008059523882944063 + ], + [ + -0.002129975902251477, + -0.003047421075847376, + -0.0006622521399161492 + ], + [ + -0.0018702313560088946, + -0.0031930664179455866, + -0.0006046257126900089 + ], + [ + -0.0007845906180956078, + -0.0031198547294035437, + -0.0006330885952814917 + ], + [ + 0.0007022852510357911, + -0.003055576473938975, + -0.0006702317658102983 + ], + [ + 0.0022175683013171367, + -0.002769590670247458, + -0.0006980375661127859 + ], + [ + 0.0035061383491043737, + -0.0023251609671631236, + -0.0006958478369173169 + ], + [ + 0.004291913363948884, + -0.0018243511780592127, + -0.000664120187433477 + ], + [ + 0.004192876149687584, + -0.0013232657207900692, + -0.0006474761700473879 + ], + [ + 0.003565758122072936, + -0.001144171067522455, + -0.000614464364830808 + ], + [ + 0.00240531833382829, + -0.0010567302850303163, + -0.0005687538375304068 + ], + [ + 0.0007115567849536515, + -0.0010609433733136573, + -0.0005103445881461859 + ], + [ + -0.00151552652455098, + -0.0011568103323724775, + -0.0004392366166781453 + ], + [ + -0.004275931594685605, + -0.001344331162206777, + -0.00035542992312628493 + ], + [ + -0.007569658425450222, + -0.0016235058628165573, + -0.000258924507490605 + ], + [ + -0.005034837108699701, + -0.0014004479386800677, + -0.00019326710823614862 + ], + [ + -0.0024979166241248887, + -0.0015803915839442473, + -0.0003062749702592278 + ], + [ + -0.0002829391629361345, + -0.0017316795734613208, + -0.0004082583490950279 + ], + [ + 0.0016100952748665633, + -0.001854311907231288, + -0.0004992172447435489 + ], + [ + 0.0031811866892832025, + -0.0019482885852541492, + -0.0005791516572047908 + ], + [ + 0.004430335080313786, + -0.002013609607529904, + -0.0006480615864787537 + ], + [ + 0.005357540447958304, + -0.002050274974058547, + -0.0007059470325654355 + ], + [ + 0.005950893291685767, + -0.0021043927579233535, + -0.000780765643167025 + ], + [ + 0.006291132424886636, + -0.0021044328091471363, + -0.0008387308465708672 + ], + [ + 0.006251085580073748, + -0.002048105621158109, + -0.0008698514867525229 + ], + [ + 0.0056347869530047326, + -0.0019634224331664864, + -0.0008580992833836264 + ], + [ + 0.0045636299046678645, + -0.0016739555363258327, + -0.0007893101398803907 + ], + [ + 0.0031571436086975492, + -0.0016852349328172842, + -0.0006737171847311424 + ], + [ + 0.0013101692700084246, + -0.0018424853094886797, + -0.0006197327970605071 + ], + [ + -0.00034037539590258846, + -0.002205432192901904, + -0.000550197003029344 + ], + [ + -0.0018214773191310308, + -0.0025587712191265394, + -0.00047615855156706244 + ], + [ + -0.002913204491311199, + -0.0028243055268783114, + -0.00042260231756814415 + ], + [ + -0.00327955041497943, + -0.0030473975607318952, + -0.000432389862584874 + ], + [ + -0.002632045223274114, + -0.0030164593496550883, + -0.0004942173305444075 + ], + [ + -0.0011897520104786515, + -0.002926137520826078, + -0.000540783664041306 + ], + [ + 0.0006317994796047823, + -0.0025317909430464863, + -0.0005415975468698104 + ], + [ + 0.0023081199471664533, + -0.0019340864751480995, + -0.0004807543806250922 + ], + [ + 0.003469058308306217, + -0.0013014569975469668, + -0.00037082935207235427 + ], + [ + 0.0037625891638116216, + -0.0007341658487826411, + -0.000279548604959192 + ], + [ + 0.003005939155901672, + -0.0006291069223375882, + -0.00018337022836969482 + ], + [ + 0.0015960149275192166, + -0.0006759874245224912, + -7.130407355685349e-05 + ], + [ + -0.00046718352133573275, + -0.0008748073553373533, + 5.6649859479331326e-05 + ], + [ + -0.0031836561906631727, + -0.0012255667147821748, + 0.0002004915707388594 + ], + [ + -0.006553403080463107, + -0.0017282655028569567, + 0.0003602210602217309 + ], + [ + -0.01057642419073554, + -0.0023829037195616967, + 0.000535838327927946 + ], + [ + -0.011231774372266702, + -0.0023979924743071433, + 0.0004594948997980377 + ], + [ + -0.0090876676208109, + -0.002105437162477093, + 0.0005040274305369607 + ], + [ + -0.0073466088186009216, + -0.0018852611673048354, + 0.0006293773832926384 + ], + [ + -0.0060085979656367685, + -0.0017374644887903706, + 0.0008355447580650709 + ], + [ + -0.005073635061918442, + -0.0016620471269336986, + 0.0011225295548542584 + ], + [ + -0.00454172010744594, + -0.0016590090817348198, + 0.0014903317736602007 + ], + [ + -0.0044128531022192465, + -0.0017283503531937284, + 0.0019389514144828941 + ], + [ + -0.004399414891394507, + -0.0018953960067009576, + 0.0026288049008473873 + ], + [ + -0.005080908054989866, + -0.00215271054984102, + 0.0033977019771281904 + ], + [ + -0.006128756996299172, + -0.0025034748254916753, + 0.004164403533410263 + ], + [ + -0.007334659281383143, + -0.002916780723551311, + 0.004825795749986914 + ], + [ + -0.0091881050959992, + -0.00314987207287307, + 0.005231748182770387 + ], + [ + -0.01164161951189131, + -0.0033401973651610182, + 0.005368728534803654 + ], + [ + -0.01463376719764443, + -0.0034292532749499085, + 0.005349691843289839 + ], + [ + -0.017533508731590645, + -0.003385379533719037, + 0.005301126903736004 + ], + [ + -0.020224082825576008, + -0.0032175495561842394, + 0.005216940593977815 + ], + [ + -0.0227953269313649, + -0.002961150743504292, + 0.005112038873364646 + ], + [ + -0.025080525525187632, + -0.0026431945502803466, + 0.005004564701078711 + ], + [ + -0.02708656692044162, + -0.002332801634951574, + 0.0048927300518024405 + ], + [ + -0.02860109840470275, + -0.0020503196331907777, + 0.004838452727735797 + ], + [ + -0.02971537651116827, + -0.0017955563888527493, + 0.004784680074262979 + ], + [ + -0.030201337567241235, + -0.0015082852857076167, + 0.004700549510557121 + ], + [ + -0.030348964089052417, + -0.001025336124875465, + 0.004601263371922069 + ], + [ + -0.031053358531894813, + -0.00024152740045777226, + 0.0045113458363764515 + ], + [ + -0.033329401485444735, + 0.00012528819222438732, + 0.004830595810213923 + ], + [ + -0.03620646466900307, + 0.00047350752618027054, + 0.005298154417799634 + ], + [ + -0.03968454808256988, + 0.000803130601409875, + 0.005914021659133593 + ], + [ + -0.043763651726145186, + 0.0011141574179132016, + 0.006678197534215803 + ], + [ + -0.04844377559972896, + 0.001406587975690249, + 0.0075906820430462615 + ], + [ + -0.05372491970332123, + 0.0016804222747410173, + 0.008651475185624969 + ], + [ + -0.044153621193546495, + 0.0005469382073811705, + 0.006933122730032874 + ], + [ + -0.03538386302133296, + -2.3872980678011214e-05, + 0.0055442105017683724 + ], + [ + -0.027719222084724424, + -0.0005313475570647363, + 0.004474721717897156 + ], + [ + -0.0211596983837209, + -0.0009754855217790051, + 0.0037246563784192233 + ], + [ + -0.01570529191832238, + -0.001356286874820817, + 0.003294014483334576 + ], + [ + -0.01135600268852887, + -0.0016737516161901723, + 0.0031827960326432135 + ], + [ + -0.008111830694340311, + -0.0019278797458870682, + 0.0033910010263451286 + ], + [ + -0.006476182293944104, + -0.0020316009290472056, + 0.004284295893909061 + ], + [ + -0.006146331874992235, + -0.002069387783620894, + 0.005515168467417588 + ], + [ + -0.006411650080389493, + -0.0021398461533968845, + 0.006882665264778824 + ], + [ + -0.006767214088975044, + -0.002298415230721096, + 0.008129168026494007 + ], + [ + -0.007527602586694552, + -0.002308775153317783, + 0.0088774296991407 + ], + [ + -0.009118691926669361, + -0.002348171252055534, + 0.00930101486069606 + ], + [ + -0.011772369326005436, + -0.0023460077910103035, + 0.00942642886939507 + ], + [ + -0.014939368901462143, + -0.002237233793002351, + 0.009523891449966416 + ], + [ + -0.018468384043409565, + -0.0020617893561528096, + 0.009557295633335884 + ], + [ + -0.022173537033665168, + -0.0018627201339345206, + 0.009516329188941085 + ], + [ + -0.0255269332253791, + -0.001594460747570452, + 0.0094568011275636 + ], + [ + -0.028550372233296786, + -0.0011901619299713986, + 0.009426880230296955 + ], + [ + -0.03113570449999379, + -0.0007332045036325097, + 0.00954369220238483 + ], + [ + -0.03313089432911377, + -0.00027350959633282753, + 0.00967483605252353 + ], + [ + -0.03418287606559054, + 0.00021137469257188972, + 0.009762991526024872 + ], + [ + -0.034636759652916314, + 0.0008821674849794517, + 0.009809872982130992 + ], + [ + -0.03526121717874887, + 0.001807386354115275, + 0.009801805321272943 + ], + [ + -0.03614643633645378, + 0.002315973327329293, + 0.009912932615482413 + ], + [ + -0.036995786327932205, + 0.002789115169815796, + 0.010053009901423661 + ], + [ + -0.037809267153184216, + 0.0032268118815747876, + 0.010222037179096713 + ], + [ + -0.03858687881220982, + 0.0036290634626062685, + 0.010420014448501567 + ], + [ + -0.039328621305009005, + 0.003995869912910236, + 0.010646941709638223 + ], + [ + -0.04003449463158178, + 0.004327231232486695, + 0.010902818962506684 + ], + [ + -0.029833175709664206, + 0.0026210060563015714, + 0.007844253996796679 + ], + [ + -0.021931912553133176, + 0.0013045152303861659, + 0.0055429371230286345 + ], + [ + -0.015017159609058639, + 0.00017459381349759894, + 0.003556900964271575 + ], + [ + -0.009088916877440602, + -0.0007687581943641286, + 0.0018861455205254982 + ], + [ + -0.0041471843582790505, + -0.0015255407931990175, + 0.0005306707917904063 + ], + [ + -0.0001919620515740024, + -0.0020957539830070687, + -0.0005095232219337019 + ], + [ + 0.0027767500426745494, + -0.002479397763788276, + -0.0012344365206468308 + ], + [ + 0.004160170035590263, + -0.0024827920914269066, + -0.0013155337281971435 + ], + [ + 0.004520036077280997, + -0.002313817213341392, + -0.0010825858442553616 + ], + [ + 0.004153519858919903, + -0.0020777737901377107, + -0.0007067506164867422 + ], + [ + 0.0033832628977042154, + -0.0018669928222212555, + -0.00038146131233212515 + ], + [ + 0.002516956602752054, + -0.0016968455507646945, + -0.0003525997238148081 + ], + [ + 0.0013213968021730713, + -0.0016653611009024925, + -0.0003548779676507725 + ], + [ + -0.0005447295136339617, + -0.0017831755918856717, + -0.0004665405731659367 + ], + [ + -0.002205876789709618, + -0.002063667140520586, + -0.0006164231912706175 + ], + [ + -0.0035870551270995093, + -0.002392490995568547, + -0.0007429173131283998 + ], + [ + -0.004574111335184468, + -0.0026974176914099607, + -0.0008233673566794871 + ], + [ + -0.004931859802006814, + -0.003012346442623266, + -0.0009373894561362323 + ], + [ + -0.004501354429784179, + -0.0032331401006997764, + -0.0010737131522073303 + ], + [ + -0.003684222690112722, + -0.003368660311741479, + -0.0011116822476778167 + ], + [ + -0.0027260287994527502, + -0.0032698837692257624, + -0.0010417482557112609 + ], + [ + -0.0020634069942275244, + -0.0030114851165278615, + -0.0008915954430156862 + ], + [ + -0.002082623501316357, + -0.0027016756973539426, + -0.000686191529840519 + ], + [ + -0.003093785270954702, + -0.0024064667348786106, + -0.0004968177468301052 + ], + [ + -0.0038563053325869874, + -0.002337948639118608, + -0.0003197128661972435 + ], + [ + -0.0049317430076807715, + -0.002321133533075442, + -0.00012291224985920188 + ], + [ + -0.006320098296236063, + -0.002356021416749118, + 9.358410218401761e-05 + ], + [ + -0.008021371198252861, + -0.002442612290139637, + 0.0003297761899324148 + ], + [ + -0.01003556171373117, + -0.0025809061532469984, + 0.0005856640133859896 + ], + [ + -0.012362669842670983, + -0.0027709030060712016, + 0.0008612475725447424 + ], + [ + -0.012110556329918847, + -0.00411690352703927, + -0.0005965186050710315 + ], + [ + -0.009757959860468273, + -0.0051003826049971146, + -0.0017371339298786147 + ], + [ + -0.007756482776370743, + -0.00592952353920751, + -0.002668263582944896 + ], + [ + -0.0061061250776262566, + -0.0066043263296704565, + -0.003389907564269875 + ], + [ + -0.004806886764234813, + -0.007124790976385954, + -0.003902065873853552 + ], + [ + -0.0038587678361964133, + -0.007490917479354001, + -0.004204738511695927 + ], + [ + -0.003261768293511047, + -0.007702705838574581, + -0.004297925477796989 + ], + [ + -0.002772515906464143, + -0.007541922911123556, + -0.0039628787897205775 + ], + [ + -0.002875977297110272, + -0.0072740823071756455, + -0.0034085901040271567 + ], + [ + -0.0032396904089317573, + -0.007008868414276414, + -0.0027577046709689112 + ], + [ + -0.0036841058113635168, + -0.006838619100192655, + -0.0021695996692797912 + ], + [ + -0.004725304807688742, + -0.006678601560276196, + -0.0017308362863560165 + ], + [ + -0.006668082027970715, + -0.006698705526953765, + -0.0015637144790539407 + ], + [ + -0.009560181680782813, + -0.006890173388039853, + -0.0015639162917464415 + ], + [ + -0.012769891208728118, + -0.007112443751282088, + -0.001636910340653198 + ], + [ + -0.01594166954944297, + -0.007245860914589434, + -0.0017459424580576147 + ], + [ + -0.019040110124624934, + -0.007228906182119205, + -0.0018788289611375646 + ], + [ + -0.021826799561420494, + -0.007048892988647977, + -0.002003439250720931 + ], + [ + -0.024374250402999405, + -0.006777230002180704, + -0.002069875865866167 + ], + [ + -0.026262292449477385, + -0.0064774683647525495, + -0.002103526638895609 + ], + [ + -0.027384549371674175, + -0.006205731384104027, + -0.0021293708034082494 + ], + [ + -0.027493387442482507, + -0.005970215685612285, + -0.0022018431934390822 + ], + [ + -0.02703435985853713, + -0.0057054445371268105, + -0.002309696285265284 + ], + [ + -0.027113006446137927, + -0.00537315665747082, + -0.002415145340029467 + ], + [ + -0.02869435905950265, + -0.005603206290141362, + -0.002304921737167758 + ], + [ + -0.030768038823053956, + -0.0060143135583944265, + -0.0021309414576518417 + ], + [ + -0.03333404573679191, + -0.006606478462230026, + -0.001893204501481725 + ], + [ + -0.03639237980071653, + -0.007379701001648159, + -0.0015917108686574074 + ], + [ + -0.03994304101482779, + -0.008333981176648826, + -0.001226460559178889 + ], + [ + -0.0439860293791257, + -0.009469318987232024, + -0.0007974535730461689 + ], + [ + -0.03253955954854968, + -0.007616631465075337, + -0.000928654349194288 + ], + [ + -0.02365379767627121, + -0.00623830506074627, + -0.0010121153258547493 + ], + [ + -0.015919004174269065, + -0.005041725934466384, + -0.001076586732786935 + ], + [ + -0.009335179042543253, + -0.00402689408623568, + -0.0011220685699908448 + ], + [ + -0.0039023222810937695, + -0.003193809516054155, + -0.0011485608374664788 + ], + [ + 0.0003795661100793879, + -0.0025424722239218113, + -0.0011560635352138374 + ], + [ + 0.0035104861309762044, + -0.0020728822098386437, + -0.001144576663232917 + ], + [ + 0.00470042077727144, + -0.0019410425419462726, + -0.0010926911969636522 + ], + [ + 0.004687792490473722, + -0.0019960065765207164, + -0.001022796750744445 + ], + [ + 0.0038715971076522175, + -0.0021745958797219616, + -0.0009413922760789919 + ], + [ + 0.002718972582667566, + -0.002363288111260634, + -0.0008565455337253315 + ], + [ + 0.001693063687108318, + -0.0024035663411587976, + -0.0008203687327843097 + ], + [ + 0.0005509390156354589, + -0.0024819862863097075, + -0.0007574383187440813 + ], + [ + -0.0009944453578480726, + -0.0025680040335445695, + -0.0007406107363969847 + ], + [ + -0.0021739908059644096, + -0.002745674233127673, + -0.0007648583466870125 + ], + [ + -0.0028290689117647485, + -0.0028818264037599782, + -0.0007785840164456906 + ], + [ + -0.0029752732464420825, + -0.002922527276313076, + -0.0007634446673443278 + ], + [ + -0.0026631850600337846, + -0.002921973098348506, + -0.0007729634962279804 + ], + [ + -0.001944718782897896, + -0.0027896313360239186, + -0.0007974153487875798 + ], + [ + -0.001112834471098991, + -0.002660259997361935, + -0.0007966038818865244 + ], + [ + -0.00041206050645106436, + -0.002425681670457977, + -0.0007542863733004048 + ], + [ + -0.00012752123423648125, + -0.002118533902409257, + -0.0006487455127780612 + ], + [ + -0.000530379573709654, + -0.0018086936272663217, + -0.0005021678170739375 + ], + [ + -0.0018687545829864692, + -0.0015392957327967363, + -0.00041473834902692043 + ], + [ + -0.0026411918990411785, + -0.0014860606824754876, + -0.00034355048447495937 + ], + [ + -0.003621221139233405, + -0.0015147705805509857, + -0.0002776912877377432 + ], + [ + -0.004808842303563151, + -0.0016254254270232347, + -0.00021716075881527265 + ], + [ + -0.0062040553920304185, + -0.0018180252218922346, + -0.00016195889770754797 + ], + [ + -0.007806860404635206, + -0.0020925699651579855, + -0.00011208570441456872 + ], + [ + -0.009617257341377515, + -0.0024490596568204864, + -6.754117893633532e-05 + ], + [ + -0.010393216048435698, + 0.003939658821723313, + 0.0037184792227468945 + ], + [ + -0.01114501569338866, + 0.01033126748665647, + 0.00749971352826565 + ], + [ + -0.011872703666445092, + 0.01672567146653714, + 0.011276467999581189 + ], + [ + -0.012576322870911247, + 0.023122776401094614, + 0.015049048514527949 + ], + [ + -0.013753018800891534, + 0.029845531865007286, + 0.01848969523209511 + ], + [ + -0.013255911721174046, + 0.029522488412641257, + 0.018817760646788504 + ], + [ + -0.009844297859190911, + 0.02908540862971114, + 0.019192320575021692 + ], + [ + -0.01011496797375333, + 0.029067986011163543, + 0.01872797654344422 + ], + [ + -0.01255127535362681, + 0.028811057476728647, + 0.01863802012848793 + ], + [ + -0.014983924091977373, + 0.028205829737219107, + 0.018632537765427854 + ], + [ + -0.016528978377335128, + 0.027250473471873465, + 0.018141505302204174 + ], + [ + -0.018713915626912048, + 0.025954807191413742, + 0.01662983422423155 + ], + [ + -0.018713915626912048, + 0.025954807191413742, + 0.01662983422423155 + ] + ] +} \ No newline at end of file diff --git a/gourmet-sp/public/favicon.svg b/gourmet-sp/public/favicon.svg new file mode 100644 index 0000000..f157bd1 --- /dev/null +++ b/gourmet-sp/public/favicon.svg @@ -0,0 +1,9 @@ + + + + diff --git a/gourmet-sp/public/images/avatar-anime.png b/gourmet-sp/public/images/avatar-anime.png new file mode 100644 index 0000000..7839996 Binary files /dev/null and b/gourmet-sp/public/images/avatar-anime.png differ diff --git a/gourmet-sp/public/instagram-logo.png b/gourmet-sp/public/instagram-logo.png new file mode 100644 index 0000000..9eb2e8a Binary files /dev/null and b/gourmet-sp/public/instagram-logo.png differ diff --git a/gourmet-sp/public/ios-install-demo.mp4 b/gourmet-sp/public/ios-install-demo.mp4 new file mode 100644 index 0000000..c416fbe Binary files /dev/null and b/gourmet-sp/public/ios-install-demo.mp4 differ diff --git a/gourmet-sp/public/manifest.webmanifest b/gourmet-sp/public/manifest.webmanifest new file mode 100644 index 0000000..1ca5b7c --- /dev/null +++ b/gourmet-sp/public/manifest.webmanifest @@ -0,0 +1,23 @@ +{ + "name": "グルメサポートAI", + "short_name": "グルメAI", + "description": "AIがあなたのお店探しをサポート", + "start_url": "/", + "display": "standalone", + "background_color": "#667eea", + "theme_color": "#667eea", + "orientation": "portrait", + "icons": [ + { + "src": "/pwa-152x152.png", + "sizes": "152x152", + "type": "image/png" + }, + { + "src": "/pwa-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "any maskable" + } + ] +} diff --git a/gourmet-sp/public/mic-off.svg b/gourmet-sp/public/mic-off.svg new file mode 100644 index 0000000..4e967c1 --- /dev/null +++ b/gourmet-sp/public/mic-off.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/gourmet-sp/public/mic-on.svg b/gourmet-sp/public/mic-on.svg new file mode 100644 index 0000000..5ddb700 --- /dev/null +++ b/gourmet-sp/public/mic-on.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gourmet-sp/public/pwa-152x152.png b/gourmet-sp/public/pwa-152x152.png new file mode 100644 index 0000000..9aee1de Binary files /dev/null and b/gourmet-sp/public/pwa-152x152.png differ diff --git a/gourmet-sp/public/pwa-192x192.png b/gourmet-sp/public/pwa-192x192.png new file mode 100644 index 0000000..7388ad1 Binary files /dev/null and b/gourmet-sp/public/pwa-192x192.png differ diff --git a/gourmet-sp/public/splash.mp4 b/gourmet-sp/public/splash.mp4 new file mode 100644 index 0000000..9c2cebc Binary files /dev/null and b/gourmet-sp/public/splash.mp4 differ diff --git a/gourmet-sp/public/wait.mp4 b/gourmet-sp/public/wait.mp4 new file mode 100644 index 0000000..e8ca1fb Binary files /dev/null and b/gourmet-sp/public/wait.mp4 differ diff --git a/gourmet-sp/src/assets/astro.svg b/gourmet-sp/src/assets/astro.svg new file mode 100644 index 0000000..8cf8fb0 --- /dev/null +++ b/gourmet-sp/src/assets/astro.svg @@ -0,0 +1 @@ + diff --git a/gourmet-sp/src/assets/background.svg b/gourmet-sp/src/assets/background.svg new file mode 100644 index 0000000..4b2be0a --- /dev/null +++ b/gourmet-sp/src/assets/background.svg @@ -0,0 +1 @@ + diff --git a/gourmet-sp/src/components/Concierge.astro b/gourmet-sp/src/components/Concierge.astro new file mode 100644 index 0000000..3e3ed0a --- /dev/null +++ b/gourmet-sp/src/components/Concierge.astro @@ -0,0 +1,318 @@ +--- +// Concierge.astro - コンシェルジュモードUI (チャットモードと同様の機能) +// LAM 3D Avatar Integration enabled +import ReservationModal from './ReservationModal.astro'; +import LAMAvatar from './LAMAvatar.astro'; + +export interface Props { + apiBaseUrl?: string; + useLAMAvatar?: boolean; // Enable LAM 3D Avatar + avatarPath?: string; // Path to LAM avatar .zip file +} + +const { + apiBaseUrl = '', + useLAMAvatar = true, // Default to LAM 3D Avatar + avatarPath = '/avatar/concierge.zip' +} = Astro.props; +--- + +
+ +
+ +

Loading...

+
+ + + +
+
+ +
+ +
+ +
+
+ +
+ {useLAMAvatar ? ( + + + ) : ( + +
+ AI Avatar +
+ )} +
+ +
🎤 Ready
+ +
+ +
+
+ + +
+
+ +
+ + + + +
+
+ + + + + + + + diff --git a/gourmet-sp/src/components/GourmetChat.astro b/gourmet-sp/src/components/GourmetChat.astro new file mode 100644 index 0000000..2bcf239 --- /dev/null +++ b/gourmet-sp/src/components/GourmetChat.astro @@ -0,0 +1,356 @@ +--- +// GourmetChat.astro - チャットモード(モード切替機能付き) +export interface Props { + apiBaseUrl?: string; +} + +const { apiBaseUrl = '' } = Astro.props; +--- + +
+
+ +

Loading...

+
+ + + + +
+
+ +
+ +
+ +
+
+ +
🎤 Ready
+
+ +
+
+ + +
+
+ +
+ + + + + + + +
+
+ + + + + + diff --git a/gourmet-sp/src/components/InstallPrompt.astro b/gourmet-sp/src/components/InstallPrompt.astro new file mode 100644 index 0000000..6211b99 --- /dev/null +++ b/gourmet-sp/src/components/InstallPrompt.astro @@ -0,0 +1,267 @@ + + + + + + + diff --git a/gourmet-sp/src/components/LAMAvatar.astro b/gourmet-sp/src/components/LAMAvatar.astro new file mode 100644 index 0000000..30bdcec --- /dev/null +++ b/gourmet-sp/src/components/LAMAvatar.astro @@ -0,0 +1,582 @@ +--- +// LAMAvatar.astro - LAM 3D Avatar Component using gaussian-splat-renderer-for-lam +// This component renders a 3D avatar using WebGL Gaussian Splatting +// With OpenAvatarChat WebSocket integration for real-time lip sync + +export interface Props { + avatarPath?: string; // Path to avatar .zip file + width?: string; + height?: string; + wsUrl?: string; // WebSocket URL for OpenAvatarChat backend + autoConnect?: boolean; // Auto-connect to WebSocket on load +} + +const { + avatarPath = '/avatar/concierge.zip', + width = '100%', + height = '100%', + wsUrl = '', + autoConnect = false +} = Astro.props; +--- + +
+
+
+
+

Loading 3D Avatar...

+
+
+ AI Avatar +
+
+ + + + diff --git a/gourmet-sp/src/components/ProposalCard.astro b/gourmet-sp/src/components/ProposalCard.astro new file mode 100644 index 0000000..cd3e7e9 --- /dev/null +++ b/gourmet-sp/src/components/ProposalCard.astro @@ -0,0 +1,514 @@ +--- +// ProposalCard.astro - レストラン提案カード +export interface Props { + proposal: { + name: string; + rating: number; + reviewCount: number; + heroImage: string; + official_website?: string; + maps_url?: string; + tabelog_url?: string; + category: string; + priceRange: string; + location: string; + description: string; + highlights: string[]; + tips: string; + }; +} + +const { proposal } = Astro.props; +--- + +
+
+ {`${proposal.name}のイメージ`} +
+ {proposal.category} +
+
+ + + + {proposal.location} +
+
+ +
+
+

{proposal.name}

+ +
+
+
+ {[...Array(5)].map((_, i) => ( + + + + ))} +
+ {proposal.rating} + ({proposal.reviewCount}件) +
+ +
+ + + + {proposal.priceRange} +
+
+
+ +
+

{proposal.description}

+
+ +
+

✨ おすすめポイント

+
    + {proposal.highlights.map((highlight) => ( +
  • + + + + + + {highlight} +
  • + ))} +
+
+ +
+
+ + + +
+
+

来店のポイント

+

{proposal.tips}

+
+
+ + +
+
+ + diff --git a/gourmet-sp/src/components/ReservationModal.astro b/gourmet-sp/src/components/ReservationModal.astro new file mode 100644 index 0000000..884fae8 --- /dev/null +++ b/gourmet-sp/src/components/ReservationModal.astro @@ -0,0 +1,1728 @@ +--- +// ReservationModal.astro - 予約依頼モーダル +export interface Props { + apiBaseUrl?: string; +} + +const { apiBaseUrl = '' } = Astro.props; +--- + +
+
+ + + + + +
+
+ + + + diff --git a/gourmet-sp/src/components/ShopCardList.astro b/gourmet-sp/src/components/ShopCardList.astro new file mode 100644 index 0000000..ef1ddea --- /dev/null +++ b/gourmet-sp/src/components/ShopCardList.astro @@ -0,0 +1,1106 @@ +--- +// ShopCardList.astro - ProposalCard形式のショップカードリスト +export interface Props { + apiBaseUrl?: string; +} + +const { apiBaseUrl = '' } = Astro.props; +--- + +
+
+ + + + diff --git a/gourmet-sp/src/constants/i18n.ts b/gourmet-sp/src/constants/i18n.ts new file mode 100644 index 0000000..cbe10c3 --- /dev/null +++ b/gourmet-sp/src/constants/i18n.ts @@ -0,0 +1,434 @@ +// src/constants/i18n.ts + +export const i18n = { + ja: { + // --- UIテキスト --- + pageTitle: 'グルメサポートAI', + pageTitleConcierge: 'AIコンシェルジュ', + pageSubtitle: 'AIがあなたにぴったりのお店をご提案します', + shopListTitle: 'おすすめのお店', + shopListEmpty: 'チャットで検索すると、ここにお店が表示されます', + footerMessage: '素敵なグルメ体験をお楽しみください', + initialGreeting: 'こんにちは!グルメサポートAIです。\n\n本日はどのようなお店をお探ししましょうか?', + initialGreetingConcierge: '初めまして、AIコンシェルジュです。\n宜しければ、あなたを何とお呼びすればいいか、教えて頂けますか?', + voiceStatusStopped: '🎤 音声認識: 停止中', + voiceStatusListening: '🎤 話してください...', + voiceStatusRecording: '🎤 録音中...', + voiceStatusWaiting: '🎤 認識待機中...', + voiceStatusRecognizing: '🔊 音声認識中...', + voiceStatusSynthesizing: '🔊 音声合成中...', + voiceStatusSpeaking: '🔊 音声再生中...', + voiceStatusComplete: '✅ 認識完了', + inputPlaceholder: 'メッセージを入力...', + btnVoiceInput: '音声入力', + btnTTSOn: '音声読み上げON', + btnTTSOff: '音声読み上げOFF', + btnSend: '送信', + btnReservation: '📞 予約依頼する', + clickPrompt: '音声を再生するには、画面をクリックしてください', + recordingTimeLimit: '録音時間が上限(55秒)に達したため自動停止しました', + micAccessError: 'マイクアクセスエラー:', + voiceNotRecognized: '音声が認識されませんでした', + sttError: '音声認識エラー:', + initError: '初期化に失敗しました。ページを再読み込みしてください。', + searchError: 'お店を検索してからご利用ください。', + loadingMessage: '提案するお店の情報を探しています。少々お待ちください...', + summaryTitle: '📋 質問要約書', + summaryFooter: '担当スタッフが内容を確認し、追ってご連絡いたします。', + confirmReset: '初期画面に戻りますか?\n\nチャット履歴とショップリストが削除されます', + resetSuccess: '✨ 初期画面に戻りました', + + // --- 会話・即答テキスト --- + ackConfirm: '確認しますので、少々お待ちください。', + ackSearch: 'お調べします。', + ackUnderstood: 'かしこまりました。', + ackYes: 'はい、承知しました。', + fallbackResponse: (text: string) => `"${text}"とのこと。お調べしますので、少々お待ちください。`, + additionalResponse: '只今、お店の情報を確認中です。もう少々お待ちください。', + ttsIntro: 'お待たせしました。', + waitMessage: 'AIがお店を検索しています...', + + // 日時指定があった場合の警告メッセージ + dateWarningMsg: 'お店の空席状況は、後ほど私がお店に直接電話して確認しますので、まずはお店のご希望をお聞かせ下さい。', + // 短すぎる発言への警告 + shortMsgWarning: 'すみません、もう少し詳しくご希望を教えていただけますか?', + + // --- ロジック用パターン(正規表現) --- + patterns: { + // 日時キーワード(明日、◯時など) + dateCheck: /(明日|明後日|来週|来月|今夜|今日|(\d+)月|(\d+)日|(\d+)時|(\d+):(\d+)|スケジュール|空いてる|空き)/, + + // フィラー(文頭の言い淀み除去用) + fillers: /^(えーと|あの|んー|うーん|えっと|まあ|ていうか|なんか|じゃあ|それじゃあ|そしたら|そうしたら|では|なら|だったら|とりあえず|まずは)[、,.\s]*/, + + // スマート即答振り分け用キーワード + ackQuestions: /ございますか|でしょうか|いかがですか|ありますか/, + ackLocation: /どこ|場所|エリア|地域|駅/, + ackSearch: /探して|探し|教えて|おすすめ|紹介/ + }, + + // --- 予約モーダル --- + reservationModalTitle: '予約依頼', + reservationShopSelect: 'お店を選択', + reservationSelectionGuide: '優先順にクリックしてください(最大3件)', + reservationResetBtn: 'やり直し', + reservationPriorityNote: '①→②→③の順で電話します。予約成立時点で終了します。', + reservationContentTitle: '予約内容', + reservationGuestCount: '人数', + reservationGuestOption: (n: number) => n === 10 ? '10名以上' : `${n}名`, + reservationDate: '希望日', + reservationTime: '開始時間', + reservationSelectPlaceholder: '選択してください', + reservationTimeFlexibility: '時間の許容範囲', + reservationTimeExact: '開始時間優先', + reservationTimePlus30: '+30分まで', + reservationTimePlus60: '+60分まで', + reservationTimePlus90: '+90分まで', + reservationSeatPreference: '席の希望', + reservationSeatTable: 'テーブル席', + reservationSeatCounter: 'カウンター席', + reservationSeatPrivate: '個室', + reservationOtherRequests: 'その他の希望', + reservationOtherRequestsPlaceholder: '誕生日ケーキ、アレルギー対応、禁煙席など', + reservationPerShopBtn: 'お店毎に予約内容を変える', + reservationBackToCommon: '共通設定に戻す', + reservationReserverInfo: '予約者情報', + reservationReserverName: 'お名前', + reservationReserverNamePlaceholder: '予約者のお名前', + reservationReserverPhone: '携帯番号', + reservationReserverPhoneHint: '※ 店舗への連絡先として伝えます', + reservationCancel: 'キャンセル', + reservationSubmit: '予約依頼を開始する', + reservationSelectionRemaining: (n: number) => `あと${n}件選択できます`, + reservationSelectionComplete: '選択完了(変更するには店舗をクリック)', + reservationSelectShopsFirst: '先にお店を選択してください', + reservationPhoneLabel: '電話番号', + reservationPhoneHint: '※ Places APIから取得。修正可能', + reservationPerShopPlaceholder: 'このお店への特別なリクエスト', + reservationAlertTitle: '予約依頼を受け付けました。', + reservationAlertReserver: '予約者', + reservationAlertContact: '連絡先', + reservationAlertShops: '選択されたお店', + reservationAlertNoPhone: '電話番号なし', + reservationAlertDevNote: '(この機能は現在開発中です)', + reservationVoiceRecording: '録音中...', + reservationVoiceWaiting: '認識待機中...', + reservationVoiceSpeaking: '話してください...', + reservationVoiceError: 'マイクアクセスエラー', + reservationVoiceRecognizing: '音声認識中...', + reservationVoiceComplete: '入力完了', + reservationVoiceNotRecognized: '音声が認識されませんでした' + }, + en: { + pageTitle: 'Gourmet Support AI', + pageTitleConcierge: 'AI Concierge', + pageSubtitle: 'AI will suggest the perfect restaurant for you', + shopListTitle: 'Recommended Restaurants', + shopListEmpty: 'Search in the chat to see restaurants here', + footerMessage: 'Enjoy your wonderful dining experience', + initialGreeting: 'Hello! I\'m the Gourmet Support AI.\n\nWhat kind of restaurant are you looking for today? I can help you find restaurants anywhere in the world.', + initialGreetingConcierge: 'Nice to meet you! I am your AI Concierge.\nMay I ask what I should call you?', + voiceStatusStopped: '🎤 Voice Recognition: Stopped', + voiceStatusListening: '🎤 Please speak...', + voiceStatusRecording: '🎤 Recording...', + voiceStatusWaiting: '🎤 Waiting for recognition...', + voiceStatusRecognizing: '🔊 Recognizing voice...', + voiceStatusSynthesizing: '🔊 Synthesizing voice...', + voiceStatusSpeaking: '🔊 Playing audio...', + voiceStatusComplete: '✅ Recognition complete', + inputPlaceholder: 'Enter message...', + btnVoiceInput: 'Voice input', + btnTTSOn: 'Voice reading ON', + btnTTSOff: 'Voice reading OFF', + btnSend: 'Send', + btnReservation: '📞 Request reservation', + clickPrompt: 'Click the screen to play audio', + recordingTimeLimit: 'Recording stopped automatically (55s limit reached)', + micAccessError: 'Microphone access error:', + voiceNotRecognized: 'Voice not recognized', + confirmReset: 'Reset to initial screen?\n\nChat history and shop list will be cleared', + resetSuccess: '✨ Reset to initial screen', + sttError: 'Voice recognition error:', + initError: 'Initialization failed. Please reload the page.', + searchError: 'Please search for restaurants first.', + loadingMessage: 'Searching for restaurant recommendations. Please wait...', + summaryTitle: '📋 Inquiry Summary', + summaryFooter: 'Our staff will review your inquiry and contact you shortly.', + ackConfirm: 'Let me check. Please wait a moment.', + ackSearch: 'Let me look that up.', + ackUnderstood: 'Understood.', + ackYes: 'Yes, I understand.', + fallbackResponse: (text: string) => `You said "${text}". Let me search for that. Please wait.`, + additionalResponse: 'Currently searching for restaurant information. Please wait a moment.', + ttsIntro: 'Thank you for waiting.', + waitMessage: 'AI is searching for restaurants...', + dateWarningMsg: 'I will check seat availability later by phone. First, please tell me your restaurant preferences.', + shortMsgWarning: 'Could you please provide more details?', + patterns: { + dateCheck: /(tomorrow|tonight|next week|next month|today|(\d+)(am|pm)|schedule|available|free)/i, + fillers: /^(um|uh|well|so|like|actually|basically|anyway|you know|then)[,.\s]*/i, + ackQuestions: /(do you have|is there|can you)/i, + ackLocation: /(where|location|area|station)/i, + ackSearch: /(find|search|recommend|tell me)/i + }, + // Reservation Modal + reservationModalTitle: 'Reservation Request', + reservationShopSelect: 'Select Restaurants', + reservationSelectionGuide: 'Click in priority order (up to 3)', + reservationResetBtn: 'Reset', + reservationPriorityNote: 'We will call in order ①→②→③. Process ends when reservation is confirmed.', + reservationContentTitle: 'Reservation Details', + reservationGuestCount: 'Party Size', + reservationGuestOption: (n: number) => n === 10 ? '10+ people' : `${n} ${n === 1 ? 'person' : 'people'}`, + reservationDate: 'Preferred Date', + reservationTime: 'Start Time', + reservationSelectPlaceholder: 'Please select', + reservationTimeFlexibility: 'Time Flexibility', + reservationTimeExact: 'Exact time preferred', + reservationTimePlus30: 'Up to +30 min', + reservationTimePlus60: 'Up to +60 min', + reservationTimePlus90: 'Up to +90 min', + reservationSeatPreference: 'Seating Preference', + reservationSeatTable: 'Table', + reservationSeatCounter: 'Counter', + reservationSeatPrivate: 'Private room', + reservationOtherRequests: 'Special Requests', + reservationOtherRequestsPlaceholder: 'Birthday cake, allergy accommodations, non-smoking, etc.', + reservationPerShopBtn: 'Set different details per restaurant', + reservationBackToCommon: 'Back to common settings', + reservationReserverInfo: 'Your Information', + reservationReserverName: 'Name', + reservationReserverNamePlaceholder: 'Your name', + reservationReserverPhone: 'Phone Number', + reservationReserverPhoneHint: '※ Will be provided to the restaurant', + reservationCancel: 'Cancel', + reservationSubmit: 'Submit Reservation Request', + reservationSelectionRemaining: (n: number) => `${n} more can be selected`, + reservationSelectionComplete: 'Selection complete (click to change)', + reservationSelectShopsFirst: 'Please select restaurants first', + reservationPhoneLabel: 'Phone Number', + reservationPhoneHint: '※ Retrieved from Places API. Editable', + reservationPerShopPlaceholder: 'Special requests for this restaurant', + reservationAlertTitle: 'Reservation request received.', + reservationAlertReserver: 'Name', + reservationAlertContact: 'Contact', + reservationAlertShops: 'Selected Restaurants', + reservationAlertNoPhone: 'No phone', + reservationAlertDevNote: '(This feature is currently under development)', + reservationVoiceRecording: 'Recording...', + reservationVoiceWaiting: 'Waiting for recognition...', + reservationVoiceSpeaking: 'Please speak...', + reservationVoiceError: 'Microphone access error', + reservationVoiceRecognizing: 'Recognizing voice...', + reservationVoiceComplete: 'Input complete', + reservationVoiceNotRecognized: 'Voice not recognized' + }, + zh: { + pageTitle: '美食支持AI', + pageTitleConcierge: 'AI礼宾服务', + pageSubtitle: 'AI为您推荐完美的餐厅', + shopListTitle: '推荐餐厅', + shopListEmpty: '在聊天中搜索后,餐厅将显示在这里', + footerMessage: '祝您享受美好的美食体验', + initialGreeting: '您好!我是美食支持AI。\n\n今天您想找什么样的餐厅呢?我可以帮您搜索全球各地的餐厅。', + initialGreetingConcierge: '您好!我是AI礼宾员。\n请问我应该怎么称呼您?', + voiceStatusStopped: '🎤 语音识别: 已停止', + voiceStatusListening: '🎤 请说话...', + voiceStatusRecording: '🎤 录音中...', + voiceStatusWaiting: '🎤 等待识别...', + voiceStatusRecognizing: '🔊 识别语音中...', + voiceStatusSynthesizing: '🔊 语音合成中...', + voiceStatusSpeaking: '🔊 播放音频中...', + voiceStatusComplete: '✅ 识别完成', + inputPlaceholder: '输入消息...', + btnVoiceInput: '语音输入', + btnTTSOn: '语音朗读开启', + btnTTSOff: '语音朗读关闭', + btnSend: '发送', + confirmReset: '返回初始画面?\n\n聊天记录和店铺列表将被清除', + resetSuccess: '✨ 已返回初始画面', + btnReservation: '📞 申请预约', + clickPrompt: '点击屏幕播放音频', + recordingTimeLimit: '录音已自动停止(达到55秒上限)', + micAccessError: '麦克风访问错误:', + voiceNotRecognized: '未识别到语音', + sttError: '语音识别错误:', + initError: '初始化失败。请重新加载页面。', + searchError: '请先搜索餐厅。', + loadingMessage: '正在搜索推荐餐厅。请稍候...', + summaryTitle: '📋 咨询摘要', + summaryFooter: '我们的工作人员将审核您的咨询并尽快联系您。', + ackConfirm: '我确认一下。请稍等。', + ackSearch: '我查一下。', + ackUnderstood: '明白了。', + ackYes: '好的,我知道了。', + fallbackResponse: (text: string) => `您说"${text}"。我搜索一下。请稍等。`, + additionalResponse: '正在确认餐厅信息。请稍候。', + ttsIntro: '让您久等了。', + waitMessage: 'AI正在搜索餐厅...', + dateWarningMsg: '我会稍后打电话确认空位。请先告诉我您对餐厅的要求。', + shortMsgWarning: '不好意思,请详细说明您的要求。', + patterns: { + dateCheck: /(明天|下周|今天|空位|预订)/, + fillers: /^(这个|那个|嗯|然后)[,,.\s]*/, + ackQuestions: /吗/, + ackLocation: /(哪里|地点|区域)/, + ackSearch: /(找|推荐|告诉)/ + }, + // 预约模态框 + reservationModalTitle: '预约申请', + reservationShopSelect: '选择餐厅', + reservationSelectionGuide: '按优先顺序点击(最多3家)', + reservationResetBtn: '重置', + reservationPriorityNote: '将按①→②→③的顺序致电。预约成功后结束。', + reservationContentTitle: '预约详情', + reservationGuestCount: '人数', + reservationGuestOption: (n: number) => n === 10 ? '10人以上' : `${n}人`, + reservationDate: '希望日期', + reservationTime: '开始时间', + reservationSelectPlaceholder: '请选择', + reservationTimeFlexibility: '时间弹性', + reservationTimeExact: '优先开始时间', + reservationTimePlus30: '最多+30分钟', + reservationTimePlus60: '最多+60分钟', + reservationTimePlus90: '最多+90分钟', + reservationSeatPreference: '座位偏好', + reservationSeatTable: '桌席', + reservationSeatCounter: '吧台席', + reservationSeatPrivate: '包间', + reservationOtherRequests: '其他要求', + reservationOtherRequestsPlaceholder: '生日蛋糕、过敏对应、禁烟座位等', + reservationPerShopBtn: '为每家餐厅设置不同详情', + reservationBackToCommon: '返回通用设置', + reservationReserverInfo: '预约人信息', + reservationReserverName: '姓名', + reservationReserverNamePlaceholder: '预约人姓名', + reservationReserverPhone: '手机号码', + reservationReserverPhoneHint: '※ 将告知餐厅作为联系方式', + reservationCancel: '取消', + reservationSubmit: '提交预约申请', + reservationSelectionRemaining: (n: number) => `还可选择${n}家`, + reservationSelectionComplete: '选择完成(点击可更改)', + reservationSelectShopsFirst: '请先选择餐厅', + reservationPhoneLabel: '电话号码', + reservationPhoneHint: '※ 从Places API获取。可编辑', + reservationPerShopPlaceholder: '对此餐厅的特殊要求', + reservationAlertTitle: '已接受预约申请。', + reservationAlertReserver: '预约人', + reservationAlertContact: '联系方式', + reservationAlertShops: '选择的餐厅', + reservationAlertNoPhone: '无电话', + reservationAlertDevNote: '(此功能目前正在开发中)', + reservationVoiceRecording: '录音中...', + reservationVoiceWaiting: '等待识别...', + reservationVoiceSpeaking: '请说话...', + reservationVoiceError: '麦克风访问错误', + reservationVoiceRecognizing: '识别语音中...', + reservationVoiceComplete: '输入完成', + reservationVoiceNotRecognized: '未识别到语音' + }, + ko: { + pageTitle: '미식 지원 AI', + pageTitleConcierge: 'AI 컨시어지', + pageSubtitle: 'AI가 완벽한 레스토랑을 추천해 드립니다', + shopListTitle: '추천 레스토랑', + shopListEmpty: '채팅에서 검색하면 여기에 레스토랑이 표시됩니다', + footerMessage: '멋진 미식 경험을 즐기세요', + initialGreeting: '안녕하세요! 미식 지원 AI입니다.\n\n오늘은 어떤 음식점을 찾으시나요? 전 세계 어디든 음식점을 검색해 드릴 수 있습니다.', + initialGreetingConcierge: '처음 뵙겠습니다! AI 컨시어지입니다.\n어떻게 불러드리면 될까요?', + voiceStatusStopped: '🎤 음성 인식: 정지됨', + voiceStatusListening: '🎤 말씀해 주세요...', + voiceStatusRecording: '🎤 녹음 중...', + voiceStatusWaiting: '🎤 인식 대기 중...', + voiceStatusRecognizing: '🔊 음성 인식 중...', + voiceStatusSynthesizing: '🔊 음성 합성 중...', + voiceStatusSpeaking: '🔊 오디오 재생 중...', + voiceStatusComplete: '✅ 인식 완료', + inputPlaceholder: '메시지 입력...', + btnVoiceInput: '음성 입력', + btnTTSOn: '음성 읽기 켜짐', + btnTTSOff: '음성 읽기 꺼짐', + btnSend: '전송', + confirmReset: '초기 화면으로 돌아가시겠습니까?\n\n채팅 기록과 매장 목록이 삭제됩니다', + resetSuccess: '✨ 초기 화면으로 돌아갔습니다', + btnReservation: '📞 예약 신청', + clickPrompt: '오디오를 재생하려면 화면을 클릭하세요', + recordingTimeLimit: '녹음이 자동으로 중지되었습니다 (55초 제한 도달)', + micAccessError: '마이크 액세스 오류:', + voiceNotRecognized: '음성이 인식되지 않았습니다', + sttError: '음성 인식 오류:', + initError: '초기화 실패. 페이지를 새로고침하세요.', + searchError: '먼저 레스토랑을 검색하세요.', + loadingMessage: '추천 레스토랑을 검색 중입니다. 잠시만 기다려주세요...', + summaryTitle: '📋 문의 요약', + summaryFooter: '담당자가 문의 내용을 검토하고 곧 연락드리겠습니다.', + ackConfirm: '확인하겠습니다. 잠시만 기다려주세요.', + ackSearch: '찾아보겠습니다.', + ackUnderstood: '알겠습니다.', + ackYes: '네, 알겠습니다.', + fallbackResponse: (text: string) => `"${text}"라고 말씀하셨네요. 검색해 보겠습니다. 잠시만 기다려주세요.`, + additionalResponse: '지금 레스토랑 정보를 확인 중입니다. 잠시만 기다려주세요.', + ttsIntro: '기다려 주셔서 감사합니다.', + waitMessage: 'AI가 레스토랑을 검색하고 있습니다...', + dateWarningMsg: '빈 자리는 나중에 전화로 확인할게요. 먼저 어떤 식당을 원하시는지 알려주세요.', + shortMsgWarning: '죄송합니다. 좀 더 자세히 말씀해 주시겠습니까?', + patterns: { + dateCheck: /(내일|다음주|오늘|자리|예약)/, + fillers: /^(저|그|음|그러면)[,,.\s]*/, + ackQuestions: /(나요|가요|있나요)/, + ackLocation: /(어디|장소|지역)/, + ackSearch: /(찾아|추천|알려)/ + }, + // 예약 모달 + reservationModalTitle: '예약 신청', + reservationShopSelect: '레스토랑 선택', + reservationSelectionGuide: '우선순위대로 클릭하세요 (최대 3곳)', + reservationResetBtn: '다시 하기', + reservationPriorityNote: '①→②→③ 순서로 전화합니다. 예약 성립 시 종료합니다.', + reservationContentTitle: '예약 내용', + reservationGuestCount: '인원', + reservationGuestOption: (n: number) => n === 10 ? '10명 이상' : `${n}명`, + reservationDate: '희망 날짜', + reservationTime: '시작 시간', + reservationSelectPlaceholder: '선택하세요', + reservationTimeFlexibility: '시간 허용 범위', + reservationTimeExact: '시작 시간 우선', + reservationTimePlus30: '+30분까지', + reservationTimePlus60: '+60분까지', + reservationTimePlus90: '+90분까지', + reservationSeatPreference: '좌석 희망', + reservationSeatTable: '테이블석', + reservationSeatCounter: '카운터석', + reservationSeatPrivate: '룸', + reservationOtherRequests: '기타 요청', + reservationOtherRequestsPlaceholder: '생일 케이크, 알레르기 대응, 금연석 등', + reservationPerShopBtn: '레스토랑별로 예약 내용 다르게 설정', + reservationBackToCommon: '공통 설정으로 돌아가기', + reservationReserverInfo: '예약자 정보', + reservationReserverName: '성함', + reservationReserverNamePlaceholder: '예약자 성함', + reservationReserverPhone: '전화번호', + reservationReserverPhoneHint: '※ 레스토랑에 연락처로 전달됩니다', + reservationCancel: '취소', + reservationSubmit: '예약 신청 시작', + reservationSelectionRemaining: (n: number) => `${n}곳 더 선택 가능`, + reservationSelectionComplete: '선택 완료 (변경하려면 클릭)', + reservationSelectShopsFirst: '먼저 레스토랑을 선택하세요', + reservationPhoneLabel: '전화번호', + reservationPhoneHint: '※ Places API에서 가져옴. 수정 가능', + reservationPerShopPlaceholder: '이 레스토랑에 대한 특별 요청', + reservationAlertTitle: '예약 신청을 접수했습니다.', + reservationAlertReserver: '예약자', + reservationAlertContact: '연락처', + reservationAlertShops: '선택한 레스토랑', + reservationAlertNoPhone: '전화번호 없음', + reservationAlertDevNote: '(이 기능은 현재 개발 중입니다)', + reservationVoiceRecording: '녹음 중...', + reservationVoiceWaiting: '인식 대기 중...', + reservationVoiceSpeaking: '말씀해 주세요...', + reservationVoiceError: '마이크 액세스 오류', + reservationVoiceRecognizing: '음성 인식 중...', + reservationVoiceComplete: '입력 완료', + reservationVoiceNotRecognized: '음성이 인식되지 않았습니다' + } +}; diff --git a/gourmet-sp/src/env.d.ts b/gourmet-sp/src/env.d.ts new file mode 100644 index 0000000..9bc5cb4 --- /dev/null +++ b/gourmet-sp/src/env.d.ts @@ -0,0 +1 @@ +/// \ No newline at end of file diff --git a/gourmet-sp/src/layouts/Layout.astro b/gourmet-sp/src/layouts/Layout.astro new file mode 100644 index 0000000..4cea277 --- /dev/null +++ b/gourmet-sp/src/layouts/Layout.astro @@ -0,0 +1,39 @@ +--- +// src/layouts/Layout.astro +import InstallPrompt from '../components/InstallPrompt.astro'; +--- + + + + + + + + + + + + + + Gourmet SP + + + + + + + + + + + \ No newline at end of file diff --git a/gourmet-sp/src/pages/404.astro b/gourmet-sp/src/pages/404.astro new file mode 100644 index 0000000..27e82e3 --- /dev/null +++ b/gourmet-sp/src/pages/404.astro @@ -0,0 +1,18 @@ +--- +import Layout from '../layouts/Layout.astro'; +// Layoutがない場合は ... で囲んでください +--- + + + + + 404 Not Found + + +
+

404

+

ページが見つかりません

+ トップへ戻る +
+ + diff --git a/gourmet-sp/src/pages/chat.astro b/gourmet-sp/src/pages/chat.astro new file mode 100644 index 0000000..f9cd30c --- /dev/null +++ b/gourmet-sp/src/pages/chat.astro @@ -0,0 +1,46 @@ +--- +// chat.astro - チャットのみのページ(テスト用) +import GourmetChat from '../components/GourmetChat.astro'; + +// APIベースURL +const apiBaseUrl = import.meta.env.PUBLIC_API_URL || ''; +--- + + + + + + + グルメサポートAI - チャット + + + + + + +
+ +
+ + diff --git a/gourmet-sp/src/pages/concierge.astro b/gourmet-sp/src/pages/concierge.astro new file mode 100644 index 0000000..7ec98f0 --- /dev/null +++ b/gourmet-sp/src/pages/concierge.astro @@ -0,0 +1,558 @@ +--- +// src/pages/concierge.astro +import ConciergeComponent from '../components/Concierge.astro'; +import ShopCardList from '../components/ShopCardList.astro'; + +const apiBaseUrl = import.meta.env.PUBLIC_API_URL || ''; +--- + + + + + + + Concierge Mode - AI Gourmet Chat + + + + + + + + + + + + + + + + + + +
+ + +
+
+ +
+ +
+
+

🍽 おすすめのお店

+

チャットで検索すると、ここにお店が表示されます

+
+ +
+
+ +
+ 素敵なグルメ体験をお楽しみください ✨ +
+
+ + + + diff --git a/gourmet-sp/src/pages/index.astro b/gourmet-sp/src/pages/index.astro new file mode 100644 index 0000000..06ded57 --- /dev/null +++ b/gourmet-sp/src/pages/index.astro @@ -0,0 +1,571 @@ + +--- +// index.astro - グルメサポートメインページ +import GourmetChat from '../components/GourmetChat.astro'; +import ShopCardList from '../components/ShopCardList.astro'; +import ReservationModal from '../components/ReservationModal.astro'; + +// APIベースURL(Cloud Runのエンドポイント) +// 本番環境では環境変数から取得 +const apiBaseUrl = import.meta.env.PUBLIC_API_URL || ''; +--- + + + + + + + グルメサポートAI - お店探しをお手伝い + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ +
+ +
+
+

🍽 おすすめのお店

+

チャットで検索すると、ここにお店が表示されます

+
+ +
+
+ +
+ 素敵なグルメ体験をお楽しみください ✨ +
+
+ + + + + + diff --git a/gourmet-sp/src/scripts/chat/audio-manager.ts b/gourmet-sp/src/scripts/chat/audio-manager.ts new file mode 100644 index 0000000..3f7caf7 --- /dev/null +++ b/gourmet-sp/src/scripts/chat/audio-manager.ts @@ -0,0 +1,733 @@ +// src/scripts/chat/audio-manager.ts +// ★根本修正: サーバー準備完了を待ってから音声送信開始2 + +const b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; +function fastArrayBufferToBase64(buffer: ArrayBuffer) { + let binary = ''; + const bytes = new Uint8Array(buffer); + const len = bytes.byteLength; + for (let i = 0; i < len; i += 3) { + const c1 = bytes[i]; + const c2 = bytes[i + 1]; + const c3 = bytes[i + 2]; + const enc1 = c1 >> 2; + const enc2 = ((c1 & 3) << 4) | (c2 >> 4); + const enc3 = ((c2 & 15) << 2) | (c3 >> 6); + const enc4 = c3 & 63; + binary += b64chars[enc1] + b64chars[enc2]; + if (Number.isNaN(c2)) { binary += '=='; } + else if (Number.isNaN(c3)) { binary += b64chars[enc3] + '='; } + else { binary += b64chars[enc3] + b64chars[enc4]; } + } + return binary; +} + +export class AudioManager { + private audioContext: AudioContext | null = null; + private globalAudioContext: AudioContext | null = null; + private audioWorkletNode: AudioWorkletNode | null = null; + private mediaStream: MediaStream | null = null; + private analyser: AnalyserNode | null = null; + + private mediaRecorder: MediaRecorder | null = null; + private audioChunks: Blob[] = []; + + private vadCheckInterval: number | null = null; + private silenceTimer: number | null = null; + private hasSpoken = false; + private recordingStartTime = 0; + private recordingTimer: number | null = null; + + // ★追加: 音声送信を遅延開始するためのフラグ + private canSendAudio = false; + private audioBuffer: Array<{chunk: ArrayBuffer, sampleRate: number}> = []; + + private readonly SILENCE_THRESHOLD = 35; + private SILENCE_DURATION: number; + private readonly MIN_RECORDING_TIME = 3000; + private readonly MAX_RECORDING_TIME = 60000; + + private consecutiveSilenceCount = 0; + private readonly REQUIRED_SILENCE_CHECKS = 5; + + private isIOS = /iPhone|iPad|iPod/i.test(navigator.userAgent); + + constructor(silenceDuration: number = 3500) { + this.SILENCE_DURATION = silenceDuration; + } + + public unlockAudioParams(elementToUnlock: HTMLAudioElement) { + if (this.globalAudioContext && this.globalAudioContext.state === 'suspended') { + this.globalAudioContext.resume(); + } + if (this.audioContext && this.audioContext.state === 'suspended') { + this.audioContext.resume(); + } + + // ★iOS対策: HTMLAudioElementも明示的にアンロック + if (elementToUnlock) { + elementToUnlock.muted = true; + elementToUnlock.play().then(() => { + elementToUnlock.pause(); + elementToUnlock.currentTime = 0; + elementToUnlock.muted = false; + }).catch(() => { + // エラーは無視(既にアンロック済みの場合) + }); + } + } + + public fullResetAudioResources() { + this.stopStreaming(); + + if (this.globalAudioContext && this.globalAudioContext.state !== 'closed') { + this.globalAudioContext.close(); + this.globalAudioContext = null; + } + if (this.audioContext && this.audioContext.state !== 'closed') { + this.audioContext.close(); + this.audioContext = null; + } + if (this.mediaStream) { + this.mediaStream.getTracks().forEach(track => track.stop()); + this.mediaStream = null; + } + } + + private async getUserMediaSafe(constraints: MediaStreamConstraints): Promise { + if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { + return navigator.mediaDevices.getUserMedia(constraints); + } + // @ts-ignore + const legacyGetUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia; + if (legacyGetUserMedia) { + return new Promise((resolve, reject) => { + legacyGetUserMedia.call(navigator, constraints, resolve, reject); + }); + } + throw new Error('マイク機能が見つかりません。HTTPS(鍵マーク)のURLでアクセスしているか確認してください。'); + } + + public async startStreaming( + socket: any, + languageCode: string, + onStopCallback: () => void, + onSpeechStart?: () => void + ) { + if (this.isIOS) { + await this.startStreaming_iOS(socket, languageCode, onStopCallback); + } else { + await this.startStreaming_Default(socket, languageCode, onStopCallback, onSpeechStart); + } + } + + public stopStreaming() { + if (this.isIOS) { + this.stopStreaming_iOS(); + } else { + this.stopStreaming_Default(); + } + if (this.mediaRecorder && this.mediaRecorder.state !== 'inactive') { + this.mediaRecorder.stop(); + } + this.mediaRecorder = null; + + // ★バッファとフラグをリセット + this.canSendAudio = false; + this.audioBuffer = []; + } + + // --- iOS用実装 --- + private async startStreaming_iOS(socket: any, languageCode: string, onStopCallback: () => void) { + try { + // ★初期化 + this.canSendAudio = false; + this.audioBuffer = []; + + if (this.recordingTimer) { clearTimeout(this.recordingTimer); this.recordingTimer = null; } + + if (this.audioWorkletNode) { + this.audioWorkletNode.port.onmessage = null; + this.audioWorkletNode.disconnect(); + this.audioWorkletNode = null; + } + + if (!this.globalAudioContext) { + // @ts-ignore + const AudioContextClass = window.AudioContext || window.webkitAudioContext; + this.globalAudioContext = new AudioContextClass({ + latencyHint: 'interactive', + sampleRate: 48000 + }); + } + + if (this.globalAudioContext.state === 'suspended') { + await this.globalAudioContext.resume(); + } + + const audioConstraints = { + channelCount: 1, + echoCancellation: true, + noiseSuppression: true, + autoGainControl: true, + sampleRate: 48000 + }; + + let needNewStream = false; + + if (this.mediaStream) { + const tracks = this.mediaStream.getAudioTracks(); + if (tracks.length === 0 || + tracks[0].readyState !== 'live' || + !tracks[0].enabled || + tracks[0].muted) { + needNewStream = true; + } + } else { + needNewStream = true; + } + + if (needNewStream) { + if (this.mediaStream) { + this.mediaStream.getTracks().forEach(track => track.stop()); + this.mediaStream = null; + } + this.mediaStream = await this.getUserMediaSafe({ audio: audioConstraints }); + } + + const targetSampleRate = 16000; + const nativeSampleRate = this.globalAudioContext.sampleRate; + const downsampleRatio = nativeSampleRate / targetSampleRate; + + const source = this.globalAudioContext.createMediaStreamSource(this.mediaStream); + const processorName = 'audio-processor-ios-' + Date.now(); + + const audioProcessorCode = ` + class AudioProcessor extends AudioWorkletProcessor { + constructor() { + super(); + this.bufferSize = 8192; + this.buffer = new Int16Array(this.bufferSize); + this.writeIndex = 0; + this.ratio = ${downsampleRatio}; + this.inputSampleCount = 0; + this.lastFlushTime = Date.now(); + } + process(inputs, outputs, parameters) { + const input = inputs[0]; + if (!input || input.length === 0) return true; + const channelData = input[0]; + if (!channelData || channelData.length === 0) return true; + for (let i = 0; i < channelData.length; i++) { + this.inputSampleCount++; + if (this.inputSampleCount >= this.ratio) { + this.inputSampleCount -= this.ratio; + if (this.writeIndex < this.bufferSize) { + const s = Math.max(-1, Math.min(1, channelData[i])); + const int16Value = s < 0 ? s * 0x8000 : s * 0x7FFF; + this.buffer[this.writeIndex++] = int16Value; + } + if (this.writeIndex >= this.bufferSize || + (this.writeIndex > 0 && Date.now() - this.lastFlushTime > 500)) { + this.flush(); + } + } + } + return true; + } + flush() { + if (this.writeIndex === 0) return; + const chunk = this.buffer.slice(0, this.writeIndex); + this.port.postMessage({ audioChunk: chunk }, [chunk.buffer]); + this.writeIndex = 0; + this.lastFlushTime = Date.now(); + } + } + registerProcessor('${processorName}', AudioProcessor); + `; + + const blob = new Blob([audioProcessorCode], { type: 'application/javascript' }); + const processorUrl = URL.createObjectURL(blob); + await this.globalAudioContext.audioWorklet.addModule(processorUrl); + URL.revokeObjectURL(processorUrl); + + // ★STEP1: AudioWorkletNode生成後、初期化完了を待つ + this.audioWorkletNode = new AudioWorkletNode(this.globalAudioContext, processorName); + await new Promise(resolve => setTimeout(resolve, 50)); + + // ★STEP2: onmessageハンドラー設定(バッファリング付き) + this.audioWorkletNode.port.onmessage = (event) => { + const { audioChunk } = event.data; + if (!socket || !socket.connected) return; + + try { + const base64 = fastArrayBufferToBase64(audioChunk.buffer); + + // ★送信許可が出ていない場合はバッファに保存 + if (!this.canSendAudio) { + this.audioBuffer.push({ chunk: audioChunk.buffer, sampleRate: 16000 }); + // バッファが大きくなりすぎないよう制限(最大3秒分 = 48チャンク) + if (this.audioBuffer.length > 48) { + this.audioBuffer.shift(); + } + return; + } + + // ★送信許可が出たら即座に送信 + socket.emit('audio_chunk', { chunk: base64, sample_rate: 16000 }); + } catch (e) { } + }; + + // ★STEP3: 音声グラフ接続 + source.connect(this.audioWorkletNode); + this.audioWorkletNode.connect(this.globalAudioContext.destination); + + // ★STEP4: Socket通知(サーバー準備開始) + if (socket && socket.connected) { + socket.emit('stop_stream'); + await new Promise(resolve => setTimeout(resolve, 100)); + } + + // ★STEP5: start_stream送信して、サーバー準備完了を待つ + const streamReadyPromise = new Promise((resolve) => { + const timeout = setTimeout(() => resolve(), 500); + socket.once('stream_ready', () => { + clearTimeout(timeout); + resolve(); + }); + }); + + socket.emit('start_stream', { + language_code: languageCode, + sample_rate: 16000 + }); + + // ★STEP6: サーバー準備完了を待機(最大500ms) + await streamReadyPromise; + + // ★STEP7: 送信許可フラグを立てる + this.canSendAudio = true; + + // ★STEP8: バッファに溜まった音声を一気に送信 + if (this.audioBuffer.length > 0) { + for (const buffered of this.audioBuffer) { + try { + const base64 = fastArrayBufferToBase64(buffered.chunk); + socket.emit('audio_chunk', { chunk: base64, sample_rate: buffered.sampleRate }); + } catch (e) { } + } + this.audioBuffer = []; + } + + this.recordingTimer = window.setTimeout(() => { + this.stopStreaming_iOS(); + onStopCallback(); + }, this.MAX_RECORDING_TIME); + + } catch (error) { + this.canSendAudio = false; + this.audioBuffer = []; + if (this.audioWorkletNode) { + this.audioWorkletNode.port.onmessage = null; + this.audioWorkletNode.disconnect(); + this.audioWorkletNode = null; + } + throw error; + } + } + + private stopStreaming_iOS() { + this.canSendAudio = false; + this.audioBuffer = []; + + if (this.recordingTimer) { clearTimeout(this.recordingTimer); this.recordingTimer = null; } + + if (this.audioWorkletNode) { + try { + this.audioWorkletNode.port.onmessage = null; + this.audioWorkletNode.disconnect(); + } catch (e) { } + this.audioWorkletNode = null; + } + + if (this.mediaStream) { + const tracks = this.mediaStream.getAudioTracks(); + if (tracks.length === 0 || tracks[0].readyState === 'ended') { + this.mediaStream.getTracks().forEach(track => track.stop()); + this.mediaStream = null; + } + } + } + + // --- PC / Android用実装(修正版) --- + private async startStreaming_Default( + socket: any, + languageCode: string, + onStopCallback: () => void, + onSpeechStart?: () => void + ) { + try { + // ★初期化 + this.canSendAudio = false; + this.audioBuffer = []; + + if (this.recordingTimer) { clearTimeout(this.recordingTimer); this.recordingTimer = null; } + + if (this.audioWorkletNode) { + this.audioWorkletNode.port.onmessage = null; + this.audioWorkletNode.disconnect(); + this.audioWorkletNode = null; + } + + if (!this.audioContext) { + // @ts-ignore + const AudioContextClass = window.AudioContext || window.webkitAudioContext; + this.audioContext = new AudioContextClass({ + latencyHint: 'interactive', + sampleRate: 48000 + }); + } + + if (this.audioContext!.state === 'suspended') { + await this.audioContext!.resume(); + } + + if (this.mediaStream) { + this.mediaStream.getTracks().forEach(track => track.stop()); + this.mediaStream = null; + } + + const audioConstraints = { + channelCount: 1, + echoCancellation: true, + noiseSuppression: true, + autoGainControl: true + }; + + this.mediaStream = await this.getUserMediaSafe({ audio: audioConstraints }); + + const targetSampleRate = 16000; + const nativeSampleRate = this.audioContext!.sampleRate; + const downsampleRatio = nativeSampleRate / targetSampleRate; + + const source = this.audioContext!.createMediaStreamSource(this.mediaStream); + + const audioProcessorCode = ` + class AudioProcessor extends AudioWorkletProcessor { + constructor() { + super(); + this.bufferSize = 16000; + this.buffer = new Int16Array(this.bufferSize); + this.writeIndex = 0; + this.ratio = ${downsampleRatio}; + this.inputSampleCount = 0; + this.flushThreshold = 8000; + } + process(inputs, outputs, parameters) { + const input = inputs[0]; + if (!input || input.length === 0) return true; + const channelData = input[0]; + if (!channelData || channelData.length === 0) return true; + for (let i = 0; i < channelData.length; i++) { + this.inputSampleCount++; + if (this.inputSampleCount >= this.ratio) { + this.inputSampleCount -= this.ratio; + if (this.writeIndex < this.bufferSize) { + const s = Math.max(-1, Math.min(1, channelData[i])); + const int16Value = s < 0 ? s * 0x8000 : s * 0x7FFF; + this.buffer[this.writeIndex++] = int16Value; + } + if (this.writeIndex >= this.bufferSize) { + this.flush(); + } + } + } + return true; + } + flush() { + if (this.writeIndex === 0) return; + const chunk = this.buffer.slice(0, this.writeIndex); + this.port.postMessage({ audioChunk: chunk }, [chunk.buffer]); + this.writeIndex = 0; + } + } + registerProcessor('audio-processor', AudioProcessor); + `; + + try { + const blob = new Blob([audioProcessorCode], { type: 'application/javascript' }); + const processorUrl = URL.createObjectURL(blob); + await this.audioContext!.audioWorklet.addModule(processorUrl); + URL.revokeObjectURL(processorUrl); + } catch (workletError) { + throw new Error(`音声処理初期化エラー: ${(workletError as Error).message}`); + } + + // ★STEP1: AudioWorkletNode生成後、初期化完了を待つ + this.audioWorkletNode = new AudioWorkletNode(this.audioContext!, 'audio-processor'); + await new Promise(resolve => setTimeout(resolve, 50)); + + // ★STEP2: onmessageハンドラー設定(バッファリング付き) + this.audioWorkletNode.port.onmessage = (event) => { + const { audioChunk } = event.data; + if (!socket || !socket.connected) return; + + try { + // ★送信許可が出ていない場合はバッファに保存 + if (!this.canSendAudio) { + this.audioBuffer.push({ chunk: audioChunk, sampleRate: 16000 }); + if (this.audioBuffer.length > 48) { + this.audioBuffer.shift(); + } + return; + } + + // ★送信許可が出たら即座に送信 + const blob = new Blob([audioChunk], { type: 'application/octet-stream' }); + const reader = new FileReader(); + reader.onload = () => { + const result = reader.result as string; + const base64 = result.split(',')[1]; + socket.emit('audio_chunk', { chunk: base64, sample_rate: 16000 }); + }; + reader.readAsDataURL(blob); + } catch (e) { } + }; + + // ★STEP3: 音声グラフ接続 + source.connect(this.audioWorkletNode); + this.audioWorkletNode.connect(this.audioContext!.destination); + + // ★待機: AudioWorkletが音声処理を開始するまで + await new Promise(resolve => setTimeout(resolve, 200)); + + // ★STEP4: Socket通知(サーバー準備開始) + if (socket && socket.connected) { + socket.emit('stop_stream'); + await new Promise(resolve => setTimeout(resolve, 100)); + } + + // ★STEP5: start_stream送信して、サーバー準備完了を待つ + const streamReadyPromise = new Promise((resolve) => { + const timeout = setTimeout(() => resolve(), 700); + socket.once('stream_ready', () => { + clearTimeout(timeout); + resolve(); + }); + }); + + socket.emit('start_stream', { + language_code: languageCode, + sample_rate: 16000 + }); + + // ★STEP6: サーバー準備完了を待機(最大700ms) + await streamReadyPromise; + + // ★追加待機: バッファに音声を蓄積 + await new Promise(resolve => setTimeout(resolve, 200)); + + // ★STEP7: 送信許可フラグを立てる + this.canSendAudio = true; + + // ★STEP8: バッファに溜まった音声を一気に送信(順序保証) + if (this.audioBuffer.length > 0) { + for (const buffered of this.audioBuffer) { + try { + const blob = new Blob([buffered.chunk], { type: 'application/octet-stream' }); + const base64 = await new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.onload = () => { + const result = reader.result as string; + resolve(result.split(',')[1]); + }; + reader.onerror = reject; + reader.readAsDataURL(blob); + }); + socket.emit('audio_chunk', { chunk: base64, sample_rate: buffered.sampleRate }); + } catch (e) { } + } + this.audioBuffer = []; + } + + // VAD設定 + this.analyser = this.audioContext!.createAnalyser(); + this.analyser.fftSize = 512; + source.connect(this.analyser); + const dataArray = new Uint8Array(this.analyser.frequencyBinCount); + this.hasSpoken = false; + this.recordingStartTime = Date.now(); + this.consecutiveSilenceCount = 0; + + this.vadCheckInterval = window.setInterval(() => { + if (!this.analyser) return; + if (Date.now() - this.recordingStartTime < this.MIN_RECORDING_TIME) return; + this.analyser.getByteFrequencyData(dataArray); + const average = dataArray.reduce((a, b) => a + b, 0) / dataArray.length; + + if (average > this.SILENCE_THRESHOLD) { + this.hasSpoken = true; + this.consecutiveSilenceCount = 0; + if (this.silenceTimer) { + clearTimeout(this.silenceTimer); + this.silenceTimer = null; + } + if (onSpeechStart) onSpeechStart(); + } else if (this.hasSpoken) { + this.consecutiveSilenceCount++; + if (this.consecutiveSilenceCount >= this.REQUIRED_SILENCE_CHECKS && !this.silenceTimer) { + this.silenceTimer = window.setTimeout(() => { + this.stopStreaming_Default(); + onStopCallback(); + }, this.SILENCE_DURATION); + } + } + }, 100); + + this.recordingTimer = window.setTimeout(() => { + this.stopStreaming_Default(); + onStopCallback(); + }, this.MAX_RECORDING_TIME); + + } catch (error) { + this.canSendAudio = false; + this.audioBuffer = []; + if (this.mediaStream) { + this.mediaStream.getTracks().forEach(track => track.stop()); + this.mediaStream = null; + } + throw error; + } + } + + private stopVAD_Default() { + if (this.vadCheckInterval) { clearInterval(this.vadCheckInterval); this.vadCheckInterval = null; } + if (this.silenceTimer) { clearTimeout(this.silenceTimer); this.silenceTimer = null; } + if (this.analyser) { this.analyser = null; } + this.consecutiveSilenceCount = 0; + if (this.audioContext && this.audioContext.state !== 'closed') { + this.audioContext.close(); + this.audioContext = null; + } + } + + private stopStreaming_Default() { + this.stopVAD_Default(); + this.canSendAudio = false; + this.audioBuffer = []; + + if (this.recordingTimer) { clearTimeout(this.recordingTimer); this.recordingTimer = null; } + + if (this.audioWorkletNode) { + this.audioWorkletNode.port.onmessage = null; + this.audioWorkletNode.disconnect(); + this.audioWorkletNode = null; + } + if (this.mediaStream) { + this.mediaStream.getTracks().forEach(track => track.stop()); + this.mediaStream = null; + } + this.hasSpoken = false; + this.consecutiveSilenceCount = 0; + } + + // --- レガシー録音 --- + public async startLegacyRecording( + onStopCallback: (audioBlob: Blob) => void, + onSpeechStart?: () => void + ) { + try { + if (this.recordingTimer) { clearTimeout(this.recordingTimer); this.recordingTimer = null; } + + const stream = await this.getUserMediaSafe({ + audio: { + channelCount: 1, + sampleRate: 16000, + echoCancellation: true, + noiseSuppression: true + } + }); + this.mediaStream = stream; + + // @ts-ignore + this.mediaRecorder = new MediaRecorder(stream, { mimeType: 'audio/webm;codecs=opus' }); + this.audioChunks = []; + this.hasSpoken = false; + this.recordingStartTime = Date.now(); + this.consecutiveSilenceCount = 0; + + // @ts-ignore + const AudioContextClass = window.AudioContext || window.webkitAudioContext; + // @ts-ignore + this.audioContext = new AudioContextClass(); + + const source = this.audioContext!.createMediaStreamSource(stream); + this.analyser = this.audioContext!.createAnalyser(); + this.analyser.fftSize = 512; + source.connect(this.analyser); + const dataArray = new Uint8Array(this.analyser.frequencyBinCount); + + this.vadCheckInterval = window.setInterval(() => { + if (!this.analyser) return; + if (Date.now() - this.recordingStartTime < this.MIN_RECORDING_TIME) return; + + this.analyser.getByteFrequencyData(dataArray); + const average = dataArray.reduce((a, b) => a + b, 0) / dataArray.length; + + if (average > this.SILENCE_THRESHOLD) { + this.hasSpoken = true; + this.consecutiveSilenceCount = 0; + if (this.silenceTimer) { + clearTimeout(this.silenceTimer); + this.silenceTimer = null; + } + if (onSpeechStart) onSpeechStart(); + } else if (this.hasSpoken) { + this.consecutiveSilenceCount++; + if (this.consecutiveSilenceCount >= this.REQUIRED_SILENCE_CHECKS && !this.silenceTimer) { + this.silenceTimer = window.setTimeout(() => { + if (this.mediaRecorder && this.mediaRecorder.state === 'recording') { + this.mediaRecorder.stop(); + } + }, this.SILENCE_DURATION); + } + } + }, 100); + + // @ts-ignore + this.mediaRecorder.ondataavailable = (event) => { + if (event.data.size > 0) this.audioChunks.push(event.data); + }; + + // @ts-ignore + this.mediaRecorder.onstop = async () => { + this.stopVAD_Default(); + stream.getTracks().forEach(track => track.stop()); + if (this.recordingTimer) clearTimeout(this.recordingTimer); + + if (this.audioChunks.length > 0) { + const audioBlob = new Blob(this.audioChunks, { type: 'audio/webm' }); + onStopCallback(audioBlob); + } + }; + + // @ts-ignore + this.mediaRecorder.start(); + + this.recordingTimer = window.setTimeout(() => { + if (this.mediaRecorder && this.mediaRecorder.state === 'recording') { + this.mediaRecorder.stop(); + } + }, this.MAX_RECORDING_TIME); + + } catch (error) { + throw error; + } + } + + public async playTTS(_audioBase64: string): Promise { + return Promise.resolve(); + } + + public stopTTS() {} +} diff --git a/gourmet-sp/src/scripts/chat/chat-controller.ts b/gourmet-sp/src/scripts/chat/chat-controller.ts new file mode 100644 index 0000000..b4ace25 --- /dev/null +++ b/gourmet-sp/src/scripts/chat/chat-controller.ts @@ -0,0 +1,45 @@ +// src/scripts/chat/chat-controller.ts +import { CoreController } from './core-controller'; +import { AudioManager } from './audio-manager'; + +export class ChatController extends CoreController { + + constructor(container: HTMLElement, apiBase: string) { + super(container, apiBase); + this.audioManager = new AudioManager(4500); + // チャットモードに設定 + this.currentMode = 'chat'; + this.init(); + } + + // 初期化プロセスをオーバーライド + protected async init() { + // 親クラスの初期化を実行 + await super.init(); + + // チャットモード固有の要素とイベントを追加 + const query = (sel: string) => this.container.querySelector(sel) as HTMLElement; + this.els.modeSwitch = query('#modeSwitch') as HTMLInputElement; + + // モードスイッチの初期状態を設定(チャットモード = unchecked) + if (this.els.modeSwitch) { + this.els.modeSwitch.checked = false; + + // モードスイッチのイベントリスナー追加 + this.els.modeSwitch.addEventListener('change', () => { + this.toggleMode(); + }); + } + } + + // モード切り替え処理 - ページ遷移 + private toggleMode() { + const isChecked = this.els.modeSwitch?.checked; + if (isChecked) { + // コンシェルジュモードへページ遷移 + console.log('[ChatController] Switching to Concierge mode...'); + window.location.href = '/concierge'; + } + // チャットモードは既に現在のページなので何もしない + } +} diff --git a/gourmet-sp/src/scripts/chat/concierge-controller.ts b/gourmet-sp/src/scripts/chat/concierge-controller.ts new file mode 100644 index 0000000..7efde16 --- /dev/null +++ b/gourmet-sp/src/scripts/chat/concierge-controller.ts @@ -0,0 +1,831 @@ + + +// src/scripts/chat/concierge-controller.ts +import { CoreController } from './core-controller'; +import { AudioManager } from './audio-manager'; + +declare const io: any; + +export class ConciergeController extends CoreController { + // Audio2Expression はバックエンドTTSエンドポイント経由で統合済み + private pendingAckPromise: Promise | null = null; + + constructor(container: HTMLElement, apiBase: string) { + super(container, apiBase); + + // ★コンシェルジュモード用のAudioManagerを6.5秒設定で再初期化2 + this.audioManager = new AudioManager(8000); + + // コンシェルジュモードに設定 + this.currentMode = 'concierge'; + this.init(); + } + + // 初期化プロセスをオーバーライド + protected async init() { + // 親クラスの初期化を実行 + await super.init(); + + // コンシェルジュ固有の要素とイベントを追加 + const query = (sel: string) => this.container.querySelector(sel) as HTMLElement; + this.els.avatarContainer = query('.avatar-container'); + this.els.avatarImage = query('#avatarImage') as HTMLImageElement; + this.els.modeSwitch = query('#modeSwitch') as HTMLInputElement; + + // モードスイッチのイベントリスナー追加 + if (this.els.modeSwitch) { + this.els.modeSwitch.addEventListener('change', () => { + this.toggleMode(); + }); + } + + // ★ LAMAvatar との統合: 外部TTSプレーヤーをリンク + // LAMAvatar が後から初期化される可能性があるため、即時 + 遅延でリンク + const linkTtsPlayer = () => { + const lam = (window as any).lamAvatarController; + if (lam && typeof lam.setExternalTtsPlayer === 'function') { + lam.setExternalTtsPlayer(this.ttsPlayer); + console.log('[Concierge] Linked external TTS player with LAMAvatar'); + return true; + } + return false; + }; + if (!linkTtsPlayer()) { + setTimeout(() => linkTtsPlayer(), 2000); + } + } + + // ======================================== + // 🎯 セッション初期化をオーバーライド(挨拶文を変更) + // ======================================== + protected async initializeSession() { + try { + if (this.sessionId) { + try { + await fetch(`${this.apiBase}/api/session/end`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ session_id: this.sessionId }) + }); + } catch (e) {} + } + + // ★ user_id を取得(親クラスのメソッドを使用) + const userId = this.getUserId(); + + const res = await fetch(`${this.apiBase}/api/session/start`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + user_info: { user_id: userId }, + language: this.currentLanguage, + mode: 'concierge' + }) + }); + const data = await res.json(); + this.sessionId = data.session_id; + + // リップシンク: バックエンドTTSエンドポイント経由で表情データ取得(追加接続不要) + + // ✅ バックエンドからの初回メッセージを使用(長期記憶対応) + const greetingText = data.initial_message || this.t('initialGreetingConcierge'); + this.addMessage('assistant', greetingText, null, true); + + const ackTexts = [ + this.t('ackConfirm'), this.t('ackSearch'), this.t('ackUnderstood'), + this.t('ackYes'), this.t('ttsIntro') + ]; + const langConfig = this.LANGUAGE_CODE_MAP[this.currentLanguage]; + + const ackPromises = ackTexts.map(async (text) => { + try { + const ackResponse = await fetch(`${this.apiBase}/api/tts/synthesize`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + text: text, language_code: langConfig.tts, voice_name: langConfig.voice, + session_id: this.sessionId + }) + }); + const ackData = await ackResponse.json(); + if (ackData.success && ackData.audio) { + this.preGeneratedAcks.set(text, ackData.audio); + } + } catch (_e) { } + }); + + await Promise.all([ + this.speakTextGCP(greetingText), + ...ackPromises + ]); + + this.els.userInput.disabled = false; + this.els.sendBtn.disabled = false; + this.els.micBtn.disabled = false; + this.els.speakerBtn.disabled = false; + this.els.speakerBtn.classList.remove('disabled'); + this.els.reservationBtn.classList.remove('visible'); + + } catch (e) { + console.error('[Session] Initialization error:', e); + } + } + + // ======================================== + // 🔧 Socket.IOの初期化をオーバーライド + // ======================================== + protected initSocket() { + // @ts-ignore + this.socket = io(this.apiBase || window.location.origin); + + this.socket.on('connect', () => { }); + + // ✅ コンシェルジュ版のhandleStreamingSTTCompleteを呼ぶように再登録 + this.socket.on('transcript', (data: any) => { + const { text, is_final } = data; + if (this.isAISpeaking) return; + if (is_final) { + this.handleStreamingSTTComplete(text); // ← オーバーライド版が呼ばれる + this.currentAISpeech = ""; + } else { + this.els.userInput.value = text; + } + }); + + this.socket.on('error', (data: any) => { + this.addMessage('system', `${this.t('sttError')} ${data.message}`); + if (this.isRecording) this.stopStreamingSTT(); + }); + } + + // コンシェルジュモード固有: アバターアニメーション制御 + 公式リップシンク + protected async speakTextGCP(text: string, stopPrevious: boolean = true, autoRestartMic: boolean = false, skipAudio: boolean = false) { + if (skipAudio || !this.isTTSEnabled || !text) return Promise.resolve(); + + if (stopPrevious) { + this.ttsPlayer.pause(); + } + + // アバターアニメーションを開始 + if (this.els.avatarContainer) { + this.els.avatarContainer.classList.add('speaking'); + } + + // ★ 公式同期: TTS音声をaudio2exp-serviceに送信して表情を生成 + const cleanText = this.stripMarkdown(text); + try { + this.isAISpeaking = true; + if (this.isRecording && (this.isIOS || this.isAndroid)) { + this.stopStreamingSTT(); + } + + this.els.voiceStatus.innerHTML = this.t('voiceStatusSynthesizing'); + this.els.voiceStatus.className = 'voice-status speaking'; + const langConfig = this.LANGUAGE_CODE_MAP[this.currentLanguage]; + + // TTS音声を取得 + const response = await fetch(`${this.apiBase}/api/tts/synthesize`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + text: cleanText, language_code: langConfig.tts, voice_name: langConfig.voice, + session_id: this.sessionId + }) + }); + const data = await response.json(); + + if (data.success && data.audio) { + // ★ TTS応答に同梱されたExpressionを即バッファ投入(遅延ゼロ) + if (data.expression) this.applyExpressionFromTts(data.expression); + this.ttsPlayer.src = `data:audio/mp3;base64,${data.audio}`; + const playPromise = new Promise((resolve) => { + this.ttsPlayer.onended = async () => { + this.els.voiceStatus.innerHTML = this.t('voiceStatusStopped'); + this.els.voiceStatus.className = 'voice-status stopped'; + this.isAISpeaking = false; + this.stopAvatarAnimation(); + if (autoRestartMic) { + if (!this.isRecording) { + try { await this.toggleRecording(); } catch (_error) { this.showMicPrompt(); } + } + } + resolve(); + }; + this.ttsPlayer.onerror = () => { + this.isAISpeaking = false; + this.stopAvatarAnimation(); + resolve(); + }; + }); + + if (this.isUserInteracted) { + this.lastAISpeech = this.normalizeText(cleanText); + await this.ttsPlayer.play(); + await playPromise; + } else { + this.showClickPrompt(); + this.els.voiceStatus.innerHTML = this.t('voiceStatusStopped'); + this.els.voiceStatus.className = 'voice-status stopped'; + this.isAISpeaking = false; + this.stopAvatarAnimation(); + } + } else { + this.isAISpeaking = false; + this.stopAvatarAnimation(); + } + } catch (_error) { + this.els.voiceStatus.innerHTML = this.t('voiceStatusStopped'); + this.els.voiceStatus.className = 'voice-status stopped'; + this.isAISpeaking = false; + this.stopAvatarAnimation(); + } + } + + /** + * TTS応答に同梱されたExpressionデータをバッファに即投入(遅延ゼロ) + * 同期方式: バックエンドがTTS+audio2expを同期実行し、結果を同梱して返す + */ + private applyExpressionFromTts(expression: any): void { + const lamController = (window as any).lamAvatarController; + if (!lamController) return; + + // 新セグメント開始時は必ずバッファクリア(前セグメントのフレーム混入防止) + if (typeof lamController.clearFrameBuffer === 'function') { + lamController.clearFrameBuffer(); + } + + if (expression?.names && expression?.frames?.length > 0) { + const frames = expression.frames.map((f: { weights: number[] }) => { + const frame: { [key: string]: number } = {}; + expression.names.forEach((name: string, i: number) => { frame[name] = f.weights[i]; }); + return frame; + }); + lamController.queueExpressionFrames(frames, expression.frame_rate || 30); + console.log(`[Concierge] Expression sync: ${frames.length} frames queued`); + } + } + + // アバターアニメーション停止 + private stopAvatarAnimation() { + if (this.els.avatarContainer) { + this.els.avatarContainer.classList.remove('speaking'); + } + // ※ LAMAvatar の状態は ttsPlayer イベント(ended/pause)で管理 + } + + + // ======================================== + // 🎯 UI言語更新をオーバーライド(挨拶文をコンシェルジュ用に) + // ======================================== + protected updateUILanguage() { + // ✅ バックエンドからの長期記憶対応済み挨拶を保持 + const initialMessage = this.els.chatArea.querySelector('.message.assistant[data-initial="true"] .message-text'); + const savedGreeting = initialMessage?.textContent; + + // 親クラスのupdateUILanguageを実行(UIラベル等を更新) + super.updateUILanguage(); + + // ✅ 長期記憶対応済み挨拶を復元(親が上書きしたものを戻す) + if (initialMessage && savedGreeting) { + initialMessage.textContent = savedGreeting; + } + + // ✅ ページタイトルをコンシェルジュ用に設定 + const pageTitle = document.getElementById('pageTitle'); + if (pageTitle) { + pageTitle.innerHTML = ` ${this.t('pageTitleConcierge')}`; + } + } + + // モード切り替え処理 - ページ遷移 + private toggleMode() { + const isChecked = this.els.modeSwitch?.checked; + if (!isChecked) { + // チャットモードへページ遷移 + console.log('[ConciergeController] Switching to Chat mode...'); + window.location.href = '/'; + } + // コンシェルジュモードは既に現在のページなので何もしない + } + + // すべての活動を停止(アバターアニメーションも含む) + protected stopAllActivities() { + super.stopAllActivities(); + this.stopAvatarAnimation(); + } + + // ======================================== + // 🎯 並行処理フロー: 応答を分割してTTS処理 + // ======================================== + + /** + * センテンス単位でテキストを分割 + * 日本語: 。で分割 + * 英語・韓国語: . で分割 + * 中国語: 。で分割 + */ + private splitIntoSentences(text: string, language: string): string[] { + let separator: RegExp; + + if (language === 'ja' || language === 'zh') { + // 日本語・中国語: 。で分割 + separator = /。/; + } else { + // 英語・韓国語: . で分割 + separator = /\.\s+/; + } + + const sentences = text.split(separator).filter(s => s.trim().length > 0); + + // 分割したセンテンスに句点を戻す + return sentences.map((s, idx) => { + if (idx < sentences.length - 1 || text.endsWith('。') || text.endsWith('. ')) { + return language === 'ja' || language === 'zh' ? s + '。' : s + '. '; + } + return s; + }); + } + + /** + * 応答を分割して並行処理でTTS生成・再生 + * チャットモードのお店紹介フローを参考に実装 + */ + private async speakResponseInChunks(response: string, isTextInput: boolean = false) { + // テキスト入力またはTTS無効の場合は従来通り + if (isTextInput || !this.isTTSEnabled) { + return this.speakTextGCP(response, true, false, isTextInput); + } + + try { + // ★ ack再生中ならttsPlayer解放を待つ(並行処理の同期ポイント) + if (this.pendingAckPromise) { + await this.pendingAckPromise; + this.pendingAckPromise = null; + } + this.stopCurrentAudio(); // ttsPlayer確実解放 + + this.isAISpeaking = true; + if (this.isRecording) { + this.stopStreamingSTT(); + } + + // センテンス分割 + const sentences = this.splitIntoSentences(response, this.currentLanguage); + + // 1センテンスしかない場合は従来通り + if (sentences.length <= 1) { + await this.speakTextGCP(response, true, false, isTextInput); + this.isAISpeaking = false; + return; + } + + // 最初のセンテンスと残りのセンテンスに分割 + const firstSentence = sentences[0]; + const remainingSentences = sentences.slice(1).join(''); + + const langConfig = this.LANGUAGE_CODE_MAP[this.currentLanguage]; + + // ★並行処理: TTS生成と表情生成を同時に実行して遅延を最小化 + if (this.isUserInteracted) { + const cleanFirst = this.stripMarkdown(firstSentence); + const cleanRemaining = remainingSentences.trim().length > 0 + ? this.stripMarkdown(remainingSentences) : null; + + // ★ 4つのAPIコールを可能な限り並行で開始 + // 1. 最初のセンテンスTTS + const firstTtsPromise = fetch(`${this.apiBase}/api/tts/synthesize`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + text: cleanFirst, language_code: langConfig.tts, + voice_name: langConfig.voice, session_id: this.sessionId + }) + }).then(r => r.json()); + + // 2. 残りのセンテンスTTS(あれば) + const remainingTtsPromise = cleanRemaining + ? fetch(`${this.apiBase}/api/tts/synthesize`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + text: cleanRemaining, language_code: langConfig.tts, + voice_name: langConfig.voice, session_id: this.sessionId + }) + }).then(r => r.json()) + : null; + + // ★ 最初のTTSが返ったら即再生(Expression同梱済み) + const firstTtsResult = await firstTtsPromise; + if (firstTtsResult.success && firstTtsResult.audio) { + // ★ TTS応答に同梱されたExpressionを即バッファ投入(遅延ゼロ) + if (firstTtsResult.expression) this.applyExpressionFromTts(firstTtsResult.expression); + + this.lastAISpeech = this.normalizeText(cleanFirst); + this.stopCurrentAudio(); + this.ttsPlayer.src = `data:audio/mp3;base64,${firstTtsResult.audio}`; + + // 残りのTTS結果を先に取得(TTS応答にExpression同梱済み) + let remainingTtsResult: any = null; + if (remainingTtsPromise) { + remainingTtsResult = await remainingTtsPromise; + } + + // 最初のセンテンス再生 + await new Promise((resolve) => { + this.ttsPlayer.onended = () => { + this.els.voiceStatus.innerHTML = this.t('voiceStatusStopped'); + this.els.voiceStatus.className = 'voice-status stopped'; + resolve(); + }; + this.els.voiceStatus.innerHTML = this.t('voiceStatusSpeaking'); + this.els.voiceStatus.className = 'voice-status speaking'; + this.ttsPlayer.play(); + }); + + // ★ 残りのセンテンスを続けて再生(Expression同梱済み) + if (remainingTtsResult?.success && remainingTtsResult?.audio) { + this.lastAISpeech = this.normalizeText(cleanRemaining || ''); + + // ★ TTS応答に同梱されたExpressionを即バッファ投入 + if (remainingTtsResult.expression) this.applyExpressionFromTts(remainingTtsResult.expression); + + this.stopCurrentAudio(); + this.ttsPlayer.src = `data:audio/mp3;base64,${remainingTtsResult.audio}`; + + await new Promise((resolve) => { + this.ttsPlayer.onended = () => { + this.els.voiceStatus.innerHTML = this.t('voiceStatusStopped'); + this.els.voiceStatus.className = 'voice-status stopped'; + resolve(); + }; + this.els.voiceStatus.innerHTML = this.t('voiceStatusSpeaking'); + this.els.voiceStatus.className = 'voice-status speaking'; + this.ttsPlayer.play(); + }); + } + } + } + + this.isAISpeaking = false; + } catch (error) { + console.error('[TTS並行処理エラー]', error); + this.isAISpeaking = false; + // エラー時はフォールバック + await this.speakTextGCP(response, true, false, isTextInput); + } + } + + // ======================================== + // 🎯 コンシェルジュモード専用: 音声入力完了時の即答処理 + // ======================================== + protected async handleStreamingSTTComplete(transcript: string) { + this.stopStreamingSTT(); + + if ('mediaSession' in navigator) { + try { navigator.mediaSession.playbackState = 'playing'; } catch (e) {} + } + + this.els.voiceStatus.innerHTML = this.t('voiceStatusComplete'); + this.els.voiceStatus.className = 'voice-status'; + + // オウム返し判定(エコーバック防止) + const normTranscript = this.normalizeText(transcript); + if (this.isSemanticEcho(normTranscript, this.lastAISpeech)) { + this.els.voiceStatus.innerHTML = this.t('voiceStatusStopped'); + this.els.voiceStatus.className = 'voice-status stopped'; + this.lastAISpeech = ''; + return; + } + + this.els.userInput.value = transcript; + this.addMessage('user', transcript); + + // 短すぎる入力チェック + const textLength = transcript.trim().replace(/\s+/g, '').length; + if (textLength < 2) { + const msg = this.t('shortMsgWarning'); + this.addMessage('assistant', msg); + if (this.isTTSEnabled && this.isUserInteracted) { + await this.speakTextGCP(msg, true); + } else { + await new Promise(r => setTimeout(r, 2000)); + } + this.els.userInput.value = ''; + this.els.voiceStatus.innerHTML = this.t('voiceStatusStopped'); + this.els.voiceStatus.className = 'voice-status stopped'; + return; + } + + // ✅ 修正: 即答を「はい」だけに簡略化 + const ackText = this.t('ackYes'); // 「はい」のみ + const preGeneratedAudio = this.preGeneratedAcks.get(ackText); + + // 即答を再生(ttsPlayerで) + if (preGeneratedAudio && this.isTTSEnabled && this.isUserInteracted) { + this.pendingAckPromise = new Promise((resolve) => { + this.lastAISpeech = this.normalizeText(ackText); + this.ttsPlayer.src = `data:audio/mp3;base64,${preGeneratedAudio}`; + let resolved = false; + const done = () => { if (!resolved) { resolved = true; resolve(); } }; + this.ttsPlayer.onended = done; + this.ttsPlayer.onpause = done; // ★ pause時もresolve(src変更やstop時のデッドロック防止) + this.ttsPlayer.play().catch(_e => done()); + }); + } else if (this.isTTSEnabled) { + this.pendingAckPromise = this.speakTextGCP(ackText, false); + } + + this.addMessage('assistant', ackText); + + // ★ 並行処理: ack再生完了を待たず、即LLMリクエスト開始(~700ms短縮) + // pendingAckPromiseはsendMessage内でTTS再生前にawaitされる + if (this.els.userInput.value.trim()) { + this.isFromVoiceInput = true; + this.sendMessage(); + } + + this.els.voiceStatus.innerHTML = this.t('voiceStatusStopped'); + this.els.voiceStatus.className = 'voice-status stopped'; + } + + // ======================================== + // 🎯 コンシェルジュモード専用: メッセージ送信処理 + // ======================================== + protected async sendMessage() { + let firstAckPromise: Promise | null = null; + // ★ voice入力時はunlockAudioParamsスキップ(ack再生中のttsPlayerを中断させない) + if (!this.pendingAckPromise) { + this.unlockAudioParams(); + } + const message = this.els.userInput.value.trim(); + if (!message || this.isProcessing) return; + + const currentSessionId = this.sessionId; + const isTextInput = !this.isFromVoiceInput; + + this.isProcessing = true; + this.els.sendBtn.disabled = true; + this.els.micBtn.disabled = true; + this.els.userInput.disabled = true; + + // ✅ テキスト入力時も「はい」だけに簡略化 + if (!this.isFromVoiceInput) { + this.addMessage('user', message); + const textLength = message.trim().replace(/\s+/g, '').length; + if (textLength < 2) { + const msg = this.t('shortMsgWarning'); + this.addMessage('assistant', msg); + if (this.isTTSEnabled && this.isUserInteracted) await this.speakTextGCP(msg, true); + this.resetInputState(); + return; + } + + this.els.userInput.value = ''; + + // ✅ 修正: 即答を「はい」だけに + const ackText = this.t('ackYes'); + this.currentAISpeech = ackText; + this.addMessage('assistant', ackText); + + if (this.isTTSEnabled && !isTextInput) { + try { + const preGeneratedAudio = this.preGeneratedAcks.get(ackText); + if (preGeneratedAudio && this.isUserInteracted) { + firstAckPromise = new Promise((resolve) => { + this.lastAISpeech = this.normalizeText(ackText); + this.ttsPlayer.src = `data:audio/mp3;base64,${preGeneratedAudio}`; + this.ttsPlayer.onended = () => resolve(); + this.ttsPlayer.play().catch(_e => resolve()); + }); + } else { + firstAckPromise = this.speakTextGCP(ackText, false); + } + } catch (_e) {} + } + if (firstAckPromise) await firstAckPromise; + + // ✅ 修正: オウム返しパターンを削除 + // (generateFallbackResponse, additionalResponse の呼び出しを削除) + } + + this.isFromVoiceInput = false; + + // ✅ 待機アニメーションは6.5秒後に表示(LLM送信直前にタイマースタート) + if (this.waitOverlayTimer) clearTimeout(this.waitOverlayTimer); + let responseReceived = false; + + // タイマーセットをtry直前に移動(即答処理の後) + this.waitOverlayTimer = window.setTimeout(() => { + if (!responseReceived) { + this.showWaitOverlay(); + } + }, 6500); + + try { + const response = await fetch(`${this.apiBase}/api/chat`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + session_id: currentSessionId, + message: message, + stage: this.currentStage, + language: this.currentLanguage, + mode: this.currentMode + }) + }); + const data = await response.json(); + + // ✅ レスポンス到着フラグを立てる + responseReceived = true; + + if (this.sessionId !== currentSessionId) return; + + // ✅ タイマーをクリアしてアニメーションを非表示 + if (this.waitOverlayTimer) { + clearTimeout(this.waitOverlayTimer); + this.waitOverlayTimer = null; + } + this.hideWaitOverlay(); + this.currentAISpeech = data.response; + this.addMessage('assistant', data.response, data.summary); + + if (!isTextInput && this.isTTSEnabled) { + this.stopCurrentAudio(); + } + + if (data.shops && data.shops.length > 0) { + this.currentShops = data.shops; + this.els.reservationBtn.classList.add('visible'); + this.els.userInput.value = ''; + document.dispatchEvent(new CustomEvent('displayShops', { + detail: { shops: data.shops, language: this.currentLanguage } + })); + + const section = document.getElementById('shopListSection'); + if (section) section.classList.add('has-shops'); + if (window.innerWidth < 1024) { + setTimeout(() => { + const shopSection = document.getElementById('shopListSection'); + if (shopSection) shopSection.scrollIntoView({ behavior: 'smooth', block: 'start' }); + }, 300); + } + + (async () => { + try { + // ★ ack再生中ならttsPlayer解放を待つ(並行処理の同期ポイント) + if (this.pendingAckPromise) { + await this.pendingAckPromise; + this.pendingAckPromise = null; + } + this.stopCurrentAudio(); // ttsPlayer確実解放 + + this.isAISpeaking = true; + if (this.isRecording) { this.stopStreamingSTT(); } + + await this.speakTextGCP(this.t('ttsIntro'), true, false, isTextInput); + + const lines = data.response.split('\n\n'); + let introText = ""; + let shopLines = lines; + if (lines[0].includes('ご希望に合うお店') && lines[0].includes('ご紹介します')) { + introText = lines[0]; + shopLines = lines.slice(1); + } + + let introPart2Promise: Promise | null = null; + if (introText && this.isTTSEnabled && this.isUserInteracted && !isTextInput) { + const preGeneratedIntro = this.preGeneratedAcks.get(introText); + if (preGeneratedIntro) { + introPart2Promise = new Promise((resolve) => { + this.lastAISpeech = this.normalizeText(introText); + this.ttsPlayer.src = `data:audio/mp3;base64,${preGeneratedIntro}`; + this.ttsPlayer.onended = () => resolve(); + this.ttsPlayer.play(); + }); + } else { + introPart2Promise = this.speakTextGCP(introText, false, false, isTextInput); + } + } + + let firstShopTtsPromise: Promise | null = null; + let remainingShopTtsPromise: Promise | null = null; + const shopLangConfig = this.LANGUAGE_CODE_MAP[this.currentLanguage]; + + if (shopLines.length > 0 && this.isTTSEnabled && this.isUserInteracted && !isTextInput) { + const firstShop = shopLines[0]; + const restShops = shopLines.slice(1).join('\n\n'); + + // ★ 1行目先行: 最初のショップと残りのTTSを並行開始 + firstShopTtsPromise = fetch(`${this.apiBase}/api/tts/synthesize`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + text: this.stripMarkdown(firstShop), language_code: shopLangConfig.tts, + voice_name: shopLangConfig.voice, session_id: this.sessionId + }) + }).then(r => r.json()); + + if (restShops) { + remainingShopTtsPromise = fetch(`${this.apiBase}/api/tts/synthesize`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + text: this.stripMarkdown(restShops), language_code: shopLangConfig.tts, + voice_name: shopLangConfig.voice, session_id: this.sessionId + }) + }).then(r => r.json()); + } + } + + if (introPart2Promise) await introPart2Promise; + + if (firstShopTtsPromise) { + const firstResult = await firstShopTtsPromise; + if (firstResult?.success && firstResult?.audio) { + const firstShopText = this.stripMarkdown(shopLines[0]); + this.lastAISpeech = this.normalizeText(firstShopText); + + // ★ TTS応答に同梱されたExpressionを即バッファ投入 + if (firstResult.expression) this.applyExpressionFromTts(firstResult.expression); + + if (!isTextInput && this.isTTSEnabled) { + this.stopCurrentAudio(); + } + + this.ttsPlayer.src = `data:audio/mp3;base64,${firstResult.audio}`; + + // 残りのTTS結果を先に取得(Expression同梱済み) + let remainingResult: any = null; + if (remainingShopTtsPromise) { + remainingResult = await remainingShopTtsPromise; + } + + await new Promise((resolve) => { + this.ttsPlayer.onended = () => { + this.els.voiceStatus.innerHTML = this.t('voiceStatusStopped'); + this.els.voiceStatus.className = 'voice-status stopped'; + resolve(); + }; + this.els.voiceStatus.innerHTML = this.t('voiceStatusSpeaking'); + this.els.voiceStatus.className = 'voice-status speaking'; + this.ttsPlayer.play(); + }); + + if (remainingResult?.success && remainingResult?.audio) { + const restShopsText = this.stripMarkdown(shopLines.slice(1).join('\n\n')); + this.lastAISpeech = this.normalizeText(restShopsText); + + // ★ TTS応答に同梱されたExpressionを即バッファ投入 + if (remainingResult.expression) this.applyExpressionFromTts(remainingResult.expression); + + if (!isTextInput && this.isTTSEnabled) { + this.stopCurrentAudio(); + } + + this.ttsPlayer.src = `data:audio/mp3;base64,${remainingResult.audio}`; + await new Promise((resolve) => { + this.ttsPlayer.onended = () => { + this.els.voiceStatus.innerHTML = this.t('voiceStatusStopped'); + this.els.voiceStatus.className = 'voice-status stopped'; + resolve(); + }; + this.els.voiceStatus.innerHTML = this.t('voiceStatusSpeaking'); + this.els.voiceStatus.className = 'voice-status speaking'; + this.ttsPlayer.play(); + }); + } + } + } + this.isAISpeaking = false; + } catch (_e) { this.isAISpeaking = false; } + })(); + } else { + if (data.response) { + const extractedShops = this.extractShopsFromResponse(data.response); + if (extractedShops.length > 0) { + this.currentShops = extractedShops; + this.els.reservationBtn.classList.add('visible'); + document.dispatchEvent(new CustomEvent('displayShops', { + detail: { shops: extractedShops, language: this.currentLanguage } + })); + const section = document.getElementById('shopListSection'); + if (section) section.classList.add('has-shops'); + // ★並行処理フローを適用 + this.speakResponseInChunks(data.response, isTextInput); + } else { + // ★並行処理フローを適用 + this.speakResponseInChunks(data.response, isTextInput); + } + } + } + } catch (error) { + console.error('送信エラー:', error); + this.hideWaitOverlay(); + this.showError('メッセージの送信に失敗しました。'); + } finally { + this.resetInputState(); + this.els.userInput.blur(); + } + } + +} diff --git a/gourmet-sp/src/scripts/chat/core-controller.ts b/gourmet-sp/src/scripts/chat/core-controller.ts new file mode 100644 index 0000000..25f656f --- /dev/null +++ b/gourmet-sp/src/scripts/chat/core-controller.ts @@ -0,0 +1,1040 @@ + +// src/scripts/chat/core-controller.ts +import { i18n } from '../../constants/i18n'; +import { AudioManager } from './audio-manager'; + +declare const io: any; + +export class CoreController { + protected container: HTMLElement; + protected apiBase: string; + protected audioManager: AudioManager; + protected socket: any = null; + + protected currentLanguage: 'ja' | 'en' | 'zh' | 'ko' = 'ja'; + protected sessionId: string | null = null; + protected isProcessing = false; + protected currentStage = 'conversation'; + protected isRecording = false; + protected waitOverlayTimer: number | null = null; + protected isTTSEnabled = true; + protected isUserInteracted = false; + protected currentShops: any[] = []; + protected isFromVoiceInput = false; + protected lastAISpeech = ''; + protected preGeneratedAcks: Map = new Map(); + protected isAISpeaking = false; + protected currentAISpeech = ""; + protected currentMode: 'chat' | 'concierge' = 'chat'; + + // ★追加: バックグラウンド状態の追跡 + protected isInBackground = false; + protected backgroundStartTime = 0; + protected readonly BACKGROUND_RESET_THRESHOLD = 120000; // 120秒 + + protected isIOS = /iPhone|iPad|iPod/i.test(navigator.userAgent); + protected isAndroid = /Android/i.test(navigator.userAgent); + + protected els: any = {}; + protected ttsPlayer: HTMLAudioElement; + + protected readonly LANGUAGE_CODE_MAP = { + ja: { tts: 'ja-JP', stt: 'ja-JP', voice: 'ja-JP-Chirp3-HD-Leda' }, + en: { tts: 'en-US', stt: 'en-US', voice: 'en-US-Studio-O' }, + zh: { tts: 'cmn-CN', stt: 'cmn-CN', voice: 'cmn-CN-Wavenet-A' }, + ko: { tts: 'ko-KR', stt: 'ko-KR', voice: 'ko-KR-Wavenet-A' } + }; + + constructor(container: HTMLElement, apiBase: string) { + this.container = container; + this.apiBase = apiBase; + this.audioManager = new AudioManager(); + this.ttsPlayer = new Audio(); + + const query = (sel: string) => container.querySelector(sel) as HTMLElement; + this.els = { + chatArea: query('#chatArea'), + userInput: query('#userInput') as HTMLInputElement, + sendBtn: query('#sendBtn'), + micBtn: query('#micBtnFloat'), + speakerBtn: query('#speakerBtnFloat'), + voiceStatus: query('#voiceStatus'), + waitOverlay: query('#waitOverlay'), + waitVideo: query('#waitVideo') as HTMLVideoElement, + splashOverlay: query('#splashOverlay'), + splashVideo: query('#splashVideo') as HTMLVideoElement, + reservationBtn: query('#reservationBtnFloat'), + stopBtn: query('#stopBtn'), + languageSelect: query('#languageSelect') as HTMLSelectElement + }; + } + + protected async init() { + console.log('[Core] Starting initialization...'); + + this.bindEvents(); + this.initSocket(); + + setTimeout(() => { + if (this.els.splashVideo) this.els.splashVideo.loop = false; + if (this.els.splashOverlay) { + this.els.splashOverlay.classList.add('fade-out'); + setTimeout(() => this.els.splashOverlay.classList.add('hidden'), 800); + } + }, 10000); + + await this.initializeSession(); + this.updateUILanguage(); + + setTimeout(() => { + if (this.els.splashOverlay) { + this.els.splashOverlay.classList.add('fade-out'); + setTimeout(() => this.els.splashOverlay.classList.add('hidden'), 800); + } + }, 2000); + + console.log('[Core] Initialization completed'); + } + + protected getUserId(): string { + const STORAGE_KEY = 'gourmet_support_user_id'; + let userId = localStorage.getItem(STORAGE_KEY); + if (!userId) { + userId = 'user_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9); + localStorage.setItem(STORAGE_KEY, userId); + console.log('[Core] 新規 user_id を生成:', userId); + } + return userId; + } + + protected async resetAppContent() { + console.log('[Reset] Starting soft reset...'); + const oldSessionId = this.sessionId; + this.stopAllActivities(); + + if (oldSessionId) { + try { + await fetch(`${this.apiBase}/api/cancel`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ session_id: oldSessionId }) + }); + } catch (e) { console.log('[Reset] Cancel error:', e); } + } + + if (this.els.chatArea) this.els.chatArea.innerHTML = ''; + const shopCardList = document.getElementById('shopCardList'); + if (shopCardList) shopCardList.innerHTML = ''; + const shopListSection = document.getElementById('shopListSection'); + if (shopListSection) shopListSection.classList.remove('has-shops'); + const floatingButtons = document.querySelector('.floating-buttons'); + if (floatingButtons) floatingButtons.classList.remove('shop-card-active'); + + this.els.userInput.value = ''; + this.els.userInput.disabled = true; + this.els.sendBtn.disabled = true; + this.els.micBtn.disabled = true; + this.els.speakerBtn.disabled = true; + this.els.reservationBtn.classList.remove('visible'); + + this.currentShops = []; + this.sessionId = null; + this.lastAISpeech = ''; + this.preGeneratedAcks.clear(); + this.isProcessing = false; + this.isAISpeaking = false; + this.isFromVoiceInput = false; + + await new Promise(resolve => setTimeout(resolve, 300)); + await this.initializeSession(); + + // ★追加: スクロール位置をリセット(ヘッダーが隠れないように) + this.container.scrollIntoView({ behavior: 'smooth', block: 'start' }); + window.scrollTo({ top: 0, behavior: 'smooth' }); + + console.log('[Reset] Completed'); + } + + protected bindEvents() { + this.els.sendBtn?.addEventListener('click', () => this.sendMessage()); + + this.els.micBtn?.addEventListener('click', () => { + this.toggleRecording(); + }); + + this.els.speakerBtn?.addEventListener('click', () => this.toggleTTS()); + this.els.reservationBtn?.addEventListener('click', () => this.openReservationModal()); + this.els.stopBtn?.addEventListener('click', () => this.stopAllActivities()); + + this.els.userInput?.addEventListener('keypress', (e: KeyboardEvent) => { + if (e.key === 'Enter') this.sendMessage(); + }); + + this.els.languageSelect?.addEventListener('change', () => { + this.currentLanguage = this.els.languageSelect.value as any; + this.updateUILanguage(); + }); + + const floatingButtons = this.container.querySelector('.floating-buttons'); + this.els.userInput?.addEventListener('focus', () => { + setTimeout(() => { if (floatingButtons) floatingButtons.classList.add('keyboard-active'); }, 300); + }); + this.els.userInput?.addEventListener('blur', () => { + if (floatingButtons) floatingButtons.classList.remove('keyboard-active'); + }); + + const resetHandler = async () => { await this.resetAppContent(); }; + const resetWrapper = async () => { + await resetHandler(); + document.addEventListener('gourmet-app:reset', resetWrapper, { once: true }); + }; + document.addEventListener('gourmet-app:reset', resetWrapper, { once: true }); + + // ★追加: バックグラウンド復帰時の復旧処理 + document.addEventListener('visibilitychange', async () => { + if (document.hidden) { + this.isInBackground = true; + this.backgroundStartTime = Date.now(); + } else if (this.isInBackground) { + this.isInBackground = false; + const backgroundDuration = Date.now() - this.backgroundStartTime; + console.log(`[Foreground] Resuming from background (${Math.round(backgroundDuration / 1000)}s)`); + + // ★120秒以上バックグラウンドにいた場合はソフトリセット + if (backgroundDuration > this.BACKGROUND_RESET_THRESHOLD) { + console.log('[Foreground] Long background duration - triggering soft reset...'); + await this.resetAppContent(); + return; + } + + // 1. Socket.IO再接続(状態に関わらず試行) + if (this.socket && !this.socket.connected) { + console.log('[Foreground] Reconnecting socket...'); + this.socket.connect(); + } + + // 2. UI状態をリセット(操作可能にする) + this.isProcessing = false; + this.isAISpeaking = false; + this.hideWaitOverlay(); + + // 3. 要素が存在する場合のみ更新 + if (this.els.sendBtn) this.els.sendBtn.disabled = false; + if (this.els.micBtn) this.els.micBtn.disabled = false; + if (this.els.userInput) this.els.userInput.disabled = false; + if (this.els.voiceStatus) { + this.els.voiceStatus.innerHTML = this.t('voiceStatusStopped'); + this.els.voiceStatus.className = 'voice-status stopped'; + } + } + }); + } + + // ★修正: Socket.IO接続設定に再接続オプションを追加(transportsは削除) + protected initSocket() { + // @ts-ignore + this.socket = io(this.apiBase || window.location.origin, { + reconnection: true, + reconnectionDelay: 1000, + reconnectionAttempts: 5, + timeout: 10000 + }); + + this.socket.on('connect', () => { }); + + this.socket.on('transcript', (data: any) => { + const { text, is_final } = data; + if (this.isAISpeaking) return; + if (is_final) { + this.handleStreamingSTTComplete(text); + this.currentAISpeech = ""; + } else { + this.els.userInput.value = text; + } + }); + + this.socket.on('error', (data: any) => { + this.addMessage('system', `${this.t('sttError')} ${data.message}`); + if (this.isRecording) this.stopStreamingSTT(); + }); + } + + protected async initializeSession() { + try { + if (this.sessionId) { + try { + await fetch(`${this.apiBase}/api/session/end`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ session_id: this.sessionId }) + }); + } catch (e) {} + } + + const res = await fetch(`${this.apiBase}/api/session/start`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ user_info: {}, language: this.currentLanguage }) + }); + const data = await res.json(); + this.sessionId = data.session_id; + + this.addMessage('assistant', this.t('initialGreeting'), null, true); + + const ackTexts = [ + this.t('ackConfirm'), this.t('ackSearch'), this.t('ackUnderstood'), + this.t('ackYes'), this.t('ttsIntro') + ]; + const langConfig = this.LANGUAGE_CODE_MAP[this.currentLanguage]; + + const ackPromises = ackTexts.map(async (text) => { + try { + const ackResponse = await fetch(`${this.apiBase}/api/tts/synthesize`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + text: text, language_code: langConfig.tts, voice_name: langConfig.voice + }) + }); + const ackData = await ackResponse.json(); + if (ackData.success && ackData.audio) { + this.preGeneratedAcks.set(text, ackData.audio); + } + } catch (_e) { } + }); + + await Promise.all([ + this.speakTextGCP(this.t('initialGreeting')), + ...ackPromises + ]); + + this.els.userInput.disabled = false; + this.els.sendBtn.disabled = false; + this.els.micBtn.disabled = false; + this.els.speakerBtn.disabled = false; + this.els.speakerBtn.classList.remove('disabled'); + this.els.reservationBtn.classList.remove('visible'); + + } catch (e) { + console.error('[Session] Initialization error:', e); + } + } + + protected async toggleRecording() { + this.enableAudioPlayback(); + this.els.userInput.value = ''; + + if (this.isRecording) { + this.stopStreamingSTT(); + return; + } + + if (this.isProcessing || this.isAISpeaking || !this.ttsPlayer.paused) { + if (this.isProcessing) { + fetch(`${this.apiBase}/api/cancel`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ session_id: this.sessionId }) + }).catch(err => console.error('中止リクエスト失敗:', err)); + } + + this.stopCurrentAudio(); + this.hideWaitOverlay(); + this.isProcessing = false; + this.isAISpeaking = false; + this.resetInputState(); + } + + if (this.socket && this.socket.connected) { + this.isRecording = true; + this.els.micBtn.classList.add('recording'); + this.els.voiceStatus.innerHTML = this.t('voiceStatusListening'); + this.els.voiceStatus.className = 'voice-status listening'; + + try { + const langCode = this.LANGUAGE_CODE_MAP[this.currentLanguage].stt; + await this.audioManager.startStreaming( + this.socket, langCode, + () => { this.stopStreamingSTT(); }, + () => { this.els.voiceStatus.innerHTML = this.t('voiceStatusRecording'); } + ); + } catch (error: any) { + this.stopStreamingSTT(); + if (!error.message?.includes('マイク')) { + this.showError(this.t('micAccessError')); + } + } + } else { + await this.startLegacyRecording(); + } + } + + protected async startLegacyRecording() { + try { + this.isRecording = true; + this.els.micBtn.classList.add('recording'); + this.els.voiceStatus.innerHTML = this.t('voiceStatusListening'); + + await this.audioManager.startLegacyRecording( + async (audioBlob) => { + await this.transcribeAudio(audioBlob); + this.stopStreamingSTT(); + }, + () => { this.els.voiceStatus.innerHTML = this.t('voiceStatusRecording'); } + ); + } catch (error: any) { + this.addMessage('system', `${this.t('micAccessError')} ${error.message}`); + this.stopStreamingSTT(); + } + } + + protected async transcribeAudio(audioBlob: Blob) { + console.log('Legacy audio blob size:', audioBlob.size); + } + + protected stopStreamingSTT() { + this.audioManager.stopStreaming(); + if (this.socket && this.socket.connected) { + this.socket.emit('stop_stream'); + } + this.isRecording = false; + this.els.micBtn.classList.remove('recording'); + this.els.voiceStatus.innerHTML = this.t('voiceStatusStopped'); + this.els.voiceStatus.className = 'voice-status stopped'; + } + + protected async handleStreamingSTTComplete(transcript: string) { + this.stopStreamingSTT(); + + if ('mediaSession' in navigator) { + try { navigator.mediaSession.playbackState = 'playing'; } catch (e) {} + } + + this.els.voiceStatus.innerHTML = this.t('voiceStatusComplete'); + this.els.voiceStatus.className = 'voice-status'; + + const normTranscript = this.normalizeText(transcript); + if (this.isSemanticEcho(normTranscript, this.lastAISpeech)) { + this.els.voiceStatus.innerHTML = this.t('voiceStatusStopped'); + this.els.voiceStatus.className = 'voice-status stopped'; + this.lastAISpeech = ''; + return; + } + + this.els.userInput.value = transcript; + this.addMessage('user', transcript); + + const textLength = transcript.trim().replace(/\s+/g, '').length; + if (textLength < 2) { + const msg = this.t('shortMsgWarning'); + this.addMessage('assistant', msg); + if (this.isTTSEnabled && this.isUserInteracted) { + await this.speakTextGCP(msg, true); + } else { + await new Promise(r => setTimeout(r, 2000)); + } + this.els.userInput.value = ''; + this.els.voiceStatus.innerHTML = this.t('voiceStatusStopped'); + this.els.voiceStatus.className = 'voice-status stopped'; + return; + } + + const ack = this.selectSmartAcknowledgment(transcript); + const preGeneratedAudio = this.preGeneratedAcks.get(ack.text); + + let firstAckPromise: Promise | null = null; + if (preGeneratedAudio && this.isTTSEnabled && this.isUserInteracted) { + firstAckPromise = new Promise((resolve) => { + this.lastAISpeech = this.normalizeText(ack.text); + this.ttsPlayer.src = `data:audio/mp3;base64,${preGeneratedAudio}`; + this.ttsPlayer.onended = () => resolve(); + this.ttsPlayer.play().catch(_e => resolve()); + }); + } else if (this.isTTSEnabled) { + firstAckPromise = this.speakTextGCP(ack.text, false); + } + + this.addMessage('assistant', ack.text); + + (async () => { + try { + if (firstAckPromise) await firstAckPromise; + const cleanText = this.removeFillers(transcript); + const fallbackResponse = this.generateFallbackResponse(cleanText); + + if (this.isTTSEnabled && this.isUserInteracted) await this.speakTextGCP(fallbackResponse, false); + this.addMessage('assistant', fallbackResponse); + + setTimeout(async () => { + const additionalResponse = this.t('additionalResponse'); + if (this.isTTSEnabled && this.isUserInteracted) await this.speakTextGCP(additionalResponse, false); + this.addMessage('assistant', additionalResponse); + }, 3000); + + if (this.els.userInput.value.trim()) { + this.isFromVoiceInput = true; + this.sendMessage(); + } + } catch (_error) { + if (this.els.userInput.value.trim()) { + this.isFromVoiceInput = true; + this.sendMessage(); + } + } + })(); + + this.els.voiceStatus.innerHTML = this.t('voiceStatusStopped'); + this.els.voiceStatus.className = 'voice-status stopped'; + } + +// Part 1からの続き... + + protected async sendMessage() { + let firstAckPromise: Promise | null = null; + this.unlockAudioParams(); + const message = this.els.userInput.value.trim(); + if (!message || this.isProcessing) return; + + const currentSessionId = this.sessionId; + const isTextInput = !this.isFromVoiceInput; + + this.isProcessing = true; + this.els.sendBtn.disabled = true; + this.els.micBtn.disabled = true; + this.els.userInput.disabled = true; + + if (!this.isFromVoiceInput) { + this.addMessage('user', message); + const textLength = message.trim().replace(/\s+/g, '').length; + if (textLength < 2) { + const msg = this.t('shortMsgWarning'); + this.addMessage('assistant', msg); + if (this.isTTSEnabled && this.isUserInteracted) await this.speakTextGCP(msg, true); + this.resetInputState(); + return; + } + + this.els.userInput.value = ''; + + const ack = this.selectSmartAcknowledgment(message); + this.currentAISpeech = ack.text; + this.addMessage('assistant', ack.text); + + if (this.isTTSEnabled && !isTextInput) { + try { + const preGeneratedAudio = this.preGeneratedAcks.get(ack.text); + if (preGeneratedAudio && this.isUserInteracted) { + firstAckPromise = new Promise((resolve) => { + this.lastAISpeech = this.normalizeText(ack.text); + this.ttsPlayer.src = `data:audio/mp3;base64,${preGeneratedAudio}`; + this.ttsPlayer.onended = () => resolve(); + this.ttsPlayer.play().catch(_e => resolve()); + }); + } else { + firstAckPromise = this.speakTextGCP(ack.text, false); + } + } catch (_e) {} + } + if (firstAckPromise) await firstAckPromise; + + const cleanText = this.removeFillers(message); + const fallbackResponse = this.generateFallbackResponse(cleanText); + + if (this.isTTSEnabled && this.isUserInteracted) await this.speakTextGCP(fallbackResponse, false, false, isTextInput); + this.addMessage('assistant', fallbackResponse); + + setTimeout(async () => { + const additionalResponse = this.t('additionalResponse'); + if (this.isTTSEnabled && this.isUserInteracted) await this.speakTextGCP(additionalResponse, false, false, isTextInput); + this.addMessage('assistant', additionalResponse); + }, 3000); + } + + this.isFromVoiceInput = false; + + if (this.waitOverlayTimer) clearTimeout(this.waitOverlayTimer); + this.waitOverlayTimer = window.setTimeout(() => { this.showWaitOverlay(); }, 4000); + + try { + const response = await fetch(`${this.apiBase}/api/chat`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + session_id: currentSessionId, + message: message, + stage: this.currentStage, + language: this.currentLanguage, + mode: this.currentMode + }) + }); + const data = await response.json(); + + if (this.sessionId !== currentSessionId) return; + + this.hideWaitOverlay(); + this.currentAISpeech = data.response; + this.addMessage('assistant', data.response, data.summary); + + if (!isTextInput && this.isTTSEnabled) { + this.stopCurrentAudio(); + } + + if (data.shops && data.shops.length > 0) { + this.currentShops = data.shops; + this.els.reservationBtn.classList.add('visible'); + this.els.userInput.value = ''; + document.dispatchEvent(new CustomEvent('displayShops', { + detail: { shops: data.shops, language: this.currentLanguage } + })); + + const section = document.getElementById('shopListSection'); + if (section) section.classList.add('has-shops'); + if (window.innerWidth < 1024) { + setTimeout(() => { + const shopSection = document.getElementById('shopListSection'); + if (shopSection) shopSection.scrollIntoView({ behavior: 'smooth', block: 'start' }); + }, 300); + } + + (async () => { + try { + this.isAISpeaking = true; + if (this.isRecording) { this.stopStreamingSTT(); } + + await this.speakTextGCP(this.t('ttsIntro'), true, false, isTextInput); + + const lines = data.response.split('\n\n'); + let introText = ""; + let shopLines = lines; + if (lines[0].includes('ご希望に合うお店') && lines[0].includes('ご紹介します')) { + introText = lines[0]; + shopLines = lines.slice(1); + } + + let introPart2Promise: Promise | null = null; + if (introText && this.isTTSEnabled && this.isUserInteracted && !isTextInput) { + const preGeneratedIntro = this.preGeneratedAcks.get(introText); + if (preGeneratedIntro) { + introPart2Promise = new Promise((resolve) => { + this.lastAISpeech = this.normalizeText(introText); + this.ttsPlayer.src = `data:audio/mp3;base64,${preGeneratedIntro}`; + this.ttsPlayer.onended = () => resolve(); + this.ttsPlayer.play(); + }); + } else { + introPart2Promise = this.speakTextGCP(introText, false, false, isTextInput); + } + } + + let firstShopAudioPromise: Promise | null = null; + let remainingAudioPromise: Promise | null = null; + const shopLangConfig = this.LANGUAGE_CODE_MAP[this.currentLanguage]; + + if (shopLines.length > 0 && this.isTTSEnabled && this.isUserInteracted && !isTextInput) { + const firstShop = shopLines[0]; + const restShops = shopLines.slice(1).join('\n\n'); + firstShopAudioPromise = (async () => { + const cleanText = this.stripMarkdown(firstShop); + const response = await fetch(`${this.apiBase}/api/tts/synthesize`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + text: cleanText, language_code: shopLangConfig.tts, voice_name: shopLangConfig.voice + }) + }); + const result = await response.json(); + return result.success ? `data:audio/mp3;base64,${result.audio}` : null; + })(); + + if (restShops) { + remainingAudioPromise = (async () => { + const cleanText = this.stripMarkdown(restShops); + const response = await fetch(`${this.apiBase}/api/tts/synthesize`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + text: cleanText, language_code: shopLangConfig.tts, voice_name: shopLangConfig.voice + }) + }); + const result = await response.json(); + return result.success ? `data:audio/mp3;base64,${result.audio}` : null; + })(); + } + } + + if (introPart2Promise) await introPart2Promise; + + if (firstShopAudioPromise) { + const firstShopAudio = await firstShopAudioPromise; + if (firstShopAudio) { + const firstShopText = this.stripMarkdown(shopLines[0]); + this.lastAISpeech = this.normalizeText(firstShopText); + + if (!isTextInput && this.isTTSEnabled) { + this.stopCurrentAudio(); + } + + this.ttsPlayer.src = firstShopAudio; + await new Promise((resolve) => { + this.ttsPlayer.onended = () => { + this.els.voiceStatus.innerHTML = this.t('voiceStatusStopped'); + this.els.voiceStatus.className = 'voice-status stopped'; + resolve(); + }; + this.els.voiceStatus.innerHTML = this.t('voiceStatusSpeaking'); + this.els.voiceStatus.className = 'voice-status speaking'; + this.ttsPlayer.play(); + }); + + if (remainingAudioPromise) { + const remainingAudio = await remainingAudioPromise; + if (remainingAudio) { + const restShopsText = this.stripMarkdown(shopLines.slice(1).join('\n\n')); + this.lastAISpeech = this.normalizeText(restShopsText); + await new Promise(r => setTimeout(r, 500)); + + if (!isTextInput && this.isTTSEnabled) { + this.stopCurrentAudio(); + } + + this.ttsPlayer.src = remainingAudio; + await new Promise((resolve) => { + this.ttsPlayer.onended = () => { + this.els.voiceStatus.innerHTML = this.t('voiceStatusStopped'); + this.els.voiceStatus.className = 'voice-status stopped'; + resolve(); + }; + this.els.voiceStatus.innerHTML = this.t('voiceStatusSpeaking'); + this.els.voiceStatus.className = 'voice-status speaking'; + this.ttsPlayer.play(); + }); + } + } + } + } + this.isAISpeaking = false; + } catch (_e) { this.isAISpeaking = false; } + })(); + } else { + if (data.response) { + const extractedShops = this.extractShopsFromResponse(data.response); + if (extractedShops.length > 0) { + this.currentShops = extractedShops; + this.els.reservationBtn.classList.add('visible'); + document.dispatchEvent(new CustomEvent('displayShops', { + detail: { shops: extractedShops, language: this.currentLanguage } + })); + const section = document.getElementById('shopListSection'); + if (section) section.classList.add('has-shops'); + this.speakTextGCP(data.response, true, false, isTextInput); + } else { + this.speakTextGCP(data.response, true, false, isTextInput); + } + } + } + } catch (error) { + console.error('送信エラー:', error); + this.hideWaitOverlay(); + this.showError('メッセージの送信に失敗しました。'); + } finally { + this.resetInputState(); + this.els.userInput.blur(); + } + } + + protected async speakTextGCP(text: string, stopPrevious: boolean = true, autoRestartMic: boolean = false, skipAudio: boolean = false) { + if (skipAudio) return Promise.resolve(); + if (!this.isTTSEnabled || !text) return Promise.resolve(); + + if (stopPrevious && this.isTTSEnabled) { + this.ttsPlayer.pause(); + } + + const cleanText = this.stripMarkdown(text); + try { + this.isAISpeaking = true; + if (this.isRecording && (this.isIOS || this.isAndroid)) { + this.stopStreamingSTT(); + } + + this.els.voiceStatus.innerHTML = this.t('voiceStatusSynthesizing'); + this.els.voiceStatus.className = 'voice-status speaking'; + const langConfig = this.LANGUAGE_CODE_MAP[this.currentLanguage]; + + const response = await fetch(`${this.apiBase}/api/tts/synthesize`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + text: cleanText, language_code: langConfig.tts, voice_name: langConfig.voice + }) + }); + const data = await response.json(); + if (data.success && data.audio) { + this.ttsPlayer.src = `data:audio/mp3;base64,${data.audio}`; + const playPromise = new Promise((resolve) => { + this.ttsPlayer.onended = async () => { + this.els.voiceStatus.innerHTML = this.t('voiceStatusStopped'); + this.els.voiceStatus.className = 'voice-status stopped'; + this.isAISpeaking = false; + if (autoRestartMic) { + if (!this.isRecording) { + try { await this.toggleRecording(); } catch (_error) { this.showMicPrompt(); } + } + } + resolve(); + }; + this.ttsPlayer.onerror = () => { + this.isAISpeaking = false; + resolve(); + }; + }); + + if (this.isUserInteracted) { + this.lastAISpeech = this.normalizeText(cleanText); + await this.ttsPlayer.play(); + await playPromise; + } else { + this.showClickPrompt(); + this.els.voiceStatus.innerHTML = this.t('voiceStatusStopped'); + this.els.voiceStatus.className = 'voice-status stopped'; + this.isAISpeaking = false; + } + } else { + this.isAISpeaking = false; + } + } catch (_error) { + this.els.voiceStatus.innerHTML = this.t('voiceStatusStopped'); + this.els.voiceStatus.className = 'voice-status stopped'; + this.isAISpeaking = false; + } + } + + protected showWaitOverlay() { + this.els.waitOverlay.classList.remove('hidden'); + this.els.waitVideo.currentTime = 0; + this.els.waitVideo.play().catch((e: any) => console.log('Video err', e)); + } + + protected hideWaitOverlay() { + if (this.waitOverlayTimer) { clearTimeout(this.waitOverlayTimer); this.waitOverlayTimer = null; } + this.els.waitOverlay.classList.add('hidden'); + setTimeout(() => this.els.waitVideo.pause(), 500); + } + + protected unlockAudioParams() { + this.audioManager.unlockAudioParams(this.ttsPlayer); + } + + protected enableAudioPlayback() { + if (!this.isUserInteracted) { + this.isUserInteracted = true; + const clickPrompt = this.container.querySelector('.click-prompt'); + if (clickPrompt) clickPrompt.remove(); + this.unlockAudioParams(); + } + } + + protected stopCurrentAudio() { + this.ttsPlayer.pause(); + this.ttsPlayer.currentTime = 0; + } + + protected showClickPrompt() { + const prompt = document.createElement('div'); + prompt.className = 'click-prompt'; + prompt.innerHTML = `

🔊

${this.t('clickPrompt')}

🔊

`; + prompt.addEventListener('click', () => this.enableAudioPlayback()); + this.container.style.position = 'relative'; + this.container.appendChild(prompt); + } + + protected showMicPrompt() { + const modal = document.createElement('div'); + modal.id = 'mic-prompt-modal'; + modal.style.cssText = `position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.8); display: flex; align-items: center; justify-content: center; z-index: 10000; animation: fadeIn 0.3s ease;`; + modal.innerHTML = ` +
+
🎤
+
マイクをONにしてください
+
AIの回答が終わりました。
続けて話すにはマイクボタンをタップしてください。
+ +
+ `; + const style = document.createElement('style'); + style.textContent = `@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }`; + document.head.appendChild(style); + document.body.appendChild(modal); + + const btn = document.getElementById('mic-prompt-btn'); + btn?.addEventListener('click', async () => { + modal.remove(); + await this.toggleRecording(); + }); + setTimeout(() => { if (document.getElementById('mic-prompt-modal')) { modal.remove(); } }, 3000); + } + + protected stripMarkdown(text: string): string { + return text.replace(/\*\*([^*]+)\*\*/g, '$1').replace(/\*([^*]+)\*/g, '$1').replace(/__([^_]+)__/g, '$1').replace(/_([^_]+)_/g, '$1').replace(/^#+\s*/gm, '').replace(/\[([^\]]+)\]\([^)]+\)/g, '$1').replace(/`([^`]+)`/g, '$1').replace(/^(\d+)\.\s+/gm, '$1番目、').replace(/\s+/g, ' ').trim(); + } + + protected normalizeText(text: string): string { + return text.replace(/\s+/g, '').replace(/[、。!?,.!?]/g, '').toLowerCase(); + } + + protected removeFillers(text: string): string { + // @ts-ignore + const pattern = i18n[this.currentLanguage].patterns.fillers; + return text.replace(pattern, ''); + } + + protected generateFallbackResponse(text: string): string { + return this.t('fallbackResponse', text); + } + + protected selectSmartAcknowledgment(userMessage: string) { + const messageLower = userMessage.trim(); + // @ts-ignore + const p = i18n[this.currentLanguage].patterns; + if (p.ackQuestions.test(messageLower)) return { text: this.t('ackConfirm'), logText: `質問形式` }; + if (p.ackLocation.test(messageLower)) return { text: this.t('ackSearch'), logText: `場所` }; + if (p.ackSearch.test(messageLower)) return { text: this.t('ackUnderstood'), logText: `検索` }; + return { text: this.t('ackYes'), logText: `デフォルト` }; + } + + protected isSemanticEcho(transcript: string, aiText: string): boolean { + if (!aiText || !transcript) return false; + const normTranscript = this.normalizeText(transcript); + const normAI = this.normalizeText(aiText); + if (normAI === normTranscript) return true; + if (normAI.includes(normTranscript) && normTranscript.length > 5) return true; + return false; + } + + protected extractShopsFromResponse(text: string): any[] { + const shops: any[] = []; + const pattern = /(\d+)\.\s*\*\*([^*]+)\*\*[::\s]*([^\n]+)/g; + let match; + while ((match = pattern.exec(text)) !== null) { + const fullName = match[2].trim(); + const description = match[3].trim(); + let name = fullName; + const nameMatch = fullName.match(/^([^(]+)[(]([^)]+)[)]/); + if (nameMatch) name = nameMatch[1].trim(); + const encodedName = encodeURIComponent(name); + shops.push({ name: name, description: description, category: 'イタリアン', hotpepper_url: `https://www.hotpepper.jp/SA11/srchRS/?keyword=${encodedName}`, maps_url: `https://www.google.com/maps/search/${encodedName}`, tabelog_url: `https://tabelog.com/rstLst/?vs=1&sa=&sk=${encodedName}` }); + } + return shops; + } + + protected openReservationModal() { + if (this.currentShops.length === 0) { this.showError(this.t('searchError')); return; } + document.dispatchEvent(new CustomEvent('openReservationModal', { detail: { shops: this.currentShops } })); + } + + protected toggleTTS() { + if (!this.isUserInteracted) { this.enableAudioPlayback(); return; } + this.enableAudioPlayback(); + this.isTTSEnabled = !this.isTTSEnabled; + + this.els.speakerBtn.title = this.isTTSEnabled ? this.t('btnTTSOn') : this.t('btnTTSOff'); + if (this.isTTSEnabled) { + this.els.speakerBtn.classList.remove('disabled'); + } else { + this.els.speakerBtn.classList.add('disabled'); + } + + if (!this.isTTSEnabled) this.stopCurrentAudio(); + } + + protected stopAllActivities() { + if (this.isProcessing) { + fetch(`${this.apiBase}/api/cancel`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ session_id: this.sessionId }) + }).catch(err => console.error('中止リクエスト失敗:', err)); + } + + this.audioManager.fullResetAudioResources(); + this.isRecording = false; + this.els.micBtn.classList.remove('recording'); + if (this.socket && this.socket.connected) { this.socket.emit('stop_stream'); } + this.stopCurrentAudio(); + this.hideWaitOverlay(); + this.isProcessing = false; + this.isAISpeaking = false; + this.els.voiceStatus.innerHTML = this.t('voiceStatusStopped'); + this.els.voiceStatus.className = 'voice-status stopped'; + this.els.userInput.value = ''; + + // ★修正: containerにスクロール(chat-header-controlsが隠れないように) + if (window.innerWidth < 1024) { + setTimeout(() => { this.container.scrollIntoView({ behavior: 'smooth', block: 'start' }); }, 100); + } + } + + protected addMessage(role: string, text: string, summary: string | null = null, isInitial: boolean = false) { + const div = document.createElement('div'); + div.className = `message ${role}`; + if (isInitial) div.setAttribute('data-initial', 'true'); + + let contentHtml = `
${text}
`; + div.innerHTML = `
${role === 'assistant' ? '🍽' : '👤'}
${contentHtml}`; + this.els.chatArea.appendChild(div); + this.els.chatArea.scrollTop = this.els.chatArea.scrollHeight; + } + + protected resetInputState() { + this.isProcessing = false; + this.els.sendBtn.disabled = false; + this.els.micBtn.disabled = false; + this.els.userInput.disabled = false; + } + + protected showError(msg: string) { + const div = document.createElement('div'); + div.className = 'error-message'; + div.innerText = msg; + this.els.chatArea.appendChild(div); + this.els.chatArea.scrollTop = this.els.chatArea.scrollHeight; + } + + protected t(key: string, ...args: any[]): string { + // @ts-ignore + const translation = i18n[this.currentLanguage][key]; + if (typeof translation === 'function') return translation(...args); + return translation || key; + } + + protected updateUILanguage() { + console.log('[Core] Updating UI language to:', this.currentLanguage); + + this.els.voiceStatus.innerHTML = this.t('voiceStatusStopped'); + this.els.userInput.placeholder = this.t('inputPlaceholder'); + this.els.micBtn.title = this.t('btnVoiceInput'); + this.els.speakerBtn.title = this.isTTSEnabled ? this.t('btnTTSOn') : this.t('btnTTSOff'); + this.els.sendBtn.textContent = this.t('btnSend'); + this.els.reservationBtn.innerHTML = this.t('btnReservation'); + + const pageTitle = document.getElementById('pageTitle'); + if (pageTitle) pageTitle.innerHTML = ` ${this.t('pageTitle')}`; + const pageSubtitle = document.getElementById('pageSubtitle'); + if (pageSubtitle) pageSubtitle.textContent = this.t('pageSubtitle'); + const shopListTitle = document.getElementById('shopListTitle'); + if (shopListTitle) shopListTitle.innerHTML = `🍽 ${this.t('shopListTitle')}`; + const shopListEmpty = document.getElementById('shopListEmpty'); + if (shopListEmpty) shopListEmpty.textContent = this.t('shopListEmpty'); + const pageFooter = document.getElementById('pageFooter'); + if (pageFooter) pageFooter.innerHTML = `${this.t('footerMessage')} ✨`; + + const initialMessage = this.els.chatArea.querySelector('.message.assistant[data-initial="true"] .message-text'); + if (initialMessage) { + initialMessage.textContent = this.t('initialGreeting'); + } + + const waitText = document.querySelector('.wait-text'); + if (waitText) waitText.textContent = this.t('waitMessage'); + + document.dispatchEvent(new CustomEvent('languageChange', { detail: { language: this.currentLanguage } })); + } +} diff --git a/gourmet-sp/src/scripts/lam/audio-sync-player.ts b/gourmet-sp/src/scripts/lam/audio-sync-player.ts new file mode 100644 index 0000000..1c39e8a --- /dev/null +++ b/gourmet-sp/src/scripts/lam/audio-sync-player.ts @@ -0,0 +1,262 @@ +/** + * AudioSyncPlayer - Audio playback with precise timing for expression sync + * + * Official OpenAvatarChat synchronization approach: + * - Audio and expression data are bundled together from server + * - This player plays audio and tracks playback position + * - Expression frames are indexed based on audio playback time + * + * @module audio-sync-player + */ + +export interface AudioSample { + audioData: Int16Array | Float32Array; + sampleRate: number; + startTime?: number; // Playback start time in seconds + batchId: number; + endOfBatch: boolean; +} + +export interface AudioSyncPlayerOptions { + sampleRate?: number; + onEnded?: (batchId: number) => void; + onStarted?: (batchId: number) => void; +} + +export class AudioSyncPlayer { + private audioContext: AudioContext | null = null; + private gainNode: GainNode | null = null; + private sampleRate: number; + private isMuted: boolean = false; + + // Playback tracking + private _firstStartAbsoluteTime: number | null = null; // When playback started (Date.now()) + private _samplesList: AudioSample[] = []; + private _currentBatchId: number = -1; + private _isPlaying: boolean = false; + + // Callbacks + private onEnded: ((batchId: number) => void) | null = null; + private onStarted: ((batchId: number) => void) | null = null; + + // Queued audio sources + private scheduledSources: AudioBufferSourceNode[] = []; + private nextStartTime: number = 0; + + constructor(options: AudioSyncPlayerOptions = {}) { + this.sampleRate = options.sampleRate || 16000; + this.onEnded = options.onEnded || null; + this.onStarted = options.onStarted || null; + } + + /** + * Initialize audio context (must be called after user interaction) + */ + async initialize(): Promise { + if (this.audioContext) return; + + this.audioContext = new AudioContext({ sampleRate: this.sampleRate }); + this.gainNode = this.audioContext.createGain(); + this.gainNode.connect(this.audioContext.destination); + this.gainNode.gain.value = this.isMuted ? 0 : 1; + + // Resume context if suspended + if (this.audioContext.state === 'suspended') { + await this.audioContext.resume(); + } + } + + /** + * Get the absolute time when playback started + */ + get firstStartAbsoluteTime(): number | null { + return this._firstStartAbsoluteTime; + } + + /** + * Get all samples list with their start times + */ + get samplesList(): AudioSample[] { + return this._samplesList; + } + + /** + * Get current batch ID + */ + get currentBatchId(): number { + return this._currentBatchId; + } + + /** + * Check if currently playing + */ + get isPlaying(): boolean { + return this._isPlaying; + } + + /** + * Feed audio data for playback + */ + async feed(sample: AudioSample): Promise { + if (!this.audioContext || !this.gainNode) { + await this.initialize(); + } + + const ctx = this.audioContext!; + const gain = this.gainNode!; + + // Check if this is a new batch (new speech) + if (sample.batchId !== this._currentBatchId) { + // New batch - reset timing + this._currentBatchId = sample.batchId; + this._firstStartAbsoluteTime = null; + this._samplesList = []; + this.nextStartTime = ctx.currentTime; + + // Cancel any scheduled sources from previous batch + this.cancelScheduledSources(); + } + + // Convert Int16 to Float32 if needed + let audioFloat: Float32Array; + if (sample.audioData instanceof Int16Array) { + audioFloat = new Float32Array(sample.audioData.length); + for (let i = 0; i < sample.audioData.length; i++) { + audioFloat[i] = sample.audioData[i] / 32768.0; + } + } else { + audioFloat = sample.audioData; + } + + // Create audio buffer + const buffer = ctx.createBuffer(1, audioFloat.length, sample.sampleRate); + buffer.copyToChannel(audioFloat, 0); + + // Create source node + const source = ctx.createBufferSource(); + source.buffer = buffer; + source.connect(gain); + + // Calculate start time + const startTime = Math.max(ctx.currentTime, this.nextStartTime); + const duration = audioFloat.length / sample.sampleRate; + + // Record sample info with start time + const sampleInfo: AudioSample = { + ...sample, + startTime: startTime - (this.nextStartTime === ctx.currentTime ? 0 : this.nextStartTime - ctx.currentTime) + }; + this._samplesList.push(sampleInfo); + + // Track first start time + if (this._firstStartAbsoluteTime === null) { + this._firstStartAbsoluteTime = Date.now(); + this._isPlaying = true; + this.onStarted?.(sample.batchId); + console.log(`[AudioSyncPlayer] Started batch ${sample.batchId}`); + } + + // Schedule playback + source.start(startTime); + this.scheduledSources.push(source); + this.nextStartTime = startTime + duration; + + // Handle end of batch + if (sample.endOfBatch) { + source.onended = () => { + this._isPlaying = false; + console.log(`[AudioSyncPlayer] Ended batch ${sample.batchId}`); + this.onEnded?.(sample.batchId); + }; + } + + console.log(`[AudioSyncPlayer] Queued ${duration.toFixed(2)}s audio, batch=${sample.batchId}, end=${sample.endOfBatch}`); + } + + /** + * Cancel all scheduled audio sources + */ + private cancelScheduledSources(): void { + for (const source of this.scheduledSources) { + try { + source.stop(); + source.disconnect(); + } catch (e) { + // Ignore errors from already stopped sources + } + } + this.scheduledSources = []; + } + + /** + * Stop playback and clear queue + */ + stop(): void { + this.cancelScheduledSources(); + this._isPlaying = false; + this._firstStartAbsoluteTime = null; + this._samplesList = []; + this.nextStartTime = this.audioContext?.currentTime || 0; + } + + /** + * Set mute state + */ + setMute(muted: boolean): void { + this.isMuted = muted; + if (this.gainNode) { + this.gainNode.gain.value = muted ? 0 : 1; + } + } + + /** + * Destroy the player + */ + destroy(): void { + this.stop(); + if (this.audioContext) { + this.audioContext.close(); + this.audioContext = null; + } + this.gainNode = null; + } + + /** + * Calculate current playback offset in milliseconds + * Used for expression frame synchronization + */ + getCurrentPlaybackOffset(): number { + if (!this._firstStartAbsoluteTime || !this._isPlaying) { + return -1; + } + return Date.now() - this._firstStartAbsoluteTime; + } + + /** + * Get the sample index for a given offset time + */ + getSampleIndexForOffset(offsetMs: number): { sampleIndex: number; subOffsetMs: number } { + if (this._samplesList.length === 0) { + return { sampleIndex: -1, subOffsetMs: 0 }; + } + + let lastIndex = 0; + let firstSampleStartTime: number | undefined; + + for (let i = 0; i < this._samplesList.length; i++) { + const sample = this._samplesList[i]; + if (firstSampleStartTime === undefined && sample.startTime !== undefined) { + firstSampleStartTime = sample.startTime; + } + if (sample.startTime !== undefined && + (sample.startTime - (firstSampleStartTime || 0)) * 1000 <= offsetMs) { + lastIndex = i; + } + } + + const sample = this._samplesList[lastIndex]; + const subOffsetMs = offsetMs - (sample.startTime || 0) * 1000; + + return { sampleIndex: lastIndex, subOffsetMs }; + } +} diff --git a/gourmet-sp/src/scripts/lam/lam-websocket-manager.ts b/gourmet-sp/src/scripts/lam/lam-websocket-manager.ts new file mode 100644 index 0000000..b6bf446 --- /dev/null +++ b/gourmet-sp/src/scripts/lam/lam-websocket-manager.ts @@ -0,0 +1,531 @@ +/** + * LAM WebSocket Manager + * OpenAvatarChatのバックエンドと通信してリップシンクデータを受信 + * + * Official synchronization approach: + * - Server sends BUNDLED audio+expression in JBIN format + * - Client plays audio and syncs expression based on playback position + */ + +import { AudioSyncPlayer } from './audio-sync-player'; +import type { AudioSample } from './audio-sync-player'; + +// JBIN形式のバイナリデータをパース +export interface MotionDataDescription { + data_records: { + arkit_face?: { + shape: number[]; + data_type: string; + sample_rate: number; + data_offset: number; + channel_names: string[]; + }; + avatar_audio?: { + shape: number[]; + data_type: string; + sample_rate: number; + data_offset: number; + }; + }; + batch_id: number; + batch_name: string; + start_of_batch: boolean; + end_of_batch: boolean; +} + +export interface MotionData { + description: MotionDataDescription; + arkitFace: Float32Array | null; + audio: Int16Array | null; +} + +export interface ExpressionData { + [key: string]: number; +} + +export interface ExpressionFrameData { + frames: ExpressionData[]; // All frames for this audio chunk + frameRate: number; // Frames per second + frameCount: number; // Total number of frames +} + +// Bundled motion data group (official sync approach) +export interface MotionDataGroup { + batchId: number; + arkitFaceArrays: Float32Array[]; // Expression frames for each audio chunk + channelNames: string[]; + sampleRate: number; // Expression frame rate + arkitFaceShape: number; // Number of channels per frame (52) +} + +/** + * JBIN形式のバイナリデータをパース + */ +export function parseMotionData(buffer: ArrayBuffer): MotionData { + const view = new DataView(buffer); + + // マジックナンバー確認 "JBIN" + const fourcc = String.fromCharCode( + view.getUint8(0), + view.getUint8(1), + view.getUint8(2), + view.getUint8(3) + ); + + if (fourcc !== 'JBIN') { + throw new Error(`Invalid JBIN format: ${fourcc}`); + } + + // ヘッダーサイズ読み取り (Little Endian) + const jsonSize = view.getUint32(4, true); + const binSize = view.getUint32(8, true); + + // JSON部分をデコード + const jsonBytes = new Uint8Array(buffer, 12, jsonSize); + const jsonString = new TextDecoder().decode(jsonBytes); + const description: MotionDataDescription = JSON.parse(jsonString); + + // バイナリデータ開始位置 + const binaryOffset = 12 + jsonSize; + + // ARKit顔表情データの抽出 + let arkitFace: Float32Array | null = null; + if (description.data_records.arkit_face) { + const faceRecord = description.data_records.arkit_face; + const faceOffset = binaryOffset + faceRecord.data_offset; + const faceLength = faceRecord.shape.reduce((a, b) => a * b, 1); + arkitFace = new Float32Array(buffer, faceOffset, faceLength); + } + + // オーディオデータの抽出 + let audio: Int16Array | null = null; + if (description.data_records.avatar_audio) { + const audioRecord = description.data_records.avatar_audio; + const audioOffset = binaryOffset + audioRecord.data_offset; + const audioLength = audioRecord.shape.reduce((a, b) => a * b, 1); + audio = new Int16Array(buffer, audioOffset, audioLength); + } + + return { description, arkitFace, audio }; +} + +/** + * ARKit表情データをExpressionDataに変換 + */ +export function convertToExpressionData( + arkitFace: Float32Array, + channelNames: string[] +): ExpressionData { + const expressionData: ExpressionData = {}; + channelNames.forEach((name, index) => { + if (index < arkitFace.length) { + expressionData[name] = arkitFace[index]; + } + }); + return expressionData; +} + +/** + * LAM WebSocket Manager + * Handles bundled audio+expression data with official sync approach + */ +export class LAMWebSocketManager { + private ws: WebSocket | null = null; + private definition: MotionDataDescription | null = null; + private channelNames: string[] = []; + private onExpressionUpdate: ((data: ExpressionData) => void) | null = null; + private onExpressionFrames: ((data: ExpressionFrameData) => void) | null = null; + private onAudioData: ((audio: Int16Array) => void) | null = null; + private onConnectionChange: ((connected: boolean) => void) | null = null; + private onBatchStarted: ((batchId: number) => void) | null = null; + private onBatchEnded: ((batchId: number) => void) | null = null; + private reconnectAttempts = 0; + private maxReconnectAttempts = 5; + private reconnectDelay = 1000; + private pingInterval: ReturnType | null = null; + private currentWsUrl: string = ''; + + // Official sync: AudioSyncPlayer + motion data groups + private audioPlayer: AudioSyncPlayer; + private motionDataGroups: MotionDataGroup[] = []; + private currentBatchId: number = -1; + private arkitFaceShape: number = 52; + private arkitFaceSampleRate: number = 30; + + constructor(options?: { + onExpressionUpdate?: (data: ExpressionData) => void; + onExpressionFrames?: (data: ExpressionFrameData) => void; + onAudioData?: (audio: Int16Array) => void; + onConnectionChange?: (connected: boolean) => void; + onBatchStarted?: (batchId: number) => void; + onBatchEnded?: (batchId: number) => void; + }) { + if (options) { + this.onExpressionUpdate = options.onExpressionUpdate || null; + this.onExpressionFrames = options.onExpressionFrames || null; + this.onAudioData = options.onAudioData || null; + this.onConnectionChange = options.onConnectionChange || null; + this.onBatchStarted = options.onBatchStarted || null; + this.onBatchEnded = options.onBatchEnded || null; + } + + // Initialize AudioSyncPlayer + this.audioPlayer = new AudioSyncPlayer({ + sampleRate: 16000, + onStarted: (batchId) => { + console.log(`[LAM WebSocket] Audio playback started for batch ${batchId}`); + this.onBatchStarted?.(batchId); + }, + onEnded: (batchId) => { + console.log(`[LAM WebSocket] Audio playback ended for batch ${batchId}`); + this.onBatchEnded?.(batchId); + // Clean up old motion data groups + this.motionDataGroups = this.motionDataGroups.filter(g => g.batchId > batchId); + } + }); + } + + /** + * WebSocket接続を開始 + */ + connect(wsUrl: string): Promise { + return new Promise((resolve, reject) => { + try { + this.ws = new WebSocket(wsUrl); + this.ws.binaryType = 'arraybuffer'; + + this.ws.onopen = () => { + console.log('[LAM WebSocket] Connected'); + this.reconnectAttempts = 0; + this.currentWsUrl = wsUrl; + this.onConnectionChange?.(true); + this.startPing(); + resolve(); + }; + + this.ws.onmessage = (event) => { + this.handleMessage(event); + }; + + this.ws.onclose = (event) => { + console.log('[LAM WebSocket] Disconnected', event.code, event.reason); + this.stopPing(); + this.onConnectionChange?.(false); + this.attemptReconnect(this.currentWsUrl); + }; + + this.ws.onerror = (error) => { + console.error('[LAM WebSocket] Error:', error); + reject(error); + }; + } catch (error) { + reject(error); + } + }); + } + + /** + * メッセージ処理 + */ + private handleMessage(event: MessageEvent): void { + if (!(event.data instanceof ArrayBuffer)) { + // JSON形式のメッセージ(レガシー対応) + try { + const msg = JSON.parse(event.data); + + // audio2exp-service からの表情データ(複数フレーム対応)- レガシーJSON形式 + if (msg.type === 'expression' && msg.channels && msg.weights) { + const frameRate = msg.frame_rate || 30; + const frameCount = msg.frame_count || msg.weights.length; + + // 複数フレームがある場合はフレームデータとして送信 + if (msg.weights.length > 1 && this.onExpressionFrames) { + const frames: ExpressionData[] = msg.weights.map((frameWeights: number[]) => { + const frame: ExpressionData = {}; + msg.channels.forEach((name: string, index: number) => { + if (index < frameWeights.length) { + frame[name] = frameWeights[index]; + } + }); + return frame; + }); + + this.onExpressionFrames({ + frames, + frameRate, + frameCount + }); + console.log(`[LAM WebSocket] Expression frames received (legacy): ${frameCount} frames at ${frameRate}fps`); + } else { + // 1フレームの場合は従来通り + const expressionData: ExpressionData = {}; + msg.channels.forEach((name: string, index: number) => { + if (msg.weights[0] && index < msg.weights[0].length) { + expressionData[name] = msg.weights[0][index]; + } + }); + this.onExpressionUpdate?.(expressionData); + } + return; + } + + // pong応答 + if (msg.type === 'pong') { + return; + } + + console.log('[LAM WebSocket] JSON message:', msg); + } catch (e) { + console.warn('[LAM WebSocket] Unknown text message:', event.data); + } + return; + } + + // JBIN形式のバンドルデータを処理(公式同期アプローチ) + try { + const motionData = parseMotionData(event.data); + const desc = motionData.description; + + // チャンネル名を保存 + if (desc.data_records.arkit_face?.channel_names) { + this.channelNames = desc.data_records.arkit_face.channel_names; + this.arkitFaceSampleRate = desc.data_records.arkit_face.sample_rate || 30; + this.arkitFaceShape = desc.data_records.arkit_face.shape?.[1] || 52; + } + + const batchId = desc.batch_id || 0; + + // 新しいバッチの場合はmotion data groupをリセット + if (desc.start_of_batch || batchId !== this.currentBatchId) { + this.currentBatchId = batchId; + // 新しいグループを作成 + this.motionDataGroups = this.motionDataGroups.filter(g => g.batchId !== batchId); + this.motionDataGroups.push({ + batchId, + arkitFaceArrays: [], + channelNames: this.channelNames, + sampleRate: this.arkitFaceSampleRate, + arkitFaceShape: this.arkitFaceShape + }); + } + + // 表情データを保存 + if (motionData.arkitFace) { + const group = this.motionDataGroups.find(g => g.batchId === batchId); + if (group) { + group.arkitFaceArrays.push(motionData.arkitFace); + } + } + + // オーディオデータをプレーヤーに送信 + if (motionData.audio) { + const audioSample: AudioSample = { + audioData: motionData.audio, + sampleRate: desc.data_records.avatar_audio?.sample_rate || 16000, + batchId, + endOfBatch: desc.end_of_batch + }; + this.audioPlayer.feed(audioSample); + + // レガシーコールバックも呼び出し + this.onAudioData?.(motionData.audio); + } + + console.log(`[LAM WebSocket] JBIN bundle received: batch=${batchId}, start=${desc.start_of_batch}, end=${desc.end_of_batch}`); + + } catch (error) { + console.error('[LAM WebSocket] JBIN parse error:', error); + } + } + + /** + * Get current expression frame based on audio playback position + * This is the official OpenAvatarChat synchronization method + */ + getCurrentExpressionFrame(): ExpressionData | null { + const offsetMs = this.audioPlayer.getCurrentPlaybackOffset(); + if (offsetMs < 0) { + return null; + } + + // Find the motion data group for current batch + const group = this.motionDataGroups.find(g => g.batchId === this.audioPlayer.currentBatchId); + if (!group || group.arkitFaceArrays.length === 0) { + return null; + } + + // Get the sample index based on playback position + const { sampleIndex, subOffsetMs } = this.audioPlayer.getSampleIndexForOffset(offsetMs); + if (sampleIndex < 0 || sampleIndex >= group.arkitFaceArrays.length) { + return null; + } + + // Calculate frame index within the sample + const frameOffset = Math.floor((subOffsetMs / 1000) * group.sampleRate); + const arkitFaceArray = group.arkitFaceArrays[sampleIndex]; + + // Extract frame data + const startIdx = frameOffset * group.arkitFaceShape; + const endIdx = startIdx + group.arkitFaceShape; + + if (startIdx >= arkitFaceArray.length) { + // Use last frame if we're past the end + const lastFrameStart = Math.max(0, arkitFaceArray.length - group.arkitFaceShape); + const frameData = arkitFaceArray.slice(lastFrameStart, lastFrameStart + group.arkitFaceShape); + return this.arrayToExpressionData(frameData, group.channelNames); + } + + const frameData = arkitFaceArray.slice(startIdx, endIdx); + return this.arrayToExpressionData(frameData, group.channelNames); + } + + /** + * Convert Float32Array to ExpressionData object + */ + private arrayToExpressionData(frameData: Float32Array, channelNames: string[]): ExpressionData { + const result: ExpressionData = {}; + channelNames.forEach((name, index) => { + if (index < frameData.length) { + result[name] = frameData[index]; + } + }); + return result; + } + + /** + * Check if audio is currently playing + */ + isAudioPlaying(): boolean { + return this.audioPlayer.isPlaying; + } + + /** + * Stop audio playback + */ + stopAudio(): void { + this.audioPlayer.stop(); + } + + /** + * Set audio mute state + */ + setAudioMute(muted: boolean): void { + this.audioPlayer.setMute(muted); + } + + /** + * Initialize audio player (call after user interaction) + */ + async initializeAudio(): Promise { + await this.audioPlayer.initialize(); + } + + /** + * 再接続を試みる + */ + private attemptReconnect(wsUrl: string): void { + if (this.reconnectAttempts >= this.maxReconnectAttempts) { + console.error('[LAM WebSocket] Max reconnect attempts reached'); + return; + } + + this.reconnectAttempts++; + const delay = this.reconnectDelay * Math.pow(2, this.reconnectAttempts - 1); + console.log(`[LAM WebSocket] Reconnecting in ${delay}ms (attempt ${this.reconnectAttempts})`); + + setTimeout(() => { + this.connect(wsUrl).catch(console.error); + }, delay); + } + + /** + * スピーチ終了を通知 + */ + sendEndSpeech(): void { + if (this.ws && this.ws.readyState === WebSocket.OPEN) { + this.ws.send(JSON.stringify({ + header: { name: 'EndSpeech' } + })); + } + } + + /** + * 接続を閉じる + */ + disconnect(): void { + this.stopPing(); + if (this.ws) { + this.ws.close(); + this.ws = null; + } + this.definition = null; + this.channelNames = []; + this.audioPlayer.stop(); + this.motionDataGroups = []; + } + + /** + * Destroy the manager and clean up resources + */ + destroy(): void { + this.disconnect(); + this.audioPlayer.destroy(); + } + + /** + * Ping送信を開始(キープアライブ) + */ + private startPing(): void { + this.stopPing(); + this.pingInterval = setInterval(() => { + if (this.ws && this.ws.readyState === WebSocket.OPEN) { + this.ws.send(JSON.stringify({ type: 'ping' })); + } + }, 5000); // 5秒間隔でping + } + + /** + * Ping送信を停止 + */ + private stopPing(): void { + if (this.pingInterval) { + clearInterval(this.pingInterval); + this.pingInterval = null; + } + } + + /** + * 接続状態を確認 + */ + isConnected(): boolean { + return this.ws !== null && this.ws.readyState === WebSocket.OPEN; + } + + /** + * チャンネル名一覧を取得 + */ + getChannelNames(): string[] { + return this.channelNames; + } +} + +/** + * ARKit 52チャンネル名(標準) + */ +export const ARKIT_CHANNEL_NAMES = [ + 'browDownLeft', 'browDownRight', 'browInnerUp', 'browOuterUpLeft', 'browOuterUpRight', + 'cheekPuff', 'cheekSquintLeft', 'cheekSquintRight', + 'eyeBlinkLeft', 'eyeBlinkRight', 'eyeLookDownLeft', 'eyeLookDownRight', + 'eyeLookInLeft', 'eyeLookInRight', 'eyeLookOutLeft', 'eyeLookOutRight', + 'eyeLookUpLeft', 'eyeLookUpRight', 'eyeSquintLeft', 'eyeSquintRight', + 'eyeWideLeft', 'eyeWideRight', + 'jawForward', 'jawLeft', 'jawOpen', 'jawRight', + 'mouthClose', 'mouthDimpleLeft', 'mouthDimpleRight', 'mouthFrownLeft', 'mouthFrownRight', + 'mouthFunnel', 'mouthLeft', 'mouthLowerDownLeft', 'mouthLowerDownRight', + 'mouthPressLeft', 'mouthPressRight', 'mouthPucker', 'mouthRight', + 'mouthRollLower', 'mouthRollUpper', 'mouthShrugLower', 'mouthShrugUpper', + 'mouthSmileLeft', 'mouthSmileRight', 'mouthStretchLeft', 'mouthStretchRight', + 'mouthUpperUpLeft', 'mouthUpperUpRight', + 'noseSneerLeft', 'noseSneerRight', + 'tongueOut' +]; diff --git a/gourmet-sp/src/styles/global.css b/gourmet-sp/src/styles/global.css new file mode 100644 index 0000000..d36bf51 --- /dev/null +++ b/gourmet-sp/src/styles/global.css @@ -0,0 +1,5 @@ +@import "tailwindcss"; +/* src/styles/global.css */ +@tailwind base; +@tailwind components; +@tailwind utilities; \ No newline at end of file