[PATCH v2] exceptions: Fix AArch64 non-incyg signal handling

Máté Dimand <[email protected]> Wed, 15 Jul 2026 16:22:03 +0300
Newsgroups gmane.os.cygwin.patches
Message-ID <[email protected]>
--------------zVO4N0Z2hWUUVvgrmrNt9EFk
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit

Hi everyone,

I have resolved the concerns raised by Jon Turney about nested signal 
handling in the previous version by taking a different approach.

Best regards,
Máté Dimand
--------------zVO4N0Z2hWUUVvgrmrNt9EFk
Content-Type: text/plain; charset=UTF-8;
 name="0001-exceptions-Fix-AArch64-non-incyg-signal-handling.patch"
Content-Disposition: attachment;
 filename*0="0001-exceptions-Fix-AArch64-non-incyg-signal-handling.patch"
Content-Transfer-Encoding: base64

RnJvbSA3NmQ5NTc2NGI4YjBkY2E3MDJiNjliNTU3M2IwNWFiYjVkNjRjYTRjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRlIERpbWFuZCA8bWF0ZS5kaW1hbmRAYXJtLmNvbT4KRGF0
ZTogRnJpLCAxMCBKdWwgMjAyNiAxMToxNjo1MiArMDIwMApTdWJqZWN0OiBbUEFUQ0ggdjJdIGV4
Y2VwdGlvbnM6IEZpeCBBQXJjaDY0IG5vbi1pbmN5ZyBzaWduYWwgaGFuZGxpbmcKClRoaXMgcGF0
Y2ggZml4ZXMgY3Jhc2hlcyB0aGF0IG9jY3VyIHdoZW4gYSBzaWduYWwgaW50ZXJydXB0cyBzaWdm
ZSBvcgphbnkgbm9uLWN5Z3dpbiBmdW5jdGlvbiB0aGF0IGRvZXMgbm90IHByZXNlcnZlIHRoZSBM
UiByZWdpc3RlciBpbiBpdHMKcHJvbG9ndWUvZXBpbG9ndWUuIFRoaXMgY3Jhc2ggd2FzIGRpc2Nv
dmVyZWQgdGhyb3VnaCB0aGUgInJ1bi1oZXJlZG9jIgp0ZXN0Y2FzZSBpbiBiYXNoJ3MgdGVzdHN1
aXRlLCB3aGljaCBjYXVzZWQgYmFzaCB0byBjYWxsICJyZWFkIgpmcmVxdWVudGx5LCBsZWFkaW5n
IHRvIGEgaGlnaCBjaGFuY2Ugb2YgYSBzaWduYWwgaW50ZXJydXB0aW5nIHNpZ2ZlLgoKVGhlIG9y
aWdpbmFsICJzaWdkZWxheWVkIiBmdW5jdGlvbiBpbiBnZW5kZWYgY2xvYmJlcmVkIHRoZSBMUiBy
ZWdpc3Rlcgp0byByZXR1cm4gdG8gdGhlIGluc3RydWN0aW9uIHdoZXJlIHRoZSB0aHJlYWQgd2Fz
IGludGVycnVwdGVkLiBQaWNraW5nCmFueSBvdGhlciByZWdpc3RlciBmb3IgYnJhbmNoaW5nIGJh
Y2sgd291bGQgYWxzbyBjbG9iYmVyIHNhaWQgcmVnaXN0ZXIuCkxlYWYgZnVuY3Rpb25zIGFyZSBu
b3QgZ3VhcmFudGVlZCB0byBiZSBjb21waWxlZCB3aXRoIExSIGJlaW5nIHByZXNlcnZlZApvbiB0
aGUgc3RhY2suIFRoZSBzb2x1dGlvbiBpcyB0byB1c2UgUnRsUmVzdG9yZUNvbnRleHQgdG8gcmVz
dG9yZSBhbGwKcmVnaXN0ZXJzIHdpdGhvdXQgbmVlZGluZyB0byBzYWNyaWZpY2UgYW55LgoKVGhl
IHBhdGNoIHJlcGxhY2VzIHNpZ2RlbGF5ZWQgd2l0aCBhbiBpbXBsZW1lbnRhdGlvbiB0aGF0IGNv
bnNpc3RzIG9mCmJvdGggQyBhbmQgYXNzZW1ibHkgZnVuY3Rpb25zLiBUaGUgInNpZ2RlbGF5ZWQi
IGFzc2VtYmx5IGZ1bmN0aW9uIHdhcwpyZXBsYWNlZCB3aXRoIGEgc2ltcGxlIHdyYXBwZXIgZnVu
Y3Rpb24gdGhhdCB3YXMga2VwdCBhcyBhc3NlbWJseSBjb2RlCnRvIGd1YXJhbnRlZSB0b3RhbCBj
b250cm9sIG9mIHRoZSByZWdpc3RlcnMgdGhhdCBnZXQgY2xvYmJlcmVkIHByaW9yIHRvCmNhcHR1
cmluZyB0aGUgY29udGV4dC4gVGhpcyBmdW5jdGlvbiBjYWxscyBSdGxDYXB0dXJlQ29udGV4dCBm
aXJzdCwgd2l0aAp0aGUgY29udGV4dCBiZWluZyBzdG9yZWQgb24gdGhlIHN0YWNrLiBUaGUgY29u
dGV4dCBpcyB0aGVuIHBhc3NlZCB0byBhCkMrKyBmdW5jdGlvbiB3aGljaCBmaXhlcyB0aGUgY2xv
YmJlcmVkIHJlZ2lzdGVycy4gRmluYWxseSwgdGhpcyBjYWxscyBhCkMrKyBpbXBsZW1lbnRhdGlv
biBvZiB0aGUgb3JpZ2luYWwgeDY0L0FBcmNoNjQgYXNzZW1ibHkgdmVyc2lvbiBvZgpzaWdkZWxh
eWVkLiBUaGVzZSBmdW5jdGlvbnMgd2VyZSBub3Qgd3JpdHRlbiBpbiBhc3NlbWJseSBmb3IgdGhl
IHNha2Ugb2YKcmVhZGFiaWxpdHkuIE9uY2UgaXQgY29tcGxldGVkIGhhbmRsaW5nIHRoZSBzaWdu
YWxzLCBpdCB1c2VzClJ0bFJlc3RvcmVDb250ZXh0IHRvIGp1bXAgYmFjay4KClNpZ25lZC1vZmYt
Ynk6IE1hdGUgRGltYW5kIDxtYXRlLmRpbWFuZEBhcm0uY29tPgotLS0KIHdpbnN1cC9jeWd3aW4v
ZXhjZXB0aW9ucy5jYyAgICAgICAgICAgfCAgNjEgKysrKysrKysrKwogd2luc3VwL2N5Z3dpbi9s
b2NhbF9pbmNsdWRlcy9jeWd0bHMuaCB8ICAgNSArCiB3aW5zdXAvY3lnd2luL3NjcmlwdHMvZ2Vu
ZGVmICAgICAgICAgIHwgMTY4ICsrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAzIGZpbGVzIGNo
YW5nZWQsIDgyIGluc2VydGlvbnMoKyksIDE1MiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS93
aW5zdXAvY3lnd2luL2V4Y2VwdGlvbnMuY2MgYi93aW5zdXAvY3lnd2luL2V4Y2VwdGlvbnMuY2MK
aW5kZXggMWUxMjliMzE5Li5kODljZjJjMDYgMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4vZXhj
ZXB0aW9ucy5jYworKysgYi93aW5zdXAvY3lnd2luL2V4Y2VwdGlvbnMuY2MKQEAgLTk0Nyw2ICs5
NDcsNjcgQEAgc2luZ2xlc3RlcF9oYW5kbGVyIChFWENFUFRJT05fUE9JTlRFUlMgKmVwKQogfQog
I2VuZGlmCiAKKyNpZmRlZiBfX2FhcmNoNjRfXworLyogVGhpcyBmdW5jdGlvbiB1c2VzIFJ0bFJl
c3RvcmVDb250ZXh0IHRvIGVuc3VyZSB0aGF0IExSIGRvZXMgbm90IGdldAorICAgY2xvYmJlcmVk
LiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IHJldHVybiwgYW5kIHRoZSBzdGFj
aworICAgY29udGVudHMgY3JlYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGFyZSBsZWZ0IHVuLXBvcHBl
ZC4gVGhpcyBzaG91bGQKKyAgIG5vdCBiZSBhIHByb2JsZW0sIHNpbmNlIHRoZSBjb250ZXh0IHJl
c3RvcmF0aW9uIGFsc28gcmVzdG9yZXMgU1AuICovCit2b2lkCitfY3lndGxzOjpzaWdkZWxheWVk
X2ltcGwoUENPTlRFWFQgY3R4KQoreworICBpbnQgYmFja3VwX2Vycm5vID0gc2F2ZWRfZXJybm87
CisKKyAgY2FsbF9zaWduYWxfaGFuZGxlcigpOworCisgIGxvY2soKTsKKworICBpZihiYWNrdXBf
ZXJybm8gPj0gMCkKKyAgeworICAgICplcnJub19hZGRyID0gYmFja3VwX2Vycm5vOworICB9CisK
KyAgY3R4LT5QYyA9IHBvcCgpOworCisgIC8qIEF0b21pY2FsbHkgY2xlYXIgdGhlIHJldHVybiBh
ZGRyZXNzLiAqLworICBJbnRlcmxvY2tlZEV4Y2hhbmdlNjQgKChMT05HNjQqKXN0YWNrcHRyLCAw
KTsKKworICBpbmN5ZyA9IDA7CisgIHVubG9jaygpOworCisgIFJ0bFJlc3RvcmVDb250ZXh0KGN0
eCwgTlVMTCk7CisKKyAgLyogSWYgd2UgZ290IGhlcmUsIHNvbWV0aGluZyB3YXMgd3JvbmcuICov
CisgIGFwaV9mYXRhbCAoIkZhaWxlZCB0byByZXN0b3JlIGNvbnRleHQgaW4gc2lnZGVsYXllZF9p
bXBsIik7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gcmVzdG9yZXMgdGhlIGNvbnRleHQncyBjbG9i
YmVyZWQgcmVnaXN0ZXJzIGFuZAorICAgY2FsbHMgdGhlIGFjdHVhbCBzaWdkZWxheWVkIGltcGxl
bWVudGF0aW9uLiAqLworZXh0ZXJuICJDIiB2b2lkCitzaWdkZWxheWVkX2luaXQoUENPTlRFWFQg
Y3R4KQoreworICAvKiBSZXRyaWV2aW5nIHRoZSByZWdpc3RlcnMgc3RvcmVkIG9uIHN0YWNrIGJ5
IHNpZ2RlbGF5ZWQuICovCisgIGNvbnN0IERXT1JENjQqIHNwID0gKChEV09SRDY0KiljdHgtPlNw
KTsKKyAgY29uc3QgRFdPUkQ2NCBzdGFja194MTYgPSBzcFswXTsKKyAgY29uc3QgRFdPUkQ2NCBz
dGFja194MTcgPSBzcFsxXTsKKyAgY29uc3QgRFdPUkQ2NCBzdGFja194MCA9IHNwWzJdOworICBj
b25zdCBEV09SRDY0IHN0YWNrX2xyID0gc3BbM107CisKKyAgY3R4LT5YMTYgPSBzdGFja194MTY7
IC8vIHgxNiBjbG9iYmVyZWQgYnkgUnRsQ2FwdHVyZUNvbnRleHQKKyAgY3R4LT5YMTcgPSBzdGFj
a194MTc7CisgIGN0eC0+WDAgPSBzdGFja194MDsgLy8geDAgaXNuJ3Qgc2V0IGJ5IFJ0bENhcHR1
cmVDb250ZXh0CisgIGN0eC0+THIgPSBzdGFja19scjsgLy8gTFIgaXMgemVyb2VkIG91dCBieSBS
dGxDYXB0dXJlQ29udGV4dAorCisgIC8qICJzaWdkZWxheWVkIiBhbGxvY2F0ZXMgMHgzOTAgYnl0
ZXMgZm9yIHRoZSBjb250ZXh0LCBtYXRjaGluZyB0aGUKKyAgICAgc3RydWN0J3Mgc2l6ZS4gVGhp
cyBzaG91bGQgY2F1c2UgYW4gZXJyb3IgaWYgdGhlIHNpemUgb2YgdGhlIHN0cnVjdAorICAgICBo
YXBwZW5lZCB0byBjaGFuZ2UuICovCisgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKENPTlRFWFQpID09
IDB4MzkwKTsKKworICBjdHgtPlNwICs9IHNpemVvZihDT05URVhUKSArIDMyOyAvLyB1bmRvIHN0
YWNrIHB1c2hlcyBmcm9tIHNpZ2RlbGF5ZWQKKworICBfbXlfdGxzLnNpZ2RlbGF5ZWRfaW1wbChj
dHgpOworfQorI2VuZGlmCisKIGJvb2wKIF9jeWd0bHM6OmludGVycnVwdF9ub3cgKENPTlRFWFQg
KmN4LCBzaWdpbmZvX3QmIHNpLCB2b2lkICpoYW5kbGVyLAogCQkJc3RydWN0IHNpZ2FjdGlvbiYg
c2lnYSkKZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vbG9jYWxfaW5jbHVkZXMvY3lndGxzLmgg
Yi93aW5zdXAvY3lnd2luL2xvY2FsX2luY2x1ZGVzL2N5Z3Rscy5oCmluZGV4IDBiNTI1NTQ5NS4u
YTg3NDI2ODI4IDEwMDY0NAotLS0gYS93aW5zdXAvY3lnd2luL2xvY2FsX2luY2x1ZGVzL2N5Z3Rs
cy5oCisrKyBiL3dpbnN1cC9jeWd3aW4vbG9jYWxfaW5jbHVkZXMvY3lndGxzLmgKQEAgLTIyOCw2
ICsyMjgsMTEgQEAgcHVibGljOiAvKiBEbyBOT1QgcmVtb3ZlIHRoaXMgcHVibGljOiBsaW5lLCBp
dCdzIGEgbWFya2VyIGZvciBnZW50bHNfb2Zmc2V0cy4gKi8KICAgewogICAgIHJldHVybiBpbml0
aWFsaXplZCA9PSBDWUdUTFNfSU5JVElBTElaRUQ7CiAgIH0KKyAgCisjaWZkZWYgX19hYXJjaDY0
X18KKyAgdm9pZCBzaWdkZWxheWVkX2ltcGwoUENPTlRFWFQgY3R4KTsKKyNlbmRpZgorCiAgIGJv
b2wgaW50ZXJydXB0X25vdyAoQ09OVEVYVCAqLCBzaWdpbmZvX3QmLCB2b2lkICosIHN0cnVjdCBz
aWdhY3Rpb24mKTsKICAgdm9pZCBpbnRlcnJ1cHRfc2V0dXAgKHNpZ2luZm9fdCYsIHZvaWQgKiwg
c3RydWN0IHNpZ2FjdGlvbiYpOwogCmRpZmYgLS1naXQgYS93aW5zdXAvY3lnd2luL3NjcmlwdHMv
Z2VuZGVmIGIvd2luc3VwL2N5Z3dpbi9zY3JpcHRzL2dlbmRlZgppbmRleCAyNTY5ODQwNGIuLjIz
Mzg0N2UxYSAxMDA3NTUKLS0tIGEvd2luc3VwL2N5Z3dpbi9zY3JpcHRzL2dlbmRlZgorKysgYi93
aW5zdXAvY3lnd2luL3NjcmlwdHMvZ2VuZGVmCkBAIC00NjEsMTYyICs0NjEsMjYgQEAgX3NpZ2Jl
OgogCS5nbG9iYWwJc2lnZGVsYXllZAogCS5zZWhfcHJvYyBzaWdkZWxheWVkCiBzaWdkZWxheWVk
OgotCXN0cAl4MCwgIHgxLCAgW3NwLCAjLTE2XSEKLQlzdHAJeDIsICB4MywgIFtzcCwgIy0xNl0h
Ci0Jc3RwCXg0LCAgeDUsICBbc3AsICMtMTZdIQotCXN0cAl4NiwgIHg3LCAgW3NwLCAjLTE2XSEK
LQlzdHAJeDgsICB4OSwgIFtzcCwgIy0xNl0hCi0Jc3RwCXgxMCwgeDExLCBbc3AsICMtMTZdIQot
CXN0cAl4MTIsIHgxMywgW3NwLCAjLTE2XSEKLQlzdHAJeDE0LCB4MTUsIFtzcCwgIy0xNl0hCi0J
c3RwCXgxNiwgeDE3LCBbc3AsICMtMTZdIQotCXN0cAl4MTgsIHgxOSwgW3NwLCAjLTE2XSEKLQku
c2VoX3N0YWNrYWxsb2MgMTYwCi0JLnNlaF9zYXZlX3JlZyB4MTksIDE1MgotCXN0cAl4MjAsIHgy
MSwgW3NwLCAjLTE2XSEKLQkuc2VoX3NhdmVfcmVncF94IHgyMCwgMTYKLQlzdHAJeDIyLCB4MjMs
IFtzcCwgIy0xNl0hCi0JLnNlaF9zYXZlX3JlZ3BfeCB4MjIsIDE2Ci0Jc3RwCXgyNCwgeDI1LCBb
c3AsICMtMTZdIQotCS5zZWhfc2F2ZV9yZWdwX3ggeDI0LCAxNgotCXN0cAl4MjYsIHgyNywgW3Nw
LCAjLTE2XSEKLQkuc2VoX3NhdmVfcmVncF94IHgyNiwgMTYKLQlzdHAJeDI4LCB4MjksIFtzcCwg
Iy0xNl0hCi0JLnNlaF9zYXZlX3JlZ3BfeCB4MjgsIDE2Ci0KLQltb3YJeDEsIHNwCi0Jc3RyCXgx
LCBbc3AsICMtMTZdIQotCi0Jc3RwCXEwLCAgcTEsICBbc3AsICMtMzJdIQotCXN0cAlxMiwgIHEz
LCAgW3NwLCAjLTMyXSEKLQlzdHAJcTQsICBxNSwgIFtzcCwgIy0zMl0hCi0Jc3RwCXE2LCAgcTcs
ICBbc3AsICMtMzJdIQotCXN0cAlxOCwgIHE5LCAgW3NwLCAjLTMyXSEKLQlzdHAJcTEwLCBxMTEs
IFtzcCwgIy0zMl0hCi0Jc3RwCXExMiwgcTEzLCBbc3AsICMtMzJdIQotCXN0cAlxMTQsIHExNSwg
W3NwLCAjLTMyXSEKLQlzdHAJcTE2LCBxMTcsIFtzcCwgIy0zMl0hCi0Jc3RwCXExOCwgcTE5LCBb
c3AsICMtMzJdIQotCXN0cAlxMjAsIHEyMSwgW3NwLCAjLTMyXSEKLQlzdHAJcTIyLCBxMjMsIFtz
cCwgIy0zMl0hCi0Jc3RwCXEyNCwgcTI1LCBbc3AsICMtMzJdIQotCXN0cAlxMjYsIHEyNywgW3Nw
LCAjLTMyXSEKLQlzdHAJcTI4LCBxMjksIFtzcCwgIy0zMl0hCi0Jc3RwCXEzMCwgcTMxLCBbc3As
ICMtMzJdIQotCi0JbXJzCXgxLCBmcGNyCi0JbXJzCXgyLCBmcHNyCi0Jc3RwCXgxLCB4MiwgW3Nw
LCAjLTE2XSEKLQotCS5zZWhfc3RhY2thbGxvYyA1NDQKLQorCXN1YglzcCwJc3AsCTB4MzkwIAkv
LyBzaXplb2YoQVJNNjRfTlRfQ09OVEVYVCkKKwkuc2VoX3N0YWNrYWxsb2MgMHgzOTAKKwlzdHAJ
eDAsCXgzMCwJW3NwLCAjLTE2XSEKKworCS8vIHgxNiBnZXRzIGNsb2JiZXJlZCBhZnRlciBjYWxs
aW5nIFJ0bENhcHR1cmVDb250ZXh0LgorCS8vIEJvdGggeDE2IGFuZCB4MTcgYXJlIGNvbnNpZGVy
ZWQgdm9sYXRpbGUgcmVnaXN0ZXJzLCBzbyB3ZSBwcmVzZXJ2ZSBib3RoLgorCXN0cAl4MTYsCXgx
NywJW3NwLCAjLTE2XSEKKwkuc2VoX3NhdmVfcmVncF94IHgxNiwgMTYKIAkuc2VoX2VuZHByb2xv
Z3VlCiAKLQlsZHIJeDEyLCBbeDE4LCAjOF0JCQkvLyBnZXQgVExTIHBvaW50ZXIKLQlsZHIJeDEz
LCA9X2N5Z3Rscy5zYXZlZF9lcnJubwkvLyBnZXQgb2Zmc2V0IHRvIHNhdmVkX2Vycm5vCi0JYWRk
CXgxMywgeDEyLCB4MTMJCQkvLyBzZXQgeDEzIHRvICZUTFMuc2F2ZWRfZXJybm8KLQlsZHIJdzE5
LCBbeDEzXQkJCS8vIHByZXNlcnZlIHNhdmVkX2Vycm5vIGluIHcxOQotCi0JbGRyCXgxMywgPV9j
eWd0bHMuc3RhcnRfb2Zmc2V0CS8vIGdldCBvZmZzZXQgdG8gYmVnaW5uaW5nIG9mIFRMUyBibG9j
awotCWFkZAl4MCwgeDEyLCB4MTMJCQkvLyBzdG9yZSBvZmZzZXQgYXMgZmlyc3QgYXJnIHRvIG1l
dGhvZAotCWJsCV9aTjdfY3lndGxzMTljYWxsX3NpZ25hbF9oYW5kbGVyRXYJLy8gY2FsbCBoYW5k
bGVyCi0JbGRyCXgxMiwgW3gxOCwgIzhdCQkJLy8gcmVzdG9yZSBjbG9iYmVyZWQgVExTIHBvaW50
ZXIKKwkvLyBSdGxDYXB0dXJlQ29udGV4dCBjYXB0dXJlcyB0aGUgY3VycmVudCBDUFUgc3RhdGUK
KwkvLyBhdCB0aGUgdGltZSBvZiBjYWxsaW5nIGl0LCBsZXR0aW5nIHVzIHJlc3RvcmUgaXQKKwkv
LyBsYXRlciB3aXRoIGFkanVzdGVkIHJlZ2lzdGVycyBpbiBzaWdkZWxheWVkX2ltcGwuCisJYWRk
CXgwLAlzcCwJMzIJCS8vIHNldCB4MCB0byB0aGUgc3RhY2sgc3BhY2UgYWxsb2NhdGVkIGZvciB0
aGUgY29udGV4dAorCWJsIFJ0bENhcHR1cmVDb250ZXh0CiAKLQltb3YJdzExLCAjMQkJCQkvLyBz
ZXQgdzExIHRvIDEgKGxvY2tlZCkKLQlsZHIJeDEzLCA9X2N5Z3Rscy5zdGFja2xvY2sJCS8vIGdl
dCBvZmZzZXQgdG8gc3RhY2tsb2NrCi0JYWRkCXgxMywgeDEyLCB4MTMJCQkvLyBzZXQgeDEzIHRv
ICZUTFMuc3RhY2tsb2NrCi0xOgotCWxkYXhyCXcxNCwgW3gxM10JCQkvLyByZWFkIGxvY2sgdmFs
dWUgd2l0aCBhY3F1aXJlCi0JY2Juegl3MTQsIDJmCQkJCS8vIHdhaXQgaWYgYWxyZWFkeSBsb2Nr
ZWQKLQlzdHhyCXcxNCwgdzExLCBbeDEzXQkJCS8vIGF0dGVtcHQgdG8gc3RvcmUgMQotCWNibnoJ
dzE0LCAxYgkJCQkvLyByZXRyeSBpZiBsb2NraW5nIG5vdCBzdWNjZWVkZWQKLQliCTNmCQkJCS8v
IGNvbnRpbnVlIHRvIGNyaXRpY2FsIHJlZ2lvbgotMjoKLQl5aWVsZAkJCQkJLy8gaGludCB0byBD
UFUgKHNwaW4td2FpdCkKLQliCTFiCQkJCS8vIHRyeSBhZ2FpbgorCWFkZAl4MCwJc3AsCTMyCQkv
LyByZXNldCB4MCBpbiBjYXNlIGl0IGdvdCBjbG9iYmVyZWQKKwlibCBzaWdkZWxheWVkX2luaXQK
IAotMzoKLQl0c3QJdzE5LCB3MTkJCQkvLyB3YXMgc2F2ZWRfZXJybm8gPCAwCi0JYmx0CTRmCQkJ
CS8vIGlmIHllcywgaWdub3JlIGl0Ci0JbGRyCXgxMywgPV9jeWd0bHMuZXJybm9fYWRkcgkvLyBn
ZXQgb2Zmc2V0IHRvIGVycm5vX2FkZHIKLQlhZGQJeDEzLCB4MTIsIHgxMwkJCS8vIHNldCB4MTMg
dG8gJlRMUy5lcnJub19hZGRyCi0JbGRyCXgxMSwgW3gxM10JCQkvLyBzZXQgeDExIHRvIFRMUy0+
ZXJybm9fYWRkcgotCXN0cgl3MTksIFt4MTFdCQkJLy8gc3RvcmUgc2F2ZWRfZXJybm8gdG8gZXJy
bm9fYWRkcgotCi00OgotCWxkcgl4MTMsID1fY3lndGxzLnN0YWNrcHRyCQkvLyBnZXQgb2Zmc2V0
IHRvIHN0YWNrcHRyCi0JYWRkCXgxMywgeDEyLCB4MTMJCQkvLyBzZXQgeDEzIHRvICZUTFMuc3Rh
Y2twdHIKLTU6Ci0JbGR4cgl4MTEsIFt4MTNdCQkJLy8gZ2V0IGF1eCBzdGFjayBhZGRyZXNzCi0J
c3ViCXgxMSwgeDExLCAjOAkJCS8vIGRlY3JlbWVudCBhdXggc3RhY2sgYWRkcmVzcwotCXN0eHIJ
dzE0LCB4MTEsIFt4MTNdCQkJLy8gYXR0ZW1wdCB0byBzdG9yZSBkZWNyZW1lbnRlZCB2YWx1ZQot
CWNibnoJdzE0LCA1YgkJCQkvLyByZXRyeSBpZiBub3Qgc3VjY2VlZGVkCi0KLTY6Ci0JbGR4cgl4
MzAsIFt4MTFdCQkJLy8gZ2V0IHJldHVybiBhZGRyZXNzIGZyb20gc2lnbmFsIHN0YWNrCi0Jc3R4
cgl3MTQsIHh6ciwgW3gxMV0JCQkvLyBhdHRlbXB0IHRvIGNsZWFyIHJldHVybiBhZGRyZXNzCi0J
Y2Juegl3MTQsIDZiCQkJCS8vIHJldHJ5IGlmIG5vdCBzdWNjZWVkZWQKLQotCWxkcgl4MTMsID1f
Y3lndGxzLmluY3lnCQkvLyBnZXQgb2Zmc2V0IHRvIGluY3lnCi0JYWRkCXgxMywgeDEyLCB4MTMJ
CQkvLyBzZXQgeDEzIHRvICZUTFMuaW5jeWcKLQlzdHIJd3pyLCBbeDEzXQkJCS8vIHNldCBUTFMu
aW5jeWcgdG8gMCAobm90IGluIGN5Z3dpbikKLQlsZHIJeDEzLCA9X2N5Z3Rscy5zdGFja2xvY2sJ
CS8vIGdldCBvZmZzZXQgdG8gc3RhY2tsb2NrCi0JYWRkCXgxMywgeDEyLCB4MTMJCQkvLyBzZXQg
eDEzIHRvICZUTFMuc3RhY2tsb2NrCi0Jc3Rscgl3enIsIFt4MTNdCQkJLy8gcmVsZWFzZSBsb2Nr
Ci0KLQkuc2VoX3N0YXJ0ZXBpbG9ndWUKLQotCS5zZWhfc3RhY2thbGxvYyA1NDQKLQotCWxkcAl4
MSwgeDIsIFtzcF0sICMxNgotCW1zcglmcGNyLCB4MQotCW1zcglmcHNyLCB4MgotCi0JbGRwCXEz
MCwgcTMxLCBbc3BdLCAjMzIKLQlsZHAJcTI4LCBxMjksIFtzcF0sICMzMgotCWxkcAlxMjYsIHEy
NywgW3NwXSwgIzMyCi0JbGRwCXEyNCwgcTI1LCBbc3BdLCAjMzIKLQlsZHAJcTIyLCBxMjMsIFtz
cF0sICMzMgotCWxkcAlxMjAsIHEyMSwgW3NwXSwgIzMyCi0JbGRwCXExOCwgcTE5LCBbc3BdLCAj
MzIKLQlsZHAJcTE2LCBxMTcsIFtzcF0sICMzMgotCWxkcAlxMTQsIHExNSwgW3NwXSwgIzMyCi0J
bGRwCXExMiwgcTEzLCBbc3BdLCAjMzIKLQlsZHAJcTEwLCBxMTEsIFtzcF0sICMzMgotCWxkcAlx
OCwgIHE5LCAgW3NwXSwgIzMyCi0JbGRwCXE2LCAgcTcsICBbc3BdLCAjMzIKLQlsZHAJcTQsICBx
NSwgIFtzcF0sICMzMgotCWxkcAlxMiwgIHEzLCAgW3NwXSwgIzMyCi0JbGRwCXEwLCAgcTEsICBb
c3BdLCAjMzIKLQotCWxkcgl4MSwgW3NwXSwgIzE2Ci0JbW92CXNwLCB4MQotCi0JbGRwCXgyOCwg
eDI5LCBbc3BdLCAjMTYKLQkuc2VoX3NhdmVfcmVncF94IHgyOCwgMTYKLQlsZHAJeDI2LCB4Mjcs
IFtzcF0sICMxNgotCS5zZWhfc2F2ZV9yZWdwX3ggeDI2LCAxNgotCWxkcAl4MjQsIHgyNSwgW3Nw
XSwgIzE2Ci0JLnNlaF9zYXZlX3JlZ3BfeCB4MjQsIDE2Ci0JbGRwCXgyMiwgeDIzLCBbc3BdLCAj
MTYKLQkuc2VoX3NhdmVfcmVncF94IHgyMiwgMTYKLQlsZHAJeDIwLCB4MjEsIFtzcF0sICMxNgot
CS5zZWhfc2F2ZV9yZWdwX3ggeDIwLCAxNgotCWxkcAl4MTgsIHgxOSwgW3NwXSwgIzE2Ci0JLnNl
aF9zYXZlX3JlZyB4MTksIDE1MgotCS5zZWhfc3RhY2thbGxvYyAxNjAKLQlsZHAJeDE2LCB4MTcs
IFtzcF0sICMxNgotCWxkcAl4MTQsIHgxNSwgW3NwXSwgIzE2Ci0JbGRwCXgxMiwgeDEzLCBbc3Bd
LCAjMTYKLQlsZHAJeDEwLCB4MTEsIFtzcF0sICMxNgotCWxkcAl4OCwgIHg5LCAgW3NwXSwgIzE2
Ci0JbGRwCXg2LCAgeDcsICBbc3BdLCAjMTYKLQlsZHAJeDQsICB4NSwgIFtzcF0sICMxNgotCWxk
cAl4MiwgIHgzLCAgW3NwXSwgIzE2Ci0JbGRwCXgwLCAgeDEsICBbc3BdLCAjMTYKLQotCS5zZWhf
ZW5kZXBpbG9ndWUKLQlyZXQKKwkvLyB1bnJlYWNoYWJsZQogCS5zZWhfZW5kcHJvYwogX3NpZ2Rl
bGF5ZWRfZW5kOgogCS5nbG9iYWwgX3NpZ2RlbGF5ZWRfZW5kCi0tIAoyLjUxLjAKCg==

--------------zVO4N0Z2hWUUVvgrmrNt9EFk--