From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: [PATCH v6 1/7] xen/arm: Introduce alternative runtime patching Date: Wed, 3 Aug 2016 15:45:01 -0400 Message-ID: <20160803194501.GC22173@char.us.oracle.com> References: <1469637431-1069-1-git-send-email-julien.grall@arm.com> <1469637431-1069-2-git-send-email-julien.grall@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1469637431-1069-2-git-send-email-julien.grall@arm.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Julien Grall Cc: sstabellini@kernel.org, xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org T24gV2VkLCBKdWwgMjcsIDIwMTYgYXQgMDU6Mzc6MDVQTSArMDEwMCwgSnVsaWVuIEdyYWxsIHdy b3RlOgo+IFNvbWUgb2YgdGhlIHByb2Nlc3NvciBlcnJhdHVtIHdpbGwgcmVxdWlyZSB0byBtb2Rp ZnkgY29kZSBzZXF1ZW5jZS4KPiBBcyB0aG9zZSBtb2RpZmljYXRpb25zIG1heSBpbXBhY3QgdGhl IHBlcmZvcm1hbmNlLCB0aGV5IHNob3VsZCBvbmx5Cj4gYmUgZW5hYmxlZCBvbiBhZmZlY3RlZCBj b3Jlcy4gRnVydGhlcm1vcmUsIFhlbiBtYXkgYWxzbyB3YW50IHRvIHRha2UKPiBhZHZhbnRhZ2Ug b2YgbmV3IGhhcmR3YXJlIGZlYXR1cmVzIGNvbWluZyB1cCB3aXRoIHY4LjEgYW5kIHY4LjIuCj4g Cj4gVGhpcyBwYXRjaCBhZGRzIGFuIGluZnJhc3RydWN0dXJlIHRvIHBhdGNoIFhlbiBkdXJpbmcg Ym9vdCB0aW1lCj4gZGVwZW5kaW5nIG9uIHRoZSAiZmVhdHVyZXMiIGF2YWlsYWJsZSBvbiB0aGUg cGxhdGZvcm0uCj4gCj4gVGhpcyBjb2RlIGlzIGJhc2VkIG9uIHRoZSBmaWxlIGFyY2gvYXJtNjQv a2VybmVsL2FsdGVybmF0aXZlLmMgaW4KPiBMaW51eCA0LjYtcmMzLiBBbnkgcmVmZXJlbmNlcyB0 byBhcm02NCBoYXZlIGJlZW4gZHJvcHBlZCB0byBtYWtlIHRoZQo+IGNvZGUgYXMgZ2VuZXJpYyBh cyBwb3NzaWJsZS4KPiAKPiBXaGVuIFhlbiBpcyBjcmVhdGluZyB0aGUgcGFnZSB0YWJsZXMsIGFs bCB0aGUgZXhlY3V0YWJsZSBzZWN0aW9ucwo+ICgudGV4dCBhbmQgLmluaXQudGV4dCkgd2lsbCBi ZSBtYXJrZWQgcmVhZC1vbmx5IGFuZCB0aGVuIGVuZm9yY2VkIGJ5Cj4gc2V0dGluZyBTQ1RMUi5X TlguCj4gCj4gV2hpbHN0IGl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRvIG1hcmsgdGhvc2UgZW50cmll cyByZWFkLW9ubHkgYWZ0ZXIKPiBYZW4gaGFzIGJlZW4gcGF0Y2hlZCwgd2Ugd291bGQgbmVlZCBl eHRyYSBjYXJlIHRvIGF2b2lkIHBvc3NpYmxlCj4gVExCcyBjb25mbGljdHMgKHNlZSBENC0xNzMy IGluIEFSTSBEREkgMDQ4N0EuaSkgYXMgYWxsCj4gcGh5c2ljYWwgQ1BVcyB3aWxsIGJlIHJ1bm5p bmcuCj4gCj4gQWxsIHRoZSBwaHlzaWNhbCBDUFVzIGhhdmUgdG8gYmUgYnJvdWdodCB1cCBiZWZv cmUgcGF0Y2hpbmcgWGVuIGJlY2F1c2UKPiBlYWNoIGNvcmVzIG1heSBoYXZlIGRpZmZlcmVudCBl cnJhdGEvZmVhdHVyZXMgd2hpY2ggcmVxdWlyZSBjb2RlCj4gcGF0Y2hpbmcuIFRoZSBvbmx5IHdh eSB0byBmaW5kIHRoZW0gaXMgdG8gcHJvYmUgc3lzdGVtIHJlZ2lzdGVycyBvbgo+IGVhY2ggQ1BV Lgo+IAo+IFRvIGF2b2lkIGV4dHJhIGNvbXBsZXhpdHksIGl0IGlzIHBvc3NpYmxlIHRvIGNyZWF0 ZSBhIHRlbXBvcmFyeQo+IHdyaXRlYWJsZSBtYXBwaW5nIHdpdGggdm1hcC4gVGhpcyBtYXBwaW5n IHdpbGwgYmUgdXNlZCB0byB3cml0ZSB0aGUKPiBuZXcgaW5zdHJ1Y3Rpb25zLgo+IAo+IExhc3Rs eSwgcnVudGltZSBwYXRjaGluZyBpcyBjdXJyZW50bHkgbm90IG5lY2Vzc2FyeSBmb3IgQVJNMzIu IFNvIHRoZQo+IGNvZGUgaXMgb25seSBlbmFibGVkIGZvciBBUk02NC4KPiAKPiBOb3RlIHRoYXQg dGhlIGhlYWRlciBhc20tYXJtL2FsdGVybmF0aXZlLmggaXMgYSB2ZXJiYXRpbSBjb3B5IGZvciB0 aGUKPiBMaW51eCBvbmUgKGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUuaCkuIEl0 IG1heSBjb250YWluCj4gaW5uYWN1cmF0ZSBjb21tZW50cywgYnV0IEkgZGlkIG5vdCB0b3VjaCB0 aGVtIGZvciBub3cuCj4gCj4gU2lnbmVkLW9mZi1ieTogSnVsaWVuIEdyYWxsIDxqdWxpZW4uZ3Jh bGxAYXJtLmNvbT4KPiAKPiAtLS0KPiAgICAgQ2hhbmdlcyBpbiB2NjoKPiAgICAgICAgIC0gVXBk YXRlIHNvbWUgbWVzc2FnZXMKPiAgICAgICAgIC0gQ29uc3RpZnkgc29tZSBzdHJ1Y3R1cmUKPiAg ICAgICAgIC0gQWRkIGFuIEFTU0VSVCBpbiBhcHBseV9hbHRlcm5hdGl2ZXMKCmFwcGx5X2FsdGVy bmF0aXZlc19hbGwgYWN0dWFsbHkuCj4gICAgICAgICAtIE1lbnRpb24gaW4gdGhlIGNvbW1pdCBt ZXNzYWdlIHRoYXQgYWx0ZXJuYXRpdmUgaXMgYSB2ZXJiYXRpbQo+ICAgICAgICAgY29weSBvZiB0 aGUgTGludXggaGVhZGVycy4KClRoYW5rIHlvdS4KCldpdGggdGhhdCBSZXZpZXdlZC1ieTogS29u cmFkIFJ6ZXN6dXRlayBXaWxrIDxrb25yYWQud2lsa0BvcmFjbGUuY29tPgo+IAo+ICAgICBDaGFu Z2VzIGluIHY1Ogo+ICAgICAgICAgLSBSZWJhc2Ugb24gdGhlIGxhdGVzdCBzdGFnaW5nCj4gCj4g ICAgIENoYW5nZXMgaW4gdjQ6Cj4gICAgICAgICAtIEZpeCBidWlsZCB3aGVuIEFMVEVSTkFUSVZF IGlzIG5vdCBlbmFibGVkCj4gICAgICAgICAtIEZpeCB0eXBvCj4gICAgICAgICAtIE1vdmUgLmFs dGluc3RydWN0aW9ucyBpbiBpbml0LmRhdGEKPiAKPiAgICAgQ2hhbmdlcyBpbiB2MzoKPiAgICAg ICAgIC0gLmFsdGluc3RyX3JlcGxhY2VtZW50IHNob3VsZCBsaXZlIGluIGluaXQudGV4dAo+ICAg ICAgICAgLSBBZGQgYSBjb21tZW50IHRvIGV4cGxhaW4gd2hlbiBhcHBseV9hbHRlcm5hdGl2ZXNf YWxsIHNob3VsZCBiZQo+ICAgICAgICAgY2FsbGVkLgo+IAo+ICAgICBDaGFuZ2VzIGluIHYyOgo+ ICAgICAgICAgLSBVc2UgaGFyZCB0YWJzIGluIEtjb25maWcKPiAgICAgICAgIC0gVXBkYXRlIHRo ZSBjb3B5cmlnaHQgeWVhcgo+ICAgICAgICAgLSBVcGRhdGUgdGhlIGNvbW1pdCBtZXNzYWdlIHRv IGV4cGxhaW4gdGhlIGV4dHJhIG1hcHBpbmcKPiAtLS0KPiAgeGVuL2FyY2gvYXJtL0tjb25maWcg ICAgICAgICAgICAgIHwgICA1ICsKPiAgeGVuL2FyY2gvYXJtL01ha2VmaWxlICAgICAgICAgICAg IHwgICAxICsKPiAgeGVuL2FyY2gvYXJtL2FsdGVybmF0aXZlLmMgICAgICAgIHwgMjI0ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIHhlbi9hcmNoL2FybS9zZXR1cC5j ICAgICAgICAgICAgICB8ICAgNyArKwo+ICB4ZW4vYXJjaC9hcm0veGVuLmxkcy5TICAgICAgICAg ICAgfCAgIDkgKysKPiAgeGVuL2luY2x1ZGUvYXNtLWFybS9hbHRlcm5hdGl2ZS5oIHwgMTY1ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgeGVuL2luY2x1ZGUvYXNtLWFybS9hcm02NC9p bnNuLmggIHwgIDE2ICsrKwo+ICA3IGZpbGVzIGNoYW5nZWQsIDQyNyBpbnNlcnRpb25zKCspCj4g IGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vYXJjaC9hcm0vYWx0ZXJuYXRpdmUuYwo+ICBjcmVhdGUg bW9kZSAxMDA2NDQgeGVuL2luY2x1ZGUvYXNtLWFybS9hbHRlcm5hdGl2ZS5oCj4gCj4gZGlmZiAt LWdpdCBhL3hlbi9hcmNoL2FybS9LY29uZmlnIGIveGVuL2FyY2gvYXJtL0tjb25maWcKPiBpbmRl eCA2MjMxY2Q1Li4wMTQxYmQ5IDEwMDY0NAo+IC0tLSBhL3hlbi9hcmNoL2FybS9LY29uZmlnCj4g KysrIGIveGVuL2FyY2gvYXJtL0tjb25maWcKPiBAQCAtMTQsNiArMTQsNyBAQCBjb25maWcgQVJN XzY0Cj4gIAlkZWZfYm9vbCB5Cj4gIAlkZXBlbmRzIG9uIDY0QklUCj4gIAlzZWxlY3QgSEFTX0dJ Q1YzCj4gKwlzZWxlY3QgQUxURVJOQVRJVkUKPiAgCj4gIGNvbmZpZyBBUk0KPiAgCWRlZl9ib29s IHkKPiBAQCAtNDYsNiArNDcsMTAgQEAgY29uZmlnIEFDUEkKPiAgY29uZmlnIEhBU19HSUNWMwo+ ICAJYm9vbAo+ICAKPiArIyBTZWxlY3QgQUxURVJOQVRJVkUgaWYgdGhlIGFyY2hpdGVjdHVyZSBz dXBwb3J0cyBydW50aW1lIHBhdGNoaW5nCj4gK2NvbmZpZyBBTFRFUk5BVElWRQo+ICsJYm9vbAo+ ICsKPiAgZW5kbWVudQo+ICAKPiAgc291cmNlICJjb21tb24vS2NvbmZpZyIKPiBkaWZmIC0tZ2l0 IGEveGVuL2FyY2gvYXJtL01ha2VmaWxlIGIveGVuL2FyY2gvYXJtL01ha2VmaWxlCj4gaW5kZXgg YjI2NGVkNC4uNzRiZDdiOCAxMDA2NDQKPiAtLS0gYS94ZW4vYXJjaC9hcm0vTWFrZWZpbGUKPiAr KysgYi94ZW4vYXJjaC9hcm0vTWFrZWZpbGUKPiBAQCAtNCw2ICs0LDcgQEAgc3ViZGlyLXkgKz0g cGxhdGZvcm1zCj4gIHN1YmRpci0kKENPTkZJR19BUk1fNjQpICs9IGVmaQo+ICBzdWJkaXItJChD T05GSUdfQUNQSSkgKz0gYWNwaQo+ICAKPiArb2JqLSQoQ09ORklHX0FMVEVSTkFUSVZFKSArPSBh bHRlcm5hdGl2ZS5vCj4gIG9iai15ICs9IGJvb3RmZHQubwo+ICBvYmoteSArPSBjcHUubwo+ICBv YmoteSArPSBjcHVmZWF0dXJlLm8KPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL2FsdGVybmF0 aXZlLmMgYi94ZW4vYXJjaC9hcm0vYWx0ZXJuYXRpdmUuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4gaW5kZXggMDAwMDAwMC4uOGVlNWExMQo+IC0tLSAvZGV2L251bGwKPiArKysgYi94ZW4vYXJj aC9hcm0vYWx0ZXJuYXRpdmUuYwo+IEBAIC0wLDAgKzEsMjI0IEBACj4gKy8qCj4gKyAqIGFsdGVy bmF0aXZlIHJ1bnRpbWUgcGF0Y2hpbmcKPiArICogaW5zcGlyZWQgYnkgdGhlIHg4NiB2ZXJzaW9u Cj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFSTSBMdGQuCj4gKyAqCj4gKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCj4gKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZQo+ICsgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5v dCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KPiArICovCj4gKwo+ICsjaW5j bHVkZSA8eGVuL2NvbmZpZy5oPgo+ICsjaW5jbHVkZSA8eGVuL2luaXQuaD4KPiArI2luY2x1ZGUg PHhlbi90eXBlcy5oPgo+ICsjaW5jbHVkZSA8eGVuL2tlcm5lbC5oPgo+ICsjaW5jbHVkZSA8eGVu L21tLmg+Cj4gKyNpbmNsdWRlIDx4ZW4vdm1hcC5oPgo+ICsjaW5jbHVkZSA8eGVuL3NtcC5oPgo+ ICsjaW5jbHVkZSA8eGVuL3N0b3BfbWFjaGluZS5oPgo+ICsjaW5jbHVkZSA8YXNtL2FsdGVybmF0 aXZlLmg+Cj4gKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+Cj4gKyNpbmNsdWRlIDxhc20vYnl0ZW9y ZGVyLmg+Cj4gKyNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgo+ICsjaW5jbHVkZSA8YXNtL2lu c24uaD4KPiArI2luY2x1ZGUgPGFzbS9wYWdlLmg+Cj4gKwo+ICsjZGVmaW5lIF9fQUxUX1BUUihh LGYpICAgICAgKHUzMiAqKSgodm9pZCAqKSYoYSktPmYgKyAoYSktPmYpCj4gKyNkZWZpbmUgQUxU X09SSUdfUFRSKGEpICAgICBfX0FMVF9QVFIoYSwgb3JpZ19vZmZzZXQpCj4gKyNkZWZpbmUgQUxU X1JFUExfUFRSKGEpICAgICBfX0FMVF9QVFIoYSwgYWx0X29mZnNldCkKPiArCj4gK2V4dGVybiBj b25zdCBzdHJ1Y3QgYWx0X2luc3RyIF9fYWx0X2luc3RydWN0aW9uc1tdLCBfX2FsdF9pbnN0cnVj dGlvbnNfZW5kW107Cj4gKwo+ICtzdHJ1Y3QgYWx0X3JlZ2lvbiB7Cj4gKyAgICBjb25zdCBzdHJ1 Y3QgYWx0X2luc3RyICpiZWdpbjsKPiArICAgIGNvbnN0IHN0cnVjdCBhbHRfaW5zdHIgKmVuZDsK PiArfTsKPiArCj4gKy8qCj4gKyAqIENoZWNrIGlmIHRoZSB0YXJnZXQgUEMgaXMgd2l0aGluIGFu IGFsdGVybmF0aXZlIGJsb2NrLgo+ICsgKi8KPiArc3RhdGljIGJvb2xfdCBicmFuY2hfaW5zbl9y ZXF1aXJlc191cGRhdGUoY29uc3Qgc3RydWN0IGFsdF9pbnN0ciAqYWx0LAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHBjKQo+ICt7Cj4g KyAgICB1bnNpZ25lZCBsb25nIHJlcGxwdHI7Cj4gKwo+ICsgICAgaWYgKCBpc19hY3RpdmVfa2Vy bmVsX3RleHQocGMpICkKPiArICAgICAgICByZXR1cm4gMTsKPiArCj4gKyAgICByZXBscHRyID0g KHVuc2lnbmVkIGxvbmcpQUxUX1JFUExfUFRSKGFsdCk7Cj4gKyAgICBpZiAoIHBjID49IHJlcGxw dHIgJiYgcGMgPD0gKHJlcGxwdHIgKyBhbHQtPmFsdF9sZW4pICkKPiArICAgICAgICByZXR1cm4g MDsKPiArCj4gKyAgICAvKgo+ICsgICAgICogQnJhbmNoaW5nIGludG8gKmFub3RoZXIqIGFsdGVy bmF0ZSBzZXF1ZW5jZSBpcyBkb29tZWQsIGFuZAo+ICsgICAgICogd2UncmUgbm90IGV2ZW4gdHJ5 aW5nIHRvIGZpeCBpdCB1cC4KPiArICAgICAqLwo+ICsgICAgQlVHKCk7Cj4gK30KPiArCj4gK3N0 YXRpYyB1MzIgZ2V0X2FsdF9pbnNuKGNvbnN0IHN0cnVjdCBhbHRfaW5zdHIgKmFsdCwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdTMyICppbnNucHRyLCBjb25zdCB1MzIgKmFsdGlu c25wdHIpCj4gK3sKPiArICAgIHUzMiBpbnNuOwo+ICsKPiArICAgIGluc24gPSBsZTMyX3RvX2Nw dSgqYWx0aW5zbnB0cik7Cj4gKwo+ICsgICAgaWYgKCBpbnNuX2lzX2JyYW5jaF9pbW0oaW5zbikg KQo+ICsgICAgewo+ICsgICAgICAgIHMzMiBvZmZzZXQgPSBpbnNuX2dldF9icmFuY2hfb2Zmc2V0 KGluc24pOwo+ICsgICAgICAgIHVuc2lnbmVkIGxvbmcgdGFyZ2V0Owo+ICsKPiArICAgICAgICB0 YXJnZXQgPSAodW5zaWduZWQgbG9uZylhbHRpbnNucHRyICsgb2Zmc2V0Owo+ICsKPiArICAgICAg ICAvKgo+ICsgICAgICAgICAqIElmIHdlJ3JlIGJyYW5jaGluZyBpbnNpZGUgdGhlIGFsdGVybmF0 ZSBzZXF1ZW5jZSwKPiArICAgICAgICAgKiBkbyBub3QgcmV3cml0ZSB0aGUgaW5zdHJ1Y3Rpb24s IGFzIGl0IGlzIGFscmVhZHkKPiArICAgICAgICAgKiBjb3JyZWN0LiBPdGhlcndpc2UsIGdlbmVy YXRlIHRoZSBuZXcgaW5zdHJ1Y3Rpb24uCj4gKyAgICAgICAgICovCj4gKyAgICAgICAgaWYgKCBi cmFuY2hfaW5zbl9yZXF1aXJlc191cGRhdGUoYWx0LCB0YXJnZXQpICkKPiArICAgICAgICB7Cj4g KyAgICAgICAgICAgIG9mZnNldCA9IHRhcmdldCAtICh1bnNpZ25lZCBsb25nKWluc25wdHI7Cj4g KyAgICAgICAgICAgIGluc24gPSBpbnNuX3NldF9icmFuY2hfb2Zmc2V0KGluc24sIG9mZnNldCk7 Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiBpbnNuOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IF9fYXBwbHlfYWx0ZXJuYXRpdmVzKGNvbnN0IHN0cnVjdCBhbHRfcmVnaW9u ICpyZWdpb24pCj4gK3sKPiArICAgIGNvbnN0IHN0cnVjdCBhbHRfaW5zdHIgKmFsdDsKPiArICAg IGNvbnN0IHUzMiAqb3JpZ3B0ciwgKnJlcGxwdHI7Cj4gKyAgICB1MzIgKndyaXRlcHRyLCAqd3Jp dGVtYXA7Cj4gKyAgICBtZm5fdCB0ZXh0X21mbiA9IF9tZm4odmlydF90b19tZm4oX3N0ZXh0KSk7 Cj4gKyAgICB1bnNpZ25lZCBpbnQgdGV4dF9vcmRlciA9IGdldF9vcmRlcl9mcm9tX2J5dGVzKF9l bmQgLSBfc3RhcnQpOwo+ICsKPiArICAgIHByaW50ayhYRU5MT0dfSU5GTyAiYWx0ZXJuYXRpdmVz OiBQYXRjaGluZyBrZXJuZWwgY29kZVxuIik7Cj4gKwo+ICsgICAgLyoKPiArICAgICAqIFRoZSB0 ZXh0IHNlY3Rpb24gaXMgcmVhZC1vbmx5LiBTbyByZS1tYXAgWGVuIHRvIGJlIGFibGUgdG8gcGF0 Y2gKPiArICAgICAqIHRoZSBjb2RlLgo+ICsgICAgICovCj4gKyAgICB3cml0ZW1hcCA9IF9fdm1h cCgmdGV4dF9tZm4sIDEgPDwgdGV4dF9vcmRlciwgMSwgMSwgUEFHRV9IWVBFUlZJU09SLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgVk1BUF9ERUZBVUxUKTsKPiArICAgIGlmICggIXdyaXRlbWFw ICkKPiArICAgIHsKPiArICAgICAgICBwcmludGsoWEVOTE9HX0VSUiAiYWx0ZXJuYXRpdmVzOiBV bmFibGUgdG8gbWFwIHRoZSB0ZXh0IHNlY3Rpb24gKHNpemUgJXUpXG4iLAo+ICsgICAgICAgICAg ICAgICAxIDw8IHRleHRfb3JkZXIpOwo+ICsgICAgICAgIHJldHVybiAtRU5PTUVNOwo+ICsgICAg fQo+ICsKPiArICAgIGZvciAoIGFsdCA9IHJlZ2lvbi0+YmVnaW47IGFsdCA8IHJlZ2lvbi0+ZW5k OyBhbHQrKyApCj4gKyAgICB7Cj4gKyAgICAgICAgdTMyIGluc247Cj4gKyAgICAgICAgaW50IGks IG5yX2luc3Q7Cj4gKwo+ICsgICAgICAgIGlmICggIWNwdXNfaGF2ZV9jYXAoYWx0LT5jcHVmZWF0 dXJlKSApCj4gKyAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsKPiArICAgICAgICBCVUdfT04oYWx0 LT5hbHRfbGVuICE9IGFsdC0+b3JpZ19sZW4pOwo+ICsKPiArICAgICAgICBvcmlncHRyID0gQUxU X09SSUdfUFRSKGFsdCk7Cj4gKyAgICAgICAgd3JpdGVwdHIgPSBvcmlncHRyIC0gKHUzMiAqKV9z dGFydCArIHdyaXRlbWFwOwo+ICsgICAgICAgIHJlcGxwdHIgPSBBTFRfUkVQTF9QVFIoYWx0KTsK PiArCj4gKyAgICAgICAgbnJfaW5zdCA9IGFsdC0+YWx0X2xlbiAvIHNpemVvZihpbnNuKTsKPiAr Cj4gKyAgICAgICAgZm9yICggaSA9IDA7IGkgPCBucl9pbnN0OyBpKysgKQo+ICsgICAgICAgIHsK PiArICAgICAgICAgICAgaW5zbiA9IGdldF9hbHRfaW5zbihhbHQsIG9yaWdwdHIgKyBpLCByZXBs cHRyICsgaSk7Cj4gKyAgICAgICAgICAgICood3JpdGVwdHIgKyBpKSA9IGNwdV90b19sZTMyKGlu c24pOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgLyogRW5zdXJlIHRoZSBuZXcgaW5zdHJ1 Y3Rpb25zIHJlYWNoZWQgdGhlIG1lbW9yeSBhbmQgbnVrZSAqLwo+ICsgICAgICAgIGNsZWFuX2Fu ZF9pbnZhbGlkYXRlX2RjYWNoZV92YV9yYW5nZSh3cml0ZXB0ciwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVvZiAoKndyaXRlcHRyKSAqIG5yX2lu c3QpKTsKPiArICAgIH0KPiArCj4gKyAgICAvKiBOdWtlIHRoZSBpbnN0cnVjdGlvbiBjYWNoZSAq Lwo+ICsgICAgaW52YWxpZGF0ZV9pY2FjaGUoKTsKPiArCj4gKyAgICB2dW5tYXAod3JpdGVtYXAp Owo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBXZSBtaWdodCBiZSBw YXRjaGluZyB0aGUgc3RvcF9tYWNoaW5lIHN0YXRlIG1hY2hpbmUsIHNvIGltcGxlbWVudCBhCj4g KyAqIHJlYWxseSBzaW1wbGUgcG9sbGluZyBwcm90b2NvbCBoZXJlLgo+ICsgKi8KPiArc3RhdGlj IGludCBfX2FwcGx5X2FsdGVybmF0aXZlc19tdWx0aV9zdG9wKHZvaWQgKnVudXNlZCkKPiArewo+ ICsgICAgc3RhdGljIGludCBwYXRjaGVkID0gMDsKPiArICAgIGNvbnN0IHN0cnVjdCBhbHRfcmVn aW9uIHJlZ2lvbiA9IHsKPiArICAgICAgICAuYmVnaW4gPSBfX2FsdF9pbnN0cnVjdGlvbnMsCj4g KyAgICAgICAgLmVuZCA9IF9fYWx0X2luc3RydWN0aW9uc19lbmQsCj4gKyAgICB9Owo+ICsKPiAr ICAgIC8qIFdlIGFsd2F5cyBoYXZlIGEgQ1BVIDAgYXQgdGhpcyBwb2ludCAoX19pbml0KSAqLwo+ ICsgICAgaWYgKCBzbXBfcHJvY2Vzc29yX2lkKCkgKQo+ICsgICAgewo+ICsgICAgICAgIHdoaWxl ICggIXJlYWRfYXRvbWljKCZwYXRjaGVkKSApCj4gKyAgICAgICAgICAgIGNwdV9yZWxheCgpOwo+ ICsgICAgICAgIGlzYigpOwo+ICsgICAgfQo+ICsgICAgZWxzZQo+ICsgICAgewo+ICsgICAgICAg IGludCByZXQ7Cj4gKwo+ICsgICAgICAgIEJVR19PTihwYXRjaGVkKTsKPiArICAgICAgICByZXQg PSBfX2FwcGx5X2FsdGVybmF0aXZlcygmcmVnaW9uKTsKPiArICAgICAgICAvKiBUaGUgcGF0Y2hp bmcgaXMgbm90IGV4cGVjdGVkIHRvIGZhaWwgZHVyaW5nIGJvb3QuICovCj4gKyAgICAgICAgQlVH X09OKHJldCAhPSAwKTsKPiArCj4gKyAgICAgICAgLyogQmFycmllcnMgcHJvdmlkZWQgYnkgdGhl IGNhY2hlIGZsdXNoaW5nICovCj4gKyAgICAgICAgd3JpdGVfYXRvbWljKCZwYXRjaGVkLCAxKTsK PiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArLyoKPiArICogVGhpcyBm dW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGJvb3QgYW5kIGJlZm9yZSBDUFUw IGp1bXAKPiArICogaW50byB0aGUgaWRsZV9sb29wLgo+ICsgKi8KPiArdm9pZCBfX2luaXQgYXBw bHlfYWx0ZXJuYXRpdmVzX2FsbCh2b2lkKQo+ICt7Cj4gKyAgICBpbnQgcmV0Owo+ICsKPiArICAg IEFTU0VSVChzeXN0ZW1fc3RhdGUgIT0gU1lTX1NUQVRFX2FjdGl2ZSk7Cj4gKwo+ICsJLyogYmV0 dGVyIG5vdCB0cnkgY29kZSBwYXRjaGluZyBvbiBhIGxpdmUgU01QIHN5c3RlbSAqLwo+ICsgICAg cmV0ID0gc3RvcF9tYWNoaW5lX3J1bihfX2FwcGx5X2FsdGVybmF0aXZlc19tdWx0aV9zdG9wLCBO VUxMLCBOUl9DUFVTKTsKPiArCj4gKyAgICAvKiBzdG9wX21hY2hpbmVfcnVuIHNob3VsZCBuZXZl ciBmYWlsIGF0IHRoaXMgc3RhZ2Ugb2YgdGhlIGJvb3QgKi8KPiArICAgIEJVR19PTihyZXQpOwo+ ICt9Cj4gKwo+ICtpbnQgYXBwbHlfYWx0ZXJuYXRpdmVzKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVu Z3RoKQo+ICt7Cj4gKyAgICBjb25zdCBzdHJ1Y3QgYWx0X3JlZ2lvbiByZWdpb24gPSB7Cj4gKyAg ICAgICAgLmJlZ2luID0gc3RhcnQsCj4gKyAgICAgICAgLmVuZCA9IHN0YXJ0ICsgbGVuZ3RoLAo+ ICsgICAgfTsKPiArCj4gKyAgICByZXR1cm4gX19hcHBseV9hbHRlcm5hdGl2ZXMoJnJlZ2lvbik7 Cj4gK30KPiArCj4gKy8qCj4gKyAqIExvY2FsIHZhcmlhYmxlczoKPiArICogbW9kZTogQwo+ICsg KiBjLWZpbGUtc3R5bGU6ICJCU0QiCj4gKyAqIGMtYmFzaWMtb2Zmc2V0OiA0Cj4gKyAqIGluZGVu dC10YWJzLW1vZGU6IG5pbAo+ICsgKiBFbmQ6Cj4gKyAqLwo+IGRpZmYgLS1naXQgYS94ZW4vYXJj aC9hcm0vc2V0dXAuYyBiL3hlbi9hcmNoL2FybS9zZXR1cC5jCj4gaW5kZXggNDZjZjZkZC4uOTdi MzIxNCAxMDA2NDQKPiAtLS0gYS94ZW4vYXJjaC9hcm0vc2V0dXAuYwo+ICsrKyBiL3hlbi9hcmNo L2FybS9zZXR1cC5jCj4gQEAgLTM4LDYgKzM4LDcgQEAKPiAgI2luY2x1ZGUgPHhlbi92bWFwLmg+ Cj4gICNpbmNsdWRlIDx4ZW4vbGliZmR0L2xpYmZkdC5oPgo+ICAjaW5jbHVkZSA8eGVuL2FjcGku aD4KPiArI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS5oPgo+ICAjaW5jbHVkZSA8YXNtL3BhZ2Uu aD4KPiAgI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+Cj4gICNpbmNsdWRlIDxhc20vc2V0dXAuaD4K PiBAQCAtODM1LDYgKzgzNiwxMiBAQCB2b2lkIF9faW5pdCBzdGFydF94ZW4odW5zaWduZWQgbG9u ZyBib290X3BoeXNfb2Zmc2V0LAo+ICAKPiAgICAgIGRvX2luaXRjYWxscygpOwo+ICAKPiArICAg IC8qCj4gKyAgICAgKiBJdCBuZWVkcyB0byBiZSBjYWxsZWQgYWZ0ZXIgZG9faW5pdGNhbGxzIHRv IGJlIGFibGUgdG8gdXNlCj4gKyAgICAgKiBzdG9wX21hY2hpbmUgKHRhc2tsZXRzIGluaXRpYWxp emVkIHZpYSBhbiBpbml0Y2FsbCkuCj4gKyAgICAgKi8KPiArICAgIGFwcGx5X2FsdGVybmF0aXZl c19hbGwoKTsKPiArCj4gICAgICAvKiBDcmVhdGUgaW5pdGlhbCBkb21haW4gMC4gKi8KPiAgICAg IC8qIFRoZSB2R0lDIGZvciBET00wIGlzIGV4YWN0bHkgZW11bGF0aW5nIHRoZSBoYXJkd2FyZSBH SUMgKi8KPiAgICAgIGNvbmZpZy5naWNfdmVyc2lvbiA9IFhFTl9ET01DVExfQ09ORklHX0dJQ19O QVRJVkU7Cj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS94ZW4ubGRzLlMgYi94ZW4vYXJjaC9h cm0veGVuLmxkcy5TCj4gaW5kZXggYjE4YzljMi4uYjI0ZTkzYiAxMDA2NDQKPiAtLS0gYS94ZW4v YXJjaC9hcm0veGVuLmxkcy5TCj4gKysrIGIveGVuL2FyY2gvYXJtL3hlbi5sZHMuUwo+IEBAIC0x NTEsNiArMTUxLDE1IEBAIFNFQ1RJT05TCj4gICAgICAgICAqKC5pbml0Y2FsbDEuaW5pdCkKPiAg ICAgICAgIF9faW5pdGNhbGxfZW5kID0gLjsKPiAgCj4gKyNpZmRlZiBDT05GSUdfQUxURVJOQVRJ VkUKPiArICAgICAgIC4gPSBBTElHTig0KTsKPiArICAgICAgIF9fYWx0X2luc3RydWN0aW9ucyA9 IC47Cj4gKyAgICAgICAqKC5hbHRpbnN0cnVjdGlvbnMpCj4gKyAgICAgICBfX2FsdF9pbnN0cnVj dGlvbnNfZW5kID0gLjsKPiArICAgICAgIC4gPSBBTElHTig0KTsKPiArICAgICAgICooLmFsdGlu c3RyX3JlcGxhY2VtZW50KQo+ICsjZW5kaWYKPiArCj4gICAgICAgICAqKC5pbml0LmRhdGEpCj4g ICAgICAgICAqKC5pbml0LmRhdGEucmVsKQo+ICAgICAgICAgKiguaW5pdC5kYXRhLnJlbC4qKQo+ IGRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20tYXJtL2FsdGVybmF0aXZlLmggYi94ZW4vaW5j bHVkZS9hc20tYXJtL2FsdGVybmF0aXZlLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4 IDAwMDAwMDAuLjQyODdiYWMKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIveGVuL2luY2x1ZGUvYXNt LWFybS9hbHRlcm5hdGl2ZS5oCj4gQEAgLTAsMCArMSwxNjUgQEAKPiArI2lmbmRlZiBfX0FTTV9B TFRFUk5BVElWRV9ICj4gKyNkZWZpbmUgX19BU01fQUxURVJOQVRJVkVfSAo+ICsKPiArI2luY2x1 ZGUgPGFzbS9jcHVmZWF0dXJlLmg+Cj4gKyNpbmNsdWRlIDx4ZW4vY29uZmlnLmg+Cj4gKyNpbmNs dWRlIDx4ZW4va2NvbmZpZy5oPgo+ICsKPiArI2lmZGVmIENPTkZJR19BTFRFUk5BVElWRQo+ICsK PiArI2lmbmRlZiBfX0FTU0VNQkxZX18KPiArCj4gKyNpbmNsdWRlIDx4ZW4vaW5pdC5oPgo+ICsj aW5jbHVkZSA8eGVuL3R5cGVzLmg+Cj4gKyNpbmNsdWRlIDx4ZW4vc3RyaW5naWZ5Lmg+Cj4gKwo+ ICtzdHJ1Y3QgYWx0X2luc3RyIHsKPiArCXMzMiBvcmlnX29mZnNldDsJLyogb2Zmc2V0IHRvIG9y aWdpbmFsIGluc3RydWN0aW9uICovCj4gKwlzMzIgYWx0X29mZnNldDsJCS8qIG9mZnNldCB0byBy ZXBsYWNlbWVudCBpbnN0cnVjdGlvbiAqLwo+ICsJdTE2IGNwdWZlYXR1cmU7CQkvKiBjcHVmZWF0 dXJlIGJpdCBzZXQgZm9yIHJlcGxhY2VtZW50ICovCj4gKwl1OCAgb3JpZ19sZW47CQkvKiBzaXpl IG9mIG9yaWdpbmFsIGluc3RydWN0aW9uKHMpICovCj4gKwl1OCAgYWx0X2xlbjsJCS8qIHNpemUg b2YgbmV3IGluc3RydWN0aW9uKHMpLCA8PSBvcmlnX2xlbiAqLwo+ICt9Owo+ICsKPiArdm9pZCBf X2luaXQgYXBwbHlfYWx0ZXJuYXRpdmVzX2FsbCh2b2lkKTsKPiAraW50IGFwcGx5X2FsdGVybmF0 aXZlcyh2b2lkICpzdGFydCwgc2l6ZV90IGxlbmd0aCk7Cj4gKwo+ICsjZGVmaW5lIEFMVElOU1RS X0VOVFJZKGZlYXR1cmUpCQkJCQkJICAgICAgXAo+ICsJIiAud29yZCA2NjFiIC0gLlxuIgkJCQkv KiBsYWJlbCAgICAgICAgICAgKi8gXAo+ICsJIiAud29yZCA2NjNmIC0gLlxuIgkJCQkvKiBuZXcg aW5zdHJ1Y3Rpb24gKi8gXAo+ICsJIiAuaHdvcmQgIiBfX3N0cmluZ2lmeShmZWF0dXJlKSAiXG4i CQkvKiBmZWF0dXJlIGJpdCAgICAgKi8gXAo+ICsJIiAuYnl0ZSA2NjJiLTY2MWJcbiIJCQkJLyog c291cmNlIGxlbiAgICAgICovIFwKPiArCSIgLmJ5dGUgNjY0Zi02NjNmXG4iCQkJCS8qIHJlcGxh Y2VtZW50IGxlbiAqLwo+ICsKPiArLyoKPiArICogYWx0ZXJuYXRpdmUgYXNzZW1ibHkgcHJpbWl0 aXZlOgo+ICsgKgo+ICsgKiBJZiBhbnkgb2YgdGhlc2UgLm9yZyBkaXJlY3RpdmUgZmFpbCwgaXQg bWVhbnMgdGhhdCBpbnNuMSBhbmQgaW5zbjIKPiArICogZG9uJ3QgaGF2ZSB0aGUgc2FtZSBsZW5n dGguIFRoaXMgdXNlZCB0byBiZSB3cml0dGVuIGFzCj4gKyAqCj4gKyAqIC5pZiAoKDY2NGItNjYz YikgIT0gKDY2MmItNjYxYikpCj4gKyAqIAkuZXJyb3IgIkFsdGVybmF0aXZlcyBpbnN0cnVjdGlv biBsZW5ndGggbWlzbWF0Y2giCj4gKyAqIC5lbmRpZgo+ICsgKgo+ICsgKiBidXQgbW9zdCBhc3Nl bWJsZXJzIGRpZSBpZiBpbnNuMSBvciBpbnNuMiBoYXZlIGEgLmluc3QuIFRoaXMgc2hvdWxkCj4g KyAqIGJlIGZpeGVkIGluIGEgYmludXRpbHMgcmVsZWFzZSBwb3N0ZXJpb3IgdG8gMi4yNS41MS4w LjIgKGFueXRoaW5nCj4gKyAqIGNvbnRhaW5pbmcgY29tbWl0IDRlNGQwOGNmNzM5OWI2MDYgb3Ig YzFiYWFkZGY4ODYxKS4KPiArICovCj4gKyNkZWZpbmUgX19BTFRFUk5BVElWRV9DRkcob2xkaW5z dHIsIG5ld2luc3RyLCBmZWF0dXJlLCBjZmdfZW5hYmxlZCkJXAo+ICsJIi5pZiAiX19zdHJpbmdp ZnkoY2ZnX2VuYWJsZWQpIiA9PSAxXG4iCQkJCVwKPiArCSI2NjE6XG5cdCIJCQkJCQkJXAo+ICsJ b2xkaW5zdHIgIlxuIgkJCQkJCQlcCj4gKwkiNjYyOlxuIgkJCQkJCQlcCj4gKwkiLnB1c2hzZWN0 aW9uIC5hbHRpbnN0cnVjdGlvbnMsXCJhXCJcbiIJCQkJXAo+ICsJQUxUSU5TVFJfRU5UUlkoZmVh dHVyZSkJCQkJCQlcCj4gKwkiLnBvcHNlY3Rpb25cbiIJCQkJCQkJXAo+ICsJIi5wdXNoc2VjdGlv biAuYWx0aW5zdHJfcmVwbGFjZW1lbnQsIFwiYVwiXG4iCQkJXAo+ICsJIjY2Mzpcblx0IgkJCQkJ CQlcCj4gKwluZXdpbnN0ciAiXG4iCQkJCQkJCVwKPiArCSI2NjQ6XG5cdCIJCQkJCQkJXAo+ICsJ Ii5wb3BzZWN0aW9uXG5cdCIJCQkJCQlcCj4gKwkiLm9yZwkuIC0gKDY2NGItNjYzYikgKyAoNjYy Yi02NjFiKVxuXHQiCQkJXAo+ICsJIi5vcmcJLiAtICg2NjJiLTY2MWIpICsgKDY2NGItNjYzYilc biIJCQlcCj4gKwkiLmVuZGlmXG4iCj4gKwo+ICsjZGVmaW5lIF9BTFRFUk5BVElWRV9DRkcob2xk aW5zdHIsIG5ld2luc3RyLCBmZWF0dXJlLCBjZmcsIC4uLikJXAo+ICsJX19BTFRFUk5BVElWRV9D Rkcob2xkaW5zdHIsIG5ld2luc3RyLCBmZWF0dXJlLCBJU19FTkFCTEVEKGNmZykpCj4gKwo+ICsj ZWxzZQo+ICsKPiArI2luY2x1ZGUgPGFzbS9hc21fZGVmbnMuaD4KPiArCj4gKy5tYWNybyBhbHRp bnN0cnVjdGlvbl9lbnRyeSBvcmlnX29mZnNldCBhbHRfb2Zmc2V0IGZlYXR1cmUgb3JpZ19sZW4g YWx0X2xlbgo+ICsJLndvcmQgXG9yaWdfb2Zmc2V0IC0gLgo+ICsJLndvcmQgXGFsdF9vZmZzZXQg LSAuCj4gKwkuaHdvcmQgXGZlYXR1cmUKPiArCS5ieXRlIFxvcmlnX2xlbgo+ICsJLmJ5dGUgXGFs dF9sZW4KPiArLmVuZG0KPiArCj4gKy5tYWNybyBhbHRlcm5hdGl2ZV9pbnNuIGluc24xLCBpbnNu MiwgY2FwLCBlbmFibGUgPSAxCj4gKwkuaWYgXGVuYWJsZQo+ICs2NjE6CVxpbnNuMQo+ICs2NjI6 CS5wdXNoc2VjdGlvbiAuYWx0aW5zdHJ1Y3Rpb25zLCAiYSIKPiArCWFsdGluc3RydWN0aW9uX2Vu dHJ5IDY2MWIsIDY2M2YsIFxjYXAsIDY2MmItNjYxYiwgNjY0Zi02NjNmCj4gKwkucG9wc2VjdGlv bgo+ICsJLnB1c2hzZWN0aW9uIC5hbHRpbnN0cl9yZXBsYWNlbWVudCwgImF4Igo+ICs2NjM6CVxp bnNuMgo+ICs2NjQ6CS5wb3BzZWN0aW9uCj4gKwkub3JnCS4gLSAoNjY0Yi02NjNiKSArICg2NjJi LTY2MWIpCj4gKwkub3JnCS4gLSAoNjYyYi02NjFiKSArICg2NjRiLTY2M2IpCj4gKwkuZW5kaWYK PiArLmVuZG0KPiArCj4gKy8qCj4gKyAqIEJlZ2luIGFuIGFsdGVybmF0aXZlIGNvZGUgc2VxdWVu Y2UuCj4gKyAqCj4gKyAqIFRoZSBjb2RlIHRoYXQgZm9sbG93cyB0aGlzIG1hY3JvIHdpbGwgYmUg YXNzZW1ibGVkIGFuZCBsaW5rZWQgYXMKPiArICogbm9ybWFsLiBUaGVyZSBhcmUgbm8gcmVzdHJp Y3Rpb25zIG9uIHRoaXMgY29kZS4KPiArICovCj4gKy5tYWNybyBhbHRlcm5hdGl2ZV9pZl9ub3Qg Y2FwLCBlbmFibGUgPSAxCj4gKwkuaWYgXGVuYWJsZQo+ICsJLnB1c2hzZWN0aW9uIC5hbHRpbnN0 cnVjdGlvbnMsICJhIgo+ICsJYWx0aW5zdHJ1Y3Rpb25fZW50cnkgNjYxZiwgNjYzZiwgXGNhcCwg NjYyZi02NjFmLCA2NjRmLTY2M2YKPiArCS5wb3BzZWN0aW9uCj4gKzY2MToKPiArCS5lbmRpZgo+ ICsuZW5kbQo+ICsKPiArLyoKPiArICogUHJvdmlkZSB0aGUgYWx0ZXJuYXRpdmUgY29kZSBzZXF1 ZW5jZS4KPiArICoKPiArICogVGhlIGNvZGUgdGhhdCBmb2xsb3dzIHRoaXMgbWFjcm8gaXMgYXNz ZW1ibGVkIGludG8gYSBzcGVjaWFsCj4gKyAqIHNlY3Rpb24gdG8gYmUgdXNlZCBmb3IgZHluYW1p YyBwYXRjaGluZy4gQ29kZSB0aGF0IGZvbGxvd3MgdGhpcwo+ICsgKiBtYWNybyBtdXN0Ogo+ICsg Kgo+ICsgKiAxLiBCZSBleGFjdGx5IHRoZSBzYW1lIGxlbmd0aCAoaW4gYnl0ZXMpIGFzIHRoZSBk ZWZhdWx0IGNvZGUKPiArICogICAgc2VxdWVuY2UuCj4gKyAqCj4gKyAqIDIuIE5vdCBjb250YWlu IGEgYnJhbmNoIHRhcmdldCB0aGF0IGlzIHVzZWQgb3V0c2lkZSBvZiB0aGUKPiArICogICAgYWx0 ZXJuYXRpdmUgc2VxdWVuY2UgaXQgaXMgZGVmaW5lZCBpbiAoYnJhbmNoZXMgaW50byBhbgo+ICsg KiAgICBhbHRlcm5hdGl2ZSBzZXF1ZW5jZSBhcmUgbm90IGZpeGVkIHVwKS4KPiArICovCj4gKy5t YWNybyBhbHRlcm5hdGl2ZV9lbHNlCj4gKzY2MjoJLnB1c2hzZWN0aW9uIC5hbHRpbnN0cl9yZXBs YWNlbWVudCwgImF4Igo+ICs2NjM6Cj4gKy5lbmRtCj4gKwo+ICsvKgo+ICsgKiBDb21wbGV0ZSBh biBhbHRlcm5hdGl2ZSBjb2RlIHNlcXVlbmNlLgo+ICsgKi8KPiArLm1hY3JvIGFsdGVybmF0aXZl X2VuZGlmCj4gKzY2NDoJLnBvcHNlY3Rpb24KPiArCS5vcmcJLiAtICg2NjRiLTY2M2IpICsgKDY2 MmItNjYxYikKPiArCS5vcmcJLiAtICg2NjJiLTY2MWIpICsgKDY2NGItNjYzYikKPiArLmVuZG0K PiArCj4gKyNkZWZpbmUgX0FMVEVSTkFUSVZFX0NGRyhpbnNuMSwgaW5zbjIsIGNhcCwgY2ZnLCAu Li4pCVwKPiArCWFsdGVybmF0aXZlX2luc24gaW5zbjEsIGluc24yLCBjYXAsIElTX0VOQUJMRUQo Y2ZnKQo+ICsKPiArI2VuZGlmICAvKiAgX19BU1NFTUJMWV9fICAqLwo+ICsKPiArLyoKPiArICog VXNhZ2U6IGFzbShBTFRFUk5BVElWRShvbGRpbnN0ciwgbmV3aW5zdHIsIGZlYXR1cmUpKTsKPiAr ICoKPiArICogVXNhZ2U6IGFzbShBTFRFUk5BVElWRShvbGRpbnN0ciwgbmV3aW5zdHIsIGZlYXR1 cmUsIENPTkZJR19GT08pKTsKPiArICogTi5CLiBJZiBDT05GSUdfRk9PIGlzIHNwZWNpZmllZCwg YnV0IG5vdCBzZWxlY3RlZCwgdGhlIHdob2xlIGJsb2NrCj4gKyAqICAgICAgd2lsbCBiZSBvbWl0 dGVkLCBpbmNsdWRpbmcgb2xkaW5zdHIuCj4gKyAqLwo+ICsjZGVmaW5lIEFMVEVSTkFUSVZFKG9s ZGluc3RyLCBuZXdpbnN0ciwgLi4uKSAgIFwKPiArCV9BTFRFUk5BVElWRV9DRkcob2xkaW5zdHIs IG5ld2luc3RyLCBfX1ZBX0FSR1NfXywgMSkKPiArCj4gKyNlbHNlIC8qICFDT05GSUdfQUxURVJO QVRJVkUgKi8KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBseV9hbHRlcm5hdGl2ZXNfYWxs KHZvaWQpCj4gK3sKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBpbnQgYXBwbHlfYWx0ZXJuYXRp dmVzKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuZ2h0KQo+ICt7Cj4gKyAgICByZXR1cm4gMDsKPiAr fQo+ICsKPiArI2VuZGlmCj4gKwo+ICsjZW5kaWYgLyogX19BU01fQUxURVJOQVRJVkVfSCAqLwo+ IGRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20tYXJtL2FybTY0L2luc24uaCBiL3hlbi9pbmNs dWRlL2FzbS1hcm0vYXJtNjQvaW5zbi5oCj4gaW5kZXggY2ZjZGJlOS4uNmNlMzdiZSAxMDA2NDQK PiAtLS0gYS94ZW4vaW5jbHVkZS9hc20tYXJtL2FybTY0L2luc24uaAo+ICsrKyBiL3hlbi9pbmNs dWRlL2FzbS1hcm0vYXJtNjQvaW5zbi5oCj4gQEAgLTYxLDYgKzYxLDIyIEBAIHUzMiBhYXJjaDY0 X2luc25fZW5jb2RlX2ltbWVkaWF0ZShlbnVtIGFhcmNoNjRfaW5zbl9pbW1fdHlwZSB0eXBlLAo+ ICBzMzIgYWFyY2g2NF9nZXRfYnJhbmNoX29mZnNldCh1MzIgaW5zbik7Cj4gIHUzMiBhYXJjaDY0 X3NldF9icmFuY2hfb2Zmc2V0KHUzMiBpbnNuLCBzMzIgb2Zmc2V0KTsKPiAgCj4gKy8qIFdyYXBw ZXIgZm9yIGNvbW1vbiBjb2RlICovCj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX2JyYW5j aF9pbW0odTMyIGluc24pCj4gK3sKPiArICAgIHJldHVybiBhYXJjaDY0X2luc25faXNfYnJhbmNo X2ltbShpbnNuKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBzMzIgaW5zbl9nZXRfYnJhbmNo X29mZnNldCh1MzIgaW5zbikKPiArewo+ICsgICAgcmV0dXJuIGFhcmNoNjRfZ2V0X2JyYW5jaF9v ZmZzZXQoaW5zbik7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdTMyIGluc25fc2V0X2JyYW5j aF9vZmZzZXQodTMyIGluc24sIHMzMiBvZmZzZXQpCj4gK3sKPiArICAgIHJldHVybiBhYXJjaDY0 X3NldF9icmFuY2hfb2Zmc2V0KGluc24sIG9mZnNldCk7Cj4gK30KPiArCj4gICNlbmRpZiAvKiAh X19BUkNIX0FSTV9BUk02NF9JTlNOICovCj4gIC8qCj4gICAqIExvY2FsIHZhcmlhYmxlczoKPiAt LSAKPiAxLjkuMQo+IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRw czovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==