Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p5xTF-0001Az-GX for pgsql-hackers@arkaria.postgresql.org; Thu, 15 Dec 2022 23:16:58 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1p5xTE-0000ho-9c for pgsql-hackers@arkaria.postgresql.org; Thu, 15 Dec 2022 23:16:56 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p5xTC-0000fR-P2 for pgsql-hackers@lists.postgresql.org; Thu, 15 Dec 2022 23:16:55 +0000 Received: from smtp-fw-9102.amazon.com ([207.171.184.29]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p5xT7-0005nW-RP for pgsql-hackers@postgresql.org; Thu, 15 Dec 2022 23:16:53 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1671146210; x=1702682210; h=from:to:cc:date:message-id:references:in-reply-to: mime-version:subject; bh=IAqXEGd2i9cpedffAsJ7vv15RfC6o8osiB7da4MYkmc=; b=QRmskgPUL6P6McqzIGf88475gXgbflC9Jlm9XcbV6QSAjFj4tndXMDiL 5kfQgouOJbe8NWS9yYoK335SOpHVesIBqgSqogMBY0Syf8i1e6auznpko Pogk6P5XtpRD8jUCljhNijMR+JYsuPHHDsQJRUZ+dUny/IOAQUClS1eE/ E=; X-Amazon-filename: slru_to_buffer_cache_with_page_headers_v3.patch X-IronPort-AV: E=Sophos;i="5.96,248,1665446400"; d="scan'208,217,223";a="291086193" Subject: Re: SLRUs in the main buffer pool - Page Header definitions Thread-Topic: SLRUs in the main buffer pool - Page Header definitions Received: from pdx4-co-svc-p1-lb2-vlan2.amazon.com (HELO email-inbound-relay-pdx-2a-m6i4x-8a14c045.us-west-2.amazon.com) ([10.25.36.210]) by smtp-border-fw-9102.sea19.amazon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Dec 2022 23:16:48 +0000 Received: from EX13MTAUWB002.ant.amazon.com (pdx1-ws-svc-p6-lb9-vlan3.pdx.amazon.com [10.236.137.198]) by email-inbound-relay-pdx-2a-m6i4x-8a14c045.us-west-2.amazon.com (Postfix) with ESMTPS id 485688104E; Thu, 15 Dec 2022 23:16:47 +0000 (UTC) Received: from EX19D005UWA004.ant.amazon.com (10.13.138.217) by EX13MTAUWB002.ant.amazon.com (10.43.161.202) with Microsoft SMTP Server (TLS) id 15.0.1497.42; Thu, 15 Dec 2022 23:16:46 +0000 Received: from EX19D035UEA003.ant.amazon.com (10.252.134.113) by EX19D005UWA004.ant.amazon.com (10.13.138.217) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.20; Thu, 15 Dec 2022 23:16:45 +0000 Received: from EX19D035UEA003.ant.amazon.com ([fe80::b768:c926:7fea:2016]) by EX19D035UEA003.ant.amazon.com ([fe80::b768:c926:7fea:2016%3]) with mapi id 15.02.1118.020; Thu, 15 Dec 2022 23:16:45 +0000 From: "Bagga, Rishu" To: Heikki Linnakangas , Thomas Munro , pgsql-hackers CC: "Debnath, Shawn" Thread-Index: AQHYhnvxezKTgPNs7k2tXj3iuMBOO630OQiAgDqHS4CAHByDAIAlRqyA Date: Thu, 15 Dec 2022 23:16:45 +0000 Message-ID: References: <7C4D53F1-A156-4ABC-9B89-B2C253D5FF74@amazon.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-originating-ip: [10.187.171.39] Content-Type: multipart/mixed; boundary="_004_D663D8DD6B134DF49A8D045D5F0F2A7Eamazoncom_" MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_004_D663D8DD6B134DF49A8D045D5F0F2A7Eamazoncom_ Content-Type: multipart/alternative; boundary="_000_D663D8DD6B134DF49A8D045D5F0F2A7Eamazoncom_" --_000_D663D8DD6B134DF49A8D045D5F0F2A7Eamazoncom_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGksDQoNCg0KDQoNCg0KUmViYXNlZCBhbmQgdXBkYXRlZCBhIG5ldyBwYXRjaCBhZGRyZXNzaW5n IHRoZSBjcml0aWNhbCBzZWN0aW9uIGlzc3VlIGluDQpSZWNvcmROZXdNdWx0bGlYYWN0LkluIEdl dE5ld011bHRpWGFjdElkLCB3ZSBub3cgbWFrZSBvdXIgUmVhZEJ1ZmZlcg0KY2FsbHMgYmVmb3Jl IHN0YXJ0aW5nIHRoZSBjcml0aWNhbCBzZWN0aW9uLCBidXQgd2hpbGUgaG9sZGluZyB0aGUNCk11 bHRpWGFjdEdlbkxvY2ssIHNvIHdlIGFsd2F5cyBmZXRjaCB0aGUgY29ycmVjdCBidWZmZXJzLiBX ZSBzdG9yZSB0aGVtDQppbiBhbiBhcnJheSB0aGF0IGlzIGFjY2Vzc2VkIGxhdGVyIGluIFJlY29y ZE5ld011bHRpWGFjdC4NClRoaXMgd2F5IHdlIGNhbiBrZWVwIHRoZSBleGlzdGluZyBmdW5jdGlv bmFsaXR5IG9mIG9ubHkgaG9sZGluZyB0aGUgTXVsdGlYYWN0R2VuTG9jayB3aGlsZSByZWFkaW5n IGluIGJ1ZmZlcnMsIGJ1dCBjYW4gbGV0IGdvIHdoZW4gd2UgYXJlIHdyaXRpbmcsDQp0byBwcmVz ZXJ2ZSB0aGUgZXhpc3RpbmcgY29uY3VycmVuY3kgcGFyYWRpZ20uDQoNCg0KDQoNCg0KTGV0IG1l IGtub3cgeW91ciB0aG91Z2h0cyBvbiB0aGlzIGFwcHJvYWNoLg0KDQoNCg0KDQoNCg0KDQpTaW5j ZXJlbHksDQoNCg0KDQpSaXNodSBCYWdnYSwgQW1hem9uIFdlYiBTZXJ2aWNlcyAoQVdTKQ0KDQoN Cg0KDQo= --_000_D663D8DD6B134DF49A8D045D5F0F2A7Eamazoncom_ Content-Type: text/html; charset="utf-8" Content-ID: <87683292B053B44D952B9F04B6CD5FC9@amazon.com> Content-Transfer-Encoding: base64 PGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIiB4 bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIiB4bWxuczptPSJo dHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA0LzEyL29tbWwiIHhtbG5zPSJo dHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4NCjxoZWFkPg0KPG1ldGEgaHR0cC1lcXVp dj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPg0KPG1l dGEgbmFtZT0iR2VuZXJhdG9yIiBjb250ZW50PSJNaWNyb3NvZnQgV29yZCAxNSAoZmlsdGVyZWQg bWVkaXVtKSI+DQo8c3R5bGU+PCEtLQ0KLyogRm9udCBEZWZpbml0aW9ucyAqLw0KQGZvbnQtZmFj ZQ0KCXtmb250LWZhbWlseToiQ2FtYnJpYSBNYXRoIjsNCglwYW5vc2UtMToyIDQgNSAzIDUgNCA2 IDMgMiA0O30NCkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6Q2FsaWJyaTsNCglwYW5vc2UtMToy IDE1IDUgMiAyIDIgNCAzIDIgNDt9DQovKiBTdHlsZSBEZWZpbml0aW9ucyAqLw0KcC5Nc29QbGFp blRleHQsIGxpLk1zb1BsYWluVGV4dCwgZGl2Lk1zb1BsYWluVGV4dA0KCXttc28tc3R5bGUtcHJp b3JpdHk6OTk7DQoJbXNvLXN0eWxlLWxpbms6IlBsYWluIFRleHQgQ2hhciI7DQoJbWFyZ2luOjBp bjsNCglmb250LXNpemU6MTEuMHB0Ow0KCWZvbnQtZmFtaWx5OiJDYWxpYnJpIixzYW5zLXNlcmlm O30NCnNwYW4uUGxhaW5UZXh0Q2hhcg0KCXttc28tc3R5bGUtbmFtZToiUGxhaW4gVGV4dCBDaGFy IjsNCgltc28tc3R5bGUtcHJpb3JpdHk6OTk7DQoJbXNvLXN0eWxlLWxpbms6IlBsYWluIFRleHQi Ow0KCWZvbnQtZmFtaWx5OiJDYWxpYnJpIixzYW5zLXNlcmlmO30NCi5Nc29DaHBEZWZhdWx0DQoJ e21zby1zdHlsZS10eXBlOmV4cG9ydC1vbmx5O30NCkBwYWdlIFdvcmRTZWN0aW9uMQ0KCXtzaXpl OjguNWluIDExLjBpbjsNCgltYXJnaW46MS4waW4gMS4waW4gMS4waW4gMS4waW47fQ0KZGl2Lldv cmRTZWN0aW9uMQ0KCXtwYWdlOldvcmRTZWN0aW9uMTt9DQotLT48L3N0eWxlPg0KPC9oZWFkPg0K PGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9IiMwNTYzQzEiIHZsaW5rPSIjOTU0RjcyIiBzdHlsZT0i d29yZC13cmFwOmJyZWFrLXdvcmQiPg0KPGRpdiBjbGFzcz0iV29yZFNlY3Rpb24xIj4NCjxwIGNs YXNzPSJNc29QbGFpblRleHQiPkhpLCA8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29QbGFp blRleHQiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb1BsYWluVGV4dCI+PG86 cD4mbmJzcDs8L286cD48L3A+DQo8cCBjbGFzcz0iTXNvUGxhaW5UZXh0Ij5SZWJhc2VkIGFuZCB1 cGRhdGVkIGEgbmV3IHBhdGNoIGFkZHJlc3NpbmcgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaXNzdWUg aW4NCjxicj4NClJlY29yZE5ld011bHRsaVhhY3QuSW4gR2V0TmV3TXVsdGlYYWN0SWQsIHdlIG5v dyBtYWtlIG91ciBSZWFkQnVmZmVyIDxicj4NCmNhbGxzIGJlZm9yZSBzdGFydGluZyB0aGUgY3Jp dGljYWwgc2VjdGlvbiwgYnV0IHdoaWxlIGhvbGRpbmcgdGhlIDxicj4NCk11bHRpWGFjdEdlbkxv Y2ssIHNvIHdlIGFsd2F5cyBmZXRjaCB0aGUgY29ycmVjdCBidWZmZXJzLiBXZSBzdG9yZSB0aGVt PGJyPg0KaW4gYW4gYXJyYXkgdGhhdCBpcyBhY2Nlc3NlZCBsYXRlciBpbiBSZWNvcmROZXdNdWx0 aVhhY3QuPGJyPg0KVGhpcyB3YXkgd2UgY2FuIGtlZXAgdGhlIGV4aXN0aW5nIGZ1bmN0aW9uYWxp dHkgb2Ygb25seSBob2xkaW5nIHRoZSBNdWx0aVhhY3RHZW5Mb2NrIHdoaWxlIHJlYWRpbmcgaW4g YnVmZmVycywgYnV0IGNhbiBsZXQgZ28gd2hlbiB3ZSBhcmUgd3JpdGluZywNCjxicj4NCnRvIHBy ZXNlcnZlIHRoZSBleGlzdGluZyBjb25jdXJyZW5jeSBwYXJhZGlnbS48bzpwPjwvbzpwPjwvcD4N CjxwIGNsYXNzPSJNc29QbGFpblRleHQiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPHAgY2xhc3M9 Ik1zb1BsYWluVGV4dCI+PG86cD4mbmJzcDs8L286cD48L3A+DQo8cCBjbGFzcz0iTXNvUGxhaW5U ZXh0Ij5MZXQgbWUga25vdyB5b3VyIHRob3VnaHRzIG9uIHRoaXMgYXBwcm9hY2guPG86cD48L286 cD48L3A+DQo8cCBjbGFzcz0iTXNvUGxhaW5UZXh0Ij48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjxw IGNsYXNzPSJNc29QbGFpblRleHQiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1z b1BsYWluVGV4dCI+PG86cD4mbmJzcDs8L286cD48L3A+DQo8cCBjbGFzcz0iTXNvUGxhaW5UZXh0 Ij5TaW5jZXJlbHksPG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvUGxhaW5UZXh0Ij48bzpw PiZuYnNwOzwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29QbGFpblRleHQiPlJpc2h1IEJhZ2dhLCBB bWF6b24gV2ViIFNlcnZpY2VzIChBV1MpPG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvUGxh aW5UZXh0Ij48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29QbGFpblRleHQiPjxv OnA+Jm5ic3A7PC9vOnA+PC9wPg0KPC9kaXY+DQo8L2JvZHk+DQo8L2h0bWw+DQo= --_000_D663D8DD6B134DF49A8D045D5F0F2A7Eamazoncom_-- --_004_D663D8DD6B134DF49A8D045D5F0F2A7Eamazoncom_ Content-Type: application/octet-stream; name="slru_to_buffer_cache_with_page_headers_v3.patch" Content-Description: slru_to_buffer_cache_with_page_headers_v3.patch Content-Disposition: attachment; filename="slru_to_buffer_cache_with_page_headers_v3.patch"; size=356838; creation-date="Thu, 15 Dec 2022 23:16:44 GMT"; modification-date="Thu, 15 Dec 2022 23:16:44 GMT" Content-ID: <488586F1314A7443AE63FFAEA5B8AD99@amazon.com> Content-Transfer-Encoding: base64 RnJvbSAwYjE2MmVjOTcwN2EyNzkwZjkyZTJlMjM3Y2I0ZmE4MDcxNTdjMTljIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaXNodSBCYWdnYSA8YmFncmlzaHVAYW1hem9uLmNvbT4KRGF0 ZTogVGh1LCAxNSBTZXAgMjAyMiAwMDo1NToyNSArMDAwMApTdWJqZWN0OiBbUEFUQ0hdIHNscnUg dG8gYnVmZmVyY2FjaGUgd2l0aCBwYWdlIGhlYWRlcnMsIGFuZCB1cGdyYWRlIGxvZ2ljCgotLS0K IGNvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMgICAgICAgICAgICAgfCAgICAyICstCiBj b250cmliL2Jsb29tL2JsaW5zZXJ0LmMgICAgICAgICAgICAgICAgICAgIHwgICAgNiArLQogY29u dHJpYi9wZ19wcmV3YXJtL2F1dG9wcmV3YXJtLmMgICAgICAgICAgICB8ICAgIDIgKy0KIGNvbnRy aWIvcGdfcHJld2FybS9wZ19wcmV3YXJtLmMgICAgICAgICAgICAgfCAgICA0ICstCiBjb250cmli L3BnX3Zpc2liaWxpdHkvcGdfdmlzaWJpbGl0eS5jICAgICAgIHwgICAgNSArLQogc3JjL2JhY2tl bmQvYWNjZXNzL2dpc3QvZ2lzdGJ1aWxkLmMgICAgICAgICB8ICAgMTEgKy0KIHNyYy9iYWNrZW5k L2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMgICAgICAgICAgfCAgICAyICstCiBzcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jICAgIHwgICAzMiArLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvcmV3cml0ZWhlYXAuYyAgICAgICB8ICAgIDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL3Zpc2liaWxpdHltYXAuYyAgICAgfCAgIDQxICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL25idHJlZS5jICAgICAgICAgIHwgICAgNiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS9uYnRzb3J0LmMgICAgICAgICB8ICAgIDggKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9zcGdp c3Qvc3BnaW5zZXJ0LmMgICAgICAgfCAgIDE3ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUv dGFibGVhbS5jICAgICAgICAgIHwgICAgNCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v Y2xvZy5jICAgICAgICAgICB8ICAyMjUgKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9j b21taXRfdHMuYyAgICAgIHwgIDE5OSArLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211 bHRpeGFjdC5jICAgICAgfCAgNTA4ICsrKy0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2Ft L3NscnUuYyAgICAgICAgICAgfCAxNDg0ICsrLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3N1YnRyYW5zLmMgICAgICAgfCAgMTE0ICstCiBzcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS94YWN0LmMgICAgICAgICAgIHwgICAgMiArCiBzcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS94bG9nLmMgICAgICAgICAgIHwgICAxNSArLQogc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0veGxvZ3ByZWZldGNoZXIuYyB8ICAgMjggKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL3hsb2d1dGlscy5jICAgICAgfCAgIDE3ICstCiBzcmMvYmFja2VuZC9jYXRhbG9nL2Nh dGFsb2cuYyAgICAgICAgICAgICAgIHwgICA1MyArLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRl eC5jICAgICAgICAgICAgICAgICB8ICAgIDQgKy0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvc3RvcmFn ZS5jICAgICAgICAgICAgICAgfCAgMjA1ICsrLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMu YyAgICAgICAgICAgICAgICB8ICAgOTcgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RiY29tbWFu ZHMuYyAgICAgICAgICAgfCAgICA4ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5j ICAgICAgICAgICAgIHwgICAgOCArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMg ICAgICAgICAgICB8ICAgMTkgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9pbml0 LmMgICAgICAgfCAgIDE3ICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyAg ICAgICAgIHwgIDM3OSArKy0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvbG9jYWxidWYu YyAgICAgICB8ICAgMjUgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvZnJlZXNwYWNlL2ZyZWVzcGFj ZS5jICAgfCAgIDQxICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMgICAgICAgICAg ICAgIHwgICAgNCAtCiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMgICAgICAg IHwgICA3MiArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdlL2J1ZnBhZ2UuYyAgICAgICAgICB8 ICAgMjMgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2Uvc21nci9tZC5jICAgICAgICAgICAgICAgfCAg MzY2ICsrLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3Ivc21nci5jICAgICAgICAgICAgIHwg IDM5OSArKystLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9zeW5jL3N5bmMuYyAgICAgICAgICAgICB8 ICAgMjAgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2ludmFsLmMgICAgICAgICAgICAgfCAg IDE3ICstCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAgIHwgICAy NyArLQogc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9tY3h0LmMgICAgICAgICAgICAgICB8ICAgMTMg Ky0KIHNyYy9iaW4vcGdfdXBncmFkZS9maWxlLmMgICAgICAgICAgICAgICAgICAgfCAgMTc1ICsr LQogc3JjL2Jpbi9wZ191cGdyYWRlL2Z1bmN0aW9uLmMgICAgICAgICAgICAgICB8ICAgNjYgKwog c3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUuYyAgICAgICAgICAgICB8ICAgNzYgKy0KIHNy Yy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmggICAgICAgICAgICAgfCAgIDE5ICstCiBzcmMv Y29tbW9uL3JlbHBhdGguYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzMSArLQogc3JjL2lu Y2x1ZGUvYWNjZXNzL2Nsb2cuaCAgICAgICAgICAgICAgICAgICB8ICAgIDYgLQogc3JjL2luY2x1 ZGUvYWNjZXNzL2NvbW1pdF90cy5oICAgICAgICAgICAgICB8ICAgIDMgLQogc3JjL2luY2x1ZGUv YWNjZXNzL211bHRpeGFjdC5oICAgICAgICAgICAgICB8ICAgIDMgLQogc3JjL2luY2x1ZGUvYWNj ZXNzL3NscnUuaCAgICAgICAgICAgICAgICAgICB8ICAxODEgKy0tCiBzcmMvaW5jbHVkZS9hY2Nl c3Mvc2xydWRlZnMuaCAgICAgICAgICAgICAgIHwgICAxOSArCiBzcmMvaW5jbHVkZS9hY2Nlc3Mv c2xydWxpc3QuaCAgICAgICAgICAgICAgIHwgICAzMCArCiBzcmMvaW5jbHVkZS9hY2Nlc3Mvc3Vi dHJhbnMuaCAgICAgICAgICAgICAgIHwgICAgMyAtCiBzcmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZl cnNpb24uaCAgICAgICAgICAgIHwgICAgNCArLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9zdG9yYWdl LmggICAgICAgICAgICAgICB8ICAgMTEgKy0KIHNyYy9pbmNsdWRlL2NvbW1vbi9yZWxwYXRoLmgg ICAgICAgICAgICAgICAgfCAgIDE1ICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRlcm5h bHMuaCAgICAgICAgIHwgICAxMSArLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCAgICAg ICAgICAgICAgICB8ICAgMzggKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmcGFnZS5oICAgICAg ICAgICAgICAgfCAgIDE3ICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvbWQuaCAgICAgICAgICAgICAg ICAgICAgfCAgIDI4ICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3JlbGZpbGVsb2NhdG9yLmggICAg ICAgIHwgICAyOSArLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9zbWdyLmggICAgICAgICAgICAgICAg ICB8ICAgOTkgKy0KIHNyYy9pbmNsdWRlL3V0aWxzL2ludmFsLmggICAgICAgICAgICAgICAgICAg fCAgICAyICstCiBzcmMvaW5jbHVkZS91dGlscy9yZWwuaCAgICAgICAgICAgICAgICAgICAgIHwg ICAzMyArLQogNjYgZmlsZXMgY2hhbmdlZCwgMjE3NSBpbnNlcnRpb25zKCspLCAzMjU5IGRlbGV0 aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL2FjY2Vzcy9zbHJ1ZGVmcy5o CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvYWNjZXNzL3NscnVsaXN0LmgKCmRpZmYg LS1naXQgYS9jb250cmliL2FtY2hlY2svdmVyaWZ5X25idHJlZS5jIGIvY29udHJpYi9hbWNoZWNr L3ZlcmlmeV9uYnRyZWUuYwppbmRleCA5MDIxZDE1NmViNy4uMjcyMmYxMjEyMTkgMTAwNjQ0Ci0t LSBhL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMKKysrIGIvY29udHJpYi9hbWNoZWNr L3ZlcmlmeV9uYnRyZWUuYwpAQCAtMzI0LDcgKzMyNCw3IEBAIGJ0X2luZGV4X2NoZWNrX2ludGVy bmFsKE9pZCBpbmRyZWxpZCwgYm9vbCBwYXJlbnRjaGVjaywgYm9vbCBoZWFwYWxsaW5kZXhlZCwK IAkJYm9vbAkJaGVhcGtleXNwYWNlLAogCQkJCQlhbGxlcXVhbGltYWdlOwogCi0JCWlmICghc21n cmV4aXN0cyhSZWxhdGlvbkdldFNtZ3IoaW5kcmVsKSwgTUFJTl9GT1JLTlVNKSkKKwkJaWYgKCFz bWdyZXhpc3RzKFJlbGF0aW9uR2V0U21ncihpbmRyZWwsIE1BSU5fRk9SS05VTSkpKQogCQkJZXJl cG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTkRFWF9DT1JSVVBURUQpLAogCQkJ CQkgZXJybXNnKCJpbmRleCBcIiVzXCIgbGFja3MgYSBtYWluIHJlbGF0aW9uIGZvcmsiLApkaWZm IC0tZ2l0IGEvY29udHJpYi9ibG9vbS9ibGluc2VydC5jIGIvY29udHJpYi9ibG9vbS9ibGluc2Vy dC5jCmluZGV4IGRkMjZkNmFjMjlhLi5kMDY4YTI0M2U4ZiAxMDA2NDQKLS0tIGEvY29udHJpYi9i bG9vbS9ibGluc2VydC5jCisrKyBiL2NvbnRyaWIvYmxvb20vYmxpbnNlcnQuYwpAQCAtMTc3LDkg KzE3Nyw5IEBAIGJsYnVpbGRlbXB0eShSZWxhdGlvbiBpbmRleCkKIAkgKiB0aGlzIGV2ZW4gd2hl biB3YWxfbGV2ZWw9bWluaW1hbC4KIAkgKi8KIAlQYWdlU2V0Q2hlY2tzdW1JbnBsYWNlKG1ldGFw YWdlLCBCTE9PTV9NRVRBUEFHRV9CTEtOTyk7Ci0Jc21ncndyaXRlKFJlbGF0aW9uR2V0U21ncihp bmRleCksIElOSVRfRk9SS05VTSwgQkxPT01fTUVUQVBBR0VfQkxLTk8sCisJc21ncndyaXRlKFJl bGF0aW9uR2V0U21ncihpbmRleCwgSU5JVF9GT1JLTlVNKSwgQkxPT01fTUVUQVBBR0VfQkxLTk8s CiAJCQkgIChjaGFyICopIG1ldGFwYWdlLCB0cnVlKTsKLQlsb2dfbmV3cGFnZSgmKFJlbGF0aW9u R2V0U21ncihpbmRleCkpLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IsIElOSVRfRk9SS05VTSwKKwls b2dfbmV3cGFnZSgmaW5kZXgtPnJkX2xvY2F0b3IsIElOSVRfRk9SS05VTSwKIAkJCQlCTE9PTV9N RVRBUEFHRV9CTEtOTywgbWV0YXBhZ2UsIHRydWUpOwogCiAJLyoKQEAgLTE4Nyw3ICsxODcsNyBA QCBibGJ1aWxkZW1wdHkoUmVsYXRpb24gaW5kZXgpCiAJICogd3JpdGUgZGlkIG5vdCBnbyB0aHJv dWdoIHNoYXJlZF9idWZmZXJzIGFuZCB0aGVyZWZvcmUgYSBjb25jdXJyZW50CiAJICogY2hlY2tw b2ludCBtYXkgaGF2ZSBtb3ZlZCB0aGUgcmVkbyBwb2ludGVyIHBhc3Qgb3VyIHhsb2cgcmVjb3Jk LgogCSAqLwotCXNtZ3JpbW1lZHN5bmMoUmVsYXRpb25HZXRTbWdyKGluZGV4KSwgSU5JVF9GT1JL TlVNKTsKKwlzbWdyaW1tZWRzeW5jKFJlbGF0aW9uR2V0U21ncihpbmRleCwgSU5JVF9GT1JLTlVN KSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3ByZXdhcm0vYXV0b3ByZXdhcm0u YyBiL2NvbnRyaWIvcGdfcHJld2FybS9hdXRvcHJld2FybS5jCmluZGV4IGQwMmE2YTFiYTA0Li5k ZTA3YmM1OTNjNyAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19wcmV3YXJtL2F1dG9wcmV3YXJtLmMK KysrIGIvY29udHJpYi9wZ19wcmV3YXJtL2F1dG9wcmV3YXJtLmMKQEAgLTUzNSw3ICs1MzUsNyBA QCBhdXRvcHJld2FybV9kYXRhYmFzZV9tYWluKERhdHVtIG1haW5fYXJnKQogCQkJICovCiAJCQlp ZiAoYmxrLT5mb3JrbnVtID4gSW52YWxpZEZvcmtOdW1iZXIgJiYKIAkJCQlibGstPmZvcmtudW0g PD0gTUFYX0ZPUktOVU0gJiYKLQkJCQlzbWdyZXhpc3RzKFJlbGF0aW9uR2V0U21ncihyZWwpLCBi bGstPmZvcmtudW0pKQorCQkJCXNtZ3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKHJlbCwgYmxrLT5m b3JrbnVtKSkpCiAJCQkJbmJsb2NrcyA9IFJlbGF0aW9uR2V0TnVtYmVyT2ZCbG9ja3NJbkZvcmso cmVsLCBibGstPmZvcmtudW0pOwogCQkJZWxzZQogCQkJCW5ibG9ja3MgPSAwOwpkaWZmIC0tZ2l0 IGEvY29udHJpYi9wZ19wcmV3YXJtL3BnX3ByZXdhcm0uYyBiL2NvbnRyaWIvcGdfcHJld2FybS9w Z19wcmV3YXJtLmMKaW5kZXggY2FmZjVjNGE4MGYuLjFlNTc0ODFlZjkyIDEwMDY0NAotLS0gYS9j b250cmliL3BnX3ByZXdhcm0vcGdfcHJld2FybS5jCisrKyBiL2NvbnRyaWIvcGdfcHJld2FybS9w Z19wcmV3YXJtLmMKQEAgLTEwOSw3ICsxMDksNyBAQCBwZ19wcmV3YXJtKFBHX0ZVTkNUSU9OX0FS R1MpCiAJCWFjbGNoZWNrX2Vycm9yKGFjbHJlc3VsdCwgZ2V0X3JlbGtpbmRfb2JqdHlwZShyZWwt PnJkX3JlbC0+cmVsa2luZCksIGdldF9yZWxfbmFtZShyZWxPaWQpKTsKIAogCS8qIENoZWNrIHRo YXQgdGhlIGZvcmsgZXhpc3RzLiAqLwotCWlmICghc21ncmV4aXN0cyhSZWxhdGlvbkdldFNtZ3Io cmVsKSwgZm9ya051bWJlcikpCisJaWYgKCFzbWdyZXhpc3RzKFJlbGF0aW9uR2V0U21ncihyZWws IGZvcmtOdW1iZXIpKSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0lO VkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKIAkJCQkgZXJybXNnKCJmb3JrIFwiJXNcIiBkb2VzIG5v dCBleGlzdCBmb3IgdGhpcyByZWxhdGlvbiIsCkBAIC0xNzcsNyArMTc3LDcgQEAgcGdfcHJld2Fy bShQR19GVU5DVElPTl9BUkdTKQogCQlmb3IgKGJsb2NrID0gZmlyc3RfYmxvY2s7IGJsb2NrIDw9 IGxhc3RfYmxvY2s7ICsrYmxvY2spCiAJCXsKIAkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7Ci0J CQlzbWdycmVhZChSZWxhdGlvbkdldFNtZ3IocmVsKSwgZm9ya051bWJlciwgYmxvY2ssIGJsb2Nr YnVmZmVyLmRhdGEpOworCQkJc21ncnJlYWQoUmVsYXRpb25HZXRTbWdyKHJlbCwgZm9ya051bWJl ciksIGJsb2NrLCBibG9ja2J1ZmZlci5kYXRhKTsKIAkJCSsrYmxvY2tzX2RvbmU7CiAJCX0KIAl9 CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3Zpc2liaWxpdHkvcGdfdmlzaWJpbGl0eS5jIGIvY29u dHJpYi9wZ192aXNpYmlsaXR5L3BnX3Zpc2liaWxpdHkuYwppbmRleCBhOTVmNzNlYzc5Ni4uMzhj YjU2YzliY2UgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfdmlzaWJpbGl0eS9wZ192aXNpYmlsaXR5 LmMKKysrIGIvY29udHJpYi9wZ192aXNpYmlsaXR5L3BnX3Zpc2liaWxpdHkuYwpAQCAtMzg4LDEz ICszODgsMTQgQEAgcGdfdHJ1bmNhdGVfdmlzaWJpbGl0eV9tYXAoUEdfRlVOQ1RJT05fQVJHUykK IAljaGVja19yZWxhdGlvbl9yZWxraW5kKHJlbCk7CiAKIAkvKiBGb3JjaWJseSByZXNldCBjYWNo ZWQgZmlsZSBzaXplICovCi0JUmVsYXRpb25HZXRTbWdyKHJlbCktPnNtZ3JfY2FjaGVkX25ibG9j a3NbVklTSUJJTElUWU1BUF9GT1JLTlVNXSA9IEludmFsaWRCbG9ja051bWJlcjsKKwlSZWxhdGlv bkdldFNtZ3IocmVsLCBWSVNJQklMSVRZTUFQX0ZPUktOVU0pLT5zbWdyX2NhY2hlZF9uYmxvY2tz ID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCiAJYmxvY2sgPSB2aXNpYmlsaXR5bWFwX3ByZXBhcmVf dHJ1bmNhdGUocmVsLCAwKTsKIAlpZiAoQmxvY2tOdW1iZXJJc1ZhbGlkKGJsb2NrKSkKIAl7CiAJ CWZvcmsgPSBWSVNJQklMSVRZTUFQX0ZPUktOVU07Ci0JCXNtZ3J0cnVuY2F0ZShSZWxhdGlvbkdl dFNtZ3IocmVsKSwgJmZvcmssIDEsICZibG9jayk7CisJCURyb3BSZWxhdGlvbkJ1ZmZlcnMocmVs LT5yZF9sb2NhdG9yLCByZWwtPnJkX2JhY2tlbmQsICZmb3JrLCAxLCAmYmxvY2spOworCQlzbWdy dHJ1bmNhdGVfbXVsdGkocmVsLT5yZF9sb2NhdG9yLCByZWwtPnJkX2JhY2tlbmQsICZmb3JrLCAx LCAmYmxvY2spOwogCX0KIAogCWlmIChSZWxhdGlvbk5lZWRzV0FMKHJlbCkpCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0YnVpbGQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9naXN0L2dpc3RidWlsZC5jCmluZGV4IGZiMGY0NjY3MDhjLi5hNzg1Mjc3NjllNiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdGJ1aWxkLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2dpc3QvZ2lzdGJ1aWxkLmMKQEAgLTQxNiw3ICs0MTYsNyBAQCBnaXN0X2luZGV4 c29ydGJ1aWxkKEdJU1RCdWlsZFN0YXRlICpzdGF0ZSkKIAkgKiByZXBsYWNlZCB3aXRoIHRoZSBy ZWFsIHJvb3QgcGFnZSBhdCB0aGUgZW5kLgogCSAqLwogCXBhZ2UgPSBwYWxsb2MwKEJMQ0tTWik7 Ci0Jc21ncmV4dGVuZChSZWxhdGlvbkdldFNtZ3Ioc3RhdGUtPmluZGV4cmVsKSwgTUFJTl9GT1JL TlVNLCBHSVNUX1JPT1RfQkxLTk8sCisJc21ncmV4dGVuZChSZWxhdGlvbkdldFNtZ3Ioc3RhdGUt PmluZGV4cmVsLCBNQUlOX0ZPUktOVU0pLCBHSVNUX1JPT1RfQkxLTk8sCiAJCQkgICBwYWdlLCB0 cnVlKTsKIAlzdGF0ZS0+cGFnZXNfYWxsb2NhdGVkKys7CiAJc3RhdGUtPnBhZ2VzX3dyaXR0ZW4r KzsKQEAgLTQ2MCw3ICs0NjAsNyBAQCBnaXN0X2luZGV4c29ydGJ1aWxkKEdJU1RCdWlsZFN0YXRl ICpzdGF0ZSkKIAkvKiBXcml0ZSBvdXQgdGhlIHJvb3QgKi8KIAlQYWdlU2V0TFNOKGxldmVsc3Rh dGUtPnBhZ2VzWzBdLCBHaXN0QnVpbGRMU04pOwogCVBhZ2VTZXRDaGVja3N1bUlucGxhY2UobGV2 ZWxzdGF0ZS0+cGFnZXNbMF0sIEdJU1RfUk9PVF9CTEtOTyk7Ci0Jc21ncndyaXRlKFJlbGF0aW9u R2V0U21ncihzdGF0ZS0+aW5kZXhyZWwpLCBNQUlOX0ZPUktOVU0sIEdJU1RfUk9PVF9CTEtOTywK KwlzbWdyd3JpdGUoUmVsYXRpb25HZXRTbWdyKHN0YXRlLT5pbmRleHJlbCwgTUFJTl9GT1JLTlVN KSwgR0lTVF9ST09UX0JMS05PLAogCQkJICBsZXZlbHN0YXRlLT5wYWdlc1swXSwgdHJ1ZSk7CiAJ aWYgKFJlbGF0aW9uTmVlZHNXQUwoc3RhdGUtPmluZGV4cmVsKSkKIAkJbG9nX25ld3BhZ2UoJnN0 YXRlLT5pbmRleHJlbC0+cmRfbG9jYXRvciwgTUFJTl9GT1JLTlVNLCBHSVNUX1JPT1RfQkxLTk8s CkBAIC00NzksNyArNDc5LDcgQEAgZ2lzdF9pbmRleHNvcnRidWlsZChHSVNUQnVpbGRTdGF0ZSAq c3RhdGUpCiAJICogc3RpbGwgbm90IGJlIG9uIGRpc2sgd2hlbiB0aGUgY3Jhc2ggb2NjdXJzLgog CSAqLwogCWlmIChSZWxhdGlvbk5lZWRzV0FMKHN0YXRlLT5pbmRleHJlbCkpCi0JCXNtZ3JpbW1l ZHN5bmMoUmVsYXRpb25HZXRTbWdyKHN0YXRlLT5pbmRleHJlbCksIE1BSU5fRk9SS05VTSk7CisJ CXNtZ3JpbW1lZHN5bmMoUmVsYXRpb25HZXRTbWdyKHN0YXRlLT5pbmRleHJlbCwgTUFJTl9GT1JL TlVNKSk7CiB9CiAKIC8qCkBAIC02NTcsNyArNjU3LDcgQEAgZ2lzdF9pbmRleHNvcnRidWlsZF9m bHVzaF9yZWFkeV9wYWdlcyhHSVNUQnVpbGRTdGF0ZSAqc3RhdGUpCiAKIAkJUGFnZVNldExTTihw YWdlLCBHaXN0QnVpbGRMU04pOwogCQlQYWdlU2V0Q2hlY2tzdW1JbnBsYWNlKHBhZ2UsIGJsa25v KTsKLQkJc21ncmV4dGVuZChSZWxhdGlvbkdldFNtZ3Ioc3RhdGUtPmluZGV4cmVsKSwgTUFJTl9G T1JLTlVNLCBibGtubywgcGFnZSwKKwkJc21ncmV4dGVuZChSZWxhdGlvbkdldFNtZ3Ioc3RhdGUt PmluZGV4cmVsLCBNQUlOX0ZPUktOVU0pLCBibGtubywgcGFnZSwKIAkJCQkgICB0cnVlKTsKIAog CQlzdGF0ZS0+cGFnZXNfd3JpdHRlbisrOwpAQCAtOTQzLDggKzk0Myw3IEBAIGdpc3RCdWlsZENh bGxiYWNrKFJlbGF0aW9uIGluZGV4LAogCSAqLwogCWlmICgoYnVpbGRzdGF0ZS0+YnVpbGRNb2Rl ID09IEdJU1RfQlVGRkVSSU5HX0FVVE8gJiYKIAkJIGJ1aWxkc3RhdGUtPmluZHR1cGxlcyAlIEJV RkZFUklOR19NT0RFX1NXSVRDSF9DSEVDS19TVEVQID09IDAgJiYKLQkJIGVmZmVjdGl2ZV9jYWNo ZV9zaXplIDwgc21ncm5ibG9ja3MoUmVsYXRpb25HZXRTbWdyKGluZGV4KSwKLQkJCQkJCQkJCQkJ TUFJTl9GT1JLTlVNKSkgfHwKKwkJIGVmZmVjdGl2ZV9jYWNoZV9zaXplIDwgc21ncm5ibG9ja3Mo UmVsYXRpb25HZXRTbWdyKGluZGV4LCBNQUlOX0ZPUktOVU0pKSkgfHwKIAkJKGJ1aWxkc3RhdGUt PmJ1aWxkTW9kZSA9PSBHSVNUX0JVRkZFUklOR19TVEFUUyAmJgogCQkgYnVpbGRzdGF0ZS0+aW5k dHVwbGVzID49IEJVRkZFUklOR19NT0RFX1RVUExFX1NJWkVfU1RBVFNfVEFSR0VUKSkKIAl7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYwppbmRleCA1NWIyOTI5YWQ1MS4uNGFhODdkNDc1ZDUg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYwpAQCAtMTAzMCw3ICsxMDMwLDcgQEAgX2hh c2hfYWxsb2NfYnVja2V0cyhSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIGZpcnN0YmxvY2ssIHVp bnQzMiBuYmxvY2tzKQogCQkJCQl0cnVlKTsKIAogCVBhZ2VTZXRDaGVja3N1bUlucGxhY2UocGFn ZSwgbGFzdGJsb2NrKTsKLQlzbWdyZXh0ZW5kKFJlbGF0aW9uR2V0U21ncihyZWwpLCBNQUlOX0ZP UktOVU0sIGxhc3RibG9jaywgemVyb2J1Zi5kYXRhLAorCXNtZ3JleHRlbmQoUmVsYXRpb25HZXRT bWdyKHJlbCwgTUFJTl9GT1JLTlVNKSwgbGFzdGJsb2NrLCB6ZXJvYnVmLmRhdGEsCiAJCQkgICBm YWxzZSk7CiAKIAlyZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFu ZGxlci5jCmluZGV4IGFiMWJjZjM1MjJkLi4wNjAxZDQ3MzVmYiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC01NzIsNyArNTcyLDcgQEAgaGVhcGFtX3JlbGF0 aW9uX3NldF9uZXdfZmlsZWxvY2F0b3IoUmVsYXRpb24gcmVsLAogCQkJCQkJCQkJVHJhbnNhY3Rp b25JZCAqZnJlZXplWGlkLAogCQkJCQkJCQkJTXVsdGlYYWN0SWQgKm1pbm11bHRpKQogewotCVNN Z3JSZWxhdGlvbiBzcmVsOworCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOwogCiAJLyoKIAkgKiBJbml0 aWFsaXplIHRvIHRoZSBtaW5pbXVtIFhJRCB0aGF0IGNvdWxkIHB1dCB0dXBsZXMgaW4gdGhlIHRh YmxlLiBXZQpAQCAtNTkxLDcgKzU5MSw3IEBAIGhlYXBhbV9yZWxhdGlvbl9zZXRfbmV3X2ZpbGVs b2NhdG9yKFJlbGF0aW9uIHJlbCwKIAkgKi8KIAkqbWlubXVsdGkgPSBHZXRPbGRlc3RNdWx0aVhh Y3RJZCgpOwogCi0Jc3JlbCA9IFJlbGF0aW9uQ3JlYXRlU3RvcmFnZSgqbmV3cmxvY2F0b3IsIHBl cnNpc3RlbmNlLCB0cnVlKTsKKwlzZmlsZSA9IFJlbGF0aW9uQ3JlYXRlU3RvcmFnZSgqbmV3cmxv Y2F0b3IsIHBlcnNpc3RlbmNlLCB0cnVlKTsKIAogCS8qCiAJICogSWYgcmVxdWlyZWQsIHNldCB1 cCBhbiBpbml0IGZvcmsgZm9yIGFuIHVubG9nZ2VkIHRhYmxlIHNvIHRoYXQgaXQgY2FuCkBAIC02 MDQsMTUgKzYwNCwxOCBAQCBoZWFwYW1fcmVsYXRpb25fc2V0X25ld19maWxlbG9jYXRvcihSZWxh dGlvbiByZWwsCiAJICovCiAJaWYgKHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1VOTE9H R0VEKQogCXsKKwkJU01nckZpbGVIYW5kbGUgc2ZpbGVfaW5pdDsKKwogCQlBc3NlcnQocmVsLT5y ZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9SRUxBVElPTiB8fAogCQkJICAgcmVsLT5yZF9yZWwt PnJlbGtpbmQgPT0gUkVMS0lORF9NQVRWSUVXIHx8CiAJCQkgICByZWwtPnJkX3JlbC0+cmVsa2lu ZCA9PSBSRUxLSU5EX1RPQVNUVkFMVUUpOwotCQlzbWdyY3JlYXRlKHNyZWwsIElOSVRfRk9SS05V TSwgZmFsc2UpOworCQlzZmlsZV9pbml0ID0gc21ncm9wZW4oKm5ld3Jsb2NhdG9yLCBJbnZhbGlk QmFja2VuZElkLCBJTklUX0ZPUktOVU0pOworCQlzbWdyY3JlYXRlKHNmaWxlX2luaXQsIGZhbHNl KTsKIAkJbG9nX3NtZ3JjcmVhdGUobmV3cmxvY2F0b3IsIElOSVRfRk9SS05VTSk7Ci0JCXNtZ3Jp bW1lZHN5bmMoc3JlbCwgSU5JVF9GT1JLTlVNKTsKKwkJc21ncmltbWVkc3luYyhzZmlsZSk7CiAJ fQogCi0Jc21ncmNsb3NlKHNyZWwpOworCXNtZ3JjbG9zZShzZmlsZSk7CiB9CiAKIHN0YXRpYyB2 b2lkCkBAIC02MjQsOSArNjI3LDcgQEAgaGVhcGFtX3JlbGF0aW9uX25vbnRyYW5zYWN0aW9uYWxf dHJ1bmNhdGUoUmVsYXRpb24gcmVsKQogc3RhdGljIHZvaWQKIGhlYXBhbV9yZWxhdGlvbl9jb3B5 X2RhdGEoUmVsYXRpb24gcmVsLCBjb25zdCBSZWxGaWxlTG9jYXRvciAqbmV3cmxvY2F0b3IpCiB7 Ci0JU01nclJlbGF0aW9uIGRzdHJlbDsKLQotCWRzdHJlbCA9IHNtZ3JvcGVuKCpuZXdybG9jYXRv ciwgcmVsLT5yZF9iYWNrZW5kKTsKKwlTTWdyRmlsZUhhbmRsZSBkc3RtYWluOwogCiAJLyoKIAkg KiBTaW5jZSB3ZSBjb3B5IHRoZSBmaWxlIGRpcmVjdGx5IHdpdGhvdXQgbG9va2luZyBhdCB0aGUg c2hhcmVkIGJ1ZmZlcnMsCkBAIC02NDYsMTYgKzY0NywyMSBAQCBoZWFwYW1fcmVsYXRpb25fY29w eV9kYXRhKFJlbGF0aW9uIHJlbCwgY29uc3QgUmVsRmlsZUxvY2F0b3IgKm5ld3Jsb2NhdG9yKQog CVJlbGF0aW9uQ3JlYXRlU3RvcmFnZSgqbmV3cmxvY2F0b3IsIHJlbC0+cmRfcmVsLT5yZWxwZXJz aXN0ZW5jZSwgdHJ1ZSk7CiAKIAkvKiBjb3B5IG1haW4gZm9yayAqLwotCVJlbGF0aW9uQ29weVN0 b3JhZ2UoUmVsYXRpb25HZXRTbWdyKHJlbCksIGRzdHJlbCwgTUFJTl9GT1JLTlVNLAorCWRzdG1h aW4gPSBzbWdyb3BlbigqbmV3cmxvY2F0b3IsIHJlbC0+cmRfYmFja2VuZCwgTUFJTl9GT1JLTlVN KTsKKwlSZWxhdGlvbkNvcHlTdG9yYWdlKFJlbGF0aW9uR2V0U21ncihyZWwsIE1BSU5fRk9SS05V TSksIGRzdG1haW4sCiAJCQkJCQlyZWwtPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UpOwogCiAJLyog Y29weSB0aG9zZSBleHRyYSBmb3JrcyB0aGF0IGV4aXN0ICovCiAJZm9yIChGb3JrTnVtYmVyIGZv cmtOdW0gPSBNQUlOX0ZPUktOVU0gKyAxOwogCQkgZm9ya051bSA8PSBNQVhfRk9SS05VTTsgZm9y a051bSsrKQogCXsKLQkJaWYgKHNtZ3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKHJlbCksIGZvcmtO dW0pKQorCQlTTWdyRmlsZUhhbmRsZSBzcmNfZm9yayA9IFJlbGF0aW9uR2V0U21ncihyZWwsIGZv cmtOdW0pOworCisJCWlmIChzbWdyZXhpc3RzKHNyY19mb3JrKSkKIAkJewotCQkJc21ncmNyZWF0 ZShkc3RyZWwsIGZvcmtOdW0sIGZhbHNlKTsKKwkJCVNNZ3JGaWxlSGFuZGxlIGRzdF9mb3JrID0g c21ncm9wZW4oKm5ld3Jsb2NhdG9yLCByZWwtPnJkX2JhY2tlbmQsIGZvcmtOdW0pOworCisJCQlz bWdyY3JlYXRlKGRzdF9mb3JrLCBmYWxzZSk7CiAKIAkJCS8qCiAJCQkgKiBXQUwgbG9nIGNyZWF0 aW9uIGlmIHRoZSByZWxhdGlvbiBpcyBwZXJzaXN0ZW50LCBvciB0aGlzIGlzIHRoZQpAQCAtNjY1 LDcgKzY3MSw3IEBAIGhlYXBhbV9yZWxhdGlvbl9jb3B5X2RhdGEoUmVsYXRpb24gcmVsLCBjb25z dCBSZWxGaWxlTG9jYXRvciAqbmV3cmxvY2F0b3IpCiAJCQkJKHJlbC0+cmRfcmVsLT5yZWxwZXJz aXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9VTkxPR0dFRCAmJgogCQkJCSBmb3JrTnVtID09IElO SVRfRk9SS05VTSkpCiAJCQkJbG9nX3NtZ3JjcmVhdGUobmV3cmxvY2F0b3IsIGZvcmtOdW0pOwot CQkJUmVsYXRpb25Db3B5U3RvcmFnZShSZWxhdGlvbkdldFNtZ3IocmVsKSwgZHN0cmVsLCBmb3Jr TnVtLAorCQkJUmVsYXRpb25Db3B5U3RvcmFnZShSZWxhdGlvbkdldFNtZ3IocmVsLCBmb3JrTnVt KSwgZHN0X2ZvcmssCiAJCQkJCQkJCXJlbC0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSk7CiAJCX0K IAl9CkBAIC02NzMsNyArNjc5LDcgQEAgaGVhcGFtX3JlbGF0aW9uX2NvcHlfZGF0YShSZWxhdGlv biByZWwsIGNvbnN0IFJlbEZpbGVMb2NhdG9yICpuZXdybG9jYXRvcikKIAogCS8qIGRyb3Agb2xk IHJlbGF0aW9uLCBhbmQgY2xvc2UgbmV3IG9uZSAqLwogCVJlbGF0aW9uRHJvcFN0b3JhZ2UocmVs KTsKLQlzbWdyY2xvc2UoZHN0cmVsKTsKKwlzbWdyY2xvc2UoZHN0bWFpbik7CiB9CiAKIHN0YXRp YyB2b2lkCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9yZXdyaXRlaGVhcC5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvcmV3cml0ZWhlYXAuYwppbmRleCAyZmU5ZTQ4ZTUw MC4uMGVlZWYyMDVhMDQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Jld3Jp dGVoZWFwLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvcmV3cml0ZWhlYXAuYwpAQCAt MzI1LDcgKzMyNSw3IEBAIGVuZF9oZWFwX3Jld3JpdGUoUmV3cml0ZVN0YXRlIHN0YXRlKQogCiAJ CVBhZ2VTZXRDaGVja3N1bUlucGxhY2Uoc3RhdGUtPnJzX2J1ZmZlciwgc3RhdGUtPnJzX2Jsb2Nr bm8pOwogCi0JCXNtZ3JleHRlbmQoUmVsYXRpb25HZXRTbWdyKHN0YXRlLT5yc19uZXdfcmVsKSwg TUFJTl9GT1JLTlVNLAorCQlzbWdyZXh0ZW5kKFJlbGF0aW9uR2V0U21ncihzdGF0ZS0+cnNfbmV3 X3JlbCwgTUFJTl9GT1JLTlVNKSwKIAkJCQkgICBzdGF0ZS0+cnNfYmxvY2tubywgKGNoYXIgKikg c3RhdGUtPnJzX2J1ZmZlciwgdHJ1ZSk7CiAJfQogCkBAIC0zMzcsNyArMzM3LDcgQEAgZW5kX2hl YXBfcmV3cml0ZShSZXdyaXRlU3RhdGUgc3RhdGUpCiAJICogd3JvdGUgYmVmb3JlIHRoZSBjaGVj a3BvaW50LgogCSAqLwogCWlmIChSZWxhdGlvbk5lZWRzV0FMKHN0YXRlLT5yc19uZXdfcmVsKSkK LQkJc21ncmltbWVkc3luYyhSZWxhdGlvbkdldFNtZ3Ioc3RhdGUtPnJzX25ld19yZWwpLCBNQUlO X0ZPUktOVU0pOworCQlzbWdyaW1tZWRzeW5jKFJlbGF0aW9uR2V0U21ncihzdGF0ZS0+cnNfbmV3 X3JlbCwgTUFJTl9GT1JLTlVNKSk7CiAKIAlsb2dpY2FsX2VuZF9oZWFwX3Jld3JpdGUoc3RhdGUp OwogCkBAIC02OTEsNyArNjkxLDcgQEAgcmF3X2hlYXBfaW5zZXJ0KFJld3JpdGVTdGF0ZSBzdGF0 ZSwgSGVhcFR1cGxlIHR1cCkKIAkJCSAqLwogCQkJUGFnZVNldENoZWNrc3VtSW5wbGFjZShwYWdl LCBzdGF0ZS0+cnNfYmxvY2tubyk7CiAKLQkJCXNtZ3JleHRlbmQoUmVsYXRpb25HZXRTbWdyKHN0 YXRlLT5yc19uZXdfcmVsKSwgTUFJTl9GT1JLTlVNLAorCQkJc21ncmV4dGVuZChSZWxhdGlvbkdl dFNtZ3Ioc3RhdGUtPnJzX25ld19yZWwsIE1BSU5fRk9SS05VTSksCiAJCQkJCSAgIHN0YXRlLT5y c19ibG9ja25vLCAoY2hhciAqKSBwYWdlLCB0cnVlKTsKIAogCQkJc3RhdGUtPnJzX2Jsb2Nrbm8r KzsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAuYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAuYwppbmRleCA0ZWQ3MDI3NWUy Mi4uZjQ4NDE2ZDFlMDYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2li aWxpdHltYXAuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92aXNpYmlsaXR5bWFwLmMK QEAgLTQ2NSw3ICs0NjUsNyBAQCB2aXNpYmlsaXR5bWFwX3ByZXBhcmVfdHJ1bmNhdGUoUmVsYXRp b24gcmVsLCBCbG9ja051bWJlciBuaGVhcGJsb2NrcykKIAkgKiBJZiBubyB2aXNpYmlsaXR5IG1h cCBoYXMgYmVlbiBjcmVhdGVkIHlldCBmb3IgdGhpcyByZWxhdGlvbiwgdGhlcmUncwogCSAqIG5v dGhpbmcgdG8gdHJ1bmNhdGUuCiAJICovCi0JaWYgKCFzbWdyZXhpc3RzKFJlbGF0aW9uR2V0U21n cihyZWwpLCBWSVNJQklMSVRZTUFQX0ZPUktOVU0pKQorCWlmICghc21ncmV4aXN0cyhSZWxhdGlv bkdldFNtZ3IocmVsLCBWSVNJQklMSVRZTUFQX0ZPUktOVU0pKSkKIAkJcmV0dXJuIEludmFsaWRC bG9ja051bWJlcjsKIAogCS8qCkBAIC01MzIsNyArNTMyLDcgQEAgdmlzaWJpbGl0eW1hcF9wcmVw YXJlX3RydW5jYXRlKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgbmhlYXBibG9ja3MpCiAJZWxz ZQogCQluZXduYmxvY2tzID0gdHJ1bmNCbG9jazsKIAotCWlmIChzbWdybmJsb2NrcyhSZWxhdGlv bkdldFNtZ3IocmVsKSwgVklTSUJJTElUWU1BUF9GT1JLTlVNKSA8PSBuZXduYmxvY2tzKQorCWlm IChzbWdybmJsb2NrcyhSZWxhdGlvbkdldFNtZ3IocmVsLCBWSVNJQklMSVRZTUFQX0ZPUktOVU0p KSA8PSBuZXduYmxvY2tzKQogCXsKIAkJLyogbm90aGluZyB0byBkbywgdGhlIGZpbGUgd2FzIGFs cmVhZHkgc21hbGxlciB0aGFuIHJlcXVlc3RlZCBzaXplICovCiAJCXJldHVybiBJbnZhbGlkQmxv Y2tOdW1iZXI7CkBAIC01NTEsMjkgKzU1MSwyOSBAQCBzdGF0aWMgQnVmZmVyCiB2bV9yZWFkYnVm KFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgYmxrbm8sIGJvb2wgZXh0ZW5kKQogewogCUJ1ZmZl cgkJYnVmOwotCVNNZ3JSZWxhdGlvbiByZWxuOworCVNNZ3JGaWxlSGFuZGxlIHZtX3NmaWxlOwog CiAJLyoKIAkgKiBDYXV0aW9uOiByZS11c2luZyB0aGlzIHNtZ3IgcG9pbnRlciBjb3VsZCBmYWls IGlmIHRoZSByZWxjYWNoZSBlbnRyeQogCSAqIGdldHMgY2xvc2VkLiAgSXQncyBzYWZlIGFzIGxv bmcgYXMgd2Ugb25seSBkbyBzbWdyLWxldmVsIG9wZXJhdGlvbnMKIAkgKiBiZXR3ZWVuIGhlcmUg YW5kIHRoZSBsYXN0IHVzZSBvZiB0aGUgcG9pbnRlci4KIAkgKi8KLQlyZWxuID0gUmVsYXRpb25H ZXRTbWdyKHJlbCk7CisJdm1fc2ZpbGUgPSBSZWxhdGlvbkdldFNtZ3IocmVsLCBWSVNJQklMSVRZ TUFQX0ZPUktOVU0pOwogCiAJLyoKIAkgKiBJZiB3ZSBoYXZlbid0IGNhY2hlZCB0aGUgc2l6ZSBv ZiB0aGUgdmlzaWJpbGl0eSBtYXAgZm9yayB5ZXQsIGNoZWNrIGl0CiAJICogZmlyc3QuCiAJICov Ci0JaWYgKHJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbVklTSUJJTElUWU1BUF9GT1JLTlVNXSA9 PSBJbnZhbGlkQmxvY2tOdW1iZXIpCisJaWYgKHZtX3NmaWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tz ID09IEludmFsaWRCbG9ja051bWJlcikKIAl7Ci0JCWlmIChzbWdyZXhpc3RzKHJlbG4sIFZJU0lC SUxJVFlNQVBfRk9SS05VTSkpCi0JCQlzbWdybmJsb2NrcyhyZWxuLCBWSVNJQklMSVRZTUFQX0ZP UktOVU0pOworCQlpZiAoc21ncmV4aXN0cyh2bV9zZmlsZSkpCisJCQlzbWdybmJsb2Nrcyh2bV9z ZmlsZSk7CiAJCWVsc2UKLQkJCXJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbVklTSUJJTElUWU1B UF9GT1JLTlVNXSA9IDA7CisJCQl2bV9zZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9IDA7CiAJ fQogCiAJLyogSGFuZGxlIHJlcXVlc3RzIGJleW9uZCBFT0YgKi8KLQlpZiAoYmxrbm8gPj0gcmVs bi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tWSVNJQklMSVRZTUFQX0ZPUktOVU1dKQorCWlmIChibGtu byA+PSB2bV9zZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcykKIAl7CiAJCWlmIChleHRlbmQpCiAJ CQl2bV9leHRlbmQocmVsLCBibGtubyArIDEpOwpAQCAtNjAwLDggKzYwMCw3IEBAIHZtX3JlYWRi dWYoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBibGtubywgYm9vbCBleHRlbmQpCiAJICogbG9u ZyBhcyBpdCBkb2Vzbid0IGRlcGVuZCBvbiB0aGUgcGFnZSBoZWFkZXIgaGF2aW5nIGNvcnJlY3Qg Y29udGVudHMuCiAJICogQ3VycmVudCB1c2FnZSBpcyBzYWZlIGJlY2F1c2UgUGFnZUdldENvbnRl bnRzKCkgZG9lcyBub3QgcmVxdWlyZSB0aGF0LgogCSAqLwotCWJ1ZiA9IFJlYWRCdWZmZXJFeHRl bmRlZChyZWwsIFZJU0lCSUxJVFlNQVBfRk9SS05VTSwgYmxrbm8sCi0JCQkJCQkJIFJCTV9aRVJP X09OX0VSUk9SLCBOVUxMKTsKKwlidWYgPSBSZWFkQnVmZmVyRXh0ZW5kZWQocmVsLCBWSVNJQklM SVRZTUFQX0ZPUktOVU0sIGJsa25vLCBSQk1fWkVST19PTl9FUlJPUiwgTlVMTCk7CiAJaWYgKFBh Z2VJc05ldyhCdWZmZXJHZXRQYWdlKGJ1ZikpKQogCXsKIAkJTG9ja0J1ZmZlcihidWYsIEJVRkZF Ul9MT0NLX0VYQ0xVU0lWRSk7CkBAIC02MjEsNyArNjIwLDcgQEAgdm1fZXh0ZW5kKFJlbGF0aW9u IHJlbCwgQmxvY2tOdW1iZXIgdm1fbmJsb2NrcykKIHsKIAlCbG9ja051bWJlciB2bV9uYmxvY2tz X25vdzsKIAlQR0FsaWduZWRCbG9jayBwZzsKLQlTTWdyUmVsYXRpb24gcmVsbjsKKwlTTWdyRmls ZUhhbmRsZSB2bV9zZmlsZTsKIAogCVBhZ2VJbml0KChQYWdlKSBwZy5kYXRhLCBCTENLU1osIDAp OwogCkBAIC02NDIsMjcgKzY0MSwyNyBAQCB2bV9leHRlbmQoUmVsYXRpb24gcmVsLCBCbG9ja051 bWJlciB2bV9uYmxvY2tzKQogCSAqIGdldHMgY2xvc2VkLiAgSXQncyBzYWZlIGFzIGxvbmcgYXMg d2Ugb25seSBkbyBzbWdyLWxldmVsIG9wZXJhdGlvbnMKIAkgKiBiZXR3ZWVuIGhlcmUgYW5kIHRo ZSBsYXN0IHVzZSBvZiB0aGUgcG9pbnRlci4KIAkgKi8KLQlyZWxuID0gUmVsYXRpb25HZXRTbWdy KHJlbCk7CisJdm1fc2ZpbGUgPSBSZWxhdGlvbkdldFNtZ3IocmVsLCBWSVNJQklMSVRZTUFQX0ZP UktOVU0pOwogCiAJLyoKIAkgKiBDcmVhdGUgdGhlIGZpbGUgZmlyc3QgaWYgaXQgZG9lc24ndCBl eGlzdC4gIElmIHNtZ3Jfdm1fbmJsb2NrcyBpcwogCSAqIHBvc2l0aXZlIHRoZW4gaXQgbXVzdCBl eGlzdCwgbm8gbmVlZCBmb3IgYW4gc21ncmV4aXN0cyBjYWxsLgogCSAqLwotCWlmICgocmVsbi0+ c21ncl9jYWNoZWRfbmJsb2Nrc1tWSVNJQklMSVRZTUFQX0ZPUktOVU1dID09IDAgfHwKLQkJIHJl bG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbVklTSUJJTElUWU1BUF9GT1JLTlVNXSA9PSBJbnZhbGlk QmxvY2tOdW1iZXIpICYmCi0JCSFzbWdyZXhpc3RzKHJlbG4sIFZJU0lCSUxJVFlNQVBfRk9SS05V TSkpCi0JCXNtZ3JjcmVhdGUocmVsbiwgVklTSUJJTElUWU1BUF9GT1JLTlVNLCBmYWxzZSk7CisJ aWYgKCh2bV9zZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9PSAwIHx8CisJCSB2bV9zZmlsZS0+ c21ncl9jYWNoZWRfbmJsb2NrcyA9PSBJbnZhbGlkQmxvY2tOdW1iZXIpICYmCisJCSFzbWdyZXhp c3RzKHZtX3NmaWxlKSkKKwkJc21ncmNyZWF0ZSh2bV9zZmlsZSwgZmFsc2UpOwogCiAJLyogSW52 YWxpZGF0ZSBjYWNoZSBzbyB0aGF0IHNtZ3JuYmxvY2tzKCkgYXNrcyB0aGUga2VybmVsLiAqLwot CXJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbVklTSUJJTElUWU1BUF9GT1JLTlVNXSA9IEludmFs aWRCbG9ja051bWJlcjsKLQl2bV9uYmxvY2tzX25vdyA9IHNtZ3JuYmxvY2tzKHJlbG4sIFZJU0lC SUxJVFlNQVBfRk9SS05VTSk7CisJdm1fc2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3MgPSBJbnZh bGlkQmxvY2tOdW1iZXI7CisJdm1fbmJsb2Nrc19ub3cgPSBzbWdybmJsb2Nrcyh2bV9zZmlsZSk7 CiAKIAkvKiBOb3cgZXh0ZW5kIHRoZSBmaWxlICovCiAJd2hpbGUgKHZtX25ibG9ja3Nfbm93IDwg dm1fbmJsb2NrcykKIAl7CiAJCVBhZ2VTZXRDaGVja3N1bUlucGxhY2UoKFBhZ2UpIHBnLmRhdGEs IHZtX25ibG9ja3Nfbm93KTsKIAotCQlzbWdyZXh0ZW5kKHJlbG4sIFZJU0lCSUxJVFlNQVBfRk9S S05VTSwgdm1fbmJsb2Nrc19ub3csIHBnLmRhdGEsIGZhbHNlKTsKKwkJc21ncmV4dGVuZCh2bV9z ZmlsZSwgdm1fbmJsb2Nrc19ub3csIHBnLmRhdGEsIGZhbHNlKTsKIAkJdm1fbmJsb2Nrc19ub3cr KzsKIAl9CiAKQEAgLTY3Myw3ICs2NzIsNyBAQCB2bV9leHRlbmQoUmVsYXRpb24gcmVsLCBCbG9j a051bWJlciB2bV9uYmxvY2tzKQogCSAqIHRvIGtlZXAgY2hlY2tpbmcgZm9yIGNyZWF0aW9uIG9y IGV4dGVuc2lvbiBvZiB0aGUgZmlsZSwgd2hpY2ggaGFwcGVucwogCSAqIGluZnJlcXVlbnRseS4K IAkgKi8KLQlDYWNoZUludmFsaWRhdGVTbWdyKHJlbG4tPnNtZ3JfcmxvY2F0b3IpOworCUNhY2hl SW52YWxpZGF0ZVNtZ3IocmVsLT5yZF9sb2NhdG9yLCByZWwtPnJkX2JhY2tlbmQpOwogCiAJVW5s b2NrUmVsYXRpb25Gb3JFeHRlbnNpb24ocmVsLCBFeGNsdXNpdmVMb2NrKTsKIH0KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHJlZS5jCmluZGV4IGI1MmVjYThmMzhiLi42NDQ0MzFhN2UzYyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCkBAIC0xNjQsOSArMTY0LDkgQEAgYnRidWlsZGVtcHR5 KFJlbGF0aW9uIGluZGV4KQogCSAqIHRoaXMgZXZlbiB3aGVuIHdhbF9sZXZlbD1taW5pbWFsLgog CSAqLwogCVBhZ2VTZXRDaGVja3N1bUlucGxhY2UobWV0YXBhZ2UsIEJUUkVFX01FVEFQQUdFKTsK LQlzbWdyd3JpdGUoUmVsYXRpb25HZXRTbWdyKGluZGV4KSwgSU5JVF9GT1JLTlVNLCBCVFJFRV9N RVRBUEFHRSwKKwlzbWdyd3JpdGUoUmVsYXRpb25HZXRTbWdyKGluZGV4LCBJTklUX0ZPUktOVU0p LCBCVFJFRV9NRVRBUEFHRSwKIAkJCSAgKGNoYXIgKikgbWV0YXBhZ2UsIHRydWUpOwotCWxvZ19u ZXdwYWdlKCZSZWxhdGlvbkdldFNtZ3IoaW5kZXgpLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IsIElO SVRfRk9SS05VTSwKKwlsb2dfbmV3cGFnZSgmaW5kZXgtPnJkX2xvY2F0b3IsIElOSVRfRk9SS05V TSwKIAkJCQlCVFJFRV9NRVRBUEFHRSwgbWV0YXBhZ2UsIHRydWUpOwogCiAJLyoKQEAgLTE3NCw3 ICsxNzQsNyBAQCBidGJ1aWxkZW1wdHkoUmVsYXRpb24gaW5kZXgpCiAJICogd3JpdGUgZGlkIG5v dCBnbyB0aHJvdWdoIHNoYXJlZF9idWZmZXJzIGFuZCB0aGVyZWZvcmUgYSBjb25jdXJyZW50CiAJ ICogY2hlY2twb2ludCBtYXkgaGF2ZSBtb3ZlZCB0aGUgcmVkbyBwb2ludGVyIHBhc3Qgb3VyIHhs b2cgcmVjb3JkLgogCSAqLwotCXNtZ3JpbW1lZHN5bmMoUmVsYXRpb25HZXRTbWdyKGluZGV4KSwg SU5JVF9GT1JLTlVNKTsKKwlzbWdyaW1tZWRzeW5jKFJlbGF0aW9uR2V0U21ncihpbmRleCwgSU5J VF9GT1JLTlVNKSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL25idHNvcnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c29ydC5jCmluZGV4 IDUwMWUwMTFjZTFlLi44N2JiOWY1MmI0ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRzb3J0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzb3J0 LmMKQEAgLTY2Miw3ICs2NjIsNyBAQCBfYnRfYmx3cml0ZXBhZ2UoQlRXcml0ZVN0YXRlICp3c3Rh dGUsIFBhZ2UgcGFnZSwgQmxvY2tOdW1iZXIgYmxrbm8pCiAJCWlmICghd3N0YXRlLT5idHdzX3pl cm9wYWdlKQogCQkJd3N0YXRlLT5idHdzX3plcm9wYWdlID0gKFBhZ2UpIHBhbGxvYzAoQkxDS1Na KTsKIAkJLyogZG9uJ3Qgc2V0IGNoZWNrc3VtIGZvciBhbGwtemVybyBwYWdlICovCi0JCXNtZ3Jl eHRlbmQoUmVsYXRpb25HZXRTbWdyKHdzdGF0ZS0+aW5kZXgpLCBNQUlOX0ZPUktOVU0sCisJCXNt Z3JleHRlbmQoUmVsYXRpb25HZXRTbWdyKHdzdGF0ZS0+aW5kZXgsIE1BSU5fRk9SS05VTSksCiAJ CQkJICAgd3N0YXRlLT5idHdzX3BhZ2VzX3dyaXR0ZW4rKywKIAkJCQkgICAoY2hhciAqKSB3c3Rh dGUtPmJ0d3NfemVyb3BhZ2UsCiAJCQkJICAgdHJ1ZSk7CkBAIC02NzcsMTQgKzY3NywxNCBAQCBf YnRfYmx3cml0ZXBhZ2UoQlRXcml0ZVN0YXRlICp3c3RhdGUsIFBhZ2UgcGFnZSwgQmxvY2tOdW1i ZXIgYmxrbm8pCiAJaWYgKGJsa25vID09IHdzdGF0ZS0+YnR3c19wYWdlc193cml0dGVuKQogCXsK IAkJLyogZXh0ZW5kaW5nIHRoZSBmaWxlLi4uICovCi0JCXNtZ3JleHRlbmQoUmVsYXRpb25HZXRT bWdyKHdzdGF0ZS0+aW5kZXgpLCBNQUlOX0ZPUktOVU0sIGJsa25vLAorCQlzbWdyZXh0ZW5kKFJl bGF0aW9uR2V0U21ncih3c3RhdGUtPmluZGV4LCBNQUlOX0ZPUktOVU0pLCBibGtubywKIAkJCQkg ICAoY2hhciAqKSBwYWdlLCB0cnVlKTsKIAkJd3N0YXRlLT5idHdzX3BhZ2VzX3dyaXR0ZW4rKzsK IAl9CiAJZWxzZQogCXsKIAkJLyogb3ZlcndyaXRpbmcgYSBibG9jayB3ZSB6ZXJvLWZpbGxlZCBi ZWZvcmUgKi8KLQkJc21ncndyaXRlKFJlbGF0aW9uR2V0U21ncih3c3RhdGUtPmluZGV4KSwgTUFJ Tl9GT1JLTlVNLCBibGtubywKKwkJc21ncndyaXRlKFJlbGF0aW9uR2V0U21ncih3c3RhdGUtPmlu ZGV4LCBNQUlOX0ZPUktOVU0pLCBibGtubywKIAkJCQkgIChjaGFyICopIHBhZ2UsIHRydWUpOwog CX0KIApAQCAtMTQzMSw3ICsxNDMxLDcgQEAgX2J0X2xvYWQoQlRXcml0ZVN0YXRlICp3c3RhdGUs IEJUU3Bvb2wgKmJ0c3Bvb2wsIEJUU3Bvb2wgKmJ0c3Bvb2wyKQogCSAqIHN0aWxsIG5vdCBiZSBv biBkaXNrIHdoZW4gdGhlIGNyYXNoIG9jY3Vycy4KIAkgKi8KIAlpZiAod3N0YXRlLT5idHdzX3Vz ZV93YWwpCi0JCXNtZ3JpbW1lZHN5bmMoUmVsYXRpb25HZXRTbWdyKHdzdGF0ZS0+aW5kZXgpLCBN QUlOX0ZPUktOVU0pOworCQlzbWdyaW1tZWRzeW5jKFJlbGF0aW9uR2V0U21ncih3c3RhdGUtPmlu ZGV4LCBNQUlOX0ZPUktOVU0pKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9zcGdpc3Qvc3BnaW5zZXJ0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ2lu c2VydC5jCmluZGV4IGM2ODIxYjU5NTI0Li43NWViMDk1NDNkOSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGdpbnNlcnQuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv c3BnaXN0L3NwZ2luc2VydC5jCkBAIC0xNTUsOCArMTU1LDExIEBAIHNwZ2J1aWxkKFJlbGF0aW9u IGhlYXAsIFJlbGF0aW9uIGluZGV4LCBJbmRleEluZm8gKmluZGV4SW5mbykKIHZvaWQKIHNwZ2J1 aWxkZW1wdHkoUmVsYXRpb24gaW5kZXgpCiB7CisJU01nckZpbGVIYW5kbGUgc2ZpbGU7CiAJUGFn ZQkJcGFnZTsKIAorCXNmaWxlID0gUmVsYXRpb25HZXRTbWdyKGluZGV4LCBJTklUX0ZPUktOVU0p OworCiAJLyogQ29uc3RydWN0IG1ldGFwYWdlLiAqLwogCXBhZ2UgPSAoUGFnZSkgcGFsbG9jKEJM Q0tTWik7CiAJU3BHaXN0SW5pdE1ldGFwYWdlKHBhZ2UpOwpAQCAtMTY5LDI3ICsxNzIsMjcgQEAg c3BnYnVpbGRlbXB0eShSZWxhdGlvbiBpbmRleCkKIAkgKiByZXBsYXllZC4KIAkgKi8KIAlQYWdl U2V0Q2hlY2tzdW1JbnBsYWNlKHBhZ2UsIFNQR0lTVF9NRVRBUEFHRV9CTEtOTyk7Ci0Jc21ncndy aXRlKFJlbGF0aW9uR2V0U21ncihpbmRleCksIElOSVRfRk9SS05VTSwgU1BHSVNUX01FVEFQQUdF X0JMS05PLAorCXNtZ3J3cml0ZShzZmlsZSwgU1BHSVNUX01FVEFQQUdFX0JMS05PLAogCQkJICAo Y2hhciAqKSBwYWdlLCB0cnVlKTsKLQlsb2dfbmV3cGFnZSgmKFJlbGF0aW9uR2V0U21ncihpbmRl eCkpLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IsIElOSVRfRk9SS05VTSwKKwlsb2dfbmV3cGFnZSgm aW5kZXgtPnJkX2xvY2F0b3IsIElOSVRfRk9SS05VTSwKIAkJCQlTUEdJU1RfTUVUQVBBR0VfQkxL Tk8sIHBhZ2UsIHRydWUpOwogCiAJLyogTGlrZXdpc2UgZm9yIHRoZSByb290IHBhZ2UuICovCiAJ U3BHaXN0SW5pdFBhZ2UocGFnZSwgU1BHSVNUX0xFQUYpOwogCiAJUGFnZVNldENoZWNrc3VtSW5w bGFjZShwYWdlLCBTUEdJU1RfUk9PVF9CTEtOTyk7Ci0Jc21ncndyaXRlKFJlbGF0aW9uR2V0U21n cihpbmRleCksIElOSVRfRk9SS05VTSwgU1BHSVNUX1JPT1RfQkxLTk8sCisJc21ncndyaXRlKHNm aWxlLCBTUEdJU1RfUk9PVF9CTEtOTywKIAkJCSAgKGNoYXIgKikgcGFnZSwgdHJ1ZSk7Ci0JbG9n X25ld3BhZ2UoJihSZWxhdGlvbkdldFNtZ3IoaW5kZXgpKS0+c21ncl9ybG9jYXRvci5sb2NhdG9y LCBJTklUX0ZPUktOVU0sCisJbG9nX25ld3BhZ2UoJmluZGV4LT5yZF9sb2NhdG9yLCBJTklUX0ZP UktOVU0sCiAJCQkJU1BHSVNUX1JPT1RfQkxLTk8sIHBhZ2UsIHRydWUpOwogCiAJLyogTGlrZXdp c2UgZm9yIHRoZSBudWxsLXR1cGxlcyByb290IHBhZ2UuICovCiAJU3BHaXN0SW5pdFBhZ2UocGFn ZSwgU1BHSVNUX0xFQUYgfCBTUEdJU1RfTlVMTFMpOwogCiAJUGFnZVNldENoZWNrc3VtSW5wbGFj ZShwYWdlLCBTUEdJU1RfTlVMTF9CTEtOTyk7Ci0Jc21ncndyaXRlKFJlbGF0aW9uR2V0U21ncihp bmRleCksIElOSVRfRk9SS05VTSwgU1BHSVNUX05VTExfQkxLTk8sCisJc21ncndyaXRlKHNmaWxl LCBTUEdJU1RfTlVMTF9CTEtOTywKIAkJCSAgKGNoYXIgKikgcGFnZSwgdHJ1ZSk7Ci0JbG9nX25l d3BhZ2UoJihSZWxhdGlvbkdldFNtZ3IoaW5kZXgpKS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLCBJ TklUX0ZPUktOVU0sCisJbG9nX25ld3BhZ2UoJmluZGV4LT5yZF9sb2NhdG9yLCBJTklUX0ZPUktO VU0sCiAJCQkJU1BHSVNUX05VTExfQkxLTk8sIHBhZ2UsIHRydWUpOwogCiAJLyoKQEAgLTE5Nyw3 ICsyMDAsNyBAQCBzcGdidWlsZGVtcHR5KFJlbGF0aW9uIGluZGV4KQogCSAqIHdyaXRlcyBkaWQg bm90IGdvIHRocm91Z2ggc2hhcmVkIGJ1ZmZlcnMgYW5kIHRoZXJlZm9yZSBhIGNvbmN1cnJlbnQK IAkgKiBjaGVja3BvaW50IG1heSBoYXZlIG1vdmVkIHRoZSByZWRvIHBvaW50ZXIgcGFzdCBvdXIg eGxvZyByZWNvcmQuCiAJICovCi0Jc21ncmltbWVkc3luYyhSZWxhdGlvbkdldFNtZ3IoaW5kZXgp LCBJTklUX0ZPUktOVU0pOworCXNtZ3JpbW1lZHN5bmMoc2ZpbGUpOwogfQogCiAvKgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90YWJsZS90YWJsZWFtLmMKaW5kZXggMDk0YjI0YzdjOWMuLjViYzJjMzcyNmYxIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKQEAgLTYzMSwxMCArNjMxLDEwIEBAIHRhYmxlX2Js b2NrX3JlbGF0aW9uX3NpemUoUmVsYXRpb24gcmVsLCBGb3JrTnVtYmVyIGZvcmtOdW1iZXIpCiAJ aWYgKGZvcmtOdW1iZXIgPT0gSW52YWxpZEZvcmtOdW1iZXIpCiAJewogCQlmb3IgKGludCBpID0g MDsgaSA8IE1BWF9GT1JLTlVNOyBpKyspCi0JCQluYmxvY2tzICs9IHNtZ3JuYmxvY2tzKFJlbGF0 aW9uR2V0U21ncihyZWwpLCBpKTsKKwkJCW5ibG9ja3MgKz0gc21ncm5ibG9ja3MoUmVsYXRpb25H ZXRTbWdyKHJlbCwgaSkpOwogCX0KIAllbHNlCi0JCW5ibG9ja3MgPSBzbWdybmJsb2NrcyhSZWxh dGlvbkdldFNtZ3IocmVsKSwgZm9ya051bWJlcik7CisJCW5ibG9ja3MgPSBzbWdybmJsb2NrcyhS ZWxhdGlvbkdldFNtZ3IocmVsLCBmb3JrTnVtYmVyKSk7CiAKIAlyZXR1cm4gbmJsb2NrcyAqIEJM Q0tTWjsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cuYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cuYwppbmRleCA3N2Q5ODk0ZGFiMy4uYjZh ZjAxZmNhYTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jbG9nLmMKQEAgLTQxLDYgKzQxLDggQEAK ICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ190cmFjZS5oIgogI2luY2x1ZGUg InBnc3RhdC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCisjaW5jbHVkZSAic3RvcmFn ZS9idWZfaW50ZXJuYWxzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9zeW5jLmgiCiAKQEAgLTU5LDcgKzYxLDcgQEAKIC8qIFdlIG5lZWQgdHdvIGJpdHMg cGVyIHhhY3QsIHNvIGZvdXIgeGFjdHMgZml0IGluIGEgYnl0ZSAqLwogI2RlZmluZSBDTE9HX0JJ VFNfUEVSX1hBQ1QJMgogI2RlZmluZSBDTE9HX1hBQ1RTX1BFUl9CWVRFIDQKLSNkZWZpbmUgQ0xP R19YQUNUU19QRVJfUEFHRSAoQkxDS1NaICogQ0xPR19YQUNUU19QRVJfQllURSkKKyNkZWZpbmUg Q0xPR19YQUNUU19QRVJfUEFHRSAoKEJMQ0tTWiAtIFNpemVPZlBhZ2VIZWFkZXJEYXRhKSAqIENM T0dfWEFDVFNfUEVSX0JZVEUpCiAjZGVmaW5lIENMT0dfWEFDVF9CSVRNQVNLCSgoMSA8PCBDTE9H X0JJVFNfUEVSX1hBQ1QpIC0gMSkKIAogI2RlZmluZSBUcmFuc2FjdGlvbklkVG9QYWdlKHhpZCkJ KCh4aWQpIC8gKFRyYW5zYWN0aW9uSWQpIENMT0dfWEFDVFNfUEVSX1BBR0UpCkBAIC04MSwxNyAr ODMsMTAgQEAKICAqLwogI2RlZmluZSBUSFJFU0hPTERfU1VCVFJBTlNfQ0xPR19PUFQJNQogCi0v KgotICogTGluayB0byBzaGFyZWQtbWVtb3J5IGRhdGEgc3RydWN0dXJlcyBmb3IgQ0xPRyBjb250 cm9sCi0gKi8KLXN0YXRpYyBTbHJ1Q3RsRGF0YSBYYWN0Q3RsRGF0YTsKLQotI2RlZmluZSBYYWN0 Q3RsICgmWGFjdEN0bERhdGEpCiAKLQotc3RhdGljIGludAlaZXJvQ0xPR1BhZ2UoaW50IHBhZ2Vu bywgYm9vbCB3cml0ZVhsb2cpOworc3RhdGljIEJ1ZmZlciBaZXJvQ0xPR1BhZ2UoaW50IHBhZ2Vu bywgYm9vbCB3cml0ZVhsb2cpOwogc3RhdGljIGJvb2wgQ0xPR1BhZ2VQcmVjZWRlcyhpbnQgcGFn ZTEsIGludCBwYWdlMik7Ci1zdGF0aWMgdm9pZCBXcml0ZVplcm9QYWdlWGxvZ1JlYyhpbnQgcGFn ZW5vKTsKK3N0YXRpYyBYTG9nUmVjUHRyIFdyaXRlWmVyb1BhZ2VYbG9nUmVjKGludCBwYWdlbm8p Owogc3RhdGljIHZvaWQgV3JpdGVUcnVuY2F0ZVhsb2dSZWMoaW50IHBhZ2VubywgVHJhbnNhY3Rp b25JZCBvbGRlc3RYYWN0LAogCQkJCQkJCQkgT2lkIG9sZGVzdFhhY3REYik7CiBzdGF0aWMgdm9p ZCBUcmFuc2FjdGlvbklkU2V0UGFnZVN0YXR1cyhUcmFuc2FjdGlvbklkIHhpZCwgaW50IG5zdWJ4 aWRzLApAQCAtOTksNyArOTQsNyBAQCBzdGF0aWMgdm9pZCBUcmFuc2FjdGlvbklkU2V0UGFnZVN0 YXR1cyhUcmFuc2FjdGlvbklkIHhpZCwgaW50IG5zdWJ4aWRzLAogCQkJCQkJCQkJICAgWExvZ1Jl Y1B0ciBsc24sIGludCBwYWdlbm8sCiAJCQkJCQkJCQkgICBib29sIGFsbF94YWN0X3NhbWVfcGFn ZSk7CiBzdGF0aWMgdm9pZCBUcmFuc2FjdGlvbklkU2V0U3RhdHVzQml0KFRyYW5zYWN0aW9uSWQg eGlkLCBYaWRTdGF0dXMgc3RhdHVzLAotCQkJCQkJCQkJICBYTG9nUmVjUHRyIGxzbiwgaW50IHNs b3Rubyk7CisJCQkJCQkJCQkgIFhMb2dSZWNQdHIgbHNuLCBCdWZmZXIgYnVmZmVyKTsKIHN0YXRp YyB2b2lkIHNldF9zdGF0dXNfYnlfcGFnZXMoaW50IG5zdWJ4aWRzLCBUcmFuc2FjdGlvbklkICpz dWJ4aWRzLAogCQkJCQkJCQlYaWRTdGF0dXMgc3RhdHVzLCBYTG9nUmVjUHRyIGxzbik7CiBzdGF0 aWMgYm9vbCBUcmFuc2FjdGlvbkdyb3VwVXBkYXRlWGlkU3RhdHVzKFRyYW5zYWN0aW9uSWQgeGlk LApAQCAtMzM5LDEzICszMzQsMTIgQEAgVHJhbnNhY3Rpb25JZFNldFBhZ2VTdGF0dXNJbnRlcm5h bChUcmFuc2FjdGlvbklkIHhpZCwgaW50IG5zdWJ4aWRzLAogCQkJCQkJCQkgICBUcmFuc2FjdGlv bklkICpzdWJ4aWRzLCBYaWRTdGF0dXMgc3RhdHVzLAogCQkJCQkJCQkgICBYTG9nUmVjUHRyIGxz biwgaW50IHBhZ2VubykKIHsKLQlpbnQJCQlzbG90bm87CisJQnVmZmVyCQlidWZmZXI7CiAJaW50 CQkJaTsKIAogCUFzc2VydChzdGF0dXMgPT0gVFJBTlNBQ1RJT05fU1RBVFVTX0NPTU1JVFRFRCB8 fAogCQkgICBzdGF0dXMgPT0gVFJBTlNBQ1RJT05fU1RBVFVTX0FCT1JURUQgfHwKIAkJICAgKHN0 YXR1cyA9PSBUUkFOU0FDVElPTl9TVEFUVVNfU1VCX0NPTU1JVFRFRCAmJiAhVHJhbnNhY3Rpb25J ZElzVmFsaWQoeGlkKSkpOwotCUFzc2VydChMV0xvY2tIZWxkQnlNZUluTW9kZShYYWN0U0xSVUxv Y2ssIExXX0VYQ0xVU0lWRSkpOwogCiAJLyoKIAkgKiBJZiB3ZSdyZSBkb2luZyBhbiBhc3luYyBj b21taXQgKGllLCBsc24gaXMgdmFsaWQpLCB0aGVuIHdlIG11c3Qgd2FpdApAQCAtMzU2LDcgKzM1 MCw4IEBAIFRyYW5zYWN0aW9uSWRTZXRQYWdlU3RhdHVzSW50ZXJuYWwoVHJhbnNhY3Rpb25JZCB4 aWQsIGludCBuc3VieGlkcywKIAkgKiB3cml0ZS1idXN5LCBzaW5jZSB3ZSBkb24ndCBjYXJlIGlm IHRoZSB1cGRhdGUgcmVhY2hlcyBkaXNrIHNvb25lciB0aGFuCiAJICogd2UgdGhpbmsuCiAJICov Ci0Jc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoWGFjdEN0bCwgcGFnZW5vLCBYTG9nUmVjUHRy SXNJbnZhbGlkKGxzbiksIHhpZCk7CisJYnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9DTE9H X0lELCBwYWdlbm8sIFJCTV9OT1JNQUwpOworCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9D S19FWENMVVNJVkUpOwogCiAJLyoKIAkgKiBTZXQgdGhlIG1haW4gdHJhbnNhY3Rpb24gaWQsIGlm IGFueS4KQEAgLTM3NCwyNSArMzY5LDI3IEBAIFRyYW5zYWN0aW9uSWRTZXRQYWdlU3RhdHVzSW50 ZXJuYWwoVHJhbnNhY3Rpb25JZCB4aWQsIGludCBuc3VieGlkcywKIAkJewogCQkJZm9yIChpID0g MDsgaSA8IG5zdWJ4aWRzOyBpKyspCiAJCQl7Ci0JCQkJQXNzZXJ0KFhhY3RDdGwtPnNoYXJlZC0+ cGFnZV9udW1iZXJbc2xvdG5vXSA9PSBUcmFuc2FjdGlvbklkVG9QYWdlKHN1YnhpZHNbaV0pKTsK KwkJCQlBc3NlcnQocGFnZW5vID09IFRyYW5zYWN0aW9uSWRUb1BhZ2Uoc3VieGlkc1tpXSkpOwog CQkJCVRyYW5zYWN0aW9uSWRTZXRTdGF0dXNCaXQoc3VieGlkc1tpXSwKIAkJCQkJCQkJCQkgIFRS QU5TQUNUSU9OX1NUQVRVU19TVUJfQ09NTUlUVEVELAotCQkJCQkJCQkJCSAgbHNuLCBzbG90bm8p OworCQkJCQkJCQkJCSAgbHNuLCBidWZmZXIpOwogCQkJfQogCQl9CiAKIAkJLyogLi4uIHRoZW4g dGhlIG1haW4gdHJhbnNhY3Rpb24gKi8KLQkJVHJhbnNhY3Rpb25JZFNldFN0YXR1c0JpdCh4aWQs IHN0YXR1cywgbHNuLCBzbG90bm8pOworCQlUcmFuc2FjdGlvbklkU2V0U3RhdHVzQml0KHhpZCwg c3RhdHVzLCBsc24sIGJ1ZmZlcik7CiAJfQogCiAJLyogU2V0IHRoZSBzdWJ0cmFuc2FjdGlvbnMg Ki8KIAlmb3IgKGkgPSAwOyBpIDwgbnN1YnhpZHM7IGkrKykKIAl7Ci0JCUFzc2VydChYYWN0Q3Rs LT5zaGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub10gPT0gVHJhbnNhY3Rpb25JZFRvUGFnZShzdWJ4 aWRzW2ldKSk7Ci0JCVRyYW5zYWN0aW9uSWRTZXRTdGF0dXNCaXQoc3VieGlkc1tpXSwgc3RhdHVz LCBsc24sIHNsb3Rubyk7CisJCUFzc2VydChwYWdlbm8gPT0gVHJhbnNhY3Rpb25JZFRvUGFnZShz dWJ4aWRzW2ldKSk7CisJCVRyYW5zYWN0aW9uSWRTZXRTdGF0dXNCaXQoc3VieGlkc1tpXSwgc3Rh dHVzLCBsc24sIGJ1ZmZlcik7CiAJfQogCi0JWGFjdEN0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Ns b3Rub10gPSB0cnVlOworCQorCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOworCVVubG9ja1JlbGVh c2VCdWZmZXIoYnVmZmVyKTsKIH0KIAogLyoKQEAgLTU2Niw3ICs1NjMsNyBAQCBUcmFuc2FjdGlv bkdyb3VwVXBkYXRlWGlkU3RhdHVzKFRyYW5zYWN0aW9uSWQgeGlkLCBYaWRTdGF0dXMgc3RhdHVz LAogICogTXVzdCBiZSBjYWxsZWQgd2l0aCBYYWN0U0xSVUxvY2sgaGVsZAogICovCiBzdGF0aWMg dm9pZAotVHJhbnNhY3Rpb25JZFNldFN0YXR1c0JpdChUcmFuc2FjdGlvbklkIHhpZCwgWGlkU3Rh dHVzIHN0YXR1cywgWExvZ1JlY1B0ciBsc24sIGludCBzbG90bm8pCitUcmFuc2FjdGlvbklkU2V0 U3RhdHVzQml0KFRyYW5zYWN0aW9uSWQgeGlkLCBYaWRTdGF0dXMgc3RhdHVzLCBYTG9nUmVjUHRy IGxzbiwgQnVmZmVyIGJ1ZmZlcikKIHsKIAlpbnQJCQlieXRlbm8gPSBUcmFuc2FjdGlvbklkVG9C eXRlKHhpZCk7CiAJaW50CQkJYnNoaWZ0ID0gVHJhbnNhY3Rpb25JZFRvQkluZGV4KHhpZCkgKiBD TE9HX0JJVFNfUEVSX1hBQ1Q7CkBAIC01NzQsNyArNTcxLDEwIEBAIFRyYW5zYWN0aW9uSWRTZXRT dGF0dXNCaXQoVHJhbnNhY3Rpb25JZCB4aWQsIFhpZFN0YXR1cyBzdGF0dXMsIFhMb2dSZWNQdHIg bHNuLCBpCiAJY2hhcgkJYnl0ZXZhbDsKIAljaGFyCQljdXJ2YWw7CiAKLQlieXRlcHRyID0gWGFj dEN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dICsgYnl0ZW5vOworCUFzc2VydChMV0xv Y2tIZWxkQnlNZUluTW9kZShCdWZmZXJEZXNjcmlwdG9yR2V0Q29udGVudExvY2soR2V0QnVmZmVy RGVzY3JpcHRvcihidWZmZXIgLSAxKSksCisJCQkJCQkJCUxXX0VYQ0xVU0lWRSkpOworCisJYnl0 ZXB0ciA9IFBhZ2VHZXRDb250ZW50cyhCdWZmZXJHZXRQYWdlKGJ1ZmZlcikpICsgYnl0ZW5vOwog CWN1cnZhbCA9ICgqYnl0ZXB0ciA+PiBic2hpZnQpICYgQ0xPR19YQUNUX0JJVE1BU0s7CiAKIAkv KgpAQCAtNjAyLDggKzYwMiw5IEBAIFRyYW5zYWN0aW9uSWRTZXRTdGF0dXNCaXQoVHJhbnNhY3Rp b25JZCB4aWQsIFhpZFN0YXR1cyBzdGF0dXMsIFhMb2dSZWNQdHIgbHNuLCBpCiAJYnl0ZXZhbCB8 PSAoc3RhdHVzIDw8IGJzaGlmdCk7CiAJKmJ5dGVwdHIgPSBieXRldmFsOwogCisKIAkvKgotCSAq IFVwZGF0ZSB0aGUgZ3JvdXAgTFNOIGlmIHRoZSB0cmFuc2FjdGlvbiBjb21wbGV0aW9uIExTTiBp cyBoaWdoZXIuCisJICogVXBkYXRlIHRoZSBidWZmZXIgTFNOIGlmIHRoZSB0cmFuc2FjdGlvbiBj b21wbGV0aW9uIExTTiBpcyBoaWdoZXIuCiAJICoKIAkgKiBOb3RlOiBsc24gd2lsbCBiZSBpbnZh bGlkIHdoZW4gc3VwcGxpZWQgZHVyaW5nIEluUmVjb3ZlcnkgcHJvY2Vzc2luZywKIAkgKiBzbyB3 ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwgdG8gYXZvaWQgTFNOIHVwZGF0ZXMg ZHVyaW5nCkBAIC02MTIsMTAgKzYxMyw4IEBAIFRyYW5zYWN0aW9uSWRTZXRTdGF0dXNCaXQoVHJh bnNhY3Rpb25JZCB4aWQsIFhpZFN0YXR1cyBzdGF0dXMsIFhMb2dSZWNQdHIgbHNuLCBpCiAJICov CiAJaWYgKCFYTG9nUmVjUHRySXNJbnZhbGlkKGxzbikpCiAJewotCQlpbnQJCQlsc25pbmRleCA9 IEdldExTTkluZGV4KHNsb3RubywgeGlkKTsKLQotCQlpZiAoWGFjdEN0bC0+c2hhcmVkLT5ncm91 cF9sc25bbHNuaW5kZXhdIDwgbHNuKQotCQkJWGFjdEN0bC0+c2hhcmVkLT5ncm91cF9sc25bbHNu aW5kZXhdID0gbHNuOworCQlpZiAoUGFnZUdldExTTihCdWZmZXJHZXRQYWdlKGJ1ZmZlcikpIDwg bHNuKQorCQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGJ1ZmZlciksIGxzbik7CiAJfQogfQog CkBAIC02NDAsNjcgKzYzOSwyMSBAQCBUcmFuc2FjdGlvbklkR2V0U3RhdHVzKFRyYW5zYWN0aW9u SWQgeGlkLCBYTG9nUmVjUHRyICpsc24pCiAJaW50CQkJcGFnZW5vID0gVHJhbnNhY3Rpb25JZFRv UGFnZSh4aWQpOwogCWludAkJCWJ5dGVubyA9IFRyYW5zYWN0aW9uSWRUb0J5dGUoeGlkKTsKIAlp bnQJCQlic2hpZnQgPSBUcmFuc2FjdGlvbklkVG9CSW5kZXgoeGlkKSAqIENMT0dfQklUU19QRVJf WEFDVDsKLQlpbnQJCQlzbG90bm87Ci0JaW50CQkJbHNuaW5kZXg7CiAJY2hhcgkgICAqYnl0ZXB0 cjsKIAlYaWRTdGF0dXMJc3RhdHVzOworCUJ1ZmZlcgkJYnVmZmVyOwogCi0JLyogbG9jayBpcyBh Y3F1aXJlZCBieSBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seSAqLwotCi0Jc2xvdG5vID0gU2lt cGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkoWGFjdEN0bCwgcGFnZW5vLCB4aWQpOwotCWJ5dGVwdHIg PSBYYWN0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBieXRlbm87CisJYnVmZmVy ID0gUmVhZFNscnVCdWZmZXIoU0xSVV9DTE9HX0lELCBwYWdlbm8sIFJCTV9OT1JNQUwpOworCWJ5 dGVwdHIgPSBQYWdlR2V0Q29udGVudHMoQnVmZmVyR2V0UGFnZShidWZmZXIpKSArIGJ5dGVubzsK IAogCXN0YXR1cyA9ICgqYnl0ZXB0ciA+PiBic2hpZnQpICYgQ0xPR19YQUNUX0JJVE1BU0s7CisJ KmxzbiAgID0gUGFnZUdldExTTihCdWZmZXJHZXRQYWdlKGJ1ZmZlcikpOwogCi0JbHNuaW5kZXgg PSBHZXRMU05JbmRleChzbG90bm8sIHhpZCk7Ci0JKmxzbiA9IFhhY3RDdGwtPnNoYXJlZC0+Z3Jv dXBfbHNuW2xzbmluZGV4XTsKLQotCUxXTG9ja1JlbGVhc2UoWGFjdFNMUlVMb2NrKTsKKwlSZWxl YXNlQnVmZmVyKGJ1ZmZlcik7CiAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi0vKgotICogTnVtYmVy IG9mIHNoYXJlZCBDTE9HIGJ1ZmZlcnMuCi0gKgotICogT24gbGFyZ2VyIG11bHRpLXByb2Nlc3Nv ciBzeXN0ZW1zLCBpdCBpcyBwb3NzaWJsZSB0byBoYXZlIG1hbnkgQ0xPRyBwYWdlCi0gKiByZXF1 ZXN0cyBpbiBmbGlnaHQgYXQgb25lIHRpbWUgd2hpY2ggY291bGQgbGVhZCB0byBkaXNrIGFjY2Vz cyBmb3IgQ0xPRwotICogcGFnZSBpZiB0aGUgcmVxdWlyZWQgcGFnZSBpcyBub3QgZm91bmQgaW4g bWVtb3J5LiAgVGVzdGluZyByZXZlYWxlZCB0aGF0IHdlCi0gKiBjYW4gZ2V0IHRoZSBiZXN0IHBl cmZvcm1hbmNlIGJ5IGhhdmluZyAxMjggQ0xPRyBidWZmZXJzLCBtb3JlIHRoYW4gdGhhdCBpdAot ICogZG9lc24ndCBpbXByb3ZlIHBlcmZvcm1hbmNlLgotICoKLSAqIFVuY29uZGl0aW9uYWxseSBr ZWVwaW5nIHRoZSBudW1iZXIgb2YgQ0xPRyBidWZmZXJzIHRvIDEyOCBkaWQgbm90IHNlZW0gbGlr ZQotICogYSBnb29kIGlkZWEsIGJlY2F1c2UgaXQgd291bGQgaW5jcmVhc2UgdGhlIG1pbmltdW0g YW1vdW50IG9mIHNoYXJlZCBtZW1vcnkKLSAqIHJlcXVpcmVkIHRvIHN0YXJ0LCB3aGljaCBjb3Vs ZCBiZSBhIHByb2JsZW0gZm9yIHBlb3BsZSBydW5uaW5nIHZlcnkgc21hbGwKLSAqIGNvbmZpZ3Vy YXRpb25zLiAgVGhlIGZvbGxvd2luZyBmb3JtdWxhIHNlZW1zIHRvIHJlcHJlc2VudCBhIHJlYXNv bmFibGUKLSAqIGNvbXByb21pc2U6IHBlb3BsZSB3aXRoIHZlcnkgbG93IHZhbHVlcyBmb3Igc2hh cmVkX2J1ZmZlcnMgd2lsbCBnZXQgZmV3ZXIKLSAqIENMT0cgYnVmZmVycyBhcyB3ZWxsLCBhbmQg ZXZlcnlvbmUgZWxzZSB3aWxsIGdldCAxMjguCi0gKi8KLVNpemUKLUNMT0dTaG1lbUJ1ZmZlcnMo dm9pZCkKLXsKLQlyZXR1cm4gTWluKDEyOCwgTWF4KDQsIE5CdWZmZXJzIC8gNTEyKSk7Ci19Ci0K LS8qCi0gKiBJbml0aWFsaXphdGlvbiBvZiBzaGFyZWQgbWVtb3J5IGZvciBDTE9HCi0gKi8KLVNp emUKLUNMT0dTaG1lbVNpemUodm9pZCkKLXsKLQlyZXR1cm4gU2ltcGxlTHJ1U2htZW1TaXplKENM T0dTaG1lbUJ1ZmZlcnMoKSwgQ0xPR19MU05TX1BFUl9QQUdFKTsKLX0KLQotdm9pZAotQ0xPR1No bWVtSW5pdCh2b2lkKQotewotCVhhY3RDdGwtPlBhZ2VQcmVjZWRlcyA9IENMT0dQYWdlUHJlY2Vk ZXM7Ci0JU2ltcGxlTHJ1SW5pdChYYWN0Q3RsLCAiWGFjdCIsIENMT0dTaG1lbUJ1ZmZlcnMoKSwg Q0xPR19MU05TX1BFUl9QQUdFLAotCQkJCSAgWGFjdFNMUlVMb2NrLCAicGdfeGFjdCIsIExXVFJB TkNIRV9YQUNUX0JVRkZFUiwKLQkJCQkgIFNZTkNfSEFORExFUl9DTE9HKTsKLQlTbHJ1UGFnZVBy ZWNlZGVzVW5pdFRlc3RzKFhhY3RDdGwsIENMT0dfWEFDVFNfUEVSX1BBR0UpOwotfQotCiAvKgog ICogVGhpcyBmdW5jIG11c3QgYmUgY2FsbGVkIE9OQ0Ugb24gc3lzdGVtIGluc3RhbGwuICBJdCBj cmVhdGVzCiAgKiB0aGUgaW5pdGlhbCBDTE9HIHNlZ21lbnQuICAoVGhlIENMT0cgZGlyZWN0b3J5 IGlzIGFzc3VtZWQgdG8KQEAgLTcxMCwxOCArNjYzLDE1IEBAIENMT0dTaG1lbUluaXQodm9pZCkK IHZvaWQKIEJvb3RTdHJhcENMT0codm9pZCkKIHsKLQlpbnQJCQlzbG90bm87Ci0KLQlMV0xvY2tB Y3F1aXJlKFhhY3RTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKKwlCdWZmZXIJCWJ1ZmZlcjsKIAog CS8qIENyZWF0ZSBhbmQgemVybyB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgY29tbWl0IGxvZyAqLwot CXNsb3RubyA9IFplcm9DTE9HUGFnZSgwLCBmYWxzZSk7CisJYnVmZmVyID0gWmVyb0NMT0dQYWdl KDAsIGZhbHNlKTsKIAogCS8qIE1ha2Ugc3VyZSBpdCdzIHdyaXR0ZW4gb3V0ICovCi0JU2ltcGxl THJ1V3JpdGVQYWdlKFhhY3RDdGwsIHNsb3Rubyk7Ci0JQXNzZXJ0KCFYYWN0Q3RsLT5zaGFyZWQt PnBhZ2VfZGlydHlbc2xvdG5vXSk7CisJRmx1c2hPbmVCdWZmZXIoYnVmZmVyKTsKIAotCUxXTG9j a1JlbGVhc2UoWGFjdFNMUlVMb2NrKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiB9 CiAKIC8qCkBAIC03MzMsMTcgKzY4MywyOSBAQCBCb290U3RyYXBDTE9HKHZvaWQpCiAgKgogICog Q29udHJvbCBsb2NrIG11c3QgYmUgaGVsZCBhdCBlbnRyeSwgYW5kIHdpbGwgYmUgaGVsZCBhdCBl eGl0LgogICovCi1zdGF0aWMgaW50CitzdGF0aWMgQnVmZmVyCiBaZXJvQ0xPR1BhZ2UoaW50IHBh Z2VubywgYm9vbCB3cml0ZVhsb2cpCiB7Ci0JaW50CQkJc2xvdG5vOworCUJ1ZmZlcgkJYnVmZmVy OworCVBhZ2UgCQlwYWdlOworCVhMb2dSZWNQdHIgIGxzbjsKKworCWJ1ZmZlciA9IFplcm9TbHJ1 QnVmZmVyKFNMUlVfQ0xPR19JRCwgcGFnZW5vKTsKKwkKKwlwYWdlID0gQnVmZmVyR2V0UGFnZShi dWZmZXIpOwogCi0Jc2xvdG5vID0gU2ltcGxlTHJ1WmVyb1BhZ2UoWGFjdEN0bCwgcGFnZW5vKTsK KwlQYWdlSW5pdFNMUlUocGFnZSwgQkxDS1NaLCAwKTsKIAorCWxzbiA9IDA7CiAJaWYgKHdyaXRl WGxvZykKLQkJV3JpdGVaZXJvUGFnZVhsb2dSZWMocGFnZW5vKTsKKwl7CisJCWxzbiA9IFdyaXRl WmVyb1BhZ2VYbG9nUmVjKHBhZ2Vubyk7CisJfQorCQorCVBhZ2VTZXRIZWFkZXJEYXRhTm9uUmVs KHBhZ2UsIHBhZ2VubywgbHNuLCBCTENLU1osIFBHX01FVEFQQUdFX0xBWU9VVF9WRVJTSU9OKTsK KwlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKIAotCXJldHVybiBzbG90bm87CisJcmV0dXJuIGJ1 ZmZlcjsKIH0KIAogLyoKQEAgLTc1MywxNyArNzE1LDYgQEAgWmVyb0NMT0dQYWdlKGludCBwYWdl bm8sIGJvb2wgd3JpdGVYbG9nKQogdm9pZAogU3RhcnR1cENMT0codm9pZCkKIHsKLQlUcmFuc2Fj dGlvbklkIHhpZCA9IFhpZEZyb21GdWxsVHJhbnNhY3Rpb25JZChTaG1lbVZhcmlhYmxlQ2FjaGUt Pm5leHRYaWQpOwotCWludAkJCXBhZ2VubyA9IFRyYW5zYWN0aW9uSWRUb1BhZ2UoeGlkKTsKLQot CUxXTG9ja0FjcXVpcmUoWGFjdFNMUlVMb2NrLCBMV19FWENMVVNJVkUpOwotCi0JLyoKLQkgKiBJ bml0aWFsaXplIG91ciBpZGVhIG9mIHRoZSBsYXRlc3QgcGFnZSBudW1iZXIuCi0JICovCi0JWGFj dEN0bC0+c2hhcmVkLT5sYXRlc3RfcGFnZV9udW1iZXIgPSBwYWdlbm87Ci0KLQlMV0xvY2tSZWxl YXNlKFhhY3RTTFJVTG9jayk7CiB9CiAKIC8qCkBAIC03NzUsOCArNzI2LDYgQEAgVHJpbUNMT0co dm9pZCkKIAlUcmFuc2FjdGlvbklkIHhpZCA9IFhpZEZyb21GdWxsVHJhbnNhY3Rpb25JZChTaG1l bVZhcmlhYmxlQ2FjaGUtPm5leHRYaWQpOwogCWludAkJCXBhZ2VubyA9IFRyYW5zYWN0aW9uSWRU b1BhZ2UoeGlkKTsKIAotCUxXTG9ja0FjcXVpcmUoWGFjdFNMUlVMb2NrLCBMV19FWENMVVNJVkUp OwotCiAJLyoKIAkgKiBaZXJvIG91dCB0aGUgcmVtYWluZGVyIG9mIHRoZSBjdXJyZW50IGNsb2cg cGFnZS4gIFVuZGVyIG5vcm1hbAogCSAqIGNpcmN1bXN0YW5jZXMgaXQgc2hvdWxkIGJlIHplcm9l cyBhbHJlYWR5LCBidXQgaXQgc2VlbXMgYXQgbGVhc3QKQEAgLTc5Myw0MCArNzQyLDI1IEBAIFRy aW1DTE9HKHZvaWQpCiAJewogCQlpbnQJCQlieXRlbm8gPSBUcmFuc2FjdGlvbklkVG9CeXRlKHhp ZCk7CiAJCWludAkJCWJzaGlmdCA9IFRyYW5zYWN0aW9uSWRUb0JJbmRleCh4aWQpICogQ0xPR19C SVRTX1BFUl9YQUNUOwotCQlpbnQJCQlzbG90bm87CiAJCWNoYXIJICAgKmJ5dGVwdHI7CisJCUJ1 ZmZlcgkJYnVmZmVyOwogCi0JCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKFhhY3RDdGwsIHBh Z2VubywgZmFsc2UsIHhpZCk7Ci0JCWJ5dGVwdHIgPSBYYWN0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVm ZmVyW3Nsb3Rub10gKyBieXRlbm87CisJCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfQ0xP R19JRCwgcGFnZW5vLCBSQk1fVFJJTSk7CisJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9D S19FWENMVVNJVkUpOworCQlieXRlcHRyID0gUGFnZUdldENvbnRlbnRzKEJ1ZmZlckdldFBhZ2Uo YnVmZmVyKSkgKyBieXRlbm87CiAKIAkJLyogWmVybyBzby1mYXItdW51c2VkIHBvc2l0aW9ucyBp biB0aGUgY3VycmVudCBieXRlICovCiAJCSpieXRlcHRyICY9ICgxIDw8IGJzaGlmdCkgLSAxOwog CQkvKiBaZXJvIHRoZSByZXN0IG9mIHRoZSBwYWdlICovCiAJCU1lbVNldChieXRlcHRyICsgMSwg MCwgQkxDS1NaIC0gYnl0ZW5vIC0gMSk7CiAKLQkJWGFjdEN0bC0+c2hhcmVkLT5wYWdlX2RpcnR5 W3Nsb3Rub10gPSB0cnVlOwotCX0KIAotCUxXTG9ja1JlbGVhc2UoWGFjdFNMUlVMb2NrKTsKLX0K KwkJTWFya0J1ZmZlckRpcnR5KGJ1ZmZlcik7CiAKLS8qCi0gKiBQZXJmb3JtIGEgY2hlY2twb2lu dCAtLS0gZWl0aGVyIGR1cmluZyBzaHV0ZG93biwgb3Igb24tdGhlLWZseQotICovCi12b2lkCi1D aGVja1BvaW50Q0xPRyh2b2lkKQotewotCS8qCi0JICogV3JpdGUgZGlydHkgQ0xPRyBwYWdlcyB0 byBkaXNrLiAgVGhpcyBtYXkgcmVzdWx0IGluIHN5bmMgcmVxdWVzdHMKLQkgKiBxdWV1ZWQgZm9y IGxhdGVyIGhhbmRsaW5nIGJ5IFByb2Nlc3NTeW5jUmVxdWVzdHMoKSwgYXMgcGFydCBvZiB0aGUK LQkgKiBjaGVja3BvaW50LgotCSAqLwotCVRSQUNFX1BPU1RHUkVTUUxfQ0xPR19DSEVDS1BPSU5U X1NUQVJUKHRydWUpOwotCVNpbXBsZUxydVdyaXRlQWxsKFhhY3RDdGwsIHRydWUpOwotCVRSQUNF X1BPU1RHUkVTUUxfQ0xPR19DSEVDS1BPSU5UX0RPTkUodHJ1ZSk7CisJCVVubG9ja1JlbGVhc2VC dWZmZXIoYnVmZmVyKTsKKwl9CiB9CiAKLQogLyoKICAqIE1ha2Ugc3VyZSB0aGF0IENMT0cgaGFz IHJvb20gZm9yIGEgbmV3bHktYWxsb2NhdGVkIFhJRC4KICAqCkBAIC04NTAsMTIgKzc4NCw4IEBA IEV4dGVuZENMT0coVHJhbnNhY3Rpb25JZCBuZXdlc3RYYWN0KQogCiAJcGFnZW5vID0gVHJhbnNh Y3Rpb25JZFRvUGFnZShuZXdlc3RYYWN0KTsKIAotCUxXTG9ja0FjcXVpcmUoWGFjdFNMUlVMb2Nr LCBMV19FWENMVVNJVkUpOwotCiAJLyogWmVybyB0aGUgcGFnZSBhbmQgbWFrZSBhbiBYTE9HIGVu dHJ5IGFib3V0IGl0ICovCi0JWmVyb0NMT0dQYWdlKHBhZ2VubywgdHJ1ZSk7Ci0KLQlMV0xvY2tS ZWxlYXNlKFhhY3RTTFJVTG9jayk7CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihaZXJvQ0xPR1BhZ2Uo cGFnZW5vLCB0cnVlKSk7CiB9CiAKIApAQCAtODg2LDcgKzgxNiw4IEBAIFRydW5jYXRlQ0xPRyhU cmFuc2FjdGlvbklkIG9sZGVzdFhhY3QsIE9pZCBvbGRlc3R4aWRfZGF0b2lkKQogCWN1dG9mZlBh Z2UgPSBUcmFuc2FjdGlvbklkVG9QYWdlKG9sZGVzdFhhY3QpOwogCiAJLyogQ2hlY2sgdG8gc2Vl IGlmIHRoZXJlJ3MgYW55IGZpbGVzIHRoYXQgY291bGQgYmUgcmVtb3ZlZCAqLwotCWlmICghU2xy dVNjYW5EaXJlY3RvcnkoWGFjdEN0bCwgU2xydVNjYW5EaXJDYlJlcG9ydFByZXNlbmNlLCAmY3V0 b2ZmUGFnZSkpCisJaWYgKCFTbHJ1U2NhbkRpcmVjdG9yeShTTFJVX0NMT0dfSUQsIENMT0dQYWdl UHJlY2VkZXMsCisJCQkJCQkgICBTbHJ1U2NhbkRpckNiUmVwb3J0UHJlc2VuY2UsICZjdXRvZmZQ YWdlKSkKIAkJcmV0dXJuOwkJCQkJLyogbm90aGluZyB0byByZW1vdmUgKi8KIAogCS8qCkBAIC05 MDcsNyArODM4LDcgQEAgVHJ1bmNhdGVDTE9HKFRyYW5zYWN0aW9uSWQgb2xkZXN0WGFjdCwgT2lk IG9sZGVzdHhpZF9kYXRvaWQpCiAJV3JpdGVUcnVuY2F0ZVhsb2dSZWMoY3V0b2ZmUGFnZSwgb2xk ZXN0WGFjdCwgb2xkZXN0eGlkX2RhdG9pZCk7CiAKIAkvKiBOb3cgd2UgY2FuIHJlbW92ZSB0aGUg b2xkIENMT0cgc2VnbWVudChzKSAqLwotCVNpbXBsZUxydVRydW5jYXRlKFhhY3RDdGwsIGN1dG9m ZlBhZ2UpOworCVNpbXBsZUxydVRydW5jYXRlKFNMUlVfQ0xPR19JRCwgQ0xPR1BhZ2VQcmVjZWRl cywgY3V0b2ZmUGFnZSk7CiB9CiAKIApAQCAtOTQ4LDEyICs4NzksMTUgQEAgQ0xPR1BhZ2VQcmVj ZWRlcyhpbnQgcGFnZTEsIGludCBwYWdlMikKIC8qCiAgKiBXcml0ZSBhIFpFUk9QQUdFIHhsb2cg cmVjb3JkCiAgKi8KLXN0YXRpYyB2b2lkCitzdGF0aWMgWExvZ1JlY1B0ciAKIFdyaXRlWmVyb1Bh Z2VYbG9nUmVjKGludCBwYWdlbm8pCiB7CisJWExvZ1JlY1B0ciBsc247CiAJWExvZ0JlZ2luSW5z ZXJ0KCk7CiAJWExvZ1JlZ2lzdGVyRGF0YSgoY2hhciAqKSAoJnBhZ2VubyksIHNpemVvZihpbnQp KTsKLQkodm9pZCkgWExvZ0luc2VydChSTV9DTE9HX0lELCBDTE9HX1pFUk9QQUdFKTsKKwlsc24g PSBYTG9nSW5zZXJ0KFJNX0NMT0dfSUQsIENMT0dfWkVST1BBR0UpOworCisJcmV0dXJuIGxzbjsK IH0KIAogLyoKQEAgLTk5MiwxNyArOTI2LDEzIEBAIGNsb2dfcmVkbyhYTG9nUmVhZGVyU3RhdGUg KnJlY29yZCkKIAlpZiAoaW5mbyA9PSBDTE9HX1pFUk9QQUdFKQogCXsKIAkJaW50CQkJcGFnZW5v OwotCQlpbnQJCQlzbG90bm87CisJCUJ1ZmZlcgkJYnVmZmVyOwogCiAJCW1lbWNweSgmcGFnZW5v LCBYTG9nUmVjR2V0RGF0YShyZWNvcmQpLCBzaXplb2YoaW50KSk7CiAKLQkJTFdMb2NrQWNxdWly ZShYYWN0U0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQkJc2xvdG5vID0gWmVyb0NMT0dQYWdl KHBhZ2VubywgZmFsc2UpOwotCQlTaW1wbGVMcnVXcml0ZVBhZ2UoWGFjdEN0bCwgc2xvdG5vKTsK LQkJQXNzZXJ0KCFYYWN0Q3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSk7Ci0KLQkJTFdM b2NrUmVsZWFzZShYYWN0U0xSVUxvY2spOworCQlidWZmZXIgPSBaZXJvQ0xPR1BhZ2UocGFnZW5v LCBmYWxzZSk7CisJCUZsdXNoT25lQnVmZmVyKGJ1ZmZlcik7CisJCVVubG9ja1JlbGVhc2VCdWZm ZXIoYnVmZmVyKTsKIAl9CiAJZWxzZSBpZiAoaW5mbyA9PSBDTE9HX1RSVU5DQVRFKQogCXsKQEAg LTEwMTIsMTcgKzk0Miw4IEBAIGNsb2dfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAog CQlBZHZhbmNlT2xkZXN0Q2xvZ1hpZCh4bHJlYy5vbGRlc3RYYWN0KTsKIAotCQlTaW1wbGVMcnVU cnVuY2F0ZShYYWN0Q3RsLCB4bHJlYy5wYWdlbm8pOworCQlTaW1wbGVMcnVUcnVuY2F0ZShTTFJV X0NMT0dfSUQsIENMT0dQYWdlUHJlY2VkZXMsIHhscmVjLnBhZ2Vubyk7CiAJfQogCWVsc2UKIAkJ ZWxvZyhQQU5JQywgImNsb2dfcmVkbzogdW5rbm93biBvcCBjb2RlICV1IiwgaW5mbyk7CiB9Ci0K LS8qCi0gKiBFbnRyeXBvaW50IGZvciBzeW5jLmMgdG8gc3luYyBjbG9nIGZpbGVzLgotICovCi1p bnQKLWNsb2dzeW5jZmlsZXRhZyhjb25zdCBGaWxlVGFnICpmdGFnLCBjaGFyICpwYXRoKQotewot CXJldHVybiBTbHJ1U3luY0ZpbGVUYWcoWGFjdEN0bCwgZnRhZywgcGF0aCk7Ci19CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jb21taXRfdHMuYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL2NvbW1pdF90cy5jCmluZGV4IDlhYTQ2NzVjYjc5Li5hZjg4YWJkNWM4 NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY29tbWl0X3RzLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY29tbWl0X3RzLmMKQEAgLTYzLDE5ICs2Mywx NCBAQCB0eXBlZGVmIHN0cnVjdCBDb21taXRUaW1lc3RhbXBFbnRyeQogCQkJCQkJCQkJc2l6ZW9m KFJlcE9yaWdpbklkKSkKIAogI2RlZmluZSBDT01NSVRfVFNfWEFDVFNfUEVSX1BBR0UgXAotCShC TENLU1ogLyBTaXplT2ZDb21taXRUaW1lc3RhbXBFbnRyeSkKKwkoKEJMQ0tTWiAtIFNpemVPZlBh Z2VIZWFkZXJEYXRhKSAvIFNpemVPZkNvbW1pdFRpbWVzdGFtcEVudHJ5KQogCiAjZGVmaW5lIFRy YW5zYWN0aW9uSWRUb0NUc1BhZ2UoeGlkKSBcCiAJKCh4aWQpIC8gKFRyYW5zYWN0aW9uSWQpIENP TU1JVF9UU19YQUNUU19QRVJfUEFHRSkKICNkZWZpbmUgVHJhbnNhY3Rpb25JZFRvQ1RzRW50cnko eGlkKQlcCiAJKCh4aWQpICUgKFRyYW5zYWN0aW9uSWQpIENPTU1JVF9UU19YQUNUU19QRVJfUEFH RSkKIAotLyoKLSAqIExpbmsgdG8gc2hhcmVkLW1lbW9yeSBkYXRhIHN0cnVjdHVyZXMgZm9yIENv bW1pdFRzIGNvbnRyb2wKLSAqLwotc3RhdGljIFNscnVDdGxEYXRhIENvbW1pdFRzQ3RsRGF0YTsK IAotI2RlZmluZSBDb21taXRUc0N0bCAoJkNvbW1pdFRzQ3RsRGF0YSkKIAogLyoKICAqIFdlIGtl ZXAgYSBjYWNoZSBvZiB0aGUgbGFzdCB2YWx1ZSBzZXQgaW4gc2hhcmVkIG1lbW9yeS4KQEAgLTEw NywxMSArMTAyLDEyIEBAIHN0YXRpYyB2b2lkIFNldFhpZENvbW1pdFRzSW5QYWdlKFRyYW5zYWN0 aW9uSWQgeGlkLCBpbnQgbnN1YnhpZHMsCiBzdGF0aWMgdm9pZCBUcmFuc2FjdGlvbklkU2V0Q29t bWl0VHMoVHJhbnNhY3Rpb25JZCB4aWQsIFRpbWVzdGFtcFR6IHRzLAogCQkJCQkJCQkJIFJlcE9y aWdpbklkIG5vZGVpZCwgaW50IHNsb3Rubyk7CiBzdGF0aWMgdm9pZCBlcnJvcl9jb21taXRfdHNf ZGlzYWJsZWQodm9pZCk7Ci1zdGF0aWMgaW50CVplcm9Db21taXRUc1BhZ2UoaW50IHBhZ2Vubywg Ym9vbCB3cml0ZVhsb2cpOworc3RhdGljIEJ1ZmZlciBaZXJvQ29tbWl0VHNQYWdlKGludCBwYWdl bm8sIGJvb2wgd3JpdGVYbG9nKTsKIHN0YXRpYyBib29sIENvbW1pdFRzUGFnZVByZWNlZGVzKGlu dCBwYWdlMSwgaW50IHBhZ2UyKTsKIHN0YXRpYyB2b2lkIEFjdGl2YXRlQ29tbWl0VHModm9pZCk7 CiBzdGF0aWMgdm9pZCBEZWFjdGl2YXRlQ29tbWl0VHModm9pZCk7Ci1zdGF0aWMgdm9pZCBXcml0 ZVplcm9QYWdlWGxvZ1JlYyhpbnQgcGFnZW5vKTsKK3N0YXRpYyBYTG9nUmVjUHRyIFdyaXRlWmVy b1BhZ2VYbG9nUmVjKGludCBwYWdlbm8pOworCiBzdGF0aWMgdm9pZCBXcml0ZVRydW5jYXRlWGxv Z1JlYyhpbnQgcGFnZW5vLCBUcmFuc2FjdGlvbklkIG9sZGVzdFhpZCk7CiAKIC8qCkBAIC0yMTYs MzIgKzIxMiwzMSBAQCBTZXRYaWRDb21taXRUc0luUGFnZShUcmFuc2FjdGlvbklkIHhpZCwgaW50 IG5zdWJ4aWRzLAogCQkJCQkgVHJhbnNhY3Rpb25JZCAqc3VieGlkcywgVGltZXN0YW1wVHogdHMs CiAJCQkJCSBSZXBPcmlnaW5JZCBub2RlaWQsIGludCBwYWdlbm8pCiB7Ci0JaW50CQkJc2xvdG5v OwogCWludAkJCWk7CisJQnVmZmVyCQlidWZmZXI7CiAKLQlMV0xvY2tBY3F1aXJlKENvbW1pdFRz U0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7CisJYnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9D T01NSVRfVFNfSUQsIHBhZ2VubywgUkJNX05PUk1BTCk7CisJTG9ja0J1ZmZlcihidWZmZXIsIEJV RkZFUl9MT0NLX0VYQ0xVU0lWRSk7CiAKLQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShDb21t aXRUc0N0bCwgcGFnZW5vLCB0cnVlLCB4aWQpOwotCi0JVHJhbnNhY3Rpb25JZFNldENvbW1pdFRz KHhpZCwgdHMsIG5vZGVpZCwgc2xvdG5vKTsKKwlUcmFuc2FjdGlvbklkU2V0Q29tbWl0VHMoeGlk LCB0cywgbm9kZWlkLCBidWZmZXIpOwogCWZvciAoaSA9IDA7IGkgPCBuc3VieGlkczsgaSsrKQot CQlUcmFuc2FjdGlvbklkU2V0Q29tbWl0VHMoc3VieGlkc1tpXSwgdHMsIG5vZGVpZCwgc2xvdG5v KTsKKwkJVHJhbnNhY3Rpb25JZFNldENvbW1pdFRzKHN1YnhpZHNbaV0sIHRzLCBub2RlaWQsIGJ1 ZmZlcik7CiAKLQlDb21taXRUc0N0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVl OworCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOwogCi0JTFdMb2NrUmVsZWFzZShDb21taXRUc1NM UlVMb2NrKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiB9CiAKIC8qCiAgKiBTZXRz IHRoZSBjb21taXQgdGltZXN0YW1wIG9mIGEgc2luZ2xlIHRyYW5zYWN0aW9uLgotICoKLSAqIE11 c3QgYmUgY2FsbGVkIHdpdGggQ29tbWl0VHNTTFJVTG9jayBoZWxkCiAgKi8KIHN0YXRpYyB2b2lk CiBUcmFuc2FjdGlvbklkU2V0Q29tbWl0VHMoVHJhbnNhY3Rpb25JZCB4aWQsIFRpbWVzdGFtcFR6 IHRzLAotCQkJCQkJIFJlcE9yaWdpbklkIG5vZGVpZCwgaW50IHNsb3RubykKKwkJCQkJCSBSZXBP cmlnaW5JZCBub2RlaWQsIEJ1ZmZlciBidWZmZXIpCiB7CiAJaW50CQkJZW50cnlubyA9IFRyYW5z YWN0aW9uSWRUb0NUc0VudHJ5KHhpZCk7CisJaW50IAkJcGFnZW5vICA9IFRyYW5zYWN0aW9uSWRU b0NUc1BhZ2UoeGlkKTsKKwkKIAlDb21taXRUaW1lc3RhbXBFbnRyeSBlbnRyeTsKIAogCUFzc2Vy dChUcmFuc2FjdGlvbklkSXNOb3JtYWwoeGlkKSk7CkBAIC0yNDksOSArMjQ0LDEyIEBAIFRyYW5z YWN0aW9uSWRTZXRDb21taXRUcyhUcmFuc2FjdGlvbklkIHhpZCwgVGltZXN0YW1wVHogdHMsCiAJ ZW50cnkudGltZSA9IHRzOwogCWVudHJ5Lm5vZGVpZCA9IG5vZGVpZDsKIAotCW1lbWNweShDb21t aXRUc0N0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dICsKKwlBc3NlcnQoeGlkID09IHBh Z2VubyAqIENPTU1JVF9UU19YQUNUU19QRVJfUEFHRSArIGVudHJ5bm8pOworCisJbWVtY3B5KFBh Z2VHZXRDb250ZW50cyhCdWZmZXJHZXRQYWdlKGJ1ZmZlcikpICsgXAogCQkgICBTaXplT2ZDb21t aXRUaW1lc3RhbXBFbnRyeSAqIGVudHJ5bm8sCiAJCSAgICZlbnRyeSwgU2l6ZU9mQ29tbWl0VGlt ZXN0YW1wRW50cnkpOworCiB9CiAKIC8qCkBAIC0yNjgsMTAgKzI2NiwxMCBAQCBUcmFuc2FjdGlv bklkR2V0Q29tbWl0VHNEYXRhKFRyYW5zYWN0aW9uSWQgeGlkLCBUaW1lc3RhbXBUeiAqdHMsCiB7 CiAJaW50CQkJcGFnZW5vID0gVHJhbnNhY3Rpb25JZFRvQ1RzUGFnZSh4aWQpOwogCWludAkJCWVu dHJ5bm8gPSBUcmFuc2FjdGlvbklkVG9DVHNFbnRyeSh4aWQpOwotCWludAkJCXNsb3RubzsKIAlD b21taXRUaW1lc3RhbXBFbnRyeSBlbnRyeTsKIAlUcmFuc2FjdGlvbklkIG9sZGVzdENvbW1pdFRz WGlkOwogCVRyYW5zYWN0aW9uSWQgbmV3ZXN0Q29tbWl0VHNYaWQ7CisJQnVmZmVyCQlidWZmZXI7 CiAKIAlpZiAoIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhpZCkpCiAJCWVyZXBvcnQoRVJST1IsCkBA IC0zMjUsMTggKzMyMywxOSBAQCBUcmFuc2FjdGlvbklkR2V0Q29tbWl0VHNEYXRhKFRyYW5zYWN0 aW9uSWQgeGlkLCBUaW1lc3RhbXBUeiAqdHMsCiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQkvKiBs b2NrIGlzIGFjcXVpcmVkIGJ5IFNpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5ICovCi0Jc2xvdG5v ID0gU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkoQ29tbWl0VHNDdGwsIHBhZ2VubywgeGlkKTsK KwlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX0NPTU1JVF9UU19JRCwgcGFnZW5vLCBSQk1f Tk9STUFMKTsKKwlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfU0hBUkUpOworCiAJbWVt Y3B5KCZlbnRyeSwKLQkJICAgQ29tbWl0VHNDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5v XSArCi0JCSAgIFNpemVPZkNvbW1pdFRpbWVzdGFtcEVudHJ5ICogZW50cnlubywKLQkJICAgU2l6 ZU9mQ29tbWl0VGltZXN0YW1wRW50cnkpOworCQkJUGFnZUdldENvbnRlbnRzKEJ1ZmZlckdldFBh Z2UoYnVmZmVyKSkgKyBcCisJCQlTaXplT2ZDb21taXRUaW1lc3RhbXBFbnRyeSAqIGVudHJ5bm8s CisJCQlTaXplT2ZDb21taXRUaW1lc3RhbXBFbnRyeSk7CiAKIAkqdHMgPSBlbnRyeS50aW1lOwog CWlmIChub2RlaWQpCiAJCSpub2RlaWQgPSBlbnRyeS5ub2RlaWQ7CiAKLQlMV0xvY2tSZWxlYXNl KENvbW1pdFRzU0xSVUxvY2spOworCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIAlyZXR1 cm4gKnRzICE9IDA7CiB9CiAKQEAgLTUwNSwyNyArNTA0LDEzIEBAIHBnX3hhY3RfY29tbWl0X3Rp bWVzdGFtcF9vcmlnaW4oUEdfRlVOQ1RJT05fQVJHUykKIAlQR19SRVRVUk5fREFUVU0oSGVhcFR1 cGxlR2V0RGF0dW0oaHR1cCkpOwogfQogCi0vKgotICogTnVtYmVyIG9mIHNoYXJlZCBDb21taXRU UyBidWZmZXJzLgotICoKLSAqIFdlIHVzZSBhIHZlcnkgc2ltaWxhciBsb2dpYyBhcyBmb3IgdGhl IG51bWJlciBvZiBDTE9HIGJ1ZmZlcnMgKGV4Y2VwdCB3ZQotICogc2NhbGUgdXAgdHdpY2UgYXMg ZmFzdCB3aXRoIHNoYXJlZCBidWZmZXJzLCBhbmQgdGhlIG1heGltdW0gaXMgdHdpY2UgYXMKLSAq IGhpZ2gpOyBzZWUgY29tbWVudHMgaW4gQ0xPR1NobWVtQnVmZmVycy4KLSAqLwotU2l6ZQotQ29t bWl0VHNTaG1lbUJ1ZmZlcnModm9pZCkKLXsKLQlyZXR1cm4gTWluKDI1NiwgTWF4KDQsIE5CdWZm ZXJzIC8gMjU2KSk7Ci19Ci0KIC8qCiAgKiBTaGFyZWQgbWVtb3J5IHNpemluZyBmb3IgQ29tbWl0 VHMKICAqLwogU2l6ZQogQ29tbWl0VHNTaG1lbVNpemUodm9pZCkKIHsKLQlyZXR1cm4gU2ltcGxl THJ1U2htZW1TaXplKENvbW1pdFRzU2htZW1CdWZmZXJzKCksIDApICsKLQkJc2l6ZW9mKENvbW1p dFRpbWVzdGFtcFNoYXJlZCk7CisJcmV0dXJuIHNpemVvZihDb21taXRUaW1lc3RhbXBTaGFyZWQp OwogfQogCiAvKgpAQCAtNTM3LDEyICs1MjIsNyBAQCBDb21taXRUc1NobWVtSW5pdCh2b2lkKQog ewogCWJvb2wJCWZvdW5kOwogCi0JQ29tbWl0VHNDdGwtPlBhZ2VQcmVjZWRlcyA9IENvbW1pdFRz UGFnZVByZWNlZGVzOwotCVNpbXBsZUxydUluaXQoQ29tbWl0VHNDdGwsICJDb21taXRUcyIsIENv bW1pdFRzU2htZW1CdWZmZXJzKCksIDAsCi0JCQkJICBDb21taXRUc1NMUlVMb2NrLCAicGdfY29t bWl0X3RzIiwKLQkJCQkgIExXVFJBTkNIRV9DT01NSVRUU19CVUZGRVIsCi0JCQkJICBTWU5DX0hB TkRMRVJfQ09NTUlUX1RTKTsKLQlTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKENvbW1pdFRzQ3Rs LCBDT01NSVRfVFNfWEFDVFNfUEVSX1BBR0UpOworCVNscnVQYWdlUHJlY2VkZXNVbml0VGVzdHMo Q29tbWl0VHNQYWdlUHJlY2VkZXMsIENPTU1JVF9UU19YQUNUU19QRVJfUEFHRSk7CiAKIAljb21t aXRUc1NoYXJlZCA9IFNobWVtSW5pdFN0cnVjdCgiQ29tbWl0VHMgc2hhcmVkIiwKIAkJCQkJCQkJ CSBzaXplb2YoQ29tbWl0VGltZXN0YW1wU2hhcmVkKSwKQEAgLTU4NiwxNyArNTY2LDI2IEBAIEJv b3RTdHJhcENvbW1pdFRzKHZvaWQpCiAgKgogICogQ29udHJvbCBsb2NrIG11c3QgYmUgaGVsZCBh dCBlbnRyeSwgYW5kIHdpbGwgYmUgaGVsZCBhdCBleGl0LgogICovCi1zdGF0aWMgaW50CitzdGF0 aWMgQnVmZmVyCiBaZXJvQ29tbWl0VHNQYWdlKGludCBwYWdlbm8sIGJvb2wgd3JpdGVYbG9nKQog ewotCWludAkJCXNsb3RubzsKLQotCXNsb3RubyA9IFNpbXBsZUxydVplcm9QYWdlKENvbW1pdFRz Q3RsLCBwYWdlbm8pOwotCisJQnVmZmVyCQlidWZmZXI7CisJUGFnZSAJCXBhZ2U7CisJWExvZ1Jl Y1B0ciAgbHNuOworCisJYnVmZmVyID0gWmVyb1NscnVCdWZmZXIoU0xSVV9DT01NSVRfVFNfSUQs IHBhZ2Vubyk7CisJCisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsKKwlQYWdlSW5pdFNM UlUocGFnZSwgQkxDS1NaLCAwKTsKKwkKIAlpZiAod3JpdGVYbG9nKQotCQlXcml0ZVplcm9QYWdl WGxvZ1JlYyhwYWdlbm8pOworCXsKKwkJbHNuID0gV3JpdGVaZXJvUGFnZVhsb2dSZWMocGFnZW5v KTsKKwkJUGFnZVNldEhlYWRlckRhdGFOb25SZWwocGFnZSwgcGFnZW5vLCBsc24sIEJMQ0tTWiwg UEdfTUVUQVBBR0VfTEFZT1VUX1ZFUlNJT04pOworCX0KKwlNYXJrQnVmZmVyRGlydHkoYnVmZmVy KTsKIAotCXJldHVybiBzbG90bm87CisJcmV0dXJuIGJ1ZmZlcjsKIH0KIAogLyoKQEAgLTY5NCwx MyArNjgzLDYgQEAgQWN0aXZhdGVDb21taXRUcyh2b2lkKQogCXhpZCA9IFhpZEZyb21GdWxsVHJh bnNhY3Rpb25JZChTaG1lbVZhcmlhYmxlQ2FjaGUtPm5leHRYaWQpOwogCXBhZ2VubyA9IFRyYW5z YWN0aW9uSWRUb0NUc1BhZ2UoeGlkKTsKIAotCS8qCi0JICogUmUtSW5pdGlhbGl6ZSBvdXIgaWRl YSBvZiB0aGUgbGF0ZXN0IHBhZ2UgbnVtYmVyLgotCSAqLwotCUxXTG9ja0FjcXVpcmUoQ29tbWl0 VHNTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQlDb21taXRUc0N0bC0+c2hhcmVkLT5sYXRlc3Rf cGFnZV9udW1iZXIgPSBwYWdlbm87Ci0JTFdMb2NrUmVsZWFzZShDb21taXRUc1NMUlVMb2NrKTsK LQogCS8qCiAJICogSWYgQ29tbWl0VHMgaXMgZW5hYmxlZCwgYnV0IGl0IHdhc24ndCBpbiB0aGUg cHJldmlvdXMgc2VydmVyIHJ1biwgd2UKIAkgKiBuZWVkIHRvIHNldCB0aGUgb2xkZXN0IGFuZCBu ZXdlc3QgdmFsdWVzIHRvIHRoZSBuZXh0IFhpZDsgdGhhdCB3YXksIHdlCkBAIC03MjMsMTUgKzcw NSwxOSBAQCBBY3RpdmF0ZUNvbW1pdFRzKHZvaWQpCiAJTFdMb2NrUmVsZWFzZShDb21taXRUc0xv Y2spOwogCiAJLyogQ3JlYXRlIHRoZSBjdXJyZW50IHNlZ21lbnQgZmlsZSwgaWYgbmVjZXNzYXJ5 ICovCi0JaWYgKCFTaW1wbGVMcnVEb2VzUGh5c2ljYWxQYWdlRXhpc3QoQ29tbWl0VHNDdGwsIHBh Z2VubykpCisJaWYgKCFTaW1wbGVMcnVEb2VzUGh5c2ljYWxQYWdlRXhpc3QoU0xSVV9DT01NSVRf VFNfSUQsIHBhZ2VubykpCiAJewotCQlpbnQJCQlzbG90bm87CisJCUJ1ZmZlcgkJYnVmZmVyOwor CQlQYWdlIAkJcGFnZTsKIAotCQlMV0xvY2tBY3F1aXJlKENvbW1pdFRzU0xSVUxvY2ssIExXX0VY Q0xVU0lWRSk7Ci0JCXNsb3RubyA9IFplcm9Db21taXRUc1BhZ2UocGFnZW5vLCBmYWxzZSk7Ci0J CVNpbXBsZUxydVdyaXRlUGFnZShDb21taXRUc0N0bCwgc2xvdG5vKTsKLQkJQXNzZXJ0KCFDb21t aXRUc0N0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10pOwotCQlMV0xvY2tSZWxlYXNlKENv bW1pdFRzU0xSVUxvY2spOworCQlidWZmZXIgPSBaZXJvU2xydUJ1ZmZlcihTTFJVX0NPTU1JVF9U U19JRCwgcGFnZW5vKTsKKwkJCisJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7CisJCVBh Z2VJbml0U0xSVShwYWdlLCBCTENLU1osIDApOworCisJCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIp OworCQlGbHVzaE9uZUJ1ZmZlcihidWZmZXIpOworCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZl cik7CiAJfQogCiAJLyogQ2hhbmdlIHRoZSBhY3RpdmF0aW9uIHN0YXR1cyBpbiBzaGFyZWQgbWVt b3J5LiAqLwpAQCAtNzgwLDIzICs3NjYsOSBAQCBEZWFjdGl2YXRlQ29tbWl0VHModm9pZCkKIAkg KiBiZSBvdmVyd3JpdHRlbiBhbnl3YXkgd2hlbiB3ZSB3cmFwIGFyb3VuZCwgYnV0IGl0IHNlZW1z IGJldHRlciB0byBiZQogCSAqIHRpZHkuKQogCSAqLwotCUxXTG9ja0FjcXVpcmUoQ29tbWl0VHNT TFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQkodm9pZCkgU2xydVNjYW5EaXJlY3RvcnkoQ29tbWl0 VHNDdGwsIFNscnVTY2FuRGlyQ2JEZWxldGVBbGwsIE5VTEwpOwotCUxXTG9ja1JlbGVhc2UoQ29t bWl0VHNTTFJVTG9jayk7Ci19Ci0KLS8qCi0gKiBQZXJmb3JtIGEgY2hlY2twb2ludCAtLS0gZWl0 aGVyIGR1cmluZyBzaHV0ZG93biwgb3Igb24tdGhlLWZseQotICovCi12b2lkCi1DaGVja1BvaW50 Q29tbWl0VHModm9pZCkKLXsKLQkvKgotCSAqIFdyaXRlIGRpcnR5IENvbW1pdFRzIHBhZ2VzIHRv IGRpc2suICBUaGlzIG1heSByZXN1bHQgaW4gc3luYyByZXF1ZXN0cwotCSAqIHF1ZXVlZCBmb3Ig bGF0ZXIgaGFuZGxpbmcgYnkgUHJvY2Vzc1N5bmNSZXF1ZXN0cygpLCBhcyBwYXJ0IG9mIHRoZQot CSAqIGNoZWNrcG9pbnQuCi0JICovCi0JU2ltcGxlTHJ1V3JpdGVBbGwoQ29tbWl0VHNDdGwsIHRy dWUpOworCSh2b2lkKSBTbHJ1U2NhbkRpcmVjdG9yeShTTFJVX0NPTU1JVF9UU19JRCwKKwkJCQkJ CQkgQ29tbWl0VHNQYWdlUHJlY2VkZXMsCisJCQkJCQkJIFNscnVTY2FuRGlyQ2JEZWxldGVBbGws IE5VTEwpOwogfQogCiAvKgpAQCAtODM0LDEyICs4MDYsOCBAQCBFeHRlbmRDb21taXRUcyhUcmFu c2FjdGlvbklkIG5ld2VzdFhhY3QpCiAKIAlwYWdlbm8gPSBUcmFuc2FjdGlvbklkVG9DVHNQYWdl KG5ld2VzdFhhY3QpOwogCi0JTFdMb2NrQWNxdWlyZShDb21taXRUc1NMUlVMb2NrLCBMV19FWENM VVNJVkUpOwotCiAJLyogWmVybyB0aGUgcGFnZSBhbmQgbWFrZSBhbiBYTE9HIGVudHJ5IGFib3V0 IGl0ICovCi0JWmVyb0NvbW1pdFRzUGFnZShwYWdlbm8sICFJblJlY292ZXJ5KTsKLQotCUxXTG9j a1JlbGVhc2UoQ29tbWl0VHNTTFJVTG9jayk7CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihaZXJvQ29t bWl0VHNQYWdlKHBhZ2VubywgIUluUmVjb3ZlcnkpKTsKIH0KIAogLyoKQEAgLTg2MCw3ICs4Mjgs OSBAQCBUcnVuY2F0ZUNvbW1pdFRzKFRyYW5zYWN0aW9uSWQgb2xkZXN0WGFjdCkKIAljdXRvZmZQ YWdlID0gVHJhbnNhY3Rpb25JZFRvQ1RzUGFnZShvbGRlc3RYYWN0KTsKIAogCS8qIENoZWNrIHRv IHNlZSBpZiB0aGVyZSdzIGFueSBmaWxlcyB0aGF0IGNvdWxkIGJlIHJlbW92ZWQgKi8KLQlpZiAo IVNscnVTY2FuRGlyZWN0b3J5KENvbW1pdFRzQ3RsLCBTbHJ1U2NhbkRpckNiUmVwb3J0UHJlc2Vu Y2UsCisJaWYgKCFTbHJ1U2NhbkRpcmVjdG9yeShTTFJVX0NPTU1JVF9UU19JRCwKKwkJCQkJCSAg IENvbW1pdFRzUGFnZVByZWNlZGVzLAorCQkJCQkJICAgU2xydVNjYW5EaXJDYlJlcG9ydFByZXNl bmNlLAogCQkJCQkJICAgJmN1dG9mZlBhZ2UpKQogCQlyZXR1cm47CQkJCQkvKiBub3RoaW5nIHRv IHJlbW92ZSAqLwogCkBAIC04NjgsNyArODM4LDcgQEAgVHJ1bmNhdGVDb21taXRUcyhUcmFuc2Fj dGlvbklkIG9sZGVzdFhhY3QpCiAJV3JpdGVUcnVuY2F0ZVhsb2dSZWMoY3V0b2ZmUGFnZSwgb2xk ZXN0WGFjdCk7CiAKIAkvKiBOb3cgd2UgY2FuIHJlbW92ZSB0aGUgb2xkIENvbW1pdFRzIHNlZ21l bnQocykgKi8KLQlTaW1wbGVMcnVUcnVuY2F0ZShDb21taXRUc0N0bCwgY3V0b2ZmUGFnZSk7CisJ U2ltcGxlTHJ1VHJ1bmNhdGUoU0xSVV9DT01NSVRfVFNfSUQsIENvbW1pdFRzUGFnZVByZWNlZGVz LCBjdXRvZmZQYWdlKTsKIH0KIAogLyoKQEAgLTk1NCwxMiArOTI0LDE2IEBAIENvbW1pdFRzUGFn ZVByZWNlZGVzKGludCBwYWdlMSwgaW50IHBhZ2UyKQogLyoKICAqIFdyaXRlIGEgWkVST1BBR0Ug eGxvZyByZWNvcmQKICAqLwotc3RhdGljIHZvaWQKK3N0YXRpYyBYTG9nUmVjUHRyIAogV3JpdGVa ZXJvUGFnZVhsb2dSZWMoaW50IHBhZ2VubykKIHsKKwlYTG9nUmVjUHRyIGxzbjsKKwkKIAlYTG9n QmVnaW5JbnNlcnQoKTsKIAlYTG9nUmVnaXN0ZXJEYXRhKChjaGFyICopICgmcGFnZW5vKSwgc2l6 ZW9mKGludCkpOwotCSh2b2lkKSBYTG9nSW5zZXJ0KFJNX0NPTU1JVF9UU19JRCwgQ09NTUlUX1RT X1pFUk9QQUdFKTsKKwlsc24gPSBYTG9nSW5zZXJ0KFJNX0NPTU1JVF9UU19JRCwgQ09NTUlUX1RT X1pFUk9QQUdFKTsKKwkKKwlyZXR1cm4gbHNuOwogfQogCiAvKgpAQCAtOTkyLDE3ICs5NjYsMTkg QEAgY29tbWl0X3RzX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJaWYgKGluZm8gPT0g Q09NTUlUX1RTX1pFUk9QQUdFKQogCXsKIAkJaW50CQkJcGFnZW5vOwotCQlpbnQJCQlzbG90bm87 CisJCUJ1ZmZlcgkJYnVmZmVyOworCQlQYWdlCQlwYWdlOwogCiAJCW1lbWNweSgmcGFnZW5vLCBY TG9nUmVjR2V0RGF0YShyZWNvcmQpLCBzaXplb2YoaW50KSk7CiAKLQkJTFdMb2NrQWNxdWlyZShD b21taXRUc1NMUlVMb2NrLCBMV19FWENMVVNJVkUpOwotCi0JCXNsb3RubyA9IFplcm9Db21taXRU c1BhZ2UocGFnZW5vLCBmYWxzZSk7Ci0JCVNpbXBsZUxydVdyaXRlUGFnZShDb21taXRUc0N0bCwg c2xvdG5vKTsKLQkJQXNzZXJ0KCFDb21taXRUc0N0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Ru b10pOwotCi0JCUxXTG9ja1JlbGVhc2UoQ29tbWl0VHNTTFJVTG9jayk7CisJCWJ1ZmZlciA9IFpl cm9TbHJ1QnVmZmVyKFNMUlVfQ09NTUlUX1RTX0lELCBwYWdlbm8pOworCQkKKwkJcGFnZSA9IEJ1 ZmZlckdldFBhZ2UoYnVmZmVyKTsKKwkJUGFnZUluaXRTTFJVKHBhZ2UsIEJMQ0tTWiwgMCk7CisJ CQorCQlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKKwkJRmx1c2hPbmVCdWZmZXIoYnVmZmVyKTsK KwkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCX0KIAllbHNlIGlmIChpbmZvID09IENP TU1JVF9UU19UUlVOQ0FURSkKIAl7CkBAIC0xMDEwLDIzICs5ODYsOCBAQCBjb21taXRfdHNfcmVk byhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAogCQlBZHZhbmNlT2xkZXN0Q29tbWl0VHNYaWQo dHJ1bmMtPm9sZGVzdFhpZCk7CiAKLQkJLyoKLQkJICogRHVyaW5nIFhMT0cgcmVwbGF5LCBsYXRl c3RfcGFnZV9udW1iZXIgaXNuJ3Qgc2V0IHVwIHlldDsgaW5zZXJ0IGEKLQkJICogc3VpdGFibGUg dmFsdWUgdG8gYnlwYXNzIHRoZSBzYW5pdHkgdGVzdCBpbiBTaW1wbGVMcnVUcnVuY2F0ZS4KLQkJ ICovCi0JCUNvbW1pdFRzQ3RsLT5zaGFyZWQtPmxhdGVzdF9wYWdlX251bWJlciA9IHRydW5jLT5w YWdlbm87Ci0KLQkJU2ltcGxlTHJ1VHJ1bmNhdGUoQ29tbWl0VHNDdGwsIHRydW5jLT5wYWdlbm8p OworCQlTaW1wbGVMcnVUcnVuY2F0ZShTTFJVX0NPTU1JVF9UU19JRCwgQ29tbWl0VHNQYWdlUHJl Y2VkZXMsIHRydW5jLT5wYWdlbm8pOwogCX0KIAllbHNlCiAJCWVsb2coUEFOSUMsICJjb21taXRf dHNfcmVkbzogdW5rbm93biBvcCBjb2RlICV1IiwgaW5mbyk7CiB9Ci0KLS8qCi0gKiBFbnRyeXBv aW50IGZvciBzeW5jLmMgdG8gc3luYyBjb21taXRfdHMgZmlsZXMuCi0gKi8KLWludAotY29tbWl0 dHNzeW5jZmlsZXRhZyhjb25zdCBGaWxlVGFnICpmdGFnLCBjaGFyICpwYXRoKQotewotCXJldHVy biBTbHJ1U3luY0ZpbGVUYWcoQ29tbWl0VHNDdGwsIGZ0YWcsIHBhdGgpOwotfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYwppbmRleCBlMTE5MWE3NTY0Yy4uMzU4YzY3ZmE2NWMg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCkBAIC0xMDYsNyArMTA2LDcg QEAKICAqLwogCiAvKiBXZSBuZWVkIGZvdXIgYnl0ZXMgcGVyIG9mZnNldCAqLwotI2RlZmluZSBN VUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRSAoQkxDS1NaIC8gc2l6ZW9mKE11bHRpWGFjdE9mZnNl dCkpCisjZGVmaW5lIE1VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdFICgoQkxDS1NaIC0gU2l6ZU9m UGFnZUhlYWRlckRhdGEpLyBzaXplb2YoTXVsdGlYYWN0T2Zmc2V0KSkKIAogI2RlZmluZSBNdWx0 aVhhY3RJZFRvT2Zmc2V0UGFnZSh4aWQpIFwKIAkoKHhpZCkgLyAoTXVsdGlYYWN0T2Zmc2V0KSBN VUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRSkKQEAgLTEzOCw3ICsxMzgsNyBAQAogLyogc2l6ZSBp biBieXRlcyBvZiBhIGNvbXBsZXRlIGdyb3VwICovCiAjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJH Uk9VUF9TSVpFIFwKIAkoc2l6ZW9mKFRyYW5zYWN0aW9uSWQpICogTVVMVElYQUNUX01FTUJFUlNf UEVSX01FTUJFUkdST1VQICsgTVVMVElYQUNUX0ZMQUdCWVRFU19QRVJfR1JPVVApCi0jZGVmaW5l IE1VTFRJWEFDVF9NRU1CRVJHUk9VUFNfUEVSX1BBR0UgKEJMQ0tTWiAvIE1VTFRJWEFDVF9NRU1C RVJHUk9VUF9TSVpFKQorI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBTX1BFUl9QQUdFICgo QkxDS1NaIC0gU2l6ZU9mUGFnZUhlYWRlckRhdGEpIC8gTVVMVElYQUNUX01FTUJFUkdST1VQX1NJ WkUpCiAjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFCVwKIAkoTVVMVElYQUNUX01F TUJFUkdST1VQU19QRVJfUEFHRSAqIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUCkK IApAQCAtMTYxLDkgKzE2MSw5IEBACiAKIC8qIExvY2F0aW9uIChieXRlIG9mZnNldCB3aXRoaW4g cGFnZSkgb2YgZmxhZyB3b3JkIGZvciBhIGdpdmVuIG1lbWJlciAqLwogI2RlZmluZSBNWE9mZnNl dFRvRmxhZ3NPZmZzZXQoeGlkKSBcCi0JKCgoKHhpZCkgLyAoVHJhbnNhY3Rpb25JZCkgTVVMVElY QUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQKSAlIFwKKwkoKCgoKHhpZCkgLyAoVHJhbnNhY3Rp b25JZCkgTVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQKSAlIFwKIAkgIChUcmFuc2Fj dGlvbklkKSBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBTX1BFUl9QQUdFKSAqIFwKLQkgKFRyYW5zYWN0 aW9uSWQpIE1VTFRJWEFDVF9NRU1CRVJHUk9VUF9TSVpFKQorCSAoVHJhbnNhY3Rpb25JZCkgTVVM VElYQUNUX01FTUJFUkdST1VQX1NJWkUpKQogI2RlZmluZSBNWE9mZnNldFRvRmxhZ3NCaXRTaGlm dCh4aWQpIFwKIAkoKCh4aWQpICUgKFRyYW5zYWN0aW9uSWQpIE1VTFRJWEFDVF9NRU1CRVJTX1BF Ul9NRU1CRVJHUk9VUCkgKiBcCiAJIE1YQUNUX01FTUJFUl9CSVRTX1BFUl9YQUNUKQpAQCAtMTgx LDE1ICsxODEsNiBAQAogI2RlZmluZSBQcmV2aW91c011bHRpWGFjdElkKHhpZCkgXAogCSgoeGlk KSA9PSBGaXJzdE11bHRpWGFjdElkID8gTWF4TXVsdGlYYWN0SWQgOiAoeGlkKSAtIDEpCiAKLS8q Ci0gKiBMaW5rcyB0byBzaGFyZWQtbWVtb3J5IGRhdGEgc3RydWN0dXJlcyBmb3IgTXVsdGlYYWN0 IGNvbnRyb2wKLSAqLwotc3RhdGljIFNscnVDdGxEYXRhIE11bHRpWGFjdE9mZnNldEN0bERhdGE7 Ci1zdGF0aWMgU2xydUN0bERhdGEgTXVsdGlYYWN0TWVtYmVyQ3RsRGF0YTsKLQotI2RlZmluZSBN dWx0aVhhY3RPZmZzZXRDdGwJKCZNdWx0aVhhY3RPZmZzZXRDdGxEYXRhKQotI2RlZmluZSBNdWx0 aVhhY3RNZW1iZXJDdGwJKCZNdWx0aVhhY3RNZW1iZXJDdGxEYXRhKQotCiAvKgogICogTXVsdGlY YWN0IHN0YXRlIHNoYXJlZCBhY3Jvc3MgYWxsIGJhY2tlbmRzLiAgQWxsIHRoaXMgc3RhdGUgaXMg cHJvdGVjdGVkCiAgKiBieSBNdWx0aVhhY3RHZW5Mb2NrLiAgKFdlIGFsc28gdXNlIE11bHRpWGFj dE9mZnNldFNMUlVMb2NrIGFuZApAQCAtMzM5LDggKzMzMCw4IEBAIHN0YXRpYyBNZW1vcnlDb250 ZXh0IE1YYWN0Q29udGV4dCA9IE5VTEw7CiAvKiBpbnRlcm5hbCBNdWx0aVhhY3RJZCBtYW5hZ2Vt ZW50ICovCiBzdGF0aWMgdm9pZCBNdWx0aVhhY3RJZFNldE9sZGVzdFZpc2libGUodm9pZCk7CiBz dGF0aWMgdm9pZCBSZWNvcmROZXdNdWx0aVhhY3QoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFj dE9mZnNldCBvZmZzZXQsCi0JCQkJCQkJICAgaW50IG5tZW1iZXJzLCBNdWx0aVhhY3RNZW1iZXIg Km1lbWJlcnMpOwotc3RhdGljIE11bHRpWGFjdElkIEdldE5ld011bHRpWGFjdElkKGludCBubWVt YmVycywgTXVsdGlYYWN0T2Zmc2V0ICpvZmZzZXQpOworCQkJCQkJCSAgIGludCBubWVtYmVycywg TXVsdGlYYWN0TWVtYmVyICptZW1iZXJzLCBCdWZmZXIgKiBvZmZzZXRfYnVmX3B0ciwgQnVmZmVy ICogbWVtYmVyX2J1ZnMpOworc3RhdGljIE11bHRpWGFjdElkIEdldE5ld011bHRpWGFjdElkKGlu dCBubWVtYmVycywgTXVsdGlYYWN0T2Zmc2V0ICpvZmZzZXQsIEJ1ZmZlciAqIG9mZnNldF9idWYs IEJ1ZmZlciAqKiBtZW1iZXJfYnVmcyk7CiAKIC8qIE11bHRpWGFjdCBjYWNoZSBtYW5hZ2VtZW50 ICovCiBzdGF0aWMgaW50CW14YWN0TWVtYmVyQ29tcGFyYXRvcihjb25zdCB2b2lkICphcmcxLCBj b25zdCB2b2lkICphcmcyKTsKQEAgLTM1MiwxOSArMzQzLDE4IEBAIHN0YXRpYyB2b2lkIG1YYWN0 Q2FjaGVQdXQoTXVsdGlYYWN0SWQgbXVsdGksIGludCBubWVtYmVycywKIHN0YXRpYyBjaGFyICpt eHN0YXR1c190b19zdHJpbmcoTXVsdGlYYWN0U3RhdHVzIHN0YXR1cyk7CiAKIC8qIG1hbmFnZW1l bnQgb2YgU0xSVSBpbmZyYXN0cnVjdHVyZSAqLwotc3RhdGljIGludAlaZXJvTXVsdGlYYWN0T2Zm c2V0UGFnZShpbnQgcGFnZW5vLCBib29sIHdyaXRlWGxvZyk7Ci1zdGF0aWMgaW50CVplcm9NdWx0 aVhhY3RNZW1iZXJQYWdlKGludCBwYWdlbm8sIGJvb2wgd3JpdGVYbG9nKTsKK3N0YXRpYyBCdWZm ZXIgWmVyb011bHRpWGFjdE9mZnNldFBhZ2UoaW50IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cpOwor c3RhdGljIEJ1ZmZlciBaZXJvTXVsdGlYYWN0TWVtYmVyUGFnZShpbnQgcGFnZW5vLCBib29sIHdy aXRlWGxvZyk7CiBzdGF0aWMgYm9vbCBNdWx0aVhhY3RPZmZzZXRQYWdlUHJlY2VkZXMoaW50IHBh Z2UxLCBpbnQgcGFnZTIpOwotc3RhdGljIGJvb2wgTXVsdGlYYWN0TWVtYmVyUGFnZVByZWNlZGVz KGludCBwYWdlMSwgaW50IHBhZ2UyKTsKIHN0YXRpYyBib29sIE11bHRpWGFjdE9mZnNldFByZWNl ZGVzKE11bHRpWGFjdE9mZnNldCBvZmZzZXQxLAogCQkJCQkJCQkJTXVsdGlYYWN0T2Zmc2V0IG9m ZnNldDIpOwotc3RhdGljIHZvaWQgRXh0ZW5kTXVsdGlYYWN0T2Zmc2V0KE11bHRpWGFjdElkIG11 bHRpKTsKLXN0YXRpYyB2b2lkIEV4dGVuZE11bHRpWGFjdE1lbWJlcihNdWx0aVhhY3RPZmZzZXQg b2Zmc2V0LCBpbnQgbm1lbWJlcnMpOworc3RhdGljIHZvaWQgRXh0ZW5kTXVsdGlYYWN0T2Zmc2V0 KE11bHRpWGFjdElkIG11bHRpLCBCdWZmZXIgKiBidWZmZXIpOworc3RhdGljIHZvaWQgRXh0ZW5k TXVsdGlYYWN0TWVtYmVyKE11bHRpWGFjdE9mZnNldCBvZmZzZXQsIGludCBubWVtYmVycywgQnVm ZmVyICoqIG1lbWJlcl9idWZmZXJzKTsKIHN0YXRpYyBib29sIE11bHRpWGFjdE9mZnNldFdvdWxk V3JhcChNdWx0aVhhY3RPZmZzZXQgYm91bmRhcnksCiAJCQkJCQkJCQkgTXVsdGlYYWN0T2Zmc2V0 IHN0YXJ0LCB1aW50MzIgZGlzdGFuY2UpOwogc3RhdGljIGJvb2wgU2V0T2Zmc2V0VmFjdXVtTGlt aXQoYm9vbCBpc19zdGFydHVwKTsKIHN0YXRpYyBib29sIGZpbmRfbXVsdGl4YWN0X3N0YXJ0KE11 bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RPZmZzZXQgKnJlc3VsdCk7Ci1zdGF0aWMgdm9pZCBX cml0ZU1aZXJvUGFnZVhsb2dSZWMoaW50IHBhZ2VubywgdWludDggaW5mbyk7CitzdGF0aWMgWExv Z1JlY1B0ciBXcml0ZU1aZXJvUGFnZVhsb2dSZWMoaW50IHBhZ2VubywgdWludDggaW5mbyk7CiBz dGF0aWMgdm9pZCBXcml0ZU1UcnVuY2F0ZVhsb2dSZWMoT2lkIG9sZGVzdE11bHRpREIsCiAJCQkJ CQkJCSAgTXVsdGlYYWN0SWQgc3RhcnRUcnVuY09mZiwKIAkJCQkJCQkJICBNdWx0aVhhY3RJZCBl bmRUcnVuY09mZiwKQEAgLTc2NSw2ICs3NTUsOSBAQCBSZWFkTXVsdGlYYWN0SWRSYW5nZShNdWx0 aVhhY3RJZCAqb2xkZXN0LCBNdWx0aVhhY3RJZCAqbmV4dCkKIE11bHRpWGFjdElkCiBNdWx0aVhh Y3RJZENyZWF0ZUZyb21NZW1iZXJzKGludCBubWVtYmVycywgTXVsdGlYYWN0TWVtYmVyICptZW1i ZXJzKQogeworCUJ1ZmZlciAqIG1lbWJlcl9idWZzOworCUJ1ZmZlciBvZmZzZXRfYnVmZjsKKwog CU11bHRpWGFjdElkIG11bHRpOwogCU11bHRpWGFjdE9mZnNldCBvZmZzZXQ7CiAJeGxfbXVsdGl4 YWN0X2NyZWF0ZSB4bHJlYzsKQEAgLTgxOCw3ICs4MTEsOCBAQCBNdWx0aVhhY3RJZENyZWF0ZUZy b21NZW1iZXJzKGludCBubWVtYmVycywgTXVsdGlYYWN0TWVtYmVyICptZW1iZXJzKQogCSAqIGlu IHZhY3V1bS4gIER1cmluZyB2YWN1dW0sIGluIHBhcnRpY3VsYXIsIGl0IHdvdWxkIGJlIHVuYWNj ZXB0YWJsZSB0bwogCSAqIGtlZXAgT2xkZXN0TXVsdGkgc2V0LCBpbiBjYXNlIGl0IHJ1bnMgZm9y IGxvbmcuCiAJICovCi0JbXVsdGkgPSBHZXROZXdNdWx0aVhhY3RJZChubWVtYmVycywgJm9mZnNl dCk7CisKKwltdWx0aSA9IEdldE5ld011bHRpWGFjdElkKG5tZW1iZXJzLCAmb2Zmc2V0LCAmb2Zm c2V0X2J1ZmYsICZtZW1iZXJfYnVmcyk7CiAKIAkvKiBNYWtlIGFuIFhMT0cgZW50cnkgZGVzY3Jp YmluZyB0aGUgbmV3IE1YSUQuICovCiAJeGxyZWMubWlkID0gbXVsdGk7CkBAIC04MzgsOCArODMy LDggQEAgTXVsdGlYYWN0SWRDcmVhdGVGcm9tTWVtYmVycyhpbnQgbm1lbWJlcnMsIE11bHRpWGFj dE1lbWJlciAqbWVtYmVycykKIAkodm9pZCkgWExvZ0luc2VydChSTV9NVUxUSVhBQ1RfSUQsIFhM T0dfTVVMVElYQUNUX0NSRUFURV9JRCk7CiAKIAkvKiBOb3cgZW50ZXIgdGhlIGluZm9ybWF0aW9u IGludG8gdGhlIE9GRlNFVHMgYW5kIE1FTUJFUnMgbG9ncyAqLwotCVJlY29yZE5ld011bHRpWGFj dChtdWx0aSwgb2Zmc2V0LCBubWVtYmVycywgbWVtYmVycyk7Ci0KKwlSZWNvcmROZXdNdWx0aVhh Y3QobXVsdGksIG9mZnNldCwgbm1lbWJlcnMsIG1lbWJlcnMsICZvZmZzZXRfYnVmZiwgbWVtYmVy X2J1ZnMpOworCQogCS8qIERvbmUgd2l0aCBjcml0aWNhbCBzZWN0aW9uICovCiAJRU5EX0NSSVRf U0VDVElPTigpOwogCkBAIC04NjAsNDAgKzg1NCwzOCBAQCBNdWx0aVhhY3RJZENyZWF0ZUZyb21N ZW1iZXJzKGludCBubWVtYmVycywgTXVsdGlYYWN0TWVtYmVyICptZW1iZXJzKQogICovCiBzdGF0 aWMgdm9pZAogUmVjb3JkTmV3TXVsdGlYYWN0KE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RP ZmZzZXQgb2Zmc2V0LAotCQkJCSAgIGludCBubWVtYmVycywgTXVsdGlYYWN0TWVtYmVyICptZW1i ZXJzKQorCQkJCSAgIGludCBubWVtYmVycywgTXVsdGlYYWN0TWVtYmVyICptZW1iZXJzLCBCdWZm ZXIgKiBvZmZzZXRfYnVmX3B0ciwgQnVmZmVyICogbWVtYmVyX2J1ZnMpCiB7CiAJaW50CQkJcGFn ZW5vOwogCWludAkJCXByZXZfcGFnZW5vOworCWludCAJCW1pbl9wYWdlbm87CiAJaW50CQkJZW50 cnlubzsKLQlpbnQJCQlzbG90bm87CiAJTXVsdGlYYWN0T2Zmc2V0ICpvZmZwdHI7CiAJaW50CQkJ aTsKLQotCUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2ssIExXX0VYQ0xVU0lW RSk7CisJQnVmZmVyCQlidWZmZXI7CisJQnVmZmVyCQlvZmZzZXRfYnVmOwogCiAJcGFnZW5vID0g TXVsdGlYYWN0SWRUb09mZnNldFBhZ2UobXVsdGkpOwogCWVudHJ5bm8gPSBNdWx0aVhhY3RJZFRv T2Zmc2V0RW50cnkobXVsdGkpOwogCi0JLyoKLQkgKiBOb3RlOiB3ZSBwYXNzIHRoZSBNdWx0aVhh Y3RJZCB0byBTaW1wbGVMcnVSZWFkUGFnZSBhcyB0aGUgInRyYW5zYWN0aW9uIgotCSAqIHRvIGNv bXBsYWluIGFib3V0IGlmIHRoZXJlJ3MgYW55IEkvTyBlcnJvci4gIFRoaXMgaXMga2luZGEgYm9n dXMsIGJ1dAotCSAqIHNpbmNlIHRoZSBlcnJvcnMgd2lsbCBhbHdheXMgZ2l2ZSB0aGUgZnVsbCBw YXRobmFtZSwgaXQgc2hvdWxkIGJlIGNsZWFyCi0JICogZW5vdWdoIHRoYXQgYSBNdWx0aVhhY3RJ ZCBpcyByZWFsbHkgaW52b2x2ZWQuICBQZXJoYXBzIHNvbWVkYXkgd2UnbGwKLQkgKiB0YWtlIHRo ZSB0cm91YmxlIHRvIGdlbmVyYWxpemUgdGhlIHNscnUuYyBlcnJvciByZXBvcnRpbmcgY29kZS4K LQkgKi8KLQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIHBh Z2VubywgdHJ1ZSwgbXVsdGkpOwotCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikgTXVsdGlY YWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107Ci0Jb2ZmcHRyICs9IGVu dHJ5bm87CisJaWYgKG9mZnNldF9idWZfcHRyKQorCQlvZmZzZXRfYnVmID0gKm9mZnNldF9idWZf cHRyOworCWVsc2UgCisJCW9mZnNldF9idWYgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX01VTFRJWEFD VF9PRkZTRVRfSUQsIHBhZ2VubywgUkJNX05PUk1BTCk7CiAKLQkqb2ZmcHRyID0gb2Zmc2V0Owor CUxvY2tCdWZmZXIob2Zmc2V0X2J1ZiwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKKwkJCQkJCQog Ci0JTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSA9IHRydWU7 CisJb2ZmcHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSBQYWdlR2V0Q29udGVudHMoQnVmZmVyR2V0 UGFnZShvZmZzZXRfYnVmKSk7CisJb2ZmcHRyICs9IGVudHJ5bm87CiAKLQkvKiBFeGNoYW5nZSBv dXIgbG9jayAqLwotCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2spOworCSpv ZmZwdHIgPSBvZmZzZXQ7CiAKLQlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdE1lbWJlclNMUlVMb2Nr LCBMV19FWENMVVNJVkUpOworCU1hcmtCdWZmZXJEaXJ0eShvZmZzZXRfYnVmKTsKKwlVbmxvY2tS ZWxlYXNlQnVmZmVyKG9mZnNldF9idWYpOworCWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CiAKKwlt aW5fcGFnZW5vID0gTVhPZmZzZXRUb01lbWJlclBhZ2Uob2Zmc2V0KTsKIAlwcmV2X3BhZ2VubyA9 IC0xOwogCiAJZm9yIChpID0gMDsgaSA8IG5tZW1iZXJzOyBpKyssIG9mZnNldCsrKQpAQCAtOTE0 LDI3ICs5MDYsMzUgQEAgUmVjb3JkTmV3TXVsdGlYYWN0KE11bHRpWGFjdElkIG11bHRpLCBNdWx0 aVhhY3RPZmZzZXQgb2Zmc2V0LAogCiAJCWlmIChwYWdlbm8gIT0gcHJldl9wYWdlbm8pCiAJCXsK LQkJCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKE11bHRpWGFjdE1lbWJlckN0bCwgcGFnZW5v LCB0cnVlLCBtdWx0aSk7CisJCQlpZiAoQnVmZmVySXNWYWxpZChidWZmZXIpKQorCQkJCVVubG9j a1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKKworCQkJaWYgKG1lbWJlcl9idWZzKQorCQkJCWJ1ZmZl ciA9IG1lbWJlcl9idWZzW3BhZ2VubyAtIG1pbl9wYWdlbm9dOworCQkJZWxzZQorCQkJCWJ1ZmZl ciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX01FTUJFUl9JRCwgcGFnZW5vLCBSQk1f Tk9STUFMKTsKKworCQkJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7 CiAJCQlwcmV2X3BhZ2VubyA9IHBhZ2VubzsKIAkJfQogCi0JCW1lbWJlcnB0ciA9IChUcmFuc2Fj dGlvbklkICopCi0JCQkoTXVsdGlYYWN0TWVtYmVyQ3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Ns b3Rub10gKyBtZW1iZXJvZmYpOworCQltZW1iZXJwdHIgPSAoVHJhbnNhY3Rpb25JZCAqKSAoUGFn ZUdldENvbnRlbnRzKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSkgKyBtZW1iZXJvZmYpOwogCiAJCSpt ZW1iZXJwdHIgPSBtZW1iZXJzW2ldLnhpZDsKIAotCQlmbGFnc3B0ciA9ICh1aW50MzIgKikKLQkJ CShNdWx0aVhhY3RNZW1iZXJDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArIGZsYWdz b2ZmKTsKKwkJZmxhZ3NwdHIgPSAodWludDMyICopIChQYWdlR2V0Q29udGVudHMoQnVmZmVyR2V0 UGFnZShidWZmZXIpKSArIGZsYWdzb2ZmKTsKIAogCQlmbGFnc3ZhbCA9ICpmbGFnc3B0cjsKIAkJ ZmxhZ3N2YWwgJj0gfigoKDEgPDwgTVhBQ1RfTUVNQkVSX0JJVFNfUEVSX1hBQ1QpIC0gMSkgPDwg YnNoaWZ0KTsKIAkJZmxhZ3N2YWwgfD0gKG1lbWJlcnNbaV0uc3RhdHVzIDw8IGJzaGlmdCk7CiAJ CSpmbGFnc3B0ciA9IGZsYWdzdmFsOwogCi0JCU11bHRpWGFjdE1lbWJlckN0bC0+c2hhcmVkLT5w YWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVlOworCQlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKIAl9 CiAKLQlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdE1lbWJlclNMUlVMb2NrKTsKKwlVbmxvY2tSZWxl YXNlQnVmZmVyKGJ1ZmZlcik7CisJaWYgKG1lbWJlcl9idWZzICE9IE5VTEwpCisJCXBmcmVlKG1l bWJlcl9idWZzKTsKIH0KIAogLyoKQEAgLTk1Myw4ICs5NTMsMTEgQEAgUmVjb3JkTmV3TXVsdGlY YWN0KE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0LAogICogY2FsbGVy IG11c3QgZW5kIHRoZSBjcml0aWNhbCBzZWN0aW9uIGFmdGVyIHdyaXRpbmcgU0xSVSBkYXRhLgog ICovCiBzdGF0aWMgTXVsdGlYYWN0SWQKLUdldE5ld011bHRpWGFjdElkKGludCBubWVtYmVycywg TXVsdGlYYWN0T2Zmc2V0ICpvZmZzZXQpCitHZXROZXdNdWx0aVhhY3RJZChpbnQgbm1lbWJlcnMs IE11bHRpWGFjdE9mZnNldCAqb2Zmc2V0LCBCdWZmZXIgKiBvZmZzZXRfYnVmLCBCdWZmZXIgKiog bWVtYmVyX2J1ZnMpCiB7CisJaW50IG1pbl9wYWdlbm87CisJaW50IG1heF9wYWdlbm87CisKIAlN dWx0aVhhY3RJZCByZXN1bHQ7CiAJTXVsdGlYYWN0T2Zmc2V0IG5leHRPZmZzZXQ7CiAKQEAgLTEw NzIsNyArMTA3NSw3IEBAIEdldE5ld011bHRpWGFjdElkKGludCBubWVtYmVycywgTXVsdGlYYWN0 T2Zmc2V0ICpvZmZzZXQpCiAJfQogCiAJLyogTWFrZSBzdXJlIHRoZXJlIGlzIHJvb20gZm9yIHRo ZSBNWElEIGluIHRoZSBmaWxlLiAgKi8KLQlFeHRlbmRNdWx0aVhhY3RPZmZzZXQocmVzdWx0KTsK KwlFeHRlbmRNdWx0aVhhY3RPZmZzZXQocmVzdWx0LCBvZmZzZXRfYnVmKTsKIAogCS8qCiAJICog UmVzZXJ2ZSB0aGUgbWVtYmVycyBzcGFjZSwgc2ltaWxhcmx5IHRvIGFib3ZlLiAgQWxzbywgYmUg Y2FyZWZ1bCBub3QgdG8KQEAgLTExNjAsNyArMTE2MywxMiBAQCBHZXROZXdNdWx0aVhhY3RJZChp bnQgbm1lbWJlcnMsIE11bHRpWGFjdE9mZnNldCAqb2Zmc2V0KQogCQkJCQkJCSAgIE11bHRpWGFj dFN0YXRlLT5vZmZzZXRTdG9wTGltaXQgLSBuZXh0T2Zmc2V0ICsgbm1lbWJlcnMpLAogCQkJCSBl cnJoaW50KCJFeGVjdXRlIGEgZGF0YWJhc2Utd2lkZSBWQUNVVU0gaW4gdGhhdCBkYXRhYmFzZSB3 aXRoIHJlZHVjZWQgdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWluX2FnZSBhbmQgdmFjdXVtX211 bHRpeGFjdF9mcmVlemVfdGFibGVfYWdlIHNldHRpbmdzLiIpKSk7CiAKLQlFeHRlbmRNdWx0aVhh Y3RNZW1iZXIobmV4dE9mZnNldCwgbm1lbWJlcnMpOworCW1pbl9wYWdlbm8gPSBNWE9mZnNldFRv TWVtYmVyUGFnZShuZXh0T2Zmc2V0KTsKKwltYXhfcGFnZW5vID0gTVhPZmZzZXRUb01lbWJlclBh Z2UobmV4dE9mZnNldCArIG5tZW1iZXJzIC0gMSk7CisKKwkqbWVtYmVyX2J1ZnMgPSAoQnVmZmVy ICopIHBhbGxvYyhzaXplb2YoQnVmZmVyKSAqIChtYXhfcGFnZW5vIC0gbWluX3BhZ2VubyArIDEp KTsKKworCUV4dGVuZE11bHRpWGFjdE1lbWJlcihuZXh0T2Zmc2V0LCBubWVtYmVycywgbWVtYmVy X2J1ZnMpOwogCiAJLyoKIAkgKiBDcml0aWNhbCBzZWN0aW9uIGZyb20gaGVyZSB1bnRpbCBjYWxs ZXIgaGFzIHdyaXR0ZW4gdGhlIGRhdGEgaW50byB0aGUKQEAgLTEyMjYsNyArMTIzNCw2IEBAIEdl dE11bHRpWGFjdElkTWVtYmVycyhNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0TWVtYmVyICoq bWVtYmVycywKIAlpbnQJCQlwYWdlbm87CiAJaW50CQkJcHJldl9wYWdlbm87CiAJaW50CQkJZW50 cnlubzsKLQlpbnQJCQlzbG90bm87CiAJTXVsdGlYYWN0T2Zmc2V0ICpvZmZwdHI7CiAJTXVsdGlY YWN0T2Zmc2V0IG9mZnNldDsKIAlpbnQJCQlsZW5ndGg7CkBAIC0xMjM3LDYgKzEyNDQsNyBAQCBH ZXRNdWx0aVhhY3RJZE1lbWJlcnMoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE1lbWJlciAq Km1lbWJlcnMsCiAJTXVsdGlYYWN0SWQgdG1wTVhhY3Q7CiAJTXVsdGlYYWN0T2Zmc2V0IG5leHRP ZmZzZXQ7CiAJTXVsdGlYYWN0TWVtYmVyICpwdHI7CisJQnVmZmVyCQlidWZmZXI7CiAKIAlkZWJ1 Z19lbG9nMyhERUJVRzIsICJHZXRNZW1iZXJzOiBhc2tlZCBmb3IgJXUiLCBtdWx0aSk7CiAKQEAg LTEzNDAsMTMgKzEzNDgsMTIgQEAgR2V0TXVsdGlYYWN0SWRNZW1iZXJzKE11bHRpWGFjdElkIG11 bHRpLCBNdWx0aVhhY3RNZW1iZXIgKiptZW1iZXJzLAogCSAqIHRpbWUgb24gZXZlcnkgbXVsdGl4 YWN0IGNyZWF0aW9uLgogCSAqLwogcmV0cnk6Ci0JTFdMb2NrQWNxdWlyZShNdWx0aVhhY3RPZmZz ZXRTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQogCXBhZ2VubyA9IE11bHRpWGFjdElkVG9PZmZz ZXRQYWdlKG11bHRpKTsKIAllbnRyeW5vID0gTXVsdGlYYWN0SWRUb09mZnNldEVudHJ5KG11bHRp KTsKIAotCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKE11bHRpWGFjdE9mZnNldEN0bCwgcGFn ZW5vLCB0cnVlLCBtdWx0aSk7Ci0Jb2ZmcHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSBNdWx0aVhh Y3RPZmZzZXRDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXTsKKwlidWZmZXIgPSBSZWFk U2xydUJ1ZmZlcihTTFJVX01VTFRJWEFDVF9PRkZTRVRfSUQsIHBhZ2VubywgUkJNX05PUk1BTCk7 CisJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX1NIQVJFKTsKKwlvZmZwdHIgPSAoTXVs dGlYYWN0T2Zmc2V0ICopIChQYWdlR2V0Q29udGVudHMoQnVmZmVyR2V0UGFnZShidWZmZXIpKSk7 CiAJb2ZmcHRyICs9IGVudHJ5bm87CiAJb2Zmc2V0ID0gKm9mZnB0cjsKIApAQCAtMTM3NywxNiAr MTM4NCwyMCBAQCByZXRyeToKIAkJZW50cnlubyA9IE11bHRpWGFjdElkVG9PZmZzZXRFbnRyeSh0 bXBNWGFjdCk7CiAKIAkJaWYgKHBhZ2VubyAhPSBwcmV2X3BhZ2VubykKLQkJCXNsb3RubyA9IFNp bXBsZUxydVJlYWRQYWdlKE11bHRpWGFjdE9mZnNldEN0bCwgcGFnZW5vLCB0cnVlLCB0bXBNWGFj dCk7CisJCXsKKwkJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKKwkJCWJ1ZmZlciA9IFJl YWRTbHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwgcGFnZW5vLCBSQk1fTk9STUFM KTsKKwkJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19TSEFSRSk7CisJCX0KIAotCQlv ZmZwdHIgPSAoTXVsdGlYYWN0T2Zmc2V0ICopIE11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5w YWdlX2J1ZmZlcltzbG90bm9dOworCQlvZmZwdHIgPSAoTXVsdGlYYWN0T2Zmc2V0ICopIChQYWdl R2V0Q29udGVudHMoQnVmZmVyR2V0UGFnZShidWZmZXIpKSk7CiAJCW9mZnB0ciArPSBlbnRyeW5v OwogCQluZXh0TVhPZmZzZXQgPSAqb2ZmcHRyOwogCiAJCWlmIChuZXh0TVhPZmZzZXQgPT0gMCkK IAkJewogCQkJLyogQ29ybmVyIGNhc2UgMjogbmV4dCBtdWx0aXhhY3QgaXMgc3RpbGwgYmVpbmcg ZmlsbGVkIGluICovCi0JCQlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdE9mZnNldFNMUlVMb2NrKTsK KwkJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIAkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRT KCk7CiAJCQlwZ191c2xlZXAoMTAwMEwpOwogCQkJZ290byByZXRyeTsKQEAgLTEzOTQsMTQgKzE0 MDUsMTEgQEAgcmV0cnk6CiAKIAkJbGVuZ3RoID0gbmV4dE1YT2Zmc2V0IC0gb2Zmc2V0OwogCX0K LQotCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2spOworCVVubG9ja1JlbGVh c2VCdWZmZXIoYnVmZmVyKTsKKwlidWZmZXIgPSBJbnZhbGlkQnVmZmVyOwogCiAJcHRyID0gKE11 bHRpWGFjdE1lbWJlciAqKSBwYWxsb2MobGVuZ3RoICogc2l6ZW9mKE11bHRpWGFjdE1lbWJlcikp OwogCi0JLyogTm93IGdldCB0aGUgbWVtYmVycyB0aGVtc2VsdmVzLiAqLwotCUxXTG9ja0FjcXVp cmUoTXVsdGlYYWN0TWVtYmVyU0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KIAl0cnVlbGVuZ3Ro ID0gMDsKIAlwcmV2X3BhZ2VubyA9IC0xOwogCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKywg b2Zmc2V0KyspCkBAIC0xNDE3LDEyICsxNDI1LDE0IEBAIHJldHJ5OgogCiAJCWlmIChwYWdlbm8g IT0gcHJldl9wYWdlbm8pCiAJCXsKLQkJCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKE11bHRp WGFjdE1lbWJlckN0bCwgcGFnZW5vLCB0cnVlLCBtdWx0aSk7CisJCQlpZiAoQnVmZmVySXNWYWxp ZChidWZmZXIpKQorCQkJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKKwkJCWJ1ZmZlciA9 IFJlYWRTbHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX01FTUJFUl9JRCwgcGFnZW5vLCBSQk1fTk9S TUFMKTsKKwkJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19TSEFSRSk7CiAJCQlwcmV2 X3BhZ2VubyA9IHBhZ2VubzsKIAkJfQogCi0JCXhhY3RwdHIgPSAoVHJhbnNhY3Rpb25JZCAqKQot CQkJKE11bHRpWGFjdE1lbWJlckN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dICsgbWVt YmVyb2ZmKTsKKwkJeGFjdHB0ciA9IChUcmFuc2FjdGlvbklkICopIChQYWdlR2V0Q29udGVudHMo KEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSkgKyBtZW1iZXJvZmYpKTsKIAogCQlpZiAoIVRyYW5zYWN0 aW9uSWRJc1ZhbGlkKCp4YWN0cHRyKSkKIAkJewpAQCAtMTQzMywxNCArMTQ0MywxMyBAQCByZXRy eToKIAogCQlmbGFnc29mZiA9IE1YT2Zmc2V0VG9GbGFnc09mZnNldChvZmZzZXQpOwogCQlic2hp ZnQgPSBNWE9mZnNldFRvRmxhZ3NCaXRTaGlmdChvZmZzZXQpOwotCQlmbGFnc3B0ciA9ICh1aW50 MzIgKikgKE11bHRpWGFjdE1lbWJlckN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dICsg ZmxhZ3NvZmYpOworCQlmbGFnc3B0ciA9ICh1aW50MzIgKikgKFBhZ2VHZXRDb250ZW50cyhCdWZm ZXJHZXRQYWdlKGJ1ZmZlcikpICsgZmxhZ3NvZmYpOwogCiAJCXB0clt0cnVlbGVuZ3RoXS54aWQg PSAqeGFjdHB0cjsKIAkJcHRyW3RydWVsZW5ndGhdLnN0YXR1cyA9ICgqZmxhZ3NwdHIgPj4gYnNo aWZ0KSAmIE1YQUNUX01FTUJFUl9YQUNUX0JJVE1BU0s7CiAJCXRydWVsZW5ndGgrKzsKIAl9Ci0K LQlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdE1lbWJlclNMUlVMb2NrKTsKKwlVbmxvY2tSZWxlYXNl QnVmZmVyKGJ1ZmZlcik7CiAKIAkvKiBBIG11bHRpeGlkIHdpdGggemVybyBtZW1iZXJzIHNob3Vs ZCBub3QgaGFwcGVuICovCiAJQXNzZXJ0KHRydWVsZW5ndGggPiAwKTsKQEAgLTE4MzIsOCArMTg0 MSw2IEBAIE11bHRpWGFjdFNobWVtU2l6ZSh2b2lkKQogCQkJIG11bF9zaXplKHNpemVvZihNdWx0 aVhhY3RJZCkgKiAyLCBNYXhPbGRlc3RTbG90KSkKIAogCXNpemUgPSBTSEFSRURfTVVMVElYQUNU X1NUQVRFX1NJWkU7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFNpbXBsZUxydVNobWVtU2l6ZShO VU1fTVVMVElYQUNUT0ZGU0VUX0JVRkZFUlMsIDApKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwg U2ltcGxlTHJ1U2htZW1TaXplKE5VTV9NVUxUSVhBQ1RNRU1CRVJfQlVGRkVSUywgMCkpOwogCiAJ cmV0dXJuIHNpemU7CiB9CkBAIC0xODQ1LDIyICsxODUyLDYgQEAgTXVsdGlYYWN0U2htZW1Jbml0 KHZvaWQpCiAKIAlkZWJ1Z19lbG9nMihERUJVRzIsICJTaGFyZWQgTWVtb3J5IEluaXQgZm9yIE11 bHRpWGFjdCIpOwogCi0JTXVsdGlYYWN0T2Zmc2V0Q3RsLT5QYWdlUHJlY2VkZXMgPSBNdWx0aVhh Y3RPZmZzZXRQYWdlUHJlY2VkZXM7Ci0JTXVsdGlYYWN0TWVtYmVyQ3RsLT5QYWdlUHJlY2VkZXMg PSBNdWx0aVhhY3RNZW1iZXJQYWdlUHJlY2VkZXM7Ci0KLQlTaW1wbGVMcnVJbml0KE11bHRpWGFj dE9mZnNldEN0bCwKLQkJCQkgICJNdWx0aVhhY3RPZmZzZXQiLCBOVU1fTVVMVElYQUNUT0ZGU0VU X0JVRkZFUlMsIDAsCi0JCQkJICBNdWx0aVhhY3RPZmZzZXRTTFJVTG9jaywgInBnX211bHRpeGFj dC9vZmZzZXRzIiwKLQkJCQkgIExXVFJBTkNIRV9NVUxUSVhBQ1RPRkZTRVRfQlVGRkVSLAotCQkJ CSAgU1lOQ19IQU5ETEVSX01VTFRJWEFDVF9PRkZTRVQpOwotCVNscnVQYWdlUHJlY2VkZXNVbml0 VGVzdHMoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRSk7Ci0J U2ltcGxlTHJ1SW5pdChNdWx0aVhhY3RNZW1iZXJDdGwsCi0JCQkJICAiTXVsdGlYYWN0TWVtYmVy IiwgTlVNX01VTFRJWEFDVE1FTUJFUl9CVUZGRVJTLCAwLAotCQkJCSAgTXVsdGlYYWN0TWVtYmVy U0xSVUxvY2ssICJwZ19tdWx0aXhhY3QvbWVtYmVycyIsCi0JCQkJICBMV1RSQU5DSEVfTVVMVElY QUNUTUVNQkVSX0JVRkZFUiwKLQkJCQkgIFNZTkNfSEFORExFUl9NVUxUSVhBQ1RfTUVNQkVSKTsK LQkvKiBkb2Vzbid0IGNhbGwgU2ltcGxlTHJ1VHJ1bmNhdGUoKSBvciBtZWV0IGNyaXRlcmlhIGZv ciB1bml0IHRlc3RzICovCi0KIAkvKiBJbml0aWFsaXplIG91ciBzaGFyZWQgc3RhdGUgc3RydWN0 ICovCiAJTXVsdGlYYWN0U3RhdGUgPSBTaG1lbUluaXRTdHJ1Y3QoIlNoYXJlZCBNdWx0aVhhY3Qg U3RhdGUiLAogCQkJCQkJCQkJIFNIQVJFRF9NVUxUSVhBQ1RfU1RBVEVfU0laRSwKQEAgLTE4OTEs MjkgKzE4ODIsMTcgQEAgTXVsdGlYYWN0U2htZW1Jbml0KHZvaWQpCiB2b2lkCiBCb290U3RyYXBN dWx0aVhhY3Qodm9pZCkKIHsKLQlpbnQJCQlzbG90bm87Ci0KLQlMV0xvY2tBY3F1aXJlKE11bHRp WGFjdE9mZnNldFNMUlVMb2NrLCBMV19FWENMVVNJVkUpOworCUJ1ZmZlcgkJYnVmZmVyOwogCiAJ LyogQ3JlYXRlIGFuZCB6ZXJvIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBvZmZzZXRzIGxvZyAqLwot CXNsb3RubyA9IFplcm9NdWx0aVhhY3RPZmZzZXRQYWdlKDAsIGZhbHNlKTsKLQotCS8qIE1ha2Ug c3VyZSBpdCdzIHdyaXR0ZW4gb3V0ICovCi0JU2ltcGxlTHJ1V3JpdGVQYWdlKE11bHRpWGFjdE9m ZnNldEN0bCwgc2xvdG5vKTsKLQlBc3NlcnQoIU11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5w YWdlX2RpcnR5W3Nsb3Rub10pOwotCi0JTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RPZmZzZXRTTFJV TG9jayk7Ci0KLQlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdE1lbWJlclNMUlVMb2NrLCBMV19FWENM VVNJVkUpOworCWJ1ZmZlciA9IFplcm9NdWx0aVhhY3RPZmZzZXRQYWdlKDAsIGZhbHNlKTsKKwlG bHVzaE9uZUJ1ZmZlcihidWZmZXIpOworCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIAog CS8qIENyZWF0ZSBhbmQgemVybyB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgbWVtYmVycyBsb2cgKi8K LQlzbG90bm8gPSBaZXJvTXVsdGlYYWN0TWVtYmVyUGFnZSgwLCBmYWxzZSk7Ci0KLQkvKiBNYWtl IHN1cmUgaXQncyB3cml0dGVuIG91dCAqLwotCVNpbXBsZUxydVdyaXRlUGFnZShNdWx0aVhhY3RN ZW1iZXJDdGwsIHNsb3Rubyk7Ci0JQXNzZXJ0KCFNdWx0aVhhY3RNZW1iZXJDdGwtPnNoYXJlZC0+ cGFnZV9kaXJ0eVtzbG90bm9dKTsKLQotCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0TWVtYmVyU0xS VUxvY2spOworCWJ1ZmZlciA9IFplcm9NdWx0aVhhY3RNZW1iZXJQYWdlKDAsIGZhbHNlKTsKKwlG bHVzaE9uZUJ1ZmZlcihidWZmZXIpOworCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIH0K IAogLyoKQEAgLTE5MjUsMzMgKzE5MDQsNTQgQEAgQm9vdFN0cmFwTXVsdGlYYWN0KHZvaWQpCiAg KgogICogQ29udHJvbCBsb2NrIG11c3QgYmUgaGVsZCBhdCBlbnRyeSwgYW5kIHdpbGwgYmUgaGVs ZCBhdCBleGl0LgogICovCi1zdGF0aWMgaW50CitzdGF0aWMgQnVmZmVyCiBaZXJvTXVsdGlYYWN0 T2Zmc2V0UGFnZShpbnQgcGFnZW5vLCBib29sIHdyaXRlWGxvZykKIHsKLQlpbnQJCQlzbG90bm87 CisJQnVmZmVyCQlidWZmZXI7CisJUGFnZQkJcGFnZTsKKwlYTG9nUmVjUHRyCXJlY3B0cjsKIAot CXNsb3RubyA9IFNpbXBsZUxydVplcm9QYWdlKE11bHRpWGFjdE9mZnNldEN0bCwgcGFnZW5vKTsK KwlidWZmZXIgPSBaZXJvU2xydUJ1ZmZlcihTTFJVX01VTFRJWEFDVF9PRkZTRVRfSUQsIHBhZ2Vu byk7CisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsKKwlQYWdlSW5pdFNMUlUocGFnZSwg QkxDS1NaLCAwKTsKIAorCXJlY3B0ciA9IDA7CisJCiAJaWYgKHdyaXRlWGxvZykKLQkJV3JpdGVN WmVyb1BhZ2VYbG9nUmVjKHBhZ2VubywgWExPR19NVUxUSVhBQ1RfWkVST19PRkZfUEFHRSk7CisJ eworCQlyZWNwdHIgPSBXcml0ZU1aZXJvUGFnZVhsb2dSZWMocGFnZW5vLCBYTE9HX01VTFRJWEFD VF9aRVJPX09GRl9QQUdFKTsKKwl9CisKKwlQYWdlU2V0SGVhZGVyRGF0YU5vblJlbChwYWdlLCBw YWdlbm8sIHJlY3B0ciwgQkxDS1NaLCBQR19NRVRBUEFHRV9MQVlPVVRfVkVSU0lPTik7CisJTWFy a0J1ZmZlckRpcnR5KGJ1ZmZlcik7CiAKLQlyZXR1cm4gc2xvdG5vOworCXJldHVybiBidWZmZXI7 CiB9CiAKIC8qCiAgKiBEaXR0bywgZm9yIE11bHRpWGFjdE1lbWJlcgogICovCi1zdGF0aWMgaW50 CitzdGF0aWMgQnVmZmVyCiBaZXJvTXVsdGlYYWN0TWVtYmVyUGFnZShpbnQgcGFnZW5vLCBib29s IHdyaXRlWGxvZykKIHsKLQlpbnQJCQlzbG90bm87Ci0KLQlzbG90bm8gPSBTaW1wbGVMcnVaZXJv UGFnZShNdWx0aVhhY3RNZW1iZXJDdGwsIHBhZ2Vubyk7Ci0KKwlCdWZmZXIJCWJ1ZmZlcjsKKwlQ YWdlIAkJcGFnZTsKKwlYTG9nUmVjUHRyIAlyZWNwdHI7CisKKwlidWZmZXIgPSBaZXJvU2xydUJ1 ZmZlcihTTFJVX01VTFRJWEFDVF9NRU1CRVJfSUQsIHBhZ2Vubyk7CisJcGFnZSA9IEJ1ZmZlckdl dFBhZ2UoYnVmZmVyKTsKKwlQYWdlSW5pdFNMUlUocGFnZSwgQkxDS1NaLCAwKTsKKwkJCisJcmVj cHRyID0gMDsKIAlpZiAod3JpdGVYbG9nKQotCQlXcml0ZU1aZXJvUGFnZVhsb2dSZWMocGFnZW5v LCBYTE9HX01VTFRJWEFDVF9aRVJPX01FTV9QQUdFKTsKLQotCXJldHVybiBzbG90bm87CisJewor CQlyZWNwdHIgPSBXcml0ZU1aZXJvUGFnZVhsb2dSZWMocGFnZW5vLCBYTE9HX01VTFRJWEFDVF9a RVJPX01FTV9QQUdFKTsKKwl9CisJCisJUGFnZVNldEhlYWRlckRhdGFOb25SZWwocGFnZSwgcGFn ZW5vLCByZWNwdHIsIEJMQ0tTWiwgUEdfTUVUQVBBR0VfTEFZT1VUX1ZFUlNJT04pOworCU1hcmtC dWZmZXJEaXJ0eShidWZmZXIpOworCQorCXJldHVybiBidWZmZXI7CiB9CiAKIC8qCkBAIC0xOTc2 LDIyICsxOTc2LDE0IEBAIE1heWJlRXh0ZW5kT2Zmc2V0U2xydSh2b2lkKQogCiAJcGFnZW5vID0g TXVsdGlYYWN0SWRUb09mZnNldFBhZ2UoTXVsdGlYYWN0U3RhdGUtPm5leHRNWGFjdCk7CiAKLQlM V0xvY2tBY3F1aXJlKE11bHRpWGFjdE9mZnNldFNMUlVMb2NrLCBMV19FWENMVVNJVkUpOwotCi0J aWYgKCFTaW1wbGVMcnVEb2VzUGh5c2ljYWxQYWdlRXhpc3QoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBw YWdlbm8pKQorCWlmICghU2ltcGxlTHJ1RG9lc1BoeXNpY2FsUGFnZUV4aXN0KFNMUlVfTVVMVElY QUNUX09GRlNFVF9JRCwgcGFnZW5vKSkKIAl7Ci0JCWludAkJCXNsb3RubzsKKwkJQnVmZmVyCQkJ YnVmZmVyOwogCi0JCS8qCi0JCSAqIEZvcnR1bmF0ZWx5IGZvciB1cywgU2ltcGxlTHJ1V3JpdGVQ YWdlIGlzIGFscmVhZHkgcHJlcGFyZWQgdG8gZGVhbAotCQkgKiB3aXRoIGNyZWF0aW5nIGEgbmV3 IHNlZ21lbnQgZmlsZSBldmVuIGlmIHRoZSBwYWdlIHdlJ3JlIHdyaXRpbmcgaXMKLQkJICogbm90 IHRoZSBmaXJzdCBpbiBpdCwgc28gdGhpcyBpcyBlbm91Z2guCi0JCSAqLwotCQlzbG90bm8gPSBa ZXJvTXVsdGlYYWN0T2Zmc2V0UGFnZShwYWdlbm8sIGZhbHNlKTsKLQkJU2ltcGxlTHJ1V3JpdGVQ YWdlKE11bHRpWGFjdE9mZnNldEN0bCwgc2xvdG5vKTsKKwkJYnVmZmVyID0gWmVyb011bHRpWGFj dE9mZnNldFBhZ2UocGFnZW5vLCBmYWxzZSk7CisJCUZsdXNoT25lQnVmZmVyKGJ1ZmZlcik7CisJ CVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIAl9Ci0KLQlMV0xvY2tSZWxlYXNlKE11bHRp WGFjdE9mZnNldFNMUlVMb2NrKTsKIH0KIAogLyoKQEAgLTIwMDUsMjEgKzE5OTcsNiBAQCBNYXli ZUV4dGVuZE9mZnNldFNscnUodm9pZCkKIHZvaWQKIFN0YXJ0dXBNdWx0aVhhY3Qodm9pZCkKIHsK LQlNdWx0aVhhY3RJZCBtdWx0aSA9IE11bHRpWGFjdFN0YXRlLT5uZXh0TVhhY3Q7Ci0JTXVsdGlY YWN0T2Zmc2V0IG9mZnNldCA9IE11bHRpWGFjdFN0YXRlLT5uZXh0T2Zmc2V0OwotCWludAkJCXBh Z2VubzsKLQotCS8qCi0JICogSW5pdGlhbGl6ZSBvZmZzZXQncyBpZGVhIG9mIHRoZSBsYXRlc3Qg cGFnZSBudW1iZXIuCi0JICovCi0JcGFnZW5vID0gTXVsdGlYYWN0SWRUb09mZnNldFBhZ2UobXVs dGkpOwotCU11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5sYXRlc3RfcGFnZV9udW1iZXIgPSBw YWdlbm87Ci0KLQkvKgotCSAqIEluaXRpYWxpemUgbWVtYmVyJ3MgaWRlYSBvZiB0aGUgbGF0ZXN0 IHBhZ2UgbnVtYmVyLgotCSAqLwotCXBhZ2VubyA9IE1YT2Zmc2V0VG9NZW1iZXJQYWdlKG9mZnNl dCk7Ci0JTXVsdGlYYWN0TWVtYmVyQ3RsLT5zaGFyZWQtPmxhdGVzdF9wYWdlX251bWJlciA9IHBh Z2VubzsKIH0KIAogLyoKQEAgLTIwNDMsMTQgKzIwMjAsOCBAQCBUcmltTXVsdGlYYWN0KHZvaWQp CiAJb2xkZXN0TVhhY3REQiA9IE11bHRpWGFjdFN0YXRlLT5vbGRlc3RNdWx0aVhhY3REQjsKIAlM V0xvY2tSZWxlYXNlKE11bHRpWGFjdEdlbkxvY2spOwogCi0JLyogQ2xlYW4gdXAgb2Zmc2V0cyBz dGF0ZSAqLwotCUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2ssIExXX0VYQ0xV U0lWRSk7Ci0KLQkvKgotCSAqIChSZS0pSW5pdGlhbGl6ZSBvdXIgaWRlYSBvZiB0aGUgbGF0ZXN0 IHBhZ2UgbnVtYmVyIGZvciBvZmZzZXRzLgotCSAqLwogCXBhZ2VubyA9IE11bHRpWGFjdElkVG9P ZmZzZXRQYWdlKG5leHRNWGFjdCk7Ci0JTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPmxhdGVz dF9wYWdlX251bWJlciA9IHBhZ2VubzsKKwkKIAogCS8qCiAJICogWmVybyBvdXQgdGhlIHJlbWFp bmRlciBvZiB0aGUgY3VycmVudCBvZmZzZXRzIHBhZ2UuICBTZWUgbm90ZXMgaW4KQEAgLTIwNjMs NDYgKzIwMzQsMzkgQEAgVHJpbU11bHRpWGFjdCh2b2lkKQogCWVudHJ5bm8gPSBNdWx0aVhhY3RJ ZFRvT2Zmc2V0RW50cnkobmV4dE1YYWN0KTsKIAlpZiAoZW50cnlubyAhPSAwKQogCXsKLQkJaW50 CQkJc2xvdG5vOwogCQlNdWx0aVhhY3RPZmZzZXQgKm9mZnB0cjsKKwkJQnVmZmVyCQlidWZmZXI7 CiAKLQkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdl bm8sIHRydWUsIG5leHRNWGFjdCk7Ci0JCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikgTXVs dGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107CisJCWJ1ZmZlciA9 IFJlYWRTbHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwgcGFnZW5vLCBSQk1fVFJJ TSk7CisJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUpOworCQlvZmZw dHIgPSAoTXVsdGlYYWN0T2Zmc2V0ICopIChQYWdlR2V0Q29udGVudHMoQnVmZmVyR2V0UGFnZShi dWZmZXIpKSk7CiAJCW9mZnB0ciArPSBlbnRyeW5vOwogCi0JCU1lbVNldChvZmZwdHIsIDAsIEJM Q0tTWiAtIChlbnRyeW5vICogc2l6ZW9mKE11bHRpWGFjdE9mZnNldCkpKTsKKwkJTWVtU2V0KG9m ZnB0ciwgMCwgQkxDS1NaIC0gTUFYQUxJR04oU2l6ZU9mUGFnZUhlYWRlckRhdGEpIC0gKGVudHJ5 bm8gKiBzaXplb2YoTXVsdGlYYWN0T2Zmc2V0KSkpOwogCi0JCU11bHRpWGFjdE9mZnNldEN0bC0+ c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVlOworCQlNYXJrQnVmZmVyRGlydHkoYnVm ZmVyKTsKKwkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCX0KIAotCUxXTG9ja1JlbGVh c2UoTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2spOwotCi0JLyogQW5kIHRoZSBzYW1lIGZvciBtZW1i ZXJzICovCi0JTFdMb2NrQWNxdWlyZShNdWx0aVhhY3RNZW1iZXJTTFJVTG9jaywgTFdfRVhDTFVT SVZFKTsKLQotCS8qCi0JICogKFJlLSlJbml0aWFsaXplIG91ciBpZGVhIG9mIHRoZSBsYXRlc3Qg cGFnZSBudW1iZXIgZm9yIG1lbWJlcnMuCi0JICovCi0JcGFnZW5vID0gTVhPZmZzZXRUb01lbWJl clBhZ2Uob2Zmc2V0KTsKLQlNdWx0aVhhY3RNZW1iZXJDdGwtPnNoYXJlZC0+bGF0ZXN0X3BhZ2Vf bnVtYmVyID0gcGFnZW5vOwotCiAJLyoKIAkgKiBaZXJvIG91dCB0aGUgcmVtYWluZGVyIG9mIHRo ZSBjdXJyZW50IG1lbWJlcnMgcGFnZS4gIFNlZSBub3RlcyBpbgogCSAqIFRyaW1DTE9HKCkgZm9y IG1vdGl2YXRpb24uCiAJICovCisKKwlwYWdlbm8gPSBNWE9mZnNldFRvTWVtYmVyUGFnZShvZmZz ZXQpOwogCWZsYWdzb2ZmID0gTVhPZmZzZXRUb0ZsYWdzT2Zmc2V0KG9mZnNldCk7CiAJaWYgKGZs YWdzb2ZmICE9IDApCiAJewotCQlpbnQJCQlzbG90bm87CiAJCVRyYW5zYWN0aW9uSWQgKnhpZHB0 cjsKIAkJaW50CQkJbWVtYmVyb2ZmOworCQlCdWZmZXIJCWJ1ZmZlcjsKIAogCQltZW1iZXJvZmYg PSBNWE9mZnNldFRvTWVtYmVyT2Zmc2V0KG9mZnNldCk7Ci0JCXNsb3RubyA9IFNpbXBsZUxydVJl YWRQYWdlKE11bHRpWGFjdE1lbWJlckN0bCwgcGFnZW5vLCB0cnVlLCBvZmZzZXQpOwotCQl4aWRw dHIgPSAoVHJhbnNhY3Rpb25JZCAqKQotCQkJKE11bHRpWGFjdE1lbWJlckN0bC0+c2hhcmVkLT5w YWdlX2J1ZmZlcltzbG90bm9dICsgbWVtYmVyb2ZmKTsKKwkJYnVmZmVyID0gUmVhZFNscnVCdWZm ZXIoU0xSVV9NVUxUSVhBQ1RfTUVNQkVSX0lELCBwYWdlbm8sIFJCTV9UUklNKTsKKwkJTG9ja0J1 ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7CisJCXhpZHB0ciA9IChUcmFuc2Fj dGlvbklkICopIChQYWdlR2V0Q29udGVudHMoQnVmZmVyR2V0UGFnZShidWZmZXIpKSArIG1lbWJl cm9mZik7CiAKLQkJTWVtU2V0KHhpZHB0ciwgMCwgQkxDS1NaIC0gbWVtYmVyb2ZmKTsKKwkJTWVt U2V0KHhpZHB0ciwgMCwgQkxDS1NaIC0gbWVtYmVyb2ZmIC0gTUFYQUxJR04oU2l6ZU9mUGFnZUhl YWRlckRhdGEpKTsKIAogCQkvKgogCQkgKiBOb3RlOiB3ZSBkb24ndCBuZWVkIHRvIHplcm8gb3V0 IHRoZSBmbGFnIGJpdHMgaW4gdGhlIHJlbWFpbmluZwpAQCAtMjExMCwxMSArMjA3NCwxMCBAQCBU cmltTXVsdGlYYWN0KHZvaWQpCiAJCSAqIHdyaXRpbmcuCiAJCSAqLwogCi0JCU11bHRpWGFjdE1l bWJlckN0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVlOworCQlNYXJrQnVmZmVy RGlydHkoYnVmZmVyKTsKKwkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCX0KIAotCUxX TG9ja1JlbGVhc2UoTXVsdGlYYWN0TWVtYmVyU0xSVUxvY2spOwotCiAJLyogc2lnbmFsIHRoYXQg d2UncmUgb2ZmaWNpYWxseSB1cCAqLwogCUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0R2VuTG9jaywg TFdfRVhDTFVTSVZFKTsKIAlNdWx0aVhhY3RTdGF0ZS0+ZmluaXNoZWRTdGFydHVwID0gdHJ1ZTsK QEAgLTIxNDYsMjUgKzIxMDksNiBAQCBNdWx0aVhhY3RHZXRDaGVja3B0TXVsdGkoYm9vbCBpc19z aHV0ZG93biwKIAkJCQkqbmV4dE11bHRpLCAqbmV4dE11bHRpT2Zmc2V0LCAqb2xkZXN0TXVsdGks ICpvbGRlc3RNdWx0aURCKTsKIH0KIAotLyoKLSAqIFBlcmZvcm0gYSBjaGVja3BvaW50IC0tLSBl aXRoZXIgZHVyaW5nIHNodXRkb3duLCBvciBvbi10aGUtZmx5Ci0gKi8KLXZvaWQKLUNoZWNrUG9p bnRNdWx0aVhhY3Qodm9pZCkKLXsKLQlUUkFDRV9QT1NUR1JFU1FMX01VTFRJWEFDVF9DSEVDS1BP SU5UX1NUQVJUKHRydWUpOwotCi0JLyoKLQkgKiBXcml0ZSBkaXJ0eSBNdWx0aVhhY3QgcGFnZXMg dG8gZGlzay4gIFRoaXMgbWF5IHJlc3VsdCBpbiBzeW5jIHJlcXVlc3RzCi0JICogcXVldWVkIGZv ciBsYXRlciBoYW5kbGluZyBieSBQcm9jZXNzU3luY1JlcXVlc3RzKCksIGFzIHBhcnQgb2YgdGhl Ci0JICogY2hlY2twb2ludC4KLQkgKi8KLQlTaW1wbGVMcnVXcml0ZUFsbChNdWx0aVhhY3RPZmZz ZXRDdGwsIHRydWUpOwotCVNpbXBsZUxydVdyaXRlQWxsKE11bHRpWGFjdE1lbWJlckN0bCwgdHJ1 ZSk7Ci0KLQlUUkFDRV9QT1NUR1JFU1FMX01VTFRJWEFDVF9DSEVDS1BPSU5UX0RPTkUodHJ1ZSk7 Ci19Ci0KIC8qCiAgKiBTZXQgdGhlIG5leHQtdG8tYmUtYXNzaWduZWQgTXVsdGlYYWN0SWQgYW5k IG9mZnNldAogICoKQEAgLTIzOTksMjYgKzIzNDMsMzAgQEAgTXVsdGlYYWN0QWR2YW5jZU9sZGVz dChNdWx0aVhhY3RJZCBvbGRlc3RNdWx0aSwgT2lkIG9sZGVzdE11bHRpREIpCiAgKiByb29tIGlu IHNoYXJlZCBtZW1vcnkuCiAgKi8KIHN0YXRpYyB2b2lkCi1FeHRlbmRNdWx0aVhhY3RPZmZzZXQo TXVsdGlYYWN0SWQgbXVsdGkpCitFeHRlbmRNdWx0aVhhY3RPZmZzZXQoTXVsdGlYYWN0SWQgbXVs dGksIEJ1ZmZlciAqIGJ1ZmZlcikKIHsKIAlpbnQJCQlwYWdlbm87CiAKKwogCS8qCi0JICogTm8g d29yayBleGNlcHQgYXQgZmlyc3QgTXVsdGlYYWN0SWQgb2YgYSBwYWdlLiAgQnV0IGJld2FyZTog anVzdCBhZnRlcgotCSAqIHdyYXBhcm91bmQsIHRoZSBmaXJzdCBNdWx0aVhhY3RJZCBvZiBwYWdl IHplcm8gaXMgRmlyc3RNdWx0aVhhY3RJZC4KKwkgKiBNYWtlIGEgUmVhZEJ1ZmZlciBjYWxsIGZv ciB0aGUgcGFnZSB3ZSBuZWVkIGJlZm9yZWhhbmQgc28gdGhhdCB3ZSBkb24ndCBuZWVkCisJICog dG8gbWFsbG9jIGxhdGVyLgorCSAqIElmIHdlJ3JlIGF0IHRoZSBmaXJzdCBNdWx0aVhhY3RJZCBv ZiBhIHBhZ2UsIG1ha2Ugc3VyZSB3ZSBhbHNvIHplcm8gdGhlIHBhZ2UKIAkgKi8KKworCXBhZ2Vu byA9IE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKG11bHRpKTsKIAlpZiAoTXVsdGlYYWN0SWRUb09m ZnNldEVudHJ5KG11bHRpKSAhPSAwICYmCiAJCW11bHRpICE9IEZpcnN0TXVsdGlYYWN0SWQpCisJ eworCQkvKiBtYWtlIGEgcmVhZCBidWZmZXIgY2FsbCB0byBlbmxhcmdlIHRoZSByZXNvdXJjZSBv d25lciAqLworCQkqYnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9NVUxUSVhBQ1RfT0ZGU0VU X0lELCBwYWdlbm8sIFJCTV9OT1JNQUwpOwogCQlyZXR1cm47Ci0KLQlwYWdlbm8gPSBNdWx0aVhh Y3RJZFRvT2Zmc2V0UGFnZShtdWx0aSk7Ci0KLQlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdE9mZnNl dFNMUlVMb2NrLCBMV19FWENMVVNJVkUpOwotCi0JLyogWmVybyB0aGUgcGFnZSBhbmQgbWFrZSBh biBYTE9HIGVudHJ5IGFib3V0IGl0ICovCi0JWmVyb011bHRpWGFjdE9mZnNldFBhZ2UocGFnZW5v LCB0cnVlKTsKLQotCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2spOworCX0g ZWxzZQorCXsKKwkJLyogWmVybyB0aGUgcGFnZSBhbmQgbWFrZSBhbiBYTE9HIGVudHJ5IGFib3V0 IGl0ICovCisJCSpidWZmZXIgPSBaZXJvTXVsdGlYYWN0T2Zmc2V0UGFnZShwYWdlbm8sIHRydWUp OworCQlMb2NrQnVmZmVyKCpidWZmZXIsIEJVRkZFUl9MT0NLX1VOTE9DSyk7IC8qIHJlbGVhc2Ug bG9jayBidXQgZG9uJ3QgdW5waW4gKi8KKwl9CiB9CiAKIC8qCkBAIC0yNDI5LDcgKzIzNzcsNyBA QCBFeHRlbmRNdWx0aVhhY3RPZmZzZXQoTXVsdGlYYWN0SWQgbXVsdGkpCiAgKiBzYW1lIGNvbW1l bnRzIGFwcGx5LgogICovCiBzdGF0aWMgdm9pZAotRXh0ZW5kTXVsdGlYYWN0TWVtYmVyKE11bHRp WGFjdE9mZnNldCBvZmZzZXQsIGludCBubWVtYmVycykKK0V4dGVuZE11bHRpWGFjdE1lbWJlcihN dWx0aVhhY3RPZmZzZXQgb2Zmc2V0LCBpbnQgbm1lbWJlcnMsIEJ1ZmZlciAqKiBidWZmZXJzKQog ewogCS8qCiAJICogSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBtZW1iZXJzIHNwYW4gbW9yZSB0aGFu IG9uZSBwYWdlIG9mIHRoZSBtZW1iZXJzCkBAIC0yNDM3LDEwICsyMzg1LDE3IEBAIEV4dGVuZE11 bHRpWGFjdE1lbWJlcihNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0LCBpbnQgbm1lbWJlcnMpCiAJICog b3B0aW1hbCBpZiB0aGUgbWVtYmVycyBzcGFuIHNldmVyYWwgcGFnZXMsIGJ1dCB0aGF0IHNlZW1z IHVudXN1YWwKIAkgKiBlbm91Z2ggdG8gbm90IHdvcnJ5IG11Y2ggYWJvdXQuCiAJICovCisJaW50 IG1pbl9wYWdlbm87CisKKwltaW5fcGFnZW5vID0gTVhPZmZzZXRUb01lbWJlclBhZ2Uob2Zmc2V0 KTsKIAl3aGlsZSAobm1lbWJlcnMgPiAwKQogCXsKKwkJQnVmZmVyIGJ1ZjsKKwogCQlpbnQJCQlm bGFnc29mZjsKIAkJaW50CQkJZmxhZ3NiaXQ7CisJCWludAkJCXBhZ2VubzsKKwogCQl1aW50MzIJ CWRpZmZlcmVuY2U7CiAKIAkJLyoKQEAgLTI0NDgsMjAgKzI0MDMsMjQgQEAgRXh0ZW5kTXVsdGlY YWN0TWVtYmVyKE11bHRpWGFjdE9mZnNldCBvZmZzZXQsIGludCBubWVtYmVycykKIAkJICovCiAJ CWZsYWdzb2ZmID0gTVhPZmZzZXRUb0ZsYWdzT2Zmc2V0KG9mZnNldCk7CiAJCWZsYWdzYml0ID0g TVhPZmZzZXRUb0ZsYWdzQml0U2hpZnQob2Zmc2V0KTsKKwkJcGFnZW5vID0gTVhPZmZzZXRUb01l bWJlclBhZ2Uob2Zmc2V0KTsKKwkJCisJCQorCQkKIAkJaWYgKGZsYWdzb2ZmID09IDAgJiYgZmxh Z3NiaXQgPT0gMCkKIAkJewotCQkJaW50CQkJcGFnZW5vOwotCi0JCQlwYWdlbm8gPSBNWE9mZnNl dFRvTWVtYmVyUGFnZShvZmZzZXQpOwotCi0JCQlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdE1lbWJl clNMUlVMb2NrLCBMV19FWENMVVNJVkUpOwotCiAJCQkvKiBaZXJvIHRoZSBwYWdlIGFuZCBtYWtl IGFuIFhMT0cgZW50cnkgYWJvdXQgaXQgKi8KLQkJCVplcm9NdWx0aVhhY3RNZW1iZXJQYWdlKHBh Z2VubywgdHJ1ZSk7Ci0KLQkJCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0TWVtYmVyU0xSVUxvY2sp OworCQkJYnVmID0gWmVyb011bHRpWGFjdE1lbWJlclBhZ2UocGFnZW5vLCB0cnVlKTsKKwkJCUxv Y2tCdWZmZXIoYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCQl9IGVsc2UKKwkJeworCQkJLyog ZG8gYSByZWFkIGJ1ZmZlciBjYWxsIHRvIGFsbG9jYXRlIHNwYWNlIGJlZm9yZWhhbmQgKi8KKwkJ CWJ1ZiA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX01FTUJFUl9JRCwgcGFnZW5vLCBS Qk1fTk9STUFMKTsKIAkJfQogCisJCWlmIChidWZmZXJzKQorCQkJKCpidWZmZXJzKVtwYWdlbm8g LSBtaW5fcGFnZW5vXSA9IGJ1ZjsKKwogCQkvKgogCQkgKiBDb21wdXRlIHRoZSBudW1iZXIgb2Yg aXRlbXMgdGlsbCBlbmQgb2YgY3VycmVudCBwYWdlLiAgQ2FyZWZ1bDogaWYKIAkJICogYWRkaXRp b24gb2YgdW5zaWduZWQgaW50cyB3cmFwcyBhcm91bmQsIHdlJ3JlIGF0IHRoZSBsYXN0IHBhZ2Ug b2YKQEAgLTI3MzQsOCArMjY5Myw4IEBAIGZpbmRfbXVsdGl4YWN0X3N0YXJ0KE11bHRpWGFjdElk IG11bHRpLCBNdWx0aVhhY3RPZmZzZXQgKnJlc3VsdCkKIAlNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0 OwogCWludAkJCXBhZ2VubzsKIAlpbnQJCQllbnRyeW5vOwotCWludAkJCXNsb3RubzsKIAlNdWx0 aVhhY3RPZmZzZXQgKm9mZnB0cjsKKwlCdWZmZXIJCWJ1ZmZlcjsKIAogCUFzc2VydChNdWx0aVhh Y3RTdGF0ZS0+ZmluaXNoZWRTdGFydHVwKTsKIApAQCAtMjc0MywyMCArMjcwMiwxOSBAQCBmaW5k X211bHRpeGFjdF9zdGFydChNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0ICpyZXN1 bHQpCiAJZW50cnlubyA9IE11bHRpWGFjdElkVG9PZmZzZXRFbnRyeShtdWx0aSk7CiAKIAkvKgot CSAqIFdyaXRlIG91dCBkaXJ0eSBkYXRhLCBzbyBQaHlzaWNhbFBhZ2VFeGlzdHMgY2FuIHdvcmsg Y29ycmVjdGx5LgorCSAqIENvcGUgd2l0aCBtaXNzaW5nL2JvZ3VzIG9sZGVzdCBNdWx0aVhhY3Qg aW4gaW5jb25zaXN0ZW50IHN0YXRlcyAoc2VlCisJICogY29tbWl0IDA2OGNmYWRmOSkuCiAJICov Ci0JU2ltcGxlTHJ1V3JpdGVBbGwoTXVsdGlYYWN0T2Zmc2V0Q3RsLCB0cnVlKTsKLQlTaW1wbGVM cnVXcml0ZUFsbChNdWx0aVhhY3RNZW1iZXJDdGwsIHRydWUpOwotCi0JaWYgKCFTaW1wbGVMcnVE b2VzUGh5c2ljYWxQYWdlRXhpc3QoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8pKQorCWlmICgh UHJvYmVTbHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwgcGFnZW5vKSAmJgorCQkh U2ltcGxlTHJ1RG9lc1BoeXNpY2FsUGFnZUV4aXN0KFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwg cGFnZW5vKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JLyogbG9jayBpcyBhY3F1aXJlZCBieSBTaW1w bGVMcnVSZWFkUGFnZV9SZWFkT25seSAqLwotCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlX1Jl YWRPbmx5KE11bHRpWGFjdE9mZnNldEN0bCwgcGFnZW5vLCBtdWx0aSk7Ci0Jb2ZmcHRyID0gKE11 bHRpWGFjdE9mZnNldCAqKSBNdWx0aVhhY3RPZmZzZXRDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJb c2xvdG5vXTsKKwlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX01VTFRJWEFDVF9PRkZTRVRf SUQsIHBhZ2VubywgUkJNX05PUk1BTCk7CisJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NL X1NIQVJFKTsKKwlvZmZwdHIgPSAoTXVsdGlYYWN0T2Zmc2V0ICopIChQYWdlR2V0Q29udGVudHMo QnVmZmVyR2V0UGFnZShidWZmZXIpKSk7CiAJb2ZmcHRyICs9IGVudHJ5bm87CiAJb2Zmc2V0ID0g Km9mZnB0cjsKLQlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdE9mZnNldFNMUlVMb2NrKTsKKwlVbmxv Y2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiAKIAkqcmVzdWx0ID0gb2Zmc2V0OwogCXJldHVybiB0 cnVlOwpAQCAtMjg2MywxMiArMjgyMSwxMyBAQCB0eXBlZGVmIHN0cnVjdCBteHRydW5jaW5mbwog ICoJCVRoaXMgY2FsbGJhY2sgZGV0ZXJtaW5lcyB0aGUgZWFybGllc3QgZXhpc3RpbmcgcGFnZSBu dW1iZXIuCiAgKi8KIHN0YXRpYyBib29sCi1TbHJ1U2NhbkRpckNiRmluZEVhcmxpZXN0KFNscnVD dGwgY3RsLCBjaGFyICpmaWxlbmFtZSwgaW50IHNlZ3BhZ2UsIHZvaWQgKmRhdGEpCitTbHJ1U2Nh bkRpckNiRmluZEVhcmxpZXN0KGludCBzbHJ1X2lkLCBTbHJ1UGFnZVByZWNlZGVzRnVuY3Rpb24g UGFnZVByZWNlZGVzLAorCQkJCQkJICBjaGFyICpmaWxlbmFtZSwgaW50IHNlZ3BhZ2UsIHZvaWQg KmRhdGEpCiB7CiAJbXh0cnVuY2luZm8gKnRydW5jID0gKG14dHJ1bmNpbmZvICopIGRhdGE7CiAK IAlpZiAodHJ1bmMtPmVhcmxpZXN0RXhpc3RpbmdQYWdlID09IC0xIHx8Ci0JCWN0bC0+UGFnZVBy ZWNlZGVzKHNlZ3BhZ2UsIHRydW5jLT5lYXJsaWVzdEV4aXN0aW5nUGFnZSkpCisJCVBhZ2VQcmVj ZWRlcyhzZWdwYWdlLCB0cnVuYy0+ZWFybGllc3RFeGlzdGluZ1BhZ2UpKQogCXsKIAkJdHJ1bmMt PmVhcmxpZXN0RXhpc3RpbmdQYWdlID0gc2VncGFnZTsKIAl9CkBAIC0yOTAwLDcgKzI4NTksNyBA QCBQZXJmb3JtTWVtYmVyc1RydW5jYXRpb24oTXVsdGlYYWN0T2Zmc2V0IG9sZGVzdE9mZnNldCwg TXVsdGlYYWN0T2Zmc2V0IG5ld09sZGVzdAogCXdoaWxlIChzZWdtZW50ICE9IGVuZHNlZ21lbnQp CiAJewogCQllbG9nKERFQlVHMiwgInRydW5jYXRpbmcgbXVsdGl4YWN0IG1lbWJlcnMgc2VnbWVu dCAleCIsIHNlZ21lbnQpOwotCQlTbHJ1RGVsZXRlU2VnbWVudChNdWx0aVhhY3RNZW1iZXJDdGws IHNlZ21lbnQpOworCQlTbHJ1RGVsZXRlU2VnbWVudChTTFJVX01VTFRJWEFDVF9NRU1CRVJfSUQs IHNlZ21lbnQpOwogCiAJCS8qIG1vdmUgdG8gbmV4dCBzZWdtZW50LCBoYW5kbGluZyB3cmFwYXJv dW5kIGNvcnJlY3RseSAqLwogCQlpZiAoc2VnbWVudCA9PSBtYXhzZWdtZW50KQpAQCAtMjkyMyw3 ICsyODgyLDggQEAgUGVyZm9ybU9mZnNldHNUcnVuY2F0aW9uKE11bHRpWGFjdElkIG9sZGVzdE11 bHRpLCBNdWx0aVhhY3RJZCBuZXdPbGRlc3RNdWx0aSkKIAkgKiBkaWRuJ3Qgc3VidHJhY3Qgb25l LCB3ZSdkIHRyaWdnZXIgU2ltcGxlTHJ1VHJ1bmNhdGUncyB3cmFwYXJvdW5kCiAJICogZGV0ZWN0 aW9uLgogCSAqLwotCVNpbXBsZUxydVRydW5jYXRlKE11bHRpWGFjdE9mZnNldEN0bCwKKwlTaW1w bGVMcnVUcnVuY2F0ZShTTFJVX01VTFRJWEFDVF9PRkZTRVRfSUQsCisJCQkJCSAgTXVsdGlYYWN0 T2Zmc2V0UGFnZVByZWNlZGVzLAogCQkJCQkgIE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKFByZXZp b3VzTXVsdGlYYWN0SWQobmV3T2xkZXN0TXVsdGkpKSk7CiB9CiAKQEAgLTI5OTcsNyArMjk1Nyw5 IEBAIFRydW5jYXRlTXVsdGlYYWN0KE11bHRpWGFjdElkIG5ld09sZGVzdE11bHRpLCBPaWQgbmV3 T2xkZXN0TXVsdGlEQikKIAkgKiBiZWVuIHRydW5jYXRlZCBhd2F5LCBhbmQgd2UgY3Jhc2hlZCBi ZWZvcmUgdXBkYXRpbmcgb2xkZXN0TXVsdGkuCiAJICovCiAJdHJ1bmMuZWFybGllc3RFeGlzdGlu Z1BhZ2UgPSAtMTsKLQlTbHJ1U2NhbkRpcmVjdG9yeShNdWx0aVhhY3RPZmZzZXRDdGwsIFNscnVT Y2FuRGlyQ2JGaW5kRWFybGllc3QsICZ0cnVuYyk7CisJU2xydVNjYW5EaXJlY3RvcnkoU0xSVV9N VUxUSVhBQ1RfT0ZGU0VUX0lELAorCQkJCQkgIE11bHRpWGFjdE9mZnNldFBhZ2VQcmVjZWRlcywK KwkJCQkJICBTbHJ1U2NhbkRpckNiRmluZEVhcmxpZXN0LCAmdHJ1bmMpOwogCWVhcmxpZXN0ID0g dHJ1bmMuZWFybGllc3RFeGlzdGluZ1BhZ2UgKiBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRTsK IAlpZiAoZWFybGllc3QgPCBGaXJzdE11bHRpWGFjdElkKQogCQllYXJsaWVzdCA9IEZpcnN0TXVs dGlYYWN0SWQ7CkBAIC0zMTI5LDI0ICszMDkxLDYgQEAgTXVsdGlYYWN0T2Zmc2V0UGFnZVByZWNl ZGVzKGludCBwYWdlMSwgaW50IHBhZ2UyKQogCQkJCQkJCQltdWx0aTIgKyBNVUxUSVhBQ1RfT0ZG U0VUU19QRVJfUEFHRSAtIDEpKTsKIH0KIAotLyoKLSAqIERlY2lkZSB3aGV0aGVyIGEgTXVsdGlY YWN0TWVtYmVyIHBhZ2UgbnVtYmVyIGlzICJvbGRlciIgZm9yIHRydW5jYXRpb24KLSAqIHB1cnBv c2VzLiAgVGhlcmUgaXMgbm8gImludmFsaWQgb2Zmc2V0IG51bWJlciIgc28gdXNlIHRoZSBudW1i ZXJzIHZlcmJhdGltLgotICovCi1zdGF0aWMgYm9vbAotTXVsdGlYYWN0TWVtYmVyUGFnZVByZWNl ZGVzKGludCBwYWdlMSwgaW50IHBhZ2UyKQotewotCU11bHRpWGFjdE9mZnNldCBvZmZzZXQxOwot CU11bHRpWGFjdE9mZnNldCBvZmZzZXQyOwotCi0Jb2Zmc2V0MSA9ICgoTXVsdGlYYWN0T2Zmc2V0 KSBwYWdlMSkgKiBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRTsKLQlvZmZzZXQyID0gKChNdWx0 aVhhY3RPZmZzZXQpIHBhZ2UyKSAqIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFOwotCi0JcmV0 dXJuIChNdWx0aVhhY3RPZmZzZXRQcmVjZWRlcyhvZmZzZXQxLCBvZmZzZXQyKSAmJgotCQkJTXVs dGlYYWN0T2Zmc2V0UHJlY2VkZXMob2Zmc2V0MSwKLQkJCQkJCQkJCW9mZnNldDIgKyBNVUxUSVhB Q1RfTUVNQkVSU19QRVJfUEFHRSAtIDEpKTsKLX0KLQogLyoKICAqIERlY2lkZSB3aGljaCBvZiB0 d28gTXVsdGlYYWN0SWRzIGlzIGVhcmxpZXIuCiAgKgpAQCAtMzE5MSwxMiArMzEzNSwxNiBAQCBN dWx0aVhhY3RPZmZzZXRQcmVjZWRlcyhNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0MSwgTXVsdGlYYWN0 T2Zmc2V0IG9mZnNldDIpCiAgKiBXcml0ZSBhbiB4bG9nIHJlY29yZCByZWZsZWN0aW5nIHRoZSB6 ZXJvaW5nIG9mIGVpdGhlciBhIE1FTUJFUnMgb3IKICAqIE9GRlNFVHMgcGFnZSAoaW5mbyBzaG93 cyB3aGljaCkKICAqLwotc3RhdGljIHZvaWQKK3N0YXRpYyBYTG9nUmVjUHRyIAogV3JpdGVNWmVy b1BhZ2VYbG9nUmVjKGludCBwYWdlbm8sIHVpbnQ4IGluZm8pCiB7CisJWExvZ1JlY1B0ciByZWNw dHI7CisJCiAJWExvZ0JlZ2luSW5zZXJ0KCk7CiAJWExvZ1JlZ2lzdGVyRGF0YSgoY2hhciAqKSAo JnBhZ2VubyksIHNpemVvZihpbnQpKTsKLQkodm9pZCkgWExvZ0luc2VydChSTV9NVUxUSVhBQ1Rf SUQsIGluZm8pOworCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fTVVMVElYQUNUX0lELCBpbmZvKTsK KworCXJldHVybiByZWNwdHI7CiB9CiAKIC8qCkBAIC0zMjQxLDMyICszMTg5LDE4IEBAIG11bHRp eGFjdF9yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCWlmIChpbmZvID09IFhMT0dfTVVM VElYQUNUX1pFUk9fT0ZGX1BBR0UpCiAJewogCQlpbnQJCQlwYWdlbm87Ci0JCWludAkJCXNsb3Ru bzsKIAogCQltZW1jcHkoJnBhZ2VubywgWExvZ1JlY0dldERhdGEocmVjb3JkKSwgc2l6ZW9mKGlu dCkpOwogCi0JCUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2ssIExXX0VYQ0xV U0lWRSk7Ci0KLQkJc2xvdG5vID0gWmVyb011bHRpWGFjdE9mZnNldFBhZ2UocGFnZW5vLCBmYWxz ZSk7Ci0JCVNpbXBsZUxydVdyaXRlUGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIHNsb3Rubyk7Ci0J CUFzc2VydCghTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSk7 Ci0KLQkJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RPZmZzZXRTTFJVTG9jayk7CisJCVVubG9ja1Jl bGVhc2VCdWZmZXIoWmVyb011bHRpWGFjdE9mZnNldFBhZ2UocGFnZW5vLCBmYWxzZSkpOwogCX0K IAllbHNlIGlmIChpbmZvID09IFhMT0dfTVVMVElYQUNUX1pFUk9fTUVNX1BBR0UpCiAJewogCQlp bnQJCQlwYWdlbm87Ci0JCWludAkJCXNsb3RubzsKIAogCQltZW1jcHkoJnBhZ2VubywgWExvZ1Jl Y0dldERhdGEocmVjb3JkKSwgc2l6ZW9mKGludCkpOwogCi0JCUxXTG9ja0FjcXVpcmUoTXVsdGlY YWN0TWVtYmVyU0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQkJc2xvdG5vID0gWmVyb011bHRp WGFjdE1lbWJlclBhZ2UocGFnZW5vLCBmYWxzZSk7Ci0JCVNpbXBsZUxydVdyaXRlUGFnZShNdWx0 aVhhY3RNZW1iZXJDdGwsIHNsb3Rubyk7Ci0JCUFzc2VydCghTXVsdGlYYWN0TWVtYmVyQ3RsLT5z aGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSk7Ci0KLQkJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RN ZW1iZXJTTFJVTG9jayk7CisJCVVubG9ja1JlbGVhc2VCdWZmZXIoWmVyb011bHRpWGFjdE1lbWJl clBhZ2UocGFnZW5vLCBmYWxzZSkpOwogCX0KIAllbHNlIGlmIChpbmZvID09IFhMT0dfTVVMVElY QUNUX0NSRUFURV9JRCkKIAl7CkBAIC0zMjc3LDcgKzMyMTEsNyBAQCBtdWx0aXhhY3RfcmVkbyhY TG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAogCQkvKiBTdG9yZSB0aGUgZGF0YSBiYWNrIGludG8g dGhlIFNMUlUgZmlsZXMgKi8KIAkJUmVjb3JkTmV3TXVsdGlYYWN0KHhscmVjLT5taWQsIHhscmVj LT5tb2ZmLCB4bHJlYy0+bm1lbWJlcnMsCi0JCQkJCQkgICB4bHJlYy0+bWVtYmVycyk7CisJCQkJ CQkgICB4bHJlYy0+bWVtYmVycywgTlVMTCwgTlVMTCk7CiAKIAkJLyogTWFrZSBzdXJlIG5leHRN WGFjdC9uZXh0T2Zmc2V0IGFyZSBiZXlvbmQgd2hhdCB0aGlzIHJlY29yZCBoYXMgKi8KIAkJTXVs dGlYYWN0QWR2YW5jZU5leHRNWGFjdCh4bHJlYy0+bWlkICsgMSwKQEAgLTMzMDAsNyArMzIzNCw2 IEBAIG11bHRpeGFjdF9yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCWVsc2UgaWYgKGlu Zm8gPT0gWExPR19NVUxUSVhBQ1RfVFJVTkNBVEVfSUQpCiAJewogCQl4bF9tdWx0aXhhY3RfdHJ1 bmNhdGUgeGxyZWM7Ci0JCWludAkJCXBhZ2VubzsKIAogCQltZW1jcHkoJnhscmVjLCBYTG9nUmVj R2V0RGF0YShyZWNvcmQpLAogCQkJICAgU2l6ZU9mTXVsdGlYYWN0VHJ1bmNhdGUpOwpAQCAtMzMy NiwxMyArMzI1OSw2IEBAIG11bHRpeGFjdF9yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQog CiAJCVBlcmZvcm1NZW1iZXJzVHJ1bmNhdGlvbih4bHJlYy5zdGFydFRydW5jTWVtYiwgeGxyZWMu ZW5kVHJ1bmNNZW1iKTsKIAotCQkvKgotCQkgKiBEdXJpbmcgWExPRyByZXBsYXksIGxhdGVzdF9w YWdlX251bWJlciBpc24ndCBuZWNlc3NhcmlseSBzZXQgdXAKLQkJICogeWV0OyBpbnNlcnQgYSBz dWl0YWJsZSB2YWx1ZSB0byBieXBhc3MgdGhlIHNhbml0eSB0ZXN0IGluCi0JCSAqIFNpbXBsZUxy dVRydW5jYXRlLgotCQkgKi8KLQkJcGFnZW5vID0gTXVsdGlYYWN0SWRUb09mZnNldFBhZ2UoeGxy ZWMuZW5kVHJ1bmNPZmYpOwotCQlNdWx0aVhhY3RPZmZzZXRDdGwtPnNoYXJlZC0+bGF0ZXN0X3Bh Z2VfbnVtYmVyID0gcGFnZW5vOwogCQlQZXJmb3JtT2Zmc2V0c1RydW5jYXRpb24oeGxyZWMuc3Rh cnRUcnVuY09mZiwgeGxyZWMuZW5kVHJ1bmNPZmYpOwogCiAJCUxXTG9ja1JlbGVhc2UoTXVsdGlY YWN0VHJ1bmNhdGlvbkxvY2spOwpAQCAtMzQwNSwyMSArMzMzMSwzIEBAIHBnX2dldF9tdWx0aXhh Y3RfbWVtYmVycyhQR19GVU5DVElPTl9BUkdTKQogCiAJU1JGX1JFVFVSTl9ET05FKGZ1bmNjeHQp OwogfQotCi0vKgotICogRW50cnlwb2ludCBmb3Igc3luYy5jIHRvIHN5bmMgb2Zmc2V0cyBmaWxl cy4KLSAqLwotaW50Ci1tdWx0aXhhY3RvZmZzZXRzc3luY2ZpbGV0YWcoY29uc3QgRmlsZVRhZyAq ZnRhZywgY2hhciAqcGF0aCkKLXsKLQlyZXR1cm4gU2xydVN5bmNGaWxlVGFnKE11bHRpWGFjdE9m ZnNldEN0bCwgZnRhZywgcGF0aCk7Ci19Ci0KLS8qCi0gKiBFbnRyeXBvaW50IGZvciBzeW5jLmMg dG8gc3luYyBtZW1iZXJzIGZpbGVzLgotICovCi1pbnQKLW11bHRpeGFjdG1lbWJlcnNzeW5jZmls ZXRhZyhjb25zdCBGaWxlVGFnICpmdGFnLCBjaGFyICpwYXRoKQotewotCXJldHVybiBTbHJ1U3lu Y0ZpbGVUYWcoTXVsdGlYYWN0TWVtYmVyQ3RsLCBmdGFnLCBwYXRoKTsKLX0KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3NscnUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL3NscnUuYwppbmRleCA2ZmVkYTg3ZjU3NC4uMmQ4NDQ1ZTEzMDcgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3NscnUuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS9zbHJ1LmMKQEAgLTEsNDEgKzEsOSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAg KgogICogc2xydS5jCi0gKgkJU2ltcGxlIExSVSBidWZmZXJpbmcgZm9yIHRyYW5zYWN0aW9uIHN0 YXR1cyBsb2dmaWxlcworICoJCVNpbXBsZSBidWZmZXJpbmcgZm9yIHRyYW5zYWN0aW9uIHN0YXR1 cyBsb2dmaWxlcwogICoKLSAqIFdlIHVzZSBhIHNpbXBsZSBsZWFzdC1yZWNlbnRseS11c2VkIHNj aGVtZSB0byBtYW5hZ2UgYSBwb29sIG9mIHBhZ2UKLSAqIGJ1ZmZlcnMuICBVbmRlciBvcmRpbmFy eSBjaXJjdW1zdGFuY2VzIHdlIGV4cGVjdCB0aGF0IHdyaXRlCi0gKiB0cmFmZmljIHdpbGwgb2Nj dXIgbW9zdGx5IHRvIHRoZSBsYXRlc3QgcGFnZSAoYW5kIHRvIHRoZSBqdXN0LXByaW9yCi0gKiBw YWdlLCBzb29uIGFmdGVyIGEgcGFnZSB0cmFuc2l0aW9uKS4gIFJlYWQgdHJhZmZpYyB3aWxsIHBy b2JhYmx5IHRvdWNoCi0gKiBhIGxhcmdlciBzcGFuIG9mIHBhZ2VzLCBidXQgaW4gYW55IGNhc2Ug YSBmYWlybHkgc21hbGwgbnVtYmVyIG9mIHBhZ2UKLSAqIGJ1ZmZlcnMgc2hvdWxkIGJlIHN1ZmZp Y2llbnQuICBTbywgd2UganVzdCBzZWFyY2ggdGhlIGJ1ZmZlcnMgdXNpbmcgcGxhaW4KLSAqIGxp bmVhciBzZWFyY2g7IHRoZXJlJ3Mgbm8gbmVlZCBmb3IgYSBoYXNodGFibGUgb3IgYW55dGhpbmcg ZmFuY3kuCi0gKiBUaGUgbWFuYWdlbWVudCBhbGdvcml0aG0gaXMgc3RyYWlnaHQgTFJVIGV4Y2Vw dCB0aGF0IHdlIHdpbGwgbmV2ZXIgc3dhcAotICogb3V0IHRoZSBsYXRlc3QgcGFnZSAoc2luY2Ug d2Uga25vdyBpdCdzIGdvaW5nIHRvIGJlIGhpdCBhZ2FpbiBldmVudHVhbGx5KS4KLSAqCi0gKiBX ZSB1c2UgYSBjb250cm9sIExXTG9jayB0byBwcm90ZWN0IHRoZSBzaGFyZWQgZGF0YSBzdHJ1Y3R1 cmVzLCBwbHVzCi0gKiBwZXItYnVmZmVyIExXTG9ja3MgdGhhdCBzeW5jaHJvbml6ZSBJL08gZm9y IGVhY2ggYnVmZmVyLiAgVGhlIGNvbnRyb2wgbG9jawotICogbXVzdCBiZSBoZWxkIHRvIGV4YW1p bmUgb3IgbW9kaWZ5IGFueSBzaGFyZWQgc3RhdGUuICBBIHByb2Nlc3MgdGhhdCBpcwotICogcmVh ZGluZyBpbiBvciB3cml0aW5nIG91dCBhIHBhZ2UgYnVmZmVyIGRvZXMgbm90IGhvbGQgdGhlIGNv bnRyb2wgbG9jaywKLSAqIG9ubHkgdGhlIHBlci1idWZmZXIgbG9jayBmb3IgdGhlIGJ1ZmZlciBp dCBpcyB3b3JraW5nIG9uLgotICoKLSAqICJIb2xkaW5nIHRoZSBjb250cm9sIGxvY2siIG1lYW5z IGV4Y2x1c2l2ZSBsb2NrIGluIGFsbCBjYXNlcyBleGNlcHQgZm9yCi0gKiBTaW1wbGVMcnVSZWFk UGFnZV9SZWFkT25seSgpOyBzZWUgY29tbWVudHMgZm9yIFNscnVSZWNlbnRseVVzZWQoKSBmb3IK LSAqIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdC4KLSAqCi0gKiBXaGVuIGluaXRpYXRpbmcgSS9P IG9uIGEgYnVmZmVyLCB3ZSBhY3F1aXJlIHRoZSBwZXItYnVmZmVyIGxvY2sgZXhjbHVzaXZlbHkK LSAqIGJlZm9yZSByZWxlYXNpbmcgdGhlIGNvbnRyb2wgbG9jay4gIFRoZSBwZXItYnVmZmVyIGxv Y2sgaXMgcmVsZWFzZWQgYWZ0ZXIKLSAqIGNvbXBsZXRpbmcgdGhlIEkvTywgcmUtYWNxdWlyaW5n IHRoZSBjb250cm9sIGxvY2ssIGFuZCB1cGRhdGluZyB0aGUgc2hhcmVkCi0gKiBzdGF0ZS4gIChE ZWFkbG9jayBpcyBub3QgcG9zc2libGUgaGVyZSwgYmVjYXVzZSB3ZSBuZXZlciB0cnkgdG8gaW5p dGlhdGUKLSAqIEkvTyB3aGVuIHNvbWVvbmUgZWxzZSBpcyBhbHJlYWR5IGRvaW5nIEkvTyBvbiB0 aGUgc2FtZSBidWZmZXIuKQotICogVG8gd2FpdCBmb3IgSS9PIHRvIGNvbXBsZXRlLCByZWxlYXNl IHRoZSBjb250cm9sIGxvY2ssIGFjcXVpcmUgdGhlCi0gKiBwZXItYnVmZmVyIGxvY2sgaW4gc2hh cmVkIG1vZGUsIGltbWVkaWF0ZWx5IHJlbGVhc2UgdGhlIHBlci1idWZmZXIgbG9jaywKLSAqIHJl YWNxdWlyZSB0aGUgY29udHJvbCBsb2NrLCBhbmQgdGhlbiByZWNoZWNrIHN0YXRlIChzaW5jZSBh cmJpdHJhcnkgdGhpbmdzCi0gKiBjb3VsZCBoYXZlIGhhcHBlbmVkIHdoaWxlIHdlIGRpZG4ndCBo YXZlIHRoZSBsb2NrKS4KLSAqCi0gKiBBcyB3aXRoIHRoZSByZWd1bGFyIGJ1ZmZlciBtYW5hZ2Vy LCBpdCBpcyBwb3NzaWJsZSBmb3IgYW5vdGhlciBwcm9jZXNzCi0gKiB0byByZS1kaXJ0eSBhIHBh Z2UgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgd3JpdHRlbiBvdXQuICBUaGlzIGlzIGhhbmRsZWQK LSAqIGJ5IHJlLXNldHRpbmcgdGhlIHBhZ2UncyBwYWdlX2RpcnR5IGZsYWcuCisgKiBYWFggd3Jp dGUgbWUKICAqCiAgKgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCkBAIC02MCw1NjIgKzI4LDM0IEBACiAjaW5j bHVkZSAic3RvcmFnZS9mZC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKIAotI2RlZmlu ZSBTbHJ1RmlsZU5hbWUoY3RsLCBwYXRoLCBzZWcpIFwKLQlzbnByaW50ZihwYXRoLCBNQVhQR1BB VEgsICIlcy8lMDRYIiwgKGN0bCktPkRpciwgc2VnKQotCiAvKgotICogRHVyaW5nIFNpbXBsZUxy dVdyaXRlQWxsKCksIHdlIHdpbGwgdXN1YWxseSBub3QgbmVlZCB0byB3cml0ZSBtb3JlIHRoYW4g b25lCi0gKiBvciB0d28gcGh5c2ljYWwgZmlsZXMsIGJ1dCB3ZSBtYXkgbmVlZCB0byB3cml0ZSBz ZXZlcmFsIHBhZ2VzIHBlciBmaWxlLiAgV2UKLSAqIGNhbiBjb25zb2xpZGF0ZSB0aGUgSS9PIHJl cXVlc3RzIGJ5IGxlYXZpbmcgZmlsZXMgb3BlbiB1bnRpbCBjb250cm9sIHJldHVybnMKLSAqIHRv IFNpbXBsZUxydVdyaXRlQWxsKCkuICBUaGlzIGRhdGEgc3RydWN0dXJlIHJlbWVtYmVycyB3aGlj aCBmaWxlcyBhcmUgb3Blbi4KKyAqIFNMUlUgSUQgdG8gcGF0aCBtYXBwaW5nCiAgKi8KLSNkZWZp bmUgTUFYX1dSSVRFQUxMX0JVRkZFUlMJMTYKKyNkZWZpbmUgUEdfU0xSVShzeW1uYW1lLG5hbWUs cGF0aCxzeW5jaHJvbml6ZSkgXAorCXBhdGgsCiAKLXR5cGVkZWYgc3RydWN0IFNscnVXcml0ZUFs bERhdGEKK3N0YXRpYyBjaGFyICpzbHJ1X2RpcnNbXSA9CiB7Ci0JaW50CQkJbnVtX2ZpbGVzOwkJ LyogIyBmaWxlcyBhY3R1YWxseSBvcGVuICovCi0JaW50CQkJZmRbTUFYX1dSSVRFQUxMX0JVRkZF UlNdOwkvKiB0aGVpciBGRCdzICovCi0JaW50CQkJc2Vnbm9bTUFYX1dSSVRFQUxMX0JVRkZFUlNd OwkvKiB0aGVpciBsb2cgc2VnI3MgKi8KLX0gU2xydVdyaXRlQWxsRGF0YTsKLQotdHlwZWRlZiBz dHJ1Y3QgU2xydVdyaXRlQWxsRGF0YSAqU2xydVdyaXRlQWxsOworI2luY2x1ZGUgImFjY2Vzcy9z bHJ1bGlzdC5oIgorfTsKIAogLyoKLSAqIFBvcHVsYXRlIGEgZmlsZSB0YWcgZGVzY3JpYmluZyBh IHNlZ21lbnQgZmlsZS4gIFdlIG9ubHkgdXNlIHRoZSBzZWdtZW50Ci0gKiBudW1iZXIsIHNpbmNl IHdlIGNhbiBkZXJpdmUgZXZlcnl0aGluZyBlbHNlIHdlIG5lZWQgYnkgaGF2aW5nIHNlcGFyYXRl Ci0gKiBzeW5jIGhhbmRsZXIgZnVuY3Rpb25zIGZvciBjbG9nLCBtdWx0aXhhY3QgZXRjLgorICog V2UnbGwgbWFpbnRhaW4gYSBsaXR0bGUgY2FjaGUgb2YgcmVjZW50bHkgc2VlbiBidWZmZXJzLCB0 byB0cnkgdG8gYXZvaWQgdGhlCisgKiBidWZmZXIgbWFwcGluZyB0YWJsZSBvbiByZXBlYXQgYWNj ZXNzIChpZSB0aGUgYnVzeSBlbmQgb2YgdGhlIENMT0cpLiAgT25lCisgKiBlbnRyeSBwZXIgU0xS VS4KICAqLwotI2RlZmluZSBJTklUX1NMUlVGSUxFVEFHKGEseHhfaGFuZGxlcix4eF9zZWdubykg XAotKCBcCi0JbWVtc2V0KCYoYSksIDAsIHNpemVvZihGaWxlVGFnKSksIFwKLQkoYSkuaGFuZGxl ciA9ICh4eF9oYW5kbGVyKSwgXAotCShhKS5zZWdubyA9ICh4eF9zZWdubykgXAotKQotCi0vKgot ICogTWFjcm8gdG8gbWFyayBhIGJ1ZmZlciBzbG90ICJtb3N0IHJlY2VudGx5IHVzZWQiLiAgTm90 ZSBtdWx0aXBsZSBldmFsdWF0aW9uCi0gKiBvZiBhcmd1bWVudHMhCi0gKgotICogVGhlIHJlYXNv biBmb3IgdGhlIGlmLXRlc3QgaXMgdGhhdCB0aGVyZSBhcmUgb2Z0ZW4gbWFueSBjb25zZWN1dGl2 ZQotICogYWNjZXNzZXMgdG8gdGhlIHNhbWUgcGFnZSAocGFydGljdWxhcmx5IHRoZSBsYXRlc3Qg cGFnZSkuICBCeSBzdXBwcmVzc2luZwotICogdXNlbGVzcyBpbmNyZW1lbnRzIG9mIGN1cl9scnVf Y291bnQsIHdlIHJlZHVjZSB0aGUgcHJvYmFiaWxpdHkgdGhhdCBvbGQKLSAqIHBhZ2VzJyBjb3Vu dHMgd2lsbCAid3JhcCBhcm91bmQiIGFuZCBtYWtlIHRoZW0gYXBwZWFyIHJlY2VudGx5IHVzZWQu Ci0gKgotICogV2UgYWxsb3cgdGhpcyBjb2RlIHRvIGJlIGV4ZWN1dGVkIGNvbmN1cnJlbnRseSBi eSBtdWx0aXBsZSBwcm9jZXNzZXMgd2l0aGluCi0gKiBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25s eSgpLiAgQXMgbG9uZyBhcyBpbnQgcmVhZHMgYW5kIHdyaXRlcyBhcmUgYXRvbWljLAotICogdGhp cyBzaG91bGQgbm90IGNhdXNlIGFueSBjb21wbGV0ZWx5LWJvZ3VzIHZhbHVlcyB0byBlbnRlciB0 aGUgY29tcHV0YXRpb24uCi0gKiBIb3dldmVyLCBpdCBpcyBwb3NzaWJsZSBmb3IgZWl0aGVyIGN1 cl9scnVfY291bnQgb3IgaW5kaXZpZHVhbAotICogcGFnZV9scnVfY291bnQgZW50cmllcyB0byBi ZSAicmVzZXQiIHRvIGxvd2VyIHZhbHVlcyB0aGFuIHRoZXkgc2hvdWxkIGhhdmUsCi0gKiBpbiBj YXNlIGEgcHJvY2VzcyBpcyBkZWxheWVkIHdoaWxlIGl0IGV4ZWN1dGVzIHRoaXMgbWFjcm8uICBX aXRoIGNhcmUgaW4KLSAqIFNscnVTZWxlY3RMUlVQYWdlKCksIHRoaXMgZG9lcyBsaXR0bGUgaGFy bSwgYW5kIGluIGFueSBjYXNlIHRoZSBhYnNvbHV0ZQotICogd29yc3QgcG9zc2libGUgY29uc2Vx dWVuY2UgaXMgYSBub25vcHRpbWFsIGNob2ljZSBvZiBwYWdlIHRvIGV2aWN0LiAgVGhlCi0gKiBn YWluIGZyb20gYWxsb3dpbmcgY29uY3VycmVudCByZWFkcyBvZiBTTFJVIHBhZ2VzIHNlZW1zIHdv cnRoIGl0LgotICovCi0jZGVmaW5lIFNscnVSZWNlbnRseVVzZWQoc2hhcmVkLCBzbG90bm8pCVwK LQlkbyB7IFwKLQkJaW50CQluZXdfbHJ1X2NvdW50ID0gKHNoYXJlZCktPmN1cl9scnVfY291bnQ7 IFwKLQkJaWYgKG5ld19scnVfY291bnQgIT0gKHNoYXJlZCktPnBhZ2VfbHJ1X2NvdW50W3Nsb3Ru b10pIHsgXAotCQkJKHNoYXJlZCktPmN1cl9scnVfY291bnQgPSArK25ld19scnVfY291bnQ7IFwK LQkJCShzaGFyZWQpLT5wYWdlX2xydV9jb3VudFtzbG90bm9dID0gbmV3X2xydV9jb3VudDsgXAot CQl9IFwKLQl9IHdoaWxlICgwKQotCi0vKiBTYXZlZCBpbmZvIGZvciBTbHJ1UmVwb3J0SU9FcnJv ciAqLwotdHlwZWRlZiBlbnVtCi17Ci0JU0xSVV9PUEVOX0ZBSUxFRCwKLQlTTFJVX1NFRUtfRkFJ TEVELAotCVNMUlVfUkVBRF9GQUlMRUQsCi0JU0xSVV9XUklURV9GQUlMRUQsCi0JU0xSVV9GU1lO Q19GQUlMRUQsCi0JU0xSVV9DTE9TRV9GQUlMRUQKLX0gU2xydUVycm9yQ2F1c2U7CitzdHJ1Y3Qg U2xydVJlY2VudEJ1ZmZlciB7CisJaW50CQkJcGFnZW5vOworCUJ1ZmZlcgkJcmVjZW50X2J1ZmZl cjsKK307CiAKLXN0YXRpYyBTbHJ1RXJyb3JDYXVzZSBzbHJ1X2VycmNhdXNlOwotc3RhdGljIGlu dAlzbHJ1X2Vycm5vOworc3RhdGljIHN0cnVjdCBTbHJ1UmVjZW50QnVmZmVyIHNscnVfcmVjZW50 X2J1ZmZlcnNbU0xSVV9ORVhUX0lEXTsKIAotCi1zdGF0aWMgdm9pZCBTaW1wbGVMcnVaZXJvTFNO cyhTbHJ1Q3RsIGN0bCwgaW50IHNsb3Rubyk7Ci1zdGF0aWMgdm9pZCBTaW1wbGVMcnVXYWl0SU8o U2xydUN0bCBjdGwsIGludCBzbG90bm8pOwotc3RhdGljIHZvaWQgU2xydUludGVybmFsV3JpdGVQ YWdlKFNscnVDdGwgY3RsLCBpbnQgc2xvdG5vLCBTbHJ1V3JpdGVBbGwgZmRhdGEpOwotc3RhdGlj IGJvb2wgU2xydVBoeXNpY2FsUmVhZFBhZ2UoU2xydUN0bCBjdGwsIGludCBwYWdlbm8sIGludCBz bG90bm8pOwotc3RhdGljIGJvb2wgU2xydVBoeXNpY2FsV3JpdGVQYWdlKFNscnVDdGwgY3RsLCBp bnQgcGFnZW5vLCBpbnQgc2xvdG5vLAotCQkJCQkJCQkgIFNscnVXcml0ZUFsbCBmZGF0YSk7Ci1z dGF0aWMgdm9pZCBTbHJ1UmVwb3J0SU9FcnJvcihTbHJ1Q3RsIGN0bCwgaW50IHBhZ2VubywgVHJh bnNhY3Rpb25JZCB4aWQpOwotc3RhdGljIGludAlTbHJ1U2VsZWN0TFJVUGFnZShTbHJ1Q3RsIGN0 bCwgaW50IHBhZ2Vubyk7Ci0KLXN0YXRpYyBib29sIFNscnVTY2FuRGlyQ2JEZWxldGVDdXRvZmYo U2xydUN0bCBjdGwsIGNoYXIgKmZpbGVuYW1lLAorc3RhdGljIGJvb2wgU2xydVNjYW5EaXJDYkRl bGV0ZUN1dG9mZihpbnQgc2xydV9pZCwKKwkJCQkJCQkJCSAgU2xydVBhZ2VQcmVjZWRlc0Z1bmN0 aW9uIFBhZ2VQcmVjZWRlcywKKwkJCQkJCQkJCSAgY2hhciAqZmlsZW5hbWUsCiAJCQkJCQkJCQkg IGludCBzZWdwYWdlLCB2b2lkICpkYXRhKTsKLXN0YXRpYyB2b2lkIFNscnVJbnRlcm5hbERlbGV0 ZVNlZ21lbnQoU2xydUN0bCBjdGwsIGludCBzZWdubyk7Ci0KLS8qCi0gKiBJbml0aWFsaXphdGlv biBvZiBzaGFyZWQgbWVtb3J5Ci0gKi8KLQotU2l6ZQotU2ltcGxlTHJ1U2htZW1TaXplKGludCBu c2xvdHMsIGludCBubHNucykKLXsKLQlTaXplCQlzejsKLQotCS8qIHdlIGFzc3VtZSBuc2xvdHMg aXNuJ3Qgc28gbGFyZ2UgYXMgdG8gcmlzayBvdmVyZmxvdyAqLwotCXN6ID0gTUFYQUxJR04oc2l6 ZW9mKFNscnVTaGFyZWREYXRhKSk7Ci0Jc3ogKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9mKGNo YXIgKikpOwkvKiBwYWdlX2J1ZmZlcltdICovCi0Jc3ogKz0gTUFYQUxJR04obnNsb3RzICogc2l6 ZW9mKFNscnVQYWdlU3RhdHVzKSk7CS8qIHBhZ2Vfc3RhdHVzW10gKi8KLQlzeiArPSBNQVhBTElH Tihuc2xvdHMgKiBzaXplb2YoYm9vbCkpOwkvKiBwYWdlX2RpcnR5W10gKi8KLQlzeiArPSBNQVhB TElHTihuc2xvdHMgKiBzaXplb2YoaW50KSk7CS8qIHBhZ2VfbnVtYmVyW10gKi8KLQlzeiArPSBN QVhBTElHTihuc2xvdHMgKiBzaXplb2YoaW50KSk7CS8qIHBhZ2VfbHJ1X2NvdW50W10gKi8KLQlz eiArPSBNQVhBTElHTihuc2xvdHMgKiBzaXplb2YoTFdMb2NrUGFkZGVkKSk7CS8qIGJ1ZmZlcl9s b2Nrc1tdICovCi0KLQlpZiAobmxzbnMgPiAwKQotCQlzeiArPSBNQVhBTElHTihuc2xvdHMgKiBu bHNucyAqIHNpemVvZihYTG9nUmVjUHRyKSk7CS8qIGdyb3VwX2xzbltdICovCi0KLQlyZXR1cm4g QlVGRkVSQUxJR04oc3opICsgQkxDS1NaICogbnNsb3RzOwotfQotCi0vKgotICogSW5pdGlhbGl6 ZSwgb3IgYXR0YWNoIHRvLCBhIHNpbXBsZSBMUlUgY2FjaGUgaW4gc2hhcmVkIG1lbW9yeS4KLSAq Ci0gKiBjdGw6IGFkZHJlc3Mgb2YgbG9jYWwgKHVuc2hhcmVkKSBjb250cm9sIHN0cnVjdHVyZS4K LSAqIG5hbWU6IG5hbWUgb2YgU0xSVS4gIChUaGlzIGlzIHVzZXItdmlzaWJsZSwgcGljayB3aXRo IGNhcmUhKQotICogbnNsb3RzOiBudW1iZXIgb2YgcGFnZSBzbG90cyB0byB1c2UuCi0gKiBubHNu czogbnVtYmVyIG9mIExTTiBncm91cHMgcGVyIHBhZ2UgKHNldCB0byB6ZXJvIGlmIG5vdCByZWxl dmFudCkuCi0gKiBjdGxsb2NrOiBMV0xvY2sgdG8gdXNlIHRvIGNvbnRyb2wgYWNjZXNzIHRvIHRo ZSBzaGFyZWQgY29udHJvbCBzdHJ1Y3R1cmUuCi0gKiBzdWJkaXI6IFBHREFUQS1yZWxhdGl2ZSBz dWJkaXJlY3RvcnkgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIGZpbGVzLgotICogdHJhbmNoZV9pZDog TFdMb2NrIHRyYW5jaGUgSUQgdG8gdXNlIGZvciB0aGUgU0xSVSdzIHBlci1idWZmZXIgTFdMb2Nr cy4KLSAqIHN5bmNfaGFuZGxlcjogd2hpY2ggc2V0IG9mIGZ1bmN0aW9ucyB0byB1c2UgdG8gaGFu ZGxlIHN5bmMgcmVxdWVzdHMKLSAqLwotdm9pZAotU2ltcGxlTHJ1SW5pdChTbHJ1Q3RsIGN0bCwg Y29uc3QgY2hhciAqbmFtZSwgaW50IG5zbG90cywgaW50IG5sc25zLAotCQkJICBMV0xvY2sgKmN0 bGxvY2ssIGNvbnN0IGNoYXIgKnN1YmRpciwgaW50IHRyYW5jaGVfaWQsCi0JCQkgIFN5bmNSZXF1 ZXN0SGFuZGxlciBzeW5jX2hhbmRsZXIpCi17Ci0JU2xydVNoYXJlZAlzaGFyZWQ7Ci0JYm9vbAkJ Zm91bmQ7Ci0KLQlzaGFyZWQgPSAoU2xydVNoYXJlZCkgU2htZW1Jbml0U3RydWN0KG5hbWUsCi0J CQkJCQkJCQkJICBTaW1wbGVMcnVTaG1lbVNpemUobnNsb3RzLCBubHNucyksCi0JCQkJCQkJCQkJ ICAmZm91bmQpOwotCi0JaWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKLQl7Ci0JCS8qIEluaXRpYWxp emUgbG9ja3MgYW5kIHNoYXJlZCBtZW1vcnkgYXJlYSAqLwotCQljaGFyCSAgICpwdHI7Ci0JCVNp emUJCW9mZnNldDsKLQkJaW50CQkJc2xvdG5vOwotCi0JCUFzc2VydCghZm91bmQpOwotCi0JCW1l bXNldChzaGFyZWQsIDAsIHNpemVvZihTbHJ1U2hhcmVkRGF0YSkpOwotCi0JCXNoYXJlZC0+Q29u dHJvbExvY2sgPSBjdGxsb2NrOwotCi0JCXNoYXJlZC0+bnVtX3Nsb3RzID0gbnNsb3RzOwotCQlz aGFyZWQtPmxzbl9ncm91cHNfcGVyX3BhZ2UgPSBubHNuczsKLQotCQlzaGFyZWQtPmN1cl9scnVf Y291bnQgPSAwOwotCi0JCS8qIHNoYXJlZC0+bGF0ZXN0X3BhZ2VfbnVtYmVyIHdpbGwgYmUgc2V0 IGxhdGVyICovCi0KLQkJc2hhcmVkLT5zbHJ1X3N0YXRzX2lkeCA9IHBnc3RhdF9nZXRfc2xydV9p bmRleChuYW1lKTsKLQotCQlwdHIgPSAoY2hhciAqKSBzaGFyZWQ7Ci0JCW9mZnNldCA9IE1BWEFM SUdOKHNpemVvZihTbHJ1U2hhcmVkRGF0YSkpOwotCQlzaGFyZWQtPnBhZ2VfYnVmZmVyID0gKGNo YXIgKiopIChwdHIgKyBvZmZzZXQpOwotCQlvZmZzZXQgKz0gTUFYQUxJR04obnNsb3RzICogc2l6 ZW9mKGNoYXIgKikpOwotCQlzaGFyZWQtPnBhZ2Vfc3RhdHVzID0gKFNscnVQYWdlU3RhdHVzICop IChwdHIgKyBvZmZzZXQpOwotCQlvZmZzZXQgKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9mKFNs cnVQYWdlU3RhdHVzKSk7Ci0JCXNoYXJlZC0+cGFnZV9kaXJ0eSA9IChib29sICopIChwdHIgKyBv ZmZzZXQpOwotCQlvZmZzZXQgKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9mKGJvb2wpKTsKLQkJ c2hhcmVkLT5wYWdlX251bWJlciA9IChpbnQgKikgKHB0ciArIG9mZnNldCk7Ci0JCW9mZnNldCAr PSBNQVhBTElHTihuc2xvdHMgKiBzaXplb2YoaW50KSk7Ci0JCXNoYXJlZC0+cGFnZV9scnVfY291 bnQgPSAoaW50ICopIChwdHIgKyBvZmZzZXQpOwotCQlvZmZzZXQgKz0gTUFYQUxJR04obnNsb3Rz ICogc2l6ZW9mKGludCkpOwotCi0JCS8qIEluaXRpYWxpemUgTFdMb2NrcyAqLwotCQlzaGFyZWQt PmJ1ZmZlcl9sb2NrcyA9IChMV0xvY2tQYWRkZWQgKikgKHB0ciArIG9mZnNldCk7Ci0JCW9mZnNl dCArPSBNQVhBTElHTihuc2xvdHMgKiBzaXplb2YoTFdMb2NrUGFkZGVkKSk7Ci0KLQkJaWYgKG5s c25zID4gMCkKLQkJewotCQkJc2hhcmVkLT5ncm91cF9sc24gPSAoWExvZ1JlY1B0ciAqKSAocHRy ICsgb2Zmc2V0KTsKLQkJCW9mZnNldCArPSBNQVhBTElHTihuc2xvdHMgKiBubHNucyAqIHNpemVv ZihYTG9nUmVjUHRyKSk7Ci0JCX0KLQotCQlwdHIgKz0gQlVGRkVSQUxJR04ob2Zmc2V0KTsKLQkJ Zm9yIChzbG90bm8gPSAwOyBzbG90bm8gPCBuc2xvdHM7IHNsb3RubysrKQotCQl7Ci0JCQlMV0xv Y2tJbml0aWFsaXplKCZzaGFyZWQtPmJ1ZmZlcl9sb2Nrc1tzbG90bm9dLmxvY2ssCi0JCQkJCQkJ IHRyYW5jaGVfaWQpOwotCi0JCQlzaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gPSBwdHI7Ci0J CQlzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPSBTTFJVX1BBR0VfRU1QVFk7Ci0JCQlzaGFy ZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSA9IGZhbHNlOwotCQkJc2hhcmVkLT5wYWdlX2xydV9jb3Vu dFtzbG90bm9dID0gMDsKLQkJCXB0ciArPSBCTENLU1o7Ci0JCX0KLQotCQkvKiBTaG91bGQgZml0 IHRvIGVzdGltYXRlZCBzaG1lbSBzaXplICovCi0JCUFzc2VydChwdHIgLSAoY2hhciAqKSBzaGFy ZWQgPD0gU2ltcGxlTHJ1U2htZW1TaXplKG5zbG90cywgbmxzbnMpKTsKLQl9Ci0JZWxzZQotCQlB c3NlcnQoZm91bmQpOwotCi0JLyoKLQkgKiBJbml0aWFsaXplIHRoZSB1bnNoYXJlZCBjb250cm9s IHN0cnVjdCwgaW5jbHVkaW5nIGRpcmVjdG9yeSBwYXRoLiBXZQotCSAqIGFzc3VtZSBjYWxsZXIg c2V0IFBhZ2VQcmVjZWRlcy4KLQkgKi8KLQljdGwtPnNoYXJlZCA9IHNoYXJlZDsKLQljdGwtPnN5 bmNfaGFuZGxlciA9IHN5bmNfaGFuZGxlcjsKLQlzdHJsY3B5KGN0bC0+RGlyLCBzdWJkaXIsIHNp emVvZihjdGwtPkRpcikpOwotfQotCi0vKgotICogSW5pdGlhbGl6ZSAob3IgcmVpbml0aWFsaXpl KSBhIHBhZ2UgdG8gemVyb2VzLgotICoKLSAqIFRoZSBwYWdlIGlzIG5vdCBhY3R1YWxseSB3cml0 dGVuLCBqdXN0IHNldCB1cCBpbiBzaGFyZWQgbWVtb3J5LgotICogVGhlIHNsb3QgbnVtYmVyIG9m IHRoZSBuZXcgcGFnZSBpcyByZXR1cm5lZC4KLSAqCi0gKiBDb250cm9sIGxvY2sgbXVzdCBiZSBo ZWxkIGF0IGVudHJ5LCBhbmQgd2lsbCBiZSBoZWxkIGF0IGV4aXQuCi0gKi8KLWludAotU2ltcGxl THJ1WmVyb1BhZ2UoU2xydUN0bCBjdGwsIGludCBwYWdlbm8pCi17Ci0JU2xydVNoYXJlZAlzaGFy ZWQgPSBjdGwtPnNoYXJlZDsKLQlpbnQJCQlzbG90bm87Ci0KLQkvKiBGaW5kIGEgc3VpdGFibGUg YnVmZmVyIHNsb3QgZm9yIHRoZSBwYWdlICovCi0Jc2xvdG5vID0gU2xydVNlbGVjdExSVVBhZ2Uo Y3RsLCBwYWdlbm8pOwotCUFzc2VydChzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xS VV9QQUdFX0VNUFRZIHx8Ci0JCSAgIChzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xS VV9QQUdFX1ZBTElEICYmCi0JCQkhc2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10pIHx8Ci0JCSAg IHNoYXJlZC0+cGFnZV9udW1iZXJbc2xvdG5vXSA9PSBwYWdlbm8pOwotCi0JLyogTWFyayB0aGUg c2xvdCBhcyBjb250YWluaW5nIHRoaXMgcGFnZSAqLwotCXNoYXJlZC0+cGFnZV9udW1iZXJbc2xv dG5vXSA9IHBhZ2VubzsKLQlzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPSBTTFJVX1BBR0Vf VkFMSUQ7Ci0Jc2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVlOwotCVNscnVSZWNlbnRs eVVzZWQoc2hhcmVkLCBzbG90bm8pOwotCi0JLyogU2V0IHRoZSBidWZmZXIgdG8gemVyb2VzICov Ci0JTWVtU2V0KHNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSwgMCwgQkxDS1NaKTsKLQotCS8q IFNldCB0aGUgTFNOcyBmb3IgdGhpcyBuZXcgcGFnZSB0byB6ZXJvICovCi0JU2ltcGxlTHJ1WmVy b0xTTnMoY3RsLCBzbG90bm8pOwotCi0JLyogQXNzdW1lIHRoaXMgcGFnZSBpcyBub3cgdGhlIGxh dGVzdCBhY3RpdmUgcGFnZSAqLwotCXNoYXJlZC0+bGF0ZXN0X3BhZ2VfbnVtYmVyID0gcGFnZW5v OwotCi0JLyogdXBkYXRlIHRoZSBzdGF0cyBjb3VudGVyIG9mIHplcm9lZCBwYWdlcyAqLwotCXBn c3RhdF9jb3VudF9zbHJ1X3BhZ2VfemVyb2VkKHNoYXJlZC0+c2xydV9zdGF0c19pZHgpOwotCi0J cmV0dXJuIHNsb3RubzsKLX0KLQotLyoKLSAqIFplcm8gYWxsIHRoZSBMU05zIHdlIHN0b3JlIGZv ciB0aGlzIHNscnUgcGFnZS4KLSAqCi0gKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgZWFjaCB0aW1l IHdlIGNyZWF0ZSBhIG5ldyBwYWdlLCBhbmQgZWFjaCB0aW1lIHdlIHJlYWQKLSAqIGluIGEgcGFn ZSBmcm9tIGRpc2sgaW50byBhbiBleGlzdGluZyBidWZmZXIuICAoU3VjaCBhbiBvbGQgcGFnZSBj YW5ub3QKLSAqIGhhdmUgYW55IGludGVyZXN0aW5nIExTTnMsIHNpbmNlIHdlJ2QgaGF2ZSBmbHVz aGVkIHRoZW0gYmVmb3JlIHdyaXRpbmcKLSAqIHRoZSBwYWdlIGluIHRoZSBmaXJzdCBwbGFjZS4p Ci0gKgotICogVGhpcyBhc3N1bWVzIHRoYXQgSW52YWxpZFhMb2dSZWNQdHIgaXMgYml0d2lzZS1h bGwtMC4KLSAqLwotc3RhdGljIHZvaWQKLVNpbXBsZUxydVplcm9MU05zKFNscnVDdGwgY3RsLCBp bnQgc2xvdG5vKQotewotCVNscnVTaGFyZWQJc2hhcmVkID0gY3RsLT5zaGFyZWQ7Ci0KLQlpZiAo c2hhcmVkLT5sc25fZ3JvdXBzX3Blcl9wYWdlID4gMCkKLQkJTWVtU2V0KCZzaGFyZWQtPmdyb3Vw X2xzbltzbG90bm8gKiBzaGFyZWQtPmxzbl9ncm91cHNfcGVyX3BhZ2VdLCAwLAotCQkJICAgc2hh cmVkLT5sc25fZ3JvdXBzX3Blcl9wYWdlICogc2l6ZW9mKFhMb2dSZWNQdHIpKTsKLX0KLQotLyoK LSAqIFdhaXQgZm9yIGFueSBhY3RpdmUgSS9PIG9uIGEgcGFnZSBzbG90IHRvIGZpbmlzaC4gIChU aGlzIGRvZXMgbm90Ci0gKiBndWFyYW50ZWUgdGhhdCBuZXcgSS9PIGhhc24ndCBiZWVuIHN0YXJ0 ZWQgYmVmb3JlIHdlIHJldHVybiwgdGhvdWdoLgotICogSW4gZmFjdCB0aGUgc2xvdCBtaWdodCBu b3QgZXZlbiBjb250YWluIHRoZSBzYW1lIHBhZ2UgYW55bW9yZS4pCi0gKgotICogQ29udHJvbCBs b2NrIG11c3QgYmUgaGVsZCBhdCBlbnRyeSwgYW5kIHdpbGwgYmUgaGVsZCBhdCBleGl0LgotICov Ci1zdGF0aWMgdm9pZAotU2ltcGxlTHJ1V2FpdElPKFNscnVDdGwgY3RsLCBpbnQgc2xvdG5vKQot ewotCVNscnVTaGFyZWQJc2hhcmVkID0gY3RsLT5zaGFyZWQ7Ci0KLQkvKiBTZWUgbm90ZXMgYXQg dG9wIG9mIGZpbGUgKi8KLQlMV0xvY2tSZWxlYXNlKHNoYXJlZC0+Q29udHJvbExvY2spOwotCUxX TG9ja0FjcXVpcmUoJnNoYXJlZC0+YnVmZmVyX2xvY2tzW3Nsb3Rub10ubG9jaywgTFdfU0hBUkVE KTsKLQlMV0xvY2tSZWxlYXNlKCZzaGFyZWQtPmJ1ZmZlcl9sb2Nrc1tzbG90bm9dLmxvY2spOwot CUxXTG9ja0FjcXVpcmUoc2hhcmVkLT5Db250cm9sTG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCS8q Ci0JICogSWYgdGhlIHNsb3QgaXMgc3RpbGwgaW4gYW4gaW8taW4tcHJvZ3Jlc3Mgc3RhdGUsIHRo ZW4gZWl0aGVyIHNvbWVvbmUKLQkgKiBhbHJlYWR5IHN0YXJ0ZWQgYSBuZXcgSS9PIG9uIHRoZSBz bG90LCBvciBhIHByZXZpb3VzIEkvTyBmYWlsZWQgYW5kCi0JICogbmVnbGVjdGVkIHRvIHJlc2V0 IHRoZSBwYWdlIHN0YXRlLiAgVGhhdCBzaG91bGRuJ3QgaGFwcGVuLCByZWFsbHksIGJ1dAotCSAq IGl0IHNlZW1zIHdvcnRoIGEgZmV3IGV4dHJhIGN5Y2xlcyB0byBjaGVjayBhbmQgcmVjb3ZlciBm cm9tIGl0LiBXZSBjYW4KLQkgKiBjaGVhcGx5IHRlc3QgZm9yIGZhaWx1cmUgYnkgc2VlaW5nIGlm IHRoZSBidWZmZXIgbG9jayBpcyBzdGlsbCBoZWxkICh3ZQotCSAqIGFzc3VtZSB0aGF0IHRyYW5z YWN0aW9uIGFib3J0IHdvdWxkIHJlbGVhc2UgdGhlIGxvY2spLgotCSAqLwotCWlmIChzaGFyZWQt PnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdFX1JFQURfSU5fUFJPR1JFU1MgfHwKLQkJ c2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9XUklURV9JTl9QUk9HUkVT UykKLQl7Ci0JCWlmIChMV0xvY2tDb25kaXRpb25hbEFjcXVpcmUoJnNoYXJlZC0+YnVmZmVyX2xv Y2tzW3Nsb3Rub10ubG9jaywgTFdfU0hBUkVEKSkKLQkJewotCQkJLyogaW5kZWVkLCB0aGUgSS9P IG11c3QgaGF2ZSBmYWlsZWQgKi8KLQkJCWlmIChzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10g PT0gU0xSVV9QQUdFX1JFQURfSU5fUFJPR1JFU1MpCi0JCQkJc2hhcmVkLT5wYWdlX3N0YXR1c1tz bG90bm9dID0gU0xSVV9QQUdFX0VNUFRZOwotCQkJZWxzZQkJCQkvKiB3cml0ZV9pbl9wcm9ncmVz cyAqLwotCQkJewotCQkJCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9IFNMUlVfUEFHRV9W QUxJRDsKLQkJCQlzaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSA9IHRydWU7Ci0JCQl9Ci0JCQlM V0xvY2tSZWxlYXNlKCZzaGFyZWQtPmJ1ZmZlcl9sb2Nrc1tzbG90bm9dLmxvY2spOwotCQl9Ci0J fQotfQotCi0vKgotICogRmluZCBhIHBhZ2UgaW4gYSBzaGFyZWQgYnVmZmVyLCByZWFkaW5nIGl0 IGluIGlmIG5lY2Vzc2FyeS4KLSAqIFRoZSBwYWdlIG51bWJlciBtdXN0IGNvcnJlc3BvbmQgdG8g YW4gYWxyZWFkeS1pbml0aWFsaXplZCBwYWdlLgotICoKLSAqIElmIHdyaXRlX29rIGlzIHRydWUg dGhlbiBpdCBpcyBPSyB0byByZXR1cm4gYSBwYWdlIHRoYXQgaXMgaW4KLSAqIFdSSVRFX0lOX1BS T0dSRVNTIHN0YXRlOyBpdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gYmUgc3Vy ZQotICogdGhhdCBtb2RpZmljYXRpb24gb2YgdGhlIHBhZ2UgaXMgc2FmZS4gIElmIHdyaXRlX29r IGlzIGZhbHNlIHRoZW4gd2UKLSAqIHdpbGwgbm90IHJldHVybiB0aGUgcGFnZSB1bnRpbCBpdCBp cyBub3QgdW5kZXJnb2luZyBhY3RpdmUgSS9PLgotICoKLSAqIFRoZSBwYXNzZWQtaW4geGlkIGlz IHVzZWQgb25seSBmb3IgZXJyb3IgcmVwb3J0aW5nLCBhbmQgbWF5IGJlCi0gKiBJbnZhbGlkVHJh bnNhY3Rpb25JZCBpZiBubyBzcGVjaWZpYyB4aWQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBhY3Rp b24uCi0gKgotICogUmV0dXJuIHZhbHVlIGlzIHRoZSBzaGFyZWQtYnVmZmVyIHNsb3QgbnVtYmVy IG5vdyBob2xkaW5nIHRoZSBwYWdlLgotICogVGhlIGJ1ZmZlcidzIExSVSBhY2Nlc3MgaW5mbyBp cyB1cGRhdGVkLgotICoKLSAqIENvbnRyb2wgbG9jayBtdXN0IGJlIGhlbGQgYXQgZW50cnksIGFu ZCB3aWxsIGJlIGhlbGQgYXQgZXhpdC4KLSAqLwotaW50Ci1TaW1wbGVMcnVSZWFkUGFnZShTbHJ1 Q3RsIGN0bCwgaW50IHBhZ2VubywgYm9vbCB3cml0ZV9vaywKLQkJCQkgIFRyYW5zYWN0aW9uSWQg eGlkKQotewotCVNscnVTaGFyZWQJc2hhcmVkID0gY3RsLT5zaGFyZWQ7Ci0KLQkvKiBPdXRlciBs b29wIGhhbmRsZXMgcmVzdGFydCBpZiB3ZSBtdXN0IHdhaXQgZm9yIHNvbWVvbmUgZWxzZSdzIEkv TyAqLwotCWZvciAoOzspCi0JewotCQlpbnQJCQlzbG90bm87Ci0JCWJvb2wJCW9rOwotCi0JCS8q IFNlZSBpZiBwYWdlIGFscmVhZHkgaXMgaW4gbWVtb3J5OyBpZiBub3QsIHBpY2sgdmljdGltIHNs b3QgKi8KLQkJc2xvdG5vID0gU2xydVNlbGVjdExSVVBhZ2UoY3RsLCBwYWdlbm8pOwotCi0JCS8q IERpZCB3ZSBmaW5kIHRoZSBwYWdlIGluIG1lbW9yeT8gKi8KLQkJaWYgKHNoYXJlZC0+cGFnZV9u dW1iZXJbc2xvdG5vXSA9PSBwYWdlbm8gJiYKLQkJCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5v XSAhPSBTTFJVX1BBR0VfRU1QVFkpCi0JCXsKLQkJCS8qCi0JCQkgKiBJZiBwYWdlIGlzIHN0aWxs IGJlaW5nIHJlYWQgaW4sIHdlIG11c3Qgd2FpdCBmb3IgSS9PLiAgTGlrZXdpc2UKLQkJCSAqIGlm IHRoZSBwYWdlIGlzIGJlaW5nIHdyaXR0ZW4gYW5kIHRoZSBjYWxsZXIgc2FpZCB0aGF0J3Mgbm90 IE9LLgotCQkJICovCi0JCQlpZiAoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVf UEFHRV9SRUFEX0lOX1BST0dSRVNTIHx8Ci0JCQkJKHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5v XSA9PSBTTFJVX1BBR0VfV1JJVEVfSU5fUFJPR1JFU1MgJiYKLQkJCQkgIXdyaXRlX29rKSkKLQkJ CXsKLQkJCQlTaW1wbGVMcnVXYWl0SU8oY3RsLCBzbG90bm8pOwotCQkJCS8qIE5vdyB3ZSBtdXN0 IHJlY2hlY2sgc3RhdGUgZnJvbSB0aGUgdG9wICovCi0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQkv KiBPdGhlcndpc2UsIGl0J3MgcmVhZHkgdG8gdXNlICovCi0JCQlTbHJ1UmVjZW50bHlVc2VkKHNo YXJlZCwgc2xvdG5vKTsKLQotCQkJLyogdXBkYXRlIHRoZSBzdGF0cyBjb3VudGVyIG9mIHBhZ2Vz IGZvdW5kIGluIHRoZSBTTFJVICovCi0JCQlwZ3N0YXRfY291bnRfc2xydV9wYWdlX2hpdChzaGFy ZWQtPnNscnVfc3RhdHNfaWR4KTsKLQotCQkJcmV0dXJuIHNsb3RubzsKLQkJfQotCi0JCS8qIFdl IGZvdW5kIG5vIG1hdGNoOyBhc3NlcnQgd2Ugc2VsZWN0ZWQgYSBmcmVlYWJsZSBzbG90ICovCi0J CUFzc2VydChzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdFX0VNUFRZIHx8 Ci0JCQkgICAoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9WQUxJRCAm JgotCQkJCSFzaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSkpOwotCi0JCS8qIE1hcmsgdGhlIHNs b3QgcmVhZC1idXN5ICovCi0JCXNoYXJlZC0+cGFnZV9udW1iZXJbc2xvdG5vXSA9IHBhZ2VubzsK LQkJc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID0gU0xSVV9QQUdFX1JFQURfSU5fUFJPR1JF U1M7Ci0JCXNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0gZmFsc2U7Ci0KLQkJLyogQWNxdWly ZSBwZXItYnVmZmVyIGxvY2sgKGNhbm5vdCBkZWFkbG9jaywgc2VlIG5vdGVzIGF0IHRvcCkgKi8K LQkJTFdMb2NrQWNxdWlyZSgmc2hhcmVkLT5idWZmZXJfbG9ja3Nbc2xvdG5vXS5sb2NrLCBMV19F WENMVVNJVkUpOwotCi0JCS8qIFJlbGVhc2UgY29udHJvbCBsb2NrIHdoaWxlIGRvaW5nIEkvTyAq LwotCQlMV0xvY2tSZWxlYXNlKHNoYXJlZC0+Q29udHJvbExvY2spOwotCi0JCS8qIERvIHRoZSBy ZWFkICovCi0JCW9rID0gU2xydVBoeXNpY2FsUmVhZFBhZ2UoY3RsLCBwYWdlbm8sIHNsb3Rubyk7 Ci0KLQkJLyogU2V0IHRoZSBMU05zIGZvciB0aGlzIG5ld2x5IHJlYWQtaW4gcGFnZSB0byB6ZXJv ICovCi0JCVNpbXBsZUxydVplcm9MU05zKGN0bCwgc2xvdG5vKTsKLQotCQkvKiBSZS1hY3F1aXJl IGNvbnRyb2wgbG9jayBhbmQgdXBkYXRlIHBhZ2Ugc3RhdGUgKi8KLQkJTFdMb2NrQWNxdWlyZShz aGFyZWQtPkNvbnRyb2xMb2NrLCBMV19FWENMVVNJVkUpOwotCi0JCUFzc2VydChzaGFyZWQtPnBh Z2VfbnVtYmVyW3Nsb3Rub10gPT0gcGFnZW5vICYmCi0JCQkgICBzaGFyZWQtPnBhZ2Vfc3RhdHVz W3Nsb3Rub10gPT0gU0xSVV9QQUdFX1JFQURfSU5fUFJPR1JFU1MgJiYKLQkJCSAgICFzaGFyZWQt PnBhZ2VfZGlydHlbc2xvdG5vXSk7Ci0KLQkJc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID0g b2sgPyBTTFJVX1BBR0VfVkFMSUQgOiBTTFJVX1BBR0VfRU1QVFk7Ci0KLQkJTFdMb2NrUmVsZWFz ZSgmc2hhcmVkLT5idWZmZXJfbG9ja3Nbc2xvdG5vXS5sb2NrKTsKLQotCQkvKiBOb3cgaXQncyBv a2F5IHRvIGVyZXBvcnQgaWYgd2UgZmFpbGVkICovCi0JCWlmICghb2spCi0JCQlTbHJ1UmVwb3J0 SU9FcnJvcihjdGwsIHBhZ2VubywgeGlkKTsKLQotCQlTbHJ1UmVjZW50bHlVc2VkKHNoYXJlZCwg c2xvdG5vKTsKLQotCQkvKiB1cGRhdGUgdGhlIHN0YXRzIGNvdW50ZXIgb2YgcGFnZXMgbm90IGZv dW5kIGluIFNMUlUgKi8KLQkJcGdzdGF0X2NvdW50X3NscnVfcGFnZV9yZWFkKHNoYXJlZC0+c2xy dV9zdGF0c19pZHgpOwotCi0JCXJldHVybiBzbG90bm87Ci0JfQotfQotCi0vKgotICogRmluZCBh IHBhZ2UgaW4gYSBzaGFyZWQgYnVmZmVyLCByZWFkaW5nIGl0IGluIGlmIG5lY2Vzc2FyeS4KLSAq IFRoZSBwYWdlIG51bWJlciBtdXN0IGNvcnJlc3BvbmQgdG8gYW4gYWxyZWFkeS1pbml0aWFsaXpl ZCBwYWdlLgotICogVGhlIGNhbGxlciBtdXN0IGludGVuZCBvbmx5IHJlYWQtb25seSBhY2Nlc3Mg dG8gdGhlIHBhZ2UuCi0gKgotICogVGhlIHBhc3NlZC1pbiB4aWQgaXMgdXNlZCBvbmx5IGZvciBl cnJvciByZXBvcnRpbmcsIGFuZCBtYXkgYmUKLSAqIEludmFsaWRUcmFuc2FjdGlvbklkIGlmIG5v IHNwZWNpZmljIHhpZCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGFjdGlvbi4KLSAqCi0gKiBSZXR1 cm4gdmFsdWUgaXMgdGhlIHNoYXJlZC1idWZmZXIgc2xvdCBudW1iZXIgbm93IGhvbGRpbmcgdGhl IHBhZ2UuCi0gKiBUaGUgYnVmZmVyJ3MgTFJVIGFjY2VzcyBpbmZvIGlzIHVwZGF0ZWQuCi0gKgot ICogQ29udHJvbCBsb2NrIG11c3QgTk9UIGJlIGhlbGQgYXQgZW50cnksIGJ1dCB3aWxsIGJlIGhl bGQgYXQgZXhpdC4KLSAqIEl0IGlzIHVuc3BlY2lmaWVkIHdoZXRoZXIgdGhlIGxvY2sgd2lsbCBi ZSBzaGFyZWQgb3IgZXhjbHVzaXZlLgotICovCi1pbnQKLVNpbXBsZUxydVJlYWRQYWdlX1JlYWRP bmx5KFNscnVDdGwgY3RsLCBpbnQgcGFnZW5vLCBUcmFuc2FjdGlvbklkIHhpZCkKLXsKLQlTbHJ1 U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwotCWludAkJCXNsb3RubzsKLQotCS8qIFRyeSB0 byBmaW5kIHRoZSBwYWdlIHdoaWxlIGhvbGRpbmcgb25seSBzaGFyZWQgbG9jayAqLwotCUxXTG9j a0FjcXVpcmUoc2hhcmVkLT5Db250cm9sTG9jaywgTFdfU0hBUkVEKTsKLQotCS8qIFNlZSBpZiBw YWdlIGlzIGFscmVhZHkgaW4gYSBidWZmZXIgKi8KLQlmb3IgKHNsb3RubyA9IDA7IHNsb3RubyA8 IHNoYXJlZC0+bnVtX3Nsb3RzOyBzbG90bm8rKykKLQl7Ci0JCWlmIChzaGFyZWQtPnBhZ2VfbnVt YmVyW3Nsb3Rub10gPT0gcGFnZW5vICYmCi0JCQlzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10g IT0gU0xSVV9QQUdFX0VNUFRZICYmCi0JCQlzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gIT0g U0xSVV9QQUdFX1JFQURfSU5fUFJPR1JFU1MpCi0JCXsKLQkJCS8qIFNlZSBjb21tZW50cyBmb3Ig U2xydVJlY2VudGx5VXNlZCBtYWNybyAqLwotCQkJU2xydVJlY2VudGx5VXNlZChzaGFyZWQsIHNs b3Rubyk7Ci0KLQkJCS8qIHVwZGF0ZSB0aGUgc3RhdHMgY291bnRlciBvZiBwYWdlcyBmb3VuZCBp biB0aGUgU0xSVSAqLwotCQkJcGdzdGF0X2NvdW50X3NscnVfcGFnZV9oaXQoc2hhcmVkLT5zbHJ1 X3N0YXRzX2lkeCk7Ci0KLQkJCXJldHVybiBzbG90bm87Ci0JCX0KLQl9Ci0KLQkvKiBObyBsdWNr LCBzbyBzd2l0Y2ggdG8gbm9ybWFsIGV4Y2x1c2l2ZSBsb2NrIGFuZCBkbyByZWd1bGFyIHJlYWQg Ki8KLQlMV0xvY2tSZWxlYXNlKHNoYXJlZC0+Q29udHJvbExvY2spOwotCUxXTG9ja0FjcXVpcmUo c2hhcmVkLT5Db250cm9sTG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCXJldHVybiBTaW1wbGVMcnVS ZWFkUGFnZShjdGwsIHBhZ2VubywgdHJ1ZSwgeGlkKTsKLX0KLQotLyoKLSAqIFdyaXRlIGEgcGFn ZSBmcm9tIGEgc2hhcmVkIGJ1ZmZlciwgaWYgbmVjZXNzYXJ5LgotICogRG9lcyBub3RoaW5nIGlm IHRoZSBzcGVjaWZpZWQgc2xvdCBpcyBub3QgZGlydHkuCi0gKgotICogTk9URTogb25seSBvbmUg d3JpdGUgYXR0ZW1wdCBpcyBtYWRlIGhlcmUuICBIZW5jZSwgaXQgaXMgcG9zc2libGUgdGhhdAot ICogdGhlIHBhZ2UgaXMgc3RpbGwgZGlydHkgYXQgZXhpdCAoaWYgc29tZW9uZSBlbHNlIHJlLWRp cnRpZWQgaXQgZHVyaW5nCi0gKiB0aGUgd3JpdGUpLiAgSG93ZXZlciwgd2UgKmRvKiBhdHRlbXB0 IGEgZnJlc2ggd3JpdGUgZXZlbiBpZiB0aGUgcGFnZQotICogaXMgYWxyZWFkeSBiZWluZyB3cml0 dGVuOyB0aGlzIGlzIGZvciBjaGVja3BvaW50cy4KLSAqCi0gKiBDb250cm9sIGxvY2sgbXVzdCBi ZSBoZWxkIGF0IGVudHJ5LCBhbmQgd2lsbCBiZSBoZWxkIGF0IGV4aXQuCi0gKi8KLXN0YXRpYyB2 b2lkCi1TbHJ1SW50ZXJuYWxXcml0ZVBhZ2UoU2xydUN0bCBjdGwsIGludCBzbG90bm8sIFNscnVX cml0ZUFsbCBmZGF0YSkKLXsKLQlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwotCWlu dAkJCXBhZ2VubyA9IHNoYXJlZC0+cGFnZV9udW1iZXJbc2xvdG5vXTsKLQlib29sCQlvazsKLQot CS8qIElmIGEgd3JpdGUgaXMgaW4gcHJvZ3Jlc3MsIHdhaXQgZm9yIGl0IHRvIGZpbmlzaCAqLwot CXdoaWxlIChzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdFX1dSSVRFX0lO X1BST0dSRVNTICYmCi0JCSAgIHNoYXJlZC0+cGFnZV9udW1iZXJbc2xvdG5vXSA9PSBwYWdlbm8p Ci0JewotCQlTaW1wbGVMcnVXYWl0SU8oY3RsLCBzbG90bm8pOwotCX0KLQotCS8qCi0JICogRG8g bm90aGluZyBpZiBwYWdlIGlzIG5vdCBkaXJ0eSwgb3IgaWYgYnVmZmVyIG5vIGxvbmdlciBjb250 YWlucyB0aGUKLQkgKiBzYW1lIHBhZ2Ugd2Ugd2VyZSBjYWxsZWQgZm9yLgotCSAqLwotCWlmICgh c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gfHwKLQkJc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90 bm9dICE9IFNMUlVfUEFHRV9WQUxJRCB8fAotCQlzaGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub10g IT0gcGFnZW5vKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIE1hcmsgdGhlIHNsb3Qgd3JpdGUtYnVz eSwgYW5kIGNsZWFyIHRoZSBkaXJ0eWJpdC4gIEFmdGVyIHRoaXMgcG9pbnQsIGEKLQkgKiB0cmFu c2FjdGlvbiBzdGF0dXMgdXBkYXRlIG9uIHRoaXMgcGFnZSB3aWxsIG1hcmsgaXQgZGlydHkgYWdh aW4uCi0JICovCi0Jc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID0gU0xSVV9QQUdFX1dSSVRF X0lOX1BST0dSRVNTOwotCXNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0gZmFsc2U7Ci0KLQkv KiBBY3F1aXJlIHBlci1idWZmZXIgbG9jayAoY2Fubm90IGRlYWRsb2NrLCBzZWUgbm90ZXMgYXQg dG9wKSAqLwotCUxXTG9ja0FjcXVpcmUoJnNoYXJlZC0+YnVmZmVyX2xvY2tzW3Nsb3Rub10ubG9j aywgTFdfRVhDTFVTSVZFKTsKLQotCS8qIFJlbGVhc2UgY29udHJvbCBsb2NrIHdoaWxlIGRvaW5n IEkvTyAqLwotCUxXTG9ja1JlbGVhc2Uoc2hhcmVkLT5Db250cm9sTG9jayk7Ci0KLQkvKiBEbyB0 aGUgd3JpdGUgKi8KLQlvayA9IFNscnVQaHlzaWNhbFdyaXRlUGFnZShjdGwsIHBhZ2Vubywgc2xv dG5vLCBmZGF0YSk7Ci0KLQkvKiBJZiB3ZSBmYWlsZWQsIGFuZCB3ZSdyZSBpbiBhIGZsdXNoLCBi ZXR0ZXIgY2xvc2UgdGhlIGZpbGVzICovCi0JaWYgKCFvayAmJiBmZGF0YSkKLQl7Ci0JCWludAkJ CWk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGZkYXRhLT5udW1fZmlsZXM7IGkrKykKLQkJCUNsb3Nl VHJhbnNpZW50RmlsZShmZGF0YS0+ZmRbaV0pOwotCX0KLQotCS8qIFJlLWFjcXVpcmUgY29udHJv bCBsb2NrIGFuZCB1cGRhdGUgcGFnZSBzdGF0ZSAqLwotCUxXTG9ja0FjcXVpcmUoc2hhcmVkLT5D b250cm9sTG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCUFzc2VydChzaGFyZWQtPnBhZ2VfbnVtYmVy W3Nsb3Rub10gPT0gcGFnZW5vICYmCi0JCSAgIHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9 PSBTTFJVX1BBR0VfV1JJVEVfSU5fUFJPR1JFU1MpOwotCi0JLyogSWYgd2UgZmFpbGVkIHRvIHdy aXRlLCBtYXJrIHRoZSBwYWdlIGRpcnR5IGFnYWluICovCi0JaWYgKCFvaykKLQkJc2hhcmVkLT5w YWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVlOwotCi0Jc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9d ID0gU0xSVV9QQUdFX1ZBTElEOwotCi0JTFdMb2NrUmVsZWFzZSgmc2hhcmVkLT5idWZmZXJfbG9j a3Nbc2xvdG5vXS5sb2NrKTsKLQotCS8qIE5vdyBpdCdzIG9rYXkgdG8gZXJlcG9ydCBpZiB3ZSBm YWlsZWQgKi8KLQlpZiAoIW9rKQotCQlTbHJ1UmVwb3J0SU9FcnJvcihjdGwsIHBhZ2VubywgSW52 YWxpZFRyYW5zYWN0aW9uSWQpOwotCi0JLyogSWYgcGFydCBvZiBhIGNoZWNrcG9pbnQsIGNvdW50 IHRoaXMgYXMgYSBidWZmZXIgd3JpdHRlbi4gKi8KLQlpZiAoZmRhdGEpCi0JCUNoZWNrcG9pbnRT dGF0cy5ja3B0X2J1ZnNfd3JpdHRlbisrOwotfQotCi0vKgotICogV3JhcHBlciBvZiBTbHJ1SW50 ZXJuYWxXcml0ZVBhZ2UsIGZvciBleHRlcm5hbCBjYWxsZXJzLgotICogZmRhdGEgaXMgYWx3YXlz IHBhc3NlZCBhIE5VTEwgaGVyZS4KLSAqLwotdm9pZAotU2ltcGxlTHJ1V3JpdGVQYWdlKFNscnVD dGwgY3RsLCBpbnQgc2xvdG5vKQotewotCVNscnVJbnRlcm5hbFdyaXRlUGFnZShjdGwsIHNsb3Ru bywgTlVMTCk7Ci19CitzdGF0aWMgdm9pZCBTbHJ1SW50ZXJuYWxEZWxldGVTZWdtZW50KGludCBz bHJ1X2lkLCBpbnQgc2Vnbm8pOwogCiAvKgogICogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIHBh Z2UgZXhpc3RzIG9uIGRpc2suCkBAIC02MjQsNTkyICs2NCwyNCBAQCBTaW1wbGVMcnVXcml0ZVBh Z2UoU2xydUN0bCBjdGwsIGludCBzbG90bm8pCiAgKiBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiB0 aGUgZ2l2ZW4gcGFnZS4KICAqLwogYm9vbAotU2ltcGxlTHJ1RG9lc1BoeXNpY2FsUGFnZUV4aXN0 KFNscnVDdGwgY3RsLCBpbnQgcGFnZW5vKQorU2ltcGxlTHJ1RG9lc1BoeXNpY2FsUGFnZUV4aXN0 KGludCBzbHJ1X2lkLCBpbnQgcGFnZW5vKQogewotCWludAkJCXNlZ25vID0gcGFnZW5vIC8gU0xS VV9QQUdFU19QRVJfU0VHTUVOVDsKLQlpbnQJCQlycGFnZW5vID0gcGFnZW5vICUgU0xSVV9QQUdF U19QRVJfU0VHTUVOVDsKLQlpbnQJCQlvZmZzZXQgPSBycGFnZW5vICogQkxDS1NaOwotCWNoYXIJ CXBhdGhbTUFYUEdQQVRIXTsKLQlpbnQJCQlmZDsKLQlib29sCQlyZXN1bHQ7Ci0Jb2ZmX3QJCWVu ZHBvczsKLQotCS8qIHVwZGF0ZSB0aGUgc3RhdHMgY291bnRlciBvZiBjaGVja2VkIHBhZ2VzICov Ci0JcGdzdGF0X2NvdW50X3NscnVfcGFnZV9leGlzdHMoY3RsLT5zaGFyZWQtPnNscnVfc3RhdHNf aWR4KTsKLQotCVNscnVGaWxlTmFtZShjdGwsIHBhdGgsIHNlZ25vKTsKLQotCWZkID0gT3BlblRy YW5zaWVudEZpbGUocGF0aCwgT19SRE9OTFkgfCBQR19CSU5BUlkpOwotCWlmIChmZCA8IDApCi0J ewotCQkvKiBleHBlY3RlZDogZmlsZSBkb2Vzbid0IGV4aXN0ICovCi0JCWlmIChlcnJubyA9PSBF Tk9FTlQpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJLyogcmVwb3J0IGVycm9yIG5vcm1hbGx5ICov Ci0JCXNscnVfZXJyY2F1c2UgPSBTTFJVX09QRU5fRkFJTEVEOwotCQlzbHJ1X2Vycm5vID0gZXJy bm87Ci0JCVNscnVSZXBvcnRJT0Vycm9yKGN0bCwgcGFnZW5vLCAwKTsKLQl9Ci0KLQlpZiAoKGVu ZHBvcyA9IGxzZWVrKGZkLCAwLCBTRUVLX0VORCkpIDwgMCkKLQl7Ci0JCXNscnVfZXJyY2F1c2Ug PSBTTFJVX1NFRUtfRkFJTEVEOwotCQlzbHJ1X2Vycm5vID0gZXJybm87Ci0JCVNscnVSZXBvcnRJ T0Vycm9yKGN0bCwgcGFnZW5vLCAwKTsKLQl9Ci0KLQlyZXN1bHQgPSBlbmRwb3MgPj0gKG9mZl90 KSAob2Zmc2V0ICsgQkxDS1NaKTsKLQotCWlmIChDbG9zZVRyYW5zaWVudEZpbGUoZmQpICE9IDAp Ci0JewotCQlzbHJ1X2VycmNhdXNlID0gU0xSVV9DTE9TRV9GQUlMRUQ7Ci0JCXNscnVfZXJybm8g PSBlcnJubzsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLS8q Ci0gKiBQaHlzaWNhbCByZWFkIG9mIGEgKHByZXZpb3VzbHkgZXhpc3RpbmcpIHBhZ2UgaW50byBh IGJ1ZmZlciBzbG90Ci0gKgotICogT24gZmFpbHVyZSwgd2UgY2Fubm90IGp1c3QgZXJlcG9ydChF UlJPUikgc2luY2UgY2FsbGVyIGhhcyBwdXQgc3RhdGUgaW4KLSAqIHNoYXJlZCBtZW1vcnkgdGhh dCBtdXN0IGJlIHVuZG9uZS4gIFNvLCB3ZSByZXR1cm4gZmFsc2UgYW5kIHNhdmUgZW5vdWdoCi0g KiBpbmZvIGluIHN0YXRpYyB2YXJpYWJsZXMgdG8gbGV0IFNscnVSZXBvcnRJT0Vycm9yIG1ha2Ug dGhlIHJlcG9ydC4KLSAqCi0gKiBGb3Igbm93LCBhc3N1bWUgaXQncyBub3Qgd29ydGgga2VlcGlu ZyBhIGZpbGUgcG9pbnRlciBvcGVuIGFjcm9zcwotICogcmVhZC93cml0ZSBvcGVyYXRpb25zLiAg V2UgY291bGQgY2FjaGUgb25lIHZpcnR1YWwgZmlsZSBwb2ludGVyIC4uLgotICovCi1zdGF0aWMg Ym9vbAotU2xydVBoeXNpY2FsUmVhZFBhZ2UoU2xydUN0bCBjdGwsIGludCBwYWdlbm8sIGludCBz bG90bm8pCi17Ci0JU2xydVNoYXJlZAlzaGFyZWQgPSBjdGwtPnNoYXJlZDsKLQlpbnQJCQlzZWdu byA9IHBhZ2VubyAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7Ci0JaW50CQkJcnBhZ2VubyA9IHBh Z2VubyAlIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7Ci0Jb2ZmX3QJCW9mZnNldCA9IHJwYWdlbm8g KiBCTENLU1o7Ci0JY2hhcgkJcGF0aFtNQVhQR1BBVEhdOwotCWludAkJCWZkOwotCi0JU2xydUZp bGVOYW1lKGN0bCwgcGF0aCwgc2Vnbm8pOwotCi0JLyoKLQkgKiBJbiBhIGNyYXNoLWFuZC1yZXN0 YXJ0IHNpdHVhdGlvbiwgaXQncyBwb3NzaWJsZSBmb3IgdXMgdG8gcmVjZWl2ZQotCSAqIGNvbW1h bmRzIHRvIHNldCB0aGUgY29tbWl0IHN0YXR1cyBvZiB0cmFuc2FjdGlvbnMgd2hvc2UgYml0cyBh cmUgaW4KLQkgKiBhbHJlYWR5LXRydW5jYXRlZCBzZWdtZW50cyBvZiB0aGUgY29tbWl0IGxvZyAo c2VlIG5vdGVzIGluCi0JICogU2xydVBoeXNpY2FsV3JpdGVQYWdlKS4gIEhlbmNlLCBpZiB3ZSBh cmUgSW5SZWNvdmVyeSwgYWxsb3cgdGhlIGNhc2UKLQkgKiB3aGVyZSB0aGUgZmlsZSBkb2Vzbid0 IGV4aXN0LCBhbmQgcmV0dXJuIHplcm9lcyBpbnN0ZWFkLgotCSAqLwotCWZkID0gT3BlblRyYW5z aWVudEZpbGUocGF0aCwgT19SRE9OTFkgfCBQR19CSU5BUlkpOwotCWlmIChmZCA8IDApCi0Jewot CQlpZiAoZXJybm8gIT0gRU5PRU5UIHx8ICFJblJlY292ZXJ5KQotCQl7Ci0JCQlzbHJ1X2VycmNh dXNlID0gU0xSVV9PUEVOX0ZBSUxFRDsKLQkJCXNscnVfZXJybm8gPSBlcnJubzsKLQkJCXJldHVy biBmYWxzZTsKLQkJfQotCi0JCWVyZXBvcnQoTE9HLAotCQkJCShlcnJtc2coImZpbGUgXCIlc1wi IGRvZXNuJ3QgZXhpc3QsIHJlYWRpbmcgYXMgemVyb2VzIiwKLQkJCQkJCXBhdGgpKSk7Ci0JCU1l bVNldChzaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10sIDAsIEJMQ0tTWik7Ci0JCXJldHVybiB0 cnVlOwotCX0KLQotCWVycm5vID0gMDsKLQlwZ3N0YXRfcmVwb3J0X3dhaXRfc3RhcnQoV0FJVF9F VkVOVF9TTFJVX1JFQUQpOwotCWlmIChwZ19wcmVhZChmZCwgc2hhcmVkLT5wYWdlX2J1ZmZlcltz bG90bm9dLCBCTENLU1osIG9mZnNldCkgIT0gQkxDS1NaKQotCXsKLQkJcGdzdGF0X3JlcG9ydF93 YWl0X2VuZCgpOwotCQlzbHJ1X2VycmNhdXNlID0gU0xSVV9SRUFEX0ZBSUxFRDsKLQkJc2xydV9l cnJubyA9IGVycm5vOwotCQlDbG9zZVRyYW5zaWVudEZpbGUoZmQpOwotCQlyZXR1cm4gZmFsc2U7 Ci0JfQotCXBnc3RhdF9yZXBvcnRfd2FpdF9lbmQoKTsKLQotCWlmIChDbG9zZVRyYW5zaWVudEZp bGUoZmQpICE9IDApCi0JewotCQlzbHJ1X2VycmNhdXNlID0gU0xSVV9DTE9TRV9GQUlMRUQ7Ci0J CXNscnVfZXJybm8gPSBlcnJubzsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXJldHVybiB0cnVl OwotfQotCi0vKgotICogUGh5c2ljYWwgd3JpdGUgb2YgYSBwYWdlIGZyb20gYSBidWZmZXIgc2xv dAotICoKLSAqIE9uIGZhaWx1cmUsIHdlIGNhbm5vdCBqdXN0IGVyZXBvcnQoRVJST1IpIHNpbmNl IGNhbGxlciBoYXMgcHV0IHN0YXRlIGluCi0gKiBzaGFyZWQgbWVtb3J5IHRoYXQgbXVzdCBiZSB1 bmRvbmUuICBTbywgd2UgcmV0dXJuIGZhbHNlIGFuZCBzYXZlIGVub3VnaAotICogaW5mbyBpbiBz dGF0aWMgdmFyaWFibGVzIHRvIGxldCBTbHJ1UmVwb3J0SU9FcnJvciBtYWtlIHRoZSByZXBvcnQu Ci0gKgotICogRm9yIG5vdywgYXNzdW1lIGl0J3Mgbm90IHdvcnRoIGtlZXBpbmcgYSBmaWxlIHBv aW50ZXIgb3BlbiBhY3Jvc3MKLSAqIGluZGVwZW5kZW50IHJlYWQvd3JpdGUgb3BlcmF0aW9ucy4g IFdlIGRvIGJhdGNoIG9wZXJhdGlvbnMgZHVyaW5nCi0gKiBTaW1wbGVMcnVXcml0ZUFsbCwgdGhv dWdoLgotICoKLSAqIGZkYXRhIGlzIE5VTEwgZm9yIGEgc3RhbmRhbG9uZSB3cml0ZSwgcG9pbnRl ciB0byBvcGVuLWZpbGUgaW5mbyBkdXJpbmcKLSAqIFNpbXBsZUxydVdyaXRlQWxsLgotICovCi1z dGF0aWMgYm9vbAotU2xydVBoeXNpY2FsV3JpdGVQYWdlKFNscnVDdGwgY3RsLCBpbnQgcGFnZW5v LCBpbnQgc2xvdG5vLCBTbHJ1V3JpdGVBbGwgZmRhdGEpCi17Ci0JU2xydVNoYXJlZAlzaGFyZWQg PSBjdGwtPnNoYXJlZDsKIAlpbnQJCQlzZWdubyA9IHBhZ2VubyAvIFNMUlVfUEFHRVNfUEVSX1NF R01FTlQ7CiAJaW50CQkJcnBhZ2VubyA9IHBhZ2VubyAlIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7 CiAJb2ZmX3QJCW9mZnNldCA9IHJwYWdlbm8gKiBCTENLU1o7Ci0JY2hhcgkJcGF0aFtNQVhQR1BB VEhdOwotCWludAkJCWZkID0gLTE7Ci0KLQkvKiB1cGRhdGUgdGhlIHN0YXRzIGNvdW50ZXIgb2Yg d3JpdHRlbiBwYWdlcyAqLwotCXBnc3RhdF9jb3VudF9zbHJ1X3BhZ2Vfd3JpdHRlbihzaGFyZWQt PnNscnVfc3RhdHNfaWR4KTsKLQotCS8qCi0JICogSG9ub3IgdGhlIHdyaXRlLVdBTC1iZWZvcmUt ZGF0YSBydWxlLCBpZiBhcHByb3ByaWF0ZSwgc28gdGhhdCB3ZSBkbyBub3QKLQkgKiB3cml0ZSBv dXQgZGF0YSBiZWZvcmUgYXNzb2NpYXRlZCBXQUwgcmVjb3Jkcy4gIFRoaXMgaXMgdGhlIHNhbWUg YWN0aW9uCi0JICogcGVyZm9ybWVkIGR1cmluZyBGbHVzaEJ1ZmZlcigpIGluIHRoZSBtYWluIGJ1 ZmZlciBtYW5hZ2VyLgotCSAqLwotCWlmIChzaGFyZWQtPmdyb3VwX2xzbiAhPSBOVUxMKQotCXsK LQkJLyoKLQkJICogV2UgbXVzdCBkZXRlcm1pbmUgdGhlIGxhcmdlc3QgYXN5bmMtY29tbWl0IExT TiBmb3IgdGhlIHBhZ2UuIFRoaXMKLQkJICogaXMgYSBiaXQgdGVkaW91cywgYnV0IHNpbmNlIHRo aXMgZW50aXJlIGZ1bmN0aW9uIGlzIGEgc2xvdyBwYXRoCi0JCSAqIGFueXdheSwgaXQgc2VlbXMg YmV0dGVyIHRvIGRvIHRoaXMgaGVyZSB0aGFuIHRvIG1haW50YWluIGEgcGVyLXBhZ2UKLQkJICog TFNOIHZhcmlhYmxlICh3aGljaCdkIG5lZWQgYW4gZXh0cmEgY29tcGFyaXNvbiBpbiB0aGUKLQkJ ICogdHJhbnNhY3Rpb24tY29tbWl0IHBhdGgpLgotCQkgKi8KLQkJWExvZ1JlY1B0cgltYXhfbHNu OwotCQlpbnQJCQlsc25pbmRleCwKLQkJCQkJbHNub2ZmOwotCi0JCWxzbmluZGV4ID0gc2xvdG5v ICogc2hhcmVkLT5sc25fZ3JvdXBzX3Blcl9wYWdlOwotCQltYXhfbHNuID0gc2hhcmVkLT5ncm91 cF9sc25bbHNuaW5kZXgrK107Ci0JCWZvciAobHNub2ZmID0gMTsgbHNub2ZmIDwgc2hhcmVkLT5s c25fZ3JvdXBzX3Blcl9wYWdlOyBsc25vZmYrKykKLQkJewotCQkJWExvZ1JlY1B0cgl0aGlzX2xz biA9IHNoYXJlZC0+Z3JvdXBfbHNuW2xzbmluZGV4KytdOwotCi0JCQlpZiAobWF4X2xzbiA8IHRo aXNfbHNuKQotCQkJCW1heF9sc24gPSB0aGlzX2xzbjsKLQkJfQotCi0JCWlmICghWExvZ1JlY1B0 cklzSW52YWxpZChtYXhfbHNuKSkKLQkJewotCQkJLyoKLQkJCSAqIEFzIG5vdGVkIGFib3ZlLCBl bG9nKEVSUk9SKSBpcyBub3QgYWNjZXB0YWJsZSBoZXJlLCBzbyBpZgotCQkJICogWExvZ0ZsdXNo IHdlcmUgdG8gZmFpbCwgd2UgbXVzdCBQQU5JQy4gIFRoaXMgaXNuJ3QgbXVjaCBvZiBhCi0JCQkg KiByZXN0cmljdGlvbiBiZWNhdXNlIFhMb2dGbHVzaCBpcyBqdXN0IGFib3V0IGFsbCBjcml0aWNh bAotCQkJICogc2VjdGlvbiBhbnl3YXksIGJ1dCBsZXQncyBtYWtlIHN1cmUuCi0JCQkgKi8KLQkJ CVNUQVJUX0NSSVRfU0VDVElPTigpOwotCQkJWExvZ0ZsdXNoKG1heF9sc24pOwotCQkJRU5EX0NS SVRfU0VDVElPTigpOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBEdXJpbmcgYSBXcml0ZUFsbCwgd2Ug bWF5IGFscmVhZHkgaGF2ZSB0aGUgZGVzaXJlZCBmaWxlIG9wZW4uCi0JICovCi0JaWYgKGZkYXRh KQotCXsKLQkJaW50CQkJaTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgZmRhdGEtPm51bV9maWxlczsg aSsrKQotCQl7Ci0JCQlpZiAoZmRhdGEtPnNlZ25vW2ldID09IHNlZ25vKQotCQkJewotCQkJCWZk ID0gZmRhdGEtPmZkW2ldOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKGZkIDwg MCkKLQl7Ci0JCS8qCi0JCSAqIElmIHRoZSBmaWxlIGRvZXNuJ3QgYWxyZWFkeSBleGlzdCwgd2Ug c2hvdWxkIGNyZWF0ZSBpdC4gIEl0IGlzCi0JCSAqIHBvc3NpYmxlIGZvciB0aGlzIHRvIG5lZWQg dG8gaGFwcGVuIHdoZW4gd3JpdGluZyBhIHBhZ2UgdGhhdCdzIG5vdAotCQkgKiBmaXJzdCBpbiBp dHMgc2VnbWVudDsgd2UgYXNzdW1lIHRoZSBPUyBjYW4gY29wZSB3aXRoIHRoYXQuIChOb3RlOgot CQkgKiBpdCBtaWdodCBzZWVtIHRoYXQgaXQnZCBiZSBva2F5IHRvIGNyZWF0ZSBmaWxlcyBvbmx5 IHdoZW4KLQkJICogU2ltcGxlTHJ1WmVyb1BhZ2UgaXMgY2FsbGVkIGZvciB0aGUgZmlyc3QgcGFn ZSBvZiBhIHNlZ21lbnQuCi0JCSAqIEhvd2V2ZXIsIGlmIGFmdGVyIGEgY3Jhc2ggYW5kIHJlc3Rh cnQgdGhlIFJFRE8gbG9naWMgZWxlY3RzIHRvCi0JCSAqIHJlcGxheSB0aGUgbG9nIGZyb20gYSBj aGVja3BvaW50IGJlZm9yZSB0aGUgbGF0ZXN0IG9uZSwgdGhlbiBpdCdzCi0JCSAqIHBvc3NpYmxl IHRoYXQgd2Ugd2lsbCBnZXQgY29tbWFuZHMgdG8gc2V0IHRyYW5zYWN0aW9uIHN0YXR1cyBvZgot CQkgKiB0cmFuc2FjdGlvbnMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiB0cnVuY2F0ZWQgZnJvbSB0 aGUgY29tbWl0IGxvZy4KLQkJICogRWFzaWVzdCB3YXkgdG8gZGVhbCB3aXRoIHRoYXQgaXMgdG8g YWNjZXB0IHJlZmVyZW5jZXMgdG8KLQkJICogbm9uZXhpc3RlbnQgZmlsZXMgaGVyZSBhbmQgaW4g U2xydVBoeXNpY2FsUmVhZFBhZ2UuKQotCQkgKgotCQkgKiBOb3RlOiBpdCBpcyBwb3NzaWJsZSBm b3IgbW9yZSB0aGFuIG9uZSBiYWNrZW5kIHRvIGJlIGV4ZWN1dGluZyB0aGlzCi0JCSAqIGNvZGUg c2ltdWx0YW5lb3VzbHkgZm9yIGRpZmZlcmVudCBwYWdlcyBvZiB0aGUgc2FtZSBmaWxlLiBIZW5j ZSwKLQkJICogZG9uJ3QgdXNlIE9fRVhDTCBvciBPX1RSVU5DIG9yIGFueXRoaW5nIGxpa2UgdGhh dC4KLQkJICovCi0JCVNscnVGaWxlTmFtZShjdGwsIHBhdGgsIHNlZ25vKTsKLQkJZmQgPSBPcGVu VHJhbnNpZW50RmlsZShwYXRoLCBPX1JEV1IgfCBPX0NSRUFUIHwgUEdfQklOQVJZKTsKLQkJaWYg KGZkIDwgMCkKLQkJewotCQkJc2xydV9lcnJjYXVzZSA9IFNMUlVfT1BFTl9GQUlMRUQ7Ci0JCQlz bHJ1X2Vycm5vID0gZXJybm87Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQlpZiAoZmRhdGEp Ci0JCXsKLQkJCWlmIChmZGF0YS0+bnVtX2ZpbGVzIDwgTUFYX1dSSVRFQUxMX0JVRkZFUlMpCi0J CQl7Ci0JCQkJZmRhdGEtPmZkW2ZkYXRhLT5udW1fZmlsZXNdID0gZmQ7Ci0JCQkJZmRhdGEtPnNl Z25vW2ZkYXRhLT5udW1fZmlsZXNdID0gc2Vnbm87Ci0JCQkJZmRhdGEtPm51bV9maWxlcysrOwot CQkJfQotCQkJZWxzZQotCQkJewotCQkJCS8qCi0JCQkJICogSW4gdGhlIHVubGlrZWx5IGV2ZW50 IHRoYXQgd2UgZXhjZWVkIE1BWF9GTFVTSF9CVUZGRVJTLAotCQkJCSAqIGZhbGwgYmFjayB0byB0 cmVhdGluZyBpdCBhcyBhIHN0YW5kYWxvbmUgd3JpdGUuCi0JCQkJICovCi0JCQkJZmRhdGEgPSBO VUxMOwotCQkJfQotCQl9Ci0JfQotCi0JZXJybm8gPSAwOwotCXBnc3RhdF9yZXBvcnRfd2FpdF9z dGFydChXQUlUX0VWRU5UX1NMUlVfV1JJVEUpOwotCWlmIChwZ19wd3JpdGUoZmQsIHNoYXJlZC0+ cGFnZV9idWZmZXJbc2xvdG5vXSwgQkxDS1NaLCBvZmZzZXQpICE9IEJMQ0tTWikKLQl7Ci0JCXBn c3RhdF9yZXBvcnRfd2FpdF9lbmQoKTsKLQkJLyogaWYgd3JpdGUgZGlkbid0IHNldCBlcnJubywg YXNzdW1lIHByb2JsZW0gaXMgbm8gZGlzayBzcGFjZSAqLwotCQlpZiAoZXJybm8gPT0gMCkKLQkJ CWVycm5vID0gRU5PU1BDOwotCQlzbHJ1X2VycmNhdXNlID0gU0xSVV9XUklURV9GQUlMRUQ7Ci0J CXNscnVfZXJybm8gPSBlcnJubzsKLQkJaWYgKCFmZGF0YSkKLQkJCUNsb3NlVHJhbnNpZW50Rmls ZShmZCk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JcGdzdGF0X3JlcG9ydF93YWl0X2VuZCgpOwot Ci0JLyogUXVldWUgdXAgYSBzeW5jIHJlcXVlc3QgZm9yIHRoZSBjaGVja3BvaW50ZXIuICovCi0J aWYgKGN0bC0+c3luY19oYW5kbGVyICE9IFNZTkNfSEFORExFUl9OT05FKQotCXsKLQkJRmlsZVRh ZwkJdGFnOwotCi0JCUlOSVRfU0xSVUZJTEVUQUcodGFnLCBjdGwtPnN5bmNfaGFuZGxlciwgc2Vn bm8pOwotCQlpZiAoIVJlZ2lzdGVyU3luY1JlcXVlc3QoJnRhZywgU1lOQ19SRVFVRVNULCBmYWxz ZSkpCi0JCXsKLQkJCS8qIE5vIHNwYWNlIHRvIGVucXVldWUgc3luYyByZXF1ZXN0LiAgRG8gaXQg c3luY2hyb25vdXNseS4gKi8KLQkJCXBnc3RhdF9yZXBvcnRfd2FpdF9zdGFydChXQUlUX0VWRU5U X1NMUlVfU1lOQyk7Ci0JCQlpZiAocGdfZnN5bmMoZmQpICE9IDApCi0JCQl7Ci0JCQkJcGdzdGF0 X3JlcG9ydF93YWl0X2VuZCgpOwotCQkJCXNscnVfZXJyY2F1c2UgPSBTTFJVX0ZTWU5DX0ZBSUxF RDsKLQkJCQlzbHJ1X2Vycm5vID0gZXJybm87Ci0JCQkJQ2xvc2VUcmFuc2llbnRGaWxlKGZkKTsK LQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9Ci0JCQlwZ3N0YXRfcmVwb3J0X3dhaXRfZW5kKCk7Ci0J CX0KLQl9Ci0KLQkvKiBDbG9zZSBmaWxlLCB1bmxlc3MgcGFydCBvZiBmbHVzaCByZXF1ZXN0LiAq LwotCWlmICghZmRhdGEpCi0JewotCQlpZiAoQ2xvc2VUcmFuc2llbnRGaWxlKGZkKSAhPSAwKQot CQl7Ci0JCQlzbHJ1X2VycmNhdXNlID0gU0xSVV9DTE9TRV9GQUlMRUQ7Ci0JCQlzbHJ1X2Vycm5v ID0gZXJybm87Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0K LQotLyoKLSAqIElzc3VlIHRoZSBlcnJvciBtZXNzYWdlIGFmdGVyIGZhaWx1cmUgb2YgU2xydVBo eXNpY2FsUmVhZFBhZ2Ugb3IKLSAqIFNscnVQaHlzaWNhbFdyaXRlUGFnZS4gIENhbGwgdGhpcyBh ZnRlciBjbGVhbmluZyB1cCBzaGFyZWQtbWVtb3J5IHN0YXRlLgotICovCi1zdGF0aWMgdm9pZAot U2xydVJlcG9ydElPRXJyb3IoU2xydUN0bCBjdGwsIGludCBwYWdlbm8sIFRyYW5zYWN0aW9uSWQg eGlkKQotewotCWludAkJCXNlZ25vID0gcGFnZW5vIC8gU0xSVV9QQUdFU19QRVJfU0VHTUVOVDsK LQlpbnQJCQlycGFnZW5vID0gcGFnZW5vICUgU0xSVV9QQUdFU19QRVJfU0VHTUVOVDsKLQlpbnQJ CQlvZmZzZXQgPSBycGFnZW5vICogQkxDS1NaOwotCWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKLQot CVNscnVGaWxlTmFtZShjdGwsIHBhdGgsIHNlZ25vKTsKLQllcnJubyA9IHNscnVfZXJybm87Ci0J c3dpdGNoIChzbHJ1X2VycmNhdXNlKQotCXsKLQkJY2FzZSBTTFJVX09QRU5fRkFJTEVEOgotCQkJ ZXJlcG9ydChFUlJPUiwKLQkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCi0JCQkJCSBl cnJtc2coImNvdWxkIG5vdCBhY2Nlc3Mgc3RhdHVzIG9mIHRyYW5zYWN0aW9uICV1IiwgeGlkKSwK LQkJCQkJIGVycmRldGFpbCgiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6ICVtLiIsIHBhdGgp KSk7Ci0JCQlicmVhazsKLQkJY2FzZSBTTFJVX1NFRUtfRkFJTEVEOgotCQkJZXJlcG9ydChFUlJP UiwKLQkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCi0JCQkJCSBlcnJtc2coImNvdWxk IG5vdCBhY2Nlc3Mgc3RhdHVzIG9mIHRyYW5zYWN0aW9uICV1IiwgeGlkKSwKLQkJCQkJIGVycmRl dGFpbCgiQ291bGQgbm90IHNlZWsgaW4gZmlsZSBcIiVzXCIgdG8gb2Zmc2V0ICVkOiAlbS4iLAot CQkJCQkJCSAgIHBhdGgsIG9mZnNldCkpKTsKLQkJCWJyZWFrOwotCQljYXNlIFNMUlVfUkVBRF9G QUlMRUQ6Ci0JCQlpZiAoZXJybm8pCi0JCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJCShlcnJjb2Rl X2Zvcl9maWxlX2FjY2VzcygpLAotCQkJCQkJIGVycm1zZygiY291bGQgbm90IGFjY2VzcyBzdGF0 dXMgb2YgdHJhbnNhY3Rpb24gJXUiLCB4aWQpLAotCQkJCQkJIGVycmRldGFpbCgiQ291bGQgbm90 IHJlYWQgZnJvbSBmaWxlIFwiJXNcIiBhdCBvZmZzZXQgJWQ6ICVtLiIsCi0JCQkJCQkJCSAgIHBh dGgsIG9mZnNldCkpKTsKLQkJCWVsc2UKLQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJKGVycm1z ZygiY291bGQgbm90IGFjY2VzcyBzdGF0dXMgb2YgdHJhbnNhY3Rpb24gJXUiLCB4aWQpLAotCQkJ CQkJIGVycmRldGFpbCgiQ291bGQgbm90IHJlYWQgZnJvbSBmaWxlIFwiJXNcIiBhdCBvZmZzZXQg JWQ6IHJlYWQgdG9vIGZldyBieXRlcy4iLCBwYXRoLCBvZmZzZXQpKSk7Ci0JCQlicmVhazsKLQkJ Y2FzZSBTTFJVX1dSSVRFX0ZBSUxFRDoKLQkJCWlmIChlcnJubykKLQkJCQllcmVwb3J0KEVSUk9S LAotCQkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCi0JCQkJCQkgZXJybXNnKCJjb3Vs ZCBub3QgYWNjZXNzIHN0YXR1cyBvZiB0cmFuc2FjdGlvbiAldSIsIHhpZCksCi0JCQkJCQkgZXJy ZGV0YWlsKCJDb3VsZCBub3Qgd3JpdGUgdG8gZmlsZSBcIiVzXCIgYXQgb2Zmc2V0ICVkOiAlbS4i LAotCQkJCQkJCQkgICBwYXRoLCBvZmZzZXQpKSk7Ci0JCQllbHNlCi0JCQkJZXJlcG9ydChFUlJP UiwKLQkJCQkJCShlcnJtc2coImNvdWxkIG5vdCBhY2Nlc3Mgc3RhdHVzIG9mIHRyYW5zYWN0aW9u ICV1IiwgeGlkKSwKLQkJCQkJCSBlcnJkZXRhaWwoIkNvdWxkIG5vdCB3cml0ZSB0byBmaWxlIFwi JXNcIiBhdCBvZmZzZXQgJWQ6IHdyb3RlIHRvbyBmZXcgYnl0ZXMuIiwKLQkJCQkJCQkJICAgcGF0 aCwgb2Zmc2V0KSkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0xSVV9GU1lOQ19GQUlMRUQ6Ci0JCQll cmVwb3J0KGRhdGFfc3luY19lbGV2ZWwoRVJST1IpLAotCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9h Y2Nlc3MoKSwKLQkJCQkJIGVycm1zZygiY291bGQgbm90IGFjY2VzcyBzdGF0dXMgb2YgdHJhbnNh Y3Rpb24gJXUiLCB4aWQpLAotCQkJCQkgZXJyZGV0YWlsKCJDb3VsZCBub3QgZnN5bmMgZmlsZSBc IiVzXCI6ICVtLiIsCi0JCQkJCQkJICAgcGF0aCkpKTsKLQkJCWJyZWFrOwotCQljYXNlIFNMUlVf Q0xPU0VfRkFJTEVEOgotCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJKGVycmNvZGVfZm9yX2ZpbGVf YWNjZXNzKCksCi0JCQkJCSBlcnJtc2coImNvdWxkIG5vdCBhY2Nlc3Mgc3RhdHVzIG9mIHRyYW5z YWN0aW9uICV1IiwgeGlkKSwKLQkJCQkJIGVycmRldGFpbCgiQ291bGQgbm90IGNsb3NlIGZpbGUg XCIlc1wiOiAlbS4iLAotCQkJCQkJCSAgIHBhdGgpKSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoK LQkJCS8qIGNhbid0IGdldCBoZXJlLCB3ZSB0cnVzdCAqLwotCQkJZWxvZyhFUlJPUiwgInVucmVj b2duaXplZCBTaW1wbGVMcnUgZXJyb3IgY2F1c2U6ICVkIiwKLQkJCQkgKGludCkgc2xydV9lcnJj YXVzZSk7Ci0JCQlicmVhazsKLQl9Ci19Ci0KLS8qCi0gKiBTZWxlY3QgdGhlIHNsb3QgdG8gcmUt dXNlIHdoZW4gd2UgbmVlZCBhIGZyZWUgc2xvdC4KLSAqCi0gKiBUaGUgdGFyZ2V0IHBhZ2UgbnVt YmVyIGlzIHBhc3NlZCBiZWNhdXNlIHdlIG5lZWQgdG8gY29uc2lkZXIgdGhlCi0gKiBwb3NzaWJp bGl0eSB0aGF0IHNvbWUgb3RoZXIgcHJvY2VzcyByZWFkcyBpbiB0aGUgdGFyZ2V0IHBhZ2Ugd2hp bGUKLSAqIHdlIGFyZSBkb2luZyBJL08gdG8gZnJlZSBhIHNsb3QuICBIZW5jZSwgY2hlY2sgb3Ig cmVjaGVjayB0byBzZWUgaWYKLSAqIGFueSBzbG90IGFscmVhZHkgaG9sZHMgdGhlIHRhcmdldCBw YWdlLCBhbmQgcmV0dXJuIHRoYXQgc2xvdCBpZiBzby4KLSAqIFRodXMsIHRoZSByZXR1cm5lZCBz bG90IGlzICplaXRoZXIqIGEgc2xvdCBhbHJlYWR5IGhvbGRpbmcgdGhlIHBhZ2VubwotICogKGNv dWxkIGJlIGFueSBzdGF0ZSBleGNlcHQgRU1QVFkpLCAqb3IqIGEgZnJlZWFibGUgc2xvdCAoc3Rh dGUgRU1QVFkKLSAqIG9yIENMRUFOKS4KLSAqCi0gKiBDb250cm9sIGxvY2sgbXVzdCBiZSBoZWxk IGF0IGVudHJ5LCBhbmQgd2lsbCBiZSBoZWxkIGF0IGV4aXQuCi0gKi8KLXN0YXRpYyBpbnQKLVNs cnVTZWxlY3RMUlVQYWdlKFNscnVDdGwgY3RsLCBpbnQgcGFnZW5vKQotewotCVNscnVTaGFyZWQJ c2hhcmVkID0gY3RsLT5zaGFyZWQ7Ci0KLQkvKiBPdXRlciBsb29wIGhhbmRsZXMgcmVzdGFydCBh ZnRlciBJL08gKi8KLQlmb3IgKDs7KQotCXsKLQkJaW50CQkJc2xvdG5vOwotCQlpbnQJCQljdXJf Y291bnQ7Ci0JCWludAkJCWJlc3R2YWxpZHNsb3QgPSAwOwkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0 ICovCi0JCWludAkJCWJlc3RfdmFsaWRfZGVsdGEgPSAtMTsKLQkJaW50CQkJYmVzdF92YWxpZF9w YWdlX251bWJlciA9IDA7IC8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KLQkJaW50CQkJYmVzdGlu dmFsaWRzbG90ID0gMDsJLyoga2VlcCBjb21waWxlciBxdWlldCAqLwotCQlpbnQJCQliZXN0X2lu dmFsaWRfZGVsdGEgPSAtMTsKLQkJaW50CQkJYmVzdF9pbnZhbGlkX3BhZ2VfbnVtYmVyID0gMDsJ Lyoga2VlcCBjb21waWxlciBxdWlldCAqLwotCi0JCS8qIFNlZSBpZiBwYWdlIGFscmVhZHkgaGFz IGEgYnVmZmVyIGFzc2lnbmVkICovCi0JCWZvciAoc2xvdG5vID0gMDsgc2xvdG5vIDwgc2hhcmVk LT5udW1fc2xvdHM7IHNsb3RubysrKQotCQl7Ci0JCQlpZiAoc2hhcmVkLT5wYWdlX251bWJlcltz bG90bm9dID09IHBhZ2VubyAmJgotCQkJCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSAhPSBT TFJVX1BBR0VfRU1QVFkpCi0JCQkJcmV0dXJuIHNsb3RubzsKLQkJfQotCi0JCS8qCi0JCSAqIElm IHdlIGZpbmQgYW55IEVNUFRZIHNsb3QsIGp1c3Qgc2VsZWN0IHRoYXQgb25lLiBFbHNlIGNob29z ZSBhCi0JCSAqIHZpY3RpbSBwYWdlIHRvIHJlcGxhY2UuICBXZSBub3JtYWxseSB0YWtlIHRoZSBs ZWFzdCByZWNlbnRseSB1c2VkCi0JCSAqIHZhbGlkIHBhZ2UsIGJ1dCB3ZSB3aWxsIG5ldmVyIHRh a2UgdGhlIHNsb3QgY29udGFpbmluZwotCQkgKiBsYXRlc3RfcGFnZV9udW1iZXIsIGV2ZW4gaWYg aXQgYXBwZWFycyBsZWFzdCByZWNlbnRseSB1c2VkLiAgV2UKLQkJICogd2lsbCBzZWxlY3QgYSBz bG90IHRoYXQgaXMgYWxyZWFkeSBJL08gYnVzeSBvbmx5IGlmIHRoZXJlIGlzIG5vCi0JCSAqIG90 aGVyIGNob2ljZTogYSByZWFkLWJ1c3kgc2xvdCB3aWxsIG5vdCBiZSBsZWFzdCByZWNlbnRseSB1 c2VkIG9uY2UKLQkJICogdGhlIHJlYWQgZmluaXNoZXMsIGFuZCB3YWl0aW5nIGZvciBhbiBJL08g b24gYSB3cml0ZS1idXN5IHNsb3QgaXMKLQkJICogaW5mZXJpb3IgdG8ganVzdCBwaWNraW5nIHNv bWUgb3RoZXIgc2xvdC4gIFRlc3Rpbmcgc2hvd3MgdGhlIHNsb3QKLQkJICogd2UgcGljayBpbnN0 ZWFkIHdpbGwgb2Z0ZW4gYmUgY2xlYW4sIGFsbG93aW5nIHVzIHRvIGJlZ2luIGEgcmVhZCBhdAot CQkgKiBvbmNlLgotCQkgKgotCQkgKiBOb3JtYWxseSB0aGUgcGFnZV9scnVfY291bnQgdmFsdWVz IHdpbGwgYWxsIGJlIGRpZmZlcmVudCBhbmQgc28KLQkJICogdGhlcmUgd2lsbCBiZSBhIHdlbGwt ZGVmaW5lZCBMUlUgcGFnZS4gIEJ1dCBzaW5jZSB3ZSBhbGxvdwotCQkgKiBjb25jdXJyZW50IGV4 ZWN1dGlvbiBvZiBTbHJ1UmVjZW50bHlVc2VkKCkgd2l0aGluCi0JCSAqIFNpbXBsZUxydVJlYWRQ YWdlX1JlYWRPbmx5KCksIGl0IGlzIHBvc3NpYmxlIHRoYXQgbXVsdGlwbGUgcGFnZXMKLQkJICog YWNxdWlyZSB0aGUgc2FtZSBscnVfY291bnQgdmFsdWVzLiAgSW4gdGhhdCBjYXNlIHdlIGJyZWFr IHRpZXMgYnkKLQkJICogY2hvb3NpbmcgdGhlIGZ1cnRoZXN0LWJhY2sgcGFnZS4KLQkJICoKLQkJ ICogTm90aWNlIHRoYXQgdGhpcyBuZXh0IGxpbmUgZm9yY2libHkgYWR2YW5jZXMgY3VyX2xydV9j b3VudCB0byBhCi0JCSAqIHZhbHVlIHRoYXQgaXMgY2VydGFpbmx5IGJleW9uZCBhbnkgdmFsdWUg dGhhdCB3aWxsIGJlIGluIHRoZQotCQkgKiBwYWdlX2xydV9jb3VudCBhcnJheSBhZnRlciB0aGUg bG9vcCBmaW5pc2hlcy4gIFRoaXMgZW5zdXJlcyB0aGF0Ci0JCSAqIHRoZSBuZXh0IGV4ZWN1dGlv biBvZiBTbHJ1UmVjZW50bHlVc2VkIHdpbGwgbWFyayB0aGUgcGFnZSBuZXdseQotCQkgKiB1c2Vk LCBldmVuIGlmIGl0J3MgZm9yIGEgcGFnZSB0aGF0IGhhcyB0aGUgY3VycmVudCBjb3VudGVyIHZh bHVlLgotCQkgKiBUaGF0IGdldHMgdXMgYmFjayBvbiB0aGUgcGF0aCB0byBoYXZpbmcgZ29vZCBk YXRhIHdoZW4gdGhlcmUgYXJlCi0JCSAqIG11bHRpcGxlIHBhZ2VzIHdpdGggdGhlIHNhbWUgbHJ1 X2NvdW50LgotCQkgKi8KLQkJY3VyX2NvdW50ID0gKHNoYXJlZC0+Y3VyX2xydV9jb3VudCkrKzsK LQkJZm9yIChzbG90bm8gPSAwOyBzbG90bm8gPCBzaGFyZWQtPm51bV9zbG90czsgc2xvdG5vKysp Ci0JCXsKLQkJCWludAkJCXRoaXNfZGVsdGE7Ci0JCQlpbnQJCQl0aGlzX3BhZ2VfbnVtYmVyOwot Ci0JCQlpZiAoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9FTVBUWSkK LQkJCQlyZXR1cm4gc2xvdG5vOwotCQkJdGhpc19kZWx0YSA9IGN1cl9jb3VudCAtIHNoYXJlZC0+ cGFnZV9scnVfY291bnRbc2xvdG5vXTsKLQkJCWlmICh0aGlzX2RlbHRhIDwgMCkKLQkJCXsKLQkJ CQkvKgotCQkJCSAqIENsZWFuIHVwIGluIGNhc2Ugc2hhcmVkIHVwZGF0ZXMgaGF2ZSBjYXVzZWQg Y3VyX2NvdW50Ci0JCQkJICogaW5jcmVtZW50cyB0byBnZXQgImxvc3QiLiAgV2UgYmFjayBvZmYg dGhlIHBhZ2UgY291bnRzLAotCQkJCSAqIHJhdGhlciB0aGFuIHRyeWluZyB0byBpbmNyZWFzZSBj dXJfY291bnQsIHRvIGF2b2lkIGFueQotCQkJCSAqIHF1ZXN0aW9uIG9mIGluZmluaXRlIGxvb3Bz IG9yIGZhaWx1cmUgaW4gdGhlIHByZXNlbmNlIG9mCi0JCQkJICogd3JhcHBlZC1hcm91bmQgY291 bnRzLgotCQkJCSAqLwotCQkJCXNoYXJlZC0+cGFnZV9scnVfY291bnRbc2xvdG5vXSA9IGN1cl9j b3VudDsKLQkJCQl0aGlzX2RlbHRhID0gMDsKLQkJCX0KLQkJCXRoaXNfcGFnZV9udW1iZXIgPSBz aGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub107Ci0JCQlpZiAodGhpc19wYWdlX251bWJlciA9PSBz aGFyZWQtPmxhdGVzdF9wYWdlX251bWJlcikKLQkJCQljb250aW51ZTsKLQkJCWlmIChzaGFyZWQt PnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdFX1ZBTElEKQotCQkJewotCQkJCWlmICh0 aGlzX2RlbHRhID4gYmVzdF92YWxpZF9kZWx0YSB8fAotCQkJCQkodGhpc19kZWx0YSA9PSBiZXN0 X3ZhbGlkX2RlbHRhICYmCi0JCQkJCSBjdGwtPlBhZ2VQcmVjZWRlcyh0aGlzX3BhZ2VfbnVtYmVy LAotCQkJCQkJCQkJICAgYmVzdF92YWxpZF9wYWdlX251bWJlcikpKQotCQkJCXsKLQkJCQkJYmVz dHZhbGlkc2xvdCA9IHNsb3RubzsKLQkJCQkJYmVzdF92YWxpZF9kZWx0YSA9IHRoaXNfZGVsdGE7 Ci0JCQkJCWJlc3RfdmFsaWRfcGFnZV9udW1iZXIgPSB0aGlzX3BhZ2VfbnVtYmVyOwotCQkJCX0K LQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQlpZiAodGhpc19kZWx0YSA+IGJlc3RfaW52YWxpZF9k ZWx0YSB8fAotCQkJCQkodGhpc19kZWx0YSA9PSBiZXN0X2ludmFsaWRfZGVsdGEgJiYKLQkJCQkJ IGN0bC0+UGFnZVByZWNlZGVzKHRoaXNfcGFnZV9udW1iZXIsCi0JCQkJCQkJCQkgICBiZXN0X2lu dmFsaWRfcGFnZV9udW1iZXIpKSkKLQkJCQl7Ci0JCQkJCWJlc3RpbnZhbGlkc2xvdCA9IHNsb3Ru bzsKLQkJCQkJYmVzdF9pbnZhbGlkX2RlbHRhID0gdGhpc19kZWx0YTsKLQkJCQkJYmVzdF9pbnZh bGlkX3BhZ2VfbnVtYmVyID0gdGhpc19wYWdlX251bWJlcjsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQot CQkvKgotCQkgKiBJZiBhbGwgcGFnZXMgKGV4Y2VwdCBwb3NzaWJseSB0aGUgbGF0ZXN0IG9uZSkg YXJlIEkvTyBidXN5LCB3ZSdsbAotCQkgKiBoYXZlIHRvIHdhaXQgZm9yIGFuIEkvTyB0byBjb21w bGV0ZSBhbmQgdGhlbiByZXRyeS4gIEluIHRoYXQKLQkJICogdW5oYXBweSBjYXNlLCB3ZSBjaG9v c2UgdG8gd2FpdCBmb3IgdGhlIEkvTyBvbiB0aGUgbGVhc3QgcmVjZW50bHkKLQkJICogdXNlZCBz bG90LCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IGl0IHdhcyBsaWtlbHkgaW5pdGlhdGVkIGZpcnN0 IG9mCi0JCSAqIGFsbCB0aGUgSS9PcyBpbiBwcm9ncmVzcyBhbmQgbWF5IHRoZXJlZm9yZSBmaW5p c2ggZmlyc3QuCi0JCSAqLwotCQlpZiAoYmVzdF92YWxpZF9kZWx0YSA8IDApCi0JCXsKLQkJCVNp bXBsZUxydVdhaXRJTyhjdGwsIGJlc3RpbnZhbGlkc2xvdCk7Ci0JCQljb250aW51ZTsKLQkJfQot Ci0JCS8qCi0JCSAqIElmIHRoZSBzZWxlY3RlZCBwYWdlIGlzIGNsZWFuLCB3ZSdyZSBzZXQuCi0J CSAqLwotCQlpZiAoIXNoYXJlZC0+cGFnZV9kaXJ0eVtiZXN0dmFsaWRzbG90XSkKLQkJCXJldHVy biBiZXN0dmFsaWRzbG90OwotCi0JCS8qCi0JCSAqIFdyaXRlIHRoZSBwYWdlLgotCQkgKi8KLQkJ U2xydUludGVybmFsV3JpdGVQYWdlKGN0bCwgYmVzdHZhbGlkc2xvdCwgTlVMTCk7Ci0KLQkJLyoK LQkJICogTm93IGxvb3AgYmFjayBhbmQgdHJ5IGFnYWluLiAgVGhpcyBpcyB0aGUgZWFzaWVzdCB3 YXkgb2YgZGVhbGluZwotCQkgKiB3aXRoIGNvcm5lciBjYXNlcyBzdWNoIGFzIHRoZSB2aWN0aW0g cGFnZSBiZWluZyByZS1kaXJ0aWVkIHdoaWxlIHdlCi0JCSAqIHdyb3RlIGl0LgotCQkgKi8KLQl9 Ci19Ci0KLS8qCi0gKiBXcml0ZSBkaXJ0eSBwYWdlcyB0byBkaXNrIGR1cmluZyBjaGVja3BvaW50 IG9yIGRhdGFiYXNlIHNodXRkb3duLiAgRmx1c2hpbmcKLSAqIGlzIGRlZmVycmVkIHVudGlsIHRo ZSBuZXh0IGNhbGwgdG8gUHJvY2Vzc1N5bmNSZXF1ZXN0cygpLCB0aG91Z2ggd2UgZG8gZnN5bmMK LSAqIHRoZSBjb250YWluaW5nIGRpcmVjdG9yeSBoZXJlIHRvIG1ha2Ugc3VyZSB0aGF0IG5ld2x5 IGNyZWF0ZWQgZGlyZWN0b3J5Ci0gKiBlbnRyaWVzIGFyZSBvbiBkaXNrLgotICovCi12b2lkCi1T aW1wbGVMcnVXcml0ZUFsbChTbHJ1Q3RsIGN0bCwgYm9vbCBhbGxvd19yZWRpcnRpZWQpCi17Ci0J U2xydVNoYXJlZAlzaGFyZWQgPSBjdGwtPnNoYXJlZDsKLQlTbHJ1V3JpdGVBbGxEYXRhIGZkYXRh OwotCWludAkJCXNsb3RubzsKLQlpbnQJCQlwYWdlbm8gPSAwOwotCWludAkJCWk7Ci0JYm9vbAkJ b2s7Ci0KLQkvKiB1cGRhdGUgdGhlIHN0YXRzIGNvdW50ZXIgb2YgZmx1c2hlcyAqLwotCXBnc3Rh dF9jb3VudF9zbHJ1X2ZsdXNoKHNoYXJlZC0+c2xydV9zdGF0c19pZHgpOwotCi0JLyoKLQkgKiBG aW5kIGFuZCB3cml0ZSBkaXJ0eSBwYWdlcwotCSAqLwotCWZkYXRhLm51bV9maWxlcyA9IDA7CisJ b2ZmX3QJCXNpemU7CisJUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IgPSBTbHJ1UmVsRmlsZUxvY2F0 b3Ioc2xydV9pZCwgc2Vnbm8pOworCVNNZ3JGaWxlSGFuZGxlIHNmaWxlID0gc21ncm9wZW4ocmxv Y2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIE1BSU5fRk9SS05VTSk7CiAKLQlMV0xvY2tBY3F1aXJl KHNoYXJlZC0+Q29udHJvbExvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQlmb3IgKHNsb3RubyA9IDA7 IHNsb3RubyA8IHNoYXJlZC0+bnVtX3Nsb3RzOyBzbG90bm8rKykKLQl7Ci0JCVNscnVJbnRlcm5h bFdyaXRlUGFnZShjdGwsIHNsb3RubywgJmZkYXRhKTsKLQotCQkvKgotCQkgKiBJbiBzb21lIHBs YWNlcyAoZS5nLiBjaGVja3BvaW50cyksIHdlIGNhbm5vdCBhc3NlcnQgdGhhdCB0aGUgc2xvdAot CQkgKiBpcyBjbGVhbiBub3csIHNpbmNlIGFub3RoZXIgcHJvY2VzcyBtaWdodCBoYXZlIHJlLWRp cnRpZWQgaXQKLQkJICogYWxyZWFkeS4gIFRoYXQncyBva2F5LgotCQkgKi8KLQkJQXNzZXJ0KGFs bG93X3JlZGlydGllZCB8fAotCQkJICAgc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNM UlVfUEFHRV9FTVBUWSB8fAotCQkJICAgKHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBT TFJVX1BBR0VfVkFMSUQgJiYKLQkJCQkhc2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10pKTsKLQl9 Ci0KLQlMV0xvY2tSZWxlYXNlKHNoYXJlZC0+Q29udHJvbExvY2spOworCS8qIHVwZGF0ZSB0aGUg c3RhdHMgY291bnRlciBvZiBjaGVja2VkIHBhZ2VzICovCisJcGdzdGF0X2NvdW50X3NscnVfcGFn ZV9leGlzdHMoc2xydV9pZCk7CiAKLQkvKgotCSAqIE5vdyBjbG9zZSBhbnkgZmlsZXMgdGhhdCB3 ZXJlIG9wZW4KLQkgKi8KLQlvayA9IHRydWU7Ci0JZm9yIChpID0gMDsgaSA8IGZkYXRhLm51bV9m aWxlczsgaSsrKQotCXsKLQkJaWYgKENsb3NlVHJhbnNpZW50RmlsZShmZGF0YS5mZFtpXSkgIT0g MCkKLQkJewotCQkJc2xydV9lcnJjYXVzZSA9IFNMUlVfQ0xPU0VfRkFJTEVEOwotCQkJc2xydV9l cnJubyA9IGVycm5vOwotCQkJcGFnZW5vID0gZmRhdGEuc2Vnbm9baV0gKiBTTFJVX1BBR0VTX1BF Ul9TRUdNRU5UOwotCQkJb2sgPSBmYWxzZTsKLQkJfQotCX0KLQlpZiAoIW9rKQotCQlTbHJ1UmVw b3J0SU9FcnJvcihjdGwsIHBhZ2VubywgSW52YWxpZFRyYW5zYWN0aW9uSWQpOworCWlmIChzbWdy ZXhpc3RzKHNmaWxlKSkKKwkJc2l6ZSA9IHNtZ3JuYmxvY2tzKHNmaWxlKTsKKwllbHNlCisJCXNp emUgPSAwOwogCi0JLyogRW5zdXJlIHRoYXQgZGlyZWN0b3J5IGVudHJpZXMgZm9yIG5ldyBmaWxl cyBhcmUgb24gZGlzay4gKi8KLQlpZiAoY3RsLT5zeW5jX2hhbmRsZXIgIT0gU1lOQ19IQU5ETEVS X05PTkUpCi0JCWZzeW5jX2ZuYW1lKGN0bC0+RGlyLCB0cnVlKTsKKwlyZXR1cm4gc2l6ZSA+PSBv ZmZzZXQgKyBCTENLU1o7CiB9CiAKIC8qCkBAIC0xMjI0LDc1ICs5NiwxNCBAQCBTaW1wbGVMcnVX cml0ZUFsbChTbHJ1Q3RsIGN0bCwgYm9vbCBhbGxvd19yZWRpcnRpZWQpCiAgKiBhZnRlciBpdCBo YXMgYWNjcnVlZCBmcmVzaGx5LXdyaXR0ZW4gZGF0YS4KICAqLwogdm9pZAotU2ltcGxlTHJ1VHJ1 bmNhdGUoU2xydUN0bCBjdGwsIGludCBjdXRvZmZQYWdlKQorU2ltcGxlTHJ1VHJ1bmNhdGUoaW50 IHNscnVfaWQsIFNscnVQYWdlUHJlY2VkZXNGdW5jdGlvbiBQYWdlUHJlY2VkZXMsIGludCBjdXRv ZmZQYWdlKQogewotCVNscnVTaGFyZWQJc2hhcmVkID0gY3RsLT5zaGFyZWQ7Ci0JaW50CQkJc2xv dG5vOwotCiAJLyogdXBkYXRlIHRoZSBzdGF0cyBjb3VudGVyIG9mIHRydW5jYXRlcyAqLwotCXBn c3RhdF9jb3VudF9zbHJ1X3RydW5jYXRlKHNoYXJlZC0+c2xydV9zdGF0c19pZHgpOwotCi0JLyoK LQkgKiBTY2FuIHNoYXJlZCBtZW1vcnkgYW5kIHJlbW92ZSBhbnkgcGFnZXMgcHJlY2VkaW5nIHRo ZSBjdXRvZmYgcGFnZSwgdG8KLQkgKiBlbnN1cmUgd2Ugd29uJ3QgcmV3cml0ZSB0aGVtIGxhdGVy LiAgKFNpbmNlIHRoaXMgaXMgbm9ybWFsbHkgY2FsbGVkIGluCi0JICogb3IganVzdCBhZnRlciBh IGNoZWNrcG9pbnQsIGFueSBkaXJ0eSBwYWdlcyBzaG91bGQgaGF2ZSBiZWVuIGZsdXNoZWQKLQkg KiBhbHJlYWR5IC4uLiB3ZSdyZSBqdXN0IGJlaW5nIGV4dHJhIGNhcmVmdWwgaGVyZS4pCi0JICov Ci0JTFdMb2NrQWNxdWlyZShzaGFyZWQtPkNvbnRyb2xMb2NrLCBMV19FWENMVVNJVkUpOwotCi1y ZXN0YXJ0OgotCi0JLyoKLQkgKiBXaGlsZSB3ZSBhcmUgaG9sZGluZyB0aGUgbG9jaywgbWFrZSBh biBpbXBvcnRhbnQgc2FmZXR5IGNoZWNrOiB0aGUKLQkgKiBjdXJyZW50IGVuZHBvaW50IHBhZ2Ug bXVzdCBub3QgYmUgZWxpZ2libGUgZm9yIHJlbW92YWwuCi0JICovCi0JaWYgKGN0bC0+UGFnZVBy ZWNlZGVzKHNoYXJlZC0+bGF0ZXN0X3BhZ2VfbnVtYmVyLCBjdXRvZmZQYWdlKSkKLQl7Ci0JCUxX TG9ja1JlbGVhc2Uoc2hhcmVkLT5Db250cm9sTG9jayk7Ci0JCWVyZXBvcnQoTE9HLAotCQkJCShl cnJtc2coImNvdWxkIG5vdCB0cnVuY2F0ZSBkaXJlY3RvcnkgXCIlc1wiOiBhcHBhcmVudCB3cmFw YXJvdW5kIiwKLQkJCQkJCWN0bC0+RGlyKSkpOwotCQlyZXR1cm47Ci0JfQotCi0JZm9yIChzbG90 bm8gPSAwOyBzbG90bm8gPCBzaGFyZWQtPm51bV9zbG90czsgc2xvdG5vKyspCi0JewotCQlpZiAo c2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9FTVBUWSkKLQkJCWNvbnRp bnVlOwotCQlpZiAoIWN0bC0+UGFnZVByZWNlZGVzKHNoYXJlZC0+cGFnZV9udW1iZXJbc2xvdG5v XSwgY3V0b2ZmUGFnZSkpCi0JCQljb250aW51ZTsKLQotCQkvKgotCQkgKiBJZiBwYWdlIGlzIGNs ZWFuLCBqdXN0IGNoYW5nZSBzdGF0ZSB0byBFTVBUWSAoZXhwZWN0ZWQgY2FzZSkuCi0JCSAqLwot CQlpZiAoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9WQUxJRCAmJgot CQkJIXNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dKQotCQl7Ci0JCQlzaGFyZWQtPnBhZ2Vfc3Rh dHVzW3Nsb3Rub10gPSBTTFJVX1BBR0VfRU1QVFk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCS8q Ci0JCSAqIEhtbSwgd2UgaGF2ZSAob3IgbWF5IGhhdmUpIEkvTyBvcGVyYXRpb25zIGFjdGluZyBv biB0aGUgcGFnZSwgc28KLQkJICogd2UndmUgZ290IHRvIHdhaXQgZm9yIHRoZW0gdG8gZmluaXNo IGFuZCB0aGVuIHN0YXJ0IGFnYWluLiBUaGlzIGlzCi0JCSAqIHRoZSBzYW1lIGxvZ2ljIGFzIGlu IFNscnVTZWxlY3RMUlVQYWdlLiAgKFhYWCBpZiBwYWdlIGlzIGRpcnR5LAotCQkgKiB3b3VsZG4n dCBpdCBiZSBPSyB0byBqdXN0IGRpc2NhcmQgaXQgd2l0aG91dCB3cml0aW5nIGl0PwotCQkgKiBT bHJ1TWF5RGVsZXRlU2VnbWVudCgpIHVzZXMgYSBzdHJpY3RlciBxdWFsaWZpY2F0aW9uLCBzbyB3 ZSBtaWdodAotCQkgKiBub3QgZGVsZXRlIHRoaXMgcGFnZSBpbiB0aGUgZW5kOyBldmVuIGlmIHdl IGRvbid0IGRlbGV0ZSBpdCwgd2UKLQkJICogd29uJ3QgaGF2ZSBjYXVzZSB0byByZWFkIGl0cyBk YXRhIGFnYWluLiAgRm9yIG5vdywga2VlcCB0aGUgbG9naWMKLQkJICogdGhlIHNhbWUgYXMgaXQg d2FzLikKLQkJICovCi0JCWlmIChzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9Q QUdFX1ZBTElEKQotCQkJU2xydUludGVybmFsV3JpdGVQYWdlKGN0bCwgc2xvdG5vLCBOVUxMKTsK LQkJZWxzZQotCQkJU2ltcGxlTHJ1V2FpdElPKGN0bCwgc2xvdG5vKTsKLQkJZ290byByZXN0YXJ0 OwotCX0KLQotCUxXTG9ja1JlbGVhc2Uoc2hhcmVkLT5Db250cm9sTG9jayk7CisJcGdzdGF0X2Nv dW50X3NscnVfdHJ1bmNhdGUoc2xydV9pZCk7CiAKIAkvKiBOb3cgd2UgY2FuIHJlbW92ZSB0aGUg b2xkIHNlZ21lbnQocykgKi8KLQkodm9pZCkgU2xydVNjYW5EaXJlY3RvcnkoY3RsLCBTbHJ1U2Nh bkRpckNiRGVsZXRlQ3V0b2ZmLCAmY3V0b2ZmUGFnZSk7CisJKHZvaWQpIFNscnVTY2FuRGlyZWN0 b3J5KHNscnVfaWQsIFBhZ2VQcmVjZWRlcywgU2xydVNjYW5EaXJDYkRlbGV0ZUN1dG9mZiwKKwkJ CQkJCQkgJmN1dG9mZlBhZ2UpOwogfQogCiAvKgpAQCAtMTMwMiw3NyArMTEzLDIyIEBAIHJlc3Rh cnQ6CiAgKiB0aGV5IGVpdGhlciBjYW4ndCB5ZXQgY29udGFpbiBhbnl0aGluZywgb3IgaGF2ZSBh bHJlYWR5IGJlZW4gY2xlYW5lZCBvdXQuCiAgKi8KIHN0YXRpYyB2b2lkCi1TbHJ1SW50ZXJuYWxE ZWxldGVTZWdtZW50KFNscnVDdGwgY3RsLCBpbnQgc2Vnbm8pCitTbHJ1SW50ZXJuYWxEZWxldGVT ZWdtZW50KGludCBzbHJ1X2lkLCBpbnQgc2Vnbm8pCiB7Ci0JY2hhcgkJcGF0aFtNQVhQR1BBVEhd OwotCi0JLyogRm9yZ2V0IGFueSBmc3luYyByZXF1ZXN0cyBxdWV1ZWQgZm9yIHRoaXMgc2VnbWVu dC4gKi8KLQlpZiAoY3RsLT5zeW5jX2hhbmRsZXIgIT0gU1lOQ19IQU5ETEVSX05PTkUpCi0Jewot CQlGaWxlVGFnCQl0YWc7Ci0KLQkJSU5JVF9TTFJVRklMRVRBRyh0YWcsIGN0bC0+c3luY19oYW5k bGVyLCBzZWdubyk7Ci0JCVJlZ2lzdGVyU3luY1JlcXVlc3QoJnRhZywgU1lOQ19GT1JHRVRfUkVR VUVTVCwgdHJ1ZSk7Ci0JfQorCVJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yID0gU2xydVJlbEZpbGVM b2NhdG9yKHNscnVfaWQsIHNlZ25vKTsKKwlTTWdyRmlsZUhhbmRsZSBzZmlsZSA9IHNtZ3JvcGVu KHJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCBNQUlOX0ZPUktOVU0pOwogCiAJLyogVW5saW5r IHRoZSBmaWxlLiAqLwotCVNscnVGaWxlTmFtZShjdGwsIHBhdGgsIHNlZ25vKTsKLQllcmVwb3J0 KERFQlVHMiwgKGVycm1zZ19pbnRlcm5hbCgicmVtb3ZpbmcgZmlsZSBcIiVzXCIiLCBwYXRoKSkp OwotCXVubGluayhwYXRoKTsKKwlzbWdydW5saW5rKHNmaWxlLCBmYWxzZSk7CiB9CiAKIC8qCiAg KiBEZWxldGUgYW4gaW5kaXZpZHVhbCBTTFJVIHNlZ21lbnQsIGlkZW50aWZpZWQgYnkgdGhlIHNl Z21lbnQgbnVtYmVyLgogICovCiB2b2lkCi1TbHJ1RGVsZXRlU2VnbWVudChTbHJ1Q3RsIGN0bCwg aW50IHNlZ25vKQorU2xydURlbGV0ZVNlZ21lbnQoaW50IHNscnVfaWQsIGludCBzZWdubykKIHsK LQlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwotCWludAkJCXNsb3RubzsKLQlib29s CQlkaWRfd3JpdGU7Ci0KLQkvKiBDbGVhbiBvdXQgYW55IHBvc3NpYmx5IGV4aXN0aW5nIHJlZmVy ZW5jZXMgdG8gdGhlIHNlZ21lbnQuICovCi0JTFdMb2NrQWNxdWlyZShzaGFyZWQtPkNvbnRyb2xM b2NrLCBMV19FWENMVVNJVkUpOwotcmVzdGFydDoKLQlkaWRfd3JpdGUgPSBmYWxzZTsKLQlmb3Ig KHNsb3RubyA9IDA7IHNsb3RubyA8IHNoYXJlZC0+bnVtX3Nsb3RzOyBzbG90bm8rKykKLQl7Ci0J CWludAkJCXBhZ2VzZWdubyA9IHNoYXJlZC0+cGFnZV9udW1iZXJbc2xvdG5vXSAvIFNMUlVfUEFH RVNfUEVSX1NFR01FTlQ7Ci0KLQkJaWYgKHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBT TFJVX1BBR0VfRU1QVFkpCi0JCQljb250aW51ZTsKLQotCQkvKiBub3QgdGhlIHNlZ21lbnQgd2Un cmUgbG9va2luZyBmb3IgKi8KLQkJaWYgKHBhZ2VzZWdubyAhPSBzZWdubykKLQkJCWNvbnRpbnVl OwotCi0JCS8qIElmIHBhZ2UgaXMgY2xlYW4sIGp1c3QgY2hhbmdlIHN0YXRlIHRvIEVNUFRZIChl eHBlY3RlZCBjYXNlKS4gKi8KLQkJaWYgKHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBT TFJVX1BBR0VfVkFMSUQgJiYKLQkJCSFzaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSkKLQkJewot CQkJc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID0gU0xSVV9QQUdFX0VNUFRZOwotCQkJY29u dGludWU7Ci0JCX0KLQotCQkvKiBTYW1lIGxvZ2ljIGFzIFNpbXBsZUxydVRydW5jYXRlKCkgKi8K LQkJaWYgKHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBTTFJVX1BBR0VfVkFMSUQpCi0J CQlTbHJ1SW50ZXJuYWxXcml0ZVBhZ2UoY3RsLCBzbG90bm8sIE5VTEwpOwotCQllbHNlCi0JCQlT aW1wbGVMcnVXYWl0SU8oY3RsLCBzbG90bm8pOwotCi0JCWRpZF93cml0ZSA9IHRydWU7Ci0JfQot Ci0JLyoKLQkgKiBCZSBleHRyYSBjYXJlZnVsIGFuZCByZS1jaGVjay4gVGhlIElPIGZ1bmN0aW9u cyByZWxlYXNlIHRoZSBjb250cm9sCi0JICogbG9jaywgc28gbmV3IHBhZ2VzIGNvdWxkIGhhdmUg YmVlbiByZWFkIGluLgotCSAqLwotCWlmIChkaWRfd3JpdGUpCi0JCWdvdG8gcmVzdGFydDsKLQot CVNscnVJbnRlcm5hbERlbGV0ZVNlZ21lbnQoY3RsLCBzZWdubyk7Ci0KLQlMV0xvY2tSZWxlYXNl KHNoYXJlZC0+Q29udHJvbExvY2spOworCVNscnVJbnRlcm5hbERlbGV0ZVNlZ21lbnQoc2xydV9p ZCwgc2Vnbm8pOwogfQogCiAvKgpAQCAtMTM4OSwxOSArMTQ1LDIxIEBAIHJlc3RhcnQ6CiAgKiBm aXJzdD49Y3V0b2ZmICYmIGxhc3Q+PWN1dG9mZjogbm87IGV2ZXJ5IHBhZ2Ugb2YgdGhpcyBzZWdt ZW50IGlzIHRvbyB5b3VuZwogICovCiBzdGF0aWMgYm9vbAotU2xydU1heURlbGV0ZVNlZ21lbnQo U2xydUN0bCBjdGwsIGludCBzZWdwYWdlLCBpbnQgY3V0b2ZmUGFnZSkKK1NscnVNYXlEZWxldGVT ZWdtZW50KFNscnVQYWdlUHJlY2VkZXNGdW5jdGlvbiBQYWdlUHJlY2VkZXMsCisJCQkJCSBpbnQg c2VncGFnZSwgaW50IGN1dG9mZlBhZ2UpCiB7CiAJaW50CQkJc2VnX2xhc3RfcGFnZSA9IHNlZ3Bh Z2UgKyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UIC0gMTsKIAogCUFzc2VydChzZWdwYWdlICUgU0xS VV9QQUdFU19QRVJfU0VHTUVOVCA9PSAwKTsKIAotCXJldHVybiAoY3RsLT5QYWdlUHJlY2VkZXMo c2VncGFnZSwgY3V0b2ZmUGFnZSkgJiYKLQkJCWN0bC0+UGFnZVByZWNlZGVzKHNlZ19sYXN0X3Bh Z2UsIGN1dG9mZlBhZ2UpKTsKKwlyZXR1cm4gKFBhZ2VQcmVjZWRlcyhzZWdwYWdlLCBjdXRvZmZQ YWdlKSAmJgorCQkJUGFnZVByZWNlZGVzKHNlZ19sYXN0X3BhZ2UsIGN1dG9mZlBhZ2UpKTsKIH0K IAogI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKIHN0YXRpYyB2b2lkCi1TbHJ1UGFnZVByZWNl ZGVzVGVzdE9mZnNldChTbHJ1Q3RsIGN0bCwgaW50IHBlcl9wYWdlLCB1aW50MzIgb2Zmc2V0KQor U2xydVBhZ2VQcmVjZWRlc1Rlc3RPZmZzZXQoU2xydVBhZ2VQcmVjZWRlc0Z1bmN0aW9uIFBhZ2VQ cmVjZWRlcywKKwkJCQkJCSAgIGludCBwZXJfcGFnZSwgdWludDMyIG9mZnNldCkKIHsKIAlUcmFu c2FjdGlvbklkIGxocywKIAkJCQlyaHM7CkBAIC0xNDI2LDE5ICsxODQsMTkgQEAgU2xydVBhZ2VQ cmVjZWRlc1Rlc3RPZmZzZXQoU2xydUN0bCBjdGwsIGludCBwZXJfcGFnZSwgdWludDMyIG9mZnNl dCkKIAlBc3NlcnQoIVRyYW5zYWN0aW9uSWRQcmVjZWRlcyhyaHMsIGxocyArIDEpKTsKIAlBc3Nl cnQoIVRyYW5zYWN0aW9uSWRGb2xsb3dzT3JFcXVhbHMobGhzLCByaHMpKTsKIAlBc3NlcnQoIVRy YW5zYWN0aW9uSWRGb2xsb3dzT3JFcXVhbHMocmhzLCBsaHMpKTsKLQlBc3NlcnQoIWN0bC0+UGFn ZVByZWNlZGVzKGxocyAvIHBlcl9wYWdlLCBsaHMgLyBwZXJfcGFnZSkpOwotCUFzc2VydCghY3Rs LT5QYWdlUHJlY2VkZXMobGhzIC8gcGVyX3BhZ2UsIHJocyAvIHBlcl9wYWdlKSk7Ci0JQXNzZXJ0 KCFjdGwtPlBhZ2VQcmVjZWRlcyhyaHMgLyBwZXJfcGFnZSwgbGhzIC8gcGVyX3BhZ2UpKTsKLQlB c3NlcnQoIWN0bC0+UGFnZVByZWNlZGVzKChsaHMgLSBwZXJfcGFnZSkgLyBwZXJfcGFnZSwgcmhz IC8gcGVyX3BhZ2UpKTsKLQlBc3NlcnQoY3RsLT5QYWdlUHJlY2VkZXMocmhzIC8gcGVyX3BhZ2Us IChsaHMgLSAzICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2UpKTsKLQlBc3NlcnQoY3RsLT5QYWdlUHJl Y2VkZXMocmhzIC8gcGVyX3BhZ2UsIChsaHMgLSAyICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2UpKTsK LQlBc3NlcnQoY3RsLT5QYWdlUHJlY2VkZXMocmhzIC8gcGVyX3BhZ2UsIChsaHMgLSAxICogcGVy X3BhZ2UpIC8gcGVyX3BhZ2UpCisJQXNzZXJ0KCFQYWdlUHJlY2VkZXMobGhzIC8gcGVyX3BhZ2Us IGxocyAvIHBlcl9wYWdlKSk7CisJQXNzZXJ0KCFQYWdlUHJlY2VkZXMobGhzIC8gcGVyX3BhZ2Us IHJocyAvIHBlcl9wYWdlKSk7CisJQXNzZXJ0KCFQYWdlUHJlY2VkZXMocmhzIC8gcGVyX3BhZ2Us IGxocyAvIHBlcl9wYWdlKSk7CisJQXNzZXJ0KCFQYWdlUHJlY2VkZXMoKGxocyAtIHBlcl9wYWdl KSAvIHBlcl9wYWdlLCByaHMgLyBwZXJfcGFnZSkpOworCUFzc2VydChQYWdlUHJlY2VkZXMocmhz IC8gcGVyX3BhZ2UsIChsaHMgLSAzICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2UpKTsKKwlBc3NlcnQo UGFnZVByZWNlZGVzKHJocyAvIHBlcl9wYWdlLCAobGhzIC0gMiAqIHBlcl9wYWdlKSAvIHBlcl9w YWdlKSk7CisJQXNzZXJ0KFBhZ2VQcmVjZWRlcyhyaHMgLyBwZXJfcGFnZSwgKGxocyAtIDEgKiBw ZXJfcGFnZSkgLyBwZXJfcGFnZSkKIAkJICAgfHwgKDFVIDw8IDMxKSAlIHBlcl9wYWdlICE9IDAp OwkvKiBTZWUgQ29tbWl0VHNQYWdlUHJlY2VkZXMoKSAqLwotCUFzc2VydChjdGwtPlBhZ2VQcmVj ZWRlcygobGhzICsgMSAqIHBlcl9wYWdlKSAvIHBlcl9wYWdlLCByaHMgLyBwZXJfcGFnZSkKKwlB c3NlcnQoUGFnZVByZWNlZGVzKChsaHMgKyAxICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2UsIHJocyAv IHBlcl9wYWdlKQogCQkgICB8fCAoMVUgPDwgMzEpICUgcGVyX3BhZ2UgIT0gMCk7Ci0JQXNzZXJ0 KGN0bC0+UGFnZVByZWNlZGVzKChsaHMgKyAyICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2UsIHJocyAv IHBlcl9wYWdlKSk7Ci0JQXNzZXJ0KGN0bC0+UGFnZVByZWNlZGVzKChsaHMgKyAzICogcGVyX3Bh Z2UpIC8gcGVyX3BhZ2UsIHJocyAvIHBlcl9wYWdlKSk7Ci0JQXNzZXJ0KCFjdGwtPlBhZ2VQcmVj ZWRlcyhyaHMgLyBwZXJfcGFnZSwgKGxocyArIHBlcl9wYWdlKSAvIHBlcl9wYWdlKSk7CisJQXNz ZXJ0KFBhZ2VQcmVjZWRlcygobGhzICsgMiAqIHBlcl9wYWdlKSAvIHBlcl9wYWdlLCByaHMgLyBw ZXJfcGFnZSkpOworCUFzc2VydChQYWdlUHJlY2VkZXMoKGxocyArIDMgKiBwZXJfcGFnZSkgLyBw ZXJfcGFnZSwgcmhzIC8gcGVyX3BhZ2UpKTsKKwlBc3NlcnQoIVBhZ2VQcmVjZWRlcyhyaHMgLyBw ZXJfcGFnZSwgKGxocyArIHBlcl9wYWdlKSAvIHBlcl9wYWdlKSk7CiAKIAkvKgogCSAqIEdldE5l d1RyYW5zYWN0aW9uSWQoKSBoYXMgYXNzaWduZWQgdGhlIGxhc3QgWElEIGl0IGNhbiBzYWZlbHkg dXNlLCBhbmQKQEAgLTE0NTEsNyArMjA5LDcgQEAgU2xydVBhZ2VQcmVjZWRlc1Rlc3RPZmZzZXQo U2xydUN0bCBjdGwsIGludCBwZXJfcGFnZSwgdWludDMyIG9mZnNldCkKIAlvbGRlc3RYYWN0ID0g bmV3ZXN0WGFjdCArIDE7CiAJb2xkZXN0WGFjdCAtPSAxVSA8PCAzMTsKIAlvbGRlc3RQYWdlID0g b2xkZXN0WGFjdCAvIHBlcl9wYWdlOwotCUFzc2VydCghU2xydU1heURlbGV0ZVNlZ21lbnQoY3Rs LAorCUFzc2VydCghU2xydU1heURlbGV0ZVNlZ21lbnQoUGFnZVByZWNlZGVzLAogCQkJCQkJCQkg KG5ld2VzdFBhZ2UgLQogCQkJCQkJCQkgIG5ld2VzdFBhZ2UgJSBTTFJVX1BBR0VTX1BFUl9TRUdN RU5UKSwKIAkJCQkJCQkJIG9sZGVzdFBhZ2UpKTsKQEAgLTE0NjcsNyArMjI1LDcgQEAgU2xydVBh Z2VQcmVjZWRlc1Rlc3RPZmZzZXQoU2xydUN0bCBjdGwsIGludCBwZXJfcGFnZSwgdWludDMyIG9m ZnNldCkKIAlvbGRlc3RYYWN0ID0gbmV3ZXN0WGFjdCArIDE7CiAJb2xkZXN0WGFjdCAtPSAxVSA8 PCAzMTsKIAlvbGRlc3RQYWdlID0gb2xkZXN0WGFjdCAvIHBlcl9wYWdlOwotCUFzc2VydCghU2xy dU1heURlbGV0ZVNlZ21lbnQoY3RsLAorCUFzc2VydCghU2xydU1heURlbGV0ZVNlZ21lbnQoUGFn ZVByZWNlZGVzLAogCQkJCQkJCQkgKG5ld2VzdFBhZ2UgLQogCQkJCQkJCQkgIG5ld2VzdFBhZ2Ug JSBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKSwKIAkJCQkJCQkJIG9sZGVzdFBhZ2UpKTsKQEAgLTE0 ODMsMTIgKzI0MSwxMiBAQCBTbHJ1UGFnZVByZWNlZGVzVGVzdE9mZnNldChTbHJ1Q3RsIGN0bCwg aW50IHBlcl9wYWdlLCB1aW50MzIgb2Zmc2V0KQogICogZG8gbm90IGFwcGx5IHRvIHRoZW0uKQog ICovCiB2b2lkCi1TbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKFNscnVDdGwgY3RsLCBpbnQgcGVy X3BhZ2UpCitTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKFNscnVQYWdlUHJlY2VkZXNGdW5jdGlv biBQYWdlUHJlY2VkZXMsIGludCBwZXJfcGFnZSkKIHsKIAkvKiBUZXN0IGZpcnN0LCBtaWRkbGUg YW5kIGxhc3QgZW50cmllcyBvZiBhIHBhZ2UuICovCi0JU2xydVBhZ2VQcmVjZWRlc1Rlc3RPZmZz ZXQoY3RsLCBwZXJfcGFnZSwgMCk7Ci0JU2xydVBhZ2VQcmVjZWRlc1Rlc3RPZmZzZXQoY3RsLCBw ZXJfcGFnZSwgcGVyX3BhZ2UgLyAyKTsKLQlTbHJ1UGFnZVByZWNlZGVzVGVzdE9mZnNldChjdGws IHBlcl9wYWdlLCBwZXJfcGFnZSAtIDEpOworCVNscnVQYWdlUHJlY2VkZXNUZXN0T2Zmc2V0KFBh Z2VQcmVjZWRlcywgcGVyX3BhZ2UsIDApOworCVNscnVQYWdlUHJlY2VkZXNUZXN0T2Zmc2V0KFBh Z2VQcmVjZWRlcywgcGVyX3BhZ2UsIHBlcl9wYWdlIC8gMik7CisJU2xydVBhZ2VQcmVjZWRlc1Rl c3RPZmZzZXQoUGFnZVByZWNlZGVzLCBwZXJfcGFnZSwgcGVyX3BhZ2UgLSAxKTsKIH0KICNlbmRp ZgogCkBAIC0xNDk4LDExICsyNTYsMTIgQEAgU2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cyhTbHJ1 Q3RsIGN0bCwgaW50IHBlcl9wYWdlKQogICoJCW9uZSBjb250YWluaW5nIHRoZSBwYWdlIHBhc3Nl ZCBhcyAiZGF0YSIuCiAgKi8KIGJvb2wKLVNscnVTY2FuRGlyQ2JSZXBvcnRQcmVzZW5jZShTbHJ1 Q3RsIGN0bCwgY2hhciAqZmlsZW5hbWUsIGludCBzZWdwYWdlLCB2b2lkICpkYXRhKQorU2xydVNj YW5EaXJDYlJlcG9ydFByZXNlbmNlKGludCBzbHJ1X2lkLCBTbHJ1UGFnZVByZWNlZGVzRnVuY3Rp b24gUGFnZVByZWNlZGVzLAorCQkJCQkJCWNoYXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwgdm9p ZCAqZGF0YSkKIHsKIAlpbnQJCQljdXRvZmZQYWdlID0gKihpbnQgKikgZGF0YTsKIAotCWlmIChT bHJ1TWF5RGVsZXRlU2VnbWVudChjdGwsIHNlZ3BhZ2UsIGN1dG9mZlBhZ2UpKQorCWlmIChTbHJ1 TWF5RGVsZXRlU2VnbWVudChQYWdlUHJlY2VkZXMsIHNlZ3BhZ2UsIGN1dG9mZlBhZ2UpKQogCQly ZXR1cm4gdHJ1ZTsJCQkvKiBmb3VuZCBvbmU7IGRvbid0IGl0ZXJhdGUgYW55IG1vcmUgKi8KIAog CXJldHVybiBmYWxzZTsJCQkJLyoga2VlcCBnb2luZyAqLwpAQCAtMTUxMywxMiArMjcyLDE1IEBA IFNscnVTY2FuRGlyQ2JSZXBvcnRQcmVzZW5jZShTbHJ1Q3RsIGN0bCwgY2hhciAqZmlsZW5hbWUs IGludCBzZWdwYWdlLCB2b2lkICpkYXRhCiAgKgkJVGhpcyBjYWxsYmFjayBkZWxldGVzIHNlZ21l bnRzIHByaW9yIHRvIHRoZSBvbmUgcGFzc2VkIGluIGFzICJkYXRhIi4KICAqLwogc3RhdGljIGJv b2wKLVNscnVTY2FuRGlyQ2JEZWxldGVDdXRvZmYoU2xydUN0bCBjdGwsIGNoYXIgKmZpbGVuYW1l LCBpbnQgc2VncGFnZSwgdm9pZCAqZGF0YSkKK1NscnVTY2FuRGlyQ2JEZWxldGVDdXRvZmYoaW50 IHNscnVfaWQsIFNscnVQYWdlUHJlY2VkZXNGdW5jdGlvbiBQYWdlUHJlY2VkZXMsCisJCQkJCQkg IGNoYXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwgdm9pZCAqZGF0YSkKIHsKIAlpbnQJCQljdXRv ZmZQYWdlID0gKihpbnQgKikgZGF0YTsKIAotCWlmIChTbHJ1TWF5RGVsZXRlU2VnbWVudChjdGws IHNlZ3BhZ2UsIGN1dG9mZlBhZ2UpKQotCQlTbHJ1SW50ZXJuYWxEZWxldGVTZWdtZW50KGN0bCwg c2VncGFnZSAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQpOworCWlmIChTbHJ1TWF5RGVsZXRlU2Vn bWVudChQYWdlUHJlY2VkZXMsIHNlZ3BhZ2UsIGN1dG9mZlBhZ2UpKQorCXsKKwkJU2xydURlbGV0 ZVNlZ21lbnQoc2xydV9pZCwgc2VncGFnZSAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQpOworCX0K IAogCXJldHVybiBmYWxzZTsJCQkJLyoga2VlcCBnb2luZyAqLwogfQpAQCAtMTUyOCw5ICsyOTAs MTAgQEAgU2xydVNjYW5EaXJDYkRlbGV0ZUN1dG9mZihTbHJ1Q3RsIGN0bCwgY2hhciAqZmlsZW5h bWUsIGludCBzZWdwYWdlLCB2b2lkICpkYXRhKQogICoJCVRoaXMgY2FsbGJhY2sgZGVsZXRlcyBh bGwgc2VnbWVudHMuCiAgKi8KIGJvb2wKLVNscnVTY2FuRGlyQ2JEZWxldGVBbGwoU2xydUN0bCBj dGwsIGNoYXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwgdm9pZCAqZGF0YSkKK1NscnVTY2FuRGly Q2JEZWxldGVBbGwoaW50IHNscnVfaWQsIFNscnVQYWdlUHJlY2VkZXNGdW5jdGlvbiBQYWdlUHJl Y2VkZXMsCisJCQkJCSAgIGNoYXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwgdm9pZCAqZGF0YSkK IHsKLQlTbHJ1SW50ZXJuYWxEZWxldGVTZWdtZW50KGN0bCwgc2VncGFnZSAvIFNMUlVfUEFHRVNf UEVSX1NFR01FTlQpOworCVNscnVJbnRlcm5hbERlbGV0ZVNlZ21lbnQoc2xydV9pZCwgc2VncGFn ZSAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQpOwogCiAJcmV0dXJuIGZhbHNlOwkJCQkvKiBrZWVw IGdvaW5nICovCiB9CkBAIC0xNTUxLDE2ICszMTQsMjAgQEAgU2xydVNjYW5EaXJDYkRlbGV0ZUFs bChTbHJ1Q3RsIGN0bCwgY2hhciAqZmlsZW5hbWUsIGludCBzZWdwYWdlLCB2b2lkICpkYXRhKQog ICogTm90ZSB0aGF0IG5vIGxvY2tpbmcgaXMgYXBwbGllZC4KICAqLwogYm9vbAotU2xydVNjYW5E aXJlY3RvcnkoU2xydUN0bCBjdGwsIFNscnVTY2FuQ2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQgKmRh dGEpCitTbHJ1U2NhbkRpcmVjdG9yeShpbnQgc2xydV9pZCwgU2xydVBhZ2VQcmVjZWRlc0Z1bmN0 aW9uIFBhZ2VQcmVjZWRlcywKKwkJCQkgIFNscnVTY2FuQ2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQg KmRhdGEpCiB7CiAJYm9vbAkJcmV0dmFsID0gZmFsc2U7CiAJRElSCQkgICAqY2xkaXI7CiAJc3Ry dWN0IGRpcmVudCAqY2xkZTsKIAlpbnQJCQlzZWdubzsKIAlpbnQJCQlzZWdwYWdlOworCWNvbnN0 IGNoYXIgKnBhdGg7CisKKwlwYXRoID0gc2xydV9kaXJzW3NscnVfaWRdOwogCi0JY2xkaXIgPSBB bGxvY2F0ZURpcihjdGwtPkRpcik7Ci0Jd2hpbGUgKChjbGRlID0gUmVhZERpcihjbGRpciwgY3Rs LT5EaXIpKSAhPSBOVUxMKQorCWNsZGlyID0gQWxsb2NhdGVEaXIocGF0aCk7CisJd2hpbGUgKChj bGRlID0gUmVhZERpcihjbGRpciwgcGF0aCkpICE9IE5VTEwpCiAJewogCQlzaXplX3QJCWxlbjsK IApAQCAtMTU3Myw4ICszNDAsOCBAQCBTbHJ1U2NhbkRpcmVjdG9yeShTbHJ1Q3RsIGN0bCwgU2xy dVNjYW5DYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqZGF0YSkKIAkJCXNlZ3BhZ2UgPSBzZWdubyAq IFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7CiAKIAkJCWVsb2coREVCVUcyLCAiU2xydVNjYW5EaXJl Y3RvcnkgaW52b2tpbmcgY2FsbGJhY2sgb24gJXMvJXMiLAotCQkJCSBjdGwtPkRpciwgY2xkZS0+ ZF9uYW1lKTsKLQkJCXJldHZhbCA9IGNhbGxiYWNrKGN0bCwgY2xkZS0+ZF9uYW1lLCBzZWdwYWdl LCBkYXRhKTsKKwkJCQkgcGF0aCwgY2xkZS0+ZF9uYW1lKTsKKwkJCXJldHZhbCA9IGNhbGxiYWNr KHNscnVfaWQsIFBhZ2VQcmVjZWRlcywgY2xkZS0+ZF9uYW1lLCBzZWdwYWdlLCBkYXRhKTsKIAkJ CWlmIChyZXR2YWwpCiAJCQkJYnJlYWs7CiAJCX0KQEAgLTE1ODUsMjkgKzM1Miw3NCBAQCBTbHJ1 U2NhbkRpcmVjdG9yeShTbHJ1Q3RsIGN0bCwgU2xydVNjYW5DYWxsYmFjayBjYWxsYmFjaywgdm9p ZCAqZGF0YSkKIH0KIAogLyoKLSAqIEluZGl2aWR1YWwgU0xSVXMgKGNsb2csIC4uLikgaGF2ZSB0 byBwcm92aWRlIGEgc3luYy5jIGhhbmRsZXIgZnVuY3Rpb24gc28KLSAqIHRoYXQgdGhleSBjYW4g cHJvdmlkZSB0aGUgY29ycmVjdCAiU2xydUN0bCIgKG90aGVyd2lzZSB3ZSBkb24ndCBrbm93IGhv dyB0bwotICogYnVpbGQgdGhlIHBhdGgpLCBidXQgdGhleSBqdXN0IGZvcndhcmQgdG8gdGhpcyBj b21tb24gaW1wbGVtZW50YXRpb24gdGhhdAotICogcGVyZm9ybXMgdGhlIGZzeW5jLgorICogUmVh ZCBhIGJ1ZmZlci4gIEJ1ZmZlciBpcyBwaW5uZWQgb24gcmV0dXJuLgorICovCitCdWZmZXIKK1Jl YWRTbHJ1QnVmZmVyKGludCBzbHJ1X2lkLCBpbnQgcGFnZW5vLCBSZWFkQnVmZmVyTW9kZSBtb2Rl KQoreworCWludAkJCXNlZ25vID0gcGFnZW5vIC8gU0xSVV9QQUdFU19QRVJfU0VHTUVOVDsKKwlp bnQJCQlycGFnZW5vID0gcGFnZW5vICUgU0xSVV9QQUdFU19QRVJfU0VHTUVOVDsKKwlSZWxGaWxl TG9jYXRvciBybG9jYXRvciA9IFNscnVSZWxGaWxlTG9jYXRvcihzbHJ1X2lkLCBzZWdubyk7CisJ QnVmZmVyCQlidWZmZXI7CisJYm9vbAkJaGl0OworCisJLyogVHJ5IHRvIGF2b2lkIGRvaW5nIGEg YnVmZmVyIG1hcHBpbmcgdGFibGUgbG9va3VwIGZvciByZXBlYXRlZCBhY2Nlc3MuICovCisJYnVm ZmVyID0gc2xydV9yZWNlbnRfYnVmZmVyc1tzbHJ1X2lkXS5yZWNlbnRfYnVmZmVyOworCWlmIChz bHJ1X3JlY2VudF9idWZmZXJzW3NscnVfaWRdLnBhZ2VubyA9PSBwYWdlbm8gJiYKKwkJQnVmZmVy SXNWYWxpZChidWZmZXIpICYmCisJCVJlYWRSZWNlbnRCdWZmZXIocmxvY2F0b3IsIE1BSU5fRk9S S05VTSwgcGFnZW5vLCBidWZmZXIpKQorCXsKKwkJcGdzdGF0X2NvdW50X3NscnVfcGFnZV9oaXQo c2xydV9pZCk7CisJCXJldHVybiBidWZmZXI7CisJfQorCisJLyogUmVndWxhciBsb29rdXAuICov CisJYnVmZmVyID0gUmVhZEJ1ZmZlcldpdGhvdXRSZWxjYWNoZVdpdGhIaXQocmxvY2F0b3IsIE1B SU5fRk9SS05VTSwgcnBhZ2VubywKKwkJCQkJCQkJCQkJICBtb2RlLCBOVUxMLCB0cnVlLCAmaGl0 KTsKKworCS8qIFJlbWVtYmVyIHdoZXJlIHRoaXMgcGFnZSBpcyBmb3IgbmV4dCB0aW1lLiAqLwor CXNscnVfcmVjZW50X2J1ZmZlcnNbc2xydV9pZF0ucGFnZW5vID0gcGFnZW5vOworCXNscnVfcmVj ZW50X2J1ZmZlcnNbc2xydV9pZF0ucmVjZW50X2J1ZmZlciA9IGJ1ZmZlcjsKKworCWlmIChoaXQp CisJCXBnc3RhdF9jb3VudF9zbHJ1X3BhZ2VfaGl0KHNscnVfaWQpOworCisJcmV0dXJuIGJ1ZmZl cjsKK30KKworLyoKKyAqIFplcm8taW5pdGlhbGl6ZSBhIGJ1ZmZlci4gIEJ1ZmZlciBpcyBwaW5u ZWQgYW5kIGV4Y2x1c2l2ZWx5IGxvY2tlZCBvbiByZXR1cm4uCiAgKi8KLWludAotU2xydVN5bmNG aWxlVGFnKFNscnVDdGwgY3RsLCBjb25zdCBGaWxlVGFnICpmdGFnLCBjaGFyICpwYXRoKQorQnVm ZmVyCitaZXJvU2xydUJ1ZmZlcihpbnQgc2xydV9pZCwgaW50IHBhZ2VubykKIHsKLQlpbnQJCQlm ZDsKLQlpbnQJCQlzYXZlX2Vycm5vOwotCWludAkJCXJlc3VsdDsKKwlpbnQJCQlzZWdubyA9IHBh Z2VubyAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7CisJaW50CQkJcnBhZ2VubyA9IHBhZ2VubyAl IFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7CisJUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IgPSBTbHJ1 UmVsRmlsZUxvY2F0b3Ioc2xydV9pZCwgc2Vnbm8pOworCUJ1ZmZlcgkJYnVmZmVyOworCVNNZ3JG aWxlSGFuZGxlIHNmaWxlOwogCi0JU2xydUZpbGVOYW1lKGN0bCwgcGF0aCwgZnRhZy0+c2Vnbm8p OworCXNmaWxlID0gc21ncm9wZW4ocmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIE1BSU5fRk9S S05VTSk7CisJaWYgKCFzbWdyZXhpc3RzKHNmaWxlKSkKKwkJc21ncmNyZWF0ZShzZmlsZSwgZmFs c2UpOworCQorCWJ1ZmZlciA9IFJlYWRCdWZmZXJXaXRob3V0UmVsY2FjaGUocmxvY2F0b3IsIE1B SU5fRk9SS05VTSwgcnBhZ2VubywgUkJNX1pFUk9fQU5EX0xPQ0ssIE5VTEwsIHRydWUpOwogCi0J ZmQgPSBPcGVuVHJhbnNpZW50RmlsZShwYXRoLCBPX1JEV1IgfCBQR19CSU5BUlkpOwotCWlmIChm ZCA8IDApCi0JCXJldHVybiAtMTsKKwkvKiBSZW1lbWJlciB3aGVyZSB0aGlzIHBhZ2UgaXMgZm9y IG5leHQgdGltZS4gKi8KKwlzbHJ1X3JlY2VudF9idWZmZXJzW3NscnVfaWRdLnBhZ2VubyA9IHBh Z2VubzsKKwlzbHJ1X3JlY2VudF9idWZmZXJzW3NscnVfaWRdLnJlY2VudF9idWZmZXIgPSBidWZm ZXI7CiAKLQlyZXN1bHQgPSBwZ19mc3luYyhmZCk7Ci0Jc2F2ZV9lcnJubyA9IGVycm5vOworCXBn c3RhdF9jb3VudF9zbHJ1X3BhZ2VfemVyb2VkKHNscnVfaWQpOwogCi0JQ2xvc2VUcmFuc2llbnRG aWxlKGZkKTsKKwlyZXR1cm4gYnVmZmVyOworfQorCitib29sCitQcm9iZVNscnVCdWZmZXIoaW50 IHNscnVfaWQsIGludCBwYWdlbm8pCit7CisJaW50CQkJc2Vnbm8gPSBwYWdlbm8gLyBTTFJVX1BB R0VTX1BFUl9TRUdNRU5UOworCWludAkJCXJwYWdlbm8gPSBwYWdlbm8gJSBTTFJVX1BBR0VTX1BF Ul9TRUdNRU5UOworCVJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yID0gU2xydVJlbEZpbGVMb2NhdG9y KHNscnVfaWQsIHNlZ25vKTsKIAotCWVycm5vID0gc2F2ZV9lcnJubzsKLQlyZXR1cm4gcmVzdWx0 OworCXJldHVybiBCdWZmZXJQcm9iZShybG9jYXRvciwgTUFJTl9GT1JLTlVNLCBycGFnZW5vKTsK IH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3N1YnRyYW5zLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zdWJ0cmFucy5jCmluZGV4IDY2ZDM1NDgxNTUyLi40 N2UwMGMxODc2NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc3VidHJh bnMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zdWJ0cmFucy5jCkBAIC0zMiw2 ICszMiw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3N1YnRyYW5zLmgiCiAjaW5jbHVkZSAiYWNjZXNz L3RyYW5zYW0uaCIKICNpbmNsdWRlICJwZ190cmFjZS5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYnVm bWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgogCiAKQEAgLTQ5LDIxICs1MCwxMyBA QAogICovCiAKIC8qIFdlIG5lZWQgZm91ciBieXRlcyBwZXIgeGFjdCAqLwotI2RlZmluZSBTVUJU UkFOU19YQUNUU19QRVJfUEFHRSAoQkxDS1NaIC8gc2l6ZW9mKFRyYW5zYWN0aW9uSWQpKQorI2Rl ZmluZSBTVUJUUkFOU19YQUNUU19QRVJfUEFHRSAoKEJMQ0tTWiAtIFNpemVPZlBhZ2VIZWFkZXJE YXRhKSAvIHNpemVvZihUcmFuc2FjdGlvbklkKSkKIAogI2RlZmluZSBUcmFuc2FjdGlvbklkVG9Q YWdlKHhpZCkgKCh4aWQpIC8gKFRyYW5zYWN0aW9uSWQpIFNVQlRSQU5TX1hBQ1RTX1BFUl9QQUdF KQogI2RlZmluZSBUcmFuc2FjdGlvbklkVG9FbnRyeSh4aWQpICgoeGlkKSAlIChUcmFuc2FjdGlv bklkKSBTVUJUUkFOU19YQUNUU19QRVJfUEFHRSkKIAogCi0vKgotICogTGluayB0byBzaGFyZWQt bWVtb3J5IGRhdGEgc3RydWN0dXJlcyBmb3IgU1VCVFJBTlMgY29udHJvbAotICovCi1zdGF0aWMg U2xydUN0bERhdGEgU3ViVHJhbnNDdGxEYXRhOwotCi0jZGVmaW5lIFN1YlRyYW5zQ3RsICAoJlN1 YlRyYW5zQ3RsRGF0YSkKLQotCi1zdGF0aWMgaW50CVplcm9TVUJUUkFOU1BhZ2UoaW50IHBhZ2Vu byk7CitzdGF0aWMgQnVmZmVyIFplcm9TVUJUUkFOU1BhZ2UoaW50IHBhZ2Vubyk7CiBzdGF0aWMg Ym9vbCBTdWJUcmFuc1BhZ2VQcmVjZWRlcyhpbnQgcGFnZTEsIGludCBwYWdlMik7CiAKIApAQCAt NzUsMTYgKzY4LDE1IEBAIFN1YlRyYW5zU2V0UGFyZW50KFRyYW5zYWN0aW9uSWQgeGlkLCBUcmFu c2FjdGlvbklkIHBhcmVudCkKIHsKIAlpbnQJCQlwYWdlbm8gPSBUcmFuc2FjdGlvbklkVG9QYWdl KHhpZCk7CiAJaW50CQkJZW50cnlubyA9IFRyYW5zYWN0aW9uSWRUb0VudHJ5KHhpZCk7Ci0JaW50 CQkJc2xvdG5vOwogCVRyYW5zYWN0aW9uSWQgKnB0cjsKKwlCdWZmZXIJCWJ1ZmZlcjsKIAogCUFz c2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChwYXJlbnQpKTsKIAlBc3NlcnQoVHJhbnNhY3Rpb25J ZEZvbGxvd3MoeGlkLCBwYXJlbnQpKTsKIAotCUxXTG9ja0FjcXVpcmUoU3VidHJhbnNTTFJVTG9j aywgTFdfRVhDTFVTSVZFKTsKLQotCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKFN1YlRyYW5z Q3RsLCBwYWdlbm8sIHRydWUsIHhpZCk7Ci0JcHRyID0gKFRyYW5zYWN0aW9uSWQgKikgU3ViVHJh bnNDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXTsKKwlidWZmZXIgPSBSZWFkU2xydUJ1 ZmZlcihTTFJVX1NVQlRSQU5TX0lELCBwYWdlbm8sIFJCTV9OT1JNQUwpOworCUxvY2tCdWZmZXIo YnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUpOworCXB0ciA9IChUcmFuc2FjdGlvbklkICop IFBhZ2VHZXRDb250ZW50cyhCdWZmZXJHZXRQYWdlKGJ1ZmZlcikpOwogCXB0ciArPSBlbnRyeW5v OwogCiAJLyoKQEAgLTk2LDEwICs4OCwxMCBAQCBTdWJUcmFuc1NldFBhcmVudChUcmFuc2FjdGlv bklkIHhpZCwgVHJhbnNhY3Rpb25JZCBwYXJlbnQpCiAJewogCQlBc3NlcnQoKnB0ciA9PSBJbnZh bGlkVHJhbnNhY3Rpb25JZCk7CiAJCSpwdHIgPSBwYXJlbnQ7Ci0JCVN1YlRyYW5zQ3RsLT5zaGFy ZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSA9IHRydWU7CisJCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIp OwogCX0KIAotCUxXTG9ja1JlbGVhc2UoU3VidHJhbnNTTFJVTG9jayk7CisJVW5sb2NrUmVsZWFz ZUJ1ZmZlcihidWZmZXIpOwogfQogCiAvKgpAQCAtMTEwLDkgKzEwMiw5IEBAIFN1YlRyYW5zR2V0 UGFyZW50KFRyYW5zYWN0aW9uSWQgeGlkKQogewogCWludAkJCXBhZ2VubyA9IFRyYW5zYWN0aW9u SWRUb1BhZ2UoeGlkKTsKIAlpbnQJCQllbnRyeW5vID0gVHJhbnNhY3Rpb25JZFRvRW50cnkoeGlk KTsKLQlpbnQJCQlzbG90bm87CiAJVHJhbnNhY3Rpb25JZCAqcHRyOwogCVRyYW5zYWN0aW9uSWQg cGFyZW50OworCUJ1ZmZlcgkJYnVmZmVyOwogCiAJLyogQ2FuJ3QgYXNrIGFib3V0IHN0dWZmIHRo YXQgbWlnaHQgbm90IGJlIGFyb3VuZCBhbnltb3JlICovCiAJQXNzZXJ0KFRyYW5zYWN0aW9uSWRG b2xsb3dzT3JFcXVhbHMoeGlkLCBUcmFuc2FjdGlvblhtaW4pKTsKQEAgLTEyMSwxNSArMTEzLDE0 IEBAIFN1YlRyYW5zR2V0UGFyZW50KFRyYW5zYWN0aW9uSWQgeGlkKQogCWlmICghVHJhbnNhY3Rp b25JZElzTm9ybWFsKHhpZCkpCiAJCXJldHVybiBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKIAotCS8q IGxvY2sgaXMgYWNxdWlyZWQgYnkgU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkgKi8KKwlidWZm ZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX1NVQlRSQU5TX0lELCBwYWdlbm8sIFJCTV9OT1JNQUwp OwogCi0Jc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkoU3ViVHJhbnNDdGwsIHBh Z2VubywgeGlkKTsKLQlwdHIgPSAoVHJhbnNhY3Rpb25JZCAqKSBTdWJUcmFuc0N0bC0+c2hhcmVk LT5wYWdlX2J1ZmZlcltzbG90bm9dOworCXB0ciA9IChUcmFuc2FjdGlvbklkICopIFBhZ2VHZXRD b250ZW50cyhCdWZmZXJHZXRQYWdlKGJ1ZmZlcikpOwogCXB0ciArPSBlbnRyeW5vOwogCiAJcGFy ZW50ID0gKnB0cjsKIAotCUxXTG9ja1JlbGVhc2UoU3VidHJhbnNTTFJVTG9jayk7CisJUmVsZWFz ZUJ1ZmZlcihidWZmZXIpOwogCiAJcmV0dXJuIHBhcmVudDsKIH0KQEAgLTE3NywyNiArMTY4LDYg QEAgU3ViVHJhbnNHZXRUb3Btb3N0VHJhbnNhY3Rpb24oVHJhbnNhY3Rpb25JZCB4aWQpCiAJcmV0 dXJuIHByZXZpb3VzWGlkOwogfQogCi0KLS8qCi0gKiBJbml0aWFsaXphdGlvbiBvZiBzaGFyZWQg bWVtb3J5IGZvciBTVUJUUkFOUwotICovCi1TaXplCi1TVUJUUkFOU1NobWVtU2l6ZSh2b2lkKQot ewotCXJldHVybiBTaW1wbGVMcnVTaG1lbVNpemUoTlVNX1NVQlRSQU5TX0JVRkZFUlMsIDApOwot fQotCi12b2lkCi1TVUJUUkFOU1NobWVtSW5pdCh2b2lkKQotewotCVN1YlRyYW5zQ3RsLT5QYWdl UHJlY2VkZXMgPSBTdWJUcmFuc1BhZ2VQcmVjZWRlczsKLQlTaW1wbGVMcnVJbml0KFN1YlRyYW5z Q3RsLCAiU3VidHJhbnMiLCBOVU1fU1VCVFJBTlNfQlVGRkVSUywgMCwKLQkJCQkgIFN1YnRyYW5z U0xSVUxvY2ssICJwZ19zdWJ0cmFucyIsCi0JCQkJICBMV1RSQU5DSEVfU1VCVFJBTlNfQlVGRkVS LCBTWU5DX0hBTkRMRVJfTk9ORSk7Ci0JU2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cyhTdWJUcmFu c0N0bCwgU1VCVFJBTlNfWEFDVFNfUEVSX1BBR0UpOwotfQotCiAvKgogICogVGhpcyBmdW5jIG11 c3QgYmUgY2FsbGVkIE9OQ0Ugb24gc3lzdGVtIGluc3RhbGwuICBJdCBjcmVhdGVzCiAgKiB0aGUg aW5pdGlhbCBTVUJUUkFOUyBzZWdtZW50LiAgKFRoZSBTVUJUUkFOUyBkaXJlY3RvcnkgaXMgYXNz dW1lZCB0bwpAQCAtMjEwLDE4ICsxODEsMTYgQEAgU1VCVFJBTlNTaG1lbUluaXQodm9pZCkKIHZv aWQKIEJvb3RTdHJhcFNVQlRSQU5TKHZvaWQpCiB7Ci0JaW50CQkJc2xvdG5vOworCUJ1ZmZlcgkJ YnVmZmVyOwogCi0JTFdMb2NrQWNxdWlyZShTdWJ0cmFuc1NMUlVMb2NrLCBMV19FWENMVVNJVkUp OworCVNscnVQYWdlUHJlY2VkZXNVbml0VGVzdHMoU3ViVHJhbnNQYWdlUHJlY2VkZXMsIFNVQlRS QU5TX1hBQ1RTX1BFUl9QQUdFKTsKIAogCS8qIENyZWF0ZSBhbmQgemVybyB0aGUgZmlyc3QgcGFn ZSBvZiB0aGUgc3VidHJhbnMgbG9nICovCi0Jc2xvdG5vID0gWmVyb1NVQlRSQU5TUGFnZSgwKTsK KwlidWZmZXIgPSBaZXJvU1VCVFJBTlNQYWdlKDApOwogCiAJLyogTWFrZSBzdXJlIGl0J3Mgd3Jp dHRlbiBvdXQgKi8KLQlTaW1wbGVMcnVXcml0ZVBhZ2UoU3ViVHJhbnNDdGwsIHNsb3Rubyk7Ci0J QXNzZXJ0KCFTdWJUcmFuc0N0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10pOwotCi0JTFdM b2NrUmVsZWFzZShTdWJ0cmFuc1NMUlVMb2NrKTsKKwlGbHVzaE9uZUJ1ZmZlcihidWZmZXIpOwor CVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIH0KIAogLyoKQEAgLTIzMiwxMCArMjAxLDE5 IEBAIEJvb3RTdHJhcFNVQlRSQU5TKHZvaWQpCiAgKgogICogQ29udHJvbCBsb2NrIG11c3QgYmUg aGVsZCBhdCBlbnRyeSwgYW5kIHdpbGwgYmUgaGVsZCBhdCBleGl0LgogICovCi1zdGF0aWMgaW50 CitzdGF0aWMgQnVmZmVyCiBaZXJvU1VCVFJBTlNQYWdlKGludCBwYWdlbm8pCiB7Ci0JcmV0dXJu IFNpbXBsZUxydVplcm9QYWdlKFN1YlRyYW5zQ3RsLCBwYWdlbm8pOworCUJ1ZmZlcgkJYnVmZmVy OworCVBhZ2UJCXBhZ2U7CisKKwlidWZmZXIgPSBaZXJvU2xydUJ1ZmZlcihTTFJVX1NVQlRSQU5T X0lELCBwYWdlbm8pOworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7CisJUGFnZUluaXRT TFJVKHBhZ2UsIEJMQ0tTWiwgMCk7CisKKwlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKKworCXJl dHVybiBidWZmZXI7CiB9CiAKIC8qCkBAIC0yNTgsNyArMjM2LDYgQEAgU3RhcnR1cFNVQlRSQU5T KFRyYW5zYWN0aW9uSWQgb2xkZXN0QWN0aXZlWElEKQogCSAqIFdoZW5ldmVyIHdlIGFkdmFuY2Ug aW50byBhIG5ldyBwYWdlLCBFeHRlbmRTVUJUUkFOUyB3aWxsIGxpa2V3aXNlIHplcm8KIAkgKiB0 aGUgbmV3IHBhZ2Ugd2l0aG91dCByZWdhcmQgdG8gd2hhdGV2ZXIgd2FzIHByZXZpb3VzbHkgb24g ZGlzay4KIAkgKi8KLQlMV0xvY2tBY3F1aXJlKFN1YnRyYW5zU0xSVUxvY2ssIExXX0VYQ0xVU0lW RSk7CiAKIAlzdGFydFBhZ2UgPSBUcmFuc2FjdGlvbklkVG9QYWdlKG9sZGVzdEFjdGl2ZVhJRCk7 CiAJbmV4dFhpZCA9IFNobWVtVmFyaWFibGVDYWNoZS0+bmV4dFhpZDsKQEAgLTI2NiwzNiArMjQz LDE1IEBAIFN0YXJ0dXBTVUJUUkFOUyhUcmFuc2FjdGlvbklkIG9sZGVzdEFjdGl2ZVhJRCkKIAog CXdoaWxlIChzdGFydFBhZ2UgIT0gZW5kUGFnZSkKIAl7Ci0JCSh2b2lkKSBaZXJvU1VCVFJBTlNQ YWdlKHN0YXJ0UGFnZSk7CisJCVVubG9ja1JlbGVhc2VCdWZmZXIoWmVyb1NVQlRSQU5TUGFnZShz dGFydFBhZ2UpKTsKIAkJc3RhcnRQYWdlKys7CiAJCS8qIG11c3QgYWNjb3VudCBmb3Igd3JhcGFy b3VuZCAqLwogCQlpZiAoc3RhcnRQYWdlID4gVHJhbnNhY3Rpb25JZFRvUGFnZShNYXhUcmFuc2Fj dGlvbklkKSkKIAkJCXN0YXJ0UGFnZSA9IDA7CiAJfQotCSh2b2lkKSBaZXJvU1VCVFJBTlNQYWdl KHN0YXJ0UGFnZSk7Ci0KLQlMV0xvY2tSZWxlYXNlKFN1YnRyYW5zU0xSVUxvY2spOwotfQotCi0v KgotICogUGVyZm9ybSBhIGNoZWNrcG9pbnQgLS0tIGVpdGhlciBkdXJpbmcgc2h1dGRvd24sIG9y IG9uLXRoZS1mbHkKLSAqLwotdm9pZAotQ2hlY2tQb2ludFNVQlRSQU5TKHZvaWQpCi17Ci0JLyoK LQkgKiBXcml0ZSBkaXJ0eSBTVUJUUkFOUyBwYWdlcyB0byBkaXNrCi0JICoKLQkgKiBUaGlzIGlz IG5vdCBhY3R1YWxseSBuZWNlc3NhcnkgZnJvbSBhIGNvcnJlY3RuZXNzIHBvaW50IG9mIHZpZXcu IFdlIGRvCi0JICogaXQgbWVyZWx5IHRvIGltcHJvdmUgdGhlIG9kZHMgdGhhdCB3cml0aW5nIG9m IGRpcnR5IHBhZ2VzIGlzIGRvbmUgYnkKLQkgKiB0aGUgY2hlY2twb2ludCBwcm9jZXNzIGFuZCBu b3QgYnkgYmFja2VuZHMuCi0JICovCi0JVFJBQ0VfUE9TVEdSRVNRTF9TVUJUUkFOU19DSEVDS1BP SU5UX1NUQVJUKHRydWUpOwotCVNpbXBsZUxydVdyaXRlQWxsKFN1YlRyYW5zQ3RsLCB0cnVlKTsK LQlUUkFDRV9QT1NUR1JFU1FMX1NVQlRSQU5TX0NIRUNLUE9JTlRfRE9ORSh0cnVlKTsKKwlVbmxv Y2tSZWxlYXNlQnVmZmVyKFplcm9TVUJUUkFOU1BhZ2Uoc3RhcnRQYWdlKSk7CiB9CiAKLQogLyoK ICAqIE1ha2Ugc3VyZSB0aGF0IFNVQlRSQU5TIGhhcyByb29tIGZvciBhIG5ld2x5LWFsbG9jYXRl ZCBYSUQuCiAgKgpAQCAtMzE5LDEyICsyNzUsOCBAQCBFeHRlbmRTVUJUUkFOUyhUcmFuc2FjdGlv bklkIG5ld2VzdFhhY3QpCiAKIAlwYWdlbm8gPSBUcmFuc2FjdGlvbklkVG9QYWdlKG5ld2VzdFhh Y3QpOwogCi0JTFdMb2NrQWNxdWlyZShTdWJ0cmFuc1NMUlVMb2NrLCBMV19FWENMVVNJVkUpOwot CiAJLyogWmVybyB0aGUgcGFnZSAqLwotCVplcm9TVUJUUkFOU1BhZ2UocGFnZW5vKTsKLQotCUxX TG9ja1JlbGVhc2UoU3VidHJhbnNTTFJVTG9jayk7CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihaZXJv U1VCVFJBTlNQYWdlKHBhZ2VubykpOwogfQogCiAKQEAgLTM1MCw3ICszMDIsNyBAQCBUcnVuY2F0 ZVNVQlRSQU5TKFRyYW5zYWN0aW9uSWQgb2xkZXN0WGFjdCkKIAlUcmFuc2FjdGlvbklkUmV0cmVh dChvbGRlc3RYYWN0KTsKIAljdXRvZmZQYWdlID0gVHJhbnNhY3Rpb25JZFRvUGFnZShvbGRlc3RY YWN0KTsKIAotCVNpbXBsZUxydVRydW5jYXRlKFN1YlRyYW5zQ3RsLCBjdXRvZmZQYWdlKTsKKwlT aW1wbGVMcnVUcnVuY2F0ZShTTFJVX1NVQlRSQU5TX0lELCBTdWJUcmFuc1BhZ2VQcmVjZWRlcywg Y3V0b2ZmUGFnZSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0veGFjdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jCmluZGV4IDgwODZi ODU3Yjk2Li5kNzkyMTg2Y2Y5NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0veGFjdC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYwpAQCAtNjcs NiArNjcsNyBAQAogI2luY2x1ZGUgInV0aWxzL2ludmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVt dXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9yZWxtYXBwZXIuaCIKKyNpbmNsdWRlICJ1dGlscy9y ZXNvd25lcl9wcml2YXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgogI2luY2x1ZGUg InV0aWxzL3RpbWVvdXQuaCIKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKQEAgLTEzOTYs NiArMTM5Nyw3IEBAIFJlY29yZFRyYW5zYWN0aW9uQ29tbWl0KHZvaWQpCiAJCSAqIGFyZSBkZWxh eWluZyB0aGUgY2hlY2twb2ludCBhIGJpdCBmdXp6eSwgYnV0IGl0IGRvZXNuJ3QgbWF0dGVyLgog CQkgKi8KIAkJQXNzZXJ0KChNeVByb2MtPmRlbGF5Q2hrcHRGbGFncyAmIERFTEFZX0NIS1BUX1NU QVJUKSA9PSAwKTsKKwogCQlTVEFSVF9DUklUX1NFQ1RJT04oKTsKIAkJTXlQcm9jLT5kZWxheUNo a3B0RmxhZ3MgfD0gREVMQVlfQ0hLUFRfU1RBUlQ7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cu YwppbmRleCBhMzFmYmJmZjc4ZC4uOWUyYWMwZDUzOTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94 bG9nLmMKQEAgLTQ2NDUsNiArNDY0NSw3IEBAIEJvb3RTdHJhcFhMT0codm9pZCkKIAl1aW50NjQJ CXN5c2lkZW50aWZpZXI7CiAJc3RydWN0IHRpbWV2YWwgdHY7CiAJcGdfY3JjMzJjCWNyYzsKKwlS ZXNvdXJjZU93bmVyIHJlc293bmVyOwogCiAJLyogYWxsb3cgb3JkaW5hcnkgV0FMIHNlZ21lbnQg Y3JlYXRpb24sIGxpa2UgU3RhcnR1cFhMT0coKSB3b3VsZCAqLwogCVNldEluc3RhbGxYTG9nRmls ZVNlZ21lbnRBY3RpdmUoKTsKQEAgLTQ3ODQsMTAgKzQ3ODUsMTQgQEAgQm9vdFN0cmFwWExPRyh2 b2lkKQogCVdyaXRlQ29udHJvbEZpbGUoKTsKIAogCS8qIEJvb3RzdHJhcCB0aGUgY29tbWl0IGxv ZywgdG9vICovCisJcmVzb3duZXIgPSBSZXNvdXJjZU93bmVyQ3JlYXRlKE5VTEwsICJib290c3Ry YXAgcmVzb3duZXIiKTsKKwlDdXJyZW50UmVzb3VyY2VPd25lciA9IHJlc293bmVyOwogCUJvb3RT dHJhcENMT0coKTsKIAlCb290U3RyYXBDb21taXRUcygpOwogCUJvb3RTdHJhcFNVQlRSQU5TKCk7 CiAJQm9vdFN0cmFwTXVsdGlYYWN0KCk7CisJQ3VycmVudFJlc291cmNlT3duZXIgPSBOVUxMOwor CVJlc291cmNlT3duZXJEZWxldGUocmVzb3duZXIpOwogCiAJcGZyZWUoYnVmZmVyKTsKIApAQCAt NDc5Niw2ICs0ODAxLDggQEAgQm9vdFN0cmFwWExPRyh2b2lkKQogCSAqIG90aGVyd2lzZSBuZXZl ciBydW4gdGhlIGNoZWNrcyBhbmQgR1VDIHJlbGF0ZWQgaW5pdGlhbGl6YXRpb25zIHRoZXJlaW4u CiAJICovCiAJUmVhZENvbnRyb2xGaWxlKCk7CisKKwlzbWdyY2xvc2VhbGwoKTsKIH0KIAogc3Rh dGljIGNoYXIgKgpAQCAtNzAwNCwxNSArNzAxMSwxMSBAQCBDaGVja1BvaW50R3V0cyhYTG9nUmVj UHRyIGNoZWNrUG9pbnRSZWRvLCBpbnQgZmxhZ3MpCiAJQ2hlY2tQb2ludFNuYXBCdWlsZCgpOwog CUNoZWNrUG9pbnRMb2dpY2FsUmV3cml0ZUhlYXAoKTsKIAlDaGVja1BvaW50UmVwbGljYXRpb25P cmlnaW4oKTsKKwlDaGVja1BvaW50UHJlZGljYXRlKCk7CiAKLQkvKiBXcml0ZSBvdXQgYWxsIGRp cnR5IGRhdGEgaW4gU0xSVXMgYW5kIHRoZSBtYWluIGJ1ZmZlciBwb29sICovCisJLyogV3JpdGUg b3V0IGFsbCBkaXJ0eSBkYXRhIGluIHRoZSBidWZmZXIgcG9vbCAqLwogCVRSQUNFX1BPU1RHUkVT UUxfQlVGRkVSX0NIRUNLUE9JTlRfU1RBUlQoZmxhZ3MpOwogCUNoZWNrcG9pbnRTdGF0cy5ja3B0 X3dyaXRlX3QgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7Ci0JQ2hlY2tQb2ludENMT0coKTsKLQlD aGVja1BvaW50Q29tbWl0VHMoKTsKLQlDaGVja1BvaW50U1VCVFJBTlMoKTsKLQlDaGVja1BvaW50 TXVsdGlYYWN0KCk7Ci0JQ2hlY2tQb2ludFByZWRpY2F0ZSgpOwogCUNoZWNrUG9pbnRCdWZmZXJz KGZsYWdzKTsKIAogCS8qIFBlcmZvcm0gYWxsIHF1ZXVlZCB1cCBmc3luY3MgKi8KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dwcmVmZXRjaGVyLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncHJlZmV0Y2hlci5jCmluZGV4IDBjZjAzOTQ1ZWVjLi5l N2IyYTJmOTI3MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3By ZWZldGNoZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncHJlZmV0Y2hl ci5jCkBAIC02NTIsNyArNjUyLDcgQEAgWExvZ1ByZWZldGNoZXJOZXh0QmxvY2sodWludHB0cl90 IHBnc3JfcHJpdmF0ZSwgWExvZ1JlY1B0ciAqbHNuKQogCQl7CiAJCQlpbnQJCQlibG9ja19pZCA9 IHByZWZldGNoZXItPm5leHRfYmxvY2tfaWQrKzsKIAkJCURlY29kZWRCa3BCbG9jayAqYmxvY2sg PSAmcmVjb3JkLT5ibG9ja3NbYmxvY2tfaWRdOwotCQkJU01nclJlbGF0aW9uIHJlbG47CisJCQlT TWdyRmlsZUhhbmRsZSBzZmlsZTsKIAkJCVByZWZldGNoQnVmZmVyUmVzdWx0IHJlc3VsdDsKIAog CQkJaWYgKCFibG9jay0+aW5fdXNlKQpAQCAtNzIyLDcgKzcyMiw3IEBAIFhMb2dQcmVmZXRjaGVy TmV4dEJsb2NrKHVpbnRwdHJfdCBwZ3NyX3ByaXZhdGUsIFhMb2dSZWNQdHIgKmxzbikKIAkJCSAq IHNhbWUgcmVsYXRpb24gKHdpdGggc29tZSBzY2hlbWUgdG8gaGFuZGxlIGludmFsaWRhdGlvbnMK IAkJCSAqIHNhZmVseSksIGJ1dCBmb3Igbm93IHdlJ2xsIGNhbGwgc21ncm9wZW4oKSBldmVyeSB0 aW1lLgogCQkJICovCi0JCQlyZWxuID0gc21ncm9wZW4oYmxvY2stPnJsb2NhdG9yLCBJbnZhbGlk QmFja2VuZElkKTsKKwkJCXNmaWxlID0gc21ncm9wZW4oYmxvY2stPnJsb2NhdG9yLCBJbnZhbGlk QmFja2VuZElkLCBibG9jay0+Zm9ya251bSk7CiAKIAkJCS8qCiAJCQkgKiBJZiB0aGUgcmVsYXRp b24gZmlsZSBkb2Vzbid0IGV4aXN0IG9uIGRpc2ssIGZvciBleGFtcGxlIGJlY2F1c2UKQEAgLTcz MSwxNCArNzMxLDE0IEBAIFhMb2dQcmVmZXRjaGVyTmV4dEJsb2NrKHVpbnRwdHJfdCBwZ3NyX3By aXZhdGUsIFhMb2dSZWNQdHIgKmxzbikKIAkJCSAqIGZ1cnRoZXIgcHJlZmV0Y2hpbmcgaW4gdGhl IHJlbGF0aW9uIHVudGlsIHRoaXMgcmVjb3JkIGlzCiAJCQkgKiByZXBsYXllZC4KIAkJCSAqLwot CQkJaWYgKCFzbWdyZXhpc3RzKHJlbG4sIE1BSU5fRk9SS05VTSkpCisJCQlpZiAoIXNtZ3JleGlz dHMoc2ZpbGUpKQogCQkJewogI2lmZGVmIFhMT0dQUkVGRVRDSEVSX0RFQlVHX0xFVkVMCiAJCQkJ ZWxvZyhYTE9HUFJFRkVUQ0hFUl9ERUJVR19MRVZFTCwKIAkJCQkJICJzdXBwcmVzc2luZyBhbGwg cHJlZmV0Y2ggaW4gcmVsYXRpb24gJXUvJXUvJXUgdW50aWwgJVgvJVggaXMgcmVwbGF5ZWQsIGJl Y2F1c2UgdGhlIHJlbGF0aW9uIGRvZXMgbm90IGV4aXN0IG9uIGRpc2siLAotCQkJCQkgcmVsbi0+ c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKLQkJCQkJIHJlbG4tPnNtZ3JfcmxvY2F0b3Iu bG9jYXRvci5kYk9pZCwKLQkJCQkJIHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1i ZXIsCisJCQkJCSBzZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKKwkJCQkJIHNm aWxlLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCisJCQkJCSBzZmlsZS0+c21ncl9ybG9j YXRvci5sb2NhdG9yLnJlbE51bWJlciwKIAkJCQkJIExTTl9GT1JNQVRfQVJHUyhyZWNvcmQtPmxz bikpOwogI2VuZGlmCiAJCQkJWExvZ1ByZWZldGNoZXJBZGRGaWx0ZXIocHJlZmV0Y2hlciwgYmxv Y2stPnJsb2NhdG9yLCAwLApAQCAtNzUyLDE0ICs3NTIsMTQgQEAgWExvZ1ByZWZldGNoZXJOZXh0 QmxvY2sodWludHB0cl90IHBnc3JfcHJpdmF0ZSwgWExvZ1JlY1B0ciAqbHNuKQogCQkJICogYmxv Y2sgeWV0LCBzdXBwcmVzcyBwcmVmZXRjaGluZyBvZiB0aGlzIGJsb2NrIGFuZCBoaWdoZXIgdW50 aWwKIAkJCSAqIHRoaXMgcmVjb3JkIGlzIHJlcGxheWVkLgogCQkJICovCi0JCQlpZiAoYmxvY2st PmJsa25vID49IHNtZ3JuYmxvY2tzKHJlbG4sIGJsb2NrLT5mb3JrbnVtKSkKKwkJCWlmIChibG9j ay0+Ymxrbm8gPj0gc21ncm5ibG9ja3Moc2ZpbGUpKQogCQkJewogI2lmZGVmIFhMT0dQUkVGRVRD SEVSX0RFQlVHX0xFVkVMCiAJCQkJZWxvZyhYTE9HUFJFRkVUQ0hFUl9ERUJVR19MRVZFTCwKIAkJ CQkJICJzdXBwcmVzc2luZyBwcmVmZXRjaCBpbiByZWxhdGlvbiAldS8ldS8ldSBmcm9tIGJsb2Nr ICV1IHVudGlsICVYLyVYIGlzIHJlcGxheWVkLCBiZWNhdXNlIHRoZSByZWxhdGlvbiBpcyB0b28g c21hbGwiLAotCQkJCQkgcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKLQkJCQkJ IHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCwKLQkJCQkJIHJlbG4tPnNtZ3Jfcmxv Y2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCisJCQkJCSBzZmlsZS0+c21ncl9ybG9jYXRvci5sb2Nh dG9yLnNwY09pZCwKKwkJCQkJIHNmaWxlLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCisJ CQkJCSBzZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwKIAkJCQkJIGJsb2Nr LT5ibGtubywKIAkJCQkJIExTTl9GT1JNQVRfQVJHUyhyZWNvcmQtPmxzbikpOwogI2VuZGlmCkBA IC03NzAsNyArNzcwLDcgQEAgWExvZ1ByZWZldGNoZXJOZXh0QmxvY2sodWludHB0cl90IHBnc3Jf cHJpdmF0ZSwgWExvZ1JlY1B0ciAqbHNuKQogCQkJfQogCiAJCQkvKiBUcnkgdG8gaW5pdGlhdGUg cHJlZmV0Y2hpbmcuICovCi0JCQlyZXN1bHQgPSBQcmVmZXRjaFNoYXJlZEJ1ZmZlcihyZWxuLCBi bG9jay0+Zm9ya251bSwgYmxvY2stPmJsa25vKTsKKwkJCXJlc3VsdCA9IFByZWZldGNoU2hhcmVk QnVmZmVyKHNmaWxlLCBibG9jay0+Ymxrbm8pOwogCQkJaWYgKEJ1ZmZlcklzVmFsaWQocmVzdWx0 LnJlY2VudF9idWZmZXIpKQogCQkJewogCQkJCS8qIENhY2hlIGhpdCwgbm90aGluZyB0byBkby4g Ki8KQEAgLTc5Niw5ICs3OTYsOSBAQCBYTG9nUHJlZmV0Y2hlck5leHRCbG9jayh1aW50cHRyX3Qg cGdzcl9wcml2YXRlLCBYTG9nUmVjUHRyICpsc24pCiAJCQkJICovCiAJCQkJZWxvZyhFUlJPUiwK IAkJCQkJICJjb3VsZCBub3QgcHJlZmV0Y2ggcmVsYXRpb24gJXUvJXUvJXUgYmxvY2sgJXUiLAot CQkJCQkgcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKLQkJCQkJIHJlbG4tPnNt Z3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCwKLQkJCQkJIHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9j YXRvci5yZWxOdW1iZXIsCisJCQkJCSBzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3Iuc3BjT2lk LAorCQkJCQkgc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2NhdG9yLmRiT2lkLAorCQkJCQkgc2ZpbGUt PnNtZ3JfbG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwKIAkJCQkJIGJsb2NrLT5ibGtubyk7CiAJ CQl9CiAJCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2d1dGls cy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3V0aWxzLmMKaW5kZXggNTYzY2Jh MjU4ZGQuLmFiNTliZmU2NmM5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS94bG9ndXRpbHMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ndXRpbHMu YwpAQCAtNDc3LDcgKzQ3Nyw3IEBAIFhMb2dSZWFkQnVmZmVyRXh0ZW5kZWQoUmVsRmlsZUxvY2F0 b3IgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya251bSwKIHsKIAlCbG9ja051bWJlciBsYXN0Ymxv Y2s7CiAJQnVmZmVyCQlidWZmZXI7Ci0JU01nclJlbGF0aW9uIHNtZ3I7CisJU01nckZpbGVIYW5k bGUgc2ZpbGU7CiAKIAlBc3NlcnQoYmxrbm8gIT0gUF9ORVcpOwogCkBAIC00OTEsNyArNDkxLDcg QEAgWExvZ1JlYWRCdWZmZXJFeHRlbmRlZChSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgRm9ya051 bWJlciBmb3JrbnVtLAogCX0KIAogCS8qIE9wZW4gdGhlIHJlbGF0aW9uIGF0IHNtZ3IgbGV2ZWwg Ki8KLQlzbWdyID0gc21ncm9wZW4ocmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQpOworCXNmaWxl ID0gc21ncm9wZW4ocmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIGZvcmtudW0pOwogCiAJLyoK IAkgKiBDcmVhdGUgdGhlIHRhcmdldCBmaWxlIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4g IFRoaXMgbGV0cyB1cyBjb3BlCkBAIC01MDEsOSArNTAxLDkgQEAgWExvZ1JlYWRCdWZmZXJFeHRl bmRlZChSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgRm9ya051bWJlciBmb3JrbnVtLAogCSAqIGZp bGVzeXN0ZW0gbG9zZXMgYW4gaW5vZGUgZHVyaW5nIGEgY3Jhc2guICBCZXR0ZXIgdG8gd3JpdGUg dGhlIGRhdGEKIAkgKiB1bnRpbCB3ZSBhcmUgYWN0dWFsbHkgdG9sZCB0byBkZWxldGUgdGhlIGZp bGUuKQogCSAqLwotCXNtZ3JjcmVhdGUoc21nciwgZm9ya251bSwgdHJ1ZSk7CisJc21ncmNyZWF0 ZShzZmlsZSwgdHJ1ZSk7CiAKLQlsYXN0YmxvY2sgPSBzbWdybmJsb2NrcyhzbWdyLCBmb3JrbnVt KTsKKwlsYXN0YmxvY2sgPSBzbWdybmJsb2NrcyhzZmlsZSk7CiAKIAlpZiAoYmxrbm8gPCBsYXN0 YmxvY2spCiAJewpAQCAtNjMxLDcgKzYzMSw3IEBAIENyZWF0ZUZha2VSZWxjYWNoZUVudHJ5KFJl bEZpbGVMb2NhdG9yIHJsb2NhdG9yKQogCXJlbC0+cmRfbG9ja0luZm8ubG9ja1JlbElkLmRiSWQg PSBybG9jYXRvci5kYk9pZDsKIAlyZWwtPnJkX2xvY2tJbmZvLmxvY2tSZWxJZC5yZWxJZCA9IHJs b2NhdG9yLnJlbE51bWJlcjsKIAotCXJlbC0+cmRfc21nciA9IE5VTEw7CisJTWVtU2V0KHJlbC0+ cmRfc21nciwgMCwgc2l6ZW9mKHJlbC0+cmRfc21ncikpOwogCiAJcmV0dXJuIHJlbDsKIH0KQEAg LTY0Myw4ICs2NDMsMTEgQEAgdm9pZAogRnJlZUZha2VSZWxjYWNoZUVudHJ5KFJlbGF0aW9uIGZh a2VyZWwpCiB7CiAJLyogbWFrZSBzdXJlIHRoZSBmYWtlcmVsIGlzIG5vdCByZWZlcmVuY2VkIGJ5 IHRoZSBTbWdyUmVsYXRpb24gYW55bW9yZSAqLwotCWlmIChmYWtlcmVsLT5yZF9zbWdyICE9IE5V TEwpCi0JCXNtZ3JjbGVhcm93bmVyKCZmYWtlcmVsLT5yZF9zbWdyLCBmYWtlcmVsLT5yZF9zbWdy KTsKKwlmb3IgKGludCBpID0gMDsgaSA8PSBNQVhfRk9SS05VTTsgaSsrKQorCXsKKwkJaWYgKGZh a2VyZWwtPnJkX3NtZ3JbaV0gIT0gTlVMTCkKKwkJCXNtZ3JjbGVhcm93bmVyKCZmYWtlcmVsLT5y ZF9zbWdyW2ldLCBmYWtlcmVsLT5yZF9zbWdyW2ldKTsKKwl9CiAJcGZyZWUoZmFrZXJlbCk7CiB9 CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvY2F0YWxvZy5jIGIvc3JjL2JhY2tl bmQvY2F0YWxvZy9jYXRhbG9nLmMKaW5kZXggMmFiZDZiMDA3YTIuLmY1MzZjZmMyYTliIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2NhdGFsb2cuYworKysgYi9zcmMvYmFja2VuZC9j YXRhbG9nL2NhdGFsb2cuYwpAQCAtNTAxLDEwICs1MDEsMTAgQEAgR2V0TmV3T2lkV2l0aEluZGV4 KFJlbGF0aW9uIHJlbGF0aW9uLCBPaWQgaW5kZXhJZCwgQXR0ck51bWJlciBvaWRjb2x1bW4pCiBS ZWxGaWxlTnVtYmVyCiBHZXROZXdSZWxGaWxlTnVtYmVyKE9pZCByZWx0YWJsZXNwYWNlLCBSZWxh dGlvbiBwZ19jbGFzcywgY2hhciByZWxwZXJzaXN0ZW5jZSkKIHsKLQlSZWxGaWxlTG9jYXRvckJh Y2tlbmQgcmxvY2F0b3I7Ci0JY2hhcgkgICAqcnBhdGg7Ci0JYm9vbAkJY29sbGlkZXM7CisJUmVs RmlsZUxvY2F0b3IgcmxvY2F0b3I7CiAJQmFja2VuZElkCWJhY2tlbmQ7CisJU01nckZpbGVIYW5k bGUgc2ZpbGU7CisJYm9vbAkJY29sbGlkZXM7CiAKIAkvKgogCSAqIElmIHdlIGV2ZXIgZ2V0IGhl cmUgZHVyaW5nIHBnX3VwZ3JhZGUsIHRoZXJlJ3Mgc29tZXRoaW5nIHdyb25nOyBhbGwKQEAgLTUx Myw2ICs1MTMsMTEgQEAgR2V0TmV3UmVsRmlsZU51bWJlcihPaWQgcmVsdGFibGVzcGFjZSwgUmVs YXRpb24gcGdfY2xhc3MsIGNoYXIgcmVscGVyc2lzdGVuY2UpCiAJICovCiAJQXNzZXJ0KCFJc0Jp bmFyeVVwZ3JhZGUpOwogCisJLyoKKwkgKiBUaGUgcmVscGF0aCB3aWxsIHZhcnkgYmFzZWQgb24g dGhlIGJhY2tlbmQgSUQsIHNvIHdlIG11c3QgaW5pdGlhbGl6ZQorCSAqIHRoYXQgcHJvcGVybHkg aGVyZSB0byBtYWtlIHN1cmUgdGhhdCBhbnkgY29sbGlzaW9ucyBiYXNlZCBvbiBmaWxlbmFtZQor CSAqIGFyZSBwcm9wZXJseSBkZXRlY3RlZC4KKwkgKi8KIAlzd2l0Y2ggKHJlbHBlcnNpc3RlbmNl KQogCXsKIAkJY2FzZSBSRUxQRVJTSVNURU5DRV9URU1QOgpAQCAtNTI4LDUzICs1MzMsMjkgQEAg R2V0TmV3UmVsRmlsZU51bWJlcihPaWQgcmVsdGFibGVzcGFjZSwgUmVsYXRpb24gcGdfY2xhc3Ms IGNoYXIgcmVscGVyc2lzdGVuY2UpCiAJfQogCiAJLyogVGhpcyBsb2dpYyBzaG91bGQgbWF0Y2gg UmVsYXRpb25Jbml0UGh5c2ljYWxBZGRyICovCi0JcmxvY2F0b3IubG9jYXRvci5zcGNPaWQgPSBy ZWx0YWJsZXNwYWNlID8gcmVsdGFibGVzcGFjZSA6IE15RGF0YWJhc2VUYWJsZVNwYWNlOwotCXJs b2NhdG9yLmxvY2F0b3IuZGJPaWQgPQotCQkocmxvY2F0b3IubG9jYXRvci5zcGNPaWQgPT0gR0xP QkFMVEFCTEVTUEFDRV9PSUQpID8KKwlybG9jYXRvci5zcGNPaWQgPSByZWx0YWJsZXNwYWNlID8g cmVsdGFibGVzcGFjZSA6IE15RGF0YWJhc2VUYWJsZVNwYWNlOworCXJsb2NhdG9yLmRiT2lkID0K KwkJKHJsb2NhdG9yLnNwY09pZCA9PSBHTE9CQUxUQUJMRVNQQUNFX09JRCkgPwogCQlJbnZhbGlk T2lkIDogTXlEYXRhYmFzZUlkOwogCi0JLyoKLQkgKiBUaGUgcmVscGF0aCB3aWxsIHZhcnkgYmFz ZWQgb24gdGhlIGJhY2tlbmQgSUQsIHNvIHdlIG11c3QgaW5pdGlhbGl6ZQotCSAqIHRoYXQgcHJv cGVybHkgaGVyZSB0byBtYWtlIHN1cmUgdGhhdCBhbnkgY29sbGlzaW9ucyBiYXNlZCBvbiBmaWxl bmFtZQotCSAqIGFyZSBwcm9wZXJseSBkZXRlY3RlZC4KLQkgKi8KLQlybG9jYXRvci5iYWNrZW5k ID0gYmFja2VuZDsKLQogCWRvCiAJewogCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCiAJCS8q IEdlbmVyYXRlIHRoZSBPSUQgKi8KIAkJaWYgKHBnX2NsYXNzKQotCQkJcmxvY2F0b3IubG9jYXRv ci5yZWxOdW1iZXIgPSBHZXROZXdPaWRXaXRoSW5kZXgocGdfY2xhc3MsIENsYXNzT2lkSW5kZXhJ ZCwKKwkJCXJsb2NhdG9yLnJlbE51bWJlciA9IEdldE5ld09pZFdpdGhJbmRleChwZ19jbGFzcywg Q2xhc3NPaWRJbmRleElkLAogCQkJCQkJCQkJCQkJCQkJQW51bV9wZ19jbGFzc19vaWQpOwogCQll bHNlCi0JCQlybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciA9IEdldE5ld09iamVjdElkKCk7CisJ CQlybG9jYXRvci5yZWxOdW1iZXIgPSBHZXROZXdPYmplY3RJZCgpOwogCiAJCS8qIENoZWNrIGZv ciBleGlzdGluZyBmaWxlIG9mIHNhbWUgbmFtZSAqLwotCQlycGF0aCA9IHJlbHBhdGgocmxvY2F0 b3IsIE1BSU5fRk9SS05VTSk7Ci0KLQkJaWYgKGFjY2VzcyhycGF0aCwgRl9PSykgPT0gMCkKLQkJ ewotCQkJLyogZGVmaW5pdGUgY29sbGlzaW9uICovCi0JCQljb2xsaWRlcyA9IHRydWU7Ci0JCX0K LQkJZWxzZQotCQl7Ci0JCQkvKgotCQkJICogSGVyZSB3ZSBoYXZlIGEgbGl0dGxlIGJpdCBvZiBh IGRpbGVtbWE6IGlmIGVycm5vIGlzIHNvbWV0aGluZwotCQkJICogb3RoZXIgdGhhbiBFTk9FTlQs IHNob3VsZCB3ZSBkZWNsYXJlIGEgY29sbGlzaW9uIGFuZCBsb29wPyBJbgotCQkJICogcHJhY3Rp Y2UgaXQgc2VlbXMgYmVzdCB0byBnbyBhaGVhZCByZWdhcmRsZXNzIG9mIHRoZSBlcnJuby4gIElm Ci0JCQkgKiB0aGVyZSBpcyBhIGNvbGxpZGluZyBmaWxlIHdlIHdpbGwgZ2V0IGFuIHNtZ3IgZmFp bHVyZSB3aGVuIHdlCi0JCQkgKiBhdHRlbXB0IHRvIGNyZWF0ZSB0aGUgbmV3IHJlbGF0aW9uIGZp bGUuCi0JCQkgKi8KLQkJCWNvbGxpZGVzID0gZmFsc2U7Ci0JCX0KLQotCQlwZnJlZShycGF0aCk7 CisJCXNmaWxlID0gc21ncm9wZW4ocmxvY2F0b3IsIGJhY2tlbmQsIE1BSU5fRk9SS05VTSk7CisJ CWNvbGxpZGVzID0gc21ncmV4aXN0cyhzZmlsZSk7CisJCXNtZ3JjbG9zZShzZmlsZSk7CiAJfSB3 aGlsZSAoY29sbGlkZXMpOwogCi0JcmV0dXJuIHJsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyOwor CXJldHVybiBybG9jYXRvci5yZWxOdW1iZXI7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jYXRhbG9nL2luZGV4LmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKaW5kZXgg NjFmMWQzOTI2YTkuLjhhZTk0M2M0OTE0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9n L2luZGV4LmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCkBAIC0zMDI5LDkgKzMw MjksOSBAQCBpbmRleF9idWlsZChSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJICogcmVsZmlsZW51 bWJlciB3b24ndCBjaGFuZ2UsIGFuZCBub3RoaW5nIG5lZWRzIHRvIGJlIGRvbmUgaGVyZS4KIAkg Ki8KIAlpZiAoaW5kZXhSZWxhdGlvbi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSA9PSBSRUxQRVJT SVNURU5DRV9VTkxPR0dFRCAmJgotCQkhc21ncmV4aXN0cyhSZWxhdGlvbkdldFNtZ3IoaW5kZXhS ZWxhdGlvbiksIElOSVRfRk9SS05VTSkpCisJCSFzbWdyZXhpc3RzKFJlbGF0aW9uR2V0U21ncihp bmRleFJlbGF0aW9uLCBJTklUX0ZPUktOVU0pKSkKIAl7Ci0JCXNtZ3JjcmVhdGUoUmVsYXRpb25H ZXRTbWdyKGluZGV4UmVsYXRpb24pLCBJTklUX0ZPUktOVU0sIGZhbHNlKTsKKwkJc21ncmNyZWF0 ZShSZWxhdGlvbkdldFNtZ3IoaW5kZXhSZWxhdGlvbiwgSU5JVF9GT1JLTlVNKSwgZmFsc2UpOwog CQlpbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1idWlsZGVtcHR5KGluZGV4UmVsYXRpb24pOwog CX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zdG9yYWdlLmMgYi9zcmMvYmFj a2VuZC9jYXRhbG9nL3N0b3JhZ2UuYwppbmRleCBkNzA4YWYxOWVkMi4uNWQ0Nzg2NGUzYTkgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3RvcmFnZS5jCisrKyBiL3NyYy9iYWNrZW5k L2NhdGFsb2cvc3RvcmFnZS5jCkBAIC0xMTYsMTEgKzExNiwxMSBAQCBBZGRQZW5kaW5nU3luYyhj b25zdCBSZWxGaWxlTG9jYXRvciAqcmxvY2F0b3IpCiAgKiB0aGF0IGRvZXMgbm90IHdhbnQgdGhl IHN0b3JhZ2UgdG8gYmUgZGVzdHJveWVkIGluIGNhc2Ugb2YgYW4gYWJvcnQgbWF5CiAgKiBwYXNz IHJlZ2lzdGVyX2RlbGV0ZSA9IGZhbHNlLgogICovCi1TTWdyUmVsYXRpb24KK1NNZ3JGaWxlSGFu ZGxlCiBSZWxhdGlvbkNyZWF0ZVN0b3JhZ2UoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIGNoYXIg cmVscGVyc2lzdGVuY2UsCiAJCQkJCSAgYm9vbCByZWdpc3Rlcl9kZWxldGUpCiB7Ci0JU01nclJl bGF0aW9uIHNyZWw7CisJU01nckZpbGVIYW5kbGUgc2ZpbGU7CiAJQmFja2VuZElkCWJhY2tlbmQ7 CiAJYm9vbAkJbmVlZHNfd2FsOwogCkBAIC0xNDUsMTEgKzE0NSwxMSBAQCBSZWxhdGlvbkNyZWF0 ZVN0b3JhZ2UoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIGNoYXIgcmVscGVyc2lzdGVuY2UsCiAJ CQlyZXR1cm4gTlVMTDsJCS8qIHBsYWNhdGUgY29tcGlsZXIgKi8KIAl9CiAKLQlzcmVsID0gc21n cm9wZW4ocmxvY2F0b3IsIGJhY2tlbmQpOwotCXNtZ3JjcmVhdGUoc3JlbCwgTUFJTl9GT1JLTlVN LCBmYWxzZSk7CisJc2ZpbGUgPSBzbWdyb3BlbihybG9jYXRvciwgYmFja2VuZCwgTUFJTl9GT1JL TlVNKTsKKwlzbWdyY3JlYXRlKHNmaWxlLCBmYWxzZSk7CiAKIAlpZiAobmVlZHNfd2FsKQotCQls b2dfc21ncmNyZWF0ZSgmc3JlbC0+c21ncl9ybG9jYXRvci5sb2NhdG9yLCBNQUlOX0ZPUktOVU0p OworCQlsb2dfc21ncmNyZWF0ZSgmcmxvY2F0b3IsIE1BSU5fRk9SS05VTSk7CiAKIAkvKgogCSAq IEFkZCB0aGUgcmVsYXRpb24gdG8gdGhlIGxpc3Qgb2Ygc3R1ZmYgdG8gZGVsZXRlIGF0IGFib3J0 LCBpZiB3ZSBhcmUKQEAgLTE3NSw3ICsxNzUsNyBAQCBSZWxhdGlvbkNyZWF0ZVN0b3JhZ2UoUmVs RmlsZUxvY2F0b3IgcmxvY2F0b3IsIGNoYXIgcmVscGVyc2lzdGVuY2UsCiAJCUFkZFBlbmRpbmdT eW5jKCZybG9jYXRvcik7CiAJfQogCi0JcmV0dXJuIHNyZWw7CisJcmV0dXJuIHNmaWxlOwogfQog CiAvKgpAQCAtMjkyLDE2ICsyOTIsMTggQEAgUmVsYXRpb25UcnVuY2F0ZShSZWxhdGlvbiByZWws IEJsb2NrTnVtYmVyIG5ibG9ja3MpCiAJRm9ya051bWJlcglmb3Jrc1tNQVhfRk9SS05VTV07CiAJ QmxvY2tOdW1iZXIgYmxvY2tzW01BWF9GT1JLTlVNXTsKIAlpbnQJCQluZm9ya3MgPSAwOwotCVNN Z3JSZWxhdGlvbiByZWxuOwogCiAJLyoKIAkgKiBNYWtlIHN1cmUgc21ncl90YXJnYmxvY2sgZXRj IGFyZW4ndCBwb2ludGluZyBzb21ld2hlcmUgcGFzdCBuZXcgZW5kLgogCSAqIChOb3RlOiBkb24n dCByZWx5IG9uIHRoaXMgcmVsbiBwb2ludGVyIGJlbG93IHRoaXMgbG9vcC4pCiAJICovCi0JcmVs biA9IFJlbGF0aW9uR2V0U21ncihyZWwpOwotCXJlbG4tPnNtZ3JfdGFyZ2Jsb2NrID0gSW52YWxp ZEJsb2NrTnVtYmVyOwotCWZvciAoaW50IGkgPSAwOyBpIDw9IE1BWF9GT1JLTlVNOyArK2kpCi0J CXJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbaV0gPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJZm9y IChpbnQgaSA9IDA7IGkgPD0gTUFYX0ZPUktOVU07IGkrKykKKwl7CisJCVNNZ3JGaWxlSGFuZGxl IHNmaWxlID0gUmVsYXRpb25HZXRTbWdyKHJlbCwgaSk7CisKKwkJc2ZpbGUtPnNtZ3JfdGFyZ2Js b2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCQlzZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9 IEludmFsaWRCbG9ja051bWJlcjsKKwl9CiAKIAkvKiBQcmVwYXJlIGZvciB0cnVuY2F0aW9uIG9m IE1BSU4gZm9yayBvZiB0aGUgcmVsYXRpb24gKi8KIAlmb3Jrc1tuZm9ya3NdID0gTUFJTl9GT1JL TlVNOwpAQCAtMzA5LDcgKzMxMSw3IEBAIFJlbGF0aW9uVHJ1bmNhdGUoUmVsYXRpb24gcmVsLCBC bG9ja051bWJlciBuYmxvY2tzKQogCW5mb3JrcysrOwogCiAJLyogUHJlcGFyZSBmb3IgdHJ1bmNh dGlvbiBvZiB0aGUgRlNNIGlmIGl0IGV4aXN0cyAqLwotCWZzbSA9IHNtZ3JleGlzdHMoUmVsYXRp b25HZXRTbWdyKHJlbCksIEZTTV9GT1JLTlVNKTsKKwlmc20gPSBzbWdyZXhpc3RzKFJlbGF0aW9u R2V0U21ncihyZWwsIEZTTV9GT1JLTlVNKSk7CiAJaWYgKGZzbSkKIAl7CiAJCWJsb2Nrc1tuZm9y a3NdID0gRnJlZVNwYWNlTWFwUHJlcGFyZVRydW5jYXRlUmVsKHJlbCwgbmJsb2Nrcyk7CkBAIC0z MjIsNyArMzI0LDcgQEAgUmVsYXRpb25UcnVuY2F0ZShSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVy IG5ibG9ja3MpCiAJfQogCiAJLyogUHJlcGFyZSBmb3IgdHJ1bmNhdGlvbiBvZiB0aGUgdmlzaWJp bGl0eSBtYXAgdG9vIGlmIGl0IGV4aXN0cyAqLwotCXZtID0gc21ncmV4aXN0cyhSZWxhdGlvbkdl dFNtZ3IocmVsKSwgVklTSUJJTElUWU1BUF9GT1JLTlVNKTsKKwl2bSA9IHNtZ3JleGlzdHMoUmVs YXRpb25HZXRTbWdyKHJlbCwgVklTSUJJTElUWU1BUF9GT1JLTlVNKSk7CiAJaWYgKHZtKQogCXsK IAkJYmxvY2tzW25mb3Jrc10gPSB2aXNpYmlsaXR5bWFwX3ByZXBhcmVfdHJ1bmNhdGUocmVsLCBu YmxvY2tzKTsKQEAgLTM5MCwxMSArMzkyLDEyIEBAIFJlbGF0aW9uVHJ1bmNhdGUoUmVsYXRpb24g cmVsLCBCbG9ja051bWJlciBuYmxvY2tzKQogCX0KIAogCS8qCi0JICogVGhpcyB3aWxsIGZpcnN0 IHJlbW92ZSBhbnkgYnVmZmVycyBmcm9tIHRoZSBidWZmZXIgcG9vbCB0aGF0IHNob3VsZCBubwor CSAqIEZpcnN0IHJlbW92ZSBhbnkgYnVmZmVycyBmcm9tIHRoZSBidWZmZXIgcG9vbCB0aGF0IHNo b3VsZCBubwogCSAqIGxvbmdlciBleGlzdCBhZnRlciB0cnVuY2F0aW9uIGlzIGNvbXBsZXRlLCBh bmQgdGhlbiB0cnVuY2F0ZSB0aGUKIAkgKiBjb3JyZXNwb25kaW5nIGZpbGVzIG9uIGRpc2suCiAJ ICovCi0Jc21ncnRydW5jYXRlKFJlbGF0aW9uR2V0U21ncihyZWwpLCBmb3JrcywgbmZvcmtzLCBi bG9ja3MpOworCURyb3BSZWxhdGlvbkJ1ZmZlcnMocmVsLT5yZF9sb2NhdG9yLCByZWwtPnJkX2Jh Y2tlbmQsIGZvcmtzLCBuZm9ya3MsIGJsb2Nrcyk7CisJc21ncnRydW5jYXRlX211bHRpKHJlbC0+ cmRfbG9jYXRvciwgcmVsLT5yZF9iYWNrZW5kLCBmb3JrcywgbmZvcmtzLCBibG9ja3MpOwogCiAJ LyogV2UndmUgZG9uZSBhbGwgdGhlIGNyaXRpY2FsIHdvcmssIHNvIGNoZWNrcG9pbnRzIGFyZSBP SyBub3cuICovCiAJTXlQcm9jLT5kZWxheUNoa3B0RmxhZ3MgJj0gfkRFTEFZX0NIS1BUX0NPTVBM RVRFOwpAQCAtNDI4LDcgKzQzMSw3IEBAIFJlbGF0aW9uUHJlVHJ1bmNhdGUoUmVsYXRpb24gcmVs KQogCQlyZXR1cm47CiAKIAlwZW5kaW5nID0gaGFzaF9zZWFyY2gocGVuZGluZ1N5bmNIYXNoLAot CQkJCQkJICAmKFJlbGF0aW9uR2V0U21ncihyZWwpLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IpLAor CQkJCQkJICAmcmVsLT5yZF9sb2NhdG9yLAogCQkJCQkJICBIQVNIX0ZJTkQsIE5VTEwpOwogCWlm IChwZW5kaW5nKQogCQlwZW5kaW5nLT5pc190cnVuY2F0ZWQgPSB0cnVlOwpAQCAtNDQ0LDEyICs0 NDcsMTIgQEAgUmVsYXRpb25QcmVUcnVuY2F0ZShSZWxhdGlvbiByZWwpCiAgKiBBbHNvIG5vdGUg dGhhdCB0aGlzIGlzIGZyZXF1ZW50bHkgY2FsbGVkIHZpYSBsb2N1dGlvbnMgc3VjaCBhcwogICoJ CVJlbGF0aW9uQ29weVN0b3JhZ2UoUmVsYXRpb25HZXRTbWdyKHJlbCksIC4uLik7CiAgKiBUaGF0 J3Mgc2FmZSBvbmx5IGJlY2F1c2Ugd2UgcGVyZm9ybSBvbmx5IHNtZ3IgYW5kIFdBTCBvcGVyYXRp b25zIGhlcmUuCi0gKiBJZiB3ZSBpbnZva2VkIGFueXRoaW5nIGVsc2UsIGEgcmVsY2FjaGUgZmx1 c2ggY291bGQgY2F1c2Ugb3VyIFNNZ3JSZWxhdGlvbgorICogSWYgd2UgaW52b2tlZCBhbnl0aGlu ZyBlbHNlLCBhIHJlbGNhY2hlIGZsdXNoIGNvdWxkIGNhdXNlIG91ciBTTWdyRmlsZUhhbmRsZQog ICogYXJndW1lbnQgdG8gYmVjb21lIGEgZGFuZ2xpbmcgcG9pbnRlci4KICAqLwogdm9pZAotUmVs YXRpb25Db3B5U3RvcmFnZShTTWdyUmVsYXRpb24gc3JjLCBTTWdyUmVsYXRpb24gZHN0LAotCQkJ CQlGb3JrTnVtYmVyIGZvcmtOdW0sIGNoYXIgcmVscGVyc2lzdGVuY2UpCitSZWxhdGlvbkNvcHlT dG9yYWdlKFNNZ3JGaWxlSGFuZGxlIHNyYywgU01nckZpbGVIYW5kbGUgZHN0LAorCQkJCQljaGFy IHJlbHBlcnNpc3RlbmNlKQogewogCVBHQWxpZ25lZEJsb2NrIGJ1ZjsKIAlQYWdlCQlwYWdlOwpA QCAtNDY2LDcgKzQ2OSw3IEBAIFJlbGF0aW9uQ29weVN0b3JhZ2UoU01nclJlbGF0aW9uIHNyYywg U01nclJlbGF0aW9uIGRzdCwKIAkgKiBpdCBuZWVkcyB0byBiZSBzeW5jZWQgdG8gZGlzay4KIAkg Ki8KIAljb3B5aW5nX2luaXRmb3JrID0gcmVscGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0Vf VU5MT0dHRUQgJiYKLQkJZm9ya051bSA9PSBJTklUX0ZPUktOVU07CisJCXNyYy0+c21ncl9sb2Nh dG9yLmZvcmtudW0gPT0gSU5JVF9GT1JLTlVNOwogCiAJLyoKIAkgKiBXZSBuZWVkIHRvIGxvZyB0 aGUgY29waWVkIGRhdGEgaW4gV0FMIGlmZiBXQUwgYXJjaGl2aW5nL3N0cmVhbWluZyBpcwpAQCAt NDc3LDE0ICs0ODAsMTQgQEAgUmVsYXRpb25Db3B5U3RvcmFnZShTTWdyUmVsYXRpb24gc3JjLCBT TWdyUmVsYXRpb24gZHN0LAogCXVzZV93YWwgPSBYTG9nSXNOZWVkZWQoKSAmJgogCQkocmVscGVy c2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfUEVSTUFORU5UIHx8IGNvcHlpbmdfaW5pdGZvcmsp OwogCi0JbmJsb2NrcyA9IHNtZ3JuYmxvY2tzKHNyYywgZm9ya051bSk7CisJbmJsb2NrcyA9IHNt Z3JuYmxvY2tzKHNyYyk7CiAKIAlmb3IgKGJsa25vID0gMDsgYmxrbm8gPCBuYmxvY2tzOyBibGtu bysrKQogCXsKIAkJLyogSWYgd2UgZ290IGEgY2FuY2VsIHNpZ25hbCBkdXJpbmcgdGhlIGNvcHkg b2YgdGhlIGRhdGEsIHF1aXQgKi8KIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAotCQlzbWdy cmVhZChzcmMsIGZvcmtOdW0sIGJsa25vLCBidWYuZGF0YSk7CisJCXNtZ3JyZWFkKHNyYywgYmxr bm8sIGJ1Zi5kYXRhKTsKIAogCQlpZiAoIVBhZ2VJc1ZlcmlmaWVkRXh0ZW5kZWQocGFnZSwgYmxr bm8sCiAJCQkJCQkJCQlQSVZfTE9HX1dBUk5JTkcgfCBQSVZfUkVQT1JUX1NUQVQpKQpAQCAtNDk2 LDkgKzQ5OSw3IEBAIFJlbGF0aW9uQ29weVN0b3JhZ2UoU01nclJlbGF0aW9uIHNyYywgU01nclJl bGF0aW9uIGRzdCwKIAkJCSAqIChlcnJjb250ZXh0IGNhbGxiYWNrcyBzaG91bGRuJ3QgYmUgcmlz a2luZyBhbnkgc3VjaCB0aGluZywgYnV0CiAJCQkgKiBwZW9wbGUgaGF2ZSBiZWVuIGtub3duIHRv IGZvcmdldCB0aGF0IHJ1bGUuKQogCQkJICovCi0JCQljaGFyCSAgICpyZWxwYXRoID0gcmVscGF0 aGJhY2tlbmQoc3JjLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IsCi0JCQkJCQkJCQkJCQkgc3JjLT5z bWdyX3Jsb2NhdG9yLmJhY2tlbmQsCi0JCQkJCQkJCQkJCQkgZm9ya051bSk7CisJCQljaGFyCSAg ICpyZWxwYXRoID0gc21ncmZpbGVwYXRoKHNyYy0+c21ncl9sb2NhdG9yKTsKIAogCQkJZXJlcG9y dChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRBX0NPUlJVUFRFRCksCkBAIC01MTIs NyArNTEzLDcgQEAgUmVsYXRpb25Db3B5U3RvcmFnZShTTWdyUmVsYXRpb24gc3JjLCBTTWdyUmVs YXRpb24gZHN0LAogCQkgKiBzcGFjZS4KIAkJICovCiAJCWlmICh1c2Vfd2FsKQotCQkJbG9nX25l d3BhZ2UoJmRzdC0+c21ncl9ybG9jYXRvci5sb2NhdG9yLCBmb3JrTnVtLCBibGtubywgcGFnZSwg ZmFsc2UpOworCQkJbG9nX25ld3BhZ2UoJmRzdC0+c21ncl9sb2NhdG9yLmxvY2F0b3IsIGRzdC0+ c21ncl9sb2NhdG9yLmZvcmtudW0sIGJsa25vLCBwYWdlLCBmYWxzZSk7CiAKIAkJUGFnZVNldENo ZWNrc3VtSW5wbGFjZShwYWdlLCBibGtubyk7CiAKQEAgLTUyMSw3ICs1MjIsNyBAQCBSZWxhdGlv bkNvcHlTdG9yYWdlKFNNZ3JSZWxhdGlvbiBzcmMsIFNNZ3JSZWxhdGlvbiBkc3QsCiAJCSAqIG5l ZWQgZm9yIHNtZ3IgdG8gc2NoZWR1bGUgYW4gZnN5bmMgZm9yIHRoaXMgd3JpdGU7IHdlJ2xsIGRv IGl0CiAJCSAqIG91cnNlbHZlcyBiZWxvdy4KIAkJICovCi0JCXNtZ3JleHRlbmQoZHN0LCBmb3Jr TnVtLCBibGtubywgYnVmLmRhdGEsIHRydWUpOworCQlzbWdyZXh0ZW5kKGRzdCwgYmxrbm8sIGJ1 Zi5kYXRhLCB0cnVlKTsKIAl9CiAKIAkvKgpAQCAtNTM0LDcgKzUzNSw3IEBAIFJlbGF0aW9uQ29w eVN0b3JhZ2UoU01nclJlbGF0aW9uIHNyYywgU01nclJlbGF0aW9uIGRzdCwKIAkgKiB0aGV5IG1p Z2h0IHN0aWxsIG5vdCBiZSBvbiBkaXNrIHdoZW4gdGhlIGNyYXNoIG9jY3Vycy4KIAkgKi8KIAlp ZiAodXNlX3dhbCB8fCBjb3B5aW5nX2luaXRmb3JrKQotCQlzbWdyaW1tZWRzeW5jKGRzdCwgZm9y a051bSk7CisJCXNtZ3JpbW1lZHN5bmMoZHN0KTsKIH0KIAogLyoKQEAgLTY1Myw5ICs2NTQsOSBA QCBzbWdyRG9QZW5kaW5nRGVsZXRlcyhib29sIGlzQ29tbWl0KQogCVBlbmRpbmdSZWxEZWxldGUg KnBlbmRpbmc7CiAJUGVuZGluZ1JlbERlbGV0ZSAqcHJldjsKIAlQZW5kaW5nUmVsRGVsZXRlICpu ZXh0OwotCWludAkJCW5yZWxzID0gMCwKLQkJCQltYXhyZWxzID0gMDsKLQlTTWdyUmVsYXRpb24g KnNyZWxzID0gTlVMTDsKKwlpbnQJCQlubG9jYXRvcnMgPSAwLAorCQkJCW1heGxvY2F0b3JzID0g MDsKKwlSZWxGaWxlTG9jYXRvckJhY2tlbmQgKmxvY2F0b3JzID0gTlVMTDsKIAogCXByZXYgPSBO VUxMOwogCWZvciAocGVuZGluZyA9IHBlbmRpbmdEZWxldGVzOyBwZW5kaW5nICE9IE5VTEw7IHBl bmRpbmcgPSBuZXh0KQpAQCAtNjc2LDIzICs2NzcsMjEgQEAgc21nckRvUGVuZGluZ0RlbGV0ZXMo Ym9vbCBpc0NvbW1pdCkKIAkJCS8qIGRvIGRlbGV0aW9uIGlmIGNhbGxlZCBmb3IgKi8KIAkJCWlm IChwZW5kaW5nLT5hdENvbW1pdCA9PSBpc0NvbW1pdCkKIAkJCXsKLQkJCQlTTWdyUmVsYXRpb24g c3JlbDsKLQotCQkJCXNyZWwgPSBzbWdyb3BlbihwZW5kaW5nLT5ybG9jYXRvciwgcGVuZGluZy0+ YmFja2VuZCk7CisJCQkJUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yID0geyBwZW5kaW5n LT5ybG9jYXRvciwgcGVuZGluZy0+YmFja2VuZCB9OwogCiAJCQkJLyogYWxsb2NhdGUgdGhlIGlu aXRpYWwgYXJyYXksIG9yIGV4dGVuZCBpdCwgaWYgbmVlZGVkICovCi0JCQkJaWYgKG1heHJlbHMg PT0gMCkKKwkJCQlpZiAobWF4bG9jYXRvcnMgPT0gMCkKIAkJCQl7Ci0JCQkJCW1heHJlbHMgPSA4 OwotCQkJCQlzcmVscyA9IHBhbGxvYyhzaXplb2YoU01nclJlbGF0aW9uKSAqIG1heHJlbHMpOwor CQkJCQltYXhsb2NhdG9ycyA9IDg7CisJCQkJCWxvY2F0b3JzID0gcGFsbG9jKHNpemVvZihSZWxG aWxlTG9jYXRvckJhY2tlbmQpICogbWF4bG9jYXRvcnMpOwogCQkJCX0KLQkJCQllbHNlIGlmICht YXhyZWxzIDw9IG5yZWxzKQorCQkJCWVsc2UgaWYgKG1heGxvY2F0b3JzIDw9IG5sb2NhdG9ycykK IAkJCQl7Ci0JCQkJCW1heHJlbHMgKj0gMjsKLQkJCQkJc3JlbHMgPSByZXBhbGxvYyhzcmVscywg c2l6ZW9mKFNNZ3JSZWxhdGlvbikgKiBtYXhyZWxzKTsKKwkJCQkJbWF4bG9jYXRvcnMgKj0gMjsK KwkJCQkJbG9jYXRvcnMgPSByZXBhbGxvYyhsb2NhdG9ycywgc2l6ZW9mKFJlbEZpbGVMb2NhdG9y QmFja2VuZCkgKiBtYXhsb2NhdG9ycyk7CiAJCQkJfQogCi0JCQkJc3JlbHNbbnJlbHMrK10gPSBz cmVsOworCQkJCWxvY2F0b3JzW25sb2NhdG9ycysrXSA9IHJsb2NhdG9yOwogCQkJfQogCQkJLyog bXVzdCBleHBsaWNpdGx5IGZyZWUgdGhlIGxpc3QgZW50cnkgKi8KIAkJCXBmcmVlKHBlbmRpbmcp OwpAQCAtNzAwLDE1ICs2OTksNTggQEAgc21nckRvUGVuZGluZ0RlbGV0ZXMoYm9vbCBpc0NvbW1p dCkKIAkJfQogCX0KIAotCWlmIChucmVscyA+IDApCisJaWYgKG5sb2NhdG9ycyA+IDApCiAJewot CQlzbWdyZG91bmxpbmthbGwoc3JlbHMsIG5yZWxzLCBmYWxzZSk7CisJCUZvcmtOdW1iZXIgZm9y a3NbTUFYX0ZPUktOVU0gKyAxXTsKKworCQlmb3IgKGludCBpID0gMDsgaSA8PSBNQVhfRk9SS05V TTsgaSsrKQorCQkJZm9ya3NbaV0gPSBpOworCisJCS8qCisJCSAqIEdldCByaWQgb2YgYW55IHJl bWFpbmluZyBidWZmZXJzIGZvciB0aGUgcmVsYXRpb25zLiAgYnVmbWdyIHdpbGwganVzdAorCQkg KiBkcm9wIHRoZW0gd2l0aG91dCBib3RoZXJpbmcgdG8gd3JpdGUgdGhlIGNvbnRlbnRzLgorCQkg Ki8KKwkJRHJvcFJlbGF0aW9uc0FsbEJ1ZmZlcnMobG9jYXRvcnMsIG5sb2NhdG9ycyk7CiAKLQkJ Zm9yIChpbnQgaSA9IDA7IGkgPCBucmVsczsgaSsrKQotCQkJc21ncmNsb3NlKHNyZWxzW2ldKTsK KwkJZm9yIChpbnQgaSA9IDA7IGkgPCBubG9jYXRvcnM7IGkrKykKKwkJCXNtZ3J1bmxpbmtfbXVs dGkobG9jYXRvcnNbaV0ubG9jYXRvciwgbG9jYXRvcnNbaV0uYmFja2VuZCwgZm9ya3MsIE1BWF9G T1JLTlVNICsgMSwgZmFsc2UpOworCQlwZnJlZShsb2NhdG9ycyk7CisJfQorfQorCisvKgorICog RHJvcFJlbGF0aW9uRmlsZXMgLS0gZHJvcCBmaWxlcyBvZiBhbGwgZ2l2ZW4gcmVsYXRpb25zCisg Ki8KK3ZvaWQKK0Ryb3BSZWxhdGlvbkZpbGVzKFJlbEZpbGVMb2NhdG9yICpkZWxyZWxzLCBpbnQg bmRlbHJlbHMsIGJvb2wgaXNSZWRvKQoreworCVJlbEZpbGVMb2NhdG9yQmFja2VuZCAqbG9jYXRv cnM7CisJaW50CQkJaTsKKwlGb3JrTnVtYmVyCWFsbF9mb3Jrc1tNQVhfRk9SS05VTSArIDFdOwog Ci0JCXBmcmVlKHNyZWxzKTsKKwlsb2NhdG9ycyA9IHBhbGxvYyhzaXplb2YoUmVsRmlsZUxvY2F0 b3JCYWNrZW5kKSAqIG5kZWxyZWxzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbmRlbHJlbHM7IGkrKykK Kwl7CisJCWlmIChpc1JlZG8pCisJCXsKKwkJCWZvciAoaW50IGZvcmsgPSAwOyBmb3JrIDw9IE1B WF9GT1JLTlVNOyBmb3JrKyspCisJCQkJWExvZ0Ryb3BSZWxhdGlvbihkZWxyZWxzW2ldLCBmb3Jr KTsKKwkJfQorCQlsb2NhdG9yc1tpXS5sb2NhdG9yID0gZGVscmVsc1tpXTsKKwkJbG9jYXRvcnNb aV0uYmFja2VuZCA9IEludmFsaWRCYWNrZW5kSWQ7CiAJfQorCisJLyoKKwkgKiBHZXQgcmlkIG9m IGFueSByZW1haW5pbmcgYnVmZmVycyBmb3IgdGhlIHJlbGF0aW9ucy4gIGJ1Zm1nciB3aWxsIGp1 c3QKKwkgKiBkcm9wIHRoZW0gd2l0aG91dCBib3RoZXJpbmcgdG8gd3JpdGUgdGhlIGNvbnRlbnRz LgorCSAqLworCURyb3BSZWxhdGlvbnNBbGxCdWZmZXJzKGxvY2F0b3JzLCBuZGVscmVscyk7CisK Kwlmb3IgKGludCBmb3JrID0gMDsgZm9yayA8PSBNQVhfRk9SS05VTTsgZm9yaysrKQorCQlhbGxf Zm9ya3NbZm9ya10gPSBmb3JrOworCisJZm9yIChpID0gMDsgaSA8IG5kZWxyZWxzOyBpKyspCisJ CXNtZ3J1bmxpbmtfbXVsdGkobG9jYXRvcnNbaV0ubG9jYXRvciwgbG9jYXRvcnNbaV0uYmFja2Vu ZCwgYWxsX2ZvcmtzLCBNQVhfRk9SS05VTSArIDEsIHRydWUpOwogfQogCiAvKgpAQCAtNzE4LDkg Kzc2MCw5IEBAIHZvaWQKIHNtZ3JEb1BlbmRpbmdTeW5jcyhib29sIGlzQ29tbWl0LCBib29sIGlz UGFyYWxsZWxXb3JrZXIpCiB7CiAJUGVuZGluZ1JlbERlbGV0ZSAqcGVuZGluZzsKLQlpbnQJCQlu cmVscyA9IDAsCi0JCQkJbWF4cmVscyA9IDA7Ci0JU01nclJlbGF0aW9uICpzcmVscyA9IE5VTEw7 CisJaW50CQkJbmxvY2F0b3JzID0gMCwKKwkJCQltYXhsb2NhdG9ycyA9IDA7CisJUmVsRmlsZUxv Y2F0b3IgKmxvY2F0b3JzID0gTlVMTDsKIAlIQVNIX1NFUV9TVEFUVVMgc2NhbjsKIAlQZW5kaW5n UmVsU3luYyAqcGVuZGluZ3N5bmM7CiAKQEAgLTc1Nyw5ICs3OTksNiBAQCBzbWdyRG9QZW5kaW5n U3luY3MoYm9vbCBpc0NvbW1pdCwgYm9vbCBpc1BhcmFsbGVsV29ya2VyKQogCQlGb3JrTnVtYmVy CWZvcms7CiAJCUJsb2NrTnVtYmVyIG5ibG9ja3NbTUFYX0ZPUktOVU0gKyAxXTsKIAkJQmxvY2tO dW1iZXIgdG90YWxfYmxvY2tzID0gMDsKLQkJU01nclJlbGF0aW9uIHNyZWw7Ci0KLQkJc3JlbCA9 IHNtZ3JvcGVuKHBlbmRpbmdzeW5jLT5ybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCk7CiAKIAkJ LyoKIAkJICogV2UgZW1pdCBuZXdwYWdlIFdBTCByZWNvcmRzIGZvciBzbWFsbGVyIHJlbGF0aW9u cy4KQEAgLTc3Myw5ICs4MTIsMTIgQEAgc21nckRvUGVuZGluZ1N5bmNzKGJvb2wgaXNDb21taXQs IGJvb2wgaXNQYXJhbGxlbFdvcmtlcikKIAkJewogCQkJZm9yIChmb3JrID0gMDsgZm9yayA8PSBN QVhfRk9SS05VTTsgZm9yaysrKQogCQkJewotCQkJCWlmIChzbWdyZXhpc3RzKHNyZWwsIGZvcmsp KQorCQkJCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOworCisJCQkJc2ZpbGUgPSBzbWdyb3BlbihwZW5k aW5nc3luYy0+cmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIGZvcmspOworCQkJCWlmIChzbWdy ZXhpc3RzKHNmaWxlKSkKIAkJCQl7Ci0JCQkJCUJsb2NrTnVtYmVyIG4gPSBzbWdybmJsb2Nrcyhz cmVsLCBmb3JrKTsKKwkJCQkJQmxvY2tOdW1iZXIgbiA9IHNtZ3JuYmxvY2tzKHNmaWxlKTsKIAog CQkJCQkvKiB3ZSBzaG91bGRuJ3QgY29tZSBoZXJlIGZvciB1bmxvZ2dlZCByZWxhdGlvbnMgKi8K IAkJCQkJQXNzZXJ0KGZvcmsgIT0gSU5JVF9GT1JLTlVNKTsKQEAgLTgwMywxOCArODQ1LDE5IEBA IHNtZ3JEb1BlbmRpbmdTeW5jcyhib29sIGlzQ29tbWl0LCBib29sIGlzUGFyYWxsZWxXb3JrZXIp CiAJCQl0b3RhbF9ibG9ja3MgKiBCTENLU1ogLyAxMDI0ID49IHdhbF9za2lwX3RocmVzaG9sZCkK IAkJewogCQkJLyogYWxsb2NhdGUgdGhlIGluaXRpYWwgYXJyYXksIG9yIGV4dGVuZCBpdCwgaWYg bmVlZGVkICovCi0JCQlpZiAobWF4cmVscyA9PSAwKQorCQkJaWYgKG1heGxvY2F0b3JzID09IDAp CiAJCQl7Ci0JCQkJbWF4cmVscyA9IDg7Ci0JCQkJc3JlbHMgPSBwYWxsb2Moc2l6ZW9mKFNNZ3JS ZWxhdGlvbikgKiBtYXhyZWxzKTsKKwkJCQltYXhsb2NhdG9ycyA9IDg7CisJCQkJbG9jYXRvcnMg PSBwYWxsb2Moc2l6ZW9mKFJlbEZpbGVMb2NhdG9yQmFja2VuZCkgKiBtYXhsb2NhdG9ycyk7CiAJ CQl9Ci0JCQllbHNlIGlmIChtYXhyZWxzIDw9IG5yZWxzKQorCQkJZWxzZSBpZiAobWF4bG9jYXRv cnMgPD0gbmxvY2F0b3JzKQogCQkJewotCQkJCW1heHJlbHMgKj0gMjsKLQkJCQlzcmVscyA9IHJl cGFsbG9jKHNyZWxzLCBzaXplb2YoU01nclJlbGF0aW9uKSAqIG1heHJlbHMpOworCQkJCW1heGxv Y2F0b3JzICo9IDI7CisJCQkJbG9jYXRvcnMgPSByZXBhbGxvYyhsb2NhdG9ycywgc2l6ZW9mKFJl bEZpbGVMb2NhdG9yQmFja2VuZCkgKiBtYXhsb2NhdG9ycyk7CiAJCQl9CiAKLQkJCXNyZWxzW25y ZWxzKytdID0gc3JlbDsKKwkJCWxvY2F0b3JzW25sb2NhdG9yc10gPSBwZW5kaW5nc3luYy0+cmxv Y2F0b3I7CisJCQlubG9jYXRvcnMrKzsKIAkJfQogCQllbHNlCiAJCXsKQEAgLTgzMyw3ICs4NzYs NyBAQCBzbWdyRG9QZW5kaW5nU3luY3MoYm9vbCBpc0NvbW1pdCwgYm9vbCBpc1BhcmFsbGVsV29y a2VyKQogCQkJCSAqIHBhZ2UgaW5jbHVkaW5nIGFueSB1bnVzZWQgc3BhY2UuICBSZWFkQnVmZmVy RXh0ZW5kZWQoKQogCQkJCSAqIGNvdW50cyBzb21lIHBnc3RhdCBldmVudHM7IHVuZm9ydHVuYXRl bHksIHdlIGRpc2NhcmQgdGhlbS4KIAkJCQkgKi8KLQkJCQlyZWwgPSBDcmVhdGVGYWtlUmVsY2Fj aGVFbnRyeShzcmVsLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IpOworCQkJCXJlbCA9IENyZWF0ZUZh a2VSZWxjYWNoZUVudHJ5KHBlbmRpbmdzeW5jLT5ybG9jYXRvcik7CiAJCQkJbG9nX25ld3BhZ2Vf cmFuZ2UocmVsLCBmb3JrLCAwLCBuLCBmYWxzZSk7CiAJCQkJRnJlZUZha2VSZWxjYWNoZUVudHJ5 KHJlbCk7CiAJCQl9CkBAIC04NDIsMTEgKzg4NSwyMCBAQCBzbWdyRG9QZW5kaW5nU3luY3MoYm9v bCBpc0NvbW1pdCwgYm9vbCBpc1BhcmFsbGVsV29ya2VyKQogCiAJcGVuZGluZ1N5bmNIYXNoID0g TlVMTDsKIAotCWlmIChucmVscyA+IDApCisJRmx1c2hSZWxhdGlvbnNBbGxCdWZmZXJzKGxvY2F0 b3JzLCBubG9jYXRvcnMpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBubG9jYXRvcnM7IGkrKykK IAl7Ci0JCXNtZ3Jkb3N5bmNhbGwoc3JlbHMsIG5yZWxzKTsKLQkJcGZyZWUoc3JlbHMpOworCQlm b3IgKGludCBmb3JrID0gMDsgZm9yayA8PSBNQVhfRk9SS05VTTsgZm9yaysrKQorCQl7CisJCQlT TWdyRmlsZUhhbmRsZSBzZmlsZSA9IHNtZ3JvcGVuKGxvY2F0b3JzW2ldLCBJbnZhbGlkQmFja2Vu ZElkLCBmb3JrKTsKKworCQkJaWYgKHNtZ3JleGlzdHMoc2ZpbGUpKQorCQkJCXNtZ3JpbW1lZHN5 bmMoc2ZpbGUpOworCQl9CiAJfQorCWlmIChsb2NhdG9ycyAhPSBOVUxMKQorCQlwZnJlZShsb2Nh dG9ycyk7CiB9CiAKIC8qCkBAIC05NjYsMjIgKzEwMTgsMjIgQEAgc21ncl9yZWRvKFhMb2dSZWFk ZXJTdGF0ZSAqcmVjb3JkKQogCWlmIChpbmZvID09IFhMT0dfU01HUl9DUkVBVEUpCiAJewogCQl4 bF9zbWdyX2NyZWF0ZSAqeGxyZWMgPSAoeGxfc21ncl9jcmVhdGUgKikgWExvZ1JlY0dldERhdGEo cmVjb3JkKTsKLQkJU01nclJlbGF0aW9uIHJlbG47CisJCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOwog Ci0JCXJlbG4gPSBzbWdyb3Blbih4bHJlYy0+cmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQpOwot CQlzbWdyY3JlYXRlKHJlbG4sIHhscmVjLT5mb3JrTnVtLCB0cnVlKTsKKwkJc2ZpbGUgPSBzbWdy b3Blbih4bHJlYy0+cmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIHhscmVjLT5mb3JrTnVtKTsK KwkJc21ncmNyZWF0ZShzZmlsZSwgdHJ1ZSk7CiAJfQogCWVsc2UgaWYgKGluZm8gPT0gWExPR19T TUdSX1RSVU5DQVRFKQogCXsKIAkJeGxfc21ncl90cnVuY2F0ZSAqeGxyZWMgPSAoeGxfc21ncl90 cnVuY2F0ZSAqKSBYTG9nUmVjR2V0RGF0YShyZWNvcmQpOwotCQlTTWdyUmVsYXRpb24gcmVsbjsK KwkJU01nckZpbGVIYW5kbGUgc2ZpbGU7CiAJCVJlbGF0aW9uCXJlbDsKIAkJRm9ya051bWJlcglm b3Jrc1tNQVhfRk9SS05VTV07CiAJCUJsb2NrTnVtYmVyIGJsb2Nrc1tNQVhfRk9SS05VTV07CiAJ CWludAkJCW5mb3JrcyA9IDA7CiAJCWJvb2wJCW5lZWRfZnNtX3ZhY3V1bSA9IGZhbHNlOwogCi0J CXJlbG4gPSBzbWdyb3Blbih4bHJlYy0+cmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQpOworCQlz ZmlsZSA9IHNtZ3JvcGVuKHhscmVjLT5ybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCwgTUFJTl9G T1JLTlVNKTsKIAogCQkvKgogCQkgKiBGb3JjaWJseSBjcmVhdGUgcmVsYXRpb24gaWYgaXQgZG9l c24ndCBleGlzdCAod2hpY2ggc3VnZ2VzdHMgdGhhdApAQCAtOTg5LDcgKzEwNDEsNyBAQCBzbWdy X3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJCSAqIFhMb2dSZWFkQnVmZmVyRm9yUmVk bywgd2UgcHJlZmVyIHRvIHJlY3JlYXRlIHRoZSByZWwgYW5kIHJlcGxheSB0aGUKIAkJICogbG9n IGFzIGJlc3Qgd2UgY2FuIHVudGlsIHRoZSBkcm9wIGlzIHNlZW4uCiAJCSAqLwotCQlzbWdyY3Jl YXRlKHJlbG4sIE1BSU5fRk9SS05VTSwgdHJ1ZSk7CisJCXNtZ3JjcmVhdGUoc2ZpbGUsIHRydWUp OwogCiAJCS8qCiAJCSAqIEJlZm9yZSB3ZSBwZXJmb3JtIHRoZSB0cnVuY2F0aW9uLCB1cGRhdGUg bWluaW11bSByZWNvdmVyeSBwb2ludCB0bwpAQCAtMTAyMiw4ICsxMDc0LDEwIEBAIHNtZ3JfcmVk byhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAkJLyogUHJlcGFyZSBmb3IgdHJ1bmNhdGlvbiBv ZiBGU00gYW5kIFZNIHRvbyAqLwogCQlyZWwgPSBDcmVhdGVGYWtlUmVsY2FjaGVFbnRyeSh4bHJl Yy0+cmxvY2F0b3IpOwogCisJCURyb3BSZWxhdGlvbkJ1ZmZlcnMoeGxyZWMtPnJsb2NhdG9yLCBJ bnZhbGlkQmFja2VuZElkLCBmb3JrcywgbmZvcmtzLCBibG9ja3MpOworCiAJCWlmICgoeGxyZWMt PmZsYWdzICYgU01HUl9UUlVOQ0FURV9GU00pICE9IDAgJiYKLQkJCXNtZ3JleGlzdHMocmVsbiwg RlNNX0ZPUktOVU0pKQorCQkJc21ncmV4aXN0cyhzbWdyb3Blbih4bHJlYy0+cmxvY2F0b3IsIElu dmFsaWRCYWNrZW5kSWQsIEZTTV9GT1JLTlVNKSkpCiAJCXsKIAkJCWJsb2Nrc1tuZm9ya3NdID0g RnJlZVNwYWNlTWFwUHJlcGFyZVRydW5jYXRlUmVsKHJlbCwgeGxyZWMtPmJsa25vKTsKIAkJCWlm IChCbG9ja051bWJlcklzVmFsaWQoYmxvY2tzW25mb3Jrc10pKQpAQCAtMTAzNCw3ICsxMDg4LDcg QEAgc21ncl9yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQkJfQogCQl9CiAJCWlmICgo eGxyZWMtPmZsYWdzICYgU01HUl9UUlVOQ0FURV9WTSkgIT0gMCAmJgotCQkJc21ncmV4aXN0cyhy ZWxuLCBWSVNJQklMSVRZTUFQX0ZPUktOVU0pKQorCQkJc21ncmV4aXN0cyhzbWdyb3Blbih4bHJl Yy0+cmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIFZJU0lCSUxJVFlNQVBfRk9SS05VTSkpKQog CQl7CiAJCQlibG9ja3NbbmZvcmtzXSA9IHZpc2liaWxpdHltYXBfcHJlcGFyZV90cnVuY2F0ZShy ZWwsIHhscmVjLT5ibGtubyk7CiAJCQlpZiAoQmxvY2tOdW1iZXJJc1ZhbGlkKGJsb2Nrc1tuZm9y a3NdKSkKQEAgLTEwNDYsNyArMTEwMCwxMCBAQCBzbWdyX3JlZG8oWExvZ1JlYWRlclN0YXRlICpy ZWNvcmQpCiAKIAkJLyogRG8gdGhlIHJlYWwgd29yayB0byB0cnVuY2F0ZSByZWxhdGlvbiBmb3Jr cyAqLwogCQlpZiAobmZvcmtzID4gMCkKLQkJCXNtZ3J0cnVuY2F0ZShyZWxuLCBmb3JrcywgbmZv cmtzLCBibG9ja3MpOworCQl7CisJCQlEcm9wUmVsYXRpb25CdWZmZXJzKHhscmVjLT5ybG9jYXRv ciwgSW52YWxpZEJhY2tlbmRJZCwgZm9ya3MsIG5mb3JrcywgYmxvY2tzKTsKKwkJCXNtZ3J0cnVu Y2F0ZV9tdWx0aSh4bHJlYy0+cmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIGZvcmtzLCBuZm9y a3MsIGJsb2Nrcyk7CisJCX0KIAogCQkvKgogCQkgKiBVcGRhdGUgdXBwZXItbGV2ZWwgRlNNIHBh Z2VzIHRvIGFjY291bnQgZm9yIHRoZSB0cnVuY2F0aW9uLiBUaGlzIGlzCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMu YwppbmRleCAzZTFiOTJkZjAzMC4uYjllMzYyY2NhYjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2FzeW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYwpAQCAt MTQxLDYgKzE0MSw3IEBACiAjaW5jbHVkZSAibGlicHEvbGlicHEuaCIKICNpbmNsdWRlICJsaWJw cS9wcWZvcm1hdC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgInN0b3JhZ2Uv YnVmbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xt Z3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKQEAgLTE2Myw3ICsxNjQsNyBAQAogICog dGhhbiB0aGF0LCBzbyBjaGFuZ2VzIGluIHRoYXQgZGF0YSBzdHJ1Y3R1cmUgd29uJ3QgYWZmZWN0 IHVzZXItdmlzaWJsZQogICogcmVzdHJpY3Rpb25zLgogICovCi0jZGVmaW5lIE5PVElGWV9QQVlM T0FEX01BWF9MRU5HVEgJKEJMQ0tTWiAtIE5BTUVEQVRBTEVOIC0gMTI4KQorI2RlZmluZSBOT1RJ RllfUEFZTE9BRF9NQVhfTEVOR1RICShCTENLU1ogLSBOQU1FREFUQUxFTiAtIFNpemVPZlBhZ2VI ZWFkZXJEYXRhIC0gMTI4KQogCiAvKgogICogU3RydWN0IHJlcHJlc2VudGluZyBhbiBlbnRyeSBp biB0aGUgZ2xvYmFsIG5vdGlmeSBxdWV1ZQpAQCAtMjEzLDcgKzIxNCw3IEBAIHR5cGVkZWYgc3Ry dWN0IFF1ZXVlUG9zaXRpb24KIAkoKHgpLnBhZ2UgPT0gKHkpLnBhZ2UgJiYgKHgpLm9mZnNldCA9 PSAoeSkub2Zmc2V0KQogCiAjZGVmaW5lIFFVRVVFX1BPU19JU19aRVJPKHgpIFwKLQkoKHgpLnBh Z2UgPT0gMCAmJiAoeCkub2Zmc2V0ID09IDApCisJKCh4KS5wYWdlID09IDAgJiYgKHgpLm9mZnNl dCA9PSBNQVhBTElHTihTaXplT2ZQYWdlSGVhZGVyRGF0YSkpCiAKIC8qIGNob29zZSBsb2dpY2Fs bHkgc21hbGxlciBRdWV1ZVBvc2l0aW9uICovCiAjZGVmaW5lIFFVRVVFX1BPU19NSU4oeCx5KSBc CkBAIC0zMDUsMTIgKzMwNiw2IEBAIHN0YXRpYyBBc3luY1F1ZXVlQ29udHJvbCAqYXN5bmNRdWV1 ZUNvbnRyb2w7CiAjZGVmaW5lIFFVRVVFX05FWFRfTElTVEVORVIoaSkJCShhc3luY1F1ZXVlQ29u dHJvbC0+YmFja2VuZFtpXS5uZXh0TGlzdGVuZXIpCiAjZGVmaW5lIFFVRVVFX0JBQ0tFTkRfUE9T KGkpCQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0ucG9zKQogCi0vKgotICogVGhlIFNM UlUgYnVmZmVyIGFyZWEgdGhyb3VnaCB3aGljaCB3ZSBhY2Nlc3MgdGhlIG5vdGlmaWNhdGlvbiBx dWV1ZQotICovCi1zdGF0aWMgU2xydUN0bERhdGEgTm90aWZ5Q3RsRGF0YTsKLQotI2RlZmluZSBO b3RpZnlDdGwJCQkJCSgmTm90aWZ5Q3RsRGF0YSkKICNkZWZpbmUgUVVFVUVfUEFHRVNJWkUJCQkJ QkxDS1NaCiAjZGVmaW5lIFFVRVVFX0ZVTExfV0FSTl9JTlRFUlZBTAk1MDAwCS8qIHdhcm4gYXQg bW9zdCBvbmNlIGV2ZXJ5IDVzICovCiAKQEAgLTUyMSw4ICs1MTYsNiBAQCBBc3luY1NobWVtU2l6 ZSh2b2lkKQogCXNpemUgPSBtdWxfc2l6ZShNYXhCYWNrZW5kcyArIDEsIHNpemVvZihRdWV1ZUJh Y2tlbmRTdGF0dXMpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgb2Zmc2V0b2YoQXN5bmNRdWV1 ZUNvbnRyb2wsIGJhY2tlbmQpKTsKIAotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTaW1wbGVMcnVT aG1lbVNpemUoTlVNX05PVElGWV9CVUZGRVJTLCAwKSk7Ci0KIAlyZXR1cm4gc2l6ZTsKIH0KIApA QCAtNTUwLDggKzU0Myw4IEBAIEFzeW5jU2htZW1Jbml0KHZvaWQpCiAJaWYgKCFmb3VuZCkKIAl7 CiAJCS8qIEZpcnN0IHRpbWUgdGhyb3VnaCwgc28gaW5pdGlhbGl6ZSBpdCAqLwotCQlTRVRfUVVF VUVfUE9TKFFVRVVFX0hFQUQsIDAsIDApOwotCQlTRVRfUVVFVUVfUE9TKFFVRVVFX1RBSUwsIDAs IDApOworCQlTRVRfUVVFVUVfUE9TKFFVRVVFX0hFQUQsIDAsIE1BWEFMSUdOKFNpemVPZlBhZ2VI ZWFkZXJEYXRhKSk7CisJCVNFVF9RVUVVRV9QT1MoUVVFVUVfVEFJTCwgMCwgTUFYQUxJR04oU2l6 ZU9mUGFnZUhlYWRlckRhdGEpKTsKIAkJUVVFVUVfU1RPUF9QQUdFID0gMDsKIAkJUVVFVUVfRklS U1RfTElTVEVORVIgPSBJbnZhbGlkQmFja2VuZElkOwogCQlhc3luY1F1ZXVlQ29udHJvbC0+bGFz dFF1ZXVlRmlsbFdhcm4gPSAwOwpAQCAtNTYxLDI0ICs1NTQsMTcgQEAgQXN5bmNTaG1lbUluaXQo dm9pZCkKIAkJCVFVRVVFX0JBQ0tFTkRfUElEKGkpID0gSW52YWxpZFBpZDsKIAkJCVFVRVVFX0JB Q0tFTkRfREJPSUQoaSkgPSBJbnZhbGlkT2lkOwogCQkJUVVFVUVfTkVYVF9MSVNURU5FUihpKSA9 IEludmFsaWRCYWNrZW5kSWQ7Ci0JCQlTRVRfUVVFVUVfUE9TKFFVRVVFX0JBQ0tFTkRfUE9TKGkp LCAwLCAwKTsKKwkJCVNFVF9RVUVVRV9QT1MoUVVFVUVfQkFDS0VORF9QT1MoaSksIDAsIE1BWEFM SUdOKFNpemVPZlBhZ2VIZWFkZXJEYXRhKSk7CiAJCX0KIAl9CiAKLQkvKgotCSAqIFNldCB1cCBT TFJVIG1hbmFnZW1lbnQgb2YgdGhlIHBnX25vdGlmeSBkYXRhLgotCSAqLwotCU5vdGlmeUN0bC0+ UGFnZVByZWNlZGVzID0gYXN5bmNRdWV1ZVBhZ2VQcmVjZWRlczsKLQlTaW1wbGVMcnVJbml0KE5v dGlmeUN0bCwgIk5vdGlmeSIsIE5VTV9OT1RJRllfQlVGRkVSUywgMCwKLQkJCQkgIE5vdGlmeVNM UlVMb2NrLCAicGdfbm90aWZ5IiwgTFdUUkFOQ0hFX05PVElGWV9CVUZGRVIsCi0JCQkJICBTWU5D X0hBTkRMRVJfTk9ORSk7Ci0KIAlpZiAoIWZvdW5kKQogCXsKIAkJLyoKIAkJICogRHVyaW5nIHN0 YXJ0IG9yIHJlYm9vdCwgY2xlYW4gb3V0IHRoZSBwZ19ub3RpZnkgZGlyZWN0b3J5LgogCQkgKi8K LQkJKHZvaWQpIFNscnVTY2FuRGlyZWN0b3J5KE5vdGlmeUN0bCwgU2xydVNjYW5EaXJDYkRlbGV0 ZUFsbCwgTlVMTCk7CisJCSh2b2lkKSBTbHJ1U2NhbkRpcmVjdG9yeShTTFJVX05PVElGWV9JRCwg YXN5bmNRdWV1ZVBhZ2VQcmVjZWRlcywKKwkJCQkJCQkJIFNscnVTY2FuRGlyQ2JEZWxldGVBbGws IE5VTEwpOwogCX0KIH0KIApAQCAtMTM0NSwxOSArMTMzMSwxOSBAQCBhc3luY1F1ZXVlQWR2YW5j ZSh2b2xhdGlsZSBRdWV1ZVBvc2l0aW9uICpwb3NpdGlvbiwgaW50IGVudHJ5TGVuZ3RoKQogCSAq IHdyaXR0ZW4gb3IgcmVhZC4KIAkgKi8KIAlvZmZzZXQgKz0gZW50cnlMZW5ndGg7Ci0JQXNzZXJ0 KG9mZnNldCA8PSBRVUVVRV9QQUdFU0laRSk7CisJQXNzZXJ0KG9mZnNldCA8PSBRVUVVRV9QQUdF U0laRSAtIE1BWEFMSUdOKFNpemVPZlBhZ2VIZWFkZXJEYXRhKSk7CiAKIAkvKgogCSAqIEluIGEg c2Vjb25kIHN0ZXAgY2hlY2sgaWYgYW5vdGhlciBlbnRyeSBjYW4gcG9zc2libHkgYmUgd3JpdHRl biB0byB0aGUKIAkgKiBwYWdlLiBJZiBzbywgc3RheSBoZXJlLCB3ZSBoYXZlIHJlYWNoZWQgdGhl IG5leHQgcG9zaXRpb24uIElmIG5vdCwgdGhlbgogCSAqIHdlIG5lZWQgdG8gbW92ZSBvbiB0byB0 aGUgbmV4dCBwYWdlLgogCSAqLwotCWlmIChvZmZzZXQgKyBRVUVVRUFMSUdOKEFzeW5jUXVldWVF bnRyeUVtcHR5U2l6ZSkgPiBRVUVVRV9QQUdFU0laRSkKKwlpZiAob2Zmc2V0ICsgUVVFVUVBTElH TihBc3luY1F1ZXVlRW50cnlFbXB0eVNpemUpID4gUVVFVUVfUEFHRVNJWkUgLSBNQVhBTElHTihT aXplT2ZQYWdlSGVhZGVyRGF0YSkpCiAJewogCQlwYWdlbm8rKzsKIAkJaWYgKHBhZ2VubyA+IFFV RVVFX01BWF9QQUdFKQogCQkJcGFnZW5vID0gMDsJCQkvKiB3cmFwIGFyb3VuZCAqLwotCQlvZmZz ZXQgPSAwOworCQlvZmZzZXQgPSBNQVhBTElHTihTaXplT2ZQYWdlSGVhZGVyRGF0YSk7IC8qIHN0 YXJ0IGF0IFNpemVPZlBhZ2VIZWFkZXJEYXRhICovCiAJCXBhZ2VKdW1wID0gdHJ1ZTsKIAl9CiAK QEAgLTE0MTEsMTAgKzEzOTcsNyBAQCBhc3luY1F1ZXVlQWRkRW50cmllcyhMaXN0Q2VsbCAqbmV4 dE5vdGlmeSkKIAlRdWV1ZVBvc2l0aW9uIHF1ZXVlX2hlYWQ7CiAJaW50CQkJcGFnZW5vOwogCWlu dAkJCW9mZnNldDsKLQlpbnQJCQlzbG90bm87Ci0KLQkvKiBXZSBob2xkIGJvdGggTm90aWZ5UXVl dWVMb2NrIGFuZCBOb3RpZnlTTFJVTG9jayBkdXJpbmcgdGhpcyBvcGVyYXRpb24gKi8KLQlMV0xv Y2tBY3F1aXJlKE5vdGlmeVNMUlVMb2NrLCBMV19FWENMVVNJVkUpOworCUJ1ZmZlcgkJYnVmZmVy OwogCiAJLyoKIAkgKiBXZSB3b3JrIHdpdGggYSBsb2NhbCBjb3B5IG9mIFFVRVVFX0hFQUQsIHdo aWNoIHdlIHdyaXRlIGJhY2sgdG8gc2hhcmVkCkBAIC0xNDM5LDEzICsxNDIyLDIwIEBAIGFzeW5j UXVldWVBZGRFbnRyaWVzKExpc3RDZWxsICpuZXh0Tm90aWZ5KQogCSAqLwogCXBhZ2VubyA9IFFV RVVFX1BPU19QQUdFKHF1ZXVlX2hlYWQpOwogCWlmIChRVUVVRV9QT1NfSVNfWkVSTyhxdWV1ZV9o ZWFkKSkKLQkJc2xvdG5vID0gU2ltcGxlTHJ1WmVyb1BhZ2UoTm90aWZ5Q3RsLCBwYWdlbm8pOwor CXsKKwkJYnVmZmVyID0gWmVyb1NscnVCdWZmZXIoU0xSVV9OT1RJRllfSUQsIHBhZ2Vubyk7CisJ CVBhZ2VTZXRIZWFkZXJEYXRhTm9uUmVsKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSwgcGFnZW5vLCBJ bnZhbGlkWExvZ1JlY1B0ciwgQkxDS1NaLCBQR19NRVRBUEFHRV9MQVlPVVRfVkVSU0lPTik7CisK Kwl9CiAJZWxzZQotCQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShOb3RpZnlDdGwsIHBhZ2Vu bywgdHJ1ZSwKLQkJCQkJCQkJICAgSW52YWxpZFRyYW5zYWN0aW9uSWQpOworCXsKKwkJYnVmZmVy ID0gUmVhZFNscnVCdWZmZXIoU0xSVV9OT1RJRllfSUQsIHBhZ2VubywgUkJNX05PUk1BTCk7CisJ CUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUpOworCX0KIAorCQogCS8q IE5vdGUgd2UgbWFyayB0aGUgcGFnZSBkaXJ0eSBiZWZvcmUgd3JpdGluZyBpbiBpdCAqLwotCU5v dGlmeUN0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVlOworCU1hcmtCdWZmZXJE aXJ0eShidWZmZXIpOwogCiAJd2hpbGUgKG5leHROb3RpZnkgIT0gTlVMTCkKIAl7CkBAIC0xNDU3 LDcgKzE0NDcsNyBAQCBhc3luY1F1ZXVlQWRkRW50cmllcyhMaXN0Q2VsbCAqbmV4dE5vdGlmeSkK IAkJb2Zmc2V0ID0gUVVFVUVfUE9TX09GRlNFVChxdWV1ZV9oZWFkKTsKIAogCQkvKiBDaGVjayB3 aGV0aGVyIHRoZSBlbnRyeSByZWFsbHkgZml0cyBvbiB0aGUgY3VycmVudCBwYWdlICovCi0JCWlm IChvZmZzZXQgKyBxZS5sZW5ndGggPD0gUVVFVUVfUEFHRVNJWkUpCisJCWlmIChvZmZzZXQgKyBx ZS5sZW5ndGggPD0gUVVFVUVfUEFHRVNJWkUgLSBNQVhBTElHTihTaXplT2ZQYWdlSGVhZGVyRGF0 YSkpCiAJCXsKIAkJCS8qIE9LLCBzbyBhZHZhbmNlIG5leHROb3RpZnkgcGFzdCB0aGlzIGl0ZW0g Ki8KIAkJCW5leHROb3RpZnkgPSBsbmV4dChwZW5kaW5nTm90aWZpZXMtPmV2ZW50cywgbmV4dE5v dGlmeSk7CkBAIC0xNDY5LDE3ICsxNDU5LDE4IEBAIGFzeW5jUXVldWVBZGRFbnRyaWVzKExpc3RD ZWxsICpuZXh0Tm90aWZ5KQogCQkJICogb25seSBjaGVjayBkYm9pZCBhbmQgc2luY2UgaXQgd29u J3QgbWF0Y2ggYW55IHJlYWRlcidzIGRhdGFiYXNlCiAJCQkgKiBPSUQsIHRoZXkgd2lsbCBpZ25v cmUgdGhpcyBlbnRyeSBhbmQgbW92ZSBvbi4KIAkJCSAqLwotCQkJcWUubGVuZ3RoID0gUVVFVUVf UEFHRVNJWkUgLSBvZmZzZXQ7CisJCQlxZS5sZW5ndGggPSBRVUVVRV9QQUdFU0laRSAtIE1BWEFM SUdOKFNpemVPZlBhZ2VIZWFkZXJEYXRhKSAtIG9mZnNldDsKIAkJCXFlLmRib2lkID0gSW52YWxp ZE9pZDsKIAkJCXFlLmRhdGFbMF0gPSAnXDAnOwkvKiBlbXB0eSBjaGFubmVsICovCiAJCQlxZS5k YXRhWzFdID0gJ1wwJzsJLyogZW1wdHkgcGF5bG9hZCAqLwogCQl9CiAKIAkJLyogTm93IGNvcHkg cWUgaW50byB0aGUgc2hhcmVkIGJ1ZmZlciBwYWdlICovCi0JCW1lbWNweShOb3RpZnlDdGwtPnNo YXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArIG9mZnNldCwKKwkJbWVtY3B5KFBhZ2VHZXRDb250 ZW50cyhCdWZmZXJHZXRQYWdlKGJ1ZmZlcikpICsgb2Zmc2V0LAogCQkJICAgJnFlLAogCQkJICAg cWUubGVuZ3RoKTsKIAorCiAJCS8qIEFkdmFuY2UgcXVldWVfaGVhZCBhcHByb3ByaWF0ZWx5LCBh bmQgZGV0ZWN0IGlmIHBhZ2UgaXMgZnVsbCAqLwogCQlpZiAoYXN5bmNRdWV1ZUFkdmFuY2UoJihx dWV1ZV9oZWFkKSwgcWUubGVuZ3RoKSkKIAkJewpAQCAtMTQ5MSw3ICsxNDgyLDEwIEBAIGFzeW5j UXVldWVBZGRFbnRyaWVzKExpc3RDZWxsICpuZXh0Tm90aWZ5KQogCQkJICogYXN5bmNRdWV1ZUlz RnVsbCgpIGVuc3VyZWQgdGhhdCB0aGVyZSBpcyByb29tIHRvIGNyZWF0ZSB0aGlzCiAJCQkgKiBw YWdlIHdpdGhvdXQgb3ZlcnJ1bm5pbmcgdGhlIHF1ZXVlLgogCQkJICovCi0JCQlzbG90bm8gPSBT aW1wbGVMcnVaZXJvUGFnZShOb3RpZnlDdGwsIFFVRVVFX1BPU19QQUdFKHF1ZXVlX2hlYWQpKTsK KwkJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKKwkJCWJ1ZmZlciA9IFplcm9TbHJ1QnVm ZmVyKFNMUlVfTk9USUZZX0lELAorCQkJCQkJCQkJUVVFVUVfUE9TX1BBR0UocXVldWVfaGVhZCkp OworCQkJTWFya0J1ZmZlckRpcnR5KGJ1ZmZlcik7CiAKIAkJCS8qCiAJCQkgKiBJZiB0aGUgbmV3 IHBhZ2UgYWRkcmVzcyBpcyBhIG11bHRpcGxlIG9mIFFVRVVFX0NMRUFOVVBfREVMQVksCkBAIC0x NTA1LDEyICsxNDk5LDExIEBAIGFzeW5jUXVldWVBZGRFbnRyaWVzKExpc3RDZWxsICpuZXh0Tm90 aWZ5KQogCQkJYnJlYWs7CiAJCX0KIAl9CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwog CiAJLyogU3VjY2Vzcywgc28gdXBkYXRlIHRoZSBnbG9iYWwgUVVFVUVfSEVBRCAqLwogCVFVRVVF X0hFQUQgPSBxdWV1ZV9oZWFkOwogCi0JTFdMb2NrUmVsZWFzZShOb3RpZnlTTFJVTG9jayk7Ci0K IAlyZXR1cm4gbmV4dE5vdGlmeTsKIH0KIApAQCAtMTk4MywxNyArMTk3NiwxNiBAQCBhc3luY1F1 ZXVlUmVhZEFsbE5vdGlmaWNhdGlvbnModm9pZCkKIAkJewogCQkJaW50CQkJY3VycGFnZSA9IFFV RVVFX1BPU19QQUdFKHBvcyk7CiAJCQlpbnQJCQljdXJvZmZzZXQgPSBRVUVVRV9QT1NfT0ZGU0VU KHBvcyk7Ci0JCQlpbnQJCQlzbG90bm87CiAJCQlpbnQJCQljb3B5c2l6ZTsKKwkJCUJ1ZmZlcgkJ YnVmZmVyOwogCiAJCQkvKgotCQkJICogV2UgY29weSB0aGUgZGF0YSBmcm9tIFNMUlUgaW50byBh IGxvY2FsIGJ1ZmZlciwgc28gYXMgdG8gYXZvaWQKLQkJCSAqIGhvbGRpbmcgdGhlIE5vdGlmeVNM UlVMb2NrIHdoaWxlIHdlIGFyZSBleGFtaW5pbmcgdGhlIGVudHJpZXMKLQkJCSAqIGFuZCBwb3Nz aWJseSB0cmFuc21pdHRpbmcgdGhlbSB0byBvdXIgZnJvbnRlbmQuICBDb3B5IG9ubHkgdGhlCi0J CQkgKiBwYXJ0IG9mIHRoZSBwYWdlIHdlIHdpbGwgYWN0dWFsbHkgaW5zcGVjdC4KKwkJCSAqIFdl IGNvcHkgdGhlIGRhdGEgaW50byBhIGxvY2FsIGJ1ZmZlciwgc28gYXMgdG8gYXZvaWQgaG9sZGlu ZyBhCisJCQkgKiBidWZmZXIgcGluIHdoaWxlIHdlIGFyZSBleGFtaW5pbmcgdGhlIGVudHJpZXMg YW5kIHBvc3NpYmx5CisJCQkgKiB0cmFuc21pdHRpbmcgdGhlbSB0byBvdXIgZnJvbnRlbmQuICBD b3B5IG9ubHkgdGhlIHBhcnQgb2YgdGhlCisJCQkgKiBwYWdlIHdlIHdpbGwgYWN0dWFsbHkgaW5z cGVjdC4KIAkJCSAqLwotCQkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkoTm90 aWZ5Q3RsLCBjdXJwYWdlLAotCQkJCQkJCQkJCQkJSW52YWxpZFRyYW5zYWN0aW9uSWQpOworCQkJ YnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9OT1RJRllfSUQsIGN1cnBhZ2UsIFJCTV9OT1JN QUwpOwogCQkJaWYgKGN1cnBhZ2UgPT0gUVVFVUVfUE9TX1BBR0UoaGVhZCkpCiAJCQl7CiAJCQkJ Lyogd2Ugb25seSB3YW50IHRvIHJlYWQgYXMgZmFyIGFzIGhlYWQgKi8KQEAgLTIwMDQsMTMgKzE5 OTYsMTIgQEAgYXN5bmNRdWV1ZVJlYWRBbGxOb3RpZmljYXRpb25zKHZvaWQpCiAJCQllbHNlCiAJ CQl7CiAJCQkJLyogZmV0Y2ggYWxsIHRoZSByZXN0IG9mIHRoZSBwYWdlICovCi0JCQkJY29weXNp emUgPSBRVUVVRV9QQUdFU0laRSAtIGN1cm9mZnNldDsKKwkJCQljb3B5c2l6ZSA9IFFVRVVFX1BB R0VTSVpFIC0gTUFYQUxJR04oU2l6ZU9mUGFnZUhlYWRlckRhdGEpIC0gY3Vyb2Zmc2V0OwogCQkJ fQotCQkJbWVtY3B5KHBhZ2VfYnVmZmVyLmJ1ZiArIGN1cm9mZnNldCwKLQkJCQkgICBOb3RpZnlD dGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArIGN1cm9mZnNldCwKKwkJCW1lbWNweShQ YWdlR2V0Q29udGVudHMocGFnZV9idWZmZXIuYnVmKSArICBjdXJvZmZzZXQsCisJCQkJICAgUGFn ZUdldENvbnRlbnRzKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSkgKyBjdXJvZmZzZXQsCiAJCQkJICAg Y29weXNpemUpOwotCQkJLyogUmVsZWFzZSBsb2NrIHRoYXQgd2UgZ290IGZyb20gU2ltcGxlTHJ1 UmVhZFBhZ2VfUmVhZE9ubHkoKSAqLwotCQkJTFdMb2NrUmVsZWFzZShOb3RpZnlTTFJVTG9jayk7 CisJCQlSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiAKIAkJCS8qCiAJCQkgKiBQcm9jZXNzIG1lc3Nh Z2VzIHVwIHRvIHRoZSBzdG9wIHBvc2l0aW9uLCBlbmQgb2YgcGFnZSwgb3IgYW4KQEAgLTIwNzgs NyArMjA2OSw3IEBAIGFzeW5jUXVldWVQcm9jZXNzUGFnZUVudHJpZXModm9sYXRpbGUgUXVldWVQ b3NpdGlvbiAqY3VycmVudCwKIAkJaWYgKFFVRVVFX1BPU19FUVVBTCh0aGlzZW50cnksIHN0b3Ap KQogCQkJYnJlYWs7CiAKLQkJcWUgPSAoQXN5bmNRdWV1ZUVudHJ5ICopIChwYWdlX2J1ZmZlciAr IFFVRVVFX1BPU19PRkZTRVQodGhpc2VudHJ5KSk7CisJCXFlID0gKEFzeW5jUXVldWVFbnRyeSAq KSAoUGFnZUdldENvbnRlbnRzKHBhZ2VfYnVmZmVyKSArIFFVRVVFX1BPU19PRkZTRVQodGhpc2Vu dHJ5KSk7CiAKIAkJLyoKIAkJICogQWR2YW5jZSAqY3VycmVudCBvdmVyIHRoaXMgbWVzc2FnZSwg cG9zc2libHkgdG8gdGhlIG5leHQgcGFnZS4gQXMKQEAgLTIyMDcsNyArMjE5OCw3IEBAIGFzeW5j UXVldWVBZHZhbmNlVGFpbCh2b2lkKQogCQkgKiBTaW1wbGVMcnVUcnVuY2F0ZSgpIHdpbGwgYXNr IGZvciBOb3RpZnlTTFJVTG9jayBidXQgd2lsbCBhbHNvCiAJCSAqIHJlbGVhc2UgdGhlIGxvY2sg YWdhaW4uCiAJCSAqLwotCQlTaW1wbGVMcnVUcnVuY2F0ZShOb3RpZnlDdGwsIG5ld3RhaWxwYWdl KTsKKwkJU2ltcGxlTHJ1VHJ1bmNhdGUoU0xSVV9OT1RJRllfSUQsIGFzeW5jUXVldWVQYWdlUHJl Y2VkZXMsIG5ld3RhaWxwYWdlKTsKIAogCQkvKgogCQkgKiBVcGRhdGUgUVVFVUVfU1RPUF9QQUdF LiAgVGhpcyBjaGFuZ2VzIGFzeW5jUXVldWVJc0Z1bGwoKSdzIHZlcmRpY3QKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RiY29tbWFuZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2RiY29tbWFuZHMuYwppbmRleCA2ZWI4NzQyNzE4MS4uNzAyNDFlNmY0YzcgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RiY29tbWFuZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9kYmNvbW1hbmRzLmMKQEAgLTI1OSw3ICsyNTksNyBAQCBTY2FuU291cmNlRGF0YWJhc2VQ Z0NsYXNzKE9pZCB0YmlkLCBPaWQgZGJpZCwgY2hhciAqc3JjcGF0aCkKIAlMaXN0CSAgICpybG9j YXRvcmxpc3QgPSBOSUw7CiAJTG9ja1JlbElkCXJlbGlkOwogCVNuYXBzaG90CXNuYXBzaG90Owot CVNNZ3JSZWxhdGlvbglzbWdyOworCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOwogCUJ1ZmZlckFjY2Vz c1N0cmF0ZWd5IGJzdHJhdGVneTsKIAogCS8qIEdldCBwZ19jbGFzcyByZWxmaWxlbnVtYmVyLiAq LwpAQCAtMjc2LDkgKzI3Niw5IEBAIFNjYW5Tb3VyY2VEYXRhYmFzZVBnQ2xhc3MoT2lkIHRiaWQs IE9pZCBkYmlkLCBjaGFyICpzcmNwYXRoKQogCXJsb2NhdG9yLmRiT2lkID0gZGJpZDsKIAlybG9j YXRvci5yZWxOdW1iZXIgPSByZWxmaWxlbnVtYmVyOwogCi0Jc21nciA9IHNtZ3JvcGVuKHJsb2Nh dG9yLCBJbnZhbGlkQmFja2VuZElkKTsKLQluYmxvY2tzID0gc21ncm5ibG9ja3Moc21nciwgTUFJ Tl9GT1JLTlVNKTsKLQlzbWdyY2xvc2Uoc21ncik7CisJc2ZpbGUgPSBzbWdyb3BlbihybG9jYXRv ciwgSW52YWxpZEJhY2tlbmRJZCwgTUFJTl9GT1JLTlVNKTsKKwluYmxvY2tzID0gc21ncm5ibG9j a3Moc2ZpbGUpOworCXNtZ3JjbG9zZShzZmlsZSk7CiAKIAkvKiBVc2UgYSBidWZmZXIgYWNjZXNz IHN0cmF0ZWd5IHNpbmNlIHRoaXMgaXMgYSBidWxrIHJlYWQgb3BlcmF0aW9uLiAqLwogCWJzdHJh dGVneSA9IEdldEFjY2Vzc1N0cmF0ZWd5KEJBU19CVUxLUkVBRCk7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVu Y2UuYwppbmRleCA5OWM5ZjkxY2JhNS4uZWUxMWVmNjNjMGUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVu Y2UuYwpAQCAtMzUzLDE0ICszNTMsMTQgQEAgZmlsbF9zZXFfd2l0aF9kYXRhKFJlbGF0aW9uIHJl bCwgSGVhcFR1cGxlIHR1cGxlKQogCiAJaWYgKHJlbC0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSA9 PSBSRUxQRVJTSVNURU5DRV9VTkxPR0dFRCkKIAl7Ci0JCVNNZ3JSZWxhdGlvbiBzcmVsOworCQlT TWdyRmlsZUhhbmRsZSBzZmlsZTsKIAotCQlzcmVsID0gc21ncm9wZW4ocmVsLT5yZF9sb2NhdG9y LCBJbnZhbGlkQmFja2VuZElkKTsKLQkJc21ncmNyZWF0ZShzcmVsLCBJTklUX0ZPUktOVU0sIGZh bHNlKTsKKwkJc2ZpbGUgPSBzbWdyb3BlbihyZWwtPnJkX2xvY2F0b3IsIEludmFsaWRCYWNrZW5k SWQsIElOSVRfRk9SS05VTSk7CisJCXNtZ3JjcmVhdGUoc2ZpbGUsIGZhbHNlKTsKIAkJbG9nX3Nt Z3JjcmVhdGUoJnJlbC0+cmRfbG9jYXRvciwgSU5JVF9GT1JLTlVNKTsKIAkJZmlsbF9zZXFfZm9y a193aXRoX2RhdGEocmVsLCB0dXBsZSwgSU5JVF9GT1JLTlVNKTsKIAkJRmx1c2hSZWxhdGlvbkJ1 ZmZlcnMocmVsKTsKLQkJc21ncmNsb3NlKHNyZWwpOworCQlzbWdyY2xvc2Uoc2ZpbGUpOwogCX0K IH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMv YmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwppbmRleCBlZTg4ZTg3ZDc2ZC4uMDY4NjJkZmEz NDYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC0xNDY3NSw5ICsxNDY3NSw3IEBAIEFs dGVyVGFibGVNb3ZlQWxsKEFsdGVyVGFibGVNb3ZlQWxsU3RtdCAqc3RtdCkKIHN0YXRpYyB2b2lk CiBpbmRleF9jb3B5X2RhdGEoUmVsYXRpb24gcmVsLCBSZWxGaWxlTG9jYXRvciBuZXdybG9jYXRv cikKIHsKLQlTTWdyUmVsYXRpb24gZHN0cmVsOwotCi0JZHN0cmVsID0gc21ncm9wZW4obmV3cmxv Y2F0b3IsIHJlbC0+cmRfYmFja2VuZCk7CisJU01nckZpbGVIYW5kbGUgZHN0bWFpbjsKIAogCS8q CiAJICogU2luY2Ugd2UgY29weSB0aGUgZmlsZSBkaXJlY3RseSB3aXRob3V0IGxvb2tpbmcgYXQg dGhlIHNoYXJlZCBidWZmZXJzLApAQCAtMTQ2OTcsMTYgKzE0Njk1LDIwIEBAIGluZGV4X2NvcHlf ZGF0YShSZWxhdGlvbiByZWwsIFJlbEZpbGVMb2NhdG9yIG5ld3Jsb2NhdG9yKQogCVJlbGF0aW9u Q3JlYXRlU3RvcmFnZShuZXdybG9jYXRvciwgcmVsLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlLCB0 cnVlKTsKIAogCS8qIGNvcHkgbWFpbiBmb3JrICovCi0JUmVsYXRpb25Db3B5U3RvcmFnZShSZWxh dGlvbkdldFNtZ3IocmVsKSwgZHN0cmVsLCBNQUlOX0ZPUktOVU0sCisJZHN0bWFpbiA9IHNtZ3Jv cGVuKG5ld3Jsb2NhdG9yLCByZWwtPnJkX2JhY2tlbmQsIE1BSU5fRk9SS05VTSk7CisJUmVsYXRp b25Db3B5U3RvcmFnZShSZWxhdGlvbkdldFNtZ3IocmVsLCBNQUlOX0ZPUktOVU0pLCBkc3RtYWlu LAogCQkJCQkJcmVsLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlKTsKIAogCS8qIGNvcHkgdGhvc2Ug ZXh0cmEgZm9ya3MgdGhhdCBleGlzdCAqLwogCWZvciAoRm9ya051bWJlciBmb3JrTnVtID0gTUFJ Tl9GT1JLTlVNICsgMTsKIAkJIGZvcmtOdW0gPD0gTUFYX0ZPUktOVU07IGZvcmtOdW0rKykKIAl7 Ci0JCWlmIChzbWdyZXhpc3RzKFJlbGF0aW9uR2V0U21ncihyZWwpLCBmb3JrTnVtKSkKKwkJaWYg KHNtZ3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKHJlbCwgZm9ya051bSkpKQogCQl7Ci0JCQlzbWdy Y3JlYXRlKGRzdHJlbCwgZm9ya051bSwgZmFsc2UpOworCQkJU01nckZpbGVIYW5kbGUgc3JjX2Zv cmsgPSBSZWxhdGlvbkdldFNtZ3IocmVsLCBmb3JrTnVtKTsKKwkJCVNNZ3JGaWxlSGFuZGxlIGRz dF9mb3JrID0gc21ncm9wZW4obmV3cmxvY2F0b3IsIHJlbC0+cmRfYmFja2VuZCwgZm9ya051bSk7 CisKKwkJCXNtZ3JjcmVhdGUoZHN0X2ZvcmssIGZhbHNlKTsKIAogCQkJLyoKIAkJCSAqIFdBTCBs b2cgY3JlYXRpb24gaWYgdGhlIHJlbGF0aW9uIGlzIHBlcnNpc3RlbnQsIG9yIHRoaXMgaXMgdGhl CkBAIC0xNDcxNiwxNCArMTQ3MTgsMTUgQEAgaW5kZXhfY29weV9kYXRhKFJlbGF0aW9uIHJlbCwg UmVsRmlsZUxvY2F0b3IgbmV3cmxvY2F0b3IpCiAJCQkJKHJlbC0+cmRfcmVsLT5yZWxwZXJzaXN0 ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9VTkxPR0dFRCAmJgogCQkJCSBmb3JrTnVtID09IElOSVRf Rk9SS05VTSkpCiAJCQkJbG9nX3NtZ3JjcmVhdGUoJm5ld3Jsb2NhdG9yLCBmb3JrTnVtKTsKLQkJ CVJlbGF0aW9uQ29weVN0b3JhZ2UoUmVsYXRpb25HZXRTbWdyKHJlbCksIGRzdHJlbCwgZm9ya051 bSwKKwkJCVJlbGF0aW9uQ29weVN0b3JhZ2Uoc3JjX2ZvcmssIGRzdF9mb3JrLAogCQkJCQkJCQly ZWwtPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UpOworCQkJc21ncmNsb3NlKGRzdF9mb3JrKTsKIAkJ fQogCX0KIAogCS8qIGRyb3Agb2xkIHJlbGF0aW9uLCBhbmQgY2xvc2UgbmV3IG9uZSAqLwogCVJl bGF0aW9uRHJvcFN0b3JhZ2UocmVsKTsKLQlzbWdyY2xvc2UoZHN0cmVsKTsKKwlzbWdyY2xvc2Uo ZHN0bWFpbik7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZl ci9idWZfaW5pdC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYwppbmRl eCA2YjYyNjQ4NTRlNi4uNDE4MTljNTkwZTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvYnVmZmVyL2J1Zl9pbml0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVm X2luaXQuYwpAQCAtMjAsNiArMjAsNyBAQAogCiBCdWZmZXJEZXNjUGFkZGVkICpCdWZmZXJEZXNj cmlwdG9yczsKIGNoYXIJICAgKkJ1ZmZlckJsb2NrczsKK1hMb2dSZWNQdHIgKkJ1ZmZlckV4dGVy bmFsTFNOczsKIENvbmRpdGlvblZhcmlhYmxlTWluaW1hbGx5UGFkZGVkICpCdWZmZXJJT0NWQXJy YXk7CiBXcml0ZWJhY2tDb250ZXh0IEJhY2tlbmRXcml0ZWJhY2tDb250ZXh0OwogQ2twdFNvcnRJ dGVtICpDa3B0QnVmZmVySWRzOwpAQCAtNjksOSArNzAsMTEgQEAgSW5pdEJ1ZmZlclBvb2wodm9p ZCkKIHsKIAlib29sCQlmb3VuZEJ1ZnMsCiAJCQkJZm91bmREZXNjcywKKwkJCQlmb3VuZExTTnMs CiAJCQkJZm91bmRJT0NWLAogCQkJCWZvdW5kQnVmQ2twdDsKIAorCiAJLyogQWxpZ24gZGVzY3Jp cHRvcnMgdG8gYSBjYWNoZWxpbmUgYm91bmRhcnkuICovCiAJQnVmZmVyRGVzY3JpcHRvcnMgPSAo QnVmZmVyRGVzY1BhZGRlZCAqKQogCQlTaG1lbUluaXRTdHJ1Y3QoIkJ1ZmZlciBEZXNjcmlwdG9y cyIsCkBAIC04OCw2ICs5MSwxMSBAQCBJbml0QnVmZmVyUG9vbCh2b2lkKQogCQkJCQkJTkJ1ZmZl cnMgKiBzaXplb2YoQ29uZGl0aW9uVmFyaWFibGVNaW5pbWFsbHlQYWRkZWQpLAogCQkJCQkJJmZv dW5kSU9DVik7CiAKKwlCdWZmZXJFeHRlcm5hbExTTnMgPSAoWExvZ1JlY1B0ciAqKQorCQlTaG1l bUluaXRTdHJ1Y3QoIkJ1ZmZlciBFeHRlcm5hbCBMU05zIiwKKwkJCQkJCU5CdWZmZXJzICogc2l6 ZW9mKFhMb2dSZWNQdHIpLAorCQkJCQkJJmZvdW5kTFNOcyk7CisKIAkvKgogCSAqIFRoZSBhcnJh eSB1c2VkIHRvIHNvcnQgdG8tYmUtY2hlY2twb2ludGVkIGJ1ZmZlciBpZHMgaXMgbG9jYXRlZCBp bgogCSAqIHNoYXJlZCBtZW1vcnksIHRvIGF2b2lkIGhhdmluZyB0byBhbGxvY2F0ZSBzaWduaWZp Y2FudCBhbW91bnRzIG9mCkBAIC05OSwxMCArMTA3LDEwIEBAIEluaXRCdWZmZXJQb29sKHZvaWQp CiAJCVNobWVtSW5pdFN0cnVjdCgiQ2hlY2twb2ludCBCdWZmZXJJZHMiLAogCQkJCQkJTkJ1ZmZl cnMgKiBzaXplb2YoQ2twdFNvcnRJdGVtKSwgJmZvdW5kQnVmQ2twdCk7CiAKLQlpZiAoZm91bmRE ZXNjcyB8fCBmb3VuZEJ1ZnMgfHwgZm91bmRJT0NWIHx8IGZvdW5kQnVmQ2twdCkKKwlpZiAoZm91 bmREZXNjcyB8fCBmb3VuZEJ1ZnMgfHwgZm91bmRJT0NWIHx8IGZvdW5kQnVmQ2twdCB8fCBmb3Vu ZExTTnMpCiAJewogCQkvKiBzaG91bGQgZmluZCBhbGwgb2YgdGhlc2UsIG9yIG5vbmUgb2YgdGhl bSAqLwotCQlBc3NlcnQoZm91bmREZXNjcyAmJiBmb3VuZEJ1ZnMgJiYgZm91bmRJT0NWICYmIGZv dW5kQnVmQ2twdCk7CisJCUFzc2VydChmb3VuZERlc2NzICYmIGZvdW5kQnVmcyAmJiBmb3VuZElP Q1YgJiYgZm91bmRCdWZDa3B0ICYmIGZvdW5kTFNOcyk7CiAJCS8qIG5vdGU6IHRoaXMgcGF0aCBp cyBvbmx5IHRha2VuIGluIEVYRUNfQkFDS0VORCBjYXNlICovCiAJfQogCWVsc2UKQEAgLTEzMyw2 ICsxNDEsOCBAQCBJbml0QnVmZmVyUG9vbCh2b2lkKQogCQkJCQkJCSBMV1RSQU5DSEVfQlVGRkVS X0NPTlRFTlQpOwogCiAJCQlDb25kaXRpb25WYXJpYWJsZUluaXQoQnVmZmVyRGVzY3JpcHRvckdl dElPQ1YoYnVmKSk7CisKKwkJCUJ1ZmZlckV4dGVybmFsTFNOc1tpXSA9IEludmFsaWRYTG9nUmVj UHRyOwogCQl9CiAKIAkJLyogQ29ycmVjdCBsYXN0IGVudHJ5IG9mIGxpbmtlZCBsaXN0ICovCkBA IC0xNjYsNiArMTc2LDkgQEAgQnVmZmVyU2htZW1TaXplKHZvaWQpCiAJLyogc2l6ZSBvZiBkYXRh IHBhZ2VzICovCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKE5CdWZmZXJzLCBCTENL U1opKTsKIAorCS8qIHNpemUgb2YgZXh0ZXJuYWwgTFNOcyAqLworCXNpemUgPSBhZGRfc2l6ZShz aXplLCBtdWxfc2l6ZShOQnVmZmVycywgc2l6ZW9mKFhMb2dSZWNQdHIpKSk7CisKIAkvKiBzaXpl IG9mIHN0dWZmIGNvbnRyb2xsZWQgYnkgZnJlZWxpc3QuYyAqLwogCXNpemUgPSBhZGRfc2l6ZShz aXplLCBTdHJhdGVneVNobWVtU2l6ZSgpKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmbWdyLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3Iu YwppbmRleCA3M2QzMGJmNjE5MS4uODE1NGU0YjAxM2YgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVy L2J1Zm1nci5jCkBAIC01NywxMCArNTcsMTcgQEAKICNpbmNsdWRlICJ1dGlscy9yZXNvd25lcl9w cml2YXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvdGltZXN0YW1wLmgiCiAKKy8qCisgKiBYWFggSWRl YWxseSB3ZSdkIHN3aXRjaCB0byBzdGFuZGFyZCBwYWdlcyBmb3IgU0xSVSBkYXRhLCBidXQgaW4g dGhlCisgKiBtZWFudGltZSB3ZSBuZWVkIHNvbWUgd2F5IHRvIGlkZW50aWZ5IGJ1ZmZlcnMgdGhh dCBob2xkIHJhdyBkYXRhIChubworICogaW52YXNpdmUgTFNOLCBubyBjaGVja3N1bXMpLgorICov CiAKIC8qIE5vdGU6IHRoZXNlIHR3byBtYWNyb3Mgb25seSB3b3JrIG9uIHNoYXJlZCBidWZmZXJz LCBub3QgbG9jYWwgb25lcyEgKi8KICNkZWZpbmUgQnVmSGRyR2V0QmxvY2soYnVmSGRyKQkoKEJs b2NrKSAoQnVmZmVyQmxvY2tzICsgKChTaXplKSAoYnVmSGRyKS0+YnVmX2lkKSAqIEJMQ0tTWikp Ci0jZGVmaW5lIEJ1ZmZlckdldExTTihidWZIZHIpCShQYWdlR2V0TFNOKEJ1ZkhkckdldEJsb2Nr KGJ1ZkhkcikpKQorCisjZGVmaW5lIEJ1ZmZlckdldExTTihidWZIZHIpIFwKKwkJUGFnZUdldExT TihCdWZIZHJHZXRCbG9jayhidWZIZHIpKQogCiAvKiBOb3RlOiB0aGlzIG1hY3JvIG9ubHkgd29y a3Mgb24gbG9jYWwgYnVmZmVycywgbm90IHNoYXJlZCBvbmVzISAqLwogI2RlZmluZSBMb2NhbEJ1 ZkhkckdldEJsb2NrKGJ1ZkhkcikgXApAQCAtMTE3LDE5ICsxMjQsNiBAQCB0eXBlZGVmIHN0cnVj dCBDa3B0VHNTdGF0dXMKIAlpbnQJCQlpbmRleDsKIH0gQ2twdFRzU3RhdHVzOwogCi0vKgotICog VHlwZSBmb3IgYXJyYXkgdXNlZCB0byBzb3J0IFNNZ3JSZWxhdGlvbnMKLSAqCi0gKiBGbHVzaFJl bGF0aW9uc0FsbEJ1ZmZlcnMgc2hhcmVzIHRoZSBzYW1lIGNvbXBhcmF0b3IgZnVuY3Rpb24gd2l0 aAotICogRHJvcFJlbGF0aW9uc0FsbEJ1ZmZlcnMuIFBvaW50ZXIgdG8gdGhpcyBzdHJ1Y3QgYW5k IFJlbEZpbGVMb2NhdG9yIG11c3QgYmUKLSAqIGNvbXBhdGlibGUuCi0gKi8KLXR5cGVkZWYgc3Ry dWN0IFNNZ3JTb3J0QXJyYXkKLXsKLQlSZWxGaWxlTG9jYXRvciBybG9jYXRvcjsJLyogVGhpcyBt dXN0IGJlIHRoZSBmaXJzdCBtZW1iZXIgKi8KLQlTTWdyUmVsYXRpb24gc3JlbDsKLX0gU01nclNv cnRBcnJheTsKLQogLyogR1VDIHZhcmlhYmxlcyAqLwogYm9vbAkJemVyb19kYW1hZ2VkX3BhZ2Vz ID0gZmFsc2U7CiBpbnQJCQliZ3dyaXRlcl9scnVfbWF4cGFnZXMgPSAxMDA7CkBAIC00NTksOCAr NDUzLDggQEAgRm9yZ2V0UHJpdmF0ZVJlZkNvdW50RW50cnkoUHJpdmF0ZVJlZkNvdW50RW50cnkg KnJlZikKICkKIAogCi1zdGF0aWMgQnVmZmVyIFJlYWRCdWZmZXJfY29tbW9uKFNNZ3JSZWxhdGlv biBzbWdyLCBjaGFyIHJlbHBlcnNpc3RlbmNlLAotCQkJCQkJCQlGb3JrTnVtYmVyIGZvcmtOdW0s IEJsb2NrTnVtYmVyIGJsb2NrTnVtLAorc3RhdGljIEJ1ZmZlciBSZWFkQnVmZmVyX2NvbW1vbihT TWdyRmlsZUhhbmRsZSBzZmlsZSwgY2hhciByZWxwZXJzaXN0ZW5jZSwKKwkJCQkJCQkJQmxvY2tO dW1iZXIgYmxvY2tOdW0sCiAJCQkJCQkJCVJlYWRCdWZmZXJNb2RlIG1vZGUsIEJ1ZmZlckFjY2Vz c1N0cmF0ZWd5IHN0cmF0ZWd5LAogCQkJCQkJCQlib29sICpoaXQpOwogc3RhdGljIGJvb2wgUGlu QnVmZmVyKEJ1ZmZlckRlc2MgKmJ1ZiwgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3kpOwpA QCAtNDc2LDIwICs0NzAsMTkgQEAgc3RhdGljIHZvaWQgVGVybWluYXRlQnVmZmVySU8oQnVmZmVy RGVzYyAqYnVmLCBib29sIGNsZWFyX2RpcnR5LAogCQkJCQkJCSAgdWludDMyIHNldF9mbGFnX2Jp dHMpOwogc3RhdGljIHZvaWQgc2hhcmVkX2J1ZmZlcl93cml0ZV9lcnJvcl9jYWxsYmFjayh2b2lk ICphcmcpOwogc3RhdGljIHZvaWQgbG9jYWxfYnVmZmVyX3dyaXRlX2Vycm9yX2NhbGxiYWNrKHZv aWQgKmFyZyk7Ci1zdGF0aWMgQnVmZmVyRGVzYyAqQnVmZmVyQWxsb2MoU01nclJlbGF0aW9uIHNt Z3IsCitzdGF0aWMgQnVmZmVyRGVzYyAqQnVmZmVyQWxsb2MoU01nckZpbGVIYW5kbGUgc21nciwK IAkJCQkJCQkgICBjaGFyIHJlbHBlcnNpc3RlbmNlLAotCQkJCQkJCSAgIEZvcmtOdW1iZXIgZm9y a051bSwKIAkJCQkJCQkgICBCbG9ja051bWJlciBibG9ja051bSwKIAkJCQkJCQkgICBCdWZmZXJB Y2Nlc3NTdHJhdGVneSBzdHJhdGVneSwKIAkJCQkJCQkgICBib29sICpmb3VuZFB0cik7Ci1zdGF0 aWMgdm9pZCBGbHVzaEJ1ZmZlcihCdWZmZXJEZXNjICpidWYsIFNNZ3JSZWxhdGlvbiByZWxuKTsK K3N0YXRpYyB2b2lkIEZsdXNoQnVmZmVyKEJ1ZmZlckRlc2MgKmJ1ZiwgU01nckZpbGVIYW5kbGUg c2ZpbGUpOwogc3RhdGljIHZvaWQgRmluZEFuZERyb3BSZWxhdGlvbkJ1ZmZlcnMoUmVsRmlsZUxv Y2F0b3IgcmxvY2F0b3IsCi0JCQkJCQkJCQkgICBGb3JrTnVtYmVyIGZvcmtOdW0sCisJCQkJCQkJ CQkgICBGb3JrTnVtYmVyIGZvcmtudW0sCiAJCQkJCQkJCQkgICBCbG9ja051bWJlciBuRm9ya0Js b2NrLAogCQkJCQkJCQkJICAgQmxvY2tOdW1iZXIgZmlyc3REZWxCbG9jayk7CiBzdGF0aWMgdm9p ZCBSZWxhdGlvbkNvcHlTdG9yYWdlVXNpbmdCdWZmZXIoUmVsRmlsZUxvY2F0b3Igc3JjbG9jYXRv ciwKIAkJCQkJCQkJCQkgICBSZWxGaWxlTG9jYXRvciBkc3Rsb2NhdG9yLAotCQkJCQkJCQkJCSAg IEZvcmtOdW1iZXIgZm9ya051bSwgYm9vbCBwZXJtYW5lbnQpOworCQkJCQkJCQkJCSAgIEZvcmtO dW1iZXIgZm9ya251bSwgYm9vbCBwZXJtYW5lbnQpOwogc3RhdGljIHZvaWQgQXRQcm9jRXhpdF9C dWZmZXJzKGludCBjb2RlLCBEYXR1bSBhcmcpOwogc3RhdGljIHZvaWQgQ2hlY2tGb3JCdWZmZXJM ZWFrcyh2b2lkKTsKIHN0YXRpYyBpbnQJcmxvY2F0b3JfY29tcGFyYXRvcihjb25zdCB2b2lkICpw MSwgY29uc3Qgdm9pZCAqcDIpOwpAQCAtNTAyLDkgKzQ5NSw3IEBAIHN0YXRpYyBpbnQJdHNfY2tw dF9wcm9ncmVzc19jb21wYXJhdG9yKERhdHVtIGEsIERhdHVtIGIsIHZvaWQgKmFyZyk7CiAgKiBJ bXBsZW1lbnRhdGlvbiBvZiBQcmVmZXRjaEJ1ZmZlcigpIGZvciBzaGFyZWQgYnVmZmVycy4KICAq LwogUHJlZmV0Y2hCdWZmZXJSZXN1bHQKLVByZWZldGNoU2hhcmVkQnVmZmVyKFNNZ3JSZWxhdGlv biBzbWdyX3JlbG4sCi0JCQkJCSBGb3JrTnVtYmVyIGZvcmtOdW0sCi0JCQkJCSBCbG9ja051bWJl ciBibG9ja051bSkKK1ByZWZldGNoU2hhcmVkQnVmZmVyKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBC bG9ja051bWJlciBibG9ja051bSkKIHsKIAlQcmVmZXRjaEJ1ZmZlclJlc3VsdCByZXN1bHQgPSB7 SW52YWxpZEJ1ZmZlciwgZmFsc2V9OwogCUJ1ZmZlclRhZwluZXdUYWc7CQkJLyogaWRlbnRpdHkg b2YgcmVxdWVzdGVkIGJsb2NrICovCkBAIC01MTUsOCArNTA2LDggQEAgUHJlZmV0Y2hTaGFyZWRC dWZmZXIoU01nclJlbGF0aW9uIHNtZ3JfcmVsbiwKIAlBc3NlcnQoQmxvY2tOdW1iZXJJc1ZhbGlk KGJsb2NrTnVtKSk7CiAKIAkvKiBjcmVhdGUgYSB0YWcgc28gd2UgY2FuIGxvb2t1cCB0aGUgYnVm ZmVyICovCi0JSW5pdEJ1ZmZlclRhZygmbmV3VGFnLCAmc21ncl9yZWxuLT5zbWdyX3Jsb2NhdG9y LmxvY2F0b3IsCi0JCQkJICAgZm9ya051bSwgYmxvY2tOdW0pOworCUluaXRCdWZmZXJUYWcoJm5l d1RhZywgJnNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvciwKKwkJCQkgICBzZmlsZS0+c21ncl9s b2NhdG9yLmZvcmtudW0sIGJsb2NrTnVtKTsKIAogCS8qIGRldGVybWluZSBpdHMgaGFzaCBjb2Rl IGFuZCBwYXJ0aXRpb24gbG9jayBJRCAqLwogCW5ld0hhc2ggPSBCdWZUYWJsZUhhc2hDb2RlKCZu ZXdUYWcpOwpAQCAtNTM1LDcgKzUyNiw3IEBAIFByZWZldGNoU2hhcmVkQnVmZmVyKFNNZ3JSZWxh dGlvbiBzbWdyX3JlbG4sCiAJCSAqIFRyeSB0byBpbml0aWF0ZSBhbiBhc3luY2hyb25vdXMgcmVh ZC4gIFRoaXMgcmV0dXJucyBmYWxzZSBpbgogCQkgKiByZWNvdmVyeSBpZiB0aGUgcmVsYXRpb24g ZmlsZSBkb2Vzbid0IGV4aXN0LgogCQkgKi8KLQkJaWYgKHNtZ3JwcmVmZXRjaChzbWdyX3JlbG4s IGZvcmtOdW0sIGJsb2NrTnVtKSkKKwkJaWYgKHNtZ3JwcmVmZXRjaChzZmlsZSwgYmxvY2tOdW0p KQogCQkJcmVzdWx0LmluaXRpYXRlZF9pbyA9IHRydWU7CiAjZW5kaWYJCQkJCQkJLyogVVNFX1BS RUZFVENIICovCiAJfQpAQCAtNTg5LDcgKzU4MCw3IEBAIFByZWZldGNoU2hhcmVkQnVmZmVyKFNN Z3JSZWxhdGlvbiBzbWdyX3JlbG4sCiAgKiByZWNvdmVyeSwgYW4gZXJyb3IgaXMgcmFpc2VkKS4K ICAqLwogUHJlZmV0Y2hCdWZmZXJSZXN1bHQKLVByZWZldGNoQnVmZmVyKFJlbGF0aW9uIHJlbG4s IEZvcmtOdW1iZXIgZm9ya051bSwgQmxvY2tOdW1iZXIgYmxvY2tOdW0pCitQcmVmZXRjaEJ1ZmZl cihSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrTnVt KQogewogCUFzc2VydChSZWxhdGlvbklzVmFsaWQocmVsbikpOwogCUFzc2VydChCbG9ja051bWJl cklzVmFsaWQoYmxvY2tOdW0pKTsKQEAgLTYwMywxMiArNTk0LDEyIEBAIFByZWZldGNoQnVmZmVy KFJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya051bSwgQmxvY2tOdW1iZXIgYmxvY2tOdW0p CiAJCQkJCSBlcnJtc2coImNhbm5vdCBhY2Nlc3MgdGVtcG9yYXJ5IHRhYmxlcyBvZiBvdGhlciBz ZXNzaW9ucyIpKSk7CiAKIAkJLyogcGFzcyBpdCBvZmYgdG8gbG9jYWxidWYuYyAqLwotCQlyZXR1 cm4gUHJlZmV0Y2hMb2NhbEJ1ZmZlcihSZWxhdGlvbkdldFNtZ3IocmVsbiksIGZvcmtOdW0sIGJs b2NrTnVtKTsKKwkJcmV0dXJuIFByZWZldGNoTG9jYWxCdWZmZXIoUmVsYXRpb25HZXRTbWdyKHJl bG4sIGZvcmtudW0pLCBibG9ja051bSk7CiAJfQogCWVsc2UKIAl7CiAJCS8qIHBhc3MgaXQgdG8g dGhlIHNoYXJlZCBidWZmZXIgdmVyc2lvbiAqLwotCQlyZXR1cm4gUHJlZmV0Y2hTaGFyZWRCdWZm ZXIoUmVsYXRpb25HZXRTbWdyKHJlbG4pLCBmb3JrTnVtLCBibG9ja051bSk7CisJCXJldHVybiBQ cmVmZXRjaFNoYXJlZEJ1ZmZlcihSZWxhdGlvbkdldFNtZ3IocmVsbiwgZm9ya251bSksIGJsb2Nr TnVtKTsKIAl9CiB9CiAKQEAgLTYyMCw3ICs2MTEsNyBAQCBQcmVmZXRjaEJ1ZmZlcihSZWxhdGlv biByZWxuLCBGb3JrTnVtYmVyIGZvcmtOdW0sIEJsb2NrTnVtYmVyIGJsb2NrTnVtKQogICogdGFn LiAgSW4gdGhhdCBjYXNlLCB0aGUgYnVmZmVyIGlzIHBpbm5lZCBhbmQgdGhlIHVzYWdlIGNvdW50 IGlzIGJ1bXBlZC4KICAqLwogYm9vbAotUmVhZFJlY2VudEJ1ZmZlcihSZWxGaWxlTG9jYXRvciBy bG9jYXRvciwgRm9ya051bWJlciBmb3JrTnVtLCBCbG9ja051bWJlciBibG9ja051bSwKK1JlYWRS ZWNlbnRCdWZmZXIoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya251bSwg QmxvY2tOdW1iZXIgYmxvY2tOdW0sCiAJCQkJIEJ1ZmZlciByZWNlbnRfYnVmZmVyKQogewogCUJ1 ZmZlckRlc2MgKmJ1ZkhkcjsKQEAgLTYzMiw3ICs2MjMsNyBAQCBSZWFkUmVjZW50QnVmZmVyKFJl bEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtOdW0sIEJsb2NrTnVtYmVyIGJs b2NrTgogCiAJUmVzb3VyY2VPd25lckVubGFyZ2VCdWZmZXJzKEN1cnJlbnRSZXNvdXJjZU93bmVy KTsKIAlSZXNlcnZlUHJpdmF0ZVJlZkNvdW50RW50cnkoKTsKLQlJbml0QnVmZmVyVGFnKCZ0YWcs ICZybG9jYXRvciwgZm9ya051bSwgYmxvY2tOdW0pOworCUluaXRCdWZmZXJUYWcoJnRhZywgJnJs b2NhdG9yLCBmb3JrbnVtLCBibG9ja051bSk7CiAKIAlpZiAoQnVmZmVySXNMb2NhbChyZWNlbnRf YnVmZmVyKSkKIAl7CkBAIC03NTYsNyArNzQ3LDcgQEAgUmVhZEJ1ZmZlcihSZWxhdGlvbiByZWxu LCBCbG9ja051bWJlciBibG9ja051bSkKICAqIFNlZSBidWZmZXIvUkVBRE1FIGZvciBkZXRhaWxz LgogICovCiBCdWZmZXIKLVJlYWRCdWZmZXJFeHRlbmRlZChSZWxhdGlvbiByZWxuLCBGb3JrTnVt YmVyIGZvcmtOdW0sIEJsb2NrTnVtYmVyIGJsb2NrTnVtLAorUmVhZEJ1ZmZlckV4dGVuZGVkKFJl bGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tOdW0sCiAJ CQkJICAgUmVhZEJ1ZmZlck1vZGUgbW9kZSwgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3kp CiB7CiAJYm9vbAkJaGl0OwpAQCAtNzc3LDggKzc2OCw5IEBAIFJlYWRCdWZmZXJFeHRlbmRlZChS ZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtOdW0sIEJsb2NrTnVtYmVyIGJsb2NrTnVtLAog CSAqIG1pc3MuCiAJICovCiAJcGdzdGF0X2NvdW50X2J1ZmZlcl9yZWFkKHJlbG4pOwotCWJ1ZiA9 IFJlYWRCdWZmZXJfY29tbW9uKFJlbGF0aW9uR2V0U21ncihyZWxuKSwgcmVsbi0+cmRfcmVsLT5y ZWxwZXJzaXN0ZW5jZSwKLQkJCQkJCQlmb3JrTnVtLCBibG9ja051bSwgbW9kZSwgc3RyYXRlZ3ks ICZoaXQpOworCWJ1ZiA9IFJlYWRCdWZmZXJfY29tbW9uKFJlbGF0aW9uR2V0U21ncihyZWxuLCBm b3JrbnVtKSwKKwkJCQkJCQlyZWxuLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlLAorCQkJCQkJCWJs b2NrTnVtLCBtb2RlLCBzdHJhdGVneSwgJmhpdCk7CiAJaWYgKGhpdCkKIAkJcGdzdGF0X2NvdW50 X2J1ZmZlcl9oaXQocmVsbik7CiAJcmV0dXJuIGJ1ZjsKQEAgLTc5NiwxOSArNzg4LDMxIEBAIFJl YWRCdWZmZXJFeHRlbmRlZChSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtOdW0sIEJsb2Nr TnVtYmVyIGJsb2NrTnVtLAogICogQmFja2VuZElkKS4KICAqLwogQnVmZmVyCi1SZWFkQnVmZmVy V2l0aG91dFJlbGNhY2hlKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtO dW0sCitSZWFkQnVmZmVyV2l0aG91dFJlbGNhY2hlKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBG b3JrTnVtYmVyIGZvcmtudW0sCiAJCQkJCQkgIEJsb2NrTnVtYmVyIGJsb2NrTnVtLCBSZWFkQnVm ZmVyTW9kZSBtb2RlLAogCQkJCQkJICBCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSwgYm9v bCBwZXJtYW5lbnQpCiB7CiAJYm9vbAkJaGl0OwogCi0JU01nclJlbGF0aW9uIHNtZ3IgPSBzbWdy b3BlbihybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCk7CisJU01nckZpbGVIYW5kbGUgc2ZpbGUg PSBzbWdyb3BlbihybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCwgZm9ya251bSk7CiAKLQlyZXR1 cm4gUmVhZEJ1ZmZlcl9jb21tb24oc21nciwgcGVybWFuZW50ID8gUkVMUEVSU0lTVEVOQ0VfUEVS TUFORU5UIDoKLQkJCQkJCQkgUkVMUEVSU0lTVEVOQ0VfVU5MT0dHRUQsIGZvcmtOdW0sIGJsb2Nr TnVtLAorCXJldHVybiBSZWFkQnVmZmVyX2NvbW1vbihzZmlsZSwgcGVybWFuZW50ID8gUkVMUEVS U0lTVEVOQ0VfUEVSTUFORU5UIDoKKwkJCQkJCQkgUkVMUEVSU0lTVEVOQ0VfVU5MT0dHRUQsIGJs b2NrTnVtLAogCQkJCQkJCSBtb2RlLCBzdHJhdGVneSwgJmhpdCk7CiB9CiAKK0J1ZmZlcgorUmVh ZEJ1ZmZlcldpdGhvdXRSZWxjYWNoZVdpdGhIaXQoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEZv cmtOdW1iZXIgZm9ya251bSwKKwkJCQkJCQkJIEJsb2NrTnVtYmVyIGJsb2NrTnVtLCBSZWFkQnVm ZmVyTW9kZSBtb2RlLAorCQkJCQkJCQkgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIGJv b2wgcGVybWFuZW50LCBib29sICpoaXQpCit7CisJU01nckZpbGVIYW5kbGUgc2ZpbGUgPSBzbWdy b3BlbihybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCwgZm9ya251bSk7CisKKwlyZXR1cm4gUmVh ZEJ1ZmZlcl9jb21tb24oc2ZpbGUsIHBlcm1hbmVudCA/IFJFTFBFUlNJU1RFTkNFX1BFUk1BTkVO VCA6CisJCQkJCQkJIFJFTFBFUlNJU1RFTkNFX1VOTE9HR0VELCBibG9ja051bSwKKwkJCQkJCQkg bW9kZSwgc3RyYXRlZ3ksIGhpdCk7Cit9CisKIAogLyoKICAqIFJlYWRCdWZmZXJfY29tbW9uIC0t IGNvbW1vbiBsb2dpYyBmb3IgYWxsIFJlYWRCdWZmZXIgdmFyaWFudHMKQEAgLTgxNiw3ICs4MjAs NyBAQCBSZWFkQnVmZmVyV2l0aG91dFJlbGNhY2hlKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBG b3JrTnVtYmVyIGZvcmtOdW0sCiAgKiAqaGl0IGlzIHNldCB0byB0cnVlIGlmIHRoZSByZXF1ZXN0 IHdhcyBzYXRpc2ZpZWQgZnJvbSBzaGFyZWQgYnVmZmVyIGNhY2hlLgogICovCiBzdGF0aWMgQnVm ZmVyCi1SZWFkQnVmZmVyX2NvbW1vbihTTWdyUmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0 ZW5jZSwgRm9ya051bWJlciBmb3JrTnVtLAorUmVhZEJ1ZmZlcl9jb21tb24oU01nckZpbGVIYW5k bGUgc2ZpbGUsIGNoYXIgcmVscGVyc2lzdGVuY2UsCiAJCQkJICBCbG9ja051bWJlciBibG9ja051 bSwgUmVhZEJ1ZmZlck1vZGUgbW9kZSwKIAkJCQkgIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0 ZWd5LCBib29sICpoaXQpCiB7CkBAIC04MjQsNyArODI4LDcgQEAgUmVhZEJ1ZmZlcl9jb21tb24o U01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgcmVscGVyc2lzdGVuY2UsIEZvcmtOdW1iZXIgZm9ya051 bSwKIAlCbG9jawkJYnVmQmxvY2s7CiAJYm9vbAkJZm91bmQ7CiAJYm9vbAkJaXNFeHRlbmQ7Ci0J Ym9vbAkJaXNMb2NhbEJ1ZiA9IFNtZ3JJc1RlbXAoc21ncik7CisJYm9vbAkJaXNMb2NhbEJ1ZiA9 IFNtZ3JJc1RlbXAoc2ZpbGUpOwogCiAJKmhpdCA9IGZhbHNlOwogCkBAIC04MzMsMjkgKzgzNywz MCBAQCBSZWFkQnVmZmVyX2NvbW1vbihTTWdyUmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0 ZW5jZSwgRm9ya051bWJlciBmb3JrTnVtLAogCiAJaXNFeHRlbmQgPSAoYmxvY2tOdW0gPT0gUF9O RVcpOwogCi0JVFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfUkVBRF9TVEFSVChmb3JrTnVtLCBibG9j a051bSwKLQkJCQkJCQkJCSAgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCi0J CQkJCQkJCQkgICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCi0JCQkJCQkJCQkg ICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLAotCQkJCQkJCQkJICAgc21n ci0+c21ncl9ybG9jYXRvci5iYWNrZW5kLAorCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVSX1JFQURf U1RBUlQoc21nci0+c21ncl9sb2NhdG9yLmZvcmtudW0sCisJCQkJCQkJCQkgICBibG9ja051bSwK KwkJCQkJCQkJCSAgIHNtZ3ItPnNtZ3JfbG9jYXRvci5sb2NhdG9yLnNwY09pZCwKKwkJCQkJCQkJ CSAgIHNtZ3ItPnNtZ3JfbG9jYXRvci5sb2NhdG9yLmRiT2lkLAorCQkJCQkJCQkJICAgc21nci0+ c21ncl9sb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLAorCQkJCQkJCQkJICAgc21nci0+c21ncl9s b2NhdG9yLmJhY2tlbmQsCiAJCQkJCQkJCQkgICBpc0V4dGVuZCk7CiAKIAkvKiBTdWJzdGl0dXRl IHByb3BlciBibG9jayBudW1iZXIgaWYgY2FsbGVyIGFza2VkIGZvciBQX05FVyAqLwogCWlmIChp c0V4dGVuZCkKIAl7Ci0JCWJsb2NrTnVtID0gc21ncm5ibG9ja3Moc21nciwgZm9ya051bSk7CisJ CWJsb2NrTnVtID0gc21ncm5ibG9ja3Moc2ZpbGUpOwogCQkvKiBGYWlsIGlmIHJlbGF0aW9uIGlz IGFscmVhZHkgYXQgbWF4aW11bSBwb3NzaWJsZSBsZW5ndGggKi8KIAkJaWYgKGJsb2NrTnVtID09 IFBfTkVXKQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9HUkFN X0xJTUlUX0VYQ0VFREVEKSwKIAkJCQkJIGVycm1zZygiY2Fubm90IGV4dGVuZCByZWxhdGlvbiAl cyBiZXlvbmQgJXUgYmxvY2tzIiwKLQkJCQkJCQlyZWxwYXRoKHNtZ3ItPnNtZ3JfcmxvY2F0b3Is IGZvcmtOdW0pLAorCQkJCQkJCXNtZ3JmaWxlcGF0aChzZmlsZS0+c21ncl9sb2NhdG9yKSwKIAkJ CQkJCQlQX05FVykpKTsKIAl9CiAKIAlpZiAoaXNMb2NhbEJ1ZikKIAl7Ci0JCWJ1ZkhkciA9IExv Y2FsQnVmZmVyQWxsb2Moc21nciwgZm9ya051bSwgYmxvY2tOdW0sICZmb3VuZCk7CisJCWJ1Zkhk ciA9IExvY2FsQnVmZmVyQWxsb2Moc2ZpbGUsIGJsb2NrTnVtLCAmZm91bmQpOwogCQlpZiAoZm91 bmQpCiAJCQlwZ0J1ZmZlclVzYWdlLmxvY2FsX2Jsa3NfaGl0Kys7CiAJCWVsc2UgaWYgKGlzRXh0 ZW5kKQpAQCAtODcwLDcgKzg3NSw3IEBAIFJlYWRCdWZmZXJfY29tbW9uKFNNZ3JSZWxhdGlvbiBz bWdyLCBjaGFyIHJlbHBlcnNpc3RlbmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAJCSAqIGxvb2t1 cCB0aGUgYnVmZmVyLiAgSU9fSU5fUFJPR1JFU1MgaXMgc2V0IGlmIHRoZSByZXF1ZXN0ZWQgYmxv Y2sgaXMKIAkJICogbm90IGN1cnJlbnRseSBpbiBtZW1vcnkuCiAJCSAqLwotCQlidWZIZHIgPSBC dWZmZXJBbGxvYyhzbWdyLCByZWxwZXJzaXN0ZW5jZSwgZm9ya051bSwgYmxvY2tOdW0sCisJCWJ1 ZkhkciA9IEJ1ZmZlckFsbG9jKHNmaWxlLCByZWxwZXJzaXN0ZW5jZSwgYmxvY2tOdW0sCiAJCQkJ CQkJIHN0cmF0ZWd5LCAmZm91bmQpOwogCQlpZiAoZm91bmQpCiAJCQlwZ0J1ZmZlclVzYWdlLnNo YXJlZF9ibGtzX2hpdCsrOwpAQCAtODk1LDExICs5MDAsMTIgQEAgUmVhZEJ1ZmZlcl9jb21tb24o U01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgcmVscGVyc2lzdGVuY2UsIEZvcmtOdW1iZXIgZm9ya051 bSwKIAkJCWlmIChWYWN1dW1Db3N0QWN0aXZlKQogCQkJCVZhY3V1bUNvc3RCYWxhbmNlICs9IFZh Y3V1bUNvc3RQYWdlSGl0OwogCi0JCQlUUkFDRV9QT1NUR1JFU1FMX0JVRkZFUl9SRUFEX0RPTkUo Zm9ya051bSwgYmxvY2tOdW0sCi0JCQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5sb2Nh dG9yLnNwY09pZCwKLQkJCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJP aWQsCi0JCQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwK LQkJCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmJhY2tlbmQsCisJCQlUUkFDRV9QT1NU R1JFU1FMX0JVRkZFUl9SRUFEX0RPTkUoc2ZpbGUtPnNtZ3JfZm9ya251bSwKKwkJCQkJCQkJCQkJ ICBibG9ja051bSwKKwkJCQkJCQkJCQkJICBzZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNw Y09pZCwKKwkJCQkJCQkJCQkJICBzZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAor CQkJCQkJCQkJCQkgIHNmaWxlLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLAorCQkJ CQkJCQkJCQkgIHNmaWxlLT5zbWdyX3Jsb2NhdG9yLmJhY2tlbmQsCiAJCQkJCQkJCQkJCSAgaXNF eHRlbmQsCiAJCQkJCQkJCQkJCSAgZm91bmQpOwogCkBAIC05MzYsNyArOTQyLDcgQEAgUmVhZEJ1 ZmZlcl9jb21tb24oU01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgcmVscGVyc2lzdGVuY2UsIEZvcmtO dW1iZXIgZm9ya051bSwKIAkJaWYgKCFQYWdlSXNOZXcoKFBhZ2UpIGJ1ZkJsb2NrKSkKIAkJCWVy ZXBvcnQoRVJST1IsCiAJCQkJCShlcnJtc2coInVuZXhwZWN0ZWQgZGF0YSBiZXlvbmQgRU9GIGlu IGJsb2NrICV1IG9mIHJlbGF0aW9uICVzIiwKLQkJCQkJCQlibG9ja051bSwgcmVscGF0aChzbWdy LT5zbWdyX3Jsb2NhdG9yLCBmb3JrTnVtKSksCisJCQkJCQkJYmxvY2tOdW0sIHNtZ3JmaWxlcGF0 aChzZmlsZS0+c21ncl9sb2NhdG9yKSksCiAJCQkJCSBlcnJoaW50KCJUaGlzIGhhcyBiZWVuIHNl ZW4gdG8gb2NjdXIgd2l0aCBidWdneSBrZXJuZWxzOyBjb25zaWRlciB1cGRhdGluZyB5b3VyIHN5 c3RlbS4iKSkpOwogCiAJCS8qCkBAIC05OTMsNyArOTk5LDcgQEAgUmVhZEJ1ZmZlcl9jb21tb24o U01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgcmVscGVyc2lzdGVuY2UsIEZvcmtOdW1iZXIgZm9ya051 bSwKIAkJLyogbmV3IGJ1ZmZlcnMgYXJlIHplcm8tZmlsbGVkICovCiAJCU1lbVNldCgoY2hhciAq KSBidWZCbG9jaywgMCwgQkxDS1NaKTsKIAkJLyogZG9uJ3Qgc2V0IGNoZWNrc3VtIGZvciBhbGwt emVybyBwYWdlICovCi0JCXNtZ3JleHRlbmQoc21nciwgZm9ya051bSwgYmxvY2tOdW0sIChjaGFy ICopIGJ1ZkJsb2NrLCBmYWxzZSk7CisJCXNtZ3JleHRlbmQoc2ZpbGUsIGJsb2NrTnVtLCAoY2hh ciAqKSBidWZCbG9jaywgZmFsc2UpOwogCiAJCS8qCiAJCSAqIE5COiB3ZSdyZSAqbm90KiBkb2lu ZyBhIFNjaGVkdWxlQnVmZmVyVGFnRm9yV3JpdGViYWNrIGhlcmU7CkBAIC0xMDE4LDcgKzEwMjQs NyBAQCBSZWFkQnVmZmVyX2NvbW1vbihTTWdyUmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0 ZW5jZSwgRm9ya051bWJlciBmb3JrTnVtLAogCQkJaWYgKHRyYWNrX2lvX3RpbWluZykKIAkJCQlJ TlNUUl9USU1FX1NFVF9DVVJSRU5UKGlvX3N0YXJ0KTsKIAotCQkJc21ncnJlYWQoc21nciwgZm9y a051bSwgYmxvY2tOdW0sIChjaGFyICopIGJ1ZkJsb2NrKTsKKwkJCXNtZ3JyZWFkKHNmaWxlLCBi bG9ja051bSwgKGNoYXIgKikgYnVmQmxvY2spOwogCiAJCQlpZiAodHJhY2tfaW9fdGltaW5nKQog CQkJewpAQCAtMTAyOSw4ICsxMDM1LDggQEAgUmVhZEJ1ZmZlcl9jb21tb24oU01nclJlbGF0aW9u IHNtZ3IsIGNoYXIgcmVscGVyc2lzdGVuY2UsIEZvcmtOdW1iZXIgZm9ya051bSwKIAkJCX0KIAog CQkJLyogY2hlY2sgZm9yIGdhcmJhZ2UgZGF0YSAqLwotCQkJaWYgKCFQYWdlSXNWZXJpZmllZEV4 dGVuZGVkKChQYWdlKSBidWZCbG9jaywgYmxvY2tOdW0sCi0JCQkJCQkJCQkJUElWX0xPR19XQVJO SU5HIHwgUElWX1JFUE9SVF9TVEFUKSkKKwkJCWlmICgoIShtb2RlID09IFJCTV9UUklNKSkgJiYg KCFQYWdlSXNWZXJpZmllZEV4dGVuZGVkKChQYWdlKSBidWZCbG9jaywgYmxvY2tOdW0sCisJCQkJ CQkJCQkJUElWX0xPR19XQVJOSU5HIHwgUElWX1JFUE9SVF9TVEFUKSkpCiAJCQl7CiAJCQkJaWYg KG1vZGUgPT0gUkJNX1pFUk9fT05fRVJST1IgfHwgemVyb19kYW1hZ2VkX3BhZ2VzKQogCQkJCXsK QEAgLTEwMzgsNyArMTA0NCw3IEBAIFJlYWRCdWZmZXJfY29tbW9uKFNNZ3JSZWxhdGlvbiBzbWdy LCBjaGFyIHJlbHBlcnNpc3RlbmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAJCQkJCQkJKGVycmNv ZGUoRVJSQ09ERV9EQVRBX0NPUlJVUFRFRCksCiAJCQkJCQkJIGVycm1zZygiaW52YWxpZCBwYWdl IGluIGJsb2NrICV1IG9mIHJlbGF0aW9uICVzOyB6ZXJvaW5nIG91dCBwYWdlIiwKIAkJCQkJCQkJ CWJsb2NrTnVtLAotCQkJCQkJCQkJcmVscGF0aChzbWdyLT5zbWdyX3Jsb2NhdG9yLCBmb3JrTnVt KSkpKTsKKwkJCQkJCQkJCXNtZ3JmaWxlcGF0aChzZmlsZS0+c21ncl9sb2NhdG9yKSkpKTsKIAkJ CQkJTWVtU2V0KChjaGFyICopIGJ1ZkJsb2NrLCAwLCBCTENLU1opOwogCQkJCX0KIAkJCQllbHNl CkBAIC0xMDQ2LDcgKzEwNTIsNyBAQCBSZWFkQnVmZmVyX2NvbW1vbihTTWdyUmVsYXRpb24gc21n ciwgY2hhciByZWxwZXJzaXN0ZW5jZSwgRm9ya051bWJlciBmb3JrTnVtLAogCQkJCQkJCShlcnJj b2RlKEVSUkNPREVfREFUQV9DT1JSVVBURUQpLAogCQkJCQkJCSBlcnJtc2coImludmFsaWQgcGFn ZSBpbiBibG9jayAldSBvZiByZWxhdGlvbiAlcyIsCiAJCQkJCQkJCQlibG9ja051bSwKLQkJCQkJ CQkJCXJlbHBhdGgoc21nci0+c21ncl9ybG9jYXRvciwgZm9ya051bSkpKSk7CisJCQkJCQkJCQlz bWdyZmlsZXBhdGgoc2ZpbGUtPnNtZ3JfbG9jYXRvcikpKSk7CiAJCQl9CiAJCX0KIAl9CkBAIC0x MDg1LDExICsxMDkxLDEyIEBAIFJlYWRCdWZmZXJfY29tbW9uKFNNZ3JSZWxhdGlvbiBzbWdyLCBj aGFyIHJlbHBlcnNpc3RlbmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAJaWYgKFZhY3V1bUNvc3RB Y3RpdmUpCiAJCVZhY3V1bUNvc3RCYWxhbmNlICs9IFZhY3V1bUNvc3RQYWdlTWlzczsKIAotCVRS QUNFX1BPU1RHUkVTUUxfQlVGRkVSX1JFQURfRE9ORShmb3JrTnVtLCBibG9ja051bSwKLQkJCQkJ CQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKLQkJCQkJCQkJCSAgc21n ci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAotCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Js b2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLAotCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9y LmJhY2tlbmQsCisJVFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfUkVBRF9ET05FKHNmaWxlLT5zbWdy X2xvY2F0b3IuZm9ya251bSwKKwkJCQkJCQkJCSAgYmxvY2tOdW0sCisJCQkJCQkJCQkgIHNmaWxl LT5zbWdyX2xvY2F0b3IubG9jYXRvci5zcGNPaWQsCisJCQkJCQkJCQkgIHNmaWxlLT5zbWdyX2xv Y2F0b3IubG9jYXRvci5kYk9pZCwKKwkJCQkJCQkJCSAgc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2Nh dG9yLnJlbE51bWJlciwKKwkJCQkJCQkJCSAgc2ZpbGUtPnNtZ3JfbG9jYXRvci5iYWNrZW5kLAog CQkJCQkJCQkJICBpc0V4dGVuZCwKIAkJCQkJCQkJCSAgZm91bmQpOwogCkBAIC0xMTE2LDcgKzEx MjMsNyBAQCBSZWFkQnVmZmVyX2NvbW1vbihTTWdyUmVsYXRpb24gc21nciwgY2hhciByZWxwZXJz aXN0ZW5jZSwgRm9ya051bWJlciBmb3JrTnVtLAogICogTm8gbG9ja3MgYXJlIGhlbGQgZWl0aGVy IGF0IGVudHJ5IG9yIGV4aXQuCiAgKi8KIHN0YXRpYyBCdWZmZXJEZXNjICoKLUJ1ZmZlckFsbG9j KFNNZ3JSZWxhdGlvbiBzbWdyLCBjaGFyIHJlbHBlcnNpc3RlbmNlLCBGb3JrTnVtYmVyIGZvcmtO dW0sCitCdWZmZXJBbGxvYyhTTWdyRmlsZUhhbmRsZSBzZmlsZSwgY2hhciByZWxwZXJzaXN0ZW5j ZSwKIAkJCUJsb2NrTnVtYmVyIGJsb2NrTnVtLAogCQkJQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3Ry YXRlZ3ksCiAJCQlib29sICpmb3VuZFB0cikKQEAgLTExMzQsNyArMTE0MSw3IEBAIEJ1ZmZlckFs bG9jKFNNZ3JSZWxhdGlvbiBzbWdyLCBjaGFyIHJlbHBlcnNpc3RlbmNlLCBGb3JrTnVtYmVyIGZv cmtOdW0sCiAJdWludDMyCQlidWZfc3RhdGU7CiAKIAkvKiBjcmVhdGUgYSB0YWcgc28gd2UgY2Fu IGxvb2t1cCB0aGUgYnVmZmVyICovCi0JSW5pdEJ1ZmZlclRhZygmbmV3VGFnLCAmc21nci0+c21n cl9ybG9jYXRvci5sb2NhdG9yLCBmb3JrTnVtLCBibG9ja051bSk7CisJSW5pdEJ1ZmZlclRhZygm bmV3VGFnLCAmc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2NhdG9yLCBzZmlsZS0+c21ncl9sb2NhdG9y LmZvcmtudW0sIGJsb2NrTnVtKTsKIAogCS8qIGRldGVybWluZSBpdHMgaGFzaCBjb2RlIGFuZCBw YXJ0aXRpb24gbG9jayBJRCAqLwogCW5ld0hhc2ggPSBCdWZUYWJsZUhhc2hDb2RlKCZuZXdUYWcp OwpAQCAtMTI2NCwxMCArMTI3MSwxMSBAQCBCdWZmZXJBbGxvYyhTTWdyUmVsYXRpb24gc21nciwg Y2hhciByZWxwZXJzaXN0ZW5jZSwgRm9ya051bWJlciBmb3JrTnVtLAogCQkJCX0KIAogCQkJCS8q IE9LLCBkbyB0aGUgSS9PICovCi0JCQkJVFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfV1JJVEVfRElS VFlfU1RBUlQoZm9ya051bSwgYmxvY2tOdW0sCi0JCQkJCQkJCQkJCQkJCSAgc21nci0+c21ncl9y bG9jYXRvci5sb2NhdG9yLnNwY09pZCwKLQkJCQkJCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2Nh dG9yLmxvY2F0b3IuZGJPaWQsCi0JCQkJCQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5s b2NhdG9yLnJlbE51bWJlcik7CisJCQkJVFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfV1JJVEVfRElS VFlfU1RBUlQoc2ZpbGUtPnNtZ3JfbG9jYXRvci5mb3JrbnVtLAorCQkJCQkJCQkJCQkJCQkgIGJs b2NrTnVtLAorCQkJCQkJCQkJCQkJCQkgIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5zcGNP aWQsCisJCQkJCQkJCQkJCQkJCSAgc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2NhdG9yLmRiT2lkLAor CQkJCQkJCQkJCQkJCQkgIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIpOwog CiAJCQkJRmx1c2hCdWZmZXIoYnVmLCBOVUxMKTsKIAkJCQlMV0xvY2tSZWxlYXNlKEJ1ZmZlckRl c2NyaXB0b3JHZXRDb250ZW50TG9jayhidWYpKTsKQEAgLTEyNzUsMTAgKzEyODMsMTEgQEAgQnVm ZmVyQWxsb2MoU01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgcmVscGVyc2lzdGVuY2UsIEZvcmtOdW1i ZXIgZm9ya051bSwKIAkJCQlTY2hlZHVsZUJ1ZmZlclRhZ0ZvcldyaXRlYmFjaygmQmFja2VuZFdy aXRlYmFja0NvbnRleHQsCiAJCQkJCQkJCQkJCSAgJmJ1Zi0+dGFnKTsKIAotCQkJCVRSQUNFX1BP U1RHUkVTUUxfQlVGRkVSX1dSSVRFX0RJUlRZX0RPTkUoZm9ya051bSwgYmxvY2tOdW0sCi0JCQkJ CQkJCQkJCQkJCSBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAotCQkJCQkJCQkJ CQkJCQkgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAotCQkJCQkJCQkJCQkJCQkg c21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlcik7CisJCQkJVFJBQ0VfUE9TVEdS RVNRTF9CVUZGRVJfV1JJVEVfRElSVFlfRE9ORShzZmlsZS0+c21ncl9sb2NhdG9yLmZvcmtudW0s CisJCQkJCQkJCQkJCQkJCSBibG9ja051bSwKKwkJCQkJCQkJCQkJCQkJIHNmaWxlLT5zbWdyX2xv Y2F0b3IubG9jYXRvci5zcGNPaWQsCisJCQkJCQkJCQkJCQkJCSBzZmlsZS0+c21ncl9sb2NhdG9y LmxvY2F0b3IuZGJPaWQsCisJCQkJCQkJCQkJCQkJCSBzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0 b3IucmVsTnVtYmVyKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTE0MzQsNyArMTQ0Myw3IEBA IEJ1ZmZlckFsbG9jKFNNZ3JSZWxhdGlvbiBzbWdyLCBjaGFyIHJlbHBlcnNpc3RlbmNlLCBGb3Jr TnVtYmVyIGZvcmtOdW0sCiAJYnVmX3N0YXRlICY9IH4oQk1fVkFMSUQgfCBCTV9ESVJUWSB8IEJN X0pVU1RfRElSVElFRCB8CiAJCQkJICAgQk1fQ0hFQ0tQT0lOVF9ORUVERUQgfCBCTV9JT19FUlJP UiB8IEJNX1BFUk1BTkVOVCB8CiAJCQkJICAgQlVGX1VTQUdFQ09VTlRfTUFTSyk7Ci0JaWYgKHJl bHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1BFUk1BTkVOVCB8fCBmb3JrTnVtID09IElO SVRfRk9SS05VTSkKKwlpZiAocmVscGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfUEVSTUFO RU5UIHx8IHNmaWxlLT5zbWdyX2xvY2F0b3IuZm9ya251bSA9PSBJTklUX0ZPUktOVU0pCiAJCWJ1 Zl9zdGF0ZSB8PSBCTV9UQUdfVkFMSUQgfCBCTV9QRVJNQU5FTlQgfCBCVUZfVVNBR0VDT1VOVF9P TkU7CiAJZWxzZQogCQlidWZfc3RhdGUgfD0gQk1fVEFHX1ZBTElEIHwgQlVGX1VTQUdFQ09VTlRf T05FOwpAQCAtMTY0Nyw3ICsxNjU2LDcgQEAgUmVsZWFzZUFuZFJlYWRCdWZmZXIoQnVmZmVyIGJ1 ZmZlciwKIAkJCQkJIFJlbGF0aW9uIHJlbGF0aW9uLAogCQkJCQkgQmxvY2tOdW1iZXIgYmxvY2tO dW0pCiB7Ci0JRm9ya051bWJlcglmb3JrTnVtID0gTUFJTl9GT1JLTlVNOworCUZvcmtOdW1iZXIJ Zm9ya251bSA9IE1BSU5fRk9SS05VTTsKIAlCdWZmZXJEZXNjICpidWZIZHI7CiAKIAlpZiAoQnVm ZmVySXNWYWxpZChidWZmZXIpKQpAQCAtMTY1OCw3ICsxNjY3LDcgQEAgUmVsZWFzZUFuZFJlYWRC dWZmZXIoQnVmZmVyIGJ1ZmZlciwKIAkJCWJ1ZkhkciA9IEdldExvY2FsQnVmZmVyRGVzY3JpcHRv cigtYnVmZmVyIC0gMSk7CiAJCQlpZiAoYnVmSGRyLT50YWcuYmxvY2tOdW0gPT0gYmxvY2tOdW0g JiYKIAkJCQlCdWZUYWdNYXRjaGVzUmVsRmlsZUxvY2F0b3IoJmJ1Zkhkci0+dGFnLCAmcmVsYXRp b24tPnJkX2xvY2F0b3IpICYmCi0JCQkJQnVmVGFnR2V0Rm9ya051bSgmYnVmSGRyLT50YWcpID09 IGZvcmtOdW0pCisJCQkJQnVmVGFnR2V0Rm9ya051bSgmYnVmSGRyLT50YWcpID09IGZvcmtudW0p CiAJCQkJcmV0dXJuIGJ1ZmZlcjsKIAkJCVJlc291cmNlT3duZXJGb3JnZXRCdWZmZXIoQ3VycmVu dFJlc291cmNlT3duZXIsIGJ1ZmZlcik7CiAJCQlMb2NhbFJlZkNvdW50Wy1idWZmZXIgLSAxXS0t OwpAQCAtMTY2OSw3ICsxNjc4LDcgQEAgUmVsZWFzZUFuZFJlYWRCdWZmZXIoQnVmZmVyIGJ1ZmZl ciwKIAkJCS8qIHdlIGhhdmUgcGluLCBzbyBpdCdzIG9rIHRvIGV4YW1pbmUgdGFnIHdpdGhvdXQg c3BpbmxvY2sgKi8KIAkJCWlmIChidWZIZHItPnRhZy5ibG9ja051bSA9PSBibG9ja051bSAmJgog CQkJCUJ1ZlRhZ01hdGNoZXNSZWxGaWxlTG9jYXRvcigmYnVmSGRyLT50YWcsICZyZWxhdGlvbi0+ cmRfbG9jYXRvcikgJiYKLQkJCQlCdWZUYWdHZXRGb3JrTnVtKCZidWZIZHItPnRhZykgPT0gZm9y a051bSkKKwkJCQlCdWZUYWdHZXRGb3JrTnVtKCZidWZIZHItPnRhZykgPT0gZm9ya251bSkKIAkJ CQlyZXR1cm4gYnVmZmVyOwogCQkJVW5waW5CdWZmZXIoYnVmSGRyKTsKIAkJfQpAQCAtMjgyMCw3 ICsyODI5LDcgQEAgQnVmZmVyR2V0VGFnKEJ1ZmZlciBidWZmZXIsIFJlbEZpbGVMb2NhdG9yICpy bG9jYXRvciwgRm9ya051bWJlciAqZm9ya251bSwKICAqIGFzIHRoZSBzZWNvbmQgcGFyYW1ldGVy LiAgSWYgbm90LCBwYXNzIE5VTEwuCiAgKi8KIHN0YXRpYyB2b2lkCi1GbHVzaEJ1ZmZlcihCdWZm ZXJEZXNjICpidWYsIFNNZ3JSZWxhdGlvbiByZWxuKQorRmx1c2hCdWZmZXIoQnVmZmVyRGVzYyAq YnVmLCBTTWdyRmlsZUhhbmRsZSBzZmlsZSkKIHsKIAlYTG9nUmVjUHRyCXJlY3B0cjsKIAlFcnJv ckNvbnRleHRDYWxsYmFjayBlcnJjYWxsYmFjazsKQEAgLTI4NDUsMTQgKzI4NTQsMTQgQEAgRmx1 c2hCdWZmZXIoQnVmZmVyRGVzYyAqYnVmLCBTTWdyUmVsYXRpb24gcmVsbikKIAllcnJvcl9jb250 ZXh0X3N0YWNrID0gJmVycmNhbGxiYWNrOwogCiAJLyogRmluZCBzbWdyIHJlbGF0aW9uIGZvciBi dWZmZXIgKi8KLQlpZiAocmVsbiA9PSBOVUxMKQotCQlyZWxuID0gc21ncm9wZW4oQnVmVGFnR2V0 UmVsRmlsZUxvY2F0b3IoJmJ1Zi0+dGFnKSwgSW52YWxpZEJhY2tlbmRJZCk7CisJaWYgKHNmaWxl ID09IE5VTEwpCisJCXNmaWxlID0gc21ncm9wZW4oQnVmVGFnR2V0UmVsRmlsZUxvY2F0b3IoJmJ1 Zi0+dGFnKSwgSW52YWxpZEJhY2tlbmRJZCwgQnVmVGFnR2V0Rm9ya051bSgmYnVmLT50YWcpKTsK IAotCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVSX0ZMVVNIX1NUQVJUKEJ1ZlRhZ0dldEZvcmtOdW0o JmJ1Zi0+dGFnKSwKKwlUUkFDRV9QT1NUR1JFU1FMX0JVRkZFUl9GTFVTSF9TVEFSVChzZmlsZS0+ c21ncl9sb2NhdG9yLmZvcmtudW0sCiAJCQkJCQkJCQkJYnVmLT50YWcuYmxvY2tOdW0sCi0JCQkJ CQkJCQkJcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKLQkJCQkJCQkJCQlyZWxu LT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCi0JCQkJCQkJCQkJcmVsbi0+c21ncl9ybG9j YXRvci5sb2NhdG9yLnJlbE51bWJlcik7CisJCQkJCQkJCQkJc2ZpbGUtPnNtZ3JfbG9jYXRvci5s b2NhdG9yLnNwY09pZCwKKwkJCQkJCQkJCQlzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IuZGJP aWQsCisJCQkJCQkJCQkJc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2NhdG9yLnJlbE51bWJlcik7CiAK IAlidWZfc3RhdGUgPSBMb2NrQnVmSGRyKGJ1Zik7CiAKQEAgLTI5MDYsOCArMjkxNSw3IEBAIEZs dXNoQnVmZmVyKEJ1ZmZlckRlc2MgKmJ1ZiwgU01nclJlbGF0aW9uIHJlbG4pCiAJLyoKIAkgKiBi dWZUb1dyaXRlIGlzIGVpdGhlciB0aGUgc2hhcmVkIGJ1ZmZlciBvciBhIGNvcHksIGFzIGFwcHJv cHJpYXRlLgogCSAqLwotCXNtZ3J3cml0ZShyZWxuLAotCQkJICBCdWZUYWdHZXRGb3JrTnVtKCZi dWYtPnRhZyksCisJc21ncndyaXRlKHNmaWxlLAogCQkJICBidWYtPnRhZy5ibG9ja051bSwKIAkJ CSAgYnVmVG9Xcml0ZSwKIAkJCSAgZmFsc2UpOwpAQCAtMjkyOCwxMSArMjkzNiwxMSBAQCBGbHVz aEJ1ZmZlcihCdWZmZXJEZXNjICpidWYsIFNNZ3JSZWxhdGlvbiByZWxuKQogCSAqLwogCVRlcm1p bmF0ZUJ1ZmZlcklPKGJ1ZiwgdHJ1ZSwgMCk7CiAKLQlUUkFDRV9QT1NUR1JFU1FMX0JVRkZFUl9G TFVTSF9ET05FKEJ1ZlRhZ0dldEZvcmtOdW0oJmJ1Zi0+dGFnKSwKKwlUUkFDRV9QT1NUR1JFU1FM X0JVRkZFUl9GTFVTSF9ET05FKHNmaWxlLT5zbWdyX2xvY2F0b3IuZm9ya251bSwKIAkJCQkJCQkJ CSAgIGJ1Zi0+dGFnLmJsb2NrTnVtLAotCQkJCQkJCQkJICAgcmVsbi0+c21ncl9ybG9jYXRvci5s b2NhdG9yLnNwY09pZCwKLQkJCQkJCQkJCSAgIHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5k Yk9pZCwKLQkJCQkJCQkJCSAgIHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIp OworCQkJCQkJCQkJICAgc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2NhdG9yLnNwY09pZCwKKwkJCQkJ CQkJCSAgIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5kYk9pZCwKKwkJCQkJCQkJCSAgIHNm aWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIpOwogCiAJLyogUG9wIHRoZSBlcnJv ciBjb250ZXh0IHN0YWNrICovCiAJZXJyb3JfY29udGV4dF9zdGFjayA9IGVycmNhbGxiYWNrLnBy ZXZpb3VzOwpAQCAtMjk0Nyw3ICsyOTU1LDcgQEAgRmx1c2hCdWZmZXIoQnVmZmVyRGVzYyAqYnVm LCBTTWdyUmVsYXRpb24gcmVsbikKICAqIGl0IG1pZ2h0IG5vdCBiZS4KICAqLwogQmxvY2tOdW1i ZXIKLVJlbGF0aW9uR2V0TnVtYmVyT2ZCbG9ja3NJbkZvcmsoUmVsYXRpb24gcmVsYXRpb24sIEZv cmtOdW1iZXIgZm9ya051bSkKK1JlbGF0aW9uR2V0TnVtYmVyT2ZCbG9ja3NJbkZvcmsoUmVsYXRp b24gcmVsYXRpb24sIEZvcmtOdW1iZXIgZm9ya251bSkKIHsKIAlpZiAoUkVMS0lORF9IQVNfVEFC TEVfQU0ocmVsYXRpb24tPnJkX3JlbC0+cmVsa2luZCkpCiAJewpAQCAtMjk1OSwxMyArMjk2Nywx MyBAQCBSZWxhdGlvbkdldE51bWJlck9mQmxvY2tzSW5Gb3JrKFJlbGF0aW9uIHJlbGF0aW9uLCBG b3JrTnVtYmVyIGZvcmtOdW0pCiAJCSAqLwogCQl1aW50NjQJCXN6Ynl0ZXM7CiAKLQkJc3pieXRl cyA9IHRhYmxlX3JlbGF0aW9uX3NpemUocmVsYXRpb24sIGZvcmtOdW0pOworCQlzemJ5dGVzID0g dGFibGVfcmVsYXRpb25fc2l6ZShyZWxhdGlvbiwgZm9ya251bSk7CiAKIAkJcmV0dXJuIChzemJ5 dGVzICsgKEJMQ0tTWiAtIDEpKSAvIEJMQ0tTWjsKIAl9CiAJZWxzZSBpZiAoUkVMS0lORF9IQVNf U1RPUkFHRShyZWxhdGlvbi0+cmRfcmVsLT5yZWxraW5kKSkKIAl7Ci0JCXJldHVybiBzbWdybmJs b2NrcyhSZWxhdGlvbkdldFNtZ3IocmVsYXRpb24pLCBmb3JrTnVtKTsKKwkJcmV0dXJuIHNtZ3Ju YmxvY2tzKFJlbGF0aW9uR2V0U21ncihyZWxhdGlvbiwgZm9ya251bSkpOwogCX0KIAllbHNlCiAJ CUFzc2VydChmYWxzZSk7CkBAIC0zMDI4LDYgKzMwMzYsNyBAQCBCdWZmZXJHZXRMU05BdG9taWMo QnVmZmVyIGJ1ZmZlcikKIAogCWJ1Zl9zdGF0ZSA9IExvY2tCdWZIZHIoYnVmSGRyKTsKIAlsc24g PSBQYWdlR2V0TFNOKHBhZ2UpOworCQogCVVubG9ja0J1ZkhkcihidWZIZHIsIGJ1Zl9zdGF0ZSk7 CiAKIAlyZXR1cm4gbHNuOwpAQCAtMzA1NSwyNiArMzA2NCwyMCBAQCBCdWZmZXJHZXRMU05BdG9t aWMoQnVmZmVyIGJ1ZmZlcikKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIHZvaWQKLURyb3BSZWxhdGlv bkJ1ZmZlcnMoU01nclJlbGF0aW9uIHNtZ3JfcmVsbiwgRm9ya051bWJlciAqZm9ya051bSwKK0Ry b3BSZWxhdGlvbkJ1ZmZlcnMoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEJhY2tlbmRJZCBiYWNr ZW5kLCBGb3JrTnVtYmVyICpmb3JrbnVtLAogCQkJCQlpbnQgbmZvcmtzLCBCbG9ja051bWJlciAq Zmlyc3REZWxCbG9jaykKIHsKIAlpbnQJCQlpOwogCWludAkJCWo7Ci0JUmVsRmlsZUxvY2F0b3JC YWNrZW5kIHJsb2NhdG9yOwogCUJsb2NrTnVtYmVyIG5Gb3JrQmxvY2tbTUFYX0ZPUktOVU1dOwog CXVpbnQ2NAkJbkJsb2Nrc1RvSW52YWxpZGF0ZSA9IDA7CiAKLQlybG9jYXRvciA9IHNtZ3JfcmVs bi0+c21ncl9ybG9jYXRvcjsKLQogCS8qIElmIGl0J3MgYSBsb2NhbCByZWxhdGlvbiwgaXQncyBs b2NhbGJ1Zi5jJ3MgcHJvYmxlbS4gKi8KLQlpZiAoUmVsRmlsZUxvY2F0b3JCYWNrZW5kSXNUZW1w KHJsb2NhdG9yKSkKKwlpZiAoYmFja2VuZCA9PSBNeUJhY2tlbmRJZCkKIAl7Ci0JCWlmIChybG9j YXRvci5iYWNrZW5kID09IE15QmFja2VuZElkKQotCQl7Ci0JCQlmb3IgKGogPSAwOyBqIDwgbmZv cmtzOyBqKyspCi0JCQkJRHJvcFJlbGF0aW9uTG9jYWxCdWZmZXJzKHJsb2NhdG9yLmxvY2F0b3Is IGZvcmtOdW1bal0sCi0JCQkJCQkJCQkJIGZpcnN0RGVsQmxvY2tbal0pOwotCQl9CisJCWZvciAo aiA9IDA7IGogPCBuZm9ya3M7IGorKykKKwkJCURyb3BSZWxhdGlvbkxvY2FsQnVmZmVycyhybG9j YXRvciwgZm9ya251bVtqXSwKKwkJCQkJCQkJCSBmaXJzdERlbEJsb2NrW2pdKTsKIAkJcmV0dXJu OwogCX0KIApAQCAtMzEwMyw3ICszMTA2LDEwIEBAIERyb3BSZWxhdGlvbkJ1ZmZlcnMoU01nclJl bGF0aW9uIHNtZ3JfcmVsbiwgRm9ya051bWJlciAqZm9ya051bSwKIAlmb3IgKGkgPSAwOyBpIDwg bmZvcmtzOyBpKyspCiAJewogCQkvKiBHZXQgdGhlIG51bWJlciBvZiBibG9ja3MgZm9yIGEgcmVs YXRpb24ncyBmb3JrICovCi0JCW5Gb3JrQmxvY2tbaV0gPSBzbWdybmJsb2Nrc19jYWNoZWQoc21n cl9yZWxuLCBmb3JrTnVtW2ldKTsKKwkJU01nckZpbGVIYW5kbGUgc2ZpbGU7CisKKwkJc2ZpbGUg PSBzbWdyb3BlbihybG9jYXRvciwgYmFja2VuZCwgZm9ya251bVtpXSk7CisJCW5Gb3JrQmxvY2tb aV0gPSBzbWdybmJsb2Nrc19jYWNoZWQoc2ZpbGUpOwogCiAJCWlmIChuRm9ya0Jsb2NrW2ldID09 IEludmFsaWRCbG9ja051bWJlcikKIAkJewpAQCAtMzEyMyw3ICszMTI5LDcgQEAgRHJvcFJlbGF0 aW9uQnVmZmVycyhTTWdyUmVsYXRpb24gc21ncl9yZWxuLCBGb3JrTnVtYmVyICpmb3JrTnVtLAog CQluQmxvY2tzVG9JbnZhbGlkYXRlIDwgQlVGX0RST1BfRlVMTF9TQ0FOX1RIUkVTSE9MRCkKIAl7 CiAJCWZvciAoaiA9IDA7IGogPCBuZm9ya3M7IGorKykKLQkJCUZpbmRBbmREcm9wUmVsYXRpb25C dWZmZXJzKHJsb2NhdG9yLmxvY2F0b3IsIGZvcmtOdW1bal0sCisJCQlGaW5kQW5kRHJvcFJlbGF0 aW9uQnVmZmVycyhybG9jYXRvciwgZm9ya251bVtqXSwKIAkJCQkJCQkJCSAgIG5Gb3JrQmxvY2tb al0sIGZpcnN0RGVsQmxvY2tbal0pOwogCQlyZXR1cm47CiAJfQpAQCAtMzE0NiwxOCArMzE1Miwx OCBAQCBEcm9wUmVsYXRpb25CdWZmZXJzKFNNZ3JSZWxhdGlvbiBzbWdyX3JlbG4sIEZvcmtOdW1i ZXIgKmZvcmtOdW0sCiAJCSAqIGZhbHNlIHBvc2l0aXZlcyBhcmUgc2FmZSBiZWNhdXNlIHdlJ2xs IHJlY2hlY2sgYWZ0ZXIgZ2V0dGluZyB0aGUKIAkJICogYnVmZmVyIGxvY2suCiAJCSAqCi0JCSAq IFdlIGNvdWxkIGNoZWNrIGZvcmtOdW0gYW5kIGJsb2NrTnVtIGFzIHdlbGwgYXMgdGhlIHJsb2Nh dG9yLCBidXQKKwkJICogV2UgY291bGQgY2hlY2sgZm9ya251bSBhbmQgYmxvY2tOdW0gYXMgd2Vs bCBhcyB0aGUgcmxvY2F0b3IsIGJ1dAogCQkgKiB0aGUgaW5jcmVtZW50YWwgd2luIGZyb20gZG9p bmcgc28gc2VlbXMgc21hbGwuCiAJCSAqLwotCQlpZiAoIUJ1ZlRhZ01hdGNoZXNSZWxGaWxlTG9j YXRvcigmYnVmSGRyLT50YWcsICZybG9jYXRvci5sb2NhdG9yKSkKKwkJaWYgKCFCdWZUYWdNYXRj aGVzUmVsRmlsZUxvY2F0b3IoJmJ1Zkhkci0+dGFnLCAmcmxvY2F0b3IpKQogCQkJY29udGludWU7 CiAKIAkJYnVmX3N0YXRlID0gTG9ja0J1ZkhkcihidWZIZHIpOwogCiAJCWZvciAoaiA9IDA7IGog PCBuZm9ya3M7IGorKykKIAkJewotCQkJaWYgKEJ1ZlRhZ01hdGNoZXNSZWxGaWxlTG9jYXRvcigm YnVmSGRyLT50YWcsICZybG9jYXRvci5sb2NhdG9yKSAmJgotCQkJCUJ1ZlRhZ0dldEZvcmtOdW0o JmJ1Zkhkci0+dGFnKSA9PSBmb3JrTnVtW2pdICYmCisJCQlpZiAoQnVmVGFnTWF0Y2hlc1JlbEZp bGVMb2NhdG9yKCZidWZIZHItPnRhZywgJnJsb2NhdG9yKSAmJgorCQkJCUJ1ZlRhZ0dldEZvcmtO dW0oJmJ1Zkhkci0+dGFnKSA9PSBmb3JrbnVtW2pdICYmCiAJCQkJYnVmSGRyLT50YWcuYmxvY2tO dW0gPj0gZmlyc3REZWxCbG9ja1tqXSkKIAkJCXsKIAkJCQlJbnZhbGlkYXRlQnVmZmVyKGJ1Zkhk cik7CS8qIHJlbGVhc2VzIHNwaW5sb2NrICovCkBAIC0zMTc4LDExICszMTg0LDEwIEBAIERyb3BS ZWxhdGlvbkJ1ZmZlcnMoU01nclJlbGF0aW9uIHNtZ3JfcmVsbiwgRm9ya051bWJlciAqZm9ya051 bSwKICAqCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiB2b2lkCi1Ecm9wUmVsYXRpb25zQWxsQnVmZmVycyhT TWdyUmVsYXRpb24gKnNtZ3JfcmVsbiwgaW50IG5sb2NhdG9ycykKK0Ryb3BSZWxhdGlvbnNBbGxC dWZmZXJzKFJlbEZpbGVMb2NhdG9yQmFja2VuZCAqcmxvY2F0b3JzLCBpbnQgbmxvY2F0b3JzKQog ewogCWludAkJCWk7CiAJaW50CQkJbiA9IDA7Ci0JU01nclJlbGF0aW9uICpyZWxzOwogCUJsb2Nr TnVtYmVyICgqYmxvY2spW01BWF9GT1JLTlVNICsgMV07CiAJdWludDY0CQluQmxvY2tzVG9JbnZh bGlkYXRlID0gMDsKIAlSZWxGaWxlTG9jYXRvciAqbG9jYXRvcnM7CkBAIC0zMTkyLDE4ICszMTk3 LDE4IEBAIERyb3BSZWxhdGlvbnNBbGxCdWZmZXJzKFNNZ3JSZWxhdGlvbiAqc21ncl9yZWxuLCBp bnQgbmxvY2F0b3JzKQogCWlmIChubG9jYXRvcnMgPT0gMCkKIAkJcmV0dXJuOwogCi0JcmVscyA9 IHBhbGxvYyhzaXplb2YoU01nclJlbGF0aW9uKSAqIG5sb2NhdG9ycyk7CS8qIG5vbi1sb2NhbCBy ZWxhdGlvbnMgKi8KKwlsb2NhdG9ycyA9IHBhbGxvYyhzaXplb2YoUmVsRmlsZUxvY2F0b3IpICog bmxvY2F0b3JzKTsJLyogbm9uLWxvY2FsIHJlbGF0aW9ucyAqLwogCiAJLyogSWYgaXQncyBhIGxv Y2FsIHJlbGF0aW9uLCBpdCdzIGxvY2FsYnVmLmMncyBwcm9ibGVtLiAqLwogCWZvciAoaSA9IDA7 IGkgPCBubG9jYXRvcnM7IGkrKykKIAl7Ci0JCWlmIChSZWxGaWxlTG9jYXRvckJhY2tlbmRJc1Rl bXAoc21ncl9yZWxuW2ldLT5zbWdyX3Jsb2NhdG9yKSkKKwkJaWYgKHJsb2NhdG9yc1tpXS5iYWNr ZW5kICE9IEludmFsaWRCYWNrZW5kSWQpCiAJCXsKLQkJCWlmIChzbWdyX3JlbG5baV0tPnNtZ3Jf cmxvY2F0b3IuYmFja2VuZCA9PSBNeUJhY2tlbmRJZCkKLQkJCQlEcm9wUmVsYXRpb25BbGxMb2Nh bEJ1ZmZlcnMoc21ncl9yZWxuW2ldLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IpOworCQkJaWYgKHJs b2NhdG9yc1tpXS5iYWNrZW5kID09IE15QmFja2VuZElkKQorCQkJCURyb3BSZWxhdGlvbkFsbExv Y2FsQnVmZmVycyhybG9jYXRvcnNbaV0ubG9jYXRvcik7CiAJCX0KIAkJZWxzZQotCQkJcmVsc1tu KytdID0gc21ncl9yZWxuW2ldOworCQkJbG9jYXRvcnNbbisrXSA9IHJsb2NhdG9yc1tpXS5sb2Nh dG9yOwogCX0KIAogCS8qCkBAIC0zMjEyLDcgKzMyMTcsNyBAQCBEcm9wUmVsYXRpb25zQWxsQnVm ZmVycyhTTWdyUmVsYXRpb24gKnNtZ3JfcmVsbiwgaW50IG5sb2NhdG9ycykKIAkgKi8KIAlpZiAo biA9PSAwKQogCXsKLQkJcGZyZWUocmVscyk7CisJCXBmcmVlKGxvY2F0b3JzKTsKIAkJcmV0dXJu OwogCX0KIApAQCAtMzIzMiwxMiArMzIzNywxMyBAQCBEcm9wUmVsYXRpb25zQWxsQnVmZmVycyhT TWdyUmVsYXRpb24gKnNtZ3JfcmVsbiwgaW50IG5sb2NhdG9ycykKIAkJZm9yIChpbnQgaiA9IDA7 IGogPD0gTUFYX0ZPUktOVU07IGorKykKIAkJewogCQkJLyogR2V0IHRoZSBudW1iZXIgb2YgYmxv Y2tzIGZvciBhIHJlbGF0aW9uJ3MgZm9yay4gKi8KLQkJCWJsb2NrW2ldW2pdID0gc21ncm5ibG9j a3NfY2FjaGVkKHJlbHNbaV0sIGopOworCQkJU01nckZpbGVIYW5kbGUgc2ZpbGUgPSBzbWdyb3Bl bihsb2NhdG9yc1tpXSwgSW52YWxpZEJhY2tlbmRJZCwgaik7CisJCQlibG9ja1tpXVtqXSA9IHNt Z3JuYmxvY2tzX2NhY2hlZChzZmlsZSk7CiAKIAkJCS8qIFdlIG5lZWQgdG8gb25seSBjb25zaWRl ciB0aGUgcmVsYXRpb24gZm9ya3MgdGhhdCBleGlzdHMuICovCiAJCQlpZiAoYmxvY2tbaV1bal0g PT0gSW52YWxpZEJsb2NrTnVtYmVyKQogCQkJewotCQkJCWlmICghc21ncmV4aXN0cyhyZWxzW2ld LCBqKSkKKwkJCQlpZiAoIXNtZ3JleGlzdHMoc2ZpbGUpKQogCQkJCQljb250aW51ZTsKIAkJCQlj YWNoZWQgPSBmYWxzZTsKIAkJCQlicmVhazsKQEAgLTMyNjMsMjAgKzMyNjksMTcgQEAgRHJvcFJl bGF0aW9uc0FsbEJ1ZmZlcnMoU01nclJlbGF0aW9uICpzbWdyX3JlbG4sIGludCBubG9jYXRvcnMp CiAJCQkJCWNvbnRpbnVlOwogCiAJCQkJLyogZHJvcCBhbGwgdGhlIGJ1ZmZlcnMgZm9yIGEgcGFy dGljdWxhciByZWxhdGlvbiBmb3JrICovCi0JCQkJRmluZEFuZERyb3BSZWxhdGlvbkJ1ZmZlcnMo cmVsc1tpXS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLAorCQkJCUZpbmRBbmREcm9wUmVsYXRpb25C dWZmZXJzKGxvY2F0b3JzW2ldLAogCQkJCQkJCQkJCSAgIGosIGJsb2NrW2ldW2pdLCAwKTsKIAkJ CX0KIAkJfQogCiAJCXBmcmVlKGJsb2NrKTsKLQkJcGZyZWUocmVscyk7CisJCXBmcmVlKGxvY2F0 b3JzKTsKIAkJcmV0dXJuOwogCX0KIAogCXBmcmVlKGJsb2NrKTsKLQlsb2NhdG9ycyA9IHBhbGxv YyhzaXplb2YoUmVsRmlsZUxvY2F0b3IpICogbik7CS8qIG5vbi1sb2NhbCByZWxhdGlvbnMgKi8K LQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQotCQlsb2NhdG9yc1tpXSA9IHJlbHNbaV0tPnNtZ3Jf cmxvY2F0b3IubG9jYXRvcjsKIAogCS8qCiAJICogRm9yIGxvdyBudW1iZXIgb2YgcmVsYXRpb25z IHRvIGRyb3AganVzdCB1c2UgYSBzaW1wbGUgd2FsayB0aHJvdWdoLCB0bwpAQCAtMzMzNiw3ICsz MzM5LDYgQEAgRHJvcFJlbGF0aW9uc0FsbEJ1ZmZlcnMoU01nclJlbGF0aW9uICpzbWdyX3JlbG4s IGludCBubG9jYXRvcnMpCiAJfQogCiAJcGZyZWUobG9jYXRvcnMpOwotCXBmcmVlKHJlbHMpOwog fQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTMzNDksNyArMzM1MSw3IEBAIERyb3BSZWxhdGlvbnNB bGxCdWZmZXJzKFNNZ3JSZWxhdGlvbiAqc21ncl9yZWxuLCBpbnQgbmxvY2F0b3JzKQogICogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KICAqLwogc3RhdGljIHZvaWQKLUZpbmRBbmREcm9wUmVsYXRpb25CdWZmZXJzKFJl bEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtOdW0sCitGaW5kQW5kRHJvcFJl bGF0aW9uQnVmZmVycyhSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgRm9ya051bWJlciBmb3JrbnVt LAogCQkJCQkJICAgQmxvY2tOdW1iZXIgbkZvcmtCbG9jaywKIAkJCQkJCSAgIEJsb2NrTnVtYmVy IGZpcnN0RGVsQmxvY2spCiB7CkBAIC0zMzY1LDcgKzMzNjcsNyBAQCBGaW5kQW5kRHJvcFJlbGF0 aW9uQnVmZmVycyhSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgRm9ya051bWJlciBmb3JrTnVtLAog CQl1aW50MzIJCWJ1Zl9zdGF0ZTsKIAogCQkvKiBjcmVhdGUgYSB0YWcgc28gd2UgY2FuIGxvb2t1 cCB0aGUgYnVmZmVyICovCi0JCUluaXRCdWZmZXJUYWcoJmJ1ZlRhZywgJnJsb2NhdG9yLCBmb3Jr TnVtLCBjdXJCbG9jayk7CisJCUluaXRCdWZmZXJUYWcoJmJ1ZlRhZywgJnJsb2NhdG9yLCBmb3Jr bnVtLCBjdXJCbG9jayk7CiAKIAkJLyogZGV0ZXJtaW5lIGl0cyBoYXNoIGNvZGUgYW5kIHBhcnRp dGlvbiBsb2NrIElEICovCiAJCWJ1Zkhhc2ggPSBCdWZUYWJsZUhhc2hDb2RlKCZidWZUYWcpOwpA QCAtMzM5MCw3ICszMzkyLDcgQEAgRmluZEFuZERyb3BSZWxhdGlvbkJ1ZmZlcnMoUmVsRmlsZUxv Y2F0b3IgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya051bSwKIAkJYnVmX3N0YXRlID0gTG9ja0J1 ZkhkcihidWZIZHIpOwogCiAJCWlmIChCdWZUYWdNYXRjaGVzUmVsRmlsZUxvY2F0b3IoJmJ1Zkhk ci0+dGFnLCAmcmxvY2F0b3IpICYmCi0JCQlCdWZUYWdHZXRGb3JrTnVtKCZidWZIZHItPnRhZykg PT0gZm9ya051bSAmJgorCQkJQnVmVGFnR2V0Rm9ya051bSgmYnVmSGRyLT50YWcpID09IGZvcmtu dW0gJiYKIAkJCWJ1Zkhkci0+dGFnLmJsb2NrTnVtID49IGZpcnN0RGVsQmxvY2spCiAJCQlJbnZh bGlkYXRlQnVmZmVyKGJ1Zkhkcik7CS8qIHJlbGVhc2VzIHNwaW5sb2NrICovCiAJCWVsc2UKQEAg LTM1NDUsOCArMzU0Nyw3IEBAIEZsdXNoUmVsYXRpb25CdWZmZXJzKFJlbGF0aW9uIHJlbCkKIAog CQkJCVBhZ2VTZXRDaGVja3N1bUlucGxhY2UobG9jYWxwYWdlLCBidWZIZHItPnRhZy5ibG9ja051 bSk7CiAKLQkJCQlzbWdyd3JpdGUoUmVsYXRpb25HZXRTbWdyKHJlbCksCi0JCQkJCQkgIEJ1ZlRh Z0dldEZvcmtOdW0oJmJ1Zkhkci0+dGFnKSwKKwkJCQlzbWdyd3JpdGUoUmVsYXRpb25HZXRTbWdy KHJlbCwgQnVmVGFnR2V0Rm9ya051bSgmYnVmSGRyLT50YWcpKSwKIAkJCQkJCSAgYnVmSGRyLT50 YWcuYmxvY2tOdW0sCiAJCQkJCQkgIGxvY2FscGFnZSwKIAkJCQkJCSAgZmFsc2UpOwpAQCAtMzU4 Niw3ICszNTg3LDcgQEAgRmx1c2hSZWxhdGlvbkJ1ZmZlcnMoUmVsYXRpb24gcmVsKQogCQl7CiAJ CQlQaW5CdWZmZXJfTG9ja2VkKGJ1Zkhkcik7CiAJCQlMV0xvY2tBY3F1aXJlKEJ1ZmZlckRlc2Ny aXB0b3JHZXRDb250ZW50TG9jayhidWZIZHIpLCBMV19TSEFSRUQpOwotCQkJRmx1c2hCdWZmZXIo YnVmSGRyLCBSZWxhdGlvbkdldFNtZ3IocmVsKSk7CisJCQlGbHVzaEJ1ZmZlcihidWZIZHIsIFJl bGF0aW9uR2V0U21ncihyZWwsIGJ1Zkhkci0+dGFnLmZvcmtOdW0pKTsKIAkJCUxXTG9ja1JlbGVh c2UoQnVmZmVyRGVzY3JpcHRvckdldENvbnRlbnRMb2NrKGJ1ZkhkcikpOwogCQkJVW5waW5CdWZm ZXIoYnVmSGRyKTsKIAkJfQpAQCAtMzYwNSwyNSArMzYwNiwyMCBAQCBGbHVzaFJlbGF0aW9uQnVm ZmVycyhSZWxhdGlvbiByZWwpCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiB2b2lkCi1GbHVzaFJlbGF0 aW9uc0FsbEJ1ZmZlcnMoU01nclJlbGF0aW9uICpzbWdycywgaW50IG5yZWxzKQorRmx1c2hSZWxh dGlvbnNBbGxCdWZmZXJzKFJlbEZpbGVMb2NhdG9yICpyZWxzLCBpbnQgbnJlbHMpCiB7CiAJaW50 CQkJaTsKLQlTTWdyU29ydEFycmF5ICpzcmVsczsKKwlSZWxGaWxlTG9jYXRvciAqbG9jYXRvcnMg PSBOVUxMOwogCWJvb2wJCXVzZV9ic2VhcmNoOwogCiAJaWYgKG5yZWxzID09IDApCiAJCXJldHVy bjsKIAogCS8qIGZpbGwtaW4gYXJyYXkgZm9yIHFzb3J0ICovCi0Jc3JlbHMgPSBwYWxsb2Moc2l6 ZW9mKFNNZ3JTb3J0QXJyYXkpICogbnJlbHMpOworCWxvY2F0b3JzID0gcGFsbG9jKHNpemVvZihS ZWxGaWxlTG9jYXRvcikgKiBucmVscyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnJlbHM7IGkrKykK LQl7Ci0JCUFzc2VydCghUmVsRmlsZUxvY2F0b3JCYWNrZW5kSXNUZW1wKHNtZ3JzW2ldLT5zbWdy X3Jsb2NhdG9yKSk7Ci0KLQkJc3JlbHNbaV0ucmxvY2F0b3IgPSBzbWdyc1tpXS0+c21ncl9ybG9j YXRvci5sb2NhdG9yOwotCQlzcmVsc1tpXS5zcmVsID0gc21ncnNbaV07Ci0JfQorCQlsb2NhdG9y c1tpXSA9IHJlbHNbaV07CiAKIAkvKgogCSAqIFNhdmUgdGhlIGJzZWFyY2ggb3ZlcmhlYWQgZm9y IGxvdyBudW1iZXIgb2YgcmVsYXRpb25zIHRvIHN5bmMuIFNlZQpAQCAtMzYzMSwxNiArMzYyNywx NiBAQCBGbHVzaFJlbGF0aW9uc0FsbEJ1ZmZlcnMoU01nclJlbGF0aW9uICpzbWdycywgaW50IG5y ZWxzKQogCSAqLwogCXVzZV9ic2VhcmNoID0gbnJlbHMgPiBSRUxTX0JTRUFSQ0hfVEhSRVNIT0xE OwogCi0JLyogc29ydCB0aGUgbGlzdCBvZiBTTWdyUmVsYXRpb25zIGlmIG5lY2Vzc2FyeSAqLwor CS8qIHNvcnQgdGhlIGxpc3Qgb2YgbG9jYXRvcnMgaWYgbmVjZXNzYXJ5ICovCiAJaWYgKHVzZV9i c2VhcmNoKQotCQlwZ19xc29ydChzcmVscywgbnJlbHMsIHNpemVvZihTTWdyU29ydEFycmF5KSwg cmxvY2F0b3JfY29tcGFyYXRvcik7CisJCXBnX3Fzb3J0KGxvY2F0b3JzLCBucmVscywgc2l6ZW9m KFJlbEZpbGVMb2NhdG9yKSwgcmxvY2F0b3JfY29tcGFyYXRvcik7CiAKIAkvKiBNYWtlIHN1cmUg d2UgY2FuIGhhbmRsZSB0aGUgcGluIGluc2lkZSB0aGUgbG9vcCAqLwogCVJlc291cmNlT3duZXJF bmxhcmdlQnVmZmVycyhDdXJyZW50UmVzb3VyY2VPd25lcik7CiAKIAlmb3IgKGkgPSAwOyBpIDwg TkJ1ZmZlcnM7IGkrKykKIAl7Ci0JCVNNZ3JTb3J0QXJyYXkgKnNyZWxlbnQgPSBOVUxMOworCQlS ZWxGaWxlTG9jYXRvciAqZm91bmQgPSBOVUxMOwogCQlCdWZmZXJEZXNjICpidWZIZHIgPSBHZXRC dWZmZXJEZXNjcmlwdG9yKGkpOwogCQl1aW50MzIJCWJ1Zl9zdGF0ZTsKIApAQCAtMzY1NSw5ICsz NjUxLDkgQEAgRmx1c2hSZWxhdGlvbnNBbGxCdWZmZXJzKFNNZ3JSZWxhdGlvbiAqc21ncnMsIGlu dCBucmVscykKIAogCQkJZm9yIChqID0gMDsgaiA8IG5yZWxzOyBqKyspCiAJCQl7Ci0JCQkJaWYg KEJ1ZlRhZ01hdGNoZXNSZWxGaWxlTG9jYXRvcigmYnVmSGRyLT50YWcsICZzcmVsc1tqXS5ybG9j YXRvcikpCisJCQkJaWYgKEJ1ZlRhZ01hdGNoZXNSZWxGaWxlTG9jYXRvcigmYnVmSGRyLT50YWcs ICZsb2NhdG9yc1tqXSkpCiAJCQkJewotCQkJCQlzcmVsZW50ID0gJnNyZWxzW2pdOworCQkJCQlm b3VuZCA9ICZsb2NhdG9yc1tqXTsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJfQpAQCAtMzY2Nywy NCArMzY2MywyNiBAQCBGbHVzaFJlbGF0aW9uc0FsbEJ1ZmZlcnMoU01nclJlbGF0aW9uICpzbWdy cywgaW50IG5yZWxzKQogCQkJUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3I7CiAKIAkJCXJsb2NhdG9y ID0gQnVmVGFnR2V0UmVsRmlsZUxvY2F0b3IoJmJ1Zkhkci0+dGFnKTsKLQkJCXNyZWxlbnQgPSBi c2VhcmNoKChjb25zdCB2b2lkICopICYocmxvY2F0b3IpLAotCQkJCQkJCSAgc3JlbHMsIG5yZWxz LCBzaXplb2YoU01nclNvcnRBcnJheSksCisJCQlmb3VuZCA9IGJzZWFyY2goKGNvbnN0IHZvaWQg KikgJihybG9jYXRvciksCisJCQkJCQkJICBsb2NhdG9ycywgbnJlbHMsIHNpemVvZihSZWxGaWxl TG9jYXRvciksCiAJCQkJCQkJICBybG9jYXRvcl9jb21wYXJhdG9yKTsKIAkJfQogCiAJCS8qIGJ1 ZmZlciBkb2Vzbid0IGJlbG9uZyB0byBhbnkgb2YgdGhlIGdpdmVuIHJlbGZpbGVsb2NhdG9yczsg c2tpcCBpdCAqLwotCQlpZiAoc3JlbGVudCA9PSBOVUxMKQorCQlpZiAoZm91bmQgPT0gTlVMTCkK IAkJCWNvbnRpbnVlOwogCisJCS8qIEZJWE1FOiBjYWNoZSBTTWdyRmlsZUhhbmRsZXMgZm9yIHRo ZSByZWxzLCBhbmQgcGFzcyB0byBGbHVzaEJ1ZmZlciAqLworCiAJCVJlc2VydmVQcml2YXRlUmVm Q291bnRFbnRyeSgpOwogCiAJCWJ1Zl9zdGF0ZSA9IExvY2tCdWZIZHIoYnVmSGRyKTsKLQkJaWYg KEJ1ZlRhZ01hdGNoZXNSZWxGaWxlTG9jYXRvcigmYnVmSGRyLT50YWcsICZzcmVsZW50LT5ybG9j YXRvcikgJiYKKwkJaWYgKEJ1ZlRhZ01hdGNoZXNSZWxGaWxlTG9jYXRvcigmYnVmSGRyLT50YWcs IGZvdW5kKSAmJgogCQkJKGJ1Zl9zdGF0ZSAmIChCTV9WQUxJRCB8IEJNX0RJUlRZKSkgPT0gKEJN X1ZBTElEIHwgQk1fRElSVFkpKQogCQl7CiAJCQlQaW5CdWZmZXJfTG9ja2VkKGJ1Zkhkcik7CiAJ CQlMV0xvY2tBY3F1aXJlKEJ1ZmZlckRlc2NyaXB0b3JHZXRDb250ZW50TG9jayhidWZIZHIpLCBM V19TSEFSRUQpOwotCQkJRmx1c2hCdWZmZXIoYnVmSGRyLCBzcmVsZW50LT5zcmVsKTsKKwkJCUZs dXNoQnVmZmVyKGJ1ZkhkciwgTlVMTCk7CiAJCQlMV0xvY2tSZWxlYXNlKEJ1ZmZlckRlc2NyaXB0 b3JHZXRDb250ZW50TG9jayhidWZIZHIpKTsKIAkJCVVucGluQnVmZmVyKGJ1Zkhkcik7CiAJCX0K QEAgLTM2OTIsNyArMzY5MCw3IEBAIEZsdXNoUmVsYXRpb25zQWxsQnVmZmVycyhTTWdyUmVsYXRp b24gKnNtZ3JzLCBpbnQgbnJlbHMpCiAJCQlVbmxvY2tCdWZIZHIoYnVmSGRyLCBidWZfc3RhdGUp OwogCX0KIAotCXBmcmVlKHNyZWxzKTsKKwlwZnJlZShsb2NhdG9ycyk7CiB9CiAKIC8qIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQpAQCAtMzcwOCw3ICszNzA2LDcgQEAgRmx1c2hSZWxhdGlvbnNBbGxCdWZmZXJzKFNN Z3JSZWxhdGlvbiAqc21ncnMsIGludCBucmVscykKIHN0YXRpYyB2b2lkCiBSZWxhdGlvbkNvcHlT dG9yYWdlVXNpbmdCdWZmZXIoUmVsRmlsZUxvY2F0b3Igc3JjbG9jYXRvciwKIAkJCQkJCQkgICBS ZWxGaWxlTG9jYXRvciBkc3Rsb2NhdG9yLAotCQkJCQkJCSAgIEZvcmtOdW1iZXIgZm9ya051bSwg Ym9vbCBwZXJtYW5lbnQpCisJCQkJCQkJICAgRm9ya051bWJlciBmb3JrbnVtLCBib29sIHBlcm1h bmVudCkKIHsKIAlCdWZmZXIJCXNyY0J1ZjsKIAlCdWZmZXIJCWRzdEJ1ZjsKQEAgLTM3MjYsMTEg KzM3MjQsMTEgQEAgUmVsYXRpb25Db3B5U3RvcmFnZVVzaW5nQnVmZmVyKFJlbEZpbGVMb2NhdG9y IHNyY2xvY2F0b3IsCiAJICogY2FuIHNraXAgaXQgd2hlbiBjb3B5aW5nIGFueSBmb3JrIG9mIGFu IHVubG9nZ2VkIHJlbGF0aW9uIG90aGVyIHRoYW4KIAkgKiB0aGUgaW5pdCBmb3JrLgogCSAqLwot CXVzZV93YWwgPSBYTG9nSXNOZWVkZWQoKSAmJiAocGVybWFuZW50IHx8IGZvcmtOdW0gPT0gSU5J VF9GT1JLTlVNKTsKKwl1c2Vfd2FsID0gWExvZ0lzTmVlZGVkKCkgJiYgKHBlcm1hbmVudCB8fCBm b3JrbnVtID09IElOSVRfRk9SS05VTSk7CiAKIAkvKiBHZXQgbnVtYmVyIG9mIGJsb2NrcyBpbiB0 aGUgc291cmNlIHJlbGF0aW9uLiAqLwotCW5ibG9ja3MgPSBzbWdybmJsb2NrcyhzbWdyb3Blbihz cmNsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkKSwKLQkJCQkJCSAgZm9ya051bSk7CisJbmJsb2Nr cyA9IHNtZ3JuYmxvY2tzKHNtZ3JvcGVuKHNyY2xvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIGZv cmtudW0pKTsKKwkJCQkJCSAgCiAKIAkvKiBOb3RoaW5nIHRvIGNvcHk7IGp1c3QgcmV0dXJuLiAq LwogCWlmIChuYmxvY2tzID09IDApCkBAIC0zNzQxLDcgKzM3MzksNyBAQCBSZWxhdGlvbkNvcHlT dG9yYWdlVXNpbmdCdWZmZXIoUmVsRmlsZUxvY2F0b3Igc3JjbG9jYXRvciwKIAkgKiByZWxhdGlv biBiZWZvcmUgc3RhcnRpbmcgdG8gY29weSBibG9jayBieSBibG9jay4KIAkgKi8KIAltZW1zZXQo YnVmLmRhdGEsIDAsIEJMQ0tTWik7Ci0Jc21ncmV4dGVuZChzbWdyb3Blbihkc3Rsb2NhdG9yLCBJ bnZhbGlkQmFja2VuZElkKSwgZm9ya051bSwgbmJsb2NrcyAtIDEsCisJc21ncmV4dGVuZChzbWdy b3Blbihkc3Rsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCBmb3JrbnVtKSwgbmJsb2NrcyAtIDEs CiAJCQkgICBidWYuZGF0YSwgdHJ1ZSk7CiAKIAkvKiBUaGlzIGlzIGEgYnVsayBvcGVyYXRpb24s IHNvIHVzZSBidWZmZXIgYWNjZXNzIHN0cmF0ZWdpZXMuICovCkBAIC0zNzU0LDE0ICszNzUyLDE0 IEBAIFJlbGF0aW9uQ29weVN0b3JhZ2VVc2luZ0J1ZmZlcihSZWxGaWxlTG9jYXRvciBzcmNsb2Nh dG9yLAogCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCiAJCS8qIFJlYWQgYmxvY2sgZnJvbSBz b3VyY2UgcmVsYXRpb24uICovCi0JCXNyY0J1ZiA9IFJlYWRCdWZmZXJXaXRob3V0UmVsY2FjaGUo c3JjbG9jYXRvciwgZm9ya051bSwgYmxrbm8sCisJCXNyY0J1ZiA9IFJlYWRCdWZmZXJXaXRob3V0 UmVsY2FjaGUoc3JjbG9jYXRvciwgZm9ya251bSwgYmxrbm8sCiAJCQkJCQkJCQkJICAgUkJNX05P Uk1BTCwgYnN0cmF0ZWd5X3NyYywKIAkJCQkJCQkJCQkgICBwZXJtYW5lbnQpOwogCQlMb2NrQnVm ZmVyKHNyY0J1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUpOwogCQlzcmNQYWdlID0gQnVmZmVyR2V0UGFn ZShzcmNCdWYpOwogCiAJCS8qIFVzZSBQX05FVyB0byBleHRlbmQgdGhlIGRlc3RpbmF0aW9uIHJl bGF0aW9uLiAqLwotCQlkc3RCdWYgPSBSZWFkQnVmZmVyV2l0aG91dFJlbGNhY2hlKGRzdGxvY2F0 b3IsIGZvcmtOdW0sIGJsa25vLAorCQlkc3RCdWYgPSBSZWFkQnVmZmVyV2l0aG91dFJlbGNhY2hl KGRzdGxvY2F0b3IsIGZvcmtudW0sIGJsa25vLAogCQkJCQkJCQkJCSAgIFJCTV9OT1JNQUwsIGJz dHJhdGVneV9kc3QsCiAJCQkJCQkJCQkJICAgcGVybWFuZW50KTsKIAkJTG9ja0J1ZmZlcihkc3RC dWYsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7CkBAIC0zNzk5LDcgKzM3OTcsNiBAQCB2b2lkCiBD cmVhdGVBbmRDb3B5UmVsYXRpb25EYXRhKFJlbEZpbGVMb2NhdG9yIHNyY19ybG9jYXRvciwKIAkJ CQkJCSAgUmVsRmlsZUxvY2F0b3IgZHN0X3Jsb2NhdG9yLCBib29sIHBlcm1hbmVudCkKIHsKLQlS ZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3I7CiAJY2hhcgkJcmVscGVyc2lzdGVuY2U7CiAK IAkvKiBTZXQgdGhlIHJlbHBlcnNpc3RlbmNlLiAqLwpAQCAtMzgxOSwzNCArMzgxNiwzMCBAQCBD cmVhdGVBbmRDb3B5UmVsYXRpb25EYXRhKFJlbEZpbGVMb2NhdG9yIHNyY19ybG9jYXRvciwKIAkJ CQkJCQkJICAgcGVybWFuZW50KTsKIAogCS8qIGNvcHkgdGhvc2UgZXh0cmEgZm9ya3MgdGhhdCBl eGlzdCAqLwotCWZvciAoRm9ya051bWJlciBmb3JrTnVtID0gTUFJTl9GT1JLTlVNICsgMTsKLQkJ IGZvcmtOdW0gPD0gTUFYX0ZPUktOVU07IGZvcmtOdW0rKykKKwlmb3IgKEZvcmtOdW1iZXIgZm9y a251bSA9IE1BSU5fRk9SS05VTSArIDE7CisJCSBmb3JrbnVtIDw9IE1BWF9GT1JLTlVNOyBmb3Jr bnVtKyspCiAJewotCQlpZiAoc21ncmV4aXN0cyhzbWdyb3BlbihzcmNfcmxvY2F0b3IsIEludmFs aWRCYWNrZW5kSWQpLCBmb3JrTnVtKSkKKwkJaWYgKHNtZ3JleGlzdHMoc21ncm9wZW4oc3JjX3Js b2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCBmb3JrbnVtKSkpCiAJCXsKLQkJCXNtZ3JjcmVhdGUo c21ncm9wZW4oZHN0X3Jsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkKSwgZm9ya051bSwgZmFsc2Up OworCQkJc21ncmNyZWF0ZShzbWdyb3Blbihkc3RfcmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQs IGZvcmtudW0pLCBmYWxzZSk7CiAKIAkJCS8qCiAJCQkgKiBXQUwgbG9nIGNyZWF0aW9uIGlmIHRo ZSByZWxhdGlvbiBpcyBwZXJzaXN0ZW50LCBvciB0aGlzIGlzIHRoZQogCQkJICogaW5pdCBmb3Jr IG9mIGFuIHVubG9nZ2VkIHJlbGF0aW9uLgogCQkJICovCi0JCQlpZiAocGVybWFuZW50IHx8IGZv cmtOdW0gPT0gSU5JVF9GT1JLTlVNKQotCQkJCWxvZ19zbWdyY3JlYXRlKCZkc3RfcmxvY2F0b3Is IGZvcmtOdW0pOworCQkJaWYgKHBlcm1hbmVudCB8fCBmb3JrbnVtID09IElOSVRfRk9SS05VTSkK KwkJCQlsb2dfc21ncmNyZWF0ZSgmZHN0X3Jsb2NhdG9yLCBmb3JrbnVtKTsKIAogCQkJLyogQ29w eSBhIGZvcmsncyBkYXRhLCBibG9jayBieSBibG9jay4gKi8KLQkJCVJlbGF0aW9uQ29weVN0b3Jh Z2VVc2luZ0J1ZmZlcihzcmNfcmxvY2F0b3IsIGRzdF9ybG9jYXRvciwgZm9ya051bSwKKwkJCVJl bGF0aW9uQ29weVN0b3JhZ2VVc2luZ0J1ZmZlcihzcmNfcmxvY2F0b3IsIGRzdF9ybG9jYXRvciwg Zm9ya251bSwKIAkJCQkJCQkJCQkgICBwZXJtYW5lbnQpOwogCQl9CiAJfQogCi0JLyogY2xvc2Ug c291cmNlIGFuZCBkZXN0aW5hdGlvbiBzbWdyIGlmIGV4aXN0cy4gKi8KLQlybG9jYXRvci5iYWNr ZW5kID0gSW52YWxpZEJhY2tlbmRJZDsKIAotCXJsb2NhdG9yLmxvY2F0b3IgPSBzcmNfcmxvY2F0 b3I7Ci0Jc21ncmNsb3NlcmVsbG9jYXRvcihybG9jYXRvcik7CisJc21ncmNsb3NlcmVsbG9jYXRv cihzcmNfcmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQpOwogCi0JcmxvY2F0b3IubG9jYXRvciA9 IGRzdF9ybG9jYXRvcjsKLQlzbWdyY2xvc2VyZWxsb2NhdG9yKHJsb2NhdG9yKTsKKwlzbWdyY2xv c2VyZWxsb2NhdG9yKGRzdF9ybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCk7CiB9CiAKIC8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQpAQCAtNDk2Nyw3ICs0OTYwLDcgQEAgSXNzdWVQZW5kaW5nV3JpdGViYWNrcyhX cml0ZWJhY2tDb250ZXh0ICpjb250ZXh0KQogCXsKIAkJUGVuZGluZ1dyaXRlYmFjayAqY3VyOwog CQlQZW5kaW5nV3JpdGViYWNrICpuZXh0OwotCQlTTWdyUmVsYXRpb24gcmVsbjsKKwkJU01nckZp bGVIYW5kbGUgc2ZpbGU7CiAJCWludAkJCWFoZWFkOwogCQlCdWZmZXJUYWcJdGFnOwogCQlSZWxG aWxlTG9jYXRvciBjdXJybG9jYXRvcjsKQEAgLTUwMDcsOCArNTAwMCw4IEBAIElzc3VlUGVuZGlu Z1dyaXRlYmFja3MoV3JpdGViYWNrQ29udGV4dCAqY29udGV4dCkKIAkJaSArPSBhaGVhZDsKIAog CQkvKiBhbmQgZmluYWxseSB0ZWxsIHRoZSBrZXJuZWwgdG8gd3JpdGUgdGhlIGRhdGEgdG8gc3Rv cmFnZSAqLwotCQlyZWxuID0gc21ncm9wZW4oY3VycmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQp OwotCQlzbWdyd3JpdGViYWNrKHJlbG4sIEJ1ZlRhZ0dldEZvcmtOdW0oJnRhZyksIHRhZy5ibG9j a051bSwgbmJsb2Nrcyk7CisJCXNmaWxlID0gc21ncm9wZW4oY3VycmxvY2F0b3IsIEludmFsaWRC YWNrZW5kSWQsIEJ1ZlRhZ0dldEZvcmtOdW0oJnRhZykpOworCQlzbWdyd3JpdGViYWNrKHNmaWxl LCB0YWcuYmxvY2tOdW0sIG5ibG9ja3MpOwogCX0KIAogCWNvbnRleHQtPm5yX3BlbmRpbmcgPSAw OwpAQCAtNTAzMCwzICs1MDIzLDI5IEBAIFRlc3RGb3JPbGRTbmFwc2hvdF9pbXBsKFNuYXBzaG90 IHNuYXBzaG90LCBSZWxhdGlvbiByZWxhdGlvbikKIAkJCQkoZXJyY29kZShFUlJDT0RFX1NOQVBT SE9UX1RPT19PTEQpLAogCQkJCSBlcnJtc2coInNuYXBzaG90IHRvbyBvbGQiKSkpOwogfQorCisv KgorICogQ2hlY2sgaWYgYSBidWZmZXIgdGFnIGlzIGN1cnJlbnRseSBtYXBwZWQuCisgKgorICog WFhYIER1YmlvdXMgc2VtYW50aWNzOyBuZWVkZWQgb25seSBmb3IgbXVsdGl4YWN0J3MgaGFuZGxp bmcgZm9yCisgKiBpbmNvbnNpc3RlbnQgc3RhdGVzLgorICovCitib29sCitCdWZmZXJQcm9iZShS ZWxGaWxlTG9jYXRvciBybG9jYXRvciwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBi bG9ja051bSkKK3sKKwlCdWZmZXJUYWcJdGFnOworCXVpbnQzMgkJaGFzaDsKKwlMV0xvY2sJICAg KnBhcnRpdGlvbkxvY2s7CisJaW50CQkJYnVmX2lkOworCisJSW5pdEJ1ZmZlclRhZygmdGFnLCAm cmxvY2F0b3IsIGZvcmtudW0sIGJsb2NrTnVtKTsKKworCWhhc2ggPSBCdWZUYWJsZUhhc2hDb2Rl KCZ0YWcpOworCXBhcnRpdGlvbkxvY2sgPSBCdWZNYXBwaW5nUGFydGl0aW9uTG9jayhoYXNoKTsK KworCUxXTG9ja0FjcXVpcmUocGFydGl0aW9uTG9jaywgTFdfU0hBUkVEKTsKKwlidWZfaWQgPSBC dWZUYWJsZUxvb2t1cCgmdGFnLCBoYXNoKTsKKwlMV0xvY2tSZWxlYXNlKHBhcnRpdGlvbkxvY2sp OworCisJcmV0dXJuIGJ1Zl9pZCA+PSAwOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvbG9jYWxidWYuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2xvY2Fs YnVmLmMKaW5kZXggMzBkNjdkMWM0MGQuLmE1NjI5NTMyZDcyIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9zdG9yYWdlL2J1ZmZlci9sb2NhbGJ1Zi5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2xvY2FsYnVmLmMKQEAgLTYxLDE0ICs2MSwxMyBAQCBzdGF0aWMgQmxvY2sgR2V0TG9j YWxCdWZmZXJTdG9yYWdlKHZvaWQpOwogICogTm8tb3AgaWYgcHJlZmV0Y2hpbmcgaXNuJ3QgY29t cGlsZWQgaW4uCiAgKi8KIFByZWZldGNoQnVmZmVyUmVzdWx0Ci1QcmVmZXRjaExvY2FsQnVmZmVy KFNNZ3JSZWxhdGlvbiBzbWdyLCBGb3JrTnVtYmVyIGZvcmtOdW0sCi0JCQkJCUJsb2NrTnVtYmVy IGJsb2NrTnVtKQorUHJlZmV0Y2hMb2NhbEJ1ZmZlcihTTWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxv Y2tOdW1iZXIgYmxvY2tOdW0pCiB7CiAJUHJlZmV0Y2hCdWZmZXJSZXN1bHQgcmVzdWx0ID0ge0lu dmFsaWRCdWZmZXIsIGZhbHNlfTsKIAlCdWZmZXJUYWcJbmV3VGFnOwkJCS8qIGlkZW50aXR5IG9m IHJlcXVlc3RlZCBibG9jayAqLwogCUxvY2FsQnVmZmVyTG9va3VwRW50ICpocmVzdWx0OwogCi0J SW5pdEJ1ZmZlclRhZygmbmV3VGFnLCAmc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLCBmb3Jr TnVtLCBibG9ja051bSk7CisJSW5pdEJ1ZmZlclRhZygmbmV3VGFnLCAmc2ZpbGUtPnNtZ3JfbG9j YXRvci5sb2NhdG9yLCBzZmlsZS0+c21ncl9sb2NhdG9yLmZvcmtudW0sIGJsb2NrTnVtKTsKIAog CS8qIEluaXRpYWxpemUgbG9jYWwgYnVmZmVycyBpZiBmaXJzdCByZXF1ZXN0IGluIHRoaXMgc2Vz c2lvbiAqLwogCWlmIChMb2NhbEJ1Zkhhc2ggPT0gTlVMTCkKQEAgLTg3LDcgKzg2LDcgQEAgUHJl ZmV0Y2hMb2NhbEJ1ZmZlcihTTWdyUmVsYXRpb24gc21nciwgRm9ya051bWJlciBmb3JrTnVtLAog CXsKICNpZmRlZiBVU0VfUFJFRkVUQ0gKIAkJLyogTm90IGluIGJ1ZmZlcnMsIHNvIGluaXRpYXRl IHByZWZldGNoICovCi0JCXNtZ3JwcmVmZXRjaChzbWdyLCBmb3JrTnVtLCBibG9ja051bSk7CisJ CXNtZ3JwcmVmZXRjaChzZmlsZSwgYmxvY2tOdW0pOwogCQlyZXN1bHQuaW5pdGlhdGVkX2lvID0g dHJ1ZTsKICNlbmRpZgkJCQkJCQkvKiBVU0VfUFJFRkVUQ0ggKi8KIAl9CkBAIC0xMDYsOCArMTA1 LDcgQEAgUHJlZmV0Y2hMb2NhbEJ1ZmZlcihTTWdyUmVsYXRpb24gc21nciwgRm9ya051bWJlciBm b3JrTnVtLAogICogKGhlbmNlLCB1c2FnZV9jb3VudCBpcyBhbHdheXMgYWR2YW5jZWQpLgogICov CiBCdWZmZXJEZXNjICoKLUxvY2FsQnVmZmVyQWxsb2MoU01nclJlbGF0aW9uIHNtZ3IsIEZvcmtO dW1iZXIgZm9ya051bSwgQmxvY2tOdW1iZXIgYmxvY2tOdW0sCi0JCQkJIGJvb2wgKmZvdW5kUHRy KQorTG9jYWxCdWZmZXJBbGxvYyhTTWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIgYmxv Y2tOdW0sIGJvb2wgKmZvdW5kUHRyKQogewogCUJ1ZmZlclRhZwluZXdUYWc7CQkJLyogaWRlbnRp dHkgb2YgcmVxdWVzdGVkIGJsb2NrICovCiAJTG9jYWxCdWZmZXJMb29rdXBFbnQgKmhyZXN1bHQ7 CkBAIC0xMTcsNyArMTE1LDcgQEAgTG9jYWxCdWZmZXJBbGxvYyhTTWdyUmVsYXRpb24gc21nciwg Rm9ya051bWJlciBmb3JrTnVtLCBCbG9ja051bWJlciBibG9ja051bSwKIAlib29sCQlmb3VuZDsK IAl1aW50MzIJCWJ1Zl9zdGF0ZTsKIAotCUluaXRCdWZmZXJUYWcoJm5ld1RhZywgJnNtZ3ItPnNt Z3JfcmxvY2F0b3IubG9jYXRvciwgZm9ya051bSwgYmxvY2tOdW0pOworCUluaXRCdWZmZXJUYWco Jm5ld1RhZywgJnNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvciwgc2ZpbGUtPnNtZ3JfbG9jYXRv ci5mb3JrbnVtLCBibG9ja051bSk7CiAKIAkvKiBJbml0aWFsaXplIGxvY2FsIGJ1ZmZlcnMgaWYg Zmlyc3QgcmVxdWVzdCBpbiB0aGlzIHNlc3Npb24gKi8KIAlpZiAoTG9jYWxCdWZIYXNoID09IE5V TEwpCkBAIC0xMzQsNyArMTMyLDcgQEAgTG9jYWxCdWZmZXJBbGxvYyhTTWdyUmVsYXRpb24gc21n ciwgRm9ya051bWJlciBmb3JrTnVtLCBCbG9ja051bWJlciBibG9ja051bSwKIAkJQXNzZXJ0KEJ1 ZmZlclRhZ3NFcXVhbCgmYnVmSGRyLT50YWcsICZuZXdUYWcpKTsKICNpZmRlZiBMQkRFQlVHCiAJ CWZwcmludGYoc3RkZXJyLCAiTEIgQUxMT0MgKCV1LCVkLCVkKSAlZFxuIiwKLQkJCQlzbWdyLT5z bWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLCBmb3JrTnVtLCBibG9ja051bSwgLWIgLSAx KTsKKwkJCQlzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLCBzZmlsZS0+c21n cl9sb2NhdG9yLmZvcmtudW0sIGJsb2NrTnVtLCAtYiAtIDEpOwogI2VuZGlmCiAJCWJ1Zl9zdGF0 ZSA9IHBnX2F0b21pY19yZWFkX3UzMigmYnVmSGRyLT5zdGF0ZSk7CiAKQEAgLTE2Miw3ICsxNjAs NyBAQCBMb2NhbEJ1ZmZlckFsbG9jKFNNZ3JSZWxhdGlvbiBzbWdyLCBGb3JrTnVtYmVyIGZvcmtO dW0sIEJsb2NrTnVtYmVyIGJsb2NrTnVtLAogCiAjaWZkZWYgTEJERUJVRwogCWZwcmludGYoc3Rk ZXJyLCAiTEIgQUxMT0MgKCV1LCVkLCVkKSAlZFxuIiwKLQkJCXNtZ3ItPnNtZ3JfcmxvY2F0b3Iu bG9jYXRvci5yZWxOdW1iZXIsIGZvcmtOdW0sIGJsb2NrTnVtLAorCQkJc2ZpbGUtPnNtZ3JfbG9j YXRvci5sb2NhdG9yLnJlbE51bWJlciwgc2ZpbGUtPnNtZ3JfbG9jYXRvci5mb3JrbnVtLCBibG9j a051bSwKIAkJCS1uZXh0RnJlZUxvY2FsQnVmIC0gMSk7CiAjZW5kaWYKIApAQCAtMjExLDE3ICsy MDksMTYgQEAgTG9jYWxCdWZmZXJBbGxvYyhTTWdyUmVsYXRpb24gc21nciwgRm9ya051bWJlciBm b3JrTnVtLCBCbG9ja051bWJlciBibG9ja051bSwKIAkgKi8KIAlpZiAoYnVmX3N0YXRlICYgQk1f RElSVFkpCiAJewotCQlTTWdyUmVsYXRpb24gb3JlbG47CisJCVNNZ3JGaWxlSGFuZGxlIG9maWxl OwogCQlQYWdlCQlsb2NhbHBhZ2UgPSAoY2hhciAqKSBMb2NhbEJ1ZkhkckdldEJsb2NrKGJ1Zkhk cik7CiAKLQkJLyogRmluZCBzbWdyIHJlbGF0aW9uIGZvciBidWZmZXIgKi8KLQkJb3JlbG4gPSBz bWdyb3BlbihCdWZUYWdHZXRSZWxGaWxlTG9jYXRvcigmYnVmSGRyLT50YWcpLCBNeUJhY2tlbmRJ ZCk7CisJCS8qIEZpbmQgc21nciBmaWxlIGhhbmRsZSBmb3IgYnVmZmVyICovCisJCW9maWxlID0g c21ncm9wZW4oQnVmVGFnR2V0UmVsRmlsZUxvY2F0b3IoJmJ1Zkhkci0+dGFnKSwgTXlCYWNrZW5k SWQsIEJ1ZlRhZ0dldEZvcmtOdW0oJmJ1Zkhkci0+dGFnKSk7CiAKIAkJUGFnZVNldENoZWNrc3Vt SW5wbGFjZShsb2NhbHBhZ2UsIGJ1Zkhkci0+dGFnLmJsb2NrTnVtKTsKIAogCQkvKiBBbmQgd3Jp dGUuLi4gKi8KLQkJc21ncndyaXRlKG9yZWxuLAotCQkJCSAgQnVmVGFnR2V0Rm9ya051bSgmYnVm SGRyLT50YWcpLAorCQlzbWdyd3JpdGUob2ZpbGUsCiAJCQkJICBidWZIZHItPnRhZy5ibG9ja051 bSwKIAkJCQkgIGxvY2FscGFnZSwKIAkJCQkgIGZhbHNlKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvZnJlZXNwYWNlL2ZyZWVzcGFjZS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9m cmVlc3BhY2UvZnJlZXNwYWNlLmMKaW5kZXggYTZiMDUzMzEwMzIuLjg2MzZmNmJlYzQzIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2ZyZWVzcGFjZS9mcmVlc3BhY2UuYworKysgYi9z cmMvYmFja2VuZC9zdG9yYWdlL2ZyZWVzcGFjZS9mcmVlc3BhY2UuYwpAQCAtMjcxLDcgKzI3MSw3 IEBAIEZyZWVTcGFjZU1hcFByZXBhcmVUcnVuY2F0ZVJlbChSZWxhdGlvbiByZWwsIEJsb2NrTnVt YmVyIG5ibG9ja3MpCiAJICogSWYgbm8gRlNNIGhhcyBiZWVuIGNyZWF0ZWQgeWV0IGZvciB0aGlz IHJlbGF0aW9uLCB0aGVyZSdzIG5vdGhpbmcgdG8KIAkgKiB0cnVuY2F0ZS4KIAkgKi8KLQlpZiAo IXNtZ3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKHJlbCksIEZTTV9GT1JLTlVNKSkKKwlpZiAoIXNt Z3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKHJlbCwgRlNNX0ZPUktOVU0pKSkKIAkJcmV0dXJuIElu dmFsaWRCbG9ja051bWJlcjsKIAogCS8qIEdldCB0aGUgbG9jYXRpb24gaW4gdGhlIEZTTSBvZiB0 aGUgZmlyc3QgcmVtb3ZlZCBoZWFwIGJsb2NrICovCkBAIC0zMTcsNyArMzE3LDcgQEAgRnJlZVNw YWNlTWFwUHJlcGFyZVRydW5jYXRlUmVsKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgbmJsb2Nr cykKIAllbHNlCiAJewogCQluZXdfbmZzbWJsb2NrcyA9IGZzbV9sb2dpY2FsX3RvX3BoeXNpY2Fs KGZpcnN0X3JlbW92ZWRfYWRkcmVzcyk7Ci0JCWlmIChzbWdybmJsb2NrcyhSZWxhdGlvbkdldFNt Z3IocmVsKSwgRlNNX0ZPUktOVU0pIDw9IG5ld19uZnNtYmxvY2tzKQorCQlpZiAoc21ncm5ibG9j a3MoUmVsYXRpb25HZXRTbWdyKHJlbCwgRlNNX0ZPUktOVU0pKSA8PSBuZXdfbmZzbWJsb2NrcykK IAkJCXJldHVybiBJbnZhbGlkQmxvY2tOdW1iZXI7CS8qIG5vdGhpbmcgdG8gZG87IHRoZSBGU00g d2FzIGFscmVhZHkKIAkJCQkJCQkJCQkgKiBzbWFsbGVyICovCiAJfQpAQCAtNTMyLDE0ICs1MzIs MTQgQEAgZnNtX3JlYWRidWYoUmVsYXRpb24gcmVsLCBGU01BZGRyZXNzIGFkZHIsIGJvb2wgZXh0 ZW5kKQogewogCUJsb2NrTnVtYmVyIGJsa25vID0gZnNtX2xvZ2ljYWxfdG9fcGh5c2ljYWwoYWRk cik7CiAJQnVmZmVyCQlidWY7Ci0JU01nclJlbGF0aW9uIHJlbG47CisJU01nckZpbGVIYW5kbGUg ZnNtX2ZpbGU7CiAKIAkvKgogCSAqIENhdXRpb246IHJlLXVzaW5nIHRoaXMgc21nciBwb2ludGVy IGNvdWxkIGZhaWwgaWYgdGhlIHJlbGNhY2hlIGVudHJ5CiAJICogZ2V0cyBjbG9zZWQuICBJdCdz IHNhZmUgYXMgbG9uZyBhcyB3ZSBvbmx5IGRvIHNtZ3ItbGV2ZWwgb3BlcmF0aW9ucwogCSAqIGJl dHdlZW4gaGVyZSBhbmQgdGhlIGxhc3QgdXNlIG9mIHRoZSBwb2ludGVyLgogCSAqLwotCXJlbG4g PSBSZWxhdGlvbkdldFNtZ3IocmVsKTsKKwlmc21fZmlsZSA9IFJlbGF0aW9uR2V0U21ncihyZWws IEZTTV9GT1JLTlVNKTsKIAogCS8qCiAJICogSWYgd2UgaGF2ZW4ndCBjYWNoZWQgdGhlIHNpemUg b2YgdGhlIEZTTSB5ZXQsIGNoZWNrIGl0IGZpcnN0LiAgQWxzbwpAQCAtNTQ3LDE5ICs1NDcsMTkg QEAgZnNtX3JlYWRidWYoUmVsYXRpb24gcmVsLCBGU01BZGRyZXNzIGFkZHIsIGJvb2wgZXh0ZW5k KQogCSAqIHZhbHVlIG1pZ2h0IGJlIHN0YWxlLiAgKFdlIHNlbmQgc21nciBpbnZhbCBtZXNzYWdl cyBvbiB0cnVuY2F0aW9uLCBidXQKIAkgKiBub3Qgb24gZXh0ZW5zaW9uLikKIAkgKi8KLQlpZiAo cmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tGU01fRk9SS05VTV0gPT0gSW52YWxpZEJsb2NrTnVt YmVyIHx8Ci0JCWJsa25vID49IHJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbRlNNX0ZPUktOVU1d KQorCWlmIChmc21fZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9PSBJbnZhbGlkQmxvY2tOdW1i ZXIgfHwKKwkJYmxrbm8gPj0gZnNtX2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3MpCiAJewogCQkv KiBJbnZhbGlkYXRlIHRoZSBjYWNoZSBzbyBzbWdybmJsb2NrcyBhc2tzIHRoZSBrZXJuZWwuICov Ci0JCXJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbRlNNX0ZPUktOVU1dID0gSW52YWxpZEJsb2Nr TnVtYmVyOwotCQlpZiAoc21ncmV4aXN0cyhyZWxuLCBGU01fRk9SS05VTSkpCi0JCQlzbWdybmJs b2NrcyhyZWxuLCBGU01fRk9SS05VTSk7CisJCWZzbV9maWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tz ID0gSW52YWxpZEJsb2NrTnVtYmVyOworCQlpZiAoc21ncmV4aXN0cyhmc21fZmlsZSkpCisJCQlz bWdybmJsb2Nrcyhmc21fZmlsZSk7CiAJCWVsc2UKLQkJCXJlbG4tPnNtZ3JfY2FjaGVkX25ibG9j a3NbRlNNX0ZPUktOVU1dID0gMDsKKwkJCWZzbV9maWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzID0g MDsKIAl9CiAKIAkvKiBIYW5kbGUgcmVxdWVzdHMgYmV5b25kIEVPRiAqLwotCWlmIChibGtubyA+ PSByZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW0ZTTV9GT1JLTlVNXSkKKwlpZiAoYmxrbm8gPj0g ZnNtX2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3MpCiAJewogCQlpZiAoZXh0ZW5kKQogCQkJZnNt X2V4dGVuZChyZWwsIGJsa25vICsgMSk7CkBAIC02MDksNyArNjA5LDcgQEAgZnNtX2V4dGVuZChS ZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIGZzbV9uYmxvY2tzKQogewogCUJsb2NrTnVtYmVyIGZz bV9uYmxvY2tzX25vdzsKIAlQR0FsaWduZWRCbG9jayBwZzsKLQlTTWdyUmVsYXRpb24gcmVsbjsK KwlTTWdyRmlsZUhhbmRsZSBmc21fZmlsZTsKIAogCVBhZ2VJbml0KChQYWdlKSBwZy5kYXRhLCBC TENLU1osIDApOwogCkBAIC02MzAsMjkgKzYzMCwyOCBAQCBmc21fZXh0ZW5kKFJlbGF0aW9uIHJl bCwgQmxvY2tOdW1iZXIgZnNtX25ibG9ja3MpCiAJICogZ2V0cyBjbG9zZWQuICBJdCdzIHNhZmUg YXMgbG9uZyBhcyB3ZSBvbmx5IGRvIHNtZ3ItbGV2ZWwgb3BlcmF0aW9ucwogCSAqIGJldHdlZW4g aGVyZSBhbmQgdGhlIGxhc3QgdXNlIG9mIHRoZSBwb2ludGVyLgogCSAqLwotCXJlbG4gPSBSZWxh dGlvbkdldFNtZ3IocmVsKTsKKwlmc21fZmlsZSA9IFJlbGF0aW9uR2V0U21ncihyZWwsIEZTTV9G T1JLTlVNKTsKIAogCS8qCiAJICogQ3JlYXRlIHRoZSBGU00gZmlsZSBmaXJzdCBpZiBpdCBkb2Vz bid0IGV4aXN0LiAgSWYKIAkgKiBzbWdyX2NhY2hlZF9uYmxvY2tzW0ZTTV9GT1JLTlVNXSBpcyBw b3NpdGl2ZSB0aGVuIGl0IG11c3QgZXhpc3QsIG5vCiAJICogbmVlZCBmb3IgYW4gc21ncmV4aXN0 cyBjYWxsLgogCSAqLwotCWlmICgocmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tGU01fRk9SS05V TV0gPT0gMCB8fAotCQkgcmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tGU01fRk9SS05VTV0gPT0g SW52YWxpZEJsb2NrTnVtYmVyKSAmJgotCQkhc21ncmV4aXN0cyhyZWxuLCBGU01fRk9SS05VTSkp Ci0JCXNtZ3JjcmVhdGUocmVsbiwgRlNNX0ZPUktOVU0sIGZhbHNlKTsKKwlpZiAoKGZzbV9maWxl LT5zbWdyX2NhY2hlZF9uYmxvY2tzID09IDAgfHwKKwkJIGZzbV9maWxlLT5zbWdyX2NhY2hlZF9u YmxvY2tzID09IEludmFsaWRCbG9ja051bWJlcikgJiYKKwkJIXNtZ3JleGlzdHMoZnNtX2ZpbGUp KQorCQlzbWdyY3JlYXRlKGZzbV9maWxlLCBmYWxzZSk7CiAKIAkvKiBJbnZhbGlkYXRlIGNhY2hl IHNvIHRoYXQgc21ncm5ibG9ja3MoKSBhc2tzIHRoZSBrZXJuZWwuICovCi0JcmVsbi0+c21ncl9j YWNoZWRfbmJsb2Nrc1tGU01fRk9SS05VTV0gPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JZnNtX25i bG9ja3Nfbm93ID0gc21ncm5ibG9ja3MocmVsbiwgRlNNX0ZPUktOVU0pOworCWZzbV9maWxlLT5z bWdyX2NhY2hlZF9uYmxvY2tzID0gSW52YWxpZEJsb2NrTnVtYmVyOworCWZzbV9uYmxvY2tzX25v dyA9IHNtZ3JuYmxvY2tzKGZzbV9maWxlKTsKIAogCS8qIEV4dGVuZCBhcyBuZWVkZWQuICovCiAJ d2hpbGUgKGZzbV9uYmxvY2tzX25vdyA8IGZzbV9uYmxvY2tzKQogCXsKIAkJUGFnZVNldENoZWNr c3VtSW5wbGFjZSgoUGFnZSkgcGcuZGF0YSwgZnNtX25ibG9ja3Nfbm93KTsKIAotCQlzbWdyZXh0 ZW5kKHJlbG4sIEZTTV9GT1JLTlVNLCBmc21fbmJsb2Nrc19ub3csCi0JCQkJICAgcGcuZGF0YSwg ZmFsc2UpOworCQlzbWdyZXh0ZW5kKGZzbV9maWxlLCBmc21fbmJsb2Nrc19ub3csIHBnLmRhdGEs IGZhbHNlKTsKIAkJZnNtX25ibG9ja3Nfbm93Kys7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMK aW5kZXggYjIwNGVjZGJjMzIuLjI0MGYwZTFhM2ZmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9z dG9yYWdlL2lwYy9pcGNpLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCkBA IC0xMTcsOSArMTE3LDcgQEAgQ2FsY3VsYXRlU2htZW1TaXplKGludCAqbnVtX3NlbWFwaG9yZXMp CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFhMb2dQcmVmZXRjaFNobWVtU2l6ZSgpKTsKIAlzaXpl ID0gYWRkX3NpemUoc2l6ZSwgWExPR1NobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6 ZSwgWExvZ1JlY292ZXJ5U2htZW1TaXplKCkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBDTE9H U2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBDb21taXRUc1NobWVtU2l6ZSgp KTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgU1VCVFJBTlNTaG1lbVNpemUoKSk7CiAJc2l6ZSA9 IGFkZF9zaXplKHNpemUsIFR3b1BoYXNlU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShz aXplLCBCYWNrZ3JvdW5kV29ya2VyU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXpl LCBNdWx0aVhhY3RTaG1lbVNpemUoKSk7CkBAIC0yNDEsOSArMjM5LDcgQEAgQ3JlYXRlU2hhcmVk TWVtb3J5QW5kU2VtYXBob3Jlcyh2b2lkKQogCVhMT0dTaG1lbUluaXQoKTsKIAlYTG9nUHJlZmV0 Y2hTaG1lbUluaXQoKTsKIAlYTG9nUmVjb3ZlcnlTaG1lbUluaXQoKTsKLQlDTE9HU2htZW1Jbml0 KCk7CiAJQ29tbWl0VHNTaG1lbUluaXQoKTsKLQlTVUJUUkFOU1NobWVtSW5pdCgpOwogCU11bHRp WGFjdFNobWVtSW5pdCgpOwogCUluaXRCdWZmZXJQb29sKCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1n ci9wcmVkaWNhdGUuYwppbmRleCBkZjFjMGQ3MmU5Ny4uOWMxNjc0ZWJiMGQgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYworKysgYi9zcmMvYmFja2VuZC9z dG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMKQEAgLTMxMywxNyArMzEzLDkgQEAKIAkoKHRhcmdldGhh c2gpIF4gKCh1aW50MzIpIFBvaW50ZXJHZXREYXR1bSgocHJlZGljYXRlbG9ja3RhZyktPm15WGFj dCkpIFwKIAkgPDwgTE9HMl9OVU1fUFJFRElDQVRFTE9DS19QQVJUSVRJT05TKQogCi0KLS8qCi0g KiBUaGUgU0xSVSBidWZmZXIgYXJlYSB0aHJvdWdoIHdoaWNoIHdlIGFjY2VzcyB0aGUgb2xkIHhp ZHMuCi0gKi8KLXN0YXRpYyBTbHJ1Q3RsRGF0YSBTZXJpYWxTbHJ1Q3RsRGF0YTsKLQotI2RlZmlu ZSBTZXJpYWxTbHJ1Q3RsCQkJKCZTZXJpYWxTbHJ1Q3RsRGF0YSkKLQogI2RlZmluZSBTRVJJQUxf UEFHRVNJWkUJCQlCTENLU1oKICNkZWZpbmUgU0VSSUFMX0VOVFJZU0laRQkJCXNpemVvZihTZXJD b21taXRTZXFObykKLSNkZWZpbmUgU0VSSUFMX0VOVFJJRVNQRVJQQUdFCShTRVJJQUxfUEFHRVNJ WkUgLyBTRVJJQUxfRU5UUllTSVpFKQorI2RlZmluZSBTRVJJQUxfRU5UUklFU1BFUlBBR0UJKChT RVJJQUxfUEFHRVNJWkUgLSBTaXplT2ZQYWdlSGVhZGVyRGF0YSkgLyBTRVJJQUxfRU5UUllTSVpF KQogCiAvKgogICogU2V0IG1heGltdW0gcGFnZXMgYmFzZWQgb24gdGhlIG51bWJlciBuZWVkZWQg dG8gdHJhY2sgYWxsIHRyYW5zYWN0aW9ucy4KQEAgLTMzMiwxMiArMzI0LDEzIEBAIHN0YXRpYyBT bHJ1Q3RsRGF0YSBTZXJpYWxTbHJ1Q3RsRGF0YTsKIAogI2RlZmluZSBTZXJpYWxOZXh0UGFnZShw YWdlKSAoKChwYWdlKSA+PSBTRVJJQUxfTUFYX1BBR0UpID8gMCA6IChwYWdlKSArIDEpCiAKLSNk ZWZpbmUgU2VyaWFsVmFsdWUoc2xvdG5vLCB4aWQpICgqKChTZXJDb21taXRTZXFObyAqKSBcCi0J KFNlcmlhbFNscnVDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArIFwKKyNkZWZpbmUg U2VyaWFsVmFsdWUoYnVmZmVyLCB4aWQpICgqKChTZXJDb21taXRTZXFObyAqKSBcCisJKFBhZ2VH ZXRDb250ZW50cyhCdWZmZXJHZXRQYWdlKGJ1ZmZlcikpICsgXAogCSgoKCh1aW50MzIpICh4aWQp KSAlIFNFUklBTF9FTlRSSUVTUEVSUEFHRSkgKiBTRVJJQUxfRU5UUllTSVpFKSkpKQogCiAjZGVm aW5lIFNlcmlhbFBhZ2UoeGlkKQkoKCh1aW50MzIpICh4aWQpKSAvIFNFUklBTF9FTlRSSUVTUEVS UEFHRSkKIAorCiB0eXBlZGVmIHN0cnVjdCBTZXJpYWxDb250cm9sRGF0YQogewogCWludAkJCWhl YWRQYWdlOwkJLyogbmV3ZXN0IGluaXRpYWxpemVkIHBhZ2UgKi8KQEAgLTg0OSwxMCArODQyLDE0 IEBAIFNlcmlhbFBhZ2VQcmVjZWRlc0xvZ2ljYWxseVVuaXRUZXN0cyh2b2lkKQogCSAqIHJlcXVp cmVzIGJ1cm5pbmcgfjJCIFhJRHMgaW4gc2luZ2xlLXVzZXIgbW9kZSwgYSBuZWdsaWdpYmxlCiAJ ICogcG9zc2liaWxpdHkuICBNb3Jlb3ZlciwgaWYgaXQgZG9lcyBoYXBwZW4sIHRoZSBjb25zZXF1 ZW5jZSB3b3VsZCBiZQogCSAqIG1pbGQsIG5hbWVseSBhIG5ldyB0cmFuc2FjdGlvbiBmYWlsaW5n IGluIFNpbXBsZUxydVJlYWRQYWdlKCkuCisJICogCisJICogTk9URTogIEFmdGVyIGFkZGluZyBw YWdlIGhlYWRlcnMsIHRoZSBkZWZlY3QgYWZmZWN0cyB0d28gcGFnZXMuCisJICogV2Ugbm93IGFz c2VydCBjb3JyZWN0IHRyZWF0bWVudCBvZiBpdHMgc2Vjb25kIHRvIHByaW9yIHBhZ2UuCisJICog CiAJICovCiAJaGVhZFBhZ2UgPSBvbGRlc3RQYWdlOwogCXRhcmdldFBhZ2UgPSBuZXdlc3RQYWdl OwotCUFzc2VydChTZXJpYWxQYWdlUHJlY2VkZXNMb2dpY2FsbHkoaGVhZFBhZ2UsIHRhcmdldFBh Z2UgLSAxKSk7CisJQXNzZXJ0KFNlcmlhbFBhZ2VQcmVjZWRlc0xvZ2ljYWxseShoZWFkUGFnZSwg dGFyZ2V0UGFnZSAtIDIpKTsKICNpZiAwCiAJQXNzZXJ0KFNlcmlhbFBhZ2VQcmVjZWRlc0xvZ2lj YWxseShoZWFkUGFnZSwgdGFyZ2V0UGFnZSkpOwogI2VuZGlmCkBAIC04NjcsMTcgKzg2NCwxMCBA QCBTZXJpYWxJbml0KHZvaWQpCiB7CiAJYm9vbAkJZm91bmQ7CiAKLQkvKgotCSAqIFNldCB1cCBT TFJVIG1hbmFnZW1lbnQgb2YgdGhlIHBnX3NlcmlhbCBkYXRhLgotCSAqLwotCVNlcmlhbFNscnVD dGwtPlBhZ2VQcmVjZWRlcyA9IFNlcmlhbFBhZ2VQcmVjZWRlc0xvZ2ljYWxseTsKLQlTaW1wbGVM cnVJbml0KFNlcmlhbFNscnVDdGwsICJTZXJpYWwiLAotCQkJCSAgTlVNX1NFUklBTF9CVUZGRVJT LCAwLCBTZXJpYWxTTFJVTG9jaywgInBnX3NlcmlhbCIsCi0JCQkJICBMV1RSQU5DSEVfU0VSSUFM X0JVRkZFUiwgU1lOQ19IQU5ETEVSX05PTkUpOwogI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcK IAlTZXJpYWxQYWdlUHJlY2VkZXNMb2dpY2FsbHlVbml0VGVzdHMoKTsKICNlbmRpZgotCVNscnVQ YWdlUHJlY2VkZXNVbml0VGVzdHMoU2VyaWFsU2xydUN0bCwgU0VSSUFMX0VOVFJJRVNQRVJQQUdF KTsKKwlTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKFNlcmlhbFBhZ2VQcmVjZWRlc0xvZ2ljYWxs eSwgU0VSSUFMX0VOVFJJRVNQRVJQQUdFKTsKIAogCS8qCiAJICogQ3JlYXRlIG9yIGF0dGFjaCB0 byB0aGUgU2VyaWFsQ29udHJvbCBzdHJ1Y3R1cmUuCkBAIC05MDcsOSArODk3LDkgQEAgU2VyaWFs QWRkKFRyYW5zYWN0aW9uSWQgeGlkLCBTZXJDb21taXRTZXFObyBtaW5Db25mbGljdENvbW1pdFNl cU5vKQogewogCVRyYW5zYWN0aW9uSWQgdGFpbFhpZDsKIAlpbnQJCQl0YXJnZXRQYWdlOwotCWlu dAkJCXNsb3RubzsKIAlpbnQJCQlmaXJzdFplcm9QYWdlOwogCWJvb2wJCWlzTmV3UGFnZTsKKwlC dWZmZXIJCWJ1ZmZlcjsKIAogCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZCh4aWQpKTsKIApA QCAtOTU0LDE2ICs5NDQsMjMgQEAgU2VyaWFsQWRkKFRyYW5zYWN0aW9uSWQgeGlkLCBTZXJDb21t aXRTZXFObyBtaW5Db25mbGljdENvbW1pdFNlcU5vKQogCQkvKiBJbml0aWFsaXplIGludGVydmVu aW5nIHBhZ2VzLiAqLwogCQl3aGlsZSAoZmlyc3RaZXJvUGFnZSAhPSB0YXJnZXRQYWdlKQogCQl7 Ci0JCQkodm9pZCkgU2ltcGxlTHJ1WmVyb1BhZ2UoU2VyaWFsU2xydUN0bCwgZmlyc3RaZXJvUGFn ZSk7CisJCQlidWZmZXIgPSBaZXJvU2xydUJ1ZmZlcihTTFJVX1NFUklBTF9JRCwgZmlyc3RaZXJv UGFnZSk7CisJCQlQYWdlU2V0SGVhZGVyRGF0YU5vblJlbChCdWZmZXJHZXRQYWdlKGJ1ZmZlciks IGZpcnN0WmVyb1BhZ2UsIEludmFsaWRYTG9nUmVjUHRyLCBCTENLU1osIFBHX01FVEFQQUdFX0xB WU9VVF9WRVJTSU9OKTsKKwkJCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOworCQkJVW5sb2NrUmVs ZWFzZUJ1ZmZlcihidWZmZXIpOwogCQkJZmlyc3RaZXJvUGFnZSA9IFNlcmlhbE5leHRQYWdlKGZp cnN0WmVyb1BhZ2UpOwogCQl9Ci0JCXNsb3RubyA9IFNpbXBsZUxydVplcm9QYWdlKFNlcmlhbFNs cnVDdGwsIHRhcmdldFBhZ2UpOworCQlidWZmZXIgPSBaZXJvU2xydUJ1ZmZlcihTTFJVX1NFUklB TF9JRCwgdGFyZ2V0UGFnZSk7CiAJfQogCWVsc2UKLQkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBh Z2UoU2VyaWFsU2xydUN0bCwgdGFyZ2V0UGFnZSwgdHJ1ZSwgeGlkKTsKKwl7CisJCWJ1ZmZlciA9 IFJlYWRTbHJ1QnVmZmVyKFNMUlVfU0VSSUFMX0lELCB0YXJnZXRQYWdlLCBSQk1fTk9STUFMKTsK KwkJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7CisJfQogCi0JU2Vy aWFsVmFsdWUoc2xvdG5vLCB4aWQpID0gbWluQ29uZmxpY3RDb21taXRTZXFObzsKLQlTZXJpYWxT bHJ1Q3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSA9IHRydWU7CisJU2VyaWFsVmFsdWUo YnVmZmVyLCB4aWQpID0gbWluQ29uZmxpY3RDb21taXRTZXFObzsKKwlNYXJrQnVmZmVyRGlydHko YnVmZmVyKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiAKIAlMV0xvY2tSZWxlYXNl KFNlcmlhbFNMUlVMb2NrKTsKIH0KQEAgLTk3OSw3ICs5NzYsNyBAQCBTZXJpYWxHZXRNaW5Db25m bGljdENvbW1pdFNlcU5vKFRyYW5zYWN0aW9uSWQgeGlkKQogCVRyYW5zYWN0aW9uSWQgaGVhZFhp ZDsKIAlUcmFuc2FjdGlvbklkIHRhaWxYaWQ7CiAJU2VyQ29tbWl0U2VxTm8gdmFsOwotCWludAkJ CXNsb3RubzsKKwlCdWZmZXIJCWJ1ZmZlcjsKIAogCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxp ZCh4aWQpKTsKIApAQCAtMTAwMSw5ICs5OTgsOSBAQCBTZXJpYWxHZXRNaW5Db25mbGljdENvbW1p dFNlcU5vKFRyYW5zYWN0aW9uSWQgeGlkKQogCSAqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gbXVz dCBiZSBjYWxsZWQgd2l0aG91dCBob2xkaW5nIFNlcmlhbFNMUlVMb2NrLAogCSAqIGJ1dCB3aWxs IHJldHVybiB3aXRoIHRoYXQgbG9jayBoZWxkLCB3aGljaCBtdXN0IHRoZW4gYmUgcmVsZWFzZWQu CiAJICovCi0Jc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkoU2VyaWFsU2xydUN0 bCwKLQkJCQkJCQkJCQlTZXJpYWxQYWdlKHhpZCksIHhpZCk7Ci0JdmFsID0gU2VyaWFsVmFsdWUo c2xvdG5vLCB4aWQpOworCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfU0VSSUFMX0lELCBT ZXJpYWxQYWdlKHhpZCksIFJCTV9OT1JNQUwpOworCXZhbCA9IFNlcmlhbFZhbHVlKGJ1ZmZlciwg eGlkKTsKKwlSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiAJTFdMb2NrUmVsZWFzZShTZXJpYWxTTFJV TG9jayk7CiAJcmV0dXJuIHZhbDsKIH0KQEAgLTExMjIsMTkgKzExMTksNyBAQCBDaGVja1BvaW50 UHJlZGljYXRlKHZvaWQpCiAJTFdMb2NrUmVsZWFzZShTZXJpYWxTTFJVTG9jayk7CiAKIAkvKiBU cnVuY2F0ZSBhd2F5IHBhZ2VzIHRoYXQgYXJlIG5vIGxvbmdlciByZXF1aXJlZCAqLwotCVNpbXBs ZUxydVRydW5jYXRlKFNlcmlhbFNscnVDdGwsIHRhaWxQYWdlKTsKLQotCS8qCi0JICogV3JpdGUg ZGlydHkgU0xSVSBwYWdlcyB0byBkaXNrCi0JICoKLQkgKiBUaGlzIGlzIG5vdCBhY3R1YWxseSBu ZWNlc3NhcnkgZnJvbSBhIGNvcnJlY3RuZXNzIHBvaW50IG9mIHZpZXcuIFdlIGRvCi0JICogaXQg bWVyZWx5IGFzIGEgZGVidWdnaW5nIGFpZC4KLQkgKgotCSAqIFdlJ3JlIGRvaW5nIHRoaXMgYWZ0 ZXIgdGhlIHRydW5jYXRpb24gdG8gYXZvaWQgd3JpdGluZyBwYWdlcyByaWdodAotCSAqIGJlZm9y ZSBkZWxldGluZyB0aGUgZmlsZSBpbiB3aGljaCB0aGV5IHNpdCwgd2hpY2ggd291bGQgYmUgY29t cGxldGVseQotCSAqIHBvaW50bGVzcy4KLQkgKi8KLQlTaW1wbGVMcnVXcml0ZUFsbChTZXJpYWxT bHJ1Q3RsLCB0cnVlKTsKKwlTaW1wbGVMcnVUcnVuY2F0ZShTTFJVX1NFUklBTF9JRCwgU2VyaWFs UGFnZVByZWNlZGVzTG9naWNhbGx5LCB0YWlsUGFnZSk7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ki8KQEAgLTEzOTYsNyArMTM4MSw2IEBAIFByZWRpY2F0ZUxvY2tTaG1lbVNpemUodm9pZCkKIAog CS8qIFNoYXJlZCBtZW1vcnkgc3RydWN0dXJlcyBmb3IgU0xSVSB0cmFja2luZyBvZiBvbGQgY29t bWl0dGVkIHhpZHMuICovCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIHNpemVvZihTZXJpYWxDb250 cm9sRGF0YSkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTaW1wbGVMcnVTaG1lbVNpemUoTlVN X1NFUklBTF9CVUZGRVJTLCAwKSk7CiAKIAlyZXR1cm4gc2l6ZTsKIH0KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvcGFnZS9idWZwYWdlLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL3Bh Z2UvYnVmcGFnZS5jCmluZGV4IDhiNjE3YzdlNzlkLi44NTdjY2U5YTI4YyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdlL2J1ZnBhZ2UuYworKysgYi9zcmMvYmFja2VuZC9zdG9y YWdlL3BhZ2UvYnVmcGFnZS5jCkBAIC01OSw2ICs1OSwyNyBAQCBQYWdlSW5pdChQYWdlIHBhZ2Us IFNpemUgcGFnZVNpemUsIFNpemUgc3BlY2lhbFNpemUpCiAJLyogcC0+cGRfcHJ1bmVfeGlkID0g SW52YWxpZFRyYW5zYWN0aW9uSWQ7CQlkb25lIGJ5IGFib3ZlIE1lbVNldCAqLwogfQogCit2b2lk CitQYWdlSW5pdFNMUlUoUGFnZSBwYWdlLCBTaXplIHBhZ2VTaXplLCBTaXplIHNwZWNpYWxTaXpl KQoreworCVBhZ2VIZWFkZXIJcCA9IChQYWdlSGVhZGVyKSBwYWdlOworCisJc3BlY2lhbFNpemUg PSBNQVhBTElHTihzcGVjaWFsU2l6ZSk7CisKKwlBc3NlcnQocGFnZVNpemUgPT0gQkxDS1NaKTsK KwlBc3NlcnQocGFnZVNpemUgPiBzcGVjaWFsU2l6ZSArIFNpemVPZlBhZ2VIZWFkZXJEYXRhKTsK KworCS8qIE1ha2Ugc3VyZSBhbGwgZmllbGRzIG9mIHBhZ2UgYXJlIHplcm8sIGFzIHdlbGwgYXMg dW51c2VkIHNwYWNlICovCisJTWVtU2V0KHAsIDAsIHBhZ2VTaXplKTsKKworCXAtPnBkX2ZsYWdz ID0gMDsKKwlwLT5wZF9sb3dlciA9IFNpemVPZlBhZ2VIZWFkZXJEYXRhOworCXAtPnBkX3VwcGVy ID0gcGFnZVNpemUgLSBzcGVjaWFsU2l6ZTsKKwlwLT5wZF9zcGVjaWFsID0gcGFnZVNpemUgLSBz cGVjaWFsU2l6ZTsKKwlQYWdlU2V0UGFnZVNpemVBbmRWZXJzaW9uKHBhZ2UsIHBhZ2VTaXplLCBQ R19NRVRBUEFHRV9MQVlPVVRfVkVSU0lPTik7CisJLyogcC0+cGRfcHJ1bmVfeGlkID0gSW52YWxp ZFRyYW5zYWN0aW9uSWQ7CQlkb25lIGJ5IGFib3ZlIE1lbVNldCAqLworfQorCiAKIC8qCiAgKiBQ YWdlSXNWZXJpZmllZEV4dGVuZGVkCkBAIC0xMDMsNyArMTI0LDcgQEAgUGFnZUlzVmVyaWZpZWRF eHRlbmRlZChQYWdlIHBhZ2UsIEJsb2NrTnVtYmVyIGJsa25vLCBpbnQgZmxhZ3MpCiAJCWlmIChE YXRhQ2hlY2tzdW1zRW5hYmxlZCgpKQogCQl7CiAJCQljaGVja3N1bSA9IHBnX2NoZWNrc3VtX3Bh Z2UoKGNoYXIgKikgcGFnZSwgYmxrbm8pOwotCisJCQkKIAkJCWlmIChjaGVja3N1bSAhPSBwLT5w ZF9jaGVja3N1bSkKIAkJCQljaGVja3N1bV9mYWlsdXJlID0gdHJ1ZTsKIAkJfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL21kLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL3Nt Z3IvbWQuYwppbmRleCAxNGI2ZmEwZmQ5MC4uYjlhNDFjYjk0MjcgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3N0b3JhZ2Uvc21nci9tZC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc21nci9t ZC5jCkBAIC02NiwxMCArNjYsMTAgQEAKICAqCW91dCB0byBhbiB1bmxpbmtlZCBvbGQgY29weSBv ZiBhIHNlZ21lbnQgZmlsZSB0aGF0IHdpbGwgZXZlbnR1YWxseQogICoJZGlzYXBwZWFyLgogICoK LSAqCUZpbGUgZGVzY3JpcHRvcnMgYXJlIHN0b3JlZCBpbiB0aGUgcGVyLWZvcmsgbWRfc2VnX2Zk cyBhcnJheXMgaW5zaWRlCi0gKglTTWdyUmVsYXRpb24uIFRoZSBsZW5ndGggb2YgdGhlc2UgYXJy YXlzIGlzIHN0b3JlZCBpbiBtZF9udW1fb3Blbl9zZWdzLgotICoJTm90ZSB0aGF0IGEgZm9yaydz IG1kX251bV9vcGVuX3NlZ3MgaGF2aW5nIGEgc3BlY2lmaWMgdmFsdWUgZG9lcyBub3QKLSAqCW5l Y2Vzc2FyaWx5IG1lYW4gdGhlIHJlbGF0aW9uIGRvZXNuJ3QgaGF2ZSBhZGRpdGlvbmFsIHNlZ21l bnRzOyB3ZSBtYXkKKyAqCUZpbGUgZGVzY3JpcHRvcnMgYXJlIHN0b3JlZCBpbiB0aGUgbWRfc2Vn X2ZkcyBhcnJheSBpbnNpZGUKKyAqCVNNZ3JGaWxlRGF0YS4gVGhlIGxlbmd0aCBvZiB0aGUgYXJy YXkgaXMgc3RvcmVkIGluIG1kX251bV9vcGVuX3NlZ3MuCisgKglOb3RlIHRoYXQgbWRfbnVtX29w ZW5fc2VncyBoYXZpbmcgYSBzcGVjaWZpYyB2YWx1ZSBkb2VzIG5vdAorICoJbmVjZXNzYXJpbHkg bWVhbiB0aGUgZmlsZSBkb2Vzbid0IGhhdmUgYWRkaXRpb25hbCBzZWdtZW50czsgd2UgbWF5CiAg KglqdXN0IG5vdCBoYXZlIG9wZW5lZCB0aGUgbmV4dCBzZWdtZW50IHlldC4gIChXZSBjb3VsZCBu b3QgaGF2ZSAiYWxsCiAgKglzZWdtZW50cyBhcmUgaW4gdGhlIGFycmF5IiBhcyBhbiBpbnZhcmlh bnQgYW55d2F5LCBzaW5jZSBhbm90aGVyIGJhY2tlbmQKICAqCWNvdWxkIGV4dGVuZCB0aGUgcmVs YXRpb24gd2hpbGUgd2UgYXJlbid0IGxvb2tpbmcuKSAgV2UgZG8gbm90IGhhdmUKQEAgLTEyMSwy NiArMTIxLDE4IEBAIHN0YXRpYyBNZW1vcnlDb250ZXh0IE1kQ3h0OwkJLyogY29udGV4dCBmb3Ig YWxsIE1kZmRWZWMgb2JqZWN0cyAqLwogCiAKIC8qIGxvY2FsIHJvdXRpbmVzICovCi1zdGF0aWMg dm9pZCBtZHVubGlua2ZvcmsoUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yLCBGb3JrTnVt YmVyIGZvcmtudW0sCi0JCQkJCQkgYm9vbCBpc1JlZG8pOwotc3RhdGljIE1kZmRWZWMgKm1kb3Bl bmZvcmsoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgaW50IGJlaGF2aW9y KTsKLXN0YXRpYyB2b2lkIHJlZ2lzdGVyX2RpcnR5X3NlZ21lbnQoU01nclJlbGF0aW9uIHJlbG4s IEZvcmtOdW1iZXIgZm9ya251bSwKLQkJCQkJCQkJICAgTWRmZFZlYyAqc2VnKTsKLXN0YXRpYyB2 b2lkIHJlZ2lzdGVyX3VubGlua19zZWdtZW50KFJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9jYXRv ciwgRm9ya051bWJlciBmb3JrbnVtLAotCQkJCQkJCQkJQmxvY2tOdW1iZXIgc2Vnbm8pOwotc3Rh dGljIHZvaWQgcmVnaXN0ZXJfZm9yZ2V0X3JlcXVlc3QoUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJs b2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sCi0JCQkJCQkJCQlCbG9ja051bWJlciBzZWdubyk7 Ci1zdGF0aWMgdm9pZCBfZmR2ZWNfcmVzaXplKFNNZ3JSZWxhdGlvbiByZWxuLAotCQkJCQkJICBG b3JrTnVtYmVyIGZvcmtudW0sCi0JCQkJCQkgIGludCBuc2VnKTsKLXN0YXRpYyBjaGFyICpfbWRm ZF9zZWdwYXRoKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCi0JCQkJCQkg ICBCbG9ja051bWJlciBzZWdubyk7Ci1zdGF0aWMgTWRmZFZlYyAqX21kZmRfb3BlbnNlZyhTTWdy UmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAorc3RhdGljIHZvaWQgbWR1bmxpbmtm b3JrKFNNZ3JGaWxlTG9jYXRvciBzbG9jYXRvciwgYm9vbCBpc1JlZG8pOworc3RhdGljIE1kZmRW ZWMgKm1kb3BlbmZvcmsoU01nckZpbGVIYW5kbGUgc2ZpbGUsIGludCBiZWhhdmlvcik7CitzdGF0 aWMgdm9pZCByZWdpc3Rlcl9kaXJ0eV9zZWdtZW50KFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBNZGZk VmVjICpzZWcpOworc3RhdGljIHZvaWQgcmVnaXN0ZXJfdW5saW5rX3NlZ21lbnQoU01nckZpbGVM b2NhdG9yIHNsb2NhdG9yLCBCbG9ja051bWJlciBzZWdubyk7CitzdGF0aWMgdm9pZCByZWdpc3Rl cl9mb3JnZXRfcmVxdWVzdChTTWdyRmlsZUxvY2F0b3Igc2xvY2F0b3IsIEJsb2NrTnVtYmVyIHNl Z25vKTsKK3N0YXRpYyB2b2lkIF9mZHZlY19yZXNpemUoU01nckZpbGVIYW5kbGUgc2ZpbGUsIGlu dCBuc2VnKTsKK3N0YXRpYyBjaGFyICpfbWRmZF9zZWdwYXRoKFNNZ3JGaWxlSGFuZGxlIHNmaWxl LCBCbG9ja051bWJlciBzZWdubyk7CitzdGF0aWMgTWRmZFZlYyAqX21kZmRfb3BlbnNlZyhTTWdy RmlsZUhhbmRsZSBzZmlsZSwKIAkJCQkJCQkgIEJsb2NrTnVtYmVyIHNlZ25vLCBpbnQgb2ZsYWdz KTsKLXN0YXRpYyBNZGZkVmVjICpfbWRmZF9nZXRzZWcoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtO dW1iZXIgZm9ya251bSwKK3N0YXRpYyBNZGZkVmVjICpfbWRmZF9nZXRzZWcoU01nckZpbGVIYW5k bGUgc2ZpbGUsCiAJCQkJCQkJIEJsb2NrTnVtYmVyIGJsa25vLCBib29sIHNraXBGc3luYywgaW50 IGJlaGF2aW9yKTsKLXN0YXRpYyBCbG9ja051bWJlciBfbWRuYmxvY2tzKFNNZ3JSZWxhdGlvbiBy ZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCi0JCQkJCQkJICBNZGZkVmVjICpzZWcpOworc3RhdGlj IEJsb2NrTnVtYmVyIF9tZG5ibG9ja3MoU01nckZpbGVIYW5kbGUgc2ZpbGUsIE1kZmRWZWMgKnNl Zyk7CiAKIAogLyoKQEAgLTE2MCw3ICsxNTIsNyBAQCBtZGluaXQodm9pZCkKICAqIE5vdGU6IHRo aXMgd2lsbCByZXR1cm4gdHJ1ZSBmb3IgbGluZ2VyaW5nIGZpbGVzLCB3aXRoIHBlbmRpbmcgZGVs ZXRpb25zCiAgKi8KIGJvb2wKLW1kZXhpc3RzKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVy IGZvcmtudW0pCittZGV4aXN0cyhTTWdyRmlsZUhhbmRsZSBzZmlsZSkKIHsKIAkvKgogCSAqIENs b3NlIGl0IGZpcnN0LCB0byBlbnN1cmUgdGhhdCB3ZSBub3RpY2UgaWYgdGhlIGZvcmsgaGFzIGJl ZW4gdW5saW5rZWQKQEAgLTE2OCw5ICsxNjAsOSBAQCBtZGV4aXN0cyhTTWdyUmVsYXRpb24gcmVs biwgRm9ya051bWJlciBmb3JrbnVtKQogCSAqIHdoaWNoIGFscmVhZHkgY2xvc2VzIHJlbGF0aW9u cyB3aGVuIGRyb3BwaW5nIHRoZW0uCiAJICovCiAJaWYgKCFJblJlY292ZXJ5KQotCQltZGNsb3Nl KHJlbG4sIGZvcmtudW0pOworCQltZGNsb3NlKHNmaWxlKTsKIAotCXJldHVybiAobWRvcGVuZm9y ayhyZWxuLCBmb3JrbnVtLCBFWFRFTlNJT05fUkVUVVJOX05VTEwpICE9IE5VTEwpOworCXJldHVy biAobWRvcGVuZm9yayhzZmlsZSwgRVhURU5TSU9OX1JFVFVSTl9OVUxMKSAhPSBOVUxMKTsKIH0K IAogLyoKQEAgLTE3OSwxNiArMTcxLDE2IEBAIG1kZXhpc3RzKFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0pCiAgKiBJZiBpc1JlZG8gaXMgdHJ1ZSwgaXQncyBva2F5IGZvciB0 aGUgcmVsYXRpb24gdG8gZXhpc3QgYWxyZWFkeS4KICAqLwogdm9pZAotbWRjcmVhdGUoU01nclJl bGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgYm9vbCBpc1JlZG8pCittZGNyZWF0ZShT TWdyRmlsZUhhbmRsZSBzZmlsZSwgYm9vbCBpc1JlZG8pCiB7CiAJTWRmZFZlYyAgICAqbWRmZDsK IAljaGFyCSAgICpwYXRoOwogCUZpbGUJCWZkOwogCi0JaWYgKGlzUmVkbyAmJiByZWxuLT5tZF9u dW1fb3Blbl9zZWdzW2ZvcmtudW1dID4gMCkKKwlpZiAoaXNSZWRvICYmIHNmaWxlLT5tZF9udW1f b3Blbl9zZWdzID4gMCkKIAkJcmV0dXJuOwkJCQkJLyogY3JlYXRlZCBhbmQgb3BlbmVkIGFscmVh ZHkuLi4gKi8KIAotCUFzc2VydChyZWxuLT5tZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1dID09IDAp OworCUFzc2VydChzZmlsZS0+bWRfbnVtX29wZW5fc2VncyA9PSAwKTsKIAogCS8qCiAJICogV2Ug bWF5IGJlIHVzaW5nIHRoZSB0YXJnZXQgdGFibGUgc3BhY2UgZm9yIHRoZSBmaXJzdCB0aW1lIGlu IHRoaXMKQEAgLTE5OSwxMSArMTkxLDE0IEBAIG1kY3JlYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0sIGJvb2wgaXNSZWRvKQogCSAqIHNob3VsZCBiZSBoZXJlIGFuZCBu b3QgaW4gY29tbWFuZHMvdGFibGVzcGFjZS5jPyAgQnV0IHRoYXQgd291bGQgaW1wbHkKIAkgKiBp bXBvcnRpbmcgYSBsb3Qgb2Ygc3R1ZmYgdGhhdCBzbWdyLmMgb3VnaHRuJ3Qga25vdywgZWl0aGVy LgogCSAqLwotCVRhYmxlc3BhY2VDcmVhdGVEYnNwYWNlKHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9j YXRvci5zcGNPaWQsCi0JCQkJCQkJcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAot CQkJCQkJCWlzUmVkbyk7CisJaWYgKHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5zcGNPaWQg IT0gU0xSVV9TUENfT0lEKQorCXsKKwkJVGFibGVzcGFjZUNyZWF0ZURic3BhY2Uoc2ZpbGUtPnNt Z3JfbG9jYXRvci5sb2NhdG9yLnNwY09pZCwKKwkJCQkJCQkJc2ZpbGUtPnNtZ3JfbG9jYXRvci5s b2NhdG9yLmRiT2lkLAorCQkJCQkJCQlpc1JlZG8pOworCX0KIAotCXBhdGggPSByZWxwYXRoKHJl bG4tPnNtZ3JfcmxvY2F0b3IsIGZvcmtudW0pOworCXBhdGggPSBzbWdyZmlsZXBhdGgoc2ZpbGUt PnNtZ3JfbG9jYXRvcik7CiAKIAlmZCA9IFBhdGhOYW1lT3BlbkZpbGUocGF0aCwgT19SRFdSIHwg T19DUkVBVCB8IE9fRVhDTCB8IFBHX0JJTkFSWSk7CiAKQEAgLTIyNSw4ICsyMjAsOCBAQCBtZGNy ZWF0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBib29sIGlzUmVkbykK IAogCXBmcmVlKHBhdGgpOwogCi0JX2ZkdmVjX3Jlc2l6ZShyZWxuLCBmb3JrbnVtLCAxKTsKLQlt ZGZkID0gJnJlbG4tPm1kX3NlZ19mZHNbZm9ya251bV1bMF07CisJX2ZkdmVjX3Jlc2l6ZShzZmls ZSwgMSk7CisJbWRmZCA9ICZzZmlsZS0+bWRfc2VnX2Zkc1swXTsKIAltZGZkLT5tZGZkX3ZmZCA9 IGZkOwogCW1kZmQtPm1kZmRfc2Vnbm8gPSAwOwogfQpAQCAtMjkzLDE2ICsyODgsOSBAQCBtZGNy ZWF0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBib29sIGlzUmVkbykK ICAqIHdlIGFyZSB1c3VhbGx5IG5vdCBpbiBhIHRyYW5zYWN0aW9uIGFueW1vcmUgd2hlbiB0aGlz IGlzIGNhbGxlZC4KICAqLwogdm9pZAotbWR1bmxpbmsoUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJs b2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sIGJvb2wgaXNSZWRvKQorbWR1bmxpbmsoU01nckZp bGVMb2NhdG9yIHNsb2NhdG9yLCBib29sIGlzUmVkbykKIHsKLQkvKiBOb3cgZG8gdGhlIHBlci1m b3JrIHdvcmsgKi8KLQlpZiAoZm9ya251bSA9PSBJbnZhbGlkRm9ya051bWJlcikKLQl7Ci0JCWZv ciAoZm9ya251bSA9IDA7IGZvcmtudW0gPD0gTUFYX0ZPUktOVU07IGZvcmtudW0rKykKLQkJCW1k dW5saW5rZm9yayhybG9jYXRvciwgZm9ya251bSwgaXNSZWRvKTsKLQl9Ci0JZWxzZQotCQltZHVu bGlua2ZvcmsocmxvY2F0b3IsIGZvcmtudW0sIGlzUmVkbyk7CisJbWR1bmxpbmtmb3JrKHNsb2Nh dG9yLCBpc1JlZG8pOwogfQogCiAvKgpAQCAtMzMwLDI5ICszMTgsMjkgQEAgZG9fdHJ1bmNhdGUo Y29uc3QgY2hhciAqcGF0aCkKIH0KIAogc3RhdGljIHZvaWQKLW1kdW5saW5rZm9yayhSZWxGaWxl TG9jYXRvckJhY2tlbmQgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya251bSwgYm9vbCBpc1JlZG8p CittZHVubGlua2ZvcmsoU01nckZpbGVMb2NhdG9yIHNsb2NhdG9yLCBib29sIGlzUmVkbykKIHsK IAljaGFyCSAgICpwYXRoOwogCWludAkJCXJldDsKIAlpbnQJCQlzYXZlX2Vycm5vOwogCi0JcGF0 aCA9IHJlbHBhdGgocmxvY2F0b3IsIGZvcmtudW0pOworCXBhdGggPSBzbWdyZmlsZXBhdGgoc2xv Y2F0b3IpOwogCiAJLyoKIAkgKiBUcnVuY2F0ZSBhbmQgdGhlbiB1bmxpbmsgdGhlIGZpcnN0IHNl Z21lbnQsIG9yIGp1c3QgcmVnaXN0ZXIgYSByZXF1ZXN0CiAJICogdG8gdW5saW5rIGl0IGxhdGVy LCBhcyBkZXNjcmliZWQgaW4gdGhlIGNvbW1lbnRzIGZvciBtZHVubGluaygpLgogCSAqLwotCWlm IChpc1JlZG8gfHwgSXNCaW5hcnlVcGdyYWRlIHx8IGZvcmtudW0gIT0gTUFJTl9GT1JLTlVNIHx8 Ci0JCVJlbEZpbGVMb2NhdG9yQmFja2VuZElzVGVtcChybG9jYXRvcikpCisJaWYgKGlzUmVkbyB8 fCBJc0JpbmFyeVVwZ3JhZGUgfHwgc2xvY2F0b3IuZm9ya251bSAhPSBNQUlOX0ZPUktOVU0gfHwK KwkJU01nckZpbGVMb2NhdG9ySXNUZW1wKHNsb2NhdG9yKSkKIAl7Ci0JCWlmICghUmVsRmlsZUxv Y2F0b3JCYWNrZW5kSXNUZW1wKHJsb2NhdG9yKSkKKwkJaWYgKCFTTWdyRmlsZUxvY2F0b3JJc1Rl bXAoc2xvY2F0b3IpKQogCQl7CiAJCQkvKiBQcmV2ZW50IG90aGVyIGJhY2tlbmRzJyBmZHMgZnJv bSBob2xkaW5nIG9uIHRvIHRoZSBkaXNrIHNwYWNlICovCiAJCQlyZXQgPSBkb190cnVuY2F0ZShw YXRoKTsKIAogCQkJLyogRm9yZ2V0IGFueSBwZW5kaW5nIHN5bmMgcmVxdWVzdHMgZm9yIHRoZSBm aXJzdCBzZWdtZW50ICovCiAJCQlzYXZlX2Vycm5vID0gZXJybm87Ci0JCQlyZWdpc3Rlcl9mb3Jn ZXRfcmVxdWVzdChybG9jYXRvciwgZm9ya251bSwgMCAvKiBmaXJzdCBzZWcgKi8gKTsKKwkJCXJl Z2lzdGVyX2ZvcmdldF9yZXF1ZXN0KHNsb2NhdG9yLCAwIC8qIGZpcnN0IHNlZyAqLyApOwogCQkJ ZXJybm8gPSBzYXZlX2Vycm5vOwogCQl9CiAJCWVsc2UKQEAgLTM3OSw3ICszNjcsNyBAQCBtZHVu bGlua2ZvcmsoUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtu dW0sIGJvb2wgaXNSZWRvKQogCiAJCS8qIFJlZ2lzdGVyIHJlcXVlc3QgdG8gdW5saW5rIGZpcnN0 IHNlZ21lbnQgbGF0ZXIgKi8KIAkJc2F2ZV9lcnJubyA9IGVycm5vOwotCQlyZWdpc3Rlcl91bmxp bmtfc2VnbWVudChybG9jYXRvciwgZm9ya251bSwgMCAvKiBmaXJzdCBzZWcgKi8gKTsKKwkJcmVn aXN0ZXJfdW5saW5rX3NlZ21lbnQoc2xvY2F0b3IsIDAgLyogZmlyc3Qgc2VnICovICk7CiAJCWVy cm5vID0gc2F2ZV9lcnJubzsKIAl9CiAKQEAgLTQwNCw3ICszOTIsNyBAQCBtZHVubGlua2Zvcmso UmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sIGJvb2wg aXNSZWRvKQogCQl7CiAJCQlzcHJpbnRmKHNlZ3BhdGgsICIlcy4ldSIsIHBhdGgsIHNlZ25vKTsK IAotCQkJaWYgKCFSZWxGaWxlTG9jYXRvckJhY2tlbmRJc1RlbXAocmxvY2F0b3IpKQorCQkJaWYg KCFTTWdyRmlsZUxvY2F0b3JJc1RlbXAoc2xvY2F0b3IpKQogCQkJewogCQkJCS8qCiAJCQkJICog UHJldmVudCBvdGhlciBiYWNrZW5kcycgZmRzIGZyb20gaG9sZGluZyBvbiB0byB0aGUgZGlzawpA QCAtNDE3LDcgKzQwNSw3IEBAIG1kdW5saW5rZm9yayhSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxv Y2F0b3IsIEZvcmtOdW1iZXIgZm9ya251bSwgYm9vbCBpc1JlZG8pCiAJCQkJICogRm9yZ2V0IGFu eSBwZW5kaW5nIHN5bmMgcmVxdWVzdHMgZm9yIHRoaXMgc2VnbWVudCBiZWZvcmUgd2UKIAkJCQkg KiB0cnkgdG8gdW5saW5rLgogCQkJCSAqLwotCQkJCXJlZ2lzdGVyX2ZvcmdldF9yZXF1ZXN0KHJs b2NhdG9yLCBmb3JrbnVtLCBzZWdubyk7CisJCQkJcmVnaXN0ZXJfZm9yZ2V0X3JlcXVlc3Qoc2xv Y2F0b3IsIHNlZ25vKTsKIAkJCX0KIAogCQkJaWYgKHVubGluayhzZWdwYXRoKSA8IDApCkBAIC00 NDYsNyArNDM0LDcgQEAgbWR1bmxpbmtmb3JrKFJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9jYXRv ciwgRm9ya051bWJlciBmb3JrbnVtLCBib29sIGlzUmVkbykKICAqCQljYXVzZXMgaW50ZXJ2ZW5p bmcgZmlsZSBzcGFjZSB0byBiZWNvbWUgZmlsbGVkIHdpdGggemVyb2VzLgogICovCiB2b2lkCi1t ZGV4dGVuZChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJl ciBibG9ja251bSwKK21kZXh0ZW5kKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9ja051bWJlciBi bG9ja251bSwKIAkJIGNoYXIgKmJ1ZmZlciwgYm9vbCBza2lwRnN5bmMpCiB7CiAJb2ZmX3QJCXNl ZWtwb3M7CkBAIC00NTUsNyArNDQzLDcgQEAgbWRleHRlbmQoU01nclJlbGF0aW9uIHJlbG4sIEZv cmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAKIAkvKiBUaGlzIGFzc2Vy dCBpcyB0b28gZXhwZW5zaXZlIHRvIGhhdmUgb24gbm9ybWFsbHkgLi4uICovCiAjaWZkZWYgQ0hF Q0tfV1JJVEVfVlNfRVhURU5ECi0JQXNzZXJ0KGJsb2NrbnVtID49IG1kbmJsb2NrcyhyZWxuLCBm b3JrbnVtKSk7CisJQXNzZXJ0KGJsb2NrbnVtID49IG1kbmJsb2NrcyhzZmlsZSkpOwogI2VuZGlm CiAKIAkvKgpAQCAtNDY4LDEwICs0NTYsMTAgQEAgbWRleHRlbmQoU01nclJlbGF0aW9uIHJlbG4s IEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAJCWVyZXBvcnQoRVJS T1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9HUkFNX0xJTUlUX0VYQ0VFREVEKSwKIAkJCQkg ZXJybXNnKCJjYW5ub3QgZXh0ZW5kIGZpbGUgXCIlc1wiIGJleW9uZCAldSBibG9ja3MiLAotCQkJ CQkJcmVscGF0aChyZWxuLT5zbWdyX3Jsb2NhdG9yLCBmb3JrbnVtKSwKKwkJCQkJCXNtZ3JmaWxl cGF0aChzZmlsZS0+c21ncl9sb2NhdG9yKSwKIAkJCQkJCUludmFsaWRCbG9ja051bWJlcikpKTsK IAotCXYgPSBfbWRmZF9nZXRzZWcocmVsbiwgZm9ya251bSwgYmxvY2tudW0sIHNraXBGc3luYywg RVhURU5TSU9OX0NSRUFURSk7CisJdiA9IF9tZGZkX2dldHNlZyhzZmlsZSwgYmxvY2tudW0sIHNr aXBGc3luYywgRVhURU5TSU9OX0NSRUFURSk7CiAKIAlzZWVrcG9zID0gKG9mZl90KSBCTENLU1og KiAoYmxvY2tudW0gJSAoKEJsb2NrTnVtYmVyKSBSRUxTRUdfU0laRSkpOwogCkBAIC00OTQsMTAg KzQ4MiwxMCBAQCBtZGV4dGVuZChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVt LCBCbG9ja051bWJlciBibG9ja251bSwKIAkJCQkgZXJyaGludCgiQ2hlY2sgZnJlZSBkaXNrIHNw YWNlLiIpKSk7CiAJfQogCi0JaWYgKCFza2lwRnN5bmMgJiYgIVNtZ3JJc1RlbXAocmVsbikpCi0J CXJlZ2lzdGVyX2RpcnR5X3NlZ21lbnQocmVsbiwgZm9ya251bSwgdik7CisJaWYgKCFza2lwRnN5 bmMgJiYgIVNtZ3JJc1RlbXAoc2ZpbGUpKQorCQlyZWdpc3Rlcl9kaXJ0eV9zZWdtZW50KHNmaWxl LCB2KTsKIAotCUFzc2VydChfbWRuYmxvY2tzKHJlbG4sIGZvcmtudW0sIHYpIDw9ICgoQmxvY2tO dW1iZXIpIFJFTFNFR19TSVpFKSk7CisJQXNzZXJ0KF9tZG5ibG9ja3Moc2ZpbGUsIHYpIDw9ICgo QmxvY2tOdW1iZXIpIFJFTFNFR19TSVpFKSk7CiB9CiAKIC8qCkBAIC01MTEsMTcgKzQ5OSwxNyBA QCBtZGV4dGVuZChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051 bWJlciBibG9ja251bSwKICAqIGludmVudCBvbmUgb3V0IG9mIHdob2xlIGNsb3RoLgogICovCiBz dGF0aWMgTWRmZFZlYyAqCi1tZG9wZW5mb3JrKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVy IGZvcmtudW0sIGludCBiZWhhdmlvcikKK21kb3BlbmZvcmsoU01nckZpbGVIYW5kbGUgc2ZpbGUs IGludCBiZWhhdmlvcikKIHsKIAlNZGZkVmVjICAgICptZGZkOwogCWNoYXIJICAgKnBhdGg7CiAJ RmlsZQkJZmQ7CiAKIAkvKiBObyB3b3JrIGlmIGFscmVhZHkgb3BlbiAqLwotCWlmIChyZWxuLT5t ZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1dID4gMCkKLQkJcmV0dXJuICZyZWxuLT5tZF9zZWdfZmRz W2ZvcmtudW1dWzBdOworCWlmIChzZmlsZS0+bWRfbnVtX29wZW5fc2VncyA+IDApCisJCXJldHVy biAmc2ZpbGUtPm1kX3NlZ19mZHNbMF07CiAKLQlwYXRoID0gcmVscGF0aChyZWxuLT5zbWdyX3Js b2NhdG9yLCBmb3JrbnVtKTsKKwlwYXRoID0gc21ncmZpbGVwYXRoKHNmaWxlLT5zbWdyX2xvY2F0 b3IpOwogCiAJZmQgPSBQYXRoTmFtZU9wZW5GaWxlKHBhdGgsIE9fUkRXUiB8IFBHX0JJTkFSWSk7 CiAKQEAgLTU0MCwxMiArNTI4LDEyIEBAIG1kb3BlbmZvcmsoU01nclJlbGF0aW9uIHJlbG4sIEZv cmtOdW1iZXIgZm9ya251bSwgaW50IGJlaGF2aW9yKQogCiAJcGZyZWUocGF0aCk7CiAKLQlfZmR2 ZWNfcmVzaXplKHJlbG4sIGZvcmtudW0sIDEpOwotCW1kZmQgPSAmcmVsbi0+bWRfc2VnX2Zkc1tm b3JrbnVtXVswXTsKKwlfZmR2ZWNfcmVzaXplKHNmaWxlLCAxKTsKKwltZGZkID0gJnNmaWxlLT5t ZF9zZWdfZmRzWzBdOwogCW1kZmQtPm1kZmRfdmZkID0gZmQ7CiAJbWRmZC0+bWRmZF9zZWdubyA9 IDA7CiAKLQlBc3NlcnQoX21kbmJsb2NrcyhyZWxuLCBmb3JrbnVtLCBtZGZkKSA8PSAoKEJsb2Nr TnVtYmVyKSBSRUxTRUdfU0laRSkpOworCUFzc2VydChfbWRuYmxvY2tzKHNmaWxlLCBtZGZkKSA8 PSAoKEJsb2NrTnVtYmVyKSBSRUxTRUdfU0laRSkpOwogCiAJcmV0dXJuIG1kZmQ7CiB9CkBAIC01 NTQsMjAgKzU0MiwxOSBAQCBtZG9wZW5mb3JrKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVy IGZvcmtudW0sIGludCBiZWhhdmlvcikKICAqICBtZG9wZW4oKSAtLSBJbml0aWFsaXplIG5ld2x5 LW9wZW5lZCByZWxhdGlvbi4KICAqLwogdm9pZAotbWRvcGVuKFNNZ3JSZWxhdGlvbiByZWxuKQor bWRvcGVuKFNNZ3JGaWxlSGFuZGxlIHNmaWxlKQogewogCS8qIG1hcmsgaXQgbm90IG9wZW4gKi8K LQlmb3IgKGludCBmb3JrbnVtID0gMDsgZm9ya251bSA8PSBNQVhfRk9SS05VTTsgZm9ya251bSsr KQotCQlyZWxuLT5tZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1dID0gMDsKKwlzZmlsZS0+bWRfbnVt X29wZW5fc2VncyA9IDA7CiB9CiAKIC8qCiAgKgltZGNsb3NlKCkgLS0gQ2xvc2UgdGhlIHNwZWNp ZmllZCByZWxhdGlvbiwgaWYgaXQgaXNuJ3QgY2xvc2VkIGFscmVhZHkuCiAgKi8KIHZvaWQKLW1k Y2xvc2UoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKK21kY2xvc2UoU01n ckZpbGVIYW5kbGUgc2ZpbGUpCiB7Ci0JaW50CQkJbm9wZW5zZWdzID0gcmVsbi0+bWRfbnVtX29w ZW5fc2Vnc1tmb3JrbnVtXTsKKwlpbnQJCQlub3BlbnNlZ3MgPSBzZmlsZS0+bWRfbnVtX29wZW5f c2VnczsKIAogCS8qIE5vIHdvcmsgaWYgYWxyZWFkeSBjbG9zZWQgKi8KIAlpZiAobm9wZW5zZWdz ID09IDApCkBAIC01NzYsMTAgKzU2MywxMCBAQCBtZGNsb3NlKFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0pCiAJLyogY2xvc2Ugc2VnbWVudHMgc3RhcnRpbmcgZnJvbSB0aGUg ZW5kICovCiAJd2hpbGUgKG5vcGVuc2VncyA+IDApCiAJewotCQlNZGZkVmVjICAgICp2ID0gJnJl bG4tPm1kX3NlZ19mZHNbZm9ya251bV1bbm9wZW5zZWdzIC0gMV07CisJCU1kZmRWZWMgICAgKnYg PSAmc2ZpbGUtPm1kX3NlZ19mZHNbbm9wZW5zZWdzIC0gMV07CiAKIAkJRmlsZUNsb3NlKHYtPm1k ZmRfdmZkKTsKLQkJX2ZkdmVjX3Jlc2l6ZShyZWxuLCBmb3JrbnVtLCBub3BlbnNlZ3MgLSAxKTsK KwkJX2ZkdmVjX3Jlc2l6ZShzZmlsZSwgbm9wZW5zZWdzIC0gMSk7CiAJCW5vcGVuc2Vncy0tOwog CX0KIH0KQEAgLTU4OCwxMyArNTc1LDEzIEBAIG1kY2xvc2UoU01nclJlbGF0aW9uIHJlbG4sIEZv cmtOdW1iZXIgZm9ya251bSkKICAqCW1kcHJlZmV0Y2goKSAtLSBJbml0aWF0ZSBhc3luY2hyb25v dXMgcmVhZCBvZiB0aGUgc3BlY2lmaWVkIGJsb2NrIG9mIGEgcmVsYXRpb24KICAqLwogYm9vbAot bWRwcmVmZXRjaChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051 bWJlciBibG9ja251bSkKK21kcHJlZmV0Y2goU01nckZpbGVIYW5kbGUgc2ZpbGUsIEJsb2NrTnVt YmVyIGJsb2NrbnVtKQogewogI2lmZGVmIFVTRV9QUkVGRVRDSAogCW9mZl90CQlzZWVrcG9zOwog CU1kZmRWZWMgICAgKnY7CiAKLQl2ID0gX21kZmRfZ2V0c2VnKHJlbG4sIGZvcmtudW0sIGJsb2Nr bnVtLCBmYWxzZSwKKwl2ID0gX21kZmRfZ2V0c2VnKHNmaWxlLCBibG9ja251bSwgZmFsc2UsCiAJ CQkJCSBJblJlY292ZXJ5ID8gRVhURU5TSU9OX1JFVFVSTl9OVUxMIDogRVhURU5TSU9OX0ZBSUwp OwogCWlmICh2ID09IE5VTEwpCiAJCXJldHVybiBmYWxzZTsKQEAgLTYxNiw4ICs2MDMsNyBAQCBt ZHByZWZldGNoKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVt YmVyIGJsb2NrbnVtKQogICogY29uc2lkZXJhYmx5IG1vcmUgZWZmaWNpZW50IHRoYW4gZG9pbmcg c28gaW5kaXZpZHVhbGx5LgogICovCiB2b2lkCi1tZHdyaXRlYmFjayhTTWdyUmVsYXRpb24gcmVs biwgRm9ya051bWJlciBmb3JrbnVtLAotCQkJQmxvY2tOdW1iZXIgYmxvY2tudW0sIEJsb2NrTnVt YmVyIG5ibG9ja3MpCittZHdyaXRlYmFjayhTTWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1i ZXIgYmxvY2tudW0sIEJsb2NrTnVtYmVyIG5ibG9ja3MpCiB7CiAJLyoKIAkgKiBJc3N1ZSBmbHVz aCByZXF1ZXN0cyBpbiBhcyBmZXcgcmVxdWVzdHMgYXMgcG9zc2libGU7IGhhdmUgdG8gc3BsaXQg YXQKQEAgLTYzMSw3ICs2MTcsNyBAQCBtZHdyaXRlYmFjayhTTWdyUmVsYXRpb24gcmVsbiwgRm9y a051bWJlciBmb3JrbnVtLAogCQlpbnQJCQlzZWdudW1fc3RhcnQsCiAJCQkJCXNlZ251bV9lbmQ7 CiAKLQkJdiA9IF9tZGZkX2dldHNlZyhyZWxuLCBmb3JrbnVtLCBibG9ja251bSwgdHJ1ZSAvKiBu b3QgdXNlZCAqLyAsCisJCXYgPSBfbWRmZF9nZXRzZWcoc2ZpbGUsIGJsb2NrbnVtLCB0cnVlIC8q IG5vdCB1c2VkICovICwKIAkJCQkJCSBFWFRFTlNJT05fRE9OVF9PUEVOKTsKIAogCQkvKgpAQCAt NjY4LDIwICs2NTQsMjEgQEAgbWR3cml0ZWJhY2soU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1i ZXIgZm9ya251bSwKICAqCW1kcmVhZCgpIC0tIFJlYWQgdGhlIHNwZWNpZmllZCBibG9jayBmcm9t IGEgcmVsYXRpb24uCiAgKi8KIHZvaWQKLW1kcmVhZChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051 bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSwKK21kcmVhZChTTWdyRmlsZUhhbmRs ZSBzZmlsZSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAJICAgY2hhciAqYnVmZmVyKQogewogCW9m Zl90CQlzZWVrcG9zOwogCWludAkJCW5ieXRlczsKIAlNZGZkVmVjICAgICp2OwogCi0JVFJBQ0Vf UE9TVEdSRVNRTF9TTUdSX01EX1JFQURfU1RBUlQoZm9ya251bSwgYmxvY2tudW0sCi0JCQkJCQkJ CQkJcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKLQkJCQkJCQkJCQlyZWxuLT5z bWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCi0JCQkJCQkJCQkJcmVsbi0+c21ncl9ybG9jYXRv ci5sb2NhdG9yLnJlbE51bWJlciwKLQkJCQkJCQkJCQlyZWxuLT5zbWdyX3Jsb2NhdG9yLmJhY2tl bmQpOworCVRSQUNFX1BPU1RHUkVTUUxfU01HUl9NRF9SRUFEX1NUQVJUKHNmaWxlLT5zbWdyX2Zv cmtudW0sCisJCQkJCQkJCQkJYmxvY2tudW0sCisJCQkJCQkJCQkJc2ZpbGUtPnNtZ3JfcmxvY2F0 b3IubG9jYXRvci5zcGNPaWQsCisJCQkJCQkJCQkJc2ZpbGUtPnNtZ3JfcmxvY2F0b3IubG9jYXRv ci5kYk9pZCwKKwkJCQkJCQkJCQlzZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJl ciwKKwkJCQkJCQkJCQlzZmlsZS0+c21ncl9ybG9jYXRvci5iYWNrZW5kKTsKIAotCXYgPSBfbWRm ZF9nZXRzZWcocmVsbiwgZm9ya251bSwgYmxvY2tudW0sIGZhbHNlLAorCXYgPSBfbWRmZF9nZXRz ZWcoc2ZpbGUsIGJsb2NrbnVtLCBmYWxzZSwKIAkJCQkJIEVYVEVOU0lPTl9GQUlMIHwgRVhURU5T SU9OX0NSRUFURV9SRUNPVkVSWSk7CiAKIAlzZWVrcG9zID0gKG9mZl90KSBCTENLU1ogKiAoYmxv Y2tudW0gJSAoKEJsb2NrTnVtYmVyKSBSRUxTRUdfU0laRSkpOwpAQCAtNjkwLDExICs2NzcsMTIg QEAgbWRyZWFkKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVt YmVyIGJsb2NrbnVtLAogCiAJbmJ5dGVzID0gRmlsZVJlYWQodi0+bWRmZF92ZmQsIGJ1ZmZlciwg QkxDS1NaLCBzZWVrcG9zLCBXQUlUX0VWRU5UX0RBVEFfRklMRV9SRUFEKTsKIAotCVRSQUNFX1BP U1RHUkVTUUxfU01HUl9NRF9SRUFEX0RPTkUoZm9ya251bSwgYmxvY2tudW0sCi0JCQkJCQkJCQkg ICByZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAotCQkJCQkJCQkJICAgcmVsbi0+ c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAotCQkJCQkJCQkJICAgcmVsbi0+c21ncl9ybG9j YXRvci5sb2NhdG9yLnJlbE51bWJlciwKLQkJCQkJCQkJCSAgIHJlbG4tPnNtZ3JfcmxvY2F0b3Iu YmFja2VuZCwKKwlUUkFDRV9QT1NUR1JFU1FMX1NNR1JfTURfUkVBRF9ET05FKHNmaWxlLT5zbWdy X2ZvcmtudW0sCisJCQkJCQkJCQkgICBibG9ja251bSwKKwkJCQkJCQkJCSAgIHNmaWxlLT5zbWdy X3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAorCQkJCQkJCQkJICAgc2ZpbGUtPnNtZ3JfcmxvY2F0 b3IubG9jYXRvci5kYk9pZCwKKwkJCQkJCQkJCSAgIHNmaWxlLT5zbWdyX3Jsb2NhdG9yLmxvY2F0 b3IucmVsTnVtYmVyLAorCQkJCQkJCQkJICAgc2ZpbGUtPnNtZ3JfcmxvY2F0b3IuYmFja2VuZCwK IAkJCQkJCQkJCSAgIG5ieXRlcywKIAkJCQkJCQkJCSAgIEJMQ0tTWik7CiAKQEAgLTczMyw3ICs3 MjEsNyBAQCBtZHJlYWQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxv Y2tOdW1iZXIgYmxvY2tudW0sCiAgKgkJdXNlIG1kZXh0ZW5kKCkuCiAgKi8KIHZvaWQKLW1kd3Jp dGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxv Y2tudW0sCittZHdyaXRlKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9ja051bWJlciBibG9ja251 bSwKIAkJY2hhciAqYnVmZmVyLCBib29sIHNraXBGc3luYykKIHsKIAlvZmZfdAkJc2Vla3BvczsK QEAgLTc0MiwxNiArNzMwLDE3IEBAIG1kd3JpdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1i ZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAKIAkvKiBUaGlzIGFzc2VydCBpcyB0 b28gZXhwZW5zaXZlIHRvIGhhdmUgb24gbm9ybWFsbHkgLi4uICovCiAjaWZkZWYgQ0hFQ0tfV1JJ VEVfVlNfRVhURU5ECi0JQXNzZXJ0KGJsb2NrbnVtIDwgbWRuYmxvY2tzKHJlbG4sIGZvcmtudW0p KTsKKwlBc3NlcnQoYmxvY2tudW0gPCBtZG5ibG9ja3Moc2ZpbGUpKTsKICNlbmRpZgogCi0JVFJB Q0VfUE9TVEdSRVNRTF9TTUdSX01EX1dSSVRFX1NUQVJUKGZvcmtudW0sIGJsb2NrbnVtLAotCQkJ CQkJCQkJCSByZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAotCQkJCQkJCQkJCSBy ZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCi0JCQkJCQkJCQkJIHJlbG4tPnNtZ3Jf cmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCi0JCQkJCQkJCQkJIHJlbG4tPnNtZ3JfcmxvY2F0 b3IuYmFja2VuZCk7CisJVFJBQ0VfUE9TVEdSRVNRTF9TTUdSX01EX1dSSVRFX1NUQVJUKHNmaWxl LT5zbWdyX2ZvcmtudW0sCisJCQkJCQkJCQkJIGJsb2NrbnVtLAorCQkJCQkJCQkJCSBzZmlsZS0+ c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKKwkJCQkJCQkJCQkgc2ZpbGUtPnNtZ3Jfcmxv Y2F0b3IubG9jYXRvci5kYk9pZCwKKwkJCQkJCQkJCQkgc2ZpbGUtPnNtZ3JfcmxvY2F0b3IubG9j YXRvci5yZWxOdW1iZXIsCisJCQkJCQkJCQkJIHNmaWxlLT5zbWdyX3Jsb2NhdG9yLmJhY2tlbmQp OwogCi0JdiA9IF9tZGZkX2dldHNlZyhyZWxuLCBmb3JrbnVtLCBibG9ja251bSwgc2tpcEZzeW5j LAorCXYgPSBfbWRmZF9nZXRzZWcoc2ZpbGUsIGJsb2NrbnVtLCBza2lwRnN5bmMsCiAJCQkJCSBF WFRFTlNJT05fRkFJTCB8IEVYVEVOU0lPTl9DUkVBVEVfUkVDT1ZFUlkpOwogCiAJc2Vla3BvcyA9 IChvZmZfdCkgQkxDS1NaICogKGJsb2NrbnVtICUgKChCbG9ja051bWJlcikgUkVMU0VHX1NJWkUp KTsKQEAgLTc2MCwxMSArNzQ5LDEyIEBAIG1kd3JpdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtO dW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAKIAluYnl0ZXMgPSBGaWxlV3Jp dGUodi0+bWRmZF92ZmQsIGJ1ZmZlciwgQkxDS1NaLCBzZWVrcG9zLCBXQUlUX0VWRU5UX0RBVEFf RklMRV9XUklURSk7CiAKLQlUUkFDRV9QT1NUR1JFU1FMX1NNR1JfTURfV1JJVEVfRE9ORShmb3Jr bnVtLCBibG9ja251bSwKLQkJCQkJCQkJCQlyZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3Bj T2lkLAotCQkJCQkJCQkJCXJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCwKLQkJCQkJ CQkJCQlyZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLAotCQkJCQkJCQkJCXJl bG4tPnNtZ3JfcmxvY2F0b3IuYmFja2VuZCwKKwlUUkFDRV9QT1NUR1JFU1FMX1NNR1JfTURfV1JJ VEVfRE9ORShzZmlsZS0+c21ncl9mb3JrbnVtLAorCQkJCQkJCQkJCWJsb2NrbnVtLAorCQkJCQkJ CQkJCXNmaWxlLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAorCQkJCQkJCQkJCXNmaWxl LT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCisJCQkJCQkJCQkJc2ZpbGUtPnNtZ3Jfcmxv Y2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCisJCQkJCQkJCQkJc2ZpbGUtPnNtZ3JfcmxvY2F0b3Iu YmFja2VuZCwKIAkJCQkJCQkJCQluYnl0ZXMsCiAJCQkJCQkJCQkJQkxDS1NaKTsKIApAQCAtNzg1 LDggKzc3NSw4IEBAIG1kd3JpdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251 bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAJCQkJIGVycmhpbnQoIkNoZWNrIGZyZWUgZGlzayBz cGFjZS4iKSkpOwogCX0KIAotCWlmICghc2tpcEZzeW5jICYmICFTbWdySXNUZW1wKHJlbG4pKQot CQlyZWdpc3Rlcl9kaXJ0eV9zZWdtZW50KHJlbG4sIGZvcmtudW0sIHYpOworCWlmICghc2tpcEZz eW5jICYmICFTbWdySXNUZW1wKHNmaWxlKSkKKwkJcmVnaXN0ZXJfZGlydHlfc2VnbWVudChzZmls ZSwgdik7CiB9CiAKIC8qCkBAIC03OTgsMTYgKzc4OCwxNiBAQCBtZHdyaXRlKFNNZ3JSZWxhdGlv biByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogICoJCWFy ZSBwcmVzZW50IGluIHRoZSBhcnJheS4KICAqLwogQmxvY2tOdW1iZXIKLW1kbmJsb2NrcyhTTWdy UmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQorbWRuYmxvY2tzKFNNZ3JGaWxlSGFu ZGxlIHNmaWxlKQogewogCU1kZmRWZWMgICAgKnY7CiAJQmxvY2tOdW1iZXIgbmJsb2NrczsKIAlC bG9ja051bWJlciBzZWdubzsKIAotCW1kb3BlbmZvcmsocmVsbiwgZm9ya251bSwgRVhURU5TSU9O X0ZBSUwpOworCW1kb3BlbmZvcmsoc2ZpbGUsIEVYVEVOU0lPTl9GQUlMKTsKIAogCS8qIG1kb3Bl biBoYXMgb3BlbmVkIHRoZSBmaXJzdCBzZWdtZW50ICovCi0JQXNzZXJ0KHJlbG4tPm1kX251bV9v cGVuX3NlZ3NbZm9ya251bV0gPiAwKTsKKwlBc3NlcnQoc2ZpbGUtPm1kX251bV9vcGVuX3NlZ3Mg PiAwKTsKIAogCS8qCiAJICogU3RhcnQgZnJvbSB0aGUgbGFzdCBvcGVuIHNlZ21lbnRzLCB0byBh dm9pZCByZWR1bmRhbnQgc2Vla3MuICBXZSBoYXZlCkBAIC04MjIsMTIgKzgxMiwxMiBAQCBtZG5i bG9ja3MoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKIAkgKiB0aGF0J3Mg T0sgYmVjYXVzZSB0aGUgY2hlY2twb2ludGVyIG5ldmVyIG5lZWRzIHRvIGNvbXB1dGUgcmVsYXRp b24KIAkgKiBzaXplLikKIAkgKi8KLQlzZWdubyA9IHJlbG4tPm1kX251bV9vcGVuX3NlZ3NbZm9y a251bV0gLSAxOwotCXYgPSAmcmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVtXVtzZWdub107CisJc2Vn bm8gPSBzZmlsZS0+bWRfbnVtX29wZW5fc2VncyAtIDE7CisJdiA9ICZzZmlsZS0+bWRfc2VnX2Zk c1tzZWdub107CiAKIAlmb3IgKDs7KQogCXsKLQkJbmJsb2NrcyA9IF9tZG5ibG9ja3MocmVsbiwg Zm9ya251bSwgdik7CisJCW5ibG9ja3MgPSBfbWRuYmxvY2tzKHNmaWxlLCB2KTsKIAkJaWYgKG5i bG9ja3MgPiAoKEJsb2NrTnVtYmVyKSBSRUxTRUdfU0laRSkpCiAJCQllbG9nKEZBVEFMLCAic2Vn bWVudCB0b28gYmlnIik7CiAJCWlmIChuYmxvY2tzIDwgKChCbG9ja051bWJlcikgUkVMU0VHX1NJ WkUpKQpAQCAtODQ1LDcgKzgzNSw3IEBAIG1kbmJsb2NrcyhTTWdyUmVsYXRpb24gcmVsbiwgRm9y a051bWJlciBmb3JrbnVtKQogCQkgKiB1bmRlcm1pbmVzIF9tZGZkX2dldHNlZydzIGF0dGVtcHRz IHRvIG5vdGljZSBhbmQgcmVwb3J0IGFuIGVycm9yCiAJCSAqIHVwb24gYWNjZXNzIHRvIGEgbWlz c2luZyBzZWdtZW50LgogCQkgKi8KLQkJdiA9IF9tZGZkX29wZW5zZWcocmVsbiwgZm9ya251bSwg c2Vnbm8sIDApOworCQl2ID0gX21kZmRfb3BlbnNlZyhzZmlsZSwgc2Vnbm8sIDApOwogCQlpZiAo diA9PSBOVUxMKQogCQkJcmV0dXJuIHNlZ25vICogKChCbG9ja051bWJlcikgUkVMU0VHX1NJWkUp OwogCX0KQEAgLTg1NSw3ICs4NDUsNyBAQCBtZG5ibG9ja3MoU01nclJlbGF0aW9uIHJlbG4sIEZv cmtOdW1iZXIgZm9ya251bSkKICAqCW1kdHJ1bmNhdGUoKSAtLSBUcnVuY2F0ZSByZWxhdGlvbiB0 byBzcGVjaWZpZWQgbnVtYmVyIG9mIGJsb2Nrcy4KICAqLwogdm9pZAotbWR0cnVuY2F0ZShTTWdy UmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBuYmxvY2tzKQor bWR0cnVuY2F0ZShTTWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIgbmJsb2NrcykKIHsK IAlCbG9ja051bWJlciBjdXJuYmxrOwogCUJsb2NrTnVtYmVyIHByaW9yYmxvY2tzOwpAQCAtODY1 LDcgKzg1NSw3IEBAIG1kdHJ1bmNhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9y a251bSwgQmxvY2tOdW1iZXIgbmJsb2NrcykKIAkgKiBOT1RFOiBtZG5ibG9ja3MgbWFrZXMgc3Vy ZSB3ZSBoYXZlIG9wZW5lZCBhbGwgYWN0aXZlIHNlZ21lbnRzLCBzbyB0aGF0CiAJICogdHJ1bmNh dGlvbiBsb29wIHdpbGwgZ2V0IHRoZW0gYWxsIQogCSAqLwotCWN1cm5ibGsgPSBtZG5ibG9ja3Mo cmVsbiwgZm9ya251bSk7CisJY3VybmJsayA9IG1kbmJsb2NrcyhzZmlsZSk7CiAJaWYgKG5ibG9j a3MgPiBjdXJuYmxrKQogCXsKIAkJLyogQm9ndXMgcmVxdWVzdCAuLi4gYnV0IG5vIGNvbXBsYWlu dCBpZiBJblJlY292ZXJ5ICovCkBAIC04NzMsNyArODYzLDcgQEAgbWR0cnVuY2F0ZShTTWdyUmVs YXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBuYmxvY2tzKQogCQkJ cmV0dXJuOwogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJtc2coImNvdWxkIG5vdCB0cnVuY2F0 ZSBmaWxlIFwiJXNcIiB0byAldSBibG9ja3M6IGl0J3Mgb25seSAldSBibG9ja3Mgbm93IiwKLQkJ CQkJCXJlbHBhdGgocmVsbi0+c21ncl9ybG9jYXRvciwgZm9ya251bSksCisJCQkJCQlzbWdyZmls ZXBhdGgoc2ZpbGUtPnNtZ3JfbG9jYXRvciksCiAJCQkJCQluYmxvY2tzLCBjdXJuYmxrKSkpOwog CX0KIAlpZiAobmJsb2NrcyA9PSBjdXJuYmxrKQpAQCAtODgzLDE0ICs4NzMsMTQgQEAgbWR0cnVu Y2F0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBu YmxvY2tzKQogCSAqIFRydW5jYXRlIHNlZ21lbnRzLCBzdGFydGluZyBhdCB0aGUgbGFzdCBvbmUu IFN0YXJ0aW5nIGF0IHRoZSBlbmQgbWFrZXMKIAkgKiBtYW5hZ2luZyB0aGUgbWVtb3J5IGZvciB0 aGUgZmQgYXJyYXkgZWFzaWVyLCBzaG91bGQgdGhlcmUgYmUgZXJyb3JzLgogCSAqLwotCWN1cm9w ZW5zZWdzID0gcmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXTsKKwljdXJvcGVuc2VncyA9 IHNmaWxlLT5tZF9udW1fb3Blbl9zZWdzOwogCXdoaWxlIChjdXJvcGVuc2VncyA+IDApCiAJewog CQlNZGZkVmVjICAgICp2OwogCiAJCXByaW9yYmxvY2tzID0gKGN1cm9wZW5zZWdzIC0gMSkgKiBS RUxTRUdfU0laRTsKIAotCQl2ID0gJnJlbG4tPm1kX3NlZ19mZHNbZm9ya251bV1bY3Vyb3BlbnNl Z3MgLSAxXTsKKwkJdiA9ICZzZmlsZS0+bWRfc2VnX2Zkc1tjdXJvcGVuc2VncyAtIDFdOwogCiAJ CWlmIChwcmlvcmJsb2NrcyA+IG5ibG9ja3MpCiAJCXsKQEAgLTkwNCwxNCArODk0LDE0IEBAIG1k dHJ1bmNhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1i ZXIgbmJsb2NrcykKIAkJCQkJCSBlcnJtc2coImNvdWxkIG5vdCB0cnVuY2F0ZSBmaWxlIFwiJXNc IjogJW0iLAogCQkJCQkJCQlGaWxlUGF0aE5hbWUodi0+bWRmZF92ZmQpKSkpOwogCi0JCQlpZiAo IVNtZ3JJc1RlbXAocmVsbikpCi0JCQkJcmVnaXN0ZXJfZGlydHlfc2VnbWVudChyZWxuLCBmb3Jr bnVtLCB2KTsKKwkJCWlmICghU21ncklzVGVtcChzZmlsZSkpCisJCQkJcmVnaXN0ZXJfZGlydHlf c2VnbWVudChzZmlsZSwgdik7CiAKIAkJCS8qIHdlIG5ldmVyIGRyb3AgdGhlIDFzdCBzZWdtZW50 ICovCi0JCQlBc3NlcnQodiAhPSAmcmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVtXVswXSk7CisJCQlB c3NlcnQodiAhPSAmc2ZpbGUtPm1kX3NlZ19mZHNbMF0pOwogCiAJCQlGaWxlQ2xvc2Uodi0+bWRm ZF92ZmQpOwotCQkJX2ZkdmVjX3Jlc2l6ZShyZWxuLCBmb3JrbnVtLCBjdXJvcGVuc2VncyAtIDEp OworCQkJX2ZkdmVjX3Jlc2l6ZShzZmlsZSwgY3Vyb3BlbnNlZ3MgLSAxKTsKIAkJfQogCQllbHNl IGlmIChwcmlvcmJsb2NrcyArICgoQmxvY2tOdW1iZXIpIFJFTFNFR19TSVpFKSA+IG5ibG9ja3Mp CiAJCXsKQEAgLTkzMCw4ICs5MjAsOCBAQCBtZHRydW5jYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIG5ibG9ja3MpCiAJCQkJCQkgZXJybXNnKCJj b3VsZCBub3QgdHJ1bmNhdGUgZmlsZSBcIiVzXCIgdG8gJXUgYmxvY2tzOiAlbSIsCiAJCQkJCQkJ CUZpbGVQYXRoTmFtZSh2LT5tZGZkX3ZmZCksCiAJCQkJCQkJCW5ibG9ja3MpKSk7Ci0JCQlpZiAo IVNtZ3JJc1RlbXAocmVsbikpCi0JCQkJcmVnaXN0ZXJfZGlydHlfc2VnbWVudChyZWxuLCBmb3Jr bnVtLCB2KTsKKwkJCWlmICghU21ncklzVGVtcChzZmlsZSkpCisJCQkJcmVnaXN0ZXJfZGlydHlf c2VnbWVudChzZmlsZSwgdik7CiAJCX0KIAkJZWxzZQogCQl7CkBAIC05NTcsNyArOTQ3LDcgQEAg bWR0cnVuY2F0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051 bWJlciBuYmxvY2tzKQogICogc2VnbWVudCBtYXkgc3Vydml2ZSByZWNvdmVyeSwgcmVpbnRyb2R1 Y2luZyB1bndhbnRlZCBkYXRhIGludG8gdGhlIHRhYmxlLgogICovCiB2b2lkCi1tZGltbWVkc3lu YyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQorbWRpbW1lZHN5bmMoU01n ckZpbGVIYW5kbGUgc2ZpbGUpCiB7CiAJaW50CQkJc2Vnbm87CiAJaW50CQkJbWluX2luYWN0aXZl X3NlZzsKQEAgLTk2Niw5ICs5NTYsOSBAQCBtZGltbWVkc3luYyhTTWdyUmVsYXRpb24gcmVsbiwg Rm9ya051bWJlciBmb3JrbnVtKQogCSAqIE5PVEU6IG1kbmJsb2NrcyBtYWtlcyBzdXJlIHdlIGhh dmUgb3BlbmVkIGFsbCBhY3RpdmUgc2VnbWVudHMsIHNvIHRoYXQKIAkgKiBmc3luYyBsb29wIHdp bGwgZ2V0IHRoZW0gYWxsIQogCSAqLwotCW1kbmJsb2NrcyhyZWxuLCBmb3JrbnVtKTsKKwltZG5i bG9ja3Moc2ZpbGUpOwogCi0JbWluX2luYWN0aXZlX3NlZyA9IHNlZ25vID0gcmVsbi0+bWRfbnVt X29wZW5fc2Vnc1tmb3JrbnVtXTsKKwltaW5faW5hY3RpdmVfc2VnID0gc2Vnbm8gPSBzZmlsZS0+ bWRfbnVtX29wZW5fc2VnczsKIAogCS8qCiAJICogVGVtcG9yYXJpbHkgb3BlbiBpbmFjdGl2ZSBz ZWdtZW50cywgdGhlbiBjbG9zZSB0aGVtIGFmdGVyIHN5bmMuICBUaGVyZQpAQCAtOTc2LDEyICs5 NjYsMTIgQEAgbWRpbW1lZHN5bmMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251 bSkKIAkgKiBpcyBoYXJtbGVzcy4gIFdlIGRvbid0IGJvdGhlciB0byBjbGVhbiB0aGVtIHVwIGFu ZCB0YWtlIGEgcmlzayBvZgogCSAqIGZ1cnRoZXIgdHJvdWJsZS4gIFRoZSBuZXh0IG1kY2xvc2Uo KSB3aWxsIHNvb24gY2xvc2UgdGhlbS4KIAkgKi8KLQl3aGlsZSAoX21kZmRfb3BlbnNlZyhyZWxu LCBmb3JrbnVtLCBzZWdubywgMCkgIT0gTlVMTCkKKwl3aGlsZSAoX21kZmRfb3BlbnNlZyhzZmls ZSwgc2Vnbm8sIDApICE9IE5VTEwpCiAJCXNlZ25vKys7CiAKIAl3aGlsZSAoc2Vnbm8gPiAwKQog CXsKLQkJTWRmZFZlYyAgICAqdiA9ICZyZWxuLT5tZF9zZWdfZmRzW2ZvcmtudW1dW3NlZ25vIC0g MV07CisJCU1kZmRWZWMgICAgKnYgPSAmc2ZpbGUtPm1kX3NlZ19mZHNbc2Vnbm8gLSAxXTsKIAog CQlpZiAoRmlsZVN5bmModi0+bWRmZF92ZmQsIFdBSVRfRVZFTlRfREFUQV9GSUxFX0lNTUVESUFU RV9TWU5DKSA8IDApCiAJCQllcmVwb3J0KGRhdGFfc3luY19lbGV2ZWwoRVJST1IpLApAQCAtOTkz LDcgKzk4Myw3IEBAIG1kaW1tZWRzeW5jKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZv cmtudW0pCiAJCWlmIChzZWdubyA+IG1pbl9pbmFjdGl2ZV9zZWcpCiAJCXsKIAkJCUZpbGVDbG9z ZSh2LT5tZGZkX3ZmZCk7Ci0JCQlfZmR2ZWNfcmVzaXplKHJlbG4sIGZvcmtudW0sIHNlZ25vIC0g MSk7CisJCQlfZmR2ZWNfcmVzaXplKHNmaWxlLCBzZWdubyAtIDEpOwogCQl9CiAKIAkJc2Vnbm8t LTsKQEAgLTEwMTAsMTQgKzEwMDAsMTQgQEAgbWRpbW1lZHN5bmMoU01nclJlbGF0aW9uIHJlbG4s IEZvcmtOdW1iZXIgZm9ya251bSkKICAqIGVub3VnaCB0byBiZSBhIHBlcmZvcm1hbmNlIHByb2Js ZW0pLgogICovCiBzdGF0aWMgdm9pZAotcmVnaXN0ZXJfZGlydHlfc2VnbWVudChTTWdyUmVsYXRp b24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBNZGZkVmVjICpzZWcpCityZWdpc3Rlcl9kaXJ0 eV9zZWdtZW50KFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBNZGZkVmVjICpzZWcpCiB7CiAJRmlsZVRh ZwkJdGFnOwogCi0JSU5JVF9NRF9GSUxFVEFHKHRhZywgcmVsbi0+c21ncl9ybG9jYXRvci5sb2Nh dG9yLCBmb3JrbnVtLCBzZWctPm1kZmRfc2Vnbm8pOworCUlOSVRfTURfRklMRVRBRyh0YWcsIHNm aWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvciwgc2ZpbGUtPnNtZ3JfbG9jYXRvci5mb3JrbnVtLCBz ZWctPm1kZmRfc2Vnbm8pOwogCiAJLyogVGVtcCByZWxhdGlvbnMgc2hvdWxkIG5ldmVyIGJlIGZz eW5jJ2QgKi8KLQlBc3NlcnQoIVNtZ3JJc1RlbXAocmVsbikpOworCUFzc2VydCghU21ncklzVGVt cChzZmlsZSkpOwogCiAJaWYgKCFSZWdpc3RlclN5bmNSZXF1ZXN0KCZ0YWcsIFNZTkNfUkVRVUVT VCwgZmFsc2UgLyogcmV0cnlPbkVycm9yICovICkpCiAJewpAQCAtMTAzNiwxNSArMTAyNiwxNCBA QCByZWdpc3Rlcl9kaXJ0eV9zZWdtZW50KFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZv cmtudW0sIE1kZmRWZWMgKnNlZykKICAqIHJlZ2lzdGVyX3VubGlua19zZWdtZW50KCkgLS0gU2No ZWR1bGUgYSBmaWxlIHRvIGJlIGRlbGV0ZWQgYWZ0ZXIgbmV4dCBjaGVja3BvaW50CiAgKi8KIHN0 YXRpYyB2b2lkCi1yZWdpc3Rlcl91bmxpbmtfc2VnbWVudChSZWxGaWxlTG9jYXRvckJhY2tlbmQg cmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya251bSwKLQkJCQkJCUJsb2NrTnVtYmVyIHNlZ25vKQor cmVnaXN0ZXJfdW5saW5rX3NlZ21lbnQoU01nckZpbGVMb2NhdG9yIHNsb2NhdG9yLCBCbG9ja051 bWJlciBzZWdubykKIHsKIAlGaWxlVGFnCQl0YWc7CiAKLQlJTklUX01EX0ZJTEVUQUcodGFnLCBy bG9jYXRvci5sb2NhdG9yLCBmb3JrbnVtLCBzZWdubyk7CisJSU5JVF9NRF9GSUxFVEFHKHRhZywg c2xvY2F0b3IubG9jYXRvciwgc2xvY2F0b3IuZm9ya251bSwgc2Vnbm8pOwogCiAJLyogU2hvdWxk IG5ldmVyIGJlIHVzZWQgd2l0aCB0ZW1wIHJlbGF0aW9ucyAqLwotCUFzc2VydCghUmVsRmlsZUxv Y2F0b3JCYWNrZW5kSXNUZW1wKHJsb2NhdG9yKSk7CisJQXNzZXJ0KCFTTWdyRmlsZUxvY2F0b3JJ c1RlbXAoc2xvY2F0b3IpKTsKIAogCVJlZ2lzdGVyU3luY1JlcXVlc3QoJnRhZywgU1lOQ19VTkxJ TktfUkVRVUVTVCwgdHJ1ZSAvKiByZXRyeU9uRXJyb3IgKi8gKTsKIH0KQEAgLTEwNTMsMTIgKzEw NDIsMTEgQEAgcmVnaXN0ZXJfdW5saW5rX3NlZ21lbnQoUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJs b2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sCiAgKiByZWdpc3Rlcl9mb3JnZXRfcmVxdWVzdCgp IC0tIGZvcmdldCBhbnkgZnN5bmNzIGZvciBhIHJlbGF0aW9uIGZvcmsncyBzZWdtZW50CiAgKi8K IHN0YXRpYyB2b2lkCi1yZWdpc3Rlcl9mb3JnZXRfcmVxdWVzdChSZWxGaWxlTG9jYXRvckJhY2tl bmQgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya251bSwKLQkJCQkJCUJsb2NrTnVtYmVyIHNlZ25v KQorcmVnaXN0ZXJfZm9yZ2V0X3JlcXVlc3QoU01nckZpbGVMb2NhdG9yIHNsb2NhdG9yLCBCbG9j a051bWJlciBzZWdubykKIHsKIAlGaWxlVGFnCQl0YWc7CiAKLQlJTklUX01EX0ZJTEVUQUcodGFn LCBybG9jYXRvci5sb2NhdG9yLCBmb3JrbnVtLCBzZWdubyk7CisJSU5JVF9NRF9GSUxFVEFHKHRh Zywgc2xvY2F0b3IubG9jYXRvciwgc2xvY2F0b3IuZm9ya251bSwgc2Vnbm8pOwogCiAJUmVnaXN0 ZXJTeW5jUmVxdWVzdCgmdGFnLCBTWU5DX0ZPUkdFVF9SRVFVRVNULCB0cnVlIC8qIHJldHJ5T25F cnJvciAqLyApOwogfQpAQCAtMTA4MSw1NyArMTA2OSwyNSBAQCBGb3JnZXREYXRhYmFzZVN5bmNS ZXF1ZXN0cyhPaWQgZGJpZCkKIAlSZWdpc3RlclN5bmNSZXF1ZXN0KCZ0YWcsIFNZTkNfRklMVEVS X1JFUVVFU1QsIHRydWUgLyogcmV0cnlPbkVycm9yICovICk7CiB9CiAKLS8qCi0gKiBEcm9wUmVs YXRpb25GaWxlcyAtLSBkcm9wIGZpbGVzIG9mIGFsbCBnaXZlbiByZWxhdGlvbnMKLSAqLwotdm9p ZAotRHJvcFJlbGF0aW9uRmlsZXMoUmVsRmlsZUxvY2F0b3IgKmRlbHJlbHMsIGludCBuZGVscmVs cywgYm9vbCBpc1JlZG8pCi17Ci0JU01nclJlbGF0aW9uICpzcmVsczsKLQlpbnQJCQlpOwotCi0J c3JlbHMgPSBwYWxsb2Moc2l6ZW9mKFNNZ3JSZWxhdGlvbikgKiBuZGVscmVscyk7Ci0JZm9yIChp ID0gMDsgaSA8IG5kZWxyZWxzOyBpKyspCi0JewotCQlTTWdyUmVsYXRpb24gc3JlbCA9IHNtZ3Jv cGVuKGRlbHJlbHNbaV0sIEludmFsaWRCYWNrZW5kSWQpOwotCi0JCWlmIChpc1JlZG8pCi0JCXsK LQkJCUZvcmtOdW1iZXIJZm9yazsKLQotCQkJZm9yIChmb3JrID0gMDsgZm9yayA8PSBNQVhfRk9S S05VTTsgZm9yaysrKQotCQkJCVhMb2dEcm9wUmVsYXRpb24oZGVscmVsc1tpXSwgZm9yayk7Ci0J CX0KLQkJc3JlbHNbaV0gPSBzcmVsOwotCX0KLQotCXNtZ3Jkb3VubGlua2FsbChzcmVscywgbmRl bHJlbHMsIGlzUmVkbyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbmRlbHJlbHM7IGkrKykKLQkJc21n cmNsb3NlKHNyZWxzW2ldKTsKLQlwZnJlZShzcmVscyk7Ci19Ci0KIAogLyoKICAqCV9mZHZlY19y ZXNpemUoKSAtLSBSZXNpemUgdGhlIGZvcmsncyBvcGVuIHNlZ21lbnRzIGFycmF5CiAgKi8KIHN0 YXRpYyB2b2lkCi1fZmR2ZWNfcmVzaXplKFNNZ3JSZWxhdGlvbiByZWxuLAotCQkJICBGb3JrTnVt YmVyIGZvcmtudW0sCitfZmR2ZWNfcmVzaXplKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLAogCQkJICBp bnQgbnNlZykKIHsKIAlpZiAobnNlZyA9PSAwKQogCXsKLQkJaWYgKHJlbG4tPm1kX251bV9vcGVu X3NlZ3NbZm9ya251bV0gPiAwKQorCQlpZiAoc2ZpbGUtPm1kX251bV9vcGVuX3NlZ3MgPiAwKQog CQl7Ci0JCQlwZnJlZShyZWxuLT5tZF9zZWdfZmRzW2ZvcmtudW1dKTsKLQkJCXJlbG4tPm1kX3Nl Z19mZHNbZm9ya251bV0gPSBOVUxMOworCQkJcGZyZWUoc2ZpbGUtPm1kX3NlZ19mZHMpOworCQkJ c2ZpbGUtPm1kX3NlZ19mZHMgPSBOVUxMOwogCQl9CiAJfQotCWVsc2UgaWYgKHJlbG4tPm1kX251 bV9vcGVuX3NlZ3NbZm9ya251bV0gPT0gMCkKKwllbHNlIGlmIChzZmlsZS0+bWRfbnVtX29wZW5f c2VncyA9PSAwKQogCXsKLQkJcmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVtXSA9CisJCXNmaWxlLT5t ZF9zZWdfZmRzID0KIAkJCU1lbW9yeUNvbnRleHRBbGxvYyhNZEN4dCwgc2l6ZW9mKE1kZmRWZWMp ICogbnNlZyk7CiAJfQogCWVsc2UKQEAgLTExNDIsMTIgKzEwOTgsMTIgQEAgX2ZkdmVjX3Jlc2l6 ZShTTWdyUmVsYXRpb24gcmVsbiwKIAkJICogRmlsZUNsb3NlKCksIGFuZCB0aGUgbWVtb3J5IGNv bnRleHQgaW50ZXJuYWxseSB3aWxsIHNvbWV0aW1lcyBhdm9pZAogCQkgKiBkb2luZyBhbiBhY3R1 YWwgcmVhbGxvY2F0aW9uLgogCQkgKi8KLQkJcmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVtXSA9Ci0J CQlyZXBhbGxvYyhyZWxuLT5tZF9zZWdfZmRzW2ZvcmtudW1dLAorCQlzZmlsZS0+bWRfc2VnX2Zk cyA9CisJCQlyZXBhbGxvYyhzZmlsZS0+bWRfc2VnX2ZkcywKIAkJCQkJIHNpemVvZihNZGZkVmVj KSAqIG5zZWcpOwogCX0KIAotCXJlbG4tPm1kX251bV9vcGVuX3NlZ3NbZm9ya251bV0gPSBuc2Vn OworCXNmaWxlLT5tZF9udW1fb3Blbl9zZWdzID0gbnNlZzsKIH0KIAogLyoKQEAgLTExNTUsMTIg KzExMTEsMTIgQEAgX2ZkdmVjX3Jlc2l6ZShTTWdyUmVsYXRpb24gcmVsbiwKICAqIHJldHVybmVk IHN0cmluZyBpcyBwYWxsb2MnZC4KICAqLwogc3RhdGljIGNoYXIgKgotX21kZmRfc2VncGF0aChT TWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBzZWdubykK K19tZGZkX3NlZ3BhdGgoU01nckZpbGVIYW5kbGUgc2ZpbGUsIEJsb2NrTnVtYmVyIHNlZ25vKQog ewogCWNoYXIJICAgKnBhdGgsCiAJCQkgICAqZnVsbHBhdGg7CiAKLQlwYXRoID0gcmVscGF0aChy ZWxuLT5zbWdyX3Jsb2NhdG9yLCBmb3JrbnVtKTsKKwlwYXRoID0gc21ncmZpbGVwYXRoKHNmaWxl LT5zbWdyX2xvY2F0b3IpOwogCiAJaWYgKHNlZ25vID4gMCkKIAl7CkBAIC0xMTc4LDE0ICsxMTM0 LDE0IEBAIF9tZGZkX3NlZ3BhdGgoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251 bSwgQmxvY2tOdW1iZXIgc2Vnbm8pCiAgKiBhbmQgbWFrZSBhIE1kZmRWZWMgb2JqZWN0IGZvciBp dC4gIFJldHVybnMgTlVMTCBvbiBmYWlsdXJlLgogICovCiBzdGF0aWMgTWRmZFZlYyAqCi1fbWRm ZF9vcGVuc2VnKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVt YmVyIHNlZ25vLAorX21kZmRfb3BlbnNlZyhTTWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1i ZXIgc2Vnbm8sCiAJCQkgIGludCBvZmxhZ3MpCiB7CiAJTWRmZFZlYyAgICAqdjsKIAlGaWxlCQlm ZDsKIAljaGFyCSAgICpmdWxscGF0aDsKIAotCWZ1bGxwYXRoID0gX21kZmRfc2VncGF0aChyZWxu LCBmb3JrbnVtLCBzZWdubyk7CisJZnVsbHBhdGggPSBfbWRmZF9zZWdwYXRoKHNmaWxlLCBzZWdu byk7CiAKIAkvKiBvcGVuIHRoZSBmaWxlICovCiAJZmQgPSBQYXRoTmFtZU9wZW5GaWxlKGZ1bGxw YXRoLCBPX1JEV1IgfCBQR19CSU5BUlkgfCBvZmxhZ3MpOwpAQCAtMTE5OSwxNiArMTE1NSwxNiBA QCBfbWRmZF9vcGVuc2VnKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJs b2NrTnVtYmVyIHNlZ25vLAogCSAqIFNlZ21lbnRzIGFyZSBhbHdheXMgb3BlbmVkIGluIG9yZGVy IGZyb20gbG93ZXN0IHRvIGhpZ2hlc3QsIHNvIHdlIG11c3QKIAkgKiBiZSBhZGRpbmcgYSBuZXcg b25lIGF0IHRoZSBlbmQuCiAJICovCi0JQXNzZXJ0KHNlZ25vID09IHJlbG4tPm1kX251bV9vcGVu X3NlZ3NbZm9ya251bV0pOworCUFzc2VydChzZWdubyA9PSBzZmlsZS0+bWRfbnVtX29wZW5fc2Vn cyk7CiAKLQlfZmR2ZWNfcmVzaXplKHJlbG4sIGZvcmtudW0sIHNlZ25vICsgMSk7CisJX2ZkdmVj X3Jlc2l6ZShzZmlsZSwgc2Vnbm8gKyAxKTsKIAogCS8qIGZpbGwgdGhlIGVudHJ5ICovCi0JdiA9 ICZyZWxuLT5tZF9zZWdfZmRzW2ZvcmtudW1dW3NlZ25vXTsKKwl2ID0gJnNmaWxlLT5tZF9zZWdf ZmRzW3NlZ25vXTsKIAl2LT5tZGZkX3ZmZCA9IGZkOwogCXYtPm1kZmRfc2Vnbm8gPSBzZWdubzsK IAotCUFzc2VydChfbWRuYmxvY2tzKHJlbG4sIGZvcmtudW0sIHYpIDw9ICgoQmxvY2tOdW1iZXIp IFJFTFNFR19TSVpFKSk7CisJQXNzZXJ0KF9tZG5ibG9ja3Moc2ZpbGUsIHYpIDw9ICgoQmxvY2tO dW1iZXIpIFJFTFNFR19TSVpFKSk7CiAKIAkvKiBhbGwgZG9uZSAqLwogCXJldHVybiB2OwpAQCAt MTIyMyw3ICsxMTc5LDcgQEAgX21kZmRfb3BlbnNlZyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051 bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBzZWdubywKICAqIEVYVEVOU0lPTl9DUkVBVEUgY2Fz ZS4KICAqLwogc3RhdGljIE1kZmRWZWMgKgotX21kZmRfZ2V0c2VnKFNNZ3JSZWxhdGlvbiByZWxu LCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsa25vLAorX21kZmRfZ2V0c2VnKFNN Z3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9ja051bWJlciBibGtubywKIAkJCSBib29sIHNraXBGc3lu YywgaW50IGJlaGF2aW9yKQogewogCU1kZmRWZWMgICAgKnY7CkBAIC0xMjM4LDkgKzExOTQsOSBA QCBfbWRmZF9nZXRzZWcoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxv Y2tOdW1iZXIgYmxrbm8sCiAJdGFyZ2V0c2VnID0gYmxrbm8gLyAoKEJsb2NrTnVtYmVyKSBSRUxT RUdfU0laRSk7CiAKIAkvKiBpZiBhbiBleGlzdGluZyBhbmQgb3BlbmVkIHNlZ21lbnQsIHdlJ3Jl IGRvbmUgKi8KLQlpZiAodGFyZ2V0c2VnIDwgcmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVt XSkKKwlpZiAodGFyZ2V0c2VnIDwgc2ZpbGUtPm1kX251bV9vcGVuX3NlZ3MpCiAJewotCQl2ID0g JnJlbG4tPm1kX3NlZ19mZHNbZm9ya251bV1bdGFyZ2V0c2VnXTsKKwkJdiA9ICZzZmlsZS0+bWRf c2VnX2Zkc1t0YXJnZXRzZWddOwogCQlyZXR1cm4gdjsKIAl9CiAKQEAgLTEyNTUsMTkgKzEyMTEs MTkgQEAgX21kZmRfZ2V0c2VnKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0s IEJsb2NrTnVtYmVyIGJsa25vLAogCSAqICdiZWhhdmlvcicpLiBTdGFydCB3aXRoIGVpdGhlciB0 aGUgbGFzdCBvcGVuZWQsIG9yIHRoZSBmaXJzdCBzZWdtZW50IGlmCiAJICogbm9uZSB3YXMgb3Bl bmVkIGJlZm9yZS4KIAkgKi8KLQlpZiAocmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXSA+ IDApCi0JCXYgPSAmcmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVtXVtyZWxuLT5tZF9udW1fb3Blbl9z ZWdzW2ZvcmtudW1dIC0gMV07CisJaWYgKHNmaWxlLT5tZF9udW1fb3Blbl9zZWdzID4gMCkKKwkJ diA9ICZzZmlsZS0+bWRfc2VnX2Zkc1tzZmlsZS0+bWRfbnVtX29wZW5fc2VncyAtIDFdOwogCWVs c2UKIAl7Ci0JCXYgPSBtZG9wZW5mb3JrKHJlbG4sIGZvcmtudW0sIGJlaGF2aW9yKTsKKwkJdiA9 IG1kb3BlbmZvcmsoc2ZpbGUsIGJlaGF2aW9yKTsKIAkJaWYgKCF2KQogCQkJcmV0dXJuIE5VTEw7 CQkvKiBpZiBiZWhhdmlvciAmIEVYVEVOU0lPTl9SRVRVUk5fTlVMTCAqLwogCX0KIAotCWZvciAo bmV4dHNlZ25vID0gcmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXTsKKwlmb3IgKG5leHRz ZWdubyA9IHNmaWxlLT5tZF9udW1fb3Blbl9zZWdzOwogCQkgbmV4dHNlZ25vIDw9IHRhcmdldHNl ZzsgbmV4dHNlZ25vKyspCiAJewotCQlCbG9ja051bWJlciBuYmxvY2tzID0gX21kbmJsb2Nrcyhy ZWxuLCBmb3JrbnVtLCB2KTsKKwkJQmxvY2tOdW1iZXIgbmJsb2NrcyA9IF9tZG5ibG9ja3Moc2Zp bGUsIHYpOwogCQlpbnQJCQlmbGFncyA9IDA7CiAKIAkJQXNzZXJ0KG5leHRzZWdubyA9PSB2LT5t ZGZkX3NlZ25vICsgMSk7CkBAIC0xMjk2LDcgKzEyNTIsNyBAQCBfbWRmZF9nZXRzZWcoU01nclJl bGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxrbm8sCiAJCQl7 CiAJCQkJY2hhcgkgICAqemVyb2J1ZiA9IHBhbGxvYzAoQkxDS1NaKTsKIAotCQkJCW1kZXh0ZW5k KHJlbG4sIGZvcmtudW0sCisJCQkJbWRleHRlbmQoc2ZpbGUsCiAJCQkJCQkgbmV4dHNlZ25vICog KChCbG9ja051bWJlcikgUkVMU0VHX1NJWkUpIC0gMSwKIAkJCQkJCSB6ZXJvYnVmLCBza2lwRnN5 bmMpOwogCQkJCXBmcmVlKHplcm9idWYpOwpAQCAtMTMyNywxMSArMTI4MywxMSBAQCBfbWRmZF9n ZXRzZWcoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIg Ymxrbm8sCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3Mo KSwKIAkJCQkJIGVycm1zZygiY291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgKHRhcmdldCBibG9j ayAldSk6IHByZXZpb3VzIHNlZ21lbnQgaXMgb25seSAldSBibG9ja3MiLAotCQkJCQkJCV9tZGZk X3NlZ3BhdGgocmVsbiwgZm9ya251bSwgbmV4dHNlZ25vKSwKKwkJCQkJCQlfbWRmZF9zZWdwYXRo KHNmaWxlLCBuZXh0c2Vnbm8pLAogCQkJCQkJCWJsa25vLCBuYmxvY2tzKSkpOwogCQl9CiAKLQkJ diA9IF9tZGZkX29wZW5zZWcocmVsbiwgZm9ya251bSwgbmV4dHNlZ25vLCBmbGFncyk7CisJCXYg PSBfbWRmZF9vcGVuc2VnKHNmaWxlLCBuZXh0c2Vnbm8sIGZsYWdzKTsKIAogCQlpZiAodiA9PSBO VUxMKQogCQl7CkBAIC0xMzQxLDcgKzEyOTcsNyBAQCBfbWRmZF9nZXRzZWcoU01nclJlbGF0aW9u IHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxrbm8sCiAJCQllcmVwb3J0 KEVSUk9SLAogCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKIAkJCQkJIGVycm1zZygi Y291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgKHRhcmdldCBibG9jayAldSk6ICVtIiwKLQkJCQkJ CQlfbWRmZF9zZWdwYXRoKHJlbG4sIGZvcmtudW0sIG5leHRzZWdubyksCisJCQkJCQkJX21kZmRf c2VncGF0aChzZmlsZSwgbmV4dHNlZ25vKSwKIAkJCQkJCQlibGtubykpKTsKIAkJfQogCX0KQEAg LTEzNTMsNyArMTMwOSw3IEBAIF9tZGZkX2dldHNlZyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051 bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibGtubywKICAqIEdldCBudW1iZXIgb2YgYmxvY2tz IHByZXNlbnQgaW4gYSBzaW5nbGUgZGlzayBmaWxlCiAgKi8KIHN0YXRpYyBCbG9ja051bWJlcgot X21kbmJsb2NrcyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBNZGZkVmVj ICpzZWcpCitfbWRuYmxvY2tzKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBNZGZkVmVjICpzZWcpCiB7 CiAJb2ZmX3QJCWxlbjsKIApAQCAtMTM3NiwxNiArMTMzMiwxNiBAQCBfbWRuYmxvY2tzKFNNZ3JS ZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIE1kZmRWZWMgKnNlZykKIGludAogbWRz eW5jZmlsZXRhZyhjb25zdCBGaWxlVGFnICpmdGFnLCBjaGFyICpwYXRoKQogewotCVNNZ3JSZWxh dGlvbiByZWxuID0gc21ncm9wZW4oZnRhZy0+cmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQpOwor CVNNZ3JGaWxlSGFuZGxlIHNmaWxlID0gc21ncm9wZW4oZnRhZy0+cmxvY2F0b3IsIEludmFsaWRC YWNrZW5kSWQsIGZ0YWctPmZvcmtudW0pOwogCUZpbGUJCWZpbGU7CiAJYm9vbAkJbmVlZF90b19j bG9zZTsKIAlpbnQJCQlyZXN1bHQsCiAJCQkJc2F2ZV9lcnJubzsKIAogCS8qIFNlZSBpZiB3ZSBh bHJlYWR5IGhhdmUgdGhlIGZpbGUgb3Blbiwgb3IgbmVlZCB0byBvcGVuIGl0LiAqLwotCWlmIChm dGFnLT5zZWdubyA8IHJlbG4tPm1kX251bV9vcGVuX3NlZ3NbZnRhZy0+Zm9ya251bV0pCisJaWYg KGZ0YWctPnNlZ25vIDwgc2ZpbGUtPm1kX251bV9vcGVuX3NlZ3MpCiAJewotCQlmaWxlID0gcmVs bi0+bWRfc2VnX2Zkc1tmdGFnLT5mb3JrbnVtXVtmdGFnLT5zZWdub10ubWRmZF92ZmQ7CisJCWZp bGUgPSBzZmlsZS0+bWRfc2VnX2Zkc1tmdGFnLT5zZWdub10ubWRmZF92ZmQ7CiAJCXN0cmxjcHko cGF0aCwgRmlsZVBhdGhOYW1lKGZpbGUpLCBNQVhQR1BBVEgpOwogCQluZWVkX3RvX2Nsb3NlID0g ZmFsc2U7CiAJfQpAQCAtMTM5Myw3ICsxMzQ5LDcgQEAgbWRzeW5jZmlsZXRhZyhjb25zdCBGaWxl VGFnICpmdGFnLCBjaGFyICpwYXRoKQogCXsKIAkJY2hhcgkgICAqcDsKIAotCQlwID0gX21kZmRf c2VncGF0aChyZWxuLCBmdGFnLT5mb3JrbnVtLCBmdGFnLT5zZWdubyk7CisJCXAgPSBfbWRmZF9z ZWdwYXRoKHNmaWxlLCBmdGFnLT5zZWdubyk7CiAJCXN0cmxjcHkocGF0aCwgcCwgTUFYUEdQQVRI KTsKIAkJcGZyZWUocCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc21nci9z bWdyLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3Ivc21nci5jCmluZGV4IGMxYTVmZWJjYmZk Li5kZTEwMzMyMDU3NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL3NtZ3Iu YworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3Ivc21nci5jCkBAIC00MSwyNyArNDEsMjQg QEAgdHlwZWRlZiBzdHJ1Y3QgZl9zbWdyCiB7CiAJdm9pZAkJKCpzbWdyX2luaXQpICh2b2lkKTsJ LyogbWF5IGJlIE5VTEwgKi8KIAl2b2lkCQkoKnNtZ3Jfc2h1dGRvd24pICh2b2lkKTsJLyogbWF5 IGJlIE5VTEwgKi8KLQl2b2lkCQkoKnNtZ3Jfb3BlbikgKFNNZ3JSZWxhdGlvbiByZWxuKTsKLQl2 b2lkCQkoKnNtZ3JfY2xvc2UpIChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVt KTsKLQl2b2lkCQkoKnNtZ3JfY3JlYXRlKSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIg Zm9ya251bSwKLQkJCQkJCQkJYm9vbCBpc1JlZG8pOwotCWJvb2wJCSgqc21ncl9leGlzdHMpIChT TWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKTsKLQl2b2lkCQkoKnNtZ3JfdW5s aW5rKSAoUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0s Ci0JCQkJCQkJCWJvb2wgaXNSZWRvKTsKLQl2b2lkCQkoKnNtZ3JfZXh0ZW5kKSAoU01nclJlbGF0 aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKKwl2b2lkCQkoKnNtZ3Jfb3BlbikgKFNNZ3JG aWxlSGFuZGxlIHNmaWxlKTsKKwl2b2lkCQkoKnNtZ3JfY2xvc2UpIChTTWdyRmlsZUhhbmRsZSBz ZmlsZSk7CisJdm9pZAkJKCpzbWdyX2NyZWF0ZSkgKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBib29s IGlzUmVkbyk7CisJYm9vbAkJKCpzbWdyX2V4aXN0cykgKFNNZ3JGaWxlSGFuZGxlIHNmaWxlKTsK Kwl2b2lkCQkoKnNtZ3JfdW5saW5rKSAoU01nckZpbGVMb2NhdG9yIHNsb2NhdG9yLCBib29sIGlz UmVkbyk7CisJdm9pZAkJKCpzbWdyX2V4dGVuZCkgKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLAogCQkJ CQkJCQlCbG9ja051bWJlciBibG9ja251bSwgY2hhciAqYnVmZmVyLCBib29sIHNraXBGc3luYyk7 Ci0JYm9vbAkJKCpzbWdyX3ByZWZldGNoKSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIg Zm9ya251bSwKKwlib29sCQkoKnNtZ3JfcHJlZmV0Y2gpIChTTWdyRmlsZUhhbmRsZSBzZmlsZSwK IAkJCQkJCQkJICBCbG9ja051bWJlciBibG9ja251bSk7Ci0Jdm9pZAkJKCpzbWdyX3JlYWQpIChT TWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAorCXZvaWQJCSgqc21ncl9yZWFk KSAoU01nckZpbGVIYW5kbGUgc2ZpbGUsCiAJCQkJCQkJICBCbG9ja051bWJlciBibG9ja251bSwg Y2hhciAqYnVmZmVyKTsKLQl2b2lkCQkoKnNtZ3Jfd3JpdGUpIChTTWdyUmVsYXRpb24gcmVsbiwg Rm9ya051bWJlciBmb3JrbnVtLAorCXZvaWQJCSgqc21ncl93cml0ZSkgKFNNZ3JGaWxlSGFuZGxl IHNmaWxlLAogCQkJCQkJCSAgIEJsb2NrTnVtYmVyIGJsb2NrbnVtLCBjaGFyICpidWZmZXIsIGJv b2wgc2tpcEZzeW5jKTsKLQl2b2lkCQkoKnNtZ3Jfd3JpdGViYWNrKSAoU01nclJlbGF0aW9uIHJl bG4sIEZvcmtOdW1iZXIgZm9ya251bSwKKwl2b2lkCQkoKnNtZ3Jfd3JpdGViYWNrKSAoU01nckZp bGVIYW5kbGUgc2ZpbGUsCiAJCQkJCQkJCSAgIEJsb2NrTnVtYmVyIGJsb2NrbnVtLCBCbG9ja051 bWJlciBuYmxvY2tzKTsKLQlCbG9ja051bWJlciAoKnNtZ3JfbmJsb2NrcykgKFNNZ3JSZWxhdGlv biByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pOwotCXZvaWQJCSgqc21ncl90cnVuY2F0ZSkgKFNN Z3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCi0JCQkJCQkJCSAgQmxvY2tOdW1i ZXIgbmJsb2Nrcyk7Ci0Jdm9pZAkJKCpzbWdyX2ltbWVkc3luYykgKFNNZ3JSZWxhdGlvbiByZWxu LCBGb3JrTnVtYmVyIGZvcmtudW0pOworCUJsb2NrTnVtYmVyICgqc21ncl9uYmxvY2tzKSAoU01n ckZpbGVIYW5kbGUgc2ZpbGUpOworCXZvaWQJCSgqc21ncl90cnVuY2F0ZSkgKFNNZ3JGaWxlSGFu ZGxlIHNmaWxlLCBCbG9ja051bWJlciBuYmxvY2tzKTsKKwl2b2lkCQkoKnNtZ3JfaW1tZWRzeW5j KSAoU01nckZpbGVIYW5kbGUgc2ZpbGUpOwogfSBmX3NtZ3I7CiAKIHN0YXRpYyBjb25zdCBmX3Nt Z3Igc21ncnN3W10gPSB7CkBAIC04OCwxMiArODUsMTIgQEAgc3RhdGljIGNvbnN0IGZfc21nciBz bWdyc3dbXSA9IHsKIHN0YXRpYyBjb25zdCBpbnQgTlNtZ3IgPSBsZW5ndGhvZihzbWdyc3cpOwog CiAvKgotICogRWFjaCBiYWNrZW5kIGhhcyBhIGhhc2h0YWJsZSB0aGF0IHN0b3JlcyBhbGwgZXh0 YW50IFNNZ3JSZWxhdGlvbiBvYmplY3RzLgotICogSW4gYWRkaXRpb24sICJ1bm93bmVkIiBTTWdy UmVsYXRpb24gb2JqZWN0cyBhcmUgY2hhaW5lZCB0b2dldGhlciBpbiBhIGxpc3QuCisgKiBFYWNo IGJhY2tlbmQgaGFzIGEgaGFzaHRhYmxlIHRoYXQgc3RvcmVzIGFsbCBleHRhbnQgU01nckZpbGVE YXRhIG9iamVjdHMuCisgKiBJbiBhZGRpdGlvbiwgInVub3duZWQiIFNNZ3JGaWxlIG9iamVjdHMg YXJlIGNoYWluZWQgdG9nZXRoZXIgaW4gYSBsaXN0LgogICovCi1zdGF0aWMgSFRBQiAqU01nclJl bGF0aW9uSGFzaCA9IE5VTEw7CitzdGF0aWMgSFRBQiAqU01nckZpbGVIYXNoID0gTlVMTDsKIAot c3RhdGljIGRsaXN0X2hlYWQgdW5vd25lZF9yZWxuczsKK3N0YXRpYyBkbGlzdF9oZWFkIHVub3du ZWRfc2ZpbGVzOwogCiAvKiBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzICovCiBzdGF0aWMgdm9p ZCBzbWdyc2h1dGRvd24oaW50IGNvZGUsIERhdHVtIGFyZyk7CkBAIC0xNDIsNTAgKzEzOSw1MCBA QCBzbWdyc2h1dGRvd24oaW50IGNvZGUsIERhdHVtIGFyZykKICAqCiAgKgkJVGhpcyBkb2VzIG5v dCBhdHRlbXB0IHRvIGFjdHVhbGx5IG9wZW4gdGhlIHVuZGVybHlpbmcgZmlsZS4KICAqLwotU01n clJlbGF0aW9uCi1zbWdyb3BlbihSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgQmFja2VuZElkIGJh Y2tlbmQpCitTTWdyRmlsZUhhbmRsZQorc21ncm9wZW4oUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3Is IEJhY2tlbmRJZCBiYWNrZW5kLCBGb3JrTnVtYmVyIGZvcmtOdW0pCiB7Ci0JUmVsRmlsZUxvY2F0 b3JCYWNrZW5kIGJybG9jYXRvcjsKLQlTTWdyUmVsYXRpb24gcmVsbjsKKwlTTWdyRmlsZUxvY2F0 b3Igc2xvY2F0b3I7CisJU01nckZpbGVIYW5kbGUgc2ZpbGU7CiAJYm9vbAkJZm91bmQ7CiAKLQlp ZiAoU01nclJlbGF0aW9uSGFzaCA9PSBOVUxMKQorCWlmIChTTWdyRmlsZUhhc2ggPT0gTlVMTCkK IAl7CiAJCS8qIEZpcnN0IHRpbWUgdGhyb3VnaDogaW5pdGlhbGl6ZSB0aGUgaGFzaCB0YWJsZSAq LwogCQlIQVNIQ1RMCQljdGw7CiAKLQkJY3RsLmtleXNpemUgPSBzaXplb2YoUmVsRmlsZUxvY2F0 b3JCYWNrZW5kKTsKLQkJY3RsLmVudHJ5c2l6ZSA9IHNpemVvZihTTWdyUmVsYXRpb25EYXRhKTsK LQkJU01nclJlbGF0aW9uSGFzaCA9IGhhc2hfY3JlYXRlKCJzbWdyIHJlbGF0aW9uIHRhYmxlIiwg NDAwLAorCQljdGwua2V5c2l6ZSA9IHNpemVvZihTTWdyRmlsZUxvY2F0b3IpOworCQljdGwuZW50 cnlzaXplID0gc2l6ZW9mKFNNZ3JGaWxlRGF0YSk7CisJCVNNZ3JGaWxlSGFzaCA9IGhhc2hfY3Jl YXRlKCJzbWdyIHJlbGF0aW9uIHRhYmxlIiwgNDAwLAogCQkJCQkJCQkJICAgJmN0bCwgSEFTSF9F TEVNIHwgSEFTSF9CTE9CUyk7Ci0JCWRsaXN0X2luaXQoJnVub3duZWRfcmVsbnMpOworCQlkbGlz dF9pbml0KCZ1bm93bmVkX3NmaWxlcyk7CiAJfQogCiAJLyogTG9vayB1cCBvciBjcmVhdGUgYW4g ZW50cnkgKi8KLQlicmxvY2F0b3IubG9jYXRvciA9IHJsb2NhdG9yOwotCWJybG9jYXRvci5iYWNr ZW5kID0gYmFja2VuZDsKLQlyZWxuID0gKFNNZ3JSZWxhdGlvbikgaGFzaF9zZWFyY2goU01nclJl bGF0aW9uSGFzaCwKLQkJCQkJCQkJCSAgKHZvaWQgKikgJmJybG9jYXRvciwKLQkJCQkJCQkJCSAg SEFTSF9FTlRFUiwgJmZvdW5kKTsKKwlzbG9jYXRvci5sb2NhdG9yID0gcmxvY2F0b3I7CisJc2xv Y2F0b3IuYmFja2VuZCA9IGJhY2tlbmQ7CisJc2xvY2F0b3IuZm9ya251bSA9IGZvcmtOdW07CisJ c2ZpbGUgPSAoU01nckZpbGVIYW5kbGUpIGhhc2hfc2VhcmNoKFNNZ3JGaWxlSGFzaCwKKwkJCQkJ CQkJCQkgKHZvaWQgKikgJnNsb2NhdG9yLAorCQkJCQkJCQkJCSBIQVNIX0VOVEVSLCAmZm91bmQp OwogCiAJLyogSW5pdGlhbGl6ZSBpdCBpZiBub3QgcHJlc2VudCBiZWZvcmUgKi8KIAlpZiAoIWZv dW5kKQogCXsKIAkJLyogaGFzaF9zZWFyY2ggYWxyZWFkeSBmaWxsZWQgaW4gdGhlIGxvb2t1cCBr ZXkgKi8KLQkJcmVsbi0+c21ncl9vd25lciA9IE5VTEw7Ci0JCXJlbG4tPnNtZ3JfdGFyZ2Jsb2Nr ID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCQlmb3IgKGludCBpID0gMDsgaSA8PSBNQVhfRk9SS05V TTsgKytpKQotCQkJcmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tpXSA9IEludmFsaWRCbG9ja051 bWJlcjsKLQkJcmVsbi0+c21ncl93aGljaCA9IDA7CS8qIHdlIG9ubHkgaGF2ZSBtZC5jIGF0IHBy ZXNlbnQgKi8KKwkJc2ZpbGUtPnNtZ3Jfb3duZXIgPSBOVUxMOworCQlzZmlsZS0+c21ncl90YXJn YmxvY2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJCXNmaWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tz ID0gSW52YWxpZEJsb2NrTnVtYmVyOworCQlzZmlsZS0+c21ncl93aGljaCA9IDA7CS8qIHdlIG9u bHkgaGF2ZSBtZC5jIGF0IHByZXNlbnQgKi8KIAogCQkvKiBpbXBsZW1lbnRhdGlvbi1zcGVjaWZp YyBpbml0aWFsaXphdGlvbiAqLwotCQlzbWdyc3dbcmVsbi0+c21ncl93aGljaF0uc21ncl9vcGVu KHJlbG4pOworCQlzbWdyc3dbc2ZpbGUtPnNtZ3Jfd2hpY2hdLnNtZ3Jfb3BlbihzZmlsZSk7CiAK IAkJLyogaXQgaGFzIG5vIG93bmVyIHlldCAqLwotCQlkbGlzdF9wdXNoX3RhaWwoJnVub3duZWRf cmVsbnMsICZyZWxuLT5ub2RlKTsKKwkJZGxpc3RfcHVzaF90YWlsKCZ1bm93bmVkX3NmaWxlcywg JnNmaWxlLT5ub2RlKTsKIAl9CiAKLQlyZXR1cm4gcmVsbjsKKwlyZXR1cm4gc2ZpbGU7CiB9CiAK IC8qCkBAIC0xOTUsNyArMTkyLDcgQEAgc21ncm9wZW4oUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3Is IEJhY2tlbmRJZCBiYWNrZW5kKQogICogdGhlIG9ubHkgc3VjaCBvd25lcnMgZXhpc3QgaW4gdGhl IHJlbGNhY2hlLgogICovCiB2b2lkCi1zbWdyc2V0b3duZXIoU01nclJlbGF0aW9uICpvd25lciwg U01nclJlbGF0aW9uIHJlbG4pCitzbWdyc2V0b3duZXIoU01nckZpbGVIYW5kbGUgKm93bmVyLCBT TWdyRmlsZUhhbmRsZSBzZmlsZSkKIHsKIAkvKiBXZSBkb24ndCBzdXBwb3J0ICJkaXNvd25pbmci IGFuIFNNZ3JSZWxhdGlvbiBoZXJlLCB1c2Ugc21ncmNsZWFyb3duZXIgKi8KIAlBc3NlcnQob3du ZXIgIT0gTlVMTCk7CkBAIC0yMDYsNjggKzIwMyw2NiBAQCBzbWdyc2V0b3duZXIoU01nclJlbGF0 aW9uICpvd25lciwgU01nclJlbGF0aW9uIHJlbG4pCiAJICogZGVwZW5kaW5nIG9uIHRoZSBvcmRl ciBvZiBwcm9jZXNzaW5nLiAgSXQncyBvayB0byBjbG9zZSB0aGUgb2xkCiAJICogcmVsY2FjaGUg ZW50cnkgZWFybHkgaW4gdGhhdCBjYXNlLikKIAkgKgotCSAqIElmIHRoZXJlIGlzbid0IGFuIG9s ZCBvd25lciwgdGhlbiB0aGUgcmVsbiBzaG91bGQgYmUgaW4gdGhlIHVub3duZWQKKwkgKiBJZiB0 aGVyZSBpc24ndCBhbiBvbGQgb3duZXIsIHRoZW4gdGhlIHNmaWxlIHNob3VsZCBiZSBpbiB0aGUg dW5vd25lZAogCSAqIGxpc3QsIGFuZCB3ZSBuZWVkIHRvIHJlbW92ZSBpdC4KIAkgKi8KLQlpZiAo cmVsbi0+c21ncl9vd25lcikKLQkJKihyZWxuLT5zbWdyX293bmVyKSA9IE5VTEw7CisJaWYgKHNm aWxlLT5zbWdyX293bmVyKQorCQkqKHNmaWxlLT5zbWdyX293bmVyKSA9IE5VTEw7CiAJZWxzZQot CQlkbGlzdF9kZWxldGUoJnJlbG4tPm5vZGUpOworCQlkbGlzdF9kZWxldGUoJnNmaWxlLT5ub2Rl KTsKIAogCS8qIE5vdyBlc3RhYmxpc2ggdGhlIG93bmVyc2hpcCByZWxhdGlvbnNoaXAuICovCi0J cmVsbi0+c21ncl9vd25lciA9IG93bmVyOwotCSpvd25lciA9IHJlbG47CisJc2ZpbGUtPnNtZ3Jf b3duZXIgPSBvd25lcjsKKwkqb3duZXIgPSBzZmlsZTsKIH0KIAogLyoKLSAqIHNtZ3JjbGVhcm93 bmVyKCkgLS0gUmVtb3ZlIGxvbmctbGl2ZWQgcmVmZXJlbmNlIHRvIGFuIFNNZ3JSZWxhdGlvbiBv YmplY3QKKyAqIHNtZ3JjbGVhcm93bmVyKCkgLS0gUmVtb3ZlIGxvbmctbGl2ZWQgcmVmZXJlbmNl IHRvIGFuIFNNZ3JGaWxlSGFuZGxlIG9iamVjdAogICoJCQkJCSAgIGlmIG9uZSBleGlzdHMKICAq Lwogdm9pZAotc21ncmNsZWFyb3duZXIoU01nclJlbGF0aW9uICpvd25lciwgU01nclJlbGF0aW9u IHJlbG4pCitzbWdyY2xlYXJvd25lcihTTWdyRmlsZUhhbmRsZSAqb3duZXIsIFNNZ3JGaWxlSGFu ZGxlIHNmaWxlKQogewogCS8qIERvIG5vdGhpbmcgaWYgdGhlIFNNZ3JSZWxhdGlvbiBvYmplY3Qg aXMgbm90IG93bmVkIGJ5IHRoZSBvd25lciAqLwotCWlmIChyZWxuLT5zbWdyX293bmVyICE9IG93 bmVyKQorCWlmIChzZmlsZS0+c21ncl9vd25lciAhPSBvd25lcikKIAkJcmV0dXJuOwogCiAJLyog dW5zZXQgdGhlIG93bmVyJ3MgcmVmZXJlbmNlICovCiAJKm93bmVyID0gTlVMTDsKIAogCS8qIHVu c2V0IG91ciByZWZlcmVuY2UgdG8gdGhlIG93bmVyICovCi0JcmVsbi0+c21ncl9vd25lciA9IE5V TEw7CisJc2ZpbGUtPnNtZ3Jfb3duZXIgPSBOVUxMOwogCiAJLyogYWRkIHRvIGxpc3Qgb2YgdW5v d25lZCByZWxhdGlvbnMgKi8KLQlkbGlzdF9wdXNoX3RhaWwoJnVub3duZWRfcmVsbnMsICZyZWxu LT5ub2RlKTsKKwlkbGlzdF9wdXNoX3RhaWwoJnVub3duZWRfc2ZpbGVzLCAmc2ZpbGUtPm5vZGUp OwogfQogCiAvKgotICoJc21ncmV4aXN0cygpIC0tIERvZXMgdGhlIHVuZGVybHlpbmcgZmlsZSBm b3IgYSBmb3JrIGV4aXN0PworICoJc21ncmV4aXN0cygpIC0tIERvZXMgdGhlIHVuZGVybHlpbmcg ZmlsZSBleGlzdD8KICAqLwogYm9vbAotc21ncmV4aXN0cyhTTWdyUmVsYXRpb24gcmVsbiwgRm9y a051bWJlciBmb3JrbnVtKQorc21ncmV4aXN0cyhTTWdyRmlsZUhhbmRsZSBzZmlsZSkKIHsKLQly ZXR1cm4gc21ncnN3W3JlbG4tPnNtZ3Jfd2hpY2hdLnNtZ3JfZXhpc3RzKHJlbG4sIGZvcmtudW0p OworCXJldHVybiBzbWdyc3dbc2ZpbGUtPnNtZ3Jfd2hpY2hdLnNtZ3JfZXhpc3RzKHNmaWxlKTsK IH0KIAogLyoKLSAqCXNtZ3JjbG9zZSgpIC0tIENsb3NlIGFuZCBkZWxldGUgYW4gU01nclJlbGF0 aW9uIG9iamVjdC4KKyAqCXNtZ3JjbG9zZSgpIC0tIENsb3NlIGFuZCBkZWxldGUgYW4gU01nckZp bGUgb2JqZWN0LgogICovCiB2b2lkCi1zbWdyY2xvc2UoU01nclJlbGF0aW9uIHJlbG4pCitzbWdy Y2xvc2UoU01nckZpbGVIYW5kbGUgc2ZpbGUpCiB7Ci0JU01nclJlbGF0aW9uICpvd25lcjsKLQlG b3JrTnVtYmVyCWZvcmtudW07CisJU01nckZpbGVIYW5kbGUgKm93bmVyOwogCi0JZm9yIChmb3Jr bnVtID0gMDsgZm9ya251bSA8PSBNQVhfRk9SS05VTTsgZm9ya251bSsrKQotCQlzbWdyc3dbcmVs bi0+c21ncl93aGljaF0uc21ncl9jbG9zZShyZWxuLCBmb3JrbnVtKTsKKwlzbWdyc3dbc2ZpbGUt PnNtZ3Jfd2hpY2hdLnNtZ3JfY2xvc2Uoc2ZpbGUpOwogCi0Jb3duZXIgPSByZWxuLT5zbWdyX293 bmVyOworCW93bmVyID0gc2ZpbGUtPnNtZ3Jfb3duZXI7CiAKIAlpZiAoIW93bmVyKQotCQlkbGlz dF9kZWxldGUoJnJlbG4tPm5vZGUpOworCQlkbGlzdF9kZWxldGUoJnNmaWxlLT5ub2RlKTsKIAot CWlmIChoYXNoX3NlYXJjaChTTWdyUmVsYXRpb25IYXNoLAotCQkJCQkodm9pZCAqKSAmKHJlbG4t PnNtZ3JfcmxvY2F0b3IpLAorCWlmIChoYXNoX3NlYXJjaChTTWdyRmlsZUhhc2gsCisJCQkJCSh2 b2lkICopICYoc2ZpbGUtPnNtZ3JfbG9jYXRvciksCiAJCQkJCUhBU0hfUkVNT1ZFLCBOVUxMKSA9 PSBOVUxMKQogCQllbG9nKEVSUk9SLCAiU01nclJlbGF0aW9uIGhhc2h0YWJsZSBjb3JydXB0ZWQi KTsKIApAQCAtMjg0LDE0ICsyNzksMTEgQEAgc21ncmNsb3NlKFNNZ3JSZWxhdGlvbiByZWxuKQog ICoKICAqCVRoZSBvYmplY3QgcmVtYWlucyB2YWxpZC4KICAqLwotdm9pZAotc21ncnJlbGVhc2Uo U01nclJlbGF0aW9uIHJlbG4pCitzdGF0aWMgdm9pZAorc21ncnJlbGVhc2UoU01nckZpbGVIYW5k bGUgc2ZpbGUpCiB7Ci0JZm9yIChGb3JrTnVtYmVyIGZvcmtudW0gPSAwOyBmb3JrbnVtIDw9IE1B WF9GT1JLTlVNOyBmb3JrbnVtKyspCi0JewotCQlzbWdyc3dbcmVsbi0+c21ncl93aGljaF0uc21n cl9jbG9zZShyZWxuLCBmb3JrbnVtKTsKLQkJcmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tmb3Jr bnVtXSA9IEludmFsaWRCbG9ja051bWJlcjsKLQl9CisJc21ncnN3W3NmaWxlLT5zbWdyX3doaWNo XS5zbWdyX2Nsb3NlKHNmaWxlKTsKKwlzZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9IEludmFs aWRCbG9ja051bWJlcjsKIH0KIAogLyoKQEAgLTMwMywxNiArMjk1LDE2IEBAIHZvaWQKIHNtZ3Jy ZWxlYXNlYWxsKHZvaWQpCiB7CiAJSEFTSF9TRVFfU1RBVFVTIHN0YXR1czsKLQlTTWdyUmVsYXRp b24gcmVsbjsKKwlTTWdyRmlsZUhhbmRsZSBzZmlsZTsKIAogCS8qIE5vdGhpbmcgdG8gZG8gaWYg aGFzaHRhYmxlIG5vdCBzZXQgdXAgKi8KLQlpZiAoU01nclJlbGF0aW9uSGFzaCA9PSBOVUxMKQor CWlmIChTTWdyRmlsZUhhc2ggPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JaGFzaF9zZXFfaW5pdCgm c3RhdHVzLCBTTWdyUmVsYXRpb25IYXNoKTsKKwloYXNoX3NlcV9pbml0KCZzdGF0dXMsIFNNZ3JG aWxlSGFzaCk7CiAKLQl3aGlsZSAoKHJlbG4gPSAoU01nclJlbGF0aW9uKSBoYXNoX3NlcV9zZWFy Y2goJnN0YXR1cykpICE9IE5VTEwpCi0JCXNtZ3JyZWxlYXNlKHJlbG4pOworCXdoaWxlICgoc2Zp bGUgPSAoU01nckZpbGVIYW5kbGUpIGhhc2hfc2VxX3NlYXJjaCgmc3RhdHVzKSkgIT0gTlVMTCkK KwkJc21ncnJlbGVhc2Uoc2ZpbGUpOwogfQogCiAvKgpAQCAtMzIyLDE2ICszMTQsMTYgQEAgdm9p ZAogc21ncmNsb3NlYWxsKHZvaWQpCiB7CiAJSEFTSF9TRVFfU1RBVFVTIHN0YXR1czsKLQlTTWdy UmVsYXRpb24gcmVsbjsKKwlTTWdyRmlsZUhhbmRsZSBzZmlsZTsKIAogCS8qIE5vdGhpbmcgdG8g ZG8gaWYgaGFzaHRhYmxlIG5vdCBzZXQgdXAgKi8KLQlpZiAoU01nclJlbGF0aW9uSGFzaCA9PSBO VUxMKQorCWlmIChTTWdyRmlsZUhhc2ggPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JaGFzaF9zZXFf aW5pdCgmc3RhdHVzLCBTTWdyUmVsYXRpb25IYXNoKTsKKwloYXNoX3NlcV9pbml0KCZzdGF0dXMs IFNNZ3JGaWxlSGFzaCk7CiAKLQl3aGlsZSAoKHJlbG4gPSAoU01nclJlbGF0aW9uKSBoYXNoX3Nl cV9zZWFyY2goJnN0YXR1cykpICE9IE5VTEwpCi0JCXNtZ3JjbG9zZShyZWxuKTsKKwl3aGlsZSAo KHNmaWxlID0gKFNNZ3JGaWxlSGFuZGxlKSBoYXNoX3NlcV9zZWFyY2goJnN0YXR1cykpICE9IE5V TEwpCisJCXNtZ3JjbG9zZShzZmlsZSk7CiB9CiAKIC8qCkBAIC0zNDMsMTExICszMzUsMTEyIEBA IHNtZ3JjbG9zZWFsbCh2b2lkKQogICogc3VjaCBlbnRyeSBleGlzdHMgYWxyZWFkeS4KICAqLwog dm9pZAotc21ncmNsb3NlcmVsbG9jYXRvcihSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3Ip CitzbWdyY2xvc2VyZWxsb2NhdG9yKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBCYWNrZW5kSWQg YmFja2VuZCkKIHsKLQlTTWdyUmVsYXRpb24gcmVsbjsKKwlTTWdyRmlsZUhhbmRsZSBzZmlsZTsK IAogCS8qIE5vdGhpbmcgdG8gZG8gaWYgaGFzaHRhYmxlIG5vdCBzZXQgdXAgKi8KLQlpZiAoU01n clJlbGF0aW9uSGFzaCA9PSBOVUxMKQorCWlmIChTTWdyRmlsZUhhc2ggPT0gTlVMTCkKIAkJcmV0 dXJuOwogCi0JcmVsbiA9IChTTWdyUmVsYXRpb24pIGhhc2hfc2VhcmNoKFNNZ3JSZWxhdGlvbkhh c2gsCi0JCQkJCQkJCQkgICh2b2lkICopICZybG9jYXRvciwKLQkJCQkJCQkJCSAgSEFTSF9GSU5E LCBOVUxMKTsKLQlpZiAocmVsbiAhPSBOVUxMKQotCQlzbWdyY2xvc2UocmVsbik7CisJZm9yIChp bnQgaSA9IDA7IGkgPD0gTUFYX0ZPUktOVU07IGkrKykKKwl7CisJCVNNZ3JGaWxlTG9jYXRvciBz bG9jYXRvciA9IHsgcmxvY2F0b3IsIGJhY2tlbmQsIGkgfTsKKworCQlzZmlsZSA9IChTTWdyRmls ZUhhbmRsZSkgaGFzaF9zZWFyY2goU01nckZpbGVIYXNoLAorCQkJCQkJCQkJCQkgKHZvaWQgKikg JnNsb2NhdG9yLAorCQkJCQkJCQkJCQkgSEFTSF9GSU5ELCBOVUxMKTsKKwkJaWYgKHNmaWxlICE9 IE5VTEwpCisJCQlzbWdyY2xvc2Uoc2ZpbGUpOworCX0KIH0KIAogLyoKLSAqCXNtZ3JjcmVhdGUo KSAtLSBDcmVhdGUgYSBuZXcgcmVsYXRpb24uCisgKglzbWdyY3JlYXRlKCkgLS0gQ3JlYXRlIGEg bmV3IGZpbGUuCiAgKgotICoJCUdpdmVuIGFuIGFscmVhZHktY3JlYXRlZCAoYnV0IHByZXN1bWFi bHkgdW51c2VkKSBTTWdyUmVsYXRpb24sCisgKgkJR2l2ZW4gYW4gYWxyZWFkeS1jcmVhdGVkIChi dXQgcHJlc3VtYWJseSB1bnVzZWQpIFNNZ3JGaWxlSGFuZGxlLAogICoJCWNhdXNlIHRoZSB1bmRl cmx5aW5nIGRpc2sgZmlsZSBvciBvdGhlciBzdG9yYWdlIGZvciB0aGUgZm9yawogICoJCXRvIGJl IGNyZWF0ZWQuCiAgKi8KIHZvaWQKLXNtZ3JjcmVhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtO dW1iZXIgZm9ya251bSwgYm9vbCBpc1JlZG8pCitzbWdyY3JlYXRlKFNNZ3JGaWxlSGFuZGxlIHNm aWxlLCBib29sIGlzUmVkbykKIHsKLQlzbWdyc3dbcmVsbi0+c21ncl93aGljaF0uc21ncl9jcmVh dGUocmVsbiwgZm9ya251bSwgaXNSZWRvKTsKKwlzbWdyc3dbc2ZpbGUtPnNtZ3Jfd2hpY2hdLnNt Z3JfY3JlYXRlKHNmaWxlLCBpc1JlZG8pOwogfQogCiAvKgotICoJc21ncmRvc3luY2FsbCgpIC0t IEltbWVkaWF0ZWx5IHN5bmMgYWxsIGZvcmtzIG9mIGFsbCBnaXZlbiByZWxhdGlvbnMKKyAqCXNt Z3J1bmxpbmtfbXVsdGkoKSAtLSBJbW1lZGlhdGVseSB1bmxpbmsgZ2l2ZW4gZm9ya3Mgb2YgZ2l2 ZW4gcmVsYXRpb24KICAqCi0gKgkJQWxsIGZvcmtzIG9mIGFsbCBnaXZlbiByZWxhdGlvbnMgYXJl IHN5bmNlZCBvdXQgdG8gdGhlIHN0b3JlLgorICoJCVRoZSBnaXZlbiBmb3JrcyBvZiB0aGUgcmVs YXRpb24gYXJlIHJlbW92ZWQgZnJvbSB0aGUgc3RvcmUuICBUaGlzCisgKgkJc2hvdWxkIG5vdCBi ZSB1c2VkIGR1cmluZyB0cmFuc2FjdGlvbmFsIG9wZXJhdGlvbnMsIHNpbmNlIGl0IGNhbid0IGJl CisgKgkJdW5kb25lLgorICoKKyAqCQlUaGlzIGhhbmRsZXMgbXVsdGlwbGUgZm9ya3MgaW4gb25l IGNhbGwsIGJlY2F1c2UgdGhlIGNhY2hlIGludmFsaWRhdGlvbgorICoJCWhhcHBlbnMgYXQgcmVs YXRpb24gZ3JhbnVsYXJpdHkuIElmIHdlIGhhZCBhbiBzbWdydW5saW5rKCkgZnVuY3Rpb24KKyAq CQl0byB1bmxpbmsganVzdCBhIHNpbmdsZSBzbWdyIGZpbGUsIGFuZCB0aGUgY2FsbGVyIHdhbnRl ZCB0byBkZWxldGUKKyAqCQltdWx0aXBsZSBmb3JrcyBvZiBhIHNpbmdsZSByZWxhdGlvbiwgZWFj aCBjYWxsIHdvdWxkIHNlbmQgYSBuZXcKKyAqCQljYWNoZSBpbnZhbGlkYXRpb24gZXZlbnQsIHdo aWNoIHdvdWxkIGJlIHdhc3RlZnVsLgogICoKLSAqCQlUaGlzIGlzIGVxdWl2YWxlbnQgdG8gRmx1 c2hSZWxhdGlvbkJ1ZmZlcnMoKSBmb3IgZWFjaCBzbWdyIHJlbGF0aW9uLAotICoJCXRoZW4gY2Fs bGluZyBzbWdyaW1tZWRzeW5jKCkgZm9yIGFsbCBmb3JrcyBvZiBlYWNoIHJlbGF0aW9uLCBidXQg aXQncwotICoJCXNpZ25pZmljYW50bHkgcXVpY2tlciBzbyBzaG91bGQgYmUgcHJlZmVycmVkIHdo ZW4gcG9zc2libGUuCisgKgkJSWYgaXNSZWRvIGlzIHRydWUsIGl0IGlzIG9rYXkgZm9yIHRoZSB1 bmRlcmx5aW5nIGZpbGUocykgdG8gYmUgZ29uZQorICoJCWFscmVhZHkuCiAgKi8KIHZvaWQKLXNt Z3Jkb3N5bmNhbGwoU01nclJlbGF0aW9uICpyZWxzLCBpbnQgbnJlbHMpCitzbWdydW5saW5rX211 bHRpKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBCYWNrZW5kSWQgYmFja2VuZCwgRm9ya051bWJl ciAqZm9ya3MsIGludCBuZm9ya3MsIGJvb2wgaXNSZWRvKQogeworCWludAkJCXdoaWNoOwogCWlu dAkJCWkgPSAwOwotCUZvcmtOdW1iZXIJZm9ya251bTsKIAotCWlmIChucmVscyA9PSAwKQotCQly ZXR1cm47CisJd2hpY2ggPSAwOwkvKiB3ZSBvbmx5IGhhdmUgbWQuYyBhdCBwcmVzZW50ICovCiAK LQlGbHVzaFJlbGF0aW9uc0FsbEJ1ZmZlcnMocmVscywgbnJlbHMpOworCS8qIENsb3NlIHRoZSBm b3JrcyBhdCBzbWdyIGxldmVsICovCisJc21ncmNsb3NlcmVsbG9jYXRvcihybG9jYXRvciwgYmFj a2VuZCk7CiAKIAkvKgotCSAqIFN5bmMgdGhlIHBoeXNpY2FsIGZpbGUocykuCisJICogU2VuZCBh IHNoYXJlZC1pbnZhbCBtZXNzYWdlIHRvIGZvcmNlIG90aGVyIGJhY2tlbmRzIHRvIGNsb3NlIGFu eQorCSAqIGRhbmdsaW5nIHNtZ3IgcmVmZXJlbmNlcyB0aGV5IG1heSBoYXZlIGZvciB0aGVzZSBy ZWxzLiAgV2Ugc2hvdWxkIGRvCisJICogdGhpcyBiZWZvcmUgc3RhcnRpbmcgdGhlIGFjdHVhbCB1 bmxpbmtpbmcsIGluIGNhc2Ugd2UgZmFpbCBwYXJ0d2F5CisJICogdGhyb3VnaCB0aGF0IHN0ZXAu ICBOb3RlIHRoYXQgdGhlIHNpbnZhbCBtZXNzYWdlcyB3aWxsIGV2ZW50dWFsbHkgY29tZQorCSAq IGJhY2sgdG8gdGhpcyBiYWNrZW5kLCB0b28sIGFuZCB0aGVyZWJ5IHByb3ZpZGUgYSBiYWNrc3Rv cCB0aGF0IHdlCisJICogY2xvc2VkIG91ciBvd24gc21nciByZWwuCiAJICovCi0JZm9yIChpID0g MDsgaSA8IG5yZWxzOyBpKyspCi0JewotCQlpbnQJCQl3aGljaCA9IHJlbHNbaV0tPnNtZ3Jfd2hp Y2g7CisJQ2FjaGVJbnZhbGlkYXRlU21ncihybG9jYXRvciwgYmFja2VuZCk7CiAKLQkJZm9yIChm b3JrbnVtID0gMDsgZm9ya251bSA8PSBNQVhfRk9SS05VTTsgZm9ya251bSsrKQotCQl7Ci0JCQlp ZiAoc21ncnN3W3doaWNoXS5zbWdyX2V4aXN0cyhyZWxzW2ldLCBmb3JrbnVtKSkKLQkJCQlzbWdy c3dbd2hpY2hdLnNtZ3JfaW1tZWRzeW5jKHJlbHNbaV0sIGZvcmtudW0pOwotCQl9CisJLyoKKwkg KiBEZWxldGUgdGhlIHBoeXNpY2FsIGZpbGUocykuCisJICoKKwkgKiBOb3RlOiBzbWdyX3VubGlu ayBtdXN0IHRyZWF0IGRlbGV0aW9uIGZhaWx1cmUgYXMgYSBXQVJOSU5HLCBub3QgYW4KKwkgKiBF UlJPUiwgYmVjYXVzZSB3ZSd2ZSBhbHJlYWR5IGRlY2lkZWQgdG8gY29tbWl0IG9yIGFib3J0IHRo ZSBjdXJyZW50CisJICogeGFjdC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbmZvcmtzOyBpKysp CisJeworCQlTTWdyRmlsZUxvY2F0b3Igc2xvY2F0b3IgPSB7IHJsb2NhdG9yLCBiYWNrZW5kLCBm b3Jrc1tpXSB9OworCQlzbWdyc3dbd2hpY2hdLnNtZ3JfdW5saW5rKHNsb2NhdG9yLCBpc1JlZG8p OwogCX0KIH0KIAogLyoKLSAqCXNtZ3Jkb3VubGlua2FsbCgpIC0tIEltbWVkaWF0ZWx5IHVubGlu ayBhbGwgZm9ya3Mgb2YgYWxsIGdpdmVuIHJlbGF0aW9ucwotICoKLSAqCQlBbGwgZm9ya3Mgb2Yg YWxsIGdpdmVuIHJlbGF0aW9ucyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBzdG9yZS4gIFRoaXMKLSAq CQlzaG91bGQgbm90IGJlIHVzZWQgZHVyaW5nIHRyYW5zYWN0aW9uYWwgb3BlcmF0aW9ucywgc2lu Y2UgaXQgY2FuJ3QgYmUKLSAqCQl1bmRvbmUuCisgKglzbWdyZG91bmxpbmsoKSAtLSBJbW1lZGlh dGVseSB1bmxpbmsgYSBmaWxlCiAgKgogICoJCUlmIGlzUmVkbyBpcyB0cnVlLCBpdCBpcyBva2F5 IGZvciB0aGUgdW5kZXJseWluZyBmaWxlKHMpIHRvIGJlIGdvbmUKICAqCQlhbHJlYWR5LgorICoK KyAqIFRvIHJlbW92ZSBhIHJlbGF0aW9uIHRyYW5zYWN0aW9uYWxseSwgc2VlIFJlbGF0aW9uRHJv cFN0b3JhZ2UoKSBpbnN0ZWFkLgorICogVGhpcyB3aWxsIGNhdXNlIGNhY2hlIGludmFsaWRhdGlv biBvZiBhbGwgZm9ya3Mgb2YgdGhlIHJlbGF0aW9uLCBub3QganVzdAorICogdGhpcyBvbmUuCiAg Ki8KIHZvaWQKLXNtZ3Jkb3VubGlua2FsbChTTWdyUmVsYXRpb24gKnJlbHMsIGludCBucmVscywg Ym9vbCBpc1JlZG8pCitzbWdydW5saW5rKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBib29sIGlzUmVk bykKIHsKLQlpbnQJCQlpID0gMDsKLQlSZWxGaWxlTG9jYXRvckJhY2tlbmQgKnJsb2NhdG9yczsK LQlGb3JrTnVtYmVyCWZvcmtudW07Ci0KLQlpZiAobnJlbHMgPT0gMCkKLQkJcmV0dXJuOwotCi0J LyoKLQkgKiBHZXQgcmlkIG9mIGFueSByZW1haW5pbmcgYnVmZmVycyBmb3IgdGhlIHJlbGF0aW9u cy4gIGJ1Zm1nciB3aWxsIGp1c3QKLQkgKiBkcm9wIHRoZW0gd2l0aG91dCBib3RoZXJpbmcgdG8g d3JpdGUgdGhlIGNvbnRlbnRzLgotCSAqLwotCURyb3BSZWxhdGlvbnNBbGxCdWZmZXJzKHJlbHMs IG5yZWxzKTsKLQotCS8qCi0JICogY3JlYXRlIGFuIGFycmF5IHdoaWNoIGNvbnRhaW5zIGFsbCBy ZWxhdGlvbnMgdG8gYmUgZHJvcHBlZCwgYW5kIGNsb3NlCi0JICogZWFjaCByZWxhdGlvbidzIGZv cmtzIGF0IHRoZSBzbWdyIGxldmVsIHdoaWxlIGF0IGl0Ci0JICovCi0JcmxvY2F0b3JzID0gcGFs bG9jKHNpemVvZihSZWxGaWxlTG9jYXRvckJhY2tlbmQpICogbnJlbHMpOwotCWZvciAoaSA9IDA7 IGkgPCBucmVsczsgaSsrKQotCXsKLQkJUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yID0g cmVsc1tpXS0+c21ncl9ybG9jYXRvcjsKLQkJaW50CQkJd2hpY2ggPSByZWxzW2ldLT5zbWdyX3do aWNoOworCVNNZ3JGaWxlTG9jYXRvciBsb2NhdG9yOworCWludAkJCXdoaWNoOwogCi0JCXJsb2Nh dG9yc1tpXSA9IHJsb2NhdG9yOworCS8qIHJlbWVtYmVyIGJlZm9yZSBjbG9zaW5nICovCisJd2hp Y2ggPSBzZmlsZS0+c21ncl93aGljaDsKKwlsb2NhdG9yID0gc2ZpbGUtPnNtZ3JfbG9jYXRvcjsK IAotCQkvKiBDbG9zZSB0aGUgZm9ya3MgYXQgc21nciBsZXZlbCAqLwotCQlmb3IgKGZvcmtudW0g PSAwOyBmb3JrbnVtIDw9IE1BWF9GT1JLTlVNOyBmb3JrbnVtKyspCi0JCQlzbWdyc3dbd2hpY2hd LnNtZ3JfY2xvc2UocmVsc1tpXSwgZm9ya251bSk7Ci0JfQorCS8qIENsb3NlIHRoZSBmaWxlIGF0 IHNtZ3IgbGV2ZWwgKi8KKwlzbWdyY2xvc2Uoc2ZpbGUpOwogCiAJLyoKIAkgKiBTZW5kIGEgc2hh cmVkLWludmFsIG1lc3NhZ2UgdG8gZm9yY2Ugb3RoZXIgYmFja2VuZHMgdG8gY2xvc2UgYW55CkBA IC00NTcsOCArNDUwLDcgQEAgc21ncmRvdW5saW5rYWxsKFNNZ3JSZWxhdGlvbiAqcmVscywgaW50 IG5yZWxzLCBib29sIGlzUmVkbykKIAkgKiBiYWNrIHRvIHRoaXMgYmFja2VuZCwgdG9vLCBhbmQg dGhlcmVieSBwcm92aWRlIGEgYmFja3N0b3AgdGhhdCB3ZQogCSAqIGNsb3NlZCBvdXIgb3duIHNt Z3IgcmVsLgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCBucmVsczsgaSsrKQotCQlDYWNoZUludmFs aWRhdGVTbWdyKHJsb2NhdG9yc1tpXSk7CisJQ2FjaGVJbnZhbGlkYXRlU21ncihsb2NhdG9yLmxv Y2F0b3IsIGxvY2F0b3IuYmFja2VuZCk7CiAKIAkvKgogCSAqIERlbGV0ZSB0aGUgcGh5c2ljYWwg ZmlsZShzKS4KQEAgLTQ2NywxNiArNDU5LDcgQEAgc21ncmRvdW5saW5rYWxsKFNNZ3JSZWxhdGlv biAqcmVscywgaW50IG5yZWxzLCBib29sIGlzUmVkbykKIAkgKiBFUlJPUiwgYmVjYXVzZSB3ZSd2 ZSBhbHJlYWR5IGRlY2lkZWQgdG8gY29tbWl0IG9yIGFib3J0IHRoZSBjdXJyZW50CiAJICogeGFj dC4KIAkgKi8KLQotCWZvciAoaSA9IDA7IGkgPCBucmVsczsgaSsrKQotCXsKLQkJaW50CQkJd2hp Y2ggPSByZWxzW2ldLT5zbWdyX3doaWNoOwotCi0JCWZvciAoZm9ya251bSA9IDA7IGZvcmtudW0g PD0gTUFYX0ZPUktOVU07IGZvcmtudW0rKykKLQkJCXNtZ3Jzd1t3aGljaF0uc21ncl91bmxpbmso cmxvY2F0b3JzW2ldLCBmb3JrbnVtLCBpc1JlZG8pOwotCX0KLQotCXBmcmVlKHJsb2NhdG9ycyk7 CisJc21ncnN3W3doaWNoXS5zbWdyX3VubGluayhsb2NhdG9yLCBpc1JlZG8pOwogfQogCiAKQEAg LTQ5MCwyMSArNDczLDIxIEBAIHNtZ3Jkb3VubGlua2FsbChTTWdyUmVsYXRpb24gKnJlbHMsIGlu dCBucmVscywgYm9vbCBpc1JlZG8pCiAgKgkJY2F1c2VzIGludGVydmVuaW5nIGZpbGUgc3BhY2Ug dG8gYmVjb21lIGZpbGxlZCB3aXRoIHplcm9lcy4KICAqLwogdm9pZAotc21ncmV4dGVuZChTTWdy UmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSwK K3NtZ3JleHRlbmQoU01nckZpbGVIYW5kbGUgc2ZpbGUsIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAog CQkgICBjaGFyICpidWZmZXIsIGJvb2wgc2tpcEZzeW5jKQogewotCXNtZ3Jzd1tyZWxuLT5zbWdy X3doaWNoXS5zbWdyX2V4dGVuZChyZWxuLCBmb3JrbnVtLCBibG9ja251bSwKLQkJCQkJCQkJCQkg YnVmZmVyLCBza2lwRnN5bmMpOworCXNtZ3Jzd1tzZmlsZS0+c21ncl93aGljaF0uc21ncl9leHRl bmQoc2ZpbGUsIGJsb2NrbnVtLAorCQkJCQkJCQkJCSAgYnVmZmVyLCBza2lwRnN5bmMpOwogCiAJ LyoKIAkgKiBOb3JtYWxseSB3ZSBleHBlY3QgdGhpcyB0byBpbmNyZWFzZSBuYmxvY2tzIGJ5IG9u ZSwgYnV0IGlmIHRoZSBjYWNoZWQKIAkgKiB2YWx1ZSBpc24ndCBhcyBleHBlY3RlZCwganVzdCBp bnZhbGlkYXRlIGl0IHNvIHRoZSBuZXh0IGNhbGwgYXNrcyB0aGUKIAkgKiBrZXJuZWwuCiAJICov Ci0JaWYgKHJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbZm9ya251bV0gPT0gYmxvY2tudW0pCi0J CXJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbZm9ya251bV0gPSBibG9ja251bSArIDE7CisJaWYg KHNmaWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzID09IGJsb2NrbnVtKQorCQlzZmlsZS0+c21ncl9j YWNoZWRfbmJsb2NrcyA9IGJsb2NrbnVtICsgMTsKIAllbHNlCi0JCXJlbG4tPnNtZ3JfY2FjaGVk X25ibG9ja3NbZm9ya251bV0gPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJCXNmaWxlLT5zbWdyX2Nh Y2hlZF9uYmxvY2tzID0gSW52YWxpZEJsb2NrTnVtYmVyOwogfQogCiAvKgpAQCAtNTE1LDEzICs0 OTgsMTMgQEAgc21ncmV4dGVuZChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVt LCBCbG9ja051bWJlciBibG9ja251bSwKICAqCQlyZWNvcmQpLgogICovCiBib29sCi1zbWdycHJl ZmV0Y2goU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIg YmxvY2tudW0pCitzbWdycHJlZmV0Y2goU01nckZpbGVIYW5kbGUgc2ZpbGUsIEJsb2NrTnVtYmVy IGJsb2NrbnVtKQogewotCXJldHVybiBzbWdyc3dbcmVsbi0+c21ncl93aGljaF0uc21ncl9wcmVm ZXRjaChyZWxuLCBmb3JrbnVtLCBibG9ja251bSk7CisJcmV0dXJuIHNtZ3Jzd1tzZmlsZS0+c21n cl93aGljaF0uc21ncl9wcmVmZXRjaChzZmlsZSwgYmxvY2tudW0pOwogfQogCiAvKgotICoJc21n cnJlYWQoKSAtLSByZWFkIGEgcGFydGljdWxhciBibG9jayBmcm9tIGEgcmVsYXRpb24gaW50byB0 aGUgc3VwcGxpZWQKKyAqCXNtZ3JyZWFkKCkgLS0gcmVhZCBhIHBhcnRpY3VsYXIgYmxvY2sgZnJv bSBhIGZpbGUgaW50byB0aGUgc3VwcGxpZWQKICAqCQkJCSAgYnVmZmVyLgogICoKICAqCQlUaGlz IHJvdXRpbmUgaXMgY2FsbGVkIGZyb20gdGhlIGJ1ZmZlciBtYW5hZ2VyIGluIG9yZGVyIHRvCkBA IC01MjksMTAgKzUxMiw5IEBAIHNtZ3JwcmVmZXRjaChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051 bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSkKICAqCQlyZXR1cm4gcGFnZXMgaW4g dGhlIGZvcm1hdCB0aGF0IFBPU1RHUkVTIGV4cGVjdHMuCiAgKi8KIHZvaWQKLXNtZ3JyZWFkKFNN Z3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVt LAotCQkgY2hhciAqYnVmZmVyKQorc21ncnJlYWQoU01nckZpbGVIYW5kbGUgc2ZpbGUsIEJsb2Nr TnVtYmVyIGJsb2NrbnVtLCBjaGFyICpidWZmZXIpCiB7Ci0Jc21ncnN3W3JlbG4tPnNtZ3Jfd2hp Y2hdLnNtZ3JfcmVhZChyZWxuLCBmb3JrbnVtLCBibG9ja251bSwgYnVmZmVyKTsKKwlzbWdyc3db c2ZpbGUtPnNtZ3Jfd2hpY2hdLnNtZ3JfcmVhZChzZmlsZSwgYmxvY2tudW0sIGJ1ZmZlcik7CiB9 CiAKIC8qCkBAIC01NTEsMTEgKzUzMywxMSBAQCBzbWdycmVhZChTTWdyUmVsYXRpb24gcmVsbiwg Rm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSwKICAqCQlkbyBub3QgcmVx dWlyZSBmc3luYy4KICAqLwogdm9pZAotc21ncndyaXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3Jr TnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAorc21ncndyaXRlKFNNZ3JGaWxl SGFuZGxlIHNmaWxlLCBCbG9ja051bWJlciBibG9ja251bSwKIAkJICBjaGFyICpidWZmZXIsIGJv b2wgc2tpcEZzeW5jKQogewotCXNtZ3Jzd1tyZWxuLT5zbWdyX3doaWNoXS5zbWdyX3dyaXRlKHJl bG4sIGZvcmtudW0sIGJsb2NrbnVtLAotCQkJCQkJCQkJCWJ1ZmZlciwgc2tpcEZzeW5jKTsKKwlz bWdyc3dbc2ZpbGUtPnNtZ3Jfd2hpY2hdLnNtZ3Jfd3JpdGUoc2ZpbGUsIGJsb2NrbnVtLAorCQkJ CQkJCQkJCSBidWZmZXIsIHNraXBGc3luYyk7CiB9CiAKIApAQCAtNTY0LDExICs1NDYsMTEgQEAg c21ncndyaXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVt YmVyIGJsb2NrbnVtLAogICoJCQkJCSAgIGJsb2Nrcy4KICAqLwogdm9pZAotc21ncndyaXRlYmFj ayhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9j a251bSwKK3NtZ3J3cml0ZWJhY2soU01nckZpbGVIYW5kbGUgc2ZpbGUsIEJsb2NrTnVtYmVyIGJs b2NrbnVtLAogCQkJICBCbG9ja051bWJlciBuYmxvY2tzKQogewotCXNtZ3Jzd1tyZWxuLT5zbWdy X3doaWNoXS5zbWdyX3dyaXRlYmFjayhyZWxuLCBmb3JrbnVtLCBibG9ja251bSwKLQkJCQkJCQkJ CQkJbmJsb2Nrcyk7CisJc21ncnN3W3NmaWxlLT5zbWdyX3doaWNoXS5zbWdyX3dyaXRlYmFjayhz ZmlsZSwgYmxvY2tudW0sCisJCQkJCQkJCQkJCSBuYmxvY2tzKTsKIH0KIAogLyoKQEAgLTU3Niwx OCArNTU4LDE4IEBAIHNtZ3J3cml0ZWJhY2soU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIg Zm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAgKgkJCQkJIHN1cHBsaWVkIHJlbGF0aW9u LgogICovCiBCbG9ja051bWJlcgotc21ncm5ibG9ja3MoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtO dW1iZXIgZm9ya251bSkKK3NtZ3JuYmxvY2tzKFNNZ3JGaWxlSGFuZGxlIHNmaWxlKQogewogCUJs b2NrTnVtYmVyIHJlc3VsdDsKIAogCS8qIENoZWNrIGFuZCByZXR1cm4gaWYgd2UgZ2V0IHRoZSBj YWNoZWQgdmFsdWUgZm9yIHRoZSBudW1iZXIgb2YgYmxvY2tzLiAqLwotCXJlc3VsdCA9IHNtZ3Ju YmxvY2tzX2NhY2hlZChyZWxuLCBmb3JrbnVtKTsKKwlyZXN1bHQgPSBzbWdybmJsb2Nrc19jYWNo ZWQoc2ZpbGUpOwogCWlmIChyZXN1bHQgIT0gSW52YWxpZEJsb2NrTnVtYmVyKQogCQlyZXR1cm4g cmVzdWx0OwogCi0JcmVzdWx0ID0gc21ncnN3W3JlbG4tPnNtZ3Jfd2hpY2hdLnNtZ3JfbmJsb2Nr cyhyZWxuLCBmb3JrbnVtKTsKKwlyZXN1bHQgPSBzbWdyc3dbc2ZpbGUtPnNtZ3Jfd2hpY2hdLnNt Z3JfbmJsb2NrcyhzZmlsZSk7CiAKLQlyZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW2ZvcmtudW1d ID0gcmVzdWx0OworCXNmaWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzID0gcmVzdWx0OwogCiAJcmV0 dXJuIHJlc3VsdDsKIH0KQEAgLTYwMCwzOCArNTgyLDQxIEBAIHNtZ3JuYmxvY2tzKFNNZ3JSZWxh dGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCiAgKiBmb3JrIHNpemUgaXMgbm90IGNhY2hl ZC4KICAqLwogQmxvY2tOdW1iZXIKLXNtZ3JuYmxvY2tzX2NhY2hlZChTTWdyUmVsYXRpb24gcmVs biwgRm9ya051bWJlciBmb3JrbnVtKQorc21ncm5ibG9ja3NfY2FjaGVkKFNNZ3JGaWxlSGFuZGxl IHNmaWxlKQogewogCS8qCiAJICogRm9yIG5vdywgd2Ugb25seSB1c2UgY2FjaGVkIHZhbHVlcyBp biByZWNvdmVyeSBkdWUgdG8gbGFjayBvZiBhIHNoYXJlZAogCSAqIGludmFsaWRhdGlvbiBtZWNo YW5pc20gZm9yIGNoYW5nZXMgaW4gZmlsZSBzaXplLgogCSAqLwotCWlmIChJblJlY292ZXJ5ICYm IHJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbZm9ya251bV0gIT0gSW52YWxpZEJsb2NrTnVtYmVy KQotCQlyZXR1cm4gcmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tmb3JrbnVtXTsKKwlpZiAoSW5S ZWNvdmVyeSAmJiBzZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyAhPSBJbnZhbGlkQmxvY2tOdW1i ZXIpCisJCXJldHVybiBzZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrczsKIAogCXJldHVybiBJbnZh bGlkQmxvY2tOdW1iZXI7CiB9CiAKIC8qCi0gKglzbWdydHJ1bmNhdGUoKSAtLSBUcnVuY2F0ZSB0 aGUgZ2l2ZW4gZm9ya3Mgb2Ygc3VwcGxpZWQgcmVsYXRpb24gdG8KLSAqCQkJCQkgIGVhY2ggc3Bl Y2lmaWVkIG51bWJlcnMgb2YgYmxvY2tzCisgKglzbWdydHJ1bmNhdGVfbXVsdGkoKSAtLSBUcnVu Y2F0ZSB0aGUgZ2l2ZW4gZm9ya3Mgb2Ygc3VwcGxpZWQgcmVsYXRpb24gdG8KKyAqCQkJCQkJCWVh Y2ggc3BlY2lmaWVkIG51bWJlcnMgb2YgYmxvY2tzCiAgKgogICogVGhlIHRydW5jYXRpb24gaXMg ZG9uZSBpbW1lZGlhdGVseSwgc28gdGhpcyBjYW4ndCBiZSByb2xsZWQgYmFjay4KICAqCiAgKiBU aGUgY2FsbGVyIG11c3QgaG9sZCBBY2Nlc3NFeGNsdXNpdmVMb2NrIG9uIHRoZSByZWxhdGlvbiwg dG8gZW5zdXJlIHRoYXQKICAqIG90aGVyIGJhY2tlbmRzIHJlY2VpdmUgdGhlIHNtZ3IgaW52YWxp ZGF0aW9uIGV2ZW50IHRoYXQgdGhpcyBmdW5jdGlvbiBzZW5kcwogICogYmVmb3JlIHRoZXkgYWNj ZXNzIGFueSBmb3JrcyBvZiB0aGUgcmVsYXRpb24gYWdhaW4uCisgKgorICogTGlrZSBzbWdydW5s aW5rX211bHRpKCksIHRoaXMgaGFuZGxlcyBtdWx0aXBsZSBmb3JrcyBpbiBvbmUgY2FsbCBiZWNh dXNlCisgKiB0aGUgY2FjaGUgaW52YWxpZGF0aW9uIGhhcHBlbnMgYXQgcmVsYXRpb24gZ3JhbnVs YXJpdHkuCisgKgorICogTkI6IFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGRyb3BwaW5n IGJ1ZmZlcnMhIEJlZm9yZSB2MTYsIHRoaXMKKyAqIGZ1bmN0aW9uIGRpZCBpdC4KICAqLwogdm9p ZAotc21ncnRydW5jYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyICpmb3JrbnVtLCBp bnQgbmZvcmtzLCBCbG9ja051bWJlciAqbmJsb2NrcykKK3NtZ3J0cnVuY2F0ZV9tdWx0aShSZWxG aWxlTG9jYXRvciBybG9jYXRvciwgQmFja2VuZElkIGJhY2tlbmQsIEZvcmtOdW1iZXIgKmZvcmtz LAorCQkJCSAgIGludCBuZm9ya3MsIEJsb2NrTnVtYmVyICpuYmxvY2tzKQogewogCWludAkJCWk7 CiAKLQkvKgotCSAqIEdldCByaWQgb2YgYW55IGJ1ZmZlcnMgZm9yIHRoZSBhYm91dC10by1iZS1k ZWxldGVkIGJsb2Nrcy4gYnVmbWdyIHdpbGwKLQkgKiBqdXN0IGRyb3AgdGhlbSB3aXRob3V0IGJv dGhlcmluZyB0byB3cml0ZSB0aGUgY29udGVudHMuCi0JICovCi0JRHJvcFJlbGF0aW9uQnVmZmVy cyhyZWxuLCBmb3JrbnVtLCBuZm9ya3MsIG5ibG9ja3MpOworCUFzc2VydChuZm9ya3MgPCBNQVhf Rk9SS05VTSArIDEpOwogCiAJLyoKIAkgKiBTZW5kIGEgc2hhcmVkLWludmFsIG1lc3NhZ2UgdG8g Zm9yY2Ugb3RoZXIgYmFja2VuZHMgdG8gY2xvc2UgYW55IHNtZ3IKQEAgLTY0MywxNSArNjI4LDE5 IEBAIHNtZ3J0cnVuY2F0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciAqZm9ya251bSwg aW50IG5mb3JrcywgQmxvY2tOdW1iZXIgKm5iCiAJICogaXMgYSBwZXJmb3JtYW5jZS1jcml0aWNh bCBwYXRoLikgIEFzIGluIHRoZSB1bmxpbmsgY29kZSwgd2Ugd2FudCB0byBiZQogCSAqIHN1cmUg dGhlIG1lc3NhZ2UgaXMgc2VudCBiZWZvcmUgd2Ugc3RhcnQgY2hhbmdpbmcgdGhpbmdzIG9uLWRp c2suCiAJICovCi0JQ2FjaGVJbnZhbGlkYXRlU21ncihyZWxuLT5zbWdyX3Jsb2NhdG9yKTsKKwlD YWNoZUludmFsaWRhdGVTbWdyKHJsb2NhdG9yLCBiYWNrZW5kKTsKIAotCS8qIERvIHRoZSB0cnVu Y2F0aW9uICovCisJLyogRG8gdGhlIHRydW5jYXRpb25zICovCiAJZm9yIChpID0gMDsgaSA8IG5m b3JrczsgaSsrKQogCXsKKwkJU01nckZpbGVIYW5kbGUgc2ZpbGU7CisKKwkJc2ZpbGUgPSBzbWdy b3BlbihybG9jYXRvciwgYmFja2VuZCwgZm9ya3NbaV0pOworCiAJCS8qIE1ha2UgdGhlIGNhY2hl ZCBzaXplIGlzIGludmFsaWQgaWYgd2UgZW5jb3VudGVyIGFuIGVycm9yLiAqLwotCQlyZWxuLT5z bWdyX2NhY2hlZF9uYmxvY2tzW2ZvcmtudW1baV1dID0gSW52YWxpZEJsb2NrTnVtYmVyOworCQlz ZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9IEludmFsaWRCbG9ja051bWJlcjsKIAotCQlzbWdy c3dbcmVsbi0+c21ncl93aGljaF0uc21ncl90cnVuY2F0ZShyZWxuLCBmb3JrbnVtW2ldLCBuYmxv Y2tzW2ldKTsKKwkJc21ncnN3W3NmaWxlLT5zbWdyX3doaWNoXS5zbWdyX3RydW5jYXRlKHNmaWxl LCBuYmxvY2tzW2ldKTsKIAogCQkvKgogCQkgKiBXZSBtaWdodCBhcyB3ZWxsIHVwZGF0ZSB0aGUg bG9jYWwgc21ncl9jYWNoZWRfbmJsb2NrcyB2YWx1ZXMuIFRoZQpAQCAtNjYwLDcgKzY0OSw3IEBA IHNtZ3J0cnVuY2F0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciAqZm9ya251bSwgaW50 IG5mb3JrcywgQmxvY2tOdW1iZXIgKm5iCiAJCSAqIHNtZ3Jfdm1fbmJsb2NrcywgYW5kIHRoZXNl IG9uZXMgdG9vIGF0IHRoZSBuZXh0IGNvbW1hbmQgYm91bmRhcnkuCiAJCSAqIEJ1dCB0aGVzZSBl bnN1cmUgdGhleSBhcmVuJ3Qgb3V0cmlnaHQgd3JvbmcgdW50aWwgdGhlbi4KIAkJICovCi0JCXJl bG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbZm9ya251bVtpXV0gPSBuYmxvY2tzW2ldOworCQlzZmls ZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9IG5ibG9ja3NbaV07CiAJfQogfQogCkBAIC02ODgsOSAr Njc3LDkgQEAgc21ncnRydW5jYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyICpmb3Jr bnVtLCBpbnQgbmZvcmtzLCBCbG9ja051bWJlciAqbmIKICAqCQlvdGhlcndpc2UgdGhlIHN5bmMg aXMgbm90IHZlcnkgbWVhbmluZ2Z1bC4KICAqLwogdm9pZAotc21ncmltbWVkc3luYyhTTWdyUmVs YXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQorc21ncmltbWVkc3luYyhTTWdyRmlsZUhh bmRsZSBzZmlsZSkKIHsKLQlzbWdyc3dbcmVsbi0+c21ncl93aGljaF0uc21ncl9pbW1lZHN5bmMo cmVsbiwgZm9ya251bSk7CisJc21ncnN3W3NmaWxlLT5zbWdyX3doaWNoXS5zbWdyX2ltbWVkc3lu YyhzZmlsZSk7CiB9CiAKIC8qCkBAIC03MTQsMTQgKzcwMywxNCBAQCBBdEVPWGFjdF9TTWdyKHZv aWQpCiAJICogWmFwIGFsbCB1bm93bmVkIFNNZ3JSZWxhdGlvbnMuICBXZSByZWx5IG9uIHNtZ3Jj bG9zZSgpIHRvIHJlbW92ZSBlYWNoCiAJICogb25lIGZyb20gdGhlIGxpc3QuCiAJICovCi0JZGxp c3RfZm9yZWFjaF9tb2RpZnkoaXRlciwgJnVub3duZWRfcmVsbnMpCisJZGxpc3RfZm9yZWFjaF9t b2RpZnkoaXRlciwgJnVub3duZWRfc2ZpbGVzKQogCXsKLQkJU01nclJlbGF0aW9uIHJlbCA9IGRs aXN0X2NvbnRhaW5lcihTTWdyUmVsYXRpb25EYXRhLCBub2RlLAotCQkJCQkJCQkJCSAgIGl0ZXIu Y3VyKTsKKwkJU01nckZpbGVIYW5kbGUgc2ZpbGUgPSBkbGlzdF9jb250YWluZXIoU01nckZpbGVE YXRhLCBub2RlLAorCQkJCQkJCQkJCQkgICBpdGVyLmN1cik7CiAKLQkJQXNzZXJ0KHJlbC0+c21n cl9vd25lciA9PSBOVUxMKTsKKwkJQXNzZXJ0KHNmaWxlLT5zbWdyX293bmVyID09IE5VTEwpOwog Ci0JCXNtZ3JjbG9zZShyZWwpOworCQlzbWdyY2xvc2Uoc2ZpbGUpOwogCX0KIH0KIApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9zeW5jL3N5bmMuYyBiL3NyYy9iYWNrZW5kL3N0b3Jh Z2Uvc3luYy9zeW5jLmMKaW5kZXggOWQ2YTllOTEwOTAuLjM1NzIwNzhiYTc5IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9zdG9yYWdlL3N5bmMvc3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3Jh Z2Uvc3luYy9zeW5jLmMKQEAgLTE4LDkgKzE4LDcgQEAKICNpbmNsdWRlIDxmY250bC5oPgogI2lu Y2x1ZGUgPHN5cy9maWxlLmg+CiAKLSNpbmNsdWRlICJhY2Nlc3MvY29tbWl0X3RzLmgiCi0jaW5j bHVkZSAiYWNjZXNzL2Nsb2cuaCIKLSNpbmNsdWRlICJhY2Nlc3MvbXVsdGl4YWN0LmgiCisjaW5j bHVkZSAiYWNjZXNzL3NscnUuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZy5oIgogI2luY2x1ZGUg ImFjY2Vzcy94bG9ndXRpbHMuaCIKICNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNwYWNlLmgiCkBA IC0xMDYsMjIgKzEwNCw2IEBAIHN0YXRpYyBjb25zdCBTeW5jT3BzIHN5bmNzd1tdID0gewogCQku c3luY191bmxpbmtmaWxldGFnID0gbWR1bmxpbmtmaWxldGFnLAogCQkuc3luY19maWxldGFnbWF0 Y2hlcyA9IG1kZmlsZXRhZ21hdGNoZXMKIAl9LAotCS8qIHBnX3hhY3QgKi8KLQlbU1lOQ19IQU5E TEVSX0NMT0ddID0gewotCQkuc3luY19zeW5jZmlsZXRhZyA9IGNsb2dzeW5jZmlsZXRhZwotCX0s Ci0JLyogcGdfY29tbWl0X3RzICovCi0JW1NZTkNfSEFORExFUl9DT01NSVRfVFNdID0gewotCQku c3luY19zeW5jZmlsZXRhZyA9IGNvbW1pdHRzc3luY2ZpbGV0YWcKLQl9LAotCS8qIHBnX211bHRp eGFjdC9vZmZzZXRzICovCi0JW1NZTkNfSEFORExFUl9NVUxUSVhBQ1RfT0ZGU0VUXSA9IHsKLQkJ LnN5bmNfc3luY2ZpbGV0YWcgPSBtdWx0aXhhY3RvZmZzZXRzc3luY2ZpbGV0YWcKLQl9LAotCS8q IHBnX211bHRpeGFjdC9tZW1iZXJzICovCi0JW1NZTkNfSEFORExFUl9NVUxUSVhBQ1RfTUVNQkVS XSA9IHsKLQkJLnN5bmNfc3luY2ZpbGV0YWcgPSBtdWx0aXhhY3RtZW1iZXJzc3luY2ZpbGV0YWcK LQl9CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvaW52YWwu YyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2ludmFsLmMKaW5kZXggZWI1NzgyZjgyYTQuLmJk NDM1MjE1ZGNhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9pbnZhbC5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2ludmFsLmMKQEAgLTY2MSwxMSArNjYxLDEyIEBA IExvY2FsRXhlY3V0ZUludmFsaWRhdGlvbk1lc3NhZ2UoU2hhcmVkSW52YWxpZGF0aW9uTWVzc2Fn ZSAqbXNnKQogCQkgKiBXZSBjb3VsZCBoYXZlIHNtZ3IgZW50cmllcyBmb3IgcmVsYXRpb25zIG9m IG90aGVyIGRhdGFiYXNlcywgc28gbm8KIAkJICogc2hvcnQtY2lyY3VpdCB0ZXN0IGlzIHBvc3Np YmxlIGhlcmUuCiAJCSAqLwotCQlSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3I7CisJCVJl bEZpbGVMb2NhdG9yIHJsb2NhdG9yOworCQlCYWNrZW5kSWQgYmFja2VuZDsKIAotCQlybG9jYXRv ci5sb2NhdG9yID0gbXNnLT5zbS5ybG9jYXRvcjsKLQkJcmxvY2F0b3IuYmFja2VuZCA9IChtc2ct PnNtLmJhY2tlbmRfaGkgPDwgMTYpIHwgKGludCkgbXNnLT5zbS5iYWNrZW5kX2xvOwotCQlzbWdy Y2xvc2VyZWxsb2NhdG9yKHJsb2NhdG9yKTsKKwkJcmxvY2F0b3IgPSBtc2ctPnNtLnJsb2NhdG9y OworCQliYWNrZW5kID0gKG1zZy0+c20uYmFja2VuZF9oaSA8PCAxNikgfCAoaW50KSBtc2ctPnNt LmJhY2tlbmRfbG87CisJCXNtZ3JjbG9zZXJlbGxvY2F0b3IocmxvY2F0b3IsIGJhY2tlbmQpOwog CX0KIAllbHNlIGlmIChtc2ctPmlkID09IFNIQVJFRElOVkFMUkVMTUFQX0lEKQogCXsKQEAgLTE0 NTksMTQgKzE0NjAsMTQgQEAgQ2FjaGVJbnZhbGlkYXRlUmVsY2FjaGVCeVJlbGlkKE9pZCByZWxp ZCkKICAqIFRodXMsIHRoZSBtYXhpbXVtIHBvc3NpYmxlIGJhY2tlbmQgSUQgaXMgMl4yMy0xLgog ICovCiB2b2lkCi1DYWNoZUludmFsaWRhdGVTbWdyKFJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9j YXRvcikKK0NhY2hlSW52YWxpZGF0ZVNtZ3IoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEJhY2tl bmRJZCBiYWNrZW5kKQogewogCVNoYXJlZEludmFsaWRhdGlvbk1lc3NhZ2UgbXNnOwogCiAJbXNn LnNtLmlkID0gU0hBUkVESU5WQUxTTUdSX0lEOwotCW1zZy5zbS5iYWNrZW5kX2hpID0gcmxvY2F0 b3IuYmFja2VuZCA+PiAxNjsKLQltc2cuc20uYmFja2VuZF9sbyA9IHJsb2NhdG9yLmJhY2tlbmQg JiAweGZmZmY7Ci0JbXNnLnNtLnJsb2NhdG9yID0gcmxvY2F0b3IubG9jYXRvcjsKKwltc2cuc20u YmFja2VuZF9oaSA9IGJhY2tlbmQgPj4gMTY7CisJbXNnLnNtLmJhY2tlbmRfbG8gPSBiYWNrZW5k ICYgMHhmZmZmOworCW1zZy5zbS5ybG9jYXRvciA9IHJsb2NhdG9yOwogCS8qIGNoZWNrIEFkZENh dGNhY2hlSW52YWxpZGF0aW9uTWVzc2FnZSgpIGZvciBhbiBleHBsYW5hdGlvbiAqLwogCVZBTEdS SU5EX01BS0VfTUVNX0RFRklORUQoJm1zZywgc2l6ZW9mKG1zZykpOwogCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2Fj aGUvcmVsY2FjaGUuYwppbmRleCA0NTBlNTEyNGE1YS4uOWU1Y2Q3OTIyY2UgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvY2FjaGUvcmVsY2FjaGUuYwpAQCAtNDE5LDcgKzQxOSw3IEBAIEFsbG9jYXRlUmVsYXRpb25E ZXNjKEZvcm1fcGdfY2xhc3MgcmVscCkKIAlyZWxhdGlvbiA9IChSZWxhdGlvbikgcGFsbG9jMChz aXplb2YoUmVsYXRpb25EYXRhKSk7CiAKIAkvKiBtYWtlIHN1cmUgcmVsYXRpb24gaXMgbWFya2Vk IGFzIGhhdmluZyBubyBvcGVuIGZpbGUgeWV0ICovCi0JcmVsYXRpb24tPnJkX3NtZ3IgPSBOVUxM OworCU1lbVNldChyZWxhdGlvbi0+cmRfc21nciwgMCwgc2l6ZW9mKHJlbGF0aW9uLT5yZF9zbWdy KSk7CiAKIAkvKgogCSAqIENvcHkgdGhlIHJlbGF0aW9uIHR1cGxlIGZvcm0KQEAgLTEyNDgsNyAr MTI0OCw3IEBAIHJldHJ5OgogCVJlbGF0aW9uSW5pdFBoeXNpY2FsQWRkcihyZWxhdGlvbik7CiAK IAkvKiBtYWtlIHN1cmUgcmVsYXRpb24gaXMgbWFya2VkIGFzIGhhdmluZyBubyBvcGVuIGZpbGUg eWV0ICovCi0JcmVsYXRpb24tPnJkX3NtZ3IgPSBOVUxMOworCU1lbVNldChyZWxhdGlvbi0+cmRf c21nciwgMCwgc2l6ZW9mKHJlbGF0aW9uLT5yZF9zbWdyKSk7CiAKIAkvKgogCSAqIG5vdyB3ZSBj YW4gZnJlZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgcGdfY2xhc3NfdHVwbGUKQEAgLTE4Nzcs NyArMTg3Nyw3IEBAIGZvcm1yZGVzYyhjb25zdCBjaGFyICpyZWxhdGlvbk5hbWUsIE9pZCByZWxh dGlvblJlbHR5cGUsCiAJcmVsYXRpb24gPSAoUmVsYXRpb24pIHBhbGxvYzAoc2l6ZW9mKFJlbGF0 aW9uRGF0YSkpOwogCiAJLyogbWFrZSBzdXJlIHJlbGF0aW9uIGlzIG1hcmtlZCBhcyBoYXZpbmcg bm8gb3BlbiBmaWxlIHlldCAqLwotCXJlbGF0aW9uLT5yZF9zbWdyID0gTlVMTDsKKwlNZW1TZXQo cmVsYXRpb24tPnJkX3NtZ3IsIDAsIHNpemVvZihyZWxhdGlvbi0+cmRfc21ncikpOwogCiAJLyoK IAkgKiBpbml0aWFsaXplIHJlZmVyZW5jZSBjb3VudDogMSBiZWNhdXNlIGl0IGlzIG5haWxlZCBp biBjYWNoZQpAQCAtMjcwMSw3ICsyNzAxLDggQEAgUmVsYXRpb25DbGVhclJlbGF0aW9uKFJlbGF0 aW9uIHJlbGF0aW9uLCBib29sIHJlYnVpbGQpCiAJCX0KIAogCQkvKiByZF9zbWdyIG11c3Qgbm90 IGJlIHN3YXBwZWQsIGR1ZSB0byBiYWNrLWxpbmtzIGZyb20gc21nciBsZXZlbCAqLwotCQlTV0FQ RklFTEQoU01nclJlbGF0aW9uLCByZF9zbWdyKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPD0gTUFY X0ZPUktOVU07IGkrKykKKwkJCVNXQVBGSUVMRChTTWdyRmlsZUhhbmRsZSwgcmRfc21ncltpXSk7 CiAJCS8qIHJkX3JlZmNudCBtdXN0IGJlIHByZXNlcnZlZCAqLwogCQlTV0FQRklFTEQoaW50LCBy ZF9yZWZjbnQpOwogCQkvKiBpc25haWxlZCBzaG91bGRuJ3QgY2hhbmdlICovCkBAIC0zNTMyLDcg KzM1MzMsNyBAQCBSZWxhdGlvbkJ1aWxkTG9jYWxSZWxhdGlvbihjb25zdCBjaGFyICpyZWxuYW1l LAogCXJlbCA9IChSZWxhdGlvbikgcGFsbG9jMChzaXplb2YoUmVsYXRpb25EYXRhKSk7CiAKIAkv KiBtYWtlIHN1cmUgcmVsYXRpb24gaXMgbWFya2VkIGFzIGhhdmluZyBubyBvcGVuIGZpbGUgeWV0 ICovCi0JcmVsLT5yZF9zbWdyID0gTlVMTDsKKwlNZW1TZXQocmVsLT5yZF9zbWdyLCAwLCBzaXpl b2YocmVsLT5yZF9zbWdyKSk7CiAKIAkvKiBtYXJrIGl0IG5haWxlZCBpZiBhcHByb3ByaWF0ZSAq LwogCXJlbC0+cmRfaXNuYWlsZWQgPSBuYWlsaXQ7CkBAIC0zNzY0LDcgKzM3NjUsNiBAQCBSZWxh dGlvblNldE5ld1JlbGZpbGVudW1iZXIoUmVsYXRpb24gcmVsYXRpb24sIGNoYXIgcGVyc2lzdGVu Y2UpCiAJICovCiAJaWYgKElzQmluYXJ5VXBncmFkZSkKIAl7Ci0JCVNNZ3JSZWxhdGlvbglzcmVs OwogCiAJCS8qCiAJCSAqIER1cmluZyBhIGJpbmFyeSB1cGdyYWRlLCB3ZSB1c2UgdGhpcyBjb2Rl IHBhdGggdG8gZW5zdXJlIHRoYXQKQEAgLTM3ODEsOSArMzc4MSwxNCBAQCBSZWxhdGlvblNldE5l d1JlbGZpbGVudW1iZXIoUmVsYXRpb24gcmVsYXRpb24sIGNoYXIgcGVyc2lzdGVuY2UpCiAJCSAq IGZhaWxzIGF0IHRoaXMgc3RhZ2UsIHRoZSBuZXcgY2x1c3RlciB3aWxsIG5lZWQgdG8gYmUgcmVj cmVhdGVkCiAJCSAqIGFueXdheS4KIAkJICovCi0JCXNyZWwgPSBzbWdyb3BlbihyZWxhdGlvbi0+ cmRfbG9jYXRvciwgcmVsYXRpb24tPnJkX2JhY2tlbmQpOwotCQlzbWdyZG91bmxpbmthbGwoJnNy ZWwsIDEsIGZhbHNlKTsKLQkJc21ncmNsb3NlKHNyZWwpOworCQlGb3JrTnVtYmVyIGZvcmtzW01B WF9GT1JLTlVNICsgMV07CisJCWZvciAoaW50IGkgPSAwOyBpIDw9IE1BWF9GT1JLTlVNOyBpICsr KSAKKwkJeworCQkJc21ncm9wZW4ocmVsYXRpb24tPnJkX2xvY2F0b3IsIHJlbGF0aW9uLT5yZF9i YWNrZW5kLCBpKTsKKwkJCWZvcmtzW2ldID0gaTsKKwkJfQorCQkKKwkJc21ncnVubGlua19tdWx0 aShyZWxhdGlvbi0+cmRfbG9jYXRvciwgcmVsYXRpb24tPnJkX2JhY2tlbmQsIGZvcmtzLCBNQVhf Rk9SS05VTSArIDEsIGZhbHNlKTsKIAl9CiAJZWxzZQogCXsKQEAgLTM4MTEsNyArMzgxNiw3IEBA IFJlbGF0aW9uU2V0TmV3UmVsZmlsZW51bWJlcihSZWxhdGlvbiByZWxhdGlvbiwgY2hhciBwZXJz aXN0ZW5jZSkKIAllbHNlIGlmIChSRUxLSU5EX0hBU19TVE9SQUdFKHJlbGF0aW9uLT5yZF9yZWwt PnJlbGtpbmQpKQogCXsKIAkJLyogaGFuZGxlIHRoZXNlIGRpcmVjdGx5LCBhdCBsZWFzdCBmb3Ig bm93ICovCi0JCVNNZ3JSZWxhdGlvbiBzcmVsOworCQlTTWdyRmlsZUhhbmRsZSBzcmVsOwogCiAJ CXNyZWwgPSBSZWxhdGlvbkNyZWF0ZVN0b3JhZ2UobmV3cmxvY2F0b3IsIHBlcnNpc3RlbmNlLCB0 cnVlKTsKIAkJc21ncmNsb3NlKHNyZWwpOwpAQCAtNjI5OCw3ICs2MzAzLDcgQEAgbG9hZF9yZWxj YWNoZV9pbml0X2ZpbGUoYm9vbCBzaGFyZWQpCiAJCS8qCiAJCSAqIFJlc2V0IHRyYW5zaWVudC1z dGF0ZSBmaWVsZHMgaW4gdGhlIHJlbGNhY2hlIGVudHJ5CiAJCSAqLwotCQlyZWwtPnJkX3NtZ3Ig PSBOVUxMOworCQlNZW1TZXQocmVsLT5yZF9zbWdyLCAwLCBzaXplb2YocmVsLT5yZF9zbWdyKSk7 CiAJCWlmIChyZWwtPnJkX2lzbmFpbGVkKQogCQkJcmVsLT5yZF9yZWZjbnQgPSAxOwogCQllbHNl CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tbWdyL21jeHQuYyBiL3NyYy9iYWNrZW5k L3V0aWxzL21tZ3IvbWN4dC5jCmluZGV4IDU3YmQ2NjkwY2EwLi5mOTEzN2UzNjQxMSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9tY3h0LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvbW1nci9tY3h0LmMKQEAgLTE1MSw5ICsxNTEsMjAgQEAgc3RhdGljIHZvaWQgTWVtb3J5Q29u dGV4dFN0YXRzUHJpbnQoTWVtb3J5Q29udGV4dCBjb250ZXh0LCB2b2lkICpwYXNzdGhydSwKICAq IFlvdSBzaG91bGQgbm90IGRvIG1lbW9yeSBhbGxvY2F0aW9ucyB3aXRoaW4gYSBjcml0aWNhbCBz ZWN0aW9uLCBiZWNhdXNlCiAgKiBhbiBvdXQtb2YtbWVtb3J5IGVycm9yIHdpbGwgYmUgZXNjYWxh dGVkIHRvIGEgUEFOSUMuIFRvIGVuZm9yY2UgdGhhdAogICogcnVsZSwgdGhlIGFsbG9jYXRpb24g ZnVuY3Rpb25zIEFzc2VydCB0aGF0LgorICoKKyAqIEZJWE1FOiBieXBhc3MgdGhpcyBmb3IgdGhl IGNyaXRpY2FsIHNlY3Rpb24gaW4gUmVjb3JkVHJhbnNhY3Rpb25Db21taXQoKQorICogZm9yIG5v dy4gSXQgZG9lcyBhIGxvdCBvZiB0aGluZ3MgdGhhdCBjYW4gYWxsb2NhdGU6CisgKiAtIGNhbGxz IFRyYW5zYWN0aW9uSWRDb21taXRUcmVlLCB3aGljaCBwaW5zIGJ1ZmZlcnMsIHdoaWNoIHJlcXVp cmVzCisgKiAgIHNwYWNlIGluIHRoZSBSZXNvdXJjZU93bmVyIGZvciB0aGUgcGluIChSZXNvdXJj ZU93bmVyRW5sYXJnZUJ1ZmZlcnMoKSkKKyAqIC0gc2FtZSBmb3IgVHJhbnNhY3Rpb25UcmVlU2V0 Q29tbWl0VHNEYXRhKCkgY2FsbC4KKyAqIC0gcmVhZGluZyBhIHBhZ2UgY2FuIHJlcXVpcmUgZmx1 c2hpbmcgb3RoZXIgcGFnZXMsIHdoaWNoIGluIHR1cm4KKyAqICAgY2FuIGNhbGwgQ29tcGFjdENo ZWNrcG9pbnRlclJlcXVlc3RRdWV1ZSgpLCB3aGljaCBhbGxvY2F0ZXMKKyAqIC0gcmVhZGluZyBh IHBhZ2UgY2FsbHMgc21ncm9wZW4oKSwgd2hpY2ggYWxsb2NhdGVzIHRoZSBTTWdyRmlsZSBlbnRy eQorICogICBpZiBpdCdzIG5vdCBvcGVuIGFscmVhZHkKICAqLwogI2RlZmluZSBBc3NlcnROb3RJ bkNyaXRpY2FsU2VjdGlvbihjb250ZXh0KSBcCi0JQXNzZXJ0KENyaXRTZWN0aW9uQ291bnQgPT0g MCB8fCAoY29udGV4dCktPmFsbG93SW5Dcml0U2VjdGlvbikKKwlBc3NlcnQoQ3JpdFNlY3Rpb25D b3VudCA9PSAwIHx8IChjb250ZXh0KS0+YWxsb3dJbkNyaXRTZWN0aW9uIHx8IFwKKwkJICAgKE15 UHJvYyAhPSBOVUxMICYmIChNeVByb2MtPmRlbGF5Q2hrcHRGbGFncyAmIERFTEFZX0NIS1BUX1NU QVJUICE9IDApKSkKIAogLyoKICAqIENhbGwgdGhlIGdpdmVuIGZ1bmN0aW9uIGluIHRoZSBNZW1v cnlDb250ZXh0TWV0aG9kcyBmb3IgdGhlIG1lbW9yeSBjb250ZXh0CmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX3VwZ3JhZGUvZmlsZS5jIGIvc3JjL2Jpbi9wZ191cGdyYWRlL2ZpbGUuYwppbmRleCAw NzlmYmRhODM4OS4uNmI3NmE2YmY3ZTUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfdXBncmFkZS9m aWxlLmMKKysrIGIvc3JjL2Jpbi9wZ191cGdyYWRlL2ZpbGUuYwpAQCAtMjAsNiArMjAsNyBAQAog I2VuZGlmCiAKICNpbmNsdWRlICJhY2Nlc3MvdmlzaWJpbGl0eW1hcGRlZnMuaCIKKyNpbmNsdWRl ICJhY2Nlc3Mvc2xydWRlZnMuaCIKICNpbmNsdWRlICJjb21tb24vZmlsZV9wZXJtLmgiCiAjaW5j bHVkZSAicGdfdXBncmFkZS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmcGFnZS5oIgpAQCAtMTM5 LDcgKzE0MCw2IEBAIGNvcHlGaWxlKGNvbnN0IGNoYXIgKnNyYywgY29uc3QgY2hhciAqZHN0LAog I2VuZGlmCQkJCQkJCS8qIFdJTjMyICovCiB9CiAKLQogLyoKICAqIGxpbmtGaWxlKCkKICAqCkBA IC0zMTYsNiArMzE2LDE3OSBAQCByZXdyaXRlVmlzaWJpbGl0eU1hcChjb25zdCBjaGFyICpmcm9t ZmlsZSwgY29uc3QgY2hhciAqdG9maWxlLAogCWNsb3NlKHNyY19mZCk7CiB9CiAKKworLy9jcmVh dGUgbmV3IGZpbGUgYW5kIGluaXRpYWxpemUgdG8gMjU2Sworc3RhdGljIGludAoraW5pdF9uZXdf c2xydV9maWxlKEZJTEUgKiBmcCkKK3sgCisJaW50IGZkOworCWludCByZXM7CisJCisJZmQgPSBm aWxlbm8oZnApOworCXJlcyA9IGZ0cnVuY2F0ZShmZCwgQkxDS1NaICogU0xSVV9QQUdFU19QRVJf U0VHTUVOVCk7CisJcmV0dXJuIHJlczsKK30KKworaW50IAorY29weV90b19uZXdfZm9ybWF0KGNv bnN0IGNoYXIgKm9sZF9zdWJkaXIsIGNvbnN0IGNoYXIgKm5ld19zdWJkaXIsIGludCBlbGVtZW50 X3NpemUpIAoreworCURJUiAqZHI7CisJc3RydWN0IGRpcmVudCAqZGU7CisJCisJc2l6ZV90IAly ZWFkX2l0ZW1zOworCXNpemVfdCAJbl9pdGVtczsKKwlzaXplX3QgCXRvX3JlYWRfaXRlbXM7CisJ c2l6ZV90IAl3cml0ZV9pdGVtczsKKwlzaXplX3QgCXBhZ2VzX3dyaXR0ZW47CisJc2l6ZV90IAl3 cml0ZV9vZmZzZXQ7CisKKwljaGFyICogCXJlYWRfZmlsZTsJCisJY2hhciAqIAl3cml0ZV9maWxl OworCQorCWludCAJcmVzOworCWludCAJd3JpdGVfZmlsZV9zZWdubzsKKwlpbnQgCXRvdGFsX3Jl YWRfZmlsZXM7CisJCisJRklMRSAqIAlvbGRfZmQ7IAorCUZJTEUgKiAJbmV3X2ZwOworCisjZGVm aW5lIE1BWEJVRlNJWkUgKEJMQ0tTWiAtIFNpemVPZlBhZ2VIZWFkZXJEYXRhKQorCisJY2hhcglv bGRfcGF0aFtNQVhQR1BBVEhdOworCWNoYXIJbmV3X3BhdGhbTUFYUEdQQVRIXTsKKwlQR0FsaWdu ZWRCbG9jayBwZ19idWY7CisJQmxvY2tOdW1iZXIgYmxrbm87IC8vdHJhY2sgYWJvc2x1dGUgYmxv Y2sgbnVtYmVyCisJCisKKwlzdHJ1Y3QgCWRpcmVudCoqIGFsbF9kaXJlbnRzOworCisKKwlzbnBy aW50ZihvbGRfcGF0aCwgc2l6ZW9mKG9sZF9wYXRoKSwgIiVzLyVzIiwgb2xkX2NsdXN0ZXIucGdk YXRhLCBvbGRfc3ViZGlyKTsKKwlzbnByaW50ZihuZXdfcGF0aCwgc2l6ZW9mKG5ld19wYXRoKSwg IiVzLyVzIiwgbmV3X2NsdXN0ZXIucGdkYXRhLCBuZXdfc3ViZGlyKTsKKworCS8qIAorCSAqIGNh bGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FuIGZpdCAKKwkgKiBpbnNpZGUgQkxD S1NaIC0gU2l6ZU9mUGFnZUhlYWRlckRhdGEKKwkgKi8KKworCW5faXRlbXMgPSAoc2l6ZV90KSAo TUFYQlVGU0laRSAvIGVsZW1lbnRfc2l6ZSk7IAorCQorCS8qIG51bWJlciBvZiBpdGVtcyB0byBy ZWFkIGluIGF0IGEgdGltZSAqLworCXRvX3JlYWRfaXRlbXMgPSBuX2l0ZW1zOworCQorCS8vYnVm c2l6ZSA9IChzaXplX3QpIChuX2l0ZW1zICogZWxlbWVudF9zaXplKTsgCisJd3JpdGVfZmlsZV9z ZWdubyA9IDA7IC8qIHRyYWNrIHdoaWNoIHNlZ21lbnQgd2UgYXJlIHdyaXRpbmcgaW50byAqLwor CXdyaXRlX29mZnNldCA9IChzaXplX3QpIChTaXplT2ZQYWdlSGVhZGVyRGF0YSk7IAorCisJZHIg PSBvcGVuZGlyKChjaGFyICopb2xkX3BhdGgpOworCWlmIChkciA9PSBOVUxMKQorCQlyZXR1cm4g LTE7CisKKwl3cml0ZV9maWxlID0gcHNwcmludGYoIiVzLyUwNFgiLCBuZXdfcGF0aCwgd3JpdGVf ZmlsZV9zZWdubyk7CisJCisJbmV3X2ZwID0gZm9wZW4od3JpdGVfZmlsZSwgIndiIik7CisJCisJ aWYgKG5ld19mcCA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlyZXMgPSBpbml0X25ld19zbHJ1 X2ZpbGUobmV3X2ZwKTsKKwlpZiAocmVzIDwgMCkJCisJCXJldHVybiAtMTsKKworCWlmIChyZXMg PCAwKQorCQlyZXR1cm4gLTE7CisKKwlwYWdlc193cml0dGVuID0gMDsKKwlibGtubyA9IDA7IC8q IGFic29sdXRlIGJsa25vICovCisKKwlhbGxfZGlyZW50cyA9IGdldF9zb3J0ZWRfaGV4X2ZpbGVz KG9sZF9wYXRoLCAmdG90YWxfcmVhZF9maWxlcyk7CisKKwl3cml0ZV9pdGVtcyA9IDA7CisJZm9y IChpbnQgaSA9IDA7IGkgPCB0b3RhbF9yZWFkX2ZpbGVzOyBpKyspCisJeworCQlkZSA9IGFsbF9k aXJlbnRzW2ldOworCQkKKwkJaWYgKCghc3RyY21wKChjaGFyICopIGRlLT5kX25hbWUsICIuIikp IHx8ICFzdHJjbXAoKGNoYXIgKikgZGUtPmRfbmFtZSwgIi4uIikpCisJIAl7CisJCQljb250aW51 ZTsKKwkgCX0KKworCQlyZWFkX2ZpbGUgPSBwc3ByaW50ZigiJXMvJXMiLCAoY2hhciAqKSBvbGRf cGF0aCwgKGNoYXIgKikgZGUtPmRfbmFtZSk7CisJCQorCQlvbGRfZmQgPSBmb3BlbihyZWFkX2Zp bGUsICJyYiIpOworCQlyZWFkX2l0ZW1zID0gMDsKKwkJCisJCWRvIAorCQl7CisJCQltZW1zZXQo cGdfYnVmLmRhdGEsIDAsIEJMQ0tTWik7CQkKKwkJCXJlYWRfaXRlbXMgPSBmcmVhZChwZ19idWYu ZGF0YSArIHdyaXRlX29mZnNldCwgZWxlbWVudF9zaXplLCB0b19yZWFkX2l0ZW1zLCBvbGRfZmQp OyAgLyogaG93IG1hbnkgaXRlbXMgd2UgcmVhZCAqLworCisJCQlpZiAodG9fcmVhZF9pdGVtcyA9 PSBuX2l0ZW1zKSAvKiBub3QgZmluaXNoaW5nIHVwIGEgcGFydGlhbCByZWFkICovCisJCQl7CisK KwkJCQkoKFBhZ2VIZWFkZXIpIHBnX2J1Zi5kYXRhKS0+cGRfbG93ZXIgPSBTaXplT2ZQYWdlSGVh ZGVyRGF0YTsKKwkJCQkoKFBhZ2VIZWFkZXIpIHBnX2J1Zi5kYXRhKS0+cGRfdXBwZXIgPSBCTENL U1o7CisJCQkJKChQYWdlSGVhZGVyKSBwZ19idWYuZGF0YSktPnBkX3NwZWNpYWwgPSBCTENLU1o7 CisJCQkJCisJCQkJKChQYWdlSGVhZGVyKSBwZ19idWYuZGF0YSktPnBkX2NoZWNrc3VtID0KKwkJ CQkJcGdfY2hlY2tzdW1fcGFnZShwZ19idWYuZGF0YSwgYmxrbm8pOworCisJCQkJZndyaXRlKHBn X2J1Zi5kYXRhLCBTaXplT2ZQYWdlSGVhZGVyRGF0YSwgMSwgbmV3X2ZwKTsgLyogd3JpdGUgcGFn ZSBoZWFkZXIgZGF0YSAqLworCQkJfQorCisJCQkKKwkJCXdyaXRlX2l0ZW1zICs9IGZ3cml0ZShw Z19idWYuZGF0YSArIHdyaXRlX29mZnNldCwgZWxlbWVudF9zaXplLCByZWFkX2l0ZW1zLCBuZXdf ZnApOyAgLyogaW5jcmVtZW50IGhvdyBtYW55IGl0ZW1zIHdyaXR0ZW4gKi8KKwkJCQkJCQorCQkJ aWYgKHdyaXRlX2l0ZW1zICUgbl9pdGVtcyA9PSAwICYmIHdyaXRlX2l0ZW1zID4gMCAmJiBlcnJu byA9PSAwKSAvKiBmaW5pc2hlZCB3cml0aW5nIGludG8gbmV3IHBhZ2UuICovCisJCQl7CisJCQkJ aWYgKHdyaXRlX2l0ZW1zID09IG5faXRlbXMgKiBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKSAvKiBl bmQgb2Ygc2VnbWVudCAqLworCQkJCXsKKwkJCQkJZmNsb3NlKG5ld19mcCk7CisJCQkJCXBhZ2Vz X3dyaXR0ZW4gPSAwOworCQkJCQl3cml0ZV9maWxlX3NlZ25vICsrOworCQkJCQl3cml0ZV9pdGVt cyA9IDA7CisJCQkJCXdyaXRlX2ZpbGUgPSBwc3ByaW50ZigiJXMvJTA0WCIsIG5ld19wYXRoLCB3 cml0ZV9maWxlX3NlZ25vKTsKKwkJCQkJbmV3X2ZwID0gZm9wZW4oKGNoYXIgKil3cml0ZV9maWxl LCAid2IiKTsKKwkJCQkJcmVzID0gaW5pdF9uZXdfc2xydV9maWxlKG5ld19mcCk7CisJCQkJCWlm IChyZXMgPCAwIHx8IG5ld19mcCA9PSBOVUxMKQorCQkJCQl7CisJCQkJCQlmY2xvc2UobmV3X2Zw KTsKKwkJCQkJCWNsZWFudXBfZGlyZW50cyhhbGxfZGlyZW50cywgdG90YWxfcmVhZF9maWxlcyk7 CisJCQkJCQkKKwkJCQkJfQorCQkJCX0gZWxzZSB7IC8qIGVuZCBvZiBwYWdlIGJ1dCBub3Qgc2Vn bWVudCAqLworCQkJCQkvL2ZmbHVzaChuZXdfZnApOworCQkJCQlwYWdlc193cml0dGVuICsrOyAK KwkJCQl9CisKKwkJCQlibGtubysrOyAKKworCQkJCXRvX3JlYWRfaXRlbXMgPSBuX2l0ZW1zOyAv KiB0b19yZWFkX2l0ZW1zID0gbiAqLworCQkJCXJlcyA9IGZzZWVrKG5ld19mcCwgKHBhZ2VzX3dy aXR0ZW4gKiBCTENLU1opLCBTRUVLX1NFVCk7CisJCQkJaWYgKHJlcyA8IDApCisJCQkJeworCQkJ CQlmY2xvc2UobmV3X2ZwKTsKKwkJCQkJY2xlYW51cF9kaXJlbnRzKGFsbF9kaXJlbnRzLCB0b3Rh bF9yZWFkX2ZpbGVzKTsKKwkJCQkJcmV0dXJuIC0xOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJ LyplbmQgb2Ygc2VnbWVudCBpbiBzb3VyY2UgZGlyKi8KKwkJCQlpZiAocmVhZF9pdGVtcyA8IHRv X3JlYWRfaXRlbXMpIAorCQkJCXsKKwkJCQkJdG9fcmVhZF9pdGVtcyA9IG5faXRlbXMgLSByZWFk X2l0ZW1zOyAvKiByZWFkIHJlbWFpbmluZyBpdGVtcyAqLworCQkJCX0KKwkJCX0KKwkJfSB3aGls ZSAoIWZlb2Yob2xkX2ZkKSk7ICAvKiB1bnRpbCBlbmQgb2YgZmlsZSAqLworCQlmY2xvc2Uob2xk X2ZkKTsKKwl9CisJZmZsdXNoKG5ld19mcCk7CisJCisJLyogZnJlZSBtZW1vcnkgbWFsbG9jJ2Qg Ynkgc2NhbmRpciB3aGlsZSBzb3J0aW5nICovCisJY2xlYW51cF9kaXJlbnRzKGFsbF9kaXJlbnRz LCB0b3RhbF9yZWFkX2ZpbGVzKTsKKworCXJldHVybiAwOworfQorCiB2b2lkCiBjaGVja19maWxl X2Nsb25lKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUvZnVuY3Rpb24u YyBiL3NyYy9iaW4vcGdfdXBncmFkZS9mdW5jdGlvbi5jCmluZGV4IDkzZDk3NTg2NGJhLi45MTQx YzMwYjE2NSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ191cGdyYWRlL2Z1bmN0aW9uLmMKKysrIGIv c3JjL2Jpbi9wZ191cGdyYWRlL2Z1bmN0aW9uLmMKQEAgLTcsNiArNyw3IEBACiAgKglzcmMvYmlu L3BnX3VwZ3JhZGUvZnVuY3Rpb24uYwogICovCiAKKwogI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgi CiAKICNpbmNsdWRlICJhY2Nlc3MvdHJhbnNhbS5oIgpAQCAtNDIsNiArNDMsNDMgQEAgbGlicmFy eV9uYW1lX2NvbXBhcmUoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKQogCQkJKChjb25z dCBMaWJyYXJ5SW5mbyAqKSBwMiktPmRibnVtOwogfQogCisvKgorICogcXNvcnQgY29tcGFyYXRv ciBmb3IgaGV4IGZpbGVuYW1lcworICovCitzdGF0aWMgaW50CitmaWxlX25hbWVfY29tcGFyZShj b25zdCBzdHJ1Y3QgZGlyZW50ICoqIGRlXzEsIGNvbnN0IHN0cnVjdCBkaXJlbnQgKiogZGVfMikK K3sKKwlpbnQgbjE7CisJaW50IG4yOworCisKKwljaGFyICogZm5hbWVfMTsKKwljaGFyICogZm5h bWVfMjsKKworCWZuYW1lXzEgPSAoY2hhciAqKSAoKmRlXzEpLT5kX25hbWU7CisJZm5hbWVfMiA9 IChjaGFyICopICgqZGVfMiktPmRfbmFtZTsKKwkKKwlpZiAoKHN0cmNtcChmbmFtZV8xLCAiLiIp KSB8fCBzdHJjbXAoZm5hbWVfMSwgIi4uIikpIAorCXsKKwkJbjEgPSAoaW50KSBzdHJ0b2woZm5h bWVfMSwgTlVMTCwgMTYpOworCX0gZWxzZSB7CisJCW4xID0gLTE7CisJfQorCisJaWYgKChzdHJj bXAoZm5hbWVfMiwgIi4iKSkgfHwgc3RyY21wKGZuYW1lXzIsICIuLiIpKQorCXsKKwkJbjIgPSAo aW50KSBzdHJ0b2woZm5hbWVfMiwgTlVMTCwgMTYpOworCX0gZWxzZSB7CisJCW4yID0gLTE7CisJ fQorCisJaWYgKG4xID09IG4yKSAKKwl7CisJCXJldHVybiAxOyAvL2FyYml0cmFyaWx5IHNlbGVj dCB0aGUgZmlyc3QgaW5wdXQKKwl9IGVsc2UgeworCQlyZXR1cm4gbjEgLSBuMjsKKwl9Cit9CiAK IC8qCiAgKiBnZXRfbG9hZGFibGVfbGlicmFyaWVzKCkKQEAgLTEwOSw2ICsxNDcsMzQgQEAgZ2V0 X2xvYWRhYmxlX2xpYnJhcmllcyh2b2lkKQogfQogCiAKKy8qCisgKiBnZXRfc29ydGVkX2hleF9m aWxlcygpCisgKiBnaXZlbiB0aGUgZmlsZXBhdGggb2YgYSBkaXJlY3RvcnksCisgKiByZXR1cm4g YXJyYXkgb2YgY2hpbGQgZGlyZW50cyB3aXRoIGhleCBmaWxlbmFtZXMgZS5nICcwMDBBJworICog aW4gc29ydGVkIG9yZGVyCisgKi8KK3N0cnVjdCBkaXJlbnQqKiAKK2dldF9zb3J0ZWRfaGV4X2Zp bGVzKGNoYXIgKiBkciwgaW50ICogc2l6ZSkKK3sKKwlzdHJ1Y3QgZGlyZW50ICoqZW50cnlfbGlz dDsKKworCSpzaXplID0gc2NhbmRpcihkciwgJmVudHJ5X2xpc3QsIE5VTEwsIGZpbGVfbmFtZV9j b21wYXJlKTsKKwlpZiAoKnNpemUgPCAwKQorCXsKKwkJcmV0dXJuIE5VTEw7IC8vZXJyb3IKKwl9 CisJcmV0dXJuIGVudHJ5X2xpc3Q7Cit9CisKK3ZvaWQKK2NsZWFudXBfZGlyZW50cyhzdHJ1Y3Qg ZGlyZW50ICoqIGFsbF9kaXJlbnRzLCBpbnQgdG90YWxfcmVhZF9maWxlcykKK3sJCisJZm9yIChp bnQgaSA9IDA7IGkgPCB0b3RhbF9yZWFkX2ZpbGVzOyBpKyspCisJeworCQkgZnJlZSgoc3RydWN0 IGRpcmVudCAqKikgYWxsX2RpcmVudHNbaV0pOworCX0KKwlmcmVlKChzdHJ1Y3QgZGlyZW50ICoq KSBhbGxfZGlyZW50cyk7Cit9CiAvKgogICogY2hlY2tfbG9hZGFibGVfbGlicmFyaWVzKCkKICAq CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5jIGIvc3JjL2Jpbi9w Z191cGdyYWRlL3BnX3VwZ3JhZGUuYwppbmRleCAxMTVmYWEyMjJlMy4uYmYwMWIxZGY1ZTEgMTAw NjQ0Ci0tLSBhL3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmMKKysrIGIvc3JjL2Jpbi9w Z191cGdyYWRlL3BnX3VwZ3JhZGUuYwpAQCAtMzgsMjcgKzM4LDM1IEBACiAKICNpbmNsdWRlICJw b3N0Z3Jlc19mZS5oIgogCisjaW5jbHVkZSA8ZGlyZW50Lmg+CiAjaW5jbHVkZSA8dGltZS5oPgor I2luY2x1ZGUgPHVuaXN0ZC5oPgogCiAjaWZkZWYgSEFWRV9MQU5HSU5GT19ICiAjaW5jbHVkZSA8 bGFuZ2luZm8uaD4KICNlbmRpZgogCisjaW5jbHVkZSAiYWNjZXNzL3NscnVkZWZzLmgiCiAjaW5j bHVkZSAiY2F0YWxvZy9wZ19jbGFzc19kLmgiCiAjaW5jbHVkZSAiY29tbW9uL2ZpbGVfcGVybS5o IgogI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmgiCiAjaW5jbHVkZSAiY29tbW9uL3Jlc3RyaWN0 ZWRfdG9rZW4uaCIKICNpbmNsdWRlICJmZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKICNpbmNsdWRl ICJwZ191cGdyYWRlLmgiCisjaW5jbHVkZSAic3RvcmFnZS9idWZwYWdlLmgiCiAKIHN0YXRpYyB2 b2lkIHByZXBhcmVfbmV3X2NsdXN0ZXIodm9pZCk7CiBzdGF0aWMgdm9pZCBwcmVwYXJlX25ld19n bG9iYWxzKHZvaWQpOwogc3RhdGljIHZvaWQgY3JlYXRlX25ld19vYmplY3RzKHZvaWQpOwogc3Rh dGljIHZvaWQgY29weV94YWN0X3hsb2dfeGlkKHZvaWQpOwotc3RhdGljIHZvaWQgc2V0X2Zyb3pl bnhpZHMoYm9vbCBtaW5teGlkX29ubHkpOworc3RhdGljIHZvaWQgc2V0X2Zyb3plbnhpZHMoYm9v bCBtaW5teGlkX29ubHkpOzsKIHN0YXRpYyB2b2lkIG1ha2Vfb3V0cHV0ZGlycyhjaGFyICpwZ2Rh dGEpOwogc3RhdGljIHZvaWQgc2V0dXAoY2hhciAqYXJndjAsIGJvb2wgKmxpdmVfY2hlY2spOwog CisKKyNkZWZpbmUgTUFYQlVGU0laRSAoQkxDS1NaIC0gU2l6ZU9mUGFnZUhlYWRlckRhdGEpCisj ZGVmaW5lIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQgMzIKKwogQ2x1c3RlckluZm8gb2xkX2NsdXN0 ZXIsCiAJCQluZXdfY2x1c3RlcjsKIE9TSW5mbwkJb3NfaW5mbzsKQEAgLTU3MywxMSArNTgxLDM2 IEBAIGNvcHlfeGFjdF94bG9nX3hpZCh2b2lkKQogCSAqIENvcHkgb2xkIGNvbW1pdCBsb2dzIHRv IG5ldyBkYXRhIGRpci4gcGdfY2xvZyBoYXMgYmVlbiByZW5hbWVkIHRvCiAJICogcGdfeGFjdCBp biBwb3N0LTEwIGNsdXN0ZXJzLgogCSAqLwotCWNvcHlfc3ViZGlyX2ZpbGVzKEdFVF9NQUpPUl9W RVJTSU9OKG9sZF9jbHVzdGVyLm1ham9yX3ZlcnNpb24pIDw9IDkwNiA/Ci0JCQkJCSAgInBnX2Ns b2ciIDogInBnX3hhY3QiLAotCQkJCQkgIEdFVF9NQUpPUl9WRVJTSU9OKG5ld19jbHVzdGVyLm1h am9yX3ZlcnNpb24pIDw9IDkwNiA/Ci0JCQkJCSAgInBnX2Nsb2ciIDogInBnX3hhY3QiKTsKKwkg CisJaWYgKG9sZF9jbHVzdGVyLmNvbnRyb2xkYXRhLmNhdF92ZXIgPD0gQ0xPR19GT1JNQVRDSEFO R0VfQ0FUX1ZFUiAmJgorCQluZXdfY2x1c3Rlci5jb250cm9sZGF0YS5jYXRfdmVyID49IENMT0df Rk9STUFUQ0hBTkdFX0NBVF9WRVIpCisJeworCQkJaW50IHJldDsKKwkJCXJldCA9IGNvcHlfdG9f bmV3X2Zvcm1hdChHRVRfTUFKT1JfVkVSU0lPTihvbGRfY2x1c3Rlci5tYWpvcl92ZXJzaW9uKSA8 PSA5MDYgPworCQkJInBnX2Nsb2ciIDogInBnX3hhY3QiLCAKKwkJCSJwZ194YWN0IiwgMSk7CisJ CQkKKwkJCWlmIChyZXQgPCAwKQorCQkJeworCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVmb3Jt YXQgY2xvZyBmaWxlcyIpOworCQkJfQorCX0KIAorCWlmIChvbGRfY2x1c3Rlci5jb250cm9sZGF0 YS5jYXRfdmVyID49IENMT0dfRk9STUFUQ0hBTkdFX0NBVF9WRVIgJiYKKwkJbmV3X2NsdXN0ZXIu Y29udHJvbGRhdGEuY2F0X3ZlciA+PSBDTE9HX0ZPUk1BVENIQU5HRV9DQVRfVkVSKQorCXsKKwkJ Y29weV9zdWJkaXJfZmlsZXMoInBnX3hhY3QiLCAicGdfeGFjdCIpOworCX0KKworCWlmIChvbGRf Y2x1c3Rlci5jb250cm9sZGF0YS5jYXRfdmVyIDw9IENMT0dfRk9STUFUQ0hBTkdFX0NBVF9WRVIg JiYKKwkJbmV3X2NsdXN0ZXIuY29udHJvbGRhdGEuY2F0X3ZlciA8PSBDTE9HX0ZPUk1BVENIQU5H RV9DQVRfVkVSKQorCXsKKwkJY29weV9zdWJkaXJfZmlsZXMoR0VUX01BSk9SX1ZFUlNJT04ob2xk X2NsdXN0ZXIubWFqb3JfdmVyc2lvbikgPD0gOTA2ID8KKwkJCQkJInBnX2Nsb2ciIDogInBnX3hh Y3QiLAorCQkJCQlHRVRfTUFKT1JfVkVSU0lPTihuZXdfY2x1c3Rlci5tYWpvcl92ZXJzaW9uKSA8 PSA5MDYgPworCQkJCQkicGdfY2xvZyIgOiAicGdfeGFjdCIpOworCX0KKwkKIAlwcmVwX3N0YXR1 cygiU2V0dGluZyBvbGRlc3QgWElEIGZvciBuZXcgY2x1c3RlciIpOwogCWV4ZWNfcHJvZyhVVElM SVRZX0xPR19GSUxFLCBOVUxMLCB0cnVlLCB0cnVlLAogCQkJICAiXCIlcy9wZ19yZXNldHdhbFwi IC1mIC11ICV1IFwiJXNcIiIsCkBAIC02MzMsMjMgKzY2Niw0NCBAQCBjb3B5X3hhY3RfeGxvZ194 aWQodm9pZCkKIAl9CiAJZWxzZSBpZiAobmV3X2NsdXN0ZXIuY29udHJvbGRhdGEuY2F0X3ZlciA+ PSBNVUxUSVhBQ1RfRk9STUFUQ0hBTkdFX0NBVF9WRVIpCiAJeworCQljb3B5X3RvX25ld19mb3Jt YXQoInBnX211bHRpeGFjdC9vZmZzZXRzIiwgInBnX211bHRpeGFjdC9vZmZzZXRzIiwgTVVMVElY QUNUX01FTUJFUl9FTlRSWV9TSVpFKTsKKwkJY29weV90b19uZXdfZm9ybWF0KCJwZ19tdWx0aXhh Y3QvbWVtYmVycyIsICJwZ19tdWx0aXhhY3QvbWVtYmVycyIsIE1VTFRJWEFDVF9PRkZTRVRfRU5U UllfU0laRSk7CSAKKworCisJCXByZXBfc3RhdHVzKCJTZXR0aW5nIG5leHQgbXVsdGl4YWN0IElE IGFuZCBvZmZzZXQgZm9yIG5ldyBjbHVzdGVyIik7CisKIAkJLyoKKwkJICogd2UgcHJlc2VydmUg YWxsIGZpbGVzIGFuZCBjb250ZW50cywgc28gd2UgbXVzdCBwcmVzZXJ2ZSBib3RoICJuZXh0Igor CQkgKiBjb3VudGVycyBoZXJlIGFuZCB0aGUgb2xkZXN0IG11bHRpIHByZXNlbnQgb24gc3lzdGVt LgorCQkgKi8KKwkJZXhlY19wcm9nKFVUSUxJVFlfTE9HX0ZJTEUsIE5VTEwsIHRydWUsIHRydWUs CisJCQkJICAiXCIlcy9wZ19yZXNldHdhbFwiIC1PICV1IC1tICV1LCV1IFwiJXNcIiIsCisJCQkJ ICBuZXdfY2x1c3Rlci5iaW5kaXIsCisJCQkJICBvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5jaGtw bnRfbnh0bXhvZmYsCisJCQkJICBvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5jaGtwbnRfbnh0bXVs dGksCisJCQkJICBvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5jaGtwbnRfb2xkc3RNdWx0aSwKKwkJ CQkgIG5ld19jbHVzdGVyLnBnZGF0YSk7CisJCWNoZWNrX29rKCk7CisKKwl9CisJLyplbHNlIGlm IChuZXdfY2x1c3Rlci5jb250cm9sZGF0YS5jYXRfdmVyID49IE1VTFRJWEFDVF9GT1JNQVRDSEFO R0VfQ0FUX1ZFUikKKwl7CisJCSoKIAkJICogUmVtb3ZlIG9mZnNldHMvMDAwMCBmaWxlIGNyZWF0 ZWQgYnkgaW5pdGRiIHRoYXQgbm8gbG9uZ2VyIG1hdGNoZXMKIAkJICogdGhlIG5ldyBtdWx0aS14 aWQgdmFsdWUuICAibWVtYmVycyIgc3RhcnRzIGF0IHplcm8gc28gbm8gbmVlZCB0bwogCQkgKiBy ZW1vdmUgaXQuCi0JCSAqLworCQkgKgogCQlyZW1vdmVfbmV3X3N1YmRpcigicGdfbXVsdGl4YWN0 L29mZnNldHMiLCBmYWxzZSk7CiAKIAkJcHJlcF9zdGF0dXMoIlNldHRpbmcgb2xkZXN0IG11bHRp eGFjdCBJRCBpbiBuZXcgY2x1c3RlciIpOwotCi0JCS8qCisgCQkqCiAJCSAqIFdlIGRvbid0IHBy ZXNlcnZlIGZpbGVzIGluIHRoaXMgY2FzZSwgYnV0IGl0J3MgaW1wb3J0YW50IHRoYXQgdGhlCiAJ CSAqIG9sZGVzdCBtdWx0aSBpcyBzZXQgdG8gdGhlIGxhdGVzdCB2YWx1ZSB1c2VkIGJ5IHRoZSBv bGQgc3lzdGVtLCBzbwogCQkgKiB0aGF0IG11bHRpeGFjdC5jIHJldHVybnMgdGhlIGVtcHR5IHNl dCBmb3IgbXVsdGlzIHRoYXQgbWlnaHQgYmUKIAkJICogcHJlc2VudCBvbiBkaXNrLiAgV2Ugc2V0 IG5leHQgbXVsdGkgdG8gdGhlIHZhbHVlIGZvbGxvd2luZyB0aGF0OyBpdAogCQkgKiBtaWdodCBl bmQgdXAgd3JhcHBlZCBhcm91bmQgKGkuZS4gMCkgaWYgdGhlIG9sZCBjbHVzdGVyIGhhZAogCQkg KiBuZXh0PU1heE11bHRpWGFjdElkLCBidXQgbXVsdGl4YWN0LmMgY2FuIGNvcGUgd2l0aCB0aGF0 IGp1c3QgZmluZS4KLQkJICovCisJCSAqCiAJCWV4ZWNfcHJvZyhVVElMSVRZX0xPR19GSUxFLCBO VUxMLCB0cnVlLCB0cnVlLAogCQkJCSAgIlwiJXMvcGdfcmVzZXR3YWxcIiAtbSAldSwldSBcIiVz XCIiLAogCQkJCSAgbmV3X2NsdXN0ZXIuYmluZGlyLApAQCAtNjU3LDcgKzcxMSw4IEBAIGNvcHlf eGFjdF94bG9nX3hpZCh2b2lkKQogCQkJCSAgb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50 X254dG11bHRpLAogCQkJCSAgbmV3X2NsdXN0ZXIucGdkYXRhKTsKIAkJY2hlY2tfb2soKTsKLQl9 CisJCQorCX0qLwogCiAJLyogbm93IHJlc2V0IHRoZSB3YWwgYXJjaGl2ZXMgaW4gdGhlIG5ldyBj bHVzdGVyICovCiAJcHJlcF9zdGF0dXMoIlJlc2V0dGluZyBXQUwgYXJjaGl2ZXMiKTsKQEAgLTY2 OSw3ICs3MjQsNiBAQCBjb3B5X3hhY3RfeGxvZ194aWQodm9pZCkKIAljaGVja19vaygpOwogfQog Ci0KIC8qCiAgKglzZXRfZnJvemVueGlkcygpCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191 cGdyYWRlL3BnX3VwZ3JhZGUuaCBiL3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmgKaW5k ZXggMzE1ODliMGZkYzQuLjI2YmQ1NmNjNDI5IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3VwZ3Jh ZGUvcGdfdXBncmFkZS5oCisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmgKQEAg LTcsNiArNyw3IEBACiAKICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxhc3NlcnQuaD4K KyNpbmNsdWRlIDxkaXJlbnQuaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPHN5 cy90aW1lLmg+CiAKQEAgLTExMyw3ICsxMTQsMTYgQEAgZXh0ZXJuIGNoYXIgKm91dHB1dF9maWxl c1tdOwogICogdmVyc2lvbiB0byB0aGlzIHZhbHVlLiAgcGdfdXBncmFkZSBiZWhhdmlvciBkZXBl bmRzIG9uIHdoZXRoZXIgb2xkIGFuZCBuZXcKICAqIHNlcnZlciB2ZXJzaW9ucyBhcmUgYm90aCBu ZXdlciB0aGFuIHRoaXMsIG9yIG9ubHkgdGhlIG5ldyBvbmUgaXMuCiAgKi8KLSNkZWZpbmUgTVVM VElYQUNUX0ZPUk1BVENIQU5HRV9DQVRfVkVSIDIwMTMwMTIzMQorCisvKgorICogcGFnZSBoZWFk ZXIgZm9ybWF0IGNoYW5nZQorICovCisjZGVmaW5lIE1VTFRJWEFDVF9GT1JNQVRDSEFOR0VfQ0FU X1ZFUiAyMDIyMDkxNDEKKworLyogCisgKiBwYWdlIGhlYWRlciBmb3JtYXQgY2hhbmdlIAorICov CisjZGVmaW5lIENMT0dfRk9STUFUQ0hBTkdFX0NBVF9WRVIgMjAyMjEwMTQxCiAKIC8qCiAgKiBs YXJnZSBvYmplY3QgY2h1bmsgc2l6ZSBhZGRlZCB0byBwZ19jb250cm9sZGF0YSwKQEAgLTEyMiw3 ICsxMzIsNyBAQCBleHRlcm4gY2hhciAqb3V0cHV0X2ZpbGVzW107CiAjZGVmaW5lIExBUkdFX09C SkVDVF9TSVpFX1BHX0NPTlRST0xfVkVSIDk0MgogCiAvKgotICogY2hhbmdlIGluIEpTT05CIGZv cm1hdCBkdXJpbmcgOS40IGJldGEKKyAqIGFkZGl0aW9uIG9mIHBhZ2UgaGVhZGVyIAogICovCiAj ZGVmaW5lIEpTT05CX0ZPUk1BVF9DSEFOR0VfQ0FUX1ZFUiAyMDE0MDkyOTEKIApAQCAtMzc4LDYg KzM4OCw5IEBAIHZvaWQJCXJld3JpdGVWaXNpYmlsaXR5TWFwKGNvbnN0IGNoYXIgKmZyb21maWxl LCBjb25zdCBjaGFyICp0b2ZpbGUsCiB2b2lkCQljaGVja19maWxlX2Nsb25lKHZvaWQpOwogdm9p ZAkJY2hlY2tfaGFyZF9saW5rKHZvaWQpOwogCisKK2ludCAJY29weV90b19uZXdfZm9ybWF0KGNv bnN0IGNoYXIgKm9sZF9zdWJkaXIsIGNvbnN0IGNoYXIgKm5ld19zdWJkaXIsIGludCBlbGVtZW50 X3NpemUpOworCiAvKiBmb3Blbl9wcml2KCkgaXMgbm8gbG9uZ2VyIGRpZmZlcmVudCBmcm9tIGZv cGVuKCkgKi8KICNkZWZpbmUgZm9wZW5fcHJpdihwYXRoLCBtb2RlKQlmb3BlbihwYXRoLCBtb2Rl KQogCkBAIC0zODUsNiArMzk4LDggQEAgdm9pZAkJY2hlY2tfaGFyZF9saW5rKHZvaWQpOwogCiB2 b2lkCQlnZXRfbG9hZGFibGVfbGlicmFyaWVzKHZvaWQpOwogdm9pZAkJY2hlY2tfbG9hZGFibGVf bGlicmFyaWVzKHZvaWQpOwordm9pZCAJCWNsZWFudXBfZGlyZW50cyhzdHJ1Y3QgZGlyZW50ICoq IGFsbF9kaXJlbnRzLCBpbnQgdG90YWxfcmVhZF9maWxlcyk7CitzdHJ1Y3QgZGlyZW50KiogCWdl dF9zb3J0ZWRfaGV4X2ZpbGVzKGNoYXIgKiBkciwgaW50ICogc2l6ZSk7CiAKIC8qIGluZm8uYyAq LwogCmRpZmYgLS1naXQgYS9zcmMvY29tbW9uL3JlbHBhdGguYyBiL3NyYy9jb21tb24vcmVscGF0 aC5jCmluZGV4IDFiNmI2MjBjZTgzLi40ZWMwZTM2ZDU1NiAxMDA2NDQKLS0tIGEvc3JjL2NvbW1v bi9yZWxwYXRoLmMKKysrIGIvc3JjL2NvbW1vbi9yZWxwYXRoLmMKQEAgLTIyLDYgKzIyLDE2IEBA CiAjaW5jbHVkZSAiY29tbW9uL3JlbHBhdGguaCIKICNpbmNsdWRlICJzdG9yYWdlL2JhY2tlbmRp ZC5oIgogCisvKgorICogU0xSVSBJRCB0byBwYXRoIG1hcHBpbmcKKyAqLworI2RlZmluZSBQR19T TFJVKHN5bW5hbWUsbmFtZSxwYXRoLHN5bmNocm9uaXplKSBcCisJcGF0aCwKKworc3RhdGljIGNo YXIgKnNscnVfZGlyc1tdID0KK3sKKyNpbmNsdWRlICJhY2Nlc3Mvc2xydWxpc3QuaCIKK307CiAK IC8qCiAgKiBMb29rdXAgdGFibGUgb2YgZm9yayBuYW1lIGJ5IGZvcmsgbnVtYmVyLgpAQCAtMTI5 LDcgKzEzOSw3IEBAIEdldERhdGFiYXNlUGF0aChPaWQgZGJPaWQsIE9pZCBzcGNPaWQpCiB9CiAK IC8qCi0gKiBHZXRSZWxhdGlvblBhdGggLSBjb25zdHJ1Y3QgcGF0aCB0byBhIHJlbGF0aW9uJ3Mg ZmlsZQorICogR2V0U01nckZpbGVQYXRoIC0gY29uc3RydWN0IHBhdGggdG8gYSByZWxhdGlvbidz IGZpbGUKICAqCiAgKiBSZXN1bHQgaXMgYSBwYWxsb2MnZCBzdHJpbmcuCiAgKgpAQCAtMTM4LDEy ICsxNDgsMjcgQEAgR2V0RGF0YWJhc2VQYXRoKE9pZCBkYk9pZCwgT2lkIHNwY09pZCkKICAqIHRo ZSB0cm91YmxlIGNvbnNpZGVyaW5nIEJhY2tlbmRJZCBpcyBqdXN0IGludCBhbnl3YXkuCiAgKi8K IGNoYXIgKgotR2V0UmVsYXRpb25QYXRoKE9pZCBkYk9pZCwgT2lkIHNwY09pZCwgUmVsRmlsZU51 bWJlciByZWxOdW1iZXIsCitHZXRTTWdyRmlsZVBhdGgoT2lkIGRiT2lkLCBPaWQgc3BjT2lkLCBS ZWxGaWxlTnVtYmVyIHJlbE51bWJlciwKIAkJCQlpbnQgYmFja2VuZElkLCBGb3JrTnVtYmVyIGZv cmtOdW1iZXIpCiB7CiAJY2hhcgkgICAqcGF0aDsKIAotCWlmIChzcGNPaWQgPT0gR0xPQkFMVEFC TEVTUEFDRV9PSUQpCisJaWYgKHNwY09pZCA9PSBTTFJVX1NQQ19PSUQpCisJeworCQlpZiAoZGJP aWQgPj0gbGVuZ3Rob2Yoc2xydV9kaXJzKSB8fCBmb3JrTnVtYmVyICE9IDAgfHwgYmFja2VuZElk ICE9IEludmFsaWRCYWNrZW5kSWQpCisJCXsKKyNpZm5kZWYgRlJPTlRFTkQKKwkJCWVyZXBvcnQo RVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAor CQkJCQkgZXJybXNnKCJpbnZhbGlkIFNMUlUgZmlsZSBsb2NhdG9yICV1LyV1LyV1LyV1LyV1IiwK KwkJCQkJCQlzcGNPaWQsIGRiT2lkLCByZWxOdW1iZXIsIGJhY2tlbmRJZCwgZm9ya051bWJlcikp KTsKKyNlbHNlCisJCQlyZXR1cm4gTlVMTDsKKyNlbmRpZgorCQl9CisJCXBhdGggPSBwc3ByaW50 ZigiJXMvJTA0WCIsIHNscnVfZGlyc1tkYk9pZF0sIHJlbE51bWJlcik7CisJfQorCWVsc2UgaWYg KHNwY09pZCA9PSBHTE9CQUxUQUJMRVNQQUNFX09JRCkKIAl7CiAJCS8qIFNoYXJlZCBzeXN0ZW0g cmVsYXRpb25zIGxpdmUgaW4ge2RhdGFkaXJ9L2dsb2JhbCAqLwogCQlBc3NlcnQoZGJPaWQgPT0g MCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvY2xvZy5oIGIvc3JjL2luY2x1ZGUv YWNjZXNzL2Nsb2cuaAppbmRleCA1NDNmMmUyNjQzYS4uYWYxNmEyYWZjYjkgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2FjY2Vzcy9jbG9nLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2Nsb2cu aApAQCAtNDAsMTggKzQwLDEyIEBAIGV4dGVybiB2b2lkIFRyYW5zYWN0aW9uSWRTZXRUcmVlU3Rh dHVzKFRyYW5zYWN0aW9uSWQgeGlkLCBpbnQgbnN1YnhpZHMsCiAJCQkJCQkJCQkgICBUcmFuc2Fj dGlvbklkICpzdWJ4aWRzLCBYaWRTdGF0dXMgc3RhdHVzLCBYTG9nUmVjUHRyIGxzbik7CiBleHRl cm4gWGlkU3RhdHVzIFRyYW5zYWN0aW9uSWRHZXRTdGF0dXMoVHJhbnNhY3Rpb25JZCB4aWQsIFhM b2dSZWNQdHIgKmxzbik7CiAKLWV4dGVybiBTaXplIENMT0dTaG1lbUJ1ZmZlcnModm9pZCk7Ci1l eHRlcm4gU2l6ZSBDTE9HU2htZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgQ0xPR1NobWVtSW5p dCh2b2lkKTsKIGV4dGVybiB2b2lkIEJvb3RTdHJhcENMT0codm9pZCk7CiBleHRlcm4gdm9pZCBT dGFydHVwQ0xPRyh2b2lkKTsKIGV4dGVybiB2b2lkIFRyaW1DTE9HKHZvaWQpOwotZXh0ZXJuIHZv aWQgQ2hlY2tQb2ludENMT0codm9pZCk7CiBleHRlcm4gdm9pZCBFeHRlbmRDTE9HKFRyYW5zYWN0 aW9uSWQgbmV3ZXN0WGFjdCk7CiBleHRlcm4gdm9pZCBUcnVuY2F0ZUNMT0coVHJhbnNhY3Rpb25J ZCBvbGRlc3RYYWN0LCBPaWQgb2xkZXN0eGlkX2RhdG9pZCk7CiAKLWV4dGVybiBpbnQJY2xvZ3N5 bmNmaWxldGFnKGNvbnN0IEZpbGVUYWcgKmZ0YWcsIGNoYXIgKnBhdGgpOwotCiAvKiBYTE9HIHN0 dWZmICovCiAjZGVmaW5lIENMT0dfWkVST1BBR0UJCTB4MDAKICNkZWZpbmUgQ0xPR19UUlVOQ0FU RQkJMHgxMApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2NvbW1pdF90cy5oIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL2NvbW1pdF90cy5oCmluZGV4IDc2NjJmOGUxYTljLi40ZTk4NmZjMDIz ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2NvbW1pdF90cy5oCisrKyBiL3NyYy9p bmNsdWRlL2FjY2Vzcy9jb21taXRfdHMuaApAQCAtMjcsNyArMjcsNiBAQCBleHRlcm4gYm9vbCBU cmFuc2FjdGlvbklkR2V0Q29tbWl0VHNEYXRhKFRyYW5zYWN0aW9uSWQgeGlkLAogZXh0ZXJuIFRy YW5zYWN0aW9uSWQgR2V0TGF0ZXN0Q29tbWl0VHNEYXRhKFRpbWVzdGFtcFR6ICp0cywKIAkJCQkJ CQkJCQkgICBSZXBPcmlnaW5JZCAqbm9kZWlkKTsKIAotZXh0ZXJuIFNpemUgQ29tbWl0VHNTaG1l bUJ1ZmZlcnModm9pZCk7CiBleHRlcm4gU2l6ZSBDb21taXRUc1NobWVtU2l6ZSh2b2lkKTsKIGV4 dGVybiB2b2lkIENvbW1pdFRzU2htZW1Jbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgQm9vdFN0cmFw Q29tbWl0VHModm9pZCk7CkBAIC00MSw4ICs0MCw2IEBAIGV4dGVybiB2b2lkIFNldENvbW1pdFRz TGltaXQoVHJhbnNhY3Rpb25JZCBvbGRlc3RYYWN0LAogCQkJCQkJCSBUcmFuc2FjdGlvbklkIG5l d2VzdFhhY3QpOwogZXh0ZXJuIHZvaWQgQWR2YW5jZU9sZGVzdENvbW1pdFRzWGlkKFRyYW5zYWN0 aW9uSWQgb2xkZXN0WGFjdCk7CiAKLWV4dGVybiBpbnQJY29tbWl0dHNzeW5jZmlsZXRhZyhjb25z dCBGaWxlVGFnICpmdGFnLCBjaGFyICpwYXRoKTsKLQogLyogWExPRyBzdHVmZiAqLwogI2RlZmlu ZSBDT01NSVRfVFNfWkVST1BBR0UJCTB4MDAKICNkZWZpbmUgQ09NTUlUX1RTX1RSVU5DQVRFCQkw eDEwCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmggYi9zcmMvaW5j bHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmgKaW5kZXggNGNiZTE3ZGU3YmQuLjk2ZjgzMjNmNGU1IDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmgKKysrIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL211bHRpeGFjdC5oCkBAIC0xMTgsOSArMTE4LDYgQEAgZXh0ZXJuIGJvb2wgTXVs dGlYYWN0SWRQcmVjZWRlcyhNdWx0aVhhY3RJZCBtdWx0aTEsIE11bHRpWGFjdElkIG11bHRpMik7 CiBleHRlcm4gYm9vbCBNdWx0aVhhY3RJZFByZWNlZGVzT3JFcXVhbHMoTXVsdGlYYWN0SWQgbXVs dGkxLAogCQkJCQkJCQkJCU11bHRpWGFjdElkIG11bHRpMik7CiAKLWV4dGVybiBpbnQJbXVsdGl4 YWN0b2Zmc2V0c3N5bmNmaWxldGFnKGNvbnN0IEZpbGVUYWcgKmZ0YWcsIGNoYXIgKnBhdGgpOwot ZXh0ZXJuIGludAltdWx0aXhhY3RtZW1iZXJzc3luY2ZpbGV0YWcoY29uc3QgRmlsZVRhZyAqZnRh ZywgY2hhciAqcGF0aCk7Ci0KIGV4dGVybiB2b2lkIEF0RU9YYWN0X011bHRpWGFjdCh2b2lkKTsK IGV4dGVybiB2b2lkIEF0UHJlcGFyZV9NdWx0aVhhY3Qodm9pZCk7CiBleHRlcm4gdm9pZCBQb3N0 UHJlcGFyZV9NdWx0aVhhY3QoVHJhbnNhY3Rpb25JZCB4aWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL3NscnUuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9zbHJ1LmgKaW5kZXggMTMw YzQxYzg2MzIuLjA0ZmMwNzhlOGMzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvc2xy dS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9zbHJ1LmgKQEAgLTEsNyArMSw3IEBACiAvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KICAqCiAgKiBzbHJ1LmgKLSAqCQlTaW1wbGUgTFJVIGJ1ZmZlcmluZyBm b3IgdHJhbnNhY3Rpb24gc3RhdHVzIGxvZ2ZpbGVzCisgKgkJQnVmZmVyaW5nIGZvciB0cmFuc2Fj dGlvbiBzdGF0dXMgbG9nZmlsZXMKICAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYt MjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKICAqIFBvcnRpb25zIENv cHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlh CkBAIC0xNCw5ICsxNCwzNiBAQAogI2RlZmluZSBTTFJVX0gKIAogI2luY2x1ZGUgImFjY2Vzcy94 bG9nZGVmcy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdGFibGVzcGFjZV9kLmgiCisjaW5jbHVk ZSAic3RvcmFnZS9idWYuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgogI2luY2x1ZGUg InN0b3JhZ2UvbHdsb2NrLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zbWdyLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9zeW5jLmgiCiAKKy8qIFBzZXVkbyBkYXRhYmFzZSBJRCB1c2VkIGZvciBTTFJVIGRh dGEuICovCisjZGVmaW5lIFNMUlVfU1BDX0lEIDkKKworLyogUHNldWRvIGRhdGFiYXNlIElEcyB1 c2VkIGJ5IGVhY2ggY2FjaGUuICovCisjZGVmaW5lIFBHX1NMUlUoc3ltbmFtZSxuYW1lLHBhdGgs IHN5bmNocm9uaXplKSBcCisJc3ltbmFtZSwKKwordHlwZWRlZiBlbnVtIFNscnVJZHMKK3sKKyNp bmNsdWRlICJhY2Nlc3Mvc2xydWxpc3QuaCIKKwlTTFJVX05FWFRfSUQKK30JCQlTbHJ1SWRzOwor I3VuZGVmIFBHX1NMUlUKKwordHlwZWRlZiBib29sICgqU2xydVBhZ2VQcmVjZWRlc0Z1bmN0aW9u KSAoaW50LCBpbnQpOworCitzdGF0aWMgaW5saW5lIFJlbEZpbGVMb2NhdG9yCitTbHJ1UmVsRmls ZUxvY2F0b3IodWludDMyIHNscnVfZGJfaWQsIHVpbnQzMiBzZWdtZW50X2lkKQoreworCVJlbEZp bGVMb2NhdG9yIHJsb2NhdG9yID0ge1NMUlVfU1BDX0lELCBzbHJ1X2RiX2lkLCBzZWdtZW50X2lk fTsKKwlyZXR1cm4gcmxvY2F0b3I7Cit9CisKIAogLyoKICAqIERlZmluZSBTTFJVIHNlZ21lbnQg c2l6ZS4gIEEgcGFnZSBpcyB0aGUgc2FtZSBCTENLU1ogYXMgaXMgdXNlZCBldmVyeXdoZXJlCkBA IC0zMywxNDIgKzYwLDQwIEBACiAgKi8KICNkZWZpbmUgU0xSVV9QQUdFU19QRVJfU0VHTUVOVAkz MgogCi0vKgotICogUGFnZSBzdGF0dXMgY29kZXMuICBOb3RlIHRoYXQgdGhlc2UgZG8gbm90IGlu Y2x1ZGUgdGhlICJkaXJ0eSIgYml0LgotICogcGFnZV9kaXJ0eSBjYW4gYmUgdHJ1ZSBvbmx5IGlu IHRoZSBWQUxJRCBvciBXUklURV9JTl9QUk9HUkVTUyBzdGF0ZXM7Ci0gKiBpbiB0aGUgbGF0dGVy IGNhc2UgaXQgaW1wbGllcyB0aGF0IHRoZSBwYWdlIGhhcyBiZWVuIHJlLWRpcnRpZWQgc2luY2UK LSAqIHRoZSB3cml0ZSBzdGFydGVkLgotICovCi10eXBlZGVmIGVudW0KLXsKLQlTTFJVX1BBR0Vf RU1QVFksCQkJLyogYnVmZmVyIGlzIG5vdCBpbiB1c2UgKi8KLQlTTFJVX1BBR0VfUkVBRF9JTl9Q Uk9HUkVTUywgLyogcGFnZSBpcyBiZWluZyByZWFkIGluICovCi0JU0xSVV9QQUdFX1ZBTElELAkJ CS8qIHBhZ2UgaXMgdmFsaWQgYW5kIG5vdCBiZWluZyB3cml0dGVuICovCi0JU0xSVV9QQUdFX1dS SVRFX0lOX1BST0dSRVNTIC8qIHBhZ2UgaXMgYmVpbmcgd3JpdHRlbiBvdXQgKi8KLX0gU2xydVBh Z2VTdGF0dXM7Ci0KLS8qCi0gKiBTaGFyZWQtbWVtb3J5IHN0YXRlCi0gKi8KLXR5cGVkZWYgc3Ry dWN0IFNscnVTaGFyZWREYXRhCi17Ci0JTFdMb2NrCSAgICpDb250cm9sTG9jazsKLQotCS8qIE51 bWJlciBvZiBidWZmZXJzIG1hbmFnZWQgYnkgdGhpcyBTTFJVIHN0cnVjdHVyZSAqLwotCWludAkJ CW51bV9zbG90czsKLQotCS8qCi0JICogQXJyYXlzIGhvbGRpbmcgaW5mbyBmb3IgZWFjaCBidWZm ZXIgc2xvdC4gIFBhZ2UgbnVtYmVyIGlzIHVuZGVmaW5lZAotCSAqIHdoZW4gc3RhdHVzIGlzIEVN UFRZLCBhcyBpcyBwYWdlX2xydV9jb3VudC4KLQkgKi8KLQljaGFyCSAgKipwYWdlX2J1ZmZlcjsK LQlTbHJ1UGFnZVN0YXR1cyAqcGFnZV9zdGF0dXM7Ci0JYm9vbAkgICAqcGFnZV9kaXJ0eTsKLQlp bnQJCSAgICpwYWdlX251bWJlcjsKLQlpbnQJCSAgICpwYWdlX2xydV9jb3VudDsKLQlMV0xvY2tQ YWRkZWQgKmJ1ZmZlcl9sb2NrczsKLQotCS8qCi0JICogT3B0aW9uYWwgYXJyYXkgb2YgV0FMIGZs dXNoIExTTnMgYXNzb2NpYXRlZCB3aXRoIGVudHJpZXMgaW4gdGhlIFNMUlUKLQkgKiBwYWdlcy4g IElmIG5vdCB6ZXJvL05VTEwsIHdlIG11c3QgZmx1c2ggV0FMIGJlZm9yZSB3cml0aW5nIHBhZ2Vz ICh0cnVlCi0JICogZm9yIHBnX3hhY3QsIGZhbHNlIGZvciBtdWx0aXhhY3QsIHBnX3N1YnRyYW5z LCBwZ19ub3RpZnkpLiAgZ3JvdXBfbHNuW10KLQkgKiBoYXMgbHNuX2dyb3Vwc19wZXJfcGFnZSBl bnRyaWVzIHBlciBidWZmZXIgc2xvdCwgZWFjaCBjb250YWluaW5nIHRoZQotCSAqIGhpZ2hlc3Qg TFNOIGtub3duIGZvciBhIGNvbnRpZ3VvdXMgZ3JvdXAgb2YgU0xSVSBlbnRyaWVzIG9uIHRoYXQg c2xvdCdzCi0JICogcGFnZS4KLQkgKi8KLQlYTG9nUmVjUHRyICpncm91cF9sc247Ci0JaW50CQkJ bHNuX2dyb3Vwc19wZXJfcGFnZTsKLQotCS8qLS0tLS0tLS0tLQotCSAqIFdlIG1hcmsgYSBwYWdl ICJtb3N0IHJlY2VudGx5IHVzZWQiIGJ5IHNldHRpbmcKLQkgKgkJcGFnZV9scnVfY291bnRbc2xv dG5vXSA9ICsrY3VyX2xydV9jb3VudDsKLQkgKiBUaGUgb2xkZXN0IHBhZ2UgaXMgdGhlcmVmb3Jl IHRoZSBvbmUgd2l0aCB0aGUgaGlnaGVzdCB2YWx1ZSBvZgotCSAqCQljdXJfbHJ1X2NvdW50IC0g cGFnZV9scnVfY291bnRbc2xvdG5vXQotCSAqIFRoZSBjb3VudHMgd2lsbCBldmVudHVhbGx5IHdy YXAgYXJvdW5kLCBidXQgdGhpcyBjYWxjdWxhdGlvbiBzdGlsbAotCSAqIHdvcmtzIGFzIGxvbmcg YXMgbm8gcGFnZSdzIGFnZSBleGNlZWRzIElOVF9NQVggY291bnRzLgotCSAqLS0tLS0tLS0tLQot CSAqLwotCWludAkJCWN1cl9scnVfY291bnQ7Ci0KLQkvKgotCSAqIGxhdGVzdF9wYWdlX251bWJl ciBpcyB0aGUgcGFnZSBudW1iZXIgb2YgdGhlIGN1cnJlbnQgZW5kIG9mIHRoZSBsb2c7Ci0JICog dGhpcyBpcyBub3QgY3JpdGljYWwgZGF0YSwgc2luY2Ugd2UgdXNlIGl0IG9ubHkgdG8gYXZvaWQg c3dhcHBpbmcgb3V0Ci0JICogdGhlIGxhdGVzdCBwYWdlLgotCSAqLwotCWludAkJCWxhdGVzdF9w YWdlX251bWJlcjsKLQotCS8qIFNMUlUncyBpbmRleCBmb3Igc3RhdGlzdGljcyBwdXJwb3NlcyAo bWlnaHQgbm90IGJlIHVuaXF1ZSkgKi8KLQlpbnQJCQlzbHJ1X3N0YXRzX2lkeDsKLX0gU2xydVNo YXJlZERhdGE7Ci0KLXR5cGVkZWYgU2xydVNoYXJlZERhdGEgKlNscnVTaGFyZWQ7Ci0KLS8qCi0g KiBTbHJ1Q3RsRGF0YSBpcyBhbiB1bnNoYXJlZCBzdHJ1Y3R1cmUgdGhhdCBwb2ludHMgdG8gdGhl IGFjdGl2ZSBpbmZvcm1hdGlvbgotICogaW4gc2hhcmVkIG1lbW9yeS4KLSAqLwotdHlwZWRlZiBz dHJ1Y3QgU2xydUN0bERhdGEKLXsKLQlTbHJ1U2hhcmVkCXNoYXJlZDsKLQotCS8qCi0JICogV2hp Y2ggc3luYyBoYW5kbGVyIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIGhhbmRpbmcgc3luYyByZXF1ZXN0 cyBvdmVyIHRvCi0JICogdGhlIGNoZWNrcG9pbnRlci4gIFNZTkNfSEFORExFUl9OT05FIHRvIGRp c2FibGUgZnN5bmMgKGVnIHBnX25vdGlmeSkuCi0JICovCi0JU3luY1JlcXVlc3RIYW5kbGVyIHN5 bmNfaGFuZGxlcjsKLQotCS8qCi0JICogRGVjaWRlIHdoZXRoZXIgYSBwYWdlIGlzICJvbGRlciIg Zm9yIHRydW5jYXRpb24gYW5kIGFzIGEgaGludCBmb3IKLQkgKiBldmljdGluZyBwYWdlcyBpbiBM UlUgb3JkZXIuICBSZXR1cm4gdHJ1ZSBpZiBldmVyeSBlbnRyeSBvZiB0aGUgZmlyc3QKLQkgKiBh cmd1bWVudCBpcyBvbGRlciB0aGFuIGV2ZXJ5IGVudHJ5IG9mIHRoZSBzZWNvbmQgYXJndW1lbnQu ICBOb3RlIHRoYXQKLQkgKiAhUGFnZVByZWNlZGVzKGEsYikgJiYgIVBhZ2VQcmVjZWRlcyhiLGEp IG5lZWQgbm90IGltcGx5IGE9PWI7IGl0IGFsc28KLQkgKiBhcmlzZXMgd2hlbiBzb21lIGVudHJp ZXMgYXJlIG9sZGVyIGFuZCBzb21lIGFyZSBub3QuICBGb3IgU0xSVXMgdXNpbmcKLQkgKiBTaW1w bGVMcnVUcnVuY2F0ZSgpLCB0aGlzIG11c3QgdXNlIG1vZHVsYXIgYXJpdGhtZXRpYy4gIChGb3Ig b3RoZXJzLAotCSAqIHRoZSBiZWhhdmlvciBvZiB0aGlzIGNhbGxiYWNrIGhhcyBubyBmdW5jdGlv bmFsIGltcGxpY2F0aW9ucy4pICBVc2UKLQkgKiBTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKCkg aW4gU0xSVXMgbWVldGluZyBpdHMgY3JpdGVyaWEuCi0JICovCi0JYm9vbAkJKCpQYWdlUHJlY2Vk ZXMpIChpbnQsIGludCk7Ci0KLQkvKgotCSAqIERpciBpcyBzZXQgZHVyaW5nIFNpbXBsZUxydUlu aXQgYW5kIGRvZXMgbm90IGNoYW5nZSB0aGVyZWFmdGVyLiBTaW5jZQotCSAqIGl0J3MgYWx3YXlz IHRoZSBzYW1lLCBpdCBkb2Vzbid0IG5lZWQgdG8gYmUgaW4gc2hhcmVkIG1lbW9yeS4KLQkgKi8K LQljaGFyCQlEaXJbNjRdOwotfSBTbHJ1Q3RsRGF0YTsKLQotdHlwZWRlZiBTbHJ1Q3RsRGF0YSAq U2xydUN0bDsKLQotCi1leHRlcm4gU2l6ZSBTaW1wbGVMcnVTaG1lbVNpemUoaW50IG5zbG90cywg aW50IG5sc25zKTsKLWV4dGVybiB2b2lkIFNpbXBsZUxydUluaXQoU2xydUN0bCBjdGwsIGNvbnN0 IGNoYXIgKm5hbWUsIGludCBuc2xvdHMsIGludCBubHNucywKLQkJCQkJCSAgTFdMb2NrICpjdGxs b2NrLCBjb25zdCBjaGFyICpzdWJkaXIsIGludCB0cmFuY2hlX2lkLAotCQkJCQkJICBTeW5jUmVx dWVzdEhhbmRsZXIgc3luY19oYW5kbGVyKTsKLWV4dGVybiBpbnQJU2ltcGxlTHJ1WmVyb1BhZ2Uo U2xydUN0bCBjdGwsIGludCBwYWdlbm8pOwotZXh0ZXJuIGludAlTaW1wbGVMcnVSZWFkUGFnZShT bHJ1Q3RsIGN0bCwgaW50IHBhZ2VubywgYm9vbCB3cml0ZV9vaywKLQkJCQkJCQkgIFRyYW5zYWN0 aW9uSWQgeGlkKTsKLWV4dGVybiBpbnQJU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkoU2xydUN0 bCBjdGwsIGludCBwYWdlbm8sCi0JCQkJCQkJCQkgICBUcmFuc2FjdGlvbklkIHhpZCk7Ci1leHRl cm4gdm9pZCBTaW1wbGVMcnVXcml0ZVBhZ2UoU2xydUN0bCBjdGwsIGludCBzbG90bm8pOwotZXh0 ZXJuIHZvaWQgU2ltcGxlTHJ1V3JpdGVBbGwoU2xydUN0bCBjdGwsIGJvb2wgYWxsb3dfcmVkaXJ0 aWVkKTsKICNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCi1leHRlcm4gdm9pZCBTbHJ1UGFnZVBy ZWNlZGVzVW5pdFRlc3RzKFNscnVDdGwgY3RsLCBpbnQgcGVyX3BhZ2UpOworZXh0ZXJuIHZvaWQg U2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cyhTbHJ1UGFnZVByZWNlZGVzRnVuY3Rpb24gUGFnZVBy ZWNlZGVzLAorCQkJCQkJCQkJICBpbnQgcGVyX3BhZ2UpOwogI2Vsc2UKICNkZWZpbmUgU2xydVBh Z2VQcmVjZWRlc1VuaXRUZXN0cyhjdGwsIHBlcl9wYWdlKSBkbyB7fSB3aGlsZSAoMCkKICNlbmRp ZgotZXh0ZXJuIHZvaWQgU2ltcGxlTHJ1VHJ1bmNhdGUoU2xydUN0bCBjdGwsIGludCBjdXRvZmZQ YWdlKTsKLWV4dGVybiBib29sIFNpbXBsZUxydURvZXNQaHlzaWNhbFBhZ2VFeGlzdChTbHJ1Q3Rs IGN0bCwgaW50IHBhZ2Vubyk7CitleHRlcm4gdm9pZCBTaW1wbGVMcnVUcnVuY2F0ZShpbnQgc2xy dV9pZCwgU2xydVBhZ2VQcmVjZWRlc0Z1bmN0aW9uIFBhZ2VQcmVjZWRlcywKKwkJCQkJCQkgIGlu dCBjdXRvZmZQYWdlKTsKK2V4dGVybiBib29sIFNpbXBsZUxydURvZXNQaHlzaWNhbFBhZ2VFeGlz dChpbnQgc2xydV9pZCwgaW50IHBhZ2Vubyk7CiAKLXR5cGVkZWYgYm9vbCAoKlNscnVTY2FuQ2Fs bGJhY2spIChTbHJ1Q3RsIGN0bCwgY2hhciAqZmlsZW5hbWUsIGludCBzZWdwYWdlLAordHlwZWRl ZiBib29sICgqU2xydVNjYW5DYWxsYmFjaykgKGludCBzbHJ1X2lkLAorCQkJCQkJCQkgIFNscnVQ YWdlUHJlY2VkZXNGdW5jdGlvbiBQYWdlUHJlY2VkZXMsCisJCQkJCQkJCSAgY2hhciAqZmlsZW5h bWUsIGludCBzZWdwYWdlLAogCQkJCQkJCQkgIHZvaWQgKmRhdGEpOwotZXh0ZXJuIGJvb2wgU2xy dVNjYW5EaXJlY3RvcnkoU2xydUN0bCBjdGwsIFNscnVTY2FuQ2FsbGJhY2sgY2FsbGJhY2ssIHZv aWQgKmRhdGEpOwotZXh0ZXJuIHZvaWQgU2xydURlbGV0ZVNlZ21lbnQoU2xydUN0bCBjdGwsIGlu dCBzZWdubyk7Ci0KLWV4dGVybiBpbnQJU2xydVN5bmNGaWxlVGFnKFNscnVDdGwgY3RsLCBjb25z dCBGaWxlVGFnICpmdGFnLCBjaGFyICpwYXRoKTsKK2V4dGVybiBib29sIFNscnVTY2FuRGlyZWN0 b3J5KGludCBzbHJ1X2lkLCBTbHJ1UGFnZVByZWNlZGVzRnVuY3Rpb24gUGFnZVByZWNlZGVzLAor CQkJCQkJCSAgU2xydVNjYW5DYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqZGF0YSk7CitleHRlcm4g dm9pZCBTbHJ1RGVsZXRlU2VnbWVudChpbnQgc2xydV9pZCwgaW50IHNlZ25vKTsKIAogLyogU2xy dVNjYW5EaXJlY3RvcnkgcHVibGljIGNhbGxiYWNrcyAqLwotZXh0ZXJuIGJvb2wgU2xydVNjYW5E aXJDYlJlcG9ydFByZXNlbmNlKFNscnVDdGwgY3RsLCBjaGFyICpmaWxlbmFtZSwKK2V4dGVybiBi b29sIFNscnVTY2FuRGlyQ2JSZXBvcnRQcmVzZW5jZShpbnQgc2xydV9pZCwKKwkJCQkJCQkJCQlT bHJ1UGFnZVByZWNlZGVzRnVuY3Rpb24gUGFnZVByZWNlZGVzLAorCQkJCQkJCQkJCWNoYXIgKmZp bGVuYW1lLAogCQkJCQkJCQkJCWludCBzZWdwYWdlLCB2b2lkICpkYXRhKTsKLWV4dGVybiBib29s IFNscnVTY2FuRGlyQ2JEZWxldGVBbGwoU2xydUN0bCBjdGwsIGNoYXIgKmZpbGVuYW1lLCBpbnQg c2VncGFnZSwKK2V4dGVybiBib29sIFNscnVTY2FuRGlyQ2JEZWxldGVBbGwoaW50IHNscnVfaWQs IFNscnVQYWdlUHJlY2VkZXNGdW5jdGlvbiBQYWdlUHJlY2VkZXMsCisJCQkJCQkJCSAgIGNoYXIg KmZpbGVuYW1lLCBpbnQgc2VncGFnZSwKIAkJCQkJCQkJICAgdm9pZCAqZGF0YSk7CiAKKy8qIEJ1 ZmZlciBhY2Nlc3MgKi8KK2V4dGVybiBCdWZmZXIgUmVhZFNscnVCdWZmZXIoaW50IHNscnVfaWQs IGludCBwYWdlbm8sIFJlYWRCdWZmZXJNb2RlIG1vZGUpOworZXh0ZXJuIEJ1ZmZlciBaZXJvU2xy dUJ1ZmZlcihpbnQgc2xydV9pZCwgaW50IHBhZ2Vubyk7CitleHRlcm4gYm9vbCBQcm9iZVNscnVC dWZmZXIoaW50IHNscnVfaWQsIGludCBwYWdlbm8pOworCisvKiBJbnRlcmZhY2VzIHVzZSBieSBz dGF0cyB2aWV3ICovCitleHRlcm4gT2lkIFNscnVSZWxJZEJ5TmFtZShjb25zdCBjaGFyICpuYW1l KTsKK2V4dGVybiBjb25zdCBjaGFyICpTbHJ1TmFtZShpbnQgc2xydV9pZCk7CisKICNlbmRpZgkJ CQkJCQkvKiBTTFJVX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9zbHJ1ZGVm cy5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3NscnVkZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjQ5Y2Q3OGQ5MjNkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2lu Y2x1ZGUvYWNjZXNzL3NscnVkZWZzLmgKQEAgLTAsMCArMSwxOSBAQAorLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKgorICogc2xydWRlZnMuaAorICoJCW1hY3JvcyBmb3IgYWNjZXNzaW5nIGNvbnRlbnRz IG9mICJzbHJ1IiBwYWdlcyAKKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAyMDIxLTIwMjIsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogc3JjL2luY2x1ZGUvYWNj ZXNzL3NscnVkZWZzLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2RlZmluZSBT TFJVX1BBR0VTX1BFUl9TRUdNRU5UIDMyCisKKyNkZWZpbmUgTVVMVElYQUNUX01FTUJFUl9FTlRS WV9TSVpFIDIwIAorCisjZGVmaW5lIE1VTFRJWEFDVF9PRkZTRVRfRU5UUllfU0laRSA4CisKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9zbHJ1bGlzdC5oIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL3NscnVsaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmMx Mjg5YTEzMjZjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3NscnVsaXN0 LmgKQEAgLTAsMCArMSwzMCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHNscnVsaXN0LmgK KyAqCisgKiBUaGUgU0xSVSBsaXN0IGlzIGtlcHQgaW4gaXRzIG93biBzb3VyY2UgZmlsZSBmb3Ig cG9zc2libGUKKyAqIHVzZSBieSBhdXRvbWF0aWMgdG9vbHMuICBUaGUgZXhhY3QgcmVwcmVzZW50 YXRpb24gb2YgYSBybWdyIGlzIGRldGVybWluZWQKKyAqIGJ5IHRoZSBQR19TTFJVIG1hY3JvLCB3 aGljaCBpcyBub3QgZGVmaW5lZCBpbiB0aGlzIGZpbGU7IGl0IGNhbiBiZQorICogZGVmaW5lZCBi eSB0aGUgY2FsbGVyIGZvciBzcGVjaWFsIHB1cnBvc2VzLgorICoKKyAqIFBvcnRpb25zIENvcHly aWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAor ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5 IG9mIENhbGlmb3JuaWEKKyAqCisgKiBzcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydWxpc3QuaAorICot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKiB0aGVyZSBpcyBkZWxpYmVyYXRlbHkgbm90IGFu ICNpZm5kZWYgU0xSVUxJU1RfSCBoZXJlICovCisKKy8qCisgKiBMaXN0IG9mIFNMUlUgZW50cmll cy4gIE5vdGUgdGhhdCBvcmRlciBvZiBlbnRyaWVzIGRlZmluZXMgdGhlCisgKiBudW1lcmljYWwg dmFsdWVzIG9mIGVhY2ggU0xSVSdzIElELCB3aGljaCBpcyB1c2VkIGluIGluLW1lbW9yeSBzdHJ1 Y3R1cy4KKyAqLworCisvKiBzeW1ib2wgbmFtZSwgdGV4dHVhbCBuYW1lLCBwYXRoLCBzeW5jaHJv bml6ZSAqLworUEdfU0xSVShTTFJVX0NMT0dfSUQsICJYYWN0IiwgInBnX3hhY3QiLCB0cnVlKQor UEdfU0xSVShTTFJVX1NVQlRSQU5TX0lELCAiU3VidHJhbnMiLCAicGdfc3VidHJhbnMiLCBmYWxz ZSkKK1BHX1NMUlUoU0xSVV9NVUxUSVhBQ1RfT0ZGU0VUX0lELCAiTXVsdGlYYWN0T2Zmc2V0Iiwg InBnX211bHRpeGFjdC9vZmZzZXRzIiwgdHJ1ZSkKK1BHX1NMUlUoU0xSVV9NVUxUSVhBQ1RfTUVN QkVSX0lELCAiTXVsdGlYYWN0TWVtYmVyIiwgInBnX211bHRpeGFjdC9tZW1iZXJzIiwgdHJ1ZSkK K1BHX1NMUlUoU0xSVV9DT01NSVRfVFNfSUQsICJDb21taXRUcyIsICJwZ19jb21taXRfdHMiLCB0 cnVlKQorUEdfU0xSVShTTFJVX1NFUklBTF9JRCwgIlNlcmlhbCIsICJwZ19zZXJpYWwiLCBmYWxz ZSkKK1BHX1NMUlUoU0xSVV9OT1RJRllfSUQsICJOb3RpZnkiLCAicGdfbm90aWZ5IiwgZmFsc2Up CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3VidHJhbnMuaCBiL3NyYy9pbmNsdWRl L2FjY2Vzcy9zdWJ0cmFucy5oCmluZGV4IGY5NGUxMTY2NDBiLi40Njg1YTA1YmM5MiAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3N1YnRyYW5zLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL3N1YnRyYW5zLmgKQEAgLTE4LDExICsxOCw4IEBAIGV4dGVybiB2b2lkIFN1YlRyYW5zU2V0 UGFyZW50KFRyYW5zYWN0aW9uSWQgeGlkLCBUcmFuc2FjdGlvbklkIHBhcmVudCk7CiBleHRlcm4g VHJhbnNhY3Rpb25JZCBTdWJUcmFuc0dldFBhcmVudChUcmFuc2FjdGlvbklkIHhpZCk7CiBleHRl cm4gVHJhbnNhY3Rpb25JZCBTdWJUcmFuc0dldFRvcG1vc3RUcmFuc2FjdGlvbihUcmFuc2FjdGlv bklkIHhpZCk7CiAKLWV4dGVybiBTaXplIFNVQlRSQU5TU2htZW1TaXplKHZvaWQpOwotZXh0ZXJu IHZvaWQgU1VCVFJBTlNTaG1lbUluaXQodm9pZCk7CiBleHRlcm4gdm9pZCBCb290U3RyYXBTVUJU UkFOUyh2b2lkKTsKIGV4dGVybiB2b2lkIFN0YXJ0dXBTVUJUUkFOUyhUcmFuc2FjdGlvbklkIG9s ZGVzdEFjdGl2ZVhJRCk7Ci1leHRlcm4gdm9pZCBDaGVja1BvaW50U1VCVFJBTlModm9pZCk7CiBl eHRlcm4gdm9pZCBFeHRlbmRTVUJUUkFOUyhUcmFuc2FjdGlvbklkIG5ld2VzdFhhY3QpOwogZXh0 ZXJuIHZvaWQgVHJ1bmNhdGVTVUJUUkFOUyhUcmFuc2FjdGlvbklkIG9sZGVzdFhhY3QpOwogCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24uaCBiL3NyYy9pbmNsdWRl L2NhdGFsb2cvY2F0dmVyc2lvbi5oCmluZGV4IDUwMWE0MzRiOTA0Li41YWY4MDQ1MDljZSAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJzaW9uLmgKKysrIGIvc3JjL2luY2x1 ZGUvY2F0YWxvZy9jYXR2ZXJzaW9uLmgKQEAgLTU3LDYgKzU3LDggQEAKICAqLwogCiAvKgkJCQkJ CQl5eXl5bW1kZE4gKi8KLSNkZWZpbmUgQ0FUQUxPR19WRVJTSU9OX05PCTIwMjIxMjA5MgorCisK KyNkZWZpbmUgQ0FUQUxPR19WRVJTSU9OX05PCTIwMjIxMjAyMQogCiAjZW5kaWYKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvc3RvcmFnZS5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9z dG9yYWdlLmgKaW5kZXggOTk2NGMzMTJhYTIuLjA0MTE0MzA1NTQ3IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9jYXRhbG9nL3N0b3JhZ2UuaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3N0b3Jh Z2UuaApAQCAtMjIsMTkgKzIyLDIwIEBACiAvKiBHVUMgdmFyaWFibGVzICovCiBleHRlcm4gUEdE TExJTVBPUlQgaW50IHdhbF9za2lwX3RocmVzaG9sZDsKIAotZXh0ZXJuIFNNZ3JSZWxhdGlvbiBS ZWxhdGlvbkNyZWF0ZVN0b3JhZ2UoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsCi0JCQkJCQkJCQkJ ICBjaGFyIHJlbHBlcnNpc3RlbmNlLAotCQkJCQkJCQkJCSAgYm9vbCByZWdpc3Rlcl9kZWxldGUp OworZXh0ZXJuIFNNZ3JGaWxlSGFuZGxlIFJlbGF0aW9uQ3JlYXRlU3RvcmFnZShSZWxGaWxlTG9j YXRvciBybG9jYXRvciwKKwkJCQkJCQkJCQkJY2hhciByZWxwZXJzaXN0ZW5jZSwKKwkJCQkJCQkJ CQkJYm9vbCByZWdpc3Rlcl9kZWxldGUpOwogZXh0ZXJuIHZvaWQgUmVsYXRpb25Ecm9wU3RvcmFn ZShSZWxhdGlvbiByZWwpOwogZXh0ZXJuIHZvaWQgUmVsYXRpb25QcmVzZXJ2ZVN0b3JhZ2UoUmVs RmlsZUxvY2F0b3IgcmxvY2F0b3IsIGJvb2wgYXRDb21taXQpOwogZXh0ZXJuIHZvaWQgUmVsYXRp b25QcmVUcnVuY2F0ZShSZWxhdGlvbiByZWwpOwogZXh0ZXJuIHZvaWQgUmVsYXRpb25UcnVuY2F0 ZShSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIG5ibG9ja3MpOwotZXh0ZXJuIHZvaWQgUmVsYXRp b25Db3B5U3RvcmFnZShTTWdyUmVsYXRpb24gc3JjLCBTTWdyUmVsYXRpb24gZHN0LAotCQkJCQkJ CQlGb3JrTnVtYmVyIGZvcmtOdW0sIGNoYXIgcmVscGVyc2lzdGVuY2UpOworZXh0ZXJuIHZvaWQg UmVsYXRpb25Db3B5U3RvcmFnZShTTWdyRmlsZUhhbmRsZSBzcmMsIFNNZ3JGaWxlSGFuZGxlIGRz dCwKKwkJCQkJCQkJY2hhciByZWxwZXJzaXN0ZW5jZSk7CiBleHRlcm4gYm9vbCBSZWxGaWxlTG9j YXRvclNraXBwaW5nV0FMKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yKTsKIGV4dGVybiBTaXplIEVz dGltYXRlUGVuZGluZ1N5bmNzU3BhY2Uodm9pZCk7CiBleHRlcm4gdm9pZCBTZXJpYWxpemVQZW5k aW5nU3luY3MoU2l6ZSBtYXhTaXplLCBjaGFyICpzdGFydEFkZHJlc3MpOwogZXh0ZXJuIHZvaWQg UmVzdG9yZVBlbmRpbmdTeW5jcyhjaGFyICpzdGFydEFkZHJlc3MpOworZXh0ZXJuIHZvaWQgRHJv cFJlbGF0aW9uRmlsZXMoUmVsRmlsZUxvY2F0b3IgKmRlbHJlbHMsIGludCBuZGVscmVscywgYm9v bCBpc1JlZG8pOwogCiAvKgogICogVGhlc2UgZnVuY3Rpb25zIHVzZWQgdG8gYmUgaW4gc3RvcmFn ZS9zbWdyL3NtZ3IuYywgd2hpY2ggZXhwbGFpbnMgdGhlCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9jb21tb24vcmVscGF0aC5oIGIvc3JjL2luY2x1ZGUvY29tbW9uL3JlbHBhdGguaAppbmRleCA0 YmJkOTQzOTNjOC4uNjA2ZDBlOGM2NGYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1vbi9y ZWxwYXRoLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbW9uL3JlbHBhdGguaApAQCAtNjMsNiArNjMs OSBAQCB0eXBlZGVmIGVudW0gRm9ya051bWJlcgogCiAjZGVmaW5lIEZPUktOQU1FQ0hBUlMJNAkJ LyogbWF4IGNoYXJzIGZvciBhIGZvcmsgbmFtZSAqLwogCisvKiBQc2V1ZG8gdGFibGVzcGFjZSBJ RCB1c2VkIGZvciBTTFJVcy4gKi8KKyNkZWZpbmUgU0xSVV9TUENfT0lEIDkKKwogZXh0ZXJuIFBH RExMSU1QT1JUIGNvbnN0IGNoYXIgKmNvbnN0IGZvcmtOYW1lc1tdOwogCiBleHRlcm4gRm9ya051 bWJlciBmb3JrbmFtZV90b19udW1iZXIoY29uc3QgY2hhciAqZm9ya05hbWUpOwpAQCAtNzMsMjUg Kzc2LDI1IEBAIGV4dGVybiBpbnQJZm9ya25hbWVfY2hhcnMoY29uc3QgY2hhciAqc3RyLCBGb3Jr TnVtYmVyICpmb3JrKTsKICAqLwogZXh0ZXJuIGNoYXIgKkdldERhdGFiYXNlUGF0aChPaWQgZGJP aWQsIE9pZCBzcGNPaWQpOwogCi1leHRlcm4gY2hhciAqR2V0UmVsYXRpb25QYXRoKE9pZCBkYk9p ZCwgT2lkIHNwY09pZCwgUmVsRmlsZU51bWJlciByZWxOdW1iZXIsCitleHRlcm4gY2hhciAqR2V0 U01nckZpbGVQYXRoKE9pZCBkYk9pZCwgT2lkIHNwY09pZCwgUmVsRmlsZU51bWJlciByZWxOdW1i ZXIsCiAJCQkJCQkJIGludCBiYWNrZW5kSWQsIEZvcmtOdW1iZXIgZm9ya051bWJlcik7CiAKIC8q CiAgKiBXcmFwcGVyIG1hY3JvcyBmb3IgR2V0UmVsYXRpb25QYXRoLiAgQmV3YXJlIG9mIG11bHRp cGxlCi0gKiBldmFsdWF0aW9uIG9mIHRoZSBSZWxGaWxlTG9jYXRvciBvciBSZWxGaWxlTG9jYXRv ckJhY2tlbmQgYXJndW1lbnQhCisgKiBldmFsdWF0aW9uIG9mIHRoZSBSZWxGaWxlTG9jYXRvciBv ciBTTWdyRmlsZUxvY2F0b3IgYXJndW1lbnQhCiAgKi8KIAogLyogRmlyc3QgYXJndW1lbnQgaXMg YSBSZWxGaWxlTG9jYXRvciAqLwogI2RlZmluZSByZWxwYXRoYmFja2VuZChybG9jYXRvciwgYmFj a2VuZCwgZm9ya251bSkgXAotCUdldFJlbGF0aW9uUGF0aCgocmxvY2F0b3IpLmRiT2lkLCAocmxv Y2F0b3IpLnNwY09pZCwgKHJsb2NhdG9yKS5yZWxOdW1iZXIsIFwKKwlHZXRTTWdyRmlsZVBhdGgo KHJsb2NhdG9yKS5kYk9pZCwgKHJsb2NhdG9yKS5zcGNPaWQsIChybG9jYXRvcikucmVsTnVtYmVy LCBcCiAJCQkJCWJhY2tlbmQsIGZvcmtudW0pCiAKIC8qIEZpcnN0IGFyZ3VtZW50IGlzIGEgUmVs RmlsZUxvY2F0b3IgKi8KICNkZWZpbmUgcmVscGF0aHBlcm0ocmxvY2F0b3IsIGZvcmtudW0pIFwK IAlyZWxwYXRoYmFja2VuZChybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCwgZm9ya251bSkKIAot LyogRmlyc3QgYXJndW1lbnQgaXMgYSBSZWxGaWxlTG9jYXRvckJhY2tlbmQgKi8KLSNkZWZpbmUg cmVscGF0aChybG9jYXRvciwgZm9ya251bSkgXAotCXJlbHBhdGhiYWNrZW5kKChybG9jYXRvciku bG9jYXRvciwgKHJsb2NhdG9yKS5iYWNrZW5kLCBmb3JrbnVtKQorLyogRmlyc3QgYXJndW1lbnQg aXMgYSBTTWdyRmlsZUxvY2F0b3IgKi8KKyNkZWZpbmUgc21ncmZpbGVwYXRoKHNsb2NhdG9yKSBc CisJR2V0U01nckZpbGVQYXRoKChzbG9jYXRvcikubG9jYXRvci5kYk9pZCwgKHNsb2NhdG9yKS5s b2NhdG9yLnNwY09pZCwgKHNsb2NhdG9yKS5sb2NhdG9yLnJlbE51bWJlciwgKHNsb2NhdG9yKS5i YWNrZW5kLCAoc2xvY2F0b3IpLmZvcmtudW0pCiAKICNlbmRpZgkJCQkJCQkvKiBSRUxQQVRIX0gg Ki8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5oIGIvc3Jj L2luY2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmgKaW5kZXggNDA2ZGI2YmU3ODMuLmU2NzY2 OTJhMzBhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaAor KysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaApAQCAtMjgxLDYgKzI4MSwx MSBAQCB0eXBlZGVmIHVuaW9uIEJ1ZmZlckRlc2NQYWRkZWQKIAljaGFyCQlwYWRbQlVGRkVSREVT Q19QQURfVE9fU0laRV07CiB9IEJ1ZmZlckRlc2NQYWRkZWQ7CiAKKyNkZWZpbmUgQnVmZmVyR2V0 RXh0ZXJuYWxMU04oYnVmSGRyKSBcCisJQnVmZmVyRXh0ZXJuYWxMU05zWyhidWZIZHIpLT5idWZf aWRdCisjZGVmaW5lIEJ1ZmZlclNldEV4dGVybmFsTFNOKGJ1ZkhkciwgbHNuKSBcCisJQnVmZmVy RXh0ZXJuYWxMU05zWyhidWZIZHIpLT5idWZfaWRdID0gKGxzbikKKwogLyoKICAqIFRoZSBQZW5k aW5nV3JpdGViYWNrICYgV3JpdGViYWNrQ29udGV4dCBzdHJ1Y3R1cmUgYXJlIHVzZWQgdG8ga2Vl cAogICogaW5mb3JtYXRpb24gYWJvdXQgcGVuZGluZyBmbHVzaCByZXF1ZXN0cyB0byBiZSBpc3N1 ZWQgdG8gdGhlIE9TLgpAQCAtMzA3LDYgKzMxMiw3IEBAIHR5cGVkZWYgc3RydWN0IFdyaXRlYmFj a0NvbnRleHQKIC8qIGluIGJ1Zl9pbml0LmMgKi8KIGV4dGVybiBQR0RMTElNUE9SVCBCdWZmZXJE ZXNjUGFkZGVkICpCdWZmZXJEZXNjcmlwdG9yczsKIGV4dGVybiBQR0RMTElNUE9SVCBDb25kaXRp b25WYXJpYWJsZU1pbmltYWxseVBhZGRlZCAqQnVmZmVySU9DVkFycmF5OworZXh0ZXJuIFBHRExM SU1QT1JUIFhMb2dSZWNQdHIgKkJ1ZmZlckV4dGVybmFsTFNOczsKIGV4dGVybiBQR0RMTElNUE9S VCBXcml0ZWJhY2tDb250ZXh0IEJhY2tlbmRXcml0ZWJhY2tDb250ZXh0OwogCiAvKiBpbiBsb2Nh bGJ1Zi5jICovCkBAIC00MTMsMTAgKzQxOSw5IEBAIGV4dGVybiBpbnQJQnVmVGFibGVJbnNlcnQo QnVmZmVyVGFnICp0YWdQdHIsIHVpbnQzMiBoYXNoY29kZSwgaW50IGJ1Zl9pZCk7CiBleHRlcm4g dm9pZCBCdWZUYWJsZURlbGV0ZShCdWZmZXJUYWcgKnRhZ1B0ciwgdWludDMyIGhhc2hjb2RlKTsK IAogLyogbG9jYWxidWYuYyAqLwotZXh0ZXJuIFByZWZldGNoQnVmZmVyUmVzdWx0IFByZWZldGNo TG9jYWxCdWZmZXIoU01nclJlbGF0aW9uIHNtZ3IsCi0JCQkJCQkJCQkJCQlGb3JrTnVtYmVyIGZv cmtOdW0sCitleHRlcm4gUHJlZmV0Y2hCdWZmZXJSZXN1bHQgUHJlZmV0Y2hMb2NhbEJ1ZmZlcihT TWdyRmlsZUhhbmRsZSBzbWdyLAogCQkJCQkJCQkJCQkJQmxvY2tOdW1iZXIgYmxvY2tOdW0pOwot ZXh0ZXJuIEJ1ZmZlckRlc2MgKkxvY2FsQnVmZmVyQWxsb2MoU01nclJlbGF0aW9uIHNtZ3IsIEZv cmtOdW1iZXIgZm9ya051bSwKK2V4dGVybiBCdWZmZXJEZXNjICpMb2NhbEJ1ZmZlckFsbG9jKFNN Z3JGaWxlSGFuZGxlIHNtZ3IsCiAJCQkJCQkJCQlCbG9ja051bWJlciBibG9ja051bSwgYm9vbCAq Zm91bmRQdHIpOwogZXh0ZXJuIHZvaWQgTWFya0xvY2FsQnVmZmVyRGlydHkoQnVmZmVyIGJ1ZmZl cik7CiBleHRlcm4gdm9pZCBEcm9wUmVsYXRpb25Mb2NhbEJ1ZmZlcnMoUmVsRmlsZUxvY2F0b3Ig cmxvY2F0b3IsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oIGIvc3Jj L2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaAppbmRleCBlMWJkMjI0NDFiMC4uNGNkZGI1OWY1MDAg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKKysrIGIvc3JjL2luY2x1 ZGUvc3RvcmFnZS9idWZtZ3IuaApAQCAtNDIsOCArNDIsMTEgQEAgdHlwZWRlZiBlbnVtCiAJUkJN X1pFUk9fQU5EX0NMRUFOVVBfTE9DSywJLyogTGlrZSBSQk1fWkVST19BTkRfTE9DSywgYnV0IGxv Y2tzIHRoZSBwYWdlCiAJCQkJCQkJCSAqIGluICJjbGVhbnVwIiBtb2RlICovCiAJUkJNX1pFUk9f T05fRVJST1IsCQkJLyogUmVhZCwgYnV0IHJldHVybiBhbiBhbGwtemVyb3MgcGFnZSBvbiBlcnJv ciAqLwotCVJCTV9OT1JNQUxfTk9fTE9HCQkJLyogRG9uJ3QgbG9nIHBhZ2UgYXMgaW52YWxpZCBk dXJpbmcgV0FMCisJUkJNX05PUk1BTF9OT19MT0csCQkJLyogRG9uJ3QgbG9nIHBhZ2UgYXMgaW52 YWxpZCBkdXJpbmcgV0FMCiAJCQkJCQkJCSAqIHJlcGxheTsgb3RoZXJ3aXNlIHNhbWUgYXMgUkJN X05PUk1BTCAqLworCisJUkJNX1RSSU0JCQkJLypSZWFkIGZvciBUUklNIGZ1bmN0aW9ucyBpbiBD TE9HIC8gTXVsdGlYYWN0LiAKKwkJCQkJCSAgRG9uJ3QgdmFsaWRhdGUgY2hlY2tzdW0gIG9yIHpl cm8uICovCQogfSBSZWFkQnVmZmVyTW9kZTsKIAogLyoKQEAgLTU5LDcgKzYyLDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgUHJlZmV0Y2hCdWZmZXJSZXN1bHQKIHN0cnVjdCBXcml0ZWJhY2tDb250ZXh0Owog CiAvKiBmb3J3YXJkIGRlY2xhcmVkLCB0byBhdm9pZCBpbmNsdWRpbmcgc21nci5oIGhlcmUgKi8K LXN0cnVjdCBTTWdyUmVsYXRpb25EYXRhOworc3RydWN0IFNNZ3JGaWxlRGF0YTsKIAogLyogaW4g Z2xvYmFscy5jIC4uLiB0aGlzIGR1cGxpY2F0ZXMgbWlzY2FkbWluLmggKi8KIGV4dGVybiBQR0RM TElNUE9SVCBpbnQgTkJ1ZmZlcnM7CkBAIC0xMTAsOCArMTEzLDcgQEAgZXh0ZXJuIFBHRExMSU1Q T1JUIGludDMyICpMb2NhbFJlZkNvdW50OwogLyoKICAqIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9u cyBpbiBidWZtZ3IuYwogICovCi1leHRlcm4gUHJlZmV0Y2hCdWZmZXJSZXN1bHQgUHJlZmV0Y2hT aGFyZWRCdWZmZXIoc3RydWN0IFNNZ3JSZWxhdGlvbkRhdGEgKnNtZ3JfcmVsbiwKLQkJCQkJCQkJ CQkJCSBGb3JrTnVtYmVyIGZvcmtOdW0sCitleHRlcm4gUHJlZmV0Y2hCdWZmZXJSZXN1bHQgUHJl ZmV0Y2hTaGFyZWRCdWZmZXIoc3RydWN0IFNNZ3JGaWxlRGF0YSAqc21ncl9maWxlLAogCQkJCQkJ CQkJCQkJIEJsb2NrTnVtYmVyIGJsb2NrTnVtKTsKIGV4dGVybiBQcmVmZXRjaEJ1ZmZlclJlc3Vs dCBQcmVmZXRjaEJ1ZmZlcihSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAJCQkJ CQkJCQkJICAgQmxvY2tOdW1iZXIgYmxvY2tOdW0pOwpAQCAtMTI1LDEzICsxMjcsMTkgQEAgZXh0 ZXJuIEJ1ZmZlciBSZWFkQnVmZmVyV2l0aG91dFJlbGNhY2hlKFJlbEZpbGVMb2NhdG9yIHJsb2Nh dG9yLAogCQkJCQkJCQkJCUZvcmtOdW1iZXIgZm9ya051bSwgQmxvY2tOdW1iZXIgYmxvY2tOdW0s CiAJCQkJCQkJCQkJUmVhZEJ1ZmZlck1vZGUgbW9kZSwgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3Ry YXRlZ3ksCiAJCQkJCQkJCQkJYm9vbCBwZXJtYW5lbnQpOworZXh0ZXJuIEJ1ZmZlciBSZWFkQnVm ZmVyV2l0aG91dFJlbGNhY2hlV2l0aEhpdChSZWxGaWxlTG9jYXRvciBybG9jYXRvciwKKwkJCQkJ CQkJCQlGb3JrTnVtYmVyIGZvcmtOdW0sIEJsb2NrTnVtYmVyIGJsb2NrTnVtLAorCQkJCQkJCQkJ CVJlYWRCdWZmZXJNb2RlIG1vZGUsIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJ CQkJCQkJCQkgICBib29sIHBlcm1hbmVudCwgYm9vbCAqaGl0KTsKIGV4dGVybiB2b2lkIFJlbGVh c2VCdWZmZXIoQnVmZmVyIGJ1ZmZlcik7CiBleHRlcm4gdm9pZCBVbmxvY2tSZWxlYXNlQnVmZmVy KEJ1ZmZlciBidWZmZXIpOwogZXh0ZXJuIHZvaWQgTWFya0J1ZmZlckRpcnR5KEJ1ZmZlciBidWZm ZXIpOwogZXh0ZXJuIHZvaWQgSW5jckJ1ZmZlclJlZkNvdW50KEJ1ZmZlciBidWZmZXIpOwogZXh0 ZXJuIEJ1ZmZlciBSZWxlYXNlQW5kUmVhZEJ1ZmZlcihCdWZmZXIgYnVmZmVyLCBSZWxhdGlvbiBy ZWxhdGlvbiwKIAkJCQkJCQkJICAgQmxvY2tOdW1iZXIgYmxvY2tOdW0pOwotCitleHRlcm4gYm9v bCBCdWZmZXJQcm9iZShSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgRm9ya051bWJlciBmb3JrTnVt LAorCQkJCQkJQmxvY2tOdW1iZXIgYmxvY2tOdW0pOworIAogZXh0ZXJuIHZvaWQgSW5pdEJ1ZmZl clBvb2xBY2Nlc3Modm9pZCk7CiBleHRlcm4gdm9pZCBBdEVPWGFjdF9CdWZmZXJzKGJvb2wgaXND b21taXQpOwogZXh0ZXJuIHZvaWQgUHJpbnRCdWZmZXJMZWFrV2FybmluZyhCdWZmZXIgYnVmZmVy KTsKQEAgLTEzOSwxOCArMTQ3LDI2IEBAIGV4dGVybiB2b2lkIENoZWNrUG9pbnRCdWZmZXJzKGlu dCBmbGFncyk7CiBleHRlcm4gQmxvY2tOdW1iZXIgQnVmZmVyR2V0QmxvY2tOdW1iZXIoQnVmZmVy IGJ1ZmZlcik7CiBleHRlcm4gQmxvY2tOdW1iZXIgUmVsYXRpb25HZXROdW1iZXJPZkJsb2Nrc0lu Rm9yayhSZWxhdGlvbiByZWxhdGlvbiwKIAkJCQkJCQkJCQkJCSAgIEZvcmtOdW1iZXIgZm9ya051 bSk7Ci1leHRlcm4gdm9pZCBGbHVzaE9uZUJ1ZmZlcihCdWZmZXIgYnVmZmVyKTsKLWV4dGVybiB2 b2lkIEZsdXNoUmVsYXRpb25CdWZmZXJzKFJlbGF0aW9uIHJlbCk7Ci1leHRlcm4gdm9pZCBGbHVz aFJlbGF0aW9uc0FsbEJ1ZmZlcnMoc3RydWN0IFNNZ3JSZWxhdGlvbkRhdGEgKipzbWdycywgaW50 IG5yZWxzKTsKIGV4dGVybiB2b2lkIENyZWF0ZUFuZENvcHlSZWxhdGlvbkRhdGEoUmVsRmlsZUxv Y2F0b3Igc3JjX3Jsb2NhdG9yLAogCQkJCQkJCQkJICBSZWxGaWxlTG9jYXRvciBkc3RfcmxvY2F0 b3IsCiAJCQkJCQkJCQkgIGJvb2wgcGVybWFuZW50KTsKKworZXh0ZXJuIHZvaWQgRmx1c2hPbmVC dWZmZXIoQnVmZmVyIGJ1ZmZlcik7CitleHRlcm4gdm9pZCBGbHVzaFJlbGF0aW9uQnVmZmVycyhS ZWxhdGlvbiByZWwpOworZXh0ZXJuIHZvaWQgRmx1c2hSZWxhdGlvbnNBbGxCdWZmZXJzKFJlbEZp bGVMb2NhdG9yICpsb2NhdG9ycywgaW50IG5sb2NhdG9ycyk7CiBleHRlcm4gdm9pZCBGbHVzaERh dGFiYXNlQnVmZmVycyhPaWQgZGJpZCk7Ci1leHRlcm4gdm9pZCBEcm9wUmVsYXRpb25CdWZmZXJz KHN0cnVjdCBTTWdyUmVsYXRpb25EYXRhICpzbWdyX3JlbG4sCisKK2V4dGVybiB2b2lkIERyb3BS ZWxhdGlvbkJ1ZmZlcnMoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEJhY2tlbmRJZCBiYWNrZW5k LAogCQkJCQkJCQlGb3JrTnVtYmVyICpmb3JrTnVtLAogCQkJCQkJCQlpbnQgbmZvcmtzLCBCbG9j a051bWJlciAqZmlyc3REZWxCbG9jayk7Ci1leHRlcm4gdm9pZCBEcm9wUmVsYXRpb25zQWxsQnVm ZmVycyhzdHJ1Y3QgU01nclJlbGF0aW9uRGF0YSAqKnNtZ3JfcmVsbiwKLQkJCQkJCQkJCWludCBu bG9jYXRvcnMpOworCit0eXBlZGVmIHN0cnVjdCBSZWxGaWxlTG9jYXRvckJhY2tlbmQKK3sKKwlS ZWxGaWxlTG9jYXRvciBsb2NhdG9yOworCUJhY2tlbmRJZAliYWNrZW5kOworfSBSZWxGaWxlTG9j YXRvckJhY2tlbmQ7CisKK2V4dGVybiB2b2lkIERyb3BSZWxhdGlvbnNBbGxCdWZmZXJzKFJlbEZp bGVMb2NhdG9yQmFja2VuZCAqbG9jYXRvcnMsIGludCBubG9jYXRvcnMpOwogZXh0ZXJuIHZvaWQg RHJvcERhdGFiYXNlQnVmZmVycyhPaWQgZGJpZCk7CiAKICNkZWZpbmUgUmVsYXRpb25HZXROdW1i ZXJPZkJsb2NrcyhyZWxuKSBcCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1ZnBh Z2UuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmcGFnZS5oCmluZGV4IDI3MDhjNGI2ODNkLi4z ODcxYTM4NmQ0YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZwYWdlLmgKKysr IGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZwYWdlLmgKQEAgLTIwMSw2ICsyMDEsNyBAQCB0eXBl ZGVmIFBhZ2VIZWFkZXJEYXRhICpQYWdlSGVhZGVyOwogICogaGFuZGxpbmcgcGFnZXMuCiAgKi8K ICNkZWZpbmUgUEdfUEFHRV9MQVlPVVRfVkVSU0lPTgkJNAorI2RlZmluZSBQR19NRVRBUEFHRV9M QVlPVVRfVkVSU0lPTiAgMQogI2RlZmluZSBQR19EQVRBX0NIRUNLU1VNX1ZFUlNJT04JMQogCiAv KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCkBAIC0zMDIsNiArMzAzLDIwIEBAIFBhZ2VTZXRQYWdlU2l6ZUFuZFZlcnNpb24o UGFnZSBwYWdlLCBTaXplIHNpemUsIHVpbnQ4IHZlcnNpb24pCiAJKChQYWdlSGVhZGVyKSBwYWdl KS0+cGRfcGFnZXNpemVfdmVyc2lvbiA9IHNpemUgfCB2ZXJzaW9uOwogfQogCisvKgorICogUGFn ZVNldEhlYWRlckRhdGFNaW5pbWFsIAorICogU2V0cyB0aGUgTFNOLCBwYWdlIHNpemUgYW5kIHZl cnNpb24sIGFuZCBjaGVja3N1bQorICovCisjZGVmaW5lIFBhZ2VTZXRIZWFkZXJEYXRhTm9uUmVs KHBhZ2UsIHBhZ2VubywgbHNuLCBzaXplLCB2ZXJzaW9uKSBcCisoIFwKKwlQYWdlU2V0TFNOKHBh Z2UsIGxzbiksIFwKKwlQYWdlU2V0UGFnZVNpemVBbmRWZXJzaW9uKHBhZ2UsIHNpemUsIHZlcnNp b24pLCBcCisJUGFnZUNsZWFySGFzRnJlZUxpbmVQb2ludGVycyhwYWdlKSwgXAorCVBhZ2VTZXRD aGVja3N1bUlucGxhY2UocGFnZSwgcGFnZW5vKSBcCispCisKKworCiAvKiAtLS0tLS0tLS0tLS0t LS0tCiAgKgkJcGFnZSBzcGVjaWFsIGRhdGEgZnVuY3Rpb25zCiAgKiAtLS0tLS0tLS0tLS0tLS0t CkBAIC00ODYsNiArNTAxLDggQEAgU3RhdGljQXNzZXJ0RGVjbChCTENLU1ogPT0gKChCTENLU1og LyBzaXplb2Yoc2l6ZV90KSkgKiBzaXplb2Yoc2l6ZV90KSksCiAJCQkJICJCTENLU1ogaGFzIHRv IGJlIGEgbXVsdGlwbGUgb2Ygc2l6ZW9mKHNpemVfdCkiKTsKIAogZXh0ZXJuIHZvaWQgUGFnZUlu aXQoUGFnZSBwYWdlLCBTaXplIHBhZ2VTaXplLCBTaXplIHNwZWNpYWxTaXplKTsKK2V4dGVybiB2 b2lkIFBhZ2VJbml0U0xSVShQYWdlIHBhZ2UsIFNpemUgcGFnZVNpemUsIFNpemUgc3BlY2lhbFNp emUpOworCiBleHRlcm4gYm9vbCBQYWdlSXNWZXJpZmllZEV4dGVuZGVkKFBhZ2UgcGFnZSwgQmxv Y2tOdW1iZXIgYmxrbm8sIGludCBmbGFncyk7CiBleHRlcm4gT2Zmc2V0TnVtYmVyIFBhZ2VBZGRJ dGVtRXh0ZW5kZWQoUGFnZSBwYWdlLCBJdGVtIGl0ZW0sIFNpemUgc2l6ZSwKIAkJCQkJCQkJCQlP ZmZzZXROdW1iZXIgb2Zmc2V0TnVtYmVyLCBpbnQgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9tZC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9tZC5oCmluZGV4IDEwYWEx YjAxMDliLi5iY2I4N2Q1NjI5NSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9tZC5o CisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbWQuaApAQCAtMjEsMjggKzIxLDI2IEBACiAKIC8q IG1kIHN0b3JhZ2UgbWFuYWdlciBmdW5jdGlvbmFsaXR5ICovCiBleHRlcm4gdm9pZCBtZGluaXQo dm9pZCk7Ci1leHRlcm4gdm9pZCBtZG9wZW4oU01nclJlbGF0aW9uIHJlbG4pOwotZXh0ZXJuIHZv aWQgbWRjbG9zZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKTsKLWV4dGVy biB2b2lkIG1kY3JlYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIGJv b2wgaXNSZWRvKTsKLWV4dGVybiBib29sIG1kZXhpc3RzKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3Jr TnVtYmVyIGZvcmtudW0pOwotZXh0ZXJuIHZvaWQgbWR1bmxpbmsoUmVsRmlsZUxvY2F0b3JCYWNr ZW5kIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sIGJvb2wgaXNSZWRvKTsKLWV4dGVybiB2 b2lkIG1kZXh0ZW5kKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCitleHRl cm4gdm9pZCBtZG9wZW4oU01nckZpbGVIYW5kbGUgc2ZpbGUpOworZXh0ZXJuIHZvaWQgbWRjbG9z ZShTTWdyRmlsZUhhbmRsZSBzZmlsZSk7CitleHRlcm4gdm9pZCBtZGNyZWF0ZShTTWdyRmlsZUhh bmRsZSBzZmlsZSwgYm9vbCBpc1JlZG8pOworZXh0ZXJuIGJvb2wgbWRleGlzdHMoU01nckZpbGVI YW5kbGUgc2ZpbGUpOworZXh0ZXJuIHZvaWQgbWR1bmxpbmsoU01nckZpbGVMb2NhdG9yIHNsb2Nh dG9yLCBib29sIGlzUmVkbyk7CitleHRlcm4gdm9pZCBtZGV4dGVuZChTTWdyRmlsZUhhbmRsZSBz ZmlsZSwKIAkJCQkJIEJsb2NrTnVtYmVyIGJsb2NrbnVtLCBjaGFyICpidWZmZXIsIGJvb2wgc2tp cEZzeW5jKTsKLWV4dGVybiBib29sIG1kcHJlZmV0Y2goU01nclJlbGF0aW9uIHJlbG4sIEZvcmtO dW1iZXIgZm9ya251bSwKK2V4dGVybiBib29sIG1kcHJlZmV0Y2goU01nckZpbGVIYW5kbGUgc2Zp bGUsCiAJCQkJCSAgIEJsb2NrTnVtYmVyIGJsb2NrbnVtKTsKLWV4dGVybiB2b2lkIG1kcmVhZChT TWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251 bSwKK2V4dGVybiB2b2lkIG1kcmVhZChTTWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIg YmxvY2tudW0sCiAJCQkJICAgY2hhciAqYnVmZmVyKTsKLWV4dGVybiB2b2lkIG1kd3JpdGUoU01n clJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKK2V4dGVybiB2b2lkIG1kd3JpdGUo U01nckZpbGVIYW5kbGUgc2ZpbGUsCiAJCQkJCUJsb2NrTnVtYmVyIGJsb2NrbnVtLCBjaGFyICpi dWZmZXIsIGJvb2wgc2tpcEZzeW5jKTsKLWV4dGVybiB2b2lkIG1kd3JpdGViYWNrKFNNZ3JSZWxh dGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCitleHRlcm4gdm9pZCBtZHdyaXRlYmFjayhT TWdyRmlsZUhhbmRsZSBzZmlsZSwKIAkJCQkJCUJsb2NrTnVtYmVyIGJsb2NrbnVtLCBCbG9ja051 bWJlciBuYmxvY2tzKTsKLWV4dGVybiBCbG9ja051bWJlciBtZG5ibG9ja3MoU01nclJlbGF0aW9u IHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSk7Ci1leHRlcm4gdm9pZCBtZHRydW5jYXRlKFNNZ3JS ZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCi0JCQkJCSAgIEJsb2NrTnVtYmVyIG5i bG9ja3MpOwotZXh0ZXJuIHZvaWQgbWRpbW1lZHN5bmMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtO dW1iZXIgZm9ya251bSk7CitleHRlcm4gQmxvY2tOdW1iZXIgbWRuYmxvY2tzKFNNZ3JGaWxlSGFu ZGxlIHNmaWxlKTsKK2V4dGVybiB2b2lkIG1kdHJ1bmNhdGUoU01nckZpbGVIYW5kbGUgc2ZpbGUs IEJsb2NrTnVtYmVyIG5ibG9ja3MpOworZXh0ZXJuIHZvaWQgbWRpbW1lZHN5bmMoU01nckZpbGVI YW5kbGUgc2ZpbGUpOwogCiBleHRlcm4gdm9pZCBGb3JnZXREYXRhYmFzZVN5bmNSZXF1ZXN0cyhP aWQgZGJpZCk7Ci1leHRlcm4gdm9pZCBEcm9wUmVsYXRpb25GaWxlcyhSZWxGaWxlTG9jYXRvciAq ZGVscmVscywgaW50IG5kZWxyZWxzLCBib29sIGlzUmVkbyk7CiAKIC8qIG1kIHN5bmMgY2FsbGJh Y2tzICovCiBleHRlcm4gaW50CW1kc3luY2ZpbGV0YWcoY29uc3QgRmlsZVRhZyAqZnRhZywgY2hh ciAqcGF0aCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3JlbGZpbGVsb2NhdG9y LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3JlbGZpbGVsb2NhdG9yLmgKaW5kZXggMTBmNDFmM2Fi YjMuLjI5NmNiMWI4ZTUxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3JlbGZpbGVs b2NhdG9yLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9yZWxmaWxlbG9jYXRvci5oCkBAIC01 Myw2ICs1Myw4IEBACiAgKiBOb3RlOiB2YXJpb3VzIHBsYWNlcyB1c2UgUmVsRmlsZUxvY2F0b3Ig aW4gaGFzaHRhYmxlIGtleXMuICBUaGVyZWZvcmUsCiAgKiB0aGVyZSAqbXVzdCBub3QqIGJlIGFu eSB1bnVzZWQgcGFkZGluZyBieXRlcyBpbiB0aGlzIHN0cnVjdC4gIFRoYXQKICAqIHNob3VsZCBi ZSBzYWZlIGFzIGxvbmcgYXMgYWxsIHRoZSBmaWVsZHMgYXJlIG9mIHR5cGUgT2lkLgorICoKKyAq IFNlZSBhbHNvIFNNZ3JGaWxlTG9jYXRvciBpbiBzbWdyLmguCiAgKi8KIHR5cGVkZWYgc3RydWN0 IFJlbEZpbGVMb2NhdG9yCiB7CkBAIC02MiwzOCArNjQsMTUgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVs RmlsZUxvY2F0b3IKIH0gUmVsRmlsZUxvY2F0b3I7CiAKIC8qCi0gKiBBdWdtZW50aW5nIGEgcmVs ZmlsZWxvY2F0b3Igd2l0aCB0aGUgYmFja2VuZCBJRCBwcm92aWRlcyBhbGwgdGhlIGluZm9ybWF0 aW9uCi0gKiB3ZSBuZWVkIHRvIGxvY2F0ZSB0aGUgcGh5c2ljYWwgc3RvcmFnZS4gIFRoZSBiYWNr ZW5kIElEIGlzIEludmFsaWRCYWNrZW5kSWQKLSAqIGZvciByZWd1bGFyIHJlbGF0aW9ucyAodGhv c2UgYWNjZXNzaWJsZSB0byBtb3JlIHRoYW4gb25lIGJhY2tlbmQpLCBvciB0aGUKLSAqIG93bmlu ZyBiYWNrZW5kJ3MgSUQgZm9yIGJhY2tlbmQtbG9jYWwgcmVsYXRpb25zLiAgQmFja2VuZC1sb2Nh bCByZWxhdGlvbnMKLSAqIGFyZSBhbHdheXMgdHJhbnNpZW50IGFuZCByZW1vdmVkIGluIGNhc2Ug b2YgYSBkYXRhYmFzZSBjcmFzaDsgdGhleSBhcmUKLSAqIG5ldmVyIFdBTC1sb2dnZWQgb3IgZnN5 bmMnZC4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgUmVsRmlsZUxvY2F0b3JCYWNrZW5kCi17Ci0JUmVs RmlsZUxvY2F0b3IgbG9jYXRvcjsKLQlCYWNrZW5kSWQJYmFja2VuZDsKLX0gUmVsRmlsZUxvY2F0 b3JCYWNrZW5kOwotCi0jZGVmaW5lIFJlbEZpbGVMb2NhdG9yQmFja2VuZElzVGVtcChybG9jYXRv cikgXAotCSgocmxvY2F0b3IpLmJhY2tlbmQgIT0gSW52YWxpZEJhY2tlbmRJZCkKLQotLyoKLSAq IE5vdGU6IFJlbEZpbGVMb2NhdG9yRXF1YWxzIGFuZCBSZWxGaWxlTG9jYXRvckJhY2tlbmRFcXVh bHMgY29tcGFyZSByZWxOdW1iZXIKKyAqIE5vdGU6IFJlbEZpbGVMb2NhdG9yRXF1YWxzIGNvbXBh cmVzIHJlbE51bWJlcgogICogZmlyc3Qgc2luY2UgdGhhdCBpcyBtb3N0IGxpa2VseSB0byBiZSBk aWZmZXJlbnQgaW4gdHdvIHVuZXF1YWwKICAqIFJlbEZpbGVMb2NhdG9ycy4gIEl0IGlzIHByb2Jh Ymx5IHJlZHVuZGFudCB0byBjb21wYXJlIHNwY09pZCBpZiB0aGUgb3RoZXIKICAqIGZpZWxkcyBh cmUgZm91bmQgZXF1YWwsIGJ1dCBkbyBpdCBhbnl3YXkgdG8gYmUgc3VyZS4gIExpa2V3aXNlIGZv ciBjaGVja2luZwotICogdGhlIGJhY2tlbmQgSUQgaW4gUmVsRmlsZUxvY2F0b3JCYWNrZW5kRXF1 YWxzLgorICogdGhlIGJhY2tlbmQgSUQgaW4gU01nckZpbGVMb2NhdG9yQmFja2VuZEVxdWFscy4K ICAqLwogI2RlZmluZSBSZWxGaWxlTG9jYXRvckVxdWFscyhsb2NhdG9yMSwgbG9jYXRvcjIpIFwK IAkoKGxvY2F0b3IxKS5yZWxOdW1iZXIgPT0gKGxvY2F0b3IyKS5yZWxOdW1iZXIgJiYgXAogCSAo bG9jYXRvcjEpLmRiT2lkID09IChsb2NhdG9yMikuZGJPaWQgJiYgXAogCSAobG9jYXRvcjEpLnNw Y09pZCA9PSAobG9jYXRvcjIpLnNwY09pZCkKIAotI2RlZmluZSBSZWxGaWxlTG9jYXRvckJhY2tl bmRFcXVhbHMobG9jYXRvcjEsIGxvY2F0b3IyKSBcCi0JKChsb2NhdG9yMSkubG9jYXRvci5yZWxO dW1iZXIgPT0gKGxvY2F0b3IyKS5sb2NhdG9yLnJlbE51bWJlciAmJiBcCi0JIChsb2NhdG9yMSku bG9jYXRvci5kYk9pZCA9PSAobG9jYXRvcjIpLmxvY2F0b3IuZGJPaWQgJiYgXAotCSAobG9jYXRv cjEpLmJhY2tlbmQgPT0gKGxvY2F0b3IyKS5iYWNrZW5kICYmIFwKLQkgKGxvY2F0b3IxKS5sb2Nh dG9yLnNwY09pZCA9PSAobG9jYXRvcjIpLmxvY2F0b3Iuc3BjT2lkKQotCiAjZW5kaWYJCQkJCQkJ LyogUkVMRklMRUxPQ0FUT1JfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9z bWdyLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3NtZ3IuaAppbmRleCBhMDc3MTUzNTZiYS4uMGVk NTY5YjI4MzYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc21nci5oCisrKyBiL3Ny Yy9pbmNsdWRlL3N0b3JhZ2Uvc21nci5oCkBAIC0xOCwzMSArMTgsNTYgQEAKICNpbmNsdWRlICJz dG9yYWdlL2Jsb2NrLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9yZWxmaWxlbG9jYXRvci5oIgogCisK IC8qCi0gKiBzbWdyLmMgbWFpbnRhaW5zIGEgdGFibGUgb2YgU01nclJlbGF0aW9uIG9iamVjdHMs IHdoaWNoIGFyZSBlc3NlbnRpYWxseQotICogY2FjaGVkIGZpbGUgaGFuZGxlcy4gIEFuIFNNZ3JS ZWxhdGlvbiBpcyBjcmVhdGVkIChpZiBub3QgYWxyZWFkeSBwcmVzZW50KQorICogU01nckZpbGVM b2NhdG9yIGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGxvY2F0ZSB0aGUg cGh5c2ljYWwKKyAqIHN0b3JhZ2Ugb2YgYSByZWxhdGlvbiBmb3JrLCBvciBzb21lIG90aGVyIGZp bGUgdGhhdCBpcyBtYW5hZ2VkIGJ5IHRoZSBidWZmZXIKKyAqIG1hbmFnZXIuCisgKgorICogVGhl IGJhY2tlbmQgSUQgaXMgSW52YWxpZEJhY2tlbmRJZCBmb3IgcmVndWxhciByZWxhdGlvbnMgKHRo b3NlIGFjY2Vzc2libGUKKyAqIHRvIG1vcmUgdGhhbiBvbmUgYmFja2VuZCksIG9yIHRoZSBvd25p bmcgYmFja2VuZCdzIElEIGZvciBiYWNrZW5kLWxvY2FsCisgKiByZWxhdGlvbnMuIEJhY2tlbmQt bG9jYWwgcmVsYXRpb25zIGFyZSBhbHdheXMgdHJhbnNpZW50IGFuZCByZW1vdmVkIGluCisgKiBj YXNlIG9mIGEgZGF0YWJhc2UgY3Jhc2g7IHRoZXkgYXJlIG5ldmVyIFdBTC1sb2dnZWQgb3IgZnN5 bmMnZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgU01nckZpbGVMb2NhdG9yCit7CisJUmVsRmlsZUxv Y2F0b3IgbG9jYXRvcjsKKwlCYWNrZW5kSWQJYmFja2VuZDsKKwlGb3JrTnVtYmVyCWZvcmtudW07 Cit9IFNNZ3JGaWxlTG9jYXRvcjsKKworI2RlZmluZSBTTWdyRmlsZUxvY2F0b3JJc1RlbXAoc2xv Y2F0b3IpIFwKKwkoKHNsb2NhdG9yKS5iYWNrZW5kICE9IEludmFsaWRCYWNrZW5kSWQpCisKKy8q CisgKiBzbWdyLmMgbWFpbnRhaW5zIGEgdGFibGUgb2YgU01nckZpbGVEYXRhIG9iamVjdHMsIHdo aWNoIGFyZSBlc3NlbnRpYWxseQorICogY2FjaGVkIGZpbGUgaGFuZGxlcy4gIEFuIFNNZ3JGaWxl IGlzIGNyZWF0ZWQgKGlmIG5vdCBhbHJlYWR5IHByZXNlbnQpCiAgKiBieSBzbWdyb3BlbigpLCBh bmQgZGVzdHJveWVkIGJ5IHNtZ3JjbG9zZSgpLiAgTm90ZSB0aGF0IG5laXRoZXIgb2YgdGhlc2UK ICAqIG9wZXJhdGlvbnMgaW1wbHkgSS9PLCB0aGV5IGp1c3QgY3JlYXRlIG9yIGRlc3Ryb3kgYSBo YXNodGFibGUgZW50cnkuCiAgKiAoQnV0IHNtZ3JjbG9zZSgpIG1heSByZWxlYXNlIGFzc29jaWF0 ZWQgcmVzb3VyY2VzLCBzdWNoIGFzIE9TLWxldmVsIGZpbGUKICAqIGRlc2NyaXB0b3JzLikKICAq Ci0gKiBBbiBTTWdyUmVsYXRpb24gbWF5IGhhdmUgYW4gIm93bmVyIiwgd2hpY2ggaXMganVzdCBh IHBvaW50ZXIgdG8gaXQgZnJvbQotICogc29tZXdoZXJlIGVsc2U7IHNtZ3IuYyB3aWxsIGNsZWFy IHRoaXMgcG9pbnRlciBpZiB0aGUgU01nclJlbGF0aW9uIGlzCisgKiBBbiBTTWdyRmlsZSBtYXkg aGF2ZSBhbiAib3duZXIiLCB3aGljaCBpcyBqdXN0IGEgcG9pbnRlciB0byBpdCBmcm9tCisgKiBz b21ld2hlcmUgZWxzZTsgc21nci5jIHdpbGwgY2xlYXIgdGhpcyBwb2ludGVyIGlmIHRoZSBTTWdy RmlsZSBpcwogICogY2xvc2VkLiAgV2UgdXNlIHRoaXMgdG8gYXZvaWQgZGFuZ2xpbmcgcG9pbnRl cnMgZnJvbSByZWxjYWNoZSB0byBzbWdyCiAgKiB3aXRob3V0IGhhdmluZyB0byBtYWtlIHRoZSBz bWdyIGV4cGxpY2l0bHkgYXdhcmUgb2YgcmVsY2FjaGUuICBUaGVyZQogICogY2FuJ3QgYmUgbW9y ZSB0aGFuIG9uZSAib3duZXIiIHBvaW50ZXIgcGVyIFNNZ3JSZWxhdGlvbiwgYnV0IHRoYXQncwog ICogYWxsIHdlIG5lZWQuCiAgKgotICogU01nclJlbGF0aW9ucyB0aGF0IGRvIG5vdCBoYXZlIGFu ICJvd25lciIgYXJlIGNvbnNpZGVyZWQgdG8gYmUgdHJhbnNpZW50LAorICogU01nckZpbGVzIHRo YXQgZG8gbm90IGhhdmUgYW4gIm93bmVyIiBhcmUgY29uc2lkZXJlZCB0byBiZSB0cmFuc2llbnQs CiAgKiBhbmQgYXJlIGRlbGV0ZWQgYXQgZW5kIG9mIHRyYW5zYWN0aW9uLgorICoKKyAqIEEgZmls ZSB0aGF0IGlzIHJlcHJlc2VudGVkIGJ5IGFuIFNNZ3JGaWxlIGNhbiBiZSBtYW5hZ2VkIGJ5IHRo ZSBidWZmZXIKKyAqIG1hbmFnZXIuIEN1cnJlbnRseSwgaXQncyBvbmx5IHVzZWQgZm9yIHJlbGF0 aW9uIGZpbGVzLCBidXQgY291bGQgYmUgdXNlZAorICogZm9yIFNMUlVzIGFuZCBvdGhlciB0aGlu Z3MgaW4gdGhlIGZ1dHVyZS4KICAqLwotdHlwZWRlZiBzdHJ1Y3QgU01nclJlbGF0aW9uRGF0YQor dHlwZWRlZiBzdHJ1Y3QgU01nckZpbGVEYXRhCiB7Ci0JLyogcmxvY2F0b3IgaXMgdGhlIGhhc2h0 YWJsZSBsb29rdXAga2V5LCBzbyBpdCBtdXN0IGJlIGZpcnN0ISAqLwotCVJlbEZpbGVMb2NhdG9y QmFja2VuZCBzbWdyX3Jsb2NhdG9yOwkvKiByZWxhdGlvbiBwaHlzaWNhbCBpZGVudGlmaWVyICov CisJLyogbG9jYXRvciBpcyB0aGUgaGFzaHRhYmxlIGxvb2t1cCBrZXksIHNvIG11c3QgYmUgZmly c3QhICovCisJU01nckZpbGVMb2NhdG9yIHNtZ3JfbG9jYXRvcjsJLyogZmlsZSBwaHlzaWNhbCBp ZGVudGlmaWVyICovCiAKIAkvKiBwb2ludGVyIHRvIG93bmluZyBwb2ludGVyLCBvciBOVUxMIGlm IG5vbmUgKi8KLQlzdHJ1Y3QgU01nclJlbGF0aW9uRGF0YSAqKnNtZ3Jfb3duZXI7CisJc3RydWN0 IFNNZ3JGaWxlRGF0YSAqKnNtZ3Jfb3duZXI7CiAKIAkvKgogCSAqIFRoZSBmb2xsb3dpbmcgZmll bGRzIGFyZSByZXNldCB0byBJbnZhbGlkQmxvY2tOdW1iZXIgdXBvbiBhIGNhY2hlIGZsdXNoCkBA IC01MSw3ICs3Niw3IEBAIHR5cGVkZWYgc3RydWN0IFNNZ3JSZWxhdGlvbkRhdGEKIAkgKiBpbnZh bGlkYXRpb24gZm9yIGZvcmsgZXh0ZW5zaW9uLgogCSAqLwogCUJsb2NrTnVtYmVyIHNtZ3JfdGFy Z2Jsb2NrOyAvKiBjdXJyZW50IGluc2VydGlvbiB0YXJnZXQgYmxvY2sgKi8KLQlCbG9ja051bWJl ciBzbWdyX2NhY2hlZF9uYmxvY2tzW01BWF9GT1JLTlVNICsgMV07CS8qIGxhc3Qga25vd24gc2l6 ZSAqLworCUJsb2NrTnVtYmVyIHNtZ3JfY2FjaGVkX25ibG9ja3M7CS8qIGxhc3Qga25vd24gc2l6 ZSAqLwogCiAJLyogYWRkaXRpb25hbCBwdWJsaWMgZmllbGRzIG1heSBzb21lZGF5IGV4aXN0IGhl cmUgKi8KIApAQCAtNjUsNDYgKzkwLDQ2IEBAIHR5cGVkZWYgc3RydWN0IFNNZ3JSZWxhdGlvbkRh dGEKIAkgKiBmb3IgbWQuYzsgcGVyLWZvcmsgYXJyYXlzIG9mIHRoZSBudW1iZXIgb2Ygb3BlbiBz ZWdtZW50cwogCSAqIChtZF9udW1fb3Blbl9zZWdzKSBhbmQgdGhlIHNlZ21lbnRzIHRoZW1zZWx2 ZXMgKG1kX3NlZ19mZHMpLgogCSAqLwotCWludAkJCW1kX251bV9vcGVuX3NlZ3NbTUFYX0ZPUktO VU0gKyAxXTsKLQlzdHJ1Y3QgX01kZmRWZWMgKm1kX3NlZ19mZHNbTUFYX0ZPUktOVU0gKyAxXTsK KwlpbnQJCQltZF9udW1fb3Blbl9zZWdzOworCXN0cnVjdCBfTWRmZFZlYyAqbWRfc2VnX2ZkczsK IAotCS8qIGlmIHVub3duZWQsIGxpc3QgbGluayBpbiBsaXN0IG9mIGFsbCB1bm93bmVkIFNNZ3JS ZWxhdGlvbnMgKi8KKwkvKiBpZiB1bm93bmVkLCBsaXN0IGxpbmsgaW4gbGlzdCBvZiBhbGwgdW5v d25lZCBTTWdyRmlsZXMgKi8KIAlkbGlzdF9ub2RlCW5vZGU7Ci19IFNNZ3JSZWxhdGlvbkRhdGE7 Cit9IFNNZ3JGaWxlRGF0YTsKIAotdHlwZWRlZiBTTWdyUmVsYXRpb25EYXRhICpTTWdyUmVsYXRp b247Cit0eXBlZGVmIFNNZ3JGaWxlRGF0YSAqU01nckZpbGVIYW5kbGU7CiAKICNkZWZpbmUgU21n cklzVGVtcChzbWdyKSBcCi0JUmVsRmlsZUxvY2F0b3JCYWNrZW5kSXNUZW1wKChzbWdyKS0+c21n cl9ybG9jYXRvcikKKwlTTWdyRmlsZUxvY2F0b3JJc1RlbXAoKHNtZ3IpLT5zbWdyX2xvY2F0b3Ip CiAKIGV4dGVybiB2b2lkIHNtZ3Jpbml0KHZvaWQpOwotZXh0ZXJuIFNNZ3JSZWxhdGlvbiBzbWdy b3BlbihSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgQmFja2VuZElkIGJhY2tlbmQpOwotZXh0ZXJu IGJvb2wgc21ncmV4aXN0cyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKTsK LWV4dGVybiB2b2lkIHNtZ3JzZXRvd25lcihTTWdyUmVsYXRpb24gKm93bmVyLCBTTWdyUmVsYXRp b24gcmVsbik7Ci1leHRlcm4gdm9pZCBzbWdyY2xlYXJvd25lcihTTWdyUmVsYXRpb24gKm93bmVy LCBTTWdyUmVsYXRpb24gcmVsbik7Ci1leHRlcm4gdm9pZCBzbWdyY2xvc2UoU01nclJlbGF0aW9u IHJlbG4pOworZXh0ZXJuIFNNZ3JGaWxlSGFuZGxlIHNtZ3JvcGVuKFJlbEZpbGVMb2NhdG9yIHJs b2NhdG9yLCBCYWNrZW5kSWQgYmFja2VuZCwgRm9ya051bWJlciBmb3JrTnVtKTsKK2V4dGVybiBi b29sIHNtZ3JleGlzdHMoU01nckZpbGVIYW5kbGUgc2ZpbGUpOworZXh0ZXJuIHZvaWQgc21ncnNl dG93bmVyKFNNZ3JGaWxlSGFuZGxlICpvd25lciwgU01nckZpbGVIYW5kbGUgc2ZpbGUpOworZXh0 ZXJuIHZvaWQgc21ncmNsZWFyb3duZXIoU01nckZpbGVIYW5kbGUgKm93bmVyLCBTTWdyRmlsZUhh bmRsZSBzZmlsZSk7CitleHRlcm4gdm9pZCBzbWdyY2xvc2UoU01nckZpbGVIYW5kbGUgc2ZpbGUp OwogZXh0ZXJuIHZvaWQgc21ncmNsb3NlYWxsKHZvaWQpOwotZXh0ZXJuIHZvaWQgc21ncmNsb3Nl cmVsbG9jYXRvcihSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3IpOwotZXh0ZXJuIHZvaWQg c21ncnJlbGVhc2UoU01nclJlbGF0aW9uIHJlbG4pOwogZXh0ZXJuIHZvaWQgc21ncnJlbGVhc2Vh bGwodm9pZCk7Ci1leHRlcm4gdm9pZCBzbWdyY3JlYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3Jr TnVtYmVyIGZvcmtudW0sIGJvb2wgaXNSZWRvKTsKLWV4dGVybiB2b2lkIHNtZ3Jkb3N5bmNhbGwo U01nclJlbGF0aW9uICpyZWxzLCBpbnQgbnJlbHMpOwotZXh0ZXJuIHZvaWQgc21ncmRvdW5saW5r YWxsKFNNZ3JSZWxhdGlvbiAqcmVscywgaW50IG5yZWxzLCBib29sIGlzUmVkbyk7Ci1leHRlcm4g dm9pZCBzbWdyZXh0ZW5kKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCitl eHRlcm4gdm9pZCBzbWdyY3JlYXRlKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBib29sIGlzUmVkbyk7 CitleHRlcm4gdm9pZCBzbWdyZXh0ZW5kKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLAogCQkJCQkgICBC bG9ja051bWJlciBibG9ja251bSwgY2hhciAqYnVmZmVyLCBib29sIHNraXBGc3luYyk7Ci1leHRl cm4gYm9vbCBzbWdycHJlZmV0Y2goU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251 bSwKLQkJCQkJCSBCbG9ja051bWJlciBibG9ja251bSk7Ci1leHRlcm4gdm9pZCBzbWdycmVhZChT TWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAorZXh0ZXJuIGJvb2wgc21ncnBy ZWZldGNoKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9ja051bWJlciBibG9ja251bSk7CitleHRl cm4gdm9pZCBzbWdycmVhZChTTWdyRmlsZUhhbmRsZSBzZmlsZSwKIAkJCQkJIEJsb2NrTnVtYmVy IGJsb2NrbnVtLCBjaGFyICpidWZmZXIpOwotZXh0ZXJuIHZvaWQgc21ncndyaXRlKFNNZ3JSZWxh dGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCitleHRlcm4gdm9pZCBzbWdyd3JpdGUoU01n ckZpbGVIYW5kbGUgc2ZpbGUsCiAJCQkJCSAgQmxvY2tOdW1iZXIgYmxvY2tudW0sIGNoYXIgKmJ1 ZmZlciwgYm9vbCBza2lwRnN5bmMpOwotZXh0ZXJuIHZvaWQgc21ncndyaXRlYmFjayhTTWdyUmVs YXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAorZXh0ZXJuIHZvaWQgc21ncndyaXRlYmFj ayhTTWdyRmlsZUhhbmRsZSBzZmlsZSwKIAkJCQkJCSAgQmxvY2tOdW1iZXIgYmxvY2tudW0sIEJs b2NrTnVtYmVyIG5ibG9ja3MpOwotZXh0ZXJuIEJsb2NrTnVtYmVyIHNtZ3JuYmxvY2tzKFNNZ3JS ZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pOwotZXh0ZXJuIEJsb2NrTnVtYmVyIHNt Z3JuYmxvY2tzX2NhY2hlZChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKTsK LWV4dGVybiB2b2lkIHNtZ3J0cnVuY2F0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciAq Zm9ya251bSwKLQkJCQkJCSBpbnQgbmZvcmtzLCBCbG9ja051bWJlciAqbmJsb2Nrcyk7Ci1leHRl cm4gdm9pZCBzbWdyaW1tZWRzeW5jKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtu dW0pOworZXh0ZXJuIEJsb2NrTnVtYmVyIHNtZ3JuYmxvY2tzKFNNZ3JGaWxlSGFuZGxlIHNmaWxl KTsKK2V4dGVybiBCbG9ja051bWJlciBzbWdybmJsb2Nrc19jYWNoZWQoU01nckZpbGVIYW5kbGUg c2ZpbGUpOworZXh0ZXJuIHZvaWQgc21ncmltbWVkc3luYyhTTWdyRmlsZUhhbmRsZSBzZmlsZSk7 CitleHRlcm4gdm9pZCBzbWdydW5saW5rKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBib29sIGlzUmVk byk7CisKK2V4dGVybiB2b2lkIHNtZ3J0cnVuY2F0ZV9tdWx0aShSZWxGaWxlTG9jYXRvciBybG9j YXRvciwgQmFja2VuZElkIGJhY2tlbmQsIEZvcmtOdW1iZXIgKmZvcmtzLCBpbnQgbmZvcmtzLCBC bG9ja051bWJlciAqbmJsb2Nrcyk7CitleHRlcm4gdm9pZCBzbWdydW5saW5rX211bHRpKFJlbEZp bGVMb2NhdG9yIHJsb2NhdG9yLCBCYWNrZW5kSWQgYmFja2VuZCwgRm9ya051bWJlciAqZm9ya3Ms IGludCBuZm9ya3MsIGJvb2wgaXNSZWRvKTsKKworZXh0ZXJuIHZvaWQgc21ncmNsb3NlcmVsbG9j YXRvcihSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgQmFja2VuZElkIGJhY2tlbmQpOworCiBleHRl cm4gdm9pZCBBdEVPWGFjdF9TTWdyKHZvaWQpOwogZXh0ZXJuIGJvb2wgUHJvY2Vzc0JhcnJpZXJT bWdyUmVsZWFzZSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvaW52YWwu aCBiL3NyYy9pbmNsdWRlL3V0aWxzL2ludmFsLmgKaW5kZXggMjM3NDhiNzJjYWYuLmM0OTRjMDEw NTZmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9pbnZhbC5oCisrKyBiL3NyYy9pbmNs dWRlL3V0aWxzL2ludmFsLmgKQEAgLTQ4LDcgKzQ4LDcgQEAgZXh0ZXJuIHZvaWQgQ2FjaGVJbnZh bGlkYXRlUmVsY2FjaGVCeVR1cGxlKEhlYXBUdXBsZSBjbGFzc1R1cGxlKTsKIAogZXh0ZXJuIHZv aWQgQ2FjaGVJbnZhbGlkYXRlUmVsY2FjaGVCeVJlbGlkKE9pZCByZWxpZCk7CiAKLWV4dGVybiB2 b2lkIENhY2hlSW52YWxpZGF0ZVNtZ3IoUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yKTsK K2V4dGVybiB2b2lkIENhY2hlSW52YWxpZGF0ZVNtZ3IoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3Is IEJhY2tlbmRJZCBiYWNrZW5kKTsKIAogZXh0ZXJuIHZvaWQgQ2FjaGVJbnZhbGlkYXRlUmVsbWFw KE9pZCBkYXRhYmFzZUlkKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgg Yi9zcmMvaW5jbHVkZS91dGlscy9yZWwuaAppbmRleCBmMzgzYTJmY2E5ZS4uMjkwODM4YWI4YzUg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0 aWxzL3JlbC5oCkBAIC01NCw3ICs1NCw3IEBAIHR5cGVkZWYgTG9ja0luZm9EYXRhICpMb2NrSW5m bzsKIHR5cGVkZWYgc3RydWN0IFJlbGF0aW9uRGF0YQogewogCVJlbEZpbGVMb2NhdG9yIHJkX2xv Y2F0b3I7CS8qIHJlbGF0aW9uIHBoeXNpY2FsIGlkZW50aWZpZXIgKi8KLQlTTWdyUmVsYXRpb24g cmRfc21ncjsJCS8qIGNhY2hlZCBmaWxlIGhhbmRsZSwgb3IgTlVMTCAqLworCVNNZ3JGaWxlSGFu ZGxlIHJkX3NtZ3JbTUFYX0ZPUktOVU0gKyAxXTsJCS8qIGNhY2hlZCBmaWxlIGhhbmRsZXMsIG9y IE5VTExzICovCiAJaW50CQkJcmRfcmVmY250OwkJLyogcmVmZXJlbmNlIGNvdW50ICovCiAJQmFj a2VuZElkCXJkX2JhY2tlbmQ7CQkvKiBvd25pbmcgYmFja2VuZCBpZCwgaWYgdGVtcG9yYXJ5IHJl bGF0aW9uICovCiAJYm9vbAkJcmRfaXNsb2NhbHRlbXA7IC8qIHJlbCBpcyBhIHRlbXAgcmVsIG9m IHRoaXMgc2Vzc2lvbiAqLwpAQCAtNTYyLDE2ICs1NjIsMTcgQEAgdHlwZWRlZiBzdHJ1Y3QgVmll d09wdGlvbnMKICAqIE5vdGU6IHNpbmNlIGEgcmVsY2FjaGUgZmx1c2ggY2FuIGNhdXNlIHRoZSBm aWxlIGhhbmRsZSB0byBiZSBjbG9zZWQgYWdhaW4sCiAgKiBpdCdzIHVud2lzZSB0byBob2xkIG9u dG8gdGhlIHBvaW50ZXIgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiBmb3IgYW55CiAgKiBsb25n IHBlcmlvZC4gIFJlY29tbWVuZGVkIHByYWN0aWNlIGlzIHRvIGp1c3QgcmUtZXhlY3V0ZSBSZWxh dGlvbkdldFNtZ3IKLSAqIGVhY2ggdGltZSB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIFNNZ3JSZWxh dGlvbi4gIEl0J3MgcXVpdGUgY2hlYXAgaW4KKyAqIGVhY2ggdGltZSB5b3UgbmVlZCB0byBhY2Nl c3MgdGhlIFNNZ3JGaWxlSGFuZGxlLiAgSXQncyBxdWl0ZSBjaGVhcCBpbgogICogY29tcGFyaXNv biB0byB3aGF0ZXZlciBhbiBzbWdyIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGRvLgogICovCi1zdGF0 aWMgaW5saW5lIFNNZ3JSZWxhdGlvbgotUmVsYXRpb25HZXRTbWdyKFJlbGF0aW9uIHJlbCkKK3N0 YXRpYyBpbmxpbmUgU01nckZpbGVIYW5kbGUKK1JlbGF0aW9uR2V0U21ncihSZWxhdGlvbiByZWws IEZvcmtOdW1iZXIgZm9ya051bSkKIHsKLQlpZiAodW5saWtlbHkocmVsLT5yZF9zbWdyID09IE5V TEwpKQotCQlzbWdyc2V0b3duZXIoJihyZWwtPnJkX3NtZ3IpLCBzbWdyb3BlbihyZWwtPnJkX2xv Y2F0b3IsIHJlbC0+cmRfYmFja2VuZCkpOwotCXJldHVybiByZWwtPnJkX3NtZ3I7CisJaWYgKHVu bGlrZWx5KHJlbC0+cmRfc21ncltmb3JrTnVtXSA9PSBOVUxMKSkKKwkJc21ncnNldG93bmVyKCYo cmVsLT5yZF9zbWdyW2ZvcmtOdW1dKSwgc21ncm9wZW4ocmVsLT5yZF9sb2NhdG9yLCByZWwtPnJk X2JhY2tlbmQsIGZvcmtOdW0pKTsKKwlyZXR1cm4gcmVsLT5yZF9zbWdyW2ZvcmtOdW1dOwogfQor I2VuZGlmCiAKIC8qCiAgKiBSZWxhdGlvbkNsb3NlU21ncgpAQCAtNTgwLDEzICs1ODEsMTUgQEAg UmVsYXRpb25HZXRTbWdyKFJlbGF0aW9uIHJlbCkKIHN0YXRpYyBpbmxpbmUgdm9pZAogUmVsYXRp b25DbG9zZVNtZ3IoUmVsYXRpb24gcmVsYXRpb24pCiB7Ci0JaWYgKHJlbGF0aW9uLT5yZF9zbWdy ICE9IE5VTEwpCi0JCXNtZ3JjbG9zZShyZWxhdGlvbi0+cmRfc21ncik7Ci0KLQkvKiBzbWdyY2xv c2Ugc2hvdWxkIHVuaG9vayBmcm9tIG93bmVyIHBvaW50ZXIgKi8KLQlBc3NlcnQocmVsYXRpb24t PnJkX3NtZ3IgPT0gTlVMTCk7CisJZm9yIChpbnQgaSA9IDA7IGkgPD0gTUFYX0ZPUktOVU07IGkr KykKKwl7CisJCWlmIChyZWxhdGlvbi0+cmRfc21ncltpXSAhPSBOVUxMKQorCQl7CisJCQlzbWdy Y2xvc2UocmVsYXRpb24tPnJkX3NtZ3JbaV0pOworCQkJQXNzZXJ0KHJlbGF0aW9uLT5yZF9zbWdy W2ldID09IE5VTEwpOworCQl9CisJfQogfQotI2VuZGlmCQkJCQkJCS8qICFGUk9OVEVORCAqLwog CiAvKgogICogUmVsYXRpb25HZXRUYXJnZXRCbG9jawpAQCAtNTk3LDcgKzYwMCw3IEBAIFJlbGF0 aW9uQ2xvc2VTbWdyKFJlbGF0aW9uIHJlbGF0aW9uKQogICogc28gdGhlcmUncyBubyBuZWVkIHRv IHJlLW9wZW4gdGhlIHNtZ3IgaGFuZGxlIGlmIGl0J3Mgbm90IGN1cnJlbnRseSBvcGVuLgogICov CiAjZGVmaW5lIFJlbGF0aW9uR2V0VGFyZ2V0QmxvY2socmVsYXRpb24pIFwKLQkoIChyZWxhdGlv biktPnJkX3NtZ3IgIT0gTlVMTCA/IChyZWxhdGlvbiktPnJkX3NtZ3ItPnNtZ3JfdGFyZ2Jsb2Nr IDogSW52YWxpZEJsb2NrTnVtYmVyICkKKwkoIChyZWxhdGlvbiktPnJkX3NtZ3JbTUFJTl9GT1JL TlVNXSAhPSBOVUxMID8gKHJlbGF0aW9uKS0+cmRfc21ncltNQUlOX0ZPUktOVU1dLT5zbWdyX3Rh cmdibG9jayA6IEludmFsaWRCbG9ja051bWJlciApCiAKIC8qCiAgKiBSZWxhdGlvblNldFRhcmdl dEJsb2NrCkBAIC02MDUsNyArNjA4LDcgQEAgUmVsYXRpb25DbG9zZVNtZ3IoUmVsYXRpb24gcmVs YXRpb24pCiAgKi8KICNkZWZpbmUgUmVsYXRpb25TZXRUYXJnZXRCbG9jayhyZWxhdGlvbiwgdGFy Z2Jsb2NrKSBcCiAJZG8geyBcCi0JCVJlbGF0aW9uR2V0U21ncihyZWxhdGlvbiktPnNtZ3JfdGFy Z2Jsb2NrID0gKHRhcmdibG9jayk7IFwKKwkJUmVsYXRpb25HZXRTbWdyKHJlbGF0aW9uLCBNQUlO X0ZPUktOVU0pLT5zbWdyX3RhcmdibG9jayA9ICh0YXJnYmxvY2spOyBcCiAJfSB3aGlsZSAoMCkK IAogLyoKLS0gCjIuMzguMQoK --_004_D663D8DD6B134DF49A8D045D5F0F2A7Eamazoncom_--