From mboxrd@z Thu Jan 1 00:00:00 1970 From: Anthony PERARD Subject: [PATCH v9 06/17] libxl_qmp: Implementation of libxl__ev_qmp_* Date: Fri, 11 Jan 2019 12:32:16 +0000 Message-ID: <20190111123216.21565-2-anthony.perard@citrix.com> References: <20190111123216.21565-1-anthony.perard@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1ghvz3-0002Dl-Cm for xen-devel@lists.xenproject.org; Fri, 11 Jan 2019 12:32:21 +0000 In-Reply-To: <20190111123216.21565-1-anthony.perard@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Anthony PERARD , Wei Liu , Ian Jackson List-Id: xen-devel@lists.xenproject.org VGhpcyBwYXRjaCBpbXBsZW1lbnQgdGhlIEFQSSBsaWJ4bF9fZXZfcW1wIGRvY3VtZW50ZWQgaW4g dGhlIHByZXZpb3VzCnBhdGNoLCAibGlieGw6IERlc2lnbiBvZiBhbiBhc3luYyBBUEkgdG8gaXNz dWUgUU1QIGNvbW1hbmRzIHRvIFFFTVUiLgoKU2luY2UgdGhpcyBBUEkgaXMgdG8gaW50ZXJhY3Qg d2l0aCBRRU1VIHZpYSB0aGUgUU1QIHByb3RvY29sLCBpdCBhbHNvCmltcGxlbWVudCBhIFFNUCBj bGllbnQuIFRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgUUVNVSBNYWNoaW5lIFByb3RvY29sCihR TVApIGNhbiBiZSBmb3VuZCBpbiB0aGUgUUVNVSByZXBvc2l0b3J5IGF0OgpodHRwczovL2dpdC5x ZW11Lm9yZy8/cD1xZW11LmdpdDthPWJsb2JfcGxhaW47Zj1kb2NzL2ludGVyb3AvcW1wLXNwZWMu dHh0CgpTaWduZWQtb2ZmLWJ5OiBBbnRob255IFBFUkFSRCA8YW50aG9ueS5wZXJhcmRAY2l0cml4 LmNvbT4KQWNrZWQtYnk6IElhbiBKYWNrc29uIDxpYW4uamFja3NvbkBldS5jaXRyaXguY29tPgot LS0KCk5vdGVzOgogICAgdjk6CiAgICAtIGFzc2VydChyPjApIG9mIHRoZSB3cml0ZSByZXR1cm4g dmFsdWUKICAgIC0gYWNrZWQKICAgIAogICAgdjg6CiAgICAtIHVzaW5nIFNUQVRFX0FPX0dDIGV2 ZXJ5d2hlcmUKICAgIC0gY2FsbCBxbXBfZXZfZW5zdXJlX3JlYWRpbmdfd3JpdGluZyBmcm9tIHFt cF9ldl9zZXRfc3RhdGUgaW5zdGVhZCBvZgogICAgICBvdGhlciBwbGFjZXMuIEJ1dCBhZGQgYSBj YWxsIHRvIHFtcF9ldl9lbnN1cmVfcmVhZGluZ193cml0aW5nIHdoZW4gdGhlCiAgICAgIHR4X2J1 ZiBpcyB1cGRhdGVkIChkYXRhIGJlZW4gdHJhbnNtaXR0ZWQgdG8gUUVNVSkKICAgIC0gYXNzZXJ0 IHJldHVybiB2YWx1ZSBvZiB3cml0ZSgpLgogICAgCiAgICAtIGZpeCBpbXBsZW1lbnRhdGlvbiBk b2Mgb2YgcnhfYnVmIChjYW4gYmUgZnJlZSB3aGVuIHVzZWQpCiAgICAtIGZpeCBkb2Mgb2YgcW1w X2V2X2Vuc3VyZV9yZWFkaW5nX3dyaXRpbmcKICAgIAogICAgLSByZW9yZGVyIHFtcF9ldl9wYXJz ZV9lcnJvcl9tZXNzYWdlcyBhbmQgcW1wX2V2X2hhbmRsZV9tZXNzYWdlCiAgICAKICAgIHY3Ogog ICAgLSBNYWtlIHVzZSBvZiB0aGUgbmV3IGBhb2AgZmllbGQgZmlsbGVkIGJ5IHRoZSBjYWxsZXIK ICAgICAgKG5vIG1vcmUgZnJlZSh0eF9idWYpKQogICAgLSBIYXZlIHJld29ya2VkIHRoZSBzdGF0 ZSB0YWJsZSB0byBiZSBtb3JlIGFjY3VyYXRlLCBlYXNpZXIgdG8gcmVhZCBhbmQKICAgICAgd2l0 aCBiZXR0ZXIgZGVzYyBvZiB0aGUgd2FpdGluZ19yZXBseSBzdGF0ZSB3aXRoIHN1Yi1zdGF0ZXMg YXMgd2VsbCBhcwogICAgICBiZXR0ZXIgZGVzY3JpcHRpb24gb2YgdGhlIHN0YXRlIG9mIHRoZSBl dl9mZCBgZWZkYC4KICAgIC0gVGhlcmUgaXMgc3RhdGUgdHJhbnNpdGlvbiBjaGFuZ2VzLCBub3cg d2UgaGF2ZSBjYXAubmVnIC0+CiAgICAgIHdhaXRpbmdfcmVwbHkgKGJlZm9yZSBpdCB3YXMgY2Fw Lm5lZyAtPiBjb25uZWN0ZWQgLT4gd2FpdGluZ19yZXBseSksCiAgICAgIHRoYXQgbWFrZXMgdGhl IGludGVybmFsIGNvbm5lY3RlZCBzdGF0ZSB0aGUgc2FtZSBhcyB0aGUgZXh0ZXJuYWwKICAgICAg Q29ubmVjdGVkIHN0YXRlLgogICAgLSB0aGVyZSBhcmUgbm93IDMgZGlmZmVyZW50IGlkIHZhcmlh YmxlIGluc3RlYWQgb2YgYSBzaW5nbGUgb25lLCB0aGUKICAgICAgY3VycmVudGx5IHNlbnQgb25l IGBpZGAsIHRoZSBuZXh0IG9uZSBgbmV4dF9pZGAsIGFuZCB0aGUgb25lCiAgICAgIGFzc29jaWF0 ZWQgd2l0aCB0aGUgY2FsbGVyJ3MgY29tbWFuZCBgbXNnX2lkYCwgYGlkYCB3aWxsIGFsd2F5cyBi ZSB0aGUKICAgICAgZm9yIHRoZSBuZXh0IGV4cGVjdGVkIG1lc3NhZ2UgZnJvbSBRRU1VLgogICAg LSBxbXBfZXZfZmRfY2FsbGJhY2sgbm93IGNoZWNrIGZvciBQT0xMRVJSLCBhbmQgcmVhZCBhc3lu YyBlcnJvciB3aXRoCiAgICAgIGdldHNvY2tvcHQoU09fRVJST1IpLgogICAgLSBxbXBfZXZfY2Fs bGJhY2tfcmVhZGFibGUgdGFrZXMgY2FyZSBvbmNlIGFnYWluIHRvIGFsc28gcGFyc2UgbWVzc2Fn ZXMuCiAgICAgIEJ1dCBpdCBub3cgZmlyc3QgYXR0ZW1wdCB0byByZWFkIG1lc3NhZ2VzIHRoYXQg d291bGQgYmUgaW4gdGhlIHJ4X2J1ZgogICAgICBiZWZvcmUgcmVhZGluZyBmcm9tIHRoZSBzb2Nr ZXQuCiAgICAtIFNvbWUgZnVuY3Rpb25zIHN0YXRlIGNoYW5nZXMgaGF2ZSBiZWVuIHVwZGF0ZWQs CiAgICAgIHFtcF9ldl9lbnN1cmVfcmVhZGluZ193cml0aW5nLCBxbXBfZXZfc2V0X3N0YXRlLAog ICAgICBxbXBfZXZfY2FsbGJhY2tfd3JpdGFibGUsIHFtcF9ldl9jYWxsYmFja19yZWFkYWJsZQog ICAgLSBIYXZlIGNsZWFuZWQgdXAgcW1wX2V2X2Vuc3VyZV9yZWFkaW5nX3dyaXRpbmcKICAgIC0g SGF2ZSBjbGVhbmVkIHVwIHFtcF9lcnJvcl9jbGFzc190b19saWJ4bF9lcnJvcl9jb2RlLCBhbmQg bG9nIHVua25vd24KICAgICAgZXJyb3IgY2xhc3Nlcy4KICAgIC0gSW4gcW1wX2V2X2NhbGxiYWNr X3JlYWRhYmxlLCB0aGUgc2l6ZSBpbmNyZWFzZSBvZiB0aGUgYnVmZmVyIGhhdmUgYmVlbgogICAg ICByZXdvcmtlZCB0byB1cGRhdGUgYm90aCByeF9idWZfc2l6ZSBhbmQgcnhfYnVmIGF0IHRoZSBz YW1lIHRpbWUsIGFuZAogICAgICByZW1vdmUgdGhlIHVzZSBvZiBtYXgoKQogICAgLSBSZXR1cm4g dmFsdWUgb2YgcW1wX3ByZXBhcmVfY21kIGNhbGxlcyBpcyBjaGVja2VkIGFuZCBsb2dnZWQgb24g ZXJyb3IuCiAgICAtIGNvbW1lbnRzIGluIFJIUyBvZiBzdHJ1Y3QKICAgIC0gTmV3IHFtcF9ldl90 eF9idWZfY2xlYXIgZnVuYwogICAgLSBBZGQgYSBsaW5rIHRvIHRoZSBRTVAgc3BlYy4KICAgIC0g dXBkYXRlIGNhbGxlcnMgb2YgcW1wX3ByZXBhcmVfY21kLCB3aGljaCBkb2Vzbid0IHByb3ZpZGUg dGhlIHN0cmluZwogICAgICBsZW5naHQgYW55bW9yZSBhbHNvIHJlbW92ZSBldi0+bXNnX2xlbgog ICAgLSByZW5hbWUgaW50ZXJuYWwgZmllbGRzIHFtcF9jZmQsIHFtcF9lZmQsIHFtcF9zdGF0ZSB0 byBjZmQsIGVmZCBhbmQKICAgICAgc3RhdGUuCiAgICAtIGNoYW5nZSBxbXBfZXZfY29ubmVjdCB0 byBvbmx5IGFsbG93IGRpc2Nvbm5lY3Qgb24gZW50cnkKICAgIC0gc3F1YXNoIHFtcF9ldl9wcmVw YXJlX2NtZCBpbnRvIGxpYnhsX19ldl9xbXBfc2VuZAogICAgLSByZWR1Y2UgbWF4IHJ4IGJ1ZmZl ciBzaXplIHRvIDFNCiAgICAgIHF1ZXJ5LXZjcHVzIHdpdGggNzEgY3B1cyBhY3RpdmUgeWllbGQg MTQ0ODQgYnl0ZXMuCiAgICAtIHVzZSBKU09OIHRvIHByaW50IGxpYnhsX19qc29uX29iamVjdAog ICAgCiAgICB2Ni4yOgogICAgICAgIEFkZCBkZWZpbml0aW9uIG9mIHRoZSBpbnRlcm5hbCBicm9r ZW4gc3RhdGUKICAgICAgICB1cGRhdGVkIGNvbW1lbnRzIGFib3V0IHN0YXRlcwogICAgdjYuMToK ICAgICAgICBBZGRpbmcgc29tZSBjb21tZW50IGFib3V0IHBvc3NpYmxlIGludGVybmFsIHN0YXRl IGNoYW5nZXMKICAgIAogICAgdjY6CiAgICAgICAgVGhpcyBpcyBhIHNxdWFzaCBvZiA3IGNvbW1p dHMgb24gdGhlIHByZXZpb3VzIHZlcnNpb246CiAgICAgICAgLSBsaWJ4bF9xbXA6IENvbm5lY3Qg dG8gUU1QIHNvY2tldAogICAgICAgIC0gbGlieGxfcW1wOiBJbXBsZW1lbnQgZmQgY2FsbGJhY2sg YW5kIHJlYWQgZGF0YQogICAgICAgIC0gbGlieGxfcW1wOiBQYXJzZSBKU09OIGlucHV0IGZyb20g UU1QCiAgICAgICAgLSBsaWJ4bF9xbXA6IFByZXBhcmUgdGhlIGNvbW1hbmQgdG8gYmUgc2VudAog ICAgICAgIC0gbGlieGxfcW1wOiBIYW5kbGUgd3JpdGUgdG8gUU1QIHNvY2tldAogICAgICAgIC0g bGlieGxfcW1wOiBIYW5kbGUgbWVzc2FnZXMgZnJvbSBRRU1VCiAgICAgICAgLSBsaWJ4bF9xbXA6 IFJlc3BvbmQgdG8gUU1QIGdyZWV0aW5nCiAgICAKICAgICAgICBHZW5lcmFsIHJld29yayBvZiB0 aGUgaW1wbGVtZW50YXRpb24uCiAgICAgICAgQWRkZWQgbW9yZSBjb21tZW50LCB3aXRoIGEgZGVz Y3JpcHRpb24gb2YgYWxsb3dlZCBpbnRlcm5hbCBzdGF0ZXMuCiAgICAgICAgQ2hlY2sgZm9yIEVJ TlBST0dSRVNTIGFmdGVyIGNvbm5lY3QoKS4KICAgICAgICBSZWFkIHVudGlsIEVXT1VMREJMT0NL LgogICAgICAgIEhhbmRsZSBFV09VTERCTE9DSyBvbiB3cml0ZSBhbmQgc2VuZG1zZy4KICAgICAg ICBVc2luZyBtZW1tZW0gaW5zdGVhZCBvZiBzdHJzdHIuCiAgICAgICAgVXNpbmcgbWVtbW92ZSBp bnN0ZWFkIG9mIGhhdmluZyBhbiBvZmZzZXQgaW4gcnhfYnVmLgogICAgICAgIFJld29yayBidWZm ZXIgYWxsb2NhdGlvbgogICAgICAgIERvbid0IGZlZWQgXHIgaW50byBqc29uIHBhcnNlciBhbnlt b3JlCiAgICAgICAgQWRkIGEgY2hlY2sgZm9yIGEgbWF4aW11bSBSWCBidWZmZXIgc2l6ZQogICAg ICAgIEFkZGVkIG1vcmUgZXJyb3IgbWVzc2FnZXMKICAgICAgICBOZXcgZXJyb3IgY29kZSBFUlJP Ul9QUk9UT0NPTF9FUlJPUl9RTVAKICAgICAgICBSZXdyaXRlIGNvbnZlcnNpb24gb2YgUU1QIEVy cm9yQ2xhc3MgdG8gbGlieGxfZXJyb3IgY29kZQogICAgICAgIEFkZGVkIGhlbHBlcnM6IHFtcF9l dl9lbnN1cmVfcmVhZGluZ193cml0aW5nLCBxbXBfZXZfc2V0X3N0YXRlCiAgICAgICAgU3BsaXQg c29tZSBmdW5jdGlvbnMsIHNxdWFzaCBvdGhlcnMKICAgICAgICBBZGRlZCBldi0+bXNnKiB0byBz dG9yZSBnZW5lcmF0ZWQgdXNlciBjb21tYW5kIGFzIHR4X2J1ZiBpcyB1c2VkIGR1cmluZwogICAg ICAgICAgICBjb25uZWN0aW9uIChmb3IgcW1wX2NhcGFiaWxpdGllcykKICAgICAgICBSZW1vdmUg cW1wX3N0YXRlX2dyZWV0aW5nCiAgICAgICAgQWRkZWQgcW1wX3N0YXRlX3dhaXRpbmdfcmVwbHkK ICAgIAogICAgdjU6CiAgICAgICAgbml0cwogICAgICAgIHVzZSBhIGRlZmluZSBpbnN0ZWFkIG9m IGEgc3RhdGljIGludCBmb3IgUU1QX0NBUEFCSUxJVFlfTkVHT0NJQVRJT05fTVNHSUQKICAgICAg ICB1c2UgYSBzd2l0Y2ggaW4gcW1wX2V2X2NhbGxiYWNrX3dyaXRhYmxlIHRvIGNoZWNrIHFtcF9z dGF0ZQogICAgICAgIEFkZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBkaWZmZXJlbnQgdmFsdWUgb2Yg bGlieGxfX3FtcF9zdGF0ZSBlbnVtLgogICAgICAgIHNvbWUgY2xlYW51cAogICAgICAgIHJlbW92 ZSByZWFkIGxvb3AgdGhhdCBvbmx5IGhhbmRsZWQgRUlOVFIsIHNpbXBseSByZXR1cm4KICAgICAg ICBpbml0aWFsaXplIGxlbiBhbmQgcyBhdCBkZWNsYXJhdGlvbiB0aW1lCiAgICAgICAgcmVtb3Zl IG9sZCBjb21tZW50CiAgICAgICAgcmVuYW1lIGJ1Zl9mZCB0byBzZW5kX2ZkCiAgICAgICAgQWRk aW5nIGRlZmF1bHQ6YWJvcnQoKSBpbiBxbXBfZXZfaGFuZGxlX21lc3NhZ2UuCiAgICAKICAgIHY0 OgogICAgICAgIHJlbW92ZSB1c2Ugb2YgYSBsaW5rZWQgbGlzdCBvZiByZWNlaXZlIGJ1ZmZlciwg YW5kIHVzZSByZWFsbG9jIGluc3RlYWQuCiAgICAgICAgc2ltcGxpZmljYXRpb24gb2YgdGhlIHBh dGNoIGR1ZSB0byB1c2Ugb2YgYSBzaW5nbGUgYWxsb2NhdGVkIHNwYWNlIGZvciB0aGUKICAgICAg ICByZWNlaXZlIGJ1ZmZlci4KCiB0b29scy9saWJ4bC9saWJ4bF9pbnRlcm5hbC5oIHwgIDM0ICsr CiB0b29scy9saWJ4bC9saWJ4bF9xbXAuYyAgICAgIHwgNzM5ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCiB0b29scy9saWJ4bC9saWJ4bF90eXBlcy5pZGwgIHwgICA2ICsKIDMg ZmlsZXMgY2hhbmdlZCwgNzc5IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS90b29scy9saWJ4 bC9saWJ4bF9pbnRlcm5hbC5oIGIvdG9vbHMvbGlieGwvbGlieGxfaW50ZXJuYWwuaAppbmRleCBm YWRhZmE1ZjExLi5iZTE4ZDRmMzQxIDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF9pbnRl cm5hbC5oCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX2ludGVybmFsLmgKQEAgLTQxOCw2ICs0MTgs MTkgQEAgX2hpZGRlbiBpbnQgbGlieGxfX2V2X3FtcF9zZW5kKGxpYnhsX19nYyAqZ2MsIGxpYnhs X19ldl9xbXAgKmV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg KmNtZCwgbGlieGxfX2pzb25fb2JqZWN0ICphcmdzKTsKIF9oaWRkZW4gdm9pZCBsaWJ4bF9fZXZf cW1wX2Rpc3Bvc2UobGlieGxfX2djICpnYywgbGlieGxfX2V2X3FtcCAqZXYpOwogCit0eXBlZGVm IGVudW0geworICAgIC8qIGluaXRpYWwgc3RhdGUgKi8KKyAgICBxbXBfc3RhdGVfZGlzY29ubmVj dGVkID0gMSwKKyAgICAvKiBjb25uZWN0ZWQgdG8gUU1QIHNvY2tldCwgd2FpdGluZyBmb3IgZ3Jl ZXRpbmcgbWVzc2FnZSAqLworICAgIHFtcF9zdGF0ZV9jb25uZWN0aW5nLAorICAgIC8qIHFtcF9j YXBhYmlsaXRpZXMgY29tbWFuZCBzZW50LCB3YWl0aW5nIGZvciByZXBseSAqLworICAgIHFtcF9z dGF0ZV9jYXBhYmlsaXR5X25lZ290aWF0aW9uLAorICAgIC8qIHNlbmRpbmcgdXNlcidzIGNtZCBh bmQgd2FpdGluZyBmb3IgcmVwbHkgKi8KKyAgICBxbXBfc3RhdGVfd2FpdGluZ19yZXBseSwKKyAg ICAvKiByZWFkeSB0byBzZW5kIGNvbW1hbmRzICovCisgICAgcW1wX3N0YXRlX2Nvbm5lY3RlZCwK K30gbGlieGxfX3FtcF9zdGF0ZTsKKwogc3RydWN0IGxpYnhsX19ldl9xbXAgewogICAgIC8qIGNh bGxlciBzaG91bGQgaW5jbHVkZSB0aGlzIGluIHRoZWlyIG93biBzdHJ1Y3QgKi8KICAgICAvKiBj YWxsZXIgbXVzdCBmaWxsIHRoZXNlIGluLCBhbmQgdGhleSBtdXN0IGFsbCByZW1haW4gdmFsaWQg Ki8KQEAgLTQyNSw2ICs0MzgsMjcgQEAgc3RydWN0IGxpYnhsX19ldl9xbXAgewogICAgIGxpYnhs X2RvbWlkIGRvbWlkOwogICAgIGxpYnhsX19ldl9xbXBfY2FsbGJhY2sgKmNhbGxiYWNrOwogICAg IGludCBwYXlsb2FkX2ZkOyAvKiBzZXQgdG8gc2VuZCBhIGZkIHdpdGggdGhlIGNvbW1hbmQsIC0x IG90aGVyd2lzZSAqLworCisgICAgLyoKKyAgICAgKiByZW1haW5pbmcgZmllbGRzIGFyZSBwcml2 YXRlIHRvIGxpYnhsX2V2X3FtcF8qCisgICAgICovCisKKyAgICBsaWJ4bF9fY2FyZWZkICpjZmQ7 CisgICAgbGlieGxfX2V2X2ZkIGVmZDsKKyAgICBsaWJ4bF9fcW1wX3N0YXRlIHN0YXRlOworICAg IGludCBpZDsKKyAgICBpbnQgbmV4dF9pZDsgICAgICAgIC8qIG5leHQgaWQgdG8gdXNlICovCisg ICAgLyogcmVjZWl2ZSBidWZmZXIgKi8KKyAgICBjaGFyICpyeF9idWY7CisgICAgc2l6ZV90IHJ4 X2J1Zl9zaXplOyAvKiBjdXJyZW50IGFsbG9jYXRlZCBzaXplICovCisgICAgc2l6ZV90IHJ4X2J1 Zl91c2VkOyAvKiBhY3R1YWwgZGF0YSBpbiB0aGUgYnVmZmVyICovCisgICAgLyogc2VuZGluZyBi dWZmZXIgKi8KKyAgICBjaGFyICp0eF9idWY7CisgICAgc2l6ZV90IHR4X2J1Zl9sZW47ICAvKiB0 eF9idWYgc2l6ZSAqLworICAgIHNpemVfdCB0eF9idWZfb2ZmOyAgLyogYWxyZWFkeSBzZW50ICov CisgICAgLyogVGhlIG1lc3NhZ2UgdG8gc2VuZCB3aGVuIHJlYWR5ICovCisgICAgY2hhciAqbXNn OworICAgIGludCBtc2dfaWQ7CiB9OwogCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhs X3FtcC5jIGIvdG9vbHMvbGlieGwvbGlieGxfcW1wLmMKaW5kZXggNzNmMjIwMmI0Zi4uYjVjZTM0 OWRhZCAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfcW1wLmMKKysrIGIvdG9vbHMvbGli eGwvbGlieGxfcW1wLmMKQEAgLTc1LDExICs3NSwxOCBAQAogIyAgZGVmaW5lIERFQlVHX1JFUE9S VF9SRUNFSVZFRChkb20sIGJ1ZiwgbGVuKSAoKHZvaWQpMCkKICNlbmRpZgogCisjaWZkZWYgREVC VUdfUU1QX0NMSUVOVAorIyAgZGVmaW5lIExPR19RTVAoZiwgLi4uKSBMT0dEKERFQlVHLCBldi0+ ZG9taWQsIGYsICMjX19WQV9BUkdTX18pCisjZWxzZQorIyAgZGVmaW5lIExPR19RTVAoZiwgLi4u KQorI2VuZGlmCisKIC8qCiAgKiBRTVAgdHlwZXMgJiBjb25zdGFudAogICovCiAKICNkZWZpbmUg UU1QX1JFQ0VJVkVfQlVGRkVSX1NJWkUgNDA5NgorI2RlZmluZSBRTVBfTUFYX1NJWkVfUlhfQlVG IE1CKDEpCiAjZGVmaW5lIFBDSV9QVF9RREVWX0lEICJwY2ktcHQtJTAyeF8lMDJ4LiUwMXgiCiAK IC8qCkBAIC0xMzA3LDYgKzEzMTQsNzM4IEBAIGludCBsaWJ4bF9fcW1wX2luaXRpYWxpemF0aW9u cyhsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKICAgICByZXR1cm4gcmV0OwogfQogCisv KiAtLS0tLS0tLS0tLS0gSW1wbGVtZW50YXRpb24gb2YgbGlieGxfX2V2X3FtcCAtLS0tLS0tLS0t LS0tLS0tICovCisKKy8qCisgKiBQb3NzaWJsZSBpbnRlcm5hbCBzdGF0ZSBjb21wYXJlZCB0byBx bXBfc3RhdGU6CisgKgorICogcW1wX3N0YXRlICAgICBFeHRlcm5hbCAgIGNmZCAgICBlZmQgICAg IGlkICAgICByeF9idWYqIHR4X2J1ZiogbXNnKgorICogZGlzY29ubmVjdGVkICAgSWRsZSAgICAg ICBOVUxMICAgSWRsZSAgICByZXNldCAgZnJlZSAgICBmcmVlICAgIGZyZWUKKyAqIGNvbm5lY3Rp bmcgICAgIEFjdGl2ZSAgICAgb3BlbiAgIElOICAgICAgcmVzZXQgIHVzZWQgICAgZnJlZSAgICBz ZXQKKyAqIGNhcC5uZWcgICAgICAgIEFjdGl2ZSAgICAgb3BlbiAgIElOfE9VVCAgc2VudCAgIHVz ZWQgICAgY2FwX25lZyBzZXQKKyAqIGNhcC5uZWcgICAgICAgIEFjdGl2ZSAgICAgb3BlbiAgIElO ICAgICAgc2VudCAgIHVzZWQgICAgZnJlZSAgICBzZXQKKyAqIGNvbm5lY3RlZCAgICAgIENvbm5l Y3RlZCAgb3BlbiAgIElOICAgICAgYW55ICAgIHVzZWQgICAgZnJlZSAgICBmcmVlCisgKiB3YWl0 aW5nX3JlcGx5ICBBY3RpdmUgICAgIG9wZW4gICBJTnxPVVQgIHNlbnQgICB1c2VkICAgIGZyZWUg ICAgc2V0CisgKiB3YWl0aW5nX3JlcGx5ICBBY3RpdmUgICAgIG9wZW4gICBJTnxPVVQgIHNlbnQg ICB1c2VkICAgIHVzZXIncyAgZnJlZQorICogd2FpdGluZ19yZXBseSAgQWN0aXZlICAgICBvcGVu ICAgSU4gICAgICBzZW50ICAgdXNlZCAgICBmcmVlICAgIGZyZWUKKyAqIGJyb2tlblsxXSAgICAg IG5vbmVbMl0gICAgYW55ICAgIEFjdGl2ZSAgYW55ICAgIGFueSAgICAgYW55ICAgICBhbnkKKyAq CisgKiBbMV0gV2hlbiBhbiBpbnRlcm5hbCBmdW5jdGlvbiByZXR1cm4gYW4gZXJyb3IsIGl0IGNh biBsZWF2ZSBldl9xbXAgaW4gYQorICogYGJyb2tlbmAgc3RhdGUgYnV0IG9ubHkgaWYgdGhlIGNh bGxlciBpcyBhbm90aGVyIGludGVybmFsIGZ1bmN0aW9uLgorICogVGhhdCBgYnJva2VuYCBuZWVk cyB0byBiZSBjbGVhbmVkIHVwLCBlLmkuIHRyYW5zaXRpb25uZWQgdG8gdGhlCisgKiBgZGlzY29u bmVjdGVkYCBzdGF0ZSwgYmVmb3JlIHRoZSBjb250cm9sIG9mIGV2X3FtcCBpcyByZWxlYXNlZCBv dXRzaWRlcworICogb2YgZXZfcW1wIGltcGxlbWVudGF0aW9uLgorICoKKyAqIFsyXSBUaGlzIGlu dGVybmFsIHN0YXRlIHNob3VsZCBub3QgYmUgdmlzaWJsZSBleHRlcm5hbGx5LCBzZWUgWzFdLgor ICoKKyAqIFBvc3NpYmxlIGJ1ZmZlcnMgc3RhdGVzOgorICogLSByZWNlaXZpbmcgYnVmZmVyOgor ICogICAgICAgICAgICAgICAgICAgICBmcmVlICAgdXNlZAorICogICAgIHJ4X2J1ZiAgICAgICAg ICAgTlVMTCAgIE5VTEwgb3IgYWxsb2NhdGVkCisgKiAgICAgcnhfYnVmX3NpemUgICAgICAwICAg ICAgYWxsb2NhdGlvbiBzaXplIG9mIGByeF9idWZgCisgKiAgICAgcnhfYnVmX3VzZWQgICAgICAw ICAgICAgPD0gcnhfYnVmX3NpemUsIGFjdHVhbCBkYXRhIGluIHRoZSBidWZmZXIKKyAqIC0gdHJh bnNtaXR0aW5nIGJ1ZmZlcjoKKyAqICAgICAgICAgICAgICAgICAgICAgZnJlZSAgIHVzZWQKKyAq ICAgICB0eF9idWYgICAgICAgICAgIE5VTEwgICBjb250YWlucyBkYXRhCisgKiAgICAgdHhfYnVm X2xlbiAgICAgICAwICAgICAgc2l6ZSBvZiBkYXRhCisgKiAgICAgdHhfYnVmX29mZiAgICAgICAw ICAgICAgPD0gdHhfYnVmX2xlbiwgZGF0YSBhbHJlYWR5IHNlbnQKKyAqIC0gcXVldWVkIHVzZXIg Y29tbWFuZDoKKyAqICAgICAgICAgICAgICAgICAgICAgZnJlZSAgc2V0CisgKiAgICAgbXNnICAg ICAgICAgICAgICBOVUxMICBjb250YWlucyBkYXRhCisgKiAgICAgbXNnX2lkICAgICAgICAgICAw ICAgICBpZCBhc3NvY3RpYXRlZCB3aXRoIHRoZSBjb21tYW5kIGluIGBtc2dgCisgKgorICogLSBB bGxvd2VkIGludGVybmFsIHN0YXRlIHRyYW5zaXRpb246CisgKiBkaXNjb25uZWN0ZWQgICAgICAg ICAgICAgICAgICAgICAtPiBjb25uZWN0aW5nCisgKiBjb25uZWN0aW9uICAgICAgICAgICAgICAg ICAgICAgICAtPiBjYXBhYmlsaXR5X25lZ290aWF0aW9uCisgKiBjYXBhYmlsaXR5X25lZ290aWF0 aW9uL2Nvbm5lY3RlZCAtPiB3YWl0aW5nX3JlcGx5CisgKiB3YWl0aW5nX3JlcGx5ICAgICAgICAg ICAgICAgICAgICAtPiBjb25uZWN0ZWQKKyAqIGFueSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+IGJyb2tlbgorICogYnJva2VuICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gZGlz Y29ubmVjdGVkCisgKiBhbnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiBkaXNjb25u ZWN0ZWQKKyAqCisgKiBUaGUgUUVNVSBNYWNoaW5lIFByb3RvY29sIChRTVApIHNwZWNpZmljYXRp b24gY2FuIGJlIGZvdW5kIGluIHRoZSBRRU1VCisgKiByZXBvc2l0b3J5OgorICogaHR0cHM6Ly9n aXQucWVtdS5vcmcvP3A9cWVtdS5naXQ7YT1ibG9iX3BsYWluO2Y9ZG9jcy9pbnRlcm9wL3FtcC1z cGVjLnR4dAorICovCisKKy8qIHByb3RvdHlwZXMgKi8KKworc3RhdGljIHZvaWQgcW1wX2V2X2Zk X2NhbGxiYWNrKGxpYnhsX19lZ2MgKmVnYywgbGlieGxfX2V2X2ZkICpldl9mZCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmQsIHNob3J0IGV2ZW50cywgc2hvcnQgcmV2ZW50 cyk7CitzdGF0aWMgaW50IHFtcF9ldl9jYWxsYmFja193cml0YWJsZShsaWJ4bF9fZ2MgKmdjLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2V2X3FtcCAqZXYsIGlu dCBmZCk7CitzdGF0aWMgaW50IHFtcF9ldl9jYWxsYmFja19yZWFkYWJsZShsaWJ4bF9fZWdjICpl Z2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fZXZfcW1wICpl diwgaW50IGZkKTsKK3N0YXRpYyBpbnQgcW1wX2V2X2dldF9uZXh0X21zZyhsaWJ4bF9fZWdjICpl Z2MsIGxpYnhsX19ldl9xbXAgKmV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp YnhsX19qc29uX29iamVjdCAqKm9fcik7CitzdGF0aWMgaW50IHFtcF9ldl9oYW5kbGVfbWVzc2Fn ZShsaWJ4bF9fZWdjICplZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4 bF9fZXZfcW1wICpldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxp YnhsX19qc29uX29iamVjdCAqcmVzcCk7CisKKy8qIGhlbHBlcnMgKi8KKworc3RhdGljIHZvaWQg cW1wX2V2X2Vuc3VyZV9yZWFkaW5nX3dyaXRpbmcobGlieGxfX2djICpnYywgbGlieGxfX2V2X3Ft cCAqZXYpCisgICAgLyogVXBkYXRlIHRoZSBzdGF0ZSBvZiBgZWZkYCB0byBtYXRjaCB0aGUgcGVy bWl0ZWQgc3RhdGUKKyAgICAgKiBvbiBlbnRyeTogIWRpc2Nvbm5lY3RlZCAqLworeworICAgIHNo b3J0IGV2ZW50cyA9IFBPTExJTjsKKworICAgIGlmIChldi0+dHhfYnVmKQorICAgICAgICBldmVu dHMgfD0gUE9MTE9VVDsKKyAgICBlbHNlIGlmICgoZXYtPnN0YXRlID09IHFtcF9zdGF0ZV93YWl0 aW5nX3JlcGx5KSAmJiBldi0+bXNnKQorICAgICAgICBldmVudHMgfD0gUE9MTE9VVDsKKworICAg IGxpYnhsX19ldl9mZF9tb2RpZnkoZ2MsICZldi0+ZWZkLCBldmVudHMpOworfQorCitzdGF0aWMg dm9pZCBxbXBfZXZfc2V0X3N0YXRlKGxpYnhsX19nYyAqZ2MsIGxpYnhsX19ldl9xbXAgKmV2LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fcW1wX3N0YXRlIG5ld19zdGF0ZSkK KyAgICAvKiBvbiBlbnRyeTogIWJyb2tlbiBhbmQgIWRpc2Nvbm5lY3RlZCAqLworeworICAgIHN3 aXRjaCAobmV3X3N0YXRlKSB7CisgICAgY2FzZSBxbXBfc3RhdGVfZGlzY29ubmVjdGVkOgorICAg ICAgICBicmVhazsKKyAgICBjYXNlIHFtcF9zdGF0ZV9jb25uZWN0aW5nOgorICAgICAgICBhc3Nl cnQoZXYtPnN0YXRlID09IHFtcF9zdGF0ZV9kaXNjb25uZWN0ZWQpOworICAgICAgICBicmVhazsK KyAgICBjYXNlIHFtcF9zdGF0ZV9jYXBhYmlsaXR5X25lZ290aWF0aW9uOgorICAgICAgICBhc3Nl cnQoZXYtPnN0YXRlID09IHFtcF9zdGF0ZV9jb25uZWN0aW5nKTsKKyAgICAgICAgYnJlYWs7Cisg ICAgY2FzZSBxbXBfc3RhdGVfd2FpdGluZ19yZXBseToKKyAgICAgICAgYXNzZXJ0KGV2LT5zdGF0 ZSA9PSBxbXBfc3RhdGVfY2FwYWJpbGl0eV9uZWdvdGlhdGlvbiB8fAorICAgICAgICAgICAgICAg ZXYtPnN0YXRlID09IHFtcF9zdGF0ZV9jb25uZWN0ZWQpOworICAgICAgICBicmVhazsKKyAgICBj YXNlIHFtcF9zdGF0ZV9jb25uZWN0ZWQ6CisgICAgICAgIGFzc2VydChldi0+c3RhdGUgPT0gcW1w X3N0YXRlX3dhaXRpbmdfcmVwbHkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBldi0+ c3RhdGUgPSBuZXdfc3RhdGU7CisKKyAgICBxbXBfZXZfZW5zdXJlX3JlYWRpbmdfd3JpdGluZyhn YywgZXYpOworfQorCitzdGF0aWMgdm9pZCBxbXBfZXZfdHhfYnVmX2NsZWFyKGxpYnhsX19ldl9x bXAgKmV2KQoreworICAgIGV2LT50eF9idWYgPSBOVUxMOworICAgIGV2LT50eF9idWZfbGVuID0g MDsKKyAgICBldi0+dHhfYnVmX29mZiA9IDA7Cit9CisKK3N0YXRpYyBpbnQgcW1wX2Vycm9yX2Ns YXNzX3RvX2xpYnhsX2Vycm9yX2NvZGUobGlieGxfX2djICpnYywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZWNsYXNzKQoreworICAg IGNvbnN0IGxpYnhsX2VudW1fc3RyaW5nX3RhYmxlICp0ID0gbGlieGxfZXJyb3Jfc3RyaW5nX3Rh YmxlOworICAgIGNvbnN0IGNoYXIgc2tpcFtdID0gIlFNUF8iOworICAgIGNvbnN0IHNpemVfdCBz a2lwbCA9IHNpemVvZihza2lwKSAtIDE7CisKKyAgICAvKiBjb21wYXJlICJRTVBfR0VORVJJQ19F UlJPUiIgZnJvbSBsaWJ4bF9lcnJvciB0byAiR2VuZXJpY0Vycm9yIgorICAgICAqIGdlbmVyYXRl ZCBieSB0aGUgUU1QIHNlcnZlciAqLworCisgICAgZm9yICg7IHQtPnM7IHQrKykgeworICAgICAg ICAgICAgY29uc3QgY2hhciAqcyA9IGVjbGFzczsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNl ID0gdC0+czsKKyAgICAgICAgaWYgKHN0cm5jYXNlY21wKHQtPnMsIHNraXAsIHNraXBsKSkKKyAg ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBzZSArPSBza2lwbDsKKyAgICAgICAgd2hpbGUg KCpzICYmICpzZSkgeworICAgICAgICAgICAgLyogc2tpcCB1bmRlcnNjb3JlcyAqLworICAgICAg ICAgICAgaWYgKCpzZSA9PSAnXycpIHsKKyAgICAgICAgICAgICAgICBzZSsrOworICAgICAgICAg ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRvbG93ZXIo KnMpICE9IHRvbG93ZXIoKnNlKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg IHMrKywgc2UrKzsKKyAgICAgICAgfQorICAgICAgICBpZiAoISpzICYmICEqc2UpCisgICAgICAg ICAgICByZXR1cm4gdC0+djsKKyAgICB9CisKKyAgICBMT0coRVJST1IsICJVbmtub3duIFFNUCBl cnJvciBjbGFzcyAnJXMnIiwgZWNsYXNzKTsKKyAgICByZXR1cm4gRVJST1JfVU5LTk9XTl9RTVBf RVJST1I7Cit9CisKKy8qIFNldHVwIGNvbm5lY3Rpb24gKi8KKworc3RhdGljIGludCBxbXBfZXZf Y29ubmVjdChsaWJ4bF9fZ2MgKmdjLCBsaWJ4bF9fZXZfcW1wICpldikKKyAgICAvKiBkaXNjb25u ZWN0ZWQgLT4gY29ubmVjdGluZyBidXQgd2l0aCBgbXNnYCBmcmVlCisgICAgICogb24gZXJyb3I6 IGJyb2tlbiAqLworeworICAgIGludCBmZDsKKyAgICBpbnQgcmMsIHI7CisgICAgc3RydWN0IHNv Y2thZGRyX3VuIHVuOworICAgIGNvbnN0IGNoYXIgKnFtcF9zb2NrZXRfcGF0aDsKKworICAgIGFz c2VydChldi0+c3RhdGUgPT0gcW1wX3N0YXRlX2Rpc2Nvbm5lY3RlZCk7CisKKyAgICBxbXBfc29j a2V0X3BhdGggPSBsaWJ4bF9fcWVtdV9xbXBfcGF0aChnYywgZXYtPmRvbWlkKTsKKworICAgIExP R0QoREVCVUcsIGV2LT5kb21pZCwgIkNvbm5lY3RpbmcgdG8gJXMiLCBxbXBfc29ja2V0X3BhdGgp OworCisgICAgbGlieGxfX2NhcmVmZF9iZWdpbigpOworICAgIGZkID0gc29ja2V0KEFGX1VOSVgs IFNPQ0tfU1RSRUFNLCAwKTsKKyAgICBldi0+Y2ZkID0gbGlieGxfX2NhcmVmZF9vcGVuZWQoQ1RY LCBmZCk7CisgICAgaWYgKCFldi0+Y2ZkKSB7CisgICAgICAgIExPR0VEKEVSUk9SLCBldi0+ZG9t aWQsICJzb2NrZXQoKSBmYWlsZWQiKTsKKyAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAg ICBnb3RvIG91dDsKKyAgICB9CisgICAgcmMgPSBsaWJ4bF9mZF9zZXRfbm9uYmxvY2soQ1RYLCBs aWJ4bF9fY2FyZWZkX2ZkKGV2LT5jZmQpLCAxKTsKKyAgICBpZiAocmMpCisgICAgICAgIGdvdG8g b3V0OworCisgICAgcmMgPSBsaWJ4bF9fcHJlcGFyZV9zb2NrYWRkcl91bihnYywgJnVuLCBxbXBf c29ja2V0X3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUU1QIHNv Y2tldCIpOworICAgIGlmIChyYykKKyAgICAgICAgZ290byBvdXQ7CisKKyAgICByID0gY29ubmVj dChsaWJ4bF9fY2FyZWZkX2ZkKGV2LT5jZmQpLAorICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29j a2FkZHIgKikgJnVuLCBzaXplb2YodW4pKTsKKyAgICBpZiAociAmJiBlcnJubyAhPSBFSU5QUk9H UkVTUykgeworICAgICAgICBMT0dFRChFUlJPUiwgZXYtPmRvbWlkLCAiRmFpbGVkIHRvIGNvbm5l Y3QgdG8gUU1QIHNvY2tldCAlcyIsCisgICAgICAgICAgICAgIHFtcF9zb2NrZXRfcGF0aCk7Cisg ICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAg cmMgPSBsaWJ4bF9fZXZfZmRfcmVnaXN0ZXIoZ2MsICZldi0+ZWZkLCBxbXBfZXZfZmRfY2FsbGJh Y2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2NhcmVmZF9mZChldi0+ Y2ZkKSwgUE9MTElOKTsKKyAgICBpZiAocmMpCisgICAgICAgIGdvdG8gb3V0OworCisgICAgcW1w X2V2X3NldF9zdGF0ZShnYywgZXYsIHFtcF9zdGF0ZV9jb25uZWN0aW5nKTsKKworICAgIHJldHVy biAwOworCitvdXQ6CisgICAgcmV0dXJuIHJjOworfQorCisvKiBRTVAgRkQgY2FsbGJhY2tzICov CisKK3N0YXRpYyB2b2lkIHFtcF9ldl9mZF9jYWxsYmFjayhsaWJ4bF9fZWdjICplZ2MsIGxpYnhs X19ldl9mZCAqZXZfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZkLCBz aG9ydCBldmVudHMsIHNob3J0IHJldmVudHMpCisgICAgLyogT24gZW50cnksIGV2X2ZkIGlzIChv ZiBjb3Vyc2UpIEFjdGl2ZS4gIFRoZSBldl9xbXAgbWF5IGJlIGluIGFueQorICAgICAqIHN0YXRl IHdoZXJlIHRoaXMgaXMgcGVybWl0dGVkLiAgcW1wX2V2X2ZkX2NhbGxiYWNrIHdpbGwgZG8gdGhl IHdvcmsKKyAgICAgKiBuZWNlc3NhcnkgdG8gbWFrZSBwcm9ncmVzcywgZGVwZW5kaW5nIG9uIHRo ZSBjdXJyZW50IHN0YXRlLCBhbmQgbWFrZQorICAgICAqIHRoZSBhcHByb3ByaWF0ZSBzdGF0ZSB0 cmFuc2l0aW9ucyBhbmQgY2FsbGJhY2tzLiAgKi8KK3sKKyAgICBsaWJ4bF9fZXZfcW1wICpldiA9 IENPTlRBSU5FUl9PRihldl9mZCwgKmV2LCBlZmQpOworICAgIFNUQVRFX0FPX0dDKGV2LT5hbyk7 CisgICAgaW50IHJjOworCisgICAgaWYgKHJldmVudHMgJiAoUE9MTEhVUHxQT0xMRVJSKSkgewor ICAgICAgICBpbnQgcjsKKyAgICAgICAgaW50IGVycm9yX3ZhbCA9IDA7CisgICAgICAgIHNvY2ts ZW5fdCBvcHRfbGVuID0gc2l6ZW9mKGVycm9yX3ZhbCk7CisKKyAgICAgICAgciA9IGdldHNvY2tv cHQoZmQsIFNPTF9TT0NLRVQsIFNPX0VSUk9SLCAmZXJyb3JfdmFsLCAmb3B0X2xlbik7CisgICAg ICAgIGlmIChyKQorICAgICAgICAgICAgTE9HRUQoRVJST1IsIGV2LT5kb21pZCwgImdldHNvY2tv cHQgZmFpbGVkIik7CisgICAgICAgIGlmICghciAmJiBlcnJvcl92YWwpIHsKKyAgICAgICAgICAg IGVycm5vID0gZXJyb3JfdmFsOworICAgICAgICAgICAgTE9HRUQoRVJST1IsIGV2LT5kb21pZCwg ImVycm9yIG9uIFFNUCBzb2NrZXQiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIExP R0QoRVJST1IsIGV2LT5kb21pZCwKKyAgICAgICAgICAgICAgICAgInJlY2VpdmVkIFBPTExIVVB8 UE9MTEVSUiBmcm9tIFFNUCBzb2NrZXQiKTsKKyAgICAgICAgfQorICAgICAgICByYyA9IEVSUk9S X1BST1RPQ09MX0VSUk9SX1FNUDsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICBp ZiAocmV2ZW50cyAmIH4oUE9MTElOfFBPTExPVVQpKSB7CisgICAgICAgIExPR0QoRVJST1IsIGV2 LT5kb21pZCwKKyAgICAgICAgICAgICAidW5leHBlY3RlZCBwb2xsIGV2ZW50IDB4JXggb24gUU1Q IHNvY2tldCAoZXhwZWN0ZWQgUE9MTElOICIKKyAgICAgICAgICAgICAiYW5kL29yIFBPTExPVVQp IiwKKyAgICAgICAgICAgIHJldmVudHMpOworICAgICAgICByYyA9IEVSUk9SX0ZBSUw7CisgICAg ICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgaWYgKHJldmVudHMgJiBQT0xMT1VUKSB7Cisg ICAgICAgIHJjID0gcW1wX2V2X2NhbGxiYWNrX3dyaXRhYmxlKGdjLCBldiwgZmQpOworICAgICAg ICBpZiAocmMpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIGlmIChyZXZl bnRzICYgUE9MTElOKSB7CisgICAgICAgIHJjID0gcW1wX2V2X2NhbGxiYWNrX3JlYWRhYmxlKGVn YywgZXYsIGZkKTsKKyAgICAgICAgaWYgKHJjIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7 CisgICAgICAgIGlmIChyYyA9PSAxKSB7CisgICAgICAgICAgICAvKiB1c2VyIGNhbGxiYWNrIGhh cyBiZWVuIGNhbGxlZCAqLworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQor CisgICAgcmV0dXJuOworCitlcnJvcjoKKyAgICBhc3NlcnQocmMpOworCisgICAgTE9HRChFUlJP UiwgZXYtPmRvbWlkLAorICAgICAgICAgIkVycm9yIGhhcHBlbmVkIHdpdGggdGhlIFFNUCBjb25u ZWN0aW9uIHRvIFFFTVUiKTsKKworICAgIC8qIE9uIGVycm9yLCBkZWFsbG9jYXRlIGFsbCBwcml2 YXRlIHJlc3NvdXJjZXMgKi8KKyAgICBsaWJ4bF9fZXZfcW1wX2Rpc3Bvc2UoZ2MsIGV2KTsKKwor ICAgIC8qIEFuZCB0ZWxsIGxpYnhsX19ldl9xbXAgdXNlciBhYm91dCB0aGUgZXJyb3IgKi8KKyAg ICBldi0+Y2FsbGJhY2soZWdjLCBldiwgTlVMTCwgcmMpOyAvKiBtdXN0IGJlIGxhc3QgKi8KK30K Kworc3RhdGljIGludCBxbXBfZXZfY2FsbGJhY2tfd3JpdGFibGUobGlieGxfX2djICpnYywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19ldl9xbXAgKmV2LCBpbnQg ZmQpCisgICAgLyogb24gZW50cnk6ICFkaXNjb25uZWN0ZWQKKyAgICAgKiBvbiByZXR1cm4sIG9u ZSBvZiB0aGVzZSBzdGF0ZSB0cmFuc2l0aW9uOgorICAgICAqICAgd2FpdGluZ19yZXBseSAod2l0 aCBtc2cgc2V0KSAtPiB3YWl0aW5nX3JlcGx5ICh3aXRoIG1zZyBmcmVlKQorICAgICAqICAgdHhf YnVmIHNldCAtPiBzYW1lIHN0YXRlIG9yIHR4X2J1ZiBmcmVlCisgICAgICogb24gZXJyb3I6IGJy b2tlbiAqLworeworICAgIGludCByYzsKKyAgICBzc2l6ZV90IHI7CisKKyAgICBpZiAoZXYtPnN0 YXRlID09IHFtcF9zdGF0ZV93YWl0aW5nX3JlcGx5KSB7CisgICAgICAgIGlmIChldi0+bXNnKSB7 CisgICAgICAgICAgICBhc3NlcnQoIWV2LT50eF9idWYpOworICAgICAgICAgICAgZXYtPnR4X2J1 ZiA9IGV2LT5tc2c7CisgICAgICAgICAgICBldi0+dHhfYnVmX2xlbiA9IHN0cmxlbihldi0+bXNn KTsKKyAgICAgICAgICAgIGV2LT50eF9idWZfb2ZmID0gMDsKKyAgICAgICAgICAgIGV2LT5pZCA9 IGV2LT5tc2dfaWQ7CisgICAgICAgICAgICBldi0+bXNnID0gTlVMTDsKKyAgICAgICAgICAgIGV2 LT5tc2dfaWQgPSAwOworICAgICAgICB9CisgICAgfQorCisgICAgYXNzZXJ0KGV2LT50eF9idWYp OworCisgICAgTE9HX1FNUCgic2VuZGluZzogJyUuKnMnIiwgKGludClldi0+dHhfYnVmX2xlbiwg ZXYtPnR4X2J1Zik7CisKKyAgICAvKgorICAgICAqIFdlIHdpbGwgc2VuZCBhIGZpbGUgZGVzY3Jp cHRvciBhc3NvY2lhdGVkIHdpdGggYSBjb21tYW5kIG9uIHRoZQorICAgICAqIGZpcnN0IGJ5dGUg b2YgdGhpcyBjb21tYW5kLgorICAgICAqLworICAgIGlmIChldi0+c3RhdGUgPT0gcW1wX3N0YXRl X3dhaXRpbmdfcmVwbHkgJiYKKyAgICAgICAgZXYtPnBheWxvYWRfZmQgPj0gMCAmJgorICAgICAg ICBldi0+dHhfYnVmX29mZiA9PSAwKSB7CisKKyAgICAgICAgcmMgPSBsaWJ4bF9fc2VuZG1zZ19m ZHMoZ2MsIGZkLCBldi0+dHhfYnVmLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAxLCAmZXYtPnBheWxvYWRfZmQsICJRTVAgc29ja2V0Iik7CisgICAgICAgIC8qIENoZWNrIGZv ciBFV09VTERCTE9DSywgYW5kIHJldHVybiB0byB0cnkgYWdhaW4gbGF0ZXIgKi8KKyAgICAgICAg aWYgKHJjID09IEVSUk9SX05PVF9SRUFEWSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg ICBpZiAocmMpCisgICAgICAgICAgICByZXR1cm4gcmM7CisgICAgICAgIGV2LT50eF9idWZfb2Zm Kys7CisgICAgfQorCisgICAgd2hpbGUgKGV2LT50eF9idWZfb2ZmIDwgZXYtPnR4X2J1Zl9sZW4p IHsKKyAgICAgICAgc3NpemVfdCBtYXhfd3JpdGUgPSBldi0+dHhfYnVmX2xlbiAtIGV2LT50eF9i dWZfb2ZmOworICAgICAgICByID0gd3JpdGUoZmQsIGV2LT50eF9idWYgKyBldi0+dHhfYnVmX29m ZiwgbWF4X3dyaXRlKTsKKyAgICAgICAgaWYgKHIgPCAwKSB7CisgICAgICAgICAgICBpZiAoZXJy bm8gPT0gRUlOVFIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAo ZXJybm8gPT0gRVdPVUxEQkxPQ0spCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICBMT0dFRChFUlJPUiwgZXYtPmRvbWlkLCAiZmFpbGVkIHRvIHdyaXRlIHRvIFFNUCBzb2NrZXQi KTsKKyAgICAgICAgICAgIHJldHVybiBFUlJPUl9GQUlMOworICAgICAgICB9CisgICAgICAgIGFz c2VydChyID4gMCAmJiByIDw9IG1heF93cml0ZSk7CisgICAgICAgIGV2LT50eF9idWZfb2ZmICs9 IHI7CisgICAgfQorCisgICAgaWYgKGV2LT50eF9idWZfb2ZmID09IGV2LT50eF9idWZfbGVuKQor ICAgICAgICBxbXBfZXZfdHhfYnVmX2NsZWFyKGV2KTsKKworICAgIHFtcF9ldl9lbnN1cmVfcmVh ZGluZ193cml0aW5nKGdjLCBldik7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBx bXBfZXZfY2FsbGJhY2tfcmVhZGFibGUobGlieGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2V2X3FtcCAqZXYsIGludCBmZCkKKyAgICAvKgor ICAgICAqIFJldHVybiB2YWx1ZXM6CisgICAgICogICA8IDAgICAgbGlieGwgZXJyb3IgY29kZQor ICAgICAqICAgMCAgICAgIHN1Y2Nlc3MKKyAgICAgKiAgIDEgICAgICBzdWNjZXNzLCBidXQgYSB1 c2VyIGNhbGxiYWNrIGhhcyBiZWVuIGNhbGxlZCwKKyAgICAgKiAgICAgICAgICBgZXZgIHNob3Vs ZCBub3QgYmUgdXNlZCBhbnltb3JlLgorICAgICAqCisgICAgICogVGhpcyBmdW5jdGlvbiB3aWxs IHVwZGF0ZSB0aGUgcnggYnVmZmVyIGFuZCBwb3NzaWJseSB1cGRhdGUKKyAgICAgKiBldi0+c3Rh dGU6CisgICAgICogIGNvbm5lY3RpbmcgICAgICAgICAgICAgLT4gY2FwYWJpbGl0eV9uZWdvdGlh dGlvbgorICAgICAqICBjYXBhYmlsaXR5X25lZ290aWF0aW9uIC0+IHdhaXRpbmdfcmVwbHkKKyAg ICAgKiAgd2FpdGluZ19yZXBseSAgICAgICAgICAtPiBjb25uZWN0ZWQKKyAgICAgKiBvbiBlcnJv cjogYnJva2VuCisgICAgICovCit7CisgICAgU1RBVEVfQU9fR0MoZXYtPmFvKTsKKyAgICBpbnQg cmM7CisgICAgc3NpemVfdCByOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgd2hpbGUgKDEp IHsKKyAgICAgICAgICAgIGxpYnhsX19qc29uX29iamVjdCAqbyA9IE5VTEw7CisKKyAgICAgICAg ICAgIC8qIHBhcnNlIHJ4IGJ1ZmZlciB0byBmaW5kIG9uZSBqc29uIG9iamVjdCAqLworICAgICAg ICAgICAgcmMgPSBxbXBfZXZfZ2V0X25leHRfbXNnKGVnYywgZXYsICZvKTsKKyAgICAgICAgICAg IGlmIChyYyA9PSBFUlJPUl9OT1RGT1VORCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgIGVsc2UgaWYgKHJjKQorICAgICAgICAgICAgICAgIHJldHVybiByYzsKKworICAgICAg ICAgICAgLyogTXVzdCBiZSBsYXN0IGFuZCByZXR1cm4gd2hlbiB0aGUgdXNlciBjYWxsYmFjayBp cyBjYWxsZWQgKi8KKyAgICAgICAgICAgIHJjID0gcW1wX2V2X2hhbmRsZV9tZXNzYWdlKGVnYywg ZXYsIG8pOworICAgICAgICAgICAgaWYgKHJjKQorICAgICAgICAgICAgICAgIC8qIHJldHVybnMg Ym90aCByYyB2YWx1ZXMgLUVSUk9SXyogYW5kIDEgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4g cmM7CisgICAgICAgIH0KKworICAgICAgICAvKiBDaGVjayBpZiB0aGUgYnVmZmVyIHN0aWxsIGhh dmUgc3BhY2UsIG9yIGluY3JlYXNlIHNpemUgKi8KKyAgICAgICAgaWYgKGV2LT5yeF9idWZfc2l6 ZSAtIGV2LT5yeF9idWZfdXNlZCA8IFFNUF9SRUNFSVZFX0JVRkZFUl9TSVpFKSB7CisgICAgICAg ICAgICBzaXplX3QgbmV3c2l6ZSA9IGV2LT5yeF9idWZfc2l6ZSAqIDIgKyBRTVBfUkVDRUlWRV9C VUZGRVJfU0laRTsKKworICAgICAgICAgICAgaWYgKG5ld3NpemUgPiBRTVBfTUFYX1NJWkVfUlhf QlVGKSB7CisgICAgICAgICAgICAgICAgTE9HRChFUlJPUiwgZXYtPmRvbWlkLAorICAgICAgICAg ICAgICAgICAgICAgIlFNUCByZWNlaXZlIGJ1ZmZlciBpcyB0b28gYmlnICglbGQgPiAlbGxkKSIs CisgICAgICAgICAgICAgICAgICAgICBuZXdzaXplLCBRTVBfTUFYX1NJWkVfUlhfQlVGKTsKKyAg ICAgICAgICAgICAgICByZXR1cm4gRVJST1JfQlVGRkVSRlVMTDsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGV2LT5yeF9idWZfc2l6ZSA9IG5ld3NpemU7CisgICAgICAgICAgICBldi0+cnhf YnVmID0gbGlieGxfX3JlYWxsb2MoZ2MsIGV2LT5yeF9idWYsIGV2LT5yeF9idWZfc2l6ZSk7Cisg ICAgICAgIH0KKworICAgICAgICByID0gcmVhZChmZCwgZXYtPnJ4X2J1ZiArIGV2LT5yeF9idWZf dXNlZCwKKyAgICAgICAgICAgICAgICAgZXYtPnJ4X2J1Zl9zaXplIC0gZXYtPnJ4X2J1Zl91c2Vk KTsKKyAgICAgICAgaWYgKHIgPCAwKSB7CisgICAgICAgICAgICBpZiAoZXJybm8gPT0gRUlOVFIp CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoZXJybm8gPT0gRVdP VUxEQkxPQ0spCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBMT0dFRChFUlJP UiwgZXYtPmRvbWlkLCAiZXJyb3IgcmVhZGluZyBRTVAgc29ja2V0Iik7CisgICAgICAgICAgICBy ZXR1cm4gRVJST1JfRkFJTDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyID09IDApIHsKKyAg ICAgICAgICAgIExPR0QoRVJST1IsIGV2LT5kb21pZCwgIlVuZXhwZWN0ZWQgRU9GIG9uIFFNUCBz b2NrZXQiKTsKKyAgICAgICAgICAgIHJldHVybiBFUlJPUl9QUk9UT0NPTF9FUlJPUl9RTVA7Cisg ICAgICAgIH0KKworICAgICAgICBMT0dfUU1QKCJyZWNlaXZlZCAlbGRCOiAnJS4qcyciLCByLAor ICAgICAgICAgICAgICAgIChpbnQpciwgZXYtPnJ4X2J1ZiArIGV2LT5yeF9idWZfdXNlZCk7CisK KyAgICAgICAgZXYtPnJ4X2J1Zl91c2VkICs9IHI7CisgICAgICAgIGFzc2VydChldi0+cnhfYnVm X3VzZWQgPD0gZXYtPnJ4X2J1Zl9zaXplKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwor LyogSGFuZGxlIG1lc3NhZ2VzIHJlY2VpdmVkIGZyb20gUU1QIHNlcnZlciAqLworCitzdGF0aWMg aW50IHFtcF9ldl9nZXRfbmV4dF9tc2cobGlieGxfX2VnYyAqZWdjLCBsaWJ4bF9fZXZfcW1wICpl diwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fanNvbl9vYmplY3QgKipv X3IpCisgICAgLyogRmluZCBhIEpTT04gb2JqZWN0IGFuZCBzdG9yZSBpdCBpbiBvX3IuCisgICAg ICogcmV0dXJuIEVSUk9SX05PVEZPVU5EIGlmIG5vIG9iamVjdCBpcyBmb3VuZC4KKyAgICAgKgor ICAgICAqICFkaXNjb25uZWN0ZWQgLT4gc2FtZSBzdGF0ZSAod2l0aCByeCBidWZmZXIgdXBkYXRl ZCkKKyAgICAgKi8KK3sKKyAgICBTVEFURV9BT19HQyhldi0+YW8pOworICAgIHNpemVfdCBsZW47 CisgICAgY2hhciAqZW5kID0gTlVMTDsKKyAgICBjb25zdCBjaGFyIGVvbVtdID0gIlxyXG4iOwor ICAgIGNvbnN0IHNpemVfdCBlb21sID0gc2l6ZW9mKGVvbSkgLSAxOworICAgIGxpYnhsX19qc29u X29iamVjdCAqbyA9IE5VTEw7CisKKyAgICBpZiAoIWV2LT5yeF9idWZfdXNlZCkKKyAgICAgICAg cmV0dXJuIEVSUk9SX05PVEZPVU5EOworCisgICAgLyogU2VhcmNoIGZvciB0aGUgZW5kIG9mIGEg UU1QIG1lc3NhZ2U6ICJcclxuIiAqLworICAgIGVuZCA9IG1lbW1lbShldi0+cnhfYnVmLCBldi0+ cnhfYnVmX3VzZWQsIGVvbSwgZW9tbCk7CisgICAgaWYgKCFlbmQpCisgICAgICAgIHJldHVybiBF UlJPUl9OT1RGT1VORDsKKyAgICBsZW4gPSAoZW5kIC0gZXYtPnJ4X2J1ZikgKyBlb21sOworCisg ICAgTE9HX1FNUCgicGFyc2luZyAlbHVCOiAnJS4qcyciLCBsZW4sIChpbnQpbGVuLCBldi0+cnhf YnVmKTsKKworICAgIC8qIFJlcGxhY2UgXHIgYnkgXDAgc28gdGhhdCBsaWJ4bF9fanNvbl9wYXJz ZSBjYW4gdXNlIHN0cmxlbiAqLworICAgIGV2LT5yeF9idWZbbGVuIC0gZW9tbF0gPSAnXDAnOwor ICAgIG8gPSBsaWJ4bF9fanNvbl9wYXJzZShnYywgZXYtPnJ4X2J1Zik7CisKKyAgICBpZiAoIW8p IHsKKyAgICAgICAgTE9HRChFUlJPUiwgZXYtPmRvbWlkLCAiUGFyc2UgZXJyb3IiKTsKKyAgICAg ICAgcmV0dXJuIEVSUk9SX1BST1RPQ09MX0VSUk9SX1FNUDsKKyAgICB9CisKKyAgICBldi0+cnhf YnVmX3VzZWQgLT0gbGVuOworICAgIG1lbW1vdmUoZXYtPnJ4X2J1ZiwgZXYtPnJ4X2J1ZiArIGxl biwgZXYtPnJ4X2J1Zl91c2VkKTsKKworICAgIExPR19RTVAoIkpTT04gb2JqZWN0IHJlY2VpdmVk OiAlcyIsIEpTT04obykpOworCisgICAgKm9fciA9IG87CisKKyAgICByZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBxbXBfZXZfcGFyc2VfZXJyb3JfbWVzc2FnZXMobGlieGxfX2VnYyAqZWdjLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2V2X3FtcCAqZXYs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaWJ4bF9fanNv bl9vYmplY3QgKnJlc3ApOworCitzdGF0aWMgaW50IHFtcF9ldl9oYW5kbGVfbWVzc2FnZShsaWJ4 bF9fZWdjICplZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fZXZf cW1wICpldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpYnhsX19q c29uX29iamVjdCAqcmVzcCkKKyAgICAvKgorICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBoYW5k bGUgZXZlcnkgbWVzc2FnZXMgc2VudCBieSB0aGUgUU1QIHNlcnZlci4KKyAgICAgKiBSZXR1cm4g dmFsdWVzOgorICAgICAqICAgPCAwICAgIGxpYnhsIGVycm9yIGNvZGUKKyAgICAgKiAgIDAgICAg ICBzdWNjZXNzCisgICAgICogICAxICAgICAgc3VjY2VzcywgYnV0IGEgdXNlciBjYWxsYmFjayBo YXMgYmVlbiBjYWxsZWQsCisgICAgICogICAgICAgICAgYGV2YCBzaG91bGQgbm90IGJlIHVzZWQg YW55bW9yZS4KKyAgICAgKgorICAgICAqIFBvc3NpYmxlIHN0YXRlIGNoYW5nZXM6CisgICAgICog Y29ubmVjdGluZyAtPiBjYXBhYmlsaXR5X25lZ290aWF0aW9uCisgICAgICogY2FwYWJpbGl0eV9u ZWdvdGlhdGlvbiAtPiB3YWl0aW5nX3JlcGx5CisgICAgICogd2FpdGluZ19yZXBseSAtPiB3YWl0 aW5nX3JlcGx5L2Nvbm5lY3RlZAorICAgICAqCisgICAgICogb24gZXJyb3I6IGJyb2tlbgorICAg ICAqLworeworICAgIFNUQVRFX0FPX0dDKGV2LT5hbyk7CisgICAgaW50IGlkOworICAgIGNoYXIg KmJ1ZjsKKyAgICBpbnQgcmMgPSAwOworICAgIGNvbnN0IGxpYnhsX19qc29uX29iamVjdCAqbzsK KyAgICBjb25zdCBsaWJ4bF9fanNvbl9vYmplY3QgKnJlc3BvbnNlOworICAgIGxpYnhsX19xbXBf bWVzc2FnZV90eXBlIHR5cGUgPSBxbXBfcmVzcG9uc2VfdHlwZShyZXNwKTsKKworICAgIHN3aXRj aCAodHlwZSkgeworICAgIGNhc2UgTElCWExfX1FNUF9NRVNTQUdFX1RZUEVfUU1QOgorICAgICAg ICAvKiBncmVldGluZyBtZXNzYWdlICovCisKKyAgICAgICAgaWYgKGV2LT5zdGF0ZSAhPSBxbXBf c3RhdGVfY29ubmVjdGluZykgeworICAgICAgICAgICAgTE9HRChFUlJPUiwgZXYtPmRvbWlkLAor ICAgICAgICAgICAgICAgICAiVW5leHBlY3RlZCBncmVldGluZyBtZXNzYWdlIHJlY2VpdmVkIik7 CisgICAgICAgICAgICByZXR1cm4gRVJST1JfUFJPVE9DT0xfRVJST1JfUU1QOworICAgICAgICB9 CisKKyAgICAgICAgLyogUHJlcGFyZSBuZXh0IG1lc3NhZ2UgdG8gc2VuZCAqLworICAgICAgICBh c3NlcnQoIWV2LT50eF9idWYpOworICAgICAgICBldi0+aWQgPSBldi0+bmV4dF9pZCsrOworICAg ICAgICBidWYgPSBxbXBfcHJlcGFyZV9jbWQoZ2MsICJxbXBfY2FwYWJpbGl0aWVzIiwgTlVMTCwg ZXYtPmlkKTsKKyAgICAgICAgaWYgKCFidWYpIHsKKyAgICAgICAgICAgIExPR0QoRVJST1IsIGV2 LT5kb21pZCwKKyAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBnZW5lcmF0ZSBxbXBfY2FwYWJp bGl0aWVzIGNvbW1hbmQiKTsKKyAgICAgICAgICAgIHJldHVybiBFUlJPUl9GQUlMOworICAgICAg ICB9CisgICAgICAgIGV2LT50eF9idWYgPSBidWY7CisgICAgICAgIGV2LT50eF9idWZfbGVuID0g c3RybGVuKGJ1Zik7CisgICAgICAgIGV2LT50eF9idWZfb2ZmID0gMDsKKyAgICAgICAgcW1wX2V2 X3NldF9zdGF0ZShnYywgZXYsIHFtcF9zdGF0ZV9jYXBhYmlsaXR5X25lZ290aWF0aW9uKTsKKwor ICAgICAgICByZXR1cm4gMDsKKworICAgIGNhc2UgTElCWExfX1FNUF9NRVNTQUdFX1RZUEVfUkVU VVJOOgorICAgIGNhc2UgTElCWExfX1FNUF9NRVNTQUdFX1RZUEVfRVJST1I6CisgICAgICAgIC8q CisgICAgICAgICAqIFJlcGx5IHRvIGEgY29tbWFuZCAoc3VjY2Vzcy9lcnJvcikgb3Igc2VydmVy IGVycm9yCisgICAgICAgICAqCisgICAgICAgICAqIEluIHRoaXMgY2FzZXMsIHdlIGFyZSBwYXJz aW5nIHR3byBwb3NzaWJsZXMgcmVzcG9uc2VzOgorICAgICAgICAgKiAtIHN1Y2Nlc3M6CisgICAg ICAgICAqIHsgInJldHVybiI6IGpzb24tdmFsdWUsICJpZCI6IGludCB9CisgICAgICAgICAqIC0g ZXJyb3I6CisgICAgICAgICAqIHsgImVycm9yIjogeyAiY2xhc3MiOiBzdHJpbmcsICJkZXNjIjog c3RyaW5nIH0sICJpZCI6IGludCB9CisgICAgICAgICAqLworCisgICAgICAgIG8gPSBsaWJ4bF9f anNvbl9tYXBfZ2V0KCJpZCIsIHJlc3AsIEpTT05fSU5URUdFUik7CisgICAgICAgIGlmICghbykg eworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIElmICJpZCIgaXNuJ3QgcHJlc2VudCwg YW4gZXJyb3Igb2NjdXIgb24gdGhlIHNlcnZlciBiZWZvcmUKKyAgICAgICAgICAgICAqIGl0IGhh cyByZWFkIHRoZSAiaWQiIHByb3ZpZGVkIGJ5IGxpYnhsLgorICAgICAgICAgICAgICoKKyAgICAg ICAgICAgICAqIFdlIGRlbGliZXJhdGVseSBzcXVhc2ggYWxsIGVycm9ycyBpbnRvCisgICAgICAg ICAgICAgKiBFUlJPUl9QUk9UT0NPTF9FUlJPUl9RTVAgYXMgcW1wX2V2X3BhcnNlX2Vycm9yX21l c3NhZ2VzIG1heQorICAgICAgICAgICAgICogYWxzbyByZXR1cm4gRVJST1JfUU1QXyogYnV0IHRo b3NlIGFyZSByZXNlcnZlZCBmb3IgZXJyb3JzCisgICAgICAgICAgICAgKiByZXR1cm4gYnkgdGhl IGNhbGxlcidzIGNvbW1hbmQuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHFtcF9ldl9w YXJzZV9lcnJvcl9tZXNzYWdlcyhlZ2MsIGV2LCByZXNwKTsKKyAgICAgICAgICAgIHJldHVybiBF UlJPUl9QUk9UT0NPTF9FUlJPUl9RTVA7CisgICAgICAgIH0KKworICAgICAgICBpZCA9IGxpYnhs X19qc29uX29iamVjdF9nZXRfaW50ZWdlcihvKTsKKworICAgICAgICBpZiAoaWQgIT0gZXYtPmlk KSB7CisgICAgICAgICAgICBMT0dEKEVSUk9SLCBldi0+ZG9taWQsCisgICAgICAgICAgICAgICAg ICJNZXNzYWdlIGZyb20gUUVNVSB3aXRoIHVuZXhwZWN0ZWQgaWQgJWQ6ICVzIiwKKyAgICAgICAg ICAgICAgICAgaWQsIEpTT04ocmVzcCkpOworICAgICAgICAgICAgcmV0dXJuIEVSUk9SX1BST1RP Q09MX0VSUk9SX1FNUDsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoZXYtPnN0YXRlKSB7 CisgICAgICAgIGNhc2UgcW1wX3N0YXRlX2NhcGFiaWxpdHlfbmVnb3RpYXRpb246CisgICAgICAg ICAgICBpZiAodHlwZSAhPSBMSUJYTF9fUU1QX01FU1NBR0VfVFlQRV9SRVRVUk4pIHsKKyAgICAg ICAgICAgICAgICBMT0dEKEVSUk9SLCBldi0+ZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAi RXJyb3IgZHVyaW5nIGNhcGFiaWxpdHkgbmVnb3RpYXRpb246ICVzIiwKKyAgICAgICAgICAgICAg ICAgICAgIEpTT04ocmVzcCkpOworICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9QUk9UT0NP TF9FUlJPUl9RTVA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBxbXBfZXZfc2V0X3N0YXRl KGdjLCBldiwgcW1wX3N0YXRlX3dhaXRpbmdfcmVwbHkpOworICAgICAgICAgICAgcmV0dXJuIDA7 CisgICAgICAgIGNhc2UgcW1wX3N0YXRlX3dhaXRpbmdfcmVwbHk6CisgICAgICAgICAgICBpZiAo dHlwZSA9PSBMSUJYTF9fUU1QX01FU1NBR0VfVFlQRV9SRVRVUk4pIHsKKyAgICAgICAgICAgICAg ICByZXNwb25zZSA9IGxpYnhsX19qc29uX21hcF9nZXQoInJldHVybiIsIHJlc3AsIEpTT05fQU5Z KTsKKyAgICAgICAgICAgICAgICByYyA9IDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgICAgIC8qIGVycm9yIG1lc3NhZ2UgKi8KKyAgICAgICAgICAgICAgICByZXNwb25zZSA9 IE5VTEw7CisgICAgICAgICAgICAgICAgcmMgPSBxbXBfZXZfcGFyc2VfZXJyb3JfbWVzc2FnZXMo ZWdjLCBldiwgcmVzcCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBxbXBfZXZfc2V0X3N0 YXRlKGdjLCBldiwgcW1wX3N0YXRlX2Nvbm5lY3RlZCk7CisgICAgICAgICAgICBldi0+Y2FsbGJh Y2soZWdjLCBldiwgcmVzcG9uc2UsIHJjKTsgLyogbXVzdCBiZSBsYXN0ICovCisgICAgICAgICAg ICByZXR1cm4gMTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIExPR0QoRVJST1IsIGV2 LT5kb21pZCwgIlVuZXhwZWN0ZWQgbWVzc2FnZTogJXMiLCBKU09OKHJlc3ApKTsKKyAgICAgICAg ICAgIHJldHVybiBFUlJPUl9QUk9UT0NPTF9FUlJPUl9RTVA7CisgICAgICAgIH0KKyAgICAgICAg cmV0dXJuIDA7CisKKyAgICBjYXNlIExJQlhMX19RTVBfTUVTU0FHRV9UWVBFX0VWRU5UOgorICAg ICAgICAvKiBFdmVudHMgYXJlIGlnbm9yZWQgKi8KKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBj YXNlIExJQlhMX19RTVBfTUVTU0FHRV9UWVBFX0lOVkFMSUQ6CisgICAgICAgIExPR0QoRVJST1Is IGV2LT5kb21pZCwgIlVuZXhwZWN0ZWQgbWVzc2FnZSByZWNlaXZlZDogJXMiLAorICAgICAgICAg ICAgIEpTT04ocmVzcCkpOworICAgICAgICByZXR1cm4gRVJST1JfUFJPVE9DT0xfRVJST1JfUU1Q OworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYWJvcnQoKTsKKyAgICB9CisKKyAgICByZXR1cm4g MDsKK30KKworc3RhdGljIGludCBxbXBfZXZfcGFyc2VfZXJyb3JfbWVzc2FnZXMobGlieGxfX2Vn YyAqZWdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2V2 X3FtcCAqZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBs aWJ4bF9fanNvbl9vYmplY3QgKnJlc3ApCisgICAgLyogbm8gc3RhdGUgY2hhbmdlICovCit7Cisg ICAgU1RBVEVfQU9fR0MoZXYtPmFvKTsKKyAgICBpbnQgcmM7CisgICAgY29uc3QgY2hhciAqczsK KyAgICBjb25zdCBsaWJ4bF9fanNvbl9vYmplY3QgKm87CisgICAgY29uc3QgbGlieGxfX2pzb25f b2JqZWN0ICplcnI7CisKKyAgICAvKgorICAgICAqIHsgImVycm9yIjogeyAiY2xhc3MiOiBzdHJp bmcsICJkZXNjIjogc3RyaW5nIH0gfQorICAgICAqLworCisgICAgZXJyID0gbGlieGxfX2pzb25f bWFwX2dldCgiZXJyb3IiLCByZXNwLCBKU09OX01BUCk7CisKKyAgICBvID0gbGlieGxfX2pzb25f bWFwX2dldCgiY2xhc3MiLCBlcnIsIEpTT05fU1RSSU5HKTsKKyAgICBpZiAoIW8pIHsKKyAgICAg ICAgTE9HRChFUlJPUiwgZXYtPmRvbWlkLAorICAgICAgICAgICAgICJQcm90b2NvbCBlcnJvcjog bWlzc2luZyAnY2xhc3MnIG1lbWJlciBpbiBlcnJvciBtZXNzYWdlIik7CisgICAgICAgIHJldHVy biBFUlJPUl9QUk9UT0NPTF9FUlJPUl9RTVA7CisgICAgfQorICAgIHMgPSBsaWJ4bF9fanNvbl9v YmplY3RfZ2V0X3N0cmluZyhvKTsKKyAgICBpZiAocykKKyAgICAgICAgcmMgPSBxbXBfZXJyb3Jf Y2xhc3NfdG9fbGlieGxfZXJyb3JfY29kZShnYywgcyk7CisgICAgZWxzZQorICAgICAgICByYyA9 IEVSUk9SX1BST1RPQ09MX0VSUk9SX1FNUDsKKworICAgIG8gPSBsaWJ4bF9fanNvbl9tYXBfZ2V0 KCJkZXNjIiwgZXJyLCBKU09OX1NUUklORyk7CisgICAgaWYgKCFvKSB7CisgICAgICAgIExPR0Qo RVJST1IsIGV2LT5kb21pZCwKKyAgICAgICAgICAgICAiUHJvdG9jb2wgZXJyb3I6IG1pc3Npbmcg J2Rlc2MnIG1lbWJlciBpbiBlcnJvciBtZXNzYWdlIik7CisgICAgICAgIHJldHVybiBFUlJPUl9Q Uk9UT0NPTF9FUlJPUl9RTVA7CisgICAgfQorICAgIHMgPSBsaWJ4bF9fanNvbl9vYmplY3RfZ2V0 X3N0cmluZyhvKTsKKyAgICBpZiAocykKKyAgICAgICAgTE9HRChFUlJPUiwgZXYtPmRvbWlkLCAi JXMiLCBzKTsKKyAgICBlbHNlCisgICAgICAgIExPR0QoRVJST1IsIGV2LT5kb21pZCwgIlJlY2Vp dmVkIHVuZXhwZWN0ZWQgZXJyb3I6ICVzIiwKKyAgICAgICAgICAgICBKU09OKHJlc3ApKTsKKyAg ICByZXR1cm4gcmM7Cit9CisKKy8qCisgKiBsaWJ4bF9fZXZfcW1wXyoKKyAqLworCit2b2lkIGxp YnhsX19ldl9xbXBfaW5pdChsaWJ4bF9fZXZfcW1wICpldikKKyAgICAvKiBkaXNjb25uZWN0ZWQg LT4gZGlzY29ubmVjdGVkICovCit7CisgICAgLyogU3RhcnQgd2l0aCBhbiBtZXNzYWdlIElEIHRo YXQgaXMgb2J2aW91c2x5IGdlbmVyYXRlZCBieSBsaWJ4bAorICAgICAqICJ4bHFcMCIgKi8KKyAg ICBldi0+bmV4dF9pZCA9IDB4Nzg2YzcxMDA7CisKKyAgICBldi0+Y2ZkID0gTlVMTDsKKyAgICBs aWJ4bF9fZXZfZmRfaW5pdCgmZXYtPmVmZCk7CisgICAgZXYtPnN0YXRlID0gcW1wX3N0YXRlX2Rp c2Nvbm5lY3RlZDsKKyAgICBldi0+aWQgPSAwOworCisgICAgZXYtPnJ4X2J1ZiA9IE5VTEw7Cisg ICAgZXYtPnJ4X2J1Zl9zaXplID0gZXYtPnJ4X2J1Zl91c2VkID0gMDsKKyAgICBxbXBfZXZfdHhf YnVmX2NsZWFyKGV2KTsKKworICAgIGV2LT5tc2cgPSBOVUxMOworICAgIGV2LT5tc2dfaWQgPSAw OworfQorCitpbnQgbGlieGxfX2V2X3FtcF9zZW5kKGxpYnhsX19nYyAqdW51c2VkX2djLCBsaWJ4 bF9fZXZfcW1wICpldiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY21kLCBs aWJ4bF9fanNvbl9vYmplY3QgKmFyZ3MpCisgICAgLyogZGlzY29ubmVjdGVkIC0+IGNvbm5lY3Rp bmcKKyAgICAgKiBjb25uZWN0ZWQgLT4gd2FpdGluZ19yZXBseSAod2l0aCBtc2cgc2V0KQorICAg ICAqIG9uIGVycm9yOiBkaXNjb25uZWN0ZWQgKi8KK3sKKyAgICBTVEFURV9BT19HQyhldi0+YW8p OworICAgIGludCByYzsKKworICAgIExPR0QoREVCVUcsIGV2LT5kb21pZCwgIiBldiAlcCwgY21k ICclcyciLCBldiwgY21kKTsKKworICAgIGFzc2VydChldi0+c3RhdGUgPT0gcW1wX3N0YXRlX2Rp c2Nvbm5lY3RlZCB8fAorICAgICAgICAgICBldi0+c3RhdGUgPT0gcW1wX3N0YXRlX2Nvbm5lY3Rl ZCk7CisgICAgYXNzZXJ0KGNtZCk7CisKKyAgICAvKiBDb25uZWN0IHRvIFFFTVUgaWYgbm90IGFs cmVhZHkgY29ubmVjdGVkICovCisgICAgaWYgKGV2LT5zdGF0ZSA9PSBxbXBfc3RhdGVfZGlzY29u bmVjdGVkKSB7CisgICAgICAgIHJjID0gcW1wX2V2X2Nvbm5lY3QoZ2MsIGV2KTsKKyAgICAgICAg aWYgKHJjKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICAvKiBQcmVwYXJl IHVzZXIgY29tbWFuZCAqLworICAgIGV2LT5tc2dfaWQgPSBldi0+bmV4dF9pZCsrOworICAgIGV2 LT5tc2cgPSBxbXBfcHJlcGFyZV9jbWQoZ2MsIGNtZCwgYXJncywgZXYtPm1zZ19pZCk7CisgICAg aWYgKCFldi0+bXNnKSB7CisgICAgICAgIExPR0QoRVJST1IsIGV2LT5kb21pZCwgIkZhaWxlZCB0 byBnZW5lcmF0ZSBjYWxsZXIncyBjb21tYW5kICVzIiwKKyAgICAgICAgICAgICBjbWQpOworICAg ICAgICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIGlm IChldi0+c3RhdGUgPT0gcW1wX3N0YXRlX2Nvbm5lY3RlZCkgeworICAgICAgICBxbXBfZXZfc2V0 X3N0YXRlKGdjLCBldiwgcW1wX3N0YXRlX3dhaXRpbmdfcmVwbHkpOworICAgIH0KKworICAgIHJl dHVybiAwOworCitlcnJvcjoKKyAgICBsaWJ4bF9fZXZfcW1wX2Rpc3Bvc2UoZ2MsIGV2KTsKKyAg ICByZXR1cm4gcmM7Cit9CisKK3ZvaWQgbGlieGxfX2V2X3FtcF9kaXNwb3NlKGxpYnhsX19nYyAq Z2MsIGxpYnhsX19ldl9xbXAgKmV2KQorICAgIC8qICogLT4gZGlzY29ubmVjdGVkICovCit7Cisg ICAgTE9HRChERUJVRywgZXYtPmRvbWlkLCAiIGV2ICVwIiwgZXYpOworCisgICAgbGlieGxfX2V2 X2ZkX2RlcmVnaXN0ZXIoZ2MsICZldi0+ZWZkKTsKKyAgICBsaWJ4bF9fY2FyZWZkX2Nsb3NlKGV2 LT5jZmQpOworCisgICAgbGlieGxfX2V2X3FtcF9pbml0KGV2KTsKK30KKwogLyoKICAqIExvY2Fs IHZhcmlhYmxlczoKICAqIG1vZGU6IEMKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX3R5 cGVzLmlkbCBiL3Rvb2xzL2xpYnhsL2xpYnhsX3R5cGVzLmlkbAppbmRleCAxNDFjNDZlNDJhLi4y MTJiMDBhNjc3IDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF90eXBlcy5pZGwKKysrIGIv dG9vbHMvbGlieGwvbGlieGxfdHlwZXMuaWRsCkBAIC02OSw2ICs2OSwxMiBAQCBsaWJ4bF9lcnJv ciA9IEVudW1lcmF0aW9uKCJlcnJvciIsIFsKICAgICAoLTIzLCAiTk9URk9VTkQiKSwKICAgICAo LTI0LCAiRE9NQUlOX0RFU1RST1lFRCIpLCAjIFRhcmdldCBkb21haW4gY2Vhc2VkIHRvIGV4aXN0 IGR1cmluZyBvcAogICAgICgtMjUsICJGRUFUVVJFX1JFTU9WRUQiKSwgIyBGb3IgZnVuY3Rpb25h bGl0eSB0aGF0IGhhcyBiZWVuIHJlbW92ZWQKKyAgICAoLTI2LCAiUFJPVE9DT0xfRVJST1JfUU1Q IiksCisgICAgKC0yNywgIlVOS05PV05fUU1QX0VSUk9SIiksCisgICAgKC0yOCwgIlFNUF9HRU5F UklDX0VSUk9SIiksICMgdW5zcGVjaWZpZWQgcW1wIGVycm9yCisgICAgKC0yOSwgIlFNUF9DT01N QU5EX05PVF9GT1VORCIpLCAjIHRoZSByZXF1ZXN0ZWQgY29tbWFuZCBoYXMgbm90IGJlZW4gZm91 bmQKKyAgICAoLTMwLCAiUU1QX0RFVklDRV9OT1RfQUNUSVZFIiksICMgYSBkZXZpY2UgaGFzIGZh aWxlZCB0byBiZSBiZWNvbWUgYWN0aXZlCisgICAgKC0zMSwgIlFNUF9ERVZJQ0VfTk9UX0ZPVU5E IiksICMgdGhlIHJlcXVlc3RlZCBkZXZpY2UgaGFzIG5vdCBiZWVuIGZvdW5kCiAgICAgXSwgdmFs dWVfbmFtZXNwYWNlID0gIiIpCiAKIGxpYnhsX2RvbWFpbl90eXBlID0gRW51bWVyYXRpb24oImRv bWFpbl90eXBlIiwgWwotLSAKQW50aG9ueSBQRVJBUkQKCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZl bEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxt YW4vbGlzdGluZm8veGVuLWRldmVs