skip to content
Sandesh Bhandari

learning rust lang

/ 206 min read

Table of Contents

1. Introduction

I have been trying to learn Rust for a while now, as I always ended up in it. Like: Github projects and repositories that interest me, trying to understand how to build scalable and reliable systems, low level controls for example on inferences runtime or good hardware and GPU integrations. So, I decided it was better to understand it early or at least start rather than wait till much later.

Around the time I was starting to learn rust, my roommate left for Chicago for easter break, before leaving he asked me what I was doing for break, Since we are in DSA class together. I told him I have been learning to build some projects in Rust, and also currently strengthening my concepts and understanding. I talked about memory efficiency, performancy and how the language forces you to thing more carefully as we write, and even said I might like it more than python. He said, ‘bro they are all the same.’ I said, ‘no, she is different ’. Cringey, lol.

Anyway, I kept building projects in Rust over the next few days, applying what I had learned and reinforcing my concepts. I’d already spent time with Python and JavaScript, and just enough C++ to understand that memory management is handled very differently in each language. Python abstracts it entirely and JavaScript gives you flexibility with almost no constraints. C++ on the other hand gives you full manual control with no guardrails, and Rust sits in its own category. We get the performance of C++ without undefined behavior, because the compiler enforces memory safety. It felt bit challenging at first, but over time I came to prefer it as I actually like the fact that everyone in the community tends to follow the same standards for code for Rust, which is a really nice thing.

2. Setup

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+wviJ9tree rust-journey/rust-journey/├── 01_variables/main.rsCargo.toml├── 02_functions/main.rsCargo.toml├── 03_ownership/main.rsCargo.toml├── 04_structs/main.rsCargo.toml├── 05_enums/main.rsCargo.toml├── 06_error_handling/main.rsCargo.toml├── 07_collections/main.rsCargo.toml├── 08_iterators/main.rsCargo.toml├── 09_threads/main.rsCargo.toml└── 10_async/main.rsCargo.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.*

3. Concepts Covered

3.1 Variables and Mutability

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.

3.2 Functions

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/XHUwMDAxj3dBhiJ9Rust Functions — Anatomyfnadd(a:i32,b:i32)->i32{a+b}// no semicolon → implicit returnkeynametyped parametersreturn typebodyIMPLICIT RETURNLast expressionwithout;is returned automatically — noreturnkeyword neededfn square(x: i32) -> i32 { x * x }x * x← no semicolon, this value is the returnSEMICOLON TRAPAdd;→ returns()(unit / void) instead ofi32→ compile error!fn square(x: i32) -> i32 { x * x; }x * x;← semicolon makes this a statement → returns () ✗EARLY RETURNYou can still use explicitreturnto exit early from a functionfn safe_div(a: i32, b: i32) -> i32 { if b == 0 {return0; } a / b }← explicit early returnUNIT RETURNIf no return type is specified → returns()(unit, like void in C)fn greet(name: &str) { println!("Hello, {}!", name); }← implicitly returns ()FUNCTION SIGNATURESfn greet(name: &str)no return value→ returns ()fn add(a: i32, b: i32) -> i32returns an integer→ returns i32fn parse(s: &str) -> Option<i32>may or may not return→ Some(n) or Nonefn save(data: &str) -> Result<(), Error>may fail→ Ok(()) or Err(e)Key insight:Rust signatures are self-documenting — just readingfn foo() -> Option<T>tells youthis can fail gracefully. No surprises. No null pointer exceptions.- Sandesh Bhandari

Figure: Function signatures in Rust include explicit parameter types and return type.

fn greet(name: &str) {
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.

3.3 Ownership and Borrowing

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.

3.4 Structs

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.

struct Person {
name: String,
age: u32,
email: String,
}
let mut person = Person {
name: String::from("Sandesh"),
age: 20,
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.

3.5 Enums

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;
match dir {
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.

3.6 Error Handling

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()) }
else { Ok(a / b) }
}
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.

3.7 Collections

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"]);

3.8 Iterators

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()
.filter(|x| *x % 2 == 0)
.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.

3.9 Threads

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 ParallelismRust hasNO GIL-> threads run intrue parallelon multiple CPU cores simultaneouslyOwnership system preventsdata racesat compile time — if it compiles, it's thread-safe ★THE CODEuse std::thread;use std::time::Duration;lethandle = thread::spawn(|| {fori in1..5{ println!("thread: count {}", i); thread::sleep(Duration::from_millis(1)); } });fori in1..5{ println!("main: count {}", i); thread::sleep(...); }handle.join().unwrap();// wait for spawned thread to finishEXECUTION TIMELINEmainmain: count 1main: count 2main: count 3main: count 4← interleaved — output order not predictable by designthreadthread: count 1thread: count 2thread: count 3thread: count 4time0ms1ms2ms3ms4msNO DATA RACESOwnership rules mean only ONE thread can -> owndata at a time; sharing requires explicitArc<T>If you try to share data unsafely → compiler refuses. Data races are impossible to write.PYTHON vs RUSTPython GIL prevents true parallelism for CPU-bound code; only one thread runs at a timeRust has no GIL →all threads run truly simultaneouslyon separate CPU coresSHARED STATEUseArc<Mutex<T>>to safely share mutable data across threadsArc= shared ownership,Mutex= locklet counter = Arc::new(Mutex::new(0));// clone the Arc for each thread, lock before writeKey insight:"If it compiles, it's thread-safe" the compiler enforces safety at compile time, not at runtimeNo 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.

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(Duration::from_millis(1));
}
handle.join().unwrap();

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.

3.10 Async and Await

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.

eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1d23JcdTAwMWLHtX33V0zohyPXsUe9d9+VcqpkSo6VxJIj2XGSU6nUXHUwMDEwXHUwMDE4ijBBgMZFspJyVV5OPiCVh/N9/pKzXHUwMDFikojBTFx1MDAwZtiNaZrDXHUwMDAwcpmScFx1MDAxMVx1MDAxYTN79V77tvrvXHUwMDFmZNnR4s1lefQgOyp/XHUwMDE4XHUwMDE049FwVrw++tg9/qqczUfTXHQ9hau/z6fL2WD1yrPF4nL+4P799TvywfTi7bvKcXlRTlx1MDAxNnN63f/Q37Ps76uf9Mxo6N578nL1utUj7z95Vlx1MDAwZVx1MDAxNsXk5bhcXD/1XHUwMDAzPVx1MDAwZblBXHUwMDEwWjBruFx1MDAwNWGZuXr6zeppJsFwIdAyYELKq2dfj4aLM/dcbmSYM5DIpdFcZoCLq5eclaOXZ1x1MDAwYnqNsSZcdTAwMDchtWTGcs0qL3m7olx1MDAwN1x1MDAxObt6ZL6YTc/L4+l4OnPLXsyKyfyymNHXXS/8pFx1MDAxOJy/nE2Xk+HV6z6EXHUwMDAyXHKy9WtOR+Pxi8Wb1b9Ol5Uu4VHtM75991xysPZ427voXHUwMDAzX55Nyvl8Y73Ty2IwWqyuXHUwMDE1Wz/qVnf5ZLi6Q39Zr2lWXFyUT9wtmizH46uHR5Nh6e7FUcE2Pm0yfPdp72/v+nbyd4/8uF57WVx1MDAwZVe3Q9P95Frpq2cqNoZQf/TpdLKyN26AKyXWd380f0Rmtlj9o6fFeF6ur75b2eOKXHSuv+Dycli8fVx1MDAwYmgtXHUwMDA1VyhRVYxmPJqc17/9eDo4X3/KXHUwMDA3lW9Vt+rpbFjOwi2bbVoya5ouXHUwMDE45jFWbcLN80Px6JF9yLaapteEb9Y88WbMXHUwMDEzu5sncC6tNtr6zLPVOIEjvZHJtNYpUGumRFx1MDAxYetcXIxcdTAwMTZVXHUwMDBifG+ci/KHxaZd0k66YZjYNExpec604bSdglx1MDAxMFxuZNNKOc+1jLDT0pyysnd2XG43Y6fcb6dcdTAwMWKvfmeQyMBcdTAwMWGlQPlcZlx1MDAxMkybRVqrXHUwMDE1WaRKvF9cblxyxjJcdTAwMWVhkWuDc4ZGX/7h/M1kkN3PXHUwMDFlvi5Gi+ynf/w7e1F+v6SPXHUwMDFlXHUwMDE14+zVPDumb7Cc1W7ydLJ4Mfqb+2KoN1x1MDAxZf28uFx1MDAxOI3dXZFcdTAwMWJcdTAwMWb0cDx66S7Q0bg8rfw7dJFcdTAwMTYjoitXTy+ml+tnXHUwMDA39O9cdTAwMTWjSTlr3rrpbPRyNCnGX3f4XHUwMDEyxXIxfV7O336NzWtDl7H84j1yIEe5XHLHy3Gwi0GzyZbkXHUwMDFhXHUwMDAz76Gs+Pola/DeXHUwMDAw/6k7ojvJf0Q4cC3TKDWvgCXAkUjD0Fou12/qnyNcdTAwMTm4tV4uXCI4POKGXHUwMDE1Vlx1MDAxNrJmOlI1zbBirtc7XHUwMDEwLCVcdTAwMTPbXHUwMDFkyIdsXGIliF1sXHUwMDEwdrDBXHUwMDFiXCI5sjPJkYYjt0JEcVx1MDAxY2SMXHUwMDE5obW1fbbNXCKE4Vxi2mJBgOKoXHUwMDE4RYeVoGNlnjpHLSlWY5KiTVxuO5rWqojcaLJZbSlypFx1MDAwMFx1MDAwMpu2i5BLW/1cdTAwMTVF2lx1MDAxZlx1MDAxZtvP9oVcZqnwPVUwXHUwMDAzmluf3Vxu0Wa4UqNCZjQmtlvFhTQ2wm5cdTAwMWJUqHAs4n7hOISX61To3S1yXHUwMDFk7yojyMw2uJ6EwFx1MDAxNZTJhbTALUhJoVx1MDAwN26SXHUwMDFhJXPhnjKcIG10hShfhStS5Vx1MDAwMq3gXHUwMDEyXHUwMDA1p5h6bchruGJcdTAwMWVcdTAwMTOtXGbNYHhi9lx1MDAwNKA6XHUwMDFjoMAk3Vx1MDAwNLDgYz2mXHUwMDE1oshcdTAwMDTdXHUwMDFhbSprTYRRyaGSMdxcdTAwMDGjtIZ59ma6zF7PRosym0wnn5y4t4wmL7PBdFhmi7NikY2n0/N55oByNptOpst59smvelxm6Vx1MDAxNF8qUTgzXHUwMDE4hGxcdTAwMDGatlx1MDAwMDIrXHUwMDA2SCFccjNcdTAwMTWMvyWUzp9cdTAwMGJUmry5XHUwMDA03UxcdTAwMDJcdTAwMGLtUsDWXHUwMDAyXHUwMDAys1xce/JcdTAwMTWd/LVU9viR2pPtwIRvXHUwMDA3XHUwMDA2hVKcKW9cZtS6XHUwMDFiWCmkXHUwMDEyXHUwMDE2XHUwMDEzb1x1MDAwNlxuNXLdzWH33VVvcdKL2XI3XHUwMDFmPVxmXHUwMDAxqMHNpCE5Zce6XHUwMDA0XHUwMDAxVinyXG5NSNL9IJ6tmEHCnVLSrFx1MDAxMztcdTAwMDevXHUwMDFjXHUwMDAwQ1x1MDAxYuGVpeTGXHUwMDE10WTV5N7nXHUwMDEwWStcdTAwMTCBUEgs15jUWUROe7BSVWuMReJlsZyXc/JT5KuK+fnH5MNcdTAwMTZv/3Y2K4thjzFcdTAwMWG88lRcdTAwMGU2KOnPeS6R2LFcdTAwMDBhKFx1MDAxY5d2bVx1MDAxNO5cdTAwMTJZzJlC4Ti4IC9cdTAwMGLre/dcdTAwMWXOaHNiftZcIlx1MDAxOK97PSC5XHUwMDE1yVx1MDAwZiOQTFx1MDAwMHJ7pfBVT9tDYFx1MDAxMIpxTT9S82tB4Xg3IH8zL3tcZtaN1YW70614PFxyXCK8POd0iYm0XG6kgFVvZlBcdI5gXHUwMDA1SGbpPlx1MDAxOFNJ4V+lqJjKuaCwipizdW54TcHSUN5Hx4+OXHUwMDFmPtxcdTAwMTOEflx1MDAxNlx1MDAxM1x1MDAwMSsjXGJcdTAwMWHoS1Lxhlx1MDAwM75CKFx1MDAxM4ZprJDiRFx1MDAwMEVmVUx/Q1x1MDAwM6CL6flo+uDBd9PR5Fx1MDAxNz1Gqn+ZidJUnlKHJ01l7SqtLOguXHUwMDAyWKXXkHOXw1x1MDAxOHKhoOhhRoA1vjRcdTAwMTU5SWus26dbYtSDXHUwMDEzbYXocVx1MDAwNES5XHUwMDA1XCIz2jaajY42ilN1iErOpVBSJk8ka1RcdTAwMWOrhlx1MDAxOY/R7HQ0K7OL5Xgxulx1MDAxY5fZ6XKxnFx1MDAxMcssXHUwMDE2mVt9VkyG2apUfTqdZcV4/MtcdTAwMTXjPC/fZItpr0Gd5HslctxnQY5b6pxJbo3RxnLLNnm00bmVKHFVWFx1MDAwMiGbm1x1MDAwMFlmLoQlKyPP78h0521AXHUwMDBmS1PsSzHpUcQ2YLhj07bZc+i2gdbOXHUwMDFhepuhXdykbkVcdTAwMTSC/EK3bWBw1XWSPbn/rMe4bltoopB3OHq1sbK49lx1MDAwNMDQ/oSI9oTgNpl6XHUwMDFiw53sw3xcdTAwMWOBQlx1MDAwNGSOXHUwMDEyRTUjgFx1MDAwNFRAe2hiXGam7EV4RWY4imlcYpZW1VxmsZlm8YRxstIkfLDDXHI7/Dymz1JwxZRlvlx1MDAxY2m7XHUwMDFkgjZSSNlnO1x1MDAxY5+VxXD3bi3gnv5f7Vx1MDAxOaLg6lx1MDAwNsyQXHUwMDE1YFj5c5nhXHJ1XHL+OmI7XHUwMDE0jElcblxivNNcdTAwMTFtVohcdTAwMWFdZ5bqc2fWylxugzLRtU3Qk9xC4ESjtZRcdTAwMWNcciovRY6Y4PlQPbTEt/eEIH9cdTAwMTFui9xaLSR4ezkq5b6aMVx1MDAxYS7JnVerSqnarVx1MDAxOMpOqeb797P5VZe2l1x1MDAxZFe+1S2y45Z1psllrXBcdTAwMTjRQl6Ho2q2kENlYORGW8jrQL2TzuBJOFx1MDAwMOnLao1cXES1kINcdTAwMTWMXHUwMDEzI7F97iGfRXJcdTAwMTJpNzt+/KTEeszwQEpa7PA3XHUwMDExpESRJUpjvTNI7UNxRpGj1qb3dlx1MDAxOMJKXHUwMDE0iJpcdTAwMDF6aIk0OaGVMVxunNAyXHUwMDA2vpTBgZi02ONvY0gycVx1MDAwMbrM6NtcdTAwMTj5lqRcdTAwMDFRXHUwMDEzoJBNJbZIgVaZTpk7cvmrNussu7fOjX3Ub46ydcFpyMoskqw0UOphK6h+poG3/1xitvK7mFxmyipcbrU6KnZ1WLbIqvXO/rmJ8VxmxidcdTAwMWUzvD561c1cdTAwMTSegdxSaIXKdeQpZj2pXHUwMDE0dFx07lxiR3H82ILel0rvl1x1MDAxMSZJ1iWsRuYzyYbzWCf1yH6Sj04rVJKJTlx1MDAwMexzXHUwMDE3XHUwMDE1zlx1MDAxN1x1MDAxOfhLO72YjPasMU35lTC4c9Bqm2RNXG6PXHUwMDFiiFx1MDAxYThcdTAwMWRcdTAwMTDNu27gVFx1MDAxNiDhZ/NcdTAwMDE3lEV/6lx1MDAwN1xcxMCpXHUwMDExXHUwMDE0k1xuw6LiXHUwMDA3hYYj6H7n1mewXGJxXHUwMDBiXGKbM2veXHUwMDBlWrA5rjpTlOLg2q49jiHGK5yeXHUwMDE29GtPvMKzcK9AhF1YyY03rdIqQFx1MDAwNIacOefp6/5cbqzoNkfKXHUwMDE5u5hnrbMp/YhcdTAwMTh8i0xU71x1MDAxZs9wN3qGPilcdTAwMDKK4qVcdTAwMTVAxMxcdTAwMTgu5YGexVx1MDAwMfGriDhcdTAwMWU0I1xu7O+Vba8wgFx1MDAxYlx1MDAwM0fLbOo4XoHSglVNcFeGhneAoeFN4HBXioam6Vx1MDAxMFx1MDAwZlx1MDAxNC1cdTAwMTh0v+9M0ZApbiRjkX04nFx1MDAxM2FB22vlMzLLnUhcdTAwMWFnTe+ATORSIVmMMlpqrX1zXHUwMDE1XHUwMDA3ktZips8jfINcdTAwMDVcdTAwMGVcdTAwMDaZrzlcdTAwMTNcdTAwMWE2ulx1MDAxZaOQSqGupt5cdTAwMTO5XHUwMDA2ikSwk+5cdTAwMTneXHUwMDA1kuZbZDLnwHcjadyjWoZEwcDiSuPOSmH9XHUwMDAyPFx1MDAwN5LWXHUwMDA2xFx1MDAxN1x1MDAxMUVoN8xcIpj2XHUwMDAxkTfyamsgMjCGVedcdTAwMWFScTTi5LpqgbtyNH5cdTAwMDc4XHUwMDFhv1x0XHUwMDE47srRuG76w1x1MDAwM0dcdTAwMGLG3NfdOVx1MDAxYVxiK1x1MDAwNMjIflx1MDAxMMaEMFVcdIY+UjRcdTAwMWVG0VDkXGal5EQ6iYRtXG63cWNya8hN085jtFx1MDAxMNKj3Mb09cWXXHUwMDAzfWux4G9cIuhcdTAwMWIjdsyk1b526mZcdTAwMWbJOp6wUqPkiembovDSmE6RPdxcdTAwMDX65ltkourLfHlxXHUwMDEx0bBVc1x1MDAxZEI0OZzfdcTMoO+N5OdcdTAwMWY6u1x1MDAwZVx1MDAwNyxrXHUwMDA18jjfwYV0illcdTAwMTWx/lx1MDAxZfqOOVx1MDAwNKl+yk2FXCLhXHQr6Crl0qAxoGnr4lxc+YawWX7o4Wqx029jerhcZnJWnZypXGKZtKd+lVMxwuSCRIpcdTAwMTlcIlZd/MP9+9nX00UxftDjqMKzxkRN5XNcYlTy3OzP8mFQrmY7rELGKdZD41x1MDAxM+uMg+Dnn2t7vC/qfH+MSbFcdTAwMTEpstJ4fUJ7d1xm08o1Uqbvj7GCs05cdTAwMThUjv70XHUwMDE4f7X1JZHnI+hcdTAwMDUpaFwiv979XHUwMDEx8c41rrr4wJ3Qg77o6OD+WrH3p1xi7EnXNmyM9I6btqbVULi4VibvYFbEo1mnrNq9slx1MDAxOJytQo/5Sozjcla+XHUwMDFhTZdzf1x1MDAxM3M/8Fx1MDAxOLDmVP7RU1x1MDAxOL2eoXqaR1x1MDAwNcfcVcyBjMDph7BcdTAwMDNDjYLonyMgqplAwcB4IarqXHUwMDBmVpS8UDuJoeSZbzfx0KlPiPifk5ycZ7PlJJtOyqw4XZSzrJhMXHUwMDE3Z/R79tM//5Vl74Wge4zbXHUwMDFkv0dcIixcdTAwMTez2fT13+hjd02GSFxizKNX4qBkY1x0t1x1MDAwMOVcdTAwMWJcdTAwMWFNKGKgjOBcdTAwMGXR8p5cdTAwMWPRflx1MDAxOI+kXHUwMDE4xGKvp+pcdTAwMTeji9JcdTAwMTlv01x1MDAxNldmWrfDinDU2/OgfI3Rnnn6XGJD/NCYojC9K6TeUGbuJNxcYt0wgnJcdTAwMWSkcVxuI0ZZ4O68nts2w6uHL6ej6tmu7tf6T9naMlZ/ufrzXz72vrpibrXXf1B7XHUwMDFm7bzzxfH04mK0oC/ylVtE40ovitniM7o7bt+vPVdOhi3PrN710MFlNVxy2nxf9bk6rsrxyfR1KFZcdTAwMDfnLIRcdTAwMDdWiuYrlHJPs7iL1Fx1MDAwMCxcYqbQw1x1MDAwMUHFdT/0XHUwMDEztDdEXHUwMDAyXHUwMDA3XHUwMDExoNXSab35w7QtjkNaVPbWs+Zcclx1MDAwNtiaXHUwMDFm4Vx1MDAxYo/eXHUwMDEyr9sxO7K1buVA51x1MDAxOVx1MDAxY/LJt27mJn2o4zrXXFxcdTAwMTlQXHUwMDA31MWjblx1MDAxOMHXhFJcdTAwMTR4oY1cdTAwMWEl5UwrI5nuj6fc6P3rMfBw18TktdBcdTAwMGLKe1Q7/Fx1MDAwZdB7d4tSQq+MgVx1MDAxZZNuXCIpqk5Mvk5yY8Stj+o1kCd6jjxxY8jztPl5Mo5QS038XGbI26ty3GlcdTAwMDTyXFxxmynp1SPeop8g+eq8gf6RzS3luF5gb+dy3Hbs+WK8wMQgempyXHUwMDFlwN2E7nDdXHUwMDFm3smU4MtwtFx0VK5B0dt/slx1MDAwNWyMM07h4K2DbbtcdTAwMDWGKyXUZ55cdTAwMGUm2NFcdTAwMDTPwk3Qgpu4i1xmclxmXHUwMDE5jGRG3zrV2m6B4YOggrGDXHUwMDA1prTAUVx1MDAwNOVgTDGNtjlQt3VcdTAwMTdcdTAwMDTBgWu8fbq/3Vx1MDAwNsNcdTAwMDddqtW327bBOj2+kzb4XcQuKInzaohTXHJzqusobK+1YWbBomFcctk6T+NcdTAwMDcolbtkv1HGWm258tjjYeRxi0mex5SLhZOXlMzbXHUwMDE42d6cTHfGXGJ3nkViq1SGV/W091Q5bPeZx1mEdFhcdTAwMDOLPu0w5TuGI2bokVx1MDAxN0WhrptcXDnlXHUwMDA13vVcdTAwMTM4xn7UxUyuIFdSWsS4srlGQ+9cdTAwMTG9nnqcXHUwMDA1qofpWu8uVlx1MDAwNlx1MDAxZq+ydMBzwyVYKzRcdTAwMTjm65o/XHUwMDFjXHUwMDFh1mKkXHUwMDE34a5BXHTk7jBtnzFuOd2T2FxuX1x1MDAxZHae2Fx1MDAxYd2BzaZTz/xbWa4su1eMx1x1MDAxOX973N5i+rJ0nXR9XHUwMDE2IFx1MDAwZVxcdzJcdTAwMGZcdTAwMTKqMFb3XHUwMDFmXokxJXKCKdE44TRkXHUwMDEwXHUwMDBlXFwuXHUwMDBlsJNcYi6nLDIrmPAm+tr9XHUwMDA3Q2DaqvRUTkrZSUdmvyXGZlx1MDAxMVx1MDAxMmNccih6NMa85+xcdTAwMWWonFx1MDAwZnTT7lROacM3OzSC0k1MWiDo9JvKhWmMaXG9xlx1MDAxOHlcdTAwMDelKcjXgjYvi+A51uTA5dqs9DLCNXBpmOBWeaWN2j1cdTAwMDNXymiVelx1MDAwNlmhXHUwMDAxzTvpg7e3XHUwMDE59YOz3Uib0SxYV6zuXHUwMDBmfMJijpqBRG1RKYbIfIdFXHUwMDFjqNlcdTAwMTb8fVx1MDAxZo4/XG6KXHUwMDE4Sq9cZvNcdTAwMTaFP8OctIxJLyxmrOhcdTAwMDa//Vx1MDAxNlx1MDAxNptFXGKLNZDoUVx1MDAxNlx1MDAwM5/++YGZ+TA368zMtNZcdTAwMGVXfiHmNihS3CqIv/RbWWxcdTAwMTaoLKZkzSRt0zlIm1x1MDAxM1x1MDAxYrOaacbB11xud6BlbSY6XHUwMDBmd1x1MDAwYloh1yC9ymGtrIxs0U1KVUW+UrEyLlUnt1x1MDAwMD1nZXAjrCxSL6zuXHUwMDExvIJh3rLLQTDMXHUwMDAzt0Vnj1x1MDAwMCCNO68orjvJKq45XGLotUdcYtRcdTAwMGJTuFx1MDAxOap7XHUwMDA1w0DkjDZcdTAwMWTOkS6V5V6ncJBjaLXTZUxRninGRVWLrlx1MDAxMi+0yjFcdTAwMTiXZKdQLvlx1Fx1MDAxNiXvpJiy14phs0DFMF3xXHUwMDAzbSBcdTAwMTQ258KAXHUwMDEzfPWzsjhcdTAwMDDuXHUwMDE1L3tcdTAwMTVcdTAwMGVAXHUwMDBlzJJPiFRcdTAwMWZm7j/Vw5k83nOxMH5cdTAwMDNiYbNAsTDDrnd9yE0uNTCOVqFwoeDB9cUg73WE65Pk/Jx+q/cwjPauXHUwMDAzYdz9YclPLFx1MDAxM5z+YVk1wGi1MCe6tdLcmo+nr11CajpcdTAwMTm/6bVW2HUrTuVcdTAwMTeDJmZcdTAwMWLc1CdcdTAwMTVmTe60bCVxJsnoxlx1MDAxZNT8olx1MDAwMPpDOECdeFx1MDAxZVx1MDAwM1x1MDAwMJ9rbE5cdTAwMThVXHUwMDBlq1x1MDAwMY6QXimMgmeiQlx1MDAxZLmp66t5q7K10kfJ5qOL5ZhC93K6nI/ffJw9uf8sXHUwMDFiTst5Npku3opt9Vx1MDAxOL1cdTAwMWS/T1wibEeJNSlcbi1cdTAwMDPUmnx94Fx1MDAwN7WmXHUwMDE2SL9cdIc0MiaVXHUwMDA13Wzq20Z3jVx1MDAxMuSlq1x1MDAxNeXbprtpxZrW1lZ7/Vx1MDAwN7X33XWxplmwWJOC2vzaQa0pLWj/XHUwMDE2kyNcdTAwMTJMcPpcdTAwMTE11StcdTAwMTnFMsBv/5CDhlx1MDAxYu73/PxNlFxyguWaTH1s9GdQrtinzNBcdGPhuLOCglOGKjI1pKRT+L/9MdJcdTAwMDbutuSGeoG8nXND12Jv6NW19ailXHUwMDAxXHUwMDBmwFx1MDAxZs9cdTAwMDGxtVp+gN82+EGE27NcdTAwMTLI9o2I66tVTrHJ9qBY18Cfs8Jf9Fx1MDAxOH+19aXCX4RyTL1eflBN6Io3jHB3xClAMlx1MDAxYlx1MDAxNVx1MDAxYXJCmkapbr1cdTAwMTKy3Vx1MDAwNMMnZVxyw96YYN013E1cdTAwMTPk4SYoLDKnaFx1MDAxZSeQaY11SY0+m+Bw9Oqiet2v0y+q2WBlYGvdoyFV01xmb8JcbuvtRXcxR3bCRFxm8VBCXHUwMDFhXHUwMDE1Oc8jXHUwMDE1l4rshvfYXGZcdTAwMDfTYVx1MDAxOdG+VjdDXHUwMDFkaoZV1eFE/WtcdTAwMDVcdTAwMThW7mKE/elfO2HSb4RRhyWDksYw4zXO9vFcdTAwMWV0xTI3rp3YOoXlXHUwMDAwMVxyQ9dY59jT1twmM1hcdTAwMGLVdLOOXHUwMDAwlY1zvUfG9FaKR4/sw2t7Kznbrdu+T7apOtsmgKBcdTAwMGKuqipuIcVcdTAwMDXGOVx1MDAwNWzQ931zvPhrUMs9r4luXHUwMDE5z1x1MDAxMIjQuZRgrJO0QFqpp8lcdTAwMDR0fshcIrTZqo6peGlhXHUwMDE0cv84pGi1SmGJh7LKWtNYpbSK6U5NJi9cdTAwMWX//pvHT79+8vB3/lSC2Hj0llJcdL5FJprIXHUwMDFhzIMy6WIzk6DAIz4mZW6ssIZuilx1MDAwMJPgTFZcbkOOXHUwMDFm7YlcYvRcdDNcdTAwMTGUmnOjJFxu5ovseGubMzJ3LKTLXHUwMDAxJochM9hcdIbF/M1kkJ1O/CDsRXtIc4lpOj5cdTAwMDZh3VxcUFNh90JQ8dzl0t3sK8ExRaPz0Fxmhid7UkU+YTZcdTAwMWODnGmunFx1MDAwMINcdTAwMDeCot1cdTAwMTFcdTAwMTJcdTAwMDRpocknXHIk0cRujvC0XFxcZs7+WozH9z7K/t5jXHUwMDE4tqwzXHUwMDE1XHUwMDE2g05EUJuRvOKeWInLXFxbXHTCcGGF0F75plx1MDAwM1x1MDAxNNuh+DBcItVO+55sacJq11xiQFx1MDAxN2o7XHLP5FBk1XL1XHUwMDBlUKQ1ZDPIPu0xXG6bS0xcdTAwMDVAXHUwMDEx5Fxma4dcIvhcdTAwMTCIwHJwQVx1MDAwN6BcdTAwMWLvqjaj74pAoqPHnz/eXHUwMDE3XHUwMDA0flx1MDAxNkFIlbaao/XP/Ww5t1x1MDAxMqVGy2zqo8qlVtWhsF3d4b3lbFxmXHUwMDFm5YVr6/9lj9G4bbGpcClDcMlrWURcdTAwMWYuOaePYtLNXHUwMDFhXHUwMDE42ri5T7nqMHHQXHUwMDBly+OY0otVWjHulUnYXHUwMDA2SyGZXHUwMDEyMrlGtVSodSedhPv337bdz7OzclZmy8liNHaOaLMlqXdcdTAwMDBcclt2KqiqXHUwMDEwqNY5rKcoKkWujVx1MDAwNOntizyQ1y1cdTAwMTh9XHUwMDE0gVGgXHUwMDE4wVxiv/RoK0KlNFJcdMX711x1MDAxNrlihth/8oqt5HXXwdnBXFyHXHUwMDAwr8FdPchDpnPjbolW6Irn3afy9ou6Plx1MDAwZcdcdTAwMWb5ObojzVrv0TbBXGLHW1x1MDAxNGdV3eZUxFUwm4a44l1cIq6exabyhiZcdTAwMDSUXHLi6lx1MDAwM6U2XHUwMDE0UCouKZg0QFZzmJWNQ+XnXHUwMDExdUYjXHIjVHpcdTAwMGZXac3pXHUwMDE4qyxHlVx1MDAxZZWKVtNVx2VxVk7es0A3XCI+67M49zXrTYVNXHUwMDFigs06UzVcdTAwMWXVr1x1MDAwM1PdXHUwMDExk79cdTAwMGXHpDt/XHUwMDBiXGb3XG5MbDn1mUs3N3fr7aR+osr7T1T5XHJcdTAwMTBVXGKaWm0wVVx1MDAwZvJcdTAwMTCQnKIlb8glV8KnlH9gqlvw90VEpEi0XHUwMDAzXHUwMDA1/Vx1MDAxN5nN0UC3RYr0hVx1MDAwZc2Y7XRMxVx1MDAxNf3jd4mrelx1MDAxNpvKXHUwMDFmQlAzToOsenApXHUwMDE0z1x1MDAxNThcbuV6cXTlMOJdcblPR7KfsCfhuHTFXYZ+zcF2rsqNQc1E+tOerEbVKYL0cT+eZT/9819Zxlx1MDAxOftvpP/pXHUwMDEyZ59mW1x1MDAwZW/vXHUwMDA1ZHf+JsnwXHUwMDFj1NpTa67TnuM+ZFx1MDAwZWjJYsyhpydcdTAwMTbJv4nwsILYrcNk1KyKofBcdTAwMTAsmv5JQ/zYY2z+2IK2nUntdEhLa8KtdTY2YN5B/EzzXHUwMDBlO54u0Kd5h9/6UVx1MDAxNjPvYNFJ5npPTdw2n665q6DceiHkWtNcZpt3UHD9wIM1OTJrQYJcdTAwMDLg6Ou0Psw7bLHV30V4XHUwMDA0p1x1MDAxOIycKZ9Vtlx1MDAxZjTAiHgrpVL3tShOP00nl3D87OnxN8+fP376td839GLewbfINPpcdFx1MDAwM98pz76U4/XzXHUwMDBlXG5yUCxNznG/Jlx1MDAxZL6MwVx1MDAxZjNSIHiDqy1cciwgnIqC6Z9qyd1cdTAwMWZ02Jmg+U7l9EDPXj/ngEbmLuJcdTAwMDZNP1x1MDAwNcfuqtL7XHUwMDE1XHUwMDEyPY1cdTAwMDCgNPRLtVx1MDAxY43bQOX6jFx1MDAwZjfKnD7nKISqnjbSZc7hr1x1MDAwNInBcubu511cdTAwMTl5aF1yonyF73Q2XHUwMDBmQkXA+IPluStcYoCwZDpVdfFcdTAwMDNCQ1x1MDAxMPosXHUwMDAyocZotjqj1EdRW1x1MDAxMWpcdTAwMDQ5SLxcdTAwMDFcdFx1MDAwM4nVLXzHwty9XHUwMDE5fJzNkP7nXHUwMDFm9b5E17bYVKhcZlx1MDAxYYmoa116UakxXHUwMDE3Ulxi5Fx1MDAxYyhutlx0hpJcdTAwMWVcdTAwMWQ/On74cF9g+VVMLlFIqylg87awsPqD64SGVUxxllx1MDAxZZdOdLpcdTAwMTN1XUzPR9NcdTAwMDdcdTAwMGa+m44mLbp7vUCkf5mpsFx1MDAxODRcdTAwMDZhQzykNrlcdTAwMDRF0SMxJaG1T7Xi4Fwit2Dx91x1MDAxMVikIFIyrv0lOlN/8KpEx9A1kyVcdTAwMWbWXHUwMDE1UspuhfN7PcbfvfSgXHUwMDBiXHUwMDFiaFA1XHUwMDA36GvhtCw35PqkXHUwMDAyxqVf8+3QrdKOuecxtNRcdTAwMWS0ajmLypxKZVxcvJDa+5FD1VVVzW5cdTAwMDOBXHUwMDFmZ5W+5cpfeJ/PJopcXH+ilE/QRITmLFx1MDAwNyuEsUpxlFgvh/NcdTAwMWOUdKPaXFzpaqf+VXGcidy4qFx1MDAwM2jDNlLr7o3Z+1VcdTAwMTB5XHUwMDExXHUwMDBla6VF7Vx1MDAxY4RcbqqxldYqLVxyWJa+M5tpJTrpXnz0y+zdwT/83aE/T599u2pcdTAwMTFxPV7zjdO8Ps36fiBgp2+Tyl1cdTAwMDdNXFzUSyyHrpekkP46wlNLJlxymYKOOpmBXHUwMDBiV4OuXHUwMDFlN9iXXHUwMDEyyz51vVxmR69OpuFdLzVcdFqtfadVXHUwMDFmlJBjgPZNONCQXHQhwNpm2WRcdTAwMWLQXGKeiphRtSmtfy0uk+mig1x1MDAxNLL2NDD77TBKXHQ5qPuqgFx1MDAwMu68XHUwMDEx/qFz95Ve6Zkx/2xBq2m6U30103DrTmCbaZ6EXHUwMDFmV1BrrNfWI9Fdec1BXHUwMDA0ebtZftvZLC23WohcdTAwMTZcdTAwMDGT1mBcdTAwMDPl6kTxW+/+2G6Vu+hcdTAwMWZr61F9XHUwMDA0naNVxrVDXHUwMDE47oTzm1x1MDAwNlx1MDAxYdlcdTAwMGZcdTAwMThgov9BXFz5j1H9SFxcobHoPWW7XWxOo3BHOyY/xZfCauSdqq2/ffyn7MnTXHUwMDE3T379RZ87XHUwMDAyvatMJIE8gVwiXHUwMDA0iaBrXHUwMDAxq22SXHUwMDE2bnOh2o/wPHRcdTAwMDVuQeGfXCKSUEJoosQyjqxwa90pc/bWpfFcdTAwMWJcdTAwMThcXI1cdTAwMTP2OGqtrS9J5DqBk1x1MDAxMNRhPU3kQVx1MDAxZGiZo1GGtkMnRKiMr9tcYuLOXHUwMDEx3K9s0Z9jPKBiXHUwMDE2W1x1MDAxYVx1MDAwMttPTLGG3iertyZRYVx1MDAwN+jOs6pcdTAwMDHGgm++nF+Wk+HcjVxuZu+663qMxe3LTdMlP4FBXGI2ha6HS1x1MDAxZY/IclxuLCm6XHUwMDE0ynjFXHUwMDAxXCJxuV+FmVwiXHUwMDFjl0RcdTAwMDUpNJUyTkfOOFx1MDAxNSstdf9mXHUwMDE3XHUwMDE3xfy8xzDcXFxeKth5zrRrwk7WTlx1MDAwMvDBTqHNiYJaJcgmhFZcdJC3X1x1MDAxZfEkXHUwMDFjeciEsZLxpta4uzlccjyu87rkRV1TUmLoueZcIuzUXCJ/bzJdrNzLs1x1MDAxN/TbrCyGXHUwMDFmZT/949/ZlFx1MDAxZZtlzvLn2XlZXmaz5WQymrzMXp+NxuWqwuj+5mqMT+4/6zF4U3/BVIEo7lx1MDAxNIhcdTAwMWHwiJ9bm1x1MDAwM1xuIPBzXHUwMDEwWpjDXHUwMDA2XHUwMDEwuVx1MDAwMVxmwjdcdTAwMDDuUpTGf1Bb8/DVqyylcEdcdTAwMGZcIiTHP7dGdHK9L8rvl/RBo2KcrVwiv+xTMv05fUi2XHUwMDE4XZR5j4FcdTAwMWS88mSIXHJcbmKF3Mzi+lx1MDAxMFx1MDAwYihzziVcdTAwMWGthEX6/dCbXHUwMDFmXHUwMDA32GE4YIGD4lx1MDAxNMJ6O1x1MDAxZXirx1YgXHUwMDAxaFdNLqRFcSx0imFcdTAwMGat+Vx1MDAwNMWgmFWazdKzXHUwMDBmilJhXHUwMDBlsFx1MDAxYcIw7tBCXHUwMDFmXHUwMDEyXHUwMDBmvnNcdTAwMGJcdTAwMTTLXGIouvM6XHUwMDFkrnxIbI9bKdBcdTAwMTXKJX9cdTAwMTJD0ZXBWad6yqfZlFx1MDAxNjsuLi/J61x1MDAxMEvMPvnVimo+X85cdTAwMTfkjN5ki2k2nGbrSc5sUi5eT2fnxCx7XGbdNF8rldvlQUS5XHUwMDEy9a6gLppcdTAwMWSGdNtzXG7cXHUwMDE4KmtXp15018k7fmxB71xy1E8jqjZKXCKK6vh2hSa3XHUwMDFm1GWMXHUwMDAwzoVInjlGbVinKZyv3izOppNspZcwmvZcdTAwMTi8bVx1MDAwYk3keXlYJadSXHUwMDFlb4MjcpNcdTAwMWLBkFuxOseae6SNXHUwMDBlrndcdTAwMWJcdTAwMWVfRrheY6RcdTAwMTHcelx1MDAwNZ23XHUwMDAwXHUwMDEyXHUwMDE4OV5cdTAwMGXVhu2+INI5nLeVkTldqJVf+ulcdTAwMWb/7jEyr1twModcdTAwMTlW0KlcdTAwMTT1WiHKXHUwMDFjOZYoXHSizFx1MDAxZK7XfYZuvzzmWVxmQi2zzvX5MsvbXHUwMDEwyrXQXHUwMDEy++cx33mg/GXhMq33+jwv177UVF4zqNijIFx1MDAwMJKCIGnIVlxmXHUwMDE3XFxKa33zb1x1MDAwN6+5XHUwMDA1k6NcYlx1MDAxNitcdFxc3N/DXHUwMDBm7YJIhGKtjEwuXGLYXHUwMDE5kqN59pZcdTAwMWX+1zwrv1+OXlx1MDAxNWNcdTAwMTe9TU97jM2ANSdznGVcYkqNWF+X1lDTslx1MDAxY7VcdTAwMDaKM7VlynTXe9iv/O53XHUwMDExflNcdTAwMGLDtZLe2XNcdTAwMTCNR9e6ndpajclcdTAwMTVcdTAwMWZcdTAwMTLA9JDhPZq4gdagXHUwMDAyKVxikys3XHUwMDEwLpzwXHUwMDA38Pq0kc5cdTAwMTlzXHUwMDAykYxrVqmMXiHV5Fx1MDAxY1x1MDAxNWjwdyzFtdLv17FcdOdcdTAwMTEgdepjllx1MDAwMYs7M1pcdTAwMWJXab2BXCKMXHUwMDA0JjpB9Kf/+18vMivf5Vx1MDAxNpG5sbo0/Urnf3r+eD568me4eHbxJUxcdTAwMWV/8+pLXHUwMDE1dKKXtTx3hz9bqTlTULns75xnriwywiDj3FY62m5Qx6xkLqexLzBcdTAwMWRHwFx1MDAxNGlcdTAwMTetqpBXQFpcdTAwMDFhPVx1MDAwMnVqXHUwMDFknHbZxDB1ZduOQi6fZC9cbrpcdTAwMTLzs+yzM/pDMVx1MDAxYvXYn25bbLRXpZ+rK3tUXFxevljQdT16P4t39GpUvv7MM4d4uvp19MG7LcCZe7lcdTAwMWHh+/GDXHUwMDFm/1x1MDAxZsJcdTAwMWHQziJ9Async / Await — Sequential vs Concurrentasync/awaitlets you write non-blocking code that looks synchronous ->awaitpauses the task, not the threadUsetokio::join!to fire multiple futures at once and wait for all; the key toconcurrent I/O// sequential// async (concurrent)Request 1300ms waitRequest 2200ms waitRequest 3100ms wait// Total:600ms(each waits for previous)// tasks run one after another → blocking0ms200ms400ms600msRequest 1300ms (all 3 fire together)Request 2200msRequest 3100ms// Total:300ms(wait for slowest only)// all tasks start simultaneously, I/O does not block0ms300msdone!SEQUENTIALasync fnfetch_all() {let r1 =fetch(url1).await;// blocks here until r1 donelet r2 =fetch(url2).await;// then blocks for r2let r3 =fetch(url3).await;// then blocks for r3 → 300+200+100 = 600ms}CONCURRENTasync fnfetch_all_concurrent() {let (r1, r2, r3) =tokio::join!(fetch(url1), fetch(url2), fetch(url3)); // all 3 start NOW → waits for slowest = 300ms}KEY INSIGHTawaitsuspends the currenttask(not the OS thread) — other tasks keep running while waiting for I/OSequential await = wasted time.tokio::join!= overlapped I/O -> the Rust way to do concurrent networkingPython asyncioworks the same way —asyncio.gather()is Python's equivalent oftokio::join!- Sandesh Bhandari

Figure: Tokio runtime for async tasks. Task 2 finishes first because it waits less.

use tokio::time::{sleep, Duration};
#[tokio::main]
async fn main() {
// 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
});
t1.await.unwrap();
t2.await.unwrap();
}

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.

4. Rust vs Python: Key Differences

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 DifferencesCONCEPTPYTHONRUSTKEY INSIGHTVARIABLESMutable by defaultImmutable by default,opt into mut-> mutno accidental mutationTYPE SYSTEMDynamic (checked at runtime)Static (checked at compile time)bugs caught at compile timeMEMORYGarbage collectedOwnership + borrowing, no GCno GC pauses, no leaksNULL VALUESNone, can appear anywhereOption<T>, must be handlednull crashes = impossibleERROR HANDLINGExceptions (try/except)Result<T,E>, part of signatureerrors can't be ignoredTHREADSLimited by GIL for CPU workTrue parallel, ownershipenforces thread safetydata races =compile errorASYNCasyncio (similar model)async/awaitwith Tokio runtimetokio = production standardINHERITANCEClass-based inheritanceNo inheritance, use traits insteadcomposition over inheritanceKEY INSIGHTPython is flexible + fast to write — great for scripts, data science, prototypesRust is safe + fast to run — great for systems, CLI tools, WebAssemblySame concept,very different philosophy:Python trusts you,Rust checks you lol- Sandesh Bhandari

Figure: Key differences between Python and Rust.

5. Development Process and Mistakes

5.1 Git Setup and the target Folder Problem

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
**/target/
# Remove already-committed files:
git rm -r --cached 01_variables/target
git add .
git commit -m "chore: remove tracked build files"

5.2 Mistakes Along the Way

eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO19XXNcdTAwMWJHku37/IpeKWLX2pVblVnfcowj9Dn+9oylWe/s9Y2JJtEkMVwiXHUwMDAxLlx1MDAxYVx1MDAxNKVxOGJe9j7fiJ2Hfdhf51+yWVx1MDAwMFx0NNDVYFx1MDAxNbpotlxmSFx1MDAwZVpcdTAwMDRAolx1MDAxYZ2n8mRWZp5cdTAwMWZ/k2X3pu/Py3uPs3vlu8PidDiYXHUwMDE0l/dcdTAwMWW6x9+Wk2o4XHUwMDFl0VM4+75cdTAwMWFfTFx1MDAwZWevPJlOz6vHj1x1MDAxZS1/XCI/XHUwMDFjn81/qjwtz8rRtKLX/Vx1MDAxZvo+y36cfaVnhlx1MDAwM/ezXHUwMDA3x7PXzVx1MDAxZbl+50l5OC1Gx6fl8ql39PjHPDdcXKJcdTAwMDWGSknNjV48/d49XHKQXHUwMDBiXHJMKiY5MOCWL56/XHUwMDFjXHUwMDBlpif0XHUwMDFhoOdy0Fx1MDAxMrgyYFx1MDAxNcDiXHUwMDE1J+Xw+GTqXoL0e5TRQqNQ9Fx1MDAxZjeL18zX9Dhji0eq6WT8pnw2Plx1MDAxZE/cwqeTYlSdXHUwMDE3XHUwMDEzuuDl0lx1MDAwZorDN8eT8cVosHjdfSjQIFu+5mh4evpq+n722+mDpVx1MDAwZvHe2nt8f3VcdTAwMDW49njbT9FcdTAwMWJcdTAwMWWfjMqqWlnv+Lw4XHUwMDFjTt2nXHUwMDA1bPmoW93554PZPfq/yzVNirPyc3eTRlx1MDAxN6eni4eHo0Hp7sa9gq2822hw9W7XN3h5Q/nVIz8t116W7lx1MDAxN1x1MDAwM1xiVMJqJlx1MDAxNs8srcwqvv7oN+PRzOKAXHRrpdLCLpdVPSdTm85+7VFxWpXLz9+t7UXNXGaXl3hxPijmP1x1MDAwMlpLIVx1MDAxMFxmXHUwMDE51/IjPlx1MDAxZI7erF//6fjwzfJdflO7rnXLXHUwMDFlT1x1MDAwNuUk2LqBrVhz7duF8UrDPPZcbjrCQu+L58/tXHUwMDEzttE6vVZ8u1x1MDAxNoq3Y6HY2UJpm2FWS608XHUwMDA2amSrfYIg40RcdTAwMDE8rX2C0EpzkcY+p8Np3Vx1MDAwNq/Nc1q+m65apmCrpllcdTAwMDPItWkqzXLBLe2pnEvLtWzaKde5jLDT0lx1MDAxY7Gyd3Zcbrdjp9xvpyuvvt4ymdH0+SrmM8iGlS5cZpK2NnKctFekNkhcdTAwMDOAOsIgl/bm7Iwu/tn47Gw8yr67qKbZ18NqWrwpq+znv/09+8fss/FlNlx1MDAxZGcvh++y1yflWe0mj0fTV8O/zpDLVlx1MDAxZX1ZnFxyT91dkStv9OR0eOw+oXun5VHNWOhTmlx1MDAwZYmzLJ6ejs+Xz1x1MDAxZdLvK4ajctK8dePJ8Hg4Kk5fd7iI4mI6/q6s5pcxnVxclPVPsfxssb/nKDeh+OI02MVwVLlChVx1MDAxYVx1MDAxNJL3tKv8SS7dyDWsXHLzXHUwMDAx+Vx1MDAxNvjQulf6IPmQXGJHsUCmkTNh6qZ4hWLgrX6Ftn+QVsnlNpRcdTAwMDbFVlx1MDAxOGFM3f62dyvVxUGwZ6lvY+4mKNUwQc5Fzo3Ujpv53FxuYpRbMaYojNlcdTAwMTG3XCLDXHKSglx1MDAxZVx1MDAxN/NI9PlcdTAwMTXZeLDmV6yUPDXNkUxcdTAwMDLE2GPDq3xVXHUwMDE2k1E2PSkzikTPh6flJCsnk/GkyoajrFx1MDAxYZ6dn5bZZfHe61Jq73yHLiX6XG7S+JPB8O3Kim9wKTUu6D5cIuuLWuRcdTAwMTLVS9jeglx1MDAxM8FSMvGLOZFbXG5ZVFx1MDAwNGaZ4VxmpDa+6Fx1MDAxOddcdTAwMWZbQlZcbist4NLKU4CW9mhjoXb/OzmRM4jIXHUwMDBirdlg/SbcYIRcIiZyXjcvn1x0slx1MDAwMZQgtjFB6I9cdOrueVx1MDAxZEvkXHUwMDA2lZC+sLndMulHjODCqn5bZjE49rCbVs69apy+vI7wpHVqcc3NpvnypbbP1GbT5Fx1MDAwNaO/XHUwMDFm+O5oupsmMVx1MDAxNq5RezM6raapyKCJefd9z3SW+edpXGLzXHUwMDE262apXHUwMDFiZml0jkJbwZjiXHUwMDE0eHg30MRG+uuh3jbcjWviuoL7c+CtXHUwMDE5cMNcdTAwMTi3XHUwMDAyaynIRMxcdTAwMWJcdTAwMThcdTAwMDVbXZj315+/ev3ky1x1MDAxN1x1MDAxOfi5tVp59I64tWeNadjzXHUwMDE5XHUwMDA0x75QXHUwMDBiuOdcdTAwMTBsXHUwMDFlV3HJckuBr1x1MDAxMMIgRcDL444lXHUwMDA0Y9OqXHUwMDAzdrAradUn4SDktFx1MDAxOSPFslxyXHUwMDBmsFx0hORLXGaTmsvUWVXJLFx1MDAxNzFuoYHCV+XZ8JDu6KjKxqNsUk4vKJgs351P6COgK6i84KxcdTAwMTHpO1x1MDAwNGf40lNh9nIynE7LUUTIsc7qpC/k4Fx1MDAxZY8pXCJcdTAwMDLf+1hgIYrNtM6ROtiK1vUo4njamdZZXHUwMDE0zFxi9CZU21x1MDAwM1x1MDAwZSu1dtxmeVx1MDAwMX2kdZdxXHUwMDExh2BrttnM61tPwIFcIsIy7bPnz16+uKnGXHUwMDAxXG7+oVvms+5cdTAwMDFcdTAwMDcz2lx1MDAxOFTMl1ltN01tlVJWY89N8/TAc/zkXHQ31riOXHUwMDEyXHKbJKojJbeLQ2TRNFGI4zpcdTAwMDFG+uvhOs8jXHUwMDAyXHUwMDBlxYldMG9yppXrXHUwMDEwK+FcdTAwMTJZ8opcdTAwMDZcdFxcXHUwMDFiXHUwMDFlYY9ccqrz/dx7+8NccrHy6Fx1MDAxZDGaxlxuk1x1MDAxMVx1MDAxN1xiXHUwMDAxXHUwMDFmrFx1MDAwN/tqaYNcdTAwMGK2YnK6wdYoZIpJoWrBydJDQC5t/U9M9lQqguOuRP8vwsGoXHUwMDE0XHUwMDE3wLSNXHUwMDBiPKQg9IC0yVx1MDAwM1x1MDAwZtBcdTAwMTB1XHUwMDEw3EDjUVx1MDAwYlx1MDAxMHtxpna0XHUwMDE1XHUwMDA2N0NcdTAwMTCDIKhvhiDHXHUwMDFjhLbWlTZcdTAwMDLdXHUwMDA3X7DfXHUwMDA1gc/JXHUwMDFkPnmyI1xifFx1MDAxOXGMhlxuXGaoOHco6YdA4i24Q4XS1k0xXHUwMDE2gMVg0GNcdTAwMDSurC5cdTAwMTVcdTAwMDR5XGJcdTAwMDTJsd1cYkHkOZPaXHUwMDFhTp5QeKtcdTAwMTg7IXBgXHUwMDBlXHUwMDA3XHUwMDA3u1J88ruYg2xtJONcIipcdTAwMDNOTlNZrnR6XHUwMDE3KFF2coFcdTAwMWZcdTAwMTWPe4zAldWlQqBcYkIglzlcbpRSue5cZlmvjp5cdTAwMDOS5YZcdTAwMTHuXHUwMDEwgdGLPGXGwuZCSi24ov1XJcenePHMPt2V5Phn4fikd+PEXGaVL7lWc1bN7DhFXHUwMDEyyFlyhHLFVKeQccixx1xiXVndXG5CV68mXHUwMDBlojJcYqI6yEly0NygXHUwMDAx3HvIbHtcdTAwMDR+XHUwMDFlgUDJhFRcdTAwMTSVx+W3pTLgSoaXr7ijJGJcdTAwMDOBXHUwMDBms4M+O8nV5aXykipcdTAwMDSCXHUwMDFjgiDoXG4yksNvp1x1MDAxY+BcdTAwMTdcdTAwMTHwXHUwMDAzazRcdTAwMTk9jypcdTAwMWHSXHUwMDE0zKMw4s5T+L9cdTAwMWH/11x1MDAwMXs6XGJ78uY0XHLa3GjBkO9cdTAwMDPEq0e3xN+XXHUwMDEx+ONCaibQRuFcdTAwMGbp9oGRPfR+XHUwMDBmso8/7TFcdTAwMDBXl5dcboEmXGKBdu/9flx1MDAxMfR9XHUwMDE1gT7BiHpqXHS+M4pccsVcdTAwMTWcwj+J8s6ruffuXHUwMDBmLm1cYvjEelmTXHUwMDA3fMpVJFqrXHUwMDEwpEHG9yHg/NEtUfh1OFxuLWpBYFx1MDAxMr4ykvZjXG6rubZGJj+m4Fx1MDAxNrqd2v+YXHUwMDE12b9kXHUwMDA3PcZhY4WJsFiVZ8M/n4R3bUsucia5QVx1MDAwMPrk9XrZsMua0lxycWdR1lxi5Vx1MDAxYnrjO8uPqfZcbmkvkYXLnH/g1V7fxFBSMFYgcu/BfSNNs1x1MDAwMKSiW1Qv5E7UwK2A1ao8ulZ1XHUwMDAxXHUwMDBicVx1MDAxN3K90tB3qJ3b21x0lXaqm+TbiLM0QK2MgrjOO1x1MDAwNYhcdTAwMWF4rZO0L1xc7ZNcdTAwMWV7iE/S8zRcYqroktLQpk/8WllyxYIvzW6OQ567g1GmOVx1MDAwNc62ntNfXHUwMDE0W6qcca5QaU7UXinlqbbcs7jrNd1cdTAwMDTP30e4XHI0mjnm7KNxQq8/uEhluO5DRlFvcr/BRW1r3lx1MDAwMp8/ZT1cdTAwMDZofXHJXHUwMDBl0iCo4kuxm50jOmbHhLZcdTAwMTRF2VlKw4tCjCl63im/+Idw4Fx1MDAxOSNcdTAwMDSX/rlZ7eFcdTAwMTNwN0kyfX+XRCU7ucWf/9//z6YnwyqrrrulMvrGTVx1MDAwYjm4OP5cdTAwMDc/JPXKo3dcdTAwMDTJ0IWnKpEuJ5Pt+7rQO0rC19dcdTAwMTUzJfT+IVx1MDAxMzdOkqC3Nsxsg89cdTAwMWXFU9/58Vx1MDAxOdE9oyiqtS1jiTakXHUwMDFlraDV452z2Vx1MDAxYi2zS2NXvaBxObDN40FSh/q8+Fx1MDAxNZjmq86mSfxaXHRjdFRWXFxZS+RcdTAwMWRqpVQ9Nc3tXHUwMDFhu1x1MDAxMJpFe1xc5oqBlVx1MDAxNtFI8J/bRHZ27Vx1MDAxNMl5XHUwMDFkU6gnuLZcdTAwMTIxqpJcdTAwMTaFlbw+6jFcdTAwMTHJUcbITrHFXHUwMDBiN+/Mz2V60de1tr6ElCVcdTAwMDR60CArzUZfrkTuRphz10xq/Vx1MDAwMyS6hPlHR/SLd1x1MDAwNYh/XGZcdTAwMDei1toyw9FXrteKQ9pcIqVrXHUwMDE0Tlx1MDAwZkSha5Put1x1MDAwMOLZsDorpocn5SBz9lg9dvNcdTAwMTiIpND3Q7LC7MitJvvoQY9TXHUwMDAx8ZeQKKVHaD5cZktcdTAwMTisZvF8cFbM5Nb1SNOTrkPF36RcdTAwMTmVL9ipRN2/RrhSRaFcdTAwMDdBh3mL3tsgTIhcdTAwMTdcdTAwMWNuoS1Moand7W1cdTAwMTJcdTAwMDZ/+/unszB7XHUwMDE5d7vBKvPQezldJVx1MDAxYo6m46zIqiktwK3salx1MDAwMMtwdJxdjIbTVpD3I7lwXHUwMDBiXHUwMDE3mcqrXHUwMDFmXHLfdUhEiGas509E1IKAm8HPi6JQN420LJCxclx1MDAxYuD3KNr7vnO052pduFx1MDAxYrdcdTAwMWFXXHUwMDA0Ja0xXHUwMDA25d1cdTAwMWas3WibnVJcdTAwMTHSM8/DO3A1wjhcdTAwMDOUSu6zXHUwMDAxZ9vp6PTIOP+tu3FywV3XeJxtzsSNVH30QE9tc8tcXIRqJm+R5ZY+KjdYp6WCNDJcdTAwMTPRTzmdW6JPf4qgT2RcdNZcdTAwMTB7ioqAQDKg/VKlXHUwMDFma6m07FaH8HL4rseZiJXVJWQsQbNkga1cdTAwMDHP41xyNMfcgGlcdTAwMTNcdTAwMDfaRy1cdTAwMWJg9+9cdTAwMTFFotZI5iw+XG51RqCloLJcdTAwMTaAJkKdZmBjqtJcdTAwMWGo+648XHUwMDFivy1XKX2efT5X2nlYn1xueT0okl46nGRvi9OL8pNsyfCr7KNyNHBcdTAwMDT/ckj3t78hzK1fccrdIWz2zfr2oD15ypz2fDd2yrs5sDzxXHUwMDEx1q9nbyjC91x1MDAwNsOFUkzHkUQkPqeUZXdcdTAwMWW/NLaGlsLAXoA4fWGgQ1vQmJu6rkdcdTAwMWLalMiZoXiBSddcdTAwMWJen7uyd8ghoDuIcMhKSVwiwXFcdTAwMDdyRFc5guQ6eVx1MDAxYVGD1Z3SiFx1MDAwZq68To/B11xcYkqXXHUwMDE3OOlmeb/bQFxiLL+u+uvu83aqdfEwXHUwMDFjflx1MDAxNOWTm5FebYVccn3DyLWAXHUwMDFlzN5twK/X2fdbODxziFx1MDAwYlx1MDAxYlxco252e8Lw3EhONFx1MDAxM1x1MDAwNEptPOLfe7e3XHUwMDAxd4NcYtwxZpD2tjhRXHUwMDEzpSVjoNJ7PfrS6fz7I3cq9CDPsm/G11HXm/L95XgyyEZ0weUgO1x1MDAxYU9mMdtpUU1rQVreZ7gmuKiEnvXPh+NBXHUwMDE5Ns94LaDkrFl0Rq41XHUwMDA3YEi7uFx1MDAxNob++DhunI/dqXHiZTjWwUqpNX3UvpYzaGxcdTAwMDDL41x1MDAwN2XIyd5C1skg71x1MDAwNvejUVZcZlx1MDAwNlx1MDAxZlx1MDAxNY/npSFcdTAwMDez/7fP7OhcdTAwMDWaXHUwMDAz1pyqXHUwMDAz5lx1MDAxYaxB2Vx1MDAxZm5cdTAwMDLAqnJuuDVaILlcdTAwMDByzL4+mD0hblx1MDAwNetRXHUwMDA0WIUkjCjjLWtpr0xj2ljBkutO072uXHUwMDBi8aVcdTAwMWPl0Vx1MDAwYlDexiiPa/RcdTAwMDVlg1x1MDAwNK5cdTAwMDaiPvRpnkuL1s3TVYqBX+dv7ynbwHdcdTAwMWNcdTAwMGU+KyRHobxcIkXtySDLhZKCJZ9cdTAwMTngtI+SzPDIfuoxXHUwMDA0PWtMXHUwMDA0xPGb4HJcdTAwMTkp12HYLE0wPqdcdTAwMTeDOj0oTbFcdTAwMGL1Mid+xMVcdTAwMTVzccmZjctcdTAwMGJcdTAwMDGbacBiz/WJx2+CTu3r3cZzm/SOXHTgiChcdTAwMTlXXG6BJdBkXG4w0l+Pa1x1MDAxOEbwMlx1MDAxNFx1MDAwNEwmY1x1MDAwNShccsVPIGXyelx1MDAxOS2t6XRy//P//FeWXHUwMDExVylb1Ch6UTbjW2SalMZg+NaTy1xiXHUwMDEzsOee+plcdTAwMTZcdTAwMDH7cOR5UeVtPF6Tuf8gdcL/XHUwMDEyjjxcdTAwMGVu841cdTAwMWMtXG7WKCfqp+78XFx8kyvAiILzdVx1MDAxYlTNQKHFXHUwMDA2RUzD2Lp1eYUjS1wiKXfaX2w6XHUwMDFi4JvOXHUwMDFjXHUwMDA1pNHMaKGiOIpwP1Wf/tRLs4yqNV9rheDaY5m1evTlSIbE4vSu753+fuA742lnw7RKO1x1MDAxZexVrNswYUxcdTAwMTjFjeh13/vcMP9cdTAwMWNEn8W6VdqGVVrIXHUwMDE1fVBcdTAwMTJcXHe18SqaYmJcdTAwMWL99XDns3BcdTAwMGYuNUdcdTAwMGLcK0/T3vRcdTAwMGWcLNJQUJOaOlx1MDAxYlnXZdyCOn/9+avXT758kbVkNtXKo3fEnD1rTHRcdTAwMTaI0+H01ONcdTAwMWQ854DrR1x1MDAwYrXi0cXRXHUwMDAy8Jwpa4xEyS3z19rEhbClXHUwMDE5sINdXHRhR+EwNJpzrvw611x1MDAxYmSFXHKTXHUwMDFhVfpDQM1EJ1x1MDAxZMU/Vq52ushcXDn2YF5e7cVjjTjfIVx1MDAxZTeuNlx1MDAxNTJcdTAwMDdlXHUwMDE11Mq+XHUwMDBlTOFJd1rOckRkRFg3aC1GXHUwMDE141x1MDAxOFNcdTAwMTRmV4pxxlx1MDAxMbkljZoxw+Nm39FNVFx1MDAwNE1IPnNSXHUwMDFh4mydXHUwMDBl/VxcK0Q2u5VHtOZsfElcdTAwMTCpTobn2eVJOcrejy+yoqpcYlDZeFRcdTAwMTJcdTAwMTYmw+LgtMxcXMv3aDw9KSd59uRoWs5rW1x1MDAxY2BcdTAwMWXO/nVccqnlT1xmq+yYfkWfi3ju7qNItalcXM7F0bfvja+fcW7ujVx1MDAxN1x1MDAxMfmy+1hgIYqNu8l9XHUwMDE3XHUwMDBmwlZcdTAwMTFhj45Tzv07SUyqXHUwMDAyJVx1MDAxYViJ7pZcdTAwMWJMuz4kMlDG1ufPJtpgrMGog83N9tmpM74uqbFwfV2H9Fx1MDAwNZyv31x1MDAwNzJM/qGb5n90N02iXHUwMDE2mqJD7ySmXHLZXG6DwlUj9Tu9e7ldY3x9btDipI/lUrrJQlx1MDAwNizn3lxcReRJ305cdTAwMTWBTMLZXHUwMDE4fciKolHv2MhcckUg6CpHZPqOIIuCdVwiY9/P/XePT/lcdTAwMWErTEZdwsqV11KFgnskWpyoIDJ9XHUwMDFigkpSXHUwMDExXHUwMDE0dyVtWIVcdTAwMDNRWGNcdTAwMTX3T1x1MDAwNG/1XGZWIMg+OIZcdTAwMDZcdTAwMGVpXHJ+XGb2YvzeyurSXHUwMDE0YOFlWPu5Xq298sKPq1xcXGLioopzYThti4kxuFN9QtNwXGaCXHUwMDEwzJBcdTAwMGLyqppBe6NcdTAwMTBcdTAwMDVcdTAwMWPWSdIn94ZS1Fx1MDAwZb63QGGF2W+zXG76rFrTXFxiosZcdTAwMDC8XGaqSUa7TkebgFSYz/pcdTAwMDD2OMy2x+FFOFx1MDAwZVx1MDAxNVx1MDAxOKmJ+8dcdTAwMTXBcMlcdTAwMDChh22y55PhaHo6+oePelxmQ89cdTAwMWFT+cWgXHUwMDFldVx1MDAwMTf7RTS5mVx1MDAxZF2n12979sKC3lx1MDAxNSS+jThFk1xcScW9XHUwMDEznNqRqFx1MDAxOVx1MDAwNYdOjaB3UPzh3o8//XDvYY+B2FhhXCJcdTAwMThWXHUwMDEwIfIp9LpT9MhF7XU8r9Z0XHUwMDEz3i7D8eY6n1x1MDAwNFx1MDAxN95T61a8cYEzXHUwMDAx3F5PzsTLoMlcdMKsZ6w98ZHO6SO6XHUwMDFkveedqmp6XHUwMDE3bpjCTfJDXHUwMDFip3wkXHUwMDE1WLVSM9pcdTAwMTc/UEGPXUB9calImFxuXHUwMDAxX31kbyv4RI7KdVxy3oKK7k7FQ+8jvIJgmmnQcfGQUVJYZeSdV1830Pfgkz7LdK6sLlx1MDAxNf50XHUwMDEw/iTmRihU3FjLXHUwMDA0X1x1MDAwZolMrrRcdTAwMWJcdTAwMWSs0Frg0Cw04JrlmktcIt+aXHUwMDFibM1Y7CU820D514iTM+5cdTAwMTQ8NfeCsrXMwOD89qTOXHUwMDE1KmZ0t+G2Tlxus4LssqiuyvZmslx1MDAxNFx1MDAxNT7MhtNsNM5Ox6PjcpKV74bVtOq7puc2XHUwMDE3kupcdTAwMWOuk8an0KHlQ3uNT1x1MDAwZoBcdTAwMGZcdTAwMTjzIzimSINcdTAwMGJcdTAwMDVcdTAwMDQrP7Jb3S1qVIyxu0963GicnSqIavHZXuYz2jqhs3VS1KuI1kVGYpbR35U5Oz01zi1riExzWlx1MDAwMNrcjVx1MDAwMWtcdTAwMGJU9lx1MDAxYZ9cdTAwMWLMXHUwMDE0w2mQ5MCJgMTpzjohc1glT32JTXZT5Vx1MDAxM7dU+Vx1MDAxNLWxXGZcdTAwMGLgoaR3XHUwMDAzXG5kyDSEXHUwMDFiKexcckL2Mp9ZXHUwMDEwXHUwMDE2eThcdTAwMTZBgZDM+iufN1TzXHRNWyT9TVx1MDAxZJNcdTAwMTAnqrVBblx1MDAwMcaDMVn7ZTY+qndcdTAwMTI9znqdvVx1MDAwYlhzoqRCqJZnI6fuXHUwMDAxreQ81+QrgW86YN1PI26FqYiAqUGObmJHXHUwMDE0TLUxIJRO3lx1MDAwMGW1XHUwMDE2qlPN7c9/+3tLwL1sXHUwMDAwum5cbpqUg4fuxcOKQvFLeiXBo36r+pdNSHhxqZx1J/FOic1cYs6fYahtXHUwMDEze/HOJdKlXHUwMDFm6VHDVKRlKFTcMFx1MDAxNVx1MDAwNEC0K5qffVxm4rqqd0r09IPs1TtDrVN1t05B63CC8VFcdTAwMTlcdTAwMDawXHUwMDA2XGbjpnZcdD21zu1SXGaSe1x1MDAxMrMqV06xKEWCYZekO1x1MDAwZpiOYEuCc0ZcdTAwMTFKXFzCi8JPocTKXFygvmRcdTAwMTh2T7tcdTAwMTPH59N6Y3K4mILPXHUwMDE5oOQ5oEVJ0SWFLDV6s3WoUppDc8PxyK9cYnwmXHUwMDFjfDOdcav947Vqslx1MDAwNlxyyTCNgFx1MDAxNF2kblx1MDAxMFSgOrZEfHs+pYVmTzJH7Fx1MDAwZk/Ho/Jxj6OPjauNaJS4XHUwMDE5nlx1MDAwN1vBUzYzXHRcXItcdTAwMWM1MI5CIFx1MDAwM1xcmsB+gHtcYjpthGvkhFx1MDAwN2xcdTAwMTFcdTAwMTSDhr9cXGRcdTAwMTJcdTAwMDT9iCtDSFx1MDAwZU6jWacpR7SG7KohKJ9Z+0dcdTAwMGY+ybJFb8JVbTQ9+6DPeptbXUWqrieH5aCsoMRlUNWGZadbhIboLWFcdTAwMTlEy7yyODCrJ9ZKuStgflx1MDAxMlx1MDAwZWZjjVx1MDAwMW28k383jEWSlinQPPXEMormXHUwMDAwOs1ccnz0yKXCqindt2yWXHUwMDA3e5hccsryPDtcdTAwMWOfv8/OioF/flk/XHUwMDEwXHUwMDFjsfZEufzxm/BcdTAwMDHddq1XSsq9fkNcdTAwMDeMPu2eMUGn7Kn9UzTaQ1SpiCahVP0uyiDLXGZcdTAwMWFBa9dmdtfHc+9cdTAwMTVcdTAwMWPSmOqzXGJuiGRcYkKyuFx1MDAwMZhgaJmo6yNjXHUwMDEzcUPiXHUwMDBmptNZ8I5LOMyYXHUwMDFkXHUwMDA2JlHw5pQ6cYacYnSjXHUwMDE4MC2wPiRzn0ZcdFx1MDAwMuPzmDRcbjPCdej5TnxbNSlccrNMurGXqbHIXHLqTlJbV2mJpy4t8Wk2r3j4XHUwMDAw0iht602J0MA8yjpCPcGXXHUwMDE1+cZyjH1cdTAwMTKlXHUwMDFkmy9cIrBcdGBcdTAwMTBs5Eg+mFx1MDAxNUzVz8j6crywyD78Y+vgl15gsmWdqeIpgmLYdGjQN0OR9u+cXGKVtkJcdTAwMTKtVfVcdTAwMTl1+zxIXGJcdTAwMWVfhuNRXHUwMDE5RVx1MDAwZSpyPLSmXHUwMDFmQGFsavlcdTAwMDTFXHSNneD46NGVv3m4TCm4yqE+1zxcdTAwMDWsOVx1MDAxMUyJKlx1MDAwN1x1MDAwNZeNg1x1MDAwN+1htKhygSzZXHUwMDAw992qX/xdOEKF1K7sIdZjMsMtXHUwMDE3dy9X2YDo7yflUTm5Mvnh6LjHyGxfasLawmnQJEPUN0NSsFx1MDAxY11smYC/7pKE+lx1MDAwMfssXCLRo2fMXHUwMDA0onKPRlxuQiOI/k3m+Ijo4INcdTAwMWUjcG19XHT9YNC4Qo46t1JobiztwUaujVx1MDAxM5Wa55ZZyYBzRS9ryoBxjTnMqjpcZlhHb/aOMlx1MDAwZZqfR0BTMWVsS1xudoOnXHUwMDA0XHR0fyF5pb8xSnY601vIeIxHp++zXHUwMDExXaVcdTAwMTPvmJTFIM+yP1Z9PtJcdTAwMGJferKyXHUwMDFhXHUwMDA36qDhh1xuYFx1MDAxNdRrmMac7pyxXHUwMDAyUYLyXGJOXHUwMDFhzDXFPtydrNiWhrs4b/v82fNnT57sXG6kv4jJ5EqJSjHvUVx1MDAxZrSmcmlD1sBcdTAwMTFcdTAwMTLHp8hcdTAwMTiobvVw11x1MDAxNSrZx5/2XHUwMDE4vd5VJvS9QbPpNFs74bzR2VxuYXMtpJBKcMk5U/uwNFx1MDAxMppfRkDT0lx1MDAxZVxiyLxdda2lqshQXHUwMDE4XHUwMDA2wiT3tlx1MDAxNozoRIVcdTAwMTcua+6tLseZ+2DOS/oyms5cdTAwMTMy8+7Sqs+aYFtdRVwiXHUwMDFmPFx1MDAxOL71xLJhmuN12eq97v126P0qgitLikbNyoiSkJ44csdS9GHq9yZcdTAwMTfDI7o1163QKyfn74eLmaGwbl/+8i4oQWxjg30q7/q6e3lcdTAwMTeQRShXXHUwMDA1XHUwMDFiY5qaW/It9SxpLy0zqlVzrZVY+Xriaj5vOasssbC4m1x1MDAwNkV/P/Tt8Zvupim5XHUwMDEw0kDkrDJphVac97vycG6bf1x1MDAwZTpcdTAwMWZaXHUwMDEztVKiOa9cXMucsTZcdTAwMTWPxPb5K1wi4N+Gu3CrKcq1yjvWYkNXO3Jlmbx7XHUwMDBm3uDf16ry3M+u1cqjd8SuPWtMdFx1MDAxMsS3Vr4nV9lAXHUwMDFmxcc5WFCS7XXvt0Dh7yOINFfaMC29XHUwMDA3Qq1cdCptaZluoG1SXHUwMDE0XG5QSqHuhEJa4cflu5PioppcdTAwMGXfltlZMT08mdfxXHUwMDFkjSfH46lL455cdTAwMTSjwWlJXHUwMDEx5mVWji7O5kLRK3d9idtcdTAwMWHBvkPcJrmqVEhcdTAwMWaUVVit1DrQVTNcdTAwMTdcclxmIFx1MDAxN1e6rUnqMIwpXG6zM1x0rz9EIJ1J2lC5vzm7tVRKXHUwMDEwJMFqkzxcdTAwMTWtmIVOc6T+5PThXHUwMDA3g3KQXHUwMDE1M6O/sve5PvxcdTAwMWNcdTAwMDJcdTAwMDdcdTAwMTfTbDBcdTAwMWOM/mmazVx1MDAxN5CVdHnvr/Bz4N4gm55cdTAwMTT0bFVW2XCaZzNJ+kP3ND0wPVx1MDAxOVZcdTAwMTk9ezg+O1x1MDAxZjrl+eFZ2efc2Z1/XCKpdpjLuejt9lOr6qxyyeg9aVx1MDAxMFx1MDAxMZGNu49cdTAwMDVcdTAwMTai2Li13HeBJnzg0uVcdTAwMDfsu86hJnJjUcfp01x1MDAwMt02hqj6LU3ELztccqxStpkotp4kSFT7ZUC5/n0gu+RcdTAwMWa8Zb7qnlx1MDAwNEGjrCv7jDFNqdywS+z3RGx+ud2wqvpJ5eIsUuZWmtZcdTAwMTRIZN/lbrWTvI4gZZZJ60b7xVXHKkTjqmr7l1x1MDAwNWno1feu6bKxwmSsxdOT74mK1pOPtpn+4NrkynBccvJ2ZOt2qyjgj1EleFxcXHUwMDE5UF5J79ZcdTAwMTjJStBKUXiVOkai6LjW9L5cdTAwMDVcdTAwMWFnnP/50DFcdTAwMTPX0fhj9s14Mj15mL1cdTAwMWFfuP+9KKrpw+z7kr76XHUwMDAx24tcdTAwMTHZ21xcRJpiXHUwMDFmTlFUhFx1MDAwZao061Rv+UEtXHUwMDFiqX9cdPmTX4NcdTAwMTDqXHUwMDAx+9eYw1x1MDAwNM6NiCR1tL9ypnquwcMvg/orpFx1MDAxMWu213QrludcdTAwMDDcXCJcdTAwMDLY2XymxG5lt466vo9wK0KDQeMvXHUwMDAzbXUrXFyxWZlv8qmIglxcnIwwz4ZbmW3Abt/tsdfwrDGRU7hcZmq9qKeb2lx1MDAwMClzwVx1MDAxZNnwn3DtXHUwMDE53tWaboTiv8VAXHUwMDExXFz9rY5rR1x1MDAxNExo4TTx7tpTNKD4U48h+FNy6M3S1Fx1MDAxMWlhbddA6MtcdTAwMGJrj1x1MDAxZozKXHUwMDBiXHUwMDA3yiVcdTAwMTbwwVx1MDAwZj/7U/e8MFx1MDAwM6BNT8cxNdDC6fnV+V1cdTAwMWap2tlBUFxuwLCbuZqk7d/15lx1MDAxOIpIicon52q75SD+PcJBaItWXCKLk9sheFx1MDAwYmGsSj1SguCiUXXqwptcdTAwMWbtXHKGk+vIOfvtp1meX8XP1984pnT9b1x1MDAxN0vP/5312b2kurBUvukgKFAj9oG5nVxySVdMu4astb3A5sZoXHUwMDAxQlx1MDAxMPJcdTAwMTE9XHUwMDE5XHUwMDA0K3NggvYt0Vo0XHUwMDAxJtcx+fndityKiN3ASPI9YLxNucBcdTAwMWF1tIv9gDZcdTAwMTFlUCbfXHUwMDBlkItcdTAwMWF13VK4e1x1MDAxMVx1MDAxYmWj8fSqcGjQXCLSLVdcdTAwMWW9Q5Hum1x1MDAxNp0qjd9JkFtzz6SZvSB3ODZcdTAwMGY6M0xccq67knknY28gmIwrsPbuR1xc3GibXYpcdTAwMGa0aLZg7PW4g43zsLNxXHUwMDAy01x1MDAxY7mKnYZkhLKGW3Xn+YebrHPLXHUwMDAyXHUwMDA0z0jyvSD39nY6XGInOC7WUULGdVx1MDAwNFx1MDAxOVx1MDAwZYqh7qFa1m7qcfMt9bi18FxmXVx1MDAwN5sjeU8ptVx1MDAwMt026Hkvx51cdTAwMDUhsYxAXCJzMmVcdTAwMTa8rqG99sA6j1wiVGpFXHUwMDBmZVx1MDAxNHZcdTAwMWJcdTAwMTUyWu1ZOC+m03Iyqlx1MDAxZS+P8lx1MDAxZj9e5fSHY7q4tlGXvUg5JLimRNmGUDXveuTaXHUwMDA2edTkTJlWllx0XHUwMDE3te6nYcai/ChcIqHApKJ7gl65VLn+2KL81N1cdTAwMWVcdCa1zoLlxLA6aXB9fNU6cObaXHUwMDA0rlqQnnz11XXvQeVcdTAwMDdzL9olwpeeyk13UuKuXHUwMDFmmdygxFx1MDAxZNOfvDtK3Md+lEZpXHUwMDFka6tcdTAwMDV56KjoTStypbbvteNdhbjr0cBeiDvaOE+6XHUwMDFiJ3BDvN3GKVx1MDAxZrsjXHUwMDA2onpw53OWbzLOLTNcdTAwMGK2mY9FllvB6ZPSqKS39GYvxr3BUocxxTZ2Jlx1MDAxNuQ762+NaJRcdTAwMDKumUg+nJ+Yb0e90d2T4nbAm4a1NbB14HmavZXNpVx1MDAwNScnZFG6zqJ9oFx1MDAxMYe9v0Rgz1wiXG5juIhcdTAwMDRcdTAwMWZTXHUwMDA0XHUwMDE3kz6dYCTvXHUwMDA0vieDQTY9KbOzYVVcckfHWTE567OG1OblpoLn4XhQblx1MDAwNU/jXHUwMDE5VyhcZuTMWoGOrsqWtqO9jFQ7Ot9EoFx1MDAxM5FcdTAwMTP/wDi9RWRcdTAwMWFccnJhk8PTMqU6lYR3KcZpaT7qXHUwMDA1jlx1MDAxM11XoqxcdTAwMWa544h+JLU27t+AJ4NQI2d76d/N+D5ccse3duVZKDCuytVabo2Enlx1MDAwZoF0Tieo1E3pm51cdTAwMGUgcUKpjFx1MDAxNG6wslDe86Y4p7NbXCK/Z+FGKaziTiEySjOe070ht5NeK82i1Z2aW5dcdTAwMDcts922x06kdaWJ3IJDZFBTkrQmN5pcdTAwMDHdUiHVes+gXHUwMDBmnzbXZq6+vZdcdTAwMTWNheYoglx1MDAwZjJcboyJ3HkzyzWFj0ZhkCurgvTxXHUwMDFhRehSdlx1MDAxMv39KesxIOuLS0fNwpTQ7PqJrC9x7mrEQUrUPI064W5pbY8jfFwi17RcdTAwMTmqqCRcdEhhyZFcbp56/KVcdTAwMDYrdaeheK/dgLZhNUs9vHzx5PVcdTAwMWa/e+HmRM6nuFx1MDAxZI0nh2U1U1dYzoucz387LKpej7ZLdF0p06JBXHUwMDBld1x1MDAxZOw+XHUwMDE3y6XNOVx1MDAxYVx1MDAwNfSlbdbLPifaXG7281xisKOwrlx1MDAxNz+qXHLfXHUwMDE1V1x1MDAxMV1K3oVvXHUwMDA1XHUwMDA1Pd34b1Zcck+dLMrBxXGVXHUwMDFkTcZn2cXoqjFcIqum9H5V74XWtrmIlChcdTAwMGVSXFxcdTAwMDNcdTAwMTRcIucgtVx1MDAxMFx1MDAwNrnUa6pcdTAwMWJcdTAwMDTqXFy52aruuEvbWi3espszV0paZlxmcLGXXFyLxvh/RGDcnfQxy3xcdTAwMWVcdTAwMWSa6dYlk3b5WC1U8mNHoF/cKbXqvul5gNtcXGJCVlx1MDAxZKS2XHUwMDA2XHUwMDFjbva0XHUwMDAwOnedXHUwMDE0mrj1fLL83tnGXHUwMDAxcVx1MDAxMlx1MDAwZUQ3XCKeqE3cuGnaXFxcdTAwMTlcYslTx7NcdTAwMTal6lx1MDAxNs9cdTAwMTZVVsznIH9cXJye9lx1MDAxOYytK03jN1x1MDAwN8O3XHUwMDFl6lx1MDAxYqZPZTyq33uVtDhcYlbhXHUwMDEwXHUwMDA0qSyRXHUwMDEyP1x1MDAwNluPIVx1MDAxNNNcdTAwMTJNz0vCxPZcImnGXHUwMDA0S/UlXHUwMDE3SYOSM7zTPkjT3Vx1MDAwMqd+XHUwMDBijKlVJFx1MDAxYtOGqaas9SbDRGCSM6i39vbSMruIpFx1MDAxOc948L1IWrhtXnS3TVSa85bSjFxyXHLkyunC8n636IrtRdIs41xywzQ2p0Vabq2Atil2e620NlN9XHUwMDFi7shRWiGVt5qgPUutXHUwMDE5XHUwMDAzqblI3TSkhVx1MDAwNNkpor2WIVx1MDAxM35cdTAwMTbdK6k0kZo/n4mtpdKMbYqGa1x1MDAwNblVVjEhLIK/eW+vldaOwsuYs1wig8Jyb4NFa+tcdTAwMWUyXHUwMDAxXFxrYMmng2te7+feXHUwMDAyhk/Hk8n4Mjs8Kellk2w8yj4rqpOvi/Ps4+zsYlpcdTAwMWOcltm/ZMOz639cdTAwMWbMX19Ms4o+1Zn4j1x1MDAxN8D90ExLenWpoL+tdpr1XHQ7My5z5MxK3S5cdTAwMTKw105rRf67XGL/y4D2XvT3VrV6YFx1MDAwM4LujIHkxVx1MDAxOYJL0SmZ5ZTCTsanXHUwMDAzp1x1MDAwYrZEwKQ8KunGXHUwMDFlljPFsFx1MDAwNVxc3lx1MDAxNqdk7+7odUSm/9496X5iWs5OY2dguXppnr0+WVx1MDAwMOlcdTAwMWF4M1GxuXRYn7Nmd/+RpNpjOqunWc84XHUwMDFlf6fxXj7Nu7O871x1MDAxZYRqJjhq/5jc9qmDXHUwMDAwRlx0J0WSesfRXHUwMDE2o7jGZlx1MDAwM+3UaGxlM4e8XHUwMDE3UFx1MDAwYrbNvyZI3knJLcO45Fx1MDAxZDjBT9B3L1m12TS3azO2qknPJMvd58Ttlbqtp89ir6LWbqj1Yek3yzYhXHUwMDFhTlx1MDAxMXBcdTAwMTQ9c9rD9F/yvVJcIlx1MDAxNzFcdTAwMDbZYGe7q6EmttNQs7KZXHUwMDE3sVwi55zcXHUwMDE20Ivbe433XHUwMDAz1LMgMEJcdTAwMDRcdTAwMTiN0U5lI67xXHUwMDE43Fx1MDAxZuHKzpPDkYtug8xoXHJZdTielNlv/ZDsxWgy7yrTVOGIMFx0KlRrTtGHSpMrJH+NQs21XHJcdTAwMTOjcrdcXCSGo5I2QKtlXFzlqzFOq+M2ICnqIeZcdTAwMTaQnFx1MDAxOXqVXHUwMDFml9OPelxmSe8qU0EyqPyc25shSTyVK26VNtaNmTOpIfnshVx1MDAwNb0zjpJHQFK6bo/IdkzN3Mg+nVx1MDAxZZIrlXpbQPKHe4SXw/KHez1cdTAwMDakZ42p4Fx1MDAxOFRHLvTNcFx1MDAwNJGjXHUwMDEyqm3u9Z6zXq/pRiiKcChSIIhGuuGnXHUwMDFlLG6o+ZCCXHUwMDE2Ktmdi1x1MDAwNjTQ+OCTlvbLXuBwZXWpXHUwMDEwXHUwMDE4VCYu4WZcdTAwMDSikjmC0m2jcONcdTAwMWE11Fx1MDAxM0t+dVcwJyMwRzucUIZF+j9XVi4phEjuXHUwMDAwybN20tl69Kh5mFxcTYvJtMpOykmfe7CCV55cYqr0Vlx1MDAxMVNsXGYjwNFdXHUwMDE3yDWzrHFWJXOrXHUwMDAxUTJcdTAwMGKm3rO+XHUwMDE4a2UxZ/U/3kLf3HDazKVcdTAwMWJ/xjnUzrr2gtxLdKtwdGulXHUwMDE03S2/blx1MDAxNm+42YVLRTdcdTAwMDNBXG6TnOBaLlm6XHUwMDEzLFx1MDAxNeJs1nVcdTAwMWW9zlx1MDAwNnhuXHUwMDEwXGZcdTAwMDVeV1xywIk5307VVIKOOTSwyJmrnInxP2S7XFzTLsTTOyCLplNV5VW6YTiqyDF89MO9p+ODXHUwMDFm7j3MXHUwMDA0Pvikx1xcMGjVqTiiXHUwMDBlgS0wwNxSXFyuuXbaOHZpXGbzsz7IyWhAXHUwMDFig5z8UnN6XHUwMDA3ashcdTAwMTlnXHUwMDA2UctZl2GC0qzdgrFcdIexsdpo4ddTQLv+4KLP0HCOgrHUXf1aaYBOc06JjK1RMTfn4tm337z86vNnr1tEXHUwMDFh+0Ijw1ae6rCwk1Ij1LnJXqpxXHUwMDBikNrOlSRau2SH9Z5cdTAwMTS2Z10k8vlI4aTYTV1J0lWqXHUwMDEx6oHKXqsx2jqfdLZOQIpcdFHqOG088vlcdTAwMTJcdTAwMDX0vM5pa6lGR45cdTAwMWFmyWWuXHUwMDE4UHhD0dtMrH4v2Fx1MDAxOGesT8P5XHUwMDBl+Vx1MDAwZU3EJUokXHUwMDBluFwiz2bSXHUwMDA3LYZxKyDCKFx1MDAxYnRnN1x1MDAwNVx1MDAxYsWWgo1Qv/HX6FNyXHUwMDE2rsiNfSB7wcYsXGKJz8KRKLTmIFwie0KU09ZkXGaSXHUwMDA3XHUwMDFl1lx1MDAwMnQ6MjosRk6w8Dr/O1x1MDAwYsuzolpy+vKwuKjKbDh1g/joV4yvXltcdTAwMGXcy1x1MDAxNlx1MDAxOeRcdTAwMWXnXHUwMDFh0l9iosREJ2E4YFx1MDAxZU3HvTJcXFx1MDAwNOifd+eKoITgNlLWXHUwMDFiXGZt2bre191HrthVXHUwMDE5XHUwMDBlmPRUx++l4UKt80Vn67TkcChg1lFcclx1MDAxYlJcdTAwMWHpdL77XHUwMDFkZm+tXGZcdTAwMDdMefI/KleufD+F5PxOqcLBy4ijQVxuXHUwMDE1bYvOdfteyZ0mXHUwMDExan3ns39cdTAwMWHEafdk4cTWsnBeX6CMzjkq2qFYS/JgP5RxXHUwMDEz9n5cdTAwMTdx6MmkXHUwMDE0KOtTplx1MDAwMoJcdTAwMTahOZNcblTqoMWdestORTfPJ+PzWc91o4Dl6YuX3373Yt6WPVx1MDAxY1x1MDAxZOfZd2UxIFI/XHUwMDFhZK5Buqzmus8uXHUwMDFlcFx1MDAxMu2nxXmfu9Nv6TpT7Vx1MDAwN1x1MDAxNEqdl1x1MDAxMTU9XHUwMDAwq5VcdTAwMTHAtE+Prmu2O0yaXG5L+OA54uedOaJCy1xyYJxiXHUwMDE1uqYt95N37pU3mudMJvEgyF/Bur/yTCxcdTAwMTVS5UZcdTAwMGKpN53v74Vx2q31i4gkXHUwMDFis8aSr/CRRWg93lx1MDAwN82sIKqRfPSKddn3TlU6P2a1Tr2s1lwitGhOePBJ9uifM5eHmr/K1WBm//wo+6nH/inJVSVKpoXr0+F6osJcdTAwMDN2ZJBbgVx1MDAwNilcdTAwMTjW3NSilr0+XVxi1r+MIKdoXHUwMDE1R+BxeuGzXHUwMDFlXGZ37JicnFr2XHUwMDBiXHUwMDE35PVcdTAwMDLKv2RBXrBwnTHrOW9cdTAwMWZUrcqd2oJmsz7GXHUwMDA0bnm3mje+ioAql8xaUN6JXHUwMDFiXHL4Llx1MDAxYYpcdTAwMTWF965SIDVUnZx8p4Foj1x1MDAxZS3m/51OKIB6n1xyKOI6L1x1MDAwN66G7dOsKo7KnpfeRSw/XHUwMDExeMdvmshti/d409U2XHUwMDAzPkRf8ftei9iH1a+7XHUwMDFmWTnhSGiZKtyeh3WqrWhqR1x0fVxm+MZvgkZcXFx1MDAwM+frZmk85dzM5ihcctNuXHUwMDA25GzQddNKI89cdTAwMDZ2i1x1MDAwMn5cdTAwMTPuV6TbKbg/XHUwMDBi0T6nQkkp8Vx1MDAxNtKTIHi39OTP//NfWTZZT8hVJd3X2Vt5PUovjlxygleeTFTG00FcdTAwMWam51x1MDAwMXV9hL2qzHZcdTAwMTj9NoL7KWasUCw2VcjdXHUwMDEw7Lvvld9ghaPxtNxeV4bsMFTdKKqjIKjSoYBiuyx2n4zw991JjTKaWyG9KVx1MDAwNGiKXHUwMDAyLmiNVag11jXC0kxpXHUwMDA3p1lcdTAwMTNTIXuDeVx1MDAwNp268rUkNnhGplx1MDAxYZmTaUJrtUPsketulTv8IXy75KCUtlx1MDAxOFd8Y4UxSveg+KZBab4s32fDUeWs5HGPI2L/MtOQXHUwMDE1h8OgXHUwMDA0M+hcdTAwMTAgcsiZJf66YeTPvvihXHUwMDE1id+FI1Fx2t9cdTAwMTG9Z0lNXHUwMDA1+KVrXHUwMDEwXHUwMDFjXGI+6cNcdTAwMGI3nrRTeOHUz/+pylx1MDAwZcdn58PTcpJ9/sqJoE9m+Z7p+2xUTvMsezFcdTAwMTNCL11cdTAwMWZDVlx1MDAxY4zfulx1MDAwM5pcIptcXIycwkV2OCmqk4yeOrg4JsBk4+lcdP2iU7Kyi+LYSS/3XHUwMDE447/s5afbO9xslbDiKaZyl2vhXHUwMDEylOW2dsRxtZuI3LjDXHUwMDBmZO7gnnuqwI0rrFx1MDAwMp1EXHUwMDE3aLdasl5FXHUwMDA0RNZaacHv4ptcdTAwMGYuRlx1MDAxOWnukuHJtW5ccv2vm9btz//9n17Y90PYZ2V1aVB5/vozXHUwMDE4XHUwMDFmyI/fnLw4/kp88Zc/ffXki6dBXHUwMDEwXHUwMDE1zNWCXHUwMDE4tIJxzXBtVlx1MDAwNEHU5k6PXFw5qk1A9UBUkfuX2lBArdrmxMcygJJxMqtdQerrcKRcdTAwMWFcdTAwMDWGXHUwMDE5qE20rUWHtUbGdTbOne5o+mpcdTAwMTJjUGInNv5x9qqgT4J82NNcdTAwMTP6RzFcdTAwMTn22F9vWmw0junr7JO9V5yfv3LSO/euXHUwMDEzXHUwMDA1995cdTAwMGXLy6eeJMnR7M+931xc7Vx1MDAwMs7cy1l+4aff/PS/QcCL9CJ9Common Rust Mistakes — & How to Fix ThemLearn the compiler errors in simple wayMISTAKE 1Semicolons on return expressionsWrittenfnadd(a:i32, b:i32) ->i32{ a + b;} ← this semicolon is the bug!Errormismatched types: expected i32, found ()—> the semicolon turns the expression into a statement returning unit ()FixRemove the semicolon. In Rust, expressions return their value; statements (ending with;) return()(unit). No return keyword needed for the last expression.fn add(a: i32, b: i32) ->i32{ a + b }✓ fixedMISTAKE 2Using a moved valueRust transfers ownership when you assign one variable to another. After the move, the original variable is gone.Writtenlets2 = s1;println!("{}",s1); ← s1 was moved into s2, it no longer exists!Errorborrow of moved value: s1— s1 was moved into s2, ownership transferred, s1 is now invalidFixOption A — clone:let s2 = s1.clone(); println!("{}", s1);// s1 still valid, deep copy made✓ fixedOption B —> borrow:let s2 = &s1;// borrow, s1 still ownedPrefer borrowing(&s1)when you only need to read. Use.clone() ->when you need two independent owned values.MISTAKE 3Non-exhaustive match —> forgot to handle new enum variantYou added a new variant to an enum but didn't update every match block that uses it. Rust catches this at compile time.Writtenenum Direction { North, South, East, West,NorthEast}match dir { North => .., South => .., East => .., West => .. }← NorthEast not handled!Errornon-exhaustive patterns: Direction::NorthEast not covered- match must handle ALL variantsFixAdd the missing arm:match dir { North => .., South => .., East => .., West => ..,NorthEast => ..} This is the FEATURE — Rust forces you to handle every case.No silent bugs from unhandled states. Use > ..as a catch-all.MISTAKE 4Borrow checker on HashMap - mutable + immutable borrow at same timeYou hold an immutable reference to a HashMap value, then try to mutate the same HashMap. The borrow checker blocks this.Writtenlet score =scores.get("Alice"); // immutable borrow starts herescores.insert("Bob", 42);// mutable borrow — CONFLICT!Errorcannot borrow scores as mutable because it is also borrowed as immutableFixDrop the immutable borrow BEFORE mutating. Reads and writes must not overlap.{ let score = scores.get("Alice"); /* use score here */ }scores.insert("Bob", 42);// borrow already dropped —> safe!✓ reads and writes separatedKey insight:Rust's compiler IS your safety net. Every error above = a runtime crash or bug in other languages. - Sandesh Bhandari

Figure: Four common Rust mistakes and how to fix them: semicolons on return expressions, moved values, non-exhaustive match, and the borrow checker on HashMap.

6. Takeaways

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

Sandesh Bhandari, 2026

Keyboard shortcuts

Navigation

Go to About g then a
Go to Blog g then b
Go to Photography g then p
Go to Work g then w
Scroll to top g then g

Actions

Search /
Keyboard shortcuts Ctrl /

Post Lists

Navigate posts j k
Open selected post Enter

Articles

Jump to nth heading 1 9
Next heading ]
Previous heading [
Previous / Next item
Go back to list Esc
Esc to close