rewrite in rust
rust rust rust rust rust rust rust rust rust rust rust rust rust rust rust rust rust rust rust rust rust rust rust rust rust rust rust rust rust rust rust rust rust rust rust rust rust rust rust…