From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeykumar Sankaran Subject: [DPU PATCH v2 2/7] drm/msm/dpu: clean up dpu plane custom properties Date: Tue, 5 Jun 2018 20:45:33 -0700 Message-ID: <1528256738-30652-3-git-send-email-jsanka@codeaurora.org> References: <1528256738-30652-1-git-send-email-jsanka@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1528256738-30652-1-git-send-email-jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, Jeykumar Sankaran , seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org VGhpcyBjaGFuZ2UgcmVtb3ZlcyBhbGwgdGhlIGRwdSBwbGFuZSBjdXN0b20gcHJvcGVydGllcwph bmQgaXRzIGhhbmRsZXJzLgoKY2hhbmdzIGluIHYyOgoJLSByZW1vdmUgc3RhbGUgY29kZSBpbiBi bGVuZCBjb25maWcoU2VhbiBQYXVsKQoJLSBNYWtlZmlsZSBjaGFuZ2VzIHRvIHJlbW92ZSB3YXJu aW5nIGZsYWdzKFNlYW4gUGF1bCkKClNpZ25lZC1vZmYtYnk6IEpleWt1bWFyIFNhbmthcmFuIDxq c2Fua2FAY29kZWF1cm9yYS5vcmc+Ci0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZSAg ICAgICAgICAgICAgICAgICAgICAgfCAgICA4IC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9hZDQuaCAgICAgICAgICAgIHwgICA5OSAtLQogLi4uL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfY29sb3JfcHJvY2Vzc2luZy5jICAgfCAxNTIxIC0tLS0tLS0tLS0tLS0tLS0tLS0t CiAuLi4vZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb2xvcl9wcm9jZXNzaW5nLmggICB8ICAx MjAgLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMgICAgICAgICAg IHwgIDIwNSArLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmggICAg ICAgICAgIHwgICAgMyArLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29k ZXIuYyAgICAgICAgfCAgICAyIC0KIC4uLi9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29k ZXJfcGh5c193Yi5jICAgIHwgICAgMSAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfaHdfYWQ0LmMgICAgICAgICB8IDE0NDMgLS0tLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cuYyAgICAgfCAgIDcyICstCiBkcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2F0YWxvZy5oICAgICB8ICAgODkgLS0K IC4uLi9tc20vZGlzcC9kcHUxL2RwdV9od19jb2xvcl9wcm9jX2NvbW1vbl92NC5oICAgIHwgICA2 OSAtCiAuLi4vZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jb2xvcl9wcm9jX3Y0LmMgICB8 ICAyNDIgLS0tLQogLi4uL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY29sb3JfcHJvY192 NC5oICAgfCAgIDQwIC0KIC4uLi9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY29sb3JfcHJvY2Vz c2luZy5oICAgIHwgICAyMCAtCiAuLi4vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY29sb3JfcHJvY2Vz c2luZ192MV83LmMgICB8ICA1NjUgLS0tLS0tLS0KIC4uLi9tc20vZGlzcC9kcHUxL2RwdV9od19j b2xvcl9wcm9jZXNzaW5nX3YxXzcuaCAgIHwgICA5MiAtLQogZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2h3X2N0bC5jICAgICAgICAgfCAgIDQ0IC0KIGRyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9od19jdGwuaCAgICAgICAgIHwgICAxNSAtCiBkcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfZHNwcC5jICAgICAgICB8ICAyMDkgLS0tCiBkcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfZHNwcC5oICAgICAgICB8ICAyMjAgLS0tCiBk cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfbG0uYyAgICAgICAgICB8ICAgIDEg KwogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X21kc3MuaCAgICAgICAgfCAg IDQ0ICstCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfcGluZ3BvbmcuYyAg ICB8ICAgNjggLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3Bpbmdwb25n LmggICAgfCAgICA2IC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19yZWdf ZG1hX3YxLmMgIHwgIDc1NyAtLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfaHdfcmVnX2RtYV92MS5oICB8ICAgMjcgLQogLi4uL21zbS9kaXNwL2RwdTEvZHB1X2h3 X3JlZ19kbWFfdjFfY29sb3JfcHJvYy5jICAgfCAgOTQzIC0tLS0tLS0tLS0tLQogLi4uL21zbS9k aXNwL2RwdTEvZHB1X2h3X3JlZ19kbWFfdjFfY29sb3JfcHJvYy5oICAgfCAgIDc1IC0KIGRyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19zc3BwLmMgICAgICAgIHwgIDIxOSAtLS0K IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19zc3BwLmggICAgICAgIHwgICA3 MyAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfdXRpbC5jICAgICAgICB8 ICAgIDEgLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3V0aWwuaCAgICAg ICAgfCAgMTU2ICsrCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmMgICAg ICAgICAgICB8ICAgIDMgLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5l LmMgICAgICAgICAgfCAxMjY5ICstLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9wbGFuZS5oICAgICAgICAgIHwgICAzMSAtCiBkcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfcmVnX2RtYS5jICAgICAgICB8ICAxMzkgLS0KIGRyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9yZWdfZG1hLmggICAgICAgIHwgIDMxMCAtLS0tCiBkcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcm0uYyAgICAgICAgICAgICB8ICAxMDIgKy0K IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5oICAgICAgICAgICAgIHwgICAg MiAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfd2IuYyAgICAgICAgICAgICB8 ICAgIDIgLQogZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmggICAgICAgICAgICAgICAgICAg ICAgfCAgIDI4IC0KIGluY2x1ZGUvdWFwaS9kcm0vZHB1X2RybS5oICAgICAgICAgICAgICAgICAg ICAgICAgIHwgIDE4NyAtLS0KIGluY2x1ZGUvdWFwaS9kcm0vbXNtX2RybS5oICAgICAgICAgICAg ICAgICAgICAgICAgIHwgICAgMSAtCiA0NCBmaWxlcyBjaGFuZ2VkLCAyODIgaW5zZXJ0aW9ucygr KSwgOTI0MSBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfYWQ0LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29sb3JfcHJvY2Vzc2luZy5jCiBkZWxldGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NvbG9yX3Byb2Nlc3NpbmcuaAog ZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19h ZDQuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9od19jb2xvcl9wcm9jX2NvbW1vbl92NC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NvbG9yX3Byb2NfdjQuYwogZGVsZXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jb2xvcl9wcm9jX3Y0 LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf aHdfY29sb3JfcHJvY2Vzc2luZy5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2h3X2NvbG9yX3Byb2Nlc3NpbmdfdjFfNy5jCiBkZWxldGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NvbG9yX3Byb2Nl c3NpbmdfdjFfNy5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2h3X2RzcHAuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9od19kc3BwLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfcmVnX2RtYV92MS5jCiBkZWxldGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3JlZ19kbWFfdjEuaAogZGVs ZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19yZWdf ZG1hX3YxX2NvbG9yX3Byb2MuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9od19yZWdfZG1hX3YxX2NvbG9yX3Byb2MuaAogZGVsZXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9yZWdfZG1hLmMKIGRlbGV0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcmVnX2RtYS5o CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vTWFrZWZpbGUKaW5kZXggZDc1NThlZC4uN2JjMzkyMSAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2Vm aWxlCkBAIC00Niw3ICs0Niw2IEBAIG1zbS15IDo9IFwKIAlkaXNwL21kcDUvbWRwNV9taXhlci5v IFwKIAlkaXNwL21kcDUvbWRwNV9wbGFuZS5vIFwKIAlkaXNwL21kcDUvbWRwNV9zbXAubyBcCi0J ZGlzcC9kcHUxL2RwdV9jb2xvcl9wcm9jZXNzaW5nLm8gXAogCWRpc3AvZHB1MS9kcHVfY29yZV9p cnEubyBcCiAJZGlzcC9kcHUxL2RwdV9jb3JlX3BlcmYubyBcCiAJZGlzcC9kcHUxL2RwdV9jcnRj Lm8gXApAQCAtNTQsMjEgKzUzLDE1IEBAIG1zbS15IDo9IFwKIAlkaXNwL2RwdTEvZHB1X2VuY29k ZXJfcGh5c19jbWQubyBcCiAJZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXNfdmlkLm8gXAogCWRp c3AvZHB1MS9kcHVfZm9ybWF0cy5vIFwKLQlkaXNwL2RwdTEvZHB1X2h3X2FkNC5vIFwKIAlkaXNw L2RwdTEvZHB1X2h3X2Jsay5vIFwKIAlkaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cubyBcCiAJZGlz cC9kcHUxL2RwdV9od19jZG0ubyBcCi0JZGlzcC9kcHUxL2RwdV9od19jb2xvcl9wcm9jX3Y0Lm8g XAotCWRpc3AvZHB1MS9kcHVfaHdfY29sb3JfcHJvY2Vzc2luZ192MV83Lm8gXAogCWRpc3AvZHB1 MS9kcHVfaHdfY3RsLm8gXAogCWRpc3AvZHB1MS9kcHVfaHdfZHMubyBcCi0JZGlzcC9kcHUxL2Rw dV9od19kc3BwLm8gXAogCWRpc3AvZHB1MS9kcHVfaHdfaW50ZXJydXB0cy5vIFwKIAlkaXNwL2Rw dTEvZHB1X2h3X2ludGYubyBcCiAJZGlzcC9kcHUxL2RwdV9od19sbS5vIFwKIAlkaXNwL2RwdTEv ZHB1X2h3X3Bpbmdwb25nLm8gXAotCWRpc3AvZHB1MS9kcHVfaHdfcmVnX2RtYV92MS5vIFwKLQlk aXNwL2RwdTEvZHB1X2h3X3JlZ19kbWFfdjFfY29sb3JfcHJvYy5vIFwKIAlkaXNwL2RwdTEvZHB1 X2h3X3NzcHAubyBcCiAJZGlzcC9kcHUxL2RwdV9od190b3AubyBcCiAJZGlzcC9kcHUxL2RwdV9o d191dGlsLm8gXApAQCAtNzgsNyArNzEsNiBAQCBtc20teSA6PSBcCiAJZGlzcC9kcHUxL2RwdV9r bXMubyBcCiAJZGlzcC9kcHUxL2RwdV9rbXNfdXRpbHMubyBcCiAJZGlzcC9kcHUxL2RwdV9wbGFu ZS5vIFwKLQlkaXNwL2RwdTEvZHB1X3JlZ19kbWEubyBcCiAJZGlzcC9kcHUxL2RwdV9ybS5vIFwK IAlkaXNwL2RwdTEvZHB1X3ZiaWYubyBcCiAJZHB1X2RiZy5vIFwKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9hZDQuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9hZDQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI3MGM0 YS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfYWQ0LmgK KysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAx OCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K LSAqLwotI2lmbmRlZiBfRFBVX0FENF9IXwotI2RlZmluZSBfRFBVX0FENF9IXwotCi0jaW5jbHVk ZSA8ZHJtL2RybV9tb2RlLmg+Ci0jaW5jbHVkZSA8ZHJtL2RybV9wcm9wZXJ0eS5oPgotI2luY2x1 ZGUgImRwdV9od19kc3BwLmgiCi0KLS8qKgotICogZW51bSBhZDRfbW9kZXMgLSBhZDQgbW9kZXMg c3VwcG9ydGVkIGJ5IGRyaXZlcgotICovCi1lbnVtIGFkNF9tb2RlcyB7Ci0JQUQ0X09GRiwKLQlB RDRfQVVUT19TVFJFTkdUSCwKLQlBRDRfQ0FMSUJSQVRJT04sCi0JQUQ0X01BTlVBTCwKLX07Ci0K LS8qKgotICogc3RydWN0IGRybV9wcm9wX2VudW1fbGlzdCAtIGRybSBzdHJ1Y3R1cmUgZm9yIGNy ZWF0aW5nIGVudW0gcHJvcGVydHkgYW5kCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZW51bWVyYXRpbmcgdmFsdWVzCi0gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3Byb3BfZW51 bV9saXN0IGFkNF9tb2Rlc1tdID0gewotCXtBRDRfT0ZGLCAib2ZmIn0sCi0Je0FENF9BVVRPX1NU UkVOR1RILCAiYXV0b19zdHJlbmd0aF9tb2RlIn0sCi0Je0FENF9DQUxJQlJBVElPTiwgImNhbGli cmF0aW9uX21vZGUifSwKLQl7QUQ0X01BTlVBTCwgIm1hbnVhbF9tb2RlIn0sCi19OwotCi0vKioK LSAqIGVudW0gYWRfcHJvcGVydHkgLSBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIHNldCBmb3IgYWQK LSAqLwotZW51bSBhZF9wcm9wZXJ0eSB7Ci0JQURfTU9ERSwKLQlBRF9JTklULAotCUFEX0NGRywK LQlBRF9JTlBVVCwKLQlBRF9TVVNQRU5ELAotCUFEX0FTU0VSVElWRSwKLQlBRF9CQUNLTElHSFQs Ci0JQURfSVBDX1NVU1BFTkQsCi0JQURfSVBDX1JFU1VNRSwKLQlBRF9JUENfUkVTRVQsCi0JQURf UFJPUE1BWCwKLX07Ci0KLS8qKgotICogZW51bSBhZF9pbnRyX3Jlc3BfcHJvcGVydHkgLSBhZDQg aW50ZXJydXB0IHJlc3BvbnNlIGVudW0KLSAqLwotZW51bSBhZF9pbnRyX3Jlc3BfcHJvcGVydHkg ewotCUFENF9CQUNLTElHSFQsCi0JQUQ0X1JFU1BNQVgsCi19OwotCi0vKioKLSAqIHN0cnVjdCBk cHVfYWRfaHdfY2ZnIC0gc3RydWN0dXJlIGZvciBzZXR0aW5nIHRoZSBhZCBwcm9wZXJ0aWVzCi0g KiBAcHJvcDogZW51bSBvZiBhZCBwcm9wZXJ0eQotICogQGh3X2NmZzogcGF5bG9hZCBmb3IgdGhl IHByb3AgYmVpbmcgc2V0LgotICovCi1zdHJ1Y3QgZHB1X2FkX2h3X2NmZyB7Ci0JZW51bSBhZF9w cm9wZXJ0eSBwcm9wOwotCXN0cnVjdCBkcHVfaHdfY3BfY2ZnICpod19jZmc7Ci19OwotCi0vKioK LSAqIGRwdV92YWxpZGF0ZV9kc3BwX2FkNCgpIC0gYXBpIHRvIHZhbGlkYXRlIGlmIGFkIHByb3Bl cnR5IGlzIGFsbG93ZWQgZm9yCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkaXNw bGF5IHdpdGggYWxsb2NhdGVkIGRzcHAvbWl4ZXJzLgotICogQGRzcHA6IHBvaW50ZXIgdG8gZHNw cCBpbmZvIHN0cnVjdHVyZS4KLSAqIEBwcm9wOiBwb2ludGVyIHRvIHUzMiBwb2ludGluZyB0byBh ZCBwcm9wZXJ0eQotICovCi1pbnQgZHB1X3ZhbGlkYXRlX2RzcHBfYWQ0KHN0cnVjdCBkcHVfaHdf ZHNwcCAqZHNwcCwgdTMyICpwcm9wKTsKLQotLyoqCi0gKiBkcHVfc2V0dXBfZHNwcF9hZDQgLSBh cGkgdG8gYXBwbHkgdGhlIGFkIHByb3BlcnR5LCBkcHVfdmFsaWRhdGVfZHNwcF9hZDQKLSAqICAg ICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGNhbGwgdGhpcyBmdW5j dGlvbgotICogQGRzcHA6IHBvaW50ZXIgdG8gZHNwcCBpbmZvIHN0cnVjdHVyZS4KLSAqIEBjZmc6 IHBvaW50ZXIgdG8gc3RydWN0IGRwdV9hZF9od19jZmcKLSAqLwotdm9pZCBkcHVfc2V0dXBfZHNw cF9hZDQoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLCB2b2lkICpjZmcpOwotCi0vKioKLSAqIGRw dV9yZWFkX2ludHJfcmVzcF9hZDQgLSBhcGkgdG8gZ2V0IGFkNCBpbnRlcnJ1cHQgc3RhdHVzIGZv ciBldmVudAotICogQGRzcHA6IHBvaW50ZXIgdG8gZHNwcCBvYmplY3QKLSAqIEBldmVudDogZXZl bnQgZm9yIHdoaWNoIHJlc3BvbnNlIGlzIG5lZWRlZAotICogQHJlc3A6IHZhbHVlIG9mIGV2ZW50 IHJlcXVlc3RlZAotICovCi12b2lkIGRwdV9yZWFkX2ludHJfcmVzcF9hZDQoc3RydWN0IGRwdV9o d19kc3BwICpkc3BwLCB1MzIgZXZlbnQsIHUzMiAqcmVzcCk7Ci0KLSNlbmRpZiAvKiBfRFBVX0FE NF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Nv bG9yX3Byb2Nlc3NpbmcuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb2xv cl9wcm9jZXNzaW5nLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxM2QxY2MuLjAw MDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NvbG9yX3Byb2Nl c3NpbmcuYworKysgL2Rldi9udWxsCkBAIC0xLDE1MjEgKzAsMCBAQAotLyogQ29weXJpZ2h0IChj KSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot ICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFC SUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhbG9uZyB3aXRoCi0gKiB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0gKi8KLQotI2RlZmluZSBwcl9mbXQoZm10KQkiJXM6 ICIgZm10LCBfX2Z1bmNfXwotCi0jaW5jbHVkZSA8ZHJtL21zbV9kcm1fcHAuaD4KLSNpbmNsdWRl ICJkcHVfY29sb3JfcHJvY2Vzc2luZy5oIgotI2luY2x1ZGUgImRwdV9rbXMuaCIKLSNpbmNsdWRl ICJkcHVfY3J0Yy5oIgotI2luY2x1ZGUgImRwdV9od19kc3BwLmgiCi0jaW5jbHVkZSAiZHB1X2h3 X2xtLmgiCi0jaW5jbHVkZSAiZHB1X2FkNC5oIgotI2luY2x1ZGUgImRwdV9od19pbnRlcnJ1cHRz LmgiCi0jaW5jbHVkZSAiZHB1X2NvcmVfaXJxLmgiCi0KLXN0cnVjdCBkcHVfY3Bfbm9kZSB7Ci0J dTMyIHByb3BlcnR5X2lkOwotCXUzMiBwcm9wX2ZsYWdzOwotCXUzMiBmZWF0dXJlOwotCXZvaWQg KmJsb2JfcHRyOwotCXVpbnQ2NF90IHByb3BfdmFsOwotCWNvbnN0IHN0cnVjdCBkcHVfcHBfYmxr ICpwcF9ibGs7Ci0Jc3RydWN0IGxpc3RfaGVhZCBmZWF0dXJlX2xpc3Q7Ci0Jc3RydWN0IGxpc3Rf aGVhZCBhY3RpdmVfbGlzdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGRpcnR5X2xpc3Q7Ci0JYm9vbCBp c19kc3BwX2ZlYXR1cmU7Ci0JdTMyIHByb3BfYmxvYl9zejsKLQlzdHJ1Y3QgZHB1X2lycV9jYWxs YmFjayAqaXJxOwotfTsKLQotc3RydWN0IGRwdV9jcF9wcm9wX2F0dGFjaCB7Ci0Jc3RydWN0IGRy bV9jcnRjICpjcnRjOwotCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3A7Ci0Jc3RydWN0IGRwdV9j cF9ub2RlICpwcm9wX25vZGU7Ci0JdTMyIGZlYXR1cmU7Ci0JdWludDY0X3QgdmFsOwotfTsKLQot c3RhdGljIHZvaWQgZHNwcF9wY2NfaW5zdGFsbF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpOwotCi1zdGF0aWMgdm9pZCBkc3BwX2hzaWNfaW5zdGFsbF9wcm9wZXJ0eShzdHJ1Y3QgZHJt X2NydGMgKmNydGMpOwotCi1zdGF0aWMgdm9pZCBkc3BwX2FkX2luc3RhbGxfcHJvcGVydHkoc3Ry dWN0IGRybV9jcnRjICpjcnRjKTsKLQotc3RhdGljIHZvaWQgZHNwcF92bHV0X2luc3RhbGxfcHJv cGVydHkoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKLQotc3RhdGljIHZvaWQgZHNwcF9nYW11dF9p bnN0YWxsX3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Ci0KLXN0YXRpYyB2b2lkIGRz cHBfZ2NfaW5zdGFsbF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwotCi1zdGF0aWMg dm9pZCBkc3BwX2lnY19pbnN0YWxsX3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Ci0K LXR5cGVkZWYgdm9pZCAoKmRzcHBfcHJvcF9pbnN0YWxsX2Z1bmNfdCkoc3RydWN0IGRybV9jcnRj ICpjcnRjKTsKLQotc3RhdGljIGRzcHBfcHJvcF9pbnN0YWxsX2Z1bmNfdCBkc3BwX3Byb3BfaW5z dGFsbF9mdW5jW0RQVV9EU1BQX01BWF07Ci0KLXN0YXRpYyB2b2lkIGRwdV9jcF91cGRhdGVfbGlz dChzdHJ1Y3QgZHB1X2NwX25vZGUgKnByb3Bfbm9kZSwKLQkJc3RydWN0IGRwdV9jcnRjICpjcnRj LCBib29sIGRpcnR5X2xpc3QpOwotCi1zdGF0aWMgaW50IGRwdV9jcF9hZF92YWxpZGF0ZV9wcm9w KHN0cnVjdCBkcHVfY3Bfbm9kZSAqcHJvcF9ub2RlLAotCQlzdHJ1Y3QgZHB1X2NydGMgKmNydGMp OwotCi1zdGF0aWMgdm9pZCBkcHVfY3Bfbm90aWZ5X2FkX2V2ZW50KHN0cnVjdCBkcm1fY3J0YyAq Y3J0Y19kcm0sIHZvaWQgKmFyZyk7Ci0KLXN0YXRpYyB2b2lkIGRwdV9jcF9hZF9zZXRfcHJvcChz dHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjLAotCQllbnVtIGFkX3Byb3BlcnR5IGFkX3Byb3ApOwot Ci0jZGVmaW5lIHNldHVwX2RzcHBfcHJvcF9pbnN0YWxsX2Z1bmNzKGZ1bmMpIFwKLWRvIHsgXAot CWZ1bmNbRFBVX0RTUFBfUENDXSA9IGRzcHBfcGNjX2luc3RhbGxfcHJvcGVydHk7IFwKLQlmdW5j W0RQVV9EU1BQX0hTSUNdID0gZHNwcF9oc2ljX2luc3RhbGxfcHJvcGVydHk7IFwKLQlmdW5jW0RQ VV9EU1BQX0FEXSA9IGRzcHBfYWRfaW5zdGFsbF9wcm9wZXJ0eTsgXAotCWZ1bmNbRFBVX0RTUFBf VkxVVF0gPSBkc3BwX3ZsdXRfaW5zdGFsbF9wcm9wZXJ0eTsgXAotCWZ1bmNbRFBVX0RTUFBfR0FN VVRdID0gZHNwcF9nYW11dF9pbnN0YWxsX3Byb3BlcnR5OyBcCi0JZnVuY1tEUFVfRFNQUF9HQ10g PSBkc3BwX2djX2luc3RhbGxfcHJvcGVydHk7IFwKLQlmdW5jW0RQVV9EU1BQX0lHQ10gPSBkc3Bw X2lnY19pbnN0YWxsX3Byb3BlcnR5OyBcCi19IHdoaWxlICgwKQotCi10eXBlZGVmIHZvaWQgKCps bV9wcm9wX2luc3RhbGxfZnVuY190KShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwotCi1zdGF0aWMg bG1fcHJvcF9pbnN0YWxsX2Z1bmNfdCBsbV9wcm9wX2luc3RhbGxfZnVuY1tEUFVfTUlYRVJfTUFY XTsKLQotc3RhdGljIHZvaWQgbG1fZ2NfaW5zdGFsbF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2NydGMg KmNydGMpOwotCi0jZGVmaW5lIHNldHVwX2xtX3Byb3BfaW5zdGFsbF9mdW5jcyhmdW5jKSBcCi0J KGZ1bmNbRFBVX01JWEVSX0dDXSA9IGxtX2djX2luc3RhbGxfcHJvcGVydHkpCi0KLWVudW0gewot CS8qIEFwcGVuZCBuZXcgRFNQUCBmZWF0dXJlcyBiZWZvcmUgRFBVX0NQX0NSVENfRFNQUF9NQVgg Ki8KLQkvKiBEU1BQIEZlYXR1cmVzIHN0YXJ0ICovCi0JRFBVX0NQX0NSVENfRFNQUF9JR0MsCi0J RFBVX0NQX0NSVENfRFNQUF9QQ0MsCi0JRFBVX0NQX0NSVENfRFNQUF9HQywKLQlEUFVfQ1BfQ1JU Q19EU1BQX0hVRSwKLQlEUFVfQ1BfQ1JUQ19EU1BQX1NBVCwKLQlEUFVfQ1BfQ1JUQ19EU1BQX1ZB TCwKLQlEUFVfQ1BfQ1JUQ19EU1BQX0NPTlQsCi0JRFBVX0NQX0NSVENfRFNQUF9NRU1DT0xPUiwK LQlEUFVfQ1BfQ1JUQ19EU1BQX1NJWFpPTkUsCi0JRFBVX0NQX0NSVENfRFNQUF9HQU1VVCwKLQlE UFVfQ1BfQ1JUQ19EU1BQX0RJVEhFUiwKLQlEUFVfQ1BfQ1JUQ19EU1BQX0hJU1QsCi0JRFBVX0NQ X0NSVENfRFNQUF9BRCwKLQlEUFVfQ1BfQ1JUQ19EU1BQX1ZMVVQsCi0JRFBVX0NQX0NSVENfRFNQ UF9BRF9NT0RFLAotCURQVV9DUF9DUlRDX0RTUFBfQURfSU5JVCwKLQlEUFVfQ1BfQ1JUQ19EU1BQ X0FEX0NGRywKLQlEUFVfQ1BfQ1JUQ19EU1BQX0FEX0lOUFVULAotCURQVV9DUF9DUlRDX0RTUFBf QURfQVNTRVJUSVZFTkVTUywKLQlEUFVfQ1BfQ1JUQ19EU1BQX0FEX0JBQ0tMSUdIVCwKLQlEUFVf Q1BfQ1JUQ19EU1BQX01BWCwKLQkvKiBEU1BQIGZlYXR1cmVzIGVuZCAqLwotCi0JLyogQXBwZW5k IG5ldyBMTSBmZWF0dXJlcyBiZWZvcmUgRFBVX0NQX0NSVENfTUFYX0ZFQVRVUkVTICovCi0JLyog TE0gZmVhdHVyZSBzdGFydCovCi0JRFBVX0NQX0NSVENfTE1fR0MsCi0JLyogTE0gZmVhdHVyZSBl bmQqLwotCi0JRFBVX0NQX0NSVENfTUFYX0ZFQVRVUkVTLAotfTsKLQotI2RlZmluZSBJTklUX1BS T1BfQVRUQUNIKHAsIGNydGMsIHByb3AsIG5vZGUsIGZlYXR1cmUsIHZhbCkgXAotCWRvIHsgXAot CQkocCktPmNydGMgPSBjcnRjOyBcCi0JCShwKS0+cHJvcCA9IHByb3A7IFwKLQkJKHApLT5wcm9w X25vZGUgPSBub2RlOyBcCi0JCShwKS0+ZmVhdHVyZSA9IGZlYXR1cmU7IFwKLQkJKHApLT52YWwg PSB2YWw7IFwKLQl9IHdoaWxlICgwKQotCi1zdGF0aWMgdm9pZCBkcHVfY3BfZ2V0X2h3X3BheWxv YWQoc3RydWN0IGRwdV9jcF9ub2RlICpwcm9wX25vZGUsCi0JCQkJICBzdHJ1Y3QgZHB1X2h3X2Nw X2NmZyAqaHdfY2ZnLAotCQkJCSAgYm9vbCAqZmVhdHVyZV9lbmFibGVkKQotewotCi0Jc3RydWN0 IGRybV9wcm9wZXJ0eV9ibG9iICpibG9iID0gTlVMTDsKLQotCW1lbXNldChod19jZmcsIDAsIHNp emVvZigqaHdfY2ZnKSk7Ci0JKmZlYXR1cmVfZW5hYmxlZCA9IGZhbHNlOwotCi0JYmxvYiA9IHBy b3Bfbm9kZS0+YmxvYl9wdHI7Ci0JaWYgKHByb3Bfbm9kZS0+cHJvcF9mbGFncyAmIERSTV9NT0RF X1BST1BfQkxPQikgewotCQlpZiAoYmxvYikgewotCQkJaHdfY2ZnLT5sZW4gPSBibG9iLT5sZW5n dGg7Ci0JCQlod19jZmctPnBheWxvYWQgPSBibG9iLT5kYXRhOwotCQkJKmZlYXR1cmVfZW5hYmxl ZCA9IHRydWU7Ci0JCX0KLQl9IGVsc2UgaWYgKHByb3Bfbm9kZS0+cHJvcF9mbGFncyAmIERSTV9N T0RFX1BST1BfUkFOR0UpIHsKLQkJLyogQ2hlY2sgaWYgbG9jYWwgYmxvYiBpcyBTZXQgKi8KLQkJ aWYgKCFibG9iKSB7Ci0JCQlpZiAocHJvcF9ub2RlLT5wcm9wX3ZhbCkgewotCQkJCWh3X2NmZy0+ bGVuID0gc2l6ZW9mKHByb3Bfbm9kZS0+cHJvcF92YWwpOwotCQkJCWh3X2NmZy0+cGF5bG9hZCA9 ICZwcm9wX25vZGUtPnByb3BfdmFsOwotCQkJfQotCQl9IGVsc2UgewotCQkJaHdfY2ZnLT5sZW4g PSAocHJvcF9ub2RlLT5wcm9wX3ZhbCkgPyBibG9iLT5sZW5ndGggOgotCQkJCQkwOwotCQkJaHdf Y2ZnLT5wYXlsb2FkID0gKHByb3Bfbm9kZS0+cHJvcF92YWwpID8gYmxvYi0+ZGF0YQotCQkJCQkJ OiBOVUxMOwotCQl9Ci0JCWlmIChwcm9wX25vZGUtPnByb3BfdmFsKQotCQkJKmZlYXR1cmVfZW5h YmxlZCA9IHRydWU7Ci0JfSBlbHNlIGlmIChwcm9wX25vZGUtPnByb3BfZmxhZ3MgJiBEUk1fTU9E RV9QUk9QX0VOVU0pIHsKLQkJKmZlYXR1cmVfZW5hYmxlZCA9IChwcm9wX25vZGUtPnByb3BfdmFs ICE9IDApOwotCQlod19jZmctPmxlbiA9IHNpemVvZihwcm9wX25vZGUtPnByb3BfdmFsKTsKLQkJ aHdfY2ZnLT5wYXlsb2FkID0gJnByb3Bfbm9kZS0+cHJvcF92YWw7Ci0JfSBlbHNlIHsKLQkJRFJN X0VSUk9SKCJwcm9wZXJ0eSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWRcbiIpOwotCX0KLX0KLQotc3Rh dGljIGludCBkcHVfY3BfZGlzYWJsZV9jcnRjX2Jsb2JfcHJvcGVydHkoc3RydWN0IGRwdV9jcF9u b2RlICpwcm9wX25vZGUpCi17Ci0Jc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICpibG9iID0gcHJv cF9ub2RlLT5ibG9iX3B0cjsKLQotCWlmICghYmxvYikKLQkJcmV0dXJuIDA7Ci0JZHJtX3Byb3Bl cnR5X2Jsb2JfcHV0KGJsb2IpOwotCXByb3Bfbm9kZS0+YmxvYl9wdHIgPSBOVUxMOwotCXJldHVy biAwOwotfQotCi1zdGF0aWMgaW50IGRwdV9jcF9jcmVhdGVfbG9jYWxfYmxvYihzdHJ1Y3QgZHJt X2NydGMgKmNydGMsIHUzMiBmZWF0dXJlLCBpbnQgbGVuKQotewotCWludCByZXQgPSAtRUlOVkFM OwotCWJvb2wgZm91bmQgPSBmYWxzZTsKLQlzdHJ1Y3QgZHB1X2NwX25vZGUgKnByb3Bfbm9kZSA9 IE5VTEw7Ci0Jc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICpibG9iX3B0cjsKLQlzdHJ1Y3QgZHB1 X2NydGMgKmRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2Vu dHJ5KHByb3Bfbm9kZSwgJmRwdV9jcnRjLT5mZWF0dXJlX2xpc3QsIGZlYXR1cmVfbGlzdCkgewot CQlpZiAocHJvcF9ub2RlLT5mZWF0dXJlID09IGZlYXR1cmUpIHsKLQkJCWZvdW5kID0gdHJ1ZTsK LQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKCFmb3VuZCB8fCAhKHByb3Bfbm9kZS0+cHJvcF9m bGFncyAmIERSTV9NT0RFX1BST1BfUkFOR0UpKSB7Ci0JCURSTV9FUlJPUigibG9jYWwgYmxvYiBj cmVhdGUgZmFpbGVkIHByb3AgZm91bmQgJWQgZmxhZ3MgJWRcbiIsCi0JCSAgICAgICBmb3VuZCwg cHJvcF9ub2RlLT5wcm9wX2ZsYWdzKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlibG9iX3B0ciA9 IGRybV9wcm9wZXJ0eV9jcmVhdGVfYmxvYihjcnRjLT5kZXYsIGxlbiwgTlVMTCk7Ci0JcmV0ID0g KElTX0VSUl9PUl9OVUxMKGJsb2JfcHRyKSkgPyBQVFJfRVJSKGJsb2JfcHRyKSA6IDA7Ci0JaWYg KCFyZXQpCi0JCXByb3Bfbm9kZS0+YmxvYl9wdHIgPSBibG9iX3B0cjsKLQotCXJldHVybiByZXQ7 Ci19Ci0KLXN0YXRpYyB2b2lkIGRwdV9jcF9kZXN0cm95X2xvY2FsX2Jsb2Ioc3RydWN0IGRwdV9j cF9ub2RlICpwcm9wX25vZGUpCi17Ci0JaWYgKCEocHJvcF9ub2RlLT5wcm9wX2ZsYWdzICYgRFJN X01PREVfUFJPUF9CTE9CKSAmJgotCQlwcm9wX25vZGUtPmJsb2JfcHRyKQotCQlkcm1fcHJvcGVy dHlfYmxvYl9wdXQocHJvcF9ub2RlLT5ibG9iX3B0cik7Ci19Ci0KLXN0YXRpYyBpbnQgZHB1X2Nw X2hhbmRsZV9yYW5nZV9wcm9wZXJ0eShzdHJ1Y3QgZHB1X2NwX25vZGUgKnByb3Bfbm9kZSwKLQkJ CQkJdWludDY0X3QgdmFsKQotewotCWludCByZXQgPSAwOwotCXN0cnVjdCBkcm1fcHJvcGVydHlf YmxvYiAqYmxvYl9wdHIgPSBwcm9wX25vZGUtPmJsb2JfcHRyOwotCi0JaWYgKCFibG9iX3B0cikg ewotCQlwcm9wX25vZGUtPnByb3BfdmFsID0gdmFsOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAo IXZhbCkgewotCQlwcm9wX25vZGUtPnByb3BfdmFsID0gMDsKLQkJcmV0dXJuIDA7Ci0JfQotCi0J cmV0ID0gY29weV9mcm9tX3VzZXIoYmxvYl9wdHItPmRhdGEsIHU2NF90b191c2VyX3B0cih2YWwp LAotCQkJICAgICBibG9iX3B0ci0+bGVuZ3RoKTsKLQlpZiAocmV0KSB7Ci0JCURSTV9FUlJPUigi ZmFpbGVkIHRvIGdldCB0aGUgcHJvcGVydHkgaW5mbyByZXQgJWQiLCByZXQpOwotCQlyZXQgPSAt RUZBVUxUOwotCX0gZWxzZSB7Ci0JCXByb3Bfbm9kZS0+cHJvcF92YWwgPSB2YWw7Ci0JfQotCi0J cmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBkcHVfY3BfZGlzYWJsZV9jcnRjX3Byb3BlcnR5 KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJCQkJIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3Bl cnR5LAotCQkJCQkgc3RydWN0IGRwdV9jcF9ub2RlICpwcm9wX25vZGUpCi17Ci0JaW50IHJldCA9 IC1FSU5WQUw7Ci0KLQlpZiAocHJvcGVydHktPmZsYWdzICYgRFJNX01PREVfUFJPUF9CTE9CKSB7 Ci0JCXJldCA9IGRwdV9jcF9kaXNhYmxlX2NydGNfYmxvYl9wcm9wZXJ0eShwcm9wX25vZGUpOwot CX0gZWxzZSBpZiAocHJvcGVydHktPmZsYWdzICYgRFJNX01PREVfUFJPUF9SQU5HRSkgewotCQly ZXQgPSBkcHVfY3BfaGFuZGxlX3JhbmdlX3Byb3BlcnR5KHByb3Bfbm9kZSwgMCk7Ci0JfSBlbHNl IGlmIChwcm9wZXJ0eS0+ZmxhZ3MgJiBEUk1fTU9ERV9QUk9QX0VOVU0pIHsKLQkJcmV0ID0gMDsK LQkJcHJvcF9ub2RlLT5wcm9wX3ZhbCA9IDA7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRp YyBpbnQgZHB1X2NwX2VuYWJsZV9jcnRjX2Jsb2JfcHJvcGVydHkoc3RydWN0IGRybV9jcnRjICpj cnRjLAotCQkJCQkgICAgICAgc3RydWN0IGRwdV9jcF9ub2RlICpwcm9wX25vZGUsCi0JCQkJCSAg ICAgICB1aW50NjRfdCB2YWwpCi17Ci0Jc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICpibG9iID0g TlVMTDsKLQotCS8qKgotCSAqIEZvciBub24tYmxvYiBiYXNlZCBwcm9wZXJ0aWVzIGFkZCBzdXBw b3J0IHRvIGNyZWF0ZSBhIGJsb2IKLQkgKiB1c2luZyB0aGUgdmFsIGFuZCBzdG9yZSB0aGUgYmxv Yl9wdHIgaW4gcHJvcF9ub2RlLgotCSAqLwotCWJsb2IgPSBkcm1fcHJvcGVydHlfbG9va3VwX2Js b2IoY3J0Yy0+ZGV2LCB2YWwpOwotCWlmICghYmxvYikgewotCQlEUk1fRVJST1IoImludmFsaWQg YmxvYiBpZCAlbGxkXG4iLCB2YWwpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JaWYgKGJsb2It Pmxlbmd0aCAhPSBwcm9wX25vZGUtPnByb3BfYmxvYl9zeikgewotCQlEUk1fRVJST1IoImludmFs aWQgYmxvYiBsZW4gJXpkIGV4cCAlZCBmZWF0dXJlICVkXG4iLAotCQkgICAgYmxvYi0+bGVuZ3Ro LCBwcm9wX25vZGUtPnByb3BfYmxvYl9zeiwgcHJvcF9ub2RlLT5mZWF0dXJlKTsKLQkJZHJtX3By b3BlcnR5X2Jsb2JfcHV0KGJsb2IpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JLyogUmVsZWFz ZSByZWZlcm5jZSB0byBleGlzdGluZyBwYXlsb2FkIG9mIHRoZSBwcm9wZXJ0eSAqLwotCWlmIChw cm9wX25vZGUtPmJsb2JfcHRyKQotCQlkcm1fcHJvcGVydHlfYmxvYl9wdXQocHJvcF9ub2RlLT5i bG9iX3B0cik7Ci0KLQlwcm9wX25vZGUtPmJsb2JfcHRyID0gYmxvYjsKLQlyZXR1cm4gMDsKLX0K LQotc3RhdGljIGludCBkcHVfY3BfZW5hYmxlX2NydGNfcHJvcGVydHkoc3RydWN0IGRybV9jcnRj ICpjcnRjLAotCQkJCSAgICAgICBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwKLQkJCQkg ICAgICAgc3RydWN0IGRwdV9jcF9ub2RlICpwcm9wX25vZGUsCi0JCQkJICAgICAgIHVpbnQ2NF90 IHZhbCkKLXsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKLQotCWlmIChwcm9wZXJ0eS0+ZmxhZ3MgJiBE Uk1fTU9ERV9QUk9QX0JMT0IpIHsKLQkJcmV0ID0gZHB1X2NwX2VuYWJsZV9jcnRjX2Jsb2JfcHJv cGVydHkoY3J0YywgcHJvcF9ub2RlLCB2YWwpOwotCX0gZWxzZSBpZiAocHJvcGVydHktPmZsYWdz ICYgRFJNX01PREVfUFJPUF9SQU5HRSkgewotCQlyZXQgPSBkcHVfY3BfaGFuZGxlX3JhbmdlX3By b3BlcnR5KHByb3Bfbm9kZSwgdmFsKTsKLQl9IGVsc2UgaWYgKHByb3BlcnR5LT5mbGFncyAmIERS TV9NT0RFX1BST1BfRU5VTSkgewotCQlyZXQgPSAwOwotCQlwcm9wX25vZGUtPnByb3BfdmFsID0g dmFsOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3RydWN0IGRwdV9rbXMgKmdldF9r bXMoc3RydWN0IGRybV9jcnRjICpjcnRjKQotewotCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnBy aXYgPSBjcnRjLT5kZXYtPmRldl9wcml2YXRlOwotCi0JcmV0dXJuIHRvX2RwdV9rbXMocHJpdi0+ a21zKTsKLX0KLQotc3RhdGljIHZvaWQgZHB1X2NwX2NydGNfcHJvcF9hdHRhY2goc3RydWN0IGRw dV9jcF9wcm9wX2F0dGFjaCAqcHJvcF9hdHRhY2gpCi17Ci0KLQlzdHJ1Y3QgZHB1X2NydGMgKmRw dV9jcnRjID0gdG9fZHB1X2NydGMocHJvcF9hdHRhY2gtPmNydGMpOwotCi0JZHJtX29iamVjdF9h dHRhY2hfcHJvcGVydHkoJnByb3BfYXR0YWNoLT5jcnRjLT5iYXNlLAotCQkJCSAgIHByb3BfYXR0 YWNoLT5wcm9wLCBwcm9wX2F0dGFjaC0+dmFsKTsKLQotCUlOSVRfTElTVF9IRUFEKCZwcm9wX2F0 dGFjaC0+cHJvcF9ub2RlLT5hY3RpdmVfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJnByb3BfYXR0 YWNoLT5wcm9wX25vZGUtPmRpcnR5X2xpc3QpOwotCi0JcHJvcF9hdHRhY2gtPnByb3Bfbm9kZS0+ cHJvcGVydHlfaWQgPSBwcm9wX2F0dGFjaC0+cHJvcC0+YmFzZS5pZDsKLQlwcm9wX2F0dGFjaC0+ cHJvcF9ub2RlLT5wcm9wX2ZsYWdzID0gcHJvcF9hdHRhY2gtPnByb3AtPmZsYWdzOwotCXByb3Bf YXR0YWNoLT5wcm9wX25vZGUtPmZlYXR1cmUgPSBwcm9wX2F0dGFjaC0+ZmVhdHVyZTsKLQotCWlm IChwcm9wX2F0dGFjaC0+ZmVhdHVyZSA8IERQVV9DUF9DUlRDX0RTUFBfTUFYKQotCQlwcm9wX2F0 dGFjaC0+cHJvcF9ub2RlLT5pc19kc3BwX2ZlYXR1cmUgPSB0cnVlOwotCWVsc2UKLQkJcHJvcF9h dHRhY2gtPnByb3Bfbm9kZS0+aXNfZHNwcF9mZWF0dXJlID0gZmFsc2U7Ci0KLQlsaXN0X2FkZCgm cHJvcF9hdHRhY2gtPnByb3Bfbm9kZS0+ZmVhdHVyZV9saXN0LAotCQkgJmRwdV9jcnRjLT5mZWF0 dXJlX2xpc3QpOwotfQotCi12b2lkIGRwdV9jcF9jcnRjX2luaXQoc3RydWN0IGRybV9jcnRjICpj cnRjKQotewotCXN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGMgPSBOVUxMOwotCi0JaWYgKCFjcnRj KSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBjcnRjICVwS1xuIiwgY3J0Yyk7Ci0JCXJldHVybjsK LQl9Ci0KLQlkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMpOwotCWlmICghZHB1X2NydGMpIHsK LQkJRFJNX0VSUk9SKCJpbnZhbGlkIGRwdV9jcnRjICVwS1xuIiwgZHB1X2NydGMpOwotCQlyZXR1 cm47Ci0JfQotCi0JSU5JVF9MSVNUX0hFQUQoJmRwdV9jcnRjLT5hY3RpdmVfbGlzdCk7Ci0JSU5J VF9MSVNUX0hFQUQoJmRwdV9jcnRjLT5kaXJ0eV9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmZHB1 X2NydGMtPmZlYXR1cmVfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmRwdV9jcnRjLT5hZF9kaXJ0 eSk7Ci0JSU5JVF9MSVNUX0hFQUQoJmRwdV9jcnRjLT5hZF9hY3RpdmUpOwotfQotCi1zdGF0aWMg dm9pZCBkcHVfY3BfY3J0Y19pbnN0YWxsX2ltbXV0YWJsZV9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMsCi0JCQkJCQkgICBjaGFyICpuYW1lLAotCQkJCQkJICAgdTMyIGZlYXR1cmUpCi17 Ci0Jc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcDsKLQlzdHJ1Y3QgZHB1X2NwX25vZGUgKnByb3Bf bm9kZSA9IE5VTEw7Ci0Jc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdjsKLQlzdHJ1Y3QgZHB1 X2NwX3Byb3BfYXR0YWNoIHByb3BfYXR0YWNoOwotCXVpbnQ2NF90IHZhbCA9IDA7Ci0KLQlpZiAo ZmVhdHVyZSA+PSAgRFBVX0NQX0NSVENfTUFYX0ZFQVRVUkVTKSB7Ci0JCURSTV9FUlJPUigiaW52 YWxpZCBmZWF0dXJlICVkIG1heCAlZFxuIiwgZmVhdHVyZSwKLQkJICAgICAgIERQVV9DUF9DUlRD X01BWF9GRUFUVVJFUyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlwcm9wX25vZGUgPSBremFsbG9jKHNp emVvZigqcHJvcF9ub2RlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwcm9wX25vZGUpCi0JCXJldHVy bjsKLQotCXByaXYgPSBjcnRjLT5kZXYtPmRldl9wcml2YXRlOwotCXByb3AgPSBwcml2LT5jcF9w cm9wZXJ0eVtmZWF0dXJlXTsKLQotCWlmICghcHJvcCkgewotCQlwcm9wID0gZHJtX3Byb3BlcnR5 X2NyZWF0ZV9yYW5nZShjcnRjLT5kZXYsCi0JCQkJRFJNX01PREVfUFJPUF9JTU1VVEFCTEUsIG5h bWUsIDAsIDEpOwotCQlpZiAoIXByb3ApIHsKLQkJCURSTV9FUlJPUigicHJvcGVydHkgY3JlYXRl IGZhaWxlZDogJXNcbiIsIG5hbWUpOwotCQkJa2ZyZWUocHJvcF9ub2RlKTsKLQkJCXJldHVybjsK LQkJfQotCQlwcml2LT5jcF9wcm9wZXJ0eVtmZWF0dXJlXSA9IHByb3A7Ci0JfQotCi0JSU5JVF9Q Uk9QX0FUVEFDSCgmcHJvcF9hdHRhY2gsIGNydGMsIHByb3AsIHByb3Bfbm9kZSwKLQkJCQlmZWF0 dXJlLCB2YWwpOwotCWRwdV9jcF9jcnRjX3Byb3BfYXR0YWNoKCZwcm9wX2F0dGFjaCk7Ci19Ci0K LXN0YXRpYyB2b2lkIGRwdV9jcF9jcnRjX2luc3RhbGxfcmFuZ2VfcHJvcGVydHkoc3RydWN0IGRy bV9jcnRjICpjcnRjLAotCQkJCQkgICAgIGNoYXIgKm5hbWUsCi0JCQkJCSAgICAgdTMyIGZlYXR1 cmUsCi0JCQkJCSAgICAgdWludDY0X3QgbWluLCB1aW50NjRfdCBtYXgsCi0JCQkJCSAgICAgdWlu dDY0X3QgdmFsKQotewotCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3A7Ci0Jc3RydWN0IGRwdV9j cF9ub2RlICpwcm9wX25vZGUgPSBOVUxMOwotCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXY7 Ci0Jc3RydWN0IGRwdV9jcF9wcm9wX2F0dGFjaCBwcm9wX2F0dGFjaDsKLQotCWlmIChmZWF0dXJl ID49ICBEUFVfQ1BfQ1JUQ19NQVhfRkVBVFVSRVMpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIGZl YXR1cmUgJWQgbWF4ICVkXG4iLCBmZWF0dXJlLAotCQkJICBEUFVfQ1BfQ1JUQ19NQVhfRkVBVFVS RVMpOwotCQlyZXR1cm47Ci0JfQotCi0JcHJvcF9ub2RlID0ga3phbGxvYyhzaXplb2YoKnByb3Bf bm9kZSksIEdGUF9LRVJORUwpOwotCWlmICghcHJvcF9ub2RlKQotCQlyZXR1cm47Ci0KLQlwcml2 ID0gY3J0Yy0+ZGV2LT5kZXZfcHJpdmF0ZTsKLQlwcm9wID0gcHJpdi0+Y3BfcHJvcGVydHlbZmVh dHVyZV07Ci0KLQlpZiAoIXByb3ApIHsKLQkJcHJvcCA9IGRybV9wcm9wZXJ0eV9jcmVhdGVfcmFu Z2UoY3J0Yy0+ZGV2LCAwLCBuYW1lLCBtaW4sIG1heCk7Ci0JCWlmICghcHJvcCkgewotCQkJRFJN X0VSUk9SKCJwcm9wZXJ0eSBjcmVhdGUgZmFpbGVkOiAlc1xuIiwgbmFtZSk7Ci0JCQlrZnJlZShw cm9wX25vZGUpOwotCQkJcmV0dXJuOwotCQl9Ci0JCXByaXYtPmNwX3Byb3BlcnR5W2ZlYXR1cmVd ID0gcHJvcDsKLQl9Ci0KLQlJTklUX1BST1BfQVRUQUNIKCZwcm9wX2F0dGFjaCwgY3J0YywgcHJv cCwgcHJvcF9ub2RlLAotCQkJCWZlYXR1cmUsIHZhbCk7Ci0KLQlkcHVfY3BfY3J0Y19wcm9wX2F0 dGFjaCgmcHJvcF9hdHRhY2gpOwotfQotCi1zdGF0aWMgdm9pZCBkcHVfY3BfY3J0Y19pbnN0YWxs X2Jsb2JfcHJvcGVydHkoc3RydWN0IGRybV9jcnRjICpjcnRjLCBjaGFyICpuYW1lLAotCQkJdTMy IGZlYXR1cmUsIHUzMiBibG9iX3N6KQotewotCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3A7Ci0J c3RydWN0IGRwdV9jcF9ub2RlICpwcm9wX25vZGUgPSBOVUxMOwotCXN0cnVjdCBtc21fZHJtX3By aXZhdGUgKnByaXY7Ci0JdWludDY0X3QgdmFsID0gMDsKLQlzdHJ1Y3QgZHB1X2NwX3Byb3BfYXR0 YWNoIHByb3BfYXR0YWNoOwotCi0JaWYgKGZlYXR1cmUgPj0gIERQVV9DUF9DUlRDX01BWF9GRUFU VVJFUykgewotCQlEUk1fRVJST1IoImludmFsaWQgZmVhdHVyZSAlZCBtYXggJWRcbiIsIGZlYXR1 cmUsCi0JCSAgICAgICBEUFVfQ1BfQ1JUQ19NQVhfRkVBVFVSRVMpOwotCQlyZXR1cm47Ci0JfQot Ci0JcHJvcF9ub2RlID0ga3phbGxvYyhzaXplb2YoKnByb3Bfbm9kZSksIEdGUF9LRVJORUwpOwot CWlmICghcHJvcF9ub2RlKQotCQlyZXR1cm47Ci0KLQlwcml2ID0gY3J0Yy0+ZGV2LT5kZXZfcHJp dmF0ZTsKLQlwcm9wID0gcHJpdi0+Y3BfcHJvcGVydHlbZmVhdHVyZV07Ci0KLQlpZiAoIXByb3Ap IHsKLQkJcHJvcCA9IGRybV9wcm9wZXJ0eV9jcmVhdGUoY3J0Yy0+ZGV2LAotCQkJCQkgICBEUk1f TU9ERV9QUk9QX0JMT0IsIG5hbWUsIDApOwotCQlpZiAoIXByb3ApIHsKLQkJCURSTV9FUlJPUigi cHJvcGVydHkgY3JlYXRlIGZhaWxlZDogJXNcbiIsIG5hbWUpOwotCQkJa2ZyZWUocHJvcF9ub2Rl KTsKLQkJCXJldHVybjsKLQkJfQotCQlwcml2LT5jcF9wcm9wZXJ0eVtmZWF0dXJlXSA9IHByb3A7 Ci0JfQotCi0JSU5JVF9QUk9QX0FUVEFDSCgmcHJvcF9hdHRhY2gsIGNydGMsIHByb3AsIHByb3Bf bm9kZSwKLQkJCQlmZWF0dXJlLCB2YWwpOwotCXByb3Bfbm9kZS0+cHJvcF9ibG9iX3N6ID0gYmxv Yl9zejsKLQotCWRwdV9jcF9jcnRjX3Byb3BfYXR0YWNoKCZwcm9wX2F0dGFjaCk7Ci19Ci0KLXN0 YXRpYyB2b2lkIGRwdV9jcF9jcnRjX2luc3RhbGxfZW51bV9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMsCi0JdTMyIGZlYXR1cmUsIGNvbnN0IHN0cnVjdCBkcm1fcHJvcF9lbnVtX2xpc3Qg Kmxpc3QsIHUzMiBlbnVtX3N6LAotCWNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IGRybV9wcm9wZXJ0 eSAqcHJvcDsKLQlzdHJ1Y3QgZHB1X2NwX25vZGUgKnByb3Bfbm9kZSA9IE5VTEw7Ci0Jc3RydWN0 IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdjsKLQl1aW50NjRfdCB2YWwgPSAwOwotCXN0cnVjdCBkcHVf Y3BfcHJvcF9hdHRhY2ggcHJvcF9hdHRhY2g7Ci0KLQlpZiAoZmVhdHVyZSA+PSAgRFBVX0NQX0NS VENfTUFYX0ZFQVRVUkVTKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBmZWF0dXJlICVkIG1heCAl ZFxuIiwgZmVhdHVyZSwKLQkJICAgICAgIERQVV9DUF9DUlRDX01BWF9GRUFUVVJFUyk7Ci0JCXJl dHVybjsKLQl9Ci0KLQlwcm9wX25vZGUgPSBremFsbG9jKHNpemVvZigqcHJvcF9ub2RlKSwgR0ZQ X0tFUk5FTCk7Ci0JaWYgKCFwcm9wX25vZGUpCi0JCXJldHVybjsKLQotCXByaXYgPSBjcnRjLT5k ZXYtPmRldl9wcml2YXRlOwotCXByb3AgPSBwcml2LT5jcF9wcm9wZXJ0eVtmZWF0dXJlXTsKLQot CWlmICghcHJvcCkgewotCQlwcm9wID0gZHJtX3Byb3BlcnR5X2NyZWF0ZV9lbnVtKGNydGMtPmRl diwgMCwgbmFtZSwKLQkJCWxpc3QsIGVudW1fc3opOwotCQlpZiAoIXByb3ApIHsKLQkJCURSTV9F UlJPUigicHJvcGVydHkgY3JlYXRlIGZhaWxlZDogJXNcbiIsIG5hbWUpOwotCQkJa2ZyZWUocHJv cF9ub2RlKTsKLQkJCXJldHVybjsKLQkJfQotCQlwcml2LT5jcF9wcm9wZXJ0eVtmZWF0dXJlXSA9 IHByb3A7Ci0JfQotCi0JSU5JVF9QUk9QX0FUVEFDSCgmcHJvcF9hdHRhY2gsIGNydGMsIHByb3As IHByb3Bfbm9kZSwKLQkJCQlmZWF0dXJlLCB2YWwpOwotCi0JZHB1X2NwX2NydGNfcHJvcF9hdHRh Y2goJnByb3BfYXR0YWNoKTsKLX0KLQotc3RhdGljIHZvaWQgZHB1X2NwX2NydGNfc2V0ZmVhdHVy ZShzdHJ1Y3QgZHB1X2NwX25vZGUgKnByb3Bfbm9kZSwKLQkJCQkgICBzdHJ1Y3QgZHB1X2NydGMg KmRwdV9jcnRjKQotewotCXN0cnVjdCBkcHVfaHdfY3BfY2ZnIGh3X2NmZzsKLQlzdHJ1Y3QgZHB1 X2h3X21peGVyICpod19sbTsKLQlzdHJ1Y3QgZHB1X2h3X2RzcHAgKmh3X2RzcHA7Ci0JdTMyIG51 bV9taXhlcnMgPSBkcHVfY3J0Yy0+bnVtX21peGVyczsKLQlpbnQgaSA9IDA7Ci0JYm9vbCBmZWF0 dXJlX2VuYWJsZWQgPSBmYWxzZTsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgZHB1X2FkX2h3X2Nm ZyBhZF9jZmc7Ci0KLQlkcHVfY3BfZ2V0X2h3X3BheWxvYWQocHJvcF9ub2RlLCAmaHdfY2ZnLCAm ZmVhdHVyZV9lbmFibGVkKTsKLQlod19jZmcubnVtX29mX21peGVycyA9IGRwdV9jcnRjLT5udW1f bWl4ZXJzOwotCWh3X2NmZy5kaXNwbGF5aCA9IGRwdV9jcnRjLT5iYXNlLm1vZGUuaGRpc3BsYXk7 Ci0JaHdfY2ZnLmRpc3BsYXl2ID0gZHB1X2NydGMtPmJhc2UubW9kZS52ZGlzcGxheTsKLQlod19j ZmcubGFzdF9mZWF0dXJlID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBudW1fbWl4ZXJzICYmICFy ZXQ7IGkrKykgewotCQlod19sbSA9IGRwdV9jcnRjLT5taXhlcnNbaV0uaHdfbG07Ci0JCWh3X2Rz cHAgPSBkcHVfY3J0Yy0+bWl4ZXJzW2ldLmh3X2RzcHA7Ci0JCWh3X2NmZy5jdGwgPSBkcHVfY3J0 Yy0+bWl4ZXJzW2ldLmh3X2N0bDsKLQkJaHdfY2ZnLm1peGVyX2luZm8gPSBod19sbTsKLQkJc3dp dGNoIChwcm9wX25vZGUtPmZlYXR1cmUpIHsKLQkJY2FzZSBEUFVfQ1BfQ1JUQ19EU1BQX1ZMVVQ6 Ci0JCQlpZiAoIWh3X2RzcHAgfHwgIWh3X2RzcHAtPm9wcy5zZXR1cF92bHV0KSB7Ci0JCQkJcmV0 ID0gLUVJTlZBTDsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWh3X2RzcHAtPm9wcy5zZXR1cF92 bHV0KGh3X2RzcHAsICZod19jZmcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRFBVX0NQX0NSVENfRFNQ UF9QQ0M6Ci0JCQlpZiAoIWh3X2RzcHAgfHwgIWh3X2RzcHAtPm9wcy5zZXR1cF9wY2MpIHsKLQkJ CQlyZXQgPSAtRUlOVkFMOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaHdfZHNwcC0+b3BzLnNl dHVwX3BjYyhod19kc3BwLCAmaHdfY2ZnKTsKLQkJCWJyZWFrOwotCQljYXNlIERQVV9DUF9DUlRD X0RTUFBfSUdDOgotCQkJaWYgKCFod19kc3BwIHx8ICFod19kc3BwLT5vcHMuc2V0dXBfaWdjKSB7 Ci0JCQkJcmV0ID0gLUVJTlZBTDsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWh3X2RzcHAtPm9w cy5zZXR1cF9pZ2MoaHdfZHNwcCwgJmh3X2NmZyk7Ci0JCQlicmVhazsKLQkJY2FzZSBEUFVfQ1Bf Q1JUQ19EU1BQX0dDOgotCQkJaWYgKCFod19kc3BwIHx8ICFod19kc3BwLT5vcHMuc2V0dXBfZ2Mp IHsKLQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaHdfZHNwcC0+ b3BzLnNldHVwX2djKGh3X2RzcHAsICZod19jZmcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRFBVX0NQ X0NSVENfRFNQUF9IVUU6Ci0JCQlpZiAoIWh3X2RzcHAgfHwgIWh3X2RzcHAtPm9wcy5zZXR1cF9o dWUpIHsKLQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaHdfZHNw cC0+b3BzLnNldHVwX2h1ZShod19kc3BwLCAmaHdfY2ZnKTsKLQkJCWJyZWFrOwotCQljYXNlIERQ VV9DUF9DUlRDX0RTUFBfU0FUOgotCQkJaWYgKCFod19kc3BwIHx8ICFod19kc3BwLT5vcHMuc2V0 dXBfc2F0KSB7Ci0JCQkJcmV0ID0gLUVJTlZBTDsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWh3 X2RzcHAtPm9wcy5zZXR1cF9zYXQoaHdfZHNwcCwgJmh3X2NmZyk7Ci0JCQlicmVhazsKLQkJY2Fz ZSBEUFVfQ1BfQ1JUQ19EU1BQX1ZBTDoKLQkJCWlmICghaHdfZHNwcCB8fCAhaHdfZHNwcC0+b3Bz LnNldHVwX3ZhbCkgewotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0J CQlod19kc3BwLT5vcHMuc2V0dXBfdmFsKGh3X2RzcHAsICZod19jZmcpOwotCQkJYnJlYWs7Ci0J CWNhc2UgRFBVX0NQX0NSVENfRFNQUF9DT05UOgotCQkJaWYgKCFod19kc3BwIHx8ICFod19kc3Bw LT5vcHMuc2V0dXBfY29udCkgewotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJY29udGludWU7Ci0J CQl9Ci0JCQlod19kc3BwLT5vcHMuc2V0dXBfY29udChod19kc3BwLCAmaHdfY2ZnKTsKLQkJCWJy ZWFrOwotCQljYXNlIERQVV9DUF9DUlRDX0RTUFBfTUVNQ09MT1I6Ci0JCQlpZiAoIWh3X2RzcHAg fHwgIWh3X2RzcHAtPm9wcy5zZXR1cF9wYV9tZW1jb2xvcikgewotCQkJCXJldCA9IC1FSU5WQUw7 Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlod19kc3BwLT5vcHMuc2V0dXBfcGFfbWVtY29sb3Io aHdfZHNwcCwgJmh3X2NmZyk7Ci0JCQlicmVhazsKLQkJY2FzZSBEUFVfQ1BfQ1JUQ19EU1BQX1NJ WFpPTkU6Ci0JCQlpZiAoIWh3X2RzcHAgfHwgIWh3X2RzcHAtPm9wcy5zZXR1cF9zaXh6b25lKSB7 Ci0JCQkJcmV0ID0gLUVJTlZBTDsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWh3X2RzcHAtPm9w cy5zZXR1cF9zaXh6b25lKGh3X2RzcHAsICZod19jZmcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRFBV X0NQX0NSVENfRFNQUF9HQU1VVDoKLQkJCWlmICghaHdfZHNwcCB8fCAhaHdfZHNwcC0+b3BzLnNl dHVwX2dhbXV0KSB7Ci0JCQkJcmV0ID0gLUVJTlZBTDsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJ CWh3X2RzcHAtPm9wcy5zZXR1cF9nYW11dChod19kc3BwLCAmaHdfY2ZnKTsKLQkJCWJyZWFrOwot CQljYXNlIERQVV9DUF9DUlRDX0xNX0dDOgotCQkJaWYgKCFod19sbSB8fCAhaHdfbG0tPm9wcy5z ZXR1cF9nYykgewotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlo d19sbS0+b3BzLnNldHVwX2djKGh3X2xtLCAmaHdfY2ZnKTsKLQkJCWJyZWFrOwotCQljYXNlIERQ VV9DUF9DUlRDX0RTUFBfQURfTU9ERToKLQkJCWlmICghaHdfZHNwcCB8fCAhaHdfZHNwcC0+b3Bz LnNldHVwX2FkKSB7Ci0JCQkJcmV0ID0gLUVJTlZBTDsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJ CWFkX2NmZy5wcm9wID0gQURfTU9ERTsKLQkJCWFkX2NmZy5od19jZmcgPSAmaHdfY2ZnOwotCQkJ aHdfZHNwcC0+b3BzLnNldHVwX2FkKGh3X2RzcHAsICZhZF9jZmcpOwotCQkJYnJlYWs7Ci0JCWNh c2UgRFBVX0NQX0NSVENfRFNQUF9BRF9JTklUOgotCQkJaWYgKCFod19kc3BwIHx8ICFod19kc3Bw LT5vcHMuc2V0dXBfYWQpIHsKLQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCWNvbnRpbnVlOwotCQkJ fQotCQkJYWRfY2ZnLnByb3AgPSBBRF9JTklUOwotCQkJYWRfY2ZnLmh3X2NmZyA9ICZod19jZmc7 Ci0JCQlod19kc3BwLT5vcHMuc2V0dXBfYWQoaHdfZHNwcCwgJmFkX2NmZyk7Ci0JCQlicmVhazsK LQkJY2FzZSBEUFVfQ1BfQ1JUQ19EU1BQX0FEX0NGRzoKLQkJCWlmICghaHdfZHNwcCB8fCAhaHdf ZHNwcC0+b3BzLnNldHVwX2FkKSB7Ci0JCQkJcmV0ID0gLUVJTlZBTDsKLQkJCQljb250aW51ZTsK LQkJCX0KLQkJCWFkX2NmZy5wcm9wID0gQURfQ0ZHOwotCQkJYWRfY2ZnLmh3X2NmZyA9ICZod19j Zmc7Ci0JCQlod19kc3BwLT5vcHMuc2V0dXBfYWQoaHdfZHNwcCwgJmFkX2NmZyk7Ci0JCQlicmVh azsKLQkJY2FzZSBEUFVfQ1BfQ1JUQ19EU1BQX0FEX0lOUFVUOgotCQkJaWYgKCFod19kc3BwIHx8 ICFod19kc3BwLT5vcHMuc2V0dXBfYWQpIHsKLQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCWNvbnRp bnVlOwotCQkJfQotCQkJYWRfY2ZnLnByb3AgPSBBRF9JTlBVVDsKLQkJCWFkX2NmZy5od19jZmcg PSAmaHdfY2ZnOwotCQkJaHdfZHNwcC0+b3BzLnNldHVwX2FkKGh3X2RzcHAsICZhZF9jZmcpOwot CQkJYnJlYWs7Ci0JCWNhc2UgRFBVX0NQX0NSVENfRFNQUF9BRF9BU1NFUlRJVkVORVNTOgotCQkJ aWYgKCFod19kc3BwIHx8ICFod19kc3BwLT5vcHMuc2V0dXBfYWQpIHsKLQkJCQlyZXQgPSAtRUlO VkFMOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJYWRfY2ZnLnByb3AgPSBBRF9BU1NFUlRJVkU7 Ci0JCQlhZF9jZmcuaHdfY2ZnID0gJmh3X2NmZzsKLQkJCWh3X2RzcHAtPm9wcy5zZXR1cF9hZCho d19kc3BwLCAmYWRfY2ZnKTsKLQkJCWJyZWFrOwotCQljYXNlIERQVV9DUF9DUlRDX0RTUFBfQURf QkFDS0xJR0hUOgotCQkJaWYgKCFod19kc3BwIHx8ICFod19kc3BwLT5vcHMuc2V0dXBfYWQpIHsK LQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJYWRfY2ZnLnByb3Ag PSBBRF9CQUNLTElHSFQ7Ci0JCQlhZF9jZmcuaHdfY2ZnID0gJmh3X2NmZzsKLQkJCWh3X2RzcHAt Pm9wcy5zZXR1cF9hZChod19kc3BwLCAmYWRfY2ZnKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0Ogot CQkJcmV0ID0gLUVJTlZBTDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKHJldCkgewotCQlE Uk1fRVJST1IoImZhaWxlZCB0byAlcyBmZWF0dXJlICVkXG4iLAotCQkJKChmZWF0dXJlX2VuYWJs ZWQpID8gImVuYWJsZSIgOiAiZGlzYWJsZSIpLAotCQkJcHJvcF9ub2RlLT5mZWF0dXJlKTsKLQkJ cmV0dXJuOwotCX0KLQotCWlmIChmZWF0dXJlX2VuYWJsZWQpIHsKLQkJRFJNX0RFQlVHX0RSSVZF UigiQWRkIGZlYXR1cmUgdG8gYWN0aXZlIGxpc3QgJWRcbiIsCi0JCQkJIHByb3Bfbm9kZS0+cHJv cGVydHlfaWQpOwotCQlkcHVfY3BfdXBkYXRlX2xpc3QocHJvcF9ub2RlLCBkcHVfY3J0YywgZmFs c2UpOwotCX0gZWxzZSB7Ci0JCURSTV9ERUJVR19EUklWRVIoInJlbW92ZSBmZWF0dXJlIGZyb20g YWN0aXZlIGxpc3QgJWRcbiIsCi0JCQkgcHJvcF9ub2RlLT5wcm9wZXJ0eV9pZCk7Ci0JCWxpc3Rf ZGVsX2luaXQoJnByb3Bfbm9kZS0+YWN0aXZlX2xpc3QpOwotCX0KLQkvKiBQcm9ncmFtbWluZyBv ZiBmZWF0dXJlIGRvbmUgcmVtb3ZlIGZyb20gZGlydHkgbGlzdCAqLwotCWxpc3RfZGVsX2luaXQo JnByb3Bfbm9kZS0+ZGlydHlfbGlzdCk7Ci19Ci0KLXZvaWQgZHB1X2NwX2NydGNfYXBwbHlfcHJv cGVydGllcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCi17Ci0Jc3RydWN0IGRwdV9jcnRjICpkcHVf Y3J0YyA9IE5VTEw7Ci0JYm9vbCBzZXRfZHNwcF9mbHVzaCA9IGZhbHNlLCBzZXRfbG1fZmx1c2gg PSBmYWxzZTsKLQlzdHJ1Y3QgZHB1X2NwX25vZGUgKnByb3Bfbm9kZSA9IE5VTEwsICpuID0gTlVM TDsKLQlzdHJ1Y3QgZHB1X2h3X2N0bCAqY3RsOwotCXVpbnQzMl90IGZsdXNoX21hc2sgPSAwOwot CXUzMiBudW1fbWl4ZXJzID0gMCwgaSA9IDA7Ci0KLQlpZiAoIWNydGMgfHwgIWNydGMtPmRldikg ewotCQlEUk1fRVJST1IoImludmFsaWQgY3J0YyAlcEsgZGV2ICVwS1xuIiwgY3J0YywKLQkJCSAg KGNydGMgPyBjcnRjLT5kZXYgOiBOVUxMKSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlkcHVfY3J0YyA9 IHRvX2RwdV9jcnRjKGNydGMpOwotCWlmICghZHB1X2NydGMpIHsKLQkJRFJNX0VSUk9SKCJpbnZh bGlkIGRwdV9jcnRjICVwS1xuIiwgZHB1X2NydGMpOwotCQlyZXR1cm47Ci0JfQotCi0JbnVtX21p eGVycyA9IGRwdV9jcnRjLT5udW1fbWl4ZXJzOwotCWlmICghbnVtX21peGVycykgewotCQlEUk1f REVCVUdfRFJJVkVSKCJubyBtaXhlcnMgZm9yIHRoaXMgY3J0Y1xuIik7Ci0JCXJldHVybjsKLQl9 Ci0KLQkvKiBDaGVjayBpZiBkaXJ0eSBsaXN0cyBhcmUgZW1wdHkgYW5kIGFkIGZlYXR1cmVzIGFy ZSBkaXNhYmxlZCBmb3IKLQkgKiBlYXJseSByZXR1cm4uIElmIGFkIHByb3BlcnRpZXMgYXJlIGFj dGl2ZSB0aGVuIHdlIG5lZWQgdG8gaXNzdWUKLQkgKiBkc3BwIGZsdXNoLgotCSAqKi8KLQlpZiAo bGlzdF9lbXB0eSgmZHB1X2NydGMtPmRpcnR5X2xpc3QpICYmCi0JCWxpc3RfZW1wdHkoJmRwdV9j cnRjLT5hZF9kaXJ0eSkpIHsKLQkJaWYgKGxpc3RfZW1wdHkoJmRwdV9jcnRjLT5hZF9hY3RpdmUp KSB7Ci0JCQlEUk1fREVCVUdfRFJJVkVSKCJEaXJ0eSBsaXN0IGlzIGVtcHR5XG4iKTsKLQkJCXJl dHVybjsKLQkJfQotCQlkcHVfY3BfYWRfc2V0X3Byb3AoZHB1X2NydGMsIEFEX0lQQ19SRVNFVCk7 Ci0JCXNldF9kc3BwX2ZsdXNoID0gdHJ1ZTsKLQl9Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3Nh ZmUocHJvcF9ub2RlLCBuLCAmZHB1X2NydGMtPmRpcnR5X2xpc3QsCi0JCQkJZGlydHlfbGlzdCkg ewotCQlkcHVfY3BfY3J0Y19zZXRmZWF0dXJlKHByb3Bfbm9kZSwgZHB1X2NydGMpOwotCQkvKiBT ZXQgdGhlIGZsdXNoIGZsYWcgdG8gdHJ1ZSAqLwotCQlpZiAocHJvcF9ub2RlLT5pc19kc3BwX2Zl YXR1cmUpCi0JCQlzZXRfZHNwcF9mbHVzaCA9IHRydWU7Ci0JCWVsc2UKLQkJCXNldF9sbV9mbHVz aCA9IHRydWU7Ci0JfQotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHByb3Bfbm9kZSwgbiwg JmRwdV9jcnRjLT5hZF9kaXJ0eSwKLQkJCQlkaXJ0eV9saXN0KSB7Ci0JCXNldF9kc3BwX2ZsdXNo ID0gdHJ1ZTsKLQkJZHB1X2NwX2NydGNfc2V0ZmVhdHVyZShwcm9wX25vZGUsIGRwdV9jcnRjKTsK LQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX21peGVyczsgaSsrKSB7Ci0JCWN0bCA9IGRwdV9j cnRjLT5taXhlcnNbaV0uaHdfY3RsOwotCQlpZiAoIWN0bCkKLQkJCWNvbnRpbnVlOwotCQlpZiAo c2V0X2RzcHBfZmx1c2ggJiYgY3RsLT5vcHMuZ2V0X2JpdG1hc2tfZHNwcAotCQkJCSYmIGRwdV9j cnRjLT5taXhlcnNbaV0uaHdfZHNwcCkgewotCQkJY3RsLT5vcHMuZ2V0X2JpdG1hc2tfZHNwcChj dGwsCi0JCQkJCSZmbHVzaF9tYXNrLAotCQkJCQlkcHVfY3J0Yy0+bWl4ZXJzW2ldLmh3X2RzcHAt PmlkeCk7Ci0JCQljdGwtPm9wcy51cGRhdGVfcGVuZGluZ19mbHVzaChjdGwsIGZsdXNoX21hc2sp OwotCQl9Ci0JCWlmIChzZXRfbG1fZmx1c2ggJiYgY3RsLT5vcHMuZ2V0X2JpdG1hc2tfbWl4ZXIK LQkJCQkmJiBkcHVfY3J0Yy0+bWl4ZXJzW2ldLmh3X2xtKSB7Ci0JCQlmbHVzaF9tYXNrID0gY3Rs LT5vcHMuZ2V0X2JpdG1hc2tfbWl4ZXIoY3RsLAotCQkJCQlkcHVfY3J0Yy0+bWl4ZXJzW2ldLmh3 X2xtLT5pZHgpOwotCQkJY3RsLT5vcHMudXBkYXRlX3BlbmRpbmdfZmx1c2goY3RsLCBmbHVzaF9t YXNrKTsKLQkJfQotCX0KLX0KLQotdm9pZCBkcHVfY3BfY3J0Y19pbnN0YWxsX3Byb3BlcnRpZXMo c3RydWN0IGRybV9jcnRjICpjcnRjKQotewotCXN0cnVjdCBkcHVfa21zICprbXMgPSBOVUxMOwot CXN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGMgPSBOVUxMOwotCXN0cnVjdCBkcHVfbWRzc19jZmcg KmNhdGFsb2cgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgZmVhdHVyZXMgPSAwOwotCWludCBpID0g MDsKLQlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2OwotCi0JaWYgKCFjcnRjIHx8ICFjcnRj LT5kZXYgfHwgIWNydGMtPmRldi0+ZGV2X3ByaXZhdGUpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlk IGNydGMgJXBLIGRldiAlcEtcbiIsCi0JCSAgICAgICBjcnRjLCAoKGNydGMpID8gY3J0Yy0+ZGV2 IDogTlVMTCkpOwotCQlyZXR1cm47Ci0JfQotCi0JZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRj KTsKLQlpZiAoIWRwdV9jcnRjKSB7Ci0JCURSTV9FUlJPUigiZHB1X2NydGMgJXBLXG4iLCBkcHVf Y3J0Yyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlrbXMgPSBnZXRfa21zKGNydGMpOwotCWlmICgha21z IHx8ICFrbXMtPmNhdGFsb2cpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIGRwdSBrbXMgJXBLIGNh dGFsb2cgJXBLIGRwdV9jcnRjICVwS1xuIiwKLQkJIGttcywgKChrbXMpID8ga21zLT5jYXRhbG9n IDogTlVMTCksIGRwdV9jcnRjKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qKgotCSAqIEZ1bmN0aW9u IGNhbiBiZSBjYWxsZWQgZHVyaW5nIHRoZSBhdG9taWNfY2hlY2sgd2l0aCB0ZXN0X29ubHkgZmxh ZwotCSAqIGFuZCBhY3R1YWwgY29tbWl0LiBBbGxvY2F0ZSBwcm9wZXJ0aWVzIG9ubHkgaWYgZmVh dHVyZSBsaXN0IGlzCi0JICogZW1wdHkgZHVyaW5nIHRoZSBhdG9taWNfY2hlY2sgd2l0aCB0ZXN0 X29ubHkgZmxhZy4KLQkgKi8KLQlpZiAoIWxpc3RfZW1wdHkoJmRwdV9jcnRjLT5mZWF0dXJlX2xp c3QpKQotCQlyZXR1cm47Ci0KLQljYXRhbG9nID0ga21zLT5jYXRhbG9nOwotCXByaXYgPSBjcnRj LT5kZXYtPmRldl9wcml2YXRlOwotCS8qKgotCSAqIERTUFAvTE0gcHJvcGVydGllcyBhcmUgZ2xv YmFsIHRvIGFsbCB0aGUgQ1JUQ1MuCi0JICogUHJvcGVydGllcyBhcmUgY3JlYXRlZCBmb3IgZmly c3QgQ1JUQyBhbmQgcmUtdXNlZCBmb3IgbGF0ZXIKLQkgKiBjcnRjcy4KLQkgKi8KLQlpZiAoIXBy aXYtPmNwX3Byb3BlcnR5KSB7Ci0JCXByaXYtPmNwX3Byb3BlcnR5ID0ga3phbGxvYygoc2l6ZW9m KHByaXYtPmNwX3Byb3BlcnR5KSAqCi0JCQkJRFBVX0NQX0NSVENfTUFYX0ZFQVRVUkVTKSwgR0ZQ X0tFUk5FTCk7Ci0JCXNldHVwX2RzcHBfcHJvcF9pbnN0YWxsX2Z1bmNzKGRzcHBfcHJvcF9pbnN0 YWxsX2Z1bmMpOwotCQlzZXR1cF9sbV9wcm9wX2luc3RhbGxfZnVuY3MobG1fcHJvcF9pbnN0YWxs X2Z1bmMpOwotCX0KLQlpZiAoIXByaXYtPmNwX3Byb3BlcnR5KQotCQlyZXR1cm47Ci0KLQlpZiAo IWNhdGFsb2ctPmRzcHBfY291bnQpCi0JCWdvdG8gbG1fcHJvcGVydHk7Ci0KLQkvKiBDaGVjayBm b3IgYWxsIHRoZSBEU1BQIHByb3BlcnRpZXMgYW5kIGF0dGFjaCBpdCB0byBDUlRDICovCi0JZmVh dHVyZXMgPSBjYXRhbG9nLT5kc3BwWzBdLmZlYXR1cmVzOwotCWZvciAoaSA9IDA7IGkgPCBEUFVf RFNQUF9NQVg7IGkrKykgewotCQlpZiAoIXRlc3RfYml0KGksICZmZWF0dXJlcykpCi0JCQljb250 aW51ZTsKLQkJaWYgKGRzcHBfcHJvcF9pbnN0YWxsX2Z1bmNbaV0pCi0JCQlkc3BwX3Byb3BfaW5z dGFsbF9mdW5jW2ldKGNydGMpOwotCX0KLQotbG1fcHJvcGVydHk6Ci0JaWYgKCFjYXRhbG9nLT5t aXhlcl9jb3VudCkKLQkJcmV0dXJuOwotCi0JLyogQ2hlY2sgZm9yIGFsbCB0aGUgTE0gcHJvcGVy dGllcyBhbmQgYXR0YWNoIGl0IHRvIENSVEMgKi8KLQlmZWF0dXJlcyA9IGNhdGFsb2ctPm1peGVy WzBdLmZlYXR1cmVzOwotCWZvciAoaSA9IDA7IGkgPCBEUFVfTUlYRVJfTUFYOyBpKyspIHsKLQkJ aWYgKCF0ZXN0X2JpdChpLCAmZmVhdHVyZXMpKQotCQkJY29udGludWU7Ci0JCWlmIChsbV9wcm9w X2luc3RhbGxfZnVuY1tpXSkKLQkJCWxtX3Byb3BfaW5zdGFsbF9mdW5jW2ldKGNydGMpOwotCX0K LX0KLQotaW50IGRwdV9jcF9jcnRjX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2NydGMgKmNydGMs Ci0JCQkJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCi0JCQkJdWludDY0X3QgdmFsKQot ewotCXN0cnVjdCBkcHVfY3Bfbm9kZSAqcHJvcF9ub2RlID0gTlVMTDsKLQlzdHJ1Y3QgZHB1X2Ny dGMgKmRwdV9jcnRjID0gTlVMTDsKLQlpbnQgcmV0ID0gMCwgaSA9IDAsIGRzcHBfY250LCBsbV9j bnQ7Ci0JdTggZm91bmQgPSAwOwotCi0JaWYgKCFjcnRjIHx8ICFwcm9wZXJ0eSkgewotCQlEUk1f RVJST1IoImludmFsaWQgY3J0YyAlcEsgcHJvcGVydHkgJXBLXG4iLCBjcnRjLCBwcm9wZXJ0eSk7 Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7 Ci0JaWYgKCFkcHVfY3J0YykgewotCQlEUk1fRVJST1IoImludmFsaWQgZHB1X2NydGMgJXBLXG4i LCBkcHVfY3J0Yyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWxpc3RfZm9yX2VhY2hfZW50 cnkocHJvcF9ub2RlLCAmZHB1X2NydGMtPmZlYXR1cmVfbGlzdCwgZmVhdHVyZV9saXN0KSB7Ci0J CWlmIChwcm9wZXJ0eS0+YmFzZS5pZCA9PSBwcm9wX25vZGUtPnByb3BlcnR5X2lkKSB7Ci0JCQlm b3VuZCA9IDE7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmICghZm91bmQpCi0JCXJldHVybiAw OwotCS8qKgotCSAqIGRwdV9jcnRjIGlzIHZpcnR1YWwgZW5zdXJlIHRoYXQgaGFyZHdhcmUgaGFz IGJlZW4gYXR0YWNoZWQgdG8gdGhlCi0JICogY3J0Yy4gQ2hlY2sgTE0gYW5kIGRzcHAgY291bnRz IGJhc2VkIG9uIHdoZXRoZXIgZmVhdHVyZSBpcyBhCi0JICogZHNwcC9sbSBmZWF0dXJlLgotCSAq LwotCWlmICghZHB1X2NydGMtPm51bV9taXhlcnMgfHwKLQkgICAgZHB1X2NydGMtPm51bV9taXhl cnMgPiBBUlJBWV9TSVpFKGRwdV9jcnRjLT5taXhlcnMpKSB7Ci0JCURSTV9FUlJPUigiSW52YWxp ZCBtaXhlciBjb25maWcgYWN0IGNudCAlZCBtYXggY250ICV6ZFxuIiwKLQkJCWRwdV9jcnRjLT5u dW1fbWl4ZXJzLCBBUlJBWV9TSVpFKGRwdV9jcnRjLT5taXhlcnMpKTsKLQkJcmV0dXJuIC1FSU5W QUw7Ci0JfQotCi0JZHNwcF9jbnQgPSAwOwotCWxtX2NudCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8 IGRwdV9jcnRjLT5udW1fbWl4ZXJzOyBpKyspIHsKLQkJaWYgKGRwdV9jcnRjLT5taXhlcnNbaV0u aHdfZHNwcCkKLQkJCWRzcHBfY250Kys7Ci0JCWlmIChkcHVfY3J0Yy0+bWl4ZXJzW2ldLmh3X2xt KQotCQkJbG1fY250Kys7Ci0JfQotCi0JaWYgKHByb3Bfbm9kZS0+aXNfZHNwcF9mZWF0dXJlICYm IGRzcHBfY250IDwgZHB1X2NydGMtPm51bV9taXhlcnMpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlk IGRzcHAgY250ICVkIG1peGVyIGNudCAlZFxuIiwgZHNwcF9jbnQsCi0JCQlkcHVfY3J0Yy0+bnVt X21peGVycyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0gZWxzZSBpZiAobG1fY250IDwgZHB1X2Ny dGMtPm51bV9taXhlcnMpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIGxtIGNudCAlZCBtaXhlciBj bnQgJWRcbiIsIGxtX2NudCwKLQkJCWRwdV9jcnRjLT5udW1fbWl4ZXJzKTsKLQkJcmV0dXJuIC1F SU5WQUw7Ci0JfQotCi0JcmV0ID0gZHB1X2NwX2FkX3ZhbGlkYXRlX3Byb3AocHJvcF9ub2RlLCBk cHVfY3J0Yyk7Ci0JaWYgKHJldCkgewotCQlEUk1fRVJST1IoImFkIHByb3BlcnR5IHZhbGlkYXRp b24gZmFpbGVkIHJldCAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKiByZW1v dmUgdGhlIHByb3BlcnR5IGZyb20gZGlydHkgbGlzdCAqLwotCWxpc3RfZGVsX2luaXQoJnByb3Bf bm9kZS0+ZGlydHlfbGlzdCk7Ci0KLQlpZiAoIXZhbCkKLQkJcmV0ID0gZHB1X2NwX2Rpc2FibGVf Y3J0Y19wcm9wZXJ0eShjcnRjLCBwcm9wZXJ0eSwgcHJvcF9ub2RlKTsKLQllbHNlCi0JCXJldCA9 IGRwdV9jcF9lbmFibGVfY3J0Y19wcm9wZXJ0eShjcnRjLCBwcm9wZXJ0eSwKLQkJCQkJCSAgcHJv cF9ub2RlLCB2YWwpOwotCi0JaWYgKCFyZXQpIHsKLQkJLyogcmVtb3ZlIHRoZSBwcm9wZXJ0eSBm cm9tIGFjdGl2ZSBsaXN0ICovCi0JCWxpc3RfZGVsX2luaXQoJnByb3Bfbm9kZS0+YWN0aXZlX2xp c3QpOwotCQkvKiBNYXJrIHRoZSBmZWF0dXJlIGFzIGRpcnR5ICovCi0JCWRwdV9jcF91cGRhdGVf bGlzdChwcm9wX25vZGUsIGRwdV9jcnRjLCB0cnVlKTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQot aW50IGRwdV9jcF9jcnRjX2dldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCQkg ICAgIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LCB1aW50NjRfdCAqdmFsKQotewotCXN0 cnVjdCBkcHVfY3Bfbm9kZSAqcHJvcF9ub2RlID0gTlVMTDsKLQlzdHJ1Y3QgZHB1X2NydGMgKmRw dV9jcnRjID0gTlVMTDsKLQotCWlmICghY3J0YyB8fCAhcHJvcGVydHkgfHwgIXZhbCkgewotCQlE Uk1fRVJST1IoImludmFsaWQgY3J0YyAlcEsgcHJvcGVydHkgJXBLIHZhbCAlcEtcbiIsCi0JCQkg IGNydGMsIHByb3BlcnR5LCB2YWwpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlkcHVfY3J0 YyA9IHRvX2RwdV9jcnRjKGNydGMpOwotCWlmICghZHB1X2NydGMpIHsKLQkJRFJNX0VSUk9SKCJp bnZhbGlkIGRwdV9jcnRjICVwS1xuIiwgZHB1X2NydGMpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9 Ci0JLyogUmV0dXJuIDAgaWYgcHJvcGVydHkgaXMgbm90IHN1cHBvcnRlZCAqLwotCSp2YWwgPSAw OwotCWxpc3RfZm9yX2VhY2hfZW50cnkocHJvcF9ub2RlLCAmZHB1X2NydGMtPmZlYXR1cmVfbGlz dCwgZmVhdHVyZV9saXN0KSB7Ci0JCWlmIChwcm9wZXJ0eS0+YmFzZS5pZCA9PSBwcm9wX25vZGUt PnByb3BlcnR5X2lkKSB7Ci0JCQkqdmFsID0gcHJvcF9ub2RlLT5wcm9wX3ZhbDsKLQkJCWJyZWFr OwotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi12b2lkIGRwdV9jcF9jcnRjX2Rlc3Ryb3lfcHJv cGVydGllcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCi17Ci0Jc3RydWN0IGRwdV9jcnRjICpkcHVf Y3J0YyA9IE5VTEw7Ci0Jc3RydWN0IGRwdV9jcF9ub2RlICpwcm9wX25vZGUgPSBOVUxMLCAqbiA9 IE5VTEw7Ci0KLQlpZiAoIWNydGMpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIGNydGMgJXBLXG4i LCBjcnRjKTsKLQkJcmV0dXJuOwotCX0KLQotCWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7 Ci0JaWYgKCFkcHVfY3J0YykgewotCQlEUk1fRVJST1IoImludmFsaWQgZHB1X2NydGMgJXBLXG4i LCBkcHVfY3J0Yyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUo cHJvcF9ub2RlLCBuLCAmZHB1X2NydGMtPmZlYXR1cmVfbGlzdCwKLQkJCQkgZmVhdHVyZV9saXN0 KSB7Ci0JCWlmIChwcm9wX25vZGUtPnByb3BfZmxhZ3MgJiBEUk1fTU9ERV9QUk9QX0JMT0IKLQkJ ICAgICYmIHByb3Bfbm9kZS0+YmxvYl9wdHIpCi0JCQlkcm1fcHJvcGVydHlfYmxvYl9wdXQocHJv cF9ub2RlLT5ibG9iX3B0cik7Ci0KLQkJbGlzdF9kZWxfaW5pdCgmcHJvcF9ub2RlLT5hY3RpdmVf bGlzdCk7Ci0JCWxpc3RfZGVsX2luaXQoJnByb3Bfbm9kZS0+ZGlydHlfbGlzdCk7Ci0JCWxpc3Rf ZGVsX2luaXQoJnByb3Bfbm9kZS0+ZmVhdHVyZV9saXN0KTsKLQkJZHB1X2NwX2Rlc3Ryb3lfbG9j YWxfYmxvYihwcm9wX25vZGUpOwotCQlrZnJlZShwcm9wX25vZGUpOwotCX0KLQotCUlOSVRfTElT VF9IRUFEKCZkcHVfY3J0Yy0+YWN0aXZlX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZkcHVfY3J0 Yy0+ZGlydHlfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmRwdV9jcnRjLT5mZWF0dXJlX2xpc3Qp OwotfQotCi12b2lkIGRwdV9jcF9jcnRjX3N1c3BlbmQoc3RydWN0IGRybV9jcnRjICpjcnRjKQot ewotCXN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGMgPSBOVUxMOwotCXN0cnVjdCBkcHVfY3Bfbm9k ZSAqcHJvcF9ub2RlID0gTlVMTCwgKm4gPSBOVUxMOwotCi0JaWYgKCFjcnRjKSB7Ci0JCURSTV9F UlJPUigiY3J0YyAlcEtcbiIsIGNydGMpOwotCQlyZXR1cm47Ci0JfQotCWRwdV9jcnRjID0gdG9f ZHB1X2NydGMoY3J0Yyk7Ci0JaWYgKCFkcHVfY3J0YykgewotCQlEUk1fRVJST1IoImRwdV9jcnRj ICVwS1xuIiwgZHB1X2NydGMpOwotCQlyZXR1cm47Ci0JfQotCi0JbGlzdF9mb3JfZWFjaF9lbnRy eV9zYWZlKHByb3Bfbm9kZSwgbiwgJmRwdV9jcnRjLT5hY3RpdmVfbGlzdCwKLQkJCQkgYWN0aXZl X2xpc3QpIHsKLQkJZHB1X2NwX3VwZGF0ZV9saXN0KHByb3Bfbm9kZSwgZHB1X2NydGMsIHRydWUp OwotCQlsaXN0X2RlbF9pbml0KCZwcm9wX25vZGUtPmFjdGl2ZV9saXN0KTsKLQl9Ci0KLQlsaXN0 X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJvcF9ub2RlLCBuLCAmZHB1X2NydGMtPmFkX2FjdGl2ZSwK LQkJCQkgYWN0aXZlX2xpc3QpIHsKLQkJZHB1X2NwX3VwZGF0ZV9saXN0KHByb3Bfbm9kZSwgZHB1 X2NydGMsIHRydWUpOwotCQlsaXN0X2RlbF9pbml0KCZwcm9wX25vZGUtPmFjdGl2ZV9saXN0KTsK LQl9Ci19Ci0KLXZvaWQgZHB1X2NwX2NydGNfcmVzdW1lKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykK LXsKLQkvKiBwbGFjZWhvbGRlciBmb3Igb3BlcmF0aW9ucyBuZWVkZWQgZHVyaW5nIHJlc3VtZSAq LwotfQotCi1zdGF0aWMgdm9pZCBkc3BwX3BjY19pbnN0YWxsX3Byb3BlcnR5KHN0cnVjdCBkcm1f Y3J0YyAqY3J0YykKLXsKLQljaGFyIGZlYXR1cmVfbmFtZVsyNTZdOwotCXN0cnVjdCBkcHVfa21z ICprbXMgPSBOVUxMOwotCXN0cnVjdCBkcHVfbWRzc19jZmcgKmNhdGFsb2cgPSBOVUxMOwotCXUz MiB2ZXJzaW9uOwotCi0Ja21zID0gZ2V0X2ttcyhjcnRjKTsKLQljYXRhbG9nID0ga21zLT5jYXRh bG9nOwotCi0JdmVyc2lvbiA9IGNhdGFsb2ctPmRzcHBbMF0uc2Jsay0+cGNjLnZlcnNpb24gPj4g MTY7Ci0Jc25wcmludGYoZmVhdHVyZV9uYW1lLCBBUlJBWV9TSVpFKGZlYXR1cmVfbmFtZSksICIl cyVkIiwKLQkJIkRQVV9EU1BQX1BDQ19WIiwgdmVyc2lvbik7Ci0Jc3dpdGNoICh2ZXJzaW9uKSB7 Ci0JY2FzZSAxOgotCWNhc2UgNDoKLQkJZHB1X2NwX2NydGNfaW5zdGFsbF9ibG9iX3Byb3BlcnR5 KGNydGMsIGZlYXR1cmVfbmFtZSwKLQkJCURQVV9DUF9DUlRDX0RTUFBfUENDLCBzaXplb2Yoc3Ry dWN0IGRybV9tc21fcGNjKSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURSTV9FUlJPUigidmVy c2lvbiAlZCBub3Qgc3VwcG9ydGVkXG4iLCB2ZXJzaW9uKTsKLQkJYnJlYWs7Ci0JfQotfQotCi1z dGF0aWMgdm9pZCBkc3BwX2hzaWNfaW5zdGFsbF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpCi17Ci0JY2hhciBmZWF0dXJlX25hbWVbMjU2XTsKLQlzdHJ1Y3QgZHB1X2ttcyAqa21zID0g TlVMTDsKLQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpjYXRhbG9nID0gTlVMTDsKLQl1MzIgdmVyc2lv bjsKLQotCWttcyA9IGdldF9rbXMoY3J0Yyk7Ci0JY2F0YWxvZyA9IGttcy0+Y2F0YWxvZzsKLQl2 ZXJzaW9uID0gY2F0YWxvZy0+ZHNwcFswXS5zYmxrLT5oc2ljLnZlcnNpb24gPj4gMTY7Ci0Jc3dp dGNoICh2ZXJzaW9uKSB7Ci0JY2FzZSAxOgotCQlzbnByaW50ZihmZWF0dXJlX25hbWUsIEFSUkFZ X1NJWkUoZmVhdHVyZV9uYW1lKSwgIiVzJWQiLAotCQkJIkRQVV9EU1BQX0hVRV9WIiwgdmVyc2lv bik7Ci0JCWRwdV9jcF9jcnRjX2luc3RhbGxfcmFuZ2VfcHJvcGVydHkoY3J0YywgZmVhdHVyZV9u YW1lLAotCQkJRFBVX0NQX0NSVENfRFNQUF9IVUUsIDAsIFUzMl9NQVgsIDApOwotCQlicmVhazsK LQlkZWZhdWx0OgotCQlEUk1fRVJST1IoInZlcnNpb24gJWQgbm90IHN1cHBvcnRlZFxuIiwgdmVy c2lvbik7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHZvaWQgZHNwcF92bHV0X2luc3RhbGxf cHJvcGVydHkoc3RydWN0IGRybV9jcnRjICpjcnRjKQotewotCWNoYXIgZmVhdHVyZV9uYW1lWzI1 Nl07Ci0Jc3RydWN0IGRwdV9rbXMgKmttcyA9IE5VTEw7Ci0Jc3RydWN0IGRwdV9tZHNzX2NmZyAq Y2F0YWxvZyA9IE5VTEw7Ci0JdTMyIHZlcnNpb247Ci0KLQlrbXMgPSBnZXRfa21zKGNydGMpOwot CWNhdGFsb2cgPSBrbXMtPmNhdGFsb2c7Ci0JdmVyc2lvbiA9IGNhdGFsb2ctPmRzcHBbMF0uc2Js ay0+dmx1dC52ZXJzaW9uID4+IDE2OwotCXNucHJpbnRmKGZlYXR1cmVfbmFtZSwgQVJSQVlfU0la RShmZWF0dXJlX25hbWUpLCAiJXMlZCIsCi0JCSJEUFVfRFNQUF9WTFVUX1YiLCB2ZXJzaW9uKTsK LQlzd2l0Y2ggKHZlcnNpb24pIHsKLQljYXNlIDE6Ci0JCWRwdV9jcF9jcnRjX2luc3RhbGxfcmFu Z2VfcHJvcGVydHkoY3J0YywgZmVhdHVyZV9uYW1lLAotCQkJRFBVX0NQX0NSVENfRFNQUF9WTFVU LCAwLCBVNjRfTUFYLCAwKTsKLQkJZHB1X2NwX2NyZWF0ZV9sb2NhbF9ibG9iKGNydGMsCi0JCQlE UFVfQ1BfQ1JUQ19EU1BQX1ZMVVQsCi0JCQlzaXplb2Yoc3RydWN0IGRybV9tc21fcGFfdmx1dCkp OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEUk1fRVJST1IoInZlcnNpb24gJWQgbm90IHN1cHBv cnRlZFxuIiwgdmVyc2lvbik7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHZvaWQgZHNwcF9h ZF9pbnN0YWxsX3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKLXsKLQljaGFyIGZlYXR1 cmVfbmFtZVsyNTZdOwotCXN0cnVjdCBkcHVfa21zICprbXMgPSBOVUxMOwotCXN0cnVjdCBkcHVf bWRzc19jZmcgKmNhdGFsb2cgPSBOVUxMOwotCXUzMiB2ZXJzaW9uOwotCi0Ja21zID0gZ2V0X2tt cyhjcnRjKTsKLQljYXRhbG9nID0ga21zLT5jYXRhbG9nOwotCXZlcnNpb24gPSBjYXRhbG9nLT5k c3BwWzBdLnNibGstPmFkLnZlcnNpb24gPj4gMTY7Ci0Jc25wcmludGYoZmVhdHVyZV9uYW1lLCBB UlJBWV9TSVpFKGZlYXR1cmVfbmFtZSksICIlcyVkIiwKLQkJIkRQVV9EU1BQX0FEX1YiLCB2ZXJz aW9uKTsKLQlzd2l0Y2ggKHZlcnNpb24pIHsKLQljYXNlIDM6Ci0JCWRwdV9jcF9jcnRjX2luc3Rh bGxfaW1tdXRhYmxlX3Byb3BlcnR5KGNydGMsCi0JCQlmZWF0dXJlX25hbWUsIERQVV9DUF9DUlRD X0RTUFBfQUQpOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCWRwdV9jcF9jcnRjX2luc3RhbGxfaW1t dXRhYmxlX3Byb3BlcnR5KGNydGMsCi0JCQlmZWF0dXJlX25hbWUsIERQVV9DUF9DUlRDX0RTUFBf QUQpOwotCi0JCWRwdV9jcF9jcnRjX2luc3RhbGxfZW51bV9wcm9wZXJ0eShjcnRjLAotCQkJRFBV X0NQX0NSVENfRFNQUF9BRF9NT0RFLCBhZDRfbW9kZXMsCi0JCQlBUlJBWV9TSVpFKGFkNF9tb2Rl cyksICJEUFVfRFNQUF9BRF9WNF9NT0RFIik7Ci0KLQkJZHB1X2NwX2NydGNfaW5zdGFsbF9yYW5n ZV9wcm9wZXJ0eShjcnRjLCAiRFBVX0RTUFBfQURfVjRfSU5JVCIsCi0JCQlEUFVfQ1BfQ1JUQ19E U1BQX0FEX0lOSVQsIDAsIFU2NF9NQVgsIDApOwotCQlkcHVfY3BfY3JlYXRlX2xvY2FsX2Jsb2Io Y3J0YywgRFBVX0NQX0NSVENfRFNQUF9BRF9JTklULAotCQkJc2l6ZW9mKHN0cnVjdCBkcm1fbXNt X2FkNF9pbml0KSk7Ci0KLQkJZHB1X2NwX2NydGNfaW5zdGFsbF9yYW5nZV9wcm9wZXJ0eShjcnRj LCAiRFBVX0RTUFBfQURfVjRfQ0ZHIiwKLQkJCURQVV9DUF9DUlRDX0RTUFBfQURfQ0ZHLCAwLCBV NjRfTUFYLCAwKTsKLQkJZHB1X2NwX2NyZWF0ZV9sb2NhbF9ibG9iKGNydGMsIERQVV9DUF9DUlRD X0RTUFBfQURfQ0ZHLAotCQkJc2l6ZW9mKHN0cnVjdCBkcm1fbXNtX2FkNF9jZmcpKTsKLQkJZHB1 X2NwX2NydGNfaW5zdGFsbF9yYW5nZV9wcm9wZXJ0eShjcnRjLAotCQkJIkRQVV9EU1BQX0FEX1Y0 X0FTU0VSVElWRU5FU1MiLAotCQkJRFBVX0NQX0NSVENfRFNQUF9BRF9BU1NFUlRJVkVORVNTLCAw LCAoQklUKDgpIC0gMSksIDApOwotCQlkcHVfY3BfY3J0Y19pbnN0YWxsX3JhbmdlX3Byb3BlcnR5 KGNydGMsICJEUFVfRFNQUF9BRF9WNF9JTlBVVCIsCi0JCQlEUFVfQ1BfQ1JUQ19EU1BQX0FEX0lO UFVULCAwLCBVMTZfTUFYLCAwKTsKLQkJZHB1X2NwX2NydGNfaW5zdGFsbF9yYW5nZV9wcm9wZXJ0 eShjcnRjLAotCQkJCSJEUFVfRFNQUF9BRF9WNF9CQUNLTElHSFQiLAotCQkJRFBVX0NQX0NSVENf RFNQUF9BRF9CQUNLTElHSFQsIDAsIChCSVQoMTYpIC0gMSksCi0JCQkwKTsKLQkJYnJlYWs7Ci0J ZGVmYXVsdDoKLQkJRFJNX0VSUk9SKCJ2ZXJzaW9uICVkIG5vdCBzdXBwb3J0ZWRcbiIsIHZlcnNp b24pOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGxtX2djX2luc3RhbGxfcHJvcGVy dHkoc3RydWN0IGRybV9jcnRjICpjcnRjKQotewotCWNoYXIgZmVhdHVyZV9uYW1lWzI1Nl07Ci0J c3RydWN0IGRwdV9rbXMgKmttcyA9IE5VTEw7Ci0Jc3RydWN0IGRwdV9tZHNzX2NmZyAqY2F0YWxv ZyA9IE5VTEw7Ci0JdTMyIHZlcnNpb247Ci0KLQlrbXMgPSBnZXRfa21zKGNydGMpOwotCWNhdGFs b2cgPSBrbXMtPmNhdGFsb2c7Ci0JdmVyc2lvbiA9IGNhdGFsb2ctPm1peGVyWzBdLnNibGstPmdj LnZlcnNpb24gPj4gMTY7Ci0Jc25wcmludGYoZmVhdHVyZV9uYW1lLCBBUlJBWV9TSVpFKGZlYXR1 cmVfbmFtZSksICIlcyVkIiwKLQkJICJEUFVfTE1fR0NfViIsIHZlcnNpb24pOwotCXN3aXRjaCAo dmVyc2lvbikgewotCWNhc2UgMToKLQkJZHB1X2NwX2NydGNfaW5zdGFsbF9ibG9iX3Byb3BlcnR5 KGNydGMsIGZlYXR1cmVfbmFtZSwKLQkJCURQVV9DUF9DUlRDX0xNX0dDLCBzaXplb2Yoc3RydWN0 IGRybV9tc21fcGdjX2x1dCkpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEUk1fRVJST1IoInZl cnNpb24gJWQgbm90IHN1cHBvcnRlZFxuIiwgdmVyc2lvbik7Ci0JCWJyZWFrOwotCX0KLX0KLQot c3RhdGljIHZvaWQgZHNwcF9nYW11dF9pbnN0YWxsX3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0YyAq Y3J0YykKLXsKLQljaGFyIGZlYXR1cmVfbmFtZVsyNTZdOwotCXN0cnVjdCBkcHVfa21zICprbXMg PSBOVUxMOwotCXN0cnVjdCBkcHVfbWRzc19jZmcgKmNhdGFsb2cgPSBOVUxMOwotCXUzMiB2ZXJz aW9uOwotCi0Ja21zID0gZ2V0X2ttcyhjcnRjKTsKLQljYXRhbG9nID0ga21zLT5jYXRhbG9nOwot Ci0JdmVyc2lvbiA9IGNhdGFsb2ctPmRzcHBbMF0uc2Jsay0+Z2FtdXQudmVyc2lvbiA+PiAxNjsK LQlzbnByaW50ZihmZWF0dXJlX25hbWUsIEFSUkFZX1NJWkUoZmVhdHVyZV9uYW1lKSwgIiVzJWQi LAotCQkiRFBVX0RTUFBfR0FNVVRfViIsIHZlcnNpb24pOwotCXN3aXRjaCAodmVyc2lvbikgewot CWNhc2UgNDoKLQkJZHB1X2NwX2NydGNfaW5zdGFsbF9ibG9iX3Byb3BlcnR5KGNydGMsIGZlYXR1 cmVfbmFtZSwKLQkJCURQVV9DUF9DUlRDX0RTUFBfR0FNVVQsCi0JCQlzaXplb2Yoc3RydWN0IGRy bV9tc21fM2RfZ2FtdXQpKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJRFJNX0VSUk9SKCJ2ZXJz aW9uICVkIG5vdCBzdXBwb3J0ZWRcbiIsIHZlcnNpb24pOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0 YXRpYyB2b2lkIGRzcHBfZ2NfaW5zdGFsbF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2NydGMgKmNydGMp Ci17Ci0JY2hhciBmZWF0dXJlX25hbWVbMjU2XTsKLQlzdHJ1Y3QgZHB1X2ttcyAqa21zID0gTlVM TDsKLQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpjYXRhbG9nID0gTlVMTDsKLQl1MzIgdmVyc2lvbjsK LQotCWttcyA9IGdldF9rbXMoY3J0Yyk7Ci0JY2F0YWxvZyA9IGttcy0+Y2F0YWxvZzsKLQotCXZl cnNpb24gPSBjYXRhbG9nLT5kc3BwWzBdLnNibGstPmdjLnZlcnNpb24gPj4gMTY7Ci0Jc25wcmlu dGYoZmVhdHVyZV9uYW1lLCBBUlJBWV9TSVpFKGZlYXR1cmVfbmFtZSksICIlcyVkIiwKLQkJIkRQ VV9EU1BQX0dDX1YiLCB2ZXJzaW9uKTsKLQlzd2l0Y2ggKHZlcnNpb24pIHsKLQljYXNlIDE6Ci0J CWRwdV9jcF9jcnRjX2luc3RhbGxfYmxvYl9wcm9wZXJ0eShjcnRjLCBmZWF0dXJlX25hbWUsCi0J CQlEUFVfQ1BfQ1JUQ19EU1BQX0dDLCBzaXplb2Yoc3RydWN0IGRybV9tc21fcGdjX2x1dCkpOwot CQlicmVhazsKLQlkZWZhdWx0OgotCQlEUk1fRVJST1IoInZlcnNpb24gJWQgbm90IHN1cHBvcnRl ZFxuIiwgdmVyc2lvbik7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHZvaWQgZHNwcF9pZ2Nf aW5zdGFsbF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCi17Ci0JY2hhciBmZWF0dXJl X25hbWVbMjU2XTsKLQlzdHJ1Y3QgZHB1X2ttcyAqa21zID0gTlVMTDsKLQlzdHJ1Y3QgZHB1X21k c3NfY2ZnICpjYXRhbG9nID0gTlVMTDsKLQl1MzIgdmVyc2lvbjsKLQotCWttcyA9IGdldF9rbXMo Y3J0Yyk7Ci0JY2F0YWxvZyA9IGttcy0+Y2F0YWxvZzsKLQotCXZlcnNpb24gPSBjYXRhbG9nLT5k c3BwWzBdLnNibGstPmlnYy52ZXJzaW9uID4+IDE2OwotCXNucHJpbnRmKGZlYXR1cmVfbmFtZSwg QVJSQVlfU0laRShmZWF0dXJlX25hbWUpLCAiJXMlZCIsCi0JCSJEUFVfRFNQUF9JR0NfViIsIHZl cnNpb24pOwotCXN3aXRjaCAodmVyc2lvbikgewotCWNhc2UgMzoKLQkJZHB1X2NwX2NydGNfaW5z dGFsbF9ibG9iX3Byb3BlcnR5KGNydGMsIGZlYXR1cmVfbmFtZSwKLQkJCURQVV9DUF9DUlRDX0RT UFBfSUdDLCBzaXplb2Yoc3RydWN0IGRybV9tc21faWdjX2x1dCkpOwotCQlicmVhazsKLQlkZWZh dWx0OgotCQlEUk1fRVJST1IoInZlcnNpb24gJWQgbm90IHN1cHBvcnRlZFxuIiwgdmVyc2lvbik7 Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHZvaWQgZHB1X2NwX3VwZGF0ZV9saXN0KHN0cnVj dCBkcHVfY3Bfbm9kZSAqcHJvcF9ub2RlLAotCQlzdHJ1Y3QgZHB1X2NydGMgKmNydGMsIGJvb2wg ZGlydHlfbGlzdCkKLXsKLQlzd2l0Y2ggKHByb3Bfbm9kZS0+ZmVhdHVyZSkgewotCWNhc2UgRFBV X0NQX0NSVENfRFNQUF9BRF9NT0RFOgotCWNhc2UgRFBVX0NQX0NSVENfRFNQUF9BRF9JTklUOgot CWNhc2UgRFBVX0NQX0NSVENfRFNQUF9BRF9DRkc6Ci0JY2FzZSBEUFVfQ1BfQ1JUQ19EU1BQX0FE X0lOUFVUOgotCWNhc2UgRFBVX0NQX0NSVENfRFNQUF9BRF9BU1NFUlRJVkVORVNTOgotCWNhc2Ug RFBVX0NQX0NSVENfRFNQUF9BRF9CQUNLTElHSFQ6Ci0JCWlmIChkaXJ0eV9saXN0KQotCQkJbGlz dF9hZGRfdGFpbCgmcHJvcF9ub2RlLT5kaXJ0eV9saXN0LCAmY3J0Yy0+YWRfZGlydHkpOwotCQll bHNlCi0JCQlsaXN0X2FkZF90YWlsKCZwcm9wX25vZGUtPmFjdGl2ZV9saXN0LAotCQkJCQkmY3J0 Yy0+YWRfYWN0aXZlKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJLyogY29sb3IgcHJvY2Vzc2lu ZyBwcm9wZXJ0aWVzIGhhbmRsZSBoZXJlICovCi0JCWlmIChkaXJ0eV9saXN0KQotCQkJbGlzdF9h ZGRfdGFpbCgmcHJvcF9ub2RlLT5kaXJ0eV9saXN0LAotCQkJCQkmY3J0Yy0+ZGlydHlfbGlzdCk7 Ci0JCWVsc2UKLQkJCWxpc3RfYWRkX3RhaWwoJnByb3Bfbm9kZS0+YWN0aXZlX2xpc3QsCi0JCQkJ CSZjcnRjLT5hY3RpdmVfbGlzdCk7Ci0JCWJyZWFrOwotCX07Ci19Ci0KLXN0YXRpYyBpbnQgZHB1 X2NwX2FkX3ZhbGlkYXRlX3Byb3Aoc3RydWN0IGRwdV9jcF9ub2RlICpwcm9wX25vZGUsCi0JCXN0 cnVjdCBkcHVfY3J0YyAqY3J0YykKLXsKLQlpbnQgaSA9IDAsIHJldCA9IDA7Ci0JdTMyIGFkX3By b3A7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY3J0Yy0+bnVtX21peGVycyAmJiAhcmV0OyBpKyspIHsK LQkJaWYgKCFjcnRjLT5taXhlcnNbaV0uaHdfZHNwcCkgewotCQkJcmV0ID0gLUVJTlZBTDsKLQkJ CWNvbnRpbnVlOwotCQl9Ci0JCXN3aXRjaCAocHJvcF9ub2RlLT5mZWF0dXJlKSB7Ci0JCWNhc2Ug RFBVX0NQX0NSVENfRFNQUF9BRF9NT0RFOgotCQkJYWRfcHJvcCA9IEFEX01PREU7Ci0JCQlicmVh azsKLQkJY2FzZSBEUFVfQ1BfQ1JUQ19EU1BQX0FEX0lOSVQ6Ci0JCQlhZF9wcm9wID0gQURfSU5J VDsKLQkJCWJyZWFrOwotCQljYXNlIERQVV9DUF9DUlRDX0RTUFBfQURfQ0ZHOgotCQkJYWRfcHJv cCA9IEFEX0NGRzsKLQkJCWJyZWFrOwotCQljYXNlIERQVV9DUF9DUlRDX0RTUFBfQURfSU5QVVQ6 Ci0JCQlhZF9wcm9wID0gQURfSU5QVVQ7Ci0JCQlicmVhazsKLQkJY2FzZSBEUFVfQ1BfQ1JUQ19E U1BQX0FEX0FTU0VSVElWRU5FU1M6Ci0JCQlhZF9wcm9wID0gQURfQVNTRVJUSVZFOwotCQkJYnJl YWs7Ci0JCWNhc2UgRFBVX0NQX0NSVENfRFNQUF9BRF9CQUNLTElHSFQ6Ci0JCQlhZF9wcm9wID0g QURfQkFDS0xJR0hUOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQkvKiBOb3QgYW4gQUQgcHJv cGVydHkgKi8KLQkJCXJldHVybiAwOwotCQl9Ci0JCWlmICghY3J0Yy0+bWl4ZXJzW2ldLmh3X2Rz cHAtPm9wcy52YWxpZGF0ZV9hZCkKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCWVsc2UKLQkJCXJldCA9 IGNydGMtPm1peGVyc1tpXS5od19kc3BwLT5vcHMudmFsaWRhdGVfYWQoCi0JCQkJY3J0Yy0+bWl4 ZXJzW2ldLmh3X2RzcHAsICZhZF9wcm9wKTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGlj IHZvaWQgZHB1X2NwX2FkX2ludGVycnVwdF9jYih2b2lkICphcmcsIGludCBpcnFfaWR4KQotewot CXN0cnVjdCBkcHVfY3J0YyAqY3J0YyA9IGFyZzsKLQotCWRwdV9jcnRjX2V2ZW50X3F1ZXVlKCZj cnRjLT5iYXNlLCBkcHVfY3Bfbm90aWZ5X2FkX2V2ZW50LCBOVUxMKTsKLX0KLQotc3RhdGljIHZv aWQgZHB1X2NwX25vdGlmeV9hZF9ldmVudChzdHJ1Y3QgZHJtX2NydGMgKmNydGNfZHJtLCB2b2lk ICphcmcpCi17Ci0JdWludDMyX3QgYmwgPSAwOwotCXN0cnVjdCBkcHVfaHdfbWl4ZXIgKmh3X2xt ID0gTlVMTDsKLQlzdHJ1Y3QgZHB1X2h3X2RzcHAgKmh3X2RzcHAgPSBOVUxMOwotCXUzMiBudW1f bWl4ZXJzOwotCXN0cnVjdCBkcHVfY3J0YyAqY3J0YzsKLQlzdHJ1Y3QgZHJtX2V2ZW50IGV2ZW50 OwotCWludCBpOwotCi0JY3J0YyA9IHRvX2RwdV9jcnRjKGNydGNfZHJtKTsKLQludW1fbWl4ZXJz ID0gY3J0Yy0+bnVtX21peGVyczsKLQlpZiAoIW51bV9taXhlcnMpCi0JCXJldHVybjsKLQotCWZv ciAoaSA9IDA7IGkgPCBudW1fbWl4ZXJzOyBpKyspIHsKLQkJaHdfbG0gPSBjcnRjLT5taXhlcnNb aV0uaHdfbG07Ci0JCWh3X2RzcHAgPSBjcnRjLT5taXhlcnNbaV0uaHdfZHNwcDsKLQkJaWYgKCFo d19sbS0+Y2ZnLnJpZ2h0X21peGVyKQotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKCFod19kc3BwKQot CQlyZXR1cm47Ci0KLQlod19kc3BwLT5vcHMuYWRfcmVhZF9pbnRyX3Jlc3AoaHdfZHNwcCwgQUQ0 X0JBQ0tMSUdIVCwgJmJsKTsKLQlldmVudC5sZW5ndGggPSBzaXplb2YodTMyKTsKLQlldmVudC50 eXBlID0gRFJNX0VWRU5UX0FEX0JBQ0tMSUdIVDsKLQltc21fbW9kZV9vYmplY3RfZXZlbnRfbm90 aWZ5KCZjcnRjX2RybS0+YmFzZSwgY3J0Y19kcm0tPmRldiwKLQkJCSZldmVudCwgKHU4ICopJmJs KTsKLX0KLQotaW50IGRwdV9jcF9hZF9pbnRlcnJ1cHQoc3RydWN0IGRybV9jcnRjICpjcnRjX2Ry bSwgYm9vbCBlbiwKLQlzdHJ1Y3QgZHB1X2lycV9jYWxsYmFjayAqYWRfaXJxKQotewotCXN0cnVj dCBkcHVfa21zICprbXMgPSBOVUxMOwotCXUzMiBudW1fbWl4ZXJzOwotCXN0cnVjdCBkcHVfaHdf bWl4ZXIgKmh3X2xtOwotCXN0cnVjdCBkcHVfaHdfZHNwcCAqaHdfZHNwcCA9IE5VTEw7Ci0Jc3Ry dWN0IGRwdV9jcnRjICpjcnRjOwotCWludCBpOwotCWludCBpcnFfaWR4LCByZXQ7Ci0Jc3RydWN0 IGRwdV9jcF9ub2RlIHByb3Bfbm9kZTsKLQotCWlmICghY3J0Y19kcm0gfHwgIWFkX2lycSkgewot CQlEUk1fRVJST1IoImludmFsaWQgY3J0YyAlcEsgaXJxICVwS1xuIiwgY3J0Y19kcm0sIGFkX2ly cSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWNydGMgPSB0b19kcHVfY3J0YyhjcnRjX2Ry bSk7Ci0JaWYgKCFjcnRjKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBkcHVfY3J0YyAlcEtcbiIs IGNydGMpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlrbXMgPSBnZXRfa21zKGNydGNfZHJt KTsKLQludW1fbWl4ZXJzID0gY3J0Yy0+bnVtX21peGVyczsKLQotCW1lbXNldCgmcHJvcF9ub2Rl LCAwLCBzaXplb2YocHJvcF9ub2RlKSk7Ci0JcHJvcF9ub2RlLmZlYXR1cmUgPSBEUFVfQ1BfQ1JU Q19EU1BQX0FEX0JBQ0tMSUdIVDsKLQlyZXQgPSBkcHVfY3BfYWRfdmFsaWRhdGVfcHJvcCgmcHJv cF9ub2RlLCBjcnRjKTsKLQlpZiAocmV0KSB7Ci0JCURSTV9FUlJPUigiQWQgbm90IHN1cHBvcnRl ZCByZXQgJWRcbiIsIHJldCk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwg bnVtX21peGVyczsgaSsrKSB7Ci0JCWh3X2xtID0gY3J0Yy0+bWl4ZXJzW2ldLmh3X2xtOwotCQlo d19kc3BwID0gY3J0Yy0+bWl4ZXJzW2ldLmh3X2RzcHA7Ci0JCWlmICghaHdfbG0tPmNmZy5yaWdo dF9taXhlcikKLQkJCWJyZWFrOwotCX0KLQotCWlmICghaHdfZHNwcCkgewotCQlEUk1fRVJST1Io ImludmFsaWQgZHNwcFxuIik7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0K LQlpcnFfaWR4ID0gZHB1X2NvcmVfaXJxX2lkeF9sb29rdXAoa21zLCBEUFVfSVJRX1RZUEVfQUQ0 X0JMX0RPTkUsCi0JCQlod19kc3BwLT5pZHgpOwotCWlmIChpcnFfaWR4IDwgMCkgewotCQlEUk1f RVJST1IoImZhaWxlZCB0byBnZXQgdGhlIGlycSBpZHggcmV0ICVkXG4iLCBpcnFfaWR4KTsKLQkJ cmV0ID0gaXJxX2lkeDsKLQkJZ290byBleGl0OwotCX0KLQotCWlmICghZW4pIHsKLQkJZHB1X2Nv cmVfaXJxX2Rpc2FibGUoa21zLCAmaXJxX2lkeCwgMSk7Ci0JCWRwdV9jb3JlX2lycV91bnJlZ2lz dGVyX2NhbGxiYWNrKGttcywgaXJxX2lkeCwgYWRfaXJxKTsKLQkJcmV0ID0gMDsKLQkJZ290byBl eGl0OwotCX0KLQotCWFkX2lycS0+YXJnID0gY3J0YzsKLQlhZF9pcnEtPmZ1bmMgPSBkcHVfY3Bf YWRfaW50ZXJydXB0X2NiOwotCXJldCA9IGRwdV9jb3JlX2lycV9yZWdpc3Rlcl9jYWxsYmFjayhr bXMsIGlycV9pZHgsIGFkX2lycSk7Ci0JaWYgKHJldCkgewotCQlEUk1fRVJST1IoImZhaWxlZCB0 byByZWdpc3RlciB0aGUgY2FsbGJhY2sgcmV0ICVkXG4iLCByZXQpOwotCQlnb3RvIGV4aXQ7Ci0J fQotCXJldCA9IGRwdV9jb3JlX2lycV9lbmFibGUoa21zLCAmaXJxX2lkeCwgMSk7Ci0JaWYgKHJl dCkgewotCQlEUk1fRVJST1IoImZhaWxlZCB0byBlbmFibGUgaXJxIHJldCAlZFxuIiwgcmV0KTsK LQkJZHB1X2NvcmVfaXJxX3VucmVnaXN0ZXJfY2FsbGJhY2soa21zLCBpcnFfaWR4LCBhZF9pcnEp OwotCX0KLWV4aXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgZHB1X2NwX2FkX3Nl dF9wcm9wKHN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGMsCi0JCWVudW0gYWRfcHJvcGVydHkgYWRf cHJvcCkKLXsKLQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyBhZF9jZmc7Ci0Jc3RydWN0IGRwdV9od19j cF9jZmcgaHdfY2ZnOwotCXN0cnVjdCBkcHVfaHdfZHNwcCAqaHdfZHNwcCA9IE5VTEw7Ci0Jc3Ry dWN0IGRwdV9od19taXhlciAqaHdfbG0gPSBOVUxMOwotCXUzMiBudW1fbWl4ZXJzID0gZHB1X2Ny dGMtPm51bV9taXhlcnM7Ci0JaW50IGkgPSAwLCByZXQgPSAwOwotCi0JaHdfY2ZnLm51bV9vZl9t aXhlcnMgPSBkcHVfY3J0Yy0+bnVtX21peGVyczsKLQlod19jZmcuZGlzcGxheWggPSBkcHVfY3J0 Yy0+YmFzZS5tb2RlLmhkaXNwbGF5OwotCWh3X2NmZy5kaXNwbGF5diA9IGRwdV9jcnRjLT5iYXNl Lm1vZGUudmRpc3BsYXk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX21peGVycyAmJiAhcmV0OyBp KyspIHsKLQkJaHdfbG0gPSBkcHVfY3J0Yy0+bWl4ZXJzW2ldLmh3X2xtOwotCQlod19kc3BwID0g ZHB1X2NydGMtPm1peGVyc1tpXS5od19kc3BwOwotCQlpZiAoIWh3X2xtIHx8ICFod19kc3BwIHx8 ICFod19kc3BwLT5vcHMudmFsaWRhdGVfYWQgfHwKLQkJCQkhaHdfZHNwcC0+b3BzLnNldHVwX2Fk KSB7Ci0JCQlyZXQgPSAtRUlOVkFMOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlod19jZmcubWl4 ZXJfaW5mbyA9IGh3X2xtOwotCQlhZF9jZmcucHJvcCA9IGFkX3Byb3A7Ci0JCWFkX2NmZy5od19j ZmcgPSAmaHdfY2ZnOwotCQlyZXQgPSBod19kc3BwLT5vcHMudmFsaWRhdGVfYWQoaHdfZHNwcCwg KHUzMiAqKSZhZF9wcm9wKTsKLQkJaWYgKCFyZXQpCi0JCQlod19kc3BwLT5vcHMuc2V0dXBfYWQo aHdfZHNwcCwgJmFkX2NmZyk7Ci0JfQotfQotCi12b2lkIGRwdV9jcF9jcnRjX3ByZV9pcGMoc3Ry dWN0IGRybV9jcnRjICpkcm1fY3J0YykKLXsKLQlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOwot Ci0JZHB1X2NydGMgPSB0b19kcHVfY3J0Yyhkcm1fY3J0Yyk7Ci0JaWYgKCFkcHVfY3J0Yykgewot CQlEUk1fRVJST1IoImludmFsaWQgZHB1X2NydGMgJXBLXG4iLCBkcHVfY3J0Yyk7Ci0JCXJldHVy bjsKLQl9Ci0KLQlkcHVfY3BfYWRfc2V0X3Byb3AoZHB1X2NydGMsIEFEX0lQQ19TVVNQRU5EKTsK LX0KLQotdm9pZCBkcHVfY3BfY3J0Y19wb3N0X2lwYyhzdHJ1Y3QgZHJtX2NydGMgKmRybV9jcnRj KQotewotCXN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGM7Ci0KLQlkcHVfY3J0YyA9IHRvX2RwdV9j cnRjKGRybV9jcnRjKTsKLQlpZiAoIWRwdV9jcnRjKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBk cHVfY3J0YyAlcEtcbiIsIGRwdV9jcnRjKTsKLQkJcmV0dXJuOwotCX0KLQotCWRwdV9jcF9hZF9z ZXRfcHJvcChkcHVfY3J0YywgQURfSVBDX1JFU1VNRSk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29sb3JfcHJvY2Vzc2luZy5oIGIvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NvbG9yX3Byb2Nlc3NpbmcuaApkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMGZhNTQ2Yy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfY29sb3JfcHJvY2Vzc2luZy5oCisrKyAvZGV2L251bGwKQEAgLTEs MTIwICswLDAgQEAKLS8qIENvcHlyaWdodCAoYykgMjAxNi0yMDE4LCBUaGUgTGludXggRm91bmRh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIg YW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqLwotCi0jaWZuZGVm IF9EUFVfQ09MT1JfUFJPQ0VTU0lOR19ICi0jZGVmaW5lIF9EUFVfQ09MT1JfUFJPQ0VTU0lOR19I Ci0jaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Ci0KLXN0cnVjdCBkcHVfaXJxX2NhbGxiYWNrOwot Ci0vKgotICogUEEgTUVNT1JZIENPTE9SIHR5cGVzCi0gKiBATUVNQ09MT1JfU0tJTiAgICAgICAg ICBTa2luIG1lbW9yeSBjb2xvciB0eXBlCi0gKiBATUVNQ09MT1JfU0tZICAgICAgICAgICBTa3kg bWVtb3J5IGNvbG9yIHR5cGUKLSAqIEBNRU1DT0xPUl9GT0xJQUdFICAgICAgIEZvbGlhZ2UgbWVt b3J5IGNvbG9yIHR5cGUKLSAqLwotZW51bSBkcHVfbWVtY29sb3JfdHlwZSB7Ci0JTUVNQ09MT1Jf U0tJTiA9IDAsCi0JTUVNQ09MT1JfU0tZLAotCU1FTUNPTE9SX0ZPTElBR0UKLX07Ci0KLS8qKgot ICogZHB1X2NwX2NydGNfaW5pdCgpOiBJbml0aWFsaXplIGNvbG9yIHByb2Nlc3NpbmcgbGlzdHMg Zm9yIGEgY3J0Yy4KLSAqICAgICAgICAgICAgICAgICAgICAgU2hvdWxkIGJlIGNhbGxlZCBkdXJp bmcgY3J0YyBpbml0aWFsaXphdGlvbi4KLSAqIEBjcnRjOiAgUG9pbnRlciB0byBkcHVfY3J0Yy4K LSAqLwotdm9pZCBkcHVfY3BfY3J0Y19pbml0KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Ci0KLS8q KgotICogZHB1X2NwX2NydGNfaW5zdGFsbF9wcm9wZXJ0aWVzKCk6IEluc3RhbGxzIHRoZSBjb2xv ciBwcm9jZXNzaW5nCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGll cyBmb3IgYSBjcnRjLgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3VsZCBi ZSBjYWxsZWQgZHVyaW5nIGNydGMgaW5pdGlhbGl6YXRpb24uCi0gKiBAY3J0YzogIFBvaW50ZXIg dG8gY3J0Yy4KLSAqLwotdm9pZCBkcHVfY3BfY3J0Y19pbnN0YWxsX3Byb3BlcnRpZXMoc3RydWN0 IGRybV9jcnRjICpjcnRjKTsKLQotLyoqCi0gKiBkcHVfY3BfY3J0Y19kZXN0cm95X3Byb3BlcnRp ZXM6IERlc3Ryb3lzIGNvbG9yIHByb2Nlc3NpbmcKLSAqICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzIGZvciBhIGNydGMuCi0gKiBzaG91bGQgYmUg Y2FsbGVkIGR1cmluZyBjcnRjIGRlLWluaXRpYWxpemF0aW9uLgotICogQGNydGM6ICBQb2ludGVy IHRvIGNydGMuCi0gKi8KLXZvaWQgZHB1X2NwX2NydGNfZGVzdHJveV9wcm9wZXJ0aWVzKHN0cnVj dCBkcm1fY3J0YyAqY3J0Yyk7Ci0KLS8qKgotICogZHB1X2NwX2NydGNfc2V0X3Byb3BlcnR5OiBT ZXQgYSBjb2xvciBwcm9jZXNzaW5nIHByb3BlcnR5Ci0gKiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZm9yIGEgY3J0Yy4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBTaG91bGQgYmUgZHVyaW5nIGF0b21pYyBzZXQgcHJvcGVydHkuCi0gKiBAY3J0 YzogUG9pbnRlciB0byBjcnRjLgotICogQHByb3BlcnR5OiBQcm9wZXJ0eSB0aGF0IG5lZWRzIHRv IGVuYWJsZWQvZGlzYWJsZWQuCi0gKiBAdmFsOiBWYWx1ZSBvZiBwcm9wZXJ0eS4KLSAqLwotaW50 IGRwdV9jcF9jcnRjX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCQkJc3Ry dWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksIHVpbnQ2NF90IHZhbCk7Ci0KLS8qKgotICogZHB1 X2NwX2NydGNfYXBwbHlfcHJvcGVydGllczogRW5hYmxlL2Rpc2FibGUgcHJvcGVydGllcwotICog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGEgY3J0Yy4KLSAqICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFNob3VsZCBiZSBjYWxsZWQgZHVyaW5nIGF0b21pYyBjb21taXQg Y2FsbC4KLSAqIEBjcnRjOiBQb2ludGVyIHRvIGNydGMuCi0gKi8KLXZvaWQgZHB1X2NwX2NydGNf YXBwbHlfcHJvcGVydGllcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwotCi0vKioKLSAqIGRwdV9j cF9jcnRjX2dldF9wcm9wZXJ0eTogR2V0IHZhbHVlIG9mIGNvbG9yIHByb2Nlc3NpbmcgcHJvcGVy dHkKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYSBjcnRjLgot ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3VsZCBiZSBkdXJpbmcg YXRvbWljIGdldCBwcm9wZXJ0eS4KLSAqIEBjcnRjOiBQb2ludGVyIHRvIGNydGMuCi0gKiBAcHJv cGVydHk6IFByb3BlcnR5IHRoYXQgbmVlZHMgdG8gZW5hYmxlZC9kaXNhYmxlZC4KLSAqIEB2YWw6 IFZhbHVlIG9mIHByb3BlcnR5LgotICoKLSAqLwotaW50IGRwdV9jcF9jcnRjX2dldF9wcm9wZXJ0 eShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCQkJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVy dHksIHVpbnQ2NF90ICp2YWwpOwotCi0vKioKLSAqIGRwdV9jcF9jcnRjX3N1c3BlbmQ6IFN1c3Bl bmQgdGhlIGNydGMgZmVhdHVyZXMKLSAqIEBjcnRjOiBQb2ludGVyIHRvIGNydGMuCi0gKi8KLXZv aWQgZHB1X2NwX2NydGNfc3VzcGVuZChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwotCi0vKioKLSAq IGRwdV9jcF9jcnRjX3Jlc3VtZTogUmVzdW1lIHRoZSBjcnRjIGZlYXR1cmVzCi0gKiBAY3J0Yzog UG9pbnRlciB0byBjcnRjLgotICovCi12b2lkIGRwdV9jcF9jcnRjX3Jlc3VtZShzdHJ1Y3QgZHJt X2NydGMgKmNydGMpOwotCi0vKioKLSAqIGRwdV9jcF9hZF9pbnRlcnJ1cHQ6IEFwaSB0byBlbmFi bGUvZGlzYWJsZSBhZCBpbnRlcnJ1cHQKLSAqIEBjcnRjOiBQb2ludGVyIHRvIGNydGMuCi0gKiBA ZW46IFZhcmlhYmxlIHRvIGVuYWJsZS9kaXNhYmxlIGludGVycnVwdC4KLSAqIEBpcnE6IFBvaW50 ZXIgdG8gaXJxIGNhbGxiYWNrCi0gKi8KLWludCBkcHVfY3BfYWRfaW50ZXJydXB0KHN0cnVjdCBk cm1fY3J0YyAqY3J0YywgYm9vbCBlbiwKLQkJc3RydWN0IGRwdV9pcnFfY2FsbGJhY2sgKmlycSk7 Ci0KLS8qKgotICogZHB1X2NwX2NydGNfcHJlX2lwYzogSGFuZGxlIGNvbG9yIHByb2Nlc3Npbmcg ZmVhdHVyZXMKLSAqICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSBlbnRlcmluZyBJUEMKLSAq IEBjcnRjOiBQb2ludGVyIHRvIGNydGMuCi0gKi8KLXZvaWQgZHB1X2NwX2NydGNfcHJlX2lwYyhz dHJ1Y3QgZHJtX2NydGMgKmNydGMpOwotCi0vKioKLSAqIGRwdV9jcF9jcnRjX3Bvc3RfaXBjOiBI YW5kbGUgY29sb3IgcHJvY2Vzc2luZyBmZWF0dXJlcwotICogICAgICAgICAgICAgICAgICAgICAg IGFmdGVyIGV4aXRpbmcgSVBDCi0gKiBAY3J0YzogUG9pbnRlciB0byBjcnRjLgotICovCi12b2lk IGRwdV9jcF9jcnRjX3Bvc3RfaXBjKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Ci0jZW5kaWYgLypf RFBVX0NPTE9SX1BST0NFU1NJTkdfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9jcnRjLmMKaW5kZXggNDg5MjBiMDUuLjI0YmY5YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2NydGMuYwpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3Nv cnQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgva3RpbWUu aD4KLSNpbmNsdWRlIDx1YXBpL2RybS9kcHVfZHJtLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9tb2Rl Lmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hl bHBlci5oPgpAQCAtMzEsMTMgKzMwLDE4IEBACiAjaW5jbHVkZSAiZHB1X2h3X2N0bC5oIgogI2lu Y2x1ZGUgImRwdV9jcnRjLmgiCiAjaW5jbHVkZSAiZHB1X3BsYW5lLmgiCi0jaW5jbHVkZSAiZHB1 X2NvbG9yX3Byb2Nlc3NpbmcuaCIKICNpbmNsdWRlICJkcHVfZW5jb2Rlci5oIgogI2luY2x1ZGUg ImRwdV92YmlmLmgiCiAjaW5jbHVkZSAiZHB1X3Bvd2VyX2hhbmRsZS5oIgogI2luY2x1ZGUgImRw dV9jb3JlX3BlcmYuaCIKICNpbmNsdWRlICJkcHVfdHJhY2UuaCIKIAorI2RlZmluZSBEUFVfRFJN X0JMRU5EX09QX05PVF9ERUZJTkVEICAgIDAKKyNkZWZpbmUgRFBVX0RSTV9CTEVORF9PUF9PUEFR VUUgICAgICAgICAxCisjZGVmaW5lIERQVV9EUk1fQkxFTkRfT1BfUFJFTVVMVElQTElFRCAgMgor I2RlZmluZSBEUFVfRFJNX0JMRU5EX09QX0NPVkVSQUdFICAgICAgIDMKKyNkZWZpbmUgRFBVX0RS TV9CTEVORF9PUF9NQVggICAgICAgICAgICA0CisKIC8qIGxheWVyIG1peGVyIGluZGV4IG9uIGRw dV9jcnRjICovCiAjZGVmaW5lIExFRlRfTUlYRVIgMAogI2RlZmluZSBSSUdIVF9NSVhFUiAxCkBA IC01OTAsNyArNTk0LDYgQEAgc3RhdGljIHZvaWQgZHB1X2NydGNfZGVzdHJveShzdHJ1Y3QgZHJt X2NydGMgKmNydGMpCiAJaWYgKGRwdV9jcnRjLT5ibG9iX2luZm8pCiAJCWRybV9wcm9wZXJ0eV9i bG9iX3B1dChkcHVfY3J0Yy0+YmxvYl9pbmZvKTsKIAltc21fcHJvcGVydHlfZGVzdHJveSgmZHB1 X2NydGMtPnByb3BlcnR5X2luZm8pOwotCWRwdV9jcF9jcnRjX2Rlc3Ryb3lfcHJvcGVydGllcyhj cnRjKTsKIAlfZHB1X2NydGNfZGVzdHJveV9kZXN0X3NjYWxlcihkcHVfY3J0Yyk7CiAKIAlfZHB1 X2NydGNfZGVpbml0X2V2ZW50cyhkcHVfY3J0Yyk7CkBAIC02MTcsNjcgKzYyMCwxNCBAQCBzdGF0 aWMgYm9vbCBkcHVfY3J0Y19tb2RlX2ZpeHVwKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIH0KIAog c3RhdGljIHZvaWQgX2RwdV9jcnRjX3NldHVwX2JsZW5kX2NmZyhzdHJ1Y3QgZHB1X2NydGNfbWl4 ZXIgKm1peGVyLAotCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKnBzdGF0ZSwgc3RydWN0IGRwdV9m b3JtYXQgKmZvcm1hdCkKKwkJc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlKQogewotCXVp bnQzMl90IGJsZW5kX29wLCBmZ19hbHBoYSwgYmdfYWxwaGE7Ci0JdWludDMyX3QgYmxlbmRfdHlw ZTsKIAlzdHJ1Y3QgZHB1X2h3X21peGVyICpsbSA9IG1peGVyLT5od19sbTsKIAogCS8qIGRlZmF1 bHQgdG8gb3BhcXVlIGJsZW5kaW5nICovCi0JZmdfYWxwaGEgPSBkcHVfcGxhbmVfZ2V0X3Byb3Bl cnR5KHBzdGF0ZSwgUExBTkVfUFJPUF9BTFBIQSk7Ci0JYmdfYWxwaGEgPSAweEZGIC0gZmdfYWxw aGE7Ci0JYmxlbmRfb3AgPSBEUFVfQkxFTkRfRkdfQUxQSEFfRkdfQ09OU1QgfCBEUFVfQkxFTkRf QkdfQUxQSEFfQkdfQ09OU1Q7Ci0JYmxlbmRfdHlwZSA9IGRwdV9wbGFuZV9nZXRfcHJvcGVydHko cHN0YXRlLCBQTEFORV9QUk9QX0JMRU5EX09QKTsKLQotCURQVV9ERUJVRygiYmxlbmQgdHlwZTow eCV4IGJsZW5kIGFscGhhOjB4JXhcbiIsIGJsZW5kX3R5cGUsIGZnX2FscGhhKTsKLQotCXN3aXRj aCAoYmxlbmRfdHlwZSkgewotCi0JY2FzZSBEUFVfRFJNX0JMRU5EX09QX09QQVFVRToKLQkJYmxl bmRfb3AgPSBEUFVfQkxFTkRfRkdfQUxQSEFfRkdfQ09OU1QgfAotCQkJRFBVX0JMRU5EX0JHX0FM UEhBX0JHX0NPTlNUOwotCQlicmVhazsKLQotCWNhc2UgRFBVX0RSTV9CTEVORF9PUF9QUkVNVUxU SVBMSUVEOgotCQlpZiAoZm9ybWF0LT5hbHBoYV9lbmFibGUpIHsKLQkJCWJsZW5kX29wID0gRFBV X0JMRU5EX0ZHX0FMUEhBX0ZHX0NPTlNUIHwKLQkJCQlEUFVfQkxFTkRfQkdfQUxQSEFfRkdfUElY RUw7Ci0JCQlpZiAoZmdfYWxwaGEgIT0gMHhmZikgewotCQkJCWJnX2FscGhhID0gZmdfYWxwaGE7 Ci0JCQkJYmxlbmRfb3AgfD0gRFBVX0JMRU5EX0JHX01PRF9BTFBIQSB8Ci0JCQkJCURQVV9CTEVO RF9CR19JTlZfTU9EX0FMUEhBOwotCQkJfSBlbHNlIHsKLQkJCQlibGVuZF9vcCB8PSBEUFVfQkxF TkRfQkdfSU5WX0FMUEhBOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBEUFVfRFJNX0JM RU5EX09QX0NPVkVSQUdFOgotCQlpZiAoZm9ybWF0LT5hbHBoYV9lbmFibGUpIHsKLQkJCWJsZW5k X29wID0gRFBVX0JMRU5EX0ZHX0FMUEhBX0ZHX1BJWEVMIHwKLQkJCQlEUFVfQkxFTkRfQkdfQUxQ SEFfRkdfUElYRUw7Ci0JCQlpZiAoZmdfYWxwaGEgIT0gMHhmZikgewotCQkJCWJnX2FscGhhID0g ZmdfYWxwaGE7Ci0JCQkJYmxlbmRfb3AgfD0gRFBVX0JMRU5EX0ZHX01PRF9BTFBIQSB8Ci0JCQkJ CURQVV9CTEVORF9GR19JTlZfTU9EX0FMUEhBIHwKLQkJCQkJRFBVX0JMRU5EX0JHX01PRF9BTFBI QSB8Ci0JCQkJCURQVV9CTEVORF9CR19JTlZfTU9EX0FMUEhBOwotCQkJfSBlbHNlIHsKLQkJCQli bGVuZF9vcCB8PSBEUFVfQkxFTkRfQkdfSU5WX0FMUEhBOwotCQkJfQotCQl9Ci0JCWJyZWFrOwot CWRlZmF1bHQ6Ci0JCS8qIGRvIG5vdGhpbmcgKi8KLQkJYnJlYWs7Ci0JfQotCi0JbG0tPm9wcy5z ZXR1cF9ibGVuZF9jb25maWcobG0sIHBzdGF0ZS0+c3RhZ2UsIGZnX2FscGhhLAotCQkJCQkJYmdf YWxwaGEsIGJsZW5kX29wKTsKLQlEUFVfREVCVUcoCi0JCSJmb3JtYXQ6ICU0LjRzLCBhbHBoYV9l bmFibGUgJXUgZmcgYWxwaGE6MHgleCBiZyBhbHBoYToweCV4IGJsZW5kX29wOjB4JXhcbiIsCi0J CShjaGFyICopICZmb3JtYXQtPmJhc2UucGl4ZWxfZm9ybWF0LAotCQlmb3JtYXQtPmFscGhhX2Vu YWJsZSwgZmdfYWxwaGEsIGJnX2FscGhhLCBibGVuZF9vcCk7CisJbG0tPm9wcy5zZXR1cF9ibGVu ZF9jb25maWcobG0sIHBzdGF0ZS0+c3RhZ2UsIDBYRkYsIDAsCisJCQkJRFBVX0JMRU5EX0ZHX0FM UEhBX0ZHX0NPTlNUIHwKKwkJCQlEUFVfQkxFTkRfQkdfQUxQSEFfQkdfQ09OU1QpOwogfQogCiBz dGF0aWMgdm9pZCBfZHB1X2NydGNfc2V0dXBfZGltX2xheWVyX2NmZyhzdHJ1Y3QgZHJtX2NydGMg KmNydGMsCkBAIC04NTIsOCArODAyLDggQEAgc3RhdGljIHZvaWQgX2RwdV9jcnRjX2JsZW5kX3Nl dHVwX21peGVyKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAogCQkvKiBibGVuZCBjb25maWcgdXBk YXRlICovCiAJCWZvciAobG1faWR4ID0gMDsgbG1faWR4IDwgZHB1X2NydGMtPm51bV9taXhlcnM7 IGxtX2lkeCsrKSB7Ci0JCQlfZHB1X2NydGNfc2V0dXBfYmxlbmRfY2ZnKG1peGVyICsgbG1faWR4 LCBwc3RhdGUsCi0JCQkJCQkJCWZvcm1hdCk7CisJCQlfZHB1X2NydGNfc2V0dXBfYmxlbmRfY2Zn KG1peGVyICsgbG1faWR4LCBwc3RhdGUpOworCiAJCQltaXhlcltsbV9pZHhdLmZsdXNoX21hc2sg fD0gZmx1c2hfbWFzazsKIAogCQkJaWYgKGJnX2FscGhhX2VuYWJsZSAmJiAhZm9ybWF0LT5hbHBo YV9lbmFibGUpCkBAIC0xODE0LDExICsxNzY0LDEwIEBAIHN0YXRpYyB2b2lkIF9kcHVfY3J0Y19z ZXR1cF9taXhlcl9mb3JfZW5jb2RlcigKIAlzdHJ1Y3QgZHB1X2NydGNfbWl4ZXIgKm1peGVyOwog CXN0cnVjdCBkcHVfaHdfY3RsICpsYXN0X3ZhbGlkX2N0bCA9IE5VTEw7CiAJaW50IGk7Ci0Jc3Ry dWN0IGRwdV9ybV9od19pdGVyIGxtX2l0ZXIsIGN0bF9pdGVyLCBkc3BwX2l0ZXIsIGRzX2l0ZXI7 CisJc3RydWN0IGRwdV9ybV9od19pdGVyIGxtX2l0ZXIsIGN0bF9pdGVyLCBkc19pdGVyOwogCiAJ ZHB1X3JtX2luaXRfaHdfaXRlcigmbG1faXRlciwgZW5jLT5iYXNlLmlkLCBEUFVfSFdfQkxLX0xN KTsKIAlkcHVfcm1faW5pdF9od19pdGVyKCZjdGxfaXRlciwgZW5jLT5iYXNlLmlkLCBEUFVfSFdf QkxLX0NUTCk7Ci0JZHB1X3JtX2luaXRfaHdfaXRlcigmZHNwcF9pdGVyLCBlbmMtPmJhc2UuaWQs IERQVV9IV19CTEtfRFNQUCk7CiAJZHB1X3JtX2luaXRfaHdfaXRlcigmZHNfaXRlciwgZW5jLT5i YXNlLmlkLCBEUFVfSFdfQkxLX0RTKTsKIAogCS8qIFNldCB1cCBhbGwgdGhlIG1peGVycyBhbmQg Y3RscyByZXNlcnZlZCBieSB0aGlzIGVuY29kZXIgKi8KQEAgLTE4NDYsMTAgKzE3OTUsNiBAQCBz dGF0aWMgdm9pZCBfZHB1X2NydGNfc2V0dXBfbWl4ZXJfZm9yX2VuY29kZXIoCiAJCQlyZXR1cm47 CiAJCX0KIAotCQkvKiBEc3BwIG1heSBiZSBudWxsICovCi0JCSh2b2lkKSBkcHVfcm1fZ2V0X2h3 KHJtLCAmZHNwcF9pdGVyKTsKLQkJbWl4ZXItPmh3X2RzcHAgPSAoc3RydWN0IGRwdV9od19kc3Bw ICopZHNwcF9pdGVyLmh3OwotCiAJCS8qIERTIG1heSBiZSBudWxsICovCiAJCSh2b2lkKSBkcHVf cm1fZ2V0X2h3KHJtLCAmZHNfaXRlcik7CiAJCW1peGVyLT5od19kcyA9IChzdHJ1Y3QgZHB1X2h3 X2RzICopZHNfaXRlci5odzsKQEAgLTE5ODIsMTcgKzE5MjcsNiBAQCBzdGF0aWMgdm9pZCBkcHVf Y3J0Y19hdG9taWNfYmVnaW4oc3RydWN0IGRybV9jcnRjICpjcnRjLAogCV9kcHVfY3J0Y19kZXN0 X3NjYWxlcl9zZXR1cChjcnRjKTsKIAogCS8qCi0JICogU2luY2UgQ1AgcHJvcGVydGllcyB1c2Ug QVhJIGJ1ZmZlciB0byBwcm9ncmFtIHRoZQotCSAqIEhXLCBjaGVjayBpZiBjb250ZXh0IGJhbmsg aXMgaW4gYXR0YWNoZWQKLQkgKiBzdGF0ZSwKLQkgKiBhcHBseSBjb2xvciBwcm9jZXNzaW5nIHBy b3BlcnRpZXMgb25seSBpZgotCSAqIHNtbXUgc3RhdGUgaXMgYXR0YWNoZWQsCi0JICovCi0JaWYg KChzbW11X3N0YXRlLT5zdGF0ZSAhPSBERVRBQ0hFRCkgJiYKLQkJCShzbW11X3N0YXRlLT5zdGF0 ZSAhPSBERVRBQ0hfQUxMX1JFUSkpCi0JCWRwdV9jcF9jcnRjX2FwcGx5X3Byb3BlcnRpZXMoY3J0 Yyk7Ci0KLQkvKgogCSAqIFBQX0RPTkUgaXJxIGlzIG9ubHkgdXNlZCBieSBjb21tYW5kIG1vZGUg Zm9yIG5vdy4KIAkgKiBJdCBpcyBiZXR0ZXIgdG8gcmVxdWVzdCBwZW5kaW5nIGJlZm9yZSBGTFVT SCBhbmQgU1RBUlQgdHJpZ2dlcgogCSAqIHRvIG1ha2Ugc3VyZSBubyBwcF9kb25lIGlycSBtaXNz ZWQuCkBAIC0yNDI1LDcgKzIzNTksNiBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0Y19oYW5kbGVfcG93 ZXJfZXZlbnQodTMyIGV2ZW50X3R5cGUsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgZHJtX2NydGMg KmNydGMgPSBhcmc7CiAJc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YzsKLQlzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZTsKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CiAJc3RydWN0IGRwdV9j cnRjX21peGVyICptOwogCXUzMiBpLCBtaXNyX3N0YXR1czsKQEAgLTI0NTAsOCArMjM4Myw2IEBA IHN0YXRpYyB2b2lkIGRwdV9jcnRjX2hhbmRsZV9wb3dlcl9ldmVudCh1MzIgZXZlbnRfdHlwZSwg dm9pZCAqYXJnKQogCQkJZHB1X2VuY29kZXJfdmlydF9yZXN0b3JlKGVuY29kZXIpOwogCQl9CiAK LQkJZHB1X2NwX2NydGNfcG9zdF9pcGMoY3J0Yyk7Ci0KIAkJZm9yIChpID0gMDsgaSA8IGRwdV9j cnRjLT5udW1fbWl4ZXJzOyArK2kpIHsKIAkJCW0gPSAmZHB1X2NydGMtPm1peGVyc1tpXTsKIAkJ CWlmICghbS0+aHdfbG0gfHwgIW0tPmh3X2xtLT5vcHMuc2V0dXBfbWlzciB8fApAQCAtMjQ3Mywx OCArMjQwNCwxMiBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0Y19oYW5kbGVfcG93ZXJfZXZlbnQodTMy IGV2ZW50X3R5cGUsIHZvaWQgKmFyZykKIAkJCWRwdV9jcnRjLT5taXNyX2RhdGFbaV0gPSBtaXNy X3N0YXR1cyA/IG1pc3Jfc3RhdHVzIDoKIAkJCQkJCQlkcHVfY3J0Yy0+bWlzcl9kYXRhW2ldOwog CQl9Ci0KLQkJZHB1X2NwX2NydGNfcHJlX2lwYyhjcnRjKTsKIAkJYnJlYWs7CiAJY2FzZSBEUFVf UE9XRVJfRVZFTlRfUE9TVF9ESVNBQkxFOgotCQkvKgotCQkgKiBzZXQgcmV2YWxpZGF0ZSBmbGFn IGluIHBsYW5lcywgc28gaXQgd2lsbCBiZSByZS1wcm9ncmFtbWVkCi0JCSAqIGluIHRoZSBuZXh0 IGZyYW1lIHVwZGF0ZQorCQkvKioKKwkJICogTm90aGluZyB0byBkby4gQWxsIHRoZSBwbGFuZXMg b24gdGhlIENSVEMgd2lsbCBiZQorCQkgKiBwcm9ncmFtbWVkIGZvciBldmVyeSBmcmFtZQogCQkg Ki8KLQkJZHJtX2F0b21pY19jcnRjX2Zvcl9lYWNoX3BsYW5lKHBsYW5lLCBjcnRjKQotCQkJZHB1 X3BsYW5lX3NldF9yZXZhbGlkYXRlKHBsYW5lLCB0cnVlKTsKLQotCQlkcHVfY3BfY3J0Y19zdXNw ZW5kKGNydGMpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlEUFVfREVCVUcoImV2ZW50OiVkIG5v dCBoYW5kbGVkXG4iLCBldmVudF90eXBlKTsKQEAgLTI1MzEsNyArMjQ1Niw2IEBAIHN0YXRpYyB2 b2lkIGRwdV9jcnRjX2Rpc2FibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQogCS8qIHVwZGF0ZSBj b2xvciBwcm9jZXNzaW5nIG9uIHN1c3BlbmQgKi8KIAlldmVudC50eXBlID0gRFJNX0VWRU5UX0NS VENfUE9XRVI7CiAJZXZlbnQubGVuZ3RoID0gc2l6ZW9mKHUzMik7Ci0JZHB1X2NwX2NydGNfc3Vz cGVuZChjcnRjKTsKIAlwb3dlcl9vbiA9IDA7CiAJbXNtX21vZGVfb2JqZWN0X2V2ZW50X25vdGlm eSgmY3J0Yy0+YmFzZSwgY3J0Yy0+ZGV2LCAmZXZlbnQsCiAJCQkodTggKikmcG93ZXJfb24pOwpA QCAtMjYzNSw3ICsyNTU5LDYgQEAgc3RhdGljIHZvaWQgZHB1X2NydGNfZW5hYmxlKHN0cnVjdCBk cm1fY3J0YyAqY3J0YywKIAkvKiB1cGRhdGUgY29sb3IgcHJvY2Vzc2luZyBvbiByZXN1bWUgKi8K IAlldmVudC50eXBlID0gRFJNX0VWRU5UX0NSVENfUE9XRVI7CiAJZXZlbnQubGVuZ3RoID0gc2l6 ZW9mKHUzMik7Ci0JZHB1X2NwX2NydGNfcmVzdW1lKGNydGMpOwogCXBvd2VyX29uID0gMTsKIAlt c21fbW9kZV9vYmplY3RfZXZlbnRfbm90aWZ5KCZjcnRjLT5iYXNlLCBjcnRjLT5kZXYsICZldmVu dCwKIAkJCSh1OCAqKSZwb3dlcl9vbik7CkBAIC0yNjc3LDgyICsyNjAwLDYgQEAgc3RhdGljIGlu dCBwc3RhdGVfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCiAJcmV0dXJuIHJjOwog fQogCi1zdGF0aWMgaW50IF9kcHVfY3J0Y19leGNsX3JlY3Rfb3ZlcmxhcF9jaGVjayhzdHJ1Y3Qg cGxhbmVfc3RhdGUgcHN0YXRlc1tdLAotCWludCBjbnQsIGludCBjdXJyX2NudCwgc3RydWN0IGRw dV9yZWN0ICpleGNsX3JlY3QsIGludCB6X3BvcykKLXsKLQlzdHJ1Y3QgZHB1X3JlY3QgZHN0X3Jl Y3QsIGludGVyc2VjdDsKLQlpbnQgaSwgcmMgPSAtRUlOVkFMOwotCWNvbnN0IHN0cnVjdCBkcm1f cGxhbmVfc3RhdGUgKnBzdGF0ZTsKLQotCS8qIHN0YXJ0IGNoZWNraW5nIGZyb20gbmV4dCBwbGFu ZSAqLwotCWZvciAoaSA9IGN1cnJfY250OyBpIDwgY250OyBpKyspIHsKLQkJcHN0YXRlID0gcHN0 YXRlc1tpXS5kcm1fcHN0YXRlOwotCQlQT1BVTEFURV9SRUNUKCZkc3RfcmVjdCwgcHN0YXRlLT5j cnRjX3gsIHBzdGF0ZS0+Y3J0Y195LAotCQkJCXBzdGF0ZS0+Y3J0Y193LCBwc3RhdGUtPmNydGNf aCwgZmFsc2UpOwotCQlkcHVfa21zX3JlY3RfaW50ZXJzZWN0KCZkc3RfcmVjdCwgZXhjbF9yZWN0 LCAmaW50ZXJzZWN0KTsKLQotCQlpZiAoaW50ZXJzZWN0LncgPT0gZXhjbF9yZWN0LT53ICYmIGlu dGVyc2VjdC5oID09IGV4Y2xfcmVjdC0+aAotCQkJCS8qIG5leHQgcGxhbmUgbWF5IGJlIG9uIHNh bWUgei1vcmRlciAqLwotCQkJCSYmIHpfcG9zICE9IHBzdGF0ZXNbaV0uc3RhZ2UpIHsKLQkJCXJj ID0gMDsKLQkJCWdvdG8gZW5kOwotCQl9Ci0JfQotCi0JRFBVX0VSUk9SKCJleGNsIHJlY3QgZG9l cyBub3QgZmluZCB0b3Agb3ZlcmxhcHBpbmcgcmVjdFxuIik7Ci1lbmQ6Ci0JcmV0dXJuIHJjOwot fQotCi0vKiBubyBpbnB1dCB2YWxpZGF0aW9uIC0gY2FsbGVyIEFQSSBoYXMgYWxsIHRoZSBjaGVj a3MgKi8KLXN0YXRpYyBpbnQgX2RwdV9jcnRjX2V4Y2xfZGltX2xheWVyX2NoZWNrKHN0cnVjdCBk cm1fY3J0Y19zdGF0ZSAqc3RhdGUsCi0JCXN0cnVjdCBwbGFuZV9zdGF0ZSBwc3RhdGVzW10sIGlu dCBjbnQpCi17Ci0Jc3RydWN0IGRwdV9jcnRjX3N0YXRlICpjc3RhdGUgPSB0b19kcHVfY3J0Y19z dGF0ZShzdGF0ZSk7Ci0Jc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSAmc3RhdGUtPmFk anVzdGVkX21vZGU7Ci0JY29uc3Qgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcHN0YXRlOwotCXN0 cnVjdCBkcHVfcGxhbmVfc3RhdGUgKmRwdV9wc3RhdGU7Ci0JaW50IHJjID0gMCwgaTsKLQotCS8q IENoZWNrIGRpbSBsYXllciByZWN0IGJvdW5kcyBhbmQgc3RhZ2UgKi8KLQlmb3IgKGkgPSAwOyBp IDwgY3N0YXRlLT5udW1fZGltX2xheWVyczsgaSsrKSB7Ci0JCWlmICgoQ0hFQ0tfTEFZRVJfQk9V TkRTKGNzdGF0ZS0+ZGltX2xheWVyW2ldLnJlY3QueSwKLQkJCWNzdGF0ZS0+ZGltX2xheWVyW2ld LnJlY3QuaCwgbW9kZS0+dmRpc3BsYXkpKSB8fAotCQkgICAgKENIRUNLX0xBWUVSX0JPVU5EUyhj c3RhdGUtPmRpbV9sYXllcltpXS5yZWN0LngsCi0JCQljc3RhdGUtPmRpbV9sYXllcltpXS5yZWN0 LncsIG1vZGUtPmhkaXNwbGF5KSkgfHwKLQkJICAgIChjc3RhdGUtPmRpbV9sYXllcltpXS5zdGFn ZSA+PSBEUFVfU1RBR0VfTUFYKSB8fAotCQkgICAgKCFjc3RhdGUtPmRpbV9sYXllcltpXS5yZWN0 LncpIHx8Ci0JCSAgICAoIWNzdGF0ZS0+ZGltX2xheWVyW2ldLnJlY3QuaCkpIHsKLQkJCURQVV9F UlJPUigiaW52YWxpZCBkaW1fbGF5ZXI6eyVkLCVkLCVkLCVkfSwgc3RhZ2U6JWRcbiIsCi0JCQkJ CWNzdGF0ZS0+ZGltX2xheWVyW2ldLnJlY3QueCwKLQkJCQkJY3N0YXRlLT5kaW1fbGF5ZXJbaV0u cmVjdC55LAotCQkJCQljc3RhdGUtPmRpbV9sYXllcltpXS5yZWN0LncsCi0JCQkJCWNzdGF0ZS0+ ZGltX2xheWVyW2ldLnJlY3QuaCwKLQkJCQkJY3N0YXRlLT5kaW1fbGF5ZXJbaV0uc3RhZ2UpOwot CQkJRFBVX0VSUk9SKCJkaXNwbGF5OiAlZHglZFxuIiwgbW9kZS0+aGRpc3BsYXksCi0JCQkJCW1v ZGUtPnZkaXNwbGF5KTsKLQkJCXJjID0gLUUyQklHOwotCQkJZ290byBlbmQ7Ci0JCX0KLQl9Ci0K LQkvKiB0aGlzIGlzIHRyYXZlcnNpbmcgb24gc29ydGVkIHotb3JkZXIgcHN0YXRlcyAqLwotCWZv ciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgewotCQlwc3RhdGUgPSBwc3RhdGVzW2ldLmRybV9wc3Rh dGU7Ci0JCWRwdV9wc3RhdGUgPSB0b19kcHVfcGxhbmVfc3RhdGUocHN0YXRlKTsKLQkJaWYgKGRw dV9wc3RhdGUtPmV4Y2xfcmVjdC53ICYmIGRwdV9wc3RhdGUtPmV4Y2xfcmVjdC5oKSB7Ci0JCQkv KiBjaGVjayBvdmVybGFwIG9uIGFsbCB0b3Agei1vcmRlciAqLwotCQkJcmMgPSBfZHB1X2NydGNf ZXhjbF9yZWN0X292ZXJsYXBfY2hlY2socHN0YXRlcywgY250LAotCQkJICAgICBpICsgMSwgJmRw dV9wc3RhdGUtPmV4Y2xfcmVjdCwgcHN0YXRlc1tpXS5zdGFnZSk7Ci0JCQlpZiAocmMpCi0JCQkJ Z290byBlbmQ7Ci0JCX0KLQl9Ci0KLWVuZDoKLQlyZXR1cm4gcmM7Ci19Ci0KIHN0YXRpYyBpbnQg ZHB1X2NydGNfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJc3RydWN0IGRy bV9jcnRjX3N0YXRlICpzdGF0ZSkKIHsKQEAgLTI4NzgsMTAgKzI3MjUsNiBAQCBzdGF0aWMgaW50 IGRwdV9jcnRjX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJLyogYXNzaWdu IG1peGVyIHN0YWdlcyBiYXNlZCBvbiBzb3J0ZWQgenBvcyBwcm9wZXJ0eSAqLwogCXNvcnQocHN0 YXRlcywgY250LCBzaXplb2YocHN0YXRlc1swXSksIHBzdGF0ZV9jbXAsIE5VTEwpOwogCi0JcmMg PSBfZHB1X2NydGNfZXhjbF9kaW1fbGF5ZXJfY2hlY2soc3RhdGUsIHBzdGF0ZXMsIGNudCk7Ci0J aWYgKHJjKQotCQlnb3RvIGVuZDsKLQogCWlmICghZHB1X2lzX2N1c3RvbV9jbGllbnQoKSkgewog CQlpbnQgc3RhZ2Vfb2xkID0gcHN0YXRlc1swXS5zdGFnZTsKIApAQCAtMzMwMSwxMSArMzE0NCw4 IEBAIHN0YXRpYyBpbnQgZHB1X2NydGNfYXRvbWljX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMsCiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQlyZXQgPSBkcHVfY3Bf Y3J0Y19zZXRfcHJvcGVydHkoY3J0YywKLQkJCQkJcHJvcGVydHksIHZhbCk7Ci0JCX0KLQkJaWYg KHJldCkKIAkJCURSTV9FUlJPUigiZmFpbGVkIHRvIHNldCB0aGUgcHJvcGVydHlcbiIpOworCQl9 CiAKIAkJRFBVX0RFQlVHKCJjcnRjJWQgJXNbJWRdIDw9IDB4JWxseCByZXQ9JWRcbiIsIGNydGMt PmJhc2UuaWQsCiAJCQkJcHJvcGVydHktPm5hbWUsIHByb3BlcnR5LT5iYXNlLmlkLCB2YWwsIHJl dCk7CkBAIC0zMzcwLDkgKzMyMTAsNiBAQCBzdGF0aWMgaW50IGRwdV9jcnRjX2F0b21pY19nZXRf cHJvcGVydHkoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQkJCSZjc3RhdGUtPnByb3BlcnR5X3N0 YXRlLAogCQkJCXByb3BlcnR5LCB2YWwpOwogCQlpZiAocmV0KQotCQkJcmV0ID0gZHB1X2NwX2Ny dGNfZ2V0X3Byb3BlcnR5KGNydGMsCi0JCQkJcHJvcGVydHksIHZhbCk7Ci0JCWlmIChyZXQpCiAJ CQlEUk1fRVJST1IoImdldCBwcm9wZXJ0eSBmYWlsZWRcbiIpOwogCX0KIAlyZXR1cm4gcmV0OwpA QCAtMzQ4NywxMCArMzMyNCw2IEBAIHN0YXRpYyBpbnQgX2RwdV9kZWJ1Z2ZzX3N0YXR1c19zaG93 KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSkKIAkJc2VxX3ByaW50ZihzLCAiXHRtdWx0 aXJlY3Q6IG1vZGU6ICVkIGluZGV4OiAlZFxuIiwKIAkJCXBzdGF0ZS0+bXVsdGlyZWN0X21vZGUs IHBzdGF0ZS0+bXVsdGlyZWN0X2luZGV4KTsKIAotCQlzZXFfcHJpbnRmKHMsICJcdGV4Y2xfcmVj dDogeDolNGQgeTolNGQgdzolNGQgaDolNGRcbiIsCi0JCQlwc3RhdGUtPmV4Y2xfcmVjdC54LCBw c3RhdGUtPmV4Y2xfcmVjdC55LAotCQkJcHN0YXRlLT5leGNsX3JlY3QudywgcHN0YXRlLT5leGNs X3JlY3QuaCk7Ci0KIAkJc2VxX3B1dHMocywgIlxuIik7CiAJfQogCWlmIChkcHVfY3J0Yy0+dmJs YW5rX2NiX2NvdW50KSB7CkBAIC0zOTM0LDEwICszNzY3LDYgQEAgc3RydWN0IGRybV9jcnRjICpk cHVfY3J0Y19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fcGxhbmUgKnBs YW5lKQogCS8qIEluaXQgZGVzdCBzY2FsZXIgKi8KIAlfZHB1X2NydGNfZGVzdF9zY2FsZXJfaW5p dChkcHVfY3J0Yywga21zLT5jYXRhbG9nKTsKIAotCS8qIEluc3RhbGwgY29sb3IgcHJvY2Vzc2lu ZyBwcm9wZXJ0aWVzICovCi0JZHB1X2NwX2NydGNfaW5pdChjcnRjKTsKLQlkcHVfY3BfY3J0Y19p bnN0YWxsX3Byb3BlcnRpZXMoY3J0Yyk7Ci0KIAlEUFVfREVCVUcoIiVzOiBzdWNjZXNzZnVsbHkg aW5pdGlhbGl6ZWQgY3J0Y1xuIiwgZHB1X2NydGMtPm5hbWUpOwogCXJldHVybiBjcnRjOwogfQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaCBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmgKaW5kZXggOTMwNDA1OC4uNWYz ODBiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMu aAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oCkBAIC0yMCw2 ICsyMCw3IEBACiAjZGVmaW5lIF9EUFVfQ1JUQ19IXwogCiAjaW5jbHVkZSA8bGludXgva3RocmVh ZC5oPgorI2luY2x1ZGUgPHVhcGkvZHJtL2RwdV9kcm0uaD4KICNpbmNsdWRlIDxkcm0vZHJtX2Ny dGMuaD4KICNpbmNsdWRlICJtc21fcHJvcC5oIgogI2luY2x1ZGUgImRwdV9rbXMuaCIKQEAgLTg2 LDcgKzg3LDYgQEAgc3RydWN0IGRwdV9jcnRjX3NtbXVfc3RhdGVfZGF0YSB7CiAgKiBzdHJ1Y3Qg ZHB1X2NydGNfbWl4ZXI6IHN0b3JlcyB0aGUgbWFwIGZvciBlYWNoIHZpcnR1YWwgcGlwZWxpbmUg aW4gdGhlIENSVEMKICAqIEBod19sbToJTE0gSFcgRHJpdmVyIGNvbnRleHQKICAqIEBod19jdGw6 CUNUTCBQYXRoIEhXIGRyaXZlciBjb250ZXh0Ci0gKiBAaHdfZHNwcDoJRFNQUCBIVyBkcml2ZXIg Y29udGV4dAogICogQGh3X2RzOglEUyBIVyBkcml2ZXIgY29udGV4dAogICogQGVuY29kZXI6CUVu Y29kZXIgYXR0YWNoZWQgdG8gdGhpcyBsbSAmIGN0bAogICogQG1peGVyX29wX21vZGU6CW1peGVy IGJsZW5kaW5nIG9wZXJhdGlvbiBtb2RlCkBAIC05NSw3ICs5NSw2IEBAIHN0cnVjdCBkcHVfY3J0 Y19zbW11X3N0YXRlX2RhdGEgewogc3RydWN0IGRwdV9jcnRjX21peGVyIHsKIAlzdHJ1Y3QgZHB1 X2h3X21peGVyICpod19sbTsKIAlzdHJ1Y3QgZHB1X2h3X2N0bCAqaHdfY3RsOwotCXN0cnVjdCBk cHVfaHdfZHNwcCAqaHdfZHNwcDsKIAlzdHJ1Y3QgZHB1X2h3X2RzICpod19kczsKIAlzdHJ1Y3Qg ZHJtX2VuY29kZXIgKmVuY29kZXI7CiAJdTMyIG1peGVyX29wX21vZGU7CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYwppbmRleCA0Mzg2MzYwLi43N2QzNTcxIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMKQEAgLTE3NDgs OCArMTc0OCw2IEBAIHN0YXRpYyB2b2lkIF9kcHVfZW5jb2Rlcl9raWNrb2ZmX3BoeXMoc3RydWN0 IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMpCiAKIAkJaWYgKHBoeXMtPnNwbGl0X3JvbGUgIT0g RU5DX1JPTEVfU0xBVkUpCiAJCQlzZXRfYml0KGksIGRwdV9lbmMtPmZyYW1lX2J1c3lfbWFzayk7 Ci0JCWlmIChwaHlzLT5od19jdGwtPm9wcy5yZWdfZG1hX2ZsdXNoKQotCQkJcGh5cy0+aHdfY3Rs LT5vcHMucmVnX2RtYV9mbHVzaChwaHlzLT5od19jdGwpOwogCQlpZiAoIXBoeXMtPm9wcy5uZWVk c19zaW5nbGVfZmx1c2ggfHwKIAkJCQkhcGh5cy0+b3BzLm5lZWRzX3NpbmdsZV9mbHVzaChwaHlz KSkKIAkJCV9kcHVfZW5jb2Rlcl90cmlnZ2VyX2ZsdXNoKCZkcHVfZW5jLT5iYXNlLCBwaHlzLCAw eDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29k ZXJfcGh5c193Yi5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJf cGh5c193Yi5jCmluZGV4IDNiMTIxMmIuLmQyZTljZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXNfd2IuYworKysgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzX3diLmMKQEAgLTEzLDcgKzEzLDYg QEAKIAogI2RlZmluZSBwcl9mbXQoZm10KQkiW2RybTolczolZF0gIiBmbXQsIF9fZnVuY19fLCBf X0xJTkVfXwogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KLSNpbmNsdWRlIDx1YXBpL2RybS9k cHVfZHJtLmg+CiAKICNpbmNsdWRlICJkcHVfZW5jb2Rlcl9waHlzLmgiCiAjaW5jbHVkZSAiZHB1 X2Zvcm1hdHMuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9od19hZDQuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19hZDQuYwpk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y4MWM5YS4uMDAwMDAwMAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfYWQ0LmMKKysrIC9kZXYvbnVsbApAQCAt MSwxNDQzICswLDAgQEAKLS8qIENvcHlyaWdodCAoYykgMjAxNy0yMDE4LCBUaGUgTGludXggRm91 bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9u IDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0jaW5jbHVkZSA8 ZHJtL21zbV9kcm1fcHAuaD4KLSNpbmNsdWRlICJkcHVfaHdfY2F0YWxvZy5oIgotI2luY2x1ZGUg ImRwdV9od191dGlsLmgiCi0jaW5jbHVkZSAiZHB1X2h3X21kc3MuaCIKLSNpbmNsdWRlICJkcHVf aHdfbG0uaCIKLSNpbmNsdWRlICJkcHVfYWQ0LmgiCi0KLSNkZWZpbmUgQURfU1RBVEVfUkVBRFko eCkgKCh4KSA9PSAoYWQ0X2luaXQgfCBhZDRfY2ZnIHwgYWQ0X21vZGUgfCBhZDRfaW5wdXQpKQot I2RlZmluZSBNRVJHRV9XSURUSF9SSUdIVCA2Ci0jZGVmaW5lIE1FUkdFX1dJRFRIX0xFRlQgNQot I2RlZmluZSBBRF9JUENfRlJBTUVfQ09VTlQgMgotCi1lbnVtIGFkNF9vcHNfYml0bWFzayB7Ci0J YWQ0X2luaXQgPSBCSVQoQURfSU5JVCksCi0JYWQ0X2NmZyA9IEJJVChBRF9DRkcpLAotCWFkNF9t b2RlID0gQklUKEFEX01PREUpLAotCWFkNF9pbnB1dCA9IEJJVChBRF9JTlBVVCksCi0JYWQ0X29w c19tYXggPSBCSVQoMzEpLAotfTsKLQotZW51bSBhZDRfc3RhdGUgewotCWFkNF9zdGF0ZV9pZGxl LAotCWFkNF9zdGF0ZV9zdGFydHVwLAotCWFkNF9zdGF0ZV9ydW4sCi0JLyogaWRsZSBwb3dlciBj b2xsYXBzZSBzdXNwZW5kIHN0YXRlICovCi0JYWQ0X3N0YXRlX2lwY3MsCi0JLyogaWRsZSBwb3dl ciBjb2xsYXBzZSByZXN1bWUgc3RhdGUgKi8KLQlhZDRfc3RhdGVfaXBjciwKLQlhZDRfc3RhdGVf bWF4LAotfTsKLQotdHlwZWRlZiBpbnQgKCphZDRfcHJvcF9zZXR1cCkoc3RydWN0IGRwdV9od19k c3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqYWQpOwotCi1zdGF0aWMgaW50IGFk NF9wYXJhbXNfY2hlY2soc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2Fk X2h3X2NmZyAqY2ZnKTsKLQotc3RhdGljIGludCBhZDRfbm9fb3Bfc2V0dXAoc3RydWN0IGRwdV9o d19kc3BwICpkc3BwLCBzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKTsKLXN0YXRpYyBpbnQgYWQ0 X3NldHVwX2RlYnVnKHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCwgc3RydWN0IGRwdV9hZF9od19j ZmcgKmNmZyk7Ci1zdGF0aWMgaW50IGFkNF9tb2RlX3NldHVwKHN0cnVjdCBkcHVfaHdfZHNwcCAq ZHNwcCwgZW51bSBhZDRfbW9kZXMgbW9kZSk7Ci1zdGF0aWMgaW50IGFkNF9tb2RlX3NldHVwX2Nv bW1vbihzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsCi0JCXN0cnVjdCBkcHVfYWRfaHdfY2ZnICpj ZmcpOwotc3RhdGljIGludCBhZDRfaW5pdF9zZXR1cChzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAs IHN0cnVjdCBkcHVfYWRfaHdfY2ZnICpjZmcpOwotc3RhdGljIGludCBhZDRfaW5pdF9zZXR1cF9p ZGxlKHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCwKLQkJc3RydWN0IGRwdV9hZF9od19jZmcgKmNm Zyk7Ci1zdGF0aWMgaW50IGFkNF9pbml0X3NldHVwX3J1bihzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRz cHAsCi0JCXN0cnVjdCBkcHVfYWRfaHdfY2ZnICpjZmcpOwotc3RhdGljIGludCBhZDRfaW5pdF9z ZXR1cF9pcGNyKHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCwKLQkJc3RydWN0IGRwdV9hZF9od19j ZmcgKmNmZyk7Ci1zdGF0aWMgaW50IGFkNF9jZmdfc2V0dXAoc3RydWN0IGRwdV9od19kc3BwICpk c3BwLCBzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKTsKLXN0YXRpYyBpbnQgYWQ0X2NmZ19zZXR1 cF9pZGxlKHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCwKLQkJc3RydWN0IGRwdV9hZF9od19jZmcg KmNmZyk7Ci1zdGF0aWMgaW50IGFkNF9jZmdfc2V0dXBfcnVuKHN0cnVjdCBkcHVfaHdfZHNwcCAq ZHNwcCwKLQkJc3RydWN0IGRwdV9hZF9od19jZmcgKmNmZyk7Ci1zdGF0aWMgaW50IGFkNF9jZmdf c2V0dXBfaXBjcihzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsCi0JCXN0cnVjdCBkcHVfYWRfaHdf Y2ZnICpjZmcpOwotc3RhdGljIGludCBhZDRfaW5wdXRfc2V0dXAoc3RydWN0IGRwdV9od19kc3Bw ICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKTsKLXN0YXRpYyBpbnQgYWQ0X2lu cHV0X3NldHVwX2lkbGUoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2Fk X2h3X2NmZyAqY2ZnKTsKLXN0YXRpYyBpbnQgYWQ0X2lucHV0X3NldHVwX2lwY3Ioc3RydWN0IGRw dV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKTsKLXN0YXRpYyBp bnQgYWQ0X3N1c3BlbmRfc2V0dXAoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3Qg ZHB1X2FkX2h3X2NmZyAqY2ZnKTsKLXN0YXRpYyBpbnQgYWQ0X2Fzc2VydGl2ZV9zZXR1cChzdHJ1 Y3QgZHB1X2h3X2RzcHAgKmRzcHAsCi0JCXN0cnVjdCBkcHVfYWRfaHdfY2ZnICpjZmcpOwotc3Rh dGljIGludCBhZDRfYXNzZXJ0aXZlX3NldHVwX2lwY3Ioc3RydWN0IGRwdV9od19kc3BwICpkc3Bw LAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKTsKLXN0YXRpYyBpbnQgYWQ0X2JhY2tsaWdo dF9zZXR1cChzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsCi0JCXN0cnVjdCBkcHVfYWRfaHdfY2Zn ICpjZmcpOwotc3RhdGljIGludCBhZDRfYmFja2xpZ2h0X3NldHVwX2lwY3Ioc3RydWN0IGRwdV9o d19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKTsKLQotc3RhdGljIGlu dCBhZDRfaXBjX3N1c3BlbmRfc2V0dXBfcnVuKHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCwKLQkJ c3RydWN0IGRwdV9hZF9od19jZmcgKmNmZyk7Ci1zdGF0aWMgaW50IGFkNF9pcGNfc3VzcGVuZF9z ZXR1cF9pcGNyKHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCwKLQkJc3RydWN0IGRwdV9hZF9od19j ZmcgKmNmZyk7Ci1zdGF0aWMgaW50IGFkNF9pcGNfcmVzdW1lX3NldHVwX2lwY3Moc3RydWN0IGRw dV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKTsKLXN0YXRpYyBp bnQgYWQ0X2lwY19yZXNldF9zZXR1cF9zdGFydHVwKHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCwK LQkJc3RydWN0IGRwdV9hZF9od19jZmcgKmNmZyk7Ci1zdGF0aWMgaW50IGFkNF9pcGNfcmVzZXRf c2V0dXBfaXBjcihzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsCi0JCXN0cnVjdCBkcHVfYWRfaHdf Y2ZnICpjZmcpOwotc3RhdGljIGludCBhZDRfY2ZnX2lwY19yZXNldChzdHJ1Y3QgZHB1X2h3X2Rz cHAgKmRzcHAsCi0JCXN0cnVjdCBkcHVfYWRfaHdfY2ZnICpjZmcpOwotCi1zdGF0aWMgYWQ0X3By b3Bfc2V0dXAgcHJvcF9zZXRfZnVuY1thZDRfc3RhdGVfbWF4XVtBRF9QUk9QTUFYXSA9IHsKLQlb YWQ0X3N0YXRlX2lkbGVdW0FEX01PREVdID0gYWQ0X21vZGVfc2V0dXBfY29tbW9uLAotCVthZDRf c3RhdGVfaWRsZV1bQURfSU5JVF0gPSBhZDRfaW5pdF9zZXR1cF9pZGxlLAotCVthZDRfc3RhdGVf aWRsZV1bQURfQ0ZHXSA9IGFkNF9jZmdfc2V0dXBfaWRsZSwKLQlbYWQ0X3N0YXRlX2lkbGVdW0FE X0lOUFVUXSA9IGFkNF9pbnB1dF9zZXR1cF9pZGxlLAotCVthZDRfc3RhdGVfaWRsZV1bQURfU1VT UEVORF0gPSBhZDRfc3VzcGVuZF9zZXR1cCwKLQlbYWQ0X3N0YXRlX2lkbGVdW0FEX0FTU0VSVElW RV0gPSBhZDRfYXNzZXJ0aXZlX3NldHVwLAotCVthZDRfc3RhdGVfaWRsZV1bQURfQkFDS0xJR0hU XSA9IGFkNF9iYWNrbGlnaHRfc2V0dXAsCi0JW2FkNF9zdGF0ZV9pZGxlXVtBRF9JUENfU1VTUEVO RF0gPSBhZDRfbm9fb3Bfc2V0dXAsCi0JW2FkNF9zdGF0ZV9pZGxlXVtBRF9JUENfUkVTVU1FXSA9 IGFkNF9ub19vcF9zZXR1cCwKLQlbYWQ0X3N0YXRlX2lkbGVdW0FEX0lQQ19SRVNFVF0gPSBhZDRf bm9fb3Bfc2V0dXAsCi0KLQlbYWQ0X3N0YXRlX3N0YXJ0dXBdW0FEX01PREVdID0gYWQ0X21vZGVf c2V0dXBfY29tbW9uLAotCVthZDRfc3RhdGVfc3RhcnR1cF1bQURfSU5JVF0gPSBhZDRfaW5pdF9z ZXR1cCwKLQlbYWQ0X3N0YXRlX3N0YXJ0dXBdW0FEX0NGR10gPSBhZDRfY2ZnX3NldHVwLAotCVth ZDRfc3RhdGVfc3RhcnR1cF1bQURfSU5QVVRdID0gYWQ0X2lucHV0X3NldHVwLAotCVthZDRfc3Rh dGVfc3RhcnR1cF1bQURfU1VTUEVORF0gPSBhZDRfc3VzcGVuZF9zZXR1cCwKLQlbYWQ0X3N0YXRl X3N0YXJ0dXBdW0FEX0FTU0VSVElWRV0gPSBhZDRfYXNzZXJ0aXZlX3NldHVwLAotCVthZDRfc3Rh dGVfc3RhcnR1cF1bQURfQkFDS0xJR0hUXSA9IGFkNF9iYWNrbGlnaHRfc2V0dXAsCi0JW2FkNF9z dGF0ZV9zdGFydHVwXVtBRF9JUENfU1VTUEVORF0gPSBhZDRfbm9fb3Bfc2V0dXAsCi0JW2FkNF9z dGF0ZV9zdGFydHVwXVtBRF9JUENfUkVTVU1FXSA9IGFkNF9ub19vcF9zZXR1cCwKLQlbYWQ0X3N0 YXRlX3N0YXJ0dXBdW0FEX0lQQ19SRVNFVF0gPSBhZDRfaXBjX3Jlc2V0X3NldHVwX3N0YXJ0dXAs Ci0KLQlbYWQ0X3N0YXRlX3J1bl1bQURfTU9ERV0gPSBhZDRfbW9kZV9zZXR1cF9jb21tb24sCi0J W2FkNF9zdGF0ZV9ydW5dW0FEX0lOSVRdID0gYWQ0X2luaXRfc2V0dXBfcnVuLAotCVthZDRfc3Rh dGVfcnVuXVtBRF9DRkddID0gYWQ0X2NmZ19zZXR1cF9ydW4sCi0JW2FkNF9zdGF0ZV9ydW5dW0FE X0lOUFVUXSA9IGFkNF9pbnB1dF9zZXR1cCwKLQlbYWQ0X3N0YXRlX3J1bl1bQURfU1VTUEVORF0g PSBhZDRfc3VzcGVuZF9zZXR1cCwKLQlbYWQ0X3N0YXRlX3J1bl1bQURfQVNTRVJUSVZFXSA9IGFk NF9hc3NlcnRpdmVfc2V0dXAsCi0JW2FkNF9zdGF0ZV9ydW5dW0FEX0JBQ0tMSUdIVF0gPSBhZDRf YmFja2xpZ2h0X3NldHVwLAotCVthZDRfc3RhdGVfcnVuXVtBRF9JUENfU1VTUEVORF0gPSBhZDRf aXBjX3N1c3BlbmRfc2V0dXBfcnVuLAotCVthZDRfc3RhdGVfcnVuXVtBRF9JUENfUkVTVU1FXSA9 IGFkNF9ub19vcF9zZXR1cCwKLQlbYWQ0X3N0YXRlX3J1bl1bQURfSVBDX1JFU0VUXSA9IGFkNF9z ZXR1cF9kZWJ1ZywKLQotCVthZDRfc3RhdGVfaXBjc11bQURfTU9ERV0gPSBhZDRfbm9fb3Bfc2V0 dXAsCi0JW2FkNF9zdGF0ZV9pcGNzXVtBRF9JTklUXSA9IGFkNF9ub19vcF9zZXR1cCwKLQlbYWQ0 X3N0YXRlX2lwY3NdW0FEX0NGR10gPSBhZDRfbm9fb3Bfc2V0dXAsCi0JW2FkNF9zdGF0ZV9pcGNz XVtBRF9JTlBVVF0gPSBhZDRfbm9fb3Bfc2V0dXAsCi0JW2FkNF9zdGF0ZV9pcGNzXVtBRF9TVVNQ RU5EXSA9IGFkNF9ub19vcF9zZXR1cCwKLQlbYWQ0X3N0YXRlX2lwY3NdW0FEX0FTU0VSVElWRV0g PSBhZDRfbm9fb3Bfc2V0dXAsCi0JW2FkNF9zdGF0ZV9pcGNzXVtBRF9CQUNLTElHSFRdID0gYWQ0 X25vX29wX3NldHVwLAotCVthZDRfc3RhdGVfaXBjc11bQURfSVBDX1NVU1BFTkRdID0gYWQ0X25v X29wX3NldHVwLAotCVthZDRfc3RhdGVfaXBjc11bQURfSVBDX1JFU1VNRV0gPSBhZDRfaXBjX3Jl c3VtZV9zZXR1cF9pcGNzLAotCVthZDRfc3RhdGVfaXBjc11bQURfSVBDX1JFU0VUXSA9IGFkNF9u b19vcF9zZXR1cCwKLQotCVthZDRfc3RhdGVfaXBjcl1bQURfTU9ERV0gPSBhZDRfbW9kZV9zZXR1 cF9jb21tb24sCi0JW2FkNF9zdGF0ZV9pcGNyXVtBRF9JTklUXSA9IGFkNF9pbml0X3NldHVwX2lw Y3IsCi0JW2FkNF9zdGF0ZV9pcGNyXVtBRF9DRkddID0gYWQ0X2NmZ19zZXR1cF9pcGNyLAotCVth ZDRfc3RhdGVfaXBjcl1bQURfSU5QVVRdID0gYWQ0X2lucHV0X3NldHVwX2lwY3IsCi0JW2FkNF9z dGF0ZV9pcGNyXVtBRF9TVVNQRU5EXSA9IGFkNF9zdXNwZW5kX3NldHVwLAotCVthZDRfc3RhdGVf aXBjcl1bQURfQVNTRVJUSVZFXSA9IGFkNF9hc3NlcnRpdmVfc2V0dXBfaXBjciwKLQlbYWQ0X3N0 YXRlX2lwY3JdW0FEX0JBQ0tMSUdIVF0gPSBhZDRfYmFja2xpZ2h0X3NldHVwX2lwY3IsCi0JW2Fk NF9zdGF0ZV9pcGNyXVtBRF9JUENfU1VTUEVORF0gPSBhZDRfaXBjX3N1c3BlbmRfc2V0dXBfaXBj ciwKLQlbYWQ0X3N0YXRlX2lwY3JdW0FEX0lQQ19SRVNVTUVdID0gYWQ0X25vX29wX3NldHVwLAot CVthZDRfc3RhdGVfaXBjcl1bQURfSVBDX1JFU0VUXSA9IGFkNF9pcGNfcmVzZXRfc2V0dXBfaXBj ciwKLX07Ci0KLXN0cnVjdCBhZDRfaW5mbyB7Ci0JZW51bSBhZDRfc3RhdGUgc3RhdGU7Ci0JdTMy IGNvbXBsZXRlZF9vcHNfbWFzazsKLQlib29sIGFkNF9zdXBwb3J0OwotCWVudW0gYWQ0X21vZGVz IG1vZGU7Ci0JYm9vbCBpc19tYXN0ZXI7Ci0JdTMyIGxhc3RfYXNzZXJ0aXZlOwotCXUzMiBjYWNo ZWRfYXNzZXJ0aXZlOwotCXU2NCBsYXN0X2FsczsKLQl1NjQgY2FjaGVkX2FsczsKLQl1NjQgbGFz dF9ibDsKLQl1NjQgY2FjaGVkX2JsOwotCXUzMiBsYXN0X3N0cjsKLQl1MzIgZnJhbWVfY291bnQ7 Ci0JdTMyIGZybXRfbW9kZTsKLQl1MzIgaXJkeF9jb250cm9sXzA7Ci0JdTMyIHRmX2N0cmw7Ci0J dTMyIHZjX2NvbnRyb2xfMDsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYWQ0X2luZm8gaW5mb1tEU1BQ X01BWF0gPSB7Ci0JW0RTUFBfMF0gPSB7YWQ0X3N0YXRlX2lkbGUsIDAsIHRydWUsIEFENF9PRkYs IGZhbHNlLCAweDgwLCAweDgwfSwKLQlbRFNQUF8xXSA9IHthZDRfc3RhdGVfaWRsZSwgMCwgdHJ1 ZSwgQUQ0X09GRiwgZmFsc2UsIDB4ODAsIDB4ODB9LAotCVtEU1BQXzJdID0ge2FkNF9zdGF0ZV9t YXgsIDAsIGZhbHNlLCBBRDRfT0ZGLCBmYWxzZSwgMHg4MCwgMHg4MH0sCi0JW0RTUFBfM10gPSB7 YWQ0X3N0YXRlX21heCwgMCwgZmFsc2UsIEFENF9PRkYsIGZhbHNlLCAweDgwLCAweDgwfSwKLX07 Ci0KLXZvaWQgZHB1X3NldHVwX2RzcHBfYWQ0KHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCwgdm9p ZCAqYWRfY2ZnKQotewotCWludCByZXQgPSAwOwotCXN0cnVjdCBkcHVfYWRfaHdfY2ZnICpjZmcg PSBhZF9jZmc7Ci0KLQlyZXQgPSBhZDRfcGFyYW1zX2NoZWNrKGRzcHAsIGFkX2NmZyk7Ci0JaWYg KHJldCkKLQkJcmV0dXJuOwotCi0JcmV0ID0gcHJvcF9zZXRfZnVuY1tpbmZvW2RzcHAtPmlkeF0u c3RhdGVdW2NmZy0+cHJvcF0oZHNwcCwgYWRfY2ZnKTsKLQlpZiAocmV0KQotCQlEUk1fRVJST1Io Im9wIGZhaWxlZCAlZCByZXQgJWRcbiIsIGNmZy0+cHJvcCwgcmV0KTsKLX0KLQotaW50IGRwdV92 YWxpZGF0ZV9kc3BwX2FkNChzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsIHUzMiAqcHJvcCkKLXsK LQotCWlmICghZHNwcCB8fCAhcHJvcCkgewotCQlEUk1fRVJST1IoImludmFsaWQgcGFyYW1zIGRz cHAgJXBLIHByb3AgJXBLXG4iLCBkc3BwLCBwcm9wKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0JaWYgKCpwcm9wID49IEFEX1BST1BNQVgpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIHByb3Ag c2V0ICVkXG4iLCAqcHJvcCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChkc3BwLT5p ZHggPj0gRFNQUF9NQVggfHwgIWluZm9bZHNwcC0+aWR4XS5hZDRfc3VwcG9ydCkgewotCQlEUk1f RVJST1IoImFkNCBub3Qgc3VwcG9ydGVkIGZvciBkc3BwIGlkeCAlZFxuIiwgZHNwcC0+aWR4KTsK LQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWQ0 X3BhcmFtc19jaGVjayhzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsCi0JCXN0cnVjdCBkcHVfYWRf aHdfY2ZnICpjZmcpCi17Ci0Jc3RydWN0IGRwdV9od19taXhlciAqaHdfbG07Ci0KLQlpZiAoIWRz cHAgfHwgIWNmZyB8fCAhY2ZnLT5od19jZmcpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIGRzcHAg JXBLIGNmZyAlcEsgaHdfY2ZnICVwS1xuIiwKLQkJCWRzcHAsIGNmZywgKChjZmcpID8gKGNmZy0+ aHdfY2ZnKSA6IE5VTEwpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKCFjZmctPmh3 X2NmZy0+bWl4ZXJfaW5mbykgewotCQlEUk1fRVJST1IoImludmFsaWQgbWl4ZWQgaW5mb1xuIik7 Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChkc3BwLT5pZHggPj0gRFNQUF9NQVggfHwg IWluZm9bZHNwcC0+aWR4XS5hZDRfc3VwcG9ydCkgewotCQlEUk1fRVJST1IoImFkNCBub3Qgc3Vw cG9ydGVkIGZvciBkc3BwIGlkeCAlZFxuIiwgZHNwcC0+aWR4KTsKLQkJcmV0dXJuIC1FSU5WQUw7 Ci0JfQotCi0JaWYgKGNmZy0+cHJvcCA+PSBBRF9QUk9QTUFYKSB7Ci0JCURSTV9FUlJPUigiaW52 YWxpZCBwcm9wIHNldCAlZFxuIiwgY2ZnLT5wcm9wKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0JaWYgKGluZm9bZHNwcC0+aWR4XS5zdGF0ZSA+PSBhZDRfc3RhdGVfbWF4KSB7Ci0JCURSTV9F UlJPUigiaW4gbWF4IHN0YXRlIGZvciBkc3BwIGlkeCAlZFxuIiwgZHNwcC0+aWR4KTsKLQkJcmV0 dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKCFwcm9wX3NldF9mdW5jW2luZm9bZHNwcC0+aWR4XS5z dGF0ZV1bY2ZnLT5wcm9wXSkgewotCQlEUk1fRVJST1IoInByb3Agc2V0IG5vdCBpbXBsZW1lbnRl ZCBmb3Igc3RhdGUgJWQgcHJvcCAlZFxuIiwKLQkJCQlpbmZvW2RzcHAtPmlkeF0uc3RhdGUsIGNm Zy0+cHJvcCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICghY2ZnLT5od19jZmctPm51 bV9vZl9taXhlcnMgfHwKLQkgICAgY2ZnLT5od19jZmctPm51bV9vZl9taXhlcnMgPiBDUlRDX0RV QUxfTUlYRVJTKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBtaXhlciBjbnQgJWRcbiIsCi0JCQkJ Y2ZnLT5od19jZmctPm51bV9vZl9taXhlcnMpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JaHdf bG0gPSBjZmctPmh3X2NmZy0+bWl4ZXJfaW5mbzsKLQlpZiAoIWh3X2xtKSB7Ci0JCURSTV9FUlJP UigiaW52YWxpZCBtaXhlciBpbmZvXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYg KGNmZy0+aHdfY2ZnLT5udW1fb2ZfbWl4ZXJzID09IDEgJiYKLQkgICAgaHdfbG0tPmNmZy5vdXRf aGVpZ2h0ICE9IGNmZy0+aHdfY2ZnLT5kaXNwbGF5diAmJgotCSAgICBod19sbS0+Y2ZnLm91dF93 aWR0aCAhPSBjZmctPmh3X2NmZy0+ZGlzcGxheWgpIHsKLQkJRFJNX0VSUk9SKCJzaW5nbGVfbG0g bG1oICVkIGxtdyAlZCBkaXNwbGF5aCAlZCBkaXNwbGF5dyAlZFxuIiwKLQkJCWh3X2xtLT5jZmcu b3V0X2hlaWdodCwgaHdfbG0tPmNmZy5vdXRfd2lkdGgsCi0JCQljZmctPmh3X2NmZy0+ZGlzcGxh eWgsIGNmZy0+aHdfY2ZnLT5kaXNwbGF5dik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0gZWxzZSBp ZiAoaHdfbG0tPmNmZy5vdXRfaGVpZ2h0ICE9IGNmZy0+aHdfY2ZnLT5kaXNwbGF5diAmJgotCQkg ICBod19sbS0+Y2ZnLm91dF93aWR0aCAhPSAoY2ZnLT5od19jZmctPmRpc3BsYXloID4+IDEpKSB7 Ci0JCURSTV9FUlJPUigiZHVhbF9sbSBsbWggJWQgbG13ICVkIGRpc3BsYXloICVkIGRpc3BsYXl3 ICVkXG4iLAotCQkJaHdfbG0tPmNmZy5vdXRfaGVpZ2h0LCBod19sbS0+Y2ZnLm91dF93aWR0aCwK LQkJCWNmZy0+aHdfY2ZnLT5kaXNwbGF5aCwgY2ZnLT5od19jZmctPmRpc3BsYXl2KTsKLQkJcmV0 dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWQ0X25vX29w X3NldHVwKHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCwgc3RydWN0IGRwdV9hZF9od19jZmcgKmNm ZykKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhZDRfc2V0dXBfZGVidWcoc3RydWN0 IGRwdV9od19kc3BwICpkc3BwLCBzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKQotewotCXUzMiBz dHJlbmd0aCA9IDAsIGkgPSAwOwotCXN0cnVjdCBkcHVfaHdfbWl4ZXIgKmh3X2xtOwotCi0JaHdf bG0gPSBjZmctPmh3X2NmZy0+bWl4ZXJfaW5mbzsKLQlpZiAoKGNmZy0+aHdfY2ZnLT5udW1fb2Zf bWl4ZXJzID09IDIpICYmIGh3X2xtLT5jZmcucmlnaHRfbWl4ZXIpIHsKLQkJLyogdGhpcyBBRCBj b3JlIGlzIHRoZSBzYWx2ZSBjb3JlICovCi0JCWZvciAoaSA9IERTUFBfMDsgaSA8IERTUFBfTUFY OyBpKyspIHsKLQkJCWlmIChpbmZvW2ldLmlzX21hc3RlcikgewotCQkJCXN0cmVuZ3RoID0gaW5m b1tpXS5sYXN0X3N0cjsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCXN0cmVu Z3RoID0gRFBVX1JFR19SRUFEKCZkc3BwLT5odywKLQkJCQlkc3BwLT5jYXAtPnNibGstPmFkLmJh c2UgKyAweDRjKTsKLQkJcHJfZGVidWcoIiVzKCk6IEFEIHN0cmVuZ3RoID0gJWRcbiIsIF9fZnVu Y19fLCBzdHJlbmd0aCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWQ0X21v ZGVfc2V0dXAoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLCBlbnVtIGFkNF9tb2RlcyBtb2RlKQot ewotCXUzMiBibGtfb2Zmc2V0OwotCi0JYmxrX29mZnNldCA9IDB4MDQ7Ci0JaWYgKG1vZGUgPT0g QUQ0X09GRikgewotCQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5h ZC5iYXNlICsgYmxrX29mZnNldCwKLQkJCQkweDEwMSk7Ci0JCWluZm9bZHNwcC0+aWR4XS5zdGF0 ZSA9IGFkNF9zdGF0ZV9pZGxlOwotCQlwcl9kZWJ1ZygiJXMoKTogQUQgc3RhdGUgbW92ZSB0byBp ZGxlXG4iLCBfX2Z1bmNfXyk7Ci0JCWluZm9bZHNwcC0+aWR4XS5jb21wbGV0ZWRfb3BzX21hc2sg PSAwOwotCQkvKiByZXNldCBsYXN0IHZhbHVlcyB0byByZWdpc3RlciBkZWZhdWx0ICovCi0JCWlu Zm9bZHNwcC0+aWR4XS5sYXN0X2Fzc2VydGl2ZSA9IDB4ODA7Ci0JCWluZm9bZHNwcC0+aWR4XS5j YWNoZWRfYXNzZXJ0aXZlID0gVThfTUFYOwotCQlpbmZvW2RzcHAtPmlkeF0ubGFzdF9ibCA9IDB4 RkZGRjsKLQkJaW5mb1tkc3BwLT5pZHhdLmNhY2hlZF9ibCA9IFU2NF9NQVg7Ci0JCWluZm9bZHNw cC0+aWR4XS5sYXN0X2FscyA9IDB4MDsKLQkJaW5mb1tkc3BwLT5pZHhdLmNhY2hlZF9hbHMgPSBV NjRfTUFYOwotCX0gZWxzZSB7Ci0JCWlmIChpbmZvW2RzcHAtPmlkeF0uc3RhdGUgPT0gYWQ0X3N0 YXRlX2lkbGUpIHsKLQkJCWluZm9bZHNwcC0+aWR4XS5mcmFtZV9jb3VudCA9IDA7Ci0JCQlpbmZv W2RzcHAtPmlkeF0uc3RhdGUgPSBhZDRfc3RhdGVfc3RhcnR1cDsKLQkJCXByX2RlYnVnKCIlcygp OiBBRCBzdGF0ZSBtb3ZlIHRvIHN0YXJ0dXBcbiIsIF9fZnVuY19fKTsKLQkJfQotCQlEUFVfUkVH X1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwK LQkJCQkweDEwMCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWQ0X2luaXRf c2V0dXAoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLCBzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2Zn KQotewotCXUzMiBmcmFtZV9zdGFydCwgZnJhbWVfZW5kLCBwcm9jX3N0YXJ0LCBwcm9jX2VuZDsK LQlzdHJ1Y3QgZHB1X2h3X21peGVyICpod19sbTsKLQl1MzIgYmxrX29mZnNldCwgdGlsZV9jdGws IHZhbCwgaTsKLQl1MzIgb2ZmMSwgb2ZmMiwgb2ZmMywgb2ZmNCwgb2ZmNSwgb2ZmNjsKLQlzdHJ1 Y3QgZHJtX21zbV9hZDRfaW5pdCAqaW5pdDsKLQotCWlmICghY2ZnLT5od19jZmctPnBheWxvYWQp IHsKLQkJaW5mb1tkc3BwLT5pZHhdLmNvbXBsZXRlZF9vcHNfbWFzayAmPSB+YWQ0X2luaXQ7Ci0J CXJldHVybiAwOwotCX0KLQotCWlmIChjZmctPmh3X2NmZy0+bGVuICE9IHNpemVvZihzdHJ1Y3Qg ZHJtX21zbV9hZDRfaW5pdCkpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIHN6IHBhcmFtIGV4cCAl emQgZ2l2ZW4gJWQgY2ZnICVwS1xuIiwKLQkJCXNpemVvZihzdHJ1Y3QgZHJtX21zbV9hZDRfaW5p dCksIGNmZy0+aHdfY2ZnLT5sZW4sCi0JCQljZmctPmh3X2NmZy0+cGF5bG9hZCk7Ci0JCXJldHVy biAtRUlOVkFMOwotCX0KLQotCWh3X2xtID0gY2ZnLT5od19jZmctPm1peGVyX2luZm87Ci0JaWYg KGNmZy0+aHdfY2ZnLT5udW1fb2ZfbWl4ZXJzID09IDEpIHsKLQkJZnJhbWVfc3RhcnQgPSAwOwot CQlmcmFtZV9lbmQgPSAweGZmZmY7Ci0JCXByb2Nfc3RhcnQgPSAwOwotCQlwcm9jX2VuZCA9IDB4 ZmZmZjsKLQkJdGlsZV9jdGwgPSAwOwotCQlpbmZvW2RzcHAtPmlkeF0uaXNfbWFzdGVyID0gdHJ1 ZTsKLQl9IGVsc2UgewotCQl0aWxlX2N0bCA9IDB4NTsKLQkJaWYgKGh3X2xtLT5jZmcucmlnaHRf bWl4ZXIpIHsKLQkJCWZyYW1lX3N0YXJ0ID0gKGNmZy0+aHdfY2ZnLT5kaXNwbGF5aCA+PiAxKSAt Ci0JCQkJTUVSR0VfV0lEVEhfUklHSFQ7Ci0JCQlmcmFtZV9lbmQgPSBjZmctPmh3X2NmZy0+ZGlz cGxheWggLSAxOwotCQkJcHJvY19zdGFydCA9IChjZmctPmh3X2NmZy0+ZGlzcGxheWggPj4gMSk7 Ci0JCQlwcm9jX2VuZCA9IGZyYW1lX2VuZDsKLQkJCXRpbGVfY3RsIHw9IDB4MTA7Ci0JCQlpbmZv W2RzcHAtPmlkeF0uaXNfbWFzdGVyID0gZmFsc2U7Ci0JCX0gZWxzZSB7Ci0JCQlmcmFtZV9zdGFy dCA9IDA7Ci0JCQlmcmFtZV9lbmQgPSAoY2ZnLT5od19jZmctPmRpc3BsYXloID4+IDEpICsKLQkJ CQlNRVJHRV9XSURUSF9MRUZUOwotCQkJcHJvY19zdGFydCA9IDA7Ci0JCQlwcm9jX2VuZCA9IChj ZmctPmh3X2NmZy0+ZGlzcGxheWggPj4gMSkgLSAxOwotCQkJdGlsZV9jdGwgfD0gMHgxMDsKLQkJ CWluZm9bZHNwcC0+aWR4XS5pc19tYXN0ZXIgPSB0cnVlOwotCQl9Ci0JfQotCi0JaW5pdCA9IGNm Zy0+aHdfY2ZnLT5wYXlsb2FkOwotCi0JaW5mb1tkc3BwLT5pZHhdLmZybXRfbW9kZSA9IChpbml0 LT5pbml0X3BhcmFtXzAwOSAmIChCSVQoMTQpIC0gMSkpOwotCi0JYmxrX29mZnNldCA9IDB4YzsK LQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxr X29mZnNldCwKLQkJCWluaXQtPmluaXRfcGFyYW1fMDEwKTsKLQotCWluaXQtPmluaXRfcGFyYW1f MDEyID0gY2ZnLT5od19jZmctPmRpc3BsYXl2ICYgKEJJVCgxNykgLSAxKTsKLQlpbml0LT5pbml0 X3BhcmFtXzAxMSA9IGNmZy0+aHdfY2ZnLT5kaXNwbGF5aCAmIChCSVQoMTcpIC0gMSk7Ci0JYmxr X29mZnNldCA9IDB4MTA7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Js ay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoKGluaXQtPmluaXRfcGFyYW1fMDExIDw8IDE2 KSB8IGluaXQtPmluaXRfcGFyYW1fMDEyKSk7Ci0KLQlibGtfb2Zmc2V0ID0gMHgxNDsKLQlEUFVf UkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNl dCwKLQkJCXRpbGVfY3RsKTsKLQotCWJsa19vZmZzZXQgPSAweDQ0OwotCURQVV9SRUdfV1JJVEUo JmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJKCgo KGluaXQtPmluaXRfcGFyYW1fMDEzKSAmIChCSVQoMTcpIC0gMSkpIDw8IDE2KSB8Ci0JCQkoaW5p dC0+aW5pdF9wYXJhbV8wMTQgJiAoQklUKDE3KSAtIDEpKSkpOwotCi0JYmxrX29mZnNldCA9IDB4 NWM7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSAr IGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wMTUgJiAoQklUKDE2KSAtIDEpKSk7 Ci0JYmxrX29mZnNldCA9IDB4NjA7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNh cC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wMTYg JiAoQklUKDgpIC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0gMHg2NDsKLQlEUFVfUkVHX1dSSVRFKCZk c3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJCShpbml0 LT5pbml0X3BhcmFtXzAxNyAmIChCSVQoMTIpIC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0gMHg2ODsK LQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxr X29mZnNldCwKLQkJCShpbml0LT5pbml0X3BhcmFtXzAxOCAmIChCSVQoMTIpIC0gMSkpKTsKLQli bGtfb2Zmc2V0ID0gMHg2YzsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5z YmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJCShpbml0LT5pbml0X3BhcmFtXzAxOSAmIChC SVQoMTIpIC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0gMHg3MDsKLQlEUFVfUkVHX1dSSVRFKCZkc3Bw LT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJCShpbml0LT5p bml0X3BhcmFtXzAyMCAmIChCSVQoMTYpIC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0gMHg3NDsKLQlE UFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29m ZnNldCwKLQkJCShpbml0LT5pbml0X3BhcmFtXzAyMSAmIChCSVQoOCkgLSAxKSkpOwotCWJsa19v ZmZzZXQgPSAweDc4OwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGst PmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJKGluaXQtPmluaXRfcGFyYW1fMDIyICYgKEJJVCg4 KSAtIDEpKSk7Ci0JYmxrX29mZnNldCA9IDB4N2M7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcs IGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9w YXJhbV8wMjMgJiAoQklUKDE2KSAtIDEpKSk7Ci0JYmxrX29mZnNldCA9IDB4ODA7Ci0JRFBVX1JF R19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQs Ci0JCSgoKGluaXQtPmluaXRfcGFyYW1fMDI0ICYgKEJJVCgxNikgLSAxKSkgPDwgMTYpIHwKLQkJ KChpbml0LT5pbml0X3BhcmFtXzAyNSAmIChCSVQoMTYpIC0gMSkpKSkpOwotCWJsa19vZmZzZXQg PSAweDg0OwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJh c2UgKyBibGtfb2Zmc2V0LAotCQkoKChpbml0LT5pbml0X3BhcmFtXzAyNiAmIChCSVQoMTYpIC0g MSkpIDw8IDE2KSB8Ci0JCSgoaW5pdC0+aW5pdF9wYXJhbV8wMjcgJiAoQklUKDE2KSAtIDEpKSkp KTsKLQotCWJsa19vZmZzZXQgPSAweDkwOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3Bw LT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJKGluaXQtPmluaXRfcGFyYW1f MDI4ICYgKEJJVCgxNikgLSAxKSkpOwotCWJsa19vZmZzZXQgPSAweDk0OwotCURQVV9SRUdfV1JJ VEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJ KGluaXQtPmluaXRfcGFyYW1fMDI5ICYgKEJJVCgxNikgLSAxKSkpOwotCi0JYmxrX29mZnNldCA9 IDB4OTg7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFz ZSArIGJsa19vZmZzZXQsCi0JCSgoKGluaXQtPmluaXRfcGFyYW1fMDM1ICYgKEJJVCgxNikgLSAx KSkgPDwgMTYpIHwKLQkJKChpbml0LT5pbml0X3BhcmFtXzAzMCAmIChCSVQoMTYpIC0gMSkpKSkp OwotCi0JYmxrX29mZnNldCA9IDB4OWM7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAt PmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCSgoKGluaXQtPmluaXRfcGFyYW1f MDMyICYgKEJJVCgxNikgLSAxKSkgPDwgMTYpIHwKLQkJKChpbml0LT5pbml0X3BhcmFtXzAzMSAm IChCSVQoMTYpIC0gMSkpKSkpOwotCWJsa19vZmZzZXQgPSAweGEwOwotCURQVV9SRUdfV1JJVEUo JmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkoKChp bml0LT5pbml0X3BhcmFtXzAzNCAmIChCSVQoMTYpIC0gMSkpIDw8IDE2KSB8Ci0JCSgoaW5pdC0+ aW5pdF9wYXJhbV8wMzMgJiAoQklUKDE2KSAtIDEpKSkpKTsKLQotCWJsa19vZmZzZXQgPSAweGI0 OwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBi bGtfb2Zmc2V0LAotCQkJKGluaXQtPmluaXRfcGFyYW1fMDM2ICYgKEJJVCg4KSAtIDEpKSk7Ci0J YmxrX29mZnNldCA9IDB4Y2M7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+ c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wMzcgJiAo QklUKDgpIC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0gMHhjMDsKLQlEUFVfUkVHX1dSSVRFKCZkc3Bw LT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJCShpbml0LT5p bml0X3BhcmFtXzAzOCAmIChCSVQoOCkgLSAxKSkpOwotCWJsa19vZmZzZXQgPSAweGQ4OwotCURQ VV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zm c2V0LAotCQkJKGluaXQtPmluaXRfcGFyYW1fMDM5ICYgKEJJVCg4KSAtIDEpKSk7Ci0KLQlibGtf b2Zmc2V0ID0gMHhlODsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxr LT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJCShpbml0LT5pbml0X3BhcmFtXzA0MCAmIChCSVQo MTYpIC0gMSkpKTsKLQotCWJsa19vZmZzZXQgPSAweGY0OwotCURQVV9SRUdfV1JJVEUoJmRzcHAt Pmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJKGluaXQtPmlu aXRfcGFyYW1fMDQxICYgKEJJVCg4KSAtIDEpKSk7Ci0KLQlibGtfb2Zmc2V0ID0gMHgxMDA7Ci0J RFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19v ZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wNDIgJiAoQklUKDE2KSAtIDEpKSk7Ci0KLQli bGtfb2Zmc2V0ID0gMHgxMGM7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+ c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wNDMgJiAo QklUKDgpIC0gMSkpKTsKLQotCWJsa19vZmZzZXQgPSAweDEyMDsKLQlEUFVfUkVHX1dSSVRFKCZk c3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJCShpbml0 LT5pbml0X3BhcmFtXzA0NCAmIChCSVQoMTYpIC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0gMHgxMjQ7 Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJs a19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wNDUgJiAoQklUKDE2KSAtIDEpKSk7Ci0K LQlibGtfb2Zmc2V0ID0gMHgxMjg7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNh cC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wNDYg JiAoQklUKDEpIC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0gMHgxMmM7Ci0JRFBVX1JFR19XUklURSgm ZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5p dC0+aW5pdF9wYXJhbV8wNDcgJiAoQklUKDgpIC0gMSkpKTsKLQotCWluZm9bZHNwcC0+aWR4XS5p cmR4X2NvbnRyb2xfMCA9IChpbml0LT5pbml0X3BhcmFtXzA0OCAmIChCSVQoNSkgLSAxKSk7Ci0K LQlibGtfb2Zmc2V0ID0gMHgxNDA7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNh cC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wNDkg JiAoQklUKDgpIC0gMSkpKTsKLQotCWJsa19vZmZzZXQgPSAweDE0NDsKLQlEUFVfUkVHX1dSSVRF KCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJCShp bml0LT5pbml0X3BhcmFtXzA1MCAmIChCSVQoOCkgLSAxKSkpOwotCWJsa19vZmZzZXQgPSAweDE0 ODsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsg YmxrX29mZnNldCwKLQkJKCgoaW5pdC0+aW5pdF9wYXJhbV8wNTEgJiAoQklUKDgpIC0gMSkpIDw8 IDgpIHwKLQkJKChpbml0LT5pbml0X3BhcmFtXzA1MiAmIChCSVQoOCkgLSAxKSkpKSk7Ci0KLQli bGtfb2Zmc2V0ID0gMHgxNGM7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+ c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wNTMgJiAo QklUKDEwKSAtIDEpKSk7Ci0JYmxrX29mZnNldCA9IDB4MTUwOwotCURQVV9SRUdfV1JJVEUoJmRz cHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJKGluaXQt PmluaXRfcGFyYW1fMDU0ICYgKEJJVCgxMCkgLSAxKSkpOwotCWJsa19vZmZzZXQgPSAweDE1NDsK LQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxr X29mZnNldCwKLQkJCShpbml0LT5pbml0X3BhcmFtXzA1NSAmIChCSVQoOCkgLSAxKSkpOwotCi0J YmxrX29mZnNldCA9IDB4MTU4OwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAt PnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJKGluaXQtPmluaXRfcGFyYW1fMDU2ICYg KEJJVCg4KSAtIDEpKSk7Ci0JYmxrX29mZnNldCA9IDB4MTY0OwotCURQVV9SRUdfV1JJVEUoJmRz cHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJKGluaXQt PmluaXRfcGFyYW1fMDU3ICYgKEJJVCg4KSAtIDEpKSk7Ci0JYmxrX29mZnNldCA9IDB4MTY4Owot CURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtf b2Zmc2V0LAotCQkJKGluaXQtPmluaXRfcGFyYW1fMDU4ICYgKEJJVCg0KSAtIDEpKSk7Ci0KLQli bGtfb2Zmc2V0ID0gMHgxN2M7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+ c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoZnJhbWVfc3RhcnQgJiAoQklUKDE2KSAt IDEpKSk7Ci0JYmxrX29mZnNldCA9IDB4MTgwOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBk c3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJKGZyYW1lX2VuZCAmIChC SVQoMTYpIC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0gMHgxODQ7Ci0JRFBVX1JFR19XUklURSgmZHNw cC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkocHJvY19z dGFydCAmIChCSVQoMTYpIC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0gMHgxODg7Ci0JRFBVX1JFR19X UklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0J CQkocHJvY19lbmQgJiAoQklUKDE2KSAtIDEpKSk7Ci0KLQlibGtfb2Zmc2V0ID0gMHgxOGM7Ci0J RFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19v ZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wNTkgJiAoQklUKDQpIC0gMSkpKTsKLQotCWJs a19vZmZzZXQgPSAweDE5MDsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5z YmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJKCgoaW5pdC0+aW5pdF9wYXJhbV8wNjEgJiAo QklUKDgpIC0gMSkpIDw8IDgpIHwKLQkJKChpbml0LT5pbml0X3BhcmFtXzA2MCAmIChCSVQoOCkg LSAxKSkpKSk7Ci0KLQlibGtfb2Zmc2V0ID0gMHgxOTQ7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+ aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5p dF9wYXJhbV8wNjIgJiAoQklUKDEwKSAtIDEpKSk7Ci0KLQlibGtfb2Zmc2V0ID0gMHgxYTA7Ci0J RFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19v ZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wNjMgJiAoQklUKDEwKSAtIDEpKSk7Ci0JYmxr X29mZnNldCA9IDB4MWE0OwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNi bGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJKGluaXQtPmluaXRfcGFyYW1fMDY0ICYgKEJJ VCgxMCkgLSAxKSkpOwotCWJsa19vZmZzZXQgPSAweDFhODsKLQlEUFVfUkVHX1dSSVRFKCZkc3Bw LT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJCShpbml0LT5p bml0X3BhcmFtXzA2NSAmIChCSVQoMTApIC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0gMHgxYWM7Ci0J RFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19v ZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wNjYgJiAoQklUKDgpIC0gMSkpKTsKLQlibGtf b2Zmc2V0ID0gMHgxYjA7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Js ay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wNjcgJiAoQklU KDgpIC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0gMHgxYjQ7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+ aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5p dF9wYXJhbV8wNjggJiAoQklUKDYpIC0gMSkpKTsKLQotCWJsa19vZmZzZXQgPSAweDQ2MDsKLQlE UFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29m ZnNldCwKLQkJCShpbml0LT5pbml0X3BhcmFtXzA2OSAmIChCSVQoMTYpIC0gMSkpKTsKLQlibGtf b2Zmc2V0ID0gMHg0NjQ7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Js ay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wNzAgJiAoQklU KDEwKSAtIDEpKSk7Ci0JYmxrX29mZnNldCA9IDB4NDY4OwotCURQVV9SRUdfV1JJVEUoJmRzcHAt Pmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJKGluaXQtPmlu aXRfcGFyYW1fMDcxICYgKEJJVCgxMCkgLSAxKSkpOwotCWJsa19vZmZzZXQgPSAweDQ2YzsKLQlE UFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29m ZnNldCwKLQkJCShpbml0LT5pbml0X3BhcmFtXzA3MiAmIChCSVQoMTApIC0gMSkpKTsKLQlibGtf b2Zmc2V0ID0gMHg0NzA7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Js ay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wNzMgJiAoQklU KDgpIC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0gMHg0NzQ7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+ aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5p dF9wYXJhbV8wNzQgJiAoQklUKDEwKSAtIDEpKSk7Ci0JYmxrX29mZnNldCA9IDB4NDc4OwotCURQ VV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zm c2V0LAotCQkJKGluaXQtPmluaXRfcGFyYW1fMDc1ICYgKEJJVCgxMCkgLSAxKSkpOwotCi0Jb2Zm MSA9IDB4MWMwOwotCW9mZjIgPSAweDIxMDsKLQlvZmYzID0gMHgyNjA7Ci0Jb2ZmNCA9IDB4MmIw OwotCW9mZjUgPSAweDM4MDsKLQlvZmY2ID0gMHgzZDA7Ci0JZm9yIChpID0gMDsgaSA8IEFENF9M VVRfR1JQMF9TSVpFIC0gMTsgaSA9IGkgKyAyKSB7Ci0JCXZhbCA9IChpbml0LT5pbml0X3BhcmFt XzAwMVtpXSAmIChCSVQoMTYpIC0gMSkpOwotCQl2YWwgfD0gKChpbml0LT5pbml0X3BhcmFtXzAw MVtpICsgMV0gJiAoQklUKDE2KSAtIDEpKQotCQkJCTw8IDE2KTsKLQkJRFBVX1JFR19XUklURSgm ZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIG9mZjEsIHZhbCk7Ci0JCW9mZjEg Kz0gNDsKLQotCQl2YWwgPSAoaW5pdC0+aW5pdF9wYXJhbV8wMDJbaV0gJiAoQklUKDE2KSAtIDEp KTsKLQkJdmFsIHw9ICgoaW5pdC0+aW5pdF9wYXJhbV8wMDJbaSArIDFdICYgKEJJVCgxNikgLSAx KSkKLQkJCQk8PCAxNik7Ci0JCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNi bGstPmFkLmJhc2UgKyBvZmYyLCB2YWwpOwotCQlvZmYyICs9IDQ7Ci0KLQkJdmFsID0gKGluaXQt PmluaXRfcGFyYW1fMDAzW2ldICYgKEJJVCgxNikgLSAxKSk7Ci0JCXZhbCB8PSAoKGluaXQtPmlu aXRfcGFyYW1fMDAzW2kgKyAxXSAmIChCSVQoMTYpIC0gMSkpCi0JCQkJPDwgMTYpOwotCQlEUFVf UkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgb2ZmMywgdmFs KTsKLQkJb2ZmMyArPSA0OwotCi0JCXZhbCA9IChpbml0LT5pbml0X3BhcmFtXzAwNFtpXSAmIChC SVQoMTYpIC0gMSkpOwotCQl2YWwgfD0gKChpbml0LT5pbml0X3BhcmFtXzAwNFtpICsgMV0gJiAo QklUKDE2KSAtIDEpKQotCQkJCTw8IDE2KTsKLQkJRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRz cHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIG9mZjQsIHZhbCk7Ci0JCW9mZjQgKz0gNDsKLQotCQl2 YWwgPSAoaW5pdC0+aW5pdF9wYXJhbV8wMDdbaV0gJiAoQklUKDE2KSAtIDEpKTsKLQkJdmFsIHw9 ICgoaW5pdC0+aW5pdF9wYXJhbV8wMDdbaSArIDFdICYKLQkJCQkoQklUKDE2KSAtIDEpKSA8PCAx Nik7Ci0JCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2Ug KyBvZmY1LCB2YWwpOwotCQlvZmY1ICs9IDQ7Ci0KLQkJdmFsID0gKGluaXQtPmluaXRfcGFyYW1f MDA4W2ldICYgKEJJVCgxMikgLSAxKSk7Ci0JCXZhbCB8PSAoKGluaXQtPmluaXRfcGFyYW1fMDA4 W2kgKyAxXSAmCi0JCQkJKEJJVCgxMikgLSAxKSkgPDwgMTYpOwotCQlEUFVfUkVHX1dSSVRFKCZk c3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgb2ZmNiwgdmFsKTsKLQkJb2ZmNiAr PSA0OwotCX0KLQkvKiB3cml0ZSBsYXN0IGluZGV4IGRhdGEgKi8KLQlpID0gQUQ0X0xVVF9HUlAw X1NJWkUgLSAxOwotCXZhbCA9ICgoaW5pdC0+aW5pdF9wYXJhbV8wMDFbaV0gJiAoQklUKDE2KSAt IDEpKSA8PCAxNik7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+ YWQuYmFzZSArIG9mZjEsIHZhbCk7Ci0JdmFsID0gKChpbml0LT5pbml0X3BhcmFtXzAwMltpXSAm IChCSVQoMTYpIC0gMSkpIDw8IDE2KTsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+ Y2FwLT5zYmxrLT5hZC5iYXNlICsgb2ZmMiwgdmFsKTsKLQl2YWwgPSAoKGluaXQtPmluaXRfcGFy YW1fMDAzW2ldICYgKEJJVCgxNikgLSAxKSkgPDwgMTYpOwotCURQVV9SRUdfV1JJVEUoJmRzcHAt Pmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBvZmYzLCB2YWwpOwotCXZhbCA9ICgoaW5p dC0+aW5pdF9wYXJhbV8wMDRbaV0gJiAoQklUKDE2KSAtIDEpKSA8PCAxNik7Ci0JRFBVX1JFR19X UklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIG9mZjQsIHZhbCk7Ci0J dmFsID0gKChpbml0LT5pbml0X3BhcmFtXzAwN1tpXSAmIChCSVQoMTYpIC0gMSkpIDw8IDE2KTsK LQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgb2Zm NSwgdmFsKTsKLQl2YWwgPSAoKGluaXQtPmluaXRfcGFyYW1fMDA4W2ldICYgKEJJVCgxMikgLSAx KSkgPDwgMTYpOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFk LmJhc2UgKyBvZmY2LCB2YWwpOwotCi0Jb2ZmMSA9IDB4MzAwOwotCW9mZjIgPSAweDM0MDsKLQlm b3IgKGkgPSAwOyBpIDwgQUQ0X0xVVF9HUlAxX1NJWkU7IGkgPSBpICsgMikgewotCQl2YWwgPSAo aW5pdC0+aW5pdF9wYXJhbV8wMDVbaV0gJiAoQklUKDE2KSAtIDEpKTsKLQkJdmFsIHw9ICgoaW5p dC0+aW5pdF9wYXJhbV8wMDVbaSArIDFdICYKLQkJCQkoQklUKDE2KSAtIDEpKSA8PCAxNik7Ci0J CURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBvZmYx LCB2YWwpOwotCQlvZmYxICs9IDQ7Ci0KLQkJdmFsID0gKGluaXQtPmluaXRfcGFyYW1fMDA2W2ld ICYgKEJJVCgxNikgLSAxKSk7Ci0JCXZhbCB8PSAoKGluaXQtPmluaXRfcGFyYW1fMDA2W2kgKyAx XSAmIChCSVQoMTYpIC0gMSkpCi0JCQkJPDwgMTYpOwotCQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5o dywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgb2ZmMiwgdmFsKTsKLQkJb2ZmMiArPSA0Owot CX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFkNF9jZmdfc2V0dXAoc3RydWN0IGRw dV9od19kc3BwICpkc3BwLCBzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKQotewotCXUzMiBibGtf b2Zmc2V0LCB2YWw7Ci0Jc3RydWN0IGRybV9tc21fYWQ0X2NmZyAqYWRfY2ZnOwotCi0JaWYgKCFj ZmctPmh3X2NmZy0+cGF5bG9hZCkgewotCQlpbmZvW2RzcHAtPmlkeF0uY29tcGxldGVkX29wc19t YXNrICY9IH5hZDRfY2ZnOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoY2ZnLT5od19jZmctPmxl biAhPSBzaXplb2Yoc3RydWN0IGRybV9tc21fYWQ0X2NmZykpIHsKLQkJRFJNX0VSUk9SKCJpbnZh bGlkIHN6IHBhcmFtIGV4cCAlemQgZ2l2ZW4gJWQgY2ZnICVwS1xuIiwKLQkJCXNpemVvZihzdHJ1 Y3QgZHJtX21zbV9hZDRfY2ZnKSwgY2ZnLT5od19jZmctPmxlbiwKLQkJCWNmZy0+aHdfY2ZnLT5w YXlsb2FkKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWFkX2NmZyA9IGNmZy0+aHdfY2ZnLT5w YXlsb2FkOwotCi0JYmxrX29mZnNldCA9IDB4MTg7Ci0JdmFsID0gKGFkX2NmZy0+Y2ZnX3BhcmFt XzAwMiAmIChCSVQoMTYpIC0gMSkpOwotCXZhbCB8PSAoKGFkX2NmZy0+Y2ZnX3BhcmFtXzAwMSAm IChCSVQoMTYpIC0gMSkpIDw8IDE2KTsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+ Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwgdmFsKTsKLQlibGtfb2Zmc2V0ICs9IDQ7 Ci0JdmFsID0gKGFkX2NmZy0+Y2ZnX3BhcmFtXzAwNCAmIChCSVQoMTYpIC0gMSkpOwotCXZhbCB8 PSAoKGFkX2NmZy0+Y2ZnX3BhcmFtXzAwMyAmIChCSVQoMTYpIC0gMSkpIDw8IDE2KTsKLQlEUFVf UkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNl dCwgdmFsKTsKLQotCWJsa19vZmZzZXQgPSAweDIwOwotCXZhbCA9IChhZF9jZmctPmNmZ19wYXJh bV8wMDUgJiAoQklUKDgpIC0gMSkpOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5j YXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LCB2YWwpOwotCWJsa19vZmZzZXQgPSAweDI0 OwotCXZhbCA9IChhZF9jZmctPmNmZ19wYXJhbV8wMDYgJiAoQklUKDcpIC0gMSkpOwotCURQVV9S RUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0 LCB2YWwpOwotCi0JaW5mb1tkc3BwLT5pZHhdLnRmX2N0cmwgPSAoYWRfY2ZnLT5jZmdfcGFyYW1f MDA4ICYgKEJJVCg4KSAtIDEpKTsKLQotCWJsa19vZmZzZXQgPSAweDM4OwotCXZhbCA9IChhZF9j ZmctPmNmZ19wYXJhbV8wMDkgJiAoQklUKDEwKSAtIDEpKTsKLQlEUFVfUkVHX1dSSVRFKCZkc3Bw LT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwgdmFsKTsKLQotCWJs a19vZmZzZXQgPSAweDNjOwotCXZhbCA9IChhZF9jZmctPmNmZ19wYXJhbV8wMTAgJiAoQklUKDEy KSAtIDEpKTsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5i YXNlICsgYmxrX29mZnNldCwgdmFsKTsKLQlibGtfb2Zmc2V0ICs9IDQ7Ci0JdmFsID0gKChhZF9j ZmctPmNmZ19wYXJhbV8wMTEgJiAoQklUKDE2KSAtIDEpKSA8PCAxNik7Ci0JdmFsIHw9IChhZF9j ZmctPmNmZ19wYXJhbV8wMTIgJiAoQklUKDE2KSAtIDEpKTsKLQlEUFVfUkVHX1dSSVRFKCZkc3Bw LT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwgdmFsKTsKLQotCWJs a19vZmZzZXQgPSAweDg4OwotCXZhbCA9IChhZF9jZmctPmNmZ19wYXJhbV8wMTMgJiAoQklUKDgp IC0gMSkpOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJh c2UgKyBibGtfb2Zmc2V0LCB2YWwpOwotCWJsa19vZmZzZXQgKz0gNDsKLQl2YWwgPSAoYWRfY2Zn LT5jZmdfcGFyYW1fMDE0ICYgKEJJVCgxNikgLSAxKSk7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+ aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0KLQlibGtf b2Zmc2V0ID0gMHhhNDsKLQl2YWwgPSAoYWRfY2ZnLT5jZmdfcGFyYW1fMDE1ICYgKEJJVCgxNikg LSAxKSk7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFz ZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0JYmxrX29mZnNldCArPSA0OwotCXZhbCA9IChhZF9jZmct PmNmZ19wYXJhbV8wMTYgJiAoQklUKDEwKSAtIDEpKTsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5o dywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwgdmFsKTsKLQlibGtfb2Zm c2V0ICs9IDQ7Ci0JdmFsID0gKGFkX2NmZy0+Y2ZnX3BhcmFtXzAxNyAmIChCSVQoMTYpIC0gMSkp OwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBi bGtfb2Zmc2V0LCB2YWwpOwotCWJsa19vZmZzZXQgKz0gNDsKLQl2YWwgPSAoYWRfY2ZnLT5jZmdf cGFyYW1fMDE4ICYgKEJJVCgxNikgLSAxKSk7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRz cHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0KLQlibGtfb2Zmc2V0 ID0gMHhjNDsKLQl2YWwgPSAoYWRfY2ZnLT5jZmdfcGFyYW1fMDE5ICYgKEJJVCgxNikgLSAxKSk7 Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJs a19vZmZzZXQsIHZhbCk7Ci0JYmxrX29mZnNldCArPSA0OwotCXZhbCA9IChhZF9jZmctPmNmZ19w YXJhbV8wMjAgJiAoQklUKDE2KSAtIDEpKTsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNw cC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwgdmFsKTsKLQotCWJsa19vZmZzZXQg PSAweGI4OwotCXZhbCA9IChhZF9jZmctPmNmZ19wYXJhbV8wMjEgJiAoQklUKDE2KSAtIDEpKTsK LQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxr X29mZnNldCwgdmFsKTsKLQlibGtfb2Zmc2V0ICs9IDQ7Ci0JdmFsID0gKGFkX2NmZy0+Y2ZnX3Bh cmFtXzAyMiAmIChCSVQoMTYpIC0gMSkpOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3Bw LT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LCB2YWwpOwotCi0JYmxrX29mZnNldCA9 IDB4ZDA7Ci0JdmFsID0gKGFkX2NmZy0+Y2ZnX3BhcmFtXzAyMyAmIChCSVQoMTYpIC0gMSkpOwot CURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtf b2Zmc2V0LCB2YWwpOwotCWJsa19vZmZzZXQgKz0gNDsKLQl2YWwgPSAoYWRfY2ZnLT5jZmdfcGFy YW1fMDI0ICYgKEJJVCgxNikgLSAxKSk7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAt PmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0KLQlibGtfb2Zmc2V0ID0g MHhkYzsKLQl2YWwgPSAoYWRfY2ZnLT5jZmdfcGFyYW1fMDI1ICYgKEJJVCgxNikgLSAxKSk7Ci0J dmFsIHw9ICgoYWRfY2ZnLT5jZmdfcGFyYW1fMDI2ICYgKEJJVCgxNikgLSAxKSkgPDwgMTYpOwot CURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtf b2Zmc2V0LCB2YWwpOwotCWJsa19vZmZzZXQgKz0gNDsKLQl2YWwgPSAoYWRfY2ZnLT5jZmdfcGFy YW1fMDI3ICYgKEJJVCgxNikgLSAxKSk7Ci0JdmFsIHw9ICgoYWRfY2ZnLT5jZmdfcGFyYW1fMDI4 ICYgKEJJVCgxNikgLSAxKSkgPDwgMTYpOwotCWJsa19vZmZzZXQgKz0gNDsKLQl2YWwgPSAoYWRf Y2ZnLT5jZmdfcGFyYW1fMDI5ICYgKEJJVCgxNikgLSAxKSk7Ci0JRFBVX1JFR19XUklURSgmZHNw cC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0KLQli bGtfb2Zmc2V0ID0gMHhlYzsKLQl2YWwgPSAoYWRfY2ZnLT5jZmdfcGFyYW1fMDMwICYgKEJJVCgx NikgLSAxKSk7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQu YmFzZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0JYmxrX29mZnNldCArPSA0OwotCXZhbCA9IChhZF9j ZmctPmNmZ19wYXJhbV8wMzEgJiAoQklUKDEyKSAtIDEpKTsKLQlEUFVfUkVHX1dSSVRFKCZkc3Bw LT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwgdmFsKTsKLQotCWJs a19vZmZzZXQgPSAweGY4OwotCXZhbCA9IChhZF9jZmctPmNmZ19wYXJhbV8wMzIgJiAoQklUKDEw KSAtIDEpKTsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5i YXNlICsgYmxrX29mZnNldCwgdmFsKTsKLQlibGtfb2Zmc2V0ICs9IDQ7Ci0JdmFsID0gKGFkX2Nm Zy0+Y2ZnX3BhcmFtXzAzMyAmIChCSVQoOCkgLSAxKSk7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+ aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0KLQlibGtf b2Zmc2V0ID0gMHgxMDQ7Ci0JdmFsID0gKGFkX2NmZy0+Y2ZnX3BhcmFtXzAzNCAmIChCSVQoMTYp IC0gMSkpOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJh c2UgKyBibGtfb2Zmc2V0LCB2YWwpOwotCWJsa19vZmZzZXQgKz0gNDsKLQl2YWwgPSAoYWRfY2Zn LT5jZmdfcGFyYW1fMDM1ICYgKEJJVCgxMikgLSAxKSk7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+ aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0KLQlibGtf b2Zmc2V0ID0gMHgxMTA7Ci0JdmFsID0gKGFkX2NmZy0+Y2ZnX3BhcmFtXzAzNiAmIChCSVQoMTIp IC0gMSkpOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJh c2UgKyBibGtfb2Zmc2V0LCB2YWwpOwotCWJsa19vZmZzZXQgKz0gNDsKLQl2YWwgPSAoYWRfY2Zn LT5jZmdfcGFyYW1fMDM3ICYgKEJJVCgxMikgLSAxKSk7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+ aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0JYmxrX29m ZnNldCArPSA0OwotCXZhbCA9IChhZF9jZmctPmNmZ19wYXJhbV8wMzggJiAoQklUKDgpIC0gMSkp OwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBi bGtfb2Zmc2V0LCB2YWwpOwotCWJsa19vZmZzZXQgKz0gNDsKLQl2YWwgPSAoYWRfY2ZnLT5jZmdf cGFyYW1fMDM5ICYgKEJJVCg4KSAtIDEpKTsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNw cC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwgdmFsKTsKLQotCWJsa19vZmZzZXQg PSAweDEzNDsKLQl2YWwgPSAoYWRfY2ZnLT5jZmdfcGFyYW1fMDQwICYgKEJJVCgxMikgLSAxKSk7 Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJs a19vZmZzZXQsIHZhbCk7Ci0KLQlpbmZvW2RzcHAtPmlkeF0udmNfY29udHJvbF8wID0gKGFkX2Nm Zy0+Y2ZnX3BhcmFtXzA0MSAmIChCSVQoNykgLSAxKSk7Ci0KLQlibGtfb2Zmc2V0ICs9IDE2MDsK LQl2YWwgPSAoYWRfY2ZnLT5jZmdfcGFyYW1fMDQzICYgKEJJVCgxMCkgLSAxKSk7Ci0JRFBVX1JF R19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQs IHZhbCk7Ci0KLQlibGtfb2Zmc2V0ID0gMHgxNmM7Ci0JdmFsID0gKGFkX2NmZy0+Y2ZnX3BhcmFt XzA0NCAmIChCSVQoOCkgLSAxKSk7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNh cC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0JYmxrX29mZnNldCArPSA0Owot CXZhbCA9IChhZF9jZmctPmNmZ19wYXJhbV8wNDUgJiAoQklUKDgpIC0gMSkpOwotCURQVV9SRUdf V1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LCB2 YWwpOwotCWJsa19vZmZzZXQgKz0gNDsKLQl2YWwgPSAoYWRfY2ZnLT5jZmdfcGFyYW1fMDQ2ICYg KEJJVCgxNikgLSAxKSk7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Js ay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGlj IGludCBhZDRfaW5wdXRfc2V0dXAoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3Qg ZHB1X2FkX2h3X2NmZyAqY2ZnKQotewotCXU2NCAqdmFsLCBhbHM7Ci0JdTMyIGJsa19vZmZzZXQ7 Ci0KLQlpZiAoY2ZnLT5od19jZmctPmxlbiAhPSBzaXplb2YodTY0KSAmJiBjZmctPmh3X2NmZy0+ cGF5bG9hZCkgewotCQlEUk1fRVJST1IoImludmFsaWQgc3ogcGFyYW0gZXhwICV6ZCBnaXZlbiAl ZCBjZmcgJXBLXG4iLAotCQkJc2l6ZW9mKHU2NCksIGNmZy0+aHdfY2ZnLT5sZW4sIGNmZy0+aHdf Y2ZnLT5wYXlsb2FkKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JYmxrX29mZnNldCA9IDB4 Mjg7Ci0JaWYgKGNmZy0+aHdfY2ZnLT5wYXlsb2FkKSB7Ci0JCXZhbCA9IGNmZy0+aHdfY2ZnLT5w YXlsb2FkOwotCX0gZWxzZSB7Ci0JCWFscyA9IDA7Ci0JCXZhbCA9ICZhbHM7Ci0JfQotCWluZm9b ZHNwcC0+aWR4XS5sYXN0X2FscyA9ICgqdmFsICYgKEJJVCgxNikgLSAxKSk7Ci0JaW5mb1tkc3Bw LT5pZHhdLmNvbXBsZXRlZF9vcHNfbWFzayB8PSBhZDRfaW5wdXQ7Ci0JRFBVX1JFR19XUklURSgm ZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQlpbmZv W2RzcHAtPmlkeF0ubGFzdF9hbHMpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFkNF9z dXNwZW5kX3NldHVwKHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCwKLQkJc3RydWN0IGRwdV9hZF9o d19jZmcgKmNmZykKLXsKLQlpbmZvW2RzcHAtPmlkeF0uc3RhdGUgPSBhZDRfc3RhdGVfaWRsZTsK LQlwcl9kZWJ1ZygiJXMoKTogQUQgc3RhdGUgbW92ZSB0byBpZGxlXG4iLCBfX2Z1bmNfXyk7Ci0J aW5mb1tkc3BwLT5pZHhdLmNvbXBsZXRlZF9vcHNfbWFzayA9IDA7Ci0JcmV0dXJuIDA7Ci19Ci0K LXN0YXRpYyBpbnQgYWQ0X21vZGVfc2V0dXBfY29tbW9uKHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNw cCwKLQkJc3RydWN0IGRwdV9hZF9od19jZmcgKmNmZykKLXsKLQotCWlmIChjZmctPmh3X2NmZy0+ bGVuICE9IHNpemVvZih1NjQpIHx8ICFjZmctPmh3X2NmZy0+cGF5bG9hZCkgewotCQlEUk1fRVJS T1IoImludmFsaWQgc3ogcGFyYW0gZXhwICV6ZCBnaXZlbiAlZCBjZmcgJXBLXG4iLAotCQkJc2l6 ZW9mKHU2NCksIGNmZy0+aHdfY2ZnLT5sZW4sIGNmZy0+aHdfY2ZnLT5wYXlsb2FkKTsKLQkJcmV0 dXJuIC1FSU5WQUw7Ci0JfQotCi0JaW5mb1tkc3BwLT5pZHhdLm1vZGUgPSAqKChlbnVtIGFkNF9t b2RlcyAqKQotCQkJCQkoY2ZnLT5od19jZmctPnBheWxvYWQpKTsKLQlpbmZvW2RzcHAtPmlkeF0u Y29tcGxldGVkX29wc19tYXNrIHw9IGFkNF9tb2RlOwotCi0JaWYgKEFEX1NUQVRFX1JFQURZKGlu Zm9bZHNwcC0+aWR4XS5jb21wbGV0ZWRfb3BzX21hc2spIHx8Ci0JCQkJCWluZm9bZHNwcC0+aWR4 XS5tb2RlID09IEFENF9PRkYpCi0JCWFkNF9tb2RlX3NldHVwKGRzcHAsIGluZm9bZHNwcC0+aWR4 XS5tb2RlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFkNF9pbml0X3NldHVwX2lk bGUoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2Zn KQotewotCWludCByZXQ7Ci0JdTMyIGJsa19vZmZzZXQ7Ci0KLQlpZiAoIWNmZy0+aHdfY2ZnLT5w YXlsb2FkKSB7Ci0JCWluZm9bZHNwcC0+aWR4XS5jb21wbGV0ZWRfb3BzX21hc2sgJj0gfmFkNF9p bml0OwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXQgPSBhZDRfaW5pdF9zZXR1cChkc3BwLCBjZmcp OwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBlbmFibGUgbWVtb3J5IGluaXRpYWxp emF0aW9uKi8KLQkvKiBmcm10IG1vZGUgKi8KLQlibGtfb2Zmc2V0ID0gMHg4OwotCURQVV9SRUdf V1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAot CQkJKGluZm9bZHNwcC0+aWR4XS5mcm10X21vZGUgJiAweDFmZmYpKTsKLQkvKiBtZW1vcnkgaW5p dCAqLwotCWJsa19vZmZzZXQgPSAweDQ1MDsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNw cC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwgMHgxKTsKLQotCS8qIGVuZm9yY2Ug MCBpbml0aWFsIHN0cmVuZ3RoIHdoZW4gcG93ZXJpbmcgdXAgQUQgY29uZmlnICovCi0JLyogaXJk eF9jb250cm9sXzAgKi8KLQlibGtfb2Zmc2V0ID0gMHgxM2M7Ci0JRFBVX1JFR19XUklURSgmZHNw cC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIDB4Nik7Ci0KLQlp bmZvW2RzcHAtPmlkeF0uY29tcGxldGVkX29wc19tYXNrIHw9IGFkNF9pbml0OwotCi0JaWYgKEFE X1NUQVRFX1JFQURZKGluZm9bZHNwcC0+aWR4XS5jb21wbGV0ZWRfb3BzX21hc2spKQotCQlhZDRf bW9kZV9zZXR1cChkc3BwLCBpbmZvW2RzcHAtPmlkeF0ubW9kZSk7Ci0KLQlyZXR1cm4gMDsKLX0K LQotc3RhdGljIGludCBhZDRfaW5pdF9zZXR1cF9ydW4oc3RydWN0IGRwdV9od19kc3BwICpkc3Bw LAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKQotewotCWludCByZXQ7Ci0JdTMyIGJsa19v ZmZzZXQ7Ci0KLQlpZiAoIWNmZy0+aHdfY2ZnLT5wYXlsb2FkKSB7Ci0JCWluZm9bZHNwcC0+aWR4 XS5jb21wbGV0ZWRfb3BzX21hc2sgJj0gfmFkNF9pbml0OwotCQlyZXR1cm4gMDsKLQl9Ci0KLQly ZXQgPSBhZDRfaW5pdF9zZXR1cChkc3BwLCBjZmcpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7 Ci0KLQkvKiBkaXNhYmxlIG1lbW9yeSBpbml0aWFsaXphdGlvbiovCi0JLyogZnJtdCBtb2RlICov Ci0JYmxrX29mZnNldCA9IDB4ODsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2Fw LT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJCShpbmZvW2RzcHAtPmlkeF0uZnJtdF9t b2RlIHwgMHgyMDAwKSk7Ci0JLyogbm8gbmVlZCB0byBleHBsaWNpdGx5IHNldCBtZW1vcnkgaW5p dGlhbGl6YXRpb24gc2VxdWVuY2UsCi0JICogc2luY2UgQUQgaHcgd2VyZSBub3QgcG93ZXJlZCBv ZmYuCi0JICovCi0KLQkvKiBpcmR4X2NvbnRyb2xfMCAqLwotCWJsa19vZmZzZXQgPSAweDEzYzsK LQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxr X29mZnNldCwKLQkJCWluZm9bZHNwcC0+aWR4XS5pcmR4X2NvbnRyb2xfMCk7Ci0KLQlyZXR1cm4g MDsKLX0KLQotc3RhdGljIGludCBhZDRfaW5pdF9zZXR1cF9pcGNyKHN0cnVjdCBkcHVfaHdfZHNw cCAqZHNwcCwKLQkJc3RydWN0IGRwdV9hZF9od19jZmcgKmNmZykKLXsKLQlpbnQgcmV0OwotCXUz MiBibGtfb2Zmc2V0OwotCi0JaWYgKCFjZmctPmh3X2NmZy0+cGF5bG9hZCkgewotCQlpbmZvW2Rz cHAtPmlkeF0uY29tcGxldGVkX29wc19tYXNrICY9IH5hZDRfaW5pdDsKLQkJcmV0dXJuIDA7Ci0J fQotCi0JcmV0ID0gYWQ0X2luaXRfc2V0dXAoZHNwcCwgY2ZnKTsKLQlpZiAocmV0KQotCQlyZXR1 cm4gcmV0OwotCS8qIG5vIG5lZWQgdG8gZXhwbGljaXRseSBzZXQgbWVtb3J5IGluaXRpYWxpemF0 aW9uIHNlcXVlbmNlLAotCSAqIHNpbmNlIHJlZ2lzdGVyIHJlc2V0IHZhbHVlcyBhcmUgdGhlIGNv cnJlY3QgY29uZmlndXJhdGlvbgotCSAqLwotCS8qIGZybXQgbW9kZSAqLwotCWJsa19vZmZzZXQg PSAweDg7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFz ZSArIGJsa19vZmZzZXQsCi0JCQkoaW5mb1tkc3BwLT5pZHhdLmZybXRfbW9kZSB8IDB4MjAwMCkp OwotCS8qIGlyZHhfY29udHJvbF8wICovCi0JYmxrX29mZnNldCA9IDB4MTNjOwotCURQVV9SRUdf V1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAot CQkJaW5mb1tkc3BwLT5pZHhdLmlyZHhfY29udHJvbF8wKTsKLQotCWluZm9bZHNwcC0+aWR4XS5j b21wbGV0ZWRfb3BzX21hc2sgfD0gYWQ0X2luaXQ7Ci0JaWYgKEFEX1NUQVRFX1JFQURZKGluZm9b ZHNwcC0+aWR4XS5jb21wbGV0ZWRfb3BzX21hc2spKQotCQlhZDRfbW9kZV9zZXR1cChkc3BwLCBp bmZvW2RzcHAtPmlkeF0ubW9kZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhZDRf Y2ZnX3NldHVwX2lkbGUoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2Fk X2h3X2NmZyAqY2ZnKQotewotCWludCByZXQ7Ci0JdTMyIGJsa19vZmZzZXQ7Ci0KLQlpZiAoIWNm Zy0+aHdfY2ZnLT5wYXlsb2FkKSB7Ci0JCWluZm9bZHNwcC0+aWR4XS5jb21wbGV0ZWRfb3BzX21h c2sgJj0gfmFkNF9jZmc7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldCA9IGFkNF9jZmdfc2V0dXAo ZHNwcCwgY2ZnKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JLyogZW5mb3JjZSAwIGlu aXRpYWwgc3RyZW5ndGggd2hlbiBwb3dlcmluZyB1cCBBRCBjb25maWcgKi8KLQkvKiBhc3NlcnRp dmVuZXNzICovCi0JYmxrX29mZnNldCA9IDB4MzA7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcs IGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIDB4MCk7Ci0JLyogdGYgY29u dHJvbCAqLwotCWJsa19vZmZzZXQgPSAweDM0OwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBk c3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LCAweDU1KTsKLQotCS8qIHZjX2Nv bnRyb2xfMCAqLwotCWJsa19vZmZzZXQgPSAweDEzODsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5o dywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJaW5mb1tkc3BwLT5p ZHhdLnZjX2NvbnRyb2xfMCk7Ci0KLQlpbmZvW2RzcHAtPmlkeF0uY29tcGxldGVkX29wc19tYXNr IHw9IGFkNF9jZmc7Ci0JaWYgKEFEX1NUQVRFX1JFQURZKGluZm9bZHNwcC0+aWR4XS5jb21wbGV0 ZWRfb3BzX21hc2spKQotCQlhZDRfbW9kZV9zZXR1cChkc3BwLCBpbmZvW2RzcHAtPmlkeF0ubW9k ZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWQ0X2NmZ19zZXR1cF9ydW4oc3RydWN0 IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKQotewotCWlu dCByZXQ7Ci0JdTMyIGJsa19vZmZzZXQ7Ci0KLQlpZiAoIWNmZy0+aHdfY2ZnLT5wYXlsb2FkKSB7 Ci0JCWluZm9bZHNwcC0+aWR4XS5jb21wbGV0ZWRfb3BzX21hc2sgJj0gfmFkNF9jZmc7Ci0JCXJl dHVybiAwOwotCX0KLQotCXJldCA9IGFkNF9jZmdfc2V0dXAoZHNwcCwgY2ZnKTsKLQlpZiAocmV0 KQotCQlyZXR1cm4gcmV0OwotCi0JLyogYXNzZXJ0aXZlbmVzcyAqLwotCWJsa19vZmZzZXQgPSAw eDMwOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2Ug KyBibGtfb2Zmc2V0LAotCQkJaW5mb1tkc3BwLT5pZHhdLmxhc3RfYXNzZXJ0aXZlKTsKLQkvKiB0 ZiBjb250cm9sICovCi0JYmxrX29mZnNldCA9IDB4MzQ7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+ aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCWluZm9bZHNwcC0+ aWR4XS50Zl9jdHJsKTsKLQkvKiB2Y19jb250cm9sXzAgKi8KLQlibGtfb2Zmc2V0ID0gMHgxMzg7 Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJs a19vZmZzZXQsCi0JCWluZm9bZHNwcC0+aWR4XS52Y19jb250cm9sXzApOwotCi0JcmV0dXJuIDA7 Ci19Ci0KLXN0YXRpYyBpbnQgYWQ0X2NmZ19zZXR1cF9pcGNyKHN0cnVjdCBkcHVfaHdfZHNwcCAq ZHNwcCwKLQkJc3RydWN0IGRwdV9hZF9od19jZmcgKmNmZykKLXsKLQlpbnQgcmV0OwotCXUzMiBi bGtfb2Zmc2V0OwotCi0JaWYgKCFjZmctPmh3X2NmZy0+cGF5bG9hZCkgewotCQlpbmZvW2RzcHAt PmlkeF0uY29tcGxldGVkX29wc19tYXNrICY9IH5hZDRfY2ZnOwotCQlyZXR1cm4gMDsKLQl9Ci0K LQlyZXQgPSBhZDRfY2ZnX3NldHVwKGRzcHAsIGNmZyk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJl dDsKLQotCS8qIGFzc2VydGl2ZW5lc3MgKi8KLQlibGtfb2Zmc2V0ID0gMHgzMDsKLQlEUFVfUkVH X1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwK LQkJCWluZm9bZHNwcC0+aWR4XS5sYXN0X2Fzc2VydGl2ZSk7Ci0KLQlpbmZvW2RzcHAtPmlkeF0u Y29tcGxldGVkX29wc19tYXNrIHw9IGFkNF9jZmc7Ci0JaWYgKEFEX1NUQVRFX1JFQURZKGluZm9b ZHNwcC0+aWR4XS5jb21wbGV0ZWRfb3BzX21hc2spKQotCQlhZDRfbW9kZV9zZXR1cChkc3BwLCBp bmZvW2RzcHAtPmlkeF0ubW9kZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWQ0X2lu cHV0X3NldHVwX2lkbGUoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2Fk X2h3X2NmZyAqY2ZnKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBhZDRfaW5wdXRfc2V0dXAoZHNw cCwgY2ZnKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JaW5mb1tkc3BwLT5pZHhdLmNv bXBsZXRlZF9vcHNfbWFzayB8PSBhZDRfaW5wdXQ7Ci0JaWYgKEFEX1NUQVRFX1JFQURZKGluZm9b ZHNwcC0+aWR4XS5jb21wbGV0ZWRfb3BzX21hc2spKQotCQlhZDRfbW9kZV9zZXR1cChkc3BwLCBp bmZvW2RzcHAtPmlkeF0ubW9kZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhZDRf aW5wdXRfc2V0dXBfaXBjcihzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsCi0JCXN0cnVjdCBkcHVf YWRfaHdfY2ZnICpjZmcpCi17Ci0JdTY0ICp2YWwsIGFsczsKLQl1MzIgYmxrX29mZnNldDsKLQot CWlmIChjZmctPmh3X2NmZy0+bGVuICE9IHNpemVvZih1NjQpICYmIGNmZy0+aHdfY2ZnLT5wYXls b2FkKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBzeiBwYXJhbSBleHAgJXpkIGdpdmVuICVkIGNm ZyAlcEtcbiIsCi0JCQlzaXplb2YodTY0KSwgY2ZnLT5od19jZmctPmxlbiwgY2ZnLT5od19jZmct PnBheWxvYWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlibGtfb2Zmc2V0ID0gMHgyODsK LQlpZiAoY2ZnLT5od19jZmctPnBheWxvYWQpIHsKLQkJdmFsID0gY2ZnLT5od19jZmctPnBheWxv YWQ7Ci0JfSBlbHNlIHsKLQkJYWxzID0gMDsKLQkJdmFsID0gJmFsczsKLQl9Ci0JaW5mb1tkc3Bw LT5pZHhdLmNhY2hlZF9hbHMgPSAqdmFsICYgKEJJVCgxNikgLSAxKTsKLQlpbmZvW2RzcHAtPmlk eF0uY29tcGxldGVkX29wc19tYXNrIHw9IGFkNF9pbnB1dDsKLQlEUFVfUkVHX1dSSVRFKCZkc3Bw LT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJCWluZm9bZHNw cC0+aWR4XS5sYXN0X2Fscyk7Ci0KLQlpZiAoQURfU1RBVEVfUkVBRFkoaW5mb1tkc3BwLT5pZHhd LmNvbXBsZXRlZF9vcHNfbWFzaykpCi0JCWFkNF9tb2RlX3NldHVwKGRzcHAsIGluZm9bZHNwcC0+ aWR4XS5tb2RlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFkNF9hc3NlcnRpdmVf c2V0dXAoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAq Y2ZnKQotewotCXU2NCAqdmFsLCBhc3NlcnRpdmU7Ci0JdTMyIGJsa19vZmZzZXQ7Ci0KLQlpZiAo Y2ZnLT5od19jZmctPmxlbiAhPSBzaXplb2YodTY0KSAmJiBjZmctPmh3X2NmZy0+cGF5bG9hZCkg ewotCQlEUk1fRVJST1IoImludmFsaWQgc3ogcGFyYW0gZXhwICV6ZCBnaXZlbiAlZCBjZmcgJXBL XG4iLAotCQkJc2l6ZW9mKHU2NCksIGNmZy0+aHdfY2ZnLT5sZW4sIGNmZy0+aHdfY2ZnLT5wYXls b2FkKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JYmxrX29mZnNldCA9IDB4MzA7Ci0JaWYg KGNmZy0+aHdfY2ZnLT5wYXlsb2FkKSB7Ci0JCXZhbCA9IGNmZy0+aHdfY2ZnLT5wYXlsb2FkOwot CX0gZWxzZSB7Ci0JCWFzc2VydGl2ZSA9IDA7Ci0JCXZhbCA9ICZhc3NlcnRpdmU7Ci0JfQotCi0J aW5mb1tkc3BwLT5pZHhdLmxhc3RfYXNzZXJ0aXZlID0gKnZhbCAmIChCSVQoOCkgLSAxKTsKLQlE UFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29m ZnNldCwKLQkJCShpbmZvW2RzcHAtPmlkeF0ubGFzdF9hc3NlcnRpdmUpKTsKLQlyZXR1cm4gMDsK LX0KLQotc3RhdGljIGludCBhZDRfYXNzZXJ0aXZlX3NldHVwX2lwY3Ioc3RydWN0IGRwdV9od19k c3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKQotewotCXU2NCAqdmFsLCBh c3NlcnRpdmU7Ci0JdTMyIGJsa19vZmZzZXQ7Ci0KLQlpZiAoY2ZnLT5od19jZmctPmxlbiAhPSBz aXplb2YodTY0KSAmJiBjZmctPmh3X2NmZy0+cGF5bG9hZCkgewotCQlEUk1fRVJST1IoImludmFs aWQgc3ogcGFyYW0gZXhwICV6ZCBnaXZlbiAlZCBjZmcgJXBLXG4iLAotCQkJc2l6ZW9mKHU2NCks IGNmZy0+aHdfY2ZnLT5sZW4sIGNmZy0+aHdfY2ZnLT5wYXlsb2FkKTsKLQkJcmV0dXJuIC1FSU5W QUw7Ci0JfQotCi0JYmxrX29mZnNldCA9IDB4MzA7Ci0JaWYgKGNmZy0+aHdfY2ZnLT5wYXlsb2Fk KSB7Ci0JCXZhbCA9IGNmZy0+aHdfY2ZnLT5wYXlsb2FkOwotCX0gZWxzZSB7Ci0JCWFzc2VydGl2 ZSA9IDA7Ci0JCXZhbCA9ICZhc3NlcnRpdmU7Ci0JfQotCi0JaW5mb1tkc3BwLT5pZHhdLmNhY2hl ZF9hc3NlcnRpdmUgPSAqdmFsICYgKEJJVCg4KSAtIDEpOwotCURQVV9SRUdfV1JJVEUoJmRzcHAt Pmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJaW5mb1tkc3Bw LT5pZHhdLmxhc3RfYXNzZXJ0aXZlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFk NF9iYWNrbGlnaHRfc2V0dXAoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1 X2FkX2h3X2NmZyAqY2ZnKQotewotCXU2NCAqdmFsLCBibDsKLQl1MzIgYmxrX29mZnNldDsKLQot CWlmIChjZmctPmh3X2NmZy0+bGVuICE9IHNpemVvZih1NjQpICYmIGNmZy0+aHdfY2ZnLT5wYXls b2FkKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBzeiBwYXJhbSBleHAgJXpkIGdpdmVuICVkIGNm ZyAlcEtcbiIsCi0JCQlzaXplb2YodTY0KSwgY2ZnLT5od19jZmctPmxlbiwgY2ZnLT5od19jZmct PnBheWxvYWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlibGtfb2Zmc2V0ID0gMHgyYzsK LQlpZiAoY2ZnLT5od19jZmctPnBheWxvYWQpIHsKLQkJdmFsID0gY2ZnLT5od19jZmctPnBheWxv YWQ7Ci0JfSBlbHNlIHsKLQkJYmwgPSAwOwotCQl2YWwgPSAmYmw7Ci0JfQotCi0JaW5mb1tkc3Bw LT5pZHhdLmxhc3RfYmwgPSAqdmFsICYgKEJJVCgxNikgLSAxKTsKLQlEUFVfUkVHX1dSSVRFKCZk c3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJCWluZm9b ZHNwcC0+aWR4XS5sYXN0X2JsKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhZDRfYmFj a2xpZ2h0X3NldHVwX2lwY3Ioc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1 X2FkX2h3X2NmZyAqY2ZnKQotewotCXU2NCAqdmFsLCBibDsKLQl1MzIgYmxrX29mZnNldDsKLQot CWlmIChjZmctPmh3X2NmZy0+bGVuICE9IHNpemVvZih1NjQpICYmIGNmZy0+aHdfY2ZnLT5wYXls b2FkKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBzeiBwYXJhbSBleHAgJXpkIGdpdmVuICVkIGNm ZyAlcEtcbiIsCi0JCQlzaXplb2YodTY0KSwgY2ZnLT5od19jZmctPmxlbiwgY2ZnLT5od19jZmct PnBheWxvYWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlibGtfb2Zmc2V0ID0gMHgyYzsK LQlpZiAoY2ZnLT5od19jZmctPnBheWxvYWQpIHsKLQkJdmFsID0gY2ZnLT5od19jZmctPnBheWxv YWQ7Ci0JfSBlbHNlIHsKLQkJYmwgPSAwOwotCQl2YWwgPSAmYmw7Ci0JfQotCi0JaW5mb1tkc3Bw LT5pZHhdLmNhY2hlZF9ibCA9ICp2YWwgJiAoQklUKDE2KSAtIDEpOwotCURQVV9SRUdfV1JJVEUo JmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJaW5m b1tkc3BwLT5pZHhdLmxhc3RfYmwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgZHB1X3JlYWRf aW50cl9yZXNwX2FkNChzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsIHUzMiBldmVudCwgdTMyICpy ZXNwKQotewotCWlmICghZHNwcCB8fCAhcmVzcCkgewotCQlEUk1fRVJST1IoImludmFsaWQgcGFy YW1zIGRzcHAgJXBLIHJlc3AgJXBLXG4iLCBkc3BwLCByZXNwKTsKLQkJcmV0dXJuOwotCX0KLQot CXN3aXRjaCAoZXZlbnQpIHsKLQljYXNlIEFENF9CQUNLTElHSFQ6Ci0JCSpyZXNwID0gRFBVX1JF R19SRUFEKCZkc3BwLT5odywKLQkJCQlkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyAweDQ4KTsK LQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgaW50IGFkNF9p cGNfc3VzcGVuZF9zZXR1cF9ydW4oc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3Qg ZHB1X2FkX2h3X2NmZyAqY2ZnKQotewotCXUzMiBzdHJlbmd0aCA9IDAsIGkgPSAwOwotCXN0cnVj dCBkcHVfaHdfbWl4ZXIgKmh3X2xtOwotCi0JaHdfbG0gPSBjZmctPmh3X2NmZy0+bWl4ZXJfaW5m bzsKLQlpZiAoKGNmZy0+aHdfY2ZnLT5udW1fb2ZfbWl4ZXJzID09IDIpICYmIGh3X2xtLT5jZmcu cmlnaHRfbWl4ZXIpIHsKLQkJLyogdGhpcyBBRCBjb3JlIGlzIHRoZSBzYWx2ZSBjb3JlICovCi0J CWZvciAoaSA9IERTUFBfMDsgaSA8IERTUFBfTUFYOyBpKyspIHsKLQkJCWlmIChpbmZvW2ldLmlz X21hc3RlcikgewotCQkJCXN0cmVuZ3RoID0gaW5mb1tpXS5sYXN0X3N0cjsKLQkJCQlicmVhazsK LQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCXN0cmVuZ3RoID0gRFBVX1JFR19SRUFEKCZkc3BwLT5o dywKLQkJCQlkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyAweDRjKTsKLQkJcHJfZGVidWcoIiVz KCk6IEFEIHN0cmVuZ3RoID0gJWRcbiIsIF9fZnVuY19fLCBzdHJlbmd0aCk7Ci0JfQotCWluZm9b ZHNwcC0+aWR4XS5sYXN0X3N0ciA9IHN0cmVuZ3RoOwotCWluZm9bZHNwcC0+aWR4XS5zdGF0ZSA9 IGFkNF9zdGF0ZV9pcGNzOwotCXByX2RlYnVnKCIlcygpOiBBRCBzdGF0ZSBtb3ZlIHRvIGlwY3Nc biIsIF9fZnVuY19fKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFkNF9pcGNfcmVz dW1lX3NldHVwX2lwY3Moc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2Fk X2h3X2NmZyAqY2ZnKQotewotCXUzMiBibGtfb2Zmc2V0LCB2YWw7Ci0KLQlpbmZvW2RzcHAtPmlk eF0uZnJhbWVfY291bnQgPSAwOwotCWluZm9bZHNwcC0+aWR4XS5zdGF0ZSA9IGFkNF9zdGF0ZV9p cGNyOwotCXByX2RlYnVnKCIlcygpOiBBRCBzdGF0ZSBtb3ZlIHRvIGlwY3JcbiIsIF9fZnVuY19f KTsKLQotCS8qIG5vIG5lZWQgdG8gcmV3cml0ZSBmcm10X21vZGUgYml0IDEzIGFuZCBtZW1faW5p dCwKLQkgKiBzaW5jZSB0aGUgZGVmYXVsdCByZWdpc3RlciB2YWx1ZXMgYXJlIGV4YWN0bHkgd2hh dAotCSAqIHdlIHdhbnRlZC4KLQkgKi8KLQotCS8qIGlwYyByZXN1bWUgd2l0aCBtYW51YWwgc3Ry ZW5ndGggKi8KLQkvKiB0ZiBjb250cm9sICovCi0JYmxrX29mZnNldCA9IDB4MzQ7Ci0JdmFsID0g KDB4NTUgJiAoQklUKDgpIC0gMSkpOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5j YXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LCB2YWwpOwotCS8qIHNldCBtYW51YWwgc3Ry ZW5ndGggKi8KLQlibGtfb2Zmc2V0ID0gMHgxNWM7Ci0JdmFsID0gKGluZm9bZHNwcC0+aWR4XS5s YXN0X3N0ciAmIChCSVQoMTApIC0gMSkpOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3Bw LT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LCB2YWwpOwotCS8qIGVuYWJsZSBtYW51 YWwgbW9kZSAqLwotCWJsa19vZmZzZXQgPSAweDEzODsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5o dywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwgMCk7Ci0KLQlyZXR1cm4g MDsKLX0KLQotc3RhdGljIGludCBhZDRfaXBjX3N1c3BlbmRfc2V0dXBfaXBjcihzdHJ1Y3QgZHB1 X2h3X2RzcHAgKmRzcHAsCi0JCXN0cnVjdCBkcHVfYWRfaHdfY2ZnICpjZmcpCi17Ci0JaW5mb1tk c3BwLT5pZHhdLnN0YXRlID0gYWQ0X3N0YXRlX2lwY3M7Ci0JcHJfZGVidWcoIiVzKCk6IEFEIHN0 YXRlIG1vdmUgdG8gaXBjc1xuIiwgX19mdW5jX18pOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMg aW50IGFkNF9pcGNfcmVzZXRfc2V0dXBfaXBjcihzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsCi0J CXN0cnVjdCBkcHVfYWRfaHdfY2ZnICpjZmcpCi17Ci0JaW50IHJldDsKLQl1MzIgc3RyZW5ndGgg PSAwLCBpID0gMDsKLQlzdHJ1Y3QgZHB1X2h3X21peGVyICpod19sbTsKLQotCS8qIFJlYWQgQUQg Y2FsY3VsYXRvciBzdHJlbmd0aCBvdXRwdXQgZHVyaW5nIHRoZSAyIGZyYW1lcyBvZiBtYW51YWwK LQkgKiBzdHJlbmd0aCBtb2RlLCBhbmQgYXNzaWduIHRoZSBzdHJlbmd0aCBvdXRwdXQgdG8gbGFz dF9zdHIKLQkgKiB3aGVuIGZyYW1lIGNvdW50IHJlYWNoZXMgQURfSVBDX0ZSQU1FX0NPVU5UIHRv IGF2b2lkIGZsaWNrZXJzCi0JICogY2F1c2VkIGJ5IHN0cmVuZ3RoIHdhcyBub3QgY29udmVyZ2Vk IGJlZm9yZSBlbnRlcmluZyBJUEMgbW9kZQotCSAqLwotCWh3X2xtID0gY2ZnLT5od19jZmctPm1p eGVyX2luZm87Ci0JaWYgKChjZmctPmh3X2NmZy0+bnVtX29mX21peGVycyA9PSAyKSAmJiBod19s bS0+Y2ZnLnJpZ2h0X21peGVyKSB7Ci0JCS8qIHRoaXMgQUQgY29yZSBpcyB0aGUgc2FsdmUgY29y ZSAqLwotCQlmb3IgKGkgPSBEU1BQXzA7IGkgPCBEU1BQX01BWDsgaSsrKSB7Ci0JCQlpZiAoaW5m b1tpXS5pc19tYXN0ZXIpIHsKLQkJCQlzdHJlbmd0aCA9IGluZm9baV0ubGFzdF9zdHI7Ci0JCQkJ YnJlYWs7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQlzdHJlbmd0aCA9IERQVV9SRUdfUkVBRCgm ZHNwcC0+aHcsCi0JCQkJZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgMHg0Yyk7Ci0JCXByX2Rl YnVnKCIlcygpOiBBRCBzdHJlbmd0aCA9ICVkXG4iLCBfX2Z1bmNfXywgc3RyZW5ndGgpOwotCX0K LQotCWlmIChpbmZvW2RzcHAtPmlkeF0uZnJhbWVfY291bnQgPT0gQURfSVBDX0ZSQU1FX0NPVU5U KSB7Ci0JCWluZm9bZHNwcC0+aWR4XS5zdGF0ZSA9IGFkNF9zdGF0ZV9ydW47Ci0JCXByX2RlYnVn KCIlcygpOiBBRCBzdGF0ZSBtb3ZlIHRvIHJ1blxuIiwgX19mdW5jX18pOwotCQlpbmZvW2RzcHAt PmlkeF0ubGFzdF9zdHIgPSBzdHJlbmd0aDsKLQkJcmV0ID0gYWQ0X2NmZ19pcGNfcmVzZXQoZHNw cCwgY2ZnKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfSBlbHNlIHsKLQkJaW5mb1tk c3BwLT5pZHhdLmZyYW1lX2NvdW50Kys7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBp bnQgYWQ0X2NmZ19pcGNfcmVzZXQoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3Qg ZHB1X2FkX2h3X2NmZyAqY2ZnKQotewotCXUzMiBibGtfb2Zmc2V0OwotCi0JLyogcmV2ZXJ0IG1h bnVhbCBzdHJlbmd0aCAqLwotCS8qIHRmIGNvbnRyb2wgKi8KLQlibGtfb2Zmc2V0ID0gMHgzNDsK LQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxr X29mZnNldCwKLQkJaW5mb1tkc3BwLT5pZHhdLnRmX2N0cmwpOwotCS8qIHZjX2NvbnRyb2xfMCAq LwotCWJsa19vZmZzZXQgPSAweDEzODsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+ Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJaW5mb1tkc3BwLT5pZHhdLnZjX2Nv bnRyb2xfMCk7Ci0KLQkvKiByZXNldCBjYWNoZWQgQUxTLCBiYWNrbGlnaHQgYW5kIGFzc2VydGl2 ZW5lc3MgKi8KLQlpZiAoaW5mb1tkc3BwLT5pZHhdLmNhY2hlZF9hbHMgIT0gVTY0X01BWCkgewot CQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywKLQkJCQlkc3BwLT5jYXAtPnNibGstPmFkLmJhc2Ug KyAweDI4LAotCQkJCWluZm9bZHNwcC0+aWR4XS5jYWNoZWRfYWxzKTsKLQkJaW5mb1tkc3BwLT5p ZHhdLmxhc3RfYWxzID0gaW5mb1tkc3BwLT5pZHhdLmNhY2hlZF9hbHM7Ci0JCWluZm9bZHNwcC0+ aWR4XS5jYWNoZWRfYWxzID0gVTY0X01BWDsKLQl9Ci0JaWYgKGluZm9bZHNwcC0+aWR4XS5jYWNo ZWRfYmwgIT0gVTY0X01BWCkgewotCQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywKLQkJCQlkc3Bw LT5jYXAtPnNibGstPmFkLmJhc2UgKyAweDJjLAotCQkJCWluZm9bZHNwcC0+aWR4XS5jYWNoZWRf YmwpOwotCQlpbmZvW2RzcHAtPmlkeF0ubGFzdF9ibCA9IGluZm9bZHNwcC0+aWR4XS5jYWNoZWRf Ymw7Ci0JCWluZm9bZHNwcC0+aWR4XS5jYWNoZWRfYmwgPSBVNjRfTUFYOwotCX0KLQlpZiAoaW5m b1tkc3BwLT5pZHhdLmNhY2hlZF9hc3NlcnRpdmUgIT0gVThfTUFYKSB7Ci0JCURQVV9SRUdfV1JJ VEUoJmRzcHAtPmh3LAotCQkJCWRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIDB4MzAsCi0JCQkJ aW5mb1tkc3BwLT5pZHhdLmNhY2hlZF9hc3NlcnRpdmUpOwotCQlpbmZvW2RzcHAtPmlkeF0ubGFz dF9hc3NlcnRpdmUgPQotCQkJCWluZm9bZHNwcC0+aWR4XS5jYWNoZWRfYXNzZXJ0aXZlOwotCQlp bmZvW2RzcHAtPmlkeF0uY2FjaGVkX2Fzc2VydGl2ZSA9IFU4X01BWDsKLQl9Ci0KLQlyZXR1cm4g MDsKLX0KLQotc3RhdGljIGludCBhZDRfaXBjX3Jlc2V0X3NldHVwX3N0YXJ0dXAoc3RydWN0IGRw dV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKQotewotCXUzMiBi bGtfb2Zmc2V0OwotCi0JaWYgKGluZm9bZHNwcC0+aWR4XS5mcmFtZV9jb3VudCA9PSBBRF9JUENf RlJBTUVfQ09VTlQpIHsKLQkJaW5mb1tkc3BwLT5pZHhdLnN0YXRlID0gYWQ0X3N0YXRlX3J1bjsK LQkJcHJfZGVidWcoIiVzKCk6IEFEIHN0YXRlIG1vdmUgdG8gcnVuXG4iLCBfX2Z1bmNfXyk7Ci0K LQkJLyogcmV2ZXJ0IGVuZm9yY2UgMCBpbml0aWFsIHN0cmVuZ3RoICovCi0JCS8qIGlyZHhfY29u dHJvbF8wICovCi0JCWJsa19vZmZzZXQgPSAweDEzYzsKLQkJRFBVX1JFR19XUklURSgmZHNwcC0+ aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkJaW5mb1tkc3Bw LT5pZHhdLmlyZHhfY29udHJvbF8wKTsKLQkJLyogYXNzZXJ0aXZlbmVzcyAqLwotCQlibGtfb2Zm c2V0ID0gMHgzMDsKLQkJRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+ YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkJaW5mb1tkc3BwLT5pZHhdLmxhc3RfYXNzZXJ0aXZl KTsKLQkJLyogdGYgY29udHJvbCAqLwotCQlibGtfb2Zmc2V0ID0gMHgzNDsKLQkJRFBVX1JFR19X UklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0J CQkJaW5mb1tkc3BwLT5pZHhdLnRmX2N0cmwpOwotCX0gZWxzZSB7Ci0JCWluZm9bZHNwcC0+aWR4 XS5mcmFtZV9jb3VudCsrOwotCX0KLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nLmMKaW5kZXggOGU3NzljMC4uN2E3YzAyYSAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cu YworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2F0YWxvZy5jCkBA IC0zMiwxNCArMzIsNiBAQAogI2RlZmluZSBNSVhFUl9TRE04NDVfTUFTSyBcCiAJKEJJVChEUFVf TUlYRVJfU09VUkNFU1BMSVQpIHwgQklUKERQVV9ESU1fTEFZRVIpKQogCi0jZGVmaW5lIERTUFBf U0RNODQ1X01BU0sgXAotCShCSVQoRFBVX0RTUFBfSUdDKSB8IEJJVChEUFVfRFNQUF9QQ0MpIHwg QklUKERQVV9EU1BQX0dDKSB8XAotCUJJVChEUFVfRFNQUF9IU0lDKSB8IEJJVChEUFVfRFNQUF9H QU1VVCkgfCBCSVQoRFBVX0RTUFBfSElTVCkgfFwKLQlCSVQoRFBVX0RTUFBfTUVNQ09MT1IpIHwg QklUKERQVV9EU1BQX1NJWFpPTkUpIHwgQklUKERQVV9EU1BQX1ZMVVQpKQotCi0jZGVmaW5lIERT UFBfQURfU0RNODQ1X01BU0sgXAotCShEU1BQX1NETTg0NV9NQVNLIHwgQklUKERQVV9EU1BQX0FE KSkKLQogI2RlZmluZSBQSU5HUE9OR19TRE04NDVfTUFTSyBCSVQoRFBVX1BJTkdQT05HX0RJVEhF UikKIAogI2RlZmluZSBQSU5HUE9OR19TRE04NDVfU1BMSVRfTUFTSyBcCkBAIC0yNDgsNzYgKzI0 MCwzMyBAQAogCX0sCiB9OwogCi0jZGVmaW5lIExNX0JMSyhfbmFtZSwgX2lkLCBfYmFzZSwgX2Rz cHAsIF9kcywgX3BwLCBfbG1wYWlyKSBcCisjZGVmaW5lIExNX0JMSyhfbmFtZSwgX2lkLCBfYmFz ZSwgX2RzLCBfcHAsIF9sbXBhaXIpIFwKIAl7IFwKIAkubmFtZSA9IF9uYW1lLCAuaWQgPSBfaWQs IFwKIAkuYmFzZSA9IF9iYXNlLCAubGVuID0gMHgzMjAsIFwKIAkuZmVhdHVyZXMgPSBNSVhFUl9T RE04NDVfTUFTSywgXAogCS5zYmxrID0gJnNkbTg0NV9sbV9zYmxrLCBcCi0JLmRzcHAgPSBfZHNw cCwgLmRzID0gX2RzLCBcCisJLmRzID0gX2RzLCBcCiAJLnBpbmdwb25nID0gX3BwLCBcCiAJLmxt X3BhaXJfbWFzayA9ICgxIDw8IF9sbXBhaXIpIFwKIAl9CisKIHN0YXRpYyBzdHJ1Y3QgZHB1X2xt X2NmZyBzZG04NDVfbG1bXSA9IHsKLQlMTV9CTEsoImxtXzAiLCBMTV8wLCAweDQ1MDAwLCBEU1BQ XzAsCisJTE1fQkxLKCJsbV8wIiwgTE1fMCwgMHg0NTAwMCwKIAkJRFNfMCwgUElOR1BPTkdfMCwg TE1fMSksCi0JTE1fQkxLKCJsbV8xIiwgTE1fMSwgMHg0NjAwMCwgRFNQUF8xLAorCUxNX0JMSygi bG1fMSIsIExNXzEsIDB4NDYwMDAsCiAJCURTXzEsIFBJTkdQT05HXzEsIExNXzApLAotCUxNX0JM SygibG1fMiIsIExNXzIsIDB4NDcwMDAsIERTUFBfMiwKKwlMTV9CTEsoImxtXzIiLCBMTV8yLCAw eDQ3MDAwLAogCQlEU19NQVgsIFBJTkdQT05HXzIsIExNXzUpLAotCUxNX0JMSygibG1fMyIsIExN XzMsIDB4MCwgRFNQUF9NQVgsCisJTE1fQkxLKCJsbV8zIiwgTE1fMywgMHgwLAogCQlEU19NQVgs IFBJTkdQT05HX01BWCwgMCksCi0JTE1fQkxLKCJsbV80IiwgTE1fNCwgMHgwLCBEU1BQX01BWCwK KwlMTV9CTEsoImxtXzQiLCBMTV80LCAweDAsCiAJCURTX01BWCwgUElOR1BPTkdfTUFYLCAwKSwK LQlMTV9CTEsoImxtXzUiLCBMTV81LCAweDRhMDAwLCBEU1BQXzMsCisJTE1fQkxLKCJsbV81Iiwg TE1fNSwgMHg0YTAwMCwKIAkJRFNfTUFYLCBQSU5HUE9OR18zLCBMTV8yKSwKIH07CiAKIC8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ci0gKiBEU1BQIHN1YiBibG9ja3MgY29uZmlnCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzdHJ1Y3QgZHB1X2Rz cHBfdG9wX2NmZyBzZG04NDVfZHNwcF90b3AgPSB7Ci0JLm5hbWUgPSAiZHNwcF90b3AiLCAuYmFz ZSA9IDB4MTMwMCwgLmxlbiA9IDB4YwotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBkcHVfZHNw cF9zdWJfYmxrcyBzZG04NDVfZHNwcF9zYmxrID0gewotCS5pZ2MgPSB7LmlkID0gRFBVX0RTUFBf SUdDLCAuYmFzZSA9IDB4MCwKLQkJLmxlbiA9IDB4MCwgLnZlcnNpb24gPSAweDMwMDAxfSwKLQku cGNjID0gey5pZCA9IERQVV9EU1BQX1BDQywgLmJhc2UgPSAweDE3MDAsCi0JCS5sZW4gPSAweDAs IC52ZXJzaW9uID0gMHg0MDAwMH0sCi0JLmdjID0gey5pZCA9IERQVV9EU1BQX0dDLCAuYmFzZSA9 IDB4MTdjMCwKLQkJLmxlbiA9IDB4MCwgLnZlcnNpb24gPSAweDEwMDA4fSwKLQkuaHNpYyA9IHsu aWQgPSBEUFVfRFNQUF9IU0lDLCAuYmFzZSA9IDB4ODAwLAotCQkubGVuID0gMHgwLCAudmVyc2lv biA9IDB4MTAwMDd9LAotCS5tZW1jb2xvciA9IHsuaWQgPSBEUFVfRFNQUF9NRU1DT0xPUiwgLmJh c2UgPSAweDg4MCwKLQkJLmxlbiA9IDB4MCwgLnZlcnNpb24gPSAweDEwMDA3fSwKLQkuc2l4em9u ZSA9IHsuaWQgPSBEUFVfRFNQUF9TSVhaT05FLCAuYmFzZSA9IDB4OTAwLAotCQkubGVuID0gMHgw LCAudmVyc2lvbiA9IDB4MTAwMDd9LAotCS5nYW11dCA9IHsuaWQgPSBEUFVfRFNQUF9HQU1VVCwg LmJhc2UgPSAweDEwMDAsCi0JCS5sZW4gPSAweDAsIC52ZXJzaW9uID0gMHg0MDAwMH0sCi0JLmhp c3QgPSB7LmlkID0gRFBVX0RTUFBfSElTVCwgLmJhc2UgPSAweDgwMCwKLQkJLmxlbiA9IDB4MCwg LnZlcnNpb24gPSAweDEwMDA3fSwKLQkvKiBUT0RPIDogTW92ZSBBRCBvdXQgb2YgRFNQUCBjb25m aWcgKi8KLQkudmx1dCA9IHsuaWQgPSBEUFVfRFNQUF9WTFVULCAuYmFzZSA9IDB4YTAwLAotCQku bGVuID0gMHgwLCAudmVyc2lvbiA9IDB4MTAwMDh9LAotfTsKLQotI2RlZmluZSBEU1BQX0JMSyhf bmFtZSwgX2lkLCBfYmFzZSkgXAotCXtcCi0JLm5hbWUgPSBfbmFtZSwgLmlkID0gX2lkLCBcCi0J LmJhc2UgPSBfYmFzZSwgLmxlbiA9IDB4MTdlMCwgXAotCS5mZWF0dXJlcyA9IERTUFBfU0RNODQ1 X01BU0ssIFwKLQkuc2JsayA9ICZzZG04NDVfZHNwcF9zYmxrLCBcCi0JfQotCi1zdGF0aWMgc3Ry dWN0IGRwdV9kc3BwX2NmZyBzZG04NDVfZHNwcFtdID0gewotCURTUFBfQkxLKCJkc3BwXzAiLCBE U1BQXzAsIDB4NTUwMDApLAotCURTUFBfQkxLKCJkc3BwXzEiLCBEU1BQXzEsIDB4NTcwMDApLAot CURTUFBfQkxLKCJkc3BwXzIiLCBEU1BQXzIsIDB4NTkwMDApLAotCURTUFBfQkxLKCJkc3BwXzMi LCBEU1BQXzMsIDB4NWIwMDApLAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIERTIHN1YiBibG9ja3MgY29uZmln CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHB1X2RzX3RvcF9jZmcgc2RtODQ1X2RzX3Rv cCA9IHsKQEAgLTU2MCw5ICs1MDksNiBAQCB2b2lkIHNkbTg0NV9jZmdfaW5pdChzdHJ1Y3QgZHB1 X21kc3NfY2ZnICpkcHVfY2ZnKQogCQkuc3NwcCA9IHNkbTg0NV9zc3BwLAogCQkubWl4ZXJfY291 bnQgPSBBUlJBWV9TSVpFKHNkbTg0NV9sbSksCiAJCS5taXhlciA9IHNkbTg0NV9sbSwKLQkJLmRz cHBfdG9wID0gc2RtODQ1X2RzcHBfdG9wLAotCQkuZHNwcF9jb3VudCA9IEFSUkFZX1NJWkUoc2Rt ODQ1X2RzcHApLAotCQkuZHNwcCA9IHNkbTg0NV9kc3BwLAogCQkuZHNfY291bnQgPSBBUlJBWV9T SVpFKHNkbTg0NV9kcyksCiAJCS5kcyA9IHNkbTg0NV9kcywKIAkJLnBpbmdwb25nX2NvdW50ID0g QVJSQVlfU0laRShzZG04NDVfcHApLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9od19jYXRhbG9nLmgKaW5kZXggMzliZWMwYS4uY2Q0ZWQ4YiAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cuaAorKysgYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2F0YWxvZy5oCkBAIC02MywxMSArNjMsNiBA QAogCiAjZGVmaW5lIENSVENfRFVBTF9NSVhFUlMJMgogCi0jZGVmaW5lIERQVV9DT0xPUl9QUk9D RVNTX1ZFUihNQUpPUiwgTUlOT1IpIFwKLQkJKCgoKE1BSk9SKSAmIDB4RkZGRikgPDwgMTYpIHwg KCgoTUlOT1IpICYgMHhGRkZGKSkpCi0jZGVmaW5lIERQVV9DT0xPUl9QUk9DRVNTX01BSk9SKHZl cnNpb24pICgoKHZlcnNpb24pICYgMHhGRkZGMDAwMCkgPj4gMTYpCi0jZGVmaW5lIERQVV9DT0xP Ul9QUk9DRVNTX01JTk9SKHZlcnNpb24pICgodmVyc2lvbikgJiAweEZGRkYpCi0KICNkZWZpbmUg TUFYX1hJTl9DT1VOVCAxNgogCiAvKioKQEAgLTEwOSwxMCArMTA0LDYgQEAgZW51bSB7CiAgKiBA RFBVX1NTUFBfU0NBTEVSX1JHQiwgICAgIFJHQiBTY2FsZXIsIHN1cHBvcnRlZCBieSBSR0IgcGlw ZXMKICAqIEBEUFVfU1NQUF9DU0MsICAgICAgICAgICAgU3VwcG9ydCBvZiBDb2xvciBzcGFjZSBj b252ZXJpb24KICAqIEBEUFVfU1NQUF9DU0NfMTBCSVQsICAgICAgU3VwcG9ydCBvZiAxMC1iaXQg Q29sb3Igc3BhY2UgY29udmVyc2lvbgotICogQERQVV9TU1BQX0hTSUMsICAgICAgICAgICBHbG9i YWwgSFNJQyBjb250cm9sCi0gKiBARFBVX1NTUFBfTUVNQ09MT1IgICAgICAgIE1lbW9yeSBDb2xv ciBTdXBwb3J0Ci0gKiBARFBVX1NTUFBfSUdDLCAgICAgICAgICAgIEludmVyc2UgZ2FtbWEgY29y cmVjdGlvbgotICogQERQVV9TU1BQX1BDQywgICAgICAgICAgICBDb2xvciBjb3JyZWN0aW9uIHN1 cHBvcnQKICAqIEBEUFVfU1NQUF9DVVJTT1IsICAgICAgICAgU1NQUCBjYW4gYmUgdXNlZCBhcyBh IGN1cnNvciBsYXllcgogICogQERQVV9TU1BQX1FPUywgICAgICAgICAgICBTU1BQIHN1cHBvcnQg UW9TIGNvbnRyb2wsIGRhbmdlci9zYWZlL2NyZXEKICAqIEBEUFVfU1NQUF9RT1NfOExWTCwgICAg ICAgU1NQUCBzdXBwb3J0IDgtbGV2ZWwgUW9TIGNvbnRyb2wKQEAgLTEzMSwxMCArMTIyLDYgQEAg ZW51bSB7CiAJRFBVX1NTUFBfU0NBTEVSX1JHQiwKIAlEUFVfU1NQUF9DU0MsCiAJRFBVX1NTUFBf Q1NDXzEwQklULAotCURQVV9TU1BQX0hTSUMsCi0JRFBVX1NTUFBfTUVNQ09MT1IsCi0JRFBVX1NT UFBfSUdDLAotCURQVV9TU1BQX1BDQywKIAlEUFVfU1NQUF9DVVJTT1IsCiAJRFBVX1NTUFBfUU9T LAogCURQVV9TU1BQX1FPU184TFZMLApAQCAtMTY0LDM2ICsxNTEsNiBAQCBlbnVtIHsKIH07CiAK IC8qKgotICogRFNQUCBzdWItYmxvY2tzCi0gKiBARFBVX0RTUFBfSUdDICAgICAgICAgICAgIERT UFAgSW52ZXJzZSBnYW1tYSBjb3JyZWN0aW9uIGJsb2NrCi0gKiBARFBVX0RTUFBfUENDICAgICAg ICAgICAgIFBhbmVsIGNvbG9yIGNvcnJlY3Rpb24gYmxvY2sKLSAqIEBEUFVfRFNQUF9HQyAgICAg ICAgICAgICAgR2FtbWEgY29ycmVjdGlvbiBibG9jawotICogQERQVV9EU1BQX0hTSUMgICAgICAg ICAgICBHbG9iYWwgSFNJQyBibG9jawotICogQERQVV9EU1BQX01FTUNPTE9SICAgICAgICBNZW1v cnkgQ29sb3IgYmxvY2sKLSAqIEBEUFVfRFNQUF9TSVhaT05FICAgICAgICAgU2l4IHpvbmUgYmxv Y2sKLSAqIEBEUFVfRFNQUF9HQU1VVCAgICAgICAgICAgR2FtdXQgYmxvYwotICogQERQVV9EU1BQ X0RJVEhFUiAgICAgICAgICBEaXRoZXIgYmxvY2sKLSAqIEBEUFVfRFNQUF9ISVNUICAgICAgICAg ICAgSGlzdG9ncmFtIGJsb2NrCi0gKiBARFBVX0RTUFBfVkxVVCAgICAgICAgICAgIFBBIFZMVVQg YmxvY2sKLSAqIEBEUFVfRFNQUF9BRCAgICAgICAgICAgICAgQUQgYmxvY2sKLSAqIEBEUFVfRFNQ UF9NQVggICAgICAgICAgICAgbWF4aW11bSB2YWx1ZQotICovCi1lbnVtIHsKLQlEUFVfRFNQUF9J R0MgPSAweDEsCi0JRFBVX0RTUFBfUENDLAotCURQVV9EU1BQX0dDLAotCURQVV9EU1BQX0hTSUMs Ci0JRFBVX0RTUFBfTUVNQ09MT1IsCi0JRFBVX0RTUFBfU0lYWk9ORSwKLQlEUFVfRFNQUF9HQU1V VCwKLQlEUFVfRFNQUF9ESVRIRVIsCi0JRFBVX0RTUFBfSElTVCwKLQlEUFVfRFNQUF9WTFVULAot CURQVV9EU1BQX0FELAotCURQVV9EU1BQX01BWAotfTsKLQotLyoqCiAgKiBQSU5HUE9ORyBzdWIt YmxvY2tzCiAgKiBARFBVX1BJTkdQT05HX1RFICAgICAgICAgVGVhciBjaGVjayBibG9jawogICog QERQVV9QSU5HUE9OR19URTIgICAgICAgIEFkZGl0aW9uYWwgdGVhciBjaGVjayBibG9jayBmb3Ig c3BsaXQgcGlwZXMKQEAgLTQ2OCwyMCArNDI1LDYgQEAgc3RydWN0IGRwdV9sbV9zdWJfYmxrcyB7 CiAJc3RydWN0IGRwdV9wcF9ibGsgZ2M7CiB9OwogCi1zdHJ1Y3QgZHB1X2RzcHBfc3ViX2Jsa3Mg ewotCXN0cnVjdCBkcHVfcHBfYmxrIGlnYzsKLQlzdHJ1Y3QgZHB1X3BwX2JsayBwY2M7Ci0Jc3Ry dWN0IGRwdV9wcF9ibGsgZ2M7Ci0Jc3RydWN0IGRwdV9wcF9ibGsgaHNpYzsKLQlzdHJ1Y3QgZHB1 X3BwX2JsayBtZW1jb2xvcjsKLQlzdHJ1Y3QgZHB1X3BwX2JsayBzaXh6b25lOwotCXN0cnVjdCBk cHVfcHBfYmxrIGdhbXV0OwotCXN0cnVjdCBkcHVfcHBfYmxrIGRpdGhlcjsKLQlzdHJ1Y3QgZHB1 X3BwX2JsayBoaXN0OwotCXN0cnVjdCBkcHVfcHBfYmxrIGFkOwotCXN0cnVjdCBkcHVfcHBfYmxr IHZsdXQ7Ci19OwotCiBzdHJ1Y3QgZHB1X3Bpbmdwb25nX3N1Yl9ibGtzIHsKIAlzdHJ1Y3QgZHB1 X3BwX2JsayB0ZTsKIAlzdHJ1Y3QgZHB1X3BwX2JsayB0ZTI7CkBAIC01ODMsNyArNTI2LDYgQEAg c3RydWN0IGRwdV9zc3BwX2NmZyB7CiAgKiBAYmFzZSAgICAgICAgICAgICAgIHJlZ2lzdGVyIG9m ZnNldCBvZiB0aGlzIGJsb2NrCiAgKiBAZmVhdHVyZXMgICAgICAgICAgIGJpdCBtYXNrIGlkZW50 aWZ5aW5nIHN1Yi1ibG9ja3MvZmVhdHVyZXMKICAqIEBzYmxrOiAgICAgICAgICAgICAgTE0gU3Vi LWJsb2NrcyBpbmZvcm1hdGlvbgotICogQGRzcHA6ICAgICAgICAgICAgICBJRCBvZiBjb25uZWN0 ZWQgRFNQUCwgRFNQUF9NQVggaWYgdW5zdXBwb3J0ZWQKICAqIEBwaW5ncG9uZzogICAgICAgICAg SUQgb2YgY29ubmVjdGVkIFBpbmdQb25nLCBQSU5HUE9OR19NQVggaWYgdW5zdXBwb3J0ZWQKICAq IEBkczogICAgICAgICAgICAgICAgSUQgb2YgY29ubmVjdGVkIERTLCBEU19NQVggaWYgdW5zdXBw b3J0ZWQKICAqIEBsbV9wYWlyX21hc2s6ICAgICAgQml0bWFzayBvZiBMTXMgdGhhdCBjYW4gYmUg Y29udHJvbGxlZCBieSBzYW1lIENUTApAQCAtNTkxLDM3ICs1MzMsMTIgQEAgc3RydWN0IGRwdV9z c3BwX2NmZyB7CiBzdHJ1Y3QgZHB1X2xtX2NmZyB7CiAJRFBVX0hXX0JMS19JTkZPOwogCWNvbnN0 IHN0cnVjdCBkcHVfbG1fc3ViX2Jsa3MgKnNibGs7Ci0JdTMyIGRzcHA7CiAJdTMyIHBpbmdwb25n OwogCXUzMiBkczsKIAl1bnNpZ25lZCBsb25nIGxtX3BhaXJfbWFzazsKIH07CiAKIC8qKgotICog c3RydWN0IGRwdV9kc3BwX2NmZyAtIGluZm9ybWF0aW9uIG9mIERTUFAgdG9wIGJsb2NrCi0gKiBA aWQgICAgICAgICAgICAgICAgIGVudW0gaWRlbnRpZnlpbmcgdGhpcyBibG9jawotICogQGJhc2Ug ICAgICAgICAgICAgICByZWdpc3RlciBvZmZzZXQgb2YgdGhpcyBibG9jawotICogQGZlYXR1cmVz ICAgICAgICAgICBiaXQgbWFzayBpZGVudGlmeWluZyBzdWItYmxvY2tzL2ZlYXR1cmVzCi0gKiAg ICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZCBieSB0aGlzIGJsb2NrCi0gKi8KLXN0cnVjdCBk cHVfZHNwcF90b3BfY2ZnICB7Ci0JRFBVX0hXX0JMS19JTkZPOwotfTsKLQotLyoqCi0gKiBzdHJ1 Y3QgZHB1X2RzcHBfY2ZnIC0gaW5mb3JtYXRpb24gb2YgRFNQUCBibG9ja3MKLSAqIEBpZCAgICAg ICAgICAgICAgICAgZW51bSBpZGVudGlmeWluZyB0aGlzIGJsb2NrCi0gKiBAYmFzZSAgICAgICAg ICAgICAgIHJlZ2lzdGVyIG9mZnNldCBvZiB0aGlzIGJsb2NrCi0gKiBAZmVhdHVyZXMgICAgICAg ICAgIGJpdCBtYXNrIGlkZW50aWZ5aW5nIHN1Yi1ibG9ja3MvZmVhdHVyZXMKLSAqICAgICAgICAg ICAgICAgICAgICAgc3VwcG9ydGVkIGJ5IHRoaXMgYmxvY2sKLSAqIEBzYmxrICAgICAgICAgICAg ICAgc3ViLWJsb2NrcyBpbmZvcm1hdGlvbgotICovCi1zdHJ1Y3QgZHB1X2RzcHBfY2ZnICB7Ci0J RFBVX0hXX0JMS19JTkZPOwotCWNvbnN0IHN0cnVjdCBkcHVfZHNwcF9zdWJfYmxrcyAqc2JsazsK LX07Ci0KLS8qKgogICogc3RydWN0IGRwdV9kc190b3BfY2ZnIC0gaW5mb3JtYXRpb24gb2YgZGVz dCBzY2FsZXIgdG9wCiAgKiBAaWQgICAgICAgICAgICAgICBlbnVtIGlkZW50aWZ5aW5nIHRoaXMg YmxvY2sKICAqIEBiYXNlICAgICAgICAgICAgIHJlZ2lzdGVyIG9mZnNldCBvZiB0aGlzIGJsb2Nr CkBAIC04OTAsMTEgKzgwNyw2IEBAIHN0cnVjdCBkcHVfbWRzc19jZmcgewogCXUzMiBtaXhlcl9j b3VudDsKIAlzdHJ1Y3QgZHB1X2xtX2NmZyAqbWl4ZXI7CiAKLQlzdHJ1Y3QgZHB1X2RzcHBfdG9w X2NmZyBkc3BwX3RvcDsKLQotCXUzMiBkc3BwX2NvdW50OwotCXN0cnVjdCBkcHVfZHNwcF9jZmcg KmRzcHA7Ci0KIAl1MzIgZHNfY291bnQ7CiAJc3RydWN0IGRwdV9kc19jZmcgKmRzOwogCkBAIC05 NDIsNyArODU0LDYgQEAgc3RydWN0IGRwdV9tZHNzX2h3X2NmZ19oYW5kbGVyIHsKICNkZWZpbmUg QkxLX0RNQShzKSAoKHMpLT5kbWEpCiAjZGVmaW5lIEJMS19DVVJTT1IocykgKChzKS0+Y3Vyc29y KQogI2RlZmluZSBCTEtfTUlYRVIocykgKChzKS0+bWl4ZXIpCi0jZGVmaW5lIEJMS19EU1BQKHMp ICgocyktPmRzcHApCiAjZGVmaW5lIEJMS19EUyhzKSAoKHMpLT5kcykKICNkZWZpbmUgQkxLX1BJ TkdQT05HKHMpICgocyktPnBpbmdwb25nKQogI2RlZmluZSBCTEtfQ0RNKHMpICgocyktPmNkbSkK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jb2xvcl9w cm9jX2NvbW1vbl92NC5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2Nv bG9yX3Byb2NfY29tbW9uX3Y0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NWU2 NzUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2Nv bG9yX3Byb2NfY29tbW9uX3Y0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKiBD b3B5cmlnaHQgKGMpIDIwMTctMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMg cmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJz aW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgot ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotI2lmbmRlZiBfRFBVX0hXX0NPTE9SX1BST0NfQ09N TU9OX1Y0X0hfCi0jZGVmaW5lIF9EUFVfSFdfQ09MT1JfUFJPQ19DT01NT05fVjRfSF8KLQotI2Rl ZmluZSBHQU1VVF9UQUJMRV9TRUxfT0ZGIDB4NAotI2RlZmluZSBHQU1VVF9VUFBFUl9DT0xPUl9P RkYgMHg4Ci0jZGVmaW5lIEdBTVVUX0xPV0VSX0NPTE9SX09GRiAweGMKLSNkZWZpbmUgR0FNVVRf U0NBTEVBX09GRlNFVF9PRkYgMHgxMAotI2RlZmluZSBHQU1VVF9TQ0FMRUJfT0ZGU0VUX09GRiAw eGUwCi0jZGVmaW5lIEdBTVVUX1RBQkxFMF9TRUwgQklUKDEyKQotI2RlZmluZSBHQU1VVF9NQVBf RU4gQklUKDEpCi0jZGVmaW5lIEdBTVVUX0VOIEJJVCgwKQotI2RlZmluZSBHQU1VVF9NT0RFXzEz Ql9PRkYgNjQwCi0jZGVmaW5lIEdBTVVUX01PREVfNV9PRkYgMTI0OAotCi1lbnVtIHsKLQlnYW11 dF9tb2RlXzE3ID0gMCwKLQlnYW11dF9tb2RlXzUsCi0JZ2FtdXRfbW9kZV8xM2EsCi0JZ2FtdXRf bW9kZV8xM2IsCi19OwotCi0jZGVmaW5lIEdDX0MwX09GRiAweDQKLSNkZWZpbmUgR0NfQzBfSU5E RVhfT0ZGIDB4OAotI2RlZmluZSBHQ184Ql9ST1VORF9FTiBCSVQoMSkKLSNkZWZpbmUgR0NfRU4g QklUKDApCi0jZGVmaW5lIEdDX1RCTF9OVU0gMwotI2RlZmluZSBHQ19MVVRfU1dBUF9PRkYgMHgx YwotCi0jZGVmaW5lIElHQ19UQkxfTlVNIDMKLSNkZWZpbmUgSUdDX0RJVEhFUl9PRkYgMHg3ZTAK LSNkZWZpbmUgSUdDX09QTU9ERV9PRkYgMHgwCi0jZGVmaW5lIElHQ19DMF9PRkYgMHgwCi0jZGVm aW5lIElHQ19EQVRBX01BU0sgKEJJVCgxMikgLSAxKQotI2RlZmluZSBJR0NfRFNQUF9TRUxfTUFT S19NQVggKEJJVCg0KSAtIDEpCi0jZGVmaW5lIElHQ19EU1BQX1NFTF9NQVNLKG4pIFwKLQkoKElH Q19EU1BQX1NFTF9NQVNLX01BWCAmIH4oMSA8PCAobikpKSA8PCAyOCkKLSNkZWZpbmUgSUdDX0lO REVYX1VQREFURSBCSVQoMjUpCi0jZGVmaW5lIElHQ19FTiBCSVQoMCkKLSNkZWZpbmUgSUdDX0RJ UyAwCi0jZGVmaW5lIElHQ19ESVRIRVJfREFUQV9NQVNLIChCSVQoNCkgLSAxKQotCi0jZGVmaW5l IFBDQ19OVU1fUExBTkVTIDMKLSNkZWZpbmUgUENDX05VTV9DT0VGRiAxMQotI2RlZmluZSBQQ0Nf RU4gQklUKDApCi0jZGVmaW5lIFBDQ19ESVMgMAotI2RlZmluZSBQQ0NfQ19PRkYgMHg0Ci0jZGVm aW5lIFBDQ19SX09GRiAweDEwCi0jZGVmaW5lIFBDQ19HX09GRiAweDFjCi0jZGVmaW5lIFBDQ19C X09GRiAweDI4Ci0jZGVmaW5lIFBDQ19SR19PRkYgMHgzNAotI2RlZmluZSBQQ0NfUkJfT0ZGIDB4 NDAKLSNkZWZpbmUgUENDX0dCX09GRiAweDRjCi0jZGVmaW5lIFBDQ19SR0JfT0ZGIDB4NTgKLSNk ZWZpbmUgUENDX1JSX09GRiAweDY0Ci0jZGVmaW5lIFBDQ19HR19PRkYgMHg3MAotI2RlZmluZSBQ Q0NfQkJfT0ZGIDB4N2MKLQotI2VuZGlmIC8qIF9EUFVfSFdfQ09MT1JfUFJPQ19DT01NT05fVjRf SF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19j b2xvcl9wcm9jX3Y0LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY29s b3JfcHJvY192NC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzY5M2E4Li4wMDAw MDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jb2xvcl9wcm9j X3Y0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDIgKzAsMCBAQAotLyogQ29weXJpZ2h0IChjKSAy MDE3LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK LSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCi0gKi8KLSNpbmNsdWRlIDxkcm0vbXNtX2RybV9wcC5oPgotI2luY2x1ZGUgImRwdV9o d19jb2xvcl9wcm9jX2NvbW1vbl92NC5oIgotI2luY2x1ZGUgImRwdV9od19jb2xvcl9wcm9jX3Y0 LmgiCi0KLXN0YXRpYyBpbnQgZHB1X3dyaXRlXzNkX2dhbXV0KHN0cnVjdCBkcHVfaHdfYmxrX3Jl Z19tYXAgKmh3LAotCQlzdHJ1Y3QgZHJtX21zbV8zZF9nYW11dCAqcGF5bG9hZCwgdTMyIGJhc2Us Ci0JCXUzMiAqb3Bjb2RlKQotewotCXUzMiByZWcsIHRibF9sZW4sIHRibF9vZmYsIHNjYWxlX29m ZiwgaSwgajsKLQl1MzIgc2NhbGVfdGJsX2xlbiwgc2NhbGVfdGJsX29mZjsKLQl1MzIgKnNjYWxl X2RhdGE7Ci0KLQlpZiAoIXBheWxvYWQgfHwgIW9wY29kZSB8fCAhaHcpIHsKLQkJRFJNX0VSUk9S KCJpbnZhbGlkIHBheWxvYWQgJXBLIG9wY29kZSAlcEsgaHcgJXBLXG4iLAotCQkJcGF5bG9hZCwg b3Bjb2RlLCBodyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXN3aXRjaCAocGF5bG9hZC0+ bW9kZSkgewotCWNhc2UgR0FNVVRfM0RfTU9ERV8xNzoKLQkJdGJsX2xlbiA9IEdBTVVUXzNEX01P REUxN19UQkxfU1o7Ci0JCXRibF9vZmYgPSAwOwotCQlzY2FsZV9vZmYgPSBHQU1VVF9TQ0FMRUFf T0ZGU0VUX09GRjsKLQkJKm9wY29kZSA9IGdhbXV0X21vZGVfMTcgPDwgMjsKLQkJYnJlYWs7Ci0J Y2FzZSBHQU1VVF8zRF9NT0RFXzEzOgotCQkqb3Bjb2RlID0gKCpvcGNvZGUgJiAoQklUKDQpIC0g MSkpID4+IDI7Ci0JCWlmICgqb3Bjb2RlID09IGdhbXV0X21vZGVfMTNhKQotCQkJKm9wY29kZSA9 IGdhbXV0X21vZGVfMTNiOwotCQllbHNlCi0JCQkqb3Bjb2RlID0gZ2FtdXRfbW9kZV8xM2E7Ci0J CXRibF9sZW4gPSBHQU1VVF8zRF9NT0RFMTNfVEJMX1NaOwotCQl0Ymxfb2ZmID0gKCpvcGNvZGUg PT0gZ2FtdXRfbW9kZV8xM2EpID8gMCA6Ci0JCQlHQU1VVF9NT0RFXzEzQl9PRkY7Ci0JCXNjYWxl X29mZiA9ICgqb3Bjb2RlID09IGdhbXV0X21vZGVfMTNhKSA/Ci0JCQlHQU1VVF9TQ0FMRUFfT0ZG U0VUX09GRiA6IEdBTVVUX1NDQUxFQl9PRkZTRVRfT0ZGOwotCQkqb3Bjb2RlIDw8PSAyOwotCQli cmVhazsKLQljYXNlIEdBTVVUXzNEX01PREVfNToKLQkJKm9wY29kZSA9IGdhbXV0X21vZGVfNSA8 PCAyOwotCQl0YmxfbGVuID0gR0FNVVRfM0RfTU9ERTVfVEJMX1NaOwotCQl0Ymxfb2ZmID0gR0FN VVRfTU9ERV81X09GRjsKLQkJc2NhbGVfb2ZmID0gR0FNVVRfU0NBTEVCX09GRlNFVF9PRkY7Ci0J CWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURSTV9FUlJPUigiaW52YWxpZCBtb2RlICVkXG4iLCBwYXls b2FkLT5tb2RlKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHBheWxvYWQtPmZsYWdz ICYgR0FNVVRfM0RfTUFQX0VOKQotCQkqb3Bjb2RlIHw9IEdBTVVUX01BUF9FTjsKLQkqb3Bjb2Rl IHw9IEdBTVVUX0VOOwotCi0JZm9yIChpID0gMDsgaSA8IEdBTVVUXzNEX1RCTF9OVU07IGkrKykg ewotCQlyZWcgPSBHQU1VVF9UQUJMRTBfU0VMIDw8IGk7Ci0JCXJlZyB8PSAoKHRibF9vZmYpICYg KEJJVCgxMSkgLSAxKSk7Ci0JCURQVV9SRUdfV1JJVEUoaHcsIGJhc2UgKyBHQU1VVF9UQUJMRV9T RUxfT0ZGLCByZWcpOwotCQlmb3IgKGogPSAwOyBqIDwgdGJsX2xlbjsgaisrKSB7Ci0JCQlEUFVf UkVHX1dSSVRFKGh3LCBiYXNlICsgR0FNVVRfTE9XRVJfQ09MT1JfT0ZGLAotCQkJCQlwYXlsb2Fk LT5jb2xbaV1bal0uYzJfYzEpOwotCQkJRFBVX1JFR19XUklURShodywgYmFzZSArIEdBTVVUX1VQ UEVSX0NPTE9SX09GRiwKLQkJCQkJcGF5bG9hZC0+Y29sW2ldW2pdLmMwKTsKLQkJfQotCX0KLQot CWlmICgoKm9wY29kZSAmIEdBTVVUX01BUF9FTikpIHsKLQkJaWYgKHNjYWxlX29mZiA9PSBHQU1V VF9TQ0FMRUFfT0ZGU0VUX09GRikKLQkJCXNjYWxlX3RibF9sZW4gPSBHQU1VVF8zRF9TQ0FMRV9P RkZfU1o7Ci0JCWVsc2UKLQkJCXNjYWxlX3RibF9sZW4gPSBHQU1VVF8zRF9TQ0FMRUJfT0ZGX1Na OwotCQlmb3IgKGkgPSAwOyBpIDwgR0FNVVRfM0RfU0NBTEVfT0ZGX1RCTF9OVU07IGkrKykgewot CQkJc2NhbGVfdGJsX29mZiA9IGJhc2UgKyBzY2FsZV9vZmYgKwotCQkJCQlpICogc2NhbGVfdGJs X2xlbiAqIHNpemVvZih1MzIpOwotCQkJc2NhbGVfZGF0YSA9ICZwYXlsb2FkLT5zY2FsZV9vZmZb aV1bMF07Ci0JCQlmb3IgKGogPSAwOyBqIDwgc2NhbGVfdGJsX2xlbjsgaisrKQotCQkJCURQVV9S RUdfV1JJVEUoaHcsCi0JCQkJCXNjYWxlX3RibF9vZmYgKyAoaiAqIHNpemVvZih1MzIpKSwKLQkJ CQkJc2NhbGVfZGF0YVtqXSk7Ci0JCX0KLQl9Ci0JRFBVX1JFR19XUklURShodywgYmFzZSwgKm9w Y29kZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgZHB1X3NldHVwX2RzcHBfM2RfZ2FtdXR2NChz dHJ1Y3QgZHB1X2h3X2RzcHAgKmN0eCwgdm9pZCAqY2ZnKQotewotCXN0cnVjdCBkcm1fbXNtXzNk X2dhbXV0ICpwYXlsb2FkOwotCXN0cnVjdCBkcHVfaHdfY3BfY2ZnICpod19jZmcgPSBjZmc7Ci0J dTMyIG9wX21vZGU7Ci0KLQlpZiAoIWN0eCB8fCAhY2ZnKSB7Ci0JCURSTV9FUlJPUigiaW52YWxp ZCBwYXJhbSBjdHggJXBLIGNmZyAlcEtcbiIsIGN0eCwgY2ZnKTsKLQkJcmV0dXJuOwotCX0KLQot CW9wX21vZGUgPSBEUFVfUkVHX1JFQUQoJmN0eC0+aHcsIGN0eC0+Y2FwLT5zYmxrLT5nYW11dC5i YXNlKTsKLQlpZiAoIWh3X2NmZy0+cGF5bG9hZCkgewotCQlEUk1fREVCVUdfRFJJVkVSKCJkaXNh YmxlIGdhbXV0IGZlYXR1cmVcbiIpOwotCQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBjdHgtPmNh cC0+c2Jsay0+Z2FtdXQuYmFzZSwgMCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlwYXlsb2FkID0gaHdf Y2ZnLT5wYXlsb2FkOwotCWRwdV93cml0ZV8zZF9nYW11dCgmY3R4LT5odywgcGF5bG9hZCwgY3R4 LT5jYXAtPnNibGstPmdhbXV0LmJhc2UsCi0JCSZvcF9tb2RlKTsKLQotfQotCi12b2lkIGRwdV9z ZXR1cF9kc3BwX2lnY3YzKHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpCi17Ci0J c3RydWN0IGRybV9tc21faWdjX2x1dCAqbHV0X2NmZzsKLQlzdHJ1Y3QgZHB1X2h3X2NwX2NmZyAq aHdfY2ZnID0gY2ZnOwotCWludCBpID0gMCwgaiA9IDA7Ci0JdTMyICphZGRyID0gTlVMTDsKLQl1 MzIgb2Zmc2V0ID0gMDsKLQotCWlmICghY3R4IHx8ICFjZmcpIHsKLQkJRFJNX0VSUk9SKCJpbnZh bGlkIHBhcmFtIGN0eCAlcEsgY2ZnICVwS1xuIiwgY3R4LCBjZmcpOwotCQlyZXR1cm47Ci0JfQot Ci0JaWYgKCFod19jZmctPnBheWxvYWQpIHsKLQkJRFJNX0RFQlVHX0RSSVZFUigiZGlzYWJsZSBp Z2MgZmVhdHVyZVxuIik7Ci0JCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIElHQ19PUE1PREVfT0ZG LCAwKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChod19jZmctPmxlbiAhPSBzaXplb2Yoc3RydWN0 IGRybV9tc21faWdjX2x1dCkpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIHNpemUgb2YgcGF5bG9h ZCBsZW4gJWQgZXhwICV6ZFxuIiwKLQkJCQlod19jZmctPmxlbiwgc2l6ZW9mKHN0cnVjdCBkcm1f bXNtX2lnY19sdXQpKTsKLQkJcmV0dXJuOwotCX0KLQotCWx1dF9jZmcgPSBod19jZmctPnBheWxv YWQ7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgSUdDX1RCTF9OVU07IGkrKykgewotCQlhZGRyID0gbHV0 X2NmZy0+YzAgKyAoaSAqIEFSUkFZX1NJWkUobHV0X2NmZy0+YzApKTsKLQkJb2Zmc2V0ID0gSUdD X0MwX09GRiArIChpICogc2l6ZW9mKHUzMikpOwotCi0JCWZvciAoaiA9IDA7IGogPCBJR0NfVEJM X0xFTjsgaisrKSB7Ci0JCQlhZGRyW2pdICY9IElHQ19EQVRBX01BU0s7Ci0JCQlhZGRyW2pdIHw9 IElHQ19EU1BQX1NFTF9NQVNLKGN0eC0+aWR4IC0gMSk7Ci0JCQlpZiAoaiA9PSAwKQotCQkJCWFk ZHJbal0gfD0gSUdDX0lOREVYX1VQREFURTsKLQkJCS8qIElHQyBsdXQgcmVnaXN0ZXJzIGFyZSBw YXJ0IG9mIERTUFAgVG9wIEhXIGJsb2NrICovCi0JCQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3X3Rv cCwgb2Zmc2V0LCBhZGRyW2pdKTsKLQkJfQotCX0KLQotCWlmIChsdXRfY2ZnLT5mbGFncyAmIElH Q19ESVRIRVJfRU5BQkxFKSB7Ci0JCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIElHQ19ESVRIRVJf T0ZGLAotCQkJbHV0X2NmZy0+c3RyZW5ndGggJiBJR0NfRElUSEVSX0RBVEFfTUFTSyk7Ci0JfQot Ci0JRFBVX1JFR19XUklURSgmY3R4LT5odywgSUdDX09QTU9ERV9PRkYsIElHQ19FTik7Ci19Ci0K LXZvaWQgZHB1X3NldHVwX2RzcHBfcGNjdjQoc3RydWN0IGRwdV9od19kc3BwICpjdHgsIHZvaWQg KmNmZykKLXsKLQlzdHJ1Y3QgZHB1X2h3X2NwX2NmZyAqaHdfY2ZnID0gY2ZnOwotCXN0cnVjdCBk cm1fbXNtX3BjYyAqcGNjX2NmZzsKLQlzdHJ1Y3QgZHJtX21zbV9wY2NfY29lZmYgKmNvZWZmcyA9 IE5VTEw7Ci0JaW50IGkgPSAwOwotCXUzMiBiYXNlID0gMDsKLQotCWlmICghY3R4IHx8ICFjZmcp IHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIHBhcmFtIGN0eCAlcEsgY2ZnICVwS1xuIiwgY3R4LCBj ZmcpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKCFod19jZmctPnBheWxvYWQpIHsKLQkJRFJNX0RF QlVHX0RSSVZFUigiZGlzYWJsZSBwY2MgZmVhdHVyZVxuIik7Ci0JCURQVV9SRUdfV1JJVEUoJmN0 eC0+aHcsIGN0eC0+Y2FwLT5zYmxrLT5wY2MuYmFzZSwgMCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlp ZiAoaHdfY2ZnLT5sZW4gIT0gc2l6ZW9mKHN0cnVjdCBkcm1fbXNtX3BjYykpIHsKLQkJRFJNX0VS Uk9SKCJpbnZhbGlkIHNpemUgb2YgcGF5bG9hZCBsZW4gJWQgZXhwICV6ZFxuIiwKLQkJCQlod19j ZmctPmxlbiwgc2l6ZW9mKHN0cnVjdCBkcm1fbXNtX3BjYykpOwotCQlyZXR1cm47Ci0JfQotCi0J cGNjX2NmZyA9IGh3X2NmZy0+cGF5bG9hZDsKLQotCWZvciAoaSA9IDA7IGkgPCBQQ0NfTlVNX1BM QU5FUzsgaSsrKSB7Ci0JCWJhc2UgPSBjdHgtPmNhcC0+c2Jsay0+cGNjLmJhc2UgKyAoaSAqIHNp emVvZih1MzIpKTsKLQkJc3dpdGNoIChpKSB7Ci0JCWNhc2UgMDoKLQkJCWNvZWZmcyA9ICZwY2Nf Y2ZnLT5yOwotCQkJRFBVX1JFR19XUklURSgmY3R4LT5odywKLQkJCQliYXNlICsgUENDX1JSX09G RiwgcGNjX2NmZy0+cl9ycik7Ci0JCQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LAotCQkJCWJhc2Ug KyBQQ0NfR0dfT0ZGLCBwY2NfY2ZnLT5yX2dnKTsKLQkJCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcs Ci0JCQkJYmFzZSArIFBDQ19CQl9PRkYsIHBjY19jZmctPnJfYmIpOwotCQkJYnJlYWs7Ci0JCWNh c2UgMToKLQkJCWNvZWZmcyA9ICZwY2NfY2ZnLT5nOwotCQkJRFBVX1JFR19XUklURSgmY3R4LT5o dywKLQkJCQliYXNlICsgUENDX1JSX09GRiwgcGNjX2NmZy0+Z19ycik7Ci0JCQlEUFVfUkVHX1dS SVRFKCZjdHgtPmh3LAotCQkJCWJhc2UgKyBQQ0NfR0dfT0ZGLCBwY2NfY2ZnLT5nX2dnKTsKLQkJ CURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsCi0JCQkJYmFzZSArIFBDQ19CQl9PRkYsIHBjY19jZmct PmdfYmIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCWNvZWZmcyA9ICZwY2NfY2ZnLT5iOwot CQkJRFBVX1JFR19XUklURSgmY3R4LT5odywKLQkJCQliYXNlICsgUENDX1JSX09GRiwgcGNjX2Nm Zy0+Yl9ycik7Ci0JCQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LAotCQkJCWJhc2UgKyBQQ0NfR0df T0ZGLCBwY2NfY2ZnLT5iX2dnKTsKLQkJCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsCi0JCQkJYmFz ZSArIFBDQ19CQl9PRkYsIHBjY19jZmctPmJfYmIpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0J CQlEUk1fRVJST1IoImludmFsaWQgcGNjIHBsYW5lOiAlZFxuIiwgaSk7Ci0JCQlyZXR1cm47Ci0J CX0KLQotCQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBiYXNlICsgUENDX0NfT0ZGLCBjb2VmZnMt PmMpOwotCQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBiYXNlICsgUENDX1JfT0ZGLCBjb2VmZnMt PnIpOwotCQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBiYXNlICsgUENDX0dfT0ZGLCBjb2VmZnMt PmcpOwotCQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBiYXNlICsgUENDX0JfT0ZGLCBjb2VmZnMt PmIpOwotCQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBiYXNlICsgUENDX1JHX09GRiwgY29lZmZz LT5yZyk7Ci0JCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIGJhc2UgKyBQQ0NfUkJfT0ZGLCBjb2Vm ZnMtPnJiKTsKLQkJRFBVX1JFR19XUklURSgmY3R4LT5odywgYmFzZSArIFBDQ19HQl9PRkYsIGNv ZWZmcy0+Z2IpOwotCQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBiYXNlICsgUENDX1JHQl9PRkYs IGNvZWZmcy0+cmdiKTsKLQl9Ci0KLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBjdHgtPmNhcC0+ c2Jsay0+cGNjLmJhc2UsIFBDQ19FTik7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfaHdfY29sb3JfcHJvY192NC5oIGIvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2h3X2NvbG9yX3Byb2NfdjQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggYzJmNDQ3ZmIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2h3X2NvbG9yX3Byb2NfdjQuaAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAg QEAKLS8qIENvcHlyaWdodCAoYykgMjAxNy0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxs IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBv bmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0jaWZuZGVmIF9EUFVfSFdfQ09MT1Jf UFJPQ19WNF9IXwotI2RlZmluZSBfRFBVX0hXX0NPTE9SX1BST0NfVjRfSF8KLQotI2luY2x1ZGUg ImRwdV9od191dGlsLmgiCi0jaW5jbHVkZSAiZHB1X2h3X2NhdGFsb2cuaCIKLSNpbmNsdWRlICJk cHVfaHdfZHNwcC5oIgotLyoqCi0gKiBkcHVfc2V0dXBfZHNwcF8zZF9nYW11dHY0IC0gRnVuY3Rp b24gZm9yIDNkIGdhbXV0IHY0IHZlcnNpb24gZmVhdHVyZQotICogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHByb2dyYW1taW5nLgotICogQGN0eDogZHNwcCBjdHggcG9pbnRlcgotICogQGNm ZzogcG9pbnRlciB0byBkcHVfaHdfY3BfY2ZnCi0gKi8KLXZvaWQgZHB1X3NldHVwX2RzcHBfM2Rf Z2FtdXR2NChzdHJ1Y3QgZHB1X2h3X2RzcHAgKmN0eCwgdm9pZCAqY2ZnKTsKLS8qKgotICogZHB1 X3NldHVwX2RzcHBfaWdjdjMgLSBGdW5jdGlvbiBmb3IgaWdjIHYzIHZlcnNpb24gZmVhdHVyZQot ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW1taW5nLgotICogQGN0eDogZHNw cCBjdHggcG9pbnRlcgotICogQGNmZzogcG9pbnRlciB0byBkcHVfaHdfY3BfY2ZnCi0gKi8KLXZv aWQgZHB1X3NldHVwX2RzcHBfaWdjdjMoc3RydWN0IGRwdV9od19kc3BwICpjdHgsIHZvaWQgKmNm Zyk7Ci0vKioKLSAqIGRwdV9zZXR1cF9kc3BwX3BjY3Y0IC0gRnVuY3Rpb24gZm9yIHBjYyB2NCB2 ZXJzaW9uIGZlYXR1cmUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtbWlu Zy4KLSAqIEBjdHg6IGRzcHAgY3R4IHBvaW50ZXIKLSAqIEBjZmc6IHBvaW50ZXIgdG8gZHB1X2h3 X2NwX2NmZwotICovCi12b2lkIGRwdV9zZXR1cF9kc3BwX3BjY3Y0KHN0cnVjdCBkcHVfaHdfZHNw cCAqY3R4LCB2b2lkICpjZmcpOwotCi0jZW5kaWYgLyogX0RQVV9IV19DT0xPUl9QUk9DX1Y0X0hf ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY29s b3JfcHJvY2Vzc2luZy5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2Nv bG9yX3Byb2Nlc3NpbmcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFiZGZmZC4u MDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY29sb3Jf cHJvY2Vzc2luZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLyogQ29weXJpZ2h0 IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCi0gKi8KLQotI2lmbmRlZiBfRFBVX0hXX0NPTE9SX1BST0NFU1NJTkdfSAot I2RlZmluZSBfRFBVX0hXX0NPTE9SX1BST0NFU1NJTkdfSAotCi0jaW5jbHVkZSAiZHB1X2h3X2Nv bG9yX3Byb2Nlc3NpbmdfdjFfNy5oIgotI2luY2x1ZGUgImRwdV9od19yZWdfZG1hX3YxX2NvbG9y X3Byb2MuaCIKLSNpbmNsdWRlICJkcHVfaHdfY29sb3JfcHJvY192NC5oIgotCi0jZW5kaWYKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jb2xvcl9wcm9j ZXNzaW5nX3YxXzcuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jb2xv cl9wcm9jZXNzaW5nX3YxXzcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM2NzYw Mi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY29s b3JfcHJvY2Vzc2luZ192MV83LmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NjUgKzAsMCBAQAotLyog Q29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRz IHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVy c2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoK LSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2luY2x1ZGUgPGRybS9tc21fZHJtX3BwLmg+ Ci0jaW5jbHVkZSAiZHB1X2h3X2NvbG9yX3Byb2Nlc3NpbmdfdjFfNy5oIgotI2luY2x1ZGUgImRw dV9od19jdGwuaCIKLQotI2RlZmluZSBQQV9IVUVfVklHX09GRgkJMHgxMTAKLSNkZWZpbmUgUEFf U0FUX1ZJR19PRkYJCTB4MTE0Ci0jZGVmaW5lIFBBX1ZBTF9WSUdfT0ZGCQkweDExOAotI2RlZmlu ZSBQQV9DT05UX1ZJR19PRkYJCTB4MTFDCi0KLSNkZWZpbmUgUEFfSFVFX0RTUFBfT0ZGCQkweDIz OAotI2RlZmluZSBQQV9TQVRfRFNQUF9PRkYJCTB4MjNDCi0jZGVmaW5lIFBBX1ZBTF9EU1BQX09G RgkJMHgyNDAKLSNkZWZpbmUgUEFfQ09OVF9EU1BQX09GRgkweDI0NAotCi0jZGVmaW5lIFBBX0xV VFZfRFNQUF9PRkYJMHgxNDAwCi0jZGVmaW5lIFBBX0xVVF9TV0FQX09GRgkJMHgyMzQKLQotI2Rl ZmluZSBQQV9MVVRWX0RTUFBfQ1RSTF9PRkYJMHg0YwotI2RlZmluZSBQQV9MVVRWX0RTUFBfU1dB UF9PRkYJMHgxOAotCi0jZGVmaW5lIFBBX0hVRV9NQVNLCQkweEZGRgotI2RlZmluZSBQQV9TQVRf TUFTSwkJMHhGRkZGCi0jZGVmaW5lIFBBX1ZBTF9NQVNLCQkweEZGCi0jZGVmaW5lIFBBX0NPTlRf TUFTSwkJMHhGRgotCi0jZGVmaW5lIE1FTUNPTF9QV0wwX09GRgkJMHg4OAotI2RlZmluZSBNRU1D T0xfUFdMMF9NQVNLCTB4RkZGRjA3RkYKLSNkZWZpbmUgTUVNQ09MX1BXTDFfT0ZGCQkweDhDCi0j ZGVmaW5lIE1FTUNPTF9QV0wxX01BU0sJMHhGRkZGRkZGRgotI2RlZmluZSBNRU1DT0xfSFVFX1JF R0lPTl9PRkYJMHg5MAotI2RlZmluZSBNRU1DT0xfSFVFX1JFR0lPTl9NQVNLCTB4N0ZGMDdGRgot I2RlZmluZSBNRU1DT0xfU0FUX1JFR0lPTl9PRkYJMHg5NAotI2RlZmluZSBNRU1DT0xfU0FUX1JF R0lPTl9NQVNLCTB4RkZGRkZGCi0jZGVmaW5lIE1FTUNPTF9WQUxfUkVHSU9OX09GRgkweDk4Ci0j ZGVmaW5lIE1FTUNPTF9WQUxfUkVHSU9OX01BU0sJMHhGRkZGRkYKLSNkZWZpbmUgTUVNQ09MX1Aw X0xFTgkJMHgxNAotI2RlZmluZSBNRU1DT0xfUDFfTEVOCQkweDgKLSNkZWZpbmUgTUVNQ09MX1BX TDJfT0ZGCQkweDIxOAotI2RlZmluZSBNRU1DT0xfUFdMMl9NQVNLCTB4RkZGRkZGRkYKLSNkZWZp bmUgTUVNQ09MX0JMRU5EX0dBSU5fT0ZGCTB4MjFDCi0jZGVmaW5lIE1FTUNPTF9QV0xfSE9MRF9P RkYJMHgyMTQKLQotI2RlZmluZSBWSUdfT1BfUEFfRU4JCUJJVCg0KQotI2RlZmluZSBWSUdfT1Bf UEFfU0tJTl9FTglCSVQoNSkKLSNkZWZpbmUgVklHX09QX1BBX0ZPTF9FTglCSVQoNikKLSNkZWZp bmUgVklHX09QX1BBX1NLWV9FTglCSVQoNykKLSNkZWZpbmUgVklHX09QX1BBX0hVRV9FTglCSVQo MjUpCi0jZGVmaW5lIFZJR19PUF9QQV9TQVRfRU4JQklUKDI2KQotI2RlZmluZSBWSUdfT1BfUEFf VkFMX0VOCUJJVCgyNykKLSNkZWZpbmUgVklHX09QX1BBX0NPTlRfRU4JQklUKDI4KQotCi0jZGVm aW5lIERTUFBfT1BfU1pfVkFMX0VOCUJJVCgzMSkKLSNkZWZpbmUgRFNQUF9PUF9TWl9TQVRfRU4J QklUKDMwKQotI2RlZmluZSBEU1BQX09QX1NaX0hVRV9FTglCSVQoMjkpCi0jZGVmaW5lIERTUFBf T1BfUEFfSFVFX0VOCUJJVCgyNSkKLSNkZWZpbmUgRFNQUF9PUF9QQV9TQVRfRU4JQklUKDI2KQot I2RlZmluZSBEU1BQX09QX1BBX1ZBTF9FTglCSVQoMjcpCi0jZGVmaW5lIERTUFBfT1BfUEFfQ09O VF9FTglCSVQoMjgpCi0jZGVmaW5lIERTUFBfT1BfUEFfRU4JCUJJVCgyMCkKLSNkZWZpbmUgRFNQ UF9PUF9QQV9MVVRWX0VOCUJJVCgxOSkKLSNkZWZpbmUgRFNQUF9PUF9QQV9TS0lOX0VOCUJJVCg1 KQotI2RlZmluZSBEU1BQX09QX1BBX0ZPTF9FTglCSVQoNikKLSNkZWZpbmUgRFNQUF9PUF9QQV9T S1lfRU4JQklUKDcpCi0KLSNkZWZpbmUgUEFfVklHX0RJU0FCTEVfUkVRVUlSRUQoeCkgXAotCQkJ ISgoeCkgJiAoVklHX09QX1BBX1NLSU5fRU4gfCBWSUdfT1BfUEFfU0tZX0VOIHwgXAotCQkJVklH X09QX1BBX0ZPTF9FTiB8IFZJR19PUF9QQV9IVUVfRU4gfCBcCi0JCQlWSUdfT1BfUEFfU0FUX0VO IHwgVklHX09QX1BBX1ZBTF9FTiB8IFwKLQkJCVZJR19PUF9QQV9DT05UX0VOKSkKLQotCi0jZGVm aW5lIFBBX0RTUFBfRElTQUJMRV9SRVFVSVJFRCh4KSBcCi0JCQkhKCh4KSAmIChEU1BQX09QX1BB X1NLSU5fRU4gfCBEU1BQX09QX1BBX1NLWV9FTiB8IFwKLQkJCURTUFBfT1BfUEFfRk9MX0VOIHwg RFNQUF9PUF9QQV9IVUVfRU4gfCBcCi0JCQlEU1BQX09QX1BBX1NBVF9FTiB8IERTUFBfT1BfUEFf VkFMX0VOIHwgXAotCQkJRFNQUF9PUF9QQV9DT05UX0VOIHwgRFNQUF9PUF9QQV9MVVRWX0VOKSkK LQotI2RlZmluZSBEU1BQX09QX1BDQ19FTkFCTEUJQklUKDApCi0jZGVmaW5lIFBDQ19PUF9NT0RF X09GRgkJMAotI2RlZmluZSBQQ0NfQ09OU1RfQ09FRkZfT0ZGCTQKLSNkZWZpbmUgUENDX1JfQ09F RkZfT0ZGCQkweDEwCi0jZGVmaW5lIFBDQ19HX0NPRUZGX09GRgkJMHgxQwotI2RlZmluZSBQQ0Nf Ql9DT0VGRl9PRkYJCTB4MjgKLSNkZWZpbmUgUENDX1JHX0NPRUZGX09GRgkweDM0Ci0jZGVmaW5l IFBDQ19SQl9DT0VGRl9PRkYJMHg0MAotI2RlZmluZSBQQ0NfR0JfQ09FRkZfT0ZGCTB4NEMKLSNk ZWZpbmUgUENDX1JHQl9DT0VGRl9PRkYJMHg1OAotI2RlZmluZSBQQ0NfQ09OU1RfQ09FRkZfTUFT SwkweEZGRkYKLSNkZWZpbmUgUENDX0NPRUZGX01BU0sJCTB4M0ZGRkYKLQotI2RlZmluZSBTU1BQ CTAKLSNkZWZpbmUgRFNQUAkxCi0KLSNkZWZpbmUgUEdDX0MwX09GRiAweDQKLSNkZWZpbmUgUEdD X0MwX0lOREVYX09GRiAweDgKLSNkZWZpbmUgUEdDXzhCX1JPVU5EX0VOIEJJVCgxKQotI2RlZmlu ZSBQR0NfRU4gQklUKDApCi0jZGVmaW5lIFBHQ19UQkxfTlVNIDMKLSNkZWZpbmUgUEdDX0xVVF9T V0FQX09GRiAweDFjCi0KLQotc3RhdGljIHZvaWQgX19zZXR1cF9wYV9odWUoc3RydWN0IGRwdV9o d19ibGtfcmVnX21hcCAqaHcsCi0JCQljb25zdCBzdHJ1Y3QgZHB1X3BwX2JsayAqYmxrLCB1aW50 MzJfdCBodWUsCi0JCQlpbnQgbG9jYXRpb24pCi17Ci0JdTMyIGJhc2UgPSBibGstPmJhc2U7Ci0J dTMyIG9mZnNldCA9IChsb2NhdGlvbiA9PSBEU1BQKSA/IFBBX0hVRV9EU1BQX09GRiA6IFBBX0hV RV9WSUdfT0ZGOwotCXUzMiBvcF9odWVfZW4gPSAobG9jYXRpb24gPT0gRFNQUCkgPyBEU1BQX09Q X1BBX0hVRV9FTiA6Ci0JCQkJCVZJR19PUF9QQV9IVUVfRU47Ci0JdTMyIG9wX3BhX2VuID0gKGxv Y2F0aW9uID09IERTUFApID8gRFNQUF9PUF9QQV9FTiA6IFZJR19PUF9QQV9FTjsKLQl1MzIgZGlz YWJsZV9yZXE7Ci0JdTMyIG9wbW9kZTsKLQotCURQVV9SRUdfV1JJVEUoaHcsIGJhc2UgKyBvZmZz ZXQsIGh1ZSAmIFBBX0hVRV9NQVNLKTsKLQotCW9wbW9kZSA9IERQVV9SRUdfUkVBRChodywgYmFz ZSk7Ci0KLQlpZiAoIWh1ZSkgewotCQlvcG1vZGUgJj0gfm9wX2h1ZV9lbjsKLQkJZGlzYWJsZV9y ZXEgPSAobG9jYXRpb24gPT0gRFNQUCkgPwotCQkJUEFfRFNQUF9ESVNBQkxFX1JFUVVJUkVEKG9w bW9kZSkgOgotCQkJUEFfVklHX0RJU0FCTEVfUkVRVUlSRUQob3Btb2RlKTsKLQkJaWYgKGRpc2Fi bGVfcmVxKQotCQkJb3Btb2RlICY9IH5vcF9wYV9lbjsKLQl9IGVsc2UgewotCQlvcG1vZGUgfD0g b3BfaHVlX2VuIHwgb3BfcGFfZW47Ci0JfQotCi0JRFBVX1JFR19XUklURShodywgYmFzZSwgb3Bt b2RlKTsKLX0KLQotdm9pZCBkcHVfc2V0dXBfcGlwZV9wYV9odWVfdjFfNyhzdHJ1Y3QgZHB1X2h3 X3BpcGUgKmN0eCwgdm9pZCAqY2ZnKQotewotCXVpbnQzMl90IGh1ZSA9ICooKHVpbnQzMl90ICop Y2ZnKTsKLQotCV9fc2V0dXBfcGFfaHVlKCZjdHgtPmh3LCAmY3R4LT5jYXAtPnNibGstPmhzaWNf YmxrLCBodWUsIFNTUFApOwotfQotCi12b2lkIGRwdV9zZXR1cF9kc3BwX3BhX2h1ZV92MV83KHN0 cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpCi17Ci0JdWludDMyX3QgaHVlID0gKigo dWludDMyX3QgKiljZmcpOwotCi0JX19zZXR1cF9wYV9odWUoJmN0eC0+aHcsICZjdHgtPmNhcC0+ c2Jsay0+aHNpYywgaHVlLCBEU1BQKTsKLX0KLQotc3RhdGljIHZvaWQgX19zZXR1cF9wYV9zYXQo c3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAqaHcsCi0JCQljb25zdCBzdHJ1Y3QgZHB1X3BwX2Js ayAqYmxrLCB1aW50MzJfdCBzYXQsCi0JCQlpbnQgbG9jYXRpb24pCi17Ci0JdTMyIGJhc2UgPSBi bGstPmJhc2U7Ci0JdTMyIG9mZnNldCA9IChsb2NhdGlvbiA9PSBEU1BQKSA/IFBBX1NBVF9EU1BQ X09GRiA6IFBBX1NBVF9WSUdfT0ZGOwotCXUzMiBvcF9zYXRfZW4gPSAobG9jYXRpb24gPT0gRFNQ UCkgPwotCQkJRFNQUF9PUF9QQV9TQVRfRU4gOiBWSUdfT1BfUEFfU0FUX0VOOwotCXUzMiBvcF9w YV9lbiA9IChsb2NhdGlvbiA9PSBEU1BQKSA/IERTUFBfT1BfUEFfRU4gOiBWSUdfT1BfUEFfRU47 Ci0JdTMyIGRpc2FibGVfcmVxOwotCXUzMiBvcG1vZGU7Ci0KLQlEUFVfUkVHX1dSSVRFKGh3LCBi YXNlICsgb2Zmc2V0LCBzYXQgJiBQQV9TQVRfTUFTSyk7Ci0KLQlvcG1vZGUgPSBEUFVfUkVHX1JF QUQoaHcsIGJhc2UpOwotCi0JaWYgKCFzYXQpIHsKLQkJb3Btb2RlICY9IH5vcF9zYXRfZW47Ci0J CWRpc2FibGVfcmVxID0gKGxvY2F0aW9uID09IERTUFApID8KLQkJCVBBX0RTUFBfRElTQUJMRV9S RVFVSVJFRChvcG1vZGUpIDoKLQkJCVBBX1ZJR19ESVNBQkxFX1JFUVVJUkVEKG9wbW9kZSk7Ci0J CWlmIChkaXNhYmxlX3JlcSkKLQkJCW9wbW9kZSAmPSB+b3BfcGFfZW47Ci0JfSBlbHNlIHsKLQkJ b3Btb2RlIHw9IG9wX3NhdF9lbiB8IG9wX3BhX2VuOwotCX0KLQotCURQVV9SRUdfV1JJVEUoaHcs IGJhc2UsIG9wbW9kZSk7Ci19Ci0KLXZvaWQgZHB1X3NldHVwX3BpcGVfcGFfc2F0X3YxXzcoc3Ry dWN0IGRwdV9od19waXBlICpjdHgsIHZvaWQgKmNmZykKLXsKLQl1aW50MzJfdCBzYXQgPSAqKCh1 aW50MzJfdCAqKWNmZyk7Ci0KLQlfX3NldHVwX3BhX3NhdCgmY3R4LT5odywgJmN0eC0+Y2FwLT5z YmxrLT5oc2ljX2Jsaywgc2F0LCBTU1BQKTsKLX0KLQotc3RhdGljIHZvaWQgX19zZXR1cF9wYV92 YWwoc3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAqaHcsCi0JCQljb25zdCBzdHJ1Y3QgZHB1X3Bw X2JsayAqYmxrLCB1aW50MzJfdCB2YWx1ZSwKLQkJCWludCBsb2NhdGlvbikKLXsKLQl1MzIgYmFz ZSA9IGJsay0+YmFzZTsKLQl1MzIgb2Zmc2V0ID0gKGxvY2F0aW9uID09IERTUFApID8gUEFfVkFM X0RTUFBfT0ZGIDogUEFfVkFMX1ZJR19PRkY7Ci0JdTMyIG9wX3ZhbF9lbiA9IChsb2NhdGlvbiA9 PSBEU1BQKSA/Ci0JCQlEU1BQX09QX1BBX1ZBTF9FTiA6IFZJR19PUF9QQV9WQUxfRU47Ci0JdTMy IG9wX3BhX2VuID0gKGxvY2F0aW9uID09IERTUFApID8gRFNQUF9PUF9QQV9FTiA6IFZJR19PUF9Q QV9FTjsKLQl1MzIgZGlzYWJsZV9yZXE7Ci0JdTMyIG9wbW9kZTsKLQotCURQVV9SRUdfV1JJVEUo aHcsIGJhc2UgKyBvZmZzZXQsIHZhbHVlICYgUEFfVkFMX01BU0spOwotCi0Jb3Btb2RlID0gRFBV X1JFR19SRUFEKGh3LCBiYXNlKTsKLQotCWlmICghdmFsdWUpIHsKLQkJb3Btb2RlICY9IH5vcF92 YWxfZW47Ci0JCWRpc2FibGVfcmVxID0gKGxvY2F0aW9uID09IERTUFApID8KLQkJCVBBX0RTUFBf RElTQUJMRV9SRVFVSVJFRChvcG1vZGUpIDoKLQkJCVBBX1ZJR19ESVNBQkxFX1JFUVVJUkVEKG9w bW9kZSk7Ci0JCWlmIChkaXNhYmxlX3JlcSkKLQkJCW9wbW9kZSAmPSB+b3BfcGFfZW47Ci0JfSBl bHNlIHsKLQkJb3Btb2RlIHw9IG9wX3ZhbF9lbiB8IG9wX3BhX2VuOwotCX0KLQotCURQVV9SRUdf V1JJVEUoaHcsIGJhc2UsIG9wbW9kZSk7Ci19Ci0KLXZvaWQgZHB1X3NldHVwX3BpcGVfcGFfdmFs X3YxXzcoc3RydWN0IGRwdV9od19waXBlICpjdHgsIHZvaWQgKmNmZykKLXsKLQl1aW50MzJfdCB2 YWx1ZSA9ICooKHVpbnQzMl90ICopY2ZnKTsKLQotCV9fc2V0dXBfcGFfdmFsKCZjdHgtPmh3LCAm Y3R4LT5jYXAtPnNibGstPmhzaWNfYmxrLCB2YWx1ZSwgU1NQUCk7Ci19Ci0KLXN0YXRpYyB2b2lk IF9fc2V0dXBfcGFfY29udChzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwICpodywKLQkJCWNvbnN0 IHN0cnVjdCBkcHVfcHBfYmxrICpibGssIHVpbnQzMl90IGNvbnRyYXN0LAotCQkJaW50IGxvY2F0 aW9uKQotewotCXUzMiBiYXNlID0gYmxrLT5iYXNlOwotCXUzMiBvZmZzZXQgPSAobG9jYXRpb24g PT0gRFNQUCkgPyBQQV9DT05UX0RTUFBfT0ZGIDogUEFfQ09OVF9WSUdfT0ZGOwotCXUzMiBvcF9j b250X2VuID0gKGxvY2F0aW9uID09IERTUFApID8gRFNQUF9PUF9QQV9DT05UX0VOIDoKLQkJCQkJ VklHX09QX1BBX0NPTlRfRU47Ci0JdTMyIG9wX3BhX2VuID0gKGxvY2F0aW9uID09IERTUFApID8g RFNQUF9PUF9QQV9FTiA6IFZJR19PUF9QQV9FTjsKLQl1MzIgZGlzYWJsZV9yZXE7Ci0JdTMyIG9w bW9kZTsKLQotCURQVV9SRUdfV1JJVEUoaHcsIGJhc2UgKyBvZmZzZXQsIGNvbnRyYXN0ICYgUEFf Q09OVF9NQVNLKTsKLQotCW9wbW9kZSA9IERQVV9SRUdfUkVBRChodywgYmFzZSk7Ci0KLQlpZiAo IWNvbnRyYXN0KSB7Ci0JCW9wbW9kZSAmPSB+b3BfY29udF9lbjsKLQkJZGlzYWJsZV9yZXEgPSAo bG9jYXRpb24gPT0gRFNQUCkgPwotCQkJUEFfRFNQUF9ESVNBQkxFX1JFUVVJUkVEKG9wbW9kZSkg OgotCQkJUEFfVklHX0RJU0FCTEVfUkVRVUlSRUQob3Btb2RlKTsKLQkJaWYgKGRpc2FibGVfcmVx KQotCQkJb3Btb2RlICY9IH5vcF9wYV9lbjsKLQl9IGVsc2UgewotCQlvcG1vZGUgfD0gb3BfY29u dF9lbiB8IG9wX3BhX2VuOwotCX0KLQotCURQVV9SRUdfV1JJVEUoaHcsIGJhc2UsIG9wbW9kZSk7 Ci19Ci0KLXZvaWQgZHB1X3NldHVwX3BpcGVfcGFfY29udF92MV83KHN0cnVjdCBkcHVfaHdfcGlw ZSAqY3R4LCB2b2lkICpjZmcpCi17Ci0JdWludDMyX3QgY29udHJhc3QgPSAqKCh1aW50MzJfdCAq KWNmZyk7Ci0KLQlfX3NldHVwX3BhX2NvbnQoJmN0eC0+aHcsICZjdHgtPmNhcC0+c2Jsay0+aHNp Y19ibGssIGNvbnRyYXN0LCBTU1BQKTsKLX0KLQotdm9pZCBkcHVfc2V0dXBfcGlwZV9wYV9tZW1j b2xfdjFfNyhzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwKLQkJCQkgICBlbnVtIGRwdV9tZW1jb2xv cl90eXBlIHR5cGUsCi0JCQkJICAgdm9pZCAqY2ZnKQotewotCXN0cnVjdCBkcm1fbXNtX21lbWNv bCAqbWMgPSBjZmc7Ci0JdTMyIGJhc2UgPSBjdHgtPmNhcC0+c2Jsay0+bWVtY29sb3JfYmxrLmJh c2U7Ci0JdTMyIG9mZiwgb3AsIG1jX2VuLCBob2xkID0gMDsKLQl1MzIgbWNfaSA9IDA7Ci0KLQlz d2l0Y2ggKHR5cGUpIHsKLQljYXNlIE1FTUNPTE9SX1NLSU46Ci0JCW1jX2VuID0gVklHX09QX1BB X1NLSU5fRU47Ci0JCW1jX2kgPSAwOwotCQlicmVhazsKLQljYXNlIE1FTUNPTE9SX1NLWToKLQkJ bWNfZW4gPSBWSUdfT1BfUEFfU0tZX0VOOwotCQltY19pID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBN RU1DT0xPUl9GT0xJQUdFOgotCQltY19lbiA9IFZJR19PUF9QQV9GT0xfRU47Ci0JCW1jX2kgPSAy OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEUk1fRVJST1IoIkludmFsaWQgbWVtb3J5IGNvbG9y IHR5cGUgJWRcbiIsIHR5cGUpOwotCQlyZXR1cm47Ci0JfQotCi0Jb3AgPSBEUFVfUkVHX1JFQUQo JmN0eC0+aHcsIGJhc2UpOwotCWlmICghbWMpIHsKLQkJb3AgJj0gfm1jX2VuOwotCQlpZiAoUEFf VklHX0RJU0FCTEVfUkVRVUlSRUQob3ApKQotCQkJb3AgJj0gflZJR19PUF9QQV9FTjsKLQkJRFBV X1JFR19XUklURSgmY3R4LT5odywgYmFzZSwgb3ApOwotCQlyZXR1cm47Ci0JfQotCi0Jb2ZmID0g YmFzZSArIChtY19pICogTUVNQ09MX1AwX0xFTik7Ci0JRFBVX1JFR19XUklURSgmY3R4LT5odywg KG9mZiArIE1FTUNPTF9QV0wwX09GRiksCi0JCSAgICAgIG1jLT5jb2xvcl9hZGp1c3RfcDAgJiBN RU1DT0xfUFdMMF9NQVNLKTsKLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCAob2ZmICsgTUVNQ09M X1BXTDFfT0ZGKSwKLQkJICAgICAgbWMtPmNvbG9yX2FkanVzdF9wMSAmIE1FTUNPTF9QV0wxX01B U0spOwotCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIChvZmYgKyBNRU1DT0xfSFVFX1JFR0lPTl9P RkYpLAotCQkgICAgICBtYy0+aHVlX3JlZ2lvbiAmIE1FTUNPTF9IVUVfUkVHSU9OX01BU0spOwot CURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIChvZmYgKyBNRU1DT0xfU0FUX1JFR0lPTl9PRkYpLAot CQkgICAgICBtYy0+c2F0X3JlZ2lvbiAmIE1FTUNPTF9TQVRfUkVHSU9OX01BU0spOwotCURQVV9S RUdfV1JJVEUoJmN0eC0+aHcsIChvZmYgKyBNRU1DT0xfVkFMX1JFR0lPTl9PRkYpLAotCQkgICAg ICBtYy0+dmFsX3JlZ2lvbiAmIE1FTUNPTF9WQUxfUkVHSU9OX01BU0spOwotCi0Jb2ZmID0gYmFz ZSArIChtY19pICogTUVNQ09MX1AxX0xFTik7Ci0JRFBVX1JFR19XUklURSgmY3R4LT5odywgKG9m ZiArIE1FTUNPTF9QV0wyX09GRiksCi0JCSAgICAgIG1jLT5jb2xvcl9hZGp1c3RfcDIgJiBNRU1D T0xfUFdMMl9NQVNLKTsKLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCAob2ZmICsgTUVNQ09MX0JM RU5EX0dBSU5fT0ZGKSwgbWMtPmJsZW5kX2dhaW4pOwotCi0JaG9sZCA9IERQVV9SRUdfUkVBRCgm Y3R4LT5odywgb2ZmICsgTUVNQ09MX1BXTF9IT0xEX09GRik7Ci0JaG9sZCAmPSB+KDB4RiA8PCAo bWNfaSAqIDQpKTsKLQlob2xkIHw9ICgobWMtPnNhdF9ob2xkICYgMHgzKSA8PCAobWNfaSAqIDQp KTsKLQlob2xkIHw9ICgobWMtPnZhbF9ob2xkICYgMHgzKSA8PCAoKG1jX2kgKiA0KSArIDIpKTsK LQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCAob2ZmICsgTUVNQ09MX1BXTF9IT0xEX09GRiksIGhv bGQpOwotCi0Jb3AgfD0gVklHX09QX1BBX0VOIHwgbWNfZW47Ci0JRFBVX1JFR19XUklURSgmY3R4 LT5odywgYmFzZSwgb3ApOwotfQotCi12b2lkIGRwdV9zZXR1cF9kc3BwX3BjY192MV83KHN0cnVj dCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpCi17Ci0Jc3RydWN0IGRwdV9od19jcF9jZmcg Kmh3X2NmZyA9IGNmZzsKLQlzdHJ1Y3QgZHJtX21zbV9wY2MgKnBjYzsKLQl2b2lkICBfX2lvbWVt ICpiYXNlOwotCi0JaWYgKCFod19jZmcgIHx8IChod19jZmctPmxlbiAhPSBzaXplb2YoKnBjYykg ICYmIGh3X2NmZy0+cGF5bG9hZCkpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIHBhcmFtcyBodyAl cCBwYXlsb2FkICVwIHBheWxvYWRzaXplICVkIFwiXAotCQkJICBleHAgc2l6ZSAlemRcbiIsCi0J CQkgICBod19jZmcsICgoaHdfY2ZnKSA/IGh3X2NmZy0+cGF5bG9hZCA6IE5VTEwpLAotCQkJICAg KChod19jZmcpID8gaHdfY2ZnLT5sZW4gOiAwKSwgc2l6ZW9mKCpwY2MpKTsKLQkJcmV0dXJuOwot CX0KLQliYXNlID0gY3R4LT5ody5iYXNlX29mZiArIGN0eC0+Y2FwLT5iYXNlOwotCi0JLyogVHVy biBvZmYgZmVhdHVyZSAqLwotCWlmICghaHdfY2ZnLT5wYXlsb2FkKSB7Ci0JCURQVV9SRUdfV1JJ VEUoJmN0eC0+aHcsIGN0eC0+Y2FwLT5zYmxrLT5wY2MuYmFzZSwKLQkJCSAgICAgIFBDQ19PUF9N T0RFX09GRik7Ci0JCXJldHVybjsKLQl9Ci0JRFJNX0RFQlVHX0RSSVZFUigiRW5hYmxlIFBDQyBm ZWF0dXJlXG4iKTsKLQlwY2MgPSBod19jZmctPnBheWxvYWQ7Ci0KLQlEUFVfUkVHX1dSSVRFKCZj dHgtPmh3LCBjdHgtPmNhcC0+c2Jsay0+cGNjLmJhc2UgKyBQQ0NfQ09OU1RfQ09FRkZfT0ZGLAot CQkJCSAgcGNjLT5yLmMgJiBQQ0NfQ09OU1RfQ09FRkZfTUFTSyk7Ci0JRFBVX1JFR19XUklURSgm Y3R4LT5odywKLQkJICAgICAgY3R4LT5jYXAtPnNibGstPnBjYy5iYXNlICsgUENDX0NPTlNUX0NP RUZGX09GRiArIDQsCi0JCSAgICAgIHBjYy0+Zy5jICYgUENDX0NPTlNUX0NPRUZGX01BU0spOwot CURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsCi0JCSAgICAgIGN0eC0+Y2FwLT5zYmxrLT5wY2MuYmFz ZSArIFBDQ19DT05TVF9DT0VGRl9PRkYgKyA4LAotCQkgICAgICBwY2MtPmIuYyAmIFBDQ19DT05T VF9DT0VGRl9NQVNLKTsKLQotCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIGN0eC0+Y2FwLT5zYmxr LT5wY2MuYmFzZSArIFBDQ19SX0NPRUZGX09GRiwKLQkJCQkgIHBjYy0+ci5yICYgUENDX0NPRUZG X01BU0spOwotCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIGN0eC0+Y2FwLT5zYmxrLT5wY2MuYmFz ZSArIFBDQ19SX0NPRUZGX09GRiArIDQsCi0JCQkJICBwY2MtPmcuciAmIFBDQ19DT0VGRl9NQVNL KTsKLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBjdHgtPmNhcC0+c2Jsay0+cGNjLmJhc2UgKyBQ Q0NfUl9DT0VGRl9PRkYgKyA4LAotCQkJCSAgcGNjLT5iLnIgJiBQQ0NfQ09FRkZfTUFTSyk7Ci0K LQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBjdHgtPmNhcC0+c2Jsay0+cGNjLmJhc2UgKyBQQ0Nf R19DT0VGRl9PRkYsCi0JCQkJICBwY2MtPnIuZyAmIFBDQ19DT0VGRl9NQVNLKTsKLQlEUFVfUkVH X1dSSVRFKCZjdHgtPmh3LCBjdHgtPmNhcC0+c2Jsay0+cGNjLmJhc2UgKyBQQ0NfR19DT0VGRl9P RkYgKyA0LAotCQkJCSAgcGNjLT5nLmcgJiBQQ0NfQ09FRkZfTUFTSyk7Ci0JRFBVX1JFR19XUklU RSgmY3R4LT5odywgY3R4LT5jYXAtPnNibGstPnBjYy5iYXNlICsgUENDX0dfQ09FRkZfT0ZGICsg OCwKLQkJCQkgIHBjYy0+Yi5nICYgUENDX0NPRUZGX01BU0spOwotCi0JRFBVX1JFR19XUklURSgm Y3R4LT5odywgY3R4LT5jYXAtPnNibGstPnBjYy5iYXNlICsgUENDX0JfQ09FRkZfT0ZGLAotCQkJ CSAgcGNjLT5yLmIgJiBQQ0NfQ09FRkZfTUFTSyk7Ci0JRFBVX1JFR19XUklURSgmY3R4LT5odywg Y3R4LT5jYXAtPnNibGstPnBjYy5iYXNlICsgUENDX0JfQ09FRkZfT0ZGICsgNCwKLQkJCQkgIHBj Yy0+Zy5iICYgUENDX0NPRUZGX01BU0spOwotCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIGN0eC0+ Y2FwLT5zYmxrLT5wY2MuYmFzZSArIFBDQ19CX0NPRUZGX09GRiArIDgsCi0JCQkJICBwY2MtPmIu YiAmIFBDQ19DT0VGRl9NQVNLKTsKLQotCi0JRFBVX1JFR19XUklURSgmY3R4LT5odywgY3R4LT5j YXAtPnNibGstPnBjYy5iYXNlICsgUENDX1JHX0NPRUZGX09GRiwKLQkJCQkgIHBjYy0+ci5yZyAm IFBDQ19DT0VGRl9NQVNLKTsKLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBjdHgtPmNhcC0+c2Js ay0+cGNjLmJhc2UgKyBQQ0NfUkdfQ09FRkZfT0ZGICsgNCwKLQkJCQkgIHBjYy0+Zy5yZyAmIFBD Q19DT0VGRl9NQVNLKTsKLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBjdHgtPmNhcC0+c2Jsay0+ cGNjLmJhc2UgKyBQQ0NfUkdfQ09FRkZfT0ZGICsgOCwKLQkJCQkgIHBjYy0+Yi5yZyAmIFBDQ19D T0VGRl9NQVNLKTsKLQotCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIGN0eC0+Y2FwLT5zYmxrLT5w Y2MuYmFzZSArIFBDQ19SQl9DT0VGRl9PRkYsCi0JCQkJICBwY2MtPnIucmIgJiBQQ0NfQ09FRkZf TUFTSyk7Ci0JRFBVX1JFR19XUklURSgmY3R4LT5odywgY3R4LT5jYXAtPnNibGstPnBjYy5iYXNl ICsgUENDX1JCX0NPRUZGX09GRiArIDQsCi0JCQkJICBwY2MtPmcucmIgJiBQQ0NfQ09FRkZfTUFT Syk7Ci0JRFBVX1JFR19XUklURSgmY3R4LT5odywgY3R4LT5jYXAtPnNibGstPnBjYy5iYXNlICsg UENDX1JCX0NPRUZGX09GRiArIDgsCi0JCQkJICBwY2MtPmIucmIgJiBQQ0NfQ09FRkZfTUFTSyk7 Ci0KLQotCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIGN0eC0+Y2FwLT5zYmxrLT5wY2MuYmFzZSAr IFBDQ19HQl9DT0VGRl9PRkYsCi0JCQkJICBwY2MtPnIuZ2IgJiBQQ0NfQ09FRkZfTUFTSyk7Ci0J RFBVX1JFR19XUklURSgmY3R4LT5odywgY3R4LT5jYXAtPnNibGstPnBjYy5iYXNlICsgUENDX0dC X0NPRUZGX09GRiArIDQsCi0JCQkJICBwY2MtPmcuZ2IgJiBQQ0NfQ09FRkZfTUFTSyk7Ci0JRFBV X1JFR19XUklURSgmY3R4LT5odywgY3R4LT5jYXAtPnNibGstPnBjYy5iYXNlICsgUENDX0dCX0NP RUZGX09GRiArIDgsCi0JCQkJICBwY2MtPmIuZ2IgJiBQQ0NfQ09FRkZfTUFTSyk7Ci0KLQlEUFVf UkVHX1dSSVRFKCZjdHgtPmh3LCBjdHgtPmNhcC0+c2Jsay0+cGNjLmJhc2UgKyBQQ0NfUkdCX0NP RUZGX09GRiwKLQkJCQkgIHBjYy0+ci5yZ2IgJiBQQ0NfQ09FRkZfTUFTSyk7Ci0JRFBVX1JFR19X UklURSgmY3R4LT5odywKLQkJICAgICAgY3R4LT5jYXAtPnNibGstPnBjYy5iYXNlICsgUENDX1JH Ql9DT0VGRl9PRkYgKyA0LAotCQkgICAgICBwY2MtPmcucmdiICYgUENDX0NPRUZGX01BU0spOwot CURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsCi0JCSAgICAgIGN0eC0+Y2FwLT5zYmxrLT5wY2MuYmFz ZSArIFBDQ19SR0JfQ09FRkZfT0ZGICsgOCwKLQkJICAgICAgcGNjLT5iLnJnYiAmIFBDQ19DT0VG Rl9NQVNLKTsKLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBjdHgtPmNhcC0+c2Jsay0+cGNjLmJh c2UsIERTUFBfT1BfUENDX0VOQUJMRSk7Ci19Ci0KLXZvaWQgZHB1X3NldHVwX2RzcHBfcGFfdmx1 dF92MV83KHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpCi17Ci0Jc3RydWN0IGRy bV9tc21fcGFfdmx1dCAqcGF5bG9hZCA9IE5VTEw7Ci0Jc3RydWN0IGRwdV9od19jcF9jZmcgKmh3 X2NmZyA9IGNmZzsKLQl1MzIgYmFzZSA9IGN0eC0+Y2FwLT5zYmxrLT52bHV0LmJhc2U7Ci0JdTMy IG9mZnNldCA9IGJhc2UgKyBQQV9MVVRWX0RTUFBfT0ZGOwotCXUzMiBvcF9tb2RlLCB0bXA7Ci0J aW50IGkgPSAwLCBqID0gMDsKLQotCWlmICghaHdfY2ZnIHx8IChod19jZmctPnBheWxvYWQgJiYg aHdfY2ZnLT5sZW4gIT0KLQkJCXNpemVvZihzdHJ1Y3QgZHJtX21zbV9wYV92bHV0KSkpIHsKLQkJ RFJNX0VSUk9SKCJodyAlcEsgcGF5bG9hZCAlcEsgcGF5bG9hZHNpemUgJWQgZXhwIHNpemUgJXpk XG4iLAotCQkJICBod19jZmcsICgoaHdfY2ZnKSA/IGh3X2NmZy0+cGF5bG9hZCA6IE5VTEwpLAot CQkJICAoKGh3X2NmZykgPyBod19jZmctPmxlbiA6IDApLAotCQkJICBzaXplb2Yoc3RydWN0IGRy bV9tc21fcGFfdmx1dCkpOwotCQlyZXR1cm47Ci0JfQotCW9wX21vZGUgPSBEUFVfUkVHX1JFQUQo JmN0eC0+aHcsIGJhc2UpOwotCWlmICghaHdfY2ZnLT5wYXlsb2FkKSB7Ci0JCURSTV9ERUJVR19E UklWRVIoIkRpc2FibGUgdmx1dCBmZWF0dXJlXG4iKTsKLQkJLyoqCi0JCSAqIEluIHRoZSBQQV9W TFVUIGRpc2FibGUgY2FzZSwgcmVtb3ZlIFBBX1ZMVVQgZW5hYmxlIGJpdCgxOSkKLQkJICogZmly c3QsIHRoZW4gY2hlY2sgd2hldGhlciBhbnkgb3RoZXIgUEEgc3ViLWZlYXR1cmVzIGFyZQotCQkg KiBlbmFibGVkIG9yIG5vdC4gSWYgbm9uZSBvZiB0aGUgc3ViLWZlYXR1cmVzIGFyZSBlbmFibGVk LAotCQkgKiByZW1vdmUgdGhlIFBBIGdsb2JhbCBlbmFibGUgYml0KDIwKS4KLQkJICovCi0JCW9w X21vZGUgJj0gfigodTMyKURTUFBfT1BfUEFfTFVUVl9FTik7Ci0JCWlmIChQQV9EU1BQX0RJU0FC TEVfUkVRVUlSRUQob3BfbW9kZSkpCi0JCQlvcF9tb2RlICY9IH4oKHUzMilEU1BQX09QX1BBX0VO KTsKLQkJRFBVX1JFR19XUklURSgmY3R4LT5odywgYmFzZSwgb3BfbW9kZSk7Ci0JCXJldHVybjsK LQl9Ci0JcGF5bG9hZCA9IGh3X2NmZy0+cGF5bG9hZDsKLQlEUk1fREVCVUdfRFJJVkVSKCJFbmFi bGUgdmx1dCBmZWF0dXJlIGZsYWdzICVsbHhcbiIsIHBheWxvYWQtPmZsYWdzKTsKLQlmb3IgKGkg PSAwLCBqID0gMDsgaSA8IEFSUkFZX1NJWkUocGF5bG9hZC0+dmFsKTsgaSArPSAyLCBqICs9IDQp IHsKLQkJdG1wID0gKHBheWxvYWQtPnZhbFtpXSAmIFJFR19NQVNLKDEwKSkgfAotCQkJKChwYXls b2FkLT52YWxbaSArIDFdICYgUkVHX01BU0soMTApKSA8PCAxNik7Ci0JCURQVV9SRUdfV1JJVEUo JmN0eC0+aHcsIChvZmZzZXQgKyBqKSwKLQkJCSAgICAgdG1wKTsKLQl9Ci0JRFBVX1JFR19XUklU RSgmY3R4LT5odywgKGJhc2UgKyBQQV9MVVRfU1dBUF9PRkYpLCAxKTsKLQlvcF9tb2RlIHw9IERT UFBfT1BfUEFfRU4gfCBEU1BQX09QX1BBX0xVVFZfRU47Ci0JRFBVX1JFR19XUklURSgmY3R4LT5o dywgYmFzZSwgb3BfbW9kZSk7Ci19Ci0KLXZvaWQgZHB1X3NldHVwX2RzcHBfcGFfdmx1dF92MV84 KHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpCi17Ci0Jc3RydWN0IGRybV9tc21f cGFfdmx1dCAqcGF5bG9hZCA9IE5VTEw7Ci0Jc3RydWN0IGRwdV9od19jcF9jZmcgKmh3X2NmZyA9 IGNmZzsKLQlzdHJ1Y3QgZHB1X2h3X2N0bCAqY3RsID0gTlVMTDsKLQl1MzIgdmx1dF9iYXNlLCBw YV9oaXN0X2Jhc2U7Ci0JdTMyIGN0cmxfb2ZmLCBzd2FwX29mZjsKLQl1MzIgdG1wID0gMDsKLQlp bnQgaSA9IDAsIGogPSAwOwotCXUzMiBmbHVzaF9tYXNrID0gMDsKLQotCWlmICghY3R4KSB7Ci0J CURSTV9FUlJPUigiaW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIgTlVMTCBjdHhcbiIpOwotCQlyZXR1 cm47Ci0JfQotCi0JaWYgKCFod19jZmcgfHwgKGh3X2NmZy0+cGF5bG9hZCAmJiBod19jZmctPmxl biAhPQotCQkJc2l6ZW9mKHN0cnVjdCBkcm1fbXNtX3BhX3ZsdXQpKSkgewotCQlEUk1fRVJST1Io Imh3ICVwSyBwYXlsb2FkICVwSyBwYXlsb2Fkc2l6ZSAlZCBleHAgc2l6ZSAlemRcbiIsCi0JCQkg IGh3X2NmZywgKChod19jZmcpID8gaHdfY2ZnLT5wYXlsb2FkIDogTlVMTCksCi0JCQkgICgoaHdf Y2ZnKSA/IGh3X2NmZy0+bGVuIDogMCksCi0JCQkgIHNpemVvZihzdHJ1Y3QgZHJtX21zbV9wYV92 bHV0KSk7Ci0JCXJldHVybjsKLQl9Ci0KLQljdGwgPSBod19jZmctPmN0bDsKLQl2bHV0X2Jhc2Ug PSBjdHgtPmNhcC0+c2Jsay0+dmx1dC5iYXNlOwotCXBhX2hpc3RfYmFzZSA9IGN0eC0+Y2FwLT5z YmxrLT5oaXN0LmJhc2U7Ci0JY3RybF9vZmYgPSBwYV9oaXN0X2Jhc2UgKyBQQV9MVVRWX0RTUFBf Q1RSTF9PRkY7Ci0Jc3dhcF9vZmYgPSBwYV9oaXN0X2Jhc2UgKyBQQV9MVVRWX0RTUFBfU1dBUF9P RkY7Ci0KLQlpZiAoIWh3X2NmZy0+cGF5bG9hZCkgewotCQlEUk1fREVCVUdfRFJJVkVSKCJEaXNh YmxlIHZsdXQgZmVhdHVyZVxuIik7Ci0JCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIGN0cmxfb2Zm LCAwKTsKLQkJZ290byBleGl0OwotCX0KLQotCXBheWxvYWQgPSBod19jZmctPnBheWxvYWQ7Ci0J RFJNX0RFQlVHX0RSSVZFUigiRW5hYmxlIHZsdXQgZmVhdHVyZSBmbGFncyAlbGx4XG4iLCBwYXls b2FkLT5mbGFncyk7Ci0JZm9yIChpID0gMCwgaiA9IDA7IGkgPCBBUlJBWV9TSVpFKHBheWxvYWQt PnZhbCk7IGkgKz0gMiwgaiArPSA0KSB7Ci0JCXRtcCA9IChwYXlsb2FkLT52YWxbaV0gJiBSRUdf TUFTSygxMCkpIHwKLQkJCSgocGF5bG9hZC0+dmFsW2kgKyAxXSAmIFJFR19NQVNLKDEwKSkgPDwg MTYpOwotCQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCAodmx1dF9iYXNlICsgaiksIHRtcCk7Ci0J fQotCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIGN0cmxfb2ZmLCAxKTsKLQlEUFVfUkVHX1dSSVRF KCZjdHgtPmh3LCBzd2FwX29mZiwgMSk7Ci0KLWV4aXQ6Ci0JLyogdXBkYXRlIGZsdXNoIGJpdCAq LwotCWlmIChjdGwgJiYgY3RsLT5vcHMuZ2V0X2JpdG1hc2tfZHNwcF9wYXZsdXQpIHsKLQkJY3Rs LT5vcHMuZ2V0X2JpdG1hc2tfZHNwcF9wYXZsdXQoY3RsLCAmZmx1c2hfbWFzaywgY3R4LT5pZHgp OwotCQlpZiAoY3RsLT5vcHMudXBkYXRlX3BlbmRpbmdfZmx1c2gpCi0JCQljdGwtPm9wcy51cGRh dGVfcGVuZGluZ19mbHVzaChjdGwsIGZsdXNoX21hc2spOwotCX0KLX0KLQotdm9pZCBkcHVfc2V0 dXBfZHNwcF9nY192MV83KHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpCi17Ci0J c3RydWN0IGRybV9tc21fcGdjX2x1dCAqcGF5bG9hZCA9IE5VTEw7Ci0Jc3RydWN0IGRwdV9od19j cF9jZmcgKmh3X2NmZyA9IGNmZzsKLQl1MzIgYzBfb2ZmLCBjMV9vZmYsIGMyX29mZiwgaTsKLQot CWlmICghaHdfY2ZnIHx8IChod19jZmctPnBheWxvYWQgJiYgaHdfY2ZnLT5sZW4gIT0KLQkJCXNp emVvZihzdHJ1Y3QgZHJtX21zbV9wZ2NfbHV0KSkpIHsKLQkJRFJNX0VSUk9SKCJodyAlcEsgcGF5 bG9hZCAlcEsgcGF5bG9hZHNpemUgJWQgZXhwIHNpemUgJXpkXG4iLAotCQkJICBod19jZmcsICgo aHdfY2ZnKSA/IGh3X2NmZy0+cGF5bG9hZCA6IE5VTEwpLAotCQkJICAoKGh3X2NmZykgPyBod19j ZmctPmxlbiA6IDApLAotCQkJICBzaXplb2Yoc3RydWN0IGRybV9tc21fcGdjX2x1dCkpOwotCQly ZXR1cm47Ci0JfQotCi0JaWYgKCFod19jZmctPnBheWxvYWQpIHsKLQkJRFJNX0RFQlVHX0RSSVZF UigiRGlzYWJsZSBwZ2MgZmVhdHVyZVxuIik7Ci0JCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIGN0 eC0+Y2FwLT5zYmxrLT5nYy5iYXNlLCAwKTsKLQkJcmV0dXJuOwotCX0KLQlwYXlsb2FkID0gaHdf Y2ZnLT5wYXlsb2FkOwotCi0JLyogSW5pdGlhbGl6ZSBpbmRleCBvZmZzZXRzICovCi0JYzBfb2Zm ID0gY3R4LT5jYXAtPnNibGstPmdjLmJhc2UgKyBQR0NfQzBfSU5ERVhfT0ZGOwotCWMxX29mZiA9 IGMwX29mZiArIChzaXplb2YodTMyKSAqIDIpOwotCWMyX29mZiA9IGMxX29mZiArIChzaXplb2Yo dTMyKSAqIDIpOwotCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIGMwX29mZiwgMCk7Ci0JRFBVX1JF R19XUklURSgmY3R4LT5odywgYzFfb2ZmLCAwKTsKLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBj Ml9vZmYsIDApOwotCi0JLyogSW5pdGlhbGl6ZSB0YWJsZSBvZmZzZXRzICovCi0JYzBfb2ZmID0g Y3R4LT5jYXAtPnNibGstPmdjLmJhc2UgKyBQR0NfQzBfT0ZGOwotCWMxX29mZiA9IGMwX29mZiAr IChzaXplb2YodTMyKSAqIDIpOwotCWMyX29mZiA9IGMxX29mZiArIChzaXplb2YodTMyKSAqIDIp OwotCi0JZm9yIChpID0gMDsgaSA8IFBHQ19UQkxfTEVOOyBpKyspIHsKLQkJRFBVX1JFR19XUklU RSgmY3R4LT5odywgYzBfb2ZmLCBwYXlsb2FkLT5jMFtpXSk7Ci0JCURQVV9SRUdfV1JJVEUoJmN0 eC0+aHcsIGMxX29mZiwgcGF5bG9hZC0+YzFbaV0pOwotCQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3 LCBjMl9vZmYsIHBheWxvYWQtPmMyW2ldKTsKLQl9Ci0JRFBVX1JFR19XUklURSgmY3R4LT5odywg Y3R4LT5jYXAtPnNibGstPmdjLmJhc2UgKyBQR0NfTFVUX1NXQVBfT0ZGLAotCQkJQklUKDApKTsK LQlpID0gQklUKDApIHwgKChwYXlsb2FkLT5mbGFncyAmIFBHQ184Ql9ST1VORCkgPyBCSVQoMSkg OiAwKTsKLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBjdHgtPmNhcC0+c2Jsay0+Z2MuYmFzZSwg aSk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdf Y29sb3JfcHJvY2Vzc2luZ192MV83LmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfaHdfY29sb3JfcHJvY2Vzc2luZ192MV83LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDc2ODA3YWUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2h3X2NvbG9yX3Byb2Nlc3NpbmdfdjFfNy5oCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAs MCBAQAotLyogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBB bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAq IG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2lmbmRlZiBfRFBVX0hXX0NP TE9SX1BST0NFU1NJTkdfVjFfN19ICi0jZGVmaW5lIF9EUFVfSFdfQ09MT1JfUFJPQ0VTU0lOR19W MV83X0gKLQotI2luY2x1ZGUgImRwdV9od19zc3BwLmgiCi0jaW5jbHVkZSAiZHB1X2h3X2RzcHAu aCIKLQotLyoqCi0gKiBkcHVfc2V0dXBfcGlwZV9wYV9odWVfdjFfNyAtIHNldHVwIFNTUFAgaHVl IGZlYXR1cmUgaW4gdjEuNyBoYXJkd2FyZQotICogQGN0eDogUG9pbnRlciB0byBwaXBlIGNvbnRl eHQKLSAqIEBjZmc6IFBvaW50ZXIgdG8gaHVlIGRhdGEKLSAqLwotdm9pZCBkcHVfc2V0dXBfcGlw ZV9wYV9odWVfdjFfNyhzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwgdm9pZCAqY2ZnKTsKLQotLyoq Ci0gKiBkcHVfc2V0dXBfcGlwZV9wYV9zYXRfdjFfNyAtIHNldHVwIFNTUFAgc2F0dXJhdGlvbiBm ZWF0dXJlIGluIHYxLjcgaGFyZHdhcmUKLSAqIEBjdHg6IFBvaW50ZXIgdG8gcGlwZSBjb250ZXh0 Ci0gKiBAY2ZnOiBQb2ludGVyIHRvIHNhdHVyYXRpb24gZGF0YQotICovCi12b2lkIGRwdV9zZXR1 cF9waXBlX3BhX3NhdF92MV83KHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4LCB2b2lkICpjZmcpOwot Ci0vKioKLSAqIGRwdV9zZXR1cF9waXBlX3BhX3ZhbF92MV83IC0gc2V0dXAgU1NQUCB2YWx1ZSBm ZWF0dXJlIGluIHYxLjcgaGFyZHdhcmUKLSAqIEBjdHg6IFBvaW50ZXIgdG8gcGlwZSBjb250ZXh0 Ci0gKiBAY2ZnOiBQb2ludGVyIHRvIHZhbHVlIGRhdGEKLSAqLwotdm9pZCBkcHVfc2V0dXBfcGlw ZV9wYV92YWxfdjFfNyhzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwgdm9pZCAqY2ZnKTsKLQotLyoq Ci0gKiBkcHVfc2V0dXBfcGlwZV9wYV9jb250X3YxXzcgLSBzZXR1cCBTU1BQIGNvbnRyYXN0IGZl YXR1cmUgaW4gdjEuNyBoYXJkd2FyZQotICogQGN0eDogUG9pbnRlciB0byBwaXBlIGNvbnRleHQK LSAqIEBjZmc6IFBvaW50ZXIgdG8gY29udHJhc3QgZGF0YQotICovCi12b2lkIGRwdV9zZXR1cF9w aXBlX3BhX2NvbnRfdjFfNyhzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwgdm9pZCAqY2ZnKTsKLQot LyoqCi0gKiBkcHVfc2V0dXBfcGlwZV9wYV9tZW1jb2xfdjFfNyAtIHNldHVwIFNTUFAgbWVtb3J5 IGNvbG9yIGluIHYxLjcgaGFyZHdhcmUKLSAqIEBjdHg6IFBvaW50ZXIgdG8gcGlwZSBjb250ZXh0 Ci0gKiBAdHlwZTogTWVtb3J5IGNvbG9yIHR5cGUgKFNraW4sIHNreSwgb3IgZm9saWFnZSkKLSAq IEBjZmc6IFBvaW50ZXIgdG8gbWVtb3J5IGNvbG9yIGNvbmZpZyBkYXRhCi0gKi8KLXZvaWQgZHB1 X3NldHVwX3BpcGVfcGFfbWVtY29sX3YxXzcoc3RydWN0IGRwdV9od19waXBlICpjdHgsCi0JCQkJ ICAgZW51bSBkcHVfbWVtY29sb3JfdHlwZSB0eXBlLAotCQkJCSAgIHZvaWQgKmNmZyk7Ci0KLS8q KgotICogZHB1X3NldHVwX2RzcHBfcGNjX3YxXzcgLSBzZXR1cCBEU1BQIFBDQyB2ZWF0dXJlIGlu IHYxLjcgaGFyZHdhcmUKLSAqIEBjdHg6IFBvaW50ZXIgdG8gZHNwcCBjb250ZXh0Ci0gKiBAY2Zn OiBQb2ludGVyIHRvIFBDQyBkYXRhCi0gKi8KLXZvaWQgZHB1X3NldHVwX2RzcHBfcGNjX3YxXzco c3RydWN0IGRwdV9od19kc3BwICpjdHgsIHZvaWQgKmNmZyk7Ci0KLS8qKgotICogZHB1X3NldHVw X2RzcHBfcGFfaHVlX3YxXzcgLSBzZXR1cCBEU1BQIGh1ZSBmZWF0dXJlIGluIHYxLjcgaGFyZHdh cmUKLSAqIEBjdHg6IFBvaW50ZXIgdG8gRFNQUCBjb250ZXh0Ci0gKiBAY2ZnOiBQb2ludGVyIHRv IGh1ZSBkYXRhCi0gKi8KLXZvaWQgZHB1X3NldHVwX2RzcHBfcGFfaHVlX3YxXzcoc3RydWN0IGRw dV9od19kc3BwICpjdHgsIHZvaWQgKmNmZyk7Ci0KLS8qKgotICogZHB1X3NldHVwX2RzcHBfcGFf dmx1dF92MV83IC0gc2V0dXAgRFNQUCBQQSB2TFVUIGZlYXR1cmUgaW4gdjEuNyBoYXJkd2FyZQot ICogQGN0eDogUG9pbnRlciB0byBEU1BQIGNvbnRleHQKLSAqIEBjZmc6IFBvaW50ZXIgdG8gdkxV VCBkYXRhCi0gKi8KLXZvaWQgZHB1X3NldHVwX2RzcHBfcGFfdmx1dF92MV83KHN0cnVjdCBkcHVf aHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpOwotCi0vKioKLSAqIGRwdV9zZXR1cF9kc3BwX3BhX3Zs dXRfdjFfOCAtIHNldHVwIERTUFAgUEEgdkxVVCBmZWF0dXJlIGluIHYxLjggaGFyZHdhcmUKLSAq IEBjdHg6IFBvaW50ZXIgdG8gRFNQUCBjb250ZXh0Ci0gKiBAY2ZnOiBQb2ludGVyIHRvIHZMVVQg ZGF0YQotICovCi12b2lkIGRwdV9zZXR1cF9kc3BwX3BhX3ZsdXRfdjFfOChzdHJ1Y3QgZHB1X2h3 X2RzcHAgKmN0eCwgdm9pZCAqY2ZnKTsKLQotLyoqCi0gKiBkcHVfc2V0dXBfZHNwcF9nY192MV83 IC0gc2V0dXAgRFNQUCBnYyBmZWF0dXJlIGluIHYxLjcgaGFyZHdhcmUKLSAqIEBjdHg6IFBvaW50 ZXIgdG8gRFNQUCBjb250ZXh0Ci0gKiBAY2ZnOiBQb2ludGVyIHRvIGdjIGRhdGEKLSAqLwotdm9p ZCBkcHVfc2V0dXBfZHNwcF9nY192MV83KHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpj ZmcpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9od19jdGwuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jdGwu YwppbmRleCA2OTIyZDhhLi40ODY1NDI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfaHdfY3RsLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2h3X2N0bC5jCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSAiZHB1X2h3X2N0bC5o IgogI2luY2x1ZGUgImRwdV9kYmcuaCIKICNpbmNsdWRlICJkcHVfa21zLmgiCi0jaW5jbHVkZSAi ZHB1X3JlZ19kbWEuaCIKIAogI2RlZmluZSAgIENUTF9MQVlFUihsbSkgICAgICAgICAgICAgICAg IFwKIAkoKChsbSkgPT0gTE1fNSkgPyAoMHgwMjQpIDogKCgobG0pIC0gTE1fMCkgKiAweDAwNCkp CkBAIC0yMDMsMzggKzIwMiw2IEBAIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgZHB1X2h3X2N0bF9n ZXRfYml0bWFza19taXhlcihzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4LAogCXJldHVybiBmbHVzaGJp dHM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGRwdV9od19jdGxfZ2V0X2JpdG1hc2tfZHNwcChz dHJ1Y3QgZHB1X2h3X2N0bCAqY3R4LAotCQl1MzIgKmZsdXNoYml0cywgZW51bSBkcHVfZHNwcCBk c3BwKQotewotCXN3aXRjaCAoZHNwcCkgewotCWNhc2UgRFNQUF8wOgotCQkqZmx1c2hiaXRzIHw9 IEJJVCgxMyk7Ci0JCWJyZWFrOwotCWNhc2UgRFNQUF8xOgotCQkqZmx1c2hiaXRzIHw9IEJJVCgx NCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4g MDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZHB1X2h3X2N0bF9nZXRfYml0bWFza19kc3BwX3Bh dmx1dChzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4LAotCQl1MzIgKmZsdXNoYml0cywgZW51bSBkcHVf ZHNwcCBkc3BwKQotewotCXN3aXRjaCAoZHNwcCkgewotCWNhc2UgRFNQUF8wOgotCQkqZmx1c2hi aXRzIHw9IEJJVCgzKTsKLQkJYnJlYWs7Ci0JY2FzZSBEU1BQXzE6Ci0JCSpmbHVzaGJpdHMgfD0g QklUKDQpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcmV0 dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IGRwdV9od19jdGxfZ2V0X2JpdG1hc2tfaW50 ZihzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4LAogCQl1MzIgKmZsdXNoYml0cywgZW51bSBkcHVfaW50 ZiBpbnRmKQogewpAQCAtNTE4LDE0ICs0ODUsNiBAQCBzdGF0aWMgdm9pZCBkcHVfaHdfY3RsX2lu dGZfY2ZnKHN0cnVjdCBkcHVfaHdfY3RsICpjdHgsCiAJRFBVX1JFR19XUklURShjLCBDVExfVE9Q LCBpbnRmX2NmZyk7CiB9CiAKLXN0YXRpYyB2b2lkIGRwdV9od19yZWdfZG1hX2ZsdXNoKHN0cnVj dCBkcHVfaHdfY3RsICpjdHgpCi17Ci0Jc3RydWN0IGRwdV9od19yZWdfZG1hX29wcyAqb3BzID0g ZHB1X3JlZ19kbWFfZ2V0X29wcygpOwotCi0JaWYgKG9wcyAmJiBvcHMtPmxhc3RfY29tbWFuZCkK LQkJb3BzLT5sYXN0X2NvbW1hbmQoY3R4LCBETUFfQ1RMX1FVRVVFMCk7Ci19Ci0KIHN0YXRpYyB2 b2lkIF9zZXR1cF9jdGxfb3BzKHN0cnVjdCBkcHVfaHdfY3RsX29wcyAqb3BzLAogCQl1bnNpZ25l ZCBsb25nIGNhcCkKIHsKQEAgLTU0MywxMiArNTAyLDkgQEAgc3RhdGljIHZvaWQgX3NldHVwX2N0 bF9vcHMoc3RydWN0IGRwdV9od19jdGxfb3BzICpvcHMsCiAJb3BzLT5zZXR1cF9ibGVuZHN0YWdl ID0gZHB1X2h3X2N0bF9zZXR1cF9ibGVuZHN0YWdlOwogCW9wcy0+Z2V0X2JpdG1hc2tfc3NwcCA9 IGRwdV9od19jdGxfZ2V0X2JpdG1hc2tfc3NwcDsKIAlvcHMtPmdldF9iaXRtYXNrX21peGVyID0g ZHB1X2h3X2N0bF9nZXRfYml0bWFza19taXhlcjsKLQlvcHMtPmdldF9iaXRtYXNrX2RzcHAgPSBk cHVfaHdfY3RsX2dldF9iaXRtYXNrX2RzcHA7Ci0Jb3BzLT5nZXRfYml0bWFza19kc3BwX3Bhdmx1 dCA9IGRwdV9od19jdGxfZ2V0X2JpdG1hc2tfZHNwcF9wYXZsdXQ7CiAJb3BzLT5nZXRfYml0bWFz a19pbnRmID0gZHB1X2h3X2N0bF9nZXRfYml0bWFza19pbnRmOwogCW9wcy0+Z2V0X2JpdG1hc2tf Y2RtID0gZHB1X2h3X2N0bF9nZXRfYml0bWFza19jZG07CiAJb3BzLT5nZXRfYml0bWFza193YiA9 IGRwdV9od19jdGxfZ2V0X2JpdG1hc2tfd2I7Ci0Jb3BzLT5yZWdfZG1hX2ZsdXNoID0gZHB1X2h3 X3JlZ19kbWFfZmx1c2g7CiB9OwogCiBzdGF0aWMgc3RydWN0IGRwdV9od19ibGtfb3BzIGRwdV9o d19vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf aHdfY3RsLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY3RsLmgKaW5k ZXggZDM0MzViZS4uYjc3M2E1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2h3X2N0bC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9od19jdGwuaApAQCAtMTQwLDE0ICsxNDAsNiBAQCBzdHJ1Y3QgZHB1X2h3X2N0bF9vcHMgewog CXVpbnQzMl90ICgqZ2V0X2JpdG1hc2tfbWl4ZXIpKHN0cnVjdCBkcHVfaHdfY3RsICpjdHgsCiAJ CWVudW0gZHB1X2xtIGJsayk7CiAKLQlpbnQgKCpnZXRfYml0bWFza19kc3BwKShzdHJ1Y3QgZHB1 X2h3X2N0bCAqY3R4LAotCQl1MzIgKmZsdXNoYml0cywKLQkJZW51bSBkcHVfZHNwcCBibGspOwot Ci0JaW50ICgqZ2V0X2JpdG1hc2tfZHNwcF9wYXZsdXQpKHN0cnVjdCBkcHVfaHdfY3RsICpjdHgs Ci0JCXUzMiAqZmx1c2hiaXRzLAotCQllbnVtIGRwdV9kc3BwIGJsayk7Ci0KIAlpbnQgKCpnZXRf Yml0bWFza19pbnRmKShzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4LAogCQl1MzIgKmZsdXNoYml0cywK IAkJZW51bSBkcHVfaW50ZiBibGspOwpAQCAtMTc0LDEzICsxNjYsNiBAQCBzdHJ1Y3QgZHB1X2h3 X2N0bF9vcHMgewogCSAqLwogCXZvaWQgKCpzZXR1cF9ibGVuZHN0YWdlKShzdHJ1Y3QgZHB1X2h3 X2N0bCAqY3R4LAogCQllbnVtIGRwdV9sbSBsbSwgc3RydWN0IGRwdV9od19zdGFnZV9jZmcgKmNm Zyk7Ci0KLQkvKioKLQkgKiBGbHVzaCB0aGUgcmVnIGRtYSBieSBzZW5kaW5nIGxhc3QgY29tbWFu ZC4KLQkgKiBAY3R4ICAgICAgIDogY3RsIHBhdGggY3R4IHBvaW50ZXIKLQkgKi8KLQl2b2lkICgq cmVnX2RtYV9mbHVzaCkoc3RydWN0IGRwdV9od19jdGwgKmN0eCk7Ci0KIH07CiAKIC8qKgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2RzcHAuYyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19kc3BwLmMKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IGEwNDJjYWIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2h3X2RzcHAuYworKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBA Ci0vKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25s eSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotI2luY2x1ZGUgPGRybS9tc21fZHJtX3Bw Lmg+Ci0jaW5jbHVkZSAiZHB1X2h3X21kc3MuaCIKLSNpbmNsdWRlICJkcHVfaHdpby5oIgotI2lu Y2x1ZGUgImRwdV9od19jYXRhbG9nLmgiCi0jaW5jbHVkZSAiZHB1X2h3X2RzcHAuaCIKLSNpbmNs dWRlICJkcHVfaHdfY29sb3JfcHJvY2Vzc2luZy5oIgotI2luY2x1ZGUgImRwdV9kYmcuaCIKLSNp bmNsdWRlICJkcHVfYWQ0LmgiCi0jaW5jbHVkZSAiZHB1X2ttcy5oIgotCi1zdGF0aWMgc3RydWN0 IGRwdV9kc3BwX2NmZyAqX2RzcHBfb2Zmc2V0KGVudW0gZHB1X2RzcHAgZHNwcCwKLQkJc3RydWN0 IGRwdV9tZHNzX2NmZyAqbSwKLQkJdm9pZCBfX2lvbWVtICphZGRyLAotCQlzdHJ1Y3QgZHB1X2h3 X2Jsa19yZWdfbWFwICpiKQotewotCWludCBpOwotCi0JaWYgKCFtIHx8ICFhZGRyIHx8ICFiKQot CQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQotCWZvciAoaSA9IDA7IGkgPCBtLT5kc3BwX2Nv dW50OyBpKyspIHsKLQkJaWYgKGRzcHAgPT0gbS0+ZHNwcFtpXS5pZCkgewotCQkJYi0+YmFzZV9v ZmYgPSBhZGRyOwotCQkJYi0+YmxrX29mZiA9IG0tPmRzcHBbaV0uYmFzZTsKLQkJCWItPmxlbmd0 aCA9IG0tPmRzcHBbaV0ubGVuOwotCQkJYi0+aHd2ZXJzaW9uID0gbS0+aHd2ZXJzaW9uOwotCQkJ Yi0+bG9nX21hc2sgPSBEUFVfREJHX01BU0tfRFNQUDsKLQkJCXJldHVybiAmbS0+ZHNwcFtpXTsK LQkJfQotCX0KLQotCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwotfQotCi1zdGF0aWMgdm9pZCBf c2V0dXBfZHNwcF9vcHMoc3RydWN0IGRwdV9od19kc3BwICpjLCB1bnNpZ25lZCBsb25nIGZlYXR1 cmVzKQotewotCWludCBpID0gMCwgcmV0OwotCi0JaWYgKCFjIHx8ICFjLT5jYXAgfHwgIWMtPmNh cC0+c2JsaykKLQkJcmV0dXJuOwotCi0JZm9yIChpID0gMDsgaSA8IERQVV9EU1BQX01BWDsgaSsr KSB7Ci0JCWlmICghdGVzdF9iaXQoaSwgJmZlYXR1cmVzKSkKLQkJCWNvbnRpbnVlOwotCQlzd2l0 Y2ggKGkpIHsKLQkJY2FzZSBEUFVfRFNQUF9QQ0M6Ci0JCQlpZiAoYy0+Y2FwLT5zYmxrLT5wY2Mu dmVyc2lvbiA9PQotCQkJCShEUFVfQ09MT1JfUFJPQ0VTU19WRVIoMHgxLCAweDcpKSkKLQkJCQlj LT5vcHMuc2V0dXBfcGNjID0gZHB1X3NldHVwX2RzcHBfcGNjX3YxXzc7Ci0JCQllbHNlIGlmIChj LT5jYXAtPnNibGstPnBjYy52ZXJzaW9uID09Ci0JCQkJCShEUFVfQ09MT1JfUFJPQ0VTU19WRVIo MHg0LCAweDApKSkgewotCQkJCXJldCA9IHJlZ19kbWF2MV9pbml0X2RzcHBfb3BfdjQoaSwgYy0+ aWR4KTsKLQkJCQlpZiAoIXJldCkKLQkJCQkJYy0+b3BzLnNldHVwX3BjYyA9Ci0JCQkJCQlyZWdf ZG1hdjFfc2V0dXBfZHNwcF9wY2N2NDsKLQkJCQllbHNlCi0JCQkJCWMtPm9wcy5zZXR1cF9wY2Mg PQotCQkJCQkJZHB1X3NldHVwX2RzcHBfcGNjdjQ7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBE UFVfRFNQUF9IU0lDOgotCQkJaWYgKGMtPmNhcC0+c2Jsay0+aHNpYy52ZXJzaW9uID09Ci0JCQkJ KERQVV9DT0xPUl9QUk9DRVNTX1ZFUigweDEsIDB4NykpKQotCQkJCWMtPm9wcy5zZXR1cF9odWUg PSBkcHVfc2V0dXBfZHNwcF9wYV9odWVfdjFfNzsKLQkJCWJyZWFrOwotCQljYXNlIERQVV9EU1BQ X1ZMVVQ6Ci0JCQlpZiAoYy0+Y2FwLT5zYmxrLT52bHV0LnZlcnNpb24gPT0KLQkJCQkoRFBVX0NP TE9SX1BST0NFU1NfVkVSKDB4MSwgMHg3KSkpIHsKLQkJCQljLT5vcHMuc2V0dXBfdmx1dCA9Ci0J CQkJICAgIGRwdV9zZXR1cF9kc3BwX3BhX3ZsdXRfdjFfNzsKLQkJCX0gZWxzZSBpZiAoYy0+Y2Fw LT5zYmxrLT52bHV0LnZlcnNpb24gPT0KLQkJCQkJKERQVV9DT0xPUl9QUk9DRVNTX1ZFUigweDEs IDB4OCkpKSB7Ci0JCQkJcmV0ID0gcmVnX2RtYXYxX2luaXRfZHNwcF9vcF92NChpLCBjLT5pZHgp OwotCQkJCWlmICghcmV0KQotCQkJCQljLT5vcHMuc2V0dXBfdmx1dCA9Ci0JCQkJCXJlZ19kbWF2 MV9zZXR1cF9kc3BwX3ZsdXR2MTg7Ci0JCQkJZWxzZQotCQkJCQljLT5vcHMuc2V0dXBfdmx1dCA9 Ci0JCQkJCWRwdV9zZXR1cF9kc3BwX3BhX3ZsdXRfdjFfODsKLQkJCX0KLQkJCWJyZWFrOwotCQlj YXNlIERQVV9EU1BQX0dBTVVUOgotCQkJaWYgKGMtPmNhcC0+c2Jsay0+Z2FtdXQudmVyc2lvbiA9 PQotCQkJCQlEUFVfQ09MT1JfUFJPQ0VTU19WRVIoMHg0LCAwKSkgewotCQkJCXJldCA9IHJlZ19k bWF2MV9pbml0X2RzcHBfb3BfdjQoaSwgYy0+aWR4KTsKLQkJCQlpZiAoIXJldCkKLQkJCQkJYy0+ b3BzLnNldHVwX2dhbXV0ID0KLQkJCQkJCXJlZ19kbWF2MV9zZXR1cF9kc3BwXzNkX2dhbXV0djQ7 Ci0JCQkJZWxzZQotCQkJCQljLT5vcHMuc2V0dXBfZ2FtdXQgPQotCQkJCQkJZHB1X3NldHVwX2Rz cHBfM2RfZ2FtdXR2NDsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIERQVV9EU1BQX0dDOgotCQkJ aWYgKGMtPmNhcC0+c2Jsay0+Z2MudmVyc2lvbiA9PQotCQkJCQlEUFVfQ09MT1JfUFJPQ0VTU19W RVIoMHgxLCA4KSkgewotCQkJCXJldCA9IHJlZ19kbWF2MV9pbml0X2RzcHBfb3BfdjQoaSwgYy0+ aWR4KTsKLQkJCQlpZiAoIXJldCkKLQkJCQkJYy0+b3BzLnNldHVwX2djID0KLQkJCQkJCXJlZ19k bWF2MV9zZXR1cF9kc3BwX2djdjE4OwotCQkJCS8qKiBwcm9ncmFtbWluZyBmb3IgdjE4IHRocm91 Z2ggYWhiIGlzIHNhbWUKLQkJCQkgKiBhcyB2MTcgaGVuY2UgYXNzaWduIHYxNyBmdW5jdGlvbgot CQkJCSAqLwotCQkJCWVsc2UKLQkJCQkJYy0+b3BzLnNldHVwX2djID0KLQkJCQkJCWRwdV9zZXR1 cF9kc3BwX2djX3YxXzc7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBEUFVfRFNQUF9JR0M6Ci0J CQlpZiAoYy0+Y2FwLT5zYmxrLT5pZ2MudmVyc2lvbiA9PQotCQkJCQlEUFVfQ09MT1JfUFJPQ0VT U19WRVIoMHgzLCAweDEpKSB7Ci0JCQkJcmV0ID0gcmVnX2RtYXYxX2luaXRfZHNwcF9vcF92NChp LCBjLT5pZHgpOwotCQkJCWlmICghcmV0KQotCQkJCQljLT5vcHMuc2V0dXBfaWdjID0KLQkJCQkJ CXJlZ19kbWF2MV9zZXR1cF9kc3BwX2lnY3YzMTsKLQkJCQllbHNlCi0JCQkJCWMtPm9wcy5zZXR1 cF9pZ2MgPQotCQkJCQkJZHB1X3NldHVwX2RzcHBfaWdjdjM7Ci0JCQl9Ci0JCQlicmVhazsKLQkJ Y2FzZSBEUFVfRFNQUF9BRDoKLQkJCWlmIChjLT5jYXAtPnNibGstPmFkLnZlcnNpb24gPT0KLQkJ CSAgICBEUFVfQ09MT1JfUFJPQ0VTU19WRVIoNCwgMCkpIHsKLQkJCQljLT5vcHMuc2V0dXBfYWQg PSBkcHVfc2V0dXBfZHNwcF9hZDQ7Ci0JCQkJYy0+b3BzLmFkX3JlYWRfaW50cl9yZXNwID0KLQkJ CQkJZHB1X3JlYWRfaW50cl9yZXNwX2FkNDsKLQkJCQljLT5vcHMudmFsaWRhdGVfYWQgPSBkcHVf dmFsaWRhdGVfZHNwcF9hZDQ7Ci0JCQl9Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFr OwotCQl9Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IGRwdV9od19ibGtfb3BzIGRwdV9od19vcHMg PSB7Ci0JLnN0YXJ0ID0gTlVMTCwKLQkuc3RvcCA9IE5VTEwsCi19OwotCi1zdHJ1Y3QgZHB1X2h3 X2RzcHAgKmRwdV9od19kc3BwX2luaXQoZW51bSBkcHVfZHNwcCBpZHgsCi0JCQl2b2lkIF9faW9t ZW0gKmFkZHIsCi0JCQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICptKQotewotCXN0cnVjdCBkcHVfaHdf ZHNwcCAqYzsKLQlzdHJ1Y3QgZHB1X2RzcHBfY2ZnICpjZmc7Ci0JaW50IHJjOwotCi0JaWYgKCFh ZGRyIHx8ICFtKQotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQotCWMgPSBremFsbG9jKHNp emVvZigqYyksIEdGUF9LRVJORUwpOwotCWlmICghYykKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01F TSk7Ci0KLQljZmcgPSBfZHNwcF9vZmZzZXQoaWR4LCBtLCBhZGRyLCAmYy0+aHcpOwotCWlmIChJ U19FUlJfT1JfTlVMTChjZmcpKSB7Ci0JCWtmcmVlKGMpOwotCQlyZXR1cm4gRVJSX1BUUigtRUlO VkFMKTsKLQl9Ci0KLQkvKiBQb3B1bGF0ZSBEU1BQIFRvcCBIVyBibG9jayAqLwotCWMtPmh3X3Rv cC5iYXNlX29mZiA9IGFkZHI7Ci0JYy0+aHdfdG9wLmJsa19vZmYgPSBtLT5kc3BwX3RvcC5iYXNl OwotCWMtPmh3X3RvcC5sZW5ndGggPSBtLT5kc3BwX3RvcC5sZW47Ci0JYy0+aHdfdG9wLmh3dmVy c2lvbiA9IG0tPmh3dmVyc2lvbjsKLQljLT5od190b3AubG9nX21hc2sgPSBEUFVfREJHX01BU0tf RFNQUDsKLQotCS8qIEFzc2lnbiBvcHMgKi8KLQljLT5pZHggPSBpZHg7Ci0JYy0+Y2FwID0gY2Zn OwotCV9zZXR1cF9kc3BwX29wcyhjLCBjLT5jYXAtPmZlYXR1cmVzKTsKLQotCXJjID0gZHB1X2h3 X2Jsa19pbml0KCZjLT5iYXNlLCBEUFVfSFdfQkxLX0RTUFAsIGlkeCwgJmRwdV9od19vcHMpOwot CWlmIChyYykgewotCQlEUFVfRVJST1IoImZhaWxlZCB0byBpbml0IGh3IGJsayAlZFxuIiwgcmMp OwotCQlnb3RvIGJsa19pbml0X2Vycm9yOwotCX0KLQotCWRwdV9kYmdfcmVnX3JlZ2lzdGVyX2R1 bXBfcmFuZ2UoRFBVX0RCR19OQU1FLCBjZmctPm5hbWUsIGMtPmh3LmJsa19vZmYsCi0JCQljLT5o dy5ibGtfb2ZmICsgYy0+aHcubGVuZ3RoLCBjLT5ody54aW5faWQpOwotCi0JcmV0dXJuIGM7Ci0K LWJsa19pbml0X2Vycm9yOgotCWt6ZnJlZShjKTsKLQotCXJldHVybiBFUlJfUFRSKHJjKTsKLX0K LQotdm9pZCBkcHVfaHdfZHNwcF9kZXN0cm95KHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCkKLXsK LQlpZiAoZHNwcCkgewotCQlyZWdfZG1hdjFfZGVpbml0X2RzcHBfb3BzKGRzcHAtPmlkeCk7Ci0J CWRwdV9od19ibGtfZGVzdHJveSgmZHNwcC0+YmFzZSk7Ci0JfQotCWtmcmVlKGRzcHApOwotfQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2RzcHAuaCBi L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19kc3BwLmgKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IGNjNzI0OTAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2h3X2RzcHAuaAorKysgL2Rldi9udWxsCkBAIC0xLDIyMCArMCww IEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFs bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICog b25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaWZuZGVmIF9EUFVfSFdfRFNQ UF9ICi0jZGVmaW5lIF9EUFVfSFdfRFNQUF9ICi0KLSNpbmNsdWRlICJkcHVfaHdfYmxrLmgiCi0K LXN0cnVjdCBkcHVfaHdfZHNwcDsKLQotLyoqCi0gKiBzdHJ1Y3QgZHB1X2h3X2RzcHBfb3BzIC0g aW50ZXJmYWNlIHRvIHRoZSBkc3BwIGhhcmR3YXJlIGRyaXZlciBmdW5jdGlvbnMKLSAqIENhbGxl ciBtdXN0IGNhbGwgdGhlIGluaXQgZnVuY3Rpb24gdG8gZ2V0IHRoZSBkc3BwIGNvbnRleHQgZm9y IGVhY2ggZHNwcAotICogQXNzdW1wdGlvbiBpcyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBiZSBjYWxs ZWQgYWZ0ZXIgY2xvY2tzIGFyZSBlbmFibGVkCi0gKi8KLXN0cnVjdCBkcHVfaHdfZHNwcF9vcHMg ewotCS8qKgotCSAqIHNldHVwX2hpc3RvZ3JhbSAtIHNldHVwIGRzcHAgaGlzdG9ncmFtCi0JICog QGN0eDogUG9pbnRlciB0byBkc3BwIGNvbnRleHQKLQkgKiBAY2ZnOiBQb2ludGVyIHRvIGNvbmZp Z3VyYXRpb24KLQkgKi8KLQl2b2lkICgqc2V0dXBfaGlzdG9ncmFtKShzdHJ1Y3QgZHB1X2h3X2Rz cHAgKmN0eCwgdm9pZCAqY2ZnKTsKLQotCS8qKgotCSAqIHJlYWRfaGlzdG9ncmFtIC0gcmVhZCBk c3BwIGhpc3RvZ3JhbQotCSAqIEBjdHg6IFBvaW50ZXIgdG8gZHNwcCBjb250ZXh0Ci0JICogQGNm ZzogUG9pbnRlciB0byBjb25maWd1cmF0aW9uCi0JICovCi0Jdm9pZCAoKnJlYWRfaGlzdG9ncmFt KShzdHJ1Y3QgZHB1X2h3X2RzcHAgKmN0eCwgdm9pZCAqY2ZnKTsKLQotCS8qKgotCSAqIHNldHVw X2lnYyAtIHVwZGF0ZSBkc3BwIGlnYwotCSAqIEBjdHg6IFBvaW50ZXIgdG8gZHNwcCBjb250ZXh0 Ci0JICogQGNmZzogUG9pbnRlciB0byBjb25maWd1cmF0aW9uCi0JICovCi0Jdm9pZCAoKnNldHVw X2lnYykoc3RydWN0IGRwdV9od19kc3BwICpjdHgsIHZvaWQgKmNmZyk7Ci0KLQkvKioKLQkgKiBz ZXR1cF9wYSAtIHNldHVwIGRzcHAgcGEKLQkgKiBAY3R4OiBQb2ludGVyIHRvIGRzcHAgY29udGV4 dAotCSAqIEBjZmc6IFBvaW50ZXIgdG8gY29uZmlndXJhdGlvbgotCSAqLwotCXZvaWQgKCpzZXR1 cF9wYSkoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLCB2b2lkICpjZmcpOwotCi0JLyoqCi0JICog c2V0dXBfcGNjIC0gc2V0dXAgZHNwcCBwY2MKLQkgKiBAY3R4OiBQb2ludGVyIHRvIGRzcHAgY29u dGV4dAotCSAqIEBjZmc6IFBvaW50ZXIgdG8gY29uZmlndXJhdGlvbgotCSAqLwotCXZvaWQgKCpz ZXR1cF9wY2MpKHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpOwotCi0JLyoqCi0J ICogc2V0dXBfc2hhcnBlbmluZyAtIHNldHVwIGRzcHAgc2hhcnBlbmluZwotCSAqIEBjdHg6IFBv aW50ZXIgdG8gZHNwcCBjb250ZXh0Ci0JICogQGNmZzogUG9pbnRlciB0byBjb25maWd1cmF0aW9u Ci0JICovCi0Jdm9pZCAoKnNldHVwX3NoYXJwZW5pbmcpKHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4 LCB2b2lkICpjZmcpOwotCi0JLyoqCi0JICogc2V0dXBfcGFfbWVtY29sb3IgLSBzZXR1cCBkc3Bw IG1lbWNvbG9yCi0JICogQGN0eDogUG9pbnRlciB0byBkc3BwIGNvbnRleHQKLQkgKiBAY2ZnOiBQ b2ludGVyIHRvIGNvbmZpZ3VyYXRpb24KLQkgKi8KLQl2b2lkICgqc2V0dXBfcGFfbWVtY29sb3Ip KHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpOwotCi0JLyoqCi0JICogc2V0dXBf c2l4em9uZSAtIHNldHVwIGRzcHAgc2l4IHpvbmUKLQkgKiBAY3R4OiBQb2ludGVyIHRvIGRzcHAg Y29udGV4dAotCSAqIEBjZmc6IFBvaW50ZXIgdG8gY29uZmlndXJhdGlvbgotCSAqLwotCXZvaWQg KCpzZXR1cF9zaXh6b25lKShzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsIHZvaWQgKmNmZyk7Ci0K LQkvKioKLQkgKiBzZXR1cF9kYW5nZXJfc2FmZSAtIHNldHVwIGRhbmdlciBzYWZlIExVVFMKLQkg KiBAY3R4OiBQb2ludGVyIHRvIGRzcHAgY29udGV4dAotCSAqIEBjZmc6IFBvaW50ZXIgdG8gY29u ZmlndXJhdGlvbgotCSAqLwotCXZvaWQgKCpzZXR1cF9kYW5nZXJfc2FmZSkoc3RydWN0IGRwdV9o d19kc3BwICpjdHgsIHZvaWQgKmNmZyk7Ci0KLQkvKioKLQkgKiBzZXR1cF9kaXRoZXIgLSBzZXR1 cCBkc3BwIGRpdGhlcgotCSAqIEBjdHg6IFBvaW50ZXIgdG8gZHNwcCBjb250ZXh0Ci0JICogQGNm ZzogUG9pbnRlciB0byBjb25maWd1cmF0aW9uCi0JICovCi0Jdm9pZCAoKnNldHVwX2RpdGhlciko c3RydWN0IGRwdV9od19kc3BwICpjdHgsIHZvaWQgKmNmZyk7Ci0KLQkvKioKLQkgKiBzZXR1cF9o dWUgLSBzZXR1cCBkc3BwIFBBIGh1ZQotCSAqIEBjdHg6IFBvaW50ZXIgdG8gZHNwcCBjb250ZXh0 Ci0JICogQGNmZzogUG9pbnRlciB0byBjb25maWd1cmF0aW9uCi0JICovCi0Jdm9pZCAoKnNldHVw X2h1ZSkoc3RydWN0IGRwdV9od19kc3BwICpjdHgsIHZvaWQgKmNmZyk7Ci0KLQkvKioKLQkgKiBz ZXR1cF9zYXQgLSBzZXR1cCBkc3BwIFBBIHNhdHVyYXRpb24KLQkgKiBAY3R4OiBQb2ludGVyIHRv IGRzcHAgY29udGV4dAotCSAqIEBjZmc6IFBvaW50ZXIgdG8gY29uZmlndXJhdGlvbgotCSAqLwot CXZvaWQgKCpzZXR1cF9zYXQpKHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpOwot Ci0JLyoqCi0JICogc2V0dXBfdmFsIC0gc2V0dXAgZHNwcCBQQSB2YWx1ZQotCSAqIEBjdHg6IFBv aW50ZXIgdG8gZHNwcCBjb250ZXh0Ci0JICogQGNmZzogUG9pbnRlciB0byBjb25maWd1cmF0aW9u Ci0JICovCi0Jdm9pZCAoKnNldHVwX3ZhbCkoc3RydWN0IGRwdV9od19kc3BwICpjdHgsIHZvaWQg KmNmZyk7Ci0KLQkvKioKLQkgKiBzZXR1cF9jb250IC0gc2V0dXAgZHNwcCBQQSBjb250cmFzdAot CSAqIEBjdHg6IFBvaW50ZXIgdG8gZHNwcCBjb250ZXh0Ci0JICogQGNmZzogUG9pbnRlciB0byBj b25maWd1cmF0aW9uCi0JICovCi0Jdm9pZCAoKnNldHVwX2NvbnQpKHN0cnVjdCBkcHVfaHdfZHNw cCAqY3R4LCB2b2lkICpjZmcpOwotCi0JLyoqCi0JICogc2V0dXBfdmx1dCAtIHNldHVwIGRzcHAg UEEgVkxVVAotCSAqIEBjdHg6IFBvaW50ZXIgdG8gZHNwcCBjb250ZXh0Ci0JICogQGNmZzogUG9p bnRlciB0byBjb25maWd1cmF0aW9uCi0JICovCi0Jdm9pZCAoKnNldHVwX3ZsdXQpKHN0cnVjdCBk cHVfaHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpOwotCi0JLyoqCi0JICogc2V0dXBfZ2MgLSB1cGRh dGUgZHNwcCBnYwotCSAqIEBjdHg6IFBvaW50ZXIgdG8gZHNwcCBjb250ZXh0Ci0JICogQGNmZzog UG9pbnRlciB0byBjb25maWd1cmF0aW9uCi0JICovCi0Jdm9pZCAoKnNldHVwX2djKShzdHJ1Y3Qg ZHB1X2h3X2RzcHAgKmN0eCwgdm9pZCAqY2ZnKTsKLQotCS8qKgotCSAqIHNldHVwX2dhbXV0IC0g dXBkYXRlIGRzcHAgZ2FtdXQKLQkgKiBAY3R4OiBQb2ludGVyIHRvIGRzcHAgY29udGV4dAotCSAq IEBjZmc6IFBvaW50ZXIgdG8gY29uZmlndXJhdGlvbgotCSAqLwotCXZvaWQgKCpzZXR1cF9nYW11 dCkoc3RydWN0IGRwdV9od19kc3BwICpjdHgsIHZvaWQgKmNmZyk7Ci0KLQkvKioKLQkgKiB2YWxp ZGF0ZV9hZCAtIGNoZWNrIGlmIGFkIHByb3BlcnR5IGNhbiBiZSBzZXQKLQkgKiBAY3R4OiBQb2lu dGVyIHRvIGRzcHAgY29udGV4dAotCSAqIEBwcm9wOiBQb2ludGVyIHRvIGFkIHByb3BlcnR5IGJl aW5nIHZhbGlkYXRlZAotCSAqLwotCWludCAoKnZhbGlkYXRlX2FkKShzdHJ1Y3QgZHB1X2h3X2Rz cHAgKmN0eCwgdTMyICpwcm9wKTsKLQotCS8qKgotCSAqIHNldHVwX2FkIC0gdXBkYXRlIHRoZSBh ZCBwcm9wZXJ0eQotCSAqIEBjdHg6IFBvaW50ZXIgdG8gZHNwcCBjb250ZXh0Ci0JICogQGNmZzog UG9pbnRlciB0byBhZCBjb25maWd1cmF0aW9uCi0JICovCi0Jdm9pZCAoKnNldHVwX2FkKShzdHJ1 Y3QgZHB1X2h3X2RzcHAgKmN0eCwgdm9pZCAqY2ZnKTsKLQotCS8qKgotCSAqIGFkX3JlYWRfaW50 cl9yZXNwIC0gZnVuY3Rpb24gdG8gZ2V0IGludGVycnVwdCByZXNwb25zZSBmb3IgYWQKLQkgKiBA ZXZlbnQ6IEV2ZW50IGZvciB3aGljaCByZXNwb25zZSBuZWVkcyB0byBiZSByZWFkCi0JICogQHJl c3A6IFBvaW50ZXIgdG8gdTMyIHdoZXJlIHJlc3BvbnNlIHZhbHVlIGlzIGR1bXBlZC4KLQkgKi8K LQl2b2lkICgqYWRfcmVhZF9pbnRyX3Jlc3ApKHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB1MzIg ZXZlbnQsCi0JCQl1MzIgKnJlc3ApOwotCi19OwotCi0vKioKLSAqIHN0cnVjdCBkcHVfaHdfZHNw cCAtIGRzcHAgZGVzY3JpcHRpb24KLSAqIEBiYXNlOiBIYXJkd2FyZSBibG9jayBiYXNlIHN0cnVj dHVyZQotICogQGh3OiBCbG9jayBoYXJkd2FyZSBkZXRhaWxzCi0gKiBAaHdfdG9wOiBCbG9jayBo YXJkd2FyZSB0b3AgZGV0YWlscwotICogQGlkeDogRFNQUCBpbmRleAotICogQGNhcDogUG9pbnRl ciB0byBsYXllcl9jZmcKLSAqIEBvcHM6IFBvaW50ZXIgdG8gb3BlcmF0aW9ucyBwb3NzaWJsZSBm b3IgdGhpcyBEU1BQCi0gKi8KLXN0cnVjdCBkcHVfaHdfZHNwcCB7Ci0Jc3RydWN0IGRwdV9od19i bGsgYmFzZTsKLQlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwIGh3OwotCi0JLyogZHNwcCB0b3Ag Ki8KLQlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwIGh3X3RvcDsKLQotCS8qIGRzcHAgKi8KLQll bnVtIGRwdV9kc3BwIGlkeDsKLQljb25zdCBzdHJ1Y3QgZHB1X2RzcHBfY2ZnICpjYXA7Ci0KLQkv KiBPcHMgKi8KLQlzdHJ1Y3QgZHB1X2h3X2RzcHBfb3BzIG9wczsKLX07Ci0KLS8qKgotICogZHB1 X2h3X2RzcHAgLSBjb252ZXJ0IGJhc2Ugb2JqZWN0IGRwdV9od19iYXNlIHRvIGNvbnRhaW5lcgot ICogQGh3OiBQb2ludGVyIHRvIGJhc2UgaGFyZHdhcmUgYmxvY2sKLSAqIHJldHVybjogUG9pbnRl ciB0byBoYXJkd2FyZSBibG9jayBjb250YWluZXIKLSAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3Qg ZHB1X2h3X2RzcHAgKnRvX2RwdV9od19kc3BwKHN0cnVjdCBkcHVfaHdfYmxrICpodykKLXsKLQly ZXR1cm4gY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QgZHB1X2h3X2RzcHAsIGJhc2UpOwotfQotCi0v KioKLSAqIGRwdV9od19kc3BwX2luaXQgLSBpbml0aWFsaXplcyB0aGUgZHNwcCBodyBkcml2ZXIg b2JqZWN0LgotICogc2hvdWxkIGJlIGNhbGxlZCBvbmNlIGJlZm9yZSBhY2Nlc3NpbmcgZXZlcnkg ZHNwcC4KLSAqIEBpZHg6ICBEU1BQIGluZGV4IGZvciB3aGljaCBkcml2ZXIgb2JqZWN0IGlzIHJl cXVpcmVkCi0gKiBAYWRkcjogTWFwcGVkIHJlZ2lzdGVyIGlvIGFkZHJlc3Mgb2YgTURQCi0gKiBA UmV0dXJuOiBwb2ludGVyIHRvIHN0cnVjdHVyZSBvciBFUlJfUFRSCi0gKi8KLXN0cnVjdCBkcHVf aHdfZHNwcCAqZHB1X2h3X2RzcHBfaW5pdChlbnVtIGRwdV9kc3BwIGlkeCwKLQkJCXZvaWQgX19p b21lbSAqYWRkciwKLQkJCXN0cnVjdCBkcHVfbWRzc19jZmcgKm0pOwotCi0vKioKLSAqIGRwdV9o d19kc3BwX2Rlc3Ryb3koKTogRGVzdHJveXMgRFNQUCBkcml2ZXIgY29udGV4dAotICogQGRzcHA6 ICAgUG9pbnRlciB0byBEU1BQIGRyaXZlciBjb250ZXh0Ci0gKi8KLXZvaWQgZHB1X2h3X2RzcHBf ZGVzdHJveShzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHApOwotCi0jZW5kaWYgLypfRFBVX0hXX0RT UFBfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3 X2xtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfbG0uYwppbmRleCBh ZDIxODY3Li43NWEzMGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfaHdfbG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdf bG0uYwpAQCAtMTAsNiArMTAsNyBAQAogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KICAqLwogCisjaW5jbHVkZSA8dWFwaS9kcm0vZHB1X2RybS5oPgogI2lu Y2x1ZGUgImRwdV9rbXMuaCIKICNpbmNsdWRlICJkcHVfaHdfY2F0YWxvZy5oIgogI2luY2x1ZGUg ImRwdV9od2lvLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfaHdfbWRzcy5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X21kc3Mu aAppbmRleCA3MGQ1N2M5Li5mY2QxNjRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfaHdfbWRzcy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9od19tZHNzLmgKQEAgLTk5LDcgKzk5LDYgQEAgZW51bSBkcHVfaHdfYmxrX3R5cGUg ewogCURQVV9IV19CTEtfVE9QID0gMCwKIAlEUFVfSFdfQkxLX1NTUFAsCiAJRFBVX0hXX0JMS19M TSwKLQlEUFVfSFdfQkxLX0RTUFAsCiAJRFBVX0hXX0JMS19EUywKIAlEUFVfSFdfQkxLX0NUTCwK IAlEUFVfSFdfQkxLX0NETSwKQEAgLTQ2MSwzOSArNDYwLDE2IEBAIHN0cnVjdCBkcHVfbWRzc19j b2xvciB7CiAgKi8KICNkZWZpbmUgRFBVX0RCR19NQVNLX05PTkUgICAgICgxIDw8IDApCiAjZGVm aW5lIERQVV9EQkdfTUFTS19DRE0gICAgICAoMSA8PCAxKQotI2RlZmluZSBEUFVfREJHX01BU0tf RFNQUCAgICAgKDEgPDwgMikKLSNkZWZpbmUgRFBVX0RCR19NQVNLX0lOVEYgICAgICgxIDw8IDMp Ci0jZGVmaW5lIERQVV9EQkdfTUFTS19MTSAgICAgICAoMSA8PCA0KQotI2RlZmluZSBEUFVfREJH X01BU0tfQ1RMICAgICAgKDEgPDwgNSkKLSNkZWZpbmUgRFBVX0RCR19NQVNLX1BJTkdQT05HICgx IDw8IDYpCi0jZGVmaW5lIERQVV9EQkdfTUFTS19TU1BQICAgICAoMSA8PCA3KQotI2RlZmluZSBE UFVfREJHX01BU0tfV0IgICAgICAgKDEgPDwgOCkKLSNkZWZpbmUgRFBVX0RCR19NQVNLX1RPUCAg ICAgICgxIDw8IDkpCi0jZGVmaW5lIERQVV9EQkdfTUFTS19WQklGICAgICAoMSA8PCAxMCkKLSNk ZWZpbmUgRFBVX0RCR19NQVNLX1JPVCAgICAgICgxIDw8IDExKQotI2RlZmluZSBEUFVfREJHX01B U0tfRFMgICAgICAgKDEgPDwgMTIpCi0KLS8qKgotICogc3RydWN0IGRwdV9od19jcF9jZmc6IGhh cmR3YXJlIGRzcHAvbG0gZmVhdHVyZSBwYXlsb2FkLgotICogQHBheWxvYWQ6IEZlYXR1cmUgc3Bl Y2lmaWMgcGF5bG9hZC4KLSAqIEBsZW46IExlbmd0aCBvZiB0aGUgcGF5bG9hZC4KLSAqIEBjdGw6 IGNvbnRyb2wgcG9pbnRlciBhc3NvY2lhdGVkIHdpdGggZHNwcC9sbS4KLSAqIEBsYXN0X2ZlYXR1 cmU6IGxhc3QgZmVhdHVyZSB0aGF0IHdpbGwgYmUgc2V0LgotICogQG51bV9vZl9taXhlcnM6IG51 bWJlciBvZiBsYXllciBtaXhlcnMgZm9yIHRoZSBkaXNwbGF5LgotICogQG1peGVyX2luZm86IG1p eGVyIGluZm8gcG9pbnRlciBhc3NvY2lhdGVkIHdpdGggbG0uCi0gKiBAZGlzcGxheXY6IGhlaWdo dCBvZiB0aGUgZGlzcGxheS4KLSAqIEBkaXNwbGF5aDogd2lkdGggb2YgdGhlIGRpc3BsYXkuCi0g Ki8KLXN0cnVjdCBkcHVfaHdfY3BfY2ZnIHsKLQl2b2lkICpwYXlsb2FkOwotCXUzMiBsZW47Ci0J dm9pZCAqY3RsOwotCXUzMiBsYXN0X2ZlYXR1cmU7Ci0JdTMyIG51bV9vZl9taXhlcnM7Ci0Jdm9p ZCAqbWl4ZXJfaW5mbzsKLQl1MzIgZGlzcGxheXY7Ci0JdTMyIGRpc3BsYXloOwotfTsKKyNkZWZp bmUgRFBVX0RCR19NQVNLX0lOVEYgICAgICgxIDw8IDIpCisjZGVmaW5lIERQVV9EQkdfTUFTS19M TSAgICAgICAoMSA8PCAzKQorI2RlZmluZSBEUFVfREJHX01BU0tfQ1RMICAgICAgKDEgPDwgNCkK KyNkZWZpbmUgRFBVX0RCR19NQVNLX1BJTkdQT05HICgxIDw8IDUpCisjZGVmaW5lIERQVV9EQkdf TUFTS19TU1BQICAgICAoMSA8PCA2KQorI2RlZmluZSBEUFVfREJHX01BU0tfV0IgICAgICAgKDEg PDwgNykKKyNkZWZpbmUgRFBVX0RCR19NQVNLX1RPUCAgICAgICgxIDw8IDgpCisjZGVmaW5lIERQ VV9EQkdfTUFTS19WQklGICAgICAoMSA8PCA5KQorI2RlZmluZSBEUFVfREJHX01BU0tfUk9UICAg ICAgKDEgPDwgMTApCisjZGVmaW5lIERQVV9EQkdfTUFTS19EUyAgICAgICAoMSA8PCAxMSkKIAog LyoqCiAgKiBzdHJ1Y3QgZHB1X2h3X2RpbV9sYXllcjogZGltIGxheWVyIGNvbmZpZ3MKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19waW5ncG9uZy5jIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3Bpbmdwb25nLmMKaW5kZXggMGJm YjUxMS4uODRkMjE3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2h3X3Bpbmdwb25nLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2h3X3Bpbmdwb25nLmMKQEAgLTM2LDExICszNiw2IEBACiAjZGVmaW5lIFBQX0ZCQ19CVURHRVRf Q1RMICAgICAgICAgICAgICAgMHgwMzgKICNkZWZpbmUgUFBfRkJDX0xPU1NZX01PREUgICAgICAg ICAgICAgICAweDAzQwogCi0jZGVmaW5lIERJVEhFUl9ERVBUSF9NQVBfSU5ERVggOQotc3RhdGlj IHUzMiBkaXRoZXJfZGVwdGhfbWFwW0RJVEhFUl9ERVBUSF9NQVBfSU5ERVhdID0gewotCTAsIDAs IDAsIDAsIDAsIDEsIDIsIDMsIDMKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgZHB1X3Bpbmdwb25nX2Nm ZyAqX3Bpbmdwb25nX29mZnNldChlbnVtIGRwdV9waW5ncG9uZyBwcCwKIAkJc3RydWN0IGRwdV9t ZHNzX2NmZyAqbSwKIAkJdm9pZCBfX2lvbWVtICphZGRyLApAQCAtMTA5LDU3ICsxMDQsNiBAQCBz dGF0aWMgaW50IGRwdV9od19wcF9wb2xsX3RpbWVvdXRfd3JfcHRyKHN0cnVjdCBkcHVfaHdfcGlu Z3BvbmcgKnBwLAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBkcHVfaHdfcHBfc2V0dXBf ZGl0aGVyX3YxKHN0cnVjdCBkcHVfaHdfcGluZ3BvbmcgKnBwLAotCQkJCQl2b2lkICpjZmcsIHNp emVfdCBsZW4pCi17Ci0Jc3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAqYzsKLQlzdHJ1Y3QgZHJt X21zbV9kaXRoZXIgKmRpdGhlciA9IChzdHJ1Y3QgZHJtX21zbV9kaXRoZXIgKiljZmc7Ci0JdTMy IGJhc2UgPSAwLCBvZmZzZXQgPSAwLCBkYXRhID0gMCwgaSA9IDA7Ci0KLQlpZiAoIXBwKQotCQly ZXR1cm4gLUVJTlZBTDsKLQotCWMgPSAmcHAtPmh3OwotCWJhc2UgPSBwcC0+Y2Fwcy0+c2Jsay0+ ZGl0aGVyLmJhc2U7Ci0JaWYgKCFkaXRoZXIpIHsKLQkJLyogZGl0aGVyIHByb3BlcnR5IGRpc2Fi bGUgY2FzZSAqLwotCQlEUFVfUkVHX1dSSVRFKGMsIGJhc2UsIDApOwotCQlyZXR1cm4gMDsKLQl9 Ci0KLQlpZiAobGVuICE9IHNpemVvZihzdHJ1Y3QgZHJtX21zbV9kaXRoZXIpKSB7Ci0JCURSTV9F UlJPUigiaW5wdXQgbGVuICV6dSwgZXhwZWN0ZWQgbGVuICV6dVxuIiwgbGVuLAotCQkJc2l6ZW9m KHN0cnVjdCBkcm1fbXNtX2RpdGhlcikpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAo ZGl0aGVyLT5jMF9iaXRkZXB0aCA+PSBESVRIRVJfREVQVEhfTUFQX0lOREVYIHx8Ci0JCWRpdGhl ci0+YzFfYml0ZGVwdGggPj0gRElUSEVSX0RFUFRIX01BUF9JTkRFWCB8fAotCQlkaXRoZXItPmMy X2JpdGRlcHRoID49IERJVEhFUl9ERVBUSF9NQVBfSU5ERVggfHwKLQkJZGl0aGVyLT5jM19iaXRk ZXB0aCA+PSBESVRIRVJfREVQVEhfTUFQX0lOREVYKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW9m ZnNldCArPSA0OwotCWRhdGEgPSBkaXRoZXJfZGVwdGhfbWFwW2RpdGhlci0+YzBfYml0ZGVwdGhd ICYgUkVHX01BU0soMik7Ci0JZGF0YSB8PSAoZGl0aGVyX2RlcHRoX21hcFtkaXRoZXItPmMxX2Jp dGRlcHRoXSAmIFJFR19NQVNLKDIpKSA8PCAyOwotCWRhdGEgfD0gKGRpdGhlcl9kZXB0aF9tYXBb ZGl0aGVyLT5jMl9iaXRkZXB0aF0gJiBSRUdfTUFTSygyKSkgPDwgNDsKLQlkYXRhIHw9IChkaXRo ZXJfZGVwdGhfbWFwW2RpdGhlci0+YzNfYml0ZGVwdGhdICYgUkVHX01BU0soMikpIDw8IDY7Ci0J ZGF0YSB8PSAoZGl0aGVyLT50ZW1wb3JhbF9lbikgPyAoMSA8PCA4KSA6IDA7Ci0JRFBVX1JFR19X UklURShjLCBiYXNlICsgb2Zmc2V0LCBkYXRhKTsKLQotCWZvciAoaSA9IDA7IGkgPCBESVRIRVJf TUFUUklYX1NaIC0gMzsgaSArPSA0KSB7Ci0JCW9mZnNldCArPSA0OwotCQlkYXRhID0gKGRpdGhl ci0+bWF0cml4W2ldICYgUkVHX01BU0soNCkpIHwKLQkJCSgoZGl0aGVyLT5tYXRyaXhbaSArIDFd ICYgUkVHX01BU0soNCkpIDw8IDQpIHwKLQkJCSgoZGl0aGVyLT5tYXRyaXhbaSArIDJdICYgUkVH X01BU0soNCkpIDw8IDgpIHwKLQkJCSgoZGl0aGVyLT5tYXRyaXhbaSArIDNdICYgUkVHX01BU0so NCkpIDw8IDEyKTsKLQkJRFBVX1JFR19XUklURShjLCBiYXNlICsgb2Zmc2V0LCBkYXRhKTsKLQl9 Ci0JRFBVX1JFR19XUklURShjLCBiYXNlLCAxKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMg aW50IGRwdV9od19wcF9lbmFibGVfdGUoc3RydWN0IGRwdV9od19waW5ncG9uZyAqcHAsIGJvb2wg ZW5hYmxlKQogewogCXN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAgKmM7CkBAIC0yNDgsMjQgKzE5 MiwxMiBAQCBzdGF0aWMgdTMyIGRwdV9od19wcF9nZXRfbGluZV9jb3VudChzdHJ1Y3QgZHB1X2h3 X3Bpbmdwb25nICpwcCkKIHN0YXRpYyB2b2lkIF9zZXR1cF9waW5ncG9uZ19vcHMoc3RydWN0IGRw dV9od19waW5ncG9uZ19vcHMgKm9wcywKIAljb25zdCBzdHJ1Y3QgZHB1X3Bpbmdwb25nX2NmZyAq aHdfY2FwKQogewotCXUzMiB2ZXJzaW9uID0gMDsKLQogCW9wcy0+c2V0dXBfdGVhcmNoZWNrID0g ZHB1X2h3X3BwX3NldHVwX3RlX2NvbmZpZzsKIAlvcHMtPmVuYWJsZV90ZWFyY2hlY2sgPSBkcHVf aHdfcHBfZW5hYmxlX3RlOwogCW9wcy0+Y29ubmVjdF9leHRlcm5hbF90ZSA9IGRwdV9od19wcF9j b25uZWN0X2V4dGVybmFsX3RlOwogCW9wcy0+Z2V0X3ZzeW5jX2luZm8gPSBkcHVfaHdfcHBfZ2V0 X3ZzeW5jX2luZm87CiAJb3BzLT5wb2xsX3RpbWVvdXRfd3JfcHRyID0gZHB1X2h3X3BwX3BvbGxf dGltZW91dF93cl9wdHI7CiAJb3BzLT5nZXRfbGluZV9jb3VudCA9IGRwdV9od19wcF9nZXRfbGlu ZV9jb3VudDsKLQotCXZlcnNpb24gPSBEUFVfQ09MT1JfUFJPQ0VTU19NQUpPUihod19jYXAtPnNi bGstPmRpdGhlci52ZXJzaW9uKTsKLQlzd2l0Y2ggKHZlcnNpb24pIHsKLQljYXNlIDE6Ci0JCW9w cy0+c2V0dXBfZGl0aGVyID0gZHB1X2h3X3BwX3NldHVwX2RpdGhlcl92MTsKLQkJYnJlYWs7Ci0J ZGVmYXVsdDoKLQkJb3BzLT5zZXR1cF9kaXRoZXIgPSBOVUxMOwotCQlicmVhazsKLQl9CiB9Owog CiBzdGF0aWMgc3RydWN0IGRwdV9od19ibGtfb3BzIGRwdV9od19vcHMgPSB7CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfcGluZ3BvbmcuaCBiL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19waW5ncG9uZy5oCmluZGV4IDdkYmZjYWUu LjNjYWNjZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9o d19waW5ncG9uZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19w aW5ncG9uZy5oCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSAiZHB1X2h3X21kc3MuaCIKICNp bmNsdWRlICJkcHVfaHdfdXRpbC5oIgogI2luY2x1ZGUgImRwdV9od19ibGsuaCIKLSNpbmNsdWRl IDx1YXBpL2RybS9tc21fZHJtX3BwLmg+CiAKIHN0cnVjdCBkcHVfaHdfcGluZ3Bvbmc7CiAKQEAg LTg4LDExICs4Nyw2IEBAIHN0cnVjdCBkcHVfaHdfcGluZ3Bvbmdfb3BzIHsKIAlpbnQgKCpwb2xs X3RpbWVvdXRfd3JfcHRyKShzdHJ1Y3QgZHB1X2h3X3Bpbmdwb25nICpwcCwgdTMyIHRpbWVvdXRf dXMpOwogCiAJLyoqCi0JICogUHJvZ3JhbSB0aGUgZGl0aGVyIGh3IGJsb2NrCi0JICovCi0JaW50 ICgqc2V0dXBfZGl0aGVyKShzdHJ1Y3QgZHB1X2h3X3Bpbmdwb25nICpwcCwgdm9pZCAqY2ZnLCBz aXplX3QgbGVuKTsKLQotCS8qKgogCSAqIE9idGFpbiBjdXJyZW50IHZlcnRpY2FsIGxpbmUgY291 bnRlcgogCSAqLwogCXUzMiAoKmdldF9saW5lX2NvdW50KShzdHJ1Y3QgZHB1X2h3X3Bpbmdwb25n ICpwcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdf cmVnX2RtYV92MS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3JlZ19k bWFfdjEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MyNzcyZi4uMDAwMDAwMAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfcmVnX2RtYV92MS5jCisr KyAvZGV2L251bGwKQEAgLTEsNzU3ICswLDAgQEAKLS8qIENvcHlyaWdodCAoYykgMjAxNy0yMDE4 LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot ICovCi0jaW5jbHVkZSAiZHB1X2h3X21kc3MuaCIKLSNpbmNsdWRlICJkcHVfaHdfY3RsLmgiCi0j aW5jbHVkZSAiZHB1X2h3X3JlZ19kbWFfdjEuaCIKLSNpbmNsdWRlICJtc21fZHJ2LmgiCi0jaW5j bHVkZSAibXNtX2ttcy5oIgotI2luY2x1ZGUgIm1zbV9tbXUuaCIKLQotI2RlZmluZSBHVUFSRF9C WVRFUyAoQklUKDgpIC0gMSkKLSNkZWZpbmUgQUxJR05FRF9PRkZTRVQgKFUzMl9NQVggJiB+KEdV QVJEX0JZVEVTKSkKLSNkZWZpbmUgQUREUl9BTElHTiBCSVQoOCkKLSNkZWZpbmUgTUFYX1JFTEFU SVZFX09GRiAoQklUKDIwKSAtIDEpCi0KLSNkZWZpbmUgREVDT0RFX1NFTF9PUCAoQklUKEhXX0JM S19TRUxFQ1QpKQotI2RlZmluZSBSRUdfV1JJVEVfT1AgKChCSVQoUkVHX1NJTkdMRV9XUklURSkp IHwgKEJJVChSRUdfQkxLX1dSSVRFX1NJTkdMRSkpIHwgXAotCShCSVQoUkVHX0JMS19XUklURV9J TkMpKSB8IChCSVQoUkVHX0JMS19XUklURV9NVUxUSVBMRSkpKQotCi0jZGVmaW5lIFJFR19ETUFf T1BTIChERUNPREVfU0VMX09QIHwgUkVHX1dSSVRFX09QKQotI2RlZmluZSBJU19PUF9BTExPV0VE KG9wLCBidWZfb3ApIChCSVQob3ApICYgYnVmX29wKQotCi0jZGVmaW5lIFJFR19ETUFfT1BfTU9E RV9PRkYgMHg0Ci0KLSNkZWZpbmUgUkVHX0RNQV9DVEwwX1FVRVVFXzBfQ01EMF9PRkYgMHgxNAot I2RlZmluZSBSRUdfRE1BX0NUTDBfUkVTRVRfT0ZGIDB4RTQKLSNkZWZpbmUgUkVHX0RNQV9DVExf VFJJR0dFUl9PRkYgMHhENAotCi0jZGVmaW5lIFNFVF9VUF9SRUdfRE1BX1JFRyhodywgcmVnX2Rt YSkgXAotCWRvIHsgXAotCQkoaHcpLmJhc2Vfb2ZmID0gKHJlZ19kbWEpLT5hZGRyOyBcCi0JCSho dykuYmxrX29mZiA9IChyZWdfZG1hKS0+Y2Fwcy0+YmFzZTsgXAotCQkoaHcpLmh3dmVyc2lvbiA9 IChyZWdfZG1hKS0+Y2Fwcy0+dmVyc2lvbjsgXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBTSVpF X0RXT1JEKHgpICgoeCkgLyAoc2l6ZW9mKHUzMikpKQotI2RlZmluZSBOT1RfV09SRF9BTElHTkVE KHgpICgoeCkgJiAweDMpCi0KLQotI2RlZmluZSBHUlBfVklHX0hXX0JMS19TRUxFQ1QgKFZJRzAg fCBWSUcxIHwgVklHMiB8IFZJRzMpCi0jZGVmaW5lIEdSUF9EU1BQX0hXX0JMS19TRUxFQ1QgKERT UFAwIHwgRFNQUDEgfCBEU1BQMiB8IERTUFAzKQotI2RlZmluZSBCVUZGRVJfU1BBQ0VfTEVGVChj ZmcpICgoY2ZnKS0+ZG1hX2J1Zi0+YnVmZmVyX3NpemUgLSBcCi0JCQkoY2ZnKS0+ZG1hX2J1Zi0+ aW5kZXgpCi0KLSNkZWZpbmUgUkVHX0RNQV9ERUNPREVfU0VMIDB4MTgwQUMwNjAKLSNkZWZpbmUg U0lOR0xFX1JFR19XUklURV9PUENPREUgKEJJVCgyOCkpCi0jZGVmaW5lIFJFTF9BRERSX09QQ09E RSAoQklUKDI3KSkKLSNkZWZpbmUgSFdfSU5ERVhfUkVHX1dSSVRFX09QQ09ERSAoQklUKDI4KSB8 IEJJVCgyOSkpCi0jZGVmaW5lIEFVVE9fSU5DX1JFR19XUklURV9PUENPREUgKEJJVCgzMCkpCi0j ZGVmaW5lIEJMS19SRUdfV1JJVEVfT1BDT0RFIChCSVQoMzApIHwgQklUKDI4KSkKLQotI2RlZmlu ZSBXUkFQX01JTl9TSVpFIDIKLSNkZWZpbmUgV1JBUF9NQVhfU0laRSAoQklUKDQpIC0gMSkKLSNk ZWZpbmUgTUFYX0RXT1JEU19TWiAoQklUKDE0KSAtIDEpCi0jZGVmaW5lIFJFR19ETUFfSEVBREVS U19CVUZGRVJfU1ogKHNpemVvZih1MzIpICogMTI4KQotCi10eXBlZGVmIGludCAoKnJlZ19kbWFf aW50ZXJuYWxfb3BzKSAoc3RydWN0IGRwdV9yZWdfZG1hX3NldHVwX29wc19jZmcgKmNmZyk7Ci0K LXN0YXRpYyBzdHJ1Y3QgZHB1X2h3X3JlZ19kbWEgKnJlZ19kbWE7Ci1zdGF0aWMgdTMyIG9wc19t ZW1fc2l6ZVtSRUdfRE1BX1NFVFVQX09QU19NQVhdID0gewotCVtSRUdfQkxLX1dSSVRFX1NJTkdM RV0gPSBzaXplb2YodTMyKSAqIDIsCi0JW1JFR19CTEtfV1JJVEVfSU5DXSA9IHNpemVvZih1MzIp ICogMiwKLQlbUkVHX0JMS19XUklURV9NVUxUSVBMRV0gPSBzaXplb2YodTMyKSAqIDIsCi0JW0hX X0JMS19TRUxFQ1RdID0gc2l6ZW9mKHUzMikgKiAyLAotCVtSRUdfU0lOR0xFX1dSSVRFXSA9IHNp emVvZih1MzIpICogMgotfTsKLQotc3RhdGljIHUzMiBxdWV1ZV9zZWxbRE1BX0NUTF9RVUVVRV9N QVhdID0gewotCVtETUFfQ1RMX1FVRVVFMF0gPSBCSVQoMCksCi0JW0RNQV9DVExfUVVFVUUxXSA9 IEJJVCg0KSwKLX07Ci0KLXN0YXRpYyB1MzIgcmVnX2RtYV9jdGxfcXVldWVfb2ZmW0NUTF9NQVhd Owotc3RhdGljIHUzMiBkc3BwX3JlYWRfc2VsW0RTUFBfSElTVF9NQVhdID0gewotCVtEU1BQMF9I SVNUXSA9IDAsCi0JW0RTUFAxX0hJU1RdID0gMSwKLQlbRFNQUDJfSElTVF0gPSAyLAotCVtEU1BQ M19ISVNUXSA9IDMsCi19OwotCi1zdGF0aWMgdTMyIHYxX3N1cHBvcnRlZFtSRUdfRE1BX0ZFQVRV UkVTX01BWF0gID0gewotCVtHQU1VVF0gPSBHUlBfVklHX0hXX0JMS19TRUxFQ1QgfCBHUlBfRFNQ UF9IV19CTEtfU0VMRUNULAotCVtWTFVUXSA9IEdSUF9EU1BQX0hXX0JMS19TRUxFQ1QsCi0JW0dD XSA9IEdSUF9EU1BQX0hXX0JMS19TRUxFQ1QsCi0JW0lHQ10gPSBEU1BQX0lHQyB8IEdSUF9EU1BQ X0hXX0JMS19TRUxFQ1QsCi0JW1BDQ10gPSBHUlBfRFNQUF9IV19CTEtfU0VMRUNULAotfTsKLQot c3RhdGljIGludCB2YWxpZGF0ZV9kbWFfY2ZnKHN0cnVjdCBkcHVfcmVnX2RtYV9zZXR1cF9vcHNf Y2ZnICpjZmcpOwotc3RhdGljIGludCB2YWxpZGF0ZV93cml0ZV9kZWNvZGVfc2VsKHN0cnVjdCBk cHVfcmVnX2RtYV9zZXR1cF9vcHNfY2ZnICpjZmcpOwotc3RhdGljIGludCB2YWxpZGF0ZV93cml0 ZV9yZWcoc3RydWN0IGRwdV9yZWdfZG1hX3NldHVwX29wc19jZmcgKmNmZyk7Ci1zdGF0aWMgaW50 IHZhbGlkYXRlX3dyaXRlX211bHRpX2x1dF9yZWcoc3RydWN0IGRwdV9yZWdfZG1hX3NldHVwX29w c19jZmcgKmNmZyk7Ci1zdGF0aWMgaW50IHZhbGlkYXRlX2xhc3RfY21kKHN0cnVjdCBkcHVfcmVn X2RtYV9zZXR1cF9vcHNfY2ZnICpjZmcpOwotc3RhdGljIGludCB3cml0ZV9kZWNvZGVfc2VsKHN0 cnVjdCBkcHVfcmVnX2RtYV9zZXR1cF9vcHNfY2ZnICpjZmcpOwotc3RhdGljIGludCB3cml0ZV9z aW5nbGVfcmVnKHN0cnVjdCBkcHVfcmVnX2RtYV9zZXR1cF9vcHNfY2ZnICpjZmcpOwotc3RhdGlj IGludCB3cml0ZV9tdWx0aV9yZWdfaW5kZXgoc3RydWN0IGRwdV9yZWdfZG1hX3NldHVwX29wc19j ZmcgKmNmZyk7Ci1zdGF0aWMgaW50IHdyaXRlX211bHRpX3JlZ19pbmMoc3RydWN0IGRwdV9yZWdf ZG1hX3NldHVwX29wc19jZmcgKmNmZyk7Ci1zdGF0aWMgaW50IHdyaXRlX211bHRpX2x1dF9yZWco c3RydWN0IGRwdV9yZWdfZG1hX3NldHVwX29wc19jZmcgKmNmZyk7Ci1zdGF0aWMgaW50IHdyaXRl X2xhc3RfY21kKHN0cnVjdCBkcHVfcmVnX2RtYV9zZXR1cF9vcHNfY2ZnICpjZmcpOwotc3RhdGlj IGludCByZXNldF9yZWdfZG1hX2J1ZmZlcl92MShzdHJ1Y3QgZHB1X3JlZ19kbWFfYnVmZmVyICps dXRfYnVmKTsKLXN0YXRpYyBpbnQgY2hlY2tfc3VwcG9ydF92MShlbnVtIGRwdV9yZWdfZG1hX2Zl YXR1cmVzIGZlYXR1cmUsCi0JCWVudW0gZHB1X3JlZ19kbWFfYmxrIGJsaywgYm9vbCAqaXNfc3Vw cG9ydGVkKTsKLXN0YXRpYyBpbnQgc2V0dXBfcGF5bG9hZF92MShzdHJ1Y3QgZHB1X3JlZ19kbWFf c2V0dXBfb3BzX2NmZyAqY2ZnKTsKLXN0YXRpYyBpbnQga2lja19vZmZfdjEoc3RydWN0IGRwdV9y ZWdfZG1hX2tpY2tvZmZfY2ZnICpjZmcpOwotc3RhdGljIGludCByZXNldF92MShzdHJ1Y3QgZHB1 X2h3X2N0bCAqY3RsKTsKLXN0YXRpYyBpbnQgbGFzdF9jbWRfdjEoc3RydWN0IGRwdV9od19jdGwg KmN0bCwgZW51bSBkcHVfcmVnX2RtYV9xdWV1ZSBxKTsKLXN0YXRpYyBzdHJ1Y3QgZHB1X3JlZ19k bWFfYnVmZmVyICphbGxvY19yZWdfZG1hX2J1Zl92MSh1MzIgc2l6ZSk7Ci1zdGF0aWMgaW50IGRl YWxsb2NfcmVnX2RtYV92MShzdHJ1Y3QgZHB1X3JlZ19kbWFfYnVmZmVyICpsdXRfYnVmKTsKLQot c3RhdGljIHJlZ19kbWFfaW50ZXJuYWxfb3BzIHdyaXRlX2RtYV9vcF9wYXJhbXNbUkVHX0RNQV9T RVRVUF9PUFNfTUFYXSA9IHsKLQlbSFdfQkxLX1NFTEVDVF0gPSB3cml0ZV9kZWNvZGVfc2VsLAot CVtSRUdfU0lOR0xFX1dSSVRFXSA9IHdyaXRlX3NpbmdsZV9yZWcsCi0JW1JFR19CTEtfV1JJVEVf U0lOR0xFXSA9IHdyaXRlX211bHRpX3JlZ19pbmMsCi0JW1JFR19CTEtfV1JJVEVfSU5DXSA9IHdy aXRlX211bHRpX3JlZ19pbmRleCwKLQlbUkVHX0JMS19XUklURV9NVUxUSVBMRV0gPSB3cml0ZV9t dWx0aV9sdXRfcmVnLAotfTsKLQotc3RhdGljIHJlZ19kbWFfaW50ZXJuYWxfb3BzIHZhbGlkYXRl X2RtYV9vcF9wYXJhbXNbUkVHX0RNQV9TRVRVUF9PUFNfTUFYXSA9IHsKLQlbSFdfQkxLX1NFTEVD VF0gPSB2YWxpZGF0ZV93cml0ZV9kZWNvZGVfc2VsLAotCVtSRUdfU0lOR0xFX1dSSVRFXSA9IHZh bGlkYXRlX3dyaXRlX3JlZywKLQlbUkVHX0JMS19XUklURV9TSU5HTEVdID0gdmFsaWRhdGVfd3Jp dGVfcmVnLAotCVtSRUdfQkxLX1dSSVRFX0lOQ10gPSB2YWxpZGF0ZV93cml0ZV9yZWcsCi0JW1JF R19CTEtfV1JJVEVfTVVMVElQTEVdID0gdmFsaWRhdGVfd3JpdGVfbXVsdGlfbHV0X3JlZywKLX07 Ci0KLXN0YXRpYyBzdHJ1Y3QgZHB1X3JlZ19kbWFfYnVmZmVyICpsYXN0X2NtZF9idWY7Ci0KLXN0 YXRpYyB2b2lkIGdldF9kZWNvZGVfc2VsKHVuc2lnbmVkIGxvbmcgYmxrLCB1MzIgKmRlY29kZV9z ZWwpCi17Ci0JaW50IGkgPSAwOwotCi0JKmRlY29kZV9zZWwgPSAwOwotCWZvcl9lYWNoX3NldF9i aXQoaSwgJmJsaywgMzEpIHsKLQkJc3dpdGNoIChCSVQoaSkpIHsKLQkJY2FzZSBWSUcwOgotCQkJ KmRlY29kZV9zZWwgfD0gQklUKDApOwotCQkJYnJlYWs7Ci0JCWNhc2UgVklHMToKLQkJCSpkZWNv ZGVfc2VsIHw9IEJJVCgxKTsKLQkJCWJyZWFrOwotCQljYXNlIFZJRzI6Ci0JCQkqZGVjb2RlX3Nl bCB8PSBCSVQoMik7Ci0JCQlicmVhazsKLQkJY2FzZSBWSUczOgotCQkJKmRlY29kZV9zZWwgfD0g QklUKDMpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRFNQUDA6Ci0JCQkqZGVjb2RlX3NlbCB8PSBCSVQo MTcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRFNQUDE6Ci0JCQkqZGVjb2RlX3NlbCB8PSBCSVQoMTgp OwotCQkJYnJlYWs7Ci0JCWNhc2UgRFNQUDI6Ci0JCQkqZGVjb2RlX3NlbCB8PSBCSVQoMTkpOwot CQkJYnJlYWs7Ci0JCWNhc2UgRFNQUDM6Ci0JCQkqZGVjb2RlX3NlbCB8PSBCSVQoMjApOwotCQkJ YnJlYWs7Ci0JCWNhc2UgU1NQUF9JR0M6Ci0JCQkqZGVjb2RlX3NlbCB8PSBCSVQoNCk7Ci0JCQli cmVhazsKLQkJY2FzZSBEU1BQX0lHQzoKLQkJCSpkZWNvZGVfc2VsIHw9IEJJVCgyMSk7Ci0JCQli cmVhazsKLQkJZGVmYXVsdDoKLQkJCURSTV9FUlJPUigiYmxvY2sgbm90IHN1cHBvcnRlZCAlbHhc biIsIEJJVChpKSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLX0KLQotc3RhdGljIGludCB3cml0ZV9t dWx0aV9yZWcoc3RydWN0IGRwdV9yZWdfZG1hX3NldHVwX29wc19jZmcgKmNmZykKLXsKLQl1OCAq bG9jID0gTlVMTDsKLQotCWxvYyA9ICAodTggKiljZmctPmRtYV9idWYtPnZhZGRyICsgY2ZnLT5k bWFfYnVmLT5pbmRleDsKLQltZW1jcHkobG9jLCBjZmctPmRhdGEsIGNmZy0+ZGF0YV9zaXplKTsK LQljZmctPmRtYV9idWYtPmluZGV4ICs9IGNmZy0+ZGF0YV9zaXplOwotCWNmZy0+ZG1hX2J1Zi0+ bmV4dF9vcF9hbGxvd2VkID0gUkVHX1dSSVRFX09QIHwgREVDT0RFX1NFTF9PUDsKLQljZmctPmRt YV9idWYtPm9wc19jb21wbGV0ZWQgfD0gUkVHX1dSSVRFX09QOwotCi0JcmV0dXJuIDA7Ci19Ci0K LWludCB3cml0ZV9tdWx0aV9yZWdfaW5kZXgoc3RydWN0IGRwdV9yZWdfZG1hX3NldHVwX29wc19j ZmcgKmNmZykKLXsKLQl1MzIgKmxvYyA9IE5VTEw7Ci0KLQlsb2MgPSAgKHUzMiAqKSgodTggKilj ZmctPmRtYV9idWYtPnZhZGRyICsKLQkJCWNmZy0+ZG1hX2J1Zi0+aW5kZXgpOwotCWxvY1swXSA9 IEhXX0lOREVYX1JFR19XUklURV9PUENPREU7Ci0JbG9jWzBdIHw9IChjZmctPmJsa19vZmZzZXQg JiBNQVhfUkVMQVRJVkVfT0ZGKTsKLQlsb2NbMV0gPSBTSVpFX0RXT1JEKGNmZy0+ZGF0YV9zaXpl KTsKLQljZmctPmRtYV9idWYtPmluZGV4ICs9IG9wc19tZW1fc2l6ZVtjZmctPm9wc107Ci0KLQly ZXR1cm4gd3JpdGVfbXVsdGlfcmVnKGNmZyk7Ci19Ci0KLWludCB3cml0ZV9tdWx0aV9yZWdfaW5j KHN0cnVjdCBkcHVfcmVnX2RtYV9zZXR1cF9vcHNfY2ZnICpjZmcpCi17Ci0JdTMyICpsb2MgPSBO VUxMOwotCi0JbG9jID0gICh1MzIgKikoKHU4ICopY2ZnLT5kbWFfYnVmLT52YWRkciArCi0JCQlj ZmctPmRtYV9idWYtPmluZGV4KTsKLQlsb2NbMF0gPSBBVVRPX0lOQ19SRUdfV1JJVEVfT1BDT0RF OwotCWxvY1swXSB8PSAoY2ZnLT5ibGtfb2Zmc2V0ICYgTUFYX1JFTEFUSVZFX09GRik7Ci0JbG9j WzFdID0gU0laRV9EV09SRChjZmctPmRhdGFfc2l6ZSk7Ci0JY2ZnLT5kbWFfYnVmLT5pbmRleCAr PSBvcHNfbWVtX3NpemVbY2ZnLT5vcHNdOwotCi0JcmV0dXJuIHdyaXRlX211bHRpX3JlZyhjZmcp OwotfQotCi1zdGF0aWMgaW50IHdyaXRlX211bHRpX2x1dF9yZWcoc3RydWN0IGRwdV9yZWdfZG1h X3NldHVwX29wc19jZmcgKmNmZykKLXsKLQl1MzIgKmxvYyA9IE5VTEw7Ci0KLQlsb2MgPSAgKHUz MiAqKSgodTggKiljZmctPmRtYV9idWYtPnZhZGRyICsKLQkJCWNmZy0+ZG1hX2J1Zi0+aW5kZXgp OwotCWxvY1swXSA9IEJMS19SRUdfV1JJVEVfT1BDT0RFOwotCWxvY1swXSB8PSAoY2ZnLT5ibGtf b2Zmc2V0ICYgTUFYX1JFTEFUSVZFX09GRik7Ci0JbG9jWzFdID0gKGNmZy0+aW5jKSA/IDAgOiBC SVQoMzEpOwotCWxvY1sxXSB8PSAoY2ZnLT53cmFwX3NpemUgJiBXUkFQX01BWF9TSVpFKSA8PCAx NjsKLQlsb2NbMV0gfD0gKChTSVpFX0RXT1JEKGNmZy0+ZGF0YV9zaXplKSkgJiBNQVhfRFdPUkRT X1NaKTsKLQljZmctPmRtYV9idWYtPm5leHRfb3BfYWxsb3dlZCA9IFJFR19XUklURV9PUDsKLQlj ZmctPmRtYV9idWYtPmluZGV4ICs9IG9wc19tZW1fc2l6ZVtjZmctPm9wc107Ci0KLQlyZXR1cm4g d3JpdGVfbXVsdGlfcmVnKGNmZyk7Ci19Ci0KLXN0YXRpYyBpbnQgd3JpdGVfc2luZ2xlX3JlZyhz dHJ1Y3QgZHB1X3JlZ19kbWFfc2V0dXBfb3BzX2NmZyAqY2ZnKQotewotCXUzMiAqbG9jID0gTlVM TDsKLQotCWxvYyA9ICAodTMyICopKCh1OCAqKWNmZy0+ZG1hX2J1Zi0+dmFkZHIgKwotCQkJY2Zn LT5kbWFfYnVmLT5pbmRleCk7Ci0JbG9jWzBdID0gU0lOR0xFX1JFR19XUklURV9PUENPREU7Ci0J bG9jWzBdIHw9IChjZmctPmJsa19vZmZzZXQgJiBNQVhfUkVMQVRJVkVfT0ZGKTsKLQlsb2NbMV0g PSAqY2ZnLT5kYXRhOwotCWNmZy0+ZG1hX2J1Zi0+aW5kZXggKz0gb3BzX21lbV9zaXplW2NmZy0+ b3BzXTsKLQljZmctPmRtYV9idWYtPm9wc19jb21wbGV0ZWQgfD0gUkVHX1dSSVRFX09QOwotCWNm Zy0+ZG1hX2J1Zi0+bmV4dF9vcF9hbGxvd2VkID0gUkVHX1dSSVRFX09QIHwgREVDT0RFX1NFTF9P UDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdyaXRlX2RlY29kZV9zZWwoc3RydWN0 IGRwdV9yZWdfZG1hX3NldHVwX29wc19jZmcgKmNmZykKLXsKLQl1MzIgKmxvYyA9IE5VTEw7Ci0K LQlsb2MgPSAgKHUzMiAqKSgodTggKiljZmctPmRtYV9idWYtPnZhZGRyICsKLQkJCWNmZy0+ZG1h X2J1Zi0+aW5kZXgpOwotCWxvY1swXSA9IFJFR19ETUFfREVDT0RFX1NFTDsKLQlnZXRfZGVjb2Rl X3NlbChjZmctPmJsaywgJmxvY1sxXSk7Ci0JY2ZnLT5kbWFfYnVmLT5pbmRleCArPSBzaXplb2Yo dTMyKSAqIDI7Ci0JY2ZnLT5kbWFfYnVmLT5vcHNfY29tcGxldGVkIHw9IERFQ09ERV9TRUxfT1A7 Ci0JY2ZnLT5kbWFfYnVmLT5uZXh0X29wX2FsbG93ZWQgPSBSRUdfV1JJVEVfT1A7Ci0KLQlyZXR1 cm4gMDsKLX0KLQotc3RhdGljIGludCB2YWxpZGF0ZV93cml0ZV9tdWx0aV9sdXRfcmVnKHN0cnVj dCBkcHVfcmVnX2RtYV9zZXR1cF9vcHNfY2ZnICpjZmcpCi17Ci0JaW50IHJjOwotCi0JcmMgPSB2 YWxpZGF0ZV93cml0ZV9yZWcoY2ZnKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCWlmIChj ZmctPndyYXBfc2l6ZSA8IFdSQVBfTUlOX1NJWkUgfHwgY2ZnLT53cmFwX3NpemUgPiBXUkFQX01B WF9TSVpFKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCB3cmFwIHN6ICVkIG1pbiAlZCBtYXggJWxk XG4iLAotCQkJY2ZnLT53cmFwX3NpemUsIFdSQVBfTUlOX1NJWkUsIFdSQVBfTUFYX1NJWkUpOwot CQlyYyA9IC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IHZhbGlk YXRlX3dyaXRlX3JlZyhzdHJ1Y3QgZHB1X3JlZ19kbWFfc2V0dXBfb3BzX2NmZyAqY2ZnKQotewot CXUzMiByZW1haW5fbGVuLCB3cml0ZV9sZW47Ci0KLQlyZW1haW5fbGVuID0gQlVGRkVSX1NQQUNF X0xFRlQoY2ZnKTsKLQl3cml0ZV9sZW4gPSBvcHNfbWVtX3NpemVbY2ZnLT5vcHNdICsgY2ZnLT5k YXRhX3NpemU7Ci0JaWYgKHJlbWFpbl9sZW4gPCB3cml0ZV9sZW4pIHsKLQkJRFJNX0VSUk9SKCJi dWZmZXIgaXMgZnVsbCBzeiAlZCBuZWVkcyAlZCBieXRlc1xuIiwKLQkJCQlyZW1haW5fbGVuLCB3 cml0ZV9sZW4pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoIWNmZy0+ZGF0YSkgewot CQlEUk1fRVJST1IoImludmFsaWQgZGF0YSAlcEsgc2l6ZSAlZCBleHAgc3ogJWRcbiIsIGNmZy0+ ZGF0YSwKLQkJCWNmZy0+ZGF0YV9zaXplLCB3cml0ZV9sZW4pOwotCQlyZXR1cm4gLUVJTlZBTDsK LQl9Ci0JaWYgKChTSVpFX0RXT1JEKGNmZy0+ZGF0YV9zaXplKSkgPiBNQVhfRFdPUkRTX1NaIHx8 Ci0JICAgIE5PVF9XT1JEX0FMSUdORUQoY2ZnLT5kYXRhX3NpemUpKSB7Ci0JCURSTV9FUlJPUigi SW52YWxpZCBkYXRhIHNpemUgJWQgbWF4ICVsZCBhbGlnbiAleFxuIiwKLQkJCWNmZy0+ZGF0YV9z aXplLCBNQVhfRFdPUkRTX1NaLAotCQkJTk9UX1dPUkRfQUxJR05FRChjZmctPmRhdGFfc2l6ZSkp OwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoY2ZnLT5ibGtfb2Zmc2V0ID4gTUFYX1JF TEFUSVZFX09GRiB8fAotCQkJTk9UX1dPUkRfQUxJR05FRChjZmctPmJsa19vZmZzZXQpKSB7Ci0J CURSTV9FUlJPUigiaW52YWxpZCBvZmZzZXQgJWQgbWF4ICVsZCBhbGlnbiAleFxuIiwKLQkJCQlj ZmctPmJsa19vZmZzZXQsIE1BWF9SRUxBVElWRV9PRkYsCi0JCQkJTk9UX1dPUkRfQUxJR05FRChj ZmctPmJsa19vZmZzZXQpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19 Ci0KLXN0YXRpYyBpbnQgdmFsaWRhdGVfd3JpdGVfZGVjb2RlX3NlbChzdHJ1Y3QgZHB1X3JlZ19k bWFfc2V0dXBfb3BzX2NmZyAqY2ZnKQotewotCXUzMiByZW1haW5fbGVuOwotCi0JcmVtYWluX2xl biA9IEJVRkZFUl9TUEFDRV9MRUZUKGNmZyk7Ci0JaWYgKHJlbWFpbl9sZW4gPCBvcHNfbWVtX3Np emVbSFdfQkxLX1NFTEVDVF0pIHsKLQkJRFJNX0VSUk9SKCJidWZmZXIgaXMgZnVsbCBuZWVkcyAl ZCBieXRlc1xuIiwKLQkJCQlvcHNfbWVtX3NpemVbSFdfQkxLX1NFTEVDVF0pOwotCQlyZXR1cm4g LUVJTlZBTDsKLQl9Ci0KLQlpZiAoIWNmZy0+YmxrKSB7Ci0JCURSTV9FUlJPUigiYmxrIHNldCBh cyAwXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCS8qIERTUFAgYW5kIFZJRyBjYW4ndCBi ZSBjb21iaW5lZCAqLwotCWlmICgoY2ZnLT5ibGsgJiBHUlBfVklHX0hXX0JMS19TRUxFQ1QpICYm Ci0JCShjZmctPmJsayAmIEdSUF9EU1BQX0hXX0JMS19TRUxFQ1QpKSB7Ci0JCURSTV9FUlJPUigi aW52YWxpZCBibGsgY29tYmluYXRpb24gJXhcbiIsCi0JCQkgICAgY2ZnLT5ibGspOwotCQlyZXR1 cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2YWxpZGF0ZV9k bWFfY2ZnKHN0cnVjdCBkcHVfcmVnX2RtYV9zZXR1cF9vcHNfY2ZnICpjZmcpCi17Ci0JaW50IHJj ID0gMDsKLQlib29sIHN1cHBvcnRlZDsKLQotCWlmICghY2ZnIHx8IGNmZy0+b3BzID49IFJFR19E TUFfU0VUVVBfT1BTX01BWCB8fCAhY2ZnLT5kbWFfYnVmKSB7Ci0JCURSTV9FUlJPUigiaW52YWxp ZCBwYXJhbSBjZmcgJXBLIG9wcyAlZCBkbWFfYnVmICVwS1xuIiwKLQkJCWNmZywgKChjZmcpID8g Y2ZnLT5vcHMgOiBSRUdfRE1BX1NFVFVQX09QU19NQVgpLAotCQkJKChjZmcpID8gY2ZnLT5kbWFf YnVmIDogTlVMTCkpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyYyA9IGNoZWNrX3N1cHBv cnRfdjEoY2ZnLT5mZWF0dXJlLCBjZmctPmJsaywgJnN1cHBvcnRlZCk7Ci0JaWYgKHJjIHx8ICFz dXBwb3J0ZWQpIHsKLQkJRFJNX0VSUk9SKCJjaGVjayBzdXBwb3J0IGZhaWxlZCByYyAlZCBzdXBw b3J0ZWQgJWRcbiIsCi0JCQkJcmMsIHN1cHBvcnRlZCk7Ci0JCXJjID0gLUVJTlZBTDsKLQkJcmV0 dXJuIHJjOwotCX0KLQotCWlmIChjZmctPmRtYV9idWYtPmluZGV4ID49IGNmZy0+ZG1hX2J1Zi0+ YnVmZmVyX3NpemUgfHwKLQkgICAgTk9UX1dPUkRfQUxJR05FRChjZmctPmRtYV9idWYtPmluZGV4 KSkgewotCQlEUk1fRVJST1IoIkJ1ZiBPdmVyZmxvdyBpbmRleCAlZCBtYXggc2l6ZSAlZCBhbGln biAleFxuIiwKLQkJCWNmZy0+ZG1hX2J1Zi0+aW5kZXgsIGNmZy0+ZG1hX2J1Zi0+YnVmZmVyX3Np emUsCi0JCQlOT1RfV09SRF9BTElHTkVEKGNmZy0+ZG1hX2J1Zi0+aW5kZXgpKTsKLQkJcmV0dXJu IC1FSU5WQUw7Ci0JfQotCi0JaWYgKGNmZy0+ZG1hX2J1Zi0+aW92YSAmIEdVQVJEX0JZVEVTIHx8 ICFjZmctPmRtYV9idWYtPnZhZGRyKSB7Ci0JCURSTV9FUlJPUigiaW92YSBub3QgYWxpZ25lZCB0 byAlbHggaW92YSAlbGx4IGt2YSAlcEsiLAotCQkJCUFERFJfQUxJR04sIGNmZy0+ZG1hX2J1Zi0+ aW92YSwKLQkJCQljZmctPmRtYV9idWYtPnZhZGRyKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot CWlmICghSVNfT1BfQUxMT1dFRChjZmctPm9wcywgY2ZnLT5kbWFfYnVmLT5uZXh0X29wX2FsbG93 ZWQpKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBvcCAleCBhbGxvd2VkICV4XG4iLCBjZmctPm9w cywKLQkJCQljZmctPmRtYV9idWYtPm5leHRfb3BfYWxsb3dlZCk7Ci0JCXJldHVybiAtRUlOVkFM OwotCX0KLQotCWlmICghdmFsaWRhdGVfZG1hX29wX3BhcmFtc1tjZmctPm9wc10gfHwKLQkgICAg IXdyaXRlX2RtYV9vcF9wYXJhbXNbY2ZnLT5vcHNdKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBv cCAlZCB2YWxpZGF0ZSAlcEsgd3JpdGUgJXBLXG4iLCBjZmctPm9wcywKLQkJCXZhbGlkYXRlX2Rt YV9vcF9wYXJhbXNbY2ZnLT5vcHNdLAotCQkJd3JpdGVfZG1hX29wX3BhcmFtc1tjZmctPm9wc10p OwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IHZh bGlkYXRlX2tpY2tfb2ZmX3YxKHN0cnVjdCBkcHVfcmVnX2RtYV9raWNrb2ZmX2NmZyAqY2ZnKQot ewotCi0JaWYgKCFjZmcgfHwgIWNmZy0+Y3RsIHx8ICFjZmctPmRtYV9idWYpIHsKLQkJRFJNX0VS Uk9SKCJpbnZhbGlkIGNmZyAlcEsgY3RsICVwSyBkbWFfYnVmICVwS1xuIiwKLQkJCWNmZywgKCgh Y2ZnKSA/IE5VTEwgOiBjZmctPmN0bCksCi0JCQkoKCFjZmcpID8gTlVMTCA6IGNmZy0+ZG1hX2J1 ZikpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoY2ZnLT5jdGwtPmlkeCA8IENUTF8w ICYmIGNmZy0+Y3RsLT5pZHggPj0gQ1RMX01BWCkgewotCQlEUk1fRVJST1IoImludmFsaWQgY3Rs IGlkeCAlZFxuIiwgY2ZnLT5jdGwtPmlkeCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlm IChjZmctPm9wID49IFJFR19ETUFfT1BfTUFYKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBvcCAl ZFxuIiwgY2ZnLT5vcCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICgoY2ZnLT5vcCA9 PSBSRUdfRE1BX1dSSVRFKSAmJgotCSAgICAgKCEoY2ZnLT5kbWFfYnVmLT5vcHNfY29tcGxldGVk ICYgREVDT0RFX1NFTF9PUCkgfHwKLQkgICAgICEoY2ZnLT5kbWFfYnVmLT5vcHNfY29tcGxldGVk ICYgUkVHX1dSSVRFX09QKSkpIHsKLQkJRFJNX0VSUk9SKCJpbmNvbXBsZXRlIHdyaXRlIG9wcyAl eFxuIiwKLQkJCQljZmctPmRtYV9idWYtPm9wc19jb21wbGV0ZWQpOwotCQlyZXR1cm4gLUVJTlZB TDsKLQl9Ci0KLQlpZiAoY2ZnLT5vcCA9PSBSRUdfRE1BX1JFQUQgJiYgY2ZnLT5ibG9ja19zZWxl Y3QgPj0gRFNQUF9ISVNUX01BWCkgewotCQlEUk1fRVJST1IoImludmFsaWQgYmxvY2sgZm9yIHJl YWQgJWRcbiIsIGNmZy0+YmxvY2tfc2VsZWN0KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0J LyogT25seSBpbW1lZGlhdGUgdHJpZ2dlcnMgYXJlIHN1cHBvcnRlZCBub3cgaGVuY2UgaGFyZGNv ZGUgKi8KLQljZmctPnRyaWdnZXJfbW9kZSA9IChjZmctPm9wID09IFJFR19ETUFfUkVBRCkgPyAo UkVBRF9UUklHR0VSKSA6Ci0JCQkJKFdSSVRFX1RSSUdHRVIpOwotCi0JaWYgKGNmZy0+ZG1hX2J1 Zi0+aW92YSAmIEdVQVJEX0JZVEVTKSB7Ci0JCURSTV9FUlJPUigiQWRkcmVzcyBpcyBub3QgYWxp Z25lZCB0byAlbHggaW92YSAlbGx4IiwgQUREUl9BTElHTiwKLQkJCQljZmctPmRtYV9idWYtPmlv dmEpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoY2ZnLT5xdWV1ZV9zZWxlY3QgPj0g RE1BX0NUTF9RVUVVRV9NQVgpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIHF1ZXVlIHNlbGVjdGVk ICVkXG4iLCBjZmctPnF1ZXVlX3NlbGVjdCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlm IChTSVpFX0RXT1JEKGNmZy0+ZG1hX2J1Zi0+aW5kZXgpID4gTUFYX0RXT1JEU19TWiB8fAotCQkJ IWNmZy0+ZG1hX2J1Zi0+aW5kZXgpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIGR3b3JkIHNpemUg JXpkIG1heCAlbGRcbiIsCi0JCQlTSVpFX0RXT1JEKGNmZy0+ZG1hX2J1Zi0+aW5kZXgpLCBNQVhf RFdPUkRTX1NaKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0 aWMgaW50IHdyaXRlX2tpY2tfb2ZmX3YxKHN0cnVjdCBkcHVfcmVnX2RtYV9raWNrb2ZmX2NmZyAq Y2ZnKQotewotCXUzMiBjbWQxOwotCXN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAgaHc7Ci0KLQlt ZW1zZXQoJmh3LCAwLCBzaXplb2YoaHcpKTsKLQljbWQxID0gKGNmZy0+b3AgPT0gUkVHX0RNQV9S RUFEKSA/Ci0JCShkc3BwX3JlYWRfc2VsW2NmZy0+YmxvY2tfc2VsZWN0XSA8PCAzMCkgOiAwOwot CWNtZDEgfD0gKGNmZy0+bGFzdF9jb21tYW5kKSA/IEJJVCgyNCkgOiAwOwotCWNtZDEgfD0gKGNm Zy0+b3AgPT0gUkVHX0RNQV9SRUFEKSA/ICgyIDw8IDIyKSA6IDA7Ci0JY21kMSB8PSAoY2ZnLT5v cCA9PSBSRUdfRE1BX1dSSVRFKSA/IChCSVQoMjIpKSA6IDA7Ci0JY21kMSB8PSAoU0laRV9EV09S RChjZmctPmRtYV9idWYtPmluZGV4KSAmIE1BWF9EV09SRFNfU1opOwotCi0JU0VUX1VQX1JFR19E TUFfUkVHKGh3LCByZWdfZG1hKTsKLQlEUFVfUkVHX1dSSVRFKCZodywgUkVHX0RNQV9PUF9NT0RF X09GRiwgQklUKDApKTsKLQlEUFVfUkVHX1dSSVRFKCZodywgcmVnX2RtYV9jdGxfcXVldWVfb2Zm W2NmZy0+Y3RsLT5pZHhdLAotCQkJY2ZnLT5kbWFfYnVmLT5pb3ZhKTsKLQlEUFVfUkVHX1dSSVRF KCZodywgcmVnX2RtYV9jdGxfcXVldWVfb2ZmW2NmZy0+Y3RsLT5pZHhdICsgMHg0LAotCQkJY21k MSk7Ci0JaWYgKGNmZy0+bGFzdF9jb21tYW5kKQotCQlEUFVfUkVHX1dSSVRFKCZjZmctPmN0bC0+ aHcsIFJFR19ETUFfQ1RMX1RSSUdHRVJfT0ZGLAotCQkJcXVldWVfc2VsW2NmZy0+cXVldWVfc2Vs ZWN0XSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGluaXRfdjEoc3RydWN0IGRwdV9od19yZWdf ZG1hICpjZmcpCi17Ci0JaW50IGkgPSAwOwotCi0JaWYgKCFjZmcpCi0JCXJldHVybiAtRUlOVkFM OwotCi0JcmVnX2RtYSA9IGNmZzsKLQlpZiAoIWxhc3RfY21kX2J1ZikgewotCQlsYXN0X2NtZF9i dWYgPSBhbGxvY19yZWdfZG1hX2J1Zl92MShSRUdfRE1BX0hFQURFUlNfQlVGRkVSX1NaKTsKLQkJ aWYgKElTX0VSUl9PUl9OVUxMKGxhc3RfY21kX2J1ZikpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9 Ci0JcmVnX2RtYS0+b3BzLmNoZWNrX3N1cHBvcnQgPSBjaGVja19zdXBwb3J0X3YxOwotCXJlZ19k bWEtPm9wcy5zZXR1cF9wYXlsb2FkID0gc2V0dXBfcGF5bG9hZF92MTsKLQlyZWdfZG1hLT5vcHMu a2lja19vZmYgPSBraWNrX29mZl92MTsKLQlyZWdfZG1hLT5vcHMucmVzZXQgPSByZXNldF92MTsK LQlyZWdfZG1hLT5vcHMuYWxsb2NfcmVnX2RtYV9idWYgPSBhbGxvY19yZWdfZG1hX2J1Zl92MTsK LQlyZWdfZG1hLT5vcHMuZGVhbGxvY19yZWdfZG1hID0gZGVhbGxvY19yZWdfZG1hX3YxOwotCXJl Z19kbWEtPm9wcy5yZXNldF9yZWdfZG1hX2J1ZiA9IHJlc2V0X3JlZ19kbWFfYnVmZmVyX3YxOwot CXJlZ19kbWEtPm9wcy5sYXN0X2NvbW1hbmQgPSBsYXN0X2NtZF92MTsKLQotCXJlZ19kbWFfY3Rs X3F1ZXVlX29mZltDVExfMF0gPSBSRUdfRE1BX0NUTDBfUVVFVUVfMF9DTUQwX09GRjsKLQlmb3Ig KGkgPSBDVExfMTsgaSA8IEFSUkFZX1NJWkUocmVnX2RtYV9jdGxfcXVldWVfb2ZmKTsgaSsrKQot CQlyZWdfZG1hX2N0bF9xdWV1ZV9vZmZbaV0gPSByZWdfZG1hX2N0bF9xdWV1ZV9vZmZbaSAtIDFd ICsKLQkJCShzaXplb2YodTMyKSAqIDQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQg Y2hlY2tfc3VwcG9ydF92MShlbnVtIGRwdV9yZWdfZG1hX2ZlYXR1cmVzIGZlYXR1cmUsCi0JCSAg ICAgZW51bSBkcHVfcmVnX2RtYV9ibGsgYmxrLAotCQkgICAgIGJvb2wgKmlzX3N1cHBvcnRlZCkK LXsKLQlpbnQgcmV0ID0gMDsKLQotCWlmICghaXNfc3VwcG9ydGVkKQotCQlyZXR1cm4gLUVJTlZB TDsKLQotCWlmIChmZWF0dXJlID49IFJFR19ETUFfRkVBVFVSRVNfTUFYIHx8IGJsayA+PSBNRFNT KSB7Ci0JCSppc19zdXBwb3J0ZWQgPSBmYWxzZTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkqaXNf c3VwcG9ydGVkID0gKGJsayAmIHYxX3N1cHBvcnRlZFtmZWF0dXJlXSkgPyB0cnVlIDogZmFsc2U7 Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBzZXR1cF9wYXlsb2FkX3YxKHN0cnVjdCBk cHVfcmVnX2RtYV9zZXR1cF9vcHNfY2ZnICpjZmcpCi17Ci0JaW50IHJjID0gMDsKLQotCXJjID0g dmFsaWRhdGVfZG1hX2NmZyhjZmcpOwotCi0JaWYgKCFyYykKLQkJcmMgPSB2YWxpZGF0ZV9kbWFf b3BfcGFyYW1zW2NmZy0+b3BzXShjZmcpOwotCi0JaWYgKCFyYykKLQkJcmMgPSB3cml0ZV9kbWFf b3BfcGFyYW1zW2NmZy0+b3BzXShjZmcpOwotCi0JcmV0dXJuIHJjOwotfQotCi0KLXN0YXRpYyBp bnQga2lja19vZmZfdjEoc3RydWN0IGRwdV9yZWdfZG1hX2tpY2tvZmZfY2ZnICpjZmcpCi17Ci0J aW50IHJjID0gMDsKLQotCXJjID0gdmFsaWRhdGVfa2lja19vZmZfdjEoY2ZnKTsKLQlpZiAocmMp Ci0JCXJldHVybiByYzsKLQotCXJjID0gd3JpdGVfa2lja19vZmZfdjEoY2ZnKTsKLQlyZXR1cm4g cmM7Ci19Ci0KLWludCByZXNldF92MShzdHJ1Y3QgZHB1X2h3X2N0bCAqY3RsKQotewotCXN0cnVj dCBkcHVfaHdfYmxrX3JlZ19tYXAgaHc7Ci0JdTMyIGluZGV4LCB2YWw7Ci0KLQlpZiAoIWN0bCB8 fCBjdGwtPmlkeCA+IENUTF9NQVgpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIGN0bCAlcEsgY3Rs IGlkeCAlZFxuIiwKLQkJCWN0bCwgKChjdGwpID8gY3RsLT5pZHggOiAwKSk7Ci0JCXJldHVybiAt RUlOVkFMOwotCX0KLQotCW1lbXNldCgmaHcsIDAsIHNpemVvZihodykpOwotCWluZGV4ID0gY3Rs LT5pZHggLSBDVExfMDsKLQlTRVRfVVBfUkVHX0RNQV9SRUcoaHcsIHJlZ19kbWEpOwotCURQVV9S RUdfV1JJVEUoJmh3LCBSRUdfRE1BX09QX01PREVfT0ZGLCBCSVQoMCkpOwotCURQVV9SRUdfV1JJ VEUoJmh3LCAoUkVHX0RNQV9DVEwwX1JFU0VUX09GRiArIGluZGV4ICogc2l6ZW9mKHUzMikpLAot CQkJQklUKDApKTsKLQotCWluZGV4ID0gMDsKLQlkbyB7Ci0JCXVkZWxheSgxMDAwKTsKLQkJaW5k ZXgrKzsKLQkJdmFsID0gRFBVX1JFR19SRUFEKCZodywKLQkJCShSRUdfRE1BX0NUTDBfUkVTRVRf T0ZGICsgaW5kZXggKiBzaXplb2YodTMyKSkpOwotCX0gd2hpbGUgKGluZGV4IDwgMiAmJiB2YWwp OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZHB1X3JlZ19kbWFfYnVmZmVyICph bGxvY19yZWdfZG1hX2J1Zl92MSh1MzIgc2l6ZSkKLXsKLQlzdHJ1Y3QgZHB1X3JlZ19kbWFfYnVm ZmVyICpkbWFfYnVmID0gTlVMTDsKLQl1MzIgaW92YV9hbGlnbmVkLCBvZmZzZXQ7Ci0JdTMyIHJz aXplID0gc2l6ZSArIEdVQVJEX0JZVEVTOwotCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXYg PSByZWdfZG1hLT5kcm1fZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgbXNtX2dlbV9hZGRyZXNz X3NwYWNlICphc3BhY2UgPSBOVUxMOwotCWludCByYyA9IDA7Ci0KLQlpZiAoIXNpemUgfHwgU0la RV9EV09SRChzaXplKSA+IE1BWF9EV09SRFNfU1opIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIGJ1 ZmZlciBzaXplICVkXG4iLCBzaXplKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0JfQot Ci0JZG1hX2J1ZiA9IGt6YWxsb2Moc2l6ZW9mKCpkbWFfYnVmKSwgR0ZQX0tFUk5FTCk7Ci0JaWYg KCFkbWFfYnVmKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCWRtYV9idWYtPmJ1ZiA9 IG1zbV9nZW1fbmV3KHJlZ19kbWEtPmRybV9kZXYsCi0JCQkJICAgIHJzaXplLCBNU01fQk9fVU5D QUNIRUQpOwotCWlmIChJU19FUlJfT1JfTlVMTChkbWFfYnVmLT5idWYpKSB7Ci0JCXJjID0gLUVJ TlZBTDsKLQkJZ290byBmYWlsOwotCX0KLQotCWFzcGFjZSA9IHByaXYtPmttcy0+YXNwYWNlOwot CWlmICghYXNwYWNlKSB7Ci0JCURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCBhc3BhY2VcbiIpOwot CQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZnJlZV9nZW07Ci0JfQotCi0JZG1hX2J1Zi0+YXNwYWNl ID0gYXNwYWNlOwotCXJjID0gbXNtX2dlbV9nZXRfaW92YShkbWFfYnVmLT5idWYsIGFzcGFjZSwg JmRtYV9idWYtPmlvdmEpOwotCWlmIChyYykgewotCQlEUk1fRVJST1IoImZhaWxlZCB0byBnZXQg dGhlIGlvdmEgcmMgJWRcbiIsIHJjKTsKLQkJZ290byBmcmVlX2dlbTsKLQl9Ci0KLQlkbWFfYnVm LT52YWRkciA9IG1zbV9nZW1fZ2V0X3ZhZGRyKGRtYV9idWYtPmJ1Zik7Ci0JaWYgKElTX0VSUl9P Ul9OVUxMKGRtYV9idWYtPnZhZGRyKSkgewotCQlEUk1fRVJST1IoImZhaWxlZCB0byBnZXQgdmEg cmMgJWRcbiIsIHJjKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIHB1dF9pb3ZhOwotCX0KLQot CWRtYV9idWYtPmJ1ZmZlcl9zaXplID0gc2l6ZTsKLQlpb3ZhX2FsaWduZWQgPSAoZG1hX2J1Zi0+ aW92YSArIEdVQVJEX0JZVEVTKSAmIEFMSUdORURfT0ZGU0VUOwotCW9mZnNldCA9IGlvdmFfYWxp Z25lZCAtIGRtYV9idWYtPmlvdmE7Ci0JZG1hX2J1Zi0+aW92YSA9IGRtYV9idWYtPmlvdmEgKyBv ZmZzZXQ7Ci0JZG1hX2J1Zi0+dmFkZHIgPSAodm9pZCAqKSgoKHU4ICopZG1hX2J1Zi0+dmFkZHIp ICsgb2Zmc2V0KTsKLQlkbWFfYnVmLT5uZXh0X29wX2FsbG93ZWQgPSBERUNPREVfU0VMX09QOwot Ci0JcmV0dXJuIGRtYV9idWY7Ci0KLXB1dF9pb3ZhOgotCW1zbV9nZW1fcHV0X2lvdmEoZG1hX2J1 Zi0+YnVmLCBhc3BhY2UpOwotZnJlZV9nZW06Ci0JbXV0ZXhfbG9jaygmcmVnX2RtYS0+ZHJtX2Rl di0+c3RydWN0X211dGV4KTsKLQltc21fZ2VtX2ZyZWVfb2JqZWN0KGRtYV9idWYtPmJ1Zik7Ci0J bXV0ZXhfdW5sb2NrKCZyZWdfZG1hLT5kcm1fZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotZmFpbDoKLQlr ZnJlZShkbWFfYnVmKTsKLQlyZXR1cm4gRVJSX1BUUihyYyk7Ci19Ci0KLXN0YXRpYyBpbnQgZGVh bGxvY19yZWdfZG1hX3YxKHN0cnVjdCBkcHVfcmVnX2RtYV9idWZmZXIgKmRtYV9idWYpCi17Ci0J aWYgKCFkbWFfYnVmKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBwYXJhbSByZWdfYnVmICVwS1xu IiwgZG1hX2J1Zik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChkbWFfYnVmLT5idWYp IHsKLQkJbXNtX2dlbV9wdXRfaW92YShkbWFfYnVmLT5idWYsIDApOwotCQltdXRleF9sb2NrKCZy ZWdfZG1hLT5kcm1fZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCQltc21fZ2VtX2ZyZWVfb2JqZWN0KGRt YV9idWYtPmJ1Zik7Ci0JCW11dGV4X3VubG9jaygmcmVnX2RtYS0+ZHJtX2Rldi0+c3RydWN0X211 dGV4KTsKLQl9Ci0KLQlrZnJlZShkbWFfYnVmKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlu dCByZXNldF9yZWdfZG1hX2J1ZmZlcl92MShzdHJ1Y3QgZHB1X3JlZ19kbWFfYnVmZmVyICpsdXRf YnVmKQotewotCWlmICghbHV0X2J1ZikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlsdXRfYnVmLT5p bmRleCA9IDA7Ci0JbHV0X2J1Zi0+b3BzX2NvbXBsZXRlZCA9IDA7Ci0JbHV0X2J1Zi0+bmV4dF9v cF9hbGxvd2VkID0gREVDT0RFX1NFTF9PUDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2 YWxpZGF0ZV9sYXN0X2NtZChzdHJ1Y3QgZHB1X3JlZ19kbWFfc2V0dXBfb3BzX2NmZyAqY2ZnKQot ewotCXUzMiByZW1haW5fbGVuLCB3cml0ZV9sZW47Ci0KLQlyZW1haW5fbGVuID0gQlVGRkVSX1NQ QUNFX0xFRlQoY2ZnKTsKLQl3cml0ZV9sZW4gPSBzaXplb2YodTMyKTsKLQlpZiAocmVtYWluX2xl biA8IHdyaXRlX2xlbikgewotCQlEUk1fRVJST1IoImJ1ZmZlciBpcyBmdWxsIHN6ICVkIG5lZWRz ICVkIGJ5dGVzXG4iLAotCQkJCXJlbWFpbl9sZW4sIHdyaXRlX2xlbik7Ci0JCXJldHVybiAtRUlO VkFMOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3cml0ZV9sYXN0X2NtZChzdHJ1 Y3QgZHB1X3JlZ19kbWFfc2V0dXBfb3BzX2NmZyAqY2ZnKQotewotCXUzMiAqbG9jID0gTlVMTDsK LQotCWxvYyA9ICAodTMyICopKCh1OCAqKWNmZy0+ZG1hX2J1Zi0+dmFkZHIgKwotCQkJY2ZnLT5k bWFfYnVmLT5pbmRleCk7Ci0JbG9jWzBdID0gUkVHX0RNQV9ERUNPREVfU0VMOwotCWxvY1sxXSA9 IDA7Ci0JY2ZnLT5kbWFfYnVmLT5pbmRleCA9IHNpemVvZih1MzIpICogMjsKLQljZmctPmRtYV9i dWYtPm9wc19jb21wbGV0ZWQgPSBSRUdfV1JJVEVfT1AgfCBERUNPREVfU0VMX09QOwotCWNmZy0+ ZG1hX2J1Zi0+bmV4dF9vcF9hbGxvd2VkID0gUkVHX1dSSVRFX09QOwotCi0JcmV0dXJuIDA7Ci19 Ci0KLXN0YXRpYyBpbnQgbGFzdF9jbWRfdjEoc3RydWN0IGRwdV9od19jdGwgKmN0bCwgZW51bSBk cHVfcmVnX2RtYV9xdWV1ZSBxKQotewotCXN0cnVjdCBkcHVfcmVnX2RtYV9zZXR1cF9vcHNfY2Zn IGNmZzsKLQlzdHJ1Y3QgZHB1X3JlZ19kbWFfa2lja29mZl9jZmcga2lja19vZmY7Ci0KLQlpZiAo IWxhc3RfY21kX2J1ZiB8fCAhY3RsIHx8IHEgPj0gRE1BX0NUTF9RVUVVRV9NQVgpIHsKLQkJRFJN X0VSUk9SKCJpbnZhbGlkIHBhcmFtIGJ1ZiAlcEsgY3RsICVwSyBxICVkXG4iLCBsYXN0X2NtZF9i dWYsCi0JCQkJY3RsLCBxKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKCFsYXN0X2Nt ZF9idWYtPmlvdmEpIHsKLQkJRFJNX0RFQlVHKCJpb3ZhIG5vdCBzZXQsIHBvc3NpYmxlIHNlY3Vy ZSBzZXNzaW9uXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JY2ZnLmRtYV9idWYgPSBsYXN0X2Nt ZF9idWY7Ci0JcmVzZXRfcmVnX2RtYV9idWZmZXJfdjEobGFzdF9jbWRfYnVmKTsKLQlpZiAodmFs aWRhdGVfbGFzdF9jbWQoJmNmZykpIHsKLQkJRFJNX0VSUk9SKCJ2YWxpZGF0ZSBidWYgZmFpbGVk XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHdyaXRlX2xhc3RfY21kKCZjZmcp KSB7Ci0JCURSTV9FUlJPUigid3JpdGUgYnVmIGZhaWxlZFxuIik7Ci0JCXJldHVybiAtRUlOVkFM OwotCX0KLQotCWtpY2tfb2ZmLmN0bCA9IGN0bDsKLQlraWNrX29mZi5xdWV1ZV9zZWxlY3QgPSBx OwotCWtpY2tfb2ZmLnRyaWdnZXJfbW9kZSA9IFdSSVRFX0lNTUVESUFURTsKLQlraWNrX29mZi5s YXN0X2NvbW1hbmQgPSAxOwotCWtpY2tfb2ZmLm9wID0gUkVHX0RNQV9XUklURTsKLQlraWNrX29m Zi5kbWFfYnVmID0gbGFzdF9jbWRfYnVmOwotCWlmIChraWNrX29mZl92MSgma2lja19vZmYpKSB7 Ci0JCURSTV9FUlJPUigia2ljayBvZmYgbGFzdCBjbWQgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIC1F SU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgZGVpbml0X3YxKHZvaWQpCi17Ci0J aWYgKGxhc3RfY21kX2J1ZikKLQkJZGVhbGxvY19yZWdfZG1hX3YxKGxhc3RfY21kX2J1Zik7Ci0J bGFzdF9jbWRfYnVmID0gTlVMTDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9od19yZWdfZG1hX3YxLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfaHdfcmVnX2RtYV92MS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0 ZDc4NGViLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9o d19yZWdfZG1hX3YxLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKiBDb3B5cmln aHQgKGMpIDIwMTctMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIg YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KLSAqLwotI2lmbmRlZiBfRFBVX0hXX1JFR19ETUFfVjFfSAotI2RlZmlu ZSBfRFBVX0hXX1JFR19ETUFfVjFfSAotCi0jaW5jbHVkZSAiZHB1X3JlZ19kbWEuaCIKLQotLyoq Ci0gKiBpbml0X3YxKCkgLSBpbml0aWFsaXplIHRoZSByZWcgZG1hIHYxIGRyaXZlciBieSBpbnN0 YWxsaW5nIHYxIG9wcwotICogQHJlZ19kbWEgLSByZWdfZG1hIGh3IGluZm8gc3RydWN0dXJlIGV4 cG9zaW5nIGNhcGFiaWxpdGllcy4KLSAqLwotaW50IGluaXRfdjEoc3RydWN0IGRwdV9od19yZWdf ZG1hICpyZWdfZG1hKTsKLQotLyoqCi0gKiBkZWluaXRfdjEoKSAtIGZyZWUgdXAgYW55IHJlc291 cmNlcyBhbGxvY2F0ZWQgZHVyaW5nIHRoZSB2MSByZWcgZG1hIGluaXQKLSAqLwotdm9pZCBkZWlu aXRfdjEodm9pZCk7Ci0jZW5kaWYgLyogX0RQVV9IV19SRUdfRE1BX1YxX0ggKi8KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19yZWdfZG1hX3YxX2NvbG9y X3Byb2MuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19yZWdfZG1hX3Yx X2NvbG9yX3Byb2MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDIxYWE2Zi4uMDAw MDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfcmVnX2RtYV92 MV9jb2xvcl9wcm9jLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NDMgKzAsMCBAQAotLyogQ29weXJp Z2h0IChjKSAyMDE3LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAy IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCi0gKi8KLSNpbmNsdWRlIDxkcm0vbXNtX2RybV9wcC5oPgotI2luY2x1 ZGUgImRwdV9yZWdfZG1hLmgiCi0jaW5jbHVkZSAiZHB1X2h3X3JlZ19kbWFfdjFfY29sb3JfcHJv Yy5oIgotI2luY2x1ZGUgImRwdV9od19jb2xvcl9wcm9jX2NvbW1vbl92NC5oIgotCi0vKiBSZXNl cnZlIHNwYWNlIG9mIDEyOCB3b3JkcyBmb3IgTFVUIGRtYSBwYXlsb2FkIHNldC11cCAqLwotI2Rl ZmluZSBSRUdfRE1BX0hFQURFUlNfQlVGRkVSX1NaIChzaXplb2YodTMyKSAqIDEyOCkKLQotI2Rl ZmluZSBWTFVUX01FTV9TSVpFICgoMTI4ICogc2l6ZW9mKHUzMikpICsgUkVHX0RNQV9IRUFERVJT X0JVRkZFUl9TWikKLSNkZWZpbmUgVkxVVF9MRU4gKDEyOCAqIHNpemVvZih1MzIpKQotI2RlZmlu ZSBQQV9PUF9NT0RFX09GRiAweDgwMAotI2RlZmluZSBQQV9MVVRWX09QTU9ERV9PRkYgMHg4NGMK LQotI2RlZmluZSBHQU1VVF9MVVRfTUVNX1NJWkUgKChzaXplb2Yoc3RydWN0IGRybV9tc21fM2Rf Z2FtdXQpKSArIFwKLQkJUkVHX0RNQV9IRUFERVJTX0JVRkZFUl9TWikKLSNkZWZpbmUgR0FNVVRf U0NBTEVfT0ZGX0xFTiAoR0FNVVRfM0RfU0NBTEVfT0ZGX1NaICogXAotCQlHQU1VVF8zRF9TQ0FM RV9PRkZfVEJMX05VTSAqIHNpemVvZih1MzIpKQotI2RlZmluZSBHQU1VVF9TQ0FMRV9PRkZfTEVO XzEyIChHQU1VVF8zRF9TQ0FMRUJfT0ZGX1NaICogc2l6ZW9mKHUzMikpCi0KLSNkZWZpbmUgR0Nf TFVUX01FTV9TSVpFICgoc2l6ZW9mKHN0cnVjdCBkcm1fbXNtX3BnY19sdXQpKSArIFwKLQkJUkVH X0RNQV9IRUFERVJTX0JVRkZFUl9TWikKLQotI2RlZmluZSBJR0NfTFVUX01FTV9TSVpFICgoc2l6 ZW9mKHN0cnVjdCBkcm1fbXNtX2lnY19sdXQpKSArIFwKLQkJUkVHX0RNQV9IRUFERVJTX0JVRkZF Ul9TWikKLQotI2RlZmluZSBQQ0NfTFVUX0VOVFJJRVMgKFBDQ19OVU1fUExBTkVTICogUENDX05V TV9DT0VGRikKLSNkZWZpbmUgUENDX0xFTiAoUENDX0xVVF9FTlRSSUVTICogc2l6ZW9mKHUzMikp Ci0jZGVmaW5lIFBDQ19NRU1fU0laRSAoUENDX0xFTiArIFwKLQkJUkVHX0RNQV9IRUFERVJTX0JV RkZFUl9TWikKLQotI2RlZmluZSBSRUdfTUFTSyhuKSAoKEJJVChuKSkgLSAxKQotCi1zdGF0aWMg c3RydWN0IGRwdV9yZWdfZG1hX2J1ZmZlciAqZHNwcF9idWZbUkVHX0RNQV9GRUFUVVJFU19NQVhd W0RTUFBfTUFYXTsKLQotc3RhdGljIHUzMiBmZWF0dXJlX21hcFtEUFVfRFNQUF9NQVhdID0gewot CVtEUFVfRFNQUF9WTFVUXSA9IFJFR19ETUFfRkVBVFVSRVNfTUFYLAotCVtEUFVfRFNQUF9HQU1V VF0gPSBHQU1VVCwKLQlbRFBVX0RTUFBfSUdDXSA9IElHQywKLQlbRFBVX0RTUFBfUENDXSA9IFBD QywKLQlbRFBVX0RTUFBfR0NdID0gR0MsCi0JW0RQVV9EU1BQX0hTSUNdID0gUkVHX0RNQV9GRUFU VVJFU19NQVgsCi0JW0RQVV9EU1BQX01FTUNPTE9SXSA9IFJFR19ETUFfRkVBVFVSRVNfTUFYLAot CVtEUFVfRFNQUF9TSVhaT05FXSA9IFJFR19ETUFfRkVBVFVSRVNfTUFYLAotCVtEUFVfRFNQUF9E SVRIRVJdID0gUkVHX0RNQV9GRUFUVVJFU19NQVgsCi0JW0RQVV9EU1BQX0hJU1RdID0gUkVHX0RN QV9GRUFUVVJFU19NQVgsCi0JW0RQVV9EU1BQX0FEXSA9IFJFR19ETUFfRkVBVFVSRVNfTUFYLAot fTsKLQotc3RhdGljIHUzMiBmZWF0dXJlX3JlZ19kbWFfc3pbRFBVX0RTUFBfTUFYXSA9IHsKLQlb RFBVX0RTUFBfVkxVVF0gPSBWTFVUX01FTV9TSVpFLAotCVtEUFVfRFNQUF9HQU1VVF0gPSBHQU1V VF9MVVRfTUVNX1NJWkUsCi0JW0RQVV9EU1BQX0dDXSA9IEdDX0xVVF9NRU1fU0laRSwKLQlbRFBV X0RTUFBfSUdDXSA9IElHQ19MVVRfTUVNX1NJWkUsCi0JW0RQVV9EU1BQX1BDQ10gPSBQQ0NfTUVN X1NJWkUsCi19OwotCi1zdGF0aWMgdTMyIGRzcHBfbWFwcGluZ1tEU1BQX01BWF0gPSB7Ci0JW0RT UFBfMF0gPSBEU1BQMCwKLQlbRFNQUF8xXSA9IERTUFAxLAotCVtEU1BQXzJdID0gRFNQUDIsCi0J W0RTUFBfM10gPSBEU1BQMywKLX07Ci0KLSNkZWZpbmUgUkVHX0RNQV9JTklUX09QUyhjZmcsIGJs b2NrLCByZWdfZG1hX2ZlYXR1cmUsIGZlYXR1cmVfZG1hX2J1ZikgXAotCWRvIHsgXAotCQltZW1z ZXQoJmNmZywgMCwgc2l6ZW9mKGNmZykpOyBcCi0JCShjZmcpLmJsayA9IGJsb2NrOyBcCi0JCShj ZmcpLmZlYXR1cmUgPSByZWdfZG1hX2ZlYXR1cmU7IFwKLQkJKGNmZykuZG1hX2J1ZiA9IGZlYXR1 cmVfZG1hX2J1ZjsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgUkVHX0RNQV9TRVRVUF9PUFMo Y2ZnLCBibG9ja19vZmYsIGRhdGFfcHRyLCBkYXRhX2xlbiwgb3AsIFwKLQkJd3JhcF9zeiwgd3Jh cF9pbmMpIFwKLQlkbyB7IFwKLQkJKGNmZykub3BzID0gb3A7IFwKLQkJKGNmZykuYmxrX29mZnNl dCA9IGJsb2NrX29mZjsgXAotCQkoY2ZnKS5kYXRhX3NpemUgPSBkYXRhX2xlbjsgXAotCQkoY2Zn KS5kYXRhID0gZGF0YV9wdHI7IFwKLQkJKGNmZykuaW5jID0gd3JhcF9pbmM7IFwKLQkJKGNmZyku d3JhcF9zaXplID0gd3JhcF9zejsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgUkVHX0RNQV9T RVRVUF9LSUNLT0ZGKGNmZywgaHdfY3RsLCBmZWF0dXJlX2RtYV9idWYsIG9wcywgY3RsX3EsIFwK LQkJbW9kZSkgXAotCWRvIHsgXAotCQltZW1zZXQoJmNmZywgMCwgc2l6ZW9mKGNmZykpOyBcCi0J CShjZmcpLmN0bCA9IGh3X2N0bDsgXAotCQkoY2ZnKS5kbWFfYnVmID0gZmVhdHVyZV9kbWFfYnVm OyBcCi0JCShjZmcpLm9wID0gb3BzOyBcCi0JCShjZmcpLnF1ZXVlX3NlbGVjdCA9IGN0bF9xOyBc Ci0JCShjZmcpLnRyaWdnZXJfbW9kZSA9IG1vZGU7IFwKLQl9IHdoaWxlICgwKQotCi1zdGF0aWMg aW50IHJlZ19kbWFfYnVmX2luaXQoc3RydWN0IGRwdV9yZWdfZG1hX2J1ZmZlciAqKmJ1ZiwgdTMy IHN6KTsKLXN0YXRpYyBpbnQgcmVnX2RtYV9kc3BwX2NoZWNrKHN0cnVjdCBkcHVfaHdfZHNwcCAq Y3R4LCB2b2lkICpjZmcsCi0JCWVudW0gZHB1X3JlZ19kbWFfZmVhdHVyZXMgZmVhdHVyZSk7Ci1z dGF0aWMgaW50IHJlZ19kbWFfYmxrX3NlbGVjdChlbnVtIGRwdV9yZWdfZG1hX2ZlYXR1cmVzIGZl YXR1cmUsCi0JCWVudW0gZHB1X3JlZ19kbWFfYmxrIGJsaywgc3RydWN0IGRwdV9yZWdfZG1hX2J1 ZmZlciAqZG1hX2J1Zik7Ci1zdGF0aWMgaW50IHJlZ19kbWFfd3JpdGUoZW51bSBkcHVfcmVnX2Rt YV9zZXR1cF9vcHMgb3BzLCB1MzIgb2ZmLCB1MzIgZGF0YV9zeiwKLQkJCXUzMiAqZGF0YSwgc3Ry dWN0IGRwdV9yZWdfZG1hX2J1ZmZlciAqZG1hX2J1ZiwKLQkJCWVudW0gZHB1X3JlZ19kbWFfZmVh dHVyZXMgZmVhdHVyZSwKLQkJCWVudW0gZHB1X3JlZ19kbWFfYmxrIGJsayk7Ci1zdGF0aWMgaW50 IHJlZ19kbWFfa2lja19vZmYoZW51bSBkcHVfcmVnX2RtYV9vcCBvcCwgZW51bSBkcHVfcmVnX2Rt YV9xdWV1ZSBxLAotCQllbnVtIGRwdV9yZWdfZG1hX3RyaWdnZXJfbW9kZSBtb2RlLAotCQlzdHJ1 Y3QgZHB1X3JlZ19kbWFfYnVmZmVyICpkbWFfYnVmLCBzdHJ1Y3QgZHB1X2h3X2N0bCAqY3RsKTsK LQotc3RhdGljIGludCByZWdfZG1hX2J1Zl9pbml0KHN0cnVjdCBkcHVfcmVnX2RtYV9idWZmZXIg KipidWYsIHUzMiBzaXplKQotewotCXN0cnVjdCBkcHVfaHdfcmVnX2RtYV9vcHMgKmRtYV9vcHM7 Ci0KLQlkbWFfb3BzID0gZHB1X3JlZ19kbWFfZ2V0X29wcygpOwotCWlmIChJU19FUlJfT1JfTlVM TChkbWFfb3BzKSkKLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQotCWlmICghYnVmKSB7Ci0JCURSTV9F UlJPUigiaW52YWxpZCBidWZcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBidWZm ZXIgYWxyZWFkeSBpbml0aWFsaXplZCAqLwotCWlmICgqYnVmKQotCQlyZXR1cm4gMDsKLQotCSpi dWYgPSBkbWFfb3BzLT5hbGxvY19yZWdfZG1hX2J1ZihzaXplKTsKLQlpZiAoSVNfRVJSX09SX05V TEwoKmJ1ZikpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBp bnQgcmVnX2RtYV9kc3BwX2NoZWNrKHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpjZmcs Ci0JCWVudW0gZHB1X3JlZ19kbWFfZmVhdHVyZXMgZmVhdHVyZSkKLXsKLQlzdHJ1Y3QgZHB1X2h3 X3JlZ19kbWFfb3BzICpkbWFfb3BzOwotCXN0cnVjdCBkcHVfaHdfY3BfY2ZnICpod19jZmcgPSBj Zmc7Ci0KLQlpZiAoIWNmZyB8fCAhY3R4KSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBjZmcgJXBL IGN0eCAlcEtcbiIsIGNmZywgY3R4KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZG1hX29w cyA9IGRwdV9yZWdfZG1hX2dldF9vcHMoKTsKLQlpZiAoSVNfRVJSX09SX05VTEwoZG1hX29wcykp Ci0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCFod19jZmctPmN0bCB8fCBjdHgtPmlkeCA+PSBE U1BQX01BWCB8fAotCQlmZWF0dXJlID49IFJFR19ETUFfRkVBVFVSRVNfTUFYKSB7Ci0JCURSTV9F UlJPUigiaW52YWxpZCBjdGwgJXBLIGRzcHAgaWR4ICVkIGZlYXR1cmUgJWRcbiIsCi0JCQlod19j ZmctPmN0bCwgY3R4LT5pZHgsIGZlYXR1cmUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlp ZiAoIWRzcHBfYnVmW2ZlYXR1cmVdW2N0eC0+aWR4XSkgewotCQlEUk1fRVJST1IoImludmFsaWQg ZG1hX2J1ZlxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi1z dGF0aWMgaW50IHJlZ19kbWFfYmxrX3NlbGVjdChlbnVtIGRwdV9yZWdfZG1hX2ZlYXR1cmVzIGZl YXR1cmUsCi0JCWVudW0gZHB1X3JlZ19kbWFfYmxrIGJsaywgc3RydWN0IGRwdV9yZWdfZG1hX2J1 ZmZlciAqZG1hX2J1ZikKLXsKLQlzdHJ1Y3QgZHB1X2h3X3JlZ19kbWFfb3BzICpkbWFfb3BzOwot CXN0cnVjdCBkcHVfcmVnX2RtYV9zZXR1cF9vcHNfY2ZnIGRtYV93cml0ZV9jZmc7Ci0JaW50IHJj ID0gMDsKLQotCWRtYV9vcHMgPSBkcHVfcmVnX2RtYV9nZXRfb3BzKCk7Ci0JZG1hX29wcy0+cmVz ZXRfcmVnX2RtYV9idWYoZG1hX2J1Zik7Ci0JbWVtc2V0KCZkbWFfd3JpdGVfY2ZnLCAwLCBzaXpl b2YoZG1hX3dyaXRlX2NmZykpOwotCWRtYV93cml0ZV9jZmcuYmxrID0gYmxrOwotCWRtYV93cml0 ZV9jZmcuZmVhdHVyZSA9IGZlYXR1cmU7Ci0JZG1hX3dyaXRlX2NmZy5vcHMgPSBIV19CTEtfU0VM RUNUOwotCWRtYV93cml0ZV9jZmcuZG1hX2J1ZiA9IGRtYV9idWY7Ci0KLQlyYyA9IGRtYV9vcHMt PnNldHVwX3BheWxvYWQoJmRtYV93cml0ZV9jZmcpOwotCWlmIChyYykKLQkJRFJNX0VSUk9SKCJ3 cml0ZSBkZWNvZGUgc2VsZWN0IGZhaWxlZCByZXQgJWRcbiIsIHJjKTsKLQotCXJldHVybiByYzsK LX0KLQotc3RhdGljIGludCByZWdfZG1hX3dyaXRlKGVudW0gZHB1X3JlZ19kbWFfc2V0dXBfb3Bz IG9wcywgdTMyIG9mZiwgdTMyIGRhdGFfc3osCi0JCQl1MzIgKmRhdGEsIHN0cnVjdCBkcHVfcmVn X2RtYV9idWZmZXIgKmRtYV9idWYsCi0JCQllbnVtIGRwdV9yZWdfZG1hX2ZlYXR1cmVzIGZlYXR1 cmUsCi0JCQllbnVtIGRwdV9yZWdfZG1hX2JsayBibGspCi17Ci0Jc3RydWN0IGRwdV9od19yZWdf ZG1hX29wcyAqZG1hX29wczsKLQlzdHJ1Y3QgZHB1X3JlZ19kbWFfc2V0dXBfb3BzX2NmZyBkbWFf d3JpdGVfY2ZnOwotCWludCByYzsKLQotCWRtYV9vcHMgPSBkcHVfcmVnX2RtYV9nZXRfb3BzKCk7 Ci0JbWVtc2V0KCZkbWFfd3JpdGVfY2ZnLCAwLCBzaXplb2YoZG1hX3dyaXRlX2NmZykpOwotCi0J ZG1hX3dyaXRlX2NmZy5vcHMgPSBvcHM7Ci0JZG1hX3dyaXRlX2NmZy5ibGtfb2Zmc2V0ID0gb2Zm OwotCWRtYV93cml0ZV9jZmcuZGF0YV9zaXplID0gZGF0YV9zejsKLQlkbWFfd3JpdGVfY2ZnLmRh dGEgPSBkYXRhOwotCWRtYV93cml0ZV9jZmcuZG1hX2J1ZiA9IGRtYV9idWY7Ci0JZG1hX3dyaXRl X2NmZy5mZWF0dXJlID0gZmVhdHVyZTsKLQlkbWFfd3JpdGVfY2ZnLmJsayA9IGJsazsKLQlyYyA9 IGRtYV9vcHMtPnNldHVwX3BheWxvYWQoJmRtYV93cml0ZV9jZmcpOwotCWlmIChyYykKLQkJRFJN X0VSUk9SKCJ3cml0ZSBzaW5nbGUgcmVnIGZhaWxlZCByZXQgJWRcbiIsIHJjKTsKLQotCXJldHVy biByYzsKLX0KLQotc3RhdGljIGludCByZWdfZG1hX2tpY2tfb2ZmKGVudW0gZHB1X3JlZ19kbWFf b3Agb3AsIGVudW0gZHB1X3JlZ19kbWFfcXVldWUgcSwKLQkJZW51bSBkcHVfcmVnX2RtYV90cmln Z2VyX21vZGUgbW9kZSwKLQkJc3RydWN0IGRwdV9yZWdfZG1hX2J1ZmZlciAqZG1hX2J1Ziwgc3Ry dWN0IGRwdV9od19jdGwgKmN0bCkKLXsKLQlzdHJ1Y3QgZHB1X3JlZ19kbWFfa2lja29mZl9jZmcg a2lja19vZmY7Ci0Jc3RydWN0IGRwdV9od19yZWdfZG1hX29wcyAqZG1hX29wczsKLQlpbnQgcmM7 Ci0KLQlkbWFfb3BzID0gZHB1X3JlZ19kbWFfZ2V0X29wcygpOwotCW1lbXNldCgma2lja19vZmYs IDAsIHNpemVvZihraWNrX29mZikpOwotCWtpY2tfb2ZmLmN0bCA9IGN0bDsKLQlraWNrX29mZi5k bWFfYnVmID0gZG1hX2J1ZjsKLQlraWNrX29mZi5vcCA9IG9wOwotCWtpY2tfb2ZmLnF1ZXVlX3Nl bGVjdCA9IHE7Ci0Ja2lja19vZmYudHJpZ2dlcl9tb2RlID0gbW9kZTsKLQlyYyA9IGRtYV9vcHMt PmtpY2tfb2ZmKCZraWNrX29mZik7Ci0JaWYgKHJjKQotCQlEUk1fRVJST1IoImZhaWxlZCB0byBr aWNrIG9mZiByZXQgJWRcbiIsIHJjKTsKLQotCXJldHVybiByYzsKLX0KLQotaW50IHJlZ19kbWF2 MV9pbml0X2RzcHBfb3BfdjQoaW50IGZlYXR1cmUsIGVudW0gZHB1X2RzcHAgaWR4KQotewotCWlu dCByYyA9IC1FTk9UU1VQUDsKLQlzdHJ1Y3QgZHB1X2h3X3JlZ19kbWFfb3BzICpkbWFfb3BzOwot CWJvb2wgaXNfc3VwcG9ydGVkID0gZmFsc2U7Ci0JdTMyIGJsazsKLQotCWlmIChmZWF0dXJlID49 IERQVV9EU1BQX01BWCB8fCBpZHggPj0gRFNQUF9NQVgpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlk IGZlYXR1cmUgJXggbWF4ICV4IGRzcHAgaWR4ICV4IG1heCAleGRcbiIsCi0JCQlmZWF0dXJlLCBE UFVfRFNQUF9NQVgsIGlkeCwgRFNQUF9NQVgpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JaWYgKGZl YXR1cmVfbWFwW2ZlYXR1cmVdID49IFJFR19ETUFfRkVBVFVSRVNfTUFYKSB7Ci0JCURSTV9FUlJP UigiaW52YWxpZCBmZWF0dXJlIG1hcCAlZCBmb3IgZmVhdHVyZSAlZFxuIiwKLQkJCWZlYXR1cmVf bWFwW2ZlYXR1cmVdLCBmZWF0dXJlKTsKLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQl9Ci0KLQlkbWFf b3BzID0gZHB1X3JlZ19kbWFfZ2V0X29wcygpOwotCWlmIChJU19FUlJfT1JfTlVMTChkbWFfb3Bz KSkKLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQotCWJsayA9IChmZWF0dXJlX21hcFtmZWF0dXJlXSA9 PSBJR0MpID8gRFNQUF9JR0MgOiBkc3BwX21hcHBpbmdbaWR4XTsKLQlyYyA9IGRtYV9vcHMtPmNo ZWNrX3N1cHBvcnQoZmVhdHVyZV9tYXBbZmVhdHVyZV0sIGJsaywgJmlzX3N1cHBvcnRlZCk7Ci0J aWYgKCFyYykKLQkJcmMgPSAoaXNfc3VwcG9ydGVkKSA/IDAgOiAtRU5PVFNVUFA7Ci0KLQlpZiAo IXJjKQotCQlyYyA9IHJlZ19kbWFfYnVmX2luaXQoJmRzcHBfYnVmW2ZlYXR1cmVfbWFwW2ZlYXR1 cmVdXVtpZHhdLAotCQkJCWZlYXR1cmVfcmVnX2RtYV9zeltmZWF0dXJlXSk7Ci0KLQlyZXR1cm4g cmM7Ci19Ci0KLWludCByZWdfZG1hdjFfaW5pdF9zc3BwX29wX3Y0KGludCBmZWF0dXJlLCBlbnVt IGRwdV9zc3BwIGlkeCkKLXsKLQlyZXR1cm4gLUVOT1RTVVBQOwotfQotCi12b2lkIHJlZ19kbWF2 MV9zZXR1cF9kc3BwX3ZsdXR2MTgoc3RydWN0IGRwdV9od19kc3BwICpjdHgsIHZvaWQgKmNmZykK LXsKLQlzdHJ1Y3QgZHJtX21zbV9wYV92bHV0ICpwYXlsb2FkID0gTlVMTDsKLQlzdHJ1Y3QgZHB1 X2h3X2NwX2NmZyAqaHdfY2ZnID0gY2ZnOwotCXUzMiBvcF9tb2RlOwotCXUzMiAqZGF0YSA9IE5V TEw7Ci0JaW50IGksIGosIHJjID0gMDsKLQotCXJjID0gcmVnX2RtYV9kc3BwX2NoZWNrKGN0eCwg Y2ZnLCBWTFVUKTsKLQlpZiAocmMpCi0JCXJldHVybjsKLQotCW9wX21vZGUgPSBEUFVfUkVHX1JF QUQoJmN0eC0+aHcsIFBBX09QX01PREVfT0ZGKTsKLQlpZiAoIWh3X2NmZy0+cGF5bG9hZCkgewot CQlEUk1fREVCVUdfRFJJVkVSKCJEaXNhYmxlIHZsdXQgZmVhdHVyZVxuIik7Ci0JCURQVV9SRUdf V1JJVEUoJmN0eC0+aHcsIFBBX0xVVFZfT1BNT0RFX09GRiwgMCk7Ci0JCWlmIChvcF9tb2RlICYg KH4oQklUKDIwKSkpKQotCQkJb3BfbW9kZSA9IDA7Ci0JCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcs IFBBX09QX01PREVfT0ZGLCBvcF9tb2RlKTsKLQkJcmV0dXJuOwotCX0KLQotCXJjID0gcmVnX2Rt YV9ibGtfc2VsZWN0KFZMVVQsIGRzcHBfbWFwcGluZ1tjdHgtPmlkeF0sCi0JCQlkc3BwX2J1ZltW TFVUXVtjdHgtPmlkeF0pOwotCWlmIChyYykgewotCQlEUk1fRVJST1IoIndyaXRlIGRlY29kZSBz ZWxlY3QgZmFpbGVkIHJldCAlZFxuIiwgcmMpOwotCQlyZXR1cm47Ci0JfQotCi0JZGF0YSA9IGt6 YWxsb2MoVkxVVF9MRU4sIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0J cGF5bG9hZCA9IGh3X2NmZy0+cGF5bG9hZDsKLQlEUk1fREVCVUdfRFJJVkVSKCJFbmFibGUgdmx1 dCBmZWF0dXJlIGZsYWdzICVsbHhcbiIsIHBheWxvYWQtPmZsYWdzKTsKLQlmb3IgKGkgPSAwLCBq ID0gMDsgaSA8IEFSUkFZX1NJWkUocGF5bG9hZC0+dmFsKTsgaSArPSAyLCBqKyspCi0JCWRhdGFb al0gPSAocGF5bG9hZC0+dmFsW2ldICYgUkVHX01BU0soMTApKSB8Ci0JCQkoKHBheWxvYWQtPnZh bFtpICsgMV0gJiBSRUdfTUFTSygxMCkpIDw8IDE2KTsKLQotCXJjID0gcmVnX2RtYV93cml0ZShS RUdfQkxLX1dSSVRFX1NJTkdMRSwgY3R4LT5jYXAtPnNibGstPnZsdXQuYmFzZSwKLQkJCVZMVVRf TEVOLCBkYXRhLAotCQkJZHNwcF9idWZbVkxVVF1bY3R4LT5pZHhdLCBWTFVULAotCQkJZHNwcF9t YXBwaW5nW2N0eC0+aWR4XSk7Ci0JaWYgKHJjKSB7Ci0JCURSTV9FUlJPUigid3JpdGUgc2luZ2xl IHJlZyBmYWlsZWQgcmV0ICVkXG4iLCByYyk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlyYyA9IHJl Z19kbWFfa2lja19vZmYoUkVHX0RNQV9XUklURSwgRE1BX0NUTF9RVUVVRTAsIFdSSVRFX0lNTUVE SUFURSwKLQkJCWRzcHBfYnVmW1ZMVVRdW2N0eC0+aWR4XSwgaHdfY2ZnLT5jdGwpOwotCWlmIChy YykgewotCQlEUk1fRVJST1IoImZhaWxlZCB0byBraWNrIG9mZiByZXQgJWRcbiIsIHJjKTsKLQkJ Z290byBleGl0OwotCX0KLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBQQV9MVVRWX09QTU9ERV9P RkYsIEJJVCgwKSk7Ci0JRFBVX1JFR19XUklURSgmY3R4LT5odywgUEFfT1BfTU9ERV9PRkYsIG9w X21vZGUgfCBCSVQoMjApKTsKLQotZXhpdDoKLQlrZnJlZShkYXRhKTsKLX0KLQotc3RhdGljIGlu dCBkcHVfZ2FtdXRfZ2V0X21vZGVfaW5mbyhzdHJ1Y3QgZHJtX21zbV8zZF9nYW11dCAqcGF5bG9h ZCwKLQkJdTMyICp0YmxfbGVuLCB1MzIgKnRibF9vZmYsIHUzMiAqb3Bjb2RlLCB1MzIgKnNjYWxl X29mZikKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKHBheWxvYWQtPm1vZGUgPiBHQU1VVF8zRF9N T0RFXzEzKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBtb2RlICVkIiwgcGF5bG9hZC0+bW9kZSk7 Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXN3aXRjaCAocGF5bG9hZC0+bW9kZSkgewotCWNh c2UgR0FNVVRfM0RfTU9ERV8xNzoKLQkJKnRibF9sZW4gPSBHQU1VVF8zRF9NT0RFMTdfVEJMX1Na ICogc2l6ZW9mKHUzMikgKiAyOwotCQkqdGJsX29mZiA9IDA7Ci0JCSpzY2FsZV9vZmYgPSBHQU1V VF9TQ0FMRUFfT0ZGU0VUX09GRjsKLQkJKm9wY29kZSA9IGdhbXV0X21vZGVfMTcgPDwgMjsKLQkJ YnJlYWs7Ci0JY2FzZSBHQU1VVF8zRF9NT0RFXzU6Ci0JCSp0YmxfbGVuID0gR0FNVVRfM0RfTU9E RTVfVEJMX1NaICogc2l6ZW9mKHUzMikgKiAyOwotCQkqdGJsX29mZiA9IEdBTVVUX01PREVfNV9P RkY7Ci0JCSpzY2FsZV9vZmYgPSBHQU1VVF9TQ0FMRUJfT0ZGU0VUX09GRjsKLQkJKm9wY29kZSA9 IGdhbXV0X21vZGVfNSA8PCAyOwotCQlicmVhazsKLQljYXNlIEdBTVVUXzNEX01PREVfMTM6Ci0J CSp0YmxfbGVuID0gR0FNVVRfM0RfTU9ERTEzX1RCTF9TWiAqIHNpemVvZih1MzIpICogMjsKLQkJ Km9wY29kZSA9ICgqb3Bjb2RlICYgKEJJVCg0KSAtIDEpKSA+PiAyOwotCQlpZiAoKm9wY29kZSA9 PSBnYW11dF9tb2RlXzEzYSkKLQkJCSpvcGNvZGUgPSBnYW11dF9tb2RlXzEzYjsKLQkJZWxzZQot CQkJKm9wY29kZSA9IGdhbXV0X21vZGVfMTNhOwotCQkqdGJsX29mZiA9ICgqb3Bjb2RlID09IGdh bXV0X21vZGVfMTNhKSA/IDAgOgotCQkJR0FNVVRfTU9ERV8xM0JfT0ZGOwotCQkqc2NhbGVfb2Zm ID0gKCpvcGNvZGUgPT0gZ2FtdXRfbW9kZV8xM2EpID8KLQkJCUdBTVVUX1NDQUxFQV9PRkZTRVRf T0ZGIDogR0FNVVRfU0NBTEVCX09GRlNFVF9PRkY7Ci0JCSpvcGNvZGUgPDw9IDI7Ci0JCWJyZWFr OwotCWRlZmF1bHQ6Ci0JCXJjID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfQotCWlmIChwYXlsb2Fk LT5mbGFncyAmIEdBTVVUXzNEX01BUF9FTikKLQkJKm9wY29kZSB8PSBHQU1VVF9NQVBfRU47Ci0J Km9wY29kZSB8PSBHQU1VVF9FTjsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQgZHNw cF8zZF9nYW11dHY0X29mZihzdHJ1Y3QgZHB1X2h3X2RzcHAgKmN0eCwgdm9pZCAqY2ZnKQotewot CXN0cnVjdCBkcHVfcmVnX2RtYV9raWNrb2ZmX2NmZyBraWNrX29mZjsKLQlzdHJ1Y3QgZHB1X2h3 X2NwX2NmZyAqaHdfY2ZnID0gY2ZnOwotCXUzMiBvcF9tb2RlID0gMDsKLQlzdHJ1Y3QgZHB1X2h3 X3JlZ19kbWFfb3BzICpkbWFfb3BzOwotCXN0cnVjdCBkcHVfcmVnX2RtYV9zZXR1cF9vcHNfY2Zn IGRtYV93cml0ZV9jZmc7Ci0JaW50IHJjOwotCi0JZG1hX29wcyA9IGRwdV9yZWdfZG1hX2dldF9v cHMoKTsKLQlkbWFfb3BzLT5yZXNldF9yZWdfZG1hX2J1Zihkc3BwX2J1ZltHQU1VVF1bY3R4LT5p ZHhdKTsKLQotCVJFR19ETUFfSU5JVF9PUFMoZG1hX3dyaXRlX2NmZywgZHNwcF9tYXBwaW5nW2N0 eC0+aWR4XSwgR0FNVVQsCi0JCQlkc3BwX2J1ZltHQU1VVF1bY3R4LT5pZHhdKTsKLQotCVJFR19E TUFfU0VUVVBfT1BTKGRtYV93cml0ZV9jZmcsIDAsIE5VTEwsIDAsIEhXX0JMS19TRUxFQ1QsIDAs IDApOwotCXJjID0gZG1hX29wcy0+c2V0dXBfcGF5bG9hZCgmZG1hX3dyaXRlX2NmZyk7Ci0JaWYg KHJjKSB7Ci0JCURSTV9FUlJPUigid3JpdGUgZGVjb2RlIHNlbGVjdCBmYWlsZWQgcmV0ICVkXG4i LCByYyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlSRUdfRE1BX1NFVFVQX09QUyhkbWFfd3JpdGVfY2Zn LAotCQljdHgtPmNhcC0+c2Jsay0+Z2FtdXQuYmFzZSwKLQkJJm9wX21vZGUsIHNpemVvZihvcF9t b2RlKSwgUkVHX1NJTkdMRV9XUklURSwgMCwgMCk7Ci0JcmMgPSBkbWFfb3BzLT5zZXR1cF9wYXls b2FkKCZkbWFfd3JpdGVfY2ZnKTsKLQlpZiAocmMpIHsKLQkJRFJNX0VSUk9SKCJvcG1vZGUgd3Jp dGUgc2luZ2xlIHJlZyBmYWlsZWQgcmV0ICVkXG4iLCByYyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlS RUdfRE1BX1NFVFVQX0tJQ0tPRkYoa2lja19vZmYsIGh3X2NmZy0+Y3RsLCBkc3BwX2J1ZltHQU1V VF1bY3R4LT5pZHhdLAotCQkJUkVHX0RNQV9XUklURSwgRE1BX0NUTF9RVUVVRTAsIFdSSVRFX0lN TUVESUFURSk7Ci0JcmMgPSBkbWFfb3BzLT5raWNrX29mZigma2lja19vZmYpOwotCWlmIChyYykK LQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8ga2ljayBvZmYgcmV0ICVkXG4iLCByYyk7Ci19Ci0KLXZv aWQgcmVnX2RtYXYxX3NldHVwX2RzcHBfM2RfZ2FtdXR2NChzdHJ1Y3QgZHB1X2h3X2RzcHAgKmN0 eCwgdm9pZCAqY2ZnKQotewotCXN0cnVjdCBkcm1fbXNtXzNkX2dhbXV0ICpwYXlsb2FkOwotCXN0 cnVjdCBkcHVfcmVnX2RtYV9raWNrb2ZmX2NmZyBraWNrX29mZjsKLQlzdHJ1Y3QgZHB1X2h3X2Nw X2NmZyAqaHdfY2ZnID0gY2ZnOwotCXUzMiBvcF9tb2RlLCByZWcsIHRibF9sZW4sIHRibF9vZmYs IHNjYWxlX29mZiwgaTsKLQl1MzIgc2NhbGVfdGJsX2xlbiwgc2NhbGVfdGJsX29mZjsKLQl1MzIg KnNjYWxlX2RhdGE7Ci0Jc3RydWN0IGRwdV9yZWdfZG1hX3NldHVwX29wc19jZmcgZG1hX3dyaXRl X2NmZzsKLQlzdHJ1Y3QgZHB1X2h3X3JlZ19kbWFfb3BzICpkbWFfb3BzOwotCWludCByYzsKLQot CXJjID0gcmVnX2RtYV9kc3BwX2NoZWNrKGN0eCwgY2ZnLCBHQU1VVCk7Ci0JaWYgKHJjKQotCQly ZXR1cm47Ci0KLQlvcF9tb2RlID0gRFBVX1JFR19SRUFEKCZjdHgtPmh3LCBjdHgtPmNhcC0+c2Js ay0+Z2FtdXQuYmFzZSk7Ci0JaWYgKCFod19jZmctPnBheWxvYWQpIHsKLQkJRFJNX0RFQlVHX0RS SVZFUigiZGlzYWJsZSBnYW11dCBmZWF0dXJlXG4iKTsKLQkJZHNwcF8zZF9nYW11dHY0X29mZihj dHgsIGNmZyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoaHdfY2ZnLT5sZW4gIT0gc2l6ZW9mKHN0 cnVjdCBkcm1fbXNtXzNkX2dhbXV0KSkgewotCQlEUk1fRVJST1IoImludmFsaWQgc2l6ZSBvZiBw YXlsb2FkIGxlbiAlZCBleHAgJXpkXG4iLAotCQkJCWh3X2NmZy0+bGVuLCBzaXplb2Yoc3RydWN0 IGRybV9tc21fM2RfZ2FtdXQpKTsKLQkJcmV0dXJuOwotCX0KLQlwYXlsb2FkID0gaHdfY2ZnLT5w YXlsb2FkOwotCXJjID0gZHB1X2dhbXV0X2dldF9tb2RlX2luZm8ocGF5bG9hZCwgJnRibF9sZW4s ICZ0Ymxfb2ZmLCAmb3BfbW9kZSwKLQkJCSZzY2FsZV9vZmYpOwotCWlmIChyYykgewotCQlEUk1f RVJST1IoImludmFsaWQgbW9kZSBpbmZvIHJjICVkXG4iLCByYyk7Ci0JCXJldHVybjsKLQl9Ci0K LQlkbWFfb3BzID0gZHB1X3JlZ19kbWFfZ2V0X29wcygpOwotCWRtYV9vcHMtPnJlc2V0X3JlZ19k bWFfYnVmKGRzcHBfYnVmW0dBTVVUXVtjdHgtPmlkeF0pOwotCi0JUkVHX0RNQV9JTklUX09QUyhk bWFfd3JpdGVfY2ZnLCBkc3BwX21hcHBpbmdbY3R4LT5pZHhdLCBHQU1VVCwKLQkJCWRzcHBfYnVm W0dBTVVUXVtjdHgtPmlkeF0pOwotCi0JUkVHX0RNQV9TRVRVUF9PUFMoZG1hX3dyaXRlX2NmZywg MCwgTlVMTCwgMCwgSFdfQkxLX1NFTEVDVCwgMCwgMCk7Ci0JcmMgPSBkbWFfb3BzLT5zZXR1cF9w YXlsb2FkKCZkbWFfd3JpdGVfY2ZnKTsKLQlpZiAocmMpIHsKLQkJRFJNX0VSUk9SKCJ3cml0ZSBk ZWNvZGUgc2VsZWN0IGZhaWxlZCByZXQgJWRcbiIsIHJjKTsKLQkJcmV0dXJuOwotCX0KLQlmb3Ig KGkgPSAwOyBpIDwgR0FNVVRfM0RfVEJMX05VTTsgaSsrKSB7Ci0JCXJlZyA9IEdBTVVUX1RBQkxF MF9TRUwgPDwgaTsKLQkJcmVnIHw9ICgodGJsX29mZikgJiAoQklUKDExKSAtIDEpKTsKLQkJUkVH X0RNQV9TRVRVUF9PUFMoZG1hX3dyaXRlX2NmZywKLQkJCWN0eC0+Y2FwLT5zYmxrLT5nYW11dC5i YXNlICsgR0FNVVRfVEFCTEVfU0VMX09GRiwKLQkJCSZyZWcsIHNpemVvZihyZWcpLCBSRUdfU0lO R0xFX1dSSVRFLCAwLCAwKTsKLQkJcmMgPSBkbWFfb3BzLT5zZXR1cF9wYXlsb2FkKCZkbWFfd3Jp dGVfY2ZnKTsKLQkJaWYgKHJjKSB7Ci0JCQlEUk1fRVJST1IoIndyaXRlIHRibCBzZWwgcmVnIGZh aWxlZCByZXQgJWRcbiIsIHJjKTsKLQkJCXJldHVybjsKLQkJfQotCQlSRUdfRE1BX1NFVFVQX09Q UyhkbWFfd3JpdGVfY2ZnLAotCQkgICAgY3R4LT5jYXAtPnNibGstPmdhbXV0LmJhc2UgKyBHQU1V VF9MT1dFUl9DT0xPUl9PRkYsCi0JCSAgICAmcGF5bG9hZC0+Y29sW2ldWzBdLmMyX2MxLCB0Ymxf bGVuLAotCQkgICAgUkVHX0JMS19XUklURV9NVUxUSVBMRSwgMiwgMCk7Ci0JCXJjID0gZG1hX29w cy0+c2V0dXBfcGF5bG9hZCgmZG1hX3dyaXRlX2NmZyk7Ci0JCWlmIChyYykgewotCQkJRFJNX0VS Uk9SKCJ3cml0ZSBjb2xvciByZWcgZmFpbGVkIHJldCAlZFxuIiwgcmMpOwotCQkJcmV0dXJuOwot CQl9Ci0JfQotCi0JaWYgKG9wX21vZGUgJiBHQU1VVF9NQVBfRU4pIHsKLQkJaWYgKHNjYWxlX29m ZiA9PSBHQU1VVF9TQ0FMRUFfT0ZGU0VUX09GRikKLQkJCXNjYWxlX3RibF9sZW4gPSBHQU1VVF9T Q0FMRV9PRkZfTEVOOwotCQllbHNlCi0JCQlzY2FsZV90YmxfbGVuID0gR0FNVVRfU0NBTEVfT0ZG X0xFTl8xMjsKLQotCQlmb3IgKGkgPSAwOyBpIDwgR0FNVVRfM0RfU0NBTEVfT0ZGX1RCTF9OVU07 IGkrKykgewotCQkJc2NhbGVfdGJsX29mZiA9IGN0eC0+Y2FwLT5zYmxrLT5nYW11dC5iYXNlICsg c2NhbGVfb2ZmICsKLQkJCQkJKGkgKiBzY2FsZV90YmxfbGVuKTsKLQkJCXNjYWxlX2RhdGEgPSAm cGF5bG9hZC0+c2NhbGVfb2ZmW2ldWzBdOwotCQkJUkVHX0RNQV9TRVRVUF9PUFMoZG1hX3dyaXRl X2NmZywgc2NhbGVfdGJsX29mZiwKLQkJCQkJc2NhbGVfZGF0YSwgc2NhbGVfdGJsX2xlbiwKLQkJ CQkJUkVHX0JMS19XUklURV9TSU5HTEUsIDAsIDApOwotCQkJcmMgPSBkbWFfb3BzLT5zZXR1cF9w YXlsb2FkKCZkbWFfd3JpdGVfY2ZnKTsKLQkJCWlmIChyYykgewotCQkJCURSTV9FUlJPUigid3Jp dGUgc2NhbGUvb2ZmIHJlZyBmYWlsZWQgcmV0ICVkXG4iLAotCQkJCQkJcmMpOwotCQkJCXJldHVy bjsKLQkJCX0KLQkJfQotCX0KLQotCVJFR19ETUFfU0VUVVBfT1BTKGRtYV93cml0ZV9jZmcsCi0J CWN0eC0+Y2FwLT5zYmxrLT5nYW11dC5iYXNlLAotCQkmb3BfbW9kZSwgc2l6ZW9mKG9wX21vZGUp LCBSRUdfU0lOR0xFX1dSSVRFLCAwLCAwKTsKLQlyYyA9IGRtYV9vcHMtPnNldHVwX3BheWxvYWQo JmRtYV93cml0ZV9jZmcpOwotCWlmIChyYykgewotCQlEUk1fRVJST1IoIm9wbW9kZSB3cml0ZSBz aW5nbGUgcmVnIGZhaWxlZCByZXQgJWRcbiIsIHJjKTsKLQkJcmV0dXJuOwotCX0KLQotCVJFR19E TUFfU0VUVVBfS0lDS09GRihraWNrX29mZiwgaHdfY2ZnLT5jdGwsIGRzcHBfYnVmW0dBTVVUXVtj dHgtPmlkeF0sCi0JCQlSRUdfRE1BX1dSSVRFLCBETUFfQ1RMX1FVRVVFMCwgV1JJVEVfSU1NRURJ QVRFKTsKLQlyYyA9IGRtYV9vcHMtPmtpY2tfb2ZmKCZraWNrX29mZik7Ci0JaWYgKHJjKQotCQlE Uk1fRVJST1IoImZhaWxlZCB0byBraWNrIG9mZiByZXQgJWRcbiIsIHJjKTsKLX0KLQotdm9pZCBy ZWdfZG1hdjFfc2V0dXBfZHNwcF9nY3YxOChzdHJ1Y3QgZHB1X2h3X2RzcHAgKmN0eCwgdm9pZCAq Y2ZnKQotewotCXN0cnVjdCBkcm1fbXNtX3BnY19sdXQgKmx1dF9jZmc7Ci0Jc3RydWN0IGRwdV9o d19yZWdfZG1hX29wcyAqZG1hX29wczsKLQlzdHJ1Y3QgZHB1X3JlZ19kbWFfa2lja29mZl9jZmcg a2lja19vZmY7Ci0Jc3RydWN0IGRwdV9od19jcF9jZmcgKmh3X2NmZyA9IGNmZzsKLQlzdHJ1Y3Qg ZHB1X3JlZ19kbWFfc2V0dXBfb3BzX2NmZyBkbWFfd3JpdGVfY2ZnOwotCWludCByYywgaSA9IDA7 Ci0JdTMyIHJlZzsKLQotCXJjID0gcmVnX2RtYV9kc3BwX2NoZWNrKGN0eCwgY2ZnLCBHQyk7Ci0J aWYgKHJjKQotCQlyZXR1cm47Ci0KLQlpZiAoIWh3X2NmZy0+cGF5bG9hZCkgewotCQlEUk1fREVC VUdfRFJJVkVSKCJkaXNhYmxlIHBnYyBmZWF0dXJlXG4iKTsKLQkJRFBVX1JFR19XUklURSgmY3R4 LT5odywgY3R4LT5jYXAtPnNibGstPmdjLmJhc2UsIDApOwotCQlyZXR1cm47Ci0JfQotCi0JaWYg KGh3X2NmZy0+bGVuICE9IHNpemVvZihzdHJ1Y3QgZHJtX21zbV9wZ2NfbHV0KSkgewotCQlEUk1f RVJST1IoImludmFsaWQgc2l6ZSBvZiBwYXlsb2FkIGxlbiAlZCBleHAgJXpkXG4iLAotCQkJCWh3 X2NmZy0+bGVuLCBzaXplb2Yoc3RydWN0IGRybV9tc21fcGdjX2x1dCkpOwotCQlyZXR1cm47Ci0J fQotCWx1dF9jZmcgPSBod19jZmctPnBheWxvYWQ7Ci0KLQlkbWFfb3BzID0gZHB1X3JlZ19kbWFf Z2V0X29wcygpOwotCWRtYV9vcHMtPnJlc2V0X3JlZ19kbWFfYnVmKGRzcHBfYnVmW0dDXVtjdHgt PmlkeF0pOwotCi0JUkVHX0RNQV9JTklUX09QUyhkbWFfd3JpdGVfY2ZnLCBkc3BwX21hcHBpbmdb Y3R4LT5pZHhdLCBHQywKLQkJCWRzcHBfYnVmW0dDXVtjdHgtPmlkeF0pOwotCi0JUkVHX0RNQV9T RVRVUF9PUFMoZG1hX3dyaXRlX2NmZywgMCwgTlVMTCwgMCwgSFdfQkxLX1NFTEVDVCwgMCwgMCk7 Ci0JcmMgPSBkbWFfb3BzLT5zZXR1cF9wYXlsb2FkKCZkbWFfd3JpdGVfY2ZnKTsKLQlpZiAocmMp IHsKLQkJRFJNX0VSUk9SKCJ3cml0ZSBkZWNvZGUgc2VsZWN0IGZhaWxlZCByZXQgJWRcbiIsIHJj KTsKLQkJcmV0dXJuOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBHQ19UQkxfTlVNOyBpKyspIHsK LQkJcmVnID0gMDsKLQkJUkVHX0RNQV9TRVRVUF9PUFMoZG1hX3dyaXRlX2NmZywKLQkJCWN0eC0+ Y2FwLT5zYmxrLT5nYy5iYXNlICsgR0NfQzBfSU5ERVhfT0ZGICsKLQkJCShpICogc2l6ZW9mKHUz MikgKiAyKSwKLQkJCSZyZWcsIHNpemVvZihyZWcpLCBSRUdfU0lOR0xFX1dSSVRFLCAwLCAwKTsK LQkJcmMgPSBkbWFfb3BzLT5zZXR1cF9wYXlsb2FkKCZkbWFfd3JpdGVfY2ZnKTsKLQkJaWYgKHJj KSB7Ci0JCQlEUk1fRVJST1IoImluZGV4IGluaXQgZmFpbGVkIHJldCAlZFxuIiwgcmMpOwotCQkJ cmV0dXJuOwotCQl9Ci0KLQkJUkVHX0RNQV9TRVRVUF9PUFMoZG1hX3dyaXRlX2NmZywKLQkJCWN0 eC0+Y2FwLT5zYmxrLT5nYy5iYXNlICsgR0NfQzBfT0ZGICsKLQkJCShpICogc2l6ZW9mKHUzMikg KiAyKSwKLQkJCWx1dF9jZmctPmMwICsgKEFSUkFZX1NJWkUobHV0X2NmZy0+YzApICogaSksCi0J CQlQR0NfVEJMX0xFTiAqIHNpemVvZih1MzIpLAotCQkJUkVHX0JMS19XUklURV9JTkMsIDAsIDAp OwotCQlyYyA9IGRtYV9vcHMtPnNldHVwX3BheWxvYWQoJmRtYV93cml0ZV9jZmcpOwotCQlpZiAo cmMpIHsKLQkJCURSTV9FUlJPUigibHV0IHdyaXRlIGZhaWxlZCByZXQgJWRcbiIsIHJjKTsKLQkJ CXJldHVybjsKLQkJfQotCX0KLQotCXJlZyA9IEJJVCgwKTsKLQlSRUdfRE1BX1NFVFVQX09QUyhk bWFfd3JpdGVfY2ZnLAotCQljdHgtPmNhcC0+c2Jsay0+Z2MuYmFzZSArIEdDX0xVVF9TV0FQX09G RiwKLQkJJnJlZywgc2l6ZW9mKHJlZyksIFJFR19TSU5HTEVfV1JJVEUsIDAsIDApOwotCXJjID0g ZG1hX29wcy0+c2V0dXBfcGF5bG9hZCgmZG1hX3dyaXRlX2NmZyk7Ci0JaWYgKHJjKSB7Ci0JCURS TV9FUlJPUigic2V0dGluZyBzd2FwIG9mZnNldCBmYWlsZWQgcmV0ICVkXG4iLCByYyk7Ci0JCXJl dHVybjsKLQl9Ci0KLQlyZWcgPSBHQ19FTiB8ICgobHV0X2NmZy0+ZmxhZ3MgJiBQR0NfOEJfUk9V TkQpID8gR0NfOEJfUk9VTkRfRU4gOiAwKTsKLQlSRUdfRE1BX1NFVFVQX09QUyhkbWFfd3JpdGVf Y2ZnLAotCQljdHgtPmNhcC0+c2Jsay0+Z2MuYmFzZSwKLQkJJnJlZywgc2l6ZW9mKHJlZyksIFJF R19TSU5HTEVfV1JJVEUsIDAsIDApOwotCXJjID0gZG1hX29wcy0+c2V0dXBfcGF5bG9hZCgmZG1h X3dyaXRlX2NmZyk7Ci0JaWYgKHJjKSB7Ci0JCURSTV9FUlJPUigiZW5hYmxpbmcgZ2FtbWEgY29y cmVjdGlvbiBmYWlsZWQgcmV0ICVkXG4iLCByYyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlSRUdfRE1B X1NFVFVQX0tJQ0tPRkYoa2lja19vZmYsIGh3X2NmZy0+Y3RsLCBkc3BwX2J1ZltHQ11bY3R4LT5p ZHhdLAotCQkJUkVHX0RNQV9XUklURSwgRE1BX0NUTF9RVUVVRTAsIFdSSVRFX0lNTUVESUFURSk7 Ci0JcmMgPSBkbWFfb3BzLT5raWNrX29mZigma2lja19vZmYpOwotCWlmIChyYykgewotCQlEUk1f RVJST1IoImZhaWxlZCB0byBraWNrIG9mZiByZXQgJWRcbiIsIHJjKTsKLQkJcmV0dXJuOwotCX0K LX0KLQotc3RhdGljIHZvaWQgX2RzcHBfaWdjdjMxX29mZihzdHJ1Y3QgZHB1X2h3X2RzcHAgKmN0 eCwgdm9pZCAqY2ZnKQotewotCXN0cnVjdCBkcHVfcmVnX2RtYV9raWNrb2ZmX2NmZyBraWNrX29m ZjsKLQlzdHJ1Y3QgZHB1X2h3X2NwX2NmZyAqaHdfY2ZnID0gY2ZnOwotCXN0cnVjdCBkcHVfaHdf cmVnX2RtYV9vcHMgKmRtYV9vcHM7Ci0Jc3RydWN0IGRwdV9yZWdfZG1hX3NldHVwX29wc19jZmcg ZG1hX3dyaXRlX2NmZzsKLQlpbnQgcmM7Ci0JdTMyIHJlZzsKLQotCWRtYV9vcHMgPSBkcHVfcmVn X2RtYV9nZXRfb3BzKCk7Ci0JZG1hX29wcy0+cmVzZXRfcmVnX2RtYV9idWYoZHNwcF9idWZbSUdD XVtjdHgtPmlkeF0pOwotCi0JUkVHX0RNQV9JTklUX09QUyhkbWFfd3JpdGVfY2ZnLCBkc3BwX21h cHBpbmdbY3R4LT5pZHhdLCBJR0MsCi0JCWRzcHBfYnVmW0lHQ11bY3R4LT5pZHhdKTsKLQotCVJF R19ETUFfU0VUVVBfT1BTKGRtYV93cml0ZV9jZmcsIDAsIE5VTEwsIDAsIEhXX0JMS19TRUxFQ1Qs IDAsIDApOwotCXJjID0gZG1hX29wcy0+c2V0dXBfcGF5bG9hZCgmZG1hX3dyaXRlX2NmZyk7Ci0J aWYgKHJjKSB7Ci0JCURSTV9FUlJPUigid3JpdGUgZGVjb2RlIHNlbGVjdCBmYWlsZWQgcmV0ICVk XG4iLCByYyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlyZWcgPSBJR0NfRElTOwotCVJFR19ETUFfU0VU VVBfT1BTKGRtYV93cml0ZV9jZmcsCi0JCWN0eC0+Y2FwLT5zYmxrLT5pZ2MuYmFzZSArIElHQ19P UE1PREVfT0ZGLAotCQkmcmVnLCBzaXplb2YocmVnKSwgUkVHX1NJTkdMRV9XUklURSwgMCwgMCk7 Ci0JcmMgPSBkbWFfb3BzLT5zZXR1cF9wYXlsb2FkKCZkbWFfd3JpdGVfY2ZnKTsKLQlpZiAocmMp IHsKLQkJRFJNX0VSUk9SKCJzZXR0aW5nIG9wY29kZSBmYWlsZWQgcmV0ICVkXG4iLCByYyk7Ci0J CXJldHVybjsKLQl9Ci0KLQlSRUdfRE1BX1NFVFVQX0tJQ0tPRkYoa2lja19vZmYsIGh3X2NmZy0+ Y3RsLCBkc3BwX2J1ZltJR0NdW2N0eC0+aWR4XSwKLQkJCVJFR19ETUFfV1JJVEUsIERNQV9DVExf UVVFVUUwLCBXUklURV9JTU1FRElBVEUpOwotCXJjID0gZG1hX29wcy0+a2lja19vZmYoJmtpY2tf b2ZmKTsKLQlpZiAocmMpCi0JCURSTV9FUlJPUigiZmFpbGVkIHRvIGtpY2sgb2ZmIHJldCAlZFxu IiwgcmMpOwotfQotCi12b2lkIHJlZ19kbWF2MV9zZXR1cF9kc3BwX2lnY3YzMShzdHJ1Y3QgZHB1 X2h3X2RzcHAgKmN0eCwgdm9pZCAqY2ZnKQotewotCXN0cnVjdCBkcm1fbXNtX2lnY19sdXQgKmx1 dF9jZmc7Ci0Jc3RydWN0IGRwdV9od19yZWdfZG1hX29wcyAqZG1hX29wczsKLQlzdHJ1Y3QgZHB1 X3JlZ19kbWFfa2lja29mZl9jZmcga2lja19vZmY7Ci0Jc3RydWN0IGRwdV9od19jcF9jZmcgKmh3 X2NmZyA9IGNmZzsKLQlzdHJ1Y3QgZHB1X3JlZ19kbWFfc2V0dXBfb3BzX2NmZyBkbWFfd3JpdGVf Y2ZnOwotCWludCByYywgaSA9IDAsIGogPSAwOwotCXUzMiAqYWRkciA9IE5VTEw7Ci0JdTMyIG9m ZnNldCA9IDA7Ci0JdTMyIHJlZzsKLQotCXJjID0gcmVnX2RtYV9kc3BwX2NoZWNrKGN0eCwgY2Zn LCBJR0MpOwotCWlmIChyYykKLQkJcmV0dXJuOwotCi0JaWYgKCFod19jZmctPnBheWxvYWQpIHsK LQkJRFJNX0RFQlVHX0RSSVZFUigiZGlzYWJsZSBpZ2MgZmVhdHVyZVxuIik7Ci0JCV9kc3BwX2ln Y3YzMV9vZmYoY3R4LCBjZmcpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGh3X2NmZy0+bGVuICE9 IHNpemVvZihzdHJ1Y3QgZHJtX21zbV9pZ2NfbHV0KSkgewotCQlEUk1fRVJST1IoImludmFsaWQg c2l6ZSBvZiBwYXlsb2FkIGxlbiAlZCBleHAgJXpkXG4iLAotCQkJCWh3X2NmZy0+bGVuLCBzaXpl b2Yoc3RydWN0IGRybV9tc21faWdjX2x1dCkpOwotCQlyZXR1cm47Ci0JfQotCi0JbHV0X2NmZyA9 IGh3X2NmZy0+cGF5bG9hZDsKLQotCWRtYV9vcHMgPSBkcHVfcmVnX2RtYV9nZXRfb3BzKCk7Ci0J ZG1hX29wcy0+cmVzZXRfcmVnX2RtYV9idWYoZHNwcF9idWZbSUdDXVtjdHgtPmlkeF0pOwotCi0J UkVHX0RNQV9JTklUX09QUyhkbWFfd3JpdGVfY2ZnLCBEU1BQX0lHQywgSUdDLCBkc3BwX2J1ZltJ R0NdW2N0eC0+aWR4XSk7Ci0KLQlSRUdfRE1BX1NFVFVQX09QUyhkbWFfd3JpdGVfY2ZnLCAwLCBO VUxMLCAwLCBIV19CTEtfU0VMRUNULCAwLCAwKTsKLQlyYyA9IGRtYV9vcHMtPnNldHVwX3BheWxv YWQoJmRtYV93cml0ZV9jZmcpOwotCWlmIChyYykgewotCQlEUk1fRVJST1IoIndyaXRlIGRlY29k ZSBzZWxlY3QgZmFpbGVkIHJldCAlZFxuIiwgcmMpOwotCQlyZXR1cm47Ci0JfQotCi0JZm9yIChp ID0gMDsgaSA8IElHQ19UQkxfTlVNOyBpKyspIHsKLQkJYWRkciA9IGx1dF9jZmctPmMwICsgKGkg KiBBUlJBWV9TSVpFKGx1dF9jZmctPmMwKSk7Ci0JCW9mZnNldCA9IElHQ19DMF9PRkYgKyAoaSAq IHNpemVvZih1MzIpKTsKLQotCQlmb3IgKGogPSAwOyBqIDwgSUdDX1RCTF9MRU47IGorKykgewot CQkJYWRkcltqXSAmPSBJR0NfREFUQV9NQVNLOwotCQkJYWRkcltqXSB8PSBJR0NfRFNQUF9TRUxf TUFTSyhjdHgtPmlkeCAtIDEpOwotCQkJaWYgKGogPT0gMCkKLQkJCQlhZGRyW2pdIHw9IElHQ19J TkRFWF9VUERBVEU7Ci0JCX0KLQotCQlSRUdfRE1BX1NFVFVQX09QUyhkbWFfd3JpdGVfY2ZnLCBv ZmZzZXQsIGFkZHIsCi0JCQlJR0NfVEJMX0xFTiAqIHNpemVvZih1MzIpLAotCQkJUkVHX0JMS19X UklURV9JTkMsIDAsIDApOwotCQlyYyA9IGRtYV9vcHMtPnNldHVwX3BheWxvYWQoJmRtYV93cml0 ZV9jZmcpOwotCQlpZiAocmMpIHsKLQkJCURSTV9FUlJPUigibHV0IHdyaXRlIGZhaWxlZCByZXQg JWRcbiIsIHJjKTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQotCVJFR19ETUFfSU5JVF9PUFMoZG1h X3dyaXRlX2NmZywgZHNwcF9tYXBwaW5nW2N0eC0+aWR4XSwgSUdDLAotCQlkc3BwX2J1ZltJR0Nd W2N0eC0+aWR4XSk7Ci0KLQlSRUdfRE1BX1NFVFVQX09QUyhkbWFfd3JpdGVfY2ZnLCAwLCBOVUxM LCAwLCBIV19CTEtfU0VMRUNULCAwLCAwKTsKLQlyYyA9IGRtYV9vcHMtPnNldHVwX3BheWxvYWQo JmRtYV93cml0ZV9jZmcpOwotCWlmIChyYykgewotCQlEUk1fRVJST1IoIndyaXRlIGRlY29kZSBz ZWxlY3QgZmFpbGVkIHJldCAlZFxuIiwgcmMpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGx1dF9j ZmctPmZsYWdzICYgSUdDX0RJVEhFUl9FTkFCTEUpIHsKLQkJcmVnID0gbHV0X2NmZy0+c3RyZW5n dGggJiBJR0NfRElUSEVSX0RBVEFfTUFTSzsKLQkJUkVHX0RNQV9TRVRVUF9PUFMoZG1hX3dyaXRl X2NmZywKLQkJCWN0eC0+Y2FwLT5zYmxrLT5pZ2MuYmFzZSArIElHQ19ESVRIRVJfT0ZGLAotCQkJ JnJlZywgc2l6ZW9mKHJlZyksIFJFR19TSU5HTEVfV1JJVEUsIDAsIDApOwotCQlyYyA9IGRtYV9v cHMtPnNldHVwX3BheWxvYWQoJmRtYV93cml0ZV9jZmcpOwotCQlpZiAocmMpIHsKLQkJCURSTV9F UlJPUigiZGl0aGVyIHN0cmVuZ3RoIGZhaWxlZCByZXQgJWRcbiIsIHJjKTsKLQkJCXJldHVybjsK LQkJfQotCX0KLQotCXJlZyA9IElHQ19FTjsKLQlSRUdfRE1BX1NFVFVQX09QUyhkbWFfd3JpdGVf Y2ZnLAotCQljdHgtPmNhcC0+c2Jsay0+aWdjLmJhc2UgKyBJR0NfT1BNT0RFX09GRiwKLQkJJnJl Zywgc2l6ZW9mKHJlZyksIFJFR19TSU5HTEVfV1JJVEUsIDAsIDApOwotCXJjID0gZG1hX29wcy0+ c2V0dXBfcGF5bG9hZCgmZG1hX3dyaXRlX2NmZyk7Ci0JaWYgKHJjKSB7Ci0JCURSTV9FUlJPUigi c2V0dGluZyBvcGNvZGUgZmFpbGVkIHJldCAlZFxuIiwgcmMpOwotCQlyZXR1cm47Ci0JfQotCi0J UkVHX0RNQV9TRVRVUF9LSUNLT0ZGKGtpY2tfb2ZmLCBod19jZmctPmN0bCwgZHNwcF9idWZbSUdD XVtjdHgtPmlkeF0sCi0JCQlSRUdfRE1BX1dSSVRFLCBETUFfQ1RMX1FVRVVFMCwgV1JJVEVfSU1N RURJQVRFKTsKLQlyYyA9IGRtYV9vcHMtPmtpY2tfb2ZmKCZraWNrX29mZik7Ci0JaWYgKHJjKQot CQlEUk1fRVJST1IoImZhaWxlZCB0byBraWNrIG9mZiByZXQgJWRcbiIsIHJjKTsKLX0KLQotc3Rh dGljIHZvaWQgX2RzcHBfcGNjdjRfb2ZmKHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpj ZmcpCi17Ci0Jc3RydWN0IGRwdV9yZWdfZG1hX2tpY2tvZmZfY2ZnIGtpY2tfb2ZmOwotCXN0cnVj dCBkcHVfaHdfY3BfY2ZnICpod19jZmcgPSBjZmc7Ci0Jc3RydWN0IGRwdV9od19yZWdfZG1hX29w cyAqZG1hX29wczsKLQlzdHJ1Y3QgZHB1X3JlZ19kbWFfc2V0dXBfb3BzX2NmZyBkbWFfd3JpdGVf Y2ZnOwotCWludCByYzsKLQl1MzIgcmVnOwotCi0JZG1hX29wcyA9IGRwdV9yZWdfZG1hX2dldF9v cHMoKTsKLQlkbWFfb3BzLT5yZXNldF9yZWdfZG1hX2J1Zihkc3BwX2J1ZltQQ0NdW2N0eC0+aWR4 XSk7Ci0KLQlSRUdfRE1BX0lOSVRfT1BTKGRtYV93cml0ZV9jZmcsIGRzcHBfbWFwcGluZ1tjdHgt PmlkeF0sIFBDQywKLQkJZHNwcF9idWZbUENDXVtjdHgtPmlkeF0pOwotCi0JUkVHX0RNQV9TRVRV UF9PUFMoZG1hX3dyaXRlX2NmZywgMCwgTlVMTCwgMCwgSFdfQkxLX1NFTEVDVCwgMCwgMCk7Ci0J cmMgPSBkbWFfb3BzLT5zZXR1cF9wYXlsb2FkKCZkbWFfd3JpdGVfY2ZnKTsKLQlpZiAocmMpIHsK LQkJRFJNX0VSUk9SKCJ3cml0ZSBkZWNvZGUgc2VsZWN0IGZhaWxlZCByZXQgJWRcbiIsIHJjKTsK LQkJcmV0dXJuOwotCX0KLQotCXJlZyA9IFBDQ19ESVM7Ci0JUkVHX0RNQV9TRVRVUF9PUFMoZG1h X3dyaXRlX2NmZywKLQkJY3R4LT5jYXAtPnNibGstPnBjYy5iYXNlLAotCQkmcmVnLCBzaXplb2Yo cmVnKSwgUkVHX1NJTkdMRV9XUklURSwgMCwgMCk7Ci0JcmMgPSBkbWFfb3BzLT5zZXR1cF9wYXls b2FkKCZkbWFfd3JpdGVfY2ZnKTsKLQlpZiAocmMpIHsKLQkJRFJNX0VSUk9SKCJzZXR0aW5nIG9w Y29kZSBmYWlsZWQgcmV0ICVkXG4iLCByYyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlSRUdfRE1BX1NF VFVQX0tJQ0tPRkYoa2lja19vZmYsIGh3X2NmZy0+Y3RsLCBkc3BwX2J1ZltQQ0NdW2N0eC0+aWR4 XSwKLQkJCVJFR19ETUFfV1JJVEUsIERNQV9DVExfUVVFVUUwLCBXUklURV9JTU1FRElBVEUpOwot CXJjID0gZG1hX29wcy0+a2lja19vZmYoJmtpY2tfb2ZmKTsKLQlpZiAocmMpCi0JCURSTV9FUlJP UigiZmFpbGVkIHRvIGtpY2sgb2ZmIHJldCAlZFxuIiwgcmMpOwotfQotCi12b2lkIHJlZ19kbWF2 MV9zZXR1cF9kc3BwX3BjY3Y0KHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpCi17 Ci0Jc3RydWN0IGRwdV9od19yZWdfZG1hX29wcyAqZG1hX29wczsKLQlzdHJ1Y3QgZHB1X3JlZ19k bWFfa2lja29mZl9jZmcga2lja19vZmY7Ci0Jc3RydWN0IGRwdV9od19jcF9jZmcgKmh3X2NmZyA9 IGNmZzsKLQlzdHJ1Y3QgZHB1X3JlZ19kbWFfc2V0dXBfb3BzX2NmZyBkbWFfd3JpdGVfY2ZnOwot CXN0cnVjdCBkcm1fbXNtX3BjYyAqcGNjX2NmZzsKLQlzdHJ1Y3QgZHJtX21zbV9wY2NfY29lZmYg KmNvZWZmcyA9IE5VTEw7Ci0JdTMyICpkYXRhID0gTlVMTDsKLQlpbnQgcmMsIGkgPSAwOwotCXUz MiByZWcgPSAwOwotCi0JcmMgPSByZWdfZG1hX2RzcHBfY2hlY2soY3R4LCBjZmcsIFBDQyk7Ci0J aWYgKHJjKQotCQlyZXR1cm47Ci0KLQlpZiAoIWh3X2NmZy0+cGF5bG9hZCkgewotCQlEUk1fREVC VUdfRFJJVkVSKCJkaXNhYmxlIHBjYyBmZWF0dXJlXG4iKTsKLQkJX2RzcHBfcGNjdjRfb2ZmKGN0 eCwgY2ZnKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChod19jZmctPmxlbiAhPSBzaXplb2Yoc3Ry dWN0IGRybV9tc21fcGNjKSkgewotCQlEUk1fRVJST1IoImludmFsaWQgc2l6ZSBvZiBwYXlsb2Fk IGxlbiAlZCBleHAgJXpkXG4iLAotCQkJCWh3X2NmZy0+bGVuLCBzaXplb2Yoc3RydWN0IGRybV9t c21fcGNjKSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlwY2NfY2ZnID0gaHdfY2ZnLT5wYXlsb2FkOwot Ci0JZG1hX29wcyA9IGRwdV9yZWdfZG1hX2dldF9vcHMoKTsKLQlkbWFfb3BzLT5yZXNldF9yZWdf ZG1hX2J1Zihkc3BwX2J1ZltQQ0NdW2N0eC0+aWR4XSk7Ci0KLQlSRUdfRE1BX0lOSVRfT1BTKGRt YV93cml0ZV9jZmcsIGRzcHBfbWFwcGluZ1tjdHgtPmlkeF0sCi0JCVBDQywgZHNwcF9idWZbUEND XVtjdHgtPmlkeF0pOwotCi0JUkVHX0RNQV9TRVRVUF9PUFMoZG1hX3dyaXRlX2NmZywgMCwgTlVM TCwgMCwgSFdfQkxLX1NFTEVDVCwgMCwgMCk7Ci0JcmMgPSBkbWFfb3BzLT5zZXR1cF9wYXlsb2Fk KCZkbWFfd3JpdGVfY2ZnKTsKLQlpZiAocmMpIHsKLQkJRFJNX0VSUk9SKCJ3cml0ZSBkZWNvZGUg c2VsZWN0IGZhaWxlZCByZXQgJWRcbiIsIHJjKTsKLQkJcmV0dXJuOwotCX0KLQotCWRhdGEgPSBr emFsbG9jKFBDQ19MRU4sIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0J Zm9yIChpID0gMDsgaSA8IFBDQ19OVU1fUExBTkVTOyBpKyspIHsKLQkJc3dpdGNoIChpKSB7Ci0J CWNhc2UgMDoKLQkJCWNvZWZmcyA9ICZwY2NfY2ZnLT5yOwotCQkJZGF0YVtpICsgMjRdID0gcGNj X2NmZy0+cl9ycjsKLQkJCWRhdGFbaSArIDI3XSA9IHBjY19jZmctPnJfZ2c7Ci0JCQlkYXRhW2kg KyAzMF0gPSBwY2NfY2ZnLT5yX2JiOwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCWNvZWZmcyA9 ICZwY2NfY2ZnLT5nOwotCQkJZGF0YVtpICsgMjRdID0gcGNjX2NmZy0+Z19ycjsKLQkJCWRhdGFb aSArIDI3XSA9IHBjY19jZmctPmdfZ2c7Ci0JCQlkYXRhW2kgKyAzMF0gPSBwY2NfY2ZnLT5nX2Ji OwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCWNvZWZmcyA9ICZwY2NfY2ZnLT5iOwotCQkJZGF0 YVtpICsgMjRdID0gcGNjX2NmZy0+Yl9ycjsKLQkJCWRhdGFbaSArIDI3XSA9IHBjY19jZmctPmJf Z2c7Ci0JCQlkYXRhW2kgKyAzMF0gPSBwY2NfY2ZnLT5iX2JiOwotCQkJYnJlYWs7Ci0JCWRlZmF1 bHQ6Ci0JCQlEUk1fRVJST1IoImludmFsaWQgcGNjIHBsYW5lOiAlZFxuIiwgaSk7Ci0JCQlnb3Rv IGV4aXQ7Ci0JCX0KLQotCQlkYXRhW2ldID0gY29lZmZzLT5jOwotCQlkYXRhW2kgKyAzXSA9IGNv ZWZmcy0+cjsKLQkJZGF0YVtpICsgNl0gPSBjb2VmZnMtPmc7Ci0JCWRhdGFbaSArIDldID0gY29l ZmZzLT5iOwotCQlkYXRhW2kgKyAxMl0gPSBjb2VmZnMtPnJnOwotCQlkYXRhW2kgKyAxNV0gPSBj b2VmZnMtPnJiOwotCQlkYXRhW2kgKyAxOF0gPSBjb2VmZnMtPmdiOwotCQlkYXRhW2kgKyAyMV0g PSBjb2VmZnMtPnJnYjsKLQl9Ci0KLQlSRUdfRE1BX1NFVFVQX09QUyhkbWFfd3JpdGVfY2ZnLAot CQljdHgtPmNhcC0+c2Jsay0+cGNjLmJhc2UgKyBQQ0NfQ19PRkYsCi0JCWRhdGEsIFBDQ19MRU4s Ci0JCVJFR19CTEtfV1JJVEVfU0lOR0xFLCAwLCAwKTsKLQlyYyA9IGRtYV9vcHMtPnNldHVwX3Bh eWxvYWQoJmRtYV93cml0ZV9jZmcpOwotCWlmIChyYykgewotCQlEUk1fRVJST1IoIndyaXRlIHBj YyBsdXQgZmFpbGVkIHJldCAlZFxuIiwgcmMpOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JcmVnID0g UENDX0VOOwotCVJFR19ETUFfU0VUVVBfT1BTKGRtYV93cml0ZV9jZmcsCi0JCWN0eC0+Y2FwLT5z YmxrLT5wY2MuYmFzZSwKLQkJJnJlZywgc2l6ZW9mKHJlZyksIFJFR19TSU5HTEVfV1JJVEUsIDAs IDApOwotCXJjID0gZG1hX29wcy0+c2V0dXBfcGF5bG9hZCgmZG1hX3dyaXRlX2NmZyk7Ci0JaWYg KHJjKSB7Ci0JCURSTV9FUlJPUigic2V0dGluZyBvcGNvZGUgZmFpbGVkIHJldCAlZFxuIiwgcmMp OwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JUkVHX0RNQV9TRVRVUF9LSUNLT0ZGKGtpY2tfb2ZmLCBo d19jZmctPmN0bCwgZHNwcF9idWZbUENDXVtjdHgtPmlkeF0sCi0JCQlSRUdfRE1BX1dSSVRFLCBE TUFfQ1RMX1FVRVVFMCwgV1JJVEVfSU1NRURJQVRFKTsKLQlyYyA9IGRtYV9vcHMtPmtpY2tfb2Zm KCZraWNrX29mZik7Ci0JaWYgKHJjKQotCQlEUk1fRVJST1IoImZhaWxlZCB0byBraWNrIG9mZiBy ZXQgJWRcbiIsIHJjKTsKLQotZXhpdDoKLQlrZnJlZShkYXRhKTsKLX0KLQotaW50IHJlZ19kbWF2 MV9kZWluaXRfZHNwcF9vcHMoZW51bSBkcHVfZHNwcCBpZHgpCi17Ci0JaW50IGk7Ci0Jc3RydWN0 IGRwdV9od19yZWdfZG1hX29wcyAqZG1hX29wczsKLQotCWRtYV9vcHMgPSBkcHVfcmVnX2RtYV9n ZXRfb3BzKCk7Ci0JaWYgKElTX0VSUl9PUl9OVUxMKGRtYV9vcHMpKQotCQlyZXR1cm4gLUVOT1RT VVBQOwotCi0JaWYgKGlkeCA+PSBEU1BQX01BWCkgewotCQlEUk1fRVJST1IoImludmFsaWQgZHNw cCBpZHggJXggbWF4ICV4ZFxuIiwgaWR4LCBEU1BQX01BWCk7Ci0JCXJldHVybiAtRUlOVkFMOwot CX0KLQotCWZvciAoaSA9IDA7IGkgPCBSRUdfRE1BX0ZFQVRVUkVTX01BWDsgaSsrKSB7Ci0JCWlm ICghZHNwcF9idWZbaV1baWR4XSkKLQkJCWNvbnRpbnVlOwotCQlkbWFfb3BzLT5kZWFsbG9jX3Jl Z19kbWEoZHNwcF9idWZbaV1baWR4XSk7Ci0JCWRzcHBfYnVmW2ldW2lkeF0gPSBOVUxMOwotCX0K LQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9od19yZWdfZG1hX3YxX2NvbG9yX3Byb2MuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9od19yZWdfZG1hX3YxX2NvbG9yX3Byb2MuaApkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggNWMzMzM5OS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfaHdfcmVnX2RtYV92MV9jb2xvcl9wcm9jLmgKKysrIC9kZXYvbnVsbApAQCAt MSw3NSArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAxOCwgVGhlIExpbnV4IEZvdW5k YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAy IGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotI2lmbmRlZiBfRFBV X0hXX1JFR19ETUFfVjFfQ09MT1JfUFJPQ19ICi0jZGVmaW5lIF9EUFVfSFdfUkVHX0RNQV9WMV9D T0xPUl9QUk9DX0gKLQotI2luY2x1ZGUgImRwdV9od191dGlsLmgiCi0jaW5jbHVkZSAiZHB1X2h3 X2NhdGFsb2cuaCIKLSNpbmNsdWRlICJkcHVfaHdfZHNwcC5oIgotCi0vKioKLSAqIHJlZ19kbWF2 MV9pbml0X2RzcHBfb3BfdjQoKSAtIGluaXRpYWxpemUgdGhlIGRzcHAgZmVhdHVyZSBvcCBmb3Ig ZHB1IHY0Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyByZWcgZG1hIHYx LgotICogQGZlYXR1cmU6IGRzcHAgZmVhdHVyZQotICogaWR4OiBkc3BwIGlkeAotICovCi1pbnQg cmVnX2RtYXYxX2luaXRfZHNwcF9vcF92NChpbnQgZmVhdHVyZSwgZW51bSBkcHVfZHNwcCBpZHgp OwotCi0vKioKLSAqIHJlZ19kbWFfaW5pdF9zc3BwX29wX3Y0KCkgLSBpbml0aWFsaXplIHRoZSBz c3BwIGZlYXR1cmUgb3AgZm9yIGRwdSB2NAotICogQGZlYXR1cmU6IHNzcHAgZmVhdHVyZQotICog QGlkeDogc3NwcCBpZHgKLSAqLwotaW50IHJlZ19kbWF2MV9pbml0X3NzcHBfb3BfdjQoaW50IGZl YXR1cmUsIGVudW0gZHB1X3NzcHAgaWR4KTsKLQotLyoqCi0gKiByZWdfZG1hdjFfc2V0dXBfZHNw cF92bHV0djE4KCkgLSB2bHV0IHYxOCBpbXBsZW1lbnRhdGlvbiB1c2luZyByZWcgZG1hIHYxLgot ICogQGN0eDogZHNwcCBjdHggaW5mbwotICogQGNmZzogcG9pbnRlciB0byBzdHJ1Y3QgZHB1X2h3 X2NwX2NmZwotICovCi12b2lkIHJlZ19kbWF2MV9zZXR1cF9kc3BwX3ZsdXR2MTgoc3RydWN0IGRw dV9od19kc3BwICpjdHgsIHZvaWQgKmNmZyk7Ci0KLS8qKgotICogcmVnX2RtYXYxX3NldHVwXzNk X2dhbXV0djQoKSAtIGdhbXV0IHY0IGltcGxlbWVudGF0aW9uIHVzaW5nIHJlZyBkbWEgdjEuCi0g KiBAY3R4OiBkc3BwIGN0eCBpbmZvCi0gKiBAY2ZnOiBwb2ludGVyIHRvIHN0cnVjdCBkcHVfaHdf Y3BfY2ZnCi0gKi8KLXZvaWQgcmVnX2RtYXYxX3NldHVwX2RzcHBfM2RfZ2FtdXR2NChzdHJ1Y3Qg ZHB1X2h3X2RzcHAgKmN0eCwgdm9pZCAqY2ZnKTsKLQotLyoqCi0gKiByZWdfZG1hdjFfc2V0dXBf ZHNwcF9nY3YxOCgpIC0gZ2MgdjE4IGltcGxlbWVudGF0aW9uIHVzaW5nIHJlZyBkbWEgdjEuCi0g KiBAY3R4OiBkc3BwIGN0eCBpbmZvCi0gKiBAY2ZnOiBwb2ludGVyIHRvIHN0cnVjdCBkcHVfaHdf Y3BfY2ZnCi0gKi8KLXZvaWQgcmVnX2RtYXYxX3NldHVwX2RzcHBfZ2N2MTgoc3RydWN0IGRwdV9o d19kc3BwICpjdHgsIHZvaWQgKmNmZyk7Ci0KLS8qKgotICogcmVnX2RtYXYxX3NldHVwX2RzcHBf aWdjdjMxKCkgLSBpZ2MgdjMxIGltcGxlbWVudGF0aW9uIHVzaW5nIHJlZyBkbWEgdjEuCi0gKiBA Y3R4OiBkc3BwIGN0eCBpbmZvCi0gKiBAY2ZnOiBwb2ludGVyIHRvIHN0cnVjdCBkcHVfaHdfY3Bf Y2ZnCi0gKi8KLXZvaWQgcmVnX2RtYXYxX3NldHVwX2RzcHBfaWdjdjMxKHN0cnVjdCBkcHVfaHdf ZHNwcCAqY3R4LCB2b2lkICpjZmcpOwotCi0vKioKLSAqIHJlZ19kbWF2MV9zZXR1cF9kc3BwX3Bj Y3Y0KCkgLSBwY2MgdjQgaW1wbGVtZW50YXRpb24gdXNpbmcgcmVnIGRtYSB2MS4KLSAqIEBjdHg6 IGRzcHAgY3R4IGluZm8KLSAqIEBjZmc6IHBvaW50ZXIgdG8gc3RydWN0IGRwdV9od19jcF9jZmcK LSAqLwotdm9pZCByZWdfZG1hdjFfc2V0dXBfZHNwcF9wY2N2NChzdHJ1Y3QgZHB1X2h3X2RzcHAg KmN0eCwgdm9pZCAqY2ZnKTsKLQotLyoqCi0gKiByZWdfZG1hdjFfZGVpbml0X2RzcHBfb3BzKCkg LSBkZWluaXRpYWxpemUgdGhlIGRzcHAgZmVhdHVyZSBvcCBmb3IgZHB1IHY0Ci0gKiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB3aGljaCB3ZXJlIGluaXRpYWxpemVkLgotICogQGlkeDog ZHNwcCBpZHgKLSAqLwotaW50IHJlZ19kbWF2MV9kZWluaXRfZHNwcF9vcHMoZW51bSBkcHVfZHNw cCBpZHgpOwotI2VuZGlmIC8qIF9EUFVfSFdfUkVHX0RNQV9WMV9DT0xPUl9QUk9DX0ggKi8KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19zc3BwLmMgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfc3NwcC5jCmluZGV4IDEwYmRjZTMu LjY2NDA5MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9o d19zc3BwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3NzcHAu YwpAQCAtMTQsNyArMTQsNiBAQAogI2luY2x1ZGUgImRwdV9od19jYXRhbG9nLmgiCiAjaW5jbHVk ZSAiZHB1X2h3X2xtLmgiCiAjaW5jbHVkZSAiZHB1X2h3X3NzcHAuaCIKLSNpbmNsdWRlICJkcHVf aHdfY29sb3JfcHJvY2Vzc2luZy5oIgogI2luY2x1ZGUgImRwdV9kYmcuaCIKICNpbmNsdWRlICJk cHVfa21zLmgiCiAKQEAgLTE2NSwxNSArMTY0LDYgQEAgc3RhdGljIGlubGluZSBpbnQgX3NzcHBf c3ViYmxrX29mZnNldChzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwKIAljYXNlIERQVV9TU1BQX0NT Q18xMEJJVDoKIAkJKmlkeCA9IHNibGstPmNzY19ibGsuYmFzZTsKIAkJYnJlYWs7Ci0JY2FzZSBE UFVfU1NQUF9IU0lDOgotCQkqaWR4ID0gc2Jsay0+aHNpY19ibGsuYmFzZTsKLQkJYnJlYWs7Ci0J Y2FzZSBEUFVfU1NQUF9QQ0M6Ci0JCSppZHggPSBzYmxrLT5wY2NfYmxrLmJhc2U7Ci0JCWJyZWFr OwotCWNhc2UgRFBVX1NTUFBfTUVNQ09MT1I6Ci0JCSppZHggPSBzYmxrLT5tZW1jb2xvcl9ibGsu YmFzZTsKLQkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmMgPSAtRUlOVkFMOwogCX0KQEAgLTQxMyw2 NCArNDAzLDYgQEAgc3RhdGljIHZvaWQgZHB1X2h3X3NzcHBfc2V0dXBfcGVfY29uZmlnKHN0cnVj dCBkcHVfaHdfcGlwZSAqY3R4LAogCQkJdG90X3JlcV9waXhlbHNbM10pOwogfQogCi1zdGF0aWMg dm9pZCBfZHB1X2h3X3NzcHBfc2V0dXBfc2NhbGVyKHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4LAot CQlzdHJ1Y3QgZHB1X2h3X3BpcGVfY2ZnICpzc3BwLAotCQlzdHJ1Y3QgZHB1X2h3X3BpeGVsX2V4 dCAqcGUsCi0JCXZvaWQgKnNjYWxlcl9jZmcpCi17Ci0Jc3RydWN0IGRwdV9od19ibGtfcmVnX21h cCAqYzsKLQlpbnQgY29uZmlnX2ggPSAweDA7Ci0JaW50IGNvbmZpZ192ID0gMHgwOwotCXUzMiBp ZHg7Ci0KLQkodm9pZClzc3BwOwotCSh2b2lkKXNjYWxlcl9jZmc7Ci0JaWYgKF9zc3BwX3N1YmJs a19vZmZzZXQoY3R4LCBEUFVfU1NQUF9TQ0FMRVJfUVNFRUQyLCAmaWR4KSB8fCAhcGUpCi0JCXJl dHVybjsKLQotCWMgPSAmY3R4LT5odzsKLQotCS8qIGVuYWJsZSBzY2FsZXIocykgaWYgdmFsaWQg ZmlsdGVyIHNldCAqLwotCWlmIChwZS0+aG9yel9maWx0ZXJbRFBVX1NTUFBfQ09NUF8wXSA8IERQ VV9TQ0FMRV9GSUxURVJfTUFYKQotCQljb25maWdfaCB8PSBwZS0+aG9yel9maWx0ZXJbRFBVX1NT UFBfQ09NUF8wXSA8PCA4OwotCWlmIChwZS0+aG9yel9maWx0ZXJbRFBVX1NTUFBfQ09NUF8xXzJd IDwgRFBVX1NDQUxFX0ZJTFRFUl9NQVgpCi0JCWNvbmZpZ19oIHw9IHBlLT5ob3J6X2ZpbHRlcltE UFVfU1NQUF9DT01QXzFfMl0gPDwgMTI7Ci0JaWYgKHBlLT5ob3J6X2ZpbHRlcltEUFVfU1NQUF9D T01QXzNdIDwgRFBVX1NDQUxFX0ZJTFRFUl9NQVgpCi0JCWNvbmZpZ19oIHw9IHBlLT5ob3J6X2Zp bHRlcltEUFVfU1NQUF9DT01QXzNdIDw8IDE2OwotCi0JaWYgKGNvbmZpZ19oKQotCQljb25maWdf aCB8PSBCSVQoMCk7Ci0KLQlpZiAocGUtPnZlcnRfZmlsdGVyW0RQVV9TU1BQX0NPTVBfMF0gPCBE UFVfU0NBTEVfRklMVEVSX01BWCkKLQkJY29uZmlnX3YgfD0gcGUtPnZlcnRfZmlsdGVyW0RQVV9T U1BQX0NPTVBfMF0gPDwgMTA7Ci0JaWYgKHBlLT52ZXJ0X2ZpbHRlcltEUFVfU1NQUF9DT01QXzFf Ml0gPCBEUFVfU0NBTEVfRklMVEVSX01BWCkKLQkJY29uZmlnX3YgfD0gcGUtPnZlcnRfZmlsdGVy W0RQVV9TU1BQX0NPTVBfMV8yXSA8PCAxNDsKLQlpZiAocGUtPnZlcnRfZmlsdGVyW0RQVV9TU1BQ X0NPTVBfM10gPCBEUFVfU0NBTEVfRklMVEVSX01BWCkKLQkJY29uZmlnX3YgfD0gcGUtPnZlcnRf ZmlsdGVyW0RQVV9TU1BQX0NPTVBfM10gPDwgMTg7Ci0KLQlpZiAoY29uZmlnX3YpCi0JCWNvbmZp Z192IHw9IEJJVCgxKTsKLQotCURQVV9SRUdfV1JJVEUoYywgU0NBTEVfQ09ORklHICsgaWR4LCAg Y29uZmlnX2ggfCBjb25maWdfdik7Ci0JRFBVX1JFR19XUklURShjLCBDT01QMF8zX0lOSVRfUEhB U0VfWCArIGlkeCwKLQkJcGUtPmluaXRfcGhhc2VfeFtEUFVfU1NQUF9DT01QXzBdKTsKLQlEUFVf UkVHX1dSSVRFKGMsIENPTVAwXzNfSU5JVF9QSEFTRV9ZICsgaWR4LAotCQlwZS0+aW5pdF9waGFz ZV95W0RQVV9TU1BQX0NPTVBfMF0pOwotCURQVV9SRUdfV1JJVEUoYywgQ09NUDBfM19QSEFTRV9T VEVQX1ggKyBpZHgsCi0JCXBlLT5waGFzZV9zdGVwX3hbRFBVX1NTUFBfQ09NUF8wXSk7Ci0JRFBV X1JFR19XUklURShjLCBDT01QMF8zX1BIQVNFX1NURVBfWSArIGlkeCwKLQkJcGUtPnBoYXNlX3N0 ZXBfeVtEUFVfU1NQUF9DT01QXzBdKTsKLQotCURQVV9SRUdfV1JJVEUoYywgQ09NUDFfMl9JTklU X1BIQVNFX1ggKyBpZHgsCi0JCXBlLT5pbml0X3BoYXNlX3hbRFBVX1NTUFBfQ09NUF8xXzJdKTsK LQlEUFVfUkVHX1dSSVRFKGMsIENPTVAxXzJfSU5JVF9QSEFTRV9ZICsgaWR4LAotCQlwZS0+aW5p dF9waGFzZV95W0RQVV9TU1BQX0NPTVBfMV8yXSk7Ci0JRFBVX1JFR19XUklURShjLCBDT01QMV8y X1BIQVNFX1NURVBfWCArIGlkeCwKLQkJcGUtPnBoYXNlX3N0ZXBfeFtEUFVfU1NQUF9DT01QXzFf Ml0pOwotCURQVV9SRUdfV1JJVEUoYywgQ09NUDFfMl9QSEFTRV9TVEVQX1kgKyBpZHgsCi0JCXBl LT5waGFzZV9zdGVwX3lbRFBVX1NTUFBfQ09NUF8xXzJdKTsKLX0KLQogc3RhdGljIHZvaWQgX2Rw dV9od19zc3BwX3NldHVwX3NjYWxlcjMoc3RydWN0IGRwdV9od19waXBlICpjdHgsCiAJCXN0cnVj dCBkcHVfaHdfcGlwZV9jZmcgKnNzcHAsCiAJCXN0cnVjdCBkcHVfaHdfcGl4ZWxfZXh0ICpwZSwK QEAgLTUwOSw3ICs0NDEsNiBAQCBzdGF0aWMgdm9pZCBkcHVfaHdfc3NwcF9zZXR1cF9yZWN0cyhz dHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwKIAlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwICpjOwog CXUzMiBzcmNfc2l6ZSwgc3JjX3h5LCBkc3Rfc2l6ZSwgZHN0X3h5LCB5c3RyaWRlMCwgeXN0cmlk ZTE7CiAJdTMyIHNyY19zaXplX29mZiwgc3JjX3h5X29mZiwgb3V0X3NpemVfb2ZmLCBvdXRfeHlf b2ZmOwotCXUzMiBkZWNpbWF0aW9uID0gMDsKIAl1MzIgaWR4OwogCiAJaWYgKF9zc3BwX3N1YmJs a19vZmZzZXQoY3R4LCBEUFVfU1NQUF9TUkMsICZpZHgpIHx8ICFjZmcpCkBAIC01NjAsMTMgKzQ5 MSw2IEBAIHN0YXRpYyB2b2lkIGRwdV9od19zc3BwX3NldHVwX3JlY3RzKHN0cnVjdCBkcHVfaHdf cGlwZSAqY3R4LAogCQl9CiAJfQogCi0JLyogcHJvZ3JhbSBzY2FsZXIsIHBoYXNlIHJlZ2lzdGVy cywgaWYgcGlwZXMgc3VwcG9ydGluZyBzY2FsaW5nICovCi0JaWYgKGN0eC0+Y2FwLT5mZWF0dXJl cyAmIERQVV9TU1BQX1NDQUxFUikgewotCQkvKiBwcm9ncmFtIGRlY2ltYXRpb24gKi8KLQkJZGVj aW1hdGlvbiA9ICgoMSA8PCBjZmctPmhvcnpfZGVjaW1hdGlvbikgLSAxKSA8PCA4OwotCQlkZWNp bWF0aW9uIHw9ICgoMSA8PCBjZmctPnZlcnRfZGVjaW1hdGlvbikgLSAxKTsKLQl9Ci0KIAkvKiBy ZWN0YW5nbGUgcmVnaXN0ZXIgcHJvZ3JhbW1pbmcgKi8KIAlEUFVfUkVHX1dSSVRFKGMsIHNyY19z aXplX29mZiArIGlkeCwgc3JjX3NpemUpOwogCURQVV9SRUdfV1JJVEUoYywgc3JjX3h5X29mZiAr IGlkeCwgc3JjX3h5KTsKQEAgLTU3NSw1MiArNDk5LDYgQEAgc3RhdGljIHZvaWQgZHB1X2h3X3Nz cHBfc2V0dXBfcmVjdHMoc3RydWN0IGRwdV9od19waXBlICpjdHgsCiAKIAlEUFVfUkVHX1dSSVRF KGMsIFNTUFBfU1JDX1lTVFJJREUwICsgaWR4LCB5c3RyaWRlMCk7CiAJRFBVX1JFR19XUklURShj LCBTU1BQX1NSQ19ZU1RSSURFMSArIGlkeCwgeXN0cmlkZTEpOwotCURQVV9SRUdfV1JJVEUoYywg U1NQUF9ERUNJTUFUSU9OX0NPTkZJRyArIGlkeCwgZGVjaW1hdGlvbik7Ci19Ci0KLS8qKgotICog X2RwdV9od19zc3BwX3NldHVwX2V4Y2xfcmVjdCgpIC0gc2V0IGV4Y2x1c2lvbiByZWN0IGNvbmZp Z3MKLSAqIEBjdHg6IFBvaW50ZXIgdG8gcGlwZSBjb250ZXh0Ci0gKiBAZXhjbF9yZWN0OiBFeGNs dXNpb24gcmVjdCBjb25maWdzCi0gKi8KLXN0YXRpYyB2b2lkIF9kcHVfaHdfc3NwcF9zZXR1cF9l eGNsX3JlY3Qoc3RydWN0IGRwdV9od19waXBlICpjdHgsCi0JCXN0cnVjdCBkcHVfcmVjdCAqZXhj bF9yZWN0LAotCQllbnVtIGRwdV9zc3BwX211bHRpcmVjdF9pbmRleCByZWN0X2luZGV4KQotewot CXN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAgKmM7Ci0JdTMyIHNpemUsIHh5OwotCXUzMiBpZHg7 Ci0JdTMyIHJlZ194eSwgcmVnX3NpemU7Ci0JdTMyIGV4Y2xfY3RybCwgZW5hYmxlX2JpdDsKLQot CWlmIChfc3NwcF9zdWJibGtfb2Zmc2V0KGN0eCwgRFBVX1NTUFBfU1JDLCAmaWR4KSB8fCAhZXhj bF9yZWN0KQotCQlyZXR1cm47Ci0KLQlpZiAocmVjdF9pbmRleCA9PSBEUFVfU1NQUF9SRUNUXzAg fHwgcmVjdF9pbmRleCA9PSBEUFVfU1NQUF9SRUNUX1NPTE8pIHsKLQkJcmVnX3h5ID0gU1NQUF9F WENMX1JFQ19YWTsKLQkJcmVnX3NpemUgPSBTU1BQX0VYQ0xfUkVDX1NJWkU7Ci0JCWVuYWJsZV9i aXQgPSBCSVQoMCk7Ci0JfSBlbHNlIHsKLQkJcmVnX3h5ID0gU1NQUF9FWENMX1JFQ19YWV9SRUMx OwotCQlyZWdfc2l6ZSA9IFNTUFBfRVhDTF9SRUNfU0laRV9SRUMxOwotCQllbmFibGVfYml0ID0g QklUKDEpOwotCX0KLQotCWMgPSAmY3R4LT5odzsKLQotCXh5ID0gKGV4Y2xfcmVjdC0+eSA8PCAx NikgfCAoZXhjbF9yZWN0LT54KTsKLQlzaXplID0gKGV4Y2xfcmVjdC0+aCA8PCAxNikgfCAoZXhj bF9yZWN0LT53KTsKLQotCWV4Y2xfY3RybCA9IERQVV9SRUdfUkVBRChjLCBTU1BQX0VYQ0xfUkVD X0NUTCArIGlkeCk7Ci0JaWYgKCFzaXplKSB7Ci0JCURQVV9SRUdfV1JJVEUoYywgU1NQUF9FWENM X1JFQ19DVEwgKyBpZHgsCi0JCQkJZXhjbF9jdHJsICYgfmVuYWJsZV9iaXQpOwotCX0gZWxzZSB7 Ci0JCURQVV9SRUdfV1JJVEUoYywgU1NQUF9FWENMX1JFQ19DVEwgKyBpZHgsCi0JCQkJZXhjbF9j dHJsIHwgZW5hYmxlX2JpdCk7Ci0JCURQVV9SRUdfV1JJVEUoYywgcmVnX3NpemUgKyBpZHgsIHNp emUpOwotCQlEUFVfUkVHX1dSSVRFKGMsIHJlZ194eSArIGlkeCwgeHkpOwotCX0KIH0KIAogc3Rh dGljIHZvaWQgZHB1X2h3X3NzcHBfc2V0dXBfc291cmNlYWRkcmVzcyhzdHJ1Y3QgZHB1X2h3X3Bp cGUgKmN0eCwKQEAgLTY2NywyNCArNTQ1LDYgQEAgc3RhdGljIHZvaWQgZHB1X2h3X3NzcHBfc2V0 dXBfY3NjKHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4LAogCWRwdV9od19jc2Nfc2V0dXAoJmN0eC0+ aHcsIGlkeCwgZGF0YSwgY3NjMTApOwogfQogCi1zdGF0aWMgdm9pZCBkcHVfaHdfc3NwcF9zZXR1 cF9zaGFycGVuaW5nKHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4LAotCQlzdHJ1Y3QgZHB1X2h3X3No YXJwX2NmZyAqY2ZnKQotewotCXN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAgKmM7Ci0JdTMyIGlk eDsKLQotCWlmIChfc3NwcF9zdWJibGtfb2Zmc2V0KGN0eCwgRFBVX1NTUFBfU0NBTEVSX1FTRUVE MiwgJmlkeCkgfHwgIWNmZyB8fAotCQkJIXRlc3RfYml0KERQVV9TU1BQX1NDQUxFUl9RU0VFRDIs ICZjdHgtPmNhcC0+ZmVhdHVyZXMpKQotCQlyZXR1cm47Ci0KLQljID0gJmN0eC0+aHc7Ci0KLQlE UFVfUkVHX1dSSVRFKGMsIFZJR18wX1FTRUVEMl9TSEFSUCArIGlkeCwgY2ZnLT5zdHJlbmd0aCk7 Ci0JRFBVX1JFR19XUklURShjLCBWSUdfMF9RU0VFRDJfU0hBUlAgKyBpZHggKyAweDQsIGNmZy0+ ZWRnZV90aHIpOwotCURQVV9SRUdfV1JJVEUoYywgVklHXzBfUVNFRUQyX1NIQVJQICsgaWR4ICsg MHg4LCBjZmctPnNtb290aF90aHIpOwotCURQVV9SRUdfV1JJVEUoYywgVklHXzBfUVNFRUQyX1NI QVJQICsgaWR4ICsgMHhDLCBjZmctPm5vaXNlX3Rocik7Ci19Ci0KIHN0YXRpYyB2b2lkIGRwdV9o d19zc3BwX3NldHVwX3NvbGlkZmlsbChzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwgdTMyIGNvbG9y LCBlbnVtCiAJCWRwdV9zc3BwX211bHRpcmVjdF9pbmRleCByZWN0X2luZGV4KQogewpAQCAtNzU0 LDU2ICs2MTQsNiBAQCBzdGF0aWMgdm9pZCBkcHVfaHdfc3NwcF9zZXR1cF9xb3NfY3RybChzdHJ1 Y3QgZHB1X2h3X3BpcGUgKmN0eCwKIAlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBTU1BQX1FPU19D VFJMICsgaWR4LCBxb3NfY3RybCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRwdV9od19zc3BwX3NldHVw X3RzX3ByZWZpbGwoc3RydWN0IGRwdV9od19waXBlICpjdHgsCi0JCXN0cnVjdCBkcHVfaHdfcGlw ZV90c19jZmcgKmNmZywKLQkJZW51bSBkcHVfc3NwcF9tdWx0aXJlY3RfaW5kZXggaW5kZXgpCi17 Ci0JdTMyIGlkeDsKLQl1MzIgdHNfb2Zmc2V0LCB0c19wcmVmaWxsX29mZnNldDsKLQl1MzIgdHNf Y291bnQgPSAwLCB0c19ieXRlcyA9IDA7Ci0JY29uc3Qgc3RydWN0IGRwdV9zc3BwX2NmZyAqY2Fw OwotCi0JaWYgKCFjdHggfHwgIWNmZyB8fCAhY3R4LT5jYXApCi0JCXJldHVybjsKLQotCWlmIChf c3NwcF9zdWJibGtfb2Zmc2V0KGN0eCwgRFBVX1NTUFBfU1JDLCAmaWR4KSkKLQkJcmV0dXJuOwot Ci0JY2FwID0gY3R4LT5jYXA7Ci0KLQlpZiAoaW5kZXggPT0gRFBVX1NTUFBfUkVDVF8wICYmCi0J CQl0ZXN0X2JpdChEUFVfU1NQUF9UU19QUkVGSUxMLCAmY2FwLT5mZWF0dXJlcykpIHsKLQkJdHNf b2Zmc2V0ID0gU1NQUF9UUkFGRklDX1NIQVBFUjsKLQkJdHNfcHJlZmlsbF9vZmZzZXQgPSBTU1BQ X1RSQUZGSUNfU0hBUEVSX1BSRUZJTEw7Ci0JfSBlbHNlIGlmIChpbmRleCA9PSBEUFVfU1NQUF9S RUNUXzEgJiYKLQkJCXRlc3RfYml0KERQVV9TU1BQX1RTX1BSRUZJTExfUkVDMSwgJmNhcC0+ZmVh dHVyZXMpKSB7Ci0JCXRzX29mZnNldCA9IFNTUFBfVFJBRkZJQ19TSEFQRVJfUkVDMTsKLQkJdHNf cHJlZmlsbF9vZmZzZXQgPSBTU1BQX1RSQUZGSUNfU0hBUEVSX1JFQzFfUFJFRklMTDsKLQl9IGVs c2UgewotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGNmZy0+dGltZSkgewotCQkvKiB0aGlzIGRvZXMg bXVsdF9mcmFjIGluIGEgNjQtYml0IHNhZmUgbWFubmVyICovCi0JCXU2NCByYXRlID0gVFNfQ0xL ICogMTAwMDAwMFVMTDsKLQkJdTMyIHJlbTsKLQkJdTY0IHF1b3QgPSBkaXZfdTY0X3JlbShyYXRl LCBjZmctPnRpbWUsICZyZW0pOwotCQl0c19ieXRlcyA9IChxdW90ICogY2ZnLT5zaXplKSArCi0J CQkgICBkaXZfdTY0KHJlbSAqIGNmZy0+c2l6ZSwgY2ZnLT50aW1lKTsKLQotCQlpZiAodHNfYnl0 ZXMgPiBTU1BQX1RSQUZGSUNfU0hBUEVSX0JQQ19NQVgpCi0JCQl0c19ieXRlcyA9IFNTUFBfVFJB RkZJQ19TSEFQRVJfQlBDX01BWDsKLQl9Ci0KLQlpZiAodHNfYnl0ZXMpIHsKLQkJdHNfY291bnQg PSBESVZfUk9VTkRfVVBfVUxMKGNmZy0+c2l6ZSwgdHNfYnl0ZXMpOwotCQl0c19ieXRlcyB8PSBC SVQoMzEpIHwgQklUKDI3KTsKLQl9Ci0KLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCB0c19vZmZz ZXQsIHRzX2J5dGVzKTsKLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCB0c19wcmVmaWxsX29mZnNl dCwgdHNfY291bnQpOwotfQotCiBzdGF0aWMgdm9pZCBkcHVfaHdfc3NwcF9zZXR1cF9jZHAoc3Ry dWN0IGRwdV9od19waXBlICpjdHgsCiAJCXN0cnVjdCBkcHVfaHdfcGlwZV9jZHBfY2ZnICpjZmcp CiB7CkBAIC04MzksOSArNjQ5LDYgQEAgc3RhdGljIHZvaWQgX3NldHVwX2xheWVyX29wcyhzdHJ1 Y3QgZHB1X2h3X3BpcGUgKmMsCiAJCWMtPm9wcy5zZXR1cF9wZSA9IGRwdV9od19zc3BwX3NldHVw X3BlX2NvbmZpZzsKIAl9CiAKLQlpZiAodGVzdF9iaXQoRFBVX1NTUFBfRVhDTF9SRUNULCAmZmVh dHVyZXMpKQotCQljLT5vcHMuc2V0dXBfZXhjbF9yZWN0ID0gX2RwdV9od19zc3BwX3NldHVwX2V4 Y2xfcmVjdDsKLQogCWlmICh0ZXN0X2JpdChEUFVfU1NQUF9RT1MsICZmZWF0dXJlcykpIHsKIAkJ Yy0+b3BzLnNldHVwX2Rhbmdlcl9zYWZlX2x1dCA9CiAJCQlkcHVfaHdfc3NwcF9zZXR1cF9kYW5n ZXJfc2FmZV9sdXQ7CkBAIC04NDksMTggKzY1NiwxMCBAQCBzdGF0aWMgdm9pZCBfc2V0dXBfbGF5 ZXJfb3BzKHN0cnVjdCBkcHVfaHdfcGlwZSAqYywKIAkJYy0+b3BzLnNldHVwX3Fvc19jdHJsID0g ZHB1X2h3X3NzcHBfc2V0dXBfcW9zX2N0cmw7CiAJfQogCi0JaWYgKHRlc3RfYml0KERQVV9TU1BQ X1RTX1BSRUZJTEwsICZmZWF0dXJlcykpCi0JCWMtPm9wcy5zZXR1cF90c19wcmVmaWxsID0gZHB1 X2h3X3NzcHBfc2V0dXBfdHNfcHJlZmlsbDsKLQogCWlmICh0ZXN0X2JpdChEUFVfU1NQUF9DU0Ms ICZmZWF0dXJlcykgfHwKIAkJdGVzdF9iaXQoRFBVX1NTUFBfQ1NDXzEwQklULCAmZmVhdHVyZXMp KQogCQljLT5vcHMuc2V0dXBfY3NjID0gZHB1X2h3X3NzcHBfc2V0dXBfY3NjOwogCi0JaWYgKHRl c3RfYml0KERQVV9TU1BQX1NDQUxFUl9RU0VFRDIsICZmZWF0dXJlcykpIHsKLQkJYy0+b3BzLnNl dHVwX3NoYXJwZW5pbmcgPSBkcHVfaHdfc3NwcF9zZXR1cF9zaGFycGVuaW5nOwotCQljLT5vcHMu c2V0dXBfc2NhbGVyID0gX2RwdV9od19zc3BwX3NldHVwX3NjYWxlcjsKLQl9Ci0KIAlpZiAoZHB1 X2h3X3NzcHBfbXVsdGlyZWN0X2VuYWJsZWQoYy0+Y2FwKSkKIAkJYy0+b3BzLnNldHVwX211bHRp cmVjdCA9IGRwdV9od19zc3BwX3NldHVwX211bHRpcmVjdDsKIApAQCAtODY5LDI0ICs2NjgsNiBA QCBzdGF0aWMgdm9pZCBfc2V0dXBfbGF5ZXJfb3BzKHN0cnVjdCBkcHVfaHdfcGlwZSAqYywKIAkJ Yy0+b3BzLmdldF9zY2FsZXJfdmVyID0gX2RwdV9od19zc3BwX2dldF9zY2FsZXIzX3ZlcjsKIAl9 CiAKLQlpZiAodGVzdF9iaXQoRFBVX1NTUFBfSFNJQywgJmZlYXR1cmVzKSkgewotCQkvKiBUT0RP OiBhZGQgdmVyc2lvbiBiYXNlZCBhc3NpZ25tZW50IGhlcmUgYXMgaW5saW5lIG9yIG1hY3JvICov Ci0JCWlmIChjLT5jYXAtPnNibGstPmhzaWNfYmxrLnZlcnNpb24gPT0KLQkJCShEUFVfQ09MT1Jf UFJPQ0VTU19WRVIoMHgxLCAweDcpKSkgewotCQkJYy0+b3BzLnNldHVwX3BhX2h1ZSA9IGRwdV9z ZXR1cF9waXBlX3BhX2h1ZV92MV83OwotCQkJYy0+b3BzLnNldHVwX3BhX3NhdCA9IGRwdV9zZXR1 cF9waXBlX3BhX3NhdF92MV83OwotCQkJYy0+b3BzLnNldHVwX3BhX3ZhbCA9IGRwdV9zZXR1cF9w aXBlX3BhX3ZhbF92MV83OwotCQkJYy0+b3BzLnNldHVwX3BhX2NvbnQgPSBkcHVfc2V0dXBfcGlw ZV9wYV9jb250X3YxXzc7Ci0JCX0KLQl9Ci0KLQlpZiAodGVzdF9iaXQoRFBVX1NTUFBfTUVNQ09M T1IsICZmZWF0dXJlcykpIHsKLQkJaWYgKGMtPmNhcC0+c2Jsay0+bWVtY29sb3JfYmxrLnZlcnNp b24gPT0KLQkJCShEUFVfQ09MT1JfUFJPQ0VTU19WRVIoMHgxLCAweDcpKSkKLQkJCWMtPm9wcy5z ZXR1cF9wYV9tZW1jb2xvciA9Ci0JCQkJZHB1X3NldHVwX3BpcGVfcGFfbWVtY29sX3YxXzc7Ci0J fQotCiAJaWYgKHRlc3RfYml0KERQVV9TU1BQX0NEUCwgJmZlYXR1cmVzKSkKIAkJYy0+b3BzLnNl dHVwX2NkcCA9IGRwdV9od19zc3BwX3NldHVwX2NkcDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19zc3BwLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfaHdfc3NwcC5oCmluZGV4IGEzMmVjYzYuLjBiYjVlY2IgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19zc3BwLmgKKysrIGIvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3NzcHAuaApAQCAtMTgsNyArMTgsNiBA QAogI2luY2x1ZGUgImRwdV9od191dGlsLmgiCiAjaW5jbHVkZSAiZHB1X2h3X2Jsay5oIgogI2lu Y2x1ZGUgImRwdV9mb3JtYXRzLmgiCi0jaW5jbHVkZSAiZHB1X2NvbG9yX3Byb2Nlc3NpbmcuaCIK IAogc3RydWN0IGRwdV9od19waXBlOwogCkBAIC0xNjAsMTIgKzE1OSw2IEBAIHN0cnVjdCBkcHVf aHdfcGl4ZWxfZXh0IHsKICAqIEBzcmNfcmVjdDogIHNyYyBST0ksIGNhbGxlciB0YWtlcyBpbnRv IGFjY291bnQgdGhlIGRpZmZlcmVudCBvcGVyYXRpb25zCiAgKiAgICAgICAgICAgICBzdWNoIGFz IGRlY2ltYXRpb24sIGZsaXAgZXRjIHRvIHByb2dyYW0gdGhpcyBmaWVsZAogICogQGRlc3RfcmVj dDogZGVzdGluYXRpb24gUk9JLgotICogQCBob3J6X2RlY2ltYXRpb24gOiBob3Jpem9udGFsIGRl Y2ltYXRpb24gZmFjdG9yKCAwLCAyLCA0LCA4LCAxNikKLSAqIEAgdmVydF9kZWNpbWF0aW9uIDog dmVydGljYWwgZGVjaW1hdGlvbiBmYWN0b3IoIDAsIDIsIDQsIDgsIDE2KQotICogICAgICAgICAg ICAgIDI6IFJlYWQgMSBsaW5lL3BpeGVsIGRyb3AgMSBsaW5lL3BpeGVsCi0gKiAgICAgICAgICAg ICAgNDogUmVhZCAxIGxpbmUvcGl4ZWwgZHJvcCAzICBsaW5lcy9waXhlbHMKLSAqICAgICAgICAg ICAgICA4OiBSZWFkIDEgbGluZS9waXhlbCBkcm9wIDcgbGluZXMvcGl4ZWxzCi0gKiAgICAgICAg ICAgICAgMTY6IFJlYWQgMSBsaW5lL3BpeGVsIGRyb3AgMTUgbGluZS9waXhlbHMKICAqIEBpbmRl eDogICAgIGluZGV4IG9mIHRoZSByZWN0YW5nbGUgb2YgU1NQUAogICogQG1vZGU6ICAgICAgcGFy YWxsZWwgb3IgdGltZSBtdWx0aXBsZXggbXVsdGlyZWN0IG1vZGUKICAqLwpAQCAtMTczLDggKzE2 Niw2IEBAIHN0cnVjdCBkcHVfaHdfcGlwZV9jZmcgewogCXN0cnVjdCBkcHVfaHdfZm10X2xheW91 dCBsYXlvdXQ7CiAJc3RydWN0IGRwdV9yZWN0IHNyY19yZWN0OwogCXN0cnVjdCBkcHVfcmVjdCBk c3RfcmVjdDsKLQl1OCBob3J6X2RlY2ltYXRpb247Ci0JdTggdmVydF9kZWNpbWF0aW9uOwogCWVu dW0gZHB1X3NzcHBfbXVsdGlyZWN0X2luZGV4IGluZGV4OwogCWVudW0gZHB1X3NzcHBfbXVsdGly ZWN0X21vZGUgbW9kZTsKIH07CkBAIC0yNjksMTYgKzI2MCw2IEBAIHN0cnVjdCBkcHVfaHdfc3Nw cF9vcHMgewogCQkJc3RydWN0IGRwdV9od19waXhlbF9leHQgKnBlX2V4dCk7CiAKIAkvKioKLQkg KiBzZXR1cF9leGNsX3JlY3QgLSBzZXR1cCBwaXBlIGV4Y2x1c2lvbiByZWN0YW5nbGUKLQkgKiBA Y3R4OiBQb2ludGVyIHRvIHBpcGUgY29udGV4dAotCSAqIEBleGNsX3JlY3Q6IFBvaW50ZXIgdG8g ZXhjbGNsdXNpb24gcmVjdCBzdHJ1Y3R1cmUKLQkgKiBAaW5kZXg6IHJlY3RhbmdsZSBpbmRleCBp biBtdWx0aXJlY3QKLQkgKi8KLQl2b2lkICgqc2V0dXBfZXhjbF9yZWN0KShzdHJ1Y3QgZHB1X2h3 X3BpcGUgKmN0eCwKLQkJCXN0cnVjdCBkcHVfcmVjdCAqZXhjbF9yZWN0LAotCQkJZW51bSBkcHVf c3NwcF9tdWx0aXJlY3RfaW5kZXggaW5kZXgpOwotCi0JLyoqCiAJICogc2V0dXBfc291cmNlYWRk cmVzcyAtIHNldHVwIHBpcGUgc291cmNlIGFkZHJlc3NlcwogCSAqIEBjdHg6IFBvaW50ZXIgdG8g cGlwZSBjb250ZXh0CiAJICogQGNmZzogUG9pbnRlciB0byBwaXBlIGNvbmZpZyBzdHJ1Y3R1cmUK QEAgLTMyNCw1MCArMzA1LDYgQEAgc3RydWN0IGRwdV9od19zc3BwX29wcyB7CiAJdm9pZCAoKnNl dHVwX3NoYXJwZW5pbmcpKHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4LAogCQkJc3RydWN0IGRwdV9o d19zaGFycF9jZmcgKmNmZyk7CiAKLQotCS8qKgotCSAqIHNldHVwX3BhX2h1ZSgpOiBTZXR1cCBz b3VyY2UgaHVlIGFkanVzdG1lbnQKLQkgKiBAY3R4OiBQb2ludGVyIHRvIHBpcGUgY29udGV4dAot CSAqIEBjZmc6IFBvaW50ZXIgdG8gaHVlIGRhdGEKLQkgKi8KLQl2b2lkICgqc2V0dXBfcGFfaHVl KShzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwgdm9pZCAqY2ZnKTsKLQotCS8qKgotCSAqIHNldHVw X3BhX3NhdCgpOiBTZXR1cCBzb3VyY2Ugc2F0dXJhdGlvbiBhZGp1c3RtZW50Ci0JICogQGN0eDog UG9pbnRlciB0byBwaXBlIGNvbnRleHQKLQkgKiBAY2ZnOiBQb2ludGVyIHRvIHNhdHVyYXRpb24g ZGF0YQotCSAqLwotCXZvaWQgKCpzZXR1cF9wYV9zYXQpKHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4 LCB2b2lkICpjZmcpOwotCi0JLyoqCi0JICogc2V0dXBfcGFfdmFsKCk6IFNldHVwIHNvdXJjZSB2 YWx1ZSBhZGp1c3RtZW50Ci0JICogQGN0eDogUG9pbnRlciB0byBwaXBlIGNvbnRleHQKLQkgKiBA Y2ZnOiBQb2ludGVyIHRvIHZhbHVlIGRhdGEKLQkgKi8KLQl2b2lkICgqc2V0dXBfcGFfdmFsKShz dHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwgdm9pZCAqY2ZnKTsKLQotCS8qKgotCSAqIHNldHVwX3Bh X2NvbnQoKTogU2V0dXAgc291cmNlIGNvbnRyYXN0IGFkanVzdG1lbnQKLQkgKiBAY3R4OiBQb2lu dGVyIHRvIHBpcGUgY29udGV4dAotCSAqIEBjZmc6IFBvaW50ZXIgY29udHJhc3QgZGF0YQotCSAq LwotCXZvaWQgKCpzZXR1cF9wYV9jb250KShzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwgdm9pZCAq Y2ZnKTsKLQotCS8qKgotCSAqIHNldHVwX3BhX21lbWNvbG9yIC0gc2V0dXAgc291cmNlIGNvbG9y IHByb2Nlc3NpbmcKLQkgKiBAY3R4OiBQb2ludGVyIHRvIHBpcGUgY29udGV4dAotCSAqIEB0eXBl OiBNZW1jb2xvciB0eXBlIChTa2luLCBza3kgb3IgZm9saWFnZSkKLQkgKiBAY2ZnOiBQb2ludGVy IHRvIG1lbW9yeSBjb2xvciBjb25maWcgZGF0YQotCSAqLwotCXZvaWQgKCpzZXR1cF9wYV9tZW1j b2xvcikoc3RydWN0IGRwdV9od19waXBlICpjdHgsCi0JCQllbnVtIGRwdV9tZW1jb2xvcl90eXBl IHR5cGUsIHZvaWQgKmNmZyk7Ci0KLQkvKioKLQkgKiBzZXR1cF9pZ2MgLSBzZXR1cCBpbnZlcnNl IGdhbW1hIGNvcnJlY3Rpb24KLQkgKiBAY3R4OiBQb2ludGVyIHRvIHBpcGUgY29udGV4dAotCSAq LwotCXZvaWQgKCpzZXR1cF9pZ2MpKHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4KTsKLQogCS8qKgog CSAqIHNldHVwX2Rhbmdlcl9zYWZlX2x1dCAtIHNldHVwIGRhbmdlciBzYWZlIExVVHMKIAkgKiBA Y3R4OiBQb2ludGVyIHRvIHBpcGUgY29udGV4dApAQCAtNDIyLDE2ICszNTksNiBAQCBzdHJ1Y3Qg ZHB1X2h3X3NzcHBfb3BzIHsKIAl1MzIgKCpnZXRfc2NhbGVyX3Zlcikoc3RydWN0IGRwdV9od19w aXBlICpjdHgpOwogCiAJLyoqCi0JICogc2V0dXBfdHNfcHJlZmlsbCAtIHNldHVwIHByZWZpbGwg dHJhZmZpYyBzaGFwZXIKLQkgKiBAY3R4OiBQb2ludGVyIHRvIHBpcGUgY29udGV4dAotCSAqIEBj Zmc6IFBvaW50ZXIgdG8gdHJhZmZpYyBzaGFwZXIgY29uZmlndXJhdGlvbgotCSAqIEBpbmRleDog cmVjdGFuZ2xlIGluZGV4IGluIG11bHRpcmVjdAotCSAqLwotCXZvaWQgKCpzZXR1cF90c19wcmVm aWxsKShzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwKLQkJCXN0cnVjdCBkcHVfaHdfcGlwZV90c19j ZmcgKmNmZywKLQkJCWVudW0gZHB1X3NzcHBfbXVsdGlyZWN0X2luZGV4IGluZGV4KTsKLQotCS8q KgogCSAqIHNldHVwX2NkcCAtIHNldHVwIGNsaWVudCBkcml2ZW4gcHJlZmV0Y2gKIAkgKiBAY3R4 OiBQb2ludGVyIHRvIHBpcGUgY29udGV4dAogCSAqIEBjZmc6IFBvaW50ZXIgdG8gY2RwIGNvbmZp Z3VyYXRpb24KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9o d191dGlsLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfdXRpbC5jCmlu ZGV4IDAxOWE4ZmEuLjFiYTU3MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9od191dGlsLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2h3X3V0aWwuYwpAQCAtMTEsNyArMTEsNiBAQAogICovCiAjZGVmaW5lIHByX2ZtdChmbXQp CSJbZHJtOiVzOiVkXSAiIGZtdCwgX19mdW5jX18sIF9fTElORV9fCiAKLSNpbmNsdWRlIDx1YXBp L2RybS9kcHVfZHJtLmg+CiAjaW5jbHVkZSAibXNtX2Rydi5oIgogI2luY2x1ZGUgImRwdV9rbXMu aCIKICNpbmNsdWRlICJkcHVfaHdfbWRzcy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2h3X3V0aWwuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9od191dGlsLmgKaW5kZXggZDkyY2FmYi4uNDJmMWIyMiAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3V0aWwuaAorKysgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfdXRpbC5oCkBAIC0xNTgsNiArMTU4LDE2MiBAQCBz dHJ1Y3QgZHB1X2h3X3NjYWxlcjNfbHV0X2NmZyB7CiAJc2l6ZV90IHNlcF9sZW47CiB9OwogCisv KioKKyAqIHN0cnVjdCBkcHVfZHJtX3BpeF9leHRfdjEgLSB2ZXJzaW9uIDEgb2YgcGl4ZWwgZXh0 IHN0cnVjdHVyZQorICogQG51bV9leHRfcHhsc19scjogTnVtYmVyIG9mIHRvdGFsIGhvcml6b250 YWwgcGl4ZWxzCisgKiBAbnVtX2V4dF9weGxzX3RiOiBOdW1iZXIgb2YgdG90YWwgdmVydGljYWwg bGluZXMKKyAqIEBsZWZ0X2Z0Y2g6ICAgICAgIE51bWJlciBvZiBleHRyYSBwaXhlbHMgdG8gb3Zl cmZldGNoIGZyb20gbGVmdAorICogQHJpZ2h0X2Z0Y2g6ICAgICAgTnVtYmVyIG9mIGV4dHJhIHBp eGVscyB0byBvdmVyZmV0Y2ggZnJvbSByaWdodAorICogQHRvcF9mdGNoOiAgICAgICAgTnVtYmVy IG9mIGV4dHJhIGxpbmVzIHRvIG92ZXJmZXRjaCBmcm9tIHRvcAorICogQGJ0bV9mdGNoOiAgICAg ICAgTnVtYmVyIG9mIGV4dHJhIGxpbmVzIHRvIG92ZXJmZXRjaCBmcm9tIGJvdHRvbQorICogQGxl ZnRfcnB0OiAgICAgICAgTnVtYmVyIG9mIGV4dHJhIHBpeGVscyB0byByZXBlYXQgZnJvbSBsZWZ0 CisgKiBAcmlnaHRfcnB0OiAgICAgICBOdW1iZXIgb2YgZXh0cmEgcGl4ZWxzIHRvIHJlcGVhdCBm cm9tIHJpZ2h0CisgKiBAdG9wX3JwdDogICAgICAgICBOdW1iZXIgb2YgZXh0cmEgbGluZXMgdG8g cmVwZWF0IGZyb20gdG9wCisgKiBAYnRtX3JwdDogICAgICAgICBOdW1iZXIgb2YgZXh0cmEgbGlu ZXMgdG8gcmVwZWF0IGZyb20gYm90dG9tCisgKi8KK3N0cnVjdCBkcHVfZHJtX3BpeF9leHRfdjEg eworCS8qCisJICogTnVtYmVyIG9mIHBpeGVscyBleHQgaW4gbGVmdCwgcmlnaHQsIHRvcCBhbmQg Ym90dG9tIGRpcmVjdGlvbgorCSAqIGZvciBhbGwgY29sb3IgY29tcG9uZW50cy4KKwkgKi8KKwlp bnQzMl90IG51bV9leHRfcHhsc19scltEUFVfTUFYX1BMQU5FU107CisJaW50MzJfdCBudW1fZXh0 X3B4bHNfdGJbRFBVX01BWF9QTEFORVNdOworCisJLyoKKwkgKiBOdW1iZXIgb2YgcGl4ZWxzIG5l ZWRzIHRvIGJlIG92ZXJmZXRjaGVkIGluIGxlZnQsIHJpZ2h0LCB0b3AKKwkgKiBhbmQgYm90dG9t IGRpcmVjdGlvbnMgZnJvbSBzb3VyY2UgaW1hZ2UgZm9yIHNjYWxpbmcuCisJICovCisJaW50MzJf dCBsZWZ0X2Z0Y2hbRFBVX01BWF9QTEFORVNdOworCWludDMyX3QgcmlnaHRfZnRjaFtEUFVfTUFY X1BMQU5FU107CisJaW50MzJfdCB0b3BfZnRjaFtEUFVfTUFYX1BMQU5FU107CisJaW50MzJfdCBi dG1fZnRjaFtEUFVfTUFYX1BMQU5FU107CisJLyoKKwkgKiBOdW1iZXIgb2YgcGl4ZWxzIG5lZWRz IHRvIGJlIHJlcGVhdGVkIGluIGxlZnQsIHJpZ2h0LCB0b3AgYW5kCisJICogYm90dG9tIGRpcmVj dGlvbnMgZm9yIHNjYWxpbmcuCisJICovCisJaW50MzJfdCBsZWZ0X3JwdFtEUFVfTUFYX1BMQU5F U107CisJaW50MzJfdCByaWdodF9ycHRbRFBVX01BWF9QTEFORVNdOworCWludDMyX3QgdG9wX3Jw dFtEUFVfTUFYX1BMQU5FU107CisJaW50MzJfdCBidG1fcnB0W0RQVV9NQVhfUExBTkVTXTsKKwor fTsKKworLyoqCisgKiBzdHJ1Y3QgZHB1X2RybV9kZV92MSAtIHZlcnNpb24gMSBvZiBkZXRhaWwg ZW5oYW5jZXIgc3RydWN0dXJlCisgKiBAZW5hYmxlOiAgICAgICAgIEVuYWJsZXMvZGlzYWJsZXMg ZGV0YWlsIGVuaGFuY2VyCisgKiBAc2hhcnBlbl9sZXZlbDE6IFNoYXJwZW5pbmcgc3RyZW5ndGgg Zm9yIG5vaXNlCisgKiBAc2hhcnBlbl9sZXZlbDI6IFNoYXJwZW5pbmcgc3RyZW5ndGggZm9yIGNv bnRleHQKKyAqIEBjbGlwOiAgICAgICAgICAgQ2xpcCBjb2VmZmljaWVudAorICogQGxpbWl0OiAg ICAgICAgICBEZXRhaWwgZW5oYW5jZXIgbGltaXQgZmFjdG9yCisgKiBAdGhyX3F1aWV0OiAgICAg IFF1aXRlIHpvbmUgdGhyZXNob2xkCisgKiBAdGhyX2RpZW91dDogICAgIERpZS1vdXQgem9uZSB0 aHJlc2hvbGQKKyAqIEB0aHJfbG93OiAgICAgICAgTGluZWFyIHpvbmUgbGVmdCB0aHJlc2hvbGQK KyAqIEB0aHJfaGlnaDogICAgICAgTGluZWFyIHpvbmUgcmlnaHQgdGhyZXNob2xkCisgKiBAcHJl Y19zaGlmdDogICAgIERldGFpbCBlbmhhbmNlciBwcmVjaXNpb24KKyAqIEBhZGp1c3RfYTogICAg ICAgTWFwcGluZyBjdXJ2ZXMgQSBjb2VmZmljaWVudHMKKyAqIEBhZGp1c3RfYjogICAgICAgTWFw cGluZyBjdXJ2ZXMgQiBjb2VmZmljaWVudHMKKyAqIEBhZGp1c3RfYzogICAgICAgTWFwcGluZyBj dXJ2ZXMgQyBjb2VmZmljaWVudHMKKyAqLworc3RydWN0IGRwdV9kcm1fZGVfdjEgeworCXVpbnQz Ml90IGVuYWJsZTsKKwlpbnQxNl90IHNoYXJwZW5fbGV2ZWwxOworCWludDE2X3Qgc2hhcnBlbl9s ZXZlbDI7CisJdWludDE2X3QgY2xpcDsKKwl1aW50MTZfdCBsaW1pdDsKKwl1aW50MTZfdCB0aHJf cXVpZXQ7CisJdWludDE2X3QgdGhyX2RpZW91dDsKKwl1aW50MTZfdCB0aHJfbG93OworCXVpbnQx Nl90IHRocl9oaWdoOworCXVpbnQxNl90IHByZWNfc2hpZnQ7CisJaW50MTZfdCBhZGp1c3RfYVtE UFVfTUFYX0RFX0NVUlZFU107CisJaW50MTZfdCBhZGp1c3RfYltEUFVfTUFYX0RFX0NVUlZFU107 CisJaW50MTZfdCBhZGp1c3RfY1tEUFVfTUFYX0RFX0NVUlZFU107Cit9OworCisvKioKKyAqIHN0 cnVjdCBkcHVfZHJtX3NjYWxlcl92MiAtIHZlcnNpb24gMiBvZiBzdHJ1Y3QgZHB1X2RybV9zY2Fs ZXIKKyAqIEBlbmFibGU6ICAgICAgICAgICAgU2NhbGVyIGVuYWJsZQorICogQGRpcl9lbjogICAg ICAgICAgICBEZXRhaWwgZW5oYW5jZXIgZW5hYmxlCisgKiBAcGU6ICAgICAgICAgICAgICAgIFBp eGVsIGV4dGVuc2lvbiBzZXR0aW5ncworICogQGhvcnpfZGVjaW1hdGU6ICAgICBIb3Jpem9udGFs IGRlY2ltYXRpb24gZmFjdG9yCisgKiBAdmVydF9kZWNpbWF0ZTogICAgIFZlcnRpY2FsIGRlY2lt YXRpb24gZmFjdG9yCisgKiBAaW5pdF9waGFzZV94OiAgICAgIEluaXRpYWwgc2NhbGVyIHBoYXNl IHZhbHVlcyBmb3IgeAorICogQHBoYXNlX3N0ZXBfeDogICAgICBQaGFzZSBzdGVwIHZhbHVlcyBm b3IgeAorICogQGluaXRfcGhhc2VfeTogICAgICBJbml0aWFsIHNjYWxlciBwaGFzZSB2YWx1ZXMg Zm9yIHkKKyAqIEBwaGFzZV9zdGVwX3k6ICAgICAgUGhhc2Ugc3RlcCB2YWx1ZXMgZm9yIHkKKyAq IEBwcmVsb2FkX3g6ICAgICAgICAgSG9yaXpvbnRhbCBwcmVsb2FkIHZhbHVlCisgKiBAcHJlbG9h ZF95OiAgICAgICAgIFZlcnRpY2FsIHByZWxvYWQgdmFsdWUKKyAqIEBzcmNfd2lkdGg6ICAgICAg ICAgU291cmNlIHdpZHRoCisgKiBAc3JjX2hlaWdodDogICAgICAgIFNvdXJjZSBoZWlnaHQKKyAq IEBkc3Rfd2lkdGg6ICAgICAgICAgRGVzdGluYXRpb24gd2lkdGgKKyAqIEBkc3RfaGVpZ2h0OiAg ICAgICAgRGVzdGluYXRpb24gaGVpZ2h0CisgKiBAeV9yZ2JfZmlsdGVyX2NmZzogIFkvUkdCIHBs YW5lIGZpbHRlciBjb25maWd1cmF0aW9uCisgKiBAdXZfZmlsdGVyX2NmZzogICAgIFVWIHBsYW5l IGZpbHRlciBjb25maWd1cmF0aW9uCisgKiBAYWxwaGFfZmlsdGVyX2NmZzogIEFscGhhIGZpbHRl ciBjb25maWd1cmF0aW9uCisgKiBAYmxlbmRfY2ZnOiAgICAgICAgIFNlbGVjdGlvbiBvZiBibGVu ZCBjb2VmZmljaWVudHMKKyAqIEBsdXRfZmxhZzogICAgICAgICAgTFVUIGNvbmZpZ3VyYXRpb24g ZmxhZ3MKKyAqIEBkaXJfbHV0X2lkeDogICAgICAgMmQgNHg0IExVVCBpbmRleAorICogQHlfcmdi X2Npcl9sdXRfaWR4OiBZL1JHQiBjaXJjdWxhciBMVVQgaW5kZXgKKyAqIEB1dl9jaXJfbHV0X2lk eDogICAgVVYgY2lyY3VsYXIgTFVUIGluZGV4CisgKiBAeV9yZ2Jfc2VwX2x1dF9pZHg6IFkvUkdC IHNlcGFyYWJsZSBMVVQgaW5kZXgKKyAqIEB1dl9zZXBfbHV0X2lkeDogICAgVVYgc2VwYXJhYmxl IExVVCBpbmRleAorICogQGRlOiAgICAgICAgICAgICAgICBEZXRhaWwgZW5oYW5jZXIgc2V0dGlu Z3MKKyAqLworc3RydWN0IGRwdV9kcm1fc2NhbGVyX3YyIHsKKwkvKgorCSAqIEdlbmVyYWwgZGVm aW5pdGlvbnMKKwkgKi8KKwl1aW50MzJfdCBlbmFibGU7CisJdWludDMyX3QgZGlyX2VuOworCisJ LyoKKwkgKiBQaXggZXh0IHNldHRpbmdzCisJICovCisJc3RydWN0IGRwdV9kcm1fcGl4X2V4dF92 MSBwZTsKKworCS8qCisJICogRGVjaW1hdGlvbiBzZXR0aW5ncworCSAqLworCXVpbnQzMl90IGhv cnpfZGVjaW1hdGU7CisJdWludDMyX3QgdmVydF9kZWNpbWF0ZTsKKworCS8qCisJICogUGhhc2Ug c2V0dGluZ3MKKwkgKi8KKwlpbnQzMl90IGluaXRfcGhhc2VfeFtEUFVfTUFYX1BMQU5FU107CisJ aW50MzJfdCBwaGFzZV9zdGVwX3hbRFBVX01BWF9QTEFORVNdOworCWludDMyX3QgaW5pdF9waGFz ZV95W0RQVV9NQVhfUExBTkVTXTsKKwlpbnQzMl90IHBoYXNlX3N0ZXBfeVtEUFVfTUFYX1BMQU5F U107CisKKwl1aW50MzJfdCBwcmVsb2FkX3hbRFBVX01BWF9QTEFORVNdOworCXVpbnQzMl90IHBy ZWxvYWRfeVtEUFVfTUFYX1BMQU5FU107CisJdWludDMyX3Qgc3JjX3dpZHRoW0RQVV9NQVhfUExB TkVTXTsKKwl1aW50MzJfdCBzcmNfaGVpZ2h0W0RQVV9NQVhfUExBTkVTXTsKKworCXVpbnQzMl90 IGRzdF93aWR0aDsKKwl1aW50MzJfdCBkc3RfaGVpZ2h0OworCisJdWludDMyX3QgeV9yZ2JfZmls dGVyX2NmZzsKKwl1aW50MzJfdCB1dl9maWx0ZXJfY2ZnOworCXVpbnQzMl90IGFscGhhX2ZpbHRl cl9jZmc7CisJdWludDMyX3QgYmxlbmRfY2ZnOworCisJdWludDMyX3QgbHV0X2ZsYWc7CisJdWlu dDMyX3QgZGlyX2x1dF9pZHg7CisKKwkvKiBmb3IgWShSR0IpIGFuZCBVViBwbGFuZXMqLworCXVp bnQzMl90IHlfcmdiX2Npcl9sdXRfaWR4OworCXVpbnQzMl90IHV2X2Npcl9sdXRfaWR4OworCXVp bnQzMl90IHlfcmdiX3NlcF9sdXRfaWR4OworCXVpbnQzMl90IHV2X3NlcF9sdXRfaWR4OworCisJ LyoKKwkgKiBEZXRhaWwgZW5oYW5jZXIgc2V0dGluZ3MKKwkgKi8KKwlzdHJ1Y3QgZHB1X2RybV9k ZV92MSBkZTsKK307CisKKwogdTMyICpkcHVfaHdfdXRpbF9nZXRfbG9nX21hc2tfcHRyKHZvaWQp OwogCiB2b2lkIGRwdV9yZWdfd3JpdGUoc3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAqYywKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuYyBiL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuYwppbmRleCAwNmFkYjM4Li5lNDNlMWRk IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5jCkBAIC0zNSw3ICszNSw2 IEBACiAjaW5jbHVkZSAiZHB1X2VuY29kZXIuaCIKICNpbmNsdWRlICJkcHVfcGxhbmUuaCIKICNp bmNsdWRlICJkcHVfY3J0Yy5oIgotI2luY2x1ZGUgImRwdV9yZWdfZG1hLmgiCiAKICNkZWZpbmUg Q1JFQVRFX1RSQUNFX1BPSU5UUwogI2luY2x1ZGUgImRwdV90cmFjZS5oIgpAQCAtMTEwNyw4ICsx MTA2LDYgQEAgc3RhdGljIHZvaWQgX2RwdV9rbXNfaHdfZGVzdHJveShzdHJ1Y3QgZHB1X2ttcyAq ZHB1X2ttcywKIAlpZiAoZHB1X2ttcy0+bW1pbykKIAkJbXNtX2lvdW5tYXAocGRldiwgZHB1X2tt cy0+bW1pbyk7CiAJZHB1X2ttcy0+bW1pbyA9IE5VTEw7Ci0KLQlkcHVfcmVnX2RtYV9kZWluaXQo KTsKIH0KIAogaW50IGRwdV9rbXNfbW11X2RldGFjaChzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcywg Ym9vbCBzZWN1cmVfb25seSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5l LmMKaW5kZXggYmE1MjMwZC4uMzZlM2MxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X3BsYW5lLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X3BsYW5lLmMKQEAgLTIwLDkgKzIwLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2RlYnVn ZnMuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+Ci0jaW5jbHVkZSA8dWFwaS9kcm0vZHB1 X2RybS5oPgotI2luY2x1ZGUgPHVhcGkvZHJtL21zbV9kcm1fcHAuaD4KLQogI2luY2x1ZGUgIm1z bV9wcm9wLmgiCiAjaW5jbHVkZSAibXNtX2Rydi5oIgogCkBAIC0zNCw3ICszMSw2IEBACiAjaW5j bHVkZSAiZHB1X2NydGMuaCIKICNpbmNsdWRlICJkcHVfdmJpZi5oIgogI2luY2x1ZGUgImRwdV9w bGFuZS5oIgotI2luY2x1ZGUgImRwdV9jb2xvcl9wcm9jZXNzaW5nLmgiCiAKIHN0YXRpYyBib29s IHN1c3BlbmRfYmxhbmsgPSB0cnVlOwogbW9kdWxlX3BhcmFtKHN1c3BlbmRfYmxhbmssIGJvb2ws IDA0MDApOwpAQCAtOTMsOCArODksNiBAQCBlbnVtIGRwdV9wbGFuZV9xb3MgewogLyoKICAqIHN0 cnVjdCBkcHVfcGxhbmUgLSBsb2NhbCBkcHUgcGxhbmUgc3RydWN0dXJlCiAgKiBAYXNwYWNlOiBh ZGRyZXNzIHNwYWNlIHBvaW50ZXIKLSAqIEBjc2NfY2ZnOiBEZWNvZGVkIHVzZXIgY29uZmlndXJh dGlvbiBmb3IgY3NjCi0gKiBAY3NjX3Vzcl9wdHI6IFBvaW50cyB0byBjc2NfY2ZnIGlmIHZhbGlk IHVzZXIgY29uZmlnIGF2YWlsYWJsZQogICogQGNzY19wdHI6IFBvaW50cyB0byBkcHVfY3NjX2Nm ZyBzdHJ1Y3R1cmUgdG8gdXNlIGZvciBjdXJyZW50CiAgKiBAbXBsYW5lX2xpc3Q6IExpc3Qgb2Yg bXVsdGlyZWN0IHBsYW5lcyBvZiB0aGUgc2FtZSBwaXBlCiAgKiBAY2F0YWxvZzogUG9pbnRzIHRv IGRwdSBjYXRhbG9nIHN0cnVjdHVyZQpAQCAtMTEyLDcgKzEwNiw2IEBAIHN0cnVjdCBkcHVfcGxh bmUgewogCiAJc3RydWN0IGRwdV9od19waXBlICpwaXBlX2h3OwogCXN0cnVjdCBkcHVfaHdfcGlw ZV9jZmcgcGlwZV9jZmc7Ci0Jc3RydWN0IGRwdV9od19zaGFycF9jZmcgc2hhcnBfY2ZnOwogCXN0 cnVjdCBkcHVfaHdfcGlwZV9xb3NfY2ZnIHBpcGVfcW9zX2NmZzsKIAl1aW50MzJfdCBjb2xvcl9m aWxsOwogCWJvb2wgaXNfZXJyb3I7CkBAIC0xMjAsMTYgKzExMywxMSBAQCBzdHJ1Y3QgZHB1X3Bs YW5lIHsKIAlib29sIGlzX3ZpcnR1YWw7CiAJc3RydWN0IGxpc3RfaGVhZCBtcGxhbmVfbGlzdDsK IAlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpjYXRhbG9nOwotCWJvb2wgcmV2YWxpZGF0ZTsKIAotCXN0 cnVjdCBkcHVfY3NjX2NmZyBjc2NfY2ZnOwotCXN0cnVjdCBkcHVfY3NjX2NmZyAqY3NjX3Vzcl9w dHI7CiAJc3RydWN0IGRwdV9jc2NfY2ZnICpjc2NfcHRyOwogCiAJY29uc3Qgc3RydWN0IGRwdV9z c3BwX3N1Yl9ibGtzICpwaXBlX3NibGs7Ci0KIAljaGFyIHBpcGVfbmFtZVtEUFVfTkFNRV9TSVpF XTsKLQogCXN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyBwcm9wZXJ0eV9pbmZvOwogCXN0cnVjdCBt c21fcHJvcGVydHlfZGF0YSBwcm9wZXJ0eV9kYXRhW1BMQU5FX1BST1BfQ09VTlRdOwogCXN0cnVj dCBkcm1fcHJvcGVydHlfYmxvYiAqYmxvYl9pbmZvOwpAQCAtNDQyLDE3ICs0MzAsNiBAQCBzdGF0 aWMgdm9pZCBfZHB1X3BsYW5lX3NldF9xb3NfY3RybChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwK IAkJCSZwZHB1LT5waXBlX3Fvc19jZmcpOwogfQogCi12b2lkIGRwdV9wbGFuZV9zZXRfcmV2YWxp ZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwgYm9vbCBlbmFibGUpCi17Ci0Jc3RydWN0IGRw dV9wbGFuZSAqcGRwdTsKLQotCWlmICghcGxhbmUpCi0JCXJldHVybjsKLQotCXBkcHUgPSB0b19k cHVfcGxhbmUocGxhbmUpOwotCXBkcHUtPnJldmFsaWRhdGUgPSBlbmFibGU7Ci19Ci0KIGludCBk cHVfcGxhbmVfZGFuZ2VyX3NpZ25hbF9jdHJsKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLCBib29s IGVuYWJsZSkKIHsKIAlzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1OwpAQCAtNTc4LDU1ICs1NTUsNiBA QCBzdGF0aWMgdm9pZCBfZHB1X3BsYW5lX3NldF9xb3NfcmVtYXAoc3RydWN0IGRybV9wbGFuZSAq cGxhbmUpCiB9CiAKIC8qKgotICogX2RwdV9wbGFuZV9zZXRfdHNfcHJlZmlsbCAtIHNldCBwcmVm aWxsIHdpdGggdHJhZmZpYyBzaGFwZXIKLSAqIEBwbGFuZToJUG9pbnRlciB0byBkcm0gcGxhbmUK LSAqIEBwc3RhdGU6CVBvaW50ZXIgdG8gZHB1IHBsYW5lIHN0YXRlCi0gKi8KLXN0YXRpYyB2b2lk IF9kcHVfcGxhbmVfc2V0X3RzX3ByZWZpbGwoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCi0JCXN0 cnVjdCBkcHVfcGxhbmVfc3RhdGUgKnBzdGF0ZSkKLXsKLQlzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1 OwotCXN0cnVjdCBkcHVfaHdfcGlwZV90c19jZmcgY2ZnOwotCXN0cnVjdCBtc21fZHJtX3ByaXZh dGUgKnByaXY7Ci0Jc3RydWN0IGRwdV9rbXMgKmRwdV9rbXM7Ci0KLQlpZiAoIXBsYW5lIHx8ICFw bGFuZS0+ZGV2KSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVudHMiKTsKLQkJcmV0dXJu OwotCX0KLQotCXByaXYgPSBwbGFuZS0+ZGV2LT5kZXZfcHJpdmF0ZTsKLQlpZiAoIXByaXYgfHwg IXByaXYtPmttcykgewotCQlEUFVfRVJST1IoImludmFsaWQgS01TIHJlZmVyZW5jZVxuIik7Ci0J CXJldHVybjsKLQl9Ci0KLQlkcHVfa21zID0gdG9fZHB1X2ttcyhwcml2LT5rbXMpOwotCXBkcHUg PSB0b19kcHVfcGxhbmUocGxhbmUpOwotCWlmICghcGRwdS0+cGlwZV9odykgewotCQlEUFVfRVJS T1IoImludmFsaWQgcGlwZSByZWZlcmVuY2VcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKCFw ZHB1LT5waXBlX2h3IHx8ICFwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfdHNfcHJlZmlsbCkKLQkJ cmV0dXJuOwotCi0JX2RwdV9wbGFuZV9zZXRfcW9zX2N0cmwocGxhbmUsIGZhbHNlLCBEUFVfUExB TkVfUU9TX1ZCTEFOS19BTU9SVElaRSk7Ci0KLQltZW1zZXQoJmNmZywgMCwgc2l6ZW9mKGNmZykp OwotCWNmZy5zaXplID0gZHB1X3BsYW5lX2dldF9wcm9wZXJ0eShwc3RhdGUsCi0JCQlQTEFORV9Q Uk9QX1BSRUZJTExfU0laRSk7Ci0JY2ZnLnRpbWUgPSBkcHVfcGxhbmVfZ2V0X3Byb3BlcnR5KHBz dGF0ZSwKLQkJCVBMQU5FX1BST1BfUFJFRklMTF9USU1FKTsKLQotCURQVV9ERUJVRygicGxhbmUl ZCBzaXplOiVsbHUgdGltZTolbGx1XG4iLAotCQkJcGxhbmUtPmJhc2UuaWQsIGNmZy5zaXplLCBj ZmcudGltZSk7Ci0JRFBVX0VWVDMyX1ZFUkJPU0UoRFJNSUQocGxhbmUpLCBjZmcuc2l6ZSwgY2Zn LnRpbWUpOwotCXBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF90c19wcmVmaWxsKHBkcHUtPnBpcGVf aHcsICZjZmcsCi0JCQlwc3RhdGUtPm11bHRpcmVjdF9pbmRleCk7Ci19Ci0KLS8qKgogICogX2Rw dV9wbGFuZV9nZXRfYXNwYWNlOiBnZXRzIHRoZSBhZGRyZXNzIHNwYWNlCiAgKi8KIHN0YXRpYyBp bnQgX2RwdV9wbGFuZV9nZXRfYXNwYWNlKApAQCAtNzAzLDM2ICs2MzEsNiBAQCBzdGF0aWMgaW5s aW5lIHZvaWQgX2RwdV9wbGFuZV9zZXRfc2Nhbm91dChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwK IAl9CiB9CiAKLXN0YXRpYyBpbnQgX2RwdV9wbGFuZV9zZXR1cF9zY2FsZXIzX2x1dChzdHJ1Y3Qg ZHB1X3BsYW5lICpwZHB1LAotCQlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpwc3RhdGUpCi17Ci0J c3RydWN0IGRwdV9od19zY2FsZXIzX2NmZyAqY2ZnOwotCWludCByZXQgPSAwOwotCi0JaWYgKCFw ZHB1IHx8ICFwc3RhdGUpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3NcbiIpOwotCQlyZXR1 cm4gLUVJTlZBTDsKLQl9Ci0KLQljZmcgPSAmcHN0YXRlLT5zY2FsZXIzX2NmZzsKLQotCWNmZy0+ ZGlyX2x1dCA9IG1zbV9wcm9wZXJ0eV9nZXRfYmxvYigKLQkJCSZwZHB1LT5wcm9wZXJ0eV9pbmZv LAotCQkJJnBzdGF0ZS0+cHJvcGVydHlfc3RhdGUsICZjZmctPmRpcl9sZW4sCi0JCQlQTEFORV9Q Uk9QX1NDQUxFUl9MVVRfRUQpOwotCWNmZy0+Y2lyX2x1dCA9IG1zbV9wcm9wZXJ0eV9nZXRfYmxv YigKLQkJCSZwZHB1LT5wcm9wZXJ0eV9pbmZvLAotCQkJJnBzdGF0ZS0+cHJvcGVydHlfc3RhdGUs ICZjZmctPmNpcl9sZW4sCi0JCQlQTEFORV9QUk9QX1NDQUxFUl9MVVRfQ0lSKTsKLQljZmctPnNl cF9sdXQgPSBtc21fcHJvcGVydHlfZ2V0X2Jsb2IoCi0JCQkmcGRwdS0+cHJvcGVydHlfaW5mbywK LQkJCSZwc3RhdGUtPnByb3BlcnR5X3N0YXRlLCAmY2ZnLT5zZXBfbGVuLAotCQkJUExBTkVfUFJP UF9TQ0FMRVJfTFVUX1NFUCk7Ci0JaWYgKCFjZmctPmRpcl9sdXQgfHwgIWNmZy0+Y2lyX2x1dCB8 fCAhY2ZnLT5zZXBfbHV0KQotCQlyZXQgPSAtRU5PREFUQTsKLQlyZXR1cm4gcmV0OwotfQotCiBz dGF0aWMgdm9pZCBfZHB1X3BsYW5lX3NldHVwX3NjYWxlcjMoc3RydWN0IGRwdV9wbGFuZSAqcGRw dSwKIAkJc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlLAogCQl1aW50MzJfdCBzcmNfdywg dWludDMyX3Qgc3JjX2gsIHVpbnQzMl90IGRzdF93LCB1aW50MzJfdCBkc3RfaCwKQEAgLTc0MCw3 ICs2MzgsNyBAQCBzdGF0aWMgdm9pZCBfZHB1X3BsYW5lX3NldHVwX3NjYWxlcjMoc3RydWN0IGRw dV9wbGFuZSAqcGRwdSwKIAkJY29uc3Qgc3RydWN0IGRwdV9mb3JtYXQgKmZtdCwKIAkJdWludDMy X3QgY2hyb21hX3N1YnNtcGxfaCwgdWludDMyX3QgY2hyb21hX3N1YnNtcGxfdikKIHsKLQl1aW50 MzJfdCBkZWNpbWF0ZWQsIGk7CisJdWludDMyX3QgaTsKIAogCWlmICghcGRwdSB8fCAhcHN0YXRl IHx8ICFzY2FsZV9jZmcgfHwgIWZtdCB8fCAhY2hyb21hX3N1YnNtcGxfaCB8fAogCQkJIWNocm9t YV9zdWJzbXBsX3YpIHsKQEAgLTc1NCwxNCArNjUyLDEwIEBAIHN0YXRpYyB2b2lkIF9kcHVfcGxh bmVfc2V0dXBfc2NhbGVyMyhzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1LAogCW1lbXNldChzY2FsZV9j ZmcsIDAsIHNpemVvZigqc2NhbGVfY2ZnKSk7CiAJbWVtc2V0KCZwc3RhdGUtPnBpeGVsX2V4dCwg MCwgc2l6ZW9mKHN0cnVjdCBkcHVfaHdfcGl4ZWxfZXh0KSk7CiAKLQlkZWNpbWF0ZWQgPSBERUNJ TUFURURfRElNRU5TSU9OKHNyY193LAotCQkJcGRwdS0+cGlwZV9jZmcuaG9yel9kZWNpbWF0aW9u KTsKIAlzY2FsZV9jZmctPnBoYXNlX3N0ZXBfeFtEUFVfU1NQUF9DT01QXzBdID0KLQkJbXVsdF9m cmFjKCgxIDw8IFBIQVNFX1NURVBfU0hJRlQpLCBkZWNpbWF0ZWQsIGRzdF93KTsKLQlkZWNpbWF0 ZWQgPSBERUNJTUFURURfRElNRU5TSU9OKHNyY19oLAotCQkJcGRwdS0+cGlwZV9jZmcudmVydF9k ZWNpbWF0aW9uKTsKKwkJbXVsdF9mcmFjKCgxIDw8IFBIQVNFX1NURVBfU0hJRlQpLCBzcmNfdywg ZHN0X3cpOwogCXNjYWxlX2NmZy0+cGhhc2Vfc3RlcF95W0RQVV9TU1BQX0NPTVBfMF0gPQotCQlt dWx0X2ZyYWMoKDEgPDwgUEhBU0VfU1RFUF9TSElGVCksIGRlY2ltYXRlZCwgZHN0X2gpOworCQlt dWx0X2ZyYWMoKDEgPDwgUEhBU0VfU1RFUF9TSElGVCksIHNyY19oLCBkc3RfaCk7CiAKIAogCXNj YWxlX2NmZy0+cGhhc2Vfc3RlcF95W0RQVV9TU1BQX0NPTVBfMV8yXSA9CkBAIC03ODAsMTAgKzY3 NCw4IEBAIHN0YXRpYyB2b2lkIF9kcHVfcGxhbmVfc2V0dXBfc2NhbGVyMyhzdHJ1Y3QgZHB1X3Bs YW5lICpwZHB1LAogCQlzY2FsZV9jZmctPnBoYXNlX3N0ZXBfeVtEUFVfU1NQUF9DT01QXzBdOwog CiAJZm9yIChpID0gMDsgaSA8IERQVV9NQVhfUExBTkVTOyBpKyspIHsKLQkJc2NhbGVfY2ZnLT5z cmNfd2lkdGhbaV0gPSBERUNJTUFURURfRElNRU5TSU9OKHNyY193LAotCQkJCXBkcHUtPnBpcGVf Y2ZnLmhvcnpfZGVjaW1hdGlvbik7Ci0JCXNjYWxlX2NmZy0+c3JjX2hlaWdodFtpXSA9IERFQ0lN QVRFRF9ESU1FTlNJT04oc3JjX2gsCi0JCQkJcGRwdS0+cGlwZV9jZmcudmVydF9kZWNpbWF0aW9u KTsKKwkJc2NhbGVfY2ZnLT5zcmNfd2lkdGhbaV0gPSBzcmNfdzsKKwkJc2NhbGVfY2ZnLT5zcmNf aGVpZ2h0W2ldID0gc3JjX2g7CiAJCWlmIChpID09IERQVV9TU1BQX0NPTVBfMV8yIHx8IGkgPT0g RFBVX1NTUFBfQ09NUF8yKSB7CiAJCQlzY2FsZV9jZmctPnNyY193aWR0aFtpXSAvPSBjaHJvbWFf c3Vic21wbF9oOwogCQkJc2NhbGVfY2ZnLT5zcmNfaGVpZ2h0W2ldIC89IGNocm9tYV9zdWJzbXBs X3Y7CkBAIC04MDksMTU0ICs3MDEsNiBAQCBzdGF0aWMgdm9pZCBfZHB1X3BsYW5lX3NldHVwX3Nj YWxlcjMoc3RydWN0IGRwdV9wbGFuZSAqcGRwdSwKIAlzY2FsZV9jZmctPmVuYWJsZSA9IDE7CiB9 CiAKLS8qKgotICogX2RwdV9wbGFuZV9zZXR1cF9zY2FsZXIyIC0gZGV0ZXJtaW5lIGRlZmF1bHQg c2NhbGVyIHBoYXNlIHN0ZXBzL2ZpbHRlciB0eXBlCi0gKiBAcGRwdTogUG9pbnRlciB0byBEUFUg cGxhbmUgb2JqZWN0Ci0gKiBAc3JjOiBTb3VyY2Ugc2l6ZQotICogQGRzdDogRGVzdGluYXRpb24g c2l6ZQotICogQHBoYXNlX3N0ZXBzOiBQb2ludGVyIHRvIG91dHB1dCBhcnJheSBmb3IgcGhhc2Ug c3RlcHMKLSAqIEBmaWx0ZXI6IFBvaW50ZXIgdG8gb3V0cHV0IGFycmF5IGZvciBmaWx0ZXIgdHlw ZQotICogQGZtdDogUG9pbnRlciB0byBmb3JtYXQgZGVmaW5pdGlvbgotICogQGNocm9tYV9zdWJz YW1wbGluZzogU3Vic2FtcGxpbmcgYW1vdW50IGZvciBjaHJvbWEgY2hhbm5lbAotICoKLSAqIFJl dHVybnM6IDAgb24gc3VjY2VzcwotICovCi1zdGF0aWMgaW50IF9kcHVfcGxhbmVfc2V0dXBfc2Nh bGVyMihzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1LAotCQl1aW50MzJfdCBzcmMsIHVpbnQzMl90IGRz dCwgdWludDMyX3QgKnBoYXNlX3N0ZXBzLAotCQllbnVtIGRwdV9od19maWx0ZXIgKmZpbHRlciwg Y29uc3Qgc3RydWN0IGRwdV9mb3JtYXQgKmZtdCwKLQkJdWludDMyX3QgY2hyb21hX3N1YnNhbXBs aW5nKQotewotCWlmICghcGRwdSB8fCAhcGhhc2Vfc3RlcHMgfHwgIWZpbHRlciB8fCAhZm10KSB7 Ci0JCURQVV9FUlJPUigKLQkJCSJpbnZhbGlkIGFyZyhzKSwgcGxhbmUgJWQgcGhhc2UgJWQgZmls dGVyICVkIGZtdCAlZFxuIiwKLQkJCXBkcHUgIT0gMCwgcGhhc2Vfc3RlcHMgIT0gMCwgZmlsdGVy ICE9IDAsIGZtdCAhPSAwKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogY2FsY3VsYXRl IHBoYXNlIHN0ZXBzLCBsZWF2ZSBpbml0IHBoYXNlIGFzIHplcm8gKi8KLQlwaGFzZV9zdGVwc1tE UFVfU1NQUF9DT01QXzBdID0KLQkJbXVsdF9mcmFjKDEgPDwgUEhBU0VfU1RFUF9TSElGVCwgc3Jj LCBkc3QpOwotCXBoYXNlX3N0ZXBzW0RQVV9TU1BQX0NPTVBfMV8yXSA9Ci0JCXBoYXNlX3N0ZXBz W0RQVV9TU1BQX0NPTVBfMF0gLyBjaHJvbWFfc3Vic2FtcGxpbmc7Ci0JcGhhc2Vfc3RlcHNbRFBV X1NTUFBfQ09NUF8yXSA9IHBoYXNlX3N0ZXBzW0RQVV9TU1BQX0NPTVBfMV8yXTsKLQlwaGFzZV9z dGVwc1tEUFVfU1NQUF9DT01QXzNdID0gcGhhc2Vfc3RlcHNbRFBVX1NTUFBfQ09NUF8wXTsKLQot CS8qIGNhbGN1bGF0ZSBzY2FsZXIgY29uZmlnLCBpZiBuZWNlc3NhcnkgKi8KLQlpZiAoRFBVX0ZP Uk1BVF9JU19ZVVYoZm10KSB8fCBzcmMgIT0gZHN0KSB7Ci0JCWZpbHRlcltEUFVfU1NQUF9DT01Q XzNdID0KLQkJCShzcmMgPD0gZHN0KSA/IERQVV9TQ0FMRV9GSUxURVJfQklMIDoKLQkJCURQVV9T Q0FMRV9GSUxURVJfUENNTjsKLQotCQlpZiAoRFBVX0ZPUk1BVF9JU19ZVVYoZm10KSkgewotCQkJ ZmlsdGVyW0RQVV9TU1BQX0NPTVBfMF0gPSBEUFVfU0NBTEVfRklMVEVSX0NBOwotCQkJZmlsdGVy W0RQVV9TU1BQX0NPTVBfMV8yXSA9IGZpbHRlcltEUFVfU1NQUF9DT01QXzNdOwotCQl9IGVsc2Ug ewotCQkJZmlsdGVyW0RQVV9TU1BQX0NPTVBfMF0gPSBmaWx0ZXJbRFBVX1NTUFBfQ09NUF8zXTsK LQkJCWZpbHRlcltEUFVfU1NQUF9DT01QXzFfMl0gPQotCQkJCURQVV9TQ0FMRV9GSUxURVJfTkVB UkVTVDsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIGRpc2FibGUgc2NhbGVyICovCi0JCWZpbHRlcltE UFVfU1NQUF9DT01QXzBdID0gRFBVX1NDQUxFX0ZJTFRFUl9NQVg7Ci0JCWZpbHRlcltEUFVfU1NQ UF9DT01QXzFfMl0gPSBEUFVfU0NBTEVfRklMVEVSX01BWDsKLQkJZmlsdGVyW0RQVV9TU1BQX0NP TVBfM10gPSBEUFVfU0NBTEVfRklMVEVSX01BWDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgot ICogX2RwdV9wbGFuZV9zZXR1cF9waXhlbF9leHQgLSBkZXRlcm1pbmUgZGVmYXVsdCBwaXhlbCBl eHRlbnNpb24gdmFsdWVzCi0gKiBAcGRwdTogUG9pbnRlciB0byBEUFUgcGxhbmUgb2JqZWN0Ci0g KiBAc3JjOiBTb3VyY2Ugc2l6ZQotICogQGRzdDogRGVzdGluYXRpb24gc2l6ZQotICogQGRlY2lt YXRlZF9zcmM6IFNvdXJjZSBzaXplIGFmdGVyIGRlY2ltYXRpb24sIGlmIGFueQotICogQHBoYXNl X3N0ZXBzOiBQb2ludGVyIHRvIG91dHB1dCBhcnJheSBmb3IgcGhhc2Ugc3RlcHMKLSAqIEBvdXRf c3JjOiBPdXRwdXQgYXJyYXkgZm9yIHBpeGVsIGV4dGVuc2lvbiB2YWx1ZXMKLSAqIEBvdXRfZWRn ZTE6IE91dHB1dCBhcnJheSBmb3IgcGl4ZWwgZXh0ZW5zaW9uIGZpcnN0IGVkZ2UKLSAqIEBvdXRf ZWRnZTI6IE91dHB1dCBhcnJheSBmb3IgcGl4ZWwgZXh0ZW5zaW9uIHNlY29uZCBlZGdlCi0gKiBA ZmlsdGVyOiBQb2ludGVyIHRvIGFycmF5IGZvciBmaWx0ZXIgdHlwZQotICogQGZtdDogUG9pbnRl ciB0byBmb3JtYXQgZGVmaW5pdGlvbgotICogQGNocm9tYV9zdWJzYW1wbGluZzogU3Vic2FtcGxp bmcgYW1vdW50IGZvciBjaHJvbWEgY2hhbm5lbAotICogQHBvc3RfY29tcGFyZTogV2hldGhlciB0 byBjaHJvbWEgc3Vic2FtcGxlZCBzb3VyY2Ugc2l6ZSBmb3IgY29tcGFyaXNpb25zCi0gKi8KLXN0 YXRpYyB2b2lkIF9kcHVfcGxhbmVfc2V0dXBfcGl4ZWxfZXh0KHN0cnVjdCBkcHVfcGxhbmUgKnBk cHUsCi0JCXVpbnQzMl90IHNyYywgdWludDMyX3QgZHN0LCB1aW50MzJfdCBkZWNpbWF0ZWRfc3Jj LAotCQl1aW50MzJfdCAqcGhhc2Vfc3RlcHMsIHVpbnQzMl90ICpvdXRfc3JjLCBpbnQgKm91dF9l ZGdlMSwKLQkJaW50ICpvdXRfZWRnZTIsIGVudW0gZHB1X2h3X2ZpbHRlciAqZmlsdGVyLAotCQlj b25zdCBzdHJ1Y3QgZHB1X2Zvcm1hdCAqZm10LCB1aW50MzJfdCBjaHJvbWFfc3Vic2FtcGxpbmcs Ci0JCWJvb2wgcG9zdF9jb21wYXJlKQotewotCWludDY0X3QgZWRnZTEsIGVkZ2UyLCBjYWY7Ci0J dWludDMyX3Qgc3JjX3dvcms7Ci0JaW50IGksIHRtcDsKLQotCWlmIChwZHB1ICYmIHBoYXNlX3N0 ZXBzICYmIG91dF9zcmMgJiYgb3V0X2VkZ2UxICYmCi0JCQlvdXRfZWRnZTIgJiYgZmlsdGVyICYm IGZtdCkgewotCQkvKiBoYW5kbGUgQ0FGIGZvciBZVVYgZm9ybWF0cyAqLwotCQlpZiAoRFBVX0ZP Uk1BVF9JU19ZVVYoZm10KSAmJiAqZmlsdGVyID09IERQVV9TQ0FMRV9GSUxURVJfQ0EpCi0JCQlj YWYgPSBQSEFTRV9TVEVQX1VOSVRfU0NBTEU7Ci0JCWVsc2UKLQkJCWNhZiA9IDA7Ci0KLQkJZm9y IChpID0gMDsgaSA8IERQVV9NQVhfUExBTkVTOyBpKyspIHsKLQkJCXNyY193b3JrID0gZGVjaW1h dGVkX3NyYzsKLQkJCWlmIChpID09IERQVV9TU1BQX0NPTVBfMV8yIHx8IGkgPT0gRFBVX1NTUFBf Q09NUF8yKQotCQkJCXNyY193b3JrIC89IGNocm9tYV9zdWJzYW1wbGluZzsKLQkJCWlmIChwb3N0 X2NvbXBhcmUpCi0JCQkJc3JjID0gc3JjX3dvcms7Ci0JCQlpZiAoIURQVV9GT1JNQVRfSVNfWVVW KGZtdCkgJiYgKHNyYyA9PSBkc3QpKSB7Ci0JCQkJLyogdW5pdHkgKi8KLQkJCQllZGdlMSA9IDA7 Ci0JCQkJZWRnZTIgPSAwOwotCQkJfSBlbHNlIGlmIChkc3QgPj0gc3JjKSB7Ci0JCQkJLyogdXBz Y2FsZSAqLwotCQkJCWVkZ2UxID0gKDEgPDwgUEhBU0VfUkVTSURVQUwpOwotCQkJCWVkZ2UxIC09 IGNhZjsKLQkJCQllZGdlMiA9ICgxIDw8IFBIQVNFX1JFU0lEVUFMKTsKLQkJCQllZGdlMiArPSAo ZHN0IC0gMSkgKiAqKHBoYXNlX3N0ZXBzICsgaSk7Ci0JCQkJZWRnZTIgLT0gKHNyY193b3JrIC0g MSkgKiBQSEFTRV9TVEVQX1VOSVRfU0NBTEU7Ci0JCQkJZWRnZTIgKz0gY2FmOwotCQkJCWVkZ2Uy ID0gLShlZGdlMik7Ci0JCQl9IGVsc2UgewotCQkJCS8qIGRvd25zY2FsZSAqLwotCQkJCWVkZ2Ux ID0gMDsKLQkJCQllZGdlMiA9IChkc3QgLSAxKSAqICoocGhhc2Vfc3RlcHMgKyBpKTsKLQkJCQll ZGdlMiAtPSAoc3JjX3dvcmsgLSAxKSAqIFBIQVNFX1NURVBfVU5JVF9TQ0FMRTsKLQkJCQllZGdl MiArPSAqKHBoYXNlX3N0ZXBzICsgaSk7Ci0JCQkJZWRnZTIgPSAtKGVkZ2UyKTsKLQkJCX0KLQot CQkJLyogb25seSBlbmFibGUgQ0FGIGZvciBsdW1hIHBsYW5lICovCi0JCQljYWYgPSAwOwotCi0J CQkvKiBwb3B1bGF0ZSBvdXRwdXQgYXJyYXlzICovCi0JCQkqKG91dF9zcmMgKyBpKSA9IHNyY193 b3JrOwotCi0JCQkvKiBlZGdlIHVwZGF0ZXMgdGFrZW4gZnJvbSBfX3B4bF9leHRuX2hlbHBlciAq LwotCQkJaWYgKGVkZ2UxID49IDApIHsKLQkJCQl0bXAgPSAodWludDMyX3QpZWRnZTE7Ci0JCQkJ dG1wID4+PSBQSEFTRV9TVEVQX1NISUZUOwotCQkJCSoob3V0X2VkZ2UxICsgaSkgPSAtdG1wOwot CQkJfSBlbHNlIHsKLQkJCQl0bXAgPSAodWludDMyX3QpKC1lZGdlMSk7Ci0JCQkJKihvdXRfZWRn ZTEgKyBpKSA9Ci0JCQkJCSh0bXAgKyBQSEFTRV9TVEVQX1VOSVRfU0NBTEUgLSAxKSA+PgotCQkJ CQlQSEFTRV9TVEVQX1NISUZUOwotCQkJfQotCQkJaWYgKGVkZ2UyID49IDApIHsKLQkJCQl0bXAg PSAodWludDMyX3QpZWRnZTI7Ci0JCQkJdG1wID4+PSBQSEFTRV9TVEVQX1NISUZUOwotCQkJCSoo b3V0X2VkZ2UyICsgaSkgPSAtdG1wOwotCQkJfSBlbHNlIHsKLQkJCQl0bXAgPSAodWludDMyX3Qp KC1lZGdlMik7Ci0JCQkJKihvdXRfZWRnZTIgKyBpKSA9Ci0JCQkJCSh0bXAgKyBQSEFTRV9TVEVQ X1VOSVRfU0NBTEUgLSAxKSA+PgotCQkJCQlQSEFTRV9TVEVQX1NISUZUOwotCQkJfQotCQl9Ci0J fQotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgX2RwdV9wbGFuZV9zZXR1cF9jc2Moc3RydWN0IGRw dV9wbGFuZSAqcGRwdSkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGRwdV9jc2NfY2ZnIGRwdV9j c2NfWVVWMlJHQl82MDFMID0gewpAQCAtOTkzLDEwICs3MzcsNyBAQCBzdGF0aWMgaW5saW5lIHZv aWQgX2RwdV9wbGFuZV9zZXR1cF9jc2Moc3RydWN0IGRwdV9wbGFuZSAqcGRwdSkKIAkJcmV0dXJu OwogCX0KIAotCS8qIHJldmVydCB0byBrZXJuZWwgZGVmYXVsdCBpZiBvdmVycmlkZSBub3QgYXZh aWxhYmxlICovCi0JaWYgKHBkcHUtPmNzY191c3JfcHRyKQotCQlwZHB1LT5jc2NfcHRyID0gcGRw dS0+Y3NjX3Vzcl9wdHI7Ci0JZWxzZSBpZiAoQklUKERQVV9TU1BQX0NTQ18xMEJJVCkgJiBwZHB1 LT5mZWF0dXJlcykKKwlpZiAoQklUKERQVV9TU1BQX0NTQ18xMEJJVCkgJiBwZHB1LT5mZWF0dXJl cykKIAkJcGRwdS0+Y3NjX3B0ciA9IChzdHJ1Y3QgZHB1X2NzY19jZmcgKikmZHB1X2NzYzEwX1lV VjJSR0JfNjAxTDsKIAllbHNlCiAJCXBkcHUtPmNzY19wdHIgPSAoc3RydWN0IGRwdV9jc2NfY2Zn ICopJmRwdV9jc2NfWVVWMlJHQl82MDFMOwpAQCAtMTAwNyw2MCArNzQ4LDYgQEAgc3RhdGljIGlu bGluZSB2b2lkIF9kcHVfcGxhbmVfc2V0dXBfY3NjKHN0cnVjdCBkcHVfcGxhbmUgKnBkcHUpCiAJ CQlwZHB1LT5jc2NfcHRyLT5jc2NfbXZbMl0pOwogfQogCi1zdGF0aWMgdm9pZCBkcHVfY29sb3Jf cHJvY2Vzc19wbGFuZV9zZXR1cChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKLXsKLQlzdHJ1Y3Qg ZHB1X3BsYW5lICpwZHB1OwotCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKnBzdGF0ZTsKLQl1aW50 MzJfdCBodWUsIHNhdHVyYXRpb24sIHZhbHVlLCBjb250cmFzdDsKLQlzdHJ1Y3QgZHJtX21zbV9t ZW1jb2wgKm1lbWNvbCA9IE5VTEw7Ci0Jc2l6ZV90IG1lbWNvbF9zeiA9IDA7Ci0KLQlwZHB1ID0g dG9fZHB1X3BsYW5lKHBsYW5lKTsKLQlwc3RhdGUgPSB0b19kcHVfcGxhbmVfc3RhdGUocGxhbmUt PnN0YXRlKTsKLQotCWh1ZSA9ICh1aW50MzJfdCkgZHB1X3BsYW5lX2dldF9wcm9wZXJ0eShwc3Rh dGUsIFBMQU5FX1BST1BfSFVFX0FESlVTVCk7Ci0JaWYgKHBkcHUtPnBpcGVfaHctPm9wcy5zZXR1 cF9wYV9odWUpCi0JCXBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9wYV9odWUocGRwdS0+cGlwZV9o dywgJmh1ZSk7Ci0Jc2F0dXJhdGlvbiA9ICh1aW50MzJfdCkgZHB1X3BsYW5lX2dldF9wcm9wZXJ0 eShwc3RhdGUsCi0JCVBMQU5FX1BST1BfU0FUVVJBVElPTl9BREpVU1QpOwotCWlmIChwZHB1LT5w aXBlX2h3LT5vcHMuc2V0dXBfcGFfc2F0KQotCQlwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfcGFf c2F0KHBkcHUtPnBpcGVfaHcsICZzYXR1cmF0aW9uKTsKLQl2YWx1ZSA9ICh1aW50MzJfdCkgZHB1 X3BsYW5lX2dldF9wcm9wZXJ0eShwc3RhdGUsCi0JCVBMQU5FX1BST1BfVkFMVUVfQURKVVNUKTsK LQlpZiAocGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX3BhX3ZhbCkKLQkJcGRwdS0+cGlwZV9ody0+ b3BzLnNldHVwX3BhX3ZhbChwZHB1LT5waXBlX2h3LCAmdmFsdWUpOwotCWNvbnRyYXN0ID0gKHVp bnQzMl90KSBkcHVfcGxhbmVfZ2V0X3Byb3BlcnR5KHBzdGF0ZSwKLQkJUExBTkVfUFJPUF9DT05U UkFTVF9BREpVU1QpOwotCWlmIChwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfcGFfY29udCkKLQkJ cGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX3BhX2NvbnQocGRwdS0+cGlwZV9odywgJmNvbnRyYXN0 KTsKLQotCWlmIChwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfcGFfbWVtY29sb3IpIHsKLQkJLyog U2tpbiBtZW1vcnkgY29sb3Igc2V0dXAgKi8KLQkJbWVtY29sID0gbXNtX3Byb3BlcnR5X2dldF9i bG9iKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLAotCQkJCQkmcHN0YXRlLT5wcm9wZXJ0eV9zdGF0ZSwK LQkJCQkJJm1lbWNvbF9zeiwKLQkJCQkJUExBTkVfUFJPUF9TS0lOX0NPTE9SKTsKLQkJcGRwdS0+ cGlwZV9ody0+b3BzLnNldHVwX3BhX21lbWNvbG9yKHBkcHUtPnBpcGVfaHcsCi0JCQkJCU1FTUNP TE9SX1NLSU4sIG1lbWNvbCk7Ci0KLQkJLyogU2t5IG1lbW9yeSBjb2xvciBzZXR1cCAqLwotCQlt ZW1jb2wgPSBtc21fcHJvcGVydHlfZ2V0X2Jsb2IoJnBkcHUtPnByb3BlcnR5X2luZm8sCi0JCQkJ CSZwc3RhdGUtPnByb3BlcnR5X3N0YXRlLAotCQkJCQkmbWVtY29sX3N6LAotCQkJCQlQTEFORV9Q Uk9QX1NLWV9DT0xPUik7Ci0JCXBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9wYV9tZW1jb2xvcihw ZHB1LT5waXBlX2h3LAotCQkJCQlNRU1DT0xPUl9TS1ksIG1lbWNvbCk7Ci0KLQkJLyogRm9saWFn ZSBtZW1vcnkgY29sb3Igc2V0dXAgKi8KLQkJbWVtY29sID0gbXNtX3Byb3BlcnR5X2dldF9ibG9i KCZwZHB1LT5wcm9wZXJ0eV9pbmZvLAotCQkJCQkmcHN0YXRlLT5wcm9wZXJ0eV9zdGF0ZSwKLQkJ CQkJJm1lbWNvbF9zeiwKLQkJCQkJUExBTkVfUFJPUF9GT0xJQUdFX0NPTE9SKTsKLQkJcGRwdS0+ cGlwZV9ody0+b3BzLnNldHVwX3BhX21lbWNvbG9yKHBkcHUtPnBpcGVfaHcsCi0JCQkJCU1FTUNP TE9SX0ZPTElBR0UsIG1lbWNvbCk7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBfZHB1X3BsYW5lX3Nl dHVwX3NjYWxlcihzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1LAogCQlzdHJ1Y3QgZHB1X3BsYW5lX3N0 YXRlICpwc3RhdGUsCiAJCWNvbnN0IHN0cnVjdCBkcHVfZm9ybWF0ICpmbXQsIGJvb2wgY29sb3Jf ZmlsbCkKQEAgLTEwNzYsOTkgKzc2MywyMCBAQCBzdGF0aWMgdm9pZCBfZHB1X3BsYW5lX3NldHVw X3NjYWxlcihzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1LAogCiAJcGUgPSAmcHN0YXRlLT5waXhlbF9l eHQ7CiAKLQlwZHB1LT5waXBlX2NmZy5ob3J6X2RlY2ltYXRpb24gPQotCQlkcHVfcGxhbmVfZ2V0 X3Byb3BlcnR5KHBzdGF0ZSwgUExBTkVfUFJPUF9IX0RFQ0lNQVRFKTsKLQlwZHB1LT5waXBlX2Nm Zy52ZXJ0X2RlY2ltYXRpb24gPQotCQlkcHVfcGxhbmVfZ2V0X3Byb3BlcnR5KHBzdGF0ZSwgUExB TkVfUFJPUF9WX0RFQ0lNQVRFKTsKLQogCS8qIGRvbid0IGNocm9tYSBzdWJzYW1wbGUgaWYgZGVj aW1hdGluZyAqLwotCWNocm9tYV9zdWJzbXBsX2ggPSBwZHB1LT5waXBlX2NmZy5ob3J6X2RlY2lt YXRpb24gPyAxIDoKKwljaHJvbWFfc3Vic21wbF9oID0KIAkJZHJtX2Zvcm1hdF9ob3J6X2Nocm9t YV9zdWJzYW1wbGluZyhmbXQtPmJhc2UucGl4ZWxfZm9ybWF0KTsKLQljaHJvbWFfc3Vic21wbF92 ID0gcGRwdS0+cGlwZV9jZmcudmVydF9kZWNpbWF0aW9uID8gMSA6CisJY2hyb21hX3N1YnNtcGxf diA9CiAJCWRybV9mb3JtYXRfdmVydF9jaHJvbWFfc3Vic2FtcGxpbmcoZm10LT5iYXNlLnBpeGVs X2Zvcm1hdCk7CiAKLQkvKiB1cGRhdGUgc2NhbGVyICovCi0JaWYgKHBkcHUtPmZlYXR1cmVzICYg QklUKERQVV9TU1BQX1NDQUxFUl9RU0VFRDMpKSB7Ci0JCWludCByYzsKLQotCQlpZiAoIWNvbG9y X2ZpbGwgJiYgIXBkcHUtPmRlYnVnZnNfZGVmYXVsdF9zY2FsZSkKLQkJCXJjID0gX2RwdV9wbGFu ZV9zZXR1cF9zY2FsZXIzX2x1dChwZHB1LCBwc3RhdGUpOwotCQllbHNlCi0JCQlyYyA9IC1FSU5W QUw7Ci0JCWlmIChyYyB8fCBwc3RhdGUtPnNjYWxlcl9jaGVja19zdGF0ZSAhPQotCQkJRFBVX1BM QU5FX1NDTENIRUNLX1NDQUxFUl9WMikgewotCQkJLyogY2FsY3VsYXRlIGRlZmF1bHQgY29uZmln IGZvciBRU0VFRDMgKi8KLQkJCV9kcHVfcGxhbmVfc2V0dXBfc2NhbGVyMyhwZHB1LCBwc3RhdGUs Ci0JCQkJCXBkcHUtPnBpcGVfY2ZnLnNyY19yZWN0LncsCi0JCQkJCXBkcHUtPnBpcGVfY2ZnLnNy Y19yZWN0LmgsCi0JCQkJCXBkcHUtPnBpcGVfY2ZnLmRzdF9yZWN0LncsCi0JCQkJCXBkcHUtPnBp cGVfY2ZnLmRzdF9yZWN0LmgsCi0JCQkJCSZwc3RhdGUtPnNjYWxlcjNfY2ZnLCBmbXQsCi0JCQkJ CWNocm9tYV9zdWJzbXBsX2gsIGNocm9tYV9zdWJzbXBsX3YpOwotCQl9Ci0JfSBlbHNlIGlmIChw c3RhdGUtPnNjYWxlcl9jaGVja19zdGF0ZSAhPSBEUFVfUExBTkVfU0NMQ0hFQ0tfU0NBTEVSX1Yx IHx8Ci0JCQljb2xvcl9maWxsIHx8IHBkcHUtPmRlYnVnZnNfZGVmYXVsdF9zY2FsZSkgewotCQl1 aW50MzJfdCBkZWNpX2RpbSwgaTsKLQotCQkvKiBjYWxjdWxhdGUgZGVmYXVsdCBjb25maWd1cmF0 aW9uIGZvciBRU0VFRDIgKi8KLQkJbWVtc2V0KHBlLCAwLCBzaXplb2Yoc3RydWN0IGRwdV9od19w aXhlbF9leHQpKTsKLQotCQlEUFVfREVCVUdfUExBTkUocGRwdSwgImRlZmF1bHQgY29uZmlnXG4i KTsKLQkJZGVjaV9kaW0gPSBERUNJTUFURURfRElNRU5TSU9OKHBkcHUtPnBpcGVfY2ZnLnNyY19y ZWN0LncsCi0JCQkJcGRwdS0+cGlwZV9jZmcuaG9yel9kZWNpbWF0aW9uKTsKLQkJX2RwdV9wbGFu ZV9zZXR1cF9zY2FsZXIyKHBkcHUsCi0JCQkJZGVjaV9kaW0sCi0JCQkJcGRwdS0+cGlwZV9jZmcu ZHN0X3JlY3QudywKLQkJCQlwZS0+cGhhc2Vfc3RlcF94LAotCQkJCXBlLT5ob3J6X2ZpbHRlciwg Zm10LCBjaHJvbWFfc3Vic21wbF9oKTsKLQotCQlpZiAoRFBVX0ZPUk1BVF9JU19ZVVYoZm10KSkK LQkJCWRlY2lfZGltICY9IH4weDE7Ci0JCV9kcHVfcGxhbmVfc2V0dXBfcGl4ZWxfZXh0KHBkcHUs IHBkcHUtPnBpcGVfY2ZnLnNyY19yZWN0LncsCi0JCQkJcGRwdS0+cGlwZV9jZmcuZHN0X3JlY3Qu dywgZGVjaV9kaW0sCi0JCQkJcGUtPnBoYXNlX3N0ZXBfeCwKLQkJCQlwZS0+cm9pX3csCi0JCQkJ cGUtPm51bV9leHRfcHhsc19sZWZ0LAotCQkJCXBlLT5udW1fZXh0X3B4bHNfcmlnaHQsIHBlLT5o b3J6X2ZpbHRlciwgZm10LAotCQkJCWNocm9tYV9zdWJzbXBsX2gsIDApOwotCi0JCWRlY2lfZGlt ID0gREVDSU1BVEVEX0RJTUVOU0lPTihwZHB1LT5waXBlX2NmZy5zcmNfcmVjdC5oLAotCQkJCXBk cHUtPnBpcGVfY2ZnLnZlcnRfZGVjaW1hdGlvbik7Ci0JCV9kcHVfcGxhbmVfc2V0dXBfc2NhbGVy MihwZHB1LAotCQkJCWRlY2lfZGltLAotCQkJCXBkcHUtPnBpcGVfY2ZnLmRzdF9yZWN0LmgsCi0J CQkJcGUtPnBoYXNlX3N0ZXBfeSwKLQkJCQlwZS0+dmVydF9maWx0ZXIsIGZtdCwgY2hyb21hX3N1 YnNtcGxfdik7Ci0JCV9kcHVfcGxhbmVfc2V0dXBfcGl4ZWxfZXh0KHBkcHUsIHBkcHUtPnBpcGVf Y2ZnLnNyY19yZWN0LmgsCi0JCQkJcGRwdS0+cGlwZV9jZmcuZHN0X3JlY3QuaCwgZGVjaV9kaW0s Ci0JCQkJcGUtPnBoYXNlX3N0ZXBfeSwKLQkJCQlwZS0+cm9pX2gsCi0JCQkJcGUtPm51bV9leHRf cHhsc190b3AsCi0JCQkJcGUtPm51bV9leHRfcHhsc19idG0sIHBlLT52ZXJ0X2ZpbHRlciwgZm10 LAotCQkJCWNocm9tYV9zdWJzbXBsX3YsIDEpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBEUFVfTUFY X1BMQU5FUzsgaSsrKSB7Ci0JCQlpZiAocGUtPm51bV9leHRfcHhsc19sZWZ0W2ldID49IDApCi0J CQkJcGUtPmxlZnRfcnB0W2ldID0gcGUtPm51bV9leHRfcHhsc19sZWZ0W2ldOwotCQkJZWxzZQot CQkJCXBlLT5sZWZ0X2Z0Y2hbaV0gPSBwZS0+bnVtX2V4dF9weGxzX2xlZnRbaV07Ci0KLQkJCWlm IChwZS0+bnVtX2V4dF9weGxzX3JpZ2h0W2ldID49IDApCi0JCQkJcGUtPnJpZ2h0X3JwdFtpXSA9 IHBlLT5udW1fZXh0X3B4bHNfcmlnaHRbaV07Ci0JCQllbHNlCi0JCQkJcGUtPnJpZ2h0X2Z0Y2hb aV0gPSBwZS0+bnVtX2V4dF9weGxzX3JpZ2h0W2ldOwotCi0JCQlpZiAocGUtPm51bV9leHRfcHhs c190b3BbaV0gPj0gMCkKLQkJCQlwZS0+dG9wX3JwdFtpXSA9IHBlLT5udW1fZXh0X3B4bHNfdG9w W2ldOwotCQkJZWxzZQotCQkJCXBlLT50b3BfZnRjaFtpXSA9IHBlLT5udW1fZXh0X3B4bHNfdG9w W2ldOwotCi0JCQlpZiAocGUtPm51bV9leHRfcHhsc19idG1baV0gPj0gMCkKLQkJCQlwZS0+YnRt X3JwdFtpXSA9IHBlLT5udW1fZXh0X3B4bHNfYnRtW2ldOwotCQkJZWxzZQotCQkJCXBlLT5idG1f ZnRjaFtpXSA9IHBlLT5udW1fZXh0X3B4bHNfYnRtW2ldOwotCQl9Ci0JfQorCS8qIHVwZGF0ZSBz Y2FsZXIuIGNhbGN1bGF0ZSBkZWZhdWx0IGNvbmZpZyBmb3IgUVNFRUQzICovCisJX2RwdV9wbGFu ZV9zZXR1cF9zY2FsZXIzKHBkcHUsIHBzdGF0ZSwKKwkJCXBkcHUtPnBpcGVfY2ZnLnNyY19yZWN0 LncsCisJCQlwZHB1LT5waXBlX2NmZy5zcmNfcmVjdC5oLAorCQkJcGRwdS0+cGlwZV9jZmcuZHN0 X3JlY3QudywKKwkJCXBkcHUtPnBpcGVfY2ZnLmRzdF9yZWN0LmgsCisJCQkmcHN0YXRlLT5zY2Fs ZXIzX2NmZywgZm10LAorCQkJY2hyb21hX3N1YnNtcGxfaCwgY2hyb21hX3N1YnNtcGxfdik7CiB9 CiAKIC8qKgpAQCAtMTQ2NSwxODkgKzEwNzMsNiBAQCBzdGF0aWMgdm9pZCBkcHVfcGxhbmVfY2xl YW51cF9mYihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAltc21fZnJhbWVidWZmZXJfY2xlYW51 cChvbGRfc3RhdGUtPmZiLCBvbGRfcHN0YXRlLT5hc3BhY2UpOwogfQogCi1zdGF0aWMgdm9pZCBf ZHB1X3BsYW5lX3NzcHBfYXRvbWljX2NoZWNrX21vZGVfY2hhbmdlZChzdHJ1Y3QgZHB1X3BsYW5l ICpwZHB1LAotCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSwKLQkJc3RydWN0IGRybV9w bGFuZV9zdGF0ZSAqb2xkX3N0YXRlKQotewotCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKnBzdGF0 ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShzdGF0ZSk7Ci0Jc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAq b2xkX3BzdGF0ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShvbGRfc3RhdGUpOwotCXN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmZiLCAqb2xkX2ZiOwotCi0JLyogbm8gbmVlZCB0byBjaGVjayBpdCBhZ2Fp biAqLwotCWlmIChwc3RhdGUtPmRpcnR5ID09IERQVV9QTEFORV9ESVJUWV9BTEwpCi0JCXJldHVy bjsKLQotCWlmICghZHB1X3BsYW5lX2VuYWJsZWQoc3RhdGUpIHx8ICFkcHVfcGxhbmVfZW5hYmxl ZChvbGRfc3RhdGUpCi0JCQl8fCBwZHB1LT5pc19lcnJvcikgewotCQlEUFVfREVCVUdfUExBTkUo cGRwdSwKLQkJCSJlbmFibGluZy9kaXNhYmxpbmcgZnVsbCBtb2Rlc2V0IHJlcXVpcmVkXG4iKTsK LQkJcHN0YXRlLT5kaXJ0eSB8PSBEUFVfUExBTkVfRElSVFlfQUxMOwotCX0gZWxzZSBpZiAodG9f ZHB1X3BsYW5lX3N0YXRlKG9sZF9zdGF0ZSktPnBlbmRpbmcpIHsKLQkJRFBVX0RFQlVHX1BMQU5F KHBkcHUsICJzdGlsbCBwZW5kaW5nXG4iKTsKLQkJcHN0YXRlLT5kaXJ0eSB8PSBEUFVfUExBTkVf RElSVFlfQUxMOwotCX0gZWxzZSBpZiAocHN0YXRlLT5tdWx0aXJlY3RfaW5kZXggIT0gb2xkX3Bz dGF0ZS0+bXVsdGlyZWN0X2luZGV4IHx8Ci0JCQlwc3RhdGUtPm11bHRpcmVjdF9tb2RlICE9IG9s ZF9wc3RhdGUtPm11bHRpcmVjdF9tb2RlKSB7Ci0JCURQVV9ERUJVR19QTEFORShwZHB1LCAibXVs dGlyZWN0IGNvbmZpZyB1cGRhdGVkXG4iKTsKLQkJcHN0YXRlLT5kaXJ0eSB8PSBEUFVfUExBTkVf RElSVFlfQUxMOwotCX0gZWxzZSBpZiAoc3RhdGUtPmNydGNfdyAhPSBvbGRfc3RhdGUtPmNydGNf dyB8fAotCQkgICBzdGF0ZS0+Y3J0Y19oICE9IG9sZF9zdGF0ZS0+Y3J0Y19oIHx8Ci0JCSAgIHN0 YXRlLT5jcnRjX3ggIT0gb2xkX3N0YXRlLT5jcnRjX3ggfHwKLQkJICAgc3RhdGUtPmNydGNfeSAh PSBvbGRfc3RhdGUtPmNydGNfeSkgewotCQlEUFVfREVCVUdfUExBTkUocGRwdSwgImNydGMgcmVj dCB1cGRhdGVkXG4iKTsKLQkJcHN0YXRlLT5kaXJ0eSB8PSBEUFVfUExBTkVfRElSVFlfUkVDVFM7 Ci0JfSBlbHNlIGlmIChwc3RhdGUtPmV4Y2xfcmVjdC53ICE9IG9sZF9wc3RhdGUtPmV4Y2xfcmVj dC53IHx8Ci0JCSAgIHBzdGF0ZS0+ZXhjbF9yZWN0LmggIT0gb2xkX3BzdGF0ZS0+ZXhjbF9yZWN0 LmggfHwKLQkJICAgcHN0YXRlLT5leGNsX3JlY3QueCAhPSBvbGRfcHN0YXRlLT5leGNsX3JlY3Qu eCB8fAotCQkgICBwc3RhdGUtPmV4Y2xfcmVjdC55ICE9IG9sZF9wc3RhdGUtPmV4Y2xfcmVjdC55 KSB7Ci0JCURQVV9ERUJVR19QTEFORShwZHB1LCAiZXhjbF9yZWN0IHVwZGF0ZWRcbiIpOwotCQlw c3RhdGUtPmRpcnR5IHw9IERQVV9QTEFORV9ESVJUWV9SRUNUUzsKLQl9Ci0KLQlmYiA9IHN0YXRl LT5mYjsKLQlvbGRfZmIgPSBvbGRfc3RhdGUtPmZiOwotCi0JaWYgKCFmYiB8fCAhb2xkX2ZiKSB7 Ci0JCURQVV9ERUJVR19QTEFORShwZHB1LCAiY2FuJ3QgY29tcGFyZSBmYiBoYW5kbGVzXG4iKTsK LQl9IGVsc2UgaWYgKGZiLT5mb3JtYXQtPmZvcm1hdCAhPSBvbGRfZmItPmZvcm1hdC0+Zm9ybWF0 KSB7Ci0JCURQVV9ERUJVR19QTEFORShwZHB1LCAiZm9ybWF0IGNoYW5nZVxuIik7Ci0JCXBzdGF0 ZS0+ZGlydHkgfD0gRFBVX1BMQU5FX0RJUlRZX0ZPUk1BVCB8IERQVV9QTEFORV9ESVJUWV9SRUNU UzsKLQl9IGVsc2UgewotCQl1aW50NjRfdCBuZXdfbW9kID0gZmItPm1vZGlmaWVyOwotCQl1aW50 NjRfdCBvbGRfbW9kID0gb2xkX2ZiLT5tb2RpZmllcjsKLQkJdWludDMyX3QgKm5ld19waXRjaGVz ID0gZmItPnBpdGNoZXM7Ci0JCXVpbnQzMl90ICpvbGRfcGl0Y2hlcyA9IG9sZF9mYi0+cGl0Y2hl czsKLQkJdWludDMyX3QgKm5ld19vZmZzZXQgPSBmYi0+b2Zmc2V0czsKLQkJdWludDMyX3QgKm9s ZF9vZmZzZXQgPSBvbGRfZmItPm9mZnNldHM7Ci0JCWludCBpOwotCi0JCWlmIChuZXdfbW9kICE9 IG9sZF9tb2QpIHsKLQkJCURQVV9ERUJVR19QTEFORShwZHB1LAotCQkJCSJmb3JtYXQgbW9kaWZp ZXJzIGNoYW5nZVwiXAotCQkJCW5ld19tb2RlOiVsbHUgb2xkX21vZGU6JWxsdVxuIiwKLQkJCQlu ZXdfbW9kLCBvbGRfbW9kKTsKLQkJCXBzdGF0ZS0+ZGlydHkgfD0gRFBVX1BMQU5FX0RJUlRZX0ZP Uk1BVCB8Ci0JCQkJRFBVX1BMQU5FX0RJUlRZX1JFQ1RTOwotCQl9Ci0KLQkJZm9yIChpID0gMDsg aSA8IEFSUkFZX1NJWkUoZmItPnBpdGNoZXMpOyBpKyspIHsKLQkJCWlmIChuZXdfcGl0Y2hlc1tp XSAhPSBvbGRfcGl0Y2hlc1tpXSkgewotCQkJCURQVV9ERUJVR19QTEFORShwZHB1LAotCQkJCQki cGl0Y2hlcyBjaGFuZ2UgcGxhbmU6JWRcIlwKLQkJCQkJb2xkX3BpdGNoZXM6JXUgbmV3X3BpdGNo ZXM6JXVcbiIsCi0JCQkJCWksIG9sZF9waXRjaGVzW2ldLCBuZXdfcGl0Y2hlc1tpXSk7Ci0JCQkJ cHN0YXRlLT5kaXJ0eSB8PSBEUFVfUExBTkVfRElSVFlfUkVDVFM7Ci0JCQkJYnJlYWs7Ci0JCQl9 Ci0JCX0KLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmItPm9mZnNldHMpOyBpKyspIHsK LQkJCWlmIChuZXdfb2Zmc2V0W2ldICE9IG9sZF9vZmZzZXRbaV0pIHsKLQkJCQlEUFVfREVCVUdf UExBTkUocGRwdSwKLQkJCQkJIm9mZnNldCBjaGFuZ2UgcGxhbmU6JWRcIlwKLQkJCQkJb2xkX29m ZnNldDoldSBuZXdfb2Zmc2V0OiV1XG4iLAotCQkJCQlpLCBvbGRfb2Zmc2V0W2ldLCBuZXdfb2Zm c2V0W2ldKTsKLQkJCQlwc3RhdGUtPmRpcnR5IHw9IERQVV9QTEFORV9ESVJUWV9GT1JNQVQgfAot CQkJCQlEUFVfUExBTkVfRElSVFlfUkVDVFM7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci19 Ci0KLXN0YXRpYyBpbnQgX2RwdV9wbGFuZV92YWxpZGF0ZV9zY2FsZXJfdjIoc3RydWN0IGRwdV9w bGFuZSAqcGRwdSwKLQkJc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlLAotCQljb25zdCBz dHJ1Y3QgZHB1X2Zvcm1hdCAqZm10LAotCQl1aW50MzJfdCBpbWdfdywgdWludDMyX3QgaW1nX2gs Ci0JCXVpbnQzMl90IHNyY193LCB1aW50MzJfdCBzcmNfaCwKLQkJdWludDMyX3QgZGVjaV93LCB1 aW50MzJfdCBkZWNpX2gpCi17Ci0JaW50IGk7Ci0KLQlpZiAoIXBkcHUgfHwgIXBzdGF0ZSB8fCAh Zm10KSB7Ci0JCURQVV9FUlJPUl9QTEFORShwZHB1LCAiaW52YWxpZCBhcmd1bWVudHNcbiIpOwot CQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBkb24ndCBydW4gY2hlY2tzIHVubGVzcyBzY2Fs ZXIgZGF0YSB3YXMgY2hhbmdlZCAqLwotCWlmIChwc3RhdGUtPnNjYWxlcl9jaGVja19zdGF0ZSAh PSBEUFVfUExBTkVfU0NMQ0hFQ0tfU0NBTEVSX1YyX0NIRUNLKQotCQlyZXR1cm4gMDsKLQotCXBz dGF0ZS0+c2NhbGVyX2NoZWNrX3N0YXRlID0gRFBVX1BMQU5FX1NDTENIRUNLX0lOVkFMSUQ7Ci0K LQlmb3IgKGkgPSAwOyBpIDwgRFBVX01BWF9QTEFORVM7IGkrKykgewotCQl1aW50MzJfdCBob3Jf cmVxX3BpeGVscywgaG9yX2ZldGNoX3BpeGVsczsKLQkJdWludDMyX3QgdmVydF9yZXFfcGl4ZWxz LCB2ZXJ0X2ZldGNoX3BpeGVsczsKLQkJdWludDMyX3Qgc3JjX3dfdG1wLCBzcmNfaF90bXA7Ci0K LQkJLyogcmUtdXNlIGNvbG9yIHBsYW5lIDEncyBjb25maWcgZm9yIHBsYW5lIDIgKi8KLQkJaWYg KGkgPT0gMikKLQkJCWNvbnRpbnVlOwotCi0JCXNyY193X3RtcCA9IHNyY193OwotCQlzcmNfaF90 bXAgPSBzcmNfaDsKLQotCQkvKgotCQkgKiBGb3IgY2hyb21hIHBsYW5lLCB3aWR0aCBpcyBoYWxm IGZvciB0aGUgZm9sbG93aW5nIHN1YiBzYW1wbGVkCi0JCSAqIGZvcm1hdHMuIEV4Y2VwdCBpbiBj YXNlIG9mIGRlY2ltYXRpb24sIHdoZXJlIGhhcmR3YXJlIGF2b2lkcwotCQkgKiAxIGxpbmUgb2Yg ZGVjaW1hdGlvbiBpbnN0ZWFkIG9mIGRvd25zYW1wbGluZy4KLQkJICovCi0JCWlmIChpID09IDEp IHsKLQkJCWlmICghZGVjaV93ICYmCi0JCQkJCShmbXQtPmNocm9tYV9zYW1wbGUgPT0gRFBVX0NI Uk9NQV80MjAgfHwKLQkJCQkJIGZtdC0+Y2hyb21hX3NhbXBsZSA9PSBEUFVfQ0hST01BX0gyVjEp KQotCQkJCXNyY193X3RtcCA+Pj0gMTsKLQkJCWlmICghZGVjaV9oICYmCi0JCQkJCShmbXQtPmNo cm9tYV9zYW1wbGUgPT0gRFBVX0NIUk9NQV80MjAgfHwKLQkJCQkJIGZtdC0+Y2hyb21hX3NhbXBs ZSA9PSBEUFVfQ0hST01BX0gxVjIpKQotCQkJCXNyY19oX3RtcCA+Pj0gMTsKLQkJfQotCi0JCWhv cl9yZXFfcGl4ZWxzID0gcHN0YXRlLT5waXhlbF9leHQucm9pX3dbaV07Ci0JCXZlcnRfcmVxX3Bp eGVscyA9IHBzdGF0ZS0+cGl4ZWxfZXh0LnJvaV9oW2ldOwotCi0JCWhvcl9mZXRjaF9waXhlbHMg PSBERUNJTUFURURfRElNRU5TSU9OKHNyY193X3RtcCArCi0JCQkoaW50OF90KShwc3RhdGUtPnBp eGVsX2V4dC5sZWZ0X2Z0Y2hbaV0gJiAweEZGKSArCi0JCQkoaW50OF90KShwc3RhdGUtPnBpeGVs X2V4dC5yaWdodF9mdGNoW2ldICYgMHhGRiksCi0JCQlkZWNpX3cpOwotCQl2ZXJ0X2ZldGNoX3Bp eGVscyA9IERFQ0lNQVRFRF9ESU1FTlNJT04oc3JjX2hfdG1wICsKLQkJCShpbnQ4X3QpKHBzdGF0 ZS0+cGl4ZWxfZXh0LnRvcF9mdGNoW2ldICYgMHhGRikgKwotCQkJKGludDhfdCkocHN0YXRlLT5w aXhlbF9leHQuYnRtX2Z0Y2hbaV0gJiAweEZGKSwKLQkJCWRlY2lfaCk7Ci0KLQkJaWYgKChob3Jf cmVxX3BpeGVscyAhPSBob3JfZmV0Y2hfcGl4ZWxzKSB8fAotCQkJKGhvcl9mZXRjaF9waXhlbHMg PiBpbWdfdykgfHwKLQkJCSh2ZXJ0X3JlcV9waXhlbHMgIT0gdmVydF9mZXRjaF9waXhlbHMpIHx8 Ci0JCQkodmVydF9mZXRjaF9waXhlbHMgPiBpbWdfaCkpIHsKLQkJCURQVV9FUlJPUl9QTEFORShw ZHB1LAotCQkJCQkicmVxICVkLyVkLCBmZXRjaCAlZC8lZCwgc3JjICVkeCVkXG4iLAotCQkJCQlo b3JfcmVxX3BpeGVscywgdmVydF9yZXFfcGl4ZWxzLAotCQkJCQlob3JfZmV0Y2hfcGl4ZWxzLCB2 ZXJ0X2ZldGNoX3BpeGVscywKLQkJCQkJaW1nX3csIGltZ19oKTsKLQkJCXJldHVybiAtRUlOVkFM OwotCQl9Ci0KLQkJLyoKLQkJICogQWxwaGEgcGxhbmUgY2FuIG9ubHkgYmUgc2NhbGVkIHVzaW5n IGJpbGluZWFyIG9yIHBpeGVsCi0JCSAqIHJlcGVhdC9kcm9wLCBzcmNfd2lkdGggYW5kIHNyY19o ZWlnaHQgYXJlIG9ubHkgc3BlY2lmaWVkCi0JCSAqIGZvciBZIGFuZCBVViBwbGFuZQotCQkgKi8K LQkJaWYgKGkgIT0gMyAmJgotCQkJKGhvcl9yZXFfcGl4ZWxzICE9IHBzdGF0ZS0+c2NhbGVyM19j Zmcuc3JjX3dpZHRoW2ldIHx8Ci0JCQl2ZXJ0X3JlcV9waXhlbHMgIT0gcHN0YXRlLT5zY2FsZXIz X2NmZy5zcmNfaGVpZ2h0W2ldKSkgewotCQkJRFBVX0VSUk9SX1BMQU5FKHBkcHUsCi0JCQkJInJv aVslZF0gJWQvJWQsIHNjYWxlciBzcmMgJWR4JWQsIHNyYyAlZHglZFxuIiwKLQkJCQlpLCBwc3Rh dGUtPnBpeGVsX2V4dC5yb2lfd1tpXSwKLQkJCQlwc3RhdGUtPnBpeGVsX2V4dC5yb2lfaFtpXSwK LQkJCQlwc3RhdGUtPnNjYWxlcjNfY2ZnLnNyY193aWR0aFtpXSwKLQkJCQlwc3RhdGUtPnNjYWxl cjNfY2ZnLnNyY19oZWlnaHRbaV0sCi0JCQkJc3JjX3csIHNyY19oKTsKLQkJCXJldHVybiAtRUlO VkFMOwotCQl9Ci0JfQotCi0JcHN0YXRlLT5zY2FsZXJfY2hlY2tfc3RhdGUgPSBEUFVfUExBTkVf U0NMQ0hFQ0tfU0NBTEVSX1YyOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGRwdV9wbGFu ZV9zc3BwX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkJc3RydWN0IGRy bV9wbGFuZV9zdGF0ZSAqc3RhdGUpCiB7CkBAIC0xNjU2LDcgKzEwODEsNiBAQCBzdGF0aWMgaW50 IGRwdV9wbGFuZV9zc3BwX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAlz dHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpwc3RhdGU7CiAJY29uc3Qgc3RydWN0IGRwdV9mb3JtYXQg KmZtdDsKIAlzdHJ1Y3QgZHB1X3JlY3Qgc3JjLCBkc3Q7Ci0JdWludDMyX3QgZGVjaV93LCBkZWNp X2gsIHNyY19kZWNpX3csIHNyY19kZWNpX2g7CiAJdWludDMyX3QgbWF4X3Vwc2NhbGUsIG1heF9k b3duc2NhbGUsIG1pbl9zcmNfc2l6ZSwgbWF4X2xpbmV3aWR0aDsKIAlib29sIHExNl9kYXRhID0g dHJ1ZTsKIApAQCAtMTY3NiwxOCArMTEwMCwxMiBAQCBzdGF0aWMgaW50IGRwdV9wbGFuZV9zc3Bw X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkJZ290byBleGl0OwogCX0K IAotCWRlY2lfdyA9IGRwdV9wbGFuZV9nZXRfcHJvcGVydHkocHN0YXRlLCBQTEFORV9QUk9QX0hf REVDSU1BVEUpOwotCWRlY2lfaCA9IGRwdV9wbGFuZV9nZXRfcHJvcGVydHkocHN0YXRlLCBQTEFO RV9QUk9QX1ZfREVDSU1BVEUpOwotCiAJLyogc3JjIHZhbHVlcyBhcmUgaW4gUTE2IGZpeGVkIHBv aW50LCBjb252ZXJ0IHRvIGludGVnZXIgKi8KIAlQT1BVTEFURV9SRUNUKCZzcmMsIHN0YXRlLT5z cmNfeCwgc3RhdGUtPnNyY195LCBzdGF0ZS0+c3JjX3csCiAJCXN0YXRlLT5zcmNfaCwgcTE2X2Rh dGEpOwogCVBPUFVMQVRFX1JFQ1QoJmRzdCwgc3RhdGUtPmNydGNfeCwgc3RhdGUtPmNydGNfeSwg c3RhdGUtPmNydGNfdywKIAkJc3RhdGUtPmNydGNfaCwgIXExNl9kYXRhKTsKIAotCXNyY19kZWNp X3cgPSBERUNJTUFURURfRElNRU5TSU9OKHNyYy53LCBkZWNpX3cpOwotCXNyY19kZWNpX2ggPSBE RUNJTUFURURfRElNRU5TSU9OKHNyYy5oLCBkZWNpX2gpOwotCiAJbWF4X3Vwc2NhbGUgPSBwZHB1 LT5waXBlX3NibGstPm1heHVwc2NhbGU7CiAJbWF4X2Rvd25zY2FsZSA9IHBkcHUtPnBpcGVfc2Js ay0+bWF4ZHduc2NhbGU7CiAJbWF4X2xpbmV3aWR0aCA9IHBkcHUtPnBpcGVfc2Jsay0+Y29tbW9u LT5tYXhsaW5ld2lkdGg7CkBAIC0xNjk2LDcgKzExMTQsNyBAQCBzdGF0aWMgaW50IGRwdV9wbGFu ZV9zc3BwX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkJZHB1X3BsYW5l X2VuYWJsZWQocGxhbmUtPnN0YXRlKSwgZHB1X3BsYW5lX2VuYWJsZWQoc3RhdGUpKTsKIAogCWlm ICghZHB1X3BsYW5lX2VuYWJsZWQoc3RhdGUpKQotCQlnb3RvIG1vZGVzZXRfdXBkYXRlOworCQln b3RvIGV4aXQ7CiAKIAlmbXQgPSB0b19kcHVfZm9ybWF0KG1zbV9mcmFtZWJ1ZmZlcl9mb3JtYXQo c3RhdGUtPmZiKSk7CiAKQEAgLTE3MzQsMTggKzExNTIsNiBAQCBzdGF0aWMgaW50IGRwdV9wbGFu ZV9zc3BwX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkJcmV0ID0gLUVJ TlZBTDsKIAogCS8qIGRlY2ltYXRpb24gdmFsaWRhdGlvbiAqLwotCX0gZWxzZSBpZiAoZGVjaV93 IHx8IGRlY2lfaCkgewotCQlpZiAoKGRlY2lfdyA+IHBkcHUtPnBpcGVfc2Jsay0+Y29tbW9uLT5t YXhoZGVjaWV4cCkgfHwKLQkJCShkZWNpX2ggPiBwZHB1LT5waXBlX3NibGstPmNvbW1vbi0+bWF4 dmRlY2lleHApKSB7Ci0JCQlEUFVfRVJST1JfUExBTkUocGRwdSwKLQkJCQkJInRvbyBtdWNoIGRl Y2ltYXRpb24gcmVxdWVzdGVkXG4iKTsKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCX0gZWxzZSBpZiAo Zm10LT5mZXRjaF9tb2RlICE9IERQVV9GRVRDSF9MSU5FQVIpIHsKLQkJCURQVV9FUlJPUl9QTEFO RShwZHB1LAotCQkJCQkiZGVjaW1hdGlvbiByZXF1aXJlcyBsaW5lYXIgZmV0Y2hcbiIpOwotCQkJ cmV0ID0gLUVJTlZBTDsKLQkJfQotCiAJfSBlbHNlIGlmICghKHBkcHUtPmZlYXR1cmVzICYgRFBV X1NTUFBfU0NBTEVSKSAmJgogCQkoKHNyYy53ICE9IGRzdC53KSB8fCAoc3JjLmggIT0gZHN0Lmgp KSkgewogCQlEUFVfRVJST1JfUExBTkUocGRwdSwKQEAgLTE3NTQsNTcgKzExNjAsMjMgQEAgc3Rh dGljIGludCBkcHVfcGxhbmVfc3NwcF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxh bmUsCiAJCXJldCA9IC1FSU5WQUw7CiAKIAkvKiBjaGVjayBkZWNpbWF0ZWQgc291cmNlIHdpZHRo ICovCi0JfSBlbHNlIGlmIChzcmNfZGVjaV93ID4gbWF4X2xpbmV3aWR0aCkgeworCX0gZWxzZSBp ZiAoc3JjLncgPiBtYXhfbGluZXdpZHRoKSB7CiAJCURQVV9FUlJPUl9QTEFORShwZHB1LAotCQkJ CSJpbnZhbGlkIHNyYyB3OiV1LCBkZWNpIHc6JXUsIGxpbmUgdzoldVxuIiwKLQkJCQlzcmMudywg c3JjX2RlY2lfdywgbWF4X2xpbmV3aWR0aCk7CisJCQkJImludmFsaWQgc3JjIHc6JXUsIGxpbmUg dzoldVxuIiwKKwkJCQlzcmMudywgbWF4X2xpbmV3aWR0aCk7CiAJCXJldCA9IC1FMkJJRzsKIAog CS8qIGNoZWNrIG1heCBzY2FsZXIgY2FwYWJpbGl0eSAqLwotCX0gZWxzZSBpZiAoKChzcmNfZGVj aV93ICogbWF4X3Vwc2NhbGUpIDwgZHN0LncpIHx8Ci0JCSgoc3JjX2RlY2lfaCAqIG1heF91cHNj YWxlKSA8IGRzdC5oKSB8fAotCQkoKGRzdC53ICogbWF4X2Rvd25zY2FsZSkgPCBzcmNfZGVjaV93 KSB8fAotCQkoKGRzdC5oICogbWF4X2Rvd25zY2FsZSkgPCBzcmNfZGVjaV9oKSkgeworCX0gZWxz ZSBpZiAoKChzcmMudyAqIG1heF91cHNjYWxlKSA8IGRzdC53KSB8fAorCQkoKHNyYy5oICogbWF4 X3Vwc2NhbGUpIDwgZHN0LmgpIHx8CisJCSgoZHN0LncgKiBtYXhfZG93bnNjYWxlKSA8IHNyYy53 KSB8fAorCQkoKGRzdC5oICogbWF4X2Rvd25zY2FsZSkgPCBzcmMuaCkpIHsKIAkJRFBVX0VSUk9S X1BMQU5FKHBkcHUsCiAJCQkidG9vIG11Y2ggc2NhbGluZyByZXF1ZXN0ZWQgJXV4JXUtPiV1eCV1 XG4iLAotCQkJc3JjX2RlY2lfdywgc3JjX2RlY2lfaCwgZHN0LncsIGRzdC5oKTsKKwkJCXNyYy53 LCBzcmMuaCwgZHN0LncsIGRzdC5oKTsKIAkJcmV0ID0gLUUyQklHOwotCX0gZWxzZSBpZiAoX2Rw dV9wbGFuZV92YWxpZGF0ZV9zY2FsZXJfdjIocGRwdSwgcHN0YXRlLCBmbXQsCi0JCQkJc3RhdGUt PmZiLT53aWR0aCwKLQkJCQlzdGF0ZS0+ZmItPmhlaWdodCwKLQkJCQlzcmMudywgc3JjLmgsIGRl Y2lfdywgZGVjaV9oKSkgewotCQlyZXQgPSAtRUlOVkFMOwogCX0KIAotCS8qIGNoZWNrIGV4Y2wg cmVjdCBjb25maWdzICovCi0JaWYgKCFyZXQgJiYgcHN0YXRlLT5leGNsX3JlY3QudyAmJiBwc3Rh dGUtPmV4Y2xfcmVjdC5oKSB7Ci0JCXN0cnVjdCBkcHVfcmVjdCBpbnRlcnNlY3Q7Ci0KLQkJLyoK LQkJICogQ2hlY2sgZXhjbHVzaW9uIHJlY3QgYWdhaW5zdCBzcmMgcmVjdC4KLQkJICogaXQgbXVz dCBpbnRlcnNlY3Qgd2l0aCBzb3VyY2UgcmVjdC4KLQkJICovCi0JCWRwdV9rbXNfcmVjdF9pbnRl cnNlY3QoJnNyYywgJnBzdGF0ZS0+ZXhjbF9yZWN0LCAmaW50ZXJzZWN0KTsKLQkJaWYgKGludGVy c2VjdC53ICE9IHBzdGF0ZS0+ZXhjbF9yZWN0LncgfHwKLQkJCQlpbnRlcnNlY3QuaCAhPSBwc3Rh dGUtPmV4Y2xfcmVjdC5oIHx8Ci0JCQkJRFBVX0ZPUk1BVF9JU19ZVVYoZm10KSkgewotCQkJRFBV X0VSUk9SX1BMQU5FKHBkcHUsCi0JCQkJImludmFsaWQgZXhjbF9yZWN0OnslZCwlZCwlZCwlZH0g c3JjOnslZCwlZCwlZCwlZH0sIGZtdDogJTQuNHNcbiIsCi0JCQkJcHN0YXRlLT5leGNsX3JlY3Qu eCwgcHN0YXRlLT5leGNsX3JlY3QueSwKLQkJCQlwc3RhdGUtPmV4Y2xfcmVjdC53LCBwc3RhdGUt PmV4Y2xfcmVjdC5oLAotCQkJCXNyYy54LCBzcmMueSwgc3JjLncsIHNyYy5oLAotCQkJCShjaGFy ICopJmZtdC0+YmFzZS5waXhlbF9mb3JtYXQpOwotCQkJcmV0ID0gLUVJTlZBTDsKLQkJfQotCQlE UFVfREVCVUdfUExBTkUocGRwdSwgImV4Y2xfcmVjdDogeyVkLCVkLCVkLCVkfVxuIiwKLQkJCQlw c3RhdGUtPmV4Y2xfcmVjdC54LCBwc3RhdGUtPmV4Y2xfcmVjdC55LAotCQkJCXBzdGF0ZS0+ZXhj bF9yZWN0LncsIHBzdGF0ZS0+ZXhjbF9yZWN0LmgpOwotCX0KLQotbW9kZXNldF91cGRhdGU6Ci0J aWYgKCFyZXQpCi0JCV9kcHVfcGxhbmVfc3NwcF9hdG9taWNfY2hlY2tfbW9kZV9jaGFuZ2VkKHBk cHUsCi0JCQkJc3RhdGUsIHBsYW5lLT5zdGF0ZSk7CiBleGl0OgogCXJldHVybiByZXQ7CiB9CkBA IC0xODk3LDcgKzEyNjksNiBAQCBzdGF0aWMgaW50IGRwdV9wbGFuZV9zc3BwX2F0b21pY191cGRh dGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7 CiAJc3RydWN0IGRwdV9yZWN0IHNyYywgZHN0OwogCWJvb2wgcTE2X2RhdGEgPSB0cnVlOwotCWlu dCBpZHg7CiAKIAlpZiAoIXBsYW5lKSB7CiAJCURQVV9FUlJPUigiaW52YWxpZCBwbGFuZVxuIik7 CkBAIC0xOTI3LDE1MCArMTI5OCw2OSBAQCBzdGF0aWMgaW50IGRwdV9wbGFuZV9zc3BwX2F0b21p Y191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJZm10ID0gdG9fZHB1X2Zvcm1hdCht c21fZnJhbWVidWZmZXJfZm9ybWF0KGZiKSk7CiAJbnBsYW5lcyA9IGZtdC0+bnVtX3BsYW5lczsK IAotCS8qIGZvcmNlIHJlcHJvZ3JhbW1pbmcgb2YgYWxsIHRoZSBwYXJhbWV0ZXJzLCBpZiB0aGUg ZmxhZyBpcyBzZXQgKi8KLQlpZiAocGRwdS0+cmV2YWxpZGF0ZSkgewotCQlEUFVfREVCVUcoInBs YW5lOiVkIC0gcmVjb25maWd1cmUgYWxsIHRoZSBwYXJhbWV0ZXJzXG4iLAotCQkJCXBsYW5lLT5i YXNlLmlkKTsKLQkJcHN0YXRlLT5kaXJ0eSA9IERQVV9QTEFORV9ESVJUWV9BTEw7Ci0JCXBkcHUt PnJldmFsaWRhdGUgPSBmYWxzZTsKLQl9Ci0KLQkvKiBkZXRlcm1pbmUgd2hhdCBuZWVkcyB0byBi ZSByZWZyZXNoZWQgKi8KLQl3aGlsZSAoKGlkeCA9IG1zbV9wcm9wZXJ0eV9wb3BfZGlydHkoJnBk cHUtPnByb3BlcnR5X2luZm8sCi0JCQkJCSZwc3RhdGUtPnByb3BlcnR5X3N0YXRlKSkgPj0gMCkg ewotCQlzd2l0Y2ggKGlkeCkgewotCQljYXNlIFBMQU5FX1BST1BfU0NBTEVSX1YxOgotCQljYXNl IFBMQU5FX1BST1BfU0NBTEVSX1YyOgotCQljYXNlIFBMQU5FX1BST1BfU0NBTEVSX0xVVF9FRDoK LQkJY2FzZSBQTEFORV9QUk9QX1NDQUxFUl9MVVRfQ0lSOgotCQljYXNlIFBMQU5FX1BST1BfU0NB TEVSX0xVVF9TRVA6Ci0JCWNhc2UgUExBTkVfUFJPUF9IX0RFQ0lNQVRFOgotCQljYXNlIFBMQU5F X1BST1BfVl9ERUNJTUFURToKLQkJY2FzZSBQTEFORV9QUk9QX1NSQ19DT05GSUc6Ci0JCWNhc2Ug UExBTkVfUFJPUF9aUE9TOgotCQljYXNlIFBMQU5FX1BST1BfRVhDTF9SRUNUX1YxOgotCQkJcHN0 YXRlLT5kaXJ0eSB8PSBEUFVfUExBTkVfRElSVFlfUkVDVFM7Ci0JCQlicmVhazsKLQkJY2FzZSBQ TEFORV9QUk9QX0NTQ19WMToKLQkJCXBzdGF0ZS0+ZGlydHkgfD0gRFBVX1BMQU5FX0RJUlRZX0ZP Uk1BVDsKLQkJCWJyZWFrOwotCQljYXNlIFBMQU5FX1BST1BfQ09MT1JfRklMTDoKLQkJCS8qIHBv dGVudGlhbGx5IG5lZWQgdG8gcmVmcmVzaCBldmVyeXRoaW5nICovCi0JCQlwc3RhdGUtPmRpcnR5 ID0gRFBVX1BMQU5FX0RJUlRZX0FMTDsKLQkJCWJyZWFrOwotCQljYXNlIFBMQU5FX1BST1BfSU5G TzoKLQkJY2FzZSBQTEFORV9QUk9QX0FMUEhBOgotCQljYXNlIFBMQU5FX1BST1BfQkxFTkRfT1A6 Ci0JCQkvKiBubyBzcGVjaWFsIGFjdGlvbiByZXF1aXJlZCAqLwotCQkJYnJlYWs7Ci0JCWNhc2Ug UExBTkVfUFJPUF9QUkVGSUxMX1NJWkU6Ci0JCWNhc2UgUExBTkVfUFJPUF9QUkVGSUxMX1RJTUU6 Ci0JCQlwc3RhdGUtPmRpcnR5IHw9IERQVV9QTEFORV9ESVJUWV9QRVJGOwotCQkJYnJlYWs7Ci0J CWRlZmF1bHQ6Ci0JCQkvKiB1bmtub3duIHByb3BlcnR5LCByZWZyZXNoIGV2ZXJ5dGhpbmcgKi8K LQkJCXBzdGF0ZS0+ZGlydHkgfD0gRFBVX1BMQU5FX0RJUlRZX0FMTDsKLQkJCURQVV9FUlJPUigi ZXhlY3V0aW5nIGZ1bGwgbW9kZSBzZXQsIHBycF9pZHggJWRcbiIsIGlkeCk7Ci0JCQlicmVhazsK LQkJfQotCX0KLQotCS8qKgotCSAqIHNpbmNlIHBsYW5lX2F0b21pY19jaGVjayBpcyBpbnZva2Vk IGJlZm9yZSBjcnRjX2F0b21pY19jaGVjawotCSAqIGluIHRoZSBjb21taXQgc2VxdWVuY2UsIGFs bCB0aGUgcGFyYW1ldGVycyBmb3IgdXBkYXRpbmcgdGhlCi0JICogcGxhbmUgZGlydHkgZmxhZyB3 aWxsIG5vdCBiZSBhdmFpbGFibGUgZHVyaW5nCi0JICogcGxhbmVfYXRvbWljX2NoZWNrIGFzIHNv bWUgZmVhdHVyZXMgcGFyYW1zIGFyZSB1cGRhdGVkCi0JICogaW4gY3J0Y19hdG9taWNfY2hlY2sg KGVnLjpzRE1BKS4gU28gY2hlY2sgZm9yIG1vZGVfY2hhbmdlCi0JICogYmVmb3JlIHNzcHAgdXBk YXRlLgotCSAqLwotCV9kcHVfcGxhbmVfc3NwcF9hdG9taWNfY2hlY2tfbW9kZV9jaGFuZ2VkKHBk cHUsIHN0YXRlLAotCQkJCQkJCQlvbGRfc3RhdGUpOwotCi0JaWYgKHBzdGF0ZS0+ZGlydHkgJiBE UFVfUExBTkVfRElSVFlfUkVDVFMpCi0JCW1lbXNldCgmKHBkcHUtPnBpcGVfY2ZnKSwgMCwgc2l6 ZW9mKHN0cnVjdCBkcHVfaHdfcGlwZV9jZmcpKTsKKwltZW1zZXQoJihwZHB1LT5waXBlX2NmZyks IDAsIHNpemVvZihzdHJ1Y3QgZHB1X2h3X3BpcGVfY2ZnKSk7CiAKIAlfZHB1X3BsYW5lX3NldF9z Y2Fub3V0KHBsYW5lLCBwc3RhdGUsICZwZHB1LT5waXBlX2NmZywgZmIpOwogCi0JLyogZWFybHkg b3V0IGlmIG5vdGhpbmcgZGlydHkgKi8KLQlpZiAoIXBzdGF0ZS0+ZGlydHkpCi0JCXJldHVybiAw OwogCXBzdGF0ZS0+cGVuZGluZyA9IHRydWU7CiAKIAlwZHB1LT5pc19ydF9waXBlID0gKGRwdV9j cnRjX2dldF9jbGllbnRfdHlwZShjcnRjKSAhPSBOUlRfQ0xJRU5UKTsKIAlfZHB1X3BsYW5lX3Nl dF9xb3NfY3RybChwbGFuZSwgZmFsc2UsIERQVV9QTEFORV9RT1NfUEFOSUNfQ1RSTCk7CiAKIAkv KiB1cGRhdGUgcm9pIGNvbmZpZyAqLwotCWlmIChwc3RhdGUtPmRpcnR5ICYgRFBVX1BMQU5FX0RJ UlRZX1JFQ1RTKSB7Ci0JCVBPUFVMQVRFX1JFQ1QoJnNyYywgc3RhdGUtPnNyY194LCBzdGF0ZS0+ c3JjX3ksCi0JCQlzdGF0ZS0+c3JjX3csIHN0YXRlLT5zcmNfaCwgcTE2X2RhdGEpOwotCQlQT1BV TEFURV9SRUNUKCZkc3QsIHN0YXRlLT5jcnRjX3gsIHN0YXRlLT5jcnRjX3ksCi0JCQlzdGF0ZS0+ Y3J0Y193LCBzdGF0ZS0+Y3J0Y19oLCAhcTE2X2RhdGEpOwotCi0JCURQVV9ERUJVR19QTEFORShw ZHB1LAotCQkJIkZCWyV1XSAldSwldSwldXgldS0+Y3J0YyV1ICVkLCVkLCV1eCV1LCAlNC40cyB1 YndjICVkXG4iLAotCQkJCWZiLT5iYXNlLmlkLCBzcmMueCwgc3JjLnksIHNyYy53LCBzcmMuaCwK LQkJCQljcnRjLT5iYXNlLmlkLCBkc3QueCwgZHN0LnksIGRzdC53LCBkc3QuaCwKLQkJCQkoY2hh ciAqKSZmbXQtPmJhc2UucGl4ZWxfZm9ybWF0LAotCQkJCURQVV9GT1JNQVRfSVNfVUJXQyhmbXQp KTsKLQotCQlpZiAoZHB1X3BsYW5lX2dldF9wcm9wZXJ0eShwc3RhdGUsIFBMQU5FX1BST1BfU1JD X0NPTkZJRykgJgotCQkJQklUKERQVV9EUk1fREVJTlRFUkxBQ0UpKSB7Ci0JCQlEUFVfREVCVUdf UExBTkUocGRwdSwgImRlaW50ZXJsYWNlXG4iKTsKLQkJCWZvciAoaWR4ID0gMDsgaWR4IDwgRFBV X01BWF9QTEFORVM7ICsraWR4KQotCQkJCXBkcHUtPnBpcGVfY2ZnLmxheW91dC5wbGFuZV9waXRj aFtpZHhdIDw8PSAxOwotCQkJc3JjLmggLz0gMjsKLQkJCXNyYy55ICA9IERJVl9ST1VORF9VUChz cmMueSwgMik7Ci0JCQlzcmMueSAmPSB+MHgxOwotCQl9Ci0KLQkJcGRwdS0+cGlwZV9jZmcuc3Jj X3JlY3QgPSBzcmM7Ci0JCXBkcHUtPnBpcGVfY2ZnLmRzdF9yZWN0ID0gZHN0OworCVBPUFVMQVRF X1JFQ1QoJnNyYywgc3RhdGUtPnNyY194LCBzdGF0ZS0+c3JjX3ksCisJCXN0YXRlLT5zcmNfdywg c3RhdGUtPnNyY19oLCBxMTZfZGF0YSk7CisJUE9QVUxBVEVfUkVDVCgmZHN0LCBzdGF0ZS0+Y3J0 Y194LCBzdGF0ZS0+Y3J0Y195LAorCQlzdGF0ZS0+Y3J0Y193LCBzdGF0ZS0+Y3J0Y19oLCAhcTE2 X2RhdGEpOworCisJRFBVX0RFQlVHX1BMQU5FKHBkcHUsCisJCSJGQlsldV0gJXUsJXUsJXV4JXUt PmNydGMldSAlZCwlZCwldXgldSwgJTQuNHMgdWJ3YyAlZFxuIiwKKwkJCWZiLT5iYXNlLmlkLCBz cmMueCwgc3JjLnksIHNyYy53LCBzcmMuaCwKKwkJCWNydGMtPmJhc2UuaWQsIGRzdC54LCBkc3Qu eSwgZHN0LncsIGRzdC5oLAorCQkJKGNoYXIgKikmZm10LT5iYXNlLnBpeGVsX2Zvcm1hdCwKKwkJ CURQVV9GT1JNQVRfSVNfVUJXQyhmbXQpKTsKIAotCQlfZHB1X3BsYW5lX3NldHVwX3NjYWxlcihw ZHB1LCBwc3RhdGUsIGZtdCwgZmFsc2UpOwogCi0JCS8qIGNoZWNrIGZvciBjb2xvciBmaWxsICov Ci0JCXBkcHUtPmNvbG9yX2ZpbGwgPSAodWludDMyX3QpZHB1X3BsYW5lX2dldF9wcm9wZXJ0eShw c3RhdGUsCi0JCQkJUExBTkVfUFJPUF9DT0xPUl9GSUxMKTsKLQkJaWYgKHBkcHUtPmNvbG9yX2Zp bGwgJiBEUFVfUExBTkVfQ09MT1JfRklMTF9GTEFHKSB7Ci0JCQkvKiBza2lwIHJlbWFpbmluZyBw cm9jZXNzaW5nIG9uIGNvbG9yIGZpbGwgKi8KLQkJCXBzdGF0ZS0+ZGlydHkgPSAweDA7Ci0JCX0g ZWxzZSBpZiAocGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX3JlY3RzKSB7Ci0JCQlwZHB1LT5waXBl X2h3LT5vcHMuc2V0dXBfcmVjdHMocGRwdS0+cGlwZV9odywKLQkJCQkJJnBkcHUtPnBpcGVfY2Zn LAotCQkJCQlwc3RhdGUtPm11bHRpcmVjdF9pbmRleCk7Ci0JCX0KKwlwZHB1LT5waXBlX2NmZy5z cmNfcmVjdCA9IHNyYzsKKwlwZHB1LT5waXBlX2NmZy5kc3RfcmVjdCA9IGRzdDsKIAotCQlpZiAo cGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX3BlICYmCi0JCQkJKHBzdGF0ZS0+bXVsdGlyZWN0X2lu ZGV4ICE9IERQVV9TU1BQX1JFQ1RfMSkpCi0JCQlwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfcGUo cGRwdS0+cGlwZV9odywKLQkJCQkJJnBzdGF0ZS0+cGl4ZWxfZXh0KTsKKwlfZHB1X3BsYW5lX3Nl dHVwX3NjYWxlcihwZHB1LCBwc3RhdGUsIGZtdCwgZmFsc2UpOwogCi0JCS8qKgotCQkgKiB3aGVu IHByb2dyYW1tZWQgaW4gbXVsdGlyZWN0IG1vZGUsIHNjYWxhciBibG9jayB3aWxsIGJlCi0JCSAq IGJ5cGFzc2VkLiBTdGlsbCB3ZSBuZWVkIHRvIHVwZGF0ZSBhbHBoYSBhbmQgYml0d2lkdGgKLQkJ ICogT05MWSBmb3IgUkVDVDAKLQkJICovCi0JCWlmIChwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBf c2NhbGVyICYmCi0JCQkJcHN0YXRlLT5tdWx0aXJlY3RfaW5kZXggIT0gRFBVX1NTUFBfUkVDVF8x KQotCQkJcGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX3NjYWxlcihwZHB1LT5waXBlX2h3LAotCQkJ CQkmcGRwdS0+cGlwZV9jZmcsICZwc3RhdGUtPnBpeGVsX2V4dCwKLQkJCQkJJnBzdGF0ZS0+c2Nh bGVyM19jZmcpOwotCi0JCS8qIHVwZGF0ZSBleGNsIHJlY3QgKi8KLQkJaWYgKHBkcHUtPnBpcGVf aHctPm9wcy5zZXR1cF9leGNsX3JlY3QpCi0JCQlwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfZXhj bF9yZWN0KHBkcHUtPnBpcGVfaHcsCi0JCQkJCSZwc3RhdGUtPmV4Y2xfcmVjdCwKLQkJCQkJcHN0 YXRlLT5tdWx0aXJlY3RfaW5kZXgpOworCS8qIG92ZXJyaWRlIGZvciBjb2xvciBmaWxsICovCisJ aWYgKHBkcHUtPmNvbG9yX2ZpbGwgJiBEUFVfUExBTkVfQ09MT1JfRklMTF9GTEFHKSB7CisJCS8q IHNraXAgcmVtYWluaW5nIHByb2Nlc3Npbmcgb24gY29sb3IgZmlsbCAqLworCQlyZXR1cm4gMDsK Kwl9CiAKLQkJaWYgKHBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9tdWx0aXJlY3QpCi0JCQlwZHB1 LT5waXBlX2h3LT5vcHMuc2V0dXBfbXVsdGlyZWN0KAotCQkJCQlwZHB1LT5waXBlX2h3LAotCQkJ CQlwc3RhdGUtPm11bHRpcmVjdF9pbmRleCwKLQkJCQkJcHN0YXRlLT5tdWx0aXJlY3RfbW9kZSk7 CisJaWYgKHBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9yZWN0cykgeworCQlwZHB1LT5waXBlX2h3 LT5vcHMuc2V0dXBfcmVjdHMocGRwdS0+cGlwZV9odywKKwkJCQkmcGRwdS0+cGlwZV9jZmcsCisJ CQkJcHN0YXRlLT5tdWx0aXJlY3RfaW5kZXgpOwogCX0KIAotCWlmICgocHN0YXRlLT5kaXJ0eSAm IERQVV9QTEFORV9ESVJUWV9GT1JNQVQpICYmCi0JCQlwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBf Zm9ybWF0KSB7CisJaWYgKHBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9wZSAmJgorCQkJKHBzdGF0 ZS0+bXVsdGlyZWN0X2luZGV4ICE9IERQVV9TU1BQX1JFQ1RfMSkpCisJCXBkcHUtPnBpcGVfaHct Pm9wcy5zZXR1cF9wZShwZHB1LT5waXBlX2h3LAorCQkJCSZwc3RhdGUtPnBpeGVsX2V4dCk7CisK KwkvKioKKwkgKiB3aGVuIHByb2dyYW1tZWQgaW4gbXVsdGlyZWN0IG1vZGUsIHNjYWxhciBibG9j ayB3aWxsIGJlCisJICogYnlwYXNzZWQuIFN0aWxsIHdlIG5lZWQgdG8gdXBkYXRlIGFscGhhIGFu ZCBiaXR3aWR0aAorCSAqIE9OTFkgZm9yIFJFQ1QwCisJICovCisJaWYgKHBkcHUtPnBpcGVfaHct Pm9wcy5zZXR1cF9zY2FsZXIgJiYKKwkJCXBzdGF0ZS0+bXVsdGlyZWN0X2luZGV4ICE9IERQVV9T U1BQX1JFQ1RfMSkKKwkJcGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX3NjYWxlcihwZHB1LT5waXBl X2h3LAorCQkJCSZwZHB1LT5waXBlX2NmZywgJnBzdGF0ZS0+cGl4ZWxfZXh0LAorCQkJCSZwc3Rh dGUtPnNjYWxlcjNfY2ZnKTsKKworCWlmIChwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfbXVsdGly ZWN0KQorCQlwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfbXVsdGlyZWN0KAorCQkJCXBkcHUtPnBp cGVfaHcsCisJCQkJcHN0YXRlLT5tdWx0aXJlY3RfaW5kZXgsCisJCQkJcHN0YXRlLT5tdWx0aXJl Y3RfbW9kZSk7CisKKwlpZiAocGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX2Zvcm1hdCkgewogCQlz cmNfZmxhZ3MgPSAweDA7CiAKIAkJLyogdXBkYXRlIGZvcm1hdCAqLwpAQCAtMjEwMSwzNSArMTM5 MSwxNiBAQCBzdGF0aWMgaW50IGRwdV9wbGFuZV9zc3BwX2F0b21pY191cGRhdGUoc3RydWN0IGRy bV9wbGFuZSAqcGxhbmUsCiAJCQlwZHB1LT5jc2NfcHRyID0gMDsKIAl9CiAKLQlkcHVfY29sb3Jf cHJvY2Vzc19wbGFuZV9zZXR1cChwbGFuZSk7Ci0KLQkvKiB1cGRhdGUgc2hhcnBlbmluZyAqLwot CWlmICgocHN0YXRlLT5kaXJ0eSAmIERQVV9QTEFORV9ESVJUWV9TSEFSUEVOKSAmJgotCQlwZHB1 LT5waXBlX2h3LT5vcHMuc2V0dXBfc2hhcnBlbmluZykgewotCQlwZHB1LT5zaGFycF9jZmcuc3Ry ZW5ndGggPSBTSEFSUF9TVFJFTkdUSF9ERUZBVUxUOwotCQlwZHB1LT5zaGFycF9jZmcuZWRnZV90 aHIgPSBTSEFSUF9FREdFX1RIUl9ERUZBVUxUOwotCQlwZHB1LT5zaGFycF9jZmcuc21vb3RoX3Ro ciA9IFNIQVJQX1NNT09USF9USFJfREVGQVVMVDsKLQkJcGRwdS0+c2hhcnBfY2ZnLm5vaXNlX3Ro ciA9IFNIQVJQX05PSVNFX1RIUl9ERUZBVUxUOwotCi0JCXBkcHUtPnBpcGVfaHctPm9wcy5zZXR1 cF9zaGFycGVuaW5nKHBkcHUtPnBpcGVfaHcsCi0JCQkJJnBkcHUtPnNoYXJwX2NmZyk7Ci0JfQot CiAJX2RwdV9wbGFuZV9zZXRfcW9zX2x1dChwbGFuZSwgZmIpOwogCV9kcHVfcGxhbmVfc2V0X2Rh bmdlcl9sdXQocGxhbmUsIGZiKTsKIAogCWlmIChwbGFuZS0+dHlwZSAhPSBEUk1fUExBTkVfVFlQ RV9DVVJTT1IpIHsKIAkJX2RwdV9wbGFuZV9zZXRfcW9zX2N0cmwocGxhbmUsIHRydWUsIERQVV9Q TEFORV9RT1NfUEFOSUNfQ1RSTCk7CiAJCV9kcHVfcGxhbmVfc2V0X290X2xpbWl0KHBsYW5lLCBj cnRjKTsKLQkJaWYgKHBzdGF0ZS0+ZGlydHkgJiBEUFVfUExBTkVfRElSVFlfUEVSRikKLQkJCV9k cHVfcGxhbmVfc2V0X3RzX3ByZWZpbGwocGxhbmUsIHBzdGF0ZSk7CiAJfQogCiAJX2RwdV9wbGFu ZV9zZXRfcW9zX3JlbWFwKHBsYW5lKTsKIAotCS8qIGNsZWFyIGRpcnR5ICovCi0JcHN0YXRlLT5k aXJ0eSA9IDB4MDsKLQogCXJldHVybiAwOwogfQogCkBAIC0yMjA4LDEzICsxNDc5LDYgQEAgdm9p ZCBkcHVfcGxhbmVfcmVzdG9yZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKIAogCXBkcHUgPSB0 b19kcHVfcGxhbmUocGxhbmUpOwogCi0JLyoKLQkgKiBSZXZhbGlkYXRlIGlzIG9ubHkgdHJ1ZSBo ZXJlIGlmIGlkbGUgUEMgb2NjdXJyZWQgYW5kCi0JICogdGhlcmUgaXMgbm8gcGxhbmUgc3RhdGUg dXBkYXRlIGluIGN1cnJlbnQgY29tbWl0IGN5Y2xlLgotCSAqLwotCWlmICghcGRwdS0+cmV2YWxp ZGF0ZSkKLQkJcmV0dXJuOwotCiAJRFBVX0RFQlVHX1BMQU5FKHBkcHUsICJcbiIpOwogCiAJLyog bGFzdCBwbGFuZSBzdGF0ZSBpcyBzYW1lIGFzIGN1cnJlbnQgc3RhdGUgKi8KQEAgLTIyMjUsMjEg KzE0ODksOSBAQCB2b2lkIGRwdV9wbGFuZV9yZXN0b3JlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l KQogc3RhdGljIHZvaWQgX2RwdV9wbGFuZV9pbnN0YWxsX3Byb3BlcnRpZXMoc3RydWN0IGRybV9w bGFuZSAqcGxhbmUsCiAJc3RydWN0IGRwdV9tZHNzX2NmZyAqY2F0YWxvZywgdTMyIG1hc3Rlcl9w bGFuZV9pZCkKIHsKLQlzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wcm9wX2VudW1fbGlzdCBlX2Js ZW5kX29wW10gPSB7Ci0JCXtEUFVfRFJNX0JMRU5EX09QX05PVF9ERUZJTkVELCAgICAibm90X2Rl ZmluZWQifSwKLQkJe0RQVV9EUk1fQkxFTkRfT1BfT1BBUVVFLCAgICAgICAgICJvcGFxdWUifSwK LQkJe0RQVV9EUk1fQkxFTkRfT1BfUFJFTVVMVElQTElFRCwgICJwcmVtdWx0aXBsaWVkIn0sCi0J CXtEUFVfRFJNX0JMRU5EX09QX0NPVkVSQUdFLCAgICAgICAiY292ZXJhZ2UifQotCX07Ci0Jc3Rh dGljIGNvbnN0IHN0cnVjdCBkcm1fcHJvcF9lbnVtX2xpc3QgZV9zcmNfY29uZmlnW10gPSB7Ci0J CXtEUFVfRFJNX0RFSU5URVJMQUNFLCAiZGVpbnRlcmxhY2UifQotCX07Ci0JY29uc3Qgc3RydWN0 IGRwdV9mb3JtYXRfZXh0ZW5kZWQgKmZvcm1hdF9saXN0OwotCXN0cnVjdCBkcHVfa21zX2luZm8g KmluZm87CiAJc3RydWN0IGRwdV9wbGFuZSAqcGRwdSA9IHRvX2RwdV9wbGFuZShwbGFuZSk7CiAJ aW50IHpwb3NfbWF4ID0gMjU1OwogCWludCB6cG9zX2RlZiA9IDA7Ci0JY2hhciBmZWF0dXJlX25h bWVbMjU2XTsKIAogCWlmICghcGxhbmUgfHwgIXBkcHUpIHsKIAkJRFBVX0VSUk9SKCJpbnZhbGlk IHBsYW5lXG4iKTsKQEAgLTIyNjksMzUzICsxNTIxLDYgQEAgc3RhdGljIHZvaWQgX2RwdV9wbGFu ZV9pbnN0YWxsX3Byb3BlcnRpZXMoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAKIAltc21fcHJv cGVydHlfaW5zdGFsbF9yYW5nZSgmcGRwdS0+cHJvcGVydHlfaW5mbywgInpwb3MiLAogCQkweDAs IDAsIHpwb3NfbWF4LCB6cG9zX2RlZiwgUExBTkVfUFJPUF9aUE9TKTsKLQotCW1zbV9wcm9wZXJ0 eV9pbnN0YWxsX3JhbmdlKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLCAiYWxwaGEiLAotCQkweDAsIDAs IDI1NSwgMjU1LCBQTEFORV9QUk9QX0FMUEhBKTsKLQotCWlmICghbWFzdGVyX3BsYW5lX2lkKSB7 Ci0JCWlmIChwZHB1LT5waXBlX3NibGstPmNvbW1vbi0+bWF4aGRlY2lleHApIHsKLQkJCW1zbV9w cm9wZXJ0eV9pbnN0YWxsX3JhbmdlKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLAotCQkJCQkiaF9kZWNp bWF0ZSIsIDB4MCwgMCwKLQkJCQkJcGRwdS0+cGlwZV9zYmxrLT5jb21tb24tPm1heGhkZWNpZXhw LCAwLAotCQkJCQlQTEFORV9QUk9QX0hfREVDSU1BVEUpOwotCQl9Ci0KLQkJaWYgKHBkcHUtPnBp cGVfc2Jsay0+Y29tbW9uLT5tYXh2ZGVjaWV4cCkgewotCQkJbXNtX3Byb3BlcnR5X2luc3RhbGxf cmFuZ2UoJnBkcHUtPnByb3BlcnR5X2luZm8sCi0JCQkJCSJ2X2RlY2ltYXRlIiwgMHgwLCAwLAot CQkJCQlwZHB1LT5waXBlX3NibGstPmNvbW1vbi0+bWF4dmRlY2lleHAsIDAsCi0JCQkJCVBMQU5F X1BST1BfVl9ERUNJTUFURSk7Ci0JCX0KLQotCQlpZiAocGRwdS0+ZmVhdHVyZXMgJiBCSVQoRFBV X1NTUFBfU0NBTEVSX1FTRUVEMykpIHsKLQkJCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3JhbmdlKAot CQkJCQkmcGRwdS0+cHJvcGVydHlfaW5mbywgInNjYWxlcl92MiIsCi0JCQkJCTB4MCwgMCwgfjAs IDAsIFBMQU5FX1BST1BfU0NBTEVSX1YyKTsKLQkJCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX2Jsb2Io JnBkcHUtPnByb3BlcnR5X2luZm8sCi0JCQkJCSJsdXRfZWQiLCAwLCBQTEFORV9QUk9QX1NDQUxF Ul9MVVRfRUQpOwotCQkJbXNtX3Byb3BlcnR5X2luc3RhbGxfYmxvYigmcGRwdS0+cHJvcGVydHlf aW5mbywKLQkJCQkJImx1dF9jaXIiLCAwLAotCQkJCQlQTEFORV9QUk9QX1NDQUxFUl9MVVRfQ0lS KTsKLQkJCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX2Jsb2IoJnBkcHUtPnByb3BlcnR5X2luZm8sCi0J CQkJCSJsdXRfc2VwIiwgMCwKLQkJCQkJUExBTkVfUFJPUF9TQ0FMRVJfTFVUX1NFUCk7Ci0JCX0g ZWxzZSBpZiAocGRwdS0+ZmVhdHVyZXMgJiBEUFVfU1NQUF9TQ0FMRVIpIHsKLQkJCW1zbV9wcm9w ZXJ0eV9pbnN0YWxsX3JhbmdlKAotCQkJCQkmcGRwdS0+cHJvcGVydHlfaW5mbywgInNjYWxlcl92 MSIsIDB4MCwKLQkJCQkJMCwgfjAsIDAsIFBMQU5FX1BST1BfU0NBTEVSX1YxKTsKLQkJfQotCi0J CWlmIChwZHB1LT5mZWF0dXJlcyAmIEJJVChEUFVfU1NQUF9DU0MpIHx8Ci0JCSAgICBwZHB1LT5m ZWF0dXJlcyAmIEJJVChEUFVfU1NQUF9DU0NfMTBCSVQpKQotCQkJbXNtX3Byb3BlcnR5X2luc3Rh bGxfdm9sYXRpbGVfcmFuZ2UoCi0JCQkJCSZwZHB1LT5wcm9wZXJ0eV9pbmZvLCAiY3NjX3YxIiwg MHgwLAotCQkJCQkwLCB+MCwgMCwgUExBTkVfUFJPUF9DU0NfVjEpOwotCi0JCWlmIChwZHB1LT5m ZWF0dXJlcyAmIEJJVChEUFVfU1NQUF9IU0lDKSkgewotCQkJc25wcmludGYoZmVhdHVyZV9uYW1l LCBzaXplb2YoZmVhdHVyZV9uYW1lKSwgIiVzJWQiLAotCQkJCSJEUFVfU1NQUF9IVUVfViIsCi0J CQkJcGRwdS0+cGlwZV9zYmxrLT5oc2ljX2Jsay52ZXJzaW9uID4+IDE2KTsKLQkJCW1zbV9wcm9w ZXJ0eV9pbnN0YWxsX3JhbmdlKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLAotCQkJCWZlYXR1cmVfbmFt ZSwgMCwgMCwgMHhGRkZGRkZGRiwgMCwKLQkJCQlQTEFORV9QUk9QX0hVRV9BREpVU1QpOwotCQkJ c25wcmludGYoZmVhdHVyZV9uYW1lLCBzaXplb2YoZmVhdHVyZV9uYW1lKSwgIiVzJWQiLAotCQkJ CSJEUFVfU1NQUF9TQVRVUkFUSU9OX1YiLAotCQkJCXBkcHUtPnBpcGVfc2Jsay0+aHNpY19ibGsu dmVyc2lvbiA+PiAxNik7Ci0JCQltc21fcHJvcGVydHlfaW5zdGFsbF9yYW5nZSgmcGRwdS0+cHJv cGVydHlfaW5mbywKLQkJCQlmZWF0dXJlX25hbWUsIDAsIDAsIDB4RkZGRkZGRkYsIDAsCi0JCQkJ UExBTkVfUFJPUF9TQVRVUkFUSU9OX0FESlVTVCk7Ci0JCQlzbnByaW50ZihmZWF0dXJlX25hbWUs IHNpemVvZihmZWF0dXJlX25hbWUpLCAiJXMlZCIsCi0JCQkJIkRQVV9TU1BQX1ZBTFVFX1YiLAot CQkJCXBkcHUtPnBpcGVfc2Jsay0+aHNpY19ibGsudmVyc2lvbiA+PiAxNik7Ci0JCQltc21fcHJv cGVydHlfaW5zdGFsbF9yYW5nZSgmcGRwdS0+cHJvcGVydHlfaW5mbywKLQkJCQlmZWF0dXJlX25h bWUsIDAsIDAsIDB4RkZGRkZGRkYsIDAsCi0JCQkJUExBTkVfUFJPUF9WQUxVRV9BREpVU1QpOwot CQkJc25wcmludGYoZmVhdHVyZV9uYW1lLCBzaXplb2YoZmVhdHVyZV9uYW1lKSwgIiVzJWQiLAot CQkJCSJEUFVfU1NQUF9DT05UUkFTVF9WIiwKLQkJCQlwZHB1LT5waXBlX3NibGstPmhzaWNfYmxr LnZlcnNpb24gPj4gMTYpOwotCQkJbXNtX3Byb3BlcnR5X2luc3RhbGxfcmFuZ2UoJnBkcHUtPnBy b3BlcnR5X2luZm8sCi0JCQkJZmVhdHVyZV9uYW1lLCAwLCAwLCAweEZGRkZGRkZGLCAwLAotCQkJ CVBMQU5FX1BST1BfQ09OVFJBU1RfQURKVVNUKTsKLQkJfQotCX0KLQotCWlmIChwZHB1LT5mZWF0 dXJlcyAmIEJJVChEUFVfU1NQUF9FWENMX1JFQ1QpKQotCQltc21fcHJvcGVydHlfaW5zdGFsbF92 b2xhdGlsZV9yYW5nZSgmcGRwdS0+cHJvcGVydHlfaW5mbywKLQkJCSJleGNsX3JlY3RfdjEiLCAw eDAsIDAsIH4wLCAwLCBQTEFORV9QUk9QX0VYQ0xfUkVDVF9WMSk7Ci0KLQltc21fcHJvcGVydHlf aW5zdGFsbF9lbnVtKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLCAiYmxlbmRfb3AiLCAweDAsIDAsCi0J CWVfYmxlbmRfb3AsIEFSUkFZX1NJWkUoZV9ibGVuZF9vcCksIFBMQU5FX1BST1BfQkxFTkRfT1Ap OwotCi0JbXNtX3Byb3BlcnR5X2luc3RhbGxfZW51bSgmcGRwdS0+cHJvcGVydHlfaW5mbywgInNy Y19jb25maWciLCAweDAsIDEsCi0JCWVfc3JjX2NvbmZpZywgQVJSQVlfU0laRShlX3NyY19jb25m aWcpLCBQTEFORV9QUk9QX1NSQ19DT05GSUcpOwotCi0JaWYgKHBkcHUtPnBpcGVfaHctPm9wcy5z ZXR1cF9zb2xpZGZpbGwpCi0JCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3JhbmdlKCZwZHB1LT5wcm9w ZXJ0eV9pbmZvLCAiY29sb3JfZmlsbCIsCi0JCQkJMCwgMCwgMHhGRkZGRkZGRiwgMCwgUExBTkVf UFJPUF9DT0xPUl9GSUxMKTsKLQotCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3JhbmdlKCZwZHB1LT5w cm9wZXJ0eV9pbmZvLAotCQkJInByZWZpbGxfc2l6ZSIsIDB4MCwgMCwgfjAsIDAsCi0JCQlQTEFO RV9QUk9QX1BSRUZJTExfU0laRSk7Ci0JbXNtX3Byb3BlcnR5X2luc3RhbGxfcmFuZ2UoJnBkcHUt PnByb3BlcnR5X2luZm8sCi0JCQkicHJlZmlsbF90aW1lIiwgMHgwLCAwLCB+MCwgMCwKLQkJCVBM QU5FX1BST1BfUFJFRklMTF9USU1FKTsKLQotCWluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qg ZHB1X2ttc19pbmZvKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpbmZvKSB7Ci0JCURQVV9FUlJPUigi ZmFpbGVkIHRvIGFsbG9jYXRlIGluZm8gbWVtb3J5XG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCW1z bV9wcm9wZXJ0eV9pbnN0YWxsX2Jsb2IoJnBkcHUtPnByb3BlcnR5X2luZm8sICJjYXBhYmlsaXRp ZXMiLAotCQlEUk1fTU9ERV9QUk9QX0lNTVVUQUJMRSwgUExBTkVfUFJPUF9JTkZPKTsKLQlkcHVf a21zX2luZm9fcmVzZXQoaW5mbyk7Ci0KLQlpZiAoIW1hc3Rlcl9wbGFuZV9pZCkgewotCQlmb3Jt YXRfbGlzdCA9IHBkcHUtPnBpcGVfc2Jsay0+Zm9ybWF0X2xpc3Q7Ci0JfSBlbHNlIHsKLQkJZm9y bWF0X2xpc3QgPSBwZHB1LT5waXBlX3NibGstPnZpcnRfZm9ybWF0X2xpc3Q7Ci0JCWRwdV9rbXNf aW5mb19hZGRfa2V5aW50KGluZm8sICJwcmltYXJ5X3NtYXJ0X3BsYW5lX2lkIiwKLQkJCQkJCW1h c3Rlcl9wbGFuZV9pZCk7Ci0JfQotCi0JaWYgKGZvcm1hdF9saXN0KSB7Ci0JCWRwdV9rbXNfaW5m b19zdGFydChpbmZvLCAicGl4ZWxfZm9ybWF0cyIpOwotCQl3aGlsZSAoZm9ybWF0X2xpc3QtPmZv dXJjY19mb3JtYXQpIHsKLQkJCWRwdV9rbXNfaW5mb19hcHBlbmRfZm9ybWF0KGluZm8sCi0JCQkJ CWZvcm1hdF9saXN0LT5mb3VyY2NfZm9ybWF0LAotCQkJCQlmb3JtYXRfbGlzdC0+bW9kaWZpZXIp OwotCQkJKytmb3JtYXRfbGlzdDsKLQkJfQotCQlkcHVfa21zX2luZm9fc3RvcChpbmZvKTsKLQl9 Ci0KLQlpZiAocGRwdS0+cGlwZV9odyAmJiBwZHB1LT5waXBlX2h3LT5vcHMuZ2V0X3NjYWxlcl92 ZXIpCi0JCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJzY2FsZXJfc3RlcF92ZXIiLAot CQkJcGRwdS0+cGlwZV9ody0+b3BzLmdldF9zY2FsZXJfdmVyKHBkcHUtPnBpcGVfaHcpKTsKLQot CWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJtYXhfbGluZXdpZHRoIiwKLQkJCXBkcHUt PnBpcGVfc2Jsay0+Y29tbW9uLT5tYXhsaW5ld2lkdGgpOwotCWRwdV9rbXNfaW5mb19hZGRfa2V5 aW50KGluZm8sICJtYXhfdXBzY2FsZSIsCi0JCQlwZHB1LT5waXBlX3NibGstPm1heHVwc2NhbGUp OwotCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJtYXhfZG93bnNjYWxlIiwKLQkJCXBk cHUtPnBpcGVfc2Jsay0+bWF4ZHduc2NhbGUpOwotCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGlu Zm8sICJtYXhfaG9yaXpvbnRhbF9kZWNpIiwKLQkJCXBkcHUtPnBpcGVfc2Jsay0+Y29tbW9uLT5t YXhoZGVjaWV4cCk7Ci0JZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgIm1heF92ZXJ0aWNh bF9kZWNpIiwKLQkJCXBkcHUtPnBpcGVfc2Jsay0+Y29tbW9uLT5tYXh2ZGVjaWV4cCk7Ci0JZHB1 X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgIm1heF9wZXJfcGlwZV9idyIsCi0JCQlwZHB1LT5w aXBlX3NibGstPm1heF9wZXJfcGlwZV9idyAqIDEwMDBMTCk7Ci0JbXNtX3Byb3BlcnR5X3NldF9i bG9iKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLCAmcGRwdS0+YmxvYl9pbmZvLAotCQkJaW5mby0+ZGF0 YSwgRFBVX0tNU19JTkZPX0RBVEFMRU4oaW5mbyksCi0JCQlQTEFORV9QUk9QX0lORk8pOwotCi0J a2ZyZWUoaW5mbyk7Ci0KLQlpZiAocGRwdS0+ZmVhdHVyZXMgJiBCSVQoRFBVX1NTUFBfTUVNQ09M T1IpKSB7Ci0JCXNucHJpbnRmKGZlYXR1cmVfbmFtZSwgc2l6ZW9mKGZlYXR1cmVfbmFtZSksICIl cyVkIiwKLQkJCSJEUFVfU1NQUF9TS0lOX0NPTE9SX1YiLAotCQkJcGRwdS0+cGlwZV9zYmxrLT5t ZW1jb2xvcl9ibGsudmVyc2lvbiA+PiAxNik7Ci0JCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX2Jsb2Io JnBkcHUtPnByb3BlcnR5X2luZm8sIGZlYXR1cmVfbmFtZSwgMCwKLQkJCVBMQU5FX1BST1BfU0tJ Tl9DT0xPUik7Ci0JCXNucHJpbnRmKGZlYXR1cmVfbmFtZSwgc2l6ZW9mKGZlYXR1cmVfbmFtZSks ICIlcyVkIiwKLQkJCSJEUFVfU1NQUF9TS1lfQ09MT1JfViIsCi0JCQlwZHB1LT5waXBlX3NibGst Pm1lbWNvbG9yX2Jsay52ZXJzaW9uID4+IDE2KTsKLQkJbXNtX3Byb3BlcnR5X2luc3RhbGxfYmxv YigmcGRwdS0+cHJvcGVydHlfaW5mbywgZmVhdHVyZV9uYW1lLCAwLAotCQkJUExBTkVfUFJPUF9T S1lfQ09MT1IpOwotCQlzbnByaW50ZihmZWF0dXJlX25hbWUsIHNpemVvZihmZWF0dXJlX25hbWUp LCAiJXMlZCIsCi0JCQkiRFBVX1NTUFBfRk9MSUFHRV9DT0xPUl9WIiwKLQkJCXBkcHUtPnBpcGVf c2Jsay0+bWVtY29sb3JfYmxrLnZlcnNpb24gPj4gMTYpOwotCQltc21fcHJvcGVydHlfaW5zdGFs bF9ibG9iKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLCBmZWF0dXJlX25hbWUsIDAsCi0JCQlQTEFORV9Q Uk9QX0ZPTElBR0VfQ09MT1IpOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9kcHVfcGxh bmVfc2V0X2NzY192MShzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1LCB2b2lkICp1c3JfcHRyKQotewot CXN0cnVjdCBkcHVfZHJtX2NzY192MSBjc2NfdjE7Ci0JaW50IGk7Ci0KLQlpZiAoIXBkcHUpIHsK LQkJRFBVX0VSUk9SKCJpbnZhbGlkIHBsYW5lXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXBkcHUt PmNzY191c3JfcHRyID0gTlVMTDsKLQlpZiAoIXVzcl9wdHIpIHsKLQkJRFBVX0RFQlVHX1BMQU5F KHBkcHUsICJjc2MgZGF0YSByZW1vdmVkXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChjb3B5 X2Zyb21fdXNlcigmY3NjX3YxLCB1c3JfcHRyLCBzaXplb2YoY3NjX3YxKSkpIHsKLQkJRFBVX0VS Uk9SX1BMQU5FKHBkcHUsICJmYWlsZWQgdG8gY29weSBjc2MgZGF0YVxuIik7Ci0JCXJldHVybjsK LQl9Ci0KLQkvKiBwb3B1bGF0ZSBmcm9tIHVzZXIgc3BhY2UgKi8KLQlmb3IgKGkgPSAwOyBpIDwg RFBVX0NTQ19NQVRSSVhfQ09FRkZfU0laRTsgKytpKQotCQlwZHB1LT5jc2NfY2ZnLmNzY19tdltp XSA9IGNzY192MS5jdG1fY29lZmZbaV0gPj4gMTY7Ci0JZm9yIChpID0gMDsgaSA8IERQVV9DU0Nf QklBU19TSVpFOyArK2kpIHsKLQkJcGRwdS0+Y3NjX2NmZy5jc2NfcHJlX2J2W2ldID0gY3NjX3Yx LnByZV9iaWFzW2ldOwotCQlwZHB1LT5jc2NfY2ZnLmNzY19wb3N0X2J2W2ldID0gY3NjX3YxLnBv c3RfYmlhc1tpXTsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IERQVV9DU0NfQ0xBTVBfU0laRTsgKytp KSB7Ci0JCXBkcHUtPmNzY19jZmcuY3NjX3ByZV9sdltpXSA9IGNzY192MS5wcmVfY2xhbXBbaV07 Ci0JCXBkcHUtPmNzY19jZmcuY3NjX3Bvc3RfbHZbaV0gPSBjc2NfdjEucG9zdF9jbGFtcFtpXTsK LQl9Ci0JcGRwdS0+Y3NjX3Vzcl9wdHIgPSAmcGRwdS0+Y3NjX2NmZzsKLX0KLQotc3RhdGljIGlu bGluZSB2b2lkIF9kcHVfcGxhbmVfc2V0X3NjYWxlcl92MShzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1 LAotCQlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpwc3RhdGUsIHZvaWQgKnVzcikKLXsKLQlzdHJ1 Y3QgZHB1X2RybV9zY2FsZXJfdjEgc2NhbGVfdjE7Ci0Jc3RydWN0IGRwdV9od19waXhlbF9leHQg KnBlOwotCWludCBpOwotCi0JaWYgKCFwZHB1IHx8ICFwc3RhdGUpIHsKLQkJRFBVX0VSUk9SKCJp bnZhbGlkIGFyZ3VtZW50KHMpXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXBzdGF0ZS0+c2NhbGVy X2NoZWNrX3N0YXRlID0gRFBVX1BMQU5FX1NDTENIRUNLX05PTkU7Ci0JaWYgKCF1c3IpIHsKLQkJ RFBVX0RFQlVHX1BMQU5FKHBkcHUsICJzY2FsZSBkYXRhIHJlbW92ZWRcbiIpOwotCQlyZXR1cm47 Ci0JfQotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZzY2FsZV92MSwgdXNyLCBzaXplb2Yoc2NhbGVf djEpKSkgewotCQlEUFVfRVJST1JfUExBTkUocGRwdSwgImZhaWxlZCB0byBjb3B5IHNjYWxlIGRh dGFcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogZm9yY2UgcHJvcGVydHkgdG8gYmUgZGlydHks IGV2ZW4gaWYgdGhlIHBvaW50ZXIgZGlkbid0IGNoYW5nZSAqLwotCW1zbV9wcm9wZXJ0eV9zZXRf ZGlydHkoJnBkcHUtPnByb3BlcnR5X2luZm8sCi0JCQkmcHN0YXRlLT5wcm9wZXJ0eV9zdGF0ZSwg UExBTkVfUFJPUF9TQ0FMRVJfVjEpOwotCi0JLyogcG9wdWxhdGUgZnJvbSB1c2VyIHNwYWNlICov Ci0JcGUgPSAmcHN0YXRlLT5waXhlbF9leHQ7Ci0JbWVtc2V0KHBlLCAwLCBzaXplb2Yoc3RydWN0 IGRwdV9od19waXhlbF9leHQpKTsKLQlmb3IgKGkgPSAwOyBpIDwgRFBVX01BWF9QTEFORVM7IGkr KykgewotCQlwZS0+aW5pdF9waGFzZV94W2ldID0gc2NhbGVfdjEuaW5pdF9waGFzZV94W2ldOwot CQlwZS0+cGhhc2Vfc3RlcF94W2ldID0gc2NhbGVfdjEucGhhc2Vfc3RlcF94W2ldOwotCQlwZS0+ aW5pdF9waGFzZV95W2ldID0gc2NhbGVfdjEuaW5pdF9waGFzZV95W2ldOwotCQlwZS0+cGhhc2Vf c3RlcF95W2ldID0gc2NhbGVfdjEucGhhc2Vfc3RlcF95W2ldOwotCi0JCXBlLT5ob3J6X2ZpbHRl cltpXSA9IHNjYWxlX3YxLmhvcnpfZmlsdGVyW2ldOwotCQlwZS0+dmVydF9maWx0ZXJbaV0gPSBz Y2FsZV92MS52ZXJ0X2ZpbHRlcltpXTsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IERQVV9NQVhfUExB TkVTOyBpKyspIHsKLQkJcGUtPmxlZnRfZnRjaFtpXSA9IHNjYWxlX3YxLnBlLmxlZnRfZnRjaFtp XTsKLQkJcGUtPnJpZ2h0X2Z0Y2hbaV0gPSBzY2FsZV92MS5wZS5yaWdodF9mdGNoW2ldOwotCQlw ZS0+bGVmdF9ycHRbaV0gPSBzY2FsZV92MS5wZS5sZWZ0X3JwdFtpXTsKLQkJcGUtPnJpZ2h0X3Jw dFtpXSA9IHNjYWxlX3YxLnBlLnJpZ2h0X3JwdFtpXTsKLQkJcGUtPnJvaV93W2ldID0gc2NhbGVf djEucGUubnVtX2V4dF9weGxzX2xyW2ldOwotCi0JCXBlLT50b3BfZnRjaFtpXSA9IHNjYWxlX3Yx LnBlLnRvcF9mdGNoW2ldOwotCQlwZS0+YnRtX2Z0Y2hbaV0gPSBzY2FsZV92MS5wZS5idG1fZnRj aFtpXTsKLQkJcGUtPnRvcF9ycHRbaV0gPSBzY2FsZV92MS5wZS50b3BfcnB0W2ldOwotCQlwZS0+ YnRtX3JwdFtpXSA9IHNjYWxlX3YxLnBlLmJ0bV9ycHRbaV07Ci0JCXBlLT5yb2lfaFtpXSA9IHNj YWxlX3YxLnBlLm51bV9leHRfcHhsc190YltpXTsKLQl9Ci0KLQlwc3RhdGUtPnNjYWxlcl9jaGVj a19zdGF0ZSA9IERQVV9QTEFORV9TQ0xDSEVDS19TQ0FMRVJfVjE7Ci0KLQlEUFVfRVZUMzJfVkVS Qk9TRShEUk1JRCgmcGRwdS0+YmFzZSkpOwotCURQVV9ERUJVR19QTEFORShwZHB1LCAidXNlciBw cm9wZXJ0eSBkYXRhIGNvcGllZFxuIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZHB1X3Bs YW5lX3NldF9zY2FsZXJfdjIoc3RydWN0IGRwdV9wbGFuZSAqcGRwdSwKLQkJc3RydWN0IGRwdV9w bGFuZV9zdGF0ZSAqcHN0YXRlLCB2b2lkICp1c3IpCi17Ci0Jc3RydWN0IGRwdV9kcm1fc2NhbGVy X3YyIHNjYWxlX3YyOwotCXN0cnVjdCBkcHVfaHdfcGl4ZWxfZXh0ICpwZTsKLQlpbnQgaTsKLQlz dHJ1Y3QgZHB1X2h3X3NjYWxlcjNfY2ZnICpjZmc7Ci0KLQlpZiAoIXBkcHUgfHwgIXBzdGF0ZSkg ewotCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnQocylcbiIpOwotCQlyZXR1cm47Ci0JfQot Ci0JY2ZnID0gJnBzdGF0ZS0+c2NhbGVyM19jZmc7Ci0JcHN0YXRlLT5zY2FsZXJfY2hlY2tfc3Rh dGUgPSBEUFVfUExBTkVfU0NMQ0hFQ0tfTk9ORTsKLQlpZiAoIXVzcikgewotCQlEUFVfREVCVUdf UExBTkUocGRwdSwgInNjYWxlIGRhdGEgcmVtb3ZlZFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlp ZiAoY29weV9mcm9tX3VzZXIoJnNjYWxlX3YyLCB1c3IsIHNpemVvZihzY2FsZV92MikpKSB7Ci0J CURQVV9FUlJPUl9QTEFORShwZHB1LCAiZmFpbGVkIHRvIGNvcHkgc2NhbGUgZGF0YVxuIik7Ci0J CXJldHVybjsKLQl9Ci0KLQkvKiBkZXRhY2gvaWdub3JlIHVzZXIgZGF0YSBpZiAnZGlzYWJsZWQn ICovCi0JaWYgKCFzY2FsZV92Mi5lbmFibGUpIHsKLQkJRFBVX0RFQlVHX1BMQU5FKHBkcHUsICJz Y2FsZSBkYXRhIHJlbW92ZWRcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogZm9yY2UgcHJvcGVy dHkgdG8gYmUgZGlydHksIGV2ZW4gaWYgdGhlIHBvaW50ZXIgZGlkbid0IGNoYW5nZSAqLwotCW1z bV9wcm9wZXJ0eV9zZXRfZGlydHkoJnBkcHUtPnByb3BlcnR5X2luZm8sCi0JCQkmcHN0YXRlLT5w cm9wZXJ0eV9zdGF0ZSwgUExBTkVfUFJPUF9TQ0FMRVJfVjIpOwotCi0JLyogcG9wdWxhdGUgZnJv bSB1c2VyIHNwYWNlICovCi0JZHB1X3NldF9zY2FsZXJfdjIoY2ZnLCAmc2NhbGVfdjIpOwotCi0J cGUgPSAmcHN0YXRlLT5waXhlbF9leHQ7Ci0JbWVtc2V0KHBlLCAwLCBzaXplb2Yoc3RydWN0IGRw dV9od19waXhlbF9leHQpKTsKLQotCWZvciAoaSA9IDA7IGkgPCBEUFVfTUFYX1BMQU5FUzsgaSsr KSB7Ci0JCXBlLT5sZWZ0X2Z0Y2hbaV0gPSBzY2FsZV92Mi5wZS5sZWZ0X2Z0Y2hbaV07Ci0JCXBl LT5yaWdodF9mdGNoW2ldID0gc2NhbGVfdjIucGUucmlnaHRfZnRjaFtpXTsKLQkJcGUtPmxlZnRf cnB0W2ldID0gc2NhbGVfdjIucGUubGVmdF9ycHRbaV07Ci0JCXBlLT5yaWdodF9ycHRbaV0gPSBz Y2FsZV92Mi5wZS5yaWdodF9ycHRbaV07Ci0JCXBlLT5yb2lfd1tpXSA9IHNjYWxlX3YyLnBlLm51 bV9leHRfcHhsc19scltpXTsKLQotCQlwZS0+dG9wX2Z0Y2hbaV0gPSBzY2FsZV92Mi5wZS50b3Bf ZnRjaFtpXTsKLQkJcGUtPmJ0bV9mdGNoW2ldID0gc2NhbGVfdjIucGUuYnRtX2Z0Y2hbaV07Ci0J CXBlLT50b3BfcnB0W2ldID0gc2NhbGVfdjIucGUudG9wX3JwdFtpXTsKLQkJcGUtPmJ0bV9ycHRb aV0gPSBzY2FsZV92Mi5wZS5idG1fcnB0W2ldOwotCQlwZS0+cm9pX2hbaV0gPSBzY2FsZV92Mi5w ZS5udW1fZXh0X3B4bHNfdGJbaV07Ci0JfQotCXBzdGF0ZS0+c2NhbGVyX2NoZWNrX3N0YXRlID0g RFBVX1BMQU5FX1NDTENIRUNLX1NDQUxFUl9WMl9DSEVDSzsKLQotCURQVV9FVlQzMl9WRVJCT1NF KERSTUlEKCZwZHB1LT5iYXNlKSwgY2ZnLT5lbmFibGUsIGNmZy0+ZGUuZW5hYmxlLAotCQkJY2Zn LT5zcmNfd2lkdGhbMF0sIGNmZy0+c3JjX2hlaWdodFswXSwKLQkJCWNmZy0+ZHN0X3dpZHRoLCBj ZmctPmRzdF9oZWlnaHQpOwotCURQVV9ERUJVR19QTEFORShwZHB1LCAidXNlciBwcm9wZXJ0eSBk YXRhIGNvcGllZFxuIik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9kcHVfcGxhbmVfc2V0X2V4Y2xfcmVj dF92MShzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1LAotCQlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpw c3RhdGUsIHZvaWQgKnVzcl9wdHIpCi17Ci0Jc3RydWN0IGRybV9jbGlwX3JlY3QgZXhjbF9yZWN0 X3YxOwotCi0JaWYgKCFwZHB1KSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBwbGFuZVxuIik7Ci0J CXJldHVybjsKLQl9Ci0KLQlpZiAoIXVzcl9wdHIpIHsKLQkJRFBVX0RFQlVHX1BMQU5FKHBkcHUs ICJpbnZhbGlkICBleGNsX3JlY3QgdXNlciBkYXRhXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWlm IChjb3B5X2Zyb21fdXNlcigmZXhjbF9yZWN0X3YxLCB1c3JfcHRyLCBzaXplb2YoZXhjbF9yZWN0 X3YxKSkpIHsKLQkJRFBVX0VSUk9SX1BMQU5FKHBkcHUsICJmYWlsZWQgdG8gY29weSBleGNsX3Jl Y3QgZGF0YVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBwb3B1bGF0ZSBmcm9tIHVzZXIgc3Bh Y2UgKi8KLQlwc3RhdGUtPmV4Y2xfcmVjdC54ID0gZXhjbF9yZWN0X3YxLngxOwotCXBzdGF0ZS0+ ZXhjbF9yZWN0LnkgPSBleGNsX3JlY3RfdjEueTE7Ci0JcHN0YXRlLT5leGNsX3JlY3QudyA9IGV4 Y2xfcmVjdF92MS54MiAtIGV4Y2xfcmVjdF92MS54MTsKLQlwc3RhdGUtPmV4Y2xfcmVjdC5oID0g ZXhjbF9yZWN0X3YxLnkyIC0gZXhjbF9yZWN0X3YxLnkxOwotCi0JRFBVX0RFQlVHX1BMQU5FKHBk cHUsICJleGNsX3JlY3Q6IHslZCwlZCwlZCwlZH1cbiIsCi0JCQlwc3RhdGUtPmV4Y2xfcmVjdC54 LCBwc3RhdGUtPmV4Y2xfcmVjdC55LAotCQkJcHN0YXRlLT5leGNsX3JlY3QudywgcHN0YXRlLT5l eGNsX3JlY3QuaCk7CiB9CiAKIHN0YXRpYyBpbnQgZHB1X3BsYW5lX2F0b21pY19zZXRfcHJvcGVy dHkoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCkBAIC0yNjI0LDcgKzE1MjksNyBAQCBzdGF0aWMg aW50IGRwdV9wbGFuZV9hdG9taWNfc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l LAogewogCXN0cnVjdCBkcHVfcGxhbmUgKnBkcHUgPSBwbGFuZSA/IHRvX2RwdV9wbGFuZShwbGFu ZSkgOiBOVUxMOwogCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKnBzdGF0ZTsKLQlpbnQgaWR4LCBy ZXQgPSAtRUlOVkFMOworCWludCByZXQgPSAtRUlOVkFMOwogCiAJRFBVX0RFQlVHX1BMQU5FKHBk cHUsICJcbiIpOwogCkBAIC0yNjM2LDMxICsxNTQxLDYgQEAgc3RhdGljIGludCBkcHVfcGxhbmVf YXRvbWljX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkJcHN0YXRlID0g dG9fZHB1X3BsYW5lX3N0YXRlKHN0YXRlKTsKIAkJcmV0ID0gbXNtX3Byb3BlcnR5X2F0b21pY19z ZXQoJnBkcHUtPnByb3BlcnR5X2luZm8sCiAJCQkJJnBzdGF0ZS0+cHJvcGVydHlfc3RhdGUsIHBy b3BlcnR5LCB2YWwpOwotCQlpZiAoIXJldCkgewotCQkJaWR4ID0gbXNtX3Byb3BlcnR5X2luZGV4 KCZwZHB1LT5wcm9wZXJ0eV9pbmZvLAotCQkJCQlwcm9wZXJ0eSk7Ci0JCQlzd2l0Y2ggKGlkeCkg ewotCQkJY2FzZSBQTEFORV9QUk9QX0NTQ19WMToKLQkJCQlfZHB1X3BsYW5lX3NldF9jc2NfdjEo cGRwdSwKLQkJCQkJCSAgICAgIHU2NF90b191c2VyX3B0cih2YWwpKTsKLQkJCQlicmVhazsKLQkJ CWNhc2UgUExBTkVfUFJPUF9TQ0FMRVJfVjE6Ci0JCQkJX2RwdV9wbGFuZV9zZXRfc2NhbGVyX3Yx KHBkcHUsIHBzdGF0ZSwKLQkJCQkJCQkgdTY0X3RvX3VzZXJfcHRyKHZhbCkpOwotCQkJCWJyZWFr OwotCQkJY2FzZSBQTEFORV9QUk9QX1NDQUxFUl9WMjoKLQkJCQlfZHB1X3BsYW5lX3NldF9zY2Fs ZXJfdjIocGRwdSwgcHN0YXRlLAotCQkJCQkJCSB1NjRfdG9fdXNlcl9wdHIodmFsKSk7Ci0JCQkJ YnJlYWs7Ci0JCQljYXNlIFBMQU5FX1BST1BfRVhDTF9SRUNUX1YxOgotCQkJCV9kcHVfcGxhbmVf c2V0X2V4Y2xfcmVjdF92MShwZHB1LCBwc3RhdGUsCi0JCQkJCQl1NjRfdG9fdXNlcl9wdHIodmFs KSk7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCS8qIG5vdGhpbmcgdG8gZG8gKi8KLQkJ CQlicmVhazsKLQkJCX0KLQkJfQogCX0KIAogCURQVV9ERUJVR19QTEFORShwZHB1LCAiJXNbJWRd IDw9IDB4JWxseCByZXQ9JWRcbiIsCkBAIC0yNzcyLDcgKzE2NTIsNiBAQCBzdGF0aWMgdm9pZCBk cHVfcGxhbmVfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAltc21fcHJv cGVydHlfZHVwbGljYXRlX3N0YXRlKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLCBvbGRfc3RhdGUsIHBz dGF0ZSwKIAkJCSZwc3RhdGUtPnByb3BlcnR5X3N0YXRlLCBwc3RhdGUtPnByb3BlcnR5X3ZhbHVl cyk7CiAKLQlwc3RhdGUtPmRpcnR5ID0gMHgwOwogCXBzdGF0ZS0+cGVuZGluZyA9IGZhbHNlOwog CiAJX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUocGxhbmUsICZwc3Rh dGUtPmJhc2UpOwpAQCAtMzE3MCw2ICsyMDQ5LDggQEAgc3RydWN0IGRybV9wbGFuZSAqZHB1X3Bs YW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAlpZiAocmV0KQogCQlnb3RvIGNsZWFu X3NzcHA7CiAKKwlwZHB1LT5jYXRhbG9nID0ga21zLT5jYXRhbG9nOworCiAJLyogc3VjY2VzcyEg ZmluYWxpemUgaW5pdGlhbGl6YXRpb24gKi8KIAlkcm1fcGxhbmVfaGVscGVyX2FkZChwbGFuZSwg JmRwdV9wbGFuZV9oZWxwZXJfZnVuY3MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9wbGFuZS5oCmluZGV4IDI1YjZiMTUuLmEwNmM4YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9wbGFuZS5oCkBAIC0yNiwzMiArMjYsNiBAQAogI2luY2x1ZGUgImRw dV9od19tZHNzLmgiCiAjaW5jbHVkZSAiZHB1X2h3X3NzcHAuaCIKIAotLyogZGlydHkgYml0cyBm b3IgdXBkYXRlIGZ1bmN0aW9uICovCi0jZGVmaW5lIERQVV9QTEFORV9ESVJUWV9SRUNUUwkweDEK LSNkZWZpbmUgRFBVX1BMQU5FX0RJUlRZX0ZPUk1BVAkweDIKLSNkZWZpbmUgRFBVX1BMQU5FX0RJ UlRZX1NIQVJQRU4JMHg0Ci0jZGVmaW5lIERQVV9QTEFORV9ESVJUWV9QRVJGCTB4OAotI2RlZmlu ZSBEUFVfUExBTkVfRElSVFlfQUxMCTB4RkZGRkZGRkYKLQotLyoqCi0gKiBlbnVtIGRwdV9wbGFu ZV9zY2xjaGVja19zdGF0ZSAtIFVzZXIgc2NhbGVyIGRhdGEgc3RhdHVzCi0gKgotICogQERQVV9Q TEFORV9TQ0xDSEVDS19OT05FOiBObyB1c2VyIGRhdGEgcHJvdmlkZWQKLSAqIEBEUFVfUExBTkVf U0NMQ0hFQ0tfSU5WQUxJRDogSW52YWxpZCB1c2VyIGRhdGEgcHJvdmlkZWQKLSAqIEBEUFVfUExB TkVfU0NMQ0hFQ0tfU0NBTEVSX1YxOiBWYWxpZCBzY2FsZXIgdjEgZGF0YQotICogQERQVV9QTEFO RV9TQ0xDSEVDS19TQ0FMRVJfVjFfQ0hFQ0s6IFVuY2hlY2tlZCBzY2FsZXIgdjEgZGF0YQotICog QERQVV9QTEFORV9TQ0xDSEVDS19TQ0FMRVJfVjI6IFZhbGlkIHNjYWxlciB2MiBkYXRhCi0gKiBA RFBVX1BMQU5FX1NDTENIRUNLX1NDQUxFUl9WMl9DSEVDSzogVW5jaGVja2VkIHNjYWxlciB2MiBk YXRhCi0gKi8KLWVudW0gZHB1X3BsYW5lX3NjbGNoZWNrX3N0YXRlIHsKLQlEUFVfUExBTkVfU0NM Q0hFQ0tfTk9ORSwKLQlEUFVfUExBTkVfU0NMQ0hFQ0tfSU5WQUxJRCwKLQlEUFVfUExBTkVfU0NM Q0hFQ0tfU0NBTEVSX1YxLAotCURQVV9QTEFORV9TQ0xDSEVDS19TQ0FMRVJfVjFfQ0hFQ0ssCi0J RFBVX1BMQU5FX1NDTENIRUNLX1NDQUxFUl9WMiwKLQlEUFVfUExBTkVfU0NMQ0hFQ0tfU0NBTEVS X1YyX0NIRUNLLAotfTsKLQogLyoqCiAgKiBzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlOiBEZWZpbmUg ZHB1IGV4dGVuc2lvbiBvZiBkcm0gcGxhbmUgc3RhdGUgb2JqZWN0CiAgKiBAYmFzZToJYmFzZSBk cm0gcGxhbmUgc3RhdGUgb2JqZWN0CkBAIC02MCw4ICszNCw2IEBAIGVudW0gZHB1X3BsYW5lX3Nj bGNoZWNrX3N0YXRlIHsKICAqIEBhc3BhY2U6CXBvaW50ZXIgdG8gYWRkcmVzcyBzcGFjZSBmb3Ig aW5wdXQvb3V0cHV0IGJ1ZmZlcnMKICAqIEBpbnB1dF9mZW5jZToJZGVyZWZlcmVuY2VkIGlucHV0 IGZlbmNlIHBvaW50ZXIKICAqIEBzdGFnZToJYXNzaWduZWQgYnkgY3J0YyBibGVuZGVyCi0gKiBA ZXhjbF9yZWN0OglleGNsdXNpb24gcmVjdCB2YWx1ZXMKLSAqIEBkaXJ0eToJYml0bWFzayBmb3Ig d2hpY2ggcGlwZSBoL3cgY29uZmlnIGZ1bmN0aW9ucyBuZWVkIHRvIGJlIHVwZGF0ZWQKICAqIEBt dWx0aXJlY3RfaW5kZXg6IGluZGV4IG9mIHRoZSByZWN0YW5nbGUgb2YgU1NQUAogICogQG11bHRp cmVjdF9tb2RlOiBwYXJhbGxlbCBvciB0aW1lIG11bHRpcGxleCBtdWx0aXJlY3QgbW9kZQogICog QHBlbmRpbmc6CXdoZXRoZXIgdGhlIGN1cnJlbnQgdXBkYXRlIGlzIHN0aWxsIHBlbmRpbmcKQEAg LTc3LDggKzQ5LDYgQEAgc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSB7CiAJc3RydWN0IG1zbV9nZW1f YWRkcmVzc19zcGFjZSAqYXNwYWNlOwogCXZvaWQgKmlucHV0X2ZlbmNlOwogCWVudW0gZHB1X3N0 YWdlIHN0YWdlOwotCXN0cnVjdCBkcHVfcmVjdCBleGNsX3JlY3Q7Ci0JdWludDMyX3QgZGlydHk7 CiAJdWludDMyX3QgbXVsdGlyZWN0X2luZGV4OwogCXVpbnQzMl90IG11bHRpcmVjdF9tb2RlOwog CWJvb2wgcGVuZGluZzsKQEAgLTg2LDcgKzU2LDYgQEAgc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSB7 CiAJLyogc2NhbGVyIGNvbmZpZ3VyYXRpb24gKi8KIAlzdHJ1Y3QgZHB1X2h3X3NjYWxlcjNfY2Zn IHNjYWxlcjNfY2ZnOwogCXN0cnVjdCBkcHVfaHdfcGl4ZWxfZXh0IHBpeGVsX2V4dDsKLQllbnVt IGRwdV9wbGFuZV9zY2xjaGVja19zdGF0ZSBzY2FsZXJfY2hlY2tfc3RhdGU7CiAKIAlzdHJ1Y3Qg ZHB1X2h3X3BpcGVfY2RwX2NmZyBjZHBfY2ZnOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9yZWdfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfcmVnX2RtYS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODFl MDcxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9yZWdf ZG1hLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzkgKzAsMCBAQAotLyogQ29weXJpZ2h0IChjKSAy MDE3LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK LSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCi0gKi8KLQotI2luY2x1ZGUgImRwdV9yZWdfZG1hLmgiCi0jaW5jbHVkZSAiZHB1X2h3 X3JlZ19kbWFfdjEuaCIKLSNpbmNsdWRlICJkcHVfZGJnLmgiCi0KLXN0YXRpYyBpbnQgZGVmYXVs dF9jaGVja19zdXBwb3J0KGVudW0gZHB1X3JlZ19kbWFfZmVhdHVyZXMgZmVhdHVyZSwKLQkJICAg ICBlbnVtIGRwdV9yZWdfZG1hX2JsayBibGssCi0JCSAgICAgYm9vbCAqaXNfc3VwcG9ydGVkKQot ewotCi0JaWYgKCFpc19zdXBwb3J0ZWQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JKmlzX3N1cHBv cnRlZCA9IGZhbHNlOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRlZmF1bHRfc2V0dXBf cGF5bG9hZChzdHJ1Y3QgZHB1X3JlZ19kbWFfc2V0dXBfb3BzX2NmZyAqY2ZnKQotewotCURSTV9F UlJPUigibm90IGltcGxlbWVudGVkXG4iKTsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGlj IGludCBkZWZhdWx0X2tpY2tfb2ZmKHN0cnVjdCBkcHVfcmVnX2RtYV9raWNrb2ZmX2NmZyAqY2Zn KQotewotCURSTV9FUlJPUigibm90IGltcGxlbWVudGVkXG4iKTsKLQlyZXR1cm4gLUVJTlZBTDsK LQotfQotCi1zdGF0aWMgaW50IGRlZmF1bHRfcmVzZXQoc3RydWN0IGRwdV9od19jdGwgKmN0bCkK LXsKLQlEUk1fRVJST1IoIm5vdCBpbXBsZW1lbnRlZFxuIik7Ci0JcmV0dXJuIC1FSU5WQUw7Ci19 Ci0KLXN0cnVjdCBkcHVfcmVnX2RtYV9idWZmZXIgKmRlZmF1bHRfYWxsb2NfcmVnX2RtYV9idWYo dTMyIHNpemUpCi17Ci0JRFJNX0VSUk9SKCJub3QgaW1wbGVtZW50ZWRcbiIpOwotCXJldHVybiBF UlJfUFRSKC1FSU5WQUwpOwotfQotCi1pbnQgZGVmYXVsdF9kZWFsbG9jX3JlZ19kbWEoc3RydWN0 IGRwdV9yZWdfZG1hX2J1ZmZlciAqbHV0X2J1ZikKLXsKLQlEUk1fRVJST1IoIm5vdCBpbXBsZW1l bnRlZFxuIik7Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbnQgZGVmYXVsdF9idWZf cmVzZXRfcmVnX2RtYShzdHJ1Y3QgZHB1X3JlZ19kbWFfYnVmZmVyICpsdXRfYnVmKQotewotCURS TV9FUlJPUigibm90IGltcGxlbWVudGVkXG4iKTsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3Rh dGljIGludCBkZWZhdWx0X2xhc3RfY29tbWFuZChzdHJ1Y3QgZHB1X2h3X2N0bCAqY3RsLAotCQll bnVtIGRwdV9yZWdfZG1hX3F1ZXVlIHEpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1 Y3QgZHB1X2h3X3JlZ19kbWEgcmVnX2RtYSA9IHsKLQkub3BzID0ge2RlZmF1bHRfY2hlY2tfc3Vw cG9ydCwgZGVmYXVsdF9zZXR1cF9wYXlsb2FkLAotCQlkZWZhdWx0X2tpY2tfb2ZmLCBkZWZhdWx0 X3Jlc2V0LCBkZWZhdWx0X2FsbG9jX3JlZ19kbWFfYnVmLAotCQlkZWZhdWx0X2RlYWxsb2NfcmVn X2RtYSwgZGVmYXVsdF9idWZfcmVzZXRfcmVnX2RtYSwKLQkJZGVmYXVsdF9sYXN0X2NvbW1hbmR9 LAotfTsKLQotaW50IGRwdV9yZWdfZG1hX2luaXQodm9pZCBfX2lvbWVtICphZGRyLCBzdHJ1Y3Qg ZHB1X21kc3NfY2ZnICptLAotCQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQotewotCWludCByYyA9 IDA7Ci0KLQlpZiAoIWFkZHIgfHwgIW0gfHwgIWRldikgewotCQlEUk1fREVCVUcoImludmFsaWQg YWRkciAlcEsgY2F0YWxvZyAlcEsgZGV2ICVwS1xuIiwgYWRkciwgbSwKLQkJCQlkZXYpOwotCQly ZXR1cm4gMDsKLQl9Ci0KLQlyZWdfZG1hLmRybV9kZXYgPSBkZXY7Ci0JcmVnX2RtYS5jYXBzID0g Jm0tPmRtYV9jZmc7Ci0JcmVnX2RtYS5hZGRyID0gYWRkcjsKLQotCWlmICghbS0+cmVnX2RtYV9j b3VudCkKLQkJcmV0dXJuIDA7Ci0KLQlzd2l0Y2ggKHJlZ19kbWEuY2Fwcy0+dmVyc2lvbikgewot CWNhc2UgMToKLQkJcmMgPSBpbml0X3YxKCZyZWdfZG1hKTsKLQkJaWYgKHJjKQotCQkJRFJNX0RF QlVHKCJpbml0IHYxIGRtYSBvcHMgZmFpbGVkXG4iKTsKLQkJZWxzZQotCQkJZHB1X2RiZ19yZWdf cmVnaXN0ZXJfYmFzZSgicmVnX2RtYSIsIGFkZHIsCi0JCQkJCXJlZ19kbWEuY2Fwcy0+bGVuKTsK LQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0 cnVjdCBkcHVfaHdfcmVnX2RtYV9vcHMgKmRwdV9yZWdfZG1hX2dldF9vcHModm9pZCkKLXsKLQly ZXR1cm4gJnJlZ19kbWEub3BzOwotfQotCi12b2lkIGRwdV9yZWdfZG1hX2RlaW5pdCh2b2lkKQot ewotCXN0cnVjdCBkcHVfaHdfcmVnX2RtYSBvcCA9IHsKLQkub3BzID0ge2RlZmF1bHRfY2hlY2tf c3VwcG9ydCwgZGVmYXVsdF9zZXR1cF9wYXlsb2FkLAotCQlkZWZhdWx0X2tpY2tfb2ZmLCBkZWZh dWx0X3Jlc2V0LCBkZWZhdWx0X2FsbG9jX3JlZ19kbWFfYnVmLAotCQlkZWZhdWx0X2RlYWxsb2Nf cmVnX2RtYSwgZGVmYXVsdF9idWZfcmVzZXRfcmVnX2RtYSwKLQkJZGVmYXVsdF9sYXN0X2NvbW1h bmR9LAotCX07Ci0KLQlpZiAoIXJlZ19kbWEuZHJtX2RldiB8fCAhcmVnX2RtYS5jYXBzKQotCQly ZXR1cm47Ci0KLQlzd2l0Y2ggKHJlZ19kbWEuY2Fwcy0+dmVyc2lvbikgewotCWNhc2UgMToKLQkJ ZGVpbml0X3YxKCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQltZW1zZXQo JnJlZ19kbWEsIDAsIHNpemVvZihyZWdfZG1hKSk7Ci0JbWVtY3B5KCZyZWdfZG1hLm9wcywgJm9w Lm9wcywgc2l6ZW9mKG9wLm9wcykpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X3JlZ19kbWEuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9yZWdfZG1hLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmYjkyZWQuLjAw MDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3JlZ19kbWEuaAor KysgL2Rldi9udWxsCkBAIC0xLDMxMCArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAx OCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K LSAqLwotCi0jaWZuZGVmIF9EUFVfUkVHX0RNQV9ICi0jZGVmaW5lIF9EUFVfUkVHX0RNQV9ICi0K LSNpbmNsdWRlICJtc21fZHJ2LmgiCi0jaW5jbHVkZSAiZHB1X2h3X2NhdGFsb2cuaCIKLSNpbmNs dWRlICJkcHVfaHdfbWRzcy5oIgotI2luY2x1ZGUgImRwdV9od190b3AuaCIKLSNpbmNsdWRlICJk cHVfaHdfdXRpbC5oIgotCi0vKioKLSAqIGVudW0gZHB1X3JlZ19kbWFfb3AgLSBkZWZpbmVzIG9w ZXJhdGlvbnMgc3VwcG9ydGVkIGJ5IHJlZyBkbWEKLSAqIEBSRUdfRE1BX1JFQUQ6IFJlYWQgdGhl IGhpc3RvZ3JhbSBpbnRvIGJ1ZmZlciBwcm92aWRlZAotICogQFJFR19ETUFfV1JJVEU6IFdyaXRl IHRoZSByZWcgZG1hIGNvbmZpZ3VyYXRpb24gaW50byBNRFAgYmxvY2sKLSAqIEBSRUdfRE1BX09Q X01BWDogTWF4IG9wZXJhdGlvbiB3aGljaCBpbmRpY2F0ZXMgdGhhdCBvcCBpcyBpbnZhbGlkCi0g Ki8KLWVudW0gZHB1X3JlZ19kbWFfb3AgewotCVJFR19ETUFfUkVBRCwKLQlSRUdfRE1BX1dSSVRF LAotCVJFR19ETUFfT1BfTUFYCi19OwotCi0vKioKLSAqIGVudW0gZHB1X3JlZ19kbWFfcmVhZF9z ZWwgLSBkZWZpbmVzIHRoZSBibG9ja3MgZm9yIGhpc3RvZ3JhbSByZWFkCi0gKiBARFNQUDBfSElT VDogc2VsZWN0IGRzcHAwCi0gKiBARFNQUDFfSElTVDogc2VsZWN0IGRzcHAxCi0gKiBARFNQUDJf SElTVDogc2VsZWN0IGRzcHAyCi0gKiBARFNQUDNfSElTVDogc2VsZWN0IGRzcHAzCi0gKiBARFNQ UF9ISVNUX01BWDogaW52YWxpZCBzZWxlY3Rpb24KLSAqLwotZW51bSBkcHVfcmVnX2RtYV9yZWFk X3NlbCB7Ci0JRFNQUDBfSElTVCwKLQlEU1BQMV9ISVNULAotCURTUFAyX0hJU1QsCi0JRFNQUDNf SElTVCwKLQlEU1BQX0hJU1RfTUFYLAotfTsKLQotLyoqCi0gKiBlbnVtIGRwdV9yZWdfZG1hX2Zl YXR1cmVzIC0gZGVmaW5lcyBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgcmVnIGRtYQotICogQFFTRUVE OiBxc2VlZCBmZWF0dXJlCi0gKiBAR0FNVVQ6IGdhbXV0IGZlYXR1cmUKLSAqIEBJR0M6IGludmVy c2UgZ2FtbWEgY29ycmVjdGlvbgotICogQFBDQzogcG9seW5vbWljYWwgY29sb3IgY29ycmVjdGlv bgotICogQFZMVVQ6IFBBIHZsdXQKLSAqIEBNRU1fQ09MT1I6IG1lbW9yeSBjb2xvcgotICogQFNJ WF9aT05FOiBzaXggem9uZQotICogQEhTSUM6IEh1ZSwgc2F0dXJhdGlvbiBhbmQgY29udHJhc3QK LSAqIEBHQzogZ2FtbWEgY29ycmVjdGlvbgotICogQFJFR19ETUFfRkVBVFVSRVNfTUFYOiBpbnZh bGlkIHNlbGVjdGlvbgotICovCi1lbnVtIGRwdV9yZWdfZG1hX2ZlYXR1cmVzIHsKLQlRU0VFRCwK LQlHQU1VVCwKLQlJR0MsCi0JUENDLAotCVZMVVQsCi0JTUVNX0NPTE9SLAotCVNJWF9aT05FLAot CUhTSUMsCi0JR0MsCi0JUkVHX0RNQV9GRUFUVVJFU19NQVgsCi19OwotCi0vKioKLSAqIGVudW0g ZHB1X3JlZ19kbWFfcXVldWUgLSBkZWZpbmVzIHJlZyBkbWEgd3JpdGUgcXVldWUgdmFsdWVzCi0g KiBARE1BX0NUTF9RVUVVRTA6IHNlbGVjdCBxdWV1ZTAKLSAqIEBETUFfQ1RMX1FVRVVFMTogc2Vs ZWN0IHF1ZXVlMQotICogQERNQV9DVExfUVVFVUVfTUFYOiBpbnZhbGlkIHNlbGVjdGlvbgotICov Ci1lbnVtIGRwdV9yZWdfZG1hX3F1ZXVlIHsKLQlETUFfQ1RMX1FVRVVFMCwKLQlETUFfQ1RMX1FV RVVFMSwKLQlETUFfQ1RMX1FVRVVFX01BWCwKLX07Ci0KLS8qKgotICogZW51bSBkcHVfcmVnX2Rt YV90cmlnZ2VyX21vZGUgLSBkZWZpbmVzIHJlZyBkbWEgb3BzIHRyaWdnZXIgbW9kZQotICogQFdS SVRFX0lNTUVESUFURTogdHJpZ2dlciB3cml0ZSBvcCBpbW1lZGlhdGVseQotICogQFdSSVRFX1RS SUdHRVI6IHRyaWdnZXIgd3JpdGUgb3Agd2hlbiBzdyB0cmlnZ2VyIGlzIGlzc3VlZAotICogQFJF QURfSU1NRURJQVRFOiB0cmlnZ2VyIHJlYWQgb3AgaW1tZWRpYXRlbHkKLSAqIEBSRUFEX1RSSUdH RVI6IHRyaWdnZXIgcmVhZCBvcCB3aGVuIHN3IHRyaWdnZXIgaXMgaXNzdWVkCi0gKiBAVElHR0VS X01BWDogaW52YWxpZCB0cmlnZ2VyIHNlbGVjdGlvbgotICovCi1lbnVtIGRwdV9yZWdfZG1hX3Ry aWdnZXJfbW9kZSB7Ci0JV1JJVEVfSU1NRURJQVRFLAotCVdSSVRFX1RSSUdHRVIsCi0JUkVBRF9J TU1FRElBVEUsCi0JUkVBRF9UUklHR0VSLAotCVRJR0dFUl9NQVgsCi19OwotCi0vKioKLSAqIGVu dW0gZHB1X3JlZ19kbWFfc2V0dXBfb3BzIC0gZGVmaW5lcyByZWcgZG1hIHdyaXRlIGNvbmZpZ3Vy YXRpb24KLSAqIEBIV19CTEtfU0VMRUNUOiBvcCBmb3Igc2VsZWN0aW5nIHRoZSBoYXJkd2FyZSBi bG9jawotICogQFJFR19TSU5HTEVfV1JJVEU6IG9wIGZvciB3cml0aW5nIHNpbmdsZSByZWdpc3Rl ciB2YWx1ZQotICogICAgICAgICAgICAgICAgICAgIGF0IHRoZSBhZGRyZXNzIHByb3ZpZGVkCi0g KiBAUkVHX0JMS19XUklURV9TSU5HTEU6IG9wIGZvciB3cml0aW5nIG11bHRpcGxlIHJlZ2lzdGVy cyB1c2luZyBodyBpbmRleAotICogICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlcgotICog QFJFR19CTEtfV1JJVEVfSU5DOiBvcCBmb3Igd3JpdGluZyBtdWx0aXBsZSByZWdpc3RlcnMgdXNp bmcgYXV0byBhZGRyZXNzCi0gKiAgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudAotICogQFJF R19CTEtfV1JJVEVfTVVMVElQTEU6IG9wIGZvciB3cml0aW5nIGh3IGluZGV4IGJhc2VkIHJlZ2lz dGVycyBhdAotICogICAgICAgICAgICAgICAgICAgICAgICAgbm9uLWNvbnNlY3V0aXZlIGxvY2F0 aW9uCi0gKiBAUkVHX0RNQV9TRVRVUF9PUFNfTUFYOiBpbnZhbGlkIG9wZXJhdGlvbgotICovCi1l bnVtIGRwdV9yZWdfZG1hX3NldHVwX29wcyB7Ci0JSFdfQkxLX1NFTEVDVCwKLQlSRUdfU0lOR0xF X1dSSVRFLAotCVJFR19CTEtfV1JJVEVfU0lOR0xFLAotCVJFR19CTEtfV1JJVEVfSU5DLAotCVJF R19CTEtfV1JJVEVfTVVMVElQTEUsCi0JUkVHX0RNQV9TRVRVUF9PUFNfTUFYLAotfTsKLQotLyoq Ci0gKiBlbnVtIGRwdV9yZWdfZG1hX2JsayAtIGRlZmluZXMgYmxvY2tzIGZvciB3aGljaCByZWcg ZG1hIG9wIHNob3VsZCBiZQotICogICAgICAgICAgICAgICAgICAgICAgICBwZXJmb3JtZWQKLSAq IEBWSUcwOiBzZWxlY3QgdmlnMCBibG9jawotICogQFZJRzE6IHNlbGVjdCB2aWcxIGJsb2NrCi0g KiBAVklHMjogc2VsZWN0IHZpZzIgYmxvY2sKLSAqIEBWSUczOiBzZWxlY3QgdmlnMyBibG9jawot ICogQExNMDogc2VsZWN0IGxtMCBibG9jawotICogQExNMTogc2VsZWN0IGxtMSBibG9jawotICog QExNMjogc2VsZWN0IGxtMiBibG9jawotICogQExNMzogc2VsZWN0IGxtMyBibG9jawotICogQERT UFAwOiBzZWxlY3QgZHNwcDAgYmxvY2sKLSAqIEBEU1BQMTogc2VsZWN0IGRzcHAxIGJsb2NrCi0g KiBARFNQUDI6IHNlbGVjdCBkc3BwMiBibG9jawotICogQERTUFAzOiBzZWxlY3QgZHNwcDMgYmxv Y2sKLSAqIEBETUEwOiBzZWxlY3QgZG1hMCBibG9jawotICogQERNQTE6IHNlbGVjdCBkbWExIGJs b2NrCi0gKiBARE1BMjogc2VsZWN0IGRtYTIgYmxvY2sKLSAqIEBETUEzOiBzZWxlY3QgZG1hMyBi bG9jawotICogQFNTUFBfSUdDOiBzZWxlY3Qgc3NwcCBpZ2MgYmxvY2sKLSAqIEBEU1BQX0lHQzog c2VsZWN0IGRzcHAgaWdjIGJsb2NrCi0gKiBATURTUzogc2VsZWN0IG1kc3MgYmxvY2sKLSAqLwot ZW51bSBkcHVfcmVnX2RtYV9ibGsgewotCVZJRzAgID0gQklUKDApLAotCVZJRzEgID0gQklUKDEp LAotCVZJRzIgID0gQklUKDIpLAotCVZJRzMgID0gQklUKDMpLAotCUxNMCAgID0gQklUKDQpLAot CUxNMSAgID0gQklUKDUpLAotCUxNMiAgID0gQklUKDYpLAotCUxNMyAgID0gQklUKDcpLAotCURT UFAwID0gQklUKDgpLAotCURTUFAxID0gQklUKDkpLAotCURTUFAyID0gQklUKDEwKSwKLQlEU1BQ MyA9IEJJVCgxMSksCi0JRE1BMCAgPSBCSVQoMTIpLAotCURNQTEgID0gQklUKDEzKSwKLQlETUEy ICA9IEJJVCgxNCksCi0JRE1BMyAgPSBCSVQoMTUpLAotCVNTUFBfSUdDID0gQklUKDE2KSwKLQlE U1BQX0lHQyA9IEJJVCgxNyksCi0JTURTUyAgPSBCSVQoMzEpCi19OwotCi0vKioKLSAqIHN0cnVj dCBkcHVfcmVnX2RtYV9idWZmZXIgLSBkZWZpbmVzIHJlZyBkbWEgYnVmZmVyIHN0cnVjdHVyZS4K LSAqIEBkcm1fZ2VtX29iamVjdCAqYnVmOiBkcm0gZ2VtIGhhbmRsZSBmb3IgdGhlIGJ1ZmZlcgot ICogQGFzYXBjZSA6IHBvaW50ZXIgdG8gYWRkcmVzcyBzcGFjZQotICogQGJ1ZmZlcl9zaXplOiBi dWZmZXIgc2l6ZQotICogQGluZGV4OiB3cml0ZSBwb2ludGVyIGluZGV4Ci0gKiBAaW92YTogZGV2 aWNlIGFkZHJlc3MKLSAqIEB2YWRkcjogY3B1IGFkZHJlc3MKLSAqIEBuZXh0X29wX2FsbG93ZWQ6 IG9wZXJhdGlvbiBhbGxvd2VkIG9uIHRoZSBidWZmZXIKLSAqIEBvcHNfY29tcGxldGVkOiBvcGVy YXRpb25zIGNvbXBsZXRlZCBvbiBidWZmZXIKLSAqLwotc3RydWN0IGRwdV9yZWdfZG1hX2J1ZmZl ciB7Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICpidWY7Ci0Jc3RydWN0IG1zbV9nZW1fYWRkcmVz c19zcGFjZSAqYXNwYWNlOwotCXUzMiBidWZmZXJfc2l6ZTsKLQl1MzIgaW5kZXg7Ci0JdTY0IGlv dmE7Ci0Jdm9pZCAqdmFkZHI7Ci0JdTMyIG5leHRfb3BfYWxsb3dlZDsKLQl1MzIgb3BzX2NvbXBs ZXRlZDsKLX07Ci0KLS8qKgotICogc3RydWN0IGRwdV9yZWdfZG1hX3NldHVwX29wc19jZmcgLSBk ZWZpbmVzIHN0cnVjdHVyZSBmb3IgcmVnIGRtYSBvcHMgb24gdGhlCi0gKiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJlZyBkbWEgYnVmZmVyLgotICogQGRwdV9yZWdfZG1hX3Nl dHVwX29wcyBvcHM6IG9wcyB0byBiZSBwZXJmb3JtZWQKLSAqIEBkcHVfcmVnX2RtYV9ibGsgYmxr OiBibG9jayBvbiB3aGljaCBvcCBuZWVkcyB0byBiZSBwZXJmb3JtZWQKLSAqIEBkcHVfcmVnX2Rt YV9mZWF0dXJlcyBmZWF0dXJlOiBmZWF0dXJlIG9uIHdoaWNoIG9wIG5lZWRzIHRvIGJlIGRvbmUK LSAqIEB3cmFwX3NpemU6IHZhbGlkIGZvciBSRUdfQkxLX1dSSVRFX01VTFRJUExFLCBpbmRpY2F0 ZXMgcmVnIGluZGV4IGxvY2F0aW9uCi0gKiAgICAgICAgICAgICBzaXplCi0gKiBAaW5jOiB2YWxp ZCBmb3IgUkVHX0JMS19XUklURV9NVUxUSVBMRSBpbmRpY2F0ZXMgd2hldGhlciByZWcgaW5kZXgg bG9jYXRpb24KLSAqICAgICAgIG5lZWRzIGFuIGluY3JlbWVudCBvciBkZWNyZW1lbnQuCi0gKiAg ICAgICAwIC0gZGVjcmVtZW50Ci0gKiAgICAgICAxIC0gaW5jcmVtZW50Ci0gKiBAYmxrX29mZnNl dDogb2Zmc2V0IGZvciBibGssIHZhbGlkIGZvciBIV19CTEtfU0VMRUNUIG9wIG9ubHkKLSAqIEBk cHVfcmVnX2RtYV9idWZmZXIgKmRtYV9idWY6IHJlZyBkbWEgYnVmZmVyIG9uIHdoaWNoIG9wIG5l ZWRzIHRvIGJlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyZm9ybWVkCi0g KiBAZGF0YTogcG9pbnRlciB0byBwYXlsb2FkIHdoaWNoIGhhcyB0byBiZSB3cml0dGVuIGludG8g cmVnIGRtYSBidWZmZXIgZm9yCi0gKiAgICAgICAgc2VsZWN0ZWQgb3AuCi0gKiBAZGF0YV9zaXpl OiBzaXplIG9mIHBheWxvYWQgaW4gZGF0YQotICovCi1zdHJ1Y3QgZHB1X3JlZ19kbWFfc2V0dXBf b3BzX2NmZyB7Ci0JZW51bSBkcHVfcmVnX2RtYV9zZXR1cF9vcHMgb3BzOwotCWVudW0gZHB1X3Jl Z19kbWFfYmxrIGJsazsKLQllbnVtIGRwdV9yZWdfZG1hX2ZlYXR1cmVzIGZlYXR1cmU7Ci0JdTMy IHdyYXBfc2l6ZTsKLQl1MzIgaW5jOwotCXUzMiBibGtfb2Zmc2V0OwotCXN0cnVjdCBkcHVfcmVn X2RtYV9idWZmZXIgKmRtYV9idWY7Ci0JdTMyICpkYXRhOwotCXUzMiBkYXRhX3NpemU7Ci19Owot Ci0vKioKLSAqIHN0cnVjdCBkcHVfcmVnX2RtYV9raWNrb2ZmX2NmZyAtIGNvbW1pdCByZWcgZG1h IGJ1ZmZlciB0byBodyBlbmdpbmUKLSAqIEBjdGw6IGN0bCBmb3Igd2hpY2ggcmVnIGRtYSBidWZm ZXIgbmVlZHMgdG8gYmUgY29tbWl0dGVkLgotICogQGRtYV9idWY6IHJlZyBkbWEgYnVmZmVyIHdp dGggaW92YSBhZGRyZXNzIGFuZCBzaXplIGluZm8KLSAqIEBibG9ja19zZWxlY3Q6IGhpc3RvZ3Jh bSByZWFkIHNlbGVjdAotICogQHRyaWdnZXJfbW9kZTogcmVnIGRtYSBvcHMgdHJpZ2dlciBtb2Rl Ci0gKiBAcXVldWVfc2VsZWN0OiBxdWV1ZSBvbiB3aGljaCByZWcgZG1hIGJ1ZmZlciB3aWxsIGJl IHN1Ym1pdHRlZAotICogQGxhc3RfY29tbWFuZDogbGFzdCBjb21tYW5kIGZvciB0aGlzIHZzeW5j Ci0gKi8KLXN0cnVjdCBkcHVfcmVnX2RtYV9raWNrb2ZmX2NmZyB7Ci0Jc3RydWN0IGRwdV9od19j dGwgKmN0bDsKLQllbnVtIGRwdV9yZWdfZG1hX29wIG9wOwotCXN0cnVjdCBkcHVfcmVnX2RtYV9i dWZmZXIgKmRtYV9idWY7Ci0JZW51bSBkcHVfcmVnX2RtYV9yZWFkX3NlbCBibG9ja19zZWxlY3Q7 Ci0JZW51bSBkcHVfcmVnX2RtYV90cmlnZ2VyX21vZGUgdHJpZ2dlcl9tb2RlOwotCWVudW0gZHB1 X3JlZ19kbWFfcXVldWUgcXVldWVfc2VsZWN0OwotCXUzMiBsYXN0X2NvbW1hbmQ7Ci19OwotCi0v KioKLSAqIHN0cnVjdCBkcHVfaHdfcmVnX2RtYV9vcHMgLSBvcHMgc3VwcG9ydGVkIGJ5IHJlZyBk bWEgZnJhbWUgd29yaywgYmFzZWQgb24KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 ZXJzaW9uIG9mIHJlZyBkbWEgYXBwcm9wcmlhdGUgb3BzIHdpbGwgYmUKLSAqICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgZHVyaW5nIGRyaXZlciBwcm9iZS4KLSAqIEBjaGVj a19zdXBwb3J0OiBjaGVja3MgaWYgcmVnIGRtYSBpcyBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9y bSBmb3IgYQotICogICAgICAgICAgICAgICAgIGZlYXR1cmUKLSAqIEBzZXR1cF9wYXlsb2FkOiBz ZXR1cCByZWcgZG1hIGJ1ZmZlciBiYXNlZCBvbiBvcHMgYW5kIHBheWxvYWQgcHJvdmlkZWQgYnkK LSAqICAgICAgICAgICAgICAgICBjbGllbnQKLSAqIEBraWNrX29mZjogc3VibWl0IHRoZSByZWcg ZG1hIGJ1ZmZlciB0byBodyBlbmdpbmdlCi0gKiBAcmVzZXQ6IHJlc2V0IHRoZSByZWcgZG1hIGh3 IGVuZ2luZ2UgZm9yIGEgY3RsCi0gKiBAYWxsb2NfcmVnX2RtYV9idWY6IGFsbG9jYXRlIHJlZyBk bWEgYnVmZmVyCi0gKiBAZGVhbGxvY19yZWdfZG1hOiBkZS1hbGxvY2F0ZSByZWcgZG1hIGJ1ZmZl cgotICogQHJlc2V0X3JlZ19kbWFfYnVmOiByZXNldCB0aGUgYnVmZmVyIHRvIGluaXQgc3RhdGUK LSAqIEBsYXN0X2NvbW1hbmQ6IG5vdGlmeSBjb250cm9sIHRoYXQgbGFzdCBjb21tYW5kIGlzIHF1 ZXVlZAotICovCi1zdHJ1Y3QgZHB1X2h3X3JlZ19kbWFfb3BzIHsKLQlpbnQgKCpjaGVja19zdXBw b3J0KShlbnVtIGRwdV9yZWdfZG1hX2ZlYXR1cmVzIGZlYXR1cmUsCi0JCQkgICAgIGVudW0gZHB1 X3JlZ19kbWFfYmxrIGJsaywKLQkJCSAgICAgYm9vbCAqaXNfc3VwcG9ydGVkKTsKLQlpbnQgKCpz ZXR1cF9wYXlsb2FkKShzdHJ1Y3QgZHB1X3JlZ19kbWFfc2V0dXBfb3BzX2NmZyAqY2ZnKTsKLQlp bnQgKCpraWNrX29mZikoc3RydWN0IGRwdV9yZWdfZG1hX2tpY2tvZmZfY2ZnICpjZmcpOwotCWlu dCAoKnJlc2V0KShzdHJ1Y3QgZHB1X2h3X2N0bCAqY3RsKTsKLQlzdHJ1Y3QgZHB1X3JlZ19kbWFf YnVmZmVyKiAoKmFsbG9jX3JlZ19kbWFfYnVmKSh1MzIgc2l6ZSk7Ci0JaW50ICgqZGVhbGxvY19y ZWdfZG1hKShzdHJ1Y3QgZHB1X3JlZ19kbWFfYnVmZmVyICpsdXRfYnVmKTsKLQlpbnQgKCpyZXNl dF9yZWdfZG1hX2J1Zikoc3RydWN0IGRwdV9yZWdfZG1hX2J1ZmZlciAqYnVmKTsKLQlpbnQgKCps YXN0X2NvbW1hbmQpKHN0cnVjdCBkcHVfaHdfY3RsICpjdGwsIGVudW0gZHB1X3JlZ19kbWFfcXVl dWUgcSk7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBkcHVfaHdfcmVnX2RtYSAtIHN0cnVjdHVyZSB0 byBob2xkIHJlZyBkbWEgaHcgaW5mbwotICogQGRybV9kZXY6IGRybSBkcml2ZXIgZGV2IGhhbmRs ZQotICogQGNhcHM6IHJlZyBkbWEgaHcgY2FwcyBvbiB0aGUgcGxhdGZvcm0KLSAqIEBvcHM6IHJl ZyBkbWEgb3BzIHN1cHBvcnRlZCBvbiB0aGUgcGxhdGZvcm0KLSAqIEBhZGRyOiByZWcgZG1hIGh3 IGJsb2NrIGJhc2UgYWRkcmVzcwotICovCi1zdHJ1Y3QgZHB1X2h3X3JlZ19kbWEgewotCXN0cnVj dCBkcm1fZGV2aWNlICpkcm1fZGV2OwotCWNvbnN0IHN0cnVjdCBkcHVfcmVnX2RtYV9jZmcgKmNh cHM7Ci0Jc3RydWN0IGRwdV9od19yZWdfZG1hX29wcyBvcHM7Ci0Jdm9pZCBfX2lvbWVtICphZGRy OwotfTsKLQotLyoqCi0gKiBkcHVfcmVnX2RtYV9pbml0KCkgLSBmdW5jdGlvbiBjYWxsZWQgdG8g aW5pdGlhbGl6ZSByZWcgZG1hIGR1cmluZyBkcHUKLSAqICAgICAgICAgICAgICAgICAgICAgICAg IGRybSBkcml2ZXIgcHJvYmUuIElmIHJlZyBkbWEgaXMgc3VwcG9ydGVkIGJ5IGRwdQotICogICAg ICAgICAgICAgICAgICAgICAgICAgb3BzIGZvciByZWcgZG1hIHZlcnNpb24gd2lsbCBiZSBpbnN0 YWxsZWQuCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZWcgZG1hIGlzIG5vdCBzdXBw b3J0ZWQgYnkgZHB1IGRlZmF1bHQgb3BzIHdpbGwKLSAqICAgICAgICAgICAgICAgICAgICAgICAg IGJlIGluc3RhbGxlZC4gY2hlY2tfc3VwcG9ydCBvZiBkZWZhdWx0IG9wcyB3aWxsCi0gKiAgICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2UsIGhlbmNlIHRoZSBjbGllbnRzIHNob3Vs ZCBmYWxsIGJhY2sgdG8KLSAqICAgICAgICAgICAgICAgICAgICAgICAgIEFIQiBwcm9ncmFtbWlu Zy4KLSAqIEBhZGRyOiByZWcgZG1hIGJsb2NrIGJhc2UgYWRkcmVzcwotICogQG06IGNhdGFsb2cg d2hpY2ggY29udGFpbnMgZHB1IGh3IGNhcGFiaWxpdGllcyBhbmQgb2Zmc2V0cwotICogQGRldjog ZHJtIGRyaXZlciBkZXZpY2UgaGFuZGxlCi0gKi8KLWludCBkcHVfcmVnX2RtYV9pbml0KHZvaWQg X19pb21lbSAqYWRkciwgc3RydWN0IGRwdV9tZHNzX2NmZyAqbSwKLQkJc3RydWN0IGRybV9kZXZp Y2UgKmRldik7Ci0KLS8qKgotICogZHB1X3JlZ19kbWFfZ2V0X29wcygpIC0gc2luZ2xldG9uIG1v ZHVsZSwgb3BzIGlzIHJldHVybmVkIHRvIHRoZSBjbGllbnRzCi0gKiAgICAgICAgICAgICAgICAg ICAgICAgICAgICB3aG8gY2FsbCB0aGlzIGFwaS4KLSAqLwotc3RydWN0IGRwdV9od19yZWdfZG1h X29wcyAqZHB1X3JlZ19kbWFfZ2V0X29wcyh2b2lkKTsKLQotLyoqCi0gKiBkcHVfcmVnX2RtYV9k ZWluaXQoKSAtIGRlLWluaXRpYWxpemUgdGhlIHJlZyBkbWEKLSAqLwotdm9pZCBkcHVfcmVnX2Rt YV9kZWluaXQodm9pZCk7Ci0jZW5kaWYgLyogX0RQVV9SRUdfRE1BX0ggKi8KZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5jIGIvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X3JtLmMKaW5kZXggYWY4MjA1Zi4uZjQ2N2JmMSAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3JtLmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3JtLmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRl ICJkcHVfaHdfbG0uaCIKICNpbmNsdWRlICJkcHVfaHdfY3RsLmgiCiAjaW5jbHVkZSAiZHB1X2h3 X2NkbS5oIgotI2luY2x1ZGUgImRwdV9od19kc3BwLmgiCiAjaW5jbHVkZSAiZHB1X2h3X2RzLmgi CiAjaW5jbHVkZSAiZHB1X2h3X3Bpbmdwb25nLmgiCiAjaW5jbHVkZSAiZHB1X2h3X2ludGYuaCIK QEAgLTI5LDcgKzI4LDYgQEAKIAogI2RlZmluZSBSTV9SUV9MT0NLKHIpICgociktPnRvcF9jdHJs ICYgQklUKERQVV9STV9UT1BDVExfUkVTRVJWRV9MT0NLKSkKICNkZWZpbmUgUk1fUlFfQ0xFQVIo cikgKChyKS0+dG9wX2N0cmwgJiBCSVQoRFBVX1JNX1RPUENUTF9SRVNFUlZFX0NMRUFSKSkKLSNk ZWZpbmUgUk1fUlFfRFNQUChyKSAoKHIpLT50b3BfY3RybCAmIEJJVChEUFVfUk1fVE9QQ1RMX0RT UFApKQogI2RlZmluZSBSTV9SUV9EUyhyKSAoKHIpLT50b3BfY3RybCAmIEJJVChEUFVfUk1fVE9Q Q1RMX0RTKSkKICNkZWZpbmUgUk1fSVNfVE9QT0xPR1lfTUFUQ0godCwgcikgKCh0KS5udW1fbG0g PT0gKHIpLm51bV9sbSAmJiBcCiAJCQkJKHQpLm51bV9jb21wX2VuYyA9PSAocikubnVtX2VuYyAm JiBcCkBAIC0yMzcsOSArMjM1LDYgQEAgc3RhdGljIHZvaWQgX2RwdV9ybV9od19kZXN0cm95KGVu dW0gZHB1X2h3X2Jsa190eXBlIHR5cGUsIHZvaWQgKmh3KQogCWNhc2UgRFBVX0hXX0JMS19MTToK IAkJZHB1X2h3X2xtX2Rlc3Ryb3koaHcpOwogCQlicmVhazsKLQljYXNlIERQVV9IV19CTEtfRFNQ UDoKLQkJZHB1X2h3X2RzcHBfZGVzdHJveShodyk7Ci0JCWJyZWFrOwogCWNhc2UgRFBVX0hXX0JM S19EUzoKIAkJZHB1X2h3X2RzX2Rlc3Ryb3koaHcpOwogCQlicmVhazsKQEAgLTMyMiw5ICszMTcs NiBAQCBzdGF0aWMgaW50IF9kcHVfcm1faHdfYmxrX2NyZWF0ZSgKIAljYXNlIERQVV9IV19CTEtf TE06CiAJCWh3ID0gZHB1X2h3X2xtX2luaXQoaWQsIG1taW8sIGNhdCk7CiAJCWJyZWFrOwotCWNh c2UgRFBVX0hXX0JMS19EU1BQOgotCQlodyA9IGRwdV9od19kc3BwX2luaXQoaWQsIG1taW8sIGNh dCk7Ci0JCWJyZWFrOwogCWNhc2UgRFBVX0hXX0JMS19EUzoKIAkJaHcgPSBkcHVfaHdfZHNfaW5p dChpZCwgbW1pbywgY2F0KTsKIAkJYnJlYWs7CkBAIC00MzUsMTUgKzQyNyw2IEBAIGludCBkcHVf cm1faW5pdChzdHJ1Y3QgZHB1X3JtICpybSwKIAkJfQogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBj YXQtPmRzcHBfY291bnQ7IGkrKykgewotCQlyYyA9IF9kcHVfcm1faHdfYmxrX2NyZWF0ZShybSwg Y2F0LCBtbWlvLCBEUFVfSFdfQkxLX0RTUFAsCi0JCQkJY2F0LT5kc3BwW2ldLmlkLCAmY2F0LT5k c3BwW2ldKTsKLQkJaWYgKHJjKSB7Ci0JCQlEUFVfRVJST1IoImZhaWxlZDogZHNwcCBodyBub3Qg YXZhaWxhYmxlXG4iKTsKLQkJCWdvdG8gZmFpbDsKLQkJfQotCX0KLQogCWlmIChjYXQtPm1kcFsw XS5oYXNfZGVzdF9zY2FsZXIpIHsKIAkJZm9yIChpID0gMDsgaSA8IGNhdC0+ZHNfY291bnQ7IGkr KykgewogCQkJcmMgPSBfZHB1X3JtX2h3X2Jsa19jcmVhdGUocm0sIGNhdCwgbW1pbywgRFBVX0hX X0JMS19EUywKQEAgLTUxNiwxNiArNDk5LDE0IEBAIGludCBkcHVfcm1faW5pdChzdHJ1Y3QgZHB1 X3JtICpybSwKIC8qKgogICogX2RwdV9ybV9jaGVja19sbV9hbmRfZ2V0X2Nvbm5lY3RlZF9ibGtz IC0gY2hlY2sgaWYgcHJvcG9zZWQgbGF5ZXIgbWl4ZXIgbWVldHMKICAqCXByb3Bvc2VkIHVzZSBj YXNlIHJlcXVpcmVtZW50cywgaW5jbC4gaGFyZHdpcmVkIGRlcGVuZGVudCBibG9ja3MgbGlrZQot ICoJcGluZ3BvbmcsIGFuZCBkc3BwLgorICoJcGluZ3BvbmcKICAqIEBybTogZHB1IHJlc291cmNl IG1hbmFnZXIgaGFuZGxlCiAgKiBAcnN2cDogcmVzZXJ2YXRpb24gY3VycmVudGx5IGJlaW5nIGNy ZWF0ZWQKICAqIEByZXFzOiBwcm9wb3NlZCB1c2UgY2FzZSByZXF1aXJlbWVudHMKICAqIEBsbTog cHJvcG9zZWQgbGF5ZXIgbWl4ZXIsIGZ1bmN0aW9uIGNoZWNrcyBpZiBsbSwgYW5kIGFsbCBvdGhl ciBoYXJkd2lyZWQKLSAqICAgICAgYmxvY2tzIGNvbm5lY3RlZCB0byB0aGUgbG0gKHBwLCBkc3Bw KSBhcmUgYXZhaWxhYmxlIGFuZCBhcHByb3ByaWF0ZQotICogQGRzcHA6IG91dHB1dCBwYXJhbWV0 ZXIsIGRzcHAgYmxvY2sgYXR0YWNoZWQgdG8gdGhlIGxheWVyIG1peGVyLgotICogICAgICAgIE5V TEwgaWYgZHNwcCB3YXMgbm90IGF2YWlsYWJsZSwgb3Igbm90IG1hdGNoaW5nIHJlcXVpcmVtZW50 cy4KKyAqICAgICAgYmxvY2tzIGNvbm5lY3RlZCB0byB0aGUgbG0gKHBwKSBpcyBhdmFpbGFibGUg YW5kIGFwcHJvcHJpYXRlCiAgKiBAcHA6IG91dHB1dCBwYXJhbWV0ZXIsIHBpbmdwb25nIGJsb2Nr IGF0dGFjaGVkIHRvIHRoZSBsYXllciBtaXhlci4KLSAqICAgICAgTlVMTCBpZiBkc3BwIHdhcyBu b3QgYXZhaWxhYmxlLCBvciBub3QgbWF0Y2hpbmcgcmVxdWlyZW1lbnRzLgorICogICAgICBOVUxM IGlmIHBwIHdhcyBub3QgYXZhaWxhYmxlLCBvciBub3QgbWF0Y2hpbmcgcmVxdWlyZW1lbnRzLgog ICogQHByaW1hcnlfbG06IGlmIG5vbi1udWxsLCB0aGlzIGZ1bmN0aW9uIGNoZWNrIGlmIGxtIGlz IGNvbXBhdGlibGUgcHJpbWFyeV9sbQogICogICAgICAgICAgICAgIGFzIHdlbGwgYXMgc2F0aXNm eWluZyBhbGwgb3RoZXIgcmVxdWlyZW1lbnRzCiAgKiBAUmV0dXJuOiB0cnVlIGlmIGxtIG1hdGNo ZXMgYWxsIHJlcXVpcmVtZW50cywgZmFsc2Ugb3RoZXJ3aXNlCkBAIC01MzUsMjEgKzUxNiwxOSBA QCBzdGF0aWMgYm9vbCBfZHB1X3JtX2NoZWNrX2xtX2FuZF9nZXRfY29ubmVjdGVkX2Jsa3MoCiAJ CXN0cnVjdCBkcHVfcm1fcnN2cCAqcnN2cCwKIAkJc3RydWN0IGRwdV9ybV9yZXF1aXJlbWVudHMg KnJlcXMsCiAJCXN0cnVjdCBkcHVfcm1faHdfYmxrICpsbSwKLQkJc3RydWN0IGRwdV9ybV9od19i bGsgKipkc3BwLAogCQlzdHJ1Y3QgZHB1X3JtX2h3X2JsayAqKmRzLAogCQlzdHJ1Y3QgZHB1X3Jt X2h3X2JsayAqKnBwLAogCQlzdHJ1Y3QgZHB1X3JtX2h3X2JsayAqcHJpbWFyeV9sbSkKIHsKIAlj b25zdCBzdHJ1Y3QgZHB1X2xtX2NmZyAqbG1fY2ZnID0gdG9fZHB1X2h3X21peGVyKGxtLT5odykt PmNhcDsKIAlzdHJ1Y3QgZHB1X3JtX2h3X2l0ZXIgaXRlcjsKLQlib29sIGlzX3ZhbGlkX2RzcHAs IGlzX3ZhbGlkX2RzLCByZXQ7CisJYm9vbCBpc192YWxpZF9kczsKIAotCSpkc3BwID0gTlVMTDsK IAkqZHMgPSBOVUxMOwogCSpwcCA9IE5VTEw7CiAKLQlEUFVfREVCVUcoImNoZWNrIGxtICVkOiBk c3BwICVkIGRzICVkIHBwICVkXG4iLAotCQkJICAgbG1fY2ZnLT5pZCwgbG1fY2ZnLT5kc3BwLAor CURQVV9ERUJVRygiY2hlY2sgbG0gJWQgZHMgJWQgcHAgJWRcbiIsCisJCQkgICBsbV9jZmctPmlk LAogCQkJICAgbG1fY2ZnLT5kcywgbG1fY2ZnLT5waW5ncG9uZyk7CiAKIAkvKiBDaGVjayBpZiB0 aGlzIGxheWVyIG1peGVyIGlzIGEgcGVlciBvZiB0aGUgcHJvcG9zZWQgcHJpbWFyeSBMTSAqLwpA QCAtNTY0LDI4ICs1NDMsMTMgQEAgc3RhdGljIGJvb2wgX2RwdV9ybV9jaGVja19sbV9hbmRfZ2V0 X2Nvbm5lY3RlZF9ibGtzKAogCQl9CiAJfQogCi0JaXNfdmFsaWRfZHNwcCA9IChsbV9jZmctPmRz cHAgIT0gRFNQUF9NQVgpID8gdHJ1ZSA6IGZhbHNlOwogCWlzX3ZhbGlkX2RzID0gKGxtX2NmZy0+ ZHMgIT0gRFNfTUFYKSA/IHRydWUgOiBmYWxzZTsKIAotCS8qKgotCSAqIFJNX1JRX1g6IHNwZWNp ZmljYXRpb24gb2Ygd2hpY2ggTE1zIHRvIGNob29zZQotCSAqIGlzX3ZhbGlkX1g6IGluZGljYXRl cyB3aGV0aGVyIExNIGlzIHRpZWQgd2l0aCBibG9jayBYCi0JICogcmV0OiB0cnVlIGlmIGdpdmVu IExNIG1hdGNoZXMgdGhlIHVzZXIgcmVxdWlyZW1lbnQsIGZhbHNlIG90aGVyd2lzZQotCSAqLwot CWlmIChSTV9SUV9EU1BQKHJlcXMpICYmIFJNX1JRX0RTKHJlcXMpKQotCQlyZXQgPSAoaXNfdmFs aWRfZHNwcCAmJiBpc192YWxpZF9kcyk7Ci0JZWxzZSBpZiAoUk1fUlFfRFNQUChyZXFzKSkKLQkJ cmV0ID0gaXNfdmFsaWRfZHNwcDsKLQllbHNlIGlmIChSTV9SUV9EUyhyZXFzKSkKLQkJcmV0ID0g aXNfdmFsaWRfZHM7Ci0JZWxzZQotCQlyZXQgPSAhKGlzX3ZhbGlkX2RzcHAgfHwgaXNfdmFsaWRf ZHMpOworCWlmIChSTV9SUV9EUyhyZXFzKSAmJiAhaXNfdmFsaWRfZHMpIHsKKwkJRFBVX0RFQlVH KCJmYWlsOmxtKCVkKXJlcV9kcyglZClkcyglZClcbiIsCisJCQlsbV9jZmctPmlkLCAoYm9vbCko Uk1fUlFfRFMocmVxcykpLCBsbV9jZmctPmRzKTsKIAotCWlmICghcmV0KSB7Ci0JCURQVV9ERUJV RygiZmFpbDpsbSglZClyZXFfZHNwcCglZClkc3BwKCVkKXJlcV9kcyglZClkcyglZClcbiIsCi0J CQlsbV9jZmctPmlkLCAoYm9vbCkoUk1fUlFfRFNQUChyZXFzKSksIGxtX2NmZy0+ZHNwcCwKLQkJ CShib29sKShSTV9SUV9EUyhyZXFzKSksIGxtX2NmZy0+ZHMpOwotCQlyZXR1cm4gcmV0OworCQly ZXR1cm4gZmFsc2U7CiAJfQogCiAJLyogQWxyZWFkeSByZXNlcnZlZD8gKi8KQEAgLTU5NCwyOCAr NTU4LDYgQEAgc3RhdGljIGJvb2wgX2RwdV9ybV9jaGVja19sbV9hbmRfZ2V0X2Nvbm5lY3RlZF9i bGtzKAogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JaWYgKGxtX2NmZy0+ZHNwcCAhPSBEU1BQX01B WCkgewotCQlkcHVfcm1faW5pdF9od19pdGVyKCZpdGVyLCAwLCBEUFVfSFdfQkxLX0RTUFApOwot CQl3aGlsZSAoX2RwdV9ybV9nZXRfaHdfbG9ja2VkKHJtLCAmaXRlcikpIHsKLQkJCWlmIChpdGVy LmJsay0+aWQgPT0gbG1fY2ZnLT5kc3BwKSB7Ci0JCQkJKmRzcHAgPSBpdGVyLmJsazsKLQkJCQli cmVhazsKLQkJCX0KLQkJfQotCi0JCWlmICghKmRzcHApIHsKLQkJCURQVV9ERUJVRygibG0gJWQg ZmFpbGVkIHRvIHJldHJpZXZlIGRzcHAgJWRcbiIsIGxtLT5pZCwKLQkJCQkJbG1fY2ZnLT5kc3Bw KTsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCi0JCWlmIChSRVNFUlZFRF9CWV9PVEhFUigqZHNw cCwgcnN2cCkpIHsKLQkJCURQVV9ERUJVRygibG0gJWQgZHNwcCAlZCBhbHJlYWR5IHJlc2VydmVk XG4iLAotCQkJCQlsbS0+aWQsICgqZHNwcCktPmlkKTsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQot CX0KLQogCWlmIChsbV9jZmctPmRzICE9IERTX01BWCkgewogCQlkcHVfcm1faW5pdF9od19pdGVy KCZpdGVyLCAwLCBEUFVfSFdfQkxLX0RTKTsKIAkJd2hpbGUgKF9kcHVfcm1fZ2V0X2h3X2xvY2tl ZChybSwgJml0ZXIpKSB7CkBAIC02NTQsNyArNTk2LDYgQEAgc3RhdGljIGJvb2wgX2RwdV9ybV9j aGVja19sbV9hbmRfZ2V0X2Nvbm5lY3RlZF9ibGtzKAogCWlmIChSRVNFUlZFRF9CWV9PVEhFUigq cHAsIHJzdnApKSB7CiAJCURQVV9ERUJVRygibG0gJWQgcHAgJWQgYWxyZWFkeSByZXNlcnZlZFxu IiwgbG0tPmlkLAogCQkJCSgqcHApLT5pZCk7Ci0JCSpkc3BwID0gTlVMTDsKIAkJKmRzID0gTlVM TDsKIAkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTY2OSw3ICs2MTAsNiBAQCBzdGF0aWMgaW50IF9k cHVfcm1fcmVzZXJ2ZV9sbXMoCiAKIHsKIAlzdHJ1Y3QgZHB1X3JtX2h3X2JsayAqbG1bTUFYX0JM T0NLU107Ci0Jc3RydWN0IGRwdV9ybV9od19ibGsgKmRzcHBbTUFYX0JMT0NLU107CiAJc3RydWN0 IGRwdV9ybV9od19ibGsgKmRzW01BWF9CTE9DS1NdOwogCXN0cnVjdCBkcHVfcm1faHdfYmxrICpw cFtNQVhfQkxPQ0tTXTsKIAlzdHJ1Y3QgZHB1X3JtX2h3X2l0ZXIgaXRlcl9pLCBpdGVyX2o7CkBA IC02ODYsNyArNjI2LDYgQEAgc3RhdGljIGludCBfZHB1X3JtX3Jlc2VydmVfbG1zKAogCXdoaWxl IChsbV9jb3VudCAhPSByZXFzLT50b3BvbG9neS0+bnVtX2xtICYmCiAJCQlfZHB1X3JtX2dldF9o d19sb2NrZWQocm0sICZpdGVyX2kpKSB7CiAJCW1lbXNldCgmbG0sIDAsIHNpemVvZihsbSkpOwot CQltZW1zZXQoJmRzcHAsIDAsIHNpemVvZihkc3BwKSk7CiAJCW1lbXNldCgmZHMsIDAsIHNpemVv ZihkcykpOwogCQltZW1zZXQoJnBwLCAwLCBzaXplb2YocHApKTsKIApAQCAtNjk0LDggKzYzMyw3 IEBAIHN0YXRpYyBpbnQgX2RwdV9ybV9yZXNlcnZlX2xtcygKIAkJbG1bbG1fY291bnRdID0gaXRl cl9pLmJsazsKIAogCQlpZiAoIV9kcHVfcm1fY2hlY2tfbG1fYW5kX2dldF9jb25uZWN0ZWRfYmxr cygKLQkJCQlybSwgcnN2cCwgcmVxcywgbG1bbG1fY291bnRdLAotCQkJCSZkc3BwW2xtX2NvdW50 XSwgJmRzW2xtX2NvdW50XSwKKwkJCQlybSwgcnN2cCwgcmVxcywgbG1bbG1fY291bnRdLCAmZHNb bG1fY291bnRdLAogCQkJCSZwcFtsbV9jb3VudF0sIE5VTEwpKQogCQkJY29udGludWU7CiAKQEAg LTcxMSw4ICs2NDksOCBAQCBzdGF0aWMgaW50IF9kcHVfcm1fcmVzZXJ2ZV9sbXMoCiAKIAkJCWlm ICghX2RwdV9ybV9jaGVja19sbV9hbmRfZ2V0X2Nvbm5lY3RlZF9ibGtzKAogCQkJCQlybSwgcnN2 cCwgcmVxcywgaXRlcl9qLmJsaywKLQkJCQkJJmRzcHBbbG1fY291bnRdLCAmZHNbbG1fY291bnRd LAotCQkJCQkmcHBbbG1fY291bnRdLCBpdGVyX2kuYmxrKSkKKwkJCQkJJmRzW2xtX2NvdW50XSwg JnBwW2xtX2NvdW50XSwKKwkJCQkJaXRlcl9pLmJsaykpCiAJCQkJY29udGludWU7CiAKIAkJCWxt W2xtX2NvdW50XSA9IGl0ZXJfai5ibGs7CkBAIC03MzEsMTQgKzY2OSwxMSBAQCBzdGF0aWMgaW50 IF9kcHVfcm1fcmVzZXJ2ZV9sbXMoCiAKIAkJbG1baV0tPnJzdnBfbnh0ID0gcnN2cDsKIAkJcHBb aV0tPnJzdnBfbnh0ID0gcnN2cDsKLQkJaWYgKGRzcHBbaV0pCi0JCQlkc3BwW2ldLT5yc3ZwX254 dCA9IHJzdnA7CiAKIAkJaWYgKGRzW2ldKQogCQkJZHNbaV0tPnJzdnBfbnh0ID0gcnN2cDsKIAog CQlEUFVfRVZUMzIobG1baV0tPnR5cGUsIHJzdnAtPmVuY19pZCwgbG1baV0tPmlkLCBwcFtpXS0+ aWQsCi0JCQkJZHNwcFtpXSA/IGRzcHBbaV0tPmlkIDogMCwKIAkJCQlkc1tpXSA/IGRzW2ldLT5p ZCA6IDApOwogCX0KIApAQCAtOTE5LDE4ICs4NTQsNyBAQCBzdGF0aWMgaW50IF9kcHVfcm1fbWFr ZV9uZXh0X3JzdnAoCiAJcnN2cC0+dG9wb2xvZ3kgPSByZXFzLT50b3BvbG9neS0+dG9wX25hbWU7 CiAJbGlzdF9hZGRfdGFpbCgmcnN2cC0+bGlzdCwgJnJtLT5yc3Zwcyk7CiAKLQkvKgotCSAqIEFz c2lnbiBMTXMgYW5kIGJsb2NrcyB3aG9zZSB1c2FnZSBpcyB0aWVkIHRvIHRoZW06IERTUFAgJiBQ aW5ncG9uZy4KLQkgKiBEbyBhc3NpZ25tZW50IHByZWZlcnJpbmcgdG8gZ2l2ZSBhd2F5IGxvdy1y ZXNvdXJjZSBtaXhlcnMgZmlyc3Q6Ci0JICogLSBDaGVjayBtaXhlcnMgd2l0aG91dCBEU1BQcwot CSAqIC0gT25seSB0aGVuIGFsbG93IHRvIGdyYWIgZnJvbSBtaXhlcnMgd2l0aCBEU1BQIGNhcGFi aWxpdHkKLQkgKi8KIAlyZXQgPSBfZHB1X3JtX3Jlc2VydmVfbG1zKHJtLCByc3ZwLCByZXFzKTsK LQlpZiAocmV0ICYmICFSTV9SUV9EU1BQKHJlcXMpKSB7Ci0JCXJlcXMtPnRvcF9jdHJsIHw9IEJJ VChEUFVfUk1fVE9QQ1RMX0RTUFApOwotCQlyZXQgPSBfZHB1X3JtX3Jlc2VydmVfbG1zKHJtLCBy c3ZwLCByZXFzKTsKLQl9Ci0KIAlpZiAocmV0KSB7CiAJCURQVV9FUlJPUigidW5hYmxlIHRvIGZp bmQgYXBwcm9wcmlhdGUgbWl4ZXJzXG4iKTsKIAkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5oIGIvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X3JtLmgKaW5kZXggNGM3Nzg3NC4uZWYzZjY3YiAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3JtLmgKKysrIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X3JtLmgKQEAgLTQ1LDEzICs0NSwxMSBAQCBlbnVtIGRwdV9y bV90b3BvbG9neV9uYW1lIHsKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVh c2UgYW55IHJlc2VydmF0aW9uIGhlbGQgYnkgdGhpcyBkaXNwbGF5LgogICogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTm9ybWFsIGJlaGF2aW9yIHdvdWxkIG5vdCBpbXBhY3QgdGhlCiAg KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZhdGlvbiBsaXN0IGR1cmluZyB0 aGUgQXRvbWljVGVzdCBwaGFzZS4KLSAqIEBEUFVfUk1fVE9QQ1RMX0RTUFA6IFJlcXVpcmUgbGF5 ZXIgbWl4ZXJzIHdpdGggRFNQUCBjYXBhYmlsaXRpZXMKICAqIEBEUFVfUk1fVE9QQ1RMX0RTICA6 IFJlcXVpcmUgbGF5ZXIgbWl4ZXJzIHdpdGggRFMgY2FwYWJpbGl0aWVzCiAgKi8KIGVudW0gZHB1 X3JtX3RvcG9sb2d5X2NvbnRyb2wgewogCURQVV9STV9UT1BDVExfUkVTRVJWRV9MT0NLLAogCURQ VV9STV9UT1BDVExfUkVTRVJWRV9DTEVBUiwKLQlEUFVfUk1fVE9QQ1RMX0RTUFAsCiAJRFBVX1JN X1RPUENUTF9EUywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV93Yi5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3diLmMKaW5k ZXggY2M3ODc4Ni4uOWI0N2JiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X3diLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3di LmMKQEAgLTEzLDggKzEzLDYgQEAKIAogI2RlZmluZSBwcl9mbXQoZm10KQkiW2RybTolczolZF0g IiBmbXQsIF9fZnVuY19fLCBfX0xJTkVfXwogCi0jaW5jbHVkZSA8dWFwaS9kcm0vZHB1X2RybS5o PgotCiAjaW5jbHVkZSAibXNtX2ttcy5oIgogI2luY2x1ZGUgImRwdV9rbXMuaCIKICNpbmNsdWRl ICJkcHVfd2IuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKaW5kZXggOTU0YWMxMi4uNWJhZmYyNyAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9tc21fZHJ2LmgKQEAgLTc3LDM5ICs3NywxMSBAQCBzdHJ1Y3QgbXNtX2ZpbGVfcHJp dmF0ZSB7CiB9OwogCiBlbnVtIG1zbV9tZHBfcGxhbmVfcHJvcGVydHkgewotCS8qIGJsb2IgcHJv cGVydGllcywgYWx3YXlzIHB1dCB0aGVzZSBmaXJzdCAqLwotCVBMQU5FX1BST1BfU0NBTEVSX1Yx LAotCVBMQU5FX1BST1BfU0NBTEVSX1YyLAotCVBMQU5FX1BST1BfQ1NDX1YxLAotCVBMQU5FX1BS T1BfSU5GTywKLQlQTEFORV9QUk9QX1NDQUxFUl9MVVRfRUQsCi0JUExBTkVfUFJPUF9TQ0FMRVJf TFVUX0NJUiwKLQlQTEFORV9QUk9QX1NDQUxFUl9MVVRfU0VQLAotCVBMQU5FX1BST1BfU0tJTl9D T0xPUiwKLQlQTEFORV9QUk9QX1NLWV9DT0xPUiwKLQlQTEFORV9QUk9QX0ZPTElBR0VfQ09MT1Is Ci0JUExBTkVfUFJPUF9ST1RfQ0FQU19WMSwKLQogCS8qICMgb2YgYmxvYiBwcm9wZXJ0aWVzICov CiAJUExBTkVfUFJPUF9CTE9CQ09VTlQsCiAKIAkvKiByYW5nZSBwcm9wZXJ0aWVzICovCiAJUExB TkVfUFJPUF9aUE9TID0gUExBTkVfUFJPUF9CTE9CQ09VTlQsCi0JUExBTkVfUFJPUF9BTFBIQSwK LQlQTEFORV9QUk9QX0NPTE9SX0ZJTEwsCi0JUExBTkVfUFJPUF9IX0RFQ0lNQVRFLAotCVBMQU5F X1BST1BfVl9ERUNJTUFURSwKLQlQTEFORV9QUk9QX0hVRV9BREpVU1QsCi0JUExBTkVfUFJPUF9T QVRVUkFUSU9OX0FESlVTVCwKLQlQTEFORV9QUk9QX1ZBTFVFX0FESlVTVCwKLQlQTEFORV9QUk9Q X0NPTlRSQVNUX0FESlVTVCwKLQlQTEFORV9QUk9QX0VYQ0xfUkVDVF9WMSwKLQlQTEFORV9QUk9Q X1BSRUZJTExfU0laRSwKLQlQTEFORV9QUk9QX1BSRUZJTExfVElNRSwKLQotCS8qIGVudW0vYml0 bWFzayBwcm9wZXJ0aWVzICovCi0JUExBTkVfUFJPUF9CTEVORF9PUCwKLQlQTEFORV9QUk9QX1NS Q19DT05GSUcsCiAKIAkvKiB0b3RhbCAjIG9mIHByb3BlcnRpZXMgKi8KIAlQTEFORV9QUk9QX0NP VU5UCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2RwdV9kcm0uaCBiL2luY2x1ZGUvdWFw aS9kcm0vZHB1X2RybS5oCmluZGV4IGRhNzMyNzkuLjkzYWYxZmIgMTAwNjQ0Ci0tLSBhL2luY2x1 ZGUvdWFwaS9kcm0vZHB1X2RybS5oCisrKyBiL2luY2x1ZGUvdWFwaS9kcm0vZHB1X2RybS5oCkBA IC02NiwxOTMgKzY2LDYgQEAKIC8qIERSTSBiaXRtYXNrcyBhcmUgcmVzdHJpY3RlZCB0byAwLi42 MyAqLwogI2RlZmluZSBEUFVfRFJNX0JJVE1BU0tfQ09VTlQgICAgICAgNjQKIAotLyoqCi0gKiBz dHJ1Y3QgZHB1X2RybV9waXhfZXh0X3YxIC0gdmVyc2lvbiAxIG9mIHBpeGVsIGV4dCBzdHJ1Y3R1 cmUKLSAqIEBudW1fZXh0X3B4bHNfbHI6IE51bWJlciBvZiB0b3RhbCBob3Jpem9udGFsIHBpeGVs cwotICogQG51bV9leHRfcHhsc190YjogTnVtYmVyIG9mIHRvdGFsIHZlcnRpY2FsIGxpbmVzCi0g KiBAbGVmdF9mdGNoOiAgICAgICBOdW1iZXIgb2YgZXh0cmEgcGl4ZWxzIHRvIG92ZXJmZXRjaCBm cm9tIGxlZnQKLSAqIEByaWdodF9mdGNoOiAgICAgIE51bWJlciBvZiBleHRyYSBwaXhlbHMgdG8g b3ZlcmZldGNoIGZyb20gcmlnaHQKLSAqIEB0b3BfZnRjaDogICAgICAgIE51bWJlciBvZiBleHRy YSBsaW5lcyB0byBvdmVyZmV0Y2ggZnJvbSB0b3AKLSAqIEBidG1fZnRjaDogICAgICAgIE51bWJl ciBvZiBleHRyYSBsaW5lcyB0byBvdmVyZmV0Y2ggZnJvbSBib3R0b20KLSAqIEBsZWZ0X3JwdDog ICAgICAgIE51bWJlciBvZiBleHRyYSBwaXhlbHMgdG8gcmVwZWF0IGZyb20gbGVmdAotICogQHJp Z2h0X3JwdDogICAgICAgTnVtYmVyIG9mIGV4dHJhIHBpeGVscyB0byByZXBlYXQgZnJvbSByaWdo dAotICogQHRvcF9ycHQ6ICAgICAgICAgTnVtYmVyIG9mIGV4dHJhIGxpbmVzIHRvIHJlcGVhdCBm cm9tIHRvcAotICogQGJ0bV9ycHQ6ICAgICAgICAgTnVtYmVyIG9mIGV4dHJhIGxpbmVzIHRvIHJl cGVhdCBmcm9tIGJvdHRvbQotICovCi1zdHJ1Y3QgZHB1X2RybV9waXhfZXh0X3YxIHsKLQkvKgot CSAqIE51bWJlciBvZiBwaXhlbHMgZXh0IGluIGxlZnQsIHJpZ2h0LCB0b3AgYW5kIGJvdHRvbSBk aXJlY3Rpb24KLQkgKiBmb3IgYWxsIGNvbG9yIGNvbXBvbmVudHMuCi0JICovCi0JaW50MzJfdCBu dW1fZXh0X3B4bHNfbHJbRFBVX01BWF9QTEFORVNdOwotCWludDMyX3QgbnVtX2V4dF9weGxzX3Ri W0RQVV9NQVhfUExBTkVTXTsKLQotCS8qCi0JICogTnVtYmVyIG9mIHBpeGVscyBuZWVkcyB0byBi ZSBvdmVyZmV0Y2hlZCBpbiBsZWZ0LCByaWdodCwgdG9wCi0JICogYW5kIGJvdHRvbSBkaXJlY3Rp b25zIGZyb20gc291cmNlIGltYWdlIGZvciBzY2FsaW5nLgotCSAqLwotCWludDMyX3QgbGVmdF9m dGNoW0RQVV9NQVhfUExBTkVTXTsKLQlpbnQzMl90IHJpZ2h0X2Z0Y2hbRFBVX01BWF9QTEFORVNd OwotCWludDMyX3QgdG9wX2Z0Y2hbRFBVX01BWF9QTEFORVNdOwotCWludDMyX3QgYnRtX2Z0Y2hb RFBVX01BWF9QTEFORVNdOwotCS8qCi0JICogTnVtYmVyIG9mIHBpeGVscyBuZWVkcyB0byBiZSBy ZXBlYXRlZCBpbiBsZWZ0LCByaWdodCwgdG9wIGFuZAotCSAqIGJvdHRvbSBkaXJlY3Rpb25zIGZv ciBzY2FsaW5nLgotCSAqLwotCWludDMyX3QgbGVmdF9ycHRbRFBVX01BWF9QTEFORVNdOwotCWlu dDMyX3QgcmlnaHRfcnB0W0RQVV9NQVhfUExBTkVTXTsKLQlpbnQzMl90IHRvcF9ycHRbRFBVX01B WF9QTEFORVNdOwotCWludDMyX3QgYnRtX3JwdFtEUFVfTUFYX1BMQU5FU107Ci0KLX07Ci0KLS8q KgotICogc3RydWN0IGRwdV9kcm1fc2NhbGVyX3YxIC0gdmVyc2lvbiAxIG9mIHN0cnVjdCBkcHVf ZHJtX3NjYWxlcgotICogQGxyOiAgICAgICAgICAgIFBpeGVsIGV4dGVuc2lvbiBzZXR0aW5ncyBm b3IgbGVmdC9yaWdodAotICogQHRiOiAgICAgICAgICAgIFBpeGVsIGV4dGVuc2lvbiBzZXR0aW5n cyBmb3IgdG9wL2JvdHRvbgotICogQGluaXRfcGhhc2VfeDogIEluaXRpYWwgc2NhbGVyIHBoYXNl IHZhbHVlcyBmb3IgeAotICogQHBoYXNlX3N0ZXBfeDogIFBoYXNlIHN0ZXAgdmFsdWVzIGZvciB4 Ci0gKiBAaW5pdF9waGFzZV95OiAgSW5pdGlhbCBzY2FsZXIgcGhhc2UgdmFsdWVzIGZvciB5Ci0g KiBAcGhhc2Vfc3RlcF95OiAgUGhhc2Ugc3RlcCB2YWx1ZXMgZm9yIHkKLSAqIEBob3J6X2ZpbHRl cjogICBIb3Jpem9udGFsIGZpbHRlciBhcnJheQotICogQHZlcnRfZmlsdGVyOiAgIFZlcnRpY2Fs IGZpbHRlciBhcnJheQotICovCi1zdHJ1Y3QgZHB1X2RybV9zY2FsZXJfdjEgewotCS8qCi0JICog UGl4IGV4dCBzZXR0aW5ncwotCSAqLwotCXN0cnVjdCBkcHVfZHJtX3BpeF9leHRfdjEgcGU7Ci0J LyoKLQkgKiBQaGFzZSBzZXR0aW5ncwotCSAqLwotCWludDMyX3QgaW5pdF9waGFzZV94W0RQVV9N QVhfUExBTkVTXTsKLQlpbnQzMl90IHBoYXNlX3N0ZXBfeFtEUFVfTUFYX1BMQU5FU107Ci0JaW50 MzJfdCBpbml0X3BoYXNlX3lbRFBVX01BWF9QTEFORVNdOwotCWludDMyX3QgcGhhc2Vfc3RlcF95 W0RQVV9NQVhfUExBTkVTXTsKLQotCS8qCi0JICogRmlsdGVyIHR5cGUgdG8gYmUgdXNlZCBmb3Ig c2NhbGluZyBpbiBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbAotCSAqIGRpcmVjdGlvbnMKLQkgKi8K LQl1aW50MzJfdCBob3J6X2ZpbHRlcltEUFVfTUFYX1BMQU5FU107Ci0JdWludDMyX3QgdmVydF9m aWx0ZXJbRFBVX01BWF9QTEFORVNdOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHB1X2RybV9kZV92 MSAtIHZlcnNpb24gMSBvZiBkZXRhaWwgZW5oYW5jZXIgc3RydWN0dXJlCi0gKiBAZW5hYmxlOiAg ICAgICAgIEVuYWJsZXMvZGlzYWJsZXMgZGV0YWlsIGVuaGFuY2VyCi0gKiBAc2hhcnBlbl9sZXZl bDE6IFNoYXJwZW5pbmcgc3RyZW5ndGggZm9yIG5vaXNlCi0gKiBAc2hhcnBlbl9sZXZlbDI6IFNo YXJwZW5pbmcgc3RyZW5ndGggZm9yIGNvbnRleHQKLSAqIEBjbGlwOiAgICAgICAgICAgQ2xpcCBj b2VmZmljaWVudAotICogQGxpbWl0OiAgICAgICAgICBEZXRhaWwgZW5oYW5jZXIgbGltaXQgZmFj dG9yCi0gKiBAdGhyX3F1aWV0OiAgICAgIFF1aXRlIHpvbmUgdGhyZXNob2xkCi0gKiBAdGhyX2Rp ZW91dDogICAgIERpZS1vdXQgem9uZSB0aHJlc2hvbGQKLSAqIEB0aHJfbG93OiAgICAgICAgTGlu ZWFyIHpvbmUgbGVmdCB0aHJlc2hvbGQKLSAqIEB0aHJfaGlnaDogICAgICAgTGluZWFyIHpvbmUg cmlnaHQgdGhyZXNob2xkCi0gKiBAcHJlY19zaGlmdDogICAgIERldGFpbCBlbmhhbmNlciBwcmVj aXNpb24KLSAqIEBhZGp1c3RfYTogICAgICAgTWFwcGluZyBjdXJ2ZXMgQSBjb2VmZmljaWVudHMK LSAqIEBhZGp1c3RfYjogICAgICAgTWFwcGluZyBjdXJ2ZXMgQiBjb2VmZmljaWVudHMKLSAqIEBh ZGp1c3RfYzogICAgICAgTWFwcGluZyBjdXJ2ZXMgQyBjb2VmZmljaWVudHMKLSAqLwotc3RydWN0 IGRwdV9kcm1fZGVfdjEgewotCXVpbnQzMl90IGVuYWJsZTsKLQlpbnQxNl90IHNoYXJwZW5fbGV2 ZWwxOwotCWludDE2X3Qgc2hhcnBlbl9sZXZlbDI7Ci0JdWludDE2X3QgY2xpcDsKLQl1aW50MTZf dCBsaW1pdDsKLQl1aW50MTZfdCB0aHJfcXVpZXQ7Ci0JdWludDE2X3QgdGhyX2RpZW91dDsKLQl1 aW50MTZfdCB0aHJfbG93OwotCXVpbnQxNl90IHRocl9oaWdoOwotCXVpbnQxNl90IHByZWNfc2hp ZnQ7Ci0JaW50MTZfdCBhZGp1c3RfYVtEUFVfTUFYX0RFX0NVUlZFU107Ci0JaW50MTZfdCBhZGp1 c3RfYltEUFVfTUFYX0RFX0NVUlZFU107Ci0JaW50MTZfdCBhZGp1c3RfY1tEUFVfTUFYX0RFX0NV UlZFU107Ci19OwotCi0vKioKLSAqIHN0cnVjdCBkcHVfZHJtX3NjYWxlcl92MiAtIHZlcnNpb24g MiBvZiBzdHJ1Y3QgZHB1X2RybV9zY2FsZXIKLSAqIEBlbmFibGU6ICAgICAgICAgICAgU2NhbGVy IGVuYWJsZQotICogQGRpcl9lbjogICAgICAgICAgICBEZXRhaWwgZW5oYW5jZXIgZW5hYmxlCi0g KiBAcGU6ICAgICAgICAgICAgICAgIFBpeGVsIGV4dGVuc2lvbiBzZXR0aW5ncwotICogQGhvcnpf ZGVjaW1hdGU6ICAgICBIb3Jpem9udGFsIGRlY2ltYXRpb24gZmFjdG9yCi0gKiBAdmVydF9kZWNp bWF0ZTogICAgIFZlcnRpY2FsIGRlY2ltYXRpb24gZmFjdG9yCi0gKiBAaW5pdF9waGFzZV94OiAg ICAgIEluaXRpYWwgc2NhbGVyIHBoYXNlIHZhbHVlcyBmb3IgeAotICogQHBoYXNlX3N0ZXBfeDog ICAgICBQaGFzZSBzdGVwIHZhbHVlcyBmb3IgeAotICogQGluaXRfcGhhc2VfeTogICAgICBJbml0 aWFsIHNjYWxlciBwaGFzZSB2YWx1ZXMgZm9yIHkKLSAqIEBwaGFzZV9zdGVwX3k6ICAgICAgUGhh c2Ugc3RlcCB2YWx1ZXMgZm9yIHkKLSAqIEBwcmVsb2FkX3g6ICAgICAgICAgSG9yaXpvbnRhbCBw cmVsb2FkIHZhbHVlCi0gKiBAcHJlbG9hZF95OiAgICAgICAgIFZlcnRpY2FsIHByZWxvYWQgdmFs dWUKLSAqIEBzcmNfd2lkdGg6ICAgICAgICAgU291cmNlIHdpZHRoCi0gKiBAc3JjX2hlaWdodDog ICAgICAgIFNvdXJjZSBoZWlnaHQKLSAqIEBkc3Rfd2lkdGg6ICAgICAgICAgRGVzdGluYXRpb24g d2lkdGgKLSAqIEBkc3RfaGVpZ2h0OiAgICAgICAgRGVzdGluYXRpb24gaGVpZ2h0Ci0gKiBAeV9y Z2JfZmlsdGVyX2NmZzogIFkvUkdCIHBsYW5lIGZpbHRlciBjb25maWd1cmF0aW9uCi0gKiBAdXZf ZmlsdGVyX2NmZzogICAgIFVWIHBsYW5lIGZpbHRlciBjb25maWd1cmF0aW9uCi0gKiBAYWxwaGFf ZmlsdGVyX2NmZzogIEFscGhhIGZpbHRlciBjb25maWd1cmF0aW9uCi0gKiBAYmxlbmRfY2ZnOiAg ICAgICAgIFNlbGVjdGlvbiBvZiBibGVuZCBjb2VmZmljaWVudHMKLSAqIEBsdXRfZmxhZzogICAg ICAgICAgTFVUIGNvbmZpZ3VyYXRpb24gZmxhZ3MKLSAqIEBkaXJfbHV0X2lkeDogICAgICAgMmQg NHg0IExVVCBpbmRleAotICogQHlfcmdiX2Npcl9sdXRfaWR4OiBZL1JHQiBjaXJjdWxhciBMVVQg aW5kZXgKLSAqIEB1dl9jaXJfbHV0X2lkeDogICAgVVYgY2lyY3VsYXIgTFVUIGluZGV4Ci0gKiBA eV9yZ2Jfc2VwX2x1dF9pZHg6IFkvUkdCIHNlcGFyYWJsZSBMVVQgaW5kZXgKLSAqIEB1dl9zZXBf bHV0X2lkeDogICAgVVYgc2VwYXJhYmxlIExVVCBpbmRleAotICogQGRlOiAgICAgICAgICAgICAg ICBEZXRhaWwgZW5oYW5jZXIgc2V0dGluZ3MKLSAqLwotc3RydWN0IGRwdV9kcm1fc2NhbGVyX3Yy IHsKLQkvKgotCSAqIEdlbmVyYWwgZGVmaW5pdGlvbnMKLQkgKi8KLQl1aW50MzJfdCBlbmFibGU7 Ci0JdWludDMyX3QgZGlyX2VuOwotCi0JLyoKLQkgKiBQaXggZXh0IHNldHRpbmdzCi0JICovCi0J c3RydWN0IGRwdV9kcm1fcGl4X2V4dF92MSBwZTsKLQotCS8qCi0JICogRGVjaW1hdGlvbiBzZXR0 aW5ncwotCSAqLwotCXVpbnQzMl90IGhvcnpfZGVjaW1hdGU7Ci0JdWludDMyX3QgdmVydF9kZWNp bWF0ZTsKLQotCS8qCi0JICogUGhhc2Ugc2V0dGluZ3MKLQkgKi8KLQlpbnQzMl90IGluaXRfcGhh c2VfeFtEUFVfTUFYX1BMQU5FU107Ci0JaW50MzJfdCBwaGFzZV9zdGVwX3hbRFBVX01BWF9QTEFO RVNdOwotCWludDMyX3QgaW5pdF9waGFzZV95W0RQVV9NQVhfUExBTkVTXTsKLQlpbnQzMl90IHBo YXNlX3N0ZXBfeVtEUFVfTUFYX1BMQU5FU107Ci0KLQl1aW50MzJfdCBwcmVsb2FkX3hbRFBVX01B WF9QTEFORVNdOwotCXVpbnQzMl90IHByZWxvYWRfeVtEUFVfTUFYX1BMQU5FU107Ci0JdWludDMy X3Qgc3JjX3dpZHRoW0RQVV9NQVhfUExBTkVTXTsKLQl1aW50MzJfdCBzcmNfaGVpZ2h0W0RQVV9N QVhfUExBTkVTXTsKLQotCXVpbnQzMl90IGRzdF93aWR0aDsKLQl1aW50MzJfdCBkc3RfaGVpZ2h0 OwotCi0JdWludDMyX3QgeV9yZ2JfZmlsdGVyX2NmZzsKLQl1aW50MzJfdCB1dl9maWx0ZXJfY2Zn OwotCXVpbnQzMl90IGFscGhhX2ZpbHRlcl9jZmc7Ci0JdWludDMyX3QgYmxlbmRfY2ZnOwotCi0J dWludDMyX3QgbHV0X2ZsYWc7Ci0JdWludDMyX3QgZGlyX2x1dF9pZHg7Ci0KLQkvKiBmb3IgWShS R0IpIGFuZCBVViBwbGFuZXMqLwotCXVpbnQzMl90IHlfcmdiX2Npcl9sdXRfaWR4OwotCXVpbnQz Ml90IHV2X2Npcl9sdXRfaWR4OwotCXVpbnQzMl90IHlfcmdiX3NlcF9sdXRfaWR4OwotCXVpbnQz Ml90IHV2X3NlcF9sdXRfaWR4OwotCi0JLyoKLQkgKiBEZXRhaWwgZW5oYW5jZXIgc2V0dGluZ3MK LQkgKi8KLQlzdHJ1Y3QgZHB1X2RybV9kZV92MSBkZTsKLX07Ci0KIC8qIE51bWJlciBvZiBkZXN0 IHNjYWxlcnMgc3VwcG9ydGVkICovCiAjZGVmaW5lIERQVV9NQVhfRFNfQ09VTlQgMgogCmRpZmYg LS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL21zbV9kcm0uaCBiL2luY2x1ZGUvdWFwaS9kcm0vbXNt X2RybS5oCmluZGV4IDQwNGYyMDEuLjYwYjFhMzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9k cm0vbXNtX2RybS5oCisrKyBiL2luY2x1ZGUvdWFwaS9kcm0vbXNtX2RybS5oCkBAIC0yNiw3ICsy Niw2IEBACiAjZGVmaW5lIF9fTVNNX0RSTV9IX18KIAogI2luY2x1ZGUgImRybS5oIgotI2luY2x1 ZGUgImRwdV9kcm0uaCIKIAogI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCiBleHRlcm4gIkMiIHsK LS0gClRoZSBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBpcyBhIG1lbWJlciBvZiB0 aGUgQ29kZSBBdXJvcmEgRm9ydW0sCmEgTGludXggRm91bmRhdGlvbiBDb2xsYWJvcmF0aXZlIFBy b2plY3QKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkZy ZWVkcmVubyBtYWlsaW5nIGxpc3QKRnJlZWRyZW5vQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZyZWVkcmVubwo=