From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christopher Clark Subject: Re: [PATCH v3 07/15] argo: implement the register op Date: Thu, 10 Jan 2019 22:29:36 -0800 Message-ID: References: <1546846968-7372-1-git-send-email-christopher.w.clark@gmail.com> <1546846968-7372-8-git-send-email-christopher.w.clark@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1ghqKH-0004cV-5h for xen-devel@lists.xenproject.org; Fri, 11 Jan 2019 06:29:53 +0000 Received: by mail-lj1-x243.google.com with SMTP id l15-v6so11901208lja.9 for ; Thu, 10 Jan 2019 22:29:50 -0800 (PST) In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: =?UTF-8?Q?Roger_Pau_Monn=C3=A9?= Cc: Stefano Stabellini , Wei Liu , Ross Philipson , Konrad Rzeszutek Wilk , George Dunlap , Andrew Cooper , Jason Andryuk , Ian Jackson , Julien Grall , Tim Deegan , Daniel Smith , Rich Persaud , Paul Durrant , Jan Beulich , xen-devel , James McKenzie , Eric Chanudet , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org T24gVGh1LCBKYW4gMTAsIDIwMTkgYXQgMzoyNSBBTSBSb2dlciBQYXUgTW9ubsOpIDxyb3lnZXJA Z21haWwuY29tPiB3cm90ZToKPgo+ICBPbiBNb24sIEphbiA3LCAyMDE5IGF0IDg6NDQgQU0gQ2hy aXN0b3BoZXIgQ2xhcmsKPiA8Y2hyaXN0b3BoZXIudy5jbGFya0BnbWFpbC5jb20+IHdyb3RlOgo+ ID4KPiA+IFRoZSByZWdpc3RlciBvcCBpcyB1c2VkIGJ5IGEgZG9tYWluIHRvIHJlZ2lzdGVyIGEg cmVnaW9uIG9mIG1lbW9yeSBmb3IKPiA+IHJlY2VpdmluZyBtZXNzYWdlcyBmcm9tIGVpdGhlciBh IHNwZWNpZmllZCBvdGhlciBkb21haW4sIG9yLCBpZiBzcGVjaWZ5aW5nIGEKPiA+IHdpbGRjYXJk LCBhbnkgZG9tYWluLgo+ID4KPiA+IGRpZmYgLS1naXQgYS9kb2NzL21pc2MveGVuLWNvbW1hbmQt bGluZS5wYW5kb2MgYi9kb2NzL21pc2MveGVuLWNvbW1hbmQtbGluZS5wYW5kb2MKPiA+IGluZGV4 IGFlYTEzZWIuLjY4ZDQ0MTUgMTAwNjQ0Cj4gPiAtLS0gYS9kb2NzL21pc2MveGVuLWNvbW1hbmQt bGluZS5wYW5kb2MKPiA+ICsrKyBiL2RvY3MvbWlzYy94ZW4tY29tbWFuZC1saW5lLnBhbmRvYwo+ ID4gQEAgLTE5Myw2ICsxOTMsMjEgQEAgVGhpcyBhbGxvd3MgZG9tYWlucyBhY2Nlc3MgdG8gdGhl IEFyZ28gaHlwZXJjYWxsLCB3aGljaCBzdXBwb3J0cyByZWdpc3RyYXRpb24KPiA+ICBvZiBtZW1v cnkgcmluZ3Mgd2l0aCB0aGUgaHlwZXJ2aXNvciB0byByZWNlaXZlIG1lc3NhZ2VzLCBzZW5kaW5n IG1lc3NhZ2VzIHRvCj4gPiAgb3RoZXIgZG9tYWlucyBieSBoeXBlcmNhbGwgYW5kIHF1ZXJ5aW5n IHRoZSByaW5nIHN0YXR1cyBvZiBvdGhlciBkb21haW5zLgo+ID4KPiA+ICsjIyMgYXJnby1tYWMK PiA+ICs+IGA9IHBlcm1pc3NpdmUgfCBlbmZvcmNpbmdgCj4KPiBXaHkgbm90IGNhbGwgdGhpcyBh cmdvLW1hYy1wZXJtaXNzaXZlIGFuZCBtYWtlIGl0IGEgYm9vbGVhbj8gRGVmYXVsdAo+IHdvdWxk IGJlICdmYWxzZScgYW5kIHRoYXQgd291bGQgaW1wbHkgZW5mb3JjaW5nLiBUaGlzIHdvdWxkIGdl dCByaWQgb2YKPiBwYXJzZV9vcHRfYXJnb19tYWMgc2luY2UgeW91IGNvdWxkIHVzZSB0aGUgZGVm YXVsdCBib29sZWFuIHBhcnNlci4KClllcywgdGhhdCBtYWtlcyBzZW5zZSwgdGhhbmtzIC0tIGRv bmUKCj4gPiArc3RhdGljIGludAo+ID4gK3JpbmdfbWFwX3BhZ2Uoc3RydWN0IGFyZ29fcmluZ19p bmZvICpyaW5nX2luZm8sIHVuc2lnbmVkIGludCBpLCB2b2lkICoqb3V0X3B0cikKPiA+ICt7Cj4g PiArICAgIGlmICggaSA+PSByaW5nX2luZm8tPm5tZm5zICkKPiA+ICsgICAgewo+ID4gKyAgICAg ICAgZ3ByaW50ayhYRU5MT0dfRVJSLAo+ID4gKyAgICAgICAgICAgICAgICJhcmdvOiByaW5nICh2 bSV1OiV4IHZtJWQpICVwIGF0dGVtcHRlZCB0byBtYXAgcGFnZSAgJXUgb2YgJXVcbiIsCj4gPiAr ICAgICAgICAgICAgICAgIHJpbmdfaW5mby0+aWQuZG9tYWluX2lkLCByaW5nX2luZm8tPmlkLnBv cnQsCj4gPiArICAgICAgICAgICAgICAgIHJpbmdfaW5mby0+aWQucGFydG5lcl9pZCwgcmluZ19p bmZvLCBpLCByaW5nX2luZm8tPm5tZm5zKTsKPiA+ICsgICAgICAgIHJldHVybiAtRU5PTUVNOwo+ ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGlmICggIXJpbmdfaW5mby0+bWZucyB8fCAhcmluZ19p bmZvLT5tZm5fbWFwcGluZykKPiA+ICsgICAgewo+ID4gKyAgICAgICAgQVNTRVJUX1VOUkVBQ0hB QkxFKCk7Cj4gPiArICAgICAgICByaW5nX2luZm8tPmxlbiA9IDA7Cj4gPiArICAgICAgICByZXR1 cm4gLUVOT01FTTsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBpZiAoICFyaW5nX2luZm8tPm1m bl9tYXBwaW5nW2ldICkKPiA+ICsgICAgewo+ID4gKyAgICAgICAgLyoKPiA+ICsgICAgICAgICAq IFRPRE86Cj4gPiArICAgICAgICAgKiBUaGUgZmlyc3QgcGFnZSBvZiB0aGUgcmluZyBjb250YWlu cyB0aGUgcmluZyBpbmRpY2VzLCBzbyBib3RoIHJlYWQKPiA+ICsgICAgICAgICAqIGFuZCB3cml0 ZSBhY2Nlc3MgdG8gdGhlIHBhZ2UgaXMgcmVxdWlyZWQgYnkgdGhlIGh5cGVydmlzb3IsIGJ1dAo+ ID4gKyAgICAgICAgICogcmVhZC1hY2Nlc3MgaXMgbm90IG5lZWRlZCBmb3IgdGhpcyBtYXBwaW5n IGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZQo+ID4gKyAgICAgICAgICogcmluZy4KPiA+ICsgICAg ICAgICAqIFNpbmNlIHRoaXMgbWFwcGluZyB3aWxsIHJlbWFpbiByZXNpZGVudCBpbiBYZW4ncyBh ZGRyZXNzIHNwYWNlIGZvcgo+ID4gKyAgICAgICAgICogdGhlIGxpZmV0aW1lIG9mIHRoZSByaW5n LCBhbmQgZm9sbG93aW5nIHRoZSBwcmluY2lwbGUgb2YgbGVhc3QKPiA+ICsgICAgICAgICAqIHBy aXZpbGVnZSwgaXQgY291bGQgYmUgcHJlZmVyYWJsZSB0bzoKPiA+ICsgICAgICAgICAqICAjIGFk ZCBhIFhTTSBjaGVjayB0byBkZXRlcm1pbmUgd2hhdCBwb2xpY3kgaXMgd2FudGVkIGhlcmUKPiA+ ICsgICAgICAgICAqICAjIGRlcGVuZGluZyBvbiB0aGUgWFNNIHF1ZXJ5LCBvcHRpb25hbGx5IGNy ZWF0ZSB0aGlzIG1hcHBpbmcgYXMKPiA+ICsgICAgICAgICAqICAgIF93cml0ZS1vbmx5XyBvbiBw bGF0Zm9ybXMgdGhhdCBjYW4gc3VwcG9ydCBpdC4KPiA+ICsgICAgICAgICAqICAgIChlZy4gSW50 ZWwgRVBUL0FNRCBOUFQpLgo+Cj4gV2h5IGRvIEludGVsIEVQVCBvciBBTUQgTlBUIG1hdHRlciBo ZXJlPwoKSSB0aGluayAodGhvdWdoIGNvdWxkIGJlIHdyb25nIGFuZCBhbSBvcGVuIHRvIGNvcnJl Y3Rpb24gaGVyZSkgdGhhdApFUFQgYW5kIE5QVCBlbmFibGUgdGhlIGNvbnN0cnVjdGlvbiBvZiB3 cml0ZS1vbmx5IChpZSBub3QgcmVhZGFibGUpCm1lbW9yeSBtYXBwaW5ncy4gU3RhbmRhcmQgcGFn ZSB0YWJsZXMgY2FuJ3QgZG8gdGhhdDogd2l0aCB0aG9zZSwKaWYgaXQncyB3cml0YWJsZSwgaXQn cyBhbHNvIHJlYWRhYmxlLgoKPiBZb3UgYXJlIG1hcHBpbmcgdGhlIHBhZ2UgdG8gWGVuIGFkZHJl c3Mgc3BhY2UsIHdoaWNoIGRvZXNuJ3QgdXNlCj4gZWl0aGVyIEVQVCBvciBOUFQuIFdyaXRhYmxl IG9yIHJlYWQtb25seSBtYXBwaW5ncyB3b3VsZCBiZSBjcmVhdGVkIGJ5Cj4gc2V0dGluZyB0aGUg cmlnaHQgYml0IGluIHRoZSBYZW4gcGFnZSB0YWJsZXMuCgpvay4gSSd2ZSBkcm9wcGVkIHRoZSBj b21tZW50LgoKPgo+ID4gKyAgICAgICAgICovCj4gPiArICAgICAgICByaW5nX2luZm8tPm1mbl9t YXBwaW5nW2ldID0gbWFwX2RvbWFpbl9wYWdlX2dsb2JhbChyaW5nX2luZm8tPm1mbnNbaV0pOwo+ ID4gKwo+Cj4gTm8gbmVlZCBmb3IgdGhlIG5ld2xpbmUuCgphY2suCgo+ID4gK3N0YXRpYyB2b2lk Cj4gPiArdXBkYXRlX3R4X3B0cihzdHJ1Y3QgYXJnb19yaW5nX2luZm8gKnJpbmdfaW5mbywgdWlu dDMyX3QgdHhfcHRyKQo+ID4gK3sKPiA+ICsgICAgdm9pZCAqZHN0Owo+ID4gKyAgICB1aW50MzJf dCAqcDsKPiA+ICsKPiA+ICsgICAgQVNTRVJUKHJpbmdfaW5mby0+bWZuX21hcHBpbmdbMF0pOwo+ ID4gKwo+ID4gKyAgICByaW5nX2luZm8tPnR4X3B0ciA9IHR4X3B0cjsKPiA+ICsKPiA+ICsgICAg ZHN0ID0gcmluZ19pbmZvLT5tZm5fbWFwcGluZ1swXTsKPiA+ICsgICAgcCA9IGRzdCArIG9mZnNl dG9mKHhlbl9hcmdvX3JpbmdfdCwgdHhfcHRyKTsKPgo+IEhtLCB3b3VsZG4ndCBpdCBiZSBlYXNp ZXIgdG8gY2FzdCBwYWdlIDAgdG8gdGhlIGxheW91dCBvZiB0aGUgcmluZyBzbwo+IHRoYXQgeW91 IGRvbid0IG5lZWQgdG8gdXNlIHBvaW50ZXIgYXJpdGhtZXRpYyB0byBnZXQgdGhlIGZpZWxkcz8g SWU6Cj4gbWFrZSBkc3QgYmUgb2YgdHlwZSB4ZW5fYXJnb19yaW5nX3QuCgpZZXMsIGdvb2QgcG9p bnQgLSBhbmQgdGhhdCdzIHdoYXQncyBhbHJlYWR5IGRvbmUgZWxzZXdoZXJlIHdpdGggdGhlCnJ4 X3B0ciwgc28gdGhhdCBtYWtlcyB0aGUgY29kZSBtb3JlIGNvbnNpc3RlbnQuIERvbmUuCgo+ID4g K3N0YXRpYyBpbnQKPiA+ICtmaW5kX3JpbmdfbWZucyhzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3Qg YXJnb19yaW5nX2luZm8gKnJpbmdfaW5mbywKPiA+ICsgICAgICAgICAgICAgICB1aW50MzJfdCBu cGFnZSwKPiA+ICsgICAgICAgICAgICAgICBYRU5fR1VFU1RfSEFORExFX1BBUkFNKHhlbl9hcmdv X3BhZ2VfZGVzY3JfdCkgcGdfZGVzY3JfaG5kLAo+ID4gKyAgICAgICAgICAgICAgIHVpbnQzMl90 IGxlbikKPiA+ICt7Cj4gPiArICAgIHVuc2lnbmVkIGludCBpOwo+ID4gKyAgICBpbnQgcmV0ID0g MDsKPiA+ICsgICAgbWZuX3QgKm1mbnM7Cj4gPiArICAgIHVpbnQ4X3QgKiptZm5fbWFwcGluZzsK PiA+ICsKPiA+ICsgICAgLyoKPiA+ICsgICAgICogZmlyc3QgYm91bmRzIGNoZWNrIG9uIG5wYWdl IGhlcmUgYWxzbyBzZXJ2ZXMgYXMgYW4gb3ZlcmZsb3cgY2hlY2sKPiA+ICsgICAgICogYmVmb3Jl IGxlZnQgc2hpZnRpbmcgaXQKPiA+ICsgICAgICovCj4gPiArICAgIGlmICggKHVubGlrZWx5KG5w YWdlID4gKFhFTl9BUkdPX01BWF9SSU5HX1NJWkUgPj4gUEFHRV9TSElGVCkpKSB8fAo+ID4gKyAg ICAgICAgICgobnBhZ2UgPDwgUEFHRV9TSElGVCkgPCBsZW4pICkKPiA+ICsgICAgICAgIHJldHVy biAtRUlOVkFMOwo+ID4gKwo+ID4gKyAgICBpZiAoIHJpbmdfaW5mby0+bWZucyApCj4gPiArICAg IHsKPiA+ICsgICAgICAgIC8qIFJpbmcgYWxyZWFkeSBleGlzdGVkOiBkcm9wIHRoZSBwcmV2aW91 cyBtYXBwaW5nLiAqLwo+ID4gKyAgICAgICAgZ3ByaW50ayhYRU5MT0dfSU5GTywKPiA+ICsgICAg ICAgICAiYXJnbzogdm0ldSByZS1yZWdpc3RlciBleGlzdGluZyByaW5nICh2bSV1OiV4IHZtJWQp IGNsZWFycyBtYXBwaW5nXG4iLAo+ID4gKyAgICAgICAgICAgICAgICBkLT5kb21haW5faWQsIHJp bmdfaW5mby0+aWQuZG9tYWluX2lkLAo+ID4gKyAgICAgICAgICAgICAgICByaW5nX2luZm8tPmlk LnBvcnQsIHJpbmdfaW5mby0+aWQucGFydG5lcl9pZCk7Cj4gPiArCj4gPiArICAgICAgICByaW5n X3JlbW92ZV9tZm5zKGQsIHJpbmdfaW5mbyk7Cj4gPiArICAgICAgICBBU1NFUlQoIXJpbmdfaW5m by0+bWZucyk7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgbWZucyA9IHhtYWxsb2NfYXJyYXko bWZuX3QsIG5wYWdlKTsKPiA+ICsgICAgaWYgKCAhbWZucyApCj4gPiArICAgICAgICByZXR1cm4g LUVOT01FTTsKPiA+ICsKPiA+ICsgICAgZm9yICggaSA9IDA7IGkgPCBucGFnZTsgaSsrICkKPiA+ ICsgICAgICAgIG1mbnNbaV0gPSBJTlZBTElEX01GTjsKPiA+ICsKPiA+ICsgICAgbWZuX21hcHBp bmcgPSB4emFsbG9jX2FycmF5KHVpbnQ4X3QgKiwgbnBhZ2UpOwo+ID4gKyAgICBpZiAoICFtZm5f bWFwcGluZyApCj4gPiArICAgIHsKPiA+ICsgICAgICAgIHhmcmVlKG1mbnMpOwo+ID4gKyAgICAg ICAgcmV0dXJuIC1FTk9NRU07Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgcmluZ19pbmZvLT5u cGFnZSA9IG5wYWdlOwo+ID4gKyAgICByaW5nX2luZm8tPm1mbnMgPSBtZm5zOwo+ID4gKyAgICBy aW5nX2luZm8tPm1mbl9tYXBwaW5nID0gbWZuX21hcHBpbmc7Cj4gPiArCj4gPiArICAgIEFTU0VS VChyaW5nX2luZm8tPm5wYWdlID09IG5wYWdlKTsKPiA+ICsKPiA+ICsgICAgaWYgKCByaW5nX2lu Zm8tPm5tZm5zID09IHJpbmdfaW5mby0+bnBhZ2UgKQo+ID4gKyAgICAgICAgcmV0dXJuIDA7Cj4g PiArCj4gPiArICAgIGZvciAoIGkgPSByaW5nX2luZm8tPm5tZm5zOyBpIDwgcmluZ19pbmZvLT5u cGFnZTsgaSsrICkKPgo+IFRoaXMgbG9vcCBzZWVtcyB0byBhc3N1bWUgdGhhdCB0aGVyZSBjYW4g YmUgcGFnZXMgYWxyZWFkeSBhZGRlZCB0byB0aGUKPiByaW5nLCBidXQgSUlSQyB5b3Ugc2FpZCB0 aGF0IHJlZGltZW5zaW9uaW5nIG9mIHRoZSByaW5nIHdhcyByZW1vdmVkIGluCj4gdGhpcyB2ZXJz aW9uPwoKVGhhdCdzIGNvcnJlY3QgLSBpdCdzIGN1cnJlbnRseSByZWplY3RlZC4KCj4gSSB0aGlu ayBmb3IgYW4gaW5pdGlhbCB2ZXJzaW9uIGl0IHdvdWxkIGJlIGVhc2llciB0byBkb24ndCBhbGxv dwo+IHJlZGltZW5zaW9uaW5nIG9mIGFjdGl2ZSByaW5ncywgYW5kIGp1c3QgYWxsb3cgdGVhcmRv d24gYW5kCj4gcmUtaW5pdGlhbGl6YXRpb24gYXMgdGhlIHdheSB0byByZWRpbWVuc2lvbiBhIHJp bmcuCgphY2suIEknbGwgbG9vayBpbnRvIGhvdyBpdCBhZmZlY3RzIHRoaXMgZnVuY3Rpb24gYW5k IHNpbXBsaWZ5aW5nIGl0LgoKCj4KPiA+ICsgICAgewo+ID4gKyAgICAgICAgeGVuX2FyZ29fcGFn ZV9kZXNjcl90IHBnX2Rlc2NyOwo+ID4gKyAgICAgICAgZ2ZuX3QgZ2ZuOwo+ID4gKyAgICAgICAg bWZuX3QgbWZuOwo+ID4gKwo+ID4gKyAgICAgICAgcmV0ID0gX19jb3B5X2Zyb21fZ3Vlc3Rfb2Zm c2V0KCZwZ19kZXNjciwgcGdfZGVzY3JfaG5kLCBpLCAxKSA/Cj4gPiArICAgICAgICAgICAgICAg IC1FRkFVTFQgOiAwOwo+ID4gKyAgICAgICAgaWYgKCByZXQgKQo+ID4gKyAgICAgICAgICAgIGJy ZWFrOwo+ID4gKwo+ID4gKyAgICAgICAgLyogSW1wbGVtZW50YXRpb24gY3VycmVudGx5IG9ubHkg c3VwcG9ydHMgaGFuZGxpbmcgNEsgcGFnZXMgKi8KPiA+ICsgICAgICAgIGlmICggKHBnX2Rlc2Ny ICYgWEVOX0FSR09fUEFHRV9ERVNDUl9TSVpFX01BU0spICE9Cj4gPiArICAgICAgICAgICAgICAg IFhFTl9BUkdPX1BBR0VfREVTQ1JfU0laRV80SyApCj4gPiArICAgICAgICB7Cj4gPiArICAgICAg ICAgICAgcmV0ID0gLUVJTlZBTDsKPiA+ICsgICAgICAgICAgICBicmVhazsKPiA+ICsgICAgICAg IH0KPiA+ICsgICAgICAgIGdmbiA9IF9nZm4ocGdfZGVzY3IgPj4gUEFHRV9TSElGVCk7Cj4gPiAr Cj4gPiArICAgICAgICByZXQgPSBmaW5kX3JpbmdfbWZuKGQsIGdmbiwgJm1mbik7Cj4gPiArICAg ICAgICBpZiAoIHJldCApCj4gPiArICAgICAgICB7Cj4gPiArICAgICAgICAgICAgZ3ByaW50ayhY RU5MT0dfRVJSLAo+ID4gKyAgICAgICAgICAgICAgICJhcmdvOiB2bSV1OiBpbnZhbGlkIGdmbiAl IlBSSV9nZm4iIHI6KHZtJXU6JXggdm0lZCkgJXAgJWQvJWRcbiIsCj4gPiArICAgICAgICAgICAg ICAgICAgICBkLT5kb21haW5faWQsIGdmbl94KGdmbiksIHJpbmdfaW5mby0+aWQuZG9tYWluX2lk LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgcmluZ19pbmZvLT5pZC5wb3J0LCByaW5nX2luZm8t PmlkLnBhcnRuZXJfaWQsCj4gPiArICAgICAgICAgICAgICAgICAgICByaW5nX2luZm8sIGksIHJp bmdfaW5mby0+bnBhZ2UpOwo+ID4gKyAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICAgfQo+ ID4gKwo+ID4gKyAgICAgICAgcmluZ19pbmZvLT5tZm5zW2ldID0gbWZuOwo+ID4gKwo+ID4gKyAg ICAgICAgYXJnb19kcHJpbnRrKCIlZDogJSJQUklfZ2ZuIiAtPiAlIlBSSV9tZm4iXG4iLAo+ID4g KyAgICAgICAgICAgICAgICAgICAgIGksIGdmbl94KGdmbiksIG1mbl94KHJpbmdfaW5mby0+bWZu c1tpXSkpOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIHJpbmdfaW5mby0+bm1mbnMgPSBpOwo+ ID4gKwo+ID4gKyAgICBpZiAoIHJldCApCj4gPiArICAgICAgICByaW5nX3JlbW92ZV9tZm5zKGQs IHJpbmdfaW5mbyk7Cj4gPiArICAgIGVsc2UKPiA+ICsgICAgewo+ID4gKyAgICAgICAgQVNTRVJU KHJpbmdfaW5mby0+bm1mbnMgPT0gcmluZ19pbmZvLT5ucGFnZSk7Cj4gPiArCj4gPiArICAgICAg ICBncHJpbnRrKFhFTkxPR19ERUJVRywKPiA+ICsgICAgICAgICJhcmdvOiB2bSV1IHJpbmcgKHZt JXU6JXggdm0lZCkgJXAgbWZuX21hcHBpbmcgJXAgbnBhZ2UgJWQgbm1mbnMgJWRcbiIsCj4gPiAr ICAgICAgICAgICAgICAgIGQtPmRvbWFpbl9pZCwgcmluZ19pbmZvLT5pZC5kb21haW5faWQsCj4g PiArICAgICAgICAgICAgICAgIHJpbmdfaW5mby0+aWQucG9ydCwgcmluZ19pbmZvLT5pZC5wYXJ0 bmVyX2lkLCByaW5nX2luZm8sCj4gPiArICAgICAgICAgICAgICAgIHJpbmdfaW5mby0+bWZuX21h cHBpbmcsIHJpbmdfaW5mby0+bnBhZ2UsIHJpbmdfaW5mby0+bm1mbnMpOwo+ID4gKyAgICB9Cj4g PiArCj4gPiArICAgIHJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBzdHJ1Y3Qg YXJnb19yaW5nX2luZm8gKgo+ID4gK3JpbmdfZmluZF9pbmZvKGNvbnN0IHN0cnVjdCBkb21haW4g KmQsIGNvbnN0IHN0cnVjdCBhcmdvX3JpbmdfaWQgKmlkKQo+ID4gK3sKPiA+ICsgICAgdW5zaWdu ZWQgaW50IHJpbmdfaGFzaF9pbmRleDsKPiA+ICsgICAgc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7 Cj4gPiArICAgIHN0cnVjdCBhcmdvX3JpbmdfaW5mbyAqcmluZ19pbmZvOwo+ID4gKwo+ID4gKyAg ICBBU1NFUlQocndfaXNfbG9ja2VkKCZkLT5hcmdvLT5sb2NrKSk7Cj4gPiArCj4gPiArICAgIHJp bmdfaGFzaF9pbmRleCA9IGhhc2hfaW5kZXgoaWQpOwo+ID4gKwo+ID4gKyAgICBhcmdvX2Rwcmlu dGsoImQtPmFyZ289JXAsIGQtPmFyZ28tPnJpbmdfaGFzaFsldV09JXAgaWQ9JXBcbiIsCj4gPiAr ICAgICAgICAgICAgICAgICBkLT5hcmdvLCByaW5nX2hhc2hfaW5kZXgsCj4gPiArICAgICAgICAg ICAgICAgICBkLT5hcmdvLT5yaW5nX2hhc2hbcmluZ19oYXNoX2luZGV4XS5maXJzdCwgaWQpOwo+ ID4gKyAgICBhcmdvX2RwcmludGsoImlkLnBvcnQ9JXggaWQuZG9tYWluPXZtJXUgaWQucGFydG5l cl9pZD12bSVkXG4iLAo+ID4gKyAgICAgICAgICAgICAgICAgaWQtPnBvcnQsIGlkLT5kb21haW5f aWQsIGlkLT5wYXJ0bmVyX2lkKTsKPiA+ICsKPiA+ICsgICAgaGxpc3RfZm9yX2VhY2hfZW50cnko cmluZ19pbmZvLCBub2RlLCAmZC0+YXJnby0+cmluZ19oYXNoW3JpbmdfaGFzaF9pbmRleF0sCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUpCj4gPiArICAgIHsKPiA+ICsgICAgICAg IHN0cnVjdCBhcmdvX3JpbmdfaWQgKmNtcGlkID0gJnJpbmdfaW5mby0+aWQ7Cj4KPiBjb25zdD8K CnllcCwgdGhhbmtzLCBkb25lLgoKPgo+ID4gKwo+ID4gKyAgICAgICAgaWYgKCBjbXBpZC0+cG9y dCA9PSBpZC0+cG9ydCAmJgo+ID4gKyAgICAgICAgICAgICBjbXBpZC0+ZG9tYWluX2lkID09IGlk LT5kb21haW5faWQgJiYKPiA+ICsgICAgICAgICAgICAgY21waWQtPnBhcnRuZXJfaWQgPT0gaWQt PnBhcnRuZXJfaWQgKQo+ID4gKyAgICAgICAgewo+ID4gKyAgICAgICAgICAgIGFyZ29fZHByaW50 aygicmluZ19pbmZvPSVwXG4iLCByaW5nX2luZm8pOwo+ID4gKyAgICAgICAgICAgIHJldHVybiBy aW5nX2luZm87Cj4gPiArICAgICAgICB9Cj4gPiArICAgIH0KPiA+ICsgICAgYXJnb19kcHJpbnRr KCJubyByaW5nX2luZm8gZm91bmRcbiIpOwo+ID4gKwo+ID4gKyAgICByZXR1cm4gTlVMTDsKPiA+ ICt9Cj4gPiArCj4gPiArc3RhdGljIGxvbmcKPiA+ICtyZWdpc3Rlcl9yaW5nKHN0cnVjdCBkb21h aW4gKmN1cnJkLAo+Cj4gSWYgdGhpcyBpcyBpbmRlZWQgdGhlIGN1cnJlbnQgZG9tYWluIChhcyB0 aGUgbmFtZSBzdWdnZXN0cyksIHdoeSBkbwo+IHlvdSBuZWVkIHRvIHBhc3MgaXQgYXJvdW5kPyBP ciBlbHNlIGp1c3QgbmFtZSB0aGUgcGFyYW1ldGVyIGQuCgpBZnRlciB0aGUgbGF0ZXIgaW4tdGhy ZWFkIGRpc2N1c3Npb24gYmV0d2VlbiB5b3UgYW5kIEphbiwgSSd2ZSBsZWZ0CnRoZSBhcmd1bWVu dCBuYW1lICdjdXJyZCcgYnV0IGFkZGVkIHRoZSBBU1NFUlQgcmVjb21tZW5kZWQgYnkgSmFuLAp0 aGF0IGN1cnJkIG1hdGNoZXMgZG9tYWluLT5jdXJyZW50LgoKSSd2ZSBkb25lIHRoZSBzYW1lIGlu IHRoZSBvdGhlciBmdW5jdGlvbnMgKGFjcm9zcyB0aGUgc2VyaWVzKSB0aGF0CnRha2UgY3VycmQg YXMgYW4gYXJndW1lbnQsIGV4Y2VwdCBmb3Igbm90aWZ5X2NoZWNrX3BlbmRpbmcgd2hlcmUgSSd2 ZQpqdXN0IHJlbmFtZWQgdGhlIGFyZ3VtZW50IHRvICdkJzsgdGhlcmUncyBubyByZWFzb24gaW4g dGhhdCBmdW5jdGlvbgp0aGF0IGl0IG5lZWRzIHRvIGJlIGhhbmRsaW5nIHRoZSBjdXJyZW50IGRv bWFpbi4KCj4KPiA+ICsgICAgICAgICAgICAgIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oeGVuX2Fy Z29fcmVnaXN0ZXJfcmluZ190KSByZWdfaG5kLAo+ID4gKyAgICAgICAgICAgICAgWEVOX0dVRVNU X0hBTkRMRV9QQVJBTSh4ZW5fYXJnb19wYWdlX2Rlc2NyX3QpIHBnX2Rlc2NyX2huZCwKPiA+ICsg ICAgICAgICAgICAgIHVpbnQzMl90IG5wYWdlLCBib29sIGZhaWxfZXhpc3QpCj4gPiArewo+ID4g KyAgICB4ZW5fYXJnb19yZWdpc3Rlcl9yaW5nX3QgcmVnOwo+ID4gKyAgICBzdHJ1Y3QgYXJnb19y aW5nX2lkIHJpbmdfaWQ7Cj4gPiArICAgIHZvaWQgKm1hcF9yaW5ncDsKPiA+ICsgICAgeGVuX2Fy Z29fcmluZ190ICpyaW5ncDsKPiA+ICsgICAgc3RydWN0IGFyZ29fcmluZ19pbmZvICpyaW5nX2lu Zm87Cj4gPiArICAgIHN0cnVjdCBhcmdvX3NlbmRfaW5mbyAqc2VuZF9pbmZvID0gTlVMTDsKPiA+ ICsgICAgc3RydWN0IGRvbWFpbiAqZHN0X2QgPSBOVUxMOwo+ID4gKyAgICBpbnQgcmV0ID0gMDsK PiA+ICsgICAgdWludDMyX3QgcHJpdmF0ZV90eF9wdHI7Cj4gPiArCj4gPiArICAgIGlmICggY29w eV9mcm9tX2d1ZXN0KCZyZWcsIHJlZ19obmQsIDEpICkKPiA+ICsgICAgewo+ID4gKyAgICAgICAg cmV0ID0gLUVGQVVMVDsKPiA+ICsgICAgICAgIGdvdG8gb3V0Owo+Cj4gSSBkb24ndCBzZWUgdGhl IHBvaW50IG9mIHVzaW5nIGFuIG91dCBsYWJlbCwgd2h5IG5vdCBqdXN0IHVzZSAncmV0dXJuCj4g LUVGQVVMVDsnIChoZXJlIGFuZCBiZWxvdykuIFRoaXMgYXZvaWRzIHRoZSBicmFjZXMgYW5kIGFs c28gcmVtb3Zlcwo+IHRoZSBuZWVkIGZvciB0aGUgcmV0IGFzc2lnbm1lbnQuCgpkb25lLgoKPgo+ ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIC8qCj4gPiArICAgICAqIEEgcmluZyBtdXN0IGJlIGxh cmdlIGVub3VnaCB0byB0cmFuc21pdCBtZXNzYWdlcywgc28gcmVxdWlyZXMgc3BhY2UgZm9yOgo+ ID4gKyAgICAgKiAqIDEgbWVzc2FnZSBoZWFkZXIsIHBsdXMKPiA+ICsgICAgICogKiAxIHBheWxv YWQgc2xvdCAocGF5bG9hZCBpcyBhbHdheXMgcm91bmRlZCB0byBhIG11bHRpcGxlIG9mIDE2IGJ5 dGVzKQo+ID4gKyAgICAgKiAgIGZvciB0aGUgbWVzc2FnZSBwYXlsb2FkIHRvIGJlIHdyaXR0ZW4g aW50bywgcGx1cwo+ID4gKyAgICAgKiAqIDEgbW9yZSBzbG90LCBzbyB0aGF0IHRoZSByaW5nIGNh bm5vdCBiZSBmaWxsZWQgdG8gY2FwYWNpdHkgd2l0aCBhCj4gPiArICAgICAqICAgc2luZ2xlIG1l c3NhZ2UgLS0gc2VlIHRoZSBsb2dpYyBpbiByaW5nYnVmX2luc2VydCAtLSBhbGxvd2luZyBmb3Ig dGhpcwo+ID4gKyAgICAgKiAgIGVuc3VyZXMgdGhhdCB0aGVyZSBjYW4gYmUgc3BhY2UgcmVtYWlu aW5nIHdoZW4gYSBtZXNzYWdlIGlzIHByZXNlbnQuCj4gPiArICAgICAqIFRoZSBhYm92ZSBkZXRl cm1pbmVzIHRoZSBtaW5pbXVtIGFjY2VwdGFibGUgcmluZyBzaXplLgo+ID4gKyAgICAgKi8KPiA+ ICsgICAgaWYgKCAocmVnLmxlbiA8IChzaXplb2Yoc3RydWN0IHhlbl9hcmdvX3JpbmdfbWVzc2Fn ZV9oZWFkZXIpCj4gPiArICAgICAgICAgICAgICAgICAgICAgICsgUk9VTkRVUF9NRVNTQUdFKDEp ICsgUk9VTkRVUF9NRVNTQUdFKDEpKSkgfHwKPiA+ICsgICAgICAgICAocmVnLmxlbiA+IFhFTl9B UkdPX01BWF9SSU5HX1NJWkUpIHx8Cj4gPiArICAgICAgICAgKHJlZy5sZW4gIT0gUk9VTkRVUF9N RVNTQUdFKHJlZy5sZW4pKSB8fAo+ID4gKyAgICAgICAgIChyZWcucGFkICE9IDApICkKPiA+ICsg ICAgewo+ID4gKyAgICAgICAgcmV0ID0gLUVJTlZBTDsKPiA+ICsgICAgICAgIGdvdG8gb3V0Owo+ ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIHJpbmdfaWQucGFydG5lcl9pZCA9IHJlZy5wYXJ0bmVy X2lkOwo+ID4gKyAgICByaW5nX2lkLnBvcnQgPSByZWcucG9ydDsKPiA+ICsgICAgcmluZ19pZC5k b21haW5faWQgPSBjdXJyZC0+ZG9tYWluX2lkOwo+ID4gKwo+ID4gKyAgICByZWFkX2xvY2soJmFy Z29fbG9jayk7Cj4gPiArCj4gPiArICAgIGlmICggIWN1cnJkLT5hcmdvICkKPiA+ICsgICAgewo+ ID4gKyAgICAgICAgcmV0ID0gLUVOT0RFVjsKPiA+ICsgICAgICAgIGdvdG8gb3V0X3VubG9jazsK PiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBpZiAoIHJlZy5wYXJ0bmVyX2lkID09IFhFTl9BUkdP X0RPTUlEX0FOWSApCj4gPiArICAgIHsKPiA+ICsgICAgICAgIGlmICggb3B0X2FyZ29fbWFjX2Vu Zm9yY2luZyApCj4gPiArICAgICAgICB7Cj4gPiArICAgICAgICAgICAgcmV0ID0gLUVQRVJNOwo+ ID4gKyAgICAgICAgICAgIGdvdG8gb3V0X3VubG9jazsKPiA+ICsgICAgICAgIH0KPiA+ICsgICAg fQo+ID4gKyAgICBlbHNlCj4gPiArICAgIHsKPiA+ICsgICAgICAgIGRzdF9kID0gZ2V0X2RvbWFp bl9ieV9pZChyZWcucGFydG5lcl9pZCk7Cj4gPiArICAgICAgICBpZiAoICFkc3RfZCApCj4gPiAr ICAgICAgICB7Cj4gPiArICAgICAgICAgICAgYXJnb19kcHJpbnRrKCIhZHN0X2QsIEVTUkNIXG4i KTsKPiA+ICsgICAgICAgICAgICByZXQgPSAtRVNSQ0g7Cj4gPiArICAgICAgICAgICAgZ290byBv dXRfdW5sb2NrOwo+ID4gKyAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgaWYgKCAhZHN0X2Qt PmFyZ28gKQo+ID4gKyAgICAgICAgewo+ID4gKyAgICAgICAgICAgIGFyZ29fZHByaW50aygiIWRz dF9kLT5hcmdvLCBFQ09OTlJFRlVTRURcbiIpOwo+ID4gKyAgICAgICAgICAgIHJldCA9IC1FQ09O TlJFRlVTRUQ7Cj4gPiArICAgICAgICAgICAgcHV0X2RvbWFpbihkc3RfZCk7Cj4gPiArICAgICAg ICAgICAgZ290byBvdXRfdW5sb2NrOwo+ID4gKyAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAg c2VuZF9pbmZvID0geHphbGxvYyhzdHJ1Y3QgYXJnb19zZW5kX2luZm8pOwo+ID4gKyAgICAgICAg aWYgKCAhc2VuZF9pbmZvICkKPiA+ICsgICAgICAgIHsKPiA+ICsgICAgICAgICAgICByZXQgPSAt RU5PTUVNOwo+ID4gKyAgICAgICAgICAgIHB1dF9kb21haW4oZHN0X2QpOwo+ID4gKyAgICAgICAg ICAgIGdvdG8gb3V0X3VubG9jazsKPiA+ICsgICAgICAgIH0KPiA+ICsgICAgICAgIHNlbmRfaW5m by0+aWQgPSByaW5nX2lkOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIHdyaXRlX2xvY2soJmN1 cnJkLT5hcmdvLT5sb2NrKTsKPiA+ICsKPiA+ICsgICAgaWYgKCBjdXJyZC0+YXJnby0+cmluZ19j b3VudCA+PSBNQVhfUklOR1NfUEVSX0RPTUFJTiApCj4gPiArICAgIHsKPiA+ICsgICAgICAgIHJl dCA9IC1FTk9TUEM7Cj4gPiArICAgICAgICBnb3RvIG91dF91bmxvY2syOwo+ID4gKyAgICB9Cj4g PiArCj4gPiArICAgIHJpbmdfaW5mbyA9IHJpbmdfZmluZF9pbmZvKGN1cnJkLCAmcmluZ19pZCk7 Cj4gPiArICAgIGlmICggIXJpbmdfaW5mbyApCj4gPiArICAgIHsKPiA+ICsgICAgICAgIHJpbmdf aW5mbyA9IHh6YWxsb2Moc3RydWN0IGFyZ29fcmluZ19pbmZvKTsKPiA+ICsgICAgICAgIGlmICgg IXJpbmdfaW5mbyApCj4gPiArICAgICAgICB7Cj4gPiArICAgICAgICAgICAgcmV0ID0gLUVOT01F TTsKPiA+ICsgICAgICAgICAgICBnb3RvIG91dF91bmxvY2syOwo+ID4gKyAgICAgICAgfQo+ID4g Kwo+ID4gKyAgICAgICAgc3Bpbl9sb2NrX2luaXQoJnJpbmdfaW5mby0+bG9jayk7Cj4gPiArCj4g PiArICAgICAgICByaW5nX2luZm8tPmlkID0gcmluZ19pZDsKPiA+ICsgICAgICAgIElOSVRfSExJ U1RfSEVBRCgmcmluZ19pbmZvLT5wZW5kaW5nKTsKPiA+ICsKPiA+ICsgICAgICAgIGhsaXN0X2Fk ZF9oZWFkKCZyaW5nX2luZm8tPm5vZGUsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAmY3Vy cmQtPmFyZ28tPnJpbmdfaGFzaFtoYXNoX2luZGV4KCZyaW5nX2luZm8tPmlkKV0pOwo+ID4gKwo+ ID4gKyAgICAgICAgZ3ByaW50ayhYRU5MT0dfREVCVUcsICJhcmdvOiB2bSV1IHJlZ2lzdGVyaW5n IHJpbmcgKHZtJXU6JXggdm0lZClcbiIsCj4gPiArICAgICAgICAgICAgICAgIGN1cnJkLT5kb21h aW5faWQsIHJpbmdfaWQuZG9tYWluX2lkLCByaW5nX2lkLnBvcnQsCj4gPiArICAgICAgICAgICAg ICAgIHJpbmdfaWQucGFydG5lcl9pZCk7Cj4gPiArICAgIH0KPiA+ICsgICAgZWxzZQo+ID4gKyAg ICB7Cj4gPiArICAgICAgICBpZiAoIHJpbmdfaW5mby0+bGVuICkKPiA+ICsgICAgICAgIHsKPiA+ ICsgICAgICAgICAgICAvKgo+ID4gKyAgICAgICAgICAgICAqIElmIHRoZSBjYWxsZXIgc3BlY2lm aWVkIHRoYXQgdGhlIHJpbmcgbXVzdCBub3QgYWxyZWFkeSBleGlzdCwKPiA+ICsgICAgICAgICAg ICAgKiBmYWlsIGF0IGF0dGVtcHQgdG8gYWRkIGEgY29tcGxldGVkIHJpbmcgd2hpY2ggYWxyZWFk eSBleGlzdHMuCj4gPiArICAgICAgICAgICAgICovCj4gPiArICAgICAgICAgICAgaWYgKCBmYWls X2V4aXN0ICkKPiA+ICsgICAgICAgICAgICB7Cj4gPiArICAgICAgICAgICAgICAgIGFyZ29fZHBy aW50aygiZGlzYWxsb3dlZCByZXJlZ2lzdHJhdGlvbiBvZiBleGlzdGluZyByaW5nXG4iKTsKPiA+ ICsgICAgICAgICAgICAgICAgcmV0ID0gLUVFWElTVDsKPiA+ICsgICAgICAgICAgICAgICAgZ290 byBvdXRfdW5sb2NrMjsKPiA+ICsgICAgICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICAgICAg aWYgKCByaW5nX2luZm8tPmxlbiAhPSByZWcubGVuICkKPiA+ICsgICAgICAgICAgICB7Cj4gPiAr ICAgICAgICAgICAgICAgIC8qCj4gPiArICAgICAgICAgICAgICAgICAqIENoYW5nZSBvZiByaW5n IHNpemUgY291bGQgcmVzdWx0IGluIGVudHJpZXMgb24gdGhlIHBlbmRpbmcKPiA+ICsgICAgICAg ICAgICAgICAgICogbm90aWZpY2F0aW9ucyBsaXN0IHRoYXQgd2lsbCBuZXZlciB0cmlnZ2VyLgo+ ID4gKyAgICAgICAgICAgICAgICAgKiBTaW1wbGUgYmx1bnQgc29sdXRpb246IGRpc2FsbG93IHJp bmcgcmVzaXplIGZvciBub3cuCj4gPiArICAgICAgICAgICAgICAgICAqIFRPRE86IGludmVzdGln YXRlIGVuYWJsaW5nIHJpbmcgcmVzaXplLgo+ID4gKyAgICAgICAgICAgICAgICAgKi8KPgo+IEkg dGhpbmsgcmluZyByZXNpemluZyB3YXMgcmVtb3ZlZCBvbiB0aGlzIHZlcnNpb24/CgpZZXM6IFRo aXMgaXMgdGhlIGNvZGUgdGhhdCB3YXMgaW50cm9kdWNlZCB0byBwcmV2ZW50IGl0LgoKPgo+ID4g KyAgICAgICAgICAgICAgICBncHJpbnRrKFhFTkxPR19FUlIsCj4gPiArICAgICAgICAgICAgICAg ICAgICAiYXJnbzogdm0ldSBhdHRlbXB0ZWQgdG8gY2hhbmdlIHJpbmcgc2l6ZSh2bSV1OiV4IHZt JWQpXG4iLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJkLT5kb21haW5faWQsIHJp bmdfaWQuZG9tYWluX2lkLCByaW5nX2lkLnBvcnQsCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgcmluZ19pZC5wYXJ0bmVyX2lkKTsKPiA+ICsgICAgICAgICAgICAgICAgLyoKPiA+ICsgICAg ICAgICAgICAgICAgICogQ291bGQgcmV0dXJuIEVJTlZBTCBoZXJlLCBidXQgaWYgdGhlIHJpbmcg ZGlkbid0IGFscmVhZHkKPiA+ICsgICAgICAgICAgICAgICAgICogZXhpc3QgdGhlbiB0aGUgYXJn dW1lbnRzIHdvdWxkIGhhdmUgYmVlbiB2YWxpZCwgc286IEVFWElTVC4KPiA+ICsgICAgICAgICAg ICAgICAgICovCj4gPiArICAgICAgICAgICAgICAgIHJldCA9IC1FRVhJU1Q7Cj4gPiArICAgICAg ICAgICAgICAgIGdvdG8gb3V0X3VubG9jazI7Cj4gPiArICAgICAgICAgICAgfQo+ID4gKwo+ID4g KyAgICAgICAgICAgIGdwcmludGsoWEVOTE9HX0RFQlVHLAo+ID4gKyAgICAgICAgICAgICAgICAg ICAgImFyZ286IHZtJXUgcmUtcmVnaXN0ZXJpbmcgZXhpc3RpbmcgcmluZyAodm0ldToleCB2bSVk KVxuIiwKPiA+ICsgICAgICAgICAgICAgICAgICAgIGN1cnJkLT5kb21haW5faWQsIHJpbmdfaWQu ZG9tYWluX2lkLCByaW5nX2lkLnBvcnQsCj4gPiArICAgICAgICAgICAgICAgICAgICByaW5nX2lk LnBhcnRuZXJfaWQpOwo+ID4gKyAgICAgICAgfQo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIHJl dCA9IGZpbmRfcmluZ19tZm5zKGN1cnJkLCByaW5nX2luZm8sIG5wYWdlLCBwZ19kZXNjcl9obmQs IHJlZy5sZW4pOwo+ID4gKyAgICBpZiAoIHJldCApCj4gPiArICAgIHsKPiA+ICsgICAgICAgIGdw cmludGsoWEVOTE9HX0VSUiwKPiA+ICsgICAgICAgICAgICAgICAgImFyZ286IHZtJXUgZmFpbGVk IHRvIGZpbmQgcmluZyBtZm5zICh2bSV1OiV4IHZtJWQpXG4iLAo+ID4gKyAgICAgICAgICAgICAg ICBjdXJyZC0+ZG9tYWluX2lkLCByaW5nX2lkLmRvbWFpbl9pZCwgcmluZ19pZC5wb3J0LAo+ID4g KyAgICAgICAgICAgICAgICByaW5nX2lkLnBhcnRuZXJfaWQpOwo+ID4gKwo+ID4gKyAgICAgICAg cmluZ19yZW1vdmVfaW5mbyhjdXJyZCwgcmluZ19pbmZvKTsKPiA+ICsgICAgICAgIGdvdG8gb3V0 X3VubG9jazI7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgLyoKPiA+ICsgICAgICogVGhlIGZp cnN0IHBhZ2Ugb2YgdGhlIG1lbW9yeSBzdXBwbGllZCBmb3IgdGhlIHJpbmcgaGFzIHRoZSB4ZW5f YXJnb19yaW5nCj4gPiArICAgICAqIHN0cnVjdHVyZSBhdCBpdHMgaGVhZCwgd2hpY2ggaXMgd2hl cmUgdGhlIHJpbmcgaW5kZXhlcyByZXNpZGUuCj4gPiArICAgICAqLwo+ID4gKyAgICByZXQgPSBy aW5nX21hcF9wYWdlKHJpbmdfaW5mbywgMCwgJm1hcF9yaW5ncCk7Cj4gPiArICAgIGlmICggcmV0 ICkKPiA+ICsgICAgewo+ID4gKyAgICAgICAgZ3ByaW50ayhYRU5MT0dfRVJSLAo+ID4gKyAgICAg ICAgICAgICAgICAiYXJnbzogdm0ldSBmYWlsZWQgdG8gbWFwIHJpbmcgbWZuIDAgKHZtJXU6JXgg dm0lZClcbiIsCj4gPiArICAgICAgICAgICAgICAgIGN1cnJkLT5kb21haW5faWQsIHJpbmdfaWQu ZG9tYWluX2lkLCByaW5nX2lkLnBvcnQsCj4gPiArICAgICAgICAgICAgICAgIHJpbmdfaWQucGFy dG5lcl9pZCk7Cj4gPiArCj4gPiArICAgICAgICByaW5nX3JlbW92ZV9pbmZvKGN1cnJkLCByaW5n X2luZm8pOwo+ID4gKyAgICAgICAgZ290byBvdXRfdW5sb2NrMjsKPiA+ICsgICAgfQo+ID4gKyAg ICByaW5ncCA9IG1hcF9yaW5ncDsKPiA+ICsKPiA+ICsgICAgcHJpdmF0ZV90eF9wdHIgPSByZWFk X2F0b21pYygmcmluZ3AtPnR4X3B0cik7Cj4gPiArCj4gPiArICAgIGlmICggKHByaXZhdGVfdHhf cHRyID49IHJlZy5sZW4pIHx8Cj4gPiArICAgICAgICAgKFJPVU5EVVBfTUVTU0FHRShwcml2YXRl X3R4X3B0cikgIT0gcHJpdmF0ZV90eF9wdHIpICkKPiA+ICsgICAgewo+ID4gKyAgICAgICAgLyoK PiA+ICsgICAgICAgICAqIFNpbmNlIHRoZSByaW5nIGlzIGEgbWVzcywgYXR0ZW1wdCB0byBmbHVz aCB0aGUgY29udGVudHMgb2YgaXQKPiA+ICsgICAgICAgICAqIGhlcmUgYnkgc2V0dGluZyB0aGUg dHhfcHRyIHRvIHRoZSBuZXh0IGFsaWduZWQgbWVzc2FnZSBzbG90IHBhc3QKPiA+ICsgICAgICAg ICAqIHRoZSBsYXRlc3QgcnhfcHRyIHdlIGhhdmUgb2JzZXJ2ZWQuIEhhbmRsZSByaW5nIHdyYXAg Y29ycmVjdGx5Lgo+ID4gKyAgICAgICAgICovCj4gPiArICAgICAgICBwcml2YXRlX3R4X3B0ciA9 IFJPVU5EVVBfTUVTU0FHRShyZWFkX2F0b21pYygmcmluZ3AtPnJ4X3B0cikpOwo+ID4gKwo+ID4g KyAgICAgICAgaWYgKCBwcml2YXRlX3R4X3B0ciA+PSByZWcubGVuICkKPiA+ICsgICAgICAgICAg ICBwcml2YXRlX3R4X3B0ciA9IDA7Cj4gPiArCj4gPiArICAgICAgICB1cGRhdGVfdHhfcHRyKHJp bmdfaW5mbywgcHJpdmF0ZV90eF9wdHIpOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIHJpbmdf aW5mby0+dHhfcHRyID0gcHJpdmF0ZV90eF9wdHI7Cj4gPiArICAgIHJpbmdfaW5mby0+bGVuID0g cmVnLmxlbjsKPiA+ICsgICAgY3VycmQtPmFyZ28tPnJpbmdfY291bnQrKzsKPiA+ICsKPiA+ICsg ICAgaWYgKCBzZW5kX2luZm8gKQo+ID4gKyAgICB7Cj4gPiArICAgICAgICBzcGluX2xvY2soJmRz dF9kLT5hcmdvLT5zZW5kX2xvY2spOwo+ID4gKwo+ID4gKyAgICAgICAgaGxpc3RfYWRkX2hlYWQo JnNlbmRfaW5mby0+bm9kZSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICZkc3RfZC0+YXJn by0+c2VuZF9oYXNoW2hhc2hfaW5kZXgoJnNlbmRfaW5mby0+aWQpXSk7Cj4gPiArCj4gPiArICAg ICAgICBzcGluX3VubG9jaygmZHN0X2QtPmFyZ28tPnNlbmRfbG9jayk7Cj4gPiArICAgIH0KPiA+ ICsKPiA+ICsgb3V0X3VubG9jazI6Cj4gPiArICAgIGlmICggIXJldCAmJiBzZW5kX2luZm8gKQo+ ID4gKyAgICAgICAgeGZyZWUoc2VuZF9pbmZvKTsKPgo+IFRoZXJlJ3Mgbm8gbmVlZCB0byBjaGVj ayBpZiBzZW5kX2luZm8gaXMgc2V0LCB4ZnJlZShOVUxMKSBpcyBzYWZlLgoKZG9uZS4KCj4KPiA+ ICsKPiA+ICsgICAgaWYgKCBkc3RfZCApCj4gPiArICAgICAgICBwdXRfZG9tYWluKGRzdF9kKTsK PiA+ICsKPiA+ICsgICAgd3JpdGVfdW5sb2NrKCZjdXJyZC0+YXJnby0+bG9jayk7Cj4gPiArCj4g PiArIG91dF91bmxvY2s6Cj4gPiArICAgIHJlYWRfdW5sb2NrKCZhcmdvX2xvY2spOwo+ID4gKwo+ ID4gKyBvdXQ6Cj4gPiArICAgIHJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gIGxvbmcKPiA+ ICBkb19hcmdvX29wKHVuc2lnbmVkIGludCBjbWQsIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0odm9p ZCkgYXJnMSwKPiA+ICAgICAgICAgICAgIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0odm9pZCkgYXJn MiwgdW5zaWduZWQgbG9uZyBhcmczLAo+ID4gQEAgLTM5Miw2ICs5MjYsMzggQEAgZG9fYXJnb19v cCh1bnNpZ25lZCBpbnQgY21kLCBYRU5fR1VFU1RfSEFORExFX1BBUkFNKHZvaWQpIGFyZzEsCj4g Pgo+ID4gICAgICBzd2l0Y2ggKGNtZCkKPiA+ICAgICAgewo+ID4gKyAgICBjYXNlIFhFTl9BUkdP X09QX3JlZ2lzdGVyX3Jpbmc6Cj4gPiArICAgIHsKPiA+ICsgICAgICAgIFhFTl9HVUVTVF9IQU5E TEVfUEFSQU0oeGVuX2FyZ29fcmVnaXN0ZXJfcmluZ190KSByZWdfaG5kID0KPiA+ICsgICAgICAg ICAgICBndWVzdF9oYW5kbGVfY2FzdChhcmcxLCB4ZW5fYXJnb19yZWdpc3Rlcl9yaW5nX3QpOwo+ ID4gKyAgICAgICAgWEVOX0dVRVNUX0hBTkRMRV9QQVJBTSh4ZW5fYXJnb19wYWdlX2Rlc2NyX3Qp IHBnX2Rlc2NyX2huZCA9Cj4gPiArICAgICAgICAgICAgZ3Vlc3RfaGFuZGxlX2Nhc3QoYXJnMiwg eGVuX2FyZ29fcGFnZV9kZXNjcl90KTsKPiA+ICsgICAgICAgIC8qIGFyZzMgaXMgbnBhZ2UgKi8K PiA+ICsgICAgICAgIC8qIGFyZzQgaXMgZmxhZ3MgKi8KPiA+ICsgICAgICAgIGJvb2wgZmFpbF9l eGlzdCA9IGFyZzQgJiBYRU5fQVJHT19SRUdJU1RFUl9GTEFHX0ZBSUxfRVhJU1Q7Cj4gPiArCj4g PiArICAgICAgICBpZiAoIHVubGlrZWx5KGFyZzMgPiAoWEVOX0FSR09fTUFYX1JJTkdfU0laRSA+ PiBQQUdFX1NISUZUKSkgKQo+ID4gKyAgICAgICAgewo+ID4gKyAgICAgICAgICAgIHJjID0gLUVJ TlZBTDsKPiA+ICsgICAgICAgICAgICBicmVhazsKPiA+ICsgICAgICAgIH0KPiA+ICsgICAgICAg IC8qCj4gPiArICAgICAgICAgKiBDaGVjayBhY2Nlc3MgdG8gdGhlIHdob2xlIGFycmF5IGhlcmUg c28gd2UgY2FuIHVzZSB0aGUgZmFzdGVyIF9fY29weQo+ID4gKyAgICAgICAgICogb3BlcmF0aW9u cyB0byByZWFkIGVhY2ggZWxlbWVudCBsYXRlci4KPiA+ICsgICAgICAgICAqLwo+ID4gKyAgICAg ICAgaWYgKCB1bmxpa2VseSghZ3Vlc3RfaGFuZGxlX29rYXkocGdfZGVzY3JfaG5kLCBhcmczKSkg KQo+ID4gKyAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICAgLyogYXJnNDogcmVzZXJ2ZSBj dXJyZW50bHktdW5kZWZpbmVkIGJpdHMsIHJlcXVpcmUgemVyby4gICovCj4gPiArICAgICAgICBp ZiAoIHVubGlrZWx5KGFyZzQgJiB+WEVOX0FSR09fUkVHSVNURVJfRkxBR19NQVNLKSApCj4gPiAr ICAgICAgICB7Cj4gPiArICAgICAgICAgICAgcmMgPSAtRUlOVkFMOwo+ID4gKyAgICAgICAgICAg IGJyZWFrOwo+ID4gKyAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgcmMgPSByZWdpc3Rlcl9y aW5nKGN1cnJkLCByZWdfaG5kLCBwZ19kZXNjcl9obmQsIGFyZzMsIGZhaWxfZXhpc3QpOwo+ID4g KyAgICAgICAgYnJlYWs7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICAgICAgZGVmYXVsdDoKPiA+ICAg ICAgICAgIHJjID0gLUVPUE5PVFNVUFA7Cj4gPiAgICAgICAgICBicmVhazsKPiA+IGRpZmYgLS1n aXQgYS94ZW4vaW5jbHVkZS9hc20tYXJtL2d1ZXN0X2FjY2Vzcy5oIGIveGVuL2luY2x1ZGUvYXNt LWFybS9ndWVzdF9hY2Nlc3MuaAo+ID4gaW5kZXggODk5N2ExYy4uNzBlOWE3OCAxMDA2NDQKPiA+ IC0tLSBhL3hlbi9pbmNsdWRlL2FzbS1hcm0vZ3Vlc3RfYWNjZXNzLmgKPiA+ICsrKyBiL3hlbi9p bmNsdWRlL2FzbS1hcm0vZ3Vlc3RfYWNjZXNzLmgKPiA+IEBAIC0yOSw2ICsyOSw4IEBAIGludCBh Y2Nlc3NfZ3Vlc3RfbWVtb3J5X2J5X2lwYShzdHJ1Y3QgZG9tYWluICpkLCBwYWRkcl90IGlwYSwg dm9pZCAqYnVmLAo+ID4gIC8qIElzIHRoZSBndWVzdCBoYW5kbGUgYSBOVUxMIHJlZmVyZW5jZT8g Ki8KPiA+ICAjZGVmaW5lIGd1ZXN0X2hhbmRsZV9pc19udWxsKGhuZCkgICAgICAgICgoaG5kKS5w ID09IE5VTEwpCj4gPgo+ID4gKyNkZWZpbmUgZ3Vlc3RfaGFuZGxlX2lzX2FsaWduZWQoaG5kLCBt YXNrKSAoISgodWludHB0cl90KShobmQpLnAgJiAobWFzaykpKQo+ID4gKwo+ID4gIC8qIE9mZnNl dCB0aGUgZ2l2ZW4gZ3Vlc3QgaGFuZGxlIGludG8gdGhlIGFycmF5IGl0IHJlZmVycyB0by4gKi8K PiA+ICAjZGVmaW5lIGd1ZXN0X2hhbmRsZV9hZGRfb2Zmc2V0KGhuZCwgbnIpICgoaG5kKS5wICs9 IChucikpCj4gPiAgI2RlZmluZSBndWVzdF9oYW5kbGVfc3VidHJhY3Rfb2Zmc2V0KGhuZCwgbnIp ICgoaG5kKS5wIC09IChucikpCj4gPiBkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9n dWVzdF9hY2Nlc3MuaCBiL3hlbi9pbmNsdWRlL2FzbS14ODYvZ3Vlc3RfYWNjZXNzLmgKPiA+IGlu ZGV4IGNhNzAwYzkuLjhkZGU1ZDUgMTAwNjQ0Cj4gPiAtLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2 L2d1ZXN0X2FjY2Vzcy5oCj4gPiArKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L2d1ZXN0X2FjY2Vz cy5oCj4gPiBAQCAtNDEsNiArNDEsOCBAQAo+ID4gIC8qIElzIHRoZSBndWVzdCBoYW5kbGUgYSBO VUxMIHJlZmVyZW5jZT8gKi8KPiA+ICAjZGVmaW5lIGd1ZXN0X2hhbmRsZV9pc19udWxsKGhuZCkg ICAgICAgICgoaG5kKS5wID09IE5VTEwpCj4gPgo+ID4gKyNkZWZpbmUgZ3Vlc3RfaGFuZGxlX2lz X2FsaWduZWQoaG5kLCBtYXNrKSAoISgodWludHB0cl90KShobmQpLnAgJiAobWFzaykpKQo+ID4g Kwo+ID4gIC8qIE9mZnNldCB0aGUgZ2l2ZW4gZ3Vlc3QgaGFuZGxlIGludG8gdGhlIGFycmF5IGl0 IHJlZmVycyB0by4gKi8KPiA+ICAjZGVmaW5lIGd1ZXN0X2hhbmRsZV9hZGRfb2Zmc2V0KGhuZCwg bnIpICgoaG5kKS5wICs9IChucikpCj4gPiAgI2RlZmluZSBndWVzdF9oYW5kbGVfc3VidHJhY3Rf b2Zmc2V0KGhuZCwgbnIpICgoaG5kKS5wIC09IChucikpCj4gPiBkaWZmIC0tZ2l0IGEveGVuL2lu Y2x1ZGUvcHVibGljL2FyZ28uaCBiL3hlbi9pbmNsdWRlL3B1YmxpYy9hcmdvLmgKPiA+IGluZGV4 IDQ4MTg2ODQuLjg5NDcyMzAgMTAwNjQ0Cj4gPiAtLS0gYS94ZW4vaW5jbHVkZS9wdWJsaWMvYXJn by5oCj4gPiArKysgYi94ZW4vaW5jbHVkZS9wdWJsaWMvYXJnby5oCj4gPiBAQCAtMzEsNiArMzEs MjYgQEAKPiA+Cj4gPiAgI2luY2x1ZGUgInhlbi5oIgo+ID4KPiA+ICsjZGVmaW5lIFhFTl9BUkdP X0RPTUlEX0FOWSAgICAgICBET01JRF9JTlZBTElECj4gPiArCj4gPiArLyoKPiA+ICsgKiBUaGUg bWF4aW11bSBzaXplIG9mIGFuIEFyZ28gcmluZyBpcyBkZWZpbmVkIHRvIGJlOiAxNkdCCj4KPiBJ cyBzdWNoIGEgYmlnIHNpemUgcmVhbGx5IHJlcXVpcmVkIGFzIHRoZSBkZWZhdWx0IG1heGltdW0/ IFRoZSBzaXplIG9mCj4gdGhlIGludGVybmFsIHN0cnVjdHVyZXMgcmVxdWlyZWQgdG8gc3VwcG9y dCBhIDE2R0IgcmluZyB3b3VsZCBiZSBxdWl0ZQo+IGJpZywgaGFzIHRoaXMgYmVlbiB0YWtlbiBp bnRvIGFjY291bnQ/CgpZZXMsIHRoYXQgd2FzIGluY29ycmVjdC4gVGhlIGNvbW1lbnQgaXMgbm93 IGZpeGVkLiAxNk1CIGlzIG11Y2ggbW9yZQpyZWFzb25hYmxlLgoKdGhhbmtzLAoKQ2hyaXN0b3Bo ZXIKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1k ZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8v bGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=