From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tamas K Lengyel Subject: Re: [PATCH v5] x86/altp2m: Aggregate get entry and populate into common funcs Date: Tue, 23 Apr 2019 07:26:28 -0600 Message-ID: References: <20190416084531.5084-1-aisaila@bitdefender.com> <51aac97d-3773-f3df-204d-55912f5915db@citrix.com> <73576bc2-5ab2-b5ef-ca0b-fb50b4cd7775@citrix.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 1hIvS3-0003tm-Em for xen-devel@lists.xenproject.org; Tue, 23 Apr 2019 13:27:11 +0000 Received: by mail-wm1-f43.google.com with SMTP id o25so34957wmf.5 for ; Tue, 23 Apr 2019 06:27:07 -0700 (PDT) In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: George Dunlap Cc: "wei.liu2@citrix.com" , "rcojocaru@bitdefender.com" , "george.dunlap@eu.citrix.com" , "andrew.cooper3@citrix.com" , "jbeulich@suse.com" , Alexandru Stefan ISAILA , "xen-devel@lists.xenproject.org" , "roger.pau@citrix.com" List-Id: xen-devel@lists.xenproject.org T24gVHVlLCBBcHIgMjMsIDIwMTkgYXQgNTo0NSBBTSBHZW9yZ2UgRHVubGFwIDxnZW9yZ2UuZHVu bGFwQGNpdHJpeC5jb20+IHdyb3RlOgo+Cj4gT24gNC8xOS8xOSA5OjMyIEFNLCBBbGV4YW5kcnUg U3RlZmFuIElTQUlMQSB3cm90ZToKPiA+Cj4gPgo+ID4gT24gMTguMDQuMjAxOSAyMTo0MiwgVGFt YXMgSyBMZW5neWVsIHdyb3RlOgo+ID4+IE9uIFRodSwgQXByIDE4LCAyMDE5IGF0IDExOjAyIEFN IEdlb3JnZSBEdW5sYXAgPGdlb3JnZS5kdW5sYXBAY2l0cml4LmNvbT4gd3JvdGU6Cj4gPj4+Cj4g Pj4+IE9uIDQvMTgvMTkgMjo1OSBQTSwgVGFtYXMgSyBMZW5neWVsIHdyb3RlOgo+ID4+Pj4gT24g VGh1LCBBcHIgMTgsIDIwMTkgYXQgMzo1MyBBTSBHZW9yZ2UgRHVubGFwIDxnZW9yZ2UuZHVubGFw QGNpdHJpeC5jb20+IHdyb3RlOgo+ID4+Pj4+Cj4gPj4+Pj4gT24gNC8xNy8xOSA3OjIyIFBNLCBU YW1hcyBLIExlbmd5ZWwgd3JvdGU6Cj4gPj4+Pj4+IE9uIFdlZCwgQXByIDE3LCAyMDE5IGF0IDE6 MTUgQU0gQWxleGFuZHJ1IFN0ZWZhbiBJU0FJTEEKPiA+Pj4+Pj4gPGFpc2FpbGFAYml0ZGVmZW5k ZXIuY29tPiB3cm90ZToKPiA+Pj4+Pj4+Cj4gPj4+Pj4+Pgo+ID4+Pj4+Pj4KPiA+Pj4+Pj4+IE9u IDE2LjA0LjIwMTkgMTg6MDcsIEdlb3JnZSBEdW5sYXAgd3JvdGU6Cj4gPj4+Pj4+Pj4gT24gNC8x Ni8xOSAzOjE5IFBNLCBUYW1hcyBLIExlbmd5ZWwgd3JvdGU6Cj4gPj4+Pj4+Pj4+IE9uIFR1ZSwg QXByIDE2LCAyMDE5IGF0IDg6MDIgQU0gR2VvcmdlIER1bmxhcCA8Z2VvcmdlLmR1bmxhcEBjaXRy aXguY29tPiB3cm90ZToKPiA+Pj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+PiBPbiA0LzE2LzE5IDI6NDQg UE0sIFRhbWFzIEsgTGVuZ3llbCB3cm90ZToKPiA+Pj4+Pj4+Pj4+PiBPbiBUdWUsIEFwciAxNiwg MjAxOSBhdCAyOjQ1IEFNIEFsZXhhbmRydSBTdGVmYW4gSVNBSUxBCj4gPj4+Pj4+Pj4+Pj4gPGFp c2FpbGFAYml0ZGVmZW5kZXIuY29tPiB3cm90ZToKPiA+Pj4+Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4+ Pj4gVGhlIGNvZGUgZm9yIGdldHRpbmcgdGhlIGVudHJ5IGFuZCB0aGVuIHBvcHVsYXRpbmcgd2Fz IHJlcGVhdGVkIGluCj4gPj4+Pj4+Pj4+Pj4+IHAybV9jaGFuZ2VfYWx0cDJtX2dmbigpIGFuZCBp biBwMm1fc2V0X2FsdHAybV9tZW1fYWNjZXNzKCkuCj4gPj4+Pj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+ Pj4+IFRoZSBjb2RlIGlzIG5vdyBpbiBvbmUgcGxhY2Ugd2l0aCBhIGJvb2wgcGFyYW0gdGhhdCBs ZXRzIHRoZSBjYWxsZXIgY2hvb3NlCj4gPj4+Pj4+Pj4+Pj4+IGlmIGl0IHBvcHVsYXRlcyBhZnRl ciBnZXRfZW50cnkoKS4KPiA+Pj4+Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4+Pj4gSWYgcmVtYXBwaW5n IGlzIGJlaW5nIGRvbmUgdGhlbiBib3RoIHRoZSBvbGQgYW5kIG5ldyBnZm4ncyBzaG91bGQgYmUK PiA+Pj4+Pj4+Pj4+Pj4gdW5zaGFyZWQgaW4gdGhlIGhvc3RwMm0gZm9yIGtlZXBpbmcgdGhpbmdz IGNvbnNpc3RlbnQuIFRoZSBwYWdlIHR5cGUKPiA+Pj4+Pj4+Pj4+Pj4gb2Ygb2xkX2dmbiB3YXMg YWxyZWFkeSBjaGVja2VkIHdoZXRoZXIgaXQncyBwMm1fcmFtX3J3IGFuZCBiYWlsIGlmIGl0Cj4g Pj4+Pj4+Pj4+Pj4+IHdhc24ndCBzbyBmdW5jdGlvbmFsaXR5LXdpc2UgdGhpcyBqdXN0IHNpbXBs aWZpZXMgdGhpbmdzIGFzIGEgdXNlcgo+ID4+Pj4+Pj4+Pj4+PiBkb2Vzbid0IGhhdmUgdG8gcmVx dWVzdCB1bnNoYXJpbmcgbWFudWFsbHkgYmVmb3JlIHJlbWFwcGluZy4KPiA+Pj4+Pj4+Pj4+Pj4g Tm93LCBpZiB0aGUgbmV3X2dmbiBpcyBpbnZhbGlkIGl0IHNob3VsZG4ndCBxdWVyeSB0aGUgaG9z dHAybSBhcwo+ID4+Pj4+Pj4+Pj4+PiB0aGF0IGlzIGVmZmVjdGl2ZWx5IGEgcmVxdWVzdCB0byBy ZW1vdmUgdGhlIGVudHJ5IGZyb20gdGhlIGFsdHAybS4KPiA+Pj4+Pj4+Pj4+Pj4gQnV0IHByb3Zp ZGVkIHRoYXQgc2NlbmFyaW8gaXMgdXNlZCBvbmx5IHdoZW4gcmVtb3ZpbmcgZW50cmllcyB0aGF0 Cj4gPj4+Pj4+Pj4+Pj4+IHdlcmUgcHJldmlvdXNseSByZW1hcHBlZC9jb3BpZWQgdG8gdGhlIGFs dHAybSwgdGhvc2UgZW50cmllcyBhbHJlYWR5Cj4gPj4+Pj4+Pj4+Pj4+IHdlbnQgdGhyb3VnaCBQ Mk1fQUxMT0MgfCBQMk1fVU5TSEFSRSBiZWZvcmUsIHNvIGl0IHdvbid0IGhhdmUgYW4KPiA+Pj4+ Pj4+Pj4+Pj4gYWZmZWN0IHNvIHRoZSBjb3JlIGZ1bmN0aW9uIGdldF9hbHRwMm1fZW50cnkoKSBp cyBjYWxsaW5nCj4gPj4+Pj4+Pj4+Pj4+IF9fZ2V0X2dmbl90eXBlX2FjY2VzcygpIHdpdGggUDJN X0FMTE9DIHwgUDJNX1VOU0hBUkUuCj4gPj4+Pj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+Pj4+IGFsdHAy bV9nZXRfZW50cnlfZGlyZWN0KCkgaXMgYWxzbyBjYWxsZWQgaW4gcDJtX3NldF9zdXBwcmVzc192 ZSgpCj4gPj4+Pj4+Pj4+Pj4+IGJlY2F1c2Ugb24gYSBuZXcgYWx0cDJtIHZpZXcgdGhlIGZ1bmN0 aW9uIHdpbGwgZmFpbCB3aXRoIGludmFsaWQgbWZuIGlmCj4gPj4+Pj4+Pj4+Pj4+IHAybS0+c2V0 X2VudHJ5KCkgd2FzIG5vdCBjYWxsZWQgYmVmb3JlLgo+ID4+Pj4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+ Pj4+PiBTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kcnUgSXNhaWxhIDxhaXNhaWxhQGJpdGRlZmVuZGVy LmNvbT4KPiA+Pj4+Pj4+Pj4+Pj4gU2lnbmVkLW9mZi1ieTogR2VvcmdlIER1bmxhcCA8Z2Vvcmdl LmR1bmxhcEBjaXRyaXguY29tPgo+ID4+Pj4+Pj4+Pj4+PiBSZXZpZXdlZC1ieTogR2VvcmdlIER1 bmxhcCA8Z2VvcmdlLmR1bmxhcEBjaXRyaXguY29tPgo+ID4+Pj4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+ Pj4+PiAtLS0KPiA+Pj4+Pj4+Pj4+Pj4gQ2hhbmdlcyBzaW5jZSBWNDoKPiA+Pj4+Pj4+Pj4+Pj4g ICAgICAgICAgIC0gQWRkIGFsdHAybSB0byBwYXRjaCBuYW1lCj4gPj4+Pj4+Pj4+Pj4+ICAgICAg ICAgICAtIENoYW5nZSBmdW5jIG5hbWUgZnJvbSBnZXRfYWx0cDJtX2VudHJ5KCkgdG8KPiA+Pj4+ Pj4+Pj4+Pj4gYWx0cDJtX2dldF9lbnRyeSgpLgo+ID4+Pj4+Pj4+Pj4+PiAtLS0KPiA+Pj4+Pj4+ Pj4+Pj4gICAgeGVuL2FyY2gveDg2L21tL21lbV9hY2Nlc3MuYyB8IDMwICsrLS0tLS0tLS0tLS0K PiA+Pj4+Pj4+Pj4+Pj4gICAgeGVuL2FyY2gveDg2L21tL3AybS5jICAgICAgICB8IDg0ICsrKysr KysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQo+ID4+Pj4+Pj4+Pj4+PiAgICB4ZW4vaW5j bHVkZS9hc20teDg2L3AybS5oICAgIHwgMTcgKysrKysrKysKPiA+Pj4+Pj4+Pj4+Pj4gICAgMyBm aWxlcyBjaGFuZ2VkLCA2NiBpbnNlcnRpb25zKCspLCA2NSBkZWxldGlvbnMoLSkKPiA+Pj4+Pj4+ Pj4+Pj4KPiA+Pj4+Pj4+Pj4+Pj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9tbS9tZW1fYWNj ZXNzLmMgYi94ZW4vYXJjaC94ODYvbW0vbWVtX2FjY2Vzcy5jCj4gPj4+Pj4+Pj4+Pj4+IGluZGV4 IGExNDRiYjBjZTQuLmRkZmUwMTY5YzAgMTAwNjQ0Cj4gPj4+Pj4+Pj4+Pj4+IC0tLSBhL3hlbi9h cmNoL3g4Ni9tbS9tZW1fYWNjZXNzLmMKPiA+Pj4+Pj4+Pj4+Pj4gKysrIGIveGVuL2FyY2gveDg2 L21tL21lbV9hY2Nlc3MuYwo+ID4+Pj4+Pj4+Pj4+PiBAQCAtMjYyLDM1ICsyNjIsMTEgQEAgaW50 IHAybV9zZXRfYWx0cDJtX21lbV9hY2Nlc3Moc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IHAybV9k b21haW4gKmhwMm0sCj4gPj4+Pj4+Pj4+Pj4+ICAgICAgICBtZm5fdCBtZm47Cj4gPj4+Pj4+Pj4+ Pj4+ICAgICAgICBwMm1fdHlwZV90IHQ7Cj4gPj4+Pj4+Pj4+Pj4+ICAgICAgICBwMm1fYWNjZXNz X3Qgb2xkX2E7Cj4gPj4+Pj4+Pj4+Pj4+IC0gICAgdW5zaWduZWQgaW50IHBhZ2Vfb3JkZXI7Cj4g Pj4+Pj4+Pj4+Pj4+IC0gICAgdW5zaWduZWQgbG9uZyBnZm5fbCA9IGdmbl94KGdmbik7Cj4gPj4+ Pj4+Pj4+Pj4+ICAgICAgICBpbnQgcmM7Cj4gPj4+Pj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+Pj4+IC0g ICAgbWZuID0gYXAybS0+Z2V0X2VudHJ5KGFwMm0sIGdmbiwgJnQsICZvbGRfYSwgMCwgTlVMTCwg TlVMTCk7Cj4gPj4+Pj4+Pj4+Pj4+IC0KPiA+Pj4+Pj4+Pj4+Pj4gLSAgICAvKiBDaGVjayBob3N0 IHAybSBpZiBubyB2YWxpZCBlbnRyeSBpbiBhbHRlcm5hdGUgKi8KPiA+Pj4+Pj4+Pj4+Pj4gLSAg ICBpZiAoICFtZm5fdmFsaWQobWZuKSApCj4gPj4+Pj4+Pj4+Pj4+IC0gICAgewo+ID4+Pj4+Pj4+ Pj4+PiAtCj4gPj4+Pj4+Pj4+Pj4+IC0gICAgICAgIG1mbiA9IF9fZ2V0X2dmbl90eXBlX2FjY2Vz cyhocDJtLCBnZm5fbCwgJnQsICZvbGRfYSwKPiA+Pj4+Pj4+Pj4+Pj4gLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFAyTV9BTExPQyB8IFAyTV9VTlNIQVJFLCAmcGFnZV9vcmRl ciwgMCk7Cj4gPj4+Pj4+Pj4+Pj4+IC0KPiA+Pj4+Pj4+Pj4+Pj4gLSAgICAgICAgcmMgPSAtRVNS Q0g7Cj4gPj4+Pj4+Pj4+Pj4+IC0gICAgICAgIGlmICggIW1mbl92YWxpZChtZm4pIHx8IHQgIT0g cDJtX3JhbV9ydyApCj4gPj4+Pj4+Pj4+Pj4+IC0gICAgICAgICAgICByZXR1cm4gcmM7Cj4gPj4+ Pj4+Pj4+Pj4+IC0KPiA+Pj4+Pj4+Pj4+Pj4gLSAgICAgICAgLyogSWYgdGhpcyBpcyBhIHN1cGVy cGFnZSwgY29weSB0aGF0IGZpcnN0ICovCj4gPj4+Pj4+Pj4+Pj4+IC0gICAgICAgIGlmICggcGFn ZV9vcmRlciAhPSBQQUdFX09SREVSXzRLICkKPiA+Pj4+Pj4+Pj4+Pj4gLSAgICAgICAgewo+ID4+ Pj4+Pj4+Pj4+PiAtICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBtYXNrID0gfigoMVVMIDw8IHBh Z2Vfb3JkZXIpIC0gMSk7Cj4gPj4+Pj4+Pj4+Pj4+IC0gICAgICAgICAgICBnZm5fdCBnZm4yID0g X2dmbihnZm5fbCAmIG1hc2spOwo+ID4+Pj4+Pj4+Pj4+PiAtICAgICAgICAgICAgbWZuX3QgbWZu MiA9IF9tZm4obWZuX3gobWZuKSAmIG1hc2spOwo+ID4+Pj4+Pj4+Pj4+PiAtCj4gPj4+Pj4+Pj4+ Pj4+IC0gICAgICAgICAgICByYyA9IGFwMm0tPnNldF9lbnRyeShhcDJtLCBnZm4yLCBtZm4yLCBw YWdlX29yZGVyLCB0LCBvbGRfYSwgMSk7Cj4gPj4+Pj4+Pj4+Pj4+IC0gICAgICAgICAgICBpZiAo IHJjICkKPiA+Pj4+Pj4+Pj4+Pj4gLSAgICAgICAgICAgICAgICByZXR1cm4gcmM7Cj4gPj4+Pj4+ Pj4+Pj4+IC0gICAgICAgIH0KPiA+Pj4+Pj4+Pj4+Pj4gLSAgICB9Cj4gPj4+Pj4+Pj4+Pj4+ICsg ICAgcmMgPSBhbHRwMm1fZ2V0X2VudHJ5X3ByZXBvcHVsYXRlKGFwMm0sIGdmbiwgJm1mbiwgJnQs ICZvbGRfYSk7Cj4gPj4+Pj4+Pj4+Pj4+ICsgICAgaWYgKCByYyApCj4gPj4+Pj4+Pj4+Pj4+ICsg ICAgICAgIHJldHVybiByYzsKPiA+Pj4+Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4+Pj4gICAgICAgIC8q Cj4gPj4+Pj4+Pj4+Pj4+ICAgICAgICAgKiBJbmhlcml0IHRoZSBvbGQgc3VwcHJlc3MgI1ZFIGJp dCB2YWx1ZSBpZiBpdCBpcyBhbHJlYWR5IHNldCwgb3Igc2V0IGl0Cj4gPj4+Pj4+Pj4+Pj4+IGRp ZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvbW0vcDJtLmMgYi94ZW4vYXJjaC94ODYvbW0vcDJtLmMK PiA+Pj4+Pj4+Pj4+Pj4gaW5kZXggOWU4MWEzMGNjNC4uN2JlZGZkNTkzYiAxMDA2NDQKPiA+Pj4+ Pj4+Pj4+Pj4gLS0tIGEveGVuL2FyY2gveDg2L21tL3AybS5jCj4gPj4+Pj4+Pj4+Pj4+ICsrKyBi L3hlbi9hcmNoL3g4Ni9tbS9wMm0uYwo+ID4+Pj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+Pj4gV291bGRu J3QgaXQgbWFrZSBtb3JlIHNlbnNlIHRvIHN0YXJ0IGFkZGluZyBuZXcgYWx0cDJtIGZ1bmN0aW9u cyB0bwo+ID4+Pj4+Pj4+Pj4+IG1tL2FsdHAybS5jIGluc3RlYWQ/IFByb2JhYmx5IHRoZSBhbHRw Mm0gZnVuY3Rpb25zIGZyb20gbW0vcDJtLmMgY291bGQKPiA+Pj4+Pj4+Pj4+PiBhbHNvIGJlIHJl bG9jYXRlZCB0aGVyZSBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUuCj4gPj4+Pj4+Pj4+Pj4K PiA+Pj4+Pj4+Pj4+Pj4gQEAgLTQ3OCw2ICs0NzgsNDMgQEAgdm9pZCBwMm1fdW5sb2NrX2FuZF90 bGJfZmx1c2goc3RydWN0IHAybV9kb21haW4gKnAybSkKPiA+Pj4+Pj4+Pj4+Pj4gICAgICAgICAg ICBtbV93cml0ZV91bmxvY2soJnAybS0+bG9jayk7Cj4gPj4+Pj4+Pj4+Pj4+ICAgIH0KPiA+Pj4+ Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4+Pj4gK2ludCBhbHRwMm1fZ2V0X2VudHJ5KHN0cnVjdCBwMm1f ZG9tYWluICphcDJtLAo+ID4+Pj4+Pj4+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg IGdmbl90IGdmbiwgbWZuX3QgKm1mbiwgcDJtX3R5cGVfdCAqdCwKPiA+Pj4+Pj4+Pj4+Pj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwMm1fYWNjZXNzX3QgKmEsIGJvb2wgcHJlcG9wdWxh dGUpCj4gPj4+Pj4+Pj4+Pj4+ICt7Cj4gPj4+Pj4+Pj4+Pj4+ICsgICAgKm1mbiA9IGFwMm0tPmdl dF9lbnRyeShhcDJtLCBnZm4sIHQsIGEsIDAsIE5VTEwsIE5VTEwpOwo+ID4+Pj4+Pj4+Pj4+PiAr Cj4gPj4+Pj4+Pj4+Pj4+ICsgICAgLyogQ2hlY2sgaG9zdCBwMm0gaWYgbm8gdmFsaWQgZW50cnkg aW4gYWx0ZXJuYXRlICovCj4gPj4+Pj4+Pj4+Pj4+ICsgICAgaWYgKCAhbWZuX3ZhbGlkKCptZm4p ICYmICFwMm1faXNfaG9zdHAybShhcDJtKSApCj4gPj4+Pj4+Pj4+Pj4+ICsgICAgewo+ID4+Pj4+ Pj4+Pj4+PiArICAgICAgICBzdHJ1Y3QgcDJtX2RvbWFpbiAqaHAybSA9IHAybV9nZXRfaG9zdHAy bShhcDJtLT5kb21haW4pOwo+ID4+Pj4+Pj4+Pj4+PiArICAgICAgICB1bnNpZ25lZCBpbnQgcGFn ZV9vcmRlcjsKPiA+Pj4+Pj4+Pj4+Pj4gKyAgICAgICAgaW50IHJjOwo+ID4+Pj4+Pj4+Pj4+PiAr Cj4gPj4+Pj4+Pj4+Pj4+ICsgICAgICAgICptZm4gPSBfX2dldF9nZm5fdHlwZV9hY2Nlc3MoaHAy bSwgZ2ZuX3goZ2ZuKSwgdCwgYSwKPiA+Pj4+Pj4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQMk1fQUxMT0MgfCBQMk1fVU5TSEFSRSwgJnBhZ2Vfb3JkZXIsIDAp Owo+ID4+Pj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+Pj4gU28gZGVzcGl0ZSB0aGUgbmFtZSBiZWluZyBh bHRwMm1fZ2V0X2VudHJ5IHlvdSBub3cgcmV0dXJuIGFuIGVudHJ5Cj4gPj4+Pj4+Pj4+Pj4gZnJv bSB0aGUgaG9zdHAybSwgZXZlbiBpZiBwcmVwb3B1bGF0ZSBpcyBmYWxzZS4gSWYgdGhlIGNhbGxl ciBrbm93cyBpdAo+ID4+Pj4+Pj4+Pj4+IGRvZXNuJ3Qgd2FudCB0aGF0IGVudHJ5IHRvIGJlIGNv cGllZCBpbnRvIHRoZSBhbHRwMm0sIHdoeSBub3QgaGF2ZSBpdAo+ID4+Pj4+Pj4+Pj4+IGNhbGwg X19nZXRfZ2ZuX3R5cGVfYWNjZXNzIGl0c2VsZiBmb3IgdGhlIGhvc3RwMm0/IElNSE8gdGhpcyBp cyBqdXN0Cj4gPj4+Pj4+Pj4+Pj4gY29uZnVzaW5nIGFuZCBkb2Vzbid0IGhlbHAgcmVhZGFiaWxp dHkgb2YgdGhlIGFsdHAybSBjb2RlLgo+ID4+Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4+IFlvdSByZXR1 cm4gdGhlIGFwMm0gZW50cnkgaWYgaXQncyBwcmVzZW50LCBvciB0aGUgaHAybSBlbnRyeSBpZiBp dCdzCj4gPj4+Pj4+Pj4+PiBub3QuICBJdCdzIG5vdCBhIGxvdCBvZiBkdXBsaWNhdGlvbiwgYnV0 IGl0IG1ha2VzIHRoZSBsb2dpYyBjbGVhbmVyIEkKPiA+Pj4+Pj4+Pj4+IHRoaW5rOyB3aHkgbm90 IGRlZHVwbGljYXRlIGl0Pwo+ID4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+PiBJIGhhdmUgbm8gcHJvYmxl bSB3aXRoIG1ha2luZyB0aGUgY29kZSBtb3JlIHN0cmVhbWxpbmVkLiBUaGUgcHJvYmxlbSBJCj4g Pj4+Pj4+Pj4+IGhhdmUgaXMgdGhhdCB0aGUgZnVuY3Rpb24ncyBuYW1lIGRvZXNuJ3Qgc3VnZ2Vz dCBpdCB3b3VsZCBnZXQgeW91Cj4gPj4+Pj4+Pj4+IGFueXRoaW5nIGJ1dCB0aGUgZW50cnkgZnJv bSB0aGUgc3BlY2lmaWVkIGFsdHAybS4gU28geW91IGNvdWxkIGJlCj4gPj4+Pj4+Pj4+IHJlYWRp bmcgdGhlIGNvZGUgYXNzdW1pbmcgeW91IGFyZSBkZWFsaW5nIHdpdGggYW4gZW50cnkgZnJvbSB0 aGF0Cj4gPj4+Pj4+Pj4+IHNwZWNpZmllZCB0YWJsZSB3aGVuIGluIGZhY3QgeW91IGFyZSBub3Qu IFRoYXQgaXMgbm90IGFuIGV4cGVjdGVkCj4gPj4+Pj4+Pj4+IGJlaGF2aW9yIGJhc2VkIG9uIGp1 c3QgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uLiBUaGlzIGlzIGdvaW5nIHRvIG1ha2UKPiA+Pj4+ Pj4+Pj4gcmVhZGluZyB0aGUgYWx0cDJtIGNvZGUgdGhhdCBtdWNoIGhhcmRlciBpbiB0aGUgZnV0 dXJlLgo+ID4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4gUmlnaHQgLS0gSSB3YXNuJ3QgYSBodWdlIGZhbiBv ZiAnZGlyZWN0JyBlaXRoZXI7IGl0IGRpZG4ndCByZWFsbHkgY29udmV5Cj4gPj4+Pj4+Pj4gdG8g bWUgMTAwJSB3aGF0IHRoZSBmdW5jdGlvbiBkaWQuICBNeSBQb0MgaGFkICJzZWV0aHJvdWdoIiwg YnV0IHRoYXQKPiA+Pj4+Pj4+PiB3YXNuJ3QgdGhhdCBncmVhdCBlaXRoZXIuICAiUGVlayI/ICBB bnkgb3RoZXIgc3VnZ2VzdGlvbnM/Cj4gPj4+Pj4+Pj4KPiA+Pj4+Pj4+PiBPdGhlciBvcHRpb25z Ogo+ID4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4gKiBJZiB3ZSBoYXZlIGEgc2luZ2xlIGZ1bmN0aW9uIHdp dGggYSAjZGVmaW5lLCB0aGlzIG1pZ2h0IGdldCBhIGJpdAo+ID4+Pj4+Pj4+IGVhc2llcjsgIHdl IGNvdWxkIGhhdmUgb25lIGJlIEFQMk1HRVRfZG9udF9wcmVwb3B1bGF0ZSBvciBzb21ldGhpbmcu Cj4gPj4+Pj4+Pj4KPiA+Pj4+Pj4+PiAoIFdlIGNvdWxkIGhhdmUgdGhlICJjb3JlIiBmdW5jdGlv biBuYW1lZCBfYWx0cDJtX2dldF9lbnRyeSwgYW5kIGhhdmUKPiA+Pj4+Pj4+PiBhbHRwMm1fZ2V0 X2VudHJ5KCkgY2FsbCB3aXRoIHByZXBvcHVsYXRlID0gZmFsc2UsIGFuZAo+ID4+Pj4+Pj4+IGFs dHAybV9nZXRfZW50cnlfcHJlcG9wdWxhdGUoKSBjYWxsIGl0IHdpdGggcHJlcG9wdWxhdGUgPSB0 cnVlLgo+ID4+Pj4+Pj4KPiA+Pj4+Pj4+IFRoaXMgb3B0aW9uIHdpdGggbm8gZGVmaW5lcyBzZWVt cyB0byBzb2x2ZSBtb3JlIG9mIHRoZSBuYW1pbmcgcHJvYmxlbXMKPiA+Pj4+Pj4+IGJ1dCBpdCB3 aWxsIHN0aWxsIGludHJvZHVjZSB0aGUgc3BhZ2hldHRpIGNvZGUuIEkgdm90ZSBmb3IgdGhpcyBv bmUgYW5kCj4gPj4+Pj4+PiBpZiBUYW1hcyBhZ3JlZXMgSSB3aWxsIGhhdmUgaXQgdGhpcyB3YXkg aW4gdGhlIG5leHQgdmVyc2lvbi4KPiA+Pj4+Pj4+Cj4gPj4+Pj4+Cj4gPj4+Pj4+IEhhdmluZyBh bHRwMm1fZ2V0X2VudHJ5IGFuZCBhbHRwMm1fZ2V0X2VudHJ5X3ByZXBvcHVsYXRlIHNlZW0gdG8g YmUgYQo+ID4+Pj4+PiBiZXR0ZXIgbmFtZSBmb3IgdGhlbSwgYXMgbG9uZyBhcyBhbHRwMm1fZ2V0 X2VudHJ5IGRvZXNuJ3QgcmV0dXJuIGFuCj4gPj4+Pj4+IGVudHJ5IGZyb20gdGhlIGhvc3RwMm0g aWYgdGhlcmUgaXNuJ3Qgb25lIGluIHRoZSBhbHRwMm0sIGFuZAo+ID4+Pj4+PiBhbHRwMm1fZ2V0 X2VudHJ5X3ByZXBvcHVsYXRlIHJldHVybnMgYW4gZW50cnkgb25seSBpZiBwcmVwb3B1bGF0aW9u Cj4gPj4+Pj4+IGFjdHVhbGx5IHdvcmtlZC4gSW4gYm90aCBvZiB0aG9zZSBjYXNlcyB0aGUgZnVu Y3Rpb25zIHdvdWxkIG9ubHkKPiA+Pj4+Pj4gcmV0dXJuIGVudHJpZXMgZnJvbSB0aGUgYWx0cDJt LCBhcyB0aGVpciBuYW1lIGFjdHVhbGx5IHN1Z2dlc3RzLgo+ID4+Pj4+Cj4gPj4+Pj4gWW91IHNl ZW0gdG8gaGF2ZSBtaXNzZWQgdGhlIHdob2xlIHBvaW50IG9mIHRoaXMgcGF0Y2ggdGhlbi4KPiA+ Pj4+Cj4gPj4+PiBGb3JnaXZlIG1lIGJ1dCB0aGVuIEkgZG9uJ3Qgc2VlIGFueXdoZXJlIGluIHRo ZSBwYXRjaCBkZXNjcmlwdGlvbiB0aGF0Cj4gPj4+PiBleHBsYWluIHdoeSB0aGVzZSBmdW5jdGlv bnMgX2hhdmUgdG9fIHBlcmZvcm0gYSBmYWxsLWJhY2sgYW5kIHJldHVybgo+ID4+Pj4gYW4gZW50 cnkgZnJvbSB0aGUgaG9zdHAybSBhdCBhbGwgY29zdC4KPiA+Pj4KPiA+Pj4gVGhlIHByaW1hcnkg ZWZmZWN0IG9mIHRoaXMgcGF0Y2ggaXMgdG8gbW92ZSBkdXBsaWNhdGVkIGNvZGUgaW50byBhCj4g Pj4+IHNpbmdsZSBjb21tb24gZnVuY3Rpb24uICBUaGUgY29kZSBiZWluZyBkZS1kdXBsaWNhdGVk Ogo+ID4+PiAgIDEuIFRyaWVzIHRvIHJlYWQgdGhlIGFsdHAybSBlbnRyeTsgaWYgaXQncyB0aGVy ZSBpdCB1c2VzIGl0Cj4gPj4+ICAgMi4gSWYgaXQncyBub3QgdGhlcmUsIGl0IHRyaWVzIHRvIHJl YWQgdGhlIGhvc3QgcDJtIGVudHJ5Cj4gPj4+ICAgMy4gSW4gbW9zdCBjYXNlcyBpdCB0aGVuIHBy b3BhZ2F0ZXMgdGhlIGhvc3RwMm0gZW50cnkgdG8gdGhlIGFsdHAybSBlbnRyeS4KPiA+Pj4KPiA+ Pj4gT2J2aW91c2x5IHRoZSBuZXcgImNvbW1vbiIgZnVuY3Rpb24gaGFzIHRvIGRvIGl0IGJlY2F1 c2UgdGhhdCdzIHdoYXQgdGhlCj4gPj4+IG9yaWdpbmFsIGNvZGUgZG9lcy4gIFRoZSBvcmlnaW5h bCBjb2RlIGRvZXMgaXQgYmVjYXVzZSB0aGF0J3Mgd2hhdAo+ID4+PiBhbHRwMm0gaXMgLS0gYSAi cGF0Y2giIG92ZXIgdGhlIGhvc3QgcDJtLCBzdWNoIHRoYXQgeW91IHVzZSB0aGUgYWx0cDJtCj4g Pj4+IGlmIGVudHJpZXMgYXJlIHByZXNlbnQsIGJ1dCB1c2UgdGhlIGhvc3RwMm0gb3RoZXJ3aXNl Lgo+ID4+Pgo+ID4+Pj4+IEluc3RlYWQgb2Ygc2F5aW5nLCAiSSBkb24ndCBsaWtlIHRoZXNlIG5h bWVzIiAoYnV0IG5vdCBvZmZlcmluZwo+ID4+Pj4+IGFsdGVybmF0aXZlKSwgb3Igc2F5aW5nLCAi SWYgeW91IHVzZSB0aGVzZSBuYW1lcywgdGhlIGZ1bmN0aW9ucyBoYXZlIHRvCj4gPj4+Pj4gZG8g dGhlIGV4YWN0IG9wcG9zaXRlIG9mIHdoYXQgdGhleSBkbyBpbiB0aGlzIHBhdGNoIiwgaXQgd291 bGQgYmUgbW9yZQo+ID4+Pj4+IGNvbnN0cnVjdGl2ZSBpZiB5b3UgcHJvcG9zZWQgbmFtZXMgd2hp Y2ggeW91IHdvdWxkIHByZWZlciBmb3IgdGhlCj4gPj4+Pj4gZnVuY3Rpb25hbGl0eSBhY3R1YWxs eSBpbiB0aGlzIHBhdGNoLgo+ID4+Pj4+Cj4gPj4+Pgo+ID4+Pj4gSSdtIG5vdCB0aGUgbWFpbnRh aW5lciBvZiB0aGlzIGNvZGUgc28gZmVlbCBmcmVlIHRvIGlnbm9yZSBteQo+ID4+Pj4gY29tbWVu dHMuIEkganVzdCBzZWUgd2F5IHRvbyBtYW55IGZ1bmN0aW9ucyBpbiBYZW4gdGhhdCBhcmUgImRv X3goKSIKPiA+Pj4+IGJ1dCBpbiBpbiBmYWN0IHR1cm4gb3V0IHRvIGJlICJkb194X2FuZF95X2Fu ZF96KCkiIHdoaWNoIGRvZXMgbm90IGhlbHAKPiA+Pj4+IHJlYWRhYmlsaXR5IG9yIGV2ZW4gcmVh bGx5IHVuZGVyc3RhbmRpbmcgd2hhdCBpcyBoYXBwZW5pbmcuIEkgZ3Vlc3MgYXQKPiA+Pj4+IGxl YXN0IGFkZGluZyBjb21tZW50cyBkZXNjcmliaW5nIHRoZXNlIGFkZGl0aW9uYWwgYW5kIHNvbWV0 aW1lcwo+ID4+Pj4gdW5leHBlY3RlZCBiZWhhdmlvcnMgd291bGQgYmUgYW4gaW1wcm92ZW1lbnQu Cj4gPj4+Cj4gPj4+IFlvdSBhcmUgYSBtYWludGFpbmVyIGZvciBtZW1fYWNjZXNzLmMsIHdoaWNo IGhhcyBhIG5vbi10cml2aWFsIGNoYW5nZSBpbgo+ID4+PiB0aGlzIHBhdGNoLiAgSXQgY2FuIGdv IGluIHdpdGggUmF6dmFuJ3MgYWNrLCBidXQgbm90IHdoaWxlIHlvdSBoYXZlIG9wZW4KPiA+Pj4g b2JqZWN0aW9ucy4KPiA+Pgo+ID4+IFllcywgSSBtZWFudCB0aGF0IHdoZXJlIHRoaXMgY29kZSBp cyBiZWluZyByZWxvY2F0ZWQgdG8gaXMgbm8gbG9uZ2VyCj4gPj4gdW5kZXIgb3VyIG1lbV9hY2Nl c3MgdW1icmVsbGEgc28gSSdtIG5vdCBnb2luZyB0byBiZSB0aGUgbWFpbnRhaW5lciBvZgo+ID4+ IGl0LiBJZiB0aGUgbmV3IG1haW50YWluZXJzIG9mIHRoaXMgY29kZSBhcmUgT0sgd2l0aCBob3cg aXQgaXMsIHRoYW4KPiA+PiB0aGF0J3MgdGhhdC4gVGhlIGNoYW5nZXMgYmVpbmcgbWFkZSBpbiB0 aGlzIHBhdGNoIHRvIG1lbV9hY2Nlc3MgSSBoYXZlCj4gPj4gbm8gb2JqZWN0aW9uIHRvLiBUaGVy ZSBhdCBsZWFzdCBpdHMgaW1wbGllZCB0aGF0IGEgY29weSB3aWxsIGhhcHBlbgo+ID4+IGZyb20g dGhlIGhvc3RwMm0gb3IgYW4gZXJyb3IgaXMgcmV0dXJuZWQgc28gdGhlIGVudHJ5IHRoYXQgX2lz Xwo+ID4+IHJldHVybmVkIHNob3VsZCBub3QgYmUgdXNlZC4gQWx0aG91Z2ggaXQgd291bGQgYmUg YmV0dGVyIGlmICptZm4gaXMKPiA+PiBub3QgY2hhbmdlZCB1bnRpbCB0aGUgZmluYWwgcmV0dXJu IHdpdGggbm8gZXJyb3IsIGJ1dCBpdCdzIGEgbWlub3IKPiA+PiBlbm91Z2ggaXNzdWUgdGhhdCBJ IHdvdWxkIG5vdCBibG9jayB0aGlzIHBhdGNoIGJlY2F1c2Ugb2YgaXQuCj4gPj4KPiA+Pj4KPiA+ Pj4gSSBmZWVsIHlvdXIgcGFpbiB3aXRoIGZ1bmN0aW9uIG5hbWluZzsgSSd2ZSBiZWVuIGRpZ2dp bmcgdGhyb3VnaAo+ID4+PiB4ODYvbW0uYyByZWNlbnRseSBhbmQgdGhlIGZ1bmN0aW9uIG5hbWVz IGFyZSB1bm5lY2Vzc2FyaWx5IGNvbmZ1c2luZy4gIEkKPiA+Pj4gYWxzbyBhZ3JlZSB0aGF0ICJh bHRwMm1fZ2V0X2VudHJ5IiBpc24ndCB0ZXJyaWJseSBpbmZvcm1hdGl2ZSAoYWx0aG91Z2gKPiA+ Pj4gaXQncyBhIGJpdCBtb3JlIG9idmlvdXMgaWYgeW91IGtub3cgaG93IGFsdHAybSBpcyBtZWFu dCB0byB3b3JrKS4gIEknbQo+ID4+PiBqdXN0IHRyeWluZyB0byBtYWtlIHN1cmUgdGhhdCB0aGVy ZSdzIGEgY2xlYXIgd2F5IGZvciBBbGV4YW5kcnUgdG8gbW92ZQo+ID4+PiB0aGlzIHBhdGNoIGZv cndhcmQuICBJIGRvbid0IG1pbmQgdHJ5aW5nIHRvIGNvbWUgdXAgd2l0aCBhIGJldHRlciBuYW1l LAo+ID4+PiBidXQgdGhlIHBhdGNoIHNob3VsZG4ndCBiZSBibG9ja2VkIGlmIHdlIGNhbid0Lgo+ ID4+Pgo+ID4+PiBJIGFncmVlIHRoYXQgdGhlIGZ1bmN0aW9uIHNob3VsZCBoYXZlIGEgY29tbWVu dCB0aGF0IGRlc2NyaWJlcyBpdHMgcHVycG9zZS4KPiA+Pj4KPiA+Pj4gV2hhdCBhYm91dCAiYWx0 cDJtX3Jlc29sdmVfZW50cnkoKSI/ICAiYWx0cDJtX2dldF9lZmZlY3RpdmVfZW50cnkiPwo+ID4+ Cj4gPj4gUGVyaGFwcyBnZXRfZWZmZWN0aXZlX2VudHJ5IGlzIHRoZSBiZXN0IHNvIGZhciBidXQg ZXZlbiB0aGF0IEkgd291bGQKPiA+PiBoYXZlIG5vIGlkZWEgd2hhdCBpdCBtZWFucyB3aXRob3V0 IHJlYWRpbmcgdGhlIGNvZGUgb3IgcmVhZGluZyB0aGUKPiA+PiBjb21tZW50IGRlc2NyaWJpbmcg dGhlIGZ1bmN0aW9uLiBIb3cgYWJvdXQKPiA+PiAicDJtX3NlYXJjaF9hbHRwMm1fdGhlbl9ob3N0 cDJtIiB3aXRoIGEgY29tbWVudCBzYXlpbmcgaG9zdHAybSBpcyBhCj4gPj4gZmFsbGJhY2s/Cj4g Pj4KPiA+Cj4gPiBJIGd1ZXNzIHAybV9zZWFyY2hfYWx0cDJtX3RoZW5faG9zdHAybSBpcyBhIGJp dCBsb25nIGJ1dCBpdCBzb2x2ZXMgdGhlCj4gPiBwcm9ibGVtLiBJZiBHb2VyZ2UgaXMgb2sgd2l0 aCB0aGlzIEkgd2lsbCBwdXQgaXQgaW4uCj4gPgo+ID4gSnVzdCB0byBjbGFyaWZ5LCBhbHRwMm1f Z2V0X2VudHJ5IHdpbGwgY2hhbmdlIHRvCj4gPiBwMm1fc2VhcmNoX2FsdHAybV90aGVuX2hvc3Rw Mm0gYW5kIHRoZW4gdGhlIHJlc3Qgd2lsbCByZW1haW4gdGhlIHNhbWUKPiA+IChhbHRwMm1fZ2V0 X2VudHJ5X2RpcmVjdCwgYWx0cDJtX2dldF9lbnRyeV9wcmVwb3B1bGF0ZSk/IEFuZCB0aGVuIGFk ZCBhCj4gPiBjb21tZW50IGZvciB0aGUgbWFpbiBmdW5jdGlvbi4KPiA+Cj4gPiBIb3BlIEkndmUg Z290IHRoYXQgcmlnaHQgZm9ybSB0aGUgbG9uZyBuYW1lIGNoYW5naW5nIGNvbnZlcnNhdGlvbi4K Pgo+IFVuZm9ydHVuYXRlbHksIGl0IGxvb2tzIGxpa2UgeW91IGhhdmVuJ3QuIDotKSAgVGFtYXMn IGluaXRpYWwgb2JqZWN0aW9uLAo+IGFzIEkgdW5kZXJzdGFuZCB0aGVtLCB3ZXJlIHNwZWNpZmlj YWxseSB0aGF0IGFsdHAybV9nZXRfZW50cnlfZGlyZWN0KCkKPiBzb3VuZHMgdG8gaGltIGxpa2Ug aXQgc2hvdWxkICJkaXJlY3RseSIgZ2V0IHRoZSBiYWNraW5nIHZhbHVlIGZyb20gdGhlCj4gaG9z dHAybSBhbHdheXMsIGFuZCBuZXZlciBnZXQgdGhlICJwYXRjaGVkIiB2YWx1ZSBmcm9tIHRoZSBh bHRwMm0uCj4KPiBCdXQgcDJtX3NlYXJjaF9hbHRwMm1fdGhlbl9ob3N0cDJtKCkgaXNuJ3QgYmV0 dGVyLCBiZWNhdXNlIGl0IGRvZXNuJ3QKPiBtZW50aW9uIHRoYXQgeW91IHN0b3Agc2VhcmNoaW5n IHRoZSBhbHRwMm0gaWYgeW91IGZvdW5kIHdoYXQgeW91IHdlcmUKPiBsb29raW5nIGZvciwgbm9y IHdoYXQgeW91J3JlIHNlYXJjaGluZyBmb3IsIG5vciB3aHkuCj4KPiBJIHRoaW5rIGFsdHAybV9n ZXRfZWZmZWN0aXZlX2VudHJ5KCkgaXMgdGhlIGJlc3QuICAiRWZmZWN0aXZlIiBpbiBDUyBpcwo+ IGNvbW1vbmx5IHVzZWQgdG8gbWVhbiwgInRoZSBlbmQgcmVzdWx0IGFmdGVyIGNvbWJpbmluZyBz ZXZlcmFsIGlucHV0cyIKPiAoZS5nLiwgImVmZmVjdGl2ZSBhZGRyZXNzIiBpcyBvZnRlbiBiYXNl ICsgb2Zmc2V0KTsgSWYgeW91IGtub3cgd2hhdAo+IGFsdHAybSBpcywgdGhlbiBpdCdzIHByZXR0 eSBvYnZpb3VzIHdoYXQgdGhlIGlucHV0cyB3b3VsZCBiZSBhbmQgaG93Cj4gaXQncyB1c2VkLiAg SWYgeW91ICpkb24ndCoga25vdyB3aGF0IGFsdHAybSBpcywgdGhlbgo+ICJwMm1fc2VhcmNoX2Fs dHAybV90aGVuX2hvc3RwMm0oKSIgaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUganVzdCBhcwo+IG15 c3RpZnlpbmcuCj4KPiBQcm9iYWJseSBqdXN0IGhhdmUgYSBzaW5nbGUgZnVuY3Rpb24gdGhhdCB0 YWtlcyBhICdwcmVwb3B1bGF0ZSBhcmd1bWVudDsKPiBhbmQgbWFrZSBzb21lICNkZWZpbmVzIHRv IG1ha2UgaXQgZWFzaWVyIHRvIGZvbGxvdzsgcHJvYmFibHkgc29tZXRoaW5nCj4gbGlrZSAnQVAy TUdFVF9wcmVwb3B1bGF0ZScgYW5kICdBUDJNR0VUX3F1ZXJ5Jy4KPgo+IEFuZCBtYWtlIHN1cmUg dG8gaGF2ZSBhIGNvbW1lbnQgZGVzY3JpYmluZyB3aGF0IHRoZSBmdW5jdGlvbiBkb2VzLgoKVGhh bmtzIEdlb3JnZSwgdGhhdCBpcyByZWFzb25hYmxlIGFuZCBzb3VuZHMgZ29vZCB0byBtZS4KClRh bWFzCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4t ZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczov L2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CE562C10F14 for ; Tue, 23 Apr 2019 13:27:34 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 8EA6120685 for ; Tue, 23 Apr 2019 13:27:34 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=tklengyel.com header.i=@tklengyel.com header.b="tcyzq9jG" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8EA6120685 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=tklengyel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hIvS5-0003tr-E7; Tue, 23 Apr 2019 13:27:13 +0000 Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hIvS3-0003tm-Em for xen-devel@lists.xenproject.org; Tue, 23 Apr 2019 13:27:11 +0000 X-Inumbo-ID: 7ed379b2-65cb-11e9-92d7-bc764e045a96 Received: from rs224.mailgun.us (unknown [209.61.151.224]) by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS id 7ed379b2-65cb-11e9-92d7-bc764e045a96; Tue, 23 Apr 2019 13:27:09 +0000 (UTC) DKIM-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=tklengyel.com; q=dns/txt; s=krs; t=1556026029; h=Content-Type: Cc: To: Subject: Message-ID: Date: From: In-Reply-To: References: MIME-Version: Sender; bh=kQJKFNT7f8Rm9L+bp00EnxWu/fbiMHqXPOe8PD68U2E=; b=tcyzq9jGYGVfYJvWZR5kHSNinAdgHSqr+1xtqAAaxDBuzXAv4LXFCcANh8EfwyYF05RcoKqg PnfFM/OlvyOLmjeGHjCwKsBgXo/eeYENyeLDPP3BBMO2OGdMC/hT+0GD175aHYDAVJLaSZqN nl3jcctorBlhts+RajCecb27GVQ= X-Mailgun-Sending-Ip: 209.61.151.224 X-Mailgun-Sid: WyIyYTNmOCIsICJ4ZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmciLCAiY2Q4NDAiXQ== Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) by mxa.mailgun.org with ESMTP id 5cbf12ab.7f0b50873b70-smtp-out-n01; Tue, 23 Apr 2019 13:27:07 -0000 (UTC) Received: by mail-wm1-f43.google.com with SMTP id o25so34957wmf.5 for ; Tue, 23 Apr 2019 06:27:07 -0700 (PDT) X-Gm-Message-State: APjAAAWy/IuDSylSlqABjDbBaWg18aVRx+dUiBaQ4NT9SzdCgPoDVEHH iB9O7SKDrSkyHe8X4QOMi6+4BHINLuUb6we5Mgs= X-Google-Smtp-Source: APXvYqxRgIAo/K7BUhW2gd19lfm5/NuupL4h8PV1NsfRm6CBlM7/porwAqraT6zpnwBBraQ757Owez0iol8niiGjxtA= X-Received: by 2002:a1c:7d92:: with SMTP id y140mr2304034wmc.54.1556026025976; Tue, 23 Apr 2019 06:27:05 -0700 (PDT) MIME-Version: 1.0 References: <20190416084531.5084-1-aisaila@bitdefender.com> <51aac97d-3773-f3df-204d-55912f5915db@citrix.com> <73576bc2-5ab2-b5ef-ca0b-fb50b4cd7775@citrix.com> In-Reply-To: From: Tamas K Lengyel Date: Tue, 23 Apr 2019 07:26:28 -0600 X-Gmail-Original-Message-ID: Message-ID: To: George Dunlap Subject: Re: [Xen-devel] [PATCH v5] x86/altp2m: Aggregate get entry and populate into common funcs X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: "wei.liu2@citrix.com" , "rcojocaru@bitdefender.com" , "george.dunlap@eu.citrix.com" , "andrew.cooper3@citrix.com" , "jbeulich@suse.com" , Alexandru Stefan ISAILA , "xen-devel@lists.xenproject.org" , "roger.pau@citrix.com" Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" Message-ID: <20190423132628.TGbyfdvgpGiq9FkLWT2VdOsXHU2Nsy_LjuMFoSAvsO8@z> T24gVHVlLCBBcHIgMjMsIDIwMTkgYXQgNTo0NSBBTSBHZW9yZ2UgRHVubGFwIDxnZW9yZ2UuZHVu bGFwQGNpdHJpeC5jb20+IHdyb3RlOgo+Cj4gT24gNC8xOS8xOSA5OjMyIEFNLCBBbGV4YW5kcnUg U3RlZmFuIElTQUlMQSB3cm90ZToKPiA+Cj4gPgo+ID4gT24gMTguMDQuMjAxOSAyMTo0MiwgVGFt YXMgSyBMZW5neWVsIHdyb3RlOgo+ID4+IE9uIFRodSwgQXByIDE4LCAyMDE5IGF0IDExOjAyIEFN IEdlb3JnZSBEdW5sYXAgPGdlb3JnZS5kdW5sYXBAY2l0cml4LmNvbT4gd3JvdGU6Cj4gPj4+Cj4g Pj4+IE9uIDQvMTgvMTkgMjo1OSBQTSwgVGFtYXMgSyBMZW5neWVsIHdyb3RlOgo+ID4+Pj4gT24g VGh1LCBBcHIgMTgsIDIwMTkgYXQgMzo1MyBBTSBHZW9yZ2UgRHVubGFwIDxnZW9yZ2UuZHVubGFw QGNpdHJpeC5jb20+IHdyb3RlOgo+ID4+Pj4+Cj4gPj4+Pj4gT24gNC8xNy8xOSA3OjIyIFBNLCBU YW1hcyBLIExlbmd5ZWwgd3JvdGU6Cj4gPj4+Pj4+IE9uIFdlZCwgQXByIDE3LCAyMDE5IGF0IDE6 MTUgQU0gQWxleGFuZHJ1IFN0ZWZhbiBJU0FJTEEKPiA+Pj4+Pj4gPGFpc2FpbGFAYml0ZGVmZW5k ZXIuY29tPiB3cm90ZToKPiA+Pj4+Pj4+Cj4gPj4+Pj4+Pgo+ID4+Pj4+Pj4KPiA+Pj4+Pj4+IE9u IDE2LjA0LjIwMTkgMTg6MDcsIEdlb3JnZSBEdW5sYXAgd3JvdGU6Cj4gPj4+Pj4+Pj4gT24gNC8x Ni8xOSAzOjE5IFBNLCBUYW1hcyBLIExlbmd5ZWwgd3JvdGU6Cj4gPj4+Pj4+Pj4+IE9uIFR1ZSwg QXByIDE2LCAyMDE5IGF0IDg6MDIgQU0gR2VvcmdlIER1bmxhcCA8Z2VvcmdlLmR1bmxhcEBjaXRy aXguY29tPiB3cm90ZToKPiA+Pj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+PiBPbiA0LzE2LzE5IDI6NDQg UE0sIFRhbWFzIEsgTGVuZ3llbCB3cm90ZToKPiA+Pj4+Pj4+Pj4+PiBPbiBUdWUsIEFwciAxNiwg MjAxOSBhdCAyOjQ1IEFNIEFsZXhhbmRydSBTdGVmYW4gSVNBSUxBCj4gPj4+Pj4+Pj4+Pj4gPGFp c2FpbGFAYml0ZGVmZW5kZXIuY29tPiB3cm90ZToKPiA+Pj4+Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4+ Pj4gVGhlIGNvZGUgZm9yIGdldHRpbmcgdGhlIGVudHJ5IGFuZCB0aGVuIHBvcHVsYXRpbmcgd2Fz IHJlcGVhdGVkIGluCj4gPj4+Pj4+Pj4+Pj4+IHAybV9jaGFuZ2VfYWx0cDJtX2dmbigpIGFuZCBp biBwMm1fc2V0X2FsdHAybV9tZW1fYWNjZXNzKCkuCj4gPj4+Pj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+ Pj4+IFRoZSBjb2RlIGlzIG5vdyBpbiBvbmUgcGxhY2Ugd2l0aCBhIGJvb2wgcGFyYW0gdGhhdCBs ZXRzIHRoZSBjYWxsZXIgY2hvb3NlCj4gPj4+Pj4+Pj4+Pj4+IGlmIGl0IHBvcHVsYXRlcyBhZnRl ciBnZXRfZW50cnkoKS4KPiA+Pj4+Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4+Pj4gSWYgcmVtYXBwaW5n IGlzIGJlaW5nIGRvbmUgdGhlbiBib3RoIHRoZSBvbGQgYW5kIG5ldyBnZm4ncyBzaG91bGQgYmUK PiA+Pj4+Pj4+Pj4+Pj4gdW5zaGFyZWQgaW4gdGhlIGhvc3RwMm0gZm9yIGtlZXBpbmcgdGhpbmdz IGNvbnNpc3RlbnQuIFRoZSBwYWdlIHR5cGUKPiA+Pj4+Pj4+Pj4+Pj4gb2Ygb2xkX2dmbiB3YXMg YWxyZWFkeSBjaGVja2VkIHdoZXRoZXIgaXQncyBwMm1fcmFtX3J3IGFuZCBiYWlsIGlmIGl0Cj4g Pj4+Pj4+Pj4+Pj4+IHdhc24ndCBzbyBmdW5jdGlvbmFsaXR5LXdpc2UgdGhpcyBqdXN0IHNpbXBs aWZpZXMgdGhpbmdzIGFzIGEgdXNlcgo+ID4+Pj4+Pj4+Pj4+PiBkb2Vzbid0IGhhdmUgdG8gcmVx dWVzdCB1bnNoYXJpbmcgbWFudWFsbHkgYmVmb3JlIHJlbWFwcGluZy4KPiA+Pj4+Pj4+Pj4+Pj4g Tm93LCBpZiB0aGUgbmV3X2dmbiBpcyBpbnZhbGlkIGl0IHNob3VsZG4ndCBxdWVyeSB0aGUgaG9z dHAybSBhcwo+ID4+Pj4+Pj4+Pj4+PiB0aGF0IGlzIGVmZmVjdGl2ZWx5IGEgcmVxdWVzdCB0byBy ZW1vdmUgdGhlIGVudHJ5IGZyb20gdGhlIGFsdHAybS4KPiA+Pj4+Pj4+Pj4+Pj4gQnV0IHByb3Zp ZGVkIHRoYXQgc2NlbmFyaW8gaXMgdXNlZCBvbmx5IHdoZW4gcmVtb3ZpbmcgZW50cmllcyB0aGF0 Cj4gPj4+Pj4+Pj4+Pj4+IHdlcmUgcHJldmlvdXNseSByZW1hcHBlZC9jb3BpZWQgdG8gdGhlIGFs dHAybSwgdGhvc2UgZW50cmllcyBhbHJlYWR5Cj4gPj4+Pj4+Pj4+Pj4+IHdlbnQgdGhyb3VnaCBQ Mk1fQUxMT0MgfCBQMk1fVU5TSEFSRSBiZWZvcmUsIHNvIGl0IHdvbid0IGhhdmUgYW4KPiA+Pj4+ Pj4+Pj4+Pj4gYWZmZWN0IHNvIHRoZSBjb3JlIGZ1bmN0aW9uIGdldF9hbHRwMm1fZW50cnkoKSBp cyBjYWxsaW5nCj4gPj4+Pj4+Pj4+Pj4+IF9fZ2V0X2dmbl90eXBlX2FjY2VzcygpIHdpdGggUDJN X0FMTE9DIHwgUDJNX1VOU0hBUkUuCj4gPj4+Pj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+Pj4+IGFsdHAy bV9nZXRfZW50cnlfZGlyZWN0KCkgaXMgYWxzbyBjYWxsZWQgaW4gcDJtX3NldF9zdXBwcmVzc192 ZSgpCj4gPj4+Pj4+Pj4+Pj4+IGJlY2F1c2Ugb24gYSBuZXcgYWx0cDJtIHZpZXcgdGhlIGZ1bmN0 aW9uIHdpbGwgZmFpbCB3aXRoIGludmFsaWQgbWZuIGlmCj4gPj4+Pj4+Pj4+Pj4+IHAybS0+c2V0 X2VudHJ5KCkgd2FzIG5vdCBjYWxsZWQgYmVmb3JlLgo+ID4+Pj4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+ Pj4+PiBTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kcnUgSXNhaWxhIDxhaXNhaWxhQGJpdGRlZmVuZGVy LmNvbT4KPiA+Pj4+Pj4+Pj4+Pj4gU2lnbmVkLW9mZi1ieTogR2VvcmdlIER1bmxhcCA8Z2Vvcmdl LmR1bmxhcEBjaXRyaXguY29tPgo+ID4+Pj4+Pj4+Pj4+PiBSZXZpZXdlZC1ieTogR2VvcmdlIER1 bmxhcCA8Z2VvcmdlLmR1bmxhcEBjaXRyaXguY29tPgo+ID4+Pj4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+ Pj4+PiAtLS0KPiA+Pj4+Pj4+Pj4+Pj4gQ2hhbmdlcyBzaW5jZSBWNDoKPiA+Pj4+Pj4+Pj4+Pj4g ICAgICAgICAgIC0gQWRkIGFsdHAybSB0byBwYXRjaCBuYW1lCj4gPj4+Pj4+Pj4+Pj4+ICAgICAg ICAgICAtIENoYW5nZSBmdW5jIG5hbWUgZnJvbSBnZXRfYWx0cDJtX2VudHJ5KCkgdG8KPiA+Pj4+ Pj4+Pj4+Pj4gYWx0cDJtX2dldF9lbnRyeSgpLgo+ID4+Pj4+Pj4+Pj4+PiAtLS0KPiA+Pj4+Pj4+ Pj4+Pj4gICAgeGVuL2FyY2gveDg2L21tL21lbV9hY2Nlc3MuYyB8IDMwICsrLS0tLS0tLS0tLS0K PiA+Pj4+Pj4+Pj4+Pj4gICAgeGVuL2FyY2gveDg2L21tL3AybS5jICAgICAgICB8IDg0ICsrKysr KysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQo+ID4+Pj4+Pj4+Pj4+PiAgICB4ZW4vaW5j bHVkZS9hc20teDg2L3AybS5oICAgIHwgMTcgKysrKysrKysKPiA+Pj4+Pj4+Pj4+Pj4gICAgMyBm aWxlcyBjaGFuZ2VkLCA2NiBpbnNlcnRpb25zKCspLCA2NSBkZWxldGlvbnMoLSkKPiA+Pj4+Pj4+ Pj4+Pj4KPiA+Pj4+Pj4+Pj4+Pj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9tbS9tZW1fYWNj ZXNzLmMgYi94ZW4vYXJjaC94ODYvbW0vbWVtX2FjY2Vzcy5jCj4gPj4+Pj4+Pj4+Pj4+IGluZGV4 IGExNDRiYjBjZTQuLmRkZmUwMTY5YzAgMTAwNjQ0Cj4gPj4+Pj4+Pj4+Pj4+IC0tLSBhL3hlbi9h cmNoL3g4Ni9tbS9tZW1fYWNjZXNzLmMKPiA+Pj4+Pj4+Pj4+Pj4gKysrIGIveGVuL2FyY2gveDg2 L21tL21lbV9hY2Nlc3MuYwo+ID4+Pj4+Pj4+Pj4+PiBAQCAtMjYyLDM1ICsyNjIsMTEgQEAgaW50 IHAybV9zZXRfYWx0cDJtX21lbV9hY2Nlc3Moc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IHAybV9k b21haW4gKmhwMm0sCj4gPj4+Pj4+Pj4+Pj4+ICAgICAgICBtZm5fdCBtZm47Cj4gPj4+Pj4+Pj4+ Pj4+ICAgICAgICBwMm1fdHlwZV90IHQ7Cj4gPj4+Pj4+Pj4+Pj4+ICAgICAgICBwMm1fYWNjZXNz X3Qgb2xkX2E7Cj4gPj4+Pj4+Pj4+Pj4+IC0gICAgdW5zaWduZWQgaW50IHBhZ2Vfb3JkZXI7Cj4g Pj4+Pj4+Pj4+Pj4+IC0gICAgdW5zaWduZWQgbG9uZyBnZm5fbCA9IGdmbl94KGdmbik7Cj4gPj4+ Pj4+Pj4+Pj4+ICAgICAgICBpbnQgcmM7Cj4gPj4+Pj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+Pj4+IC0g ICAgbWZuID0gYXAybS0+Z2V0X2VudHJ5KGFwMm0sIGdmbiwgJnQsICZvbGRfYSwgMCwgTlVMTCwg TlVMTCk7Cj4gPj4+Pj4+Pj4+Pj4+IC0KPiA+Pj4+Pj4+Pj4+Pj4gLSAgICAvKiBDaGVjayBob3N0 IHAybSBpZiBubyB2YWxpZCBlbnRyeSBpbiBhbHRlcm5hdGUgKi8KPiA+Pj4+Pj4+Pj4+Pj4gLSAg ICBpZiAoICFtZm5fdmFsaWQobWZuKSApCj4gPj4+Pj4+Pj4+Pj4+IC0gICAgewo+ID4+Pj4+Pj4+ Pj4+PiAtCj4gPj4+Pj4+Pj4+Pj4+IC0gICAgICAgIG1mbiA9IF9fZ2V0X2dmbl90eXBlX2FjY2Vz cyhocDJtLCBnZm5fbCwgJnQsICZvbGRfYSwKPiA+Pj4+Pj4+Pj4+Pj4gLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFAyTV9BTExPQyB8IFAyTV9VTlNIQVJFLCAmcGFnZV9vcmRl ciwgMCk7Cj4gPj4+Pj4+Pj4+Pj4+IC0KPiA+Pj4+Pj4+Pj4+Pj4gLSAgICAgICAgcmMgPSAtRVNS Q0g7Cj4gPj4+Pj4+Pj4+Pj4+IC0gICAgICAgIGlmICggIW1mbl92YWxpZChtZm4pIHx8IHQgIT0g cDJtX3JhbV9ydyApCj4gPj4+Pj4+Pj4+Pj4+IC0gICAgICAgICAgICByZXR1cm4gcmM7Cj4gPj4+ Pj4+Pj4+Pj4+IC0KPiA+Pj4+Pj4+Pj4+Pj4gLSAgICAgICAgLyogSWYgdGhpcyBpcyBhIHN1cGVy cGFnZSwgY29weSB0aGF0IGZpcnN0ICovCj4gPj4+Pj4+Pj4+Pj4+IC0gICAgICAgIGlmICggcGFn ZV9vcmRlciAhPSBQQUdFX09SREVSXzRLICkKPiA+Pj4+Pj4+Pj4+Pj4gLSAgICAgICAgewo+ID4+ Pj4+Pj4+Pj4+PiAtICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBtYXNrID0gfigoMVVMIDw8IHBh Z2Vfb3JkZXIpIC0gMSk7Cj4gPj4+Pj4+Pj4+Pj4+IC0gICAgICAgICAgICBnZm5fdCBnZm4yID0g X2dmbihnZm5fbCAmIG1hc2spOwo+ID4+Pj4+Pj4+Pj4+PiAtICAgICAgICAgICAgbWZuX3QgbWZu MiA9IF9tZm4obWZuX3gobWZuKSAmIG1hc2spOwo+ID4+Pj4+Pj4+Pj4+PiAtCj4gPj4+Pj4+Pj4+ Pj4+IC0gICAgICAgICAgICByYyA9IGFwMm0tPnNldF9lbnRyeShhcDJtLCBnZm4yLCBtZm4yLCBw YWdlX29yZGVyLCB0LCBvbGRfYSwgMSk7Cj4gPj4+Pj4+Pj4+Pj4+IC0gICAgICAgICAgICBpZiAo IHJjICkKPiA+Pj4+Pj4+Pj4+Pj4gLSAgICAgICAgICAgICAgICByZXR1cm4gcmM7Cj4gPj4+Pj4+ Pj4+Pj4+IC0gICAgICAgIH0KPiA+Pj4+Pj4+Pj4+Pj4gLSAgICB9Cj4gPj4+Pj4+Pj4+Pj4+ICsg ICAgcmMgPSBhbHRwMm1fZ2V0X2VudHJ5X3ByZXBvcHVsYXRlKGFwMm0sIGdmbiwgJm1mbiwgJnQs ICZvbGRfYSk7Cj4gPj4+Pj4+Pj4+Pj4+ICsgICAgaWYgKCByYyApCj4gPj4+Pj4+Pj4+Pj4+ICsg ICAgICAgIHJldHVybiByYzsKPiA+Pj4+Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4+Pj4gICAgICAgIC8q Cj4gPj4+Pj4+Pj4+Pj4+ICAgICAgICAgKiBJbmhlcml0IHRoZSBvbGQgc3VwcHJlc3MgI1ZFIGJp dCB2YWx1ZSBpZiBpdCBpcyBhbHJlYWR5IHNldCwgb3Igc2V0IGl0Cj4gPj4+Pj4+Pj4+Pj4+IGRp ZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvbW0vcDJtLmMgYi94ZW4vYXJjaC94ODYvbW0vcDJtLmMK PiA+Pj4+Pj4+Pj4+Pj4gaW5kZXggOWU4MWEzMGNjNC4uN2JlZGZkNTkzYiAxMDA2NDQKPiA+Pj4+ Pj4+Pj4+Pj4gLS0tIGEveGVuL2FyY2gveDg2L21tL3AybS5jCj4gPj4+Pj4+Pj4+Pj4+ICsrKyBi L3hlbi9hcmNoL3g4Ni9tbS9wMm0uYwo+ID4+Pj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+Pj4gV291bGRu J3QgaXQgbWFrZSBtb3JlIHNlbnNlIHRvIHN0YXJ0IGFkZGluZyBuZXcgYWx0cDJtIGZ1bmN0aW9u cyB0bwo+ID4+Pj4+Pj4+Pj4+IG1tL2FsdHAybS5jIGluc3RlYWQ/IFByb2JhYmx5IHRoZSBhbHRw Mm0gZnVuY3Rpb25zIGZyb20gbW0vcDJtLmMgY291bGQKPiA+Pj4+Pj4+Pj4+PiBhbHNvIGJlIHJl bG9jYXRlZCB0aGVyZSBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUuCj4gPj4+Pj4+Pj4+Pj4K PiA+Pj4+Pj4+Pj4+Pj4gQEAgLTQ3OCw2ICs0NzgsNDMgQEAgdm9pZCBwMm1fdW5sb2NrX2FuZF90 bGJfZmx1c2goc3RydWN0IHAybV9kb21haW4gKnAybSkKPiA+Pj4+Pj4+Pj4+Pj4gICAgICAgICAg ICBtbV93cml0ZV91bmxvY2soJnAybS0+bG9jayk7Cj4gPj4+Pj4+Pj4+Pj4+ICAgIH0KPiA+Pj4+ Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4+Pj4gK2ludCBhbHRwMm1fZ2V0X2VudHJ5KHN0cnVjdCBwMm1f ZG9tYWluICphcDJtLAo+ID4+Pj4+Pj4+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg IGdmbl90IGdmbiwgbWZuX3QgKm1mbiwgcDJtX3R5cGVfdCAqdCwKPiA+Pj4+Pj4+Pj4+Pj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwMm1fYWNjZXNzX3QgKmEsIGJvb2wgcHJlcG9wdWxh dGUpCj4gPj4+Pj4+Pj4+Pj4+ICt7Cj4gPj4+Pj4+Pj4+Pj4+ICsgICAgKm1mbiA9IGFwMm0tPmdl dF9lbnRyeShhcDJtLCBnZm4sIHQsIGEsIDAsIE5VTEwsIE5VTEwpOwo+ID4+Pj4+Pj4+Pj4+PiAr Cj4gPj4+Pj4+Pj4+Pj4+ICsgICAgLyogQ2hlY2sgaG9zdCBwMm0gaWYgbm8gdmFsaWQgZW50cnkg aW4gYWx0ZXJuYXRlICovCj4gPj4+Pj4+Pj4+Pj4+ICsgICAgaWYgKCAhbWZuX3ZhbGlkKCptZm4p ICYmICFwMm1faXNfaG9zdHAybShhcDJtKSApCj4gPj4+Pj4+Pj4+Pj4+ICsgICAgewo+ID4+Pj4+ Pj4+Pj4+PiArICAgICAgICBzdHJ1Y3QgcDJtX2RvbWFpbiAqaHAybSA9IHAybV9nZXRfaG9zdHAy bShhcDJtLT5kb21haW4pOwo+ID4+Pj4+Pj4+Pj4+PiArICAgICAgICB1bnNpZ25lZCBpbnQgcGFn ZV9vcmRlcjsKPiA+Pj4+Pj4+Pj4+Pj4gKyAgICAgICAgaW50IHJjOwo+ID4+Pj4+Pj4+Pj4+PiAr Cj4gPj4+Pj4+Pj4+Pj4+ICsgICAgICAgICptZm4gPSBfX2dldF9nZm5fdHlwZV9hY2Nlc3MoaHAy bSwgZ2ZuX3goZ2ZuKSwgdCwgYSwKPiA+Pj4+Pj4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQMk1fQUxMT0MgfCBQMk1fVU5TSEFSRSwgJnBhZ2Vfb3JkZXIsIDAp Owo+ID4+Pj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+Pj4gU28gZGVzcGl0ZSB0aGUgbmFtZSBiZWluZyBh bHRwMm1fZ2V0X2VudHJ5IHlvdSBub3cgcmV0dXJuIGFuIGVudHJ5Cj4gPj4+Pj4+Pj4+Pj4gZnJv bSB0aGUgaG9zdHAybSwgZXZlbiBpZiBwcmVwb3B1bGF0ZSBpcyBmYWxzZS4gSWYgdGhlIGNhbGxl ciBrbm93cyBpdAo+ID4+Pj4+Pj4+Pj4+IGRvZXNuJ3Qgd2FudCB0aGF0IGVudHJ5IHRvIGJlIGNv cGllZCBpbnRvIHRoZSBhbHRwMm0sIHdoeSBub3QgaGF2ZSBpdAo+ID4+Pj4+Pj4+Pj4+IGNhbGwg X19nZXRfZ2ZuX3R5cGVfYWNjZXNzIGl0c2VsZiBmb3IgdGhlIGhvc3RwMm0/IElNSE8gdGhpcyBp cyBqdXN0Cj4gPj4+Pj4+Pj4+Pj4gY29uZnVzaW5nIGFuZCBkb2Vzbid0IGhlbHAgcmVhZGFiaWxp dHkgb2YgdGhlIGFsdHAybSBjb2RlLgo+ID4+Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4+IFlvdSByZXR1 cm4gdGhlIGFwMm0gZW50cnkgaWYgaXQncyBwcmVzZW50LCBvciB0aGUgaHAybSBlbnRyeSBpZiBp dCdzCj4gPj4+Pj4+Pj4+PiBub3QuICBJdCdzIG5vdCBhIGxvdCBvZiBkdXBsaWNhdGlvbiwgYnV0 IGl0IG1ha2VzIHRoZSBsb2dpYyBjbGVhbmVyIEkKPiA+Pj4+Pj4+Pj4+IHRoaW5rOyB3aHkgbm90 IGRlZHVwbGljYXRlIGl0Pwo+ID4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+PiBJIGhhdmUgbm8gcHJvYmxl bSB3aXRoIG1ha2luZyB0aGUgY29kZSBtb3JlIHN0cmVhbWxpbmVkLiBUaGUgcHJvYmxlbSBJCj4g Pj4+Pj4+Pj4+IGhhdmUgaXMgdGhhdCB0aGUgZnVuY3Rpb24ncyBuYW1lIGRvZXNuJ3Qgc3VnZ2Vz dCBpdCB3b3VsZCBnZXQgeW91Cj4gPj4+Pj4+Pj4+IGFueXRoaW5nIGJ1dCB0aGUgZW50cnkgZnJv bSB0aGUgc3BlY2lmaWVkIGFsdHAybS4gU28geW91IGNvdWxkIGJlCj4gPj4+Pj4+Pj4+IHJlYWRp bmcgdGhlIGNvZGUgYXNzdW1pbmcgeW91IGFyZSBkZWFsaW5nIHdpdGggYW4gZW50cnkgZnJvbSB0 aGF0Cj4gPj4+Pj4+Pj4+IHNwZWNpZmllZCB0YWJsZSB3aGVuIGluIGZhY3QgeW91IGFyZSBub3Qu IFRoYXQgaXMgbm90IGFuIGV4cGVjdGVkCj4gPj4+Pj4+Pj4+IGJlaGF2aW9yIGJhc2VkIG9uIGp1 c3QgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uLiBUaGlzIGlzIGdvaW5nIHRvIG1ha2UKPiA+Pj4+ Pj4+Pj4gcmVhZGluZyB0aGUgYWx0cDJtIGNvZGUgdGhhdCBtdWNoIGhhcmRlciBpbiB0aGUgZnV0 dXJlLgo+ID4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4gUmlnaHQgLS0gSSB3YXNuJ3QgYSBodWdlIGZhbiBv ZiAnZGlyZWN0JyBlaXRoZXI7IGl0IGRpZG4ndCByZWFsbHkgY29udmV5Cj4gPj4+Pj4+Pj4gdG8g bWUgMTAwJSB3aGF0IHRoZSBmdW5jdGlvbiBkaWQuICBNeSBQb0MgaGFkICJzZWV0aHJvdWdoIiwg YnV0IHRoYXQKPiA+Pj4+Pj4+PiB3YXNuJ3QgdGhhdCBncmVhdCBlaXRoZXIuICAiUGVlayI/ICBB bnkgb3RoZXIgc3VnZ2VzdGlvbnM/Cj4gPj4+Pj4+Pj4KPiA+Pj4+Pj4+PiBPdGhlciBvcHRpb25z Ogo+ID4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4gKiBJZiB3ZSBoYXZlIGEgc2luZ2xlIGZ1bmN0aW9uIHdp dGggYSAjZGVmaW5lLCB0aGlzIG1pZ2h0IGdldCBhIGJpdAo+ID4+Pj4+Pj4+IGVhc2llcjsgIHdl IGNvdWxkIGhhdmUgb25lIGJlIEFQMk1HRVRfZG9udF9wcmVwb3B1bGF0ZSBvciBzb21ldGhpbmcu Cj4gPj4+Pj4+Pj4KPiA+Pj4+Pj4+PiAoIFdlIGNvdWxkIGhhdmUgdGhlICJjb3JlIiBmdW5jdGlv biBuYW1lZCBfYWx0cDJtX2dldF9lbnRyeSwgYW5kIGhhdmUKPiA+Pj4+Pj4+PiBhbHRwMm1fZ2V0 X2VudHJ5KCkgY2FsbCB3aXRoIHByZXBvcHVsYXRlID0gZmFsc2UsIGFuZAo+ID4+Pj4+Pj4+IGFs dHAybV9nZXRfZW50cnlfcHJlcG9wdWxhdGUoKSBjYWxsIGl0IHdpdGggcHJlcG9wdWxhdGUgPSB0 cnVlLgo+ID4+Pj4+Pj4KPiA+Pj4+Pj4+IFRoaXMgb3B0aW9uIHdpdGggbm8gZGVmaW5lcyBzZWVt cyB0byBzb2x2ZSBtb3JlIG9mIHRoZSBuYW1pbmcgcHJvYmxlbXMKPiA+Pj4+Pj4+IGJ1dCBpdCB3 aWxsIHN0aWxsIGludHJvZHVjZSB0aGUgc3BhZ2hldHRpIGNvZGUuIEkgdm90ZSBmb3IgdGhpcyBv bmUgYW5kCj4gPj4+Pj4+PiBpZiBUYW1hcyBhZ3JlZXMgSSB3aWxsIGhhdmUgaXQgdGhpcyB3YXkg aW4gdGhlIG5leHQgdmVyc2lvbi4KPiA+Pj4+Pj4+Cj4gPj4+Pj4+Cj4gPj4+Pj4+IEhhdmluZyBh bHRwMm1fZ2V0X2VudHJ5IGFuZCBhbHRwMm1fZ2V0X2VudHJ5X3ByZXBvcHVsYXRlIHNlZW0gdG8g YmUgYQo+ID4+Pj4+PiBiZXR0ZXIgbmFtZSBmb3IgdGhlbSwgYXMgbG9uZyBhcyBhbHRwMm1fZ2V0 X2VudHJ5IGRvZXNuJ3QgcmV0dXJuIGFuCj4gPj4+Pj4+IGVudHJ5IGZyb20gdGhlIGhvc3RwMm0g aWYgdGhlcmUgaXNuJ3Qgb25lIGluIHRoZSBhbHRwMm0sIGFuZAo+ID4+Pj4+PiBhbHRwMm1fZ2V0 X2VudHJ5X3ByZXBvcHVsYXRlIHJldHVybnMgYW4gZW50cnkgb25seSBpZiBwcmVwb3B1bGF0aW9u Cj4gPj4+Pj4+IGFjdHVhbGx5IHdvcmtlZC4gSW4gYm90aCBvZiB0aG9zZSBjYXNlcyB0aGUgZnVu Y3Rpb25zIHdvdWxkIG9ubHkKPiA+Pj4+Pj4gcmV0dXJuIGVudHJpZXMgZnJvbSB0aGUgYWx0cDJt LCBhcyB0aGVpciBuYW1lIGFjdHVhbGx5IHN1Z2dlc3RzLgo+ID4+Pj4+Cj4gPj4+Pj4gWW91IHNl ZW0gdG8gaGF2ZSBtaXNzZWQgdGhlIHdob2xlIHBvaW50IG9mIHRoaXMgcGF0Y2ggdGhlbi4KPiA+ Pj4+Cj4gPj4+PiBGb3JnaXZlIG1lIGJ1dCB0aGVuIEkgZG9uJ3Qgc2VlIGFueXdoZXJlIGluIHRo ZSBwYXRjaCBkZXNjcmlwdGlvbiB0aGF0Cj4gPj4+PiBleHBsYWluIHdoeSB0aGVzZSBmdW5jdGlv bnMgX2hhdmUgdG9fIHBlcmZvcm0gYSBmYWxsLWJhY2sgYW5kIHJldHVybgo+ID4+Pj4gYW4gZW50 cnkgZnJvbSB0aGUgaG9zdHAybSBhdCBhbGwgY29zdC4KPiA+Pj4KPiA+Pj4gVGhlIHByaW1hcnkg ZWZmZWN0IG9mIHRoaXMgcGF0Y2ggaXMgdG8gbW92ZSBkdXBsaWNhdGVkIGNvZGUgaW50byBhCj4g Pj4+IHNpbmdsZSBjb21tb24gZnVuY3Rpb24uICBUaGUgY29kZSBiZWluZyBkZS1kdXBsaWNhdGVk Ogo+ID4+PiAgIDEuIFRyaWVzIHRvIHJlYWQgdGhlIGFsdHAybSBlbnRyeTsgaWYgaXQncyB0aGVy ZSBpdCB1c2VzIGl0Cj4gPj4+ICAgMi4gSWYgaXQncyBub3QgdGhlcmUsIGl0IHRyaWVzIHRvIHJl YWQgdGhlIGhvc3QgcDJtIGVudHJ5Cj4gPj4+ICAgMy4gSW4gbW9zdCBjYXNlcyBpdCB0aGVuIHBy b3BhZ2F0ZXMgdGhlIGhvc3RwMm0gZW50cnkgdG8gdGhlIGFsdHAybSBlbnRyeS4KPiA+Pj4KPiA+ Pj4gT2J2aW91c2x5IHRoZSBuZXcgImNvbW1vbiIgZnVuY3Rpb24gaGFzIHRvIGRvIGl0IGJlY2F1 c2UgdGhhdCdzIHdoYXQgdGhlCj4gPj4+IG9yaWdpbmFsIGNvZGUgZG9lcy4gIFRoZSBvcmlnaW5h bCBjb2RlIGRvZXMgaXQgYmVjYXVzZSB0aGF0J3Mgd2hhdAo+ID4+PiBhbHRwMm0gaXMgLS0gYSAi cGF0Y2giIG92ZXIgdGhlIGhvc3QgcDJtLCBzdWNoIHRoYXQgeW91IHVzZSB0aGUgYWx0cDJtCj4g Pj4+IGlmIGVudHJpZXMgYXJlIHByZXNlbnQsIGJ1dCB1c2UgdGhlIGhvc3RwMm0gb3RoZXJ3aXNl Lgo+ID4+Pgo+ID4+Pj4+IEluc3RlYWQgb2Ygc2F5aW5nLCAiSSBkb24ndCBsaWtlIHRoZXNlIG5h bWVzIiAoYnV0IG5vdCBvZmZlcmluZwo+ID4+Pj4+IGFsdGVybmF0aXZlKSwgb3Igc2F5aW5nLCAi SWYgeW91IHVzZSB0aGVzZSBuYW1lcywgdGhlIGZ1bmN0aW9ucyBoYXZlIHRvCj4gPj4+Pj4gZG8g dGhlIGV4YWN0IG9wcG9zaXRlIG9mIHdoYXQgdGhleSBkbyBpbiB0aGlzIHBhdGNoIiwgaXQgd291 bGQgYmUgbW9yZQo+ID4+Pj4+IGNvbnN0cnVjdGl2ZSBpZiB5b3UgcHJvcG9zZWQgbmFtZXMgd2hp Y2ggeW91IHdvdWxkIHByZWZlciBmb3IgdGhlCj4gPj4+Pj4gZnVuY3Rpb25hbGl0eSBhY3R1YWxs eSBpbiB0aGlzIHBhdGNoLgo+ID4+Pj4+Cj4gPj4+Pgo+ID4+Pj4gSSdtIG5vdCB0aGUgbWFpbnRh aW5lciBvZiB0aGlzIGNvZGUgc28gZmVlbCBmcmVlIHRvIGlnbm9yZSBteQo+ID4+Pj4gY29tbWVu dHMuIEkganVzdCBzZWUgd2F5IHRvbyBtYW55IGZ1bmN0aW9ucyBpbiBYZW4gdGhhdCBhcmUgImRv X3goKSIKPiA+Pj4+IGJ1dCBpbiBpbiBmYWN0IHR1cm4gb3V0IHRvIGJlICJkb194X2FuZF95X2Fu ZF96KCkiIHdoaWNoIGRvZXMgbm90IGhlbHAKPiA+Pj4+IHJlYWRhYmlsaXR5IG9yIGV2ZW4gcmVh bGx5IHVuZGVyc3RhbmRpbmcgd2hhdCBpcyBoYXBwZW5pbmcuIEkgZ3Vlc3MgYXQKPiA+Pj4+IGxl YXN0IGFkZGluZyBjb21tZW50cyBkZXNjcmliaW5nIHRoZXNlIGFkZGl0aW9uYWwgYW5kIHNvbWV0 aW1lcwo+ID4+Pj4gdW5leHBlY3RlZCBiZWhhdmlvcnMgd291bGQgYmUgYW4gaW1wcm92ZW1lbnQu Cj4gPj4+Cj4gPj4+IFlvdSBhcmUgYSBtYWludGFpbmVyIGZvciBtZW1fYWNjZXNzLmMsIHdoaWNo IGhhcyBhIG5vbi10cml2aWFsIGNoYW5nZSBpbgo+ID4+PiB0aGlzIHBhdGNoLiAgSXQgY2FuIGdv IGluIHdpdGggUmF6dmFuJ3MgYWNrLCBidXQgbm90IHdoaWxlIHlvdSBoYXZlIG9wZW4KPiA+Pj4g b2JqZWN0aW9ucy4KPiA+Pgo+ID4+IFllcywgSSBtZWFudCB0aGF0IHdoZXJlIHRoaXMgY29kZSBp cyBiZWluZyByZWxvY2F0ZWQgdG8gaXMgbm8gbG9uZ2VyCj4gPj4gdW5kZXIgb3VyIG1lbV9hY2Nl c3MgdW1icmVsbGEgc28gSSdtIG5vdCBnb2luZyB0byBiZSB0aGUgbWFpbnRhaW5lciBvZgo+ID4+ IGl0LiBJZiB0aGUgbmV3IG1haW50YWluZXJzIG9mIHRoaXMgY29kZSBhcmUgT0sgd2l0aCBob3cg aXQgaXMsIHRoYW4KPiA+PiB0aGF0J3MgdGhhdC4gVGhlIGNoYW5nZXMgYmVpbmcgbWFkZSBpbiB0 aGlzIHBhdGNoIHRvIG1lbV9hY2Nlc3MgSSBoYXZlCj4gPj4gbm8gb2JqZWN0aW9uIHRvLiBUaGVy ZSBhdCBsZWFzdCBpdHMgaW1wbGllZCB0aGF0IGEgY29weSB3aWxsIGhhcHBlbgo+ID4+IGZyb20g dGhlIGhvc3RwMm0gb3IgYW4gZXJyb3IgaXMgcmV0dXJuZWQgc28gdGhlIGVudHJ5IHRoYXQgX2lz Xwo+ID4+IHJldHVybmVkIHNob3VsZCBub3QgYmUgdXNlZC4gQWx0aG91Z2ggaXQgd291bGQgYmUg YmV0dGVyIGlmICptZm4gaXMKPiA+PiBub3QgY2hhbmdlZCB1bnRpbCB0aGUgZmluYWwgcmV0dXJu IHdpdGggbm8gZXJyb3IsIGJ1dCBpdCdzIGEgbWlub3IKPiA+PiBlbm91Z2ggaXNzdWUgdGhhdCBJ IHdvdWxkIG5vdCBibG9jayB0aGlzIHBhdGNoIGJlY2F1c2Ugb2YgaXQuCj4gPj4KPiA+Pj4KPiA+ Pj4gSSBmZWVsIHlvdXIgcGFpbiB3aXRoIGZ1bmN0aW9uIG5hbWluZzsgSSd2ZSBiZWVuIGRpZ2dp bmcgdGhyb3VnaAo+ID4+PiB4ODYvbW0uYyByZWNlbnRseSBhbmQgdGhlIGZ1bmN0aW9uIG5hbWVz IGFyZSB1bm5lY2Vzc2FyaWx5IGNvbmZ1c2luZy4gIEkKPiA+Pj4gYWxzbyBhZ3JlZSB0aGF0ICJh bHRwMm1fZ2V0X2VudHJ5IiBpc24ndCB0ZXJyaWJseSBpbmZvcm1hdGl2ZSAoYWx0aG91Z2gKPiA+ Pj4gaXQncyBhIGJpdCBtb3JlIG9idmlvdXMgaWYgeW91IGtub3cgaG93IGFsdHAybSBpcyBtZWFu dCB0byB3b3JrKS4gIEknbQo+ID4+PiBqdXN0IHRyeWluZyB0byBtYWtlIHN1cmUgdGhhdCB0aGVy ZSdzIGEgY2xlYXIgd2F5IGZvciBBbGV4YW5kcnUgdG8gbW92ZQo+ID4+PiB0aGlzIHBhdGNoIGZv cndhcmQuICBJIGRvbid0IG1pbmQgdHJ5aW5nIHRvIGNvbWUgdXAgd2l0aCBhIGJldHRlciBuYW1l LAo+ID4+PiBidXQgdGhlIHBhdGNoIHNob3VsZG4ndCBiZSBibG9ja2VkIGlmIHdlIGNhbid0Lgo+ ID4+Pgo+ID4+PiBJIGFncmVlIHRoYXQgdGhlIGZ1bmN0aW9uIHNob3VsZCBoYXZlIGEgY29tbWVu dCB0aGF0IGRlc2NyaWJlcyBpdHMgcHVycG9zZS4KPiA+Pj4KPiA+Pj4gV2hhdCBhYm91dCAiYWx0 cDJtX3Jlc29sdmVfZW50cnkoKSI/ICAiYWx0cDJtX2dldF9lZmZlY3RpdmVfZW50cnkiPwo+ID4+ Cj4gPj4gUGVyaGFwcyBnZXRfZWZmZWN0aXZlX2VudHJ5IGlzIHRoZSBiZXN0IHNvIGZhciBidXQg ZXZlbiB0aGF0IEkgd291bGQKPiA+PiBoYXZlIG5vIGlkZWEgd2hhdCBpdCBtZWFucyB3aXRob3V0 IHJlYWRpbmcgdGhlIGNvZGUgb3IgcmVhZGluZyB0aGUKPiA+PiBjb21tZW50IGRlc2NyaWJpbmcg dGhlIGZ1bmN0aW9uLiBIb3cgYWJvdXQKPiA+PiAicDJtX3NlYXJjaF9hbHRwMm1fdGhlbl9ob3N0 cDJtIiB3aXRoIGEgY29tbWVudCBzYXlpbmcgaG9zdHAybSBpcyBhCj4gPj4gZmFsbGJhY2s/Cj4g Pj4KPiA+Cj4gPiBJIGd1ZXNzIHAybV9zZWFyY2hfYWx0cDJtX3RoZW5faG9zdHAybSBpcyBhIGJp dCBsb25nIGJ1dCBpdCBzb2x2ZXMgdGhlCj4gPiBwcm9ibGVtLiBJZiBHb2VyZ2UgaXMgb2sgd2l0 aCB0aGlzIEkgd2lsbCBwdXQgaXQgaW4uCj4gPgo+ID4gSnVzdCB0byBjbGFyaWZ5LCBhbHRwMm1f Z2V0X2VudHJ5IHdpbGwgY2hhbmdlIHRvCj4gPiBwMm1fc2VhcmNoX2FsdHAybV90aGVuX2hvc3Rw Mm0gYW5kIHRoZW4gdGhlIHJlc3Qgd2lsbCByZW1haW4gdGhlIHNhbWUKPiA+IChhbHRwMm1fZ2V0 X2VudHJ5X2RpcmVjdCwgYWx0cDJtX2dldF9lbnRyeV9wcmVwb3B1bGF0ZSk/IEFuZCB0aGVuIGFk ZCBhCj4gPiBjb21tZW50IGZvciB0aGUgbWFpbiBmdW5jdGlvbi4KPiA+Cj4gPiBIb3BlIEkndmUg Z290IHRoYXQgcmlnaHQgZm9ybSB0aGUgbG9uZyBuYW1lIGNoYW5naW5nIGNvbnZlcnNhdGlvbi4K Pgo+IFVuZm9ydHVuYXRlbHksIGl0IGxvb2tzIGxpa2UgeW91IGhhdmVuJ3QuIDotKSAgVGFtYXMn IGluaXRpYWwgb2JqZWN0aW9uLAo+IGFzIEkgdW5kZXJzdGFuZCB0aGVtLCB3ZXJlIHNwZWNpZmlj YWxseSB0aGF0IGFsdHAybV9nZXRfZW50cnlfZGlyZWN0KCkKPiBzb3VuZHMgdG8gaGltIGxpa2Ug aXQgc2hvdWxkICJkaXJlY3RseSIgZ2V0IHRoZSBiYWNraW5nIHZhbHVlIGZyb20gdGhlCj4gaG9z dHAybSBhbHdheXMsIGFuZCBuZXZlciBnZXQgdGhlICJwYXRjaGVkIiB2YWx1ZSBmcm9tIHRoZSBh bHRwMm0uCj4KPiBCdXQgcDJtX3NlYXJjaF9hbHRwMm1fdGhlbl9ob3N0cDJtKCkgaXNuJ3QgYmV0 dGVyLCBiZWNhdXNlIGl0IGRvZXNuJ3QKPiBtZW50aW9uIHRoYXQgeW91IHN0b3Agc2VhcmNoaW5n IHRoZSBhbHRwMm0gaWYgeW91IGZvdW5kIHdoYXQgeW91IHdlcmUKPiBsb29raW5nIGZvciwgbm9y IHdoYXQgeW91J3JlIHNlYXJjaGluZyBmb3IsIG5vciB3aHkuCj4KPiBJIHRoaW5rIGFsdHAybV9n ZXRfZWZmZWN0aXZlX2VudHJ5KCkgaXMgdGhlIGJlc3QuICAiRWZmZWN0aXZlIiBpbiBDUyBpcwo+ IGNvbW1vbmx5IHVzZWQgdG8gbWVhbiwgInRoZSBlbmQgcmVzdWx0IGFmdGVyIGNvbWJpbmluZyBz ZXZlcmFsIGlucHV0cyIKPiAoZS5nLiwgImVmZmVjdGl2ZSBhZGRyZXNzIiBpcyBvZnRlbiBiYXNl ICsgb2Zmc2V0KTsgSWYgeW91IGtub3cgd2hhdAo+IGFsdHAybSBpcywgdGhlbiBpdCdzIHByZXR0 eSBvYnZpb3VzIHdoYXQgdGhlIGlucHV0cyB3b3VsZCBiZSBhbmQgaG93Cj4gaXQncyB1c2VkLiAg SWYgeW91ICpkb24ndCoga25vdyB3aGF0IGFsdHAybSBpcywgdGhlbgo+ICJwMm1fc2VhcmNoX2Fs dHAybV90aGVuX2hvc3RwMm0oKSIgaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUganVzdCBhcwo+IG15 c3RpZnlpbmcuCj4KPiBQcm9iYWJseSBqdXN0IGhhdmUgYSBzaW5nbGUgZnVuY3Rpb24gdGhhdCB0 YWtlcyBhICdwcmVwb3B1bGF0ZSBhcmd1bWVudDsKPiBhbmQgbWFrZSBzb21lICNkZWZpbmVzIHRv IG1ha2UgaXQgZWFzaWVyIHRvIGZvbGxvdzsgcHJvYmFibHkgc29tZXRoaW5nCj4gbGlrZSAnQVAy TUdFVF9wcmVwb3B1bGF0ZScgYW5kICdBUDJNR0VUX3F1ZXJ5Jy4KPgo+IEFuZCBtYWtlIHN1cmUg dG8gaGF2ZSBhIGNvbW1lbnQgZGVzY3JpYmluZyB3aGF0IHRoZSBmdW5jdGlvbiBkb2VzLgoKVGhh bmtzIEdlb3JnZSwgdGhhdCBpcyByZWFzb25hYmxlIGFuZCBzb3VuZHMgZ29vZCB0byBtZS4KClRh bWFzCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4t ZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczov L2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs