Date: Tue, 13 Feb 2018 09:10:21 +0000 From: <Elliott.Rabe@dell.com> To: <kib@freebsd.org> Cc: <freebsd-hackers@freebsd.org>, <Eric.Van.Gyzen@dell.com>, <alc@FreeBSD.org>, <markj@FreeBSD.org>, <truckman@FreeBSD.org> Subject: Re: Stale memory during post fork cow pmap update Message-ID: <5A82AB7C.6090404@dell.com> In-Reply-To: <20180210225608.GM33564@kib.kiev.ua> References: <5A7E7F2B.80900@dell.com> <20180210111848.GL33564@kib.kiev.ua> <5A7F6A7C.80607@dell.com> <20180210225608.GM33564@kib.kiev.ua>
next in thread | previous in thread | raw e-mail | index | archive | help
--_003_5A82AB7C6090404dellcom_ Content-Type: text/plain; charset="utf-8" Content-ID: <3B969E07ED0FE9448795295A6E6E9CD3@dell.com> Content-Transfer-Encoding: base64 DQpPbiAwMi8xMC8yMDE4IDA0OjU2IFBNLCBLb25zdGFudGluIEJlbG91c292IHdyb3RlOg0KPiBP biBTYXQsIEZlYiAxMCwgMjAxOCBhdCAwOTo1NjoyMFBNICswMDAwLCBFbGxpb3R0LlJhYmVAZGVs bC5jb20gd3JvdGU6DQo+PiBPbiAwMi8xMC8yMDE4IDA1OjE4IEFNLCBLb25zdGFudGluIEJlbG91 c292IHdyb3RlOg0KPj4+IE9uIFNhdCwgRmViIDEwLCAyMDE4IGF0IDA1OjEyOjExQU0gKzAwMDAs IEVsbGlvdHQuUmFiZUBkZWxsLmNvbSB3cm90ZToNCj4+Pj4gLi4uDQo+Pj4+IEkndmUgYmVlbiBo dW50aW5nIGZvciB0aGUgcm9vdCBjYXVzZSBvZiBlbHVzaXZlLCBzbGlnaHQgbWVtb3J5DQo+Pj4+ IGNvcnJ1cHRpb25zIGluIGEgbGFyZ2UsIGNvbXBsZXggcHJvY2VzcyB0aGF0IG1hbmFnZXMgbWFu eSB0aHJlYWRzLiBBbGwNCj4+Pj4gZmFpbHVyZXMgYW5kIGV4cGVyaW1lbnRhdGlvbiB0aHVzIGZh ciBoYXMgYmVlbiBvbiB4ODZfNjQgYXJjaGl0ZWN0dXJlDQo+Pj4+IG1hY2hpbmVzLCBhbmQgcG1h cF9wY2lkIGlzIG5vdCBpbiB1c2UuDQo+Pj4+IC4uLg0KPj4+IEl0IGlzIG5lY2Vzc2FyeSBmb3Ig eW91IHRvIHByb3ZpZGUgdGhlIHRlc3QgYW5kIHByb3ZpZGUNCj4+PiBzb21lIGtpbmQgb2YgdGhl IHRlc3QgdHJhY2Ugb3IgdGhlIG91dHB1dCB3aGljaCBpbGx1c3RyYXRlcyB0aGUgaXNzdWUNCj4+ PiB5b3UgZm91bmQuDQo+PiBIZXJlIGlzIHRoZSBzZXF1ZW5jZSBvZiBhY3Rpb25zIEkgYW0gcmVm ZXJyaW5nIHRvLiAgVGhlcmUgaXMgb25seSBvbmUNCj4+IGxvY2ssIGFuZCBhbGwgdGhlIHdyaXRl cy9yZWFkcyBhcmUgb24gb25lIGxvZ2ljYWwgcGFnZS4NCj4+DQo+PiArVGhlIHByb2Nlc3MgaXMg Zm9ya2VkIHRyYW5zaXRpb25pbmcgYSBtYXAgZW50cnkgdG8gQ09XDQo+PiArVGhyZWFkIEEgd3Jp dGVzIHRvIGEgcGFnZSBvbiB0aGUgbWFwIGVudHJ5LCBmYXVsdHMsIHVwZGF0ZXMgdGhlIHBtYXAg dG8NCj4+IHdyaXRhYmxlIGF0IGEgbmV3IHBoeXMgYWRkciwgYW5kIHN0YXJ0cyBUTEIgaW52YWxp ZGF0aW9ucy4uLg0KPj4gK1RocmVhZCBCIGFjcXVpcmVzIGEgbG9jaywgd3JpdGVzIHRvIGEgbG9j YXRpb24gb24gdGhlIG5ldyBwaHlzIGFkZHIsDQo+PiBhbmQgcmVsZWFzZXMgdGhlIGxvY2sNCj4+ ICtUaHJlYWQgQyBhY3F1aXJlcyB0aGUgbG9jaywgcmVhZHMgZnJvbSB0aGUgbG9jYXRpb24gb24g dGhlIG9sZCBwaHlzIGFkZHIuLi4NCj4+ICtUaHJlYWQgQSAuLi5jb250aW51ZXMgdGhlIFRMQiBp bnZhbGlkYXRpb25zIHdoaWNoIGFyZSBjb21wbGV0ZWQNCj4+ICtUaHJlYWQgQyAuLi5yZWFkcyBm cm9tIHRoZSBsb2NhdGlvbiBvbiB0aGUgbmV3IHBoeXMgYWRkciwgYW5kIHJlbGVhc2VzDQo+PiB0 aGUgbG9jaw0KPj4NCj4+IEluIHRoaXMgZXhhbXBsZSBUaHJlYWQgQiBhbmQgQyBbbG9jaywgdXNl IGFuZCB1bmxvY2tdIHByb3Blcmx5IGFuZA0KPj4gbmVpdGhlciBvd24gdGhlIGxvY2sgYXQgdGhl IHNhbWUgdGltZS4gIFRocmVhZCBBIHdhcyB3cml0aW5nIHNvbWV3aGVyZQ0KPj4gZWxzZSBvbiB0 aGUgcGFnZSBhbmQgc28gbmV2ZXIgaGFkL25lZWRlZCB0aGUgbG9jay4gIFRocmVhZCBCIHNlZXMg YQ0KPj4gbG9jYXRpb24gdGhhdCBpcyBvbmx5IGV2ZXIgcmVhZHxtb2RpZmllZCB1bmRlciBhIGxv Y2sgY2hhbmdlIGJlbmVhdGggaXQNCj4+IHdoaWxlIGl0IGlzIHRoZSBsb2NrIG93bmVyLg0KPiBJ IGJlbGlldmUgeW91IG1lYW4gJ1RocmVhZCBDJyBpbiB0aGUgbGFzdCBzZW50ZW5jZS4NCllvdSBh cmUgY29ycmVjdCwgSSBkaWQgbWVhbiBUaHJlYWQgQy4NCj4+IEkgd2lsbCBnZXQgYSB0ZXN0IHBh dGNoIHRvZ2V0aGVyIGFuZCBtYWtlIGl0IGF2YWlsYWJsZSBhcyBzb29uIGFzIEkgY2FuLg0KPiBQ bGVhc2UuDQoNClNvcnJ5IGZvciBteSBkZWxheWVkIHJlc3BvbnNlOyBJIGhhZCBiZWVuIHdvcmtp bmcgb2ZmIGEgc2VwYXJhdGUgcHJvamVjdCANCmJhc2VkIG9uIHJlbGVuZy8xMS4xIGFuZCBpdCB0 b29rIG1lIGxvbmdlciB0aGVuIEkgZXhwZWN0ZWQgdG8gZ2V0IGEgZGV2IA0KcmlnIHNldHVwIG9m ZiBvZiBtYXN0ZXIgb24gd2hpY2ggSSBjb3VsZCByZS1ldmFsdWF0ZSB0aGUgc2l0dWF0aW9uLg0K DQpJIGFtIGF0dGFjaGluZyBteSB0ZXN0IGFwcGFyYXR1cywgaG93ZXZlciwgY2FsbGluZyBpdCBh IHRlc3QgaXMgcHJvYmFibHkgDQphIGRpc3NlcnZpY2UgdG8gdGVzdHMgZXZlcnl3aGVyZS4gIEkg Y29uc2lkZXIgdGhpcyBlbnRpcmUgZml4dHVyZSANCmRpc3Bvc2FibGUsIHNvIEkgZGlkbid0IGdl dCBjYXJyaWVkIGF3YXkgdHJ5aW5nIHRvIHByb3Blcmx5IA0Kc3R5bGUvcGFydGl0aW9uL2xvY2F0 ZSB0aGUgY29kZS4gIEkgbmV2ZXIgd2FudGVkIGFueXRoaW5nIHRoaXMgDQpjb21wbGljYXRlZCBl aXRoZXI7IGl0IHByZXR0eSBtdWNoIGp1c3QgZXZvbHZlZCBpbnRvIGEgZGV2ZWxvcG1lbnQgYWlk IA0KdG8gc3BlbHVuayBhcm91bmQgaW4gdGhlIGZhdWx0L3BtYXAgaGFuZGxpbmcuICBNeSBhdHRl bXB0cyB0aHVzLWZhciBhdCANCnJlZHVjaW5nIHRoZSBmaXh0dXJlIHRvIGJlIHVzZXItc3BhY2Ug b25seSBoYXZlIG5vdCBiZWVuIHN1Y2Nlc3NmdWwuICANCkFkZGl0aW9uYWxseSwgSSBoYXZlIG5v dGljZWQgdGhhdCB0aGUgZml4dHVyZSBpcyAvdmVyeS8gc2Vuc2l0aXZlIHRvIGFueSANCmNoYW5n ZXMgaW4gdGltaW5nOyBzZXZlcmFsIG9mIHRoZSBkZWJ1Z2dpbmcgZW50cmllcyBldmVuIHNlZW0g a2V5IHRvIA0KaGl0dGluZyB0aGUgcHJvYmxlbS4gIEkgZGlkbid0IGhhdmUgbXVjaCBsdWNrIGdl dHRpbmcgdGhlIHByb2JsZW0gdG8gDQptYW5pZmVzdCBvbiBhIHZpcnR1YWwgbWFjaGluZSBndWVz dCB3LyBhIFZpcnR1YWxCb3ggaG9zdCBlaXRoZXIuICBGb3IgDQphbGwgb2YgdGhlc2UgcmVhc29u cywgSSBkb24ndCB0aGluayB0aGVyZSBpcyB2YWx1ZSBoZXJlIGluIHRyeWluZyB0byB1c2UgDQp0 aGlzIGFzIGFueSBzb3J0IG9mIHJlZ3Jlc3Npb24gZml4dHVyZSwgdW5sZXNzIHBlcmhhcHMgaWYg c29tZW9uZSBpcyANCndpbGxpbmcgdG8gdHJ5IHRvIHR1cm4gaXQgaW50byBzb21ldGhpbmcgbGVz cyByaWRpY3Vsb3VzLiAgRGVzcGl0ZSBhbGwgDQpzaG9ydGNvbWluZ3MsIG9uIG15IGhhcmR3YXJl IGFueXdheXMsIGl0IGlzIGFibGUgdG8gcmVwcm9kdWNlIHRoZSANCmV4YW1wbGUgSSBkZXNjcmli ZWQgcHJldHR5IG11Y2ggaW1tZWRpYXRlbHkgd2hlbiBJIHVzZSBpdCB3aXRoIHRoZSANCmRlYnVn Z2luZyBrbm9iICItdiIuIEluc3RydWN0aW9ucyBhbmQgZXhwZWN0YXRpb25zIGFyZSBhdCB0aGUg dG9wIG9mIHRoZSANCm1haW4gdGVzdCBmaXh0dXJlIHNvdXJjZSBmaWxlLg0KDQpJIGFtIGFsc28g YXR0YWNoaW5nIGEgcGF0Y2ggdGhhdCBJIGhhdmUgYmVlbiB1c2luZyB0byBwcmV2ZW50IHRoZSAN CnByb2JsZW0uICBJIHdhcyBsb29raW5nIGF0IHRoaW5ncyB3aXRoIGEgbXVjaCBuYXJyb3dlciB2 aWV3IGFuZCBtYWRlIHRoZSANCmNoYW5nZXMgZGlyZWN0bHkgaW4gcG1hcF9lbnRlci4gIEkgc3Vz cGVjdCB0aGUgaW50ZXJuYWwgDQpkb3VibGUtdXBkYXRlLWludmFsaWRhdGUgaXMgc2xpZ2h0bHkg YmV0dGVyIHBlcmZvcm1hbmNlIHdpc2UgdGhlbiB0YWtpbmcgDQp0d28gd2hvbGUgZmF1bHRzLCBi dXQgSSBoYXZlbid0IGJlbmNobWFya2VkIGl0LCBpdCBwcm9iYWJseSBkb2Vzbid0IA0KbWF0dGVy IG11Y2ggY29tcGFyZWQgdG8gdGhlIGNvc3QgYW5kIGZyZXF1ZW5jeSBvZiB0aGUgYWN0dWFsIGNv cGllcywgYW5kIA0KaXQgYWxzbyBoYXMgdGhlIGRpc2FkdmFudGFnZSBvZiBiZWluZyBhcmNoaXRl Y3R1cmUgc3BlY2lmaWMuICBJIGFsc28gDQpkb24ndCBmZWVsIGxpa2UgSSBoYXZlIGVub3VnaCBl eHBlcmllbmNlIHdpdGggdGhlIHZtIGZhdWx0IGNvZGUgaW4gDQpnZW5lcmFsIGZvciBteSBjb21t ZW50YXJ5IHRvIGJlIHZlcnkgdmFsdWFibGUgaGVyZS4gIEhvd2V2ZXIsIEkgZG8gDQp3b25kZXI6 IDEpIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgc2NlbmFyaW9zIHdoZXJlIGEgcG90ZW50aWFsbHkg DQphY2Nlc3NpYmxlIHBhZ2UgbWlnaHQgYmUgdW5kZXJnb2luZyBhbiBbYWRkcmVzcyt3cml0YWJs ZV0gY2hhbmdlIGluIHRoZSANCnNhbWUgd2F5ICh0aGlzIHNvcnQgb2YgdGhpbmcgc2VlbXMgaGFy ZCB0byByZWFkIG91dCBvZiBjb2RlKSwgYW5kIDIpIGlmIA0KdGhlcmUgaXMgZXZlciBhbnkgbGVn YWwgcmVhc29uIHdoeSBhbiBhY2Nlc3NpYmxlIHBhZ2Ugc2hvdWxkIGJlIA0KdW5kZXJnb2luZyBz dWNoIGEgY2hhbmdlPyAgSWYgbm90LCBwZXJoYXBzIHdlIGNvdWxkIGNvbWUgdXAgd2l0aCBhbiAN CmFwcHJvcHJpYXRlIHNhbml0eS1jaGVjayBjb25kaXRpb24gdG8gZ3VhcmQgYWdhaW5zdCBhbnkg Y2FzZXMgb2YgdGhpcyANCnNvcnQgb2YgdGhpbmcgYWNjaWRlbnRhbGx5IHNsaXBwaW5nIGluIHRo ZSBmdXR1cmUuDQoNClRoZSBhdHRhY2hlZCBnaXQgcGF0Y2hlcyBzaG91bGQgYXBwbHkgYW5kIGJ1 aWxkIGNsZWFubHkgb24gbWFzdGVyIGNvbW1pdCANCmZlMGVlNWMuICBJIGhhdmUgdmVyaWZpZWQg YXQgbGVhc3QgdGhlc2UgdGhyZWUgc2NlbmFyaW9zIGluIG15IGVudmlyb25tZW50Og0KMSkgdGhl IGZpeHR1cmUgYWxvbmUgcmVwcm9kdWNlcyB0aGUgcHJvYmxlbS4NCjIpIHRoZSBmaXh0dXJlIHdp dGggbXkgcGF0Y2ggZG9lcyBub3QgcmVwcm9kdWNlIHRoZSBwcm9ibGVtLg0KMykgdGhlIGZpeHR1 cmUgd2l0aCB5b3VyIHBhdGNoIGRvZXMgbm90IHJlcHJvZHVjZSB0aGUgcHJvYmxlbS4NCg0KVGhh bmtzIQ0K --_003_5A82AB7C6090404dellcom_ Content-Type: text/x-patch; name="0001-DISPOSABLE-A-test-fixture-that-can-repro-a-pmap-upda.patch" Content-Description: 0001-DISPOSABLE-A-test-fixture-that-can-repro-a-pmap-upda.patch Content-Disposition: attachment; filename="0001-DISPOSABLE-A-test-fixture-that-can-repro-a-pmap-upda.patch"; size=70608; creation-date="Tue, 13 Feb 2018 09:10:21 GMT"; modification-date="Tue, 13 Feb 2018 09:10:21 GMT" Content-ID: <DB06D7C945DDC0448CB2018BFBF22E43@dell.com> Content-Transfer-Encoding: base64 RnJvbSAzMDkwYjgyMzJmNmY0MjFjMGM2ZGUyMTAyYjE4Y2ZhYzU3MDBiNTFhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQ0KRnJvbTogRWxsaW90dCBSYWJlIDxlbGxpb3R0LnJhYmVAZGVsbC5jb20+ DQpEYXRlOiBTdW4sIDExIEZlYiAyMDE4IDE3OjE5OjI2IC0wNjAwDQpTdWJqZWN0OiBbUEFUQ0gg MS8zXSBESVNQT1NBQkxFOiBBIHRlc3QgZml4dHVyZSB0aGF0IGNhbiByZXBybyBhIHBtYXANCiB1 cGRhdGUtaW52YWxpZGF0ZSByYWNlIGNvbmRpdGlvbg0KDQpBIGhpZ2gtbGV2ZWwgZGVzY3JpcHRp b24gb2YgdGhlIGZpeHR1cmUgaXMgYXZhaWxhYmxlIGluIGZvcmtpbmdfc3RhbGUuYw0KLS0tDQog c3RhbmQvbGlic2EvcHJpbnRmLmMgICB8ICAgMTYgKw0KIHN0YW5kL2xpYnNhL3N0YW5kLmggICAg fCAgICAxICsNCiBzeXMvYW1kNjQvYW1kNjQvcG1hcC5jIHwgICAxNSArDQogc3lzL2FtZDY0L2Nv bmYvR0VORVJJQyB8ICAgMTkgKy0NCiBzeXMvdm0vZm9ya2luZ19zdGFsZS5jIHwgMTA1NCArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCiBzeXMvdm0vZm9y a2luZ19zdGFsZS5oIHwgIDI5NiArKysrKysrKysrKysrKw0KIHN5cy92bS92bV9mYXVsdC5jICAg ICAgfCAgIDE2ICsNCiBzeXMvdm0vdm1fcGFnZS5jICAgICAgIHwgIDQ1OSArKysrKysrKysrKysr KysrKysrKysNCiBzeXMvdm0vdm1fcGFnZS5oICAgICAgIHwgICAgNSArDQogOSBmaWxlcyBjaGFu Z2VkLCAxODcyIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pDQogY3JlYXRlIG1vZGUgMTAw NzU1IHN5cy92bS9mb3JraW5nX3N0YWxlLmMNCiBjcmVhdGUgbW9kZSAxMDA3NTUgc3lzL3ZtL2Zv cmtpbmdfc3RhbGUuaA0KDQpkaWZmIC0tZ2l0IGEvc3RhbmQvbGlic2EvcHJpbnRmLmMgYi9zdGFu ZC9saWJzYS9wcmludGYuYw0KaW5kZXggZDBjNDA5ZC4uYzc3ZTk0MSAxMDA2NDQNCi0tLSBhL3N0 YW5kL2xpYnNhL3ByaW50Zi5jDQorKysgYi9zdGFuZC9saWJzYS9wcmludGYuYw0KQEAgLTE0OSw2 ICsxNDksMjIgQEAgdnNwcmludGYoY2hhciAqYnVmLCBjb25zdCBjaGFyICpjZm10LCB2YV9saXN0 IGFwKQ0KIAlidWZbcmV0dmFsXSA9ICdcMCc7DQogfQ0KIA0KK2ludA0KK3ZzbnByaW50ZihjaGFy ICpidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpjZm10LCB2YV9saXN0IGFwKQ0KK3sNCisg ICAgaW50IHJldHZhbDsNCisgICAgc3RydWN0IHByaW50X2J1ZiBhcmc7DQorDQorICAgIGFyZy5i dWYgPSBidWY7DQorICAgIGFyZy5zaXplID0gc2l6ZTsNCisNCisgICAgcmV0dmFsID0ga3Zwcmlu dGYoY2ZtdCwgJnNucHJpbnRfZnVuYywgJmFyZywgMTAsIGFwKTsNCisNCisgICAgaWYgKGFyZy5z aXplID49IDEpDQorICAgICAgICAqKGFyZy5idWYpKysgPSAwOw0KKyAgICByZXR1cm4gcmV0dmFs Ow0KK30NCisNCiAvKg0KICAqIFB1dCBhIE5VTC10ZXJtaW5hdGVkIEFTQ0lJIG51bWJlciAoYmFz ZSA8PSAzNikgaW4gYSBidWZmZXIgaW4gcmV2ZXJzZQ0KICAqIG9yZGVyOyByZXR1cm4gYW4gb3B0 aW9uYWwgbGVuZ3RoIGFuZCBhIHBvaW50ZXIgdG8gdGhlIGxhc3QgY2hhcmFjdGVyDQpkaWZmIC0t Z2l0IGEvc3RhbmQvbGlic2Evc3RhbmQuaCBiL3N0YW5kL2xpYnNhL3N0YW5kLmgNCmluZGV4IGY2 YTYxMmIuLjhkNTBlZmUgMTAwNjQ0DQotLS0gYS9zdGFuZC9saWJzYS9zdGFuZC5oDQorKysgYi9z dGFuZC9saWJzYS9zdGFuZC5oDQpAQCAtMjc0LDYgKzI3NCw3IEBAIGV4dGVybiB2b2lkCXZwcmlu dGYoY29uc3QgY2hhciAqZm10LCBfX3ZhX2xpc3QpOw0KIGV4dGVybiBpbnQJc3ByaW50ZihjaGFy ICpidWYsIGNvbnN0IGNoYXIgKmNmbXQsIC4uLikgX19wcmludGZsaWtlKDIsIDMpOw0KIGV4dGVy biBpbnQJc25wcmludGYoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqY2ZtdCwg Li4uKSBfX3ByaW50Zmxpa2UoMywgNCk7DQogZXh0ZXJuIHZvaWQJdnNwcmludGYoY2hhciAqYnVm LCBjb25zdCBjaGFyICpjZm10LCBfX3ZhX2xpc3QpOw0KK2V4dGVybiBpbnQgIHZzbnByaW50Zihj aGFyICpidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpjZm10LCBfX3ZhX2xpc3QpOw0KIA0K IGV4dGVybiB2b2lkCXR3aWRkbGUodV9pbnQgY2FsbGVyZGl2KTsNCiBleHRlcm4gdm9pZAl0d2lk ZGxlX2Rpdmlzb3IodV9pbnQgZ2xvYmFsZGl2KTsNCmRpZmYgLS1naXQgYS9zeXMvYW1kNjQvYW1k NjQvcG1hcC5jIGIvc3lzL2FtZDY0L2FtZDY0L3BtYXAuYw0KaW5kZXggYjk4ODllMy4uN2JiOWMx YiAxMDA2NDQNCi0tLSBhL3N5cy9hbWQ2NC9hbWQ2NC9wbWFwLmMNCisrKyBiL3N5cy9hbWQ2NC9h bWQ2NC9wbWFwLmMNCkBAIC00NjI4LDYgKzQ2MjgsOCBAQCBpbnQNCiBwbWFwX2VudGVyKHBtYXBf dCBwbWFwLCB2bV9vZmZzZXRfdCB2YSwgdm1fcGFnZV90IG0sIHZtX3Byb3RfdCBwcm90LA0KICAg ICB1X2ludCBmbGFncywgaW50OF90IHBzaW5kKQ0KIHsNCisJZnN0Zl9jb25kaXRpb25hbF9mYXVs dF9kZWJ1ZyhfX0ZJTEVfXywgX19MSU5FX18sIHBtYXAsIHZhLCBwcm90KTsNCisNCiAJc3RydWN0 IHJ3bG9jayAqbG9jazsNCiAJcGRfZW50cnlfdCAqcGRlOw0KIAlwdF9lbnRyeV90ICpwdGUsIFBH X0csIFBHX0EsIFBHX00sIFBHX1JXLCBQR19WOw0KQEAgLTQ3OTIsOSArNDc5NCwyMCBAQCBwbWFw X2VudGVyKHBtYXBfdCBwbWFwLCB2bV9vZmZzZXRfdCB2YSwgdm1fcGFnZV90IG0sIHZtX3Byb3Rf dCBwcm90LA0KIAkvKg0KIAkgKiBVcGRhdGUgdGhlIFBURS4NCiAJICovDQorCWZzdGZfY29uZGl0 aW9uYWxfcG9pbnRfZGVidWcoX19GSUxFX18sIF9fTElORV9fLCBwbWFwLCB2YSk7DQorDQogCWlm ICgob3JpZ3B0ZSAmIFBHX1YpICE9IDApIHsNCiB2YWxpZGF0ZToNCisJCWZzdGZfY29uZGl0aW9u YWxfcG1hcG1vZF9hZHZhbmNlKF9fRklMRV9fLA0KKwkJCQkJCSBfX0xJTkVfXywNCisJCQkJCQkg dmEsDQorCQkJCQkJIFBIWVNfVE9fVk1fUEFHRShuZXdwdGUgJiBQR19GUkFNRSkpOw0KKw0KIAkJ b3JpZ3B0ZSA9IHB0ZV9sb2FkX3N0b3JlKHB0ZSwgbmV3cHRlKTsNCisNCisJCWZzdGZfY29uZGl0 aW9uYWxfcHRlX2RlYnVnKF9fRklMRV9fLCBfX0xJTkVfXywgcG1hcCwgdmEsIG9yaWdwdGUpOw0K KwkJZnN0Zl9jb25kaXRpb25hbF9wdGVfZGVidWcoX19GSUxFX18sIF9fTElORV9fLCBwbWFwLCB2 YSwgbmV3cHRlKTsNCisNCiAJCW9wYSA9IG9yaWdwdGUgJiBQR19GUkFNRTsNCiAJCWlmIChvcGEg IT0gcGEpIHsNCiAJCQlpZiAoKG9yaWdwdGUgJiBQR19NQU5BR0VEKSAhPSAwKSB7DQpAQCAtNDgz Myw2ICs0ODQ2LDggQEAgcG1hcF9lbnRlcihwbWFwX3QgcG1hcCwgdm1fb2Zmc2V0X3QgdmEsIHZt X3BhZ2VfdCBtLCB2bV9wcm90X3QgcHJvdCwNCiAJfSBlbHNlDQogCQlwdGVfc3RvcmUocHRlLCBu ZXdwdGUpOw0KIA0KKwlmc3RmX2NvbmRpdGlvbmFsX3BvaW50X2RlYnVnKF9fRklMRV9fLCBfX0xJ TkVfXywgcG1hcCwgdmEpOw0KKw0KIHVuY2hhbmdlZDoNCiANCiAjaWYgVk1fTlJFU0VSVkxFVkVM ID4gMA0KZGlmZiAtLWdpdCBhL3N5cy9hbWQ2NC9jb25mL0dFTkVSSUMgYi9zeXMvYW1kNjQvY29u Zi9HRU5FUklDDQppbmRleCAxYWY3YjdiLi40YzQ1MjkwIDEwMDY0NA0KLS0tIGEvc3lzL2FtZDY0 L2NvbmYvR0VORVJJQw0KKysrIGIvc3lzL2FtZDY0L2NvbmYvR0VORVJJQw0KQEAgLTg2LDE2ICs4 NiwxNiBAQCBvcHRpb25zIAlSQ1RMCQkJIyBSZXNvdXJjZSBsaW1pdHMNCiBvcHRpb25zIAlLREIJ CQkjIEVuYWJsZSBrZXJuZWwgZGVidWdnZXIgc3VwcG9ydC4NCiBvcHRpb25zIAlLREJfVFJBQ0UJ CSMgUHJpbnQgYSBzdGFjayB0cmFjZSBmb3IgYSBwYW5pYy4NCiAjIEZvciBmdWxsIGRlYnVnZ2Vy IHN1cHBvcnQgdXNlICh0dXJuIG9mZiBpbiBzdGFibGUgYnJhbmNoKToNCi1vcHRpb25zIAlCVUZf VFJBQ0tJTkcJCSMgVHJhY2sgYnVmZmVyIGhpc3RvcnkNCi1vcHRpb25zIAlEREIJCQkjIFN1cHBv cnQgRERCLg0KLW9wdGlvbnMgCUZVTExfQlVGX1RSQUNLSU5HCSMgVHJhY2sgbW9yZSBidWZmZXIg aGlzdG9yeQ0KKyNvcHRpb25zIAlCVUZfVFJBQ0tJTkcJCSMgVHJhY2sgYnVmZmVyIGhpc3RvcnkN Cisjb3B0aW9ucyAJRERCCQkJIyBTdXBwb3J0IEREQi4NCisjb3B0aW9ucyAJRlVMTF9CVUZfVFJB Q0tJTkcJIyBUcmFjayBtb3JlIGJ1ZmZlciBoaXN0b3J5DQogb3B0aW9ucyAJR0RCCQkJIyBTdXBw b3J0IHJlbW90ZSBHREIuDQotb3B0aW9ucyAJREVBRExLUkVTCQkjIEVuYWJsZSB0aGUgZGVhZGxv Y2sgcmVzb2x2ZXINCi1vcHRpb25zIAlJTlZBUklBTlRTCQkjIEVuYWJsZSBjYWxscyBvZiBleHRy YSBzYW5pdHkgY2hlY2tpbmcNCi1vcHRpb25zIAlJTlZBUklBTlRfU1VQUE9SVAkjIEV4dHJhIHNh bml0eSBjaGVja3Mgb2YgaW50ZXJuYWwgc3RydWN0dXJlcywgcmVxdWlyZWQgYnkgSU5WQVJJQU5U Uw0KLW9wdGlvbnMgCVdJVE5FU1MJCQkjIEVuYWJsZSBjaGVja3MgdG8gZGV0ZWN0IGRlYWRsb2Nr cyBhbmQgY3ljbGVzDQotb3B0aW9ucyAJV0lUTkVTU19TS0lQU1BJTgkjIERvbid0IHJ1biB3aXRu ZXNzIG9uIHNwaW5sb2NrcyBmb3Igc3BlZWQNCi1vcHRpb25zIAlNQUxMT0NfREVCVUdfTUFYWk9O RVM9OAkjIFNlcGFyYXRlIG1hbGxvYyg5KSB6b25lcw0KKyNvcHRpb25zIAlERUFETEtSRVMJCSMg RW5hYmxlIHRoZSBkZWFkbG9jayByZXNvbHZlcg0KKyNvcHRpb25zIAlJTlZBUklBTlRTCQkjIEVu YWJsZSBjYWxscyBvZiBleHRyYSBzYW5pdHkgY2hlY2tpbmcNCisjb3B0aW9ucyAJSU5WQVJJQU5U X1NVUFBPUlQJIyBFeHRyYSBzYW5pdHkgY2hlY2tzIG9mIGludGVybmFsIHN0cnVjdHVyZXMsIHJl cXVpcmVkIGJ5IElOVkFSSUFOVFMNCisjb3B0aW9ucyAJV0lUTkVTUwkJCSMgRW5hYmxlIGNoZWNr cyB0byBkZXRlY3QgZGVhZGxvY2tzIGFuZCBjeWNsZXMNCisjb3B0aW9ucyAJV0lUTkVTU19TS0lQ U1BJTgkjIERvbid0IHJ1biB3aXRuZXNzIG9uIHNwaW5sb2NrcyBmb3Igc3BlZWQNCisjb3B0aW9u cyAJTUFMTE9DX0RFQlVHX01BWFpPTkVTPTgJIyBTZXBhcmF0ZSBtYWxsb2MoOSkgem9uZXMNCiAN CiAjIE1ha2UgYW4gU01QLWNhcGFibGUga2VybmVsIGJ5IGRlZmF1bHQNCiBvcHRpb25zIAlTTVAJ CQkjIFN5bW1ldHJpYyBNdWx0aVByb2Nlc3NvciBLZXJuZWwNCkBAIC0xMDMsNiArMTAzLDcgQEAg b3B0aW9ucyAJRUFSTFlfQVBfU1RBUlRVUA0KIA0KICMgQ1BVIGZyZXF1ZW5jeSBjb250cm9sDQog ZGV2aWNlCQljcHVmcmVxDQorZGV2aWNlICAgICAgY3B1Y3RsDQogDQogIyBCdXMgc3VwcG9ydC4N CiBkZXZpY2UJCWFjcGkNCmRpZmYgLS1naXQgYS9zeXMvdm0vZm9ya2luZ19zdGFsZS5jIGIvc3lz L3ZtL2Zvcmtpbmdfc3RhbGUuYw0KbmV3IGZpbGUgbW9kZSAxMDA3NTUNCmluZGV4IDAwMDAwMDAu LjQ3YTFiYjkNCi0tLSAvZGV2L251bGwNCisrKyBiL3N5cy92bS9mb3JraW5nX3N0YWxlLmMNCkBA IC0wLDAgKzEsMTA1NCBAQA0KKy8qDQorICogRlNURg0KKyAqDQorICogZm9ya2luZyBzdGFsZSB0 ZXN0IGZpeHR1cmUNCisgKg0KKyAqIEEgdGVzdCBmaXh0dXJlIHRvIHJlcHJvIGEgc3BlY2lmaWMg cmFjZSBjb25kaXRpb24gaW4gdGhlDQorICogRnJlZUJTRCBrZXJuZWwgYW1kNjQgcG1hcCBjb2Rl Lg0KKyAqDQorICogVGhlIHRlc3QgZml4dHVyZSBoYXMgY29tcG9uZW50cyBpbiB0aGUga2VybmVs IGFuZCB1c2Vyc3BhY2UuDQorICogQSBzeXNjdGwgaG9vayBpbiB0aGUga2VybmVsIGlzIGNhbGxl ZCBmcm9tIHVzZXJzcGFjZSB0byBhbGxvY2F0ZQ0KKyAqIGEgcmVnaW9uIG9mIG1lbW9yeSBpbiB0 aGUga2VybmVsLCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB3aGljaA0KKyAqIGlzIG1tYXBlZCBz b21ld2hlcmUgaW50byB0aGUgdGVzdCBwcm9jZXNzLiAgNjQtYml0cyBvZiB0aGlzIHJlZ2lvbg0K KyAqIGlzIHRoZW4gYXRvbWljYWxseSBtYW5pcHVsYXRlZCBpbiBib3RoIGtlcm5lbCBhbmQgdXNl cnNwYWNlIHRvDQorICogaGVscCBjb29yZGluYXRlIHRlc3QgYWN0aW9ucy4gIFRoaXMgY29vcmRp bmF0aW9uIGlzIG5vdGhpbmcgbW9yZQ0KKyAqIHRoZW4gYml0LWZsYWcgY2hhbmdpbmcgJiAic3Bp bi13YWl0IiBsb29wcyBpbnRlbmRlZCB0byBhZHZhbmNlDQorICogYWN0aW9ucyBpbiBhIHNwZWNp ZmljIHNlcXVlbmNlLiAgVGhlIHRlc3QgY3JlYXRlcyB0aHJlZSB0aHJlYWRzOg0KKyAqIGEgZmF1 bHRlciwgYSB3cml0ZXIsIGFuZCBhIHJlYWRlci4gIFRoZSBtYWluIHByb2Nlc3MgdXBkYXRlcw0K KyAqIHRoZSB2YWx1ZSBhdCBhIHZpcnR1YWwgYWRkcmVzcyB0byBhIGtub3duIHN0YXRlIHVuZGVy IGEgbG9jay4NCisgKiBUaGUgcHJvY2VzcyBpcyBmb3JrZWQgYW5kIGhlbGQgdG8ga2VlcCB0aGUg dm0gZW50cmllcyBpbiBhDQorICogY29weS1vbi13cml0ZSBzdGF0ZS4gIFRoZSBmYXVsdGVyIHRo cmVhZCBpcyBhd29rZW4gdG8gdHJhcCBpbg0KKyAqIHRoZSBrZXJuZWwgdG8gcGVyZm9ybSB0aGUg Y29weS1vbi13cml0ZSBvcGVyYXRpb24gZm9yIGEgcGFnZS4NCisgKiBPbmNlIHRoZSBwbWFwIHBh Z2UgdXBkYXRlIHRoYXQgYXBwbGllcyB0aGUgbmV3IHBoeXNpY2FsIGFkZHJlc3MNCisgKiBBTkQg dGhlIGNsZWFyaW5nIG9mIHRoZSByZWFkLW9ubHkgc3RhdGUgaGFzIG9jY3VycmVkIHRoZSB3cml0 ZXINCisgKiBhbmQgcmVhZGVyIHRocmVhZHMgYXJlIHJlbGVhc2VkLiAgVGhlIHJlYWRlciB0aHJl YWQgY29udGludWFsbHkNCisgKiByZWFkcyB0aGUgdmFsdWUgdW5kZXIgbG9jayB0d2ljZSBhbmQg ZW5zdXJlcyB0aGUgdmFsdWVzIHJlYWQgYXJlDQorICogdGhlIHNhbWUuICBUaGUgd3JpdGVyIHRo cmVhZCBjaGFuZ2VzIHRoZSB2YWx1ZSB1bmRlciB0aGUgbG9jay4NCisgKiBUaGUgaXRlcmF0aW9u IHN0b3BzIG9uY2UgdGhlIGZhdWx0IGhhbmRsaW5nIGhhcyBiZWVuIGNvbXBsZXRlZC4NCisgKiBU aGlzIHdob2xlIHRlc3QgY3ljbGUgaXMgcmVwZWF0ZWQgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBp dGVyYXRpb25zLg0KKyAqDQorICogVGhlIGV4cGVjdGVkICJ3b3JraW5nIiBiZWhhdmlvciBmcm9t IHRoZSBPUyBpcyB0aGF0IGJlY2F1c2UgdGhlDQorICogdGVzdCB2YWx1ZSBpcyBhbHdheXMgbW9k aWZpZWQgYW5kIHJlYWQgdW5kZXIgdGhlIHNhbWUgbG9jaywgdGhhdCBpdA0KKyAqIHNob3VsZCBu b3QgYmUgcG9zc2libGUgZm9yIGEgdGhyZWFkIHRvIHJlYWQgdGhlIHZhbHVlIHR3aWNlIGFuZCBz ZWUNCisgKiBhIGNoYW5nZSBpbiB2YWx1ZS4gIEluIHByYWN0aWNlIGEgIm1pc21hdGNoIiBjYW4g YmUgb2JzZXJ2ZWQsIHByZXN1bWFibHkNCisgKiBpZiB0aGUgVExCIGlzIGludmFsaWRhdGVkIGZv ciB0aGUgQ1BVIHRoZSByZWFkZXIgdGhyZWFkIGlzIHJ1bm5pbmcNCisgKiBvbiBpbi1iZXR3ZWVu IHN1Y2Nlc3NpdmUgcmVhZHMuDQorICoNCisgKiBUaGUgZXhwZWN0ZWQgIndvcmtpbmciIGJlaGF2 aW9yIGZyb20gdGhlIHRlc3QgZml4dHVyZSBiZWxvdyB3aGVuIGl0DQorICogZGV0ZWN0cyB0aGUg cHJvYmxlbSBpcyB0byBlcnJvciBvdXQgd2l0aCBhIG5vbi16ZXJvIGV4aXQgY29kZQ0KKyAqIGRp c3BsYXlpbmcgImNvbXBsZXRlIE1JU01BVENIIiB3aGVuIHRoZSByZWFkZXIgdGhyZWFkIHNlZXMg dGhlDQorICogaWxsZWdhbCB2YWx1ZSBjaGFuZ2UuDQorICoNCisgKiBUaGlzIHRlc3QgaXMgZXhw ZWN0ZWQgdG8gcnVuIG9ubHkgb24gYW4geDg2XzY0IHBsYXRmb3JtIHdpdGggYXQNCisgKiBsZWFz dCA0IENQVXMgY29uZmlndXJlZCBmb3IgU01QLiAgSXQgaXMgbm90IGV4cGVjdGVkIHRvIHdvcmsg KG5vcg0KKyAqIHdhcyBpdCBldmVyIHRyaWVkKSBvbiBhbnkgb3RoZXIgYXJjaGl0ZWN0dXJlIHR5 cGVzIG9yIHBsYXRmb3JtcyB3aXRoDQorICogc21hbGxlciBDUFUgY291bnRzLiAgSXQgYWxzbyB1 c2VzIHRoZSAicmR0c2NwIiBpbnN0cnVjdGlvbg0KKyAqIHdoZW4gZ2VuZXJhdGluZyBkZWJ1Z2dp bmcgaW5mbyB0byBoZWxwIGNvcnJlbGF0ZSBhY3Rpb25zIG9jY3VycmluZw0KKyAqIGFjcm9zcyBk aWZmZXJlbnQgQ1BVcy9UU0NzLiAgSWYgdGhpcyBpcyBub3QgYXZhaWxhYmxlLCB0aGUgZml4dHVy ZQ0KKyAqIHdpbGwgY29yZSBhdHRlbXB0aW5nIHRvIGV4ZWN1dGUgYW4gaWxsZWdhbCBpbnN0cnVj dGlvbi4gIFRoZSBUU0MNCisgKiBNU1IgQVVYIGNhbiBiZSBzZWVkZWQgd2l0aCB0aGUgQ1BVIElE IGZyb20gYSBzaGVsbCBsaWtlIHRoaXM6DQorICogcm9vdEA6L3Vzci9zcmMvc3lzL3ZtICMgbXNy X3RzY19hdXg9MHhjMDAwMDEwMzsgbWF4X2NwdV9pZD1gc3lzY3RsIC1uIGtlcm4uc21wLm1heGlk YDsgY3B1PTANCisgKiByb290QDovdXNyL3NyYy9zeXMvdm0gIyB3aGlsZSBbICR7Y3B1fSAtbGUg JHttYXhfY3B1X2lkfSBdOyBkbyBjcHVoZXg9YHByaW50ZiAweCV4ICR7Y3B1fWA7IGNwdWNvbnRy b2wgLW0gIiR7bXNyX3RzY19hdXh9PSR7Y3B1aGV4fSIgIi9kZXYvY3B1Y3RsJHtjcHV9IjsgY3B1 PWBleHByICIke2NwdX0iICsgMWA7IGRvbmUNCisgKg0KKyAqIE5PVEU6ICBBbHRob3VnaCBJIGhh dmUgc2VlbiBpdCBmYWlsIG9jY2FzaW9uYWxseSBvbiB0ZXN0IHZpcnR1YWwgbWFjaGluZXMsDQor ICogdGhlIGZpeHR1cmUgaXMgZmFyIG1vcmUgcmVsaWFibGUgb24gcmVhbCBoYXJkd2FyZSAodXN1 YWxseSBmYWlscyBpbiBhIGZldyBzZWNvbmRzKS4NCisgKiBUaGUgdGltaW5nIG5lY2Vzc2FyeSB0 byBoaXQgdGhpcyByYWNlIGNvbmRpdGlvbiBzZWVtcyB2ZXJ5IGRlbGljYXRlLg0KKyAqDQorICog VGhlIHRlc3QgZml4dHVyZSByZXF1aXJlcyBhIGtlcm5lbCBidWlsdCB3LyB0aGUgdGVzdCBob29r cyBhcyB3ZWxsLg0KKyAqIEFwcGx5IHRoZSB0ZXN0IGNvZGUgcGF0Y2ggZnJvbSAvdXNyL3NyYywg cmVidWlsZCBhbmQgYm9vdCBpbnRvIHRoZSBrZXJuZWwuDQorICogVGhlIHRlc3QgZml4dHVyZSBj YW4gYmUgYnVpbHQgZnJvbSB3aXRoIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoNCisgKiByb290QDov dXNyL3NyYy9zeXMvdm0gIyBjbGFuZyAtV2FsbCAtZyAtTzAgZm9ya2luZ19zdGFsZS5jIC1vIGZv cmtpbmdfc3RhbGUgLWxwdGhyZWFkDQorICoNCisgKiBFeGFtcGxlIG91dHB1dCBpZiB0aGUgZml4 dHVyZSBkZXRlY3RzIHRoZSBwcm9ibGVtOg0KKyAqDQorICogcm9vdEA6L3Vzci9zcmMvc3lzL3Zt ICMgLi9mb3JraW5nX3N0YWxlIC12ID4gL2Rldi9udWxsDQorICogUlVOVElNRSBQQVJBTVM6bml0 ZXJzIDEwMDAwMA0KKyAqIEVSUk9SOiBNaXNtYXRjaDogT2xkPTAsIE5ldz0xDQorICogcnVudGlt ZSAoc2VjKSAwLjM3ODY2Nw0KKyAqIGZvcmtzIDExNDkNCisgKiBmYXVsdGVyIGl0ZXJzIDExNDkN CisgKiB3cml0ZXIgaXRlcnMgMTE0OQ0KKyAqIHJlYWRlciBpdGVycyA5MDYzDQorICogcmVhZGVy IHZhbHVlIG9sZCA2NDk4DQorICogcmVhZGVyIHZhbHVlIG5ldyAyNTY1DQorICogcG1hcHN0YWxs cyAxMTQ5DQorICogbWlzbWF0Y2hlcyAxDQorICogY29tcGxldGlvbiByZWFzb24gTUlTTUFUQ0gN CisgKiBleGl0IDENCisgKg0KKyAqIERlYnVnZ2luZzoNCisgKg0KKyAqIFRoZSBmaXh0dXJlIGNh biBiZSBkaXJlY3RlZCB0byBjYXB0dXJlIHJ1bnRpbWUgZGVidWdnaW5nIGFib3V0IHRoZSB0aW1p bmcgYW5kDQorICogYWN0aW9ucyBsZWFkaW5nIHVwIHRvIHRoZSBtaXNtYXRjaC4gIFRvIHVzZSB0 aGlzLCBhIGNvbW1hbmQgbGlrZSB0aGlzIHdpbGwNCisgKiBpbnRlcmxlYXZlIGJvdGggdXNlcnNw YWNlIGFuZCBrZXJuZWwgZGVidWdnaW5nIGluZm86DQorICoNCisgKiBFeGFtcGxlIGNvbW1hbmQg dG8gZ2VuZXJhdGUgZGVidWcgdGltaW5nIGRhdGEgaW4gYSBmaWxlIG5hbWVkICdmcl9zb3J0ZWQu dHh0Jw0KKyAqIC4vZm9ya2luZ19zdGFsZSAtdiA+IGZyLnR4dDsgc3lzY3RsIC1uIGtlcm4uZnN0 Zl9kZWJ1Z19vdXRwdXQgPj4gZnIudHh0ICYmIGNhdCBmci50eHQgfCBzb3J0ID4gZnJfc29ydGVk LnR4dA0KKyAqDQorICogT3V0cHV0IGFib3ZlIHRoZSBmb2xsb3dpbmcgbGluZSBpcyBmcm9tIGEg cHJldmlvdXMgaXRlcmF0aW9uIGFuZCBzaG91bGQgYmUgaWdub3JlZDoNCisgKiBUU0M6ICAgIDQw MjU2MDY1MDc1MTc1IENQVTowMCBUSUQ6MTAwMTg3IEZvcmtlciAgICAgQ09ERTpmb3JraW5nX3N0 YWxlLmM6MDQ4MSBTVEFURToweDAwMDAwMDAwMDAwMDAwMDcgTVNHOlRlc3QgaG9vayBhY3RpdmUu Li4NCisgKg0KKyAqLw0KKw0KKyNpbmNsdWRlIDxwdGhyZWFkLmg+DQorI2luY2x1ZGUgPHB0aHJl YWRfbnAuaD4NCisjaW5jbHVkZSA8dW5pc3RkLmg+DQorI2luY2x1ZGUgPHN0ZGxpYi5oPg0KKyNp bmNsdWRlIDxzdHJpbmcuaD4NCisjaW5jbHVkZSA8c3RkaW8uaD4NCisjaW5jbHVkZSA8c3RkaW50 Lmg+DQorI2luY2x1ZGUgPGVycm5vLmg+DQorI2luY2x1ZGUgPGZjbnRsLmg+DQorI2luY2x1ZGUg PHNpZ25hbC5oPg0KKw0KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4NCisjaW5jbHVkZSA8c3lzL2Nw dXNldC5oPg0KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCisjaW5jbHVkZSA8c3lzL3dhaXQuaD4N CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4NCisjaW5j bHVkZSA8c3lzL21tYW4uaD4NCisNCisjaW5jbHVkZSA8bWFjaGluZS9hdG9taWMuaD4NCisjaW5j bHVkZSA8bWFjaGluZS9zdGRhcmcuaD4NCisNCisjaW5jbHVkZSAiZm9ya2luZ19zdGFsZS5oIg0K Kw0KKyNkZWZpbmUgdmFsdWVfb2xkIDANCisjZGVmaW5lIHZhbHVlX25ldyAxDQorDQorI2RlZmlu ZSBvcHRfaXRlcmF0aW9uc19kZWZhdWx0IDEwMDAwMGx1DQorDQorc3RhdGljIGludCBmb3JrX2Z1 bmMoKTsNCitzdGF0aWMgdm9pZCAqIG1haW5fZnVuYyh2b2lkICopOw0KK3N0YXRpYyB2b2lkICog ZmF1bHRlcl9mdW5jKHZvaWQgKik7DQorc3RhdGljIHZvaWQgKiB3cml0ZXJfZnVuYyh2b2lkICop Ow0KK3N0YXRpYyB2b2lkICogcmVhZGVyX2Z1bmModm9pZCAqKTsNCisNCisvLyBBIHN0cnVjdHVy ZSBob3VzZWQgb24gdGhlIG1lbW9yeSBwYWdlIHdlIHdpbGwgYmUgdGVzdGluZw0KK3N0cnVjdCB0 ZXN0X2RhdGENCit7DQorICAgIHVpbnQ2NF90IHZhbHVlOw0KKyAgICB1aW50NjRfdCBzb21ldGhp bmdfZWxzZTsNCit9Ow0KKw0KKy8vIFRoZSBtaXNjZWxsYW5lb3VzIHN0dWZmIG5lY2Vzc2FyeSB0 byBwZXJmb3JtIHRoZSB0ZXN0aW5nDQorc3RydWN0IHRlc3RfbWFjaGluZXJ5DQorew0KKyAgICBw dGhyZWFkX211dGV4YXR0cl90IG1hdHRyOw0KKyAgICBwdGhyZWFkX211dGV4X3QgbXV0ZXg7DQor ICAgIHB0aHJlYWRfYXR0cl90IHRhdHRyOw0KKyAgICBpbnQgbWFpbl90aWQ7DQorICAgIHB0aHJl YWRfdCBmYXVsdGVyOw0KKyAgICBpbnQgZmF1bHRlcl90aWQ7DQorICAgIHVpbnQ2NF90IGZhdWx0 ZXJfaXRlcnM7DQorICAgIHB0aHJlYWRfdCB3cml0ZXI7DQorICAgIGludCB3cml0ZXJfdGlkOw0K KyAgICB1aW50NjRfdCB3cml0ZXJfaXRlcnM7DQorICAgIHB0aHJlYWRfdCByZWFkZXI7DQorICAg IGludCByZWFkZXJfdGlkOw0KKyAgICB1aW50NjRfdCByZWFkZXJfaXRlcnM7DQorICAgIGludCBm b3JrX3RpZDsNCisgICAgdWludDY0X3QgdHNjX2ZyZXE7DQorICAgIHVpbnQ2NF90IGZvcmtzOw0K KyAgICB1aW50NjRfdCBwbWFwc3RhbGxzOw0KKyAgICB1aW50NjRfdCBvbGRfZGF0YTsNCisgICAg dWludDY0X3QgbmV3X2RhdGE7DQorICAgIHVpbnQ2NF90IG1pc21hdGNoZXM7DQorICAgIHVpbnQ2 NF90IGRlYnVnX3ZhbHVlOw0KKyAgICBsb25nIG9wdF9pdGVyYXRpb25zOw0KKyAgICBpbnQgb3B0 X2Vhcmx5X2Vycm9yX2V4aXQ7DQorICAgIGludCBvcHRfd2lyZWQ7DQorICAgIHN0cnVjdCB0ZXN0 X2RhdGEgKiB0ZXN0X2RhdGE7DQorICAgIHZvbGF0aWxlIHVpbnQ2NF90ICogc3RhdGVfY29udHJv bDsNCisgICAgdWludDY0X3Qgc3RhdGVfY29udHJvbF9waHlzOw0KKyAgICBzdHJ1Y3QgZnN0Zl9k ZWJ1Z19kYXRhIGRlYnVnX2VudHJpZXNbRlNURl9ERUJVR19OVU1CRVJfRU5UUklFU107DQorICAg IHVfaW50IGRlYnVnX3Bvc2l0aW9uOw0KK30gKiB0ZXN0Ow0KKw0KK3N0YXRpYyBfX3RocmVhZCBp bnQgbGNsX3RpZCA9IDA7DQorDQorLy8gSW5pdGlhbGl6ZSBhbnkgJ3Rlc3RfbWFjaGluZXJ5JyB2 YWx1ZXMNCitzdGF0aWMgdm9pZCB0ZXN0X21hY2hpbmVyeV9pbml0KHZvaWQpDQorew0KKyAgICBt ZW1zZXQodGVzdCwgMHgwLCBzaXplb2Yoc3RydWN0IHRlc3RfbWFjaGluZXJ5KSk7DQorICAgIHRl c3QtPm9wdF9pdGVyYXRpb25zID0gb3B0X2l0ZXJhdGlvbnNfZGVmYXVsdDsNCisgICAgdGVzdC0+ b3B0X2Vhcmx5X2Vycm9yX2V4aXQgPSAxOw0KK30NCisNCisvLyBEZXNjcmliZSBhIHRpZCB0byBt YWtlIGRlYnVnIG91dHB1dCBtb3JlIHJlYWRhYmxlDQorc3RhdGljIGNvbnN0IGNoYXIgKiB0ZXN0 X2FjdG9yX2Rlc2NyKGludCB0aWQpDQorew0KKyAgICBjaGFyICogZGVzYyA9ICI8dW5rbm93bj4i Ow0KKyAgICBpZiAodGlkID09IHRlc3QtPm1haW5fdGlkKQ0KKyAgICB7DQorICAgICAgICBkZXNj ID0gIkZvcmtlciI7DQorICAgIH0NCisgICAgZWxzZSBpZiAodGlkID09IHRlc3QtPmZhdWx0ZXJf dGlkKQ0KKyAgICB7DQorICAgICAgICBkZXNjID0gIkZhdWx0ZXIiOw0KKyAgICB9DQorICAgIGVs c2UgaWYgKHRpZCA9PSB0ZXN0LT53cml0ZXJfdGlkKQ0KKyAgICB7DQorICAgICAgICBkZXNjID0g IldyaXRlciI7DQorICAgIH0NCisgICAgZWxzZSBpZiAodGlkID09IHRlc3QtPnJlYWRlcl90aWQp DQorICAgIHsNCisgICAgICAgIGRlc2MgPSAiUmVhZGVyIjsNCisgICAgfQ0KKyAgICBlbHNlIGlm ICh0aWQgPT0gdGVzdC0+Zm9ya190aWQpDQorICAgIHsNCisgICAgICAgIGRlc2MgPSAiRm9ya2Vl IjsNCisgICAgfQ0KKyAgICByZXR1cm4gKGRlc2MpOw0KK30NCisNCisvLyBSZXRyaWV2ZSB0aGUg dGlkIGZvciB0aGUgY3VycmVudCB0aHJlYWQNCitzdGF0aWMgaW50IGdldF9jdXJyZW50X3RpZCh2 b2lkKQ0KK3sNCisgICAgaWYgKGxjbF90aWQgPT0gMCkNCisgICAgew0KKyAgICAgICAgbGNsX3Rp ZCA9IHB0aHJlYWRfZ2V0dGhyZWFkaWRfbnAoKTsNCisgICAgfQ0KKyAgICByZXR1cm4gKGxjbF90 aWQpOw0KK30NCisNCisvLyBCZXN0IGVmZm9ydCBzZXQgb2YgdGhlIG5hbWUgb2YgdGhlIGN1cnJl bnQgdGhyZWFkDQorc3RhdGljIHZvaWQgc2V0X2N1cnJlbnRfdGhyZWFkX25hbWUodm9pZCkNCit7 DQorICAgIHB0aHJlYWRfc2V0X25hbWVfbnAocHRocmVhZF9zZWxmKCksIHRlc3RfYWN0b3JfZGVz Y3IoZ2V0X2N1cnJlbnRfdGlkKCkpKTsNCit9DQorDQorLy8gR2V0IHRoZSBsb2NhdGlvbiBvZiBh IDY0LWJpdCByZWdpb24gc3RhdGUvY29udHJvbCByZWdpb24gc2hhcmVkIGJ5IHVzZXJzcGFjZSBh bmQgdGhlIGtlcm5lbA0KK3ZvbGF0aWxlIHVpbnQ2NF90ICogZnN0Zl9zdGF0ZV9jb250cm9sKHZv aWQpDQorew0KKyAgICByZXR1cm4gKHRlc3QtPnN0YXRlX2NvbnRyb2wpOw0KK30NCisNCisvLyBH ZXQgdGhlIHRzYyBmcmVxdWVuY3kNCit1aW50NjRfdCBmc3RmX3RzY19mcmVxdWVuY3lfc2Vjb25k cyh2b2lkKQ0KK3sNCisgICAgcmV0dXJuICh0ZXN0LT50c2NfZnJlcSk7DQorfQ0KKw0KKy8vIEZh c3QgZm9ybWF0dGVkIGRlYnVnDQordm9pZCBmc3RmX2RlYnVnX2Zhc3QoY29uc3QgY2hhciAqIGZp bGUsIGludCBsaW5lLCB1aW50MzJfdCB0eXBlLCB1aW50NjRfdCBzdGF0ZSkNCit7DQorICAgIGlm ICh0ZXN0LT5kZWJ1Z192YWx1ZSkNCisgICAgew0KKyAgICAgICAgaW50IHBvcyA9IEZTVEZfREVC VUdfUE9TSVRJT05fSU5ERVgoYXRvbWljX2ZldGNoYWRkX2ludCgmdGVzdC0+ZGVidWdfcG9zaXRp b24sIDEpKTsNCisNCisgICAgICAgIHRlc3QtPmRlYnVnX2VudHJpZXNbcG9zXS50c2MgPSBmc3Rm X3RzY19hbmRfYXV4KCZ0ZXN0LT5kZWJ1Z19lbnRyaWVzW3Bvc10uYXV4KTsNCisgICAgICAgIHRl c3QtPmRlYnVnX2VudHJpZXNbcG9zXS50aWQgPSBnZXRfY3VycmVudF90aWQoKTsNCisgICAgICAg IHRlc3QtPmRlYnVnX2VudHJpZXNbcG9zXS5maWxlID0gZmlsZTsNCisgICAgICAgIHRlc3QtPmRl YnVnX2VudHJpZXNbcG9zXS5saW5lID0gbGluZTsNCisgICAgICAgIHRlc3QtPmRlYnVnX2VudHJp ZXNbcG9zXS5zdGF0ZSA9IHN0YXRlOw0KKyAgICAgICAgdGVzdC0+ZGVidWdfZW50cmllc1twb3Nd LmRiZ190eXBlID0gdHlwZTsNCisgICAgfQ0KK30NCisNCisvLyBNaXNjIHRleHQgZGVidWcNCit2 b2lkIGZzdGZfZGVidWdfbWlzYyhjb25zdCBjaGFyICogZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNo YXIgKmZtdCwgLi4uKQ0KK3sNCisgICAgaWYgKHRlc3QtPmRlYnVnX3ZhbHVlKQ0KKyAgICB7DQor ICAgICAgICBjaGFyIGJ1ZmZlclsxMDI0XTsNCisgICAgICAgIHZhX2xpc3QgYXA7DQorDQorICAg ICAgICB2YV9zdGFydChhcCwgZm10KTsNCisNCisgICAgICAgIHZzbnByaW50ZihidWZmZXIsIHNp emVvZihidWZmZXIpLCBmbXQsIGFwKTsNCisNCisgICAgICAgIHZhX2VuZChhcCk7DQorDQorICAg ICAgICB1aW50NjRfdCB0c3QgPSBmc3RmX3N0YXRlX3ZhbHVlKCk7DQorDQorICAgICAgICBpbnQg cG9zID0gRlNURl9ERUJVR19QT1NJVElPTl9JTkRFWChhdG9taWNfZmV0Y2hhZGRfaW50KCZ0ZXN0 LT5kZWJ1Z19wb3NpdGlvbiwgMSkpOw0KKw0KKyAgICAgICAgdWludDMyX3QgYXV4Ow0KKyAgICAg ICAgdWludDY0X3QgdHNjID0gZnN0Zl90c2NfYW5kX2F1eCgmYXV4KTsNCisgICAgICAgIHRlc3Qt PmRlYnVnX2VudHJpZXNbcG9zXS5kYmdfdHlwZSA9IEZTVEZfREVCVUdfVFlQRV9NSVNDRUxMQU5F T1VTOw0KKw0KKyAgICAgICAgdmFfc3RhcnQoYXAsIGZtdCk7DQorDQorICAgICAgICBpbnQgdGlk ID0gZ2V0X2N1cnJlbnRfdGlkKCk7DQorDQorICAgICAgICBzbnByaW50Zih0ZXN0LT5kZWJ1Z19l bnRyaWVzW3Bvc10ubWlzYywNCisgICAgICAgICAgICAgICAgIHNpemVvZih0ZXN0LT5kZWJ1Z19l bnRyaWVzW3Bvc10ubWlzYyksDQorICAgICAgICAgICAgICAgICBGU1RGX0RFQlVHX0ZPUk1BVF9T VFIsDQorICAgICAgICAgICAgICAgICB0c2MsDQorICAgICAgICAgICAgICAgICBhdXgsDQorICAg ICAgICAgICAgICAgICB0aWQsDQorICAgICAgICAgICAgICAgICB0ZXN0X2FjdG9yX2Rlc2NyKHRp ZCksDQorICAgICAgICAgICAgICAgICBmaWxlLA0KKyAgICAgICAgICAgICAgICAgbGluZSwNCisg ICAgICAgICAgICAgICAgIHRzdCwNCisgICAgICAgICAgICAgICAgIGJ1ZmZlcik7DQorDQorICAg ICAgICB2YV9lbmQoYXApOw0KKyAgICB9DQorfQ0KKw0KKy8vIEdlbmVyYWwgZGVidWdnaW5nL3Rl eHQgb3V0cHV0DQorc3RhdGljIHZvaWQgZGVidWdfb3V0cHV0KGNvbnN0IGNoYXIgKmZtdCwgLi4u KQ0KK3sNCisgICAgdmFfbGlzdCBhcDsNCisNCisgICAgdmFfc3RhcnQoYXAsIGZtdCk7DQorDQor ICAgIHZwcmludGYoZm10LCBhcCk7DQorDQorICAgIHZhX2VuZChhcCk7DQorfQ0KKw0KKy8vIEdl bmVyYWwgc3RhdHMvZXJyb3Igb3V0cHV0DQorc3RhdGljIHZvaWQgY29uc29sZV9vdXRwdXQoY29u c3QgY2hhciAqZm10LCAuLi4pDQorew0KKyAgICB2YV9saXN0IGFwOw0KKw0KKyAgICB2YV9zdGFy dChhcCwgZm10KTsNCisNCisgICAgdmZwcmludGYoc3RkZXJyLCBmbXQsIGFwKTsNCisNCisgICAg dmFfZW5kKGFwKTsNCit9DQorDQorLy8gVHJhdmVyc2UgdGhlIGNhcHR1cmVkIGRlYnVnIGVudHJp ZXMgYW5kIG91dHB1dCB0aGVtDQorc3RhdGljIHZvaWQgZHVtcF9kZWJ1Zyh2b2lkKQ0KK3sNCisg ICAgaW50IG51bTsNCisgICAgZm9yIChudW0gPSAwOyBudW0gPCBGU1RGX0RFQlVHX05VTUJFUl9F TlRSSUVTOyBudW0rKykNCisgICAgew0KKyAgICAgICAgaWYgKHRlc3QtPmRlYnVnX2VudHJpZXNb bnVtXS5kYmdfdHlwZSAhPSBGU1RGX0RFQlVHX1RZUEVfVU5VU0VEKQ0KKyAgICAgICAgew0KKyAg ICAgICAgICAgIGlmICh0ZXN0LT5kZWJ1Z19lbnRyaWVzW251bV0uZGJnX3R5cGUgPT0gRlNURl9E RUJVR19UWVBFX01JU0NFTExBTkVPVVMpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAg ICBkZWJ1Z19vdXRwdXQoIiVzIiwgdGVzdC0+ZGVidWdfZW50cmllc1tudW1dLm1pc2MpOw0KKyAg ICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgew0KKyAgICAgICAg ICAgICAgICBjaGFyIG1zZ1sxMDI0XTsNCisgICAgICAgICAgICAgICAgY2hhciB0ZW1wWzEwMjRd Ow0KKyAgICAgICAgICAgICAgICBjaGFyIGJ1ZmZlclsxMDI0XTsNCisNCisgICAgICAgICAgICAg ICAgZnN0Zl9kZWJ1Z19maWxsX3N0YXRlX2Rlc2NyKHRlc3QtPmRlYnVnX2VudHJpZXNbbnVtXS5z dGF0ZSwgdGVtcCwgc2l6ZW9mKGJ1ZmZlcikpOw0KKw0KKyAgICAgICAgICAgICAgICBzbnByaW50 Zihtc2csDQorICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihtc2cpLA0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAiU3RhdGU6ICVzICgweCUwMTZseCkgWyVzXVxuIiwNCisgICAgICAg ICAgICAgICAgICAgICAgICAgdGVtcCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdC0+ ZGVidWdfZW50cmllc1tudW1dLnN0YXRlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICBmc3Rm X2RlYnVnX3R5cGVfZGVzY3IodGVzdC0+ZGVidWdfZW50cmllc1tudW1dLmRiZ190eXBlKSk7DQor DQorICAgICAgICAgICAgICAgIHNucHJpbnRmKGJ1ZmZlciwNCisgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZW9mKGJ1ZmZlciksDQorICAgICAgICAgICAgICAgICAgICAgICAgIEZTVEZfREVC VUdfRk9STUFUX1NUUiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdC0+ZGVidWdfZW50 cmllc1tudW1dLnRzYywNCisgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdC0+ZGVidWdfZW50 cmllc1tudW1dLmF1eCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdC0+ZGVidWdfZW50 cmllc1tudW1dLnRpZCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9hY3Rvcl9kZXNj cih0ZXN0LT5kZWJ1Z19lbnRyaWVzW251bV0udGlkKSwNCisgICAgICAgICAgICAgICAgICAgICAg ICAgZnN0Zl9zdHJpcF9maWxlX3BhdGgoX19GSUxFX18pLA0KKyAgICAgICAgICAgICAgICAgICAg ICAgICB0ZXN0LT5kZWJ1Z19lbnRyaWVzW251bV0ubGluZSwNCisgICAgICAgICAgICAgICAgICAg ICAgICAgdGVzdC0+ZGVidWdfZW50cmllc1tudW1dLnN0YXRlLA0KKyAgICAgICAgICAgICAgICAg ICAgICAgICBtc2cpOw0KKw0KKyAgICAgICAgICAgICAgICBkZWJ1Z19vdXRwdXQoIiVzIiwgYnVm ZmVyKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQorLy8gR2V0 IHRoZSBmZCBpbnQgZm9yIC9kZXYvbWVtDQorc3RhdGljIGludCBkZXZfbWVtX2ZkKHZvaWQpDQor ew0KKyAgICBzdGF0aWMgaW50IG1lbWZkID0gLTE7DQorICAgIGlmIChtZW1mZCA8IDApDQorICAg IHsNCisgICAgICAgIG1lbWZkID0gb3BlbigiL2Rldi9tZW0iLCBPX1JEV1J8T19DTE9FWEVDKTsN CisgICAgfQ0KKyAgICByZXR1cm4gKG1lbWZkKTsNCit9DQorDQorLy8gUHJlcGFyZSBzb21lIHN0 dWZmIGZvciB0aHJlYWRpbmcNCitzdGF0aWMgaW50IHRocmVhZF9wcmVwKHZvaWQpDQorew0KKyAg ICBpZiAoKHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoJnRlc3QtPm1hdHRyKSAhPSAwKSB8fA0KKyAg ICAgICAgKHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoJnRlc3QtPm1hdHRyLCBQVEhSRUFEX01V VEVYX0FEQVBUSVZFX05QKSAhPSAwKSkNCisNCisgICAgew0KKyAgICAgICAgY29uc29sZV9vdXRw dXQoIkVSUk9SOiB0ZXN0IHNldHRpbmcgdXAgbXV0ZXggYXR0cmlidXRlIGZvciBBZGFwdGl2ZU5Q XG4iKTsNCisgICAgICAgIHJldHVybiAoMSk7DQorICAgIH0NCisNCisgICAgaWYgKHB0aHJlYWRf bXV0ZXhfaW5pdCgmdGVzdC0+bXV0ZXgsICZ0ZXN0LT5tYXR0cikgIT0gMCkNCisgICAgew0KKyAg ICAgICAgY29uc29sZV9vdXRwdXQoIkVSUk9SOiB0ZXN0IGluaXRpYWxpemluZyBtdXRleFxuIik7 DQorICAgICAgICByZXR1cm4gKDEpOw0KKyAgICB9DQorDQorICAgIGlmIChwdGhyZWFkX2F0dHJf aW5pdCgmdGVzdC0+dGF0dHIpICE9IDApDQorICAgIHsNCisgICAgICAgIGNvbnNvbGVfb3V0cHV0 KCJFUlJPUjogdGVzdCBpbml0aWFsaXppbmcgcHRocmVhZCBhdHRyXG4iKTsNCisgICAgICAgIHJl dHVybiAoMSk7DQorICAgIH0NCisNCisgICAgaWYgKHB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0 ZSgmdGVzdC0+dGF0dHIsIFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFKSAhPSAwKQ0KKyAgICB7DQor ICAgICAgICBjb25zb2xlX291dHB1dCgiRVJST1I6IHRlc3Qgc2V0dGluZyBwdGhyZWFkIGF0dHIg am9pbmFibGVcbiIpOw0KKyAgICAgICAgcmV0dXJuICgxKTsNCisgICAgfQ0KKw0KKyAgICByZXR1 cm4gKDApOw0KK30NCisNCisvLyBDcmVhdGUgYW5kIHN0YXJ0IHRlc3QgdGhlcmFkcyBhbmQgc2V0 dXAgYWZmaW5pdGllcw0KK3N0YXRpYyBpbnQgc3RhcnRfdGhyZWFkcyh2b2lkKQ0KK3sNCisgICAg aW50IHJjOw0KKyAgICBjcHVzZXRfdCB0aGVjcHVzZXQ7DQorDQorICAgIENQVV9aRVJPKCZ0aGVj cHVzZXQpOw0KKyAgICBDUFVfU0VUKDAsICZ0aGVjcHVzZXQpOw0KKyAgICByYyA9IHB0aHJlYWRf c2V0YWZmaW5pdHlfbnAocHRocmVhZF9zZWxmKCksIHNpemVvZihjcHVzZXRfdCksICZ0aGVjcHVz ZXQpOw0KKyAgICBpZiAocmMgIT0gMCkNCisgICAgew0KKyAgICAgICAgY29uc29sZV9vdXRwdXQo IkVSUk9SOiBwdGhyZWFkX3NldGFmZmluaXR5X25wKCkgbWFpblxuIik7DQorICAgICAgICByZXR1 cm4gKDEpOw0KKyAgICB9DQorDQorICAgIHJjID0gcHRocmVhZF9jcmVhdGUoJnRlc3QtPmZhdWx0 ZXIsICZ0ZXN0LT50YXR0ciwgZmF1bHRlcl9mdW5jLCBOVUxMKTsNCisgICAgaWYgKHJjICE9IDAp DQorICAgIHsNCisgICAgICAgIGNvbnNvbGVfb3V0cHV0KCJFUlJPUjogcHRocmVhZF9jcmVhdGUo KSBmYXVsdGVyXG4iKTsNCisgICAgICAgIHJldHVybiAoMSk7DQorICAgIH0NCisgICAgQ1BVX1pF Uk8oJnRoZWNwdXNldCk7DQorICAgIENQVV9TRVQoMSwgJnRoZWNwdXNldCk7DQorICAgIHJjID0g cHRocmVhZF9zZXRhZmZpbml0eV9ucCh0ZXN0LT5mYXVsdGVyLCBzaXplb2YoY3B1c2V0X3QpLCAm dGhlY3B1c2V0KTsNCisgICAgaWYgKHJjICE9IDApDQorICAgIHsNCisgICAgICAgIGNvbnNvbGVf b3V0cHV0KCJFUlJPUjogcHRocmVhZF9zZXRhZmZpbml0eV9ucCgpIGZhdWx0ZXJcbiIpOw0KKyAg ICAgICAgcmV0dXJuICgxKTsNCisgICAgfQ0KKw0KKyAgICByYyA9IHB0aHJlYWRfY3JlYXRlKCZ0 ZXN0LT53cml0ZXIsICZ0ZXN0LT50YXR0ciwgd3JpdGVyX2Z1bmMsIE5VTEwpOw0KKyAgICBpZiAo cmMgIT0gMCkNCisgICAgew0KKyAgICAgICAgY29uc29sZV9vdXRwdXQoIkVSUk9SOiBwdGhyZWFk X2NyZWF0ZSgpIHdyaXRlclxuIik7DQorICAgICAgICByZXR1cm4gKDEpOw0KKyAgICB9DQorICAg IENQVV9aRVJPKCZ0aGVjcHVzZXQpOw0KKyAgICBDUFVfU0VUKDIsICZ0aGVjcHVzZXQpOw0KKyAg ICByYyA9IHB0aHJlYWRfc2V0YWZmaW5pdHlfbnAodGVzdC0+d3JpdGVyLCBzaXplb2YoY3B1c2V0 X3QpLCAmdGhlY3B1c2V0KTsNCisgICAgaWYgKHJjICE9IDApDQorICAgIHsNCisgICAgICAgIGNv bnNvbGVfb3V0cHV0KCJFUlJPUjogcHRocmVhZF9zZXRhZmZpbml0eV9ucCgpIHdyaXRlclxuIik7 DQorICAgICAgICByZXR1cm4gKDEpOw0KKyAgICB9DQorDQorICAgIHJjID0gcHRocmVhZF9jcmVh dGUoJnRlc3QtPnJlYWRlciwgJnRlc3QtPnRhdHRyLCByZWFkZXJfZnVuYywgTlVMTCk7DQorICAg IGlmIChyYyAhPSAwKQ0KKyAgICB7DQorICAgICAgICBjb25zb2xlX291dHB1dCgiRVJST1I6IHB0 aHJlYWRfY3JlYXRlKCkgcmVhZGVyXG4iKTsNCisgICAgICAgIHJldHVybiAoMSk7DQorICAgIH0N CisgICAgQ1BVX1pFUk8oJnRoZWNwdXNldCk7DQorICAgIENQVV9TRVQoMywgJnRoZWNwdXNldCk7 DQorICAgIHJjID0gcHRocmVhZF9zZXRhZmZpbml0eV9ucCh0ZXN0LT5yZWFkZXIsIHNpemVvZihj cHVzZXRfdCksICZ0aGVjcHVzZXQpOw0KKyAgICBpZiAocmMgIT0gMCkNCisgICAgew0KKyAgICAg ICAgY29uc29sZV9vdXRwdXQoIkVSUk9SOiBwdGhyZWFkX3NldGFmZmluaXR5X25wKCkgcmVhZGVy XG4iKTsNCisgICAgICAgIHJldHVybiAoMSk7DQorICAgIH0NCisNCisgICAgcmV0dXJuICgwKTsN Cit9DQorDQorLy8gbWFpbiBwcm9jZXNzaW5nIGZ1bmN0aW9uOyBkbyBhcyBtYW55ICdmb3JrJyBp dGVyYXRpb25zIGFzIHJlcXVlc3RlZCBvciB1bnRpbCBkb25lDQorc3RhdGljIHZvaWQgKiBtYWlu X2Z1bmModm9pZCAqbSkNCit7DQorICAgIGludCBmOw0KKyAgICBsb25nIGk7DQorDQorICAgIGZv ciAoaSA9IDA7IGkgPCB0ZXN0LT5vcHRfaXRlcmF0aW9uczsgaSsrKQ0KKyAgICB7DQorICAgICAg ICBtZW1zZXQodGVzdC0+ZGVidWdfZW50cmllcywgMHgwMCwgc2l6ZW9mKHRlc3QtPmRlYnVnX2Vu dHJpZXMpKTsNCisNCisgICAgICAgIEZTVEZfREVCVUdfTUlTQygiVGVzdCBob29rIGFjdGl2ZS4g dHNjX2ZyZXE6JWx1LCBjb250cm9sIHZhZGRyOiVwLCBjb250cm9sIHBhZGRyOjB4JWx4LCB0ZXN0 X2RhdGEgdmFkZHI6MHglbHgsIHRlc3RfZGF0YSB2YWx1ZSBsb2NhdGlvbjolcFxuIiwNCisgICAg ICAgICAgICAgICAgICAgICAgICB0ZXN0LT50c2NfZnJlcSwNCisgICAgICAgICAgICAgICAgICAg ICAgICB0ZXN0LT5zdGF0ZV9jb250cm9sLA0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Qt PnN0YXRlX2NvbnRyb2xfcGh5cywNCisgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopRlNU Rl9DT05TVEFOVF9WQUREUiwNCisgICAgICAgICAgICAgICAgICAgICAgICAmdGVzdC0+dGVzdF9k YXRhLT52YWx1ZSk7DQorDQorICAgICAgICBwdGhyZWFkX211dGV4X2xvY2soJnRlc3QtPm11dGV4 KTsNCisNCisgICAgICAgICAgICB0ZXN0LT50ZXN0X2RhdGEtPnZhbHVlID0gdmFsdWVfb2xkOw0K Kw0KKyAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJnRlc3QtPm11dGV4KTsNCisNCisgICAg ICAgIGlmICgoZiA9IGZvcmtfZnVuYygpKSA8IDApDQorICAgICAgICB7DQorICAgICAgICAgICAg Y29uc29sZV9vdXRwdXQoIkVycm9yIGZvcmtpbmc6ICVkLCBFcnJubzogJWRcbiIsIGYsIGVycm5v KTsNCisgICAgICAgICAgICBnb3RvIERvbmU7DQorICAgICAgICB9DQorDQorICAgICAgICB0ZXN0 LT5mb3JrcysrOw0KKw0KKyAgICAgICAgaWYgKGZzdGZfc3RhdGVfaW1wZWRpbWVudF9hbGwoRlNU Rl9TVEFURV9CSVRTX0lETEUpICYgRlNURl9TVEFURV9CSVRTX0ZJTklTSEVEKQ0KKyAgICAgICAg ew0KKyAgICAgICAgICAgIGdvdG8gRG9uZTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBm c3RmX3N0YXRlX3RyYW5zaXRpb24oMCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZTVEZf U1RBVEVfQklUX0NPTVBMRVRFKTsNCisNCitEb25lOg0KKw0KKyAgICByZXR1cm4gKDApOw0KK30N CisNCisvLyBmb3JrIHByb2Nlc3NpbmcgZnVuY3Rpb247IGNvb3JkaW5hdGUgdGhlIHRlc3Rpbmcg Zm9yIHRoZSByYWNlDQorc3RhdGljIGludCBmb3JrX2Z1bmModm9pZCkNCit7DQorICAgIHBpZF90 IHBpZCwgc2F2ZWRwaWQ7DQorICAgIGludCBwc3RhdDsNCisNCisgICAgc3dpdGNoKHBpZCA9IGZv cmsoKSkNCisgICAgew0KKyAgICAgICAgY2FzZSAtMToNCisgICAgICAgICAgICAvLyBlcnJvcg0K KyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgY2FzZSAwOg0KKyAgICAgICAgew0KKyAgICAg ICAgICAgIC8vIGNoaWxkDQorICAgICAgICAgICAgdGVzdC0+Zm9ya190aWQgPSBnZXRfY3VycmVu dF90aWQoKTsNCisgICAgICAgICAgICBzZXRfY3VycmVudF90aHJlYWRfbmFtZSgpOw0KKw0KKyAg ICAgICAgICAgIC8vIHRlbGwgdGhyZWFkcyB3ZSBoYXZlIGZvcmtlZCBhbmQgdGhleSBjYW4gZ2V0 IHJlYWR5DQorICAgICAgICAgICAgZnN0Zl9zdGF0ZV90cmFuc2l0aW9uKChGU1RGX1NUQVRFX0JJ VFNfUFJJTUVEIHwgRlNURl9TVEFURV9CSVRfVEVTVF9BQ1RJVkUpLA0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGU1RGX1NUQVRFX0JJVF9SRUFEWV9UT19QUklNRSk7DQorDQor ICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhyZWFkcyB0byBiZSBpbiB0aGUgcmlnaHQgc3RhdGUN CisgICAgICAgICAgICBpZiAoZnN0Zl9zdGF0ZV9pbXBlZGltZW50X2FsbChGU1RGX1NUQVRFX0JJ VFNfUFJJTUVEKSAmIEZTVEZfU1RBVEVfQklUU19GSU5JU0hFRCkNCisgICAgICAgICAgICB7DQor ICAgICAgICAgICAgICAgIGdvdG8gRG9uZTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAg ICAgLy8gdGVsbCB0aGUgZmF1bHRlciBoZSBjYW4gZ28NCisgICAgICAgICAgICBmc3RmX3N0YXRl X3RyYW5zaXRpb24oRlNURl9TVEFURV9CSVRfUkVBRFlfVE9fUFJJTUUsDQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZTVEZfU1RBVEVfQklUX1RFU1RfQUNUSVZFKTsNCisNCisg ICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgZmF1bHRlciB0byBiZSBkb25lLCBhdCB0aGF0IHBv aW50IHRoZSBpdGVyYXRpb24gaXMgb3Zlcg0KKyAgICAgICAgICAgIGlmIChmc3RmX3N0YXRlX2lt cGVkaW1lbnRfYWxsKEZTVEZfU1RBVEVfQklUX0ZBVUxURVJfRE9ORSkgJiBGU1RGX1NUQVRFX0JJ VFNfRklOSVNIRUQpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBnb3RvIERvbmU7 DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIC8vIGNsZWFudXANCisgICAgICAgICAg ICB1aW50NjRfdCBzdCA9IGZzdGZfc3RhdGVfaW1wZWRpbWVudF9hbGwoRlNURl9TVEFURV9CSVRT X0lETEUpOw0KKyAgICAgICAgICAgIGlmIChzdCAmIEZTVEZfU1RBVEVfQklUX0tFUk5FTF9QTUFQ TU9EKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgdGVzdC0+cG1hcHN0YWxscysr Ow0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBpZiAoc3QgJiBGU1RGX1NUQVRFX0JJVFNf RklOSVNIRUQpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBnb3RvIERvbmU7DQor ICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGZzdGZfc3RhdGVfdHJhbnNpdGlvbihGU1RGX1NU QVRFX0JJVFNfUkVTRVQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOw0K Kw0KKyAgICAgICAgICAgIERvbmU6DQorICAgICAgICAgICAgICAgIF9leGl0KDEyNyk7DQorICAg ICAgICB9DQorICAgICAgICBkZWZhdWx0Og0KKyAgICAgICAgew0KKyAgICAgICAgICAgIC8vIHBh cmVudA0KKyAgICAgICAgICAgIHNhdmVkcGlkID0gcGlkOw0KKyAgICAgICAgICAgIGRvDQorICAg ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBwaWQgPSB3YWl0NChzYXZlZHBpZCwgJnBzdGF0 LCAwLCAoc3RydWN0IHJ1c2FnZSAqKTApOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICB3 aGlsZSAocGlkID09IC0xICYmIGVycm5vID09IEVJTlRSKTsNCisgICAgICAgICAgICBicmVhazsN CisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4ocGlkID09IC0xID8gLTEgOiBwc3Rh dCk7DQorfQ0KKw0KKy8vIGZhdWx0ZXIgdGhyZWFkIHByb2Nlc3NpbmcgZnVuY3Rpb24NCitzdGF0 aWMgdm9pZCAqIGZhdWx0ZXJfZnVuYyh2b2lkICp0KQ0KK3sNCisgICAgdGVzdC0+ZmF1bHRlcl90 aWQgPSBnZXRfY3VycmVudF90aWQoKTsNCisgICAgc2V0X2N1cnJlbnRfdGhyZWFkX25hbWUoKTsN CisNCisgICAgZm9yICg7OykNCisgICAgew0KKyAgICAgICAgLy8gaW5kaWNhdGUgd2UgaGF2ZSBy ZWFjaGVkIHRoZSAnaWRsZScgc3RhdGUNCisgICAgICAgIGZzdGZfc3RhdGVfdHJhbnNpdGlvbigw LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTVEZfU1RBVEVfQklUX0ZBVUxURVJf SURMRSk7DQorDQorICAgICAgICAvLyB3YWl0IHRvIGJlIHRvbGQgd2UgY2FuIHByZXBhcmUNCisg ICAgICAgIGlmIChmc3RmX3N0YXRlX2ltcGVkaW1lbnRfYW55KEZTVEZfU1RBVEVfQklUX1JFQURZ X1RPX1BSSU1FKSAmIEZTVEZfU1RBVEVfQklUU19GSU5JU0hFRCkNCisgICAgICAgIHsNCisgICAg ICAgICAgICBnb3RvIERvbmU7DQorICAgICAgICB9DQorDQorICAgICAgICBwdGhyZWFkX211dGV4 X2xvY2soJnRlc3QtPm11dGV4KTsNCisgICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZ0ZXN0 LT5tdXRleCk7DQorDQorICAgICAgICB0ZXN0LT5mYXVsdGVyX2l0ZXJzKys7DQorICAgICAgICB0 ZXN0LT5mYXVsdGVyX2l0ZXJzLS07DQorDQorICAgICAgICAvLyBpbmRpY2F0ZSB3ZSBhcmUgcHJl cGFyZWQNCisgICAgICAgIGZzdGZfc3RhdGVfdHJhbnNpdGlvbihGU1RGX1NUQVRFX0JJVF9GQVVM VEVSX0lETEUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlNURl9TVEFURV9CSVRf RkFVTFRFUl9QUklNRUQpOw0KKw0KKyAgICAgICAgLy8gd2FpdCB0byBiZSB0b2xkIHdlIGNhbiB3 cml0ZS1mYXVsdA0KKyAgICAgICAgaWYgKGZzdGZfc3RhdGVfaW1wZWRpbWVudF9hbGwoRlNURl9T VEFURV9CSVRfVEVTVF9BQ1RJVkUpICYgRlNURl9TVEFURV9CSVRTX0ZJTklTSEVEKQ0KKyAgICAg ICAgew0KKyAgICAgICAgICAgIGdvdG8gRG9uZTsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8v IGFjdHVhbGx5IGRvIHRoZSB3cml0ZSBmYXVsdA0KKyAgICAgICAgRlNURl9ERUJVR19NSVNDKCJX cml0aW5nIHRvIGFkZHJlc3M6ICVwXG4iLCAmdGVzdC0+dGVzdF9kYXRhLT5zb21ldGhpbmdfZWxz ZSk7DQorICAgICAgICB0ZXN0LT50ZXN0X2RhdGEtPnNvbWV0aGluZ19lbHNlID0gMTsNCisNCisg ICAgICAgIGZzdGZfc3RhdGVfdHJhbnNpdGlvbigwLA0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZTVEZfU1RBVEVfQklUX0ZBVUxURVJfRE9ORSk7DQorDQorICAgICAgICB0ZXN0LT5m YXVsdGVyX2l0ZXJzKys7DQorICAgIH0NCisNCitEb25lOg0KKw0KKyAgICByZXR1cm4gKDApOw0K K30NCisNCisvLyB3cml0ZXIgdGhyZWFkIHByb2Nlc3NpbmcgZnVuY3Rpb24NCitzdGF0aWMgdm9p ZCAqIHdyaXRlcl9mdW5jKHZvaWQgKnQpDQorew0KKyAgICB0ZXN0LT53cml0ZXJfdGlkID0gZ2V0 X2N1cnJlbnRfdGlkKCk7DQorICAgIHNldF9jdXJyZW50X3RocmVhZF9uYW1lKCk7DQorDQorICAg IGZvciAoOzspDQorICAgIHsNCisgICAgICAgIC8vIGluZGljYXRlIHdlIGhhdmUgcmVhY2hlZCB0 aGUgJ2lkbGUnIHN0YXRlDQorICAgICAgICBmc3RmX3N0YXRlX3RyYW5zaXRpb24oMCwNCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGU1RGX1NUQVRFX0JJVF9XUklURVJfSURMRSk7DQor DQorICAgICAgICAvLyB3YWl0IHRvIGJlIHRvbGQgd2UgY2FuIHByZXBhcmUNCisgICAgICAgIGlm IChmc3RmX3N0YXRlX2ltcGVkaW1lbnRfYW55KEZTVEZfU1RBVEVfQklUX1JFQURZX1RPX1BSSU1F KSAmIEZTVEZfU1RBVEVfQklUU19GSU5JU0hFRCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBn b3RvIERvbmU7DQorICAgICAgICB9DQorDQorICAgICAgICBwdGhyZWFkX211dGV4X2xvY2soJnRl c3QtPm11dGV4KTsNCisgICAgICAgICAgICAodm9pZCl0ZXN0LT50ZXN0X2RhdGEtPnZhbHVlOw0K KyAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJnRlc3QtPm11dGV4KTsNCisNCisgICAgICAg IHRlc3QtPndyaXRlcl9pdGVycysrOw0KKyAgICAgICAgdGVzdC0+d3JpdGVyX2l0ZXJzLS07DQor DQorICAgICAgICAvLyBpbmRpY2F0ZSB3ZSBhcmUgcHJlcGFyZWQNCisgICAgICAgIGZzdGZfc3Rh dGVfdHJhbnNpdGlvbihGU1RGX1NUQVRFX0JJVF9XUklURVJfSURMRSwNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGU1RGX1NUQVRFX0JJVF9XUklURVJfUFJJTUVEKTsNCisNCisgICAg ICAgIC8vIHdhaXQgZm9yIGVpdGhlciB0aGUga2VybmVsIGNvZGUgdG8gaGF2ZSBtb2RpZmllZCB0 aGUgcG1hcCBvciB0aGUgZmF1bHQgdG8gYmUgb3Zlcg0KKyAgICAgICAgaWYgKGZzdGZfc3RhdGVf aW1wZWRpbWVudF9hbnkoRlNURl9TVEFURV9CSVRfS0VSTkVMX1BNQVBNT0QgfCBGU1RGX1NUQVRF X0JJVF9GQVVMVEVSX0RPTkUpICYgRlNURl9TVEFURV9CSVRTX0ZJTklTSEVEKQ0KKyAgICAgICAg ew0KKyAgICAgICAgICAgIGdvdG8gRG9uZTsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8vIGNo YW5nZSB0aGUgdmFsdWUgYXQgdGhlIHRlc3QgbG9jYXRpb24gdG8gc29tZXRoaW5nIGVsc2UNCisg ICAgICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmdGVzdC0+bXV0ZXgpOw0KKw0KKyAgICAgICAgICAg ICh2b2lkKXRlc3QtPnRlc3RfZGF0YS0+dmFsdWU7DQorDQorICAgICAgICAgICAgRlNURl9ERUJV R19NSVNDKCJXcml0aW5nIHRvIGFkZHJlc3M6ICVwXG4iLCAmdGVzdC0+dGVzdF9kYXRhLT52YWx1 ZSk7DQorDQorICAgICAgICAgICAgdGVzdC0+dGVzdF9kYXRhLT52YWx1ZSA9IHZhbHVlX25ldzsN CisNCisgICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZ0ZXN0LT5tdXRleCk7DQorDQorICAg ICAgICB0ZXN0LT53cml0ZXJfaXRlcnMrKzsNCisgICAgfQ0KKw0KK0RvbmU6DQorDQorICAgIHJl dHVybiAoMCk7DQorfQ0KKw0KKy8vIHJlYWRlciB0aHJlYWQgcHJvY2Vzc2luZyBmdW5jdGlvbg0K K3N0YXRpYyB2b2lkICogcmVhZGVyX2Z1bmModm9pZCAqdDMpDQorew0KKyAgICB0ZXN0LT5yZWFk ZXJfdGlkID0gZ2V0X2N1cnJlbnRfdGlkKCk7DQorICAgIHNldF9jdXJyZW50X3RocmVhZF9uYW1l KCk7DQorDQorICAgIGZvciAoOzspDQorICAgIHsNCisgICAgICAgIC8vIGluZGljYXRlIHdlIGhh dmUgcmVhY2hlZCB0aGUgJ2lkbGUnIHN0YXRlDQorICAgICAgICBmc3RmX3N0YXRlX3RyYW5zaXRp b24oMCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU1RGX1NUQVRFX0JJVF9SRUFE RVJfSURMRSk7DQorDQorICAgICAgICAvLyB3YWl0IHRvIGJlIHRvbGQgd2UgY2FuIHByZXBhcmUN CisgICAgICAgIGlmIChmc3RmX3N0YXRlX2ltcGVkaW1lbnRfYW55KEZTVEZfU1RBVEVfQklUX1JF QURZX1RPX1BSSU1FKSAmIEZTVEZfU1RBVEVfQklUU19GSU5JU0hFRCkNCisgICAgICAgIHsNCisg ICAgICAgICAgICBnb3RvIERvbmU7DQorICAgICAgICB9DQorDQorICAgICAgICBwdGhyZWFkX211 dGV4X2xvY2soJnRlc3QtPm11dGV4KTsNCisgICAgICAgICAgICAodm9pZCl0ZXN0LT50ZXN0X2Rh dGEtPnZhbHVlOw0KKyAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJnRlc3QtPm11dGV4KTsN CisNCisgICAgICAgIHRlc3QtPnJlYWRlcl9pdGVycysrOw0KKyAgICAgICAgdGVzdC0+cmVhZGVy X2l0ZXJzLS07DQorDQorICAgICAgICAvLyBpbmRpY2F0ZSB3ZSBhcmUgcHJlcGFyZWQNCisgICAg ICAgIGZzdGZfc3RhdGVfdHJhbnNpdGlvbihGU1RGX1NUQVRFX0JJVF9SRUFERVJfSURMRSwNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU1RGX1NUQVRFX0JJVF9SRUFERVJfUFJJTUVE KTsNCisNCisgICAgICAgIC8vIHdhaXQgZm9yIGVpdGhlciB0aGUga2VybmVsIGNvZGUgdG8gaGF2 ZSBtb2RpZmllZCB0aGUgcG1hcCBvciB0aGUgZmF1bHQgdG8gYmUgb3Zlcg0KKyAgICAgICAgaWYg KGZzdGZfc3RhdGVfaW1wZWRpbWVudF9hbnkoRlNURl9TVEFURV9CSVRfVEVTVF9BQ1RJVkUpICYg RlNURl9TVEFURV9CSVRTX0ZJTklTSEVEKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGdvdG8g RG9uZTsNCisgICAgICAgIH0NCisNCisgICAgICAgIHdoaWxlICghZnN0Zl9zdGF0ZV9jaGVja19h bnkoRlNURl9TVEFURV9CSVRfRkFVTFRFUl9ET05FIHwgRlNURl9TVEFURV9CSVRTX0ZJTklTSEVE KSkNCisgICAgICAgIHsNCisgICAgICAgICAgICAvLyByZWFkIHRoZSB2YWx1ZSBhdCB0aGUgdGVz dCBsb2NhdGlvbiB0d2ljZSBhbmQgY29tcGxhaW4gaWYgaXQgaXMgZGlmZmVyZW50DQorICAgICAg ICAgICAgaWYgKHB0aHJlYWRfbXV0ZXhfdHJ5bG9jaygmdGVzdC0+bXV0ZXgpID09IDApDQorICAg ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgaW5pdGlhbFZhbHVlID0g dGVzdC0+dGVzdF9kYXRhLT52YWx1ZTsNCisNCisgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90 IG5leHRWYWx1ZSA9IHRlc3QtPnRlc3RfZGF0YS0+dmFsdWU7DQorDQorICAgICAgICAgICAgICAg ICAgICBpZiAoaW5pdGlhbFZhbHVlICE9IG5leHRWYWx1ZSkNCisgICAgICAgICAgICAgICAgICAg IHsNCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0LT5taXNtYXRjaGVzKys7DQorDQorICAg ICAgICAgICAgICAgICAgICAgICAgRlNURl9ERUJVR19NSVNDKCJNaXNtYXRjaCBkZXRlY3RlZCEg T2xkPSVsdSwgTmV3PSVsdVxuIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW5pdGlhbFZhbHVlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBuZXh0VmFsdWUpOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXN0LT5v cHRfZWFybHlfZXJyb3JfZXhpdCkNCisgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVfb3V0cHV0KCJFUlJPUjogTWlzbWF0Y2g6IE9s ZD0lbHUsIE5ldz0lbHVcbiIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGluaXRpYWxWYWx1ZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbmV4dFZhbHVlKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnN0Zl9z dGF0ZV90cmFuc2l0aW9uKDAsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGU1RGX1NUQVRFX0JJVF9NSVNNQVRDSCk7DQorICAgICAgICAgICAgICAg ICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICAg ICAgaWYgKG5leHRWYWx1ZSA9PSB2YWx1ZV9vbGQpDQorICAgICAgICAgICAgICAgICAgICB7DQor ICAgICAgICAgICAgICAgICAgICAgICAgdGVzdC0+b2xkX2RhdGErKzsNCisgICAgICAgICAgICAg ICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5leHRWYWx1ZSA9PSB2YWx1 ZV9uZXcpDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAg dGVzdC0+bmV3X2RhdGErKzsNCisgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAg ICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJnRlc3QtPm11dGV4KTsNCisNCisgICAgICAgICAg ICAgICAgdGVzdC0+cmVhZGVyX2l0ZXJzKys7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0K KyAgICB9DQorDQorRG9uZToNCisNCisgICAgcmV0dXJuICgwKTsNCit9DQorDQorLy8gc2h1dGRv d24vam9pbiB0aHJlYWRzIGZvciBjb21wbGV0aW9uDQorc3RhdGljIGludCBmaW5pc2hfdGhyZWFk cyh2b2lkKQ0KK3sNCisgICAgaW50IGVyciA9IDA7DQorICAgIGlmIChwdGhyZWFkX2pvaW4odGVz dC0+ZmF1bHRlciwgIE5VTEwpKQ0KKyAgICB7DQorICAgICAgICBjb25zb2xlX291dHB1dCgiRVJS T1I6IHB0aHJlYWRfam9pbigpIGZhdWx0ZXJcbiIpOw0KKyAgICAgICAgZXJyID0gMTsNCisgICAg fQ0KKyAgICBpZiAocHRocmVhZF9qb2luKHRlc3QtPndyaXRlciwgIE5VTEwpKQ0KKyAgICB7DQor ICAgICAgICBjb25zb2xlX291dHB1dCgiRVJST1I6IHB0aHJlYWRfam9pbigpIHdyaXRlclxuIik7 DQorICAgICAgICBlcnIgPSAxOw0KKyAgICB9DQorICAgIGlmIChwdGhyZWFkX2pvaW4odGVzdC0+ cmVhZGVyLCAgTlVMTCkpDQorICAgIHsNCisgICAgICAgIGNvbnNvbGVfb3V0cHV0KCJFUlJPUjog cHRocmVhZF9qb2luKCkgcmVhZGVyXG4iKTsNCisgICAgICAgIGVyciA9IDE7DQorICAgIH0NCisg ICAgcmV0dXJuIChlcnIpOw0KK30NCisNCisvLyBDbGVhbnVwIHN0dWZmIGZvciB0aHJlYWRpbmcN CitzdGF0aWMgaW50IHRocmVhZF9jbGVhbnVwKHZvaWQpDQorew0KKyAgICBwdGhyZWFkX211dGV4 X2Rlc3Ryb3koJnRlc3QtPm11dGV4KTsNCisgICAgcHRocmVhZF9hdHRyX2Rlc3Ryb3koJnRlc3Qt PnRhdHRyKTsNCisgICAgcmV0dXJuICgwKTsNCit9DQorDQorLy8gZG8gdGhlIGFjdHVhbCB0ZXN0 aW5nDQorc3RhdGljIGludCBydW5fdGVzdCh2b2lkKQ0KK3sNCisgICAgaW50IGVyciA9IDA7DQor DQorICAgIGlmICh0aHJlYWRfcHJlcCgpKQ0KKyAgICB7DQorICAgICAgICBlcnIgPSAxOw0KKyAg ICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgaWYgKHN0YXJ0X3RocmVhZHMoKSkNCisg ICAgICAgIHsNCisgICAgICAgICAgICBlcnIgPSAxOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAg bWFpbl9mdW5jKDApOw0KKw0KKyAgICAgICAgaWYgKGZpbmlzaF90aHJlYWRzKCkpDQorICAgICAg ICB7DQorICAgICAgICAgICAgZXJyID0gMTsNCisgICAgICAgIH0NCisNCisgICAgICAgIHRocmVh ZF9jbGVhbnVwKCk7DQorICAgIH0NCisgICAgcmV0dXJuIChlcnIpOw0KK30NCisNCisvLyBvdXRw dXQgYmFzaWMgaGVscCBpbmZvDQorc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqIHByb2du YW1lKQ0KK3sNCisgICAgY29uc29sZV9vdXRwdXQoIlVzYWdlOiAlcyBbb3B0c11cbiINCisgICAg ICAgICAgICAgICAgICAgIk9QVElPTlM6XG4iDQorICAgICAgICAgICAgICAgICAgICIgICAgLW4g TiAuLi4uLi4uLiBzZXQgbnVtYmVyIG9mIGl0ZXJhdGlvbnMsIGRlZmF1bHQ9JWx1XG4iDQorICAg ICAgICAgICAgICAgICAgICIgICAgLXYgICAuLi4uLi4uLiBvdXRwdXQgZGVidWdnaW5nIGRhdGEg YXQgdGhlIGVuZCBvZiB0aGUgcnVuXG4iDQorICAgICAgICAgICAgICAgICAgICIgICAgLWQgICAu Li4uLi4uLiByZXF1ZXN0IGhlYXZpZXIgZGVidWdnaW5nIGluIHRoZSBrZXJuZWxcbiINCisgICAg ICAgICAgICAgICAgICAgIiAgICAtayAgIC4uLi4uLi4uIGtlZXAgcnVubmluZzsgZG9uJ3QgZXhp dCBlYXJseSBvbiBtaXNtYXRjaFxuIg0KKyAgICAgICAgICAgICAgICAgICAiICAgIC13ICAgLi4u Li4uLi4gd2lyZSB0aGUgbWVtb3J5IHdpdGggbWxvY2thbGxcbiINCisgICAgICAgICAgICAgICAg ICAgIiAgICAtaCAuLi4uLi4uLi4uIHNob3cgdGhpcyBoZWxwXG4iLA0KKyAgICAgICAgICAgICAg ICAgICBwcm9nbmFtZSwNCisgICAgICAgICAgICAgICAgICAgb3B0X2l0ZXJhdGlvbnNfZGVmYXVs dCk7DQorfQ0KKw0KKy8vIGEgY2FuY2VsIGhhbmRsZXIgc28gYSBjdHJsLWMnZWQgbG9uZyBydW5u aW5nIHRlc3QgY2FuIHN0aWxsIG91dHB1dCB1c2VmdWwgaW5mbw0KK3N0YXRpYyB2b2lkIGNhbmNl bF9mdW5jdGlvbihpbnQgc2lnbm8pDQorew0KKyAgICBmc3RmX3N0YXRlX3RyYW5zaXRpb24oMCwN CisgICAgICAgICAgICAgICAgICAgICAgICAgIEZTVEZfU1RBVEVfQklUX0NBTkNFTExFRCk7DQor fQ0KKw0KKy8vIG1haW4NCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQ0KK3sNCisg ICAgdWludDY0X3QgdG0xLCB0bTIsIHRkaWZmOw0KKyAgICBpbnQgb3B0LCBlcnI7DQorICAgIGNo YXIgKiBwRW5kOw0KKw0KKyAgICAvLyBzZXR1cCBvdXIgY2FuY2VsIGhhbmRsZXINCisgICAgaWYg KHNpZ25hbChTSUdJTlQsIGNhbmNlbF9mdW5jdGlvbikgPT0gU0lHX0VSUikNCisgICAgew0KKyAg ICAgICAgY29uc29sZV9vdXRwdXQoIkVSUk9SOiBzZXR0aW5nIHNpZ25hbCBoYW5kbGVyIGNhbmNl bFxuIik7DQorICAgICAgICBleGl0KDEpOw0KKyAgICB9DQorDQorICAgIC8vIGFsbG9jYXRlIG1l bW9yeSBmb3IgdGhlIHRlc3QgbWFjaGluZXJ5OyB3ZSBkb24ndCBjYXJlIHdoZXJlIGl0IGlzIGJ1 dCB3YW50IGl0IHNoYXJlZCAobm9uLUNPVykNCisgICAgdm9pZCAqbWFjaGluZXJ5X21lbSA9IG1t YXAoTlVMTCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCB0 ZXN0X21hY2hpbmVyeSksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1RfUkVB RCB8IFBST1RfV1JJVEUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BUF9TSEFS RUQgfCBNQVBfQU5PTiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsDQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOw0KKyAgICBpZiAobWFjaGluZXJ5X21lbSA9 PSBOVUxMKQ0KKyAgICB7DQorICAgICAgICBjb25zb2xlX291dHB1dCgiRVJST1I6IGFsbG9jYXRp bmcgbWVtb3J5IGZvciB0ZXN0IG1hY2hpbmVyeVxuIik7DQorICAgICAgICBleGl0KDEpOw0KKyAg ICB9DQorDQorICAgIHRlc3QgPSBtYWNoaW5lcnlfbWVtOw0KKyAgICB0ZXN0X21hY2hpbmVyeV9p bml0KCk7DQorDQorICAgIHRlc3QtPm1haW5fdGlkID0gZ2V0X2N1cnJlbnRfdGlkKCk7DQorICAg IHNldF9jdXJyZW50X3RocmVhZF9uYW1lKCk7DQorDQorICAgIHdoaWxlICgob3B0ID0gZ2V0b3B0 KGFyZ2MsIGFyZ3YsICJodmRrZnduOiIpKSAhPSAtMSkNCisgICAgew0KKyAgICAgICAgc3dpdGNo IChvcHQpDQorICAgICAgICB7DQorICAgICAgICAgICAgY2FzZSAnbic6DQorICAgICAgICAgICAg ICAgIHRlc3QtPm9wdF9pdGVyYXRpb25zID0gc3RydG9sKG9wdGFyZywgJnBFbmQsIDEwKTsNCisg ICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgY2FzZSAndic6DQorICAgICAgICAg ICAgICAgIHRlc3QtPmRlYnVnX3ZhbHVlIHw9IEZTVEZfU1lTQ1RMX0RFQlVHX09OOw0KKyAgICAg ICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICBjYXNlICdkJzoNCisgICAgICAgICAgICAg ICAgdGVzdC0+ZGVidWdfdmFsdWUgfD0gRlNURl9TWVNDVExfREVCVUdfSEVBVlk7DQorICAgICAg ICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgIGNhc2UgJ2snOg0KKyAgICAgICAgICAgICAg ICB0ZXN0LT5vcHRfZWFybHlfZXJyb3JfZXhpdCA9IDA7DQorICAgICAgICAgICAgICAgIGJyZWFr Ow0KKyAgICAgICAgICAgIGNhc2UgJ3cnOg0KKyAgICAgICAgICAgICAgICB0ZXN0LT5vcHRfd2ly ZWQgPSAxOw0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICBjYXNlICdoJzoN CisgICAgICAgICAgICAgICAgdXNhZ2UoYXJndlswXSk7DQorICAgICAgICAgICAgICAgIGV4aXQo MCk7DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgIGRlZmF1bHQgOiB1c2Fn ZShhcmd2WzBdKTsNCisgICAgICAgICAgICAgICAgZXhpdCgtMSk7DQorICAgICAgICAgICAgICAg IGJyZWFrOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGNvbnNvbGVfb3V0cHV0KCJSVU5U SU1FIFBBUkFNUzoiDQorICAgICAgICAgICAgICAgICAgICJuaXRlcnMgJS0yMGx1XG4iLA0KKyAg ICAgICAgICAgICAgICAgICB0ZXN0LT5vcHRfaXRlcmF0aW9ucyk7DQorDQorICAgIHNpemVfdCBz aXplOw0KKyAgICBwaWRfdCBwaWQ7DQorICAgIHVpbnQ2NF90IG9sZDsNCisgICAgdWludDY0X3Qg bmV3Ow0KKw0KKyAgICAvLyBvYnRhaW4gdGhlIHRzYyBmcmVxdWVuY3kgZnJvbSB0aGUgc3lzY3Rs DQorICAgIHNpemUgPSBzaXplb2Yob2xkKTsNCisgICAgZXJyID0gc3lzY3RsYnluYW1lKCJtYWNo ZGVwLnRzY19mcmVxIiwgJm9sZCwgJnNpemUsIE5VTEwsIDApOw0KKyAgICBpZiAoZXJyKQ0KKyAg ICB7DQorICAgICAgICBjb25zb2xlX291dHB1dCgiRVJST1I6IGNhbGxpbmcgbWFjaGRlcC50c2Nf ZnJlcVxuIik7DQorICAgICAgICBleGl0KDEpOw0KKyAgICB9DQorICAgIHRlc3QtPnRzY19mcmVx ID0gb2xkOw0KKw0KKyAgICAvLyBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSB0ZXN0IHJlZ2lvbjsg IHB1dCBpdCBhdCBhIGZpeGVkIGFkZHJlc3MgYW5kIENPVy4NCisgICAgdm9pZCAqdGVzdF9kYXRh X21lbSA9IG1tYXAoKHZvaWQqKUZTVEZfQ09OU1RBTlRfVkFERFIsDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgdGVzdF9kYXRhKSwNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTUFQX0ZJWEVEIHwgTUFQX0FOT04gfCBNQVBfUFJJVkFURSwNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsDQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDApOw0KKyAgICBpZiAodGVzdF9kYXRhX21lbSA9PSBOVUxMKQ0KKyAgICB7DQor ICAgICAgICBjb25zb2xlX291dHB1dCgiRVJST1I6IG51bGwgdGVzdCBzdHJ1Y3QgYWRkclxuIik7 DQorICAgICAgICBleGl0KDEpOw0KKyAgICB9DQorICAgIHRlc3QtPnRlc3RfZGF0YSA9IHRlc3Rf ZGF0YV9tZW07DQorICAgIHRlc3QtPnRlc3RfZGF0YS0+dmFsdWUgPSAweGZmZmZmZmZmZmZmZmZm ZmZ1bGw7DQorDQorICAgIC8vIGNhbGwgaW50byB0aGUgc3lzY3RsIHRvIHByZXBhcmUgdGhlIHRl c3Q7ICBwYXNzIHRoZSBkZXNpcmVkIGRlYnVnZ2luZyBvcHRpb25zDQorICAgIHNpemUgPSBzaXpl b2Yob2xkKTsNCisgICAgcGlkID0gZ2V0cGlkKCk7DQorICAgIG5ldyA9ICgodWludDY0X3QpcGlk KTsNCisgICAgaWYgKHRlc3QtPmRlYnVnX3ZhbHVlKQ0KKyAgICB7DQorICAgICAgICBuZXcgPSB0 ZXN0LT5kZWJ1Z192YWx1ZSB8ICgodWludDY0X3QpcGlkKTsNCisgICAgfQ0KKyAgICBlcnIgPSBz eXNjdGxieW5hbWUoImtlcm4uZnN0Zl9zZXR1cCIsICZvbGQsICZzaXplLCAmbmV3LCBzaXplb2Yo bmV3KSk7DQorICAgIGlmIChlcnIpDQorICAgIHsNCisgICAgICAgIGNvbnNvbGVfb3V0cHV0KCJF UlJPUjogY2FsbGluZyBrZXJuZWwgdGVzdCBob29rLCBuZXc6IDB4JWx4XG4iLCBuZXcpOw0KKyAg ICAgICAgZXhpdCgxKTsNCisgICAgfQ0KKw0KKyAgICAvLyBjYWxsIGludG8gYSBzeXNjdGwgdG8g Z2V0IHRoZSBwaHlzaWNhbCBhZGRyZXNzIHRoZSBrZXJuZWwgc2V0dXANCisgICAgc2l6ZSA9IHNp emVvZihvbGQpOw0KKyAgICBlcnIgPSBzeXNjdGxieW5hbWUoImtlcm4uZnN0Zl9jb250cm9sX3Bh ZGRyIiwgJm9sZCwgJnNpemUsIE5VTEwsIDApOw0KKyAgICBpZiAoZXJyKQ0KKyAgICB7DQorICAg ICAgICBjb25zb2xlX291dHB1dCgiRVJST1I6IGNhbGxpbmcga2VybmVsIHRlc3QgYWRkclxuIik7 DQorICAgICAgICBleGl0KDEpOw0KKyAgICB9DQorICAgIHRlc3QtPnN0YXRlX2NvbnRyb2xfcGh5 cyA9IG9sZDsNCisNCisgICAgLy8gbWFwIHRoZSBwaHlzaWNhbCBjb250cm9sIGFkZHJlc3MgaW50 byBvdXIgYWRkcmVzcyBzcGFjZSBzbyB3ZSBjYW4gY29vcmRpbmF0ZQ0KKyAgICB2b2lkICpjb250 cm9sX21lbSA9IG1tYXAoTlVMTCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBR0Vf U0laRSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJ VEUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVBfU0hBUkVELA0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZGV2X21lbV9mZCgpLA0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKG9mZl90KXRlc3QtPnN0YXRlX2NvbnRyb2xfcGh5cyk7DQorICAgIGlmIChjb250 cm9sX21lbSA9PSBOVUxMKQ0KKyAgICB7DQorICAgICAgICBjb25zb2xlX291dHB1dCgiRVJST1I6 IG1tYXBpbmcgY29udHJvbCByZWdpb25cbiIpOw0KKyAgICAgICAgZXhpdCgxKTsNCisgICAgfQ0K KyAgICB0ZXN0LT5zdGF0ZV9jb250cm9sID0gY29udHJvbF9tZW07DQorDQorICAgIC8vIGFsbG93 IGEgcnVudGltZSB0b2dnbGUgdG8gJ2xvY2snIHRoZSB0ZXN0IHJlZ2lvbiB0byBkZW1vbnN0cmF0 ZSBpdCAiZml4ZXMgdGhlIGdsaXRjaCINCisgICAgaWYgKHRlc3QtPm9wdF93aXJlZCkNCisgICAg ew0KKyAgICAgICAgZXJyID0gbWxvY2thbGwoTUNMX0NVUlJFTlQpOw0KKyAgICAgICAgaWYgKGVy cikNCisgICAgICAgIHsNCisgICAgICAgICAgICBjb25zb2xlX291dHB1dCgiRVJST1I6IGNhbGxp bmcgbWxvY2thbGxcbiIpOw0KKyAgICAgICAgICAgIGV4aXQoMSk7DQorICAgICAgICB9DQorICAg IH0NCisNCisgICAgLy8gcnVuIHRoZSB0ZXN0DQorICAgIHVpbnQzMl90IGF1eDsNCisgICAgdG0x ID0gZnN0Zl90c2NfYW5kX2F1eCgmYXV4KTsNCisgICAgZXJyID0gcnVuX3Rlc3QoKTsNCisgICAg dG0yID0gZnN0Zl90c2NfYW5kX2F1eCgmYXV4KTsNCisgICAgdGRpZmYgPSAodG0yIC0gdG0xKTsN CisNCisgICAgLy8gZXJyb3IgaWYgd2UgZm91bmQgYW55IGRpc2NyZXBhbmNpZXMNCisgICAgcHRo cmVhZF9tdXRleF9sb2NrKCZ0ZXN0LT5tdXRleCk7DQorICAgICAgICB1aW50NjRfdCBtaXNtYXRj aGV6ID0gdGVzdC0+bWlzbWF0Y2hlczsNCisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJnRlc3Qt Pm11dGV4KTsNCisgICAgaWYgKG1pc21hdGNoZXopDQorICAgIHsNCisgICAgICAgIGVyciA9IDE7 DQorICAgIH0NCisNCisgICAgLy8gb3V0cHV0IHRoZSBkZWJ1Z2dpbmcgZnJvbSB0aGUgdGVzdA0K KyAgICBkdW1wX2RlYnVnKCk7DQorDQorICAgIC8vIG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24g YWJvdXQgdGhlIHRlc3QgcnVuDQorICAgIGNoYXIgc3RhdHVzWzEwMjRdOw0KKyAgICBmc3RmX2Rl YnVnX2ZpbGxfc3RhdGVfZGVzY3IoKGZzdGZfc3RhdGVfdmFsdWUoKSAmIEZTVEZfU1RBVEVfQklU U19GSU5JU0hFRCksIHN0YXR1cywgc2l6ZW9mKHN0YXR1cykpOw0KKyAgICBjb25zdCBjaGFyICog cmVhc29uID0gc3RhdHVzOw0KKyAgICB3aGlsZSAoKnJlYXNvbiA9PSAnICcpIHsgcmVhc29uKys7 IH0NCisgICAgY29uc29sZV9vdXRwdXQoInJ1bnRpbWUgKHNlYykgJWxmXG4iDQorICAgICAgICAg ICAgICAgICAgICJmb3JrcyAlbHVcbiINCisgICAgICAgICAgICAgICAgICAgImZhdWx0ZXIgaXRl cnMgJWx1XG4iDQorICAgICAgICAgICAgICAgICAgICJ3cml0ZXIgaXRlcnMgJWx1XG4iDQorICAg ICAgICAgICAgICAgICAgICJyZWFkZXIgaXRlcnMgJWx1XG4iDQorICAgICAgICAgICAgICAgICAg ICJyZWFkZXIgdmFsdWUgb2xkICVsdVxuIg0KKyAgICAgICAgICAgICAgICAgICAicmVhZGVyIHZh bHVlIG5ldyAlbHVcbiINCisgICAgICAgICAgICAgICAgICAgInBtYXBzdGFsbHMgJWx1XG4iDQor ICAgICAgICAgICAgICAgICAgICJtaXNtYXRjaGVzICVsdVxuIg0KKyAgICAgICAgICAgICAgICAg ICAiY29tcGxldGlvbiByZWFzb24gJXNcbiINCisgICAgICAgICAgICAgICAgICAgImV4aXQgJWRc biIsDQorICAgICAgICAgICAgICAgICAgICgoMS4wKnRkaWZmKS9mc3RmX3RzY19mcmVxdWVuY3lf c2Vjb25kcygpKSwNCisgICAgICAgICAgICAgICAgICAgdGVzdC0+Zm9ya3MsDQorICAgICAgICAg ICAgICAgICAgIHRlc3QtPmZhdWx0ZXJfaXRlcnMsDQorICAgICAgICAgICAgICAgICAgIHRlc3Qt PndyaXRlcl9pdGVycywNCisgICAgICAgICAgICAgICAgICAgdGVzdC0+cmVhZGVyX2l0ZXJzLA0K KyAgICAgICAgICAgICAgICAgICB0ZXN0LT5vbGRfZGF0YSwNCisgICAgICAgICAgICAgICAgICAg dGVzdC0+bmV3X2RhdGEsDQorICAgICAgICAgICAgICAgICAgIHRlc3QtPnBtYXBzdGFsbHMsDQor ICAgICAgICAgICAgICAgICAgIG1pc21hdGNoZXosDQorICAgICAgICAgICAgICAgICAgIHJlYXNv biwNCisgICAgICAgICAgICAgICAgICAgZXJyKTsNCisNCisgICAgaWYgKG1hY2hpbmVyeV9tZW0p DQorICAgIHsNCisgICAgICAgIG11bm1hcChtYWNoaW5lcnlfbWVtLCBzaXplb2Yoc3RydWN0IHRl c3RfbWFjaGluZXJ5KSk7DQorICAgIH0NCisgICAgaWYgKGNvbnRyb2xfbWVtKQ0KKyAgICB7DQor ICAgICAgICBtdW5tYXAoY29udHJvbF9tZW0sIFBBR0VfU0laRSk7DQorICAgIH0NCisgICAgaWYg KHRlc3RfZGF0YV9tZW0pDQorICAgIHsNCisgICAgICAgIG11bm1hcCh0ZXN0X2RhdGFfbWVtLCBz aXplb2Yoc3RydWN0IHRlc3RfZGF0YSkpOw0KKyAgICB9DQorDQorICAgIHJldHVybiAoZXJyKTsN Cit9DQpkaWZmIC0tZ2l0IGEvc3lzL3ZtL2Zvcmtpbmdfc3RhbGUuaCBiL3N5cy92bS9mb3JraW5n X3N0YWxlLmgNCm5ldyBmaWxlIG1vZGUgMTAwNzU1DQppbmRleCAwMDAwMDAwLi41Y2ZkZTgzDQot LS0gL2Rldi9udWxsDQorKysgYi9zeXMvdm0vZm9ya2luZ19zdGFsZS5oDQpAQCAtMCwwICsxLDI5 NiBAQA0KKy8qDQorICogRlNURg0KKyAqDQorICogZm9ya2luZyBzdGFsZSB0ZXN0IGZpeHR1cmUg aGVhZGVyDQorICoNCisgKiBDb21tb24gY29uc3RhbnRzIGZvciB1c2Vyc3BhY2Uva2VybmVsIGZv cmstY293LWJ1ZyByZXBybw0KKyAqLw0KKw0KKyNpZm5kZWYgX0ZPUktJTkdfU1RBTEVfXw0KKyNk ZWZpbmUgX0ZPUktJTkdfU1RBTEVfXw0KKw0KKyNpbmNsdWRlIDxtYWNoaW5lL2F0b21pYy5oPg0K Kw0KKy8vIEEgY29tbW9uIHZpcnR1YWwgYWRkcmVzcyB0byB0YXJnZXQNCisjZGVmaW5lIEZTVEZf Q09OU1RBTlRfT0ZGU0VUIDMxMzM3DQorI2RlZmluZSBGU1RGX0NPTlNUQU5UX1ZBRERSICgzMTMz NyAqIFBBR0VfU0laRSkNCisjZGVmaW5lIEZTVEZfQ09OU1RBTlRfVElNRU9VVF9TRUNPTkRTIDEN CisNCisvLyBWYXJpb3VzIGJpdHMgb2Ygc3RhdGUgaW5mb3JtYXRpb24gZWFzaWx5IGFjY2Vzc2Vk L3NoYXJlZCBpbiBhIHVpbnQ2NF90IHNpemUgdmFsdWUNCisjZGVmaW5lIEZTVEZfU1RBVEVfQklU X0NPTVBMRVRFICAgICAgICAgIDB4ODAwMDAwMDAwMDAwMDAwMGxsdSAgIC8vIE5hdHVyYWwgdGVy bWluYXRpb24gKGl0ZXJhdGlvbiBjb3VudCByZWFjaGVkKQ0KKyNkZWZpbmUgRlNURl9TVEFURV9C SVRfVElNRU9VVCAgICAgICAgICAgMHg0MDAwMDAwMDAwMDAwMDAwbGx1ICAgLy8gU3RhdGUgY2hh bmdlIHRpbWVvdXQgKHVuZXhwZWN0ZWQgdGVzdCBjb25kaXRpb24pDQorI2RlZmluZSBGU1RGX1NU QVRFX0JJVF9NSVNNQVRDSCAgICAgICAgICAweDIwMDAwMDAwMDAwMDAwMDBsbHUgICAvLyBNaXNt YXRjaCBkZXRlY3RlZCAocmVhbCBwcm9ibGVtIGZvdW5kKQ0KKyNkZWZpbmUgRlNURl9TVEFURV9C SVRfQ0FOQ0VMTEVEICAgICAgICAgMHgxMDAwMDAwMDAwMDAwMDAwbGx1ICAgLy8gRWFybHkgY2Fu Y2VsbGF0aW9uIHJlcXVlc3RlZCBieSB0aGUgdXNlcg0KKyNkZWZpbmUgRlNURl9TVEFURV9CSVRf RkFVTFRFUl9JRExFICAgICAgMHgwMDAwMDAwMDAwMDAwMDAxbGx1ICAgLy8gVGhlIGZhdWx0ZXIg dGhyZWFkIGF0IHRoZSBiZWdpbm5pbmcNCisjZGVmaW5lIEZTVEZfU1RBVEVfQklUX1dSSVRFUl9J RExFICAgICAgIDB4MDAwMDAwMDAwMDAwMDAwMmxsdSAgIC8vIFRoZSB3cml0ZXIgdGhyZWFkIGF0 IHRoZSBiZWdpbm5pbmcNCisjZGVmaW5lIEZTVEZfU1RBVEVfQklUX1JFQURFUl9JRExFICAgICAg IDB4MDAwMDAwMDAwMDAwMDAwNGxsdSAgIC8vIFRoZSByZWFkZXIgdGhyZWFkIGF0IHRoZSBiZWdp bm5pbmcNCisjZGVmaW5lIEZTVEZfU1RBVEVfQklUX1JFQURZX1RPX1BSSU1FICAgIDB4MDAwMDAw MDAwMDAwMDAwOGxsdSAgIC8vIEZvcmsgaXMgcmVhZHkgZm9yIHRocmVhZCB0byBwcmVwYXJlICh2 bV9tYXAgaW4gQ09XIHN0YXRlKQ0KKyNkZWZpbmUgRlNURl9TVEFURV9CSVRfRkFVTFRFUl9QUklN RUQgICAgMHgwMDAwMDAwMDAwMDAwMDEwbGx1ICAgLy8gVGhlIGZhdWx0ZXIgdGhyZWFkIGhhcyAi cHJpbWVkIiB2YXJpYWJsZXMgaXQgaW50ZW5kcyB0byB1c2UNCisjZGVmaW5lIEZTVEZfU1RBVEVf QklUX1dSSVRFUl9QUklNRUQgICAgIDB4MDAwMDAwMDAwMDAwMDAyMGxsdSAgIC8vIFRoZSB3cml0 ZXIgdGhyZWFkIGhhcyAicHJpbWVkIiB2YXJpYWJsZXMgaXQgaW50ZW5kcyB0byB1c2UNCisjZGVm aW5lIEZTVEZfU1RBVEVfQklUX1JFQURFUl9QUklNRUQgICAgIDB4MDAwMDAwMDAwMDAwMDA0MGxs dSAgIC8vIFRoZSByZWFkZXIgdGhyZWFkIGhhcyAicHJpbWVkIiB2YXJpYWJsZXMgaXQgaW50ZW5k cyB0byB1c2UNCisjZGVmaW5lIEZTVEZfU1RBVEVfQklUX1RFU1RfQUNUSVZFICAgICAgIDB4MDAw MDAwMDAwMDAwMDA4MGxsdSAgIC8vIFRoZSByYWNlIGlzIG9uDQorI2RlZmluZSBGU1RGX1NUQVRF X0JJVF9LRVJORUxfUE1BUE1PRCAgICAweDAwMDAwMDAwMDAwMDAxMDBsbHUgICAvLyBUaGUgcG1h cCBoYXMgYmVlbiB1cGRhdGVkIGluIHRoZSBrZXJuZWwNCisjZGVmaW5lIEZTVEZfU1RBVEVfQklU X0ZBVUxURVJfRE9ORSAgICAgIDB4MDAwMDAwMDAwMDAwMDIwMGxsdSAgIC8vIFRoZSBmYXVsdGVy IHRocmVhZCBoYXMgImNvbXBsZXRlZCIgaXRzIHVwZGF0ZQ0KKw0KKy8vIFZhcmlvdXMgY29tYmlu YXRpb25zIG9mIHRoZSBhYm92ZSBiaXRzDQorI2RlZmluZSBGU1RGX1NUQVRFX0JJVFNfQUxMICAg ICAgICAgICAgICAweGZmZmZmZmZmZmZmZmZmZmZsbHUNCisjZGVmaW5lIEZTVEZfU1RBVEVfQklU U19GSU5JU0hFRCAgICAgICAgIDB4ZjAwMDAwMDAwMDAwMDAwMGxsdQ0KKyNkZWZpbmUgRlNURl9T VEFURV9CSVRTX0lETEUgICAgICAgICAgICAgKEZTVEZfU1RBVEVfQklUX0ZBVUxURVJfSURMRSB8 IEZTVEZfU1RBVEVfQklUX1dSSVRFUl9JRExFIHwgRlNURl9TVEFURV9CSVRfUkVBREVSX0lETEUp DQorI2RlZmluZSBGU1RGX1NUQVRFX0JJVFNfUFJJTUVEICAgICAgICAgICAoRlNURl9TVEFURV9C SVRfRkFVTFRFUl9QUklNRUQgfCBGU1RGX1NUQVRFX0JJVF9XUklURVJfUFJJTUVEIHwgRlNURl9T VEFURV9CSVRfUkVBREVSX1BSSU1FRCkNCisjZGVmaW5lIEZTVEZfU1RBVEVfQklUU19ET05FICAg ICAgICAgICAgIChGU1RGX1NUQVRFX0JJVF9GQVVMVEVSX0RPTkUpDQorI2RlZmluZSBGU1RGX1NU QVRFX0JJVFNfUkVTRVQgICAgICAgICAgICAoRlNURl9TVEFURV9CSVRTX1BSSU1FRCB8IEZTVEZf U1RBVEVfQklUX0tFUk5FTF9QTUFQTU9EIHwgRlNURl9TVEFURV9CSVRTX0RPTkUgfCBGU1RGX1NU QVRFX0JJVF9URVNUX0FDVElWRSkNCisNCisvLyBTb21lIHByZS1kZXRlcm1pbmVkICJmYXN0ZXIi IGRlYnVnZ2luZyBtb2Rlcw0KKyNkZWZpbmUgRlNURl9ERUJVR19UWVBFX1VOVVNFRCAgICAgICAg ICAgICAgICAgMA0KKyNkZWZpbmUgRlNURl9ERUJVR19UWVBFX01JU0NFTExBTkVPVVMgICAgICAg ICAgMQ0KKyNkZWZpbmUgRlNURl9ERUJVR19UWVBFX1RSQU5TSVRJT05fSU5JVElBTCAgICAgMg0K KyNkZWZpbmUgRlNURl9ERUJVR19UWVBFX1RSQU5TSVRJT05fRklOQUwgICAgICAgMw0KKyNkZWZp bmUgRlNURl9ERUJVR19UWVBFX0lNUEVESU1FTlRfSU5JVElBTCAgICAgNA0KKyNkZWZpbmUgRlNU Rl9ERUJVR19UWVBFX0lNUEVESU1FTlRfRklOQUwgICAgICAgNQ0KKyNkZWZpbmUgRlNURl9ERUJV R19UWVBFX0NIRUNLX1NUQVRFICAgICAgICAgICAgNg0KKw0KKy8vIHN5c2N0bCB0ZXN0IGhvb2sg ZmxhZ3MNCisjZGVmaW5lIEZTVEZfU1lTQ1RMX1BJRF9NQVNLICAgICAgMHgwMDAwMDAwMGZmZmZm ZmZmdWxsDQorI2RlZmluZSBGU1RGX1NZU0NUTF9ERUJVR19NQVNLICAgIDB4ZmZmZmZmZmYwMDAw MDAwMHVsbA0KKyNkZWZpbmUgRlNURl9TWVNDVExfREVCVUdfT04gICAgICAweDgwMDAwMDAwMDAw MDAwMDB1bGwNCisjZGVmaW5lIEZTVEZfU1lTQ1RMX0RFQlVHX0hFQVZZICAgMHhDMDAwMDAwMDAw MDAwMDAwdWxsDQorDQorLy8gRGVidWcgY29uc3RhbnRzDQorI2RlZmluZSBGU1RGX0RFQlVHX0NP TlNUX01JU0NfU0laRSA4MDANCisjZGVmaW5lIEZTVEZfREVCVUdfRk9STUFUX1NUUiAiVFNDOiUx OGx1IENQVTolMDJkIFRJRDolMDZkICUtMTBzIENPREU6JTE1czolMDRkIFNUQVRFOjB4JTAxNmx4 IE1TRzolcyINCisNCisvLyBoZWxwZXIgbWFjcm9zIHRvIGRvIGNvbnNpc3RlbnQgZGVidWdnaW5n DQorI2RlZmluZSBGU1RGX0RFQlVHX0VOVFJZX1BPRjIgOQ0KKyNkZWZpbmUgRlNURl9ERUJVR19O VU1CRVJfRU5UUklFUyAoMSA8PCBGU1RGX0RFQlVHX0VOVFJZX1BPRjIpDQorI2RlZmluZSBGU1RG X0RFQlVHX1BPU0lUSU9OX0lOREVYKG51bSkgKG51bSAmIChGU1RGX0RFQlVHX05VTUJFUl9FTlRS SUVTLTEpKQ0KKyNkZWZpbmUgRlNURl9ERUJVR19NSVNDKGZtdCwgLi4uKSBmc3RmX2RlYnVnX21p c2MoX19GSUxFX18sIF9fTElORV9fLCBmbXQsICMjX19WQV9BUkdTX18pOw0KKw0KKy8vIFN0cnVj dHVyZSBjb250YWluaW5nIGRhdGEgZm9yIGRlYnVnIG1lc3NhZ2VzDQorc3RydWN0IGZzdGZfZGVi dWdfZGF0YQ0KK3sNCisgICAgdWludDY0X3QgdHNjOw0KKyAgICB1aW50MzJfdCBhdXg7DQorICAg IGludCB0aWQ7DQorICAgIGNvbnN0IGNoYXIgKiBmaWxlOw0KKyAgICBpbnQgbGluZTsNCisgICAg dWludDY0X3Qgc3RhdGU7DQorICAgIHVpbnQzMl90IGRiZ190eXBlOw0KKyAgICBjaGFyIG1pc2Nb RlNURl9ERUJVR19DT05TVF9NSVNDX1NJWkVdOw0KK307DQorDQorLy8gQSAic2xpbSIgZGVidWdn aW5nIHZhcmlhbnQNCit2b2lkIGZzdGZfZGVidWdfZmFzdChjb25zdCBjaGFyICogZmlsZSwgaW50 IGxpbmUsIHVpbnQzMl90IHR5cGUsIHVpbnQ2NF90IHN0YXRlKTsNCisNCisvLyBBICJtaXNjIiBk ZWJ1Z2dpbmcgdmFyaWFudA0KK3ZvaWQgZnN0Zl9kZWJ1Z19taXNjKGNvbnN0IGNoYXIgKiBmaWxl LCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LCAuLi4pOw0KKw0KKy8vIEEgbG9jYXRpb24gd2hl cmUgdGhlIHN0YXRlIHZhcmlhYmxlIGNhbiBiZSBhY2Nlc3NlZA0KK3ZvbGF0aWxlIHVpbnQ2NF90 ICogZnN0Zl9zdGF0ZV9jb250cm9sKHZvaWQpOw0KKw0KKy8vIEdldCB0aGUgdHNjIGZyZXF1ZW5j eQ0KK3VpbnQ2NF90IGZzdGZfdHNjX2ZyZXF1ZW5jeV9zZWNvbmRzKHZvaWQpOw0KKw0KKy8vIEdl dCB0aGUgImN1cnJlbnQiIHN0YXRlIHZhbHVlDQorc3RhdGljIHVpbnQ2NF90IGZzdGZfc3RhdGVf dmFsdWUodm9pZCkNCit7DQorICAgIHZvbGF0aWxlIHVpbnQ2NF90ICogY29udHJvbCA9IGZzdGZf c3RhdGVfY29udHJvbCgpOw0KKyAgICB1aW50NjRfdCBzdGF0ZSA9IDA7DQorICAgIGlmIChjb250 cm9sKQ0KKyAgICB7DQorICAgICAgICBzdGF0ZSA9IGF0b21pY19sb2FkX2FjcV82NChjb250cm9s KTsNCisgICAgfQ0KKyAgICByZXR1cm4gKHN0YXRlKTsNCit9DQorDQorLy8gUHVzaGVzIGEgdGV4 dHVhbCBkZXNjcmlwdGlvbiBvZiB0aGUgc3RhdGUgZmxhZ3MgaW50byBhIHN1cHBsaWVkIGJ1ZmZl cg0KK3N0YXRpYyB2b2lkIGZzdGZfZGVidWdfZmlsbF9zdGF0ZV9kZXNjcih1aW50NjRfdCBzdGF0 ZSwgY2hhciAqIGJ1ZiwgaW50IGxlbikNCit7DQorICAgIHNucHJpbnRmKGJ1ZiwNCisgICAgICAg ICAgICAgbGVuLA0KKyAgICAgICAgICAgICAiJTE0cyAlMTRzICUxNHMgJTE0cyAlMTRzICUxNHMg JTE0cyAlMTRzICUxNHMgJTE0cyAlMTRzICUxNHMgJTE0cyAlMTRzIiwNCisgICAgICAgICAgICAg KChzdGF0ZSAmIEZTVEZfU1RBVEVfQklUX0NPTVBMRVRFKSA/ICAgICAgICAgICAgICAiQ09NUExF VEUiIDogIiIpLA0KKyAgICAgICAgICAgICAoKHN0YXRlICYgRlNURl9TVEFURV9CSVRfVElNRU9V VCkgPyAgICAgICAgICAgICAgICJUSU1FT1VUIiA6ICIiKSwNCisgICAgICAgICAgICAgKChzdGF0 ZSAmIEZTVEZfU1RBVEVfQklUX01JU01BVENIKSA/ICAgICAgICAgICAgICAiTUlTTUFUQ0giIDog IiIpLA0KKyAgICAgICAgICAgICAoKHN0YXRlICYgRlNURl9TVEFURV9CSVRfQ0FOQ0VMTEVEKSA/ ICAgICAgICAgICAgICJDQU5DRUxMRUQiIDogIiIpLA0KKyAgICAgICAgICAgICAoKHN0YXRlICYg RlNURl9TVEFURV9CSVRfRkFVTFRFUl9JRExFKSA/ICAgICAgICAgICJGQVVMVEVSX0lETEUiIDog IiIpLA0KKyAgICAgICAgICAgICAoKHN0YXRlICYgRlNURl9TVEFURV9CSVRfV1JJVEVSX0lETEUp ID8gICAgICAgICAgICJXUklURVJfSURMRSIgOiAiIiksDQorICAgICAgICAgICAgICgoc3RhdGUg JiBGU1RGX1NUQVRFX0JJVF9SRUFERVJfSURMRSkgPyAgICAgICAgICAgIlJFQURFUl9JRExFIiA6 ICIiKSwNCisgICAgICAgICAgICAgKChzdGF0ZSAmIEZTVEZfU1RBVEVfQklUX1JFQURZX1RPX1BS SU1FKSA/ICAgICAgICAiUkVBRFlfVE9fUFJJTUUiIDogIiIpLA0KKyAgICAgICAgICAgICAoKHN0 YXRlICYgRlNURl9TVEFURV9CSVRfRkFVTFRFUl9QUklNRUQpID8gICAgICAgICJGQVVMVEVSX1BS SU1FRCIgOiAiIiksDQorICAgICAgICAgICAgICgoc3RhdGUgJiBGU1RGX1NUQVRFX0JJVF9XUklU RVJfUFJJTUVEKSA/ICAgICAgICAgIldSSVRFUl9QUklNRUQiIDogIiIpLA0KKyAgICAgICAgICAg ICAoKHN0YXRlICYgRlNURl9TVEFURV9CSVRfUkVBREVSX1BSSU1FRCkgPyAgICAgICAgICJSRUFE RVJfUFJJTUVEIiA6ICIiKSwNCisgICAgICAgICAgICAgKChzdGF0ZSAmIEZTVEZfU1RBVEVfQklU X1RFU1RfQUNUSVZFKSA/ICAgICAgICAgICAiVEVTVF9BQ1RJVkUiIDogIiIpLA0KKyAgICAgICAg ICAgICAoKHN0YXRlICYgRlNURl9TVEFURV9CSVRfS0VSTkVMX1BNQVBNT0QpID8gICAgICAgICJL RVJORUxfUE1BUE1PRCIgOiAiIiksDQorICAgICAgICAgICAgICgoc3RhdGUgJiBGU1RGX1NUQVRF X0JJVF9GQVVMVEVSX0RPTkUpID8gICAgICAgICAgIkZBVUxURVJfRE9ORSIgOiAiIikpOw0KK30N CisNCisvLyBEZXNjcmliZSB0aGUgZGVidWcgYWN0aW9uDQorc3RhdGljIGNvbnN0IGNoYXIgKiBm c3RmX2RlYnVnX3R5cGVfZGVzY3IodWludDMyX3QgdHlwZSkNCit7DQorICAgIHN3aXRjaCh0eXBl KQ0KKyAgICB7DQorICAgIGNhc2UgRlNURl9ERUJVR19UWVBFX01JU0NFTExBTkVPVVM6DQorICAg ICAgICByZXR1cm4gKCJNaXNjZWxsYW5lb3VzIik7DQorICAgIGNhc2UgRlNURl9ERUJVR19UWVBF X1RSQU5TSVRJT05fSU5JVElBTDoNCisgICAgICAgIHJldHVybiAoIlRyYW5zaXRpb24gSW5pdGlh bCIpOw0KKyAgICBjYXNlIEZTVEZfREVCVUdfVFlQRV9UUkFOU0lUSU9OX0ZJTkFMOg0KKyAgICAg ICAgcmV0dXJuICgiVHJhbnNpdGlvbiBGaW5hbCIpOw0KKyAgICBjYXNlIEZTVEZfREVCVUdfVFlQ RV9JTVBFRElNRU5UX0lOSVRJQUw6DQorICAgICAgICByZXR1cm4gKCJJbXBlZGltZW50IEluaXRp YWwiKTsNCisgICAgY2FzZSBGU1RGX0RFQlVHX1RZUEVfSU1QRURJTUVOVF9GSU5BTDoNCisgICAg ICAgIHJldHVybiAoIkltcGVkaW1lbnQgRmluYWwiKTsNCisgICAgY2FzZSBGU1RGX0RFQlVHX1RZ UEVfQ0hFQ0tfU1RBVEU6DQorICAgICAgICByZXR1cm4gKCJDaGVjayBTdGF0ZSIpOw0KKyAgICBk ZWZhdWx0Og0KKyAgICAgICAgYnJlYWs7DQorICAgIH0NCisgICAgcmV0dXJuICgiVW5rbm93biIp Ow0KK30NCisNCisvLyBzdHJpcCAibWlzYyIgcGF0aCBpbmZvcm1hdGlvbiBmcm9tIGEgZmlsZSBu YW1lIGxlYXZpbmcganVzdCB0aGUgZmlsZSBlbGVtZW50IG5hbWUNCitzdGF0aWMgY29uc3QgY2hh ciAqIGZzdGZfc3RyaXBfZmlsZV9wYXRoKGNvbnN0IGNoYXIgKiBmaWxlKQ0KK3sNCisgICAgY29u c3QgY2hhciAqIHA7DQorICAgIGNvbnN0IGNoYXIgKiBmbjsNCisgICAgc2l6ZV90IGxlbjsNCisN CisgICAgZm4gPSBmaWxlOw0KKyAgICBpZiAoZm4gIT0gMCkNCisgICAgew0KKyAgICAgICAgZm9y IChwID0gZm4sIGxlbiA9IHN0cmxlbihmbik7DQorICAgICAgICAgICAgbGVuID4gMDsNCisgICAg ICAgICAgICBsZW4tLSwgcCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmICgqcCA9PSAn LycgfHwgKnAgPT0gJ1xcJykNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGZuID0g cCArIDE7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVy biAoZm4pOw0KK30NCisNCisvLyAicmR0c2NwIg0KK3N0YXRpYyB1aW50NjRfdCBmc3RmX3RzY19h bmRfYXV4KHVpbnQzMl90ICppcEF1eCkNCit7DQorLy8gICAgdWludDMyX3QgYSwgZDsNCisvLyAg ICAqaXBBdXggPSAwOw0KKy8vICAgIF9fYXNtX18gdm9sYXRpbGUoInJkdHNjIiA6ICI9YSIgKGEp LCAiPWQiIChkKSk7DQorLy8gICAgcmV0dXJuICgodWludDY0X3QpYSkgfCAoKCh1aW50NjRfdClk KSA8PCAzMik7DQorICAgIHVpbnQ2NF90IGEsIGQ7DQorICAgIF9fYXNtX18gdm9sYXRpbGUoInJk dHNjcCIgOiAiPWEiIChhKSwgIj1kIiAoZCksICI9YyIgKCppcEF1eCkpOw0KKyAgICByZXR1cm4g KGQgPDwgMzIpICsgYTsNCit9DQorDQorLy8gVXBkYXRlcyB0aGUgc3RhdGUgZGF0YSB0byByZW1v dmUgJ3JlbW92ZV9iaXRzJyBhbmQgYWRkICdpbmNsdWRlX2JpdHMnDQorc3RhdGljIHVpbnQ2NF90 IGZzdGZfY2hhbmdlX3N0YXRlX2JpdHModWludDY0X3QgcmVtb3ZlX2JpdHMsIHVpbnQ2NF90IGlu Y2x1ZGVfYml0cykNCit7DQorICAgIHVpbnQ2NF90IG9sZF92YWw7DQorICAgIHVpbnQ2NF90IG5l d192YWw7DQorDQorICAgIGRvDQorICAgIHsNCisgICAgICAgIG9sZF92YWwgPSBhdG9taWNfbG9h ZF9hY3FfNjQoZnN0Zl9zdGF0ZV9jb250cm9sKCkpOw0KKyAgICAgICAgbmV3X3ZhbCA9ICgob2xk X3ZhbCAmICh+cmVtb3ZlX2JpdHMpKSB8IGluY2x1ZGVfYml0cyk7DQorICAgICAgICBpZiAob2xk X3ZhbCA9PSBuZXdfdmFsKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAg ICAgfQ0KKw0KKyAgICB9IHdoaWxlICghYXRvbWljX2NtcHNldF82NChmc3RmX3N0YXRlX2NvbnRy b2woKSwgb2xkX3ZhbCwgbmV3X3ZhbCkpOw0KKw0KKyAgICByZXR1cm4gKG5ld192YWwpOw0KK30N CisNCisvLyBXYWl0cyBmb3IgdGhlIHN0YXRlIGRhdGEgdG8gbWF0Y2ggYSBjZXJ0YWluIGJpdG1h c2sNCisvLyBvcHRzID09IGZzdGZfb3B0X2FsbCAtLT4gd2FpdCBmb3Igc3RhdGUgY29udHJvbCB0 byBoYXZlIGFsbCBiaXRzIGluIGJpdF9tYXNrDQorLy8gb3B0cyA9PSBmc3RmX29wdF9hbnkgLS0+ IHdhaXQgZm9yIHN0YXRlIGNvbnRyb2wgdG8gaGF2ZSBhbnkgYml0cyBpbiBiaXRfbWFzaw0KK3N0 YXRpYyBpbnQgZnN0Zl9vcHRfYWxsID0gMDsNCitzdGF0aWMgaW50IGZzdGZfb3B0X2FueSA9IDE7 DQorc3RhdGljIHVpbnQ2NF90IGZzdGZfd2FpdF9mb3Jfc3RhdGVfYml0cyh1aW50NjRfdCB3YWl0 X2Zvcl9iaXRfbWFzaywgaW50IG9wdHMpDQorew0KKyAgICB1aW50NjRfdCBtYXhfd2FpdCA9IEZT VEZfQ09OU1RBTlRfVElNRU9VVF9TRUNPTkRTICogZnN0Zl90c2NfZnJlcXVlbmN5X3NlY29uZHMo KTsNCisgICAgdWludDY0X3Qgbm93Ow0KKyAgICB1aW50MzJfdCBhdXg7DQorICAgIHVpbnQ2NF90 IHN0YXJ0X2N5Y2xlcyA9IGZzdGZfdHNjX2FuZF9hdXgoJmF1eCk7DQorICAgIHVpbnQ2NF90IGVu ZF9jeWNsZXMgPSBzdGFydF9jeWNsZXMgKyBtYXhfd2FpdDsNCisgICAgdWludDY0X3QgdHN0Ow0K KyAgICBkbw0KKyAgICB7DQorICAgICAgICBfX2FzbV9fIHZvbGF0aWxlKCJwYXVzZVxuIjogOiA6 Im1lbW9yeSIpOw0KKw0KKyAgICAgICAgdHN0ID0gYXRvbWljX2xvYWRfYWNxXzY0KGZzdGZfc3Rh dGVfY29udHJvbCgpKTsNCisgICAgICAgIGlmICh0c3QgJiBGU1RGX1NUQVRFX0JJVFNfRklOSVNI RUQpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuICh0c3QpOw0KKyAgICAgICAgfQ0K KyAgICAgICAgaWYgKG9wdHMgPT0gZnN0Zl9vcHRfYWxsKQ0KKyAgICAgICAgew0KKyAgICAgICAg ICAgIGlmICgodHN0ICYgd2FpdF9mb3JfYml0X21hc2spID09IHdhaXRfZm9yX2JpdF9tYXNrKQ0K KyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgcmV0dXJuICh0c3QpOw0KKyAgICAgICAg ICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIGVsc2UgaWYgKG9wdHMgPT0gZnN0Zl9vcHRfYW55 KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmICgodHN0ICYgd2FpdF9mb3JfYml0X21hc2sp KQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgcmV0dXJuICh0c3QpOw0KKyAgICAg ICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIG5vdyA9IGZzdGZfdHNjX2FuZF9hdXgoJmF1 eCk7DQorICAgIH0gd2hpbGUgKG5vdyA8IGVuZF9jeWNsZXMpOw0KKw0KKyAgICB0c3QgPSBmc3Rm X2NoYW5nZV9zdGF0ZV9iaXRzKDAsIEZTVEZfU1RBVEVfQklUX1RJTUVPVVQpOw0KKw0KKyAgICBy ZXR1cm4gKHRzdCk7DQorfQ0KKw0KKy8vIFdpbmRvdyBkcmVzc2luZyBmb3IgZnN0Zl9jaGFuZ2Vf c3RhdGVfYml0cw0KK3N0YXRpYyB1aW50NjRfdCBmc3RmX3dyYXBfc3RhdGVfdHJhbnNpdGlvbihj b25zdCBjaGFyICogZmlsZSwgaW50IGxpbmUsIHVpbnQ2NF90IHJlbW92ZV9iaXRzLCB1aW50NjRf dCBpbmNsdWRlX2JpdHMpDQorew0KKyAgICBmc3RmX2RlYnVnX2Zhc3QoZmlsZSwgbGluZSwgRlNU Rl9ERUJVR19UWVBFX1RSQU5TSVRJT05fSU5JVElBTCwgZnN0Zl9zdGF0ZV92YWx1ZSgpKTsNCisg ICAgdWludDY0X3QgbmV3c3RhdGUgPSBmc3RmX2NoYW5nZV9zdGF0ZV9iaXRzKHJlbW92ZV9iaXRz LCBpbmNsdWRlX2JpdHMpOw0KKyAgICBmc3RmX2RlYnVnX2Zhc3QoZmlsZSwgbGluZSwgRlNURl9E RUJVR19UWVBFX1RSQU5TSVRJT05fRklOQUwsICAgbmV3c3RhdGUpOw0KKyAgICByZXR1cm4gKG5l d3N0YXRlKTsNCit9DQorDQorLy8gV2luZG93IGRyZXNzaW5nIGZvciBmc3RmX3dhaXRfZm9yX3N0 YXRlX2JpdHMNCitzdGF0aWMgdWludDY0X3QgZnN0Zl93cmFwX3N0YXRlX2ltcGVkaW1lbnQoY29u c3QgY2hhciAqIGZpbGUsIGludCBsaW5lLCB1aW50NjRfdCB3YWl0X2Zvcl9iaXRtYXNrLCBpbnQg b3B0cykNCit7DQorICAgIGZzdGZfZGVidWdfZmFzdChmaWxlLCBsaW5lLCBGU1RGX0RFQlVHX1RZ UEVfSU1QRURJTUVOVF9JTklUSUFMLCBmc3RmX3N0YXRlX3ZhbHVlKCkpOw0KKyAgICB1aW50NjRf dCBuZXdzdGF0ZSA9IGZzdGZfd2FpdF9mb3Jfc3RhdGVfYml0cyh3YWl0X2Zvcl9iaXRtYXNrLCBv cHRzKTsNCisgICAgZnN0Zl9kZWJ1Z19mYXN0KGZpbGUsIGxpbmUsIEZTVEZfREVCVUdfVFlQRV9J TVBFRElNRU5UX0ZJTkFMLCAgIG5ld3N0YXRlKTsNCisgICAgcmV0dXJuIChuZXdzdGF0ZSk7DQor fQ0KKw0KKy8vIFdpbmRvdyBkcmVzc2luZyBmb3IgZnN0Zl93cmFwX2NoZWNrX2Zvcl9iaXRzDQor c3RhdGljIGludCBmc3RmX3dyYXBfY2hlY2tfZm9yX2JpdHMoY29uc3QgY2hhciAqIGZpbGUsIGlu dCBsaW5lLCB1aW50NjRfdCBjaGVja19mb3JfYml0bWFzaywgaW50IG9wdHMpDQorew0KKyAgICB1 aW50NjRfdCBzdGF0ZSA9IGZzdGZfc3RhdGVfdmFsdWUoKTsNCisgICAgZnN0Zl9kZWJ1Z19mYXN0 KGZpbGUsIGxpbmUsIEZTVEZfREVCVUdfVFlQRV9DSEVDS19TVEFURSwgc3RhdGUpOw0KKyAgICBp ZiAob3B0cyA9PSBmc3RmX29wdF9hbGwpDQorICAgIHsNCisgICAgICAgIGlmICgoc3RhdGUgJiBj aGVja19mb3JfYml0bWFzaykgPT0gY2hlY2tfZm9yX2JpdG1hc2spDQorICAgICAgICB7DQorICAg ICAgICAgICAgcmV0dXJuICgxKTsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBlbHNlIGlmIChv cHRzID09IGZzdGZfb3B0X2FueSkNCisgICAgew0KKyAgICAgICAgaWYgKChzdGF0ZSAmIGNoZWNr X2Zvcl9iaXRtYXNrKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gKDEpOw0KKyAg ICAgICAgfQ0KKyAgICB9DQorICAgIHJldHVybiAoMCk7DQorfQ0KKw0KKyNkZWZpbmUgZnN0Zl9z dGF0ZV9pbXBlZGltZW50X2FsbCh3YWl0X2ZvcikgZnN0Zl93cmFwX3N0YXRlX2ltcGVkaW1lbnQo X19GSUxFX18sIF9fTElORV9fLCB3YWl0X2ZvciwgZnN0Zl9vcHRfYWxsKQ0KKyNkZWZpbmUgZnN0 Zl9zdGF0ZV9pbXBlZGltZW50X2FueSh3YWl0X2ZvcikgZnN0Zl93cmFwX3N0YXRlX2ltcGVkaW1l bnQoX19GSUxFX18sIF9fTElORV9fLCB3YWl0X2ZvciwgZnN0Zl9vcHRfYW55KQ0KKyNkZWZpbmUg ZnN0Zl9zdGF0ZV90cmFuc2l0aW9uKHJlbW92ZSwgYWRkKSAgZnN0Zl93cmFwX3N0YXRlX3RyYW5z aXRpb24oX19GSUxFX18sIF9fTElORV9fLCByZW1vdmUsIGFkZCkNCisjZGVmaW5lIGZzdGZfc3Rh dGVfY2hlY2tfYWxsKGNoZWNrX2ZvcikgZnN0Zl93cmFwX2NoZWNrX2Zvcl9iaXRzKF9fRklMRV9f LCBfX0xJTkVfXywgY2hlY2tfZm9yLCBmc3RmX29wdF9hbGwpDQorI2RlZmluZSBmc3RmX3N0YXRl X2NoZWNrX2FueShjaGVja19mb3IpIGZzdGZfd3JhcF9jaGVja19mb3JfYml0cyhfX0ZJTEVfXywg X19MSU5FX18sIGNoZWNrX2ZvciwgZnN0Zl9vcHRfYW55KQ0KKw0KKyNlbmRpZg0KZGlmZiAtLWdp dCBhL3N5cy92bS92bV9mYXVsdC5jIGIvc3lzL3ZtL3ZtX2ZhdWx0LmMNCmluZGV4IDgzZTEyYTUu LmVhYWI5YzYgMTAwNjQ0DQotLS0gYS9zeXMvdm0vdm1fZmF1bHQuYw0KKysrIGIvc3lzL3ZtL3Zt X2ZhdWx0LmMNCkBAIC01NDQsNiArNTQ0LDkgQEAgdm1fZmF1bHRfaG9sZCh2bV9tYXBfdCBtYXAs IHZtX29mZnNldF90IHZhZGRyLCB2bV9wcm90X3QgZmF1bHRfdHlwZSwNCiANCiBSZXRyeUZhdWx0 OjsNCiANCisJZnN0Zl9jb25kaXRpb25hbF9wb2ludF9kZWJ1ZyhfX0ZJTEVfXywgX19MSU5FX18s IG1hcC0+cG1hcCwgdmFkZHIpOw0KKw0KKw0KIAkvKg0KIAkgKiBGaW5kIHRoZSBiYWNraW5nIHN0 b3JlIG9iamVjdCBhbmQgb2Zmc2V0IGludG8gaXQgdG8gYmVnaW4gdGhlDQogCSAqIHNlYXJjaC4N CkBAIC01NTgsNiArNTYxLDcgQEAgUmV0cnlGYXVsdDo7DQogCX0NCiANCiAJZnMubWFwX2dlbmVy YXRpb24gPSBmcy5tYXAtPnRpbWVzdGFtcDsNCisJZnN0Zl9jb25kaXRpb25hbF9mYXVsdF9kZWJ1 ZyhfX0ZJTEVfXywgX19MSU5FX18sIG1hcC0+cG1hcCwgdmFkZHIsIHByb3QpOw0KIA0KIAlpZiAo ZnMuZW50cnktPmVmbGFncyAmIE1BUF9FTlRSWV9OT0ZBVUxUKSB7DQogCQlwYW5pYygiJXM6IGZh dWx0IG9uIG5vZmF1bHQgZW50cnksIGFkZHI6ICUjbHgiLA0KQEAgLTYwNyw2ICs2MTEsNyBAQCBS ZXRyeUZhdWx0OjsNCiAJCSAgICAoZnMuZmlyc3Rfb2JqZWN0LT50eXBlICE9IE9CSlRfVk5PREUg JiYNCiAJCSAgICAoZnMuZmlyc3Rfb2JqZWN0LT5mbGFncyAmIE9CSl9UTVBGU19OT0RFKSA9PSAw KSB8fA0KIAkJICAgIChmcy5maXJzdF9vYmplY3QtPmZsYWdzICYgT0JKX01JR0hUQkVESVJUWSkg IT0gMCkgew0KKwkJCWZzdGZfY29uZGl0aW9uYWxfcG9pbnRfZGVidWcoX19GSUxFX18sIF9fTElO RV9fLCBtYXAtPnBtYXAsIHZhZGRyKTsNCiAJCQlydiA9IHZtX2ZhdWx0X3NvZnRfZmFzdCgmZnMs IHZhZGRyLCBwcm90LCBmYXVsdF90eXBlLA0KIAkJCSAgICBmYXVsdF9mbGFncywgd2lyZWQsIG1f aG9sZCk7DQogCQkJaWYgKHJ2ID09IEtFUk5fU1VDQ0VTUykNCkBAIC03MjEsNiArNzI2LDkgQEAg UmV0cnlGYXVsdDo7DQogCQkJICogZm91bmQgdGhlIHBhZ2UgKS4NCiAJCQkgKi8NCiAJCQl2bV9w YWdlX3hidXN5KGZzLm0pOw0KKwkJCWlmIChmcy5tYXApIHsNCisJCQkJZnN0Zl9jb25kaXRpb25h bF9wb2ludF9kZWJ1ZyhfX0ZJTEVfXywgX19MSU5FX18sIGZzLm1hcC0+cG1hcCwgdmFkZHIpOw0K KwkJCX0NCiAJCQlpZiAoZnMubS0+dmFsaWQgIT0gVk1fUEFHRV9CSVRTX0FMTCkNCiAJCQkJZ290 byByZWFkcmVzdDsNCiAJCQlicmVhazsNCkBAIC03ODQsNiArNzkyLDkgQEAgUmV0cnlGYXVsdDo7 DQogCQkJCQlhbGxvY19yZXEgfD0gVk1fQUxMT0NfWkVSTzsNCiAJCQkJZnMubSA9IHZtX3BhZ2Vf YWxsb2MoZnMub2JqZWN0LCBmcy5waW5kZXgsDQogCQkJCSAgICBhbGxvY19yZXEpOw0KKwkJCQlp ZiAoZnMubSAhPSBOVUxMICYmIGZzLm1hcCAhPSBOVUxMKSB7DQorCQkJCQlmc3RmX2NvbmRpdGlv bmFsX3BvaW50X2RlYnVnKF9fRklMRV9fLCBfX0xJTkVfXywgZnMubWFwLT5wbWFwLCB2YWRkcik7 DQorCQkJCX0NCiAJCQl9DQogCQkJaWYgKGZzLm0gPT0gTlVMTCkgew0KIAkJCQl1bmxvY2tfYW5k X2RlYWxsb2NhdGUoJmZzKTsNCkBAIC0xMTMzLDYgKzExNDQsNyBAQCBSZXRyeUZhdWx0OjsNCiAJ CQkJLyoNCiAJCQkJICogT2gsIHdlbGwsIGxldHMgY29weSBpdC4NCiAJCQkJICovDQorCQkJCWZz dGZfY29uZGl0aW9uYWxfcG9pbnRfZGVidWcoX19GSUxFX18sIF9fTElORV9fLCBmcy5tYXAtPnBt YXAsIHZhZGRyKTsNCiAJCQkJcG1hcF9jb3B5X3BhZ2UoZnMubSwgZnMuZmlyc3RfbSk7DQogCQkJ CWZzLmZpcnN0X20tPnZhbGlkID0gVk1fUEFHRV9CSVRTX0FMTDsNCiAJCQkJaWYgKHdpcmVkICYm IChmYXVsdF9mbGFncyAmDQpAQCAtMTE2OCw2ICsxMTgwLDcgQEAgUmV0cnlGYXVsdDo7DQogCQkJ Y3VydGhyZWFkLT50ZF9jb3crKzsNCiAJCX0gZWxzZSB7DQogCQkJcHJvdCAmPSB+Vk1fUFJPVF9X UklURTsNCisJCQlmc3RmX2NvbmRpdGlvbmFsX2ZhdWx0X2RlYnVnKF9fRklMRV9fLCBfX0xJTkVf XywgbWFwLT5wbWFwLCB2YWRkciwgcHJvdCk7DQogCQl9DQogCX0NCiANCkBAIC0xMTg1LDYgKzEx OTgsNyBAQCBSZXRyeUZhdWx0OjsNCiAJCWlmIChmcy5tYXAtPnRpbWVzdGFtcCAhPSBmcy5tYXBf Z2VuZXJhdGlvbikgew0KIAkJCXJlc3VsdCA9IHZtX21hcF9sb29rdXBfbG9ja2VkKCZmcy5tYXAs IHZhZGRyLCBmYXVsdF90eXBlLA0KIAkJCSAgICAmZnMuZW50cnksICZyZXRyeV9vYmplY3QsICZy ZXRyeV9waW5kZXgsICZyZXRyeV9wcm90LCAmd2lyZWQpOw0KKwkJCWZzdGZfY29uZGl0aW9uYWxf ZmF1bHRfZGVidWcoX19GSUxFX18sIF9fTElORV9fLCBtYXAtPnBtYXAsIHZhZGRyLCByZXRyeV9w cm90KTsNCiANCiAJCQkvKg0KIAkJCSAqIElmIHdlIGRvbid0IG5lZWQgdGhlIHBhZ2UgYW55IGxv bmdlciwgcHV0IGl0IG9uIHRoZSBpbmFjdGl2ZQ0KQEAgLTExOTQsNiArMTIwOCw3IEBAIFJldHJ5 RmF1bHQ6Ow0KIAkJCWlmIChyZXN1bHQgIT0gS0VSTl9TVUNDRVNTKSB7DQogCQkJCXJlbGVhc2Vf cGFnZSgmZnMpOw0KIAkJCQl1bmxvY2tfYW5kX2RlYWxsb2NhdGUoJmZzKTsNCisJCQkJZnN0Zl9j b25kaXRpb25hbF9wb2ludF9kZWJ1ZyhfX0ZJTEVfXywgX19MSU5FX18sIG1hcC0+cG1hcCwgdmFk ZHIpOw0KIA0KIAkJCQkvKg0KIAkJCQkgKiBJZiByZXRyeSBvZiBtYXAgbG9va3VwIHdvdWxkIGhh dmUgYmxvY2tlZCB0aGVuDQpAQCAtMTIxOSw2ICsxMjM0LDcgQEAgUmV0cnlGYXVsdDo7DQogCQkJ ICogd3JpdGUtZW5hYmxlZCBhZnRlciBhbGwuDQogCQkJICovDQogCQkJcHJvdCAmPSByZXRyeV9w cm90Ow0KKwkJCWZzdGZfY29uZGl0aW9uYWxfZmF1bHRfZGVidWcoX19GSUxFX18sIF9fTElORV9f LCBtYXAtPnBtYXAsIHZhZGRyLCBwcm90KTsNCiAJCX0NCiAJfQ0KIA0KZGlmZiAtLWdpdCBhL3N5 cy92bS92bV9wYWdlLmMgYi9zeXMvdm0vdm1fcGFnZS5jDQppbmRleCBmMTdhOTgxLi44MmM1ZmQ3 ZiAxMDA2NDQNCi0tLSBhL3N5cy92bS92bV9wYWdlLmMNCisrKyBiL3N5cy92bS92bV9wYWdlLmMN CkBAIC00MDk0LDYgKzQwOTQsNDY1IEBAIHZtX3BhZ2VfdHJ5bG9ja19LQkkodm1fcGFnZV90IG0s IGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKQ0KIAlyZXR1cm4gKG10eF90cnlsb2NrX2ZsYWdz Xyh2bV9wYWdlX2xvY2twdHIobSksIDAsIGZpbGUsIGxpbmUpKTsNCiB9DQogDQorDQorDQorDQor DQorDQorDQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+ DQorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4NCisjaW5jbHVkZSA8dm0vdm1fbWFwLmg+DQorI2lu Y2x1ZGUgPG1hY2hpbmUvYXRvbWljLmg+DQorI2luY2x1ZGUgPG1hY2hpbmUvc3RkYXJnLmg+DQor DQorI2luY2x1ZGUgPHZtL2Zvcmtpbmdfc3RhbGUuaD4NCisNCitleHRlcm4gIHVpbnQ2NF90IHRz Y19mcmVxOw0KKw0KK01BTExPQ19ERUZJTkUoTV9GU1RGLCAiZnN0ZiIsICJGU1RGIFRlc3QgSG9v ayIpOw0KKw0KK3N0YXRpYyBwbWFwX3QgdGVzdF9wbWFwID0gTlVMTDsNCitzdGF0aWMgdWludHB0 cl90IHRlc3RfdmFkZHIgPSBGU1RGX0NPTlNUQU5UX1ZBRERSOw0KK3N0cnVjdCBmc3RmX2RlYnVn X2RhdGEgZGVidWdfZW50cmllc1tGU1RGX0RFQlVHX05VTUJFUl9FTlRSSUVTXTsNCitzdGF0aWMg dV9pbnQgZGVidWdfcG9zaXRpb247DQorc3RhdGljIHVpbnQ2NF90IGRlYnVnX3ZhbHVlID0gMDsN CitzdGF0aWMgdm9pZCAqIHN0YXRlX2NvbnRyb2xfYWxsb2MgPSAwOw0KK3N0YXRpYyBzaXplX3Qg c3RhdGVfY29udHJvbF9hbGxvY19sZW5ndGggPSBQQUdFX1NJWkU7DQorc3RhdGljIHZtX3BhZGRy X3Qgc3RhdGVfY29udHJvbF9wYWRkciA9IDA7DQorc3RhdGljIHZvbGF0aWxlIHVpbnQ2NF90ICog c3RhdGVfY29udHJvbCA9IDA7DQorDQorc3RhdGljIGludCBzeXNjdGxfZnN0Zl9zZXR1cChTWVND VExfSEFORExFUl9BUkdTKTsNCitzdGF0aWMgaW50IHN5c2N0bF9kZWJ1Z19vdXRwdXQoU1lTQ1RM X0hBTkRMRVJfQVJHUyk7DQorDQorU1lTQ1RMX05PREUoX2tlcm4sDQorICAgICAgICAgICAgT0lE X0FVVE8sDQorICAgICAgICAgICAgZnN0Zl9zZXR1cCwNCisgICAgICAgICAgICBDVExGTEFHX1JX LA0KKyAgICAgICAgICAgIHN5c2N0bF9mc3RmX3NldHVwLA0KKyAgICAgICAgICAgICJUZXN0IGhv b2sgdG8gc2V0dXAgdG8gaGVscCBkZWJ1ZyBhIHJhY2UgY29uZGl0aW9uIik7DQorDQorU1lTQ1RM X1U2NChfa2VybiwNCisgICAgICAgICAgIE9JRF9BVVRPLA0KKyAgICAgICAgICAgZnN0Zl9jb250 cm9sX3BhZGRyLA0KKyAgICAgICAgICAgQ1RMRkxBR19SRCwNCisgICAgICAgICAgICZzdGF0ZV9j b250cm9sX3BhZGRyLA0KKyAgICAgICAgICAgMCwNCisgICAgICAgICAgICJSZWFkIHRoZSBwaHlz aWNhbCBtZW1vcnkgYWRkcmVzcyBhbGxvY2F0ZWQgZm9yIHRoZSB0ZXN0Iik7DQorDQorU1lTQ1RM X09JRChfa2VybiwNCisgICAgICAgICAgIE9JRF9BVVRPLA0KKyAgICAgICAgICAgZnN0Zl9kZWJ1 Z19vdXRwdXQsDQorICAgICAgICAgICBDVExUWVBFX1NUUklORyB8IENUTEZMQUdfUkQsDQorICAg ICAgICAgICBOVUxMLA0KKyAgICAgICAgICAgMCwNCisgICAgICAgICAgIHN5c2N0bF9kZWJ1Z19v dXRwdXQsDQorICAgICAgICAgICAiQSIsDQorICAgICAgICAgICAiT3V0cHV0IHRlc3QgZml4dHVy ZSBkZWJ1Z2dpbmciKTsNCisNCisvKiBPdXRwdXQgZGVidWdnaW5nIGNhcHR1cmVkIGluIG1lbW9y eSBpbiB0aGUga2VybmVsIGR1cmluZyB0aGUgbGFzdCB0ZXN0IHJ1biAqLw0KK3N0YXRpYyBpbnQN CitzeXNjdGxfZGVidWdfb3V0cHV0KFNZU0NUTF9IQU5ETEVSX0FSR1MpDQorew0KKyAgICAgICAg c3RydWN0IHNidWYgc2J1ZjsNCisgICAgICAgIGludCBudW0sIGVycm9yOw0KKw0KKyAgICAgICAg ZXJyb3IgPSBzeXNjdGxfd2lyZV9vbGRfYnVmZmVyKHJlcSwgMCk7DQorICAgICAgICBpZiAoZXJy b3IgIT0gMCkgew0KKyAgICAgICAgICAgIHJldHVybiAoZXJyb3IpOw0KKyAgICAgICAgfQ0KKw0K KyAgICAgICAgc2J1Zl9uZXdfZm9yX3N5c2N0bCgmc2J1ZiwgTlVMTCwgc2l6ZW9mKGRlYnVnX2Vu dHJpZXNbMF0ubWlzYykgKyAxMDI0LCByZXEpOw0KKw0KKyAgICAgICAgc2J1Zl9wcmludGYoJnNi dWYsICJcbiIpOw0KKw0KKyAgICAgICAgZm9yIChudW0gPSAwOyBudW0gPCBGU1RGX0RFQlVHX05V TUJFUl9FTlRSSUVTOyBudW0rKykgew0KKyAgICAgICAgICAgIGlmIChkZWJ1Z19lbnRyaWVzW251 bV0uZGJnX3R5cGUgIT0gRlNURl9ERUJVR19UWVBFX1VOVVNFRCkgew0KKyAgICAgICAgICAgICAg ICBpZiAoZGVidWdfZW50cmllc1tudW1dLmRiZ190eXBlID09IEZTVEZfREVCVUdfVFlQRV9NSVND RUxMQU5FT1VTKSB7DQorDQorICAgICAgICAgICAgICAgICAgICBlcnJvciA9IHNidWZfcHJpbnRm KCZzYnVmLCAiJXMiLCBkZWJ1Z19lbnRyaWVzW251bV0ubWlzYyk7DQorICAgICAgICAgICAgICAg ICAgICBpZiAoZXJyb3IpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkVycm9y OiAlZCBoYW5kbGluZyBzeXNjdGwgcHJpbnRmXG4iLCBlcnJvcik7DQorICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAg ICAgIH0gZWxzZSB7DQorDQorICAgICAgICAgICAgICAgICAgICBjaGFyIHN0YnVmWzUxMl07DQor ICAgICAgICAgICAgICAgICAgICBjaGFyIHN0YXRlX3N0clsxMDI0XTsNCisgICAgICAgICAgICAg ICAgICAgIGZzdGZfZGVidWdfZmlsbF9zdGF0ZV9kZXNjcihkZWJ1Z19lbnRyaWVzW251bV0uc3Rh dGUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RidWYsDQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0YnVmKSk7DQorDQorICAgICAg ICAgICAgICAgICAgICBzbnByaW50ZihzdGF0ZV9zdHIsDQorICAgICAgICAgICAgICAgICAgICAg c2l6ZW9mKHN0YXRlX3N0ciksDQorICAgICAgICAgICAgICAgICAgICAgIlN0YXRlOiAlcyAoMHgl MDE2bHgpIFslc11cbiIsDQorICAgICAgICAgICAgICAgICAgICAgc3RidWYsDQorICAgICAgICAg ICAgICAgICAgICAgZGVidWdfZW50cmllc1tudW1dLnN0YXRlLA0KKyAgICAgICAgICAgICAgICAg ICAgIGZzdGZfZGVidWdfdHlwZV9kZXNjcihkZWJ1Z19lbnRyaWVzW251bV0uZGJnX3R5cGUpKTsN CisNCisgICAgICAgICAgICAgICAgICAgIGVycm9yID0gc2J1Zl9wcmludGYoJnNidWYsDQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU1RGX0RFQlVHX0ZPUk1BVF9TVFIsDQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19lbnRyaWVzW251bV0udHNjLA0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfZW50cmllc1tudW1dLmF1eCwNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX2VudHJpZXNbbnVtXS50aWQsDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGZzdGZfc3RyaXBfZmlsZV9wYXRoKGRlYnVnX2VudHJpZXNbbnVtXS5maWxl KSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX2VudHJpZXNbbnVtXS5s aW5lLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfZW50cmllc1tudW1d LnN0YXRlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfc3RyKTsNCisg ICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcikgew0KKyAgICAgICAgICAgICAgICAgICAgICAg IHByaW50ZigiRXJyb3I6ICVkIGhhbmRsaW5nIHN5c2N0bCBwcmludGZcbiIsIGVycm9yKTsNCisg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICAgIH0NCisg ICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAg IGVycm9yID0gc2J1Zl9maW5pc2goJnNidWYpOw0KKw0KKyAgICAgICAgc2J1Zl9kZWxldGUoJnNi dWYpOw0KKyAgICAgICAgcmV0dXJuIChlcnJvcik7DQorfQ0KKw0KKy8qIFNldHVwIGZvciB0ZXN0 aW5nIHRoZSByYWNlIGNvbmRpdGlvbiAqLw0KK3N0YXRpYyBpbnQNCitzeXNjdGxfZnN0Zl9zZXR1 cChTWVNDVExfSEFORExFUl9BUkdTKQ0KK3sNCisgICAgICAgIGludCBlcnJvcjsNCisgICAgICAg IHBpZF90IHBpZDsNCisgICAgICAgIHVpbnQ2NF90IHBpZG1vcmU7DQorICAgICAgICBzdHJ1Y3Qg cHJvYyAqcDsNCisNCisgICAgICAgIC8qIEdldCB0aGUgdmFsdWUgc3VwcGxpZWQ7IGFuIDY0IGJp dCBpbnRlZ2VyIHdpdGggPGRlYnVnIHwgcGlkPiAqLw0KKw0KKyAgICAgICAgZXJyb3IgPSBzeXNj dGxfaGFuZGxlXzY0KG9pZHAsICZwaWRtb3JlLCAwLCByZXEpOw0KKyAgICAgICAgaWYgKGVycm9y IHx8IHJlcS0+bmV3cHRyID09IE5VTEwpIHsNCisgICAgICAgICAgICByZXR1cm4gKGVycm9yKTsN CisgICAgICAgIH0NCisNCisgICAgICAgIEZTVEZfREVCVUdfTUlTQygiVGVzdCBIb29rOiBFbnRy eTogJTBseFxuIiwgcGlkbW9yZSk7DQorDQorICAgICAgICBwaWQgPSAocGlkX3QpKEZTVEZfU1lT Q1RMX1BJRF9NQVNLICYgcGlkbW9yZSk7DQorICAgICAgICBkZWJ1Z192YWx1ZSA9IChGU1RGX1NZ U0NUTF9ERUJVR19NQVNLICYgcGlkbW9yZSk7DQorDQorICAgICAgICBGU1RGX0RFQlVHX01JU0Mo IlRlc3QgSG9vazogSW5pdGlhbCBwaWQ9JWQgZGJnPSVsdVxuIiwNCisgICAgICAgICAgICAgICAg ICAgICAgICBwaWQsDQorICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfdmFsdWUpOw0KKw0K KyAgICAgICAgLyogQ29uZmlybSB0aGF0IHRoZSBjYWxsaW5nIHByb2Nlc3MgaXMgY29ycmVjdCAm IGxvb2sgaXQgdXAgKi8NCisgICAgICAgIGVycm9yID0gcGdldChwaWQsIFBHRVRfQ0FOU0VFIHwg UEdFVF9JU0NVUlJFTlQgfCBQR0VUX0NBTkRFQlVHIHwgUEdFVF9OT1RXRVhJVCB8IFBHRVRfTk9U SUQsICZwKTsNCisgICAgICAgIGlmIChlcnJvciAhPSAwKSB7DQorICAgICAgICAgICAgcHJpbnRm KCJUZXN0IEhvb2s6IFNldHVwIEVycm9yLCB1bmFibGUgdG8gbG9va3VwL21hdGNoIFBJRC4gIEVy cm9yOiAlZFxuIiwgZXJyb3IpOw0KKyAgICAgICAgICAgIHJldHVybiAoZXJyb3IpOw0KKyAgICAg ICAgfQ0KKw0KKyAgICAgICAgRlNURl9ERUJVR19NSVNDKCJUZXN0IEhvb2s6IFByb2Nlc3MgTG9j YXRlZCBwaWQ9JWQgbmFtZT0lc1xuIiwNCisgICAgICAgICAgICAgICAgICAgICAgICBwaWQsDQor ICAgICAgICAgICAgICAgICAgICAgICAgcC0+cF9jb21tKTsNCisNCisgICAgICAgIC8qIFJlbGVh c2UgYW55IHByZXZpb3VzIHRlc3QgcmVzb3J1Y2VzICovDQorICAgICAgICBpZiAoc3RhdGVfY29u dHJvbF9hbGxvYykgew0KKyAgICAgICAgICAgIGNvbnRpZ2ZyZWUoc3RhdGVfY29udHJvbF9hbGxv YywNCisgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX2NvbnRyb2xfYWxsb2NfbGVuZ3RoLA0K KyAgICAgICAgICAgICAgICAgICAgICAgTV9GU1RGKTsNCisgICAgICAgICAgICBzdGF0ZV9jb250 cm9sID0gTlVMTDsNCisgICAgICAgICAgICBzdGF0ZV9jb250cm9sX2FsbG9jID0gTlVMTDsNCisg ICAgICAgIH0NCisNCisgICAgICAgIC8qIEFsbG9jYXRlIGEgY29udHJvbCByZWdpb24gJiBtYWtl IHRoZSBwaHlzaWNhbCBhZGRyZXNzIGF2YWlsYWJsZSB2aWEgYSBzeXNjdGwgKi8NCisgICAgICAg IHN0YXRlX2NvbnRyb2xfYWxsb2MgPSBjb250aWdtYWxsb2Moc3RhdGVfY29udHJvbF9hbGxvY19s ZW5ndGgsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1fRlNU RiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTV9XQUlUT0sg fCBNX1pFUk8sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB1 bCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfjB1bCwNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFHRV9TSVpFLA0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsNCisgICAgICAgIGlm IChzdGF0ZV9jb250cm9sX2FsbG9jID09IE5VTEwpIHsNCisgICAgICAgICAgICBlcnJvciA9IDE7 DQorICAgICAgICAgICAgcHJpbnRmKCJUZXN0IEhvb2s6IFNldHVwIEVycm9yLCB1bmFibGUgdG8g YWxsb2NhdGUga2VybmVsIGNvbnRyb2wgbWVtb3J5LlxuIik7DQorICAgICAgICAgICAgZ290byBE b25lOw0KKyAgICAgICAgfQ0KKyAgICAgICAgc3RhdGVfY29udHJvbCA9IHN0YXRlX2NvbnRyb2xf YWxsb2M7DQorICAgICAgICBzdGF0ZV9jb250cm9sX3BhZGRyID0gdnRvcGh5cyhzdGF0ZV9jb250 cm9sX2FsbG9jKTsNCisNCisgICAgICAgIC8qIFNxdWlycmVsIGF3YXkgdGhlIHByb2Nlc3MgcG1h cCBhbmQgdmFkZHI7IHdlIHVzZSB0aGVzZSB0byBtYWtlIHRoZQ0KKyAgICAgICAgICogdGVzdCBo b29rcyBjb25kaXRpb25hbCBvbmx5IG9uIHNlbGVjdCBhY2Nlc3MgKi8NCisgICAgICAgIHRlc3Rf cG1hcCA9IHZtc3BhY2VfcG1hcChwLT5wX3Ztc3BhY2UpOw0KKyAgICAgICAgdGVzdF92YWRkciA9 IEZTVEZfQ09OU1RBTlRfVkFERFI7DQorDQorICAgICAgICAvKiBDbGVhciB0aGUgZGVidWdnaW5n IG91dCBmcm9tIGFueSBwcmV2b3VzIHJ1bnMgKi8NCisgICAgICAgIGludCBudW07DQorICAgICAg ICBmb3IgKG51bSA9IDA7IG51bSA8IEZTVEZfREVCVUdfTlVNQkVSX0VOVFJJRVM7IG51bSsrKSB7 DQorICAgICAgICAgICAgZGVidWdfZW50cmllc1tudW1dLmRiZ190eXBlID0gRlNURl9ERUJVR19U WVBFX1VOVVNFRDsNCisgICAgICAgIH0NCisNCisgICAgICAgIEZTVEZfREVCVUdfTUlTQygiVGVz dCBIb29rOiBJbml0aWF0ZWQgcGlkPSVkLCBuYW1lPSVzLCBwbWFwPSVwLCB2YWRkcj0weCVqeCwg Ig0KKyAgICAgICAgICAgICAgICAgICAgICAgICJjb250cm9sIHZhZGRyPTB4JWp4LCBjb250cm9s IHBhZGRyPTB4JWp4XG4iLA0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBpZCwNCisgICAgICAg ICAgICAgICAgICAgICAgICBwLT5wX2NvbW0sDQorICAgICAgICAgICAgICAgICAgICAgICAgdGVz dF9wbWFwLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICh1aW50bWF4X3QpdGVzdF92YWRkciwN CisgICAgICAgICAgICAgICAgICAgICAgICAodWludG1heF90KXN0YXRlX2NvbnRyb2wsDQorICAg ICAgICAgICAgICAgICAgICAgICAgKHVpbnRtYXhfdClzdGF0ZV9jb250cm9sX3BhZGRyKTsNCisN CisgICAgICAgIERvbmU6DQorDQorICAgICAgICBQUk9DX1VOTE9DSyhwKTsNCisNCisgICAgICAg IHJldHVybiAoZXJyb3IpOw0KK30NCisNCisvKiBUaGUgc3RhdGUvY29udHJvbCByZWdpb24gKi8N Cit2b2xhdGlsZSB1aW50NjRfdCAqIGZzdGZfc3RhdGVfY29udHJvbCh2b2lkKQ0KK3sNCisgICAg ICAgIHJldHVybiAoc3RhdGVfY29udHJvbCk7DQorfQ0KKw0KKy8qIEdldCB0aGUgdHNjIGZyZXF1 ZW5jeSBpbiBzZWNvbmRzICovDQordWludDY0X3QgZnN0Zl90c2NfZnJlcXVlbmN5X3NlY29uZHMo dm9pZCkNCit7DQorICAgICAgICB1aW50NjRfdCBmcmVxID0gYXRvbWljX2xvYWRfYWNxXzY0KCZ0 c2NfZnJlcSk7DQorICAgICAgICByZXR1cm4gKGZyZXEpOw0KK30NCisNCisvKiBBIGZhc3QgcHJl LWRldGVybWluZWQgZGVidWdnaW5nIGZ1bmN0aW9uICovDQordm9pZCBmc3RmX2RlYnVnX2Zhc3Qo Y29uc3QgY2hhciAqIGZpbGUsIGludCBsaW5lLCB1aW50MzJfdCB0eXBlLCB1aW50NjRfdCBzdGF0 ZSkNCit7DQorICAgICAgICBpZiAoZGVidWdfdmFsdWUpIHsNCisNCisgICAgICAgICAgICBzdHJ1 Y3QgdGhyZWFkICp0ZCA9IGN1cnRocmVhZDsNCisgICAgICAgICAgICBpZiAoKHRkICE9IE5VTEwp KSB7DQorDQorICAgICAgICAgICAgICAgIGludCBwb3MgPSBGU1RGX0RFQlVHX1BPU0lUSU9OX0lO REVYKGF0b21pY19mZXRjaGFkZF9pbnQoJmRlYnVnX3Bvc2l0aW9uLCAxKSk7DQorDQorICAgICAg ICAgICAgICAgIGRlYnVnX2VudHJpZXNbcG9zXS50c2MgPSBmc3RmX3RzY19hbmRfYXV4KCZkZWJ1 Z19lbnRyaWVzW3Bvc10uYXV4KTsNCisgICAgICAgICAgICAgICAgZGVidWdfZW50cmllc1twb3Nd LnRpZCA9IHRkLT50ZF90aWQ7DQorICAgICAgICAgICAgICAgIGRlYnVnX2VudHJpZXNbcG9zXS5m aWxlID0gZmlsZTsNCisgICAgICAgICAgICAgICAgZGVidWdfZW50cmllc1twb3NdLmxpbmUgPSBs aW5lOw0KKyAgICAgICAgICAgICAgICBkZWJ1Z19lbnRyaWVzW3Bvc10uc3RhdGUgPSBzdGF0ZTsN CisgICAgICAgICAgICAgICAgZGVidWdfZW50cmllc1twb3NdLmRiZ190eXBlID0gdHlwZTsNCisg ICAgICAgICAgICB9DQorICAgICAgICB9DQorfQ0KKw0KKy8qIEEgbWlzYyB0ZXh0IGRlYnVnZ2lu ZyBmdW5jdGlvbiAqLw0KK3ZvaWQgZnN0Zl9kZWJ1Z19taXNjKGNvbnN0IGNoYXIgKiBmaWxlLCBp bnQgbGluZSwgY29uc3QgY2hhciAqZm10LCAuLi4pDQorew0KKyAgICAgICAgaWYgKGRlYnVnX3Zh bHVlKSB7DQorDQorICAgICAgICAgICAgc3RydWN0IHRocmVhZCAqdGQgPSBjdXJ0aHJlYWQ7DQor ICAgICAgICAgICAgaWYgKCh0ZCAhPSBOVUxMKSkgew0KKw0KKyAgICAgICAgICAgICAgICBjaGFy IGJ1ZmZlcls1MTJdOw0KKyAgICAgICAgICAgICAgICB2YV9saXN0IGFwOw0KKw0KKyAgICAgICAg ICAgICAgICB2YV9zdGFydChhcCwgZm10KTsNCisNCisgICAgICAgICAgICAgICAgdnNucHJpbnRm KGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGZtdCwgYXApOw0KKw0KKyAgICAgICAgICAgICAgICB2 YV9lbmQoYXApOw0KKw0KKyAgICAgICAgICAgICAgICB1aW50NjRfdCBzdGF0ZSA9IGZzdGZfc3Rh dGVfdmFsdWUoKTsNCisNCisgICAgICAgICAgICAgICAgaW50IHBvcyA9IEZTVEZfREVCVUdfUE9T SVRJT05fSU5ERVgoYXRvbWljX2ZldGNoYWRkX2ludCgmZGVidWdfcG9zaXRpb24sIDEpKTsNCisN CisgICAgICAgICAgICAgICAgdWludDMyX3QgYXV4Ow0KKyAgICAgICAgICAgICAgICB1aW50NjRf dCB0c2MgPSBmc3RmX3RzY19hbmRfYXV4KCZhdXgpOw0KKw0KKyAgICAgICAgICAgICAgICBkZWJ1 Z19lbnRyaWVzW3Bvc10uZGJnX3R5cGUgPSBGU1RGX0RFQlVHX1RZUEVfTUlTQ0VMTEFORU9VUzsN CisNCisgICAgICAgICAgICAgICAgc25wcmludGYoZGVidWdfZW50cmllc1twb3NdLm1pc2MsDQor ICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGRlYnVnX2VudHJpZXNbcG9zXS5taXNjKSwNCisg ICAgICAgICAgICAgICAgICAgICBGU1RGX0RFQlVHX0ZPUk1BVF9TVFIsDQorICAgICAgICAgICAg ICAgICAgICAgdHNjLA0KKyAgICAgICAgICAgICAgICAgICAgIGF1eCwNCisgICAgICAgICAgICAg ICAgICAgICAodGQgPT0gTlVMTCA/IDAgOiB0ZC0+dGRfdGlkKSwNCisgICAgICAgICAgICAgICAg ICAgICAodGQgPT0gTlVMTCA/ICIiIDogdGQtPnRkX25hbWUpLA0KKyAgICAgICAgICAgICAgICAg ICAgIGZzdGZfc3RyaXBfZmlsZV9wYXRoKGZpbGUpLA0KKyAgICAgICAgICAgICAgICAgICAgIGxp bmUsDQorICAgICAgICAgICAgICAgICAgICAgc3RhdGUsDQorICAgICAgICAgICAgICAgICAgICAg YnVmZmVyKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorfQ0KKw0KKy8qIEEgJ2dvdCBo ZXJlJyBkZWJ1Z2dpbmcgZnVuY3Rpb24gKi8NCit2b2lkIGZzdGZfY29uZGl0aW9uYWxfcG9pbnRf ZGVidWcoY29uc3QgY2hhciAqIGZpbGUsIGludCBsaW5lLCBwbWFwX3QgcG1hcCwgdm1fb2Zmc2V0 X3QgdmFkZHIpDQorew0KKyAgICBpZiAoKHBtYXAgIT0gTlVMTCkgJiYNCisgICAgICAgIChwbWFw ID09IHRlc3RfcG1hcCkgJiYNCisgICAgICAgICgoKGRlYnVnX3ZhbHVlICYgRlNURl9TWVNDVExf REVCVUdfSEVBVlkpID09IEZTVEZfU1lTQ1RMX0RFQlVHX0hFQVZZKSB8fA0KKyAgICAgICAgICAo KHRlc3RfdmFkZHIgPD0gdmFkZHIpICYmICh2YWRkciA8ICh0ZXN0X3ZhZGRyICsgUEFHRV9TSVpF KSkpKSkgew0KKw0KKyAgICAgICAgZnN0Zl9kZWJ1Z19taXNjKGZpbGUsDQorICAgICAgICAgICAg ICAgIGxpbmUsDQorICAgICAgICAgICAgICAgICJEZWJ1ZzogcG1hcD0lcCB2YWRkcj0weCVqeFxu IiwNCisgICAgICAgICAgICAgICAgcG1hcCwNCisgICAgICAgICAgICAgICAgdmFkZHIpOw0KKyAg ICB9DQorfQ0KKw0KKy8qIEEgdm1fcGFnZV90IGluZm8gZGVidWdnaW5nIGZ1bmN0aW9uICovDQor c3RhdGljIHZvaWQgZnN0Zl9kZWJ1Z19wYWdlKGNvbnN0IGNoYXIgKiBmaWxlLCBpbnQgbGluZSwg dm1fb2Zmc2V0X3QgdmFkZHIsIHZtX3BhZ2VfdCBtKQ0KK3sNCisgICAgZnN0Zl9kZWJ1Z19taXNj KGZpbGUsDQorICAgICAgICAgICAgICAgICAgICAgICAgbGluZSwNCisgICAgICAgICAgICAgICAg ICAgICAgICAiRGVidWc6IFZBZGRyOjB4JWp4IHBhZ2UgJXAgb2JqICVwIHBpZHggMHglanggcGh5 cyAweCVqeCBxICVkIGhvbGQgJWQgd2lyZSAlZCINCisgICAgICAgICAgICAgICAgICAgICAgICAi ICBhZiAweCV4IG9mIDB4JXggZiAweCV4IGFjdCAlZCBidXN5ICV4IHZhbGlkIDB4JXggZGlydHkg MHgleFxuIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAodWludG1heF90KXZhZGRyLA0KKyAg ICAgICAgICAgICAgICAgICAgICAgIG0sDQorICAgICAgICAgICAgICAgICAgICAgICAgbS0+b2Jq ZWN0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICh1aW50bWF4X3QpbS0+cGluZGV4LA0KKyAg ICAgICAgICAgICAgICAgICAgICAgICh1aW50bWF4X3QpbS0+cGh5c19hZGRyLA0KKyAgICAgICAg ICAgICAgICAgICAgICAgIG0tPnF1ZXVlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgIG0tPmhv bGRfY291bnQsDQorICAgICAgICAgICAgICAgICAgICAgICAgbS0+d2lyZV9jb3VudCwNCisgICAg ICAgICAgICAgICAgICAgICAgICBtLT5hZmxhZ3MsDQorICAgICAgICAgICAgICAgICAgICAgICAg bS0+b2ZsYWdzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgIG0tPmZsYWdzLA0KKyAgICAgICAg ICAgICAgICAgICAgICAgIG0tPmFjdF9jb3VudCwNCisgICAgICAgICAgICAgICAgICAgICAgICBt LT5idXN5X2xvY2ssDQorICAgICAgICAgICAgICAgICAgICAgICAgbS0+dmFsaWQsDQorICAgICAg ICAgICAgICAgICAgICAgICAgbS0+ZGlydHkpOw0KK30NCisNCisvKiBBIHB0X2VudHJ5X3QgaW5m byBkZWJ1Z2dpbmcgZnVuY3Rpb24gKi8NCit2b2lkIGZzdGZfY29uZGl0aW9uYWxfcHRlX2RlYnVn KGNvbnN0IGNoYXIgKiBmaWxlLCBpbnQgbGluZSwgcG1hcF90IHBtYXAsIHZtX29mZnNldF90IHZh ZGRyLCBwdF9lbnRyeV90IHB0ZSkNCit7DQorICAgIGlmICgocG1hcCAhPSBOVUxMKSAmJg0KKyAg ICAgICAgKHBtYXAgPT0gdGVzdF9wbWFwKSAmJg0KKyAgICAgICAgKCgoZGVidWdfdmFsdWUgJiBG U1RGX1NZU0NUTF9ERUJVR19IRUFWWSkgPT0gRlNURl9TWVNDVExfREVCVUdfSEVBVlkpIHx8DQor ICAgICAgICAgICAgICAoKHRlc3RfdmFkZHIgPD0gdmFkZHIpICYmICh2YWRkciA8ICh0ZXN0X3Zh ZGRyICsgUEFHRV9TSVpFKSkpKSkgew0KKw0KKyAgICAgICAgdm1fcGFnZV90IG0gPSBQSFlTX1RP X1ZNX1BBR0UocHRlICYgUEdfRlJBTUUpOw0KKyAgICAgICAgZnN0Zl9kZWJ1Z19taXNjKGZpbGUs DQorICAgICAgICAgICAgICAgIGxpbmUsDQorICAgICAgICAgICAgICAgICJEZWJ1ZzogSGl0W3Bt YXA6JXAgVkFkZHI6MHglanggUDoweCVqeCBGOiUwMTZseF0gJXN8JXN8JXN8JXN8JXN8JXN8JXN8 JXN8JXN8JXN8JXN8JXN8JXNcbiIsDQorICAgICAgICAgICAgICAgIHBtYXAsDQorICAgICAgICAg ICAgICAgICh1aW50bWF4X3QpdmFkZHIsDQorICAgICAgICAgICAgICAgICh1aW50bWF4X3QpKHB0 ZSAmIFBHX0ZSQU1FKSwNCisgICAgICAgICAgICAgICAgcHRlLA0KKyAgICAgICAgICAgICAgICAo KHB0ZSAmIFBHX1YpID8gICAgICAgICAgICAgIlZhbGlkIiA6ICAgICAgICAgICAgICAgIkludmFs aWQiKSwNCisgICAgICAgICAgICAgICAgKChwdGUgJiBQR19SVykgPyAgICAgICAgICAgICJSZWFk LVdyaXRlIiA6ICAgICAgICAgICJOby1SZWFkLVdyaXRlIiksDQorICAgICAgICAgICAgICAgICgo cHRlICYgUEdfQSkgPyAgICAgICAgICAgICAiQWNjZXNzZWQiIDogICAgICAgICAgICAiTm90LUFj Y2Vzc2VkIiksDQorICAgICAgICAgICAgICAgICgocHRlICYgUEdfTSkgPyAgICAgICAgICAgICAi RGlydHkiIDogICAgICAgICAgICAgICAiTm90LURpcnR5IiksDQorICAgICAgICAgICAgICAgICgo cHRlICYgUEdfUFMpID8gICAgICAgICAgICAiNEstUGFnZS1TaXplIiA6ICAgICAgICAiMk0tUGFn ZS1TaXplIiksDQorICAgICAgICAgICAgICAgICgocHRlICYgUEdfRykgPyAgICAgICAgICAgICAi R2xvYmFsIiA6ICAgICAgICAgICAgICAiTm90LUdsb2JhbCIpLA0KKyAgICAgICAgICAgICAgICAo KHB0ZSAmIFBHX0FWQUlMMSkgPyAgICAgICAgIkF2YWlsMSIgOiAgICAgICAgICAgICAgIk5vLUF2 YWlsMSIpLA0KKyAgICAgICAgICAgICAgICAoKHB0ZSAmIFBHX0FWQUlMMikgPyAgICAgICAgIk1h bmFnZWQiIDogICAgICAgICAgICAgIlVubWFuYWdlZCIpLA0KKyAgICAgICAgICAgICAgICAoKHB0 ZSAmIFBHX0FWQUlMMykgPyAgICAgICAgIldpcmVkIiA6ICAgICAgICAgICAgICAgIk5vdC1XaXJl ZCIpLA0KKyAgICAgICAgICAgICAgICAoKHB0ZSAmIFBHX1UpID8gICAgICAgICAgICAgIlVzZXIt U3VwZXJ2aXNvciIgOiAgICAgIk5vLVVzZXItU3VwZXJ2aXNvciIpLA0KKyAgICAgICAgICAgICAg ICAoKHB0ZSAmIFBHX05DX1BXVCkgPyAgICAgICAgIldyaXRlLVRocm91Z2giIDogICAgICAgIk5v LVdyaXRlLVRocm91Z2giKSwNCisgICAgICAgICAgICAgICAgKChwdGUgJiBQR19OQ19QQ0QpID8g ICAgICAgICJDYWNoZS1EaXNhYmxlIiA6ICAgICAgICJOby1DYWNoZS1EaXNhYmxlIiksDQorICAg ICAgICAgICAgICAgICgocHRlICYgUEdfUFRFX1BBVCkgPyAgICAgICAiUEFULUluZGV4IiA6ICAg ICAgICAgICAiTm8tUEFULUluZGV4IikpOw0KKyAgICAgICAgaWYgKG0gIT0gTlVMTCkNCisgICAg ICAgIHsNCisgICAgICAgICAgICBmc3RmX2RlYnVnX3BhZ2UoZmlsZSwgbGluZSwgdmFkZHIsIG0p Ow0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KKy8qIEEgJ2dvdCBoZXJlJyBkZWJ1Z2dpbmcg ZnVuY3Rpb24gKi8NCit2b2lkIGZzdGZfY29uZGl0aW9uYWxfZmF1bHRfZGVidWcoY29uc3QgY2hh ciAqIGZpbGUsIGludCBsaW5lLCBwbWFwX3QgcG1hcCwgdm1fb2Zmc2V0X3QgdmFkZHIsIHZtX3By b3RfdCBwcm90KQ0KK3sNCisgICAgaWYgKChwbWFwICE9IE5VTEwpICYmDQorICAgICAgICAocG1h cCA9PSB0ZXN0X3BtYXApICYmDQorICAgICAgICAoKChkZWJ1Z192YWx1ZSAmIEZTVEZfU1lTQ1RM X0RFQlVHX0hFQVZZKSA9PSBGU1RGX1NZU0NUTF9ERUJVR19IRUFWWSkgfHwNCisgICAgICAgICAg KCh0ZXN0X3ZhZGRyIDw9IHZhZGRyKSAmJiAodmFkZHIgPCAodGVzdF92YWRkciArIFBBR0VfU0la RSkpKSkpIHsNCisNCisgICAgICAgIGZzdGZfZGVidWdfbWlzYyhmaWxlLA0KKyAgICAgICAgICAg ICAgICBsaW5lLA0KKyAgICAgICAgICAgICAgICAiRGVidWc6IHBtYXA9JXAgdmFkZHI9MHglangg cHJvdD0lc3wlc3wlc3wlc3wlc1xuIiwNCisgICAgICAgICAgICAgICAgcG1hcCwNCisgICAgICAg ICAgICAgICAgdmFkZHIsDQorICAgICAgICAgICAgICAgICgocHJvdCAmIFZNX1BST1RfUkVBRCkg PyAiUmVhZCIgOiAiTm8tUmVhZCIpLA0KKyAgICAgICAgICAgICAgICAoKHByb3QgJiBWTV9QUk9U X1dSSVRFKSA/ICJXcml0ZSIgOiAiTm8tV3JpdGUiKSwNCisgICAgICAgICAgICAgICAgKChwcm90 ICYgVk1fUFJPVF9FWEVDVVRFKSA/ICJFeGVjdXRlIiA6ICJOby1FeGVjdXRlIiksDQorICAgICAg ICAgICAgICAgICgocHJvdCAmIFZNX1BST1RfQ09QWSkgPyAiQ29weSIgOiAiTm8tQ29weSIpLA0K KyAgICAgICAgICAgICAgICAoKHByb3QgJiBWTV9QUk9UX0ZBVUxUX0xPT0tVUCkgPyAiTG9va3Vw IiA6ICJOby1Mb29rdXAiKSk7DQorICAgIH0NCit9DQorDQorLyogQSBoZWxwZXIgdG8gY2hlY2sg aWYgYSBzdXBwbGllZCBwbWFwIGFuZCB2YWRkciBtYXRjaCBhbmQgc2hvdWxkIHRyaWdnZXIgdGVz dCBjb2RlICovDQorc3RhdGljIGludCBmc3RmX2NvbmRpdGlvbmFsKHBtYXBfdCBwbWFwLCB2bV9v ZmZzZXRfdCB2YWRkcikNCit7DQorICAgIGlmICgocG1hcCAhPSBOVUxMKSAmJg0KKyAgICAgICAg KHBtYXAgPT0gdGVzdF9wbWFwKSAmJg0KKyAgICAgICAgKCh0ZXN0X3ZhZGRyIDw9IHZhZGRyKSAm JiAodmFkZHIgPCAodGVzdF92YWRkciArIFBBR0VfU0laRSkpKSkgew0KKw0KKyAgICAgICAgcmV0 dXJuICgxKTsNCisgICAgfQ0KKyAgICByZXR1cm4gKDApOw0KK30NCisNCisvKiBEZWJ1ZyAmIGFk dmFuY2UgdGhlIHN0YXRlIG9uY2UgYXQgdGhlIGFwcHJvcHJpYXRlIGVycm9yLWdlbiBzdGF0ZSAq Lw0KK2ludCBmc3RmX2NvbmRpdGlvbmFsX3BtYXBtb2RfYWR2YW5jZShjb25zdCBjaGFyICogZmls ZSwgaW50IGxpbmUsIHZtX29mZnNldF90IHZhZGRyLCB2bV9wYWdlX3QgbSkNCit7DQorICAgICAg ICBpbnQgc3RhdHVzID0gMDsNCisgICAgICAgIHBtYXBfdCBwbWFwID0gUENQVV9HRVQoY3VycG1h cCk7DQorICAgICAgICBpZiAoZnN0Zl9jb25kaXRpb25hbChwbWFwLCB2YWRkcikpIHsNCisNCisg ICAgICAgICAgICBpZiAoc3RhdGVfY29udHJvbCkgew0KKw0KKyAgICAgICAgICAgICAgICB1aW50 NjRfdCBvbGRfdmFsOw0KKyAgICAgICAgICAgICAgICB1aW50NjRfdCBuZXdfdmFsOw0KKw0KKyAg ICAgICAgICAgICAgICBmc3RmX2RlYnVnX2Zhc3QoZmlsZSwNCisgICAgICAgICAgICAgICAgICAg ICAgICBsaW5lLA0KKyAgICAgICAgICAgICAgICAgICAgICAgIEZTVEZfREVCVUdfVFlQRV9UUkFO U0lUSU9OX0lOSVRJQUwsDQorICAgICAgICAgICAgICAgICAgICAgICAgZnN0Zl9zdGF0ZV92YWx1 ZSgpKTsNCisNCisgICAgICAgICAgICAgICAgZnN0Zl9kZWJ1Z19wYWdlKGZpbGUsIGxpbmUsIHZh ZGRyLCBtKTsNCisNCisgICAgICAgICAgICAgICAgZG8NCisgICAgICAgICAgICAgICAgew0KKyAg ICAgICAgICAgICAgICAgICAgb2xkX3ZhbCA9IGF0b21pY19sb2FkX2FjcV82NChzdGF0ZV9jb250 cm9sKTsNCisgICAgICAgICAgICAgICAgICAgIGlmICgob2xkX3ZhbCAmIEZTVEZfU1RBVEVfQklU U19QUklNRUQpICE9IEZTVEZfU1RBVEVfQklUU19QUklNRUQpDQorICAgICAgICAgICAgICAgICAg ICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gMDsNCisgICAgICAgICAgICAg ICAgICAgICAgICBnb3RvIERvbmU7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAg ICAgICAgICAgICBpZiAob2xkX3ZhbCAmIEZTVEZfU1RBVEVfQklUU19GSU5JU0hFRCkNCisgICAg ICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAwOw0K KyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gRG9uZTsNCisgICAgICAgICAgICAgICAgICAg IH0NCisgICAgICAgICAgICAgICAgICAgIG5ld192YWwgPSAob2xkX3ZhbCB8IEZTVEZfU1RBVEVf QklUX0tFUk5FTF9QTUFQTU9EKTsNCisNCisgICAgICAgICAgICAgICAgfSB3aGlsZSAoIWF0b21p Y19jbXBzZXRfNjQoc3RhdGVfY29udHJvbCwgb2xkX3ZhbCwgbmV3X3ZhbCkpOw0KKw0KKyAgICAg ICAgICAgICAgICBmc3RmX2RlYnVnX2Zhc3QoZmlsZSwNCisgICAgICAgICAgICAgICAgICAgICAg ICBsaW5lLA0KKyAgICAgICAgICAgICAgICAgICAgICAgIEZTVEZfREVCVUdfVFlQRV9UUkFOU0lU SU9OX0ZJTkFMLA0KKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld192YWwpOw0KKyAgICAgICAg ICAgICAgICBzdGF0dXMgPSAxOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAg ICAgIERvbmU6DQorDQorICAgICAgICByZXR1cm4gKHN0YXR1cyk7DQorfQ0KKw0KKw0KKw0KKw0K Kw0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KICNpZiBkZWZpbmVkKElO VkFSSUFOVFMpIHx8IGRlZmluZWQoSU5WQVJJQU5UX1NVUFBPUlQpDQogdm9pZA0KIHZtX3BhZ2Vf YXNzZXJ0X2xvY2tlZF9LQkkodm1fcGFnZV90IG0sIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5l KQ0KZGlmZiAtLWdpdCBhL3N5cy92bS92bV9wYWdlLmggYi9zeXMvdm0vdm1fcGFnZS5oDQppbmRl eCA2Y2E4MDhiLi5lMjUwYmUwIDEwMDY0NA0KLS0tIGEvc3lzL3ZtL3ZtX3BhZ2UuaA0KKysrIGIv c3lzL3ZtL3ZtX3BhZ2UuaA0KQEAgLTQ1Miw2ICs0NTIsMTEgQEAgbWFsbG9jMnZtX2ZsYWdzKGlu dCBtYWxsb2NfZmxhZ3MpDQogI2RlZmluZQlQU19BTExfVkFMSUQJMHgyDQogI2RlZmluZQlQU19O T05FX0JVU1kJMHg0DQogDQordm9pZCBmc3RmX2NvbmRpdGlvbmFsX3BvaW50X2RlYnVnKGNvbnN0 IGNoYXIgKiBmaWxlLCBpbnQgbGluZSwgcG1hcF90IHBtYXAsIHZtX29mZnNldF90IHZhZGRyKTsN Cit2b2lkIGZzdGZfY29uZGl0aW9uYWxfZmF1bHRfZGVidWcoY29uc3QgY2hhciAqIGZpbGUsIGlu dCBsaW5lLCBwbWFwX3QgcG1hcCwgdm1fb2Zmc2V0X3QgdmFkZHIsIHZtX3Byb3RfdCBwcm90KTsN Cit2b2lkIGZzdGZfY29uZGl0aW9uYWxfcHRlX2RlYnVnKGNvbnN0IGNoYXIgKiBmaWxlLCBpbnQg bGluZSwgcG1hcF90IHBtYXAsIHZtX29mZnNldF90IHZhZGRyLCBwdF9lbnRyeV90IHB0ZSk7DQor aW50IGZzdGZfY29uZGl0aW9uYWxfcG1hcG1vZF9hZHZhbmNlKGNvbnN0IGNoYXIgKiBmaWxlLCBp bnQgbGluZSwgdm1fb2Zmc2V0X3QgdmFkZHIsIHZtX3BhZ2VfdCBtKTsNCisNCiB2b2lkIHZtX3Bh Z2VfYnVzeV9kb3duZ3JhZGUodm1fcGFnZV90IG0pOw0KIHZvaWQgdm1fcGFnZV9idXN5X3NsZWVw KHZtX3BhZ2VfdCBtLCBjb25zdCBjaGFyICptc2csIGJvb2wgbm9uc2hhcmVkKTsNCiB2b2lkIHZt X3BhZ2VfZmxhc2godm1fcGFnZV90IG0pOw0KLS0gDQoyLjEwLjINCg0K --_003_5A82AB7C6090404dellcom_ Content-Type: text/x-patch; name="0002-TRIAL-Double-invalidate-when-finishing-COW-pmap-upda.patch" Content-Description: 0002-TRIAL-Double-invalidate-when-finishing-COW-pmap-upda.patch Content-Disposition: attachment; filename="0002-TRIAL-Double-invalidate-when-finishing-COW-pmap-upda.patch"; size=3688; creation-date="Tue, 13 Feb 2018 09:10:21 GMT"; modification-date="Tue, 13 Feb 2018 09:10:21 GMT" Content-ID: <66A7CD139204C34089CCB0755404B2EF@dell.com> Content-Transfer-Encoding: base64 RnJvbSAwMDRkM2U4NzljZGY4OTQ3NzFlMjYwZmFkYWY5MmM0OGU0ODE4MGZlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQ0KRnJvbTogRWxsaW90dCBSYWJlIDxlbGxpb3R0LnJhYmVAZGVsbC5jb20+ DQpEYXRlOiBTdW4sIDExIEZlYiAyMDE4IDE3OjI5OjE1IC0wNjAwDQpTdWJqZWN0OiBbUEFUQ0gg Mi8zXSBUUklBTDogRG91YmxlIGludmFsaWRhdGUgd2hlbiBmaW5pc2hpbmcgQ09XIHBtYXAgdXBk YXRlDQoNCldoZW4gYSBwcm9jZXNzIGZvcmtzIHRoZSBmaXJzdCB3cml0ZSB0byBhIHBhZ2Ugb2Yg bWVtb3J5IHN0YXJ0cyBhIGNvcHktb24td3JpdGUNCm9wZXJhdGlvbi4gIFRoZSBwbWFwIGlzIGN1 cnJlbnRseSB1cGRhdGVkIHdpdGggdGhlIG5ldyBwaHlzaWNhbCBhZGRyZXNzIGFuZCB0aGUNCndy aXRhYmxlIHN0YXR1cyBpbiBhIHNpbmdsZSBhdG9taWMgb3BlcmF0aW9uIGZvbGxvd2VkIGJ5IHRo ZSBuZWNlc3NhcnkgVExCDQppbnZhbGlkYXRpb25zLiAgTWFya2luZyB0aGUgcGFnZSB3cml0ZWFi bGUgYmVmb3JlIHRoZSBpbnZhbGlkYXRpb25zIGFyZSBjb21wbGV0ZQ0KYWxsb3dzIHRoZSBwYWdl IGNvbnRlbnRzIHRvIGJlIGNoYW5nZWQgYmVmb3JlIHRoZXkgYXJlIGd1YXJhbnRlZWQgdG8gYmUg ZnVsbHkNCnZpc2libGUuICBUaGlzIGNhbiByZXN1bHQgaW4gc3VidGxlIG1lbW9yeSBjb3JydXB0 aW9ucy4NCg0KSGVyZSBpcyBhIHNpbXBsaWZpZWQgZXhhbXBsZSBvZiB3aGF0IGNhbiBvY2N1cjoN Cg0KICArQSBwcm9jZXNzIGlzIGZvcmtlZCB3aGljaCB0cmFuc2l0aW9ucyBhIG1hcCBlbnRyeSB0 byBDT1cNCiAgK1RocmVhZCBBIHdyaXRlcyB0byBhIHBhZ2Ugb24gdGhlIG1hcCBlbnRyeSwgZmF1 bHRzLCB1cGRhdGVzIHRoZSBwbWFwIHRvDQogICB3cml0YWJsZSBhdCBhIG5ldyBwaHlzIGFkZHIs IGFuZCBzdGFydHMgVExCIGludmFsaWRhdGlvbnMuLi4NCiAgK1RocmVhZCBCIGFjcXVpcmVzIGEg bG9jaywgd3JpdGVzIHRvIGEgbG9jYXRpb24gb24gdGhlIG5ldyBwaHlzIGFkZHIsDQogICBhbmQg cmVsZWFzZXMgdGhlIGxvY2sNCiAgK1RocmVhZCBDIGFjcXVpcmVzIHRoZSBsb2NrLCByZWFkcyBm cm9tIHRoZSBsb2NhdGlvbiBvbiB0aGUgb2xkIHBoeXMgYWRkci4uLg0KICArVGhyZWFkIEEgLi4u Y29udGludWVzIHRoZSBUTEIgaW52YWxpZGF0aW9ucyB3aGljaCBhcmUgY29tcGxldGVkDQogICtU aHJlYWQgQyAuLi5yZWFkcyBmcm9tIHRoZSBsb2NhdGlvbiBvbiB0aGUgbmV3IHBoeXMgYWRkciwg YW5kIHJlbGVhc2VzDQogICB0aGUgbG9jaw0KDQpJbiB0aGlzIGV4YW1wbGUgVGhyZWFkIEIgYW5k IEMgbG9jaywgdXNlIG1lbW9yeSBhbmQgdW5sb2NrIHByb3Blcmx5IGFuZCBuZWl0aGVyDQpvd24g dGhlIGxvY2sgYXQgdGhlIHNhbWUgdGltZS4gIFRocmVhZCBDIHNlZXMgZGF0YSBwcm90ZWN0ZWQg YnkgYSBsb2NrIGNoYW5nZQ0KYmVuZWF0aCBpdCB3aGlsZSBpdCBpcyB0aGUgbG9jayBvd25lci4g IFRocmVhZCBBIHdhcyB3cml0aW5nIHNvbWV3aGVyZSBlbHNlIG9uDQp0aGUgcGFnZSBhbmQgc28g bmV2ZXIgbmVlZGVkIHRoZSBsb2NrLg0KDQpUaGlzIGNvbW1pdCBpbnRyb2R1Y2VzIGEgZG91Ymxl LXVwZGF0ZS1pbnZhbGlkYXRpb24gZm9yIHRoZSBzY2VuYXJpbyBhYm92ZS4gIFRoZQ0KcG1hcCB1 cGRhdGUgd2lsbCBmaXJzdCBhcHBseSB0aGUgbmV3IGFkZHJlc3MgaW4gYSByZWFkLW9ubHkgc3Rh dGUgYW5kIHBlcmZvcm0gdGhlDQpUTEIgaW52YWxpZGF0aW9ucy4gIEltbWVkaWF0ZWx5IGFmdGVy d2FyZHMsIHRoZSBwbWFwIHdpbGwgYmUgdXBkYXRlZCBhZ2FpbiBtYXJraW5nDQp0aGUgcmVnaW9u IGFzIHdyaXRlYWJsZS4gIFRoaXMgc3RyYXRlZ3kgZW5zdXJlcyB0aGUgcGFnZSBjb250ZW50cyBh cmUgaW1tdXRhYmxlDQp1bnRpbCBhbGwgQ1BVcyBrbm93IHRoZSBjb3JyZWN0IGxvY2F0aW9uLg0K LS0tDQogc3lzL2FtZDY0L2FtZDY0L3BtYXAuYyB8IDE5ICsrKysrKysrKysrKysrKysrKy0NCiAx IGZpbGUgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQ0KDQpkaWZmIC0t Z2l0IGEvc3lzL2FtZDY0L2FtZDY0L3BtYXAuYyBiL3N5cy9hbWQ2NC9hbWQ2NC9wbWFwLmMNCmlu ZGV4IDdiYjljMWIuLmFhOTFjYjEgMTAwNjQ0DQotLS0gYS9zeXMvYW1kNjQvYW1kNjQvcG1hcC5j DQorKysgYi9zeXMvYW1kNjQvYW1kNjQvcG1hcC5jDQpAQCAtNDYzOCw3ICs0NjM4LDcgQEAgcG1h cF9lbnRlcihwbWFwX3QgcG1hcCwgdm1fb2Zmc2V0X3QgdmEsIHZtX3BhZ2VfdCBtLCB2bV9wcm90 X3QgcHJvdCwNCiAJdm1fcGFkZHJfdCBvcGEsIHBhOw0KIAl2bV9wYWdlX3QgbXB0ZSwgb207DQog CWludCBydjsNCi0JYm9vbGVhbl90IG5vc2xlZXA7DQorCWJvb2xlYW5fdCBub3NsZWVwLCBkZWxh eXJ3Ow0KIA0KIAlQR19BID0gcG1hcF9hY2Nlc3NlZF9iaXQocG1hcCk7DQogCVBHX0cgPSBwbWFw X2dsb2JhbF9iaXQocG1hcCk7DQpAQCAtNDcyOCw2ICs0NzI4LDcgQEAgcG1hcF9lbnRlcihwbWFw X3QgcG1hcCwgdm1fb2Zmc2V0X3QgdmEsIHZtX3BhZ2VfdCBtLCB2bV9wcm90X3QgcHJvdCwNCiAJ CXBhbmljKCJwbWFwX2VudGVyOiBpbnZhbGlkIHBhZ2UgZGlyZWN0b3J5IHZhPSUjbHgiLCB2YSk7 DQogDQogCW9yaWdwdGUgPSAqcHRlOw0KKwlkZWxheXJ3ID0gMDsNCiANCiAJLyoNCiAJICogSXMg dGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgYWxyZWFkeSBtYXBwZWQ/DQpAQCAtNDc2OCw2 ICs0NzY5LDExIEBAIHBtYXBfZW50ZXIocG1hcF90IHBtYXAsIHZtX29mZnNldF90IHZhLCB2bV9w YWdlX3QgbSwgdm1fcHJvdF90IHByb3QsDQogCQkJaWYgKCgob3JpZ3B0ZSBeIG5ld3B0ZSkgJiB+ KFBHX00gfCBQR19BKSkgPT0gMCkNCiAJCQkJZ290byB1bmNoYW5nZWQ7DQogCQkJZ290byB2YWxp ZGF0ZTsNCisJCX0gZWxzZSBpZiAoKChvcmlncHRlICYgUEdfTUFOQUdFRCkgIT0gMCkgJiYNCisJ CQkgICAoKG9yaWdwdGUgJiBQR19SVykgPT0gMCkgJiYNCisJCQkgICAoKG5ld3B0ZSAmIFBHX1JX KSAhPSAwKSkgew0KKwkJCW5ld3B0ZSAmPSB+UEdfUlc7DQorCQkJZGVsYXlydyA9IDE7DQogCQl9 DQogCX0gZWxzZSB7DQogCQkvKg0KQEAgLTQ4NDEsNiArNDg0NywxNyBAQCBwbWFwX2VudGVyKHBt YXBfdCBwbWFwLCB2bV9vZmZzZXRfdCB2YSwgdm1fcGFnZV90IG0sIHZtX3Byb3RfdCBwcm90LA0K IAkJCSAqLw0KIAkJCWdvdG8gdW5jaGFuZ2VkOw0KIAkJfQ0KKwkJaWYgKGRlbGF5cncpIHsNCisJ CQkvKg0KKwkJCSAqIElmIGJvdGggdGhlIHBoeXNpY2FsIGFkZHJlc3MgaGFzIGNoYW5nZWQgYW5k IHdlJ3JlIGFkZGluZw0KKwkJCSAqIFJXLCB3ZSBkbyBhIHR3by1zdGFnZSB1cGRhdGUgc28gdGhl IHJlZ2lvbiBpcyBpbW11dGFibGUNCisJCQkgKiB1bnRpbCBhbGwgQ1BVcyBoYXZlIHZpc2liaWxp dHkgdG8gdGhlIG5ldyBhZGRyZXNzLg0KKwkJCSAqLw0KKwkJCWlmICgob3JpZ3B0ZSAmIFBHX0Ep ICE9IDApDQorCQkJCXBtYXBfaW52YWxpZGF0ZV9wYWdlKHBtYXAsIHZhKTsNCisJCQluZXdwdGUg fD0gUEdfUlc7DQorCQkJb3JpZ3B0ZSA9IHB0ZV9sb2FkX3N0b3JlKHB0ZSwgbmV3cHRlKTsNCisJ CX0NCiAJCWlmICgob3JpZ3B0ZSAmIFBHX0EpICE9IDApDQogCQkJcG1hcF9pbnZhbGlkYXRlX3Bh Z2UocG1hcCwgdmEpOw0KIAl9IGVsc2UNCi0tIA0KMi4xMC4yDQoNCg== --_003_5A82AB7C6090404dellcom_--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5A82AB7C.6090404>