From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [RFC 12/22] xen/arm: p2m: Introduce p2m_get_entry and use it to implement __p2m_lookupo Date: Wed, 31 Aug 2016 13:25:39 +0100 Message-ID: <7e063d10-91b9-0072-90d0-e5ee03abe3b0@arm.com> References: <1469717505-8026-1-git-send-email-julien.grall@arm.com> <1469717505-8026-13-git-send-email-julien.grall@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Stefano Stabellini Cc: proskurin@sec.in.tum.de, wei.chen@linaro.org, steve.capper@arm.com, xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org SGkgU3RlZmFubywKCk9uIDMxLzA4LzE2IDAxOjMwLCBTdGVmYW5vIFN0YWJlbGxpbmkgd3JvdGU6 Cj4gT24gVGh1LCAyOCBKdWwgMjAxNiwgSnVsaWVuIEdyYWxsIHdyb3RlOgo+PiBDdXJyZW50bHks IGZvciBhIGdpdmVuIEdGTiwgdGhlIGZ1bmN0aW9uIF9fcDJtX2xvb2t1cCB3aWxsIG9ubHkgcmV0 dXJuCj4+IHRoZSBhc3NvY2lhdGVkIE1GTiBhbmQgdGhlIHAybSB0eXBlIG9mIHRoZSBtYXBwaW5n Lgo+Pgo+PiBJbiBzb21lIGNhc2Ugd2UgbmVlZCB0aGUgb3JkZXIgb2YgdGhlIG1hcHBpbmcgYW5k IHRoZSBtZW1hY2Nlc3MKPj4gcGVybWlzc2lvbi4gUmF0aGVyIHRoYW4gcHJvdmlkaW5nIHNlcGFy YXRlIGZ1bmN0aW9uIGZvciB0aGlzIHB1cnBvc2UsCj4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXiBhIHNlcGFyYXRlCj4KPj4gaXQgaXMgYmV0dGVyIHRvIGltcGxlbWVudCBh IGdlbmVyaWMgZnVuY3Rpb24gdG8gcmV0dXJuIGFsbCB0aGUKPj4gaW5mb3JtYXRpb24uCj4+Cj4+ IFRvIGF2b2lkIHBhc3NpbmcgZHVtbXkgcGFyYW1ldGVyLCBhIGNhbGxlciB0aGF0IGRvZXMgbmVl ZCBhIHNwZWNpZmljCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXiBub3QgbmVlZD8KClllcywgSSB3aWxsIGZpeCBpdCBpbiB0aGUgbmV4dCB2 ZXJzaW9uLgoKPgo+Cj4+IGluZm9ybWF0aW9uIGNhbiB1c2UgTlVMTCBpbnN0ZWFkLgo+Pgo+PiBU aGUgbGlzdCBvZiB0aGUgaW5mb3JtYXRpb25zIHJldHJpZXZlZCBpcyBiYXNlZCBvbiB0aGUgeDg2 IHZlcnNpb24uIEFsbAo+PiBvZiB0aGVtIHdpbGwgYmUgdXNlZCBpbiBmb2xsb3ctdXAgcGF0Y2hl cy4KPj4KPj4gSXQgbWlnaHQgaGF2ZSBiZWVuIHBvc3NpYmxlIHRvIGV4dGVuZCBfX3AybV9sb29r dXAsIGhvd2V2ZXIgSSBjaG9vc2UgdG8KPj4gcmVpbXBsZW1lbnQgaXQgZnJvbSBzY3JhdGNoIHRv IGFsbG93IHNoYXJpbmcgc29tZSBoZWxwZXJzIHdpdGggdGhlCj4+IGZ1bmN0aW9uIHRoYXQgd2ls bCB1cGRhdGUgdGhlIFAyTSAod2lsbCBiZSBhZGRlZCBpbiBhIGZvbGxvdy11cCBwYXRjaCkuCj4+ Cj4+IFNpZ25lZC1vZmYtYnk6IEp1bGllbiBHcmFsbCA8anVsaWVuLmdyYWxsQGFybS5jb20+Cj4+ IC0tLQo+PiAgeGVuL2FyY2gvYXJtL3AybS5jICAgICAgICAgfCAxODggKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCj4+ICB4ZW4vaW5jbHVkZS9hc20tYXJtL3Bh Z2UuaCB8ICAgNCArCj4+ICAyIGZpbGVzIGNoYW5nZWQsIDE0OSBpbnNlcnRpb25zKCspLCA0MyBk ZWxldGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS9wMm0uYyBiL3hlbi9h cmNoL2FybS9wMm0uYwo+PiBpbmRleCBkNGE0YjYyLi44Njc2YjlkIDEwMDY0NAo+PiAtLS0gYS94 ZW4vYXJjaC9hcm0vcDJtLmMKPj4gKysrIGIveGVuL2FyY2gvYXJtL3AybS5jCj4+IEBAIC0zNiw2 ICszNiw4IEBAIHN0YXRpYyBjb25zdCBwYWRkcl90IGxldmVsX21hc2tzW10gPQo+PiAgICAgIHsg WkVST0VUSF9NQVNLLCBGSVJTVF9NQVNLLCBTRUNPTkRfTUFTSywgVEhJUkRfTUFTSyB9Owo+PiAg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBsZXZlbF9zaGlmdHNbXSA9Cj4+ICAgICAgeyBaRVJP RVRIX1NISUZULCBGSVJTVF9TSElGVCwgU0VDT05EX1NISUZULCBUSElSRF9TSElGVCB9Owo+PiAr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBsZXZlbF9vcmRlcnNbXSA9Cj4+ICsgICAgeyBaRVJP RVRIX09SREVSLCBGSVJTVF9PUkRFUiwgU0VDT05EX09SREVSLCBUSElSRF9PUkRFUiB9Owo+Pgo+ PiAgc3RhdGljIGJvb2xfdCBwMm1fdmFsaWQobHBhZV90IHB0ZSkKPj4gIHsKPj4gQEAgLTIzNiwy OCArMjM4LDk5IEBAIHN0YXRpYyBscGFlX3QgKnAybV9nZXRfcm9vdF9wb2ludGVyKHN0cnVjdCBw Mm1fZG9tYWluICpwMm0sCj4+Cj4+ICAvKgo+PiAgICogTG9va3VwIHRoZSBNRk4gY29ycmVzcG9u ZGluZyB0byBhIGRvbWFpbidzIEdGTi4KPj4gKyAqIExvb2t1cCBtZW0gYWNjZXNzIGluIHRoZSBy YXRyaXggdHJlZS4KPj4gKyAqIFRoZSBlbnRyaWVzIGFzc29jaWF0ZWQgdG8gdGhlIEdGTiBpcyBj b25zaWRlcmVkIHZhbGlkLgo+PiArICovCj4+ICtzdGF0aWMgcDJtX2FjY2Vzc190IHAybV9tZW1f YWNjZXNzX3JhZGl4X2dldChzdHJ1Y3QgcDJtX2RvbWFpbiAqcDJtLCBnZm5fdCBnZm4pCj4+ICt7 Cj4+ICsgICAgdm9pZCAqcHRyOwo+PiArCj4+ICsgICAgaWYgKCAhcDJtLT5tZW1fYWNjZXNzX2Vu YWJsZWQgKQo+PiArICAgICAgICByZXR1cm4gcDJtX2FjY2Vzc19yd3g7Cj4KPiBTaG91bGRuJ3Qg dGhpcyBiZSBwMm0tPmRlZmF1bHRfYWNjZXNzPwoKZGVmYXVsdF9hY2Nlc3Mgd2lsbCBhbHdheXMg YmUgcDJtX2FjY2Vzc19yd3ggd2hlbiBtZW1hY2Nlc3MgaXMgZGlzYWJsZWQuIApJdCB3aWxsIGxl YWQgdG8gY3Jhc2ggYSBpZiB5b3UgdHJ5IHRvIHJlc3RyaWN0IHBlcm1pc3Npb24gd2l0aG91dCBt ZW1hY2Nlc3MuCgpOb3RlIHRoYXQsIHRoaXMgaXMgbWF0Y2hpbmcgdGhlIGJlaGF2aW9yIG9mIF9f cDJtX2dldF9tZW1fYWNjZXNzLgoKPgo+Cj4+ICsgICAgcHRyID0gcmFkaXhfdHJlZV9sb29rdXAo JnAybS0+bWVtX2FjY2Vzc19zZXR0aW5ncywgZ2ZuX3goZ2ZuKSk7Cj4+ICsgICAgaWYgKCAhcHRy ICkKPj4gKyAgICAgICAgcmV0dXJuIHAybV9hY2Nlc3Nfcnd4Owo+Cj4gU2FtZSBoZXJlPwoKVGhl IHJhZGl4IHRyZWUgd2lsbCBjb250YWluIGFsbCB0aGUgcGVybWlzc2lvbiByZXN0cmljdGlvbiBi dXQgCnAybV9hY2Nlc3Nfcnd4LiBUaGlzIGlzIGJlY2F1c2UgeW91IG1heSBjaGFuZ2UgdGhlIGRl ZmF1bHRfYWNjZXNzIHdoaWxzdCAKbWVtYWNjZXNzIGlzIGVuYWJsZWQgYW5kIHlvdSBkb24ndCBr bm93IHdoYXQgcGFnZSB3YXMgcmVzdHJpY3RlZCB3aXRoIAp0aGUgZGVmYXVsdCBhY2Nlc3MuCgpO b3RlIHRoYXQgdGhpcyBpcyBtYXRjaGluZyB0aGUgYmVoYXZpb3Igb2YgcDJtX21lbV9hY2Nlc3Nf cmFkaXhfc2V0LgoKPgo+Cj4+ICsgICAgZWxzZQo+PiArICAgICAgICByZXR1cm4gcmFkaXhfdHJl ZV9wdHJfdG9faW50KHB0cik7Cj4+ICt9Cj4+ICsKPj4gKyNkZWZpbmUgR1VFU1RfVEFCTEVfTUFQ X0ZBSUxFRCAwCj4+ICsjZGVmaW5lIEdVRVNUX1RBQkxFX1NVUEVSX1BBR0UgMQo+PiArI2RlZmlu ZSBHVUVTVF9UQUJMRV9OT1JNQUxfUEFHRSAyCj4+ICsKPj4gK3N0YXRpYyBpbnQgcDJtX2NyZWF0 ZV90YWJsZShzdHJ1Y3QgcDJtX2RvbWFpbiAqcDJtLCBscGFlX3QgKmVudHJ5LAo+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBsZXZlbF9zaGlmdCk7Cj4+ICsKPj4gKy8qCj4+ICsg KiBUYWtlIHRoZSBjdXJyZW50bHkgbWFwcGVkIHRhYmxlLCBmaW5kIHRoZSBjb3JyZXNwb25kaW5n IEdGTiBlbnRyeSwKPj4gKyAqIGFuZCBtYXAgdGhlIG5leHQgdGFibGUsIGlmIGF2YWlsYWJsZS4K Pgo+IEl0IGlzIGltcG9ydGFudCB0byB3cml0ZSBkb3duIHRoYXQgdGhlIGZ1bmN0aW9uIGFsc28g dW5tYXBzIHRoZSBwcmV2aW91cwo+IHRhYmxlLgoKV2lsbCBkby4KCj4KPj4gICAqCj4+IC0gKiBU aGVyZSBhcmUgbm8gcHJvY2Vzc29yIGZ1bmN0aW9ucyB0byBkbyBhIHN0YWdlIDIgb25seSBsb29r dXAgdGhlcmVmb3JlIHdlCj4+IC0gKiBkbyBhIGEgc29mdHdhcmUgd2Fsay4KPj4gKyAqIFJldHVy biB2YWx1ZXM6Cj4+ICsgKiAgR1VFU1RfVEFCTEVfTUFQX0ZBSUxFRDogRWl0aGVyIHJlYWRfb25s eSB3YXMgc2V0IGFuZCB0aGUgZW50cnkKPj4gKyAqICB3YXMgZW1wdHksIG9yIGFsbG9jYXRpbmcg YSBuZXcgcGFnZSBmYWlsZWQuCj4+ICsgKiAgR1VFU1RfVEFCTEVfTk9STUFMX1BBR0U6IG5leHQg bGV2ZWwgbWFwcGVkIG5vcm1hbGx5Cj4+ICsgKiAgR1VFU1RfVEFCTEVfU1VQRVJfUEFHRTogVGhl IG5leHQgZW50cnkgcG9pbnRzIHRvIGEgc3VwZXJwYWdlLgo+PiAgICovCj4+IC1zdGF0aWMgbWZu X3QgX19wMm1fbG9va3VwKHN0cnVjdCBkb21haW4gKmQsIGdmbl90IGdmbiwgcDJtX3R5cGVfdCAq dCkKPj4gK3N0YXRpYyBpbnQgcDJtX25leHRfbGV2ZWwoc3RydWN0IHAybV9kb21haW4gKnAybSwg Ym9vbCByZWFkX29ubHksCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIGxwYWVfdCAqKnRh YmxlLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQo+PiAgewo+PiAtICAgIHN0cnVjdCBwMm1fZG9tYWlu ICpwMm0gPSAmZC0+YXJjaC5wMm07Cj4+IC0gICAgY29uc3QgcGFkZHJfdCBwYWRkciA9IHBmbl90 b19wYWRkcihnZm5feChnZm4pKTsKPj4gLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgb2Zmc2V0c1s0 XSA9IHsKPj4gLSAgICAgICAgemVyb2V0aF90YWJsZV9vZmZzZXQocGFkZHIpLAo+PiAtICAgICAg ICBmaXJzdF90YWJsZV9vZmZzZXQocGFkZHIpLAo+PiAtICAgICAgICBzZWNvbmRfdGFibGVfb2Zm c2V0KHBhZGRyKSwKPj4gLSAgICAgICAgdGhpcmRfdGFibGVfb2Zmc2V0KHBhZGRyKQo+PiAtICAg IH07Cj4+IC0gICAgY29uc3QgcGFkZHJfdCBtYXNrc1s0XSA9IHsKPj4gLSAgICAgICAgWkVST0VU SF9NQVNLLCBGSVJTVF9NQVNLLCBTRUNPTkRfTUFTSywgVEhJUkRfTUFTSwo+PiAtICAgIH07Cj4+ IC0gICAgbHBhZV90IHB0ZSwgKm1hcDsKPj4gKyAgICBscGFlX3QgKmVudHJ5Owo+PiArICAgIGlu dCByZXQ7Cj4+ICsgICAgbWZuX3QgbWZuOwo+PiArCj4+ICsgICAgZW50cnkgPSAqdGFibGUgKyBv ZmZzZXQ7Cj4+ICsKPj4gKyAgICBpZiAoICFwMm1fdmFsaWQoKmVudHJ5KSApCj4+ICsgICAgewo+ PiArICAgICAgICBpZiAoIHJlYWRfb25seSApCj4+ICsgICAgICAgICAgICByZXR1cm4gR1VFU1Rf VEFCTEVfTUFQX0ZBSUxFRDsKPj4gKwo+PiArICAgICAgICByZXQgPSBwMm1fY3JlYXRlX3RhYmxl KHAybSwgZW50cnksIC8qIG5vdCB1c2VkICovIH4wKTsKPj4gKyAgICAgICAgaWYgKCByZXQgKQo+ PiArICAgICAgICAgICAgcmV0dXJuIEdVRVNUX1RBQkxFX01BUF9GQUlMRUQ7Cj4+ICsgICAgfQo+ PiArCj4+ICsgICAgLyogVGhlIGZ1bmN0aW9uIHAybV9uZXh0X2xldmVsIGlzIG5ldmVyIGNhbGxl ZCBhdCB0aGUgM3JkIGxldmVsICovCj4+ICsgICAgaWYgKCBwMm1fbWFwcGluZygqZW50cnkpICkK Pj4gKyAgICAgICAgcmV0dXJuIEdVRVNUX1RBQkxFX1NVUEVSX1BBR0U7Cj4+ICsKPj4gKyAgICBt Zm4gPSBfbWZuKGVudHJ5LT5wMm0uYmFzZSk7Cj4+ICsKPj4gKyAgICB1bm1hcF9kb21haW5fcGFn ZSgqdGFibGUpOwo+PiArICAgICp0YWJsZSA9IG1hcF9kb21haW5fcGFnZShtZm4pOwo+PiArCj4+ ICsgICAgcmV0dXJuIEdVRVNUX1RBQkxFX05PUk1BTF9QQUdFOwo+Cj4gSSBhbSBhIGJpdCB3b3Jy aWVkIGFib3V0IGhhdmluZyB0aGUgc2FtZSBmdW5jdGlvbiBkb2luZyB0aGUgbG9va3VwIGFuZAo+ IGNyZWF0aW5nIG5ldyB0YWJsZXMsIGVzcGVjaWFsbHkgZ2l2ZW4gaXQgZG9lc24ndCB0ZWxsIHlv dSB3aGV0aGVyIHRoZQo+IGVudHJ5IHdhcyBhbHJlYWR5IHRoZXJlIG9yIGl0IHdhcyBjcmVhdGVk OiB0aGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBzYW1lCj4gaW4gYm90aCBjYXNlcy4gQXQgdGhlIHZl cnkgbGVhc3QgdGhlIHJldHVybiB2YWx1ZXMgc2hvdWxkIGJlIGRpZmZlcmVudC4KCkkgZG9uJ3Qg dW5kZXJzdGFuZCB5b3VyIHdvcnJ5IGhlcmUuIFdoeSB3b3VsZCB5b3UgY2FyZSB0aGF0IHRoZSB0 YWJsZSAKaGFzIGJlZW4gYWxsb2NhdGVkIG9yIHdhcyBhbHJlYWR5IGV4aXN0aW5nPwoKSWYgdGhl IGNhbGxlciBkb2VzIG5vdCB3YW50IHRvIGFsbG9jYXRlIHRhYmxlLCBpdCBjYW4gcmVxdWVzdCB0 byBicm93c2UgCnRoZSBlbnRyeSBpbiBhIHJlYWQtb25seSBtb2RlIChzZWUgcmVhZF9vbmx5KS4K Cj4KPgo+PiArfQo+PiArCj4+ICsvKgo+PiArICogR2V0IHRoZSBkZXRhaWxzIG9mIGEgZ2l2ZW4g Z2ZuLgo+PiArICoKPj4gKyAqIElmIHRoZSBlbnRyeSBpcyBwcmVzZW50LCB0aGUgYXNzb2NpYXRl ZCBNRk4gd2lsbCBiZSByZXR1cm5lZCBhbmQgdGhlCj4+ICsgKiBhY2Nlc3MgYW5kIHR5cGUgZmls bGVkIHVwLiBUaGUgcGFnZV9vcmRlciB3aWxsIGNvcnJlc3BvbmQgdG8gdGhlCj4+ICsgKiBvcmRl ciBvZiB0aGUgbWFwcGluZyBpbiB0aGUgcGFnZSB0YWJsZSAoaS5lIGl0IGNvdWxkIGJlIGEgc3Vw ZXJwYWdlKS4KPj4gKyAqCj4+ICsgKiBJZiB0aGUgZW50cnkgaXMgbm90IHByZXNlbnQsIElOVkFM SURfTUZOIHdpbGwgYmUgcmV0dXJuZWQgYW5kIHRoZQo+PiArICogcGFnZV9vcmRlciB3aWxsIGJl IHNldCBhY2NvcmRpbmcgdG8gdGhlIG9yZGVyIG9mIHRoZSBpbnZhbGlkIHJhbmdlLgo+PiArICov Cj4+ICtzdGF0aWMgbWZuX3QgcDJtX2dldF9lbnRyeShzdHJ1Y3QgcDJtX2RvbWFpbiAqcDJtLCBn Zm5fdCBnZm4sCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBwMm1fdHlwZV90ICp0LCBw Mm1fYWNjZXNzX3QgKmEsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp bnQgKnBhZ2Vfb3JkZXIpCj4+ICt7Cj4+ICsgICAgcGFkZHJfdCBhZGRyID0gcGZuX3RvX3BhZGRy KGdmbl94KGdmbikpOwo+PiArICAgIHVuc2lnbmVkIGludCBsZXZlbCA9IDA7Cj4+ICsgICAgbHBh ZV90IGVudHJ5LCAqdGFibGU7Cj4+ICsgICAgaW50IHJjOwo+PiAgICAgIG1mbl90IG1mbiA9IElO VkFMSURfTUZOOwo+PiAtICAgIHBhZGRyX3QgbWFzayA9IDA7Cj4+ICAgICAgcDJtX3R5cGVfdCBf dDsKPj4gLSAgICB1bnNpZ25lZCBpbnQgbGV2ZWw7Cj4+ICsKPj4gKyAgICAvKiBDb252ZW5pZW5j ZSBhbGlhc2VzICovCj4+ICsgICAgY29uc3QgdW5zaWduZWQgaW50IG9mZnNldHNbNF0gPSB7Cj4+ ICsgICAgICAgIHplcm9ldGhfdGFibGVfb2Zmc2V0KGFkZHIpLAo+PiArICAgICAgICBmaXJzdF90 YWJsZV9vZmZzZXQoYWRkciksCj4+ICsgICAgICAgIHNlY29uZF90YWJsZV9vZmZzZXQoYWRkciks Cj4+ICsgICAgICAgIHRoaXJkX3RhYmxlX29mZnNldChhZGRyKQo+PiArICAgIH07Cj4+Cj4+ICAg ICAgQVNTRVJUKHAybV9pc19sb2NrZWQocDJtKSk7Cj4+ICAgICAgQlVJTERfQlVHX09OKFRISVJE X01BU0sgIT0gUEFHRV9NQVNLKTsKPj4gQEAgLTI2Nyw0NiArMzQwLDc1IEBAIHN0YXRpYyBtZm5f dCBfX3AybV9sb29rdXAoc3RydWN0IGRvbWFpbiAqZCwgZ2ZuX3QgZ2ZuLCBwMm1fdHlwZV90ICp0 KQo+Pgo+PiAgICAgICp0ID0gcDJtX2ludmFsaWQ7Cj4+Cj4+IC0gICAgbWFwID0gcDJtX2dldF9y b290X3BvaW50ZXIocDJtLCBnZm4pOwo+PiAtICAgIGlmICggIW1hcCApCj4+IC0gICAgICAgIHJl dHVybiBJTlZBTElEX01GTjsKPj4gKyAgICAvKiBYWFg6IENoZWNrIGlmIHRoZSBtYXBwaW5nIGlz IGxvd2VyIHRoYW4gdGhlIG1hcHBlZCBnZm4gKi8KPj4KPj4gLSAgICBBU1NFUlQoUDJNX1JPT1Rf TEVWRUwgPCA0KTsKPj4gLQo+PiAtICAgIGZvciAoIGxldmVsID0gUDJNX1JPT1RfTEVWRUwgOyBs ZXZlbCA8IDQgOyBsZXZlbCsrICkKPj4gKyAgICAvKiBUaGlzIGdmbiBpcyBoaWdoZXIgdGhhbiB0 aGUgaGlnaGVzdCB0aGUgcDJtIG1hcCBjdXJyZW50bHkgaG9sZHMgKi8KPj4gKyAgICBpZiAoIGdm bl94KGdmbikgPiBnZm5feChwMm0tPm1heF9tYXBwZWRfZ2ZuKSApCj4+ICAgICAgewo+PiAtICAg ICAgICBtYXNrID0gbWFza3NbbGV2ZWxdOwo+PiAtCj4+IC0gICAgICAgIHB0ZSA9IG1hcFtvZmZz ZXRzW2xldmVsXV07Cj4+ICsgICAgICAgIGZvciAoIGxldmVsID0gUDJNX1JPT1RfTEVWRUw7IGxl dmVsIDwgMzsgbGV2ZWwrKyApCj4+ICsgICAgICAgIHsKPj4gKyAgICAgICAgICAgIGlmICggKGdm bl94KGdmbikgJiAobGV2ZWxfbWFza3NbbGV2ZWxdID4+IFBBR0VfU0hJRlQpKSA+Cj4+ICsgICAg ICAgICAgICAgICAgIGdmbl94KHAybS0+bWF4X21hcHBlZF9nZm4pICkKPj4gKyAgICAgICAgICAg ICAgICBicmVhazsKPj4gKyAgICAgICAgICAgIGdvdG8gb3V0Owo+Cj4gSSBhbSBub3Qgc3VyZSB3 aGF0IHRoaXMgbG9vcCBpcyBmb3IsIGJ1dCBpdCBsb29rcyB3cm9uZy4KCkFzIG1lbnRpb25lZCBp biB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGZ1bmN0aW9uLCBpZiB0aGUgZW50cnkgaXMgbm90IApw cmVzZW50LCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIG9yZGVyIG9mIHRoZSBpbnZhbGlk IHJhbmdlLgoKVGhlIGxvb3Agd2lsbCBmaW5kIHRoZSBoaWdoZXN0IHBvc3NpYmxlIG9yZGVyIGJ5 IGNoZWNraW5nIHRoZSBiYXNlIG9mIAp0aGUgYmxvY2sgbWFwcGluZyBpcyBncmVhdGVyIHRoYW4g dGhlIG1heCBtYXBwZWQgZ2ZuLgoKPgo+Cj4+ICsgICAgICAgIH0KPj4gKyAgICB9Cj4+Cj4+IC0g ICAgICAgIGlmICggbGV2ZWwgPT0gMyAmJiAhcDJtX3RhYmxlKHB0ZSkgKQo+PiAtICAgICAgICAg ICAgLyogSW52YWxpZCwgY2xvYmJlciB0aGUgcHRlICovCj4+IC0gICAgICAgICAgICBwdGUuYml0 cyA9IDA7Cj4+IC0gICAgICAgIGlmICggbGV2ZWwgPT0gMyB8fCAhcDJtX3RhYmxlKHB0ZSkgKQo+ PiAtICAgICAgICAgICAgLyogRG9uZSAqLwo+PiAtICAgICAgICAgICAgYnJlYWs7Cj4+ICsgICAg dGFibGUgPSBwMm1fZ2V0X3Jvb3RfcG9pbnRlcihwMm0sIGdmbik7Cj4+Cj4+IC0gICAgICAgIEFT U0VSVChsZXZlbCA8IDMpOwo+PiArICAgIC8qCj4+ICsgICAgICogdGhlIHRhYmxlIHNob3VsZCBh bHdheXMgYmUgbm9uLU5VTEwgYmVjYXVzZSB0aGUgZ2ZuIGlzIGJlbG93Cj4+ICsgICAgICogcDJt LT5tYXhfbWFwcGVkX2dmbiBhbmQgdGhlIHJvb3QgdGFibGUgcGFnZXMgYXJlIGFsd2F5cyBwcmVz ZW50Lgo+PiArICAgICAqLwo+PiArICAgIEJVR19PTih0YWJsZSA9PSBOVUxMKTsKPj4KPj4gLSAg ICAgICAgLyogTWFwIGZvciBuZXh0IGxldmVsICovCj4+IC0gICAgICAgIHVubWFwX2RvbWFpbl9w YWdlKG1hcCk7Cj4+IC0gICAgICAgIG1hcCA9IG1hcF9kb21haW5fcGFnZShfbWZuKHB0ZS5wMm0u YmFzZSkpOwo+PiArICAgIGZvciAoIGxldmVsID0gUDJNX1JPT1RfTEVWRUw7IGxldmVsIDwgMzsg bGV2ZWwrKyApCj4+ICsgICAgewo+PiArICAgICAgICByYyA9IHAybV9uZXh0X2xldmVsKHAybSwg dHJ1ZSwgJnRhYmxlLCBvZmZzZXRzW2xldmVsXSk7Cj4+ICsgICAgICAgIGlmICggcmMgPT0gR1VF U1RfVEFCTEVfTUFQX0ZBSUxFRCApCj4+ICsgICAgICAgICAgICBnb3RvIG91dF91bm1hcDsKPj4g KyAgICAgICAgZWxzZSBpZiAoIHJjICE9IEdVRVNUX1RBQkxFX05PUk1BTF9QQUdFICkKPj4gKyAg ICAgICAgICAgIGJyZWFrOwo+PiAgICAgIH0KPj4KPj4gLSAgICB1bm1hcF9kb21haW5fcGFnZSht YXApOwo+PiArICAgIGVudHJ5ID0gdGFibGVbb2Zmc2V0c1tsZXZlbF1dOwo+Pgo+PiAtICAgIGlm ICggcDJtX3ZhbGlkKHB0ZSkgKQo+PiArICAgIGlmICggcDJtX3ZhbGlkKGVudHJ5KSApCj4+ICAg ICAgewo+PiAtICAgICAgICBBU1NFUlQobWFzayk7Cj4+IC0gICAgICAgIEFTU0VSVChwdGUucDJt LnR5cGUgIT0gcDJtX2ludmFsaWQpOwo+PiAtICAgICAgICBtZm4gPSBfbWZuKHBhZGRyX3RvX3Bm bigocHRlLmJpdHMgJiBQQUREUl9NQVNLICYgbWFzaykgfAo+PiAtICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAocGFkZHIgJiB+bWFzaykpKTsKPj4gLSAgICAgICAgKnQgPSBwdGUucDJt LnR5cGU7Cj4+ICsgICAgICAgICp0ID0gZW50cnkucDJtLnR5cGU7Cj4KPiBXaHkgZG9uJ3QgeW91 IGhhdmUgYSBjaGVjayBmb3IgKCB0ICkgbGlrZSB5b3UgaGF2ZSBkb25lIGluIHRoZSBjYXNlIG9m Cj4gKCBhICk/IEl0IHdvdWxkIGJlIG1vcmUgY29uc2lzdGVudC4KClRoaXMgaXMgZG9uZSBhdCB0 aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbjoKCi8qIEFsbG93IHQgdG8gYmUgTlVMTCAqLwp0 ID0gdCA/OiAmX3Q7CgoqdCA9IHAybV9pbnZhbGlkOwoKVGhpcyB3YXMga2VwdCBmcm9tIHRoZSBp bXBsZW1lbnRhdGlvbiBvZiBfX3AybV9sb29rdXAgYmVjYXVzZSBzb21lIApjYWxsZXJzIGNoZWNr IHRoZSB0eXBlIGJlZm9yZSBjaGVja2luZyBpZiB0aGUgTUZOIGlzIGludmFsaWQgKGUuZyAKZ2V0 X3BhZ2VfZnJvbV9nZm4pLgoKSSBkaWRuJ3QgZm9sbG93IHRoZSBzYW1lIHByaW5jaXBsZSBmb3Ig dGhlIGFjY2VzcyBiZWNhdXNlIGdvaW5nIHRocm91Z2ggCnRoZSByYWRpeCB0cmVlIGlzIGV4cGVu c2l2ZSBhbmQgbW9zdCBvZiB0aGUgaG90IHBhdGggZG9lcyBub3QgY2FyZSBhYm91dCAKdGhlIGFj Y2Vzcy4KCj4KPgo+PiArCj4+ICsgICAgICAgIGlmICggYSApCj4+ICsgICAgICAgICAgICAqYSA9 IHAybV9tZW1fYWNjZXNzX3JhZGl4X2dldChwMm0sIGdmbik7Cj4+ICsKPj4gKyAgICAgICAgbWZu ID0gX21mbihlbnRyeS5wMm0uYmFzZSk7Cj4+ICsgICAgICAgIC8qCj4+ICsgICAgICAgICAqIFRo ZSBlbnRyeSBtYXkgcG9pbnQgdG8gYSBzdXBlcnBhZ2UuIEZpbmQgdGhlIE1GTiBhc3NvY2lhdGVk Cj4+ICsgICAgICAgICAqIHRvIHRoZSBHRk4uCj4+ICsgICAgICAgICAqLwo+PiArICAgICAgICBt Zm4gPSBtZm5fYWRkKG1mbiwgZ2ZuX3goZ2ZuKSAmICgoMVVMIDw8IGxldmVsX29yZGVyc1tsZXZl bF0pIC0gMSkpOwo+PiAgICAgIH0KPj4KPj4gK291dF91bm1hcDoKPj4gKyAgICB1bm1hcF9kb21h aW5fcGFnZSh0YWJsZSk7Cj4+ICsKPj4gK291dDoKPj4gKyAgICBpZiAoIHBhZ2Vfb3JkZXIgKQo+ PiArICAgICAgICAqcGFnZV9vcmRlciA9IGxldmVsX3NoaWZ0c1tsZXZlbF0gLSBQQUdFX1NISUZU Owo+PiArCj4+ICAgICAgcmV0dXJuIG1mbjsKPj4gIH0KPj4KPj4gKy8qCj4+ICsgKiBMb29rdXAg dGhlIE1GTiBjb3JyZXNwb25kaW5nIHRvIGEgZG9tYWluJ3MgR0ZOLgo+PiArICoKPj4gKyAqIFRo ZXJlIGFyZSBubyBwcm9jZXNzb3IgZnVuY3Rpb25zIHRvIGRvIGEgc3RhZ2UgMiBvbmx5IGxvb2t1 cCB0aGVyZWZvcmUgd2UKPj4gKyAqIGRvIGEgYSBzb2Z0d2FyZSB3YWxrLgo+PiArICovCj4+ICtz dGF0aWMgbWZuX3QgX19wMm1fbG9va3VwKHN0cnVjdCBkb21haW4gKmQsIGdmbl90IGdmbiwgcDJt X3R5cGVfdCAqdCkKPj4gK3sKPj4gKyAgICByZXR1cm4gcDJtX2dldF9lbnRyeSgmZC0+YXJjaC5w Mm0sIGdmbiwgdCwgTlVMTCwgTlVMTCk7Cj4+ICt9Cj4+ICsKPj4gIG1mbl90IHAybV9sb29rdXAo c3RydWN0IGRvbWFpbiAqZCwgZ2ZuX3QgZ2ZuLCBwMm1fdHlwZV90ICp0KQo+PiAgewo+PiAgICAg IG1mbl90IHJldDsKPj4gZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2FzbS1hcm0vcGFnZS5oIGIv eGVuL2luY2x1ZGUvYXNtLWFybS9wYWdlLmgKPj4gaW5kZXggMDVkOWY4Mi4uMWM1YmQ4YiAxMDA2 NDQKPj4gLS0tIGEveGVuL2luY2x1ZGUvYXNtLWFybS9wYWdlLmgKPj4gKysrIGIveGVuL2luY2x1 ZGUvYXNtLWFybS9wYWdlLmgKPj4gQEAgLTQ1NywxNSArNDU3LDE5IEBAIHN0YXRpYyBpbmxpbmUg aW50IGd2YV90b19pcGEodmFkZHJfdCB2YSwgcGFkZHJfdCAqcGFkZHIsIHVuc2lnbmVkIGludCBm bGFncykKPj4gICNkZWZpbmUgTFBBRV9FTlRSWV9NQVNLIChMUEFFX0VOVFJJRVMgLSAxKQo+Pgo+ PiAgI2RlZmluZSBUSElSRF9TSElGVCAgICAoUEFHRV9TSElGVCkKPj4gKyNkZWZpbmUgVEhJUkRf T1JERVIgICAgMAo+PiAgI2RlZmluZSBUSElSRF9TSVpFICAgICAoKHBhZGRyX3QpMSA8PCBUSElS RF9TSElGVCkKPj4gICNkZWZpbmUgVEhJUkRfTUFTSyAgICAgKH4oVEhJUkRfU0laRSAtIDEpKQo+ PiAgI2RlZmluZSBTRUNPTkRfU0hJRlQgICAoVEhJUkRfU0hJRlQgKyBMUEFFX1NISUZUKQo+PiAr I2RlZmluZSBTRUNPTkRfT1JERVIgICAoVEhJUkRfT1JERVIgKyBMUEFFX1NISUZUKQo+PiAgI2Rl ZmluZSBTRUNPTkRfU0laRSAgICAoKHBhZGRyX3QpMSA8PCBTRUNPTkRfU0hJRlQpCj4+ICAjZGVm aW5lIFNFQ09ORF9NQVNLICAgICh+KFNFQ09ORF9TSVpFIC0gMSkpCj4+ICAjZGVmaW5lIEZJUlNU X1NISUZUICAgIChTRUNPTkRfU0hJRlQgKyBMUEFFX1NISUZUKQo+PiArI2RlZmluZSBGSVJTVF9P UkRFUiAgICAoU0VDT05EX09SREVSICsgTFBBRV9TSElGVCkKPj4gICNkZWZpbmUgRklSU1RfU0la RSAgICAgKChwYWRkcl90KTEgPDwgRklSU1RfU0hJRlQpCj4+ICAjZGVmaW5lIEZJUlNUX01BU0sg ICAgICh+KEZJUlNUX1NJWkUgLSAxKSkKPj4gICNkZWZpbmUgWkVST0VUSF9TSElGVCAgKEZJUlNU X1NISUZUICsgTFBBRV9TSElGVCkKPj4gKyNkZWZpbmUgWkVST0VUSF9PUkRFUiAgKEZJUlNUX09S REVSICsgTFBBRV9TSElGVCkKPj4gICNkZWZpbmUgWkVST0VUSF9TSVpFICAgKChwYWRkcl90KTEg PDwgWkVST0VUSF9TSElGVCkKPj4gICNkZWZpbmUgWkVST0VUSF9NQVNLICAgKH4oWkVST0VUSF9T SVpFIC0gMSkpCj4KPiBJdCBtaWdodCBiZSBjbGVhcmVyIHRvIGRlZmluZSB0aGVtIGJ5IFNISUZU Ogo+Cj4gICAgICNkZWZpbmUgVEhJUkRfT1JERVIgICAgIChUSElSRF9TSElGVCAtIFBBR0VfU0hJ RlQpCj4gICAgICNkZWZpbmUgU0VDT05EX09SREVSICAgIChTRUNPTkRfU0hJRlQgLSBQQUdFX1NI SUZUKQo+ICAgICAjZGVmaW5lIEZJUlNUX09SREVSICAgICAoRklSU1RfU0hJRlQgLSBQQUdFX1NI SUZUKQo+ICAgICAjZGVmaW5lIFpFUk9FVEhfT1JERVIgICAoWkVST0VUSF9TSElGVCAtIFBBR0Vf U0hJRlQpCgpJIHdhcyBmb2xsb3dpbmcgdGhlIHdheSB0aGUgb3RoZXIgY29uc3RhbnQgaGFzIGJl ZW4gZGVmaW5lZC4gVGhlIG9yZGVyIApvZiB0aGUgMm5kIGxldmVsIGNhbiBiZSBleHByZXNzZWQg aW4gdGVybSBvZiB0aGUgb3JkZXIgb2YgdGhlIDNyZCBsZXZlbC4uLgoKSSBkb24ndCB0aGluayB0 aGlzIGlzIGNsZWFyZXIsIGJ1dCBJIGRvbid0IG1pbmQgdG8gdXNlIHRoZW0uCgo+Cj4gb3IgYXZv aWQgdGhlbSBhbmQganVzdCB1c2UgbGV2ZWxfc2hpZnRzIHdoaWNoIGlzIGFscmVhZHkgZGVmaW5l ZC4gIEkKPiBkb24ndCB0aGluayB0aGV5IGFkZCBtdWNoIHZhbHVlLgoKUmVhbGx5PyBJdCBhdm9p ZHMgdG8gc3ByZWFkIC0ge1BBR0UsTFBBRX1fU0hJRlQgZXZlcnl3aGVyZSBpbiB0aGUgY29kZSAK c28gdGhlIGNvZGUgd2lsbCBiZSBjbGVhbmVyLgoKTm90ZSB0aGF0IEkgaGF2ZSBub3RpY2VkIHRo YXQgdGhlcmUgYXJlIHN0aWxsIGZldyBwbGFjZXMgd2hlcmUgCihsZXZlbF9zaGlmdHMgLSBQQUdF X1NISUZUKSBpcyBzdGlsbCBpbiB1c2UuIEhvd2V2ZXIsIHdlIGNhbiByZXBsYWNlIGJ5IApsZXZl bF9vcmRlcnMuCgpSZWdhcmRzLAoKLS0gCkp1bGllbiBHcmFsbAoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4t ZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==