From mboxrd@z Thu Jan 1 00:00:00 1970 From: Anthony PERARD Subject: Re: [PATCH v6.2 05/11] libxl_qmp: Implementation of libxl__ev_qmp_* Date: Fri, 16 Nov 2018 14:53:36 +0000 Message-ID: <20181116145336.GO1302@perard.uk.xensource.com> References: <23532.22098.906750.732501@mariner.uk.xensource.com> <20181115111510.11628-1-anthony.perard@citrix.com> <23533.48525.832090.502837@mariner.uk.xensource.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 1gNfVR-0007GX-Ru for xen-devel@lists.xenproject.org; Fri, 16 Nov 2018 14:54:02 +0000 Content-Disposition: inline In-Reply-To: <23533.48525.832090.502837@mariner.uk.xensource.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Ian Jackson Cc: xen-devel@lists.xenproject.org, Wei Liu List-Id: xen-devel@lists.xenproject.org T24gVGh1LCBOb3YgMTUsIDIwMTggYXQgMDY6NDA6MTNQTSArMDAwMCwgSWFuIEphY2tzb24gd3Jv dGU6Cj4gQW50aG9ueSBQRVJBUkQgd3JpdGVzICgiW1BBVENIIHY2LjIgMDUvMTFdIGxpYnhsX3Ft cDogSW1wbGVtZW50YXRpb24gb2YgbGlieGxfX2V2X3FtcF8qIik6Cj4gPiBTaWduZWQtb2ZmLWJ5 OiBBbnRob255IFBFUkFSRCA8YW50aG9ueS5wZXJhcmRAY2l0cml4LmNvbT4KPiAKPiBUaGFua3Mg Zm9yIHRoZSBhZGRpdGlvbmFsIGNvbW1lbnRzLiAgSSBnb3QgdGhvcm91Z2hseSBzdHVjayBpbi4K PiAKPiBPdmVyYWxsIHRoZSBzdHJ1Y3R1cmUgbG9va3MgYnJvYWRseSByaWdodCBhbmQgbXkgY29t bWVudHMgYXJlCj4gZ2VuZXJhbGx5IGFib3V0IGRldGFpbHMuICBBcyBtaWdodCBiZSBleHBlY3Rl ZCwgc29tZSBvZiB0aGVtIGFyZQo+IHN0eWxpc3RpYyBvciBtYXR0ZXJzIG9mIHRhc3RlLgo+IAo+ IFBsZWFzZSBmZWVsIGZyZWUgdG8gcHVzaCBiYWNrIGlmIHlvdSBkaXNhZ3JlZSB3aXRoIG1lIG9u IGFueXRoaW5nLgo+IAo+ID4gIHN0cnVjdCBsaWJ4bF9fZXZfcW1wIHsKPiA+ICAgICAgLyogY2Fs bGVyIHNob3VsZCBpbmNsdWRlIHRoaXMgaW4gdGhlaXIgb3duIHN0cnVjdCAqLwo+ID4gICAgICAv KiBjYWxsZXIgbXVzdCBmaWxsIHRoZXNlIGluLCBhbmQgdGhleSBtdXN0IGFsbCByZW1haW4gdmFs aWQgKi8KPiA+ICAgICAgbGlieGxfZG9taWQgZG9taWQ7Cj4gPiAgICAgIGxpYnhsX19ldl9xbXBf Y2FsbGJhY2sgKmNhbGxiYWNrOwo+ID4gICAgICBpbnQgZmQ7IC8qIHNldCB0byBzZW5kIGEgZmQg d2l0aCB0aGUgY29tbWFuZCwgLTEgb3RoZXJ3aXNlICovCj4gPiArCj4gCj4gVGhpcyBuYW1lIGBm ZCcgYmVjb21lcyB2ZXJ5IGNvbmZ1c2luZywgYmVjYXVzZSBtb3N0IG9mIHRoZSB0aW1lIHdpdGgK PiBxbXAgdGhlIGZkIGluIHF1ZXN0aW9uIGlzIG91ciBzb2NrZXQgdG8gcWVtdS4gIENhbiB5b3Ug cmVuYW1lIGl0ID8KPiBwYXlsb2FkX2ZkIG1heWJlID8KCnBheWxvYWRfZmQgc291bmQgZmluZSwg SSdsbCB1c2UgdGhhdC4KCj4gPiArICAgIC8qCj4gPiArICAgICAqIHJlbWFpbmluZyBmaWVsZHMg YXJlIHByaXZhdGUgdG8gbGlieGxfZXZfcW1wXyoKPiA+ICsgICAgICovCj4gPiArCj4gPiArICAg IGludCBpZDsKPiA+ICsgICAgbGlieGxfX2NhcmVmZCAqcW1wX2NmZDsKPiA+ICsgICAgbGlieGxf X2V2X2ZkIHFtcF9lZmQ7Cj4gPiArICAgIGxpYnhsX19xbXBfc3RhdGUgcW1wX3N0YXRlOwo+IAo+ IFdoYXQgcHVycG9zZSBkbyB0aGUgcW1wXyBwcmVmaXhlcyBvbiB0aGVzZSBzZXJ2ZSA/ICBJIHRo aW5rIGlmIGl0IHdlcmUKPiBtZSBJIHdvdWxkIGRyb3AgdGhlbSBhbmQgc2ltcGx5IGNhbGwgdGhl c2UgYGNmZCcgYW5kIGBlZmQnIGFuZCBgc3RhdGUnLgoKU291bmRzIGdvb2QuCgo+IAo+ID4gKy8q IC0tLS0tLS0tLS0tLSBJbXBsZW1lbnRhdGlvbiBvZiBsaWJ4bF9fZXZfcW1wIC0tLS0tLS0tLS0t LS0tLS0gKi8KPiA+ICsKPiA+ICsvKgo+ID4gKyAqIFBvc3NpYmxlIGludGVybmFsIHN0YXRlIGNv bXBhcmVkIHRvIHFtcF9zdGF0ZToKPiA+ICsgKgo+ID4gKyAqIHFtcF9zdGF0ZSAgICAgIEV4dGVy bmFsICBxbXBfY2ZkICBxbXBfZWZkICBpZCAgICAgIHJ4X2J1ZiogdHhfYnVmKiBtc2cqCj4gPiAr ICogZGlzY29ubmVjdGVkICAgSWRsZSAgICAgIGNsb3NlICAgIElkbGUgICAgIHJlc2V0ICAgZnJl ZSAgICBmcmVlICAgIGZyZWUKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl4K PiBZTSBgMCcgb3IgYE5VTEwnLgoKWWVzLgoKPiBNYXliZSB0aGlzIHRhYmxlIHdvdWxkIGJlIGVh c2llciB0byByZWFkIGlmIHRoZSBoZWFkaW5ncyB3ZXJlIG9mZnNldAo+IGZyb20gdGhlIHZhbHVl cy4gIEVnOgo+ICAgKyAqIHFtcF9zdGF0ZSAgICAgRXh0ZXJuYWwgIHFtcF9jZmQgIHFtcF9lZmQg IGlkICAgICAgcnhfYnVmKiB0eF9idWYqIG1zZyoKPiAgICsgKiBkaXNjb25uZWN0ZWQgICBJZGxl ICAgICAgY2xvc2UgICAgSWRsZSAgICAgcmVzZXQgICBmcmVlICAgIGZyZWUgICAgZnJlZQo+ID8K PiBVcCB0byB5b3UuCgpJJ2xsIGdpdmUgYSB0cnkuCgo+ID4gKyAqIGNvbm5lY3RpbmcgICAgIEFj dGl2ZSAgICBvcGVuICAgICBBY3RpdmUgICBzZXQgICAgIHVzZWQgICAgZnJlZSAgICBzZXQKPiAK PiBZb3Ugc2F5IEFjdGl2ZSBmb3IgdGhlIHFtcF9lZmQgYnV0IEkgdGhpbmsgaXQgd291bGQgYmUg YmV0dGVyIHRvIHNheQo+IHdoYXQgeW91IGFyZSB3YWl0aW5nIGZvciA/ICBMb29raW5nIGF0IHFt cF9ldl9jb25uZWN0IEkgdGhpbmsKPiBjb25uZWN0aW5nIGhhcyBvbmx5IFBPTExJTi4gIFlvdSBj b3VsZCB3cml0ZSBJTiwgSU5bfE9VVF0sIGV0Yy4sIG1heWJlLgo+IAo+IFdoaWxlIHJlYWRpbmcg dGhlIHJlc3Qgb2YgdGhlIGNvZGUgSSBmb3VuZCB0aGF0IHRoaXMgd2FzIG9mdGVuIGEKPiBjcml0 aWNhbCBwaWVjZSBvZiBzdGF0ZSB5b3UgYXJlIG1hbmFnaW5nLCBzbyBJIHRoaW5rIHNvbWUgaW1w cm92ZW1lbnQKPiBoZXJlIGlzIHdhcnJhbnRlZC4KCkluZGVlZCwgaXQncyBpbXBvcnRhbnQgdG8g bm90IGhhdmUgUE9MTE9VVCBhbGwgdGhlIHRpbWUsIG9yIHdlIGp1c3QgaGF2ZQphIGJ1c3kgbG9v cC4KCj4gPiArICogY2FwYWJpbGl0eV9uZWdvdGlhdGlvbgo+ID4gKyAqICAgICAgICAgICAgICAg IEFjdGl2ZSAgICBvcGVuICAgICBBY3RpdmUgICBzZXQgICAgIHVzZWQgICAgYW55ICAgICBzZXQK PiAKPiBJIHdvdWxkIGFiYnJldmlhdGUgdGhpcyBzdGF0ZSBuYW1lIGhlcmUsIGJlY2F1c2UgaXQg c3BvaWxzIHRoZSB0YWJsZS4KPiBgY2FwLm5lZ28uJyA/ICBPciBtYXliZSB5b3UgY291bGQganVz dCByZW5hbWUgaXQgdG8gY2FwYWJfbmVnbyBvcgo+IHNvbWV0aGluZy4KCldpbGwgZG8uIDc1Y29s cyBpcyBiYXJlbHkgZW5vdWdoIHRvIHdyaXRlIGFsbCB0aGUgc3RhdGVzIDopLgoKPiA+ICsgKiBj b25uZWN0ZWQgICAgICBDb25uZWN0ZWQgb3BlbiAgICAgQWN0aXZlICAgcHJldlsxXSB1c2VkICAg IGZyZWUgICAgYW55Cj4gCj4gV2hhdCBtc2cgbWlnaHQgdGhlcmUgYmUgaW4gc3RhdGUgYGNvbm5l Y3RlZCcgPyAgQWNjb3JkaW5nIHRvIHRoZQo+IHB1YmxpYyBpbnRlcmZhY2UgdGhlcmUgaXMgbm8g bWVzc2FnZSB5ZXQuCj4gCj4gSW4gZ2VuZXJhbCB0aGUgbW92ZW1lbnQgb2YgdGhlIGNhbGxlcidz IGludGVuZGVkIHFtcCBjb21tYW5kIGZyb20gbXNnCj4gdG8gcnhfYnVmIHRocm91Z2ggdG8gcWVt dSBjb3VsZCBwZXJoYXBzIGRvIHdpdGggc29tZSBleHBvc2l0aW9uCj4gKGNvbW1lbnRhcnkpLgo+ IAo+ID4gKyAqIHdhaXRpbmdfcmVwbHkgIEFjdGl2ZSAgICBvcGVuICAgICBBY3RpdmUgICBzZXQg ICAgIHVzZWQgICAgYW55ICAgICBmcmVlCj4gCj4gSSBhbSBhIGJpdCBjb25mdXNlZCBhYm91dCB0 aGUgc2VtYW50aWNzIG9mIHR4X2J1ZiBiZWluZyBmcmVlIGluIHN0YXRlCj4gd2FpdGluZ19yZXBs eS4gIERvZXMgdGhhdCBtZWFuIHRoZSBjYWxsZXIncyB3YW50ZWQgY29tbWFuZCBoYXMgYmVlbgo+ IHNlbnQgPyAgVGhpcyBzZWVtcyBsaWtlIHBhcnQgb2YgdGhlIHNhbWUgcXVlc3Rpb24gYXMgSSBq dXN0IGFza2VkLi4uCj4gCj4gTWF5YmUgeW91IHdhbnQgdG8gc3BsaXQgdGhpcyBpbnRvIHR3byBy b3dzOgo+IAo+ICAgKyAqIHdhaXRpbmdfcmVwbHkgIEFjdGl2ZSAgICBvcGVuICAgICBJTnxPVVQg ICBzZXQgICAgIHVzZWQgICAgdXNlcidzICBmcmVlCj4gICArICogd2FpdGluZ19yZXBseSAgQWN0 aXZlICAgIG9wZW4gICAgIElOICAgICAgIHNldCAgICAgdXNlZCAgICBmcmVlICAgIGZyZWUKPiAK PiA/CgpTcGxpdGluZyBzb21lIHN0YXRlcyBpbiB0d28gcm93cyBzb3VuZCBnb29kLCBJIG1pZ2h0 IGRvIGl0IGluIG90aGVyCmNhc2VzIGFzIHdlbGwuCgo+ID4gKyAqIGJyb2tlblsyXSAgICAgIG5v bmVbM10gICBhbnkgICAgICBBY3RpdmUgICBhbnkgICAgIGFueSAgICAgYW55ICAgICBhbnkKPiAu Li4KPiA+ICsgKiBbMV0gaWQgdXNlZCBvbiB0aGUgcHJldmlvdXNseSBzZW50IGNvbW1hbmQKPiAK PiBJdCB3b3VsZCBiZSBiZXR0ZXIgaWYgdGhlIGlkIGNvbHVtbiBzdGF0ZWQgc29tZXRoaW5nIG1v cmUgdXNlZnVsIHRoYW4KPiBgc2V0Jy4gIGBuZXh0JyBtYXliZSwgd2hlcmUgYXBwbGljYWJsZSA/ CgpXaGVuICdzZXQnLCBpZCBpcyB0aGUgaWQgb2YgdGhlIHVzZXIgY29tbWFuZCB3ZSBpbnRlbmQg dG8gc2VuZCBvciBoYXZlCmFscmVhZHkgc2VudCBhbmQgd2FpdGluZyBmb3IgdGhlIGFzc29jaWF0 ZWQgcmVwbHkuIEknbSBub3Qgc3VyZSB3aGljaAp3b3JkIG9yIHNldCBvZiB3b3JkIHdvdWxkIGRl c2NyaWJlIGVub3VnaC4gSSBtaWdodCBuZWVkIHRvIGFkZCBhIGNvbW1lbnQKYmVsb3cgdGhlIHRh YmxlLgoKPiBBSVVJIGl0IGlzIGludGVuZGVkIChpbXBvcnRhbnQ/KSB0aGF0IGlkcyBzaG91bGQg bm90IGJlIHJldXNlZC4KCkkgdGhpbmsgaXQncyBpbXBvcnRhbnQsIGl0IGNhbiBoZWxwIGRldGVj dCBtaXN0YWtlcy4gSWYgd2UgcmV1c2UgdGhlCnNhbWUgaWQsIHdlIG1pZ2h0IGFzIHdlbGwgbm90 IGhhdmUgb25lLgoKSSBjYW4gYWxzbyBoZWxwIHRvIGZpZ3VyZSBvdXQgaWYgYW4gZXJyb3IgbWVz c2FnZSBpcyBiZWNhdXNlIGEgY29tbWFuZApmYWlsZWQgdG8gZXhlY3V0ZSBvciBpZiB0aGUgc2Vy dmVyIGl0c2VsZiBoYWQgYW4gZXJyb3IuCgo+ID4gKyAqIFBvc3NpYmxlIGJ1ZmZlcnMgc3RhdGVz Ogo+ID4gKyAqIC0gcmVjZWl2aW5nIGJ1ZmZlcjoKPiA+ICsgKiAgICAgICAgICAgICAgICAgICAg ZnJlZSAgIHVzZWQKPiA+ICsgKiAgIHJ4X2J1ZiAgICAgICAgICAgTlVMTCAgIGFsbG9jYXRlZAo+ ID4gKyAqICAgcnhfYnVmX3NpemUgICAgICAwICAgICAgYWxsb2NhdGlvbiBzaXplIG9mIGByeF9i dWZgCj4gPiArICogICByeF9idWZfb2ZmICAgICAgIDAgICAgICA8PSByeF9idWZfc2l6ZQo+ID4g KyAqIC0gdHJhbnNtaXRpbmcgYnVmZmVyOgo+IAo+IFR5cG8gYHRyYW5zbWl0dGluZycuCj4gCj4g QSBtaW5vciBwb2ludCwgYnV0IGluZGVudGluZyB0aGUgcnhfKiB0aGluZ3MgaGVyZSB3b3VsZCBh dm9pZCB0aGVtCj4gbGluaW5nIHVwIHdpdGggYHRyYW5zbWl0dGluZyBidWZmZXInIGFuZCBtaXNs ZWFkaW5nIHRoZSBleWUuCj4gCj4gQmV0dGVyIHN0aWxsLCBoYXZlIHlvdSBjb25zaWRlcmVkIG1v dmluZyB0aGlzIHRhYmxlIGludG8gdGhlIHN0cnVjdAo+IGl0c2VsZiA/ICBZb3UgY291bGQgcHV0 IHRoZSB0YWJsZSB0byB0aGUgUkhTIG9mIHRoZSBhY3R1YWwgbWVtYmVyCj4gZGVmaW5pdGlvbnMu ICBUaGF0IGdpdmVzIHNsaWdodGx5IGZld2VyIHBsYWNlcyB0byBsb29rLCBhbHRob3VnaCBpdAo+ IHdvdWxkIGludm9sdmUgYSBjcm9zcy1yZWZlcmVuY2UgZnJvbSB0aGlzIHdpZGVyIHN0YXRlIGRl c2NyaXB0aW9uIHRvCj4gdGhlIGZpZWxkJ3Mgc3RhdGUgdGFibGVzLgoKSW5kZWVkLCBpdCBmZWVs cyBraW5kIG9mIHdyb25nIHRvIGhhdmUgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBpbnRlcm5hbApz dGF0ZXMgaW4gdHdvIGRpZmZlcmVudCBwbGFjZXMuIFRoZXJlIGFyZSBzb21lIGRlc2NyaXB0aW9u cyBpbiB0aGUKc3RydWN0LCBidXQgdGhvc2UgYXJlIHByb2JhYmx5IG5vdCBuZWVkZWQuCgo+ID4g KyAqICAgICAgICAgICAgICAgICAgICBmcmVlICAgdXNlZAo+ID4gKyAqICAgdHhfYnVmICAgICAg ICAgICBOVUxMICAgY29udGFpbiBkYXRhCj4gPiArICogICB0eF9idWZfbGVuICAgICAgIDAgICAg ICBzaXplIG9mIGRhdGEKPiA+ICsgKiAgIHR4X2J1Zl9vZmYgICAgICAgMCAgICAgIDw9IHR4X2J1 Zl9sZW4KPiAKPiBZb3Ugc2hvdWxkIGV4cGxhaW4gdGhlIHNlbWFudGljcyBvZiBfb2ZmIGluIGJv dGggY2FzZXMuICBJdCBwb2ludHMKPiBpbnRvIHRoZSBidWZmZXIsIGJ1dCB3aGF0IGlzIHRoZSBt ZWFuaW5nIG9mIHRoZSBkYXRhIChvciB0aGUgc3BhY2UpCj4gYmVmb3JlIGFuZCBhZnRlciBpdCA/ Cj4gCj4gLi4uIG9oLCBJIHNlZSBmb3IgcnhfYnVmX3VzZWQgdGhpcyBpcyBkb2N1bWVudGVkIGlu IHRoZSBzdHJ1Y3QKPiBpdHNlbGYuICBCdXQgbm90IGZvciB0eF9idWZfb2ZmLgo+IAo+IFdoaWNo IGxlYWRzIG1lIHRvIHNheTogdGhlIHN0cnVjdCBjb250YWlucyByeF9idWZfdXNlZCBidXQgdGhl IGNvbW1lbnQKPiBoZXJlIHRhbGtzIGFib3V0IF9vZmYuCgo6KCwgSSBuZWVkIHRvIGZpeCB0aGF0 LgoKQW5kIGhlcmUgaXMgdGhlIGRlc2NyaXB0aW9uOgoKcnhfYnVmX3VzZWQ6IGFjdHVhbCBkYXRh IGluIHRoZSBidWZmZXIKCnR4X2J1Zl9vZmY6IGRhdGEgYWxyZWFkeSBzZW50Cgo+ID4gKyAqIC0g cXVldWVkIHVzZXIgY29tbWFuZDoKPiA+ICsgKiAgICAgICAgICAgICAgICAgICAgZnJlZSAgc2V0 Cj4gPiArICogICBtc2cgICAgICAgICAgICAgIE5VTEwgIGNvbnRhaW4gZGF0YQo+IAo+IFlNIGBj b250YWlucycgZGF0YSwgaW4gYm90aCBjYXNlcy4KPiAKPiA+ICsgKiAgIG1zZ19sZW4gICAgICAg ICAgMCAgICAgc2l6ZSBvZiBkYXRhCj4gPiArICoKPiA+ICsgKiAtIEFsbG93ZWQgaW50ZXJuYWwg c3RhdGUgdHJhbnNpdGlvbjoKPiA+ICsgKiBkaXNjb25uZWN0ZWQgICAgICAgICAgICAgICAgICAg ICAgICAgLT4gY29ubmVjdGluZwo+ID4gKyAqIGNvbm5lY3Rpb24gICAgICAgICAgICAgICAgICAg ICAgICAgICAtPiBjYXBhYmlsaXR5X25lZ290aWF0aW9uCj4gPiArICogY2FwYWJpbGl0eV9uZWdv dGlhdGlvbi93YWl0aW5nX3JlcGx5IC0+IGNvbm5lY3RlZAo+ID4gKyAqIGNvbm5lY3RlZCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiB3YWl0aW5nX3JlcGx5Cj4gPiArICogYW55ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IGRpc2Nvbm5lY3RlZAo+IAo+IFRoaXMgZG9l cyBub3QgbWVudGlvbiB0aGUgc3RhdGUgYGJyb2tlbicgYW5kIGl0IHNob3VsZC4KCk1heWJlOgog IGFueSAtPiBicm9rZW4KCk9yIHByb2JhYmx5IG1vcmUgYWNjdXJhdGU6CiAgIWRpc2Nvbm5lY3Rl ZCAtPiBicm9rZW4KCj4gPiArc3RhdGljIHZvaWQgcW1wX2V2X2Vuc3VyZV9yZWFkaW5nX3dyaXRp bmcobGlieGxfX2djICpnYywgbGlieGxfX2V2X3FtcCAqZXYpCj4gPiArICAgIC8qICFkaXNjb25u ZWN0ZWQgLT4gc2FtZSBzdGF0ZSAqLwo+IAo+IFRoaXMgaXMgbm90IHJlYWxseSB0cnVlLiAgVGhp cyBmdW5jdGlvbiBpcyBvbmUgdG8gdHJhbnNmb3JtIGEKPiB0cmFuc2llbnQsIHBhcnRpYWwsIGlu dGVybmFsIHN0YXRlLCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIHByb3Blcgo+IGludGVybmFsIHN0 YXRlLCBieSBzZXR0aW5nIHVwIHRoZSBmZCBldmVudC4KPiAKPiBUaGlzIHdpbGwgYmVjb21lIG1v cmUgb2J2aW91cyBpZiB5b3UgYWRkIHRoZSBJTiBldGMuIHRvIHRoZSBlZmQgY29sdW1uCj4gaW4g dGhlIGludGVybmFsIHN0YXRlIHRhYmxlLgoKSW5kZWVkLCBJJ2xsIGZpeCB0aGUgY29tbWVudCBv bmNlIHRoZSB0YWJsZSBoYXZlIGFsbCB0aGUgSU5bfE9VVF0uCgo+ID4gKyAgICBpZiAoZXYtPnR4 X2J1Zikgewo+ID4gKyAgICAgICAgZW5hYmxlID0gdHJ1ZTsKPiA+ICsgICAgfSBlbHNlIHsKPiA+ ICsgICAgICAgIGVuYWJsZSA9IChldi0+cW1wX3N0YXRlID09IHFtcF9zdGF0ZV9jb25uZWN0ZWQp ICYmIGV2LT5tc2c7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgaWYgKGVuYWJsZSkKPiA+ICsg ICAgICAgIGV2ZW50cyA9IGV2LT5xbXBfZWZkLmV2ZW50cyB8IFBPTExPVVQ7Cj4gPiArICAgIGVs c2UKPiA+ICsgICAgICAgIGV2ZW50cyA9IGV2LT5xbXBfZWZkLmV2ZW50cyAmIH5QT0xMT1VUOwo+ ID4gKwo+ID4gKyAgICBsaWJ4bF9fZXZfZmRfbW9kaWZ5KGdjLCAmZXYtPnFtcF9lZmQsIGV2ZW50 cyk7Cj4gCj4gVGhpcyBmdW5jdGlvbiBzZWVtcyBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gaXQgbmVl ZHMgdG8gYmUgPwo+IAo+IEFGQUlDVCB5b3VyIGNvZGUgbmV2ZXIgY2xlYXJzIFBPTExJTi4gIEFu ZCB0aGlzIGZ1bmN0aW9uIGFsd2F5cwo+IHVuY29uZGl0aW9uYWxseSBjbGVhcnMgb3Igc2V0cyBQ T0xMT1VULiAgU28gdGhlIGRlc2lyZWQgZXZlbnRzIGRvIG5vdAo+IGluIGZhY3QgZGVwZW5kIG9u IHFtcF9lZmQuZXZlbnRzID8KPiAKPiBXaGljaCBtYWtlcyBzZW5zZSwgYmVjYXVzZSBmcm9tIHRo aXMgbmFtZSBJIHdvdWxkIGV4cGVjdCB0aGlzIGZ1bmN0aW9uCj4gdG8gZmlndXJlIG91dCBmb3Ig aXRzZWxmIGV4YWN0bHkgd2hhdCBldmVudHMgb3VnaHQgdG8gYmUgbGlzdGVuZWQgZm9yLgo+IAo+ IEkgdGhpbmsgeW91IHdhbnQgc29tZXRoaW5nIGxpa2UKPiAgICAgICBldmVudHMgPSBQT0xMSU47 Cj4gICAgICAgaWYgKHNvbWUgc3R1ZmYpIHsKPiAgICAgICAgICBldmVudHMgfD0gUE9MTE9VVDsK PiBldGMuCgpJJ2xsIGZpeCB0aGF0LgoKPiA+ICtzdGF0aWMgdm9pZCBxbXBfZXZfc2V0X3N0YXRl KGxpYnhsX19nYyAqZ2MsIGxpYnhsX19ldl9xbXAgKmV2LAo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGlieGxfX3FtcF9zdGF0ZSBuZXdfc3RhdGUpCj4gPiArewo+IAo+IE5vdyB0 aGF0IHlvdSBoYXZlIGBicm9rZW4nIHlvdSBzaG91bGQgcHJvYmFibHkgbWVudGlvbiB0aGF0IHRo aXMKPiBmdW5jdGlvbiBpcyBub3QgdXNlZCB0byBlbnRlciB0aGUgc3RhdGUgYGJyb2tlbicgKHRo YXQgaXMgZG9uZQo+IHdpbGx5LW5pbGx5KSwgbm9yIHRoZSBzdGF0ZSBgZGlzY29ubmVjdGVkJyAo dGhhdCBpcyBkb25lIGluIF9pbml0KS4KPiAKPiA+ICtzdGF0aWMgaW50IHFtcF9lcnJvcl9jbGFz c190b19saWJ4bF9lcnJvcl9jb2RlKGxpYnhsX19nYyAqZ2MsCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplY2xhc3MpCj4gPiAr ewo+ID4gKyAgICBjb25zdCBsaWJ4bF9lbnVtX3N0cmluZ190YWJsZSAqdCA9IGxpYnhsX2Vycm9y X3N0cmluZ190YWJsZTsKPiA+ICsKPiA+ICsgICAgLyogY29tcGFyZSAiUU1QX0dFTkVSSUNfRVJS T1IiIGZyb20gbGlieGxfZXJyb3IgdG8gIkdlbmVyaWNFcnJvciIKPiA+ICsgICAgICogZ2VuZXJh dGVkIGJ5IHRoZSBRTVAgc2VydmVyICovCj4gPiArCj4gPiArICAgIGZvciAoIDsgdC0+czsgdCsr KSB7Cj4gPiArICAgICAgICAgICAgY29uc3QgY2hhciAqcyA9IGVjbGFzczsKPiA+ICsgICAgICAg ICAgICBjb25zdCBjaGFyICpzZSA9IHQtPnM7Cj4gPiArICAgICAgICBpZiAoc3RybmNhc2VjbXAo dC0+cywgIlFNUF8iLCA0KSkKPiA+ICsgICAgICAgICAgICBjb250aW51ZTsKPiA+ICsKPiA+ICsg ICAgICAgIC8qIHNraXAgIlFNUF8iICovCj4gPiArICAgICAgICBzZSArPSA0Owo+IAo+IFRoaXMg Y29kZSBjb250YWlucyBvciBpbXBsaWVzIHRoZSB2YWx1ZSBgNCcgYSB0b3RhbCBvZiA0IHRpbWVz OiB0aHJlZQo+IHRpbWVzIGluIHRoZSBjb2RlICgiUU1QXyIsIDQsIDQpIGFuZCBvbmNlIGluIGEg Y29tbWVudC4gIEhvdyBhYm91dAo+ICAgIGNvbnN0IGNoYXIgc2tpcFtdID0gIlFNUF8iOwo+ICAg IGNvbnN0IHNpemVfdCBza2lwbCA9IHNpemVvZihza2lwKS0xOwo+ID8KClNvdW5kcyBnb29kLCBJ J2xsIHVzZSB0aGF0LgoKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICByZXR1cm4gRVJST1JfVU5L Tk9XTl9RTVBfRVJST1I7Cj4gCj4gSSB0aGluayB5b3UgcHJvYmFibHkgd2FudGVkIHRvIGxvZyB0 aGUgb3JpZ2luYWwgZXJyb3Igc3RyaW5nIGhlcmUgc28KPiB0aGF0IGl0IGRvZXMgbm90IGJlY29t ZSBsb3N0LgoKUmlnaHQsIEknbGwgbG9nIGl0LgoKPiA+ICtzdGF0aWMgaW50IHFtcF9ldl9wcmVw YXJlX2NtZChsaWJ4bF9fZ2MgKmdjLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxpYnhsX19ldl9xbXAgKmV2LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IGNoYXIgKmNtZCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBs aWJ4bF9fanNvbl9vYmplY3QgKmFyZ3MpCj4gPiArICAgIC8qIG9uIGVudHJ5OiBjb25uZWN0aW5n L2Nvbm5lY3RlZCBidXQgd2l0aCBgbXNnYCBmcmVlCj4gPiArICAgICAqIG9uIHJldHVybjogc2Ft ZSBzdGF0ZSBidXQgd2l0aCBgbXNnYCBzZXQgKi8KPiA+ICt7Cj4gPiArICAgIGNoYXIgKmJ1ZiA9 IE5VTEw7Cj4gPiArICAgIHNpemVfdCBsZW47Cj4gPiArCj4gPiArICAgIGFzc2VydCghZXYtPnR4 X2J1ZiAmJiAhZXYtPnR4X2J1Zl9sZW4pOwo+ID4gKyAgICBhc3NlcnQoIWV2LT5tc2cgJiYgIWV2 LT5tc2dfbGVuKTsKPiA+ICsKPiA+ICsgICAgZXYtPmlkKys7Cj4gPiArICAgIGJ1ZiA9IHFtcF9w cmVwYXJlX2NtZChnYywgY21kLCBhcmdzLCBldi0+aWQsICZsZW4pOwo+ID4gKyAgICBpZiAoIWJ1 Zikgewo+ID4gKyAgICAgICAgcmV0dXJuIEVSUk9SX0ZBSUw7Cj4gPiArICAgIH0KPiAKPiBUaGVy ZSBpcyBubyBkb2MgY29tbWVudCBmb3IgcW1wX3ByZXBhcmVfY21kIHNheWluZyB3aGV0aGVyIGl0 IGxvZ3Mgb24KPiBlcnJvci4gIFNvIGl0IGRvZXNuJ3QgPyAgSW4gd2hpY2ggY2FzZSBtYXliZSB5 b3Ugc2hvdWxkIGRvIHNvIGhlcmUuCj4gCj4gQWx0ZXJuYXRpdmVseSBpZiBpdCBjYW4gb25seSBy ZWFsbHkgZmFpbCBkdWUgdG8gbWVtb3J5IGFsbG9jYXRpb24KPiBmYWlsdXJlLCBtYXliZSBpdCBz aG91bGQgcmV0dXJuIHZvaWQgKGFuZCBjYWxsIGxpYnhsX19hbGxvY19mYWlsZWQKPiBvbiBhbGxv Y2F0aW9uIGZhaWx1cmUpIGluc3RlYWQgPwoKU28gd2UgY2FuIGhhdmUgdGhlIGFsbG9jYXRpb24g YmVlbiBkb25lIGJ5IGxpYnhsJ3MgZnVuY3Rpb25zLCBhcwp5YWpsX2dlbl9hbGxvYyBjYW4gdXNl IG90aGVyIGZ1bmN0aW9ucyB0aGF0IG1hbGxvYy9mcmVlL3JlYWxsb2MsIHRoYXQKd291bGQgcmVt b3ZlIHRoZSBhbGxvY2F0aW9uIGZhaWx1cmUuCgpCdXQgdGhlbiBJIHRoaW5rIHRoYXQgcW1wX3By ZXBhcmVfY21kIGNvdWxkIGZhaWwgYW5kIHJldHVybiBudWxsIGlmCidjbWQnIG9yICdhcmdzJyBj b250YWlucyBiYWQganNvbiBvYmplY3RzLCBvciBhIHdyb25nIHN0cmluZy4KClNvIHdlIHN0aWxs IG5lZWRzIHRvIGRldGVjdCBmYWlsdXJlLgoKSSBsb2cgaGVyZSBhcyBJIGNhbiBhZGQgdGhlIGRv bWlkLgoKPiBJZiB5b3UgZG9uJ3QgbmVlZCB0byBsb2cgSSB0aGluayB5b3Ugc2hvdWxkIGRyb3Ag dGhlIHsgfSBoZXJlLgo+IAo+IFNlZSBhbHNvIG15IGNvbW1lbnRzIG9uIHRoZSBvdGhlciBwYXRj aCwgYWJvdXQgbGVuLgoKSSdsbCBwcm9iYWJseSByZW1vdmUgbGVuIGFuZCB1c2Ugc3RybGVuIHdo ZW4gbmVlZGVkLgoKPiA+ICsvKiBTZXR1cCBjb25uZWN0aW9uICovCj4gPiArCj4gPiArc3RhdGlj IGludCBxbXBfZXZfY29ubmVjdChsaWJ4bF9fZ2MgKmdjLCBsaWJ4bF9fZXZfcW1wICpldikKPiA+ ICsgICAgLyogZGlzY29ubmVjdGVkIC0+IGNvbm5lY3RpbmcgYnV0IHdpdGggYG1zZ2AgZnJlZQo+ ID4gKyAgICAgKiBvbiBlcnJvcjogZGlzY29ubmVjdGVkCj4gPiArICAgICAqIElmIHRoZSBpbml0 aWFsIHN0YXRlIGlzbid0IGRpc2Nvbm5lY3RlZCwgdGhlbiBub3RoaW5nIGlzIGRvbmUgKi8KPiAK PiBNYXliZSBpdCBiZSBiZXR0ZXIgZm9yIHRoaXMgZnVuY3Rpb24gdG8gcmV0dXJuIGBicm9rZW4n IG9uIGVycm9yID8KClRoYXQgbm90IHRoZSBjYXNlLCBidXQgSSBjb3VsZCBjaGFuZ2UgdG8gcmV0 dXJuIGJyb2tlbiBvbiBlcnJvciwgYW5kIGxldAp0aGUgY2FsbGVyIGNsZWFuIHRoZSBzdGF0ZS4K Cj4gQWxzbywgSSB0aGluayBpdCBpcyBhbm9tYWxvdXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGhhbmRs ZXMgYGJyb2tlbicgYXMgYQo+IG5vLW9wIGFuZCBjbGFpbXMgc3VjY2Vzcy4gIEkgdGhpbmsgdGhh dCBpcyBub3QgcmVhbGx5IHdoYXQgYSBjYWxsZXIKPiBtaWdodCBleHBlY3QuICBNYXliZSB5b3Ug d2FudCB0byBmb3JiaWQgYGJyb2tlbicgKHdpdGggYSBjb3JyZXNwb25kaW5nCj4gYXNzZXJ0KSBv ciB0byBwZXJtaXQgaXQgKGNhbGxpbmcgZGlzcG9zZSBiZWZvcmUgZG9pbmcgdGhlIHJlc3Qgb2Yg dGhlCj4gd29yaykuCgpJJ20gdGhpbmtpbmcgdG8gY2hhbmdlIHRoZSBkZWZpbml0aW9uIGFuZCBv bmx5IGFsbG93IHRoaXMgZnVuY3Rpb24gdG8gYmUKY2FsbGVkIHdpdGggdGhlIHN0YXRlIGRpc2Nv bm5lY3RlZCwgYW5kIGhhdmUgdGhlIGNhbGxlciBjaGVjayBmb3IgdGhlCmN1cnJlbnQgc3RhdGUu Cgo+IENvbnRyYXJ5IHRvIHRoZSBzdGF0ZSBkZXNjcmlwdGlvbiwgdGhpcyBmdW5jdGlvbiBkb2Vz IG5vdCB0cmFuc2l0aW9uCj4gcnhfYnVmIGZyb20gZnJlZSB0byB1c2VkLiAgSG93ZXZlciwgSSB0 aGluayB0aGlzIHdvdWxkIHByb2JhYmx5IGJlCj4gbW9yZSBlYXNpbHkgcmVtZWRpZWQgYnkgY2hh bmdpbmcgdGhlIGRlZmluaXRpb24gb2YgYHVzZWQnIHRvIHBlcm1pdAo+IE5VTEwvMC8wLiAgWW91 IG1pZ2h0IHdhbnQgdG8gdXNlIGEgZGlmZmVyZW50IHdvcmQgdG8gYHVzZWQnLCBgaW51c2UnCj4g cGVyaGFwcyA/CgpXaWxsIGRvLgoKPiA+ICtvdXQ6Cj4gPiArICAgIGxpYnhsX19jYXJlZmRfY2xv c2UoZXYtPnFtcF9jZmQpOwo+ID4gKyAgICBldi0+cW1wX2NmZCA9IE5VTEw7Cj4gPiArICAgIHJl dHVybiByYzsKPiAKPiBJZiB0aGlzIGZ1bmN0aW9uIHdlcmUgcGVybWl0dGVkIHRvIGxlYXZlIHRo ZSBzdGF0ZSBgYnJva2VuJyBvbiBlcnJvciwKPiB0aGlzIHNlcGFyYXRlIGVycm9yIGNvZGUgd291 bGQgbm90IGJlIG5lZWRlZC4gIElzIHRoZXJlIHNvbWUgcmVhc29uCj4gbm90IHRvIGRvIHRoYXQg PwoKTm90IHJlYWxseS4KCj4gPiArc3RhdGljIHZvaWQgcW1wX2V2X2ZkX2NhbGxiYWNrKGxpYnhs X19lZ2MgKmVnYywgbGlieGxfX2V2X2ZkICpldl9mZCwKPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IGZkLCBzaG9ydCBldmVudHMsIHNob3J0IHJldmVudHMpCj4gPiArICAg IC8qIE9uIGVudHJ5LCBldl9mZCBpcyAob2YgY291cnNlKSBBY3RpdmUuICBUaGUgZXZfcW1wIG1h eSBiZSBpbiBhbnkKPiA+ICsgICAgICogc3RhdGUgd2hlcmUgdGhpcyBpcyBwZXJtaXR0ZWQuICBx bXBfZXZfZmRfY2FsbGJhY2sgd2lsbCBkbyB0aGUgd29yawo+ID4gKyAgICAgKiBuZWNlc3Nhcnkg dG8gbWFrZSBwcm9ncmVzcywgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IHN0YXRlLCBhbmQgbWFr ZQo+ID4gKyAgICAgKiB0aGUgYXBwcm9wcmlhdGUgc3RhdGUgdHJhbnNpdGlvbnMgYW5kIGNhbGxi YWNrcy4gICovCj4gPiArewo+ID4gKyAgICBFR0NfR0M7Cj4gPiArICAgIGludCByYzsKPiA+ICsg ICAgbGlieGxfX2pzb25fb2JqZWN0ICpvID0gTlVMTDsKPiA+ICsgICAgbGlieGxfX2V2X3FtcCAq ZXYgPSBDT05UQUlORVJfT0YoZXZfZmQsICpldiwgcW1wX2VmZCk7Cj4gPiArCj4gPiArICAgIGlm IChyZXZlbnRzICYgKFBPTExIVVApKSB7Cj4gPiArICAgICAgICBMT0dEKEVSUk9SLCBldi0+ZG9t aWQsICJyZWNlaXZlZCBQT0xMSFVQIGZyb20gUU1QIHNvY2tldCIpOwo+ID4gKyAgICAgICAgcmMg PSBFUlJPUl9QUk9UT0NPTF9FUlJPUl9RTVA7Cj4gPiArICAgICAgICBnb3RvIG91dDsKPiAKPiBU aGlzIGFwcHJvYWNoLCB3aXRob3V0IG1vcmUsIGxvc2VzIHRoZSBlcnJvciBjb2RlIGZyb20gY29u bmVjdCgpLgo+IEkgdGhpbmsgeW91IG5lZWQgdG8gY2FsbCBnZXRzb2Nrb3B0KGZkLCBTT0xfU09D S0VULCBTT19FUlJPUiwgLi4uKQo+IGFuZCBsb2cgdGhlIGVycm5vIHZhbHVlIGlmIHRoZXJlIGlz IG9uZS4KPiAgIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5 L2Z1bmN0aW9ucy9WMl9jaGFwMDIuaHRtbCN0YWdfMTVfMTBfMTYKCkknbGwgaGF2ZSBhIGxvb2su Cgo+ID4gKyAgICBpZiAocmV2ZW50cyAmIFBPTExPVVQpIHsKPiA+ICsgICAgICAgIHJjID0gcW1w X2V2X2NhbGxiYWNrX3dyaXRhYmxlKGdjLCBldiwgZmQpOwo+IC4uLgo+ID4gKyAgICBpZiAocmV2 ZW50cyAmIFBPTExJTikgewo+ID4gKyAgICAgICAgcmMgPSBxbXBfZXZfY2FsbGJhY2tfcmVhZGFi bGUoZWdjLCBldiwgZmQpOwo+ID4gKyAgICAgICAgaWYgKHJjKQo+ID4gKyAgICAgICAgICAgIGdv dG8gb3V0Owo+ID4gKwo+ID4gKyAgICAgICAgLyogcGFyc2UgaW5wdXQgKi8KPiAKPiBJIGZpbmQg aXQgb2RkIHRoYXQgdGhpcyBpbnB1dCBwYXJzaW5nIGlzIG5vdCBwYXJ0IG9mCj4gcW1wX2V2X2Nh bGxiYWNrX3JlYWRhYmxlLiAgV2hhdCBkbyB5b3UgdGhpbmsgYWJvdXQgbW92aW5nIGl0IHRoZXJl ID8KCkkgd2FudGVkIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGZ1bmN0aW9uIGNhbGxzIGJldHdl ZW4gd2hlbiBhIHVzZXIKY2FsbGJhY2sgaXMgY2FsbGVkIGFuZCB3aGVuIGV2X3FtcCdzIGNvbnRy b2wgcGFzc2VzIG91dHNpdGUgb2YgZXZfcW1wJ3MKaW1wbGVtZW50YXRpb24uIFNvIEkgbW92ZWQg cW1wX2V2X2hhbmRsZV9tZXNzYWdlKCkgY2FsbCBoZXJlLgoKPiA+ICtzdGF0aWMgaW50IHFtcF9l dl9jYWxsYmFja193cml0YWJsZShsaWJ4bF9fZ2MgKmdjLAo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxpYnhsX19ldl9xbXAgKmV2LCBpbnQgZmQpCj4gPiArICAgIC8q IG9uIGVudHJ5OiAhZGlzY29ubmVjdGVkCj4gPiArICAgICAqIG9uIHJldHVybiwgb25lIG9mIHRo ZXNlIHN0YXRlIHRyYW5zaXRpb246Cj4gPiArICAgICAqICAgY29ubmVjdGVkIC0+IHdhaXRpbmdf cmVwbHkKPiA+ICsgICAgICogICAqIC0+IHN0YXRlIHVuY2hhbmdlCj4gPiArICAgICAqICAgYnV0 IHdpdGggdGhlIHN0YXRlIG9mIHR4X2J1ZiBjaGFuZ2VkCj4gPiArICAgICAqIG9uIGVycm9yOiBi cm9rZW4gKi8KPiA+ICt7Cj4gPiArICAgIGludCByYzsKPiA+ICsgICAgc3NpemVfdCByOwo+ID4g Kwo+ID4gKyAgICBpZiAoZXYtPnFtcF9zdGF0ZSA9PSBxbXBfc3RhdGVfY29ubmVjdGVkKSB7Cj4g PiArICAgICAgICBhc3NlcnQoIWV2LT50eF9idWYpOwo+ID4gKyAgICAgICAgaWYgKGV2LT5tc2cp IHsKPiAKPiBTZWUgbXkgY29tbWVudHMgYWJvdXQgdGhlIHN0YXRlIGBjb25uZWN0ZWQnIGFuZCBt c2cuCj4gCj4gPiArICAgIC8qCj4gPiArICAgICAqIFdlIHdpbGwgc2VuZCBhIGZpbGUgZGVzY3Jp cHRvciBhc3NvY2lhdGVkIHdpdGggYSBjb21tYW5kIG9uIHRoZQo+ID4gKyAgICAgKiBmaXJzdCBi eXRlIG9mIHRoaXMgY29tbWFuZC4KPiA+ICsgICAgICovCj4gPiArICAgIGlmIChldi0+cW1wX3N0 YXRlID09IHFtcF9zdGF0ZV93YWl0aW5nX3JlcGx5ICYmCj4gPiArICAgICAgICBldi0+ZmQgPj0g MCAmJgo+ID4gKyAgICAgICAgZXYtPnR4X2J1Zl9vZmYgPT0gMCkgewo+IAo+IEFjY29yZGluZyB0 byB0aGUgZG9jIGNvbW1lbnRzLCBzdGF0ZSB3YWl0aW5nX3JlcGx5IG1pZ2h0IGhhdmUgdHhfYnVm Cj4gZnJlZSwgaW4gd2hpY2ggY2FzZSBpdCB3b3VsZCB0cnkgdG8gZXhlY3V0ZSB0aGlzIGNvZGUu ICBJIGRvbid0IHRoaW5rCj4gdGhhdCBjYW4gYmUgcmlnaHQuCgpXaGVuIHR4X2J1ZiBpcyBmcmVl LCB0aGF0IGZ1bmN0aW9uIHJldHVybnMgZWFybGllci4gU28gdGhpcyBjb2RlIGlzbid0CmV4ZWN1 dGVkLgoKPiA+ICsgICAgaWYgKGV2LT50eF9idWZfb2ZmID09IGV2LT50eF9idWZfbGVuKSB7Cj4g PiArICAgICAgICBmcmVlKGV2LT50eF9idWYpOwo+ID4gKyAgICAgICAgZXYtPnR4X2J1ZiA9IE5V TEw7Cj4gPiArICAgICAgICBldi0+dHhfYnVmX2xlbiA9IGV2LT50eF9idWZfb2ZmID0gMDsKPiAK PiBUaGlzIGFwcGVhcnMgaW4gX2luaXQgdG9vLiAgTWF5YmUgeW91IHdhbnQgYSBxbXBfZXZfdHhf YnVmX2NsZWFyCj4gZnVuY3Rpb24gPwoKU291bmRzIGdvb2QuCgo+ID4gK3N0YXRpYyBpbnQgcW1w X2V2X2NhbGxiYWNrX3JlYWRhYmxlKGxpYnhsX19lZ2MgKmVnYywKPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fZXZfcW1wICpldiwgaW50IGZkKQo+ID4gKyAg ICAvKiAhZGlzY29ubmVjdGVkIC0+IHNhbWUgc3RhdGUgKHdpdGggcnggYnVmZmVyIHVwZGF0ZWQp Cj4gPiArICAgICAqIG9uIGVycm9yIC0+IGJyb2tlbiAqLwo+ID4gK3sKPiA+ICsgICAgRUdDX0dD Owo+ID4gKwo+ID4gKyAgICB3aGlsZSAoMSkgewo+ID4gKyAgICAgICAgc3NpemVfdCByOwo+ID4g Kwo+ID4gKyAgICAgICAgLyogQ2hlY2sgaWYgdGhlIGJ1ZmZlciBzdGlsbCBoYXZlIHNwYWNlLCBv ciBpbmNyZWFzZSBzaXplICovCj4gPiArICAgICAgICBpZiAoZXYtPnJ4X2J1Zl9zaXplIC0gZXYt PnJ4X2J1Zl91c2VkIDwgUU1QX1JFQ0VJVkVfQlVGRkVSX1NJWkUpIHsKPiA+ICsgICAgICAgICAg ICBldi0+cnhfYnVmX3NpemUgPSBtYXgoZXYtPnJ4X2J1Zl9zaXplICogMiwKPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdClRTVBfUkVDRUlWRV9CVUZGRVJfU0laRSAq IDIpOwo+IAo+IEhvdyBhYm91dAo+IAo+ICAgKyAgICAgICAgICAgIGV2LT5yeF9idWZfc2l6ZSAq PSAyOwo+ICAgKyAgICAgICAgICAgIGV2LT5yeF9idWZfc2l6ZSArPSBRTVBfUkVDRUlWRV9CVUZG RVJfU0laRTsKPiAKPiBvciBzb21lIHN1Y2ggPyAgVGhhdCdzIGVhc2llciB0byByZWFkIHRoYW4g YSBjb25kaXRpb25hbC4KClRoYXQgbG9va3MgZmluZS4KCj4gPiArICAgICAgICAgICAgYXNzZXJ0 KGV2LT5yeF9idWZfc2l6ZSA8PSBRTVBfTUFYX1NJWkVfUlhfQlVGKTsKPiA+ICsgICAgICAgICAg ICBpZiAoZXYtPnJ4X2J1Zl9zaXplID4gUU1QX01BWF9TSVpFX1JYX0JVRikgewo+IAo+IEkgdGhp bmsgdGhlIGFzc2VydCBpcyByZWR1bmRhbnQuCj4gCj4gPiArICAgICAgICAgICAgICAgIExPR0Qo RVJST1IsIGV2LT5kb21pZCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAiUU1QIHJlY2VpdmUg YnVmZmVyIGlzIHRvbyBiaWcgKCVsZCA+ICVsbGQpIiwKPiA+ICsgICAgICAgICAgICAgICAgICAg ICBldi0+cnhfYnVmX3NpemUsIFFNUF9NQVhfU0laRV9SWF9CVUYpOwo+ID4gKyAgICAgICAgICAg ICAgICByZXR1cm4gRVJST1JfQlVGRkVSRlVMTDsKPiA+ICsgICAgICAgICAgICB9Cj4gCj4gUHV0 dGluZyB0aGlzIGVycm9yIGNoZWNrIGJldHdlZW4gdGhlIGNoYW5nZSB0byByeF9idWZfc2l6ZSBh bmQgdGhlCj4gY2hhbmdlIHRvIHJ4X2J1ZiBvYnNjdXJlcyB0aGUgZXNzZW50aWFsIGNvbm5lY3Rp b24gYmV0d2VlbiBib3RoCj4gY2hhbmdlcywgd2hpY2ggbXVzdCBiZSBpbmRpdmlzaWJsZS4KPiAK PiBJdCBhbHNvIHJlc3VsdHMgaW4gYSBidWc6IGlmIHRoaXMgZXJyb3IgdHJpcHMsIHJ4X2J1Zl9z aXplIGhhcyBiZWVuCj4gdXBkYXRlZCBidXQgcnhfYnVmIGhhcyBub3QuICBUaGlzIGlzIGEgZGFu Z2Vyb3VzbHkgaW52YWxpZCBzdGF0ZS4KPiAKPiBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIHJlYWQg ZXZlcnl0aGluZyB0aGF0IHFlbXUgcHJvZHVjZXMgYW5kIGNhbGxzCj4gdGhlIHdob2xlIHRoaW5n IGEgbG9zcyBvZiBxZW11IHByb2R1Y2VzIG1vcmUgdGhhbiBRTVBfTUFYX1NJWkVfUlhfQlVGLgo+ IEJ1dCBwZXJoYXBzIHFlbXUgcHJvZHVjaW5nIG1vcmUgdGhhbiBRTVBfTUFYX1NJWkVfUlhfQlVG IG91dHB1dCBtaWdodAo+IG5vdCBiZSB0aGUgcmVzdWx0IG9mIHFlbXUgZ29pbmcgbWFkLiAgSXQg bWlnaHQgYmUgdGhlIHJlc3VsdCBvZiB1cwo+IGhhdmluZyBpZ25vcmVkIGl0IGZvciBhIHdoaWxl LCBhbmQgcWVtdSBmaWxsaW5nIGEgYnVmZmVyIHdpdGggZXZlbnQKPiBub3RpZmljYXRpb25zIHdo aWNoIHdlIG1pZ2h0IHdhbnQgdG8gZGlzY2FyZCA/Cj4gCj4gV291bGQgaXQgbm90IGJlIGJldHRl ciB0byBwcm9jZXNzIG1lc3NhZ2VzIGFzIHRoZXkgYXJyaXZlID8gIEllIHRvIHB1dAo+IHRoZSBh dHRlbXB0IHRvIGZpbmQgdmFsaWQgbWVzc2FnZXMgaGVyZSBpbnNpZGUgdGhpcyBsb29wID8KCk1h eWJlLgoKV2UgZG9uJ3QgZXZlbiBuZWVkcyB0byB3YWl0IGZvciBhIHZhbGlkIG1lc3NhZ2UgYW5k IHN0YXJ0IHBhcnNpbmcuIHlhamwKYWxsb3cgdG8gcGFyc2UgcGFydGlhbCBqc29uIGlucHV0LiBC dXQgSSBkb24ndCBrbm93IGlmIGl0IGlzIGEgZ29vZCBpZGVhCnRvIHN0YXJ0IGRvaW5nIHRoYXQu CgpCdXQgaW4gYW55Y2FzZSwgaXQgaXMgcHJvYmFibHkgYmV0dGVyIHRvIGxvb2sgZm9yIHZhbGlk ZSBtZXNzYWdlcyBiZWZvcmUKcmV0dXJuaW5nIGFuIGVycm9yIHdpdGggInRoZXJlJ3MgdG9vIG11 Y2ggdG8gcHJvY2VzcyIuCgo+IFRoYXQgbWlnaHQgYWxzbyBhbGxvdyB0aGUgcmVkdWN0aW9uIG9m IHRoZSBtYXhpbXVtIG1lc3NhZ2Ugc2l6ZSBmcm9tCj4gOE1ieS4gIDhNYnkgc2VlbXMgbGlrZSBx dWl0ZSBhIGxvdC4KCkkgZG9uJ3Qga25vdyBob3cgYmlnIGEgbWVzc2FnZSBjYW4gYmUuIEkgY2Fu IGNlcnRhaW5seSB0cnkgdG8gc3RhcnQgUUVNVQp3aXRoIDI1NiBjcHVzIGFuZCBjaGVjayB0aGUg c2l6ZSBvZiBxdWVyeS1jcHUncyByZXNwb25zZS4KCj4gT2Ygc3VjaCBhIGNoYW5nZSB3b3VsZCBy ZXN1bHQgaW4gYSBwb3NzaWJsZSByZXR1cm4gdG8gdGhlIGNhbGxlciB3aXRoCj4gdGhlIHFtcCBm ZCBoYXZpbmcgcGVuZGluZyBkYXRhIHRvIHJlYWQuICBXZSB3b3VsZCBoYXZlIHRvIG1ha2Ugc3Vy ZSB0bwo+IGFjdHVhbGx5IGNhbGwgcmVhZCBhZ2FpbiBhZnRlciBzZW5kaW5nIGEgbmV3IGNvbW1h bmQsIGluIGNhc2UgdGhlIGVmZAo+IGlzIGVkZ2UgdHJpZ2dlcmVkLgo+IAo+ID4gKy8qIEhhbmRs ZSBtZXNzYWdlcyByZWNlaXZlZCBmcm9tIFFNUCBzZXJ2ZXIgKi8KPiA+ICsKPiA+ICtzdGF0aWMg aW50IHFtcF9ldl9nZXRfbmV4dF9tc2cobGlieGxfX2VnYyAqZWdjLCBsaWJ4bF9fZXZfcW1wICpl diwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2pzb25fb2JqZWN0 ICoqb19yKQo+ID4gKyAgICAvKiBGaW5kIGEgSlNPTiBvYmplY3QgYW5kIHN0b3JlIGl0IGluIG9f ci4KPiA+ICsgICAgICogcmV0dXJuIEVSUk9SX05PVEZPVU5EIGlmIG5vIG9iamVjdCBpcyBmb3Vu ZC4KPiA+ICsgICAgICogYG9fcmAgaXMgYWxsb2NhdGVkIHdpdGhpbiBgZWdjYC4KPiA+ICsgICAg ICoKPiA+ICsgICAgICogIWRpc2Nvbm5lY3RlZCAtPiBzYW1lIHN0YXRlICh3aXRoIHJ4IGJ1ZmZl ciB1cGRhdGVkKQo+ID4gKyAgICAgKi8KPiA+ICt7Cj4gLi4uCj4gPiArICAgIC8qIFNlYXJjaCBm b3IgdGhlIGVuZCBvZiBhIFFNUCBtZXNzYWdlOiAiXHJcbiIgKi8KPiA+ICsgICAgZW5kID0gbWVt bWVtKGV2LT5yeF9idWYsIGV2LT5yeF9idWZfdXNlZCwgIlxyXG4iLCAyKTsKPiA+ICsgICAgaWYg KCFlbmQpCj4gPiArICAgICAgICByZXR1cm4gRVJST1JfTk9URk9VTkQ7Cj4gPiArICAgIGxlbiA9 IChlbmQgLSBldi0+cnhfYnVmKSArIDI7Cj4gCj4gSW46Cj4gCj4gICBTdWJqZWN0OiBSZTogW1BB VENIIHY1IDAzLzE1XSBsaWJ4bF9xbXA6IEltcGxlbWVudCBmZCBjYWxsYmFjayBhbmQgcmVhZCBk YXRhIFthbmQgMSBtb3JlIG1lc3NhZ2VzXQo+ICAgRGF0ZTogTW9uLCAyOSBPY3QgMjAxOCAxNzoz MTo1OSArMDAwMAo+IAo+IEkgd3JvdGU6Cj4gCj4gICBCdXQgSSB0aGluayB5b3Ugc2hvdWxkIHRy ZWF0IG9ubHkgYFxuJyBhcyB0aGUgZGVsaW1pdGVyLiAgVGhpcyB3aWxsCj4gICBjb25zaWRlcmFi bHkgc2ltcGxpZnkgdGhlIGJ1ZmZlciBoYW5kbGluZy4gIChZb3Ugc2hvdWxkIGNoZWNrIGFuZCB0 cmltCj4gICB0aGUgcHJlY2VkaW5nIGBccicgYmVmb3JlIHBhc3NpbmcgdGhpbmdzIHRvIGxpYnhs X19qc29uX3BhcnNlIG9mCj4gICBjb3Vyc2UuKQo+IAo+IEJ1dCB5b3UgZG9uJ3Qgc2VlbSB0byBo YXZlIGRvbmUgdGhhdCwgb3IgcmVwbGllZCA/CgpUaGlzIGlzIHN0aWxsIHNpbXBsZXIgdGhhbiB3 aGF0IHdlIGhhZCBiZWZvcmUsIGFuZCBpZiBJIGxvb2sgZm9yIG9ubHkKJ1xuJywgSSB3b3VsZCBu ZWVkIGEgbG9vcCBpbiBjYXNlcyB3aGVyZSBcbiBpc24ndCBwcmVjZWRkZWQgYnkgXHIuIEkKYWxz byBjaGVjayB0aGUgd2hvbGUgYnVmZmVyIHJhdGhlciB0aGFuIG5ldyBkYXRhLCBzbyBsb29raW5n IGZvciBcciBhbmQKY2hlY2sgaWYgaXQgaXMgZm9sbG93ZWQgYnkgYSBcbiBpcyBzaW1pbGFyLgoK QXMgZm9yIHRyaW1pbmcgdGhlIFxyLCB0aGlzIGlzIGRvbmUgYmVmb3JlIHRoZSBsaWJ4bF9fanNv bl9wYXJzZSBjYWxsLgoKPiA+ICtzdGF0aWMgaW50IHFtcF9ldl9oYW5kbGVfbWVzc2FnZShsaWJ4 bF9fZWdjICplZ2MsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxf X2V2X3FtcCAqZXYsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg bGlieGxfX2pzb25fb2JqZWN0ICpyZXNwKQo+ID4gKyAgICAvKgo+ID4gKyAgICAgKiBUaGlzIGZ1 bmN0aW9uIHdpbGwgaGFuZGxlIGV2ZXJ5IG1lc3NhZ2VzIHNlbnQgYnkgdGhlIFFNUCBzZXJ2ZXIu Cj4gPiArICAgICAqIFJldHVybiB2YWx1ZXM6Cj4gPiArICAgICAqICAgPCAwICAgIGxpYnhsIGVy cm9yIGNvZGUKPiA+ICsgICAgICogICAwICAgICAgc3VjY2Vzcwo+ID4gKyAgICAgKiAgIDEgICAg ICBzdWNjZXNzLCBidXQgYSB1c2VyIGNhbGxiYWNrIGhhcyBiZWVuIGNhbGxlZCwKPiA+ICsgICAg ICogICAgICAgICAgYGV2YCBzaG91bGQgbm90IGJlIHVzZWQgYW55bW9yZS4KPiAuLi4KPiA+ICsg ICAgY2FzZSBMSUJYTF9fUU1QX01FU1NBR0VfVFlQRV9RTVA6Cj4gLi4uCj4gPiArICAgICAgICBh c3NlcnQoIWV2LT50eF9idWYpOwo+ID4gKyAgICAgICAgZXYtPnR4X2J1ZiA9IHFtcF9wcmVwYXJl X2NtZChnYywgInFtcF9jYXBhYmlsaXRpZXMiLCBOVUxMLAo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFFNUF9DQVBBQklMSVRZX05FR09USUFUSU9OX01TR0lELAo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZldi0+dHhfYnVmX2xlbik7Cj4gPiArICAgICAgICBl di0+dHhfYnVmX29mZiA9IDA7Cj4gCj4gV2h5IGRvIHlvdSBub3QgdXNlIHFtcF9ldl9wcmVwYXJl X2NtZCBmb3IgdGhpcyA/CgpCZWNhdXNlIHFtcF9ldl9wcmVwYXJlX2NtZCBkb2VzIG1vcmUgbGlr ZSBpbmNyZWFzaW5nIHRoZSBpZC4gVGhpcwpxbXBfY2FwYWJpbGl0aWVzIGlzIGEgc3BlY2lhbCBj b21tYW5kIHRoYXQgaXMgcGFydCBvZiB0aGUKaW5pdGlhbGlzYXRpb24uIEkgbmVlZCB0byBrbm93 IHdoaWNoIGlkIGlzIHVzZWQgc28gdGhhdCBJIGNhbiB0cmFjayBpdApsYXRlciBhbmQgZm91bmQg b3V0IHdoZW4gUUVNVSBpcyByZWFkeSB0byByZWNlaXZlIG90aGVyIGNvbW1hbmRzLgoKV2UgY291 bGQgY2FsbCBxbXBfZXZfcHJlcGFyZV9jbWQsIHFtcF9ldl9wcmVwYXJlX3VzZXJfY21kLgoKPiA+ ICsgICAgY2FzZSBMSUJYTF9fUU1QX01FU1NBR0VfVFlQRV9SRVRVUk46Cj4gPiArICAgIGNhc2Ug TElCWExfX1FNUF9NRVNTQUdFX1RZUEVfRVJST1I6Cj4gLi4uCj4gPiArICAgICAgICBvID0gbGli eGxfX2pzb25fbWFwX2dldCgiaWQiLCByZXNwLCBKU09OX0lOVEVHRVIpOwo+ID4gKyAgICAgICAg aWYgKCFvKSB7Cj4gPiArICAgICAgICAgICAgLyoKPiA+ICsgICAgICAgICAgICAgKiBJZiAiaWQi IGlzbid0IHByZXNlbnQsIGFuIGVycm9yIG9jY3VyIG9uIHRoZSBzZXJ2ZXIgYmVmb3JlCj4gPiAr ICAgICAgICAgICAgICogaXQgaGFzIHJlYWQgdGhlICJpZCIgcHJvdmlkZWQgYnkgbGlieGwuCj4g PiArICAgICAgICAgICAgICovCj4gPiArICAgICAgICAgICAgcW1wX2V2X3BhcnNlX2Vycm9yX21l c3NhZ2VzKGVnYywgZXYsIHJlc3ApOwo+ID4gKyAgICAgICAgICAgIHJldHVybiBFUlJPUl9QUk9U T0NPTF9FUlJPUl9RTVA7Cj4gCj4gSSB0aGluayB5b3Ugd2FudGVkIHRvIHJldHVybiB0aGUgZXJy b3IgY29kZSBmcm9tCj4gcW1wX2V2X3BhcnNlX2Vycm9yX21lc3NhZ2VzID8KClllYWgsIGJ1dCB0 aGVuIEkndmUgYWRkZWQgdG8gdGhlIHB1YmxpYyBkb2N1bWVudGF0aW9uIHRoYXQgRVJST1JfUU1Q XyoKbWVhbnMgdGhhdCBldl9xbXAgaXMgc3RpbGwgQ29ubmVjdGVkLgoKQnV0IGhlcmUsIGlmICdp ZCcgaXNuJ3QgaW4gdGhlIG1lc3NhZ2UsIHNvbWV0aGluZyBoYXMgZ29uZSB3cm9uZyBhbmQgSQpk b24ndCB0aGluayB0aGVyZSBpcyBhbnkgcG9pbnQgdHJ5aW5nIHRvIGNvbnRpbnVlLiBUaGlzIGlz bid0IHN1cHBvc2VkCnRvIGhhcHBlbiB3aGVuIGV2ZXJ5dGhpbmcgZWxzZSBoYXMgYmVlbiBmaW5l IGZyb20gbGlieGwncyBwb2ludCBvZiB2aWV3LgoKVGhlIGVycm9yIGNvZGUgcmV0dXJuZWQgaGVy ZSB3aWxsIGJlIHBhc3NlZCB0byB0aGUgdXNlcidzIGNhbGxiYWNrLgoKPiA+ICsgICAgICAgIGlk ID0gbGlieGxfX2pzb25fb2JqZWN0X2dldF9pbnRlZ2VyKG8pOwo+ID4gKwo+ID4gKyAgICAgICAg aWYgKGlkID09IFFNUF9DQVBBQklMSVRZX05FR09USUFUSU9OX01TR0lEKSB7Cj4gPiArICAgICAg ICAgICAgLyogV2UgaGF2ZSBhIHJlc3BvbnNlIHRvIG91ciBxbXBfY2FwYWJpbGl0aWVzIGNtZCAq Lwo+ID4gKyAgICAgICAgICAgIGlmIChldi0+cW1wX3N0YXRlICE9IHFtcF9zdGF0ZV9jYXBhYmls aXR5X25lZ290aWF0aW9uIHx8Cj4gPiArICAgICAgICAgICAgICAgIHR5cGUgIT0gTElCWExfX1FN UF9NRVNTQUdFX1RZUEVfUkVUVVJOKQo+ID4gKyAgICAgICAgICAgICAgICBnb3RvIG91dF91bmtu b3duX2lkOwo+ID4gKyAgICAgICAgICAgIHFtcF9ldl9zZXRfc3RhdGUoZ2MsIGV2LCBxbXBfc3Rh dGVfY29ubmVjdGVkKTsKPiA+ICsgICAgICAgICAgICByZXR1cm4gMDsKPiA+ICsgICAgICAgIH0K PiAKPiBJJ20gYSBiaXQgcHV6emxlZCBhYm91dCB0aGUgY2FwYWJpbGl0eSBuZWdvdGF0aW9uLCBp dHMgaWQsIGV0Yy46Cj4gCj4gKiBXaHkgZG9lcyBRTVBfQ0FQQUJJTElUWV9ORUdPVElBVElPTl9N U0dJRCBleGlzdCBhdCBhbGwgPyAgWW91Cj4gICBjb3VsZCBqdXN0IHVzZSBhIG5vcm1hbCBpZCwg Y291bGRuJ3QgeW91ID8gIEFuZCB5b3UnZCBiZSBhYmxlIHRvCj4gICB0ZWxsIGZyb20geW91ciBv d24gc3RhdGUgdGhhdCBpdCB3YXMgdGhlIHJpZ2h0IHZhbHVlLgoKQnV0IEkgd291bGQgdGhlbiBu ZWVkcyB0byB0cmFjayB0d28gZGlmZmVyZW50IGlkcywgb25lIGZvciB0aGUKcW1wX2NhcGFiaWxp dGllcyBjb21tYW5kLCBhbmQgb25lIGZvciB0aGUgdXNlcidzIGNvbW1hbmQuCgo+ICogV2h5IGFy ZSB3ZSBldmVuIGRvaW5nIGNhcGFiaWxpdHkgbmVnb3RhdGlvbiB3aGVuIHdlIHRocm93IHRoZSBh bnN3ZXIKPiAgIGF3YXkgPwoKSXQgaXMgcGFydCBvZiB0aGUgcHJvdG9jb2wuCgpBbmQgcW1wX2Nh cGFiaWxpdGllcyBkb2Vzbid0IHJldHVybiBhbnl0aGluZyAoanVzdCBhbiBlbXB0eSBvYmplY3Qp LgoKPiAqIEkgdGhpbmsgaXQgd291bGQgYmUgYmV0dGVyIHRvIGNoZWNrIGlkID09IGV2LT5pZCBm aXJzdCwgcmF0aGVyCj4gICB0aGFuIGluIGVhY2ggb2YgdGhlc2UgYnJhbmNoZXMuCgpJIGRvbid0 IHRoaW5rIEkgZm9sbG93LiBpZD09ZXYtPmlkIGlzIG9ubHkgY2hlY2tlZCBvbmNlLgoKPiA+ICsg ICAgICAgIGlmIChldi0+cW1wX3N0YXRlID09IHFtcF9zdGF0ZV93YWl0aW5nX3JlcGx5ICYmCj4g PiArICAgICAgICAgICAgaWQgPT0gZXYtPmlkKSB7Cj4gPiArICAgICAgICAgICAgaWYgKHR5cGUg PT0gTElCWExfX1FNUF9NRVNTQUdFX1RZUEVfUkVUVVJOKSB7Cj4gPiArICAgICAgICAgICAgICAg IHJlc3BvbnNlID0gbGlieGxfX2pzb25fbWFwX2dldCgicmV0dXJuIiwgcmVzcCwgSlNPTl9BTlkp Owo+ID4gKyAgICAgICAgICAgICAgICByYyA9IDA7Cj4gPiArICAgICAgICAgICAgfSBlbHNlIHsK PiA+ICsgICAgICAgICAgICAgICAgLyogZXJyb3IgbWVzc2FnZSAqLwo+ID4gKyAgICAgICAgICAg ICAgICByZXNwb25zZSA9IE5VTEw7Cj4gPiArICAgICAgICAgICAgICAgIHJjID0gcW1wX2V2X3Bh cnNlX2Vycm9yX21lc3NhZ2VzKGVnYywgZXYsIHJlc3ApOwo+ID4gKyAgICAgICAgICAgIH0KPiA+ ICsgICAgICAgICAgICBxbXBfZXZfc2V0X3N0YXRlKGdjLCBldiwgcW1wX3N0YXRlX2Nvbm5lY3Rl ZCk7Cj4gPiArICAgICAgICAgICAgZXYtPmNhbGxiYWNrKGVnYywgZXYsIHJlc3BvbnNlLCByYyk7 IC8qIG11c3QgYmUgbGFzdCAqLwo+ID4gKyAgICAgICAgICAgIHJldHVybiAxOwo+ID4gKyAgICAg ICAgfQo+ID4gKwo+ID4gK291dF91bmtub3duX2lkOgo+IAo+IFdlJ3JlIGp1c3QgZmFsbGluZyB0 aHJvdWdoIGhlcmUuICBJdCBzZWVtcyB3ZWlyZCB0byBtZS4KPiAKPiBJIHdvdWxkIGV4cGVjdCB0 aGlzIHNlcXVlbmNlIG9mIGNoZWNrczoKPiAKPiAgICAxLiBDaGVjayBpZCBhZ2FpbnN0IG91ciBp ZDsgc2hvdWxkIGJlIHRoZSBzYW1lOyBpZiBub3QsIHRoaXMKPiAgICAgICBpcyBhbiBvdXQgb2Yg c2VxdWVuY2UgcmVwbHkgd2hpY2ggaXMgbm90IHBvc3NpYmxlLCBzbwo+ICAgICAgIGNhbGwgaXQg YSBwcm90b2NvbCBlcnJvci4KPiAKPiAgICAyLiBDaGVjayBpZiB0aGUgdGhpbmcgaXMgYW4gZXJy b3IgcmVzcG9uc2U7IGlmIGl0IGlzLCBwYXJzZSBhbmQKPiAgICAgICByZXR1cm4gdGhlIGVycm9y IG1lc3NhZ2UuCj4gCj4gICAgMi4gSXQgbXVzdCBiZSBhIFJFVFVSTi4gIChNYXliZSBhZGQgYW4g YXNzZXJ0IGhlcmUuKSAgQ2hlY2sgb3VyCj4gICAgICAgc3RhdGUsIHdoaWNoIHNob3VsZCBiZSBj YXBhYmlsaXR5X25lZ290aWF0aW9uIChpbiB3aGljaCBjYXNlIHdlCj4gICAgICAgZ28gdG8gdGhl IG5leHQgdGhpbmcpIG9yIHdhaXRpbmdfcmVwbHkgKGluIHdoaWNoIGNhc2Ugd2UncmUKPiAgICAg ICBkb25lKS4gIE90aGVyd2lzZSBpdCBpcyBhIHByb3RvY29sIGVycm9yLgoKSSBkb24ndCB0aGlu ayBhbGwgRVJST1Igc2hvdWxkIGJlIHByb3RvY29sIGVycm9yLiBUbyBtZSwgaXQgaXMgZmluZSBp ZiBhCmNvbW1hbmQgcmV0dXJucyBhbiBlcnJvciwgdGhlbiB0ZWxsIHRoZSB1c2VyIGFib3V0IGl0 LiBBbHNvLCB0aGVyZSBpcyBubwpuZWVkcyB0byB0ZWFyIGRvd24gdGhlIGNvbm5lY3Rpb24gaW4g dGhpcyBjYXNlLgoKQXMgZm9yIHRoZSBzZXF1ZW5jZSBvZiBjaGVja3MsIEkgY2FuIHRyeSB0byBm b2xsb3cgaXQsIGl0IG1pZ2h0IGxvb2sKd2VpcmQgYmVjYXVzZSB0aGVyZSBpcyB0d28gZGlmZmVy ZW50cyBpZHMgdG8gY2hlY2ssIHdoaWNoIGlkIGlzIHZhbGlkZQpkZXBlbmRzIG9uIHRoZSBjdXJy ZW50IHN0YXRlLgoKPiA+ICtpbnQgbGlieGxfX2V2X3FtcF9zZW5kKGxpYnhsX19nYyAqZ2MsIGxp YnhsX19ldl9xbXAgKmV2LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq Y21kLCBsaWJ4bF9fanNvbl9vYmplY3QgKmFyZ3MpCj4gPiArICAgIC8qIGRpc2Nvbm5lY3RlZCAt PiBjb25uZWN0aW5nCj4gPiArICAgICAqIGNvbm5lY3RlZCAtPiB3YWl0aW5nX3JlcGx5Cj4gPiAr ICAgICAqIG9uIGVycm9yOiBkaXNjb25uZWN0ZWQgKi8KPiA+ICt7Cj4gPiArICAgIGludCByYzsK PiA+ICsKPiA+ICsgICAgTE9HRChERUJVRywgZXYtPmRvbWlkLCAiIGV2ICVwLCBjbWQgJyVzJyIs IGV2LCBjbWQpOwo+ID4gKwo+ID4gKyAgICBhc3NlcnQoZXYtPnFtcF9zdGF0ZSA9PSBxbXBfc3Rh dGVfZGlzY29ubmVjdGVkIHx8Cj4gPiArICAgICAgICAgICBldi0+cW1wX3N0YXRlID09IHFtcF9z dGF0ZV9jb25uZWN0ZWQpOwo+ID4gKwo+ID4gKyAgICAvKiBDb25uZWN0IHRvIFFFTVUgaWYgbm90 IGFscmVhZHkgY29ubmVjdGVkICovCj4gPiArICAgIHJjID0gcW1wX2V2X2Nvbm5lY3QoZ2MsIGV2 KTsKPiA+ICsgICAgaWYgKHJjKQo+ID4gKyAgICAgICAgZ290byBvdXQ7Cj4gPiArCj4gPiArICAg IHJjID0gcW1wX2V2X3ByZXBhcmVfY21kKGdjLCBldiwgY21kLCBhcmdzKTsKPiA+ICsgICAgaWYg KHJjKQo+ID4gKyAgICAgICAgZ290byBvdXQ7Cj4gPiArCj4gPiArICAgIHFtcF9ldl9lbnN1cmVf cmVhZGluZ193cml0aW5nKGdjLCBldik7Cj4gPiArCj4gPiArb3V0Ogo+IAo+IFBsZWFzZSBhZGQK PiAgICAgICAgcmMgPSAwOwo+IGJlZm9yZSBvdXQ7Cj4gCj4gQnV0IHlvdSBtaWdodCBwcmVmZXIg anVzdCB0bwo+ICAgICAgICByZXR1cm4gMDsKPiBzaW5jZSB0aGVyZSBpcyBub3RoaW5nIGFsbG9j YXRlZCBpbiB0aGlzIGZ1bmN0aW9uIHRoYXQgb3VnaHQgdG8gYmUKPiBkaXNwb3NlZCAod2hpY2gg aXMgbmljZSkuCgpXaWxsIGRvLgoKVGhhbmtzLAoKLS0gCkFudGhvbnkgUEVSQVJECgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGlu ZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnBy b2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs