In reference to #911612: Hidden attachments in some email clients I would like to request to improve the support of multipart messages with multipart/mixed content-type.
It appears that not every mail client can display attachments nested in a 'multipart/related'. In order to make this work we should wrap the whole message in a 'multipart/mixed'. However currently SMTP module's support for this content-type is limited and can't handle this kind of nesting:
alternative body with embedded objects and attachment
-----------------------------------------------------
Content-Type: multipart/mixed
--Content-Type: multipart/related
----Content-Type: multipart/alternative
------Content-Type: text/plain
------Content-Type: text/html
----Content-Type: image/png
--Content-Type: application/msword
This works with the default Mime Mail engine, but, since a lot of people are using Mime Mail with SMTP and it has more than twelve thousand users, I would rather see the needed support in SMTP module, before making this change in Mime Mail.
| Comment | File | Size | Author |
|---|---|---|---|
| #9 | smtp-improve-multipart-mixed-msg-1044534-9.patch | 1.1 KB | pounard |
| #4 | smtp-improve-multipart-mixed-msg-1044534-4.patch | 999 bytes | regilero |
| #1 | smtp_1044534_01.patch | 3.09 KB | sgabe |
Comments
Comment #1
sgabe commentedInitial patch to support Mime Mail beyond the alpha8 version. Attachments and embedded images seems to not work.
Comment #2
oneoftwo commentedsubscribe. this is important, unfortunately can't work on it myself currently.
Comment #3
mattconnolly commentedsubscribe too. This no doubt has quite a bit of overlap in areas where I made a patch to fix issue #1189940.
See http://drupal.org/node/1189940
Comment #4
regilero commented+1
This is an ugly patch for 7.x version, where at least Drupal is not crashing on empty body, and it seems I have my multipart/mixed/[multipart/related[multipart/alternative]] message sent.
Real patch would need functions on this code, recursive functions. As you can make multipart things inside multiparts as much as you want. Or maybe a way to avoid altering mails prepared by mimemail?
Comment #5
josesanmartin commentedregilero, how do you recommend testing this patch? In which way does one reproduce the error?
Comment #6
regilero commentedWe have a mail produced by mimemail with:
In more details:
MIME-Version: 1.0
Content-Transfer-Encoding: 8Bit
Content-Type: multipart/mixed; charset="UTF-8"
This is a multi-part message in MIME format.
--034aa9060128d626e68ed1c0f521b4d6
Content-Type: multipart/related;
type="multipart/alternative";
boundary="cb7931a7b35d7e5481f66361367ff49f"
Content-Transfer-Encoding: 8bit
--cb7931a7b35d7e5481f66361367ff49f
Content-Type: multipart/alternative;
boundary="7d4e902a39f0bd9833bee33a5879daf9"
Content-Transfer-Encoding: 8bit
--7d4e902a39f0bd9833bee33a5879daf9
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
(text)
--7d4e902a39f0bd9833bee33a5879daf9
Content-Type: text/html;
(html)
--7d4e902a39f0bd9833bee33a5879daf9--
--cb7931a7b35d7e5481f66361367ff49f
Content-Type: image/gif
Content-Transfer-Encoding: base64
(...)
--cb7931a7b35d7e5481f66361367ff49f
Content-Type: image/gif
(...)
--cb7931a7b35d7e5481f66361367ff49f
Content-Type: image/gif;
(...)
--cb7931a7b35d7e5481f66361367ff49f
Content-Type: image/gif;
(...)
--cb7931a7b35d7e5481f66361367ff49f
Content-Type: image/gif;
(...)
--cb7931a7b35d7e5481f66361367ff49f
Content-Type: image/gif;
(...)
--cb7931a7b35d7e5481f66361367ff49f
Content-Type: image/gif;
(...)
--cb7931a7b35d7e5481f66361367ff49f
Content-Type: image/gif;
(...)
--cb7931a7b35d7e5481f66361367ff49f--
--034aa9060128d626e68ed1c0f521b4d6--
This fails with the empty body message. Now, current implementation should be reviewed to handle such messages. Content-Type detection should not be strpos() function calls but instead a fine analysis of block headers, and Blocks should be handled recursively, as the mime block imbrications can be used in a lot of different ways.
Comment #7
yonailoDoes anybody work on this ?
Comment #8
pounardI think that #1822870: Smtp breaks emails with multipart bodies is more or less linked to this issue. See my comment https://www.drupal.org/node/1822870#comment-9448725 where I did something which appears to be a side effect of the patch in #4.
Comment #9
pounardHere is an even uglier patch than #4.
Comment #11
zambrey commentedTried both patches but without much success.
At least the mail is sent but the body is still empty.
Comment #12
pounardYes, I just stopped using the SMTP module at all and wrote my own code for SMTP support.
Comment #13
amir_razavi commentedI have similar problem (get update messages very similar to #6), tried both patches without any luck! This is what I get:
This is a multi-part message in MIME format.
--725439805183e20399bc7143bf77b1b851c4ca862
Content-Type: multipart/related;
type="multipart/alternative";
boundary="f4fea373259afd930de9ac04bcbda73664934aa91"
Content-Transfer-Encoding: 8bit
--f4fea373259afd930de9ac04bcbda73664934aa91
Content-Type: multipart/alternative;
boundary="db4194566ea1afdb5b8c19188fbcb8b47ff8793d0"
Content-Transfer-Encoding: 8bit
--db4194566ea1afdb5b8c19188fbcb8b47ff8793d0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
--db4194566ea1afdb5b8c19188fbcb8b47ff8793d0
Content-Type: text/html; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: base64
PGh0bWw+CiAgPGhlYWQ+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRl
bnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KICAgICAgICA8c3R5bGUgdHlwZT0idGV4
dC9jc3MiPgogICAgICA8IS0tCiAgICAgIGFydGljbGUsYXNpZGUsZGV0YWlscyxmaWdjYXB0aW9u
LGZpZ3VyZSxmb290ZXIsaGVhZGVyLG1haW4sbmF2LHNlY3Rpb24sc3VtbWFyeXtkaXNwbGF5OmJs
b2NrO31hdWRpbyxjYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5s
aW5lOyp6b29tOjE7fWF1ZGlvOm5vdChbY29udHJvbHNdKXtkaXNwbGF5Om5vbmU7aGVpZ2h0OjA7
fVtoaWRkZW5de2Rpc3BsYXk6bm9uZTt9aHRtbHtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwi
RGVqYVZ1IFNhbnMiLHNhbnMtc2VyaWY7Zm9udC1zaXplOjc1JTtmb250LXNpemU6ODcuNSU7Zm9u
dC1zaXplOjEwMCU7LW1zLXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTstd2Via2l0LXRleHQtc2l6ZS1h
ZGp1c3Q6MTAwJTtsaW5lLWhlaWdodDoxLjVlbTt9YnV0dG9uLGlucHV0LHNlbGVjdCx0ZXh0YXJl
YXtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwiRGVqYVZ1IFNhbnMiLHNhbnMtc2VyaWY7fWJv
ZHl7bWFyZ2luOjA7cGFkZGluZzowO31hOmxpbmt7fWE6dmlzaXRlZHt9YTpob3ZlcixhOmZvY3Vz
e31hOmFjdGl2ZXt9YTpmb2N1c3tvdXRsaW5lOnRoaW4gZG90dGVkO31hOmFjdGl2ZSxhOmhvdmVy
e291dGxpbmU6MDt9cCxwcmV7bWFyZ2luOjEuNWVtIDA7fWJsb2NrcXVvdGV7bWFyZ2luOjEuNWVt
CjMwcHg7fWgxe2ZvbnQtc2l6ZToyZW07bGluZS1oZWlnaHQ6MS41ZW07bWFyZ2luLXRvcDowLjc1
ZW07bWFyZ2luLWJvdHRvbTowLjc1ZW07fWgye2ZvbnQtc2l6ZToxLjVlbTtsaW5lLWhlaWdodDoy
ZW07bWFyZ2luLXRvcDoxZW07bWFyZ2luLWJvdHRvbToxZW07fWgze2ZvbnQtc2l6ZToxLjE3ZW07
bGluZS1oZWlnaHQ6MS4yODIwNWVtO21hcmdpbi10b3A6MS4yODIwNWVtO21hcmdpbi1ib3R0b206
MS4yODIwNWVtO31oNHtmb250LXNpemU6MWVtO2xpbmUtaGVpZ2h0OjEuNWVtO21hcmdpbi10b3A6
MS41ZW07bWFyZ2luLWJvdHRvbToxLjVlbTt9aDV7Zm9udC1zaXplOjAuODNlbTtsaW5lLWhlaWdo
dDoxLjgwNzIzZW07bWFyZ2luLXRvcDoxLjgwNzIzZW07bWFyZ2luLWJvdHRvbToxLjgwNzIzZW07
fWg2e2ZvbnQtc2l6ZTowLjY3ZW07bGluZS1oZWlnaHQ6Mi4yMzg4MWVtO21hcmdpbi10b3A6Mi4y
Mzg4MWVtO21hcmdpbi1ib3R0b206Mi4yMzg4MWVtO31hYmJyW3RpdGxlXXtib3JkZXItYm90dG9t
OjFweCBkb3R0ZWQ7fWIsc3Ryb25ne2ZvbnQtd2VpZ2h0OmJvbGQ7fWRmbntmb250LXN0eWxlOml0
YWxpYzt9aHJ7LXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy1tb3otYm94LXNpemluZzpj
b250ZW50LWJveDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2hlaWdodDowO2JvcmRlcjoxcHggc29s
aWQKIzY2NjtwYWRkaW5nLWJvdHRvbTotMXB4O21hcmdpbjoxLjVlbSAwO31tYXJre2JhY2tncm91
bmQ6I2ZmMDtjb2xvcjojMDAwO31jb2RlLGtiZCxwcmUsc2FtcCx0dCx2YXJ7Zm9udC1mYW1pbHk6
IkNvdXJpZXIgTmV3IiwiRGVqYVZ1IFNhbnMgTW9ubyIsbW9ub3NwYWNlLHNhbnMtc2VyaWY7X2Zv
bnQtZmFtaWx5Oidjb3VyaWVyIG5ldycsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxZW07bGluZS1oZWln
aHQ6MS41ZW07fXByZXt3aGl0ZS1zcGFjZTpwcmU7d2hpdGUtc3BhY2U6cHJlLXdyYXA7d29yZC13
cmFwOmJyZWFrLXdvcmQ7fXF7cXVvdGVzOiJcMjAxQyIgIlwyMDFEIiAiXDIwMTgiICJcMjAxOSI7
fXNtYWxse2ZvbnQtc2l6ZTo4MCU7fXN1YixzdXB7Zm9udC1zaXplOjc1JTtsaW5lLWhlaWdodDow
O3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO31zdXB7dG9wOi0wLjVl
bTt9c3Vie2JvdHRvbTotMC4yNWVtO31kbCxtZW51LG9sLHVse21hcmdpbjoxLjVlbSAwO31vbCBv
bCxvbCB1bCx1bCBvbCx1bCB1bHttYXJnaW46MDt9ZGR7bWFyZ2luOjAgMCAwIDMwcHg7fW1lbnUs
b2wsdWx7cGFkZGluZzowIDAgMCAzMHB4O31uYXYgdWwsbmF2Cm9se2xpc3Qtc3R5bGU6bm9uZTts
aXN0LXN0eWxlLWltYWdlOm5vbmU7fWltZ3tib3JkZXI6MDstbXMtaW50ZXJwb2xhdGlvbi1tb2Rl
OmJpY3ViaWM7bWF4LXdpZHRoOjEwMCU7aGVpZ2h0OmF1dG87d2lkdGg6YXV0bzt9c3ZnOm5vdCg6
cm9vdCl7b3ZlcmZsb3c6aGlkZGVuO31maWd1cmV7bWFyZ2luOjA7fWZvcm17bWFyZ2luOjA7fSNz
ZWFyY2gtYmxvY2stZm9ybXttYXJnaW46MDtmbG9hdDpyaWdodDt9ZmllbGRzZXR7Ym9yZGVyOjFw
eCBzb2xpZCAjYzBjMGMwO21hcmdpbjowIDJweDtwYWRkaW5nOjAuNWVtIDAuNjI1ZW0gMWVtO31s
ZWdlbmR7Ym9yZGVyOjA7cGFkZGluZzowOyptYXJnaW4tbGVmdDotN3B4O31idXR0b24saW5wdXQs
c2VsZWN0LHRleHRhcmVhe2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOjEwMCU7bWFyZ2lu
OjA7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7KnZlcnRpY2FsLWFsaWduOm1pZGRsZTttYXgtd2lk
dGg6MTAwJTstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9y
ZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7fWJ1dHRvbixpbnB1dHtsaW5lLWhlaWdodDpu
b3JtYWw7fWJ1dHRvbixzZWxlY3R7dGV4dC10cmFuc2Zvcm06bm9uZTt9YnV0dG9uLGh0bWwKaW5w
dXRbdHlwZT0iYnV0dG9uIl0saW5wdXRbdHlwZT0icmVzZXQiXSxpbnB1dFt0eXBlPSJzdWJtaXQi
XXstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9uO2N1cnNvcjpwb2ludGVyOypvdmVyZmxvdzp2aXNp
YmxlO31idXR0b25bZGlzYWJsZWRdLGh0bWwKaW5wdXRbZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0
O31pbnB1dFt0eXBlPSJjaGVja2JveCJdLGlucHV0W3R5cGU9InJhZGlvIl17LXdlYmtpdC1ib3gt
c2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpi
b3JkZXItYm94O3BhZGRpbmc6MDsqaGVpZ2h0OjEzcHg7KndpZHRoOjEzcHg7fWlucHV0W3R5cGU9
InNlYXJjaCJdey13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7LXdlYmtpdC1ib3gtc2l6aW5n
OmNvbnRlbnQtYm94Oy1tb3otYm94LXNpemluZzpjb250ZW50LWJveDtib3gtc2l6aW5nOmNvbnRl
bnQtYm94O31pbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRv
bixpbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0
LWFwcGVhcmFuY2U6bm9uZTt9YnV0dG9uOjotbW96LWZvY3VzLWlubmVyLGlucHV0OjotbW96LWZv
Y3VzLWlubmVye2JvcmRlcjowO3BhZGRpbmc6MDt9dGV4dGFyZWF7b3ZlcmZsb3c6YXV0bzt2ZXJ0
aWNhbC1hbGlnbjp0b3A7fWxhYmVse2Rpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6Ym9sZDt9dGFi
bGV7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2JvcmRlci1zcGFjaW5nOjA7bWFyZ2luLXRvcDox
LjVlbTttYXJnaW4tYm90dG9tOjEuNWVtO31pbnB1dC5mb3JtLXRleHR7bWF4LXdpZHRoOjI1MHB4
O21pbi13aWR0aDoxMDBweDt3aWR0aDoyNTBweDt9LnZpZXctY29udGVudAp0YWJsZXt3aWR0aDo5
NSU7fS5maWx0ZXItd3JhcHBlcntkaXNwbGF5Om5vbmU7fQojcGFnZSwucmVnaW9uLWJvdHRvbXtt
YXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDphdXRvO21heC13aWR0aDoxNzAwcHg7fSNoZWFk
ZXIsI2NvbnRlbnQsI25hdmlnYXRpb24sLnJlZ2lvbi1zaWRlYmFyLWZpcnN0LC5yZWdpb24tc2lk
ZWJhci1zZWNvbmQsI2Zvb3RlcntwYWRkaW5nLWxlZnQ6MTBweDtwYWRkaW5nLXJpZ2h0OjEwcHg7
LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7
LW1zLWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d29yZC13cmFw
OmJyZWFrLXdvcmQ7KmJlaGF2aW9yOnVybCgiL3BhdGgvdG8vYm94c2l6aW5nLmh0YyIpO19kaXNw
bGF5OmlubGluZTtfb3ZlcmZsb3c6aGlkZGVuO19vdmVyZmxvdy15OnZpc2libGU7fSNoZWFkZXIs
I21haW4sI2Zvb3RlcnsqcG9zaXRpb246cmVsYXRpdmU7Knpvb206MTt9I2hlYWRlcjpiZWZvcmUs
I2hlYWRlcjphZnRlciwjbWFpbjpiZWZvcmUsI21haW46YWZ0ZXIsI2Zvb3RlcjpiZWZvcmUsI2Zv
b3RlcjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6dGFibGU7fSNoZWFkZXI6YWZ0ZXIsI21haW46
YWZ0ZXIsI2Zvb3RlcjphZnRlcntjbGVhcjpib3RoO31AbWVkaWEgYWxsIGFuZAoobWluLXdpZHRo
OjQ4MHB4KXsjbWFpbntwYWRkaW5nLXRvcDozZW07cG9zaXRpb246cmVsYXRpdmU7fSNuYXZpZ2F0
aW9ue3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2hlaWdodDozZW07d2lkdGg6MTAwJTt9fUBtZWRp
YSBhbGwgYW5kIChtaW4td2lkdGg6NDgwcHgpIGFuZCAobWF4LXdpZHRoOjEwMjNweCl7LnNpZGVi
YXItZmlyc3QgI2NvbnRlbnR7ZmxvYXQ6bGVmdDt3aWR0aDo2Ni42NjY2NyU7bWFyZ2luLWxlZnQ6
MzMuMzMzMzMlO21hcmdpbi1yaWdodDotMTAwJTt9LnNpZGViYXItZmlyc3QgLnJlZ2lvbi1zaWRl
YmFyLWZpcnN0e2Zsb2F0OmxlZnQ7d2lkdGg6MzMuMzMzMzMlO21hcmdpbi1sZWZ0OjAlO21hcmdp
bi1yaWdodDotMzMuMzMzMzMlO30uc2lkZWJhci1zZWNvbmQgI2NvbnRlbnR7ZmxvYXQ6bGVmdDt3
aWR0aDo3OSU7bWFyZ2luLWxlZnQ6MCU7bWFyZ2luLXJpZ2h0Oi03OSU7fS5zaWRlYmFyLXNlY29u
ZCAucmVnaW9uLXNpZGViYXItc2Vjb25ke2Zsb2F0OmxlZnQ7d2lkdGg6MjAlO21hcmdpbi1sZWZ0
OjgwJTttYXJnaW4tcmlnaHQ6LTEwMCU7Zm9udC1zaXplOjY1JTt9LnR3by1zaWRlYmFycyAjY29u
dGVudHtmbG9hdDpsZWZ0O3dpZHRoOjY2LjY2NjY3JTttYXJnaW4tbGVmdDozMy4zMzMzMyU7bWFy
Z2luLXJpZ2h0Oi0xMDAlO30udHdvLXNpZGViYXJzCi5yZWdpb24tc2lkZWJhci1maXJzdHtmbG9h
dDpsZWZ0O3dpZHRoOjMzLjMzMzMzJTttYXJnaW4tbGVmdDowJTttYXJnaW4tcmlnaHQ6LTMzLjMz
MzMzJTt9LnR3by1zaWRlYmFycyAucmVnaW9uLXNpZGViYXItc2Vjb25ke2Rpc3BsYXk6bm9uZTt9
LnR3by1zaWRlYmFycyAucmVnaW9uLXNpZGViYXItc2Vjb25kIC5ibG9ja3twYWRkaW5nLWxlZnQ6
MTBweDtwYWRkaW5nLXJpZ2h0OjEwcHg7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LXdlYmtp
dC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1zLWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6
aW5nOmJvcmRlci1ib3g7d29yZC13cmFwOmJyZWFrLXdvcmQ7KmJlaGF2aW9yOnVybCgiL3BhdGgv
dG8vYm94c2l6aW5nLmh0YyIpO19kaXNwbGF5OmlubGluZTtfb3ZlcmZsb3c6aGlkZGVuO19vdmVy
Zmxvdy15OnZpc2libGU7fS50d28tc2lkZWJhcnMgLnJlZ2lvbi1zaWRlYmFyLXNlY29uZCAuYmxv
Y2s6bnRoLWNoaWxkKDNuKzEpe2Zsb2F0OmxlZnQ7d2lkdGg6MzMuMzMzMzMlO21hcmdpbi1sZWZ0
OjAlO21hcmdpbi1yaWdodDotMzMuMzMzMzMlO2NsZWFyOmxlZnQ7fS50d28tc2lkZWJhcnMgLnJl
Z2lvbi1zaWRlYmFyLXNlY29uZAouYmxvY2s6bnRoLWNoaWxkKDNuKzIpe2Zsb2F0OmxlZnQ7d2lk
dGg6MzMuMzMzMzMlO21hcmdpbi1sZWZ0OjMzLjMzMzMzJTttYXJnaW4tcmlnaHQ6LTY2LjY2NjY3
JTt9LnR3by1zaWRlYmFycyAucmVnaW9uLXNpZGViYXItc2Vjb25kIC5ibG9jazpudGgtY2hpbGQo
M24pe2Zsb2F0OmxlZnQ7d2lkdGg6MzMuMzMzMzMlO21hcmdpbi1sZWZ0OjY2LjY2NjY3JTttYXJn
aW4tcmlnaHQ6LTEwMCU7fX1AbWVkaWEgYWxsIGFuZCAobWluLXdpZHRoOjEwMjRweCl7LnNpZGVi
YXItZmlyc3QgI2NvbnRlbnR7ZmxvYXQ6bGVmdDt3aWR0aDo4MCU7bWFyZ2luLWxlZnQ6MjAlO21h
cmdpbi1yaWdodDotMTAwJTt9LnNpZGViYXItZmlyc3QgLnJlZ2lvbi1zaWRlYmFyLWZpcnN0e2Zs
b2F0OmxlZnQ7d2lkdGg6MjAlO21hcmdpbi1sZWZ0OjAlO21hcmdpbi1yaWdodDotMjAlO30uc2lk
ZWJhci1zZWNvbmQgI2NvbnRlbnR7ZmxvYXQ6bGVmdDt3aWR0aDo4MCU7bWFyZ2luLWxlZnQ6MCU7
bWFyZ2luLXJpZ2h0Oi04MCU7fS5zaWRlYmFyLXNlY29uZCAucmVnaW9uLXNpZGViYXItc2Vjb25k
e2Zsb2F0OmxlZnQ7d2lkdGg6MjAlO21hcmdpbi1sZWZ0OjgwJTttYXJnaW4tcmlnaHQ6LTEwMCU7
fS50d28tc2lkZWJhcnMgI2NvbnRlbnR7ZmxvYXQ6bGVmdDt3aWR0aDo2MCU7bWFyZ2luLWxlZnQ6
MjAlO21hcmdpbi1yaWdodDotODAlO30udHdvLXNpZGViYXJzCi5yZWdpb24tc2lkZWJhci1maXJz
dHtmbG9hdDpsZWZ0O3dpZHRoOjIwJTttYXJnaW4tbGVmdDowJTttYXJnaW4tcmlnaHQ6LTIwJTt9
LnR3by1zaWRlYmFycyAucmVnaW9uLXNpZGViYXItc2Vjb25ke2Zsb2F0OmxlZnQ7d2lkdGg6MTUl
O21hcmdpbi1sZWZ0Ojg1JTttYXJnaW4tcmlnaHQ6LTEwMCU7fS5yZWdpb24tc2lkZWJhci1zZWNv
bmR7Zm9udC1zaXplOjkwJTt9fS5yZWdpb24tc2lkZWJhci1maXJzdCBpbnB1dC5mb3JtLXRleHR7
ZmxvYXQ6bGVmdDt3aWR0aDo4NSU7bWFyZ2luLWxlZnQ6MCU7bWFyZ2luLXJpZ2h0Oi0xMCU7fQou
d2l0aC13aXJlZnJhbWVzICNoZWFkZXIsLndpdGgtd2lyZWZyYW1lcyAjbWFpbiwud2l0aC13aXJl
ZnJhbWVzICNjb250ZW50LC53aXRoLXdpcmVmcmFtZXMgI25hdmlnYXRpb24sLndpdGgtd2lyZWZy
YW1lcyAucmVnaW9uLXNpZGViYXItZmlyc3QsLndpdGgtd2lyZWZyYW1lcyAucmVnaW9uLXNpZGVi
YXItc2Vjb25kLC53aXRoLXdpcmVmcmFtZXMgI2Zvb3Rlciwud2l0aC13aXJlZnJhbWVzIC5yZWdp
b24tYm90dG9te291dGxpbmU6MXB4IHNvbGlkICNjY2M7fS5sdC1pZTggLndpdGgtd2lyZWZyYW1l
cyAjaGVhZGVyLC5sdC1pZTggLndpdGgtd2lyZWZyYW1lcyAjbWFpbiwubHQtaWU4IC53aXRoLXdp
cmVmcmFtZXMgI2NvbnRlbnQsLmx0LWllOCAud2l0aC13aXJlZnJhbWVzICNuYXZpZ2F0aW9uLC5s
dC1pZTggLndpdGgtd2lyZWZyYW1lcyAucmVnaW9uLXNpZGViYXItZmlyc3QsLmx0LWllOCAud2l0
aC13aXJlZnJhbWVzIC5yZWdpb24tc2lkZWJhci1zZWNvbmQsLmx0LWllOCAud2l0aC13aXJlZnJh
bWVzICNmb290ZXIsLmx0LWllOCAud2l0aC13aXJlZnJhbWVzIC5yZWdpb24tYm90dG9te2JvcmRl
cjoxcHggc29saWQgI2NjYzt9LmVsZW1lbnQtaW52aXNpYmxlLC5lbGVtZW50LWZvY3VzYWJsZSwj
bmF2aWdhdGlvbiAuYmxvY2stbWVudSAuYmxvY2tfX3RpdGxlLCNuYXZpZ2F0aW9uIC5ibG9jay1t
ZW51LWJsb2NrCi5ibG9ja19fdGl0bGV7cG9zaXRpb246YWJzb2x1dGUgIWltcG9ydGFudDtoZWln
aHQ6MXB4O3dpZHRoOjFweDtvdmVyZmxvdzpoaWRkZW47Y2xpcDpyZWN0KDFweCAxcHggMXB4IDFw
eCk7Y2xpcDpyZWN0KDFweCwxcHgsMXB4LDFweCk7fS5lbGVtZW50LWZvY3VzYWJsZTphY3RpdmUs
LmVsZW1lbnQtZm9jdXNhYmxlOmZvY3Vze3Bvc2l0aW9uOnN0YXRpYyAhaW1wb3J0YW50O2NsaXA6
YXV0bztoZWlnaHQ6YXV0bzt3aWR0aDphdXRvO292ZXJmbG93OmF1dG87fSNza2lwLWxpbmt7bWFy
Z2luOjA7fSNza2lwLWxpbmsgYSwjc2tpcC1saW5rIGE6dmlzaXRlZHtkaXNwbGF5OmJsb2NrO3dp
ZHRoOjEwMCU7cGFkZGluZzoycHggMCAzcHgKMDt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5k
LWNvbG9yOiM2NjY7Y29sb3I6I2ZmZjt9LmhlYWRlcl9fbG9nb3tmbG9hdDpsZWZ0O21hcmdpbjow
O3BhZGRpbmc6MDt9LmhlYWRlcl9fbG9nby1pbWFnZXt2ZXJ0aWNhbC1hbGlnbjpib3R0b207fS5o
ZWFkZXJfX25hbWUtYW5kLXNsb2dhbntmbG9hdDpsZWZ0O30uaGVhZGVyX19zaXRlLW5hbWV7bWFy
Z2luOjA7Zm9udC1zaXplOjJlbTtsaW5lLWhlaWdodDoxLjVlbTt9LmhlYWRlcl9fc2l0ZS1saW5r
OmxpbmssLmhlYWRlcl9fc2l0ZS1saW5rOnZpc2l0ZWR7Y29sb3I6IzAwMDt0ZXh0LWRlY29yYXRp
b246bm9uZTt9LmhlYWRlcl9fc2l0ZS1saW5rOmhvdmVyLC5oZWFkZXJfX3NpdGUtbGluazpmb2N1
c3t0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30uaGVhZGVyX19zaXRlLXNsb2dhbnttYXJnaW46
MDt9LmhlYWRlcl9fc2Vjb25kYXJ5LW1lbnV7ZmxvYXQ6cmlnaHQ7fS5oZWFkZXJfX3JlZ2lvbntj
bGVhcjpib3RoO30jbmF2aWdhdGlvbnt9I25hdmlnYXRpb24gLmJsb2Nre21hcmdpbi1ib3R0b206
MDt9I25hdmlnYXRpb24gLmxpbmtzLCNuYXZpZ2F0aW9uIC5tZW51e21hcmdpbjowO3BhZGRpbmc6
MDt0ZXh0LWFsaWduOmxlZnQ7fSNuYXZpZ2F0aW9uIC5saW5rcyBsaSwjbmF2aWdhdGlvbiAubWVu
dSBsaXtmbG9hdDpsZWZ0O3BhZGRpbmc6MCAxMHB4IDAKMDtsaXN0LXN0eWxlLXR5cGU6bm9uZTts
aXN0LXN0eWxlLWltYWdlOm5vbmU7fS5icmVhZGNydW1iIG9se21hcmdpbjowO3BhZGRpbmc6MDt9
LmJyZWFkY3J1bWIgbGl7ZGlzcGxheTppbmxpbmU7bGlzdC1zdHlsZS10eXBlOm5vbmU7bWFyZ2lu
OjA7cGFkZGluZzowO30ucGFnZV9fdGl0bGUsLm5vZGVfX3RpdGxlLC5ibG9ja19fdGl0bGUsLmNv
bW1lbnRzX190aXRsZSwuY29tbWVudHNfX2Zvcm0tdGl0bGUsLmNvbW1lbnRfX3RpdGxle21hcmdp
bjowO30ubWVzc2FnZXMsLm1lc3NhZ2VzLS1zdGF0dXMsLm1lc3NhZ2VzLS13YXJuaW5nLC5tZXNz
YWdlcy0tZXJyb3J7bWFyZ2luOjEuNWVtIDA7cGFkZGluZzoxMHB4IDEwcHggMTBweAo1MHB4O2Jh
Y2tncm91bmQtaW1hZ2U6dXJsKCdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFB
TlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFENlVsRVFWUjQyczJXWDB4YlZSekgzWXdt
QzRrK0dGLzBaUy9TMjY3L2Jtblg5bkw3YndzdFpsbmJqVERZeW9DNUdDYkIwWlc1cGRKQ2U2c3di
TEZBNmJwV0lHdVJNV1ZqS0dQKzIxUVczU1pCU0FqR2g0WEVhVFpUSDgyQ20vM3p0UzJ4czdtdzRL
TFJrM3h5emozMy9INmZlNVB6N3pFQS95ci92VUR1a2o5Rkg2ZHJxVGFxVDhFb1BzL1VWK25YNlRE
MUJsVWg5QXFMSGxtZ1BLTGNSSG1vQ09XbUVsSy9GT0tUWXBTOFV3TEprQVNpVXlMSTNwS2hsQ2xO
MGc0NnFqK3FML3BiQXJsYnJsTzFxMjVKZWlTZ1IyaVlKOHl3WExTZy9xUDZMTmwycm84K1E0TU1r
S0NkOUsydDNxM0tkUW5rWFhJRjVhSVNrZ0VKek9ObTFGMnFXNTJwREpOMU1JMmJVQkl1QWRWT0pX
U01UUE5RZ1g2L3ZralZwdnBSRXBhZzZvTXFXQ1l0YTFJemJzSGg5Z2EwUkp0elk4VVJNZFJPOVUv
S1N1V21OUVVxaDJwWTNDdEcrZnZscUp5b2ZNQUZOclpBRSs3ZS9SV1I0WDRjRDl0Z09Hc0EyVTJD
ZHRNRHF3cXlNeUl6UTVLS3FBS21jeWFZeGt6WWQzWXZqR05HRnRYUlBSajU4RFQrTE9lbVJyRm5y
Qkx5SVRtVURtVXlPL05ZZ3UyZDI2dWtIVkpvM3RYQU1HcEFzK2NRbWgwTmVDbGFuMzB1d043VGdu
UTZuUmQ0cjN0aE9HT0FKcVlCMlVWQzc5QWZaQW5LSEdVeFFhOEEydE5hTkxXL2pLdlh2OER5Yjhz
NHlyeUtBNE8xMEEzcm9JdnBVQitzd1RkejEvTEpaMjdQUUJ2VDVsQkgxUkQ0QkNoemxRMndCTnRj
MjJhRS9VTFFnelJDbDRQNUJQY1Q5M0dNT1l6OXdiMlFoQ1JnQXEzNWQ4dS9MMlBYZTd0QURWR2dC
bGNRK0FYUXRtbHZzUC9nemJKWnZwOFBNa0pDRkJZaDhtMGtueWlWU3NIZTBZSUdaejErL3VWT3Z0
OHo3UUd2bndmK1NUNUVJUkhJVXlSNGZoNTByYnA1bHNEY1lSNFJlQVhnQnJuZzlxL1FmYTBiZnkw
MzVyN090MmR2ejRJWDRJRUlFQVh3dkR6c2NPdzR6eEpVZDFZZkVYbEU0QWE0QlFITWx3elNTQmVJ
N2lYdm9UeFdEcUtQWUNGc0ZhS21yK1lWbGlCMEpmUzg5RFZwaXVobEI5ay90U09aVHVZRnZxOTh5
STdMMC9NQXNWV2NHcDBiZlc2MWhiYWh3bHR4U2VBUnNJS3lXS2VzU0tRU1dJd3ZZa3Z2bGx3Zng4
OHBnT3Zod3RodS9BekF4bFZYOHZ6Mzg1dExiYVZ4d3BjTFp0RXcwUURqc0JHY3R6a3NpRTRDaW1a
RmZIcCsrb1dIYm5idVVmZEIwa29tTWdIc1JOMXIwTVdCc0VtWU9ERjVvblk5Mi9VVHdjdkJ4dXpY
Y04xY2NIeWNWU24yRmFQWVd3ekNRVURXS0l0N3ozdXRBSjVjNzRIeitPTFNvbXluWStjVmZpTS94
VzNKaUR5WnBCM0Z1WnJqNG9Dd0UrQWQ0cVdNalBIanBUdEwwbXpNb3h5Wno5eU0zOVE3WTg1T2s5
MzBpY3FtK2s1OVRMMndtOWw5MGRadjh5LzhzUEFpZ0dmL2lVTi9RNGFuTTJ6T3NkTGUrTCs0VmZ3
QlZWakRzMnJUWXgwQUFBQUFTVVZPUks1Q1lJST0nKTsqYmFja2dyb3VuZC1pbWFnZTp1cmwoJ2Nv
bXBvbmVudHMvLi4vLi4vaW1hZ2VzL21lc3NhZ2UtMjQtb2sucG5nJyk7YmFja2dyb3VuZC1wb3Np
dGlvbjo4cHgKOHB4O2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtib3JkZXI6MXB4IHNvbGlk
CiNiZTc7fS5tZXNzYWdlcy0td2FybmluZ3tiYWNrZ3JvdW5kLWltYWdlOnVybCgnZGF0YTppbWFn
ZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0
QUFBQ3VFbEVRVlJJaVdQNC8vOC9BeTB4U1lxbnRUcG5UMjUyenFlSkJmME5qaHN5a3J6L3B5ZDYv
ZTl2Y05wR1ZRdjZxMndsbTBxYy9yMCtJUEQvM1VHKy82MWw5djltZHJqSVVjMkM3aHFIVXpjM1Mv
Ly9lWndCak85dEYvdmZXZTF3amlvV1RLaXhWbThvdFBuMzh3UVQzSUtmeHhuL3Q1VmEvdXRwc05T
ZzJJTFdjdHRyTnpkSmdRMytkcFFSakVIcys5dEUvemVYV3QrZ3lJTE9hbXVUcWx4cnNPdFBMdWIr
NytlbUJzU3EvODh2NXdMN29xSFE5SDlubWJrRjJSYlVGMXJldjdsSkV1eml1VTNpLzkwZGRjQjRV
WnNvSkM2MmlmeXZLN1I0UUpZRnJjVUdybVVaNXY5aFliOWhvc2gvYnpjRE1ONDJWUmdlRjlXNWh2
OGJpL1hkU2JhZ0t0ZnMyYzFORXZDSVBiYVEvNysvcHdrWW4xN0tpMGhSMjRUL2wyZVpQQ2ZKZ3Na
ODNkQ2lOT1AveUNubjdpYXUvOEcrNW1EOGFCc0hTb3FxeU5MOVg1ZXJIVW0wQmNWcFJtOXViaFpI
TW9UaC80ZUR6UC9EQTIzK1J3VFovUDk2aEFsRjd0NVdvZjhGeWZwdmliS2dOazhub3lEWjREOXF1
b2ZnMUJqci8xa0psaGppSUYrVXBtbi9yODNSekNKb1FYYUMzcWNibThTd0dNTHd2eWJQL0g4ak1H
bGlrN3U3VmVCL1pxejJKN3dXVkdkcjF1VEc2MkoxUFFnZldTVDEvK2hpQ2F4eUlGOFVKcXY5cjho
UXJjVnBRVnFrenJjYkcwV3dHdkIySC9QL2xueDVNQWF4c2FtNXZZbjNmMktZK2plc0ZwU2xxZlpu
eFdqaWRQMk9HV0wvZy8wc3dCakV4dTRMaHY5NThVci9pNUtVK2xFc0NBMWxZSTRKVXY5NWJaMGdU
bzJQdDNQK3owbXlCbU1RRzVlNm14dTQva2Y0S2Y4RW1RbTNvQ1JOZWJLcnZTYXdJR1BCcVJHOXNN
T3A1aGpqZndkcmxmLzU4YktUNFJhVXBXdnRjTFpWLzM5aXNjRC9IMEFGUDQ2all3WWlNZVAvNDR1
NC85dGJLUU9EU1hVSDNJSTlHN3YxOGhJMG44WUdLditJRFZUNmpveGovQlZ4NG1nY09DZGUvU25J
VFBSVUpBSEVHbFRDRWtRVjE5VEFBTjhGQzY3aFpkRlhBQUFBQUVsRlRrU3VRbUNDJyk7KmJhY2tn
cm91bmQtaW1hZ2U6dXJsKCdjb21wb25lbnRzLy4uLy4uL2ltYWdlcy9tZXNzYWdlLTI0LXdhcm5p
bmcucG5nJyk7Ym9yZGVyLWNvbG9yOiNlZDU7fS5tZXNzYWdlcy0tZXJyb3J7YmFja2dyb3VuZC1p
bWFnZTp1cmwoJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFB
QmdBQUFBWUNBWUFBQURnZHozNEFBQUNwRWxFUVZSNDJyV1dUVWdiUVJpR1EwVHg0TVdEZUZNOGVC
QTlpS0FvZ2dpQ29DaWlJaUw0TDNvUVYxQ0pCMFVFZjZpUllGcEs3VW5pVHc5VlNxTDJrdlFzVkRC
cFNacnRSbzM1Y3pWTlczb3ByUmYxN2V4U2w0eXp1MWlrQXk5aDU5dnZlZGhrTXJNR0FHb3hrbkFr
Mnc4TUovV29zWFRoaVprWnQ5amRMZWdsUGpuNUFUYzNtaEpOdU5qYkswUWJHM0V4TUlDTC9uNklm
WDBnY3hCN2VrREFFTHU2SUhaMklsSmJpMWhMUzFCTG9nbVB0YlVoTVR2N29NU2FtelVscW5CeU14
TFQwLzhTVFFrRGo5VFY0WkxqNU95c3JPRGw4akl1NUdzNjhkRlI3Skc2ZFdrSjBmRngrVHBTWDg5
SURNbndjSFUxeUtlYzEyWXozcmxjNEhrZUx3amtYSnBQaXAzVTMrN3ZJeDZQNHltcGg0ZUc1UGx3
VFEwbE1keXRsbUJ4TVdLdHJYTGVUMHpBNVhUaWJ2ajlmanhmWEVUa2IvM04vRHoyZG5lVnVpVFp0
bGlVL3JQU1VzUTV6aXV4WllHMDNJSWxKZEtLVVBKamRSVUFLTW16dVRuc2tCL1ZZYmRUdGQ5SFI0
ZzJOQ2k5WjJWbGlEWTFCU25CYVVFQnpzckxxWHl6V0NpUTlIVTVIQTRhZm5pSVVGV1YwaE9xcU1C
cFVSRXJPTTdOeFdsaElaT3ZDd3ZBN1MzVXhxK0RBNUFuWjNwTzh2SllRU0FyQzhjNU9lcXgyUmo0
dWRlTFFINis2djJCN0d4VzhEa2pBMEptSnBPTndVSFk3WFpHSUFnQ3pDWVRlSlVld21JRmZxTVJm
RW9LbFEyeUpiemEyb0xXY0x2ZGVESTJoay8zK2lRV0t6QVlrSnpOamc1c3JxOVR3SjlPSjc2WVRO
U2N4K09SSlQ2NlgxL2dyS3lFYlcyTmdmUHA2WEtkL0pNWnlTckhhUXNTVTFPZSswL3czV3BWZ3l1
NUhCbFI2bGMrSDhnaW9ldkR3ejZKcld3VjUrM3R4eW9TRms1RGNPWDFNbkN5SjRWd2ZiMXp0MVVZ
OVNSOGFpb0RwdXBwYVZwd1piUFRsK2hIRjA0ZE9Lems4WEJGOERnSkMzL3dvVS9XL0VjaU90RUxP
V2k4RER3cC8vMjE1UStwN2tpS2gybFFTQUFBQUFCSlJVNUVya0pnZ2c9PScpOypiYWNrZ3JvdW5k
LWltYWdlOnVybCgnY29tcG9uZW50cy8uLi8uLi9pbWFnZXMvbWVzc2FnZS0yNC1lcnJvci5wbmcn
KTtib3JkZXItY29sb3I6I2VkNTQxZDt9Lm1lc3NhZ2VzX19saXN0e21hcmdpbjowO30ubWVzc2Fn
ZXNfX2l0ZW17bGlzdC1zdHlsZS1pbWFnZTpub25lO30ubWVzc2FnZXMtLWVycm9yCnAuZXJyb3J7
Y29sb3I6IzMzMzt9Lm9rLC5tZXNzYWdlcy0tc3RhdHVze2JhY2tncm91bmQtY29sb3I6I2Y4ZmZm
MDtjb2xvcjojMjM0NjAwO30ud2FybmluZywubWVzc2FnZXMtLXdhcm5pbmd7YmFja2dyb3VuZC1j
b2xvcjojZmZmY2U1O2NvbG9yOiM4NDA7fS5lcnJvciwubWVzc2FnZXMtLWVycm9ye2JhY2tncm91
bmQtY29sb3I6I2ZlZjVmMTtjb2xvcjojOGMyZTBiO30udGFicy1wcmltYXJ5LC50YWJzLXNlY29u
ZGFyeXtvdmVyZmxvdzpoaWRkZW47Knpvb206MTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3Jh
ZGllbnQobGluZWFyLDUwJSAxMDAlLDUwJSAwJSxjb2xvci1zdG9wKDEwMCUsI2JiYmJiYiksY29s
b3Itc3RvcCgxMDAlLHRyYW5zcGFyZW50KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVh
ci1ncmFkaWVudChib3R0b20sI2JiYmJiYiAxcHgsdHJhbnNwYXJlbnQgMXB4KTtiYWNrZ3JvdW5k
LWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KGJvdHRvbSwjYmJiYmJiIDFweCx0cmFuc3BhcmVu
dCAxcHgpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KGJvdHRvbSwjYmJiYmJi
IDFweCx0cmFuc3BhcmVudCAxcHgpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KGJv
dHRvbSwjYmJiYmJiIDFweCx0cmFuc3BhcmVudAoxcHgpO2xpc3Qtc3R5bGU6bm9uZTtib3JkZXIt
Ym90dG9tOjFweCBzb2xpZCAjYmJiYmJiIFwwL2llO21hcmdpbjoxLjVlbSAwO3BhZGRpbmc6MCAy
cHg7d2hpdGUtc3BhY2U6bm93cmFwO30udGFicy1wcmltYXJ5X190YWIsLnRhYnMtc2Vjb25kYXJ5
X190YWIsLnRhYnMtc2Vjb25kYXJ5X190YWIuaXMtYWN0aXZle2Zsb2F0OmxlZnQ7bWFyZ2luOjAg
M3B4O31hLnRhYnMtcHJpbWFyeV9fdGFiLWxpbmssYS50YWJzLXNlY29uZGFyeV9fdGFiLWxpbmt7
Ym9yZGVyOjFweCBzb2xpZCAjZTllOWU5O2JvcmRlci1yaWdodDowO2JvcmRlci1ib3R0b206MDtk
aXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjEuNWVtO3RleHQtZGVjb3JhdGlvbjpub25lO30udGFi
cy1wcmltYXJ5X190YWIsLnRhYnMtcHJpbWFyeV9fdGFiLmlzLWFjdGl2ZXstbW96LWJvcmRlci1y
YWRpdXMtdG9wbGVmdDo0cHg7LXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweDtib3Jk
ZXItdG9wLWxlZnQtcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6NHB4Oy13
ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVz
OjRweDt0ZXh0LXNoYWRvdzoxcHggMXB4IDAgd2hpdGU7Ym9yZGVyOjFweCBzb2xpZAojYmJiYmJi
O2JvcmRlci1ib3R0b20tY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbTowIFwwL2llO30u
aXMtYWN0aXZlLnRhYnMtcHJpbWFyeV9fdGFie2JvcmRlci1ib3R0b20tY29sb3I6d2hpdGU7fWEu
dGFicy1wcmltYXJ5X190YWItbGluayxhLnRhYnMtcHJpbWFyeV9fdGFiLWxpbmsuaXMtYWN0aXZl
ey1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OjRweDstd2Via2l0LWJvcmRlci10b3AtbGVmdC1y
YWRpdXM6NHB4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy10
b3ByaWdodDo0cHg7LXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7Ym9yZGVyLXRv
cC1yaWdodC1yYWRpdXM6NHB4Oy13ZWJraXQtdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDAu
M3M7LW1vei10cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgMC4zczstby10cmFuc2l0aW9uOmJh
Y2tncm91bmQtY29sb3IgMC4zczt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgMC4zcztjb2xv
cjojMzMzO2JhY2tncm91bmQtY29sb3I6I2RlZGVkZTtsZXR0ZXItc3BhY2luZzoxcHg7cGFkZGlu
ZzowCjFlbTt0ZXh0LWFsaWduOmNlbnRlcjt9YS50YWJzLXByaW1hcnlfX3RhYi1saW5rOmhvdmVy
LGEudGFicy1wcmltYXJ5X190YWItbGluazpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOiNlOWU5ZTk7
Ym9yZGVyLWNvbG9yOiNmMmYyZjI7fWEudGFicy1wcmltYXJ5X190YWItbGluazphY3RpdmUsYS50
YWJzLXByaW1hcnlfX3RhYi1saW5rLmlzLWFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFy
ZW50Oyp6b29tOjE7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFk
aWVudChncmFkaWVudFR5cGU9MCxzdGFydENvbG9yc3RyPScjRkZFOUU5RTknLGVuZENvbG9yc3Ry
PScjMDBFOUU5RTknKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDUw
JSAwJSw1MCUKMTAwJSxjb2xvci1zdG9wKDAlLCNlOWU5ZTkpLGNvbG9yLXN0b3AoMTAwJSxyZ2Jh
KDIzMywyMzMsMjMzLDApKSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVu
dCgjZTllOWU5LHJnYmEoMjMzLDIzMywyMzMsMCkpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5l
YXItZ3JhZGllbnQoI2U5ZTllOSxyZ2JhKDIzMywyMzMsMjMzLDApKTtiYWNrZ3JvdW5kLWltYWdl
Oi1vLWxpbmVhci1ncmFkaWVudCgjZTllOWU5LHJnYmEoMjMzLDIzMywyMzMsMCkpO2JhY2tncm91
bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KCNlOWU5ZTkscmdiYSgyMzMsMjMzLDIzMywwKSk7Ym9y
ZGVyLWNvbG9yOiNmZmY7fS50YWJzLXNlY29uZGFyeXtmb250LXNpemU6LjllbTttYXJnaW4tdG9w
Oi0xLjVlbTt9LnRhYnMtc2Vjb25kYXJ5X190YWIsLnRhYnMtc2Vjb25kYXJ5X190YWIuaXMtYWN0
aXZle21hcmdpbjowLjc1ZW0gM3B4O31hLnRhYnMtc2Vjb25kYXJ5X190YWItbGluayxhLnRhYnMt
c2Vjb25kYXJ5X190YWItbGluay5pcy1hY3RpdmV7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAuNzVl
bTstbW96LWJvcmRlci1yYWRpdXM6MC43NWVtOy1tcy1ib3JkZXItcmFkaXVzOjAuNzVlbTstby1i
b3JkZXItcmFkaXVzOjAuNzVlbTtib3JkZXItcmFkaXVzOjAuNzVlbTstd2Via2l0LXRyYW5zaXRp
b246YmFja2dyb3VuZC1jb2xvcgowLjNzOy1tb3otdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9y
IDAuM3M7LW8tdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7dHJhbnNpdGlvbjpiYWNr
Z3JvdW5kLWNvbG9yIDAuM3M7dGV4dC1zaGFkb3c6MXB4IDFweCAwIHdoaXRlO2JhY2tncm91bmQt
Y29sb3I6I2YyZjJmMjtjb2xvcjojNjY2O3BhZGRpbmc6MCAuNWVtO31hLnRhYnMtc2Vjb25kYXJ5
X190YWItbGluazpob3ZlcixhLnRhYnMtc2Vjb25kYXJ5X190YWItbGluazpmb2N1c3tiYWNrZ3Jv
dW5kLWNvbG9yOiNkZWRlZGU7Ym9yZGVyLWNvbG9yOiM5OTk7Y29sb3I6IzMzMzt9YS50YWJzLXNl
Y29uZGFyeV9fdGFiLWxpbms6YWN0aXZlLGEudGFicy1zZWNvbmRhcnlfX3RhYi1saW5rLmlzLWFj
dGl2ZXt0ZXh0LXNoYWRvdzoxcHggMXB4IDAgIzMzMzMzMztiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7
Ym9yZGVyLWNvbG9yOiMwMDA7Y29sb3I6I2ZmZjt9LmlubGluZXtkaXNwbGF5OmlubGluZTtwYWRk
aW5nOjA7fS5pbmxpbmUgbGl7ZGlzcGxheTppbmxpbmU7bGlzdC1zdHlsZS10eXBlOm5vbmU7cGFk
ZGluZzowIDFlbSAwIDA7fXNwYW4uZmllbGQtbGFiZWx7cGFkZGluZzowIDFlbSAwIDA7fS5tb3Jl
LWxpbmt7dGV4dC1hbGlnbjpyaWdodDt9Lm1vcmUtaGVscC1saW5re3RleHQtYWxpZ246cmlnaHQ7
fS5tb3JlLWhlbHAtbGluawphe2JhY2tncm91bmQtaW1hZ2U6dXJsKCdkYXRhOmltYWdlL3BuZzti
YXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBN1Vs
RVFWUjQycVdUUFFxRFFCQ0Zjd1NQa0NOSVRwQWo1QWplSW0xdVlwa3lSN0N5Mk1vdDdPd3NCQXNS
d1VLd21Pd0xHUmxlM0VJeThQeUJmWi96M0oyVGlQeWx6OFZXV1pacFVCNDBCb25SS3lpemF4a0E4
OE1ZWWlxQ0VndjRNVHZuWkpvbTBWcVdSYnozRmxKWmdMWXRxbUVZMUxnOXIrc0tzSVhjTFNDM0FD
MDE5SDB2cUxxdUxlQzVBZmlIWVNHa2NkQUppbUtJQlFpSjQrQ085Mk9BdG0wRk5jOHpPamtNd0U1
UTYzRkF0YmVnNnpwQVl2RzhCV1I3aTVxbVFZd1k0TUlIcVloRTJET1BRV2NHSkJRRjJYVTcyWnp5
VWVaNUdDTnQ1L2h5YkpnWWRBWHNxNXNPRUUvakc2ZEM1SU9xQ1hUbUFBQUFBRWxGVGtTdVFtQ0Mn
KTsqYmFja2dyb3VuZC1pbWFnZTp1cmwoJ2NvbXBvbmVudHMvLi4vLi4vaW1hZ2VzL2hlbHAucG5n
Jyk7YmFja2dyb3VuZC1wb3NpdGlvbjowIDUwJTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7
cGFkZGluZzoxcHggMCAxcHgKMjBweDt9LnBhZ2Vye2NsZWFyOmJvdGg7cGFkZGluZzowO3RleHQt
YWxpZ246Y2VudGVyO30ucGFnZXItaXRlbSwucGFnZXItZmlyc3QsLnBhZ2VyLXByZXZpb3VzLC5w
YWdlci1uZXh0LC5wYWdlci1sYXN0LC5wYWdlci1lbGxpcHNpcywucGFnZXItY3VycmVudHtkaXNw
bGF5OmlubGluZTtwYWRkaW5nOjAKMC41ZW07bGlzdC1zdHlsZS10eXBlOm5vbmU7YmFja2dyb3Vu
ZC1pbWFnZTpub25lO30ucGFnZXItY3VycmVudHtmb250LXdlaWdodDpib2xkO30uYmxvY2t7bWFy
Z2luLWJvdHRvbToxLjVlbTt9Lm1lbnVfX2l0ZW0uaXMtbGVhZntsaXN0LXN0eWxlLWltYWdlOnVy
bCgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBY0FBQUFI
QkFNQUFBQTJmRXJnQUFBQUQxQk1WRVgvLy8rL3Y3K0xpNHNBQUFEQXdNQkZ2c3c4QUFBQUFYUlNU
bE1BUU9iWVpnQUFBQjFKUkVGVUNGdGpZQUFEWXdNR0JtWVZaU0RoS0F3a0ZKV2hZaUFBQUIyK0Fh
Lzl1Z2VhQUFBQUFFbEZUa1N1UW1DQycpOypsaXN0LXN0eWxlLWltYWdlOnVybCgnY29tcG9uZW50
cy8uLi8uLi9pbWFnZXMvbWVudS1sZWFmLnBuZycpO2xpc3Qtc3R5bGUtdHlwZTpzcXVhcmU7fS5t
ZW51X19pdGVtLmlzLWV4cGFuZGVke2xpc3Qtc3R5bGUtaW1hZ2U6dXJsKCdkYXRhOmltYWdlL3Bu
ZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFjQUFBQUhBUU1BQUFEK25NV1FBQUFB
QmxCTVZFWC8vLzhBQUFCVnd0TitBQUFBQVhSU1RsTUFRT2JZWmdBQUFCSkpSRUZVZUp4aitNZFF3
MkRCSU1BQUJnQVVzQUhEM2MzQnB3QUFBQUJKUlU1RXJrSmdnZz09Jyk7Kmxpc3Qtc3R5bGUtaW1h
Z2U6dXJsKCdjb21wb25lbnRzLy4uLy4uL2ltYWdlcy9tZW51LWV4cGFuZGVkLnBuZycpO2xpc3Qt
c3R5bGUtdHlwZTpjaXJjbGU7fS5tZW51X19pdGVtLmlzLWNvbGxhcHNlZHtsaXN0LXN0eWxlLWlt
YWdlOnVybCgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFB
Y0FBQUFIQVFNQUFBRCtuTVdRQUFBQUJsQk1WRVgvLy84QUFBQlZ3dE4rQUFBQUFYUlNUbE1BUU9i
WVpnQUFBQkZKUkVGVUNCMWpWbUNHUUNsbUVXWU9BQVo4QU15M0hQTFhBQUFBQUVsRlRrU3VRbUND
Jyk7Kmxpc3Qtc3R5bGUtaW1hZ2U6dXJsKCdjb21wb25lbnRzLy4uLy4uL2ltYWdlcy9tZW51LWNv
bGxhcHNlZC5wbmcnKTtsaXN0LXN0eWxlLXR5cGU6ZGlzYzt9Lm1lbnUKYS5hY3RpdmV7Y29sb3I6
IzAwMDt9Lm5ldywudXBkYXRle2NvbG9yOiNjMDA7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVu
dDt9LnVucHVibGlzaGVke2hlaWdodDowO292ZXJmbG93OnZpc2libGU7YmFja2dyb3VuZC1jb2xv
cjp0cmFuc3BhcmVudDtjb2xvcjojZDhkOGQ4O2ZvbnQtc2l6ZTo3NXB4O2xpbmUtaGVpZ2h0OjE7
Zm9udC1mYW1pbHk6SW1wYWN0LCJBcmlhbCBOYXJyb3ciLEhlbHZldGljYSxzYW5zLXNlcmlmO2Zv
bnQtd2VpZ2h0OmJvbGQ7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3RleHQtYWxpZ246Y2VudGVy
O3dvcmQtd3JhcDpicmVhay13b3JkO30ubHQtaWU4IC5ub2RlLXVucHVibGlzaGVkID4gKiwubHQt
aWU4IC5jb21tZW50LXVucHVibGlzaGVkID4gKntwb3NpdGlvbjpyZWxhdGl2ZTt9LmNvbW1lbnRz
e21hcmdpbjoxLjVlbSAwO30uY29tbWVudC1wcmV2aWV3e2JhY2tncm91bmQtY29sb3I6I2ZmZmZl
YTt9LmNvbW1lbnR7fS5jb21tZW50IC5wZXJtYWxpbmt7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNl
O2ZvbnQtc2l6ZTo3NSU7fS5pbmRlbnRlZHttYXJnaW4tbGVmdDozMHB4O30uZm9ybS1pdGVte21h
cmdpbjoxLjVlbSAwO30uZm9ybS1jaGVja2JveGVzIC5mb3JtLWl0ZW0sLmZvcm0tcmFkaW9zIC5m
b3JtLWl0ZW17bWFyZ2luOjA7fXRyLm9kZCAuZm9ybS1pdGVtLHRyLmV2ZW4KLmZvcm0taXRlbXtt
YXJnaW46MDt9LmZvcm0taXRlbSBpbnB1dC5lcnJvciwuZm9ybS1pdGVtIHRleHRhcmVhLmVycm9y
LC5mb3JtLWl0ZW0gc2VsZWN0LmVycm9ye2JvcmRlcjoxcHggc29saWQgI2MwMDt9LmZvcm0taXRl
bSAuZGVzY3JpcHRpb257Zm9udC1zaXplOjAuODVlbTt9LmZvcm0tdHlwZS1yYWRpbyAuZGVzY3Jp
cHRpb24sLmZvcm0tdHlwZS1jaGVja2JveCAuZGVzY3JpcHRpb257bWFyZ2luLWxlZnQ6Mi40ZW07
fS5mb3JtLXJlcXVpcmVke2NvbG9yOiNjMDA7fWxhYmVsLm9wdGlvbntkaXNwbGF5OmlubGluZTtm
b250LXdlaWdodDpub3JtYWw7fWEuYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247LW1v
ei1hcHBlYXJhbmNlOmJ1dHRvbjthcHBlYXJhbmNlOmJ1dHRvbjt9LnBhc3N3b3JkLXBhcmVudCwu
Y29uZmlybS1wYXJlbnR7bWFyZ2luOjA7fSN1c2VyLWxvZ2luLWZvcm17dGV4dC1hbGlnbjpsZWZ0
O30ub3BlbmlkLWxpbmtze21hcmdpbi1ib3R0b206MDt9Lm9wZW5pZC1saW5rLC51c2VyLWxpbmt7
bWFyZ2luLXRvcDoxLjVlbTt9aHRtbC5qcyAjdXNlci1sb2dpbi1mb3JtIGxpLm9wZW5pZC1saW5r
LCN1c2VyLWxvZ2luLWZvcm0gbGkub3BlbmlkLWxpbmt7bWFyZ2luLWxlZnQ6LTIwcHg7fSN1c2Vy
LWxvZ2luIHVse21hcmdpbjoxLjVlbSAwO31mb3JtCnRoe3RleHQtYWxpZ246bGVmdDtwYWRkaW5n
LXJpZ2h0OjFlbTtib3JkZXItYm90dG9tOjNweCBzb2xpZCAjY2NjO31mb3JtIHRib2R5e2JvcmRl
ci10b3A6MXB4IHNvbGlkICNjY2M7fWZvcm0gdGFibGUgdWx7bWFyZ2luOjA7fXRyLmV2ZW4sdHIu
b2Rke2JhY2tncm91bmQtY29sb3I6I2VlZTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjY2NjO3Bh
ZGRpbmc6MC4xZW0gMC42ZW07fXRyLmV2ZW57YmFja2dyb3VuZC1jb2xvcjojZmZmO30ubHQtaWU4
IHRyLmV2ZW4gdGgsLmx0LWllOCB0ci5ldmVuIHRkLC5sdC1pZTggdHIub2RkIHRoLC5sdC1pZTgg
dHIub2RkIHRke2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNjY2M7fXRkLmFjdGl2ZXtiYWNrZ3Jv
dW5kLWNvbG9yOiNkZGQ7fXRkLmNoZWNrYm94LHRoLmNoZWNrYm94e3RleHQtYWxpZ246Y2VudGVy
O310ZC5tZW51LWRpc2FibGVke2JhY2tncm91bmQ6I2NjYzt9I2F1dG9jb21wbGV0ZSAuc2VsZWN0
ZWR7YmFja2dyb3VuZDojMDA3MmI5O2NvbG9yOiNmZmY7fWh0bWwuanMgLmNvbGxhcHNpYmxlCi5m
aWVsZHNldC1sZWdlbmR7YmFja2dyb3VuZC1pbWFnZTp1cmwoJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2
NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQWNBQUFBSEFRTUFBQUQrbk1XUUFBQUFCbEJNVkVY
Ly8vOEFBQUJWd3ROK0FBQUFBWFJTVGxNQVFPYllaZ0FBQUJKSlJFRlVlSnhqK01kUXcyREJJTUFB
QmdBVXNBSEQzYzNCcHdBQUFBQkpSVTVFcmtKZ2dnPT0nKTsqYmFja2dyb3VuZC1pbWFnZTp1cmwo
J2NvbXBvbmVudHMvLi4vLi4vaW1hZ2VzL21lbnUtZXhwYW5kZWQucG5nJyk7YmFja2dyb3VuZC1w
b3NpdGlvbjo1cHggNjUlO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtwYWRkaW5nLWxlZnQ6
MTVweDt9aHRtbC5qcyAuY29sbGFwc2VkIC5maWVsZHNldC1sZWdlbmR7YmFja2dyb3VuZC1pbWFn
ZTp1cmwoJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQWNB
QUFBSEFRTUFBQUQrbk1XUUFBQUFCbEJNVkVYLy8vOEFBQUJWd3ROK0FBQUFBWFJTVGxNQVFPYlla
Z0FBQUJGSlJFRlVDQjFqVm1DR1FDbG1FV1lPQUFaOEFNeTNIUExYQUFBQUFFbEZUa1N1UW1DQycp
OypiYWNrZ3JvdW5kLWltYWdlOnVybCgnY29tcG9uZW50cy8uLi8uLi9pbWFnZXMvbWVudS1jb2xs
YXBzZWQucG5nJyk7YmFja2dyb3VuZC1wb3NpdGlvbjo1cHggNTAlO30uZmllbGRzZXQtbGVnZW5k
Ci5zdW1tYXJ5e2NvbG9yOiM5OTk7Zm9udC1zaXplOjAuOWVtO21hcmdpbi1sZWZ0OjAuNWVtO310
ci5kcmFne2JhY2tncm91bmQtY29sb3I6I2ZmZmZmMDt9dHIuZHJhZy1wcmV2aW91c3tiYWNrZ3Jv
dW5kLWNvbG9yOiNmZmQ7fS50YWJsZWRyYWctdG9nZ2xlLXdlaWdodHtmb250LXNpemU6MC45ZW07
fXRyLnNlbGVjdGVkIHRke2JhY2tncm91bmQ6I2ZmYzt9LnByb2dyZXNze2ZvbnQtd2VpZ2h0OmJv
bGQ7fS5wcm9ncmVzcyAuYmFye2JhY2tncm91bmQ6I2NjYztib3JkZXItY29sb3I6IzY2NjttYXJn
aW46MCAwLjJlbTstd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1czoz
cHg7LW1zLWJvcmRlci1yYWRpdXM6M3B4Oy1vLWJvcmRlci1yYWRpdXM6M3B4O2JvcmRlci1yYWRp
dXM6M3B4O30ucHJvZ3Jlc3MgLmZpbGxlZHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDcyYjk7YmFja2dy
b3VuZC1pbWFnZTp1cmwoJ2NvbXBvbmVudHMvLi4vLi4vaW1hZ2VzL3Byb2dyZXNzLmdpZicpO30u
YmxvY2suYmxvY2stdmlld3MuY29udGV4dHVhbC1saW5rcy1yZWdpb24uZmlyc3QubGFzdC5vZGR7
Ym9yZGVyOjJweCBzb2xpZDtwYWRkaW5nOjFlbTtib3JkZXItY29sb3I6bGlnaHRncmF5O30KQG1l
ZGlhIHByaW50e2E6bGluayxhOnZpc2l0ZWR7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSAhaW1w
b3J0YW50O31hOmxpbmsuaGVhZGVyX19zaXRlLWxpbmssYTp2aXNpdGVkLmhlYWRlcl9fc2l0ZS1s
aW5re3RleHQtZGVjb3JhdGlvbjpub25lICFpbXBvcnRhbnQ7fSNjb250ZW50IGFbaHJlZl06YWZ0
ZXJ7Y29udGVudDoiICgiIGF0dHIoaHJlZikgIikiO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNp
emU6MTZweDt9I2NvbnRlbnQgYVtocmVmXj0iamF2YXNjcmlwdDoiXTphZnRlciwjY29udGVudCBh
W2hyZWZePSIjIl06YWZ0ZXJ7Y29udGVudDoiIjt9I2NvbnRlbnQgYWJiclt0aXRsZV06YWZ0ZXJ7
Y29udGVudDoiICgiIGF0dHIodGl0bGUpICIpIjt9I2NvbnRlbnR7ZmxvYXQ6bm9uZSAhaW1wb3J0
YW50O3dpZHRoOjEwMCUgIWltcG9ydGFudDttYXJnaW46MCAhaW1wb3J0YW50O3BhZGRpbmc6MCAh
aW1wb3J0YW50O31ib2R5LCNwYWdlLCNtYWluLCNjb250ZW50e2NvbG9yOiMwMDA7YmFja2dyb3Vu
ZC1jb2xvcjp0cmFuc3BhcmVudCAhaW1wb3J0YW50O2JhY2tncm91bmQtaW1hZ2U6bm9uZQohaW1w
b3J0YW50O30jc2tpcC1saW5rLCN0b29sYmFyLCNuYXZpZ2F0aW9uLC5yZWdpb24tc2lkZWJhci1m
aXJzdCwucmVnaW9uLXNpZGViYXItc2Vjb25kLCNmb290ZXIsLmJyZWFkY3J1bWIsLnRhYnMsLmFj
dGlvbi1saW5rcywubGlua3MsLmJvb2stbmF2aWdhdGlvbiwuZm9ydW0tdG9waWMtbmF2aWdhdGlv
biwucGFnZXIsLmZlZWQtaWNvbnN7dmlzaWJpbGl0eTpoaWRkZW47ZGlzcGxheTpub25lO319Cgog
ICAgICAtLT4KICAgIDwvc3R5bGU+CiAgICAgIDwvaGVhZD4KICA8Ym9keSBpZD0ibWltZW1haWwt
Ym9keSIgY2xhc3M9Im1pbWVtYWlsLTEiPgogICAgPGRpdiBpZD0iY2VudGVyIj4KICAgICAgPGRp
diBpZD0ibWFpbiI+CiAgICAgICAgPHA+RGVhciBEciBDaG9vc2UgYW5kPC9wPgo8cD7CoDwvcD4K
PHA+wqA8L3A+CjxwPlBsZWFzZSBmaWxsIHRoZSBlbWFpbCdzIGJvZHkgd2l0aCBzdWl0YWJsZSBt
ZXNzYWdlLi4uPC9wPgo8cD7CoDwvcD4KPHA+CjwvcD48cD48c3Ryb25nPjxlbT5BbWlyIFJhemF2
aTwvZW0+PC9zdHJvbmc+PGVtPsKgPC9lbT48L3A+CjxwPjxhIGhyZWY9Imh0dHA6Ly93d3cuc2t5
cGF0aC5jby51ay8iIHRhcmdldD0iX2JsYW5rIj48aW1nIGFsdD0iIiBzcmM9ImNpZDo3YTMxZmIy
OWY4ODJlZDUzMTUwOGE0ZDgwMzRmNjAwZkA1Mi4xOC4yMy4xNSIgLz48L2E+PC9wPgo8cD7CoDwv
cD4KPHA+PHN0cm9uZz5NOjwvc3Ryb25nPsKgwqAwNzg1MCAxNjQgOTcxPC9wPgo8cD48c3Ryb25n
PkU6wqDCoMKgPC9zdHJvbmc+PGEgaHJlZj0ibWFpbHRvOmFtaXIucmF6YXZpQHNreXBhdGguY28u
dWsiIHRhcmdldD0iX2JsYW5rIj5hbWlyLnJhemF2aUBza3lwYXRoLmNvLnVrPC9hPjwvcD4KPHA+
PHN0cm9uZz5XOsKgPGEgaHJlZj0iaHR0cDovL3d3dy5za3lwYXRoLmNvLnVrLyIgdGFyZ2V0PSJf
YmxhbmsiPnd3dy5za3lwYXRoLmNvLnVrPC9hPjwvc3Ryb25nPjwvcD4KPHA+wqA8L3A+CjxwPjxh
IGhyZWY9Imh0dHA6Ly93d3cubGlua2VkaW4uY29tL2dyb3Vwcy9UcmF2ZWwtVGVjaG5vbG9neS1K
b2JzLVNLWVBBVEgtMzIxMDM0Nz9naWQ9MzIxMDM0NyZhbXA7dHJrPWhiX3NpZGVfZyIgdGFyZ2V0
PSJfYmxhbmsiPkpvaW4gb3VyIExpbmtlZEluIEdyb3VwPC9hPsKgLcKgPGEgaHJlZj0iaHR0cDov
L3d3dy5saW5rZWRpbi5jb20vY29tcGFueS9za3lwYXRoLS0tdHJhdmVsLXJlY3J1aXRtZW50P3Ry
az1oYl90YWJfY29tcHlfaWRfMjk1OTk4IiB0YXJnZXQ9Il9ibGFuayI+Rm9sbG93IFNreXBhdGgg
b24gTGlua2VkSW48L2E+PC9wPgo8cD5Ta3lwYXRoIERpc2NsYWltZXIgLSBUaGUgY29udGVudHMg
b2YgdGhpcyBlLW1haWwgYXJlIGZvciB1c2UgYnkgdGhlIGludGVuZGVkIGFkZHJlc3NlZShzKSBv
bmx5IGFuZCBtYXkgY29udGFpbiBsZWdhbGx5IHByaXZpbGVnZWQgbWF0ZXJpYWwgYW5kIGNvbmZp
ZGVudGlhbCBpbmZvcm1hdGlvbiB0aGF0IGlzIGV4ZW1wdCBmcm9tIGRpc2Nsb3N1cmUgYnkgbGF3
LiBQbGVhc2Ugbm90ZSB0aGF0IGlmIHlvdSBhcmUgbm90IHRoZSBpbnRlbmRlZCByZWNpcGllbnQg
b2YgdGhpcyBlLW1haWwsIGFueSBkaXNzZW1pbmF0aW9uLCBkaXN0cmlidXRpb24gb3IgY29weWlu
ZyBvZiB0aGlzIGUtbWFpbCBieSB5b3UgaXMgc3RyaWN0bHkgcHJvaGliaXRlZCBhbmQgeW91IG11
c3Qgbm90IHJlYWQsIHVzZSBvciB0YWtlIGFueSBhY3Rpb24gaW4gcmVsaWFuY2Ugb24gaXQuIElm
IHlvdSBoYXZlIHJlY2VpdmVkIHRoaXMgZS1tYWlsIGluIGVycm9yLCBwbGVhc2UgaW1tZWRpYXRl
bHkgbm90aWZ5IHRoZSBzZW5kZXIgYnkgcmV0dXJuIGUtbWFpbCBhbmQgdGhlbiBwZXJtYW5lbnRs
eSBkZWxldGUgaXQgZnJvbSB5b3VyIHN5c3RlbS4gUGxlYXNlIG5vdGUgdGhhdCBuZWl0aGVyIFNr
eXBhdGggbm9yIHRoZSBzZW5kZXIgYWNjZXB0cyBhbnkgcmVzcG9uc2liaWxpdHkgZm9yIHZpcnVz
ZXMgYW5kIGl0IGlzIHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gc2NhbiBhbnkgYXR0YWNobWVudHMu
PC9wPgo8cD5Ta3lwYXRoIC0gUmVnaXN0ZXJlZCBpbiBFbmdsYW5kIGFuZCBXYWxlcy4gUmVnaXN0
ZXJlZCBudW1iZXIgLSA0MDkyMTc0PC9wPgoKICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Jv
ZHk+CjwvaHRtbD4K
--db4194566ea1afdb5b8c19188fbcb8b47ff8793d0--
--f4fea373259afd930de9ac04bcbda73664934aa91
Content-ID: <7a31fb29f882ed531508a4d8034f600f@52.18.23.15>
Content-Type: image/jpeg; name="logoemail.jpg"
Content-Disposition: inline; filename="logoemail.jpg"
Content-Transfer-Encoding: base64
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
xYbIuLDZFxYbIuLHQshUf//Z
--f4fea373259afd930de9ac04bcbda73664934aa91--
--725439805183e20399bc7143bf77b1b851c4ca862--
Comment #14
amir_razavi commentedAt least in my case, problem was related to 8bit encoding for base64 encoded message body and it has been solved by changing:
if (drupal_strtolower($body_part2_encoding) == 'base64') {
to
if (trim(drupal_strtolower($body_part2_encoding)) == 'base64') {
in smtp.mail.inc and they are sending good for me now!
Comment #15
berenddeboer commentedHave come to the conclusion in #12, unfortunately no new module was released, so I wrote my own: Just SMTP. It's designed to solve the problems of SMTP, and not be an MIME parser, queuing system, etc etc.
Comment #16
pounardYou are still using PHPMailer which was the cause of many problems of the SMTP module, that's why I choose a different path and made use the PEAR::Net_SMTP package instead, code is working gracefully on production environments since. You can check this out there https://github.com/makinacorpus/drupal-netsmtp
Comment #17
vlad.dancer@pounard, thanks man for the amazing module. It saved for me a bunch of time)
Comment #18
pounard@vlad.dancer I'm happy to hear it did the job for you
Comment #19
spazfoxThe Just SMTP module is working great for me and has resolved all of my Mime Mail/SMTP issues so far. Thanks, berenddeboer!
Comment #20
wundo commentedComment #21
bluegeek9 commentedUnfortunately, Drupal 7 is End of Life and no longer supported. We strongly encourage you to upgrade to a supported version of Drupal.