[SCM] GNU Inetutils branch, master, updated. v2.0-20-g353812a
Simon Josefsson via Commit-inetutils <[email protected]> Sat, 24 Jul 2021 10:09:25 -0400 (EDT)
| Newsgroups | gmane.comp.gnu.inetutils.cvs |
|---|---|
| Message-ID | <[email protected]> |
VGhpcyBpcyBhbiBhdXRvbWF0ZWQgZW1haWwgZnJvbSB0aGUgZ2l0IGhvb2tzL3Bvc3QtcmVjZWl2 ZSBzY3JpcHQuIEl0IHdhcwpnZW5lcmF0ZWQgYmVjYXVzZSBhIHJlZiBjaGFuZ2Ugd2FzIHB1c2hl ZCB0byB0aGUgcmVwb3NpdG9yeSBjb250YWluaW5nCnRoZSBwcm9qZWN0ICJHTlUgSW5ldHV0aWxz ICIuCgpUaGUgYnJhbmNoLCBtYXN0ZXIgaGFzIGJlZW4gdXBkYXRlZAogICAgICAgdmlhICAzNTM4 MTJhNWQ5ZGZjNzdlOWY3MGQyNzhiNjExYzYxMTA0MDRiNTEwIChjb21taXQpCiAgICAgICB2aWEg IDZkMGM4YWMyMDNhY2E1ZWU5ZDAwZGE5MThmNjBmNjZiOGE0MmZkZWYgKGNvbW1pdCkKICAgICAg ZnJvbSAgMjMwNjViMWZhZjc3YTEwOTU3NTc0ZDc4YjYzMjFkODc1ZTYwMzA0ZCAoY29tbWl0KQoK VGhvc2UgcmV2aXNpb25zIGxpc3RlZCBhYm92ZSB0aGF0IGFyZSBuZXcgdG8gdGhpcyByZXBvc2l0 b3J5IGhhdmUKbm90IGFwcGVhcmVkIG9uIGFueSBvdGhlciBub3RpZmljYXRpb24gZW1haWw7IHNv IHdlIGxpc3QgdGhvc2UKcmV2aXNpb25zIGluIGZ1bGwsIGJlbG93LgoKLSBMb2cgLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K aHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2NnaXQvaW5ldHV0aWxzLmdpdC9jb21taXQvP2lk PTM1MzgxMmE1ZDlkZmM3N2U5ZjcwZDI3OGI2MTFjNjExMDQwNGI1MTAKCgpjb21taXQgMzUzODEy YTVkOWRmYzc3ZTlmNzBkMjc4YjYxMWM2MTEwNDA0YjUxMApBdXRob3I6IFNpbW9uIEpvc2Vmc3Nv biA8c2ltb25Aam9zZWZzc29uLm9yZz4KRGF0ZTogICBTYXQgSnVsIDI0IDE1OjU2OjMwIDIwMjEg KzAyMDAKCiAgICBVc2UgZ251bGliJ3MgZnRzIGNvZGUgaW5zdGVhZCBvZiBjdXN0b20gbGlibHMv IHZlcnNpb24uCiAgICAKICAgICogYm9vdHN0cmFwLmNvbmYgKGdudWxpYl9tb2R1bGVzKTogQWRk IGZ0cy4KICAgICogbGlibHMvZnRzLmgsIGxpYmxzL2Z0cy5jOiBSZW1vdmUgZmlsZXMuCiAgICAq IE5FV1M6IE1lbnRpb24gY2hhbmdlLgogICAgKiBjb25maWd1cmUuYWM6IERyb3AgZmNoZGlyIHRl c3QuCgpkaWZmIC0tZ2l0IGEvTkVXUyBiL05FV1MKaW5kZXggNGM3NWJmZC4uNjQyN2MyNiAxMDA2 NDQKLS0tIGEvTkVXUworKysgYi9ORVdTCkBAIC04LDYgKzgsMTAgQEAgRGlzYWJsZSB1c2Ugb2Yg cmVhZGxpbmUgd2hlbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBURVJNIGlzIHVuc2V0IG9yIHNldAog dG8gImR1bWIiIChjYXVzZWQgcHJvYmxlbXMgd2l0aCBFbWFjcyBBbmdlRlRQIG9uIE1hY09TKS4g IFRoYW5rcyB0bwogQWxleCBCb2NoYW5uZWsgZm9yIHJlcG9ydCwgZGVidWdnaW5nIGFuZCBwYXRj aC4KIAorKiogZnRwZAorCitPdXIgbGlibHMgbm93IHVzZXMgZ251bGliJ3MgZnRzIGluc3RlYWQg b2Ygb3VyIG93biBjdXN0b20gdmVyc2lvbi4KKwogKiogdGVsbmV0CiAKICoqKiBJbXBsZW1lbnQg LS1iaW5kICgtYikuCmRpZmYgLS1naXQgYS9ib290c3RyYXAuY29uZiBiL2Jvb3RzdHJhcC5jb25m CmluZGV4IGI2ZDEzODIuLmFiZjVhNWYgMTAwNjQ0Ci0tLSBhL2Jvb3RzdHJhcC5jb25mCisrKyBi L2Jvb3RzdHJhcC5jb25mCkBAIC00OSw2ICs0OSw3IEBAIGV4dGVuc2lvbnMKIGZkbC0xLjMKIGZp bGVtb2RlCiBmb3JrcHR5CitmdHMKIGdlbmRvY3MKIGdldGFkZHJpbmZvCiBnZXRjd2QKZGlmZiAt LWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCBhZjgzZjM1Li45NGQxNDFj IDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC0yMDAsOCAr MjAwLDggQEAgQUNfU1VCU1QoTElCREwpCiBBQ19TVUJTVChMSUJQQU0pCiBBQ19TVUJTVChGVFBE X0xJQlBBTSkKIAotIyBDYW4gd2UgdXNlIGxpYmxzPyBidXQgd2UgbXVzdCBoYXZlIGZjaGRpcigp Ci1pZiB0ZXN0ICIkZW5hYmxlX2xpYmxzIiA9IHllcyAmJiB0ZXN0ICIkYWNfY3ZfZnVuY19mY2hk aXIiID0geWVzIDsgdGhlbgorIyBVc2UgbGlibHM/CitpZiB0ZXN0ICIkZW5hYmxlX2xpYmxzIiA9 IHllczsgdGhlbgogICBMSUJMUz0iLi4vbGlibHMvbGlibHMuYSIKICAgbGlibHNfQlVJTEQ9Imxp YmxzLmEiCiAgIEFDX0RFRklORShbV0lUSF9MSUJMU10sIDEsIFtEZWZpbmUgdG8gb25lIGlmIHlv dSBoYXZlIC1sbHNdKQpAQCAtNzcxLDcgKzc3MSw3IEBAIEFDX0ZVTkNfRk9SSwogQUNfRlVOQ19T VFJDT0xMCiBBQ19GVU5DX01NQVAKIAotQUNfQ0hFQ0tfRlVOQ1MoY2ZzZXRzcGVlZCBjZ2V0ZW50 IGRpcmZkIGZjaGRpciBmbG9jayBcCitBQ19DSEVDS19GVU5DUyhjZnNldHNwZWVkIGNnZXRlbnQg ZGlyZmQgZmxvY2sgXAogICAgICAgICAgICAgICAgZm9yayBmcGF0aGNvbmYgZnRydW5jYXRlIFwK ICAgICAgICAgICAgICAgIGdldGN3ZCBnZXRtc2cgZ2V0cHd1aWRfciBnZXRzcG5hbSBnZXR1dHhl bnQgZ2V0dXR4dXNlciBcCiAgICAgICAgICAgICAgICBpbml0Z3JvdXBzIGluaXRzZXRwcm9jdGl0 bGUga2lsbHBnIFwKZGlmZiAtLWdpdCBhL2xpYmxzL01ha2VmaWxlLmFtIGIvbGlibHMvTWFrZWZp bGUuYW0KaW5kZXggNTEyM2FjNS4uYzdkZDRmMSAxMDA2NDQKLS0tIGEvbGlibHMvTWFrZWZpbGUu YW0KKysrIGIvbGlibHMvTWFrZWZpbGUuYW0KQEAgLTI1LDYgKzI1LDYgQEAgbm9pbnN0X0xJQlJB UklFUyA9ICQobGlibHNfQlVJTEQpCiAKIEVYVFJBX0xJQlJBUklFUyA9IGxpYmxzLmEKIAotbGli bHNfYV9TT1VSQ0VTID0gY21wLmMgc3RhdF9mbGFncy5jIGxzLmMgcHJpbnQuYyB1dGlsLmMgZnRz LmMKK2xpYmxzX2FfU09VUkNFUyA9IGNtcC5jIHN0YXRfZmxhZ3MuYyBscy5jIHByaW50LmMgdXRp bC5jCiAKLW5vaW5zdF9IRUFERVJTID0gZXh0ZXJuLmggbHMuaCBmdHMuaAorbm9pbnN0X0hFQURF UlMgPSBleHRlcm4uaCBscy5oCmRpZmYgLS1naXQgYS9saWJscy9mdHMuYyBiL2xpYmxzL2Z0cy5j CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWY1YWFkLi4wMDAwMDAwCi0tLSBhL2xp YmxzL2Z0cy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA5OCArMCwwIEBACi0vKgotICBDb3B5cmln aHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIw MDgsCi0gIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQsIDIwMTUsIDIwMTYsIDIw MTcsIDIwMTgsIDIwMTksCi0gIDIwMjAsIDIwMjEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuCi0KLSAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIEluZXR1dGlscy4KLQotICBHTlUgSW5l dHV0aWxzIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKLSAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0 aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0Ci0gIHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KLQotICBHTlUgSW5ldHV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIGBodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvJy4gKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MywgMTk5NAotICoJ VGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMg cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0 ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo IHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJz aXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQg dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl Ci0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRP UlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQot ICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05U UklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwg T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO WSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl IDxjb25maWcuaD4KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5o PgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8ZGlyZW50Lmg+Ci0jaW5jbHVkZSA8ZXJy bm8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRl IDx1bmlzdGQuaD4KLSNpbmNsdWRlIDx1bnVzZWQtcGFyYW1ldGVyLmg+Ci0KLSNpbmNsdWRlICJm dHMuaCIKLQotLyogTGFyZ2VzdCBhbGlnbm1lbnQgc2l6ZSBuZWVkZWQsIG1pbnVzIG9uZS4KLSAq IEl0IGlzIHVzZWQgYXMgdmFsdWUgYW5kIGFzIGJpdCBtYXNrLgotICogVXN1YWxseSBsb25nIGRv dWJsZSBpcyB0aGUgd29yc3QgY2FzZS4gICovCi0jaWZuZGVmIEFMSUdOQllURVMKLSMgZGVmaW5l IEFMSUdOQllURVMJKF9fYWxpZ25vZl9fIChsb25nIGRvdWJsZSkgLSAxKQotI2VuZGlmCi0KLS8q IEFsaWduIFAgdG8gc2l6ZSBBTElHTkJZVEVTIGF0IGFkYXB0ZWQgYm91bmRhcnkuICAqLwotI2lm bmRlZiBBTElHTgotIyBkZWZpbmUgQUxJR04ocCkJKCgodW5zaWduZWQgbG9uZyBpbnQpIChwKSAr IEFMSUdOQllURVMpICYgfkFMSUdOQllURVMpCi0jZW5kaWYKLQotCi1zdGF0aWMgRlRTRU5UICpm dHNfYWxsb2MgKEZUUyAqLCBjb25zdCBjaGFyICosIGludCk7Ci1zdGF0aWMgRlRTRU5UICpmdHNf YnVpbGQgKEZUUyAqLCBpbnQpOwotc3RhdGljIHZvaWQgZnRzX2xmcmVlIChGVFNFTlQgKik7Ci1z dGF0aWMgdm9pZCBmdHNfbG9hZCAoRlRTICosIEZUU0VOVCAqKTsKLXN0YXRpYyBzaXplX3QgZnRz X21heGFyZ2xlbiAoY2hhciAqY29uc3QgKik7Ci1zdGF0aWMgdm9pZCBmdHNfcGFkanVzdCAoRlRT ICosIHZvaWQgKik7Ci1zdGF0aWMgaW50IGZ0c19wYWxsb2MgKEZUUyAqLCBzaXplX3QpOwotc3Rh dGljIEZUU0VOVCAqZnRzX3NvcnQgKEZUUyAqLCBGVFNFTlQgKiwgaW50KTsKLXN0YXRpYyB1bnNp Z25lZCBzaG9ydCBmdHNfc3RhdCAoRlRTICosIHN0cnVjdCBkaXJlbnQgKiwgRlRTRU5UICosIGlu dCk7Ci0KLSNpZm5kZWYgTUFYCi0jIGRlZmluZSBNQVgoYSwgYikJKCgoYSkgPiAoYikpID8gKGEp IDogKGIpKQotI2VuZGlmCi0KLSNkZWZpbmUgSVNET1QoYSkJKGFbMF0gPT0gJy4nICYmICghYVsx XSB8fCAoYVsxXSA9PSAnLicgJiYgIWFbMl0pKSkKLQotI2RlZmluZSBJU1NFVChvcHQpCShzcC0+ ZnRzX29wdGlvbnMgJiBvcHQpCi0jZGVmaW5lIFNFVChvcHQpCShzcC0+ZnRzX29wdGlvbnMgfD0g b3B0KQotCi0jZGVmaW5lIENIRElSKHNwLCBwYXRoKQkoIUlTU0VUKEZUU19OT0NIRElSKSAmJiBj aGRpcihwYXRoKSkKLSNpZmRlZiBIQVZFX0ZDSERJUgotIyBkZWZpbmUgRkNIRElSKHNwLCBmZCkJ KCFJU1NFVChGVFNfTk9DSERJUikgJiYgZmNoZGlyKGZkKSkKLSNlbHNlCi0jIGRlZmluZSBGQ0hE SVIoc3AsIGZkKSAgKCFJU1NFVChGVFNfTk9DSERJUikgJiYgLTEpCi0jZW5kaWYKLQotLyogZnRz X2J1aWxkIGZsYWdzICovCi0jZGVmaW5lIEJDSElMRAkJMQkvKiBmdHNfY2hpbGRyZW4gKi8KLSNk ZWZpbmUgQk5BTUVTCQkyCS8qIGZ0c19jaGlsZHJlbiwgbmFtZXMgb25seSAqLwotI2RlZmluZSBC UkVBRAkJMwkvKiBmdHNfcmVhZCAqLwotCi1GVFMgKgotZnRzX29wZW4gKGNoYXIgKmNvbnN0ICph cmd2LCByZWdpc3RlciBpbnQgb3B0aW9ucywgaW50ICgqY29tcGFyKSAoY29uc3QgRlRTRU5UICoq LCBjb25zdCBGVFNFTlQgKiopKQotewotICByZWdpc3RlciBGVFMgKnNwOwotICByZWdpc3RlciBG VFNFTlQgKnAsICpyb290OwotICByZWdpc3RlciBpbnQgbml0ZW1zOwotICBGVFNFTlQgKnBhcmVu dDsKLSAgRlRTRU5UICp0bXAgPSBOVUxMOwotICBpbnQgbGVuOwotCi0gIC8qIE9wdGlvbnMgY2hl Y2suICovCi0gIGlmIChvcHRpb25zICYgfkZUU19PUFRJT05NQVNLKQotICAgIHsKLSAgICAgIGVy cm5vID0gRUlOVkFMOwotICAgICAgcmV0dXJuIChOVUxMKTsKLSAgICB9Ci0KLSAgLyogQWxsb2Nh dGUvaW5pdGlhbGl6ZSB0aGUgc3RyZWFtICovCi0gIGlmICgoc3AgPSBtYWxsb2MgKCh1X2ludCkg c2l6ZW9mIChGVFMpKSkgPT0gTlVMTCkKLSAgICByZXR1cm4gKE5VTEwpOwotICBtZW1zZXQgKHNw LCAwLCBzaXplb2YgKEZUUykpOwotICBzcC0+ZnRzX2NvbXBhciA9IChpbnQgKCopKGNvbnN0IHZv aWQgKiwgY29uc3Qgdm9pZCAqKSkgY29tcGFyOwotICBzcC0+ZnRzX29wdGlvbnMgPSBvcHRpb25z OwotCi0gIC8qIExvZ2ljYWwgd2Fsa3MgdHVybiBvbiBOT0NIRElSOyBzeW1ib2xpYyBsaW5rcyBh cmUgdG9vIGhhcmQuICovCi0gIGlmIChJU1NFVCAoRlRTX0xPR0lDQUwpKQotICAgIFNFVCAoRlRT X05PQ0hESVIpOwotCi0gIC8qIEFsd2F5cyBzZXQgTk9DSERJUiBmb3IgT1MgbGFja2luZyBmY2hk aXIgKCkgICovCi0jaWZuZGVmIEhBVkVfRkNIRElSCi0gIFNFVCAoRlRTX05PQ0hESVIpOwotI2Vu ZGlmCi0gIC8qCi0gICAqIFN0YXJ0IG91dCB3aXRoIDFLIG9mIHBhdGggc3BhY2UsIGFuZCBlbm91 Z2gsIGluIGFueSBjYXNlLAotICAgKiB0byBob2xkIHRoZSB1c2VyJ3MgcGF0aHMuCi0gICAqLwot I2lmbmRlZiBNQVhQQVRITEVOCi0jIGRlZmluZSBNQVhQQVRITEVOIDEwMjQKLSNlbmRpZgotICBp ZiAoZnRzX3BhbGxvYyAoc3AsIE1BWCAoZnRzX21heGFyZ2xlbiAoYXJndiksIE1BWFBBVEhMRU4p KSkKLSAgICBnb3RvIG1lbTE7Ci0KLSAgLyogQWxsb2NhdGUvaW5pdGlhbGl6ZSByb290J3MgcGFy ZW50LiAqLwotICBpZiAoKHBhcmVudCA9IGZ0c19hbGxvYyAoc3AsICIiLCAwKSkgPT0gTlVMTCkK LSAgICBnb3RvIG1lbTI7Ci0gIHBhcmVudC0+ZnRzX2xldmVsID0gRlRTX1JPT1RQQVJFTlRMRVZF TDsKLQotICAvKiBBbGxvY2F0ZS9pbml0aWFsaXplIHJvb3QocykuICovCi0gIGZvciAocm9vdCA9 IE5VTEwsIG5pdGVtcyA9IDA7ICphcmd2OyArK2FyZ3YsICsrbml0ZW1zKQotICAgIHsKLSAgICAg IC8qIERvbid0IGFsbG93IHplcm8tbGVuZ3RoIHBhdGhzLiAqLwotICAgICAgaWYgKChsZW4gPSBz dHJsZW4gKCphcmd2KSkgPT0gMCkKLQl7Ci0JICBlcnJubyA9IEVOT0VOVDsKLQkgIGdvdG8gbWVt MzsKLQl9Ci0KLSAgICAgIHAgPSBmdHNfYWxsb2MgKHNwLCAqYXJndiwgbGVuKTsKLSAgICAgIHAt PmZ0c19sZXZlbCA9IEZUU19ST09UTEVWRUw7Ci0gICAgICBwLT5mdHNfcGFyZW50ID0gcGFyZW50 OwotICAgICAgcC0+ZnRzX2FjY3BhdGggPSBwLT5mdHNfbmFtZTsKLSAgICAgIHAtPmZ0c19pbmZv ID0gZnRzX3N0YXQgKHNwLCBOVUxMLCBwLCBJU1NFVCAoRlRTX0NPTUZPTExPVykpOwotCi0gICAg ICAvKiBDb21tYW5kLWxpbmUgIi4iIGFuZCAiLi4iIGFyZSByZWFsIGRpcmVjdG9yaWVzLiAqLwot ICAgICAgaWYgKHAtPmZ0c19pbmZvID09IEZUU19ET1QpCi0JcC0+ZnRzX2luZm8gPSBGVFNfRDsK LQotICAgICAgLyoKLSAgICAgICAqIElmIGNvbXBhcmlzb24gcm91dGluZSBzdXBwbGllZCwgdHJh dmVyc2UgaW4gc29ydGVkCi0gICAgICAgKiBvcmRlcjsgb3RoZXJ3aXNlIHRyYXZlcnNlIGluIHRo ZSBvcmRlciBzcGVjaWZpZWQuCi0gICAgICAgKi8KLSAgICAgIGlmIChjb21wYXIpCi0JewotCSAg cC0+ZnRzX2xpbmsgPSByb290OwotCSAgcm9vdCA9IHA7Ci0JfQotICAgICAgZWxzZQotCXsKLQkg IHAtPmZ0c19saW5rID0gTlVMTDsKLQkgIGlmIChyb290ID09IE5VTEwpCi0JICAgIHRtcCA9IHJv b3QgPSBwOwotCSAgZWxzZQotCSAgICB7Ci0JICAgICAgdG1wLT5mdHNfbGluayA9IHA7Ci0JICAg ICAgdG1wID0gcDsKLQkgICAgfQotCX0KLSAgICB9Ci0gIGlmIChjb21wYXIgJiYgbml0ZW1zID4g MSkKLSAgICByb290ID0gZnRzX3NvcnQgKHNwLCByb290LCBuaXRlbXMpOwotCi0gIC8qCi0gICAq IEFsbG9jYXRlIGEgZHVtbXkgcG9pbnRlciBhbmQgbWFrZSBmdHNfcmVhZCB0aGluayB0aGF0IHdl J3ZlIGp1c3QKLSAgICogZmluaXNoZWQgdGhlIG5vZGUgYmVmb3JlIHRoZSByb290KHMpOyBzZXQg cC0+ZnRzX2luZm8gdG8gRlRTX0lOSVQKLSAgICogc28gdGhhdCBldmVyeXRoaW5nIGFib3V0IHRo ZSAiY3VycmVudCIgbm9kZSBpcyBpZ25vcmVkLgotICAgKi8KLSAgaWYgKChzcC0+ZnRzX2N1ciA9 IGZ0c19hbGxvYyAoc3AsICIiLCAwKSkgPT0gTlVMTCkKLSAgICBnb3RvIG1lbTM7Ci0gIHNwLT5m dHNfY3VyLT5mdHNfbGluayA9IHJvb3Q7Ci0gIHNwLT5mdHNfY3VyLT5mdHNfaW5mbyA9IEZUU19J TklUOwotCi0gIC8qCi0gICAqIElmIHVzaW5nIGNoZGlyKDIpLCBncmFiIGEgZmlsZSBkZXNjcmlw dG9yIHBvaW50aW5nIHRvIGRvdCB0byBpbnN1cmUKLSAgICogdGhhdCB3ZSBjYW4gZ2V0IGJhY2sg aGVyZTsgdGhpcyBjb3VsZCBiZSBhdm9pZGVkIGZvciBzb21lIHBhdGhzLAotICAgKiBidXQgYWxt b3N0IGNlcnRhaW5seSBub3Qgd29ydGggdGhlIGVmZm9ydC4gIFNsYXNoZXMsIHN5bWJvbGljIGxp bmtzLAotICAgKiBhbmQgIi4uIiBhcmUgYWxsIGZhaXJseSBuYXN0eSBwcm9ibGVtcy4gIE5vdGUs IGlmIHdlIGNhbid0IGdldCB0aGUKLSAgICogZGVzY3JpcHRvciB3ZSBydW4gYW55d2F5LCBqdXN0 IG1vcmUgc2xvd2x5LgotICAgKi8KLSAgaWYgKCFJU1NFVCAoRlRTX05PQ0hESVIpICYmIChzcC0+ ZnRzX3JmZCA9IG9wZW4gKCIuIiwgT19SRE9OTFksIDApKSA8IDApCi0gICAgU0VUIChGVFNfTk9D SERJUik7Ci0KLSAgcmV0dXJuIChzcCk7Ci0KLW1lbTM6ZnRzX2xmcmVlIChyb290KTsKLSAgZnJl ZSAocGFyZW50KTsKLW1lbTI6ZnJlZSAoc3AtPmZ0c19wYXRoKTsKLW1lbTE6ZnJlZSAoc3ApOwot ICByZXR1cm4gKE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZAotZnRzX2xvYWQgKEZUUyAqc3AsIHJl Z2lzdGVyIEZUU0VOVCAqcCkKLXsKLSAgcmVnaXN0ZXIgaW50IGxlbjsKLSAgcmVnaXN0ZXIgY2hh ciAqY3A7Ci0KLSAgLyoKLSAgICogTG9hZCB0aGUgc3RyZWFtIHN0cnVjdHVyZSBmb3IgdGhlIG5l eHQgdHJhdmVyc2FsLiAgU2luY2Ugd2UgZG9uJ3QKLSAgICogYWN0dWFsbHkgZW50ZXIgdGhlIGRp cmVjdG9yeSB1bnRpbCBhZnRlciB0aGUgcHJlb3JkZXIgdmlzaXQsIHNldAotICAgKiB0aGUgZnRz X2FjY3BhdGggZmllbGQgc3BlY2lhbGx5IHNvIHRoZSBjaGRpciBnZXRzIGRvbmUgdG8gdGhlIHJp Z2h0Ci0gICAqIHBsYWNlIGFuZCB0aGUgdXNlciBjYW4gYWNjZXNzIHRoZSBmaXJzdCBub2RlLiAg RnJvbSBmdHNfb3BlbiBpdCdzCi0gICAqIGtub3duIHRoYXQgdGhlIHBhdGggd2lsbCBmaXQuCi0g ICAqLwotICBsZW4gPSBwLT5mdHNfcGF0aGxlbiA9IHAtPmZ0c19uYW1lbGVuOwotICBtZW1tb3Zl IChzcC0+ZnRzX3BhdGgsIHAtPmZ0c19uYW1lLCBsZW4gKyAxKTsKLSAgaWYgKChjcCA9IHN0cnJj aHIgKHAtPmZ0c19uYW1lLCAnLycpKSAmJiAoY3AgIT0gcC0+ZnRzX25hbWUgfHwgY3BbMV0pKQot ICAgIHsKLSAgICAgIGxlbiA9IHN0cmxlbiAoKytjcCk7Ci0gICAgICBtZW1tb3ZlIChwLT5mdHNf bmFtZSwgY3AsIGxlbiArIDEpOwotICAgICAgcC0+ZnRzX25hbWVsZW4gPSBsZW47Ci0gICAgfQot ICBwLT5mdHNfYWNjcGF0aCA9IHAtPmZ0c19wYXRoID0gc3AtPmZ0c19wYXRoOwotICBzcC0+ZnRz X2RldiA9IHAtPmZ0c19kZXY7Ci19Ci0KLWludAotZnRzX2Nsb3NlIChGVFMgKnNwKQotewotICBy ZWdpc3RlciBGVFNFTlQgKmZyZWVwLCAqcDsKLSAgaW50IHNhdmVkX2Vycm5vID0gMDsKLSAgaW50 IHJldHZhbCA9IDA7Ci0KLSAgLyoKLSAgICogVGhpcyBzdGlsbCB3b3JrcyBpZiB3ZSBoYXZlbid0 IHJlYWQgYW55dGhpbmcgLS0gdGhlIGR1bW15IHN0cnVjdHVyZQotICAgKiBwb2ludHMgdG8gdGhl IHJvb3QgbGlzdCwgc28gd2Ugc3RlcCB0aHJvdWdoIHRvIHRoZSBlbmQgb2YgdGhlIHJvb3QKLSAg ICogbGlzdCB3aGljaCBoYXMgYSB2YWxpZCBwYXJlbnQgcG9pbnRlci4KLSAgICovCi0gIGlmIChz cC0+ZnRzX2N1cikKLSAgICB7Ci0gICAgICBmb3IgKHAgPSBzcC0+ZnRzX2N1cjsgcC0+ZnRzX2xl dmVsID49IEZUU19ST09UTEVWRUw7KQotCXsKLQkgIGZyZWVwID0gcDsKLQkgIHAgPSBwLT5mdHNf bGluayA/IHAtPmZ0c19saW5rIDogcC0+ZnRzX3BhcmVudDsKLQkgIGZyZWUgKGZyZWVwKTsKLQl9 Ci0gICAgICBmcmVlIChwKTsKLSAgICB9Ci0KLSAgLyogRnJlZSB1cCBjaGlsZCBsaW5rZWQgbGlz dCwgc29ydCBhcnJheSwgcGF0aCBidWZmZXIuICovCi0gIGlmIChzcC0+ZnRzX2NoaWxkKQotICAg IGZ0c19sZnJlZSAoc3AtPmZ0c19jaGlsZCk7Ci0gIGZyZWUgKHNwLT5mdHNfYXJyYXkpOwotICBm cmVlIChzcC0+ZnRzX3BhdGgpOwotCi0gIC8qIFJldHVybiB0byBvcmlnaW5hbCBkaXJlY3Rvcnks IHNhdmUgZXJybm8gaWYgbmVjZXNzYXJ5LiAqLwotICBpZiAoIUlTU0VUIChGVFNfTk9DSERJUikp Ci0gICAgewotICAgICAgc2F2ZWRfZXJybm8gPSBmY2hkaXIgKHNwLT5mdHNfcmZkKSA/IGVycm5v IDogMDsKLSAgICAgIGNsb3NlIChzcC0+ZnRzX3JmZCk7Ci0gICAgfQotCi0gIC8qIFNldCBlcnJu byBhbmQgcmV0dXJuLiAqLwotICBpZiAoIUlTU0VUIChGVFNfTk9DSERJUikgJiYgc2F2ZWRfZXJy bm8pCi0gICAgewotICAgICAgZXJybm8gPSBzYXZlZF9lcnJubzsKLSAgICAgIHJldHZhbCA9IC0x OwotICAgIH0KLQotICAvKiBGcmVlIHVwIHRoZSBzdHJlYW0gcG9pbnRlci4gKi8KLSAgZnJlZSAo c3ApOwotCi0gIHJldHVybiByZXR2YWw7Ci19Ci0KLS8qCi0gKiBTcGVjaWFsIGNhc2UgYSByb290 IG9mICIvIiBzbyB0aGF0IHNsYXNoZXMgYXJlbid0IGFwcGVuZGVkIHdoaWNoIHdvdWxkCi0gKiBj YXVzZSBwYXRocyB0byBiZSB3cml0dGVuIGFzICIvL2ZvbyIuCi0gKi8KLSNkZWZpbmUgTkFQUEVO RChwKQkJCQkJCQlcCi0JKHAtPmZ0c19sZXZlbCA9PSBGVFNfUk9PVExFVkVMICYmIHAtPmZ0c19w YXRobGVuID09IDEgJiYJXAotCSAgICBwLT5mdHNfcGF0aFswXSA9PSAnLycgPyAwIDogcC0+ZnRz X3BhdGhsZW4pCi0KLUZUU0VOVCAqCi1mdHNfcmVhZCAocmVnaXN0ZXIgRlRTICpzcCkKLXsKLSAg cmVnaXN0ZXIgRlRTRU5UICpwOwotICByZWdpc3RlciBGVFNFTlQgKnRtcDsKLSAgcmVnaXN0ZXIg aW50IGluc3RyOwotICByZWdpc3RlciBjaGFyICp0OwotICBpbnQgc2F2ZWRfZXJybm87Ci0KLSAg LyogSWYgZmluaXNoZWQgb3IgdW5yZWNvdmVyYWJsZSBlcnJvciwgcmV0dXJuIE5VTEwuICovCi0g IGlmIChzcC0+ZnRzX2N1ciA9PSBOVUxMIHx8IElTU0VUIChGVFNfU1RPUCkpCi0gICAgcmV0dXJu IChOVUxMKTsKLQotICAvKiBTZXQgY3VycmVudCBub2RlIHBvaW50ZXIuICovCi0gIHAgPSBzcC0+ ZnRzX2N1cjsKLQotICAvKiBTYXZlIGFuZCB6ZXJvIG91dCB1c2VyIGluc3RydWN0aW9ucy4gKi8K LSAgaW5zdHIgPSBwLT5mdHNfaW5zdHI7Ci0gIHAtPmZ0c19pbnN0ciA9IEZUU19OT0lOU1RSOwot Ci0gIC8qIEFueSB0eXBlIG9mIGZpbGUgbWF5IGJlIHJlLXZpc2l0ZWQ7IHJlLXN0YXQgYW5kIHJl LXR1cm4uICovCi0gIGlmIChpbnN0ciA9PSBGVFNfQUdBSU4pCi0gICAgewotICAgICAgcC0+ZnRz X2luZm8gPSBmdHNfc3RhdCAoc3AsIE5VTEwsIHAsIDApOwotICAgICAgcmV0dXJuIChwKTsKLSAg ICB9Ci0KLSAgLyoKLSAgICogRm9sbG93aW5nIGEgc3ltbGluayAtLSBTTE5PTkUgdGVzdCBhbGxv d3MgYXBwbGljYXRpb24gdG8gc2VlCi0gICAqIFNMTk9ORSBhbmQgcmVjb3Zlci4gIElmIGluZGly ZWN0aW5nIHRocm91Z2ggYSBzeW1saW5rLCBoYXZlCi0gICAqIGtlZXAgYSBwb2ludGVyIHRvIGN1 cnJlbnQgbG9jYXRpb24uICBJZiB1bmFibGUgdG8gZ2V0IHRoYXQKLSAgICogcG9pbnRlciwgZm9s bG93IGZhaWxzLgotICAgKi8KLSAgaWYgKGluc3RyID09IEZUU19GT0xMT1cgJiYKLSAgICAgIChw LT5mdHNfaW5mbyA9PSBGVFNfU0wgfHwgcC0+ZnRzX2luZm8gPT0gRlRTX1NMTk9ORSkpCi0gICAg ewotICAgICAgcC0+ZnRzX2luZm8gPSBmdHNfc3RhdCAoc3AsIE5VTEwsIHAsIDEpOwotICAgICAg aWYgKHAtPmZ0c19pbmZvID09IEZUU19EICYmICFJU1NFVCAoRlRTX05PQ0hESVIpKQotCXsKLQkg IGlmICgocC0+ZnRzX3N5bWZkID0gb3BlbiAoIi4iLCBPX1JET05MWSwgMCkpIDwgMCkKLQkgICAg ewotCSAgICAgIHAtPmZ0c19lcnJubyA9IGVycm5vOwotCSAgICAgIHAtPmZ0c19pbmZvID0gRlRT X0VSUjsKLQkgICAgfQotCSAgZWxzZQotCSAgICBwLT5mdHNfZmxhZ3MgfD0gRlRTX1NZTUZPTExP VzsKLQl9Ci0gICAgICByZXR1cm4gKHApOwotICAgIH0KLQotICAvKiBEaXJlY3RvcnkgaW4gcHJl LW9yZGVyLiAqLwotICBpZiAocC0+ZnRzX2luZm8gPT0gRlRTX0QpCi0gICAgewotICAgICAgLyog SWYgc2tpcHBlZCBvciBjcm9zc2VkIG1vdW50IHBvaW50LCBkbyBwb3N0LW9yZGVyIHZpc2l0LiAq LwotICAgICAgaWYgKGluc3RyID09IEZUU19TS0lQIHx8Ci0JICAoSVNTRVQgKEZUU19YREVWKSAm JiBwLT5mdHNfZGV2ICE9IHNwLT5mdHNfZGV2KSkKLQl7Ci0JICBpZiAocC0+ZnRzX2ZsYWdzICYg RlRTX1NZTUZPTExPVykKLQkgICAgY2xvc2UgKHAtPmZ0c19zeW1mZCk7Ci0JICBpZiAoc3AtPmZ0 c19jaGlsZCkKLQkgICAgewotCSAgICAgIGZ0c19sZnJlZSAoc3AtPmZ0c19jaGlsZCk7Ci0JICAg ICAgc3AtPmZ0c19jaGlsZCA9IE5VTEw7Ci0JICAgIH0KLQkgIHAtPmZ0c19pbmZvID0gRlRTX0RQ OwotCSAgcmV0dXJuIChwKTsKLQl9Ci0KLSAgICAgIC8qIFJlYnVpbGQgaWYgb25seSByZWFkIHRo ZSBuYW1lcyBhbmQgbm93IHRyYXZlcnNpbmcuICovCi0gICAgICBpZiAoc3AtPmZ0c19jaGlsZCAm JiBzcC0+ZnRzX29wdGlvbnMgJiBGVFNfTkFNRU9OTFkpCi0JewotCSAgc3AtPmZ0c19vcHRpb25z ICY9IH5GVFNfTkFNRU9OTFk7Ci0JICBmdHNfbGZyZWUgKHNwLT5mdHNfY2hpbGQpOwotCSAgc3At PmZ0c19jaGlsZCA9IE5VTEw7Ci0JfQotCi0gICAgICAvKgotICAgICAgICogQ2QgdG8gdGhlIHN1 YmRpcmVjdG9yeS4KLSAgICAgICAqCi0gICAgICAgKiBJZiBoYXZlIGFscmVhZHkgcmVhZCBhbmQg bm93IGZhaWwgdG8gY2hkaXIsIHdoYWNrIHRoZSBsaXN0Ci0gICAgICAgKiB0byBtYWtlIHRoZSBu YW1lcyBjb21lIG91dCByaWdodCwgYW5kIHNldCB0aGUgcGFyZW50IGVycm5vCi0gICAgICAgKiBz byB0aGUgYXBwbGljYXRpb24gd2lsbCBldmVudHVhbGx5IGdldCBhbiBlcnJvciBjb25kaXRpb24u Ci0gICAgICAgKiBTZXQgdGhlIEZUU19ET05UQ0hESVIgZmxhZyBzbyB0aGF0IHdoZW4gd2UgbG9n aWNhbGx5IGNoYW5nZQotICAgICAgICogZGlyZWN0b3JpZXMgYmFjayB0byB0aGUgcGFyZW50IHdl IGRvbid0IGRvIGEgY2hkaXIuCi0gICAgICAgKgotICAgICAgICogSWYgaGF2ZW4ndCByZWFkIGRv IHNvLiAgSWYgdGhlIHJlYWQgZmFpbHMsIGZ0c19idWlsZCBzZXRzCi0gICAgICAgKiBGVFNfU1RP UCBvciB0aGUgZnRzX2luZm8gZmllbGQgb2YgdGhlIG5vZGUuCi0gICAgICAgKi8KLSAgICAgIGlm IChzcC0+ZnRzX2NoaWxkKQotCXsKLQkgIGlmIChDSERJUiAoc3AsIHAtPmZ0c19hY2NwYXRoKSkK LQkgICAgewotCSAgICAgIHAtPmZ0c19lcnJubyA9IGVycm5vOwotCSAgICAgIHAtPmZ0c19mbGFn cyB8PSBGVFNfRE9OVENIRElSOwotCSAgICAgIGZvciAocCA9IHNwLT5mdHNfY2hpbGQ7IHA7IHAg PSBwLT5mdHNfbGluaykKLQkJcC0+ZnRzX2FjY3BhdGggPSBwLT5mdHNfcGFyZW50LT5mdHNfYWNj cGF0aDsKLQkgICAgfQotCX0KLSAgICAgIGVsc2UgaWYgKChzcC0+ZnRzX2NoaWxkID0gZnRzX2J1 aWxkIChzcCwgQlJFQUQpKSA9PSBOVUxMKQotCXsKLQkgIGlmIChJU1NFVCAoRlRTX1NUT1ApKQot CSAgICByZXR1cm4gKE5VTEwpOwotCSAgcmV0dXJuIChwKTsKLQl9Ci0gICAgICBwID0gc3AtPmZ0 c19jaGlsZDsKLSAgICAgIHNwLT5mdHNfY2hpbGQgPSBOVUxMOwotICAgICAgZ290byBuYW1lOwot ICAgIH0KLQotICAvKiBNb3ZlIHRvIHRoZSBuZXh0IG5vZGUgb24gdGhpcyBsZXZlbC4gKi8KLW5l eHQ6dG1wID0gcDsKLSAgaWYgKChwID0gcC0+ZnRzX2xpbmspKQotICAgIHsKLSAgICAgIGZyZWUg KHRtcCk7Ci0KLSAgICAgIC8qCi0gICAgICAgKiBJZiByZWFjaGVkIHRoZSB0b3AsIHJldHVybiB0 byB0aGUgb3JpZ2luYWwgZGlyZWN0b3J5LCBhbmQKLSAgICAgICAqIGxvYWQgdGhlIHBhdGhzIGZv ciB0aGUgbmV4dCByb290LgotICAgICAgICovCi0gICAgICBpZiAocC0+ZnRzX2xldmVsID09IEZU U19ST09UTEVWRUwpCi0JewotCSAgaWYgKCFJU1NFVCAoRlRTX05PQ0hESVIpICYmIEZDSERJUiAo c3AsIHNwLT5mdHNfcmZkKSkKLQkgICAgewotCSAgICAgIFNFVCAoRlRTX1NUT1ApOwotCSAgICAg IHJldHVybiAoTlVMTCk7Ci0JICAgIH0KLQkgIGZ0c19sb2FkIChzcCwgcCk7Ci0JICByZXR1cm4g KHNwLT5mdHNfY3VyID0gcCk7Ci0JfQotCi0gICAgICAvKgotICAgICAgICogVXNlciBtYXkgaGF2 ZSBjYWxsZWQgZnRzX3NldCBvbiB0aGUgbm9kZS4gIElmIHNraXBwZWQsCi0gICAgICAgKiBpZ25v cmUuICBJZiBmb2xsb3dlZCwgZ2V0IGEgZmlsZSBkZXNjcmlwdG9yIHNvIHdlIGNhbgotICAgICAg ICogZ2V0IGJhY2sgaWYgbmVjZXNzYXJ5LgotICAgICAgICovCi0gICAgICBpZiAocC0+ZnRzX2lu c3RyID09IEZUU19TS0lQKQotCWdvdG8gbmV4dDsKLSAgICAgIGlmIChwLT5mdHNfaW5zdHIgPT0g RlRTX0ZPTExPVykKLQl7Ci0JICBwLT5mdHNfaW5mbyA9IGZ0c19zdGF0IChzcCwgTlVMTCwgcCwg MSk7Ci0JICBpZiAocC0+ZnRzX2luZm8gPT0gRlRTX0QgJiYgIUlTU0VUIChGVFNfTk9DSERJUikp Ci0JICAgIHsKLQkgICAgICBpZiAoKHAtPmZ0c19zeW1mZCA9IG9wZW4gKCIuIiwgT19SRE9OTFks IDApKSA8IDApCi0JCXsKLQkJICBwLT5mdHNfZXJybm8gPSBlcnJubzsKLQkJICBwLT5mdHNfaW5m byA9IEZUU19FUlI7Ci0JCX0KLQkgICAgICBlbHNlCi0JCXAtPmZ0c19mbGFncyB8PSBGVFNfU1lN Rk9MTE9XOwotCSAgICB9Ci0JICBwLT5mdHNfaW5zdHIgPSBGVFNfTk9JTlNUUjsKLQl9Ci0KLSAg ICBuYW1lOnQgPSBzcC0+ZnRzX3BhdGggKyBOQVBQRU5EIChwLT5mdHNfcGFyZW50KTsKLSAgICAg ICp0KysgPSAnLyc7Ci0gICAgICBtZW1tb3ZlICh0LCBwLT5mdHNfbmFtZSwgcC0+ZnRzX25hbWVs ZW4gKyAxKTsKLSAgICAgIHJldHVybiAoc3AtPmZ0c19jdXIgPSBwKTsKLSAgICB9Ci0KLSAgLyog TW92ZSB1cCB0byB0aGUgcGFyZW50IG5vZGUuICovCi0gIHAgPSB0bXAtPmZ0c19wYXJlbnQ7Ci0g IGZyZWUgKHRtcCk7Ci0KLSAgaWYgKHAtPmZ0c19sZXZlbCA9PSBGVFNfUk9PVFBBUkVOVExFVkVM KQotICAgIHsKLSAgICAgIC8qCi0gICAgICAgKiBEb25lOyBmcmVlIGV2ZXJ5dGhpbmcgdXAgYW5k IHNldCBlcnJubyB0byAwIHNvIHRoZSB1c2VyCi0gICAgICAgKiBjYW4gZGlzdGluZ3Vpc2ggYmV0 d2VlbiBlcnJvciBhbmQgRU9GLgotICAgICAgICovCi0gICAgICBmcmVlIChwKTsKLSAgICAgIGVy cm5vID0gMDsKLSAgICAgIHJldHVybiAoc3AtPmZ0c19jdXIgPSBOVUxMKTsKLSAgICB9Ci0KLSAg LyogTnVsIHRlcm1pbmF0ZSB0aGUgcGF0aG5hbWUuICovCi0gIHNwLT5mdHNfcGF0aFtwLT5mdHNf cGF0aGxlbl0gPSAnXDAnOwotCi0gIC8qCi0gICAqIFJldHVybiB0byB0aGUgcGFyZW50IGRpcmVj dG9yeS4gIElmIGF0IGEgcm9vdCBub2RlIG9yIGNhbWUgdGhyb3VnaAotICAgKiBhIHN5bWxpbmss IGdvIGJhY2sgdGhyb3VnaCB0aGUgZmlsZSBkZXNjcmlwdG9yLiAgT3RoZXJ3aXNlLCBjZCB1cAot ICAgKiBvbmUgZGlyZWN0b3J5LgotICAgKi8KLSAgaWYgKHAtPmZ0c19sZXZlbCA9PSBGVFNfUk9P VExFVkVMKQotICAgIHsKLSAgICAgIGlmICghSVNTRVQgKEZUU19OT0NIRElSKSAmJiBGQ0hESVIg KHNwLCBzcC0+ZnRzX3JmZCkpCi0JewotCSAgU0VUIChGVFNfU1RPUCk7Ci0JICByZXR1cm4gKE5V TEwpOwotCX0KLSAgICB9Ci0gIGVsc2UgaWYgKHAtPmZ0c19mbGFncyAmIEZUU19TWU1GT0xMT1cp Ci0gICAgewotICAgICAgaWYgKEZDSERJUiAoc3AsIHAtPmZ0c19zeW1mZCkpCi0JewotCSAgc2F2 ZWRfZXJybm8gPSBlcnJubzsKLQkgIGNsb3NlIChwLT5mdHNfc3ltZmQpOwotCSAgZXJybm8gPSBz YXZlZF9lcnJubzsKLQkgIFNFVCAoRlRTX1NUT1ApOwotCSAgcmV0dXJuIChOVUxMKTsKLQl9Ci0g ICAgICBjbG9zZSAocC0+ZnRzX3N5bWZkKTsKLSAgICB9Ci0gIGVsc2UgaWYgKCEocC0+ZnRzX2Zs YWdzICYgRlRTX0RPTlRDSERJUikpCi0gICAgewotICAgICAgaWYgKENIRElSIChzcCwgIi4uIikp Ci0JewotCSAgU0VUIChGVFNfU1RPUCk7Ci0JICByZXR1cm4gKE5VTEwpOwotCX0KLSAgICB9Ci0g IHAtPmZ0c19pbmZvID0gcC0+ZnRzX2Vycm5vID8gRlRTX0VSUiA6IEZUU19EUDsKLSAgcmV0dXJu IChzcC0+ZnRzX2N1ciA9IHApOwotfQotCi0vKgotICogRnRzX3NldCB0YWtlcyB0aGUgc3RyZWFt IGFzIGFuIGFyZ3VtZW50IGFsdGhvdWdoIGl0J3Mgbm90IHVzZWQgaW4gdGhpcwotICogaW1wbGVt ZW50YXRpb247IGl0IHdvdWxkIGJlIG5lY2Vzc2FyeSBpZiBhbnlvbmUgd2FudGVkIHRvIGFkZCBn bG9iYWwKLSAqIHNlbWFudGljcyB0byBmdHMgdXNpbmcgZnRzX3NldC4gIEFuIGVycm9yIHJldHVy biBpcyBhbGxvd2VkIGZvciBzaW1pbGFyCi0gKiByZWFzb25zLgotICovCi1pbnQKLWZ0c19zZXQg KEZUUyAqc3AgX0dMX1VOVVNFRF9QQVJBTUVURVIsIEZUU0VOVCAqcCwgaW50IGluc3RyKQotewot ICBpZiAoaW5zdHIgJiYgaW5zdHIgIT0gRlRTX0FHQUlOICYmIGluc3RyICE9IEZUU19GT0xMT1cg JiYKLSAgICAgIGluc3RyICE9IEZUU19OT0lOU1RSICYmIGluc3RyICE9IEZUU19TS0lQKQotICAg IHsKLSAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgcmV0dXJuICgxKTsKLSAgICB9Ci0gIHAt PmZ0c19pbnN0ciA9IGluc3RyOwotICByZXR1cm4gKDApOwotfQotCi1GVFNFTlQgKgotZnRzX2No aWxkcmVuIChyZWdpc3RlciBGVFMgKnNwLCBpbnQgaW5zdHIpCi17Ci0gIHJlZ2lzdGVyIEZUU0VO VCAqcDsKLSAgaW50IGZkOwotCi0gIGlmIChpbnN0ciAmJiBpbnN0ciAhPSBGVFNfTkFNRU9OTFkp Ci0gICAgewotICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICByZXR1cm4gKE5VTEwpOwotICAg IH0KLQotICAvKiBTZXQgY3VycmVudCBub2RlIHBvaW50ZXIuICovCi0gIHAgPSBzcC0+ZnRzX2N1 cjsKLQotICAvKgotICAgKiBFcnJubyBzZXQgdG8gMCBzbyB1c2VyIGNhbiBkaXN0aW5ndWlzaCBl bXB0eSBkaXJlY3RvcnkgZnJvbQotICAgKiBhbiBlcnJvci4KLSAgICovCi0gIGVycm5vID0gMDsK LQotICAvKiBGYXRhbCBlcnJvcnMgc3RvcCBoZXJlLiAqLwotICBpZiAoSVNTRVQgKEZUU19TVE9Q KSkKLSAgICByZXR1cm4gKE5VTEwpOwotCi0gIC8qIFJldHVybiBsb2dpY2FsIGhpZXJhcmNoeSBv ZiB1c2VyJ3MgYXJndW1lbnRzLiAqLwotICBpZiAocC0+ZnRzX2luZm8gPT0gRlRTX0lOSVQpCi0g ICAgcmV0dXJuIChwLT5mdHNfbGluayk7Ci0KLSAgLyoKLSAgICogSWYgbm90IGEgZGlyZWN0b3J5 IGJlaW5nIHZpc2l0ZWQgaW4gcHJlLW9yZGVyLCBzdG9wIGhlcmUuICBDb3VsZAotICAgKiBhbGxv dyBGVFNfRE5SLCBhc3N1bWluZyB0aGUgdXNlciBoYXMgZml4ZWQgdGhlIHByb2JsZW0sIGJ1dCB0 aGUKLSAgICogc2FtZSBlZmZlY3QgaXMgYXZhaWxhYmxlIHdpdGggRlRTX0FHQUlOLgotICAgKi8K LSAgaWYgKHAtPmZ0c19pbmZvICE9IEZUU19EIC8qICYmIHAtPmZ0c19pbmZvICE9IEZUU19ETlIg Ki8gKQotICAgIHJldHVybiAoTlVMTCk7Ci0KLSAgLyogRnJlZSB1cCBhbnkgcHJldmlvdXMgY2hp bGQgbGlzdC4gKi8KLSAgaWYgKHNwLT5mdHNfY2hpbGQpCi0gICAgZnRzX2xmcmVlIChzcC0+ZnRz X2NoaWxkKTsKLQotICBpZiAoaW5zdHIgPT0gRlRTX05BTUVPTkxZKQotICAgIHsKLSAgICAgIHNw LT5mdHNfb3B0aW9ucyB8PSBGVFNfTkFNRU9OTFk7Ci0gICAgICBpbnN0ciA9IEJOQU1FUzsKLSAg ICB9Ci0gIGVsc2UKLSAgICBpbnN0ciA9IEJDSElMRDsKLQotICAvKgotICAgKiBJZiB1c2luZyBj aGRpciBvbiBhIHJlbGF0aXZlIHBhdGggYW5kIGNhbGxlZCBCRUZPUkUgZnRzX3JlYWQgZG9lcwot ICAgKiBpdHMgY2hkaXIgdG8gdGhlIHJvb3Qgb2YgYSB0cmF2ZXJzYWwsIHdlIGNhbiBsb3NlIC0t IHdlIG5lZWQgdG8KLSAgICogY2hkaXIgaW50byB0aGUgc3ViZGlyZWN0b3J5LCBhbmQgd2UgZG9u J3Qga25vdyB3aGVyZSB0aGUgY3VycmVudAotICAgKiBkaXJlY3RvcnkgaXMsIHNvIHdlIGNhbid0 IGdldCBiYWNrIHNvIHRoYXQgdGhlIHVwY29taW5nIGNoZGlyIGJ5Ci0gICAqIGZ0c19yZWFkIHdp bGwgd29yay4KLSAgICovCi0gIGlmIChwLT5mdHNfbGV2ZWwgIT0gRlRTX1JPT1RMRVZFTCB8fCBw LT5mdHNfYWNjcGF0aFswXSA9PSAnLycgfHwKLSAgICAgIElTU0VUIChGVFNfTk9DSERJUikpCi0g ICAgcmV0dXJuIChzcC0+ZnRzX2NoaWxkID0gZnRzX2J1aWxkIChzcCwgaW5zdHIpKTsKLQotICBp ZiAoKGZkID0gb3BlbiAoIi4iLCBPX1JET05MWSwgMCkpIDwgMCkKLSAgICByZXR1cm4gKE5VTEwp OwotICBzcC0+ZnRzX2NoaWxkID0gZnRzX2J1aWxkIChzcCwgaW5zdHIpOwotICBpZiAoZmNoZGly IChmZCkpCi0gICAgcmV0dXJuIChOVUxMKTsKLSAgY2xvc2UgKGZkKTsKLSAgcmV0dXJuIChzcC0+ ZnRzX2NoaWxkKTsKLX0KLQotLyoKLSAqIFRoaXMgaXMgdGhlIHRyaWNreSBwYXJ0IC0tIGRvIG5v dCBjYXN1YWxseSBjaGFuZ2UgKmFueXRoaW5nKiBpbiBoZXJlLiAgVGhlCi0gKiBpZGVhIGlzIHRv IGJ1aWxkIHRoZSBsaW5rZWQgbGlzdCBvZiBlbnRyaWVzIHRoYXQgYXJlIHVzZWQgYnkgZnRzX2No aWxkcmVuCi0gKiBhbmQgZnRzX3JlYWQuICBUaGVyZSBhcmUgbG90cyBvZiBzcGVjaWFsIGNhc2Vz LgotICoKLSAqIFRoZSByZWFsIHNsb3dkb3duIGluIHdhbGtpbmcgdGhlIHRyZWUgaXMgdGhlIHN0 YXQgY2FsbHMuICBJZiBGVFNfTk9TVEFUIGlzCi0gKiBzZXQgYW5kIGl0J3MgYSBwaHlzaWNhbCB3 YWxrIChzbyB0aGF0IHN5bWJvbGljIGxpbmtzIGNhbid0IGJlIGRpcmVjdG9yaWVzKSwKLSAqIHdl IGNhbiBkbyB0aGluZ3MgcXVpY2tseS4gIEZpcnN0LCBpZiBpdCdzIGEgNC40QlNEIGZpbGUgc3lz dGVtLCB0aGUgdHlwZQotICogb2YgdGhlIGZpbGUgaXMgaW4gdGhlIGRpcmVjdG9yeSBlbnRyeS4g IE90aGVyd2lzZSwgd2UgYXNzdW1lIHRoYXQgdGhlIG51bWJlcgotICogb2Ygc3ViZGlyZWN0b3Jp ZXMgaW4gYSBub2RlIGlzIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgbGlua3MgdG8gdGhlIHBhcmVu dC4KLSAqIFRoZSBmb3JtZXIgc2tpcHMgYWxsIHN0YXQgY2FsbHMuICBUaGUgbGF0dGVyIHNraXBz IHN0YXQgY2FsbHMgaW4gYW55IGxlYWYKLSAqIGRpcmVjdG9yaWVzIGFuZCBmb3IgYW55IGZpbGVz IGFmdGVyIHRoZSBzdWJkaXJlY3RvcmllcyBpbiB0aGUgZGlyZWN0b3J5IGhhdmUKLSAqIGJlZW4g Zm91bmQsIGN1dHRpbmcgdGhlIHN0YXQgY2FsbHMgYnkgYWJvdXQgMi8zLgotICovCi1zdGF0aWMg RlRTRU5UICoKLWZ0c19idWlsZCAocmVnaXN0ZXIgRlRTICpzcCwgaW50IHR5cGUpCi17Ci0gIHN0 cnVjdCBkaXJlbnQgKmRwOwotICByZWdpc3RlciBGVFNFTlQgKnAsICpoZWFkOwotICByZWdpc3Rl ciBpbnQgbml0ZW1zOwotICBGVFNFTlQgKmN1ciwgKnRhaWw7Ci0gIERJUiAqZGlycDsKLSAgdm9p ZCAqYWRqYWRkcjsKLSAgaW50IGNkZXJybm8sIGRlc2NlbmQsIGxlbiwgbGV2ZWwsIG1heGxlbiwg bmxpbmtzLCBzYXZlZF9lcnJubzsKLSAgY2hhciAqY3AgPSBOVUxMOwotI2lmZGVmIEhBVkVfX19P UEVORElSMgotICBpbnQgb2ZsYWc7Ci0jZW5kaWYKLQotICAvKiBTZXQgY3VycmVudCBub2RlIHBv aW50ZXIuICovCi0gIGN1ciA9IHNwLT5mdHNfY3VyOwotCi0gIC8qCi0gICAqIE9wZW4gdGhlIGRp cmVjdG9yeSBmb3IgcmVhZGluZy4gIElmIHRoaXMgZmFpbHMsIHdlJ3JlIGRvbmUuCi0gICAqIElm IGJlaW5nIGNhbGxlZCBmcm9tIGZ0c19yZWFkLCBzZXQgdGhlIGZ0c19pbmZvIGZpZWxkLgotICAg Ki8KLSNpZiBkZWZpbmVkIEhBVkVfX19PUEVORElSMgotICBvZmxhZyA9IERURl9OT0RVUDsKLQot IyBpZmRlZiBEVEZfUkVXSU5ECi0gIG9mbGFnIHw9IERURl9SRVdJTkQ7Ci0jIGVuZGlmCi0KLSMg aWZkZWYgRFRGX0hJREVXCi0gIGlmICghSVNTRVQgKEZUU19XSElURU9VVCkpCi0gICAgb2ZsYWcg fD0gRFRGX0hJREVXOwotIyBlbmRpZiAvKiBEVEZfSElERVcgKi8KLQotICBkaXJwID0gX19vcGVu ZGlyMiAoY3VyLT5mdHNfYWNjcGF0aCwgb2ZsYWcpOwotI2Vsc2UgLyogIUhBVkVfX19PUEVORElS MiAqLwotICBkaXJwID0gb3BlbmRpciAoY3VyLT5mdHNfYWNjcGF0aCk7Ci0jZW5kaWYgLyogIUhB VkVfX19PUEVORElSMiAqLwotCi0gIGlmIChkaXJwID09IE5VTEwpCi0gICAgewotICAgICAgaWYg KHR5cGUgPT0gQlJFQUQpCi0JewotCSAgY3VyLT5mdHNfaW5mbyA9IEZUU19ETlI7Ci0JICBjdXIt PmZ0c19lcnJubyA9IGVycm5vOwotCX0KLSAgICAgIHJldHVybiAoTlVMTCk7Ci0gICAgfQotCi0g IC8qCi0gICAqIE5saW5rcyBpcyB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlIGVudHJpZXMgb2YgdHlw ZSBkaXJlY3RvcnkgaW4gdGhlCi0gICAqIGRpcmVjdG9yeSBpZiB3ZSdyZSBjaGVhdGluZyBvbiBz dGF0IGNhbGxzLCAwIGlmIHdlJ3JlIG5vdCBkb2luZwotICAgKiBhbnkgc3RhdCBjYWxscyBhdCBh bGwsIC0xIGlmIHdlJ3JlIGRvaW5nIHN0YXRzIG9uIGV2ZXJ5dGhpbmcuCi0gICAqLwotICBpZiAo dHlwZSA9PSBCTkFNRVMpCi0gICAgbmxpbmtzID0gMDsKLSAgZWxzZSBpZiAoSVNTRVQgKEZUU19O T1NUQVQpICYmIElTU0VUIChGVFNfUEhZU0lDQUwpKQotICAgIG5saW5rcyA9IGN1ci0+ZnRzX25s aW5rIC0gKElTU0VUIChGVFNfU0VFRE9UKSA/IDAgOiAyKTsKLSAgZWxzZQotICAgIG5saW5rcyA9 IC0xOwotCi0gIC8qCi0gICAqIElmIHdlJ3JlIGdvaW5nIHRvIG5lZWQgdG8gc3RhdCBhbnl0aGlu ZyBvciB3ZSB3YW50IHRvIGRlc2NlbmQKLSAgICogYW5kIHN0YXkgaW4gdGhlIGRpcmVjdG9yeSwg Y2hkaXIuICBJZiB0aGlzIGZhaWxzIHdlIGtlZXAgZ29pbmcsCi0gICAqIGJ1dCBzZXQgYSBmbGFn IHNvIHdlIGRvbid0IGNoZGlyIGFmdGVyIHRoZSBwb3N0LW9yZGVyIHZpc2l0LgotICAgKiBXZSB3 b24ndCBiZSBhYmxlIHRvIHN0YXQgYW55dGhpbmcsIGJ1dCB3ZSBjYW4gc3RpbGwgcmV0dXJuIHRo ZQotICAgKiBuYW1lcyB0aGVtc2VsdmVzLiAgTm90ZSwgdGhhdCBzaW5jZSBmdHNfcmVhZCB3b24n dCBiZSBhYmxlIHRvCi0gICAqIGNoZGlyIGludG8gdGhlIGRpcmVjdG9yeSwgaXQgd2lsbCBoYXZl IHRvIHJldHVybiBkaWZmZXJlbnQgcGF0aAotICAgKiBuYW1lcyB0aGFuIGJlZm9yZSwgaS5lLiAi YS9iIiBpbnN0ZWFkIG9mICJiIi4gIFNpbmNlIHRoZSBub2RlCi0gICAqIGhhcyBhbHJlYWR5IGJl ZW4gdmlzaXRlZCBpbiBwcmUtb3JkZXIsIGhhdmUgdG8gd2FpdCB1bnRpbCB0aGUKLSAgICogcG9z dC1vcmRlciB2aXNpdCB0byByZXR1cm4gdGhlIGVycm9yLiAgVGhlcmUgaXMgYSBzcGVjaWFsIGNh c2UKLSAgICogaGVyZSwgaWYgdGhlcmUgd2FzIG5vdGhpbmcgdG8gc3RhdCB0aGVuIGl0J3Mgbm90 IGFuIGVycm9yIHRvCi0gICAqIG5vdCBiZSBhYmxlIHRvIHN0YXQuICBUaGlzIGlzIGFsbCBmYWly bHkgbmFzdHkuICBJZiBhIHByb2dyYW0KLSAgICogbmVlZGVkIHNvcnRlZCBlbnRyaWVzIG9yIHN0 YXQgaW5mb3JtYXRpb24sIHRoZXkgaGFkIGJldHRlciBiZQotICAgKiBjaGVja2luZyBGVFNfTlMg b24gdGhlIHJldHVybmVkIG5vZGVzLgotICAgKi8KLSAgY2RlcnJubyA9IDA7Ci0gIGlmIChubGlu a3MgfHwgdHlwZSA9PSBCUkVBRCkKLSAgICB7Ci0gICAgICBpZiAoRkNIRElSIChzcCwgZGlyZmQg KGRpcnApKSkKLQl7Ci0JICBpZiAobmxpbmtzICYmIHR5cGUgPT0gQlJFQUQpCi0JICAgIGN1ci0+ ZnRzX2Vycm5vID0gZXJybm87Ci0JICBjdXItPmZ0c19mbGFncyB8PSBGVFNfRE9OVENIRElSOwot CSAgZGVzY2VuZCA9IDA7Ci0JICBjZGVycm5vID0gZXJybm87Ci0JfQotICAgICAgZWxzZQotCWRl c2NlbmQgPSAxOwotICAgIH0KLSAgZWxzZQotICAgIGRlc2NlbmQgPSAwOwotCi0gIC8qCi0gICAq IEZpZ3VyZSBvdXQgdGhlIG1heCBmaWxlIG5hbWUgbGVuZ3RoIHRoYXQgY2FuIGJlIHN0b3JlZCBp biB0aGUKLSAgICogY3VycmVudCBwYXRoIC0tIHRoZSBpbm5lciBsb29wIGFsbG9jYXRlcyBtb3Jl IHBhdGggYXMgbmVjZXNzYXJ5LgotICAgKiBXZSByZWFsbHkgd291bGRuJ3QgaGF2ZSB0byBkbyB0 aGUgbWF4bGVuIGNhbGN1bGF0aW9ucyBoZXJlLCB3ZQotICAgKiBjb3VsZCBkbyB0aGVtIGluIGZ0 c19yZWFkIGJlZm9yZSByZXR1cm5pbmcgdGhlIHBhdGgsIGJ1dCBpdCdzIGEKLSAgICogbG90IGVh c2llciBoZXJlIHNpbmNlIHRoZSBsZW5ndGggaXMgcGFydCBvZiB0aGUgZGlyZW50IHN0cnVjdHVy ZS4KLSAgICoKLSAgICogSWYgbm90IGNoYW5naW5nIGRpcmVjdG9yaWVzIHNldCBhIHBvaW50ZXIg c28gdGhhdCBjYW4ganVzdCBhcHBlbmQKLSAgICogZWFjaCBuZXcgbmFtZSBpbnRvIHRoZSBwYXRo LgotICAgKi8KLSAgbWF4bGVuID0gc3AtPmZ0c19wYXRobGVuIC0gY3VyLT5mdHNfcGF0aGxlbiAt IDE7Ci0gIGxlbiA9IE5BUFBFTkQgKGN1cik7Ci0gIGlmIChJU1NFVCAoRlRTX05PQ0hESVIpKQot ICAgIHsKLSAgICAgIGNwID0gc3AtPmZ0c19wYXRoICsgbGVuOwotICAgICAgKmNwKysgPSAnLyc7 Ci0gICAgfQotCi0gIGxldmVsID0gY3VyLT5mdHNfbGV2ZWwgKyAxOwotCi0gIC8qIFJlYWQgdGhl IGRpcmVjdG9yeSwgYXR0YWNoaW5nIGVhY2ggZW50cnkgdG8gdGhlIGBsaW5rJyBwb2ludGVyLiAq LwotICBhZGphZGRyID0gTlVMTDsKLSAgaGVhZCA9IHRhaWwgPSBOVUxMOwotICBuaXRlbXMgPSAw OwotICB3aGlsZSAoKGRwID0gcmVhZGRpciAoZGlycCkpKQotICAgIHsKLSAgICAgIGludCBuYW1s ZW47Ci0KLSAgICAgIGlmICghSVNTRVQgKEZUU19TRUVET1QpICYmIElTRE9UIChkcC0+ZF9uYW1l KSkKLQljb250aW51ZTsKLQotICAgICAgbmFtbGVuID0gc3RybGVuIChkcC0+ZF9uYW1lKSArIDE7 Ci0gICAgICBpZiAoKHAgPSBmdHNfYWxsb2MgKHNwLCBkcC0+ZF9uYW1lLCBuYW1sZW4pKSA9PSBO VUxMKQotCWdvdG8gbWVtMTsKLSAgICAgIGlmIChuYW1sZW4gPiBtYXhsZW4pCi0JewotCSAgaWYg KGZ0c19wYWxsb2MgKHNwLCAoc2l6ZV90KSBuYW1sZW4pKQotCSAgICB7Ci0JICAgICAgLyoKLQkg ICAgICAgKiBObyBtb3JlIG1lbW9yeSBmb3IgcGF0aCBvciBzdHJ1Y3R1cmVzLiAgU2F2ZQotCSAg ICAgICAqIGVycm5vLCBmcmVlIHVwIHRoZSBjdXJyZW50IHN0cnVjdHVyZSBhbmQgdGhlCi0JICAg ICAgICogc3RydWN0dXJlcyBhbHJlYWR5IGFsbG9jYXRlZC4KLQkgICAgICAgKi8KLQkgICAgbWVt MTpzYXZlZF9lcnJubyA9IGVycm5vOwotCSAgICAgIGZyZWUgKHApOwotCSAgICAgIGZ0c19sZnJl ZSAoaGVhZCk7Ci0JICAgICAgY2xvc2VkaXIgKGRpcnApOwotCSAgICAgIGVycm5vID0gc2F2ZWRf ZXJybm87Ci0JICAgICAgY3VyLT5mdHNfaW5mbyA9IEZUU19FUlI7Ci0JICAgICAgU0VUIChGVFNf U1RPUCk7Ci0JICAgICAgcmV0dXJuIChOVUxMKTsKLQkgICAgfQotCSAgYWRqYWRkciA9IHNwLT5m dHNfcGF0aDsKLQkgIG1heGxlbiA9IHNwLT5mdHNfcGF0aGxlbiAtIHNwLT5mdHNfY3VyLT5mdHNf cGF0aGxlbiAtIDE7Ci0JfQotCi0gICAgICBwLT5mdHNfcGF0aGxlbiA9IGxlbiArIG5hbWxlbiAr IDE7Ci0gICAgICBwLT5mdHNfcGFyZW50ID0gc3AtPmZ0c19jdXI7Ci0gICAgICBwLT5mdHNfbGV2 ZWwgPSBsZXZlbDsKLQotICAgICAgaWYgKGNkZXJybm8pCi0JewotCSAgaWYgKG5saW5rcykKLQkg ICAgewotCSAgICAgIHAtPmZ0c19pbmZvID0gRlRTX05TOwotCSAgICAgIHAtPmZ0c19lcnJubyA9 IGNkZXJybm87Ci0JICAgIH0KLQkgIGVsc2UKLQkgICAgcC0+ZnRzX2luZm8gPSBGVFNfTlNPSzsK LQkgIHAtPmZ0c19hY2NwYXRoID0gY3VyLT5mdHNfYWNjcGF0aDsKLQl9Ci0gICAgICBlbHNlIGlm IChubGlua3MgPT0gMAotI2lmIGRlZmluZWQgRFRfRElSICYmIGRlZmluZWQgX0RJUkVOVF9IQVZF X0RfVFlQRQotCSAgICAgICB8fCAobmxpbmtzID4gMCAmJgotCQkgICBkcC0+ZF90eXBlICE9IERU X0RJUiAmJiBkcC0+ZF90eXBlICE9IERUX1VOS05PV04pCi0jZW5kaWYKLQkpCi0JewotCSAgcC0+ ZnRzX2FjY3BhdGggPSBJU1NFVCAoRlRTX05PQ0hESVIpID8gcC0+ZnRzX3BhdGggOiBwLT5mdHNf bmFtZTsKLQkgIHAtPmZ0c19pbmZvID0gRlRTX05TT0s7Ci0JfQotICAgICAgZWxzZQotCXsKLQkg IC8qIEJ1aWxkIGEgZmlsZSBuYW1lIGZvciBmdHNfc3RhdCB0byBzdGF0LiAqLwotCSAgaWYgKElT U0VUIChGVFNfTk9DSERJUikpCi0JICAgIHsKLQkgICAgICBwLT5mdHNfYWNjcGF0aCA9IHAtPmZ0 c19wYXRoOwotCSAgICAgIG1lbW1vdmUgKHAtPmZ0c19uYW1lLCBjcCwgcC0+ZnRzX25hbWVsZW4g KyAxKTsKLQkgICAgfQotCSAgZWxzZQotCSAgICBwLT5mdHNfYWNjcGF0aCA9IHAtPmZ0c19uYW1l OwotCSAgLyogU3RhdCBpdC4gKi8KLQkgIHAtPmZ0c19pbmZvID0gZnRzX3N0YXQgKHNwLCBkcCwg cCwgMCk7Ci0KLQkgIC8qIERlY3JlbWVudCBsaW5rIGNvdW50IGlmIGFwcGxpY2FibGUuICovCi0J ICBpZiAobmxpbmtzID4gMCAmJiAocC0+ZnRzX2luZm8gPT0gRlRTX0QgfHwKLQkJCSAgICAgcC0+ ZnRzX2luZm8gPT0gRlRTX0RDIHx8IHAtPmZ0c19pbmZvID09IEZUU19ET1QpKQotCSAgICAtLW5s aW5rczsKLQl9Ci0KLSAgICAgIC8qIFdlIHdhbGsgaW4gZGlyZWN0b3J5IG9yZGVyIHNvICJscyAt ZiIgZG9lc24ndCBnZXQgdXBzZXQuICovCi0gICAgICBwLT5mdHNfbGluayA9IE5VTEw7Ci0gICAg ICBpZiAoaGVhZCA9PSBOVUxMKQotCWhlYWQgPSB0YWlsID0gcDsKLSAgICAgIGVsc2UKLQl7Ci0J ICB0YWlsLT5mdHNfbGluayA9IHA7Ci0JICB0YWlsID0gcDsKLQl9Ci0gICAgICArK25pdGVtczsK LSAgICB9Ci0gIGNsb3NlZGlyIChkaXJwKTsKLQotICAvKgotICAgKiBJZiBoYWQgdG8gcmVhbGxv YyB0aGUgcGF0aCwgYWRqdXN0IHRoZSBhZGRyZXNzZXMgZm9yIHRoZSByZXN0Ci0gICAqIG9mIHRo ZSB0cmVlLgotICAgKi8KLSAgaWYgKGFkamFkZHIpCi0gICAgZnRzX3BhZGp1c3QgKHNwLCBhZGph ZGRyKTsKLQotICAvKgotICAgKiBJZiBub3QgY2hhbmdpbmcgZGlyZWN0b3JpZXMsIHJlc2V0IHRo ZSBwYXRoIGJhY2sgdG8gb3JpZ2luYWwKLSAgICogc3RhdGUuCi0gICAqLwotICBpZiAoSVNTRVQg KEZUU19OT0NIRElSKSkKLSAgICB7Ci0gICAgICBpZiAoY3AgLSAxID4gc3AtPmZ0c19wYXRoKQot CS0tY3A7Ci0gICAgICAqY3AgPSAnXDAnOwotICAgIH0KLQotICAvKgotICAgKiBJZiBkZXNjZW5k ZWQgYWZ0ZXIgY2FsbGVkIGZyb20gZnRzX2NoaWxkcmVuIG9yIGFmdGVyIGNhbGxlZCBmcm9tCi0g ICAqIGZ0c19yZWFkIGFuZCBub3RoaW5nIGZvdW5kLCBnZXQgYmFjay4gIEF0IHRoZSByb290IGxl dmVsIHdlIHVzZQotICAgKiB0aGUgc2F2ZWQgZmQ7IGlmIG9uZSBvZiBmdHNfb3BlbigpJ3MgYXJn dW1lbnRzIGlzIGEgcmVsYXRpdmUgcGF0aAotICAgKiB0byBhbiBlbXB0eSBkaXJlY3RvcnksIHdl IHdpbmQgdXAgaGVyZSB3aXRoIG5vIG90aGVyIHdheSBiYWNrLiAgSWYKLSAgICogY2FuJ3QgZ2V0 IGJhY2ssIHdlJ3JlIGRvbmUuCi0gICAqLwotICBpZiAoZGVzY2VuZCAmJiAodHlwZSA9PSBCQ0hJ TEQgfHwgIW5pdGVtcykgJiYKLSAgICAgIChjdXItPmZ0c19sZXZlbCA9PSBGVFNfUk9PVExFVkVM ID8KLSAgICAgICBGQ0hESVIgKHNwLCBzcC0+ZnRzX3JmZCkgOiBDSERJUiAoc3AsICIuLiIpKSkK LSAgICB7Ci0gICAgICBjdXItPmZ0c19pbmZvID0gRlRTX0VSUjsKLSAgICAgIFNFVCAoRlRTX1NU T1ApOwotICAgICAgcmV0dXJuIChOVUxMKTsKLSAgICB9Ci0KLSAgLyogSWYgZGlkbid0IGZpbmQg YW55dGhpbmcsIHJldHVybiBOVUxMLiAqLwotICBpZiAoIW5pdGVtcykKLSAgICB7Ci0gICAgICBp ZiAodHlwZSA9PSBCUkVBRCkKLQljdXItPmZ0c19pbmZvID0gRlRTX0RQOwotICAgICAgcmV0dXJu IChOVUxMKTsKLSAgICB9Ci0KLSAgLyogU29ydCB0aGUgZW50cmllcy4gKi8KLSAgaWYgKHNwLT5m dHNfY29tcGFyICYmIG5pdGVtcyA+IDEpCi0gICAgaGVhZCA9IGZ0c19zb3J0IChzcCwgaGVhZCwg bml0ZW1zKTsKLSAgcmV0dXJuIChoZWFkKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIHNob3J0Ci1m dHNfc3RhdCAoRlRTICpzcCwgc3RydWN0IGRpcmVudCAqZHAsIHJlZ2lzdGVyIEZUU0VOVCAqcCwg aW50IGZvbGxvdykKLXsKLSAgcmVnaXN0ZXIgRlRTRU5UICp0OwotICByZWdpc3RlciBkZXZfdCBk ZXY7Ci0gIHJlZ2lzdGVyIGlub190IGlubzsKLSAgc3RydWN0IHN0YXQgKnNicCwgc2I7Ci0gIGlu dCBzYXZlZF9lcnJubzsKLQotICAvKiBJZiB1c2VyIG5lZWRzIHN0YXQgaW5mbywgc3RhdCBidWZm ZXIgYWxyZWFkeSBhbGxvY2F0ZWQuICovCi0gIHNicCA9IElTU0VUIChGVFNfTk9TVEFUKSA/ICZz YiA6IHAtPmZ0c19zdGF0cDsKLQotI2lmIGRlZmluZWQgRFRfV0hUICYmIGRlZmluZWQgU19JRldI VAotICAvKgotICAgKiBXaGl0ZWQtb3V0IGZpbGVzIGRvbid0IHJlYWxseSBleGlzdC4gIEhvd2V2 ZXIsIHRoZXJlJ3Mgc3RhdCgyKSBmaWxlCi0gICAqIG1hc2sgZm9yIHRoZW0sIHNvIHdlIHNldCBp dCBzbyB0aGF0IHByb2dyYW1zIChpLmUuLCBmaW5kKSBkb24ndCBoYXZlCi0gICAqIHRvIHRlc3Qg RlRTX1cgc2VwYXJhdGVseSBmcm9tIG90aGVyIGZpbGUgdHlwZXMuCi0gICAqLwotICBpZiAoZHAg IT0gTlVMTCAmJiBkcC0+ZF90eXBlID09IERUX1dIVCkKLSAgICB7Ci0gICAgICBtZW1zZXQgKHNi cCwgMCwgc2l6ZW9mIChzdHJ1Y3Qgc3RhdCkpOwotICAgICAgc2JwLT5zdF9tb2RlID0gU19JRldI VDsKLSAgICAgIHJldHVybiAoRlRTX1cpOwotICAgIH0KLSNlbmRpZgotCi0gIC8qCi0gICAqIElm IGRvaW5nIGEgbG9naWNhbCB3YWxrLCBvciBhcHBsaWNhdGlvbiByZXF1ZXN0ZWQgRlRTX0ZPTExP VywgZG8KLSAgICogYSBzdGF0KDIpLiAgSWYgdGhhdCBmYWlscywgY2hlY2sgZm9yIGEgbm9uLWV4 aXN0ZW50IHN5bWxpbmsuICBJZgotICAgKiBmYWlsLCBzZXQgdGhlIGVycm5vIGZyb20gdGhlIHN0 YXQgY2FsbC4KLSAgICovCi0gIGlmIChJU1NFVCAoRlRTX0xPR0lDQUwpIHx8IGZvbGxvdykKLSAg ICB7Ci0gICAgICBpZiAoc3RhdCAocC0+ZnRzX2FjY3BhdGgsIHNicCkpCi0JewotCSAgc2F2ZWRf ZXJybm8gPSBlcnJubzsKLQkgIGlmICghbHN0YXQgKHAtPmZ0c19hY2NwYXRoLCBzYnApKQotCSAg ICB7Ci0JICAgICAgZXJybm8gPSAwOwotCSAgICAgIHJldHVybiAoRlRTX1NMTk9ORSk7Ci0JICAg IH0KLQkgIHAtPmZ0c19lcnJubyA9IHNhdmVkX2Vycm5vOwotCSAgZ290byBlcnI7Ci0JfQotICAg IH0KLSAgZWxzZSBpZiAobHN0YXQgKHAtPmZ0c19hY2NwYXRoLCBzYnApKQotICAgIHsKLSAgICAg IHAtPmZ0c19lcnJubyA9IGVycm5vOwotICAgIGVycjptZW1zZXQgKHNicCwgMCwgc2l6ZW9mIChz dHJ1Y3Qgc3RhdCkpOwotICAgICAgcmV0dXJuIChGVFNfTlMpOwotICAgIH0KLQotICBpZiAoU19J U0RJUiAoc2JwLT5zdF9tb2RlKSkKLSAgICB7Ci0gICAgICAvKgotICAgICAgICogU2V0IHRoZSBk ZXZpY2UvaW5vZGUuICBVc2VkIHRvIGZpbmQgY3ljbGVzIGFuZCBjaGVjayBmb3IKLSAgICAgICAq IGNyb3NzaW5nIG1vdW50IHBvaW50cy4gIEFsc28gcmVtZW1iZXIgdGhlIGxpbmsgY291bnQsIHVz ZWQKLSAgICAgICAqIGluIGZ0c19idWlsZCB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHN0YXQgY2Fs bHMuICBJdCBpcwotICAgICAgICogdW5kZXJzdG9vZCB0aGF0IHRoZXNlIGZpZWxkcyBhcmUgb25s eSByZWZlcmVuY2VkIGlmIGZ0c19pbmZvCi0gICAgICAgKiBpcyBzZXQgdG8gRlRTX0QuCi0gICAg ICAgKi8KLSAgICAgIGRldiA9IHAtPmZ0c19kZXYgPSBzYnAtPnN0X2RldjsKLSAgICAgIGlubyA9 IHAtPmZ0c19pbm8gPSBzYnAtPnN0X2lubzsKLSAgICAgIHAtPmZ0c19ubGluayA9IHNicC0+c3Rf bmxpbms7Ci0KLSAgICAgIGlmIChJU0RPVCAocC0+ZnRzX25hbWUpKQotCXJldHVybiAoRlRTX0RP VCk7Ci0KLSAgICAgIC8qCi0gICAgICAgKiBDeWNsZSBkZXRlY3Rpb24gaXMgZG9uZSBieSBicnV0 ZSBmb3JjZSB3aGVuIHRoZSBkaXJlY3RvcnkKLSAgICAgICAqIGlzIGZpcnN0IGVuY291bnRlcmVk LiAgSWYgdGhlIHRyZWUgZ2V0cyBkZWVwIGVub3VnaCBvciB0aGUKLSAgICAgICAqIG51bWJlciBv ZiBzeW1ib2xpYyBsaW5rcyB0byBkaXJlY3RvcmllcyBpcyBoaWdoIGVub3VnaCwKLSAgICAgICAq IHNvbWV0aGluZyBmYXN0ZXIgbWlnaHQgYmUgd29ydGh3aGlsZS4KLSAgICAgICAqLwotICAgICAg Zm9yICh0ID0gcC0+ZnRzX3BhcmVudDsKLQkgICB0LT5mdHNfbGV2ZWwgPj0gRlRTX1JPT1RMRVZF TDsgdCA9IHQtPmZ0c19wYXJlbnQpCi0JaWYgKGlubyA9PSB0LT5mdHNfaW5vICYmIGRldiA9PSB0 LT5mdHNfZGV2KQotCSAgewotCSAgICBwLT5mdHNfY3ljbGUgPSB0OwotCSAgICByZXR1cm4gKEZU U19EQyk7Ci0JICB9Ci0gICAgICByZXR1cm4gKEZUU19EKTsKLSAgICB9Ci0gIGlmIChTX0lTTE5L IChzYnAtPnN0X21vZGUpKQotICAgIHJldHVybiAoRlRTX1NMKTsKLSAgaWYgKFNfSVNSRUcgKHNi cC0+c3RfbW9kZSkpCi0gICAgcmV0dXJuIChGVFNfRik7Ci0gIHJldHVybiAoRlRTX0RFRkFVTFQp OwotfQotCi1zdGF0aWMgRlRTRU5UICoKLWZ0c19zb3J0IChGVFMgKnNwLCBGVFNFTlQgKmhlYWQs IHJlZ2lzdGVyIGludCBuaXRlbXMpCi17Ci0gIHJlZ2lzdGVyIEZUU0VOVCAqKmFwLCAqcDsKLQot ICAvKgotICAgKiBDb25zdHJ1Y3QgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gdGhlIHN0cnVjdHVy ZXMgYW5kIGNhbGwgcXNvcnQoMykuCi0gICAqIFJlYXNzZW1ibGUgdGhlIGFycmF5IGluIHRoZSBv cmRlciByZXR1cm5lZCBieSBxc29ydC4gIElmIHVuYWJsZSB0bwotICAgKiBzb3J0IGZvciBtZW1v cnkgcmVhc29ucywgcmV0dXJuIHRoZSBkaXJlY3RvcnkgZW50cmllcyBpbiB0aGVpcgotICAgKiBj dXJyZW50IG9yZGVyLiAgQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciB0aGUgY3VycmVudCBuZWVk cyBwbHVzCi0gICAqIDQwIHNvIGRvbid0IHJlYWxsb2Mgb25lIGVudHJ5IGF0IGEgdGltZS4KLSAg ICovCi0gIGlmIChuaXRlbXMgPiBzcC0+ZnRzX25pdGVtcykKLSAgICB7Ci0gICAgICBzcC0+ZnRz X25pdGVtcyA9IG5pdGVtcyArIDQwOwotICAgICAgaWYgKChzcC0+ZnRzX2FycmF5ID0gcmVhbGxv YyAoc3AtPmZ0c19hcnJheSwKLQkJCQkgICAgKHNpemVfdCkgKHNwLT5mdHNfbml0ZW1zICoKLQkJ CQkJICAgICAgc2l6ZW9mIChGVFNFTlQgKikpKSkgPT0gTlVMTCkKLQl7Ci0JICBzcC0+ZnRzX25p dGVtcyA9IDA7Ci0JICByZXR1cm4gKGhlYWQpOwotCX0KLSAgICB9Ci0gIGZvciAoYXAgPSBzcC0+ ZnRzX2FycmF5LCBwID0gaGVhZDsgcDsgcCA9IHAtPmZ0c19saW5rKQotICAgICphcCsrID0gcDsK LSAgcXNvcnQgKCh2b2lkICopIHNwLT5mdHNfYXJyYXksIG5pdGVtcywgc2l6ZW9mIChGVFNFTlQg KiksIHNwLT5mdHNfY29tcGFyKTsKLSAgZm9yIChoZWFkID0gKihhcCA9IHNwLT5mdHNfYXJyYXkp OyAtLW5pdGVtczsgKythcCkKLSAgICBhcFswXS0+ZnRzX2xpbmsgPSBhcFsxXTsKLSAgYXBbMF0t PmZ0c19saW5rID0gTlVMTDsKLSAgcmV0dXJuIChoZWFkKTsKLX0KLQotc3RhdGljIEZUU0VOVCAq Ci1mdHNfYWxsb2MgKEZUUyAqc3AsIGNvbnN0IGNoYXIgKm5hbWUsIHJlZ2lzdGVyIGludCBuYW1l bGVuKQotewotICByZWdpc3RlciBGVFNFTlQgKnA7Ci0gIHNpemVfdCBsZW47Ci0KLSAgLyoKLSAg ICogVGhlIGZpbGUgbmFtZSBpcyBhIHZhcmlhYmxlIGxlbmd0aCBhcnJheSBhbmQgbm8gc3RhdCBz dHJ1Y3R1cmUgaXMKLSAgICogbmVjZXNzYXJ5IGlmIHRoZSB1c2VyIGhhcyBzZXQgdGhlIG5vc3Rh dCBiaXQuICBBbGxvY2F0ZSB0aGUgRlRTRU5UCi0gICAqIHN0cnVjdHVyZSwgdGhlIGZpbGUgbmFt ZSBhbmQgdGhlIHN0YXQgc3RydWN0dXJlIGluIG9uZSBjaHVuaywgYnV0Ci0gICAqIGJlIGNhcmVm dWwgdGhhdCB0aGUgc3RhdCBzdHJ1Y3R1cmUgaXMgcmVhc29uYWJseSBhbGlnbmVkLiAgU2luY2Ug dGhlCi0gICAqIGZ0c19uYW1lIGZpZWxkIGlzIGRlY2xhcmVkIHRvIGJlIG9mIHNpemUgMSwgdGhl IGZ0c19uYW1lIHBvaW50ZXIgaXMKLSAgICogbmFtZWxlbiArIDIgYmVmb3JlIHRoZSBmaXJzdCBw b3NzaWJsZSBhZGRyZXNzIG9mIHRoZSBzdGF0IHN0cnVjdHVyZS4KLSAgICovCi0gIGxlbiA9IHNp emVvZiAoRlRTRU5UKSArIG5hbWVsZW47Ci0gIGlmICghSVNTRVQgKEZUU19OT1NUQVQpKQotICAg IGxlbiArPSBzaXplb2YgKHN0cnVjdCBzdGF0KSArIEFMSUdOQllURVM7Ci0gIGlmICgocCA9IG1h bGxvYyAobGVuKSkgPT0gTlVMTCkKLSAgICByZXR1cm4gKE5VTEwpOwotCi0gIC8qIENvcHkgdGhl IG5hbWUgcGx1cyB0aGUgdHJhaWxpbmcgTlVMTC4gKi8KLSAgbWVtbW92ZSAocC0+ZnRzX25hbWUs IG5hbWUsIG5hbWVsZW4gKyAxKTsKLQotICBpZiAoIUlTU0VUIChGVFNfTk9TVEFUKSkKLSAgICBw LT5mdHNfc3RhdHAgPSAoc3RydWN0IHN0YXQgKikgQUxJR04gKHAtPmZ0c19uYW1lICsgbmFtZWxl biArIDIpOwotICBwLT5mdHNfbmFtZWxlbiA9IG5hbWVsZW47Ci0gIHAtPmZ0c19wYXRoID0gc3At PmZ0c19wYXRoOwotICBwLT5mdHNfZXJybm8gPSAwOwotICBwLT5mdHNfZmxhZ3MgPSAwOwotICBw LT5mdHNfaW5zdHIgPSBGVFNfTk9JTlNUUjsKLSAgcC0+ZnRzX251bWJlciA9IDA7Ci0gIHAtPmZ0 c19wb2ludGVyID0gTlVMTDsKLSAgcmV0dXJuIChwKTsKLX0KLQotc3RhdGljIHZvaWQKLWZ0c19s ZnJlZSAocmVnaXN0ZXIgRlRTRU5UICpoZWFkKQotewotICByZWdpc3RlciBGVFNFTlQgKnA7Ci0K LSAgLyogRnJlZSBhIGxpbmtlZCBsaXN0IG9mIHN0cnVjdHVyZXMuICovCi0gIHdoaWxlICgocCA9 IGhlYWQpKQotICAgIHsKLSAgICAgIGhlYWQgPSBoZWFkLT5mdHNfbGluazsKLSAgICAgIGZyZWUg KHApOwotICAgIH0KLX0KLQotLyoKLSAqIEFsbG93IGVzc2VudGlhbGx5IHVubGltaXRlZCBwYXRo czsgZmluZCwgcm0sIGxzIHNob3VsZCBhbGwgd29yayBvbiBhbnkgdHJlZS4KLSAqIE1vc3Qgc3lz dGVtcyB3aWxsIGFsbG93IGNyZWF0aW9uIG9mIHBhdGhzIG11Y2ggbG9uZ2VyIHRoYW4gTUFYUEFU SExFTiwgZXZlbgotICogdGhvdWdoIHRoZSBrZXJuZWwgd29uJ3QgcmVzb2x2ZSB0aGVtLiAgQWRk IHRoZSBzaXplIChub3QganVzdCB3aGF0J3MgbmVlZGVkKQotICogcGx1cyAyNTYgYnl0ZXMgc28g ZG9uJ3QgcmVhbGxvYyB0aGUgcGF0aCAyIGJ5dGVzIGF0IGEgdGltZS4KLSAqLwotc3RhdGljIGlu dAotZnRzX3BhbGxvYyAoRlRTICpzcCwgc2l6ZV90IG1vcmUpCi17Ci0gIHNwLT5mdHNfcGF0aGxl biArPSBtb3JlICsgMjU2OwotICBzcC0+ZnRzX3BhdGggPSByZWFsbG9jIChzcC0+ZnRzX3BhdGgs IChzaXplX3QpIHNwLT5mdHNfcGF0aGxlbik7Ci0gIHJldHVybiAoc3AtPmZ0c19wYXRoID09IE5V TEwpOwotfQotCi0vKgotICogV2hlbiB0aGUgcGF0aCBpcyByZWFsbG9jJ2QsIGhhdmUgdG8gZml4 IGFsbCBvZiB0aGUgcG9pbnRlcnMgaW4gc3RydWN0dXJlcwotICogYWxyZWFkeSByZXR1cm5lZC4K LSAqLwotc3RhdGljIHZvaWQKLWZ0c19wYWRqdXN0IChGVFMgKnNwLCB2b2lkICphZGRyKQotewot ICBGVFNFTlQgKnA7Ci0KLSNkZWZpbmUgQURKVVNUKHApIHsJCQkJCQkJXAotCShwKS0+ZnRzX2Fj Y3BhdGggPQkJCQkJCVwKLQkgICAgKGNoYXIgKilhZGRyICsgKChwKS0+ZnRzX2FjY3BhdGggLSAo cCktPmZ0c19wYXRoKTsJCVwKLQkocCktPmZ0c19wYXRoID0gYWRkcjsJCQkJCQlcCi19Ci0gIC8q IEFkanVzdCB0aGUgY3VycmVudCBzZXQgb2YgY2hpbGRyZW4uICovCi0gIGZvciAocCA9IHNwLT5m dHNfY2hpbGQ7IHA7IHAgPSBwLT5mdHNfbGluaykKLSAgICBBREpVU1QgKHApOwotCi0gIC8qIEFk anVzdCB0aGUgcmVzdCBvZiB0aGUgdHJlZS4gKi8KLSAgZm9yIChwID0gc3AtPmZ0c19jdXI7IHAt PmZ0c19sZXZlbCA+PSBGVFNfUk9PVExFVkVMOykKLSAgICB7Ci0gICAgICBBREpVU1QgKHApOwot ICAgICAgcCA9IHAtPmZ0c19saW5rID8gcC0+ZnRzX2xpbmsgOiBwLT5mdHNfcGFyZW50OwotICAg IH0KLX0KLQotc3RhdGljIHNpemVfdAotZnRzX21heGFyZ2xlbiAoY2hhciAqY29uc3QgKmFyZ3Yp Ci17Ci0gIHNpemVfdCBsZW4sIG1heDsKLQotICBmb3IgKG1heCA9IDA7ICphcmd2OyArK2FyZ3Yp Ci0gICAgaWYgKChsZW4gPSBzdHJsZW4gKCphcmd2KSkgPiBtYXgpCi0gICAgICBtYXggPSBsZW47 Ci0gIHJldHVybiAobWF4KTsKLX0KZGlmZiAtLWdpdCBhL2xpYmxzL2Z0cy5oIGIvbGlibHMvZnRz LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkNmEyOWYuLjAwMDAwMDAKLS0tIGEv bGlibHMvZnRzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotLyoKLSAgQ29weXJp Z2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAy MDA4LAotICAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzLCAyMDE0LCAyMDE1LCAyMDE2LCAy MDE3LCAyMDE4LCAyMDE5LAotICAyMDIwLCAyMDIxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg SW5jLgotCi0gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBJbmV0dXRpbHMuCi0KLSAgR05VIElu ZXR1dGlscyBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5Ci0gIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVp dGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAotICB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCi0KLSAgR05VIEluZXR1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgYWxv bmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSBgaHR0cDovL3d3dy5nbnUub3JnL2xp Y2Vuc2VzLycuICovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODksIDE5OTMKLSAqCVRoZSBS ZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2Vy dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5 cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg ZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBu b3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVu ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICog ICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBg QVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFS RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVU T1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElO RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0g KiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ Ci0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg VEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIF9GVFNf SAotIyBkZWZpbmUgX0ZUU19IIDEKLQotIyBpZmRlZiBIQVZFX0ZFQVRVUkVTX0gKLSMgIGluY2x1 ZGUgPGZlYXR1cmVzLmg+Ci0jIGVuZGlmCi0jIGluY2x1ZGUgPHN5cy90eXBlcy5oPgotCi10eXBl ZGVmIHN0cnVjdAotewotICBzdHJ1Y3QgX2Z0c2VudCAqZnRzX2N1cjsJLyogY3VycmVudCBub2Rl ICovCi0gIHN0cnVjdCBfZnRzZW50ICpmdHNfY2hpbGQ7CS8qIGxpbmtlZCBsaXN0IG9mIGNoaWxk cmVuICovCi0gIHN0cnVjdCBfZnRzZW50ICoqZnRzX2FycmF5OwkvKiBzb3J0IGFycmF5ICovCi0g IGRldl90IGZ0c19kZXY7CQkvKiBzdGFydGluZyBkZXZpY2UgIyAqLwotICBjaGFyICpmdHNfcGF0 aDsJCS8qIHBhdGggZm9yIHRoaXMgZGVzY2VudCAqLwotICBpbnQgZnRzX3JmZDsJCQkvKiBmZCBm b3Igcm9vdCAqLwotICBpbnQgZnRzX3BhdGhsZW47CQkvKiBzaXplb2YocGF0aCkgKi8KLSAgaW50 IGZ0c19uaXRlbXM7CQkvKiBlbGVtZW50cyBpbiB0aGUgc29ydCBhcnJheSAqLwotICBpbnQgKCpm dHNfY29tcGFyKSAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOwkvKiBjb21wYXJlIGZuICov Ci0KLSMgZGVmaW5lIEZUU19DT01GT0xMT1cJMHgwMDAxCS8qIGZvbGxvdyBjb21tYW5kIGxpbmUg c3ltbGlua3MgKi8KLSMgZGVmaW5lIEZUU19MT0dJQ0FMCTB4MDAwMgkvKiBsb2dpY2FsIHdhbGsg Ki8KLSMgZGVmaW5lIEZUU19OT0NIRElSCTB4MDAwNAkvKiBkb24ndCBjaGFuZ2UgZGlyZWN0b3Jp ZXMgKi8KLSMgZGVmaW5lIEZUU19OT1NUQVQJMHgwMDA4CS8qIGRvbid0IGdldCBzdGF0IGluZm8g Ki8KLSMgZGVmaW5lIEZUU19QSFlTSUNBTAkweDAwMTAJLyogcGh5c2ljYWwgd2FsayAqLwotIyBk ZWZpbmUgRlRTX1NFRURPVAkweDAwMjAJLyogcmV0dXJuIGRvdCBhbmQgZG90LWRvdCAqLwotIyBk ZWZpbmUgRlRTX1hERVYJMHgwMDQwCS8qIGRvbid0IGNyb3NzIGRldmljZXMgKi8KLSMgZGVmaW5l IEZUU19XSElURU9VVAkweDAwODAJLyogcmV0dXJuIHdoaXRlb3V0IGluZm9ybWF0aW9uICovCi0j IGRlZmluZSBGVFNfT1BUSU9OTUFTSwkweDAwZmYJLyogdmFsaWQgdXNlciBvcHRpb24gbWFzayAq LwotCi0jIGRlZmluZSBGVFNfTkFNRU9OTFkJMHgwMTAwCS8qIChwcml2YXRlKSBjaGlsZCBuYW1l cyBvbmx5ICovCi0jIGRlZmluZSBGVFNfU1RPUAkweDAyMDAJLyogKHByaXZhdGUpIHVucmVjb3Zl cmFibGUgZXJyb3IgKi8KLSAgaW50IGZ0c19vcHRpb25zOwkJLyogZnRzX29wZW4gb3B0aW9ucywg Z2xvYmFsIGZsYWdzICovCi19IEZUUzsKLQotdHlwZWRlZiBzdHJ1Y3QgX2Z0c2VudAotewotICBz dHJ1Y3QgX2Z0c2VudCAqZnRzX2N5Y2xlOwkvKiBjeWNsZSBub2RlICovCi0gIHN0cnVjdCBfZnRz ZW50ICpmdHNfcGFyZW50OwkvKiBwYXJlbnQgZGlyZWN0b3J5ICovCi0gIHN0cnVjdCBfZnRzZW50 ICpmdHNfbGluazsJLyogbmV4dCBmaWxlIGluIGRpcmVjdG9yeSAqLwotICBsb25nIGZ0c19udW1i ZXI7CQkvKiBsb2NhbCBudW1lcmljIHZhbHVlICovCi0gIHZvaWQgKmZ0c19wb2ludGVyOwkJLyog bG9jYWwgYWRkcmVzcyB2YWx1ZSAqLwotICBjaGFyICpmdHNfYWNjcGF0aDsJCS8qIGFjY2VzcyBw YXRoICovCi0gIGNoYXIgKmZ0c19wYXRoOwkJLyogcm9vdCBwYXRoICovCi0gIGludCBmdHNfZXJy bm87CQkvKiBlcnJubyBmb3IgdGhpcyBub2RlICovCi0gIGludCBmdHNfc3ltZmQ7CQkvKiBmZCBm b3Igc3ltbGluayAqLwotICB1bnNpZ25lZCBzaG9ydCBmdHNfcGF0aGxlbjsJLyogc3RybGVuKGZ0 c19wYXRoKSAqLwotICB1bnNpZ25lZCBzaG9ydCBmdHNfbmFtZWxlbjsJLyogc3RybGVuKGZ0c19u YW1lKSAqLwotCi0gIGlub190IGZ0c19pbm87CQkvKiBpbm9kZSAqLwotICBkZXZfdCBmdHNfZGV2 OwkJLyogZGV2aWNlICovCi0gIG5saW5rX3QgZnRzX25saW5rOwkJLyogbGluayBjb3VudCAqLwot Ci0jIGRlZmluZSBGVFNfUk9PVFBBUkVOVExFVkVMCS0xCi0jIGRlZmluZSBGVFNfUk9PVExFVkVM CQkgMAotICBzaG9ydCBmdHNfbGV2ZWw7CQkvKiBkZXB0aCAoLTEgdG8gTikgKi8KLQotIyBkZWZp bmUgRlRTX0QJCSAxCS8qIHByZW9yZGVyIGRpcmVjdG9yeSAqLwotIyBkZWZpbmUgRlRTX0RDCQkg MgkvKiBkaXJlY3RvcnkgdGhhdCBjYXVzZXMgY3ljbGVzICovCi0jIGRlZmluZSBGVFNfREVGQVVM VAkgMwkvKiBub25lIG9mIHRoZSBhYm92ZSAqLwotIyBkZWZpbmUgRlRTX0ROUgkgNAkvKiB1bnJl YWRhYmxlIGRpcmVjdG9yeSAqLwotIyBkZWZpbmUgRlRTX0RPVAkgNQkvKiBkb3Qgb3IgZG90LWRv dCAqLwotIyBkZWZpbmUgRlRTX0RQCQkgNgkvKiBwb3N0b3JkZXIgZGlyZWN0b3J5ICovCi0jIGRl ZmluZSBGVFNfRVJSCSA3CS8qIGVycm9yOyBlcnJubyBpcyBzZXQgKi8KLSMgZGVmaW5lIEZUU19G CQkgOAkvKiByZWd1bGFyIGZpbGUgKi8KLSMgZGVmaW5lIEZUU19JTklUCSA5CS8qIGluaXRpYWxp emVkIG9ubHkgKi8KLSMgZGVmaW5lIEZUU19OUwkJMTAJLyogc3RhdCgyKSBmYWlsZWQgKi8KLSMg ZGVmaW5lIEZUU19OU09LCTExCS8qIG5vIHN0YXQoMikgcmVxdWVzdGVkICovCi0jIGRlZmluZSBG VFNfU0wJCTEyCS8qIHN5bWJvbGljIGxpbmsgKi8KLSMgZGVmaW5lIEZUU19TTE5PTkUJMTMJLyog c3ltYm9saWMgbGluayB3aXRob3V0IHRhcmdldCAqLwotIyBkZWZpbmUgRlRTX1cJCTE0CS8qIHdo aXRlb3V0IG9iamVjdCAqLwotICB1bnNpZ25lZCBzaG9ydCBmdHNfaW5mbzsJLyogdXNlciBmbGFn cyBmb3IgRlRTRU5UIHN0cnVjdHVyZSAqLwotCi0jIGRlZmluZSBGVFNfRE9OVENIRElSCSAweDAx CS8qIGRvbid0IGNoZGlyIC4uIHRvIHRoZSBwYXJlbnQgKi8KLSMgZGVmaW5lIEZUU19TWU1GT0xM T1cJIDB4MDIJLyogZm9sbG93ZWQgYSBzeW1saW5rIHRvIGdldCBoZXJlICovCi0gIHVuc2lnbmVk IHNob3J0IGZ0c19mbGFnczsJLyogcHJpdmF0ZSBmbGFncyBmb3IgRlRTRU5UIHN0cnVjdHVyZSAq LwotCi0jIGRlZmluZSBGVFNfQUdBSU4JIDEJLyogcmVhZCBub2RlIGFnYWluICovCi0jIGRlZmlu ZSBGVFNfRk9MTE9XCSAyCS8qIGZvbGxvdyBzeW1ib2xpYyBsaW5rICovCi0jIGRlZmluZSBGVFNf Tk9JTlNUUgkgMwkvKiBubyBpbnN0cnVjdGlvbnMgKi8KLSMgZGVmaW5lIEZUU19TS0lQCSA0CS8q IGRpc2NhcmQgbm9kZSAqLwotICB1bnNpZ25lZCBzaG9ydCBmdHNfaW5zdHI7CS8qIGZ0c19zZXQo KSBpbnN0cnVjdGlvbnMgKi8KLQotICBzdHJ1Y3Qgc3RhdCAqZnRzX3N0YXRwOwkvKiBzdGF0KDIp IGluZm9ybWF0aW9uICovCi0gIGNoYXIgZnRzX25hbWVbMV07CQkvKiBmaWxlIG5hbWUgKi8KLX0g RlRTRU5UOwotCi1GVFNFTlQgKmZ0c19jaGlsZHJlbiAoRlRTICosIGludCk7Ci1pbnQgZnRzX2Ns b3NlIChGVFMgKik7Ci1GVFMgKmZ0c19vcGVuIChjaGFyICpjb25zdCAqLCBpbnQsIGludCAoKiko Y29uc3QgRlRTRU5UICoqLCBjb25zdCBGVFNFTlQgKiopKTsKLUZUU0VOVCAqZnRzX3JlYWQgKEZU UyAqKTsKLWludCBmdHNfc2V0IChGVFMgKiwgRlRTRU5UICosIGludCk7Ci0KLSNlbmRpZiAvKiBm dHMuaCAqLwoKaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2NnaXQvaW5ldHV0aWxzLmdpdC9j b21taXQvP2lkPTZkMGM4YWMyMDNhY2E1ZWU5ZDAwZGE5MThmNjBmNjZiOGE0MmZkZWYKCgpjb21t aXQgNmQwYzhhYzIwM2FjYTVlZTlkMDBkYTkxOGY2MGY2NmI4YTQyZmRlZgpBdXRob3I6IFNpbW9u IEpvc2Vmc3NvbiA8c2ltb25Aam9zZWZzc29uLm9yZz4KRGF0ZTogICBTYXQgSnVsIDI0IDE1OjM0 OjUxIDIwMjEgKzAyMDAKCiAgICBSZW1vdmUgdGVzdHMgb2Jzb2xldGVkIGJ5IGdudWxpYi4KICAg IAogICAgKiBjb25maWd1cmUuYWMgKHBvbGwuaCwgSEFWRV9TTlBSSU5URiwgSEFWRV9WU05QUklO VEYsIHN0cmVycm9yKTogRHJvcCB0ZXN0cy4KCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9j b25maWd1cmUuYWMKaW5kZXggMDdhMDJlYy4uYWY4M2YzNSAxMDA2NDQKLS0tIGEvY29uZmlndXJl LmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtODEwLDMwICs4MTAsNiBAQCBBQ19DSEVDS19GVU5D KHNldHBnaWQsICwgQUNfREVGSU5FKFtzZXRwZ2lkXSwgc2V0cGdycCwKICMgdGhlIHN5c3RlbSBv bmUgZG9lc24ndCBoYXZlIGdldG9wdF9sb25nLgogQUNfQ0hFQ0tfRlVOQyhnZXRvcHRfbG9uZykK IAotQUNfQ0hFQ0tfSEVBREVSKHBvbGwuaCkKLQotIyBTZWUgaWYgc25wcmludGYgZXhpc3RzLCBv dGhlcndpc2UganVzdCB1c2UgYSBib2d1cyB2ZXJzaW9uCi1BQ19DSEVDS19GVU5DKHNucHJpbnRm LAotICBbQUNfREVGSU5FKFtIQVZFX1NOUFJJTlRGXSwgMSwgW0RlZmluZSB0byBvbmUgaWYgeW91 IGhhdmUgc25wcmludGZdKV0pCi0KLSMgU2VlIGlmIHZzbnByaW50ZiBleGlzdHMsIG90aGVyd2lz ZSB1c2Ugb3VyIG93bi4KLUFDX0NIRUNLX0ZVTkModnNucHJpbnRmLAotICBbQUNfREVGSU5FKFtI QVZFX1ZTTlBSSU5URl0sIDEsIFtEZWZpbmUgdG8gb25lIGlmIHlvdSBoYXZlIHZzbnByaW50Zl0p XSkKLQotIyBTZWUgaWYgdGhlIHN5c3RlbSBoYXMgc3RyZXJyb3IsIGFuZCByZXBsYWNlIGl0IGlm IG5vdAotQUNfQ0hFQ0tfRlVOQyhzdHJlcnJvcikKLWlmIHRlc3QgIiRhY19jdl9mdW5jX3N0cmVy cm9yIiA9IG5vOyB0aGVuCi0gICMgTm8gc3RyZXJyb3IsIHNvIHNlZSBpZiB0aGUgU1lTX0VSUkxJ U1QgdmFyaWFibGUgY2FuIGJlIHVzZWQgYnkKLSAgIyBvdXJzCi0gIEFDX0NIRUNLX0ZVTkMoc3lz X2Vycmxpc3QsIEFDX0RFRklORShbSEFWRV9TWVNfRVJSTElTVF0sIDEsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBbRGVmaW5lIHRvIG9uZSBpZiB5b3UgaGF2ZSBzeXNfZXJybGlzdC5d KSkKLSAgaWYgdGVzdCAiJGFjX2N2X2Z1bmNfc3lzX2Vycmxpc3QiID0geWVzOyB0aGVuCi0gICAg QUNfQ0hFQ0tfREVDTChzeXNfZXJybGlzdCwgLCAsCi0gICAgICBbSVVfRkxVU0hMRUZUKFsjaW5j bHVkZSA8c3RkaW8uaD4KLSAgICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgPGVycm5vLmg+XSld KQotICBmaQotZmkKLQogIyBTZWUgaWYgdGhlIHN5c3RlbSBoYXMgaHN0cmVycm9yLCBhbmQgcmVw bGFjZSBpdCBpZiBub3QKIHNhdmVfTElCUz0kTElCUwogCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKU3VtbWFy eSBvZiBjaGFuZ2VzOgogTkVXUyAgICAgICAgICAgICAgfCAgICA0ICsKIGJvb3RzdHJhcC5jb25m ICAgIHwgICAgMSArCiBjb25maWd1cmUuYWMgICAgICB8ICAgMzAgKy0KIGxpYmxzL01ha2VmaWxl LmFtIHwgICAgNCArLQogbGlibHMvZnRzLmMgICAgICAgfCAxMDk4IC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBsaWJscy9mdHMuaCAgICAgICB8 ICAxNDMgLS0tLS0tLQogNiBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAxMjcwIGRl bGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IGxpYmxzL2Z0cy5jCiBkZWxldGUgbW9kZSAx MDA2NDQgbGlibHMvZnRzLmgKCgpob29rcy9wb3N0LXJlY2VpdmUKLS0gCkdOVSBJbmV0dXRpbHMg CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpDb21taXQt aW5ldHV0aWxzIG1haWxpbmcgbGlzdApDb21taXQtaW5ldHV0aWxzQGdudS5vcmcKaHR0cHM6Ly9s aXN0cy5nbnUub3JnL21haWxtYW4vbGlzdGluZm8vY29tbWl0LWluZXR1dGlscwo=