From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dongwon Kim Subject: [RFC PATCH 60/60] hyper_dmabuf: move hyper_dmabuf to under drivers/dma-buf/ Date: Tue, 19 Dec 2017 11:30:16 -0800 Message-ID: <1513711816-2618-60-git-send-email-dongwon.kim__2611.00433203882$1513712213$gmane$org@intel.com> References: <1513711816-2618-1-git-send-email-dongwon.kim@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eRNhs-0007EQ-8D for xen-devel@lists.xenproject.org; Tue, 19 Dec 2017 19:37:40 +0000 In-Reply-To: <1513711816-2618-1-git-send-email-dongwon.kim@intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: linux-kernel@vger.kernel.org Cc: xen-devel@lists.xenproject.org, mateuszx.potrola@intel.com, dri-devel@lists.freedesktop.org, dongwon.kim@intel.com List-Id: xen-devel@lists.xenproject.org VGhpcyBkcml2ZXIncyB1bHRpbWF0ZSBnb2FsIGlzIHRvIGV4cGFuZCB0aGUgYm91bmRhcnkgb2Yg ZGF0YQpzaGFyaW5nIHZpYSBETUEtQlVGIHRvIGFjcm9zcyBkaWZmZXJlbnQgT1NlcyBydW5uaW5n IG9uIHRoZSBzYW1lCmhhcmR3YXJlIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBIeXBlcnZpc29yIGlzIGN1 cnJlbnRseSB1c2VkIGZvciB0aGUKT1MgdmlydHVhbGl6YXRpb24uIFNvIGl0IG1ha2VzIG1vcmUg c2Vuc2UgdG8gaGF2ZSBpdHMgaW1wbGVtZW50YXRpb24KdW5kZXIgZHJpdmVycy9kbWEtYnVmLgoK U2lnbmVkLW9mZi1ieTogRG9uZ3dvbiBLaW0gPGRvbmd3b24ua2ltQGludGVsLmNvbT4KLS0tCiBk cml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL0tjb25maWcgICAgICAgICAgICAgICB8ICA0MiAr CiBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL01ha2VmaWxlICAgICAgICAgICAgICB8ICA0 OSArKwogZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfZHJ2LmMgICAg fCA0MDggKysrKysrKysrCiBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1 Zl9kcnYuaCAgICB8IDExOCArKysKIGRyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJf ZG1hYnVmX2V2ZW50LmMgIHwgMTIyICsrKwogZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9o eXBlcl9kbWFidWZfZXZlbnQuaCAgfCAgMzggKwogZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1 Zi9oeXBlcl9kbWFidWZfaWQuYyAgICAgfCAxMzMgKysrCiBkcml2ZXJzL2RtYS1idWYvaHlwZXJf ZG1hYnVmL2h5cGVyX2RtYWJ1Zl9pZC5oICAgICB8ICA1MSArKwogZHJpdmVycy9kbWEtYnVmL2h5 cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfaW9jdGwuYyAgfCA3ODYgKysrKysrKysrKysrKysrKysK IGRyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2lvY3RsLmggIHwgIDUw ICsrCiBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9saXN0LmMgICB8 IDI5MyArKysrKysrCiBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9s aXN0LmggICB8ICA3MSArKwogZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFi dWZfbXNnLmMgICAgfCA0MTQgKysrKysrKysrCiBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVm L2h5cGVyX2RtYWJ1Zl9tc2cuaCAgICB8ICA4NyArKwogZHJpdmVycy9kbWEtYnVmL2h5cGVyX2Rt YWJ1Zi9oeXBlcl9kbWFidWZfb3BzLmMgICAgfCA0MTMgKysrKysrKysrCiBkcml2ZXJzL2RtYS1i dWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9vcHMuaCAgICB8ICAzMiArCiBkcml2ZXJzL2Rt YS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9xdWVyeS5jICB8IDE3MiArKysrCiBkcml2 ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9xdWVyeS5oICB8ICAxMCArCiAu Li4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9yZW1vdGVfc3luYy5jICAgICAgICB8IDMyMiAr KysrKysrCiAuLi4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9yZW1vdGVfc3luYy5oICAgICAg ICB8ICAzMCArCiAuLi4vZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX3NnbF9wcm9j LmMgICB8IDI1NSArKysrKysKIC4uLi9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZf c2dsX3Byb2MuaCAgIHwgIDQxICsKIGRyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJf ZG1hYnVmX3N0cnVjdC5oIHwgMTQxICsrKwogLi4uL3hlbi1iYWNrZW5kL2h5cGVyX2RtYWJ1Zl94 ZW5fY29tbS5jICAgICAgICAgICAgfCA5NDEgKysrKysrKysrKysrKysrKysrKysrCiAuLi4veGVu LWJhY2tlbmQvaHlwZXJfZG1hYnVmX3hlbl9jb21tLmggICAgICAgICAgICB8ICA3OCArKwogLi4u L3hlbi1iYWNrZW5kL2h5cGVyX2RtYWJ1Zl94ZW5fY29tbV9saXN0LmMgICAgICAgfCAxNTggKysr KwogLi4uL3hlbi1iYWNrZW5kL2h5cGVyX2RtYWJ1Zl94ZW5fY29tbV9saXN0LmggICAgICAgfCAg NjcgKysKIC4uLi94ZW4tYmFja2VuZC9oeXBlcl9kbWFidWZfeGVuX2Rydi5jICAgICAgICAgICAg IHwgIDQ2ICsKIC4uLi94ZW4tYmFja2VuZC9oeXBlcl9kbWFidWZfeGVuX2Rydi5oICAgICAgICAg ICAgIHwgIDUzICsrCiAuLi4veGVuLWJhY2tlbmQvaHlwZXJfZG1hYnVmX3hlbl9zaG0uYyAgICAg ICAgICAgICB8IDUyNSArKysrKysrKysrKysKIC4uLi94ZW4tYmFja2VuZC9oeXBlcl9kbWFidWZf eGVuX3NobS5oICAgICAgICAgICAgIHwgIDQ2ICsKIGRyaXZlcnMveGVuL0tjb25maWcgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICstCiBkcml2ZXJzL3hlbi9NYWtlZmlsZSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogZHJpdmVycy94ZW4vaHlwZXJf ZG1hYnVmL0tjb25maWcgICAgICAgICAgICAgICAgICAgfCAgNDIgLQogZHJpdmVycy94ZW4vaHlw ZXJfZG1hYnVmL01ha2VmaWxlICAgICAgICAgICAgICAgICAgfCAgNDkgLS0KIGRyaXZlcnMveGVu L2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfZHJ2LmMgICAgICAgIHwgNDA4IC0tLS0tLS0tLQog ZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9kcnYuaCAgICAgICAgfCAxMTgg LS0tCiBkcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2V2ZW50LmMgICAgICB8 IDEyMiAtLS0KIGRyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfZXZlbnQuaCAg ICAgIHwgIDM4IC0KIGRyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfaWQuYyAg ICAgICAgIHwgMTMzIC0tLQogZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9p ZC5oICAgICAgICAgfCAgNTEgLS0KIGRyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFi dWZfaW9jdGwuYyAgICAgIHwgNzg2IC0tLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL3hlbi9oeXBl cl9kbWFidWYvaHlwZXJfZG1hYnVmX2lvY3RsLmggICAgICB8ICA1MCAtLQogZHJpdmVycy94ZW4v aHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9saXN0LmMgICAgICAgfCAyOTMgLS0tLS0tLQogZHJp dmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9saXN0LmggICAgICAgfCAgNzEgLS0K IGRyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfbXNnLmMgICAgICAgIHwgNDE0 IC0tLS0tLS0tLQogZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9tc2cuaCAg ICAgICAgfCAgODcgLS0KIGRyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfb3Bz LmMgICAgICAgIHwgNDEzIC0tLS0tLS0tLQogZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVy X2RtYWJ1Zl9vcHMuaCAgICAgICAgfCAgMzIgLQogZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5 cGVyX2RtYWJ1Zl9xdWVyeS5jICAgICAgfCAxNzIgLS0tLQogZHJpdmVycy94ZW4vaHlwZXJfZG1h YnVmL2h5cGVyX2RtYWJ1Zl9xdWVyeS5oICAgICAgfCAgMTAgLQogLi4uL3hlbi9oeXBlcl9kbWFi dWYvaHlwZXJfZG1hYnVmX3JlbW90ZV9zeW5jLmMgICAgfCAzMjIgLS0tLS0tLQogLi4uL3hlbi9o eXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX3JlbW90ZV9zeW5jLmggICAgfCAgMzAgLQogZHJpdmVy cy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9zZ2xfcHJvYy5jICAgfCAyNTUgLS0tLS0t CiBkcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX3NnbF9wcm9jLmggICB8ICA0 MSAtCiBkcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX3N0cnVjdC5oICAgICB8 IDE0MSAtLS0KIC4uLi94ZW4vaHlwZXJfZG1hYnVmL3hlbi9oeXBlcl9kbWFidWZfeGVuX2NvbW0u YyAgIHwgOTQxIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLi4uL3hlbi9oeXBlcl9kbWFidWYveGVu L2h5cGVyX2RtYWJ1Zl94ZW5fY29tbS5oICAgfCAgNzggLS0KIC4uLi9oeXBlcl9kbWFidWYveGVu L2h5cGVyX2RtYWJ1Zl94ZW5fY29tbV9saXN0LmMgIHwgMTU4IC0tLS0KIC4uLi9oeXBlcl9kbWFi dWYveGVuL2h5cGVyX2RtYWJ1Zl94ZW5fY29tbV9saXN0LmggIHwgIDY3IC0tCiAuLi4veGVuL2h5 cGVyX2RtYWJ1Zi94ZW4vaHlwZXJfZG1hYnVmX3hlbl9kcnYuYyAgICB8ICA0NiAtCiAuLi4veGVu L2h5cGVyX2RtYWJ1Zi94ZW4vaHlwZXJfZG1hYnVmX3hlbl9kcnYuaCAgICB8ICA1MyAtLQogLi4u L3hlbi9oeXBlcl9kbWFidWYveGVuL2h5cGVyX2RtYWJ1Zl94ZW5fc2htLmMgICAgfCA1MjUgLS0t LS0tLS0tLS0tCiAuLi4veGVuL2h5cGVyX2RtYWJ1Zi94ZW4vaHlwZXJfZG1hYnVmX3hlbl9zaG0u aCAgICB8ICA0NiAtCiA2NCBmaWxlcyBjaGFuZ2VkLCA1OTk0IGluc2VydGlvbnMoKyksIDU5OTQg ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEtYnVmL2h5cGVyX2Rt YWJ1Zi9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEtYnVmL2h5cGVyX2Rt YWJ1Zi9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9k bWFidWYvaHlwZXJfZG1hYnVmX2Rydi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEt YnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfZHJ2LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9ldmVudC5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfZXZl bnQuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlw ZXJfZG1hYnVmX2lkLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS1idWYvaHlwZXJf ZG1hYnVmL2h5cGVyX2RtYWJ1Zl9pZC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEt YnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfaW9jdGwuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2lvY3RsLmgKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9s aXN0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5 cGVyX2RtYWJ1Zl9saXN0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS1idWYvaHlw ZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9tc2cuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv ZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX21zZy5oCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfb3BzLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9v cHMuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlw ZXJfZG1hYnVmX3F1ZXJ5LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS1idWYvaHlw ZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9xdWVyeS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfcmVtb3RlX3N5bmMuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX3Jl bW90ZV9zeW5jLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1h YnVmL2h5cGVyX2RtYWJ1Zl9zZ2xfcHJvYy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9k bWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfc2dsX3Byb2MuaAogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX3N0cnVjdC5o CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi94ZW4tYmFj a2VuZC9oeXBlcl9kbWFidWZfeGVuX2NvbW0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv ZG1hLWJ1Zi9oeXBlcl9kbWFidWYveGVuLWJhY2tlbmQvaHlwZXJfZG1hYnVmX3hlbl9jb21tLmgK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL3hlbi1iYWNr ZW5kL2h5cGVyX2RtYWJ1Zl94ZW5fY29tbV9saXN0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL3hlbi1iYWNrZW5kL2h5cGVyX2RtYWJ1Zl94ZW5fY29t bV9saXN0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVm L3hlbi1iYWNrZW5kL2h5cGVyX2RtYWJ1Zl94ZW5fZHJ2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL3hlbi1iYWNrZW5kL2h5cGVyX2RtYWJ1Zl94ZW5f ZHJ2LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL3hl bi1iYWNrZW5kL2h5cGVyX2RtYWJ1Zl94ZW5fc2htLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL3hlbi1iYWNrZW5kL2h5cGVyX2RtYWJ1Zl94ZW5fc2ht LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvS2NvbmZpZwog ZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9NYWtlZmlsZQogZGVs ZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfZHJ2 LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlwZXJfZG1h YnVmX2Rydi5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5 cGVyX2RtYWJ1Zl9ldmVudC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy94ZW4vaHlwZXJf ZG1hYnVmL2h5cGVyX2RtYWJ1Zl9ldmVudC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy94 ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9pZC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJp dmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9pZC5oCiBkZWxldGUgbW9kZSAxMDA2 NDQgZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9pb2N0bC5jCiBkZWxldGUg bW9kZSAxMDA2NDQgZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9pb2N0bC5o CiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1 Zl9saXN0LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlw ZXJfZG1hYnVmX2xpc3QuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMveGVuL2h5cGVyX2Rt YWJ1Zi9oeXBlcl9kbWFidWZfbXNnLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3hlbi9o eXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX21zZy5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVy cy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9vcHMuYwogZGVsZXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfb3BzLmgKIGRlbGV0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX3F1ZXJ5LmMKIGRl bGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX3F1 ZXJ5LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlwZXJf ZG1hYnVmX3JlbW90ZV9zeW5jLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3hlbi9oeXBl cl9kbWFidWYvaHlwZXJfZG1hYnVmX3JlbW90ZV9zeW5jLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX3NnbF9wcm9jLmMKIGRlbGV0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX3NnbF9wcm9j LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlwZXJfZG1h YnVmX3N0cnVjdC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVm L3hlbi9oeXBlcl9kbWFidWZfeGVuX2NvbW0uYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv eGVuL2h5cGVyX2RtYWJ1Zi94ZW4vaHlwZXJfZG1hYnVmX3hlbl9jb21tLmgKIGRlbGV0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYveGVuL2h5cGVyX2RtYWJ1Zl94ZW5fY29t bV9saXN0LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYveGVu L2h5cGVyX2RtYWJ1Zl94ZW5fY29tbV9saXN0LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L3hlbi9oeXBlcl9kbWFidWYveGVuL2h5cGVyX2RtYWJ1Zl94ZW5fZHJ2LmMKIGRlbGV0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYveGVuL2h5cGVyX2RtYWJ1Zl94ZW5fZHJ2 LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYveGVuL2h5cGVy X2RtYWJ1Zl94ZW5fc2htLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3hlbi9oeXBlcl9k bWFidWYveGVuL2h5cGVyX2RtYWJ1Zl94ZW5fc2htLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Rt YS1idWYvaHlwZXJfZG1hYnVmL0tjb25maWcgYi9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVm L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVmY2Q0NAotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvS2NvbmZpZwpAQCAt MCwwICsxLDQyIEBACittZW51ICJoeXBlcl9kbWFidWYgb3B0aW9ucyIKKworY29uZmlnIEhZUEVS X0RNQUJVRgorCXRyaXN0YXRlICJFbmFibGVzIGh5cGVyIGRtYWJ1ZiBkcml2ZXIiCisJZGVmYXVs dCB5CisKK2NvbmZpZyBIWVBFUl9ETUFCVUZfWEVOCisJYm9vbCAiQ29uZmlndXJlIGh5cGVyX2Rt YWJ1ZiBmb3IgWEVOIGh5cGVydmlzb3IiCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBIWVBFUl9E TUFCVUYKKwloZWxwCisJICBDb25maWd1cmluZyBoeXBlcl9kbWFidWYgZHJpdmVyIGZvciBYRU4g aHlwZXJ2aXNvcgorCitjb25maWcgSFlQRVJfRE1BQlVGX1NZU0ZTCisJYm9vbCAiRW5hYmxlIHN5 c2ZzIGluZm9ybWF0aW9uIGFib3V0IGh5cGVyIERNQSBidWZmZXJzIgorCWRlZmF1bHQgeQorCWRl cGVuZHMgb24gSFlQRVJfRE1BQlVGCisJaGVscAorCSAgRXhwb3NlIGluZm9ybWF0aW9uIGFib3V0 IGltcG9ydGVkIGFuZCBleHBvcnRlZCBidWZmZXJzIHVzaW5nCisJICBoeXBlcl9kbWFidWYgZHJp dmVyCisKK2NvbmZpZyBIWVBFUl9ETUFCVUZfRVZFTlRfR0VOCisJYm9vbCAiRW5hYmxlIGV2ZW50 LWdlbmVyYXRpb24gYW5kIHBvbGxpbmcgb3BlcmF0aW9uIgorCWRlZmF1bHQgbgorCWRlcGVuZHMg b24gSFlQRVJfRE1BQlVGCisJaGVscAorCSAgV2l0aCB0aGlzIGNvbmZpZyBlbmFibGVkLCBoeXBl cl9kbWFidWYgZHJpdmVyIG9uIHRoZSBpbXBvcnRlciBzaWRlCisJICBnZW5lcmF0ZXMgZXZlbnRz IGFuZCBxdWV1ZSB0aG9zZSB1cCBpbiB0aGUgZXZlbnQgbGlzdCB3aGVuZXZlciBhIG5ldworCSAg c2hhcmVkIERNQS1CVUYgaXMgYXZhaWxhYmxlLiBFdmVudHMgaW4gdGhlIGxpc3QgY2FuIGJlIHJl dHJpZXZlZCBieQorCSAgcmVhZCBvcGVyYXRpb24uCisKK2NvbmZpZyBIWVBFUl9ETUFCVUZfWEVO X0FVVE9fUlhfQ0hfQURECisJYm9vbCAiRW5hYmxlIGF1dG9tYXRpYyByeC1jaCBhZGQgd2l0aCAx MCBzZWNzIGludGVydmFsIgorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gSFlQRVJfRE1BQlVGICYm IEhZUEVSX0RNQUJVRl9YRU4KKwloZWxwCisJICBJZiBlbmFibGVkLCBkcml2ZXIgcmVhZHMgYSBu b2RlIGluIHhlbnN0b3JlIGV2ZXJ5IDEwIHNlY29uZHMKKwkgIHRvIGNoZWNrIHdoZXRoZXIgdGhl cmUgaXMgYW55IHR4IGNvbW0gY2ggY29uZmlndXJlZCBieSBhbm90aGVyCisJICBkb21haW4gdGhl biBpbml0aWFsaXplIG1hdGNoZWQgcnggY29tbSBjaCBhdXRvbWF0aWNhbGx5IGZvciBhbnkKKwkg IGV4aXN0aW5nIHR4IGNvbW0gY2hzLgorCitlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Rt YS1idWYvaHlwZXJfZG1hYnVmL01ha2VmaWxlIGIvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1 Zi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2U4ZTY5Ci0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9NYWtlZmlsZQpA QCAtMCwwICsxLDQ5IEBACitUQVJHRVRfTU9EVUxFOj1oeXBlcl9kbWFidWYKKworUExBVEZPUk06 PVhFTgorCisjIElmIHdlIHJ1bm5pbmcgYnkga2VybmVsIGJ1aWxkaW5nIHN5c3RlbQoraWZuZXEg KCQoS0VSTkVMUkVMRUFTRSksKQorCSQoVEFSR0VUX01PRFVMRSktb2JqcyA6PSBoeXBlcl9kbWFi dWZfZHJ2Lm8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHlwZXJfZG1hYnVm X2lvY3RsLm8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHlwZXJfZG1hYnVm X2xpc3QubyBcCisJCQkJIGh5cGVyX2RtYWJ1Zl9zZ2xfcHJvYy5vIFwKKwkJCQkgaHlwZXJfZG1h YnVmX29wcy5vIFwKKwkJCQkgaHlwZXJfZG1hYnVmX21zZy5vIFwKKwkJCQkgaHlwZXJfZG1hYnVm X2lkLm8gXAorCQkJCSBoeXBlcl9kbWFidWZfcmVtb3RlX3N5bmMubyBcCisJCQkJIGh5cGVyX2Rt YWJ1Zl9xdWVyeS5vIFwKKworaWZlcSAoJChDT05GSUdfSFlQRVJfRE1BQlVGX0VWRU5UX0dFTiks IHkpCisJJChUQVJHRVRfTU9EVUxFKS1vYmpzICs9IGh5cGVyX2RtYWJ1Zl9ldmVudC5vCitlbmRp ZgorCitpZmVxICgkKENPTkZJR19IWVBFUl9ETUFCVUZfWEVOKSwgeSkKKwkkKFRBUkdFVF9NT0RV TEUpLW9ianMgKz0geGVuLWJhY2tlbmQvaHlwZXJfZG1hYnVmX3hlbl9jb21tLm8gXAorCQkJCSB4 ZW4tYmFja2VuZC9oeXBlcl9kbWFidWZfeGVuX2NvbW1fbGlzdC5vIFwKKwkJCQkgeGVuLWJhY2tl bmQvaHlwZXJfZG1hYnVmX3hlbl9zaG0ubyBcCisJCQkJIHhlbi1iYWNrZW5kL2h5cGVyX2RtYWJ1 Zl94ZW5fZHJ2Lm8KK2VuZGlmCisKK29iai0kKENPTkZJR19IWVBFUl9ETUFCVUYpIDo9ICQoVEFS R0VUX01PRFVMRSkubworCisjIElmIHdlIGFyZSBydW5uaW5nIHdpdGhvdXQga2VybmVsIGJ1aWxk IHN5c3RlbQorZWxzZQorQlVJTERTWVNURU1fRElSPz0uLi8uLi8uLi8KK1BXRDo9JChzaGVsbCBw d2QpCisKK2FsbCA6CisjIHJ1biBrZXJuZWwgYnVpbGQgc3lzdGVtIHRvIG1ha2UgbW9kdWxlCisk KE1BS0UpIC1DICQoQlVJTERTWVNURU1fRElSKSBNPSQoUFdEKSBtb2R1bGVzCisKK2NsZWFuOgor IyBydW4ga2VybmVsIGJ1aWxkIHN5c3RlbSB0byBjbGVhbnVwIGluIGN1cnJlbnQgZGlyZWN0b3J5 CiskKE1BS0UpIC1DICQoQlVJTERTWVNURU1fRElSKSBNPSQoUFdEKSBjbGVhbgorCitsb2FkOgor CWluc21vZCAuLyQoVEFSR0VUX01PRFVMRSkua28KKwordW5sb2FkOgorCXJtbW9kIC4vJChUQVJH RVRfTU9EVUxFKS5rbworCitlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2h5cGVy X2RtYWJ1Zi9oeXBlcl9kbWFidWZfZHJ2LmMgYi9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVm L2h5cGVyX2RtYWJ1Zl9kcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40 OThiMDZjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9o eXBlcl9kbWFidWZfZHJ2LmMKQEAgLTAsMCArMSw0MDggQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkg MjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9m IHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJT b2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNv cHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0 byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICog cGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs IHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBS T1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IK KyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug QU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBP UiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBP VEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9S VCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9O IFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRI RSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgRG9uZ3dvbiBLaW0gPGRvbmd3b24u a2ltQGludGVsLmNvbT4KKyAqICAgIE1hdGV1c3ogUG9scm9sYSA8bWF0ZXVzengucG90cm9sYUBp bnRlbC5jb20+CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8 bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUg PGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxs aW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGlu dXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4KKyNpbmNsdWRlICJoeXBlcl9k bWFidWZfZHJ2LmgiCisjaW5jbHVkZSAiaHlwZXJfZG1hYnVmX2lvY3RsLmgiCisjaW5jbHVkZSAi aHlwZXJfZG1hYnVmX2xpc3QuaCIKKyNpbmNsdWRlICJoeXBlcl9kbWFidWZfaWQuaCIKKyNpbmNs dWRlICJoeXBlcl9kbWFidWZfZXZlbnQuaCIKKworI2lmZGVmIENPTkZJR19IWVBFUl9ETUFCVUZf WEVOCisjaW5jbHVkZSAieGVuLWJhY2tlbmQvaHlwZXJfZG1hYnVmX3hlbl9kcnYuaCIKKyNlbmRp ZgorCitNT0RVTEVfTElDRU5TRSgiR1BMIGFuZCBhZGRpdGlvbmFsIHJpZ2h0cyIpOworTU9EVUxF X0FVVEhPUigiSW50ZWwgQ29ycG9yYXRpb24iKTsKKworc3RydWN0IGh5cGVyX2RtYWJ1Zl9wcml2 YXRlICpoeV9kcnZfcHJpdjsKKworc3RhdGljIHZvaWQgZm9yY2VfZnJlZShzdHJ1Y3QgZXhwb3J0 ZWRfc2d0X2luZm8gKmV4cG9ydGVkLAorCQkgICAgICAgdm9pZCAqYXR0cikKK3sKKwlzdHJ1Y3Qg aW9jdGxfaHlwZXJfZG1hYnVmX3VuZXhwb3J0IHVuZXhwb3J0X2F0dHI7CisJc3RydWN0IGZpbGUg KmZpbHAgPSAoc3RydWN0IGZpbGUgKilhdHRyOworCisJaWYgKCFmaWxwIHx8ICFleHBvcnRlZCkK KwkJcmV0dXJuOworCisJaWYgKGV4cG9ydGVkLT5maWxwID09IGZpbHApIHsKKwkJZGV2X2RiZyho eV9kcnZfcHJpdi0+ZGV2LAorCQkJIkZvcmNlZnVsbHkgcmVsZWFzaW5nIGJ1ZmZlciB7aWQ6JWQg a2V5OiVkICVkICVkfVxuIiwKKwkJCSBleHBvcnRlZC0+aGlkLmlkLCBleHBvcnRlZC0+aGlkLnJu Z19rZXlbMF0sCisJCQkgZXhwb3J0ZWQtPmhpZC5ybmdfa2V5WzFdLCBleHBvcnRlZC0+aGlkLnJu Z19rZXlbMl0pOworCisJCXVuZXhwb3J0X2F0dHIuaGlkID0gZXhwb3J0ZWQtPmhpZDsKKwkJdW5l eHBvcnRfYXR0ci5kZWxheV9tcyA9IDA7CisKKwkJaHlwZXJfZG1hYnVmX3VuZXhwb3J0X2lvY3Rs KGZpbHAsICZ1bmV4cG9ydF9hdHRyKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaHlwZXJfZG1hYnVm X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJaW50IHJl dCA9IDA7CisKKwkvKiBEbyBub3QgYWxsb3cgZXhjbHVzaXZlIG9wZW4gKi8KKwlpZiAoZmlscC0+ Zl9mbGFncyAmIE9fRVhDTCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyBpbnQgaHlwZXJfZG1hYnVmX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3Ry dWN0IGZpbGUgKmZpbHApCit7CisJaHlwZXJfZG1hYnVmX2ZvcmVhY2hfZXhwb3J0ZWQoZm9yY2Vf ZnJlZSwgZmlscCk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19IWVBFUl9ETUFC VUZfRVZFTlRfR0VOCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaHlwZXJfZG1hYnVmX2V2ZW50X3Bv bGwoc3RydWN0IGZpbGUgKmZpbHAsCisJCQkJICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3Qg KndhaXQpCit7CisJcG9sbF93YWl0KGZpbHAsICZoeV9kcnZfcHJpdi0+ZXZlbnRfd2FpdCwgd2Fp dCk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJmh5X2Rydl9wcml2LT5ldmVudF9saXN0KSkKKwkJcmV0 dXJuIFBPTExJTiB8IFBPTExSRE5PUk07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXpl X3QgaHlwZXJfZG1hYnVmX2V2ZW50X3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2Vy ICpidWZmZXIsCisJCXNpemVfdCBjb3VudCwgbG9mZl90ICpvZmZzZXQpCit7CisJaW50IHJldDsK KworCS8qIG9ubHkgcm9vdCBjYW4gcmVhZCBldmVudHMgKi8KKwlpZiAoIWNhcGFibGUoQ0FQX0RB Q19PVkVSUklERSkpIHsKKwkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAorCQkJIk9ubHkgcm9v dCBjYW4gcmVhZCBldmVudHNcbiIpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCS8qIG1ha2Ug c3VyZSB1c2VyIGJ1ZmZlciBjYW4gYmUgd3JpdHRlbiAqLworCWlmICghYWNjZXNzX29rKFZFUklG WV9XUklURSwgYnVmZmVyLCBjb3VudCkpIHsKKwkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAor CQkJIlVzZXIgYnVmZmVyIGNhbid0IGJlIHdyaXR0ZW4uXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7 CisJfQorCisJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZoeV9kcnZfcHJpdi0+ZXZl bnRfcmVhZF9sb2NrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJd2hpbGUgKDEpIHsK KwkJc3RydWN0IGh5cGVyX2RtYWJ1Zl9ldmVudCAqZSA9IE5VTEw7CisKKwkJc3Bpbl9sb2NrX2ly cSgmaHlfZHJ2X3ByaXYtPmV2ZW50X2xvY2spOworCQlpZiAoIWxpc3RfZW1wdHkoJmh5X2Rydl9w cml2LT5ldmVudF9saXN0KSkgeworCQkJZSA9IGxpc3RfZmlyc3RfZW50cnkoJmh5X2Rydl9wcml2 LT5ldmVudF9saXN0LAorCQkJCQlzdHJ1Y3QgaHlwZXJfZG1hYnVmX2V2ZW50LCBsaW5rKTsKKwkJ CWxpc3RfZGVsKCZlLT5saW5rKTsKKwkJfQorCQlzcGluX3VubG9ja19pcnEoJmh5X2Rydl9wcml2 LT5ldmVudF9sb2NrKTsKKworCQlpZiAoIWUpIHsKKwkJCWlmIChyZXQpCisJCQkJYnJlYWs7CisK KwkJCWlmIChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQkJCXJldCA9IC1FQUdBSU47 CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCW11dGV4X3VubG9jaygmaHlfZHJ2X3ByaXYtPmV2ZW50 X3JlYWRfbG9jayk7CisJCQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoaHlfZHJ2X3By aXYtPmV2ZW50X3dhaXQsCisJCQkJICAhbGlzdF9lbXB0eSgmaHlfZHJ2X3ByaXYtPmV2ZW50X2xp c3QpKTsKKworCQkJaWYgKHJldCA9PSAwKQorCQkJCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0 aWJsZSgKKwkJCQkJJmh5X2Rydl9wcml2LT5ldmVudF9yZWFkX2xvY2spOworCisJCQlpZiAocmV0 KQorCQkJCXJldHVybiByZXQ7CisJCX0gZWxzZSB7CisJCQl1bnNpZ25lZCBpbnQgbGVuZ3RoID0g KHNpemVvZihlLT5ldmVudF9kYXRhLmhkcikgKworCQkJCQkJICAgICAgZS0+ZXZlbnRfZGF0YS5o ZHIuc2l6ZSk7CisKKwkJCWlmIChsZW5ndGggPiBjb3VudCAtIHJldCkgeworcHV0X2JhY2tfZXZl bnQ6CisJCQkJc3Bpbl9sb2NrX2lycSgmaHlfZHJ2X3ByaXYtPmV2ZW50X2xvY2spOworCQkJCWxp c3RfYWRkKCZlLT5saW5rLCAmaHlfZHJ2X3ByaXYtPmV2ZW50X2xpc3QpOworCQkJCXNwaW5fdW5s b2NrX2lycSgmaHlfZHJ2X3ByaXYtPmV2ZW50X2xvY2spOworCQkJCWJyZWFrOworCQkJfQorCisJ CQlpZiAoY29weV90b191c2VyKGJ1ZmZlciArIHJldCwgJmUtPmV2ZW50X2RhdGEuaGRyLAorCQkJ CQkgc2l6ZW9mKGUtPmV2ZW50X2RhdGEuaGRyKSkpIHsKKwkJCQlpZiAocmV0ID09IDApCisJCQkJ CXJldCA9IC1FRkFVTFQ7CisKKwkJCQlnb3RvIHB1dF9iYWNrX2V2ZW50OworCQkJfQorCisJCQly ZXQgKz0gc2l6ZW9mKGUtPmV2ZW50X2RhdGEuaGRyKTsKKworCQkJaWYgKGNvcHlfdG9fdXNlcihi dWZmZXIgKyByZXQsIGUtPmV2ZW50X2RhdGEuZGF0YSwKKwkJCQkJIGUtPmV2ZW50X2RhdGEuaGRy LnNpemUpKSB7CisJCQkJLyogZXJyb3Igd2hpbGUgY29weWluZyB2b2lkICpkYXRhICovCisKKwkJ CQlzdHJ1Y3QgaHlwZXJfZG1hYnVmX2V2ZW50X2hkciBkdW1teV9oZHIgPSB7MH07CisKKwkJCQly ZXQgLT0gc2l6ZW9mKGUtPmV2ZW50X2RhdGEuaGRyKTsKKworCQkJCS8qIG51bGxpZnlpbmcgaGRy IG9mIHRoZSBldmVudCBpbiB1c2VyIGJ1ZmZlciAqLworCQkJCWlmIChjb3B5X3RvX3VzZXIoYnVm ZmVyICsgcmV0LCAmZHVtbXlfaGRyLAorCQkJCQkJIHNpemVvZihkdW1teV9oZHIpKSkgeworCQkJ CQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCisJCQkJCQkiZmFpbGVkIHRvIG51bGxpZnkgaW52 YWxpZCBoZHIgYWxyZWFkeSBpbiB1c2Vyc3BhY2VcbiIpOworCQkJCX0KKworCQkJCXJldCA9IC1F RkFVTFQ7CisKKwkJCQlnb3RvIHB1dF9iYWNrX2V2ZW50OworCQkJfQorCisJCQlyZXQgKz0gZS0+ ZXZlbnRfZGF0YS5oZHIuc2l6ZTsKKwkJCWh5X2Rydl9wcml2LT5wZW5kaW5nLS07CisJCQlrZnJl ZShlKTsKKwkJfQorCX0KKworCW11dGV4X3VubG9jaygmaHlfZHJ2X3ByaXYtPmV2ZW50X3JlYWRf bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVj dCBmaWxlX29wZXJhdGlvbnMgaHlwZXJfZG1hYnVmX2RyaXZlcl9mb3BzID0geworCS5vd25lciA9 IFRISVNfTU9EVUxFLAorCS5vcGVuID0gaHlwZXJfZG1hYnVmX29wZW4sCisJLnJlbGVhc2UgPSBo eXBlcl9kbWFidWZfcmVsZWFzZSwKKworLyogcG9sbCBhbmQgcmVhZCBpbnRlcmZhY2VzIGFyZSBu ZWVkZWQgb25seSBmb3IgZXZlbnQtcG9sbGluZyAqLworI2lmZGVmIENPTkZJR19IWVBFUl9ETUFC VUZfRVZFTlRfR0VOCisJLnJlYWQgPSBoeXBlcl9kbWFidWZfZXZlbnRfcmVhZCwKKwkucG9sbCA9 IGh5cGVyX2RtYWJ1Zl9ldmVudF9wb2xsLAorI2VuZGlmCisKKwkudW5sb2NrZWRfaW9jdGwgPSBo eXBlcl9kbWFidWZfaW9jdGwsCit9OworCitzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgaHlwZXJf ZG1hYnVmX21pc2NkZXYgPSB7CisJLm1pbm9yID0gTUlTQ19EWU5BTUlDX01JTk9SLAorCS5uYW1l ID0gImh5cGVyX2RtYWJ1ZiIsCisJLmZvcHMgPSAmaHlwZXJfZG1hYnVmX2RyaXZlcl9mb3BzLAor fTsKKworc3RhdGljIGludCByZWdpc3Rlcl9kZXZpY2Uodm9pZCkKK3sKKwlpbnQgcmV0ID0gMDsK KworCXJldCA9IG1pc2NfcmVnaXN0ZXIoJmh5cGVyX2RtYWJ1Zl9taXNjZGV2KTsKKworCWlmIChy ZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJoeXBlcl9kbWFidWY6IGRyaXZlciBjYW4ndCBiZSBy ZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwloeV9kcnZfcHJpdi0+ZGV2ID0g aHlwZXJfZG1hYnVmX21pc2NkZXYudGhpc19kZXZpY2U7CisKKwkvKiBUT0RPOiBDaGVjayBpZiB0 aGVyZSBpcyBhIGRpZmZlcmVudCB3YXkgdG8gaW5pdGlhbGl6ZSBkbWEgbWFzayAqLworCWRtYV9j b2VyY2VfbWFza19hbmRfY29oZXJlbnQoaHlfZHJ2X3ByaXYtPmRldiwgRE1BX0JJVF9NQVNLKDY0 KSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyX2RldmljZSh2 b2lkKQoreworCWRldl9pbmZvKGh5X2Rydl9wcml2LT5kZXYsCisJCSJoeXBlcl9kbWFidWY6IHVu cmVnaXN0ZXJfZGV2aWNlKCkgaXMgY2FsbGVkXG4iKTsKKworCW1pc2NfZGVyZWdpc3RlcigmaHlw ZXJfZG1hYnVmX21pc2NkZXYpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBoeXBlcl9kbWFidWZf ZHJ2X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXByaW50ayhLRVJOX05PVElDRSAi aHlwZXJfZG1hYnVmX3N0YXJ0aW5nOiBJbml0aWFsaXphdGlvbiBzdGFydGVkXG4iKTsKKworCWh5 X2Rydl9wcml2ID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IGh5cGVyX2RtYWJ1Zl9wcml2YXRl KSwKKwkJCSAgICAgIEdGUF9LRVJORUwpOworCisJaWYgKCFoeV9kcnZfcHJpdikKKwkJcmV0dXJu IC1FTk9NRU07CisKKwlyZXQgPSByZWdpc3Rlcl9kZXZpY2UoKTsKKwlpZiAocmV0IDwgMCkgewor CQlrZnJlZShoeV9kcnZfcHJpdik7CisJCXJldHVybiByZXQ7CisJfQorCisvKiBjdXJyZW50bHkg b25seSBzdXBwb3J0cyBYRU4gaHlwZXJ2aXNvciAqLworI2lmZGVmIENPTkZJR19IWVBFUl9ETUFC VUZfWEVOCisJaHlfZHJ2X3ByaXYtPmJrbmRfb3BzID0gJnhlbl9ia25kX29wczsKKyNlbHNlCisJ aHlfZHJ2X3ByaXYtPmJrbmRfb3BzID0gTlVMTDsKKwlwcmludGsoS0VSTl9FUlIgImh5cGVyX2Rt YWJ1ZiBkcnYgY3VycmVudGx5IHN1cHBvcnRzIFhFTiBvbmx5LlxuIik7CisjZW5kaWYKKworCWlm IChoeV9kcnZfcHJpdi0+YmtuZF9vcHMgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIkh5 cGVyX2RtYWJ1Zjogbm8gYmFja2VuZCBmb3VuZFxuIik7CisJCWtmcmVlKGh5X2Rydl9wcml2KTsK KwkJcmV0dXJuIC0xOworCX0KKworCW11dGV4X2luaXQoJmh5X2Rydl9wcml2LT5sb2NrKTsKKwor CW11dGV4X2xvY2soJmh5X2Rydl9wcml2LT5sb2NrKTsKKworCWh5X2Rydl9wcml2LT5pbml0aWFs aXplZCA9IGZhbHNlOworCisJZGV2X2luZm8oaHlfZHJ2X3ByaXYtPmRldiwKKwkJICJpbml0aWFs aXppbmcgZGF0YWJhc2UgZm9yIGltcG9ydGVkL2V4cG9ydGVkIGRtYWJ1ZnNcbiIpOworCisJaHlf ZHJ2X3ByaXYtPndvcmtfcXVldWUgPSBjcmVhdGVfd29ya3F1ZXVlKCJoeXBlcl9kbWFidWZfd3F1 ZXVlIik7CisKKwlyZXQgPSBoeXBlcl9kbWFidWZfdGFibGVfaW5pdCgpOworCWlmIChyZXQgPCAw KSB7CisJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCSJmYWlsIHRvIGluaXQgdGFibGUg Zm9yIGV4cG9ydGVkL2ltcG9ydGVkIGVudHJpZXNcbiIpOworCQltdXRleF91bmxvY2soJmh5X2Ry dl9wcml2LT5sb2NrKTsKKwkJa2ZyZWUoaHlfZHJ2X3ByaXYpOworCQlyZXR1cm4gcmV0OworCX0K KworI2lmZGVmIENPTkZJR19IWVBFUl9ETUFCVUZfU1lTRlMKKwlyZXQgPSBoeXBlcl9kbWFidWZf cmVnaXN0ZXJfc3lzZnMoaHlfZHJ2X3ByaXYtPmRldik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2 X2VycihoeV9kcnZfcHJpdi0+ZGV2LAorCQkJImZhaWxlZCB0byBpbml0aWFsaXplIHN5c2ZzXG4i KTsKKwkJbXV0ZXhfdW5sb2NrKCZoeV9kcnZfcHJpdi0+bG9jayk7CisJCWtmcmVlKGh5X2Rydl9w cml2KTsKKwkJcmV0dXJuIHJldDsKKwl9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19IWVBFUl9E TUFCVUZfRVZFTlRfR0VOCisJbXV0ZXhfaW5pdCgmaHlfZHJ2X3ByaXYtPmV2ZW50X3JlYWRfbG9j ayk7CisJc3Bpbl9sb2NrX2luaXQoJmh5X2Rydl9wcml2LT5ldmVudF9sb2NrKTsKKworCS8qIElu aXRpYWxpemUgZXZlbnQgcXVldWUgKi8KKwlJTklUX0xJU1RfSEVBRCgmaHlfZHJ2X3ByaXYtPmV2 ZW50X2xpc3QpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmh5X2Rydl9wcml2LT5ldmVudF93YWl0 KTsKKworCS8qIHJlc2V0dGluZyBudW1iZXIgb2YgcGVuZGluZyBldmVudHMgKi8KKwloeV9kcnZf cHJpdi0+cGVuZGluZyA9IDA7CisjZW5kaWYKKworCWlmIChoeV9kcnZfcHJpdi0+YmtuZF9vcHMt PmluaXQpIHsKKwkJcmV0ID0gaHlfZHJ2X3ByaXYtPmJrbmRfb3BzLT5pbml0KCk7CisKKwkJaWYg KHJldCA8IDApIHsKKwkJCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCQkiZmFpbGVkIHRv IGluaXRpYWxpemUgYmFja2VuZC5cbiIpOworCQkJbXV0ZXhfdW5sb2NrKCZoeV9kcnZfcHJpdi0+ bG9jayk7CisJCQlrZnJlZShoeV9kcnZfcHJpdik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQor CisJaHlfZHJ2X3ByaXYtPmRvbWlkID0gaHlfZHJ2X3ByaXYtPmJrbmRfb3BzLT5nZXRfdm1faWQo KTsKKworCXJldCA9IGh5X2Rydl9wcml2LT5ia25kX29wcy0+aW5pdF9jb21tX2VudigpOworCWlm IChyZXQgPCAwKSB7CisJCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCSJmYWlsZWQgdG8g aW5pdGlhbGl6ZSBjb21tLWVudi5cbiIpOworCX0gZWxzZSB7CisJCWh5X2Rydl9wcml2LT5pbml0 aWFsaXplZCA9IHRydWU7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZoeV9kcnZfcHJpdi0+bG9jayk7 CisKKwlkZXZfaW5mbyhoeV9kcnZfcHJpdi0+ZGV2LAorCQkiRmluaXNoaW5nIHVwIGluaXRpYWxp emF0aW9uIG9mIGh5cGVyX2RtYWJ1ZiBkcnZcbiIpOworCisJLyogaW50ZXJydXB0IGZvciBjb21t IHNob3VsZCBiZSByZWdpc3RlcmVkIGhlcmU6ICovCisJcmV0dXJuIHJldDsKK30KKworc3RhdGlj IHZvaWQgaHlwZXJfZG1hYnVmX2Rydl9leGl0KHZvaWQpCit7CisjaWZkZWYgQ09ORklHX0hZUEVS X0RNQUJVRl9TWVNGUworCWh5cGVyX2RtYWJ1Zl91bnJlZ2lzdGVyX3N5c2ZzKGh5X2Rydl9wcml2 LT5kZXYpOworI2VuZGlmCisKKwltdXRleF9sb2NrKCZoeV9kcnZfcHJpdi0+bG9jayk7CisKKwkv KiBoYXNoIHRhYmxlcyBmb3IgZXhwb3J0L2ltcG9ydCBlbnRyaWVzIGFuZCByaW5nX2luZm9zICov CisJaHlwZXJfZG1hYnVmX3RhYmxlX2Rlc3Ryb3koKTsKKworCWh5X2Rydl9wcml2LT5ia25kX29w cy0+ZGVzdHJveV9jb21tKCk7CisKKwlpZiAoaHlfZHJ2X3ByaXYtPmJrbmRfb3BzLT5jbGVhbnVw KSB7CisJCWh5X2Rydl9wcml2LT5ia25kX29wcy0+Y2xlYW51cCgpOworCX07CisKKwkvKiBkZXN0 cm95IHdvcmtxdWV1ZSAqLworCWlmIChoeV9kcnZfcHJpdi0+d29ya19xdWV1ZSkKKwkJZGVzdHJv eV93b3JrcXVldWUoaHlfZHJ2X3ByaXYtPndvcmtfcXVldWUpOworCisJLyogZGVzdHJveSBpZF9x dWV1ZSAqLworCWlmIChoeV9kcnZfcHJpdi0+aWRfcXVldWUpCisJCWh5cGVyX2RtYWJ1Zl9mcmVl X2hpZF9saXN0KCk7CisKKyNpZmRlZiBDT05GSUdfSFlQRVJfRE1BQlVGX0VWRU5UX0dFTgorCS8q IGNsZWFuIHVwIGV2ZW50IHF1ZXVlICovCisJaHlwZXJfZG1hYnVmX2V2ZW50c19yZWxlYXNlKCk7 CisjZW5kaWYKKworCW11dGV4X3VubG9jaygmaHlfZHJ2X3ByaXYtPmxvY2spOworCisJZGV2X2lu Zm8oaHlfZHJ2X3ByaXYtPmRldiwKKwkJICJoeXBlcl9kbWFidWYgZHJpdmVyOiBFeGl0aW5nXG4i KTsKKworCWtmcmVlKGh5X2Rydl9wcml2KTsKKworCXVucmVnaXN0ZXJfZGV2aWNlKCk7Cit9CisK K21vZHVsZV9pbml0KGh5cGVyX2RtYWJ1Zl9kcnZfaW5pdCk7Cittb2R1bGVfZXhpdChoeXBlcl9k bWFidWZfZHJ2X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1 Zi9oeXBlcl9kbWFidWZfZHJ2LmggYi9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVy X2RtYWJ1Zl9kcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmJiM2Nl Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9k bWFidWZfZHJ2LmgKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNyBJ bnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZy ZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMg c29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2Fy ZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5j bHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1v ZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Ig c2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hv bSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ug YW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdy YXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRp b25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVE ICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElN UExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5P TklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZ UklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgor ICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBP VEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEgg VEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZU V0FSRS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX1BVQkxJQ19IWVBFUl9ETUFCVUZfRFJW X0hfXworI2RlZmluZSBfX0xJTlVYX1BVQkxJQ19IWVBFUl9ETUFCVUZfRFJWX0hfXworCisjaW5j bHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8eGVuL2h5cGVyX2RtYWJ1Zi5oPgorCitz dHJ1Y3QgaHlwZXJfZG1hYnVmX3JlcTsKKworc3RydWN0IGh5cGVyX2RtYWJ1Zl9ldmVudCB7CisJ c3RydWN0IGh5cGVyX2RtYWJ1Zl9ldmVudF9kYXRhIGV2ZW50X2RhdGE7CisJc3RydWN0IGxpc3Rf aGVhZCBsaW5rOworfTsKKworc3RydWN0IGh5cGVyX2RtYWJ1Zl9wcml2YXRlIHsKKwlzdHJ1Y3Qg ZGV2aWNlICpkZXY7CisKKwkvKiBWTShkb21haW4pIGlkIG9mIGN1cnJlbnQgVk0gaW5zdGFuY2Ug Ki8KKwlpbnQgZG9taWQ7CisKKwkvKiB3b3JrcXVldWUgZGVkaWNhdGVkIHRvIGh5cGVyX2RtYWJ1 ZiBkcml2ZXIgKi8KKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd29ya19xdWV1ZTsKKworCS8q IGxpc3Qgb2YgcmV1c2FibGUgaHlwZXJfZG1hYnVmX2lkcyAqLworCXN0cnVjdCBsaXN0X3JldXNh YmxlX2lkICppZF9xdWV1ZTsKKworCS8qIGJhY2tlbmQgb3BzIC0gaHlwZXJ2aXNvciBzcGVjaWZp YyAqLworCXN0cnVjdCBoeXBlcl9kbWFidWZfYmtuZF9vcHMgKmJrbmRfb3BzOworCisJLyogZGV2 aWNlIGdsb2JhbCBsb2NrICovCisJLyogVE9ETzogbWlnaHQgbmVlZCBhIGxvY2sgcGVyIHJlc291 cmNlIChlLmcuIEVYUE9SVCBMSVNUKSAqLworCXN0cnVjdCBtdXRleCBsb2NrOworCisJLyogZmxh ZyB0aGF0IHNob3dzIHdoZXRoZXIgYmFja2VuZCBpcyBpbml0aWFsaXplZCAqLworCWJvb2wgaW5p dGlhbGl6ZWQ7CisKKwl3YWl0X3F1ZXVlX2hlYWRfdCBldmVudF93YWl0OworCXN0cnVjdCBsaXN0 X2hlYWQgZXZlbnRfbGlzdDsKKworCXNwaW5sb2NrX3QgZXZlbnRfbG9jazsKKwlzdHJ1Y3QgbXV0 ZXggZXZlbnRfcmVhZF9sb2NrOworCisJLyogIyBvZiBwZW5kaW5nIGV2ZW50cyAqLworCWludCBw ZW5kaW5nOworfTsKKworc3RydWN0IGxpc3RfcmV1c2FibGVfaWQgeworCWh5cGVyX2RtYWJ1Zl9p ZF90IGhpZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCitzdHJ1Y3QgaHlwZXJfZG1h YnVmX2JrbmRfb3BzIHsKKwkvKiBiYWNrZW5kIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgKG9wdGlv bmFsKSAqLworCWludCAoKmluaXQpKHZvaWQpOworCisJLyogYmFja2VuZCBjbGVhbnVwIHJvdXRp bmUgKG9wdGlvbmFsKSAqLworCWludCAoKmNsZWFudXApKHZvaWQpOworCisJLyogcmV0cmVpdmlu ZyBpZCBvZiBjdXJyZW50IHZpcnR1YWwgbWFjaGluZSAqLworCWludCAoKmdldF92bV9pZCkodm9p ZCk7CisKKwkvKiBnZXQgcGFnZXMgc2hhcmVkIHZpYSBoeXBlcnZpc29yLXNwZWNpZmljIG1ldGhv ZCAqLworCWludCAoKnNoYXJlX3BhZ2VzKShzdHJ1Y3QgcGFnZSAqKiwgaW50LCBpbnQsIHZvaWQg KiopOworCisJLyogbWFrZSBzaGFyZWQgcGFnZXMgdW5zaGFyZWQgdmlhIGh5cGVydmlzb3Igc3Bl Y2lmaWMgbWV0aG9kICovCisJaW50ICgqdW5zaGFyZV9wYWdlcykodm9pZCAqKiwgaW50KTsKKwor CS8qIG1hcCByZW1vdGVseSBzaGFyZWQgcGFnZXMgb24gaW1wb3J0ZXIncyBzaWRlIHZpYQorCSAq IGh5cGVydmlzb3Itc3BlY2lmaWMgbWV0aG9kCisJICovCisJc3RydWN0IHBhZ2UgKiogKCptYXBf c2hhcmVkX3BhZ2VzKSh1bnNpZ25lZCBsb25nLCBpbnQsIGludCwgdm9pZCAqKik7CisKKwkvKiB1 bm1hcCBhbmQgZnJlZSBzaGFyZWQgcGFnZXMgb24gaW1wb3J0ZXIncyBzaWRlIHZpYQorCSAqIGh5 cGVydmlzb3Itc3BlY2lmaWMgbWV0aG9kCisJICovCisJaW50ICgqdW5tYXBfc2hhcmVkX3BhZ2Vz KSh2b2lkICoqLCBpbnQpOworCisJLyogaW5pdGlhbGl6ZSBjb21tdW5pY2F0aW9uIGVudmlyb25t ZW50ICovCisJaW50ICgqaW5pdF9jb21tX2Vudikodm9pZCk7CisKKwl2b2lkICgqZGVzdHJveV9j b21tKSh2b2lkKTsKKworCS8qIHVwc3RyZWFtIGNoIHNldHVwIChyZWNlaXZpbmcgYW5kIHJlc3Bv bmRpbmcpICovCisJaW50ICgqaW5pdF9yeF9jaCkoaW50KTsKKworCS8qIGRvd25zdHJlYW0gY2gg c2V0dXAgKHRyYW5zbWl0dGluZyBhbmQgcGFyc2luZyByZXNwb25zZXMpICovCisJaW50ICgqaW5p dF90eF9jaCkoaW50KTsKKworCWludCAoKnNlbmRfcmVxKShpbnQsIHN0cnVjdCBoeXBlcl9kbWFi dWZfcmVxICosIGludCk7Cit9OworCisvKiBleHBvcnRpbmcgZ2xvYmFsIGRydiBwcml2YXRlIGlu Zm8gKi8KK2V4dGVybiBzdHJ1Y3QgaHlwZXJfZG1hYnVmX3ByaXZhdGUgKmh5X2Rydl9wcml2Owor CisjZW5kaWYgLyogX19MSU5VWF9QVUJMSUNfSFlQRVJfRE1BQlVGX0RSVl9IX18gKi8KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2V2ZW50LmMg Yi9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9ldmVudC5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MmVhOTkKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9ldmVudC5jCkBAIC0w LDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24K KyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3Nv Y2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwg aW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxp bWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJs aXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRo ZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2Fy ZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRp b25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np b24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5j bHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNv ZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VU IFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcg QlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJ TiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUg TElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hF VEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5H CisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBU SEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0 aG9yczoKKyAqICAgIERvbmd3b24gS2ltIDxkb25nd29uLmtpbUBpbnRlbC5jb20+CisgKiAgICBN YXRldXN6IFBvbHJvbGEgPG1hdGV1c3p4LnBvdHJvbGFAaW50ZWwuY29tPgorICoKKyAqLworCisj aW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNs dWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSAi aHlwZXJfZG1hYnVmX2Rydi5oIgorI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9zdHJ1Y3QuaCIKKyNp bmNsdWRlICJoeXBlcl9kbWFidWZfbGlzdC5oIgorI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9ldmVu dC5oIgorCitzdGF0aWMgdm9pZCBzZW5kX2V2ZW50KHN0cnVjdCBoeXBlcl9kbWFidWZfZXZlbnQg KmUpCit7CisJc3RydWN0IGh5cGVyX2RtYWJ1Zl9ldmVudCAqb2xkZXN0OworCXVuc2lnbmVkIGxv bmcgaXJxZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHlfZHJ2X3ByaXYtPmV2ZW50X2xv Y2ssIGlycWZsYWdzKTsKKworCS8qIGNoZWNrIGN1cnJlbnQgbnVtYmVyIG9mIGV2ZW50IHRoZW4g aWYgaXQgaGl0cyB0aGUgbWF4IG51bSBhbGxvd2VkCisJICogdGhlbiByZW1vdmUgdGhlIG9sZGVz dCBldmVudCBpbiB0aGUgbGlzdAorCSAqLworCWlmIChoeV9kcnZfcHJpdi0+cGVuZGluZyA+IE1B WF9ERVBUSF9FVkVOVF9RVUVVRSAtIDEpIHsKKwkJb2xkZXN0ID0gbGlzdF9maXJzdF9lbnRyeSgm aHlfZHJ2X3ByaXYtPmV2ZW50X2xpc3QsCisJCQkJc3RydWN0IGh5cGVyX2RtYWJ1Zl9ldmVudCwg bGluayk7CisJCWxpc3RfZGVsKCZvbGRlc3QtPmxpbmspOworCQloeV9kcnZfcHJpdi0+cGVuZGlu Zy0tOworCQlrZnJlZShvbGRlc3QpOworCX0KKworCWxpc3RfYWRkX3RhaWwoJmUtPmxpbmssCisJ CSAgICAgICZoeV9kcnZfcHJpdi0+ZXZlbnRfbGlzdCk7CisKKwloeV9kcnZfcHJpdi0+cGVuZGlu ZysrOworCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZoeV9kcnZfcHJpdi0+ZXZlbnRfd2FpdCk7 CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoeV9kcnZfcHJpdi0+ZXZlbnRfbG9jaywgaXJx ZmxhZ3MpOworfQorCit2b2lkIGh5cGVyX2RtYWJ1Zl9ldmVudHNfcmVsZWFzZSh2b2lkKQorewor CXN0cnVjdCBoeXBlcl9kbWFidWZfZXZlbnQgKmUsICpldDsKKwl1bnNpZ25lZCBsb25nIGlycWZs YWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmh5X2Rydl9wcml2LT5ldmVudF9sb2NrLCBpcnFm bGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZSwgZXQsICZoeV9kcnZfcHJpdi0+ ZXZlbnRfbGlzdCwKKwkJCQkgbGluaykgeworCQlsaXN0X2RlbCgmZS0+bGluayk7CisJCWtmcmVl KGUpOworCQloeV9kcnZfcHJpdi0+cGVuZGluZy0tOworCX0KKworCWlmIChoeV9kcnZfcHJpdi0+ cGVuZGluZykgeworCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCisJCQkicG9zc2libGUgbGVh ayBvbiBldmVudF9saXN0XG4iKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoeV9k cnZfcHJpdi0+ZXZlbnRfbG9jaywgaXJxZmxhZ3MpOworfQorCitpbnQgaHlwZXJfZG1hYnVmX2lt cG9ydF9ldmVudChoeXBlcl9kbWFidWZfaWRfdCBoaWQpCit7CisJc3RydWN0IGh5cGVyX2RtYWJ1 Zl9ldmVudCAqZTsKKwlzdHJ1Y3QgaW1wb3J0ZWRfc2d0X2luZm8gKmltcG9ydGVkOworCisJaW1w b3J0ZWQgPSBoeXBlcl9kbWFidWZfZmluZF9pbXBvcnRlZChoaWQpOworCisJaWYgKCFpbXBvcnRl ZCkgeworCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCisJCQkiY2FuJ3QgZmluZCBpbXBvcnRl ZF9zZ3RfaW5mbyBpbiB0aGUgbGlzdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWUg PSBremFsbG9jKHNpemVvZigqZSksIEdGUF9LRVJORUwpOworCisJaWYgKCFlKQorCQlyZXR1cm4g LUVOT01FTTsKKworCWUtPmV2ZW50X2RhdGEuaGRyLmV2ZW50X3R5cGUgPSBIWVBFUl9ETUFCVUZf TkVXX0lNUE9SVDsKKwllLT5ldmVudF9kYXRhLmhkci5oaWQgPSBoaWQ7CisJZS0+ZXZlbnRfZGF0 YS5kYXRhID0gKHZvaWQgKilpbXBvcnRlZC0+cHJpdjsKKwllLT5ldmVudF9kYXRhLmhkci5zaXpl ID0gaW1wb3J0ZWQtPnN6X3ByaXY7CisKKwlzZW5kX2V2ZW50KGUpOworCisJZGV2X2RiZyhoeV9k cnZfcHJpdi0+ZGV2LAorCQkiZXZlbnQgbnVtYmVyID0gJWQgOiIsIGh5X2Rydl9wcml2LT5wZW5k aW5nKTsKKworCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwKKwkJImdlbmVyYXRpbmcgZXZlbnRz IGZvciB7JWQsICVkLCAlZCwgJWR9XG4iLAorCQlpbXBvcnRlZC0+aGlkLmlkLCBpbXBvcnRlZC0+ aGlkLnJuZ19rZXlbMF0sCisJCWltcG9ydGVkLT5oaWQucm5nX2tleVsxXSwgaW1wb3J0ZWQtPmhp ZC5ybmdfa2V5WzJdKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEt YnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfZXZlbnQuaCBiL2RyaXZlcnMvZG1hLWJ1Zi9o eXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2V2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uNTBkYjA0ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9o eXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2V2ZW50LmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAq IENvcHlyaWdodCDCqSAyMDE3IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5n IHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMg b3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBU SEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAq IFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlN LCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G IENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFM SU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaWZuZGVmIF9fSFlQRVJfRE1B QlVGX0VWRU5UX0hfXworI2RlZmluZSBfX0hZUEVSX0RNQUJVRl9FVkVOVF9IX18KKworI2RlZmlu ZSBNQVhfREVQVEhfRVZFTlRfUVVFVUUgMzIKKworZW51bSBoeXBlcl9kbWFidWZfZXZlbnRfdHlw ZSB7CisJSFlQRVJfRE1BQlVGX05FV19JTVBPUlQgPSAweDEwMDAwLAorfTsKKwordm9pZCBoeXBl cl9kbWFidWZfZXZlbnRzX3JlbGVhc2Uodm9pZCk7CisKK2ludCBoeXBlcl9kbWFidWZfaW1wb3J0 X2V2ZW50KGh5cGVyX2RtYWJ1Zl9pZF90IGhpZCk7CisKKyNlbmRpZiAvKiBfX0hZUEVSX0RNQUJV Rl9FVkVOVF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYv aHlwZXJfZG1hYnVmX2lkLmMgYi9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2Rt YWJ1Zl9pZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2N2I4NGEKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1 Zl9pZC5jCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTcgSW50ZWwg Q29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3 YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwK KyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGlu ZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks IG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwg Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl CisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxv d2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0 aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkg c2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv ZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVE LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZS SU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hU IEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX SVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBT T0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUu CisgKgorICogQXV0aG9yczoKKyAqICAgIERvbmd3b24gS2ltIDxkb25nd29uLmtpbUBpbnRlbC5j b20+CisgKiAgICBNYXRldXN6IFBvbHJvbGEgPG1hdGV1c3p4LnBvdHJvbGFAaW50ZWwuY29tPgor ICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIu aD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlICJoeXBlcl9kbWFidWZfZHJ2 LmgiCisjaW5jbHVkZSAiaHlwZXJfZG1hYnVmX2lkLmgiCisKK3ZvaWQgaHlwZXJfZG1hYnVmX3N0 b3JlX2hpZChoeXBlcl9kbWFidWZfaWRfdCBoaWQpCit7CisJc3RydWN0IGxpc3RfcmV1c2FibGVf aWQgKnJldXNhYmxlX2hlYWQgPSBoeV9kcnZfcHJpdi0+aWRfcXVldWU7CisJc3RydWN0IGxpc3Rf cmV1c2FibGVfaWQgKm5ld19yZXVzYWJsZTsKKworCW5ld19yZXVzYWJsZSA9IGttYWxsb2Moc2l6 ZW9mKCpuZXdfcmV1c2FibGUpLCBHRlBfS0VSTkVMKTsKKworCWlmICghbmV3X3JldXNhYmxlKQor CQlyZXR1cm47CisKKwluZXdfcmV1c2FibGUtPmhpZCA9IGhpZDsKKworCWxpc3RfYWRkKCZuZXdf cmV1c2FibGUtPmxpc3QsICZyZXVzYWJsZV9oZWFkLT5saXN0KTsKK30KKworc3RhdGljIGh5cGVy X2RtYWJ1Zl9pZF90IGdldF9yZXVzYWJsZV9oaWQodm9pZCkKK3sKKwlzdHJ1Y3QgbGlzdF9yZXVz YWJsZV9pZCAqcmV1c2FibGVfaGVhZCA9IGh5X2Rydl9wcml2LT5pZF9xdWV1ZTsKKwloeXBlcl9k bWFidWZfaWRfdCBoaWQgPSB7LTEsIHswLCAwLCAwfSB9OworCisJLyogY2hlY2sgdGhlcmUgaXMg cmV1c2FibGUgaWQgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJnJldXNhYmxlX2hlYWQtPmxpc3QpKSB7 CisJCXJldXNhYmxlX2hlYWQgPSBsaXN0X2ZpcnN0X2VudHJ5KCZyZXVzYWJsZV9oZWFkLT5saXN0 LAorCQkJCQkJIHN0cnVjdCBsaXN0X3JldXNhYmxlX2lkLAorCQkJCQkJIGxpc3QpOworCisJCWxp c3RfZGVsKCZyZXVzYWJsZV9oZWFkLT5saXN0KTsKKwkJaGlkID0gcmV1c2FibGVfaGVhZC0+aGlk OworCQlrZnJlZShyZXVzYWJsZV9oZWFkKTsKKwl9CisKKwlyZXR1cm4gaGlkOworfQorCit2b2lk IGh5cGVyX2RtYWJ1Zl9mcmVlX2hpZF9saXN0KHZvaWQpCit7CisJc3RydWN0IGxpc3RfcmV1c2Fi bGVfaWQgKnJldXNhYmxlX2hlYWQgPSBoeV9kcnZfcHJpdi0+aWRfcXVldWU7CisJc3RydWN0IGxp c3RfcmV1c2FibGVfaWQgKnRlbXBfaGVhZDsKKworCWlmIChyZXVzYWJsZV9oZWFkKSB7CisJCS8q IGZyZWVpbmcgbWVtIHNwYWNlIGFsbCByZXVzYWJsZSBpZHMgaW4gdGhlIHN0YWNrICovCisJCXdo aWxlICghbGlzdF9lbXB0eSgmcmV1c2FibGVfaGVhZC0+bGlzdCkpIHsKKwkJCXRlbXBfaGVhZCA9 IGxpc3RfZmlyc3RfZW50cnkoJnJldXNhYmxlX2hlYWQtPmxpc3QsCisJCQkJCQkgICAgIHN0cnVj dCBsaXN0X3JldXNhYmxlX2lkLAorCQkJCQkJICAgICBsaXN0KTsKKwkJCWxpc3RfZGVsKCZ0ZW1w X2hlYWQtPmxpc3QpOworCQkJa2ZyZWUodGVtcF9oZWFkKTsKKwkJfQorCisJCS8qIGZyZWVpbmcg aGVhZCAqLworCQlrZnJlZShyZXVzYWJsZV9oZWFkKTsKKwl9Cit9CisKK2h5cGVyX2RtYWJ1Zl9p ZF90IGh5cGVyX2RtYWJ1Zl9nZXRfaGlkKHZvaWQpCit7CisJc3RhdGljIGludCBjb3VudDsKKwlo eXBlcl9kbWFidWZfaWRfdCBoaWQ7CisJc3RydWN0IGxpc3RfcmV1c2FibGVfaWQgKnJldXNhYmxl X2hlYWQ7CisKKwkvKiBmaXJzdCBjYWxsIHRvIGh5cGVyX2RtYWJ1Zl9nZXRfaWQgKi8KKwlpZiAo Y291bnQgPT0gMCkgeworCQlyZXVzYWJsZV9oZWFkID0ga21hbGxvYyhzaXplb2YoKnJldXNhYmxl X2hlYWQpLCBHRlBfS0VSTkVMKTsKKworCQlpZiAoIXJldXNhYmxlX2hlYWQpCisJCQlyZXR1cm4g KGh5cGVyX2RtYWJ1Zl9pZF90KXstMSwgezAsIDAsIDB9IH07CisKKwkJLyogbGlzdCBoZWFkIGhh cyBhbiBpbnZhbGlkIGNvdW50ICovCisJCXJldXNhYmxlX2hlYWQtPmhpZC5pZCA9IC0xOworCQlJ TklUX0xJU1RfSEVBRCgmcmV1c2FibGVfaGVhZC0+bGlzdCk7CisJCWh5X2Rydl9wcml2LT5pZF9x dWV1ZSA9IHJldXNhYmxlX2hlYWQ7CisJfQorCisJaGlkID0gZ2V0X3JldXNhYmxlX2hpZCgpOwor CisJLypjcmVhdGluZyBhIG5ldyBILUlEIG9ubHkgaWYgbm90aGluZyBpbiB0aGUgcmV1c2FibGUg aWQgcXVldWUKKwkgKiBhbmQgY291bnQgaXMgbGVzcyB0aGFuIG1heGltdW0gYWxsb3dlZAorCSAq LworCWlmIChoaWQuaWQgPT0gLTEgJiYgY291bnQgPCBIWVBFUl9ETUFCVUZfSURfTUFYKQorCQlo aWQuaWQgPSBIWVBFUl9ETUFCVUZfSURfQ1JFQVRFKGh5X2Rydl9wcml2LT5kb21pZCwgY291bnQr Kyk7CisKKwkvKiByYW5kb20gZGF0YSBlbWJlZGRlZCBpbiB0aGUgaWQgZm9yIHNlY3VyaXR5ICov CisJZ2V0X3JhbmRvbV9ieXRlcygmaGlkLnJuZ19rZXlbMF0sIDEyKTsKKworCXJldHVybiBoaWQ7 Cit9CisKK2Jvb2wgaHlwZXJfZG1hYnVmX2hpZF9rZXljb21wKGh5cGVyX2RtYWJ1Zl9pZF90IGhp ZDEsIGh5cGVyX2RtYWJ1Zl9pZF90IGhpZDIpCit7CisJaW50IGk7CisKKwkvKiBjb21wYXJlIGtl eXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWlmIChoaWQxLnJuZ19rZXlbaV0g IT0gaGlkMi5ybmdfa2V5W2ldKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVl OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFi dWZfaWQuaCBiL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2lkLmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ2OTBmMwotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2lkLmgKQEAg LTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE3IEludGVsIENvcnBvcmF0aW9u CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv IGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNz b2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFs IGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBs aW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVi bGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0 aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdh cmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGlu Y2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBT b2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9V VCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5H IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisg KiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAg SU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJF IExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lO RworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLwor CisjaWZuZGVmIF9fSFlQRVJfRE1BQlVGX0lEX0hfXworI2RlZmluZSBfX0hZUEVSX0RNQUJVRl9J RF9IX18KKworI2RlZmluZSBIWVBFUl9ETUFCVUZfSURfQ1JFQVRFKGRvbWlkLCBjbnQpIFwKKwko KCgoZG9taWQpICYgMHhGRikgPDwgMjQpIHwgKChjbnQpICYgMHhGRkZGRkYpKQorCisjZGVmaW5l IEhZUEVSX0RNQUJVRl9ET01fSUQoaGlkKSBcCisJKCgoaGlkLmlkKSA+PiAyNCkgJiAweEZGKQor CisvKiBjdXJyZW50bHkgbWF4aW11bSBudW1iZXIgb2YgYnVmZmVycyBzaGFyZWQKKyAqIGF0IGFu eSBnaXZlbiBtb21lbnQgaXMgbGltaXRlZCB0byAxMDAwCisgKi8KKyNkZWZpbmUgSFlQRVJfRE1B QlVGX0lEX01BWCAxMDAwCisKKy8qIGFkZGluZyBmcmVlZCBoaWQgdG8gdGhlIHJldXNhYmxlIGxp c3QgKi8KK3ZvaWQgaHlwZXJfZG1hYnVmX3N0b3JlX2hpZChoeXBlcl9kbWFidWZfaWRfdCBoaWQp OworCisvKiBmcmVlaW5nIHRoZSByZXVzYXNibGUgbGlzdCAqLwordm9pZCBoeXBlcl9kbWFidWZf ZnJlZV9oaWRfbGlzdCh2b2lkKTsKKworLyogZ2V0dGluZyBhIGhpZCBhdmFpbGFibGUgdG8gdXNl LiAqLworaHlwZXJfZG1hYnVmX2lkX3QgaHlwZXJfZG1hYnVmX2dldF9oaWQodm9pZCk7CisKKy8q IGNvbXBhcmluZyB0d28gZGlmZmVyZW50IGhpZCAqLworYm9vbCBoeXBlcl9kbWFidWZfaGlkX2tl eWNvbXAoaHlwZXJfZG1hYnVmX2lkX3QgaGlkMSwgaHlwZXJfZG1hYnVmX2lkX3QgaGlkMik7CisK KyNlbmRpZiAvKl9fSFlQRVJfRE1BQlVGX0lEX0gqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEt YnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfaW9jdGwuYyBiL2RyaXZlcnMvZG1hLWJ1Zi9o eXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2lvY3RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uY2E2ZWRmMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9o eXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2lvY3RsLmMKQEAgLTAsMCArMSw3ODYgQEAKKy8qCisg KiBDb3B5cmlnaHQgwqkgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24g aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu ZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlv biBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0 aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJp Z2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1 YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBk byBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFi b3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGlu ZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVz IG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhF IFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJ TkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8g VEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisg KiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJ TSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBP RiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBP UiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVB TElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgRG9uZ3dv biBLaW0gPGRvbmd3b24ua2ltQGludGVsLmNvbT4KKyAqICAgIE1hdGV1c3ogUG9scm9sYSA8bWF0 ZXVzengucG90cm9sYUBpbnRlbC5jb20+CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJu ZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4K KyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgor I2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9kcnYuaCIKKyNpbmNsdWRlICJoeXBlcl9kbWFidWZfaWQu aCIKKyNpbmNsdWRlICJoeXBlcl9kbWFidWZfc3RydWN0LmgiCisjaW5jbHVkZSAiaHlwZXJfZG1h YnVmX2lvY3RsLmgiCisjaW5jbHVkZSAiaHlwZXJfZG1hYnVmX2xpc3QuaCIKKyNpbmNsdWRlICJo eXBlcl9kbWFidWZfbXNnLmgiCisjaW5jbHVkZSAiaHlwZXJfZG1hYnVmX3NnbF9wcm9jLmgiCisj aW5jbHVkZSAiaHlwZXJfZG1hYnVmX29wcy5oIgorI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9xdWVy eS5oIgorCitzdGF0aWMgaW50IGh5cGVyX2RtYWJ1Zl90eF9jaF9zZXR1cF9pb2N0bChzdHJ1Y3Qg ZmlsZSAqZmlscCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaW9jdGxfaHlwZXJfZG1hYnVmX3R4 X2NoX3NldHVwICp0eF9jaF9hdHRyOworCXN0cnVjdCBoeXBlcl9kbWFidWZfYmtuZF9vcHMgKmJr bmRfb3BzID0gaHlfZHJ2X3ByaXYtPmJrbmRfb3BzOworCWludCByZXQgPSAwOworCisJaWYgKCFk YXRhKSB7CisJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwgInVzZXIgZGF0YSBpcyBOVUxMXG4i KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXR4X2NoX2F0dHIgPSAoc3RydWN0IGlvY3RsX2h5 cGVyX2RtYWJ1Zl90eF9jaF9zZXR1cCAqKWRhdGE7CisKKwlyZXQgPSBia25kX29wcy0+aW5pdF90 eF9jaCh0eF9jaF9hdHRyLT5yZW1vdGVfZG9tYWluKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBpbnQgaHlwZXJfZG1hYnVmX3J4X2NoX3NldHVwX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxw LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBpb2N0bF9oeXBlcl9kbWFidWZfcnhfY2hfc2V0dXAg KnJ4X2NoX2F0dHI7CisJc3RydWN0IGh5cGVyX2RtYWJ1Zl9ia25kX29wcyAqYmtuZF9vcHMgPSBo eV9kcnZfcHJpdi0+YmtuZF9vcHM7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWRhdGEpIHsKKwkJ ZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LCAidXNlciBkYXRhIGlzIE5VTExcbiIpOworCQlyZXR1 cm4gLUVJTlZBTDsKKwl9CisKKwlyeF9jaF9hdHRyID0gKHN0cnVjdCBpb2N0bF9oeXBlcl9kbWFi dWZfcnhfY2hfc2V0dXAgKilkYXRhOworCisJcmV0ID0gYmtuZF9vcHMtPmluaXRfcnhfY2gocnhf Y2hfYXR0ci0+c291cmNlX2RvbWFpbik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50 IHNlbmRfZXhwb3J0X21zZyhzdHJ1Y3QgZXhwb3J0ZWRfc2d0X2luZm8gKmV4cG9ydGVkLAorCQkJ ICAgc3RydWN0IHBhZ2VzX2luZm8gKnBnX2luZm8pCit7CisJc3RydWN0IGh5cGVyX2RtYWJ1Zl9i a25kX29wcyAqYmtuZF9vcHMgPSBoeV9kcnZfcHJpdi0+YmtuZF9vcHM7CisJc3RydWN0IGh5cGVy X2RtYWJ1Zl9yZXEgKnJlcTsKKwlpbnQgb3BbTUFYX05VTUJFUl9PRl9PUEVSQU5EU10gPSB7MH07 CisJaW50IHJldCwgaTsKKworCS8qIG5vdyBjcmVhdGUgcmVxdWVzdCBmb3IgaW1wb3J0ZXIgdmlh IHJpbmcgKi8KKwlvcFswXSA9IGV4cG9ydGVkLT5oaWQuaWQ7CisKKwlmb3IgKGkgPSAwOyBpIDwg MzsgaSsrKQorCQlvcFtpKzFdID0gZXhwb3J0ZWQtPmhpZC5ybmdfa2V5W2ldOworCisJaWYgKHBn X2luZm8pIHsKKwkJb3BbNF0gPSBwZ19pbmZvLT5uZW50czsKKwkJb3BbNV0gPSBwZ19pbmZvLT5m cnN0X29mc3Q7CisJCW9wWzZdID0gcGdfaW5mby0+bGFzdF9sZW47CisJCW9wWzddID0gYmtuZF9v cHMtPnNoYXJlX3BhZ2VzKHBnX2luZm8tPnBncywgZXhwb3J0ZWQtPnJkb21pZCwKKwkJCQkJIHBn X2luZm8tPm5lbnRzLCAmZXhwb3J0ZWQtPnJlZnNfaW5mbyk7CisJCWlmIChvcFs3XSA8IDApIHsK KwkJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwgInBhZ2VzIHNoYXJpbmcgZmFpbGVkXG4iKTsK KwkJCXJldHVybiBvcFs3XTsKKwkJfQorCX0KKworCW9wWzhdID0gZXhwb3J0ZWQtPnN6X3ByaXY7 CisKKwkvKiBkcml2ZXIvYXBwbGljYXRpb24gc3BlY2lmaWMgcHJpdmF0ZSBpbmZvICovCisJbWVt Y3B5KCZvcFs5XSwgZXhwb3J0ZWQtPnByaXYsIG9wWzhdKTsKKworCXJlcSA9IGtjYWxsb2MoMSwg c2l6ZW9mKCpyZXEpLCBHRlBfS0VSTkVMKTsKKworCWlmICghcmVxKQorCQlyZXR1cm4gLUVOT01F TTsKKworCS8qIGNvbXBvc2luZyBhIG1lc3NhZ2UgdG8gdGhlIGltcG9ydGVyICovCisJaHlwZXJf ZG1hYnVmX2NyZWF0ZV9yZXEocmVxLCBIWVBFUl9ETUFCVUZfRVhQT1JULCAmb3BbMF0pOworCisJ cmV0ID0gYmtuZF9vcHMtPnNlbmRfcmVxKGV4cG9ydGVkLT5yZG9taWQsIHJlcSwgdHJ1ZSk7CisK KwlrZnJlZShyZXEpOworCisJcmV0dXJuIHJldDsKK30KKworLyogRmFzdCBwYXRoIGV4cG9ydGlu ZyByb3V0aW5lIGluIGNhc2Ugc2FtZSBidWZmZXIgaXMgYWxyZWFkeSBleHBvcnRlZC4KKyAqIElu IHRoaXMgZnVuY3Rpb24sIHdlIHNraXAgbm9ybWFsIGV4cG9ydGluZyBwcm9jZXNzIGFuZCBqdXN0 IHVwZGF0ZQorICogcHJpdmF0ZSBkYXRhIG9uIGJvdGggVk1zIChpbXBvcnRlciBhbmQgZXhwb3J0 ZXIpCisgKgorICogcmV0dXJuICcxJyBpZiByZWV4cG9ydCBpcyBuZWVkZWQsIHJldHVybiAnMCcg aWYgc3VjY2VlZHMsIHJldHVybgorICogS2VybmVsIGVycm9yIGNvZGUgaWYgc29tZXRoaW5nIGdv ZXMgd3JvbmcKKyAqLworc3RhdGljIGludCBmYXN0cGF0aF9leHBvcnQoaHlwZXJfZG1hYnVmX2lk X3QgaGlkLCBpbnQgc3pfcHJpdiwgY2hhciAqcHJpdikKK3sKKwlpbnQgcmVleHBvcnQgPSAxOwor CWludCByZXQgPSAwOworCXN0cnVjdCBleHBvcnRlZF9zZ3RfaW5mbyAqZXhwb3J0ZWQ7CisKKwll eHBvcnRlZCA9IGh5cGVyX2RtYWJ1Zl9maW5kX2V4cG9ydGVkKGhpZCk7CisKKwlpZiAoIWV4cG9y dGVkKQorCQlyZXR1cm4gcmVleHBvcnQ7CisKKwlpZiAoZXhwb3J0ZWQtPnZhbGlkID09IGZhbHNl KQorCQlyZXR1cm4gcmVleHBvcnQ7CisKKwkvKgorCSAqIENoZWNrIGlmIHVuZXhwb3J0IGlzIGFs cmVhZHkgc2NoZWR1bGVkIGZvciB0aGF0IGJ1ZmZlciwKKwkgKiBpZiBzbyB0cnkgdG8gY2FuY2Vs IGl0LiBJZiB0aGF0IHdpbGwgZmFpbCwgYnVmZmVyIG5lZWRzCisJICogdG8gYmUgcmVleHBvcnQg b25jZSBhZ2Fpbi4KKwkgKi8KKwlpZiAoZXhwb3J0ZWQtPnVuZXhwb3J0X3NjaGVkKSB7CisJCWlm ICghY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZleHBvcnRlZC0+dW5leHBvcnQpKQorCQkJcmV0 dXJuIHJlZXhwb3J0OworCisJCWV4cG9ydGVkLT51bmV4cG9ydF9zY2hlZCA9IGZhbHNlOworCX0K KworCS8qIGlmIHRoZXJlJ3MgYW55IGNoYW5nZSBpbiBzaXplIG9mIHByaXZhdGUgZGF0YS4KKwkg KiB3ZSByZWFsbG9jYXRlIHNwYWNlIGZvciBwcml2YXRlIGRhdGEgd2l0aCBuZXcgc2l6ZQorCSAq LworCWlmIChzel9wcml2ICE9IGV4cG9ydGVkLT5zel9wcml2KSB7CisJCWtmcmVlKGV4cG9ydGVk LT5wcml2KTsKKworCQkvKiB0cnVuY2F0aW5nIHNpemUgKi8KKwkJaWYgKHN6X3ByaXYgPiBNQVhf U0laRV9QUklWX0RBVEEpCisJCQlleHBvcnRlZC0+c3pfcHJpdiA9IE1BWF9TSVpFX1BSSVZfREFU QTsKKwkJZWxzZQorCQkJZXhwb3J0ZWQtPnN6X3ByaXYgPSBzel9wcml2OworCisJCWV4cG9ydGVk LT5wcml2ID0ga2NhbGxvYygxLCBleHBvcnRlZC0+c3pfcHJpdiwKKwkJCQkJIEdGUF9LRVJORUwp OworCisJCWlmICghZXhwb3J0ZWQtPnByaXYpIHsKKwkJCWh5cGVyX2RtYWJ1Zl9yZW1vdmVfZXhw b3J0ZWQoZXhwb3J0ZWQtPmhpZCk7CisJCQloeXBlcl9kbWFidWZfY2xlYW51cF9zZ3RfaW5mbyhl eHBvcnRlZCwgdHJ1ZSk7CisJCQlrZnJlZShleHBvcnRlZCk7CisJCQlyZXR1cm4gLUVOT01FTTsK KwkJfQorCX0KKworCS8qIHVwZGF0ZSBwcml2YXRlIGRhdGEgaW4gc2d0X2luZm8gd2l0aCBuZXcg b25lcyAqLworCXJldCA9IGNvcHlfZnJvbV91c2VyKGV4cG9ydGVkLT5wcml2LCBwcml2LCBleHBv cnRlZC0+c3pfcHJpdik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYs CisJCQkiRmFpbGVkIHRvIGxvYWQgYSBuZXcgcHJpdmF0ZSBkYXRhXG4iKTsKKwkJcmV0ID0gLUVJ TlZBTDsKKwl9IGVsc2UgeworCQkvKiBzZW5kIGFuIGV4cG9ydCBtc2cgZm9yIHVwZGF0aW5nIHBy aXYgaW4gaW1wb3J0ZXIgKi8KKwkJcmV0ID0gc2VuZF9leHBvcnRfbXNnKGV4cG9ydGVkLCBOVUxM KTsKKworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAorCQkJ CSJGYWlsZWQgdG8gc2VuZCBhIG5ldyBwcml2YXRlIGRhdGFcbiIpOworCQkJcmV0ID0gLUVCVVNZ OworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBoeXBlcl9kbWFidWZf ZXhwb3J0X3JlbW90ZV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqZGF0YSkKK3sKKwlz dHJ1Y3QgaW9jdGxfaHlwZXJfZG1hYnVmX2V4cG9ydF9yZW1vdGUgKmV4cG9ydF9yZW1vdGVfYXR0 ciA9CisJCQkoc3RydWN0IGlvY3RsX2h5cGVyX2RtYWJ1Zl9leHBvcnRfcmVtb3RlICopZGF0YTsK KwlzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZjsKKwlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICph dHRhY2htZW50OworCXN0cnVjdCBzZ190YWJsZSAqc2d0OworCXN0cnVjdCBwYWdlc19pbmZvICpw Z19pbmZvOworCXN0cnVjdCBleHBvcnRlZF9zZ3RfaW5mbyAqZXhwb3J0ZWQ7CisJaHlwZXJfZG1h YnVmX2lkX3QgaGlkOworCWludCByZXQgPSAwOworCisJaWYgKGh5X2Rydl9wcml2LT5kb21pZCA9 PSBleHBvcnRfcmVtb3RlX2F0dHItPnJlbW90ZV9kb21haW4pIHsKKwkJZGV2X2VycihoeV9kcnZf cHJpdi0+ZGV2LAorCQkJImV4cG9ydGluZyB0byB0aGUgc2FtZSBWTSBpcyBub3QgcGVybWl0dGVk XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZG1hX2J1ZiA9IGRtYV9idWZfZ2V0KGV4 cG9ydF9yZW1vdGVfYXR0ci0+ZG1hYnVmX2ZkKTsKKworCWlmIChJU19FUlIoZG1hX2J1ZikpIHsK KwkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LCAiQ2Fubm90IGdldCBkbWEgYnVmXG4iKTsKKwkJ cmV0dXJuIFBUUl9FUlIoZG1hX2J1Zik7CisJfQorCisJLyogd2UgY2hlY2sgaWYgdGhpcyBzcGVj aWZpYyBhdHRhY2htZW50IHdhcyBhbHJlYWR5IGV4cG9ydGVkCisJICogdG8gdGhlIHNhbWUgZG9t YWluIGFuZCBpZiB5ZXMgYW5kIGl0J3MgdmFsaWQgc2d0X2luZm8sCisJICogaXQgcmV0dXJucyBo eXBlcl9kbWFidWZfaWQgb2YgcHJlLWV4cG9ydGVkIHNndF9pbmZvCisJICovCisJaGlkID0gaHlw ZXJfZG1hYnVmX2ZpbmRfaGlkX2V4cG9ydGVkKGRtYV9idWYsCisJCQkJCSAgICAgZXhwb3J0X3Jl bW90ZV9hdHRyLT5yZW1vdGVfZG9tYWluKTsKKworCWlmIChoaWQuaWQgIT0gLTEpIHsKKwkJcmV0 ID0gZmFzdHBhdGhfZXhwb3J0KGhpZCwgZXhwb3J0X3JlbW90ZV9hdHRyLT5zel9wcml2LAorCQkJ CSAgICAgIGV4cG9ydF9yZW1vdGVfYXR0ci0+cHJpdik7CisKKwkJLyogcmV0dXJuIGlmIGZhc3Rw YXRoX2V4cG9ydCBzdWNjZWVkcyBvcgorCQkgKiBnZXRzIHNvbWUgZmF0YWwgZXJyb3IKKwkJICov CisJCWlmIChyZXQgPD0gMCkgeworCQkJZG1hX2J1Zl9wdXQoZG1hX2J1Zik7CisJCQlleHBvcnRf cmVtb3RlX2F0dHItPmhpZCA9IGhpZDsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlhdHRh Y2htZW50ID0gZG1hX2J1Zl9hdHRhY2goZG1hX2J1ZiwgaHlfZHJ2X3ByaXYtPmRldik7CisJaWYg KElTX0VSUihhdHRhY2htZW50KSkgeworCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsICJjYW5u b3QgZ2V0IGF0dGFjaG1lbnRcbiIpOworCQlyZXQgPSBQVFJfRVJSKGF0dGFjaG1lbnQpOworCQln b3RvIGZhaWxfYXR0YWNoOworCX0KKworCXNndCA9IGRtYV9idWZfbWFwX2F0dGFjaG1lbnQoYXR0 YWNobWVudCwgRE1BX0JJRElSRUNUSU9OQUwpOworCisJaWYgKElTX0VSUihzZ3QpKSB7CisJCWRl dl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwgImNhbm5vdCBtYXAgYXR0YWNobWVudFxuIik7CisJCXJl dCA9IFBUUl9FUlIoc2d0KTsKKwkJZ290byBmYWlsX21hcF9hdHRhY2htZW50OworCX0KKworCWV4 cG9ydGVkID0ga2NhbGxvYygxLCBzaXplb2YoKmV4cG9ydGVkKSwgR0ZQX0tFUk5FTCk7CisKKwlp ZiAoIWV4cG9ydGVkKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9zZ3RfaW5mb19j cmVhdGlvbjsKKwl9CisKKwkvKiBwb3NzaWJsZSB0cnVuY2F0aW9uICovCisJaWYgKGV4cG9ydF9y ZW1vdGVfYXR0ci0+c3pfcHJpdiA+IE1BWF9TSVpFX1BSSVZfREFUQSkKKwkJZXhwb3J0ZWQtPnN6 X3ByaXYgPSBNQVhfU0laRV9QUklWX0RBVEE7CisJZWxzZQorCQlleHBvcnRlZC0+c3pfcHJpdiA9 IGV4cG9ydF9yZW1vdGVfYXR0ci0+c3pfcHJpdjsKKworCS8qIGNyZWF0aW5nIGJ1ZmZlciBmb3Ig cHJpdmF0ZSBkYXRhIG9mIGJ1ZmZlciAqLworCWlmIChleHBvcnRlZC0+c3pfcHJpdiAhPSAwKSB7 CisJCWV4cG9ydGVkLT5wcml2ID0ga2NhbGxvYygxLCBleHBvcnRlZC0+c3pfcHJpdiwgR0ZQX0tF Uk5FTCk7CisKKwkJaWYgKCFleHBvcnRlZC0+cHJpdikgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJ CWdvdG8gZmFpbF9wcml2X2NyZWF0aW9uOworCQl9CisJfSBlbHNlIHsKKwkJZGV2X2VycihoeV9k cnZfcHJpdi0+ZGV2LCAic2l6ZSBpcyAwXG4iKTsKKwl9CisKKwlleHBvcnRlZC0+aGlkID0gaHlw ZXJfZG1hYnVmX2dldF9oaWQoKTsKKworCS8qIG5vIG1vcmUgZXhwb3J0ZWQgZG1hYnVmIGFsbG93 ZWQgKi8KKwlpZiAoZXhwb3J0ZWQtPmhpZC5pZCA9PSAtMSkgeworCQlkZXZfZXJyKGh5X2Rydl9w cml2LT5kZXYsCisJCQkiZXhjZWVkcyBhbGxvd2VkIG51bWJlciBvZiBkbWFidWYgdG8gYmUgZXhw b3J0ZWRcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfc2d0X2luZm9fY3JlYXRp b247CisJfQorCisJZXhwb3J0ZWQtPnJkb21pZCA9IGV4cG9ydF9yZW1vdGVfYXR0ci0+cmVtb3Rl X2RvbWFpbjsKKwlleHBvcnRlZC0+ZG1hX2J1ZiA9IGRtYV9idWY7CisJZXhwb3J0ZWQtPnZhbGlk ID0gdHJ1ZTsKKworCWV4cG9ydGVkLT5hY3RpdmVfc2d0cyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVj dCBzZ3RfbGlzdCksIEdGUF9LRVJORUwpOworCWlmICghZXhwb3J0ZWQtPmFjdGl2ZV9zZ3RzKSB7 CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9tYXBfYWN0aXZlX3NndHM7CisJfQorCisJ ZXhwb3J0ZWQtPmFjdGl2ZV9hdHRhY2hlZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhdHRhY2ht ZW50X2xpc3QpLAorCQkJCQkgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFleHBvcnRlZC0+YWN0aXZl X2F0dGFjaGVkKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9tYXBfYWN0aXZlX2F0 dGFjaGVkOworCX0KKworCWV4cG9ydGVkLT52YV9rbWFwcGVkID0ga21hbGxvYyhzaXplb2Yoc3Ry dWN0IGttYXBfdmFkZHJfbGlzdCksCisJCQkJICAgICAgIEdGUF9LRVJORUwpOworCWlmICghZXhw b3J0ZWQtPnZhX2ttYXBwZWQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsX21hcF92 YV9rbWFwcGVkOworCX0KKworCWV4cG9ydGVkLT52YV92bWFwcGVkID0ga21hbGxvYyhzaXplb2Yo c3RydWN0IHZtYXBfdmFkZHJfbGlzdCksCisJCQkJICAgICAgIEdGUF9LRVJORUwpOworCWlmICgh ZXhwb3J0ZWQtPnZhX3ZtYXBwZWQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsX21h cF92YV92bWFwcGVkOworCX0KKworCWV4cG9ydGVkLT5hY3RpdmVfc2d0cy0+c2d0ID0gc2d0Owor CWV4cG9ydGVkLT5hY3RpdmVfYXR0YWNoZWQtPmF0dGFjaCA9IGF0dGFjaG1lbnQ7CisJZXhwb3J0 ZWQtPnZhX2ttYXBwZWQtPnZhZGRyID0gTlVMTDsKKwlleHBvcnRlZC0+dmFfdm1hcHBlZC0+dmFk ZHIgPSBOVUxMOworCisJLyogaW5pdGlhbGl6ZSBsaXN0IG9mIHNndCwgYXR0YWNobWVudCBhbmQg dmFkZHIgZm9yIGRtYWJ1ZiBzeW5jCisJICogdmlhIHNoYWRvdyBkbWEtYnVmCisJICovCisJSU5J VF9MSVNUX0hFQUQoJmV4cG9ydGVkLT5hY3RpdmVfc2d0cy0+bGlzdCk7CisJSU5JVF9MSVNUX0hF QUQoJmV4cG9ydGVkLT5hY3RpdmVfYXR0YWNoZWQtPmxpc3QpOworCUlOSVRfTElTVF9IRUFEKCZl eHBvcnRlZC0+dmFfa21hcHBlZC0+bGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmV4cG9ydGVkLT52 YV92bWFwcGVkLT5saXN0KTsKKworCS8qIGNvcHkgcHJpdmF0ZSBkYXRhIHRvIHNndF9pbmZvICov CisJcmV0ID0gY29weV9mcm9tX3VzZXIoZXhwb3J0ZWQtPnByaXYsIGV4cG9ydF9yZW1vdGVfYXR0 ci0+cHJpdiwKKwkJCSAgICAgZXhwb3J0ZWQtPnN6X3ByaXYpOworCisJaWYgKHJldCkgeworCQlk ZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCisJCQkiZmFpbGVkIHRvIGxvYWQgcHJpdmF0ZSBkYXRh XG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBmYWlsX2V4cG9ydDsKKwl9CisKKwlwZ19p bmZvID0gaHlwZXJfZG1hYnVmX2V4dF9wZ3Moc2d0KTsKKwlpZiAoIXBnX2luZm8pIHsKKwkJZGV2 X2VycihoeV9kcnZfcHJpdi0+ZGV2LAorCQkJImZhaWxlZCB0byBjb25zdHJ1Y3QgcGdfaW5mb1xu Iik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9leHBvcnQ7CisJfQorCisJZXhwb3J0 ZWQtPm5lbnRzID0gcGdfaW5mby0+bmVudHM7CisKKwkvKiBub3cgcmVnaXN0ZXIgaXQgdG8gZXhw b3J0IGxpc3QgKi8KKwloeXBlcl9kbWFidWZfcmVnaXN0ZXJfZXhwb3J0ZWQoZXhwb3J0ZWQpOwor CisJZXhwb3J0X3JlbW90ZV9hdHRyLT5oaWQgPSBleHBvcnRlZC0+aGlkOworCisJcmV0ID0gc2Vu ZF9leHBvcnRfbXNnKGV4cG9ydGVkLCBwZ19pbmZvKTsKKworCWlmIChyZXQgPCAwKSB7CisJCWRl dl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCSJmYWlsZWQgdG8gc2VuZCBvdXQgdGhlIGV4cG9y dCByZXF1ZXN0XG4iKTsKKwkJZ290byBmYWlsX3NlbmRfcmVxdWVzdDsKKwl9CisKKwkvKiBmcmVl IHBnX2luZm8gKi8KKwlrZnJlZShwZ19pbmZvLT5wZ3MpOworCWtmcmVlKHBnX2luZm8pOworCisJ ZXhwb3J0ZWQtPmZpbHAgPSBmaWxwOworCisJcmV0dXJuIHJldDsKKworLyogQ2xlYW4tdXAgaWYg ZXJyb3Igb2NjdXJzICovCisKK2ZhaWxfc2VuZF9yZXF1ZXN0OgorCWh5cGVyX2RtYWJ1Zl9yZW1v dmVfZXhwb3J0ZWQoZXhwb3J0ZWQtPmhpZCk7CisKKwkvKiBmcmVlIHBnX2luZm8gKi8KKwlrZnJl ZShwZ19pbmZvLT5wZ3MpOworCWtmcmVlKHBnX2luZm8pOworCitmYWlsX2V4cG9ydDoKKwlrZnJl ZShleHBvcnRlZC0+dmFfdm1hcHBlZCk7CisKK2ZhaWxfbWFwX3ZhX3ZtYXBwZWQ6CisJa2ZyZWUo ZXhwb3J0ZWQtPnZhX2ttYXBwZWQpOworCitmYWlsX21hcF92YV9rbWFwcGVkOgorCWtmcmVlKGV4 cG9ydGVkLT5hY3RpdmVfYXR0YWNoZWQpOworCitmYWlsX21hcF9hY3RpdmVfYXR0YWNoZWQ6CisJ a2ZyZWUoZXhwb3J0ZWQtPmFjdGl2ZV9zZ3RzKTsKKwlrZnJlZShleHBvcnRlZC0+cHJpdik7CisK K2ZhaWxfcHJpdl9jcmVhdGlvbjoKKwlrZnJlZShleHBvcnRlZCk7CisKK2ZhaWxfbWFwX2FjdGl2 ZV9zZ3RzOgorZmFpbF9zZ3RfaW5mb19jcmVhdGlvbjoKKwlkbWFfYnVmX3VubWFwX2F0dGFjaG1l bnQoYXR0YWNobWVudCwgc2d0LAorCQkJCSBETUFfQklESVJFQ1RJT05BTCk7CisKK2ZhaWxfbWFw X2F0dGFjaG1lbnQ6CisJZG1hX2J1Zl9kZXRhY2goZG1hX2J1ZiwgYXR0YWNobWVudCk7CisKK2Zh aWxfYXR0YWNoOgorCWRtYV9idWZfcHV0KGRtYV9idWYpOworCisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIGludCBoeXBlcl9kbWFidWZfZXhwb3J0X2ZkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxw LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBpb2N0bF9oeXBlcl9kbWFidWZfZXhwb3J0X2ZkICpl eHBvcnRfZmRfYXR0ciA9CisJCQkoc3RydWN0IGlvY3RsX2h5cGVyX2RtYWJ1Zl9leHBvcnRfZmQg KilkYXRhOworCXN0cnVjdCBoeXBlcl9kbWFidWZfYmtuZF9vcHMgKmJrbmRfb3BzID0gaHlfZHJ2 X3ByaXYtPmJrbmRfb3BzOworCXN0cnVjdCBpbXBvcnRlZF9zZ3RfaW5mbyAqaW1wb3J0ZWQ7CisJ c3RydWN0IGh5cGVyX2RtYWJ1Zl9yZXEgKnJlcTsKKwlzdHJ1Y3QgcGFnZSAqKmRhdGFfcGdzOwor CWludCBvcFs0XTsKKwlpbnQgaTsKKwlpbnQgcmV0ID0gMDsKKworCWRldl9kYmcoaHlfZHJ2X3By aXYtPmRldiwgIiVzIGVudHJ5XG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBsb29rIGZvciBkbWFidWYg Zm9yIHRoZSBpZCAqLworCWltcG9ydGVkID0gaHlwZXJfZG1hYnVmX2ZpbmRfaW1wb3J0ZWQoZXhw b3J0X2ZkX2F0dHItPmhpZCk7CisKKwkvKiBjYW4ndCBmaW5kIHNndCBmcm9tIHRoZSB0YWJsZSAq LworCWlmICghaW1wb3J0ZWQpIHsKKwkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LCAiY2FuJ3Qg ZmluZCB0aGUgZW50cnlcbiIpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwltdXRleF9sb2Nr KCZoeV9kcnZfcHJpdi0+bG9jayk7CisKKwlpbXBvcnRlZC0+aW1wb3J0ZXJzKys7CisKKwkvKiBz ZW5kIG5vdGlmaWNhdGlvbiBmb3IgZXhwb3J0X2ZkIHRvIGV4cG9ydGVyICovCisJb3BbMF0gPSBp bXBvcnRlZC0+aGlkLmlkOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJb3BbaSsxXSA9 IGltcG9ydGVkLT5oaWQucm5nX2tleVtpXTsKKworCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwg IkV4cG9ydCBGRCBvZiBidWZmZXIge2lkOiVkIGtleTolZCAlZCAlZH1cbiIsCisJCWltcG9ydGVk LT5oaWQuaWQsIGltcG9ydGVkLT5oaWQucm5nX2tleVswXSwKKwkJaW1wb3J0ZWQtPmhpZC5ybmdf a2V5WzFdLCBpbXBvcnRlZC0+aGlkLnJuZ19rZXlbMl0pOworCisJcmVxID0ga2NhbGxvYygxLCBz aXplb2YoKnJlcSksIEdGUF9LRVJORUwpOworCisJaWYgKCFyZXEpIHsKKwkJbXV0ZXhfdW5sb2Nr KCZoeV9kcnZfcHJpdi0+bG9jayk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWh5cGVyX2Rt YWJ1Zl9jcmVhdGVfcmVxKHJlcSwgSFlQRVJfRE1BQlVGX0VYUE9SVF9GRCwgJm9wWzBdKTsKKwor CXJldCA9IGJrbmRfb3BzLT5zZW5kX3JlcShIWVBFUl9ETUFCVUZfRE9NX0lEKGltcG9ydGVkLT5o aWQpLCByZXEsIHRydWUpOworCisJaWYgKHJldCA8IDApIHsKKwkJLyogaW4gY2FzZSBvZiB0aW1l b3V0IG90aGVyIGVuZCBldmVudHVhbGx5IHdpbGwgcmVjZWl2ZSByZXF1ZXN0LAorCQkgKiBzbyB3 ZSBuZWVkIHRvIHVuZG8gaXQKKwkJICovCisJCWh5cGVyX2RtYWJ1Zl9jcmVhdGVfcmVxKHJlcSwg SFlQRVJfRE1BQlVGX0VYUE9SVF9GRF9GQUlMRUQsCisJCQkJCSZvcFswXSk7CisJCWJrbmRfb3Bz LT5zZW5kX3JlcShIWVBFUl9ETUFCVUZfRE9NX0lEKGltcG9ydGVkLT5oaWQpLCByZXEsIGZhbHNl KTsKKwkJa2ZyZWUocmVxKTsKKwkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAorCQkJIkZhaWxl ZCB0byBjcmVhdGUgc2d0IG9yIG5vdGlmeSBleHBvcnRlclxuIik7CisJCWltcG9ydGVkLT5pbXBv cnRlcnMtLTsKKwkJbXV0ZXhfdW5sb2NrKCZoeV9kcnZfcHJpdi0+bG9jayk7CisJCXJldHVybiBy ZXQ7CisJfQorCisJa2ZyZWUocmVxKTsKKworCWlmIChyZXQgPT0gSFlQRVJfRE1BQlVGX1JFUV9F UlJPUikgeworCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCisJCQkiQnVmZmVyIGludmFsaWQg e2lkOiVkIGtleTolZCAlZCAlZH0sIGNhbm5vdCBpbXBvcnRcbiIsCisJCQlpbXBvcnRlZC0+aGlk LmlkLCBpbXBvcnRlZC0+aGlkLnJuZ19rZXlbMF0sCisJCQlpbXBvcnRlZC0+aGlkLnJuZ19rZXlb MV0sIGltcG9ydGVkLT5oaWQucm5nX2tleVsyXSk7CisKKwkJaW1wb3J0ZWQtPmltcG9ydGVycy0t OworCQltdXRleF91bmxvY2soJmh5X2Rydl9wcml2LT5sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7 CisJfQorCisJcmV0ID0gMDsKKworCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwKKwkJIkZvdW5k IGJ1ZmZlciBncmVmICVkIG9mZiAlZFxuIiwKKwkJaW1wb3J0ZWQtPnJlZl9oYW5kbGUsIGltcG9y dGVkLT5mcnN0X29mc3QpOworCisJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LAorCQkibGFzdCBs ZW4gJWQgbmVudHMgJWQgZG9tYWluICVkXG4iLAorCQlpbXBvcnRlZC0+bGFzdF9sZW4sIGltcG9y dGVkLT5uZW50cywKKwkJSFlQRVJfRE1BQlVGX0RPTV9JRChpbXBvcnRlZC0+aGlkKSk7CisKKwlp ZiAoIWltcG9ydGVkLT5zZ3QpIHsKKwkJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LAorCQkJImJ1 ZmZlciB7aWQ6JWQga2V5OiVkICVkICVkfSBwYWdlcyBub3QgbWFwcGVkIHlldFxuIiwKKwkJCWlt cG9ydGVkLT5oaWQuaWQsIGltcG9ydGVkLT5oaWQucm5nX2tleVswXSwKKwkJCWltcG9ydGVkLT5o aWQucm5nX2tleVsxXSwgaW1wb3J0ZWQtPmhpZC5ybmdfa2V5WzJdKTsKKworCQlkYXRhX3BncyA9 IGJrbmRfb3BzLT5tYXBfc2hhcmVkX3BhZ2VzKGltcG9ydGVkLT5yZWZfaGFuZGxlLAorCQkJCQlI WVBFUl9ETUFCVUZfRE9NX0lEKGltcG9ydGVkLT5oaWQpLAorCQkJCQlpbXBvcnRlZC0+bmVudHMs CisJCQkJCSZpbXBvcnRlZC0+cmVmc19pbmZvKTsKKworCQlpZiAoIWRhdGFfcGdzKSB7CisJCQlk ZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCisJCQkJImNhbid0IG1hcCBwYWdlcyBoaWQge2lkOiVk IGtleTolZCAlZCAlZH1cbiIsCisJCQkJaW1wb3J0ZWQtPmhpZC5pZCwgaW1wb3J0ZWQtPmhpZC5y bmdfa2V5WzBdLAorCQkJCWltcG9ydGVkLT5oaWQucm5nX2tleVsxXSwKKwkJCQlpbXBvcnRlZC0+ aGlkLnJuZ19rZXlbMl0pOworCisJCQlpbXBvcnRlZC0+aW1wb3J0ZXJzLS07CisKKwkJCXJlcSA9 IGtjYWxsb2MoMSwgc2l6ZW9mKCpyZXEpLCBHRlBfS0VSTkVMKTsKKworCQkJaWYgKCFyZXEpIHsK KwkJCQltdXRleF91bmxvY2soJmh5X2Rydl9wcml2LT5sb2NrKTsKKwkJCQlyZXR1cm4gLUVOT01F TTsKKwkJCX0KKworCQkJaHlwZXJfZG1hYnVmX2NyZWF0ZV9yZXEocmVxLAorCQkJCQkJSFlQRVJf RE1BQlVGX0VYUE9SVF9GRF9GQUlMRUQsCisJCQkJCQkmb3BbMF0pOworCQkJYmtuZF9vcHMtPnNl bmRfcmVxKEhZUEVSX0RNQUJVRl9ET01fSUQoaW1wb3J0ZWQtPmhpZCksIHJlcSwKKwkJCQkJCQkg IGZhbHNlKTsKKwkJCWtmcmVlKHJlcSk7CisJCQltdXRleF91bmxvY2soJmh5X2Rydl9wcml2LT5s b2NrKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaW1wb3J0ZWQtPnNndCA9IGh5cGVy X2RtYWJ1Zl9jcmVhdGVfc2d0KGRhdGFfcGdzLAorCQkJCQkJCWltcG9ydGVkLT5mcnN0X29mc3Qs CisJCQkJCQkJaW1wb3J0ZWQtPmxhc3RfbGVuLAorCQkJCQkJCWltcG9ydGVkLT5uZW50cyk7CisK Kwl9CisKKwlleHBvcnRfZmRfYXR0ci0+ZmQgPSBoeXBlcl9kbWFidWZfZXhwb3J0X2ZkKGltcG9y dGVkLAorCQkJCQkJICAgIGV4cG9ydF9mZF9hdHRyLT5mbGFncyk7CisKKwlpZiAoZXhwb3J0X2Zk X2F0dHItPmZkIDwgMCkgeworCQkvKiBmYWlsIHRvIGdldCBmZCAqLworCQlyZXQgPSBleHBvcnRf ZmRfYXR0ci0+ZmQ7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZoeV9kcnZfcHJpdi0+bG9jayk7CisK KwlkZXZfZGJnKGh5X2Rydl9wcml2LT5kZXYsICIlcyBleGl0XG4iLCBfX2Z1bmNfXyk7CisJcmV0 dXJuIHJldDsKK30KKworLyogdW5leHBvcnQgZG1hYnVmIGZyb20gdGhlIGRhdGFiYXNlIGFuZCBz ZW5kIGludCByZXEgdG8gdGhlIHNvdXJjZSBkb21haW4KKyAqIHRvIHVubWFwIGl0LgorICovCitz dGF0aWMgdm9pZCBkZWxheWVkX3VuZXhwb3J0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sK KwlzdHJ1Y3QgaHlwZXJfZG1hYnVmX3JlcSAqcmVxOworCXN0cnVjdCBoeXBlcl9kbWFidWZfYmtu ZF9vcHMgKmJrbmRfb3BzID0gaHlfZHJ2X3ByaXYtPmJrbmRfb3BzOworCXN0cnVjdCBleHBvcnRl ZF9zZ3RfaW5mbyAqZXhwb3J0ZWQgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGV4cG9y dGVkX3NndF9pbmZvLCB1bmV4cG9ydC53b3JrKTsKKwlpbnQgb3BbNF07CisJaW50IGksIHJldDsK KworCWlmICghZXhwb3J0ZWQpCisJCXJldHVybjsKKworCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRl diwKKwkJIk1hcmtpbmcgYnVmZmVyIHtpZDolZCBrZXk6JWQgJWQgJWR9IGFzIGludmFsaWRcbiIs CisJCWV4cG9ydGVkLT5oaWQuaWQsIGV4cG9ydGVkLT5oaWQucm5nX2tleVswXSwKKwkJZXhwb3J0 ZWQtPmhpZC5ybmdfa2V5WzFdLCBleHBvcnRlZC0+aGlkLnJuZ19rZXlbMl0pOworCisJLyogbm8g bG9uZ2VyIHZhbGlkICovCisJZXhwb3J0ZWQtPnZhbGlkID0gZmFsc2U7CisKKwlyZXEgPSBrY2Fs bG9jKDEsIHNpemVvZigqcmVxKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXJlcSkKKwkJcmV0dXJu OworCisJb3BbMF0gPSBleHBvcnRlZC0+aGlkLmlkOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkr KykKKwkJb3BbaSsxXSA9IGV4cG9ydGVkLT5oaWQucm5nX2tleVtpXTsKKworCWh5cGVyX2RtYWJ1 Zl9jcmVhdGVfcmVxKHJlcSwgSFlQRVJfRE1BQlVGX05PVElGWV9VTkVYUE9SVCwgJm9wWzBdKTsK KworCS8qIE5vdyBzZW5kIHVuZXhwb3J0IHJlcXVlc3QgdG8gcmVtb3RlIGRvbWFpbiwgbWFya2lu ZworCSAqIHRoYXQgYnVmZmVyIHNob3VsZCBub3QgYmUgdXNlZCBhbnltb3JlCisJICovCisJcmV0 ID0gYmtuZF9vcHMtPnNlbmRfcmVxKGV4cG9ydGVkLT5yZG9taWQsIHJlcSwgdHJ1ZSk7CisJaWYg KHJldCA8IDApIHsKKwkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAorCQkJInVuZXhwb3J0IG1l c3NhZ2UgZm9yIGJ1ZmZlciB7aWQ6JWQga2V5OiVkICVkICVkfSBmYWlsZWRcbiIsCisJCQlleHBv cnRlZC0+aGlkLmlkLCBleHBvcnRlZC0+aGlkLnJuZ19rZXlbMF0sCisJCQlleHBvcnRlZC0+aGlk LnJuZ19rZXlbMV0sIGV4cG9ydGVkLT5oaWQucm5nX2tleVsyXSk7CisJfQorCisJa2ZyZWUocmVx KTsKKwlleHBvcnRlZC0+dW5leHBvcnRfc2NoZWQgPSBmYWxzZTsKKworCS8qIEltbWVkaWF0ZWx5 IGNsZWFuLXVwIGlmIGl0IGhhcyBuZXZlciBiZWVuIGV4cG9ydGVkIGJ5IGltcG9ydGVyCisJICog KHNvIG5vIFNHVCBpcyBjb25zdHJ1Y3RlZCBvbiBpbXBvcnRlcikuCisJICogY2xlYW4gaXQgdXAg bGF0ZXIgaW4gcmVtb3RlIHN5bmMgd2hlbiBmaW5hbCByZWxlYXNlIG9wcworCSAqIGlzIGNhbGxl ZCAoaW1wb3J0ZXIgZG9lcyB0aGlzIG9ubHkgd2hlbiB0aGVyZSdzIG5vCisJICogbm8gY29uc3Vt ZXIgb2YgbG9jYWxseSBleHBvcnRlZCBGRHMpCisJICovCisJaWYgKGV4cG9ydGVkLT5hY3RpdmUg PT0gMCkgeworCQlkZXZfZGJnKGh5X2Rydl9wcml2LT5kZXYsCisJCQkiY2xhbmluZyB1cCBidWZm ZXIge2lkOiVkIGtleTolZCAlZCAlZH0gY29tcGxldGx5XG4iLAorCQkJZXhwb3J0ZWQtPmhpZC5p ZCwgZXhwb3J0ZWQtPmhpZC5ybmdfa2V5WzBdLAorCQkJZXhwb3J0ZWQtPmhpZC5ybmdfa2V5WzFd LCBleHBvcnRlZC0+aGlkLnJuZ19rZXlbMl0pOworCisJCWh5cGVyX2RtYWJ1Zl9jbGVhbnVwX3Nn dF9pbmZvKGV4cG9ydGVkLCBmYWxzZSk7CisJCWh5cGVyX2RtYWJ1Zl9yZW1vdmVfZXhwb3J0ZWQo ZXhwb3J0ZWQtPmhpZCk7CisKKwkJLyogcmVnaXN0ZXIgaHlwZXJfZG1hYnVmX2lkIHRvIHRoZSBs aXN0IGZvciByZXVzZSAqLworCQloeXBlcl9kbWFidWZfc3RvcmVfaGlkKGV4cG9ydGVkLT5oaWQp OworCisJCWlmIChleHBvcnRlZC0+c3pfcHJpdiA+IDAgJiYgIWV4cG9ydGVkLT5wcml2KQorCQkJ a2ZyZWUoZXhwb3J0ZWQtPnByaXYpOworCisJCWtmcmVlKGV4cG9ydGVkKTsKKwl9Cit9CisKKy8q IFNjaGVkdWxlIHVuZXhwb3J0IG9mIGRtYWJ1Zi4KKyAqLworaW50IGh5cGVyX2RtYWJ1Zl91bmV4 cG9ydF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaW9j dGxfaHlwZXJfZG1hYnVmX3VuZXhwb3J0ICp1bmV4cG9ydF9hdHRyID0KKwkJCShzdHJ1Y3QgaW9j dGxfaHlwZXJfZG1hYnVmX3VuZXhwb3J0ICopZGF0YTsKKwlzdHJ1Y3QgZXhwb3J0ZWRfc2d0X2lu Zm8gKmV4cG9ydGVkOworCisJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LCAiJXMgZW50cnlcbiIs IF9fZnVuY19fKTsKKworCS8qIGZpbmQgZG1hYnVmIGluIGV4cG9ydCBsaXN0ICovCisJZXhwb3J0 ZWQgPSBoeXBlcl9kbWFidWZfZmluZF9leHBvcnRlZCh1bmV4cG9ydF9hdHRyLT5oaWQpOworCisJ ZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LAorCQkic2NoZWR1bGluZyB1bmV4cG9ydCBvZiBidWZm ZXIge2lkOiVkIGtleTolZCAlZCAlZH1cbiIsCisJCXVuZXhwb3J0X2F0dHItPmhpZC5pZCwgdW5l eHBvcnRfYXR0ci0+aGlkLnJuZ19rZXlbMF0sCisJCXVuZXhwb3J0X2F0dHItPmhpZC5ybmdfa2V5 WzFdLCB1bmV4cG9ydF9hdHRyLT5oaWQucm5nX2tleVsyXSk7CisKKwkvKiBmYWlsZWQgdG8gZmlu ZCBjb3JyZXNwb25kaW5nIGVudHJ5IGluIGV4cG9ydCBsaXN0ICovCisJaWYgKGV4cG9ydGVkID09 IE5VTEwpIHsKKwkJdW5leHBvcnRfYXR0ci0+c3RhdHVzID0gLUVOT0VOVDsKKwkJcmV0dXJuIC1F Tk9FTlQ7CisJfQorCisJaWYgKGV4cG9ydGVkLT51bmV4cG9ydF9zY2hlZCkKKwkJcmV0dXJuIDA7 CisKKwlleHBvcnRlZC0+dW5leHBvcnRfc2NoZWQgPSB0cnVlOworCUlOSVRfREVMQVlFRF9XT1JL KCZleHBvcnRlZC0+dW5leHBvcnQsIGRlbGF5ZWRfdW5leHBvcnQpOworCXNjaGVkdWxlX2RlbGF5 ZWRfd29yaygmZXhwb3J0ZWQtPnVuZXhwb3J0LAorCQkJICAgICAgbXNlY3NfdG9famlmZmllcyh1 bmV4cG9ydF9hdHRyLT5kZWxheV9tcykpOworCisJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LCAi JXMgZXhpdFxuIiwgX19mdW5jX18pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGh5cGVy X2RtYWJ1Zl9xdWVyeV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqZGF0YSkKK3sKKwlz dHJ1Y3QgaW9jdGxfaHlwZXJfZG1hYnVmX3F1ZXJ5ICpxdWVyeV9hdHRyID0KKwkJCShzdHJ1Y3Qg aW9jdGxfaHlwZXJfZG1hYnVmX3F1ZXJ5ICopZGF0YTsKKwlzdHJ1Y3QgZXhwb3J0ZWRfc2d0X2lu Zm8gKmV4cG9ydGVkID0gTlVMTDsKKwlzdHJ1Y3QgaW1wb3J0ZWRfc2d0X2luZm8gKmltcG9ydGVk ID0gTlVMTDsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChIWVBFUl9ETUFCVUZfRE9NX0lEKHF1ZXJ5 X2F0dHItPmhpZCkgPT0gaHlfZHJ2X3ByaXYtPmRvbWlkKSB7CisJCS8qIHF1ZXJ5IGZvciBleHBv cnRlZCBkbWFidWYgKi8KKwkJZXhwb3J0ZWQgPSBoeXBlcl9kbWFidWZfZmluZF9leHBvcnRlZChx dWVyeV9hdHRyLT5oaWQpOworCQlpZiAoZXhwb3J0ZWQpIHsKKwkJCXJldCA9IGh5cGVyX2RtYWJ1 Zl9xdWVyeV9leHBvcnRlZChleHBvcnRlZCwKKwkJCQkJCQkgIHF1ZXJ5X2F0dHItPml0ZW0sCisJ CQkJCQkJICAmcXVlcnlfYXR0ci0+aW5mbyk7CisJCX0gZWxzZSB7CisJCQlkZXZfZXJyKGh5X2Ry dl9wcml2LT5kZXYsCisJCQkJImhpZCB7aWQ6JWQga2V5OiVkICVkICVkfSBub3QgaW4gZXhwIGxp c3RcbiIsCisJCQkJcXVlcnlfYXR0ci0+aGlkLmlkLAorCQkJCXF1ZXJ5X2F0dHItPmhpZC5ybmdf a2V5WzBdLAorCQkJCXF1ZXJ5X2F0dHItPmhpZC5ybmdfa2V5WzFdLAorCQkJCXF1ZXJ5X2F0dHIt PmhpZC5ybmdfa2V5WzJdKTsKKwkJCXJldHVybiAtRU5PRU5UOworCQl9CisJfSBlbHNlIHsKKwkJ LyogcXVlcnkgZm9yIGltcG9ydGVkIGRtYWJ1ZiAqLworCQlpbXBvcnRlZCA9IGh5cGVyX2RtYWJ1 Zl9maW5kX2ltcG9ydGVkKHF1ZXJ5X2F0dHItPmhpZCk7CisJCWlmIChpbXBvcnRlZCkgeworCQkJ cmV0ID0gaHlwZXJfZG1hYnVmX3F1ZXJ5X2ltcG9ydGVkKGltcG9ydGVkLAorCQkJCQkJCSAgcXVl cnlfYXR0ci0+aXRlbSwKKwkJCQkJCQkgICZxdWVyeV9hdHRyLT5pbmZvKTsKKwkJfSBlbHNlIHsK KwkJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCQkiaGlkIHtpZDolZCBrZXk6JWQgJWQg JWR9IG5vdCBpbiBpbXAgbGlzdFxuIiwKKwkJCQlxdWVyeV9hdHRyLT5oaWQuaWQsCisJCQkJcXVl cnlfYXR0ci0+aGlkLnJuZ19rZXlbMF0sCisJCQkJcXVlcnlfYXR0ci0+aGlkLnJuZ19rZXlbMV0s CisJCQkJcXVlcnlfYXR0ci0+aGlkLnJuZ19rZXlbMl0pOworCQkJcmV0dXJuIC1FTk9FTlQ7CisJ CX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitjb25zdCBzdHJ1Y3QgaHlwZXJfZG1hYnVmX2lv Y3RsX2Rlc2MgaHlwZXJfZG1hYnVmX2lvY3Rsc1tdID0geworCUhZUEVSX0RNQUJVRl9JT0NUTF9E RUYoSU9DVExfSFlQRVJfRE1BQlVGX1RYX0NIX1NFVFVQLAorCQkJICAgICAgIGh5cGVyX2RtYWJ1 Zl90eF9jaF9zZXR1cF9pb2N0bCwgMCksCisJSFlQRVJfRE1BQlVGX0lPQ1RMX0RFRihJT0NUTF9I WVBFUl9ETUFCVUZfUlhfQ0hfU0VUVVAsCisJCQkgICAgICAgaHlwZXJfZG1hYnVmX3J4X2NoX3Nl dHVwX2lvY3RsLCAwKSwKKwlIWVBFUl9ETUFCVUZfSU9DVExfREVGKElPQ1RMX0hZUEVSX0RNQUJV Rl9FWFBPUlRfUkVNT1RFLAorCQkJICAgICAgIGh5cGVyX2RtYWJ1Zl9leHBvcnRfcmVtb3RlX2lv Y3RsLCAwKSwKKwlIWVBFUl9ETUFCVUZfSU9DVExfREVGKElPQ1RMX0hZUEVSX0RNQUJVRl9FWFBP UlRfRkQsCisJCQkgICAgICAgaHlwZXJfZG1hYnVmX2V4cG9ydF9mZF9pb2N0bCwgMCksCisJSFlQ RVJfRE1BQlVGX0lPQ1RMX0RFRihJT0NUTF9IWVBFUl9ETUFCVUZfVU5FWFBPUlQsCisJCQkgICAg ICAgaHlwZXJfZG1hYnVmX3VuZXhwb3J0X2lvY3RsLCAwKSwKKwlIWVBFUl9ETUFCVUZfSU9DVExf REVGKElPQ1RMX0hZUEVSX0RNQUJVRl9RVUVSWSwKKwkJCSAgICAgICBoeXBlcl9kbWFidWZfcXVl cnlfaW9jdGwsIDApLAorfTsKKworbG9uZyBoeXBlcl9kbWFidWZfaW9jdGwoc3RydWN0IGZpbGUg KmZpbHAsCisJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIHBhcmFtKQoreworCWNv bnN0IHN0cnVjdCBoeXBlcl9kbWFidWZfaW9jdGxfZGVzYyAqaW9jdGwgPSBOVUxMOworCXVuc2ln bmVkIGludCBuciA9IF9JT0NfTlIoY21kKTsKKwlpbnQgcmV0OworCWh5cGVyX2RtYWJ1Zl9pb2N0 bF90IGZ1bmM7CisJY2hhciAqa2RhdGE7CisKKwlpZiAobnIgPiBBUlJBWV9TSVpFKGh5cGVyX2Rt YWJ1Zl9pb2N0bHMpKSB7CisJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwgImludmFsaWQgaW9j dGxcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpb2N0bCA9ICZoeXBlcl9kbWFidWZf aW9jdGxzW25yXTsKKworCWZ1bmMgPSBpb2N0bC0+ZnVuYzsKKworCWlmICh1bmxpa2VseSghZnVu YykpIHsKKwkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LCAibm8gZnVuY3Rpb25cbiIpOworCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlrZGF0YSA9IGttYWxsb2MoX0lPQ19TSVpFKGNtZCksIEdG UF9LRVJORUwpOworCWlmICgha2RhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGNvcHlf ZnJvbV91c2VyKGtkYXRhLCAodm9pZCBfX3VzZXIgKilwYXJhbSwKKwkJCSAgIF9JT0NfU0laRShj bWQpKSAhPSAwKSB7CisJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCSJmYWlsZWQgdG8g Y29weSBmcm9tIHVzZXIgYXJndW1lbnRzXG4iKTsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBp b2N0bF9lcnJvcjsKKwl9CisKKwlyZXQgPSBmdW5jKGZpbHAsIGtkYXRhKTsKKworCWlmIChjb3B5 X3RvX3VzZXIoKHZvaWQgX191c2VyICopcGFyYW0sIGtkYXRhLAorCQkJIF9JT0NfU0laRShjbWQp KSAhPSAwKSB7CisJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCSJmYWlsZWQgdG8gY29w eSB0byB1c2VyIGFyZ3VtZW50c1xuIik7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gaW9jdGxf ZXJyb3I7CisJfQorCitpb2N0bF9lcnJvcjoKKwlrZnJlZShrZGF0YSk7CisKKwlyZXR1cm4gcmV0 OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFi dWZfaW9jdGwuaCBiL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2lv Y3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk5MWE4NwotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2lv Y3RsLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE3IEludGVsIENv cnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisg KiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg d2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNv cGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQor ICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp cyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNo YWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Yg dGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBI T0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT RSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgor ICoKKyAqLworCisjaWZuZGVmIF9fSFlQRVJfRE1BQlVGX0lPQ1RMX0hfXworI2RlZmluZSBfX0hZ UEVSX0RNQUJVRl9JT0NUTF9IX18KKwordHlwZWRlZiBpbnQgKCpoeXBlcl9kbWFidWZfaW9jdGxf dCkoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKmRhdGEpOworCitzdHJ1Y3QgaHlwZXJfZG1hYnVm X2lvY3RsX2Rlc2MgeworCXVuc2lnbmVkIGludCBjbWQ7CisJaW50IGZsYWdzOworCWh5cGVyX2Rt YWJ1Zl9pb2N0bF90IGZ1bmM7CisJY29uc3QgY2hhciAqbmFtZTsKK307CisKKyNkZWZpbmUgSFlQ RVJfRE1BQlVGX0lPQ1RMX0RFRihpb2N0bCwgX2Z1bmMsIF9mbGFncykJXAorCVtfSU9DX05SKGlv Y3RsKV0gPSB7CQkJCVwKKwkJCS5jbWQgPSBpb2N0bCwJCQlcCisJCQkuZnVuYyA9IF9mdW5jLAkJ CVwKKwkJCS5mbGFncyA9IF9mbGFncywJCVwKKwkJCS5uYW1lID0gI2lvY3RsCQkJXAorCX0KKwor bG9uZyBoeXBlcl9kbWFidWZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCisJCQl1bnNpZ25lZCBp bnQgY21kLCB1bnNpZ25lZCBsb25nIHBhcmFtKTsKKworaW50IGh5cGVyX2RtYWJ1Zl91bmV4cG9y dF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqZGF0YSk7CisKKyNlbmRpZiAvL19fSFlQ RVJfRE1BQlVGX0lPQ1RMX0hfXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2Rt YWJ1Zi9oeXBlcl9kbWFidWZfbGlzdC5jIGIvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9o eXBlcl9kbWFidWZfbGlzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJi YTZkMWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5 cGVyX2RtYWJ1Zl9saXN0LmMKQEAgLTAsMCArMSwyOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkg MjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9m IHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJT b2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNv cHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0 byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICog cGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs IHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBS T1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IK KyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug QU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBP UiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBP VEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9S VCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9O IFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRI RSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgRG9uZ3dvbiBLaW0gPGRvbmd3b24u a2ltQGludGVsLmNvbT4KKyAqICAgIE1hdGV1c3ogUG9scm9sYSA8bWF0ZXVzengucG90cm9sYUBp bnRlbC5jb20+CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRl IDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51 eC9jZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvaGFzaHRhYmxlLmg+CisjaW5jbHVkZSAiaHlwZXJf ZG1hYnVmX2Rydi5oIgorI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9saXN0LmgiCisjaW5jbHVkZSAi aHlwZXJfZG1hYnVmX2lkLmgiCisjaW5jbHVkZSAiaHlwZXJfZG1hYnVmX2V2ZW50LmgiCisKK0RF Q0xBUkVfSEFTSFRBQkxFKGh5cGVyX2RtYWJ1Zl9oYXNoX2ltcG9ydGVkLCBNQVhfRU5UUllfSU1Q T1JURUQpOworREVDTEFSRV9IQVNIVEFCTEUoaHlwZXJfZG1hYnVmX2hhc2hfZXhwb3J0ZWQsIE1B WF9FTlRSWV9FWFBPUlRFRCk7CisKKyNpZmRlZiBDT05GSUdfSFlQRVJfRE1BQlVGX1NZU0ZTCitz dGF0aWMgc3NpemVfdCBoeXBlcl9kbWFidWZfaW1wb3J0ZWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpk cnYsCisJCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgY2hhciAq YnVmKQoreworCXN0cnVjdCBsaXN0X2VudHJ5X2ltcG9ydGVkICppbmZvX2VudHJ5OworCWludCBi a3Q7CisJc3NpemVfdCBjb3VudCA9IDA7CisJc2l6ZV90IHRvdGFsID0gMDsKKworCWhhc2hfZm9y X2VhY2goaHlwZXJfZG1hYnVmX2hhc2hfaW1wb3J0ZWQsIGJrdCwgaW5mb19lbnRyeSwgbm9kZSkg eworCQloeXBlcl9kbWFidWZfaWRfdCBoaWQgPSBpbmZvX2VudHJ5LT5pbXBvcnRlZC0+aGlkOwor CQlpbnQgbmVudHMgPSBpbmZvX2VudHJ5LT5pbXBvcnRlZC0+bmVudHM7CisJCWJvb2wgdmFsaWQg PSBpbmZvX2VudHJ5LT5pbXBvcnRlZC0+dmFsaWQ7CisJCWludCBudW1faW1wb3J0ZXJzID0gaW5m b19lbnRyeS0+aW1wb3J0ZWQtPmltcG9ydGVyczsKKworCQl0b3RhbCArPSBuZW50czsKKwkJY291 bnQgKz0gc2NucHJpbnRmKGJ1ZiArIGNvdW50LCBQQUdFX1NJWkUgLSBjb3VudCwKKwkJCQkiaGlk OnslZCAlZCAlZCAlZH0sIG5lbnQ6JWQsIHY6JWMsIG51bWk6JWRcbiIsCisJCQkJaGlkLmlkLCBo aWQucm5nX2tleVswXSwgaGlkLnJuZ19rZXlbMV0sCisJCQkJaGlkLnJuZ19rZXlbMl0sIG5lbnRz LCAodmFsaWQgPyAndCcgOiAnZicpLAorCQkJCW51bV9pbXBvcnRlcnMpOworCX0KKwljb3VudCAr PSBzY25wcmludGYoYnVmICsgY291bnQsIFBBR0VfU0laRSAtIGNvdW50LAorCQkJICAgInRvdGFs IG5lbnRzOiAlbHVcbiIsIHRvdGFsKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNz aXplX3QgaHlwZXJfZG1hYnVmX2V4cG9ydGVkX3Nob3coc3RydWN0IGRldmljZSAqZHJ2LAorCQkJ CQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgIGNoYXIgKmJ1ZikKK3sK KwlzdHJ1Y3QgbGlzdF9lbnRyeV9leHBvcnRlZCAqaW5mb19lbnRyeTsKKwlpbnQgYmt0OworCXNz aXplX3QgY291bnQgPSAwOworCXNpemVfdCB0b3RhbCA9IDA7CisKKwloYXNoX2Zvcl9lYWNoKGh5 cGVyX2RtYWJ1Zl9oYXNoX2V4cG9ydGVkLCBia3QsIGluZm9fZW50cnksIG5vZGUpIHsKKwkJaHlw ZXJfZG1hYnVmX2lkX3QgaGlkID0gaW5mb19lbnRyeS0+ZXhwb3J0ZWQtPmhpZDsKKwkJaW50IG5l bnRzID0gaW5mb19lbnRyeS0+ZXhwb3J0ZWQtPm5lbnRzOworCQlib29sIHZhbGlkID0gaW5mb19l bnRyeS0+ZXhwb3J0ZWQtPnZhbGlkOworCQlpbnQgaW1wb3J0ZXJfZXhwb3J0ZWQgPSBpbmZvX2Vu dHJ5LT5leHBvcnRlZC0+YWN0aXZlOworCisJCXRvdGFsICs9IG5lbnRzOworCQljb3VudCArPSBz Y25wcmludGYoYnVmICsgY291bnQsIFBBR0VfU0laRSAtIGNvdW50LAorCQkJCSAgICJoaWQ6eyVk ICVkICVkICVkfSwgbmVudDolZCwgdjolYywgaWU6JWRcbiIsCisJCQkJICAgaGlkLmlkLCBoaWQu cm5nX2tleVswXSwgaGlkLnJuZ19rZXlbMV0sCisJCQkJICAgaGlkLnJuZ19rZXlbMl0sIG5lbnRz LCAodmFsaWQgPyAndCcgOiAnZicpLAorCQkJCSAgIGltcG9ydGVyX2V4cG9ydGVkKTsKKwl9CisJ Y291bnQgKz0gc2NucHJpbnRmKGJ1ZiArIGNvdW50LCBQQUdFX1NJWkUgLSBjb3VudCwKKwkJCSAg ICJ0b3RhbCBuZW50czogJWx1XG4iLCB0b3RhbCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0 YXRpYyBERVZJQ0VfQVRUUihpbXBvcnRlZCwgMDQwMCwgaHlwZXJfZG1hYnVmX2ltcG9ydGVkX3No b3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGV4cG9ydGVkLCAwNDAwLCBoeXBlcl9kbWFi dWZfZXhwb3J0ZWRfc2hvdywgTlVMTCk7CisKK2ludCBoeXBlcl9kbWFidWZfcmVnaXN0ZXJfc3lz ZnMoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCBlcnI7CisKKwllcnIgPSBkZXZpY2VfY3Jl YXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaW1wb3J0ZWQpOworCWlmIChlcnIgPCAwKQorCQlnb3Rv IGVycjE7CisJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2V4cG9ydGVk KTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnIyOworCisJcmV0dXJuIDA7CitlcnIyOgorCWRl dmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9pbXBvcnRlZCk7CitlcnIxOgorCXJldHVy biAtMTsKK30KKworaW50IGh5cGVyX2RtYWJ1Zl91bnJlZ2lzdGVyX3N5c2ZzKHN0cnVjdCBkZXZp Y2UgKmRldikKK3sKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaW1wb3J0ZWQp OworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9leHBvcnRlZCk7CisJcmV0dXJu IDA7Cit9CisKKyNlbmRpZgorCitpbnQgaHlwZXJfZG1hYnVmX3RhYmxlX2luaXQodm9pZCkKK3sK KwloYXNoX2luaXQoaHlwZXJfZG1hYnVmX2hhc2hfaW1wb3J0ZWQpOworCWhhc2hfaW5pdChoeXBl cl9kbWFidWZfaGFzaF9leHBvcnRlZCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBoeXBlcl9kbWFi dWZfdGFibGVfZGVzdHJveSh2b2lkKQoreworCS8qIFRPRE86IGNsZWFudXAgaHlwZXJfZG1hYnVm X2hhc2hfaW1wb3J0ZWQKKwkgKiBhbmQgaHlwZXJfZG1hYnVmX2hhc2hfZXhwb3J0ZWQKKwkgKi8K KwlyZXR1cm4gMDsKK30KKworaW50IGh5cGVyX2RtYWJ1Zl9yZWdpc3Rlcl9leHBvcnRlZChzdHJ1 Y3QgZXhwb3J0ZWRfc2d0X2luZm8gKmV4cG9ydGVkKQoreworCXN0cnVjdCBsaXN0X2VudHJ5X2V4 cG9ydGVkICppbmZvX2VudHJ5OworCisJaW5mb19lbnRyeSA9IGttYWxsb2Moc2l6ZW9mKCppbmZv X2VudHJ5KSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWluZm9fZW50cnkpCisJCXJldHVybiAtRU5P TUVNOworCisJaW5mb19lbnRyeS0+ZXhwb3J0ZWQgPSBleHBvcnRlZDsKKworCWhhc2hfYWRkKGh5 cGVyX2RtYWJ1Zl9oYXNoX2V4cG9ydGVkLCAmaW5mb19lbnRyeS0+bm9kZSwKKwkJIGluZm9fZW50 cnktPmV4cG9ydGVkLT5oaWQuaWQpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBoeXBlcl9kbWFi dWZfcmVnaXN0ZXJfaW1wb3J0ZWQoc3RydWN0IGltcG9ydGVkX3NndF9pbmZvICppbXBvcnRlZCkK K3sKKwlzdHJ1Y3QgbGlzdF9lbnRyeV9pbXBvcnRlZCAqaW5mb19lbnRyeTsKKworCWluZm9fZW50 cnkgPSBrbWFsbG9jKHNpemVvZigqaW5mb19lbnRyeSksIEdGUF9LRVJORUwpOworCisJaWYgKCFp bmZvX2VudHJ5KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWluZm9fZW50cnktPmltcG9ydGVkID0g aW1wb3J0ZWQ7CisKKwloYXNoX2FkZChoeXBlcl9kbWFidWZfaGFzaF9pbXBvcnRlZCwgJmluZm9f ZW50cnktPm5vZGUsCisJCSBpbmZvX2VudHJ5LT5pbXBvcnRlZC0+aGlkLmlkKTsKKworCXJldHVy biAwOworfQorCitzdHJ1Y3QgZXhwb3J0ZWRfc2d0X2luZm8gKmh5cGVyX2RtYWJ1Zl9maW5kX2V4 cG9ydGVkKGh5cGVyX2RtYWJ1Zl9pZF90IGhpZCkKK3sKKwlzdHJ1Y3QgbGlzdF9lbnRyeV9leHBv cnRlZCAqaW5mb19lbnRyeTsKKwlpbnQgYmt0OworCisJaGFzaF9mb3JfZWFjaChoeXBlcl9kbWFi dWZfaGFzaF9leHBvcnRlZCwgYmt0LCBpbmZvX2VudHJ5LCBub2RlKQorCQkvKiBjaGVja2luZyBo aWQuaWQgZmlyc3QgKi8KKwkJaWYgKGluZm9fZW50cnktPmV4cG9ydGVkLT5oaWQuaWQgPT0gaGlk LmlkKSB7CisJCQkvKiB0aGVuIGtleSBpcyBjb21wYXJlZCAqLworCQkJaWYgKGh5cGVyX2RtYWJ1 Zl9oaWRfa2V5Y29tcChpbmZvX2VudHJ5LT5leHBvcnRlZC0+aGlkLAorCQkJCQkJICAgIGhpZCkp CisJCQkJcmV0dXJuIGluZm9fZW50cnktPmV4cG9ydGVkOworCisJCQkvKiBpZiBrZXkgaXMgdW5t YXRjaGVkLCBnaXZlbiBISUQgaXMgaW52YWxpZCwKKwkJCSAqIHNvIHJldHVybmluZyBOVUxMCisJ CQkgKi8KKwkJCWJyZWFrOworCQl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyogc2VhcmNoIGZv ciBwcmUtZXhwb3J0ZWQgc2d0IGFuZCByZXR1cm4gaWQgb2YgaXQgaWYgaXQgZXhpc3QgKi8KK2h5 cGVyX2RtYWJ1Zl9pZF90IGh5cGVyX2RtYWJ1Zl9maW5kX2hpZF9leHBvcnRlZChzdHJ1Y3QgZG1h X2J1ZiAqZG1hYnVmLAorCQkJCQkJIGludCBkb21pZCkKK3sKKwlzdHJ1Y3QgbGlzdF9lbnRyeV9l eHBvcnRlZCAqaW5mb19lbnRyeTsKKwloeXBlcl9kbWFidWZfaWRfdCBoaWQgPSB7LTEsIHswLCAw LCAwfSB9OworCWludCBia3Q7CisKKwloYXNoX2Zvcl9lYWNoKGh5cGVyX2RtYWJ1Zl9oYXNoX2V4 cG9ydGVkLCBia3QsIGluZm9fZW50cnksIG5vZGUpCisJCWlmIChpbmZvX2VudHJ5LT5leHBvcnRl ZC0+ZG1hX2J1ZiA9PSBkbWFidWYgJiYKKwkJICAgIGluZm9fZW50cnktPmV4cG9ydGVkLT5yZG9t aWQgPT0gZG9taWQpCisJCQlyZXR1cm4gaW5mb19lbnRyeS0+ZXhwb3J0ZWQtPmhpZDsKKworCXJl dHVybiBoaWQ7Cit9CisKK3N0cnVjdCBpbXBvcnRlZF9zZ3RfaW5mbyAqaHlwZXJfZG1hYnVmX2Zp bmRfaW1wb3J0ZWQoaHlwZXJfZG1hYnVmX2lkX3QgaGlkKQoreworCXN0cnVjdCBsaXN0X2VudHJ5 X2ltcG9ydGVkICppbmZvX2VudHJ5OworCWludCBia3Q7CisKKwloYXNoX2Zvcl9lYWNoKGh5cGVy X2RtYWJ1Zl9oYXNoX2ltcG9ydGVkLCBia3QsIGluZm9fZW50cnksIG5vZGUpCisJCS8qIGNoZWNr aW5nIGhpZC5pZCBmaXJzdCAqLworCQlpZiAoaW5mb19lbnRyeS0+aW1wb3J0ZWQtPmhpZC5pZCA9 PSBoaWQuaWQpIHsKKwkJCS8qIHRoZW4ga2V5IGlzIGNvbXBhcmVkICovCisJCQlpZiAoaHlwZXJf ZG1hYnVmX2hpZF9rZXljb21wKGluZm9fZW50cnktPmltcG9ydGVkLT5oaWQsCisJCQkJCQkgICAg aGlkKSkKKwkJCQlyZXR1cm4gaW5mb19lbnRyeS0+aW1wb3J0ZWQ7CisJCQkvKiBpZiBrZXkgaXMg dW5tYXRjaGVkLCBnaXZlbiBISUQgaXMgaW52YWxpZCwKKwkJCSAqIHNvIHJldHVybmluZyBOVUxM CisJCQkgKi8KKwkJCWJyZWFrOworCQl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworaW50IGh5cGVy X2RtYWJ1Zl9yZW1vdmVfZXhwb3J0ZWQoaHlwZXJfZG1hYnVmX2lkX3QgaGlkKQoreworCXN0cnVj dCBsaXN0X2VudHJ5X2V4cG9ydGVkICppbmZvX2VudHJ5OworCWludCBia3Q7CisKKwloYXNoX2Zv cl9lYWNoKGh5cGVyX2RtYWJ1Zl9oYXNoX2V4cG9ydGVkLCBia3QsIGluZm9fZW50cnksIG5vZGUp CisJCS8qIGNoZWNraW5nIGhpZC5pZCBmaXJzdCAqLworCQlpZiAoaW5mb19lbnRyeS0+ZXhwb3J0 ZWQtPmhpZC5pZCA9PSBoaWQuaWQpIHsKKwkJCS8qIHRoZW4ga2V5IGlzIGNvbXBhcmVkICovCisJ CQlpZiAoaHlwZXJfZG1hYnVmX2hpZF9rZXljb21wKGluZm9fZW50cnktPmV4cG9ydGVkLT5oaWQs CisJCQkJCQkgICAgaGlkKSkgeworCQkJCWhhc2hfZGVsKCZpbmZvX2VudHJ5LT5ub2RlKTsKKwkJ CQlrZnJlZShpbmZvX2VudHJ5KTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKworCQkJYnJlYWs7CisJ CX0KKworCXJldHVybiAtRU5PRU5UOworfQorCitpbnQgaHlwZXJfZG1hYnVmX3JlbW92ZV9pbXBv cnRlZChoeXBlcl9kbWFidWZfaWRfdCBoaWQpCit7CisJc3RydWN0IGxpc3RfZW50cnlfaW1wb3J0 ZWQgKmluZm9fZW50cnk7CisJaW50IGJrdDsKKworCWhhc2hfZm9yX2VhY2goaHlwZXJfZG1hYnVm X2hhc2hfaW1wb3J0ZWQsIGJrdCwgaW5mb19lbnRyeSwgbm9kZSkKKwkJLyogY2hlY2tpbmcgaGlk LmlkIGZpcnN0ICovCisJCWlmIChpbmZvX2VudHJ5LT5pbXBvcnRlZC0+aGlkLmlkID09IGhpZC5p ZCkgeworCQkJLyogdGhlbiBrZXkgaXMgY29tcGFyZWQgKi8KKwkJCWlmIChoeXBlcl9kbWFidWZf aGlkX2tleWNvbXAoaW5mb19lbnRyeS0+aW1wb3J0ZWQtPmhpZCwKKwkJCQkJCSAgICBoaWQpKSB7 CisJCQkJaGFzaF9kZWwoJmluZm9fZW50cnktPm5vZGUpOworCQkJCWtmcmVlKGluZm9fZW50cnkp OworCQkJCXJldHVybiAwOworCQkJfQorCisJCQlicmVhazsKKwkJfQorCisJcmV0dXJuIC1FTk9F TlQ7Cit9CisKK3ZvaWQgaHlwZXJfZG1hYnVmX2ZvcmVhY2hfZXhwb3J0ZWQoCisJdm9pZCAoKmZ1 bmMpKHN0cnVjdCBleHBvcnRlZF9zZ3RfaW5mbyAqLCB2b2lkICphdHRyKSwKKwl2b2lkICphdHRy KQoreworCXN0cnVjdCBsaXN0X2VudHJ5X2V4cG9ydGVkICppbmZvX2VudHJ5OworCXN0cnVjdCBo bGlzdF9ub2RlICp0bXA7CisJaW50IGJrdDsKKworCWhhc2hfZm9yX2VhY2hfc2FmZShoeXBlcl9k bWFidWZfaGFzaF9leHBvcnRlZCwgYmt0LCB0bXAsCisJCQlpbmZvX2VudHJ5LCBub2RlKSB7CisJ CWZ1bmMoaW5mb19lbnRyeS0+ZXhwb3J0ZWQsIGF0dHIpOworCX0KK30KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2xpc3QuaCBiL2RyaXZlcnMv ZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2xpc3QuaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi5mNzEwMmY1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9k bWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfbGlzdC5oCkBAIC0wLDAgKzEsNzEgQEAK Ky8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdh cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICog dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBh bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGlu Y2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwg Y29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgor ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg QU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNI QUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFO WSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFD VElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9V VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RI RVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0hZ UEVSX0RNQUJVRl9MSVNUX0hfXworI2RlZmluZSBfX0hZUEVSX0RNQUJVRl9MSVNUX0hfXworCisj aW5jbHVkZSAiaHlwZXJfZG1hYnVmX3N0cnVjdC5oIgorCisvKiBudW1iZXIgb2YgYml0cyB0byBi ZSB1c2VkIGZvciBleHBvcnRlZCBkbWFidWZzIGhhc2ggdGFibGUgKi8KKyNkZWZpbmUgTUFYX0VO VFJZX0VYUE9SVEVEIDcKKy8qIG51bWJlciBvZiBiaXRzIHRvIGJlIHVzZWQgZm9yIGltcG9ydGVk IGRtYWJ1ZnMgaGFzaCB0YWJsZSAqLworI2RlZmluZSBNQVhfRU5UUllfSU1QT1JURUQgNworCitz dHJ1Y3QgbGlzdF9lbnRyeV9leHBvcnRlZCB7CisJc3RydWN0IGV4cG9ydGVkX3NndF9pbmZvICpl eHBvcnRlZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlOworfTsKKworc3RydWN0IGxpc3RfZW50 cnlfaW1wb3J0ZWQgeworCXN0cnVjdCBpbXBvcnRlZF9zZ3RfaW5mbyAqaW1wb3J0ZWQ7CisJc3Ry dWN0IGhsaXN0X25vZGUgbm9kZTsKK307CisKK2ludCBoeXBlcl9kbWFidWZfdGFibGVfaW5pdCh2 b2lkKTsKKworaW50IGh5cGVyX2RtYWJ1Zl90YWJsZV9kZXN0cm95KHZvaWQpOworCitpbnQgaHlw ZXJfZG1hYnVmX3JlZ2lzdGVyX2V4cG9ydGVkKHN0cnVjdCBleHBvcnRlZF9zZ3RfaW5mbyAqaW5m byk7CisKKy8qIHNlYXJjaCBmb3IgcHJlLWV4cG9ydGVkIHNndCBhbmQgcmV0dXJuIGlkIG9mIGl0 IGlmIGl0IGV4aXN0ICovCitoeXBlcl9kbWFidWZfaWRfdCBoeXBlcl9kbWFidWZfZmluZF9oaWRf ZXhwb3J0ZWQoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKKwkJCQkJCSBpbnQgZG9taWQpOworCitp bnQgaHlwZXJfZG1hYnVmX3JlZ2lzdGVyX2ltcG9ydGVkKHN0cnVjdCBpbXBvcnRlZF9zZ3RfaW5m byAqaW5mbyk7CisKK3N0cnVjdCBleHBvcnRlZF9zZ3RfaW5mbyAqaHlwZXJfZG1hYnVmX2ZpbmRf ZXhwb3J0ZWQoaHlwZXJfZG1hYnVmX2lkX3QgaGlkKTsKKworc3RydWN0IGltcG9ydGVkX3NndF9p bmZvICpoeXBlcl9kbWFidWZfZmluZF9pbXBvcnRlZChoeXBlcl9kbWFidWZfaWRfdCBoaWQpOwor CitpbnQgaHlwZXJfZG1hYnVmX3JlbW92ZV9leHBvcnRlZChoeXBlcl9kbWFidWZfaWRfdCBoaWQp OworCitpbnQgaHlwZXJfZG1hYnVmX3JlbW92ZV9pbXBvcnRlZChoeXBlcl9kbWFidWZfaWRfdCBo aWQpOworCit2b2lkIGh5cGVyX2RtYWJ1Zl9mb3JlYWNoX2V4cG9ydGVkKHZvaWQgKCpmdW5jKShz dHJ1Y3QgZXhwb3J0ZWRfc2d0X2luZm8gKiwKKwkJCQkgICB2b2lkICphdHRyKSwgdm9pZCAqYXR0 cik7CisKK2ludCBoeXBlcl9kbWFidWZfcmVnaXN0ZXJfc3lzZnMoc3RydWN0IGRldmljZSAqZGV2 KTsKK2ludCBoeXBlcl9kbWFidWZfdW5yZWdpc3Rlcl9zeXNmcyhzdHJ1Y3QgZGV2aWNlICpkZXYp OworCisjZW5kaWYgLyogX19IWVBFUl9ETUFCVUZfTElTVF9IX18gKi8KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX21zZy5jIGIvZHJpdmVycy9k bWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfbXNnLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uYWZjMWZkNmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2Rt YS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9tc2cuYwpAQCAtMCwwICsxLDQxNCBAQAor LyoKKyAqIENvcHlyaWdodCDCqSAyMDE3IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlz c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0 YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu dGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0 aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0 ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBU aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5j bHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBj b3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisg KiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBB TlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hB TEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z IENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNU SU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VU IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhF UiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBE b25nd29uIEtpbSA8ZG9uZ3dvbi5raW1AaW50ZWwuY29tPgorICogICAgTWF0ZXVzeiBQb2xyb2xh IDxtYXRldXN6eC5wb3Ryb2xhQGludGVsLmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4 L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2xh Yi5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgImh5cGVyX2RtYWJ1 Zl9kcnYuaCIKKyNpbmNsdWRlICJoeXBlcl9kbWFidWZfbXNnLmgiCisjaW5jbHVkZSAiaHlwZXJf ZG1hYnVmX3JlbW90ZV9zeW5jLmgiCisjaW5jbHVkZSAiaHlwZXJfZG1hYnVmX2V2ZW50LmgiCisj aW5jbHVkZSAiaHlwZXJfZG1hYnVmX2xpc3QuaCIKKworc3RydWN0IGNtZF9wcm9jZXNzIHsKKwlz dHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwlzdHJ1Y3QgaHlwZXJfZG1hYnVmX3JlcSAqcnE7CisJ aW50IGRvbWlkOworfTsKKwordm9pZCBoeXBlcl9kbWFidWZfY3JlYXRlX3JlcShzdHJ1Y3QgaHlw ZXJfZG1hYnVmX3JlcSAqcmVxLAorCQkJICAgICBlbnVtIGh5cGVyX2RtYWJ1Zl9jb21tYW5kIGNt ZCwgaW50ICpvcCkKK3sKKwlpbnQgaTsKKworCXJlcS0+c3RhdCA9IEhZUEVSX0RNQUJVRl9SRVFf Tk9UX1JFU1BPTkRFRDsKKwlyZXEtPmNtZCA9IGNtZDsKKworCXN3aXRjaCAoY21kKSB7CisJLyog YXMgZXhwb3J0ZXIsIGNvbW1hbmRzIHRvIGltcG9ydGVyICovCisJY2FzZSBIWVBFUl9ETUFCVUZf RVhQT1JUOgorCQkvKiBleHBvcnRpbmcgcGFnZXMgZm9yIGRtYWJ1ZiAqLworCQkvKiBjb21tYW5k IDogSFlQRVJfRE1BQlVGX0VYUE9SVCwKKwkJICogb3Awfm9wMyA6IGh5cGVyX2RtYWJ1Zl9pZAor CQkgKiBvcDQgOiBudW1iZXIgb2YgcGFnZXMgdG8gYmUgc2hhcmVkCisJCSAqIG9wNSA6IG9mZnNl dCBvZiBkYXRhIGluIHRoZSBmaXJzdCBwYWdlCisJCSAqIG9wNiA6IGxlbmd0aCBvZiBkYXRhIGlu IHRoZSBsYXN0IHBhZ2UKKwkJICogb3A3IDogdG9wLWxldmVsIHJlZmVyZW5jZSBudW1iZXIgZm9y IHNoYXJlZCBwYWdlcworCQkgKiBvcDggOiBzaXplIG9mIHByaXZhdGUgZGF0YSAoZnJvbSBvcDkp CisJCSAqIG9wOSB+IDogRHJpdmVyLXNwZWNpZmljIHByaXZhdGUgZGF0YQorCQkgKgkgICAoZS5n LiBncmFwaGljIGJ1ZmZlcidzIG1ldGEgaW5mbykKKwkJICovCisKKwkJbWVtY3B5KCZyZXEtPm9w WzBdLCAmb3BbMF0sIDkgKiBzaXplb2YoaW50KSArIG9wWzhdKTsKKwkJYnJlYWs7CisKKwljYXNl IEhZUEVSX0RNQUJVRl9OT1RJRllfVU5FWFBPUlQ6CisJCS8qIGRlc3Ryb3kgc2dfbGlzdCBmb3Ig aHlwZXJfZG1hYnVmX2lkIG9uIHJlbW90ZSBzaWRlICovCisJCS8qIGNvbW1hbmQgOiBETUFCVUZf REVTVFJPWSwKKwkJICogb3Awfm9wMyA6IGh5cGVyX2RtYWJ1Zl9pZF90IGhpZAorCQkgKi8KKwor CQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQkJcmVxLT5vcFtpXSA9IG9wW2ldOworCQlicmVh azsKKworCWNhc2UgSFlQRVJfRE1BQlVGX0VYUE9SVF9GRDoKKwljYXNlIEhZUEVSX0RNQUJVRl9F WFBPUlRfRkRfRkFJTEVEOgorCQkvKiBkbWFidWYgZmQgaXMgYmVpbmcgY3JlYXRlZCBvbiBpbXBv cnRlZCBzaWRlIG9yIGltcG9ydGluZworCQkgKiBmYWlsZWQKKwkJICoKKwkJICogY29tbWFuZCA6 IEhZUEVSX0RNQUJVRl9FWFBPUlRfRkQgb3IKKwkJICoJICAgICBIWVBFUl9ETUFCVUZfRVhQT1JU X0ZEX0ZBSUxFRCwKKwkJICogb3Awfm9wMyA6IGh5cGVyX2RtYWJ1Zl9pZAorCQkgKi8KKworCQlm b3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQkJcmVxLT5vcFtpXSA9IG9wW2ldOworCQlicmVhazsK KworCWNhc2UgSFlQRVJfRE1BQlVGX09QU19UT19SRU1PVEU6CisJCS8qIG5vdGlmeWluZyBkbWFi dWYgbWFwL3VubWFwIHRvIGltcG9ydGVyIChwcm9iYWJseSBub3QgbmVlZGVkKQorCQkgKiBmb3Ig ZG1hYnVmIHN5bmNocm9uaXphdGlvbgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIEhZUEVSX0RN QUJVRl9PUFNfVE9fU09VUkNFOgorCQkvKiBub3RpZnlpbmcgZG1hYnVmIG1hcC91bm1hcCB0byBl eHBvcnRlciwgbWFwIHdpbGwgbWFrZQorCQkgKiB0aGUgZHJpdmVyIHRvIGRvIHNoYWRvdyBtYXBw aW5nIG9yIHVubWFwcGluZyBmb3IKKwkJICogc3luY2hyb25pemF0aW9uIHdpdGggb3JpZ2luYWwg ZXhwb3J0ZXIgKGUuZy4gaTkxNSkKKwkJICoKKwkJICogY29tbWFuZCA6IERNQUJVRl9PUFNfVE9f U09VUkNFLgorCQkgKiBvcDB+MyA6IGh5cGVyX2RtYWJ1Zl9pZAorCQkgKiBvcDQgOiBtYXAoPTEp L3VubWFwKD0yKS9hdHRhY2goPTMpL2RldGFjaCg9NCkKKwkJICovCisJCWZvciAoaSA9IDA7IGkg PCA1OyBpKyspCisJCQlyZXEtPm9wW2ldID0gb3BbaV07CisJCWJyZWFrOworCisJZGVmYXVsdDoK KwkJLyogbm8gY29tbWFuZCBmb3VuZCAqLworCQlyZXR1cm47CisJfQorfQorCitzdGF0aWMgdm9p ZCBjbWRfcHJvY2Vzc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qg aW1wb3J0ZWRfc2d0X2luZm8gKmltcG9ydGVkOworCXN0cnVjdCBjbWRfcHJvY2VzcyAqcHJvYyA9 IGNvbnRhaW5lcl9vZih3b3JrLAorCQkJCQkJc3RydWN0IGNtZF9wcm9jZXNzLCB3b3JrKTsKKwlz dHJ1Y3QgaHlwZXJfZG1hYnVmX3JlcSAqcmVxOworCWludCBkb21pZDsKKwlpbnQgaTsKKworCXJl cSA9IHByb2MtPnJxOworCWRvbWlkID0gcHJvYy0+ZG9taWQ7CisKKwlzd2l0Y2ggKHJlcS0+Y21k KSB7CisJY2FzZSBIWVBFUl9ETUFCVUZfRVhQT1JUOgorCQkvKiBleHBvcnRpbmcgcGFnZXMgZm9y IGRtYWJ1ZiAqLworCQkvKiBjb21tYW5kIDogSFlQRVJfRE1BQlVGX0VYUE9SVCwKKwkJICogb3Aw fm9wMyA6IGh5cGVyX2RtYWJ1Zl9pZAorCQkgKiBvcDQgOiBudW1iZXIgb2YgcGFnZXMgdG8gYmUg c2hhcmVkCisJCSAqIG9wNSA6IG9mZnNldCBvZiBkYXRhIGluIHRoZSBmaXJzdCBwYWdlCisJCSAq IG9wNiA6IGxlbmd0aCBvZiBkYXRhIGluIHRoZSBsYXN0IHBhZ2UKKwkJICogb3A3IDogdG9wLWxl dmVsIHJlZmVyZW5jZSBudW1iZXIgZm9yIHNoYXJlZCBwYWdlcworCQkgKiBvcDggOiBzaXplIG9m IHByaXZhdGUgZGF0YSAoZnJvbSBvcDkpCisJCSAqIG9wOSB+IDogRHJpdmVyLXNwZWNpZmljIHBy aXZhdGUgZGF0YQorCQkgKiAgICAgICAgIChlLmcuIGdyYXBoaWMgYnVmZmVyJ3MgbWV0YSBpbmZv KQorCQkgKi8KKworCQkvKiBpZiBuZW50cyA9PSAwLCBpdCBtZWFucyBpdCBpcyBhIG1lc3NhZ2Ug b25seSBmb3IKKwkJICogcHJpdiBzeW5jaHJvbml6YXRpb24uIGZvciBleGlzdGluZyBpbXBvcnRl ZF9zZ3RfaW5mbworCQkgKiBzbyBub3QgY3JlYXRpbmcgYSBuZXcgb25lCisJCSAqLworCQlpZiAo cmVxLT5vcFs0XSA9PSAwKSB7CisJCQloeXBlcl9kbWFidWZfaWRfdCBleGlzdCA9IHtyZXEtPm9w WzBdLAorCQkJCQkJICAge3JlcS0+b3BbMV0sIHJlcS0+b3BbMl0sCisJCQkJCQkgICByZXEtPm9w WzNdIH0gfTsKKworCQkJaW1wb3J0ZWQgPSBoeXBlcl9kbWFidWZfZmluZF9pbXBvcnRlZChleGlz dCk7CisKKwkJCWlmICghaW1wb3J0ZWQpIHsKKwkJCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYs CisJCQkJCSJDYW4ndCBmaW5kIGltcG9ydGVkIHNndF9pbmZvXG4iKTsKKwkJCQlicmVhazsKKwkJ CX0KKworCQkJLyogaWYgc2l6ZSBvZiBuZXcgcHJpdmF0ZSBkYXRhIGlzIGRpZmZlcmVudCwKKwkJ CSAqIHdlIHJlYWxsb2NhdGUgaXQuCisJCQkgKi8KKwkJCWlmIChpbXBvcnRlZC0+c3pfcHJpdiAh PSByZXEtPm9wWzhdKSB7CisJCQkJa2ZyZWUoaW1wb3J0ZWQtPnByaXYpOworCQkJCWltcG9ydGVk LT5zel9wcml2ID0gcmVxLT5vcFs4XTsKKwkJCQlpbXBvcnRlZC0+cHJpdiA9IGtjYWxsb2MoMSwg cmVxLT5vcFs4XSwKKwkJCQkJCQkgR0ZQX0tFUk5FTCk7CisJCQkJaWYgKCFpbXBvcnRlZC0+cHJp dikgeworCQkJCQkvKiBzZXQgaXQgaW52YWxpZCAqLworCQkJCQlpbXBvcnRlZC0+dmFsaWQgPSAw OworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCS8qIHVwZGF0aW5nIHByaXYgZGF0YSAq LworCQkJbWVtY3B5KGltcG9ydGVkLT5wcml2LCAmcmVxLT5vcFs5XSwgcmVxLT5vcFs4XSk7CisK KyNpZmRlZiBDT05GSUdfSFlQRVJfRE1BQlVGX0VWRU5UX0dFTgorCQkJLyogZ2VuZXJhdGluZyBp bXBvcnQgZXZlbnQgKi8KKwkJCWh5cGVyX2RtYWJ1Zl9pbXBvcnRfZXZlbnQoaW1wb3J0ZWQtPmhp ZCk7CisjZW5kaWYKKworCQkJYnJlYWs7CisJCX0KKworCQlpbXBvcnRlZCA9IGtjYWxsb2MoMSwg c2l6ZW9mKCppbXBvcnRlZCksIEdGUF9LRVJORUwpOworCisJCWlmICghaW1wb3J0ZWQpCisJCQli cmVhazsKKworCQlpbXBvcnRlZC0+c3pfcHJpdiA9IHJlcS0+b3BbOF07CisJCWltcG9ydGVkLT5w cml2ID0ga2NhbGxvYygxLCByZXEtPm9wWzhdLCBHRlBfS0VSTkVMKTsKKworCQlpZiAoIWltcG9y dGVkLT5wcml2KSB7CisJCQlrZnJlZShpbXBvcnRlZCk7CisJCQlicmVhazsKKwkJfQorCisJCWlt cG9ydGVkLT5oaWQuaWQgPSByZXEtPm9wWzBdOworCisJCWZvciAoaSA9IDA7IGkgPCAzOyBpKysp CisJCQlpbXBvcnRlZC0+aGlkLnJuZ19rZXlbaV0gPSByZXEtPm9wW2krMV07CisKKwkJaW1wb3J0 ZWQtPm5lbnRzID0gcmVxLT5vcFs0XTsKKwkJaW1wb3J0ZWQtPmZyc3Rfb2ZzdCA9IHJlcS0+b3Bb NV07CisJCWltcG9ydGVkLT5sYXN0X2xlbiA9IHJlcS0+b3BbNl07CisJCWltcG9ydGVkLT5yZWZf aGFuZGxlID0gcmVxLT5vcFs3XTsKKworCQlkZXZfZGJnKGh5X2Rydl9wcml2LT5kZXYsICJETUFC VUYgd2FzIGV4cG9ydGVkXG4iKTsKKwkJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LCAiXHRoaWR7 aWQ6JWQga2V5OiVkICVkICVkfVxuIiwKKwkJCXJlcS0+b3BbMF0sIHJlcS0+b3BbMV0sIHJlcS0+ b3BbMl0sCisJCQlyZXEtPm9wWzNdKTsKKwkJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LCAiXHRu ZW50cyAlZFxuIiwgcmVxLT5vcFs0XSk7CisJCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwgIlx0 Zmlyc3Qgb2Zmc2V0ICVkXG4iLCByZXEtPm9wWzVdKTsKKwkJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ ZGV2LCAiXHRsYXN0IGxlbiAlZFxuIiwgcmVxLT5vcFs2XSk7CisJCWRldl9kYmcoaHlfZHJ2X3By aXYtPmRldiwgIlx0Z3JlZmlkICVkXG4iLCByZXEtPm9wWzddKTsKKworCQltZW1jcHkoaW1wb3J0 ZWQtPnByaXYsICZyZXEtPm9wWzldLCByZXEtPm9wWzhdKTsKKworCQlpbXBvcnRlZC0+dmFsaWQg PSB0cnVlOworCQloeXBlcl9kbWFidWZfcmVnaXN0ZXJfaW1wb3J0ZWQoaW1wb3J0ZWQpOworCisj aWZkZWYgQ09ORklHX0hZUEVSX0RNQUJVRl9FVkVOVF9HRU4KKwkJLyogZ2VuZXJhdGluZyBpbXBv cnQgZXZlbnQgKi8KKwkJaHlwZXJfZG1hYnVmX2ltcG9ydF9ldmVudChpbXBvcnRlZC0+aGlkKTsK KyNlbmRpZgorCisJCWJyZWFrOworCisJY2FzZSBIWVBFUl9ETUFCVUZfT1BTX1RPX1JFTU9URToK KwkJLyogbm90aWZ5aW5nIGRtYWJ1ZiBtYXAvdW5tYXAgdG8gaW1wb3J0ZXIKKwkJICogKHByb2Jh Ymx5IG5vdCBuZWVkZWQpIGZvciBkbWFidWYgc3luY2hyb25pemF0aW9uCisJCSAqLworCQlicmVh azsKKworCWRlZmF1bHQ6CisJCS8qIHNob3VsZG4ndCBnZXQgaGVyZSAqLworCQlicmVhazsKKwl9 CisKKwlrZnJlZShyZXEpOworCWtmcmVlKHByb2MpOworfQorCitpbnQgaHlwZXJfZG1hYnVmX21z Z19wYXJzZShpbnQgZG9taWQsIHN0cnVjdCBoeXBlcl9kbWFidWZfcmVxICpyZXEpCit7CisJc3Ry dWN0IGNtZF9wcm9jZXNzICpwcm9jOworCXN0cnVjdCBoeXBlcl9kbWFidWZfcmVxICp0ZW1wX3Jl cTsKKwlzdHJ1Y3QgaW1wb3J0ZWRfc2d0X2luZm8gKmltcG9ydGVkOworCXN0cnVjdCBleHBvcnRl ZF9zZ3RfaW5mbyAqZXhwb3J0ZWQ7CisJaHlwZXJfZG1hYnVmX2lkX3QgaGlkOworCWludCByZXQ7 CisKKwlpZiAoIXJlcSkgeworCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsICJyZXF1ZXN0IGlz IE5VTExcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwloaWQuaWQgPSByZXEtPm9wWzBd OworCWhpZC5ybmdfa2V5WzBdID0gcmVxLT5vcFsxXTsKKwloaWQucm5nX2tleVsxXSA9IHJlcS0+ b3BbMl07CisJaGlkLnJuZ19rZXlbMl0gPSByZXEtPm9wWzNdOworCisJaWYgKChyZXEtPmNtZCA8 IEhZUEVSX0RNQUJVRl9FWFBPUlQpIHx8CisJCShyZXEtPmNtZCA+IEhZUEVSX0RNQUJVRl9PUFNf VE9fU09VUkNFKSkgeworCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsICJpbnZhbGlkIGNvbW1h bmRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXEtPnN0YXQgPSBIWVBFUl9ETUFC VUZfUkVRX1BST0NFU1NFRDsKKworCS8qIEhZUEVSX0RNQUJVRl9ERVNUUk9ZIHJlcXVpcmVzIGlt bWVkaWF0ZQorCSAqIGZvbGxvdyB1cCBzbyBjYW4ndCBiZSBwcm9jZXNzZWQgaW4gd29ya3F1ZXVl CisJICovCisJaWYgKHJlcS0+Y21kID09IEhZUEVSX0RNQUJVRl9OT1RJRllfVU5FWFBPUlQpIHsK KwkJLyogZGVzdHJveSBzZ19saXN0IGZvciBoeXBlcl9kbWFidWZfaWQgb24gcmVtb3RlIHNpZGUg Ki8KKwkJLyogY29tbWFuZCA6IEhZUEVSX0RNQUJVRl9OT1RJRllfVU5FWFBPUlQsCisJCSAqIG9w MH4zIDogaHlwZXJfZG1hYnVmX2lkCisJCSAqLworCQlkZXZfZGJnKGh5X2Rydl9wcml2LT5kZXYs CisJCQkicHJvY2Vzc2luZyBIWVBFUl9ETUFCVUZfTk9USUZZX1VORVhQT1JUXG4iKTsKKworCQlp bXBvcnRlZCA9IGh5cGVyX2RtYWJ1Zl9maW5kX2ltcG9ydGVkKGhpZCk7CisKKwkJaWYgKGltcG9y dGVkKSB7CisJCQkvKiBpZiBhbnl0aGluZyBpcyBzdGlsbCB1c2luZyBkbWFfYnVmICovCisJCQlp ZiAoaW1wb3J0ZWQtPmltcG9ydGVycykgeworCQkJCS8qIEJ1ZmZlciBpcyBzdGlsbCBpbiAgdXNl LCBqdXN0IG1hcmsgdGhhdAorCQkJCSAqIGl0IHNob3VsZCBub3QgYmUgYWxsb3dlZCB0byBleHBv cnQgaXRzIGZkCisJCQkJICogYW55bW9yZS4KKwkJCQkgKi8KKwkJCQlpbXBvcnRlZC0+dmFsaWQg PSBmYWxzZTsKKwkJCX0gZWxzZSB7CisJCQkJLyogTm8gb25lIGlzIHVzaW5nIGJ1ZmZlciwgcmVt b3ZlIGl0IGZyb20KKwkJCQkgKiBpbXBvcnRlZCBsaXN0CisJCQkJICovCisJCQkJaHlwZXJfZG1h YnVmX3JlbW92ZV9pbXBvcnRlZChoaWQpOworCQkJCWtmcmVlKGltcG9ydGVkKTsKKwkJCX0KKwkJ fSBlbHNlIHsKKwkJCXJlcS0+c3RhdCA9IEhZUEVSX0RNQUJVRl9SRVFfRVJST1I7CisJCX0KKwor CQlyZXR1cm4gcmVxLT5jbWQ7CisJfQorCisJLyogZG1hIGJ1ZiByZW1vdGUgc3luY2hyb25pemF0 aW9uICovCisJaWYgKHJlcS0+Y21kID09IEhZUEVSX0RNQUJVRl9PUFNfVE9fU09VUkNFKSB7CisJ CS8qIG5vdGlmeWluZyBkbWFidWYgbWFwL3VubWFwIHRvIGV4cG9ydGVyLCBtYXAgd2lsbAorCQkg KiBtYWtlIHRoZSBkcml2ZXIgdG8gZG8gc2hhZG93IG1hcHBpbmcKKwkJICogb3IgdW5tYXBwaW5n IGZvciBzeW5jaHJvbml6YXRpb24gd2l0aCBvcmlnaW5hbAorCQkgKiBleHBvcnRlciAoZS5nLiBp OTE1KQorCQkgKgorCQkgKiBjb21tYW5kIDogRE1BQlVGX09QU19UT19TT1VSQ0UuCisJCSAqIG9w MH4zIDogaHlwZXJfZG1hYnVmX2lkCisJCSAqIG9wMSA6IGVudW0gaHlwZXJfZG1hYnVmX29wcyB7 Li4uLn0KKwkJICovCisJCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCSIlczogSFlQRVJf RE1BQlVGX09QU19UT19TT1VSQ0VcbiIsIF9fZnVuY19fKTsKKworCQlyZXQgPSBoeXBlcl9kbWFi dWZfcmVtb3RlX3N5bmMoaGlkLCByZXEtPm9wWzRdKTsKKworCQlpZiAocmV0KQorCQkJcmVxLT5z dGF0ID0gSFlQRVJfRE1BQlVGX1JFUV9FUlJPUjsKKwkJZWxzZQorCQkJcmVxLT5zdGF0ID0gSFlQ RVJfRE1BQlVGX1JFUV9QUk9DRVNTRUQ7CisKKwkJcmV0dXJuIHJlcS0+Y21kOworCX0KKworCS8q IHN5bmNocm9ub3VzIGRtYV9idWZfZmQgZXhwb3J0ICovCisJaWYgKHJlcS0+Y21kID09IEhZUEVS X0RNQUJVRl9FWFBPUlRfRkQpIHsKKwkJLyogZmluZCBhIGNvcnJlc3BvbmRpbmcgU0dUIGZvciB0 aGUgaWQgKi8KKwkJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LAorCQkJIkhZUEVSX0RNQUJVRl9F WFBPUlRfRkQgZm9yIHtpZDolZCBrZXk6JWQgJWQgJWR9XG4iLAorCQkJaGlkLmlkLCBoaWQucm5n X2tleVswXSwgaGlkLnJuZ19rZXlbMV0sIGhpZC5ybmdfa2V5WzJdKTsKKworCQlleHBvcnRlZCA9 IGh5cGVyX2RtYWJ1Zl9maW5kX2V4cG9ydGVkKGhpZCk7CisKKwkJaWYgKCFleHBvcnRlZCkgewor CQkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAorCQkJCSJidWZmZXIge2lkOiVkIGtleTolZCAl ZCAlZH0gbm90IGZvdW5kXG4iLAorCQkJCWhpZC5pZCwgaGlkLnJuZ19rZXlbMF0sIGhpZC5ybmdf a2V5WzFdLAorCQkJCWhpZC5ybmdfa2V5WzJdKTsKKworCQkJcmVxLT5zdGF0ID0gSFlQRVJfRE1B QlVGX1JFUV9FUlJPUjsKKwkJfSBlbHNlIGlmICghZXhwb3J0ZWQtPnZhbGlkKSB7CisJCQlkZXZf ZGJnKGh5X2Rydl9wcml2LT5kZXYsCisJCQkJIkJ1ZmZlciBubyBsb25nZXIgdmFsaWQge2lkOiVk IGtleTolZCAlZCAlZH1cbiIsCisJCQkJaGlkLmlkLCBoaWQucm5nX2tleVswXSwgaGlkLnJuZ19r ZXlbMV0sCisJCQkJaGlkLnJuZ19rZXlbMl0pOworCisJCQlyZXEtPnN0YXQgPSBIWVBFUl9ETUFC VUZfUkVRX0VSUk9SOworCQl9IGVsc2UgeworCQkJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LAor CQkJCSJCdWZmZXIgc3RpbGwgdmFsaWQge2lkOiVkIGtleTolZCAlZCAlZH1cbiIsCisJCQkJaGlk LmlkLCBoaWQucm5nX2tleVswXSwgaGlkLnJuZ19rZXlbMV0sCisJCQkJaGlkLnJuZ19rZXlbMl0p OworCisJCQlleHBvcnRlZC0+YWN0aXZlKys7CisJCQlyZXEtPnN0YXQgPSBIWVBFUl9ETUFCVUZf UkVRX1BST0NFU1NFRDsKKwkJfQorCQlyZXR1cm4gcmVxLT5jbWQ7CisJfQorCisJaWYgKHJlcS0+ Y21kID09IEhZUEVSX0RNQUJVRl9FWFBPUlRfRkRfRkFJTEVEKSB7CisJCWRldl9kYmcoaHlfZHJ2 X3ByaXYtPmRldiwKKwkJCSJIWVBFUl9ETUFCVUZfRVhQT1JUX0ZEX0ZBSUxFRCBmb3Ige2lkOiVk IGtleTolZCAlZCAlZH1cbiIsCisJCQloaWQuaWQsIGhpZC5ybmdfa2V5WzBdLCBoaWQucm5nX2tl eVsxXSwgaGlkLnJuZ19rZXlbMl0pOworCisJCWV4cG9ydGVkID0gaHlwZXJfZG1hYnVmX2ZpbmRf ZXhwb3J0ZWQoaGlkKTsKKworCQlpZiAoIWV4cG9ydGVkKSB7CisJCQlkZXZfZXJyKGh5X2Rydl9w cml2LT5kZXYsCisJCQkJImJ1ZmZlciB7aWQ6JWQga2V5OiVkICVkICVkfSBub3QgZm91bmRcbiIs CisJCQkJaGlkLmlkLCBoaWQucm5nX2tleVswXSwgaGlkLnJuZ19rZXlbMV0sCisJCQkJaGlkLnJu Z19rZXlbMl0pOworCisJCQlyZXEtPnN0YXQgPSBIWVBFUl9ETUFCVUZfUkVRX0VSUk9SOworCQl9 IGVsc2UgeworCQkJZXhwb3J0ZWQtPmFjdGl2ZS0tOworCQkJcmVxLT5zdGF0ID0gSFlQRVJfRE1B QlVGX1JFUV9QUk9DRVNTRUQ7CisJCX0KKwkJcmV0dXJuIHJlcS0+Y21kOworCX0KKworCWRldl9k YmcoaHlfZHJ2X3ByaXYtPmRldiwKKwkJIiVzOiBwdXR0aW5nIHJlcXVlc3QgdG8gd29ya3F1ZXVl XG4iLCBfX2Z1bmNfXyk7CisJdGVtcF9yZXEgPSBrbWFsbG9jKHNpemVvZigqdGVtcF9yZXEpLCBH RlBfS0VSTkVMKTsKKworCWlmICghdGVtcF9yZXEpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVt Y3B5KHRlbXBfcmVxLCByZXEsIHNpemVvZigqdGVtcF9yZXEpKTsKKworCXByb2MgPSBrY2FsbG9j KDEsIHNpemVvZihzdHJ1Y3QgY21kX3Byb2Nlc3MpLCBHRlBfS0VSTkVMKTsKKworCWlmICghcHJv YykgeworCQlrZnJlZSh0ZW1wX3JlcSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXByb2Mt PnJxID0gdGVtcF9yZXE7CisJcHJvYy0+ZG9taWQgPSBkb21pZDsKKworCUlOSVRfV09SSygmKHBy b2MtPndvcmspLCBjbWRfcHJvY2Vzc193b3JrKTsKKworCXF1ZXVlX3dvcmsoaHlfZHJ2X3ByaXYt PndvcmtfcXVldWUsICYocHJvYy0+d29yaykpOworCisJcmV0dXJuIHJlcS0+Y21kOworfQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfbXNnLmgg Yi9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9tc2cuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzhhNzZiCi0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfbXNnLmgKQEAgLTAsMCAr MSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE3IEludGVsIENvcnBvcmF0aW9uCisgKgor ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBw ZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRl ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRo ZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0 aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwg ZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29m dHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMg ZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoK KyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVk IGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2Fy ZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS QU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBO T1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8g RVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJM RSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICog RlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVT RSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaWZu ZGVmIF9fSFlQRVJfRE1BQlVGX01TR19IX18KKyNkZWZpbmUgX19IWVBFUl9ETUFCVUZfTVNHX0hf XworCisjZGVmaW5lIE1BWF9OVU1CRVJfT0ZfT1BFUkFORFMgNjQKKworc3RydWN0IGh5cGVyX2Rt YWJ1Zl9yZXEgeworCXVuc2lnbmVkIGludCByZXFfaWQ7CisJdW5zaWduZWQgaW50IHN0YXQ7CisJ dW5zaWduZWQgaW50IGNtZDsKKwl1bnNpZ25lZCBpbnQgb3BbTUFYX05VTUJFUl9PRl9PUEVSQU5E U107Cit9OworCitzdHJ1Y3QgaHlwZXJfZG1hYnVmX3Jlc3AgeworCXVuc2lnbmVkIGludCByZXNw X2lkOworCXVuc2lnbmVkIGludCBzdGF0OworCXVuc2lnbmVkIGludCBjbWQ7CisJdW5zaWduZWQg aW50IG9wW01BWF9OVU1CRVJfT0ZfT1BFUkFORFNdOworfTsKKworZW51bSBoeXBlcl9kbWFidWZf Y29tbWFuZCB7CisJSFlQRVJfRE1BQlVGX0VYUE9SVCA9IDB4MTAsCisJSFlQRVJfRE1BQlVGX0VY UE9SVF9GRCwKKwlIWVBFUl9ETUFCVUZfRVhQT1JUX0ZEX0ZBSUxFRCwKKwlIWVBFUl9ETUFCVUZf Tk9USUZZX1VORVhQT1JULAorCUhZUEVSX0RNQUJVRl9PUFNfVE9fUkVNT1RFLAorCUhZUEVSX0RN QUJVRl9PUFNfVE9fU09VUkNFLAorfTsKKworZW51bSBoeXBlcl9kbWFidWZfb3BzIHsKKwlIWVBF Ul9ETUFCVUZfT1BTX0FUVEFDSCA9IDB4MTAwMCwKKwlIWVBFUl9ETUFCVUZfT1BTX0RFVEFDSCwK KwlIWVBFUl9ETUFCVUZfT1BTX01BUCwKKwlIWVBFUl9ETUFCVUZfT1BTX1VOTUFQLAorCUhZUEVS X0RNQUJVRl9PUFNfUkVMRUFTRSwKKwlIWVBFUl9ETUFCVUZfT1BTX0JFR0lOX0NQVV9BQ0NFU1Ms CisJSFlQRVJfRE1BQlVGX09QU19FTkRfQ1BVX0FDQ0VTUywKKwlIWVBFUl9ETUFCVUZfT1BTX0tN QVBfQVRPTUlDLAorCUhZUEVSX0RNQUJVRl9PUFNfS1VOTUFQX0FUT01JQywKKwlIWVBFUl9ETUFC VUZfT1BTX0tNQVAsCisJSFlQRVJfRE1BQlVGX09QU19LVU5NQVAsCisJSFlQRVJfRE1BQlVGX09Q U19NTUFQLAorCUhZUEVSX0RNQUJVRl9PUFNfVk1BUCwKKwlIWVBFUl9ETUFCVUZfT1BTX1ZVTk1B UCwKK307CisKK2VudW0gaHlwZXJfZG1hYnVmX3JlcV9mZWVkYmFjayB7CisJSFlQRVJfRE1BQlVG X1JFUV9QUk9DRVNTRUQgPSAweDEwMCwKKwlIWVBFUl9ETUFCVUZfUkVRX05FRURTX0ZPTExPV19V UCwKKwlIWVBFUl9ETUFCVUZfUkVRX0VSUk9SLAorCUhZUEVSX0RNQUJVRl9SRVFfTk9UX1JFU1BP TkRFRAorfTsKKworLyogY3JlYXRlIGEgcmVxdWVzdCBwYWNrZXQgd2l0aCBnaXZlbiBjb21tYW5k IGFuZCBvcGVyYW5kcyAqLwordm9pZCBoeXBlcl9kbWFidWZfY3JlYXRlX3JlcShzdHJ1Y3QgaHlw ZXJfZG1hYnVmX3JlcSAqcmVxLAorCQkJCSBlbnVtIGh5cGVyX2RtYWJ1Zl9jb21tYW5kIGNvbW1h bmQsCisJCQkJIGludCAqb3BlcmFuZHMpOworCisvKiBwYXJzZSBpbmNvbWluZyByZXF1ZXN0IHBh Y2tldCAob3IgcmVzcG9uc2UpIGFuZCB0YWtlCisgKiBhcHByb3ByaWF0ZSBhY3Rpb25zIGZvciB0 aG9zZQorICovCitpbnQgaHlwZXJfZG1hYnVmX21zZ19wYXJzZShpbnQgZG9taWQsIHN0cnVjdCBo eXBlcl9kbWFidWZfcmVxICpyZXEpOworCisjZW5kaWYgLy8gX19IWVBFUl9ETUFCVUZfTVNHX0hf XwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZf b3BzLmMgYi9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9vcHMuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODVmNjE5Ci0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfb3BzLmMKQEAg LTAsMCArMSw0MTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNyBJbnRlbCBDb3Jwb3JhdGlv bgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0 byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVh bCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQg bGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2Yg dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3 YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBp bmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICog U29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAor ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g IElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJ TkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBB dXRob3JzOgorICogICAgRG9uZ3dvbiBLaW0gPGRvbmd3b24ua2ltQGludGVsLmNvbT4KKyAqICAg IE1hdGV1c3ogUG9scm9sYSA8bWF0ZXVzengucG90cm9sYUBpbnRlbC5jb20+CisgKgorICovCisK KyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2lu Y2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+CisjaW5jbHVk ZSAiaHlwZXJfZG1hYnVmX2Rydi5oIgorI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9zdHJ1Y3QuaCIK KyNpbmNsdWRlICJoeXBlcl9kbWFidWZfb3BzLmgiCisjaW5jbHVkZSAiaHlwZXJfZG1hYnVmX3Nn bF9wcm9jLmgiCisjaW5jbHVkZSAiaHlwZXJfZG1hYnVmX2lkLmgiCisjaW5jbHVkZSAiaHlwZXJf ZG1hYnVmX21zZy5oIgorI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9saXN0LmgiCisKKyNkZWZpbmUg V0FJVF9BRlRFUl9TWU5DX1JFUSAwCisjZGVmaW5lIFJFRlNfUEVSX1BBR0UgKFBBR0VfU0laRS9z aXplb2YoZ3JhbnRfcmVmX3QpKQorCitzdGF0aWMgaW50IGRtYWJ1Zl9yZWZjb3VudChzdHJ1Y3Qg ZG1hX2J1ZiAqZG1hX2J1ZikKK3sKKwlpZiAoKGRtYV9idWYgIT0gTlVMTCkgJiYgKGRtYV9idWYt PmZpbGUgIT0gTlVMTCkpCisJCXJldHVybiBmaWxlX2NvdW50KGRtYV9idWYtPmZpbGUpOworCisJ cmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgc3luY19yZXF1ZXN0KGh5cGVyX2RtYWJ1 Zl9pZF90IGhpZCwgaW50IGRtYWJ1Zl9vcHMpCit7CisJc3RydWN0IGh5cGVyX2RtYWJ1Zl9yZXEg KnJlcTsKKwlzdHJ1Y3QgaHlwZXJfZG1hYnVmX2JrbmRfb3BzICpia25kX29wcyA9IGh5X2Rydl9w cml2LT5ia25kX29wczsKKwlpbnQgb3BbNV07CisJaW50IGk7CisJaW50IHJldDsKKworCW9wWzBd ID0gaGlkLmlkOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJb3BbaSsxXSA9IGhpZC5y bmdfa2V5W2ldOworCisJb3BbNF0gPSBkbWFidWZfb3BzOworCisJcmVxID0ga2NhbGxvYygxLCBz aXplb2YoKnJlcSksIEdGUF9LRVJORUwpOworCisJaWYgKCFyZXEpCisJCXJldHVybiAtRU5PTUVN OworCisJaHlwZXJfZG1hYnVmX2NyZWF0ZV9yZXEocmVxLCBIWVBFUl9ETUFCVUZfT1BTX1RPX1NP VVJDRSwgJm9wWzBdKTsKKworCS8qIHNlbmQgcmVxdWVzdCBhbmQgd2FpdCBmb3IgYSByZXNwb25z ZSAqLworCXJldCA9IGJrbmRfb3BzLT5zZW5kX3JlcShIWVBFUl9ETUFCVUZfRE9NX0lEKGhpZCks IHJlcSwKKwkJCQkgV0FJVF9BRlRFUl9TWU5DX1JFUSk7CisKKwlpZiAocmV0IDwgMCkgeworCQlk ZXZfZGJnKGh5X2Rydl9wcml2LT5kZXYsCisJCQkiZG1hYnVmIHN5bmMgcmVxdWVzdCBmYWlsZWQ6 JWRcbiIsIHJlcS0+b3BbNF0pOworCX0KKworCWtmcmVlKHJlcSk7CisKKwlyZXR1cm4gcmV0Owor fQorCitzdGF0aWMgaW50IGh5cGVyX2RtYWJ1Zl9vcHNfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpk bWFidWYsCisJCQkJICAgc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBkbWFfYnVm X2F0dGFjaG1lbnQgKmF0dGFjaCkKK3sKKwlzdHJ1Y3QgaW1wb3J0ZWRfc2d0X2luZm8gKmltcG9y dGVkOworCWludCByZXQ7CisKKwlpZiAoIWF0dGFjaC0+ZG1hYnVmLT5wcml2KQorCQlyZXR1cm4g LUVJTlZBTDsKKworCWltcG9ydGVkID0gKHN0cnVjdCBpbXBvcnRlZF9zZ3RfaW5mbyAqKWF0dGFj aC0+ZG1hYnVmLT5wcml2OworCisJcmV0ID0gc3luY19yZXF1ZXN0KGltcG9ydGVkLT5oaWQsIEhZ UEVSX0RNQUJVRl9PUFNfQVRUQUNIKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lk IGh5cGVyX2RtYWJ1Zl9vcHNfZGV0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCisJCQkJICAg IHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCkKK3sKKwlzdHJ1Y3QgaW1wb3J0ZWRf c2d0X2luZm8gKmltcG9ydGVkOworCWludCByZXQ7CisKKwlpZiAoIWF0dGFjaC0+ZG1hYnVmLT5w cml2KQorCQlyZXR1cm47CisKKwlpbXBvcnRlZCA9IChzdHJ1Y3QgaW1wb3J0ZWRfc2d0X2luZm8g KilhdHRhY2gtPmRtYWJ1Zi0+cHJpdjsKKworCXJldCA9IHN5bmNfcmVxdWVzdChpbXBvcnRlZC0+ aGlkLCBIWVBFUl9ETUFCVUZfT1BTX0RFVEFDSCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2dfdGFi bGUgKmh5cGVyX2RtYWJ1Zl9vcHNfbWFwKAorCQkJCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQg KmF0dGFjaG1lbnQsCisJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCXN0cnVj dCBzZ190YWJsZSAqc3Q7CisJc3RydWN0IGltcG9ydGVkX3NndF9pbmZvICppbXBvcnRlZDsKKwlz dHJ1Y3QgcGFnZXNfaW5mbyAqcGdfaW5mbzsKKwlpbnQgcmV0OworCisJaWYgKCFhdHRhY2htZW50 LT5kbWFidWYtPnByaXYpCisJCXJldHVybiBOVUxMOworCisJaW1wb3J0ZWQgPSAoc3RydWN0IGlt cG9ydGVkX3NndF9pbmZvICopYXR0YWNobWVudC0+ZG1hYnVmLT5wcml2OworCisJLyogZXh0cmFj dCBwYWdlcyBmcm9tIHNndCAqLworCXBnX2luZm8gPSBoeXBlcl9kbWFidWZfZXh0X3BncyhpbXBv cnRlZC0+c2d0KTsKKworCWlmICghcGdfaW5mbykKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBjcmVh dGUgYSBuZXcgc2dfdGFibGUgd2l0aCBleHRyYWN0ZWQgcGFnZXMgKi8KKwlzdCA9IGh5cGVyX2Rt YWJ1Zl9jcmVhdGVfc2d0KHBnX2luZm8tPnBncywgcGdfaW5mby0+ZnJzdF9vZnN0LAorCQkJCSAg ICAgcGdfaW5mby0+bGFzdF9sZW4sIHBnX2luZm8tPm5lbnRzKTsKKwlpZiAoIXN0KQorCQlnb3Rv IGVycl9mcmVlX3NnOworCisJaWYgKCFkbWFfbWFwX3NnKGF0dGFjaG1lbnQtPmRldiwgc3QtPnNn bCwgc3QtPm5lbnRzLCBkaXIpKQorCQlnb3RvIGVycl9mcmVlX3NnOworCisJcmV0ID0gc3luY19y ZXF1ZXN0KGltcG9ydGVkLT5oaWQsIEhZUEVSX0RNQUJVRl9PUFNfTUFQKTsKKworCWtmcmVlKHBn X2luZm8tPnBncyk7CisJa2ZyZWUocGdfaW5mbyk7CisKKwlyZXR1cm4gc3Q7CisKK2Vycl9mcmVl X3NnOgorCWlmIChzdCkgeworCQlzZ19mcmVlX3RhYmxlKHN0KTsKKwkJa2ZyZWUoc3QpOworCX0K KworCWtmcmVlKHBnX2luZm8tPnBncyk7CisJa2ZyZWUocGdfaW5mbyk7CisKKwlyZXR1cm4gTlVM TDsKK30KKworc3RhdGljIHZvaWQgaHlwZXJfZG1hYnVmX29wc191bm1hcChzdHJ1Y3QgZG1hX2J1 Zl9hdHRhY2htZW50ICphdHRhY2htZW50LAorCQkJCSAgIHN0cnVjdCBzZ190YWJsZSAqc2csCisJ CQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCXN0cnVjdCBpbXBvcnRlZF9z Z3RfaW5mbyAqaW1wb3J0ZWQ7CisJaW50IHJldDsKKworCWlmICghYXR0YWNobWVudC0+ZG1hYnVm LT5wcml2KQorCQlyZXR1cm47CisKKwlpbXBvcnRlZCA9IChzdHJ1Y3QgaW1wb3J0ZWRfc2d0X2lu Zm8gKilhdHRhY2htZW50LT5kbWFidWYtPnByaXY7CisKKwlkbWFfdW5tYXBfc2coYXR0YWNobWVu dC0+ZGV2LCBzZy0+c2dsLCBzZy0+bmVudHMsIGRpcik7CisKKwlzZ19mcmVlX3RhYmxlKHNnKTsK KwlrZnJlZShzZyk7CisKKwlyZXQgPSBzeW5jX3JlcXVlc3QoaW1wb3J0ZWQtPmhpZCwgSFlQRVJf RE1BQlVGX09QU19VTk1BUCk7Cit9CisKK3N0YXRpYyB2b2lkIGh5cGVyX2RtYWJ1Zl9vcHNfcmVs ZWFzZShzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZikKK3sKKwlzdHJ1Y3QgaW1wb3J0ZWRfc2d0X2lu Zm8gKmltcG9ydGVkOworCXN0cnVjdCBoeXBlcl9kbWFidWZfYmtuZF9vcHMgKmJrbmRfb3BzID0g aHlfZHJ2X3ByaXYtPmJrbmRfb3BzOworCWludCByZXQ7CisJaW50IGZpbmlzaDsKKworCWlmICgh ZG1hX2J1Zi0+cHJpdikKKwkJcmV0dXJuOworCisJaW1wb3J0ZWQgPSAoc3RydWN0IGltcG9ydGVk X3NndF9pbmZvICopZG1hX2J1Zi0+cHJpdjsKKworCWlmICghZG1hYnVmX3JlZmNvdW50KGltcG9y dGVkLT5kbWFfYnVmKSkKKwkJaW1wb3J0ZWQtPmRtYV9idWYgPSBOVUxMOworCisJaW1wb3J0ZWQt PmltcG9ydGVycy0tOworCisJaWYgKGltcG9ydGVkLT5pbXBvcnRlcnMgPT0gMCkgeworCQlia25k X29wcy0+dW5tYXBfc2hhcmVkX3BhZ2VzKCZpbXBvcnRlZC0+cmVmc19pbmZvLAorCQkJCQkgICAg IGltcG9ydGVkLT5uZW50cyk7CisKKwkJaWYgKGltcG9ydGVkLT5zZ3QpIHsKKwkJCXNnX2ZyZWVf dGFibGUoaW1wb3J0ZWQtPnNndCk7CisJCQlrZnJlZShpbXBvcnRlZC0+c2d0KTsKKwkJCWltcG9y dGVkLT5zZ3QgPSBOVUxMOworCQl9CisJfQorCisJZmluaXNoID0gaW1wb3J0ZWQgJiYgIWltcG9y dGVkLT52YWxpZCAmJgorCQkgIWltcG9ydGVkLT5pbXBvcnRlcnM7CisKKwlyZXQgPSBzeW5jX3Jl cXVlc3QoaW1wb3J0ZWQtPmhpZCwgSFlQRVJfRE1BQlVGX09QU19SRUxFQVNFKTsKKworCS8qCisJ ICogQ2hlY2sgaWYgYnVmZmVyIGlzIHN0aWxsIHZhbGlkIGFuZCBpZiBub3QgcmVtb3ZlIGl0CisJ ICogZnJvbSBpbXBvcnRlZCBsaXN0LiBUaGF0IGhhcyB0byBiZSBkb25lIGFmdGVyIHNlbmRpbmcK KwkgKiBzeW5jIHJlcXVlc3QKKwkgKi8KKwlpZiAoZmluaXNoKSB7CisJCWh5cGVyX2RtYWJ1Zl9y ZW1vdmVfaW1wb3J0ZWQoaW1wb3J0ZWQtPmhpZCk7CisJCWtmcmVlKGltcG9ydGVkKTsKKwl9Cit9 CisKK3N0YXRpYyBpbnQgaHlwZXJfZG1hYnVmX29wc19iZWdpbl9jcHVfYWNjZXNzKHN0cnVjdCBk bWFfYnVmICpkbWFidWYsCisJCQkJCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQor eworCXN0cnVjdCBpbXBvcnRlZF9zZ3RfaW5mbyAqaW1wb3J0ZWQ7CisJaW50IHJldDsKKworCWlm ICghZG1hYnVmLT5wcml2KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWltcG9ydGVkID0gKHN0cnVj dCBpbXBvcnRlZF9zZ3RfaW5mbyAqKWRtYWJ1Zi0+cHJpdjsKKworCXJldCA9IHN5bmNfcmVxdWVz dChpbXBvcnRlZC0+aGlkLCBIWVBFUl9ETUFCVUZfT1BTX0JFR0lOX0NQVV9BQ0NFU1MpOworCisJ cmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBoeXBlcl9kbWFidWZfb3BzX2VuZF9jcHVfYWNj ZXNzKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCisJCQkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0 aW9uIGRpcikKK3sKKwlzdHJ1Y3QgaW1wb3J0ZWRfc2d0X2luZm8gKmltcG9ydGVkOworCWludCBy ZXQ7CisKKwlpZiAoIWRtYWJ1Zi0+cHJpdikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpbXBvcnRl ZCA9IChzdHJ1Y3QgaW1wb3J0ZWRfc2d0X2luZm8gKilkbWFidWYtPnByaXY7CisKKwlyZXQgPSBz eW5jX3JlcXVlc3QoaW1wb3J0ZWQtPmhpZCwgSFlQRVJfRE1BQlVGX09QU19FTkRfQ1BVX0FDQ0VT Uyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgKmh5cGVyX2RtYWJ1Zl9vcHNfa21h cF9hdG9taWMoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKKwkJCQkJICB1bnNpZ25lZCBsb25nIHBn bnVtKQoreworCXN0cnVjdCBpbXBvcnRlZF9zZ3RfaW5mbyAqaW1wb3J0ZWQ7CisJaW50IHJldDsK KworCWlmICghZG1hYnVmLT5wcml2KQorCQlyZXR1cm4gTlVMTDsKKworCWltcG9ydGVkID0gKHN0 cnVjdCBpbXBvcnRlZF9zZ3RfaW5mbyAqKWRtYWJ1Zi0+cHJpdjsKKworCXJldCA9IHN5bmNfcmVx dWVzdChpbXBvcnRlZC0+aGlkLCBIWVBFUl9ETUFCVUZfT1BTX0tNQVBfQVRPTUlDKTsKKworCS8q IFRPRE86IE5VTEwgZm9yIG5vdy4gTmVlZCB0byByZXR1cm4gdGhlIGFkZHIgb2YgbWFwcGVkIHJl Z2lvbiAqLworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBoeXBlcl9kbWFidWZfb3Bz X2t1bm1hcF9hdG9taWMoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKKwkJCQkJICAgdW5zaWduZWQg bG9uZyBwZ251bSwgdm9pZCAqdmFkZHIpCit7CisJc3RydWN0IGltcG9ydGVkX3NndF9pbmZvICpp bXBvcnRlZDsKKwlpbnQgcmV0OworCisJaWYgKCFkbWFidWYtPnByaXYpCisJCXJldHVybjsKKwor CWltcG9ydGVkID0gKHN0cnVjdCBpbXBvcnRlZF9zZ3RfaW5mbyAqKWRtYWJ1Zi0+cHJpdjsKKwor CXJldCA9IHN5bmNfcmVxdWVzdChpbXBvcnRlZC0+aGlkLCBIWVBFUl9ETUFCVUZfT1BTX0tVTk1B UF9BVE9NSUMpOworfQorCitzdGF0aWMgdm9pZCAqaHlwZXJfZG1hYnVmX29wc19rbWFwKHN0cnVj dCBkbWFfYnVmICpkbWFidWYsIHVuc2lnbmVkIGxvbmcgcGdudW0pCit7CisJc3RydWN0IGltcG9y dGVkX3NndF9pbmZvICppbXBvcnRlZDsKKwlpbnQgcmV0OworCisJaWYgKCFkbWFidWYtPnByaXYp CisJCXJldHVybiBOVUxMOworCisJaW1wb3J0ZWQgPSAoc3RydWN0IGltcG9ydGVkX3NndF9pbmZv ICopZG1hYnVmLT5wcml2OworCisJcmV0ID0gc3luY19yZXF1ZXN0KGltcG9ydGVkLT5oaWQsIEhZ UEVSX0RNQUJVRl9PUFNfS01BUCk7CisKKwkvKiBmb3Igbm93IE5VTEwuLiBuZWVkIHRvIHJldHVy biB0aGUgYWRkcmVzcyBvZiBtYXBwZWQgcmVnaW9uICovCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0 YXRpYyB2b2lkIGh5cGVyX2RtYWJ1Zl9vcHNfa3VubWFwKHN0cnVjdCBkbWFfYnVmICpkbWFidWYs IHVuc2lnbmVkIGxvbmcgcGdudW0sCisJCQkJICAgIHZvaWQgKnZhZGRyKQoreworCXN0cnVjdCBp bXBvcnRlZF9zZ3RfaW5mbyAqaW1wb3J0ZWQ7CisJaW50IHJldDsKKworCWlmICghZG1hYnVmLT5w cml2KQorCQlyZXR1cm47CisKKwlpbXBvcnRlZCA9IChzdHJ1Y3QgaW1wb3J0ZWRfc2d0X2luZm8g KilkbWFidWYtPnByaXY7CisKKwlyZXQgPSBzeW5jX3JlcXVlc3QoaW1wb3J0ZWQtPmhpZCwgSFlQ RVJfRE1BQlVGX09QU19LVU5NQVApOworfQorCitzdGF0aWMgaW50IGh5cGVyX2RtYWJ1Zl9vcHNf bW1hcChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAorCQkJCSBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qg KnZtYSkKK3sKKwlzdHJ1Y3QgaW1wb3J0ZWRfc2d0X2luZm8gKmltcG9ydGVkOworCWludCByZXQ7 CisKKwlpZiAoIWRtYWJ1Zi0+cHJpdikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpbXBvcnRlZCA9 IChzdHJ1Y3QgaW1wb3J0ZWRfc2d0X2luZm8gKilkbWFidWYtPnByaXY7CisKKwlyZXQgPSBzeW5j X3JlcXVlc3QoaW1wb3J0ZWQtPmhpZCwgSFlQRVJfRE1BQlVGX09QU19NTUFQKTsKKworCXJldHVy biByZXQ7Cit9CisKK3N0YXRpYyB2b2lkICpoeXBlcl9kbWFidWZfb3BzX3ZtYXAoc3RydWN0IGRt YV9idWYgKmRtYWJ1ZikKK3sKKwlzdHJ1Y3QgaW1wb3J0ZWRfc2d0X2luZm8gKmltcG9ydGVkOwor CWludCByZXQ7CisKKwlpZiAoIWRtYWJ1Zi0+cHJpdikKKwkJcmV0dXJuIE5VTEw7CisKKwlpbXBv cnRlZCA9IChzdHJ1Y3QgaW1wb3J0ZWRfc2d0X2luZm8gKilkbWFidWYtPnByaXY7CisKKwlyZXQg PSBzeW5jX3JlcXVlc3QoaW1wb3J0ZWQtPmhpZCwgSFlQRVJfRE1BQlVGX09QU19WTUFQKTsKKwor CXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBoeXBlcl9kbWFidWZfb3BzX3Z1bm1hcChz dHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCB2b2lkICp2YWRkcikKK3sKKwlzdHJ1Y3QgaW1wb3J0ZWRf c2d0X2luZm8gKmltcG9ydGVkOworCWludCByZXQ7CisKKwlpZiAoIWRtYWJ1Zi0+cHJpdikKKwkJ cmV0dXJuOworCisJaW1wb3J0ZWQgPSAoc3RydWN0IGltcG9ydGVkX3NndF9pbmZvICopZG1hYnVm LT5wcml2OworCisJcmV0ID0gc3luY19yZXF1ZXN0KGltcG9ydGVkLT5oaWQsIEhZUEVSX0RNQUJV Rl9PUFNfVlVOTUFQKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfYnVmX29wcyBoeXBl cl9kbWFidWZfb3BzID0geworCS5hdHRhY2ggPSBoeXBlcl9kbWFidWZfb3BzX2F0dGFjaCwKKwku ZGV0YWNoID0gaHlwZXJfZG1hYnVmX29wc19kZXRhY2gsCisJLm1hcF9kbWFfYnVmID0gaHlwZXJf ZG1hYnVmX29wc19tYXAsCisJLnVubWFwX2RtYV9idWYgPSBoeXBlcl9kbWFidWZfb3BzX3VubWFw LAorCS5yZWxlYXNlID0gaHlwZXJfZG1hYnVmX29wc19yZWxlYXNlLAorCS5iZWdpbl9jcHVfYWNj ZXNzID0gKHZvaWQgKiloeXBlcl9kbWFidWZfb3BzX2JlZ2luX2NwdV9hY2Nlc3MsCisJLmVuZF9j cHVfYWNjZXNzID0gKHZvaWQgKiloeXBlcl9kbWFidWZfb3BzX2VuZF9jcHVfYWNjZXNzLAorCS5t YXBfYXRvbWljID0gaHlwZXJfZG1hYnVmX29wc19rbWFwX2F0b21pYywKKwkudW5tYXBfYXRvbWlj ID0gaHlwZXJfZG1hYnVmX29wc19rdW5tYXBfYXRvbWljLAorCS5tYXAgPSBoeXBlcl9kbWFidWZf b3BzX2ttYXAsCisJLnVubWFwID0gaHlwZXJfZG1hYnVmX29wc19rdW5tYXAsCisJLm1tYXAgPSBo eXBlcl9kbWFidWZfb3BzX21tYXAsCisJLnZtYXAgPSBoeXBlcl9kbWFidWZfb3BzX3ZtYXAsCisJ LnZ1bm1hcCA9IGh5cGVyX2RtYWJ1Zl9vcHNfdnVubWFwLAorfTsKKworLyogZXhwb3J0aW5nIGRt YWJ1ZiBhcyBmZCAqLworaW50IGh5cGVyX2RtYWJ1Zl9leHBvcnRfZmQoc3RydWN0IGltcG9ydGVk X3NndF9pbmZvICppbXBvcnRlZCwgaW50IGZsYWdzKQoreworCWludCBmZCA9IC0xOworCisJLyog Y2FsbCBoeXBlcl9kbWFidWZfZXhwb3J0X2RtYWJ1ZiBhbmQgY3JlYXRlCisJICogYW5kIGJpbmQg YSBoYW5kbGUgZm9yIGl0IHRoZW4gcmVsZWFzZQorCSAqLworCWh5cGVyX2RtYWJ1Zl9leHBvcnRf ZG1hX2J1ZihpbXBvcnRlZCk7CisKKwlpZiAoaW1wb3J0ZWQtPmRtYV9idWYpCisJCWZkID0gZG1h X2J1Zl9mZChpbXBvcnRlZC0+ZG1hX2J1ZiwgZmxhZ3MpOworCisJcmV0dXJuIGZkOworfQorCit2 b2lkIGh5cGVyX2RtYWJ1Zl9leHBvcnRfZG1hX2J1ZihzdHJ1Y3QgaW1wb3J0ZWRfc2d0X2luZm8g KmltcG9ydGVkKQoreworCURFRklORV9ETUFfQlVGX0VYUE9SVF9JTkZPKGV4cF9pbmZvKTsKKwor CWV4cF9pbmZvLm9wcyA9ICZoeXBlcl9kbWFidWZfb3BzOworCisJLyogbXVsdGlwbGUgb2YgUEFH RV9TSVpFLCBub3QgY29uc2lkZXJpbmcgb2Zmc2V0ICovCisJZXhwX2luZm8uc2l6ZSA9IGltcG9y dGVkLT5zZ3QtPm5lbnRzICogUEFHRV9TSVpFOworCWV4cF9pbmZvLmZsYWdzID0gLyogbm90IHN1 cmUgYWJvdXQgZmxhZyAqLyAwOworCWV4cF9pbmZvLnByaXYgPSBpbXBvcnRlZDsKKworCWltcG9y dGVkLT5kbWFfYnVmID0gZG1hX2J1Zl9leHBvcnQoJmV4cF9pbmZvKTsKK30KZGlmZiAtLWdpdCBh L2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX29wcy5oIGIvZHJpdmVy cy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfb3BzLmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uYzU1MDVhNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv ZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX29wcy5oCkBAIC0wLDAgKzEsMzIgQEAK Ky8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdh cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICog dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBh bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGlu Y2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwg Y29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgor ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg QU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNI QUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFO WSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFD VElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9V VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RI RVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0hZ UEVSX0RNQUJVRl9PUFNfSF9fCisjZGVmaW5lIF9fSFlQRVJfRE1BQlVGX09QU19IX18KKworaW50 IGh5cGVyX2RtYWJ1Zl9leHBvcnRfZmQoc3RydWN0IGltcG9ydGVkX3NndF9pbmZvICppbXBvcnRl ZCwgaW50IGZsYWdzKTsKKwordm9pZCBoeXBlcl9kbWFidWZfZXhwb3J0X2RtYV9idWYoc3RydWN0 IGltcG9ydGVkX3NndF9pbmZvICppbXBvcnRlZCk7CisKKyNlbmRpZiAvKiBfX0hZUEVSX0RNQUJV Rl9JTVBfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5 cGVyX2RtYWJ1Zl9xdWVyeS5jIGIvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9k bWFidWZfcXVlcnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjJmNTZi Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9k bWFidWZfcXVlcnkuYwpAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE3 IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3 YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJh Z3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9y dGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENP UFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVS CisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNP RlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBEb25nd29uIEtpbSA8ZG9uZ3dvbi5raW1A aW50ZWwuY29tPgorICogICAgTWF0ZXVzeiBQb2xyb2xhIDxtYXRldXN6eC5wb3Ryb2xhQGludGVs LmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4KKyNpbmNsdWRlIDxs aW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSAiaHlwZXJfZG1hYnVmX2Rydi5oIgorI2luY2x1ZGUg Imh5cGVyX2RtYWJ1Zl9zdHJ1Y3QuaCIKKyNpbmNsdWRlICJoeXBlcl9kbWFidWZfaWQuaCIKKwor I2RlZmluZSBIWVBFUl9ETUFCVUZfU0laRShuZW50cywgZmlyc3Rfb2Zmc2V0LCBsYXN0X2xlbikg XAorCSgobmVudHMpKlBBR0VfU0laRSAtIChmaXJzdF9vZmZzZXQpIC0gUEFHRV9TSVpFICsgKGxh c3RfbGVuKSkKKworaW50IGh5cGVyX2RtYWJ1Zl9xdWVyeV9leHBvcnRlZChzdHJ1Y3QgZXhwb3J0 ZWRfc2d0X2luZm8gKmV4cG9ydGVkLAorCQkJCWludCBxdWVyeSwgdW5zaWduZWQgbG9uZyAqaW5m bykKK3sKKwlzd2l0Y2ggKHF1ZXJ5KSB7CisJY2FzZSBIWVBFUl9ETUFCVUZfUVVFUllfVFlQRToK KwkJKmluZm8gPSBFWFBPUlRFRDsKKwkJYnJlYWs7CisKKwkvKiBleHBvcnRpbmcgZG9tYWluIG9m IHRoaXMgc3BlY2lmaWMgZG1hYnVmKi8KKwljYXNlIEhZUEVSX0RNQUJVRl9RVUVSWV9FWFBPUlRF UjoKKwkJKmluZm8gPSBIWVBFUl9ETUFCVUZfRE9NX0lEKGV4cG9ydGVkLT5oaWQpOworCQlicmVh azsKKworCS8qIGltcG9ydGluZyBkb21haW4gb2YgdGhpcyBzcGVjaWZpYyBkbWFidWYgKi8KKwlj YXNlIEhZUEVSX0RNQUJVRl9RVUVSWV9JTVBPUlRFUjoKKwkJKmluZm8gPSBleHBvcnRlZC0+cmRv bWlkOworCQlicmVhazsKKworCS8qIHNpemUgb2YgZG1hYnVmIGluIGJ5dGUgKi8KKwljYXNlIEhZ UEVSX0RNQUJVRl9RVUVSWV9TSVpFOgorCQkqaW5mbyA9IGV4cG9ydGVkLT5kbWFfYnVmLT5zaXpl OworCQlicmVhazsKKworCS8qIHdoZXRoZXIgdGhlIGJ1ZmZlciBpcyB1c2VkIGJ5IGltcG9ydGVy ICovCisJY2FzZSBIWVBFUl9ETUFCVUZfUVVFUllfQlVTWToKKwkJKmluZm8gPSAoZXhwb3J0ZWQt PmFjdGl2ZSA+IDApOworCQlicmVhazsKKworCS8qIHdoZXRoZXIgdGhlIGJ1ZmZlciBpcyB1bmV4 cG9ydGVkICovCisJY2FzZSBIWVBFUl9ETUFCVUZfUVVFUllfVU5FWFBPUlRFRDoKKwkJKmluZm8g PSAhZXhwb3J0ZWQtPnZhbGlkOworCQlicmVhazsKKworCS8qIHdoZXRoZXIgdGhlIGJ1ZmZlciBp cyBzY2hlZHVsZWQgdG8gYmUgdW5leHBvcnRlZCAqLworCWNhc2UgSFlQRVJfRE1BQlVGX1FVRVJZ X0RFTEFZRURfVU5FWFBPUlRFRDoKKwkJKmluZm8gPSAhZXhwb3J0ZWQtPnVuZXhwb3J0X3NjaGVk OworCQlicmVhazsKKworCS8qIHNpemUgb2YgcHJpdmF0ZSBpbmZvIGF0dGFjaGVkIHRvIGJ1ZmZl ciAqLworCWNhc2UgSFlQRVJfRE1BQlVGX1FVRVJZX1BSSVZfSU5GT19TSVpFOgorCQkqaW5mbyA9 IGV4cG9ydGVkLT5zel9wcml2OworCQlicmVhazsKKworCS8qIGNvcHkgcHJpdmF0ZSBpbmZvIGF0 dGFjaGVkIHRvIGJ1ZmZlciAqLworCWNhc2UgSFlQRVJfRE1BQlVGX1FVRVJZX1BSSVZfSU5GTzoK KwkJaWYgKGV4cG9ydGVkLT5zel9wcml2ID4gMCkgeworCQkJaW50IG47CisKKwkJCW4gPSBjb3B5 X3RvX3VzZXIoKHZvaWQgX191c2VyICopICppbmZvLAorCQkJCQlleHBvcnRlZC0+cHJpdiwKKwkJ CQkJZXhwb3J0ZWQtPnN6X3ByaXYpOworCQkJaWYgKG4gIT0gMCkKKwkJCQlyZXR1cm4gLUVJTlZB TDsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwor CXJldHVybiAwOworfQorCisKK2ludCBoeXBlcl9kbWFidWZfcXVlcnlfaW1wb3J0ZWQoc3RydWN0 IGltcG9ydGVkX3NndF9pbmZvICppbXBvcnRlZCwKKwkJCQlpbnQgcXVlcnksIHVuc2lnbmVkIGxv bmcgKmluZm8pCit7CisJc3dpdGNoIChxdWVyeSkgeworCWNhc2UgSFlQRVJfRE1BQlVGX1FVRVJZ X1RZUEU6CisJCSppbmZvID0gSU1QT1JURUQ7CisJCWJyZWFrOworCisJLyogZXhwb3J0aW5nIGRv bWFpbiBvZiB0aGlzIHNwZWNpZmljIGRtYWJ1ZiovCisJY2FzZSBIWVBFUl9ETUFCVUZfUVVFUllf RVhQT1JURVI6CisJCSppbmZvID0gSFlQRVJfRE1BQlVGX0RPTV9JRChpbXBvcnRlZC0+aGlkKTsK KwkJYnJlYWs7CisKKwkvKiBpbXBvcnRpbmcgZG9tYWluIG9mIHRoaXMgc3BlY2lmaWMgZG1hYnVm ICovCisJY2FzZSBIWVBFUl9ETUFCVUZfUVVFUllfSU1QT1JURVI6CisJCSppbmZvID0gaHlfZHJ2 X3ByaXYtPmRvbWlkOworCQlicmVhazsKKworCS8qIHNpemUgb2YgZG1hYnVmIGluIGJ5dGUgKi8K KwljYXNlIEhZUEVSX0RNQUJVRl9RVUVSWV9TSVpFOgorCQlpZiAoaW1wb3J0ZWQtPmRtYV9idWYp IHsKKwkJCS8qIGlmIGxvY2FsIGRtYV9idWYgaXMgY3JlYXRlZCAoaWYgaXQncworCQkJICogZXZl ciBtYXBwZWQpLCByZXRyaWV2ZSBpdCBkaXJlY3RseQorCQkJICogZnJvbSBzdHJ1Y3QgZG1hX2J1 ZiAqCisJCQkgKi8KKwkJCSppbmZvID0gaW1wb3J0ZWQtPmRtYV9idWYtPnNpemU7CisJCX0gZWxz ZSB7CisJCQkvKiBjYWxjdWF0ZSBpdCBmcm9tIGdpdmVuIG5lbnRzLCBmcnN0X29mc3QKKwkJCSAq IGFuZCBsYXN0X2xlbgorCQkJICovCisJCQkqaW5mbyA9IEhZUEVSX0RNQUJVRl9TSVpFKGltcG9y dGVkLT5uZW50cywKKwkJCQkJCSAgaW1wb3J0ZWQtPmZyc3Rfb2ZzdCwKKwkJCQkJCSAgaW1wb3J0 ZWQtPmxhc3RfbGVuKTsKKwkJfQorCQlicmVhazsKKworCS8qIHdoZXRoZXIgdGhlIGJ1ZmZlciBp cyB1c2VkIG9yIG5vdCAqLworCWNhc2UgSFlQRVJfRE1BQlVGX1FVRVJZX0JVU1k6CisJCS8qIGNo ZWNrcyBpZiBpdCdzIHVzZWQgYnkgaW1wb3J0ZXIgKi8KKwkJKmluZm8gPSAoaW1wb3J0ZWQtPmlt cG9ydGVycyA+IDApOworCQlicmVhazsKKworCS8qIHdoZXRoZXIgdGhlIGJ1ZmZlciBpcyB1bmV4 cG9ydGVkICovCisJY2FzZSBIWVBFUl9ETUFCVUZfUVVFUllfVU5FWFBPUlRFRDoKKwkJKmluZm8g PSAhaW1wb3J0ZWQtPnZhbGlkOworCQlicmVhazsKKworCS8qIHNpemUgb2YgcHJpdmF0ZSBpbmZv IGF0dGFjaGVkIHRvIGJ1ZmZlciAqLworCWNhc2UgSFlQRVJfRE1BQlVGX1FVRVJZX1BSSVZfSU5G T19TSVpFOgorCQkqaW5mbyA9IGltcG9ydGVkLT5zel9wcml2OworCQlicmVhazsKKworCS8qIGNv cHkgcHJpdmF0ZSBpbmZvIGF0dGFjaGVkIHRvIGJ1ZmZlciAqLworCWNhc2UgSFlQRVJfRE1BQlVG X1FVRVJZX1BSSVZfSU5GTzoKKwkJaWYgKGltcG9ydGVkLT5zel9wcml2ID4gMCkgeworCQkJaW50 IG47CisKKwkJCW4gPSBjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopKmluZm8sCisJCQkJCWlt cG9ydGVkLT5wcml2LAorCQkJCQlpbXBvcnRlZC0+c3pfcHJpdik7CisJCQlpZiAobiAhPSAwKQor CQkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJu IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1i dWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9xdWVyeS5oIGIvZHJpdmVycy9kbWEtYnVmL2h5 cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfcXVlcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi42NWFlNzM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEtYnVmL2h5 cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfcXVlcnkuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVm IF9fSFlQRVJfRE1BQlVGX1FVRVJZX0hfXworI2RlZmluZSBfX0hZUEVSX0RNQUJVRl9RVUVSWV9I X18KKworaW50IGh5cGVyX2RtYWJ1Zl9xdWVyeV9pbXBvcnRlZChzdHJ1Y3QgaW1wb3J0ZWRfc2d0 X2luZm8gKmltcG9ydGVkLAorCQkJCWludCBxdWVyeSwgdW5zaWduZWQgbG9uZyAqaW5mbyk7CisK K2ludCBoeXBlcl9kbWFidWZfcXVlcnlfZXhwb3J0ZWQoc3RydWN0IGV4cG9ydGVkX3NndF9pbmZv ICpleHBvcnRlZCwKKwkJCQlpbnQgcXVlcnksIHVuc2lnbmVkIGxvbmcgKmluZm8pOworCisjZW5k aWYgLy8gX19IWVBFUl9ETUFCVUZfUVVFUllfSF9fCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1i dWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9yZW1vdGVfc3luYy5jIGIvZHJpdmVycy9kbWEt YnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfcmVtb3RlX3N5bmMuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODJmZDdiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfcmVtb3RlX3N5bmMuYwpAQCAtMCww ICsxLDMyMiBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE3IEludGVsIENvcnBvcmF0aW9uCisg KgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFu eSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2Np YXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGlu IHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1p dGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlz aCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUg U29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUg aXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u czoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u IG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1 ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0 d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBX QVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJV VCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4g Tk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJ QUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwor ICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhF IFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhv cnM6CisgKiAgICBEb25nd29uIEtpbSA8ZG9uZ3dvbi5raW1AaW50ZWwuY29tPgorICogICAgTWF0 ZXVzeiBQb2xyb2xhIDxtYXRldXN6eC5wb3Ryb2xhQGludGVsLmNvbT4KKyAqCisgKi8KKworI2lu Y2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVk ZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4KKyNpbmNsdWRlICJo eXBlcl9kbWFidWZfZHJ2LmgiCisjaW5jbHVkZSAiaHlwZXJfZG1hYnVmX3N0cnVjdC5oIgorI2lu Y2x1ZGUgImh5cGVyX2RtYWJ1Zl9saXN0LmgiCisjaW5jbHVkZSAiaHlwZXJfZG1hYnVmX21zZy5o IgorI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9pZC5oIgorI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9z Z2xfcHJvYy5oIgorCisvKiBXaGVuZXZlciBpbXBvcnRlciBkb2VzIGRtYSBvcGVyYXRpb25zIGZy b20gcmVtb3RlIGRvbWFpbiwKKyAqIGEgbm90aWZpY2F0aW9uIGlzIHNlbnQgdG8gdGhlIGV4cG9y dGVyIHNvIHRoYXQgZXhwb3J0ZXIKKyAqIGlzc3VlcyBlcXVpdmFsZW50IGRtYSBvcGVyYXRpb24g b24gdGhlIG9yaWdpbmFsIGRtYSBidWYKKyAqIGZvciBpbmRpcmVjdCBzeW5jaHJvbml6YXRpb24g dmlhIHNoYWRvdyBvcGVyYXRpb25zLgorICoKKyAqIEFsbCBwdHJzIGFuZCByZWZlcmVuY2VzIChl Lmcgc3RydWN0IHNnX3RhYmxlKiwKKyAqIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQpIGNyZWF0 ZWQgdmlhIHRoZXNlIG9wZXJhdGlvbnMgb24KKyAqIGV4cG9ydGVyJ3Mgc2lkZSBhcmUga2VwdCBp biBzdGFjayAoaW1wbGVtZW50ZWQgYXMgY2lyY3VsYXIKKyAqIGxpbmtlZC1saXN0cykgc2VwYXJh dGVseSBzbyB0aGF0IHRob3NlIGNhbiBiZSByZS1yZWZlcmVuY2VkCisgKiBsYXRlciB3aGVuIHVu bWFwcGluZyBvcGVyYXRpb25zIGFyZSBpbnZva2VkIHRvIGZyZWUgdGhvc2UuCisgKgorICogVGhl IHZlcnkgZmlyc3QgZWxlbWVudCBvbiB0aGUgYm90dG9tIG9mIGVhY2ggc3RhY2sgaG9sZHMKKyAq IGlzIHdoYXQgaXMgY3JlYXRlZCB3aGVuIGluaXRpYWwgZXhwb3J0aW5nIGlzIGlzc3VlZCBzbyBp dAorICogc2hvdWxkIG5vdCBiZSBtb2RpZmllZCBvciByZWxlYXNlZCBieSB0aGlzIGZ1Y3Rpb24u CisgKi8KK2ludCBoeXBlcl9kbWFidWZfcmVtb3RlX3N5bmMoaHlwZXJfZG1hYnVmX2lkX3QgaGlk LCBpbnQgb3BzKQoreworCXN0cnVjdCBleHBvcnRlZF9zZ3RfaW5mbyAqZXhwb3J0ZWQ7CisJc3Ry dWN0IHNndF9saXN0ICpzZ3RsOworCXN0cnVjdCBhdHRhY2htZW50X2xpc3QgKmF0dGFjaGw7CisJ c3RydWN0IGttYXBfdmFkZHJfbGlzdCAqdmFfa21hcGw7CisJc3RydWN0IHZtYXBfdmFkZHJfbGlz dCAqdmFfdm1hcGw7CisJaW50IHJldDsKKworCS8qIGZpbmQgYSBjb3Jlc3BvbmRpbmcgU0dUIGZv ciB0aGUgaWQgKi8KKwlleHBvcnRlZCA9IGh5cGVyX2RtYWJ1Zl9maW5kX2V4cG9ydGVkKGhpZCk7 CisKKwlpZiAoIWV4cG9ydGVkKSB7CisJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCSJk bWFidWYgcmVtb3RlIHN5bmM6OmNhbid0IGZpbmQgZXhwb3J0ZWQgbGlzdFxuIik7CisJCXJldHVy biAtRU5PRU5UOworCX0KKworCXN3aXRjaCAob3BzKSB7CisJY2FzZSBIWVBFUl9ETUFCVUZfT1BT X0FUVEFDSDoKKwkJYXR0YWNobCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCphdHRhY2hsKSwgR0ZQX0tF Uk5FTCk7CisKKwkJaWYgKCFhdHRhY2hsKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJYXR0YWNo bC0+YXR0YWNoID0gZG1hX2J1Zl9hdHRhY2goZXhwb3J0ZWQtPmRtYV9idWYsCisJCQkJCQkgaHlf ZHJ2X3ByaXYtPmRldik7CisKKwkJaWYgKCFhdHRhY2hsLT5hdHRhY2gpIHsKKwkJCWtmcmVlKGF0 dGFjaGwpOworCQkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAorCQkJCSJyZW1vdGUgc3luYzo6 SFlQRVJfRE1BQlVGX09QU19BVFRBQ0hcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwor CQlsaXN0X2FkZCgmYXR0YWNobC0+bGlzdCwgJmV4cG9ydGVkLT5hY3RpdmVfYXR0YWNoZWQtPmxp c3QpOworCQlicmVhazsKKworCWNhc2UgSFlQRVJfRE1BQlVGX09QU19ERVRBQ0g6CisJCWlmIChs aXN0X2VtcHR5KCZleHBvcnRlZC0+YWN0aXZlX2F0dGFjaGVkLT5saXN0KSkgeworCQkJZGV2X2Vy cihoeV9kcnZfcHJpdi0+ZGV2LAorCQkJCSJyZW1vdGUgc3luYzo6SFlQRVJfRE1BQlVGX09QU19E RVRBQ0hcbiIpOworCQkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAorCQkJCSJubyBtb3JlIGRt YWJ1ZiBhdHRhY2htZW50IGxlZnQgdG8gYmUgZGV0YWNoZWRcbiIpOworCQkJcmV0dXJuIC1FRkFV TFQ7CisJCX0KKworCQlhdHRhY2hsID0gbGlzdF9maXJzdF9lbnRyeSgmZXhwb3J0ZWQtPmFjdGl2 ZV9hdHRhY2hlZC0+bGlzdCwKKwkJCQkJICAgc3RydWN0IGF0dGFjaG1lbnRfbGlzdCwgbGlzdCk7 CisKKwkJZG1hX2J1Zl9kZXRhY2goZXhwb3J0ZWQtPmRtYV9idWYsIGF0dGFjaGwtPmF0dGFjaCk7 CisJCWxpc3RfZGVsKCZhdHRhY2hsLT5saXN0KTsKKwkJa2ZyZWUoYXR0YWNobCk7CisJCWJyZWFr OworCisJY2FzZSBIWVBFUl9ETUFCVUZfT1BTX01BUDoKKwkJaWYgKGxpc3RfZW1wdHkoJmV4cG9y dGVkLT5hY3RpdmVfYXR0YWNoZWQtPmxpc3QpKSB7CisJCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5k ZXYsCisJCQkJInJlbW90ZSBzeW5jOjpIWVBFUl9ETUFCVUZfT1BTX01BUFxuIik7CisJCQlkZXZf ZXJyKGh5X2Rydl9wcml2LT5kZXYsCisJCQkJIm5vIG1vcmUgZG1hYnVmIGF0dGFjaG1lbnQgbGVm dCB0byBiZSBtYXBwZWRcbiIpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKworCQlhdHRhY2hs ID0gbGlzdF9maXJzdF9lbnRyeSgmZXhwb3J0ZWQtPmFjdGl2ZV9hdHRhY2hlZC0+bGlzdCwKKwkJ CQkJICAgc3RydWN0IGF0dGFjaG1lbnRfbGlzdCwgbGlzdCk7CisKKwkJc2d0bCA9IGtjYWxsb2Mo MSwgc2l6ZW9mKCpzZ3RsKSwgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKCFzZ3RsKQorCQkJcmV0dXJu IC1FTk9NRU07CisKKwkJc2d0bC0+c2d0ID0gZG1hX2J1Zl9tYXBfYXR0YWNobWVudChhdHRhY2hs LT5hdHRhY2gsCisJCQkJCQkgICBETUFfQklESVJFQ1RJT05BTCk7CisJCWlmICghc2d0bC0+c2d0 KSB7CisJCQlrZnJlZShzZ3RsKTsKKwkJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCQki cmVtb3RlIHN5bmM6OkhZUEVSX0RNQUJVRl9PUFNfTUFQXG4iKTsKKwkJCXJldHVybiAtRU5PTUVN OworCQl9CisJCWxpc3RfYWRkKCZzZ3RsLT5saXN0LCAmZXhwb3J0ZWQtPmFjdGl2ZV9zZ3RzLT5s aXN0KTsKKwkJYnJlYWs7CisKKwljYXNlIEhZUEVSX0RNQUJVRl9PUFNfVU5NQVA6CisJCWlmIChs aXN0X2VtcHR5KCZleHBvcnRlZC0+YWN0aXZlX3NndHMtPmxpc3QpIHx8CisJCSAgICBsaXN0X2Vt cHR5KCZleHBvcnRlZC0+YWN0aXZlX2F0dGFjaGVkLT5saXN0KSkgeworCQkJZGV2X2VycihoeV9k cnZfcHJpdi0+ZGV2LAorCQkJCSJyZW1vdGUgc3luYzo6SFlQRVJfRE1BQlVGX09QU19VTk1BUFxu Iik7CisJCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCisJCQkJIm5vIFNHVCBvciBhdHRhY2gg bGVmdCB0byBiZSB1bm1hcHBlZFxuIik7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCisJCWF0 dGFjaGwgPSBsaXN0X2ZpcnN0X2VudHJ5KCZleHBvcnRlZC0+YWN0aXZlX2F0dGFjaGVkLT5saXN0 LAorCQkJCQkgICBzdHJ1Y3QgYXR0YWNobWVudF9saXN0LCBsaXN0KTsKKwkJc2d0bCA9IGxpc3Rf Zmlyc3RfZW50cnkoJmV4cG9ydGVkLT5hY3RpdmVfc2d0cy0+bGlzdCwKKwkJCQkJc3RydWN0IHNn dF9saXN0LCBsaXN0KTsKKworCQlkbWFfYnVmX3VubWFwX2F0dGFjaG1lbnQoYXR0YWNobC0+YXR0 YWNoLCBzZ3RsLT5zZ3QsCisJCQkJCSBETUFfQklESVJFQ1RJT05BTCk7CisJCWxpc3RfZGVsKCZz Z3RsLT5saXN0KTsKKwkJa2ZyZWUoc2d0bCk7CisJCWJyZWFrOworCisJY2FzZSBIWVBFUl9ETUFC VUZfT1BTX1JFTEVBU0U6CisJCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCSJpZDolZCBr ZXk6JWQgJWQgJWR9IHJlbGVhc2VkLCByZWYgbGVmdDogJWRcbiIsCisJCQkgZXhwb3J0ZWQtPmhp ZC5pZCwgZXhwb3J0ZWQtPmhpZC5ybmdfa2V5WzBdLAorCQkJIGV4cG9ydGVkLT5oaWQucm5nX2tl eVsxXSwgZXhwb3J0ZWQtPmhpZC5ybmdfa2V5WzJdLAorCQkJIGV4cG9ydGVkLT5hY3RpdmUgLSAx KTsKKworCQlleHBvcnRlZC0+YWN0aXZlLS07CisKKwkJLyogSWYgdGhlcmUgYXJlIHN0aWxsIGlt cG9ydGVycyBqdXN0IGJyZWFrLCBpZiBubyB0aGVuCisJCSAqIGNvbnRpbnVlIHdpdGggZmluYWwg Y2xlYW51cAorCQkgKi8KKwkJaWYgKGV4cG9ydGVkLT5hY3RpdmUpCisJCQlicmVhazsKKworCQkv KiBJbXBvcnRlciBqdXN0IHJlbGVhc2VkIGJ1ZmZlciBmZCwgY2hlY2sgaWYgdGhlcmUgaXMKKwkJ ICogYW55IG90aGVyIGltcG9ydGVyIHN0aWxsIHVzaW5nIGl0LgorCQkgKiBJZiBub3QgYW5kIGJ1 ZmZlciB3YXMgdW5leHBvcnRlZCwgY2xlYW4gdXAgc2hhcmVkCisJCSAqIGRhdGEgYW5kIHJlbW92 ZSB0aGF0IGJ1ZmZlci4KKwkJICovCisJCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCSJC dWZmZXIge2lkOiVkIGtleTolZCAlZCAlZH0gZmluYWwgcmVsZWFzZWRcbiIsCisJCQlleHBvcnRl ZC0+aGlkLmlkLCBleHBvcnRlZC0+aGlkLnJuZ19rZXlbMF0sCisJCQlleHBvcnRlZC0+aGlkLnJu Z19rZXlbMV0sIGV4cG9ydGVkLT5oaWQucm5nX2tleVsyXSk7CisKKwkJaWYgKCFleHBvcnRlZC0+ dmFsaWQgJiYgIWV4cG9ydGVkLT5hY3RpdmUgJiYKKwkJICAgICFleHBvcnRlZC0+dW5leHBvcnRf c2NoZWQpIHsKKwkJCWh5cGVyX2RtYWJ1Zl9jbGVhbnVwX3NndF9pbmZvKGV4cG9ydGVkLCBmYWxz ZSk7CisJCQloeXBlcl9kbWFidWZfcmVtb3ZlX2V4cG9ydGVkKGhpZCk7CisJCQlrZnJlZShleHBv cnRlZCk7CisJCQkvKiBzdG9yZSBoeXBlcl9kbWFidWZfaWQgaW4gdGhlIGxpc3QgZm9yIHJldXNl ICovCisJCQloeXBlcl9kbWFidWZfc3RvcmVfaGlkKGhpZCk7CisJCX0KKworCQlicmVhazsKKwor CWNhc2UgSFlQRVJfRE1BQlVGX09QU19CRUdJTl9DUFVfQUNDRVNTOgorCQlyZXQgPSBkbWFfYnVm X2JlZ2luX2NwdV9hY2Nlc3MoZXhwb3J0ZWQtPmRtYV9idWYsCisJCQkJCSAgICAgICBETUFfQklE SVJFQ1RJT05BTCk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwK KwkJCQkiSFlQRVJfRE1BQlVGX09QU19CRUdJTl9DUFVfQUNDRVNTXG4iKTsKKwkJCXJldHVybiBy ZXQ7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEhZUEVSX0RNQUJVRl9PUFNfRU5EX0NQVV9BQ0NF U1M6CisJCXJldCA9IGRtYV9idWZfZW5kX2NwdV9hY2Nlc3MoZXhwb3J0ZWQtPmRtYV9idWYsCisJ CQkJCSAgICAgRE1BX0JJRElSRUNUSU9OQUwpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGh5 X2Rydl9wcml2LT5kZXYsCisJCQkJIkhZUEVSX0RNQUJVRl9PUFNfRU5EX0NQVV9BQ0NFU1NcbiIp OworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgSFlQRVJfRE1BQlVGX09Q U19LTUFQX0FUT01JQzoKKwljYXNlIEhZUEVSX0RNQUJVRl9PUFNfS01BUDoKKwkJdmFfa21hcGwg PSBrY2FsbG9jKDEsIHNpemVvZigqdmFfa21hcGwpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF2YV9r bWFwbCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCS8qIGR1bW15IGttYXBwaW5nIG9mIDEgcGFn ZSAqLworCQlpZiAob3BzID09IEhZUEVSX0RNQUJVRl9PUFNfS01BUF9BVE9NSUMpCisJCQl2YV9r bWFwbC0+dmFkZHIgPSBkbWFfYnVmX2ttYXBfYXRvbWljKAorCQkJCQkJZXhwb3J0ZWQtPmRtYV9i dWYsIDEpOworCQllbHNlCisJCQl2YV9rbWFwbC0+dmFkZHIgPSBkbWFfYnVmX2ttYXAoCisJCQkJ CQlleHBvcnRlZC0+ZG1hX2J1ZiwgMSk7CisKKwkJaWYgKCF2YV9rbWFwbC0+dmFkZHIpIHsKKwkJ CWtmcmVlKHZhX2ttYXBsKTsKKwkJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCQkiSFlQ RVJfRE1BQlVGX09QU19LTUFQKF9BVE9NSUMpXG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9 CisJCWxpc3RfYWRkKCZ2YV9rbWFwbC0+bGlzdCwgJmV4cG9ydGVkLT52YV9rbWFwcGVkLT5saXN0 KTsKKwkJYnJlYWs7CisKKwljYXNlIEhZUEVSX0RNQUJVRl9PUFNfS1VOTUFQX0FUT01JQzoKKwlj YXNlIEhZUEVSX0RNQUJVRl9PUFNfS1VOTUFQOgorCQlpZiAobGlzdF9lbXB0eSgmZXhwb3J0ZWQt PnZhX2ttYXBwZWQtPmxpc3QpKSB7CisJCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCisJCQkJ IkhZUEVSX0RNQUJVRl9PUFNfS1VOTUFQKF9BVE9NSUMpXG4iKTsKKwkJCWRldl9lcnIoaHlfZHJ2 X3ByaXYtPmRldiwKKwkJCQkibm8gbW9yZSBkbWFidWYgVkEgdG8gYmUgZnJlZWRcbiIpOworCQkJ cmV0dXJuIC1FRkFVTFQ7CisJCX0KKworCQl2YV9rbWFwbCA9IGxpc3RfZmlyc3RfZW50cnkoJmV4 cG9ydGVkLT52YV9rbWFwcGVkLT5saXN0LAorCQkJCQkgICAgc3RydWN0IGttYXBfdmFkZHJfbGlz dCwgbGlzdCk7CisJCWlmICghdmFfa21hcGwtPnZhZGRyKSB7CisJCQlkZXZfZXJyKGh5X2Rydl9w cml2LT5kZXYsCisJCQkJIkhZUEVSX0RNQUJVRl9PUFNfS1VOTUFQKF9BVE9NSUMpXG4iKTsKKwkJ CXJldHVybiBQVFJfRVJSKHZhX2ttYXBsLT52YWRkcik7CisJCX0KKworCQkvKiB1bm1hcHBpbmcg MSBwYWdlICovCisJCWlmIChvcHMgPT0gSFlQRVJfRE1BQlVGX09QU19LVU5NQVBfQVRPTUlDKQor CQkJZG1hX2J1Zl9rdW5tYXBfYXRvbWljKGV4cG9ydGVkLT5kbWFfYnVmLAorCQkJCQkgICAgICAx LCB2YV9rbWFwbC0+dmFkZHIpOworCQllbHNlCisJCQlkbWFfYnVmX2t1bm1hcChleHBvcnRlZC0+ ZG1hX2J1ZiwKKwkJCQkgICAgICAgMSwgdmFfa21hcGwtPnZhZGRyKTsKKworCQlsaXN0X2RlbCgm dmFfa21hcGwtPmxpc3QpOworCQlrZnJlZSh2YV9rbWFwbCk7CisJCWJyZWFrOworCisJY2FzZSBI WVBFUl9ETUFCVUZfT1BTX01NQVA6CisJCS8qIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkOiBsb29r aW5nIGZvciBhIHdheSB0byBjcmVhdGUKKwkJICogYSBkdW1teSB2bWEKKwkJICovCisJCWRldl93 YXJuKGh5X2Rydl9wcml2LT5kZXYsCisJCQkgInJlbW90ZSBzeW5jOjpzeWNocm9uaXplZCBtbWFw IGlzIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlicmVhazsKKworCWNhc2UgSFlQRVJfRE1BQlVGX09Q U19WTUFQOgorCQl2YV92bWFwbCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCp2YV92bWFwbCksIEdGUF9L RVJORUwpOworCisJCWlmICghdmFfdm1hcGwpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQkvKiBk dW1teSB2bWFwcGluZyAqLworCQl2YV92bWFwbC0+dmFkZHIgPSBkbWFfYnVmX3ZtYXAoZXhwb3J0 ZWQtPmRtYV9idWYpOworCisJCWlmICghdmFfdm1hcGwtPnZhZGRyKSB7CisJCQlrZnJlZSh2YV92 bWFwbCk7CisJCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCisJCQkJInJlbW90ZSBzeW5jOjpI WVBFUl9ETUFCVUZfT1BTX1ZNQVBcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJbGlz dF9hZGQoJnZhX3ZtYXBsLT5saXN0LCAmZXhwb3J0ZWQtPnZhX3ZtYXBwZWQtPmxpc3QpOworCQli cmVhazsKKworCWNhc2UgSFlQRVJfRE1BQlVGX09QU19WVU5NQVA6CisJCWlmIChsaXN0X2VtcHR5 KCZleHBvcnRlZC0+dmFfdm1hcHBlZC0+bGlzdCkpIHsKKwkJCWRldl9lcnIoaHlfZHJ2X3ByaXYt PmRldiwKKwkJCQkicmVtb3RlIHN5bmM6OkhZUEVSX0RNQUJVRl9PUFNfVlVOTUFQXG4iKTsKKwkJ CWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCQkibm8gbW9yZSBkbWFidWYgVkEgdG8gYmUg ZnJlZWRcbiIpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJdmFfdm1hcGwgPSBsaXN0X2Zp cnN0X2VudHJ5KCZleHBvcnRlZC0+dmFfdm1hcHBlZC0+bGlzdCwKKwkJCQkJc3RydWN0IHZtYXBf dmFkZHJfbGlzdCwgbGlzdCk7CisJCWlmICghdmFfdm1hcGwgfHwgdmFfdm1hcGwtPnZhZGRyID09 IE5VTEwpIHsKKwkJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCQkicmVtb3RlIHN5bmM6 OkhZUEVSX0RNQUJVRl9PUFNfVlVOTUFQXG4iKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisK KwkJZG1hX2J1Zl92dW5tYXAoZXhwb3J0ZWQtPmRtYV9idWYsIHZhX3ZtYXBsLT52YWRkcik7CisK KwkJbGlzdF9kZWwoJnZhX3ZtYXBsLT5saXN0KTsKKwkJa2ZyZWUodmFfdm1hcGwpOworCQlicmVh azsKKworCWRlZmF1bHQ6CisJCS8qIHByb2dyYW0gc2hvdWxkIG5vdCBnZXQgaGVyZSAqLworCQli cmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9o eXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX3JlbW90ZV9zeW5jLmggYi9kcml2ZXJzL2RtYS1idWYv aHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9yZW1vdGVfc3luYy5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjM2NjM4OTI4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9k bWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfcmVtb3RlX3N5bmMuaApAQCAtMCwwICsx LDMwIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisg KiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBl cnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk IGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhl IFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRp b24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBk aXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0 d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBm dXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgor ICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90 aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQg aW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJl LgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJB TlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5P VCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBF VkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxF IEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBG Uk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNF IE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpZm5k ZWYgX19IWVBFUl9ETUFCVUZfUkVNT1RFX1NZTkNfSF9fCisjZGVmaW5lIF9fSFlQRVJfRE1BQlVG X1JFTU9URV9TWU5DX0hfXworCitpbnQgaHlwZXJfZG1hYnVmX3JlbW90ZV9zeW5jKGh5cGVyX2Rt YWJ1Zl9pZF90IGhpZCwgaW50IG9wcyk7CisKKyNlbmRpZiAvLyBfX0hZUEVSX0RNQUJVRl9SRU1P VEVfU1lOQ19IX18KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlw ZXJfZG1hYnVmX3NnbF9wcm9jLmMgYi9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVy X2RtYWJ1Zl9zZ2xfcHJvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQx NWViMTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5 cGVyX2RtYWJ1Zl9zZ2xfcHJvYy5jCkBAIC0wLDAgKzEsMjU1IEBACisvKgorICogQ29weXJpZ2h0 IMKpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBn cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29w eSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo ZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJp Y3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNl LCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAor ICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJz b25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1Ympl Y3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmln aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQK KyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFu dGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJ UyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNT IE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhP UlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMg T1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVD VElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJ TiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIERvbmd3b24gS2ltIDxkb25n d29uLmtpbUBpbnRlbC5jb20+CisgKiAgICBNYXRldXN6IFBvbHJvbGEgPG1hdGV1c3p4LnBvdHJv bGFAaW50ZWwuY29tPgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5j bHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8 bGludXgvZG1hLWJ1Zi5oPgorI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9kcnYuaCIKKyNpbmNsdWRl ICJoeXBlcl9kbWFidWZfc3RydWN0LmgiCisjaW5jbHVkZSAiaHlwZXJfZG1hYnVmX3NnbF9wcm9j LmgiCisKKyNkZWZpbmUgUkVGU19QRVJfUEFHRSAoUEFHRV9TSVpFL3NpemVvZihncmFudF9yZWZf dCkpCisKKy8qIHJldHVybiB0b3RhbCBudW1iZXIgb2YgcGFnZXMgcmVmZXJlbmNlZCBieSBhIHNn dAorICogZm9yIHByZS1jYWxjdWxhdGlvbiBvZiAjIG9mIHBhZ2VzIGJlaGluZCBhIGdpdmVuIHNn dAorICovCitzdGF0aWMgaW50IGdldF9udW1fcGdzKHN0cnVjdCBzZ190YWJsZSAqc2d0KQorewor CXN0cnVjdCBzY2F0dGVybGlzdCAqc2dsOworCWludCBsZW5ndGgsIGk7CisJLyogYXQgbGVhc3Qg b25lIHBhZ2UgKi8KKwlpbnQgbnVtX3BhZ2VzID0gMTsKKworCXNnbCA9IHNndC0+c2dsOworCisJ bGVuZ3RoID0gc2dsLT5sZW5ndGggLSBQQUdFX1NJWkUgKyBzZ2wtPm9mZnNldDsKKworCS8qIHJv dW5kLXVwICovCisJbnVtX3BhZ2VzICs9ICgobGVuZ3RoICsgUEFHRV9TSVpFIC0gMSkvUEFHRV9T SVpFKTsKKworCWZvciAoaSA9IDE7IGkgPCBzZ3QtPm5lbnRzOyBpKyspIHsKKwkJc2dsID0gc2df bmV4dChzZ2wpOworCisJCS8qIHJvdW5kLXVwICovCisJCW51bV9wYWdlcyArPSAoKHNnbC0+bGVu Z3RoICsgUEFHRV9TSVpFIC0gMSkgLworCQkJICAgICBQQUdFX1NJWkUpOyAvKiByb3VuZC11cCAq LworCX0KKworCXJldHVybiBudW1fcGFnZXM7Cit9CisKKy8qIGV4dHJhY3QgcGFnZXMgZGlyZWN0 bHkgZnJvbSBzdHJ1Y3Qgc2dfdGFibGUgKi8KK3N0cnVjdCBwYWdlc19pbmZvICpoeXBlcl9kbWFi dWZfZXh0X3BncyhzdHJ1Y3Qgc2dfdGFibGUgKnNndCkKK3sKKwlzdHJ1Y3QgcGFnZXNfaW5mbyAq cGdfaW5mbzsKKwlpbnQgaSwgaiwgazsKKwlpbnQgbGVuZ3RoOworCXN0cnVjdCBzY2F0dGVybGlz dCAqc2dsOworCisJcGdfaW5mbyA9IGttYWxsb2Moc2l6ZW9mKCpwZ19pbmZvKSwgR0ZQX0tFUk5F TCk7CisJaWYgKCFwZ19pbmZvKQorCQlyZXR1cm4gTlVMTDsKKworCXBnX2luZm8tPnBncyA9IGtt YWxsb2NfYXJyYXkoZ2V0X251bV9wZ3Moc2d0KSwKKwkJCQkgICAgIHNpemVvZihzdHJ1Y3QgcGFn ZSAqKSwKKwkJCQkgICAgIEdGUF9LRVJORUwpOworCisJaWYgKCFwZ19pbmZvLT5wZ3MpIHsKKwkJ a2ZyZWUocGdfaW5mbyk7CisJCXJldHVybiBOVUxMOworCX0KKworCXNnbCA9IHNndC0+c2dsOwor CisJcGdfaW5mby0+bmVudHMgPSAxOworCXBnX2luZm8tPmZyc3Rfb2ZzdCA9IHNnbC0+b2Zmc2V0 OworCXBnX2luZm8tPnBnc1swXSA9IHNnX3BhZ2Uoc2dsKTsKKwlsZW5ndGggPSBzZ2wtPmxlbmd0 aCAtIFBBR0VfU0laRSArIHNnbC0+b2Zmc2V0OworCWkgPSAxOworCisJd2hpbGUgKGxlbmd0aCA+ IDApIHsKKwkJcGdfaW5mby0+cGdzW2ldID0gbnRoX3BhZ2Uoc2dfcGFnZShzZ2wpLCBpKTsKKwkJ bGVuZ3RoIC09IFBBR0VfU0laRTsKKwkJcGdfaW5mby0+bmVudHMrKzsKKwkJaSsrOworCX0KKwor CWZvciAoaiA9IDE7IGogPCBzZ3QtPm5lbnRzOyBqKyspIHsKKwkJc2dsID0gc2dfbmV4dChzZ2wp OworCQlwZ19pbmZvLT5wZ3NbaSsrXSA9IHNnX3BhZ2Uoc2dsKTsKKwkJbGVuZ3RoID0gc2dsLT5s ZW5ndGggLSBQQUdFX1NJWkU7CisJCXBnX2luZm8tPm5lbnRzKys7CisJCWsgPSAxOworCisJCXdo aWxlIChsZW5ndGggPiAwKSB7CisJCQlwZ19pbmZvLT5wZ3NbaSsrXSA9IG50aF9wYWdlKHNnX3Bh Z2Uoc2dsKSwgaysrKTsKKwkJCWxlbmd0aCAtPSBQQUdFX1NJWkU7CisJCQlwZ19pbmZvLT5uZW50 cysrOworCQl9CisJfQorCisJLyoKKwkgKiBsZW5naHQgYXQgdGhhdCBwb2ludCB3aWxsIGJlIDAg b3IgbmVnYXRpdmUsCisJICogc28gdG8gY2FsY3VsYXRlIGxhc3QgcGFnZSBzaXplIGp1c3QgYWRk IGl0IHRvIFBBR0VfU0laRQorCSAqLworCXBnX2luZm8tPmxhc3RfbGVuID0gUEFHRV9TSVpFICsg bGVuZ3RoOworCisJcmV0dXJuIHBnX2luZm87Cit9CisKKy8qIGNyZWF0ZSBzZ190YWJsZSB3aXRo IGdpdmVuIHBhZ2VzIGFuZCBvdGhlciBwYXJhbWV0ZXJzICovCitzdHJ1Y3Qgc2dfdGFibGUgKmh5 cGVyX2RtYWJ1Zl9jcmVhdGVfc2d0KHN0cnVjdCBwYWdlICoqcGdzLAorCQkJCQkgaW50IGZyc3Rf b2ZzdCwgaW50IGxhc3RfbGVuLAorCQkJCQkgaW50IG5lbnRzKQoreworCXN0cnVjdCBzZ190YWJs ZSAqc2d0OworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dsOworCWludCBpLCByZXQ7CisKKwlzZ3Qg PSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2dfdGFibGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNn dCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXQgPSBzZ19hbGxvY190YWJsZShzZ3QsIG5lbnRzLCBH RlBfS0VSTkVMKTsKKwlpZiAocmV0KSB7CisJCWlmIChzZ3QpIHsKKwkJCXNnX2ZyZWVfdGFibGUo c2d0KTsKKwkJCWtmcmVlKHNndCk7CisJCX0KKworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlzZ2wg PSBzZ3QtPnNnbDsKKworCXNnX3NldF9wYWdlKHNnbCwgcGdzWzBdLCBQQUdFX1NJWkUtZnJzdF9v ZnN0LCBmcnN0X29mc3QpOworCisJZm9yIChpID0gMTsgaSA8IG5lbnRzLTE7IGkrKykgeworCQlz Z2wgPSBzZ19uZXh0KHNnbCk7CisJCXNnX3NldF9wYWdlKHNnbCwgcGdzW2ldLCBQQUdFX1NJWkUs IDApOworCX0KKworCWlmIChuZW50cyA+IDEpIC8qIG1vcmUgdGhhbiBvbmUgcGFnZSAqLyB7CisJ CXNnbCA9IHNnX25leHQoc2dsKTsKKwkJc2dfc2V0X3BhZ2Uoc2dsLCBwZ3NbaV0sIGxhc3RfbGVu LCAwKTsKKwl9CisKKwlyZXR1cm4gc2d0OworfQorCitpbnQgaHlwZXJfZG1hYnVmX2NsZWFudXBf c2d0X2luZm8oc3RydWN0IGV4cG9ydGVkX3NndF9pbmZvICpleHBvcnRlZCwKKwkJCQkgIGludCBm b3JjZSkKK3sKKwlzdHJ1Y3Qgc2d0X2xpc3QgKnNndGw7CisJc3RydWN0IGF0dGFjaG1lbnRfbGlz dCAqYXR0YWNobDsKKwlzdHJ1Y3Qga21hcF92YWRkcl9saXN0ICp2YV9rbWFwbDsKKwlzdHJ1Y3Qg dm1hcF92YWRkcl9saXN0ICp2YV92bWFwbDsKKwlzdHJ1Y3QgaHlwZXJfZG1hYnVmX2JrbmRfb3Bz ICpia25kX29wcyA9IGh5X2Rydl9wcml2LT5ia25kX29wczsKKworCWlmICghZXhwb3J0ZWQpIHsK KwkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LCAiaW52YWxpZCBoeXBlcl9kbWFidWZfaWRcbiIp OworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBpZiBmb3JjZSAhPSAxLCBzZ3RfaW5mbyBj YW4gYmUgcmVsZWFzZWQgb25seSBpZgorCSAqIHRoZXJlJ3Mgbm8gYWN0aXZpdHkgb24gZXhwb3J0 ZWQgZG1hLWJ1ZiBvbiBpbXBvcnRlcgorCSAqIHNpZGUuCisJICovCisJaWYgKCFmb3JjZSAmJgor CSAgICBleHBvcnRlZC0+YWN0aXZlKSB7CisJCWRldl93YXJuKGh5X2Rydl9wcml2LT5kZXYsCisJ CQkgImRtYS1idWYgaXMgdXNlZCBieSBpbXBvcnRlclxuIik7CisKKwkJcmV0dXJuIC1FUEVSTTsK Kwl9CisKKwkvKiBmb3JjZSA9PSAxIGlzIG5vdCByZWNvbW1lbmRlZCAqLworCXdoaWxlICghbGlz dF9lbXB0eSgmZXhwb3J0ZWQtPnZhX2ttYXBwZWQtPmxpc3QpKSB7CisJCXZhX2ttYXBsID0gbGlz dF9maXJzdF9lbnRyeSgmZXhwb3J0ZWQtPnZhX2ttYXBwZWQtPmxpc3QsCisJCQkJCSAgICBzdHJ1 Y3Qga21hcF92YWRkcl9saXN0LCBsaXN0KTsKKworCQlkbWFfYnVmX2t1bm1hcChleHBvcnRlZC0+ ZG1hX2J1ZiwgMSwgdmFfa21hcGwtPnZhZGRyKTsKKwkJbGlzdF9kZWwoJnZhX2ttYXBsLT5saXN0 KTsKKwkJa2ZyZWUodmFfa21hcGwpOworCX0KKworCXdoaWxlICghbGlzdF9lbXB0eSgmZXhwb3J0 ZWQtPnZhX3ZtYXBwZWQtPmxpc3QpKSB7CisJCXZhX3ZtYXBsID0gbGlzdF9maXJzdF9lbnRyeSgm ZXhwb3J0ZWQtPnZhX3ZtYXBwZWQtPmxpc3QsCisJCQkJCSAgICBzdHJ1Y3Qgdm1hcF92YWRkcl9s aXN0LCBsaXN0KTsKKworCQlkbWFfYnVmX3Z1bm1hcChleHBvcnRlZC0+ZG1hX2J1ZiwgdmFfdm1h cGwtPnZhZGRyKTsKKwkJbGlzdF9kZWwoJnZhX3ZtYXBsLT5saXN0KTsKKwkJa2ZyZWUodmFfdm1h cGwpOworCX0KKworCXdoaWxlICghbGlzdF9lbXB0eSgmZXhwb3J0ZWQtPmFjdGl2ZV9zZ3RzLT5s aXN0KSkgeworCQlhdHRhY2hsID0gbGlzdF9maXJzdF9lbnRyeSgmZXhwb3J0ZWQtPmFjdGl2ZV9h dHRhY2hlZC0+bGlzdCwKKwkJCQkJICAgc3RydWN0IGF0dGFjaG1lbnRfbGlzdCwgbGlzdCk7CisK KwkJc2d0bCA9IGxpc3RfZmlyc3RfZW50cnkoJmV4cG9ydGVkLT5hY3RpdmVfc2d0cy0+bGlzdCwK KwkJCQkJc3RydWN0IHNndF9saXN0LCBsaXN0KTsKKworCQlkbWFfYnVmX3VubWFwX2F0dGFjaG1l bnQoYXR0YWNobC0+YXR0YWNoLCBzZ3RsLT5zZ3QsCisJCQkJCSBETUFfQklESVJFQ1RJT05BTCk7 CisJCWxpc3RfZGVsKCZzZ3RsLT5saXN0KTsKKwkJa2ZyZWUoc2d0bCk7CisJfQorCisJd2hpbGUg KCFsaXN0X2VtcHR5KCZleHBvcnRlZC0+YWN0aXZlX3NndHMtPmxpc3QpKSB7CisJCWF0dGFjaGwg PSBsaXN0X2ZpcnN0X2VudHJ5KCZleHBvcnRlZC0+YWN0aXZlX2F0dGFjaGVkLT5saXN0LAorCQkJ CQkgICBzdHJ1Y3QgYXR0YWNobWVudF9saXN0LCBsaXN0KTsKKworCQlkbWFfYnVmX2RldGFjaChl eHBvcnRlZC0+ZG1hX2J1ZiwgYXR0YWNobC0+YXR0YWNoKTsKKwkJbGlzdF9kZWwoJmF0dGFjaGwt Pmxpc3QpOworCQlrZnJlZShhdHRhY2hsKTsKKwl9CisKKwkvKiBTdGFydCBjbGVhbnVwIG9mIGJ1 ZmZlciBpbiByZXZlcnNlIG9yZGVyIHRvIGV4cG9ydGluZyAqLworCWJrbmRfb3BzLT51bnNoYXJl X3BhZ2VzKCZleHBvcnRlZC0+cmVmc19pbmZvLCBleHBvcnRlZC0+bmVudHMpOworCisJLyogdW5t YXAgZG1hLWJ1ZiAqLworCWRtYV9idWZfdW5tYXBfYXR0YWNobWVudChleHBvcnRlZC0+YWN0aXZl X2F0dGFjaGVkLT5hdHRhY2gsCisJCQkJIGV4cG9ydGVkLT5hY3RpdmVfc2d0cy0+c2d0LAorCQkJ CSBETUFfQklESVJFQ1RJT05BTCk7CisKKwkvKiBkZXRhdGNoIGRtYS1idWYgKi8KKwlkbWFfYnVm X2RldGFjaChleHBvcnRlZC0+ZG1hX2J1ZiwgZXhwb3J0ZWQtPmFjdGl2ZV9hdHRhY2hlZC0+YXR0 YWNoKTsKKworCS8qIGNsb3NlIGNvbm5lY3Rpb24gdG8gZG1hLWJ1ZiBjb21wbGV0ZWx5ICovCisJ ZG1hX2J1Zl9wdXQoZXhwb3J0ZWQtPmRtYV9idWYpOworCWV4cG9ydGVkLT5kbWFfYnVmID0gTlVM TDsKKworCWtmcmVlKGV4cG9ydGVkLT5hY3RpdmVfc2d0cyk7CisJa2ZyZWUoZXhwb3J0ZWQtPmFj dGl2ZV9hdHRhY2hlZCk7CisJa2ZyZWUoZXhwb3J0ZWQtPnZhX2ttYXBwZWQpOworCWtmcmVlKGV4 cG9ydGVkLT52YV92bWFwcGVkKTsKKwlrZnJlZShleHBvcnRlZC0+cHJpdik7CisKKwlyZXR1cm4g MDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1h YnVmX3NnbF9wcm9jLmggYi9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1 Zl9zZ2xfcHJvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2OWQ5ODIK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2Rt YWJ1Zl9zZ2xfcHJvYy5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAx NyBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQs IGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRo aXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0 d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwg aW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHks IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQv b3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8g d2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp Y2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFy YWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv cnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJ REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAq IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E IE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBD T1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhF UgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBP UiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJ VEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBT T0ZUV0FSRS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0hZUEVSX0RNQUJVRl9JTVBfSF9fCisjZGVm aW5lIF9fSFlQRVJfRE1BQlVGX0lNUF9IX18KKworLyogZXh0cmFjdCBwYWdlcyBkaXJlY3RseSBm cm9tIHN0cnVjdCBzZ190YWJsZSAqLworc3RydWN0IHBhZ2VzX2luZm8gKmh5cGVyX2RtYWJ1Zl9l eHRfcGdzKHN0cnVjdCBzZ190YWJsZSAqc2d0KTsKKworLyogY3JlYXRlIHNnX3RhYmxlIHdpdGgg Z2l2ZW4gcGFnZXMgYW5kIG90aGVyIHBhcmFtZXRlcnMgKi8KK3N0cnVjdCBzZ190YWJsZSAqaHlw ZXJfZG1hYnVmX2NyZWF0ZV9zZ3Qoc3RydWN0IHBhZ2UgKipwZ3MsCisJCQkJCSBpbnQgZnJzdF9v ZnN0LCBpbnQgbGFzdF9sZW4sCisJCQkJCSBpbnQgbmVudHMpOworCitpbnQgaHlwZXJfZG1hYnVm X2NsZWFudXBfc2d0X2luZm8oc3RydWN0IGV4cG9ydGVkX3NndF9pbmZvICpleHBvcnRlZCwKKwkJ CQkgIGludCBmb3JjZSk7CisKK3ZvaWQgaHlwZXJfZG1hYnVmX2ZyZWVfc2d0KHN0cnVjdCBzZ190 YWJsZSAqc2d0KTsKKworI2VuZGlmIC8qIF9fSFlQRVJfRE1BQlVGX0lNUF9IX18gKi8KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX3N0cnVjdC5o IGIvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfc3RydWN0LmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTExZjgwNAotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX3N0cnVjdC5oCkBA IC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTcgSW50ZWwgQ29ycG9yYXRp b24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwg dG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBh c3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRl YWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0 IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBw dWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9m IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0 d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25k aXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUg aW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAq IFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJ TkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwK KyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQu ICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMg QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwg V0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklT SU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBP UiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICov CisKKyNpZm5kZWYgX19IWVBFUl9ETUFCVUZfU1RSVUNUX0hfXworI2RlZmluZSBfX0hZUEVSX0RN QUJVRl9TVFJVQ1RfSF9fCisKKy8qIHN0YWNrIG9mIG1hcHBlZCBzZ3RzICovCitzdHJ1Y3Qgc2d0 X2xpc3QgeworCXN0cnVjdCBzZ190YWJsZSAqc2d0OworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsK K307CisKKy8qIHN0YWNrIG9mIGF0dGFjaG1lbnRzICovCitzdHJ1Y3QgYXR0YWNobWVudF9saXN0 IHsKKwlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2g7CisJc3RydWN0IGxpc3RfaGVh ZCBsaXN0OworfTsKKworLyogc3RhY2sgb2YgdmFkZHIgbWFwcGVkIHZpYSBrbWFwICovCitzdHJ1 Y3Qga21hcF92YWRkcl9saXN0IHsKKwl2b2lkICp2YWRkcjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxp c3Q7Cit9OworCisvKiBzdGFjayBvZiB2YWRkciBtYXBwZWQgdmlhIHZtYXAgKi8KK3N0cnVjdCB2 bWFwX3ZhZGRyX2xpc3QgeworCXZvaWQgKnZhZGRyOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsK K307CisKKy8qIEV4cG9ydGVyIGJ1aWxkcyBwYWdlc19pbmZvIGJlZm9yZSBzaGFyaW5nIHBhZ2Vz ICovCitzdHJ1Y3QgcGFnZXNfaW5mbyB7CisJaW50IGZyc3Rfb2ZzdDsKKwlpbnQgbGFzdF9sZW47 CisJaW50IG5lbnRzOworCXN0cnVjdCBwYWdlICoqcGdzOworfTsKKworCisvKiBFeHBvcnRlciBz dG9yZXMgcmVmZXJlbmNlcyB0byBzZ3QgaW4gYSBoYXNoIHRhYmxlCisgKiBFeHBvcnRlciBrZWVw cyB0aGVzZSByZWZlcmVuY2VzIGZvciBzeW5jaHJvbml6YXRpb24KKyAqIGFuZCB0cmFja2luZyBw dXJwb3NlcworICovCitzdHJ1Y3QgZXhwb3J0ZWRfc2d0X2luZm8geworCWh5cGVyX2RtYWJ1Zl9p ZF90IGhpZDsKKworCS8qIFZNIElEIG9mIGltcG9ydGVyICovCisJaW50IHJkb21pZDsKKworCXN0 cnVjdCBkbWFfYnVmICpkbWFfYnVmOworCWludCBuZW50czsKKworCS8qIGxpc3QgZm9yIHRyYWNr aW5nIGFjdGl2aXRpZXMgb24gZG1hX2J1ZiAqLworCXN0cnVjdCBzZ3RfbGlzdCAqYWN0aXZlX3Nn dHM7CisJc3RydWN0IGF0dGFjaG1lbnRfbGlzdCAqYWN0aXZlX2F0dGFjaGVkOworCXN0cnVjdCBr bWFwX3ZhZGRyX2xpc3QgKnZhX2ttYXBwZWQ7CisJc3RydWN0IHZtYXBfdmFkZHJfbGlzdCAqdmFf dm1hcHBlZDsKKworCS8qIHNldCB0byAwIHdoZW4gdW5leHBvcnRlZC4gSW1wb3J0ZXIgZG9lc24n dAorCSAqIGRvIGEgbmV3IG1hcHBpbmcgb2YgYnVmZmVyIGlmIHZhbGlkID09IGZhbHNlCisJICov CisJYm9vbCB2YWxpZDsKKworCS8qIGFjdGl2ZSA9PSB0cnVlIGlmIHRoZSBidWZmZXIgaXMgYWN0 aXZlbHkgdXNlZAorCSAqIChtYXBwZWQpIGJ5IGltcG9ydGVyCisJICovCisJaW50IGFjdGl2ZTsK KworCS8qIGh5cGVydmlzb3Igc3BlY2lmaWMgcmVmZXJlbmNlIGRhdGEgZm9yIHNoYXJlZCBwYWdl cyAqLworCXZvaWQgKnJlZnNfaW5mbzsKKworCXN0cnVjdCBkZWxheWVkX3dvcmsgdW5leHBvcnQ7 CisJYm9vbCB1bmV4cG9ydF9zY2hlZDsKKworCS8qIGxpc3QgZm9yIGZpbGUgcG9pbnRlcnMgYXNz b2NpYXRlZCB3aXRoIGFsbCB1c2VyIHNwYWNlCisJICogYXBwbGljYXRpb24gdGhhdCBoYXZlIGV4 cG9ydGVkIHRoaXMgc2FtZSBidWZmZXIgdG8KKwkgKiBhbm90aGVyIFZNLiBUaGlzIG5lZWRzIHRv IGJlIHRyYWNrZWQgdG8ga25vdyB3aGV0aGVyCisJICogdGhlIGJ1ZmZlciBjYW4gYmUgY29tcGxl dGVseSBmcmVlZC4KKwkgKi8KKwlzdHJ1Y3QgZmlsZSAqZmlscDsKKworCS8qIHNpemUgb2YgcHJp dmF0ZSAqLworCXNpemVfdCBzel9wcml2OworCisJLyogcHJpdmF0ZSBkYXRhIGFzc29jaWF0ZWQg d2l0aCB0aGUgZXhwb3J0ZWQgYnVmZmVyICovCisJY2hhciAqcHJpdjsKK307CisKKy8qIGltcG9y dGVkX3NndF9pbmZvIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGltcG9ydGVkIERNQV9CVUYK KyAqIHRoaXMgaW5mbyBpcyBrZXB0IGluIElNUE9SVCBsaXN0IGFuZCBhc3luY2hvcm91c2x5IHJl dHJpZXZlZCBhbmQKKyAqIHVzZWQgdG8gbWFwIERNQV9CVUYgb24gaW1wb3J0ZXIgVk0ncyBzaWRl IHVwb24gZXhwb3J0IGZkIGlvY3RsCisgKiByZXF1ZXN0IGZyb20gdXNlci1zcGFjZQorICovCisK K3N0cnVjdCBpbXBvcnRlZF9zZ3RfaW5mbyB7CisJaHlwZXJfZG1hYnVmX2lkX3QgaGlkOyAvKiB1 bmlxdWUgaWQgZm9yIHNoYXJlZCBkbWFidWYgaW1wb3J0ZWQgKi8KKworCS8qIGh5cGVydmlzb3It c3BlY2lmaWMgaGFuZGxlIHRvIHBhZ2VzICovCisJaW50IHJlZl9oYW5kbGU7CisKKwkvKiBvZmZz ZXQgYW5kIHNpemUgaW5mbyBvZiBETUFfQlVGICovCisJaW50IGZyc3Rfb2ZzdDsKKwlpbnQgbGFz dF9sZW47CisJaW50IG5lbnRzOworCisJc3RydWN0IGRtYV9idWYgKmRtYV9idWY7CisJc3RydWN0 IHNnX3RhYmxlICpzZ3Q7CisKKwl2b2lkICpyZWZzX2luZm87CisJYm9vbCB2YWxpZDsKKwlpbnQg aW1wb3J0ZXJzOworCisJLyogc2l6ZSBvZiBwcml2YXRlICovCisJc2l6ZV90IHN6X3ByaXY7CisK KwkvKiBwcml2YXRlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBleHBvcnRlZCBidWZmZXIgKi8K KwljaGFyICpwcml2OworfTsKKworI2VuZGlmIC8qIF9fSFlQRVJfRE1BQlVGX1NUUlVDVF9IX18g Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYveGVuLWJhY2tlbmQv aHlwZXJfZG1hYnVmX3hlbl9jb21tLmMgYi9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL3hl bi1iYWNrZW5kL2h5cGVyX2RtYWJ1Zl94ZW5fY29tbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjRhMDczY2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS1idWYv aHlwZXJfZG1hYnVmL3hlbi1iYWNrZW5kL2h5cGVyX2RtYWJ1Zl94ZW5fY29tbS5jCkBAIC0wLDAg KzEsOTQxIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KKyAq CisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55 IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lh dGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4g dGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0 YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNo LCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBT b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBp cyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25z OgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVk ZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3 YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB UlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVU IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBO TyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElB QkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhF UiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisg KiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUg VVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9y czoKKyAqICAgIERvbmd3b24gS2ltIDxkb25nd29uLmtpbUBpbnRlbC5jb20+CisgKiAgICBNYXRl dXN6IFBvbHJvbGEgPG1hdGV1c3p4LnBvdHJvbGFAaW50ZWwuY29tPgorICoKKyAqLworCisjaW5j bHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8 bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDx4 ZW4vZ3JhbnRfdGFibGUuaD4KKyNpbmNsdWRlIDx4ZW4vZXZlbnRzLmg+CisjaW5jbHVkZSA8eGVu L3hlbmJ1cy5oPgorI2luY2x1ZGUgPGFzbS94ZW4vcGFnZS5oPgorI2luY2x1ZGUgImh5cGVyX2Rt YWJ1Zl94ZW5fY29tbS5oIgorI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl94ZW5fY29tbV9saXN0Lmgi CisjaW5jbHVkZSAiLi4vaHlwZXJfZG1hYnVmX2Rydi5oIgorCitzdGF0aWMgaW50IGV4cG9ydF9y ZXFfaWQ7CisKK3N0cnVjdCBoeXBlcl9kbWFidWZfcmVxIHJlcV9wZW5kaW5nID0gezB9OworCitz dGF0aWMgdm9pZCB4ZW5fZ2V0X2RvbWlkX2RlbGF5ZWQoc3RydWN0IHdvcmtfc3RydWN0ICp1bnVz ZWQpOworc3RhdGljIHZvaWQgeGVuX2luaXRfY29tbV9lbnZfZGVsYXllZChzdHJ1Y3Qgd29ya19z dHJ1Y3QgKnVudXNlZCk7CisKK3N0YXRpYyBERUNMQVJFX0RFTEFZRURfV09SSyhnZXRfdm1faWRf d29yaywgeGVuX2dldF9kb21pZF9kZWxheWVkKTsKK3N0YXRpYyBERUNMQVJFX0RFTEFZRURfV09S Syh4ZW5faW5pdF9jb21tX2Vudl93b3JrLCB4ZW5faW5pdF9jb21tX2Vudl9kZWxheWVkKTsKKwor LyogQ3JlYXRlcyBlbnRyeSBpbiB4ZW4gc3RvcmUgdGhhdCB3aWxsIGtlZXAgZGV0YWlscyBvZiBh bGwKKyAqIGV4cG9ydGVyIHJpbmdzIGNyZWF0ZWQgYnkgdGhpcyBkb21haW4KKyAqLworc3RhdGlj IGludCB4ZW5fY29tbV9zZXR1cF9kYXRhX2Rpcih2b2lkKQoreworCWNoYXIgYnVmWzI1NV07CisK KwlzcHJpbnRmKGJ1ZiwgIi9sb2NhbC9kb21haW4vJWQvZGF0YS9oeXBlcl9kbWFidWYiLAorCQlo eV9kcnZfcHJpdi0+ZG9taWQpOworCisJcmV0dXJuIHhlbmJ1c19ta2RpcihYQlRfTklMLCBidWYs ICIiKTsKK30KKworLyogUmVtb3ZlcyBlbnRyeSBmcm9tIHhlbnN0b3JlIHdpdGggZXhwb3J0ZXIg cmluZyBkZXRhaWxzLgorICogT3RoZXIgZG9tYWlucyB0aGF0IGhhcyBjb25uZWN0ZWQgdG8gYW55 IG9mIGV4cG9ydGVyIHJpbmdzCisgKiBjcmVhdGVkIGJ5IHRoaXMgZG9tYWluLCB3aWxsIGJlIG5v dGlmaWVkIGFib3V0IHJlbW92YWwgb2YKKyAqIHRoaXMgZW50cnkgYW5kIHdpbGwgdHJlYXQgdGhh dCBhcyBzaWduYWwgdG8gY2xlYW51cCBpbXBvcnRlcgorICogcmluZ3MgY3JlYXRlZCBmb3IgdGhp cyBkb21haW4KKyAqLworc3RhdGljIGludCB4ZW5fY29tbV9kZXN0cm95X2RhdGFfZGlyKHZvaWQp Cit7CisJY2hhciBidWZbMjU1XTsKKworCXNwcmludGYoYnVmLCAiL2xvY2FsL2RvbWFpbi8lZC9k YXRhL2h5cGVyX2RtYWJ1ZiIsCisJCWh5X2Rydl9wcml2LT5kb21pZCk7CisKKwlyZXR1cm4geGVu YnVzX3JtKFhCVF9OSUwsIGJ1ZiwgIiIpOworfQorCisvKiBBZGRzIHhlbnN0b3JlIGVudHJpZXMg d2l0aCBkZXRhaWxzIG9mIGV4cG9ydGVyIHJpbmcgY3JlYXRlZAorICogZm9yIGdpdmVuIHJlbW90 ZSBkb21haW4uIEl0IHJlcXVpcmVzIHNwZWNpYWwgZGFlbW9uIHJ1bm5pbmcKKyAqIGluIGRvbTAg dG8gbWFrZSBzdXJlIHRoYXQgZ2l2ZW4gcmVtb3RlIGRvbWFpbiB3aWxsIGhhdmUgcmlnaHQKKyAq IHBlcm1pc3Npb25zIHRvIGFjY2VzcyB0aGF0IGRhdGEuCisgKi8KK3N0YXRpYyBpbnQgeGVuX2Nv bW1fZXhwb3NlX3JpbmdfZGV0YWlscyhpbnQgZG9taWQsIGludCByZG9taWQsCisJCQkJCWludCBn cmVmLCBpbnQgcG9ydCkKK3sKKwljaGFyIGJ1ZlsyNTVdOworCWludCByZXQ7CisKKwlzcHJpbnRm KGJ1ZiwgIi9sb2NhbC9kb21haW4vJWQvZGF0YS9oeXBlcl9kbWFidWYvJWQiLAorCQlkb21pZCwg cmRvbWlkKTsKKworCXJldCA9IHhlbmJ1c19wcmludGYoWEJUX05JTCwgYnVmLCAiZ3JlZmlkIiwg IiVkIiwgZ3JlZik7CisKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwK KwkJCSJGYWlsZWQgdG8gd3JpdGUgeGVuYnVzIGVudHJ5ICVzOiAlZFxuIiwKKwkJCWJ1ZiwgcmV0 KTsKKworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHhlbmJ1c19wcmludGYoWEJUX05JTCwg YnVmLCAicG9ydCIsICIlZCIsIHBvcnQpOworCisJaWYgKHJldCkgeworCQlkZXZfZXJyKGh5X2Ry dl9wcml2LT5kZXYsCisJCQkiRmFpbGVkIHRvIHdyaXRlIHhlbmJ1cyBlbnRyeSAlczogJWRcbiIs CisJCQlidWYsIHJldCk7CisKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwor LyoKKyAqIFF1ZXJpZXMgZGV0YWlscyBvZiByaW5nIGV4cG9zZWQgYnkgcmVtb3RlIGRvbWFpbi4K KyAqLworc3RhdGljIGludCB4ZW5fY29tbV9nZXRfcmluZ19kZXRhaWxzKGludCBkb21pZCwgaW50 IHJkb21pZCwKKwkJCQkgICAgIGludCAqZ3JlZmlkLCBpbnQgKnBvcnQpCit7CisJY2hhciBidWZb MjU1XTsKKwlpbnQgcmV0OworCisJc3ByaW50ZihidWYsICIvbG9jYWwvZG9tYWluLyVkL2RhdGEv aHlwZXJfZG1hYnVmLyVkIiwKKwkJcmRvbWlkLCBkb21pZCk7CisKKwlyZXQgPSB4ZW5idXNfc2Nh bmYoWEJUX05JTCwgYnVmLCAiZ3JlZmlkIiwgIiVkIiwgZ3JlZmlkKTsKKworCWlmIChyZXQgPD0g MCkgeworCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCisJCQkiRmFpbGVkIHRvIHJlYWQgeGVu YnVzIGVudHJ5ICVzOiAlZFxuIiwKKwkJCWJ1ZiwgcmV0KTsKKworCQlyZXR1cm4gcmV0OworCX0K KworCXJldCA9IHhlbmJ1c19zY2FuZihYQlRfTklMLCBidWYsICJwb3J0IiwgIiVkIiwgcG9ydCk7 CisKKwlpZiAocmV0IDw9IDApIHsKKwkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAorCQkJIkZh aWxlZCB0byByZWFkIHhlbmJ1cyBlbnRyeSAlczogJWRcbiIsCisJCQlidWYsIHJldCk7CisKKwkJ cmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gKHJldCA8PSAwID8gMSA6IDApOworfQorCitzdGF0 aWMgdm9pZCB4ZW5fZ2V0X2RvbWlkX2RlbGF5ZWQoc3RydWN0IHdvcmtfc3RydWN0ICp1bnVzZWQp Cit7CisJc3RydWN0IHhlbmJ1c190cmFuc2FjdGlvbiB4YnQ7CisJaW50IGRvbWlkLCByZXQ7CisK KwkvKiBzY2hlZHVsaW5nIGFub3RoZXIgaWYgZHJpdmVyIGlzIHN0aWxsIHJ1bm5pbmcKKwkgKiBh bmQgeGVuc3RvcmUgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkCisJICovCisJaWYgKGxpa2VseSh4 ZW5zdG9yZWRfcmVhZHkgPT0gMCkpIHsKKwkJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LAorCQkJ IlhlbnN0b3JlIGlzIG5vdCByZWFkeSB5ZXQuIFdpbGwgcmV0cnkgaW4gNTAwbXNcbiIpOworCQlz Y2hlZHVsZV9kZWxheWVkX3dvcmsoJmdldF92bV9pZF93b3JrLCBtc2Vjc190b19qaWZmaWVzKDUw MCkpOworCX0gZWxzZSB7CisJCXhlbmJ1c190cmFuc2FjdGlvbl9zdGFydCgmeGJ0KTsKKworCQly ZXQgPSB4ZW5idXNfc2NhbmYoeGJ0LCAiZG9taWQiLCAiIiwgIiVkIiwgJmRvbWlkKTsKKworCQlp ZiAocmV0IDw9IDApCisJCQlkb21pZCA9IC0xOworCisJCXhlbmJ1c190cmFuc2FjdGlvbl9lbmQo eGJ0LCAwKTsKKworCQkvKiB0cnkgYWdhaW4gc2luY2UgLTEgaXMgYW4gaW52YWxpZCBpZCBmb3Ig ZG9tYWluCisJCSAqIChidXQgb25seSBpZiBkcml2ZXIgaXMgc3RpbGwgcnVubmluZykKKwkJICov CisJCWlmICh1bmxpa2VseShkb21pZCA9PSAtMSkpIHsKKwkJCWRldl9kYmcoaHlfZHJ2X3ByaXYt PmRldiwKKwkJCQkiZG9taWQ9PS0xIGlzIGludmFsaWQuIFdpbGwgcmV0cnkgaXQgaW4gNTAwbXNc biIpOworCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZnZXRfdm1faWRfd29yaywKKwkJCQkJICAg ICAgbXNlY3NfdG9famlmZmllcyg1MDApKTsKKwkJfSBlbHNlIHsKKwkJCWRldl9pbmZvKGh5X2Ry dl9wcml2LT5kZXYsCisJCQkJICJTdWNjZXNzZnVsbHkgcmV0cmlldmVkIGRvbWlkIGZyb20gWGVu c3RvcmU6JWRcbiIsCisJCQkJIGRvbWlkKTsKKwkJCWh5X2Rydl9wcml2LT5kb21pZCA9IGRvbWlk OworCQl9CisJfQorfQorCitpbnQgeGVuX2JlX2dldF9kb21pZCh2b2lkKQoreworCXN0cnVjdCB4 ZW5idXNfdHJhbnNhY3Rpb24geGJ0OworCWludCBkb21pZDsKKworCWlmICh1bmxpa2VseSh4ZW5z dG9yZWRfcmVhZHkgPT0gMCkpIHsKKwkJeGVuX2dldF9kb21pZF9kZWxheWVkKE5VTEwpOworCQly ZXR1cm4gLTE7CisJfQorCisJeGVuYnVzX3RyYW5zYWN0aW9uX3N0YXJ0KCZ4YnQpOworCisJaWYg KCF4ZW5idXNfc2NhbmYoeGJ0LCAiZG9taWQiLCAiIiwgIiVkIiwgJmRvbWlkKSkKKwkJZG9taWQg PSAtMTsKKworCXhlbmJ1c190cmFuc2FjdGlvbl9lbmQoeGJ0LCAwKTsKKworCXJldHVybiBkb21p ZDsKK30KKworc3RhdGljIGludCB4ZW5fY29tbV9uZXh0X3JlcV9pZCh2b2lkKQoreworCWV4cG9y dF9yZXFfaWQrKzsKKwlyZXR1cm4gZXhwb3J0X3JlcV9pZDsKK30KKworLyogRm9yIG5vdyBjYWNo ZSBsYXRhc3QgcmluZ3MgYXMgZ2xvYmFsIHZhcmlhYmxlcyBUT0RPOiBrZWVwIHRoZW0gaW4gbGlz dCovCitzdGF0aWMgaXJxcmV0dXJuX3QgZnJvbnRfcmluZ19pc3IoaW50IGlycSwgdm9pZCAqaW5m byk7CitzdGF0aWMgaXJxcmV0dXJuX3QgYmFja19yaW5nX2lzcihpbnQgaXJxLCB2b2lkICppbmZv KTsKKworLyogQ2FsbGJhY2sgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBhbnkgY2hh bmdlIG9mIHhlbmJ1cyBwYXRoCisgKiBiZWluZyB3YXRjaGVkLiBVc2VkIGZvciBkZXRlY3Rpbmcg Y3JlYXRpb24vZGVzdHJ1Y3Rpb24gb2YgcmVtb3RlCisgKiBkb21haW4gZXhwb3J0ZXIgcmluZy4K KyAqCisgKiBXaGVuIHJlbW90ZSBkb21haW4ncyBleHBvcnRlciByaW5nIHdpbGwgYmUgZGV0ZWN0 ZWQsIGltcG9ydGVyIHJpbmcKKyAqIG9uIHRoaXMgZG9tYWluIHdpbGwgYmUgY3JlYXRlZC4KKyAq CisgKiBXaGVuIHJlbW90ZSBkb21haW4ncyBleHBvcnRlciByaW5nIGRlc3RydWN0aW9uIHdpbGwg YmUgZGV0ZWN0ZWQgaXQKKyAqIHdpbGwgY2VsYW51cCB0aGlzIGRvbWFpbiBpbXBvcnRlciByaW5n LgorICoKKyAqIERlc3RydWN0aW9uIGNhbiBiZSBjYXVzZWQgYnkgdW5sb2FkaW5nIG1vZHVsZSBi eSByZW1vdGUgZG9tYWluIG9yCisgKiBpdCdzIGNyYXNoL2ZvcmNlIHNodXRkb3duLgorICovCitz dGF0aWMgdm9pZCByZW1vdGVfZG9tX2V4cG9ydGVyX3dhdGNoX2NiKHN0cnVjdCB4ZW5idXNfd2F0 Y2ggKndhdGNoLAorCQkJCQkgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqdG9rZW4pCit7 CisJaW50IHJkb20sIHJldDsKKwl1aW50MzJfdCBncmVmaWQsIHBvcnQ7CisJc3RydWN0IHhlbl9j b21tX3J4X3JpbmdfaW5mbyAqcmluZ19pbmZvOworCisJLyogQ2hlY2sgd2hpY2ggZG9tYWluIGhh cyBjaGFuZ2VkIGl0cyBleHBvcnRlciByaW5ncyAqLworCXJldCA9IHNzY2FuZih3YXRjaC0+bm9k ZSwgIi9sb2NhbC9kb21haW4vJWQvIiwgJnJkb20pOworCWlmIChyZXQgPD0gMCkKKwkJcmV0dXJu OworCisJLyogQ2hlY2sgaWYgd2UgaGF2ZSBpbXBvcnRlciByaW5nIGZvciBnaXZlbiByZW1vdGUg ZG9tYWluIGFscmVhZHkKKwkgKiBjcmVhdGVkCisJICovCisJcmluZ19pbmZvID0geGVuX2NvbW1f ZmluZF9yeF9yaW5nKHJkb20pOworCisJLyogVHJ5IHRvIHF1ZXJ5IHJlbW90ZSBkb21haW4gZXhw b3J0ZXIgcmluZyBkZXRhaWxzIC0gaWYKKwkgKiB0aGF0IHdpbGwgZmFpbCBhbmQgd2UgaGF2ZSBp bXBvcnRlciByaW5nIHRoYXQgbWVhbnMgcmVtb3RlCisJICogZG9tYWlucyBoYXMgY2xlYW51cCBp dHMgZXhwb3J0ZXIgcmluZywgc28gb3VyIGltcG9ydGVyIHJpbmcKKwkgKiBpcyBubyBsb25nZXIg dXNlZnVsLgorCSAqCisJICogSWYgcXVlcnlpbmcgZGV0YWlscyB3aWxsIHN1Y2NlZWQgYW5kIHdl IGRvbid0IGhhdmUgaW1wb3J0ZXIgcmluZywKKwkgKiBpdCBtZWFucyB0aGF0IHJlbW90ZSBkb21h aW4gaGFzIHNldHVwIGl0IGZvciB1cyBhbmQgd2Ugc2hvdWxkCisJICogY29ubmVjdCB0byBpdC4K KwkgKi8KKworCXJldCA9IHhlbl9jb21tX2dldF9yaW5nX2RldGFpbHMoeGVuX2JlX2dldF9kb21p ZCgpLAorCQkJCQlyZG9tLCAmZ3JlZmlkLCAmcG9ydCk7CisKKwlpZiAocmluZ19pbmZvICYmIHJl dCAhPSAwKSB7CisJCWRldl9pbmZvKGh5X2Rydl9wcml2LT5kZXYsCisJCQkgIlJlbW90ZSBleHBv cnRlciBjbG9zZWQsIGNsZWFuaW51cCBpbXBvcnRlclxuIik7CisJCXhlbl9iZV9jbGVhbnVwX3J4 X3JidWYocmRvbSk7CisJfSBlbHNlIGlmICghcmluZ19pbmZvICYmIHJldCA9PSAwKSB7CisJCWRl dl9pbmZvKGh5X2Rydl9wcml2LT5kZXYsCisJCQkgIlJlZ2lzdGVyaW5nIGltcG9ydGVyXG4iKTsK KwkJeGVuX2JlX2luaXRfcnhfcmJ1ZihyZG9tKTsKKwl9Cit9CisKKy8qIGV4cG9ydGVyIG5lZWRz IHRvIGdlbmVyYXRlZCBpbmZvIGZvciBwYWdlIHNoYXJpbmcgKi8KK2ludCB4ZW5fYmVfaW5pdF90 eF9yYnVmKGludCBkb21pZCkKK3sKKwlzdHJ1Y3QgeGVuX2NvbW1fdHhfcmluZ19pbmZvICpyaW5n X2luZm87CisJc3RydWN0IHhlbl9jb21tX3NyaW5nICpzcmluZzsKKwlzdHJ1Y3QgZXZ0Y2huX2Fs bG9jX3VuYm91bmQgYWxsb2NfdW5ib3VuZDsKKwlzdHJ1Y3QgZXZ0Y2huX2Nsb3NlIGNsb3NlOwor CisJdm9pZCAqc2hhcmVkX3Jpbmc7CisJaW50IHJldDsKKworCS8qIGNoZWNrIGlmIHRoZXJlJ3Mg YW55IGV4aXN0aW5nIHR4IGNoYW5uZWwgaW4gdGhlIHRhYmxlICovCisJcmluZ19pbmZvID0geGVu X2NvbW1fZmluZF90eF9yaW5nKGRvbWlkKTsKKworCWlmIChyaW5nX2luZm8pIHsKKwkJZGV2X2lu Zm8oaHlfZHJ2X3ByaXYtPmRldiwKKwkJCSAidHggcmluZyBjaCB0byBkb21pZCA9ICVkIGFscmVh ZHkgZXhpc3RcbmdyZWYgPSAlZCwgcG9ydCA9ICVkXG4iLAorCQlyaW5nX2luZm8tPnJkb21haW4s IHJpbmdfaW5mby0+Z3JlZl9yaW5nLCByaW5nX2luZm8tPnBvcnQpOworCQlyZXR1cm4gMDsKKwl9 CisKKwlyaW5nX2luZm8gPSBrbWFsbG9jKHNpemVvZigqcmluZ19pbmZvKSwgR0ZQX0tFUk5FTCk7 CisKKwlpZiAoIXJpbmdfaW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBmcm9tIGV4cG9y dGVyIHRvIGltcG9ydGVyICovCisJc2hhcmVkX3JpbmcgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFn ZXMoR0ZQX0tFUk5FTCwgMSk7CisJaWYgKHNoYXJlZF9yaW5nID09IDApIHsKKwkJa2ZyZWUocmlu Z19pbmZvKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc3JpbmcgPSAoc3RydWN0IHhlbl9j b21tX3NyaW5nICopIHNoYXJlZF9yaW5nOworCisJU0hBUkVEX1JJTkdfSU5JVChzcmluZyk7CisK KwlGUk9OVF9SSU5HX0lOSVQoJihyaW5nX2luZm8tPnJpbmdfZnJvbnQpLCBzcmluZywgUEFHRV9T SVpFKTsKKworCXJpbmdfaW5mby0+Z3JlZl9yaW5nID0gZ250dGFiX2dyYW50X2ZvcmVpZ25fYWNj ZXNzKGRvbWlkLAorCQkJCQkJdmlydF90b19tZm4oc2hhcmVkX3JpbmcpLAorCQkJCQkJMCk7CisJ aWYgKHJpbmdfaW5mby0+Z3JlZl9yaW5nIDwgMCkgeworCQkvKiBmYWlsIHRvIGdldCBncmVmICov CisJCWtmcmVlKHJpbmdfaW5mbyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWFsbG9jX3Vu Ym91bmQuZG9tID0gRE9NSURfU0VMRjsKKwlhbGxvY191bmJvdW5kLnJlbW90ZV9kb20gPSBkb21p ZDsKKwlyZXQgPSBIWVBFUlZJU09SX2V2ZW50X2NoYW5uZWxfb3AoRVZUQ0hOT1BfYWxsb2NfdW5i b3VuZCwKKwkJCQkJICAmYWxsb2NfdW5ib3VuZCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGh5 X2Rydl9wcml2LT5kZXYsCisJCQkiQ2Fubm90IGFsbG9jYXRlIGV2ZW50IGNoYW5uZWxcbiIpOwor CQlrZnJlZShyaW5nX2luZm8pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBzZXR0aW5nIHVw IGludGVycnVwdCAqLworCXJldCA9IGJpbmRfZXZ0Y2huX3RvX2lycWhhbmRsZXIoYWxsb2NfdW5i b3VuZC5wb3J0LAorCQkJCQlmcm9udF9yaW5nX2lzciwgMCwKKwkJCQkJTlVMTCwgKHZvaWQgKikg cmluZ19pbmZvKTsKKworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRl diwKKwkJCSJGYWlsZWQgdG8gc2V0dXAgZXZlbnQgY2hhbm5lbFxuIik7CisJCWNsb3NlLnBvcnQg PSBhbGxvY191bmJvdW5kLnBvcnQ7CisJCUhZUEVSVklTT1JfZXZlbnRfY2hhbm5lbF9vcChFVlRD SE5PUF9jbG9zZSwgJmNsb3NlKTsKKwkJZ250dGFiX2VuZF9mb3JlaWduX2FjY2VzcyhyaW5nX2lu Zm8tPmdyZWZfcmluZywgMCwKKwkJCQkJdmlydF90b19tZm4oc2hhcmVkX3JpbmcpKTsKKwkJa2Zy ZWUocmluZ19pbmZvKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmluZ19pbmZvLT5yZG9tYWlu ID0gZG9taWQ7CisJcmluZ19pbmZvLT5pcnEgPSByZXQ7CisJcmluZ19pbmZvLT5wb3J0ID0gYWxs b2NfdW5ib3VuZC5wb3J0OworCisJbXV0ZXhfaW5pdCgmcmluZ19pbmZvLT5sb2NrKTsKKworCWRl dl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwKKwkJIiVzOiBhbGxvY2F0ZWQgZXZlbnRjaGFubmVsIGdy ZWYgJWQgIHBvcnQ6ICVkICBpcnE6ICVkXG4iLAorCQlfX2Z1bmNfXywKKwkJcmluZ19pbmZvLT5n cmVmX3JpbmcsCisJCXJpbmdfaW5mby0+cG9ydCwKKwkJcmluZ19pbmZvLT5pcnEpOworCisJcmV0 ID0geGVuX2NvbW1fYWRkX3R4X3JpbmcocmluZ19pbmZvKTsKKworCXJldCA9IHhlbl9jb21tX2V4 cG9zZV9yaW5nX2RldGFpbHMoeGVuX2JlX2dldF9kb21pZCgpLAorCQkJCQkgICBkb21pZCwKKwkJ CQkJICAgcmluZ19pbmZvLT5ncmVmX3JpbmcsCisJCQkJCSAgIHJpbmdfaW5mby0+cG9ydCk7CisK KwkvKiBSZWdpc3RlciB3YXRjaCBmb3IgcmVtb3RlIGRvbWFpbiBleHBvcnRlciByaW5nLgorCSAq IFdoZW4gcmVtb3RlIGRvbWFpbiB3aWxsIHNldHVwIGl0cyBleHBvcnRlciByaW5nLAorCSAqIHdl IHdpbGwgYXV0b21hdGljYWxseSBjb25uZWN0IG91ciBpbXBvcnRlciByaW5nIHRvIGl0LgorCSAq LworCXJpbmdfaW5mby0+d2F0Y2guY2FsbGJhY2sgPSByZW1vdGVfZG9tX2V4cG9ydGVyX3dhdGNo X2NiOworCXJpbmdfaW5mby0+d2F0Y2gubm9kZSA9IGttYWxsb2MoMjU1LCBHRlBfS0VSTkVMKTsK KworCWlmICghcmluZ19pbmZvLT53YXRjaC5ub2RlKSB7CisJCWtmcmVlKHJpbmdfaW5mbyk7CisJ CXJldHVybiAtRU5PTUVNOworCX0KKworCXNwcmludGYoKGNoYXIgKilyaW5nX2luZm8tPndhdGNo Lm5vZGUsCisJCSIvbG9jYWwvZG9tYWluLyVkL2RhdGEvaHlwZXJfZG1hYnVmLyVkL3BvcnQiLAor CQlkb21pZCwgeGVuX2JlX2dldF9kb21pZCgpKTsKKworCXJlZ2lzdGVyX3hlbmJ1c193YXRjaCgm cmluZ19pbmZvLT53YXRjaCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBjbGVhbnMgdXAgZXhw b3J0ZXIgcmluZyBjcmVhdGVkIGZvciBnaXZlbiByZW1vdGUgZG9tYWluICovCit2b2lkIHhlbl9i ZV9jbGVhbnVwX3R4X3JidWYoaW50IGRvbWlkKQoreworCXN0cnVjdCB4ZW5fY29tbV90eF9yaW5n X2luZm8gKnJpbmdfaW5mbzsKKwlzdHJ1Y3QgeGVuX2NvbW1fcnhfcmluZ19pbmZvICpyeF9yaW5n X2luZm87CisKKwkvKiBjaGVjayBpZiB3ZSBhdCBhbGwgaGF2ZSBleHBvcnRlciByaW5nIGZvciBn aXZlbiByZG9tYWluICovCisJcmluZ19pbmZvID0geGVuX2NvbW1fZmluZF90eF9yaW5nKGRvbWlk KTsKKworCWlmICghcmluZ19pbmZvKQorCQlyZXR1cm47CisKKwl4ZW5fY29tbV9yZW1vdmVfdHhf cmluZyhkb21pZCk7CisKKwl1bnJlZ2lzdGVyX3hlbmJ1c193YXRjaCgmcmluZ19pbmZvLT53YXRj aCk7CisJa2ZyZWUocmluZ19pbmZvLT53YXRjaC5ub2RlKTsKKworCS8qIE5vIG5lZWQgdG8gY2xv c2UgY29tbXVuaWNhdGlvbiBjaGFubmVsLCB3aWxsIGJlIGRvbmUgYnkKKwkgKiB0aGlzIGZ1bmN0 aW9uCisJICovCisJdW5iaW5kX2Zyb21faXJxaGFuZGxlcihyaW5nX2luZm8tPmlycSwgKHZvaWQg KikgcmluZ19pbmZvKTsKKworCS8qIE5vIG5lZWQgdG8gZnJlZSBzcmluZyBwYWdlLCB3aWxsIGJl IGZyZWVkIGJ5IHRoaXMgZnVuY3Rpb24KKwkgKiB3aGVuIG90aGVyIHNpZGUgd2lsbCBlbmQgaXRz IGFjY2VzcworCSAqLworCWdudHRhYl9lbmRfZm9yZWlnbl9hY2Nlc3MocmluZ19pbmZvLT5ncmVm X3JpbmcsIDAsCisJCQkJICAodW5zaWduZWQgbG9uZykgcmluZ19pbmZvLT5yaW5nX2Zyb250LnNy aW5nKTsKKworCWtmcmVlKHJpbmdfaW5mbyk7CisKKwlyeF9yaW5nX2luZm8gPSB4ZW5fY29tbV9m aW5kX3J4X3JpbmcoZG9taWQpOworCWlmICghcnhfcmluZ19pbmZvKQorCQlyZXR1cm47CisKKwlC QUNLX1JJTkdfSU5JVCgmKHJ4X3JpbmdfaW5mby0+cmluZ19iYWNrKSwKKwkJICAgICAgIHJ4X3Jp bmdfaW5mby0+cmluZ19iYWNrLnNyaW5nLAorCQkgICAgICAgUEFHRV9TSVpFKTsKK30KKworLyog aW1wb3J0ZXIgbmVlZHMgdG8ga25vdyBhYm91dCBzaGFyZWQgcGFnZSBhbmQgcG9ydCBudW1iZXJz IGZvcgorICogcmluZyBidWZmZXIgYW5kIGV2ZW50IGNoYW5uZWwKKyAqLworaW50IHhlbl9iZV9p bml0X3J4X3JidWYoaW50IGRvbWlkKQoreworCXN0cnVjdCB4ZW5fY29tbV9yeF9yaW5nX2luZm8g KnJpbmdfaW5mbzsKKwlzdHJ1Y3QgeGVuX2NvbW1fc3JpbmcgKnNyaW5nOworCisJc3RydWN0IHBh Z2UgKnNoYXJlZF9yaW5nOworCisJc3RydWN0IGdudHRhYl9tYXBfZ3JhbnRfcmVmICptYXBfb3Bz OworCisJaW50IHJldDsKKwlpbnQgcnhfZ3JlZiwgcnhfcG9ydDsKKworCS8qIGNoZWNrIGlmIHRo ZXJlJ3MgZXhpc3RpbmcgcnggcmluZyBjaGFubmVsICovCisJcmluZ19pbmZvID0geGVuX2NvbW1f ZmluZF9yeF9yaW5nKGRvbWlkKTsKKworCWlmIChyaW5nX2luZm8pIHsKKwkJZGV2X2luZm8oaHlf ZHJ2X3ByaXYtPmRldiwKKwkJCSAicnggcmluZyBjaCBmcm9tIGRvbWlkID0gJWQgYWxyZWFkeSBl eGlzdFxuIiwKKwkJCSByaW5nX2luZm8tPnNkb21haW4pOworCisJCXJldHVybiAwOworCX0KKwor CXJldCA9IHhlbl9jb21tX2dldF9yaW5nX2RldGFpbHMoeGVuX2JlX2dldF9kb21pZCgpLCBkb21p ZCwKKwkJCQkJJnJ4X2dyZWYsICZyeF9wb3J0KTsKKworCWlmIChyZXQpIHsKKwkJZGV2X2Vyciho eV9kcnZfcHJpdi0+ZGV2LAorCQkJIkRvbWFpbiAlZCBoYXMgbm90IGNyZWF0ZWQgZXhwb3J0ZXIg cmluZyBmb3IgY3VycmVudCBkb21haW5cbiIsCisJCQlkb21pZCk7CisKKwkJcmV0dXJuIHJldDsK Kwl9CisKKwlyaW5nX2luZm8gPSBrbWFsbG9jKHNpemVvZigqcmluZ19pbmZvKSwgR0ZQX0tFUk5F TCk7CisKKwlpZiAoIXJpbmdfaW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyaW5nX2luZm8t PnNkb21haW4gPSBkb21pZDsKKwlyaW5nX2luZm8tPmV2dGNobiA9IHJ4X3BvcnQ7CisKKwltYXBf b3BzID0ga21hbGxvYyhzaXplb2YoKm1hcF9vcHMpLCBHRlBfS0VSTkVMKTsKKworCWlmICghbWFw X29wcykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfbm9fbWFwX29wczsKKwl9CisK KwlpZiAoZ250dGFiX2FsbG9jX3BhZ2VzKDEsICZzaGFyZWRfcmluZykpIHsKKwkJcmV0ID0gLUVO T01FTTsKKwkJZ290byBmYWlsX290aGVyczsKKwl9CisKKwlnbnR0YWJfc2V0X21hcF9vcCgmbWFw X29wc1swXSwKKwkJCSAgKHVuc2lnbmVkIGxvbmcpcGZuX3RvX2thZGRyKAorCQkJCQlwYWdlX3Rv X3BmbihzaGFyZWRfcmluZykpLAorCQkJICBHTlRNQVBfaG9zdF9tYXAsIHJ4X2dyZWYsIGRvbWlk KTsKKworCWdudHRhYl9zZXRfdW5tYXBfb3AoJnJpbmdfaW5mby0+dW5tYXBfb3AsCisJCQkgICAg KHVuc2lnbmVkIGxvbmcpcGZuX3RvX2thZGRyKAorCQkJCQlwYWdlX3RvX3BmbihzaGFyZWRfcmlu ZykpLAorCQkJICAgIEdOVE1BUF9ob3N0X21hcCwgLTEpOworCisJcmV0ID0gZ250dGFiX21hcF9y ZWZzKG1hcF9vcHMsIE5VTEwsICZzaGFyZWRfcmluZywgMSk7CisJaWYgKHJldCA8IDApIHsKKwkJ ZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LCAiQ2Fubm90IG1hcCByaW5nXG4iKTsKKwkJcmV0ID0g LUVGQVVMVDsKKwkJZ290byBmYWlsX290aGVyczsKKwl9CisKKwlpZiAobWFwX29wc1swXS5zdGF0 dXMpIHsKKwkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LCAiUmluZyBtYXBwaW5nIGZhaWxlZFxu Iik7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gZmFpbF9vdGhlcnM7CisJfSBlbHNlIHsKKwkJ cmluZ19pbmZvLT51bm1hcF9vcC5oYW5kbGUgPSBtYXBfb3BzWzBdLmhhbmRsZTsKKwl9CisKKwlr ZnJlZShtYXBfb3BzKTsKKworCXNyaW5nID0gKHN0cnVjdCB4ZW5fY29tbV9zcmluZyAqKXBmbl90 b19rYWRkcihwYWdlX3RvX3BmbihzaGFyZWRfcmluZykpOworCisJQkFDS19SSU5HX0lOSVQoJnJp bmdfaW5mby0+cmluZ19iYWNrLCBzcmluZywgUEFHRV9TSVpFKTsKKworCXJldCA9IGJpbmRfaW50 ZXJkb21haW5fZXZ0Y2huX3RvX2lycShkb21pZCwgcnhfcG9ydCk7CisKKwlpZiAocmV0IDwgMCkg eworCQlyZXQgPSAtRUlPOworCQlnb3RvIGZhaWxfb3RoZXJzOworCX0KKworCXJpbmdfaW5mby0+ aXJxID0gcmV0OworCisJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LAorCQkiJXM6IGJvdW5kIHRv IGV2ZW50Y2hhbm5lbCBwb3J0OiAlZCAgaXJxOiAlZFxuIiwgX19mdW5jX18sCisJCXJ4X3BvcnQs CisJCXJpbmdfaW5mby0+aXJxKTsKKworCXJldCA9IHhlbl9jb21tX2FkZF9yeF9yaW5nKHJpbmdf aW5mbyk7CisKKwkvKiBTZXR1cCBjb21tdW5jYXRpb24gY2hhbm5lbCBpbiBvcHBvc2l0ZSBkaXJl Y3Rpb24gKi8KKwlpZiAoIXhlbl9jb21tX2ZpbmRfdHhfcmluZyhkb21pZCkpCisJCXJldCA9IHhl bl9iZV9pbml0X3R4X3JidWYoZG9taWQpOworCisJcmV0ID0gcmVxdWVzdF9pcnEocmluZ19pbmZv LT5pcnEsCisJCQkgIGJhY2tfcmluZ19pc3IsIDAsCisJCQkgIE5VTEwsICh2b2lkICopcmluZ19p bmZvKTsKKworCXJldHVybiByZXQ7CisKK2ZhaWxfb3RoZXJzOgorCWtmcmVlKG1hcF9vcHMpOwor CitmYWlsX25vX21hcF9vcHM6CisJa2ZyZWUocmluZ19pbmZvKTsKKworCXJldHVybiByZXQ7Cit9 CisKKy8qIGNsZW5hcyB1cCBpbXBvcnRlciByaW5nIGNyZWF0ZSBmb3IgZ2l2ZW4gc291cmNlIGRv bWFpbiAqLwordm9pZCB4ZW5fYmVfY2xlYW51cF9yeF9yYnVmKGludCBkb21pZCkKK3sKKwlzdHJ1 Y3QgeGVuX2NvbW1fcnhfcmluZ19pbmZvICpyaW5nX2luZm87CisJc3RydWN0IHhlbl9jb21tX3R4 X3JpbmdfaW5mbyAqdHhfcmluZ19pbmZvOworCXN0cnVjdCBwYWdlICpzaGFyZWRfcmluZzsKKwor CS8qIGNoZWNrIGlmIHdlIGhhdmUgaW1wb3J0ZXIgcmluZyBjcmVhdGVkIGZvciBnaXZlbiBzZG9t YWluICovCisJcmluZ19pbmZvID0geGVuX2NvbW1fZmluZF9yeF9yaW5nKGRvbWlkKTsKKworCWlm ICghcmluZ19pbmZvKQorCQlyZXR1cm47CisKKwl4ZW5fY29tbV9yZW1vdmVfcnhfcmluZyhkb21p ZCk7CisKKwkvKiBubyBuZWVkIHRvIGNsb3NlIGV2ZW50IGNoYW5uZWwsIHdpbGwgYmUgZG9uZSBi eSB0aGF0IGZ1bmN0aW9uICovCisJdW5iaW5kX2Zyb21faXJxaGFuZGxlcihyaW5nX2luZm8tPmly cSwgKHZvaWQgKilyaW5nX2luZm8pOworCisJLyogdW5tYXBwaW5nIHNoYXJlZCByaW5nIHBhZ2Ug Ki8KKwlzaGFyZWRfcmluZyA9IHZpcnRfdG9fcGFnZShyaW5nX2luZm8tPnJpbmdfYmFjay5zcmlu Zyk7CisJZ250dGFiX3VubWFwX3JlZnMoJnJpbmdfaW5mby0+dW5tYXBfb3AsIE5VTEwsICZzaGFy ZWRfcmluZywgMSk7CisJZ250dGFiX2ZyZWVfcGFnZXMoMSwgJnNoYXJlZF9yaW5nKTsKKworCWtm cmVlKHJpbmdfaW5mbyk7CisKKwl0eF9yaW5nX2luZm8gPSB4ZW5fY29tbV9maW5kX3R4X3Jpbmco ZG9taWQpOworCWlmICghdHhfcmluZ19pbmZvKQorCQlyZXR1cm47CisKKwlTSEFSRURfUklOR19J TklUKHR4X3JpbmdfaW5mby0+cmluZ19mcm9udC5zcmluZyk7CisJRlJPTlRfUklOR19JTklUKCYo dHhfcmluZ19pbmZvLT5yaW5nX2Zyb250KSwKKwkJCXR4X3JpbmdfaW5mby0+cmluZ19mcm9udC5z cmluZywKKwkJCVBBR0VfU0laRSk7Cit9CisKKyNpZmRlZiBDT05GSUdfSFlQRVJfRE1BQlVGX1hF Tl9BVVRPX1JYX0NIX0FERAorCitzdGF0aWMgdm9pZCB4ZW5fcnhfY2hfYWRkX2RlbGF5ZWQoc3Ry dWN0IHdvcmtfc3RydWN0ICp1bnVzZWQpOworCitzdGF0aWMgREVDTEFSRV9ERUxBWUVEX1dPUkso eGVuX3J4X2NoX2F1dG9fYWRkX3dvcmssIHhlbl9yeF9jaF9hZGRfZGVsYXllZCk7CisKKyNkZWZp bmUgRE9NSURfU0NBTl9TVEFSVAkxCS8qICBkb21pZCA9IDEgKi8KKyNkZWZpbmUgRE9NSURfU0NB Tl9FTkQJCTEwCS8qIGRvbWlkID0gMTAgKi8KKworc3RhdGljIHZvaWQgeGVuX3J4X2NoX2FkZF9k ZWxheWVkKHN0cnVjdCB3b3JrX3N0cnVjdCAqdW51c2VkKQoreworCWludCByZXQ7CisJY2hhciBi dWZbMTI4XTsKKwlpbnQgaSwgZHVtbXk7CisKKwlkZXZfZGJnKGh5X2Rydl9wcml2LT5kZXYsCisJ CSJTY2FubmluZyBuZXcgdHggY2hhbm5lbCBjb21taW5nIGZyb20gYW5vdGhlciBkb21haW5cbiIp OworCisJLyogY2hlY2sgb3RoZXIgZG9tYWlucyBhbmQgc2NoZWR1bGUgYW5vdGhlciB3b3JrIGlm IGRyaXZlcgorCSAqIGlzIHN0aWxsIHJ1bm5pbmcgYW5kIGJhY2tlbmQgaXMgdmFsaWQKKwkgKi8K KwlpZiAoaHlfZHJ2X3ByaXYgJiYKKwkgICAgaHlfZHJ2X3ByaXYtPmluaXRpYWxpemVkKSB7CisJ CWZvciAoaSA9IERPTUlEX1NDQU5fU1RBUlQ7IGkgPCBET01JRF9TQ0FOX0VORCArIDE7IGkrKykg eworCQkJaWYgKGkgPT0gaHlfZHJ2X3ByaXYtPmRvbWlkKQorCQkJCWNvbnRpbnVlOworCisJCQlz cHJpbnRmKGJ1ZiwgIi9sb2NhbC9kb21haW4vJWQvZGF0YS9oeXBlcl9kbWFidWYvJWQiLAorCQkJ CWksIGh5X2Rydl9wcml2LT5kb21pZCk7CisKKwkJCXJldCA9IHhlbmJ1c19zY2FuZihYQlRfTklM LCBidWYsICJwb3J0IiwgIiVkIiwgJmR1bW15KTsKKworCQkJaWYgKHJldCA+IDApIHsKKwkJCQlp ZiAoeGVuX2NvbW1fZmluZF9yeF9yaW5nKGkpICE9IE5VTEwpCisJCQkJCWNvbnRpbnVlOworCisJ CQkJcmV0ID0geGVuX2JlX2luaXRfcnhfcmJ1ZihpKTsKKworCQkJCWlmICghcmV0KQorCQkJCQlk ZXZfaW5mbyhoeV9kcnZfcHJpdi0+ZGV2LAorCQkJCQkJICJEb25lIHJ4IGNoIGluaXQgZm9yIFZN ICVkXG4iLAorCQkJCQkJIGkpOworCQkJfQorCQl9CisKKwkJLyogY2hlY2sgZXZlcnkgMTAgc2Vj b25kcyAqLworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnhlbl9yeF9jaF9hdXRvX2FkZF93b3Jr LAorCQkJCSAgICAgIG1zZWNzX3RvX2ppZmZpZXMoMTAwMDApKTsKKwl9Cit9CisKKyNlbmRpZiAv KiBDT05GSUdfSFlQRVJfRE1BQlVGX1hFTl9BVVRPX1JYX0NIX0FERCAqLworCit2b2lkIHhlbl9p bml0X2NvbW1fZW52X2RlbGF5ZWQoc3RydWN0IHdvcmtfc3RydWN0ICp1bnVzZWQpCit7CisJaW50 IHJldDsKKworCS8qIHNjaGVkdWxpbmcgYW5vdGhlciB3b3JrIGlmIGRyaXZlciBpcyBzdGlsbCBy dW5uaW5nCisJICogYW5kIHhlbnN0b3JlIGhhc24ndCBiZWVuIGluaXRpYWxpemVkIG9yIGRvbV9p ZCBoYXNuJ3QKKwkgKiBiZWVuIGNvcnJlY3RseSByZXRyaWV2ZWQuCisJICovCisJaWYgKGxpa2Vs eSh4ZW5zdG9yZWRfcmVhZHkgPT0gMCB8fAorCSAgICBoeV9kcnZfcHJpdi0+ZG9taWQgPT0gLTEp KSB7CisJCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCSJYZW5zdG9yZSBub3QgcmVhZHkg V2lsbCByZS10cnkgaW4gNTAwbXNcbiIpOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnhlbl9p bml0X2NvbW1fZW52X3dvcmssCisJCQkJICAgICAgbXNlY3NfdG9famlmZmllcyg1MDApKTsKKwl9 IGVsc2UgeworCQlyZXQgPSB4ZW5fY29tbV9zZXR1cF9kYXRhX2RpcigpOworCQlpZiAocmV0IDwg MCkgeworCQkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gY3JlYXRl IGRhdGEgZGlyIGluIFhlbnN0b3JlXG4iKTsKKwkJfSBlbHNlIHsKKwkJCWRldl9pbmZvKGh5X2Ry dl9wcml2LT5kZXYsCisJCQkJIlN1Y2Nlc3NmdWxseSBmaW5pc2hlZCBjb21tIGVudiBpbml0XG4i KTsKKwkJCWh5X2Rydl9wcml2LT5pbml0aWFsaXplZCA9IHRydWU7CisKKyNpZmRlZiBDT05GSUdf SFlQRVJfRE1BQlVGX1hFTl9BVVRPX1JYX0NIX0FERAorCQkJeGVuX3J4X2NoX2FkZF9kZWxheWVk KE5VTEwpOworI2VuZGlmIC8qIENPTkZJR19IWVBFUl9ETUFCVUZfWEVOX0FVVE9fUlhfQ0hfQURE ICovCisJCX0KKwl9Cit9CisKK2ludCB4ZW5fYmVfaW5pdF9jb21tX2Vudih2b2lkKQoreworCWlu dCByZXQ7CisKKwl4ZW5fY29tbV9yaW5nX3RhYmxlX2luaXQoKTsKKworCWlmICh1bmxpa2VseSh4 ZW5zdG9yZWRfcmVhZHkgPT0gMCB8fAorCSAgICBoeV9kcnZfcHJpdi0+ZG9taWQgPT0gLTEpKSB7 CisJCXhlbl9pbml0X2NvbW1fZW52X2RlbGF5ZWQoTlVMTCk7CisJCXJldHVybiAtMTsKKwl9CisK KwlyZXQgPSB4ZW5fY29tbV9zZXR1cF9kYXRhX2RpcigpOworCWlmIChyZXQgPCAwKSB7CisJCWRl dl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCSJGYWlsZWQgdG8gY3JlYXRlIGRhdGEgZGlyIGlu IFhlbnN0b3JlXG4iKTsKKwl9IGVsc2UgeworCQlkZXZfaW5mbyhoeV9kcnZfcHJpdi0+ZGV2LAor CQkJIlN1Y2Nlc3NmdWxseSBmaW5pc2hlZCBjb21tIGVudiBpbml0aWFsaXphdGlvblxuIik7CisK KwkJaHlfZHJ2X3ByaXYtPmluaXRpYWxpemVkID0gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gcmV0Owor fQorCisvKiBjbGVhbnMgdXAgYWxsIHR4L3J4IHJpbmdzICovCitzdGF0aWMgdm9pZCB4ZW5fYmVf Y2xlYW51cF9hbGxfcmJ1ZnModm9pZCkKK3sKKwl4ZW5fY29tbV9mb3JlYWNoX3R4X3JpbmcoeGVu X2JlX2NsZWFudXBfdHhfcmJ1Zik7CisJeGVuX2NvbW1fZm9yZWFjaF9yeF9yaW5nKHhlbl9iZV9j bGVhbnVwX3J4X3JidWYpOworfQorCit2b2lkIHhlbl9iZV9kZXN0cm95X2NvbW0odm9pZCkKK3sK Kwl4ZW5fYmVfY2xlYW51cF9hbGxfcmJ1ZnMoKTsKKwl4ZW5fY29tbV9kZXN0cm95X2RhdGFfZGly KCk7Cit9CisKK2ludCB4ZW5fYmVfc2VuZF9yZXEoaW50IGRvbWlkLCBzdHJ1Y3QgaHlwZXJfZG1h YnVmX3JlcSAqcmVxLAorCQkJICAgICAgaW50IHdhaXQpCit7CisJc3RydWN0IHhlbl9jb21tX2Zy b250X3JpbmcgKnJpbmc7CisJc3RydWN0IGh5cGVyX2RtYWJ1Zl9yZXEgKm5ld19yZXE7CisJc3Ry dWN0IHhlbl9jb21tX3R4X3JpbmdfaW5mbyAqcmluZ19pbmZvOworCWludCBub3RpZnk7CisKKwlz dHJ1Y3QgdGltZXZhbCB0dl9zdGFydCwgdHZfZW5kOworCXN0cnVjdCB0aW1ldmFsIHR2X2RpZmY7 CisKKwlpbnQgdGltZW91dCA9IDEwMDA7CisKKwkvKiBmaW5kIGEgcmluZyBpbmZvIGZvciB0aGUg Y2hhbm5lbCAqLworCXJpbmdfaW5mbyA9IHhlbl9jb21tX2ZpbmRfdHhfcmluZyhkb21pZCk7CisJ aWYgKCFyaW5nX2luZm8pIHsKKwkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAorCQkJIkNhbid0 IGZpbmQgcmluZyBpbmZvIGZvciB0aGUgY2hhbm5lbFxuIik7CisJCXJldHVybiAtRU5PRU5UOwor CX0KKworCisJcmluZyA9ICZyaW5nX2luZm8tPnJpbmdfZnJvbnQ7CisKKwlkb19nZXR0aW1lb2Zk YXkoJnR2X3N0YXJ0KTsKKworCXdoaWxlIChSSU5HX0ZVTEwocmluZykpIHsKKwkJZGV2X2RiZyho eV9kcnZfcHJpdi0+ZGV2LCAiUklOR19GVUxMXG4iKTsKKworCQlpZiAodGltZW91dCA9PSAwKSB7 CisJCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCisJCQkJIlRpbWVvdXQgd2hpbGUgd2FpdGlu ZyBmb3IgYW4gZW50cnkgaW4gdGhlIHJpbmdcbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJ dXNsZWVwX3JhbmdlKDEwMCwgMTIwKTsKKwkJdGltZW91dC0tOworCX0KKworCXRpbWVvdXQgPSAx MDAwOworCisJbXV0ZXhfbG9jaygmcmluZ19pbmZvLT5sb2NrKTsKKworCW5ld19yZXEgPSBSSU5H X0dFVF9SRVFVRVNUKHJpbmcsIHJpbmctPnJlcV9wcm9kX3B2dCk7CisJaWYgKCFuZXdfcmVxKSB7 CisJCW11dGV4X3VubG9jaygmcmluZ19pbmZvLT5sb2NrKTsKKwkJZGV2X2VycihoeV9kcnZfcHJp di0+ZGV2LAorCQkJIk5VTEwgUkVRVUVTVFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCXJl cS0+cmVxX2lkID0geGVuX2NvbW1fbmV4dF9yZXFfaWQoKTsKKworCS8qIHVwZGF0ZSByZXFfcGVu ZGluZyB3aXRoIGN1cnJlbnQgcmVxdWVzdCAqLworCW1lbWNweSgmcmVxX3BlbmRpbmcsIHJlcSwg c2l6ZW9mKHJlcV9wZW5kaW5nKSk7CisKKwkvKiBwYXNzIGN1cnJlbnQgcmVxdWVzdCB0byB0aGUg cmluZyAqLworCW1lbWNweShuZXdfcmVxLCByZXEsIHNpemVvZigqbmV3X3JlcSkpOworCisJcmlu Zy0+cmVxX3Byb2RfcHZ0Kys7CisKKwlSSU5HX1BVU0hfUkVRVUVTVFNfQU5EX0NIRUNLX05PVElG WShyaW5nLCBub3RpZnkpOworCWlmIChub3RpZnkpCisJCW5vdGlmeV9yZW1vdGVfdmlhX2lycShy aW5nX2luZm8tPmlycSk7CisKKwlpZiAod2FpdCkgeworCQl3aGlsZSAodGltZW91dC0tKSB7CisJ CQlpZiAocmVxX3BlbmRpbmcuc3RhdCAhPQorCQkJICAgIEhZUEVSX0RNQUJVRl9SRVFfTk9UX1JF U1BPTkRFRCkKKwkJCQlicmVhazsKKwkJCXVzbGVlcF9yYW5nZSgxMDAsIDEyMCk7CisJCX0KKwor CQlpZiAodGltZW91dCA8IDApIHsKKwkJCW11dGV4X3VubG9jaygmcmluZ19pbmZvLT5sb2NrKTsK KwkJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCQkicmVxdWVzdCB0aW1lZC1vdXRcbiIp OworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCisJCW11dGV4X3VubG9jaygmcmluZ19pbmZvLT5s b2NrKTsKKwkJZG9fZ2V0dGltZW9mZGF5KCZ0dl9lbmQpOworCisJCS8qIGNoZWNraW5nIHRpbWUg ZHVyYXRpb24gZm9yIHJvdW5kLXRyaXAgb2YgYSByZXF1ZXN0CisJCSAqIGZvciBkZWJ1Z2dpbmcK KwkJICovCisJCWlmICh0dl9lbmQudHZfdXNlYyA+PSB0dl9zdGFydC50dl91c2VjKSB7CisJCQl0 dl9kaWZmLnR2X3NlYyA9IHR2X2VuZC50dl9zZWMtdHZfc3RhcnQudHZfc2VjOworCQkJdHZfZGlm Zi50dl91c2VjID0gdHZfZW5kLnR2X3VzZWMtdHZfc3RhcnQudHZfdXNlYzsKKwkJfSBlbHNlIHsK KwkJCXR2X2RpZmYudHZfc2VjID0gdHZfZW5kLnR2X3NlYy10dl9zdGFydC50dl9zZWMtMTsKKwkJ CXR2X2RpZmYudHZfdXNlYyA9IHR2X2VuZC50dl91c2VjKzEwMDAwMDAtCisJCQkJCSAgdHZfc3Rh cnQudHZfdXNlYzsKKwkJfQorCisJCWlmICh0dl9kaWZmLnR2X3NlYyAhPSAwICYmIHR2X2RpZmYu dHZfdXNlYyA+IDE2MDAwKQorCQkJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LAorCQkJCSJzZW5k X3JlcTp0aW1lIGRpZmY6ICVsZCBzZWMsICVsZCB1c2VjXG4iLAorCQkJCXR2X2RpZmYudHZfc2Vj LCB0dl9kaWZmLnR2X3VzZWMpOworCX0KKworCW11dGV4X3VubG9jaygmcmluZ19pbmZvLT5sb2Nr KTsKKworCXJldHVybiAwOworfQorCisvKiBJU1IgZm9yIGhhbmRsaW5nIHJlcXVlc3QgKi8KK3N0 YXRpYyBpcnFyZXR1cm5fdCBiYWNrX3JpbmdfaXNyKGludCBpcnEsIHZvaWQgKmluZm8pCit7CisJ UklOR19JRFggcmMsIHJwOworCXN0cnVjdCBoeXBlcl9kbWFidWZfcmVxIHJlcTsKKwlzdHJ1Y3Qg aHlwZXJfZG1hYnVmX3Jlc3AgcmVzcDsKKworCWludCBub3RpZnksIG1vcmVfdG9fZG87CisJaW50 IHJldDsKKworCXN0cnVjdCB4ZW5fY29tbV9yeF9yaW5nX2luZm8gKnJpbmdfaW5mbzsKKwlzdHJ1 Y3QgeGVuX2NvbW1fYmFja19yaW5nICpyaW5nOworCisJcmluZ19pbmZvID0gKHN0cnVjdCB4ZW5f Y29tbV9yeF9yaW5nX2luZm8gKilpbmZvOworCXJpbmcgPSAmcmluZ19pbmZvLT5yaW5nX2JhY2s7 CisKKwlkZXZfZGJnKGh5X2Rydl9wcml2LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJZG8g eworCQlyYyA9IHJpbmctPnJlcV9jb25zOworCQlycCA9IHJpbmctPnNyaW5nLT5yZXFfcHJvZDsK KwkJbW9yZV90b19kbyA9IDA7CisJCXdoaWxlIChyYyAhPSBycCkgeworCQkJaWYgKFJJTkdfUkVR VUVTVF9DT05TX09WRVJGTE9XKHJpbmcsIHJjKSkKKwkJCQlicmVhazsKKworCQkJbWVtY3B5KCZy ZXEsIFJJTkdfR0VUX1JFUVVFU1QocmluZywgcmMpLCBzaXplb2YocmVxKSk7CisJCQlyaW5nLT5y ZXFfY29ucyA9ICsrcmM7CisKKwkJCXJldCA9IGh5cGVyX2RtYWJ1Zl9tc2dfcGFyc2UocmluZ19p bmZvLT5zZG9tYWluLCAmcmVxKTsKKworCQkJaWYgKHJldCA+IDApIHsKKwkJCQkvKiBwcmVwYXJp bmcgYSByZXNwb25zZSBmb3IgdGhlIHJlcXVlc3QgYW5kCisJCQkJICogc2VuZCBpdCB0byB0aGUg cmVxdWVzdGVyCisJCQkJICovCisJCQkJbWVtY3B5KCZyZXNwLCAmcmVxLCBzaXplb2YocmVzcCkp OworCQkJCW1lbWNweShSSU5HX0dFVF9SRVNQT05TRShyaW5nLAorCQkJCQkJCSByaW5nLT5yc3Bf cHJvZF9wdnQpLAorCQkJCQkJCSAmcmVzcCwgc2l6ZW9mKHJlc3ApKTsKKwkJCQlyaW5nLT5yc3Bf cHJvZF9wdnQrKzsKKworCQkJCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCQkJInJlc3Bv bmRpbmcgdG8gZXhwb3J0ZXIgZm9yIHJlcTolZFxuIiwKKwkJCQkJcmVzcC5yZXNwX2lkKTsKKwor CQkJCVJJTkdfUFVTSF9SRVNQT05TRVNfQU5EX0NIRUNLX05PVElGWShyaW5nLAorCQkJCQkJCQkg ICAgIG5vdGlmeSk7CisKKwkJCQlpZiAobm90aWZ5KQorCQkJCQlub3RpZnlfcmVtb3RlX3ZpYV9p cnEocmluZ19pbmZvLT5pcnEpOworCQkJfQorCisJCQlSSU5HX0ZJTkFMX0NIRUNLX0ZPUl9SRVFV RVNUUyhyaW5nLCBtb3JlX3RvX2RvKTsKKwkJfQorCX0gd2hpbGUgKG1vcmVfdG9fZG8pOworCisJ cmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKiBJU1IgZm9yIGhhbmRsaW5nIHJlc3BvbnNlcyAq Lworc3RhdGljIGlycXJldHVybl90IGZyb250X3JpbmdfaXNyKGludCBpcnEsIHZvaWQgKmluZm8p Cit7CisJLyogZnJvbnQgcmluZyBvbmx5IGNhcmUgYWJvdXQgcmVzcG9uc2UgZnJvbSBiYWNrICov CisJc3RydWN0IGh5cGVyX2RtYWJ1Zl9yZXNwICpyZXNwOworCVJJTkdfSURYIGksIHJwOworCWlu dCBtb3JlX3RvX2RvLCByZXQ7CisKKwlzdHJ1Y3QgeGVuX2NvbW1fdHhfcmluZ19pbmZvICpyaW5n X2luZm87CisJc3RydWN0IHhlbl9jb21tX2Zyb250X3JpbmcgKnJpbmc7CisKKwlyaW5nX2luZm8g PSAoc3RydWN0IHhlbl9jb21tX3R4X3JpbmdfaW5mbyAqKWluZm87CisJcmluZyA9ICZyaW5nX2lu Zm8tPnJpbmdfZnJvbnQ7CisKKwlkZXZfZGJnKGh5X2Rydl9wcml2LT5kZXYsICIlc1xuIiwgX19m dW5jX18pOworCisJZG8geworCQltb3JlX3RvX2RvID0gMDsKKwkJcnAgPSByaW5nLT5zcmluZy0+ cnNwX3Byb2Q7CisJCWZvciAoaSA9IHJpbmctPnJzcF9jb25zOyBpICE9IHJwOyBpKyspIHsKKwkJ CXJlc3AgPSBSSU5HX0dFVF9SRVNQT05TRShyaW5nLCBpKTsKKworCQkJLyogdXBkYXRlIHBlbmRp bmcgcmVxdWVzdCdzIHN0YXR1cyB3aXRoIHdoYXQgaXMKKwkJCSAqIGluIHRoZSByZXNwb25zZQor CQkJICovCisKKwkJCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCQkiZ2V0dGluZyByZXNw b25zZSBmcm9tIGltcG9ydGVyXG4iKTsKKworCQkJaWYgKHJlcV9wZW5kaW5nLnJlcV9pZCA9PSBy ZXNwLT5yZXNwX2lkKQorCQkJCXJlcV9wZW5kaW5nLnN0YXQgPSByZXNwLT5zdGF0OworCisJCQlp ZiAocmVzcC0+c3RhdCA9PSBIWVBFUl9ETUFCVUZfUkVRX05FRURTX0ZPTExPV19VUCkgeworCQkJ CS8qIHBhcnNpbmcgcmVzcG9uc2UgKi8KKwkJCQlyZXQgPSBoeXBlcl9kbWFidWZfbXNnX3BhcnNl KHJpbmdfaW5mby0+cmRvbWFpbiwKKwkJCQkJKHN0cnVjdCBoeXBlcl9kbWFidWZfcmVxICopcmVz cCk7CisKKwkJCQlpZiAocmV0IDwgMCkgeworCQkJCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYs CisJCQkJCQkiZXJyIHdoaWxlIHBhcnNpbmcgcmVzcFxuIik7CisJCQkJfQorCQkJfSBlbHNlIGlm IChyZXNwLT5zdGF0ID09IEhZUEVSX0RNQUJVRl9SRVFfUFJPQ0VTU0VEKSB7CisJCQkJLyogZm9y IGRlYnVnZ2luZyBkbWFfYnVmIHJlbW90ZSBzeW5jaCAqLworCQkJCWRldl9kYmcoaHlfZHJ2X3By aXYtPmRldiwKKwkJCQkJIm9yaWdpbmFsIHJlcXVlc3QgPSAweCV4XG4iLCByZXNwLT5jbWQpOwor CQkJCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCQkJImdvdCBIWVBFUl9ETUFCVUZfUkVR X1BST0NFU1NFRFxuIik7CisJCQl9IGVsc2UgaWYgKHJlc3AtPnN0YXQgPT0gSFlQRVJfRE1BQlVG X1JFUV9FUlJPUikgeworCQkJCS8qIGZvciBkZWJ1Z2dpbmcgZG1hX2J1ZiByZW1vdGUgc3luY2gg Ki8KKwkJCQlkZXZfZGJnKGh5X2Rydl9wcml2LT5kZXYsCisJCQkJCSJvcmlnaW5hbCByZXF1ZXN0 ID0gMHgleFxuIiwgcmVzcC0+Y21kKTsKKwkJCQlkZXZfZGJnKGh5X2Rydl9wcml2LT5kZXYsCisJ CQkJCSJnb3QgSFlQRVJfRE1BQlVGX1JFUV9FUlJPUlxuIik7CisJCQl9CisJCX0KKworCQlyaW5n LT5yc3BfY29ucyA9IGk7CisKKwkJaWYgKGkgIT0gcmluZy0+cmVxX3Byb2RfcHZ0KQorCQkJUklO R19GSU5BTF9DSEVDS19GT1JfUkVTUE9OU0VTKHJpbmcsIG1vcmVfdG9fZG8pOworCQllbHNlCisJ CQlyaW5nLT5zcmluZy0+cnNwX2V2ZW50ID0gaSsxOworCisJfSB3aGlsZSAobW9yZV90b19kbyk7 CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYv aHlwZXJfZG1hYnVmL3hlbi1iYWNrZW5kL2h5cGVyX2RtYWJ1Zl94ZW5fY29tbS5oIGIvZHJpdmVy cy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi94ZW4tYmFja2VuZC9oeXBlcl9kbWFidWZfeGVuX2NvbW0u aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGEyYjcwCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi94ZW4tYmFja2VuZC9oeXBlcl9k bWFidWZfeGVuX2NvbW0uaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIw MTcgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVk LCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0 aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29m dHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5 LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5k L29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRv IHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8g dGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90 aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBh cmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw b3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisg KiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO RCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1Ig Q09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RI RVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQg T1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUg U09GVFdBUkUuCisgKgorICovCisKKyNpZm5kZWYgX19IWVBFUl9ETUFCVUZfWEVOX0NPTU1fSF9f CisjZGVmaW5lIF9fSFlQRVJfRE1BQlVGX1hFTl9DT01NX0hfXworCisjaW5jbHVkZSAieGVuL2lu dGVyZmFjZS9pby9yaW5nLmgiCisjaW5jbHVkZSAieGVuL3hlbmJ1cy5oIgorI2luY2x1ZGUgIi4u L2h5cGVyX2RtYWJ1Zl9tc2cuaCIKKworZXh0ZXJuIGludCB4ZW5zdG9yZWRfcmVhZHk7CisKK0RF RklORV9SSU5HX1RZUEVTKHhlbl9jb21tLCBzdHJ1Y3QgaHlwZXJfZG1hYnVmX3JlcSwgc3RydWN0 IGh5cGVyX2RtYWJ1Zl9yZXNwKTsKKworc3RydWN0IHhlbl9jb21tX3R4X3JpbmdfaW5mbyB7CisJ c3RydWN0IHhlbl9jb21tX2Zyb250X3JpbmcgcmluZ19mcm9udDsKKwlpbnQgcmRvbWFpbjsKKwlp bnQgZ3JlZl9yaW5nOworCWludCBpcnE7CisJaW50IHBvcnQ7CisJc3RydWN0IG11dGV4IGxvY2s7 CisJc3RydWN0IHhlbmJ1c193YXRjaCB3YXRjaDsKK307CisKK3N0cnVjdCB4ZW5fY29tbV9yeF9y aW5nX2luZm8geworCWludCBzZG9tYWluOworCWludCBpcnE7CisJaW50IGV2dGNobjsKKwlzdHJ1 Y3QgeGVuX2NvbW1fYmFja19yaW5nIHJpbmdfYmFjazsKKwlzdHJ1Y3QgZ250dGFiX3VubWFwX2dy YW50X3JlZiB1bm1hcF9vcDsKK307CisKK2ludCB4ZW5fYmVfZ2V0X2RvbWlkKHZvaWQpOworCitp bnQgeGVuX2JlX2luaXRfY29tbV9lbnYodm9pZCk7CisKKy8qIGV4cG9ydGVyIG5lZWRzIHRvIGdl bmVyYXRlZCBpbmZvIGZvciBwYWdlIHNoYXJpbmcgKi8KK2ludCB4ZW5fYmVfaW5pdF90eF9yYnVm KGludCBkb21pZCk7CisKKy8qIGltcG9ydGVyIG5lZWRzIHRvIGtub3cgYWJvdXQgc2hhcmVkIHBh Z2UgYW5kIHBvcnQgbnVtYmVycworICogZm9yIHJpbmcgYnVmZmVyIGFuZCBldmVudCBjaGFubmVs CisgKi8KK2ludCB4ZW5fYmVfaW5pdF9yeF9yYnVmKGludCBkb21pZCk7CisKKy8qIGNsZWFucyB1 cCBleHBvcnRlciByaW5nIGNyZWF0ZWQgZm9yIGdpdmVuIGRvbWFpbiAqLwordm9pZCB4ZW5fYmVf Y2xlYW51cF90eF9yYnVmKGludCBkb21pZCk7CisKKy8qIGNsZWFucyB1cCBpbXBvcnRlciByaW5n IGNyZWF0ZWQgZm9yIGdpdmVuIGRvbWFpbiAqLwordm9pZCB4ZW5fYmVfY2xlYW51cF9yeF9yYnVm KGludCBkb21pZCk7CisKK3ZvaWQgeGVuX2JlX2Rlc3Ryb3lfY29tbSh2b2lkKTsKKworLyogc2Vu ZCByZXF1ZXN0IHRvIHRoZSByZW1vdGUgZG9tYWluICovCitpbnQgeGVuX2JlX3NlbmRfcmVxKGlu dCBkb21pZCwgc3RydWN0IGh5cGVyX2RtYWJ1Zl9yZXEgKnJlcSwKKwkJICAgIGludCB3YWl0KTsK KworI2VuZGlmIC8qIF9fSFlQRVJfRE1BQlVGX1hFTl9DT01NX0hfXyAqLwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi94ZW4tYmFja2VuZC9oeXBlcl9kbWFidWZfeGVu X2NvbW1fbGlzdC5jIGIvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi94ZW4tYmFja2VuZC9o eXBlcl9kbWFidWZfeGVuX2NvbW1fbGlzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjE1MDIzZGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS1idWYvaHlwZXJf ZG1hYnVmL3hlbi1iYWNrZW5kL2h5cGVyX2RtYWJ1Zl94ZW5fY29tbV9saXN0LmMKQEAgLTAsMCAr MSwxNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgorICoK KyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkg cGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0 ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0 aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRh dGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNv ZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlz IGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6 CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu b3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRl ZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdh cmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQg Tk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5P IEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFC TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAq IEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3Jz OgorICogICAgRG9uZ3dvbiBLaW0gPGRvbmd3b24ua2ltQGludGVsLmNvbT4KKyAqICAgIE1hdGV1 c3ogUG9scm9sYSA8bWF0ZXVzengucG90cm9sYUBpbnRlbC5jb20+CisgKgorICovCisKKyNpbmNs dWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUg PGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisjaW5jbHVkZSA8bGludXgv aGFzaHRhYmxlLmg+CisjaW5jbHVkZSA8eGVuL2dyYW50X3RhYmxlLmg+CisjaW5jbHVkZSAiLi4v aHlwZXJfZG1hYnVmX2Rydi5oIgorI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl94ZW5fY29tbS5oIgor I2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl94ZW5fY29tbV9saXN0LmgiCisKK0RFQ0xBUkVfSEFTSFRB QkxFKHhlbl9jb21tX3R4X3JpbmdfaGFzaCwgTUFYX0VOVFJZX1RYX1JJTkcpOworREVDTEFSRV9I QVNIVEFCTEUoeGVuX2NvbW1fcnhfcmluZ19oYXNoLCBNQVhfRU5UUllfUlhfUklORyk7CisKK3Zv aWQgeGVuX2NvbW1fcmluZ190YWJsZV9pbml0KHZvaWQpCit7CisJaGFzaF9pbml0KHhlbl9jb21t X3J4X3JpbmdfaGFzaCk7CisJaGFzaF9pbml0KHhlbl9jb21tX3R4X3JpbmdfaGFzaCk7Cit9CisK K2ludCB4ZW5fY29tbV9hZGRfdHhfcmluZyhzdHJ1Y3QgeGVuX2NvbW1fdHhfcmluZ19pbmZvICpy aW5nX2luZm8pCit7CisJc3RydWN0IHhlbl9jb21tX3R4X3JpbmdfaW5mb19lbnRyeSAqaW5mb19l bnRyeTsKKworCWluZm9fZW50cnkgPSBrbWFsbG9jKHNpemVvZigqaW5mb19lbnRyeSksIEdGUF9L RVJORUwpOworCisJaWYgKCFpbmZvX2VudHJ5KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWluZm9f ZW50cnktPmluZm8gPSByaW5nX2luZm87CisKKwloYXNoX2FkZCh4ZW5fY29tbV90eF9yaW5nX2hh c2gsICZpbmZvX2VudHJ5LT5ub2RlLAorCQlpbmZvX2VudHJ5LT5pbmZvLT5yZG9tYWluKTsKKwor CXJldHVybiAwOworfQorCitpbnQgeGVuX2NvbW1fYWRkX3J4X3Jpbmcoc3RydWN0IHhlbl9jb21t X3J4X3JpbmdfaW5mbyAqcmluZ19pbmZvKQoreworCXN0cnVjdCB4ZW5fY29tbV9yeF9yaW5nX2lu Zm9fZW50cnkgKmluZm9fZW50cnk7CisKKwlpbmZvX2VudHJ5ID0ga21hbGxvYyhzaXplb2YoKmlu Zm9fZW50cnkpLCBHRlBfS0VSTkVMKTsKKworCWlmICghaW5mb19lbnRyeSkKKwkJcmV0dXJuIC1F Tk9NRU07CisKKwlpbmZvX2VudHJ5LT5pbmZvID0gcmluZ19pbmZvOworCisJaGFzaF9hZGQoeGVu X2NvbW1fcnhfcmluZ19oYXNoLCAmaW5mb19lbnRyeS0+bm9kZSwKKwkJaW5mb19lbnRyeS0+aW5m by0+c2RvbWFpbik7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHhlbl9jb21tX3R4X3Jpbmdf aW5mbyAqeGVuX2NvbW1fZmluZF90eF9yaW5nKGludCBkb21pZCkKK3sKKwlzdHJ1Y3QgeGVuX2Nv bW1fdHhfcmluZ19pbmZvX2VudHJ5ICppbmZvX2VudHJ5OworCWludCBia3Q7CisKKwloYXNoX2Zv cl9lYWNoKHhlbl9jb21tX3R4X3JpbmdfaGFzaCwgYmt0LCBpbmZvX2VudHJ5LCBub2RlKQorCQlp ZiAoaW5mb19lbnRyeS0+aW5mby0+cmRvbWFpbiA9PSBkb21pZCkKKwkJCXJldHVybiBpbmZvX2Vu dHJ5LT5pbmZvOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCB4ZW5fY29tbV9yeF9yaW5n X2luZm8gKnhlbl9jb21tX2ZpbmRfcnhfcmluZyhpbnQgZG9taWQpCit7CisJc3RydWN0IHhlbl9j b21tX3J4X3JpbmdfaW5mb19lbnRyeSAqaW5mb19lbnRyeTsKKwlpbnQgYmt0OworCisJaGFzaF9m b3JfZWFjaCh4ZW5fY29tbV9yeF9yaW5nX2hhc2gsIGJrdCwgaW5mb19lbnRyeSwgbm9kZSkKKwkJ aWYgKGluZm9fZW50cnktPmluZm8tPnNkb21haW4gPT0gZG9taWQpCisJCQlyZXR1cm4gaW5mb19l bnRyeS0+aW5mbzsKKworCXJldHVybiBOVUxMOworfQorCitpbnQgeGVuX2NvbW1fcmVtb3ZlX3R4 X3JpbmcoaW50IGRvbWlkKQoreworCXN0cnVjdCB4ZW5fY29tbV90eF9yaW5nX2luZm9fZW50cnkg KmluZm9fZW50cnk7CisJaW50IGJrdDsKKworCWhhc2hfZm9yX2VhY2goeGVuX2NvbW1fdHhfcmlu Z19oYXNoLCBia3QsIGluZm9fZW50cnksIG5vZGUpCisJCWlmIChpbmZvX2VudHJ5LT5pbmZvLT5y ZG9tYWluID09IGRvbWlkKSB7CisJCQloYXNoX2RlbCgmaW5mb19lbnRyeS0+bm9kZSk7CisJCQlr ZnJlZShpbmZvX2VudHJ5KTsKKwkJCXJldHVybiAwOworCQl9CisKKwlyZXR1cm4gLUVOT0VOVDsK K30KKworaW50IHhlbl9jb21tX3JlbW92ZV9yeF9yaW5nKGludCBkb21pZCkKK3sKKwlzdHJ1Y3Qg eGVuX2NvbW1fcnhfcmluZ19pbmZvX2VudHJ5ICppbmZvX2VudHJ5OworCWludCBia3Q7CisKKwlo YXNoX2Zvcl9lYWNoKHhlbl9jb21tX3J4X3JpbmdfaGFzaCwgYmt0LCBpbmZvX2VudHJ5LCBub2Rl KQorCQlpZiAoaW5mb19lbnRyeS0+aW5mby0+c2RvbWFpbiA9PSBkb21pZCkgeworCQkJaGFzaF9k ZWwoJmluZm9fZW50cnktPm5vZGUpOworCQkJa2ZyZWUoaW5mb19lbnRyeSk7CisJCQlyZXR1cm4g MDsKKwkJfQorCisJcmV0dXJuIC1FTk9FTlQ7Cit9CisKK3ZvaWQgeGVuX2NvbW1fZm9yZWFjaF90 eF9yaW5nKHZvaWQgKCpmdW5jKShpbnQgZG9taWQpKQoreworCXN0cnVjdCB4ZW5fY29tbV90eF9y aW5nX2luZm9fZW50cnkgKmluZm9fZW50cnk7CisJc3RydWN0IGhsaXN0X25vZGUgKnRtcDsKKwlp bnQgYmt0OworCisJaGFzaF9mb3JfZWFjaF9zYWZlKHhlbl9jb21tX3R4X3JpbmdfaGFzaCwgYmt0 LCB0bXAsCisJCQkgICBpbmZvX2VudHJ5LCBub2RlKSB7CisJCWZ1bmMoaW5mb19lbnRyeS0+aW5m by0+cmRvbWFpbik7CisJfQorfQorCit2b2lkIHhlbl9jb21tX2ZvcmVhY2hfcnhfcmluZyh2b2lk ICgqZnVuYykoaW50IGRvbWlkKSkKK3sKKwlzdHJ1Y3QgeGVuX2NvbW1fcnhfcmluZ19pbmZvX2Vu dHJ5ICppbmZvX2VudHJ5OworCXN0cnVjdCBobGlzdF9ub2RlICp0bXA7CisJaW50IGJrdDsKKwor CWhhc2hfZm9yX2VhY2hfc2FmZSh4ZW5fY29tbV9yeF9yaW5nX2hhc2gsIGJrdCwgdG1wLAorCQkJ ICAgaW5mb19lbnRyeSwgbm9kZSkgeworCQlmdW5jKGluZm9fZW50cnktPmluZm8tPnNkb21haW4p OworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYveGVuLWJh Y2tlbmQvaHlwZXJfZG1hYnVmX3hlbl9jb21tX2xpc3QuaCBiL2RyaXZlcnMvZG1hLWJ1Zi9oeXBl cl9kbWFidWYveGVuLWJhY2tlbmQvaHlwZXJfZG1hYnVmX3hlbl9jb21tX2xpc3QuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTAyZmU3Ci0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi94ZW4tYmFja2VuZC9oeXBlcl9kbWFidWZfeGVu X2NvbW1fbGlzdC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNyBJ bnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZy ZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMg c29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2Fy ZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5j bHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1v ZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Ig c2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hv bSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ug YW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdy YXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRp b25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVE ICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElN UExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5P TklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZ UklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgor ICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBP VEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEgg VEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZU V0FSRS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0hZUEVSX0RNQUJVRl9YRU5fQ09NTV9MSVNUX0hf XworI2RlZmluZSBfX0hZUEVSX0RNQUJVRl9YRU5fQ09NTV9MSVNUX0hfXworCisvKiBudW1iZXIg b2YgYml0cyB0byBiZSB1c2VkIGZvciBleHBvcnRlZCBkbWFidWZzIGhhc2ggdGFibGUgKi8KKyNk ZWZpbmUgTUFYX0VOVFJZX1RYX1JJTkcgNworLyogbnVtYmVyIG9mIGJpdHMgdG8gYmUgdXNlZCBm b3IgaW1wb3J0ZWQgZG1hYnVmcyBoYXNoIHRhYmxlICovCisjZGVmaW5lIE1BWF9FTlRSWV9SWF9S SU5HIDcKKworc3RydWN0IHhlbl9jb21tX3R4X3JpbmdfaW5mb19lbnRyeSB7CisJc3RydWN0IHhl bl9jb21tX3R4X3JpbmdfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlOworfTsK Kworc3RydWN0IHhlbl9jb21tX3J4X3JpbmdfaW5mb19lbnRyeSB7CisJc3RydWN0IHhlbl9jb21t X3J4X3JpbmdfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlOworfTsKKwordm9p ZCB4ZW5fY29tbV9yaW5nX3RhYmxlX2luaXQodm9pZCk7CisKK2ludCB4ZW5fY29tbV9hZGRfdHhf cmluZyhzdHJ1Y3QgeGVuX2NvbW1fdHhfcmluZ19pbmZvICpyaW5nX2luZm8pOworCitpbnQgeGVu X2NvbW1fYWRkX3J4X3Jpbmcoc3RydWN0IHhlbl9jb21tX3J4X3JpbmdfaW5mbyAqcmluZ19pbmZv KTsKKworaW50IHhlbl9jb21tX3JlbW92ZV90eF9yaW5nKGludCBkb21pZCk7CisKK2ludCB4ZW5f Y29tbV9yZW1vdmVfcnhfcmluZyhpbnQgZG9taWQpOworCitzdHJ1Y3QgeGVuX2NvbW1fdHhfcmlu Z19pbmZvICp4ZW5fY29tbV9maW5kX3R4X3JpbmcoaW50IGRvbWlkKTsKKworc3RydWN0IHhlbl9j b21tX3J4X3JpbmdfaW5mbyAqeGVuX2NvbW1fZmluZF9yeF9yaW5nKGludCBkb21pZCk7CisKKy8q IGl0ZXJhdGVzIG92ZXIgYWxsIGV4cG9ydGVyIHJpbmdzIGFuZCBjYWxscyBwcm92aWRlZAorICog ZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlbQorICovCit2b2lkIHhlbl9jb21tX2ZvcmVhY2hfdHhf cmluZyh2b2lkICgqZnVuYykoaW50IGRvbWlkKSk7CisKKy8qIGl0ZXJhdGVzIG92ZXIgYWxsIGlt cG9ydGVyIHJpbmdzIGFuZCBjYWxscyBwcm92aWRlZAorICogZnVuY3Rpb24gZm9yIGVhY2ggb2Yg dGhlbQorICovCit2b2lkIHhlbl9jb21tX2ZvcmVhY2hfcnhfcmluZyh2b2lkICgqZnVuYykoaW50 IGRvbWlkKSk7CisKKyNlbmRpZiAvLyBfX0hZUEVSX0RNQUJVRl9YRU5fQ09NTV9MSVNUX0hfXwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi94ZW4tYmFja2VuZC9oeXBl cl9kbWFidWZfeGVuX2Rydi5jIGIvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi94ZW4tYmFj a2VuZC9oeXBlcl9kbWFidWZfeGVuX2Rydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjE0ZWQzYmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS1idWYvaHlwZXJf ZG1hYnVmL3hlbi1iYWNrZW5kL2h5cGVyX2RtYWJ1Zl94ZW5fZHJ2LmMKQEAgLTAsMCArMSw0NiBA QAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE3IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVy bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24g b2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1 bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0 d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisg KiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlz aGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisg KiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAo aW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFs bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAq CisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBP RiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQg U0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1Ig QU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwg T1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBP VEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAg ICBEb25nd29uIEtpbSA8ZG9uZ3dvbi5raW1AaW50ZWwuY29tPgorICogICAgTWF0ZXVzeiBQb2xy b2xhIDxtYXRldXN6eC5wb3Ryb2xhQGludGVsLmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUgIi4u L2h5cGVyX2RtYWJ1Zl9kcnYuaCIKKyNpbmNsdWRlICJoeXBlcl9kbWFidWZfeGVuX2NvbW0uaCIK KyNpbmNsdWRlICJoeXBlcl9kbWFidWZfeGVuX3NobS5oIgorCitzdHJ1Y3QgaHlwZXJfZG1hYnVm X2JrbmRfb3BzIHhlbl9ia25kX29wcyA9IHsKKwkuaW5pdCA9IE5VTEwsIC8qIG5vdCBuZWVkZWQg Zm9yIHhlbiAqLworCS5jbGVhbnVwID0gTlVMTCwgLyogbm90IG5lZWRlZCBmb3IgeGVuICovCisJ LmdldF92bV9pZCA9IHhlbl9iZV9nZXRfZG9taWQsCisJLnNoYXJlX3BhZ2VzID0geGVuX2JlX3No YXJlX3BhZ2VzLAorCS51bnNoYXJlX3BhZ2VzID0geGVuX2JlX3Vuc2hhcmVfcGFnZXMsCisJLm1h cF9zaGFyZWRfcGFnZXMgPSAodm9pZCAqKXhlbl9iZV9tYXBfc2hhcmVkX3BhZ2VzLAorCS51bm1h cF9zaGFyZWRfcGFnZXMgPSB4ZW5fYmVfdW5tYXBfc2hhcmVkX3BhZ2VzLAorCS5pbml0X2NvbW1f ZW52ID0geGVuX2JlX2luaXRfY29tbV9lbnYsCisJLmRlc3Ryb3lfY29tbSA9IHhlbl9iZV9kZXN0 cm95X2NvbW0sCisJLmluaXRfcnhfY2ggPSB4ZW5fYmVfaW5pdF9yeF9yYnVmLAorCS5pbml0X3R4 X2NoID0geGVuX2JlX2luaXRfdHhfcmJ1ZiwKKwkuc2VuZF9yZXEgPSB4ZW5fYmVfc2VuZF9yZXEs Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi94ZW4tYmFja2Vu ZC9oeXBlcl9kbWFidWZfeGVuX2Rydi5oIGIvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi94 ZW4tYmFja2VuZC9oeXBlcl9kbWFidWZfeGVuX2Rydi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmE0OTAyYjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS1idWYv aHlwZXJfZG1hYnVmL3hlbi1iYWNrZW5kL2h5cGVyX2RtYWJ1Zl94ZW5fZHJ2LmgKQEAgLTAsMCAr MSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE3IEludGVsIENvcnBvcmF0aW9uCisgKgor ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBw ZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRl ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRo ZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0 aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwg ZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29m dHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMg ZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoK KyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVk IGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2Fy ZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS QU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBO T1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8g RVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJM RSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICog RlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVT RSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaWZu ZGVmIF9fSFlQRVJfRE1BQlVGX1hFTl9EUlZfSF9fCisjZGVmaW5lIF9fSFlQRVJfRE1BQlVGX1hF Tl9EUlZfSF9fCisjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9ncmFudF90YWJsZS5oPgorCitleHRl cm4gc3RydWN0IGh5cGVyX2RtYWJ1Zl9ia25kX29wcyB4ZW5fYmtuZF9vcHM7CisKKy8qIE1haW4g cHVycG9zZSBvZiB0aGlzIHN0cnVjdHVyZSBpcyB0byBrZWVwCisgKiBhbGwgcmVmZXJlbmNlcyBj cmVhdGVkIG9yIGFjcXVpcmVkIGZvciBzaGFyaW5nCisgKiBwYWdlcyB3aXRoIGFub3RoZXIgZG9t YWluIGZvciBmcmVlaW5nIHRob3NlIGxhdGVyCisgKiB3aGVuIHVuc2hhcmluZy4KKyAqLworc3Ry dWN0IHhlbl9zaGFyZWRfcGFnZXNfaW5mbyB7CisJLyogdG9wIGxldmVsIHJlZmlkICovCisJZ3Jh bnRfcmVmX3QgbHZsM19ncmVmOworCisJLyogcGFnZSBvZiB0b3AgbGV2ZWwgYWRkcmVzc2luZywg aXQgY29udGFpbnMgcmVmaWRzIG9mIDJuZCBsdmwgcGFnZXMgKi8KKwlncmFudF9yZWZfdCAqbHZs M190YWJsZTsKKworCS8qIHRhYmxlIG9mIDJuZCBsZXZlbCBwYWdlcywgdGhhdCBjb250YWlucyBy ZWZpZHMgdG8gZGF0YSBwYWdlcyAqLworCWdyYW50X3JlZl90ICpsdmwyX3RhYmxlOworCisJLyog dW5tYXAgb3BzIGZvciBtYXBwZWQgcGFnZXMgKi8KKwlzdHJ1Y3QgZ250dGFiX3VubWFwX2dyYW50 X3JlZiAqdW5tYXBfb3BzOworCisJLyogZGF0YSBwYWdlcyB0byBiZSB1bm1hcHBlZCAqLworCXN0 cnVjdCBwYWdlICoqZGF0YV9wYWdlczsKK307CisKKyNlbmRpZiAvLyBfX0hZUEVSX0RNQUJVRl9Y RU5fQ09NTV9IX18KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYveGVu LWJhY2tlbmQvaHlwZXJfZG1hYnVmX3hlbl9zaG0uYyBiL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9k bWFidWYveGVuLWJhY2tlbmQvaHlwZXJfZG1hYnVmX3hlbl9zaG0uYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi5jNmExNWYxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9k bWEtYnVmL2h5cGVyX2RtYWJ1Zi94ZW4tYmFja2VuZC9oeXBlcl9kbWFidWZfeGVuX3NobS5jCkBA IC0wLDAgKzEsNTI1IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTcgSW50ZWwgQ29ycG9yYXRp b24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwg dG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBh c3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRl YWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0 IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBw dWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9m IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0 d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25k aXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUg aW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAq IFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJ TkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwK KyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQu ICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMg QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwg V0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklT SU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBP UiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICog QXV0aG9yczoKKyAqICAgIERvbmd3b24gS2ltIDxkb25nd29uLmtpbUBpbnRlbC5jb20+CisgKiAg ICBNYXRldXN6IFBvbHJvbGEgPG1hdGV1c3p4LnBvdHJvbGFAaW50ZWwuY29tPgorICoKKyAqLwor CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPHhlbi9ncmFudF90YWJsZS5oPgor I2luY2x1ZGUgPGFzbS94ZW4vcGFnZS5oPgorI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl94ZW5fZHJ2 LmgiCisjaW5jbHVkZSAiLi4vaHlwZXJfZG1hYnVmX2Rydi5oIgorCisjZGVmaW5lIFJFRlNfUEVS X1BBR0UgKFBBR0VfU0laRS9zaXplb2YoZ3JhbnRfcmVmX3QpKQorCisvKgorICogQ3JlYXRlcyAy IGxldmVsIHBhZ2UgZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgcmVmZXJlbmNpbmcgc2hhcmVkIHBh Z2VzLgorICogVG9wIGxldmVsIHBhZ2UgaXMgYSBzaW5nbGUgcGFnZSB0aGF0IGNvbnRhaW5zIHVw IHRvIDEwMjQgcmVmaWRzIHRoYXQKKyAqIHBvaW50IHRvIDJuZCBsZXZlbCBwYWdlcy4KKyAqCisg KiBFYWNoIDJuZCBsZXZlbCBwYWdlIGNvbnRhaW5zIHVwIHRvIDEwMjQgcmVmaWRzIHRoYXQgcG9p bnQgdG8gc2hhcmVkCisgKiBkYXRhIHBhZ2VzLgorICoKKyAqIFRoZXJlIHdpbGwgYWx3YXlzIGJl IG9uZSB0b3AgbGV2ZWwgcGFnZSBhbmQgbnVtYmVyIG9mIDJuZCBsZXZlbCBwYWdlcworICogZGVw ZW5kcyBvbiBudW1iZXIgb2Ygc2hhcmVkIGRhdGEgcGFnZXMuCisgKgorICogICAgICAzcmQgbGV2 ZWwgcGFnZSAgICAgICAgICAgICAgICAybmQgbGV2ZWwgcGFnZXMgICAgICAgICAgICBEYXRhIHBh Z2VzCisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICDilIw+Ky0tLS0tLS0tLS0tLS0t LS0tLS0tKyDilIw+Ky0tLS0tLS0tLS0tLSsKKyAqIHwybmQgbGV2ZWwgcGFnZSAwIHJlZmlkICAg fC0tLeKUmCB8RGF0YSBwYWdlIDAgcmVmaWQgICB8LeKUmCB8RGF0YSBwYWdlIDAgfAorICogfDJu ZCBsZXZlbCBwYWdlIDEgcmVmaWQgICB8LS0t4pSQIHxEYXRhIHBhZ2UgMSByZWZpZCAgIHwt4pSQ ICstLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAuLi4gICAgICAgICAgIHwgICB8IHwgICAg IC4uLi4gICAgICAgICAgIHwgfAorICogfDJuZCBsZXZlbCBwYWdlIDEwMjMgcmVmaWR8LeKUkCB8 IHxEYXRhIHBhZ2UgMTAyMyByZWZpZHwg4pSUPistLS0tLS0tLS0tLS0rCisgKiArLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSsgfCB8ICstLS0tLS0tLS0tLS0tLS0tLS0tLSsgICB8RGF0YSBwYWdl IDEgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAg ICAgICAgICAgKy0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 IOKUlD4rLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgIHxEYXRhIHBhZ2UgMTAyNCByZWZpZHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAgfERhdGEgcGFnZSAxMDI1IHJlZmlkfAorICogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgICB8ICAgICAgIC4uLiAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgIHxEYXRhIHBhZ2UgMjA0NyByZWZpZHwKKyAqICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAu Li4uLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUlC0tPistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfERhdGEgcGFn ZSAxMDQ3NTUyIHJlZmlkfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8RGF0 YSBwYWdlIDEwNDc1NTMgcmVmaWR8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAgICAgLi4uICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfERhdGEgcGFnZSAxMDQ4NTc1IHJlZmlkfAorICogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKgorICogVXNpbmcgc3VjaCAy IGxldmVsIHN0cnVjdHVyZSBpdCBpcyBwb3NzaWJsZSB0byByZWZlcmVuY2UgdXAgdG8gNEdCIG9m CisgKiBzaGFyZWQgZGF0YSB1c2luZyBzaW5nbGUgcmVmaWQgcG9pbnRpbmcgdG8gdG9wIGxldmVs IHBhZ2UuCisgKgorICogUmV0dXJucyByZWZpZCBvZiB0b3AgbGV2ZWwgcGFnZS4KKyAqLworaW50 IHhlbl9iZV9zaGFyZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgZG9taWQsIGludCBu ZW50cywKKwkJICAgICAgIHZvaWQgKipyZWZzX2luZm8pCit7CisJZ3JhbnRfcmVmX3QgbHZsM19n cmVmOworCWdyYW50X3JlZl90ICpsdmwyX3RhYmxlOworCWdyYW50X3JlZl90ICpsdmwzX3RhYmxl OworCisJLyoKKwkgKiBDYWxjdWxhdGUgbnVtYmVyIG9mIHBhZ2VzIG5lZWRlZCBmb3IgMm5kIGxl dmVsIGFkZHJlc2luZzoKKwkgKi8KKwlpbnQgbl9sdmwyX2dyZWZzID0gKG5lbnRzL1JFRlNfUEVS X1BBR0UgKworCQkJICAgKChuZW50cyAlIFJFRlNfUEVSX1BBR0UpID8gMSA6IDApKTsKKworCXN0 cnVjdCB4ZW5fc2hhcmVkX3BhZ2VzX2luZm8gKnNoX3BhZ2VzX2luZm87CisJaW50IGk7CisKKwls dmwzX3RhYmxlID0gKGdyYW50X3JlZl90ICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCAx KTsKKwlsdmwyX3RhYmxlID0gKGdyYW50X3JlZl90ICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VS TkVMLCBuX2x2bDJfZ3JlZnMpOworCisJc2hfcGFnZXNfaW5mbyA9IGttYWxsb2Moc2l6ZW9mKCpz aF9wYWdlc19pbmZvKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXNoX3BhZ2VzX2luZm8pCisJCXJl dHVybiAtRU5PTUVNOworCisJKnJlZnNfaW5mbyA9ICh2b2lkICopc2hfcGFnZXNfaW5mbzsKKwor CS8qIHNoYXJlIGRhdGEgcGFnZXMgaW4gcmVhZG9ubHkgbW9kZSBmb3Igc2VjdXJpdHkgKi8KKwlm b3IgKGkgPSAwOyBpIDwgbmVudHM7IGkrKykgeworCQlsdmwyX3RhYmxlW2ldID0gZ250dGFiX2dy YW50X2ZvcmVpZ25fYWNjZXNzKGRvbWlkLAorCQkJCQlwZm5fdG9fbWZuKHBhZ2VfdG9fcGZuKHBh Z2VzW2ldKSksCisJCQkJCXRydWUgLyogcmVhZCBvbmx5ICovKTsKKwkJaWYgKGx2bDJfdGFibGVb aV0gPT0gLUVOT1NQQykgeworCQkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAorCQkJCSJObyBt b3JlIHNwYWNlIGxlZnQgaW4gZ3JhbnQgdGFibGVcbiIpOworCisJCQkvKiBVbnNoYXJlIGFsbCBh bHJlYWR5IHNoYXJlZCBwYWdlcyBmb3IgbHZsMiAqLworCQkJd2hpbGUgKGktLSkgeworCQkJCWdu dHRhYl9lbmRfZm9yZWlnbl9hY2Nlc3NfcmVmKGx2bDJfdGFibGVbaV0sIDApOworCQkJCWdudHRh Yl9mcmVlX2dyYW50X3JlZmVyZW5jZShsdmwyX3RhYmxlW2ldKTsKKwkJCX0KKwkJCWdvdG8gZXJy X2NsZWFudXA7CisJCX0KKwl9CisKKwkvKiBTaGFyZSAybmQgbGV2ZWwgYWRkcmVzc2luZyBwYWdl cyBpbiByZWFkb25seSBtb2RlKi8KKwlmb3IgKGkgPSAwOyBpIDwgbl9sdmwyX2dyZWZzOyBpKysp IHsKKwkJbHZsM190YWJsZVtpXSA9IGdudHRhYl9ncmFudF9mb3JlaWduX2FjY2Vzcyhkb21pZCwK KwkJCQkJdmlydF90b19tZm4oCisJCQkJCSh1bnNpZ25lZCBsb25nKWx2bDJfdGFibGUraSpQQUdF X1NJWkUpLAorCQkJCQl0cnVlKTsKKworCQlpZiAobHZsM190YWJsZVtpXSA9PSAtRU5PU1BDKSB7 CisJCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCisJCQkJIk5vIG1vcmUgc3BhY2UgbGVmdCBp biBncmFudCB0YWJsZVxuIik7CisKKwkJCS8qIFVuc2hhcmUgYWxsIGFscmVhZHkgc2hhcmVkIHBh Z2VzIGZvciBsdmwzICovCisJCQl3aGlsZSAoaS0tKSB7CisJCQkJZ250dGFiX2VuZF9mb3JlaWdu X2FjY2Vzc19yZWYobHZsM190YWJsZVtpXSwgMSk7CisJCQkJZ250dGFiX2ZyZWVfZ3JhbnRfcmVm ZXJlbmNlKGx2bDNfdGFibGVbaV0pOworCQkJfQorCisJCQkvKiBVbnNoYXJlIGFsbCBwYWdlcyBm b3IgbHZsMiAqLworCQkJd2hpbGUgKG5lbnRzLS0pIHsKKwkJCQlnbnR0YWJfZW5kX2ZvcmVpZ25f YWNjZXNzX3JlZigKKwkJCQkJCQlsdmwyX3RhYmxlW25lbnRzXSwgMCk7CisJCQkJZ250dGFiX2Zy ZWVfZ3JhbnRfcmVmZXJlbmNlKGx2bDJfdGFibGVbbmVudHNdKTsKKwkJCX0KKworCQkJZ290byBl cnJfY2xlYW51cDsKKwkJfQorCX0KKworCS8qIFNoYXJlIGx2bDNfdGFibGUgaW4gcmVhZG9ubHkg bW9kZSovCisJbHZsM19ncmVmID0gZ250dGFiX2dyYW50X2ZvcmVpZ25fYWNjZXNzKGRvbWlkLAor CQkJdmlydF90b19tZm4oKHVuc2lnbmVkIGxvbmcpbHZsM190YWJsZSksCisJCQl0cnVlKTsKKwor CWlmIChsdmwzX2dyZWYgPT0gLUVOT1NQQykgeworCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYs CisJCQkiTm8gbW9yZSBzcGFjZSBsZWZ0IGluIGdyYW50IHRhYmxlXG4iKTsKKworCQkvKiBVbnNo YXJlIGFsbCBwYWdlcyBmb3IgbHZsMyAqLworCQl3aGlsZSAoaS0tKSB7CisJCQlnbnR0YWJfZW5k X2ZvcmVpZ25fYWNjZXNzX3JlZihsdmwzX3RhYmxlW2ldLCAxKTsKKwkJCWdudHRhYl9mcmVlX2dy YW50X3JlZmVyZW5jZShsdmwzX3RhYmxlW2ldKTsKKwkJfQorCisJCS8qIFVuc2hhcmUgYWxsIHBh Z2VzIGZvciBsdmwyICovCisJCXdoaWxlIChuZW50cy0tKSB7CisJCQlnbnR0YWJfZW5kX2ZvcmVp Z25fYWNjZXNzX3JlZihsdmwyX3RhYmxlW25lbnRzXSwgMCk7CisJCQlnbnR0YWJfZnJlZV9ncmFu dF9yZWZlcmVuY2UobHZsMl90YWJsZVtuZW50c10pOworCQl9CisKKwkJZ290byBlcnJfY2xlYW51 cDsKKwl9CisKKwkvKiBTdG9yZSBsdmwzX3RhYmxlIHBhZ2UgdG8gYmUgZnJlZWQgbGF0ZXIgKi8K KwlzaF9wYWdlc19pbmZvLT5sdmwzX3RhYmxlID0gbHZsM190YWJsZTsKKworCS8qIFN0b3JlIGx2 bDJfdGFibGUgcGFnZXMgdG8gYmUgZnJlZWQgbGF0ZXIgKi8KKwlzaF9wYWdlc19pbmZvLT5sdmwy X3RhYmxlID0gbHZsMl90YWJsZTsKKworCisJLyogU3RvcmUgZXhwb3J0ZWQgcGFnZXMgcmVmaWQg dG8gYmUgdW5zaGFyZWQgbGF0ZXIgKi8KKwlzaF9wYWdlc19pbmZvLT5sdmwzX2dyZWYgPSBsdmwz X2dyZWY7CisKKwlkZXZfZGJnKGh5X2Rydl9wcml2LT5kZXYsICIlcyBleGl0XG4iLCBfX2Z1bmNf Xyk7CisJcmV0dXJuIGx2bDNfZ3JlZjsKKworZXJyX2NsZWFudXA6CisJZnJlZV9wYWdlcygodW5z aWduZWQgbG9uZylsdmwyX3RhYmxlLCBuX2x2bDJfZ3JlZnMpOworCWZyZWVfcGFnZXMoKHVuc2ln bmVkIGxvbmcpbHZsM190YWJsZSwgMSk7CisKKwlyZXR1cm4gLUVOT1NQQzsKK30KKworaW50IHhl bl9iZV91bnNoYXJlX3BhZ2VzKHZvaWQgKipyZWZzX2luZm8sIGludCBuZW50cykKK3sKKwlzdHJ1 Y3QgeGVuX3NoYXJlZF9wYWdlc19pbmZvICpzaF9wYWdlc19pbmZvOworCWludCBuX2x2bDJfZ3Jl ZnMgPSAobmVudHMvUkVGU19QRVJfUEFHRSArCisJCQkgICAgKChuZW50cyAlIFJFRlNfUEVSX1BB R0UpID8gMSA6IDApKTsKKwlpbnQgaTsKKworCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwgIiVz IGVudHJ5XG4iLCBfX2Z1bmNfXyk7CisJc2hfcGFnZXNfaW5mbyA9IChzdHJ1Y3QgeGVuX3NoYXJl ZF9wYWdlc19pbmZvICopKCpyZWZzX2luZm8pOworCisJaWYgKHNoX3BhZ2VzX2luZm8tPmx2bDNf dGFibGUgPT0gTlVMTCB8fAorCSAgICBzaF9wYWdlc19pbmZvLT5sdmwyX3RhYmxlID09ICBOVUxM IHx8CisJICAgIHNoX3BhZ2VzX2luZm8tPmx2bDNfZ3JlZiA9PSAtMSkgeworCQlkZXZfd2Fybiho eV9kcnZfcHJpdi0+ZGV2LAorCQkJICJncmVmIHRhYmxlIGZvciBoeXBlcl9kbWFidWYgYWxyZWFk eSBjbGVhbmVkIHVwXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogRW5kIGZvcmVpZ24gYWNj ZXNzIGZvciBkYXRhIHBhZ2VzLCBidXQgZG8gbm90IGZyZWUgdGhlbSAqLworCWZvciAoaSA9IDA7 IGkgPCBuZW50czsgaSsrKSB7CisJCWlmIChnbnR0YWJfcXVlcnlfZm9yZWlnbl9hY2Nlc3Moc2hf cGFnZXNfaW5mby0+bHZsMl90YWJsZVtpXSkpCisJCQlkZXZfd2FybihoeV9kcnZfcHJpdi0+ZGV2 LCAicmVmaWQgbm90IHNoYXJlZCAhIVxuIik7CisKKwkJZ250dGFiX2VuZF9mb3JlaWduX2FjY2Vz c19yZWYoc2hfcGFnZXNfaW5mby0+bHZsMl90YWJsZVtpXSwgMCk7CisJCWdudHRhYl9mcmVlX2dy YW50X3JlZmVyZW5jZShzaF9wYWdlc19pbmZvLT5sdmwyX3RhYmxlW2ldKTsKKwl9CisKKwkvKiBF bmQgZm9yZWlnbiBhY2Nlc3MgZm9yIDJuZCBsZXZlbCBhZGRyZXNzaW5nIHBhZ2VzICovCisJZm9y IChpID0gMDsgaSA8IG5fbHZsMl9ncmVmczsgaSsrKSB7CisJCWlmIChnbnR0YWJfcXVlcnlfZm9y ZWlnbl9hY2Nlc3Moc2hfcGFnZXNfaW5mby0+bHZsM190YWJsZVtpXSkpCisJCQlkZXZfd2Fybiho eV9kcnZfcHJpdi0+ZGV2LCAicmVmaWQgbm90IHNoYXJlZCAhIVxuIik7CisKKwkJaWYgKCFnbnR0 YWJfZW5kX2ZvcmVpZ25fYWNjZXNzX3JlZigKKwkJCQkJc2hfcGFnZXNfaW5mby0+bHZsM190YWJs ZVtpXSwgMSkpCisJCQlkZXZfd2FybihoeV9kcnZfcHJpdi0+ZGV2LCAicmVmaWQgc3RpbGwgaW4g dXNlISEhXG4iKTsKKworCQlnbnR0YWJfZnJlZV9ncmFudF9yZWZlcmVuY2Uoc2hfcGFnZXNfaW5m by0+bHZsM190YWJsZVtpXSk7CisJfQorCisJLyogRW5kIGZvcmVpZ24gYWNjZXNzIGZvciB0b3Ag bGV2ZWwgYWRkcmVzc2luZyBwYWdlICovCisJaWYgKGdudHRhYl9xdWVyeV9mb3JlaWduX2FjY2Vz cyhzaF9wYWdlc19pbmZvLT5sdmwzX2dyZWYpKQorCQlkZXZfd2FybihoeV9kcnZfcHJpdi0+ZGV2 LCAiZ3JlZiBub3Qgc2hhcmVkICEhXG4iKTsKKworCWdudHRhYl9lbmRfZm9yZWlnbl9hY2Nlc3Nf cmVmKHNoX3BhZ2VzX2luZm8tPmx2bDNfZ3JlZiwgMSk7CisJZ250dGFiX2ZyZWVfZ3JhbnRfcmVm ZXJlbmNlKHNoX3BhZ2VzX2luZm8tPmx2bDNfZ3JlZik7CisKKwkvKiBmcmVlaW5nIGFsbCBwYWdl cyB1c2VkIGZvciAyIGxldmVsIGFkZHJlc3NpbmcgKi8KKwlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBs b25nKXNoX3BhZ2VzX2luZm8tPmx2bDJfdGFibGUsIG5fbHZsMl9ncmVmcyk7CisJZnJlZV9wYWdl cygodW5zaWduZWQgbG9uZylzaF9wYWdlc19pbmZvLT5sdmwzX3RhYmxlLCAxKTsKKworCXNoX3Bh Z2VzX2luZm8tPmx2bDNfZ3JlZiA9IC0xOworCXNoX3BhZ2VzX2luZm8tPmx2bDJfdGFibGUgPSBO VUxMOworCXNoX3BhZ2VzX2luZm8tPmx2bDNfdGFibGUgPSBOVUxMOworCWtmcmVlKHNoX3BhZ2Vz X2luZm8pOworCXNoX3BhZ2VzX2luZm8gPSBOVUxMOworCisJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ ZGV2LCAiJXMgZXhpdFxuIiwgX19mdW5jX18pOworCXJldHVybiAwOworfQorCisvKiBNYXBzIHBy b3ZpZGVkIHRvcCBsZXZlbCByZWYgaWQgYW5kIHRoZW4gcmV0dXJuIGFycmF5IG9mIHBhZ2VzCisg KiBjb250YWluaW5nIGRhdGEgcmVmcy4KKyAqLworc3RydWN0IHBhZ2UgKip4ZW5fYmVfbWFwX3No YXJlZF9wYWdlcyh1bnNpZ25lZCBsb25nIGx2bDNfZ3JlZiwgaW50IGRvbWlkLAorCQkJCSAgICAg IGludCBuZW50cywgdm9pZCAqKnJlZnNfaW5mbykKK3sKKwlzdHJ1Y3QgcGFnZSAqbHZsM190YWJs ZV9wYWdlOworCXN0cnVjdCBwYWdlICoqbHZsMl90YWJsZV9wYWdlczsKKwlzdHJ1Y3QgcGFnZSAq KmRhdGFfcGFnZXM7CisJc3RydWN0IHhlbl9zaGFyZWRfcGFnZXNfaW5mbyAqc2hfcGFnZXNfaW5m bzsKKworCWdyYW50X3JlZl90ICpsdmwzX3RhYmxlOworCWdyYW50X3JlZl90ICpsdmwyX3RhYmxl OworCisJc3RydWN0IGdudHRhYl9tYXBfZ3JhbnRfcmVmIGx2bDNfbWFwX29wczsKKwlzdHJ1Y3Qg Z250dGFiX3VubWFwX2dyYW50X3JlZiBsdmwzX3VubWFwX29wczsKKworCXN0cnVjdCBnbnR0YWJf bWFwX2dyYW50X3JlZiAqbHZsMl9tYXBfb3BzOworCXN0cnVjdCBnbnR0YWJfdW5tYXBfZ3JhbnRf cmVmICpsdmwyX3VubWFwX29wczsKKworCXN0cnVjdCBnbnR0YWJfbWFwX2dyYW50X3JlZiAqZGF0 YV9tYXBfb3BzOworCXN0cnVjdCBnbnR0YWJfdW5tYXBfZ3JhbnRfcmVmICpkYXRhX3VubWFwX29w czsKKworCS8qICMgb2YgZ3JlZnMgaW4gdGhlIGxhc3QgcGFnZSBvZiBsdmwyIHRhYmxlICovCisJ aW50IG5lbnRzX2xhc3QgPSAobmVudHMgLSAxKSAlIFJFRlNfUEVSX1BBR0UgKyAxOworCWludCBu X2x2bDJfZ3JlZnMgPSAobmVudHMgLyBSRUZTX1BFUl9QQUdFKSArCisJCQkgICAoKG5lbnRzX2xh c3QgPiAwKSA/IDEgOiAwKSAtCisJCQkgICAobmVudHNfbGFzdCA9PSBSRUZTX1BFUl9QQUdFKTsK KwlpbnQgaSwgaiwgazsKKworCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwgIiVzIGVudHJ5XG4i LCBfX2Z1bmNfXyk7CisKKwlzaF9wYWdlc19pbmZvID0ga21hbGxvYyhzaXplb2YoKnNoX3BhZ2Vz X2luZm8pLCBHRlBfS0VSTkVMKTsKKwkqcmVmc19pbmZvID0gKHZvaWQgKikgc2hfcGFnZXNfaW5m bzsKKworCWx2bDJfdGFibGVfcGFnZXMgPSBrY2FsbG9jKG5fbHZsMl9ncmVmcywgc2l6ZW9mKHN0 cnVjdCBwYWdlICopLAorCQkJCSAgIEdGUF9LRVJORUwpOworCisJZGF0YV9wYWdlcyA9IGtjYWxs b2MobmVudHMsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX0tFUk5FTCk7CisKKwlsdmwyX21h cF9vcHMgPSBrY2FsbG9jKG5fbHZsMl9ncmVmcywgc2l6ZW9mKCpsdmwyX21hcF9vcHMpLAorCQkJ ICAgICAgIEdGUF9LRVJORUwpOworCisJbHZsMl91bm1hcF9vcHMgPSBrY2FsbG9jKG5fbHZsMl9n cmVmcywgc2l6ZW9mKCpsdmwyX3VubWFwX29wcyksCisJCQkJIEdGUF9LRVJORUwpOworCisJZGF0 YV9tYXBfb3BzID0ga2NhbGxvYyhuZW50cywgc2l6ZW9mKCpkYXRhX21hcF9vcHMpLCBHRlBfS0VS TkVMKTsKKwlkYXRhX3VubWFwX29wcyA9IGtjYWxsb2MobmVudHMsIHNpemVvZigqZGF0YV91bm1h cF9vcHMpLCBHRlBfS0VSTkVMKTsKKworCS8qIE1hcCB0b3AgbGV2ZWwgYWRkcmVzc2luZyBwYWdl ICovCisJaWYgKGdudHRhYl9hbGxvY19wYWdlcygxLCAmbHZsM190YWJsZV9wYWdlKSkgeworCQlk ZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsICJDYW5ub3QgYWxsb2NhdGUgcGFnZXNcbiIpOworCQly ZXR1cm4gTlVMTDsKKwl9CisKKwlsdmwzX3RhYmxlID0gKGdyYW50X3JlZl90ICopcGZuX3RvX2th ZGRyKHBhZ2VfdG9fcGZuKGx2bDNfdGFibGVfcGFnZSkpOworCisJZ250dGFiX3NldF9tYXBfb3Ao Jmx2bDNfbWFwX29wcywgKHVuc2lnbmVkIGxvbmcpbHZsM190YWJsZSwKKwkJCSAgR05UTUFQX2hv c3RfbWFwIHwgR05UTUFQX3JlYWRvbmx5LAorCQkJICAoZ3JhbnRfcmVmX3QpbHZsM19ncmVmLCBk b21pZCk7CisKKwlnbnR0YWJfc2V0X3VubWFwX29wKCZsdmwzX3VubWFwX29wcywgKHVuc2lnbmVk IGxvbmcpbHZsM190YWJsZSwKKwkJCSAgICBHTlRNQVBfaG9zdF9tYXAgfCBHTlRNQVBfcmVhZG9u bHksIC0xKTsKKworCWlmIChnbnR0YWJfbWFwX3JlZnMoJmx2bDNfbWFwX29wcywgTlVMTCwgJmx2 bDNfdGFibGVfcGFnZSwgMSkpIHsKKwkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAorCQkJIkhZ UEVSVklTT1IgbWFwIGdyYW50IHJlZiBmYWlsZWQiKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJ aWYgKGx2bDNfbWFwX29wcy5zdGF0dXMpIHsKKwkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAor CQkJIkhZUEVSVklTT1IgbWFwIGdyYW50IHJlZiBmYWlsZWQgc3RhdHVzID0gJWQiLAorCQkJbHZs M19tYXBfb3BzLnN0YXR1cyk7CisKKwkJZ290byBlcnJvcl9jbGVhbnVwX2x2bDM7CisJfSBlbHNl IHsKKwkJbHZsM191bm1hcF9vcHMuaGFuZGxlID0gbHZsM19tYXBfb3BzLmhhbmRsZTsKKwl9CisK KwkvKiBNYXAgYWxsIHNlY29uZCBsZXZlbCBwYWdlcyAqLworCWlmIChnbnR0YWJfYWxsb2NfcGFn ZXMobl9sdmwyX2dyZWZzLCBsdmwyX3RhYmxlX3BhZ2VzKSkgeworCQlkZXZfZXJyKGh5X2Rydl9w cml2LT5kZXYsICJDYW5ub3QgYWxsb2NhdGUgcGFnZXNcbiIpOworCQlnb3RvIGVycm9yX2NsZWFu dXBfbHZsMzsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbl9sdmwyX2dyZWZzOyBpKyspIHsKKwkJ bHZsMl90YWJsZSA9IChncmFudF9yZWZfdCAqKXBmbl90b19rYWRkcigKKwkJCQkJcGFnZV90b19w Zm4obHZsMl90YWJsZV9wYWdlc1tpXSkpOworCQlnbnR0YWJfc2V0X21hcF9vcCgmbHZsMl9tYXBf b3BzW2ldLAorCQkJCSAgKHVuc2lnbmVkIGxvbmcpbHZsMl90YWJsZSwgR05UTUFQX2hvc3RfbWFw IHwKKwkJCQkgIEdOVE1BUF9yZWFkb25seSwKKwkJCQkgIGx2bDNfdGFibGVbaV0sIGRvbWlkKTsK KwkJZ250dGFiX3NldF91bm1hcF9vcCgmbHZsMl91bm1hcF9vcHNbaV0sCisJCQkJICAgICh1bnNp Z25lZCBsb25nKWx2bDJfdGFibGUsIEdOVE1BUF9ob3N0X21hcCB8CisJCQkJICAgIEdOVE1BUF9y ZWFkb25seSwgLTEpOworCX0KKworCS8qIFVubWFwIHRvcCBsZXZlbCBwYWdlLCBhcyBpdCB3b24n dCBiZSBuZWVkZWQgYW55IGxvbmdlciAqLworCWlmIChnbnR0YWJfdW5tYXBfcmVmcygmbHZsM191 bm1hcF9vcHMsIE5VTEwsCisJCQkgICAgICAmbHZsM190YWJsZV9wYWdlLCAxKSkgeworCQlkZXZf ZXJyKGh5X2Rydl9wcml2LT5kZXYsCisJCQkieGVuOiBjYW5ub3QgdW5tYXAgdG9wIGxldmVsIHBh Z2VcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBNYXJrIHRoYXQgcGFnZSB3YXMgdW5t YXBwZWQgKi8KKwlsdmwzX3VubWFwX29wcy5oYW5kbGUgPSAtMTsKKworCWlmIChnbnR0YWJfbWFw X3JlZnMobHZsMl9tYXBfb3BzLCBOVUxMLAorCQkJICAgIGx2bDJfdGFibGVfcGFnZXMsIG5fbHZs Ml9ncmVmcykpIHsKKwkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAorCQkJIkhZUEVSVklTT1Ig bWFwIGdyYW50IHJlZiBmYWlsZWQiKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogQ2hlY2tz IGlmIHBhZ2VzIHdlcmUgbWFwcGVkIGNvcnJlY3RseSAqLworCWZvciAoaSA9IDA7IGkgPCBuX2x2 bDJfZ3JlZnM7IGkrKykgeworCQlpZiAobHZsMl9tYXBfb3BzW2ldLnN0YXR1cykgeworCQkJZGV2 X2VycihoeV9kcnZfcHJpdi0+ZGV2LAorCQkJCSJIWVBFUlZJU09SIG1hcCBncmFudCByZWYgZmFp bGVkIHN0YXR1cyA9ICVkIiwKKwkJCQlsdmwyX21hcF9vcHNbaV0uc3RhdHVzKTsKKwkJCWdvdG8g ZXJyb3JfY2xlYW51cF9sdmwyOworCQl9IGVsc2UgeworCQkJbHZsMl91bm1hcF9vcHNbaV0uaGFu ZGxlID0gbHZsMl9tYXBfb3BzW2ldLmhhbmRsZTsKKwkJfQorCX0KKworCWlmIChnbnR0YWJfYWxs b2NfcGFnZXMobmVudHMsIGRhdGFfcGFnZXMpKSB7CisJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRl diwKKwkJCSJDYW5ub3QgYWxsb2NhdGUgcGFnZXNcbiIpOworCQlnb3RvIGVycm9yX2NsZWFudXBf bHZsMjsKKwl9CisKKwlrID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBuX2x2bDJfZ3JlZnMgLSAx OyBpKyspIHsKKwkJbHZsMl90YWJsZSA9IHBmbl90b19rYWRkcihwYWdlX3RvX3BmbihsdmwyX3Rh YmxlX3BhZ2VzW2ldKSk7CisJCWZvciAoaiA9IDA7IGogPCBSRUZTX1BFUl9QQUdFOyBqKyspIHsK KwkJCWdudHRhYl9zZXRfbWFwX29wKCZkYXRhX21hcF9vcHNba10sCisJCQkJKHVuc2lnbmVkIGxv bmcpcGZuX3RvX2thZGRyKAorCQkJCQkJcGFnZV90b19wZm4oZGF0YV9wYWdlc1trXSkpLAorCQkJ CUdOVE1BUF9ob3N0X21hcCB8IEdOVE1BUF9yZWFkb25seSwKKwkJCQlsdmwyX3RhYmxlW2pdLCBk b21pZCk7CisKKwkJCWdudHRhYl9zZXRfdW5tYXBfb3AoJmRhdGFfdW5tYXBfb3BzW2tdLAorCQkJ CSh1bnNpZ25lZCBsb25nKXBmbl90b19rYWRkcigKKwkJCQkJCXBhZ2VfdG9fcGZuKGRhdGFfcGFn ZXNba10pKSwKKwkJCQlHTlRNQVBfaG9zdF9tYXAgfCBHTlRNQVBfcmVhZG9ubHksIC0xKTsKKwkJ CWsrKzsKKwkJfQorCX0KKworCS8qIGZvciBncmVmcyBpbiB0aGUgbGFzdCBsdmwyIHRhYmxlIHBh Z2UgKi8KKwlsdmwyX3RhYmxlID0gcGZuX3RvX2thZGRyKHBhZ2VfdG9fcGZuKAorCQkJCWx2bDJf dGFibGVfcGFnZXNbbl9sdmwyX2dyZWZzIC0gMV0pKTsKKworCWZvciAoaiA9IDA7IGogPCBuZW50 c19sYXN0OyBqKyspIHsKKwkJZ250dGFiX3NldF9tYXBfb3AoJmRhdGFfbWFwX29wc1trXSwKKwkJ CSh1bnNpZ25lZCBsb25nKXBmbl90b19rYWRkcihwYWdlX3RvX3BmbihkYXRhX3BhZ2VzW2tdKSks CisJCQlHTlRNQVBfaG9zdF9tYXAgfCBHTlRNQVBfcmVhZG9ubHksCisJCQlsdmwyX3RhYmxlW2pd LCBkb21pZCk7CisKKwkJZ250dGFiX3NldF91bm1hcF9vcCgmZGF0YV91bm1hcF9vcHNba10sCisJ CQkodW5zaWduZWQgbG9uZylwZm5fdG9fa2FkZHIocGFnZV90b19wZm4oZGF0YV9wYWdlc1trXSkp LAorCQkJR05UTUFQX2hvc3RfbWFwIHwgR05UTUFQX3JlYWRvbmx5LCAtMSk7CisJCWsrKzsKKwl9 CisKKwlpZiAoZ250dGFiX21hcF9yZWZzKGRhdGFfbWFwX29wcywgTlVMTCwKKwkJCSAgICBkYXRh X3BhZ2VzLCBuZW50cykpIHsKKwkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAorCQkJIkhZUEVS VklTT1IgbWFwIGdyYW50IHJlZiBmYWlsZWRcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkv KiB1bm1hcHBpbmcgbHZsMiB0YWJsZSBwYWdlcyAqLworCWlmIChnbnR0YWJfdW5tYXBfcmVmcyhs dmwyX3VubWFwX29wcywKKwkJCSAgICAgIE5VTEwsIGx2bDJfdGFibGVfcGFnZXMsCisJCQkgICAg ICBuX2x2bDJfZ3JlZnMpKSB7CisJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCSJDYW5u b3QgdW5tYXAgMm5kIGxldmVsIHJlZnNcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBN YXJrIHRoYXQgcGFnZXMgd2VyZSB1bm1hcHBlZCAqLworCWZvciAoaSA9IDA7IGkgPCBuX2x2bDJf Z3JlZnM7IGkrKykKKwkJbHZsMl91bm1hcF9vcHNbaV0uaGFuZGxlID0gLTE7CisKKwlmb3IgKGkg PSAwOyBpIDwgbmVudHM7IGkrKykgeworCQlpZiAoZGF0YV9tYXBfb3BzW2ldLnN0YXR1cykgewor CQkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAorCQkJCSJIWVBFUlZJU09SIG1hcCBncmFudCBy ZWYgZmFpbGVkIHN0YXR1cyA9ICVkXG4iLAorCQkJCWRhdGFfbWFwX29wc1tpXS5zdGF0dXMpOwor CQkJZ290byBlcnJvcl9jbGVhbnVwX2RhdGE7CisJCX0gZWxzZSB7CisJCQlkYXRhX3VubWFwX29w c1tpXS5oYW5kbGUgPSBkYXRhX21hcF9vcHNbaV0uaGFuZGxlOworCQl9CisJfQorCisJLyogc3Rv cmUgdGhlc2UgcmVmZXJlbmNlcyBmb3IgdW5tYXBwaW5nIGluIHRoZSBmdXR1cmUgKi8KKwlzaF9w YWdlc19pbmZvLT51bm1hcF9vcHMgPSBkYXRhX3VubWFwX29wczsKKwlzaF9wYWdlc19pbmZvLT5k YXRhX3BhZ2VzID0gZGF0YV9wYWdlczsKKworCWdudHRhYl9mcmVlX3BhZ2VzKDEsICZsdmwzX3Rh YmxlX3BhZ2UpOworCWdudHRhYl9mcmVlX3BhZ2VzKG5fbHZsMl9ncmVmcywgbHZsMl90YWJsZV9w YWdlcyk7CisJa2ZyZWUobHZsMl90YWJsZV9wYWdlcyk7CisJa2ZyZWUobHZsMl9tYXBfb3BzKTsK KwlrZnJlZShsdmwyX3VubWFwX29wcyk7CisJa2ZyZWUoZGF0YV9tYXBfb3BzKTsKKworCWRldl9k YmcoaHlfZHJ2X3ByaXYtPmRldiwgIiVzIGV4aXRcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gZGF0 YV9wYWdlczsKKworZXJyb3JfY2xlYW51cF9kYXRhOgorCWdudHRhYl91bm1hcF9yZWZzKGRhdGFf dW5tYXBfb3BzLCBOVUxMLCBkYXRhX3BhZ2VzLAorCQkJICBuZW50cyk7CisKKwlnbnR0YWJfZnJl ZV9wYWdlcyhuZW50cywgZGF0YV9wYWdlcyk7CisKK2Vycm9yX2NsZWFudXBfbHZsMjoKKwlpZiAo bHZsMl91bm1hcF9vcHNbMF0uaGFuZGxlICE9IC0xKQorCQlnbnR0YWJfdW5tYXBfcmVmcyhsdmwy X3VubWFwX29wcywgTlVMTCwKKwkJCQkgIGx2bDJfdGFibGVfcGFnZXMsIG5fbHZsMl9ncmVmcyk7 CisJZ250dGFiX2ZyZWVfcGFnZXMobl9sdmwyX2dyZWZzLCBsdmwyX3RhYmxlX3BhZ2VzKTsKKwor ZXJyb3JfY2xlYW51cF9sdmwzOgorCWlmIChsdmwzX3VubWFwX29wcy5oYW5kbGUgIT0gLTEpCisJ CWdudHRhYl91bm1hcF9yZWZzKCZsdmwzX3VubWFwX29wcywgTlVMTCwKKwkJCQkgICZsdmwzX3Rh YmxlX3BhZ2UsIDEpOworCWdudHRhYl9mcmVlX3BhZ2VzKDEsICZsdmwzX3RhYmxlX3BhZ2UpOwor CisJa2ZyZWUobHZsMl90YWJsZV9wYWdlcyk7CisJa2ZyZWUobHZsMl9tYXBfb3BzKTsKKwlrZnJl ZShsdmwyX3VubWFwX29wcyk7CisJa2ZyZWUoZGF0YV9tYXBfb3BzKTsKKworCisJcmV0dXJuIE5V TEw7Cit9CisKK2ludCB4ZW5fYmVfdW5tYXBfc2hhcmVkX3BhZ2VzKHZvaWQgKipyZWZzX2luZm8s IGludCBuZW50cykKK3sKKwlzdHJ1Y3QgeGVuX3NoYXJlZF9wYWdlc19pbmZvICpzaF9wYWdlc19p bmZvOworCisJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LCAiJXMgZW50cnlcbiIsIF9fZnVuY19f KTsKKworCXNoX3BhZ2VzX2luZm8gPSAoc3RydWN0IHhlbl9zaGFyZWRfcGFnZXNfaW5mbyAqKSgq cmVmc19pbmZvKTsKKworCWlmIChzaF9wYWdlc19pbmZvLT51bm1hcF9vcHMgPT0gTlVMTCB8fAor CSAgICBzaF9wYWdlc19pbmZvLT5kYXRhX3BhZ2VzID09IE5VTEwpIHsKKwkJZGV2X3dhcm4oaHlf ZHJ2X3ByaXYtPmRldiwKKwkJCSAicGFnZXMgYWxyZWFkeSBjbGVhbmVkIHVwIG9yIGJ1ZmZlciBu b3QgaW1wb3J0ZWQgeWV0XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGdudHRhYl91bm1h cF9yZWZzKHNoX3BhZ2VzX2luZm8tPnVubWFwX29wcywgTlVMTCwKKwkJCSAgICAgIHNoX3BhZ2Vz X2luZm8tPmRhdGFfcGFnZXMsIG5lbnRzKSkgeworCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYs ICJDYW5ub3QgdW5tYXAgZGF0YSBwYWdlc1xuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwor CWdudHRhYl9mcmVlX3BhZ2VzKG5lbnRzLCBzaF9wYWdlc19pbmZvLT5kYXRhX3BhZ2VzKTsKKwor CWtmcmVlKHNoX3BhZ2VzX2luZm8tPmRhdGFfcGFnZXMpOworCWtmcmVlKHNoX3BhZ2VzX2luZm8t PnVubWFwX29wcyk7CisJc2hfcGFnZXNfaW5mby0+dW5tYXBfb3BzID0gTlVMTDsKKwlzaF9wYWdl c19pbmZvLT5kYXRhX3BhZ2VzID0gTlVMTDsKKwlrZnJlZShzaF9wYWdlc19pbmZvKTsKKwlzaF9w YWdlc19pbmZvID0gTlVMTDsKKworCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwgIiVzIGV4aXRc biIsIF9fZnVuY19fKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1 Zi9oeXBlcl9kbWFidWYveGVuLWJhY2tlbmQvaHlwZXJfZG1hYnVmX3hlbl9zaG0uaCBiL2RyaXZl cnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYveGVuLWJhY2tlbmQvaHlwZXJfZG1hYnVmX3hlbl9zaG0u aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTIzNmI1Ci0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi94ZW4tYmFja2VuZC9oeXBlcl9k bWFidWZfeGVuX3NobS5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAx NyBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQs IGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRo aXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0 d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwg aW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHks IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQv b3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8g d2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp Y2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFy YWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv cnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJ REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAq IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E IE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBD T1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhF UgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBP UiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJ VEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBT T0ZUV0FSRS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0hZUEVSX0RNQUJVRl9YRU5fU0hNX0hfXwor I2RlZmluZSBfX0hZUEVSX0RNQUJVRl9YRU5fU0hNX0hfXworCisvKiBUaGlzIGNvbGxlY3RzIGFs bCByZWZlcmVuY2UgbnVtYmVycyBmb3IgMm5kIGxldmVsIHNoYXJlZCBwYWdlcyBhbmQKKyAqIGNy ZWF0ZSBhIHRhYmxlIHdpdGggdGhvc2UgaW4gMXN0IGxldmVsIHNoYXJlZCBwYWdlcyB0aGVuIHJl dHVybiByZWZlcmVuY2UKKyAqIG51bWJlcnMgZm9yIHRoaXMgdG9wIGxldmVsIHRhYmxlLgorICov CitpbnQgeGVuX2JlX3NoYXJlX3BhZ2VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBkb21pZCwg aW50IG5lbnRzLAorCQkgICAgdm9pZCAqKnJlZnNfaW5mbyk7CisKK2ludCB4ZW5fYmVfdW5zaGFy ZV9wYWdlcyh2b2lkICoqcmVmc19pbmZvLCBpbnQgbmVudHMpOworCisvKiBNYXBzIHByb3ZpZGVk IHRvcCBsZXZlbCByZWYgaWQgYW5kIHRoZW4gcmV0dXJuIGFycmF5IG9mIHBhZ2VzIGNvbnRhaW5p bmcKKyAqIGRhdGEgcmVmcy4KKyAqLworc3RydWN0IHBhZ2UgKip4ZW5fYmVfbWFwX3NoYXJlZF9w YWdlcyh1bnNpZ25lZCBsb25nIGx2bDNfZ3JlZiwgaW50IGRvbWlkLAorCQkJCSAgICAgIGludCBu ZW50cywKKwkJCQkgICAgICB2b2lkICoqcmVmc19pbmZvKTsKKworaW50IHhlbl9iZV91bm1hcF9z aGFyZWRfcGFnZXModm9pZCAqKnJlZnNfaW5mbywgaW50IG5lbnRzKTsKKworI2VuZGlmIC8qIF9f SFlQRVJfRE1BQlVGX1hFTl9TSE1fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9LY29u ZmlnIGIvZHJpdmVycy94ZW4vS2NvbmZpZwppbmRleCBiNTliMGUzLi42YWEzMDJkIDEwMDY0NAot LS0gYS9kcml2ZXJzL3hlbi9LY29uZmlnCisrKyBiL2RyaXZlcnMveGVuL0tjb25maWcKQEAgLTMy MSw2ICszMjEsNiBAQCBjb25maWcgWEVOX1NZTVMKIGNvbmZpZyBYRU5fSEFWRV9WUE1VCiAgICAg ICAgYm9vbAogCi1zb3VyY2UgImRyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9LY29uZmlnIgorc291 cmNlICJkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL0tjb25maWciCiAKIGVuZG1lbnUKZGlm ZiAtLWdpdCBhL2RyaXZlcnMveGVuL01ha2VmaWxlIGIvZHJpdmVycy94ZW4vTWFrZWZpbGUKaW5k ZXggYTZlMjUzYS4uZWRlNzA4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vTWFrZWZpbGUKKysr IGIvZHJpdmVycy94ZW4vTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBAIG9iai0kKENPTkZJR19YODYp CQkJKz0gZmFsbGJhY2subwogb2JqLXkJKz0gZ3JhbnQtdGFibGUubyBmZWF0dXJlcy5vIGJhbGxv b24ubyBtYW5hZ2UubyBwcmVlbXB0Lm8gdGltZS5vCiBvYmoteQkrPSBldmVudHMvCiBvYmoteQkr PSB4ZW5idXMvCi1vYmoteQkrPSBoeXBlcl9kbWFidWYvCitvYmoteQkrPSAuLi9kbWEtYnVmL2h5 cGVyX2RtYWJ1Zi8KIAogbm9zdGFja3AgOj0gJChjYWxsIGNjLW9wdGlvbiwgLWZuby1zdGFjay1w cm90ZWN0b3IpCiBDRkxBR1NfZmVhdHVyZXMubwkJCTo9ICQobm9zdGFja3ApCmRpZmYgLS1naXQg YS9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvS2NvbmZpZyBiL2RyaXZlcnMveGVuL2h5cGVyX2Rt YWJ1Zi9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWZjZDQ0Li4wMDAw MDAwCi0tLSBhL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9LY29uZmlnCisrKyAvZGV2L251bGwK QEAgLTEsNDIgKzAsMCBAQAotbWVudSAiaHlwZXJfZG1hYnVmIG9wdGlvbnMiCi0KLWNvbmZpZyBI WVBFUl9ETUFCVUYKLQl0cmlzdGF0ZSAiRW5hYmxlcyBoeXBlciBkbWFidWYgZHJpdmVyIgotCWRl ZmF1bHQgeQotCi1jb25maWcgSFlQRVJfRE1BQlVGX1hFTgotCWJvb2wgIkNvbmZpZ3VyZSBoeXBl cl9kbWFidWYgZm9yIFhFTiBoeXBlcnZpc29yIgotCWRlZmF1bHQgeQotCWRlcGVuZHMgb24gSFlQ RVJfRE1BQlVGCi0JaGVscAotCSAgQ29uZmlndXJpbmcgaHlwZXJfZG1hYnVmIGRyaXZlciBmb3Ig WEVOIGh5cGVydmlzb3IKLQotY29uZmlnIEhZUEVSX0RNQUJVRl9TWVNGUwotCWJvb2wgIkVuYWJs ZSBzeXNmcyBpbmZvcm1hdGlvbiBhYm91dCBoeXBlciBETUEgYnVmZmVycyIKLQlkZWZhdWx0IHkK LQlkZXBlbmRzIG9uIEhZUEVSX0RNQUJVRgotCWhlbHAKLQkgIEV4cG9zZSBpbmZvcm1hdGlvbiBh Ym91dCBpbXBvcnRlZCBhbmQgZXhwb3J0ZWQgYnVmZmVycyB1c2luZwotCSAgaHlwZXJfZG1hYnVm IGRyaXZlcgotCi1jb25maWcgSFlQRVJfRE1BQlVGX0VWRU5UX0dFTgotCWJvb2wgIkVuYWJsZSBl dmVudC1nZW5lcmF0aW9uIGFuZCBwb2xsaW5nIG9wZXJhdGlvbiIKLQlkZWZhdWx0IG4KLQlkZXBl bmRzIG9uIEhZUEVSX0RNQUJVRgotCWhlbHAKLQkgIFdpdGggdGhpcyBjb25maWcgZW5hYmxlZCwg aHlwZXJfZG1hYnVmIGRyaXZlciBvbiB0aGUgaW1wb3J0ZXIgc2lkZQotCSAgZ2VuZXJhdGVzIGV2 ZW50cyBhbmQgcXVldWUgdGhvc2UgdXAgaW4gdGhlIGV2ZW50IGxpc3Qgd2hlbmV2ZXIgYSBuZXcK LQkgIHNoYXJlZCBETUEtQlVGIGlzIGF2YWlsYWJsZS4gRXZlbnRzIGluIHRoZSBsaXN0IGNhbiBi ZSByZXRyaWV2ZWQgYnkKLQkgIHJlYWQgb3BlcmF0aW9uLgotCi1jb25maWcgSFlQRVJfRE1BQlVG X1hFTl9BVVRPX1JYX0NIX0FERAotCWJvb2wgIkVuYWJsZSBhdXRvbWF0aWMgcngtY2ggYWRkIHdp dGggMTAgc2VjcyBpbnRlcnZhbCIKLQlkZWZhdWx0IHkKLQlkZXBlbmRzIG9uIEhZUEVSX0RNQUJV RiAmJiBIWVBFUl9ETUFCVUZfWEVOCi0JaGVscAotCSAgSWYgZW5hYmxlZCwgZHJpdmVyIHJlYWRz IGEgbm9kZSBpbiB4ZW5zdG9yZSBldmVyeSAxMCBzZWNvbmRzCi0JICB0byBjaGVjayB3aGV0aGVy IHRoZXJlIGlzIGFueSB0eCBjb21tIGNoIGNvbmZpZ3VyZWQgYnkgYW5vdGhlcgotCSAgZG9tYWlu IHRoZW4gaW5pdGlhbGl6ZSBtYXRjaGVkIHJ4IGNvbW0gY2ggYXV0b21hdGljYWxseSBmb3IgYW55 Ci0JICBleGlzdGluZyB0eCBjb21tIGNocy4KLQotZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy94ZW4vaHlwZXJfZG1hYnVmL01ha2VmaWxlIGIvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL01h a2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTEzYmZjLi4wMDAwMDAwCi0t LSBhL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0x LDQ5ICswLDAgQEAKLVRBUkdFVF9NT0RVTEU6PWh5cGVyX2RtYWJ1ZgotCi1QTEFURk9STTo9WEVO Ci0KLSMgSWYgd2UgcnVubmluZyBieSBrZXJuZWwgYnVpbGRpbmcgc3lzdGVtCi1pZm5lcSAoJChL RVJORUxSRUxFQVNFKSwpCi0JJChUQVJHRVRfTU9EVUxFKS1vYmpzIDo9IGh5cGVyX2RtYWJ1Zl9k cnYubyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoeXBlcl9kbWFidWZfaW9j dGwubyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoeXBlcl9kbWFidWZfbGlz dC5vIFwKLQkJCQkgaHlwZXJfZG1hYnVmX3NnbF9wcm9jLm8gXAotCQkJCSBoeXBlcl9kbWFidWZf b3BzLm8gXAotCQkJCSBoeXBlcl9kbWFidWZfbXNnLm8gXAotCQkJCSBoeXBlcl9kbWFidWZfaWQu byBcCi0JCQkJIGh5cGVyX2RtYWJ1Zl9yZW1vdGVfc3luYy5vIFwKLQkJCQkgaHlwZXJfZG1hYnVm X3F1ZXJ5Lm8gXAotCi1pZmVxICgkKENPTkZJR19IWVBFUl9ETUFCVUZfRVZFTlRfR0VOKSwgeSkK LQkkKFRBUkdFVF9NT0RVTEUpLW9ianMgKz0gaHlwZXJfZG1hYnVmX2V2ZW50Lm8KLWVuZGlmCi0K LWlmZXEgKCQoQ09ORklHX0hZUEVSX0RNQUJVRl9YRU4pLCB5KQotCSQoVEFSR0VUX01PRFVMRSkt b2JqcyArPSB4ZW4vaHlwZXJfZG1hYnVmX3hlbl9jb21tLm8gXAotCQkJCSB4ZW4vaHlwZXJfZG1h YnVmX3hlbl9jb21tX2xpc3QubyBcCi0JCQkJIHhlbi9oeXBlcl9kbWFidWZfeGVuX3NobS5vIFwK LQkJCQkgeGVuL2h5cGVyX2RtYWJ1Zl94ZW5fZHJ2Lm8KLWVuZGlmCi0KLW9iai0kKENPTkZJR19I WVBFUl9ETUFCVUYpIDo9ICQoVEFSR0VUX01PRFVMRSkubwotCi0jIElmIHdlIGFyZSBydW5uaW5n IHdpdGhvdXQga2VybmVsIGJ1aWxkIHN5c3RlbQotZWxzZQotQlVJTERTWVNURU1fRElSPz0uLi8u Li8uLi8KLVBXRDo9JChzaGVsbCBwd2QpCi0KLWFsbCA6Ci0jIHJ1biBrZXJuZWwgYnVpbGQgc3lz dGVtIHRvIG1ha2UgbW9kdWxlCi0kKE1BS0UpIC1DICQoQlVJTERTWVNURU1fRElSKSBNPSQoUFdE KSBtb2R1bGVzCi0KLWNsZWFuOgotIyBydW4ga2VybmVsIGJ1aWxkIHN5c3RlbSB0byBjbGVhbnVw IGluIGN1cnJlbnQgZGlyZWN0b3J5Ci0kKE1BS0UpIC1DICQoQlVJTERTWVNURU1fRElSKSBNPSQo UFdEKSBjbGVhbgotCi1sb2FkOgotCWluc21vZCAuLyQoVEFSR0VUX01PRFVMRSkua28KLQotdW5s b2FkOgotCXJtbW9kIC4vJChUQVJHRVRfTU9EVUxFKS5rbwotCi1lbmRpZgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9kcnYuYyBiL2RyaXZlcnMveGVu L2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfZHJ2LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IGVlYWQ0YzAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5 cGVyX2RtYWJ1Zl9kcnYuYworKysgL2Rldi9udWxsCkBAIC0xLDQwOCArMCwwIEBACi0vKgotICog Q29weXJpZ2h0IMKpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBQZXJtaXNzaW9uIGlz IGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcg YQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g ZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdo dHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJs aWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBl cm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8g c28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92 ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcg dGhlIG5leHQKLSAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBv ciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKLSAqIFNvZnR3YXJlLgotICoKLSAqIFRIRSBT T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E LCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRI RSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICog VEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0s IERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCi0gKiBGUk9NLCBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJ TkdTCi0gKiBJTiBUSEUgU09GVFdBUkUuCi0gKgotICogQXV0aG9yczoKLSAqICAgIERvbmd3b24g S2ltIDxkb25nd29uLmtpbUBpbnRlbC5jb20+Ci0gKiAgICBNYXRldXN6IFBvbHJvbGEgPG1hdGV1 c3p4LnBvdHJvbGFAaW50ZWwuY29tPgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5o PgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2Uu aD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+ Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgot I2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+Ci0jaW5j bHVkZSAiaHlwZXJfZG1hYnVmX2Rydi5oIgotI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9pb2N0bC5o IgotI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9saXN0LmgiCi0jaW5jbHVkZSAiaHlwZXJfZG1hYnVm X2lkLmgiCi0jaW5jbHVkZSAiaHlwZXJfZG1hYnVmX2V2ZW50LmgiCi0KLSNpZmRlZiBDT05GSUdf SFlQRVJfRE1BQlVGX1hFTgotI2luY2x1ZGUgInhlbi9oeXBlcl9kbWFidWZfeGVuX2Rydi5oIgot I2VuZGlmCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0aW9uYWwgcmlnaHRzIik7Ci1N T0RVTEVfQVVUSE9SKCJJbnRlbCBDb3Jwb3JhdGlvbiIpOwotCi1zdHJ1Y3QgaHlwZXJfZG1hYnVm X3ByaXZhdGUgKmh5X2Rydl9wcml2OwotCi1zdGF0aWMgdm9pZCBmb3JjZV9mcmVlKHN0cnVjdCBl eHBvcnRlZF9zZ3RfaW5mbyAqZXhwb3J0ZWQsCi0JCSAgICAgICB2b2lkICphdHRyKQotewotCXN0 cnVjdCBpb2N0bF9oeXBlcl9kbWFidWZfdW5leHBvcnQgdW5leHBvcnRfYXR0cjsKLQlzdHJ1Y3Qg ZmlsZSAqZmlscCA9IChzdHJ1Y3QgZmlsZSAqKWF0dHI7Ci0KLQlpZiAoIWZpbHAgfHwgIWV4cG9y dGVkKQotCQlyZXR1cm47Ci0KLQlpZiAoZXhwb3J0ZWQtPmZpbHAgPT0gZmlscCkgewotCQlkZXZf ZGJnKGh5X2Rydl9wcml2LT5kZXYsCi0JCQkiRm9yY2VmdWxseSByZWxlYXNpbmcgYnVmZmVyIHtp ZDolZCBrZXk6JWQgJWQgJWR9XG4iLAotCQkJIGV4cG9ydGVkLT5oaWQuaWQsIGV4cG9ydGVkLT5o aWQucm5nX2tleVswXSwKLQkJCSBleHBvcnRlZC0+aGlkLnJuZ19rZXlbMV0sIGV4cG9ydGVkLT5o aWQucm5nX2tleVsyXSk7Ci0KLQkJdW5leHBvcnRfYXR0ci5oaWQgPSBleHBvcnRlZC0+aGlkOwot CQl1bmV4cG9ydF9hdHRyLmRlbGF5X21zID0gMDsKLQotCQloeXBlcl9kbWFidWZfdW5leHBvcnRf aW9jdGwoZmlscCwgJnVuZXhwb3J0X2F0dHIpOwotCX0KLX0KLQotc3RhdGljIGludCBoeXBlcl9k bWFidWZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQlp bnQgcmV0ID0gMDsKLQotCS8qIERvIG5vdCBhbGxvdyBleGNsdXNpdmUgb3BlbiAqLwotCWlmIChm aWxwLT5mX2ZsYWdzICYgT19FWENMKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JcmV0dXJuIHJldDsK LX0KLQotc3RhdGljIGludCBoeXBlcl9kbWFidWZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2Rl LCBzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQloeXBlcl9kbWFidWZfZm9yZWFjaF9leHBvcnRlZChm b3JjZV9mcmVlLCBmaWxwKTsKLQotCXJldHVybiAwOwotfQotCi0jaWZkZWYgQ09ORklHX0hZUEVS X0RNQUJVRl9FVkVOVF9HRU4KLQotc3RhdGljIHVuc2lnbmVkIGludCBoeXBlcl9kbWFidWZfZXZl bnRfcG9sbChzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJCQkgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0 cnVjdCAqd2FpdCkKLXsKLQlwb2xsX3dhaXQoZmlscCwgJmh5X2Rydl9wcml2LT5ldmVudF93YWl0 LCB3YWl0KTsKLQotCWlmICghbGlzdF9lbXB0eSgmaHlfZHJ2X3ByaXYtPmV2ZW50X2xpc3QpKQot CQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMg c3NpemVfdCBoeXBlcl9kbWFidWZfZXZlbnRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBf X3VzZXIgKmJ1ZmZlciwKLQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnNldCkKLXsKLQlpbnQg cmV0OwotCi0JLyogb25seSByb290IGNhbiByZWFkIGV2ZW50cyAqLwotCWlmICghY2FwYWJsZShD QVBfREFDX09WRVJSSURFKSkgewotCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCi0JCQkiT25s eSByb290IGNhbiByZWFkIGV2ZW50c1xuIik7Ci0JCXJldHVybiAtRVBFUk07Ci0JfQotCi0JLyog bWFrZSBzdXJlIHVzZXIgYnVmZmVyIGNhbiBiZSB3cml0dGVuICovCi0JaWYgKCFhY2Nlc3Nfb2so VkVSSUZZX1dSSVRFLCBidWZmZXIsIGNvdW50KSkgewotCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5k ZXYsCi0JCQkiVXNlciBidWZmZXIgY2FuJ3QgYmUgd3JpdHRlbi5cbiIpOwotCQlyZXR1cm4gLUVJ TlZBTDsKLQl9Ci0KLQlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmh5X2Rydl9wcml2 LT5ldmVudF9yZWFkX2xvY2spOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQl3aGlsZSAo MSkgewotCQlzdHJ1Y3QgaHlwZXJfZG1hYnVmX2V2ZW50ICplID0gTlVMTDsKLQotCQlzcGluX2xv Y2tfaXJxKCZoeV9kcnZfcHJpdi0+ZXZlbnRfbG9jayk7Ci0JCWlmICghbGlzdF9lbXB0eSgmaHlf ZHJ2X3ByaXYtPmV2ZW50X2xpc3QpKSB7Ci0JCQllID0gbGlzdF9maXJzdF9lbnRyeSgmaHlfZHJ2 X3ByaXYtPmV2ZW50X2xpc3QsCi0JCQkJCXN0cnVjdCBoeXBlcl9kbWFidWZfZXZlbnQsIGxpbmsp OwotCQkJbGlzdF9kZWwoJmUtPmxpbmspOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2lycSgmaHlfZHJ2 X3ByaXYtPmV2ZW50X2xvY2spOwotCi0JCWlmICghZSkgewotCQkJaWYgKHJldCkKLQkJCQlicmVh azsKLQotCQkJaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7Ci0JCQkJcmV0ID0gLUVB R0FJTjsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJbXV0ZXhfdW5sb2NrKCZoeV9kcnZfcHJpdi0+ ZXZlbnRfcmVhZF9sb2NrKTsKLQkJCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShoeV9k cnZfcHJpdi0+ZXZlbnRfd2FpdCwKLQkJCQkgICFsaXN0X2VtcHR5KCZoeV9kcnZfcHJpdi0+ZXZl bnRfbGlzdCkpOwotCi0JCQlpZiAocmV0ID09IDApCi0JCQkJcmV0ID0gbXV0ZXhfbG9ja19pbnRl cnJ1cHRpYmxlKAotCQkJCQkmaHlfZHJ2X3ByaXYtPmV2ZW50X3JlYWRfbG9jayk7Ci0KLQkJCWlm IChyZXQpCi0JCQkJcmV0dXJuIHJldDsKLQkJfSBlbHNlIHsKLQkJCXVuc2lnbmVkIGludCBsZW5n dGggPSAoc2l6ZW9mKGUtPmV2ZW50X2RhdGEuaGRyKSArCi0JCQkJCQkgICAgICBlLT5ldmVudF9k YXRhLmhkci5zaXplKTsKLQotCQkJaWYgKGxlbmd0aCA+IGNvdW50IC0gcmV0KSB7Ci1wdXRfYmFj a19ldmVudDoKLQkJCQlzcGluX2xvY2tfaXJxKCZoeV9kcnZfcHJpdi0+ZXZlbnRfbG9jayk7Ci0J CQkJbGlzdF9hZGQoJmUtPmxpbmssICZoeV9kcnZfcHJpdi0+ZXZlbnRfbGlzdCk7Ci0JCQkJc3Bp bl91bmxvY2tfaXJxKCZoeV9kcnZfcHJpdi0+ZXZlbnRfbG9jayk7Ci0JCQkJYnJlYWs7Ci0JCQl9 Ci0KLQkJCWlmIChjb3B5X3RvX3VzZXIoYnVmZmVyICsgcmV0LCAmZS0+ZXZlbnRfZGF0YS5oZHIs Ci0JCQkJCSBzaXplb2YoZS0+ZXZlbnRfZGF0YS5oZHIpKSkgewotCQkJCWlmIChyZXQgPT0gMCkK LQkJCQkJcmV0ID0gLUVGQVVMVDsKLQotCQkJCWdvdG8gcHV0X2JhY2tfZXZlbnQ7Ci0JCQl9Ci0K LQkJCXJldCArPSBzaXplb2YoZS0+ZXZlbnRfZGF0YS5oZHIpOwotCi0JCQlpZiAoY29weV90b191 c2VyKGJ1ZmZlciArIHJldCwgZS0+ZXZlbnRfZGF0YS5kYXRhLAotCQkJCQkgZS0+ZXZlbnRfZGF0 YS5oZHIuc2l6ZSkpIHsKLQkJCQkvKiBlcnJvciB3aGlsZSBjb3B5aW5nIHZvaWQgKmRhdGEgKi8K LQotCQkJCXN0cnVjdCBoeXBlcl9kbWFidWZfZXZlbnRfaGRyIGR1bW15X2hkciA9IHswfTsKLQot CQkJCXJldCAtPSBzaXplb2YoZS0+ZXZlbnRfZGF0YS5oZHIpOwotCi0JCQkJLyogbnVsbGlmeWlu ZyBoZHIgb2YgdGhlIGV2ZW50IGluIHVzZXIgYnVmZmVyICovCi0JCQkJaWYgKGNvcHlfdG9fdXNl cihidWZmZXIgKyByZXQsICZkdW1teV9oZHIsCi0JCQkJCQkgc2l6ZW9mKGR1bW15X2hkcikpKSB7 Ci0JCQkJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKLQkJCQkJCSJmYWlsZWQgdG8gbnVsbGlm eSBpbnZhbGlkIGhkciBhbHJlYWR5IGluIHVzZXJzcGFjZVxuIik7Ci0JCQkJfQotCi0JCQkJcmV0 ID0gLUVGQVVMVDsKLQotCQkJCWdvdG8gcHV0X2JhY2tfZXZlbnQ7Ci0JCQl9Ci0KLQkJCXJldCAr PSBlLT5ldmVudF9kYXRhLmhkci5zaXplOwotCQkJaHlfZHJ2X3ByaXYtPnBlbmRpbmctLTsKLQkJ CWtmcmVlKGUpOwotCQl9Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZoeV9kcnZfcHJpdi0+ZXZlbnRf cmVhZF9sb2NrKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLSNlbmRpZgotCi1zdGF0aWMgY29uc3Qg c3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoeXBlcl9kbWFidWZfZHJpdmVyX2ZvcHMgPSB7Ci0JLm93 bmVyID0gVEhJU19NT0RVTEUsCi0JLm9wZW4gPSBoeXBlcl9kbWFidWZfb3BlbiwKLQkucmVsZWFz ZSA9IGh5cGVyX2RtYWJ1Zl9yZWxlYXNlLAotCi0vKiBwb2xsIGFuZCByZWFkIGludGVyZmFjZXMg YXJlIG5lZWRlZCBvbmx5IGZvciBldmVudC1wb2xsaW5nICovCi0jaWZkZWYgQ09ORklHX0hZUEVS X0RNQUJVRl9FVkVOVF9HRU4KLQkucmVhZCA9IGh5cGVyX2RtYWJ1Zl9ldmVudF9yZWFkLAotCS5w b2xsID0gaHlwZXJfZG1hYnVmX2V2ZW50X3BvbGwsCi0jZW5kaWYKLQotCS51bmxvY2tlZF9pb2N0 bCA9IGh5cGVyX2RtYWJ1Zl9pb2N0bCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBo eXBlcl9kbWFidWZfbWlzY2RldiA9IHsKLQkubWlub3IgPSBNSVNDX0RZTkFNSUNfTUlOT1IsCi0J Lm5hbWUgPSAiaHlwZXJfZG1hYnVmIiwKLQkuZm9wcyA9ICZoeXBlcl9kbWFidWZfZHJpdmVyX2Zv cHMsCi19OwotCi1zdGF0aWMgaW50IHJlZ2lzdGVyX2RldmljZSh2b2lkKQotewotCWludCByZXQg PSAwOwotCi0JcmV0ID0gbWlzY19yZWdpc3RlcigmaHlwZXJfZG1hYnVmX21pc2NkZXYpOwotCi0J aWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIgImh5cGVyX2RtYWJ1ZjogZHJpdmVyIGNhbid0 IGJlIHJlZ2lzdGVyZWRcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCWh5X2Rydl9wcml2LT5k ZXYgPSBoeXBlcl9kbWFidWZfbWlzY2Rldi50aGlzX2RldmljZTsKLQotCS8qIFRPRE86IENoZWNr IGlmIHRoZXJlIGlzIGEgZGlmZmVyZW50IHdheSB0byBpbml0aWFsaXplIGRtYSBtYXNrICovCi0J ZG1hX2NvZXJjZV9tYXNrX2FuZF9jb2hlcmVudChoeV9kcnZfcHJpdi0+ZGV2LCBETUFfQklUX01B U0soNjQpKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHVucmVnaXN0ZXJfZGV2 aWNlKHZvaWQpCi17Ci0JZGV2X2luZm8oaHlfZHJ2X3ByaXYtPmRldiwKLQkJImh5cGVyX2RtYWJ1 ZjogdW5yZWdpc3Rlcl9kZXZpY2UoKSBpcyBjYWxsZWRcbiIpOwotCi0JbWlzY19kZXJlZ2lzdGVy KCZoeXBlcl9kbWFidWZfbWlzY2Rldik7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGh5cGVyX2Rt YWJ1Zl9kcnZfaW5pdCh2b2lkKQotewotCWludCByZXQgPSAwOwotCi0JcHJpbnRrKEtFUk5fTk9U SUNFICJoeXBlcl9kbWFidWZfc3RhcnRpbmc6IEluaXRpYWxpemF0aW9uIHN0YXJ0ZWRcbiIpOwot Ci0JaHlfZHJ2X3ByaXYgPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgaHlwZXJfZG1hYnVmX3By aXZhdGUpLAotCQkJICAgICAgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIWh5X2Rydl9wcml2KQotCQly ZXR1cm4gLUVOT01FTTsKLQotCXJldCA9IHJlZ2lzdGVyX2RldmljZSgpOwotCWlmIChyZXQgPCAw KSB7Ci0JCWtmcmVlKGh5X2Rydl9wcml2KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLS8qIGN1cnJl bnRseSBvbmx5IHN1cHBvcnRzIFhFTiBoeXBlcnZpc29yICovCi0jaWZkZWYgQ09ORklHX0hZUEVS X0RNQUJVRl9YRU4KLQloeV9kcnZfcHJpdi0+YmtuZF9vcHMgPSAmeGVuX2JrbmRfb3BzOwotI2Vs c2UKLQloeV9kcnZfcHJpdi0+YmtuZF9vcHMgPSBOVUxMOwotCXByaW50ayhLRVJOX0VSUiAiaHlw ZXJfZG1hYnVmIGRydiBjdXJyZW50bHkgc3VwcG9ydHMgWEVOIG9ubHkuXG4iKTsKLSNlbmRpZgot Ci0JaWYgKGh5X2Rydl9wcml2LT5ia25kX29wcyA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VS UiAiSHlwZXJfZG1hYnVmOiBubyBiYWNrZW5kIGZvdW5kXG4iKTsKLQkJa2ZyZWUoaHlfZHJ2X3By aXYpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JbXV0ZXhfaW5pdCgmaHlfZHJ2X3ByaXYtPmxvY2sp OwotCi0JbXV0ZXhfbG9jaygmaHlfZHJ2X3ByaXYtPmxvY2spOwotCi0JaHlfZHJ2X3ByaXYtPmlu aXRpYWxpemVkID0gZmFsc2U7Ci0KLQlkZXZfaW5mbyhoeV9kcnZfcHJpdi0+ZGV2LAotCQkgImlu aXRpYWxpemluZyBkYXRhYmFzZSBmb3IgaW1wb3J0ZWQvZXhwb3J0ZWQgZG1hYnVmc1xuIik7Ci0K LQloeV9kcnZfcHJpdi0+d29ya19xdWV1ZSA9IGNyZWF0ZV93b3JrcXVldWUoImh5cGVyX2RtYWJ1 Zl93cXVldWUiKTsKLQotCXJldCA9IGh5cGVyX2RtYWJ1Zl90YWJsZV9pbml0KCk7Ci0JaWYgKHJl dCA8IDApIHsKLQkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAotCQkJImZhaWwgdG8gaW5pdCB0 YWJsZSBmb3IgZXhwb3J0ZWQvaW1wb3J0ZWQgZW50cmllc1xuIik7Ci0JCW11dGV4X3VubG9jaygm aHlfZHJ2X3ByaXYtPmxvY2spOwotCQlrZnJlZShoeV9kcnZfcHJpdik7Ci0JCXJldHVybiByZXQ7 Ci0JfQotCi0jaWZkZWYgQ09ORklHX0hZUEVSX0RNQUJVRl9TWVNGUwotCXJldCA9IGh5cGVyX2Rt YWJ1Zl9yZWdpc3Rlcl9zeXNmcyhoeV9kcnZfcHJpdi0+ZGV2KTsKLQlpZiAocmV0IDwgMCkgewot CQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCi0JCQkiZmFpbGVkIHRvIGluaXRpYWxpemUgc3lz ZnNcbiIpOwotCQltdXRleF91bmxvY2soJmh5X2Rydl9wcml2LT5sb2NrKTsKLQkJa2ZyZWUoaHlf ZHJ2X3ByaXYpOwotCQlyZXR1cm4gcmV0OwotCX0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0hZ UEVSX0RNQUJVRl9FVkVOVF9HRU4KLQltdXRleF9pbml0KCZoeV9kcnZfcHJpdi0+ZXZlbnRfcmVh ZF9sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmaHlfZHJ2X3ByaXYtPmV2ZW50X2xvY2spOwotCi0J LyogSW5pdGlhbGl6ZSBldmVudCBxdWV1ZSAqLwotCUlOSVRfTElTVF9IRUFEKCZoeV9kcnZfcHJp di0+ZXZlbnRfbGlzdCk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmaHlfZHJ2X3ByaXYtPmV2ZW50 X3dhaXQpOwotCi0JLyogcmVzZXR0aW5nIG51bWJlciBvZiBwZW5kaW5nIGV2ZW50cyAqLwotCWh5 X2Rydl9wcml2LT5wZW5kaW5nID0gMDsKLSNlbmRpZgotCi0JaWYgKGh5X2Rydl9wcml2LT5ia25k X29wcy0+aW5pdCkgewotCQlyZXQgPSBoeV9kcnZfcHJpdi0+YmtuZF9vcHMtPmluaXQoKTsKLQot CQlpZiAocmV0IDwgMCkgewotCQkJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LAotCQkJCSJmYWls ZWQgdG8gaW5pdGlhbGl6ZSBiYWNrZW5kLlxuIik7Ci0JCQltdXRleF91bmxvY2soJmh5X2Rydl9w cml2LT5sb2NrKTsKLQkJCWtmcmVlKGh5X2Rydl9wcml2KTsKLQkJCXJldHVybiByZXQ7Ci0JCX0K LQl9Ci0KLQloeV9kcnZfcHJpdi0+ZG9taWQgPSBoeV9kcnZfcHJpdi0+YmtuZF9vcHMtPmdldF92 bV9pZCgpOwotCi0JcmV0ID0gaHlfZHJ2X3ByaXYtPmJrbmRfb3BzLT5pbml0X2NvbW1fZW52KCk7 Ci0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LAotCQkJImZhaWxl ZCB0byBpbml0aWFsaXplIGNvbW0tZW52LlxuIik7Ci0JfSBlbHNlIHsKLQkJaHlfZHJ2X3ByaXYt PmluaXRpYWxpemVkID0gdHJ1ZTsKLQl9Ci0KLQltdXRleF91bmxvY2soJmh5X2Rydl9wcml2LT5s b2NrKTsKLQotCWRldl9pbmZvKGh5X2Rydl9wcml2LT5kZXYsCi0JCSJGaW5pc2hpbmcgdXAgaW5p dGlhbGl6YXRpb24gb2YgaHlwZXJfZG1hYnVmIGRydlxuIik7Ci0KLQkvKiBpbnRlcnJ1cHQgZm9y IGNvbW0gc2hvdWxkIGJlIHJlZ2lzdGVyZWQgaGVyZTogKi8KLQlyZXR1cm4gcmV0OwotfQotCi1z dGF0aWMgdm9pZCBoeXBlcl9kbWFidWZfZHJ2X2V4aXQodm9pZCkKLXsKLSNpZmRlZiBDT05GSUdf SFlQRVJfRE1BQlVGX1NZU0ZTCi0JaHlwZXJfZG1hYnVmX3VucmVnaXN0ZXJfc3lzZnMoaHlfZHJ2 X3ByaXYtPmRldik7Ci0jZW5kaWYKLQotCW11dGV4X2xvY2soJmh5X2Rydl9wcml2LT5sb2NrKTsK LQotCS8qIGhhc2ggdGFibGVzIGZvciBleHBvcnQvaW1wb3J0IGVudHJpZXMgYW5kIHJpbmdfaW5m b3MgKi8KLQloeXBlcl9kbWFidWZfdGFibGVfZGVzdHJveSgpOwotCi0JaHlfZHJ2X3ByaXYtPmJr bmRfb3BzLT5kZXN0cm95X2NvbW0oKTsKLQotCWlmIChoeV9kcnZfcHJpdi0+YmtuZF9vcHMtPmNs ZWFudXApIHsKLQkJaHlfZHJ2X3ByaXYtPmJrbmRfb3BzLT5jbGVhbnVwKCk7Ci0JfTsKLQotCS8q IGRlc3Ryb3kgd29ya3F1ZXVlICovCi0JaWYgKGh5X2Rydl9wcml2LT53b3JrX3F1ZXVlKQotCQlk ZXN0cm95X3dvcmtxdWV1ZShoeV9kcnZfcHJpdi0+d29ya19xdWV1ZSk7Ci0KLQkvKiBkZXN0cm95 IGlkX3F1ZXVlICovCi0JaWYgKGh5X2Rydl9wcml2LT5pZF9xdWV1ZSkKLQkJaHlwZXJfZG1hYnVm X2ZyZWVfaGlkX2xpc3QoKTsKLQotI2lmZGVmIENPTkZJR19IWVBFUl9ETUFCVUZfRVZFTlRfR0VO Ci0JLyogY2xlYW4gdXAgZXZlbnQgcXVldWUgKi8KLQloeXBlcl9kbWFidWZfZXZlbnRzX3JlbGVh c2UoKTsKLSNlbmRpZgotCi0JbXV0ZXhfdW5sb2NrKCZoeV9kcnZfcHJpdi0+bG9jayk7Ci0KLQlk ZXZfaW5mbyhoeV9kcnZfcHJpdi0+ZGV2LAotCQkgImh5cGVyX2RtYWJ1ZiBkcml2ZXI6IEV4aXRp bmdcbiIpOwotCi0Ja2ZyZWUoaHlfZHJ2X3ByaXYpOwotCi0JdW5yZWdpc3Rlcl9kZXZpY2UoKTsK LX0KLQotbW9kdWxlX2luaXQoaHlwZXJfZG1hYnVmX2Rydl9pbml0KTsKLW1vZHVsZV9leGl0KGh5 cGVyX2RtYWJ1Zl9kcnZfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9oeXBlcl9kbWFi dWYvaHlwZXJfZG1hYnVmX2Rydi5oIGIvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2Rt YWJ1Zl9kcnYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJiYjNjZS4uMDAwMDAw MAotLS0gYS9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2Rydi5oCisrKyAv ZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgwqkgMjAxNyBJbnRl bCBDb3Jwb3JhdGlvbgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUg b2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29m dHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIp LAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVk aW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlm eSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2Vs bCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0 aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5k IHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAotICogcGFyYWdyYXBo KSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25z IG9mIHRoZQotICogU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB UyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJ RUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklO RlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCi0gKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklH SFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICog TElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhF UldJU0UsIEFSSVNJTkcKLSAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF IFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKLSAqIElOIFRIRSBTT0ZUV0FS RS4KLSAqCi0gKi8KLQotI2lmbmRlZiBfX0xJTlVYX1BVQkxJQ19IWVBFUl9ETUFCVUZfRFJWX0hf XwotI2RlZmluZSBfX0xJTlVYX1BVQkxJQ19IWVBFUl9ETUFCVUZfRFJWX0hfXwotCi0jaW5jbHVk ZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8eGVuL2h5cGVyX2RtYWJ1Zi5oPgotCi1zdHJ1 Y3QgaHlwZXJfZG1hYnVmX3JlcTsKLQotc3RydWN0IGh5cGVyX2RtYWJ1Zl9ldmVudCB7Ci0Jc3Ry dWN0IGh5cGVyX2RtYWJ1Zl9ldmVudF9kYXRhIGV2ZW50X2RhdGE7Ci0Jc3RydWN0IGxpc3RfaGVh ZCBsaW5rOwotfTsKLQotc3RydWN0IGh5cGVyX2RtYWJ1Zl9wcml2YXRlIHsKLQlzdHJ1Y3QgZGV2 aWNlICpkZXY7Ci0KLQkvKiBWTShkb21haW4pIGlkIG9mIGN1cnJlbnQgVk0gaW5zdGFuY2UgKi8K LQlpbnQgZG9taWQ7Ci0KLQkvKiB3b3JrcXVldWUgZGVkaWNhdGVkIHRvIGh5cGVyX2RtYWJ1ZiBk cml2ZXIgKi8KLQlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd29ya19xdWV1ZTsKLQotCS8qIGxp c3Qgb2YgcmV1c2FibGUgaHlwZXJfZG1hYnVmX2lkcyAqLwotCXN0cnVjdCBsaXN0X3JldXNhYmxl X2lkICppZF9xdWV1ZTsKLQotCS8qIGJhY2tlbmQgb3BzIC0gaHlwZXJ2aXNvciBzcGVjaWZpYyAq LwotCXN0cnVjdCBoeXBlcl9kbWFidWZfYmtuZF9vcHMgKmJrbmRfb3BzOwotCi0JLyogZGV2aWNl IGdsb2JhbCBsb2NrICovCi0JLyogVE9ETzogbWlnaHQgbmVlZCBhIGxvY2sgcGVyIHJlc291cmNl IChlLmcuIEVYUE9SVCBMSVNUKSAqLwotCXN0cnVjdCBtdXRleCBsb2NrOwotCi0JLyogZmxhZyB0 aGF0IHNob3dzIHdoZXRoZXIgYmFja2VuZCBpcyBpbml0aWFsaXplZCAqLwotCWJvb2wgaW5pdGlh bGl6ZWQ7Ci0KLQl3YWl0X3F1ZXVlX2hlYWRfdCBldmVudF93YWl0OwotCXN0cnVjdCBsaXN0X2hl YWQgZXZlbnRfbGlzdDsKLQotCXNwaW5sb2NrX3QgZXZlbnRfbG9jazsKLQlzdHJ1Y3QgbXV0ZXgg ZXZlbnRfcmVhZF9sb2NrOwotCi0JLyogIyBvZiBwZW5kaW5nIGV2ZW50cyAqLwotCWludCBwZW5k aW5nOwotfTsKLQotc3RydWN0IGxpc3RfcmV1c2FibGVfaWQgewotCWh5cGVyX2RtYWJ1Zl9pZF90 IGhpZDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci19OwotCi1zdHJ1Y3QgaHlwZXJfZG1hYnVm X2JrbmRfb3BzIHsKLQkvKiBiYWNrZW5kIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgKG9wdGlvbmFs KSAqLwotCWludCAoKmluaXQpKHZvaWQpOwotCi0JLyogYmFja2VuZCBjbGVhbnVwIHJvdXRpbmUg KG9wdGlvbmFsKSAqLwotCWludCAoKmNsZWFudXApKHZvaWQpOwotCi0JLyogcmV0cmVpdmluZyBp ZCBvZiBjdXJyZW50IHZpcnR1YWwgbWFjaGluZSAqLwotCWludCAoKmdldF92bV9pZCkodm9pZCk7 Ci0KLQkvKiBnZXQgcGFnZXMgc2hhcmVkIHZpYSBoeXBlcnZpc29yLXNwZWNpZmljIG1ldGhvZCAq LwotCWludCAoKnNoYXJlX3BhZ2VzKShzdHJ1Y3QgcGFnZSAqKiwgaW50LCBpbnQsIHZvaWQgKiop OwotCi0JLyogbWFrZSBzaGFyZWQgcGFnZXMgdW5zaGFyZWQgdmlhIGh5cGVydmlzb3Igc3BlY2lm aWMgbWV0aG9kICovCi0JaW50ICgqdW5zaGFyZV9wYWdlcykodm9pZCAqKiwgaW50KTsKLQotCS8q IG1hcCByZW1vdGVseSBzaGFyZWQgcGFnZXMgb24gaW1wb3J0ZXIncyBzaWRlIHZpYQotCSAqIGh5 cGVydmlzb3Itc3BlY2lmaWMgbWV0aG9kCi0JICovCi0Jc3RydWN0IHBhZ2UgKiogKCptYXBfc2hh cmVkX3BhZ2VzKSh1bnNpZ25lZCBsb25nLCBpbnQsIGludCwgdm9pZCAqKik7Ci0KLQkvKiB1bm1h cCBhbmQgZnJlZSBzaGFyZWQgcGFnZXMgb24gaW1wb3J0ZXIncyBzaWRlIHZpYQotCSAqIGh5cGVy dmlzb3Itc3BlY2lmaWMgbWV0aG9kCi0JICovCi0JaW50ICgqdW5tYXBfc2hhcmVkX3BhZ2VzKSh2 b2lkICoqLCBpbnQpOwotCi0JLyogaW5pdGlhbGl6ZSBjb21tdW5pY2F0aW9uIGVudmlyb25tZW50 ICovCi0JaW50ICgqaW5pdF9jb21tX2Vudikodm9pZCk7Ci0KLQl2b2lkICgqZGVzdHJveV9jb21t KSh2b2lkKTsKLQotCS8qIHVwc3RyZWFtIGNoIHNldHVwIChyZWNlaXZpbmcgYW5kIHJlc3BvbmRp bmcpICovCi0JaW50ICgqaW5pdF9yeF9jaCkoaW50KTsKLQotCS8qIGRvd25zdHJlYW0gY2ggc2V0 dXAgKHRyYW5zbWl0dGluZyBhbmQgcGFyc2luZyByZXNwb25zZXMpICovCi0JaW50ICgqaW5pdF90 eF9jaCkoaW50KTsKLQotCWludCAoKnNlbmRfcmVxKShpbnQsIHN0cnVjdCBoeXBlcl9kbWFidWZf cmVxICosIGludCk7Ci19OwotCi0vKiBleHBvcnRpbmcgZ2xvYmFsIGRydiBwcml2YXRlIGluZm8g Ki8KLWV4dGVybiBzdHJ1Y3QgaHlwZXJfZG1hYnVmX3ByaXZhdGUgKmh5X2Rydl9wcml2OwotCi0j ZW5kaWYgLyogX19MSU5VWF9QVUJMSUNfSFlQRVJfRE1BQlVGX0RSVl9IX18gKi8KZGlmZiAtLWdp dCBhL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfZXZlbnQuYyBiL2RyaXZl cnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfZXZlbnQuYwpkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMzkyZWE5OS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3hlbi9oeXBlcl9k bWFidWYvaHlwZXJfZG1hYnVmX2V2ZW50LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBA QAotLyoKLSAqIENvcHlyaWdodCDCqSAyMDE3IEludGVsIENvcnBvcmF0aW9uCi0gKgotICogUGVy bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24g b2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1 bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0 d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0g KiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlz aGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0g KiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAo aW5jbHVkaW5nIHRoZSBuZXh0Ci0gKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFs bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCi0gKiBTb2Z0d2FyZS4KLSAq Ci0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBP RiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQg U0hBTEwKLSAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1Ig QU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwg T1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBP VEhFUiBERUFMSU5HUwotICogSU4gVEhFIFNPRlRXQVJFLgotICoKLSAqIEF1dGhvcnM6Ci0gKiAg ICBEb25nd29uIEtpbSA8ZG9uZ3dvbi5raW1AaW50ZWwuY29tPgotICogICAgTWF0ZXVzeiBQb2xy b2xhIDxtYXRldXN6eC5wb3Ryb2xhQGludGVsLmNvbT4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxp bnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgv c2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgImh5cGVyX2RtYWJ1 Zl9kcnYuaCIKLSNpbmNsdWRlICJoeXBlcl9kbWFidWZfc3RydWN0LmgiCi0jaW5jbHVkZSAiaHlw ZXJfZG1hYnVmX2xpc3QuaCIKLSNpbmNsdWRlICJoeXBlcl9kbWFidWZfZXZlbnQuaCIKLQotc3Rh dGljIHZvaWQgc2VuZF9ldmVudChzdHJ1Y3QgaHlwZXJfZG1hYnVmX2V2ZW50ICplKQotewotCXN0 cnVjdCBoeXBlcl9kbWFidWZfZXZlbnQgKm9sZGVzdDsKLQl1bnNpZ25lZCBsb25nIGlycWZsYWdz OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmh5X2Rydl9wcml2LT5ldmVudF9sb2NrLCBpcnFmbGFn cyk7Ci0KLQkvKiBjaGVjayBjdXJyZW50IG51bWJlciBvZiBldmVudCB0aGVuIGlmIGl0IGhpdHMg dGhlIG1heCBudW0gYWxsb3dlZAotCSAqIHRoZW4gcmVtb3ZlIHRoZSBvbGRlc3QgZXZlbnQgaW4g dGhlIGxpc3QKLQkgKi8KLQlpZiAoaHlfZHJ2X3ByaXYtPnBlbmRpbmcgPiBNQVhfREVQVEhfRVZF TlRfUVVFVUUgLSAxKSB7Ci0JCW9sZGVzdCA9IGxpc3RfZmlyc3RfZW50cnkoJmh5X2Rydl9wcml2 LT5ldmVudF9saXN0LAotCQkJCXN0cnVjdCBoeXBlcl9kbWFidWZfZXZlbnQsIGxpbmspOwotCQls aXN0X2RlbCgmb2xkZXN0LT5saW5rKTsKLQkJaHlfZHJ2X3ByaXYtPnBlbmRpbmctLTsKLQkJa2Zy ZWUob2xkZXN0KTsKLQl9Ci0KLQlsaXN0X2FkZF90YWlsKCZlLT5saW5rLAotCQkgICAgICAmaHlf ZHJ2X3ByaXYtPmV2ZW50X2xpc3QpOwotCi0JaHlfZHJ2X3ByaXYtPnBlbmRpbmcrKzsKLQotCXdh a2VfdXBfaW50ZXJydXB0aWJsZSgmaHlfZHJ2X3ByaXYtPmV2ZW50X3dhaXQpOwotCi0Jc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmaHlfZHJ2X3ByaXYtPmV2ZW50X2xvY2ssIGlycWZsYWdzKTsKLX0K LQotdm9pZCBoeXBlcl9kbWFidWZfZXZlbnRzX3JlbGVhc2Uodm9pZCkKLXsKLQlzdHJ1Y3QgaHlw ZXJfZG1hYnVmX2V2ZW50ICplLCAqZXQ7Ci0JdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKLQotCXNw aW5fbG9ja19pcnFzYXZlKCZoeV9kcnZfcHJpdi0+ZXZlbnRfbG9jaywgaXJxZmxhZ3MpOwotCi0J bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIGV0LCAmaHlfZHJ2X3ByaXYtPmV2ZW50X2xpc3Qs Ci0JCQkJIGxpbmspIHsKLQkJbGlzdF9kZWwoJmUtPmxpbmspOwotCQlrZnJlZShlKTsKLQkJaHlf ZHJ2X3ByaXYtPnBlbmRpbmctLTsKLQl9Ci0KLQlpZiAoaHlfZHJ2X3ByaXYtPnBlbmRpbmcpIHsK LQkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAotCQkJInBvc3NpYmxlIGxlYWsgb24gZXZlbnRf bGlzdFxuIik7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHlfZHJ2X3ByaXYtPmV2 ZW50X2xvY2ssIGlycWZsYWdzKTsKLX0KLQotaW50IGh5cGVyX2RtYWJ1Zl9pbXBvcnRfZXZlbnQo aHlwZXJfZG1hYnVmX2lkX3QgaGlkKQotewotCXN0cnVjdCBoeXBlcl9kbWFidWZfZXZlbnQgKmU7 Ci0Jc3RydWN0IGltcG9ydGVkX3NndF9pbmZvICppbXBvcnRlZDsKLQotCWltcG9ydGVkID0gaHlw ZXJfZG1hYnVmX2ZpbmRfaW1wb3J0ZWQoaGlkKTsKLQotCWlmICghaW1wb3J0ZWQpIHsKLQkJZGV2 X2VycihoeV9kcnZfcHJpdi0+ZGV2LAotCQkJImNhbid0IGZpbmQgaW1wb3J0ZWRfc2d0X2luZm8g aW4gdGhlIGxpc3RcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQllID0ga3phbGxvYyhz aXplb2YoKmUpLCBHRlBfS0VSTkVMKTsKLQotCWlmICghZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0K LQllLT5ldmVudF9kYXRhLmhkci5ldmVudF90eXBlID0gSFlQRVJfRE1BQlVGX05FV19JTVBPUlQ7 Ci0JZS0+ZXZlbnRfZGF0YS5oZHIuaGlkID0gaGlkOwotCWUtPmV2ZW50X2RhdGEuZGF0YSA9ICh2 b2lkICopaW1wb3J0ZWQtPnByaXY7Ci0JZS0+ZXZlbnRfZGF0YS5oZHIuc2l6ZSA9IGltcG9ydGVk LT5zel9wcml2OwotCi0Jc2VuZF9ldmVudChlKTsKLQotCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRl diwKLQkJImV2ZW50IG51bWJlciA9ICVkIDoiLCBoeV9kcnZfcHJpdi0+cGVuZGluZyk7Ci0KLQlk ZXZfZGJnKGh5X2Rydl9wcml2LT5kZXYsCi0JCSJnZW5lcmF0aW5nIGV2ZW50cyBmb3IgeyVkLCAl ZCwgJWQsICVkfVxuIiwKLQkJaW1wb3J0ZWQtPmhpZC5pZCwgaW1wb3J0ZWQtPmhpZC5ybmdfa2V5 WzBdLAotCQlpbXBvcnRlZC0+aGlkLnJuZ19rZXlbMV0sIGltcG9ydGVkLT5oaWQucm5nX2tleVsy XSk7Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1 Zi9oeXBlcl9kbWFidWZfZXZlbnQuaCBiL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9k bWFidWZfZXZlbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBkYjA0Zi4uMDAw MDAwMAotLS0gYS9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2V2ZW50LmgK KysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IMKpIDIwMTcg SW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlz IHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdh cmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGlu Y2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBt b2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29y IHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdo b20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhl IGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKLSAqIHBhcmFn cmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0 aW9ucyBvZiB0aGUKLSAqIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJ TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBO T05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIEFVVEhPUlMgT1IgQ09Q WVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIK LSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Ig T1RIRVJXSVNFLCBBUklTSU5HCi0gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCi0gKiBJTiBUSEUgU09G VFdBUkUuCi0gKgotICovCi0KLSNpZm5kZWYgX19IWVBFUl9ETUFCVUZfRVZFTlRfSF9fCi0jZGVm aW5lIF9fSFlQRVJfRE1BQlVGX0VWRU5UX0hfXwotCi0jZGVmaW5lIE1BWF9ERVBUSF9FVkVOVF9R VUVVRSAzMgotCi1lbnVtIGh5cGVyX2RtYWJ1Zl9ldmVudF90eXBlIHsKLQlIWVBFUl9ETUFCVUZf TkVXX0lNUE9SVCA9IDB4MTAwMDAsCi19OwotCi12b2lkIGh5cGVyX2RtYWJ1Zl9ldmVudHNfcmVs ZWFzZSh2b2lkKTsKLQotaW50IGh5cGVyX2RtYWJ1Zl9pbXBvcnRfZXZlbnQoaHlwZXJfZG1hYnVm X2lkX3QgaGlkKTsKLQotI2VuZGlmIC8qIF9fSFlQRVJfRE1BQlVGX0VWRU5UX0hfXyAqLwpkaWZm IC0tZ2l0IGEvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9pZC5jIGIvZHJp dmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9pZC5jCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCBlNjdiODRhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMveGVuL2h5cGVyX2Rt YWJ1Zi9oeXBlcl9kbWFidWZfaWQuYworKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0v KgotICogQ29weXJpZ2h0IMKpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh aW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRo ZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRl LCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQg dG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRo ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNs dWRpbmcgdGhlIG5leHQKLSAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNv cGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKLSAqIFNvZnR3YXJlLgotICoKLSAq IFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFO WSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVE IFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFM TAotICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkg Q0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCi0gKiBGUk9NLCBPVVQg T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVS IERFQUxJTkdTCi0gKiBJTiBUSEUgU09GVFdBUkUuCi0gKgotICogQXV0aG9yczoKLSAqICAgIERv bmd3b24gS2ltIDxkb25nd29uLmtpbUBpbnRlbC5jb20+Ci0gKiAgICBNYXRldXN6IFBvbHJvbGEg PG1hdGV1c3p4LnBvdHJvbGFAaW50ZWwuY29tPgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgv bGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9yYW5kb20u aD4KLSNpbmNsdWRlICJoeXBlcl9kbWFidWZfZHJ2LmgiCi0jaW5jbHVkZSAiaHlwZXJfZG1hYnVm X2lkLmgiCi0KLXZvaWQgaHlwZXJfZG1hYnVmX3N0b3JlX2hpZChoeXBlcl9kbWFidWZfaWRfdCBo aWQpCi17Ci0Jc3RydWN0IGxpc3RfcmV1c2FibGVfaWQgKnJldXNhYmxlX2hlYWQgPSBoeV9kcnZf cHJpdi0+aWRfcXVldWU7Ci0Jc3RydWN0IGxpc3RfcmV1c2FibGVfaWQgKm5ld19yZXVzYWJsZTsK LQotCW5ld19yZXVzYWJsZSA9IGttYWxsb2Moc2l6ZW9mKCpuZXdfcmV1c2FibGUpLCBHRlBfS0VS TkVMKTsKLQotCWlmICghbmV3X3JldXNhYmxlKQotCQlyZXR1cm47Ci0KLQluZXdfcmV1c2FibGUt PmhpZCA9IGhpZDsKLQotCWxpc3RfYWRkKCZuZXdfcmV1c2FibGUtPmxpc3QsICZyZXVzYWJsZV9o ZWFkLT5saXN0KTsKLX0KLQotc3RhdGljIGh5cGVyX2RtYWJ1Zl9pZF90IGdldF9yZXVzYWJsZV9o aWQodm9pZCkKLXsKLQlzdHJ1Y3QgbGlzdF9yZXVzYWJsZV9pZCAqcmV1c2FibGVfaGVhZCA9IGh5 X2Rydl9wcml2LT5pZF9xdWV1ZTsKLQloeXBlcl9kbWFidWZfaWRfdCBoaWQgPSB7LTEsIHswLCAw LCAwfSB9OwotCi0JLyogY2hlY2sgdGhlcmUgaXMgcmV1c2FibGUgaWQgKi8KLQlpZiAoIWxpc3Rf ZW1wdHkoJnJldXNhYmxlX2hlYWQtPmxpc3QpKSB7Ci0JCXJldXNhYmxlX2hlYWQgPSBsaXN0X2Zp cnN0X2VudHJ5KCZyZXVzYWJsZV9oZWFkLT5saXN0LAotCQkJCQkJIHN0cnVjdCBsaXN0X3JldXNh YmxlX2lkLAotCQkJCQkJIGxpc3QpOwotCi0JCWxpc3RfZGVsKCZyZXVzYWJsZV9oZWFkLT5saXN0 KTsKLQkJaGlkID0gcmV1c2FibGVfaGVhZC0+aGlkOwotCQlrZnJlZShyZXVzYWJsZV9oZWFkKTsK LQl9Ci0KLQlyZXR1cm4gaGlkOwotfQotCi12b2lkIGh5cGVyX2RtYWJ1Zl9mcmVlX2hpZF9saXN0 KHZvaWQpCi17Ci0Jc3RydWN0IGxpc3RfcmV1c2FibGVfaWQgKnJldXNhYmxlX2hlYWQgPSBoeV9k cnZfcHJpdi0+aWRfcXVldWU7Ci0Jc3RydWN0IGxpc3RfcmV1c2FibGVfaWQgKnRlbXBfaGVhZDsK LQotCWlmIChyZXVzYWJsZV9oZWFkKSB7Ci0JCS8qIGZyZWVpbmcgbWVtIHNwYWNlIGFsbCByZXVz YWJsZSBpZHMgaW4gdGhlIHN0YWNrICovCi0JCXdoaWxlICghbGlzdF9lbXB0eSgmcmV1c2FibGVf aGVhZC0+bGlzdCkpIHsKLQkJCXRlbXBfaGVhZCA9IGxpc3RfZmlyc3RfZW50cnkoJnJldXNhYmxl X2hlYWQtPmxpc3QsCi0JCQkJCQkgICAgIHN0cnVjdCBsaXN0X3JldXNhYmxlX2lkLAotCQkJCQkJ ICAgICBsaXN0KTsKLQkJCWxpc3RfZGVsKCZ0ZW1wX2hlYWQtPmxpc3QpOwotCQkJa2ZyZWUodGVt cF9oZWFkKTsKLQkJfQotCi0JCS8qIGZyZWVpbmcgaGVhZCAqLwotCQlrZnJlZShyZXVzYWJsZV9o ZWFkKTsKLQl9Ci19Ci0KLWh5cGVyX2RtYWJ1Zl9pZF90IGh5cGVyX2RtYWJ1Zl9nZXRfaGlkKHZv aWQpCi17Ci0Jc3RhdGljIGludCBjb3VudDsKLQloeXBlcl9kbWFidWZfaWRfdCBoaWQ7Ci0Jc3Ry dWN0IGxpc3RfcmV1c2FibGVfaWQgKnJldXNhYmxlX2hlYWQ7Ci0KLQkvKiBmaXJzdCBjYWxsIHRv IGh5cGVyX2RtYWJ1Zl9nZXRfaWQgKi8KLQlpZiAoY291bnQgPT0gMCkgewotCQlyZXVzYWJsZV9o ZWFkID0ga21hbGxvYyhzaXplb2YoKnJldXNhYmxlX2hlYWQpLCBHRlBfS0VSTkVMKTsKLQotCQlp ZiAoIXJldXNhYmxlX2hlYWQpCi0JCQlyZXR1cm4gKGh5cGVyX2RtYWJ1Zl9pZF90KXstMSwgezAs IDAsIDB9IH07Ci0KLQkJLyogbGlzdCBoZWFkIGhhcyBhbiBpbnZhbGlkIGNvdW50ICovCi0JCXJl dXNhYmxlX2hlYWQtPmhpZC5pZCA9IC0xOwotCQlJTklUX0xJU1RfSEVBRCgmcmV1c2FibGVfaGVh ZC0+bGlzdCk7Ci0JCWh5X2Rydl9wcml2LT5pZF9xdWV1ZSA9IHJldXNhYmxlX2hlYWQ7Ci0JfQot Ci0JaGlkID0gZ2V0X3JldXNhYmxlX2hpZCgpOwotCi0JLypjcmVhdGluZyBhIG5ldyBILUlEIG9u bHkgaWYgbm90aGluZyBpbiB0aGUgcmV1c2FibGUgaWQgcXVldWUKLQkgKiBhbmQgY291bnQgaXMg bGVzcyB0aGFuIG1heGltdW0gYWxsb3dlZAotCSAqLwotCWlmIChoaWQuaWQgPT0gLTEgJiYgY291 bnQgPCBIWVBFUl9ETUFCVUZfSURfTUFYKQotCQloaWQuaWQgPSBIWVBFUl9ETUFCVUZfSURfQ1JF QVRFKGh5X2Rydl9wcml2LT5kb21pZCwgY291bnQrKyk7Ci0KLQkvKiByYW5kb20gZGF0YSBlbWJl ZGRlZCBpbiB0aGUgaWQgZm9yIHNlY3VyaXR5ICovCi0JZ2V0X3JhbmRvbV9ieXRlcygmaGlkLnJu Z19rZXlbMF0sIDEyKTsKLQotCXJldHVybiBoaWQ7Ci19Ci0KLWJvb2wgaHlwZXJfZG1hYnVmX2hp ZF9rZXljb21wKGh5cGVyX2RtYWJ1Zl9pZF90IGhpZDEsIGh5cGVyX2RtYWJ1Zl9pZF90IGhpZDIp Ci17Ci0JaW50IGk7Ci0KLQkvKiBjb21wYXJlIGtleXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMzsg aSsrKSB7Ci0JCWlmIChoaWQxLnJuZ19rZXlbaV0gIT0gaGlkMi5ybmdfa2V5W2ldKQotCQkJcmV0 dXJuIGZhbHNlOwotCX0KLQotCXJldHVybiB0cnVlOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy94 ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9pZC5oIGIvZHJpdmVycy94ZW4vaHlwZXJfZG1h YnVmL2h5cGVyX2RtYWJ1Zl9pZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDY5 MGYzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZf aWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgwqkg MjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0gKiBjb3B5IG9m IHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJT b2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byB1c2UsIGNv cHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0 byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAotICog cGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs IHBvcnRpb25zIG9mIHRoZQotICogU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBS T1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IK LSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug QU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCi0gKiBUSEUgQVVUSE9SUyBP UiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBP VEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9S VCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKLSAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9O IFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKLSAqIElOIFRI RSBTT0ZUV0FSRS4KLSAqCi0gKi8KLQotI2lmbmRlZiBfX0hZUEVSX0RNQUJVRl9JRF9IX18KLSNk ZWZpbmUgX19IWVBFUl9ETUFCVUZfSURfSF9fCi0KLSNkZWZpbmUgSFlQRVJfRE1BQlVGX0lEX0NS RUFURShkb21pZCwgY250KSBcCi0JKCgoKGRvbWlkKSAmIDB4RkYpIDw8IDI0KSB8ICgoY250KSAm IDB4RkZGRkZGKSkKLQotI2RlZmluZSBIWVBFUl9ETUFCVUZfRE9NX0lEKGhpZCkgXAotCSgoKGhp ZC5pZCkgPj4gMjQpICYgMHhGRikKLQotLyogY3VycmVudGx5IG1heGltdW0gbnVtYmVyIG9mIGJ1 ZmZlcnMgc2hhcmVkCi0gKiBhdCBhbnkgZ2l2ZW4gbW9tZW50IGlzIGxpbWl0ZWQgdG8gMTAwMAot ICovCi0jZGVmaW5lIEhZUEVSX0RNQUJVRl9JRF9NQVggMTAwMAotCi0vKiBhZGRpbmcgZnJlZWQg aGlkIHRvIHRoZSByZXVzYWJsZSBsaXN0ICovCi12b2lkIGh5cGVyX2RtYWJ1Zl9zdG9yZV9oaWQo aHlwZXJfZG1hYnVmX2lkX3QgaGlkKTsKLQotLyogZnJlZWluZyB0aGUgcmV1c2FzYmxlIGxpc3Qg Ki8KLXZvaWQgaHlwZXJfZG1hYnVmX2ZyZWVfaGlkX2xpc3Qodm9pZCk7Ci0KLS8qIGdldHRpbmcg YSBoaWQgYXZhaWxhYmxlIHRvIHVzZS4gKi8KLWh5cGVyX2RtYWJ1Zl9pZF90IGh5cGVyX2RtYWJ1 Zl9nZXRfaGlkKHZvaWQpOwotCi0vKiBjb21wYXJpbmcgdHdvIGRpZmZlcmVudCBoaWQgKi8KLWJv b2wgaHlwZXJfZG1hYnVmX2hpZF9rZXljb21wKGh5cGVyX2RtYWJ1Zl9pZF90IGhpZDEsIGh5cGVy X2RtYWJ1Zl9pZF90IGhpZDIpOwotCi0jZW5kaWYgLypfX0hZUEVSX0RNQUJVRl9JRF9IKi8KZGlm ZiAtLWdpdCBhL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfaW9jdGwuYyBi L2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfaW9jdGwuYwpkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggY2E2ZWRmMi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3hlbi9o eXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2lvY3RsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3ODYg KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCDCqSAyMDE3IEludGVsIENvcnBvcmF0aW9uCi0gKgot ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBw ZXJzb24gb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRl ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRo ZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0 aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwg ZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29m dHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMg ZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoK LSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Ci0gKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVk IGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCi0gKiBTb2Z0d2Fy ZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS QU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBO T1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8g RVZFTlQgU0hBTEwKLSAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJM RSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwotICog RlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVT RSBPUiBPVEhFUiBERUFMSU5HUwotICogSU4gVEhFIFNPRlRXQVJFLgotICoKLSAqIEF1dGhvcnM6 Ci0gKiAgICBEb25nd29uIEtpbSA8ZG9uZ3dvbi5raW1AaW50ZWwuY29tPgotICogICAgTWF0ZXVz eiBQb2xyb2xhIDxtYXRldXN6eC5wb3Ryb2xhQGludGVsLmNvbT4KLSAqCi0gKi8KLQotI2luY2x1 ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8 bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51 eC9kbWEtYnVmLmg+Ci0jaW5jbHVkZSAiaHlwZXJfZG1hYnVmX2Rydi5oIgotI2luY2x1ZGUgImh5 cGVyX2RtYWJ1Zl9pZC5oIgotI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9zdHJ1Y3QuaCIKLSNpbmNs dWRlICJoeXBlcl9kbWFidWZfaW9jdGwuaCIKLSNpbmNsdWRlICJoeXBlcl9kbWFidWZfbGlzdC5o IgotI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9tc2cuaCIKLSNpbmNsdWRlICJoeXBlcl9kbWFidWZf c2dsX3Byb2MuaCIKLSNpbmNsdWRlICJoeXBlcl9kbWFidWZfb3BzLmgiCi0jaW5jbHVkZSAiaHlw ZXJfZG1hYnVmX3F1ZXJ5LmgiCi0KLXN0YXRpYyBpbnQgaHlwZXJfZG1hYnVmX3R4X2NoX3NldHVw X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBpb2N0bF9o eXBlcl9kbWFidWZfdHhfY2hfc2V0dXAgKnR4X2NoX2F0dHI7Ci0Jc3RydWN0IGh5cGVyX2RtYWJ1 Zl9ia25kX29wcyAqYmtuZF9vcHMgPSBoeV9kcnZfcHJpdi0+YmtuZF9vcHM7Ci0JaW50IHJldCA9 IDA7Ci0KLQlpZiAoIWRhdGEpIHsKLQkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LCAidXNlciBk YXRhIGlzIE5VTExcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JdHhfY2hfYXR0ciA9IChz dHJ1Y3QgaW9jdGxfaHlwZXJfZG1hYnVmX3R4X2NoX3NldHVwICopZGF0YTsKLQotCXJldCA9IGJr bmRfb3BzLT5pbml0X3R4X2NoKHR4X2NoX2F0dHItPnJlbW90ZV9kb21haW4pOwotCi0JcmV0dXJu IHJldDsKLX0KLQotc3RhdGljIGludCBoeXBlcl9kbWFidWZfcnhfY2hfc2V0dXBfaW9jdGwoc3Ry dWN0IGZpbGUgKmZpbHAsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGlvY3RsX2h5cGVyX2RtYWJ1 Zl9yeF9jaF9zZXR1cCAqcnhfY2hfYXR0cjsKLQlzdHJ1Y3QgaHlwZXJfZG1hYnVmX2JrbmRfb3Bz ICpia25kX29wcyA9IGh5X2Rydl9wcml2LT5ia25kX29wczsKLQlpbnQgcmV0ID0gMDsKLQotCWlm ICghZGF0YSkgewotCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsICJ1c2VyIGRhdGEgaXMgTlVM TFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJ4X2NoX2F0dHIgPSAoc3RydWN0IGlv Y3RsX2h5cGVyX2RtYWJ1Zl9yeF9jaF9zZXR1cCAqKWRhdGE7Ci0KLQlyZXQgPSBia25kX29wcy0+ aW5pdF9yeF9jaChyeF9jaF9hdHRyLT5zb3VyY2VfZG9tYWluKTsKLQotCXJldHVybiByZXQ7Ci19 Ci0KLXN0YXRpYyBpbnQgc2VuZF9leHBvcnRfbXNnKHN0cnVjdCBleHBvcnRlZF9zZ3RfaW5mbyAq ZXhwb3J0ZWQsCi0JCQkgICBzdHJ1Y3QgcGFnZXNfaW5mbyAqcGdfaW5mbykKLXsKLQlzdHJ1Y3Qg aHlwZXJfZG1hYnVmX2JrbmRfb3BzICpia25kX29wcyA9IGh5X2Rydl9wcml2LT5ia25kX29wczsK LQlzdHJ1Y3QgaHlwZXJfZG1hYnVmX3JlcSAqcmVxOwotCWludCBvcFtNQVhfTlVNQkVSX09GX09Q RVJBTkRTXSA9IHswfTsKLQlpbnQgcmV0LCBpOwotCi0JLyogbm93IGNyZWF0ZSByZXF1ZXN0IGZv ciBpbXBvcnRlciB2aWEgcmluZyAqLwotCW9wWzBdID0gZXhwb3J0ZWQtPmhpZC5pZDsKLQotCWZv ciAoaSA9IDA7IGkgPCAzOyBpKyspCi0JCW9wW2krMV0gPSBleHBvcnRlZC0+aGlkLnJuZ19rZXlb aV07Ci0KLQlpZiAocGdfaW5mbykgewotCQlvcFs0XSA9IHBnX2luZm8tPm5lbnRzOwotCQlvcFs1 XSA9IHBnX2luZm8tPmZyc3Rfb2ZzdDsKLQkJb3BbNl0gPSBwZ19pbmZvLT5sYXN0X2xlbjsKLQkJ b3BbN10gPSBia25kX29wcy0+c2hhcmVfcGFnZXMocGdfaW5mby0+cGdzLCBleHBvcnRlZC0+cmRv bWlkLAotCQkJCQkgcGdfaW5mby0+bmVudHMsICZleHBvcnRlZC0+cmVmc19pbmZvKTsKLQkJaWYg KG9wWzddIDwgMCkgewotCQkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LCAicGFnZXMgc2hhcmlu ZyBmYWlsZWRcbiIpOwotCQkJcmV0dXJuIG9wWzddOwotCQl9Ci0JfQotCi0Jb3BbOF0gPSBleHBv cnRlZC0+c3pfcHJpdjsKLQotCS8qIGRyaXZlci9hcHBsaWNhdGlvbiBzcGVjaWZpYyBwcml2YXRl IGluZm8gKi8KLQltZW1jcHkoJm9wWzldLCBleHBvcnRlZC0+cHJpdiwgb3BbOF0pOwotCi0JcmVx ID0ga2NhbGxvYygxLCBzaXplb2YoKnJlcSksIEdGUF9LRVJORUwpOwotCi0JaWYgKCFyZXEpCi0J CXJldHVybiAtRU5PTUVNOwotCi0JLyogY29tcG9zaW5nIGEgbWVzc2FnZSB0byB0aGUgaW1wb3J0 ZXIgKi8KLQloeXBlcl9kbWFidWZfY3JlYXRlX3JlcShyZXEsIEhZUEVSX0RNQUJVRl9FWFBPUlQs ICZvcFswXSk7Ci0KLQlyZXQgPSBia25kX29wcy0+c2VuZF9yZXEoZXhwb3J0ZWQtPnJkb21pZCwg cmVxLCB0cnVlKTsKLQotCWtmcmVlKHJlcSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKiBGYXN0 IHBhdGggZXhwb3J0aW5nIHJvdXRpbmUgaW4gY2FzZSBzYW1lIGJ1ZmZlciBpcyBhbHJlYWR5IGV4 cG9ydGVkLgotICogSW4gdGhpcyBmdW5jdGlvbiwgd2Ugc2tpcCBub3JtYWwgZXhwb3J0aW5nIHBy b2Nlc3MgYW5kIGp1c3QgdXBkYXRlCi0gKiBwcml2YXRlIGRhdGEgb24gYm90aCBWTXMgKGltcG9y dGVyIGFuZCBleHBvcnRlcikKLSAqCi0gKiByZXR1cm4gJzEnIGlmIHJlZXhwb3J0IGlzIG5lZWRl ZCwgcmV0dXJuICcwJyBpZiBzdWNjZWVkcywgcmV0dXJuCi0gKiBLZXJuZWwgZXJyb3IgY29kZSBp ZiBzb21ldGhpbmcgZ29lcyB3cm9uZwotICovCi1zdGF0aWMgaW50IGZhc3RwYXRoX2V4cG9ydCho eXBlcl9kbWFidWZfaWRfdCBoaWQsIGludCBzel9wcml2LCBjaGFyICpwcml2KQotewotCWludCBy ZWV4cG9ydCA9IDE7Ci0JaW50IHJldCA9IDA7Ci0Jc3RydWN0IGV4cG9ydGVkX3NndF9pbmZvICpl eHBvcnRlZDsKLQotCWV4cG9ydGVkID0gaHlwZXJfZG1hYnVmX2ZpbmRfZXhwb3J0ZWQoaGlkKTsK LQotCWlmICghZXhwb3J0ZWQpCi0JCXJldHVybiByZWV4cG9ydDsKLQotCWlmIChleHBvcnRlZC0+ dmFsaWQgPT0gZmFsc2UpCi0JCXJldHVybiByZWV4cG9ydDsKLQotCS8qCi0JICogQ2hlY2sgaWYg dW5leHBvcnQgaXMgYWxyZWFkeSBzY2hlZHVsZWQgZm9yIHRoYXQgYnVmZmVyLAotCSAqIGlmIHNv IHRyeSB0byBjYW5jZWwgaXQuIElmIHRoYXQgd2lsbCBmYWlsLCBidWZmZXIgbmVlZHMKLQkgKiB0 byBiZSByZWV4cG9ydCBvbmNlIGFnYWluLgotCSAqLwotCWlmIChleHBvcnRlZC0+dW5leHBvcnRf c2NoZWQpIHsKLQkJaWYgKCFjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmV4cG9ydGVkLT51bmV4 cG9ydCkpCi0JCQlyZXR1cm4gcmVleHBvcnQ7Ci0KLQkJZXhwb3J0ZWQtPnVuZXhwb3J0X3NjaGVk ID0gZmFsc2U7Ci0JfQotCi0JLyogaWYgdGhlcmUncyBhbnkgY2hhbmdlIGluIHNpemUgb2YgcHJp dmF0ZSBkYXRhLgotCSAqIHdlIHJlYWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGF0YSB3aXRo IG5ldyBzaXplCi0JICovCi0JaWYgKHN6X3ByaXYgIT0gZXhwb3J0ZWQtPnN6X3ByaXYpIHsKLQkJ a2ZyZWUoZXhwb3J0ZWQtPnByaXYpOwotCi0JCS8qIHRydW5jYXRpbmcgc2l6ZSAqLwotCQlpZiAo c3pfcHJpdiA+IE1BWF9TSVpFX1BSSVZfREFUQSkKLQkJCWV4cG9ydGVkLT5zel9wcml2ID0gTUFY X1NJWkVfUFJJVl9EQVRBOwotCQllbHNlCi0JCQlleHBvcnRlZC0+c3pfcHJpdiA9IHN6X3ByaXY7 Ci0KLQkJZXhwb3J0ZWQtPnByaXYgPSBrY2FsbG9jKDEsIGV4cG9ydGVkLT5zel9wcml2LAotCQkJ CQkgR0ZQX0tFUk5FTCk7Ci0KLQkJaWYgKCFleHBvcnRlZC0+cHJpdikgewotCQkJaHlwZXJfZG1h YnVmX3JlbW92ZV9leHBvcnRlZChleHBvcnRlZC0+aGlkKTsKLQkJCWh5cGVyX2RtYWJ1Zl9jbGVh bnVwX3NndF9pbmZvKGV4cG9ydGVkLCB0cnVlKTsKLQkJCWtmcmVlKGV4cG9ydGVkKTsKLQkJCXJl dHVybiAtRU5PTUVNOwotCQl9Ci0JfQotCi0JLyogdXBkYXRlIHByaXZhdGUgZGF0YSBpbiBzZ3Rf aW5mbyB3aXRoIG5ldyBvbmVzICovCi0JcmV0ID0gY29weV9mcm9tX3VzZXIoZXhwb3J0ZWQtPnBy aXYsIHByaXYsIGV4cG9ydGVkLT5zel9wcml2KTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoaHlf ZHJ2X3ByaXYtPmRldiwKLQkJCSJGYWlsZWQgdG8gbG9hZCBhIG5ldyBwcml2YXRlIGRhdGFcbiIp OwotCQlyZXQgPSAtRUlOVkFMOwotCX0gZWxzZSB7Ci0JCS8qIHNlbmQgYW4gZXhwb3J0IG1zZyBm b3IgdXBkYXRpbmcgcHJpdiBpbiBpbXBvcnRlciAqLwotCQlyZXQgPSBzZW5kX2V4cG9ydF9tc2co ZXhwb3J0ZWQsIE5VTEwpOwotCi0JCWlmIChyZXQgPCAwKSB7Ci0JCQlkZXZfZXJyKGh5X2Rydl9w cml2LT5kZXYsCi0JCQkJIkZhaWxlZCB0byBzZW5kIGEgbmV3IHByaXZhdGUgZGF0YVxuIik7Ci0J CQlyZXQgPSAtRUJVU1k7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50 IGh5cGVyX2RtYWJ1Zl9leHBvcnRfcmVtb3RlX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lk ICpkYXRhKQotewotCXN0cnVjdCBpb2N0bF9oeXBlcl9kbWFidWZfZXhwb3J0X3JlbW90ZSAqZXhw b3J0X3JlbW90ZV9hdHRyID0KLQkJCShzdHJ1Y3QgaW9jdGxfaHlwZXJfZG1hYnVmX2V4cG9ydF9y ZW1vdGUgKilkYXRhOwotCXN0cnVjdCBkbWFfYnVmICpkbWFfYnVmOwotCXN0cnVjdCBkbWFfYnVm X2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQ7Ci0Jc3RydWN0IHNnX3RhYmxlICpzZ3Q7Ci0Jc3RydWN0 IHBhZ2VzX2luZm8gKnBnX2luZm87Ci0Jc3RydWN0IGV4cG9ydGVkX3NndF9pbmZvICpleHBvcnRl ZDsKLQloeXBlcl9kbWFidWZfaWRfdCBoaWQ7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoaHlfZHJ2 X3ByaXYtPmRvbWlkID09IGV4cG9ydF9yZW1vdGVfYXR0ci0+cmVtb3RlX2RvbWFpbikgewotCQlk ZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCi0JCQkiZXhwb3J0aW5nIHRvIHRoZSBzYW1lIFZNIGlz IG5vdCBwZXJtaXR0ZWRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlkbWFfYnVmID0g ZG1hX2J1Zl9nZXQoZXhwb3J0X3JlbW90ZV9hdHRyLT5kbWFidWZfZmQpOwotCi0JaWYgKElTX0VS UihkbWFfYnVmKSkgewotCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsICJDYW5ub3QgZ2V0IGRt YSBidWZcbiIpOwotCQlyZXR1cm4gUFRSX0VSUihkbWFfYnVmKTsKLQl9Ci0KLQkvKiB3ZSBjaGVj ayBpZiB0aGlzIHNwZWNpZmljIGF0dGFjaG1lbnQgd2FzIGFscmVhZHkgZXhwb3J0ZWQKLQkgKiB0 byB0aGUgc2FtZSBkb21haW4gYW5kIGlmIHllcyBhbmQgaXQncyB2YWxpZCBzZ3RfaW5mbywKLQkg KiBpdCByZXR1cm5zIGh5cGVyX2RtYWJ1Zl9pZCBvZiBwcmUtZXhwb3J0ZWQgc2d0X2luZm8KLQkg Ki8KLQloaWQgPSBoeXBlcl9kbWFidWZfZmluZF9oaWRfZXhwb3J0ZWQoZG1hX2J1ZiwKLQkJCQkJ ICAgICBleHBvcnRfcmVtb3RlX2F0dHItPnJlbW90ZV9kb21haW4pOwotCi0JaWYgKGhpZC5pZCAh PSAtMSkgewotCQlyZXQgPSBmYXN0cGF0aF9leHBvcnQoaGlkLCBleHBvcnRfcmVtb3RlX2F0dHIt PnN6X3ByaXYsCi0JCQkJICAgICAgZXhwb3J0X3JlbW90ZV9hdHRyLT5wcml2KTsKLQotCQkvKiBy ZXR1cm4gaWYgZmFzdHBhdGhfZXhwb3J0IHN1Y2NlZWRzIG9yCi0JCSAqIGdldHMgc29tZSBmYXRh bCBlcnJvcgotCQkgKi8KLQkJaWYgKHJldCA8PSAwKSB7Ci0JCQlkbWFfYnVmX3B1dChkbWFfYnVm KTsKLQkJCWV4cG9ydF9yZW1vdGVfYXR0ci0+aGlkID0gaGlkOwotCQkJcmV0dXJuIHJldDsKLQkJ fQotCX0KLQotCWF0dGFjaG1lbnQgPSBkbWFfYnVmX2F0dGFjaChkbWFfYnVmLCBoeV9kcnZfcHJp di0+ZGV2KTsKLQlpZiAoSVNfRVJSKGF0dGFjaG1lbnQpKSB7Ci0JCWRldl9lcnIoaHlfZHJ2X3By aXYtPmRldiwgImNhbm5vdCBnZXQgYXR0YWNobWVudFxuIik7Ci0JCXJldCA9IFBUUl9FUlIoYXR0 YWNobWVudCk7Ci0JCWdvdG8gZmFpbF9hdHRhY2g7Ci0JfQotCi0Jc2d0ID0gZG1hX2J1Zl9tYXBf YXR0YWNobWVudChhdHRhY2htZW50LCBETUFfQklESVJFQ1RJT05BTCk7Ci0KLQlpZiAoSVNfRVJS KHNndCkpIHsKLQkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LCAiY2Fubm90IG1hcCBhdHRhY2ht ZW50XG4iKTsKLQkJcmV0ID0gUFRSX0VSUihzZ3QpOwotCQlnb3RvIGZhaWxfbWFwX2F0dGFjaG1l bnQ7Ci0JfQotCi0JZXhwb3J0ZWQgPSBrY2FsbG9jKDEsIHNpemVvZigqZXhwb3J0ZWQpLCBHRlBf S0VSTkVMKTsKLQotCWlmICghZXhwb3J0ZWQpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBm YWlsX3NndF9pbmZvX2NyZWF0aW9uOwotCX0KLQotCS8qIHBvc3NpYmxlIHRydW5jYXRpb24gKi8K LQlpZiAoZXhwb3J0X3JlbW90ZV9hdHRyLT5zel9wcml2ID4gTUFYX1NJWkVfUFJJVl9EQVRBKQot CQlleHBvcnRlZC0+c3pfcHJpdiA9IE1BWF9TSVpFX1BSSVZfREFUQTsKLQllbHNlCi0JCWV4cG9y dGVkLT5zel9wcml2ID0gZXhwb3J0X3JlbW90ZV9hdHRyLT5zel9wcml2OwotCi0JLyogY3JlYXRp bmcgYnVmZmVyIGZvciBwcml2YXRlIGRhdGEgb2YgYnVmZmVyICovCi0JaWYgKGV4cG9ydGVkLT5z el9wcml2ICE9IDApIHsKLQkJZXhwb3J0ZWQtPnByaXYgPSBrY2FsbG9jKDEsIGV4cG9ydGVkLT5z el9wcml2LCBHRlBfS0VSTkVMKTsKLQotCQlpZiAoIWV4cG9ydGVkLT5wcml2KSB7Ci0JCQlyZXQg PSAtRU5PTUVNOwotCQkJZ290byBmYWlsX3ByaXZfY3JlYXRpb247Ci0JCX0KLQl9IGVsc2Ugewot CQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsICJzaXplIGlzIDBcbiIpOwotCX0KLQotCWV4cG9y dGVkLT5oaWQgPSBoeXBlcl9kbWFidWZfZ2V0X2hpZCgpOwotCi0JLyogbm8gbW9yZSBleHBvcnRl ZCBkbWFidWYgYWxsb3dlZCAqLwotCWlmIChleHBvcnRlZC0+aGlkLmlkID09IC0xKSB7Ci0JCWRl dl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKLQkJCSJleGNlZWRzIGFsbG93ZWQgbnVtYmVyIG9mIGRt YWJ1ZiB0byBiZSBleHBvcnRlZFxuIik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZmFpbF9z Z3RfaW5mb19jcmVhdGlvbjsKLQl9Ci0KLQlleHBvcnRlZC0+cmRvbWlkID0gZXhwb3J0X3JlbW90 ZV9hdHRyLT5yZW1vdGVfZG9tYWluOwotCWV4cG9ydGVkLT5kbWFfYnVmID0gZG1hX2J1ZjsKLQll eHBvcnRlZC0+dmFsaWQgPSB0cnVlOwotCi0JZXhwb3J0ZWQtPmFjdGl2ZV9zZ3RzID0ga21hbGxv YyhzaXplb2Yoc3RydWN0IHNndF9saXN0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFleHBvcnRlZC0+ YWN0aXZlX3NndHMpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBmYWlsX21hcF9hY3RpdmVf c2d0czsKLQl9Ci0KLQlleHBvcnRlZC0+YWN0aXZlX2F0dGFjaGVkID0ga21hbGxvYyhzaXplb2Yo c3RydWN0IGF0dGFjaG1lbnRfbGlzdCksCi0JCQkJCSAgICBHRlBfS0VSTkVMKTsKLQlpZiAoIWV4 cG9ydGVkLT5hY3RpdmVfYXR0YWNoZWQpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBmYWls X21hcF9hY3RpdmVfYXR0YWNoZWQ7Ci0JfQotCi0JZXhwb3J0ZWQtPnZhX2ttYXBwZWQgPSBrbWFs bG9jKHNpemVvZihzdHJ1Y3Qga21hcF92YWRkcl9saXN0KSwKLQkJCQkgICAgICAgR0ZQX0tFUk5F TCk7Ci0JaWYgKCFleHBvcnRlZC0+dmFfa21hcHBlZCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQln b3RvIGZhaWxfbWFwX3ZhX2ttYXBwZWQ7Ci0JfQotCi0JZXhwb3J0ZWQtPnZhX3ZtYXBwZWQgPSBr bWFsbG9jKHNpemVvZihzdHJ1Y3Qgdm1hcF92YWRkcl9saXN0KSwKLQkJCQkgICAgICAgR0ZQX0tF Uk5FTCk7Ci0JaWYgKCFleHBvcnRlZC0+dmFfdm1hcHBlZCkgewotCQlyZXQgPSAtRU5PTUVNOwot CQlnb3RvIGZhaWxfbWFwX3ZhX3ZtYXBwZWQ7Ci0JfQotCi0JZXhwb3J0ZWQtPmFjdGl2ZV9zZ3Rz LT5zZ3QgPSBzZ3Q7Ci0JZXhwb3J0ZWQtPmFjdGl2ZV9hdHRhY2hlZC0+YXR0YWNoID0gYXR0YWNo bWVudDsKLQlleHBvcnRlZC0+dmFfa21hcHBlZC0+dmFkZHIgPSBOVUxMOwotCWV4cG9ydGVkLT52 YV92bWFwcGVkLT52YWRkciA9IE5VTEw7Ci0KLQkvKiBpbml0aWFsaXplIGxpc3Qgb2Ygc2d0LCBh dHRhY2htZW50IGFuZCB2YWRkciBmb3IgZG1hYnVmIHN5bmMKLQkgKiB2aWEgc2hhZG93IGRtYS1i dWYKLQkgKi8KLQlJTklUX0xJU1RfSEVBRCgmZXhwb3J0ZWQtPmFjdGl2ZV9zZ3RzLT5saXN0KTsK LQlJTklUX0xJU1RfSEVBRCgmZXhwb3J0ZWQtPmFjdGl2ZV9hdHRhY2hlZC0+bGlzdCk7Ci0JSU5J VF9MSVNUX0hFQUQoJmV4cG9ydGVkLT52YV9rbWFwcGVkLT5saXN0KTsKLQlJTklUX0xJU1RfSEVB RCgmZXhwb3J0ZWQtPnZhX3ZtYXBwZWQtPmxpc3QpOwotCi0JLyogY29weSBwcml2YXRlIGRhdGEg dG8gc2d0X2luZm8gKi8KLQlyZXQgPSBjb3B5X2Zyb21fdXNlcihleHBvcnRlZC0+cHJpdiwgZXhw b3J0X3JlbW90ZV9hdHRyLT5wcml2LAotCQkJICAgICBleHBvcnRlZC0+c3pfcHJpdik7Ci0KLQlp ZiAocmV0KSB7Ci0JCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKLQkJCSJmYWlsZWQgdG8gbG9h ZCBwcml2YXRlIGRhdGFcbiIpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGZhaWxfZXhwb3J0 OwotCX0KLQotCXBnX2luZm8gPSBoeXBlcl9kbWFidWZfZXh0X3BncyhzZ3QpOwotCWlmICghcGdf aW5mbykgewotCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCi0JCQkiZmFpbGVkIHRvIGNvbnN0 cnVjdCBwZ19pbmZvXG4iKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBmYWlsX2V4cG9ydDsK LQl9Ci0KLQlleHBvcnRlZC0+bmVudHMgPSBwZ19pbmZvLT5uZW50czsKLQotCS8qIG5vdyByZWdp c3RlciBpdCB0byBleHBvcnQgbGlzdCAqLwotCWh5cGVyX2RtYWJ1Zl9yZWdpc3Rlcl9leHBvcnRl ZChleHBvcnRlZCk7Ci0KLQlleHBvcnRfcmVtb3RlX2F0dHItPmhpZCA9IGV4cG9ydGVkLT5oaWQ7 Ci0KLQlyZXQgPSBzZW5kX2V4cG9ydF9tc2coZXhwb3J0ZWQsIHBnX2luZm8pOwotCi0JaWYgKHJl dCA8IDApIHsKLQkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAotCQkJImZhaWxlZCB0byBzZW5k IG91dCB0aGUgZXhwb3J0IHJlcXVlc3RcbiIpOwotCQlnb3RvIGZhaWxfc2VuZF9yZXF1ZXN0Owot CX0KLQotCS8qIGZyZWUgcGdfaW5mbyAqLwotCWtmcmVlKHBnX2luZm8tPnBncyk7Ci0Ja2ZyZWUo cGdfaW5mbyk7Ci0KLQlleHBvcnRlZC0+ZmlscCA9IGZpbHA7Ci0KLQlyZXR1cm4gcmV0OwotCi0v KiBDbGVhbi11cCBpZiBlcnJvciBvY2N1cnMgKi8KLQotZmFpbF9zZW5kX3JlcXVlc3Q6Ci0JaHlw ZXJfZG1hYnVmX3JlbW92ZV9leHBvcnRlZChleHBvcnRlZC0+aGlkKTsKLQotCS8qIGZyZWUgcGdf aW5mbyAqLwotCWtmcmVlKHBnX2luZm8tPnBncyk7Ci0Ja2ZyZWUocGdfaW5mbyk7Ci0KLWZhaWxf ZXhwb3J0OgotCWtmcmVlKGV4cG9ydGVkLT52YV92bWFwcGVkKTsKLQotZmFpbF9tYXBfdmFfdm1h cHBlZDoKLQlrZnJlZShleHBvcnRlZC0+dmFfa21hcHBlZCk7Ci0KLWZhaWxfbWFwX3ZhX2ttYXBw ZWQ6Ci0Ja2ZyZWUoZXhwb3J0ZWQtPmFjdGl2ZV9hdHRhY2hlZCk7Ci0KLWZhaWxfbWFwX2FjdGl2 ZV9hdHRhY2hlZDoKLQlrZnJlZShleHBvcnRlZC0+YWN0aXZlX3NndHMpOwotCWtmcmVlKGV4cG9y dGVkLT5wcml2KTsKLQotZmFpbF9wcml2X2NyZWF0aW9uOgotCWtmcmVlKGV4cG9ydGVkKTsKLQot ZmFpbF9tYXBfYWN0aXZlX3NndHM6Ci1mYWlsX3NndF9pbmZvX2NyZWF0aW9uOgotCWRtYV9idWZf dW5tYXBfYXR0YWNobWVudChhdHRhY2htZW50LCBzZ3QsCi0JCQkJIERNQV9CSURJUkVDVElPTkFM KTsKLQotZmFpbF9tYXBfYXR0YWNobWVudDoKLQlkbWFfYnVmX2RldGFjaChkbWFfYnVmLCBhdHRh Y2htZW50KTsKLQotZmFpbF9hdHRhY2g6Ci0JZG1hX2J1Zl9wdXQoZG1hX2J1Zik7Ci0KLQlyZXR1 cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGh5cGVyX2RtYWJ1Zl9leHBvcnRfZmRfaW9jdGwoc3Ry dWN0IGZpbGUgKmZpbHAsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGlvY3RsX2h5cGVyX2RtYWJ1 Zl9leHBvcnRfZmQgKmV4cG9ydF9mZF9hdHRyID0KLQkJCShzdHJ1Y3QgaW9jdGxfaHlwZXJfZG1h YnVmX2V4cG9ydF9mZCAqKWRhdGE7Ci0Jc3RydWN0IGh5cGVyX2RtYWJ1Zl9ia25kX29wcyAqYmtu ZF9vcHMgPSBoeV9kcnZfcHJpdi0+YmtuZF9vcHM7Ci0Jc3RydWN0IGltcG9ydGVkX3NndF9pbmZv ICppbXBvcnRlZDsKLQlzdHJ1Y3QgaHlwZXJfZG1hYnVmX3JlcSAqcmVxOwotCXN0cnVjdCBwYWdl ICoqZGF0YV9wZ3M7Ci0JaW50IG9wWzRdOwotCWludCBpOwotCWludCByZXQgPSAwOwotCi0JZGV2 X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LCAiJXMgZW50cnlcbiIsIF9fZnVuY19fKTsKLQotCS8qIGxv b2sgZm9yIGRtYWJ1ZiBmb3IgdGhlIGlkICovCi0JaW1wb3J0ZWQgPSBoeXBlcl9kbWFidWZfZmlu ZF9pbXBvcnRlZChleHBvcnRfZmRfYXR0ci0+aGlkKTsKLQotCS8qIGNhbid0IGZpbmQgc2d0IGZy b20gdGhlIHRhYmxlICovCi0JaWYgKCFpbXBvcnRlZCkgewotCQlkZXZfZXJyKGh5X2Rydl9wcml2 LT5kZXYsICJjYW4ndCBmaW5kIHRoZSBlbnRyeVxuIik7Ci0JCXJldHVybiAtRU5PRU5UOwotCX0K LQotCW11dGV4X2xvY2soJmh5X2Rydl9wcml2LT5sb2NrKTsKLQotCWltcG9ydGVkLT5pbXBvcnRl cnMrKzsKLQotCS8qIHNlbmQgbm90aWZpY2F0aW9uIGZvciBleHBvcnRfZmQgdG8gZXhwb3J0ZXIg Ki8KLQlvcFswXSA9IGltcG9ydGVkLT5oaWQuaWQ7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsr KQotCQlvcFtpKzFdID0gaW1wb3J0ZWQtPmhpZC5ybmdfa2V5W2ldOwotCi0JZGV2X2RiZyhoeV9k cnZfcHJpdi0+ZGV2LCAiRXhwb3J0IEZEIG9mIGJ1ZmZlciB7aWQ6JWQga2V5OiVkICVkICVkfVxu IiwKLQkJaW1wb3J0ZWQtPmhpZC5pZCwgaW1wb3J0ZWQtPmhpZC5ybmdfa2V5WzBdLAotCQlpbXBv cnRlZC0+aGlkLnJuZ19rZXlbMV0sIGltcG9ydGVkLT5oaWQucm5nX2tleVsyXSk7Ci0KLQlyZXEg PSBrY2FsbG9jKDEsIHNpemVvZigqcmVxKSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIXJlcSkgewot CQltdXRleF91bmxvY2soJmh5X2Rydl9wcml2LT5sb2NrKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0J fQotCi0JaHlwZXJfZG1hYnVmX2NyZWF0ZV9yZXEocmVxLCBIWVBFUl9ETUFCVUZfRVhQT1JUX0ZE LCAmb3BbMF0pOwotCi0JcmV0ID0gYmtuZF9vcHMtPnNlbmRfcmVxKEhZUEVSX0RNQUJVRl9ET01f SUQoaW1wb3J0ZWQtPmhpZCksIHJlcSwgdHJ1ZSk7Ci0KLQlpZiAocmV0IDwgMCkgewotCQkvKiBp biBjYXNlIG9mIHRpbWVvdXQgb3RoZXIgZW5kIGV2ZW50dWFsbHkgd2lsbCByZWNlaXZlIHJlcXVl c3QsCi0JCSAqIHNvIHdlIG5lZWQgdG8gdW5kbyBpdAotCQkgKi8KLQkJaHlwZXJfZG1hYnVmX2Ny ZWF0ZV9yZXEocmVxLCBIWVBFUl9ETUFCVUZfRVhQT1JUX0ZEX0ZBSUxFRCwKLQkJCQkJJm9wWzBd KTsKLQkJYmtuZF9vcHMtPnNlbmRfcmVxKEhZUEVSX0RNQUJVRl9ET01fSUQoaW1wb3J0ZWQtPmhp ZCksIHJlcSwgZmFsc2UpOwotCQlrZnJlZShyZXEpOwotCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5k ZXYsCi0JCQkiRmFpbGVkIHRvIGNyZWF0ZSBzZ3Qgb3Igbm90aWZ5IGV4cG9ydGVyXG4iKTsKLQkJ aW1wb3J0ZWQtPmltcG9ydGVycy0tOwotCQltdXRleF91bmxvY2soJmh5X2Rydl9wcml2LT5sb2Nr KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlrZnJlZShyZXEpOwotCi0JaWYgKHJldCA9PSBIWVBF Ul9ETUFCVUZfUkVRX0VSUk9SKSB7Ci0JCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKLQkJCSJC dWZmZXIgaW52YWxpZCB7aWQ6JWQga2V5OiVkICVkICVkfSwgY2Fubm90IGltcG9ydFxuIiwKLQkJ CWltcG9ydGVkLT5oaWQuaWQsIGltcG9ydGVkLT5oaWQucm5nX2tleVswXSwKLQkJCWltcG9ydGVk LT5oaWQucm5nX2tleVsxXSwgaW1wb3J0ZWQtPmhpZC5ybmdfa2V5WzJdKTsKLQotCQlpbXBvcnRl ZC0+aW1wb3J0ZXJzLS07Ci0JCW11dGV4X3VubG9jaygmaHlfZHJ2X3ByaXYtPmxvY2spOwotCQly ZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXQgPSAwOwotCi0JZGV2X2RiZyhoeV9kcnZfcHJpdi0+ ZGV2LAotCQkiRm91bmQgYnVmZmVyIGdyZWYgJWQgb2ZmICVkXG4iLAotCQlpbXBvcnRlZC0+cmVm X2hhbmRsZSwgaW1wb3J0ZWQtPmZyc3Rfb2ZzdCk7Ci0KLQlkZXZfZGJnKGh5X2Rydl9wcml2LT5k ZXYsCi0JCSJsYXN0IGxlbiAlZCBuZW50cyAlZCBkb21haW4gJWRcbiIsCi0JCWltcG9ydGVkLT5s YXN0X2xlbiwgaW1wb3J0ZWQtPm5lbnRzLAotCQlIWVBFUl9ETUFCVUZfRE9NX0lEKGltcG9ydGVk LT5oaWQpKTsKLQotCWlmICghaW1wb3J0ZWQtPnNndCkgewotCQlkZXZfZGJnKGh5X2Rydl9wcml2 LT5kZXYsCi0JCQkiYnVmZmVyIHtpZDolZCBrZXk6JWQgJWQgJWR9IHBhZ2VzIG5vdCBtYXBwZWQg eWV0XG4iLAotCQkJaW1wb3J0ZWQtPmhpZC5pZCwgaW1wb3J0ZWQtPmhpZC5ybmdfa2V5WzBdLAot CQkJaW1wb3J0ZWQtPmhpZC5ybmdfa2V5WzFdLCBpbXBvcnRlZC0+aGlkLnJuZ19rZXlbMl0pOwot Ci0JCWRhdGFfcGdzID0gYmtuZF9vcHMtPm1hcF9zaGFyZWRfcGFnZXMoaW1wb3J0ZWQtPnJlZl9o YW5kbGUsCi0JCQkJCUhZUEVSX0RNQUJVRl9ET01fSUQoaW1wb3J0ZWQtPmhpZCksCi0JCQkJCWlt cG9ydGVkLT5uZW50cywKLQkJCQkJJmltcG9ydGVkLT5yZWZzX2luZm8pOwotCi0JCWlmICghZGF0 YV9wZ3MpIHsKLQkJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKLQkJCQkiY2FuJ3QgbWFwIHBh Z2VzIGhpZCB7aWQ6JWQga2V5OiVkICVkICVkfVxuIiwKLQkJCQlpbXBvcnRlZC0+aGlkLmlkLCBp bXBvcnRlZC0+aGlkLnJuZ19rZXlbMF0sCi0JCQkJaW1wb3J0ZWQtPmhpZC5ybmdfa2V5WzFdLAot CQkJCWltcG9ydGVkLT5oaWQucm5nX2tleVsyXSk7Ci0KLQkJCWltcG9ydGVkLT5pbXBvcnRlcnMt LTsKLQotCQkJcmVxID0ga2NhbGxvYygxLCBzaXplb2YoKnJlcSksIEdGUF9LRVJORUwpOwotCi0J CQlpZiAoIXJlcSkgewotCQkJCW11dGV4X3VubG9jaygmaHlfZHJ2X3ByaXYtPmxvY2spOwotCQkJ CXJldHVybiAtRU5PTUVNOwotCQkJfQotCi0JCQloeXBlcl9kbWFidWZfY3JlYXRlX3JlcShyZXEs Ci0JCQkJCQlIWVBFUl9ETUFCVUZfRVhQT1JUX0ZEX0ZBSUxFRCwKLQkJCQkJCSZvcFswXSk7Ci0J CQlia25kX29wcy0+c2VuZF9yZXEoSFlQRVJfRE1BQlVGX0RPTV9JRChpbXBvcnRlZC0+aGlkKSwg cmVxLAotCQkJCQkJCSAgZmFsc2UpOwotCQkJa2ZyZWUocmVxKTsKLQkJCW11dGV4X3VubG9jaygm aHlfZHJ2X3ByaXYtPmxvY2spOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlpbXBvcnRl ZC0+c2d0ID0gaHlwZXJfZG1hYnVmX2NyZWF0ZV9zZ3QoZGF0YV9wZ3MsCi0JCQkJCQkJaW1wb3J0 ZWQtPmZyc3Rfb2ZzdCwKLQkJCQkJCQlpbXBvcnRlZC0+bGFzdF9sZW4sCi0JCQkJCQkJaW1wb3J0 ZWQtPm5lbnRzKTsKLQotCX0KLQotCWV4cG9ydF9mZF9hdHRyLT5mZCA9IGh5cGVyX2RtYWJ1Zl9l eHBvcnRfZmQoaW1wb3J0ZWQsCi0JCQkJCQkgICAgZXhwb3J0X2ZkX2F0dHItPmZsYWdzKTsKLQot CWlmIChleHBvcnRfZmRfYXR0ci0+ZmQgPCAwKSB7Ci0JCS8qIGZhaWwgdG8gZ2V0IGZkICovCi0J CXJldCA9IGV4cG9ydF9mZF9hdHRyLT5mZDsKLQl9Ci0KLQltdXRleF91bmxvY2soJmh5X2Rydl9w cml2LT5sb2NrKTsKLQotCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwgIiVzIGV4aXRcbiIsIF9f ZnVuY19fKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKiB1bmV4cG9ydCBkbWFidWYgZnJvbSB0aGUg ZGF0YWJhc2UgYW5kIHNlbmQgaW50IHJlcSB0byB0aGUgc291cmNlIGRvbWFpbgotICogdG8gdW5t YXAgaXQuCi0gKi8KLXN0YXRpYyB2b2lkIGRlbGF5ZWRfdW5leHBvcnQoc3RydWN0IHdvcmtfc3Ry dWN0ICp3b3JrKQotewotCXN0cnVjdCBoeXBlcl9kbWFidWZfcmVxICpyZXE7Ci0Jc3RydWN0IGh5 cGVyX2RtYWJ1Zl9ia25kX29wcyAqYmtuZF9vcHMgPSBoeV9kcnZfcHJpdi0+YmtuZF9vcHM7Ci0J c3RydWN0IGV4cG9ydGVkX3NndF9pbmZvICpleHBvcnRlZCA9Ci0JCWNvbnRhaW5lcl9vZih3b3Jr LCBzdHJ1Y3QgZXhwb3J0ZWRfc2d0X2luZm8sIHVuZXhwb3J0LndvcmspOwotCWludCBvcFs0XTsK LQlpbnQgaSwgcmV0OwotCi0JaWYgKCFleHBvcnRlZCkKLQkJcmV0dXJuOwotCi0JZGV2X2RiZyho eV9kcnZfcHJpdi0+ZGV2LAotCQkiTWFya2luZyBidWZmZXIge2lkOiVkIGtleTolZCAlZCAlZH0g YXMgaW52YWxpZFxuIiwKLQkJZXhwb3J0ZWQtPmhpZC5pZCwgZXhwb3J0ZWQtPmhpZC5ybmdfa2V5 WzBdLAotCQlleHBvcnRlZC0+aGlkLnJuZ19rZXlbMV0sIGV4cG9ydGVkLT5oaWQucm5nX2tleVsy XSk7Ci0KLQkvKiBubyBsb25nZXIgdmFsaWQgKi8KLQlleHBvcnRlZC0+dmFsaWQgPSBmYWxzZTsK LQotCXJlcSA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpyZXEpLCBHRlBfS0VSTkVMKTsKLQotCWlmICgh cmVxKQotCQlyZXR1cm47Ci0KLQlvcFswXSA9IGV4cG9ydGVkLT5oaWQuaWQ7Ci0KLQlmb3IgKGkg PSAwOyBpIDwgMzsgaSsrKQotCQlvcFtpKzFdID0gZXhwb3J0ZWQtPmhpZC5ybmdfa2V5W2ldOwot Ci0JaHlwZXJfZG1hYnVmX2NyZWF0ZV9yZXEocmVxLCBIWVBFUl9ETUFCVUZfTk9USUZZX1VORVhQ T1JULCAmb3BbMF0pOwotCi0JLyogTm93IHNlbmQgdW5leHBvcnQgcmVxdWVzdCB0byByZW1vdGUg ZG9tYWluLCBtYXJraW5nCi0JICogdGhhdCBidWZmZXIgc2hvdWxkIG5vdCBiZSB1c2VkIGFueW1v cmUKLQkgKi8KLQlyZXQgPSBia25kX29wcy0+c2VuZF9yZXEoZXhwb3J0ZWQtPnJkb21pZCwgcmVx LCB0cnVlKTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCi0J CQkidW5leHBvcnQgbWVzc2FnZSBmb3IgYnVmZmVyIHtpZDolZCBrZXk6JWQgJWQgJWR9IGZhaWxl ZFxuIiwKLQkJCWV4cG9ydGVkLT5oaWQuaWQsIGV4cG9ydGVkLT5oaWQucm5nX2tleVswXSwKLQkJ CWV4cG9ydGVkLT5oaWQucm5nX2tleVsxXSwgZXhwb3J0ZWQtPmhpZC5ybmdfa2V5WzJdKTsKLQl9 Ci0KLQlrZnJlZShyZXEpOwotCWV4cG9ydGVkLT51bmV4cG9ydF9zY2hlZCA9IGZhbHNlOwotCi0J LyogSW1tZWRpYXRlbHkgY2xlYW4tdXAgaWYgaXQgaGFzIG5ldmVyIGJlZW4gZXhwb3J0ZWQgYnkg aW1wb3J0ZXIKLQkgKiAoc28gbm8gU0dUIGlzIGNvbnN0cnVjdGVkIG9uIGltcG9ydGVyKS4KLQkg KiBjbGVhbiBpdCB1cCBsYXRlciBpbiByZW1vdGUgc3luYyB3aGVuIGZpbmFsIHJlbGVhc2Ugb3Bz Ci0JICogaXMgY2FsbGVkIChpbXBvcnRlciBkb2VzIHRoaXMgb25seSB3aGVuIHRoZXJlJ3Mgbm8K LQkgKiBubyBjb25zdW1lciBvZiBsb2NhbGx5IGV4cG9ydGVkIEZEcykKLQkgKi8KLQlpZiAoZXhw b3J0ZWQtPmFjdGl2ZSA9PSAwKSB7Ci0JCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwKLQkJCSJj bGFuaW5nIHVwIGJ1ZmZlciB7aWQ6JWQga2V5OiVkICVkICVkfSBjb21wbGV0bHlcbiIsCi0JCQll eHBvcnRlZC0+aGlkLmlkLCBleHBvcnRlZC0+aGlkLnJuZ19rZXlbMF0sCi0JCQlleHBvcnRlZC0+ aGlkLnJuZ19rZXlbMV0sIGV4cG9ydGVkLT5oaWQucm5nX2tleVsyXSk7Ci0KLQkJaHlwZXJfZG1h YnVmX2NsZWFudXBfc2d0X2luZm8oZXhwb3J0ZWQsIGZhbHNlKTsKLQkJaHlwZXJfZG1hYnVmX3Jl bW92ZV9leHBvcnRlZChleHBvcnRlZC0+aGlkKTsKLQotCQkvKiByZWdpc3RlciBoeXBlcl9kbWFi dWZfaWQgdG8gdGhlIGxpc3QgZm9yIHJldXNlICovCi0JCWh5cGVyX2RtYWJ1Zl9zdG9yZV9oaWQo ZXhwb3J0ZWQtPmhpZCk7Ci0KLQkJaWYgKGV4cG9ydGVkLT5zel9wcml2ID4gMCAmJiAhZXhwb3J0 ZWQtPnByaXYpCi0JCQlrZnJlZShleHBvcnRlZC0+cHJpdik7Ci0KLQkJa2ZyZWUoZXhwb3J0ZWQp OwotCX0KLX0KLQotLyogU2NoZWR1bGUgdW5leHBvcnQgb2YgZG1hYnVmLgotICovCi1pbnQgaHlw ZXJfZG1hYnVmX3VuZXhwb3J0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpkYXRhKQot ewotCXN0cnVjdCBpb2N0bF9oeXBlcl9kbWFidWZfdW5leHBvcnQgKnVuZXhwb3J0X2F0dHIgPQot CQkJKHN0cnVjdCBpb2N0bF9oeXBlcl9kbWFidWZfdW5leHBvcnQgKilkYXRhOwotCXN0cnVjdCBl eHBvcnRlZF9zZ3RfaW5mbyAqZXhwb3J0ZWQ7Ci0KLQlkZXZfZGJnKGh5X2Rydl9wcml2LT5kZXYs ICIlcyBlbnRyeVxuIiwgX19mdW5jX18pOwotCi0JLyogZmluZCBkbWFidWYgaW4gZXhwb3J0IGxp c3QgKi8KLQlleHBvcnRlZCA9IGh5cGVyX2RtYWJ1Zl9maW5kX2V4cG9ydGVkKHVuZXhwb3J0X2F0 dHItPmhpZCk7Ci0KLQlkZXZfZGJnKGh5X2Rydl9wcml2LT5kZXYsCi0JCSJzY2hlZHVsaW5nIHVu ZXhwb3J0IG9mIGJ1ZmZlciB7aWQ6JWQga2V5OiVkICVkICVkfVxuIiwKLQkJdW5leHBvcnRfYXR0 ci0+aGlkLmlkLCB1bmV4cG9ydF9hdHRyLT5oaWQucm5nX2tleVswXSwKLQkJdW5leHBvcnRfYXR0 ci0+aGlkLnJuZ19rZXlbMV0sIHVuZXhwb3J0X2F0dHItPmhpZC5ybmdfa2V5WzJdKTsKLQotCS8q IGZhaWxlZCB0byBmaW5kIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gZXhwb3J0IGxpc3QgKi8KLQlp ZiAoZXhwb3J0ZWQgPT0gTlVMTCkgewotCQl1bmV4cG9ydF9hdHRyLT5zdGF0dXMgPSAtRU5PRU5U OwotCQlyZXR1cm4gLUVOT0VOVDsKLQl9Ci0KLQlpZiAoZXhwb3J0ZWQtPnVuZXhwb3J0X3NjaGVk KQotCQlyZXR1cm4gMDsKLQotCWV4cG9ydGVkLT51bmV4cG9ydF9zY2hlZCA9IHRydWU7Ci0JSU5J VF9ERUxBWUVEX1dPUksoJmV4cG9ydGVkLT51bmV4cG9ydCwgZGVsYXllZF91bmV4cG9ydCk7Ci0J c2NoZWR1bGVfZGVsYXllZF93b3JrKCZleHBvcnRlZC0+dW5leHBvcnQsCi0JCQkgICAgICBtc2Vj c190b19qaWZmaWVzKHVuZXhwb3J0X2F0dHItPmRlbGF5X21zKSk7Ci0KLQlkZXZfZGJnKGh5X2Ry dl9wcml2LT5kZXYsICIlcyBleGl0XG4iLCBfX2Z1bmNfXyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0 YXRpYyBpbnQgaHlwZXJfZG1hYnVmX3F1ZXJ5X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lk ICpkYXRhKQotewotCXN0cnVjdCBpb2N0bF9oeXBlcl9kbWFidWZfcXVlcnkgKnF1ZXJ5X2F0dHIg PQotCQkJKHN0cnVjdCBpb2N0bF9oeXBlcl9kbWFidWZfcXVlcnkgKilkYXRhOwotCXN0cnVjdCBl eHBvcnRlZF9zZ3RfaW5mbyAqZXhwb3J0ZWQgPSBOVUxMOwotCXN0cnVjdCBpbXBvcnRlZF9zZ3Rf aW5mbyAqaW1wb3J0ZWQgPSBOVUxMOwotCWludCByZXQgPSAwOwotCi0JaWYgKEhZUEVSX0RNQUJV Rl9ET01fSUQocXVlcnlfYXR0ci0+aGlkKSA9PSBoeV9kcnZfcHJpdi0+ZG9taWQpIHsKLQkJLyog cXVlcnkgZm9yIGV4cG9ydGVkIGRtYWJ1ZiAqLwotCQlleHBvcnRlZCA9IGh5cGVyX2RtYWJ1Zl9m aW5kX2V4cG9ydGVkKHF1ZXJ5X2F0dHItPmhpZCk7Ci0JCWlmIChleHBvcnRlZCkgewotCQkJcmV0 ID0gaHlwZXJfZG1hYnVmX3F1ZXJ5X2V4cG9ydGVkKGV4cG9ydGVkLAotCQkJCQkJCSAgcXVlcnlf YXR0ci0+aXRlbSwKLQkJCQkJCQkgICZxdWVyeV9hdHRyLT5pbmZvKTsKLQkJfSBlbHNlIHsKLQkJ CWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKLQkJCQkiaGlkIHtpZDolZCBrZXk6JWQgJWQgJWR9 IG5vdCBpbiBleHAgbGlzdFxuIiwKLQkJCQlxdWVyeV9hdHRyLT5oaWQuaWQsCi0JCQkJcXVlcnlf YXR0ci0+aGlkLnJuZ19rZXlbMF0sCi0JCQkJcXVlcnlfYXR0ci0+aGlkLnJuZ19rZXlbMV0sCi0J CQkJcXVlcnlfYXR0ci0+aGlkLnJuZ19rZXlbMl0pOwotCQkJcmV0dXJuIC1FTk9FTlQ7Ci0JCX0K LQl9IGVsc2UgewotCQkvKiBxdWVyeSBmb3IgaW1wb3J0ZWQgZG1hYnVmICovCi0JCWltcG9ydGVk ID0gaHlwZXJfZG1hYnVmX2ZpbmRfaW1wb3J0ZWQocXVlcnlfYXR0ci0+aGlkKTsKLQkJaWYgKGlt cG9ydGVkKSB7Ci0JCQlyZXQgPSBoeXBlcl9kbWFidWZfcXVlcnlfaW1wb3J0ZWQoaW1wb3J0ZWQs Ci0JCQkJCQkJICBxdWVyeV9hdHRyLT5pdGVtLAotCQkJCQkJCSAgJnF1ZXJ5X2F0dHItPmluZm8p OwotCQl9IGVsc2UgewotCQkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAotCQkJCSJoaWQge2lk OiVkIGtleTolZCAlZCAlZH0gbm90IGluIGltcCBsaXN0XG4iLAotCQkJCXF1ZXJ5X2F0dHItPmhp ZC5pZCwKLQkJCQlxdWVyeV9hdHRyLT5oaWQucm5nX2tleVswXSwKLQkJCQlxdWVyeV9hdHRyLT5o aWQucm5nX2tleVsxXSwKLQkJCQlxdWVyeV9hdHRyLT5oaWQucm5nX2tleVsyXSk7Ci0JCQlyZXR1 cm4gLUVOT0VOVDsKLQkJfQotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLWNvbnN0IHN0cnVjdCBo eXBlcl9kbWFidWZfaW9jdGxfZGVzYyBoeXBlcl9kbWFidWZfaW9jdGxzW10gPSB7Ci0JSFlQRVJf RE1BQlVGX0lPQ1RMX0RFRihJT0NUTF9IWVBFUl9ETUFCVUZfVFhfQ0hfU0VUVVAsCi0JCQkgICAg ICAgaHlwZXJfZG1hYnVmX3R4X2NoX3NldHVwX2lvY3RsLCAwKSwKLQlIWVBFUl9ETUFCVUZfSU9D VExfREVGKElPQ1RMX0hZUEVSX0RNQUJVRl9SWF9DSF9TRVRVUCwKLQkJCSAgICAgICBoeXBlcl9k bWFidWZfcnhfY2hfc2V0dXBfaW9jdGwsIDApLAotCUhZUEVSX0RNQUJVRl9JT0NUTF9ERUYoSU9D VExfSFlQRVJfRE1BQlVGX0VYUE9SVF9SRU1PVEUsCi0JCQkgICAgICAgaHlwZXJfZG1hYnVmX2V4 cG9ydF9yZW1vdGVfaW9jdGwsIDApLAotCUhZUEVSX0RNQUJVRl9JT0NUTF9ERUYoSU9DVExfSFlQ RVJfRE1BQlVGX0VYUE9SVF9GRCwKLQkJCSAgICAgICBoeXBlcl9kbWFidWZfZXhwb3J0X2ZkX2lv Y3RsLCAwKSwKLQlIWVBFUl9ETUFCVUZfSU9DVExfREVGKElPQ1RMX0hZUEVSX0RNQUJVRl9VTkVY UE9SVCwKLQkJCSAgICAgICBoeXBlcl9kbWFidWZfdW5leHBvcnRfaW9jdGwsIDApLAotCUhZUEVS X0RNQUJVRl9JT0NUTF9ERUYoSU9DVExfSFlQRVJfRE1BQlVGX1FVRVJZLAotCQkJICAgICAgIGh5 cGVyX2RtYWJ1Zl9xdWVyeV9pb2N0bCwgMCksCi19OwotCi1sb25nIGh5cGVyX2RtYWJ1Zl9pb2N0 bChzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcg cGFyYW0pCi17Ci0JY29uc3Qgc3RydWN0IGh5cGVyX2RtYWJ1Zl9pb2N0bF9kZXNjICppb2N0bCA9 IE5VTEw7Ci0JdW5zaWduZWQgaW50IG5yID0gX0lPQ19OUihjbWQpOwotCWludCByZXQ7Ci0JaHlw ZXJfZG1hYnVmX2lvY3RsX3QgZnVuYzsKLQljaGFyICprZGF0YTsKLQotCWlmIChuciA+IEFSUkFZ X1NJWkUoaHlwZXJfZG1hYnVmX2lvY3RscykpIHsKLQkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2 LCAiaW52YWxpZCBpb2N0bFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlvY3RsID0g Jmh5cGVyX2RtYWJ1Zl9pb2N0bHNbbnJdOwotCi0JZnVuYyA9IGlvY3RsLT5mdW5jOwotCi0JaWYg KHVubGlrZWx5KCFmdW5jKSkgewotCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsICJubyBmdW5j dGlvblxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWtkYXRhID0ga21hbGxvYyhfSU9D X1NJWkUoY21kKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFrZGF0YSkKLQkJcmV0dXJuIC1FTk9NRU07 Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoa2RhdGEsICh2b2lkIF9fdXNlciAqKXBhcmFtLAotCQkJ ICAgX0lPQ19TSVpFKGNtZCkpICE9IDApIHsKLQkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAot CQkJImZhaWxlZCB0byBjb3B5IGZyb20gdXNlciBhcmd1bWVudHNcbiIpOwotCQlyZXQgPSAtRUZB VUxUOwotCQlnb3RvIGlvY3RsX2Vycm9yOwotCX0KLQotCXJldCA9IGZ1bmMoZmlscCwga2RhdGEp OwotCi0JaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilwYXJhbSwga2RhdGEsCi0JCQkg X0lPQ19TSVpFKGNtZCkpICE9IDApIHsKLQkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAotCQkJ ImZhaWxlZCB0byBjb3B5IHRvIHVzZXIgYXJndW1lbnRzXG4iKTsKLQkJcmV0ID0gLUVGQVVMVDsK LQkJZ290byBpb2N0bF9lcnJvcjsKLQl9Ci0KLWlvY3RsX2Vycm9yOgotCWtmcmVlKGtkYXRhKTsK LQotCXJldHVybiByZXQ7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYv aHlwZXJfZG1hYnVmX2lvY3RsLmggYi9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlwZXJfZG1h YnVmX2lvY3RsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5OTFhODcuLjAwMDAw MDAKLS0tIGEvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9pb2N0bC5oCisr KyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCDCqSAyMDE3IElu dGVsIENvcnBvcmF0aW9uCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJl ZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBz b2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJl IiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNs dWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBz ZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9t IHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBm b2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Ci0gKiBwYXJhZ3Jh cGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlv bnMgb2YgdGhlCi0gKiBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg IkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1Q TElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9O SU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBBVVRIT1JTIE9SIENPUFlS SUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0g KiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9U SEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU SEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwotICogSU4gVEhFIFNPRlRX QVJFLgotICoKLSAqLwotCi0jaWZuZGVmIF9fSFlQRVJfRE1BQlVGX0lPQ1RMX0hfXwotI2RlZmlu ZSBfX0hZUEVSX0RNQUJVRl9JT0NUTF9IX18KLQotdHlwZWRlZiBpbnQgKCpoeXBlcl9kbWFidWZf aW9jdGxfdCkoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKmRhdGEpOwotCi1zdHJ1Y3QgaHlwZXJf ZG1hYnVmX2lvY3RsX2Rlc2MgewotCXVuc2lnbmVkIGludCBjbWQ7Ci0JaW50IGZsYWdzOwotCWh5 cGVyX2RtYWJ1Zl9pb2N0bF90IGZ1bmM7Ci0JY29uc3QgY2hhciAqbmFtZTsKLX07Ci0KLSNkZWZp bmUgSFlQRVJfRE1BQlVGX0lPQ1RMX0RFRihpb2N0bCwgX2Z1bmMsIF9mbGFncykJXAotCVtfSU9D X05SKGlvY3RsKV0gPSB7CQkJCVwKLQkJCS5jbWQgPSBpb2N0bCwJCQlcCi0JCQkuZnVuYyA9IF9m dW5jLAkJCVwKLQkJCS5mbGFncyA9IF9mbGFncywJCVwKLQkJCS5uYW1lID0gI2lvY3RsCQkJXAot CX0KLQotbG9uZyBoeXBlcl9kbWFidWZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCi0JCQl1bnNp Z25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIHBhcmFtKTsKLQotaW50IGh5cGVyX2RtYWJ1Zl91 bmV4cG9ydF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqZGF0YSk7Ci0KLSNlbmRpZiAv L19fSFlQRVJfRE1BQlVGX0lPQ1RMX0hfXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vaHlwZXJf ZG1hYnVmL2h5cGVyX2RtYWJ1Zl9saXN0LmMgYi9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlw ZXJfZG1hYnVmX2xpc3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJhNmQxZC4u MDAwMDAwMAotLS0gYS9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2xpc3Qu YworKysgL2Rldi9udWxsCkBAIC0xLDI5MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IMKpIDIw MTcgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVk LCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0 aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29m dHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5 LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5k L29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRv IHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8g dGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90 aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKLSAqIHBh cmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw b3J0aW9ucyBvZiB0aGUKLSAqIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0g KiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO RCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIEFVVEhPUlMgT1Ig Q09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RI RVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQg T1IgT1RIRVJXSVNFLCBBUklTSU5HCi0gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCi0gKiBJTiBUSEUg U09GVFdBUkUuCi0gKgotICogQXV0aG9yczoKLSAqICAgIERvbmd3b24gS2ltIDxkb25nd29uLmtp bUBpbnRlbC5jb20+Ci0gKiAgICBNYXRldXN6IFBvbHJvbGEgPG1hdGV1c3p4LnBvdHJvbGFAaW50 ZWwuY29tPgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8 bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgv Y2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2hhc2h0YWJsZS5oPgotI2luY2x1ZGUgImh5cGVyX2Rt YWJ1Zl9kcnYuaCIKLSNpbmNsdWRlICJoeXBlcl9kbWFidWZfbGlzdC5oIgotI2luY2x1ZGUgImh5 cGVyX2RtYWJ1Zl9pZC5oIgotI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9ldmVudC5oIgotCi1ERUNM QVJFX0hBU0hUQUJMRShoeXBlcl9kbWFidWZfaGFzaF9pbXBvcnRlZCwgTUFYX0VOVFJZX0lNUE9S VEVEKTsKLURFQ0xBUkVfSEFTSFRBQkxFKGh5cGVyX2RtYWJ1Zl9oYXNoX2V4cG9ydGVkLCBNQVhf RU5UUllfRVhQT1JURUQpOwotCi0jaWZkZWYgQ09ORklHX0hZUEVSX0RNQUJVRl9TWVNGUwotc3Rh dGljIHNzaXplX3QgaHlwZXJfZG1hYnVmX2ltcG9ydGVkX3Nob3coc3RydWN0IGRldmljZSAqZHJ2 LAotCQkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCQkgIGNoYXIgKmJ1 ZikKLXsKLQlzdHJ1Y3QgbGlzdF9lbnRyeV9pbXBvcnRlZCAqaW5mb19lbnRyeTsKLQlpbnQgYmt0 OwotCXNzaXplX3QgY291bnQgPSAwOwotCXNpemVfdCB0b3RhbCA9IDA7Ci0KLQloYXNoX2Zvcl9l YWNoKGh5cGVyX2RtYWJ1Zl9oYXNoX2ltcG9ydGVkLCBia3QsIGluZm9fZW50cnksIG5vZGUpIHsK LQkJaHlwZXJfZG1hYnVmX2lkX3QgaGlkID0gaW5mb19lbnRyeS0+aW1wb3J0ZWQtPmhpZDsKLQkJ aW50IG5lbnRzID0gaW5mb19lbnRyeS0+aW1wb3J0ZWQtPm5lbnRzOwotCQlib29sIHZhbGlkID0g aW5mb19lbnRyeS0+aW1wb3J0ZWQtPnZhbGlkOwotCQlpbnQgbnVtX2ltcG9ydGVycyA9IGluZm9f ZW50cnktPmltcG9ydGVkLT5pbXBvcnRlcnM7Ci0KLQkJdG90YWwgKz0gbmVudHM7Ci0JCWNvdW50 ICs9IHNjbnByaW50ZihidWYgKyBjb3VudCwgUEFHRV9TSVpFIC0gY291bnQsCi0JCQkJImhpZDp7 JWQgJWQgJWQgJWR9LCBuZW50OiVkLCB2OiVjLCBudW1pOiVkXG4iLAotCQkJCWhpZC5pZCwgaGlk LnJuZ19rZXlbMF0sIGhpZC5ybmdfa2V5WzFdLAotCQkJCWhpZC5ybmdfa2V5WzJdLCBuZW50cywg KHZhbGlkID8gJ3QnIDogJ2YnKSwKLQkJCQludW1faW1wb3J0ZXJzKTsKLQl9Ci0JY291bnQgKz0g c2NucHJpbnRmKGJ1ZiArIGNvdW50LCBQQUdFX1NJWkUgLSBjb3VudCwKLQkJCSAgICJ0b3RhbCBu ZW50czogJWx1XG4iLCB0b3RhbCk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBzc2l6 ZV90IGh5cGVyX2RtYWJ1Zl9leHBvcnRlZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRydiwKLQkJCQkJ ICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkJICBjaGFyICpidWYpCi17Ci0J c3RydWN0IGxpc3RfZW50cnlfZXhwb3J0ZWQgKmluZm9fZW50cnk7Ci0JaW50IGJrdDsKLQlzc2l6 ZV90IGNvdW50ID0gMDsKLQlzaXplX3QgdG90YWwgPSAwOwotCi0JaGFzaF9mb3JfZWFjaChoeXBl cl9kbWFidWZfaGFzaF9leHBvcnRlZCwgYmt0LCBpbmZvX2VudHJ5LCBub2RlKSB7Ci0JCWh5cGVy X2RtYWJ1Zl9pZF90IGhpZCA9IGluZm9fZW50cnktPmV4cG9ydGVkLT5oaWQ7Ci0JCWludCBuZW50 cyA9IGluZm9fZW50cnktPmV4cG9ydGVkLT5uZW50czsKLQkJYm9vbCB2YWxpZCA9IGluZm9fZW50 cnktPmV4cG9ydGVkLT52YWxpZDsKLQkJaW50IGltcG9ydGVyX2V4cG9ydGVkID0gaW5mb19lbnRy eS0+ZXhwb3J0ZWQtPmFjdGl2ZTsKLQotCQl0b3RhbCArPSBuZW50czsKLQkJY291bnQgKz0gc2Nu cHJpbnRmKGJ1ZiArIGNvdW50LCBQQUdFX1NJWkUgLSBjb3VudCwKLQkJCQkgICAiaGlkOnslZCAl ZCAlZCAlZH0sIG5lbnQ6JWQsIHY6JWMsIGllOiVkXG4iLAotCQkJCSAgIGhpZC5pZCwgaGlkLnJu Z19rZXlbMF0sIGhpZC5ybmdfa2V5WzFdLAotCQkJCSAgIGhpZC5ybmdfa2V5WzJdLCBuZW50cywg KHZhbGlkID8gJ3QnIDogJ2YnKSwKLQkJCQkgICBpbXBvcnRlcl9leHBvcnRlZCk7Ci0JfQotCWNv dW50ICs9IHNjbnByaW50ZihidWYgKyBjb3VudCwgUEFHRV9TSVpFIC0gY291bnQsCi0JCQkgICAi dG90YWwgbmVudHM6ICVsdVxuIiwgdG90YWwpOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0 aWMgREVWSUNFX0FUVFIoaW1wb3J0ZWQsIDA0MDAsIGh5cGVyX2RtYWJ1Zl9pbXBvcnRlZF9zaG93 LCBOVUxMKTsKLXN0YXRpYyBERVZJQ0VfQVRUUihleHBvcnRlZCwgMDQwMCwgaHlwZXJfZG1hYnVm X2V4cG9ydGVkX3Nob3csIE5VTEwpOwotCi1pbnQgaHlwZXJfZG1hYnVmX3JlZ2lzdGVyX3N5c2Zz KHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgZXJyOwotCi0JZXJyID0gZGV2aWNlX2NyZWF0 ZV9maWxlKGRldiwgJmRldl9hdHRyX2ltcG9ydGVkKTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBl cnIxOwotCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9leHBvcnRlZCk7 Ci0JaWYgKGVyciA8IDApCi0JCWdvdG8gZXJyMjsKLQotCXJldHVybiAwOwotZXJyMjoKLQlkZXZp Y2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaW1wb3J0ZWQpOwotZXJyMToKLQlyZXR1cm4g LTE7Ci19Ci0KLWludCBoeXBlcl9kbWFidWZfdW5yZWdpc3Rlcl9zeXNmcyhzdHJ1Y3QgZGV2aWNl ICpkZXYpCi17Ci0JZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2ltcG9ydGVkKTsK LQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZXhwb3J0ZWQpOwotCXJldHVybiAw OwotfQotCi0jZW5kaWYKLQotaW50IGh5cGVyX2RtYWJ1Zl90YWJsZV9pbml0KHZvaWQpCi17Ci0J aGFzaF9pbml0KGh5cGVyX2RtYWJ1Zl9oYXNoX2ltcG9ydGVkKTsKLQloYXNoX2luaXQoaHlwZXJf ZG1hYnVmX2hhc2hfZXhwb3J0ZWQpOwotCXJldHVybiAwOwotfQotCi1pbnQgaHlwZXJfZG1hYnVm X3RhYmxlX2Rlc3Ryb3kodm9pZCkKLXsKLQkvKiBUT0RPOiBjbGVhbnVwIGh5cGVyX2RtYWJ1Zl9o YXNoX2ltcG9ydGVkCi0JICogYW5kIGh5cGVyX2RtYWJ1Zl9oYXNoX2V4cG9ydGVkCi0JICovCi0J cmV0dXJuIDA7Ci19Ci0KLWludCBoeXBlcl9kbWFidWZfcmVnaXN0ZXJfZXhwb3J0ZWQoc3RydWN0 IGV4cG9ydGVkX3NndF9pbmZvICpleHBvcnRlZCkKLXsKLQlzdHJ1Y3QgbGlzdF9lbnRyeV9leHBv cnRlZCAqaW5mb19lbnRyeTsKLQotCWluZm9fZW50cnkgPSBrbWFsbG9jKHNpemVvZigqaW5mb19l bnRyeSksIEdGUF9LRVJORUwpOwotCi0JaWYgKCFpbmZvX2VudHJ5KQotCQlyZXR1cm4gLUVOT01F TTsKLQotCWluZm9fZW50cnktPmV4cG9ydGVkID0gZXhwb3J0ZWQ7Ci0KLQloYXNoX2FkZChoeXBl cl9kbWFidWZfaGFzaF9leHBvcnRlZCwgJmluZm9fZW50cnktPm5vZGUsCi0JCSBpbmZvX2VudHJ5 LT5leHBvcnRlZC0+aGlkLmlkKTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgaHlwZXJfZG1hYnVm X3JlZ2lzdGVyX2ltcG9ydGVkKHN0cnVjdCBpbXBvcnRlZF9zZ3RfaW5mbyAqaW1wb3J0ZWQpCi17 Ci0Jc3RydWN0IGxpc3RfZW50cnlfaW1wb3J0ZWQgKmluZm9fZW50cnk7Ci0KLQlpbmZvX2VudHJ5 ID0ga21hbGxvYyhzaXplb2YoKmluZm9fZW50cnkpLCBHRlBfS0VSTkVMKTsKLQotCWlmICghaW5m b19lbnRyeSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpbmZvX2VudHJ5LT5pbXBvcnRlZCA9IGlt cG9ydGVkOwotCi0JaGFzaF9hZGQoaHlwZXJfZG1hYnVmX2hhc2hfaW1wb3J0ZWQsICZpbmZvX2Vu dHJ5LT5ub2RlLAotCQkgaW5mb19lbnRyeS0+aW1wb3J0ZWQtPmhpZC5pZCk7Ci0KLQlyZXR1cm4g MDsKLX0KLQotc3RydWN0IGV4cG9ydGVkX3NndF9pbmZvICpoeXBlcl9kbWFidWZfZmluZF9leHBv cnRlZChoeXBlcl9kbWFidWZfaWRfdCBoaWQpCi17Ci0Jc3RydWN0IGxpc3RfZW50cnlfZXhwb3J0 ZWQgKmluZm9fZW50cnk7Ci0JaW50IGJrdDsKLQotCWhhc2hfZm9yX2VhY2goaHlwZXJfZG1hYnVm X2hhc2hfZXhwb3J0ZWQsIGJrdCwgaW5mb19lbnRyeSwgbm9kZSkKLQkJLyogY2hlY2tpbmcgaGlk LmlkIGZpcnN0ICovCi0JCWlmIChpbmZvX2VudHJ5LT5leHBvcnRlZC0+aGlkLmlkID09IGhpZC5p ZCkgewotCQkJLyogdGhlbiBrZXkgaXMgY29tcGFyZWQgKi8KLQkJCWlmIChoeXBlcl9kbWFidWZf aGlkX2tleWNvbXAoaW5mb19lbnRyeS0+ZXhwb3J0ZWQtPmhpZCwKLQkJCQkJCSAgICBoaWQpKQot CQkJCXJldHVybiBpbmZvX2VudHJ5LT5leHBvcnRlZDsKLQotCQkJLyogaWYga2V5IGlzIHVubWF0 Y2hlZCwgZ2l2ZW4gSElEIGlzIGludmFsaWQsCi0JCQkgKiBzbyByZXR1cm5pbmcgTlVMTAotCQkJ ICovCi0JCQlicmVhazsKLQkJfQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qIHNlYXJjaCBmb3Ig cHJlLWV4cG9ydGVkIHNndCBhbmQgcmV0dXJuIGlkIG9mIGl0IGlmIGl0IGV4aXN0ICovCi1oeXBl cl9kbWFidWZfaWRfdCBoeXBlcl9kbWFidWZfZmluZF9oaWRfZXhwb3J0ZWQoc3RydWN0IGRtYV9i dWYgKmRtYWJ1ZiwKLQkJCQkJCSBpbnQgZG9taWQpCi17Ci0Jc3RydWN0IGxpc3RfZW50cnlfZXhw b3J0ZWQgKmluZm9fZW50cnk7Ci0JaHlwZXJfZG1hYnVmX2lkX3QgaGlkID0gey0xLCB7MCwgMCwg MH0gfTsKLQlpbnQgYmt0OwotCi0JaGFzaF9mb3JfZWFjaChoeXBlcl9kbWFidWZfaGFzaF9leHBv cnRlZCwgYmt0LCBpbmZvX2VudHJ5LCBub2RlKQotCQlpZiAoaW5mb19lbnRyeS0+ZXhwb3J0ZWQt PmRtYV9idWYgPT0gZG1hYnVmICYmCi0JCSAgICBpbmZvX2VudHJ5LT5leHBvcnRlZC0+cmRvbWlk ID09IGRvbWlkKQotCQkJcmV0dXJuIGluZm9fZW50cnktPmV4cG9ydGVkLT5oaWQ7Ci0KLQlyZXR1 cm4gaGlkOwotfQotCi1zdHJ1Y3QgaW1wb3J0ZWRfc2d0X2luZm8gKmh5cGVyX2RtYWJ1Zl9maW5k X2ltcG9ydGVkKGh5cGVyX2RtYWJ1Zl9pZF90IGhpZCkKLXsKLQlzdHJ1Y3QgbGlzdF9lbnRyeV9p bXBvcnRlZCAqaW5mb19lbnRyeTsKLQlpbnQgYmt0OwotCi0JaGFzaF9mb3JfZWFjaChoeXBlcl9k bWFidWZfaGFzaF9pbXBvcnRlZCwgYmt0LCBpbmZvX2VudHJ5LCBub2RlKQotCQkvKiBjaGVja2lu ZyBoaWQuaWQgZmlyc3QgKi8KLQkJaWYgKGluZm9fZW50cnktPmltcG9ydGVkLT5oaWQuaWQgPT0g aGlkLmlkKSB7Ci0JCQkvKiB0aGVuIGtleSBpcyBjb21wYXJlZCAqLwotCQkJaWYgKGh5cGVyX2Rt YWJ1Zl9oaWRfa2V5Y29tcChpbmZvX2VudHJ5LT5pbXBvcnRlZC0+aGlkLAotCQkJCQkJICAgIGhp ZCkpCi0JCQkJcmV0dXJuIGluZm9fZW50cnktPmltcG9ydGVkOwotCQkJLyogaWYga2V5IGlzIHVu bWF0Y2hlZCwgZ2l2ZW4gSElEIGlzIGludmFsaWQsCi0JCQkgKiBzbyByZXR1cm5pbmcgTlVMTAot CQkJICovCi0JCQlicmVhazsKLQkJfQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLWludCBoeXBlcl9k bWFidWZfcmVtb3ZlX2V4cG9ydGVkKGh5cGVyX2RtYWJ1Zl9pZF90IGhpZCkKLXsKLQlzdHJ1Y3Qg bGlzdF9lbnRyeV9leHBvcnRlZCAqaW5mb19lbnRyeTsKLQlpbnQgYmt0OwotCi0JaGFzaF9mb3Jf ZWFjaChoeXBlcl9kbWFidWZfaGFzaF9leHBvcnRlZCwgYmt0LCBpbmZvX2VudHJ5LCBub2RlKQot CQkvKiBjaGVja2luZyBoaWQuaWQgZmlyc3QgKi8KLQkJaWYgKGluZm9fZW50cnktPmV4cG9ydGVk LT5oaWQuaWQgPT0gaGlkLmlkKSB7Ci0JCQkvKiB0aGVuIGtleSBpcyBjb21wYXJlZCAqLwotCQkJ aWYgKGh5cGVyX2RtYWJ1Zl9oaWRfa2V5Y29tcChpbmZvX2VudHJ5LT5leHBvcnRlZC0+aGlkLAot CQkJCQkJICAgIGhpZCkpIHsKLQkJCQloYXNoX2RlbCgmaW5mb19lbnRyeS0+bm9kZSk7Ci0JCQkJ a2ZyZWUoaW5mb19lbnRyeSk7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0KLQkJCWJyZWFrOwotCQl9 Ci0KLQlyZXR1cm4gLUVOT0VOVDsKLX0KLQotaW50IGh5cGVyX2RtYWJ1Zl9yZW1vdmVfaW1wb3J0 ZWQoaHlwZXJfZG1hYnVmX2lkX3QgaGlkKQotewotCXN0cnVjdCBsaXN0X2VudHJ5X2ltcG9ydGVk ICppbmZvX2VudHJ5OwotCWludCBia3Q7Ci0KLQloYXNoX2Zvcl9lYWNoKGh5cGVyX2RtYWJ1Zl9o YXNoX2ltcG9ydGVkLCBia3QsIGluZm9fZW50cnksIG5vZGUpCi0JCS8qIGNoZWNraW5nIGhpZC5p ZCBmaXJzdCAqLwotCQlpZiAoaW5mb19lbnRyeS0+aW1wb3J0ZWQtPmhpZC5pZCA9PSBoaWQuaWQp IHsKLQkJCS8qIHRoZW4ga2V5IGlzIGNvbXBhcmVkICovCi0JCQlpZiAoaHlwZXJfZG1hYnVmX2hp ZF9rZXljb21wKGluZm9fZW50cnktPmltcG9ydGVkLT5oaWQsCi0JCQkJCQkgICAgaGlkKSkgewot CQkJCWhhc2hfZGVsKCZpbmZvX2VudHJ5LT5ub2RlKTsKLQkJCQlrZnJlZShpbmZvX2VudHJ5KTsK LQkJCQlyZXR1cm4gMDsKLQkJCX0KLQotCQkJYnJlYWs7Ci0JCX0KLQotCXJldHVybiAtRU5PRU5U OwotfQotCi12b2lkIGh5cGVyX2RtYWJ1Zl9mb3JlYWNoX2V4cG9ydGVkKAotCXZvaWQgKCpmdW5j KShzdHJ1Y3QgZXhwb3J0ZWRfc2d0X2luZm8gKiwgdm9pZCAqYXR0ciksCi0Jdm9pZCAqYXR0cikK LXsKLQlzdHJ1Y3QgbGlzdF9lbnRyeV9leHBvcnRlZCAqaW5mb19lbnRyeTsKLQlzdHJ1Y3QgaGxp c3Rfbm9kZSAqdG1wOwotCWludCBia3Q7Ci0KLQloYXNoX2Zvcl9lYWNoX3NhZmUoaHlwZXJfZG1h YnVmX2hhc2hfZXhwb3J0ZWQsIGJrdCwgdG1wLAotCQkJaW5mb19lbnRyeSwgbm9kZSkgewotCQlm dW5jKGluZm9fZW50cnktPmV4cG9ydGVkLCBhdHRyKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9kcml2 ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2xpc3QuaCBiL2RyaXZlcnMveGVuL2h5 cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfbGlzdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCBmNzEwMmY1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBl cl9kbWFidWZfbGlzdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoKLSAqIENv cHlyaWdodCDCqSAyMDE3IEludGVsIENvcnBvcmF0aW9uCi0gKgotICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK LSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp bGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRz IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGlj ZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUg Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRo ZSBuZXh0Ci0gKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Ig c3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCi0gKiBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09G VFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwg RVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRI RSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE QU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwgT1VUIE9GIE9SIElO IENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5H UwotICogSU4gVEhFIFNPRlRXQVJFLgotICoKLSAqLwotCi0jaWZuZGVmIF9fSFlQRVJfRE1BQlVG X0xJU1RfSF9fCi0jZGVmaW5lIF9fSFlQRVJfRE1BQlVGX0xJU1RfSF9fCi0KLSNpbmNsdWRlICJo eXBlcl9kbWFidWZfc3RydWN0LmgiCi0KLS8qIG51bWJlciBvZiBiaXRzIHRvIGJlIHVzZWQgZm9y IGV4cG9ydGVkIGRtYWJ1ZnMgaGFzaCB0YWJsZSAqLwotI2RlZmluZSBNQVhfRU5UUllfRVhQT1JU RUQgNwotLyogbnVtYmVyIG9mIGJpdHMgdG8gYmUgdXNlZCBmb3IgaW1wb3J0ZWQgZG1hYnVmcyBo YXNoIHRhYmxlICovCi0jZGVmaW5lIE1BWF9FTlRSWV9JTVBPUlRFRCA3Ci0KLXN0cnVjdCBsaXN0 X2VudHJ5X2V4cG9ydGVkIHsKLQlzdHJ1Y3QgZXhwb3J0ZWRfc2d0X2luZm8gKmV4cG9ydGVkOwot CXN0cnVjdCBobGlzdF9ub2RlIG5vZGU7Ci19OwotCi1zdHJ1Y3QgbGlzdF9lbnRyeV9pbXBvcnRl ZCB7Ci0Jc3RydWN0IGltcG9ydGVkX3NndF9pbmZvICppbXBvcnRlZDsKLQlzdHJ1Y3QgaGxpc3Rf bm9kZSBub2RlOwotfTsKLQotaW50IGh5cGVyX2RtYWJ1Zl90YWJsZV9pbml0KHZvaWQpOwotCi1p bnQgaHlwZXJfZG1hYnVmX3RhYmxlX2Rlc3Ryb3kodm9pZCk7Ci0KLWludCBoeXBlcl9kbWFidWZf cmVnaXN0ZXJfZXhwb3J0ZWQoc3RydWN0IGV4cG9ydGVkX3NndF9pbmZvICppbmZvKTsKLQotLyog c2VhcmNoIGZvciBwcmUtZXhwb3J0ZWQgc2d0IGFuZCByZXR1cm4gaWQgb2YgaXQgaWYgaXQgZXhp c3QgKi8KLWh5cGVyX2RtYWJ1Zl9pZF90IGh5cGVyX2RtYWJ1Zl9maW5kX2hpZF9leHBvcnRlZChz dHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAotCQkJCQkJIGludCBkb21pZCk7Ci0KLWludCBoeXBlcl9k bWFidWZfcmVnaXN0ZXJfaW1wb3J0ZWQoc3RydWN0IGltcG9ydGVkX3NndF9pbmZvICppbmZvKTsK LQotc3RydWN0IGV4cG9ydGVkX3NndF9pbmZvICpoeXBlcl9kbWFidWZfZmluZF9leHBvcnRlZCho eXBlcl9kbWFidWZfaWRfdCBoaWQpOwotCi1zdHJ1Y3QgaW1wb3J0ZWRfc2d0X2luZm8gKmh5cGVy X2RtYWJ1Zl9maW5kX2ltcG9ydGVkKGh5cGVyX2RtYWJ1Zl9pZF90IGhpZCk7Ci0KLWludCBoeXBl cl9kbWFidWZfcmVtb3ZlX2V4cG9ydGVkKGh5cGVyX2RtYWJ1Zl9pZF90IGhpZCk7Ci0KLWludCBo eXBlcl9kbWFidWZfcmVtb3ZlX2ltcG9ydGVkKGh5cGVyX2RtYWJ1Zl9pZF90IGhpZCk7Ci0KLXZv aWQgaHlwZXJfZG1hYnVmX2ZvcmVhY2hfZXhwb3J0ZWQodm9pZCAoKmZ1bmMpKHN0cnVjdCBleHBv cnRlZF9zZ3RfaW5mbyAqLAotCQkJCSAgIHZvaWQgKmF0dHIpLCB2b2lkICphdHRyKTsKLQotaW50 IGh5cGVyX2RtYWJ1Zl9yZWdpc3Rlcl9zeXNmcyhzdHJ1Y3QgZGV2aWNlICpkZXYpOwotaW50IGh5 cGVyX2RtYWJ1Zl91bnJlZ2lzdGVyX3N5c2ZzKHN0cnVjdCBkZXZpY2UgKmRldik7Ci0KLSNlbmRp ZiAvKiBfX0hZUEVSX0RNQUJVRl9MSVNUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4v aHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9tc2cuYyBiL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1 Zi9oeXBlcl9kbWFidWZfbXNnLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYzFm ZDZlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZf bXNnLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCDC qSAyMDE3IEludGVsIENvcnBvcmF0aW9uCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3Jh bnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNvcHkg b2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUg IlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0 aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVzZSwg Y29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAq IGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29u cyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0 IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0 IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Ci0g KiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRp YWwgcG9ydGlvbnMgb2YgdGhlCi0gKiBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMg UFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBP UgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBBVVRIT1JT IE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9S IE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBU T1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJ T04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwotICogSU4g VEhFIFNPRlRXQVJFLgotICoKLSAqIEF1dGhvcnM6Ci0gKiAgICBEb25nd29uIEtpbSA8ZG9uZ3dv bi5raW1AaW50ZWwuY29tPgotICogICAgTWF0ZXVzeiBQb2xyb2xhIDxtYXRldXN6eC5wb3Ryb2xh QGludGVsLmNvbT4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1 ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxp bnV4L3dvcmtxdWV1ZS5oPgotI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9kcnYuaCIKLSNpbmNsdWRl ICJoeXBlcl9kbWFidWZfbXNnLmgiCi0jaW5jbHVkZSAiaHlwZXJfZG1hYnVmX3JlbW90ZV9zeW5j LmgiCi0jaW5jbHVkZSAiaHlwZXJfZG1hYnVmX2V2ZW50LmgiCi0jaW5jbHVkZSAiaHlwZXJfZG1h YnVmX2xpc3QuaCIKLQotc3RydWN0IGNtZF9wcm9jZXNzIHsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qg d29yazsKLQlzdHJ1Y3QgaHlwZXJfZG1hYnVmX3JlcSAqcnE7Ci0JaW50IGRvbWlkOwotfTsKLQot dm9pZCBoeXBlcl9kbWFidWZfY3JlYXRlX3JlcShzdHJ1Y3QgaHlwZXJfZG1hYnVmX3JlcSAqcmVx LAotCQkJICAgICBlbnVtIGh5cGVyX2RtYWJ1Zl9jb21tYW5kIGNtZCwgaW50ICpvcCkKLXsKLQlp bnQgaTsKLQotCXJlcS0+c3RhdCA9IEhZUEVSX0RNQUJVRl9SRVFfTk9UX1JFU1BPTkRFRDsKLQly ZXEtPmNtZCA9IGNtZDsKLQotCXN3aXRjaCAoY21kKSB7Ci0JLyogYXMgZXhwb3J0ZXIsIGNvbW1h bmRzIHRvIGltcG9ydGVyICovCi0JY2FzZSBIWVBFUl9ETUFCVUZfRVhQT1JUOgotCQkvKiBleHBv cnRpbmcgcGFnZXMgZm9yIGRtYWJ1ZiAqLwotCQkvKiBjb21tYW5kIDogSFlQRVJfRE1BQlVGX0VY UE9SVCwKLQkJICogb3Awfm9wMyA6IGh5cGVyX2RtYWJ1Zl9pZAotCQkgKiBvcDQgOiBudW1iZXIg b2YgcGFnZXMgdG8gYmUgc2hhcmVkCi0JCSAqIG9wNSA6IG9mZnNldCBvZiBkYXRhIGluIHRoZSBm aXJzdCBwYWdlCi0JCSAqIG9wNiA6IGxlbmd0aCBvZiBkYXRhIGluIHRoZSBsYXN0IHBhZ2UKLQkJ ICogb3A3IDogdG9wLWxldmVsIHJlZmVyZW5jZSBudW1iZXIgZm9yIHNoYXJlZCBwYWdlcwotCQkg KiBvcDggOiBzaXplIG9mIHByaXZhdGUgZGF0YSAoZnJvbSBvcDkpCi0JCSAqIG9wOSB+IDogRHJp dmVyLXNwZWNpZmljIHByaXZhdGUgZGF0YQotCQkgKgkgICAoZS5nLiBncmFwaGljIGJ1ZmZlcidz IG1ldGEgaW5mbykKLQkJICovCi0KLQkJbWVtY3B5KCZyZXEtPm9wWzBdLCAmb3BbMF0sIDkgKiBz aXplb2YoaW50KSArIG9wWzhdKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEhZUEVSX0RNQUJVRl9OT1RJ RllfVU5FWFBPUlQ6Ci0JCS8qIGRlc3Ryb3kgc2dfbGlzdCBmb3IgaHlwZXJfZG1hYnVmX2lkIG9u IHJlbW90ZSBzaWRlICovCi0JCS8qIGNvbW1hbmQgOiBETUFCVUZfREVTVFJPWSwKLQkJICogb3Aw fm9wMyA6IGh5cGVyX2RtYWJ1Zl9pZF90IGhpZAotCQkgKi8KLQotCQlmb3IgKGkgPSAwOyBpIDwg NDsgaSsrKQotCQkJcmVxLT5vcFtpXSA9IG9wW2ldOwotCQlicmVhazsKLQotCWNhc2UgSFlQRVJf RE1BQlVGX0VYUE9SVF9GRDoKLQljYXNlIEhZUEVSX0RNQUJVRl9FWFBPUlRfRkRfRkFJTEVEOgot CQkvKiBkbWFidWYgZmQgaXMgYmVpbmcgY3JlYXRlZCBvbiBpbXBvcnRlZCBzaWRlIG9yIGltcG9y dGluZwotCQkgKiBmYWlsZWQKLQkJICoKLQkJICogY29tbWFuZCA6IEhZUEVSX0RNQUJVRl9FWFBP UlRfRkQgb3IKLQkJICoJICAgICBIWVBFUl9ETUFCVUZfRVhQT1JUX0ZEX0ZBSUxFRCwKLQkJICog b3Awfm9wMyA6IGh5cGVyX2RtYWJ1Zl9pZAotCQkgKi8KLQotCQlmb3IgKGkgPSAwOyBpIDwgNDsg aSsrKQotCQkJcmVxLT5vcFtpXSA9IG9wW2ldOwotCQlicmVhazsKLQotCWNhc2UgSFlQRVJfRE1B QlVGX09QU19UT19SRU1PVEU6Ci0JCS8qIG5vdGlmeWluZyBkbWFidWYgbWFwL3VubWFwIHRvIGlt cG9ydGVyIChwcm9iYWJseSBub3QgbmVlZGVkKQotCQkgKiBmb3IgZG1hYnVmIHN5bmNocm9uaXph dGlvbgotCQkgKi8KLQkJYnJlYWs7Ci0KLQljYXNlIEhZUEVSX0RNQUJVRl9PUFNfVE9fU09VUkNF OgotCQkvKiBub3RpZnlpbmcgZG1hYnVmIG1hcC91bm1hcCB0byBleHBvcnRlciwgbWFwIHdpbGwg bWFrZQotCQkgKiB0aGUgZHJpdmVyIHRvIGRvIHNoYWRvdyBtYXBwaW5nIG9yIHVubWFwcGluZyBm b3IKLQkJICogc3luY2hyb25pemF0aW9uIHdpdGggb3JpZ2luYWwgZXhwb3J0ZXIgKGUuZy4gaTkx NSkKLQkJICoKLQkJICogY29tbWFuZCA6IERNQUJVRl9PUFNfVE9fU09VUkNFLgotCQkgKiBvcDB+ MyA6IGh5cGVyX2RtYWJ1Zl9pZAotCQkgKiBvcDQgOiBtYXAoPTEpL3VubWFwKD0yKS9hdHRhY2go PTMpL2RldGFjaCg9NCkKLQkJICovCi0JCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCi0JCQlyZXEt Pm9wW2ldID0gb3BbaV07Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJLyogbm8gY29tbWFuZCBm b3VuZCAqLwotCQlyZXR1cm47Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBjbWRfcHJvY2Vzc193b3Jr KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgaW1wb3J0ZWRfc2d0X2luZm8g KmltcG9ydGVkOwotCXN0cnVjdCBjbWRfcHJvY2VzcyAqcHJvYyA9IGNvbnRhaW5lcl9vZih3b3Jr LAotCQkJCQkJc3RydWN0IGNtZF9wcm9jZXNzLCB3b3JrKTsKLQlzdHJ1Y3QgaHlwZXJfZG1hYnVm X3JlcSAqcmVxOwotCWludCBkb21pZDsKLQlpbnQgaTsKLQotCXJlcSA9IHByb2MtPnJxOwotCWRv bWlkID0gcHJvYy0+ZG9taWQ7Ci0KLQlzd2l0Y2ggKHJlcS0+Y21kKSB7Ci0JY2FzZSBIWVBFUl9E TUFCVUZfRVhQT1JUOgotCQkvKiBleHBvcnRpbmcgcGFnZXMgZm9yIGRtYWJ1ZiAqLwotCQkvKiBj b21tYW5kIDogSFlQRVJfRE1BQlVGX0VYUE9SVCwKLQkJICogb3Awfm9wMyA6IGh5cGVyX2RtYWJ1 Zl9pZAotCQkgKiBvcDQgOiBudW1iZXIgb2YgcGFnZXMgdG8gYmUgc2hhcmVkCi0JCSAqIG9wNSA6 IG9mZnNldCBvZiBkYXRhIGluIHRoZSBmaXJzdCBwYWdlCi0JCSAqIG9wNiA6IGxlbmd0aCBvZiBk YXRhIGluIHRoZSBsYXN0IHBhZ2UKLQkJICogb3A3IDogdG9wLWxldmVsIHJlZmVyZW5jZSBudW1i ZXIgZm9yIHNoYXJlZCBwYWdlcwotCQkgKiBvcDggOiBzaXplIG9mIHByaXZhdGUgZGF0YSAoZnJv bSBvcDkpCi0JCSAqIG9wOSB+IDogRHJpdmVyLXNwZWNpZmljIHByaXZhdGUgZGF0YQotCQkgKiAg ICAgICAgIChlLmcuIGdyYXBoaWMgYnVmZmVyJ3MgbWV0YSBpbmZvKQotCQkgKi8KLQotCQkvKiBp ZiBuZW50cyA9PSAwLCBpdCBtZWFucyBpdCBpcyBhIG1lc3NhZ2Ugb25seSBmb3IKLQkJICogcHJp diBzeW5jaHJvbml6YXRpb24uIGZvciBleGlzdGluZyBpbXBvcnRlZF9zZ3RfaW5mbwotCQkgKiBz byBub3QgY3JlYXRpbmcgYSBuZXcgb25lCi0JCSAqLwotCQlpZiAocmVxLT5vcFs0XSA9PSAwKSB7 Ci0JCQloeXBlcl9kbWFidWZfaWRfdCBleGlzdCA9IHtyZXEtPm9wWzBdLAotCQkJCQkJICAge3Jl cS0+b3BbMV0sIHJlcS0+b3BbMl0sCi0JCQkJCQkgICByZXEtPm9wWzNdIH0gfTsKLQotCQkJaW1w b3J0ZWQgPSBoeXBlcl9kbWFidWZfZmluZF9pbXBvcnRlZChleGlzdCk7Ci0KLQkJCWlmICghaW1w b3J0ZWQpIHsKLQkJCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCi0JCQkJCSJDYW4ndCBmaW5k IGltcG9ydGVkIHNndF9pbmZvXG4iKTsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJLyogaWYgc2l6 ZSBvZiBuZXcgcHJpdmF0ZSBkYXRhIGlzIGRpZmZlcmVudCwKLQkJCSAqIHdlIHJlYWxsb2NhdGUg aXQuCi0JCQkgKi8KLQkJCWlmIChpbXBvcnRlZC0+c3pfcHJpdiAhPSByZXEtPm9wWzhdKSB7Ci0J CQkJa2ZyZWUoaW1wb3J0ZWQtPnByaXYpOwotCQkJCWltcG9ydGVkLT5zel9wcml2ID0gcmVxLT5v cFs4XTsKLQkJCQlpbXBvcnRlZC0+cHJpdiA9IGtjYWxsb2MoMSwgcmVxLT5vcFs4XSwKLQkJCQkJ CQkgR0ZQX0tFUk5FTCk7Ci0JCQkJaWYgKCFpbXBvcnRlZC0+cHJpdikgewotCQkJCQkvKiBzZXQg aXQgaW52YWxpZCAqLwotCQkJCQlpbXBvcnRlZC0+dmFsaWQgPSAwOwotCQkJCQlicmVhazsKLQkJ CQl9Ci0JCQl9Ci0KLQkJCS8qIHVwZGF0aW5nIHByaXYgZGF0YSAqLwotCQkJbWVtY3B5KGltcG9y dGVkLT5wcml2LCAmcmVxLT5vcFs5XSwgcmVxLT5vcFs4XSk7Ci0KLSNpZmRlZiBDT05GSUdfSFlQ RVJfRE1BQlVGX0VWRU5UX0dFTgotCQkJLyogZ2VuZXJhdGluZyBpbXBvcnQgZXZlbnQgKi8KLQkJ CWh5cGVyX2RtYWJ1Zl9pbXBvcnRfZXZlbnQoaW1wb3J0ZWQtPmhpZCk7Ci0jZW5kaWYKLQotCQkJ YnJlYWs7Ci0JCX0KLQotCQlpbXBvcnRlZCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCppbXBvcnRlZCks IEdGUF9LRVJORUwpOwotCi0JCWlmICghaW1wb3J0ZWQpCi0JCQlicmVhazsKLQotCQlpbXBvcnRl ZC0+c3pfcHJpdiA9IHJlcS0+b3BbOF07Ci0JCWltcG9ydGVkLT5wcml2ID0ga2NhbGxvYygxLCBy ZXEtPm9wWzhdLCBHRlBfS0VSTkVMKTsKLQotCQlpZiAoIWltcG9ydGVkLT5wcml2KSB7Ci0JCQlr ZnJlZShpbXBvcnRlZCk7Ci0JCQlicmVhazsKLQkJfQotCi0JCWltcG9ydGVkLT5oaWQuaWQgPSBy ZXEtPm9wWzBdOwotCi0JCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0JCQlpbXBvcnRlZC0+aGlk LnJuZ19rZXlbaV0gPSByZXEtPm9wW2krMV07Ci0KLQkJaW1wb3J0ZWQtPm5lbnRzID0gcmVxLT5v cFs0XTsKLQkJaW1wb3J0ZWQtPmZyc3Rfb2ZzdCA9IHJlcS0+b3BbNV07Ci0JCWltcG9ydGVkLT5s YXN0X2xlbiA9IHJlcS0+b3BbNl07Ci0JCWltcG9ydGVkLT5yZWZfaGFuZGxlID0gcmVxLT5vcFs3 XTsKLQotCQlkZXZfZGJnKGh5X2Rydl9wcml2LT5kZXYsICJETUFCVUYgd2FzIGV4cG9ydGVkXG4i KTsKLQkJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LCAiXHRoaWR7aWQ6JWQga2V5OiVkICVkICVk fVxuIiwKLQkJCXJlcS0+b3BbMF0sIHJlcS0+b3BbMV0sIHJlcS0+b3BbMl0sCi0JCQlyZXEtPm9w WzNdKTsKLQkJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LCAiXHRuZW50cyAlZFxuIiwgcmVxLT5v cFs0XSk7Ci0JCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwgIlx0Zmlyc3Qgb2Zmc2V0ICVkXG4i LCByZXEtPm9wWzVdKTsKLQkJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LCAiXHRsYXN0IGxlbiAl ZFxuIiwgcmVxLT5vcFs2XSk7Ci0JCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwgIlx0Z3JlZmlk ICVkXG4iLCByZXEtPm9wWzddKTsKLQotCQltZW1jcHkoaW1wb3J0ZWQtPnByaXYsICZyZXEtPm9w WzldLCByZXEtPm9wWzhdKTsKLQotCQlpbXBvcnRlZC0+dmFsaWQgPSB0cnVlOwotCQloeXBlcl9k bWFidWZfcmVnaXN0ZXJfaW1wb3J0ZWQoaW1wb3J0ZWQpOwotCi0jaWZkZWYgQ09ORklHX0hZUEVS X0RNQUJVRl9FVkVOVF9HRU4KLQkJLyogZ2VuZXJhdGluZyBpbXBvcnQgZXZlbnQgKi8KLQkJaHlw ZXJfZG1hYnVmX2ltcG9ydF9ldmVudChpbXBvcnRlZC0+aGlkKTsKLSNlbmRpZgotCi0JCWJyZWFr OwotCi0JY2FzZSBIWVBFUl9ETUFCVUZfT1BTX1RPX1JFTU9URToKLQkJLyogbm90aWZ5aW5nIGRt YWJ1ZiBtYXAvdW5tYXAgdG8gaW1wb3J0ZXIKLQkJICogKHByb2JhYmx5IG5vdCBuZWVkZWQpIGZv ciBkbWFidWYgc3luY2hyb25pemF0aW9uCi0JCSAqLwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0J CS8qIHNob3VsZG4ndCBnZXQgaGVyZSAqLwotCQlicmVhazsKLQl9Ci0KLQlrZnJlZShyZXEpOwot CWtmcmVlKHByb2MpOwotfQotCi1pbnQgaHlwZXJfZG1hYnVmX21zZ19wYXJzZShpbnQgZG9taWQs IHN0cnVjdCBoeXBlcl9kbWFidWZfcmVxICpyZXEpCi17Ci0Jc3RydWN0IGNtZF9wcm9jZXNzICpw cm9jOwotCXN0cnVjdCBoeXBlcl9kbWFidWZfcmVxICp0ZW1wX3JlcTsKLQlzdHJ1Y3QgaW1wb3J0 ZWRfc2d0X2luZm8gKmltcG9ydGVkOwotCXN0cnVjdCBleHBvcnRlZF9zZ3RfaW5mbyAqZXhwb3J0 ZWQ7Ci0JaHlwZXJfZG1hYnVmX2lkX3QgaGlkOwotCWludCByZXQ7Ci0KLQlpZiAoIXJlcSkgewot CQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsICJyZXF1ZXN0IGlzIE5VTExcbiIpOwotCQlyZXR1 cm4gLUVJTlZBTDsKLQl9Ci0KLQloaWQuaWQgPSByZXEtPm9wWzBdOwotCWhpZC5ybmdfa2V5WzBd ID0gcmVxLT5vcFsxXTsKLQloaWQucm5nX2tleVsxXSA9IHJlcS0+b3BbMl07Ci0JaGlkLnJuZ19r ZXlbMl0gPSByZXEtPm9wWzNdOwotCi0JaWYgKChyZXEtPmNtZCA8IEhZUEVSX0RNQUJVRl9FWFBP UlQpIHx8Ci0JCShyZXEtPmNtZCA+IEhZUEVSX0RNQUJVRl9PUFNfVE9fU09VUkNFKSkgewotCQlk ZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsICJpbnZhbGlkIGNvbW1hbmRcbiIpOwotCQlyZXR1cm4g LUVJTlZBTDsKLQl9Ci0KLQlyZXEtPnN0YXQgPSBIWVBFUl9ETUFCVUZfUkVRX1BST0NFU1NFRDsK LQotCS8qIEhZUEVSX0RNQUJVRl9ERVNUUk9ZIHJlcXVpcmVzIGltbWVkaWF0ZQotCSAqIGZvbGxv dyB1cCBzbyBjYW4ndCBiZSBwcm9jZXNzZWQgaW4gd29ya3F1ZXVlCi0JICovCi0JaWYgKHJlcS0+ Y21kID09IEhZUEVSX0RNQUJVRl9OT1RJRllfVU5FWFBPUlQpIHsKLQkJLyogZGVzdHJveSBzZ19s aXN0IGZvciBoeXBlcl9kbWFidWZfaWQgb24gcmVtb3RlIHNpZGUgKi8KLQkJLyogY29tbWFuZCA6 IEhZUEVSX0RNQUJVRl9OT1RJRllfVU5FWFBPUlQsCi0JCSAqIG9wMH4zIDogaHlwZXJfZG1hYnVm X2lkCi0JCSAqLwotCQlkZXZfZGJnKGh5X2Rydl9wcml2LT5kZXYsCi0JCQkicHJvY2Vzc2luZyBI WVBFUl9ETUFCVUZfTk9USUZZX1VORVhQT1JUXG4iKTsKLQotCQlpbXBvcnRlZCA9IGh5cGVyX2Rt YWJ1Zl9maW5kX2ltcG9ydGVkKGhpZCk7Ci0KLQkJaWYgKGltcG9ydGVkKSB7Ci0JCQkvKiBpZiBh bnl0aGluZyBpcyBzdGlsbCB1c2luZyBkbWFfYnVmICovCi0JCQlpZiAoaW1wb3J0ZWQtPmltcG9y dGVycykgewotCQkJCS8qIEJ1ZmZlciBpcyBzdGlsbCBpbiAgdXNlLCBqdXN0IG1hcmsgdGhhdAot CQkJCSAqIGl0IHNob3VsZCBub3QgYmUgYWxsb3dlZCB0byBleHBvcnQgaXRzIGZkCi0JCQkJICog YW55bW9yZS4KLQkJCQkgKi8KLQkJCQlpbXBvcnRlZC0+dmFsaWQgPSBmYWxzZTsKLQkJCX0gZWxz ZSB7Ci0JCQkJLyogTm8gb25lIGlzIHVzaW5nIGJ1ZmZlciwgcmVtb3ZlIGl0IGZyb20KLQkJCQkg KiBpbXBvcnRlZCBsaXN0Ci0JCQkJICovCi0JCQkJaHlwZXJfZG1hYnVmX3JlbW92ZV9pbXBvcnRl ZChoaWQpOwotCQkJCWtmcmVlKGltcG9ydGVkKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXJlcS0+ c3RhdCA9IEhZUEVSX0RNQUJVRl9SRVFfRVJST1I7Ci0JCX0KLQotCQlyZXR1cm4gcmVxLT5jbWQ7 Ci0JfQotCi0JLyogZG1hIGJ1ZiByZW1vdGUgc3luY2hyb25pemF0aW9uICovCi0JaWYgKHJlcS0+ Y21kID09IEhZUEVSX0RNQUJVRl9PUFNfVE9fU09VUkNFKSB7Ci0JCS8qIG5vdGlmeWluZyBkbWFi dWYgbWFwL3VubWFwIHRvIGV4cG9ydGVyLCBtYXAgd2lsbAotCQkgKiBtYWtlIHRoZSBkcml2ZXIg dG8gZG8gc2hhZG93IG1hcHBpbmcKLQkJICogb3IgdW5tYXBwaW5nIGZvciBzeW5jaHJvbml6YXRp b24gd2l0aCBvcmlnaW5hbAotCQkgKiBleHBvcnRlciAoZS5nLiBpOTE1KQotCQkgKgotCQkgKiBj b21tYW5kIDogRE1BQlVGX09QU19UT19TT1VSQ0UuCi0JCSAqIG9wMH4zIDogaHlwZXJfZG1hYnVm X2lkCi0JCSAqIG9wMSA6IGVudW0gaHlwZXJfZG1hYnVmX29wcyB7Li4uLn0KLQkJICovCi0JCWRl dl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwKLQkJCSIlczogSFlQRVJfRE1BQlVGX09QU19UT19TT1VS Q0VcbiIsIF9fZnVuY19fKTsKLQotCQlyZXQgPSBoeXBlcl9kbWFidWZfcmVtb3RlX3N5bmMoaGlk LCByZXEtPm9wWzRdKTsKLQotCQlpZiAocmV0KQotCQkJcmVxLT5zdGF0ID0gSFlQRVJfRE1BQlVG X1JFUV9FUlJPUjsKLQkJZWxzZQotCQkJcmVxLT5zdGF0ID0gSFlQRVJfRE1BQlVGX1JFUV9QUk9D RVNTRUQ7Ci0KLQkJcmV0dXJuIHJlcS0+Y21kOwotCX0KLQotCS8qIHN5bmNocm9ub3VzIGRtYV9i dWZfZmQgZXhwb3J0ICovCi0JaWYgKHJlcS0+Y21kID09IEhZUEVSX0RNQUJVRl9FWFBPUlRfRkQp IHsKLQkJLyogZmluZCBhIGNvcnJlc3BvbmRpbmcgU0dUIGZvciB0aGUgaWQgKi8KLQkJZGV2X2Ri ZyhoeV9kcnZfcHJpdi0+ZGV2LAotCQkJIkhZUEVSX0RNQUJVRl9FWFBPUlRfRkQgZm9yIHtpZDol ZCBrZXk6JWQgJWQgJWR9XG4iLAotCQkJaGlkLmlkLCBoaWQucm5nX2tleVswXSwgaGlkLnJuZ19r ZXlbMV0sIGhpZC5ybmdfa2V5WzJdKTsKLQotCQlleHBvcnRlZCA9IGh5cGVyX2RtYWJ1Zl9maW5k X2V4cG9ydGVkKGhpZCk7Ci0KLQkJaWYgKCFleHBvcnRlZCkgewotCQkJZGV2X2VycihoeV9kcnZf cHJpdi0+ZGV2LAotCQkJCSJidWZmZXIge2lkOiVkIGtleTolZCAlZCAlZH0gbm90IGZvdW5kXG4i LAotCQkJCWhpZC5pZCwgaGlkLnJuZ19rZXlbMF0sIGhpZC5ybmdfa2V5WzFdLAotCQkJCWhpZC5y bmdfa2V5WzJdKTsKLQotCQkJcmVxLT5zdGF0ID0gSFlQRVJfRE1BQlVGX1JFUV9FUlJPUjsKLQkJ fSBlbHNlIGlmICghZXhwb3J0ZWQtPnZhbGlkKSB7Ci0JCQlkZXZfZGJnKGh5X2Rydl9wcml2LT5k ZXYsCi0JCQkJIkJ1ZmZlciBubyBsb25nZXIgdmFsaWQge2lkOiVkIGtleTolZCAlZCAlZH1cbiIs Ci0JCQkJaGlkLmlkLCBoaWQucm5nX2tleVswXSwgaGlkLnJuZ19rZXlbMV0sCi0JCQkJaGlkLnJu Z19rZXlbMl0pOwotCi0JCQlyZXEtPnN0YXQgPSBIWVBFUl9ETUFCVUZfUkVRX0VSUk9SOwotCQl9 IGVsc2UgewotCQkJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LAotCQkJCSJCdWZmZXIgc3RpbGwg dmFsaWQge2lkOiVkIGtleTolZCAlZCAlZH1cbiIsCi0JCQkJaGlkLmlkLCBoaWQucm5nX2tleVsw XSwgaGlkLnJuZ19rZXlbMV0sCi0JCQkJaGlkLnJuZ19rZXlbMl0pOwotCi0JCQlleHBvcnRlZC0+ YWN0aXZlKys7Ci0JCQlyZXEtPnN0YXQgPSBIWVBFUl9ETUFCVUZfUkVRX1BST0NFU1NFRDsKLQkJ fQotCQlyZXR1cm4gcmVxLT5jbWQ7Ci0JfQotCi0JaWYgKHJlcS0+Y21kID09IEhZUEVSX0RNQUJV Rl9FWFBPUlRfRkRfRkFJTEVEKSB7Ci0JCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwKLQkJCSJI WVBFUl9ETUFCVUZfRVhQT1JUX0ZEX0ZBSUxFRCBmb3Ige2lkOiVkIGtleTolZCAlZCAlZH1cbiIs Ci0JCQloaWQuaWQsIGhpZC5ybmdfa2V5WzBdLCBoaWQucm5nX2tleVsxXSwgaGlkLnJuZ19rZXlb Ml0pOwotCi0JCWV4cG9ydGVkID0gaHlwZXJfZG1hYnVmX2ZpbmRfZXhwb3J0ZWQoaGlkKTsKLQot CQlpZiAoIWV4cG9ydGVkKSB7Ci0JCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCi0JCQkJImJ1 ZmZlciB7aWQ6JWQga2V5OiVkICVkICVkfSBub3QgZm91bmRcbiIsCi0JCQkJaGlkLmlkLCBoaWQu cm5nX2tleVswXSwgaGlkLnJuZ19rZXlbMV0sCi0JCQkJaGlkLnJuZ19rZXlbMl0pOwotCi0JCQly ZXEtPnN0YXQgPSBIWVBFUl9ETUFCVUZfUkVRX0VSUk9SOwotCQl9IGVsc2UgewotCQkJZXhwb3J0 ZWQtPmFjdGl2ZS0tOwotCQkJcmVxLT5zdGF0ID0gSFlQRVJfRE1BQlVGX1JFUV9QUk9DRVNTRUQ7 Ci0JCX0KLQkJcmV0dXJuIHJlcS0+Y21kOwotCX0KLQotCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRl diwKLQkJIiVzOiBwdXR0aW5nIHJlcXVlc3QgdG8gd29ya3F1ZXVlXG4iLCBfX2Z1bmNfXyk7Ci0J dGVtcF9yZXEgPSBrbWFsbG9jKHNpemVvZigqdGVtcF9yZXEpLCBHRlBfS0VSTkVMKTsKLQotCWlm ICghdGVtcF9yZXEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtY3B5KHRlbXBfcmVxLCByZXEs IHNpemVvZigqdGVtcF9yZXEpKTsKLQotCXByb2MgPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qg Y21kX3Byb2Nlc3MpLCBHRlBfS0VSTkVMKTsKLQotCWlmICghcHJvYykgewotCQlrZnJlZSh0ZW1w X3JlcSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXByb2MtPnJxID0gdGVtcF9yZXE7Ci0J cHJvYy0+ZG9taWQgPSBkb21pZDsKLQotCUlOSVRfV09SSygmKHByb2MtPndvcmspLCBjbWRfcHJv Y2Vzc193b3JrKTsKLQotCXF1ZXVlX3dvcmsoaHlfZHJ2X3ByaXYtPndvcmtfcXVldWUsICYocHJv Yy0+d29yaykpOwotCi0JcmV0dXJuIHJlcS0+Y21kOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy94 ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9tc2cuaCBiL2RyaXZlcnMveGVuL2h5cGVyX2Rt YWJ1Zi9oeXBlcl9kbWFidWZfbXNnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlj OGE3NmIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1 Zl9tc2cuaAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg wqkgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0gKiBjb3B5 IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhl ICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmlj dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byB1c2Us IGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0g KiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAot ICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsIHBvcnRpb25zIG9mIHRoZQotICogU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElT IFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Mg T1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCi0gKiBUSEUgQVVUSE9S UyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP UiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg VE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKLSAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNU SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKLSAqIElO IFRIRSBTT0ZUV0FSRS4KLSAqCi0gKi8KLQotI2lmbmRlZiBfX0hZUEVSX0RNQUJVRl9NU0dfSF9f Ci0jZGVmaW5lIF9fSFlQRVJfRE1BQlVGX01TR19IX18KLQotI2RlZmluZSBNQVhfTlVNQkVSX09G X09QRVJBTkRTIDY0Ci0KLXN0cnVjdCBoeXBlcl9kbWFidWZfcmVxIHsKLQl1bnNpZ25lZCBpbnQg cmVxX2lkOwotCXVuc2lnbmVkIGludCBzdGF0OwotCXVuc2lnbmVkIGludCBjbWQ7Ci0JdW5zaWdu ZWQgaW50IG9wW01BWF9OVU1CRVJfT0ZfT1BFUkFORFNdOwotfTsKLQotc3RydWN0IGh5cGVyX2Rt YWJ1Zl9yZXNwIHsKLQl1bnNpZ25lZCBpbnQgcmVzcF9pZDsKLQl1bnNpZ25lZCBpbnQgc3RhdDsK LQl1bnNpZ25lZCBpbnQgY21kOwotCXVuc2lnbmVkIGludCBvcFtNQVhfTlVNQkVSX09GX09QRVJB TkRTXTsKLX07Ci0KLWVudW0gaHlwZXJfZG1hYnVmX2NvbW1hbmQgewotCUhZUEVSX0RNQUJVRl9F WFBPUlQgPSAweDEwLAotCUhZUEVSX0RNQUJVRl9FWFBPUlRfRkQsCi0JSFlQRVJfRE1BQlVGX0VY UE9SVF9GRF9GQUlMRUQsCi0JSFlQRVJfRE1BQlVGX05PVElGWV9VTkVYUE9SVCwKLQlIWVBFUl9E TUFCVUZfT1BTX1RPX1JFTU9URSwKLQlIWVBFUl9ETUFCVUZfT1BTX1RPX1NPVVJDRSwKLX07Ci0K LWVudW0gaHlwZXJfZG1hYnVmX29wcyB7Ci0JSFlQRVJfRE1BQlVGX09QU19BVFRBQ0ggPSAweDEw MDAsCi0JSFlQRVJfRE1BQlVGX09QU19ERVRBQ0gsCi0JSFlQRVJfRE1BQlVGX09QU19NQVAsCi0J SFlQRVJfRE1BQlVGX09QU19VTk1BUCwKLQlIWVBFUl9ETUFCVUZfT1BTX1JFTEVBU0UsCi0JSFlQ RVJfRE1BQlVGX09QU19CRUdJTl9DUFVfQUNDRVNTLAotCUhZUEVSX0RNQUJVRl9PUFNfRU5EX0NQ VV9BQ0NFU1MsCi0JSFlQRVJfRE1BQlVGX09QU19LTUFQX0FUT01JQywKLQlIWVBFUl9ETUFCVUZf T1BTX0tVTk1BUF9BVE9NSUMsCi0JSFlQRVJfRE1BQlVGX09QU19LTUFQLAotCUhZUEVSX0RNQUJV Rl9PUFNfS1VOTUFQLAotCUhZUEVSX0RNQUJVRl9PUFNfTU1BUCwKLQlIWVBFUl9ETUFCVUZfT1BT X1ZNQVAsCi0JSFlQRVJfRE1BQlVGX09QU19WVU5NQVAsCi19OwotCi1lbnVtIGh5cGVyX2RtYWJ1 Zl9yZXFfZmVlZGJhY2sgewotCUhZUEVSX0RNQUJVRl9SRVFfUFJPQ0VTU0VEID0gMHgxMDAsCi0J SFlQRVJfRE1BQlVGX1JFUV9ORUVEU19GT0xMT1dfVVAsCi0JSFlQRVJfRE1BQlVGX1JFUV9FUlJP UiwKLQlIWVBFUl9ETUFCVUZfUkVRX05PVF9SRVNQT05ERUQKLX07Ci0KLS8qIGNyZWF0ZSBhIHJl cXVlc3QgcGFja2V0IHdpdGggZ2l2ZW4gY29tbWFuZCBhbmQgb3BlcmFuZHMgKi8KLXZvaWQgaHlw ZXJfZG1hYnVmX2NyZWF0ZV9yZXEoc3RydWN0IGh5cGVyX2RtYWJ1Zl9yZXEgKnJlcSwKLQkJCQkg ZW51bSBoeXBlcl9kbWFidWZfY29tbWFuZCBjb21tYW5kLAotCQkJCSBpbnQgKm9wZXJhbmRzKTsK LQotLyogcGFyc2UgaW5jb21pbmcgcmVxdWVzdCBwYWNrZXQgKG9yIHJlc3BvbnNlKSBhbmQgdGFr ZQotICogYXBwcm9wcmlhdGUgYWN0aW9ucyBmb3IgdGhvc2UKLSAqLwotaW50IGh5cGVyX2RtYWJ1 Zl9tc2dfcGFyc2UoaW50IGRvbWlkLCBzdHJ1Y3QgaHlwZXJfZG1hYnVmX3JlcSAqcmVxKTsKLQot I2VuZGlmIC8vIF9fSFlQRVJfRE1BQlVGX01TR19IX18KZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVu L2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfb3BzLmMgYi9kcml2ZXJzL3hlbi9oeXBlcl9kbWFi dWYvaHlwZXJfZG1hYnVmX29wcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODVm NjE5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZf b3BzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCDC qSAyMDE3IEludGVsIENvcnBvcmF0aW9uCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3Jh bnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNvcHkg b2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUg IlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0 aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVzZSwg Y29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAq IGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29u cyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0 IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0 IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Ci0g KiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRp YWwgcG9ydGlvbnMgb2YgdGhlCi0gKiBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMg UFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBP UgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBBVVRIT1JT IE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9S IE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBU T1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJ T04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwotICogSU4g VEhFIFNPRlRXQVJFLgotICoKLSAqIEF1dGhvcnM6Ci0gKiAgICBEb25nd29uIEtpbSA8ZG9uZ3dv bi5raW1AaW50ZWwuY29tPgotICogICAgTWF0ZXVzeiBQb2xyb2xhIDxtYXRldXN6eC5wb3Ryb2xh QGludGVsLmNvbT4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1 ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxp bnV4L2RtYS1idWYuaD4KLSNpbmNsdWRlICJoeXBlcl9kbWFidWZfZHJ2LmgiCi0jaW5jbHVkZSAi aHlwZXJfZG1hYnVmX3N0cnVjdC5oIgotI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9vcHMuaCIKLSNp bmNsdWRlICJoeXBlcl9kbWFidWZfc2dsX3Byb2MuaCIKLSNpbmNsdWRlICJoeXBlcl9kbWFidWZf aWQuaCIKLSNpbmNsdWRlICJoeXBlcl9kbWFidWZfbXNnLmgiCi0jaW5jbHVkZSAiaHlwZXJfZG1h YnVmX2xpc3QuaCIKLQotI2RlZmluZSBXQUlUX0FGVEVSX1NZTkNfUkVRIDAKLSNkZWZpbmUgUkVG U19QRVJfUEFHRSAoUEFHRV9TSVpFL3NpemVvZihncmFudF9yZWZfdCkpCi0KLXN0YXRpYyBpbnQg ZG1hYnVmX3JlZmNvdW50KHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmKQotewotCWlmICgoZG1hX2J1 ZiAhPSBOVUxMKSAmJiAoZG1hX2J1Zi0+ZmlsZSAhPSBOVUxMKSkKLQkJcmV0dXJuIGZpbGVfY291 bnQoZG1hX2J1Zi0+ZmlsZSk7Ci0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIGludCBz eW5jX3JlcXVlc3QoaHlwZXJfZG1hYnVmX2lkX3QgaGlkLCBpbnQgZG1hYnVmX29wcykKLXsKLQlz dHJ1Y3QgaHlwZXJfZG1hYnVmX3JlcSAqcmVxOwotCXN0cnVjdCBoeXBlcl9kbWFidWZfYmtuZF9v cHMgKmJrbmRfb3BzID0gaHlfZHJ2X3ByaXYtPmJrbmRfb3BzOwotCWludCBvcFs1XTsKLQlpbnQg aTsKLQlpbnQgcmV0OwotCi0Jb3BbMF0gPSBoaWQuaWQ7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMzsg aSsrKQotCQlvcFtpKzFdID0gaGlkLnJuZ19rZXlbaV07Ci0KLQlvcFs0XSA9IGRtYWJ1Zl9vcHM7 Ci0KLQlyZXEgPSBrY2FsbG9jKDEsIHNpemVvZigqcmVxKSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAo IXJlcSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQloeXBlcl9kbWFidWZfY3JlYXRlX3JlcShyZXEs IEhZUEVSX0RNQUJVRl9PUFNfVE9fU09VUkNFLCAmb3BbMF0pOwotCi0JLyogc2VuZCByZXF1ZXN0 IGFuZCB3YWl0IGZvciBhIHJlc3BvbnNlICovCi0JcmV0ID0gYmtuZF9vcHMtPnNlbmRfcmVxKEhZ UEVSX0RNQUJVRl9ET01fSUQoaGlkKSwgcmVxLAotCQkJCSBXQUlUX0FGVEVSX1NZTkNfUkVRKTsK LQotCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwKLQkJCSJkbWFi dWYgc3luYyByZXF1ZXN0IGZhaWxlZDolZFxuIiwgcmVxLT5vcFs0XSk7Ci0JfQotCi0Ja2ZyZWUo cmVxKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgaHlwZXJfZG1hYnVmX29wc19h dHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKLQkJCQkgICBzdHJ1Y3QgZGV2aWNlICpkZXYs Ci0JCQkJICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKQotewotCXN0cnVjdCBp bXBvcnRlZF9zZ3RfaW5mbyAqaW1wb3J0ZWQ7Ci0JaW50IHJldDsKLQotCWlmICghYXR0YWNoLT5k bWFidWYtPnByaXYpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaW1wb3J0ZWQgPSAoc3RydWN0IGlt cG9ydGVkX3NndF9pbmZvICopYXR0YWNoLT5kbWFidWYtPnByaXY7Ci0KLQlyZXQgPSBzeW5jX3Jl cXVlc3QoaW1wb3J0ZWQtPmhpZCwgSFlQRVJfRE1BQlVGX09QU19BVFRBQ0gpOwotCi0JcmV0dXJu IHJldDsKLX0KLQotc3RhdGljIHZvaWQgaHlwZXJfZG1hYnVmX29wc19kZXRhY2goc3RydWN0IGRt YV9idWYgKmRtYWJ1ZiwKLQkJCQkgICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNo KQotewotCXN0cnVjdCBpbXBvcnRlZF9zZ3RfaW5mbyAqaW1wb3J0ZWQ7Ci0JaW50IHJldDsKLQot CWlmICghYXR0YWNoLT5kbWFidWYtPnByaXYpCi0JCXJldHVybjsKLQotCWltcG9ydGVkID0gKHN0 cnVjdCBpbXBvcnRlZF9zZ3RfaW5mbyAqKWF0dGFjaC0+ZG1hYnVmLT5wcml2OwotCi0JcmV0ID0g c3luY19yZXF1ZXN0KGltcG9ydGVkLT5oaWQsIEhZUEVSX0RNQUJVRl9PUFNfREVUQUNIKTsKLX0K LQotc3RhdGljIHN0cnVjdCBzZ190YWJsZSAqaHlwZXJfZG1hYnVmX29wc19tYXAoCi0JCQkJc3Ry dWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCwKLQkJCQllbnVtIGRtYV9kYXRhX2Rp cmVjdGlvbiBkaXIpCi17Ci0Jc3RydWN0IHNnX3RhYmxlICpzdDsKLQlzdHJ1Y3QgaW1wb3J0ZWRf c2d0X2luZm8gKmltcG9ydGVkOwotCXN0cnVjdCBwYWdlc19pbmZvICpwZ19pbmZvOwotCWludCBy ZXQ7Ci0KLQlpZiAoIWF0dGFjaG1lbnQtPmRtYWJ1Zi0+cHJpdikKLQkJcmV0dXJuIE5VTEw7Ci0K LQlpbXBvcnRlZCA9IChzdHJ1Y3QgaW1wb3J0ZWRfc2d0X2luZm8gKilhdHRhY2htZW50LT5kbWFi dWYtPnByaXY7Ci0KLQkvKiBleHRyYWN0IHBhZ2VzIGZyb20gc2d0ICovCi0JcGdfaW5mbyA9IGh5 cGVyX2RtYWJ1Zl9leHRfcGdzKGltcG9ydGVkLT5zZ3QpOwotCi0JaWYgKCFwZ19pbmZvKQotCQly ZXR1cm4gTlVMTDsKLQotCS8qIGNyZWF0ZSBhIG5ldyBzZ190YWJsZSB3aXRoIGV4dHJhY3RlZCBw YWdlcyAqLwotCXN0ID0gaHlwZXJfZG1hYnVmX2NyZWF0ZV9zZ3QocGdfaW5mby0+cGdzLCBwZ19p bmZvLT5mcnN0X29mc3QsCi0JCQkJICAgICBwZ19pbmZvLT5sYXN0X2xlbiwgcGdfaW5mby0+bmVu dHMpOwotCWlmICghc3QpCi0JCWdvdG8gZXJyX2ZyZWVfc2c7Ci0KLQlpZiAoIWRtYV9tYXBfc2co YXR0YWNobWVudC0+ZGV2LCBzdC0+c2dsLCBzdC0+bmVudHMsIGRpcikpCi0JCWdvdG8gZXJyX2Zy ZWVfc2c7Ci0KLQlyZXQgPSBzeW5jX3JlcXVlc3QoaW1wb3J0ZWQtPmhpZCwgSFlQRVJfRE1BQlVG X09QU19NQVApOwotCi0Ja2ZyZWUocGdfaW5mby0+cGdzKTsKLQlrZnJlZShwZ19pbmZvKTsKLQot CXJldHVybiBzdDsKLQotZXJyX2ZyZWVfc2c6Ci0JaWYgKHN0KSB7Ci0JCXNnX2ZyZWVfdGFibGUo c3QpOwotCQlrZnJlZShzdCk7Ci0JfQotCi0Ja2ZyZWUocGdfaW5mby0+cGdzKTsKLQlrZnJlZShw Z19pbmZvKTsKLQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCBoeXBlcl9kbWFidWZf b3BzX3VubWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsCi0JCQkJICAg c3RydWN0IHNnX3RhYmxlICpzZywKLQkJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIp Ci17Ci0Jc3RydWN0IGltcG9ydGVkX3NndF9pbmZvICppbXBvcnRlZDsKLQlpbnQgcmV0OwotCi0J aWYgKCFhdHRhY2htZW50LT5kbWFidWYtPnByaXYpCi0JCXJldHVybjsKLQotCWltcG9ydGVkID0g KHN0cnVjdCBpbXBvcnRlZF9zZ3RfaW5mbyAqKWF0dGFjaG1lbnQtPmRtYWJ1Zi0+cHJpdjsKLQot CWRtYV91bm1hcF9zZyhhdHRhY2htZW50LT5kZXYsIHNnLT5zZ2wsIHNnLT5uZW50cywgZGlyKTsK LQotCXNnX2ZyZWVfdGFibGUoc2cpOwotCWtmcmVlKHNnKTsKLQotCXJldCA9IHN5bmNfcmVxdWVz dChpbXBvcnRlZC0+aGlkLCBIWVBFUl9ETUFCVUZfT1BTX1VOTUFQKTsKLX0KLQotc3RhdGljIHZv aWQgaHlwZXJfZG1hYnVmX29wc19yZWxlYXNlKHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmKQotewot CXN0cnVjdCBpbXBvcnRlZF9zZ3RfaW5mbyAqaW1wb3J0ZWQ7Ci0Jc3RydWN0IGh5cGVyX2RtYWJ1 Zl9ia25kX29wcyAqYmtuZF9vcHMgPSBoeV9kcnZfcHJpdi0+YmtuZF9vcHM7Ci0JaW50IHJldDsK LQlpbnQgZmluaXNoOwotCi0JaWYgKCFkbWFfYnVmLT5wcml2KQotCQlyZXR1cm47Ci0KLQlpbXBv cnRlZCA9IChzdHJ1Y3QgaW1wb3J0ZWRfc2d0X2luZm8gKilkbWFfYnVmLT5wcml2OwotCi0JaWYg KCFkbWFidWZfcmVmY291bnQoaW1wb3J0ZWQtPmRtYV9idWYpKQotCQlpbXBvcnRlZC0+ZG1hX2J1 ZiA9IE5VTEw7Ci0KLQlpbXBvcnRlZC0+aW1wb3J0ZXJzLS07Ci0KLQlpZiAoaW1wb3J0ZWQtPmlt cG9ydGVycyA9PSAwKSB7Ci0JCWJrbmRfb3BzLT51bm1hcF9zaGFyZWRfcGFnZXMoJmltcG9ydGVk LT5yZWZzX2luZm8sCi0JCQkJCSAgICAgaW1wb3J0ZWQtPm5lbnRzKTsKLQotCQlpZiAoaW1wb3J0 ZWQtPnNndCkgewotCQkJc2dfZnJlZV90YWJsZShpbXBvcnRlZC0+c2d0KTsKLQkJCWtmcmVlKGlt cG9ydGVkLT5zZ3QpOwotCQkJaW1wb3J0ZWQtPnNndCA9IE5VTEw7Ci0JCX0KLQl9Ci0KLQlmaW5p c2ggPSBpbXBvcnRlZCAmJiAhaW1wb3J0ZWQtPnZhbGlkICYmCi0JCSAhaW1wb3J0ZWQtPmltcG9y dGVyczsKLQotCXJldCA9IHN5bmNfcmVxdWVzdChpbXBvcnRlZC0+aGlkLCBIWVBFUl9ETUFCVUZf T1BTX1JFTEVBU0UpOwotCi0JLyoKLQkgKiBDaGVjayBpZiBidWZmZXIgaXMgc3RpbGwgdmFsaWQg YW5kIGlmIG5vdCByZW1vdmUgaXQKLQkgKiBmcm9tIGltcG9ydGVkIGxpc3QuIFRoYXQgaGFzIHRv IGJlIGRvbmUgYWZ0ZXIgc2VuZGluZwotCSAqIHN5bmMgcmVxdWVzdAotCSAqLwotCWlmIChmaW5p c2gpIHsKLQkJaHlwZXJfZG1hYnVmX3JlbW92ZV9pbXBvcnRlZChpbXBvcnRlZC0+aGlkKTsKLQkJ a2ZyZWUoaW1wb3J0ZWQpOwotCX0KLX0KLQotc3RhdGljIGludCBoeXBlcl9kbWFidWZfb3BzX2Jl Z2luX2NwdV9hY2Nlc3Moc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKLQkJCQkJICAgICBlbnVtIGRt YV9kYXRhX2RpcmVjdGlvbiBkaXIpCi17Ci0Jc3RydWN0IGltcG9ydGVkX3NndF9pbmZvICppbXBv cnRlZDsKLQlpbnQgcmV0OwotCi0JaWYgKCFkbWFidWYtPnByaXYpCi0JCXJldHVybiAtRUlOVkFM OwotCi0JaW1wb3J0ZWQgPSAoc3RydWN0IGltcG9ydGVkX3NndF9pbmZvICopZG1hYnVmLT5wcml2 OwotCi0JcmV0ID0gc3luY19yZXF1ZXN0KGltcG9ydGVkLT5oaWQsIEhZUEVSX0RNQUJVRl9PUFNf QkVHSU5fQ1BVX0FDQ0VTUyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGh5cGVy X2RtYWJ1Zl9vcHNfZW5kX2NwdV9hY2Nlc3Moc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKLQkJCQkJ ICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQotewotCXN0cnVjdCBpbXBvcnRlZF9zZ3Rf aW5mbyAqaW1wb3J0ZWQ7Ci0JaW50IHJldDsKLQotCWlmICghZG1hYnVmLT5wcml2KQotCQlyZXR1 cm4gLUVJTlZBTDsKLQotCWltcG9ydGVkID0gKHN0cnVjdCBpbXBvcnRlZF9zZ3RfaW5mbyAqKWRt YWJ1Zi0+cHJpdjsKLQotCXJldCA9IHN5bmNfcmVxdWVzdChpbXBvcnRlZC0+aGlkLCBIWVBFUl9E TUFCVUZfT1BTX0VORF9DUFVfQUNDRVNTKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9p ZCAqaHlwZXJfZG1hYnVmX29wc19rbWFwX2F0b21pYyhzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAot CQkJCQkgIHVuc2lnbmVkIGxvbmcgcGdudW0pCi17Ci0Jc3RydWN0IGltcG9ydGVkX3NndF9pbmZv ICppbXBvcnRlZDsKLQlpbnQgcmV0OwotCi0JaWYgKCFkbWFidWYtPnByaXYpCi0JCXJldHVybiBO VUxMOwotCi0JaW1wb3J0ZWQgPSAoc3RydWN0IGltcG9ydGVkX3NndF9pbmZvICopZG1hYnVmLT5w cml2OwotCi0JcmV0ID0gc3luY19yZXF1ZXN0KGltcG9ydGVkLT5oaWQsIEhZUEVSX0RNQUJVRl9P UFNfS01BUF9BVE9NSUMpOwotCi0JLyogVE9ETzogTlVMTCBmb3Igbm93LiBOZWVkIHRvIHJldHVy biB0aGUgYWRkciBvZiBtYXBwZWQgcmVnaW9uICovCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRp YyB2b2lkIGh5cGVyX2RtYWJ1Zl9vcHNfa3VubWFwX2F0b21pYyhzdHJ1Y3QgZG1hX2J1ZiAqZG1h YnVmLAotCQkJCQkgICB1bnNpZ25lZCBsb25nIHBnbnVtLCB2b2lkICp2YWRkcikKLXsKLQlzdHJ1 Y3QgaW1wb3J0ZWRfc2d0X2luZm8gKmltcG9ydGVkOwotCWludCByZXQ7Ci0KLQlpZiAoIWRtYWJ1 Zi0+cHJpdikKLQkJcmV0dXJuOwotCi0JaW1wb3J0ZWQgPSAoc3RydWN0IGltcG9ydGVkX3NndF9p bmZvICopZG1hYnVmLT5wcml2OwotCi0JcmV0ID0gc3luY19yZXF1ZXN0KGltcG9ydGVkLT5oaWQs IEhZUEVSX0RNQUJVRl9PUFNfS1VOTUFQX0FUT01JQyk7Ci19Ci0KLXN0YXRpYyB2b2lkICpoeXBl cl9kbWFidWZfb3BzX2ttYXAoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgdW5zaWduZWQgbG9uZyBw Z251bSkKLXsKLQlzdHJ1Y3QgaW1wb3J0ZWRfc2d0X2luZm8gKmltcG9ydGVkOwotCWludCByZXQ7 Ci0KLQlpZiAoIWRtYWJ1Zi0+cHJpdikKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpbXBvcnRlZCA9IChz dHJ1Y3QgaW1wb3J0ZWRfc2d0X2luZm8gKilkbWFidWYtPnByaXY7Ci0KLQlyZXQgPSBzeW5jX3Jl cXVlc3QoaW1wb3J0ZWQtPmhpZCwgSFlQRVJfRE1BQlVGX09QU19LTUFQKTsKLQotCS8qIGZvciBu b3cgTlVMTC4uIG5lZWQgdG8gcmV0dXJuIHRoZSBhZGRyZXNzIG9mIG1hcHBlZCByZWdpb24gKi8K LQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgaHlwZXJfZG1hYnVmX29wc19rdW5tYXAo c3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgdW5zaWduZWQgbG9uZyBwZ251bSwKLQkJCQkgICAgdm9p ZCAqdmFkZHIpCi17Ci0Jc3RydWN0IGltcG9ydGVkX3NndF9pbmZvICppbXBvcnRlZDsKLQlpbnQg cmV0OwotCi0JaWYgKCFkbWFidWYtPnByaXYpCi0JCXJldHVybjsKLQotCWltcG9ydGVkID0gKHN0 cnVjdCBpbXBvcnRlZF9zZ3RfaW5mbyAqKWRtYWJ1Zi0+cHJpdjsKLQotCXJldCA9IHN5bmNfcmVx dWVzdChpbXBvcnRlZC0+aGlkLCBIWVBFUl9ETUFCVUZfT1BTX0tVTk1BUCk7Ci19Ci0KLXN0YXRp YyBpbnQgaHlwZXJfZG1hYnVmX29wc19tbWFwKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCi0JCQkJ IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQotewotCXN0cnVjdCBpbXBvcnRlZF9zZ3RfaW5m byAqaW1wb3J0ZWQ7Ci0JaW50IHJldDsKLQotCWlmICghZG1hYnVmLT5wcml2KQotCQlyZXR1cm4g LUVJTlZBTDsKLQotCWltcG9ydGVkID0gKHN0cnVjdCBpbXBvcnRlZF9zZ3RfaW5mbyAqKWRtYWJ1 Zi0+cHJpdjsKLQotCXJldCA9IHN5bmNfcmVxdWVzdChpbXBvcnRlZC0+aGlkLCBIWVBFUl9ETUFC VUZfT1BTX01NQVApOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgKmh5cGVyX2Rt YWJ1Zl9vcHNfdm1hcChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKQotewotCXN0cnVjdCBpbXBvcnRl ZF9zZ3RfaW5mbyAqaW1wb3J0ZWQ7Ci0JaW50IHJldDsKLQotCWlmICghZG1hYnVmLT5wcml2KQot CQlyZXR1cm4gTlVMTDsKLQotCWltcG9ydGVkID0gKHN0cnVjdCBpbXBvcnRlZF9zZ3RfaW5mbyAq KWRtYWJ1Zi0+cHJpdjsKLQotCXJldCA9IHN5bmNfcmVxdWVzdChpbXBvcnRlZC0+aGlkLCBIWVBF Ul9ETUFCVUZfT1BTX1ZNQVApOwotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIGh5 cGVyX2RtYWJ1Zl9vcHNfdnVubWFwKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIHZvaWQgKnZhZGRy KQotewotCXN0cnVjdCBpbXBvcnRlZF9zZ3RfaW5mbyAqaW1wb3J0ZWQ7Ci0JaW50IHJldDsKLQot CWlmICghZG1hYnVmLT5wcml2KQotCQlyZXR1cm47Ci0KLQlpbXBvcnRlZCA9IChzdHJ1Y3QgaW1w b3J0ZWRfc2d0X2luZm8gKilkbWFidWYtPnByaXY7Ci0KLQlyZXQgPSBzeW5jX3JlcXVlc3QoaW1w b3J0ZWQtPmhpZCwgSFlQRVJfRE1BQlVGX09QU19WVU5NQVApOwotfQotCi1zdGF0aWMgY29uc3Qg c3RydWN0IGRtYV9idWZfb3BzIGh5cGVyX2RtYWJ1Zl9vcHMgPSB7Ci0JLmF0dGFjaCA9IGh5cGVy X2RtYWJ1Zl9vcHNfYXR0YWNoLAotCS5kZXRhY2ggPSBoeXBlcl9kbWFidWZfb3BzX2RldGFjaCwK LQkubWFwX2RtYV9idWYgPSBoeXBlcl9kbWFidWZfb3BzX21hcCwKLQkudW5tYXBfZG1hX2J1ZiA9 IGh5cGVyX2RtYWJ1Zl9vcHNfdW5tYXAsCi0JLnJlbGVhc2UgPSBoeXBlcl9kbWFidWZfb3BzX3Jl bGVhc2UsCi0JLmJlZ2luX2NwdV9hY2Nlc3MgPSAodm9pZCAqKWh5cGVyX2RtYWJ1Zl9vcHNfYmVn aW5fY3B1X2FjY2VzcywKLQkuZW5kX2NwdV9hY2Nlc3MgPSAodm9pZCAqKWh5cGVyX2RtYWJ1Zl9v cHNfZW5kX2NwdV9hY2Nlc3MsCi0JLm1hcF9hdG9taWMgPSBoeXBlcl9kbWFidWZfb3BzX2ttYXBf YXRvbWljLAotCS51bm1hcF9hdG9taWMgPSBoeXBlcl9kbWFidWZfb3BzX2t1bm1hcF9hdG9taWMs Ci0JLm1hcCA9IGh5cGVyX2RtYWJ1Zl9vcHNfa21hcCwKLQkudW5tYXAgPSBoeXBlcl9kbWFidWZf b3BzX2t1bm1hcCwKLQkubW1hcCA9IGh5cGVyX2RtYWJ1Zl9vcHNfbW1hcCwKLQkudm1hcCA9IGh5 cGVyX2RtYWJ1Zl9vcHNfdm1hcCwKLQkudnVubWFwID0gaHlwZXJfZG1hYnVmX29wc192dW5tYXAs Ci19OwotCi0vKiBleHBvcnRpbmcgZG1hYnVmIGFzIGZkICovCi1pbnQgaHlwZXJfZG1hYnVmX2V4 cG9ydF9mZChzdHJ1Y3QgaW1wb3J0ZWRfc2d0X2luZm8gKmltcG9ydGVkLCBpbnQgZmxhZ3MpCi17 Ci0JaW50IGZkID0gLTE7Ci0KLQkvKiBjYWxsIGh5cGVyX2RtYWJ1Zl9leHBvcnRfZG1hYnVmIGFu ZCBjcmVhdGUKLQkgKiBhbmQgYmluZCBhIGhhbmRsZSBmb3IgaXQgdGhlbiByZWxlYXNlCi0JICov Ci0JaHlwZXJfZG1hYnVmX2V4cG9ydF9kbWFfYnVmKGltcG9ydGVkKTsKLQotCWlmIChpbXBvcnRl ZC0+ZG1hX2J1ZikKLQkJZmQgPSBkbWFfYnVmX2ZkKGltcG9ydGVkLT5kbWFfYnVmLCBmbGFncyk7 Ci0KLQlyZXR1cm4gZmQ7Ci19Ci0KLXZvaWQgaHlwZXJfZG1hYnVmX2V4cG9ydF9kbWFfYnVmKHN0 cnVjdCBpbXBvcnRlZF9zZ3RfaW5mbyAqaW1wb3J0ZWQpCi17Ci0JREVGSU5FX0RNQV9CVUZfRVhQ T1JUX0lORk8oZXhwX2luZm8pOwotCi0JZXhwX2luZm8ub3BzID0gJmh5cGVyX2RtYWJ1Zl9vcHM7 Ci0KLQkvKiBtdWx0aXBsZSBvZiBQQUdFX1NJWkUsIG5vdCBjb25zaWRlcmluZyBvZmZzZXQgKi8K LQlleHBfaW5mby5zaXplID0gaW1wb3J0ZWQtPnNndC0+bmVudHMgKiBQQUdFX1NJWkU7Ci0JZXhw X2luZm8uZmxhZ3MgPSAvKiBub3Qgc3VyZSBhYm91dCBmbGFnICovIDA7Ci0JZXhwX2luZm8ucHJp diA9IGltcG9ydGVkOwotCi0JaW1wb3J0ZWQtPmRtYV9idWYgPSBkbWFfYnVmX2V4cG9ydCgmZXhw X2luZm8pOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2Rt YWJ1Zl9vcHMuaCBiL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfb3BzLmgK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1NTA1YTQuLjAwMDAwMDAKLS0tIGEvZHJp dmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9vcHMuaAorKysgL2Rldi9udWxsCkBA IC0xLDMyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgwqkgMjAxNyBJbnRlbCBDb3Jwb3JhdGlv bgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0 byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVh bCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQg bGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2Yg dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3 YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAotICogcGFyYWdyYXBoKSBzaGFsbCBiZSBp bmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQotICog U29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAot ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g IElOIE5PIEVWRU5UIFNIQUxMCi0gKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJ TkcKLSAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKLSAqIElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKi8K LQotI2lmbmRlZiBfX0hZUEVSX0RNQUJVRl9PUFNfSF9fCi0jZGVmaW5lIF9fSFlQRVJfRE1BQlVG X09QU19IX18KLQotaW50IGh5cGVyX2RtYWJ1Zl9leHBvcnRfZmQoc3RydWN0IGltcG9ydGVkX3Nn dF9pbmZvICppbXBvcnRlZCwgaW50IGZsYWdzKTsKLQotdm9pZCBoeXBlcl9kbWFidWZfZXhwb3J0 X2RtYV9idWYoc3RydWN0IGltcG9ydGVkX3NndF9pbmZvICppbXBvcnRlZCk7Ci0KLSNlbmRpZiAv KiBfX0hZUEVSX0RNQUJVRl9JTVBfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9oeXBl cl9kbWFidWYvaHlwZXJfZG1hYnVmX3F1ZXJ5LmMgYi9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYv aHlwZXJfZG1hYnVmX3F1ZXJ5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMmY1 NmIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9x dWVyeS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg wqkgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0gKiBjb3B5 IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhl ICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmlj dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byB1c2Us IGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0g KiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAot ICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsIHBvcnRpb25zIG9mIHRoZQotICogU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElT IFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Mg T1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCi0gKiBUSEUgQVVUSE9S UyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP UiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg VE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKLSAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNU SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKLSAqIElO IFRIRSBTT0ZUV0FSRS4KLSAqCi0gKiBBdXRob3JzOgotICogICAgRG9uZ3dvbiBLaW0gPGRvbmd3 b24ua2ltQGludGVsLmNvbT4KLSAqICAgIE1hdGV1c3ogUG9scm9sYSA8bWF0ZXVzengucG90cm9s YUBpbnRlbC5jb20+Ci0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+Ci0jaW5j bHVkZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9kcnYuaCIKLSNp bmNsdWRlICJoeXBlcl9kbWFidWZfc3RydWN0LmgiCi0jaW5jbHVkZSAiaHlwZXJfZG1hYnVmX2lk LmgiCi0KLSNkZWZpbmUgSFlQRVJfRE1BQlVGX1NJWkUobmVudHMsIGZpcnN0X29mZnNldCwgbGFz dF9sZW4pIFwKLQkoKG5lbnRzKSpQQUdFX1NJWkUgLSAoZmlyc3Rfb2Zmc2V0KSAtIFBBR0VfU0la RSArIChsYXN0X2xlbikpCi0KLWludCBoeXBlcl9kbWFidWZfcXVlcnlfZXhwb3J0ZWQoc3RydWN0 IGV4cG9ydGVkX3NndF9pbmZvICpleHBvcnRlZCwKLQkJCQlpbnQgcXVlcnksIHVuc2lnbmVkIGxv bmcgKmluZm8pCi17Ci0Jc3dpdGNoIChxdWVyeSkgewotCWNhc2UgSFlQRVJfRE1BQlVGX1FVRVJZ X1RZUEU6Ci0JCSppbmZvID0gRVhQT1JURUQ7Ci0JCWJyZWFrOwotCi0JLyogZXhwb3J0aW5nIGRv bWFpbiBvZiB0aGlzIHNwZWNpZmljIGRtYWJ1ZiovCi0JY2FzZSBIWVBFUl9ETUFCVUZfUVVFUllf RVhQT1JURVI6Ci0JCSppbmZvID0gSFlQRVJfRE1BQlVGX0RPTV9JRChleHBvcnRlZC0+aGlkKTsK LQkJYnJlYWs7Ci0KLQkvKiBpbXBvcnRpbmcgZG9tYWluIG9mIHRoaXMgc3BlY2lmaWMgZG1hYnVm ICovCi0JY2FzZSBIWVBFUl9ETUFCVUZfUVVFUllfSU1QT1JURVI6Ci0JCSppbmZvID0gZXhwb3J0 ZWQtPnJkb21pZDsKLQkJYnJlYWs7Ci0KLQkvKiBzaXplIG9mIGRtYWJ1ZiBpbiBieXRlICovCi0J Y2FzZSBIWVBFUl9ETUFCVUZfUVVFUllfU0laRToKLQkJKmluZm8gPSBleHBvcnRlZC0+ZG1hX2J1 Zi0+c2l6ZTsKLQkJYnJlYWs7Ci0KLQkvKiB3aGV0aGVyIHRoZSBidWZmZXIgaXMgdXNlZCBieSBp bXBvcnRlciAqLwotCWNhc2UgSFlQRVJfRE1BQlVGX1FVRVJZX0JVU1k6Ci0JCSppbmZvID0gKGV4 cG9ydGVkLT5hY3RpdmUgPiAwKTsKLQkJYnJlYWs7Ci0KLQkvKiB3aGV0aGVyIHRoZSBidWZmZXIg aXMgdW5leHBvcnRlZCAqLwotCWNhc2UgSFlQRVJfRE1BQlVGX1FVRVJZX1VORVhQT1JURUQ6Ci0J CSppbmZvID0gIWV4cG9ydGVkLT52YWxpZDsKLQkJYnJlYWs7Ci0KLQkvKiB3aGV0aGVyIHRoZSBi dWZmZXIgaXMgc2NoZWR1bGVkIHRvIGJlIHVuZXhwb3J0ZWQgKi8KLQljYXNlIEhZUEVSX0RNQUJV Rl9RVUVSWV9ERUxBWUVEX1VORVhQT1JURUQ6Ci0JCSppbmZvID0gIWV4cG9ydGVkLT51bmV4cG9y dF9zY2hlZDsKLQkJYnJlYWs7Ci0KLQkvKiBzaXplIG9mIHByaXZhdGUgaW5mbyBhdHRhY2hlZCB0 byBidWZmZXIgKi8KLQljYXNlIEhZUEVSX0RNQUJVRl9RVUVSWV9QUklWX0lORk9fU0laRToKLQkJ KmluZm8gPSBleHBvcnRlZC0+c3pfcHJpdjsKLQkJYnJlYWs7Ci0KLQkvKiBjb3B5IHByaXZhdGUg aW5mbyBhdHRhY2hlZCB0byBidWZmZXIgKi8KLQljYXNlIEhZUEVSX0RNQUJVRl9RVUVSWV9QUklW X0lORk86Ci0JCWlmIChleHBvcnRlZC0+c3pfcHJpdiA+IDApIHsKLQkJCWludCBuOwotCi0JCQlu ID0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSAqaW5mbywKLQkJCQkJZXhwb3J0ZWQtPnBy aXYsCi0JCQkJCWV4cG9ydGVkLT5zel9wcml2KTsKLQkJCWlmIChuICE9IDApCi0JCQkJcmV0dXJu IC1FSU5WQUw7Ci0JCX0KLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsK LQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1pbnQgaHlwZXJfZG1hYnVmX3F1ZXJ5X2ltcG9ydGVk KHN0cnVjdCBpbXBvcnRlZF9zZ3RfaW5mbyAqaW1wb3J0ZWQsCi0JCQkJaW50IHF1ZXJ5LCB1bnNp Z25lZCBsb25nICppbmZvKQotewotCXN3aXRjaCAocXVlcnkpIHsKLQljYXNlIEhZUEVSX0RNQUJV Rl9RVUVSWV9UWVBFOgotCQkqaW5mbyA9IElNUE9SVEVEOwotCQlicmVhazsKLQotCS8qIGV4cG9y dGluZyBkb21haW4gb2YgdGhpcyBzcGVjaWZpYyBkbWFidWYqLwotCWNhc2UgSFlQRVJfRE1BQlVG X1FVRVJZX0VYUE9SVEVSOgotCQkqaW5mbyA9IEhZUEVSX0RNQUJVRl9ET01fSUQoaW1wb3J0ZWQt PmhpZCk7Ci0JCWJyZWFrOwotCi0JLyogaW1wb3J0aW5nIGRvbWFpbiBvZiB0aGlzIHNwZWNpZmlj IGRtYWJ1ZiAqLwotCWNhc2UgSFlQRVJfRE1BQlVGX1FVRVJZX0lNUE9SVEVSOgotCQkqaW5mbyA9 IGh5X2Rydl9wcml2LT5kb21pZDsKLQkJYnJlYWs7Ci0KLQkvKiBzaXplIG9mIGRtYWJ1ZiBpbiBi eXRlICovCi0JY2FzZSBIWVBFUl9ETUFCVUZfUVVFUllfU0laRToKLQkJaWYgKGltcG9ydGVkLT5k bWFfYnVmKSB7Ci0JCQkvKiBpZiBsb2NhbCBkbWFfYnVmIGlzIGNyZWF0ZWQgKGlmIGl0J3MKLQkJ CSAqIGV2ZXIgbWFwcGVkKSwgcmV0cmlldmUgaXQgZGlyZWN0bHkKLQkJCSAqIGZyb20gc3RydWN0 IGRtYV9idWYgKgotCQkJICovCi0JCQkqaW5mbyA9IGltcG9ydGVkLT5kbWFfYnVmLT5zaXplOwot CQl9IGVsc2UgewotCQkJLyogY2FsY3VhdGUgaXQgZnJvbSBnaXZlbiBuZW50cywgZnJzdF9vZnN0 Ci0JCQkgKiBhbmQgbGFzdF9sZW4KLQkJCSAqLwotCQkJKmluZm8gPSBIWVBFUl9ETUFCVUZfU0la RShpbXBvcnRlZC0+bmVudHMsCi0JCQkJCQkgIGltcG9ydGVkLT5mcnN0X29mc3QsCi0JCQkJCQkg IGltcG9ydGVkLT5sYXN0X2xlbik7Ci0JCX0KLQkJYnJlYWs7Ci0KLQkvKiB3aGV0aGVyIHRoZSBi dWZmZXIgaXMgdXNlZCBvciBub3QgKi8KLQljYXNlIEhZUEVSX0RNQUJVRl9RVUVSWV9CVVNZOgot CQkvKiBjaGVja3MgaWYgaXQncyB1c2VkIGJ5IGltcG9ydGVyICovCi0JCSppbmZvID0gKGltcG9y dGVkLT5pbXBvcnRlcnMgPiAwKTsKLQkJYnJlYWs7Ci0KLQkvKiB3aGV0aGVyIHRoZSBidWZmZXIg aXMgdW5leHBvcnRlZCAqLwotCWNhc2UgSFlQRVJfRE1BQlVGX1FVRVJZX1VORVhQT1JURUQ6Ci0J CSppbmZvID0gIWltcG9ydGVkLT52YWxpZDsKLQkJYnJlYWs7Ci0KLQkvKiBzaXplIG9mIHByaXZh dGUgaW5mbyBhdHRhY2hlZCB0byBidWZmZXIgKi8KLQljYXNlIEhZUEVSX0RNQUJVRl9RVUVSWV9Q UklWX0lORk9fU0laRToKLQkJKmluZm8gPSBpbXBvcnRlZC0+c3pfcHJpdjsKLQkJYnJlYWs7Ci0K LQkvKiBjb3B5IHByaXZhdGUgaW5mbyBhdHRhY2hlZCB0byBidWZmZXIgKi8KLQljYXNlIEhZUEVS X0RNQUJVRl9RVUVSWV9QUklWX0lORk86Ci0JCWlmIChpbXBvcnRlZC0+c3pfcHJpdiA+IDApIHsK LQkJCWludCBuOwotCi0JCQluID0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSppbmZvLAot CQkJCQlpbXBvcnRlZC0+cHJpdiwKLQkJCQkJaW1wb3J0ZWQtPnN6X3ByaXYpOwotCQkJaWYgKG4g IT0gMCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0J CXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9xdWVyeS5oIGIvZHJpdmVycy94ZW4vaHlw ZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9xdWVyeS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCA2NWFlNzM4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBl cl9kbWFidWZfcXVlcnkuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLSNpZm5kZWYg X19IWVBFUl9ETUFCVUZfUVVFUllfSF9fCi0jZGVmaW5lIF9fSFlQRVJfRE1BQlVGX1FVRVJZX0hf XwotCi1pbnQgaHlwZXJfZG1hYnVmX3F1ZXJ5X2ltcG9ydGVkKHN0cnVjdCBpbXBvcnRlZF9zZ3Rf aW5mbyAqaW1wb3J0ZWQsCi0JCQkJaW50IHF1ZXJ5LCB1bnNpZ25lZCBsb25nICppbmZvKTsKLQot aW50IGh5cGVyX2RtYWJ1Zl9xdWVyeV9leHBvcnRlZChzdHJ1Y3QgZXhwb3J0ZWRfc2d0X2luZm8g KmV4cG9ydGVkLAotCQkJCWludCBxdWVyeSwgdW5zaWduZWQgbG9uZyAqaW5mbyk7Ci0KLSNlbmRp ZiAvLyBfX0hZUEVSX0RNQUJVRl9RVUVSWV9IX18KZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL2h5 cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfcmVtb3RlX3N5bmMuYyBiL2RyaXZlcnMveGVuL2h5cGVy X2RtYWJ1Zi9oeXBlcl9kbWFidWZfcmVtb3RlX3N5bmMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggYTgyZmQ3Yi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYv aHlwZXJfZG1hYnVmX3JlbW90ZV9zeW5jLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMjIgKzAsMCBA QAotLyoKLSAqIENvcHlyaWdodCDCqSAyMDE3IEludGVsIENvcnBvcmF0aW9uCi0gKgotICogUGVy bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24g b2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1 bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0 d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0g KiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlz aGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0g KiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAo aW5jbHVkaW5nIHRoZSBuZXh0Ci0gKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFs bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCi0gKiBTb2Z0d2FyZS4KLSAq Ci0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBP RiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQg U0hBTEwKLSAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1Ig QU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwg T1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBP VEhFUiBERUFMSU5HUwotICogSU4gVEhFIFNPRlRXQVJFLgotICoKLSAqIEF1dGhvcnM6Ci0gKiAg ICBEb25nd29uIEtpbSA8ZG9uZ3dvbi5raW1AaW50ZWwuY29tPgotICogICAgTWF0ZXVzeiBQb2xy b2xhIDxtYXRldXN6eC5wb3Ryb2xhQGludGVsLmNvbT4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxp bnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgv c2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4KLSNpbmNsdWRlICJoeXBlcl9kbWFi dWZfZHJ2LmgiCi0jaW5jbHVkZSAiaHlwZXJfZG1hYnVmX3N0cnVjdC5oIgotI2luY2x1ZGUgImh5 cGVyX2RtYWJ1Zl9saXN0LmgiCi0jaW5jbHVkZSAiaHlwZXJfZG1hYnVmX21zZy5oIgotI2luY2x1 ZGUgImh5cGVyX2RtYWJ1Zl9pZC5oIgotI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9zZ2xfcHJvYy5o IgotCi0vKiBXaGVuZXZlciBpbXBvcnRlciBkb2VzIGRtYSBvcGVyYXRpb25zIGZyb20gcmVtb3Rl IGRvbWFpbiwKLSAqIGEgbm90aWZpY2F0aW9uIGlzIHNlbnQgdG8gdGhlIGV4cG9ydGVyIHNvIHRo YXQgZXhwb3J0ZXIKLSAqIGlzc3VlcyBlcXVpdmFsZW50IGRtYSBvcGVyYXRpb24gb24gdGhlIG9y aWdpbmFsIGRtYSBidWYKLSAqIGZvciBpbmRpcmVjdCBzeW5jaHJvbml6YXRpb24gdmlhIHNoYWRv dyBvcGVyYXRpb25zLgotICoKLSAqIEFsbCBwdHJzIGFuZCByZWZlcmVuY2VzIChlLmcgc3RydWN0 IHNnX3RhYmxlKiwKLSAqIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQpIGNyZWF0ZWQgdmlhIHRo ZXNlIG9wZXJhdGlvbnMgb24KLSAqIGV4cG9ydGVyJ3Mgc2lkZSBhcmUga2VwdCBpbiBzdGFjayAo aW1wbGVtZW50ZWQgYXMgY2lyY3VsYXIKLSAqIGxpbmtlZC1saXN0cykgc2VwYXJhdGVseSBzbyB0 aGF0IHRob3NlIGNhbiBiZSByZS1yZWZlcmVuY2VkCi0gKiBsYXRlciB3aGVuIHVubWFwcGluZyBv cGVyYXRpb25zIGFyZSBpbnZva2VkIHRvIGZyZWUgdGhvc2UuCi0gKgotICogVGhlIHZlcnkgZmly c3QgZWxlbWVudCBvbiB0aGUgYm90dG9tIG9mIGVhY2ggc3RhY2sgaG9sZHMKLSAqIGlzIHdoYXQg aXMgY3JlYXRlZCB3aGVuIGluaXRpYWwgZXhwb3J0aW5nIGlzIGlzc3VlZCBzbyBpdAotICogc2hv dWxkIG5vdCBiZSBtb2RpZmllZCBvciByZWxlYXNlZCBieSB0aGlzIGZ1Y3Rpb24uCi0gKi8KLWlu dCBoeXBlcl9kbWFidWZfcmVtb3RlX3N5bmMoaHlwZXJfZG1hYnVmX2lkX3QgaGlkLCBpbnQgb3Bz KQotewotCXN0cnVjdCBleHBvcnRlZF9zZ3RfaW5mbyAqZXhwb3J0ZWQ7Ci0Jc3RydWN0IHNndF9s aXN0ICpzZ3RsOwotCXN0cnVjdCBhdHRhY2htZW50X2xpc3QgKmF0dGFjaGw7Ci0Jc3RydWN0IGtt YXBfdmFkZHJfbGlzdCAqdmFfa21hcGw7Ci0Jc3RydWN0IHZtYXBfdmFkZHJfbGlzdCAqdmFfdm1h cGw7Ci0JaW50IHJldDsKLQotCS8qIGZpbmQgYSBjb3Jlc3BvbmRpbmcgU0dUIGZvciB0aGUgaWQg Ki8KLQlleHBvcnRlZCA9IGh5cGVyX2RtYWJ1Zl9maW5kX2V4cG9ydGVkKGhpZCk7Ci0KLQlpZiAo IWV4cG9ydGVkKSB7Ci0JCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKLQkJCSJkbWFidWYgcmVt b3RlIHN5bmM6OmNhbid0IGZpbmQgZXhwb3J0ZWQgbGlzdFxuIik7Ci0JCXJldHVybiAtRU5PRU5U OwotCX0KLQotCXN3aXRjaCAob3BzKSB7Ci0JY2FzZSBIWVBFUl9ETUFCVUZfT1BTX0FUVEFDSDoK LQkJYXR0YWNobCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCphdHRhY2hsKSwgR0ZQX0tFUk5FTCk7Ci0K LQkJaWYgKCFhdHRhY2hsKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJYXR0YWNobC0+YXR0YWNo ID0gZG1hX2J1Zl9hdHRhY2goZXhwb3J0ZWQtPmRtYV9idWYsCi0JCQkJCQkgaHlfZHJ2X3ByaXYt PmRldik7Ci0KLQkJaWYgKCFhdHRhY2hsLT5hdHRhY2gpIHsKLQkJCWtmcmVlKGF0dGFjaGwpOwot CQkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAotCQkJCSJyZW1vdGUgc3luYzo6SFlQRVJfRE1B QlVGX09QU19BVFRBQ0hcbiIpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQotCQlsaXN0X2Fk ZCgmYXR0YWNobC0+bGlzdCwgJmV4cG9ydGVkLT5hY3RpdmVfYXR0YWNoZWQtPmxpc3QpOwotCQli cmVhazsKLQotCWNhc2UgSFlQRVJfRE1BQlVGX09QU19ERVRBQ0g6Ci0JCWlmIChsaXN0X2VtcHR5 KCZleHBvcnRlZC0+YWN0aXZlX2F0dGFjaGVkLT5saXN0KSkgewotCQkJZGV2X2VycihoeV9kcnZf cHJpdi0+ZGV2LAotCQkJCSJyZW1vdGUgc3luYzo6SFlQRVJfRE1BQlVGX09QU19ERVRBQ0hcbiIp OwotCQkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAotCQkJCSJubyBtb3JlIGRtYWJ1ZiBhdHRh Y2htZW50IGxlZnQgdG8gYmUgZGV0YWNoZWRcbiIpOwotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0K LQotCQlhdHRhY2hsID0gbGlzdF9maXJzdF9lbnRyeSgmZXhwb3J0ZWQtPmFjdGl2ZV9hdHRhY2hl ZC0+bGlzdCwKLQkJCQkJICAgc3RydWN0IGF0dGFjaG1lbnRfbGlzdCwgbGlzdCk7Ci0KLQkJZG1h X2J1Zl9kZXRhY2goZXhwb3J0ZWQtPmRtYV9idWYsIGF0dGFjaGwtPmF0dGFjaCk7Ci0JCWxpc3Rf ZGVsKCZhdHRhY2hsLT5saXN0KTsKLQkJa2ZyZWUoYXR0YWNobCk7Ci0JCWJyZWFrOwotCi0JY2Fz ZSBIWVBFUl9ETUFCVUZfT1BTX01BUDoKLQkJaWYgKGxpc3RfZW1wdHkoJmV4cG9ydGVkLT5hY3Rp dmVfYXR0YWNoZWQtPmxpc3QpKSB7Ci0JCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCi0JCQkJ InJlbW90ZSBzeW5jOjpIWVBFUl9ETUFCVUZfT1BTX01BUFxuIik7Ci0JCQlkZXZfZXJyKGh5X2Ry dl9wcml2LT5kZXYsCi0JCQkJIm5vIG1vcmUgZG1hYnVmIGF0dGFjaG1lbnQgbGVmdCB0byBiZSBt YXBwZWRcbiIpOwotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KLQotCQlhdHRhY2hsID0gbGlzdF9m aXJzdF9lbnRyeSgmZXhwb3J0ZWQtPmFjdGl2ZV9hdHRhY2hlZC0+bGlzdCwKLQkJCQkJICAgc3Ry dWN0IGF0dGFjaG1lbnRfbGlzdCwgbGlzdCk7Ci0KLQkJc2d0bCA9IGtjYWxsb2MoMSwgc2l6ZW9m KCpzZ3RsKSwgR0ZQX0tFUk5FTCk7Ci0KLQkJaWYgKCFzZ3RsKQotCQkJcmV0dXJuIC1FTk9NRU07 Ci0KLQkJc2d0bC0+c2d0ID0gZG1hX2J1Zl9tYXBfYXR0YWNobWVudChhdHRhY2hsLT5hdHRhY2gs Ci0JCQkJCQkgICBETUFfQklESVJFQ1RJT05BTCk7Ci0JCWlmICghc2d0bC0+c2d0KSB7Ci0JCQlr ZnJlZShzZ3RsKTsKLQkJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKLQkJCQkicmVtb3RlIHN5 bmM6OkhZUEVSX0RNQUJVRl9PUFNfTUFQXG4iKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0J CWxpc3RfYWRkKCZzZ3RsLT5saXN0LCAmZXhwb3J0ZWQtPmFjdGl2ZV9zZ3RzLT5saXN0KTsKLQkJ YnJlYWs7Ci0KLQljYXNlIEhZUEVSX0RNQUJVRl9PUFNfVU5NQVA6Ci0JCWlmIChsaXN0X2VtcHR5 KCZleHBvcnRlZC0+YWN0aXZlX3NndHMtPmxpc3QpIHx8Ci0JCSAgICBsaXN0X2VtcHR5KCZleHBv cnRlZC0+YWN0aXZlX2F0dGFjaGVkLT5saXN0KSkgewotCQkJZGV2X2VycihoeV9kcnZfcHJpdi0+ ZGV2LAotCQkJCSJyZW1vdGUgc3luYzo6SFlQRVJfRE1BQlVGX09QU19VTk1BUFxuIik7Ci0JCQlk ZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCi0JCQkJIm5vIFNHVCBvciBhdHRhY2ggbGVmdCB0byBi ZSB1bm1hcHBlZFxuIik7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCi0JCWF0dGFjaGwgPSBs aXN0X2ZpcnN0X2VudHJ5KCZleHBvcnRlZC0+YWN0aXZlX2F0dGFjaGVkLT5saXN0LAotCQkJCQkg ICBzdHJ1Y3QgYXR0YWNobWVudF9saXN0LCBsaXN0KTsKLQkJc2d0bCA9IGxpc3RfZmlyc3RfZW50 cnkoJmV4cG9ydGVkLT5hY3RpdmVfc2d0cy0+bGlzdCwKLQkJCQkJc3RydWN0IHNndF9saXN0LCBs aXN0KTsKLQotCQlkbWFfYnVmX3VubWFwX2F0dGFjaG1lbnQoYXR0YWNobC0+YXR0YWNoLCBzZ3Rs LT5zZ3QsCi0JCQkJCSBETUFfQklESVJFQ1RJT05BTCk7Ci0JCWxpc3RfZGVsKCZzZ3RsLT5saXN0 KTsKLQkJa2ZyZWUoc2d0bCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBIWVBFUl9ETUFCVUZfT1BTX1JF TEVBU0U6Ci0JCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwKLQkJCSJpZDolZCBrZXk6JWQgJWQg JWR9IHJlbGVhc2VkLCByZWYgbGVmdDogJWRcbiIsCi0JCQkgZXhwb3J0ZWQtPmhpZC5pZCwgZXhw b3J0ZWQtPmhpZC5ybmdfa2V5WzBdLAotCQkJIGV4cG9ydGVkLT5oaWQucm5nX2tleVsxXSwgZXhw b3J0ZWQtPmhpZC5ybmdfa2V5WzJdLAotCQkJIGV4cG9ydGVkLT5hY3RpdmUgLSAxKTsKLQotCQll eHBvcnRlZC0+YWN0aXZlLS07Ci0KLQkJLyogSWYgdGhlcmUgYXJlIHN0aWxsIGltcG9ydGVycyBq dXN0IGJyZWFrLCBpZiBubyB0aGVuCi0JCSAqIGNvbnRpbnVlIHdpdGggZmluYWwgY2xlYW51cAot CQkgKi8KLQkJaWYgKGV4cG9ydGVkLT5hY3RpdmUpCi0JCQlicmVhazsKLQotCQkvKiBJbXBvcnRl ciBqdXN0IHJlbGVhc2VkIGJ1ZmZlciBmZCwgY2hlY2sgaWYgdGhlcmUgaXMKLQkJICogYW55IG90 aGVyIGltcG9ydGVyIHN0aWxsIHVzaW5nIGl0LgotCQkgKiBJZiBub3QgYW5kIGJ1ZmZlciB3YXMg dW5leHBvcnRlZCwgY2xlYW4gdXAgc2hhcmVkCi0JCSAqIGRhdGEgYW5kIHJlbW92ZSB0aGF0IGJ1 ZmZlci4KLQkJICovCi0JCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwKLQkJCSJCdWZmZXIge2lk OiVkIGtleTolZCAlZCAlZH0gZmluYWwgcmVsZWFzZWRcbiIsCi0JCQlleHBvcnRlZC0+aGlkLmlk LCBleHBvcnRlZC0+aGlkLnJuZ19rZXlbMF0sCi0JCQlleHBvcnRlZC0+aGlkLnJuZ19rZXlbMV0s IGV4cG9ydGVkLT5oaWQucm5nX2tleVsyXSk7Ci0KLQkJaWYgKCFleHBvcnRlZC0+dmFsaWQgJiYg IWV4cG9ydGVkLT5hY3RpdmUgJiYKLQkJICAgICFleHBvcnRlZC0+dW5leHBvcnRfc2NoZWQpIHsK LQkJCWh5cGVyX2RtYWJ1Zl9jbGVhbnVwX3NndF9pbmZvKGV4cG9ydGVkLCBmYWxzZSk7Ci0JCQlo eXBlcl9kbWFidWZfcmVtb3ZlX2V4cG9ydGVkKGhpZCk7Ci0JCQlrZnJlZShleHBvcnRlZCk7Ci0J CQkvKiBzdG9yZSBoeXBlcl9kbWFidWZfaWQgaW4gdGhlIGxpc3QgZm9yIHJldXNlICovCi0JCQlo eXBlcl9kbWFidWZfc3RvcmVfaGlkKGhpZCk7Ci0JCX0KLQotCQlicmVhazsKLQotCWNhc2UgSFlQ RVJfRE1BQlVGX09QU19CRUdJTl9DUFVfQUNDRVNTOgotCQlyZXQgPSBkbWFfYnVmX2JlZ2luX2Nw dV9hY2Nlc3MoZXhwb3J0ZWQtPmRtYV9idWYsCi0JCQkJCSAgICAgICBETUFfQklESVJFQ1RJT05B TCk7Ci0JCWlmIChyZXQpIHsKLQkJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKLQkJCQkiSFlQ RVJfRE1BQlVGX09QU19CRUdJTl9DUFVfQUNDRVNTXG4iKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0K LQkJYnJlYWs7Ci0KLQljYXNlIEhZUEVSX0RNQUJVRl9PUFNfRU5EX0NQVV9BQ0NFU1M6Ci0JCXJl dCA9IGRtYV9idWZfZW5kX2NwdV9hY2Nlc3MoZXhwb3J0ZWQtPmRtYV9idWYsCi0JCQkJCSAgICAg RE1BX0JJRElSRUNUSU9OQUwpOwotCQlpZiAocmV0KSB7Ci0JCQlkZXZfZXJyKGh5X2Rydl9wcml2 LT5kZXYsCi0JCQkJIkhZUEVSX0RNQUJVRl9PUFNfRU5EX0NQVV9BQ0NFU1NcbiIpOwotCQkJcmV0 dXJuIHJldDsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgSFlQRVJfRE1BQlVGX09QU19LTUFQX0FU T01JQzoKLQljYXNlIEhZUEVSX0RNQUJVRl9PUFNfS01BUDoKLQkJdmFfa21hcGwgPSBrY2FsbG9j KDEsIHNpemVvZigqdmFfa21hcGwpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCF2YV9rbWFwbCkKLQkJ CXJldHVybiAtRU5PTUVNOwotCi0JCS8qIGR1bW15IGttYXBwaW5nIG9mIDEgcGFnZSAqLwotCQlp ZiAob3BzID09IEhZUEVSX0RNQUJVRl9PUFNfS01BUF9BVE9NSUMpCi0JCQl2YV9rbWFwbC0+dmFk ZHIgPSBkbWFfYnVmX2ttYXBfYXRvbWljKAotCQkJCQkJZXhwb3J0ZWQtPmRtYV9idWYsIDEpOwot CQllbHNlCi0JCQl2YV9rbWFwbC0+dmFkZHIgPSBkbWFfYnVmX2ttYXAoCi0JCQkJCQlleHBvcnRl ZC0+ZG1hX2J1ZiwgMSk7Ci0KLQkJaWYgKCF2YV9rbWFwbC0+dmFkZHIpIHsKLQkJCWtmcmVlKHZh X2ttYXBsKTsKLQkJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKLQkJCQkiSFlQRVJfRE1BQlVG X09QU19LTUFQKF9BVE9NSUMpXG4iKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCWxpc3Rf YWRkKCZ2YV9rbWFwbC0+bGlzdCwgJmV4cG9ydGVkLT52YV9rbWFwcGVkLT5saXN0KTsKLQkJYnJl YWs7Ci0KLQljYXNlIEhZUEVSX0RNQUJVRl9PUFNfS1VOTUFQX0FUT01JQzoKLQljYXNlIEhZUEVS X0RNQUJVRl9PUFNfS1VOTUFQOgotCQlpZiAobGlzdF9lbXB0eSgmZXhwb3J0ZWQtPnZhX2ttYXBw ZWQtPmxpc3QpKSB7Ci0JCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCi0JCQkJIkhZUEVSX0RN QUJVRl9PUFNfS1VOTUFQKF9BVE9NSUMpXG4iKTsKLQkJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRl diwKLQkJCQkibm8gbW9yZSBkbWFidWYgVkEgdG8gYmUgZnJlZWRcbiIpOwotCQkJcmV0dXJuIC1F RkFVTFQ7Ci0JCX0KLQotCQl2YV9rbWFwbCA9IGxpc3RfZmlyc3RfZW50cnkoJmV4cG9ydGVkLT52 YV9rbWFwcGVkLT5saXN0LAotCQkJCQkgICAgc3RydWN0IGttYXBfdmFkZHJfbGlzdCwgbGlzdCk7 Ci0JCWlmICghdmFfa21hcGwtPnZhZGRyKSB7Ci0JCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYs Ci0JCQkJIkhZUEVSX0RNQUJVRl9PUFNfS1VOTUFQKF9BVE9NSUMpXG4iKTsKLQkJCXJldHVybiBQ VFJfRVJSKHZhX2ttYXBsLT52YWRkcik7Ci0JCX0KLQotCQkvKiB1bm1hcHBpbmcgMSBwYWdlICov Ci0JCWlmIChvcHMgPT0gSFlQRVJfRE1BQlVGX09QU19LVU5NQVBfQVRPTUlDKQotCQkJZG1hX2J1 Zl9rdW5tYXBfYXRvbWljKGV4cG9ydGVkLT5kbWFfYnVmLAotCQkJCQkgICAgICAxLCB2YV9rbWFw bC0+dmFkZHIpOwotCQllbHNlCi0JCQlkbWFfYnVmX2t1bm1hcChleHBvcnRlZC0+ZG1hX2J1ZiwK LQkJCQkgICAgICAgMSwgdmFfa21hcGwtPnZhZGRyKTsKLQotCQlsaXN0X2RlbCgmdmFfa21hcGwt Pmxpc3QpOwotCQlrZnJlZSh2YV9rbWFwbCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBIWVBFUl9ETUFC VUZfT1BTX01NQVA6Ci0JCS8qIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkOiBsb29raW5nIGZvciBh IHdheSB0byBjcmVhdGUKLQkJICogYSBkdW1teSB2bWEKLQkJICovCi0JCWRldl93YXJuKGh5X2Ry dl9wcml2LT5kZXYsCi0JCQkgInJlbW90ZSBzeW5jOjpzeWNocm9uaXplZCBtbWFwIGlzIG5vdCBz dXBwb3J0ZWRcbiIpOwotCQlicmVhazsKLQotCWNhc2UgSFlQRVJfRE1BQlVGX09QU19WTUFQOgot CQl2YV92bWFwbCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCp2YV92bWFwbCksIEdGUF9LRVJORUwpOwot Ci0JCWlmICghdmFfdm1hcGwpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQotCQkvKiBkdW1teSB2bWFw cGluZyAqLwotCQl2YV92bWFwbC0+dmFkZHIgPSBkbWFfYnVmX3ZtYXAoZXhwb3J0ZWQtPmRtYV9i dWYpOwotCi0JCWlmICghdmFfdm1hcGwtPnZhZGRyKSB7Ci0JCQlrZnJlZSh2YV92bWFwbCk7Ci0J CQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCi0JCQkJInJlbW90ZSBzeW5jOjpIWVBFUl9ETUFC VUZfT1BTX1ZNQVBcbiIpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQkJbGlzdF9hZGQoJnZh X3ZtYXBsLT5saXN0LCAmZXhwb3J0ZWQtPnZhX3ZtYXBwZWQtPmxpc3QpOwotCQlicmVhazsKLQot CWNhc2UgSFlQRVJfRE1BQlVGX09QU19WVU5NQVA6Ci0JCWlmIChsaXN0X2VtcHR5KCZleHBvcnRl ZC0+dmFfdm1hcHBlZC0+bGlzdCkpIHsKLQkJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKLQkJ CQkicmVtb3RlIHN5bmM6OkhZUEVSX0RNQUJVRl9PUFNfVlVOTUFQXG4iKTsKLQkJCWRldl9lcnIo aHlfZHJ2X3ByaXYtPmRldiwKLQkJCQkibm8gbW9yZSBkbWFidWYgVkEgdG8gYmUgZnJlZWRcbiIp OwotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KLQkJdmFfdm1hcGwgPSBsaXN0X2ZpcnN0X2VudHJ5 KCZleHBvcnRlZC0+dmFfdm1hcHBlZC0+bGlzdCwKLQkJCQkJc3RydWN0IHZtYXBfdmFkZHJfbGlz dCwgbGlzdCk7Ci0JCWlmICghdmFfdm1hcGwgfHwgdmFfdm1hcGwtPnZhZGRyID09IE5VTEwpIHsK LQkJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKLQkJCQkicmVtb3RlIHN5bmM6OkhZUEVSX0RN QUJVRl9PUFNfVlVOTUFQXG4iKTsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0KLQkJZG1hX2J1 Zl92dW5tYXAoZXhwb3J0ZWQtPmRtYV9idWYsIHZhX3ZtYXBsLT52YWRkcik7Ci0KLQkJbGlzdF9k ZWwoJnZhX3ZtYXBsLT5saXN0KTsKLQkJa2ZyZWUodmFfdm1hcGwpOwotCQlicmVhazsKLQotCWRl ZmF1bHQ6Ci0JCS8qIHByb2dyYW0gc2hvdWxkIG5vdCBnZXQgaGVyZSAqLwotCQlicmVhazsKLQl9 Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9o eXBlcl9kbWFidWZfcmVtb3RlX3N5bmMuaCBiL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBl cl9kbWFidWZfcmVtb3RlX3N5bmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY2 Mzg5MjguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1 Zl9yZW1vdGVfc3luYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoKLSAqIENv cHlyaWdodCDCqSAyMDE3IEludGVsIENvcnBvcmF0aW9uCi0gKgotICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK LSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp bGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRz IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGlj ZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUg Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRo ZSBuZXh0Ci0gKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Ig c3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCi0gKiBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09G VFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwg RVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRI RSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE QU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwgT1VUIE9GIE9SIElO IENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5H UwotICogSU4gVEhFIFNPRlRXQVJFLgotICoKLSAqLwotCi0jaWZuZGVmIF9fSFlQRVJfRE1BQlVG X1JFTU9URV9TWU5DX0hfXwotI2RlZmluZSBfX0hZUEVSX0RNQUJVRl9SRU1PVEVfU1lOQ19IX18K LQotaW50IGh5cGVyX2RtYWJ1Zl9yZW1vdGVfc3luYyhoeXBlcl9kbWFidWZfaWRfdCBoaWQsIGlu dCBvcHMpOwotCi0jZW5kaWYgLy8gX19IWVBFUl9ETUFCVUZfUkVNT1RFX1NZTkNfSF9fCmRpZmYg LS1naXQgYS9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX3NnbF9wcm9jLmMg Yi9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX3NnbF9wcm9jLmMKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxNWViMTcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy94 ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9zZ2xfcHJvYy5jCisrKyAvZGV2L251bGwKQEAg LTEsMjU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgwqkgMjAxNyBJbnRlbCBDb3Jwb3JhdGlv bgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0 byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVh bCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQg bGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2Yg dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3 YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAotICogcGFyYWdyYXBoKSBzaGFsbCBiZSBp bmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQotICog U29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAot ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g IElOIE5PIEVWRU5UIFNIQUxMCi0gKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJ TkcKLSAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKLSAqIElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKiBB dXRob3JzOgotICogICAgRG9uZ3dvbiBLaW0gPGRvbmd3b24ua2ltQGludGVsLmNvbT4KLSAqICAg IE1hdGV1c3ogUG9scm9sYSA8bWF0ZXVzengucG90cm9sYUBpbnRlbC5jb20+Ci0gKgotICovCi0K LSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2lu Y2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+Ci0jaW5jbHVk ZSAiaHlwZXJfZG1hYnVmX2Rydi5oIgotI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9zdHJ1Y3QuaCIK LSNpbmNsdWRlICJoeXBlcl9kbWFidWZfc2dsX3Byb2MuaCIKLQotI2RlZmluZSBSRUZTX1BFUl9Q QUdFIChQQUdFX1NJWkUvc2l6ZW9mKGdyYW50X3JlZl90KSkKLQotLyogcmV0dXJuIHRvdGFsIG51 bWJlciBvZiBwYWdlcyByZWZlcmVuY2VkIGJ5IGEgc2d0Ci0gKiBmb3IgcHJlLWNhbGN1bGF0aW9u IG9mICMgb2YgcGFnZXMgYmVoaW5kIGEgZ2l2ZW4gc2d0Ci0gKi8KLXN0YXRpYyBpbnQgZ2V0X251 bV9wZ3Moc3RydWN0IHNnX3RhYmxlICpzZ3QpCi17Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2w7 Ci0JaW50IGxlbmd0aCwgaTsKLQkvKiBhdCBsZWFzdCBvbmUgcGFnZSAqLwotCWludCBudW1fcGFn ZXMgPSAxOwotCi0Jc2dsID0gc2d0LT5zZ2w7Ci0KLQlsZW5ndGggPSBzZ2wtPmxlbmd0aCAtIFBB R0VfU0laRSArIHNnbC0+b2Zmc2V0OwotCi0JLyogcm91bmQtdXAgKi8KLQludW1fcGFnZXMgKz0g KChsZW5ndGggKyBQQUdFX1NJWkUgLSAxKS9QQUdFX1NJWkUpOwotCi0JZm9yIChpID0gMTsgaSA8 IHNndC0+bmVudHM7IGkrKykgewotCQlzZ2wgPSBzZ19uZXh0KHNnbCk7Ci0KLQkJLyogcm91bmQt dXAgKi8KLQkJbnVtX3BhZ2VzICs9ICgoc2dsLT5sZW5ndGggKyBQQUdFX1NJWkUgLSAxKSAvCi0J CQkgICAgIFBBR0VfU0laRSk7IC8qIHJvdW5kLXVwICovCi0JfQotCi0JcmV0dXJuIG51bV9wYWdl czsKLX0KLQotLyogZXh0cmFjdCBwYWdlcyBkaXJlY3RseSBmcm9tIHN0cnVjdCBzZ190YWJsZSAq Lwotc3RydWN0IHBhZ2VzX2luZm8gKmh5cGVyX2RtYWJ1Zl9leHRfcGdzKHN0cnVjdCBzZ190YWJs ZSAqc2d0KQotewotCXN0cnVjdCBwYWdlc19pbmZvICpwZ19pbmZvOwotCWludCBpLCBqLCBrOwot CWludCBsZW5ndGg7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2w7Ci0KLQlwZ19pbmZvID0ga21h bGxvYyhzaXplb2YoKnBnX2luZm8pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXBnX2luZm8pCi0JCXJl dHVybiBOVUxMOwotCi0JcGdfaW5mby0+cGdzID0ga21hbGxvY19hcnJheShnZXRfbnVtX3Bncyhz Z3QpLAotCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBwYWdlICopLAotCQkJCSAgICAgR0ZQX0tFUk5F TCk7Ci0KLQlpZiAoIXBnX2luZm8tPnBncykgewotCQlrZnJlZShwZ19pbmZvKTsKLQkJcmV0dXJu IE5VTEw7Ci0JfQotCi0Jc2dsID0gc2d0LT5zZ2w7Ci0KLQlwZ19pbmZvLT5uZW50cyA9IDE7Ci0J cGdfaW5mby0+ZnJzdF9vZnN0ID0gc2dsLT5vZmZzZXQ7Ci0JcGdfaW5mby0+cGdzWzBdID0gc2df cGFnZShzZ2wpOwotCWxlbmd0aCA9IHNnbC0+bGVuZ3RoIC0gUEFHRV9TSVpFICsgc2dsLT5vZmZz ZXQ7Ci0JaSA9IDE7Ci0KLQl3aGlsZSAobGVuZ3RoID4gMCkgewotCQlwZ19pbmZvLT5wZ3NbaV0g PSBudGhfcGFnZShzZ19wYWdlKHNnbCksIGkpOwotCQlsZW5ndGggLT0gUEFHRV9TSVpFOwotCQlw Z19pbmZvLT5uZW50cysrOwotCQlpKys7Ci0JfQotCi0JZm9yIChqID0gMTsgaiA8IHNndC0+bmVu dHM7IGorKykgewotCQlzZ2wgPSBzZ19uZXh0KHNnbCk7Ci0JCXBnX2luZm8tPnBnc1tpKytdID0g c2dfcGFnZShzZ2wpOwotCQlsZW5ndGggPSBzZ2wtPmxlbmd0aCAtIFBBR0VfU0laRTsKLQkJcGdf aW5mby0+bmVudHMrKzsKLQkJayA9IDE7Ci0KLQkJd2hpbGUgKGxlbmd0aCA+IDApIHsKLQkJCXBn X2luZm8tPnBnc1tpKytdID0gbnRoX3BhZ2Uoc2dfcGFnZShzZ2wpLCBrKyspOwotCQkJbGVuZ3Ro IC09IFBBR0VfU0laRTsKLQkJCXBnX2luZm8tPm5lbnRzKys7Ci0JCX0KLQl9Ci0KLQkvKgotCSAq IGxlbmdodCBhdCB0aGF0IHBvaW50IHdpbGwgYmUgMCBvciBuZWdhdGl2ZSwKLQkgKiBzbyB0byBj YWxjdWxhdGUgbGFzdCBwYWdlIHNpemUganVzdCBhZGQgaXQgdG8gUEFHRV9TSVpFCi0JICovCi0J cGdfaW5mby0+bGFzdF9sZW4gPSBQQUdFX1NJWkUgKyBsZW5ndGg7Ci0KLQlyZXR1cm4gcGdfaW5m bzsKLX0KLQotLyogY3JlYXRlIHNnX3RhYmxlIHdpdGggZ2l2ZW4gcGFnZXMgYW5kIG90aGVyIHBh cmFtZXRlcnMgKi8KLXN0cnVjdCBzZ190YWJsZSAqaHlwZXJfZG1hYnVmX2NyZWF0ZV9zZ3Qoc3Ry dWN0IHBhZ2UgKipwZ3MsCi0JCQkJCSBpbnQgZnJzdF9vZnN0LCBpbnQgbGFzdF9sZW4sCi0JCQkJ CSBpbnQgbmVudHMpCi17Ci0Jc3RydWN0IHNnX3RhYmxlICpzZ3Q7Ci0Jc3RydWN0IHNjYXR0ZXJs aXN0ICpzZ2w7Ci0JaW50IGksIHJldDsKLQotCXNndCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBz Z190YWJsZSksIEdGUF9LRVJORUwpOwotCWlmICghc2d0KQotCQlyZXR1cm4gTlVMTDsKLQotCXJl dCA9IHNnX2FsbG9jX3RhYmxlKHNndCwgbmVudHMsIEdGUF9LRVJORUwpOwotCWlmIChyZXQpIHsK LQkJaWYgKHNndCkgewotCQkJc2dfZnJlZV90YWJsZShzZ3QpOwotCQkJa2ZyZWUoc2d0KTsKLQkJ fQotCi0JCXJldHVybiBOVUxMOwotCX0KLQotCXNnbCA9IHNndC0+c2dsOwotCi0Jc2dfc2V0X3Bh Z2Uoc2dsLCBwZ3NbMF0sIFBBR0VfU0laRS1mcnN0X29mc3QsIGZyc3Rfb2ZzdCk7Ci0KLQlmb3Ig KGkgPSAxOyBpIDwgbmVudHMtMTsgaSsrKSB7Ci0JCXNnbCA9IHNnX25leHQoc2dsKTsKLQkJc2df c2V0X3BhZ2Uoc2dsLCBwZ3NbaV0sIFBBR0VfU0laRSwgMCk7Ci0JfQotCi0JaWYgKG5lbnRzID4g MSkgLyogbW9yZSB0aGFuIG9uZSBwYWdlICovIHsKLQkJc2dsID0gc2dfbmV4dChzZ2wpOwotCQlz Z19zZXRfcGFnZShzZ2wsIHBnc1tpXSwgbGFzdF9sZW4sIDApOwotCX0KLQotCXJldHVybiBzZ3Q7 Ci19Ci0KLWludCBoeXBlcl9kbWFidWZfY2xlYW51cF9zZ3RfaW5mbyhzdHJ1Y3QgZXhwb3J0ZWRf c2d0X2luZm8gKmV4cG9ydGVkLAotCQkJCSAgaW50IGZvcmNlKQotewotCXN0cnVjdCBzZ3RfbGlz dCAqc2d0bDsKLQlzdHJ1Y3QgYXR0YWNobWVudF9saXN0ICphdHRhY2hsOwotCXN0cnVjdCBrbWFw X3ZhZGRyX2xpc3QgKnZhX2ttYXBsOwotCXN0cnVjdCB2bWFwX3ZhZGRyX2xpc3QgKnZhX3ZtYXBs OwotCXN0cnVjdCBoeXBlcl9kbWFidWZfYmtuZF9vcHMgKmJrbmRfb3BzID0gaHlfZHJ2X3ByaXYt PmJrbmRfb3BzOwotCi0JaWYgKCFleHBvcnRlZCkgewotCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5k ZXYsICJpbnZhbGlkIGh5cGVyX2RtYWJ1Zl9pZFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0K LQotCS8qIGlmIGZvcmNlICE9IDEsIHNndF9pbmZvIGNhbiBiZSByZWxlYXNlZCBvbmx5IGlmCi0J ICogdGhlcmUncyBubyBhY3Rpdml0eSBvbiBleHBvcnRlZCBkbWEtYnVmIG9uIGltcG9ydGVyCi0J ICogc2lkZS4KLQkgKi8KLQlpZiAoIWZvcmNlICYmCi0JICAgIGV4cG9ydGVkLT5hY3RpdmUpIHsK LQkJZGV2X3dhcm4oaHlfZHJ2X3ByaXYtPmRldiwKLQkJCSAiZG1hLWJ1ZiBpcyB1c2VkIGJ5IGlt cG9ydGVyXG4iKTsKLQotCQlyZXR1cm4gLUVQRVJNOwotCX0KLQotCS8qIGZvcmNlID09IDEgaXMg bm90IHJlY29tbWVuZGVkICovCi0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZleHBvcnRlZC0+dmFfa21h cHBlZC0+bGlzdCkpIHsKLQkJdmFfa21hcGwgPSBsaXN0X2ZpcnN0X2VudHJ5KCZleHBvcnRlZC0+ dmFfa21hcHBlZC0+bGlzdCwKLQkJCQkJICAgIHN0cnVjdCBrbWFwX3ZhZGRyX2xpc3QsIGxpc3Qp OwotCi0JCWRtYV9idWZfa3VubWFwKGV4cG9ydGVkLT5kbWFfYnVmLCAxLCB2YV9rbWFwbC0+dmFk ZHIpOwotCQlsaXN0X2RlbCgmdmFfa21hcGwtPmxpc3QpOwotCQlrZnJlZSh2YV9rbWFwbCk7Ci0J fQotCi0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZleHBvcnRlZC0+dmFfdm1hcHBlZC0+bGlzdCkpIHsK LQkJdmFfdm1hcGwgPSBsaXN0X2ZpcnN0X2VudHJ5KCZleHBvcnRlZC0+dmFfdm1hcHBlZC0+bGlz dCwKLQkJCQkJICAgIHN0cnVjdCB2bWFwX3ZhZGRyX2xpc3QsIGxpc3QpOwotCi0JCWRtYV9idWZf dnVubWFwKGV4cG9ydGVkLT5kbWFfYnVmLCB2YV92bWFwbC0+dmFkZHIpOwotCQlsaXN0X2RlbCgm dmFfdm1hcGwtPmxpc3QpOwotCQlrZnJlZSh2YV92bWFwbCk7Ci0JfQotCi0Jd2hpbGUgKCFsaXN0 X2VtcHR5KCZleHBvcnRlZC0+YWN0aXZlX3NndHMtPmxpc3QpKSB7Ci0JCWF0dGFjaGwgPSBsaXN0 X2ZpcnN0X2VudHJ5KCZleHBvcnRlZC0+YWN0aXZlX2F0dGFjaGVkLT5saXN0LAotCQkJCQkgICBz dHJ1Y3QgYXR0YWNobWVudF9saXN0LCBsaXN0KTsKLQotCQlzZ3RsID0gbGlzdF9maXJzdF9lbnRy eSgmZXhwb3J0ZWQtPmFjdGl2ZV9zZ3RzLT5saXN0LAotCQkJCQlzdHJ1Y3Qgc2d0X2xpc3QsIGxp c3QpOwotCi0JCWRtYV9idWZfdW5tYXBfYXR0YWNobWVudChhdHRhY2hsLT5hdHRhY2gsIHNndGwt PnNndCwKLQkJCQkJIERNQV9CSURJUkVDVElPTkFMKTsKLQkJbGlzdF9kZWwoJnNndGwtPmxpc3Qp OwotCQlrZnJlZShzZ3RsKTsKLQl9Ci0KLQl3aGlsZSAoIWxpc3RfZW1wdHkoJmV4cG9ydGVkLT5h Y3RpdmVfc2d0cy0+bGlzdCkpIHsKLQkJYXR0YWNobCA9IGxpc3RfZmlyc3RfZW50cnkoJmV4cG9y dGVkLT5hY3RpdmVfYXR0YWNoZWQtPmxpc3QsCi0JCQkJCSAgIHN0cnVjdCBhdHRhY2htZW50X2xp c3QsIGxpc3QpOwotCi0JCWRtYV9idWZfZGV0YWNoKGV4cG9ydGVkLT5kbWFfYnVmLCBhdHRhY2hs LT5hdHRhY2gpOwotCQlsaXN0X2RlbCgmYXR0YWNobC0+bGlzdCk7Ci0JCWtmcmVlKGF0dGFjaGwp OwotCX0KLQotCS8qIFN0YXJ0IGNsZWFudXAgb2YgYnVmZmVyIGluIHJldmVyc2Ugb3JkZXIgdG8g ZXhwb3J0aW5nICovCi0JYmtuZF9vcHMtPnVuc2hhcmVfcGFnZXMoJmV4cG9ydGVkLT5yZWZzX2lu Zm8sIGV4cG9ydGVkLT5uZW50cyk7Ci0KLQkvKiB1bm1hcCBkbWEtYnVmICovCi0JZG1hX2J1Zl91 bm1hcF9hdHRhY2htZW50KGV4cG9ydGVkLT5hY3RpdmVfYXR0YWNoZWQtPmF0dGFjaCwKLQkJCQkg ZXhwb3J0ZWQtPmFjdGl2ZV9zZ3RzLT5zZ3QsCi0JCQkJIERNQV9CSURJUkVDVElPTkFMKTsKLQot CS8qIGRldGF0Y2ggZG1hLWJ1ZiAqLwotCWRtYV9idWZfZGV0YWNoKGV4cG9ydGVkLT5kbWFfYnVm LCBleHBvcnRlZC0+YWN0aXZlX2F0dGFjaGVkLT5hdHRhY2gpOwotCi0JLyogY2xvc2UgY29ubmVj dGlvbiB0byBkbWEtYnVmIGNvbXBsZXRlbHkgKi8KLQlkbWFfYnVmX3B1dChleHBvcnRlZC0+ZG1h X2J1Zik7Ci0JZXhwb3J0ZWQtPmRtYV9idWYgPSBOVUxMOwotCi0Ja2ZyZWUoZXhwb3J0ZWQtPmFj dGl2ZV9zZ3RzKTsKLQlrZnJlZShleHBvcnRlZC0+YWN0aXZlX2F0dGFjaGVkKTsKLQlrZnJlZShl eHBvcnRlZC0+dmFfa21hcHBlZCk7Ci0Ja2ZyZWUoZXhwb3J0ZWQtPnZhX3ZtYXBwZWQpOwotCWtm cmVlKGV4cG9ydGVkLT5wcml2KTsKLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9zZ2xfcHJvYy5oIGIvZHJpdmVycy94ZW4v aHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9zZ2xfcHJvYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCA4NjlkOTgyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1 Zi9oeXBlcl9kbWFidWZfc2dsX3Byb2MuaAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAK LS8qCi0gKiBDb3B5cmlnaHQgwqkgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgotICoKLSAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdh cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICog dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBh bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGlu Y2x1ZGluZyB0aGUgbmV4dAotICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwg Y29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQotICogU29mdHdhcmUuCi0gKgot ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg QU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNI QUxMCi0gKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFO WSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFD VElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKLSAqIEZST00sIE9V VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RI RVIgREVBTElOR1MKLSAqIElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKi8KLQotI2lmbmRlZiBfX0hZ UEVSX0RNQUJVRl9JTVBfSF9fCi0jZGVmaW5lIF9fSFlQRVJfRE1BQlVGX0lNUF9IX18KLQotLyog ZXh0cmFjdCBwYWdlcyBkaXJlY3RseSBmcm9tIHN0cnVjdCBzZ190YWJsZSAqLwotc3RydWN0IHBh Z2VzX2luZm8gKmh5cGVyX2RtYWJ1Zl9leHRfcGdzKHN0cnVjdCBzZ190YWJsZSAqc2d0KTsKLQot LyogY3JlYXRlIHNnX3RhYmxlIHdpdGggZ2l2ZW4gcGFnZXMgYW5kIG90aGVyIHBhcmFtZXRlcnMg Ki8KLXN0cnVjdCBzZ190YWJsZSAqaHlwZXJfZG1hYnVmX2NyZWF0ZV9zZ3Qoc3RydWN0IHBhZ2Ug KipwZ3MsCi0JCQkJCSBpbnQgZnJzdF9vZnN0LCBpbnQgbGFzdF9sZW4sCi0JCQkJCSBpbnQgbmVu dHMpOwotCi1pbnQgaHlwZXJfZG1hYnVmX2NsZWFudXBfc2d0X2luZm8oc3RydWN0IGV4cG9ydGVk X3NndF9pbmZvICpleHBvcnRlZCwKLQkJCQkgIGludCBmb3JjZSk7Ci0KLXZvaWQgaHlwZXJfZG1h YnVmX2ZyZWVfc2d0KHN0cnVjdCBzZ190YWJsZSAqc2d0KTsKLQotI2VuZGlmIC8qIF9fSFlQRVJf RE1BQlVGX0lNUF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9o eXBlcl9kbWFidWZfc3RydWN0LmggYi9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlwZXJfZG1h YnVmX3N0cnVjdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTFmODA0Li4wMDAw MDAwCi0tLSBhL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfc3RydWN0LmgK KysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCDCqSAyMDE3 IEludGVsIENvcnBvcmF0aW9uCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3 YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Ci0gKiBwYXJh Z3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9y dGlvbnMgb2YgdGhlCi0gKiBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBBVVRIT1JTIE9SIENP UFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVS Ci0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwotICogSU4gVEhFIFNP RlRXQVJFLgotICoKLSAqLwotCi0jaWZuZGVmIF9fSFlQRVJfRE1BQlVGX1NUUlVDVF9IX18KLSNk ZWZpbmUgX19IWVBFUl9ETUFCVUZfU1RSVUNUX0hfXwotCi0vKiBzdGFjayBvZiBtYXBwZWQgc2d0 cyAqLwotc3RydWN0IHNndF9saXN0IHsKLQlzdHJ1Y3Qgc2dfdGFibGUgKnNndDsKLQlzdHJ1Y3Qg bGlzdF9oZWFkIGxpc3Q7Ci19OwotCi0vKiBzdGFjayBvZiBhdHRhY2htZW50cyAqLwotc3RydWN0 IGF0dGFjaG1lbnRfbGlzdCB7Ci0Jc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoOwot CXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLX07Ci0KLS8qIHN0YWNrIG9mIHZhZGRyIG1hcHBlZCB2 aWEga21hcCAqLwotc3RydWN0IGttYXBfdmFkZHJfbGlzdCB7Ci0Jdm9pZCAqdmFkZHI7Ci0Jc3Ry dWN0IGxpc3RfaGVhZCBsaXN0OwotfTsKLQotLyogc3RhY2sgb2YgdmFkZHIgbWFwcGVkIHZpYSB2 bWFwICovCi1zdHJ1Y3Qgdm1hcF92YWRkcl9saXN0IHsKLQl2b2lkICp2YWRkcjsKLQlzdHJ1Y3Qg bGlzdF9oZWFkIGxpc3Q7Ci19OwotCi0vKiBFeHBvcnRlciBidWlsZHMgcGFnZXNfaW5mbyBiZWZv cmUgc2hhcmluZyBwYWdlcyAqLwotc3RydWN0IHBhZ2VzX2luZm8gewotCWludCBmcnN0X29mc3Q7 Ci0JaW50IGxhc3RfbGVuOwotCWludCBuZW50czsKLQlzdHJ1Y3QgcGFnZSAqKnBnczsKLX07Ci0K LQotLyogRXhwb3J0ZXIgc3RvcmVzIHJlZmVyZW5jZXMgdG8gc2d0IGluIGEgaGFzaCB0YWJsZQot ICogRXhwb3J0ZXIga2VlcHMgdGhlc2UgcmVmZXJlbmNlcyBmb3Igc3luY2hyb25pemF0aW9uCi0g KiBhbmQgdHJhY2tpbmcgcHVycG9zZXMKLSAqLwotc3RydWN0IGV4cG9ydGVkX3NndF9pbmZvIHsK LQloeXBlcl9kbWFidWZfaWRfdCBoaWQ7Ci0KLQkvKiBWTSBJRCBvZiBpbXBvcnRlciAqLwotCWlu dCByZG9taWQ7Ci0KLQlzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZjsKLQlpbnQgbmVudHM7Ci0KLQkv KiBsaXN0IGZvciB0cmFja2luZyBhY3Rpdml0aWVzIG9uIGRtYV9idWYgKi8KLQlzdHJ1Y3Qgc2d0 X2xpc3QgKmFjdGl2ZV9zZ3RzOwotCXN0cnVjdCBhdHRhY2htZW50X2xpc3QgKmFjdGl2ZV9hdHRh Y2hlZDsKLQlzdHJ1Y3Qga21hcF92YWRkcl9saXN0ICp2YV9rbWFwcGVkOwotCXN0cnVjdCB2bWFw X3ZhZGRyX2xpc3QgKnZhX3ZtYXBwZWQ7Ci0KLQkvKiBzZXQgdG8gMCB3aGVuIHVuZXhwb3J0ZWQu IEltcG9ydGVyIGRvZXNuJ3QKLQkgKiBkbyBhIG5ldyBtYXBwaW5nIG9mIGJ1ZmZlciBpZiB2YWxp ZCA9PSBmYWxzZQotCSAqLwotCWJvb2wgdmFsaWQ7Ci0KLQkvKiBhY3RpdmUgPT0gdHJ1ZSBpZiB0 aGUgYnVmZmVyIGlzIGFjdGl2ZWx5IHVzZWQKLQkgKiAobWFwcGVkKSBieSBpbXBvcnRlcgotCSAq LwotCWludCBhY3RpdmU7Ci0KLQkvKiBoeXBlcnZpc29yIHNwZWNpZmljIHJlZmVyZW5jZSBkYXRh IGZvciBzaGFyZWQgcGFnZXMgKi8KLQl2b2lkICpyZWZzX2luZm87Ci0KLQlzdHJ1Y3QgZGVsYXll ZF93b3JrIHVuZXhwb3J0OwotCWJvb2wgdW5leHBvcnRfc2NoZWQ7Ci0KLQkvKiBsaXN0IGZvciBm aWxlIHBvaW50ZXJzIGFzc29jaWF0ZWQgd2l0aCBhbGwgdXNlciBzcGFjZQotCSAqIGFwcGxpY2F0 aW9uIHRoYXQgaGF2ZSBleHBvcnRlZCB0aGlzIHNhbWUgYnVmZmVyIHRvCi0JICogYW5vdGhlciBW TS4gVGhpcyBuZWVkcyB0byBiZSB0cmFja2VkIHRvIGtub3cgd2hldGhlcgotCSAqIHRoZSBidWZm ZXIgY2FuIGJlIGNvbXBsZXRlbHkgZnJlZWQuCi0JICovCi0Jc3RydWN0IGZpbGUgKmZpbHA7Ci0K LQkvKiBzaXplIG9mIHByaXZhdGUgKi8KLQlzaXplX3Qgc3pfcHJpdjsKLQotCS8qIHByaXZhdGUg ZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGV4cG9ydGVkIGJ1ZmZlciAqLwotCWNoYXIgKnByaXY7 Ci19OwotCi0vKiBpbXBvcnRlZF9zZ3RfaW5mbyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBp bXBvcnRlZCBETUFfQlVGCi0gKiB0aGlzIGluZm8gaXMga2VwdCBpbiBJTVBPUlQgbGlzdCBhbmQg YXN5bmNob3JvdXNseSByZXRyaWV2ZWQgYW5kCi0gKiB1c2VkIHRvIG1hcCBETUFfQlVGIG9uIGlt cG9ydGVyIFZNJ3Mgc2lkZSB1cG9uIGV4cG9ydCBmZCBpb2N0bAotICogcmVxdWVzdCBmcm9tIHVz ZXItc3BhY2UKLSAqLwotCi1zdHJ1Y3QgaW1wb3J0ZWRfc2d0X2luZm8gewotCWh5cGVyX2RtYWJ1 Zl9pZF90IGhpZDsgLyogdW5pcXVlIGlkIGZvciBzaGFyZWQgZG1hYnVmIGltcG9ydGVkICovCi0K LQkvKiBoeXBlcnZpc29yLXNwZWNpZmljIGhhbmRsZSB0byBwYWdlcyAqLwotCWludCByZWZfaGFu ZGxlOwotCi0JLyogb2Zmc2V0IGFuZCBzaXplIGluZm8gb2YgRE1BX0JVRiAqLwotCWludCBmcnN0 X29mc3Q7Ci0JaW50IGxhc3RfbGVuOwotCWludCBuZW50czsKLQotCXN0cnVjdCBkbWFfYnVmICpk bWFfYnVmOwotCXN0cnVjdCBzZ190YWJsZSAqc2d0OwotCi0Jdm9pZCAqcmVmc19pbmZvOwotCWJv b2wgdmFsaWQ7Ci0JaW50IGltcG9ydGVyczsKLQotCS8qIHNpemUgb2YgcHJpdmF0ZSAqLwotCXNp emVfdCBzel9wcml2OwotCi0JLyogcHJpdmF0ZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXhw b3J0ZWQgYnVmZmVyICovCi0JY2hhciAqcHJpdjsKLX07Ci0KLSNlbmRpZiAvKiBfX0hZUEVSX0RN QUJVRl9TVFJVQ1RfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYv eGVuL2h5cGVyX2RtYWJ1Zl94ZW5fY29tbS5jIGIvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL3hl bi9oeXBlcl9kbWFidWZfeGVuX2NvbW0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg NGEwNzNjZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYveGVuL2h5cGVy X2RtYWJ1Zl94ZW5fY29tbS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTQxICswLDAgQEAKLS8qCi0g KiBDb3B5cmlnaHQgwqkgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgotICoKLSAqIFBlcm1pc3Npb24g aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu ZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlv biBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0 aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJp Z2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1 YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBk byBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFi b3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGlu ZyB0aGUgbmV4dAotICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVz IG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQotICogU29mdHdhcmUuCi0gKgotICogVEhF IFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJ TkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8g VEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCi0g KiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJ TSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBP RiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKLSAqIEZST00sIE9VVCBPRiBP UiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVB TElOR1MKLSAqIElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKiBBdXRob3JzOgotICogICAgRG9uZ3dv biBLaW0gPGRvbmd3b24ua2ltQGludGVsLmNvbT4KLSAqICAgIE1hdGV1c3ogUG9scm9sYSA8bWF0 ZXVzengucG90cm9sYUBpbnRlbC5jb20+Ci0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9lcnJu by5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUu aD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPHhlbi9ncmFudF90YWJsZS5o PgotI2luY2x1ZGUgPHhlbi9ldmVudHMuaD4KLSNpbmNsdWRlIDx4ZW4veGVuYnVzLmg+Ci0jaW5j bHVkZSA8YXNtL3hlbi9wYWdlLmg+Ci0jaW5jbHVkZSAiaHlwZXJfZG1hYnVmX3hlbl9jb21tLmgi Ci0jaW5jbHVkZSAiaHlwZXJfZG1hYnVmX3hlbl9jb21tX2xpc3QuaCIKLSNpbmNsdWRlICIuLi9o eXBlcl9kbWFidWZfZHJ2LmgiCi0KLXN0YXRpYyBpbnQgZXhwb3J0X3JlcV9pZDsKLQotc3RydWN0 IGh5cGVyX2RtYWJ1Zl9yZXEgcmVxX3BlbmRpbmcgPSB7MH07Ci0KLXN0YXRpYyB2b2lkIHhlbl9n ZXRfZG9taWRfZGVsYXllZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnVudXNlZCk7Ci1zdGF0aWMgdm9p ZCB4ZW5faW5pdF9jb21tX2Vudl9kZWxheWVkKHN0cnVjdCB3b3JrX3N0cnVjdCAqdW51c2VkKTsK LQotc3RhdGljIERFQ0xBUkVfREVMQVlFRF9XT1JLKGdldF92bV9pZF93b3JrLCB4ZW5fZ2V0X2Rv bWlkX2RlbGF5ZWQpOwotc3RhdGljIERFQ0xBUkVfREVMQVlFRF9XT1JLKHhlbl9pbml0X2NvbW1f ZW52X3dvcmssIHhlbl9pbml0X2NvbW1fZW52X2RlbGF5ZWQpOwotCi0vKiBDcmVhdGVzIGVudHJ5 IGluIHhlbiBzdG9yZSB0aGF0IHdpbGwga2VlcCBkZXRhaWxzIG9mIGFsbAotICogZXhwb3J0ZXIg cmluZ3MgY3JlYXRlZCBieSB0aGlzIGRvbWFpbgotICovCi1zdGF0aWMgaW50IHhlbl9jb21tX3Nl dHVwX2RhdGFfZGlyKHZvaWQpCi17Ci0JY2hhciBidWZbMjU1XTsKLQotCXNwcmludGYoYnVmLCAi L2xvY2FsL2RvbWFpbi8lZC9kYXRhL2h5cGVyX2RtYWJ1ZiIsCi0JCWh5X2Rydl9wcml2LT5kb21p ZCk7Ci0KLQlyZXR1cm4geGVuYnVzX21rZGlyKFhCVF9OSUwsIGJ1ZiwgIiIpOwotfQotCi0vKiBS ZW1vdmVzIGVudHJ5IGZyb20geGVuc3RvcmUgd2l0aCBleHBvcnRlciByaW5nIGRldGFpbHMuCi0g KiBPdGhlciBkb21haW5zIHRoYXQgaGFzIGNvbm5lY3RlZCB0byBhbnkgb2YgZXhwb3J0ZXIgcmlu Z3MKLSAqIGNyZWF0ZWQgYnkgdGhpcyBkb21haW4sIHdpbGwgYmUgbm90aWZpZWQgYWJvdXQgcmVt b3ZhbCBvZgotICogdGhpcyBlbnRyeSBhbmQgd2lsbCB0cmVhdCB0aGF0IGFzIHNpZ25hbCB0byBj bGVhbnVwIGltcG9ydGVyCi0gKiByaW5ncyBjcmVhdGVkIGZvciB0aGlzIGRvbWFpbgotICovCi1z dGF0aWMgaW50IHhlbl9jb21tX2Rlc3Ryb3lfZGF0YV9kaXIodm9pZCkKLXsKLQljaGFyIGJ1Zlsy NTVdOwotCi0Jc3ByaW50ZihidWYsICIvbG9jYWwvZG9tYWluLyVkL2RhdGEvaHlwZXJfZG1hYnVm IiwKLQkJaHlfZHJ2X3ByaXYtPmRvbWlkKTsKLQotCXJldHVybiB4ZW5idXNfcm0oWEJUX05JTCwg YnVmLCAiIik7Ci19Ci0KLS8qIEFkZHMgeGVuc3RvcmUgZW50cmllcyB3aXRoIGRldGFpbHMgb2Yg ZXhwb3J0ZXIgcmluZyBjcmVhdGVkCi0gKiBmb3IgZ2l2ZW4gcmVtb3RlIGRvbWFpbi4gSXQgcmVx dWlyZXMgc3BlY2lhbCBkYWVtb24gcnVubmluZwotICogaW4gZG9tMCB0byBtYWtlIHN1cmUgdGhh dCBnaXZlbiByZW1vdGUgZG9tYWluIHdpbGwgaGF2ZSByaWdodAotICogcGVybWlzc2lvbnMgdG8g YWNjZXNzIHRoYXQgZGF0YS4KLSAqLwotc3RhdGljIGludCB4ZW5fY29tbV9leHBvc2VfcmluZ19k ZXRhaWxzKGludCBkb21pZCwgaW50IHJkb21pZCwKLQkJCQkJaW50IGdyZWYsIGludCBwb3J0KQot ewotCWNoYXIgYnVmWzI1NV07Ci0JaW50IHJldDsKLQotCXNwcmludGYoYnVmLCAiL2xvY2FsL2Rv bWFpbi8lZC9kYXRhL2h5cGVyX2RtYWJ1Zi8lZCIsCi0JCWRvbWlkLCByZG9taWQpOwotCi0JcmV0 ID0geGVuYnVzX3ByaW50ZihYQlRfTklMLCBidWYsICJncmVmaWQiLCAiJWQiLCBncmVmKTsKLQot CWlmIChyZXQpIHsKLQkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAotCQkJIkZhaWxlZCB0byB3 cml0ZSB4ZW5idXMgZW50cnkgJXM6ICVkXG4iLAotCQkJYnVmLCByZXQpOwotCi0JCXJldHVybiBy ZXQ7Ci0JfQotCi0JcmV0ID0geGVuYnVzX3ByaW50ZihYQlRfTklMLCBidWYsICJwb3J0IiwgIiVk IiwgcG9ydCk7Ci0KLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKLQkJ CSJGYWlsZWQgdG8gd3JpdGUgeGVuYnVzIGVudHJ5ICVzOiAlZFxuIiwKLQkJCWJ1ZiwgcmV0KTsK LQotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotICogUXVlcmllcyBk ZXRhaWxzIG9mIHJpbmcgZXhwb3NlZCBieSByZW1vdGUgZG9tYWluLgotICovCi1zdGF0aWMgaW50 IHhlbl9jb21tX2dldF9yaW5nX2RldGFpbHMoaW50IGRvbWlkLCBpbnQgcmRvbWlkLAotCQkJCSAg ICAgaW50ICpncmVmaWQsIGludCAqcG9ydCkKLXsKLQljaGFyIGJ1ZlsyNTVdOwotCWludCByZXQ7 Ci0KLQlzcHJpbnRmKGJ1ZiwgIi9sb2NhbC9kb21haW4vJWQvZGF0YS9oeXBlcl9kbWFidWYvJWQi LAotCQlyZG9taWQsIGRvbWlkKTsKLQotCXJldCA9IHhlbmJ1c19zY2FuZihYQlRfTklMLCBidWYs ICJncmVmaWQiLCAiJWQiLCBncmVmaWQpOwotCi0JaWYgKHJldCA8PSAwKSB7Ci0JCWRldl9lcnIo aHlfZHJ2X3ByaXYtPmRldiwKLQkJCSJGYWlsZWQgdG8gcmVhZCB4ZW5idXMgZW50cnkgJXM6ICVk XG4iLAotCQkJYnVmLCByZXQpOwotCi0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0ID0geGVuYnVz X3NjYW5mKFhCVF9OSUwsIGJ1ZiwgInBvcnQiLCAiJWQiLCBwb3J0KTsKLQotCWlmIChyZXQgPD0g MCkgewotCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCi0JCQkiRmFpbGVkIHRvIHJlYWQgeGVu YnVzIGVudHJ5ICVzOiAlZFxuIiwKLQkJCWJ1ZiwgcmV0KTsKLQotCQlyZXR1cm4gcmV0OwotCX0K LQotCXJldHVybiAocmV0IDw9IDAgPyAxIDogMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHhlbl9nZXRf ZG9taWRfZGVsYXllZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnVudXNlZCkKLXsKLQlzdHJ1Y3QgeGVu YnVzX3RyYW5zYWN0aW9uIHhidDsKLQlpbnQgZG9taWQsIHJldDsKLQotCS8qIHNjaGVkdWxpbmcg YW5vdGhlciBpZiBkcml2ZXIgaXMgc3RpbGwgcnVubmluZwotCSAqIGFuZCB4ZW5zdG9yZSBoYXMg bm90IGJlZW4gaW5pdGlhbGl6ZWQKLQkgKi8KLQlpZiAobGlrZWx5KHhlbnN0b3JlZF9yZWFkeSA9 PSAwKSkgewotCQlkZXZfZGJnKGh5X2Rydl9wcml2LT5kZXYsCi0JCQkiWGVuc3RvcmUgaXMgbm90 IHJlYWR5IHlldC4gV2lsbCByZXRyeSBpbiA1MDBtc1xuIik7Ci0JCXNjaGVkdWxlX2RlbGF5ZWRf d29yaygmZ2V0X3ZtX2lkX3dvcmssIG1zZWNzX3RvX2ppZmZpZXMoNTAwKSk7Ci0JfSBlbHNlIHsK LQkJeGVuYnVzX3RyYW5zYWN0aW9uX3N0YXJ0KCZ4YnQpOwotCi0JCXJldCA9IHhlbmJ1c19zY2Fu Zih4YnQsICJkb21pZCIsICIiLCAiJWQiLCAmZG9taWQpOwotCi0JCWlmIChyZXQgPD0gMCkKLQkJ CWRvbWlkID0gLTE7Ci0KLQkJeGVuYnVzX3RyYW5zYWN0aW9uX2VuZCh4YnQsIDApOwotCi0JCS8q IHRyeSBhZ2FpbiBzaW5jZSAtMSBpcyBhbiBpbnZhbGlkIGlkIGZvciBkb21haW4KLQkJICogKGJ1 dCBvbmx5IGlmIGRyaXZlciBpcyBzdGlsbCBydW5uaW5nKQotCQkgKi8KLQkJaWYgKHVubGlrZWx5 KGRvbWlkID09IC0xKSkgewotCQkJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LAotCQkJCSJkb21p ZD09LTEgaXMgaW52YWxpZC4gV2lsbCByZXRyeSBpdCBpbiA1MDBtc1xuIik7Ci0JCQlzY2hlZHVs ZV9kZWxheWVkX3dvcmsoJmdldF92bV9pZF93b3JrLAotCQkJCQkgICAgICBtc2Vjc190b19qaWZm aWVzKDUwMCkpOwotCQl9IGVsc2UgewotCQkJZGV2X2luZm8oaHlfZHJ2X3ByaXYtPmRldiwKLQkJ CQkgIlN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgZG9taWQgZnJvbSBYZW5zdG9yZTolZFxuIiwKLQkJ CQkgZG9taWQpOwotCQkJaHlfZHJ2X3ByaXYtPmRvbWlkID0gZG9taWQ7Ci0JCX0KLQl9Ci19Ci0K LWludCB4ZW5fYmVfZ2V0X2RvbWlkKHZvaWQpCi17Ci0Jc3RydWN0IHhlbmJ1c190cmFuc2FjdGlv biB4YnQ7Ci0JaW50IGRvbWlkOwotCi0JaWYgKHVubGlrZWx5KHhlbnN0b3JlZF9yZWFkeSA9PSAw KSkgewotCQl4ZW5fZ2V0X2RvbWlkX2RlbGF5ZWQoTlVMTCk7Ci0JCXJldHVybiAtMTsKLQl9Ci0K LQl4ZW5idXNfdHJhbnNhY3Rpb25fc3RhcnQoJnhidCk7Ci0KLQlpZiAoIXhlbmJ1c19zY2FuZih4 YnQsICJkb21pZCIsICIiLCAiJWQiLCAmZG9taWQpKQotCQlkb21pZCA9IC0xOwotCi0JeGVuYnVz X3RyYW5zYWN0aW9uX2VuZCh4YnQsIDApOwotCi0JcmV0dXJuIGRvbWlkOwotfQotCi1zdGF0aWMg aW50IHhlbl9jb21tX25leHRfcmVxX2lkKHZvaWQpCi17Ci0JZXhwb3J0X3JlcV9pZCsrOwotCXJl dHVybiBleHBvcnRfcmVxX2lkOwotfQotCi0vKiBGb3Igbm93IGNhY2hlIGxhdGFzdCByaW5ncyBh cyBnbG9iYWwgdmFyaWFibGVzIFRPRE86IGtlZXAgdGhlbSBpbiBsaXN0Ki8KLXN0YXRpYyBpcnFy ZXR1cm5fdCBmcm9udF9yaW5nX2lzcihpbnQgaXJxLCB2b2lkICppbmZvKTsKLXN0YXRpYyBpcnFy ZXR1cm5fdCBiYWNrX3JpbmdfaXNyKGludCBpcnEsIHZvaWQgKmluZm8pOwotCi0vKiBDYWxsYmFj ayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGFueSBjaGFuZ2Ugb2YgeGVuYnVzIHBh dGgKLSAqIGJlaW5nIHdhdGNoZWQuIFVzZWQgZm9yIGRldGVjdGluZyBjcmVhdGlvbi9kZXN0cnVj dGlvbiBvZiByZW1vdGUKLSAqIGRvbWFpbiBleHBvcnRlciByaW5nLgotICoKLSAqIFdoZW4gcmVt b3RlIGRvbWFpbidzIGV4cG9ydGVyIHJpbmcgd2lsbCBiZSBkZXRlY3RlZCwgaW1wb3J0ZXIgcmlu ZwotICogb24gdGhpcyBkb21haW4gd2lsbCBiZSBjcmVhdGVkLgotICoKLSAqIFdoZW4gcmVtb3Rl IGRvbWFpbidzIGV4cG9ydGVyIHJpbmcgZGVzdHJ1Y3Rpb24gd2lsbCBiZSBkZXRlY3RlZCBpdAot ICogd2lsbCBjZWxhbnVwIHRoaXMgZG9tYWluIGltcG9ydGVyIHJpbmcuCi0gKgotICogRGVzdHJ1 Y3Rpb24gY2FuIGJlIGNhdXNlZCBieSB1bmxvYWRpbmcgbW9kdWxlIGJ5IHJlbW90ZSBkb21haW4g b3IKLSAqIGl0J3MgY3Jhc2gvZm9yY2Ugc2h1dGRvd24uCi0gKi8KLXN0YXRpYyB2b2lkIHJlbW90 ZV9kb21fZXhwb3J0ZXJfd2F0Y2hfY2Ioc3RydWN0IHhlbmJ1c193YXRjaCAqd2F0Y2gsCi0JCQkJ CSBjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICp0b2tlbikKLXsKLQlpbnQgcmRvbSwgcmV0 OwotCXVpbnQzMl90IGdyZWZpZCwgcG9ydDsKLQlzdHJ1Y3QgeGVuX2NvbW1fcnhfcmluZ19pbmZv ICpyaW5nX2luZm87Ci0KLQkvKiBDaGVjayB3aGljaCBkb21haW4gaGFzIGNoYW5nZWQgaXRzIGV4 cG9ydGVyIHJpbmdzICovCi0JcmV0ID0gc3NjYW5mKHdhdGNoLT5ub2RlLCAiL2xvY2FsL2RvbWFp bi8lZC8iLCAmcmRvbSk7Ci0JaWYgKHJldCA8PSAwKQotCQlyZXR1cm47Ci0KLQkvKiBDaGVjayBp ZiB3ZSBoYXZlIGltcG9ydGVyIHJpbmcgZm9yIGdpdmVuIHJlbW90ZSBkb21haW4gYWxyZWFkeQot CSAqIGNyZWF0ZWQKLQkgKi8KLQlyaW5nX2luZm8gPSB4ZW5fY29tbV9maW5kX3J4X3JpbmcocmRv bSk7Ci0KLQkvKiBUcnkgdG8gcXVlcnkgcmVtb3RlIGRvbWFpbiBleHBvcnRlciByaW5nIGRldGFp bHMgLSBpZgotCSAqIHRoYXQgd2lsbCBmYWlsIGFuZCB3ZSBoYXZlIGltcG9ydGVyIHJpbmcgdGhh dCBtZWFucyByZW1vdGUKLQkgKiBkb21haW5zIGhhcyBjbGVhbnVwIGl0cyBleHBvcnRlciByaW5n LCBzbyBvdXIgaW1wb3J0ZXIgcmluZwotCSAqIGlzIG5vIGxvbmdlciB1c2VmdWwuCi0JICoKLQkg KiBJZiBxdWVyeWluZyBkZXRhaWxzIHdpbGwgc3VjY2VlZCBhbmQgd2UgZG9uJ3QgaGF2ZSBpbXBv cnRlciByaW5nLAotCSAqIGl0IG1lYW5zIHRoYXQgcmVtb3RlIGRvbWFpbiBoYXMgc2V0dXAgaXQg Zm9yIHVzIGFuZCB3ZSBzaG91bGQKLQkgKiBjb25uZWN0IHRvIGl0LgotCSAqLwotCi0JcmV0ID0g eGVuX2NvbW1fZ2V0X3JpbmdfZGV0YWlscyh4ZW5fYmVfZ2V0X2RvbWlkKCksCi0JCQkJCXJkb20s ICZncmVmaWQsICZwb3J0KTsKLQotCWlmIChyaW5nX2luZm8gJiYgcmV0ICE9IDApIHsKLQkJZGV2 X2luZm8oaHlfZHJ2X3ByaXYtPmRldiwKLQkJCSAiUmVtb3RlIGV4cG9ydGVyIGNsb3NlZCwgY2xl YW5pbnVwIGltcG9ydGVyXG4iKTsKLQkJeGVuX2JlX2NsZWFudXBfcnhfcmJ1ZihyZG9tKTsKLQl9 IGVsc2UgaWYgKCFyaW5nX2luZm8gJiYgcmV0ID09IDApIHsKLQkJZGV2X2luZm8oaHlfZHJ2X3By aXYtPmRldiwKLQkJCSAiUmVnaXN0ZXJpbmcgaW1wb3J0ZXJcbiIpOwotCQl4ZW5fYmVfaW5pdF9y eF9yYnVmKHJkb20pOwotCX0KLX0KLQotLyogZXhwb3J0ZXIgbmVlZHMgdG8gZ2VuZXJhdGVkIGlu Zm8gZm9yIHBhZ2Ugc2hhcmluZyAqLwotaW50IHhlbl9iZV9pbml0X3R4X3JidWYoaW50IGRvbWlk KQotewotCXN0cnVjdCB4ZW5fY29tbV90eF9yaW5nX2luZm8gKnJpbmdfaW5mbzsKLQlzdHJ1Y3Qg eGVuX2NvbW1fc3JpbmcgKnNyaW5nOwotCXN0cnVjdCBldnRjaG5fYWxsb2NfdW5ib3VuZCBhbGxv Y191bmJvdW5kOwotCXN0cnVjdCBldnRjaG5fY2xvc2UgY2xvc2U7Ci0KLQl2b2lkICpzaGFyZWRf cmluZzsKLQlpbnQgcmV0OwotCi0JLyogY2hlY2sgaWYgdGhlcmUncyBhbnkgZXhpc3RpbmcgdHgg Y2hhbm5lbCBpbiB0aGUgdGFibGUgKi8KLQlyaW5nX2luZm8gPSB4ZW5fY29tbV9maW5kX3R4X3Jp bmcoZG9taWQpOwotCi0JaWYgKHJpbmdfaW5mbykgewotCQlkZXZfaW5mbyhoeV9kcnZfcHJpdi0+ ZGV2LAotCQkJICJ0eCByaW5nIGNoIHRvIGRvbWlkID0gJWQgYWxyZWFkeSBleGlzdFxuZ3JlZiA9 ICVkLCBwb3J0ID0gJWRcbiIsCi0JCXJpbmdfaW5mby0+cmRvbWFpbiwgcmluZ19pbmZvLT5ncmVm X3JpbmcsIHJpbmdfaW5mby0+cG9ydCk7Ci0JCXJldHVybiAwOwotCX0KLQotCXJpbmdfaW5mbyA9 IGttYWxsb2Moc2l6ZW9mKCpyaW5nX2luZm8pLCBHRlBfS0VSTkVMKTsKLQotCWlmICghcmluZ19p bmZvKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCS8qIGZyb20gZXhwb3J0ZXIgdG8gaW1wb3J0ZXIg Ki8KLQlzaGFyZWRfcmluZyA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCAx KTsKLQlpZiAoc2hhcmVkX3JpbmcgPT0gMCkgewotCQlrZnJlZShyaW5nX2luZm8pOwotCQlyZXR1 cm4gLUVOT01FTTsKLQl9Ci0KLQlzcmluZyA9IChzdHJ1Y3QgeGVuX2NvbW1fc3JpbmcgKikgc2hh cmVkX3Jpbmc7Ci0KLQlTSEFSRURfUklOR19JTklUKHNyaW5nKTsKLQotCUZST05UX1JJTkdfSU5J VCgmKHJpbmdfaW5mby0+cmluZ19mcm9udCksIHNyaW5nLCBQQUdFX1NJWkUpOwotCi0JcmluZ19p bmZvLT5ncmVmX3JpbmcgPSBnbnR0YWJfZ3JhbnRfZm9yZWlnbl9hY2Nlc3MoZG9taWQsCi0JCQkJ CQl2aXJ0X3RvX21mbihzaGFyZWRfcmluZyksCi0JCQkJCQkwKTsKLQlpZiAocmluZ19pbmZvLT5n cmVmX3JpbmcgPCAwKSB7Ci0JCS8qIGZhaWwgdG8gZ2V0IGdyZWYgKi8KLQkJa2ZyZWUocmluZ19p bmZvKTsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JYWxsb2NfdW5ib3VuZC5kb20gPSBET01J RF9TRUxGOwotCWFsbG9jX3VuYm91bmQucmVtb3RlX2RvbSA9IGRvbWlkOwotCXJldCA9IEhZUEVS VklTT1JfZXZlbnRfY2hhbm5lbF9vcChFVlRDSE5PUF9hbGxvY191bmJvdW5kLAotCQkJCQkgICZh bGxvY191bmJvdW5kKTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwK LQkJCSJDYW5ub3QgYWxsb2NhdGUgZXZlbnQgY2hhbm5lbFxuIik7Ci0JCWtmcmVlKHJpbmdfaW5m byk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCS8qIHNldHRpbmcgdXAgaW50ZXJydXB0ICovCi0J cmV0ID0gYmluZF9ldnRjaG5fdG9faXJxaGFuZGxlcihhbGxvY191bmJvdW5kLnBvcnQsCi0JCQkJ CWZyb250X3JpbmdfaXNyLCAwLAotCQkJCQlOVUxMLCAodm9pZCAqKSByaW5nX2luZm8pOwotCi0J aWYgKHJldCA8IDApIHsKLQkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAotCQkJIkZhaWxlZCB0 byBzZXR1cCBldmVudCBjaGFubmVsXG4iKTsKLQkJY2xvc2UucG9ydCA9IGFsbG9jX3VuYm91bmQu cG9ydDsKLQkJSFlQRVJWSVNPUl9ldmVudF9jaGFubmVsX29wKEVWVENITk9QX2Nsb3NlLCAmY2xv c2UpOwotCQlnbnR0YWJfZW5kX2ZvcmVpZ25fYWNjZXNzKHJpbmdfaW5mby0+Z3JlZl9yaW5nLCAw LAotCQkJCQl2aXJ0X3RvX21mbihzaGFyZWRfcmluZykpOwotCQlrZnJlZShyaW5nX2luZm8pOwot CQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlyaW5nX2luZm8tPnJkb21haW4gPSBkb21pZDsKLQlyaW5n X2luZm8tPmlycSA9IHJldDsKLQlyaW5nX2luZm8tPnBvcnQgPSBhbGxvY191bmJvdW5kLnBvcnQ7 Ci0KLQltdXRleF9pbml0KCZyaW5nX2luZm8tPmxvY2spOwotCi0JZGV2X2RiZyhoeV9kcnZfcHJp di0+ZGV2LAotCQkiJXM6IGFsbG9jYXRlZCBldmVudGNoYW5uZWwgZ3JlZiAlZCAgcG9ydDogJWQg IGlycTogJWRcbiIsCi0JCV9fZnVuY19fLAotCQlyaW5nX2luZm8tPmdyZWZfcmluZywKLQkJcmlu Z19pbmZvLT5wb3J0LAotCQlyaW5nX2luZm8tPmlycSk7Ci0KLQlyZXQgPSB4ZW5fY29tbV9hZGRf dHhfcmluZyhyaW5nX2luZm8pOwotCi0JcmV0ID0geGVuX2NvbW1fZXhwb3NlX3JpbmdfZGV0YWls cyh4ZW5fYmVfZ2V0X2RvbWlkKCksCi0JCQkJCSAgIGRvbWlkLAotCQkJCQkgICByaW5nX2luZm8t PmdyZWZfcmluZywKLQkJCQkJICAgcmluZ19pbmZvLT5wb3J0KTsKLQotCS8qIFJlZ2lzdGVyIHdh dGNoIGZvciByZW1vdGUgZG9tYWluIGV4cG9ydGVyIHJpbmcuCi0JICogV2hlbiByZW1vdGUgZG9t YWluIHdpbGwgc2V0dXAgaXRzIGV4cG9ydGVyIHJpbmcsCi0JICogd2Ugd2lsbCBhdXRvbWF0aWNh bGx5IGNvbm5lY3Qgb3VyIGltcG9ydGVyIHJpbmcgdG8gaXQuCi0JICovCi0JcmluZ19pbmZvLT53 YXRjaC5jYWxsYmFjayA9IHJlbW90ZV9kb21fZXhwb3J0ZXJfd2F0Y2hfY2I7Ci0JcmluZ19pbmZv LT53YXRjaC5ub2RlID0ga21hbGxvYygyNTUsIEdGUF9LRVJORUwpOwotCi0JaWYgKCFyaW5nX2lu Zm8tPndhdGNoLm5vZGUpIHsKLQkJa2ZyZWUocmluZ19pbmZvKTsKLQkJcmV0dXJuIC1FTk9NRU07 Ci0JfQotCi0Jc3ByaW50ZigoY2hhciAqKXJpbmdfaW5mby0+d2F0Y2gubm9kZSwKLQkJIi9sb2Nh bC9kb21haW4vJWQvZGF0YS9oeXBlcl9kbWFidWYvJWQvcG9ydCIsCi0JCWRvbWlkLCB4ZW5fYmVf Z2V0X2RvbWlkKCkpOwotCi0JcmVnaXN0ZXJfeGVuYnVzX3dhdGNoKCZyaW5nX2luZm8tPndhdGNo KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qIGNsZWFucyB1cCBleHBvcnRlciByaW5nIGNyZWF0 ZWQgZm9yIGdpdmVuIHJlbW90ZSBkb21haW4gKi8KLXZvaWQgeGVuX2JlX2NsZWFudXBfdHhfcmJ1 ZihpbnQgZG9taWQpCi17Ci0Jc3RydWN0IHhlbl9jb21tX3R4X3JpbmdfaW5mbyAqcmluZ19pbmZv OwotCXN0cnVjdCB4ZW5fY29tbV9yeF9yaW5nX2luZm8gKnJ4X3JpbmdfaW5mbzsKLQotCS8qIGNo ZWNrIGlmIHdlIGF0IGFsbCBoYXZlIGV4cG9ydGVyIHJpbmcgZm9yIGdpdmVuIHJkb21haW4gKi8K LQlyaW5nX2luZm8gPSB4ZW5fY29tbV9maW5kX3R4X3JpbmcoZG9taWQpOwotCi0JaWYgKCFyaW5n X2luZm8pCi0JCXJldHVybjsKLQotCXhlbl9jb21tX3JlbW92ZV90eF9yaW5nKGRvbWlkKTsKLQot CXVucmVnaXN0ZXJfeGVuYnVzX3dhdGNoKCZyaW5nX2luZm8tPndhdGNoKTsKLQlrZnJlZShyaW5n X2luZm8tPndhdGNoLm5vZGUpOwotCi0JLyogTm8gbmVlZCB0byBjbG9zZSBjb21tdW5pY2F0aW9u IGNoYW5uZWwsIHdpbGwgYmUgZG9uZSBieQotCSAqIHRoaXMgZnVuY3Rpb24KLQkgKi8KLQl1bmJp bmRfZnJvbV9pcnFoYW5kbGVyKHJpbmdfaW5mby0+aXJxLCAodm9pZCAqKSByaW5nX2luZm8pOwot Ci0JLyogTm8gbmVlZCB0byBmcmVlIHNyaW5nIHBhZ2UsIHdpbGwgYmUgZnJlZWQgYnkgdGhpcyBm dW5jdGlvbgotCSAqIHdoZW4gb3RoZXIgc2lkZSB3aWxsIGVuZCBpdHMgYWNjZXNzCi0JICovCi0J Z250dGFiX2VuZF9mb3JlaWduX2FjY2VzcyhyaW5nX2luZm8tPmdyZWZfcmluZywgMCwKLQkJCQkg ICh1bnNpZ25lZCBsb25nKSByaW5nX2luZm8tPnJpbmdfZnJvbnQuc3JpbmcpOwotCi0Ja2ZyZWUo cmluZ19pbmZvKTsKLQotCXJ4X3JpbmdfaW5mbyA9IHhlbl9jb21tX2ZpbmRfcnhfcmluZyhkb21p ZCk7Ci0JaWYgKCFyeF9yaW5nX2luZm8pCi0JCXJldHVybjsKLQotCUJBQ0tfUklOR19JTklUKCYo cnhfcmluZ19pbmZvLT5yaW5nX2JhY2spLAotCQkgICAgICAgcnhfcmluZ19pbmZvLT5yaW5nX2Jh Y2suc3JpbmcsCi0JCSAgICAgICBQQUdFX1NJWkUpOwotfQotCi0vKiBpbXBvcnRlciBuZWVkcyB0 byBrbm93IGFib3V0IHNoYXJlZCBwYWdlIGFuZCBwb3J0IG51bWJlcnMgZm9yCi0gKiByaW5nIGJ1 ZmZlciBhbmQgZXZlbnQgY2hhbm5lbAotICovCi1pbnQgeGVuX2JlX2luaXRfcnhfcmJ1ZihpbnQg ZG9taWQpCi17Ci0Jc3RydWN0IHhlbl9jb21tX3J4X3JpbmdfaW5mbyAqcmluZ19pbmZvOwotCXN0 cnVjdCB4ZW5fY29tbV9zcmluZyAqc3Jpbmc7Ci0KLQlzdHJ1Y3QgcGFnZSAqc2hhcmVkX3Jpbmc7 Ci0KLQlzdHJ1Y3QgZ250dGFiX21hcF9ncmFudF9yZWYgKm1hcF9vcHM7Ci0KLQlpbnQgcmV0Owot CWludCByeF9ncmVmLCByeF9wb3J0OwotCi0JLyogY2hlY2sgaWYgdGhlcmUncyBleGlzdGluZyBy eCByaW5nIGNoYW5uZWwgKi8KLQlyaW5nX2luZm8gPSB4ZW5fY29tbV9maW5kX3J4X3JpbmcoZG9t aWQpOwotCi0JaWYgKHJpbmdfaW5mbykgewotCQlkZXZfaW5mbyhoeV9kcnZfcHJpdi0+ZGV2LAot CQkJICJyeCByaW5nIGNoIGZyb20gZG9taWQgPSAlZCBhbHJlYWR5IGV4aXN0XG4iLAotCQkJIHJp bmdfaW5mby0+c2RvbWFpbik7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0ID0geGVuX2NvbW1f Z2V0X3JpbmdfZGV0YWlscyh4ZW5fYmVfZ2V0X2RvbWlkKCksIGRvbWlkLAotCQkJCQkmcnhfZ3Jl ZiwgJnJ4X3BvcnQpOwotCi0JaWYgKHJldCkgewotCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYs Ci0JCQkiRG9tYWluICVkIGhhcyBub3QgY3JlYXRlZCBleHBvcnRlciByaW5nIGZvciBjdXJyZW50 IGRvbWFpblxuIiwKLQkJCWRvbWlkKTsKLQotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJpbmdfaW5m byA9IGttYWxsb2Moc2l6ZW9mKCpyaW5nX2luZm8pLCBHRlBfS0VSTkVMKTsKLQotCWlmICghcmlu Z19pbmZvKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXJpbmdfaW5mby0+c2RvbWFpbiA9IGRvbWlk OwotCXJpbmdfaW5mby0+ZXZ0Y2huID0gcnhfcG9ydDsKLQotCW1hcF9vcHMgPSBrbWFsbG9jKHNp emVvZigqbWFwX29wcyksIEdGUF9LRVJORUwpOwotCi0JaWYgKCFtYXBfb3BzKSB7Ci0JCXJldCA9 IC1FTk9NRU07Ci0JCWdvdG8gZmFpbF9ub19tYXBfb3BzOwotCX0KLQotCWlmIChnbnR0YWJfYWxs b2NfcGFnZXMoMSwgJnNoYXJlZF9yaW5nKSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGZh aWxfb3RoZXJzOwotCX0KLQotCWdudHRhYl9zZXRfbWFwX29wKCZtYXBfb3BzWzBdLAotCQkJICAo dW5zaWduZWQgbG9uZylwZm5fdG9fa2FkZHIoCi0JCQkJCXBhZ2VfdG9fcGZuKHNoYXJlZF9yaW5n KSksCi0JCQkgIEdOVE1BUF9ob3N0X21hcCwgcnhfZ3JlZiwgZG9taWQpOwotCi0JZ250dGFiX3Nl dF91bm1hcF9vcCgmcmluZ19pbmZvLT51bm1hcF9vcCwKLQkJCSAgICAodW5zaWduZWQgbG9uZylw Zm5fdG9fa2FkZHIoCi0JCQkJCXBhZ2VfdG9fcGZuKHNoYXJlZF9yaW5nKSksCi0JCQkgICAgR05U TUFQX2hvc3RfbWFwLCAtMSk7Ci0KLQlyZXQgPSBnbnR0YWJfbWFwX3JlZnMobWFwX29wcywgTlVM TCwgJnNoYXJlZF9yaW5nLCAxKTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKGh5X2Rydl9w cml2LT5kZXYsICJDYW5ub3QgbWFwIHJpbmdcbiIpOwotCQlyZXQgPSAtRUZBVUxUOwotCQlnb3Rv IGZhaWxfb3RoZXJzOwotCX0KLQotCWlmIChtYXBfb3BzWzBdLnN0YXR1cykgewotCQlkZXZfZXJy KGh5X2Rydl9wcml2LT5kZXYsICJSaW5nIG1hcHBpbmcgZmFpbGVkXG4iKTsKLQkJcmV0ID0gLUVG QVVMVDsKLQkJZ290byBmYWlsX290aGVyczsKLQl9IGVsc2UgewotCQlyaW5nX2luZm8tPnVubWFw X29wLmhhbmRsZSA9IG1hcF9vcHNbMF0uaGFuZGxlOwotCX0KLQotCWtmcmVlKG1hcF9vcHMpOwot Ci0Jc3JpbmcgPSAoc3RydWN0IHhlbl9jb21tX3NyaW5nICopcGZuX3RvX2thZGRyKHBhZ2VfdG9f cGZuKHNoYXJlZF9yaW5nKSk7Ci0KLQlCQUNLX1JJTkdfSU5JVCgmcmluZ19pbmZvLT5yaW5nX2Jh Y2ssIHNyaW5nLCBQQUdFX1NJWkUpOwotCi0JcmV0ID0gYmluZF9pbnRlcmRvbWFpbl9ldnRjaG5f dG9faXJxKGRvbWlkLCByeF9wb3J0KTsKLQotCWlmIChyZXQgPCAwKSB7Ci0JCXJldCA9IC1FSU87 Ci0JCWdvdG8gZmFpbF9vdGhlcnM7Ci0JfQotCi0JcmluZ19pbmZvLT5pcnEgPSByZXQ7Ci0KLQlk ZXZfZGJnKGh5X2Rydl9wcml2LT5kZXYsCi0JCSIlczogYm91bmQgdG8gZXZlbnRjaGFubmVsIHBv cnQ6ICVkICBpcnE6ICVkXG4iLCBfX2Z1bmNfXywKLQkJcnhfcG9ydCwKLQkJcmluZ19pbmZvLT5p cnEpOwotCi0JcmV0ID0geGVuX2NvbW1fYWRkX3J4X3JpbmcocmluZ19pbmZvKTsKLQotCS8qIFNl dHVwIGNvbW11bmNhdGlvbiBjaGFubmVsIGluIG9wcG9zaXRlIGRpcmVjdGlvbiAqLwotCWlmICgh eGVuX2NvbW1fZmluZF90eF9yaW5nKGRvbWlkKSkKLQkJcmV0ID0geGVuX2JlX2luaXRfdHhfcmJ1 Zihkb21pZCk7Ci0KLQlyZXQgPSByZXF1ZXN0X2lycShyaW5nX2luZm8tPmlycSwKLQkJCSAgYmFj a19yaW5nX2lzciwgMCwKLQkJCSAgTlVMTCwgKHZvaWQgKilyaW5nX2luZm8pOwotCi0JcmV0dXJu IHJldDsKLQotZmFpbF9vdGhlcnM6Ci0Ja2ZyZWUobWFwX29wcyk7Ci0KLWZhaWxfbm9fbWFwX29w czoKLQlrZnJlZShyaW5nX2luZm8pOwotCi0JcmV0dXJuIHJldDsKLX0KLQotLyogY2xlbmFzIHVw IGltcG9ydGVyIHJpbmcgY3JlYXRlIGZvciBnaXZlbiBzb3VyY2UgZG9tYWluICovCi12b2lkIHhl bl9iZV9jbGVhbnVwX3J4X3JidWYoaW50IGRvbWlkKQotewotCXN0cnVjdCB4ZW5fY29tbV9yeF9y aW5nX2luZm8gKnJpbmdfaW5mbzsKLQlzdHJ1Y3QgeGVuX2NvbW1fdHhfcmluZ19pbmZvICp0eF9y aW5nX2luZm87Ci0Jc3RydWN0IHBhZ2UgKnNoYXJlZF9yaW5nOwotCi0JLyogY2hlY2sgaWYgd2Ug aGF2ZSBpbXBvcnRlciByaW5nIGNyZWF0ZWQgZm9yIGdpdmVuIHNkb21haW4gKi8KLQlyaW5nX2lu Zm8gPSB4ZW5fY29tbV9maW5kX3J4X3JpbmcoZG9taWQpOwotCi0JaWYgKCFyaW5nX2luZm8pCi0J CXJldHVybjsKLQotCXhlbl9jb21tX3JlbW92ZV9yeF9yaW5nKGRvbWlkKTsKLQotCS8qIG5vIG5l ZWQgdG8gY2xvc2UgZXZlbnQgY2hhbm5lbCwgd2lsbCBiZSBkb25lIGJ5IHRoYXQgZnVuY3Rpb24g Ki8KLQl1bmJpbmRfZnJvbV9pcnFoYW5kbGVyKHJpbmdfaW5mby0+aXJxLCAodm9pZCAqKXJpbmdf aW5mbyk7Ci0KLQkvKiB1bm1hcHBpbmcgc2hhcmVkIHJpbmcgcGFnZSAqLwotCXNoYXJlZF9yaW5n ID0gdmlydF90b19wYWdlKHJpbmdfaW5mby0+cmluZ19iYWNrLnNyaW5nKTsKLQlnbnR0YWJfdW5t YXBfcmVmcygmcmluZ19pbmZvLT51bm1hcF9vcCwgTlVMTCwgJnNoYXJlZF9yaW5nLCAxKTsKLQln bnR0YWJfZnJlZV9wYWdlcygxLCAmc2hhcmVkX3JpbmcpOwotCi0Ja2ZyZWUocmluZ19pbmZvKTsK LQotCXR4X3JpbmdfaW5mbyA9IHhlbl9jb21tX2ZpbmRfdHhfcmluZyhkb21pZCk7Ci0JaWYgKCF0 eF9yaW5nX2luZm8pCi0JCXJldHVybjsKLQotCVNIQVJFRF9SSU5HX0lOSVQodHhfcmluZ19pbmZv LT5yaW5nX2Zyb250LnNyaW5nKTsKLQlGUk9OVF9SSU5HX0lOSVQoJih0eF9yaW5nX2luZm8tPnJp bmdfZnJvbnQpLAotCQkJdHhfcmluZ19pbmZvLT5yaW5nX2Zyb250LnNyaW5nLAotCQkJUEFHRV9T SVpFKTsKLX0KLQotI2lmZGVmIENPTkZJR19IWVBFUl9ETUFCVUZfWEVOX0FVVE9fUlhfQ0hfQURE Ci0KLXN0YXRpYyB2b2lkIHhlbl9yeF9jaF9hZGRfZGVsYXllZChzdHJ1Y3Qgd29ya19zdHJ1Y3Qg KnVudXNlZCk7Ci0KLXN0YXRpYyBERUNMQVJFX0RFTEFZRURfV09SSyh4ZW5fcnhfY2hfYXV0b19h ZGRfd29yaywgeGVuX3J4X2NoX2FkZF9kZWxheWVkKTsKLQotI2RlZmluZSBET01JRF9TQ0FOX1NU QVJUCTEJLyogIGRvbWlkID0gMSAqLwotI2RlZmluZSBET01JRF9TQ0FOX0VORAkJMTAJLyogZG9t aWQgPSAxMCAqLwotCi1zdGF0aWMgdm9pZCB4ZW5fcnhfY2hfYWRkX2RlbGF5ZWQoc3RydWN0IHdv cmtfc3RydWN0ICp1bnVzZWQpCi17Ci0JaW50IHJldDsKLQljaGFyIGJ1ZlsxMjhdOwotCWludCBp LCBkdW1teTsKLQotCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwKLQkJIlNjYW5uaW5nIG5ldyB0 eCBjaGFubmVsIGNvbW1pbmcgZnJvbSBhbm90aGVyIGRvbWFpblxuIik7Ci0KLQkvKiBjaGVjayBv dGhlciBkb21haW5zIGFuZCBzY2hlZHVsZSBhbm90aGVyIHdvcmsgaWYgZHJpdmVyCi0JICogaXMg c3RpbGwgcnVubmluZyBhbmQgYmFja2VuZCBpcyB2YWxpZAotCSAqLwotCWlmIChoeV9kcnZfcHJp diAmJgotCSAgICBoeV9kcnZfcHJpdi0+aW5pdGlhbGl6ZWQpIHsKLQkJZm9yIChpID0gRE9NSURf U0NBTl9TVEFSVDsgaSA8IERPTUlEX1NDQU5fRU5EICsgMTsgaSsrKSB7Ci0JCQlpZiAoaSA9PSBo eV9kcnZfcHJpdi0+ZG9taWQpCi0JCQkJY29udGludWU7Ci0KLQkJCXNwcmludGYoYnVmLCAiL2xv Y2FsL2RvbWFpbi8lZC9kYXRhL2h5cGVyX2RtYWJ1Zi8lZCIsCi0JCQkJaSwgaHlfZHJ2X3ByaXYt PmRvbWlkKTsKLQotCQkJcmV0ID0geGVuYnVzX3NjYW5mKFhCVF9OSUwsIGJ1ZiwgInBvcnQiLCAi JWQiLCAmZHVtbXkpOwotCi0JCQlpZiAocmV0ID4gMCkgewotCQkJCWlmICh4ZW5fY29tbV9maW5k X3J4X3JpbmcoaSkgIT0gTlVMTCkKLQkJCQkJY29udGludWU7Ci0KLQkJCQlyZXQgPSB4ZW5fYmVf aW5pdF9yeF9yYnVmKGkpOwotCi0JCQkJaWYgKCFyZXQpCi0JCQkJCWRldl9pbmZvKGh5X2Rydl9w cml2LT5kZXYsCi0JCQkJCQkgIkRvbmUgcnggY2ggaW5pdCBmb3IgVk0gJWRcbiIsCi0JCQkJCQkg aSk7Ci0JCQl9Ci0JCX0KLQotCQkvKiBjaGVjayBldmVyeSAxMCBzZWNvbmRzICovCi0JCXNjaGVk dWxlX2RlbGF5ZWRfd29yaygmeGVuX3J4X2NoX2F1dG9fYWRkX3dvcmssCi0JCQkJICAgICAgbXNl Y3NfdG9famlmZmllcygxMDAwMCkpOwotCX0KLX0KLQotI2VuZGlmIC8qIENPTkZJR19IWVBFUl9E TUFCVUZfWEVOX0FVVE9fUlhfQ0hfQUREICovCi0KLXZvaWQgeGVuX2luaXRfY29tbV9lbnZfZGVs YXllZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnVudXNlZCkKLXsKLQlpbnQgcmV0OwotCi0JLyogc2No ZWR1bGluZyBhbm90aGVyIHdvcmsgaWYgZHJpdmVyIGlzIHN0aWxsIHJ1bm5pbmcKLQkgKiBhbmQg eGVuc3RvcmUgaGFzbid0IGJlZW4gaW5pdGlhbGl6ZWQgb3IgZG9tX2lkIGhhc24ndAotCSAqIGJl ZW4gY29ycmVjdGx5IHJldHJpZXZlZC4KLQkgKi8KLQlpZiAobGlrZWx5KHhlbnN0b3JlZF9yZWFk eSA9PSAwIHx8Ci0JICAgIGh5X2Rydl9wcml2LT5kb21pZCA9PSAtMSkpIHsKLQkJZGV2X2RiZyho eV9kcnZfcHJpdi0+ZGV2LAotCQkJIlhlbnN0b3JlIG5vdCByZWFkeSBXaWxsIHJlLXRyeSBpbiA1 MDBtc1xuIik7Ci0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmeGVuX2luaXRfY29tbV9lbnZfd29y aywKLQkJCQkgICAgICBtc2Vjc190b19qaWZmaWVzKDUwMCkpOwotCX0gZWxzZSB7Ci0JCXJldCA9 IHhlbl9jb21tX3NldHVwX2RhdGFfZGlyKCk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlkZXZfZXJy KGh5X2Rydl9wcml2LT5kZXYsCi0JCQkJIkZhaWxlZCB0byBjcmVhdGUgZGF0YSBkaXIgaW4gWGVu c3RvcmVcbiIpOwotCQl9IGVsc2UgewotCQkJZGV2X2luZm8oaHlfZHJ2X3ByaXYtPmRldiwKLQkJ CQkiU3VjY2Vzc2Z1bGx5IGZpbmlzaGVkIGNvbW0gZW52IGluaXRcbiIpOwotCQkJaHlfZHJ2X3By aXYtPmluaXRpYWxpemVkID0gdHJ1ZTsKLQotI2lmZGVmIENPTkZJR19IWVBFUl9ETUFCVUZfWEVO X0FVVE9fUlhfQ0hfQURECi0JCQl4ZW5fcnhfY2hfYWRkX2RlbGF5ZWQoTlVMTCk7Ci0jZW5kaWYg LyogQ09ORklHX0hZUEVSX0RNQUJVRl9YRU5fQVVUT19SWF9DSF9BREQgKi8KLQkJfQotCX0KLX0K LQotaW50IHhlbl9iZV9pbml0X2NvbW1fZW52KHZvaWQpCi17Ci0JaW50IHJldDsKLQotCXhlbl9j b21tX3JpbmdfdGFibGVfaW5pdCgpOwotCi0JaWYgKHVubGlrZWx5KHhlbnN0b3JlZF9yZWFkeSA9 PSAwIHx8Ci0JICAgIGh5X2Rydl9wcml2LT5kb21pZCA9PSAtMSkpIHsKLQkJeGVuX2luaXRfY29t bV9lbnZfZGVsYXllZChOVUxMKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldCA9IHhlbl9jb21t X3NldHVwX2RhdGFfZGlyKCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycihoeV9kcnZfcHJp di0+ZGV2LAotCQkJIkZhaWxlZCB0byBjcmVhdGUgZGF0YSBkaXIgaW4gWGVuc3RvcmVcbiIpOwot CX0gZWxzZSB7Ci0JCWRldl9pbmZvKGh5X2Rydl9wcml2LT5kZXYsCi0JCQkiU3VjY2Vzc2Z1bGx5 IGZpbmlzaGVkIGNvbW0gZW52IGluaXRpYWxpemF0aW9uXG4iKTsKLQotCQloeV9kcnZfcHJpdi0+ aW5pdGlhbGl6ZWQgPSB0cnVlOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qIGNsZWFucyB1 cCBhbGwgdHgvcnggcmluZ3MgKi8KLXN0YXRpYyB2b2lkIHhlbl9iZV9jbGVhbnVwX2FsbF9yYnVm cyh2b2lkKQotewotCXhlbl9jb21tX2ZvcmVhY2hfdHhfcmluZyh4ZW5fYmVfY2xlYW51cF90eF9y YnVmKTsKLQl4ZW5fY29tbV9mb3JlYWNoX3J4X3JpbmcoeGVuX2JlX2NsZWFudXBfcnhfcmJ1Zik7 Ci19Ci0KLXZvaWQgeGVuX2JlX2Rlc3Ryb3lfY29tbSh2b2lkKQotewotCXhlbl9iZV9jbGVhbnVw X2FsbF9yYnVmcygpOwotCXhlbl9jb21tX2Rlc3Ryb3lfZGF0YV9kaXIoKTsKLX0KLQotaW50IHhl bl9iZV9zZW5kX3JlcShpbnQgZG9taWQsIHN0cnVjdCBoeXBlcl9kbWFidWZfcmVxICpyZXEsCi0J CQkgICAgICBpbnQgd2FpdCkKLXsKLQlzdHJ1Y3QgeGVuX2NvbW1fZnJvbnRfcmluZyAqcmluZzsK LQlzdHJ1Y3QgaHlwZXJfZG1hYnVmX3JlcSAqbmV3X3JlcTsKLQlzdHJ1Y3QgeGVuX2NvbW1fdHhf cmluZ19pbmZvICpyaW5nX2luZm87Ci0JaW50IG5vdGlmeTsKLQotCXN0cnVjdCB0aW1ldmFsIHR2 X3N0YXJ0LCB0dl9lbmQ7Ci0Jc3RydWN0IHRpbWV2YWwgdHZfZGlmZjsKLQotCWludCB0aW1lb3V0 ID0gMTAwMDsKLQotCS8qIGZpbmQgYSByaW5nIGluZm8gZm9yIHRoZSBjaGFubmVsICovCi0Jcmlu Z19pbmZvID0geGVuX2NvbW1fZmluZF90eF9yaW5nKGRvbWlkKTsKLQlpZiAoIXJpbmdfaW5mbykg ewotCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCi0JCQkiQ2FuJ3QgZmluZCByaW5nIGluZm8g Zm9yIHRoZSBjaGFubmVsXG4iKTsKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0JfQotCi0KLQlyaW5nID0g JnJpbmdfaW5mby0+cmluZ19mcm9udDsKLQotCWRvX2dldHRpbWVvZmRheSgmdHZfc3RhcnQpOwot Ci0Jd2hpbGUgKFJJTkdfRlVMTChyaW5nKSkgewotCQlkZXZfZGJnKGh5X2Rydl9wcml2LT5kZXYs ICJSSU5HX0ZVTExcbiIpOwotCi0JCWlmICh0aW1lb3V0ID09IDApIHsKLQkJCWRldl9lcnIoaHlf ZHJ2X3ByaXYtPmRldiwKLQkJCQkiVGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciBhbiBlbnRyeSBp biB0aGUgcmluZ1xuIik7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCQl1c2xlZXBfcmFuZ2UoMTAw LCAxMjApOwotCQl0aW1lb3V0LS07Ci0JfQotCi0JdGltZW91dCA9IDEwMDA7Ci0KLQltdXRleF9s b2NrKCZyaW5nX2luZm8tPmxvY2spOwotCi0JbmV3X3JlcSA9IFJJTkdfR0VUX1JFUVVFU1Qocmlu ZywgcmluZy0+cmVxX3Byb2RfcHZ0KTsKLQlpZiAoIW5ld19yZXEpIHsKLQkJbXV0ZXhfdW5sb2Nr KCZyaW5nX2luZm8tPmxvY2spOwotCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCi0JCQkiTlVM TCBSRVFVRVNUXG4iKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JcmVxLT5yZXFfaWQgPSB4ZW5f Y29tbV9uZXh0X3JlcV9pZCgpOwotCi0JLyogdXBkYXRlIHJlcV9wZW5kaW5nIHdpdGggY3VycmVu dCByZXF1ZXN0ICovCi0JbWVtY3B5KCZyZXFfcGVuZGluZywgcmVxLCBzaXplb2YocmVxX3BlbmRp bmcpKTsKLQotCS8qIHBhc3MgY3VycmVudCByZXF1ZXN0IHRvIHRoZSByaW5nICovCi0JbWVtY3B5 KG5ld19yZXEsIHJlcSwgc2l6ZW9mKCpuZXdfcmVxKSk7Ci0KLQlyaW5nLT5yZXFfcHJvZF9wdnQr KzsKLQotCVJJTkdfUFVTSF9SRVFVRVNUU19BTkRfQ0hFQ0tfTk9USUZZKHJpbmcsIG5vdGlmeSk7 Ci0JaWYgKG5vdGlmeSkKLQkJbm90aWZ5X3JlbW90ZV92aWFfaXJxKHJpbmdfaW5mby0+aXJxKTsK LQotCWlmICh3YWl0KSB7Ci0JCXdoaWxlICh0aW1lb3V0LS0pIHsKLQkJCWlmIChyZXFfcGVuZGlu Zy5zdGF0ICE9Ci0JCQkgICAgSFlQRVJfRE1BQlVGX1JFUV9OT1RfUkVTUE9OREVEKQotCQkJCWJy ZWFrOwotCQkJdXNsZWVwX3JhbmdlKDEwMCwgMTIwKTsKLQkJfQotCi0JCWlmICh0aW1lb3V0IDwg MCkgewotCQkJbXV0ZXhfdW5sb2NrKCZyaW5nX2luZm8tPmxvY2spOwotCQkJZGV2X2VycihoeV9k cnZfcHJpdi0+ZGV2LAotCQkJCSJyZXF1ZXN0IHRpbWVkLW91dFxuIik7Ci0JCQlyZXR1cm4gLUVC VVNZOwotCQl9Ci0KLQkJbXV0ZXhfdW5sb2NrKCZyaW5nX2luZm8tPmxvY2spOwotCQlkb19nZXR0 aW1lb2ZkYXkoJnR2X2VuZCk7Ci0KLQkJLyogY2hlY2tpbmcgdGltZSBkdXJhdGlvbiBmb3Igcm91 bmQtdHJpcCBvZiBhIHJlcXVlc3QKLQkJICogZm9yIGRlYnVnZ2luZwotCQkgKi8KLQkJaWYgKHR2 X2VuZC50dl91c2VjID49IHR2X3N0YXJ0LnR2X3VzZWMpIHsKLQkJCXR2X2RpZmYudHZfc2VjID0g dHZfZW5kLnR2X3NlYy10dl9zdGFydC50dl9zZWM7Ci0JCQl0dl9kaWZmLnR2X3VzZWMgPSB0dl9l bmQudHZfdXNlYy10dl9zdGFydC50dl91c2VjOwotCQl9IGVsc2UgewotCQkJdHZfZGlmZi50dl9z ZWMgPSB0dl9lbmQudHZfc2VjLXR2X3N0YXJ0LnR2X3NlYy0xOwotCQkJdHZfZGlmZi50dl91c2Vj ID0gdHZfZW5kLnR2X3VzZWMrMTAwMDAwMC0KLQkJCQkJICB0dl9zdGFydC50dl91c2VjOwotCQl9 Ci0KLQkJaWYgKHR2X2RpZmYudHZfc2VjICE9IDAgJiYgdHZfZGlmZi50dl91c2VjID4gMTYwMDAp Ci0JCQlkZXZfZGJnKGh5X2Rydl9wcml2LT5kZXYsCi0JCQkJInNlbmRfcmVxOnRpbWUgZGlmZjog JWxkIHNlYywgJWxkIHVzZWNcbiIsCi0JCQkJdHZfZGlmZi50dl9zZWMsIHR2X2RpZmYudHZfdXNl Yyk7Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZyaW5nX2luZm8tPmxvY2spOwotCi0JcmV0dXJuIDA7 Ci19Ci0KLS8qIElTUiBmb3IgaGFuZGxpbmcgcmVxdWVzdCAqLwotc3RhdGljIGlycXJldHVybl90 IGJhY2tfcmluZ19pc3IoaW50IGlycSwgdm9pZCAqaW5mbykKLXsKLQlSSU5HX0lEWCByYywgcnA7 Ci0Jc3RydWN0IGh5cGVyX2RtYWJ1Zl9yZXEgcmVxOwotCXN0cnVjdCBoeXBlcl9kbWFidWZfcmVz cCByZXNwOwotCi0JaW50IG5vdGlmeSwgbW9yZV90b19kbzsKLQlpbnQgcmV0OwotCi0Jc3RydWN0 IHhlbl9jb21tX3J4X3JpbmdfaW5mbyAqcmluZ19pbmZvOwotCXN0cnVjdCB4ZW5fY29tbV9iYWNr X3JpbmcgKnJpbmc7Ci0KLQlyaW5nX2luZm8gPSAoc3RydWN0IHhlbl9jb21tX3J4X3JpbmdfaW5m byAqKWluZm87Ci0JcmluZyA9ICZyaW5nX2luZm8tPnJpbmdfYmFjazsKLQotCWRldl9kYmcoaHlf ZHJ2X3ByaXYtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQlkbyB7Ci0JCXJjID0gcmluZy0+ cmVxX2NvbnM7Ci0JCXJwID0gcmluZy0+c3JpbmctPnJlcV9wcm9kOwotCQltb3JlX3RvX2RvID0g MDsKLQkJd2hpbGUgKHJjICE9IHJwKSB7Ci0JCQlpZiAoUklOR19SRVFVRVNUX0NPTlNfT1ZFUkZM T1cocmluZywgcmMpKQotCQkJCWJyZWFrOwotCi0JCQltZW1jcHkoJnJlcSwgUklOR19HRVRfUkVR VUVTVChyaW5nLCByYyksIHNpemVvZihyZXEpKTsKLQkJCXJpbmctPnJlcV9jb25zID0gKytyYzsK LQotCQkJcmV0ID0gaHlwZXJfZG1hYnVmX21zZ19wYXJzZShyaW5nX2luZm8tPnNkb21haW4sICZy ZXEpOwotCi0JCQlpZiAocmV0ID4gMCkgewotCQkJCS8qIHByZXBhcmluZyBhIHJlc3BvbnNlIGZv ciB0aGUgcmVxdWVzdCBhbmQKLQkJCQkgKiBzZW5kIGl0IHRvIHRoZSByZXF1ZXN0ZXIKLQkJCQkg Ki8KLQkJCQltZW1jcHkoJnJlc3AsICZyZXEsIHNpemVvZihyZXNwKSk7Ci0JCQkJbWVtY3B5KFJJ TkdfR0VUX1JFU1BPTlNFKHJpbmcsCi0JCQkJCQkJIHJpbmctPnJzcF9wcm9kX3B2dCksCi0JCQkJ CQkJICZyZXNwLCBzaXplb2YocmVzcCkpOwotCQkJCXJpbmctPnJzcF9wcm9kX3B2dCsrOwotCi0J CQkJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LAotCQkJCQkicmVzcG9uZGluZyB0byBleHBvcnRl ciBmb3IgcmVxOiVkXG4iLAotCQkJCQlyZXNwLnJlc3BfaWQpOwotCi0JCQkJUklOR19QVVNIX1JF U1BPTlNFU19BTkRfQ0hFQ0tfTk9USUZZKHJpbmcsCi0JCQkJCQkJCSAgICAgbm90aWZ5KTsKLQot CQkJCWlmIChub3RpZnkpCi0JCQkJCW5vdGlmeV9yZW1vdGVfdmlhX2lycShyaW5nX2luZm8tPmly cSk7Ci0JCQl9Ci0KLQkJCVJJTkdfRklOQUxfQ0hFQ0tfRk9SX1JFUVVFU1RTKHJpbmcsIG1vcmVf dG9fZG8pOwotCQl9Ci0JfSB3aGlsZSAobW9yZV90b19kbyk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRM RUQ7Ci19Ci0KLS8qIElTUiBmb3IgaGFuZGxpbmcgcmVzcG9uc2VzICovCi1zdGF0aWMgaXJxcmV0 dXJuX3QgZnJvbnRfcmluZ19pc3IoaW50IGlycSwgdm9pZCAqaW5mbykKLXsKLQkvKiBmcm9udCBy aW5nIG9ubHkgY2FyZSBhYm91dCByZXNwb25zZSBmcm9tIGJhY2sgKi8KLQlzdHJ1Y3QgaHlwZXJf ZG1hYnVmX3Jlc3AgKnJlc3A7Ci0JUklOR19JRFggaSwgcnA7Ci0JaW50IG1vcmVfdG9fZG8sIHJl dDsKLQotCXN0cnVjdCB4ZW5fY29tbV90eF9yaW5nX2luZm8gKnJpbmdfaW5mbzsKLQlzdHJ1Y3Qg eGVuX2NvbW1fZnJvbnRfcmluZyAqcmluZzsKLQotCXJpbmdfaW5mbyA9IChzdHJ1Y3QgeGVuX2Nv bW1fdHhfcmluZ19pbmZvICopaW5mbzsKLQlyaW5nID0gJnJpbmdfaW5mby0+cmluZ19mcm9udDsK LQotCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQlkbyB7 Ci0JCW1vcmVfdG9fZG8gPSAwOwotCQlycCA9IHJpbmctPnNyaW5nLT5yc3BfcHJvZDsKLQkJZm9y IChpID0gcmluZy0+cnNwX2NvbnM7IGkgIT0gcnA7IGkrKykgewotCQkJcmVzcCA9IFJJTkdfR0VU X1JFU1BPTlNFKHJpbmcsIGkpOwotCi0JCQkvKiB1cGRhdGUgcGVuZGluZyByZXF1ZXN0J3Mgc3Rh dHVzIHdpdGggd2hhdCBpcwotCQkJICogaW4gdGhlIHJlc3BvbnNlCi0JCQkgKi8KLQotCQkJZGV2 X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LAotCQkJCSJnZXR0aW5nIHJlc3BvbnNlIGZyb20gaW1wb3J0 ZXJcbiIpOwotCi0JCQlpZiAocmVxX3BlbmRpbmcucmVxX2lkID09IHJlc3AtPnJlc3BfaWQpCi0J CQkJcmVxX3BlbmRpbmcuc3RhdCA9IHJlc3AtPnN0YXQ7Ci0KLQkJCWlmIChyZXNwLT5zdGF0ID09 IEhZUEVSX0RNQUJVRl9SRVFfTkVFRFNfRk9MTE9XX1VQKSB7Ci0JCQkJLyogcGFyc2luZyByZXNw b25zZSAqLwotCQkJCXJldCA9IGh5cGVyX2RtYWJ1Zl9tc2dfcGFyc2UocmluZ19pbmZvLT5yZG9t YWluLAotCQkJCQkoc3RydWN0IGh5cGVyX2RtYWJ1Zl9yZXEgKilyZXNwKTsKLQotCQkJCWlmIChy ZXQgPCAwKSB7Ci0JCQkJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKLQkJCQkJCSJlcnIgd2hp bGUgcGFyc2luZyByZXNwXG4iKTsKLQkJCQl9Ci0JCQl9IGVsc2UgaWYgKHJlc3AtPnN0YXQgPT0g SFlQRVJfRE1BQlVGX1JFUV9QUk9DRVNTRUQpIHsKLQkJCQkvKiBmb3IgZGVidWdnaW5nIGRtYV9i dWYgcmVtb3RlIHN5bmNoICovCi0JCQkJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LAotCQkJCQki b3JpZ2luYWwgcmVxdWVzdCA9IDB4JXhcbiIsIHJlc3AtPmNtZCk7Ci0JCQkJZGV2X2RiZyhoeV9k cnZfcHJpdi0+ZGV2LAotCQkJCQkiZ290IEhZUEVSX0RNQUJVRl9SRVFfUFJPQ0VTU0VEXG4iKTsK LQkJCX0gZWxzZSBpZiAocmVzcC0+c3RhdCA9PSBIWVBFUl9ETUFCVUZfUkVRX0VSUk9SKSB7Ci0J CQkJLyogZm9yIGRlYnVnZ2luZyBkbWFfYnVmIHJlbW90ZSBzeW5jaCAqLwotCQkJCWRldl9kYmco aHlfZHJ2X3ByaXYtPmRldiwKLQkJCQkJIm9yaWdpbmFsIHJlcXVlc3QgPSAweCV4XG4iLCByZXNw LT5jbWQpOwotCQkJCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwKLQkJCQkJImdvdCBIWVBFUl9E TUFCVUZfUkVRX0VSUk9SXG4iKTsKLQkJCX0KLQkJfQotCi0JCXJpbmctPnJzcF9jb25zID0gaTsK LQotCQlpZiAoaSAhPSByaW5nLT5yZXFfcHJvZF9wdnQpCi0JCQlSSU5HX0ZJTkFMX0NIRUNLX0ZP Ul9SRVNQT05TRVMocmluZywgbW9yZV90b19kbyk7Ci0JCWVsc2UKLQkJCXJpbmctPnNyaW5nLT5y c3BfZXZlbnQgPSBpKzE7Ci0KLQl9IHdoaWxlIChtb3JlX3RvX2RvKTsKLQotCXJldHVybiBJUlFf SEFORExFRDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi94ZW4vaHlw ZXJfZG1hYnVmX3hlbl9jb21tLmggYi9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYveGVuL2h5cGVy X2RtYWJ1Zl94ZW5fY29tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MGEyYjcw Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi94ZW4vaHlwZXJfZG1hYnVm X3hlbl9jb21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKgotICogQ29weXJp Z2h0IMKpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICog Y29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMg KHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl LAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5l eHQKLSAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJz dGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKLSAqIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS RVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIEFV VEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFH RVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCi0gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCi0g KiBJTiBUSEUgU09GVFdBUkUuCi0gKgotICovCi0KLSNpZm5kZWYgX19IWVBFUl9ETUFCVUZfWEVO X0NPTU1fSF9fCi0jZGVmaW5lIF9fSFlQRVJfRE1BQlVGX1hFTl9DT01NX0hfXwotCi0jaW5jbHVk ZSAieGVuL2ludGVyZmFjZS9pby9yaW5nLmgiCi0jaW5jbHVkZSAieGVuL3hlbmJ1cy5oIgotI2lu Y2x1ZGUgIi4uL2h5cGVyX2RtYWJ1Zl9tc2cuaCIKLQotZXh0ZXJuIGludCB4ZW5zdG9yZWRfcmVh ZHk7Ci0KLURFRklORV9SSU5HX1RZUEVTKHhlbl9jb21tLCBzdHJ1Y3QgaHlwZXJfZG1hYnVmX3Jl cSwgc3RydWN0IGh5cGVyX2RtYWJ1Zl9yZXNwKTsKLQotc3RydWN0IHhlbl9jb21tX3R4X3Jpbmdf aW5mbyB7Ci0Jc3RydWN0IHhlbl9jb21tX2Zyb250X3JpbmcgcmluZ19mcm9udDsKLQlpbnQgcmRv bWFpbjsKLQlpbnQgZ3JlZl9yaW5nOwotCWludCBpcnE7Ci0JaW50IHBvcnQ7Ci0Jc3RydWN0IG11 dGV4IGxvY2s7Ci0Jc3RydWN0IHhlbmJ1c193YXRjaCB3YXRjaDsKLX07Ci0KLXN0cnVjdCB4ZW5f Y29tbV9yeF9yaW5nX2luZm8gewotCWludCBzZG9tYWluOwotCWludCBpcnE7Ci0JaW50IGV2dGNo bjsKLQlzdHJ1Y3QgeGVuX2NvbW1fYmFja19yaW5nIHJpbmdfYmFjazsKLQlzdHJ1Y3QgZ250dGFi X3VubWFwX2dyYW50X3JlZiB1bm1hcF9vcDsKLX07Ci0KLWludCB4ZW5fYmVfZ2V0X2RvbWlkKHZv aWQpOwotCi1pbnQgeGVuX2JlX2luaXRfY29tbV9lbnYodm9pZCk7Ci0KLS8qIGV4cG9ydGVyIG5l ZWRzIHRvIGdlbmVyYXRlZCBpbmZvIGZvciBwYWdlIHNoYXJpbmcgKi8KLWludCB4ZW5fYmVfaW5p dF90eF9yYnVmKGludCBkb21pZCk7Ci0KLS8qIGltcG9ydGVyIG5lZWRzIHRvIGtub3cgYWJvdXQg c2hhcmVkIHBhZ2UgYW5kIHBvcnQgbnVtYmVycwotICogZm9yIHJpbmcgYnVmZmVyIGFuZCBldmVu dCBjaGFubmVsCi0gKi8KLWludCB4ZW5fYmVfaW5pdF9yeF9yYnVmKGludCBkb21pZCk7Ci0KLS8q IGNsZWFucyB1cCBleHBvcnRlciByaW5nIGNyZWF0ZWQgZm9yIGdpdmVuIGRvbWFpbiAqLwotdm9p ZCB4ZW5fYmVfY2xlYW51cF90eF9yYnVmKGludCBkb21pZCk7Ci0KLS8qIGNsZWFucyB1cCBpbXBv cnRlciByaW5nIGNyZWF0ZWQgZm9yIGdpdmVuIGRvbWFpbiAqLwotdm9pZCB4ZW5fYmVfY2xlYW51 cF9yeF9yYnVmKGludCBkb21pZCk7Ci0KLXZvaWQgeGVuX2JlX2Rlc3Ryb3lfY29tbSh2b2lkKTsK LQotLyogc2VuZCByZXF1ZXN0IHRvIHRoZSByZW1vdGUgZG9tYWluICovCi1pbnQgeGVuX2JlX3Nl bmRfcmVxKGludCBkb21pZCwgc3RydWN0IGh5cGVyX2RtYWJ1Zl9yZXEgKnJlcSwKLQkJICAgIGlu dCB3YWl0KTsKLQotI2VuZGlmIC8qIF9fSFlQRVJfRE1BQlVGX1hFTl9DT01NX0hfXyAqLwpkaWZm IC0tZ2l0IGEvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL3hlbi9oeXBlcl9kbWFidWZfeGVuX2Nv bW1fbGlzdC5jIGIvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL3hlbi9oeXBlcl9kbWFidWZfeGVu X2NvbW1fbGlzdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTAyM2RiLi4wMDAw MDAwCi0tLSBhL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi94ZW4vaHlwZXJfZG1hYnVmX3hlbl9j b21tX2xpc3QuYworKysgL2Rldi9udWxsCkBAIC0xLDE1OCArMCwwIEBACi0vKgotICogQ29weXJp Z2h0IMKpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICog Y29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMg KHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl LAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5l eHQKLSAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJz dGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKLSAqIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS RVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIEFV VEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFH RVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCi0gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCi0g KiBJTiBUSEUgU09GVFdBUkUuCi0gKgotICogQXV0aG9yczoKLSAqICAgIERvbmd3b24gS2ltIDxk b25nd29uLmtpbUBpbnRlbC5jb20+Ci0gKiAgICBNYXRldXN6IFBvbHJvbGEgPG1hdGV1c3p4LnBv dHJvbGFAaW50ZWwuY29tPgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0j aW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVk ZSA8bGludXgvY2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2hhc2h0YWJsZS5oPgotI2luY2x1ZGUg PHhlbi9ncmFudF90YWJsZS5oPgotI2luY2x1ZGUgIi4uL2h5cGVyX2RtYWJ1Zl9kcnYuaCIKLSNp bmNsdWRlICJoeXBlcl9kbWFidWZfeGVuX2NvbW0uaCIKLSNpbmNsdWRlICJoeXBlcl9kbWFidWZf eGVuX2NvbW1fbGlzdC5oIgotCi1ERUNMQVJFX0hBU0hUQUJMRSh4ZW5fY29tbV90eF9yaW5nX2hh c2gsIE1BWF9FTlRSWV9UWF9SSU5HKTsKLURFQ0xBUkVfSEFTSFRBQkxFKHhlbl9jb21tX3J4X3Jp bmdfaGFzaCwgTUFYX0VOVFJZX1JYX1JJTkcpOwotCi12b2lkIHhlbl9jb21tX3JpbmdfdGFibGVf aW5pdCh2b2lkKQotewotCWhhc2hfaW5pdCh4ZW5fY29tbV9yeF9yaW5nX2hhc2gpOwotCWhhc2hf aW5pdCh4ZW5fY29tbV90eF9yaW5nX2hhc2gpOwotfQotCi1pbnQgeGVuX2NvbW1fYWRkX3R4X3Jp bmcoc3RydWN0IHhlbl9jb21tX3R4X3JpbmdfaW5mbyAqcmluZ19pbmZvKQotewotCXN0cnVjdCB4 ZW5fY29tbV90eF9yaW5nX2luZm9fZW50cnkgKmluZm9fZW50cnk7Ci0KLQlpbmZvX2VudHJ5ID0g a21hbGxvYyhzaXplb2YoKmluZm9fZW50cnkpLCBHRlBfS0VSTkVMKTsKLQotCWlmICghaW5mb19l bnRyeSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpbmZvX2VudHJ5LT5pbmZvID0gcmluZ19pbmZv OwotCi0JaGFzaF9hZGQoeGVuX2NvbW1fdHhfcmluZ19oYXNoLCAmaW5mb19lbnRyeS0+bm9kZSwK LQkJaW5mb19lbnRyeS0+aW5mby0+cmRvbWFpbik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHhl bl9jb21tX2FkZF9yeF9yaW5nKHN0cnVjdCB4ZW5fY29tbV9yeF9yaW5nX2luZm8gKnJpbmdfaW5m bykKLXsKLQlzdHJ1Y3QgeGVuX2NvbW1fcnhfcmluZ19pbmZvX2VudHJ5ICppbmZvX2VudHJ5Owot Ci0JaW5mb19lbnRyeSA9IGttYWxsb2Moc2l6ZW9mKCppbmZvX2VudHJ5KSwgR0ZQX0tFUk5FTCk7 Ci0KLQlpZiAoIWluZm9fZW50cnkpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaW5mb19lbnRyeS0+ aW5mbyA9IHJpbmdfaW5mbzsKLQotCWhhc2hfYWRkKHhlbl9jb21tX3J4X3JpbmdfaGFzaCwgJmlu Zm9fZW50cnktPm5vZGUsCi0JCWluZm9fZW50cnktPmluZm8tPnNkb21haW4pOwotCi0JcmV0dXJu IDA7Ci19Ci0KLXN0cnVjdCB4ZW5fY29tbV90eF9yaW5nX2luZm8gKnhlbl9jb21tX2ZpbmRfdHhf cmluZyhpbnQgZG9taWQpCi17Ci0Jc3RydWN0IHhlbl9jb21tX3R4X3JpbmdfaW5mb19lbnRyeSAq aW5mb19lbnRyeTsKLQlpbnQgYmt0OwotCi0JaGFzaF9mb3JfZWFjaCh4ZW5fY29tbV90eF9yaW5n X2hhc2gsIGJrdCwgaW5mb19lbnRyeSwgbm9kZSkKLQkJaWYgKGluZm9fZW50cnktPmluZm8tPnJk b21haW4gPT0gZG9taWQpCi0JCQlyZXR1cm4gaW5mb19lbnRyeS0+aW5mbzsKLQotCXJldHVybiBO VUxMOwotfQotCi1zdHJ1Y3QgeGVuX2NvbW1fcnhfcmluZ19pbmZvICp4ZW5fY29tbV9maW5kX3J4 X3JpbmcoaW50IGRvbWlkKQotewotCXN0cnVjdCB4ZW5fY29tbV9yeF9yaW5nX2luZm9fZW50cnkg KmluZm9fZW50cnk7Ci0JaW50IGJrdDsKLQotCWhhc2hfZm9yX2VhY2goeGVuX2NvbW1fcnhfcmlu Z19oYXNoLCBia3QsIGluZm9fZW50cnksIG5vZGUpCi0JCWlmIChpbmZvX2VudHJ5LT5pbmZvLT5z ZG9tYWluID09IGRvbWlkKQotCQkJcmV0dXJuIGluZm9fZW50cnktPmluZm87Ci0KLQlyZXR1cm4g TlVMTDsKLX0KLQotaW50IHhlbl9jb21tX3JlbW92ZV90eF9yaW5nKGludCBkb21pZCkKLXsKLQlz dHJ1Y3QgeGVuX2NvbW1fdHhfcmluZ19pbmZvX2VudHJ5ICppbmZvX2VudHJ5OwotCWludCBia3Q7 Ci0KLQloYXNoX2Zvcl9lYWNoKHhlbl9jb21tX3R4X3JpbmdfaGFzaCwgYmt0LCBpbmZvX2VudHJ5 LCBub2RlKQotCQlpZiAoaW5mb19lbnRyeS0+aW5mby0+cmRvbWFpbiA9PSBkb21pZCkgewotCQkJ aGFzaF9kZWwoJmluZm9fZW50cnktPm5vZGUpOwotCQkJa2ZyZWUoaW5mb19lbnRyeSk7Ci0JCQly ZXR1cm4gMDsKLQkJfQotCi0JcmV0dXJuIC1FTk9FTlQ7Ci19Ci0KLWludCB4ZW5fY29tbV9yZW1v dmVfcnhfcmluZyhpbnQgZG9taWQpCi17Ci0Jc3RydWN0IHhlbl9jb21tX3J4X3JpbmdfaW5mb19l bnRyeSAqaW5mb19lbnRyeTsKLQlpbnQgYmt0OwotCi0JaGFzaF9mb3JfZWFjaCh4ZW5fY29tbV9y eF9yaW5nX2hhc2gsIGJrdCwgaW5mb19lbnRyeSwgbm9kZSkKLQkJaWYgKGluZm9fZW50cnktPmlu Zm8tPnNkb21haW4gPT0gZG9taWQpIHsKLQkJCWhhc2hfZGVsKCZpbmZvX2VudHJ5LT5ub2RlKTsK LQkJCWtmcmVlKGluZm9fZW50cnkpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCXJldHVybiAtRU5P RU5UOwotfQotCi12b2lkIHhlbl9jb21tX2ZvcmVhY2hfdHhfcmluZyh2b2lkICgqZnVuYykoaW50 IGRvbWlkKSkKLXsKLQlzdHJ1Y3QgeGVuX2NvbW1fdHhfcmluZ19pbmZvX2VudHJ5ICppbmZvX2Vu dHJ5OwotCXN0cnVjdCBobGlzdF9ub2RlICp0bXA7Ci0JaW50IGJrdDsKLQotCWhhc2hfZm9yX2Vh Y2hfc2FmZSh4ZW5fY29tbV90eF9yaW5nX2hhc2gsIGJrdCwgdG1wLAotCQkJICAgaW5mb19lbnRy eSwgbm9kZSkgewotCQlmdW5jKGluZm9fZW50cnktPmluZm8tPnJkb21haW4pOwotCX0KLX0KLQot dm9pZCB4ZW5fY29tbV9mb3JlYWNoX3J4X3Jpbmcodm9pZCAoKmZ1bmMpKGludCBkb21pZCkpCi17 Ci0Jc3RydWN0IHhlbl9jb21tX3J4X3JpbmdfaW5mb19lbnRyeSAqaW5mb19lbnRyeTsKLQlzdHJ1 Y3QgaGxpc3Rfbm9kZSAqdG1wOwotCWludCBia3Q7Ci0KLQloYXNoX2Zvcl9lYWNoX3NhZmUoeGVu X2NvbW1fcnhfcmluZ19oYXNoLCBia3QsIHRtcCwKLQkJCSAgIGluZm9fZW50cnksIG5vZGUpIHsK LQkJZnVuYyhpbmZvX2VudHJ5LT5pbmZvLT5zZG9tYWluKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9k cml2ZXJzL3hlbi9oeXBlcl9kbWFidWYveGVuL2h5cGVyX2RtYWJ1Zl94ZW5fY29tbV9saXN0Lmgg Yi9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYveGVuL2h5cGVyX2RtYWJ1Zl94ZW5fY29tbV9saXN0 LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1MDJmZTcuLjAwMDAwMDAKLS0tIGEv ZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL3hlbi9oeXBlcl9kbWFidWZfeGVuX2NvbW1fbGlzdC5o CisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCDCqSAyMDE3 IEludGVsIENvcnBvcmF0aW9uCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3 YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Ci0gKiBwYXJh Z3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9y dGlvbnMgb2YgdGhlCi0gKiBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBBVVRIT1JTIE9SIENP UFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVS Ci0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwotICogSU4gVEhFIFNP RlRXQVJFLgotICoKLSAqLwotCi0jaWZuZGVmIF9fSFlQRVJfRE1BQlVGX1hFTl9DT01NX0xJU1Rf SF9fCi0jZGVmaW5lIF9fSFlQRVJfRE1BQlVGX1hFTl9DT01NX0xJU1RfSF9fCi0KLS8qIG51bWJl ciBvZiBiaXRzIHRvIGJlIHVzZWQgZm9yIGV4cG9ydGVkIGRtYWJ1ZnMgaGFzaCB0YWJsZSAqLwot I2RlZmluZSBNQVhfRU5UUllfVFhfUklORyA3Ci0vKiBudW1iZXIgb2YgYml0cyB0byBiZSB1c2Vk IGZvciBpbXBvcnRlZCBkbWFidWZzIGhhc2ggdGFibGUgKi8KLSNkZWZpbmUgTUFYX0VOVFJZX1JY X1JJTkcgNwotCi1zdHJ1Y3QgeGVuX2NvbW1fdHhfcmluZ19pbmZvX2VudHJ5IHsKLQlzdHJ1Y3Qg eGVuX2NvbW1fdHhfcmluZ19pbmZvICppbmZvOwotCXN0cnVjdCBobGlzdF9ub2RlIG5vZGU7Ci19 OwotCi1zdHJ1Y3QgeGVuX2NvbW1fcnhfcmluZ19pbmZvX2VudHJ5IHsKLQlzdHJ1Y3QgeGVuX2Nv bW1fcnhfcmluZ19pbmZvICppbmZvOwotCXN0cnVjdCBobGlzdF9ub2RlIG5vZGU7Ci19OwotCi12 b2lkIHhlbl9jb21tX3JpbmdfdGFibGVfaW5pdCh2b2lkKTsKLQotaW50IHhlbl9jb21tX2FkZF90 eF9yaW5nKHN0cnVjdCB4ZW5fY29tbV90eF9yaW5nX2luZm8gKnJpbmdfaW5mbyk7Ci0KLWludCB4 ZW5fY29tbV9hZGRfcnhfcmluZyhzdHJ1Y3QgeGVuX2NvbW1fcnhfcmluZ19pbmZvICpyaW5nX2lu Zm8pOwotCi1pbnQgeGVuX2NvbW1fcmVtb3ZlX3R4X3JpbmcoaW50IGRvbWlkKTsKLQotaW50IHhl bl9jb21tX3JlbW92ZV9yeF9yaW5nKGludCBkb21pZCk7Ci0KLXN0cnVjdCB4ZW5fY29tbV90eF9y aW5nX2luZm8gKnhlbl9jb21tX2ZpbmRfdHhfcmluZyhpbnQgZG9taWQpOwotCi1zdHJ1Y3QgeGVu X2NvbW1fcnhfcmluZ19pbmZvICp4ZW5fY29tbV9maW5kX3J4X3JpbmcoaW50IGRvbWlkKTsKLQot LyogaXRlcmF0ZXMgb3ZlciBhbGwgZXhwb3J0ZXIgcmluZ3MgYW5kIGNhbGxzIHByb3ZpZGVkCi0g KiBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGVtCi0gKi8KLXZvaWQgeGVuX2NvbW1fZm9yZWFjaF90 eF9yaW5nKHZvaWQgKCpmdW5jKShpbnQgZG9taWQpKTsKLQotLyogaXRlcmF0ZXMgb3ZlciBhbGwg aW1wb3J0ZXIgcmluZ3MgYW5kIGNhbGxzIHByb3ZpZGVkCi0gKiBmdW5jdGlvbiBmb3IgZWFjaCBv ZiB0aGVtCi0gKi8KLXZvaWQgeGVuX2NvbW1fZm9yZWFjaF9yeF9yaW5nKHZvaWQgKCpmdW5jKShp bnQgZG9taWQpKTsKLQotI2VuZGlmIC8vIF9fSFlQRVJfRE1BQlVGX1hFTl9DT01NX0xJU1RfSF9f CmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYveGVuL2h5cGVyX2RtYWJ1Zl94 ZW5fZHJ2LmMgYi9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYveGVuL2h5cGVyX2RtYWJ1Zl94ZW5f ZHJ2LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0ZWQzYmMuLjAwMDAwMDAKLS0t IGEvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL3hlbi9oeXBlcl9kbWFidWZfeGVuX2Rydi5jCisr KyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCDCqSAyMDE3IElu dGVsIENvcnBvcmF0aW9uCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJl ZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBz b2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJl IiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNs dWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBz ZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9t IHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBm b2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Ci0gKiBwYXJhZ3Jh cGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlv bnMgb2YgdGhlCi0gKiBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg IkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1Q TElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9O SU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBBVVRIT1JTIE9SIENPUFlS SUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0g KiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9U SEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU SEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwotICogSU4gVEhFIFNPRlRX QVJFLgotICoKLSAqIEF1dGhvcnM6Ci0gKiAgICBEb25nd29uIEtpbSA8ZG9uZ3dvbi5raW1AaW50 ZWwuY29tPgotICogICAgTWF0ZXVzeiBQb2xyb2xhIDxtYXRldXN6eC5wb3Ryb2xhQGludGVsLmNv bT4KLSAqCi0gKi8KLQotI2luY2x1ZGUgIi4uL2h5cGVyX2RtYWJ1Zl9kcnYuaCIKLSNpbmNsdWRl ICJoeXBlcl9kbWFidWZfeGVuX2NvbW0uaCIKLSNpbmNsdWRlICJoeXBlcl9kbWFidWZfeGVuX3No bS5oIgotCi1zdHJ1Y3QgaHlwZXJfZG1hYnVmX2JrbmRfb3BzIHhlbl9ia25kX29wcyA9IHsKLQku aW5pdCA9IE5VTEwsIC8qIG5vdCBuZWVkZWQgZm9yIHhlbiAqLwotCS5jbGVhbnVwID0gTlVMTCwg Lyogbm90IG5lZWRlZCBmb3IgeGVuICovCi0JLmdldF92bV9pZCA9IHhlbl9iZV9nZXRfZG9taWQs Ci0JLnNoYXJlX3BhZ2VzID0geGVuX2JlX3NoYXJlX3BhZ2VzLAotCS51bnNoYXJlX3BhZ2VzID0g eGVuX2JlX3Vuc2hhcmVfcGFnZXMsCi0JLm1hcF9zaGFyZWRfcGFnZXMgPSAodm9pZCAqKXhlbl9i ZV9tYXBfc2hhcmVkX3BhZ2VzLAotCS51bm1hcF9zaGFyZWRfcGFnZXMgPSB4ZW5fYmVfdW5tYXBf c2hhcmVkX3BhZ2VzLAotCS5pbml0X2NvbW1fZW52ID0geGVuX2JlX2luaXRfY29tbV9lbnYsCi0J LmRlc3Ryb3lfY29tbSA9IHhlbl9iZV9kZXN0cm95X2NvbW0sCi0JLmluaXRfcnhfY2ggPSB4ZW5f YmVfaW5pdF9yeF9yYnVmLAotCS5pbml0X3R4X2NoID0geGVuX2JlX2luaXRfdHhfcmJ1ZiwKLQku c2VuZF9yZXEgPSB4ZW5fYmVfc2VuZF9yZXEsCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4v aHlwZXJfZG1hYnVmL3hlbi9oeXBlcl9kbWFidWZfeGVuX2Rydi5oIGIvZHJpdmVycy94ZW4vaHlw ZXJfZG1hYnVmL3hlbi9oeXBlcl9kbWFidWZfeGVuX2Rydi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCBhNDkwMmI3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1 Zi94ZW4vaHlwZXJfZG1hYnVmX3hlbl9kcnYuaAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAg QEAKLS8qCi0gKiBDb3B5cmlnaHQgwqkgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgotICoKLSAqIFBl cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u IG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9j dW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29m dHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgot ICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3Ry aWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJl LCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5p c2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgot ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ug KGluY2x1ZGluZyB0aGUgbmV4dAotICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBh bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQotICogU29mdHdhcmUuCi0g KgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkg T0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJ TUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5U IFNIQUxMCi0gKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9S IEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKLSAqIEZST00s IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1Ig T1RIRVIgREVBTElOR1MKLSAqIElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKi8KLQotI2lmbmRlZiBf X0hZUEVSX0RNQUJVRl9YRU5fRFJWX0hfXwotI2RlZmluZSBfX0hZUEVSX0RNQUJVRl9YRU5fRFJW X0hfXwotI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvZ3JhbnRfdGFibGUuaD4KLQotZXh0ZXJuIHN0 cnVjdCBoeXBlcl9kbWFidWZfYmtuZF9vcHMgeGVuX2JrbmRfb3BzOwotCi0vKiBNYWluIHB1cnBv c2Ugb2YgdGhpcyBzdHJ1Y3R1cmUgaXMgdG8ga2VlcAotICogYWxsIHJlZmVyZW5jZXMgY3JlYXRl ZCBvciBhY3F1aXJlZCBmb3Igc2hhcmluZwotICogcGFnZXMgd2l0aCBhbm90aGVyIGRvbWFpbiBm b3IgZnJlZWluZyB0aG9zZSBsYXRlcgotICogd2hlbiB1bnNoYXJpbmcuCi0gKi8KLXN0cnVjdCB4 ZW5fc2hhcmVkX3BhZ2VzX2luZm8gewotCS8qIHRvcCBsZXZlbCByZWZpZCAqLwotCWdyYW50X3Jl Zl90IGx2bDNfZ3JlZjsKLQotCS8qIHBhZ2Ugb2YgdG9wIGxldmVsIGFkZHJlc3NpbmcsIGl0IGNv bnRhaW5zIHJlZmlkcyBvZiAybmQgbHZsIHBhZ2VzICovCi0JZ3JhbnRfcmVmX3QgKmx2bDNfdGFi bGU7Ci0KLQkvKiB0YWJsZSBvZiAybmQgbGV2ZWwgcGFnZXMsIHRoYXQgY29udGFpbnMgcmVmaWRz IHRvIGRhdGEgcGFnZXMgKi8KLQlncmFudF9yZWZfdCAqbHZsMl90YWJsZTsKLQotCS8qIHVubWFw IG9wcyBmb3IgbWFwcGVkIHBhZ2VzICovCi0Jc3RydWN0IGdudHRhYl91bm1hcF9ncmFudF9yZWYg KnVubWFwX29wczsKLQotCS8qIGRhdGEgcGFnZXMgdG8gYmUgdW5tYXBwZWQgKi8KLQlzdHJ1Y3Qg cGFnZSAqKmRhdGFfcGFnZXM7Ci19OwotCi0jZW5kaWYgLy8gX19IWVBFUl9ETUFCVUZfWEVOX0NP TU1fSF9fCmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYveGVuL2h5cGVyX2Rt YWJ1Zl94ZW5fc2htLmMgYi9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYveGVuL2h5cGVyX2RtYWJ1 Zl94ZW5fc2htLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2YTE1ZjEuLjAwMDAw MDAKLS0tIGEvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL3hlbi9oeXBlcl9kbWFidWZfeGVuX3No bS5jCisrKyAvZGV2L251bGwKQEAgLTEsNTI1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgwqkg MjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0gKiBjb3B5IG9m IHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJT b2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byB1c2UsIGNv cHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0 byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAotICog cGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs IHBvcnRpb25zIG9mIHRoZQotICogU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBS T1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IK LSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug QU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCi0gKiBUSEUgQVVUSE9SUyBP UiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBP VEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9S VCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKLSAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9O IFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKLSAqIElOIFRI RSBTT0ZUV0FSRS4KLSAqCi0gKiBBdXRob3JzOgotICogICAgRG9uZ3dvbiBLaW0gPGRvbmd3b24u a2ltQGludGVsLmNvbT4KLSAqICAgIE1hdGV1c3ogUG9scm9sYSA8bWF0ZXVzengucG90cm9sYUBp bnRlbC5jb20+Ci0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8 eGVuL2dyYW50X3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL3hlbi9wYWdlLmg+Ci0jaW5jbHVkZSAi aHlwZXJfZG1hYnVmX3hlbl9kcnYuaCIKLSNpbmNsdWRlICIuLi9oeXBlcl9kbWFidWZfZHJ2Lmgi Ci0KLSNkZWZpbmUgUkVGU19QRVJfUEFHRSAoUEFHRV9TSVpFL3NpemVvZihncmFudF9yZWZfdCkp Ci0KLS8qCi0gKiBDcmVhdGVzIDIgbGV2ZWwgcGFnZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBy ZWZlcmVuY2luZyBzaGFyZWQgcGFnZXMuCi0gKiBUb3AgbGV2ZWwgcGFnZSBpcyBhIHNpbmdsZSBw YWdlIHRoYXQgY29udGFpbnMgdXAgdG8gMTAyNCByZWZpZHMgdGhhdAotICogcG9pbnQgdG8gMm5k IGxldmVsIHBhZ2VzLgotICoKLSAqIEVhY2ggMm5kIGxldmVsIHBhZ2UgY29udGFpbnMgdXAgdG8g MTAyNCByZWZpZHMgdGhhdCBwb2ludCB0byBzaGFyZWQKLSAqIGRhdGEgcGFnZXMuCi0gKgotICog VGhlcmUgd2lsbCBhbHdheXMgYmUgb25lIHRvcCBsZXZlbCBwYWdlIGFuZCBudW1iZXIgb2YgMm5k IGxldmVsIHBhZ2VzCi0gKiBkZXBlbmRzIG9uIG51bWJlciBvZiBzaGFyZWQgZGF0YSBwYWdlcy4K LSAqCi0gKiAgICAgIDNyZCBsZXZlbCBwYWdlICAgICAgICAgICAgICAgIDJuZCBsZXZlbCBwYWdl cyAgICAgICAgICAgIERhdGEgcGFnZXMKLSAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAg IOKUjD4rLS0tLS0tLS0tLS0tLS0tLS0tLS0rIOKUjD4rLS0tLS0tLS0tLS0tKwotICogfDJuZCBs ZXZlbCBwYWdlIDAgcmVmaWQgICB8LS0t4pSYIHxEYXRhIHBhZ2UgMCByZWZpZCAgIHwt4pSYIHxE YXRhIHBhZ2UgMCB8Ci0gKiB8Mm5kIGxldmVsIHBhZ2UgMSByZWZpZCAgIHwtLS3ilJAgfERhdGEg cGFnZSAxIHJlZmlkICAgfC3ilJAgKy0tLS0tLS0tLS0tLSsKLSAqIHwgICAgICAgICAgIC4uLiAg ICAgICAgICAgfCAgIHwgfCAgICAgLi4uLiAgICAgICAgICAgfCB8Ci0gKiB8Mm5kIGxldmVsIHBh Z2UgMTAyMyByZWZpZHwt4pSQIHwgfERhdGEgcGFnZSAxMDIzIHJlZmlkfCDilJQ+Ky0tLS0tLS0t LS0tLSsKLSAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8IHwgKy0tLS0tLS0tLS0tLS0t LS0tLS0tKyAgIHxEYXRhIHBhZ2UgMSB8Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCB8ICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tKwotICogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwg4pSUPistLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAqICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgfERhdGEgcGFnZSAxMDI0IHJlZmlkfAotICogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8RGF0YSBwYWdlIDEwMjUgcmVmaWR8Ci0gKiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwgICAgICAgLi4uICAgICAgICAgIHwKLSAq ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgfERhdGEgcGFnZSAyMDQ3IHJlZmlkfAot ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0r Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgICAgICAgIC4uLi4uCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 4pSULS0+Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8RGF0YSBwYWdlIDEwNDc1NTIgcmVmaWR8Ci0gKiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHxEYXRhIHBhZ2UgMTA0NzU1MyByZWZpZHwKLSAqICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAuLi4gICAgICAgICAgICAgfAotICogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8RGF0YSBwYWdlIDEwNDg1NzUgcmVmaWR8Ci0gKiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsK LSAqCi0gKiBVc2luZyBzdWNoIDIgbGV2ZWwgc3RydWN0dXJlIGl0IGlzIHBvc3NpYmxlIHRvIHJl ZmVyZW5jZSB1cCB0byA0R0Igb2YKLSAqIHNoYXJlZCBkYXRhIHVzaW5nIHNpbmdsZSByZWZpZCBw b2ludGluZyB0byB0b3AgbGV2ZWwgcGFnZS4KLSAqCi0gKiBSZXR1cm5zIHJlZmlkIG9mIHRvcCBs ZXZlbCBwYWdlLgotICovCi1pbnQgeGVuX2JlX3NoYXJlX3BhZ2VzKHN0cnVjdCBwYWdlICoqcGFn ZXMsIGludCBkb21pZCwgaW50IG5lbnRzLAotCQkgICAgICAgdm9pZCAqKnJlZnNfaW5mbykKLXsK LQlncmFudF9yZWZfdCBsdmwzX2dyZWY7Ci0JZ3JhbnRfcmVmX3QgKmx2bDJfdGFibGU7Ci0JZ3Jh bnRfcmVmX3QgKmx2bDNfdGFibGU7Ci0KLQkvKgotCSAqIENhbGN1bGF0ZSBudW1iZXIgb2YgcGFn ZXMgbmVlZGVkIGZvciAybmQgbGV2ZWwgYWRkcmVzaW5nOgotCSAqLwotCWludCBuX2x2bDJfZ3Jl ZnMgPSAobmVudHMvUkVGU19QRVJfUEFHRSArCi0JCQkgICAoKG5lbnRzICUgUkVGU19QRVJfUEFH RSkgPyAxIDogMCkpOwotCi0Jc3RydWN0IHhlbl9zaGFyZWRfcGFnZXNfaW5mbyAqc2hfcGFnZXNf aW5mbzsKLQlpbnQgaTsKLQotCWx2bDNfdGFibGUgPSAoZ3JhbnRfcmVmX3QgKilfX2dldF9mcmVl X3BhZ2VzKEdGUF9LRVJORUwsIDEpOwotCWx2bDJfdGFibGUgPSAoZ3JhbnRfcmVmX3QgKilfX2dl dF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIG5fbHZsMl9ncmVmcyk7Ci0KLQlzaF9wYWdlc19pbmZv ID0ga21hbGxvYyhzaXplb2YoKnNoX3BhZ2VzX2luZm8pLCBHRlBfS0VSTkVMKTsKLQotCWlmICgh c2hfcGFnZXNfaW5mbykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkqcmVmc19pbmZvID0gKHZvaWQg KilzaF9wYWdlc19pbmZvOwotCi0JLyogc2hhcmUgZGF0YSBwYWdlcyBpbiByZWFkb25seSBtb2Rl IGZvciBzZWN1cml0eSAqLwotCWZvciAoaSA9IDA7IGkgPCBuZW50czsgaSsrKSB7Ci0JCWx2bDJf dGFibGVbaV0gPSBnbnR0YWJfZ3JhbnRfZm9yZWlnbl9hY2Nlc3MoZG9taWQsCi0JCQkJCXBmbl90 b19tZm4ocGFnZV90b19wZm4ocGFnZXNbaV0pKSwKLQkJCQkJdHJ1ZSAvKiByZWFkIG9ubHkgKi8p OwotCQlpZiAobHZsMl90YWJsZVtpXSA9PSAtRU5PU1BDKSB7Ci0JCQlkZXZfZXJyKGh5X2Rydl9w cml2LT5kZXYsCi0JCQkJIk5vIG1vcmUgc3BhY2UgbGVmdCBpbiBncmFudCB0YWJsZVxuIik7Ci0K LQkJCS8qIFVuc2hhcmUgYWxsIGFscmVhZHkgc2hhcmVkIHBhZ2VzIGZvciBsdmwyICovCi0JCQl3 aGlsZSAoaS0tKSB7Ci0JCQkJZ250dGFiX2VuZF9mb3JlaWduX2FjY2Vzc19yZWYobHZsMl90YWJs ZVtpXSwgMCk7Ci0JCQkJZ250dGFiX2ZyZWVfZ3JhbnRfcmVmZXJlbmNlKGx2bDJfdGFibGVbaV0p OwotCQkJfQotCQkJZ290byBlcnJfY2xlYW51cDsKLQkJfQotCX0KLQotCS8qIFNoYXJlIDJuZCBs ZXZlbCBhZGRyZXNzaW5nIHBhZ2VzIGluIHJlYWRvbmx5IG1vZGUqLwotCWZvciAoaSA9IDA7IGkg PCBuX2x2bDJfZ3JlZnM7IGkrKykgewotCQlsdmwzX3RhYmxlW2ldID0gZ250dGFiX2dyYW50X2Zv cmVpZ25fYWNjZXNzKGRvbWlkLAotCQkJCQl2aXJ0X3RvX21mbigKLQkJCQkJKHVuc2lnbmVkIGxv bmcpbHZsMl90YWJsZStpKlBBR0VfU0laRSksCi0JCQkJCXRydWUpOwotCi0JCWlmIChsdmwzX3Rh YmxlW2ldID09IC1FTk9TUEMpIHsKLQkJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKLQkJCQki Tm8gbW9yZSBzcGFjZSBsZWZ0IGluIGdyYW50IHRhYmxlXG4iKTsKLQotCQkJLyogVW5zaGFyZSBh bGwgYWxyZWFkeSBzaGFyZWQgcGFnZXMgZm9yIGx2bDMgKi8KLQkJCXdoaWxlIChpLS0pIHsKLQkJ CQlnbnR0YWJfZW5kX2ZvcmVpZ25fYWNjZXNzX3JlZihsdmwzX3RhYmxlW2ldLCAxKTsKLQkJCQln bnR0YWJfZnJlZV9ncmFudF9yZWZlcmVuY2UobHZsM190YWJsZVtpXSk7Ci0JCQl9Ci0KLQkJCS8q IFVuc2hhcmUgYWxsIHBhZ2VzIGZvciBsdmwyICovCi0JCQl3aGlsZSAobmVudHMtLSkgewotCQkJ CWdudHRhYl9lbmRfZm9yZWlnbl9hY2Nlc3NfcmVmKAotCQkJCQkJCWx2bDJfdGFibGVbbmVudHNd LCAwKTsKLQkJCQlnbnR0YWJfZnJlZV9ncmFudF9yZWZlcmVuY2UobHZsMl90YWJsZVtuZW50c10p OwotCQkJfQotCi0JCQlnb3RvIGVycl9jbGVhbnVwOwotCQl9Ci0JfQotCi0JLyogU2hhcmUgbHZs M190YWJsZSBpbiByZWFkb25seSBtb2RlKi8KLQlsdmwzX2dyZWYgPSBnbnR0YWJfZ3JhbnRfZm9y ZWlnbl9hY2Nlc3MoZG9taWQsCi0JCQl2aXJ0X3RvX21mbigodW5zaWduZWQgbG9uZylsdmwzX3Rh YmxlKSwKLQkJCXRydWUpOwotCi0JaWYgKGx2bDNfZ3JlZiA9PSAtRU5PU1BDKSB7Ci0JCWRldl9l cnIoaHlfZHJ2X3ByaXYtPmRldiwKLQkJCSJObyBtb3JlIHNwYWNlIGxlZnQgaW4gZ3JhbnQgdGFi bGVcbiIpOwotCi0JCS8qIFVuc2hhcmUgYWxsIHBhZ2VzIGZvciBsdmwzICovCi0JCXdoaWxlIChp LS0pIHsKLQkJCWdudHRhYl9lbmRfZm9yZWlnbl9hY2Nlc3NfcmVmKGx2bDNfdGFibGVbaV0sIDEp OwotCQkJZ250dGFiX2ZyZWVfZ3JhbnRfcmVmZXJlbmNlKGx2bDNfdGFibGVbaV0pOwotCQl9Ci0K LQkJLyogVW5zaGFyZSBhbGwgcGFnZXMgZm9yIGx2bDIgKi8KLQkJd2hpbGUgKG5lbnRzLS0pIHsK LQkJCWdudHRhYl9lbmRfZm9yZWlnbl9hY2Nlc3NfcmVmKGx2bDJfdGFibGVbbmVudHNdLCAwKTsK LQkJCWdudHRhYl9mcmVlX2dyYW50X3JlZmVyZW5jZShsdmwyX3RhYmxlW25lbnRzXSk7Ci0JCX0K LQotCQlnb3RvIGVycl9jbGVhbnVwOwotCX0KLQotCS8qIFN0b3JlIGx2bDNfdGFibGUgcGFnZSB0 byBiZSBmcmVlZCBsYXRlciAqLwotCXNoX3BhZ2VzX2luZm8tPmx2bDNfdGFibGUgPSBsdmwzX3Rh YmxlOwotCi0JLyogU3RvcmUgbHZsMl90YWJsZSBwYWdlcyB0byBiZSBmcmVlZCBsYXRlciAqLwot CXNoX3BhZ2VzX2luZm8tPmx2bDJfdGFibGUgPSBsdmwyX3RhYmxlOwotCi0KLQkvKiBTdG9yZSBl eHBvcnRlZCBwYWdlcyByZWZpZCB0byBiZSB1bnNoYXJlZCBsYXRlciAqLwotCXNoX3BhZ2VzX2lu Zm8tPmx2bDNfZ3JlZiA9IGx2bDNfZ3JlZjsKLQotCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwg IiVzIGV4aXRcbiIsIF9fZnVuY19fKTsKLQlyZXR1cm4gbHZsM19ncmVmOwotCi1lcnJfY2xlYW51 cDoKLQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWx2bDJfdGFibGUsIG5fbHZsMl9ncmVmcyk7 Ci0JZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylsdmwzX3RhYmxlLCAxKTsKLQotCXJldHVybiAt RU5PU1BDOwotfQotCi1pbnQgeGVuX2JlX3Vuc2hhcmVfcGFnZXModm9pZCAqKnJlZnNfaW5mbywg aW50IG5lbnRzKQotewotCXN0cnVjdCB4ZW5fc2hhcmVkX3BhZ2VzX2luZm8gKnNoX3BhZ2VzX2lu Zm87Ci0JaW50IG5fbHZsMl9ncmVmcyA9IChuZW50cy9SRUZTX1BFUl9QQUdFICsKLQkJCSAgICAo KG5lbnRzICUgUkVGU19QRVJfUEFHRSkgPyAxIDogMCkpOwotCWludCBpOwotCi0JZGV2X2RiZyho eV9kcnZfcHJpdi0+ZGV2LCAiJXMgZW50cnlcbiIsIF9fZnVuY19fKTsKLQlzaF9wYWdlc19pbmZv ID0gKHN0cnVjdCB4ZW5fc2hhcmVkX3BhZ2VzX2luZm8gKikoKnJlZnNfaW5mbyk7Ci0KLQlpZiAo c2hfcGFnZXNfaW5mby0+bHZsM190YWJsZSA9PSBOVUxMIHx8Ci0JICAgIHNoX3BhZ2VzX2luZm8t Pmx2bDJfdGFibGUgPT0gIE5VTEwgfHwKLQkgICAgc2hfcGFnZXNfaW5mby0+bHZsM19ncmVmID09 IC0xKSB7Ci0JCWRldl93YXJuKGh5X2Rydl9wcml2LT5kZXYsCi0JCQkgImdyZWYgdGFibGUgZm9y IGh5cGVyX2RtYWJ1ZiBhbHJlYWR5IGNsZWFuZWQgdXBcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0K LQkvKiBFbmQgZm9yZWlnbiBhY2Nlc3MgZm9yIGRhdGEgcGFnZXMsIGJ1dCBkbyBub3QgZnJlZSB0 aGVtICovCi0JZm9yIChpID0gMDsgaSA8IG5lbnRzOyBpKyspIHsKLQkJaWYgKGdudHRhYl9xdWVy eV9mb3JlaWduX2FjY2VzcyhzaF9wYWdlc19pbmZvLT5sdmwyX3RhYmxlW2ldKSkKLQkJCWRldl93 YXJuKGh5X2Rydl9wcml2LT5kZXYsICJyZWZpZCBub3Qgc2hhcmVkICEhXG4iKTsKLQotCQlnbnR0 YWJfZW5kX2ZvcmVpZ25fYWNjZXNzX3JlZihzaF9wYWdlc19pbmZvLT5sdmwyX3RhYmxlW2ldLCAw KTsKLQkJZ250dGFiX2ZyZWVfZ3JhbnRfcmVmZXJlbmNlKHNoX3BhZ2VzX2luZm8tPmx2bDJfdGFi bGVbaV0pOwotCX0KLQotCS8qIEVuZCBmb3JlaWduIGFjY2VzcyBmb3IgMm5kIGxldmVsIGFkZHJl c3NpbmcgcGFnZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbl9sdmwyX2dyZWZzOyBpKyspIHsKLQkJ aWYgKGdudHRhYl9xdWVyeV9mb3JlaWduX2FjY2VzcyhzaF9wYWdlc19pbmZvLT5sdmwzX3RhYmxl W2ldKSkKLQkJCWRldl93YXJuKGh5X2Rydl9wcml2LT5kZXYsICJyZWZpZCBub3Qgc2hhcmVkICEh XG4iKTsKLQotCQlpZiAoIWdudHRhYl9lbmRfZm9yZWlnbl9hY2Nlc3NfcmVmKAotCQkJCQlzaF9w YWdlc19pbmZvLT5sdmwzX3RhYmxlW2ldLCAxKSkKLQkJCWRldl93YXJuKGh5X2Rydl9wcml2LT5k ZXYsICJyZWZpZCBzdGlsbCBpbiB1c2UhISFcbiIpOwotCi0JCWdudHRhYl9mcmVlX2dyYW50X3Jl ZmVyZW5jZShzaF9wYWdlc19pbmZvLT5sdmwzX3RhYmxlW2ldKTsKLQl9Ci0KLQkvKiBFbmQgZm9y ZWlnbiBhY2Nlc3MgZm9yIHRvcCBsZXZlbCBhZGRyZXNzaW5nIHBhZ2UgKi8KLQlpZiAoZ250dGFi X3F1ZXJ5X2ZvcmVpZ25fYWNjZXNzKHNoX3BhZ2VzX2luZm8tPmx2bDNfZ3JlZikpCi0JCWRldl93 YXJuKGh5X2Rydl9wcml2LT5kZXYsICJncmVmIG5vdCBzaGFyZWQgISFcbiIpOwotCi0JZ250dGFi X2VuZF9mb3JlaWduX2FjY2Vzc19yZWYoc2hfcGFnZXNfaW5mby0+bHZsM19ncmVmLCAxKTsKLQln bnR0YWJfZnJlZV9ncmFudF9yZWZlcmVuY2Uoc2hfcGFnZXNfaW5mby0+bHZsM19ncmVmKTsKLQot CS8qIGZyZWVpbmcgYWxsIHBhZ2VzIHVzZWQgZm9yIDIgbGV2ZWwgYWRkcmVzc2luZyAqLwotCWZy ZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpc2hfcGFnZXNfaW5mby0+bHZsMl90YWJsZSwgbl9sdmwy X2dyZWZzKTsKLQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXNoX3BhZ2VzX2luZm8tPmx2bDNf dGFibGUsIDEpOwotCi0Jc2hfcGFnZXNfaW5mby0+bHZsM19ncmVmID0gLTE7Ci0Jc2hfcGFnZXNf aW5mby0+bHZsMl90YWJsZSA9IE5VTEw7Ci0Jc2hfcGFnZXNfaW5mby0+bHZsM190YWJsZSA9IE5V TEw7Ci0Ja2ZyZWUoc2hfcGFnZXNfaW5mbyk7Ci0Jc2hfcGFnZXNfaW5mbyA9IE5VTEw7Ci0KLQlk ZXZfZGJnKGh5X2Rydl9wcml2LT5kZXYsICIlcyBleGl0XG4iLCBfX2Z1bmNfXyk7Ci0JcmV0dXJu IDA7Ci19Ci0KLS8qIE1hcHMgcHJvdmlkZWQgdG9wIGxldmVsIHJlZiBpZCBhbmQgdGhlbiByZXR1 cm4gYXJyYXkgb2YgcGFnZXMKLSAqIGNvbnRhaW5pbmcgZGF0YSByZWZzLgotICovCi1zdHJ1Y3Qg cGFnZSAqKnhlbl9iZV9tYXBfc2hhcmVkX3BhZ2VzKHVuc2lnbmVkIGxvbmcgbHZsM19ncmVmLCBp bnQgZG9taWQsCi0JCQkJICAgICAgaW50IG5lbnRzLCB2b2lkICoqcmVmc19pbmZvKQotewotCXN0 cnVjdCBwYWdlICpsdmwzX3RhYmxlX3BhZ2U7Ci0Jc3RydWN0IHBhZ2UgKipsdmwyX3RhYmxlX3Bh Z2VzOwotCXN0cnVjdCBwYWdlICoqZGF0YV9wYWdlczsKLQlzdHJ1Y3QgeGVuX3NoYXJlZF9wYWdl c19pbmZvICpzaF9wYWdlc19pbmZvOwotCi0JZ3JhbnRfcmVmX3QgKmx2bDNfdGFibGU7Ci0JZ3Jh bnRfcmVmX3QgKmx2bDJfdGFibGU7Ci0KLQlzdHJ1Y3QgZ250dGFiX21hcF9ncmFudF9yZWYgbHZs M19tYXBfb3BzOwotCXN0cnVjdCBnbnR0YWJfdW5tYXBfZ3JhbnRfcmVmIGx2bDNfdW5tYXBfb3Bz OwotCi0Jc3RydWN0IGdudHRhYl9tYXBfZ3JhbnRfcmVmICpsdmwyX21hcF9vcHM7Ci0Jc3RydWN0 IGdudHRhYl91bm1hcF9ncmFudF9yZWYgKmx2bDJfdW5tYXBfb3BzOwotCi0Jc3RydWN0IGdudHRh Yl9tYXBfZ3JhbnRfcmVmICpkYXRhX21hcF9vcHM7Ci0Jc3RydWN0IGdudHRhYl91bm1hcF9ncmFu dF9yZWYgKmRhdGFfdW5tYXBfb3BzOwotCi0JLyogIyBvZiBncmVmcyBpbiB0aGUgbGFzdCBwYWdl IG9mIGx2bDIgdGFibGUgKi8KLQlpbnQgbmVudHNfbGFzdCA9IChuZW50cyAtIDEpICUgUkVGU19Q RVJfUEFHRSArIDE7Ci0JaW50IG5fbHZsMl9ncmVmcyA9IChuZW50cyAvIFJFRlNfUEVSX1BBR0Up ICsKLQkJCSAgICgobmVudHNfbGFzdCA+IDApID8gMSA6IDApIC0KLQkJCSAgIChuZW50c19sYXN0 ID09IFJFRlNfUEVSX1BBR0UpOwotCWludCBpLCBqLCBrOwotCi0JZGV2X2RiZyhoeV9kcnZfcHJp di0+ZGV2LCAiJXMgZW50cnlcbiIsIF9fZnVuY19fKTsKLQotCXNoX3BhZ2VzX2luZm8gPSBrbWFs bG9jKHNpemVvZigqc2hfcGFnZXNfaW5mbyksIEdGUF9LRVJORUwpOwotCSpyZWZzX2luZm8gPSAo dm9pZCAqKSBzaF9wYWdlc19pbmZvOwotCi0JbHZsMl90YWJsZV9wYWdlcyA9IGtjYWxsb2Mobl9s dmwyX2dyZWZzLCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksCi0JCQkJICAgR0ZQX0tFUk5FTCk7Ci0K LQlkYXRhX3BhZ2VzID0ga2NhbGxvYyhuZW50cywgc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBHRlBf S0VSTkVMKTsKLQotCWx2bDJfbWFwX29wcyA9IGtjYWxsb2Mobl9sdmwyX2dyZWZzLCBzaXplb2Yo Kmx2bDJfbWFwX29wcyksCi0JCQkgICAgICAgR0ZQX0tFUk5FTCk7Ci0KLQlsdmwyX3VubWFwX29w cyA9IGtjYWxsb2Mobl9sdmwyX2dyZWZzLCBzaXplb2YoKmx2bDJfdW5tYXBfb3BzKSwKLQkJCQkg R0ZQX0tFUk5FTCk7Ci0KLQlkYXRhX21hcF9vcHMgPSBrY2FsbG9jKG5lbnRzLCBzaXplb2YoKmRh dGFfbWFwX29wcyksIEdGUF9LRVJORUwpOwotCWRhdGFfdW5tYXBfb3BzID0ga2NhbGxvYyhuZW50 cywgc2l6ZW9mKCpkYXRhX3VubWFwX29wcyksIEdGUF9LRVJORUwpOwotCi0JLyogTWFwIHRvcCBs ZXZlbCBhZGRyZXNzaW5nIHBhZ2UgKi8KLQlpZiAoZ250dGFiX2FsbG9jX3BhZ2VzKDEsICZsdmwz X3RhYmxlX3BhZ2UpKSB7Ci0JCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwgIkNhbm5vdCBhbGxv Y2F0ZSBwYWdlc1xuIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWx2bDNfdGFibGUgPSAoZ3Jh bnRfcmVmX3QgKilwZm5fdG9fa2FkZHIocGFnZV90b19wZm4obHZsM190YWJsZV9wYWdlKSk7Ci0K LQlnbnR0YWJfc2V0X21hcF9vcCgmbHZsM19tYXBfb3BzLCAodW5zaWduZWQgbG9uZylsdmwzX3Rh YmxlLAotCQkJICBHTlRNQVBfaG9zdF9tYXAgfCBHTlRNQVBfcmVhZG9ubHksCi0JCQkgIChncmFu dF9yZWZfdClsdmwzX2dyZWYsIGRvbWlkKTsKLQotCWdudHRhYl9zZXRfdW5tYXBfb3AoJmx2bDNf dW5tYXBfb3BzLCAodW5zaWduZWQgbG9uZylsdmwzX3RhYmxlLAotCQkJICAgIEdOVE1BUF9ob3N0 X21hcCB8IEdOVE1BUF9yZWFkb25seSwgLTEpOwotCi0JaWYgKGdudHRhYl9tYXBfcmVmcygmbHZs M19tYXBfb3BzLCBOVUxMLCAmbHZsM190YWJsZV9wYWdlLCAxKSkgewotCQlkZXZfZXJyKGh5X2Ry dl9wcml2LT5kZXYsCi0JCQkiSFlQRVJWSVNPUiBtYXAgZ3JhbnQgcmVmIGZhaWxlZCIpOwotCQly ZXR1cm4gTlVMTDsKLQl9Ci0KLQlpZiAobHZsM19tYXBfb3BzLnN0YXR1cykgewotCQlkZXZfZXJy KGh5X2Rydl9wcml2LT5kZXYsCi0JCQkiSFlQRVJWSVNPUiBtYXAgZ3JhbnQgcmVmIGZhaWxlZCBz dGF0dXMgPSAlZCIsCi0JCQlsdmwzX21hcF9vcHMuc3RhdHVzKTsKLQotCQlnb3RvIGVycm9yX2Ns ZWFudXBfbHZsMzsKLQl9IGVsc2UgewotCQlsdmwzX3VubWFwX29wcy5oYW5kbGUgPSBsdmwzX21h cF9vcHMuaGFuZGxlOwotCX0KLQotCS8qIE1hcCBhbGwgc2Vjb25kIGxldmVsIHBhZ2VzICovCi0J aWYgKGdudHRhYl9hbGxvY19wYWdlcyhuX2x2bDJfZ3JlZnMsIGx2bDJfdGFibGVfcGFnZXMpKSB7 Ci0JCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwgIkNhbm5vdCBhbGxvY2F0ZSBwYWdlc1xuIik7 Ci0JCWdvdG8gZXJyb3JfY2xlYW51cF9sdmwzOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBuX2x2 bDJfZ3JlZnM7IGkrKykgewotCQlsdmwyX3RhYmxlID0gKGdyYW50X3JlZl90ICopcGZuX3RvX2th ZGRyKAotCQkJCQlwYWdlX3RvX3BmbihsdmwyX3RhYmxlX3BhZ2VzW2ldKSk7Ci0JCWdudHRhYl9z ZXRfbWFwX29wKCZsdmwyX21hcF9vcHNbaV0sCi0JCQkJICAodW5zaWduZWQgbG9uZylsdmwyX3Rh YmxlLCBHTlRNQVBfaG9zdF9tYXAgfAotCQkJCSAgR05UTUFQX3JlYWRvbmx5LAotCQkJCSAgbHZs M190YWJsZVtpXSwgZG9taWQpOwotCQlnbnR0YWJfc2V0X3VubWFwX29wKCZsdmwyX3VubWFwX29w c1tpXSwKLQkJCQkgICAgKHVuc2lnbmVkIGxvbmcpbHZsMl90YWJsZSwgR05UTUFQX2hvc3RfbWFw IHwKLQkJCQkgICAgR05UTUFQX3JlYWRvbmx5LCAtMSk7Ci0JfQotCi0JLyogVW5tYXAgdG9wIGxl dmVsIHBhZ2UsIGFzIGl0IHdvbid0IGJlIG5lZWRlZCBhbnkgbG9uZ2VyICovCi0JaWYgKGdudHRh Yl91bm1hcF9yZWZzKCZsdmwzX3VubWFwX29wcywgTlVMTCwKLQkJCSAgICAgICZsdmwzX3RhYmxl X3BhZ2UsIDEpKSB7Ci0JCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKLQkJCSJ4ZW46IGNhbm5v dCB1bm1hcCB0b3AgbGV2ZWwgcGFnZVxuIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCS8qIE1h cmsgdGhhdCBwYWdlIHdhcyB1bm1hcHBlZCAqLwotCWx2bDNfdW5tYXBfb3BzLmhhbmRsZSA9IC0x OwotCi0JaWYgKGdudHRhYl9tYXBfcmVmcyhsdmwyX21hcF9vcHMsIE5VTEwsCi0JCQkgICAgbHZs Ml90YWJsZV9wYWdlcywgbl9sdmwyX2dyZWZzKSkgewotCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5k ZXYsCi0JCQkiSFlQRVJWSVNPUiBtYXAgZ3JhbnQgcmVmIGZhaWxlZCIpOwotCQlyZXR1cm4gTlVM TDsKLQl9Ci0KLQkvKiBDaGVja3MgaWYgcGFnZXMgd2VyZSBtYXBwZWQgY29ycmVjdGx5ICovCi0J Zm9yIChpID0gMDsgaSA8IG5fbHZsMl9ncmVmczsgaSsrKSB7Ci0JCWlmIChsdmwyX21hcF9vcHNb aV0uc3RhdHVzKSB7Ci0JCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCi0JCQkJIkhZUEVSVklT T1IgbWFwIGdyYW50IHJlZiBmYWlsZWQgc3RhdHVzID0gJWQiLAotCQkJCWx2bDJfbWFwX29wc1tp XS5zdGF0dXMpOwotCQkJZ290byBlcnJvcl9jbGVhbnVwX2x2bDI7Ci0JCX0gZWxzZSB7Ci0JCQls dmwyX3VubWFwX29wc1tpXS5oYW5kbGUgPSBsdmwyX21hcF9vcHNbaV0uaGFuZGxlOwotCQl9Ci0J fQotCi0JaWYgKGdudHRhYl9hbGxvY19wYWdlcyhuZW50cywgZGF0YV9wYWdlcykpIHsKLQkJZGV2 X2VycihoeV9kcnZfcHJpdi0+ZGV2LAotCQkJIkNhbm5vdCBhbGxvY2F0ZSBwYWdlc1xuIik7Ci0J CWdvdG8gZXJyb3JfY2xlYW51cF9sdmwyOwotCX0KLQotCWsgPSAwOwotCi0JZm9yIChpID0gMDsg aSA8IG5fbHZsMl9ncmVmcyAtIDE7IGkrKykgewotCQlsdmwyX3RhYmxlID0gcGZuX3RvX2thZGRy KHBhZ2VfdG9fcGZuKGx2bDJfdGFibGVfcGFnZXNbaV0pKTsKLQkJZm9yIChqID0gMDsgaiA8IFJF RlNfUEVSX1BBR0U7IGorKykgewotCQkJZ250dGFiX3NldF9tYXBfb3AoJmRhdGFfbWFwX29wc1tr XSwKLQkJCQkodW5zaWduZWQgbG9uZylwZm5fdG9fa2FkZHIoCi0JCQkJCQlwYWdlX3RvX3Bmbihk YXRhX3BhZ2VzW2tdKSksCi0JCQkJR05UTUFQX2hvc3RfbWFwIHwgR05UTUFQX3JlYWRvbmx5LAot CQkJCWx2bDJfdGFibGVbal0sIGRvbWlkKTsKLQotCQkJZ250dGFiX3NldF91bm1hcF9vcCgmZGF0 YV91bm1hcF9vcHNba10sCi0JCQkJKHVuc2lnbmVkIGxvbmcpcGZuX3RvX2thZGRyKAotCQkJCQkJ cGFnZV90b19wZm4oZGF0YV9wYWdlc1trXSkpLAotCQkJCUdOVE1BUF9ob3N0X21hcCB8IEdOVE1B UF9yZWFkb25seSwgLTEpOwotCQkJaysrOwotCQl9Ci0JfQotCi0JLyogZm9yIGdyZWZzIGluIHRo ZSBsYXN0IGx2bDIgdGFibGUgcGFnZSAqLwotCWx2bDJfdGFibGUgPSBwZm5fdG9fa2FkZHIocGFn ZV90b19wZm4oCi0JCQkJbHZsMl90YWJsZV9wYWdlc1tuX2x2bDJfZ3JlZnMgLSAxXSkpOwotCi0J Zm9yIChqID0gMDsgaiA8IG5lbnRzX2xhc3Q7IGorKykgewotCQlnbnR0YWJfc2V0X21hcF9vcCgm ZGF0YV9tYXBfb3BzW2tdLAotCQkJKHVuc2lnbmVkIGxvbmcpcGZuX3RvX2thZGRyKHBhZ2VfdG9f cGZuKGRhdGFfcGFnZXNba10pKSwKLQkJCUdOVE1BUF9ob3N0X21hcCB8IEdOVE1BUF9yZWFkb25s eSwKLQkJCWx2bDJfdGFibGVbal0sIGRvbWlkKTsKLQotCQlnbnR0YWJfc2V0X3VubWFwX29wKCZk YXRhX3VubWFwX29wc1trXSwKLQkJCSh1bnNpZ25lZCBsb25nKXBmbl90b19rYWRkcihwYWdlX3Rv X3BmbihkYXRhX3BhZ2VzW2tdKSksCi0JCQlHTlRNQVBfaG9zdF9tYXAgfCBHTlRNQVBfcmVhZG9u bHksIC0xKTsKLQkJaysrOwotCX0KLQotCWlmIChnbnR0YWJfbWFwX3JlZnMoZGF0YV9tYXBfb3Bz LCBOVUxMLAotCQkJICAgIGRhdGFfcGFnZXMsIG5lbnRzKSkgewotCQlkZXZfZXJyKGh5X2Rydl9w cml2LT5kZXYsCi0JCQkiSFlQRVJWSVNPUiBtYXAgZ3JhbnQgcmVmIGZhaWxlZFxuIik7Ci0JCXJl dHVybiBOVUxMOwotCX0KLQotCS8qIHVubWFwcGluZyBsdmwyIHRhYmxlIHBhZ2VzICovCi0JaWYg KGdudHRhYl91bm1hcF9yZWZzKGx2bDJfdW5tYXBfb3BzLAotCQkJICAgICAgTlVMTCwgbHZsMl90 YWJsZV9wYWdlcywKLQkJCSAgICAgIG5fbHZsMl9ncmVmcykpIHsKLQkJZGV2X2VycihoeV9kcnZf cHJpdi0+ZGV2LAotCQkJIkNhbm5vdCB1bm1hcCAybmQgbGV2ZWwgcmVmc1xuIik7Ci0JCXJldHVy biBOVUxMOwotCX0KLQotCS8qIE1hcmsgdGhhdCBwYWdlcyB3ZXJlIHVubWFwcGVkICovCi0JZm9y IChpID0gMDsgaSA8IG5fbHZsMl9ncmVmczsgaSsrKQotCQlsdmwyX3VubWFwX29wc1tpXS5oYW5k bGUgPSAtMTsKLQotCWZvciAoaSA9IDA7IGkgPCBuZW50czsgaSsrKSB7Ci0JCWlmIChkYXRhX21h cF9vcHNbaV0uc3RhdHVzKSB7Ci0JCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCi0JCQkJIkhZ UEVSVklTT1IgbWFwIGdyYW50IHJlZiBmYWlsZWQgc3RhdHVzID0gJWRcbiIsCi0JCQkJZGF0YV9t YXBfb3BzW2ldLnN0YXR1cyk7Ci0JCQlnb3RvIGVycm9yX2NsZWFudXBfZGF0YTsKLQkJfSBlbHNl IHsKLQkJCWRhdGFfdW5tYXBfb3BzW2ldLmhhbmRsZSA9IGRhdGFfbWFwX29wc1tpXS5oYW5kbGU7 Ci0JCX0KLQl9Ci0KLQkvKiBzdG9yZSB0aGVzZSByZWZlcmVuY2VzIGZvciB1bm1hcHBpbmcgaW4g dGhlIGZ1dHVyZSAqLwotCXNoX3BhZ2VzX2luZm8tPnVubWFwX29wcyA9IGRhdGFfdW5tYXBfb3Bz OwotCXNoX3BhZ2VzX2luZm8tPmRhdGFfcGFnZXMgPSBkYXRhX3BhZ2VzOwotCi0JZ250dGFiX2Zy ZWVfcGFnZXMoMSwgJmx2bDNfdGFibGVfcGFnZSk7Ci0JZ250dGFiX2ZyZWVfcGFnZXMobl9sdmwy X2dyZWZzLCBsdmwyX3RhYmxlX3BhZ2VzKTsKLQlrZnJlZShsdmwyX3RhYmxlX3BhZ2VzKTsKLQlr ZnJlZShsdmwyX21hcF9vcHMpOwotCWtmcmVlKGx2bDJfdW5tYXBfb3BzKTsKLQlrZnJlZShkYXRh X21hcF9vcHMpOwotCi0JZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LCAiJXMgZXhpdFxuIiwgX19m dW5jX18pOwotCXJldHVybiBkYXRhX3BhZ2VzOwotCi1lcnJvcl9jbGVhbnVwX2RhdGE6Ci0JZ250 dGFiX3VubWFwX3JlZnMoZGF0YV91bm1hcF9vcHMsIE5VTEwsIGRhdGFfcGFnZXMsCi0JCQkgIG5l bnRzKTsKLQotCWdudHRhYl9mcmVlX3BhZ2VzKG5lbnRzLCBkYXRhX3BhZ2VzKTsKLQotZXJyb3Jf Y2xlYW51cF9sdmwyOgotCWlmIChsdmwyX3VubWFwX29wc1swXS5oYW5kbGUgIT0gLTEpCi0JCWdu dHRhYl91bm1hcF9yZWZzKGx2bDJfdW5tYXBfb3BzLCBOVUxMLAotCQkJCSAgbHZsMl90YWJsZV9w YWdlcywgbl9sdmwyX2dyZWZzKTsKLQlnbnR0YWJfZnJlZV9wYWdlcyhuX2x2bDJfZ3JlZnMsIGx2 bDJfdGFibGVfcGFnZXMpOwotCi1lcnJvcl9jbGVhbnVwX2x2bDM6Ci0JaWYgKGx2bDNfdW5tYXBf b3BzLmhhbmRsZSAhPSAtMSkKLQkJZ250dGFiX3VubWFwX3JlZnMoJmx2bDNfdW5tYXBfb3BzLCBO VUxMLAotCQkJCSAgJmx2bDNfdGFibGVfcGFnZSwgMSk7Ci0JZ250dGFiX2ZyZWVfcGFnZXMoMSwg Jmx2bDNfdGFibGVfcGFnZSk7Ci0KLQlrZnJlZShsdmwyX3RhYmxlX3BhZ2VzKTsKLQlrZnJlZShs dmwyX21hcF9vcHMpOwotCWtmcmVlKGx2bDJfdW5tYXBfb3BzKTsKLQlrZnJlZShkYXRhX21hcF9v cHMpOwotCi0KLQlyZXR1cm4gTlVMTDsKLX0KLQotaW50IHhlbl9iZV91bm1hcF9zaGFyZWRfcGFn ZXModm9pZCAqKnJlZnNfaW5mbywgaW50IG5lbnRzKQotewotCXN0cnVjdCB4ZW5fc2hhcmVkX3Bh Z2VzX2luZm8gKnNoX3BhZ2VzX2luZm87Ci0KLQlkZXZfZGJnKGh5X2Rydl9wcml2LT5kZXYsICIl cyBlbnRyeVxuIiwgX19mdW5jX18pOwotCi0Jc2hfcGFnZXNfaW5mbyA9IChzdHJ1Y3QgeGVuX3No YXJlZF9wYWdlc19pbmZvICopKCpyZWZzX2luZm8pOwotCi0JaWYgKHNoX3BhZ2VzX2luZm8tPnVu bWFwX29wcyA9PSBOVUxMIHx8Ci0JICAgIHNoX3BhZ2VzX2luZm8tPmRhdGFfcGFnZXMgPT0gTlVM TCkgewotCQlkZXZfd2FybihoeV9kcnZfcHJpdi0+ZGV2LAotCQkJICJwYWdlcyBhbHJlYWR5IGNs ZWFuZWQgdXAgb3IgYnVmZmVyIG5vdCBpbXBvcnRlZCB5ZXRcbiIpOwotCQlyZXR1cm4gMDsKLQl9 Ci0KLQlpZiAoZ250dGFiX3VubWFwX3JlZnMoc2hfcGFnZXNfaW5mby0+dW5tYXBfb3BzLCBOVUxM LAotCQkJICAgICAgc2hfcGFnZXNfaW5mby0+ZGF0YV9wYWdlcywgbmVudHMpKSB7Ci0JCWRldl9l cnIoaHlfZHJ2X3ByaXYtPmRldiwgIkNhbm5vdCB1bm1hcCBkYXRhIHBhZ2VzXG4iKTsKLQkJcmV0 dXJuIC1FRkFVTFQ7Ci0JfQotCi0JZ250dGFiX2ZyZWVfcGFnZXMobmVudHMsIHNoX3BhZ2VzX2lu Zm8tPmRhdGFfcGFnZXMpOwotCi0Ja2ZyZWUoc2hfcGFnZXNfaW5mby0+ZGF0YV9wYWdlcyk7Ci0J a2ZyZWUoc2hfcGFnZXNfaW5mby0+dW5tYXBfb3BzKTsKLQlzaF9wYWdlc19pbmZvLT51bm1hcF9v cHMgPSBOVUxMOwotCXNoX3BhZ2VzX2luZm8tPmRhdGFfcGFnZXMgPSBOVUxMOwotCWtmcmVlKHNo X3BhZ2VzX2luZm8pOwotCXNoX3BhZ2VzX2luZm8gPSBOVUxMOwotCi0JZGV2X2RiZyhoeV9kcnZf cHJpdi0+ZGV2LCAiJXMgZXhpdFxuIiwgX19mdW5jX18pOwotCXJldHVybiAwOwotfQpkaWZmIC0t Z2l0IGEvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL3hlbi9oeXBlcl9kbWFidWZfeGVuX3NobS5o IGIvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL3hlbi9oeXBlcl9kbWFidWZfeGVuX3NobS5oCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTIzNmI1Li4wMDAwMDAwCi0tLSBhL2RyaXZl cnMveGVuL2h5cGVyX2RtYWJ1Zi94ZW4vaHlwZXJfZG1hYnVmX3hlbl9zaG0uaAorKysgL2Rldi9u dWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgwqkgMjAxNyBJbnRlbCBDb3Jw b3JhdGlvbgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hh cmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUg YW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICog dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVy Z2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3Bp ZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAq IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMg cGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAotICogcGFyYWdyYXBoKSBzaGFs bCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRo ZQotICogU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElO Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCi0gKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9M REVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us IEFSSVNJTkcKLSAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX QVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKLSAqIElOIFRIRSBTT0ZUV0FSRS4KLSAq Ci0gKi8KLQotI2lmbmRlZiBfX0hZUEVSX0RNQUJVRl9YRU5fU0hNX0hfXwotI2RlZmluZSBfX0hZ UEVSX0RNQUJVRl9YRU5fU0hNX0hfXwotCi0vKiBUaGlzIGNvbGxlY3RzIGFsbCByZWZlcmVuY2Ug bnVtYmVycyBmb3IgMm5kIGxldmVsIHNoYXJlZCBwYWdlcyBhbmQKLSAqIGNyZWF0ZSBhIHRhYmxl IHdpdGggdGhvc2UgaW4gMXN0IGxldmVsIHNoYXJlZCBwYWdlcyB0aGVuIHJldHVybiByZWZlcmVu Y2UKLSAqIG51bWJlcnMgZm9yIHRoaXMgdG9wIGxldmVsIHRhYmxlLgotICovCi1pbnQgeGVuX2Jl X3NoYXJlX3BhZ2VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBkb21pZCwgaW50IG5lbnRzLAot CQkgICAgdm9pZCAqKnJlZnNfaW5mbyk7Ci0KLWludCB4ZW5fYmVfdW5zaGFyZV9wYWdlcyh2b2lk ICoqcmVmc19pbmZvLCBpbnQgbmVudHMpOwotCi0vKiBNYXBzIHByb3ZpZGVkIHRvcCBsZXZlbCBy ZWYgaWQgYW5kIHRoZW4gcmV0dXJuIGFycmF5IG9mIHBhZ2VzIGNvbnRhaW5pbmcKLSAqIGRhdGEg cmVmcy4KLSAqLwotc3RydWN0IHBhZ2UgKip4ZW5fYmVfbWFwX3NoYXJlZF9wYWdlcyh1bnNpZ25l ZCBsb25nIGx2bDNfZ3JlZiwgaW50IGRvbWlkLAotCQkJCSAgICAgIGludCBuZW50cywKLQkJCQkg ICAgICB2b2lkICoqcmVmc19pbmZvKTsKLQotaW50IHhlbl9iZV91bm1hcF9zaGFyZWRfcGFnZXMo dm9pZCAqKnJlZnNfaW5mbywgaW50IG5lbnRzKTsKLQotI2VuZGlmIC8qIF9fSFlQRVJfRE1BQlVG X1hFTl9TSE1fSF9fICovCi0tIAoyLjcuNAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3Rz LnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0 aW5mby94ZW4tZGV2ZWw=