From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Pau =?utf-8?B?TW9ubsOp?= Subject: Re: [PATCH 13/25] argo: implement the register op Date: Wed, 12 Dec 2018 17:47:21 +0100 Message-ID: <20181212164721.hag6gc3akcm2gvhd@mac> References: <1543627984-21394-1-git-send-email-christopher.w.clark@gmail.com> <1543627984-21394-14-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 1gX7gR-0004RS-O2 for xen-devel@lists.xenproject.org; Wed, 12 Dec 2018 16:48:27 +0000 Content-Disposition: inline In-Reply-To: <1543627984-21394-14-git-send-email-christopher.w.clark@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Christopher Clark Cc: Stefano Stabellini , Wei Liu , James McKenzie , Ross Philipson , Konrad Rzeszutek Wilk , George Dunlap , Andrew Cooper , Jason Andryuk , Ian Jackson , Rich Persaud , Tim Deegan , Daniel Smith , Julien Grall , Paul Durrant , Jan Beulich , xen-devel@lists.xenproject.org, Eric Chanudet List-Id: xen-devel@lists.xenproject.org T24gRnJpLCBOb3YgMzAsIDIwMTggYXQgMDU6MzI6NTJQTSAtMDgwMCwgQ2hyaXN0b3BoZXIgQ2xh cmsgd3JvdGU6Cj4gVXNlZCBieSBhIGRvbWFpbiB0byByZWdpc3RlciBhIHJlZ2lvbiBvZiBtZW1v cnkgZm9yIHJlY2VpdmluZyBtZXNzYWdlcyBmcm9tCj4gZWl0aGVyIGEgc3BlY2lmaWVkIG90aGVy IGRvbWFpbiwgb3IsIGlmIHNwZWNpZnlpbmcgYSB3aWxkY2FyZCwgYW55IGRvbWFpbi4KPiAKPiBU aGlzIG9wZXJhdGlvbiBjcmVhdGVzIGEgbWFwcGluZyB3aXRoaW4gWGVuJ3MgcHJpdmF0ZSBhZGRy ZXNzIHNwYWNlIHRoYXQKPiB3aWxsIHJlbWFpbiByZXNpZGVudCBmb3IgdGhlIGxpZmV0aW1lIG9m IHRoZSByaW5nLiBJbiBzdWJzZXF1ZW50IGNvbW1pdHMsIHRoZQo+IGh5cGVydmlzb3Igd2lsbCB1 c2UgdGhpcyBtYXBwaW5nIHRvIGNvcHkgZGF0YSBmcm9tIGEgc2VuZGluZyBkb21haW4gaW50byB0 aGlzCj4gcmVnaXN0ZXJlZCByaW5nLCBtYWtpbmcgaXQgYWNjZXNzaWJsZSB0byB0aGUgZG9tYWlu IHRoYXQgcmVnaXN0ZXJlZCB0aGUgcmluZyB0bwo+IHJlY2VpdmUgZGF0YS4KPiAKPiBJbiB0aGlz IGNvZGUsIHRoZSBwMm0gdHlwZSBvZiB0aGUgbWVtb3J5IHN1cHBsaWVkIGJ5IHRoZSBndWVzdCBm b3IgdGhlIHJpbmcKPiBtdXN0IGJlIHAybV9yYW1fcncsIHdoaWNoIGlzIGEgY29uc2VydmF0aXZl IGNob2ljZSBtYWRlIHRvIGRlZmVyIHRoZSBuZWVkIHRvCj4gcmVhc29uIGFib3V0IHRoZSBvdGhl ciBwMm0gdHlwZXMgd2l0aCB0aGlzIGNvbW1pdC4KPiAKPiBhcmdvX3Bmbl90IHR5cGUgaXMgaW50 cm9kdWNlZCBoZXJlIHRvIGNyZWF0ZSBhIHBmbl90IHR5cGUgdGhhdCBpcyA2NC1iaXQgb24KPiBh bGwgYXJjaGl0ZWN0dXJlcywgdG8gYXNzaXN0IHdpdGggYXZvaWRpbmcgdGhlIG5lZWQgdG8gYWRk IGEgY29tcGF0IEFCSS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBDbGFyayA8Y2hy aXN0b3BoZXIuY2xhcms2QGJhZXN5c3RlbXMuY29tPgo+IC0tLQo+ICB4ZW4vY29tbW9uL2FyZ28u YyAgICAgICAgICAgICAgICAgIHwgNDk4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKPiAgeGVuL2luY2x1ZGUvYXNtLWFybS9ndWVzdF9hY2Nlc3MuaCB8ICAgMiArCj4gIHhl bi9pbmNsdWRlL2FzbS14ODYvZ3Vlc3RfYWNjZXNzLmggfCAgIDIgKwo+ICB4ZW4vaW5jbHVkZS9w dWJsaWMvYXJnby5oICAgICAgICAgIHwgIDY0ICsrKysrCj4gIDQgZmlsZXMgY2hhbmdlZCwgNTY2 IGluc2VydGlvbnMoKykKPiAKPiBkaWZmIC0tZ2l0IGEveGVuL2NvbW1vbi9hcmdvLmMgYi94ZW4v Y29tbW9uL2FyZ28uYwo+IGluZGV4IDJhOTVlMDkuLmY0ZTgyY2YgMTAwNjQ0Cj4gLS0tIGEveGVu L2NvbW1vbi9hcmdvLmMKPiArKysgYi94ZW4vY29tbW9uL2FyZ28uYwo+IEBAIC0yNSw2ICsyNSw3 IEBACj4gICNpbmNsdWRlIDx4ZW4vZ3Vlc3RfYWNjZXNzLmg+Cj4gICNpbmNsdWRlIDx4ZW4vdGlt ZS5oPgo+ICAKPiArREVGSU5FX1hFTl9HVUVTVF9IQU5ETEUoYXJnb19wZm5fdCk7Cj4gIERFRklO RV9YRU5fR1VFU1RfSEFORExFKGFyZ29fYWRkcl90KTsKPiAgREVGSU5FX1hFTl9HVUVTVF9IQU5E TEUoYXJnb19yaW5nX3QpOwo+ICAKPiBAQCAtOTgsNiArOTksMjUgQEAgc3RydWN0IGFyZ29fZG9t YWluCj4gIH07Cj4gIAo+ICAvKgo+ICsgKiBIZWxwZXIgZnVuY3Rpb25zCj4gKyAqLwo+ICsKPiAr c3RhdGljIGlubGluZSB1aW50MTZfdAo+ICthcmdvX2hhc2hfZm4oY29uc3Qgc3RydWN0IGFyZ29f cmluZ19pZCAqaWQpCgpObyBuZWVkIGZvciB0aGUgYXJnb18gcHJlZml4IGZvciBzdGF0aWMgZnVu Y3Rpb25zLCB0aGlzIGlzIGFscmVhZHkgYW4KYXJnbyBzcGVjaWZpYyBmaWxlLgoKPiArewo+ICsg ICAgdWludDE2X3QgcmV0Owo+ICsKPiArICAgIHJldCA9ICh1aW50MTZfdCkoaWQtPmFkZHIucG9y dCA+PiAxNik7Cj4gKyAgICByZXQgXj0gKHVpbnQxNl90KWlkLT5hZGRyLnBvcnQ7Cj4gKyAgICBy ZXQgXj0gaWQtPmFkZHIuZG9tYWluX2lkOwo+ICsgICAgcmV0IF49IGlkLT5wYXJ0bmVyOwo+ICsK PiArICAgIHJldCAmPSAoQVJHT19IVEFCTEVfU0laRSAtIDEpOwoKSSdtIGhhdmluZyB0cm91Ymxl IGZpZ3VyaW5nIG91dCB3aGF0IHRoaXMgaXMgc3VwcG9zZWQgdG8gZG8sIEkgdGhpbmsgYQpjb21t ZW50IGFuZCB0aGUgZXhwZWN0ZWQgaGFzaCBmb3JtdWxhIHdpbGwgaGVscCBtYWtlIHN1cmUgdGhl IGNvZGUgaXMKY29ycmVjdC4KCkFsc28gZG9lc24ndCB0aGlzIG5lZWQgdG8gYmUgZG9jdW1lbnRl ZCBpbiB0aGUgcHVibGljIGhlYWRlcj8KCj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICsv Kgo+ICAgKiBsb2Nrcwo+ICAgKi8KPiAgCj4gQEAgLTE3MSw2ICsxOTEsNzQgQEAgYXJnb19yaW5n X3VubWFwKHN0cnVjdCBhcmdvX3JpbmdfaW5mbyAqcmluZ19pbmZvKQo+ICAgICAgfQo+ICB9Cj4g IAo+ICsvKiBjYWxsZXIgbXVzdCBoYXZlIEwzIG9yIFcoTDIpICovCj4gK3N0YXRpYyBpbnQKPiAr YXJnb19yaW5nX21hcF9wYWdlKHN0cnVjdCBhcmdvX3JpbmdfaW5mbyAqcmluZ19pbmZvLCB1aW50 MzJfdCBpLAo+ICsgICAgICAgICAgICAgICAgICAgdWludDhfdCAqKnBhZ2UpCj4gK3sKPiArICAg IGlmICggaSA+PSByaW5nX2luZm8tPm5tZm5zICkKPiArICAgIHsKPiArICAgICAgICBwcmludGso WEVOTE9HX0VSUiAiYXJnbzogcmluZyAodm0ldToleCB2bSVkKSAlcCBhdHRlbXB0ZWQgdG8gbWFw IHBhZ2UiCgpZb3UgbGlrZWx5IHdhbnQgdG8gdXNlIGdwcmludGsgaGVyZSBhbmQgYmVsb3csIG9y IFhFTkxPR19HX0VSUiwgc28KdGhhdCB0aGUgZ3Vlc3QgY2Fubm90IERvUyB0aGUgY29uc29sZS4K Cj4gKyAgICAgICAgICAgICAgICIgJXUgb2YgJXVcbiIsIHJpbmdfaW5mby0+aWQuYWRkci5kb21h aW5faWQsCj4gKyAgICAgICAgICAgICAgIHJpbmdfaW5mby0+aWQuYWRkci5wb3J0LCByaW5nX2lu Zm8tPmlkLnBhcnRuZXIsIHJpbmdfaW5mbywKPiArICAgICAgICAgICAgICAgaSwgcmluZ19pbmZv LT5ubWZucyk7Cj4gKyAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Cj4gKyAgICB9Cj4gKyAgICBBU1NF UlQocmluZ19pbmZvLT5tZm5zKTsKPiArICAgIEFTU0VSVChyaW5nX2luZm8tPm1mbl9tYXBwaW5n KTsKCldlIGFyZSB0cnlpbmcgdG8gbW92ZSBhd2F5IGZyb20gc3VjaCBhc3NlcnRpb25zLCBhbmQg aW5zdGVhZCB1c2UKY29uc3RydWN0aW9ucyB0aGF0IHdvdWxkIHByZXZlbnQgaXNzdWVzIGluIG5v bi1kZWJ1ZyBidWlsZHMuIEkgd291bGQKd3JpdGUgdGhlIGFib3ZlIGFzc2VydHMgYXM6CgppZiAo ICFyaW5nX2luZm8tPm1mbnMgfHwgIXJpbmdfaW5mby0+bWZuX21hcHBpbmcgKQp7CiAgICBBU1NF UlRfVU5SRUFDSEFCTEUoKTsKICAgIHJldHVybiAtRTxzb21ldGhpbmc+Owp9CgpUaGF0IHdheSBu b24tZGVidWcgYnVpbGRzIHdvbid0IHRyaWdnZXIgcGFnZSBmYXVsdHMgaWYgdGhlcmUncyBpbmRl ZWQKYSB3YXkgdG8gZ2V0IGhlcmUgd2l0aCB0aGUgd3Jvbmcgc3RhdGUsIGFuZCBkZWJ1ZyBidWls ZHMgd2lsbCBzdGlsbApoaXQgYW4gYXNzZXJ0LgoKPiArCj4gKyAgICBpZiAoICFyaW5nX2luZm8t Pm1mbl9tYXBwaW5nW2ldICkKPiArICAgIHsKPiArICAgICAgICAvKgo+ICsgICAgICAgICAqIFRP RE86Cj4gKyAgICAgICAgICogVGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIHJpbmcgY29udGFpbnMgdGhl IHJpbmcgaW5kaWNlcywgc28gYm90aCByZWFkIGFuZAo+ICsgICAgICAgICAqIHdyaXRlIGFjY2Vz cyB0byB0aGUgcGFnZSBpcyByZXF1aXJlZCBieSB0aGUgaHlwZXJ2aXNvciwgYnV0IHJlYWQtYWNj ZXNzCj4gKyAgICAgICAgICogaXMgbm90IG5lZWRlZCBmb3IgdGhpcyBtYXBwaW5nIGZvciB0aGUg cmVtYWluZGVyIG9mIHRoZSByaW5nLgo+ICsgICAgICAgICAqIFNpbmNlIHRoaXMgbWFwcGluZyB3 aWxsIHJlbWFpbiByZXNpZGVudCBpbiBYZW4ncyBhZGRyZXNzIHNwYWNlIGZvcgo+ICsgICAgICAg ICAqIHRoZSBsaWZldGltZSBvZiB0aGUgcmluZywgYW5kIGZvbGxvd2luZyB0aGUgcHJpbmNpcGxl IG9mIGxlYXN0IHByaXZpbGVnZSwKPiArICAgICAgICAgKiBpdCBjb3VsZCBiZSBwcmVmZXJhYmxl IHRvOgo+ICsgICAgICAgICAqICAjIGFkZCBhIFhTTSBjaGVjayB0byBkZXRlcm1pbmUgd2hhdCBw b2xpY3kgaXMgd2FudGVkIGhlcmUKPiArICAgICAgICAgKiAgIyBkZXBlbmRpbmcgb24gdGhlIFhT TSBxdWVyeSwgb3B0aW9uYWxseSBjcmVhdGUgdGhpcyBtYXBwaW5nIGFzCj4gKyAgICAgICAgICog ICAgX3dyaXRlLW9ubHlfIG9uIHBsYXRmb3JtcyB0aGF0IGNhbiBzdXBwb3J0IGl0Lgo+ICsgICAg ICAgICAqICAgIChlZy4gSW50ZWwgRVBUL0FNRCBOUFQpLgo+ICsgICAgICAgICAqLwo+ICsgICAg ICAgIHJpbmdfaW5mby0+bWZuX21hcHBpbmdbaV0gPSBtYXBfZG9tYWluX3BhZ2VfZ2xvYmFsKHJp bmdfaW5mby0+bWZuc1tpXSk7Cj4gKwo+ICsgICAgICAgIGlmICggIXJpbmdfaW5mby0+bWZuX21h cHBpbmdbaV0gKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgcHJpbnRrKFhFTkxPR19FUlIg ImFyZ286IHJpbmcgKHZtJXU6JXggdm0lZCkgJXAgYXR0ZW1wdGVkIHRvIG1hcCBwYWdlIgo+ICsg ICAgICAgICAgICAgICAgICAgIiAldSBvZiAldVxuIiwgcmluZ19pbmZvLT5pZC5hZGRyLmRvbWFp bl9pZCwKPiArICAgICAgICAgICAgICAgICAgIHJpbmdfaW5mby0+aWQuYWRkci5wb3J0LCByaW5n X2luZm8tPmlkLnBhcnRuZXIsIHJpbmdfaW5mbywKPiArICAgICAgICAgICAgICAgICAgIGksIHJp bmdfaW5mby0+bm1mbnMpOwo+ICsgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKPiArICAgICAg ICB9Cj4gKyAgICAgICAgYXJnb19kcHJpbnRrKCJtYXBwaW5nIHBhZ2UgJSJQUklfbWZuIiB0byAl cFxuIiwKPiArICAgICAgICAgICAgICAgbWZuX3gocmluZ19pbmZvLT5tZm5zW2ldKSwgcmluZ19p bmZvLT5tZm5fbWFwcGluZ1tpXSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKCBwYWdlICkKPiAr ICAgICAgICAqcGFnZSA9IHJpbmdfaW5mby0+bWZuX21hcHBpbmdbaV07Cj4gKyAgICByZXR1cm4g MDsKPiArfQo+ICsKPiArLyogY2FsbGVyIG11c3QgaGF2ZSBMMyBvciBXKEwyKSAqLwo+ICtzdGF0 aWMgaW50Cj4gK2FyZ29fdXBkYXRlX3R4X3B0cihzdHJ1Y3QgYXJnb19yaW5nX2luZm8gKnJpbmdf aW5mbywgdWludDMyX3QgdHhfcHRyKQo+ICt7Cj4gKyAgICB1aW50OF90ICpkc3Q7Cj4gKyAgICB1 aW50MzJfdCAqcDsKPiArICAgIGludCByZXQ7Cj4gKwo+ICsgICAgcmV0ID0gYXJnb19yaW5nX21h cF9wYWdlKHJpbmdfaW5mbywgMCwgJmRzdCk7Cj4gKyAgICBpZiAoIHJldCApCj4gKyAgICAgICAg cmV0dXJuIHJldDsKPiArCj4gKyAgICBwID0gKHVpbnQzMl90ICopKGRzdCArIG9mZnNldG9mKGFy Z29fcmluZ190LCB0eF9wdHIpKTsKPiArICAgIHdyaXRlX2F0b21pYyhwLCB0eF9wdHIpOwo+ICsg ICAgbWIoKTsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICAvKgo+ICAgKiBwZW5kaW5nCj4g ICAqLwo+IEBAIC0yMzEsNiArMzE5LDM4OCBAQCBhcmdvX3JpbmdfcmVtb3ZlX2luZm8oc3RydWN0 IGRvbWFpbiAqZCwgc3RydWN0IGFyZ29fcmluZ19pbmZvICpyaW5nX2luZm8pCj4gICAgICB4ZnJl ZShyaW5nX2luZm8pOwo+ICB9Cj4gIAo+ICsvKgo+ICsgKiByaW5nCj4gKyAqLwo+ICsKPiArc3Rh dGljIGludAo+ICthcmdvX2ZpbmRfcmluZ19tZm4oc3RydWN0IGRvbWFpbiAqZCwgYXJnb19wZm5f dCBwZm4sIG1mbl90ICptZm4pCgpJIHRoaW5rIHlvdSBtZWFuIGdmbiBpbnN0ZWFkIG9mIHBmbiwg aGVyZSBhbmQgYmVsb3cuIEFsc28gSSdtIHVuc3VyZQp3aHkgeW91IG5lZWQgYSBuZXcgdHlwZSBm b3IgYXJnbywgaXQncyBpdCBmaW5lIHRvIGp1c3QgdXNlIHVpbnQ2NF90PwoKPiArewo+ICsgICAg cDJtX3R5cGVfdCBwMm10Owo+ICsgICAgaW50IHJldCA9IDA7Cj4gKwo+ICsjaWZkZWYgQ09ORklH X1g4Ngo+ICsgICAgKm1mbiA9IGdldF9nZm5fdW5zaGFyZShkLCBwZm4sICZwMm10KTsKCklzIHRo aXMgc3VwcG9zZWQgdG8gd29yayBmb3IgUFYgZ3Vlc3RzPwoKPiArI2Vsc2UKPiArICAgICptZm4g PSBwMm1fbG9va3VwKGQsIF9nZm4ocGZuKSwgJnAybXQpOwo+ICsjZW5kaWYKPiArCj4gKyAgICBp ZiAoICFtZm5fdmFsaWQoKm1mbikgKQo+ICsgICAgICAgIHJldCA9IC1FSU5WQUw7Cj4gKyNpZmRl ZiBDT05GSUdfWDg2Cj4gKyAgICBlbHNlIGlmICggcDJtX2lzX3BhZ2luZyhwMm10KSB8fCAocDJt dCA9PSBwMm1fcmFtX2xvZ2RpcnR5KSApCj4gKyAgICAgICAgcmV0ID0gLUVBR0FJTjsKPiArI2Vu ZGlmCj4gKyAgICBlbHNlIGlmICggKHAybXQgIT0gcDJtX3JhbV9ydykgfHwKPiArICAgICAgICAg ICAgICAhZ2V0X3BhZ2VfYW5kX3R5cGUobWZuX3RvX3BhZ2UoKm1mbiksIGQsIFBHVF93cml0YWJs ZV9wYWdlKSApCj4gKyAgICAgICAgcmV0ID0gLUVJTlZBTDsKPiArCj4gKyNpZmRlZiBDT05GSUdf WDg2Cj4gKyAgICBwdXRfZ2ZuKGQsIHBmbik7CgpJZiB5b3UgZG8gdGhpcyBwdXRfZ2ZuIGhlcmUs IGJ5IHRoZSB0aW1lIHlvdSBjaGVjayB0aGF0IHRoZSBnZm4gLT4gbWZuCm1hdGNoZXMgeW91ciBl eHBlY3RhdGlvbnMgdGhlIGd1ZXN0IG1pZ2h0IGhhdmUgc29tZWhvdyBjaGFuZ2VkIHRoZSBnZm4K LT4gbWZuIG1hcHBpbmcgYWxyZWFkeSAoZm9yIGV4YW1wbGUgYnkgYmFsbG9vbmluZyBkb3duIG1l bW9yeT8pCgo+ICsjZW5kaWYKPiArCj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50Cj4gK2FyZ29fZmluZF9yaW5nX21mbnMoc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IGFy Z29fcmluZ19pbmZvICpyaW5nX2luZm8sCj4gKyAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg bnBhZ2UsIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oYXJnb19wZm5fdCkgcGZuX2huZCwKPiArICAg ICAgICAgICAgICAgICAgICB1aW50MzJfdCBsZW4pCj4gK3sKPiArICAgIGludCBpOwo+ICsgICAg aW50IHJldCA9IDA7Cj4gKwo+ICsgICAgaWYgKCAobnBhZ2UgPDwgUEFHRV9TSElGVCkgPCBsZW4g KQo+ICsgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ICsKPiArICAgIGlmICggcmluZ19pbmZvLT5t Zm5zICkKPiArICAgIHsKPiArICAgICAgICAvKgo+ICsgICAgICAgICAqIFJpbmcgYWxyZWFkeSBl eGlzdGVkLiBDaGVjayBpZiBpdCdzIHRoZSBzYW1lIHJpbmcsCj4gKyAgICAgICAgICogaS5lLiBz YW1lIG51bWJlciBvZiBwYWdlcyBhbmQgYWxsIHRyYW5zbGF0ZWQgZ3BmbnMgc3RpbGwKPiArICAg ICAgICAgKiB0cmFuc2xhdGluZyB0byB0aGUgc2FtZSBtZm5zCj4gKyAgICAgICAgICovCj4gKyAg ICAgICAgaWYgKCByaW5nX2luZm8tPm5wYWdlICE9IG5wYWdlICkKPiArICAgICAgICAgICAgaSA9 IHJpbmdfaW5mby0+bm1mbnMgKyAxOyAvKiBmb3JjZXMgcmUtcmVnaXN0ZXIgYmVsb3cgKi8KPiAr ICAgICAgICBlbHNlCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8 IHJpbmdfaW5mby0+bm1mbnM7IGkrKyApCj4gKyAgICAgICAgICAgIHsKPiArICAgICAgICAgICAg ICAgIGFyZ29fcGZuX3QgcGZuOwo+ICsgICAgICAgICAgICAgICAgbWZuX3QgbWZuOwo+ICsKPiAr ICAgICAgICAgICAgICAgIHJldCA9IGNvcHlfZnJvbV9ndWVzdF9vZmZzZXRfZXJybm8oJnBmbiwg cGZuX2huZCwgaSwgMSk7Cj4gKyAgICAgICAgICAgICAgICBpZiAoIHJldCApCj4gKyAgICAgICAg ICAgICAgICAgICAgYnJlYWs7Cj4gKwo+ICsgICAgICAgICAgICAgICAgcmV0ID0gYXJnb19maW5k X3JpbmdfbWZuKGQsIHBmbiwgJm1mbik7Cj4gKyAgICAgICAgICAgICAgICBpZiAoIHJldCApCj4g KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKwo+ICsgICAgICAgICAgICAgICAgaWYgKCBt Zm5feChtZm4pICE9IG1mbl94KHJpbmdfaW5mby0+bWZuc1tpXSkgKQo+ICsgICAgICAgICAgICAg ICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGlm ICggaSAhPSByaW5nX2luZm8tPm5tZm5zICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIHBy aW50ayhYRU5MT0dfSU5GTyAiYXJnbzogdm0ldSByZS1yZWdpc3RlcmluZyBleGlzdGluZyBhcmdv IHJpbmciCj4gKyAgICAgICAgICAgICAgICAgICAiICh2bSV1OiV4IHZtJWQpLCBjbGVhcmluZyBN Rk4gbGlzdFxuIiwKPiArICAgICAgICAgICAgICAgICAgIGN1cnJlbnQtPmRvbWFpbi0+ZG9tYWlu X2lkLCByaW5nX2luZm8tPmlkLmFkZHIuZG9tYWluX2lkLAo+ICsgICAgICAgICAgICAgICAgICAg cmluZ19pbmZvLT5pZC5hZGRyLnBvcnQsIHJpbmdfaW5mby0+aWQucGFydG5lcik7Cj4gKwo+ICsg ICAgICAgICAgICBhcmdvX3JpbmdfcmVtb3ZlX21mbnMoZCwgcmluZ19pbmZvKTsKPiArICAgICAg ICAgICAgQVNTRVJUKCFyaW5nX2luZm8tPm1mbnMpOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiAr Cj4gKyAgICBpZiAoICFyaW5nX2luZm8tPm1mbnMgKQo+ICsgICAgewo+ICsgICAgICAgIG1mbl90 ICptZm5zOwo+ICsgICAgICAgIHVpbnQ4X3QgKiptZm5fbWFwcGluZzsKPiArCj4gKyAgICAgICAg bWZucyA9IHhtYWxsb2NfYXJyYXkobWZuX3QsIG5wYWdlKTsKPiArICAgICAgICBpZiAoICFtZm5z ICkKPiArICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsgICAgICAgIGZvciAoIGkg PSAwOyBpIDwgbnBhZ2U7IGkrKyApCj4gKyAgICAgICAgICAgIG1mbnNbaV0gPSBJTlZBTElEX01G TjsKPiArCj4gKyAgICAgICAgbWZuX21hcHBpbmcgPSB4bWFsbG9jX2FycmF5KHVpbnQ4X3QgKiwg bnBhZ2UpOwo+ICsgICAgICAgIGlmICggIW1mbl9tYXBwaW5nICkKPiArICAgICAgICB7Cj4gKyAg ICAgICAgICAgIHhmcmVlKG1mbnMpOwo+ICsgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKPiAr ICAgICAgICB9Cj4gKwo+ICsgICAgICAgIHJpbmdfaW5mby0+bnBhZ2UgPSBucGFnZTsKPiArICAg ICAgICByaW5nX2luZm8tPm1mbnMgPSBtZm5zOwo+ICsgICAgICAgIHJpbmdfaW5mby0+bWZuX21h cHBpbmcgPSBtZm5fbWFwcGluZzsKPiArICAgIH0KPiArICAgIEFTU0VSVChyaW5nX2luZm8tPm5w YWdlID09IG5wYWdlKTsKPiArCj4gKyAgICBpZiAoIHJpbmdfaW5mby0+bm1mbnMgPT0gcmluZ19p bmZvLT5ucGFnZSApCj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKwo+ICsgICAgZm9yICggaSA9IHJp bmdfaW5mby0+bm1mbnM7IGkgPCByaW5nX2luZm8tPm5wYWdlOyBpKysgKQo+ICsgICAgewo+ICsg ICAgICAgIGFyZ29fcGZuX3QgcGZuOwo+ICsgICAgICAgIG1mbl90IG1mbjsKPiArCj4gKyAgICAg ICAgcmV0ID0gY29weV9mcm9tX2d1ZXN0X29mZnNldF9lcnJubygmcGZuLCBwZm5faG5kLCBpLCAx KTsKPiArICAgICAgICBpZiAoIHJldCApCj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsKPiArICAg ICAgICByZXQgPSBhcmdvX2ZpbmRfcmluZ19tZm4oZCwgcGZuLCAmbWZuKTsKPiArICAgICAgICBp ZiAoIHJldCApCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICBwcmludGsoWEVOTE9HX0VSUiAi YXJnbzogdm0ldSBwYXNzZWQgaW52YWxpZCBncGZuICUiUFJJX3hlbl9wZm4KPiArICAgICAgICAg ICAgICAgICAgICIgcmluZyAodm0ldToleCB2bSVkKSAlcCBzZXEgJWQgb2YgJWRcbiIsCj4gKyAg ICAgICAgICAgICAgICAgICBkLT5kb21haW5faWQsIHBmbiwgcmluZ19pbmZvLT5pZC5hZGRyLmRv bWFpbl9pZCwKPiArICAgICAgICAgICAgICAgICAgIHJpbmdfaW5mby0+aWQuYWRkci5wb3J0LCBy aW5nX2luZm8tPmlkLnBhcnRuZXIsCj4gKyAgICAgICAgICAgICAgICAgICByaW5nX2luZm8sIGks IHJpbmdfaW5mby0+bnBhZ2UpOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICB9Cj4g Kwo+ICsgICAgICAgIHJpbmdfaW5mby0+bWZuc1tpXSA9IG1mbjsKPiArICAgICAgICByaW5nX2lu Zm8tPm5tZm5zID0gaSArIDE7Cj4gKwo+ICsgICAgICAgIGFyZ29fZHByaW50aygiJWQ6ICUiUFJJ X3hlbl9wZm4iIC0+ICUiUFJJX21mbiJcbiIsCj4gKyAgICAgICAgICAgICAgIGksIHBmbiwgbWZu X3gocmluZ19pbmZvLT5tZm5zW2ldKSk7Cj4gKwo+ICsgICAgICAgIHJpbmdfaW5mby0+bWZuX21h cHBpbmdbaV0gPSBOVUxMOwo+ICsgICAgfQo+ICsKPiArICAgIGlmICggcmV0ICkKPiArICAgICAg ICBhcmdvX3JpbmdfcmVtb3ZlX21mbnMoZCwgcmluZ19pbmZvKTsKPiArICAgIGVsc2UKPiArICAg IHsKPiArICAgICAgICBBU1NFUlQocmluZ19pbmZvLT5ubWZucyA9PSByaW5nX2luZm8tPm5wYWdl KTsKPiArCj4gKyAgICAgICAgcHJpbnRrKFhFTkxPR19FUlIgImFyZ286IHZtJXUgcmluZyAodm0l dToleCB2bSVkKSAlcCBtZm5fbWFwcGluZyAlcCIKPiArICAgICAgICAgICAgICAgIiBucGFnZSAl ZCBubWZucyAlZFxuIiwgY3VycmVudC0+ZG9tYWluLT5kb21haW5faWQsCj4gKyAgICAgICAgICAg ICAgIHJpbmdfaW5mby0+aWQuYWRkci5kb21haW5faWQsIHJpbmdfaW5mby0+aWQuYWRkci5wb3J0 LAo+ICsgICAgICAgICAgICAgICByaW5nX2luZm8tPmlkLnBhcnRuZXIsIHJpbmdfaW5mbywgcmlu Z19pbmZvLT5tZm5fbWFwcGluZywKPiArICAgICAgICAgICAgICAgcmluZ19pbmZvLT5ucGFnZSwg cmluZ19pbmZvLT5ubWZucyk7Cj4gKyAgICB9Cj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ ICtzdGF0aWMgc3RydWN0IGFyZ29fcmluZ19pbmZvICoKPiArYXJnb19yaW5nX2ZpbmRfaW5mbyhj b25zdCBzdHJ1Y3QgZG9tYWluICpkLCBjb25zdCBzdHJ1Y3QgYXJnb19yaW5nX2lkICppZCkKPiAr ewo+ICsgICAgdWludDE2X3QgaGFzaDsKPiArICAgIHN0cnVjdCBobGlzdF9ub2RlICpub2RlOwo+ ICsgICAgc3RydWN0IGFyZ29fcmluZ19pbmZvICpyaW5nX2luZm87Cj4gKwo+ICsgICAgQVNTRVJU KHJ3X2lzX2xvY2tlZCgmZC0+YXJnby0+bG9jaykpOwo+ICsKPiArICAgIGhhc2ggPSBhcmdvX2hh c2hfZm4oaWQpOwo+ICsKPiArICAgIGFyZ29fZHByaW50aygiZC0+YXJnbz0lcCwgZC0+YXJnby0+ cmluZ19oYXNoWyVkXT0lcCBpZD0lcFxuIiwKPiArICAgICAgICAgICAgICAgICBkLT5hcmdvLCBo YXNoLCBkLT5hcmdvLT5yaW5nX2hhc2hbaGFzaF0uZmlyc3QsIGlkKTsKPiArICAgIGFyZ29fZHBy aW50aygiaWQuYWRkci5wb3J0PSVkIGlkLmFkZHIuZG9tYWluPXZtJXUiCj4gKyAgICAgICAgICAg ICAgICAgIiBpZC5hZGRyLnBhcnRuZXI9dm0lZFxuIiwKPiArICAgICAgICAgICAgICAgICBpZC0+ YWRkci5wb3J0LCBpZC0+YWRkci5kb21haW5faWQsIGlkLT5wYXJ0bmVyKTsKPiArCj4gKyAgICBo bGlzdF9mb3JfZWFjaF9lbnRyeShyaW5nX2luZm8sIG5vZGUsICZkLT5hcmdvLT5yaW5nX2hhc2hb aGFzaF0sIG5vZGUpCj4gKyAgICB7Cj4gKyAgICAgICAgYXJnb19yaW5nX2lkX3QgKmNtcGlkID0g JnJpbmdfaW5mby0+aWQ7Cj4gKwo+ICsgICAgICAgIGlmICggY21waWQtPmFkZHIucG9ydCA9PSBp ZC0+YWRkci5wb3J0ICYmCj4gKyAgICAgICAgICAgICBjbXBpZC0+YWRkci5kb21haW5faWQgPT0g aWQtPmFkZHIuZG9tYWluX2lkICYmCj4gKyAgICAgICAgICAgICBjbXBpZC0+cGFydG5lciA9PSBp ZC0+cGFydG5lciApCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICBhcmdvX2RwcmludGsoInJp bmdfaW5mbz0lcFxuIiwgcmluZ19pbmZvKTsKPiArICAgICAgICAgICAgcmV0dXJuIHJpbmdfaW5m bzsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKyAgICBhcmdvX2RwcmludGsoIm5vIHJpbmdfaW5m byBmb3VuZFxuIik7Cj4gKwo+ICsgICAgcmV0dXJuIE5VTEw7Cj4gK30KPiArCj4gK3N0YXRpYyBs b25nCj4gK2FyZ29fcmVnaXN0ZXJfcmluZyhzdHJ1Y3QgZG9tYWluICpkLAo+ICsgICAgICAgICAg ICAgICAgICAgWEVOX0dVRVNUX0hBTkRMRV9QQVJBTShhcmdvX3JpbmdfdCkgcmluZ19obmQsCj4g KyAgICAgICAgICAgICAgICAgICBYRU5fR1VFU1RfSEFORExFX1BBUkFNKGFyZ29fcGZuX3QpIHBm bl9obmQsIHVpbnQzMl90IG5wYWdlLAo+ICsgICAgICAgICAgICAgICAgICAgYm9vbCBmYWlsX2V4 aXN0KQo+ICt7Cj4gKyAgICBzdHJ1Y3QgYXJnb19yaW5nIHJpbmc7Cj4gKyAgICBzdHJ1Y3QgYXJn b19yaW5nX2luZm8gKnJpbmdfaW5mbzsKPiArICAgIGludCByZXQgPSAwOwo+ICsgICAgYm9vbCB1 cGRhdGVfdHhfcHRyID0gMDsKCmJvb2wgdXNlcyB0cnVlL2ZhbHNlLgoKPiArICAgIHVpbnQ2NF90 IGRzdF9kb21haW5fY29va2llID0gMDsKPiArCj4gKyAgICBpZiAoICEoZ3Vlc3RfaGFuZGxlX2lz X2FsaWduZWQocmluZ19obmQsIH5QQUdFX01BU0spKSApCj4gKyAgICAgICAgcmV0dXJuIC1FSU5W QUw7Cj4gKwo+ICsgICAgcmVhZF9sb2NrICgmYXJnb19sb2NrKTsKICAgICAgICAgICAgICAgIF4g ZXh0cmEgc3BhY2UuCgo+ICsKPiArICAgIGRvIHsKPiArICAgICAgICBpZiAoICFkLT5hcmdvICkK PiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIHJldCA9IC1FTk9ERVY7Cj4gKyAgICAgICAgICAg IGJyZWFrOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgaWYgKCBjb3B5X2Zyb21fZ3Vlc3Qo JnJpbmcsIHJpbmdfaG5kLCAxKSApCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICByZXQgPSAt RUZBVUxUOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAg IGlmICggcmluZy5tYWdpYyAhPSBBUkdPX1JJTkdfTUFHSUMgKQo+ICsgICAgICAgIHsKPiArICAg ICAgICAgICAgcmV0ID0gLUVJTlZBTDsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAg fQo+ICsKPiArICAgICAgICBpZiAoIChyaW5nLmxlbiA8IChzaXplb2Yoc3RydWN0IGFyZ29fcmlu Z19tZXNzYWdlX2hlYWRlcikKPiArICAgICAgICAgICAgICAgICAgICAgICAgICArIEFSR09fUk9V TkRVUCgxKSArIEFSR09fUk9VTkRVUCgxKSkpICAgfHwKPiArICAgICAgICAgICAgIChBUkdPX1JP VU5EVVAocmluZy5sZW4pICE9IHJpbmcubGVuKSApCj4gKyAgICAgICAgewo+ICsgICAgICAgICAg ICByZXQgPSAtRUlOVkFMOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICB9Cj4gKwo+ ICsgICAgICAgIGlmICggcmluZy5sZW4gPiBBUkdPX01BWF9SSU5HX1NJWkUgKQo+ICsgICAgICAg IHsKPiArICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsKPiArICAgICAgICAgICAgYnJlYWs7Cj4g KyAgICAgICAgfQo+ICsKPiArICAgICAgICBpZiAoIHJpbmcuaWQucGFydG5lciA9PSBBUkdPX0RP TUlEX0FOWSApCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICByZXQgPSB4c21fYXJnb19yZWdp c3Rlcl9hbnlfc291cmNlKGQsIGFyZ29fbWFjX2Jvb3RwYXJhbV9lbmZvcmNpbmcpOwo+ICsgICAg ICAgICAgICBpZiAoIHJldCApCj4gKyAgICAgICAgICAgICAgICBicmVhazsKPiArICAgICAgICB9 Cj4gKyAgICAgICAgZWxzZQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgc3RydWN0IGRvbWFp biAqZHN0X2QgPSBnZXRfZG9tYWluX2J5X2lkKHJpbmcuaWQucGFydG5lcik7CgpNaXNzaW5nIG5l d2xpbmUuCgo+ICsgICAgICAgICAgICBpZiAoICFkc3RfZCApCj4gKyAgICAgICAgICAgIHsKPiAr ICAgICAgICAgICAgICAgIGFyZ29fZHByaW50aygiIWRzdF9kLCBFQ09OTlJFRlVTRURcbiIpOwo+ ICsgICAgICAgICAgICAgICAgcmV0ID0gLUVDT05OUkVGVVNFRDsKPiArICAgICAgICAgICAgICAg IGJyZWFrOwo+ICsgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICByZXQgPSB4c21fYXJn b19yZWdpc3Rlcl9zaW5nbGVfc291cmNlKGQsIGRzdF9kKTsKPiArICAgICAgICAgICAgaWYgKCBy ZXQgKQo+ICsgICAgICAgICAgICB7Cj4gKyAgICAgICAgICAgICAgICBwdXRfZG9tYWluKGRzdF9k KTsKPiArICAgICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAgICB9Cj4gKwo+ICsgICAg ICAgICAgICBpZiAoICFkc3RfZC0+YXJnbyApCj4gKyAgICAgICAgICAgIHsKPiArICAgICAgICAg ICAgICAgIGFyZ29fZHByaW50aygiIWRzdF9kLT5hcmdvLCBFQ09OTlJFRlVTRURcbiIpOwo+ICsg ICAgICAgICAgICAgICAgcmV0ID0gLUVDT05OUkVGVVNFRDsKPiArICAgICAgICAgICAgICAgIHB1 dF9kb21haW4oZHN0X2QpOwo+ICsgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgICAg IH0KPiArCj4gKyAgICAgICAgICAgIGRzdF9kb21haW5fY29va2llID0gZHN0X2QtPmFyZ28tPmRv bWFpbl9jb29raWU7Cj4gKwo+ICsgICAgICAgICAgICBwdXRfZG9tYWluKGRzdF9kKTsKPiArICAg ICAgICB9Cj4gKwo+ICsgICAgICAgIHJpbmcuaWQuYWRkci5kb21haW5faWQgPSBkLT5kb21haW5f aWQ7Cj4gKyAgICAgICAgaWYgKCBjb3B5X2ZpZWxkX3RvX2d1ZXN0KHJpbmdfaG5kLCAmcmluZywg aWQpICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Cj4gKyAgICAg ICAgICAgIGJyZWFrOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgLyoKPiArICAgICAgICAg KiBubyBuZWVkIGZvciBhIGxvY2sgeWV0LCBiZWNhdXNlIG9ubHkgd2Uga25vdyBhYm91dCB0aGlz Cj4gKyAgICAgICAgICogc2V0IHRoZSB0eCBwb2ludGVyIGlmIGl0IGxvb2tzIGJvZ3VzICh3ZSBk b24ndCByZXNldCBpdAo+ICsgICAgICAgICAqIGJlY2F1c2UgdGhpcyBtaWdodCBiZSBhIHJlLXJl Z2lzdGVyIGFmdGVyIFM0KQo+ICsgICAgICAgICAqLwo+ICsKPiArICAgICAgICBpZiAoIHJpbmcu dHhfcHRyID49IHJpbmcubGVuIHx8Cj4gKyAgICAgICAgICAgICBBUkdPX1JPVU5EVVAocmluZy50 eF9wdHIpICE9IHJpbmcudHhfcHRyICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIC8qCj4g KyAgICAgICAgICAgICAqIFNpbmNlIHRoZSByaW5nIGlzIGEgbWVzcywgYXR0ZW1wdCB0byBmbHVz aCB0aGUgY29udGVudHMgb2YgaXQKPiArICAgICAgICAgICAgICogaGVyZSBieSBzZXR0aW5nIHRo ZSB0eF9wdHIgdG8gdGhlIG5leHQgYWxpZ25lZCBtZXNzYWdlIHNsb3QgcGFzdAo+ICsgICAgICAg ICAgICAgKiB0aGUgbGF0ZXN0IHJ4X3B0ciB3ZSBoYXZlIG9ic2VydmVkLiBIYW5kbGUgcmluZyB3 cmFwIGNvcnJlY3RseS4KPiArICAgICAgICAgICAgICovCj4gKyAgICAgICAgICAgIHJpbmcudHhf cHRyID0gQVJHT19ST1VORFVQKHJpbmcucnhfcHRyKTsKPiArCj4gKyAgICAgICAgICAgIGlmICgg cmluZy50eF9wdHIgPj0gcmluZy5sZW4gKQo+ICsgICAgICAgICAgICAgICAgcmluZy50eF9wdHIg PSAwOwo+ICsKPiArICAgICAgICAgICAgLyogcmluZy50eF9wdHIgd2lsbCBiZSB3cml0dGVuIGJh Y2sgdG8gdGhlIGd1ZXN0IHJpbmcgYmVsb3cuICovCj4gKyAgICAgICAgICAgIHVwZGF0ZV90eF9w dHIgPSAxOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgLyogVyhMMikgcHJvdGVjdHMgYWxs IHRoZSBlbGVtZW50cyBvZiB0aGUgZG9tYWluJ3MgcmluZ19pbmZvICovCj4gKyAgICAgICAgd3Jp dGVfbG9jaygmZC0+YXJnby0+bG9jayk7CgpJIGRvbid0IHVuZGVyc3RhbmQgdGhpcyBXKEwyKSBu b21lbmNsYXR1cmUsIGlzIHRoaXMgZXhwbGFpbiBzb21ld2hlcmU/CgpBbHNvIHRoZXJlJ3Mgbm8g c3VjaCBjb21tZW50IHdoZW4geW91IHRha2UgdGhlIGdsb2JhbCBhcmdvX2xvY2sgYWJvdmUuCgo+ ICsKPiArICAgICAgICBkbyB7Cj4gKyAgICAgICAgICAgIHJpbmdfaW5mbyA9IGFyZ29fcmluZ19m aW5kX2luZm8oZCwgJnJpbmcuaWQpOwo+ICsKPiArICAgICAgICAgICAgaWYgKCAhcmluZ19pbmZv ICkKPiArICAgICAgICAgICAgewo+ICsgICAgICAgICAgICAgICAgdWludDE2X3QgaGFzaDsKPiAr Cj4gKyAgICAgICAgICAgICAgICByaW5nX2luZm8gPSB4bWFsbG9jKHN0cnVjdCBhcmdvX3Jpbmdf aW5mbyk7Cj4gKyAgICAgICAgICAgICAgICBpZiAoICFyaW5nX2luZm8gKQo+ICsgICAgICAgICAg ICAgICAgewo+ICsgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FTk9NRU07Cj4gKyAgICAgICAg ICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAg ICAgICAgc3Bpbl9sb2NrX2luaXQoJnJpbmdfaW5mby0+bG9jayk7Cj4gKwo+ICsgICAgICAgICAg ICAgICAgcmluZ19pbmZvLT5tZm5zID0gTlVMTDsKPiArICAgICAgICAgICAgICAgIHJpbmdfaW5m by0+bnBhZ2UgPSAwOwo+ICsgICAgICAgICAgICAgICAgcmluZ19pbmZvLT5tZm5fbWFwcGluZyA9 IE5VTEw7Cj4gKyAgICAgICAgICAgICAgICByaW5nX2luZm8tPmxlbiA9IDA7Cj4gKyAgICAgICAg ICAgICAgICByaW5nX2luZm8tPm5tZm5zID0gMDsKPiArICAgICAgICAgICAgICAgIHJpbmdfaW5m by0+dHhfcHRyID0gMDsKPiArICAgICAgICAgICAgICAgIHJpbmdfaW5mby0+cGFydG5lcl9jb29r aWUgPSBkc3RfZG9tYWluX2Nvb2tpZTsKPiArCj4gKyAgICAgICAgICAgICAgICByaW5nX2luZm8t PmlkID0gcmluZy5pZDsKPiArICAgICAgICAgICAgICAgIElOSVRfSExJU1RfSEVBRCgmcmluZ19p bmZvLT5wZW5kaW5nKTsKPiArCj4gKyAgICAgICAgICAgICAgICBoYXNoID0gYXJnb19oYXNoX2Zu KCZyaW5nX2luZm8tPmlkKTsKPiArICAgICAgICAgICAgICAgIGhsaXN0X2FkZF9oZWFkKCZyaW5n X2luZm8tPm5vZGUsICZkLT5hcmdvLT5yaW5nX2hhc2hbaGFzaF0pOwo+ICsKPiArICAgICAgICAg ICAgICAgIHByaW50ayhYRU5MT0dfSU5GTyAiYXJnbzogdm0ldSByZWdpc3RlcmluZyByaW5nICh2 bSV1OiV4IHZtJWQpXG4iLAo+ICsgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQtPmRvbWFp bi0+ZG9tYWluX2lkLCByaW5nLmlkLmFkZHIuZG9tYWluX2lkLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgIHJpbmcuaWQuYWRkci5wb3J0LCByaW5nLmlkLnBhcnRuZXIpOwo+ICsgICAgICAgICAg ICB9Cj4gKyAgICAgICAgICAgIGVsc2UKPiArICAgICAgICAgICAgewo+ICsgICAgICAgICAgICAg ICAgLyoKPiArICAgICAgICAgICAgICAgICAqIElmIHRoZSBjYWxsZXIgc3BlY2lmaWVkIHRoYXQg dGhlIHJpbmcgbXVzdCBub3QgYWxyZWFkeSBleGlzdCwKPiArICAgICAgICAgICAgICAgICAqIGZh aWwgYXQgYXR0ZW1wdCB0byBhZGQgYSBjb21wbGV0ZWQgcmluZyB3aGljaCBhbHJlYWR5IGV4aXN0 cy4KPiArICAgICAgICAgICAgICAgICAqLwo+ICsgICAgICAgICAgICAgICAgaWYgKCBmYWlsX2V4 aXN0ICYmIHJpbmdfaW5mby0+bGVuICkKPiArICAgICAgICAgICAgICAgIHsKPiArICAgICAgICAg ICAgICAgICAgICByZXQgPSAtRUVYSVNUOwo+ICsgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ ICsgICAgICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgICAgIHByaW50ayhYRU5MT0df SU5GTwo+ICsgICAgICAgICAgICAgICAgICAgICJhcmdvOiB2bSV1IHJlLXJlZ2lzdGVyaW5nIGV4 aXN0aW5nIHJpbmcgKHZtJXU6JXggdm0lZClcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgIGN1 cnJlbnQtPmRvbWFpbi0+ZG9tYWluX2lkLCByaW5nLmlkLmFkZHIuZG9tYWluX2lkLAo+ICsgICAg ICAgICAgICAgICAgICAgICByaW5nLmlkLmFkZHIucG9ydCwgcmluZy5pZC5wYXJ0bmVyKTsKPiAr ICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgLyogU2luY2Ugd2UgaG9sZCBXKEwyKSwg dGhlcmUgaXMgbm8gbmVlZCB0byB0YWtlIEwzIGhlcmUgKi8KPiArICAgICAgICAgICAgcmluZ19p bmZvLT50eF9wdHIgPSByaW5nLnR4X3B0cjsKPiArCj4gKyAgICAgICAgICAgIHJldCA9IGFyZ29f ZmluZF9yaW5nX21mbnMoZCwgcmluZ19pbmZvLCBucGFnZSwgcGZuX2huZCwgcmluZy5sZW4pOwo+ ICsgICAgICAgICAgICBpZiAoICFyZXQgKQo+ICsgICAgICAgICAgICAgICAgcmV0ID0gdXBkYXRl X3R4X3B0ciA/IGFyZ29fdXBkYXRlX3R4X3B0cihyaW5nX2luZm8sIHJpbmcudHhfcHRyKQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFyZ29fcmluZ19tYXBfcGFnZShy aW5nX2luZm8sIDAsIE5VTEwpOwo+ICsgICAgICAgICAgICBpZiAoICFyZXQgKQo+ICsgICAgICAg ICAgICAgICAgcmluZ19pbmZvLT5sZW4gPSByaW5nLmxlbjsKPiArCj4gKyAgICAgICAgfSB3aGls ZSAoIDAgKTsKCldoeSB0aGlzIHVzZWxlc3MgbG9vcD8gSnVzdCBhZGRzIHRvIGluZGVudGF0aW9u LgoKPiArCj4gKyAgICAgICAgd3JpdGVfdW5sb2NrKCZkLT5hcmdvLT5sb2NrKTsKPiArCj4gKyAg ICB9IHdoaWxlICggMCApOwoKU2FtZSBoZXJlLgoKPiArCj4gKyAgICByZWFkX3VubG9jaygmYXJn b19sb2NrKTsKPiArCj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICBsb25nCj4gIGRvX2Fy Z29fbWVzc2FnZV9vcChpbnQgY21kLCBYRU5fR1VFU1RfSEFORExFX1BBUkFNKHZvaWQpIGFyZzEs Cj4gICAgICAgICAgICAgICAgICAgICBYRU5fR1VFU1RfSEFORExFX1BBUkFNKHZvaWQpIGFyZzIs Cj4gQEAgLTI1Myw2ICs3MjMsMzQgQEAgZG9fYXJnb19tZXNzYWdlX29wKGludCBjbWQsIFhFTl9H VUVTVF9IQU5ETEVfUEFSQU0odm9pZCkgYXJnMSwKPiAgCj4gICAgICBzd2l0Y2ggKGNtZCkKPiAg ICAgIHsKPiArICAgIGNhc2UgQVJHT19NRVNTQUdFX09QX3JlZ2lzdGVyX3Jpbmc6Cj4gKyAgICB7 Cj4gKyAgICAgICAgWEVOX0dVRVNUX0hBTkRMRV9QQVJBTShhcmdvX3JpbmdfdCkgcmluZ19obmQg PQo+ICsgICAgICAgICAgICBndWVzdF9oYW5kbGVfY2FzdChhcmcxLCBhcmdvX3JpbmdfdCk7Cj4g KyAgICAgICAgWEVOX0dVRVNUX0hBTkRMRV9QQVJBTShhcmdvX3Bmbl90KSBwZm5faG5kID0KPiAr ICAgICAgICAgICAgZ3Vlc3RfaGFuZGxlX2Nhc3QoYXJnMiwgYXJnb19wZm5fdCk7Cj4gKyAgICAg ICAgdWludDMyX3QgbnBhZ2UgPSBhcmczOwo+ICsgICAgICAgIGJvb2wgZmFpbF9leGlzdCA9IGFy ZzQgJiBBUkdPX1JFR0lTVEVSX0ZMQUdfRkFJTF9FWElTVDsKPiArCj4gKyAgICAgICAgaWYgKCB1 bmxpa2VseSghZ3Vlc3RfaGFuZGxlX29rYXkocmluZ19obmQsIDEpKSApCj4gKyAgICAgICAgICAg IGJyZWFrOwo+ICsgICAgICAgIGlmICggdW5saWtlbHkobnBhZ2UgPiAoQVJHT19NQVhfUklOR19T SVpFID4+IFBBR0VfU0hJRlQpKSApCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICByYyA9IC1F SU5WQUw7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIH0KPiArICAgICAgICBpZiAo IHVubGlrZWx5KCFndWVzdF9oYW5kbGVfb2theShwZm5faG5kLCBucGFnZSkpICkKPiArICAgICAg ICAgICAgYnJlYWs7Cj4gKyAgICAgICAgLyogYXJnNDogcmVzZXJ2ZSBjdXJyZW50bHktdW5kZWZp bmVkIGJpdHMsIHJlcXVpcmUgemVyby4gICovCj4gKyAgICAgICAgaWYgKCB1bmxpa2VseShhcmc0 ICYgfkFSR09fUkVHSVNURVJfRkxBR19NQVNLKSApCj4gKyAgICAgICAgewo+ICsgICAgICAgICAg ICByYyA9IC1FSU5WQUw7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIH0KPiArCj4g KyAgICAgICAgcmMgPSBhcmdvX3JlZ2lzdGVyX3JpbmcoZCwgcmluZ19obmQsIHBmbl9obmQsIG5w YWdlLCBmYWlsX2V4aXN0KTsKPiArICAgICAgICBicmVhazsKPiArICAgIH0KPiAgICAgIGRlZmF1 bHQ6Cj4gICAgICAgICAgcmMgPSAtRU5PU1lTOwo+ICAgICAgICAgIGJyZWFrOwo+IGRpZmYgLS1n aXQgYS94ZW4vaW5jbHVkZS9hc20tYXJtL2d1ZXN0X2FjY2Vzcy5oIGIveGVuL2luY2x1ZGUvYXNt LWFybS9ndWVzdF9hY2Nlc3MuaAo+IGluZGV4IDExMzdjNTQuLjk4MDA2ZjggMTAwNjQ0Cj4gLS0t IGEveGVuL2luY2x1ZGUvYXNtLWFybS9ndWVzdF9hY2Nlc3MuaAo+ICsrKyBiL3hlbi9pbmNsdWRl L2FzbS1hcm0vZ3Vlc3RfYWNjZXNzLmgKPiBAQCAtMzQsNiArMzQsOCBAQCBpbnQgYWNjZXNzX2d1 ZXN0X21lbW9yeV9ieV9pcGEoc3RydWN0IGRvbWFpbiAqZCwgcGFkZHJfdCBpcGEsIHZvaWQgKmJ1 ZiwKPiAgLyogSXMgdGhlIGd1ZXN0IGhhbmRsZSBhIE5VTEwgcmVmZXJlbmNlPyAqLwo+ICAjZGVm aW5lIGd1ZXN0X2hhbmRsZV9pc19udWxsKGhuZCkgICAgICAgICgoaG5kKS5wID09IE5VTEwpCj4g IAo+ICsjZGVmaW5lIGd1ZXN0X2hhbmRsZV9pc19hbGlnbmVkKGhuZCwgbWFzaykgKCEoKHVpbnRw dHJfdCkoaG5kKS5wICYgKG1hc2spKSkKPiArCj4gIC8qIE9mZnNldCB0aGUgZ2l2ZW4gZ3Vlc3Qg aGFuZGxlIGludG8gdGhlIGFycmF5IGl0IHJlZmVycyB0by4gKi8KPiAgI2RlZmluZSBndWVzdF9o YW5kbGVfYWRkX29mZnNldChobmQsIG5yKSAoKGhuZCkucCArPSAobnIpKQo+ICAjZGVmaW5lIGd1 ZXN0X2hhbmRsZV9zdWJ0cmFjdF9vZmZzZXQoaG5kLCBucikgKChobmQpLnAgLT0gKG5yKSkKPiBk aWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9ndWVzdF9hY2Nlc3MuaCBiL3hlbi9pbmNs dWRlL2FzbS14ODYvZ3Vlc3RfYWNjZXNzLmgKPiBpbmRleCA5MzkxY2QzLi5lOWQyNWQ2IDEwMDY0 NAo+IC0tLSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvZ3Vlc3RfYWNjZXNzLmgKPiArKysgYi94ZW4v aW5jbHVkZS9hc20teDg2L2d1ZXN0X2FjY2Vzcy5oCj4gQEAgLTUwLDYgKzUwLDggQEAKPiAgLyog SXMgdGhlIGd1ZXN0IGhhbmRsZSBhIE5VTEwgcmVmZXJlbmNlPyAqLwo+ICAjZGVmaW5lIGd1ZXN0 X2hhbmRsZV9pc19udWxsKGhuZCkgICAgICAgICgoaG5kKS5wID09IE5VTEwpCj4gIAo+ICsjZGVm aW5lIGd1ZXN0X2hhbmRsZV9pc19hbGlnbmVkKGhuZCwgbWFzaykgKCEoKHVpbnRwdHJfdCkoaG5k KS5wICYgKG1hc2spKSkKPiArCj4gIC8qIE9mZnNldCB0aGUgZ2l2ZW4gZ3Vlc3QgaGFuZGxlIGlu dG8gdGhlIGFycmF5IGl0IHJlZmVycyB0by4gKi8KPiAgI2RlZmluZSBndWVzdF9oYW5kbGVfYWRk X29mZnNldChobmQsIG5yKSAoKGhuZCkucCArPSAobnIpKQo+ICAjZGVmaW5lIGd1ZXN0X2hhbmRs ZV9zdWJ0cmFjdF9vZmZzZXQoaG5kLCBucikgKChobmQpLnAgLT0gKG5yKSkKPiBkaWZmIC0tZ2l0 IGEveGVuL2luY2x1ZGUvcHVibGljL2FyZ28uaCBiL3hlbi9pbmNsdWRlL3B1YmxpYy9hcmdvLmgK PiBpbmRleCAyMGRhYmMwLi41YWQ4ZTJiIDEwMDY0NAo+IC0tLSBhL3hlbi9pbmNsdWRlL3B1Ymxp Yy9hcmdvLmgKPiArKysgYi94ZW4vaW5jbHVkZS9wdWJsaWMvYXJnby5oCj4gQEAgLTIxLDYgKzIx LDIwIEBACj4gIAo+ICAjaW5jbHVkZSAieGVuLmgiCj4gIAo+ICsjZGVmaW5lIEFSR09fUklOR19N QUdJQyAgICAgIDB4YmQ2N2UxNjNlNzc3N2YyZlVMTAo+ICsKPiArI2RlZmluZSBBUkdPX0RPTUlE X0FOWSAgICAgICAgICAgRE9NSURfSU5WQUxJRAoKSSB0aGluayB5b3Ugc2hvdWxkIGVpdGhlciBs ZWF2ZSAxIHNwYWNlIGJldHdlZW4gdGhlIGRlZmluZSBuYW1lIGFuZAp0aGUgdmFsdWUsIG9yIGlm IHlvdSB3YW50IHRvIGFkZCBtdWx0aXBsZSBzcGFjZXMgcGxlYXNlIG1ha2UgYWxsIHRoZQpkZWZp bmUgdmFsdWVzIGFsaWduZWQgb24gdGhlIHNhbWUgY29sLgoKPiArCj4gKy8qCj4gKyAqIFRoZSBt YXhpbXVtIHNpemUgb2YgYW4gQXJnbyByaW5nIGlzIGRlZmluZWQgdG8gYmU6IDE2R0IKPiArICog IC0tIHdoaWNoIGlzIDB4MTAwMDAwMCBvciAxNjc3NzIxNiBieXRlcy4KPiArICogQSBieXRlIGlu ZGV4IGludG8gdGhlIHJpbmcgaXMgYXQgbW9zdCAyNCBiaXRzLgo+ICsgKi8KPiArI2RlZmluZSBB UkdPX01BWF9SSU5HX1NJWkUgICgxNjc3NzIxNlVMTCkKPiArCj4gKy8qIHBmbiB0eXBlOiA2NC1i aXQgb24gYWxsIGFyY2hpdGVjdHVyZXMgdG8gYWlkIGF2b2lkaW5nIGEgY29tcGF0IEFCSSAqLwo+ ICt0eXBlZGVmIHVpbnQ2NF90IGFyZ29fcGZuX3Q7Cj4gKwo+ICB0eXBlZGVmIHN0cnVjdCBhcmdv X2FkZHIKPiAgewo+ICAgICAgdWludDMyX3QgcG9ydDsKPiBAQCAtNTIsNCArNjYsNTQgQEAgdHlw ZWRlZiBzdHJ1Y3QgYXJnb19yaW5nCj4gICNlbmRpZgo+ICB9IGFyZ29fcmluZ190Owo+ICAKPiAr LyoKPiArICogTWVzc2FnZXMgb24gdGhlIHJpbmcgYXJlIHBhZGRlZCB0byAxMjggYml0cwo+ICsg KiBMZW4gaGVyZSByZWZlcnMgdG8gdGhlIGV4YWN0IGxlbmd0aCBvZiB0aGUgZGF0YSBub3QgaW5j bHVkaW5nIHRoZQo+ICsgKiAxMjggYml0IGhlYWRlci4gVGhlIG1lc3NhZ2UgdXNlcwo+ICsgKiAo KGxlbiArIDB4ZikgJiB+MHhmKSArIHNpemVvZihhcmdvX3JpbmdfbWVzc2FnZV9oZWFkZXIpIGJ5 dGVzLgo+ICsgKiBVc2luZyB0eXBlb2YoYSkgbWFrZSBjbGVhciB0aGF0IHRoaXMgZG9lcyBub3Qg dHJ1bmNhdGUgYW55IGhpZ2gtb3JkZXIgYml0cy4KPiArICovCj4gKyNkZWZpbmUgQVJHT19ST1VO RFVQKGEpICgoKGEpICsgMHhmKSAmIH4odHlwZW9mKGEpKTB4ZikKCldoeSBub3QganVzdCB1c2Ug Uk9VTkRVUD8KCkFuZCBpbiBhbnkgY2FzZSB0aGlzIHNob3VsZG4ndCBiZSBvbiB0aGUgcHVibGlj IGhlYWRlciBJTU8sIHNpbmNlIGl0J3MKbm90IHBhcnQgb2YgdGhlIGludGVyZmFjZSBBRkFJQ1Qu CgpUaGFua3MsIFJvZ2VyLgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVj dC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1k ZXZlbA==