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 1lqH16-0004Ey-9x for pgsql-hackers@arkaria.postgresql.org; Mon, 07 Jun 2021 15:18:16 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1lqH15-00067l-9E for pgsql-hackers@arkaria.postgresql.org; Mon, 07 Jun 2021 15:18:15 +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 1lqH14-00066r-JC for pgsql-hackers@lists.postgresql.org; Mon, 07 Jun 2021 15:18:15 +0000 Received: from smtp-fw-80006.amazon.com ([99.78.197.217]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lqH0z-0007EF-9p for pgsql-hackers@postgresql.org; Mon, 07 Jun 2021 15:18:13 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1623079089; x=1654615089; h=from:to:date:message-id:references:in-reply-to: mime-version:subject; bh=zx9jnw3dKiOTHk09gvEHO6bnxE+rSxCAsZB+ucsMQRM=; b=l0xGgzPjMY/1B0iKMa+2ynS9VbAg1E5nXRN0Jjdc4HnYKdCxhZhrYZpl fNM4wlVxKzgboDoi0OeOMutAMXjLXbCGcT8skRF9VseHklh0YpKJkTbfg ac5wSWis/euhof0Q+d+aJnFAoLkKckDQImq/TEb8qAdyb/huBMD9TGHk6 8=; X-Amazon-filename: v1-0001-wal-segment-pre-allocation.patch X-IronPort-AV: E=Sophos;i="5.83,255,1616457600"; d="scan'208,223";a="5305009" Subject: Re: Pre-allocating WAL files Thread-Topic: Pre-allocating WAL files Received: from pdx4-co-svc-p1-lb2-vlan3.amazon.com (HELO email-inbound-relay-2a-538b0bfb.us-west-2.amazon.com) ([10.25.36.214]) by smtp-border-fw-80006.pdx80.corp.amazon.com with ESMTP; 07 Jun 2021 15:18:07 +0000 Received: from EX13MTAUWB001.ant.amazon.com (pdx1-ws-svc-p6-lb9-vlan3.pdx.amazon.com [10.236.137.198]) by email-inbound-relay-2a-538b0bfb.us-west-2.amazon.com (Postfix) with ESMTPS id 73E33A1B88; Mon, 7 Jun 2021 15:18:07 +0000 (UTC) Received: from EX13D03UWC004.ant.amazon.com (10.43.162.49) by EX13MTAUWB001.ant.amazon.com (10.43.161.249) with Microsoft SMTP Server (TLS) id 15.0.1497.18; Mon, 7 Jun 2021 15:18:07 +0000 Received: from EX13D03UWC004.ant.amazon.com (10.43.162.49) by EX13D03UWC004.ant.amazon.com (10.43.162.49) with Microsoft SMTP Server (TLS) id 15.0.1497.18; Mon, 7 Jun 2021 15:18:06 +0000 Received: from EX13D03UWC004.ant.amazon.com ([10.43.162.49]) by EX13D03UWC004.ant.amazon.com ([10.43.162.49]) with mapi id 15.00.1497.018; Mon, 7 Jun 2021 15:18:06 +0000 From: "Bossart, Nathan" To: Andres Freund , "pgsql-hackers@postgresql.org" Thread-Index: AQHXWav8+6ha4BKnPEG53jEY0XwfWasIN++A Date: Mon, 7 Jun 2021 15:18:06 +0000 Message-ID: <265B06BA-7B16-4C1A-BE1A-1451D22A1F83@amazon.com> References: <20201225200953.jjkrytlrzojbndh5@alap3.anarazel.de> In-Reply-To: <20201225200953.jjkrytlrzojbndh5@alap3.anarazel.de> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-ms-exchange-messagesentrepresentingtype: 1 x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [10.43.160.110] Content-Type: multipart/mixed; boundary="_002_265B06BA7B164C1ABE1A1451D22A1F83amazoncom_" MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_002_265B06BA7B164C1ABE1A1451D22A1F83amazoncom_ Content-Type: text/plain; charset="utf-8" Content-ID: <9397DC201F46DA409BE88BE2C8597636@amazon.com> Content-Transfer-Encoding: base64 T24gMTIvMjUvMjAsIDEyOjA5IFBNLCAiQW5kcmVzIEZyZXVuZCIgPGFuZHJlc0BhbmFyYXplbC5k ZT4gd3JvdGU6DQo+IFdoZW4gcnVubmluZyB3cml0ZSBoZWF2eSB0cmFuc2FjdGlvbmFsIHdvcmts b2FkcyBJJ3ZlIG1hbnkgdGltZXMNCj4gb2JzZXJ2ZWQgdGhhdCBvbmUgbmVlZHMgdG8gcnVuIHRo ZSBiZW5jaG1hcmtzIGZvciBxdWl0ZSBhIHdoaWxlIHRpbGwNCj4gdGhleSBnZXQgdG8gdGhlaXIg c3RlYWR5IHN0YXRlIHBlcmZvcm1hbmNlLiBUaGUgbW9zdCBzaWduaWZpY2FudCByZWFzb24NCj4g Zm9yIHRoYXQgaXMgdGhhdCBpbml0aWFsbHkgV0FMIGZpbGVzIHdpbGwgbm90IGdldCByZWN5Y2xl ZCwgYnV0IG5lZWQgdG8NCj4gYmUgZnJlc2hseSBpbml0aWFsaXplZC4gVGhhdCdzIDE2TUIgb2Yg d3JpdGVzIHRoYXQgbmVlZCB0byBzeW5jaHJvbm91c2x5DQo+IGZpbmlzaCBiZWZvcmUgYSBzbWFs bCB3cml0ZSB0cmFuc2FjdGlvbiBjYW4gZXZlbiBzdGFydCB0byBiZSB3cml0dGVuDQo+IG91dC4u Lg0KPg0KPiBJIHRoaW5rIHRoZXJlJ3MgdHdvIHVzZWZ1bCB0aGluZ3Mgd2UgY291bGQgZG86DQo+ DQo+IDEpIEFkZCBwZ193YWxfcHJlYWxsb2NhdGUodWludDY0IGJ5dGVzKSB0aGF0IGVuc3VyZXMg KGJ5dGVzICsNCj4gICAgc2VnbWVudF9zaXplIC0gMSkgLyBzZWdtZW50X3NpemUgV0FMIHNlZ21l bnRzIGV4aXN0IGZyb20gdGhlIGN1cnJlbnQNCj4gICAgcG9pbnQgaW4gdGhlIFdBTC4gUGVyaGFw cyB3aXRoIHRoZSBudW1iZXIgb2YgYnl0ZXMgZGVmYXVsdGluZyB0bw0KPiAgICBtaW5fd2FsX3Np emUgaWYgbm90IGV4cGxpY2l0bHkgc3BlY2lmaWVkPw0KPg0KPiAyKSBIYXZlIGNoZWNrcG9pbnRl ciAod2Ugd2FudCB3YWx3cml0ZXIgdG8gcnVuIHdpdGggbG93IGxhdGVuY3kgdG8gZmx1c2gNCj4g ICAgb3V0IGFzeW5jIGNvbW1pdHMgZXRjKSBvY2Nhc2lvbmFsbHkgY2hlY2sgaWYgV0FMIGZpbGVz IG5lZWQgdG8gYmUNCj4gICAgcHJlLWFsbG9jYXRlZC4NCj4NCj4gICAgQ2hlY2twb2ludGVyIGFs cmVhZHkgdHJhY2tzIHRoZSBhbW91bnQgb2YgV0FMIHRoYXQncyBleHBlY3RlZCB0byBiZQ0KPiAg ICBnZW5lcmF0ZWQgdGlsbCB0aGUgZW5kIG9mIHRoZSBjaGVja3BvaW50LCBzbyBpdCBzZWVtcyBs aWtlIGl0J3MgYQ0KPiAgICBwcmV0dHkgZ29vZCBjYW5kaWRhdGUgdG8gZG8gc28uDQo+DQo+ICAg IFRvIGtlZXAgY2hlY2twb2ludGVyIHByZS1hbGxvY2F0aW5nIHdoZW4gaWRsZSB3ZSBjb3VsZCBz aWduYWwgaXQNCj4gICAgd2hlbmV2ZXIgYSByZWNvcmQgaGFzIGNyb3NzZWQgYSBzZWdtZW50IGJv dW5kYXJ5Lg0KPg0KPg0KPiBXaXRoIGEgcGxhaW4gcGdiZW5jaCBydW4gSSBzZWUgYSAyLjV4IHJl ZHVjdGlvbiBpbiB0aHJvdWdocHV0IGluIHRoZQ0KPiBwZXJpb2RzIHdoZXJlIHdlIGluaXRpYWxp emUgV0FMIGZpbGVzLg0KDQpJJ3ZlIGJlZW4gZXhwbG9yaW5nIHRoaXMgaW5kZXBlbmRlbnRseSBh IGJpdCBhbmQgbm90aWNlZCB0aGlzIG1lc3NhZ2UuDQpBdHRhY2hlZCBpcyBhIHByb29mLW9mLWNv bmNlcHQgcGF0Y2ggZm9yIGEgc2VwYXJhdGUgIldBTCBhbGxvY2F0b3IiDQpwcm9jZXNzIHRoYXQg bWFpbnRhaW5zIGEgcG9vbCBvZiBXQUwtc2VnbWVudC1zaXplZCBmaWxlcyB0aGF0IGNhbiBiZQ0K Y2xhaW1lZCB3aGVuZXZlciBhIG5ldyBzZWdtZW50IGZpbGUgaXMgbmVlZGVkLiAgQW4gZWFybHkg dmVyc2lvbiBvZg0KdGhpcyBwYXRjaCBhdHRlbXB0ZWQgdG8gc3ByZWFkIHRoZSBJL08gbGlrZSBu b24taW1tZWRpYXRlIGNoZWNrcG9pbnRzDQpkbywgYnV0IEkgY291bGRuJ3QgcG9pbnQgdG8gYW55 IHJlYWwgYmVuZWZpdCBmcm9tIGRvaW5nIHNvLCBhbmQgaXQNCmNvbXBsaWNhdGVkIHRoaW5ncyBx dWl0ZSBhIGJpdC4NCg0KSSBsaWtlIHRoZSBpZGVhIG9mIHRyeWluZyB0byBiYWtlIHRoaXMgaW50 byBhbiBleGlzdGluZyBwcm9jZXNzIHN1Y2gNCmFzIHRoZSBjaGVja3BvaW50ZXIuICBJJ2xsIGFk bWl0IHRoYXQgY3JlYXRpbmcgYSBuZXcgcHJvY2VzcyBqdXN0IGZvcg0KV0FMIHByZS1hbGxvY2F0 aW9uIGZlZWxzIGEgYml0IGhlYXZ5LWhhbmRlZCwgYnV0IGl0IHdhcyBhIG5pY2Ugd2F5IHRvDQpr ZWVwIHRoaXMgc3R1ZmYgbW9kdWxhcml6ZWQuICBJIGNhbiBsb29rIGludG8gbW92aW5nIHRoaXMN CmZ1bmN0aW9uYWxpdHkgaW50byB0aGUgY2hlY2twb2ludGVyIHByb2Nlc3MgaWYgdGhpcyBpcyBz b21ldGhpbmcgdGhhdA0KZm9sa3MgYXJlIGludGVyZXN0ZWQgaW4uDQoNCk5hdGhhbg0KDQo= --_002_265B06BA7B164C1ABE1A1451D22A1F83amazoncom_ Content-Type: application/octet-stream; name="v1-0001-wal-segment-pre-allocation.patch" Content-Description: v1-0001-wal-segment-pre-allocation.patch Content-Disposition: attachment; filename="v1-0001-wal-segment-pre-allocation.patch"; size=43966; creation-date="Mon, 07 Jun 2021 15:18:06 GMT"; modification-date="Mon, 07 Jun 2021 15:18:06 GMT" Content-ID: <859C5FC686DC5C4E8DCB9A0B6645A6A8@amazon.com> Content-Transfer-Encoding: base64 RnJvbSA3OWE0MmRjYzI5NTkyZDI1ZDg0YWEyZDIwZTcyOTk0ZDIzOGJmOWZlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOYXRoYW4gQm9zc2FydCA8Ym9zc2FydG5AYW1hem9uLmNvbT4K RGF0ZTogTW9uLCA3IEp1biAyMDIxIDE0OjUxOjA5ICswMDAwClN1YmplY3Q6IFtQQVRDSCB2MSAx LzFdIHdhbCBzZWdtZW50IHByZS1hbGxvY2F0aW9uCgotLS0KIGRvYy9zcmMvc2dtbC9jb25maWcu c2dtbCAgICAgICAgICAgICAgICAgICAgICB8ICAyMyArKwogc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0veGxvZy5jICAgICAgICAgICAgIHwgMjI4ICsrKysrKysrKystLS0tLS0tLS0KIHNyYy9i YWNrZW5kL2Jvb3RzdHJhcC9ib290c3RyYXAuYyAgICAgICAgICAgICB8ICAgOCArCiBzcmMvYmFj a2VuZC9wb3N0bWFzdGVyL01ha2VmaWxlICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tl bmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMgICAgICAgICAgIHwgIDQ0ICsrKysKIHNyYy9iYWNr ZW5kL3Bvc3RtYXN0ZXIvd2FsX2FsbG9jYXRvci5jICAgICAgICB8IDMxNSArKysrKysrKysrKysr KysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vYmFzZWJhY2t1cC5jICAgICAg ICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2ZpbGUvZmQuYyAgICAgICAgICAgICAg ICAgfCAxMTUgKysrKysrKysrKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2x3bG9ja25hbWVz LnR4dCAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMgICAgICAg ICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50LmMg ICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNjaW5pdC5jICAgICAgICAg ICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMgICAgICAgICAgICAgICAg ICB8ICAxMiArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUg fCAgIDEgKwogc3JjL2Jpbi9pbml0ZGIvaW5pdGRiLmMgICAgICAgICAgICAgICAgICAgICAgIHwg ICAxICsKIHNyYy9iaW4vcGdfYmFzZWJhY2t1cC9wZ19iYXNlYmFja3VwLmMgICAgICAgICB8ICAx OSArLQogc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3QvMDEwX3BnX2Jhc2ViYWNrdXAucGwgIHwgICA0 ICstCiBzcmMvYmluL3BnX3Jlc2V0d2FsL3BnX3Jlc2V0d2FsLmMgICAgICAgICAgICAgfCAgNDgg KysrKwogc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cuaCAgICAgICAgICAgICAgICAgICAgIHwgICA1 ICsKIHNyYy9pbmNsdWRlL21pc2NhZG1pbi5oICAgICAgICAgICAgICAgICAgICAgICB8ICAgMyAr CiBzcmMvaW5jbHVkZS9wb3N0bWFzdGVyL3dhbF9hbGxvY2F0b3IuaCAgICAgICAgfCAgMjEgKysK IHNyYy9pbmNsdWRlL3N0b3JhZ2UvZmQuaCAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBz cmMvaW5jbHVkZS9zdG9yYWdlL3Byb2MuaCAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwogc3Jj L2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oICAgICAgICAgICAgICAgIHwgICAzICstCiAyNCBm aWxlcyBjaGFuZ2VkLCA3NjEgaW5zZXJ0aW9ucygrKSwgMTA3IGRlbGV0aW9ucygtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2FsX2FsbG9jYXRvci5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci93YWxfYWxsb2NhdG9yLmgKCmRp ZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgYi9kb2Mvc3JjL3NnbWwvY29uZmln LnNnbWwKaW5kZXggZDhjMGZkMzMxNS4uZGYzMGQ5NDExZiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9z Z21sL2NvbmZpZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbApAQCAtMzE4Niw2 ICszMTg2LDI5IEBAIGluY2x1ZGVfZGlyICdjb25mLmQnCiAgICAgICA8L2xpc3RpdGVtPgogICAg ICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtd2FsLWFsbG9j YXRvci1tYXgtc2l6ZSIgeHJlZmxhYmVsPSJ3YWxfYWxsb2NhdG9yX21heF9zaXplIj4KKyAgICAg IDx0ZXJtPjx2YXJuYW1lPndhbF9hbGxvY2F0b3JfbWF4X3NpemU8L3Zhcm5hbWU+ICg8dHlwZT5p bnRlZ2VyPC90eXBlPikKKyAgICAgIDxpbmRleHRlcm0+CisgICAgICAgPHByaW1hcnk+PHZhcm5h bWU+d2FsX2FsbG9jYXRvcl9tYXhfc2l6ZTwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0 ZXI8L3ByaW1hcnk+CisgICAgICA8L2luZGV4dGVybT4KKyAgICAgIDwvdGVybT4KKyAgICAgIDxs aXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIG1heGltdW0gYW1vdW50IG9mIFdB TCB0byBwcmUtYWxsb2NhdGUgZm9yIHVzZSB3aGVuIGEgbmV3IFdBTCBzZWdtZW50CisgICAgICAg IG11c3QgYmUgaW5pdGlhbGl6ZWQuICBTZXR0aW5nIHRoaXMgcGFyYW1ldGVyIHRvIGEgc2l6ZSBs ZXNzIHRoYW4gdGhlIFdBTAorICAgICAgICBzZWdtZW50IHNpemUgZGlzYWJsZXMgdGhpcyBiZWhh dmlvci4gIFRoZSBkZWZhdWx0IHZhbHVlcyBpcyA2NCBtZWdhYnl0ZXMKKyAgICAgICAgKDxsaXRl cmFsPjY0TUI8L2xpdGVyYWw+KS4gIFRoaXMgcGFyYW1ldGVyIGNhbiBvbmx5IGJlIHNldCBpbiB0 aGUKKyAgICAgICAgPGZpbGVuYW1lPnBvc3RncmVzcWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgb3Ig b24gdGhlIHNlcnZlciBjb21tYW5kIGxpbmUuCisgICAgICAgPC9wYXJhPgorCisgICAgICAgPHBh cmE+CisgICAgICAgIFdBTCBwcmUtYWxsb2NhdGlvbiBtYXkgaW1wcm92ZSBwZXJmb3JtYW5jZSBp biBzY2VuYXJpb3Mgd2hlcmUgbmV3IFdBTAorICAgICAgICBzZWdtZW50cyBtdXN0IGJlIGNyZWF0 ZWQgKGUuZy4sIGR1cmluZyBjaGVja3BvaW50cyB3aGVuIFdBTCBzZWdtZW50cworICAgICAgICBj YW5ub3QgYmUgcmVjeWNsZWQpLgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+Cisg ICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy13YWwtYnVm ZmVycyIgeHJlZmxhYmVsPSJ3YWxfYnVmZmVycyI+CiAgICAgICA8dGVybT48dmFybmFtZT53YWxf YnVmZmVyczwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQogICAgICAgPGluZGV4dGVy bT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwppbmRleCA0NDFhOTEyNGNkLi5iOGZhMjM3NDEy IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVk ZSAicG9ydC9wZ19pb3ZlYy5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYmd3cml0ZXIuaCIKICNp bmNsdWRlICJwb3N0bWFzdGVyL3N0YXJ0dXAuaCIKKyNpbmNsdWRlICJwb3N0bWFzdGVyL3dhbF9h bGxvY2F0b3IuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL3dhbHdyaXRlci5oIgogI2luY2x1ZGUg InJlcGxpY2F0aW9uL2Jhc2ViYWNrdXAuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2Fs LmgiCkBAIC03MzIsNiArNzMzLDEzIEBAIHR5cGVkZWYgc3RydWN0IFhMb2dDdGxEYXRhCiAJICov CiAJWExvZ1JlY1B0cglsYXN0RnB3RGlzYWJsZVJlY1B0cjsKIAorCS8qCisJICogbnVtYmVyIG9m IHByZS1hbGxvY2F0ZWQgV0FMIHNlZ21lbnRzIGluIHBnX3dhbC9wcmVhbGxvY2F0ZWRfc2VnbWVu dHMKKwkgKgorCSAqIFByb3RlY3RlZCBieSBXQUxQcmVhbGxvY2F0aW9uTG9jay4KKwkgKi8KKwlp bnQgbnVtX3ByZWFsbG9jX3NlZ3M7CisKIAlzbG9ja190CQlpbmZvX2xjazsJCS8qIGxvY2tzIHNo YXJlZCB2YXJpYWJsZXMgc2hvd24gYWJvdmUgKi8KIH0gWExvZ0N0bERhdGE7CiAKQEAgLTMyODMs MTEgKzMyOTEsMTAgQEAgWExvZ0ZpbGVJbml0KFhMb2dTZWdObyBsb2dzZWdubywgYm9vbCAqdXNl X2V4aXN0ZW50LCBib29sIHVzZV9sb2NrKQogewogCWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKIAlj aGFyCQl0bXBwYXRoW01BWFBHUEFUSF07Ci0JUEdBbGlnbmVkWExvZ0Jsb2NrIHpidWZmZXI7CiAJ WExvZ1NlZ05vCWluc3RhbGxlZF9zZWdubzsKIAlYTG9nU2VnTm8JbWF4X3NlZ25vOwogCWludAkJ CWZkOwotCWludAkJCXNhdmVfZXJybm87CisJYm9vbAkJZm91bmQgPSBmYWxzZTsKIAogCVhMb2dG aWxlUGF0aChwYXRoLCBUaGlzVGltZUxpbmVJRCwgbG9nc2Vnbm8sIHdhbF9zZWdtZW50X3NpemUp OwogCkBAIC0zMzA5LDExNCArMzMxNiw0NCBAQCBYTG9nRmlsZUluaXQoWExvZ1NlZ05vIGxvZ3Nl Z25vLCBib29sICp1c2VfZXhpc3RlbnQsIGJvb2wgdXNlX2xvY2spCiAJfQogCiAJLyoKLQkgKiBJ bml0aWFsaXplIGFuIGVtcHR5IChhbGwgemVyb2VzKSBzZWdtZW50LiAgTk9URTogaXQgaXMgcG9z c2libGUgdGhhdAotCSAqIGFub3RoZXIgcHJvY2VzcyBpcyBkb2luZyB0aGUgc2FtZSB0aGluZy4g IElmIHNvLCB3ZSB3aWxsIGVuZCB1cAotCSAqIHByZS1jcmVhdGluZyBhbiBleHRyYSBsb2cgc2Vn bWVudC4gIFRoYXQgc2VlbXMgT0ssIGFuZCBiZXR0ZXIgdGhhbgotCSAqIGhvbGRpbmcgdGhlIGxv Y2sgdGhyb3VnaG91dCB0aGlzIGxlbmd0aHkgcHJvY2Vzcy4KKwkgKiBUcnkgdG8gdXNlIGEgcHJl LWFsbG9jYXRlZCBzZWdtZW50LCBpZiBvbmUgZXhpc3RzLiAgSWYgbm9uZSBhcmUKKwkgKiBhdmFp bGFibGUsIHdlIGZhbGwgYmFjayB0byBjcmVhdGluZyBhIG5ldyBzZWdtZW50IG9uIG91ciBvd24u CisJICoKKwkgKiBOb3RlIHRoYXQgd2Ugc3RpbGwgbG9vayBmb3IgYSBwcmUtYWxsb2NhdGVkIHNl Z21lbnQgZXZlbiBpZiB0aGUgcHJlLQorCSAqIGFsbG9jYXRpb24gZnVuY3Rpb25hbGl0eSBpcyBk aXNhYmxlZCB2aWEgdGhlIEdVQ3MuICBUaGlzIGVuc3VyZXMgdGhhdCBhbnkKKwkgKiBwcmUtYWxs b2NhdGVkIHNlZ21lbnRzIGxlZnQgb3ZlciBhZnRlciB0dXJuaW5nIG9mZiB0aGUgcHJlLWFsbG9j YXRpb24KKwkgKiBmdW5jdGlvbmFsaXR5IGFyZSBldmVudHVhbGx5IHVzZWQgdXAuCiAJICovCi0J ZWxvZyhERUJVRzIsICJjcmVhdGluZyBhbmQgZmlsbGluZyBuZXcgV0FMIGZpbGUiKTsKLQotCXNu cHJpbnRmKHRtcHBhdGgsIE1BWFBHUEFUSCwgWExPR0RJUiAiL3hsb2d0ZW1wLiVkIiwgKGludCkg Z2V0cGlkKCkpOwotCi0JdW5saW5rKHRtcHBhdGgpOwotCi0JLyogZG8gbm90IHVzZSBnZXRfc3lu Y19iaXQoKSBoZXJlIC0tLSB3YW50IHRvIGZzeW5jIG9ubHkgYXQgZW5kIG9mIGZpbGwgKi8KLQlm ZCA9IEJhc2ljT3BlbkZpbGUodG1wcGF0aCwgT19SRFdSIHwgT19DUkVBVCB8IE9fRVhDTCB8IFBH X0JJTkFSWSk7Ci0JaWYgKGZkIDwgMCkKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZV9m b3JfZmlsZV9hY2Nlc3MoKSwKLQkJCQkgZXJybXNnKCJjb3VsZCBub3QgY3JlYXRlIGZpbGUgXCIl c1wiOiAlbSIsIHRtcHBhdGgpKSk7Ci0KLQltZW1zZXQoemJ1ZmZlci5kYXRhLCAwLCBYTE9HX0JM Q0tTWik7Ci0KLQlwZ3N0YXRfcmVwb3J0X3dhaXRfc3RhcnQoV0FJVF9FVkVOVF9XQUxfSU5JVF9X UklURSk7Ci0Jc2F2ZV9lcnJubyA9IDA7Ci0JaWYgKHdhbF9pbml0X3plcm8pCisJTFdMb2NrQWNx dWlyZShXQUxQcmVhbGxvY2F0aW9uTG9jaywgTFdfRVhDTFVTSVZFKTsKKwlpZiAoWExvZ0N0bC0+ bnVtX3ByZWFsbG9jX3NlZ3MgPiAwKQogCXsKLQkJc3RydWN0IGlvdmVjIGlvdltQR19JT1ZfTUFY XTsKLQkJaW50CQkJYmxvY2tzOwotCi0JCS8qCi0JCSAqIFplcm8tZmlsbCB0aGUgZmlsZS4gIFdp dGggdGhpcyBzZXR0aW5nLCB3ZSBkbyB0aGlzIHRoZSBoYXJkIHdheSB0bwotCQkgKiBlbnN1cmUg dGhhdCBhbGwgdGhlIGZpbGUgc3BhY2UgaGFzIHJlYWxseSBiZWVuIGFsbG9jYXRlZC4gIE9uCi0J CSAqIHBsYXRmb3JtcyB0aGF0IGFsbG93ICJob2xlcyIgaW4gZmlsZXMsIGp1c3Qgc2Vla2luZyB0 byB0aGUgZW5kCi0JCSAqIGRvZXNuJ3QgYWxsb2NhdGUgaW50ZXJtZWRpYXRlIHNwYWNlLiAgVGhp cyB3YXksIHdlIGtub3cgdGhhdCB3ZQotCQkgKiBoYXZlIGFsbCB0aGUgc3BhY2UgYW5kIChhZnRl ciB0aGUgZnN5bmMgYmVsb3cpIHRoYXQgYWxsIHRoZQotCQkgKiBpbmRpcmVjdCBibG9ja3MgYXJl IGRvd24gb24gZGlzay4gIFRoZXJlZm9yZSwgZmRhdGFzeW5jKDIpIG9yCi0JCSAqIE9fRFNZTkMg d2lsbCBiZSBzdWZmaWNpZW50IHRvIHN5bmMgZnV0dXJlIHdyaXRlcyB0byB0aGUgbG9nIGZpbGUu Ci0JCSAqLwotCi0JCS8qIFByZXBhcmUgdG8gd3JpdGUgb3V0IGEgbG90IG9mIGNvcGllcyBvZiBv dXIgemVybyBidWZmZXIgYXQgb25jZS4gKi8KLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGhv Zihpb3YpOyArK2kpCi0JCXsKLQkJCWlvdltpXS5pb3ZfYmFzZSA9IHpidWZmZXIuZGF0YTsKLQkJ CWlvdltpXS5pb3ZfbGVuID0gWExPR19CTENLU1o7Ci0JCX0KLQotCQkvKiBMb29wLCB3cml0aW5n IGFzIG1hbnkgYmxvY2tzIGFzIHdlIGNhbiBmb3IgZWFjaCBzeXN0ZW0gY2FsbC4gKi8KLQkJYmxv Y2tzID0gd2FsX3NlZ21lbnRfc2l6ZSAvIFhMT0dfQkxDS1NaOwotCQlmb3IgKGludCBpID0gMDsg aSA8IGJsb2NrczspCi0JCXsKLQkJCWludAkJCWlvdmNudCA9IE1pbihibG9ja3MgLSBpLCBsZW5n dGhvZihpb3YpKTsKLQkJCW9mZl90CQlvZmZzZXQgPSBpICogWExPR19CTENLU1o7Ci0KLQkJCWlm IChwZ19wd3JpdGV2X3dpdGhfcmV0cnkoZmQsIGlvdiwgaW92Y250LCBvZmZzZXQpIDwgMCkKLQkJ CXsKLQkJCQlzYXZlX2Vycm5vID0gZXJybm87Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCWVsb2coREVC VUcyLCAidXNpbmcgcHJlLWFsbG9jYXRlZCBXQUwgZmlsZSIpOwogCi0JCQlpICs9IGlvdmNudDsK LQkJfQorCQlmb3VuZCA9IHRydWU7CisJCVhMb2dDdGwtPm51bV9wcmVhbGxvY19zZWdzLS07CisJ CXNucHJpbnRmKHRtcHBhdGgsIE1BWFBHUEFUSCwgIiVzL3ByZWFsbG9jYXRlZF9zZWdtZW50cy94 bG9ndGVtcC4lZCIsCisJCQkJIFhMT0dESVIsIFhMb2dDdGwtPm51bV9wcmVhbGxvY19zZWdzKTsK IAl9Ci0JZWxzZQorCisJaWYgKCFmb3VuZCkKIAl7CiAJCS8qCi0JCSAqIE90aGVyd2lzZSwgc2Vl a2luZyB0byB0aGUgZW5kIGFuZCB3cml0aW5nIGEgc29saXRhcnkgYnl0ZSBpcwotCQkgKiBlbm91 Z2guCisJCSAqIFdlJ3JlIG5vdCB1c2luZyBhIHByZS1hbGxvY2F0ZWQgc2VnbWVudCwgc28gdGhl cmUncyBubyBuZWVkIHRvIGtlZXAKKwkJICogaG9sZGluZyB0aGUgV0FMUHJlYWxsb2NhdGlvbkxv Y2suCiAJCSAqLwotCQllcnJubyA9IDA7Ci0JCWlmIChwZ19wd3JpdGUoZmQsIHpidWZmZXIuZGF0 YSwgMSwgd2FsX3NlZ21lbnRfc2l6ZSAtIDEpICE9IDEpCi0JCXsKLQkJCS8qIGlmIHdyaXRlIGRp ZG4ndCBzZXQgZXJybm8sIGFzc3VtZSBubyBkaXNrIHNwYWNlICovCi0JCQlzYXZlX2Vycm5vID0g ZXJybm8gPyBlcnJubyA6IEVOT1NQQzsKLQkJfQotCX0KLQlwZ3N0YXRfcmVwb3J0X3dhaXRfZW5k KCk7CisJCUxXTG9ja1JlbGVhc2UoV0FMUHJlYWxsb2NhdGlvbkxvY2spOwogCi0JaWYgKHNhdmVf ZXJybm8pCi0JewogCQkvKgotCQkgKiBJZiB3ZSBmYWlsIHRvIG1ha2UgdGhlIGZpbGUsIGRlbGV0 ZSBpdCB0byByZWxlYXNlIGRpc2sgc3BhY2UKKwkJICogSW5pdGlhbGl6ZSBhbiBlbXB0eSAoYWxs IHplcm9lcykgc2VnbWVudC4gIE5PVEU6IGl0IGlzIHBvc3NpYmxlIHRoYXQKKwkJICogYW5vdGhl ciBwcm9jZXNzIGlzIGRvaW5nIHRoZSBzYW1lIHRoaW5nLiAgSWYgc28sIHdlIHdpbGwgZW5kIHVw CisJCSAqIHByZS1jcmVhdGluZyBhbiBleHRyYSBsb2cgc2VnbWVudC4gIFRoYXQgc2VlbXMgT0ss IGFuZCBiZXR0ZXIgdGhhbgorCQkgKiBob2xkaW5nIHRoZSBsb2NrIHRocm91Z2hvdXQgdGhpcyBs ZW5ndGh5IHByb2Nlc3MuCiAJCSAqLwotCQl1bmxpbmsodG1wcGF0aCk7Ci0KLQkJY2xvc2UoZmQp OworCQllbG9nKERFQlVHMiwgImNyZWF0aW5nIGFuZCBmaWxsaW5nIG5ldyBXQUwgZmlsZSIpOwog Ci0JCWVycm5vID0gc2F2ZV9lcnJubzsKLQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2Rl X2Zvcl9maWxlX2FjY2VzcygpLAotCQkJCSBlcnJtc2coImNvdWxkIG5vdCB3cml0ZSB0byBmaWxl IFwiJXNcIjogJW0iLCB0bXBwYXRoKSkpOwotCX0KLQotCXBnc3RhdF9yZXBvcnRfd2FpdF9zdGFy dChXQUlUX0VWRU5UX1dBTF9JTklUX1NZTkMpOwotCWlmIChwZ19mc3luYyhmZCkgIT0gMCkKLQl7 Ci0JCWludAkJCXNhdmVfZXJybm8gPSBlcnJubzsKLQotCQljbG9zZShmZCk7Ci0JCWVycm5vID0g c2F2ZV9lcnJubzsKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nl c3MoKSwKLQkJCQkgZXJybXNnKCJjb3VsZCBub3QgZnN5bmMgZmlsZSBcIiVzXCI6ICVtIiwgdG1w cGF0aCkpKTsKKwkJc25wcmludGYodG1wcGF0aCwgTUFYUEdQQVRILCBYTE9HRElSICIveGxvZ3Rl bXAuJWQiLCAoaW50KSBnZXRwaWQoKSk7CisJCUNyZWF0ZUVtcHR5V2FsU2VnbWVudCh0bXBwYXRo KTsKIAl9Ci0JcGdzdGF0X3JlcG9ydF93YWl0X2VuZCgpOwotCi0JaWYgKGNsb3NlKGZkKSAhPSAw KQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAotCQkJ CSBlcnJtc2coImNvdWxkIG5vdCBjbG9zZSBmaWxlIFwiJXNcIjogJW0iLCB0bXBwYXRoKSkpOwog CiAJLyoKIAkgKiBOb3cgbW92ZSB0aGUgc2VnbWVudCBpbnRvIHBsYWNlIHdpdGggaXRzIGZpbmFs IG5hbWUuCkBAIC0zNDUwLDYgKzMzODcsMjAgQEAgWExvZ0ZpbGVJbml0KFhMb2dTZWdObyBsb2dz ZWdubywgYm9vbCAqdXNlX2V4aXN0ZW50LCBib29sIHVzZV9sb2NrKQogCQl1bmxpbmsodG1wcGF0 aCk7CiAJfQogCisJLyoKKwkgKiBJZiB3ZSBhcmUgdXNpbmcgYSBwcmUtYWxsb2NhdGVkIHNlZ21l bnQsIHdlJ3ZlIGJlZW4gaG9sZGluZyBvbnRvIHRoZQorCSAqIFdBTFByZWFsbG9jYXRpb25Mb2Nr IGFsbCB0aGlzIHRpbWUgc28gdGhhdCB0aGUgV0FMIEFsbG9jYXRvciBwcm9jZXNzCisJICogY2Fu J3Qgb3ZlcndyaXRlIHRoZSBmaWxlIGJlZm9yZSB3ZSd2ZSBpbnN0YWxsZWQgaXQuCisJICoKKwkg KiBXaGlsZSB3ZSdyZSBhdCBpdCwgYWxzbyB0cnkgdG8gd2FrZSB1cCB0aGUgV0FMIGFsbG9jYXRv ciBlYXJseSBzbyB0aGF0IGl0CisJICogY2FuIGdldCBhIGp1bXAgc3RhcnQgb24gYWxsb2NhdGlu ZyBuZXcgc2VnbWVudHMgaWYgcG9zc2libGUuCisJICoKKwkgKiBYWFg6IENoZWNrIHRoYXQgdGhp cyB3b3JrcyBmb3IgYWxsIHRoZSBmYWlsdXJlIHNjZW5hcmlvcy4KKwkgKi8KKwlpZiAoZm91bmQp CisJCUxXTG9ja1JlbGVhc2UoV0FMUHJlYWxsb2NhdGlvbkxvY2spOworCVJlcXVlc3RXYWxQcmVh bGxvY2F0aW9uKCk7CisKIAkvKiBTZXQgZmxhZyB0byB0ZWxsIGNhbGxlciB0aGVyZSB3YXMgbm8g ZXhpc3RlbnQgZmlsZSAqLwogCSp1c2VfZXhpc3RlbnQgPSBmYWxzZTsKIApAQCAtMzQ2MCw3ICsz NDExLDcgQEAgWExvZ0ZpbGVJbml0KFhMb2dTZWdObyBsb2dzZWdubywgYm9vbCAqdXNlX2V4aXN0 ZW50LCBib29sIHVzZV9sb2NrKQogCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAogCQkJ CSBlcnJtc2coImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlbSIsIHBhdGgpKSk7CiAKLQll bG9nKERFQlVHMiwgImRvbmUgY3JlYXRpbmcgYW5kIGZpbGxpbmcgbmV3IFdBTCBmaWxlIik7CisJ ZWxvZyhERUJVRzIsICJkb25lIGluc3RhbGxpbmcgbmV3IFdBTCBmaWxlIik7CiAKIAlyZXR1cm4g ZmQ7CiB9CkBAIC00MjgwLDggKzQyMzEsOCBAQCBSZW1vdmVYbG9nRmlsZShjb25zdCBjaGFyICpz ZWduYW1lLCBYTG9nU2VnTm8gcmVjeWNsZVNlZ05vLAogfQogCiAvKgotICogVmVyaWZ5IHdoZXRo ZXIgcGdfd2FsIGFuZCBwZ193YWwvYXJjaGl2ZV9zdGF0dXMgZXhpc3QuCi0gKiBJZiB0aGUgbGF0 dGVyIGRvZXMgbm90IGV4aXN0LCByZWNyZWF0ZSBpdC4KKyAqIFZlcmlmeSB3aGV0aGVyIHBnX3dh bCwgcGdfd2FsL2FyY2hpdmVfc3RhdHVzIGFuZCBwZ193YWwvcHJlYWxsb2NhdGVkX3NlZ21lbnRz CisgKiBleGlzdC4gIElmIGVpdGhlciBvZiB0aGUgbGF0dGVyIHR3byBkbyBub3QgZXhpc3QsIHJl Y3JlYXRlIGl0LgogICoKICAqIEl0IGlzIG5vdCB0aGUgZ29hbCBvZiB0aGlzIGZ1bmN0aW9uIHRv IHZlcmlmeSB0aGUgY29udGVudHMgb2YgdGhlc2UKICAqIGRpcmVjdG9yaWVzLCBidXQgdG8gaGVs cCBpbiBjYXNlcyB3aGVyZSBzb21lb25lIGhhcyBwZXJmb3JtZWQgYSBjbHVzdGVyCkBAIC00MzI0 LDYgKzQyNzUsMjYgQEAgVmFsaWRhdGVYTE9HRGlyZWN0b3J5U3RydWN0dXJlKHZvaWQpCiAJCQkJ CShlcnJtc2coImNvdWxkIG5vdCBjcmVhdGUgbWlzc2luZyBkaXJlY3RvcnkgXCIlc1wiOiAlbSIs CiAJCQkJCQkJcGF0aCkpKTsKIAl9CisKKwkvKiBDaGVjayBmb3IgcHJlYWxsb2NhdGVkX3NlZ21l bnRzICovCisJc25wcmludGYocGF0aCwgTUFYUEdQQVRILCBYTE9HRElSICIvcHJlYWxsb2NhdGVk X3NlZ21lbnRzIik7CisJaWYgKHN0YXQocGF0aCwgJnN0YXRfYnVmKSA9PSAwKQorCXsKKwkJLyog Q2hlY2sgZm9yIHdlaXJkIGNhc2VzIHdoZXJlIGl0IGV4aXN0cyBidXQgaXNuJ3QgYSBkaXJlY3Rv cnkgKi8KKwkJaWYgKCFTX0lTRElSKHN0YXRfYnVmLnN0X21vZGUpKQorCQkJZXJlcG9ydChGQVRB TCwKKwkJCQkJKGVycm1zZygicmVxdWlyZWQgV0FMIGRpcmVjdG9yeSBcIiVzXCIgZG9lcyBub3Qg ZXhpc3QiLAorCQkJCQkJCXBhdGgpKSk7CisJfQorCWVsc2UKKwl7CisJCWVyZXBvcnQoTE9HLAor CQkJCShlcnJtc2coImNyZWF0aW5nIG1pc3NpbmcgV0FMIGRpcmVjdG9yeSBcIiVzXCIiLCBwYXRo KSkpOworCQlpZiAoTWFrZVBHRGlyZWN0b3J5KHBhdGgpIDwgMCkKKwkJCWVyZXBvcnQoRkFUQUws CisJCQkJCShlcnJtc2coImNvdWxkIG5vdCBjcmVhdGUgbWlzc2luZyBkaXJlY3RvcnkgXCIlc1wi OiAlbSIsCisJCQkJCQkJcGF0aCkpKTsKKwl9CiB9CiAKIC8qCkBAIC01MjMwLDYgKzUyMDEsOSBA QCBYTE9HU2htZW1Jbml0KHZvaWQpCiAJU3BpbkxvY2tJbml0KCZYTG9nQ3RsLT51bHNuX2xjayk7 CiAJSW5pdFNoYXJlZExhdGNoKCZYTG9nQ3RsLT5yZWNvdmVyeVdha2V1cExhdGNoKTsKIAlDb25k aXRpb25WYXJpYWJsZUluaXQoJlhMb2dDdGwtPnJlY292ZXJ5Tm90UGF1c2VkQ1YpOworCisJLyog cHJvdGVjdGVkIGJ5IFdBTFByZWFsbG9jYXRpb25Mb2NrICovCisJWExvZ0N0bC0+bnVtX3ByZWFs bG9jX3NlZ3MgPSAwOwogfQogCiAvKgpAQCAtMTI5MjksMyArMTI5MDMsNTUgQEAgWExvZ1JlcXVl c3RXYWxSZWNlaXZlclJlcGx5KHZvaWQpCiB7CiAJZG9SZXF1ZXN0V2FsUmVjZWl2ZXJSZXBseSA9 IHRydWU7CiB9CisKK2ludAorR2V0TnVtUHJlYWxsb2NhdGVkV2FsU2Vncyh2b2lkKQoreworCWlu dCByZXQ7CisKKwlMV0xvY2tBY3F1aXJlKFdBTFByZWFsbG9jYXRpb25Mb2NrLCBMV19TSEFSRUQp OworCXJldCA9IFhMb2dDdGwtPm51bV9wcmVhbGxvY19zZWdzOworCUxXTG9ja1JlbGVhc2UoV0FM UHJlYWxsb2NhdGlvbkxvY2spOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZAorU2V0TnVtUHJl YWxsb2NhdGVkV2FsU2VncyhpbnQgaSkKK3sKKwlMV0xvY2tBY3F1aXJlKFdBTFByZWFsbG9jYXRp b25Mb2NrLCBMV19FWENMVVNJVkUpOworCVhMb2dDdGwtPm51bV9wcmVhbGxvY19zZWdzID0gaTsK KwlMV0xvY2tSZWxlYXNlKFdBTFByZWFsbG9jYXRpb25Mb2NrKTsKK30KKworLyoKKyAqIEluc3Rh bGxQcmVhbGxvY2F0ZWRXYWxTZWcKKyAqCisgKiBSZW5hbWVzIHRoZSBmaWxlIGF0ICJwYXRoIiB0 byB0aGUgbmV4dCBvcGVuIHByZS1hbGxvY2F0ZWQgc2VnbWVudCBzbG90IGFuZAorICogYnVtcHMg dXAgWExvZ0N0bC0+bnVtX3ByZWFsbG9jX3NlZ3MuCisgKi8KK3ZvaWQKK0luc3RhbGxQcmVhbGxv Y2F0ZWRXYWxTZWcoY29uc3QgY2hhciAqcGF0aCkKK3sKKwljaGFyCW5ld3BhdGhbTUFYUEdQQVRI XTsKKworCUxXTG9ja0FjcXVpcmUoV0FMUHJlYWxsb2NhdGlvbkxvY2ssIExXX0VYQ0xVU0lWRSk7 CisKKwlzbnByaW50ZihuZXdwYXRoLCBNQVhQR1BBVEgsICIlcy9wcmVhbGxvY2F0ZWRfc2VnbWVu dHMveGxvZ3RlbXAuJWQiLAorCQkJIFhMT0dESVIsIFhMb2dDdGwtPm51bV9wcmVhbGxvY19zZWdz KTsKKwkodm9pZCkgZHVyYWJsZV9yZW5hbWUocGF0aCwgbmV3cGF0aCwgRVJST1IpOworCVhMb2dD dGwtPm51bV9wcmVhbGxvY19zZWdzKys7CisKKwlMV0xvY2tSZWxlYXNlKFdBTFByZWFsbG9jYXRp b25Mb2NrKTsKK30KKworLyoKKyAqIFJlcXVlc3QgdGhhdCB0aGUgV0FMIGFsbG9jYXRvciB3YWtl IHVwIGVhcmx5LgorICovCit2b2lkCitSZXF1ZXN0V2FsUHJlYWxsb2NhdGlvbih2b2lkKQorewor CWlmIChQcm9jR2xvYmFsLT53YWxBbGxvY2F0b3JMYXRjaCAmJgorCQlXYWxQcmVhbGxvY2F0aW9u RW5hYmxlZCgpKQorCQlTZXRMYXRjaChQcm9jR2xvYmFsLT53YWxBbGxvY2F0b3JMYXRjaCk7Cit9 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ib290c3RyYXAvYm9vdHN0cmFwLmMgYi9zcmMvYmFj a2VuZC9ib290c3RyYXAvYm9vdHN0cmFwLmMKaW5kZXggOTRhYjVjYTA5NS4uNTYxMzIzMzdiMCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jCisrKyBiL3NyYy9i YWNrZW5kL2Jvb3RzdHJhcC9ib290c3RyYXAuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUg InBnc3RhdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYmd3cml0ZXIuaCIKICNpbmNsdWRlICJw b3N0bWFzdGVyL3N0YXJ0dXAuaCIKKyNpbmNsdWRlICJwb3N0bWFzdGVyL3dhbF9hbGxvY2F0b3Iu aCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL3dhbHdyaXRlci5oIgogI2luY2x1ZGUgInJlcGxpY2F0 aW9uL3dhbHJlY2VpdmVyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKQEAgLTMzMyw2 ICszMzQsOSBAQCBBdXhpbGlhcnlQcm9jZXNzTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQog CQljYXNlIFdhbFJlY2VpdmVyUHJvY2VzczoKIAkJCU15QmFja2VuZFR5cGUgPSBCX1dBTF9SRUNF SVZFUjsKIAkJCWJyZWFrOworCQljYXNlIFdhbEFsbG9jYXRvclByb2Nlc3M6CisJCQlNeUJhY2tl bmRUeXBlID0gQl9XQUxfQUxMT0NBVE9SOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlNeUJh Y2tlbmRUeXBlID0gQl9JTlZBTElEOwogCX0KQEAgLTQ2OCw2ICs0NzIsMTAgQEAgQXV4aWxpYXJ5 UHJvY2Vzc01haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCVdhbFJlY2VpdmVyTWFpbigp OwogCQkJcHJvY19leGl0KDEpOwogCisJCWNhc2UgV2FsQWxsb2NhdG9yUHJvY2VzczoKKwkJCVdh bEFsbG9jYXRvck1haW4oKTsKKwkJCXByb2NfZXhpdCgxKTsKKwogCQlkZWZhdWx0OgogCQkJZWxv ZyhQQU5JQywgInVucmVjb2duaXplZCBwcm9jZXNzIHR5cGU6ICVkIiwgKGludCkgTXlBdXhQcm9j VHlwZSk7CiAJCQlwcm9jX2V4aXQoMSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFz dGVyL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9NYWtlZmlsZQppbmRleCBiZmRm NmE4MzNkLi40YmFjMWU2NDBmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL01h a2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvTWFrZWZpbGUKQEAgLTI0LDYgKzI0 LDcgQEAgT0JKUyA9IFwKIAlwb3N0bWFzdGVyLm8gXAogCXN0YXJ0dXAubyBcCiAJc3lzbG9nZ2Vy Lm8gXAorCXdhbF9hbGxvY2F0b3IubyBcCiAJd2Fsd3JpdGVyLm8KIAogaW5jbHVkZSAkKHRvcF9z cmNkaXIpL3NyYy9iYWNrZW5kL2NvbW1vbi5tawpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9wb3N0bWFzdGVyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIu YwppbmRleCA1YTA1MDg5OGZlLi5kNjdkZTRiNGE5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3Rt YXN0ZXIuYwpAQCAtMjUxLDYgKzI1MSw3IEBAIHN0YXRpYyBwaWRfdCBTdGFydHVwUElEID0gMCwK IAkJCUNoZWNrcG9pbnRlclBJRCA9IDAsCiAJCQlXYWxXcml0ZXJQSUQgPSAwLAogCQkJV2FsUmVj ZWl2ZXJQSUQgPSAwLAorCQkJV2FsQWxsb2NhdG9yUElEID0gMCwKIAkJCUF1dG9WYWNQSUQgPSAw LAogCQkJUGdBcmNoUElEID0gMCwKIAkJCVBnU3RhdFBJRCA9IDAsCkBAIC01NTcsNiArNTU4LDcg QEAgc3RhdGljIHZvaWQgU2htZW1CYWNrZW5kQXJyYXlSZW1vdmUoQmFja2VuZCAqYm4pOwogI2Rl ZmluZSBTdGFydENoZWNrcG9pbnRlcigpCQlTdGFydENoaWxkUHJvY2VzcyhDaGVja3BvaW50ZXJQ cm9jZXNzKQogI2RlZmluZSBTdGFydFdhbFdyaXRlcigpCQlTdGFydENoaWxkUHJvY2VzcyhXYWxX cml0ZXJQcm9jZXNzKQogI2RlZmluZSBTdGFydFdhbFJlY2VpdmVyKCkJCVN0YXJ0Q2hpbGRQcm9j ZXNzKFdhbFJlY2VpdmVyUHJvY2VzcykKKyNkZWZpbmUgU3RhcnRXYWxBbGxvY2F0b3IoKQkJU3Rh cnRDaGlsZFByb2Nlc3MoV2FsQWxsb2NhdG9yUHJvY2VzcykKIAogLyogTWFjcm9zIHRvIGNoZWNr IGV4aXQgc3RhdHVzIG9mIGEgY2hpbGQgcHJvY2VzcyAqLwogI2RlZmluZSBFWElUX1NUQVRVU18w KHN0KSAgKChzdCkgPT0gMCkKQEAgLTE3ODEsNiArMTc4MywxMiBAQCBTZXJ2ZXJMb29wKHZvaWQp CiAJCWlmIChXYWxXcml0ZXJQSUQgPT0gMCAmJiBwbVN0YXRlID09IFBNX1JVTikKIAkJCVdhbFdy aXRlclBJRCA9IFN0YXJ0V2FsV3JpdGVyKCk7CiAKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSBsb3N0 IHRoZSBXQUwgYWxsb2NhdG9yIHByb2Nlc3MsIHRyeSB0byBzdGFydCBhIG5ldyBvbmUuCisJCSAq LworCQlpZiAoV2FsQWxsb2NhdG9yUElEID09IDAgJiYgcG1TdGF0ZSA9PSBQTV9SVU4pCisJCQlX YWxBbGxvY2F0b3JQSUQgPSBTdGFydFdhbEFsbG9jYXRvcigpOworCiAJCS8qCiAJCSAqIElmIHdl IGhhdmUgbG9zdCB0aGUgYXV0b3ZhY3V1bSBsYXVuY2hlciwgdHJ5IHRvIHN0YXJ0IGEgbmV3IG9u ZS4gV2UKIAkJICogZG9uJ3Qgd2FudCBhdXRvdmFjdXVtIHRvIHJ1biBpbiBiaW5hcnkgdXBncmFk ZSBtb2RlIGJlY2F1c2UKQEAgLTI2OTYsNiArMjcwNCw4IEBAIFNJR0hVUF9oYW5kbGVyKFNJR05B TF9BUkdTKQogCQkJc2lnbmFsX2NoaWxkKFdhbFdyaXRlclBJRCwgU0lHSFVQKTsKIAkJaWYgKFdh bFJlY2VpdmVyUElEICE9IDApCiAJCQlzaWduYWxfY2hpbGQoV2FsUmVjZWl2ZXJQSUQsIFNJR0hV UCk7CisJCWlmIChXYWxBbGxvY2F0b3JQSUQgIT0gMCkKKwkJCXNpZ25hbF9jaGlsZChXYWxBbGxv Y2F0b3JQSUQsIFNJR0hVUCk7CiAJCWlmIChBdXRvVmFjUElEICE9IDApCiAJCQlzaWduYWxfY2hp bGQoQXV0b1ZhY1BJRCwgU0lHSFVQKTsKIAkJaWYgKFBnQXJjaFBJRCAhPSAwKQpAQCAtMzAyMyw2 ICszMDMzLDggQEAgcmVhcGVyKFNJR05BTF9BUkdTKQogCQkJCUJnV3JpdGVyUElEID0gU3RhcnRC YWNrZ3JvdW5kV3JpdGVyKCk7CiAJCQlpZiAoV2FsV3JpdGVyUElEID09IDApCiAJCQkJV2FsV3Jp dGVyUElEID0gU3RhcnRXYWxXcml0ZXIoKTsKKwkJCWlmIChXYWxBbGxvY2F0b3JQSUQgPT0gMCkK KwkJCQlXYWxBbGxvY2F0b3JQSUQgPSBTdGFydFdhbEFsbG9jYXRvcigpOwogCiAJCQkvKgogCQkJ ICogTGlrZXdpc2UsIHN0YXJ0IG90aGVyIHNwZWNpYWwgY2hpbGRyZW4gYXMgbmVlZGVkLiAgSW4g YSByZXN0YXJ0CkBAIC0zMTUwLDYgKzMxNjIsMjAgQEAgcmVhcGVyKFNJR05BTF9BUkdTKQogCQkJ Y29udGludWU7CiAJCX0KIAorCQkvKgorCQkgKiBXYXMgaXQgdGhlIFdBTCBhbGxvY2F0b3I/ICBO b3JtYWwgZXhpdCBjYW4gYmUgaWdub3JlZDsgd2UnbGwgc3RhcnQgYQorCQkgKiBuZXcgb25lIGF0 IHRoZSBuZXh0IGl0ZXJhdGlvbiBvZiB0aGUgcG9zdG1hc3RlcidzIG1haW4gbG9vcCwgaWYKKwkJ ICogbmVjZXNzYXJ5LiAgQW55IG90aGVyIGV4aXQgY29uZGl0aW9uIGlzIHRyZWF0ZWQgYXMgYSBj cmFzaC4KKwkJICovCisJCWlmIChwaWQgPT0gV2FsQWxsb2NhdG9yUElEKQorCQl7CisJCQlXYWxB bGxvY2F0b3JQSUQgPSAwOworCQkJaWYgKCFFWElUX1NUQVRVU18wKGV4aXRzdGF0dXMpKQorCQkJ CUhhbmRsZUNoaWxkQ3Jhc2gocGlkLCBleGl0c3RhdHVzLAorCQkJCQkJCQkgXygiV0FMIEFsbG9j YXRvciBwcm9jZXNzIikpOworCQkJY29udGludWU7CisJCX0KKwogCQkvKgogCQkgKiBXYXMgaXQg dGhlIGF1dG92YWN1dW0gbGF1bmNoZXI/CU5vcm1hbCBleGl0IGNhbiBiZSBpZ25vcmVkOyB3ZSds bAogCQkgKiBzdGFydCBhIG5ldyBvbmUgYXQgdGhlIG5leHQgaXRlcmF0aW9uIG9mIHRoZSBwb3N0 bWFzdGVyJ3MgbWFpbgpAQCAtMzYyMyw2ICszNjQ5LDE4IEBAIEhhbmRsZUNoaWxkQ3Jhc2goaW50 IHBpZCwgaW50IGV4aXRzdGF0dXMsIGNvbnN0IGNoYXIgKnByb2NuYW1lKQogCQlzaWduYWxfY2hp bGQoV2FsUmVjZWl2ZXJQSUQsIChTZW5kU3RvcCA/IFNJR1NUT1AgOiBTSUdRVUlUKSk7CiAJfQog CisJLyogVGFrZSBjYXJlIG9mIHRoZSBXQUwgYWxsb2NhdG9yIHRvbyAqLworCWlmIChwaWQgPT0g V2FsQWxsb2NhdG9yUElEKQorCQlXYWxBbGxvY2F0b3JQSUQgPSAwOworCWVsc2UgaWYgKFdhbEFs bG9jYXRvclBJRCAhPSAwICYmIHRha2VfYWN0aW9uKQorCXsKKwkJZXJlcG9ydChERUJVRzIsCisJ CQkJKGVycm1zZ19pbnRlcm5hbCgic2VuZGluZyAlcyB0byBwcm9jZXNzICVkIiwKKwkJCQkJCQkJ IChTZW5kU3RvcCA/ICJTSUdTVE9QIiA6ICJTSUdRVUlUIiksCisJCQkJCQkJCSAoaW50KSBXYWxB bGxvY2F0b3JQSUQpKSk7CisJCXNpZ25hbF9jaGlsZChXYWxBbGxvY2F0b3JQSUQsIChTZW5kU3Rv cCA/IFNJR1NUT1AgOiBTSUdRVUlUKSk7CisJfQorCiAJLyogVGFrZSBjYXJlIG9mIHRoZSBhdXRv dmFjdXVtIGxhdW5jaGVyIHRvbyAqLwogCWlmIChwaWQgPT0gQXV0b1ZhY1BJRCkKIAkJQXV0b1Zh Y1BJRCA9IDA7CkBAIC0zODEwLDYgKzM4NDgsOCBAQCBQb3N0bWFzdGVyU3RhdGVNYWNoaW5lKHZv aWQpCiAJCQlzaWduYWxfY2hpbGQoU3RhcnR1cFBJRCwgU0lHVEVSTSk7CiAJCWlmIChXYWxSZWNl aXZlclBJRCAhPSAwKQogCQkJc2lnbmFsX2NoaWxkKFdhbFJlY2VpdmVyUElELCBTSUdURVJNKTsK KwkJaWYgKFdhbEFsbG9jYXRvclBJRCAhPSAwKQorCQkJc2lnbmFsX2NoaWxkKFdhbEFsbG9jYXRv clBJRCwgU0lHVEVSTSk7CiAJCS8qIGNoZWNrcG9pbnRlciwgYXJjaGl2ZXIsIHN0YXRzLCBhbmQg c3lzbG9nZ2VyIG1heSBjb250aW51ZSBmb3Igbm93ICovCiAKIAkJLyogTm93IHRyYW5zaXRpb24g dG8gUE1fV0FJVF9CQUNLRU5EUyBzdGF0ZSB0byB3YWl0IGZvciB0aGVtIHRvIGRpZSAqLwpAQCAt Mzg0MCw2ICszODgwLDcgQEAgUG9zdG1hc3RlclN0YXRlTWFjaGluZSh2b2lkKQogCQkJKENoZWNr cG9pbnRlclBJRCA9PSAwIHx8CiAJCQkgKCFGYXRhbEVycm9yICYmIFNodXRkb3duIDwgSW1tZWRp YXRlU2h1dGRvd24pKSAmJgogCQkJV2FsV3JpdGVyUElEID09IDAgJiYKKwkJCVdhbEFsbG9jYXRv clBJRCA9PSAwICYmCiAJCQlBdXRvVmFjUElEID09IDApCiAJCXsKIAkJCWlmIChTaHV0ZG93biA+ PSBJbW1lZGlhdGVTaHV0ZG93biB8fCBGYXRhbEVycm9yKQpAQCAtMzkzMyw2ICszOTc0LDcgQEAg UG9zdG1hc3RlclN0YXRlTWFjaGluZSh2b2lkKQogCQkJQXNzZXJ0KEJnV3JpdGVyUElEID09IDAp OwogCQkJQXNzZXJ0KENoZWNrcG9pbnRlclBJRCA9PSAwKTsKIAkJCUFzc2VydChXYWxXcml0ZXJQ SUQgPT0gMCk7CisJCQlBc3NlcnQoV2FsQWxsb2NhdG9yUElEID09IDApOwogCQkJQXNzZXJ0KEF1 dG9WYWNQSUQgPT0gMCk7CiAJCQlBc3NlcnQoUGdBcmNoUElEID09IDApOwogCQkJLyogc3lzbG9n Z2VyIGlzIG5vdCBjb25zaWRlcmVkIGhlcmUgKi8KQEAgLTQxNDIsNiArNDE4NCw4IEBAIFRlcm1p bmF0ZUNoaWxkcmVuKGludCBzaWduYWwpCiAJCXNpZ25hbF9jaGlsZChXYWxXcml0ZXJQSUQsIHNp Z25hbCk7CiAJaWYgKFdhbFJlY2VpdmVyUElEICE9IDApCiAJCXNpZ25hbF9jaGlsZChXYWxSZWNl aXZlclBJRCwgc2lnbmFsKTsKKwlpZiAoV2FsQWxsb2NhdG9yUElEICE9IDApCisJCXNpZ25hbF9j aGlsZChXYWxBbGxvY2F0b3JQSUQsIHNpZ25hbCk7CiAJaWYgKEF1dG9WYWNQSUQgIT0gMCkKIAkJ c2lnbmFsX2NoaWxkKEF1dG9WYWNQSUQsIHNpZ25hbCk7CiAJaWYgKFBnQXJjaFBJRCAhPSAwKQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93YWxfYWxsb2NhdG9yLmMgYi9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL3dhbF9hbGxvY2F0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwLi4zOGNlYmY3OTUzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tl bmQvcG9zdG1hc3Rlci93YWxfYWxsb2NhdG9yLmMKQEAgLTAsMCArMSwzMTUgQEAKKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICoKKyAqIHdhbF9hbGxvY2F0b3IuYworICoKKyAqIFRoZSBXQUwgYWxsb2Nh dG9yIGlzIG5ldyBhcyBvZiBQb3N0Z3JlcyAxNS4gIEl0IGF0dGVtcHRzIHRvIGtlZXAgcmVndWxh cgorICogYmFja2VuZHMgZnJvbSBoYXZpbmcgdG8gYWxsb2NhdGUgbmV3IFdBTCBzZWdtZW50cy4g IEV2ZW4gd2hlbgorICogd2FsX3JlY3ljbGUgaXMgZW5hYmxlZCwgcHJlLWFsbG9jYXRpbmcgV0FM IHNlZ21lbnRzIGNhbiB5aWVsZAorICogc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaW1wcm92ZW1l bnRzIGluIGNlcnRhaW4gc2NlbmFyaW9zLiAgTm90ZSB0aGF0CisgKiByZWd1bGFyIGJhY2tlbmRz IGFyZSBzdGlsbCBlbXBvd2VyZWQgdG8gY3JlYXRlIG5ldyBXQUwgc2VnbWVudHMgaWYgdGhlCisg KiBXQUwgYWxsb2NhdG9yIGZhaWxzIHRvIGdlbmVyYXRlIGVub3VnaCBuZXcgc2VnbWVudHMuCisg KgorICogVGhlIFdBTCBhbGxvY2F0b3IgaXMgY29udHJvbGxlZCBieSBvbmUgcGFyYW1ldGVyOiB3 YWxfYWxsb2NhdG9yX21heF9zaXplLgorICogd2FsX2FsbG9jYXRvcl9tYXhfc2l6ZSBzcGVjaWZp ZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIFdBTCB0byBwcmUtCisgKiBhbGxvY2F0ZS4gIElmIHRo aXMgdmFsdWUgaXMgbm90IGRpdmlzaWJsZSBieSB0aGUgV0FMIHNlZ21lbnQgc2l6ZSwgZmV3ZXIK KyAqIFdBTCBzZWdtZW50cyB3aWxsIGJlIHByZS1hbGxvY2F0ZWQuCisgKgorICogVGhlIFdBTCBh bGxvY2F0b3IgaXMgc3RhcnRlZCBieSB0aGUgcG9zdG1hc3RlciBhcyBzb29uIGFzIHRoZSBzdGFy dHVwCisgKiBzdWJwcm9jZXNzIGZpbmlzaGVzLCBvciBhcyBzb29uIGFzIHJlY292ZXJ5IGJlZ2lu cyBpZiB3ZSBhcmUgZG9pbmcKKyAqIGFyY2hpdmUgcmVjb3ZlcnkuICBJdCByZW1haW5zIGFsaXZl IHVudGlsIHRoZSBwb3N0bWFzdGVyIGNvbW1hbmRzIGl0IHRvCisgKiB0ZXJtaW5hdGUuICBOb3Jt YWwgdGVybWluYXRpb24gaXMgYnkgU0lHVEVSTSwgd2hpY2ggaW5zdHJ1Y3RzIHRoZQorICogV0FM IGFsbG9jYXRvciB0byBleGl0KDApLiAgRW1lcmdlbmN5IHRlcm1pbmF0aW9uIGlzIGJ5IFNJR1FV SVQ7IGxpa2UgYW55CisgKiBiYWNrZW5kLCB0aGUgV0FMIGFsbG9jYXRvciB3aWxsIHNpbXBseSBh Ym9ydCBhbmQgZXhpdCBvbiBTSUdRVUlULgorICoKKyAqIElmIHRoZSBXQUwgYWxsb2NhdG9yIGV4 aXRzIHVuZXhwZWN0ZWRseSwgdGhlIHBvc3RtYXN0ZXIgdHJlYXRzIHRoYXQgdGhlCisgKiBzYW1l IGFzIGEgYmFja2VuZCBjcmFzaDogc2hhcmVkIG1lbW9yeSBtYXkgYmUgY29ycnVwdGVkLCBzbyBy ZW1haW5pbmcKKyAqIGJhY2tlbmRzIHNob3VsZCBiZSBraWxsZWQgYnkgU0lHUVVJVCBhbmQgdGhl biBhIHJlY292ZXJ5IGN5Y2xlIHN0YXJ0ZWQuCisgKgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdo dCAoYykgMTk5Ni0yMDIxLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoK KyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbF9h bGxvY2F0b3IuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdy ZXMuaCIKKworI2luY2x1ZGUgPHN5cy90aW1lLmg+CisKKyNpbmNsdWRlICJhY2Nlc3MveGxvZy5o IgorI2luY2x1ZGUgImFjY2Vzcy94bG9nX2ludGVybmFsLmgiCisjaW5jbHVkZSAibGlicHEvcHFz aWduYWwuaCIKKyNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJwb3N0bWFzdGVyL2ludGVy cnVwdC5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIvd2FsX2FsbG9jYXRvci5oIgorI2luY2x1ZGUg InN0b3JhZ2UvYnVmbWdyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9jb25kaXRpb25fdmFyaWFibGUu aCIKKyNpbmNsdWRlICJzdG9yYWdlL2ZkLmgiCisjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKKyNp bmNsdWRlICJzdG9yYWdlL2x3bG9jay5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgorI2lu Y2x1ZGUgInN0b3JhZ2UvcHJvY3NpZ25hbC5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIK KyNpbmNsdWRlICJzdG9yYWdlL3NtZ3IuaCIKKyNpbmNsdWRlICJ1dGlscy9ndWMuaCIKKyNpbmNs dWRlICJ1dGlscy9tZW11dGlscy5oIgorCisjZGVmaW5lIFdBTF9BTExPQ19USU1FT1VUX1MgKDYw KQorCisvKgorICogR1VDIHBhcmFtZXRlcnMKKyAqLworaW50CQkJd2FsX2FsbG9jX21heF9zaXpl X21iID0gNjQ7CisKK3N0YXRpYyB2b2lkIERvV2FsUHJlQWxsb2NhdGlvbih2b2lkKTsKK3N0YXRp YyB2b2lkIFNjYW5Gb3JFeGlzdGluZ1ByZWFsbG9jYXRlZFNlZ21lbnRzKHZvaWQpOworCisvKgor ICogTWFpbiBlbnRyeSBwb2ludCBmb3IgV0FMIGFsbG9jYXRvciBwcm9jZXNzCisgKgorICogVGhp cyBpcyBpbnZva2VkIGZyb20gQXV4aWxpYXJ5UHJvY2Vzc01haW4sIHdoaWNoIGhhcyBhbHJlYWR5 IGNyZWF0ZWQgdGhlCisgKiBiYXNpYyBleGVjdXRpb24gZW52aXJvbm1lbnQsIGJ1dCBub3QgZW5h YmxlZCBzaWduYWxzIHlldC4KKyAqLwordm9pZAorV2FsQWxsb2NhdG9yTWFpbih2b2lkKQorewor CXNpZ2ptcF9idWYJbG9jYWxfc2lnam1wX2J1ZjsKKwlNZW1vcnlDb250ZXh0IHdhbF9hbGxvY19j b250ZXh0OworCisJLyoKKwkgKiBQcm9wZXJseSBhY2NlcHQgb3IgaWdub3JlIHNpZ25hbHMgdGhh dCBtaWdodCBiZSBzZW50IHRvIHVzLgorCSAqLworCXBxc2lnbmFsKFNJR0hVUCwgU2lnbmFsSGFu ZGxlckZvckNvbmZpZ1JlbG9hZCk7CisJcHFzaWduYWwoU0lHSU5ULCBTSUdfSUdOKTsKKwlwcXNp Z25hbChTSUdURVJNLCBTaWduYWxIYW5kbGVyRm9yU2h1dGRvd25SZXF1ZXN0KTsKKwkvKiBTSUdR VUlUIGhhbmRsZXIgd2FzIGFscmVhZHkgc2V0IHVwIGJ5IEluaXRQb3N0bWFzdGVyQ2hpbGQgKi8K KwlwcXNpZ25hbChTSUdBTFJNLCBTSUdfSUdOKTsKKwlwcXNpZ25hbChTSUdQSVBFLCBTSUdfSUdO KTsKKwlwcXNpZ25hbChTSUdVU1IxLCBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxlcik7CisJcHFz aWduYWwoU0lHVVNSMiwgU0lHX0lHTik7CisKKwkvKgorCSAqIFJlc2V0IHNvbWUgc2lnbmFscyB0 aGF0IGFyZSBhY2NlcHRlZCBieSBwb3N0bWFzdGVyIGJ1dCBub3QgaGVyZQorCSAqLworCXBxc2ln bmFsKFNJR0NITEQsIFNJR19ERkwpOworCisJLyoKKwkgKiBDcmVhdGUgYSBtZW1vcnkgY29udGV4 dCB0aGF0IHdlIHdpbGwgZG8gYWxsIG91ciB3b3JrIGluLiAgV2UgZG8gdGhpcyBzbworCSAqIHRo YXQgd2UgY2FuIHJlc2V0IHRoZSBjb250ZXh0IGR1cmluZyBlcnJvciByZWNvdmVyeSBhbmQgdGhl cmVieSBhdm9pZAorCSAqIHBvc3NpYmxlIG1lbW9yeSBsZWFrcy4KKwkgKi8KKwl3YWxfYWxsb2Nf Y29udGV4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShUb3BNZW1vcnlDb250ZXh0LAorCQkJCQkJ CQkJCQkgICJXQUwgQWxsb2NhdG9yIiwKKwkJCQkJCQkJCQkJICBBTExPQ1NFVF9ERUZBVUxUX1NJ WkVTKTsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8od2FsX2FsbG9jX2NvbnRleHQpOworCisJLyoK KwkgKiBJZiBhbiBleGNlcHRpb24gaXMgZW5jb3VudGVyZWQsIHByb2Nlc3NpbmcgcmVzdW1lcyBo ZXJlLgorCSAqCisJICogWW91IG1pZ2h0IHdvbmRlciB3aHkgdGhpcyBpc24ndCBjb2RlZCBhcyBh biBpbmZpbml0ZSBsb29wIGFyb3VuZCBhCisJICogUEdfVFJZIGNvbnN0cnVjdC4gIFRoZSByZWFz b24gaXMgdGhhdCB0aGlzIGlzIHRoZSBib3R0b20gb2YgdGhlCisJICogZXhjZXB0aW9uIHN0YWNr LCBhbmQgc28gd2l0aCBQR19UUlkgdGhlcmUgd291bGQgYmUgbm8gZXhjZXB0aW9uIGhhbmRsZXIK KwkgKiBpbiBmb3JjZSBhdCBhbGwgZHVyaW5nIHRoZSBDQVRDSCBwYXJ0LiAgQnkgbGVhdmluZyB0 aGUgb3V0ZXJtb3N0IHNldGptcAorCSAqIGFsd2F5cyBhY3RpdmUsIHdlIGhhdmUgYXQgbGVhc3Qg c29tZSBjaGFuY2Ugb2YgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9yCisJICogZHVyaW5nIGVycm9y IHJlY292ZXJ5LiAgKElmIHdlIGdldCBpbnRvIGFuIGluZmluaXRlIGxvb3AgdGhlcmVieSwgaXQK KwkgKiB3aWxsIHNvb24gYmUgc3RvcHBlZCBieSBvdmVyZmxvdyBvZiBlbG9nLmMncyBpbnRlcm5h bCBzdGF0ZSBzdGFjay4pCisJICoKKwkgKiBOb3RlIHRoYXQgd2UgdXNlIHNpZ3NldGptcCguLi4s IDEpLCBzbyB0aGF0IHRoZSBwcmV2YWlsaW5nIHNpZ25hbCBtYXNrCisJICogKHRvIHdpdCwgQmxv Y2tTaWcpIHdpbGwgYmUgcmVzdG9yZWQgd2hlbiBsb25nam1wJ2luZyB0byBoZXJlLiAgVGh1cywK KwkgKiBzaWduYWxzIG90aGVyIHRoYW4gU0lHUVVJVCB3aWxsIGJlIGJsb2NrZWQgdW50aWwgd2Ug Y29tcGxldGUgZXJyb3IKKwkgKiByZWNvdmVyeS4gIEl0IG1pZ2h0IHNlZW0gdGhhdCB0aGlzIHBv bGljeSBtYWtlcyB0aGUgSE9MRF9JTlRFUlJVUFRTKCkKKwkgKiBjYWxsIHJlZHVuZGFudCwgYnV0 IGl0IGlzIG5vdCBzaW5jZSBJbnRlcnJ1cHRQZW5kaW5nIG1pZ2h0IGJlIHNldAorCSAqIGFscmVh ZHkuCisJICovCisJaWYgKHNpZ3NldGptcChsb2NhbF9zaWdqbXBfYnVmLCAxKSAhPSAwKQorCXsK KwkJLyogU2luY2Ugbm90IHVzaW5nIFBHX1RSWSwgbXVzdCByZXNldCBlcnJvciBzdGFjayBieSBo YW5kICovCisJCWVycm9yX2NvbnRleHRfc3RhY2sgPSBOVUxMOworCisJCS8qIFByZXZlbnQgaW50 ZXJydXB0cyB3aGlsZSBjbGVhbmluZyB1cCAqLworCQlIT0xEX0lOVEVSUlVQVFMoKTsKKworCQkv KiBSZXBvcnQgdGhlIGVycm9yIHRvIHRoZSBzZXJ2ZXIgbG9nICovCisJCUVtaXRFcnJvclJlcG9y dCgpOworCisJCS8qCisJCSAqIFRoZXNlIG9wZXJhdGlvbnMgYXJlIHJlYWxseSBqdXN0IGEgbWlu aW1hbCBzdWJzZXQgb2YKKwkJICogQWJvcnRUcmFuc2FjdGlvbigpLiAgV2UgZG9uJ3QgaGF2ZSB2 ZXJ5IG1hbnkgcmVzb3VyY2VzIHRvIHdvcnJ5CisJCSAqIGFib3V0LgorCQkgKi8KKwkJTFdMb2Nr UmVsZWFzZUFsbCgpOworCQlDb25kaXRpb25WYXJpYWJsZUNhbmNlbFNsZWVwKCk7CisJCXBnc3Rh dF9yZXBvcnRfd2FpdF9lbmQoKTsKKwkJQWJvcnRCdWZmZXJJTygpOworCQlVbmxvY2tCdWZmZXJz KCk7CisJCVJlbGVhc2VBdXhQcm9jZXNzUmVzb3VyY2VzKGZhbHNlKTsKKwkJQXRFT1hhY3RfQnVm ZmVycyhmYWxzZSk7CisJCUF0RU9YYWN0X1NNZ3IoKTsKKwkJQXRFT1hhY3RfRmlsZXMoZmFsc2Up OworCQlBdEVPWGFjdF9IYXNoVGFibGVzKGZhbHNlKTsKKworCQkvKgorCQkgKiBOb3cgcmV0dXJu IHRvIG5vcm1hbCB0b3AtbGV2ZWwgY29udGV4dCBhbmQgY2xlYXIgRXJyb3JDb250ZXh0IGZvcgor CQkgKiBuZXh0IHRpbWUuCisJCSAqLworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8od2FsX2FsbG9j X2NvbnRleHQpOworCQlGbHVzaEVycm9yU3RhdGUoKTsKKworCQkvKiBGbHVzaCBhbnkgbGVha2Vk IGRhdGEgaW4gdGhlIHRvcC1sZXZlbCBjb250ZXh0ICovCisJCU1lbW9yeUNvbnRleHRSZXNldEFu ZERlbGV0ZUNoaWxkcmVuKHdhbF9hbGxvY19jb250ZXh0KTsKKworCQkvKiBOb3cgd2UgY2FuIGFs bG93IGludGVycnVwdHMgYWdhaW4gKi8KKwkJUkVTVU1FX0lOVEVSUlVQVFMoKTsKKworCQkvKgor CQkgKiBTbGVlcCBhdCBsZWFzdCAxIHNlY29uZCBhZnRlciBhbnkgZXJyb3IuICBBIHdyaXRlIGVy cm9yIGlzIGxpa2VseQorCQkgKiB0byBiZSByZXBlYXRlZCwgYW5kIHdlIGRvbid0IHdhbnQgdG8g YmUgZmlsbGluZyB0aGUgZXJyb3IgbG9ncyBhcworCQkgKiBmYXN0IGFzIHdlIGNhbi4KKwkJICov CisJCXBnX3VzbGVlcCgxMDAwMDAwTCk7CisKKwkJLyoKKwkJICogQ2xvc2UgYWxsIG9wZW4gZmls ZXMgYWZ0ZXIgYW55IGVycm9yLiAgVGhpcyBpcyBoZWxwZnVsIG9uIFdpbmRvd3MsCisJCSAqIHdo ZXJlIGhvbGRpbmcgZGVsZXRlZCBmaWxlcyBvcGVuIGNhdXNlcyB2YXJpb3VzIHN0cmFuZ2UgZXJy b3JzLgorCQkgKiBJdCdzIG5vdCBjbGVhciB3ZSBuZWVkIGl0IGVsc2V3aGVyZSwgYnV0IHNob3Vs ZG4ndCBodXJ0LgorCQkgKi8KKwkJc21ncmNsb3NlYWxsKCk7CisKKwkJLyogUmVwb3J0IHdhaXQg ZW5kIGhlcmUsIHdoZW4gdGhlcmUgaXMgbm8gZnVydGhlciBwb3NzaWJpbGl0eSBvZiB3YWl0ICov CisJCXBnc3RhdF9yZXBvcnRfd2FpdF9lbmQoKTsKKwl9CisKKwkvKiBXZSBjYW4gbm93IGhhbmRs ZSBlcmVwb3J0KEVSUk9SKSAqLworCVBHX2V4Y2VwdGlvbl9zdGFjayA9ICZsb2NhbF9zaWdqbXBf YnVmOworCisJLyoKKwkgKiBVbmJsb2NrIHNpZ25hbHMgKHRoZXkgd2VyZSBibG9ja2VkIHdoZW4g dGhlIHBvc3RtYXN0ZXIgZm9ya2VkIHVzKQorCSAqLworCVBHX1NFVE1BU0soJlVuQmxvY2tTaWcp OworCisJLyoKKwkgKiBBZHZlcnRpc2Ugb3VyIGxhdGNoIHRoYXQgYmFja2VuZHMgY2FuIHVzZSB0 byB3YWtlIHVzIHVwIHdoaWxlIHdlJ3JlCisJICogc2xlZXBpbmcuCisJICovCisJUHJvY0dsb2Jh bC0+d2FsQWxsb2NhdG9yTGF0Y2ggPSAmTXlQcm9jLT5wcm9jTGF0Y2g7CisKKwkvKgorCSAqIEJl Zm9yZSB3ZSBnbyBpbnRvIHRoZSBtYWluIGxvb3AsIHNjYW4gdGhlIHByZS1hbGxvY2F0ZWQgc2Vn bWVudHMKKwkgKiBkaXJlY3RvcnkgYW5kIGxvb2sgZm9yIGFueXRoaW5nIHRoYXQgd2FzIGxlZnQg b3ZlciBmcm9tIHRoZSBsYXN0IHRpbWUuCisJICovCisJU2NhbkZvckV4aXN0aW5nUHJlYWxsb2Nh dGVkU2VnbWVudHMoKTsKKworCS8qCisJICogTG9vcCBmb3JldmVyCisJICovCisJZm9yICg7OykK Kwl7CisJCS8qIENsZWFyIGFueSBhbHJlYWR5LXBlbmRpbmcgd2FrZXVwcyAqLworCQlSZXNldExh dGNoKE15TGF0Y2gpOworCisJCUhhbmRsZU1haW5Mb29wSW50ZXJydXB0cygpOworCisJCURvV2Fs UHJlQWxsb2NhdGlvbigpOworCisJCS8qIFhYWDogU2VuZCBhY3Rpdml0eSBzdGF0aXN0aWNzIHRv IHRoZSBzdGF0cyBjb2xsZWN0b3IgKi8KKworCQkvKiBTbGVlcCB1bnRpbCB3ZSBhcmUgc2lnbmFs ZWQgb3IgV0FMX0FMTE9DX1RJTUVPVVRfUyBoYXMgZWxhcHNlZC4gKi8KKwkJKHZvaWQpIFdhaXRM YXRjaChNeUxhdGNoLAorCQkJCQkJIFdMX0xBVENIX1NFVCB8IFdMX1RJTUVPVVQgfCBXTF9FWElU X09OX1BNX0RFQVRILAorCQkJCQkJIFdBTF9BTExPQ19USU1FT1VUX1MgKiAxMDAwTCAvKiBjb252 ZXJ0IHRvIG1zICovLAorCQkJCQkJIFdBSVRfRVZFTlRfV0FMX0FMTE9DQVRPUl9NQUlOKTsKKwl9 CisKKwlwZ191bnJlYWNoYWJsZSgpOworfQorCisvKgorICogRG9XYWxQcmVBbGxvY2F0aW9uCisg KgorICogVHJpZXMgdG8gYWxsb2NhdGUgdXAgdG8gd2FsX2FsbG9jYXRvcl9tYXhfc2l6ZSB3b3J0 aCBvZiBXQUwuCisgKi8KK3N0YXRpYyB2b2lkCitEb1dhbFByZUFsbG9jYXRpb24odm9pZCkKK3sK KwlpbnQJCW1heF9wcmVhbGxvY19zZWdzOworCisJbWF4X3ByZWFsbG9jX3NlZ3MgPSB3YWxfYWxs b2NfbWF4X3NpemVfbWIgLyAod2FsX3NlZ21lbnRfc2l6ZSAvICgxMDI0ICogMTAyNCkpOworCisJ d2hpbGUgKCFTaHV0ZG93blJlcXVlc3RQZW5kaW5nICYmCisJCSAgIEdldE51bVByZWFsbG9jYXRl ZFdhbFNlZ3MoKSA8IG1heF9wcmVhbGxvY19zZWdzKQorCXsKKwkJY2hhciB0bXBwYXRoW01BWFBH UEFUSF07CisKKwkJc25wcmludGYodG1wcGF0aCwgTUFYUEdQQVRILCAiJXMvcHJlYWxsb2NhdGVk X3NlZ21lbnRzL3hsb2d0ZW1wIiwgWExPR0RJUik7CisJCUNyZWF0ZUVtcHR5V2FsU2VnbWVudCh0 bXBwYXRoKTsKKwkJSW5zdGFsbFByZWFsbG9jYXRlZFdhbFNlZyh0bXBwYXRoKTsKKwkJZWxvZyhE RUJVRzIsICJwcmUtYWxsb2NhdGVkIFdBTCBzZWdtZW50Iik7CisKKwkJaWYgKENvbmZpZ1JlbG9h ZFBlbmRpbmcpCisJCXsKKwkJCUNvbmZpZ1JlbG9hZFBlbmRpbmcgPSBmYWxzZTsKKwkJCVByb2Nl c3NDb25maWdGaWxlKFBHQ19TSUdIVVApOworCisJCQltYXhfcHJlYWxsb2Nfc2VncyA9IHdhbF9h bGxvY19tYXhfc2l6ZV9tYiAvICh3YWxfc2VnbWVudF9zaXplIC8gKDEwMjQgKiAxMDI0KSk7CisJ CX0KKwl9Cit9CisKKy8qCisgKiBTY2FuRm9yRXhpc3RpbmdQcmVhbGxvY2F0ZWRTZWdtZW50cwor ICoKKyAqIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMgdGhyb3VnaCBwZ193YWwvcHJlYWxsb2NhdGVk X3NlZ21lbnRzIGZvciBhbnkgc2VnbWVudHMKKyAqIHRoYXQgd2VyZSBsZWZ0IG92ZXIgZnJvbSBh IHByZXZpb3VzIFdBTCBhbGxvY2F0b3IgcHJvY2VzcyBhbmQgc2V0cyB0aGUKKyAqIHRyYWNraW5n IHZhcmlhYmxlIGluIHNoYXJlZCBtZW1vcnkgYWNjb3JkaW5nbHkuCisgKi8KK3N0YXRpYyB2b2lk CitTY2FuRm9yRXhpc3RpbmdQcmVhbGxvY2F0ZWRTZWdtZW50cyh2b2lkKQoreworCWludCBpID0g MDsKKworCS8qCisJICogZnN5bmMgdGhlIHByZWFsbG9jYXRlZF9zZWdtZW50cyBkaXJlY3Rvcnkg aW4gY2FzZSBhbnkgcmVuYW1lcyBoYXZlIHlldCB0bworCSAqIGJlIGZsdXNoZWQgdG8gZGlzay4g IFRoaXMgaXMgcHJvYmFibHkgbm90IHJlYWxseSBuZWNlc3NhcnksIGJ1dCBpdCBzZWVtcworCSAq IG5pY2UgdG8ga25vdyB0aGF0IGFsbCB0aGUgc2VnbWVudHMgd2UgZmluZCBhcmUgcmVhbGx5IHdo ZXJlIHdlIHRoaW5rIHRoZXkKKwkgKiBhcmUuCisJICovCisJZnN5bmNfZm5hbWVfZXh0KFhMT0dE SVIgIi9wcmVhbGxvY2F0ZWRfc2VnbWVudHMiLCB0cnVlLCBmYWxzZSwgRkFUQUwpOworCisJLyoK KwkgKiBHYXRoZXIgYWxsIHRoZSBwcmVhbGxvY2F0ZWQgc2VnbWVudHMgd2UgY2FuIGZpbmQuCisJ ICovCisJd2hpbGUgKHRydWUpCisJeworCQlGSUxFICpmZDsKKwkJY2hhciBwYXRoW01BWFBHUEFU SF07CisKKwkJc25wcmludGYocGF0aCwgTUFYUEdQQVRILCAiJXMvcHJlYWxsb2NhdGVkX3NlZ21l bnRzL3hsb2d0ZW1wLiVkIiwKKwkJCQkgWExPR0RJUiwgaSk7CisKKwkJZmQgPSBBbGxvY2F0ZUZp bGUocGF0aCwgInIiKTsKKwkJaWYgKGZkICE9IE5VTEwpCisJCXsKKwkJCUZyZWVGaWxlKGZkKTsK KwkJCWkrKzsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChlcnJubyAhPSBFTk9FTlQpCisJCQkJ ZXJlcG9ydChGQVRBTCwKKwkJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCQkJ IGVycm1zZygiY291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6ICVtIiwgcGF0aCkpKTsKKwkJCWJy ZWFrOworCQl9CisJfQorCisJU2V0TnVtUHJlYWxsb2NhdGVkV2FsU2VncyhpKTsKKwllbG9nKERF QlVHMiwgImZvdW5kICVkIHByZWFsbG9jYXRlZCBzZWdtZW50cyBkdXJpbmcgc3RhcnR1cCIsIGkp OworfQorCitib29sCitXYWxQcmVhbGxvY2F0aW9uRW5hYmxlZCh2b2lkKQoreworCXJldHVybiB3 YWxfYWxsb2NfbWF4X3NpemVfbWIgPj0gd2FsX3NlZ21lbnRfc2l6ZSAvICgxMDI0ICogMTAyNCk7 Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9iYXNlYmFja3VwLmMgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9iYXNlYmFja3VwLmMKaW5kZXggZTA5MTA4ZDBlYy4uYzlh OTFkYzkzOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vYmFzZWJhY2t1cC5j CisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2Jhc2ViYWNrdXAuYwpAQCAtMTM5OSwxMSAr MTM5OSwxMyBAQCBzZW5kRGlyKGNvbnN0IGNoYXIgKnBhdGgsIGludCBiYXNlcGF0aGxlbiwgYm9v bCBzaXplb25seSwgTGlzdCAqdGFibGVzcGFjZXMsCiAJCQlzaXplICs9IF90YXJXcml0ZURpcihw YXRoYnVmLCBiYXNlcGF0aGxlbiwgJnN0YXRidWYsIHNpemVvbmx5KTsKIAogCQkJLyoKLQkJCSAq IEFsc28gc2VuZCBhcmNoaXZlX3N0YXR1cyBkaXJlY3RvcnkgKGJ5IGhhY2tpc2hseSByZXVzaW5n Ci0JCQkgKiBzdGF0YnVmIGZyb20gYWJvdmUgLi4uKS4KKwkJCSAqIEFsc28gc2VuZCBhcmNoaXZl X3N0YXR1cyBhbmQgcHJlYWxsb2NhdGVkX3NlZ21lbnRzIChieSBoYWNraXNobHkKKwkJCSAqIHJl dXNpbmcgc3RhdGJ1ZiBmcm9tIGFib3ZlIC4uLikuCiAJCQkgKi8KIAkJCXNpemUgKz0gX3Rhcldy aXRlSGVhZGVyKCIuL3BnX3dhbC9hcmNoaXZlX3N0YXR1cyIsIE5VTEwsICZzdGF0YnVmLAogCQkJ CQkJCQkJc2l6ZW9ubHkpOworCQkJc2l6ZSArPSBfdGFyV3JpdGVIZWFkZXIoIi4vcGdfd2FsL3By ZWFsbG9jYXRlZF9zZWdtZW50cyIsIE5VTEwsCisJCQkJCQkJCQkmc3RhdGJ1Ziwgc2l6ZW9ubHkp OwogCiAJCQljb250aW51ZTsJCQkvKiBkb24ndCByZWN1cnNlIGludG8gcGdfd2FsICovCiAJCX0K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvZmlsZS9mZC5jIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9maWxlL2ZkLmMKaW5kZXggZThjZDdlZjA4OC4uNzA1YzM2MGEyNyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9maWxlL2ZkLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFn ZS9maWxlL2ZkLmMKQEAgLTc2LDYgKzc2LDcgQEAKICNpbmNsdWRlIDxzeXMvZmlsZS5oPgogI2lu Y2x1ZGUgPHN5cy9wYXJhbS5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lz L3RpbWUuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpZm5kZWYgV0lOMzIKICNpbmNsdWRl IDxzeXMvbW1hbi5oPgpAQCAtMzc3OSwzICszNzgwLDExNyBAQCBwZ19wd3JpdGV2X3dpdGhfcmV0 cnkoaW50IGZkLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlvdmNudCwgb2ZmX3Qgb2Zm c2V0KQogCiAJcmV0dXJuIHN1bTsKIH0KKworLyoKKyAqIENyZWF0ZUVtcHR5V2FsU2VnbWVudAor ICoKKyAqIENyZWF0ZSBhIG5ldyBmaWxlIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBuZXcgV0FMIHNl Z21lbnQuICBUaGUgY2FsbGVyIGlzCisgKiByZXNwb25zaWJsZSBmb3IgaW5zdGFsbGluZyB0aGUg bmV3IGZpbGUgaW4gcGdfd2FsLgorICovCit2b2lkCitDcmVhdGVFbXB0eVdhbFNlZ21lbnQoY29u c3QgY2hhciAqcGF0aCkKK3sKKwlQR0FsaWduZWRYTG9nQmxvY2sgemJ1ZmZlcjsKKwlpbnQJCQlm ZDsKKwlpbnQJCQlzYXZlX2Vycm5vOworCisJdW5saW5rKHBhdGgpOworCisJLyogZG8gbm90IHVz ZSBnZXRfc3luY19iaXQoKSBoZXJlIC0tLSB3YW50IHRvIGZzeW5jIG9ubHkgYXQgZW5kIG9mIGZp bGwgKi8KKwlmZCA9IEJhc2ljT3BlbkZpbGUocGF0aCwgT19SRFdSIHwgT19DUkVBVCB8IE9fRVhD TCB8IFBHX0JJTkFSWSk7CisJaWYgKGZkIDwgMCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJy Y29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3QgY3JlYXRlIGZp bGUgXCIlc1wiOiAlbSIsIHBhdGgpKSk7CisKKwltZW1zZXQoemJ1ZmZlci5kYXRhLCAwLCBYTE9H X0JMQ0tTWik7CisKKwlwZ3N0YXRfcmVwb3J0X3dhaXRfc3RhcnQoV0FJVF9FVkVOVF9XQUxfSU5J VF9XUklURSk7CisJc2F2ZV9lcnJubyA9IDA7CisJaWYgKHdhbF9pbml0X3plcm8pCisJeworCQlz dHJ1Y3QgaW92ZWMgaW92W1BHX0lPVl9NQVhdOworCQlpbnQJCQlibG9ja3M7CisKKwkJLyoKKwkJ ICogWmVyby1maWxsIHRoZSBmaWxlLiAgV2l0aCB0aGlzIHNldHRpbmcsIHdlIGRvIHRoaXMgdGhl IGhhcmQgd2F5IHRvCisJCSAqIGVuc3VyZSB0aGF0IGFsbCB0aGUgZmlsZSBzcGFjZSBoYXMgcmVh bGx5IGJlZW4gYWxsb2NhdGVkLiAgT24KKwkJICogcGxhdGZvcm1zIHRoYXQgYWxsb3cgImhvbGVz IiBpbiBmaWxlcywganVzdCBzZWVraW5nIHRvIHRoZSBlbmQKKwkJICogZG9lc24ndCBhbGxvY2F0 ZSBpbnRlcm1lZGlhdGUgc3BhY2UuICBUaGlzIHdheSwgd2Uga25vdyB0aGF0IHdlCisJCSAqIGhh dmUgYWxsIHRoZSBzcGFjZSBhbmQgKGFmdGVyIHRoZSBmc3luYyBiZWxvdykgdGhhdCBhbGwgdGhl CisJCSAqIGluZGlyZWN0IGJsb2NrcyBhcmUgZG93biBvbiBkaXNrLiAgVGhlcmVmb3JlLCBmZGF0 YXN5bmMoMikgb3IKKwkJICogT19EU1lOQyB3aWxsIGJlIHN1ZmZpY2llbnQgdG8gc3luYyBmdXR1 cmUgd3JpdGVzIHRvIHRoZSBsb2cgZmlsZS4KKwkJICovCisKKwkJLyogUHJlcGFyZSB0byB3cml0 ZSBvdXQgYSBsb3Qgb2YgY29waWVzIG9mIG91ciB6ZXJvIGJ1ZmZlciBhdCBvbmNlLiAqLworCQlm b3IgKGludCBpID0gMDsgaSA8IGxlbmd0aG9mKGlvdik7ICsraSkKKwkJeworCQkJaW92W2ldLmlv dl9iYXNlID0gemJ1ZmZlci5kYXRhOworCQkJaW92W2ldLmlvdl9sZW4gPSBYTE9HX0JMQ0tTWjsK KwkJfQorCisJCS8qIExvb3AsIHdyaXRpbmcgYXMgbWFueSBibG9ja3MgYXMgd2UgY2FuIGZvciBl YWNoIHN5c3RlbSBjYWxsLiAqLworCQlibG9ja3MgPSB3YWxfc2VnbWVudF9zaXplIC8gWExPR19C TENLU1o7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgYmxvY2tzOykKKwkJeworCQkJaW50CQkJaW92 Y250ID0gTWluKGJsb2NrcyAtIGksIGxlbmd0aG9mKGlvdikpOworCQkJb2ZmX3QJCW9mZnNldCA9 IGkgKiBYTE9HX0JMQ0tTWjsKKworCQkJaWYgKHBnX3B3cml0ZXZfd2l0aF9yZXRyeShmZCwgaW92 LCBpb3ZjbnQsIG9mZnNldCkgPCAwKQorCQkJeworCQkJCXNhdmVfZXJybm8gPSBlcnJubzsKKwkJ CQlicmVhazsKKwkJCX0KKworCQkJaSArPSBpb3ZjbnQ7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJ LyoKKwkJICogT3RoZXJ3aXNlLCBzZWVraW5nIHRvIHRoZSBlbmQgYW5kIHdyaXRpbmcgYSBzb2xp dGFyeSBieXRlIGlzCisJCSAqIGVub3VnaC4KKwkJICovCisJCWVycm5vID0gMDsKKwkJaWYgKHBn X3B3cml0ZShmZCwgemJ1ZmZlci5kYXRhLCAxLCB3YWxfc2VnbWVudF9zaXplIC0gMSkgIT0gMSkK KwkJeworCQkJLyogaWYgd3JpdGUgZGlkbid0IHNldCBlcnJubywgYXNzdW1lIG5vIGRpc2sgc3Bh Y2UgKi8KKwkJCXNhdmVfZXJybm8gPSBlcnJubyA/IGVycm5vIDogRU5PU1BDOworCQl9CisJfQor CXBnc3RhdF9yZXBvcnRfd2FpdF9lbmQoKTsKKworCWlmIChzYXZlX2Vycm5vKQorCXsKKwkJLyoK KwkJICogSWYgd2UgZmFpbCB0byBtYWtlIHRoZSBmaWxlLCBkZWxldGUgaXQgdG8gcmVsZWFzZSBk aXNrIHNwYWNlCisJCSAqLworCQl1bmxpbmsocGF0aCk7CisKKwkJY2xvc2UoZmQpOworCisJCWVy cm5vID0gc2F2ZV9lcnJubzsKKworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlX2Zvcl9m aWxlX2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCB3cml0ZSB0byBmaWxlIFwiJXNc IjogJW0iLCBwYXRoKSkpOworCX0KKworCXBnc3RhdF9yZXBvcnRfd2FpdF9zdGFydChXQUlUX0VW RU5UX1dBTF9JTklUX1NZTkMpOworCWlmIChwZ19mc3luYyhmZCkgIT0gMCkKKwl7CisJCWludAkJ CXNhdmVfZXJybm8gPSBlcnJubzsKKworCQljbG9zZShmZCk7CisJCWVycm5vID0gc2F2ZV9lcnJu bzsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJ CQkgZXJybXNnKCJjb3VsZCBub3QgZnN5bmMgZmlsZSBcIiVzXCI6ICVtIiwgcGF0aCkpKTsKKwl9 CisJcGdzdGF0X3JlcG9ydF93YWl0X2VuZCgpOworCisJaWYgKGNsb3NlKGZkKSAhPSAwKQorCQll cmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCSBlcnJt c2coImNvdWxkIG5vdCBjbG9zZSBmaWxlIFwiJXNcIjogJW0iLCBwYXRoKSkpOworfQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2x3bG9ja25hbWVzLnR4dCBiL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvbG1nci9sd2xvY2tuYW1lcy50eHQKaW5kZXggNmM3Y2Y2YzI5NS4uMjEyYmRh OGU3ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2x3bG9ja25hbWVzLnR4 dAorKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbHdsb2NrbmFtZXMudHh0CkBAIC01Mywz ICs1Myw0IEBAIFhhY3RUcnVuY2F0aW9uTG9jawkJCQkJNDQKICMgNDUgd2FzIFhhY3RUcnVuY2F0 aW9uTG9jayB1bnRpbCByZW1vdmFsIG9mIEJhY2tlbmRSYW5kb21Mb2NrCiBXcmFwTGltaXRzVmFj dXVtTG9jawkJCQk0NgogTm90aWZ5UXVldWVUYWlsTG9jawkJCQkJNDcKK1dBTFByZWFsbG9jYXRp b25Mb2NrCQkJCTQ4CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5j IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYwppbmRleCAyNTc1ZWExY2EwLi41NTVm NGVmNTNlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCisrKyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKQEAgLTE4MSw2ICsxODEsNyBAQCBJbml0 UHJvY0dsb2JhbCh2b2lkKQogCVByb2NHbG9iYWwtPnN0YXJ0dXBQcm9jUGlkID0gMDsKIAlQcm9j R2xvYmFsLT5zdGFydHVwQnVmZmVyUGluV2FpdEJ1ZklkID0gLTE7CiAJUHJvY0dsb2JhbC0+d2Fs d3JpdGVyTGF0Y2ggPSBOVUxMOworCVByb2NHbG9iYWwtPndhbEFsbG9jYXRvckxhdGNoID0gTlVM TDsKIAlQcm9jR2xvYmFsLT5jaGVja3BvaW50ZXJMYXRjaCA9IE5VTEw7CiAJcGdfYXRvbWljX2lu aXRfdTMyKCZQcm9jR2xvYmFsLT5wcm9jQXJyYXlHcm91cEZpcnN0LCBJTlZBTElEX1BHUFJPQ05P KTsKIAlwZ19hdG9taWNfaW5pdF91MzIoJlByb2NHbG9iYWwtPmNsb2dHcm91cEZpcnN0LCBJTlZB TElEX1BHUFJPQ05PKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dh aXRfZXZlbnQuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQuYwppbmRl eCA2YmFmNjc3NDBjLi5iYjU5OGI1MTU0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9h Y3Rpdml0eS93YWl0X2V2ZW50LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2Fp dF9ldmVudC5jCkBAIC0yNDgsNiArMjQ4LDkgQEAgcGdzdGF0X2dldF93YWl0X2FjdGl2aXR5KFdh aXRFdmVudEFjdGl2aXR5IHcpCiAJCWNhc2UgV0FJVF9FVkVOVF9XQUxfV1JJVEVSX01BSU46CiAJ CQlldmVudF9uYW1lID0gIldhbFdyaXRlck1haW4iOwogCQkJYnJlYWs7CisJCWNhc2UgV0FJVF9F VkVOVF9XQUxfQUxMT0NBVE9SX01BSU46CisJCQlldmVudF9uYW1lID0gIldhbEFsbG9jYXRvck1h aW4iOworCQkJYnJlYWs7CiAJCQkvKiBubyBkZWZhdWx0IGNhc2UsIHNvIHRoYXQgY29tcGlsZXIg d2lsbCB3YXJuICovCiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9pbml0L21p c2Npbml0LmMgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L21pc2Npbml0LmMKaW5kZXggOGI3Mzg1 MGQwZC4uYjY3MWRjNmZhYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNj aW5pdC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvbWlzY2luaXQuYwpAQCAtMjY4LDYg KzI2OCw5IEBAIEdldEJhY2tlbmRUeXBlRGVzYyhCYWNrZW5kVHlwZSBiYWNrZW5kVHlwZSkKIAkJ Y2FzZSBCX1dBTF9XUklURVI6CiAJCQliYWNrZW5kRGVzYyA9ICJ3YWx3cml0ZXIiOwogCQkJYnJl YWs7CisJCWNhc2UgQl9XQUxfQUxMT0NBVE9SOgorCQkJYmFja2VuZERlc2MgPSAid2FsIGFsbG9j YXRvciI7CisJCQlicmVhazsKIAkJY2FzZSBCX0FSQ0hJVkVSOgogCQkJYmFja2VuZERlc2MgPSAi YXJjaGl2ZXIiOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNj L2d1Yy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYwppbmRleCA2OGI2MmQ1MjNkLi41 ZTJkYmQ3YzU2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMKQEAgLTcyLDYgKzcyLDcgQEAKICNpbmNsdWRl ICJwb3N0bWFzdGVyL2Jnd3JpdGVyLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9wb3N0bWFzdGVy LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9zeXNsb2dnZXIuaCIKKyNpbmNsdWRlICJwb3N0bWFz dGVyL3dhbF9hbGxvY2F0b3IuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL3dhbHdyaXRlci5oIgog I2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWxsYXVuY2hlci5oIgogI2luY2x1ZGUgInJlcGxp Y2F0aW9uL3Jlb3JkZXJidWZmZXIuaCIKQEAgLTI4MDksNiArMjgxMCwxNyBAQCBzdGF0aWMgc3Ry dWN0IGNvbmZpZ19pbnQgQ29uZmlndXJlTmFtZXNJbnRbXSA9CiAJCU5VTEwsIE5VTEwsIE5VTEwK IAl9LAogCisJeworCQl7IndhbF9hbGxvY2F0b3JfbWF4X3NpemUiLCBQR0NfU0lHSFVQLCBXQUxf U0VUVElOR1MsCisJCQlnZXR0ZXh0X25vb3AoIlNldHMgdGhlIG1heGltdW0gYW1vdW50IG9mIFdB TCB0byBwcmUtYWxsb2NhdGUuIiksCisJCQlOVUxMLAorCQkJR1VDX1VOSVRfTUIKKwkJfSwKKwkJ JndhbF9hbGxvY19tYXhfc2l6ZV9tYiwKKwkJNjQsIDAsIDEwMjQwMCwKKwkJTlVMTCwgTlVMTCwg TlVMTAorCX0sCisKIAl7CiAJCXsid2FsX2J1ZmZlcnMiLCBQR0NfUE9TVE1BU1RFUiwgV0FMX1NF VFRJTkdTLAogCQkJZ2V0dGV4dF9ub29wKCJTZXRzIHRoZSBudW1iZXIgb2YgZGlzay1wYWdlIGJ1 ZmZlcnMgaW4gc2hhcmVkIG1lbW9yeSBmb3IgV0FMLiIpLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIGIvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCmluZGV4IGRkYmI2ZGMyYmUuLmExMjUwY2Y2N2Mg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBs ZQorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKQEAg LTIyMSw2ICsyMjEsNyBAQAogI3dhbF9jb21wcmVzc2lvbiA9IG9mZgkJCSMgZW5hYmxlIGNvbXBy ZXNzaW9uIG9mIGZ1bGwtcGFnZSB3cml0ZXMKICN3YWxfaW5pdF96ZXJvID0gb24JCQkjIHplcm8t ZmlsbCBuZXcgV0FMIGZpbGVzCiAjd2FsX3JlY3ljbGUgPSBvbgkJCSMgcmVjeWNsZSBXQUwgZmls ZXMKKyN3YWxfYWxsb2NhdG9yX21heF9zaXplID0gNjRNQgkJIyBhbW91bnQgb2YgV0FMIHRvIHBy ZS1hbGxvY2F0ZQogI3dhbF9idWZmZXJzID0gLTEJCQkjIG1pbiAzMmtCLCAtMSBzZXRzIGJhc2Vk IG9uIHNoYXJlZF9idWZmZXJzCiAJCQkJCSMgKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KQogI3dh bF93cml0ZXJfZGVsYXkgPSAyMDBtcwkJIyAxLTEwMDAwIG1pbGxpc2Vjb25kcwpkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9pbml0ZGIvaW5pdGRiLmMgYi9zcmMvYmluL2luaXRkYi9pbml0ZGIuYwppbmRl eCAxNTJkMjFlODhiLi5kMjRjOWNiYzM4IDEwMDY0NAotLS0gYS9zcmMvYmluL2luaXRkYi9pbml0 ZGIuYworKysgYi9zcmMvYmluL2luaXRkYi9pbml0ZGIuYwpAQCAtMjA1LDYgKzIwNSw3IEBAIHN0 YXRpYyBjb25zdCBjaGFyICpiYWNrZW5kX29wdGlvbnMgPSAiLS1zaW5nbGUgLUYgLU8gLWogLWMg c2VhcmNoX3BhdGg9cGdfY2F0YWxvCiBzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3ViZGlyc1td ID0gewogCSJnbG9iYWwiLAogCSJwZ193YWwvYXJjaGl2ZV9zdGF0dXMiLAorCSJwZ193YWwvcHJl YWxsb2NhdGVkX3NlZ21lbnRzIiwKIAkicGdfY29tbWl0X3RzIiwKIAkicGdfZHluc2htZW0iLAog CSJwZ19ub3RpZnkiLApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3BnX2Jhc2Vi YWNrdXAuYyBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9wZ19iYXNlYmFja3VwLmMKaW5kZXggMTZk ODkyOWIyMy4uYTgxZDkyZjhkZSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3Bn X2Jhc2ViYWNrdXAuYworKysgYi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvcGdfYmFzZWJhY2t1cC5j CkBAIC02NzgsNiArNjc4LDIyIEBAIFN0YXJ0TG9nU3RyZWFtZXIoY2hhciAqc3RhcnRwb3MsIHVp bnQzMiB0aW1lbGluZSwgY2hhciAqc3lzaWRlbnRpZmllcikKIAkJCXBnX2xvZ19lcnJvcigiY291 bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsIHN0YXR1c2Rpcik7CiAJCQlleGl0 KDEpOwogCQl9CisKKwkJLyoKKwkJICogQWxzbyBjcmVhdGUgcGdfd2FsL3ByZWFsbG9jYXRlZF9z ZWdtZW50cyBpZiBuZWNlc3NhcnkuCisJCSAqLworCQlpZiAoUFFzZXJ2ZXJWZXJzaW9uKGNvbm4p ID49IDE1MDAwMCkKKwkJeworCQkJY2hhciBwcmVhbGxvY19kaXJbTUFYUEdQQVRIXTsKKworCQkJ c25wcmludGYocHJlYWxsb2NfZGlyLCBzaXplb2YocHJlYWxsb2NfZGlyKSwgIiVzL3BnX3dhbC9w cmVhbGxvY2F0ZWRfc2VnbWVudHMiLAorCQkJCQkgYmFzZWRpcik7CisJCQlpZiAocGdfbWtkaXJf cChwcmVhbGxvY19kaXIsIHBnX2Rpcl9jcmVhdGVfbW9kZSkgIT0gMCAmJiBlcnJubyAhPSBFRVhJ U1QpCisJCQl7CisJCQkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBc IiVzXCI6ICVtIiwgcHJlYWxsb2NfZGlyKTsKKwkJCQlleGl0KDEpOworCQkJfQorCQl9CiAJfQog CiAJLyoKQEAgLTE2MTQsNyArMTYzMCw4IEBAIFJlY2VpdmVUYXJBbmRVbnBhY2tDb3B5Q2h1bmso c2l6ZV90IHIsIGNoYXIgKmNvcHlidWYsIHZvaWQgKmNhbGxiYWNrX2RhdGEpCiAJCQkJCSAqLwog CQkJCQlpZiAoISgocGdfc3RyX2VuZHN3aXRoKHN0YXRlLT5maWxlbmFtZSwgIi9wZ193YWwiKSB8 fAogCQkJCQkJICAgcGdfc3RyX2VuZHN3aXRoKHN0YXRlLT5maWxlbmFtZSwgIi9wZ194bG9nIikg fHwKLQkJCQkJCSAgIHBnX3N0cl9lbmRzd2l0aChzdGF0ZS0+ZmlsZW5hbWUsICIvYXJjaGl2ZV9z dGF0dXMiKSkgJiYKKwkJCQkJCSAgIHBnX3N0cl9lbmRzd2l0aChzdGF0ZS0+ZmlsZW5hbWUsICIv YXJjaGl2ZV9zdGF0dXMiKSB8fAorCQkJCQkJICAgcGdfc3RyX2VuZHN3aXRoKHN0YXRlLT5maWxl bmFtZSwgIi9wcmVhbGxvY2F0ZWRfc2VnbWVudHMiKSkgJiYKIAkJCQkJCSAgZXJybm8gPT0gRUVY SVNUKSkKIAkJCQkJewogCQkJCQkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3QgY3JlYXRlIGRpcmVj dG9yeSBcIiVzXCI6ICVtIiwKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC90LzAx MF9wZ19iYXNlYmFja3VwLnBsIGIvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3QvMDEwX3BnX2Jhc2Vi YWNrdXAucGwKaW5kZXggNzRmOGMyYzczOS4uNjFjZWRhMmM2ZSAxMDA2NDQKLS0tIGEvc3JjL2Jp bi9wZ19iYXNlYmFja3VwL3QvMDEwX3BnX2Jhc2ViYWNrdXAucGwKKysrIGIvc3JjL2Jpbi9wZ19i YXNlYmFja3VwL3QvMDEwX3BnX2Jhc2ViYWNrdXAucGwKQEAgLTEyMCwxMCArMTIwLDEwIEBAIFNL SVA6CiAJCSJjaGVjayBiYWNrdXAgZGlyIHBlcm1pc3Npb25zIik7CiB9CiAKLSMgT25seSBhcmNo aXZlX3N0YXR1cyBkaXJlY3Rvcnkgc2hvdWxkIGJlIGNvcGllZCBpbiBwZ193YWwvLgorIyBPbmx5 IGFyY2hpdmVfc3RhdHVzIGFuZCBwcmVhbGxvY2F0ZWRfc2VnbWVudHMgZGlyZWN0b3JpZXMgc2hv dWxkIGJlIGNvcGllZCBpbiBwZ193YWwvLgogaXNfZGVlcGx5KAogCVsgc29ydChzbHVycF9kaXIo IiR0ZW1wZGlyL2JhY2t1cC9wZ193YWwvIikpIF0sCi0JWyBzb3J0IHF3KC4gLi4gYXJjaGl2ZV9z dGF0dXMpIF0sCisJWyBzb3J0IHF3KC4gLi4gYXJjaGl2ZV9zdGF0dXMgcHJlYWxsb2NhdGVkX3Nl Z21lbnRzKSBdLAogCSdubyBXQUwgZmlsZXMgY29waWVkJyk7CiAKICMgQ29udGVudHMgb2YgdGhl c2UgZGlyZWN0b3JpZXMgc2hvdWxkIG5vdCBiZSBjb3BpZWQuCmRpZmYgLS1naXQgYS9zcmMvYmlu L3BnX3Jlc2V0d2FsL3BnX3Jlc2V0d2FsLmMgYi9zcmMvYmluL3BnX3Jlc2V0d2FsL3BnX3Jlc2V0 d2FsLmMKaW5kZXggODA1ZGFmZWYwNy4uZjVhNGQ3NzA2NCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9w Z19yZXNldHdhbC9wZ19yZXNldHdhbC5jCisrKyBiL3NyYy9iaW4vcGdfcmVzZXR3YWwvcGdfcmVz ZXR3YWwuYwpAQCAtODQsNiArODQsNyBAQCBzdGF0aWMgdm9pZCBSZXdyaXRlQ29udHJvbEZpbGUo dm9pZCk7CiBzdGF0aWMgdm9pZCBGaW5kRW5kT2ZYTE9HKHZvaWQpOwogc3RhdGljIHZvaWQgS2ls bEV4aXN0aW5nWExPRyh2b2lkKTsKIHN0YXRpYyB2b2lkIEtpbGxFeGlzdGluZ0FyY2hpdmVTdGF0 dXModm9pZCk7CitzdGF0aWMgdm9pZCBLaWxsRXhpc3RpbmdQcmVhbGxvY2F0ZWRTZWdtZW50cyh2 b2lkKTsKIHN0YXRpYyB2b2lkIFdyaXRlRW1wdHlYTE9HKHZvaWQpOwogc3RhdGljIHZvaWQgdXNh Z2Uodm9pZCk7CiAKQEAgLTUxMyw2ICs1MTQsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2 W10pCiAJUmV3cml0ZUNvbnRyb2xGaWxlKCk7CiAJS2lsbEV4aXN0aW5nWExPRygpOwogCUtpbGxF eGlzdGluZ0FyY2hpdmVTdGF0dXMoKTsKKwlLaWxsRXhpc3RpbmdQcmVhbGxvY2F0ZWRTZWdtZW50 cygpOwogCVdyaXRlRW1wdHlYTE9HKCk7CiAKIAlwcmludGYoXygiV3JpdGUtYWhlYWQgbG9nIHJl c2V0XG4iKSk7CkBAIC0xMDUzLDYgKzEwNTUsNTIgQEAgS2lsbEV4aXN0aW5nWExPRyh2b2lkKQog fQogCiAKKy8qCisgKiBSZW1vdmUgZXhpc3RpbmcgcHJlYWxsb2NhdGVkIHNlZ21lbnRzCisgKi8K K3N0YXRpYyB2b2lkCitLaWxsRXhpc3RpbmdQcmVhbGxvY2F0ZWRTZWdtZW50cyh2b2lkKQorewor I2RlZmluZSBQUkVBTExPQ1NFR0RJUiBYTE9HRElSICIvcHJlYWxsb2NhdGVkX3NlZ21lbnRzIgor CisJRElSCQkgICAqeGxkaXI7CisJc3RydWN0IGRpcmVudCAqeGxkZTsKKwljaGFyCQlwYXRoW01B WFBHUEFUSCArIHNpemVvZihQUkVBTExPQ1NFR0RJUildOworCisJeGxkaXIgPSBvcGVuZGlyKFBS RUFMTE9DU0VHRElSKTsKKwlpZiAoeGxkaXIgPT0gTlVMTCkKKwl7CisJCXBnX2xvZ19lcnJvcigi Y291bGQgbm90IG9wZW4gZGlyZWN0b3J5IFwiJXNcIjogJW0iLCBQUkVBTExPQ1NFR0RJUik7CisJ CWV4aXQoMSk7CisJfQorCisJd2hpbGUgKGVycm5vID0gMCwgKHhsZGUgPSByZWFkZGlyKHhsZGly KSkgIT0gTlVMTCkKKwl7CisJCWlmIChzdHJuY21wKHhsZGUtPmRfbmFtZSwgInhsb2d0ZW1wIiwg c3RybGVuKCJ4bG9ndGVtcCIpKSA9PSAgMCkKKwkJeworCQkJc25wcmludGYocGF0aCwgc2l6ZW9m KHBhdGgpLCAiJXMvJXMiLCBQUkVBTExPQ1NFR0RJUiwgeGxkZS0+ZF9uYW1lKTsKKwkJCWlmICh1 bmxpbmsocGF0aCkgPCAwKQorCQkJeworCQkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGRlbGV0 ZSBmaWxlIFwiJXNcIjogJW0iLCBwYXRoKTsKKwkJCQlleGl0KDEpOworCQkJfQorCQl9CisJfQor CisJaWYgKGVycm5vKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3QgcmVhZCBkaXJlY3Rv cnkgXCIlc1wiOiAlbSIsIFBSRUFMTE9DU0VHRElSKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlpZiAo Y2xvc2VkaXIoeGxkaXIpKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3QgY2xvc2UgZGly ZWN0b3J5IFwiJXNcIjogJW0iLCBQUkVBTExPQ1NFR0RJUik7CisJCWV4aXQoMSk7CisJfQorfQor CisKIC8qCiAgKiBSZW1vdmUgZXhpc3RpbmcgYXJjaGl2ZSBzdGF0dXMgZmlsZXMKICAqLwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94 bG9nLmgKaW5kZXggNzcxODdjMTJiZS4uNjA4ZWM0ZTc0YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvYWNjZXNzL3hsb2cuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5oCkBAIC0zNjEs NiArMzYxLDExIEBAIGV4dGVybiB2b2lkIFhMb2dSZXF1ZXN0V2FsUmVjZWl2ZXJSZXBseSh2b2lk KTsKIGV4dGVybiB2b2lkIGFzc2lnbl9tYXhfd2FsX3NpemUoaW50IG5ld3ZhbCwgdm9pZCAqZXh0 cmEpOwogZXh0ZXJuIHZvaWQgYXNzaWduX2NoZWNrcG9pbnRfY29tcGxldGlvbl90YXJnZXQoZG91 YmxlIG5ld3ZhbCwgdm9pZCAqZXh0cmEpOwogCitleHRlcm4gaW50IEdldE51bVByZWFsbG9jYXRl ZFdhbFNlZ3Modm9pZCk7CitleHRlcm4gdm9pZCBJbnN0YWxsUHJlYWxsb2NhdGVkV2FsU2VnKGNv bnN0IGNoYXIgKnBhdGgpOworZXh0ZXJuIHZvaWQgU2V0TnVtUHJlYWxsb2NhdGVkV2FsU2Vncyhp bnQgaSk7CitleHRlcm4gdm9pZCBSZXF1ZXN0V2FsUHJlYWxsb2NhdGlvbih2b2lkKTsKKwogLyoK ICAqIFJvdXRpbmVzIHRvIHN0YXJ0LCBzdG9wLCBhbmQgZ2V0IHN0YXR1cyBvZiBhIGJhc2UgYmFj a3VwLgogICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaCBiL3NyYy9pbmNs dWRlL21pc2NhZG1pbi5oCmluZGV4IDRkYzM0M2NiYzUuLmE0NTk5ZGY3ZmYgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCisrKyBiL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCkBA IC0zMzMsNiArMzMzLDcgQEAgdHlwZWRlZiBlbnVtIEJhY2tlbmRUeXBlCiAJQl9XQUxfUkVDRUlW RVIsCiAJQl9XQUxfU0VOREVSLAogCUJfV0FMX1dSSVRFUiwKKwlCX1dBTF9BTExPQ0FUT1IsCiAJ Ql9BUkNISVZFUiwKIAlCX1NUQVRTX0NPTExFQ1RPUiwKIAlCX0xPR0dFUiwKQEAgLTQzNSw2ICs0 MzYsNyBAQCB0eXBlZGVmIGVudW0KIAlDaGVja3BvaW50ZXJQcm9jZXNzLAogCVdhbFdyaXRlclBy b2Nlc3MsCiAJV2FsUmVjZWl2ZXJQcm9jZXNzLAorCVdhbEFsbG9jYXRvclByb2Nlc3MsCiAKIAlO VU1fQVVYUFJPQ1RZUEVTCQkJLyogTXVzdCBiZSBsYXN0ISAqLwogfSBBdXhQcm9jVHlwZTsKQEAg LTQ0OCw2ICs0NTAsNyBAQCBleHRlcm4gQXV4UHJvY1R5cGUgTXlBdXhQcm9jVHlwZTsKICNkZWZp bmUgQW1DaGVja3BvaW50ZXJQcm9jZXNzKCkJCShNeUF1eFByb2NUeXBlID09IENoZWNrcG9pbnRl clByb2Nlc3MpCiAjZGVmaW5lIEFtV2FsV3JpdGVyUHJvY2VzcygpCQkoTXlBdXhQcm9jVHlwZSA9 PSBXYWxXcml0ZXJQcm9jZXNzKQogI2RlZmluZSBBbVdhbFJlY2VpdmVyUHJvY2VzcygpCQkoTXlB dXhQcm9jVHlwZSA9PSBXYWxSZWNlaXZlclByb2Nlc3MpCisjZGVmaW5lIEFtV2FsQWxsb2NhdG9y UHJvY2VzcygpCQkoTXlBdXhQcm9jVHlwZSA9PSBXYWxBbGxvY2F0b3JQcm9jZXNzKQogCiAKIC8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci93 YWxfYWxsb2NhdG9yLmggYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL3dhbF9hbGxvY2F0b3IuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5jN2UxMzkyMjZiCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci93YWxfYWxsb2NhdG9yLmgKQEAgLTAs MCArMSwyMSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogd2FsX2FsbG9jYXRvci5oCisg KgkgIEV4cG9ydHMgZnJvbSBwb3N0bWFzdGVyL3dhbF9hbGxvY2F0b3IuYy4KKyAqCisgKiBQb3J0 aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKKyAqCisgKiBzcmMvaW5jbHVkZS9wb3N0bWFzdGVyL3dhbF9hbGxvY2F0b3IuaAor ICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIF9XQUxfQUxMT0NBVE9SX0gKKyNk ZWZpbmUgX1dBTF9BTExPQ0FUT1JfSAorCisvKiBHVUMgb3B0aW9ucyAqLworZXh0ZXJuIGludCAg d2FsX2FsbG9jX21heF9zaXplX21iOworCitleHRlcm4gdm9pZCBXYWxBbGxvY2F0b3JNYWluKHZv aWQpIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOworZXh0ZXJuIGJvb2wgV2FsUHJlYWxsb2NhdGlv bkVuYWJsZWQodm9pZCk7CisKKyNlbmRpZgkJCQkJCQkvKiBfV0FMX0FMTE9DQVRPUl9IICovCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2ZkLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdl L2ZkLmgKaW5kZXggNWIzYzI4MGRkNy4uMDA4YTU0ZjJlZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvc3RvcmFnZS9mZC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvZmQuaApAQCAtMTczLDYg KzE3Myw3IEBAIGV4dGVybiBpbnQJZHVyYWJsZV91bmxpbmsoY29uc3QgY2hhciAqZm5hbWUsIGlu dCBsb2dsZXZlbCk7CiBleHRlcm4gaW50CWR1cmFibGVfcmVuYW1lX2V4Y2woY29uc3QgY2hhciAq b2xkZmlsZSwgY29uc3QgY2hhciAqbmV3ZmlsZSwgaW50IGxvZ2xldmVsKTsKIGV4dGVybiB2b2lk IFN5bmNEYXRhRGlyZWN0b3J5KHZvaWQpOwogZXh0ZXJuIGludAlkYXRhX3N5bmNfZWxldmVsKGlu dCBlbGV2ZWwpOworZXh0ZXJuIHZvaWQgQ3JlYXRlRW1wdHlXYWxTZWdtZW50KGNvbnN0IGNoYXIg KnBhdGgpOwogCiAvKiBGaWxlbmFtZSBjb21wb25lbnRzICovCiAjZGVmaW5lIFBHX1RFTVBfRklM RVNfRElSICJwZ3NxbF90bXAiCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2Mu aCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oCmluZGV4IGJlNjdkOGE4NjEuLjliM2FjZmI2 OGUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oCisrKyBiL3NyYy9pbmNs dWRlL3N0b3JhZ2UvcHJvYy5oCkBAIC0zNDgsNiArMzQ4LDggQEAgdHlwZWRlZiBzdHJ1Y3QgUFJP Q19IRFIKIAlwZ19hdG9taWNfdWludDMyIGNsb2dHcm91cEZpcnN0OwogCS8qIFdBTFdyaXRlciBw cm9jZXNzJ3MgbGF0Y2ggKi8KIAlMYXRjaAkgICAqd2Fsd3JpdGVyTGF0Y2g7CisJLyogV0FMIEFs bG9jYXRvciBwcm9jZXNzJ3MgbGF0Y2ggKi8KKwlMYXRjaAkgICAqd2FsQWxsb2NhdG9yTGF0Y2g7 CiAJLyogQ2hlY2twb2ludGVyIHByb2Nlc3MncyBsYXRjaCAqLwogCUxhdGNoCSAgICpjaGVja3Bv aW50ZXJMYXRjaDsKIAkvKiBDdXJyZW50IHNoYXJlZCBlc3RpbWF0ZSBvZiBhcHByb3ByaWF0ZSBz cGluc19wZXJfZGVsYXkgdmFsdWUgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3dh aXRfZXZlbnQuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaAppbmRleCA2YzZlYzJl NzExLi4zNjMyNGIxNmM3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50 LmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oCkBAIC00Nyw3ICs0Nyw4IEBA IHR5cGVkZWYgZW51bQogCVdBSVRfRVZFTlRfU1lTTE9HR0VSX01BSU4sCiAJV0FJVF9FVkVOVF9X QUxfUkVDRUlWRVJfTUFJTiwKIAlXQUlUX0VWRU5UX1dBTF9TRU5ERVJfTUFJTiwKLQlXQUlUX0VW RU5UX1dBTF9XUklURVJfTUFJTgorCVdBSVRfRVZFTlRfV0FMX1dSSVRFUl9NQUlOLAorCVdBSVRf RVZFTlRfV0FMX0FMTE9DQVRPUl9NQUlOCiB9IFdhaXRFdmVudEFjdGl2aXR5OwogCiAvKiAtLS0t LS0tLS0tCi0tIAoyLjE2LjYKCg== --_002_265B06BA7B164C1ABE1A1451D22A1F83amazoncom_--