├── README.md ├── assets ├── demo │ ├── ff │ │ ├── 6_444o0314.wav │ │ ├── 6_None1_clean.png │ │ ├── 6_None1_clean.wav │ │ ├── 6_None1_noisy.png │ │ ├── 6_None1_noisy.wav │ │ ├── 6_None1_pre.png │ │ ├── 6_None1_pre.wav │ │ ├── 6_ref_444c020v.wav │ │ ├── 7_053o020e.wav │ │ ├── 7_None1_clean.png │ │ ├── 7_None1_clean.wav │ │ ├── 7_None1_noisy.png │ │ ├── 7_None1_noisy.wav │ │ ├── 7_None1_pre.png │ │ ├── 7_None1_pre.wav │ │ └── 7_ref_053o020r.wav │ ├── fm_mf │ │ ├── 0_445c0206.wav │ │ ├── 0_None1_clean.png │ │ ├── 0_None1_clean.wav │ │ ├── 0_None1_noisy.png │ │ ├── 0_None1_noisy.wav │ │ ├── 0_None1_pre.png │ │ ├── 0_None1_pre.wav │ │ ├── 0_ref_445o030h.wav │ │ ├── 1_22gc0105.wav │ │ ├── 1_None1_clean.png │ │ ├── 1_None1_clean.wav │ │ ├── 1_None1_noisy.png │ │ ├── 1_None1_noisy.wav │ │ ├── 1_None1_pre.png │ │ ├── 1_None1_pre.wav │ │ └── 1_ref_22gc010r.wav │ └── mm │ │ ├── 4_22go0107.wav │ │ ├── 4_None1_clean.png │ │ ├── 4_None1_clean.wav │ │ ├── 4_None1_noisy.png │ │ ├── 4_None1_noisy.wav │ │ ├── 4_None1_pre.png │ │ ├── 4_None1_pre.wav │ │ ├── 4_ref_22ga010b.wav │ │ ├── 5_051c010u.wav │ │ ├── 5_None1_clean.png │ │ ├── 5_None1_clean.wav │ │ ├── 5_None1_noisy.png │ │ ├── 5_None1_noisy.wav │ │ ├── 5_None1_pre.png │ │ ├── 5_None1_pre.wav │ │ └── 5_ref_051a050n.wav ├── framework.png ├── model.png └── onset_offset_demo.png └── data └── wsj ├── mix_2_spk_voiceP_tt_WSJ.txt ├── spk_test_WSJ.lst └── spk_train_WSJ.lst /README.md: -------------------------------------------------------------------------------- 1 | # WASE 2 | 3 | ## Overview 4 | 5 | Demo samples of our paper *Wase: Learning When to Attend for Speaker Extraction in Cocktail Party Environments*. WASE first explicitly models **start/end time of speech** (**onset/offset cues**) in speaker extraction problem. 6 | 7 | ~~We will release code soon.~~ The source code is available in [WASE_202112](https://github.com/aispeech-lab/WASE_202112). If you have any question about implementation details, feel free to ask me (haoyunzhe2017@ia.ac.cn). 8 | 9 | ![](./assets/framework.png) 10 | 11 | ## Model 12 | 13 | WASE is adapted based on our previous proposed [framework](http://www.interspeech2020.org/uploadfile/pdf/Mon-3-11-6.pdf), which includes five modules: voiceprint encoder, onset/offset detector, speech encoder, speech decoder, and speaker extraction module. 14 | 15 | In this work, we focus on the onset/offset cues of speech and verify their effectiveness in speaker extraction task. We also combine the onset/offset cues and voiceprint cue. Onset/offset 16 | cues model start/end time of speech and voiceprint cue models the 17 | voice characteristics. The combination of two perceptual cues bring a significant performance improvement, while extra needed parameters are negligible. Please see the figure below for detailed model structure. 18 | 19 | ![](./assets/model.png) 20 | *************************************************************** 21 | 22 | ## Datasets 23 | * [WSJ0](https://catalog.ldc.upenn.edu/LDC93S6A) 24 | 25 | The training samples are generated by randomly selecting speeches of different speakers from *si_tr_s* of WSJ0, and mixing them at various signal-to-noise ratios (SNR). The evaluating samples are generated by fixed list *./data/wsj/mix_2_spk_voiceP_tt_WSJ.txt*. 26 | You may need the command below to modify the evaluating data path. 27 | ```bash 28 | sed -i 's/home\/aa/YOUR PATH/g' data/wsj/mix_2_spk_voiceP_tt_WSJ.txt 29 | ``` 30 | 31 | ## Result 32 | 33 | ### Audio Sample 34 | 35 | 36 | - Listen to audio samples at [*./assets/demo*](./assets/demo). 37 | - Spectrogram samples (clean/mixture/prediction). 38 | 39 |
40 | 41 |
42 | 43 |
44 | 45 |
46 | 47 | - Onset / Offset Visualization. 48 | 49 |
50 | 51 |
52 | 53 | This figure contains a lot of information about onset/offset cues. 54 | 1. The first modulation is almost straight. We attribute this strange phenomenon to its location near the input, where there is very little processing to mixture speech. This also reminds us that the first modulation position may be too early for onset/offset detection. 55 | 2. Except for the first modulation, the other modulation phenomena are in line with expectations. In particular, the last modulation is relatively stable with fewer spikes. 56 | 3. The last modulation has slight spikes between the start and the offset. We find that these spikes are consistent with the overlap of clean speech and inference speech. The detector seems to have lower confidence in these places than in other places where there is only clean speech or no clean speech at all. 57 | 58 | 59 | ### Metric 60 | 61 | | Methods | #Params | SDRi(dB) | 62 | | ---------------------- | ----- | ---- | 63 | | [SBF-MTSAL](https://ieeexplore.ieee.org/document/8683874) | 19.3M | 7.30 | 64 | | [SBF-MTSAL-Concat](https://ieeexplore.ieee.org/document/8683874) | 8.9M | 8.39 | 65 | | [SpEx](https://ieeexplore.ieee.org/document/9067003) | 10.8M | 14.6 | 66 | | [SpEx+](https://arxiv.org/abs/2005.04686) | 13.3M | 17.2 | 67 | | WASE (onset / offset + voiceprint) | 7.5M | 17.05 | 68 | 69 | 70 | ## Citations 71 | 72 | If you find this repo helpful, please consider citing: 73 | 74 | ``` 75 | @inproceedings{hao2021wase, 76 | title={Wase: Learning When to Attend for Speaker Extraction in Cocktail Party Environments}, 77 | author={Hao, Yunzhe and Xu, Jiaming and Zhang, Peng and Xu, Bo}, 78 | booktitle={ICASSP 2021-2021 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP)}, 79 | pages={6104--6108}, 80 | year={2021}, 81 | organization={IEEE} 82 | } 83 | ``` 84 | 85 | ``` 86 | @inproceedings{hao2020unified, 87 | title={A Unified Framework for Low-Latency Speaker Extraction in Cocktail Party Environments}, 88 | author={Hao, Yunzhe and Xu, Jiaming and Shi, Jing and Zhang, Peng and Qin, Lei and Xu, Bo}, 89 | booktitle={Proc. Interspeech 2020}, 90 | pages={1431--1435}, 91 | year={2020} 92 | } 93 | ``` 94 | For more detailed descirption, you can further explore the whole paper with [this link](https://doi.org/10.1109/ICASSP39728.2021.9413411). 95 | 96 | -------------------------------------------------------------------------------- /assets/demo/ff/6_444o0314.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/ff/6_444o0314.wav -------------------------------------------------------------------------------- /assets/demo/ff/6_None1_clean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/ff/6_None1_clean.png -------------------------------------------------------------------------------- /assets/demo/ff/6_None1_clean.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/ff/6_None1_clean.wav -------------------------------------------------------------------------------- /assets/demo/ff/6_None1_noisy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/ff/6_None1_noisy.png -------------------------------------------------------------------------------- /assets/demo/ff/6_None1_noisy.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/ff/6_None1_noisy.wav -------------------------------------------------------------------------------- /assets/demo/ff/6_None1_pre.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/ff/6_None1_pre.png -------------------------------------------------------------------------------- /assets/demo/ff/6_None1_pre.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/ff/6_None1_pre.wav -------------------------------------------------------------------------------- /assets/demo/ff/6_ref_444c020v.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/ff/6_ref_444c020v.wav -------------------------------------------------------------------------------- /assets/demo/ff/7_053o020e.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/ff/7_053o020e.wav -------------------------------------------------------------------------------- /assets/demo/ff/7_None1_clean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/ff/7_None1_clean.png -------------------------------------------------------------------------------- /assets/demo/ff/7_None1_clean.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/ff/7_None1_clean.wav -------------------------------------------------------------------------------- /assets/demo/ff/7_None1_noisy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/ff/7_None1_noisy.png -------------------------------------------------------------------------------- /assets/demo/ff/7_None1_noisy.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/ff/7_None1_noisy.wav -------------------------------------------------------------------------------- /assets/demo/ff/7_None1_pre.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/ff/7_None1_pre.png -------------------------------------------------------------------------------- /assets/demo/ff/7_None1_pre.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/ff/7_None1_pre.wav -------------------------------------------------------------------------------- /assets/demo/ff/7_ref_053o020r.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/ff/7_ref_053o020r.wav -------------------------------------------------------------------------------- /assets/demo/fm_mf/0_445c0206.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/fm_mf/0_445c0206.wav -------------------------------------------------------------------------------- /assets/demo/fm_mf/0_None1_clean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/fm_mf/0_None1_clean.png -------------------------------------------------------------------------------- /assets/demo/fm_mf/0_None1_clean.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/fm_mf/0_None1_clean.wav -------------------------------------------------------------------------------- /assets/demo/fm_mf/0_None1_noisy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/fm_mf/0_None1_noisy.png -------------------------------------------------------------------------------- /assets/demo/fm_mf/0_None1_noisy.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/fm_mf/0_None1_noisy.wav -------------------------------------------------------------------------------- /assets/demo/fm_mf/0_None1_pre.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/fm_mf/0_None1_pre.png -------------------------------------------------------------------------------- /assets/demo/fm_mf/0_None1_pre.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/fm_mf/0_None1_pre.wav -------------------------------------------------------------------------------- /assets/demo/fm_mf/0_ref_445o030h.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/fm_mf/0_ref_445o030h.wav -------------------------------------------------------------------------------- /assets/demo/fm_mf/1_22gc0105.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/fm_mf/1_22gc0105.wav -------------------------------------------------------------------------------- /assets/demo/fm_mf/1_None1_clean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/fm_mf/1_None1_clean.png -------------------------------------------------------------------------------- /assets/demo/fm_mf/1_None1_clean.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/fm_mf/1_None1_clean.wav -------------------------------------------------------------------------------- /assets/demo/fm_mf/1_None1_noisy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/fm_mf/1_None1_noisy.png -------------------------------------------------------------------------------- /assets/demo/fm_mf/1_None1_noisy.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/fm_mf/1_None1_noisy.wav -------------------------------------------------------------------------------- /assets/demo/fm_mf/1_None1_pre.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/fm_mf/1_None1_pre.png -------------------------------------------------------------------------------- /assets/demo/fm_mf/1_None1_pre.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/fm_mf/1_None1_pre.wav -------------------------------------------------------------------------------- /assets/demo/fm_mf/1_ref_22gc010r.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/fm_mf/1_ref_22gc010r.wav -------------------------------------------------------------------------------- /assets/demo/mm/4_22go0107.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/mm/4_22go0107.wav -------------------------------------------------------------------------------- /assets/demo/mm/4_None1_clean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/mm/4_None1_clean.png -------------------------------------------------------------------------------- /assets/demo/mm/4_None1_clean.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/mm/4_None1_clean.wav -------------------------------------------------------------------------------- /assets/demo/mm/4_None1_noisy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/mm/4_None1_noisy.png -------------------------------------------------------------------------------- /assets/demo/mm/4_None1_noisy.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/mm/4_None1_noisy.wav -------------------------------------------------------------------------------- /assets/demo/mm/4_None1_pre.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/mm/4_None1_pre.png -------------------------------------------------------------------------------- /assets/demo/mm/4_None1_pre.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/mm/4_None1_pre.wav -------------------------------------------------------------------------------- /assets/demo/mm/4_ref_22ga010b.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/mm/4_ref_22ga010b.wav -------------------------------------------------------------------------------- /assets/demo/mm/5_051c010u.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/mm/5_051c010u.wav -------------------------------------------------------------------------------- /assets/demo/mm/5_None1_clean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/mm/5_None1_clean.png -------------------------------------------------------------------------------- /assets/demo/mm/5_None1_clean.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/mm/5_None1_clean.wav -------------------------------------------------------------------------------- /assets/demo/mm/5_None1_noisy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/mm/5_None1_noisy.png -------------------------------------------------------------------------------- /assets/demo/mm/5_None1_noisy.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/mm/5_None1_noisy.wav -------------------------------------------------------------------------------- /assets/demo/mm/5_None1_pre.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/mm/5_None1_pre.png -------------------------------------------------------------------------------- /assets/demo/mm/5_None1_pre.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/mm/5_None1_pre.wav -------------------------------------------------------------------------------- /assets/demo/mm/5_ref_051a050n.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/demo/mm/5_ref_051a050n.wav -------------------------------------------------------------------------------- /assets/framework.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/framework.png -------------------------------------------------------------------------------- /assets/model.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/model.png -------------------------------------------------------------------------------- /assets/onset_offset_demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aispeech-lab/WASE/8020de0c3530f7cd3db0a9155dcbe15fe50eb22f/assets/onset_offset_demo.png -------------------------------------------------------------------------------- /data/wsj/spk_test_WSJ.lst: -------------------------------------------------------------------------------- 1 | 440 2 | 441 3 | 442 4 | 443 5 | 444 6 | 445 7 | 446 8 | 447 9 | 050 10 | 051 11 | 052 12 | 053 13 | 22g 14 | 22h 15 | 420 16 | 421 17 | 422 18 | 423 19 | -------------------------------------------------------------------------------- /data/wsj/spk_train_WSJ.lst: -------------------------------------------------------------------------------- 1 | 011 2 | 012 3 | 013 4 | 014 5 | 015 6 | 016 7 | 017 8 | 018 9 | 019 10 | 01a 11 | 01b 12 | 01c 13 | 01d 14 | 01e 15 | 01f 16 | 01g 17 | 01i 18 | 01j 19 | 01k 20 | 01l 21 | 01m 22 | 01n 23 | 01o 24 | 01p 25 | 01q 26 | 01r 27 | 01s 28 | 01t 29 | 01u 30 | 01v 31 | 01w 32 | 01x 33 | 01y 34 | 01z 35 | 020 36 | 021 37 | 022 38 | 023 39 | 024 40 | 025 41 | 026 42 | 027 43 | 028 44 | 029 45 | 02a 46 | 02b 47 | 02c 48 | 02d 49 | 02e 50 | 204 51 | 205 52 | 206 53 | 207 54 | 208 55 | 209 56 | 20a 57 | 20b 58 | 20c 59 | 20d 60 | 20e 61 | 20f 62 | 20g 63 | 20h 64 | 20i 65 | 20j 66 | 20k 67 | 20l 68 | 20m 69 | 20n 70 | 20o 71 | 20p 72 | 20q 73 | 20r 74 | 20s 75 | 20t 76 | 20u 77 | 20v 78 | 401 79 | 403 80 | 404 81 | 405 82 | 406 83 | 407 84 | 408 85 | 409 86 | 40a 87 | 40b 88 | 40c 89 | 40d 90 | 40e 91 | 40f 92 | 40g 93 | 40h 94 | 40i 95 | 40j 96 | 40k 97 | 40l 98 | 40m 99 | 40n 100 | 40o 101 | 40p 102 | --------------------------------------------------------------------------------