I have been trying to learn Rust for a while now because I kept running into it. Many of the GitHub projects and repositories that interested me were written in Rust, especially those focused on building scalable and reliable systems, inference runtimes, low-level control, and hardware or GPU integrations. Eventually, I realized it made more sense to start learning it early rather than keep putting it off.
Over the next few weeks, I spent my time building small projects in Rust, applying what I learned and reinforcing the language’s core concepts. Having already worked with Python and JavaScript, and with enough C++ to understand manual memory management, I quickly noticed how differently each language approaches memory.
Python abstracts memory management almost entirely, while JavaScript gives developers a great deal of flexibility with very few constraints. C++, on the other hand, provides complete manual control but also places the responsibility for correctness entirely on the programmer. Rust sits in its own category. It delivers performance comparable to C++ while preventing entire classes of memory bugs through compile-time ownership, borrowing, and lifetime checks. Instead of relying on a garbage collector or trusting the programmer to manage memory correctly, the compiler enforces memory safety before the code can even run.
The learning curve was definitely steeper than I expected, and at times it felt frustrating. But over time, I began to appreciate the language’s design philosophy. Rather than fighting the compiler, I found myself thinking more carefully about ownership, data flow, and correctness before writing code. That shift in mindset ultimately made me a better programmer.
One thing I especially came to appreciate was the Rust community’s emphasis on consistency. The ecosystem encourages common patterns, strong tooling, and shared coding standards, making it easier to read, understand, and contribute to other people’s code. As I built more projects, I found myself enjoying Rust more and more, not just because of its performance, but because of the way it encourages writing reliable, maintainable software from the beginning.
I set up Rust using rustup for toolchain management. I used VS Code as my editor, with the rust-analyzer extension for autocomplete, inline error messages, and type hints. The project structure was one Cargo project per concept, so it could be well managed and accessible and connected to GitHub so I could save my progress.
eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO2d3Y7bxlx1MDAxNYDv/Vx1MDAxNFx1MDAwYiWXLT0zZ37O8Z3tOKnbOkGzbdO0KFx1MDAwNFqitIy1okBRtreGgT6EL/t0eZLOyLtcInd3ZHNGNFwigfRcdTAwMWFcdTAwMGIsf0ec83G++dW7XHUwMDA3Z2ej6mqVjVx1MDAxZZ2NsreTdJFPy/TN6Hdu++usXFznxdLuXHUwMDEy27/XxaacbI+8qKrV+tHDh/VcdTAwMTnJpLj8eFa2yC6zZbW2x/3L/n129m772+7Jp+7caVq+ejnfXHUwMDFlu916c/cym1Tpcr7I6l1v3a0pYYaYkoaMXHUwMDExRuNu75XdyylcdTAwMTFaMEFAjIBcdTAwMTlmdrvf5NPqwlx1MDAxZWJcdTAwMTBcdTAwMTNlryCUICU5k7sjLrJ8flHZQ+zJiZRcXEgwhFrYO+2O+ZiiR2dst2VdlcWr7GmxKEqX7KpMl+tVWtqPXFwn/GU6eTUvi81yujvuK565n/qYWb5YnFdX26vbR2tcdTAwMWbj6M49frr+XHUwMDA04s72fWfZXHUwMDFizi+W2do9er7bWqzSSV5tXHUwMDFmXHUwMDE2qz+FS93q+XSbS/+u01Sml9lzl03LzWKx25wvp5nLi1HKbt1tOb2+201cdTAwMTbX2Vx011ve12nPMndhro1EXHKA9aeq48ygurv1+2K5jTlOXHUwMDAywCBh/cny9Tc22KrtZWfpYp3Vz9+l7VkjXHUwMDEw64+4WU3Tj6dwY5RUQmtQVF90kS9f3f38i2Lyqr7Lg8bnulx1MDAxM9uTy+n9wK6yt9XtmNYqYVxmtbSBXHKCI1e3Ylx1MDAxYTBcdTAwMDHgaHcxzoHBvYjmUiQoXHJqQlx1MDAwM0xqxPsh7cBoXHUwMDFmxF9Npfv5ZFx1MDAwMHtcdTAwMDP9JINY+IP41tE30WqzSSlcdTAwMTQkPdFcbnxfsGqbJ4pJozqOVcVBaVxiiNU6XHUwMDE4XVx1MDAxMG5zMcvOys26+v0v9m2+zK5cdTAwMWU2MrNYVuf5f7a06Vtbv00v84V7+urWXHUwMDA1XHUwMDFmL/K5e1x1MDAxMKNFNmtcdTAwMDSFfVx1MDAxOFVuXHUwMDBiht3uqljVeyf2emm+zMr7WVSU+Txfpou/tkhsuqmKXHUwMDFms/XH5FblJms+lexcdTAwMGY7XHUwMDBlXHUwMDEy8Vx0XsuiqNpcdTAwMDCrblx1MDAxM2rqXHUwMDEw3DHJZMKlLUhs/pCWKD3FTCCTs/QlY6onTMr2TFx1MDAxYSaEXHUwMDAwo3Uz4K6RvLetLj7A6lx1MDAwMerG67QjJIlcdTAwMWaI5KnQ+CVBnPJJXHUwMDA0h824q1x1MDAwYkeZSDSGcck1s3lTXHUwMDA3+VA4tlx1MDAwMFG3XHUwMDA3UVx1MDAxYlxywtpcdTAwMGJrxtpN2bhcdTAwMTdEI8G6dtOxO1x1MDAwMlHal4JoXHUwMDA2XyiIv374369cdTAwMWb+a/+fMT5+nZZ5+nKRrY9cdTAwMTnJz6a4Izgv28BpTfazdCqeoLNeo4WwtbWGQcXCSZPpZJb1XHUwMDA0TtNcdTAwMWVOQjKcWzJcdTAwMDLhXHUwMDE0RjIlOi8lrVx1MDAwYquD4Ly0SCTl+ohhvJfCjuBrZahcdTAwMDI/XzRcIkuM4sRcZrhcdTAwMWG4wMPhy9DQjHpcdTAwMDJcdTAwMWZcdTAwMDZUXHUwMDFipbJVXHUwMDAwIOFz1P30SSaYreJ13cKhpJaCXHUwMDBlge9pWs6LpCouXHUwMDE3R8yfL5HdICii5Fx1MDAxNDxyqmSi0GqKJPs+REWH11x1MDAxMnslp4/bI4hISmtcdTAwMTUmp9qeYitcdTAwMGWy83ZcdTAwMWLJXHUwMDA168pNxXi2WU4qm+xTcVN/ijtiM85NPXAqWzxcIlx1MDAxN/VTXHUwMDFhlLRcdTAwMDWST1x1MDAwMkpFXHUwMDAwXHUwMDBlXHUwMDA0gnxM3utcdTAwMGW4YVKi4sioXHUwMDAxcjdMciFAXHUwMDFkVCr2VklFnJJ6mDMmIbJwmsOp65WLPm1PnWBIXHUwMDE2ISV9XHUwMDFkbnup46iZVLYwPD7sei6jXHUwMDEwJaPaL6NEZIRcdTAwMDLXXHUwMDFlN3QjXHUwMDA2MvgsoOQjqYnQeFx1MDAxOdxro8JcdTAwMDBjKFXnjTFgc102g+9cdTAwMDBcdTAwMWKFcfHGXHUwMDEysb7IVydio/5cdTAwMTR3XHUwMDA0Z5yNeuhcdTAwMWNsNIbJb1x1MDAwM5jkjFx1MDAxM5PNXHUwMDEyrk25yGxdTnMm66g+lnKxtzpcbnE66oFu0NE47L5cdTAwMGLBXHUwMDBlQG6HLYVgZ1DYlyFnx0ddz21URtkoeWxcdTAwMTRw2zTKyHA92Ggwgs9cdTAwMDNcdTAwMTBcdTAwMTTc2LhcdTAwMTeBfYNcZpVEN9S2a1x1MDAxZFXGiK50VI5tTmwm1ak0jfrS21x1MDAxMZmtVJRT/fbbh+agojFA/jGku1x1MDAxMLir6HmB3Fsmgq1QKq3h+Fpoemuisp2JNoYu7mNuMNE46v5cdTAwMTRAnTGaMUaNyni77lxikGRcdTAwMDZcdTAwMTM9Nlx1MDAxM1UxJiqEx0SFSjRaJ0FEjjB00lx1MDAwN1wi+FwiXHUwMDAwQWRaSy0xbJxcZlx1MDAxMUnQyLrupteMa3HQWO6G2alxttxcXJ6Kh95PbUdUtrNQrKNuXHUwMDFmloOFxsD4fYiFamJuUlqQhXKUII2hI+wo7K2GqnZcdTAwMWEq6yH4+6BcdTAwMWI0NFx1MDAwZbtcdTAwMWaCXHUwMDFhRCXYiFx1MDAwZmtcdTAwMTDlQlxuYWzFsYb1WLDruYfqKFx1MDAwZlVcdTAwMWVcdTAwMGYlliCQNopcdTAwMTiAaMxcXFx1MDAxYjS0XHUwMDA1gn9cdNFQ++7TUlx1MDAxYV9X4P7ueXuClqQ7XHUwMDFmLFxuqOggXHUwMDAyXHUwMDFiXqfHWVlcdTAwMTbl+FwiXU7tleYnoqOfSHZHlLbrqL/TUuPDdPDSXHUwMDE4On9sT6dcdTAwMDIwXHUwMDEy0LtgxP5mXHUwMDFhcrXEZlx1MDAxN8exXHUwMDE0j721Ut3KSlx1MDAwMepcdTAwMTfuPuRcdTAwMDYrjYPuvD10hKSZIO8k+73QXHTLqX1lNmY6XHUwMDFjXHUwMDBidD13Ulx1MDAxM+Wk6HFSzVx1MDAxMlxyXFxcdTAwMTNqZt20i2UueiWlf2tPIHKwVUPkYZ306NbAXHUwMDAy0aClq056N/ymIyk140mxWGQnNYdpX5o7XHUwMDAytJ2Owp1cdTAwMTZcdTAwMWJcdTAwMGahg47GcPn39lxcXG7lxqIxXG7rNbRYXG5cdTAwMDQz6Oj13t9eR007XHUwMDFkbaxcdTAwMTe4XHUwMDBmuUFH46D7KaCFXHUwMDA2pLRZXHUwMDEx2FdcdTAwMGaARipcdTAwMWN89Nh8XHUwMDE0Y3xcdTAwMTS4x0dcdTAwMTV3y65Z51x1MDAxMUZcdTAwMDGxYbWnMFx1MDAwNH9cdTAwMGVAkLhbtFx1MDAwMFx1MDAwMpd7UmRcZndzzDpcdTAwMTdSoVx1MDAxYlx1MDAwYmdcdTAwMWUmpDjOq6xMq6I8XHUwMDE1XHUwMDFk9ae4IzqjJjH58Fx1MDAxY2Q0XHUwMDA2yn9cdTAwMDbIKGlbL4OwgaNcdTAwMGVHyWyBWmdgd+WiPqiS2FtcdTAwMWLFqDlMPuZcdTAwMDZcdTAwMWKNoy5tT922691gYI+9W/uCaeBfolx1MDAwZXhcdTAwMTh1PbdRirJR6Vt71NqoXHUwMDE1XHUwMDFlbiv6inMzyGhcdTAwMTCBk/ZcdTAwMDS6QTOoXHUwMDE0+tfl3oegXHUwMDAyXHK2PvhcdTAwMDVmMNmKZleNozSuLsosnZ6KifrS21x1MDAxMZdRM5h8YFx1MDAwZVx1MDAxZVx1MDAxYcPjNKBE1ChRyLA1ZrRCRq7D4uhcbsTeaihFTWDyITdoaFx1MDAxY3RZSCHIrU1KXGJcXNlJXHUwMDFhQK7MXHUwMDE3XHUwMDE5XHUwMDFhM3joISv9sihcdTAwMTH1fVx1MDAxYoVgiVtcdTAwMGVcdTAwMWS0MkLoYVx1MDAxMfxAXGLnXHUwMDAxXHUwMDEwXCIxYlx1MDAxY4JEVDC1nV9cdTAwMDadL4JvnbixrnOUiX64NjvOxun6ajk5blx1MDAwZv1EaruiMmpcbpNcdTAwMGbLQUNjYLxoXHUwMDBmo9FcdTAwMTKUXHUwMDA075iZ/aPWhNGCXHUwMDE0XHJcdTAwMWF6vfe311DOomYw+ZhcdTAwMWI8NI66PKBcdTAwMTNcdTAwMDKYXHUwMDAyiSysOdRJKDk9OTrs+q2h+bn45upcdJuV6sVcdTAwMGZ/frb67vE/fsZcdTAwMTdtaFSQcIXuXHUwMDBiXHKRjNFK3vFUSjTTSrlBworx5ryZnbbyRIFcIlJcdTAwMTLBXHIuhcPXgFx1MDAxMjPKZF+09Zf2zCpGoIRotJ01mGX3tjbGl6I9SXc/vpRcdTAwMWJcdTAwMDZcdTAwMDdR+/VcdTAwMTHD+nU8o/b39rGN0tXqvLJcdTAwMGZtdPN1q6PXefbmieebZmfbf6NcdTAwMDfXhLtYztzzf/f+wfv/XHUwMDAzjP+wviJ9 tree rust-journey/ rust-journey/ ├── 01_variables/ main.rs Cargo.toml ├── 02_functions/ main.rs Cargo.toml ├── 03_ownership/ main.rs Cargo.toml ├── 04_structs/ main.rs Cargo.toml ├── 05_enums/ main.rs Cargo.toml ├── 06_error_handling/ main.rs Cargo.toml ├── 07_collections/ main.rs Cargo.toml ├── 08_iterators/ main.rs Cargo.toml ├── 09_threads/ main.rs Cargo.toml └── 10_async/ main.rs Cargo.toml $
Figure: One folder per concept. Each has its own Cargo.toml and main.rs.
Cargo is the Rust build and package manager. Running cargo new creates a project and cargo run compiles and executes it. Dependencies, tests, and builds all go through this one tool, which keeps things simple. One thing though, add **/target/ to your .gitignore before your first push. That folder can get huge, hundreds of megabytes, and once it’s tracked you’ll have to go back and untrack it manually so it would be way easier to just ignore it from the start.
I used the rust-analyzer extension to get inline error messages, type hints, and faster feedback*. It underlines errors as you type and explains them inline, which makes the feedback loop much faster than the usual write-compile-debug cycle.*
In Rust, every variable is immutable by default. Once you set a value, it stays that value. To allow a variable to change, you mark it explicitly with mut. This is the opposite of Python, where any variable can be reassigned at any time without declaration.
let name = "Sandesh" ; // immutable - cannot be changed
let mut age = 20 ; // mutable - can be changed
age = 21 ; // fine because of mut
// name = "someone"; // compile error - name is immutable
What this is used for
Immutability by default prevents accidental changes to data. In a large codebase, knowing a variable cannot change unless it is explicitly marked mut makes the code easier to reason about. When you see mut, it signals intent: this variable is supposed to change. Without it, you can be confident it will not.
Functions in Rust use the fn keyword. Unlike Python’s def, you have to declare the type of every argument and the return type. The return type comes after an arrow. There is no return keyword. The last expression without a semicolon is returned automatically.
eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1dW3NcdTAwMWJHdn73r5iVqlJUXCKP+3T36YudbFx1MDAxNU1Ja+3asiPJ2WwutTUkhlx1MDAxMlYgwFx1MDAwNUBd1uWqfck+p7a2KnnIr/MvyWlIXCJcdTAwMDaDXHUwMDFloFx1MDAxYmhcdTAwMWEtXHUwMDAxtC2LuJCNme/r853T5/LDJ0Vxa/rmsr71eXGrfn1WXHL6vXH16tZd9/jLejzpj4b0XHUwMDE0n30/XHUwMDE5XY3PZq98Pp1eTj7/7LP5O8qz0cXbd9WD+qJcdTAwMWVOJ/S6f6fvi+KH2Z/0TL/n3nv6bPa62SPvf/O4PptWw2eDev7Ua3r8U1YqLoVcdTAwMTEgLVPKSqGun39Dz4uSXHUwMDFibjQqNFpYI6+ffNXvTZ/TXHUwMDBigDP3I7hFaUFcdK7M9Uue1/1nz6f0XHUwMDFhY02pwNLv4dxYJfH6JW9X9HnBrlx1MDAxZplMx6NcdTAwMTf1yWgwXHUwMDFhu2VPx9VwclmN6ePOXHUwMDE3flqdvXg2XHUwMDFlXVxye9evu1xyXHUwMDE1LZTNX3PeXHUwMDFmXGaeTN/MfjpdVrqEt1q/47fvPlx1MDAwMW893vUu+oXPnlx1MDAwZuvJZGG9o8vqrD91l1xu2PxRt7rLh73ZXHUwMDFk+s/5msbVRf3Q3aLh1WBw/XB/2KvdvbhVsYXfNuy9+23vb+/8dop3j/w4X3tdu1x1MDAxZlxmXHUwMDEylTGavq6faWDMLD36aDSc4VxyjKFbx5SZX43+5Fx1MDAxZVx1MDAwMW06+7Hn1WBSz6+/W9v9XHUwMDA2XGLnXHUwMDFm8eqyV719XHUwMDBiaI2EJrBCWbh+ftBcdTAwMWa+aH/+wejsxfy3fNL4XFxtXFyPxr16XHUwMDFjjG1gXHUwMDBiUG58e1xyXjDMXHUwMDAzV23CXHUwMDAxelveu2eP2UpwekF8s1x1MDAwMOU3XHUwMDAzUJ5cdTAwMDCglmlpXGb48NmFTk5Lt8xaXHUwMDBladEptLaoeFx1MDAxYXRO+9MmXHUwMDAy34NzWr+eLuJSqEVgcr5cdTAwMDRMaXhpXHUwMDE4KqWEQk4k0sswXHUwMDE1otRcdTAwMTE76e3anLM6O6DCzVx1MDAwMFX4gbrw6veItFxcXGK0XHUwMDE2vZA0nZhEepdcdTAwMDYtXHUwMDEzQ9LQetBEQHKOOIc0+vCPrybT4sHV8GxKy51cdTAwMTQ//flvxfGwmo4u3jRu6mg4fdL/0+yD6IVHXHUwMDFmVFx1MDAxN/2Bu1x1MDAwYrjwg49cdTAwMDf9Z+6C3Fx1MDAxYdTnXHJw0EWZ9kmhXFw/PVx1MDAxZF3Onz2jn1f1h/V4+VaNxv1n/WE1eFx1MDAxYbHo6mo6elxcT94ue/Gz02Wqv3rPXGYoOa5cIurVINiGiMatmF2UZVx1MDAwNURcdTAwMWKah5w3IHHaluaDlDgynJhCaiWZXHUwMDE2XinTSUsmOVx1MDAwN81NzqbibNSrI0R6w0C4u9CQ2HMhg2pcdTAwMTmEmoej8DavkcnV5uE260FccvJcdTAwMDPXMLi1hkFcdTAwMTLSlnHEXHUwMDE4YII2pGCcpclcdTAwMTiY58NcdTAwMTBcdTAwMDEj5Vx1MDAwMlx1MDAxZe2ysOayVMyKhj5pylx1MDAxNlx1MDAxNVx1MDAwMUtU9uSe2lx1MDAxM9WiwjdHcqY1XHUwMDFh6/fzOjFcYlx1MDAxYVx1MDAxMSzDXUNwSbM0gdfUJmbh0Vx1MDAxZGmT5uJcdTAwMTY0yHR81S1BVtKMgFx1MDAxMMI0s1x1MDAxOI3xME3qknOu6PJvz7V7J/dOjo/3hGs6nGuSK6WhuZtcdTAwMDVwTVnFmeFi59v9XHUwMDEy16peL2OyLawuXHLbZniFXHUwMDEwvlx1MDAwMV+U+1x1MDAxZcKZUkrLwSSwbT1z1js1e8I3XHUwMDEzzjeQXHUwMDA2ybhcdFx1MDAxNk04q0n7Z0e4o4zpdpSabFVcdTAwMTDP1ktIkCWXiUQkSciTXHUwMDA39/eEaDaCaEojXHUwMDE35DJHqUhcIpowyu7ekVm2bFx1MDAxOVx1MDAxM61KTbQzgm6gVVOLXHUwMDAxXHUwMDA0XHUwMDBm21TJNFx1MDAxM5BARO6VUTuO4Vx1MDAxYXd7XHUwMDE5t1FcXNNCXGJELfPz2D7PmGufp+ZaX/Awpum1+lGo0qpcdTAwMTTqUd4/sV/uy3nOl1x1MDAxMZFcdTAwMTFcdTAwMTDCXGLy11wi1aOkt3A1XHUwMDBm3OdCNMJexlRbWF0qw3ZxXHUwMDExpFwiyVx1MDAwYjvYtVx1MDAxYqHbSTjdUCqFzIJoYmttIJLeRfTQmFx1MDAxZt3uZky2u6mpdlx1MDAxYUQzsZZmgCVcbmut4EbRLmpgflx1MDAwYlx1MDAwZT5bXHUwMDAw3+5F6EhO3Fx1MDAxMUZ6fbYlXHUwMDEyXlx1MDAxM85l31x0i40kqET5XdLd8m1cYneaMeFO09s2ctp4XHUwMDEw63Bt7P9g3DZcItv9XGKykXFcdTAwMDNcdTAwMTL1xjaxtda6WVx0mGUkct+ctjCm6bXhkYPTtlx00Vx1MDAxZYRcdTAwMTNNoWD0paN4hlK6dDmRX3Bk73y2XHUwMDE5XoPYJmAt21x1MDAwZUdsm/HtV1x1MDAxMUFcdTAwMTJcdTAwMDaGXHUwMDFipuJSmDgy8tsk5mfY7mRMtzupyVaNx6NXQVxcXHUwMDEza4/ZXHUwMDA0K1x1MDAwNUKS9JG9StX6KkZEolLWeKpvVotIXHUwMDBimnOEnSeyLpHt019mzLbm4tLQbVxcT4PIplx1MDAxN8s6XHUwMDBlMjJcdTAwMTHVXHUwMDFlxlx1MDAwNEc4Wo5cIjJcdTAwMWGpJVx1MDAxOFx1MDAwYqDyO9HeOyF5Oq7O6qCzNlx0a/l2XHUwMDEwkpsx7tdcdTAwMTHhf1x1MDAwM4JQXHUwMDFld9hGXGY1XG7J3cuObz9kzLZcdTAwMWZSc62qX196ymk9VFuvI1x1MDAwZulaXHUwMDFicu034Vxck4icQ7NcbjYkg0Qrhlqy/GzbXmVrXVx1MDAwZa4mQVTDteFcdTAwMTGwJaDkaZTkXtm1r8O5ZpVUikfWeFx010tDXHUwMDAyz8+u/UPGXFz7h9RcXDtccrZr6122w8n2u0c3pNw3XHUwMDExzpvghHRAr33rPtmWXG64NKjmtyDRybawvJF3eTjZXHUwMDBlcNyCTlx1MDAwMKRdqyZcdTAwMGaO22Zse1x1MDAxNMM2a0GKjrZcdTAwMTddbFOcXHTJhckvb+vHjMn2Y2qyuVx1MDAxNMlcdTAwMDW0drNccuVaXHUwMDFiR1xcKzkwQZ48WTmtPSaOzym7nnLq2FrEPaHct1x1MDAxMZQzSjp1qHyn3KKTc9JcdTAwMTFcdTAwMDSaqeWJOs04eaub+Ivl3GefXHUwMDE1w1ExqS/6s7ym4qe//LXoX1xcXHUwMDBl+nR5i3E9vVx1MDAxYXeUdbOFR3fEyqjVR/SeWUFcXGckX9TT3/v6LHQ0/2hVykHDP5xcdTAwMWYrLFx1MDAxM7ZcdTAwMTFcdTAwMWNdT9hcdTAwMDdcdTAwMGa0Pcnu5O6G+n98XHUwMDE3TljBJUPOILLRh+KAjLbTXdvIVUB8QVx1MDAxOPx9eFx1MDAxZqQ2XG7lclx1MDAwZlx1MDAxYY/VgFxiq1x1MDAxMdxcdTAwMDapXHLWXHUwMDBmXHUwMDEyhI8jUqMsU4L+iTo9NtxqJXdcdTAwMWWHWIvA8G6OWlx1MDAxZFx1MDAxMJhcdTAwMTKBT1widItcdTAwMDZcdTAwMGLWxpXjXHUwMDAzXHRKjdbsPvC8XHUwMDE2hFx1MDAxZVx1MDAxZL35Ntg4Kpmr51x1MDAwM1xi/SB8XHUwMDFhXHUwMDBlQqOMXHUwMDA10/Q8QzJEOZNcIvOeW9V47NWDrSwvd8FaddygeIlLXHUwMDAw9HUj1OFcdTAwMDDcLzH4fcQuyFBcdTAwMDGZ4bhtXHUwMDEwtbSorcknR/ly1G/2XHUwMDBld1/zv1x1MDAxNXNgzL65/vt/3l3/aqHnL/+k9bZbg2oyPVx1MDAxOV1cXPSn9Dm+c2tYus7Tajz9ku5Nf/is/VxcPex1PDN717HjyvO6WrrT9L7mc21S1YPT0asgllx1MDAwZU5cdTAwMDcxXpuAkrluNIyTeJOGzXetWcdfhqVcdTAwMTZSklOvrHF3conF0pQgmDDSkv5cdTAwMDOpff1cdTAwMWR5TJ/qXHUwMDAwWt/mXHUwMDE1q8BsQmloPb5DSv+Ln9IxPaqVXCKua/DamkbweknxXGLrNlximfgkgkDAVVSgZlx1MDAwNY79sVx1MDAwN985dKmU5Vx1MDAwMqTrfobYylx1MDAwMOHMlkYjfVpgXFxb1SjkvVbjorT0ZaSWwIHZRlx1MDAxNelcXJ6buFx1MDAxZdZ52qZcdTAwMWKKLP423DZxV1x1MDAxMUr3yGualqKN81x1MDAxNGMmtVx1MDAxNpynXHUwMDA3rLaNOPNcdTAwMDaRxVx1MDAxN7W/WXUjXHUwMDE0s8PI4cLqwiP6q5pSkycyvIhcYsiYfNzhdtvIXHUwMDBmUlxi/muEXHUwMDEwRMZcdTAwMTSgictccjGGgyHG7fzkbC1cYiMmbFxidkBhSlx1MDAxNP4uXHUwMDAyhYpJaayKLOFcdTAwMTKSXGaxwKwnabyFYXhUJmAvlD75fEChXHUwMDFmhf9cdTAwMTaVs8Ncckpmo1CoXHUwMDE1SvJpst5cdTAwMGJdWGZ4XHUwMDExXHUwMDE0llx1MDAwMbbYIOVm4jJ5dme+IVxiVuFcdTAwMTBUgjwuXHUwMDE5t1xykl8uafdcdTAwMTS731x1MDAwNq9cdTAwMWY+hGU2XHLL+FjaZSlcdTAwMTaJytly4Fx1MDAwNT1ualSgJYCntzmDim1cdTAwMTS8zyjQcurnaEygxTLLuIls+2CZU+BcdTAwMWF3zt1cdTAwMTW4nHpRuVx1MDAxY2axi9KFN9KLXHUwMDFiRaOGXHUwMDFj6o5cdTAwMTb/sVx1MDAxMZQ8rchcckVQzlwiXCIoXHUwMDAyXHJncWPpwFx1MDAxOEDLmd35OftcdTAwMWNp71wiXHUwMDE0i1x1MDAwMyayXHUwMDBioCwuL1lcdTAwMDTlMlwigJKT79quXGL4ICVbL5xsoCS3ptnaICT1XHUwMDE4jWao9c5P0tZhMDx+XCIgnyjeR4HBOlx1MDAwMoNWXHTgXHUwMDEy4tpxS4GaN0fSZYrB8OBJyD5cYsYnilx1MDAwZiD0g/A8XHUwMDAyhNK6wcvNXFzRsHG4KLTJP35yuYxCT/iE81ZW1Y2ET/KsurshXGI+i4AgME3bII+UvrM6dIlq507Y9cOHXHUwMDAwyqZcdTAwMDFcdTAwMTRcdTAwMGZNu4xcdTAwMDWuXHUwMDBmoIDvoD8qglx1MDAxMkDV2+SqXHUwMDE5/qGnqjzfPoLCNDNSaFx1MDAxZSVjLCjNXHUwMDE42p2Td1x1MDAwNTCnPlj6Ztusj6BcdTAwMDDXJXP91LhcdTAwMDar3bBEj6aOjKPkaU5uKI7SXHUwMDBmNydaKXDNfeK6kzNcdTAwMDKxe1taPCqSV6KRsr1BXHUwMDFjxVx1MDAwMa9X0E2kKzSlRWdcdTAwMWNT6V5qsvjKOFwivlwiXHUwMDFhXHUwMDA1jbv2bdvt8j5ITfeHcFx1MDAxMkolOLNGRHYt1y5XXHUwMDE5s/YqZiBcZlx1MDAwZrC0e8RcdTAwMWRAuCVcYl/ERNQtXG5cdTAwMWJVruF0XGZoyFx1MDAxZYDh0ZWQXdB4XFzbm1xirnxcdTAwMTRcdTAwMDBcdTAwMWOEXHUwMDAzXHUwMDEwXGaQpuCAcdugstZlVmVdPOmCK55d0Fx1MDAxM1xcXHUwMDExreFcdTAwMDY3XHUwMDEzXFzJs1x1MDAxZu1cckHwXCJiXHUwMDBmJFx1MDAxYmxcdTAwMTDiOvZJNMzojJrRXHUwMDFlXCIrm0ZWXCKOglhAZIX7LEVMZCWApy6yUkO1XHRHM4qsXGb9XHUwMDFjjYisXHUwMDE41FxumWJxTdulllx1MDAxMqTafWfbXHUwMDE1wJz6YOlcdTAwMWLUsT6yYnhptMsotkq6MFSCXHUwMDA0lTxNyVxyXHUwMDA1VkYxPlx1MDAxZFd0idEnqDtcdTAwMDMr5Fx1MDAwNVqFXG5RpsWjXCKg20ZDolxyXCIrb1x1MDAxYuxcdTAwMTQz/M0vWG5BXHUwMDE17yqTxVNOYzqwZOTK6l5tqlx1MDAwZt2TuIzgXHUwMDFlU1JJqaKcWS2IsNrCznXcOlxmhotcdTAwMTRk+cT0PlxuXGb+McKbZVx1MDAwMqXpqvHsXHUwMDAyodJMuKrknPXIXGaEXHUwMDExPVhcdTAwMDI2QvszNWH5KEA4jlx1MDAwMCFcdTAwMTdcdTAwMDBcdTAwMDZ4XFy5XHUwMDBmXHUwMDE45vKm9O5HXHUwMDE5rUChXHUwMDBiqXjGIXtCKrI1mfVmQiptaOWhg29cYoKTcFxiXHUwMDFhY1xyKIhcdTAwMGIsI7NcXGeVqH2IqWxcdTAwMWFT8ZC0y1K4VtFuYoaWdLfsclx1MDAwZlx1MDAwYk/1j6/3rS6l5FqgZVxuhZUxrXBcdTAwMDNYfJtVUMNGRiSjgMvUz+CIgIu0mjGjvFX1sjtYXG7CIFx1MDAxOJvYwVx1MDAxNUYxjGphsVx1MDAwMrVTXHUwMDFmZn1TdlohQF8xXHUwMDEwIdpcdTAwMWEtmPRP/4iNtuRpZW4o2nJcdTAwMTUhdFC5XHJD2bi8Kk5vI6OQj5m5XHUwMDFlRTDq5dxQZXF5aeIrvf5Lz1x1MDAxY7lcdTAwMGVTwVx1MDAxN1x1MDAxZFvuS4JcdTAwMDdvXHUwMDBmrlx1MDAxYvAqeI1MfuhexctcYrJZi8AwNl+F01x1MDAwZa1J1+VcdTAwMWNgXHUwMDE5X1xyajh9tjFcdTAwMGUxXHUwMDE0hyrmXHUwMDE4qFxyMK8q6ZEqkVx1MDAxZrgqebW1Klx1MDAwMUO6ZLGNbVAulXFcdTAwMTPtSTTmjM3T8P2xVSTElVxcxqXe+nTy3j17vFx1MDAxNpZ0WT90sfx6e1gqw1x1MDAxNCd9XHUwMDEy1/ZcdTAwMDJQatHcZzNE5ZScvKBcdTAwMDGwbbncwF9cdTAwMDOTpVx1MDAxNW5cdTAwMWUwSiBcdTAwMWErX1x1MDAwZkJdXHUwMDFlXHUwMDE0c1x1MDAwN1DfhFx1MDAxYnHOpGTkXHUwMDFj+1x1MDAxNfNSXHUwMDAyzPVOiVx1MDAwNEkjm5tHXCJcdTAwMDdOg5RcdTAwMTCBySXN/PCb775+ePLwafH4/tPvXHUwMDFmP/LLZ7nw6I7kc+dKI6aWrJLSM1x1MDAxNVOFcJJDK8ailmMstFx1MDAwYpWGNiGraC9cdTAwMDKtPG4sd1x1MDAwYoog5V5ccvn6Uzgp3ZhQ1lFdatpcdTAwMGbOpzNzbZCnZiRaKzlu5cV+XU2mhVx1MDAxYu5In9h9XG4vI/XCoztiZOdKUzIyKKok2i1mPIxEXVx1MDAwMidnqqPHzIGN3Ww8ZSycjpq8LoFGxqWDkjFTVmRcdTAwMThUetWfPlx1MDAxZl1NM6bh0lxu04SWZuw7XHUwMDBiYZ80bcfJ0+q9dFx1MDAxMyq8yXNRY/f2qTn2KYNcYitoUCCIyHYzXHUwMDAw9K/duau0xLovvHzLY6TeXHUwMDE3mzBtXHUwMDFk0XohRGunJvmIJlx1MDAwNFGNM1x1MDAwNHBcdTAwMTO1JDvYuljS8XDSXHUwMDAxQ6Zdo1dfhGI5i3U+uMyNvOBcIvl5nmFCxpznLfGuP3k3XHUwMDE0su5cdTAwMTVcdTAwMGXcXHUwMDE31YwzgzfFT3/+WzFcdTAwMWNlbFx1MDAwNsOXnlKe1iG8Nbiet1x1MDAxMkuJhCZcdTAwMDNexrIyxkqisif39sZKinDCKnD9cDFuwFx1MDAxNsxK90VcdTAwMDaHMEt8XTF/Nlx1MDAwZlauXHUwMDFjMbuVxTxcdTAwMGZhnm2fNXmYXHUwMDA3lpdkKK1cdTAwMTKz81xmbX3pMVx1MDAwN4u5goAywmJyLYRcdTAwMTXMeI+aOiOotDOCgeRcdTAwMTVcdTAwMWVsVjqyXHJcdTAwMDFf1G9ejca9YkhcdTAwMWav7mVMxK6FJjWG4WfA7bM26+ElSN9h203k2buJYKz+uWg4X29aXHUwMDFhYjhcclGQn8Bl5NBnLlx1MDAxNWdcdTAwMGLncVx1MDAxOVx1MDAxZa29XHUwMDA1YtDhWmvSKW84wtfulFUlaqOkRjcnW4MvXHUwMDFmzZZcdTAwMTFcdTAwMTkye9VV6bTZXHUwMDAwflx1MDAxZChd/E9y7o1cdTAwMWM2toKl0KFcdTAwMDRcdTAwMDDVSFwiSVx1MDAxNcnXTG5V/Xc+LCZ/vKK7ePT686Iv+J3i01+6/1x1MDAxNz9cdTAwMTTF6+Lv6b/iR7/FUFx1MDAwYo/uyGLELT/CjqxnL1x1MDAwZmEvsrZcclmmL4AuXf9RXHUwMDAxSljLeCOjflP67tPZ+CnTMcFcdTAwMTCLwnDtXHUwMDFm4t5pVcgh49yy1Fx1MDAwMyVJ27HmcMtccvg7XHUwMDAzecZcdTAwMDRtrS8pXHUwMDAzRVx1MDAxMFx1MDAwMy1Rh75cdTAwMTh3wzN5K1dFMFFcIml2KVx1MDAwNe3QRtnldCphZGk0IUDR/bJofHWVcexUx9ZcIu5cdTAwMGI7TTg73U1y/Vx1MDAwYqTP8VqeTTKPfSjJwehGcUIqerpz+23o+dNf/rtcdTAwMTiOikl90T+jezu8W0yf9yfFy2pwVVx1MDAxN/SX6fO6WFx1MDAxNVx1MDAxZsmCw5t8iDRE7/VfesxsWMquXHUwMDEwntTIQ+p4XHUwMDE0d22EZTVak4OqTFxcn1x1MDAxNpBIllx1MDAxNdTOXHUwMDBm1deYXHUwMDFivnnueLPz6c+cO1x1MDAwZbVgu23ObLZcdTAwMDfhsVx1MDAxZoRcdTAwMTFJuqSsJUhcdTAwMTM3YsJcYsFQNFNcdTAwMTczROZp+PbYimZcdPRm6Xp2x9TD7UXF6J9dgjLF1vjl1qjUiJYrXHUwMDEzN3JCWSClmndcdTAwMDX/LHM8yD1uq3H0RFjRllx1MDAxMrWyVoHkjHFPR4nIzPH9ys85ibDhpLyFVUx4j1x1MDAxZbu7hiurlGBgXHUwMDEzh7eEUaZ5vzfQ30/uf/Pw5Nuvv31UPH18/J1fY2eROd610IRHXHUwMDFmfKPEcdHIXHUwMDBiuHaJWWnp3pBVZYc81WhC3ouINnPa9Fx1MDAxNiZshmlqrminzDBcdTAwMTXguJfz8ePC6tIlqPKg9PBmpXNcdTAwMTfvXHUwMDBlXHSqm/DtfoRcdTAwMDFELZhcdTAwMDVgcWeOSKKMgeE7P3NcXFwi3L7lqPKgZHCu1nNcclx1MDAwNJacXHUwMDE5w0FYXHSMW98wpYOdW8G7XHUwMDA3McEjRlx1MDAxZbo1y1x1MDAxYdM92U08xixzc1xuXHUwMDEyV0gpxo1cdTAwMTJbXHUwMDEx76e//PVdTLRjVE1cdTAwMTZcdTAwMTbPu8qUkjMoZVxcmFx1MDAwMDqyclVhVFxc6uk+tTY+Zb+KyXxTyFx1MDAwNVdxhVGAzDBhXHUwMDA0y8/+XHUwMDFk3cmYfc3FpbOAQdnekq/38jiyknZXXHUwMDE0YLSQtCNcdTAwMWVyTiOZ91VcdTAwMDTzNElPSVx1MDAwNtB39Nlwyds5p8C1RJG6SoNcZqAweqvEhKOrYX9afFa8XHUwMDFj9Xt3iv5wMq2rXjE6z5mPa5ec0jRcdTAwMDblhmvWjtp7eMpLSVx1MDAxOEhRk7FfhvFhjGFkSLYxcoBcZqCQgFx1MDAwYsO3cjGMfcEzZuLC6tKZRs9cdTAwMTGuh3JcIsA0XG4opeaaXHUwMDExLLRrqpzAOdyvoMyvozJcdTAwMGJcdTAwMDRI7XdcdTAwMGVFN/mksa7eOH3SXHUwMDFlZ8puZVx1MDAxYp3bdTa6uOxcdTAwMGbqolx1MDAxZY9H419kzMVVi01pXHUwMDBmNy/MXHUwMDEwxpdg8bNcdTAwMTVmcLbpeXZOhVx1MDAxOb+JICRTLu081kuUILTSXHUwMDE5NGVdj8RNKjNEI/NpXuguStfpjVn3XHUwMDA3SPRcdTAwMWReXHUwMDFmKjO6Ufl1XGYqrUIu/elcdTAwMTQrQoioNFwiQvJcdTAwMTBcIqBmW7U9W1vb8MVcdTAwMDdem/HFXHJcdTAwMTVn8FxyizP8XGYuO07cXCJ5u1/y7ptcYt4qwbVxs0yirFx0iTulQZmdJ0It8fYttjMmZnuBXHRjj2E1XHUwMDE5XG5aXHUwMDAxf1x1MDAxZvGULH1cdTAwMTGNXHUwMDAz7VbQ7lFcdTAwMDTtXHUwMDEwjGRWxzVjXCJcdTAwMTmDRvLdj9VcXGKdK1K4rlAoLqpcdTAwMTf15G2ZQlVMpvTL3CqKxnlXcXSnKH76v//JmKfbf6QkzO71X3pYXHUwMDFklvsuXHUwMDFiqVx1MDAwNodcIozNSP1tXGapheGLSeshpJ6dvOc9m86ZXHUwMDE3sXlccoZcdTAwMTShODz07/eC8Ds/XGKjOqVcdTAwMGLN6d+44Z2guLKzSvecwXlcdTAwMWG+QbZiV+QpLlx1MDAwM1NtW4Zx7+TeyfHxOlxcfvhccvxP2T9vj0t3SGM551E5f1x1MDAxYbQkUKqsYenqMIJcdTAwMDR5q1x1MDAwZUPK5SNcdTAwMGaQUIJU1syGxFi9fVx1MDAxOUZcdTAwMDBIP1wiaf44JpJFeLTgnynRnVx1MDAwYqCV1Jyb1O3CXTmIbOxIXHUwMDFiaPP7x4+//l3+3fv9y0x4xiHCKjDYYmC5ebo4P4DkpbVCXHUwMDFio6RcdTAwMTJcdTAwMWN8VVGH3JxVfHxcdTAwMTJz+C9cdTAwMDCRMW/9aMNVXFxcbi1zjahV+tCyULwx3WNcdTAwMDNC/m50VZxVQ3Ij6d5cdTAwMTVXk9q1yFx1MDAxZvTp8mZ8XHUwMDEwXHUwMDE5suiUZFxym1x1MDAxNalcdTAwMTa7+vvIemibujFLn8b4vswgV0rH+b5WKFx1MDAwYlxm80td3d+2qVwiqIiD7nWAmbTl7MxZSWM56kNcckck/76PsZLkSVkr0Wclu2uH0c2ERiVcdTAwMTLXXHUwMDBlk5G0yLdSrdNcdTAwMTFcdTAwMTmY/rSoq/HgTXE+XHUwMDFlXVx1MDAxNFVxfjU8m+Y98iZw3elcblx1MDAxY8XmqTtS+eZq/sw9VYsno5f9+mfj6k1l8PxLXHUwMDA0V6Wki2xBRMU80KJhJGN2ns26XHUwMDFlj1x1MDAxMZHiXHUwMDFjXHUwMDEx+aFD8bdcdTAwMTFQJC9WSdnRc6JcdTAwMGKK2lx1MDAxYTRcdTAwMWOyzyVcdTAwMTOb5ZLJhoi99lwipCi5tVx1MDAwNoiGWotGJvohlSxcdTAwMDST/1x1MDAxYY5JdFx1MDAxZT9Yb9tcdTAwMDVYrtCZd4xcdTAwMDKmXSfCxKAk6WqZilx1MDAwMOWSlHGpWNV5/fte/+VRNUvGulucLiVl9c+L0+Kf/qlgxVx1MDAwZlx1MDAxOZ+Kb/FZ0qWYidBcdTAwMTQz0XJSfMTmZUdoIJLP+1x1MDAxNVx1MDAxYfhd1LG4m1x1MDAxY85YVGiAz2paXHUwMDA1ZFjWmn3L0JuLXHJcdTAwMDS3/W3JOlx1MDAwZvFcYlx1MDAxNiUqiVJJTVx1MDAxYrdt1JJcdTAwMWNMalxiXHUwMDA1/y3G41x1MDAwMK1cZtlHr03tbu1LTDFcXDb7MqeyqVqarVr7Mpe+XFyQa/1cdTAwMTlZmqxcdTAwMTOxO1ea1Fx1MDAxZcpcdTAwMTBaarWellx1MDAxY3lcdMo1RudMc9HIXHUwMDBiPjTcXHUwMDBlYWVcdTAwMTXBSlCWIbHS23elm5WCK9T0ztSz4i2jm791XHUwMDFh6PtjoXdcdTAwMTGw7I1lwJqTtdP2sDQsg1x1MDAwZZlv+tEhkzOGmadcdTAwMTHMNEIhVzyynTa5oGhcZsjcQ3Ry81ROhFAgXHUwMDFl2mn7QHjmXHUwMDA3YUTGnDLacqX84/G6oEkvl4rj7lshrELmafj22FxuXHUwMDFiN81WujzOXHUwMDAwd8JFjD+CPM7e1qh0M99cdTAwMTD9SXMripJdZa4gXHUwMDA3MGdYujzOIHndyuNE7jnLYFii0UajUIpcdTAwMDOz2ydy7pfTW8dcdTAwMThxTkBcdTAwMTAs7kjcjYqzSqSfZqPcqd824vr7R1x1MDAwZp/mn8bpXWW60265UVx1MDAxMidyz2QpIUqjuGYgnb/r1dKH7JRcdTAwMTVUPI+gomRcdTAwMTKVXHUwMDEx3lx1MDAxM+/u7Fx1MDAxNMGtXHUwMDA1XHUwMDA2JnlcdTAwMGZcdTAwMTl0O8M2XFx8eO5mMr31XHUwMDEzXHUwMDBih0M3iWlyWZ/1z/t1r/gw+o9u8iFcdTAwMTIyOSjDU7G2UfV0mzl0J92Uw89cIjisXHUwMDAxjFxc6CBcdTAwMTM0x4fI5vbXXSu8JVxu719zUlx1MDAxOZTZqWTL4/cxTorS1T1cdTAwMTh7XHUwMDE4QVx1MDAxMU+65zGk46Ri0d99rZt0RkhFK925W7VMOtfk824x6L+oZ40+i/6wOMmaiGtcdTAwMTac0Fx1MDAxZW6ex4m401x1MDAxNmxcdTAwMWZH1lxcP5yVQktcdTAwMTBcdTAwMDZcIi0hoDVugNiuSblcdTAwMWWHmyTNIS53keHSlLREw7Ql7W+NPDRgi8PkXHUwMDFmoo4shJVoI10s0GQrUKr04Vx1MDAwZfLBtypcdTAwMDA4XHUwMDFmXHUwMDE2z8Z1PT1cdTAwMWHSVfq8+Du6XHUwMDFid1xcbtnluD+cXHUwMDBlhr84yvhMMWLt6dRdYFKcxLbxWCauNqVcdTAwMTZoQbmmkVx1MDAxNsX22a4n9y1BbV94+1winLfKoJvba3yZOd205Vx1MDAxMsnm3kCUklx1MDAxNtOYtbNcdTAwMDFt/+PWV/VgMLpb/PDjL/7jVsZcdTAwMWPtWmhKQoYly+lWiMNHSFEqqS1t8a7thf/Y4GBIu1x0OYjJyiGHXHUwMDBijH8ybCcjXHUwMDE1MmJcdTAwMTAz6e0o47CVy3W3cEbozlx1MDAxN1knyflcdTAwMTaZkohB53fNPMcuXCKCJJpZZVx1MDAxMvQk3a+8uItwXHUwMDA2XHUwMDFhjlJK2uU8XHUwMDA07D5L1ppryKAl0Fx1MDAxMlx1MDAwMV2CWf/ibYLZdXKZa1x1MDAxN5gxXHUwMDFmXHUwMDAz1pyquyEuUzMwXHUwMDE1yXqSPlx1MDAwZTlxUaxcdTAwMWOGs1JxXHUwMDA0UEzGpcQhZ0JcdTAwMTEtd1x1MDAxZYpcXFx1MDAwMcJJ/9np6PWmMCRcdTAwMDNcdTAwMWRcbsNGc6hE3Vxyf9bI202BcJQgJ05YXHUwMDE1m1x1MDAxM1x1MDAwN7MxkzyDwXmrsTmlLbjevKS62Vx1MDAwMWk+tGrb3Dh57549Xtt782PocXi5NTrJTXcl1ioymVhZ2jCY2PnJaVx1MDAwMDo3yI5TvkRiY2dF1i5cdTAwMDZcdTAwMDFuqppHY5tSx5wsXHUwMDA24PQjXHUwMDEy2X9cZjfnbuIhKOMtyuyOO1x1MDAxOSmNUFx1MDAxMpP3i1FcdTAwMDZcdTAwMWEhsFxyVPaD71x1MDAxZp08ffjto+LJw189On76/eP7T/z6XHUwMDFhXHUwMDE3XHUwMDFl3ZG+XrnaNGeKXHUwMDEzXGJKlWtcdTAwMWTjKFxctlx1MDAxNqQxStRoyMJay8Hr+3Io0Ta/XHUwMDEyJ1p/RCRcdTAwMWRHxKKs5oooXHUwMDA3cYc6ZG/oLTo9SW3T50p0puNnqVl4NKNjnMRcdTAwMGXwXHUwMDA0gtLguGmJOlx1MDAxZk25KJWrq1VcXDIukoxFNKaqzN5cdTAwMWPbTMKZyVx1MDAwMbhcdTAwMDWOMoqZSlx0Qztpema6+vmtepTMXHUwMDEzQV9Wg6vaT8osMnI6V5rKbFx1MDAwNvY/XFxPSEs2UaFcdTAwMDXdXHUwMDExLz5kpq7g4jTGSipGXHUwMDE3mvuHz3VxUZOWsUaJXHUwMDFjXHUwMDAzxn8t1oaJs+Bi50rT2Ea+kYI1y44l+d8l0t3WSjNjTZdpPCjYXCKIm1fh3KRrLsi180bmVlxiWMbd2L9cdTAwMWKwk0zDVn1HSFx1MDAxMla9Xkfrq7ylbMi6XHUwMDEz8TZI04pWN1x1MDAxMlx1MDAxZnFnx63MXHUwMDE4xVx1MDAwNZNcdTAwMWRW9CBpV1D1ZcRcdTAwMDFcdTAwMGZaZlhzulxcXHUwMDAwVcnqctftN3GHIGKq2jJcdTAwMTHpvVmqhkV/OK2f1eOMXHLpqsUm0rU8TNfaXHUwMDAwUjJRalx1MDAwNKkkWdKDsI1k5KtcYmGrhLawUGJcdTAwMTNUVc+FsVxud9+edbWy7TSYWTCye6lpbGTYNJqWttWePlx1MDAxN9yoUlx0MFxmJbjwrKdh10Havl/TWna+jmCn4aitVHFcdTAwMDZTklx1MDAwMKU3qeQ1zfRzXHUwMDFiQcLNpC3dw0l9NHmfsU7q8NtL17f+XHUwMDFmiVx1MDAwML/MW91cdTAwMDYuPVx1MDAxMXnDptO0Jpz72Fx1MDAwYkaUKI1xTVx1MDAxMYU2zU7DXHUwMDA3hVx1MDAxYsTYN1x1MDAxMUFbxlEx9NZtdVx1MDAxMpaDQU23KflcdTAwMWMp7c64tyHsRfWmXHUwMDE4jVx1MDAwYve/4Wi6stNeXHUwMDE2JnXNelx1MDAxM+ncsPk1ylx1MDAwNHBcdTAwMTM56Vxcy7VcdTAwMTZpdO5e5Vwi/Cmcl4JcdTAwMTlUgsVcdTAwMTU5W61B6eabslK5T0ZcdTAwMTf10fCOXHUwMDAzPK0451x1MDAwM5XVy01jMMPa9rTVLi430Fx1MDAxMihLqYmNZDN5x0i3g9p9t6Z1XHUwMDFjXHUwMDA1XHUwMDE2zlEwUiHJXHUwMDE09JG003hcbis4sORDXHUwMDE5yHhcbmCiXHTFjYYyvKyP6Fx1MDAwN1dcctFIUL9cdTAwMWFM//Hozt3i/ng8XHUwMDFhZ656Iz9CXCIyh6nftoX1sFmJklx1MDAxOWWlfDvaqIvOXHUwMDA39dvJYFxiZzBdaORcbniU+jXSXG7rKttSXHUwMDEz2DCxnbvqZOR51Vx1MDAxZmRsWZeXmEjjXHUwMDA2dvJp+59cdTAwMWVcdTAwMDaCglIhN1YwpWRHN584mbtXk8WBh1x1MDAxM1BwN1x1MDAwYpN7+1EuRXivXHSIXHUwMDAwXGYhvftJzN7ugGWmXHUwMDFiv31xdHRnJlx1MDAxYsnWXHUwMDFj1dknK3SvN4lt7Fx1MDAwZifudZtXa+jG+cvqVj7pi4nOoVx1MDAwNrVcdFx1MDAxZjMq11x1MDAwMOHnY0S5XHUwMDA2oEZXTFx1MDAxNJdO5OI5gumsXHUwMDBi3VxinWGtfVx1MDAxNsdmXHUwMDE5toxJgyWiXHUwMDAy5F2hkUjVtlexXHUwMDExkOFGXHUwMDAz0LhupdbEnVx1MDAwMSqthfORd149tGQ2flO/Kd5tk59nbC38y0yj3+jnXHUwMDA2teqBllx1MDAwYuUjXCKR0IU7mLDKXHUwMDEyXHUwMDFmVYKk773qxlxiXHUwMDE4wUVjUHIjrDebzbRcdTAwMWa8jlS6XHUwMDA0OFx1MDAxMKnbXHUwMDE4o2VcXJqtsr5cdTAwMWZfTaZcdTAwMDVhfFhNr8b1pKBcdTAwMWJaTOrB+ae90dmVW0J/+Kz46c9/K/7gXjiuq1x1MDAxZT2QMWm3/DxcdTAwMTFzftbQO6jxj5KiZMK1X9NcdTAwMDZ1Y1x1MDAwNO9brlx1MDAxM6+J1CBIpzPbXHUwMDE4OHtcdTAwMWRcblWiRFx1MDAwM65DjFx1MDAwNC7l4YBcIo74KoL4pFx0uUR/XHUwMDFhq+0u9+Caa5U8OVx1MDAwZV1TdNw2+nk+XHUwMDFhXHUwMDFkNc/Jn3aEOrMg9pr1plx1MDAxOdBFvFxy6lx1MDAxM2SELpVraa9cXM5NY07xO1x1MDAxYl0y+lx1MDAxMqTarLSNWVDzZHRdolwi3ktDd9I0S+pcdTAwMGUmO4i5OoK5TINcIo0kvWeLy4l111x1MDAwN1x1MDAxN1q6PDqbOOxCN1x1MDAxY/V2NntaXHUwMDBmXHUwMDA2k+LN6CpjunrWmM62elx1MDAxYVx1MDAwNq13YflyXHUwMDFhq1x1MDAwNlFqRkyUzoKi9vTUO9BwXHUwMDE1XHJNXHUwMDA0XHJcdTAwMDXXqMiIepWzaj84b+qFYJnUqftcclx1MDAxMK+dJt+Khs/7k+KsXHUwMDFhzlx1MDAwMvzFs3F1Vp/T29+URfFoVEyuxpfj/qSevP3W/eDicuRSu8dF/fqsnpmwSZkzhdN+vnT0n0yrcchcdTAwMGVcdTAwMDBuSIE03FpNQltCO7nAmlJcdTAwMTjOwFpS2HKOy3lmXim4XHUwMDAy3dHvIG5I14NcdTAwMDfanuzLcHiwMSl5tDXQXVx1MDAxMr6NXHUwMDAxlk5KrpU1KDZcdTAwMWKMkHpfXHUwMDAwbvV2yT//+19eVjfyy3Z5XHUwMDA20lxcXZpg1jdn4unl04vnf/z+jbisXl18q//0laeZ2jJBrcWSK2NcZqI1tM+3dLTgpeZKXHUwMDEwQY021vw8OrpmXHUwMDAyXHUwMDA07Fx1MDAwYk+PI1xmuJuHa1xcwbSHp1J1XHUwMDBlq7ZSK/KXXHUwMDFhPfLSXHUwMDFjX5JHbuxWlZyfXHUwMDE2Tyq6XHUwMDE0k+fFl8/pL9W4n7E1XrXYeNNKf84u7a3q8vLJlC7srfdcdTAwMDdkt17261dfelx1MDAwZVx1MDAwN89nX7c+ebdcdTAwMGI4wNezc7VcdTAwMWY/+fH/XHUwMDAxj3dBhiJ9 Rust Functions — Anatomy fn add ( a : i32 , b : i32 ) -> i32 { a + b } // no semicolon → implicit return key name typed parameters return type body IMPLICIT RETURN Last expression without ; is returned automatically — no return keyword needed fn square(x: i32) -> i32 { x * x } x * x ← no semicolon, this value is the return SEMICOLON TRAP Add ; → returns () (unit / void) instead of i32 → compile error! fn square(x: i32) -> i32 { x * x; } x * x; ← semicolon makes this a statement → returns () ✗ EARLY RETURN You can still use explicit return to exit early from a function fn safe_div(a: i32, b: i32) -> i32 { if b == 0 { return 0; } a / b } ← explicit early return UNIT RETURN If no return type is specified → returns () (unit, like void in C) fn greet(name: &str) { println!( "Hello, {}!" , name); } ← implicitly returns () FUNCTION SIGNATURES fn greet(name: &str) no return value → returns () fn add(a: i32, b: i32) -> i32 returns an integer → returns i32 fn parse(s: &str) -> Option<i32> may or may not return → Some(n) or None fn save(data: &str) -> Result<(), Error> may fail → Ok(()) or Err(e) Key insight: Rust signatures are self-documenting — just reading fn foo() -> Option<T> tells you this can fail gracefully. No surprises. No null pointer exceptions. ★ - Sandesh Bhandari
Figure: Function signatures in Rust include explicit parameter types and return type.
println! ( "Hello, {}!" , name);
fn add (a : i32 , b : i32 ) -> i32 {
a + b // no semicolon: this value is returned
// a + b; with a semicolon returns nothing
That semicolon rule took the most getting used to. Adding one changes a return expression into a void statement. The compiler error is clear: “mismatched types: expected i32, found ()”. Declaring types up front also makes functions self-documenting. You can read a signature and know exactly what it expects and gives back, without reading through the implementation.
Ownership is what makes Rust fundamentally different from every other mainstream language. Every value has exactly one owner at any time. When you assign a value to another variable, ownership moves to the new one and the original is no longer valid.
let name = String :: from ( "Sandesh" );
let name2 = name; // ownership moves to name2
println! ( "{}" , name2); // works
// println!("{}", name); // compile error - name was moved
// To keep both, use clone:
let name3 = name2 . clone ();
// Or borrow - lend without moving:
fn print_name (n : & String ) { println! ( "{}" , n); }
print_name ( & name2); // lend temporarily
println! ( "{}" , name2); // original still alive
This eliminates use-after-free and double-free errors, which are common in C and C++ and cause crashes and security vulnerabilities. In Rust these cannot happen because the compiler enforces ownership rules at build time. You get memory safety without a garbage collector, which is why Rust is used in operating systems, game engines, and embedded systems.
Structs group related data together under a single name. They are similar to classes in Python but without inheritance. Rust does not support class-based inheritance. Methods are added separately through impl blocks.
let mut person = Person {
name : String :: from ( "Sandesh" ),
email : String :: from ( "sandesh@example.com" ),
person . age = 22 ; // works because person is mut
Structs are the primary way to model data in Rust. A network packet, a database record, a user account, a game entity: all of these get represented as structs.
An enum defines a type that can only be one of a fixed set of variants. In Python you might use strings to represent states, but nothing prevents an invalid value. In Rust the options are defined at the type level and the compiler enforces them.
enum Direction { Up , Down , Left , Right }
let dir = Direction :: Down ;
Direction :: Up => println! ( "Going up" ),
Direction :: Down => println! ( "Going down" ),
Direction :: Left => println! ( "Going left" ),
Direction :: Right => println! ( "Going right" ),
The match statement forces you to handle every variant. If you add a new one later, the compiler gives you an error until you handle it. This is the feature, not a bug.
Rust has no exceptions and no try/except. Every function that can fail returns a Result type, either Ok with a value or Err with an error. For values that might not exist, Rust uses Option. The compiler warns you if you ignore either.
fn divide (a : f64 , b : f64 ) -> Result < f64 , String > {
if b == 0.0 { Err ( "cannot divide by zero" . into ()) }
match divide ( 10.0 , 0.0 ) {
Ok (result) => println! ( "Result: {}" , result),
Err (e) => println! ( "Error: {}" , e),
Failure is part of the function signature, not a hidden possibility. Anyone reading the code knows immediately whether a function can fail and must decide what to do about it.
The two main collection types in Rust are Vec and HashMap. Vec is a growable list, equivalent to a Python list. HashMap is a key-value store, equivalent to a Python dictionary. HashMap does not preserve insertion order because it is optimized for fast lookup, not ordering.
let mut numbers = Vec :: new ();
numbers . push ( 1 ); numbers . push ( 2 ); numbers . push ( 3 );
println! ( "First: {}" , numbers[ 0 ]);
use std :: collections :: HashMap ;
let mut scores = HashMap :: new ();
scores . insert ( "Sandesh" , 95 );
scores . insert ( "Alice" , 87 );
println! ( "{}" , scores[ "Sandesh" ]);
Rust iterators let you transform and filter collections by chaining operations. Call iter() on a collection, chain map and filter, then call collect() to get the result back as a Vec. Iterators are lazy, meaning no work happens until collect() is called.
let numbers = vec! [ 1 , 2 , 3 , 4 , 5 ];
let doubled : Vec < i32 > = numbers . iter ()
. map ( | x | x * 2 ) . collect ();
let evens : Vec < & i32 > = numbers . iter ()
. filter ( | x | * x % 2 == 0 ) . collect ();
let result : Vec < i32 > = numbers . iter ()
. map ( | x | x * 2 ) . collect (); // [4, 8]
Lazy evaluation means you can chain many operations without creating intermediate collections in memory, which matters for performance with large datasets.
Threads let you run multiple pieces of code at the same time. The output order between threads is not predictable, and that is expected, not a bug.
eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1dXXNcdTAwMWLHlX33r5ilXHUwMDFmYlfJ47793XLiKpqibCW2pEh0XHUwMDFjZ53aXHUwMDFhXHUwMDAyQ3FiXHUwMDEwYFx1MDAwNkPRiuOqfUmet1L7kN/nX7K3QVx1MDAxMlx1MDAxOFxmesBuTHM5NCBVXHUwMDFjcfDBXHUwMDA25p4+9/P0j+8lyV717jzfe5zs5T9cZrJRMSyzy71H9vrbvJxcdTAwMTaTMT5EZz9PJ1x1MDAxN+Vg9szTqjqfPv7448Ur0sHk7OpV+Sg/y8fVXHUwMDE0n/ef+HOS/Dj7Lz5SXGbta4/fzJ43u3Lzm8t8UGXjN6N88dBcdTAwMGZ4naWKciNcdTAwMTlcdTAwMTBqjFx1MDAxNFTo+cPv8OGPSMoo0YJLRbhcdTAwMDRgZPH4ZTGsTvE5XHUwMDAwRqZGXGLKXHUwMDE0XHUwMDA1XCKFnD/jNC/enFb4XHUwMDE0bURqXHUwMDE0k1x1MDAxY7hcdTAwMTGSXHUwMDAwzJ9ytaTHXHSZX5lW5eT7/GAympR23VWZjafnWYmfd7Hy42zw/ZtycjFcdTAwMWXOn/c+ZFRTsnjOSTFcdTAwMWG9rt7N3lx1MDAxZL9X/Fx1MDAwZfdcdTAwMWG/45vrXHUwMDBmQFx1MDAxYtfbXoW/8M3pOJ9Ol9Y7Oc9cdTAwMDZFZb8sIIurdnXnz4azW/TnxZrK7Cx/Zu/R+GI0ml8uxsPc3oy9jCz9tvHw+rfd3N/F/WTXV35arD3P7Vx1MDAxYlPAe8U5V4vbsDAyXHUwMDA2K1efT8Yzg2NaU7z7fPGEYvpcdTAwMDRccq2avetJNprmi6/fLu2wZoSLT3hxPsyuXlx1MDAwMkpcdM5cdTAwMDRQXHUwMDBlYvG9jIrx982PP5pcZr5f/Jb3alx1MDAxZqtp15NymJfetlxyZMmWaz8uTFdcdTAwMTOHtSrtb5/v8ydPzD5Za5tOXHUwMDFivlv7pHdjn7SzfWqujFa41zjMk7ZcdTAwMTmnXCJcdTAwMTItmkpcdTAwMWTXODmhXG6IimOcVVHVXHLwxjar/IeqseWyZbukq3bJXHJLXHUwMDA1XHUwMDEwhFx1MDAwZsF/ck7VqpUy3LpFgJ3m+oTkvbNTuFx1MDAxYjtlbjtdeva1QeKXy1x07n4uezRtXHUwMDA2XHRcXFNFhFwikVxyXHUwMDEyKFx1MDAxM7Ut+HaDXFzYm7Uz/OivLqZVcnRa5tlwmvz83/+bXHUwMDFjlVx1MDAxN3nyMiuz0ShcdTAwMWZcdTAwMTXTs9qdnYyr18Xf7OepXHUwMDE5mL36NDsrRvZWiKX331x1MDAxZlx1MDAxNW/s97I3yk9qXHUwMDE2gt9NVaCXMn+4mpwvXHUwMDFlXHUwMDFk4PtlxTgvV+/XpCzeXHUwMDE042x0XHUwMDE0vvbsopq8yqdXq1/+JvBLy7+4QVx0pFSsXHUwMDAz7cXI31Wiy76RWNj7XHJuXHUwMDA1XzxlXHUwMDAx1Dtwdpqk8yCdXHUwMDFk7lx1MDAwZlJcdTAwMTBMXHUwMDFh9EGlXHUwMDEzpm0olVx1MDAxYTdQJVwiuzRRWWNgl3peXHUwMDA1eOyULlmh5Fx1MDAwZa/G5YPXrt1OXHUwMDE2NEfmWU9cdTAwMTbvkyHkwDexQdjAXHUwMDA278ihXHUwMDExnVx1MDAxZFx1MDAxYdBglMD/rZjhOtPUlHNh6vtFXHUwMDBmbVx1MDAxMzIvf2Z5W6w5JXODpDTlXHUwMDFh0KHRUlLBXHUwMDFjmyQ+I8SZXHUwMDE56sHwWG+JMyP990mhJCNU1lxcylrwt3Lxxlx1MDAxOI2hhuLeSiNcdTAwMWKjUmBcYlxyMEa3N3OaTZ1OXHUwMDBi6KWr9+m0LC0xkm8ygGNcdTAwMWb4XHUwMDAxWzBAXHUwMDBi/qRIJe42UqB5gFx1MDAwMt1cdTAwMWR/T58qcyC3XHUwMDA0f8pcdTAwMWZ/lFx1MDAxMGGYpi43hTWvzYNcdEqM0orXbmRcdTAwMTT8SWGIZKxufKH4e/5cIvn82Zc9Rl9zgUvYqzB82Fx1MDAxMHpcdTAwMDNcdTAwMWbo0YYv5qI+o1NDXHUwMDA0RnWCXHUwMDE49Fx1MDAxMlx1MDAxNlx1MDAxMeWO+jygp4Ogp5lG6uN1K7s1kpecU26Tn7G5T0tcIk3d+kKx99GnSXVcdTAwMWRcdTAwMGKXXHUwMDE346RcdTAwMTj3XHUwMDE4hmvWXHUwMDFhjVxyhz6QxJt5KySFSlx1MDAxNTNSXG6b90GHeXHrN8WkXHUwMDFh5jrbltya8cekJlpy1Vx1MDAxMlx1MDAxYUHz4pxcdTAwMGZtXHUwMDE1XHSQvlwi8yFi0nAt6uZcdTAwMTeKScsoyfl1QqrHeGxZZzQseiW66+nRXHUwMDE2LDKtUqpcdTAwMDRhs/utdvRcdTAwMThcdTAwMDbF/ZBcZppGXHUwMDAwXHUwMDEwJl30yFvzXHUwMDE0hkmitYTYeVxuZVx1MDAxOK+96Vx1MDAwNlCcjJOzi1FVnI/y5ODl18lgUubTZFrYi9k4n1xcTFx1MDAxMXf9RWjY8mNcdTAwMDGXbpLRMTyVXHUwMDA0XHUwMDAzXHUwMDE0ZoBodJdcdTAwMTZcdTAwMTHFXHKMqZQpzMzLZlx1MDAxMdBedjBcdTAwMGWB8Wf+MGZAuVBMu1x1MDAxMjx0XHUwMDA12vNso5DaXHUwMDE4XHUwMDFlu7hvc3pKQN1cdTAwMTRDUfziXHUwMDEy0TI9Lc6T6btplZ8l52X+dvab+1x1MDAwYl2PNUfDq1dcboiR5TjUiFx1MDAxNHd7Q1xmU1xuhKnd9rlcdTAwMGbMZWpcdTAwMWQs+yhGTUR294G3KiV0XHUwMDEw4Fx1MDAwM1x1MDAwYipcdTAwMTgh7n6cVt5cdTAwMDVmXHUwMDFislxmhdhcdTAwMTVmjXt0N+LFN8ySMlx1MDAxYuR9xqhrkdFA6ZVcdTAwMWPidNn7RVx1MDAxNlx1MDAwNU6kwY1YXGKJN2FcdTAwMDWU3HbJ2cJcdTAwMTDlXHUwMDA079GCZnck6lx1MDAwMcknXHUwMDAxqVwiQaCtYsdE8+JcdTAwMWOSQtiKXHUwMDFkjZ0qwuiHXHUwMDE46JQqyir0XHUwMDFmz85cdTAwMGL0JaviLJ/1Tlx1MDAxNCdJMb88fYQ//Gp6naT5aJqd5Eny87//0WNcdTAwMDRH+EyxXHUwMDAwP60yR9eho1x1MDAxNFPvdGzLPslUSjQ/SVx1MDAxN48t8Fx1MDAxZNbQNdC31Oh/Oeg+XGaIdFxyo+j3MFx1MDAxMdRiKDUotuRY31NBflx1MDAwNdxtMK3xyz3CtFx1MDAxZHBcdTAwMWJXX4bFW7Jcbje/dlx1MDAxOKCuXHUwMDA2dVc/zOJ18dqymm0zXHUwMDBmssf3aUhSiUpBQTmTSu2+LVx1MDAxMVx1MDAxMv1Q2uvel8kw37wpXHUwMDBimK9cdTAwMTWCXHSwQ7+2rFxmNMk3scFcdTAwMWW1ZX3evS2LXG6JJOvshGm3TEmMUoayfrdcZlx1MDAwZfNZs3nImE9jXHUwMDE0gju6XHUwMDA2pWNcdTAwMTSCRp6EeJ9cZjGw3WiH7JF1ftHdOolQQjFcdTAwMTnWz1xu+DJAP4XGLozdiXlukGmu+89zu2Q8ZVxcMiNcdTAwMThcdTAwMThghjj8ZtBhs1x1MDAxMP2c2bkj1/lZXGKfo20pXHUwMDE1XHUwMDE4XHUwMDE426YnzTlRsc1SgzRBs2MrvvPRXHUwMDE3h8nBiyeHTlx1MDAwN1x1MDAxYcTS1XtyoFeXXHUwMDE4K2xcdTAwMWSCV55quWFcdTAwMDLUquvCgKZGcUZcdTAwMTTGSFo6q7QkXbzPLjO1XHUwMDA0wN9cdTAwMDZcdTAwMDDQJn1cclx1MDAwMXd9p7WDkFx1MDAxMU143emMlJiyI2idYteLaZ5Mq+Hjx1dJmk/cOOzF8FH7Ulx1MDAwM/C4XHUwMDE2jnRcdTAwMDM4UrLKiHhPUuBcdTAwMDB2oFpcdTAwMWFFndHtXHUwMDBlj614/F1IU6FkyG5uQmwttyomXHUwMDA0JfUyeCw8cso6JYpcdTAwMTdGXpzlj1x1MDAxZj+5KLNcblx1MDAxN/4wcNm25Fj4ZJvgs1bCm3us6I1KTaTkxJ3lXHLDppDm4Mm2XHUwMDE0Vr/0xyZcdTAwMTeMMlGP1b1cInz0KqmgXHUwMDEwu9+3e55cdTAwMTfX0GNcdTAwMTgurc4/z7tcdTAwMWVwXt1ccup2xGFwmFx1MDAxMmBKKiFcdTAwMTVcdTAwMThn6XRHiK2g+yrAQVWEguDK6aDKVnVcdTAwMTGM3ylnjMRnRCVop1x1MDAwNqTTbDxcdTAwMWPlyW+uy4iPXHUwMDFm4y29XHUwMDFjf/D3vyc/9lx1MDAxOI1eq47Fi9xcdTAwMDelcjlcdTAwMDNOxWqGkYpUXG5qNJdgYMeNwTB9XHUwMDFlUlx1MDAwM9VcdTAwMThFUkNcXDBtXHIjXHUwMDE1V0TEb1x1MDAxM5SSaGp43fhCUXoyKXuMxqXVReJG7sWNpiEl40JcdTAwMWRNXHUwMDA12KlP1Vx1MDAxZG5bxYovQuDGqZJcdTAwMDCr8lprfVHA8FJBXHUwMDBmZI1W8Fa0jpv1XHUwMDAycEX7hFlcdTAwMDfEebX1QVO9qYXobO9mXGbI8cNcdTAwMDPz2baUKl76Q05cYs2RrFZ73tchTlx1MDAxMyM1XHUwMDE3pH+AgzRcdTAwMTU9XHUwMDA23PLyYlx1MDAwMc5rolx1MDAxM5SHZ6lVqlx1MDAwNCF4J1xmRoBcXO4yokG4+31IXHUwMDAwaCfZW7rreGuNUGttXHUwMDE1QmO3s2NcdTAwMDBoTK0hd1x1MDAwM+T9mJyXxbhcdTAwMWGN/+ODXHUwMDFlXHUwMDAz0LnKaFx1MDAwMZ5frZ7cXHUwMDBlROAm1YJrzoBcdTAwMTmJ/794yqZAPDg0oLZcdTAwMDWIr1x1MDAwMoCI7qM0JFBqXHUwMDA0KGdKqNilXHQp8c5Dp0TMd3vXuYxkgL+3Sn786bu9XHUwMDFlXHUwMDAzcv1yYzHkiVx1MDAwZjBcdTAwMDXc7pJyRlPNiDJCXHUwMDBiO/BFulx1MDAwM3OrXHUwMDE48nVAzVx1MDAxMIity3Jn6kU1L85L+FJcdTAwMGImIXaG1CquXHUwMDE51in38igpPvxkkWhcdTAwMWPl+flcdTAwMDc3VbjHj0/Kydl/IVx1MDAwMkfFtM/8ucmHiEavjj5NVyrndlx1MDAxNOP2nUrKXGJH/OKWK/nC2jdF8VaNbVx1MDAxZYWkdDBMXHUwMDE0XHUwMDAwxMWvsHJx7udcdTAwMDKnXHUwMDAwXCL+2CZu2aRcdTAwMTO/Qo/RXHR3XHUwMDAwulMv0NUydu2gYykx0spLoUeL8aVrVnpHna2g+zqAOin6JkI7m/bbNUqAXG4jXHUwMDE0J1widlpHq6U53VxyQPchks5PyU9cdTAwMWb2ucHGscZYIFx1MDAxND5cdTAwMThsdtSoVblcdTAwMDJcbilcdTAwMTjQhlx1MDAwYlx1MDAwNruqYVx1MDAxOPz+XHUwMDEwwHlMaSYoXHRsqWFMIz2Z+59KWIHf9pVccoVfS00jk+OC3K5suFx1MDAxOd6+XHTAXHUwMDFigkZxxcOG1NBcdTAwMTORRtRTa32B2zZWXHKFX9VcdTAwMTA8XHUwMDEwt6tcdTAwMWFuhrg/XHUwMDA2IE6AsjlcdTAwMTFcdTAwMWVWNkS/X1x1MDAxMX7/XHUwMDAzyyuI28ayofArXHUwMDFiitvdSsZlqo1No+DNoEKxXVI0XGJ431x1MDAwNlx1MDAwME9cdTAwMGJDkLWcriVvP2fJXHUwMDBlfWrFTezRJlxcXHUwMDBmMZ1ksHZ1w6Hwqlx1MDAxYlJ9O1x1MDAxMoGa1IrgXHUwMDBiLsFcItF1QsGubNhcbsQ/hcR4UnOQZlV6bm9N3VDa7lxuqWJP+Ep7XHUwMDFjXHUwMDA16XTe2Xd7Z1xihVx1MDAwN1M0bF9sLHb0K1x1MDAxOVx1MDAxMnxcdTAwMWauOYb7imgwi1x1MDAxYt/unaqUXHUwMDE5aVxiXHUwMDAxXHUwMDA2wtBcYmmYreLKzFx1MDAxZqKccJglNFx1MDAxZFxi1SuO68JJNUB4bM10JEpcbjJ6/TBNU5t17DFUvVZcdTAwMWSLSKVcdTAwMGZmuUZcdTAwMDBSoJKgzypEcyzKyJRcdTAwMWEws1umqXCIvjLOU4V7uEEsS612iZ0wXHUwMDA0XHUwMDFmXHUwMDA3kCxBbqNcdTAwMTheuCCsWntcdTAwMDBAXG5cdTAwMDApdfxBfsrxhndcdTAwMDHx1cBR+pdJMf7gw/RifFlm51x1MDAxZvS6rHHriqOB1ytcdTAwMDPEmk06xqGzoXjKZnLMxOpDMt59jlHuW7nZLUHoIFx1MDAwNKFKSkq1U5ZcdTAwMTnaXHUwMDExKnDnNUzFb9NcdTAwMTGadJO6+fjj5DIrquRkUiazacB8eE1fSTVJTopxMT3tMVxcw5ZcdTAwMWZcdTAwMDe7w+KtQ1wix0/ij3lL/O2EJlvgOvSHq1x1MDAxMFrY82GCXG6TmnFKXGbcv6TrXHUwMDFhXHUwMDEzfFv8bZRcdTAwMWTnjlOob1x1MDAxNUtjXHUwMDBlsTTKMEpD3jBcdTAwMDBcZncp7nLxrGxUXHUwMDAwg2yVVlrub5JaUdxcdTAwMDPcuv5rzrbCyJtRTlX0Xlx1MDAxNUOE6HTW4+FcdTAwMWZcdTAwMGZcdTAwMGa+Pnr24nly9Oyrwy+fPW9RTetcdTAwMDVdrFtsJP20XHUwMDFiaIZcdTAwMWNcdTAwMTHfQKhyIJQ6KGJ3RHxcdTAwMGJcdTAwMWVP/PGoXHUwMDE0aCMluPKarVx1MDAxNCE4MYxcYn3vlb01dmhThqNjP4ZYjjGYcXUz6lRxe75cdTAwMWWhxlxu4bhqXpBcblP/XHUwMDEzolx1MDAwMrtVOYE3/vZcdHbqQlxuXCJcXFx1MDAwNlxurYNzyFx1MDAxNlx1MDAxMlxm07ErYEhcdTAwMTjMdFx1MDAxM/ezhummiF5cdTAwMWMgsby8OFx1MDAxMcOZf7xcdTAwMDCN819Y7eTJXHUwMDA1XHUwMDE5ODSXeUDA8D7PXHUwMDEwbsP1TFx1MDAwMFx1MDAxOSPyoVx1MDAwN1x1MDAwYqdupFx1MDAwNWguU6M14atcdPR1/GDsII9R/eZcdTAwMDeofLhcdTAwMDFEwzlxJKCA0NT2uVx1MDAxM6J0jEZbc/Dk4OnhlnBBXHUwMDExwlx1MDAwNcYwXHUwMDEwgUeU4N1hSmrdQ72Qelmzz4MmLeuMUns9c+i7tsVcdKKRTNpxw+zqhsj7S2duXHUwMDAwwTWT2t1cdTAwMTXRXG5ILlx1MDAxOFx1MDAwM8NrN7OH7EC92IGZZuiwY4eoNvq9PztQ2yeHdFx1MDAxZHZ0XHRXyFx1MDAwZZrQe892riVcdTAwMDf6QMiBxiZcdTAwMDeHuHBcdTAwMGI5iEa/3I5cdTAwMWOurm5cYrxRd3LgUnFKpVNqo51cdTAwMWOI0KZcdTAwMDc6w2uN0otcdTAwMWJks/S144a4JnpcdTAwMTZcdTAwMTI5XGJ7yrpcYotcdTAwMWOUkkpcbq7u/VirtdzAXHUwMDFlXGI3sNjc4Fx1MDAxMNht4Vx1MDAwNt2YV99xw9XVXHKBN+7MXHKCaiqYXG6LXHUwMDFi7Fx1MDAxOV5G1bVcdTAwMDd6yFxy3ItcdTAwMWJ0Y8zGzVxyOpVAtea23KA5697dv1X0MFx0oFx1MDAwN1x1MDAxMERcdTAwMDJxXHUwMDBllLaLglx1MDAxMVx1MDAwMMLq7Vx1MDAwNJGa+6mStZV0ZFx1MDAwN/5A2IFHZodiXFzl5SjP3uaeRUCql0N57jjsUVKe4l1HNOL2pUhtXHUwMDFlfOM+XHUwMDExrbNMb0vd79xcdTAwMWaSXG7RoKk0ToZo7eZcdTAwMDdllaGZiH6mnjGC6U5cdTAwMTM3P//zf5KFUVx1MDAwZWdcdTAwMDezTy6q84sqmZTDvEzGkyo5L/NhgS7M8ShPjt8lQ0TBmz7Phsf4UJH6Tq66XHUwMDFlN6v481x1MDAxYfbr+kVylt9EN2WpkLwr+Fx1MDAwN1x1MDAwM/+vXHUwMDAxPYtagZ1cdTAwMWJ3cXF7vZ9cdTAwMTJqaVPEZmOujeK00+FhV4bZ44p/c4Fxav7V5jV/Lle94e7hmT5cdTAwMTaDk/XyRe/TXGZcdTAwMWV+eFa6wVx1MDAxNpK6M8Cskl+Y3lx1MDAwMzBcZlUkQiYyXHUwMDA0Y8ZnlWfVny9X/bmGXHUwMDE1i1x1MDAwNElT4IpjSGpcYlx1MDAxMGPUqoFcdTAwMDbGZ1x1MDAwM34sTtZnXHUwMDEwfjmcMFxyiM+4XHUwMDE1VcJgy+lccrZHaJIoye/gRElAK5dcIsBcIltI4SHU/ltXXHUwMDFhiSY2L//vaOLq6ob4qzrTXHUwMDA0esZGg3aOa7brcHGO5ELvX1x1MDAxNWitUfpV/5VKOeeSXHUwMDFiSTBChNpo8DVppJJpZZhiTFx1MDAxOELYqrlcdTAwMTJcZjJcdTAwMTTYwUViOCjdXUpnqzjkXCKAQ8T1tKCrXHUwMDFjKVonT65kiaWU0TlEIDN1mjxZ3pn73Fwi0LrSSFx1MDAxY7J5l8COQ66uboi/tzFCXHKtNSVhXHLGXHUwMDE4MVxu9L3rXHUwMDEyXHUwMDFiPWRcdTAwMTHPPoGGyKEr1qDEpFYh3crIMEK5c0Jxx1x1MDAxM612elx1MDAxOcBcdTAwMTPEUKaWXHUwMDFjlFpcdTAwMDKqXXJNgpRMqsj5J6RcdEV5JyGZ5c23z91cdTAwMDKtK41EXHUwMDEzmzdcZuxo4urqhvD7oXvDXHUwMDAwQ9eNXHUwMDA1TrJLY1x1MDAwN/b6PcleeTZcZjTk3t1cdCmdXG5mJY5cdTAwMTXjoE2EfrKtXCKJd1x1MDAwMdVJqmanuTudlpVweFGdxHhcdTAwMTlj39jVSYFcdTAwMDEkdDvOb3nr7XPTQOtKI5FEcZbbp6+CMivLyeUyKtFcck2XY37BViuJhi28hjlcdTAwMTBcdTAwMTdPe6g9XHUwMDAyd8RcdTAwMTV/XHUwMDBicNWkMEZcdTAwMDA4Jf/aO4yZXHUwMDE2oEQtl3zfXZ3nk+L67eeEuPhXsjCM2Vx1MDAwZvN///mR89k1a2s8/73G6/ZG2bQ6mJydXHUwMDE1XHUwMDE1fpCXdlx1MDAxMStfdJWV1Wd4c4rxm+Zj+XjY8sjsVftcdTAwMTYup7awuPq6+mNNXFzlo+PJpVx1MDAxZnVaqPrV+9GHWi7oiFpz9lxcR1xmUt5+VMqDx+vdsOYxIf6AXHUwMDE1XHUwMDA2mYorXHUwMDE5XHUwMDE061OiiVx1MDAxMbQ+gnzfgJ2zJlqgmyrl0tX7osql5fm31a1tsylcdTAwMDbfk1XIeVb2XHUwMDA1XW2qczTRQUBcdTAwMTTlrezSROVDVHY5Jlx1MDAxMECP1i1cdTAwMDT3iZrtmTUgRoEx/c6soVx1MDAxMfq3lzTrhjsj7GqENMBcYpFpuVx1MDAxNtxcdTAwMWQqtfpoklApe+Cj3WKE/sXrZuFhZ4RdjZD5XHUwMDFioVwi6O/zwElE0ERxqmSvZ1x1MDAxMa1cdTAwMTH6V7+aac2dXHUwMDExdjVCXHUwMDFlsFx1MDAxM1wir1p5+rCmOkFcdLG65X1cdTAwMWV6skbon1tcdTAwMDfCm7HYzlxuu1mhXGKxQqRVxiBQQ4eiXHUwMDA1XG7eczMkvtmARsVV8NWkXHUwMDFkVanVqybCSsA7XHUwMDEyXHUwMDAyVlx1MDAwZnA359NmkDLAIJkwwIy73romTKFcdTAwMTRfJ3p4eio5q3W21nNcdTAwMDJi6eo95Vx1MDAwNJZWXHUwMDE3KSVcdTAwMDC+UzeNXCLWXHUwMDBld7Fxp0Jwp/ns4PBA3NleRdFHvVx1MDAxY+g17uBcdTAwMGVwRz1xJ1TD7d/hLjLudFx1MDAwMO6optQw6lZAb8NcdTAwMWRcIlx1MDAxNYNcdTAwMDDSw9OLaa9hR+9cdTAwMDB2zFx1MDAxM3aaNOKcXHUwMDFk7Fwiw874w05cbiWY4e558jbUXHUwMDE5JYxcdTAwMDZz/1xyRCuoY71GXHUwMDFku1x1MDAwM9Rx71Ivb9ScdrCLXGa7fX/YUTtxQXRcdTAwMTjswGpOS3X/yYZcdTAwMTXY8V7DjseH3bB461/jaFxi3lx0R9Ps7qynMKh9XHUwMDE24FgqXHUwMDBlQpFQqFx0rVx1MDAxOWG9LveWk0s4frOxXHUwMDE5Kl8zlCH6XHUwMDFkTfty2SBcdTAwMTlCXHUwMDBlfFx1MDAxM1x1MDAxYoRcdTAwMWXZ4IHbXHUwMDA2g6RANTpSRoZNilpcdTAwMDVcdTAwMDK5fPZAXHUwMDBmbfM4oFx1MDAxMaHhmGjHie61r2ixPYbYpcfBY2iXjNCN9sY+2eWTznZJgVxiIYBcdTAwMDSefqQpeiiM9HmCXHUwMDE5zdJvhLlcdTAwMTGi1thjbpJMpszqW6BTht+XMo5cdTAwMTllUGmIu6yGuc625HC8Y3Loz+FcdTAwMDbjXHUwMDExopRzRnnVSG9cZpJRsMcmk9iNXG5cdTAwMDa0qlxytG3gLz9/kTzZP9pPXu1cdTAwMWZcdTAwMWO+dnvOfOnqPXnOLeuMJE1WQuaDRUpcdTAwMWHlXHUwMDExs1x1MDAxYbhcbis5IIjtTVGSMebSnFx0VCDcJiGyY/I0IGVElFZcdTAwMTKcojOi/axjrkHZmmZkr0VKe/BYJ8GAXHUwMDE3l1xihulpcZ6UXHUwMDE3o3yanOXZOJmMR++SXHUwMDE3z1x1MDAwZm+OXHJcdTAwMWXgNfzz0aeJXHUwMDFir71cdTAwMThcdTAwMDLa+JNEQ/SxXHUwMDBmouVcbr2uXCKaQaqllMZQcKaidlx1MDAwN8+ug/PnIfExXHUwMDE4qUVd2svH2TN2mpL2sPAyueyzMujS6uLkokpcdTAwMTh4gU7dXHUwMDBlOtxOU61cdPrxXGY0l2JHo4G4+1wiIFx1MDAwNUy01twwcFx1MDAxNTxXyXVcdTAwMTH9Uy654DqyV4t7LatrPW+APHzDLMmqJEvshM0nyfQ0K4vxm6TM/3pRlEhH+Vx1MDAwZuejXHUwMDAyv+1cdTAwMWXjc4PPXHUwMDEwjTuHPjBcdTAwMDbSXHUwMDEw5Ha6wzJF6uRWXos5yTNs3J1cdTAwMWZcdTAwMWWYz7aGO5/5Y5hcdTAwMGJpp/BcdTAwMDJTy8RIK17RO+bcL1x1MDAwN78++rTH4GwuMIpcIn5cdI6h9tujUFx0q93ZXHUwMDFhdIq+XHUwMDE0IVx1MDAwMqgxqiZst9PB94Leb/2hx5Ti0riPSlx1MDAxMSuu7DwlxFx1MDAxNVjx6tjgM8pQ1kn59NlJ8m5ygVb8LqkmM9rJk1x1MDAxOVx1MDAxOV2Mp9lJjiHcz//8VzKYnJ1cdTAwMTejvEQ+OrmY5tM0eWKfU2ZcdTAwMDOkJvuS4ux8Mp1cdTAwMTZWU1x1MDAxZd/msiyqPO0xov9fPnUkglx1MDAxZVx1MDAxNm/9R4pcdTAwMWHFNilWd4tdzTdsc/hdQEyLTlx1MDAxMUimwmZ8qcRtW/WAmdex1eSSbl7zldLXXGaj13whZ4RuNFFcdTAwMTSrtqa7m+CX3Uu+VFx1MDAwYi1cdTAwMTlcdGtz1UZcdTAwMWLQ/Vx1MDAxZTMqj1x1MDAwMySrl0NcdTAwMTipXHUwMDFj5TXVteL79KkyXHUwMDA3t8jIsYzg34de8f2qu1mCslx0gPrh0z6hjDJWOFizntvlJiVf6WqPXHUwMDExKjXcznlIQSUzNVXDTUu+XHUwMDFlRvpcdTAwMGLy75+HpMdcdTAwMTQz0qrguixyZfdcXOiNMvxLTeyzXHK4IcZ0O+nq5bdHX7x4nrydJq++fn3U46pv20JjJbqoX9lcdTAwMTdcdTAwMWFcdTAwMDG3Wm1cdTAwMGLSgqRMXHUwMDEwQbkxRONtclDGLl+9XHUwMDA2kC9cdTAwMDJ8aivTaM+gcs3pr3awzVx1MDAwMYl3hVHGXCI71VJcbtPxrJGX76rTyTj5/NmX9ii2t/Z3zpJIXHTe2mw0ykfF9Cw5mZTJwcuvP5otXHJcdTAwMDPRYf7JVUF1Ms5vXG6qJVx1MDAwNquLnHGPo+07/8TRdlxirzIyXHUwMDA1SFx1MDAwNVxiXHUwMDAwNC+zpE832y+MSe3hc1xu41x1MDAxYmpcdTAwMTh3nTKBdI6PcK5w89CU7spdgdvHy4BcdTAwMTYu9Fx1MDAxNVx0cUfktWOnV0TuiKRM3MHBlVx1MDAxMr3WTufXvbqYVslpNk3Gk1x1MDAxOaJ+/ue/elxm/bWrjVx1MDAwNluvQnR9tNp+XHUwMDEx9TNccufdXHUwMDFmTKc2SJagqSDc2VxcXHUwMDE5XG7N7equ/H1cdTAwMDCzXHUwMDFiqVxil8x5tiRt7ehi9oBcdTAwMWabzohcck1lldG6QFx1MDAxM7nsmqmmlqosxyF/TYuzi1GVjfPJxXT0rsdYXHJbfjTwepWf62BtXHUwMDA1L0GvnIuZ46eJ2TnlgdB9XHUwMDE1UFx1MDAwNSOUXHUwMDBiUp/ErfWQtFx1MDAxZt5kh0fsOTHRy2Do59fOjNqke2ucTHPrjla59ULR/yzzltnCXmD1lvXGKz35XHUwMDBiiTVy/sox57srPYUh8nVcdTAwMDCZXHUwMDEyO3AoeViCX1x1MDAwMu6Tot5j0MNE6uSSbV56UsLXXGZ344ZOXHUwMDFiPHLbYECS31x1MDAxMFx1MDAwNVLq4CPFXHUwMDE0/jG9Pr64PPavzDdqT0o48vy8a+3JXHUwMDFjPDl4eniLWWbwXHUwMDBimDb8urNZipnUXHUwMDFkhJ1hpCSjVlx1MDAwM7TXXHUwMDFi5rHfSXeNypNyXHUwMDE16Vx1MDAwNUmJ1lx1MDAwNpRcdTAwMDEuuCTdh1xyPUz0XHUwMDE35FP/IYTBkYu1kU5p7vaT7mw/N1xiXHUwMDFh/VRtboCpbpWn11/svzp8krw+2j86dPvSvag7uZdcdTAwMTkrvmVeVSdo6JErudqaQFWqNJ2VQtzd1bvodlxyXHUwMDEyv1x0qFx1MDAwMVx1MDAwM5NcdTAwMDJcdTAwMWSWQH1cdTAwMDSlNFx1MDAxN1T2cDbp62mfy0NLq4s0m8Q8KzlNXG50NFx1MDAwNFGTXHUwMDFhrlxmkdxw9NCko/liN9ewXHUwMDA2eH9cZqBAXHUwMDBljHLhXHUwMDA2XHUwMDFla16rycJcdTAwMDFjLPqAr1wi+K5dYGfnXHUwMDA2vrrAn3599Gnf51x1MDAxYlx1MDAxY+uMM+bAPIszjfDIgUSmaUql4dRWXHKElFx1MDAwYoPdUaBcdTAwMTdcdTAwMTK/XHJAoqaCcSHdM0atdVNObUOfptF9UUFMTeN4k7PBJsl1Z/9Vt//ZRZXZvv2rwbtBOZlOb4pcdTAwMWY9RupGn1wimifrV6mRtyOZ8lRcdTAwMTCGlFx1MDAxYeFM3CdcdTAwMThP7u9vXHUwMDBihP/kXHUwMDBmYYxcdTAwMTUgdEZQgNBAdFx1MDAwZl1Y5KhcdTAwMWXjcml1kXjTazxQXHUwMDE5k1r9d3RQpZRcXDWS35Km0lx1MDAxOCHQXHUwMDEyiFp8U1x1MDAwYlx1MDAxY/JUScVBayOUXHUwMDAxXHUwMDE1od1huyg1XHUwMDBioFRFrdK4cI5cdTAwMGWadlx1MDAwMVx1MDAxYilAXHUwMDBirWpN37GKpkbWnOZccjD5mytcdTAwMTZcdTAwMWEmk1x1MDAxYv2XRz3G6NrVRuPIXHUwMDEzXHUwMDFm1Fx1MDAxYVx1MDAwZm+Xq5RcdTAwMTIpODVuTeRcdTAwMWRNroHlcVx1MDAwMCzxXHUwMDBilqBcdTAwMDN1aJAnOSXol977XGLKXG4qZ5FcXI9x2FhfJLZ0XHUwMDE0iF1cIlx1MDAxNmyFIFeAZ1x1MDAwNVx1MDAxNm1XP+XS6Loo6I5cdTAwMTK9sDfwx57kTFx1MDAxMXBDXHUwMDBm2lx1MDAxOVx1MDAxMVx1MDAxODqpSsafpue0LpK9XHUwMDExI9on9Fx1MDAxOHzNXHUwMDA1RuO9042qXHUwMDFjXHUwMDBlyV2mIOVEXHUwMDExQZmSTFx1MDAxM1x1MDAxN/7CqG+7Ko7DXHUwMDAw6lx1MDAxM4pcdTAwMDJ1V8ChVctCXHUwMDExY18noqNPSMU6MVx1MDAxZq4hXHUwMDE54G+s8jL5TYIx2ePH4/zyg1x1MDAxOeFcXP2TfPjhJz1GZ+hcdTAwMDdcYkDvWvBcdTAwMTY+4Fx1MDAxNY2DPFxc4EXQpkRLgzeUK0Wd5Fx1MDAxOVx1MDAwNl65b+PXbVx1MDAwMW9cdTAwMWVcdTAwMDBexVxi7qduJZr2XGatnVrUXHUwMDA24keTXFyybuLEXHUwMDFmf5xcZkZXw165tf3ZRFieXHJOrzOaj2bUlVx1MDAxY+d4Pb9cdTAwMTJb6TGUO32aOLhcdTAwMWVPqnzzxsl6XHUwMDEyf33jZG14P5JcdTAwMWV+XHUwMDA2XHUwMDE5PPjm3Vx1MDAxMzeWw/TwNVAlnepcYu1t9owqpZmIXHJxKaSp14M69ahZ23Sc1OAoXGaalFwiXHUwMDAzcIV/KedcdTAwMTSWjZTRVFx0jCAwgpdcdTAwMWPkaopzXHUwMDE2zYHhSlNiNHVJJ+wkfdeZ8Vx1MDAxYn9KwpBM2UOpXVxybKsx3ryBzVx1MDAxMMmkii3QjUSH4X6n/Obv8ndJMZ5aM3ncY6pxLzNSZGeB6lx1MDAxMNhxxHZcdTAwMDJShKPUxnCjSOOwRc1YKlx1MDAxMZ9cdTAwMTQ9XHUwMDA1SrirJqhVSlx1MDAxMabSbl1cXEGEvEuuXHUwMDA3+pYm/V9cdTAwMTBQT/2BKqkkuJW68y7tk5cgrFxct+BcdTAwMTC5J19cdTAwMTAuZDdcdTAwMTnD76ykX1HdSPZNXHUwMDFm4Vx1MDAwZr+6qYV/ZGvm3+31XHUwMDE4wmHLj1xibcf8wiq0OSe281RcdTAwMGKbnmZiOYdTV2Gah4Gcp0jKlq61JiB3zaqBWC78sTyjT3AraIFobVx1MDAxYlx1MDAwN42+JVxiXHUwMDFhPVx1MDAxMETSVd30vGch01xcezNcdTAwMWZjhGRcdTAwMDU3LVxuqndW/uP6sZlcYsijXHUwMDA0zdheLC/GPZdBifS5XCKi3zHc6WrNS1x1MDAwNUdcdTAwMWLDbVx1MDAxYVx0QDcqKLgppFx1MDAwMighYPCfVDnUiYVIpUDPUDOlXHUwMDE4uPtnXHUwMDAzdoLtkib+S0hGiCgr8Sicyv5rXHUwMDFhXGZcdTAwMDC3ddxGYu9cdTAwMDRkRu1ddoLnk+TMpkes4i6iYzwsKlxc+DRcdTAwMTlcdTAwMTbTwVx1MDAwND9GPkTHNzkvJ0OLXHUwMDE0lp2lyUxwZJBVg9Pc8md+llhZg+s0y7vJRTmTXHUwMDE2Smz5f9qiUCyXrt7XXHUwMDExWP9vXHUwMDFmPeJ+Mq2y0itWQOJJicJ4nlx1MDAxMUtcdTAwMTeNI0I0NXbqjMxO1FLgUkTUKYZcdTAwMWGgWs7o2Wkhtm8o3/tvKFxmv15NuHNcdTAwMWVt5eJcIkiwhzgyXHUwMDExO57nwKTmnbaTn//9XHUwMDBmJ+Jrmc97RPzS6uKMwXz7h69cdTAwMGXJXHUwMDBi8/Sbb/cvv8yefjlcdTAwMWV+c3DoXHUwMDA1UEJEyjjVoO2wK9OLOYhcdTAwMWLSl5pcdTAwMTjOqNFoJY5ontq8XHUwMDFkpdooXHUwMDAzksQ4kiAnXGZcdTAwMThsXHUwMDBiTEf+MNU2OcoocVx1MDAwZTKT9lx1MDAxNiabV6VLRbpIeWIr8tJcdKhcdTAwMWYlrzP8KqanyWen+I+sLNxM3Vx1MDAwYrd+3WLDuVx1MDAxNf87+2r3svPz11x1MDAxNX6xezclg723RX75maNcXHIy+7P33vUuYFxyPp9VXHUwMDFhfnrvp/9cdTAwMDNdTHB8In0= Rust Threads — True Parallelism Rust has NO GIL -> threads run in true parallel on multiple CPU cores simultaneously Ownership system prevents data races at compile time — if it compiles, it's thread-safe ★ ★ THE CODE use std::thread; use std::time::Duration; let handle = thread::spawn(|| { for i in 1..5 { println!( "thread: count {}" , i); thread::sleep(Duration::from_millis( 1 )); } }); for i in 1..5 { println!( "main: count {}" , i); thread::sleep(...); } handle.join().unwrap(); // wait for spawned thread to finish EXECUTION TIMELINE main main: count 1 main: count 2 main: count 3 main: count 4 ← interleaved — output order not predictable by design thread thread: count 1 thread: count 2 thread: count 3 thread: count 4 time 0ms 1ms 2ms 3ms 4ms NO DATA RACES Ownership rules mean only ONE thread can -> own data at a time; sharing requires explicit Arc<T> If you try to share data unsafely → compiler refuses. Data races are impossible to write. PYTHON vs RUST Python GIL prevents true parallelism for CPU-bound code; only one thread runs at a time Rust has no GIL → all threads run truly simultaneously on separate CPU cores SHARED STATE Use Arc<Mutex<T>> to safely share mutable data across threads Arc = shared ownership, Mutex = lock let counter = Arc::new(Mutex::new(0)); // clone the Arc for each thread, lock before write Key insight: "If it compiles, it's thread-safe" the compiler enforces safety at compile time, not at runtime No more race conditions discovered in prod at 3am. Rust catches them all before your code ships. ★ - Sandesh Bhandari
Figure: Rust threads run in true parallel. Ownership prevents data races at compile time.
let handle = thread :: spawn ( || {
println! ( "thread: count {}" , i);
thread :: sleep ( Duration :: from_millis ( 1 ));
println! ( "main: count {}" , i);
thread :: sleep ( Duration :: from_millis ( 1 ));
In Python, the Global Interpreter Lock prevents multiple threads from running Python code in parallel on CPU-intensive tasks. Rust has no such restriction. The ownership system guarantees that two threads cannot accidentally modify the same data at the same time.
Async is about waiting efficiently, not running in parallel. Threads run things simultaneously on different CPU cores. Async runs tasks on the same thread but switches between them while they wait for I/O.
use tokio :: time :: {sleep, Duration };
// Both tasks start at the same time
let t1 = tokio :: spawn ( async {
sleep ( Duration :: from_millis ( 100 )) .await ;
println! ( "Task 1 done" ); // prints second
let t2 = tokio :: spawn ( async {
sleep ( Duration :: from_millis ( 50 )) .await ;
println! ( "Task 2 done" ); // prints first
Rust needs a runtime to execute async code. The most widely used one is Tokio. Async is the standard approach for high-performance network services in Rust: web servers, database drivers, message queue consumers, and gRPC services all use it because most of their time is spent waiting on I/O rather than doing CPU work.
Coming from Python, these were the concepts that required the most adjustment.
eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1d3XJcdTAwMWLHlb73U0zJXHUwMDE3m63I4+5zuk93p5JUyVx1MDAxMi0xlimZlO0oW3sxXHUwMDA0hiRWIMBcdTAwMDVAyUzKVbnZN8jFPl+eZE9DXHUwMDE2MVx1MDAwMHrAaUwrXHUwMDFhL4dly1x1MDAxNv54MPN9ff7P+dtnWfZgcXNVPvhd9qD8aVCMR8NZ8e7BQ//423I2XHUwMDFmTSf8XHUwMDE0LP8+n17PXHUwMDA2y1deLFx1MDAxNlfz33355epcdTAwMWT5YHr5/l3luLwsJ4s5v+4/+O9Z9rfln/zMaOjfe3q+fN3ykVx1MDAwZr95Vlx1MDAwZVx1MDAxNsXkfFxcrp76iVx1MDAxZlx1MDAxN7lcdTAwMDIn+Vx1MDAxZqOctUZcdTAwMDDePn3DT38hcpKAXHUwMDAyQWhrXGZKQbfPv1x1MDAxYlxyXHUwMDE3XHUwMDE3/Fx1MDAxYVx0QuRSgVx1MDAxNSQlWins7UsuytH5xYJfY53NldRCkJKO+Of2Je9lYkFuXHUwMDFmmS9m0zfl4+l4OvOCfy5cdTAwMDZWO7dcdTAwMTL7tFx1MDAxOLw5n02vJ8PVa2RcdTAwMDFcdTAwMTbE6jVno/H4ZHGz/GS+qHxcdTAwMDFcdTAwMWZsfP6Pv0hcdTAwMGZcdTAwMWKP172Lf+H5xaScz9dknV5cdTAwMTWD0cJfKSlWj3rprlx1MDAwZYfL+/OfK5lmxWV56G/Q5Ho8vn14NFx1MDAxOZb+TjwoxNpvm1xmf/ltXHUwMDFmbu7qZuIvj/y8kr0s/Vx1MDAwN1uNjoxWK1FWXHUwMDAwU1x1MDAxMjZcdTAwMWY9mk6WYJNKgCBccuBWUs2fMMpcdTAwMTbLTz0rxvNydfm9aFx1MDAwN1x1MDAxNVx1MDAwNK6+4fXVsHj/XHUwMDE2aVhcbtSWP1x1MDAxM+Tt8+PR5M3m11x1MDAxZk9cdTAwMDdvVr/ls8rX2lx1MDAwNPV0NixnjYEtxVx1MDAxYZArf73FrbRcIoBUYyOwqZ48cY/ETmwuZsVkflXM+HL9q/BcdFx1MDAxZlx1MDAwN5/QXHUwMDFhnyAlXHUwMDEwSIJcdTAwMTBA6+FpXHUwMDEwnURcdTAwMDCbXHUwMDE0ntI56azUaeC5XHUwMDE4LapcdTAwMTD8gM5F+dNiXHUwMDFkmOBEblxyIflcdTAwMDNTWJTrOHW5scJJhVx1MDAxMlx1MDAwNVx1MDAxZsvabOGWOZ5cdTAwMDPwWWxcdDS/RG2DXHUwMDE4MTc6XHUwMDAyxqU9XHUwMDEzZedgLD9cdTAwMGWMMVxm47VXfzhPXHUwMDA1n1+klFxuwFVTLV4tWkd8d2RSvFwi33hrK1xu+m68ruDoYchf/uXN4mI6ybK38yw7vp4vsuyff/9Hln1T3mRPRmdnJd/eQTmv3ODpZHEy+qv/VmDWXHUwMDFl/bq4XHUwMDFjjf1cdTAwMWTRa7/k0Xh07q/Og3F5Vlx1MDAwMVxuX6HFiFxymdunXHUwMDE306vVs1x1MDAwM/68YjQpZ9u3bTpcdTAwMWKdjybF+NWeX6C4XkyPy/n7r7B+Tfjylc8+MEbmoHex+3rcWPOAXZ1Ty1x1MDAwYrTC/lx1MDAwN1xuM3FcdTAwMDOkbU7YIFx1MDAxOUN20aZ++lXaRSqCsMpoNLpyXHUwMDA3muhcdTAwMTdhXHUwMDA1W7ai0/rlYjZ919z4WUcghYxcdTAwMWZcbumNXGK7vDFcdTAwMDbFXHUwMDEwXG45+JVjUDfHoHSA7Os4XHUwMDE1XHUwMDA1QnDOoVx1MDAwMaG6jMGBbGThwDr67Db6kHIgdKzUjGKvU8A2XHUwMDE2wVx1MDAxZsm/elP8I9kw1Fx1MDAxY46OzzY2XHUwMDFizJa54iWptWFI8dvAXHUwMDE5TFxuR9SKtWPldN7DhHn84ujxwctXQVx1MDAxYkV2wkbZkjCRXHUwMDExcjGARvSreFx1MDAwNDX8I83+gVBcZlx1MDAwYitDpkjPvVx1MDAxZNwzXHUwMDExqsCgNlxiJk5cdTAwMTVIPrOVQVVR259IXHUwMDE3bPtcdTAwMGavXz17cdRh7m1cbrhGvcXsel/mYVx1MDAxM+bpjaBTjeZj6lx0/ldcboegevbFsc9GsE9Z4TRjPsS+etUnJUjDXHUwMDFjXHUwMDE0K0An0n2aXHUwMDE0ttJ9x9+fdFnxrYuXTOupJtyzXHUwMDE1XHUwMDAzp4Z7IEzOhHNKIVojqadeXHUwMDFj9VxcXHUwMDA09bQzXHUwMDA22bhcYkXOdlDPWm3J6dTMQ8cuhqrCL5Z531x1MDAxY7zOXHUwMDBlj05cdTAwMGWfPusyXHUwMDAxg1Km4uFw9HbfXHUwMDAwhFx1MDAwYmRccsNcdTAwMDGI5tzraFxm7CPlXlx1MDAxZUVwz1wisdHpbFSShb0yY5WoJFx0u1x1MDAxN394O1xmxFx1MDAxZuqisGJDXHUwMDFmbEdhcVx1MDAxYn+2kplKh0Ao2dn6tSPwq+ZcYmRFq4GcXHUwMDEzIVx1MDAwNGJcdTAwMWRcdTAwMDLZ7tJcdTAwMWGlosRZaCTFZ02M3bVcdTAwMTOCXHUwMDAxXHUwMDFmvFx1MDAwNoJaQFx1MDAwZsGUXHUwMDEwfFx1MDAxY3FcYlx1MDAxMp+CjKVg6q5cdTAwMWWCqIRcdTAwMDGHKrFcdTAwMDGSXHUwMDE4glx1MDAwMWe0XHUwMDA2gpbsXVx1MDAxMFxmhF4/XHUwMDEyXHUwMDA0XHUwMDE1lvhrh+CT5lx1MDAxMPQ1XHUwMDBiQtN22c0uNWxcdTAwMWO/jVB98tDPXHUwMDBlXHUwMDAwzuRpMTxcdTAwMGZcdTAwMTQ71KriNVxmVlx1MDAxZOtbazBUilx1MDAwM4krcT5cdTAwMTdDXHUwMDE0+1WJye4g8KB1XHUwMDE1js9NaclcbjpcbplcdTAwMTKsc8pp221oNkxRudxcdTAwMDKyW0jWXG5LWuh1iErchijpXFyAXHUwMDA0VitGabZSXHUwMDAy7ou0cXU3Zlja4r6EXHUwMDBmvm5+dFx1MDAxYWI1bDSFlLd1dVxiRSml1U6kLrshXHUwMDA1plx1MDAxMovfI3rww6Pjw0dfPT84XHTHXHUwMDBl9Nqjnyh2XHUwMDEwkDFR5IBJuVfiKsRCkCZcdTAwMDe+IYh8hFlWlFx0MsdDO1x1MDAxOJ7ae8LCp1x1MDAxMTY0aINK1eiJXYrCLFx1MDAwM3mpq4mVMo5axc+/vV5cdTAwMTSn4zI7vcmG5VlxPV6EXHTZiWDeLmHTMVx1MDAxM4t9MlshXHUwMDFizofXpVx1MDAwNo1Evl1A24CC7Km5g5rPXCKoKVx1MDAwNeskpkWwqkNvPriipjDaqIqNkoiZXHUwMDAyqjXdezDz8PJyXHUwMDBi7lx1MDAwZjtMzjvkTcjP0734XHSB1LOhnC1/icYwTSXKXnXG8fMwJlx1MDAwMlxuWlx1MDAxMtVEQGvzXyAkv83p9Kln4Sy6Klx1MDAwNmNcdDq9WmSjyWKaZVxm/Fx1MDAwZVx1MDAxM7NGzoSEXHUwMDFjNCEk3/vcoNHsZ1x1MDAxYo2iktF8T0/KnVD8rFx1MDAxNuxIhrJjJldKKGWN9n53JWXa56qbcPVPMWYuWL7GXHUwMDEwNHPlXHUwMDBlZWpcdTAwMDFcdTAwMWRaxOR2LlvP2KpM64s/Zl3n6baIySg6msy3KVpcdTAwMTcgN1x1MDAxYj5nJVx1MDAxMnRr2NpcdTAwMDD7cPW+u6k3sMVa4DHcwipcdTAwMGJR7EO7XHUwMDBlXHUwMDA1J79pXHUwMDFknPStcYZ0UHHWupxkWdNcdTAwMWFru1xcPM+qo1khk13PXHUwMDFhykpU5Fx1MDAxNpFcdTAwMWFzUFY7iSSAT1x1MDAwYrNcctDYWGRpXHUwMDA3Vt1cdTAwMTf18DzClLOOlNPBXHUwMDEyXtxcblDeWnKoLCqDqevn0SoyrSqZJtOsXHUwMDE4XGZGQ/5lxdifwMXCf5mgpuhEYPIugVPpjYjiko3yJqlcdTAwMDPeVrC+aUWBhHnV4v9BXvXbmNpCrYzFartesyY/56zTXHUwMDE1S7qDOlx1MDAwMopqlC9cdTAwMTKFjdv8zMdo85OlvyX/Klx1MDAxOIba/Cq19Hui8Kg5XG7JoPBDT0IpqnpcdTAwMTBqZKdPWOw2XGLbpfdNXHUwMDAwhn16vylcdTAwMDRftLagQViD2lx1MDAxMcWdj1I5h0pUvOAuQrNZelx1MDAxZjchXHUwMDE5iLBonaOS6Fx1MDAwNEhLJHSfzo9cdTAwMDPqy5hshUZ2WfR24b+/V/WQJGctSevSJ/Q1USsj+tXrl1x1MDAwN9nJ65NXXHUwMDA333bYclx1MDAwZUqZylxchj2T+lx1MDAwMS6CXHUwMDExuULjjG9VXHUwMDA2gj4xXHUwMDExR8XvYupil+WtXHUwMDE4bFx1MDAwZcCtXHUwMDA3P1BRXHRCYyk5XHUwMDEzldLViNtcdTAwMWVMfHIzYXJccrLfXGYuSv/CrFhks+vJYnRZ/nuHw5/NxE7H1Yb9qyZcdTAwMTfg01x1MDAxMlYhXGKzMZrKQK6sIWfAStK4XZyD/H6jlDP8UrbEQoNcdTAwMDB7XHUwMDFl7+DxcUSFnFx1MDAxZv6lKehcdTAwMDO7+vp2Yu5LJJk6LGXAWWOq4Izl8YlcdTAwMGbrrPNhML28XHUwMDFhjcus61xcbi56Mj63SnGEWmP7XHUwMDE0x1x1MDAwN5nuXCLpSZikMSlcdTAwMGVfXHUwMDE4YEVk6MBcdKYtfPqZXHUwMDEwu/XMfilcdTAwMGVcdTAwMTOoJjMyXHUwMDE3TmnrXHUwMDA30UjjtuHZJzh2oPRVc1VCfmKasdtVKf5cdTAwMWLVJjh8hzex72xSZ7+RzUzbSpWcXp/Ps0HB13ixeVx1MDAxNnfYWWskdbJcXEfzLsaNKDNg017uPtdRw83vI5KPXHUwMDA2wPmR2TGqwpeQIYpOj5KbYasgM4Rqpvogc1NcdTAwMDT+0NqGkcjGiHBcdTAwMTgsQN7RXHUwMDFhQEKDY1x1MDAwZrLT0NwryFxmgTmvXHUwMDEyRY5eQu2sUyBVXHUwMDFmZI5cdTAwMDPqj82PSi1IXHUwMDBiacPttltu8irtoVx1MDAxNVvWyqSuuOWPrE7g2KdZ5eDbXHUwMDE3x687bLFsXG6YyjjB/Vwiy0FcdTAwMDI6lbNJSWBcdTAwMTVcYlx0KWZcdTAwMWTeq4jUnyNMXHUwMDE1ZVxilTZB/pnNXHUwMDA3K26tZpNcdTAwMWZVajeCjNKiVcX702J2WpyXbImPx2yUlMMwXHUwMDE1O1x1MDAxMYLaIWs6Vu41XHUwMDAzMcRKXHUwMDA0yFx1MDAwMVx1MDAxNVx1MDAxOFx1MDAwYoJcclVcZjj3PSt3sPJ1c1YyXHKUXHUwMDEyXHUwMDEwXHUwMDFjg1wi6+PEfjWFsqJSUZMqTiycjFlcYrPFylx1MDAxN++YXHUwMDEw84vRVfbb7HQ6m03fjSbnXHUwMDBms8k0e/q4w1x1MDAwNG0mdjKutolcdTAwMGZXwdLHh6PJ+ZfWvtVyqUt46UitZ+V8+tw67LhjtVd4XHUwMDE4dGBcdTAwMGWAMLlcdTAwMDYlXHUwMDExJTlGZ1x1MDAwMsfqXsWHi+YqxFx1MDAxYe3HpOiQYSdr48NERjMkIbVcdTAwMDZRJHW78PDyzM2uiut5OV+ewOOyeFx1MDAxM95501xyP+sugZNcdTAwMDWFm89cdTAwMTXbXGJcbmOgR6VcdTAwMGZcbkdcdTAwMTHytDkhpXZAXHUwMDE2wjU89ZPFjFx1MDAxNJJkt+vfVYv6d5RNM1x1MDAxM339e1xyXGJcdTAwMDfNQag0aVwiXHUwMDFkh0Fp/d46rV23QdgqNYHQpyZaQHDY2nxm29lKdmpElFx1MDAwMU3CXHUwMDE4Q9WRY11EZuPpduxpe/ddklbaru/0RcTcV/Cxi+839lZbzW/xqlxc7nyRnzHVuel9zqJcdILL5oeoL0Mna4JcdTAwMGIqdO3gXHUwMDAx54R2ViffzURamso8tT1M66Pvnz/Pfnj0/PtOT7pcdTAwMGJKmcqIVlx1MDAwM2g0UWsze4G4XHUwMDFkJ1Uyl9Yqfyz1W5pcIll4XHUwMDE2YU9cdTAwMGKtjVx1MDAwZU+brFx1MDAwZrg4yee6/fT1eNsknE5q6pw6XHUwMDExXHRdXHUwMDE3L81+Js+6RnOygNZDSyHWgdS5b4Yz6Id2o8DAkPY+PbGDeudcdTAwMTFJQ+3Qz/xcdTAwMGZ6XHUwMDExOybvXGLjs7qYOrhEhqxrRb6H2aCYZMXVVVnMsmJy8+6inHWZjXfIm04r7jdnMsRPqSBHa/mwNGBcZojQ8JNeNe7g50VMqEkjIIVcdTAwMTdcdTAwMTjW51x1MDAwZpVxQvmURGJ+XHUwMDFhSVx1MDAwNlpNgH1x5YeH/P7VXHUwMDFmO8zJgIxcdHnYSE+SXFzfnlx1MDAxM+ShtbnWIMhYMICmnydcdTAwMTnJw1FcdTAwMDRcdTAwMGalU4r99WDPyI5cdTAwMTF1XHUwMDFh/Yhcbkw+hshIpamVq/gwu7yeL7LTMrsoJsNxp6trdsiajJhtMvZcYn3GPtufh//VOuTIzrw0uNad1ailiznEXHUwMDA2Z7c3aqj9kvZcdTAwMTjoXHUwMDBmXHUwMDA2VDmSVWxjO/7aWlx1MDAwNSDaZ+13IPVNVJJQ83VcdTAwMTbhqab1sUUySFqp1FxuXHUwMDAzwFxiaFWO6V+bXHJmxfyinGd/yEaXV9P5fHQ67nJPV1x1MDAwM5mTJe9cdTAwMDMsbZg3dVx1MDAwMduuT97H8HLcnJdOWk2quq24Ud+MZDvbyW73zehWeVMlQi5GnzdtXGLBy9ZGXGYrXHUwMDBiUK4mXHUwMDE2V4tMo/x01Oq83i5cInOvji4lXHUwMDAyYz2VylxyslYlofnHhlx1MDAwNu+avM+N1qB0XHUwMDEyYcCgXHUwMDAx51x1MDAxY4pg6Km+ocshSCtcdTAwMWSkz476XHUwMDA2lzZcdTAwMTbMwfHxi+Ps2aOjJ89cdTAwMGaPnobNXHUwMDE2tfboJzJb6lx1MDAwNE1lq+g9c6QhQlqXK9K+kUT23V2RbJxGlHvxkaeljVxcXHUwMDE56fyERahcdTAwMWE7XUmSXHUwMDFl/DQol2HWefabXHUwMDBlR57CYiZKmuqGSVPUXHL0XCLqXHUwMDFj/VBm6YQyujI6rM/JNKHiVXMqgiPht1x1MDAxZITsNFm7XHUwMDFjU1rlK7qcSN5oadk7aaVcdTAwMTdcdTAwMTezmy/LJdA7zMSQkFx09WGjpUKK1rMyIVwi6lxcgrNcdTAwMTZsr1x1MDAwZWM5+N8xJUNKOSUhPDSpjoNO+X3g1EF12OXxenXz89oovv2qXHUwMDExgopcdTAwMGZM7k1Po1x1MDAxZLvBhDrB0Mt7pflmXHUwMDExmo9AXHUwMDE5a7YnRntJapfqSSOlRKLUXHUwMDEzPoxcdTAwMTTVXHUwMDFkinuwjqF8PV78/tXDgy6XI1x1MDAwNKVMp/pcdTAwMWFcdTAwMTYkwN2qXHUwMDBmXGJzzapP+NVIqGxfj1x1MDAxMMfEeVx1MDAwNFx1MDAxM1lcdTAwMDFa9uwgXHUwMDE4LKylopV+npnTqev2tLHV271XOVx1MDAwMt/CRTY9y+ZMl2Jx3fGqvVx1MDAxZNImo2abklx1MDAwNFWBY1+SXHUwMDEwTcVFmIpcdTAwMTHRfEJr2E2Mm1wiIJU17F12fJGe3q9cIkFVXFzfW0gql3uvWJNcdTAwMDLS1YFBfUFCXHUwMDEznF5HuExKKm2wxmXaXHUwMDAxSTRoybjkK5GX9GijM8rZbDrzM1sn/7YsXHUwMDBl46N4OqsrZOtEPcKdXHUwMDEyJ6tG0PtWI6jQ+qi+XHUwMDFhIYaUb2NIaVx1MDAxNLFcdTAwMWJcdTAwMTOs766PYzB/nOlAWH9cdTAwMTdcdTAwMDSpxShcdTAwMDFlmpbEuH6UQFx1MDAxOITvmoPQ996JyI2/0oFghd3xulx1MDAwM2pXXHUwMDExXHUwMDEzKszqK2KaXCLwp1x1MDAwNFx1MDAxNTFIJCOnb7Oloq2rXHUwMDFh3l1cdTAwMDTmflx1MDAwNTEutOfW5eTQWnLg51x1MDAxY4tA5q9cdTAwMWZcdTAwMTewXHUwMDAzpjdcdTAwMTFcdTAwMDclXGIpUVx1MDAwN8dcdTAwMDXI2lx1MDAxMat+hYaV1Vx1MDAxZOGpXG5irKpcdTAwMDBkny16z45cdTAwMGZcdTAwMWU96fKogC1cdFNcdTAwMTnI1HTGscuBrNJK8EX3I4w3XHSZa8tPStLstdP2JFx1MDAwZlx1MDAxZlx1MDAxM7VK+cFPhlx1MDAxZHvqV3LFsfOvMbY0XHUwMDAy+6nhmKitt2SYmvwm/Vx1MDAxMVx1MDAxMvNcdTAwMDSmVcn989HliD8yO73Jnlx1MDAxZT7Pzqaz7PHL77N309mbMGc7XHUwMDExXHUwMDFjbSR1Olx1MDAxZe+ZSrSBli0jc1x1MDAxNE5cdTAwMGKp/ET64LaAnqz1ZD1cdTAwMTVcIoatvplYUbhcdTAwMTBfbj54q0yFXHUwMDE0qNElz2BYrI7m20eZzq5Ln1x1MDAxNijG43L8MJt+XHUwMDE4ONxhpt4tckKaNkozbtJUi+1hbihMLlx1MDAxZLIpZo1GhH48SCRLZXOWKvaBa7fM1G6rlSA8sWXyXHRZ2lxusq1q3cpcdOujQTnPXHUwMDE2XHUwMDE3s7JcdTAwMThm8+KsXFzcdJijd1x0nIyhrbKNdjtSXHUwMDEyzDbqPttcdTAwMThiJIRcdTAwMTlcdTAwMTmTblSgwFG4XHUwMDFloJanzi9cdTAwMTNWqlx1MDAxMr/qZKxENTLxtvKNlW3Zq/BcdTAwMWTkKLVcdTAwMTHsJ1x1MDAxMLIpsVxy0T7fuFx1MDAwYqlcdTAwMThh4Vx0TWxOu3Bgub5QWrI7xq5yat2hzFq5zFx1MDAxZbqDP7DIZoU/jP/Q4ZhJWMx0lpxqZMk5K3Ik5diZksKZjeoxJ3NhjHOK2O9WcjtuXCKty1x1MDAwNYLVkpRC/k97on79tXGP6b5cdTAwMTBVRVx1MDAxMFX5hkqrgpVcdTAwMDFUX9eJXHUwMDEyiKg6ViBcclMtSWFbXHUwMDA1Tj4sb13m2ztM1Vx1MDAxYTmTVVx1MDAwMVBji24jXHUwMDAxq1x1MDAwMzvK+yqAOFx1MDAwNurmXGYkXHUwMDBifl1h3EZyQ1x1MDAwMFx1MDAxNsWnn4C6XHUwMDBigqZVXHUwMDA2VptcdTAwMDBcZvtcZmxjXGJSXHUwMDE4gjHD3LWv969ZYLYrpi5cZnXdsTB7JWF1IHIsXHUwMDA15Fx1MDAxNlEvV126Plx0XHUwMDFij1RcdTAwMTNjrlx1MDAxMHu77CZcdTAwMDTbUOpcdTAwMDdcdTAwMTNcdTAwMDBcdLJ+4n5ic4WI/6dV8fujk9dHNcvzOmGmbMiXyjwx++2ZXHJcdTAwMTFcdTAwMTC0y1x1MDAxZFnSQFo67DdaxvLPNudcdTAwMWbwXHLQXHUwMDA2g1U525xcXHlcdTAwMGJowUhIPzPagVCt/PpifjNcdTAwMTmMpln2m/mI+VXMssvpsFx1MDAxY3e5J/NukdORdL9cdTAwMDRrUE2CyX0pXHUwMDA1+P5oq5NMdr9PvZqnwkWoSWBcdTAwMDOM70p4ZG39Qmhj+YesTD47WoAzrWZHL0H/ZfGuXHUwMDE4dXlQQVDKhGxs1q7ZxGh1lFx1MDAwYqudJmG9zqx0XHUwMDA19kqzXHUwMDExXHUwMDFiXHUwMDFmNWejRitcdTAwMTBqhmnt2NfmrNFW2vRkXHUwMDE0ul3v9LvR4lwiezV9w0podj1ZjC673K+5S9hk1GyTQNVmu86hb9dszsSv2lx1MDAwNzosXHUwMDFhY1x1MDAxNcRtrVOCtZpcdTAwMTLU8TjHXv2a2lx1MDAwNspZnc7Fcp6wb0Bcbtlvffp0XHUwMDE3Tlx1MDAxZsfYb8b5UVPBvc96K6e6mnFDXHUwMDAwKvmwXHJlJVKrnMxiefz+IbuaTYfXXHUwMDAzP1Mtm/PROCxmXe7YbCR1snyNaaxANvI1pFx1MDAwMvZdn6+J4uaTiFx1MDAxMIhcdTAwMTBGgVx072Svt+aInNKsMDo9Rdq26Nsk1a+Ablx1MDAwYsODXGJcdTAwMTXBXHUwMDFhgthfj5uCtpzHpNFht2HYKnFIul9cdTAwMDLdXHUwMDA2hF8nSFx1MDAxY/rB5Fx1MDAxNFx1MDAwZVx1MDAxM9fb08osXHUwMDE3k3TanrZ75VxyqbKvaXU2ilxck5/g6byrLyoj+Pu8YSOgPo04LYVw2ungfP36hSxIoPxcdTAwMWGv9FlDZV2r8SeHR89cdTAwMGWOXHUwMDBmXz06enzQYVx1MDAwMzooZSqD2e6XQVxmUVx1MDAxMdDmXHUwMDAwIFx1MDAxMbWwmozsm79cIqn4rDlcdTAwMTVccnNAW1x1MDAwMcFo6FZcdTAwMDDmtvdcdTAwMGJYs2rUyVx1MDAxYqmdXHUwMDAy0cq3fTwu5vMvTot5OcxGk4tyNmJcdTAwMWJl0OWI6J1cdTAwMTKnoyg2oehm+jBEUfSjXHUwMDBllEU2elx1MDAxNZDfQdxTNI6ih1x1MDAxMdrSofRTPMNcdTAwMWJcdTAwMDd2XHUwMDA0RFx0lZXJ+zOJ7bd22cOjaVx1MDAxNehcdTAwMGaz63mZ8a1cdTAwMWQt5vz4fFFcdTAwMTZd3oBcdTAwMTkjfDLmtklokFx1MDAwZVx1MDAxNOn0XHSNXHUwMDBmMt3J1D+1d8DIeZ8nuKZg1/BcdTAwMWMjtFx1MDAxM1x1MDAxZPe/9spnXHUwMDEwXHUwMDA1NmJqnVx1MDAwYqWtXHUwMDAzXHKKrOo3YsZcdTAwMDL1m6hwXHUwMDE1oqxcdTAwMTlajLVcdTAwMTlcciNcZlx1MDAxYueCUntgyupqlcuebSbT+WiZXHUwMDE1mLLUd9t+nXDJmomdLKlhXHUwMDFiK5GNaLKBUMSkT2rE0PN5TFLDKkNsaEXNopToyFx1MDAxOHCyy8MoJ9NFeXq+bzDZVM6mXG5cdTAwMGVcdTAwMDPRZKlcItJcdTAwMWGfQ6nFXHUwMDFkiuJzUchSwq9cdTAwMWSF37a2ZvyISmXDqqM2YCBR+6ZcZutSq1x1MDAwZa2Vhpjg3S5sjovTctzEoEGdO7/jSzs/XHRDa9pAKeVcdTAwMTLBXHUwMDBmeVx1MDAxNppcdLlt7EjQOVx1MDAxOVx1MDAxMMh/XHUwMDE4gVYlKN+4X+W3RzHGjveCjd7ei+LvZG33uzJcdTAwMTb4rZS84M8qKUxcdTAwMDRit4ydb1x1MDAwZV5nh0cnh0+fveqwbVx1MDAxM5QykSnznqnXXHUwMDAxrtbpkVxyeyaUlMRQUvIjmDObRP3X58ZTXHUwMDEw8EVcdTAwMDRcdTAwMDE1SU+lyM5FXCK2ME31VnXQnGmUf9xEXHUwMDFmbUdkXGJMbpz0jZpGXG5WLlx1MDAwMSyK5mC8Z9HUlzG2tVx1MDAxNmhAXHUwMDA267+xXHUwMDBljCR9mjB1x1x1MDAxNKmlXHUwMDAx0UZcdTAwMTe8vFlcXLDzOJpnZ+Pyp9HpuMx+yy+dL7LFNHvHrmSZ/fPv/8jOZ2WxWFx1MDAwZYCcXHUwMDBmZqOrxfxhtlx1MDAxY04yXHUwMDFmjMplXHUwMDE482o2XUw9gudhlUJrj35cIpXyMb9smoV6k4brnDdcdTAwMGWEwHhzdv9yXHUwMDBifFSw3VwiwFag11x1MDAxZlxid1x1MDAxZlxi30VcdTAwMWNcYlaTpnBbff1cdTAwMTJZi857XHUwMDFmlDq7YoxcdTAwMDLdKrtyfM18YIr48XRcdTAwMTV6zK4nm+S4mS/KSybH4+eH/IrpmP/3x/L00XxeXp6OaybxdeJcdTAwMWNI/1x1MDAxNVPZpc06NJXKlfPzXHUwMDEz/fJi66Pda8dcdTAwMDG7K7lcdTAwMDZribRb2yi8qp+zOYJcdTAwMDEl+b1sNdhQIK4/XHUwMDFj6lx1MDAwZYfjXHUwMDE4a4H8ZFNHQdO1PvnqSFwiXG7rko/dXHUwMDA0XHUwMDBilVx0XFx7XHUwMDFjXHUwMDBmJ3x1soFcdTAwMTfzavGww1x1MDAxY6+RM1x1MDAxOVFcdTAwMWI1b0rSOVx1MDAxOEsgtZRcboxYz2NZaXNfwIt+bVx1MDAxYbjQ6E0gfoVcdTAwMDNErVx1MDAxY/pp1i2Zer9SWifNmcpcdTAwMTdZKVx1MDAwMSZYVOjqXHUwMDA35Eo+iFx1MDAxNbuEqUuZNFx1MDAxZu6iXHUwMDE1U1nSm2w4Ojsr/a3Mri5G4+l8enVx87tcdTAwMGXTtonQyTjcbFW8wNyw1+eAz86N3ble01xutrlcdTAwMTClXHUwMDA1NrxcdTAwMDJrXHUwMDEx+Vx1MDAwNFBcYpJcdTAwMTWx0NZRKC3dq9paXHUwMDAyv4ogMPjAjKJgJ4/E+tRcdTAwMDJor6UlJlx1MDAwZtRcdTAwMWEjK1x1MDAxYX5/55y9yflint1Mr7uscHdcdJuMscMmjNUkc1LgfCDMXHUwMDFhtTqZP1BW8lx1MDAwZljHnMTQXHUwMDA0XCJ0OVpknYtKXHUwMDE4bYN76GMoe7/q+L9vTllfl8iWXHUwMDExXHUwMDA0XWdbW8ivNFx1MDAxMVL1tE1cdTAwMTRNU8rpVjPpl47l4KJcdTAwMWO8WTIgXHUwMDFiT8dcdTAwMWRm7E5pU1F2vihmTUgrJdqcLCCAXyBMldrf9zlRk5NGp7RzylXbXHUwMDAwVk4t+7Qkjd8lXHUwMDExIKzJ+1x0w3WU/SFGy1xuK31mOqRl6yu/2PJcdTAwMDFmdPLNTIo/XHUwMDE4Wy17+ef//k+Qolx1MDAxNc39XHQpuiZdolx1MDAxMLNnZKNmXHUwMDFi77LmbPb6/Df/qStDXCLep6FEbqTk6y9cdTAwMTT/XHUwMDA3Vnp2lVx1MDAxMmVKWlx0bWPP98tp/THGabVCeFMzWNpfO1x1MDAxOVxm2Nc1azmBRGx0UG2kT8jGbijMj8DGi1x1MDAxN8NjKVx1MDAwZlx1MDAwZZ+8XHUwMDFkXFx+h38pbt5+5/7ciJxCLPdcdTAwMTFatIb1JeCGmatULtm+MoakNk5cdTAwMDfImTpcYlxcXG7k33hfWPrn5ixd5nmQcMug9basqC9g0NKgn+qW2sxlM4laXHUwMDE1XHUwMDEwfZGdXHUwMDE0fCXmXHUwMDE32VdcdTAwMTfLXHQqo1x1MDAwZZN2l7DxRi7/uby0XHUwMDBmiqurk1x1MDAwNV/YXHUwMDA3XHUwMDFmilx1MDAxZlx1MDAxZrxcdTAwMWSV775cbtTrnC1/XHUwMDFlfPbLXHUwMDEx4PFeLmsmf/7s5/9cdTAwMDPvUMhcdTAwMDUifQ== Python vs Rust — Key Differences CONCEPT PYTHON RUST KEY INSIGHT VARIABLES Mutable by default Immutable by default, opt into mut -> mut no accidental mutation TYPE SYSTEM Dynamic (checked at runtime) Static (checked at compile time) bugs caught at compile time MEMORY Garbage collected Ownership + borrowing, no GC no GC pauses, no leaks NULL VALUES None , can appear anywhere Option<T> , must be handled null crashes = impossible ERROR HANDLING Exceptions ( try/except ) Result<T,E> , part of signature errors can't be ignored THREADS Limited by GIL for CPU work True parallel, ownership enforces thread safety data races = compile error ASYNC asyncio (similar model) async/await with Tokio runtime tokio = production standard INHERITANCE Class-based inheritance No inheritance, use traits instead composition over inheritance KEY INSIGHT Python is flexible + fast to write — great for scripts, data science, prototypes Rust is safe + fast to run — great for systems, CLI tools, WebAssembly Same concept, very different philosophy: Python trusts you, Rust checks you lol ★ ★ - Sandesh Bhandari
Figure: Key differences between Python and Rust.
The first issue was that Rust’s build folder, called target, got committed to GitHub on the first push. The target folder contains all compiled output and can be hundreds of megabytes. It should never be tracked.
# . gitignore - ignore target / at any depth
# Remove already - committed files :
git rm - r -- cached 01_variables / target
git commit - m "chore: remove tracked build files"
The compiler changed how I think about code. Coming from JavaScript where you find out something is wrong when it throws at runtime in the browser, or Python where it crashes mid-execution, having a compiler stop you before anything runs and then explain itself precisely is a different experience. And yes we have AI now, Copilot predicts half of what we are about to type, but that is different, that is autocomplete. The compiler actually understands what your code means and tells you why it is wrong. The errors are not vague and they tell you what broke, which line, why the rule exists, and sometimes exactly what to change.
The ownership model was the hardest shift and the most lasting one. A value belongs to exactly one thing at a time and moving it transfers that ownership completely, the original is just gone. It can feel like hassle at first, but that constraint is intentional and helpful. Rust makes memory ownership visible in a way nothing else.
If you are starting out the official Rust book is genuinely the best place to begin, it is free, well written, and takes you through everything properly. You can find it at doc.rust-lang.org/book .
Source code: github.com/sandesh-8622/my-rust-progress