import base64
data = "aW1wb3J0IHNtdHBsaWIKZnJvbSBlbWFpbC5taW1lLnRleHQgaW1wb3J0IE1JTUVUZXh0CmZyb20gZW1haWwubWltZS5tdWx0aXBhcnQgaW1wb3J0IE1JTUVNdWx0aXBhcnQKZnJvbSBmbGFzayBpbXBvcnQgY3VycmVudF9hcHAKaW1wb3J0IHNzbAoKCmRlZiBzZW5kX2VtYWlsX2FzeW5jKGFwcCwgbXNnKToKICAgICIiIlNlbmQgZW1haWwgLSBrZXB0IGZvciBjb21wYXRpYmlsaXR5IGJ1dCBjYWxsZWQgc3luY2hyb25vdXNseSBub3ciIiIKICAgIHdpdGggYXBwLmFwcF9jb250ZXh0KCk6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBob3N0ID0gY3VycmVudF9hcHAuY29uZmlnWydNQUlMX1NFUlZFUiddCiAgICAgICAgICAgIHBvcnQgPSBpbnQoY3VycmVudF9hcHAuY29uZmlnWydNQUlMX1BPUlQnXSkKICAgICAgICAgICAgdXNlcm5hbWUgPSBjdXJyZW50X2FwcC5jb25maWdbJ01BSUxfVVNFUk5BTUUnXQogICAgICAgICAgICBwYXNzd29yZCA9IGN1cnJlbnRfYXBwLmNvbmZpZ1snTUFJTF9QQVNTV09SRCddCgogICAgICAgICAgICAjIGxvY2FsaG9zdCBjZXJ0IHdvbid0IG1hdGNoIGhvc3RuYW1lIOKAlCBzYWZlIHRvIHNraXAgdmVyaWZpY2F0aW9uCiAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dCgpCiAgICAgICAgICAgIGNvbnRleHQuY2hlY2tfaG9zdG5hbWUgPSBGYWxzZQogICAgICAgICAgICBjb250ZXh0LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfTk9ORQoKICAgICAgICAgICAgaWYgcG9ydCA9PSA0NjU6CiAgICAgICAgICAgICAgICBzZXJ2ZXIgPSBzbXRwbGliLlNNVFBfU1NMKGhvc3QsIHBvcnQsIGNvbnRleHQ9Y29udGV4dCwgdGltZW91dD0xMCkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHNlcnZlciA9IHNtdHBsaWIuU01UUChob3N0LCBwb3J0LCB0aW1lb3V0PTEwKQogICAgICAgICAgICAgICAgc2VydmVyLnN0YXJ0dGxzKGNvbnRleHQ9Y29udGV4dCkKCiAgICAgICAgICAgIHNlcnZlci5sb2dpbih1c2VybmFtZSwgcGFzc3dvcmQpCiAgICAgICAgICAgIHNlcnZlci5zZW5kX21lc3NhZ2UobXNnKQogICAgICAgICAgICBzZXJ2ZXIucXVpdCgpCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICBwcmludCgiRXJyb3Igc2VuZGluZyBlbWFpbDoge30iLmZvcm1hdChlKSkKCgpkZWYgc2VuZF9lbWFpbChzdWJqZWN0LCByZWNpcGllbnRzLCB0ZXh0X2JvZHksIGh0bWxfYm9keT1Ob25lKToKICAgICIiIlNlbmQgZW1haWwgc3luY2hyb25vdXNseSBmb3IgcmVsaWFibGUgZGVsaXZlcnkuCiAgICBTTVRQIHRvIGxvY2FsaG9zdCBjb21wbGV0ZXMgaW4gdW5kZXIgMSBzZWNvbmQg4oCUIHRocmVhZGluZyB3YXMgY2F1c2luZwogICAgdW5wcmVkaWN0YWJsZSBkZWxheXMgYW5kIHNpbGVudCBmYWlsdXJlcyBpbiBQYXNzZW5nZXIuIiIiCiAgICBtc2cgPSBNSU1FTXVsdGlwYXJ0KCdhbHRlcm5hdGl2ZScpCiAgICBtc2dbJ1N1YmplY3QnXSA9IHN1YmplY3QKICAgIG1zZ1snRnJvbSddID0gY3VycmVudF9hcHAuY29uZmlnWydNQUlMX1VTRVJOQU1FJ10KICAgIG1zZ1snVG8nXSA9ICcsICcuam9pbihyZWNpcGllbnRzKQoKICAgIHBhcnQxID0gTUlNRVRleHQodGV4dF9ib2R5LCAncGxhaW4nKQogICAgbXNnLmF0dGFjaChwYXJ0MSkKCiAgICBpZiBodG1sX2JvZHk6CiAgICAgICAgcGFydDIgPSBNSU1FVGV4dChodG1sX2JvZHksICdodG1sJykKICAgICAgICBtc2cuYXR0YWNoKHBhcnQyKQoKICAgIHNlbmRfZW1haWxfYXN5bmMoY3VycmVudF9hcHAuX2dldF9jdXJyZW50X29iamVjdCgpLCBtc2cpCgoKZGVmIHNlbmRfdmVyaWZpY2F0aW9uX2VtYWlsKGVtYWlsLCBjb2RlKToKICAgICIiIlNlbmQgMkZBIGxvZ2luIHZlcmlmaWNhdGlvbiBjb2RlIiIiCiAgICBzdWJqZWN0ID0gIllvdXIgR2V0Rm91bmRMb2NhbCBWZXJpZmljYXRpb24gQ29kZSIKCiAgICB0ZXh0X2JvZHkgPSAiIiIKWW91ciB2ZXJpZmljYXRpb24gY29kZSBpczoge2NvZGV9CgpUaGlzIGNvZGUgZXhwaXJlcyBpbiAxNSBtaW51dGVzLgpEbyBub3Qgc2hhcmUgdGhpcyBjb2RlIHdpdGggYW55b25lLgogICAgIiIiLmZvcm1hdChjb2RlPWNvZGUpCgogICAgaHRtbF9ib2R5ID0gIiIiCjxodG1sPgogICAgPGJvZHkgc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsiPgogICAgICAgIDxoMj5HZXRGb3VuZExvY2FsIFZlcmlmaWNhdGlvbjwvaDI+CiAgICAgICAgPHA+WW91ciB2ZXJpZmljYXRpb24gY29kZSBpczo8L3A+CiAgICAgICAgPGgxIHN0eWxlPSJjb2xvcjogIzFlM2E4YTsgbGV0dGVyLXNwYWNpbmc6IDJweDsiPntjb2RlfTwvaDE+CiAgICAgICAgPHA+VGhpcyBjb2RlIGV4cGlyZXMgaW4gPHN0cm9uZz4xNSBtaW51dGVzPC9zdHJvbmc+LjwvcD4KICAgICAgICA8cCBzdHlsZT0iY29sb3I6ICNlNzRjM2M7Ij48c3Ryb25nPkRvIG5vdCBzaGFyZSB0aGlzIGNvZGUgd2l0aCBhbnlvbmUuPC9zdHJvbmc+PC9wPgogICAgICAgIDxocj4KICAgICAgICA8cCBzdHlsZT0iY29sb3I6ICM3ZjhjOGQ7IGZvbnQtc2l6ZTogMTJweDsiPgogICAgICAgICAgICBJZiB5b3UgZGlkbid0IHJlcXVlc3QgdGhpcyBjb2RlLCBwbGVhc2UgaWdub3JlIHRoaXMgZW1haWwuCiAgICAgICAgPC9wPgogICAgPC9ib2R5Pgo8L2h0bWw+CiAgICAiIiIuZm9ybWF0KGNvZGU9Y29kZSkKCiAgICBzZW5kX2VtYWlsKHN1YmplY3QsIFtlbWFpbF0sIHRleHRfYm9keSwgaHRtbF9ib2R5KQoKCmRlZiBzZW5kX2FjY291bnRfdmVyaWZpY2F0aW9uX2VtYWlsKGVtYWlsLCB1c2VyX2lkLCB0b2tlbik6CiAgICAiIiJTZW5kIHNpZ251cCBlbWFpbC12ZXJpZmljYXRpb24gbGluayAob25lLXRpbWUsIGFjdGl2YXRlcyB0aGUgYWNjb3VudCkiIiIKICAgIHZlcmlmeV91cmwgPSAiaHR0cHM6Ly9nZXRmb3VuZGxvY2FsLmFwcC9hdXRoL3ZlcmlmeS1lbWFpbC97dWlkfS97dG9rZW59Ii5mb3JtYXQoCiAgICAgICAgdWlkPXVzZXJfaWQsIHRva2VuPXRva2VuCiAgICApCiAgICBzdWJqZWN0ID0gIlZlcmlmeSB5b3VyIGVtYWlsIC0gR2V0Rm91bmRMb2NhbCIKCiAgICB0ZXh0X2JvZHkgPSAiIiIKV2VsY29tZSB0byBHZXRGb3VuZExvY2FsIQoKUGxlYXNlIGNvbmZpcm0geW91ciBlbWFpbCBhZGRyZXNzIGJ5IG9wZW5pbmcgdGhlIGxpbmsgYmVsb3c6Cnt1cmx9CgpUaGlzIGxpbmsgZXhwaXJlcyBpbiAyNCBob3Vycy4KSWYgeW91IGRpZG4ndCBjcmVhdGUgYW4gYWNjb3VudCwgeW91IGNhbiBzYWZlbHkgaWdub3JlIHRoaXMgZW1haWwuCiAgICAiIiIuZm9ybWF0KHVybD12ZXJpZnlfdXJsKQoKICAgIGh0bWxfYm9keSA9ICIiIgo8aHRtbD4KICAgIDxib2R5IHN0eWxlPSJmb250LWZhbWlseTogQXJpYWwsIHNhbnMtc2VyaWY7Ij4KICAgICAgICA8aDI+V2VsY29tZSB0byBHZXRGb3VuZExvY2FsITwvaDI+CiAgICAgICAgPHA+UGxlYXNlIGNvbmZpcm0geW91ciBlbWFpbCBhZGRyZXNzIHRvIGFjdGl2YXRlIHlvdXIgYWNjb3VudDo8L3A+CiAgICAgICAgPHA+CiAgICAgICAgICAgIDxhIGhyZWY9Int1cmx9IiBzdHlsZT0iCiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMGQ5NDg4OwogICAgICAgICAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgICAgICAgICAgcGFkZGluZzogMTJweCAyNHB4OwogICAgICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgICAgICAiPlZlcmlmeSBNeSBFbWFpbDwvYT4KICAgICAgICA8L3A+CiAgICAgICAgPHA+T3IgY29weSB0aGlzIGxpbms6IDxjb2RlPnt1cmx9PC9jb2RlPjwvcD4KICAgICAgICA8cCBzdHlsZT0iY29sb3I6ICNlNzRjM2M7Ij5UaGlzIGxpbmsgZXhwaXJlcyBpbiA8c3Ryb25nPjI0IGhvdXJzPC9zdHJvbmc+LjwvcD4KICAgICAgICA8aHI+CiAgICAgICAgPHAgc3R5bGU9ImNvbG9yOiAjN2Y4YzhkOyBmb250LXNpemU6IDEycHg7Ij4KICAgICAgICAgICAgSWYgeW91IGRpZG4ndCBjcmVhdGUgYW4gYWNjb3VudCwgeW91IGNhbiBzYWZlbHkgaWdub3JlIHRoaXMgZW1haWwuCiAgICAgICAgPC9wPgogICAgPC9ib2R5Pgo8L2h0bWw+CiAgICAiIiIuZm9ybWF0KHVybD12ZXJpZnlfdXJsKQoKICAgIHNlbmRfZW1haWwoc3ViamVjdCwgW2VtYWlsXSwgdGV4dF9ib2R5LCBodG1sX2JvZHkpCgoKZGVmIHNlbmRfcGFzc3dvcmRfcmVzZXRfZW1haWwoZW1haWwsIHVzZXJfaWQsIHRva2VuKToKICAgICIiIlNlbmQgcGFzc3dvcmQgcmVzZXQgZW1haWwiIiIKICAgIHJlc2V0X3VybCA9ICJodHRwczovL2dldGZvdW5kbG9jYWwuYXBwL2F1dGgvcmVzZXQtcGFzc3dvcmQve3VpZH0ve3Rva2VufSIuZm9ybWF0KAogICAgICAgIHVpZD11c2VyX2lkLCB0b2tlbj10b2tlbgogICAgKQogICAgc3ViamVjdCA9ICJSZXNldCBZb3VyIEdldEZvdW5kTG9jYWwgUGFzc3dvcmQiCgogICAgdGV4dF9ib2R5ID0gIiIiCkNsaWNrIHRoZSBsaW5rIGJlbG93IHRvIHJlc2V0IHlvdXIgcGFzc3dvcmQ6Cnt1cmx9CgpUaGlzIGxpbmsgZXhwaXJlcyBpbiAxIGhvdXIuCklmIHlvdSBkaWRuJ3QgcmVxdWVzdCB0aGlzLCBwbGVhc2UgaWdub3JlIHRoaXMgZW1haWwuCiAgICAiIiIuZm9ybWF0KHVybD1yZXNldF91cmwpCgogICAgaHRtbF9ib2R5ID0gIiIiCjxodG1sPgogICAgPGJvZHkgc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsiPgogICAgICAgIDxoMj5QYXNzd29yZCBSZXNldCBSZXF1ZXN0PC9oMj4KICAgICAgICA8cD5DbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIHJlc2V0IHlvdXIgcGFzc3dvcmQ6PC9wPgogICAgICAgIDxwPgogICAgICAgICAgICA8YSBocmVmPSJ7dXJsfSIgc3R5bGU9IgogICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzFlM2E4YTsKICAgICAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICAgICAgICAgIHBhZGRpbmc6IDEwcHggMjBweDsKICAgICAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICAgICAgIj5SZXNldCBQYXNzd29yZDwvYT4KICAgICAgICA8L3A+CiAgICAgICAgPHA+T3IgY29weSB0aGlzIGxpbms6IDxjb2RlPnt1cmx9PC9jb2RlPjwvcD4KICAgICAgICA8cCBzdHlsZT0iY29sb3I6ICNlNzRjM2M7Ij5UaGlzIGxpbmsgZXhwaXJlcyBpbiA8c3Ryb25nPjEgaG91cjwvc3Ryb25nPi48L3A+CiAgICAgICAgPGhyPgogICAgICAgIDxwIHN0eWxlPSJjb2xvcjogIzdmOGM4ZDsgZm9udC1zaXplOiAxMnB4OyI+CiAgICAgICAgICAgIElmIHlvdSBkaWRuJ3QgcmVxdWVzdCBhIHBhc3N3b3JkIHJlc2V0LCBwbGVhc2UgaWdub3JlIHRoaXMgZW1haWwuCiAgICAgICAgPC9wPgogICAgPC9ib2R5Pgo8L2h0bWw+CiAgICAiIiIuZm9ybWF0KHVybD1yZXNldF91cmwpCgogICAgc2VuZF9lbWFpbChzdWJqZWN0LCBbZW1haWxdLCB0ZXh0X2JvZHksIGh0bWxfYm9keSkK"
with open('app/utils/email_service.py', 'wb') as f:
    f.write(base64.b64decode(data))
print('Done - email_service.py updated (synchronous, no threading)')
