[COMMIT] Improve the algorithmic complexity of #'concat, move #'concatenate to C.

"Stephen J. Turnbull" <[email protected]> Sat, 2 Jul 2016 02:59:41 +0900
Newsgroups gmane.emacs.xemacs.patches
Message-ID <[email protected]>
QWlkYW4gS2Vob2Ugd3JpdGVzOgogPiAKID4gQVBQUk9WRSBDT01NSVQKID4gCiA+IE5PVEU6IFRo
aXMgcGF0Y2ggaGFzIGJlZW4gY29tbWl0dGVkLgogPiAKID4gIyBIRyBjaGFuZ2VzZXQgcGF0Y2gK
ID4gIyBVc2VyIEFpZGFuIEtlaG9lIDxrZWhvZWFAcGFyaGFzYXJkLm5ldD4KID4gIyBEYXRlIDE0
NjcyNDM2OTkgLTM2MDAKID4gIyAgICAgIFRodSBKdW4gMzAgMDA6NDE6MzkgMjAxNiArMDEwMAog
PiAjIE5vZGUgSUQgMTdhM2M2YjUyZGZkYzllZDUzYmZhMzE0M2QwZWI1NjVjZGZjNzM3NwogPiAj
IFBhcmVudCAgY2JlMTA3MTQxYWZlNWE3ZTA4YWZiYmNiNmNkNTQ1NzkzZTM2YWMwNgogPiBJbXBy
b3ZlIHRoZSBhbGdvcml0aG1pYyBjb21wbGV4aXR5IG9mICMnY29uY2F0LCBtb3ZlICMnY29uY2F0
ZW5hdGUKID4gdG8gQy4KClRoaXMgYnJva2UgdGhpbmdzIGJhZGx5IGZvciBtZTsgSSBjYW4ndCBl
dmVuIHJlYWQgaW4gbXkgSU5CT1ggaW4gVk0gLS0KWEVtYWNzIGNyYXNoZXMuICBJJ2xsIHRyeSB0
byBnZXQgYmFjayB0byB5b3Ugd2l0aCBtb3JlIGRldGFpbHMKdG9tb3Jyb3csIGJ1dCBpdCdzIGEg
Y3Jhc2ggLS0gaWYgeW91IGNhbid0IGZpeCBpbW1lZGlhdGVseSB5b3Ugc2hvdWxkCmJhY2sgaXQg
b3V0LgoKU3RldmUKClAuUy4gVW5mb3J0dW5hdGVseSwgSSBjYW4ndCByZXBlYXQgdGhlIGNyYXNo
IHVuZGVyIHRoZSBkZWJ1Z2dlci4gIEkKc3VzcGVjdCBpdCdzIGJlY2F1c2UgSSd2ZSB3b3JrZWQg
d2l0aCB0aGUgbWFpbCBmb2xkZXIuICBIZXJlJ3MgdGhlCmZpcnN0IGNyYXNoLCBmcm9tIHRoZSB0
ZXJtaW5hbCBzY3JvbGxiYWNrIGJ1ZmZlcjoKCkZhdGFsIGVycm9yOiBhc3NlcnRpb24gZmFpbGVk
LCBmaWxlIC9Vc2Vycy9zdGV2ZS9zcmMvWEVtYWNzLzIxLjUvcHJpc3RpbmUvc3JjL2V4dGVudHMu
YywgbGluZSAxODU0LCBmcm9tID49IGJ1ZmZlcl9vcl9zdHJpbmdfYWJzb2x1dGVfYmVnaW5fYnl0
ZSAob2JqKSAmJiBmcm9tIDw9IGJ1ZmZlcl9vcl9zdHJpbmdfYWJzb2x1dGVfZW5kX2J5dGUgKG9i
aikgJiYgdG8gPj0gYnVmZmVyX29yX3N0cmluZ19hYnNvbHV0ZV9iZWdpbl9ieXRlIChvYmopICYm
IHRvIDw9IGJ1ZmZlcl9vcl9zdHJpbmdfYWJzb2x1dGVfZW5kX2J5dGUgKG9iaikKCkZhdGFsIGVy
cm9yICg2KS4KCllvdXIgZmlsZXMgaGF2ZSBiZWVuIGF1dG8tc2F2ZWQuClVzZSBgTS14IHJlY292
ZXItc2Vzc2lvbicgdG8gcmVjb3ZlciB0aGVtLgoKWW91ciB2ZXJzaW9uIG9mIFhFbWFjcyB3YXMg
ZGlzdHJpYnV0ZWQgd2l0aCBhIFBST0JMRU1TIGZpbGUgdGhhdCBtYXkgZGVzY3JpYmUKeW91ciBj
cmFzaCwgYW5kIHdpdGggbHVjayBhIHdvcmthcm91bmQuICBQbGVhc2UgY2hlY2sgaXQgZmlyc3Qs
IGJ1dCBkbyByZXBvcnQKdGhlIGNyYXNoIGFueXdheS4KClBsZWFzZSByZXBvcnQgdGhpcyBidWcg
YnkgaW52b2tpbmcgTS14IHJlcG9ydC1lbWFjcy1idWcsIG9yIGJ5IHNlbGVjdGluZwpgU2VuZCBC
dWcgUmVwb3J0JyBmcm9tIHRoZSBIZWxwIG1lbnUuICBJZiB0aGF0IHdvbid0IHdvcmssIHNlbmQg
b3JkaW5hcnkKZW1haWwgdG8gYHhlbWFjcy1iZXRhQHhlbWFjcy5vcmcnLiAgKk1BS0UgU1VSRSog
dG8gaW5jbHVkZSB0aGlzIGVudGlyZQpvdXRwdXQgZnJvbSB0aGlzIGNyYXNoLCBlc3BlY2lhbGx5
IGluY2x1ZGluZyB0aGUgTGlzcCBiYWNrdHJhY2UsIGFzIHdlbGwgYXMKdGhlIFhFbWFjcyBjb25m
aWd1cmF0aW9uIGZyb20gTS14IGRlc2NyaWJlLWluc3RhbGxhdGlvbiAob3IgZXF1aXZhbGVudGx5
LAp0aGUgZmlsZSBgSW5zdGFsbGF0aW9uJyBpbiB0aGUgdG9wIG9mIHRoZSBidWlsZCB0cmVlKS4K
CipQbGVhc2UqIHRyeSAqaGFyZCogdG8gb2J0YWluIGEgQyBzdGFjayBiYWNrdHJhY2U7IHdpdGhv
dXQgaXQsIHdlIGFyZSB1bmxpa2VseQp0byBiZSBhYmxlIHRvIGFuYWx5emUgdGhlIHByb2JsZW0u
ICBMb2NhdGUgdGhlIGNvcmUgZmlsZSBwcm9kdWNlZCBhcyBhIHJlc3VsdApvZiB0aGlzIGNyYXNo
IChvZnRlbiBjYWxsZWQgYGNvcmUnIG9yIGBjb3JlLjxwcm9jZXNzLWlkPicsIGFuZCBsb2NhdGVk
IGluCnRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggeW91IHN0YXJ0ZWQgWEVtYWNzIG9yIHlvdXIgaG9t
ZSBkaXJlY3RvcnkpLCBhbmQgdHlwZQoKICBnZGIgL1VzZXJzL3N0ZXZlL3NyYy9YRW1hY3MvMjEu
NS9wcmlzdGluZS8rZ2NjNS9zcmMveGVtYWNzIGNvcmUKCnRoZW4gdHlwZSBgd2hlcmUnIGF0IHRo
ZSBkZWJ1Z2dlciBwcm9tcHQuICBObyBHREIgb24geW91ciBzeXN0ZW0/ICBZb3UgbWF5CmhhdmUg
REJYLCBvciBYREIsIG9yIFNEQi4gIChBc2sgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBpZiB5
b3UgbmVlZCBoZWxwLikKSWYgbm8gY29yZSBmaWxlIHdhcyBwcm9kdWNlZCwgZW5hYmxlIHRoZW0g
KG9mdGVuIHdpdGggYHVsaW1pdCAtYyB1bmxpbWl0ZWQnKQppbiBjYXNlIG9mIGZ1dHVyZSByZW9j
Y3VycmVuY2Ugb2YgdGhlIGNyYXNoLgoKTGlzcCBiYWNrdHJhY2UgZm9sbG93czoKCiAgIyAodW53
aW5kLXByb3RlY3QgLi4uKQogICMgYmluZCAoc3cgd2lkdGggc3RyaW5nKQogIHZtLWxlZnQtanVz
dGlmeS1zdHJpbmcoIj8/GyVH2pIbJUA/Pz8/GyVH4ZKkGyVAPz8/GyVH35IbJUA/Pz8/PyIgMTcp
CiAgKHZtLXRydW5jYXRlLXN0cmluZyAodm0tbGVmdC1qdXN0aWZ5LXN0cmluZyAodm0tZGVjb2Rl
LW1pbWUtZW5jb2RlZC13b3Jkcy1pbi1zdHJpbmcgKHZtLXN1LWludGVyZXN0aW5nLWZ1bGwtbmFt
ZSB2bS1zdS1tZXNzYWdlKSkgMTcpIDE3KQogIChmb3JtYXQgIiVzICVzICVzICVzICVzLyVzICIg
KHZtLWRlY29kZS1taW1lLWVuY29kZWQtd29yZHMtaW4tc3RyaW5nICh2bS1zdS1hdHRyaWJ1dGUt
aW5kaWNhdG9ycyB2bS1zdS1tZXNzYWdlKSkgKHZtLXRydW5jYXRlLXN0cmluZyAodm0tbGVmdC1q
dXN0aWZ5LXN0cmluZyAodm0tZGVjb2RlLW1pbWUtZW5jb2RlZC13b3Jkcy1pbi1zdHJpbmcgKHZt
LXN1LWludGVyZXN0aW5nLWZ1bGwtbmFtZSB2bS1zdS1tZXNzYWdlKSkgMTcpIDE3KSAodm0tdHJ1
bmNhdGUtc3RyaW5nICh2bS1sZWZ0LWp1c3RpZnktc3RyaW5nICh2bS1kZWNvZGUtbWltZS1lbmNv
ZGVkLXdvcmRzLWluLXN0cmluZyAodm0tc3UtbW9udGggdm0tc3UtbWVzc2FnZSkpIDMpIDMpICh2
bS1yaWdodC1qdXN0aWZ5LXN0cmluZyAodm0tZGVjb2RlLW1pbWUtZW5jb2RlZC13b3Jkcy1pbi1z
dHJpbmcgKHZtLXN1LW1vbnRoZGF5IHZtLXN1LW1lc3NhZ2UpKSAyKSAodm0tcmlnaHQtanVzdGlm
eS1zdHJpbmcgKHZtLWRlY29kZS1taW1lLWVuY29kZWQtd29yZHMtaW4tc3RyaW5nICh2bS1zdS1s
aW5lLWNvdW50IHZtLXN1LW1lc3NhZ2UpKSA0KSAodm0tbGVmdC1qdXN0aWZ5LXN0cmluZyAodm0t
ZGVjb2RlLW1pbWUtZW5jb2RlZC13b3Jkcy1pbi1zdHJpbmcgKHZtLXN1LWJ5dGUtY291bnQgdm0t
c3UtbWVzc2FnZSkpIDUpKQogIChsaXN0IChxdW90ZSBudW1iZXIpICIgIiAocXVvdGUgbWFyaykg
KGZvcm1hdCAiJXMgJXMgJXMgJXMgJXMvJXMgIiAodm0tZGVjb2RlLW1pbWUtZW5jb2RlZC13b3Jk
cy1pbi1zdHJpbmcgKHZtLXN1LWF0dHJpYnV0ZS1pbmRpY2F0b3JzIHZtLXN1LW1lc3NhZ2UpKSAo
dm0tdHJ1bmNhdGUtc3RyaW5nICh2bS1sZWZ0LWp1c3RpZnktc3RyaW5nICh2bS1kZWNvZGUtbWlt
ZS1lbmNvZGVkLXdvcmRzLWluLXN0cmluZyAodm0tc3UtaW50ZXJlc3RpbmctZnVsbC1uYW1lIHZt
LXN1LW1lc3NhZ2UpKSAxNykgMTcpICh2bS10cnVuY2F0ZS1zdHJpbmcgKHZtLWxlZnQtanVzdGlm
eS1zdHJpbmcgKHZtLWRlY29kZS1taW1lLWVuY29kZWQtd29yZHMtaW4tc3RyaW5nICh2bS1zdS1t
b250aCB2bS1zdS1tZXNzYWdlKSkgMykgMykgKHZtLXJpZ2h0LWp1c3RpZnktc3RyaW5nICh2bS1k
ZWNvZGUtbWltZS1lbmNvZGVkLXdvcmRzLWluLXN0cmluZyAodm0tc3UtbW9udGhkYXkgdm0tc3Ut
bWVzc2FnZSkpIDIpICh2bS1yaWdodC1qdXN0aWZ5LXN0cmluZyAodm0tZGVjb2RlLW1pbWUtZW5j
b2RlZC13b3Jkcy1pbi1zdHJpbmcgKHZtLXN1LWxpbmUtY291bnQgdm0tc3UtbWVzc2FnZSkpIDQp
ICh2bS1sZWZ0LWp1c3RpZnktc3RyaW5nICh2bS1kZWNvZGUtbWltZS1lbmNvZGVkLXdvcmRzLWlu
LXN0cmluZyAodm0tc3UtYnl0ZS1jb3VudCB2bS1zdS1tZXNzYWdlKSkgNSkpIChxdW90ZSB0aHJl
YWQtaW5kZW50KSAoZm9ybWF0ICJcIiVzXCJcbiIgKHZtLWRlY29kZS1taW1lLWVuY29kZWQtd29y
ZHMtaW4tc3RyaW5nICh2bS1zdS1zdW1tYXJ5LXN1YmplY3Qgdm0tc3UtbWVzc2FnZSkpKSkKICBl
dmFsKChsaXN0IChxdW90ZSBudW1iZXIpICIgIiAocXVvdGUgbWFyaykgKGZvcm1hdCAiJXMgJXMg
JXMgJXMgJXMvJXMgIiAodm0tZGVjb2RlLW1pbWUtZW5jb2RlZC13b3Jkcy1pbi1zdHJpbmcgKHZt
LXN1LWF0dHJpYnV0ZS1pbmRpY2F0b3JzIHZtLXN1LW1lc3NhZ2UpKSAodm0tdHJ1bmNhdGUtc3Ry
aW5nICh2bS1sZWZ0LWp1c3RpZnktc3RyaW5nICh2bS1kZWNvZGUtbWltZS1lbmNvZGVkLXdvcmRz
LWluLXN0cmluZyAodm0tc3UtaW50ZXJlc3RpbmctZnVsbC1uYW1lIHZtLXN1LW1lc3NhZ2UpKSAx
NykgMTcpICh2bS10cnVuY2F0ZS1zdHJpbmcgKHZtLWxlZnQtanVzdGlmeS1zdHJpbmcgKHZtLWRl
Y29kZS1taW1lLWVuY29kZWQtd29yZHMtaW4tc3RyaW5nICh2bS1zdS1tb250aCB2bS1zdS1tZXNz
YWdlKSkgMykgMykgKHZtLXJpZ2h0LWp1c3RpZnktc3RyaW5nICh2bS1kZWNvZGUtbWltZS1lbmNv
ZGVkLXdvcmRzLWluLXN0cmluZyAodm0tc3UtbW9udGhkYXkgdm0tc3UtbWVzc2FnZSkpIDIpICh2
bS1yaWdodC1qdXN0aWZ5LXN0cmluZyAodm0tZGVjb2RlLW1pbWUtZW5jb2RlZC13b3Jkcy1pbi1z
dHJpbmcgKHZtLXN1LWxpbmUtY291bnQgdm0tc3UtbWVzc2FnZSkpIDQpICh2bS1sZWZ0LWp1c3Rp
Znktc3RyaW5nICh2bS1kZWNvZGUtbWltZS1lbmNvZGVkLXdvcmRzLWluLXN0cmluZyAodm0tc3Ut
Ynl0ZS1jb3VudCB2bS1zdS1tZXNzYWdlKSkgNSkpIChxdW90ZSB0aHJlYWQtaW5kZW50KSAoZm9y
bWF0ICJcIiVzXCJcbiIgKHZtLWRlY29kZS1taW1lLWVuY29kZWQtd29yZHMtaW4tc3RyaW5nICh2
bS1zdS1zdW1tYXJ5LXN1YmplY3Qgdm0tc3UtbWVzc2FnZSkpKSkpCiAgIyBiaW5kICh2bS1zdS1t
ZXNzYWdlIHZtLW1pbWUtcXAtZGVjb2Rlci1wcm9ncmFtIHZtLW1pbWUtYmFzZTY0LWRlY29kZXIt
cHJvZ3JhbSBtYXRjaCBhbGlzdC12YXIgdG9rZW5pemUgbWVzc2FnZSBmb3JtYXQpCiAgdm0tc3Vt
bWFyeS1zcHJpbnRmKCIlbiAlKiVhICUtMTcuMTdGICUtMy4zbSAlMmQgJTRsLyUtNWMgJUlcIiVz
XCJcbiIgIzE9W1sjPG1hcmtlciBhdCAxMjYyNjcxOTkgaW4gSU5CT1ggMHgxOWZiZj4gIzxtYXJr
ZXIgYXQgMTI2MjY3MjM1IGluIElOQk9YIDB4MTlmYzA+IG5pbCAjPG1hcmtlciBhdCAxMjYyNjk1
NTUgaW4gSU5CT1ggMHgxYTg5OT4gIzxtYXJrZXIgYXQgMTI3MTcyNDczIGluIElOQk9YIDB4MTlm
YzE+ICM8bWFya2VyIGF0IDEyNzE3MjQ3NCBpbiBJTkJPWCAweDE5ZmMyPl0gWyIxNTA0IiAiMTUw
NCIgbmlsIDEzNzM4MCBuaWwgIzI9Izo8PD4+ICM6PC0tIEZyb21fICIxNTA4IiAjPGJ1ZmZlciAi
SU5CT1giPiBuaWwgKCM6PEI5RUJFREUyQTM2NjQ3OUVBRDhFMTE4ODJEMzk1N0M4QE1JTk9XQVBD
PikgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCAoIzEjKSAjMiMgbmlsXSBbdCBuaWwg
bmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu
aWwgbmlsIG5pbCBuaWxdIFtuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgIj8/GyVH2pIbJUA/
Pz8/GyVH4ZKkGyVAPz8/GyVH35IbJUA/Pz8/PyIgIkxETjAzMTQ0QG5pZnR5LmNvbSIgIjxCOUVC
RURFMkEzNjY0NzlFQUQ4RTExODgyRDM5NTdDOEBNSU5PV0FQQz4iIG5pbCAiPz8/Pz8/MTYwNzAz
IiBuaWwgbmlsIG5pbCBuaWwgIjIwMTYwNjMwMTU6NDQ6MzciICI/Pz8/Pz8xNjA3MDMiIG5pbCBu
aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5p
bCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls
IG5pbCBuaWxdIFtuaWwgIzo8dj4gbmlsIG5pbCBuaWwgbmlsXV0gdCkKICAjICh1bndpbmQtcHJv
dGVjdCAuLi4pCiAgIyBiaW5kIChtKQogIHZtLXN1LXN1bW1hcnkoIzE9W1sjPG1hcmtlciBhdCAx
MjYyNjcxOTkgaW4gSU5CT1ggMHgxOWZiZj4gIzxtYXJrZXIgYXQgMTI2MjY3MjM1IGluIElOQk9Y
IDB4MTlmYzA+IG5pbCAjPG1hcmtlciBhdCAxMjYyNjk1NTUgaW4gSU5CT1ggMHgxYTg5OT4gIzxt
YXJrZXIgYXQgMTI3MTcyNDczIGluIElOQk9YIDB4MTlmYzE+ICM8bWFya2VyIGF0IDEyNzE3MjQ3
NCBpbiBJTkJPWCAweDE5ZmMyPl0gWyIxNTA0IiAiMTUwNCIgbmlsIDEzNzM4MCBuaWwgIzI9Izo8
PD4+ICM6PC0tIEZyb21fICIxNTA4IiAjPGJ1ZmZlciAiSU5CT1giPiBuaWwgKCM6PEI5RUJFREUy
QTM2NjQ3OUVBRDhFMTE4ODJEMzk1N0M4QE1JTk9XQVBDPikgbmlsIG5pbCBuaWwgbmlsIG5pbCBu
aWwgbmlsIG5pbCAoIzEjKSAjMiMgbmlsXSBbdCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwg
bmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWxdIFtuaWwgbmls
IG5pbCBuaWwgbmlsIG5pbCBuaWwgIj8/GyVH2pIbJUA/Pz8/GyVH4ZKkGyVAPz8/GyVH35IbJUA/
Pz8/PyIgIkxETjAzMTQ0QG5pZnR5LmNvbSIgIjxCOUVCRURFMkEzNjY0NzlFQUQ4RTExODgyRDM5
NTdDOEBNSU5PV0FQQz4iIG5pbCAiPz8/Pz8/MTYwNzAzIiBuaWwgbmlsIG5pbCBuaWwgIjIwMTYw
NjMwMTU6NDQ6MzciICI/Pz8/Pz8xNjA3MDMiIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu
aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5p
bCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWxdIFtuaWwgIzo8dj4gbmls
IG5pbCBuaWwgbmlsXV0pCiAgIyBiaW5kIChtcCBtIHJvb3QpCiAgIyAodW53aW5kLXByb3RlY3Qg
Li4uKQogICMgYmluZCAobW9kaWZpZWQgYnVmZmVyLXJlYWQtb25seSBkZWJ1ZyB0cmFjaykKICAj
ICh1bndpbmQtcHJvdGVjdCAuLi4pCiAgIyBiaW5kIChtLWxpc3QgZG8tbW91c2UtdHJhY2sgbiBt
b2R1bHVzIHN0YXJ0LXBvaW50KQogIHZtLWRvLXN1bW1hcnkobmlsKQogIHZtLWRvLW5lZWRlZC1z
dW1tYXJ5LXJlYnVpbGQoKQogICMgYmluZCAoYikKICAjPGNvbXBpbGVkLWZ1bmN0aW9uIChmcm9t
ICIvdXNyL2xvY2FsL3NoYXJlL3hlbWFjcy94ZW1hY3MtcGFja2FnZXMvbGlzcC92bS92bS1mb2xk
ZXIuZWxjIikgKGIpICIuLi4oNTUpIiBbdm0tc3VtbWFyeS1idWZmZXIgdm0tdGhyZWFkLW9iYXJy
YXkgdm0tc3VtbWFyeS1zaG93LXRocmVhZHMgdm0tdXNlLXRvb2xiYXIgdm0tYnVmZmVycy1uZWVk
aW5nLXVuZG8tYm91bmRhcmllcyBiIGdldC1idWZmZXIgc3ltYm9sLW5hbWUgaW50ZXJuIGJ1ZmZl
ci1uYW1lIHZtLWNoZWNrLWZvci1raWxsZWQtc3VtbWFyeSB2bS10b29sYmFyLXN1cHBvcnQtcG9z
c2libGUtcCB2bS10b29sYmFyLXVwZGF0ZS10b29sYmFyIHZlY3RvcnAgdm0tYnVpbGQtdGhyZWFk
cyBuaWwgdm0tZG8tbmVlZGVkLXJlbnVtYmVyaW5nIHZtLWRvLW5lZWRlZC1zdW1tYXJ5LXJlYnVp
bGQgdm0tZG8tbmVlZGVkLW1vZGUtbGluZS11cGRhdGVdIDQgMHgyNTQ1PigjOklOQk9YKQogIG1h
cGF0b21zKCM8Y29tcGlsZWQtZnVuY3Rpb24gKGZyb20gIi91c3IvbG9jYWwvc2hhcmUveGVtYWNz
L3hlbWFjcy1wYWNrYWdlcy9saXNwL3ZtL3ZtLWZvbGRlci5lbGMiKSAoYikgIi4uLig1NSkiIFt2
bS1zdW1tYXJ5LWJ1ZmZlciB2bS10aHJlYWQtb2JhcnJheSB2bS1zdW1tYXJ5LXNob3ctdGhyZWFk
cyB2bS11c2UtdG9vbGJhciB2bS1idWZmZXJzLW5lZWRpbmctdW5kby1ib3VuZGFyaWVzIGIgZ2V0
LWJ1ZmZlciBzeW1ib2wtbmFtZSBpbnRlcm4gYnVmZmVyLW5hbWUgdm0tY2hlY2stZm9yLWtpbGxl
ZC1zdW1tYXJ5IHZtLXRvb2xiYXItc3VwcG9ydC1wb3NzaWJsZS1wIHZtLXRvb2xiYXItdXBkYXRl
LXRvb2xiYXIgdmVjdG9ycCB2bS1idWlsZC10aHJlYWRzIG5pbCB2bS1kby1uZWVkZWQtcmVudW1i
ZXJpbmcgdm0tZG8tbmVlZGVkLXN1bW1hcnktcmVidWlsZCB2bS1kby1uZWVkZWQtbW9kZS1saW5l
LXVwZGF0ZV0gNCAweDI1NDU+IFswIDAgMCAwIDAgMCAwIDAgMCAwIDAgIzpJTkJPWCAwIDAgMCAw
IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDBdKQogICMgKHVud2luZC1wcm90ZWN0IC4uLikKICB2
bS11cGRhdGUtc3VtbWFyeS1hbmQtbW9kZS1saW5lKCkKICAjIGJpbmQgKHJhaXNlIGRpc3BsYXkp
CiAgdm0tc3VtbWFyaXplKHQgbmlsKQogICMgYmluZCAoZnVsbC1zdGFydHVwIHJldmlzaXRpbmcg
c2V0LXZtLW1vZGUgZ29iYmxlLWhlYWRlcnMgcHJlc2VydmUtYXV0by1zYXZlLWZpbGUgZm9sZGVy
LWJ1ZmZlciBmb2xkZXItbmFtZSBhY2NvdW50LW5hbWUgcmVtb3RlLXNwZWMgdG90YWxzLWJsdXJi
KQogIGJ5dGUtY29kZSgiLi4uIiBbdG90YWxzLWJsdXJiIHNldC12bS1tb2RlIGZ1bGwtc3RhcnR1
cCByZW1vdGUtc3BlYyBhY2Nlc3MtbWV0aG9kIGZvbGRlciBidWZmZXJwIHN0cmluZy1tYXRjaCBp
bWFwIHBvcCBleHBhbmQtZmlsZS1uYW1lIG5pbCB2bS1wb3AtZmluZC1uYW1lLWZvci1zcGVjICJQ
T1AiIHZtLXBvcC1maW5kLWNhY2hlLWZpbGUtZm9yLXNwZWMgMyB2bS1pbWFwLXBhcnNlLXNwZWMt
dG8tbGlzdCAiaW5ib3giIHZtLWltYXAtYWNjb3VudC1uYW1lLWZvci1zcGVjIHZtLWltYXAtbWFr
ZS1maWxlbmFtZS1mb3Itc3BlYyB2bS1yZWFkLWZvbGRlciB2bS1tb2RlIHZtLXRodW5kZXJiaXJk
LWZvbGRlci1wIGJ1ZmZlci1maWxlLW5hbWUgc2V0LWJ1ZmZlci1tdWx0aWJ5dGUgdm0tc2V0dXAt
eGVtYWNzLWZvbGRlci1jb2Rpbmctc3lzdGVtIHZtLXNldHVwLWZzZmVtYWNzLWZvbGRlci1jb2Rp
bmctc3lzdGVtIHZtLWNoZWNrLWZvci1raWxsZWQtc3VtbWFyeSB2bS1jaGVjay1mb3Ita2lsbGVk
LXByZXNlbnRhdGlvbiBidWZmZXItbW9kaWZpZWQtcCAwIGZpbGUtbmV3ZXItdGhhbi1maWxlLXAg
bWFrZS1hdXRvLXNhdmUtZmlsZS1uYW1lIGRlZmF1bHQtdmFsdWUgdm0tZm9sZGVyLXJlYWQtb25s
eSBidWZmZXItZGlzYWJsZS11bmRvIGFiYnJldi1tb2RlIGF1dG8tZmlsbC1tb2RlIHZtLWZzZmVt
YWNzLW5vbm11bGUtZGlzcGxheS04Yml0LWNoYXJzIHZtLW1vZGUtaW50ZXJuYWwgdm0tcmVhZC1p
bmRleC1maWxlLW1heWJlIHZtLXJlZ2lzdGVyLWZvbGRlci1nYXJiYWdlIHZtLWtpbGwtZm9sZGVy
LWltYXAtc2Vzc2lvbiB2bS1hc3NpbWlsYXRlLW5ldy1tZXNzYWdlcyA6cmVhZC1hdHRyaWJ1dGVz
IHQgOmdvYmJsZS1vcmRlciA6cnVuLWhvb2tzIHZtLXN0dWZmLWZvbGRlci1kYXRhIDppbnRlcmFj
dGl2ZSAuLi5dIDExKQogICMgKGNhdGNoIGRvbmUgLi4uKQogICMgYmluZCAoanVzdC12aXNpdCBy
ZWxvYWQgYWNjZXNzLW1ldGhvZCBpbnRlcmFjdGl2ZSByZWFkLW9ubHkgIzotLXJlc3QtLTc4MzAy
IGZvbGRlcikKICB2bSgpCiAgIyBiaW5kIChhcmcpCiAgY29tbWFuZC1saW5lLWRvLWZ1bmNhbGwo
Ii1mIikKICAjIGJpbmQgKGRpciBmaWxlLWNvdW50IGxpbmUgZW5kLW9mLW9wdGlvbnMgZmlsZS1w
IGFyZyB0ZW0pCiAgY29tbWFuZC1saW5lLTEoKQogICMgYmluZCAoY29tbWFuZC1saW5lLWFyZ3Mt
bGVmdCkKICBjb21tYW5kLWxpbmUoKQogICMgKHVud2luZC1wcm90ZWN0IC4uLikKICBjYWxsLXdp
dGgtY29uZGl0aW9uLWhhbmRsZXIoIzxjb21waWxlZC1mdW5jdGlvbiAoZnJvbSAiL1VzZXJzL3N0
ZXZlL3NyYy9YRW1hY3MvMjEuNS9wcmlzdGluZS9saXNwL3N0YXJ0dXAuZWxjIikgKCZvcHRpb25h
bCBlcnJvci1kYXRhKSAiLi4uKDUwKSIgW2F1dG8tc2F2ZS1saXN0LWZpbGUtbmFtZSAjOm50bC1i
dWZmZXIgd2luZG93LXNldHVwLWhvb2sgdGVybS1zZXR1cC1ob29rIGF1dG8tc2F2ZS1saXN0LWZp
bGUtcHJlZml4IGRlZmF1bHQtZGlyZWN0b3J5IGFiYnJldmlhdGUtZmlsZS1uYW1lIGV4cGFuZC1m
aWxlLW5hbWUgZm9ybWF0ICIlcyVkLSVzIiBlbWFjcy1waWQgc3lzdGVtLW5hbWUgcnVuLWhvb2tz
IGVtYWNzLXN0YXJ0dXAtaG9vayBuaWwgZnJhbWUtbm90aWNlLXVzZXItc2V0dGluZ3NdIDYgMHg2
YTA+IGNvbW1hbmQtbGluZSkKICAjIGJpbmQgKCM6bnRsLWJ1ZmZlcikKICBub3JtYWwtdG9wLWxl
dmVsKCkKICAjIChjb25kaXRpb24tY2FzZSAuLi4gLiBlcnJvcikKICAjIChjYXRjaCB0b3AtbGV2
ZWwgLi4uKQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
ClhFbWFjcy1QYXRjaGVzIG1haWxpbmcgbGlzdApYRW1hY3MtUGF0Y2hlc0B4ZW1hY3Mub3JnCmh0
dHA6Ly9saXN0cy54ZW1hY3Mub3JnL21haWxtYW4vbGlzdGluZm8veGVtYWNzLXBhdGNoZXMK