From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: Re: [PATCH v2 5/7] xen/arm: Move co-processor emulation outside of traps.c Date: Tue, 12 Sep 2017 14:43:33 -0700 (PDT) Message-ID: References: <20170912103622.18562-1-julien.grall@arm.com> <20170912103622.18562-6-julien.grall@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170912103622.18562-6-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: bhupinder.thakur@linaro.org, sstabellini@kernel.org, xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org T24gVHVlLCAxMiBTZXAgMjAxNywgSnVsaWVuIEdyYWxsIHdyb3RlOgo+IFRoZSBjby1wcm9jZXNz b3IgZW11bGF0aW9uIGlzIHF1aXRlIGJpZyBhbmQgcHJldHR5IG11Y2ggc3RhbmRhbG9uZS4gTW92 ZQo+IGl0IGluIGEgc2VwYXJhdGUgZmlsZSB0byBzaHJpbmsgZG93biB0aGUgc2l6ZSBvZiB0cmFw cy5jLgo+IAo+IEF0IHRoZSBzYW1lIHRpbWUgcmVtb3ZlIHVudXNlZCBjcHJlZ3MuaC4KPiAKPiBO byBmdW5jdGlvbmFsIGNoYW5nZS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBKdWxpZW4gR3JhbGwgPGp1 bGllbi5ncmFsbEBhcm0uY29tPgoKUmV2aWV3ZWQtYnk6IFN0ZWZhbm8gU3RhYmVsbGluaSA8c3N0 YWJlbGxpbmlAa2VybmVsLm9yZz4KCj4gLS0tCj4gIHhlbi9hcmNoL2FybS9NYWtlZmlsZSAgICAg ICB8ICAgMSArCj4gIHhlbi9hcmNoL2FybS90cmFwcy5jICAgICAgICB8IDQyMSAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICB4ZW4vYXJjaC9hcm0vdmNwcmVnLmMg ICAgICAgfCA0NTEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK PiAgeGVuL2luY2x1ZGUvYXNtLWFybS90cmFwcy5oIHwgICA4ICsKPiAgNCBmaWxlcyBjaGFuZ2Vk LCA0NjAgaW5zZXJ0aW9ucygrKSwgNDIxIGRlbGV0aW9ucygtKQo+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgeGVuL2FyY2gvYXJtL3ZjcHJlZy5jCj4gCj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS9N YWtlZmlsZSBiL3hlbi9hcmNoL2FybS9NYWtlZmlsZQo+IGluZGV4IDI4MmQyYzI5NDkuLjE3YmZm OTgwMzMgMTAwNjQ0Cj4gLS0tIGEveGVuL2FyY2gvYXJtL01ha2VmaWxlCj4gKysrIGIveGVuL2Fy Y2gvYXJtL01ha2VmaWxlCj4gQEAgLTQ1LDYgKzQ1LDcgQEAgb2JqLXkgKz0gc21wYm9vdC5vCj4g IG9iai15ICs9IHN5c2N0bC5vCj4gIG9iai15ICs9IHRpbWUubwo+ICBvYmoteSArPSB0cmFwcy5v Cj4gK29iai15ICs9IHZjcHJlZy5vCj4gIG9iai15ICs9IHZnaWMubwo+ICBvYmoteSArPSB2Z2lj LXYyLm8KPiAgb2JqLSQoQ09ORklHX0hBU19HSUNWMykgKz0gdmdpYy12My5vCj4gZGlmZiAtLWdp dCBhL3hlbi9hcmNoL2FybS90cmFwcy5jIGIveGVuL2FyY2gvYXJtL3RyYXBzLmMKPiBpbmRleCBm MDBhYTQ4ODkyLi41ZTZiYzMxNzNmIDEwMDY0NAo+IC0tLSBhL3hlbi9hcmNoL2FybS90cmFwcy5j Cj4gKysrIGIveGVuL2FyY2gvYXJtL3RyYXBzLmMKPiBAQCAtMzgsNyArMzgsNiBAQAo+ICAjaW5j bHVkZSA8cHVibGljL3hlbi5oPgo+ICAKPiAgI2luY2x1ZGUgPGFzbS9hY3BpLmg+Cj4gLSNpbmNs dWRlIDxhc20vY3ByZWdzLmg+Cj4gICNpbmNsdWRlIDxhc20vY3B1ZXJyYXRhLmg+Cj4gICNpbmNs dWRlIDxhc20vY3B1ZmVhdHVyZS5oPgo+ICAjaW5jbHVkZSA8YXNtL2RlYnVnZ2VyLmg+Cj4gQEAg LTE4NzUsNDI2ICsxODc0LDYgQEAgdm9pZCBoYW5kbGVfcm9fcmF6KHN0cnVjdCBjcHVfdXNlcl9y ZWdzICpyZWdzLAo+ICAgICAgYWR2YW5jZV9wYyhyZWdzLCBoc3IpOwo+ICB9Cj4gIAo+IC1zdGF0 aWMgdm9pZCBkb19jcDE1XzMyKHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzLAo+IC0gICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHVuaW9uIGhzciBoc3IpCj4gLXsKPiAtICAgIGNvbnN0IHN0 cnVjdCBoc3JfY3AzMiBjcDMyID0gaHNyLmNwMzI7Cj4gLSAgICBpbnQgcmVnaWR4ID0gY3AzMi5y ZWc7Cj4gLSAgICBzdHJ1Y3QgdmNwdSAqdiA9IGN1cnJlbnQ7Cj4gLQo+IC0gICAgaWYgKCAhY2hl Y2tfY29uZGl0aW9uYWxfaW5zdHIocmVncywgaHNyKSApCj4gLSAgICB7Cj4gLSAgICAgICAgYWR2 YW5jZV9wYyhyZWdzLCBoc3IpOwo+IC0gICAgICAgIHJldHVybjsKPiAtICAgIH0KPiAtCj4gLSAg ICBzd2l0Y2ggKCBoc3IuYml0cyAmIEhTUl9DUDMyX1JFR1NfTUFTSyApCj4gLSAgICB7Cj4gLSAg ICAvKgo+IC0gICAgICogIUNOVEhDVExfRUwyLkVMMVBDRU4gLyAhQ05USENUTC5QTDFQQ0VOCj4g LSAgICAgKgo+IC0gICAgICogQVJNdjcgKERESSAwNDA2Qy5iKTogQjQuMS4yMgo+IC0gICAgICog QVJNdjggKERESSAwNDg3QS5kKTogRDEtMTUxMCBUYWJsZSBEMS02MAo+IC0gICAgICovCj4gLSAg ICBjYXNlIEhTUl9DUFJFRzMyKENOVFBfQ1RMKToKPiAtICAgIGNhc2UgSFNSX0NQUkVHMzIoQ05U UF9UVkFMKToKPiAtICAgICAgICBpZiAoICF2dGltZXJfZW11bGF0ZShyZWdzLCBoc3IpICkKPiAt ICAgICAgICAgICAgcmV0dXJuIGluamVjdF91bmRlZl9leGNlcHRpb24ocmVncywgaHNyKTsKPiAt ICAgICAgICBicmVhazsKPiAtCj4gLSAgICAvKgo+IC0gICAgICogSENSX0VMMi5UQUNSIC8gSENS LlRBQwo+IC0gICAgICoKPiAtICAgICAqIEFSTXY3IChEREkgMDQwNkMuYik6IEIxLjE0LjYKPiAt ICAgICAqIEFSTXY4IChEREkgMDQ4N0EuZCk6IEc2LjIuMQo+IC0gICAgICovCj4gLSAgICBjYXNl IEhTUl9DUFJFRzMyKEFDVExSKToKPiAtICAgICAgICBpZiAoIHBzcl9tb2RlX2lzX3VzZXIocmVn cykgKQo+IC0gICAgICAgICAgICByZXR1cm4gaW5qZWN0X3VuZGVmX2V4Y2VwdGlvbihyZWdzLCBo c3IpOwo+IC0gICAgICAgIGlmICggY3AzMi5yZWFkICkKPiAtICAgICAgICAgICAgc2V0X3VzZXJf cmVnKHJlZ3MsIHJlZ2lkeCwgdi0+YXJjaC5hY3Rscik7Cj4gLSAgICAgICAgYnJlYWs7Cj4gLQo+ IC0gICAgLyoKPiAtICAgICAqIE1EQ1JfRUwyLlRQTQo+IC0gICAgICoKPiAtICAgICAqIEFSTXY3 IChEREkgMDQwNkMuYik6IEIxLjE0LjE3Cj4gLSAgICAgKiBBUk12OCAoRERJIDA0ODdBLmQpOiBE MS0xNTExIFRhYmxlIEQxLTYxCj4gLSAgICAgKgo+IC0gICAgICogVW5oYW5kbGVkOgo+IC0gICAg ICogICAgUE1FVkNOVFI8bj4KPiAtICAgICAqICAgIFBNRVZUWVBFUjxuPgo+IC0gICAgICogICAg UE1DQ0ZJTFRSCj4gLSAgICAgKgo+IC0gICAgICogTURDUl9FTDIuVFBNQ1IKPiAtICAgICAqCj4g LSAgICAgKiBBUk12NyAoRERJIDA0MDZDLmIpOiBCMS4xNC4xNwo+IC0gICAgICogQVJNdjggKERE SSAwNDg3QS5kKTogRDEtMTUxMSBUYWJsZSBEMS02Mgo+IC0gICAgICoKPiAtICAgICAqIE5COiBC b3RoIE1EQ1JfRUwyLlRQTSBhbmQgTURDUl9FTDIuVFBNQ1IgY2F1c2UgdHJhcHBpbmcgb2YgUE1D Ui4KPiAtICAgICAqLwo+IC0gICAgLyogV2UgY291bGQgdHJhcCBJRF9ERlIwIGFuZCB0ZWxsIHRo ZSBndWVzdCB3ZSBkb24ndCBzdXBwb3J0Cj4gLSAgICAgKiBwZXJmb3JtYW5jZSBtb25pdG9yaW5n LCBidXQgTGludXggZG9lc24ndCBjaGVjayB0aGUgSURfREZSMC4KPiAtICAgICAqIFRoZXJlZm9y ZSBpdCB3aWxsIHJlYWQgUE1DUi4KPiAtICAgICAqCj4gLSAgICAgKiBXZSB0ZWxsIHRoZSBndWVz dCB3ZSBoYXZlIDAgY291bnRlcnMuIFVuZm9ydHVuYXRlbHkgd2UgbXVzdAo+IC0gICAgICogYWx3 YXlzIHN1cHBvcnQgUE1DQ05UUiAodGhlIGN5bGUgY291bnRlcik6IHdlIGp1c3QgUkFaL1dJIGZv ciBhbGwKPiAtICAgICAqIFBNIHJlZ2lzdGVyLCB3aGljaCBkb2Vzbid0IGNyYXNoIHRoZSBrZXJu ZWwgYXQgbGVhc3QKPiAtICAgICAqLwo+IC0gICAgY2FzZSBIU1JfQ1BSRUczMihQTVVTRVJFTlIp Ogo+IC0gICAgICAgIC8qIFJPIGF0IEVMMC4gUkFaL1dJIGF0IEVMMSAqLwo+IC0gICAgICAgIGlm ICggcHNyX21vZGVfaXNfdXNlcihyZWdzKSApCj4gLSAgICAgICAgICAgIHJldHVybiBoYW5kbGVf cm9fcmF6KHJlZ3MsIHJlZ2lkeCwgY3AzMi5yZWFkLCBoc3IsIDApOwo+IC0gICAgICAgIGVsc2UK PiAtICAgICAgICAgICAgcmV0dXJuIGhhbmRsZV9yYXpfd2kocmVncywgcmVnaWR4LCBjcDMyLnJl YWQsIGhzciwgMSk7Cj4gLSAgICBjYXNlIEhTUl9DUFJFRzMyKFBNSU5URU5TRVQpOgo+IC0gICAg Y2FzZSBIU1JfQ1BSRUczMihQTUlOVEVOQ0xSKToKPiAtICAgICAgICAvKiBFTDEgb25seSwgaG93 ZXZlciBNRENSX0VMMi5UUE09PTEgbWVhbnMgRUwwIG1heSB0cmFwIGhlcmUgYWxzby4gKi8KPiAt ICAgICAgICByZXR1cm4gaGFuZGxlX3Jhel93aShyZWdzLCByZWdpZHgsIGNwMzIucmVhZCwgaHNy LCAxKTsKPiAtICAgIGNhc2UgSFNSX0NQUkVHMzIoUE1DUik6Cj4gLSAgICBjYXNlIEhTUl9DUFJF RzMyKFBNQ05URU5TRVQpOgo+IC0gICAgY2FzZSBIU1JfQ1BSRUczMihQTUNOVEVOQ0xSKToKPiAt ICAgIGNhc2UgSFNSX0NQUkVHMzIoUE1PVlNSKToKPiAtICAgIGNhc2UgSFNSX0NQUkVHMzIoUE1T V0lOQyk6Cj4gLSAgICBjYXNlIEhTUl9DUFJFRzMyKFBNU0VMUik6Cj4gLSAgICBjYXNlIEhTUl9D UFJFRzMyKFBNQ0VJRDApOgo+IC0gICAgY2FzZSBIU1JfQ1BSRUczMihQTUNFSUQxKToKPiAtICAg IGNhc2UgSFNSX0NQUkVHMzIoUE1DQ05UUik6Cj4gLSAgICBjYXNlIEhTUl9DUFJFRzMyKFBNWEVW VFlQRVIpOgo+IC0gICAgY2FzZSBIU1JfQ1BSRUczMihQTVhFVkNOVFIpOgo+IC0gICAgY2FzZSBI U1JfQ1BSRUczMihQTU9WU1NFVCk6Cj4gLSAgICAgICAgLyoKPiAtICAgICAgICAgKiBBY2Nlc3Np YmxlIGF0IEVMMCBvbmx5IGlmIFBNVVNFUkVOUl9FTDAuRU4gaXMgc2V0LiBXZQo+IC0gICAgICAg ICAqIGVtdWxhdGUgdGhhdCByZWdpc3RlciBhcyAwIGFib3ZlLgo+IC0gICAgICAgICAqLwo+IC0g ICAgICAgIHJldHVybiBoYW5kbGVfcmF6X3dpKHJlZ3MsIHJlZ2lkeCwgY3AzMi5yZWFkLCBoc3Is IDEpOwo+IC0KPiAtICAgIC8qCj4gLSAgICAgKiBIQ1JfRUwyLlRJRENQCj4gLSAgICAgKgo+IC0g ICAgICogQVJNdjcgKERESSAwNDA2Qy5iKTogQjEuMTQuMwo+IC0gICAgICogQVJNdjggKERESSAw NDg3QS5kKTogRDEtMTUwMSBUYWJsZSBEMS00Mwo+IC0gICAgICoKPiAtICAgICAqICAtIENSbj09 YzksIG9wYzE9PXswLTd9LCBDUm09PXtjMC1jMiwgYzUtYzh9LCBvcGMyPT17MC03fQo+IC0gICAg ICogICAgKENhY2hlIGFuZCBUQ00gbG9ja2Rvd24gcmVnaXN0ZXJzKQo+IC0gICAgICogIC0gQ1Ju PT1jMTAsIG9wYzE9PXswLTd9LCBDUm09PXtjMCwgYzEsIGM0LCBjOH0sIG9wYzI9PXswLTd9Cj4g LSAgICAgKiAgICAoVk1TQSBDUDE1IGMxMCByZWdpc3RlcnMpCj4gLSAgICAgKiAgLSBDUm49PWMx MSwgb3BjMT09ezAtN30sIENSbT09e2MwLWM4LCBjMTV9LCBvcGMyPT17MC03fQo+IC0gICAgICog ICAgKFZNU0EgQ1AxNSBjMTEgcmVnaXN0ZXJzKQo+IC0gICAgICoKPiAtICAgICAqIENQVFJfRUwy LlR7MC4uOSwxMi4uMTN9Cj4gLSAgICAgKgo+IC0gICAgICogQVJNdjcgKERESSAwNDA2Qy5iKTog QjEuMTQuMTIKPiAtICAgICAqIEFSTXY4IChEREkgMDQ4N0EuZCk6IE4vQQo+IC0gICAgICoKPiAt ICAgICAqICAtIEFsbCBhY2Nlc3NlcyB0byBjb3Byb2Nlc3NvcnMgMC4uOSBhbmQgMTIuLjEzCj4g LSAgICAgKgo+IC0gICAgICogSFNUUl9FTDIuVDE1Cj4gLSAgICAgKgo+IC0gICAgICogQVJNdjcg KERESSAwNDA2Qy5iKTogQjEuMTQuMTQKPiAtICAgICAqIEFSTXY4IChEREkgMDQ4N0EuZCk6IEQx LTE1MDcgVGFibGUgRDEtNTUKPiAtICAgICAqCj4gLSAgICAgKiAgLSBBbGwgYWNjZXNzZXMgdG8g Y3AxNSwgYzE1IHJlZ2lzdGVycy4KPiAtICAgICAqCj4gLSAgICAgKiBBbmQgYWxsIG90aGVyIHVu a25vd24gcmVnaXN0ZXJzLgo+IC0gICAgICovCj4gLSAgICBkZWZhdWx0Ogo+IC0gICAgICAgIGdk cHJpbnRrKFhFTkxPR19FUlIsCj4gLSAgICAgICAgICAgICAgICAgIiVzIHAxNSwgJWQsIHIlZCwg Y3IlZCwgY3IlZCwgJWQgQCAweCUiUFJJcmVnaXN0ZXIiXG4iLAo+IC0gICAgICAgICAgICAgICAg IGNwMzIucmVhZCA/ICJtcmMiIDogIm1jciIsCj4gLSAgICAgICAgICAgICAgICAgY3AzMi5vcDEs IGNwMzIucmVnLCBjcDMyLmNybiwgY3AzMi5jcm0sIGNwMzIub3AyLCByZWdzLT5wYyk7Cj4gLSAg ICAgICAgZ2RwcmludGsoWEVOTE9HX0VSUiwgInVuaGFuZGxlZCAzMi1iaXQgQ1AxNSBhY2Nlc3Mg JSN4XG4iLAo+IC0gICAgICAgICAgICAgICAgIGhzci5iaXRzICYgSFNSX0NQMzJfUkVHU19NQVNL KTsKPiAtICAgICAgICBpbmplY3RfdW5kZWZfZXhjZXB0aW9uKHJlZ3MsIGhzcik7Cj4gLSAgICAg ICAgcmV0dXJuOwo+IC0gICAgfQo+IC0gICAgYWR2YW5jZV9wYyhyZWdzLCBoc3IpOwo+IC19Cj4g LQo+IC1zdGF0aWMgdm9pZCBkb19jcDE1XzY0KHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzLAo+ IC0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuaW9uIGhzciBoc3IpCj4gLXsKPiAtICAg IGlmICggIWNoZWNrX2NvbmRpdGlvbmFsX2luc3RyKHJlZ3MsIGhzcikgKQo+IC0gICAgewo+IC0g ICAgICAgIGFkdmFuY2VfcGMocmVncywgaHNyKTsKPiAtICAgICAgICByZXR1cm47Cj4gLSAgICB9 Cj4gLQo+IC0gICAgc3dpdGNoICggaHNyLmJpdHMgJiBIU1JfQ1A2NF9SRUdTX01BU0sgKQo+IC0g ICAgewo+IC0gICAgLyoKPiAtICAgICAqICFDTlRIQ1RMX0VMMi5FTDFQQ0VOIC8gIUNOVEhDVEwu UEwxUENFTgo+IC0gICAgICoKPiAtICAgICAqIEFSTXY3IChEREkgMDQwNkMuYik6IEI0LjEuMjIK PiAtICAgICAqIEFSTXY4IChEREkgMDQ4N0EuZCk6IEQxLTE1MTAgVGFibGUgRDEtNjAKPiAtICAg ICAqLwo+IC0gICAgY2FzZSBIU1JfQ1BSRUc2NChDTlRQX0NWQUwpOgo+IC0gICAgICAgIGlmICgg IXZ0aW1lcl9lbXVsYXRlKHJlZ3MsIGhzcikgKQo+IC0gICAgICAgICAgICByZXR1cm4gaW5qZWN0 X3VuZGVmX2V4Y2VwdGlvbihyZWdzLCBoc3IpOwo+IC0gICAgICAgIGJyZWFrOwo+IC0KPiAtICAg IC8qCj4gLSAgICAgKiBIQ1JfRUwyLkZNTyBvciBIQ1JfRUwyLklNTwo+IC0gICAgICoKPiAtICAg ICAqIEdJQyBBcmNoaXRlY3R1cmUgU3BlY2lmaWNhdGlvbiAoSUhJIDAwNjlDKTogU2VjdGlvbiA0 LjYuMwo+IC0gICAgICovCj4gLSAgICBjYXNlIEhTUl9DUFJFRzY0KElDQ19TR0kxUik6Cj4gLSAg ICBjYXNlIEhTUl9DUFJFRzY0KElDQ19BU0dJMVIpOgo+IC0gICAgY2FzZSBIU1JfQ1BSRUc2NChJ Q0NfU0dJMFIpOgo+IC0gICAgICAgIGlmICggIXZnaWNfZW11bGF0ZShyZWdzLCBoc3IpICkKPiAt ICAgICAgICAgICAgcmV0dXJuIGluamVjdF91bmRlZl9leGNlcHRpb24ocmVncywgaHNyKTsKPiAt ICAgICAgICBicmVhazsKPiAtCj4gLSAgICAvKgo+IC0gICAgICogQ1BUUl9FTDIuVHswLi45LDEy Li4xM30KPiAtICAgICAqCj4gLSAgICAgKiBBUk12NyAoRERJIDA0MDZDLmIpOiBCMS4xNC4xMgo+ IC0gICAgICogQVJNdjggKERESSAwNDg3QS5kKTogTi9BCj4gLSAgICAgKgo+IC0gICAgICogIC0g QWxsIGFjY2Vzc2VzIHRvIGNvcHJvY2Vzc29ycyAwLi45IGFuZCAxMi4uMTMKPiAtICAgICAqCj4g LSAgICAgKiBIU1RSX0VMMi5UMTUKPiAtICAgICAqCj4gLSAgICAgKiBBUk12NyAoRERJIDA0MDZD LmIpOiBCMS4xNC4xNAo+IC0gICAgICogQVJNdjggKERESSAwNDg3QS5kKTogRDEtMTUwNyBUYWJs ZSBEMS01NQo+IC0gICAgICoKPiAtICAgICAqICAtIEFsbCBhY2Nlc3NlcyB0byBjcDE1LCBjMTUg cmVnaXN0ZXJzLgo+IC0gICAgICoKPiAtICAgICAqIEFuZCBhbGwgb3RoZXIgdW5rbm93biByZWdp c3RlcnMuCj4gLSAgICAgKi8KPiAtICAgIGRlZmF1bHQ6Cj4gLSAgICAgICAgewo+IC0gICAgICAg ICAgICBjb25zdCBzdHJ1Y3QgaHNyX2NwNjQgY3A2NCA9IGhzci5jcDY0Owo+IC0KPiAtICAgICAg ICAgICAgZ2RwcmludGsoWEVOTE9HX0VSUiwKPiAtICAgICAgICAgICAgICAgICAgICAgIiVzIHAx NSwgJWQsIHIlZCwgciVkLCBjciVkIEAgMHglIlBSSXJlZ2lzdGVyIlxuIiwKPiAtICAgICAgICAg ICAgICAgICAgICAgY3A2NC5yZWFkID8gIm1ycmMiIDogIm1jcnIiLAo+IC0gICAgICAgICAgICAg ICAgICAgICBjcDY0Lm9wMSwgY3A2NC5yZWcxLCBjcDY0LnJlZzIsIGNwNjQuY3JtLCByZWdzLT5w Yyk7Cj4gLSAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19FUlIsICJ1bmhhbmRsZWQgNjQtYml0 IENQMTUgYWNjZXNzICUjeFxuIiwKPiAtICAgICAgICAgICAgICAgICAgICAgaHNyLmJpdHMgJiBI U1JfQ1A2NF9SRUdTX01BU0spOwo+IC0gICAgICAgICAgICBpbmplY3RfdW5kZWZfZXhjZXB0aW9u KHJlZ3MsIGhzcik7Cj4gLSAgICAgICAgICAgIHJldHVybjsKPiAtICAgICAgICB9Cj4gLSAgICB9 Cj4gLSAgICBhZHZhbmNlX3BjKHJlZ3MsIGhzcik7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGRv X2NwMTRfMzIoc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MsIGNvbnN0IHVuaW9uIGhzciBoc3Ip Cj4gLXsKPiAtICAgIGNvbnN0IHN0cnVjdCBoc3JfY3AzMiBjcDMyID0gaHNyLmNwMzI7Cj4gLSAg ICBpbnQgcmVnaWR4ID0gY3AzMi5yZWc7Cj4gLSAgICBzdHJ1Y3QgZG9tYWluICpkID0gY3VycmVu dC0+ZG9tYWluOwo+IC0KPiAtICAgIGlmICggIWNoZWNrX2NvbmRpdGlvbmFsX2luc3RyKHJlZ3Ms IGhzcikgKQo+IC0gICAgewo+IC0gICAgICAgIGFkdmFuY2VfcGMocmVncywgaHNyKTsKPiAtICAg ICAgICByZXR1cm47Cj4gLSAgICB9Cj4gLQo+IC0gICAgc3dpdGNoICggaHNyLmJpdHMgJiBIU1Jf Q1AzMl9SRUdTX01BU0sgKQo+IC0gICAgewo+IC0gICAgLyoKPiAtICAgICAqIE1EQ1JfRUwyLlRE T1NBCj4gLSAgICAgKgo+IC0gICAgICogQVJNdjcgKERESSAwNDA2Qy5iKTogQjEuMTQuMTUKPiAt ICAgICAqIEFSTXY4IChEREkgMDQ4N0EuZCk6IEQxLTE1MDkgVGFibGUgRDEtNTgKPiAtICAgICAq Cj4gLSAgICAgKiBVbmhhbmRsZWQ6Cj4gLSAgICAgKiAgICBEQkdPU0xTUgo+IC0gICAgICogICAg REJHUFJDUgo+IC0gICAgICovCj4gLSAgICBjYXNlIEhTUl9DUFJFRzMyKERCR09TTEFSKToKPiAt ICAgICAgICByZXR1cm4gaGFuZGxlX3dvX3dpKHJlZ3MsIHJlZ2lkeCwgY3AzMi5yZWFkLCBoc3Is IDEpOwo+IC0gICAgY2FzZSBIU1JfQ1BSRUczMihEQkdPU0RMUik6Cj4gLSAgICAgICAgcmV0dXJu IGhhbmRsZV9yYXpfd2kocmVncywgcmVnaWR4LCBjcDMyLnJlYWQsIGhzciwgMSk7Cj4gLQo+IC0g ICAgLyoKPiAtICAgICAqIE1EQ1JfRUwyLlREQQo+IC0gICAgICoKPiAtICAgICAqIEFSTXY3IChE REkgMDQwNkMuYik6IEIxLjE0LjE1Cj4gLSAgICAgKiBBUk12OCAoRERJIDA0ODdBLmQpOiBEMS0x NTEwIFRhYmxlIEQxLTU5Cj4gLSAgICAgKgo+IC0gICAgICogVW5oYW5kbGVkOgo+IC0gICAgICog ICAgREJHRENDSU5UCj4gLSAgICAgKiAgICBEQkdEVFJSWGludAo+IC0gICAgICogICAgREJHRFRS VFhpbnQKPiAtICAgICAqICAgIERCR1dGQVIKPiAtICAgICAqICAgIERCR0RUUlRYZXh0Cj4gLSAg ICAgKiAgICBEQkdEVFJSWGV4dCwKPiAtICAgICAqICAgIERCR0JYVlI8bj4KPiAtICAgICAqICAg IERCR0NMQUlNU0VUCj4gLSAgICAgKiAgICBEQkdDTEFJTUNMUgo+IC0gICAgICogICAgREJHQVVU SFNUQVRVUwo+IC0gICAgICogICAgREJHREVWSUQKPiAtICAgICAqICAgIERCR0RFVklEMQo+IC0g ICAgICogICAgREJHREVWSUQyCj4gLSAgICAgKiAgICBEQkdPU0VDQ1IKPiAtICAgICAqLwo+IC0g ICAgY2FzZSBIU1JfQ1BSRUczMihEQkdESURSKToKPiAtICAgIHsKPiAtICAgICAgICB1aW50MzJf dCB2YWw7Cj4gLQo+IC0gICAgICAgIC8qCj4gLSAgICAgICAgICogUmVhZC1vbmx5IHJlZ2lzdGVy LiBBY2Nlc3NpYmxlIGJ5IEVMMCBpZiBEQkdEU0NSZXh0LlVEQ0NkaXMKPiAtICAgICAgICAgKiBp cyBzZXQgdG8gMCwgd2hpY2ggd2UgZW11bGF0ZWQgYmVsb3cuCj4gLSAgICAgICAgICovCj4gLSAg ICAgICAgaWYgKCAhY3AzMi5yZWFkICkKPiAtICAgICAgICAgICAgcmV0dXJuIGluamVjdF91bmRl Zl9leGNlcHRpb24ocmVncywgaHNyKTsKPiAtCj4gLSAgICAgICAgLyogSW1wbGVtZW50IHRoZSBt aW5pbXVtIHJlcXVpcmVtZW50czoKPiAtICAgICAgICAgKiAgLSBOdW1iZXIgb2Ygd2F0Y2hwb2lu dHM6IDEKPiAtICAgICAgICAgKiAgLSBOdW1iZXIgb2YgYnJlYWtwb2ludHM6IDIKPiAtICAgICAg ICAgKiAgLSBWZXJzaW9uOiBBUk12NyB2Ny4xCj4gLSAgICAgICAgICogIC0gVmFyaWFudCBhbmQg UmV2aXNpb24gYml0cyBtYXRjaCBNRElSCj4gLSAgICAgICAgICovCj4gLSAgICAgICAgdmFsID0g KDEgPDwgMjQpIHwgKDUgPDwgMTYpOwo+IC0gICAgICAgIHZhbCB8PSAoKGQtPmFyY2gudnBpZHIg Pj4gMjApICYgMHhmKSB8IChkLT5hcmNoLnZwaWRyICYgMHhmKTsKPiAtICAgICAgICBzZXRfdXNl cl9yZWcocmVncywgcmVnaWR4LCB2YWwpOwo+IC0KPiAtICAgICAgICBicmVhazsKPiAtICAgIH0K PiAtCj4gLSAgICBjYXNlIEhTUl9DUFJFRzMyKERCR0RTQ1JJTlQpOgo+IC0gICAgICAgIC8qCj4g LSAgICAgICAgICogUmVhZC1vbmx5IHJlZ2lzdGVyLiBBY2Nlc3NpYmxlIGJ5IEVMMCBpZiBEQkdE U0NSZXh0LlVEQ0NkaXMKPiAtICAgICAgICAgKiBpcyBzZXQgdG8gMCwgd2hpY2ggd2UgZW11bGF0 ZWQgYmVsb3cuCj4gLSAgICAgICAgICovCj4gLSAgICAgICAgcmV0dXJuIGhhbmRsZV9yb19yYXoo cmVncywgcmVnaWR4LCBjcDMyLnJlYWQsIGhzciwgMSk7Cj4gLQo+IC0gICAgY2FzZSBIU1JfQ1BS RUczMihEQkdEU0NSRVhUKToKPiAtICAgICAgICAvKgo+IC0gICAgICAgICAqIEltcGxlbWVudCBk ZWJ1ZyBzdGF0dXMgYW5kIGNvbnRyb2wgcmVnaXN0ZXIgYXMgUkFaL1dJLgo+IC0gICAgICAgICAq IFRoZSBPUyB3b24ndCB1c2UgSGFyZHdhcmUgZGVidWcgaWYgTURCR2VuIG5vdCBzZXQuCj4gLSAg ICAgICAgICovCj4gLSAgICAgICAgcmV0dXJuIGhhbmRsZV9yYXpfd2kocmVncywgcmVnaWR4LCBj cDMyLnJlYWQsIGhzciwgMSk7Cj4gLQo+IC0gICAgY2FzZSBIU1JfQ1BSRUczMihEQkdWQ1IpOgo+ IC0gICAgY2FzZSBIU1JfQ1BSRUczMihEQkdCVlIwKToKPiAtICAgIGNhc2UgSFNSX0NQUkVHMzIo REJHQkNSMCk6Cj4gLSAgICBjYXNlIEhTUl9DUFJFRzMyKERCR1dWUjApOgo+IC0gICAgY2FzZSBI U1JfQ1BSRUczMihEQkdXQ1IwKToKPiAtICAgIGNhc2UgSFNSX0NQUkVHMzIoREJHQlZSMSk6Cj4g LSAgICBjYXNlIEhTUl9DUFJFRzMyKERCR0JDUjEpOgo+IC0gICAgICAgIHJldHVybiBoYW5kbGVf cmF6X3dpKHJlZ3MsIHJlZ2lkeCwgY3AzMi5yZWFkLCBoc3IsIDEpOwo+IC0KPiAtICAgIC8qCj4g LSAgICAgKiBDUFRSX0VMMi5UVEEKPiAtICAgICAqCj4gLSAgICAgKiBBUk12NyAoRERJIDA0MDZD LmIpOiBCMS4xNC4xNgo+IC0gICAgICogQVJNdjggKERESSAwNDg3QS5kKTogRDEtMTUwNyBUYWJs ZSBEMS01NAo+IC0gICAgICoKPiAtICAgICAqICAtIEFsbCBpbXBsZW1lbnRlZCB0cmFjZSByZWdp c3RlcnMuCj4gLSAgICAgKgo+IC0gICAgICogTURDUl9FTDIuVERSQQo+IC0gICAgICoKPiAtICAg ICAqIEFSTXY3IChEREkgMDQwNkMuYik6IEIxLjE0LjE1Cj4gLSAgICAgKiBBUk12OCAoRERJIDA0 ODdBLmQpOiBEMS0xNTA4IFRhYmxlIEQxLTU3Cj4gLSAgICAgKgo+IC0gICAgICogVW5oYW5kbGVk Ogo+IC0gICAgICogICAgREJHRFJBUiAoMzItYml0IGFjY2Vzc2VzKQo+IC0gICAgICogICAgREJH RFNBUiAoMzItYml0IGFjY2Vzc2VzKQo+IC0gICAgICoKPiAtICAgICAqIEFuZCBhbGwgb3RoZXIg dW5rbm93biByZWdpc3RlcnMuCj4gLSAgICAgKi8KPiAtICAgIGRlZmF1bHQ6Cj4gLSAgICAgICAg Z2RwcmludGsoWEVOTE9HX0VSUiwKPiAtICAgICAgICAgICAgICAgICAiJXMgcDE0LCAlZCwgciVk LCBjciVkLCBjciVkLCAlZCBAIDB4JSJQUklyZWdpc3RlciJcbiIsCj4gLSAgICAgICAgICAgICAg ICAgIGNwMzIucmVhZCA/ICJtcmMiIDogIm1jciIsCj4gLSAgICAgICAgICAgICAgICAgIGNwMzIu b3AxLCBjcDMyLnJlZywgY3AzMi5jcm4sIGNwMzIuY3JtLCBjcDMyLm9wMiwgcmVncy0+cGMpOwo+ IC0gICAgICAgIGdkcHJpbnRrKFhFTkxPR19FUlIsICJ1bmhhbmRsZWQgMzItYml0IGNwMTQgYWNj ZXNzICUjeFxuIiwKPiAtICAgICAgICAgICAgICAgICBoc3IuYml0cyAmIEhTUl9DUDMyX1JFR1Nf TUFTSyk7Cj4gLSAgICAgICAgaW5qZWN0X3VuZGVmX2V4Y2VwdGlvbihyZWdzLCBoc3IpOwo+IC0g ICAgICAgIHJldHVybjsKPiAtICAgIH0KPiAtCj4gLSAgICBhZHZhbmNlX3BjKHJlZ3MsIGhzcik7 Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGRvX2NwMTRfNjQoc3RydWN0IGNwdV91c2VyX3JlZ3Mg KnJlZ3MsIGNvbnN0IHVuaW9uIGhzciBoc3IpCj4gLXsKPiAtICAgIGNvbnN0IHN0cnVjdCBoc3Jf Y3A2NCBjcDY0ID0gaHNyLmNwNjQ7Cj4gLQo+IC0gICAgaWYgKCAhY2hlY2tfY29uZGl0aW9uYWxf aW5zdHIocmVncywgaHNyKSApCj4gLSAgICB7Cj4gLSAgICAgICAgYWR2YW5jZV9wYyhyZWdzLCBo c3IpOwo+IC0gICAgICAgIHJldHVybjsKPiAtICAgIH0KPiAtCj4gLSAgICAvKgo+IC0gICAgICog Q1BUUl9FTDIuVFRBCj4gLSAgICAgKgo+IC0gICAgICogQVJNdjcgKERESSAwNDA2Qy5iKTogQjEu MTQuMTYKPiAtICAgICAqIEFSTXY4IChEREkgMDQ4N0EuZCk6IEQxLTE1MDcgVGFibGUgRDEtNTQK PiAtICAgICAqCj4gLSAgICAgKiAgLSBBbGwgaW1wbGVtZW50ZWQgdHJhY2UgcmVnaXN0ZXJzLgo+ IC0gICAgICoKPiAtICAgICAqIE1EQ1JfRUwyLlREUkEKPiAtICAgICAqCj4gLSAgICAgKiBBUk12 NyAoRERJIDA0MDZDLmIpOiBCMS4xNC4xNQo+IC0gICAgICogQVJNdjggKERESSAwNDg3QS5kKTog RDEtMTUwOCBUYWJsZSBEMS01Nwo+IC0gICAgICoKPiAtICAgICAqIFVuaGFuZGxlZDoKPiAtICAg ICAqICAgIERCR0RSQVIgKDY0LWJpdCBhY2Nlc3NlcykKPiAtICAgICAqICAgIERCR0RTQVIgKDY0 LWJpdCBhY2Nlc3NlcykKPiAtICAgICAqCj4gLSAgICAgKiBBbmQgYWxsIG90aGVyIHVua25vd24g cmVnaXN0ZXJzLgo+IC0gICAgICovCj4gLSAgICBnZHByaW50ayhYRU5MT0dfRVJSLAo+IC0gICAg ICAgICAgICAgIiVzIHAxNCwgJWQsIHIlZCwgciVkLCBjciVkIEAgMHglIlBSSXJlZ2lzdGVyIlxu IiwKPiAtICAgICAgICAgICAgIGNwNjQucmVhZCA/ICJtcnJjIiA6ICJtY3JyIiwKPiAtICAgICAg ICAgICAgIGNwNjQub3AxLCBjcDY0LnJlZzEsIGNwNjQucmVnMiwgY3A2NC5jcm0sIHJlZ3MtPnBj KTsKPiAtICAgIGdkcHJpbnRrKFhFTkxPR19FUlIsICJ1bmhhbmRsZWQgNjQtYml0IENQMTQgYWNj ZXNzICUjeFxuIiwKPiAtICAgICAgICAgICAgIGhzci5iaXRzICYgSFNSX0NQNjRfUkVHU19NQVNL KTsKPiAtICAgIGluamVjdF91bmRlZl9leGNlcHRpb24ocmVncywgaHNyKTsKPiAtfQo+IC0KPiAt c3RhdGljIHZvaWQgZG9fY3AxNF9kYmcoc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MsIGNvbnN0 IHVuaW9uIGhzciBoc3IpCj4gLXsKPiAtICAgIHN0cnVjdCBoc3JfY3A2NCBjcDY0ID0gaHNyLmNw NjQ7Cj4gLQo+IC0gICAgaWYgKCAhY2hlY2tfY29uZGl0aW9uYWxfaW5zdHIocmVncywgaHNyKSAp Cj4gLSAgICB7Cj4gLSAgICAgICAgYWR2YW5jZV9wYyhyZWdzLCBoc3IpOwo+IC0gICAgICAgIHJl dHVybjsKPiAtICAgIH0KPiAtCj4gLSAgICAvKgo+IC0gICAgICogTURDUl9FTDIuVERPU0EKPiAt ICAgICAqCj4gLSAgICAgKiBBUk12NyAoRERJIDA0MDZDLmIpOiBCMS4xNC4xNQo+IC0gICAgICog QVJNdjggKERESSAwNDg3QS5kKTogRDEtMTUwOSBUYWJsZSBEMS01OAo+IC0gICAgICoKPiAtICAg ICAqIFVuaGFuZGxlZDoKPiAtICAgICAqICAgIERCR0RUUlRYaW50Cj4gLSAgICAgKiAgICBEQkdE VFJSWGludAo+IC0gICAgICoKPiAtICAgICAqIEFuZCBhbGwgb3RoZXIgdW5rbm93biByZWdpc3Rl cnMuCj4gLSAgICAgKi8KPiAtICAgIGdkcHJpbnRrKFhFTkxPR19FUlIsCj4gLSAgICAgICAgICAg ICAiJXMgcDE0LCAlZCwgciVkLCByJWQsIGNyJWQgQCAweCUiUFJJcmVnaXN0ZXIiXG4iLAo+IC0g ICAgICAgICAgICAgY3A2NC5yZWFkID8gIm1ycmMiIDogIm1jcnIiLAo+IC0gICAgICAgICAgICAg Y3A2NC5vcDEsIGNwNjQucmVnMSwgY3A2NC5yZWcyLCBjcDY0LmNybSwgcmVncy0+cGMpOwo+IC0g ICAgZ2RwcmludGsoWEVOTE9HX0VSUiwgInVuaGFuZGxlZCA2NC1iaXQgQ1AxNCBEQkcgYWNjZXNz ICUjeFxuIiwKPiAtICAgICAgICAgICAgIGhzci5iaXRzICYgSFNSX0NQNjRfUkVHU19NQVNLKTsK PiAtCj4gLSAgICBpbmplY3RfdW5kZWZfZXhjZXB0aW9uKHJlZ3MsIGhzcik7Cj4gLX0KPiAtCj4g LXN0YXRpYyB2b2lkIGRvX2NwKHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzLCBjb25zdCB1bmlv biBoc3IgaHNyKQo+IC17Cj4gLSAgICBjb25zdCBzdHJ1Y3QgaHNyX2NwIGNwID0gaHNyLmNwOwo+ IC0KPiAtICAgIGlmICggIWNoZWNrX2NvbmRpdGlvbmFsX2luc3RyKHJlZ3MsIGhzcikgKQo+IC0g ICAgewo+IC0gICAgICAgIGFkdmFuY2VfcGMocmVncywgaHNyKTsKPiAtICAgICAgICByZXR1cm47 Cj4gLSAgICB9Cj4gLQo+IC0gICAgQVNTRVJUKCFjcC50YXMpOyAvKiBXZSBkb24ndCB0cmFwIFNJ TUQgaW5zdHJ1Y3Rpb24gKi8KPiAtICAgIGdkcHJpbnRrKFhFTkxPR19FUlIsICJ1bmhhbmRsZWQg Q1AlZCBhY2Nlc3NcbiIsIGNwLmNvcHJvYyk7Cj4gLSAgICBpbmplY3RfdW5kZWZfZXhjZXB0aW9u KHJlZ3MsIGhzcik7Cj4gLX0KPiAtCj4gIHZvaWQgZHVtcF9ndWVzdF9zMV93YWxrKHN0cnVjdCBk b21haW4gKmQsIHZhZGRyX3QgYWRkcikKPiAgewo+ICAgICAgcmVnaXN0ZXJfdCB0dGJjciA9IFJF QURfU1lTUkVHKFRDUl9FTDEpOwo+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vdmNwcmVnLmMg Yi94ZW4vYXJjaC9hcm0vdmNwcmVnLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAw MDAwMDAwMDAuLmYzYjA4NDAzZmIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIveGVuL2FyY2gvYXJt L3ZjcHJlZy5jCj4gQEAgLTAsMCArMSw0NTEgQEAKPiArLyoKPiArICogeGVuL2FyY2gvYXJtL2Fy bTY0L3ZjcHJlZy5jCj4gKyAqCj4gKyAqIEVtdWxhdGUgY28tcHJvY2Vzc29yIHJlZ2lzdGVycyB0 cmFwcGVkLgo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTEgQ2l0cml4IFN5c3RlbXMuCj4g KyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4gKyAqIHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCj4g KyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4gKyAqIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPHhlbi9zY2hlZC5oPgo+ ICsKPiArI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+Cj4gKyNpbmNsdWRlIDxhc20vcmVncy5oPgo+ ICsjaW5jbHVkZSA8YXNtL3RyYXBzLmg+Cj4gKyNpbmNsdWRlIDxhc20vdnRpbWVyLmg+Cj4gKwo+ ICt2b2lkIGRvX2NwMTVfMzIoc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MsIGNvbnN0IHVuaW9u IGhzciBoc3IpCj4gK3sKPiArICAgIGNvbnN0IHN0cnVjdCBoc3JfY3AzMiBjcDMyID0gaHNyLmNw MzI7Cj4gKyAgICBpbnQgcmVnaWR4ID0gY3AzMi5yZWc7Cj4gKyAgICBzdHJ1Y3QgdmNwdSAqdiA9 IGN1cnJlbnQ7Cj4gKwo+ICsgICAgaWYgKCAhY2hlY2tfY29uZGl0aW9uYWxfaW5zdHIocmVncywg aHNyKSApCj4gKyAgICB7Cj4gKyAgICAgICAgYWR2YW5jZV9wYyhyZWdzLCBoc3IpOwo+ICsgICAg ICAgIHJldHVybjsKPiArICAgIH0KPiArCj4gKyAgICBzd2l0Y2ggKCBoc3IuYml0cyAmIEhTUl9D UDMyX1JFR1NfTUFTSyApCj4gKyAgICB7Cj4gKyAgICAvKgo+ICsgICAgICogIUNOVEhDVExfRUwy LkVMMVBDRU4gLyAhQ05USENUTC5QTDFQQ0VOCj4gKyAgICAgKgo+ICsgICAgICogQVJNdjcgKERE SSAwNDA2Qy5iKTogQjQuMS4yMgo+ICsgICAgICogQVJNdjggKERESSAwNDg3QS5kKTogRDEtMTUx MCBUYWJsZSBEMS02MAo+ICsgICAgICovCj4gKyAgICBjYXNlIEhTUl9DUFJFRzMyKENOVFBfQ1RM KToKPiArICAgIGNhc2UgSFNSX0NQUkVHMzIoQ05UUF9UVkFMKToKPiArICAgICAgICBpZiAoICF2 dGltZXJfZW11bGF0ZShyZWdzLCBoc3IpICkKPiArICAgICAgICAgICAgcmV0dXJuIGluamVjdF91 bmRlZl9leGNlcHRpb24ocmVncywgaHNyKTsKPiArICAgICAgICBicmVhazsKPiArCj4gKyAgICAv Kgo+ICsgICAgICogSENSX0VMMi5UQUNSIC8gSENSLlRBQwo+ICsgICAgICoKPiArICAgICAqIEFS TXY3IChEREkgMDQwNkMuYik6IEIxLjE0LjYKPiArICAgICAqIEFSTXY4IChEREkgMDQ4N0EuZCk6 IEc2LjIuMQo+ICsgICAgICovCj4gKyAgICBjYXNlIEhTUl9DUFJFRzMyKEFDVExSKToKPiArICAg ICAgICBpZiAoIHBzcl9tb2RlX2lzX3VzZXIocmVncykgKQo+ICsgICAgICAgICAgICByZXR1cm4g aW5qZWN0X3VuZGVmX2V4Y2VwdGlvbihyZWdzLCBoc3IpOwo+ICsgICAgICAgIGlmICggY3AzMi5y ZWFkICkKPiArICAgICAgICAgICAgc2V0X3VzZXJfcmVnKHJlZ3MsIHJlZ2lkeCwgdi0+YXJjaC5h Y3Rscik7Cj4gKyAgICAgICAgYnJlYWs7Cj4gKwo+ICsgICAgLyoKPiArICAgICAqIE1EQ1JfRUwy LlRQTQo+ICsgICAgICoKPiArICAgICAqIEFSTXY3IChEREkgMDQwNkMuYik6IEIxLjE0LjE3Cj4g KyAgICAgKiBBUk12OCAoRERJIDA0ODdBLmQpOiBEMS0xNTExIFRhYmxlIEQxLTYxCj4gKyAgICAg Kgo+ICsgICAgICogVW5oYW5kbGVkOgo+ICsgICAgICogICAgUE1FVkNOVFI8bj4KPiArICAgICAq ICAgIFBNRVZUWVBFUjxuPgo+ICsgICAgICogICAgUE1DQ0ZJTFRSCj4gKyAgICAgKgo+ICsgICAg ICogTURDUl9FTDIuVFBNQ1IKPiArICAgICAqCj4gKyAgICAgKiBBUk12NyAoRERJIDA0MDZDLmIp OiBCMS4xNC4xNwo+ICsgICAgICogQVJNdjggKERESSAwNDg3QS5kKTogRDEtMTUxMSBUYWJsZSBE MS02Mgo+ICsgICAgICoKPiArICAgICAqIE5COiBCb3RoIE1EQ1JfRUwyLlRQTSBhbmQgTURDUl9F TDIuVFBNQ1IgY2F1c2UgdHJhcHBpbmcgb2YgUE1DUi4KPiArICAgICAqLwo+ICsgICAgLyogV2Ug Y291bGQgdHJhcCBJRF9ERlIwIGFuZCB0ZWxsIHRoZSBndWVzdCB3ZSBkb24ndCBzdXBwb3J0Cj4g KyAgICAgKiBwZXJmb3JtYW5jZSBtb25pdG9yaW5nLCBidXQgTGludXggZG9lc24ndCBjaGVjayB0 aGUgSURfREZSMC4KPiArICAgICAqIFRoZXJlZm9yZSBpdCB3aWxsIHJlYWQgUE1DUi4KPiArICAg ICAqCj4gKyAgICAgKiBXZSB0ZWxsIHRoZSBndWVzdCB3ZSBoYXZlIDAgY291bnRlcnMuIFVuZm9y dHVuYXRlbHkgd2UgbXVzdAo+ICsgICAgICogYWx3YXlzIHN1cHBvcnQgUE1DQ05UUiAodGhlIGN5 bGUgY291bnRlcik6IHdlIGp1c3QgUkFaL1dJIGZvciBhbGwKPiArICAgICAqIFBNIHJlZ2lzdGVy LCB3aGljaCBkb2Vzbid0IGNyYXNoIHRoZSBrZXJuZWwgYXQgbGVhc3QKPiArICAgICAqLwo+ICsg ICAgY2FzZSBIU1JfQ1BSRUczMihQTVVTRVJFTlIpOgo+ICsgICAgICAgIC8qIFJPIGF0IEVMMC4g UkFaL1dJIGF0IEVMMSAqLwo+ICsgICAgICAgIGlmICggcHNyX21vZGVfaXNfdXNlcihyZWdzKSAp Cj4gKyAgICAgICAgICAgIHJldHVybiBoYW5kbGVfcm9fcmF6KHJlZ3MsIHJlZ2lkeCwgY3AzMi5y ZWFkLCBoc3IsIDApOwo+ICsgICAgICAgIGVsc2UKPiArICAgICAgICAgICAgcmV0dXJuIGhhbmRs ZV9yYXpfd2kocmVncywgcmVnaWR4LCBjcDMyLnJlYWQsIGhzciwgMSk7Cj4gKyAgICBjYXNlIEhT Ul9DUFJFRzMyKFBNSU5URU5TRVQpOgo+ICsgICAgY2FzZSBIU1JfQ1BSRUczMihQTUlOVEVOQ0xS KToKPiArICAgICAgICAvKiBFTDEgb25seSwgaG93ZXZlciBNRENSX0VMMi5UUE09PTEgbWVhbnMg RUwwIG1heSB0cmFwIGhlcmUgYWxzby4gKi8KPiArICAgICAgICByZXR1cm4gaGFuZGxlX3Jhel93 aShyZWdzLCByZWdpZHgsIGNwMzIucmVhZCwgaHNyLCAxKTsKPiArICAgIGNhc2UgSFNSX0NQUkVH MzIoUE1DUik6Cj4gKyAgICBjYXNlIEhTUl9DUFJFRzMyKFBNQ05URU5TRVQpOgo+ICsgICAgY2Fz ZSBIU1JfQ1BSRUczMihQTUNOVEVOQ0xSKToKPiArICAgIGNhc2UgSFNSX0NQUkVHMzIoUE1PVlNS KToKPiArICAgIGNhc2UgSFNSX0NQUkVHMzIoUE1TV0lOQyk6Cj4gKyAgICBjYXNlIEhTUl9DUFJF RzMyKFBNU0VMUik6Cj4gKyAgICBjYXNlIEhTUl9DUFJFRzMyKFBNQ0VJRDApOgo+ICsgICAgY2Fz ZSBIU1JfQ1BSRUczMihQTUNFSUQxKToKPiArICAgIGNhc2UgSFNSX0NQUkVHMzIoUE1DQ05UUik6 Cj4gKyAgICBjYXNlIEhTUl9DUFJFRzMyKFBNWEVWVFlQRVIpOgo+ICsgICAgY2FzZSBIU1JfQ1BS RUczMihQTVhFVkNOVFIpOgo+ICsgICAgY2FzZSBIU1JfQ1BSRUczMihQTU9WU1NFVCk6Cj4gKyAg ICAgICAgLyoKPiArICAgICAgICAgKiBBY2Nlc3NpYmxlIGF0IEVMMCBvbmx5IGlmIFBNVVNFUkVO Ul9FTDAuRU4gaXMgc2V0LiBXZQo+ICsgICAgICAgICAqIGVtdWxhdGUgdGhhdCByZWdpc3RlciBh cyAwIGFib3ZlLgo+ICsgICAgICAgICAqLwo+ICsgICAgICAgIHJldHVybiBoYW5kbGVfcmF6X3dp KHJlZ3MsIHJlZ2lkeCwgY3AzMi5yZWFkLCBoc3IsIDEpOwo+ICsKPiArICAgIC8qCj4gKyAgICAg KiBIQ1JfRUwyLlRJRENQCj4gKyAgICAgKgo+ICsgICAgICogQVJNdjcgKERESSAwNDA2Qy5iKTog QjEuMTQuMwo+ICsgICAgICogQVJNdjggKERESSAwNDg3QS5kKTogRDEtMTUwMSBUYWJsZSBEMS00 Mwo+ICsgICAgICoKPiArICAgICAqICAtIENSbj09YzksIG9wYzE9PXswLTd9LCBDUm09PXtjMC1j MiwgYzUtYzh9LCBvcGMyPT17MC03fQo+ICsgICAgICogICAgKENhY2hlIGFuZCBUQ00gbG9ja2Rv d24gcmVnaXN0ZXJzKQo+ICsgICAgICogIC0gQ1JuPT1jMTAsIG9wYzE9PXswLTd9LCBDUm09PXtj MCwgYzEsIGM0LCBjOH0sIG9wYzI9PXswLTd9Cj4gKyAgICAgKiAgICAoVk1TQSBDUDE1IGMxMCBy ZWdpc3RlcnMpCj4gKyAgICAgKiAgLSBDUm49PWMxMSwgb3BjMT09ezAtN30sIENSbT09e2MwLWM4 LCBjMTV9LCBvcGMyPT17MC03fQo+ICsgICAgICogICAgKFZNU0EgQ1AxNSBjMTEgcmVnaXN0ZXJz KQo+ICsgICAgICoKPiArICAgICAqIENQVFJfRUwyLlR7MC4uOSwxMi4uMTN9Cj4gKyAgICAgKgo+ ICsgICAgICogQVJNdjcgKERESSAwNDA2Qy5iKTogQjEuMTQuMTIKPiArICAgICAqIEFSTXY4IChE REkgMDQ4N0EuZCk6IE4vQQo+ICsgICAgICoKPiArICAgICAqICAtIEFsbCBhY2Nlc3NlcyB0byBj b3Byb2Nlc3NvcnMgMC4uOSBhbmQgMTIuLjEzCj4gKyAgICAgKgo+ICsgICAgICogSFNUUl9FTDIu VDE1Cj4gKyAgICAgKgo+ICsgICAgICogQVJNdjcgKERESSAwNDA2Qy5iKTogQjEuMTQuMTQKPiAr ICAgICAqIEFSTXY4IChEREkgMDQ4N0EuZCk6IEQxLTE1MDcgVGFibGUgRDEtNTUKPiArICAgICAq Cj4gKyAgICAgKiAgLSBBbGwgYWNjZXNzZXMgdG8gY3AxNSwgYzE1IHJlZ2lzdGVycy4KPiArICAg ICAqCj4gKyAgICAgKiBBbmQgYWxsIG90aGVyIHVua25vd24gcmVnaXN0ZXJzLgo+ICsgICAgICov Cj4gKyAgICBkZWZhdWx0Ogo+ICsgICAgICAgIGdkcHJpbnRrKFhFTkxPR19FUlIsCj4gKyAgICAg ICAgICAgICAgICAgIiVzIHAxNSwgJWQsIHIlZCwgY3IlZCwgY3IlZCwgJWQgQCAweCUiUFJJcmVn aXN0ZXIiXG4iLAo+ICsgICAgICAgICAgICAgICAgIGNwMzIucmVhZCA/ICJtcmMiIDogIm1jciIs Cj4gKyAgICAgICAgICAgICAgICAgY3AzMi5vcDEsIGNwMzIucmVnLCBjcDMyLmNybiwgY3AzMi5j cm0sIGNwMzIub3AyLCByZWdzLT5wYyk7Cj4gKyAgICAgICAgZ2RwcmludGsoWEVOTE9HX0VSUiwg InVuaGFuZGxlZCAzMi1iaXQgQ1AxNSBhY2Nlc3MgJSN4XG4iLAo+ICsgICAgICAgICAgICAgICAg IGhzci5iaXRzICYgSFNSX0NQMzJfUkVHU19NQVNLKTsKPiArICAgICAgICBpbmplY3RfdW5kZWZf ZXhjZXB0aW9uKHJlZ3MsIGhzcik7Cj4gKyAgICAgICAgcmV0dXJuOwo+ICsgICAgfQo+ICsgICAg YWR2YW5jZV9wYyhyZWdzLCBoc3IpOwo+ICt9Cj4gKwo+ICt2b2lkIGRvX2NwMTVfNjQoc3RydWN0 IGNwdV91c2VyX3JlZ3MgKnJlZ3MsIGNvbnN0IHVuaW9uIGhzciBoc3IpCj4gK3sKPiArICAgIGlm ICggIWNoZWNrX2NvbmRpdGlvbmFsX2luc3RyKHJlZ3MsIGhzcikgKQo+ICsgICAgewo+ICsgICAg ICAgIGFkdmFuY2VfcGMocmVncywgaHNyKTsKPiArICAgICAgICByZXR1cm47Cj4gKyAgICB9Cj4g Kwo+ICsgICAgc3dpdGNoICggaHNyLmJpdHMgJiBIU1JfQ1A2NF9SRUdTX01BU0sgKQo+ICsgICAg ewo+ICsgICAgLyoKPiArICAgICAqICFDTlRIQ1RMX0VMMi5FTDFQQ0VOIC8gIUNOVEhDVEwuUEwx UENFTgo+ICsgICAgICoKPiArICAgICAqIEFSTXY3IChEREkgMDQwNkMuYik6IEI0LjEuMjIKPiAr ICAgICAqIEFSTXY4IChEREkgMDQ4N0EuZCk6IEQxLTE1MTAgVGFibGUgRDEtNjAKPiArICAgICAq Lwo+ICsgICAgY2FzZSBIU1JfQ1BSRUc2NChDTlRQX0NWQUwpOgo+ICsgICAgICAgIGlmICggIXZ0 aW1lcl9lbXVsYXRlKHJlZ3MsIGhzcikgKQo+ICsgICAgICAgICAgICByZXR1cm4gaW5qZWN0X3Vu ZGVmX2V4Y2VwdGlvbihyZWdzLCBoc3IpOwo+ICsgICAgICAgIGJyZWFrOwo+ICsKPiArICAgIC8q Cj4gKyAgICAgKiBIQ1JfRUwyLkZNTyBvciBIQ1JfRUwyLklNTwo+ICsgICAgICoKPiArICAgICAq IEdJQyBBcmNoaXRlY3R1cmUgU3BlY2lmaWNhdGlvbiAoSUhJIDAwNjlDKTogU2VjdGlvbiA0LjYu Mwo+ICsgICAgICovCj4gKyAgICBjYXNlIEhTUl9DUFJFRzY0KElDQ19TR0kxUik6Cj4gKyAgICBj YXNlIEhTUl9DUFJFRzY0KElDQ19BU0dJMVIpOgo+ICsgICAgY2FzZSBIU1JfQ1BSRUc2NChJQ0Nf U0dJMFIpOgo+ICsgICAgICAgIGlmICggIXZnaWNfZW11bGF0ZShyZWdzLCBoc3IpICkKPiArICAg ICAgICAgICAgcmV0dXJuIGluamVjdF91bmRlZl9leGNlcHRpb24ocmVncywgaHNyKTsKPiArICAg ICAgICBicmVhazsKPiArCj4gKyAgICAvKgo+ICsgICAgICogQ1BUUl9FTDIuVHswLi45LDEyLi4x M30KPiArICAgICAqCj4gKyAgICAgKiBBUk12NyAoRERJIDA0MDZDLmIpOiBCMS4xNC4xMgo+ICsg ICAgICogQVJNdjggKERESSAwNDg3QS5kKTogTi9BCj4gKyAgICAgKgo+ICsgICAgICogIC0gQWxs IGFjY2Vzc2VzIHRvIGNvcHJvY2Vzc29ycyAwLi45IGFuZCAxMi4uMTMKPiArICAgICAqCj4gKyAg ICAgKiBIU1RSX0VMMi5UMTUKPiArICAgICAqCj4gKyAgICAgKiBBUk12NyAoRERJIDA0MDZDLmIp OiBCMS4xNC4xNAo+ICsgICAgICogQVJNdjggKERESSAwNDg3QS5kKTogRDEtMTUwNyBUYWJsZSBE MS01NQo+ICsgICAgICoKPiArICAgICAqICAtIEFsbCBhY2Nlc3NlcyB0byBjcDE1LCBjMTUgcmVn aXN0ZXJzLgo+ICsgICAgICoKPiArICAgICAqIEFuZCBhbGwgb3RoZXIgdW5rbm93biByZWdpc3Rl cnMuCj4gKyAgICAgKi8KPiArICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgewo+ICsgICAgICAgICAg ICBjb25zdCBzdHJ1Y3QgaHNyX2NwNjQgY3A2NCA9IGhzci5jcDY0Owo+ICsKPiArICAgICAgICAg ICAgZ2RwcmludGsoWEVOTE9HX0VSUiwKPiArICAgICAgICAgICAgICAgICAgICAgIiVzIHAxNSwg JWQsIHIlZCwgciVkLCBjciVkIEAgMHglIlBSSXJlZ2lzdGVyIlxuIiwKPiArICAgICAgICAgICAg ICAgICAgICAgY3A2NC5yZWFkID8gIm1ycmMiIDogIm1jcnIiLAo+ICsgICAgICAgICAgICAgICAg ICAgICBjcDY0Lm9wMSwgY3A2NC5yZWcxLCBjcDY0LnJlZzIsIGNwNjQuY3JtLCByZWdzLT5wYyk7 Cj4gKyAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19FUlIsICJ1bmhhbmRsZWQgNjQtYml0IENQ MTUgYWNjZXNzICUjeFxuIiwKPiArICAgICAgICAgICAgICAgICAgICAgaHNyLmJpdHMgJiBIU1Jf Q1A2NF9SRUdTX01BU0spOwo+ICsgICAgICAgICAgICBpbmplY3RfdW5kZWZfZXhjZXB0aW9uKHJl Z3MsIGhzcik7Cj4gKyAgICAgICAgICAgIHJldHVybjsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4g KyAgICBhZHZhbmNlX3BjKHJlZ3MsIGhzcik7Cj4gK30KPiArCj4gK3ZvaWQgZG9fY3AxNF8zMihz dHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncywgY29uc3QgdW5pb24gaHNyIGhzcikKPiArewo+ICsg ICAgY29uc3Qgc3RydWN0IGhzcl9jcDMyIGNwMzIgPSBoc3IuY3AzMjsKPiArICAgIGludCByZWdp ZHggPSBjcDMyLnJlZzsKPiArICAgIHN0cnVjdCBkb21haW4gKmQgPSBjdXJyZW50LT5kb21haW47 Cj4gKwo+ICsgICAgaWYgKCAhY2hlY2tfY29uZGl0aW9uYWxfaW5zdHIocmVncywgaHNyKSApCj4g KyAgICB7Cj4gKyAgICAgICAgYWR2YW5jZV9wYyhyZWdzLCBoc3IpOwo+ICsgICAgICAgIHJldHVy bjsKPiArICAgIH0KPiArCj4gKyAgICBzd2l0Y2ggKCBoc3IuYml0cyAmIEhTUl9DUDMyX1JFR1Nf TUFTSyApCj4gKyAgICB7Cj4gKyAgICAvKgo+ICsgICAgICogTURDUl9FTDIuVERPU0EKPiArICAg ICAqCj4gKyAgICAgKiBBUk12NyAoRERJIDA0MDZDLmIpOiBCMS4xNC4xNQo+ICsgICAgICogQVJN djggKERESSAwNDg3QS5kKTogRDEtMTUwOSBUYWJsZSBEMS01OAo+ICsgICAgICoKPiArICAgICAq IFVuaGFuZGxlZDoKPiArICAgICAqICAgIERCR09TTFNSCj4gKyAgICAgKiAgICBEQkdQUkNSCj4g KyAgICAgKi8KPiArICAgIGNhc2UgSFNSX0NQUkVHMzIoREJHT1NMQVIpOgo+ICsgICAgICAgIHJl dHVybiBoYW5kbGVfd29fd2kocmVncywgcmVnaWR4LCBjcDMyLnJlYWQsIGhzciwgMSk7Cj4gKyAg ICBjYXNlIEhTUl9DUFJFRzMyKERCR09TRExSKToKPiArICAgICAgICByZXR1cm4gaGFuZGxlX3Jh el93aShyZWdzLCByZWdpZHgsIGNwMzIucmVhZCwgaHNyLCAxKTsKPiArCj4gKyAgICAvKgo+ICsg ICAgICogTURDUl9FTDIuVERBCj4gKyAgICAgKgo+ICsgICAgICogQVJNdjcgKERESSAwNDA2Qy5i KTogQjEuMTQuMTUKPiArICAgICAqIEFSTXY4IChEREkgMDQ4N0EuZCk6IEQxLTE1MTAgVGFibGUg RDEtNTkKPiArICAgICAqCj4gKyAgICAgKiBVbmhhbmRsZWQ6Cj4gKyAgICAgKiAgICBEQkdEQ0NJ TlQKPiArICAgICAqICAgIERCR0RUUlJYaW50Cj4gKyAgICAgKiAgICBEQkdEVFJUWGludAo+ICsg ICAgICogICAgREJHV0ZBUgo+ICsgICAgICogICAgREJHRFRSVFhleHQKPiArICAgICAqICAgIERC R0RUUlJYZXh0LAo+ICsgICAgICogICAgREJHQlhWUjxuPgo+ICsgICAgICogICAgREJHQ0xBSU1T RVQKPiArICAgICAqICAgIERCR0NMQUlNQ0xSCj4gKyAgICAgKiAgICBEQkdBVVRIU1RBVFVTCj4g KyAgICAgKiAgICBEQkdERVZJRAo+ICsgICAgICogICAgREJHREVWSUQxCj4gKyAgICAgKiAgICBE QkdERVZJRDIKPiArICAgICAqICAgIERCR09TRUNDUgo+ICsgICAgICovCj4gKyAgICBjYXNlIEhT Ul9DUFJFRzMyKERCR0RJRFIpOgo+ICsgICAgewo+ICsgICAgICAgIHVpbnQzMl90IHZhbDsKPiAr Cj4gKyAgICAgICAgLyoKPiArICAgICAgICAgKiBSZWFkLW9ubHkgcmVnaXN0ZXIuIEFjY2Vzc2li bGUgYnkgRUwwIGlmIERCR0RTQ1JleHQuVURDQ2Rpcwo+ICsgICAgICAgICAqIGlzIHNldCB0byAw LCB3aGljaCB3ZSBlbXVsYXRlZCBiZWxvdy4KPiArICAgICAgICAgKi8KPiArICAgICAgICBpZiAo ICFjcDMyLnJlYWQgKQo+ICsgICAgICAgICAgICByZXR1cm4gaW5qZWN0X3VuZGVmX2V4Y2VwdGlv bihyZWdzLCBoc3IpOwo+ICsKPiArICAgICAgICAvKiBJbXBsZW1lbnQgdGhlIG1pbmltdW0gcmVx dWlyZW1lbnRzOgo+ICsgICAgICAgICAqICAtIE51bWJlciBvZiB3YXRjaHBvaW50czogMQo+ICsg ICAgICAgICAqICAtIE51bWJlciBvZiBicmVha3BvaW50czogMgo+ICsgICAgICAgICAqICAtIFZl cnNpb246IEFSTXY3IHY3LjEKPiArICAgICAgICAgKiAgLSBWYXJpYW50IGFuZCBSZXZpc2lvbiBi aXRzIG1hdGNoIE1ESVIKPiArICAgICAgICAgKi8KPiArICAgICAgICB2YWwgPSAoMSA8PCAyNCkg fCAoNSA8PCAxNik7Cj4gKyAgICAgICAgdmFsIHw9ICgoZC0+YXJjaC52cGlkciA+PiAyMCkgJiAw eGYpIHwgKGQtPmFyY2gudnBpZHIgJiAweGYpOwo+ICsgICAgICAgIHNldF91c2VyX3JlZyhyZWdz LCByZWdpZHgsIHZhbCk7Cj4gKwo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgfQo+ICsKPiArICAg IGNhc2UgSFNSX0NQUkVHMzIoREJHRFNDUklOVCk6Cj4gKyAgICAgICAgLyoKPiArICAgICAgICAg KiBSZWFkLW9ubHkgcmVnaXN0ZXIuIEFjY2Vzc2libGUgYnkgRUwwIGlmIERCR0RTQ1JleHQuVURD Q2Rpcwo+ICsgICAgICAgICAqIGlzIHNldCB0byAwLCB3aGljaCB3ZSBlbXVsYXRlZCBiZWxvdy4K PiArICAgICAgICAgKi8KPiArICAgICAgICByZXR1cm4gaGFuZGxlX3JvX3JheihyZWdzLCByZWdp ZHgsIGNwMzIucmVhZCwgaHNyLCAxKTsKPiArCj4gKyAgICBjYXNlIEhTUl9DUFJFRzMyKERCR0RT Q1JFWFQpOgo+ICsgICAgICAgIC8qCj4gKyAgICAgICAgICogSW1wbGVtZW50IGRlYnVnIHN0YXR1 cyBhbmQgY29udHJvbCByZWdpc3RlciBhcyBSQVovV0kuCj4gKyAgICAgICAgICogVGhlIE9TIHdv bid0IHVzZSBIYXJkd2FyZSBkZWJ1ZyBpZiBNREJHZW4gbm90IHNldC4KPiArICAgICAgICAgKi8K PiArICAgICAgICByZXR1cm4gaGFuZGxlX3Jhel93aShyZWdzLCByZWdpZHgsIGNwMzIucmVhZCwg aHNyLCAxKTsKPiArCj4gKyAgICBjYXNlIEhTUl9DUFJFRzMyKERCR1ZDUik6Cj4gKyAgICBjYXNl IEhTUl9DUFJFRzMyKERCR0JWUjApOgo+ICsgICAgY2FzZSBIU1JfQ1BSRUczMihEQkdCQ1IwKToK PiArICAgIGNhc2UgSFNSX0NQUkVHMzIoREJHV1ZSMCk6Cj4gKyAgICBjYXNlIEhTUl9DUFJFRzMy KERCR1dDUjApOgo+ICsgICAgY2FzZSBIU1JfQ1BSRUczMihEQkdCVlIxKToKPiArICAgIGNhc2Ug SFNSX0NQUkVHMzIoREJHQkNSMSk6Cj4gKyAgICAgICAgcmV0dXJuIGhhbmRsZV9yYXpfd2kocmVn cywgcmVnaWR4LCBjcDMyLnJlYWQsIGhzciwgMSk7Cj4gKwo+ICsgICAgLyoKPiArICAgICAqIENQ VFJfRUwyLlRUQQo+ICsgICAgICoKPiArICAgICAqIEFSTXY3IChEREkgMDQwNkMuYik6IEIxLjE0 LjE2Cj4gKyAgICAgKiBBUk12OCAoRERJIDA0ODdBLmQpOiBEMS0xNTA3IFRhYmxlIEQxLTU0Cj4g KyAgICAgKgo+ICsgICAgICogIC0gQWxsIGltcGxlbWVudGVkIHRyYWNlIHJlZ2lzdGVycy4KPiAr ICAgICAqCj4gKyAgICAgKiBNRENSX0VMMi5URFJBCj4gKyAgICAgKgo+ICsgICAgICogQVJNdjcg KERESSAwNDA2Qy5iKTogQjEuMTQuMTUKPiArICAgICAqIEFSTXY4IChEREkgMDQ4N0EuZCk6IEQx LTE1MDggVGFibGUgRDEtNTcKPiArICAgICAqCj4gKyAgICAgKiBVbmhhbmRsZWQ6Cj4gKyAgICAg KiAgICBEQkdEUkFSICgzMi1iaXQgYWNjZXNzZXMpCj4gKyAgICAgKiAgICBEQkdEU0FSICgzMi1i aXQgYWNjZXNzZXMpCj4gKyAgICAgKgo+ICsgICAgICogQW5kIGFsbCBvdGhlciB1bmtub3duIHJl Z2lzdGVycy4KPiArICAgICAqLwo+ICsgICAgZGVmYXVsdDoKPiArICAgICAgICBnZHByaW50ayhY RU5MT0dfRVJSLAo+ICsgICAgICAgICAgICAgICAgICIlcyBwMTQsICVkLCByJWQsIGNyJWQsIGNy JWQsICVkIEAgMHglIlBSSXJlZ2lzdGVyIlxuIiwKPiArICAgICAgICAgICAgICAgICAgY3AzMi5y ZWFkID8gIm1yYyIgOiAibWNyIiwKPiArICAgICAgICAgICAgICAgICAgY3AzMi5vcDEsIGNwMzIu cmVnLCBjcDMyLmNybiwgY3AzMi5jcm0sIGNwMzIub3AyLCByZWdzLT5wYyk7Cj4gKyAgICAgICAg Z2RwcmludGsoWEVOTE9HX0VSUiwgInVuaGFuZGxlZCAzMi1iaXQgY3AxNCBhY2Nlc3MgJSN4XG4i LAo+ICsgICAgICAgICAgICAgICAgIGhzci5iaXRzICYgSFNSX0NQMzJfUkVHU19NQVNLKTsKPiAr ICAgICAgICBpbmplY3RfdW5kZWZfZXhjZXB0aW9uKHJlZ3MsIGhzcik7Cj4gKyAgICAgICAgcmV0 dXJuOwo+ICsgICAgfQo+ICsKPiArICAgIGFkdmFuY2VfcGMocmVncywgaHNyKTsKPiArfQo+ICsK PiArdm9pZCBkb19jcDE0XzY0KHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzLCBjb25zdCB1bmlv biBoc3IgaHNyKQo+ICt7Cj4gKyAgICBjb25zdCBzdHJ1Y3QgaHNyX2NwNjQgY3A2NCA9IGhzci5j cDY0Owo+ICsKPiArICAgIGlmICggIWNoZWNrX2NvbmRpdGlvbmFsX2luc3RyKHJlZ3MsIGhzcikg KQo+ICsgICAgewo+ICsgICAgICAgIGFkdmFuY2VfcGMocmVncywgaHNyKTsKPiArICAgICAgICBy ZXR1cm47Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyoKPiArICAgICAqIENQVFJfRUwyLlRUQQo+ICsg ICAgICoKPiArICAgICAqIEFSTXY3IChEREkgMDQwNkMuYik6IEIxLjE0LjE2Cj4gKyAgICAgKiBB Uk12OCAoRERJIDA0ODdBLmQpOiBEMS0xNTA3IFRhYmxlIEQxLTU0Cj4gKyAgICAgKgo+ICsgICAg ICogIC0gQWxsIGltcGxlbWVudGVkIHRyYWNlIHJlZ2lzdGVycy4KPiArICAgICAqCj4gKyAgICAg KiBNRENSX0VMMi5URFJBCj4gKyAgICAgKgo+ICsgICAgICogQVJNdjcgKERESSAwNDA2Qy5iKTog QjEuMTQuMTUKPiArICAgICAqIEFSTXY4IChEREkgMDQ4N0EuZCk6IEQxLTE1MDggVGFibGUgRDEt NTcKPiArICAgICAqCj4gKyAgICAgKiBVbmhhbmRsZWQ6Cj4gKyAgICAgKiAgICBEQkdEUkFSICg2 NC1iaXQgYWNjZXNzZXMpCj4gKyAgICAgKiAgICBEQkdEU0FSICg2NC1iaXQgYWNjZXNzZXMpCj4g KyAgICAgKgo+ICsgICAgICogQW5kIGFsbCBvdGhlciB1bmtub3duIHJlZ2lzdGVycy4KPiArICAg ICAqLwo+ICsgICAgZ2RwcmludGsoWEVOTE9HX0VSUiwKPiArICAgICAgICAgICAgICIlcyBwMTQs ICVkLCByJWQsIHIlZCwgY3IlZCBAIDB4JSJQUklyZWdpc3RlciJcbiIsCj4gKyAgICAgICAgICAg ICBjcDY0LnJlYWQgPyAibXJyYyIgOiAibWNyciIsCj4gKyAgICAgICAgICAgICBjcDY0Lm9wMSwg Y3A2NC5yZWcxLCBjcDY0LnJlZzIsIGNwNjQuY3JtLCByZWdzLT5wYyk7Cj4gKyAgICBnZHByaW50 ayhYRU5MT0dfRVJSLCAidW5oYW5kbGVkIDY0LWJpdCBDUDE0IGFjY2VzcyAlI3hcbiIsCj4gKyAg ICAgICAgICAgICBoc3IuYml0cyAmIEhTUl9DUDY0X1JFR1NfTUFTSyk7Cj4gKyAgICBpbmplY3Rf dW5kZWZfZXhjZXB0aW9uKHJlZ3MsIGhzcik7Cj4gK30KPiArCj4gK3ZvaWQgZG9fY3AxNF9kYmco c3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MsIGNvbnN0IHVuaW9uIGhzciBoc3IpCj4gK3sKPiAr ICAgIHN0cnVjdCBoc3JfY3A2NCBjcDY0ID0gaHNyLmNwNjQ7Cj4gKwo+ICsgICAgaWYgKCAhY2hl Y2tfY29uZGl0aW9uYWxfaW5zdHIocmVncywgaHNyKSApCj4gKyAgICB7Cj4gKyAgICAgICAgYWR2 YW5jZV9wYyhyZWdzLCBoc3IpOwo+ICsgICAgICAgIHJldHVybjsKPiArICAgIH0KPiArCj4gKyAg ICAvKgo+ICsgICAgICogTURDUl9FTDIuVERPU0EKPiArICAgICAqCj4gKyAgICAgKiBBUk12NyAo RERJIDA0MDZDLmIpOiBCMS4xNC4xNQo+ICsgICAgICogQVJNdjggKERESSAwNDg3QS5kKTogRDEt MTUwOSBUYWJsZSBEMS01OAo+ICsgICAgICoKPiArICAgICAqIFVuaGFuZGxlZDoKPiArICAgICAq ICAgIERCR0RUUlRYaW50Cj4gKyAgICAgKiAgICBEQkdEVFJSWGludAo+ICsgICAgICoKPiArICAg ICAqIEFuZCBhbGwgb3RoZXIgdW5rbm93biByZWdpc3RlcnMuCj4gKyAgICAgKi8KPiArICAgIGdk cHJpbnRrKFhFTkxPR19FUlIsCj4gKyAgICAgICAgICAgICAiJXMgcDE0LCAlZCwgciVkLCByJWQs IGNyJWQgQCAweCUiUFJJcmVnaXN0ZXIiXG4iLAo+ICsgICAgICAgICAgICAgY3A2NC5yZWFkID8g Im1ycmMiIDogIm1jcnIiLAo+ICsgICAgICAgICAgICAgY3A2NC5vcDEsIGNwNjQucmVnMSwgY3A2 NC5yZWcyLCBjcDY0LmNybSwgcmVncy0+cGMpOwo+ICsgICAgZ2RwcmludGsoWEVOTE9HX0VSUiwg InVuaGFuZGxlZCA2NC1iaXQgQ1AxNCBEQkcgYWNjZXNzICUjeFxuIiwKPiArICAgICAgICAgICAg IGhzci5iaXRzICYgSFNSX0NQNjRfUkVHU19NQVNLKTsKPiArCj4gKyAgICBpbmplY3RfdW5kZWZf ZXhjZXB0aW9uKHJlZ3MsIGhzcik7Cj4gK30KPiArCj4gK3ZvaWQgZG9fY3Aoc3RydWN0IGNwdV91 c2VyX3JlZ3MgKnJlZ3MsIGNvbnN0IHVuaW9uIGhzciBoc3IpCj4gK3sKPiArICAgIGNvbnN0IHN0 cnVjdCBoc3JfY3AgY3AgPSBoc3IuY3A7Cj4gKwo+ICsgICAgaWYgKCAhY2hlY2tfY29uZGl0aW9u YWxfaW5zdHIocmVncywgaHNyKSApCj4gKyAgICB7Cj4gKyAgICAgICAgYWR2YW5jZV9wYyhyZWdz LCBoc3IpOwo+ICsgICAgICAgIHJldHVybjsKPiArICAgIH0KPiArCj4gKyAgICBBU1NFUlQoIWNw LnRhcyk7IC8qIFdlIGRvbid0IHRyYXAgU0lNRCBpbnN0cnVjdGlvbiAqLwo+ICsgICAgZ2Rwcmlu dGsoWEVOTE9HX0VSUiwgInVuaGFuZGxlZCBDUCVkIGFjY2Vzc1xuIiwgY3AuY29wcm9jKTsKPiAr ICAgIGluamVjdF91bmRlZl9leGNlcHRpb24ocmVncywgaHNyKTsKPiArfQo+ICsKPiArLyoKPiAr ICogTG9jYWwgdmFyaWFibGVzOgo+ICsgKiBtb2RlOiBDCj4gKyAqIGMtZmlsZS1zdHlsZTogIkJT RCIKPiArICogYy1iYXNpYy1vZmZzZXQ6IDQKPiArICogaW5kZW50LXRhYnMtbW9kZTogbmlsCj4g KyAqIEVuZDoKPiArICovCj4gZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2FzbS1hcm0vdHJhcHMu aCBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vdHJhcHMuaAo+IGluZGV4IDZkOTlkMjI4ZTguLjUzZDM4 NmQ4ZTUgMTAwNjQ0Cj4gLS0tIGEveGVuL2luY2x1ZGUvYXNtLWFybS90cmFwcy5oCj4gKysrIGIv eGVuL2luY2x1ZGUvYXNtLWFybS90cmFwcy5oCj4gQEAgLTI0LDYgKzI0LDE0IEBAIHZvaWQgaGFu ZGxlX3dvX3dpKHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzLCBpbnQgcmVnaWR4LCBib29sIHJl YWQsCj4gIHZvaWQgaGFuZGxlX3JvX3JheihzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncywgaW50 IHJlZ2lkeCwgYm9vbCByZWFkLAo+ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5pb24gaHNy IGhzciwgaW50IG1pbl9lbCk7Cj4gIAo+ICsvKiBDby1wcm9jZXNzb3IgcmVnaXN0ZXJzIGVtdWxh dGlvbiAoc2VlIGFyY2gvYXJtL3ZjcHJlZy5jKS4gKi8KPiArdm9pZCBkb19jcDE1XzMyKHN0cnVj dCBjcHVfdXNlcl9yZWdzICpyZWdzLCBjb25zdCB1bmlvbiBoc3IgaHNyKTsKPiArdm9pZCBkb19j cDE1XzY0KHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzLCBjb25zdCB1bmlvbiBoc3IgaHNyKTsK PiArdm9pZCBkb19jcDE0XzMyKHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzLCBjb25zdCB1bmlv biBoc3IgaHNyKTsKPiArdm9pZCBkb19jcDE0XzY0KHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdz LCBjb25zdCB1bmlvbiBoc3IgaHNyKTsKPiArdm9pZCBkb19jcDE0X2RiZyhzdHJ1Y3QgY3B1X3Vz ZXJfcmVncyAqcmVncywgY29uc3QgdW5pb24gaHNyIGhzcik7Cj4gK3ZvaWQgZG9fY3Aoc3RydWN0 IGNwdV91c2VyX3JlZ3MgKnJlZ3MsIGNvbnN0IHVuaW9uIGhzciBoc3IpOwo+ICsKPiAgI2VuZGlm IC8qIF9fQVNNX0FSTV9UUkFQU19fICovCj4gIC8qCj4gICAqIExvY2FsIHZhcmlhYmxlczoKPiAt LSAKPiAyLjExLjAKPiAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0 cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=