From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RFC 9/9] drm/i915: Add sync framework support to execbuff IOCTL Date: Tue, 17 Nov 2015 14:59:59 +0100 Message-ID: <20151117135959.GZ16848@phenom.ffwll.local> References: <1437143483-6234-1-git-send-email-John.C.Harrison@Intel.com> <1437143483-6234-10-git-send-email-John.C.Harrison@Intel.com> <55B62B62.20300@linux.intel.com> <5630C71D.5090504@Intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-f44.google.com (mail-wm0-f44.google.com [74.125.82.44]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9497A6E3AD for ; Tue, 17 Nov 2015 06:00:04 -0800 (PST) Received: by wmww144 with SMTP id w144so27095011wmw.0 for ; Tue, 17 Nov 2015 06:00:03 -0800 (PST) Content-Disposition: inline In-Reply-To: <5630C71D.5090504@Intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: John Harrison Cc: Intel-GFX@Lists.FreeDesktop.Org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBPY3QgMjgsIDIwMTUgYXQgMDE6MDE6MTdQTSArMDAwMCwgSm9obiBIYXJyaXNvbiB3 cm90ZToKPiBPbiAyNy8wNy8yMDE1IDE0OjAwLCBUdnJ0a28gVXJzdWxpbiB3cm90ZToKPiA+T24g MDcvMTcvMjAxNSAwMzozMSBQTSwgSm9obi5DLkhhcnJpc29uQEludGVsLmNvbSB3cm90ZToKPiA+ PkZyb206IEpvaG4gSGFycmlzb24gPEpvaG4uQy5IYXJyaXNvbkBJbnRlbC5jb20+Cj4gPj4KPiA+ PlZhcmlvdXMgcHJvamVjdHMgZGVzaXJlIGEgbWVjaGFuaXNtIGZvciBtYW5hZ2luZyBkZXBlbmRl bmNpZXMgYmV0d2Vlbgo+ID4+d29yayBpdGVtcyBhc3luY2hyb25vdXNseS4gVGhpcyBjYW4gYWxz byBpbmNsdWRlIHdvcmsgaXRlbXMgYWNyb3NzCj4gPj5jb21wbGV0ZSBkaWZmZXJlbnQgYW5kIGlu ZGVwZW5kZW50IHN5c3RlbXMuIEZvciBleGFtcGxlLCBhbgo+ID4+YXBwbGljYXRpb24gd2FudHMg dG8gcmV0cmVpdmUgYSBmcmFtZSBmcm9tIGEgdmlkZW8gaW4gZGV2aWNlLAo+ID4+dXNpbmcgaXQg Zm9yIHJlbmRlcmluZyBvbiBhIEdQVSB0aGVuIHNlbmQgaXQgdG8gdGhlIHZpZGVvIG91dCBkZXZp Y2UKPiA+PmZvciBkaXNwbGF5IGFsbCB3aXRob3V0IGhhdmluZyB0byBzdGFsbCB3YWl0aW5nIGZv ciBjb21wbGV0aW9uIGFsb25nCj4gPj50aGUgd2F5LiBUaGUgc3luYyBmcmFtZXdvcmsgYWxsb3dz IHRoaXMuIEl0IGVuY2Fwc3VsYXRlcwo+ID4+c3luY2hyb25pc2F0aW9uIGV2ZW50cyBpbiBmaWxl IGRlc2NyaXB0b3JzLiBUaGUgYXBwbGljYXRpb24gY2FuCj4gPj5yZXF1ZXN0IGEgc3luYyBwb2lu dCBmb3IgdGhlIGNvbXBsZXRpb24gb2YgZWFjaCBwaWVjZSBvZiB3b3JrLiBEcml2ZXJzCj4gPj5z aG91bGQgYWxzbyB0YWtlIHN5bmMgcG9pbnRzIGluIHdpdGggZWFjaCBuZXcgd29yayByZXF1ZXN0 IGFuZCBub3QKPiA+PnNjaGVkdWxlIHRoZSB3b3JrIHRvIHN0YXJ0IHVudGlsIHRoZSBzeW5jIGhh cyBiZWVuIHNpZ25hbGxlZC4KPiA+Pgo+ID4+VGhpcyBwYXRjaCBhZGRzIHN5bmMgZnJhbWV3b3Jr IHN1cHBvcnQgdG8gdGhlIGV4ZWMgYnVmZmVyIElPQ1RMLiBBCj4gPj5zeW5jIHBvaW50IGNhbiBi ZSBwYXNzZWQgaW4gdG8gc3RhbGwgZXhlY3V0aW9uIG9mIHRoZSBiYXRjaCBidWZmZXIKPiA+PnVu dGlsIHNpZ25hbGxlZC4gQW5kIGEgc3luYyBwb2ludCBjYW4gYmUgcmV0dXJuZWQgYWZ0ZXIgZWFj aCBiYXRjaAo+ID4+YnVmZmVyIHN1Ym1pc3Npb24gd2hpY2ggd2lsbCBiZSBzaWduYWxsZWQgdXBv biB0aGF0IGJhdGNoIGJ1ZmZlcidzCj4gPj5jb21wbGV0aW9uLgo+ID4+Cj4gPj5BdCBwcmVzZW50 LCB0aGUgaW5wdXQgc3luYyBwb2ludCBpcyBzaW1wbHkgd2FpdGVkIG9uIHN5bmNocm9ub3VzbHkK PiA+Pmluc2lkZSB0aGUgZXhlYyBidWZmZXIgSU9DVEwgY2FsbC4gT25jZSB0aGUgR1BVIHNjaGVk dWxlciBhcnJpdmVzLAo+ID4+dGhpcyB3aWxsIGJlIGhhbmRsZWQgYXN5bmNocm9ub3VzbHkgaW5z aWRlIHRoZSBzY2hlZHVsZXIgYW5kIHRoZSBJT0NUTAo+ID4+Y2FuIHJldHVybiB3aXRob3V0IGhh dmluZyB0byB3YWl0Lgo+ID4+Cj4gPj5Ob3RlIGFsc28gdGhhdCB0aGUgc2NoZWR1bGVyIHdpbGwg cmUtb3JkZXIgdGhlIGV4ZWN1dGlvbiBvZiBiYXRjaAo+ID4+YnVmZmVycywgZS5nLiBiZWNhdXNl IGEgYmF0Y2ggYnVmZmVyIGlzIHN0YWxsZWQgb24gYSBzeW5jIHBvaW50IGFuZAo+ID4+Y2Fubm90 IGJlIHN1Ym1pdHRlZCB5ZXQgYnV0IG90aGVyLCBpbmRlcGVuZGVudCwgYmF0Y2ggYnVmZmVycyBh cmUKPiA+PmJlaW5nIHByZXNlbnRlZCB0byB0aGUgZHJpdmVyLiBUaGlzIG1lYW5zIHRoYXQgdGhl IHRpbWVsaW5lIHdpdGhpbiB0aGUKPiA+PnN5bmMgcG9pbnRzIHJldHVybmVkIGNhbm5vdCBiZSBn bG9iYWwgdG8gdGhlIGVuZ2luZS4gSW5zdGVhZCB0aGV5IG11c3QKPiA+PmJlIGtlcHQgcGVyIGNv bnRleHQgcGVyIGVuZ2luZSAodGhlIHNjaGVkdWxlciBtYXkgbm90IHJlLW9yZGVyIGJhdGNoZXMK PiA+PndpdGhpbiBhIGNvbnRleHQpLiBIZW5jZSB0aGUgdGltZWxpbmUgY2Fubm90IGJlIGJhc2Vk IG9uIHRoZSBleGlzdGluZwo+ID4+c2Vxbm8gdmFsdWVzIGJ1dCBtdXN0IGJlIGEgbmV3IGltcGxl bWVudGF0aW9uLgo+ID4+Cj4gPj5UaGlzIHBhdGNoIGlzIGEgcG9ydCBvZiB3b3JrIGJ5IHNldmVy YWwgcGVvcGxlIHRoYXQgaGFzIGJlZW4gcHVsbGVkCj4gPj5hY3Jvc3MgZnJvbSBBbmRyb2lkLiBJ dCBoYXMgYmVlbiB1cGRhdGVkIHNldmVyYWwgdGltZXMgYWNyb3NzIHNldmVyYWwKPiA+PnBhdGNo ZXMuIFJhdGhlciB0aGFuIGF0dGVtcHQgdG8gcG9ydCBlYWNoIGluZGl2aWR1YWwgcGF0Y2gsIHRo aXMKPiA+PnZlcnNpb24gaXMgdGhlIGZpbmlzaGVkIHByb2R1Y3QgYXMgYSBzaW5nbGUgcGF0Y2gu IFRoZSB2YXJpb3VzCj4gPj5jb250cmlidXRvcnMvYXV0aG9ycyBhbG9uZyB0aGUgd2F5IChpbiBh ZGRpdGlvbiB0byBteXNlbGYpIHdlcmU6Cj4gPj4gICBTYXR5YW5hbnRoYSBSYW1hR29wYWwgTSA8 cmFtYS5nb3BhbC5tLnNhdHlhbmFudGhhQGludGVsLmNvbT4KPiA+PiAgIFR2cnRrbyBVcnN1bGlu IDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Cj4gPj4gICBNaWNoZWwgVGhpZXJyeSA8bWljaGVs LnRoaWVycnlAaW50ZWwuY29tPgo+ID4+ICAgQXJ1biBTaWx1dmVyeSA8YXJ1bi5zaWx1dmVyeUBs aW51eC5pbnRlbC5jb20+Cj4gPj4KPiA+PltuZXcgcGF0Y2ggaW4gc2VyaWVzXQo+ID4+Cj4gPj5G b3I6IFZJWi01MTkwCj4gPj5TaWduZWQtb2ZmLWJ5OiBKb2huIEhhcnJpc29uIDxKb2huLkMuSGFy cmlzb25ASW50ZWwuY29tPgo+ID4+LS0tCj4gPj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmggICAgICAgICAgICB8ICA2ICsrCj4gPj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtLmMgICAgICAgICAgICB8IDg0Cj4gPj4rKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4g Pj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYyB8IDkwCj4gPj4r KysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KPiA+PiAgaW5jbHVkZS91YXBpL2RybS9pOTE1 X2RybS5oICAgICAgICAgICAgICAgIHwgMTYgKysrKystCj4gPj4gIDQgZmlsZXMgY2hhbmdlZCwg MTg4IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCj4gPj4KPiA+PmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gPj5iL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmgKPiA+PmluZGV4IGQ3ZjFhYTUuLmNmNmI3Y2QgMTAwNjQ0Cj4gPj4tLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gPj4rKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5oCj4gPj5AQCAtMjE2OCw2ICsyMTY4LDcgQEAgc3RydWN0IGRybV9pOTE1 X2dlbV9yZXF1ZXN0IHsKPiA+PiAgICAgIHN0cnVjdCBsaXN0X2hlYWQgZGVsYXlfZnJlZV9saXN0 Owo+ID4+ICAgICAgYm9vbCBjYW5jZWxsZWQ7Cj4gPj4gICAgICBib29sIGlycV9lbmFibGVkOwo+ ID4+KyAgICBib29sIGZlbmNlX2V4dGVybmFsOwo+ID4+Cj4gPj4gICAgICAvKiogT24gV2hpY2gg cmluZyB0aGlzIHJlcXVlc3Qgd2FzIGdlbmVyYXRlZCAqLwo+ID4+ICAgICAgc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTU7Cj4gPj5AQCAtMjI1Miw2ICsyMjUzLDExIEBAIHZvaWQgaTkxNV9n ZW1fcmVxdWVzdF9ub3RpZnkoc3RydWN0Cj4gPj5pbnRlbF9lbmdpbmVfY3MgKnJpbmcpOwo+ID4+ ICBpbnQgaTkxNV9jcmVhdGVfZmVuY2VfdGltZWxpbmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK PiA+PiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHgsCj4gPj4g ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKTsKPiA+Pisj aWZkZWYgQ09ORklHX1NZTkMKPiA+PitzdHJ1Y3Qgc3luY19mZW5jZTsKPiA+PitpbnQgaTkxNV9j cmVhdGVfc3luY19mZW5jZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwgaW50Cj4g Pj4qZmVuY2VfZmQpOwo+ID4+K2Jvb2wgaTkxNV9zYWZlX3RvX2lnbm9yZV9mZW5jZShzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICpyaW5nLCBzdHJ1Y3QKPiA+PnN5bmNfZmVuY2UgKmZlbmNlKTsKPiA+ PisjZW5kaWYKPiA+Pgo+ID4+ICBzdGF0aWMgaW5saW5lIGJvb2wgaTkxNV9nZW1fcmVxdWVzdF9j b21wbGV0ZWQoc3RydWN0Cj4gPj5kcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQo+ID4+ICB7Cj4g Pj5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+ID4+Yi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gPj5pbmRleCAzZjIwMDg3Li5kZTkzNDIyIDEw MDY0NAo+ID4+LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+ID4+KysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+ID4+QEAgLTM3LDYgKzM3LDkgQEAKPiA+ PiAgI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KPiA+PiAgI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgo+ ID4+ICAjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgo+ID4+KyNpZmRlZiBDT05GSUdfU1lOQwo+ ID4+KyNpbmNsdWRlIDwuLi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zeW5jLmg+Cj4gPj4rI2Vu ZGlmCj4gPj4KPiA+PiAgI2RlZmluZSBSUV9CVUdfT04oZXhwcikKPiA+Pgo+ID4+QEAgLTI1NDks NiArMjU1MiwxNSBAQCB2b2lkIF9faTkxNV9hZGRfcmVxdWVzdChzdHJ1Y3QKPiA+PmRybV9pOTE1 X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0LAo+ID4+ICAgICAgICovCj4gPj4gICAgICBpOTE1X2dlbV9y ZXF1ZXN0X3N1Ym1pdChyZXF1ZXN0KTsKPiA+Pgo+ID4+KyAgICAvKgo+ID4+KyAgICAgKiBJZiBh biBleHRlcm5hbCBzeW5jIHBvaW50IGhhcyBiZWVuIHJlcXVlc3RlZCBmb3IgdGhpcyByZXF1ZXN0 Cj4gPj50aGVuCj4gPj4rICAgICAqIGl0IGNhbiBiZSB3YWl0ZWQgb24gd2l0aG91dCB0aGUgZHJp dmVyJ3Mga25vd2xlZGdlLCBpLmUuIHdpdGhvdXQKPiA+PisgICAgICogY2FsbGluZyBfX2k5MTVf d2FpdF9yZXF1ZXN0KCkuIFRodXMgaW50ZXJydXB0cyBtdXN0IGJlIGVuYWJsZWQKPiA+PisgICAg ICogZnJvbSB0aGUgc3RhcnQgcmF0aGVyIHRoYW4gb25seSBvbiBkZW1hbmQuCj4gPj4rICAgICAq Lwo+ID4+KyAgICBpZiAocmVxdWVzdC0+ZmVuY2VfZXh0ZXJuYWwpCj4gPj4rICAgICAgICBpOTE1 X2dlbV9yZXF1ZXN0X2VuYWJsZV9pbnRlcnJ1cHQocmVxdWVzdCk7Cj4gPgo+ID5NYXliZSB0aGVu IGZlbmNlX2V4cG9ydGVkIHdvdWxkIGJlIGNsZWFyZXIsIGZlbmNlX2V4dGVybmFsIGF0IGZpcnN0 IHNvdW5kcwo+ID5saWtlIGl0IGlzIGNvbWluZyBmcm9tIGFub3RoZXIgZHJpdmVyIG9yIHNvbWV0 aGluZy4KPiBUdXJucyBvdXQgaXQgaXMgbm90IG5lY2Vzc2FyeSBhbnl3YXkgYXMgbWVudGlvbmVk IGJlbG93Lgo+IAo+ID4+Kwo+ID4+ICAgICAgaWYgKGk5MTUuZW5hYmxlX2V4ZWNsaXN0cykKPiA+ PiAgICAgICAgICByZXQgPSByaW5nLT5lbWl0X3JlcXVlc3QocmVxdWVzdCk7Cj4gPj4gICAgICBl bHNlIHsKPiA+PkBAIC0yODU3LDYgKzI4NjksNzggQEAgc3RhdGljIHVpbnQzMl90Cj4gPj5pOTE1 X2ZlbmNlX3RpbWVsaW5lX2dldF9uZXh0X3NlcW5vKHN0cnVjdCBpOTE1X2ZlbmNlX3RpbWVsaW5l ICp0Cj4gPj4gICAgICByZXR1cm4gc2Vxbm87Cj4gPj4gIH0KPiA+Pgo+ID4+KyNpZmRlZiBDT05G SUdfU1lOQwo+ID4+K2ludCBpOTE1X2NyZWF0ZV9zeW5jX2ZlbmNlKHN0cnVjdCBkcm1faTkxNV9n ZW1fcmVxdWVzdCAqcmVxLCBpbnQKPiA+PipmZW5jZV9mZCkKPiA+Pit7Cj4gPj4rICAgIGNoYXIg cmluZ19uYW1lW10gPSAiaTkxNV9yaW5nMCI7Cj4gPj4rICAgIHN0cnVjdCBzeW5jX2ZlbmNlICpz eW5jX2ZlbmNlOwo+ID4+KyAgICBpbnQgZmQ7Cj4gPj4rCj4gPj4rICAgIGZkID0gZ2V0X3VudXNl ZF9mZF9mbGFncyhPX0NMT0VYRUMpOwo+ID4+KyAgICBpZiAoZmQgPCAwKSB7Cj4gPj4rICAgICAg ICBEUk1fREVCVUcoIk5vIGF2YWlsYWJsZSBmaWxlIGRlc2NyaXB0b3JzIVxuIik7Cj4gPj4rICAg ICAgICAqZmVuY2VfZmQgPSAtMTsKPiA+PisgICAgICAgIHJldHVybiBmZDsKPiA+PisgICAgfQo+ ID4+Kwo+ID4+KyAgICByaW5nX25hbWVbOV0gKz0gcmVxLT5yaW5nLT5pZDsKPiA+PisgICAgc3lu Y19mZW5jZSA9IHN5bmNfZmVuY2VfY3JlYXRlX2RtYShyaW5nX25hbWUsICZyZXEtPmZlbmNlKTsK PiA+Cj4gPlRoaXMgd2lsbCBjYWxsIC0+ZW5hYmxlX3NpZ25hbGxpbmcgc28gcGVyaGFwcyB5b3Ug Y291bGQgZW5hYmxlIGludGVycnVwdHMKPiA+aW4gdGhlcmUgZm9yIGV4cG9ydGVkIGZlbmNlcy4g TWF5YmUgaXQgd291bGQgYmUgYSB0aW55IGJpdCBtb3JlIGxvZ2ljYWxseQo+ID5ncm91cGVkLiAo UmF0aGVyIHRoYW4gaGF2ZSBfYWRkX3JlcXVlc3QgZG8gaXQuKQo+IAo+IFllYWgsIGhhZG4ndCBx dWl0ZSBzcG90dGVkIHRoaXMgZmlyc3QgdGltZSBhcm91bmQuIEl0IG5vdyBhbGwgaGFwcGVucwo+ ICdtYWdpY2FsbHknIHdpdGhvdXQgbmVlZGluZyBhbnkgZXhwbGljaXQgY29kZSAtIGp1c3Qgc29t ZSBleHBsaWNpdCBjb21tZW50cwo+IHRvIHNheSB0aGF0IHRoZSBiZWhpbmQgdGhlIHNjZW5lcyBt YWdpY2sgaXMgYSkgaGFwcGVuaW5nIGFuZCBiKSBuZWNlc3NhcnkuCj4gCj4gPgo+ID4+KyAgICBp ZiAoIXN5bmNfZmVuY2UpIHsKPiA+PisgICAgICAgIHB1dF91bnVzZWRfZmQoZmQpOwo+ID4+KyAg ICAgICAgKmZlbmNlX2ZkID0gLTE7Cj4gPj4rICAgICAgICByZXR1cm4gLUVOT01FTTsKPiA+Pisg ICAgfQo+ID4+Kwo+ID4+KyAgICBzeW5jX2ZlbmNlX2luc3RhbGwoc3luY19mZW5jZSwgZmQpOwo+ ID4+KyAgICAqZmVuY2VfZmQgPSBmZDsKPiA+PisKPiA+PisgICAgLy8gTmVjZXNzYXJ5Pz8/IFdo byBkb2VzIHRoZSBwdXQ/Pz8KPiA+PisgICAgZmVuY2VfZ2V0KCZyZXEtPmZlbmNlKTsKPiA+Cj4g PnN5bmNfZmVuY2VfcmVsZWFzZT8KPiBZZXMgYnV0IHdoZXJlPyBEb2VzIHRoZSBkcml2ZXIgbmVl ZCB0byBjYWxsIHRoaXM/IElzIGl0IHVzZXJsYW5kJ3MKPiByZXNwb25zaWJpbGl0eT8gRG9lcyBp dCBoYXBwZW4gYXV0b21hdGljYWxseSB3aGVuIHRoZSBmZCBpcyBjbG9zZWQ/IERvIHdlCj4gZXZl biBuZWVkIHRvIGRvIHRoZSBfZ2V0KCkgaW4gdGhlIGZpcnN0IHBsYWNlPyBJdCBzZWVtcyB0byBi ZSB3b3JraW5nIGluCj4gdGhhdCBJIGRvbid0IGdldCBhbnkgdW5leHBlY3RlZCBmcmVlIG9mIHRo ZSBmZW5jZSBhbmQgSSBkb24ndCBnZXQgaHVnZQo+IG51bWJlcnMgb2YgbGVha2VkIGZlbmNlcy4g SG93ZXZlciwgaXQgd291bGQgYmUgbmljZSB0byBrbm93IGhvdyBpdCBpcwo+IHdvcmtpbmchCj4g Cj4gPgo+ID4+Kwo+ID4+KyAgICByZXEtPmZlbmNlX2V4dGVybmFsID0gdHJ1ZTsKPiA+PisKPiA+ PisgICAgcmV0dXJuIDA7Cj4gPj4rfQo+ID4+Kwo+ID4+K2Jvb2wgaTkxNV9zYWZlX3RvX2lnbm9y ZV9mZW5jZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLCBzdHJ1Y3QKPiA+PnN5bmNfZmVu Y2UgKnN5bmNfZmVuY2UpCj4gPj4rewo+ID4+KyAgICBzdHJ1Y3QgZmVuY2UgKmRtYV9mZW5jZTsK PiA+PisgICAgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXE7Cj4gPj4rICAgIGJvb2wg aWdub3JlOwo+ID4+KyAgICBpbnQgaTsKPiA+PisKPiA+PisgICAgaWYgKGF0b21pY19yZWFkKCZz eW5jX2ZlbmNlLT5zdGF0dXMpICE9IDApCj4gPj4rICAgICAgICByZXR1cm4gdHJ1ZTsKPiA+PisK PiA+PisgICAgaWdub3JlID0gdHJ1ZTsKPiA+PisgICAgZm9yKGkgPSAwOyBpIDwgc3luY19mZW5j ZS0+bnVtX2ZlbmNlczsgaSsrKSB7Cj4gPj4rICAgICAgICBkbWFfZmVuY2UgPSBzeW5jX2ZlbmNl LT5jYnNbaV0uc3luY19wdDsKPiA+PisKPiA+PisgICAgICAgIC8qIE5vIG5lZWQgdG8gd29ycnkg YWJvdXQgZGVhZCBwb2ludHM6ICovCj4gPj4rICAgICAgICBpZiAoZmVuY2VfaXNfc2lnbmFsZWQo ZG1hX2ZlbmNlKSkKPiA+PisgICAgICAgICAgICBjb250aW51ZTsKPiA+PisKPiA+PisgICAgICAg IC8qIENhbid0IGlnbm9yZSBvdGhlciBwZW9wbGUncyBwb2ludHM6ICovCj4gPj4rICAgICAgICBp ZihkbWFfZmVuY2UtPm9wcyAhPSAmaTkxNV9nZW1fcmVxdWVzdF9mb3BzKSB7Cj4gPj4rICAgICAg ICAgICAgaWdub3JlID0gZmFsc2U7Cj4gPj4rICAgICAgICAgICAgYnJlYWs7Cj4gPgo+ID5UaGUg c2FtZSBhcyByZXR1cm4gZmFsc2UgYW5kIHRoZW4gZG9uJ3QgbmVlZCBib29sIGlnbm9yZSBhdCBh bGwuCj4gWWVhaCwgbGVmdCBvdmVyIGZyb20gd2hlbiB0aGVyZSB3YXMgY2xlYW51cCB0byBiZSBk b25lIGF0IGZ1bmN0aW9uIGV4aXQKPiB0aW1lLiBUaGUgY2xlYW51cCBjb2RlIHJlbW92ZWQgYnV0 IHRoZSBzaW5nbGUgZXhpdCBwb2ludCBkaWQgbm90Lgo+IAo+ID4KPiA+PisgICAgICAgIH0KPiA+ PisKPiA+PisgICAgICAgIHJlcSA9IGNvbnRhaW5lcl9vZihkbWFfZmVuY2UsIHR5cGVvZigqcmVx KSwgZmVuY2UpOwo+ID4+Kwo+ID4+KyAgICAgICAgLyogQ2FuJ3QgaWdub3JlIHBvaW50cyBvbiBv dGhlciByaW5nczogKi8KPiA+PisgICAgICAgIGlmIChyZXEtPnJpbmcgIT0gcmluZykgewo+ID4+ KyAgICAgICAgICAgIGlnbm9yZSA9IGZhbHNlOwo+ID4+KyAgICAgICAgICAgIGJyZWFrOwo+ID4+ KyAgICAgICAgfQo+ID4+Kwo+ID4+KyAgICAgICAgLyogU2FtZSByaW5nIG1lYW5zIGd1YXJhbnRl ZWQgdG8gYmUgaW4gb3JkZXIgc28gaWdub3JlIGl0LiAqLwo+ID4+KyAgICB9Cj4gPj4rCj4gPj4r ICAgIHJldHVybiBpZ25vcmU7Cj4gPj4rfQo+ID4+KyNlbmRpZgo+ID4+Kwo+ID4+ICBpbnQgaTkx NV9nZW1fcmVxdWVzdF9hbGxvYyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+ID4+ICAg ICAgICAgICAgICAgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4LAo+ID4+ICAgICAgICAgICAg ICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKipyZXFfb3V0KQo+ID4+ZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwo+ID4+Yi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKPiA+PmluZGV4IDkyM2EzYzQu LmIxYTE2NTkgMTAwNjQ0Cj4gPj4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9l eGVjYnVmZmVyLmMKPiA+PisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNi dWZmZXIuYwo+ID4+QEAgLTI2LDYgKzI2LDcgQEAKPiA+PiAgICoKPiA+PiAgICovCj4gPj4KPiA+ PisjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KPiA+PiAgI2luY2x1ZGUgPGRybS9kcm1QLmg+ Cj4gPj4gICNpbmNsdWRlIDxkcm0vaTkxNV9kcm0uaD4KPiA+PiAgI2luY2x1ZGUgImk5MTVfZHJ2 LmgiCj4gPj5AQCAtMzMsNiArMzQsOSBAQAo+ID4+ICAjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCj4g Pj4gICNpbmNsdWRlIDxsaW51eC9kbWFfcmVtYXBwaW5nLmg+Cj4gPj4gICNpbmNsdWRlIDxsaW51 eC91YWNjZXNzLmg+Cj4gPj4rI2lmZGVmIENPTkZJR19TWU5DCj4gPj4rI2luY2x1ZGUgPC4uL2Ry aXZlcnMvc3RhZ2luZy9hbmRyb2lkL3N5bmMuaD4KPiA+PisjZW5kaWYKPiA+Pgo+ID4+ICAjZGVm aW5lICBfX0VYRUNfT0JKRUNUX0hBU19QSU4gKDE8PDMxKQo+ID4+ICAjZGVmaW5lICBfX0VYRUNf T0JKRUNUX0hBU19GRU5DRSAoMTw8MzApCj4gPj5AQCAtMTQwMyw2ICsxNDA3LDM1IEBAIGViX2dl dF9iYXRjaChzdHJ1Y3QgZWJfdm1hcyAqZWIpCj4gPj4gICAgICByZXR1cm4gdm1hLT5vYmo7Cj4g Pj4gIH0KPiA+Pgo+ID4+KyNpZmRlZiBDT05GSUdfU1lOQwo+ID4KPiA+SSBkb24ndCBleHBlY3Qg eW91J2xsIGJlIGFibGUgdG8gZ2V0IGF3YXkgd2l0aCBpZmRlZidzIGluIHRoZSBjb2RlIGxpa2UK PiA+dGhpcyBzbyBmb3Igbm9uLVJGQyBpdCB3aWxsIGhhdmUgdG8gYmUgY2xlYW5lZCB1cC4KPiAK PiBOb3QgYSBsb3Qgb2YgY2hvaWNlIGF0IHRoZSBtb21lbnQuIFRoZSBzeW5jXyogY29kZSBpcyBh bGwgI2lmZGVmIENPTkZJR19TWU5DCj4gc28gYW55IGNvZGUgdGhhdCByZWZlcmVuY2VzIGl0IG11 c3QgYmUgbGlrZXdpc2UuIEFzIHRvIGhvdyB3ZSBnZXQgdGhlCj4gQ09ORklHX1NZTkMgdGFnIHJl bW92ZWQsIHRoYXQgaXMgYW5vdGhlciBkaXNjdXNzaW9uLi4uCgpEZXN0YWdpbmcgdGhlIHN5bmMg c3R1ZmYgaXMgcGFydCBvZiB0aGUgbWVyZ2UgY3JpdGVyaWEgZm9yIHRoaXMgZmVhdHVyZS4KU28g eWVhaCwgYWxsIHRoZSAjaWZkZWZlcnkgaGFzIHRvIGdvIGFuZCBiZSByZXBsYWNlIGJ5IGEgc2Vs ZWN0IEZFTkNFIG9yCndoYXRldmVyIGluIHRoZSBpOTE1IEtjb25maWcuCgo+ID4+K3N0YXRpYyBp bnQgaTkxNV9lYXJseV9mZW5jZV93YWl0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsIGlu dAo+ID4+ZmVuY2VfZmQpCj4gPj4rewo+ID4+KyAgICBzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2U7 Cj4gPj4rICAgIGludCByZXQgPSAwOwo+ID4+Kwo+ID4+KyAgICBpZiAoZmVuY2VfZmQgPCAwKSB7 Cj4gPj4rICAgICAgICBEUk1fRVJST1IoIkludmFsaWQgd2FpdCBmZW5jZSBmZCAlZCBvbiByaW5n ICVkXG4iLCBmZW5jZV9mZCwKPiA+PisgICAgICAgICAgICAgIChpbnQpIHJpbmctPmlkKTsKPiA+ PisgICAgICAgIHJldHVybiAxOwo+ID4+KyAgICB9Cj4gPj4rCj4gPj4rICAgIGZlbmNlID0gc3lu Y19mZW5jZV9mZGdldChmZW5jZV9mZCk7Cj4gPj4rICAgIGlmIChmZW5jZSA9PSBOVUxMKSB7Cj4g Pj4rICAgICAgICBEUk1fRVJST1IoIkludmFsaWQgd2FpdCBmZW5jZSAlZCBvbiByaW5nICVkXG4i LCBmZW5jZV9mZCwKPiA+PisgICAgICAgICAgICAgIChpbnQpIHJpbmctPmlkKTsKPiA+Cj4gPlRo ZXNlIHR3byBzaG91bGQgYmUgRFJNX0RFQlVHIHRvIHByZXZlbnQgdXNlcnNwYWNlIGZyb20gc3Bh bW1pbmcgdGhlIGxvZ3MKPiA+dG9vIGVhc2lseS4KPiA+Cj4gPj4rICAgICAgICByZXR1cm4gMTsK PiA+PisgICAgfQo+ID4+Kwo+ID4+KyAgICBpZiAoYXRvbWljX3JlYWQoJmZlbmNlLT5zdGF0dXMp ID09IDApIHsKPiA+PisgICAgICAgIGlmICghaTkxNV9zYWZlX3RvX2lnbm9yZV9mZW5jZShyaW5n LCBmZW5jZSkpCj4gPj4rICAgICAgICAgICAgcmV0ID0gc3luY19mZW5jZV93YWl0KGZlbmNlLCAx MDAwKTsKPiA+Cj4gPkkgZXhwZWN0IHlvdSBoYXZlIHRvIHdhaXQgaW5kZWZpbml0ZWx5IGhlcmUs IG5vdCBqdXN0IGZvciBvbmUgc2Vjb25kLgo+IENhdXNpbmcgdGhlIGRyaXZlciB0byB3YWl0IGlu ZGVmaW5pdGVseSB1bmRlciB1c2VybGFuZCBjb250cm9sIGlzIHN1cmVseSBhCj4gQmFkIFRoaW5n KHRtKT8gT2theSwgdGhpcyBpcyBkb25lIGJlZm9yZSBhY3F1aXJpbmcgdGhlIG11dGV4IGxvY2sg YW5kCj4gcHJlc3VtYWJseSB0aGUgd2FpdCBjYW4gYmUgaW50ZXJydXB0ZWQsIGUuZy4gaWYgdGhl IHVzZXIgbGFuZCBwcm9jZXNzIGdldHMgYQo+IEtJTEwgc2lnbmFsLiBJdCBzdGlsbCBzZWVtcyBh IGJhZCBpZGVhIHRvIHdhaXQgZm9yZXZlci4gVmFyaW91cyBiaXRzIG9mCj4gQW5kcm9pZCBnZW5l cmFsbHkgdXNlIGEgdGltZW91dCBvZiBlaXRoZXIgMXMgb3IgM3MuCj4gCj4gRGFuaWVsIG9yIGFu eW9uZSBlbHNlLCBhbnkgdmlld3Mgb2YgZHJpdmVyIHRpbWUgb3V0cz8KCldhaXQgZm9yZXZlciwg YnV0IGludGVycnVwdGlibHkuIEhhdmUgYW4gaWd0IHRvIGV4ZXJjaXNlIHRoZSBkZWFkbG9jayBj YXNlCmFuZCBtYWtlIHN1cmUgZ3B1IHJlc2V0IGNhbiByZWNvdmVyLgoKPiA+Cj4gPj4rICAgIH0K PiA+PisKPiA+PisgICAgc3luY19mZW5jZV9wdXQoZmVuY2UpOwo+ID4+KyAgICByZXR1cm4gcmV0 Owo+ID4+K30KPiA+PisjZW5kaWYKPiA+PisKPiA+PiAgc3RhdGljIGludAo+ID4+ICBpOTE1X2dl bV9kb19leGVjYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gPj4g ICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKPiA+PkBAIC0xNDIyLDYgKzE0 NTUsMTggQEAgaTkxNV9nZW1fZG9fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ ID4+dm9pZCAqZGF0YSwKPiA+PiAgICAgIHUzMiBkaXNwYXRjaF9mbGFnczsKPiA+PiAgICAgIGlu dCByZXQ7Cj4gPj4gICAgICBib29sIG5lZWRfcmVsb2NzOwo+ID4+KyAgICBpbnQgZmRfZmVuY2Vf Y29tcGxldGUgPSAtMTsKPiA+PisjaWZkZWYgQ09ORklHX1NZTkMKPiA+PisgICAgaW50IGZkX2Zl bmNlX3dhaXQgPSBsb3dlcl8zMl9iaXRzKGFyZ3MtPnJzdmQyKTsKPiA+PisjZW5kaWYKPiA+PisK PiA+PisgICAgLyoKPiA+PisgICAgICogTWFrZSBzdXJlIGFuIGJyb2tlbiBmZW5jZSBoYW5kbGUg aXMgbm90IHJldHVybmVkIG5vIG1hdHRlcgo+ID4+KyAgICAgKiBob3cgZWFybHkgYW4gZXJyb3Ig bWlnaHQgYmUgaGl0LiBOb3RlIHRoYXQgcnN2ZDIgaGFzIHRvIGJlCj4gPj4rICAgICAqIHNhdmVk IGF3YXkgZmlyc3QgYmVjYXVzZSBpdCBpcyBhbHNvIGFuIGlucHV0IHBhcmFtZXRlciEKPiA+Pisg ICAgICovCj4gPj4rICAgIGlmIChhcmdzLT5mbGFncyAmIEk5MTVfRVhFQ19DUkVBVEVfRkVOQ0Up Cj4gPj4rICAgICAgICBhcmdzLT5yc3ZkMiA9IChfX3U2NCkgLTE7Cj4gPj4KPiA+PiAgICAgIGlm ICghaTkxNV9nZW1fY2hlY2tfZXhlY2J1ZmZlcihhcmdzKSkKPiA+PiAgICAgICAgICByZXR1cm4g LUVJTlZBTDsKPiA+PkBAIC0xNTA1LDYgKzE1NTAsMTkgQEAgaTkxNV9nZW1fZG9fZXhlY2J1ZmZl cihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4+dm9pZCAqZGF0YSwKPiA+PiAgICAgICAgICBk aXNwYXRjaF9mbGFncyB8PSBJOTE1X0RJU1BBVENIX1JTOwo+ID4+ICAgICAgfQo+ID4+Cj4gPj4r I2lmZGVmIENPTkZJR19TWU5DCj4gPj4rICAgIC8qCj4gPj4rICAgICAqIFdpdGhvdXQgYSBHUFUg c2NoZWR1bGVyLCBhbnkgZmVuY2Ugd2FpdHMgbXVzdCBiZSBkb25lIHVwIGZyb250Lgo+ID4+KyAg ICAgKi8KPiA+PisgICAgaWYgKGFyZ3MtPmZsYWdzICYgSTkxNV9FWEVDX1dBSVRfRkVOQ0UpIHsK PiA+PisgICAgICAgIHJldCA9IGk5MTVfZWFybHlfZmVuY2Vfd2FpdChyaW5nLCBmZF9mZW5jZV93 YWl0KTsKPiA+PisgICAgICAgIGlmIChyZXQgPCAwKQo+ID4+KyAgICAgICAgICAgIHJldHVybiBy ZXQ7Cj4gPj4rCj4gPj4rICAgICAgICBhcmdzLT5mbGFncyAmPSB+STkxNV9FWEVDX1dBSVRfRkVO Q0U7Cj4gPj4rICAgIH0KPiA+PisjZW5kaWYKPiA+PisKPiA+PiAgICAgIGludGVsX3J1bnRpbWVf cG1fZ2V0KGRldl9wcml2KTsKPiA+Pgo+ID4+ICAgICAgcmV0ID0gaTkxNV9tdXRleF9sb2NrX2lu dGVycnVwdGlibGUoZGV2KTsKPiA+PkBAIC0xNjUyLDYgKzE3MTAsMjcgQEAgaTkxNV9nZW1fZG9f ZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4+dm9pZCAqZGF0YSwKPiA+PiAg ICAgIHBhcmFtcy0+YmF0Y2hfb2JqICAgICAgICAgICAgICAgPSBiYXRjaF9vYmo7Cj4gPj4gICAg ICBwYXJhbXMtPmN0eCAgICAgICAgICAgICAgICAgICAgID0gY3R4Owo+ID4+Cj4gPj4rI2lmZGVm IENPTkZJR19TWU5DCj4gPj4rICAgIGlmIChhcmdzLT5mbGFncyAmIEk5MTVfRVhFQ19DUkVBVEVf RkVOQ0UpIHsKPiA+PisgICAgICAgIC8qCj4gPj4rICAgICAgICAgKiBDYWxsZXIgaGFzIHJlcXVl c3RlZCBhIHN5bmMgZmVuY2UuCj4gPj4rICAgICAgICAgKiBVc2VyIGludGVycnVwdHMgd2lsbCBi ZSBlbmFibGVkIHRvIG1ha2Ugc3VyZSB0aGF0Cj4gPj4rICAgICAgICAgKiB0aGUgdGltZWxpbmUg aXMgc2lnbmFsbGVkIG9uIGNvbXBsZXRpb24uCj4gPj4rICAgICAgICAgKi8KPiA+PisgICAgICAg IHJldCA9IGk5MTVfY3JlYXRlX3N5bmNfZmVuY2UocGFyYW1zLT5yZXF1ZXN0LAo+ID4+KyAgICAg ICAgICAgICAgICAgICAgICAgICAmZmRfZmVuY2VfY29tcGxldGUpOwo+ID4+KyAgICAgICAgaWYg KHJldCkgewo+ID4+KyAgICAgICAgICAgIERSTV9FUlJPUigiRmVuY2UgY3JlYXRpb24gZmFpbGVk IGZvciByaW5nICVkLCBjdHggJXBcbiIsCj4gPj4rICAgICAgICAgICAgICAgICAgcmluZy0+aWQs IGN0eCk7Cj4gPj4rICAgICAgICAgICAgYXJncy0+cnN2ZDIgPSAoX191NjQpIC0xOwo+ID4+KyAg ICAgICAgICAgIGdvdG8gZXJyOwo+ID4+KyAgICAgICAgfQo+ID4+Kwo+ID4+KyAgICAgICAgLyog UmV0dXJuIHRoZSBmZW5jZSB0aHJvdWdoIHRoZSByc3ZkMiBmaWVsZCAqLwo+ID4+KyAgICAgICAg YXJncy0+cnN2ZDIgPSAoX191NjQpIGZkX2ZlbmNlX2NvbXBsZXRlOwo+ID4+KyAgICB9Cj4gPj4r I2VuZGlmCj4gPj4rCj4gPj4gICAgICByZXQgPSBkZXZfcHJpdi0+Z3QuZXhlY2J1Zl9zdWJtaXQo cGFyYW1zLCBhcmdzLCAmZWItPnZtYXMpOwo+ID4+Cj4gPj4gIGVycl9iYXRjaF91bnBpbjoKPiA+ PkBAIC0xNjgzLDYgKzE3NjIsMTIgQEAgcHJlX211dGV4X2VycjoKPiA+PiAgICAgIC8qIGludGVs X2dwdV9idXN5IHNob3VsZCBhbHNvIGdldCBhIHJlZiwgc28gaXQgd2lsbCBmcmVlIHdoZW4gdGhl Cj4gPj5kZXZpY2UKPiA+PiAgICAgICAqIGlzIHJlYWxseSBpZGxlLiAqLwo+ID4+ICAgICAgaW50 ZWxfcnVudGltZV9wbV9wdXQoZGV2X3ByaXYpOwo+ID4+Kwo+ID4+KyAgICBpZiAoZmRfZmVuY2Vf Y29tcGxldGUgIT0gLTEpIHsKPiA+PisgICAgICAgIHN5c19jbG9zZShmZF9mZW5jZV9jb21wbGV0 ZSk7Cj4gPgo+ID5JIGFtIG5vdCBzdXJlIGNhbGxpbmcgc3lzdGVtIGNhbGwgZnVuY3Rpb25zIGZy b20gZHJpdmVyIGNvZGUgd2lsbCBiZQo+ID5hbGxvd2VkLiB0aGF0J3Mgd2h5IEkgd2FzIGRvaW5n IGZkX2luc3RhbGwgb25seSB3aGVuIHN1cmUgZXZlcnl0aGluZyB3ZW50Cj4gPk9LLgo+IAo+IERh bmllbCBvciBvdGhlcnMsIGFueSB0aG91Z2h0cz8gSXMgdGhlIGNsZWFuIHVwIGFsbG93ZWQgaW4g dGhlIGRyaXZlcj8gSXMKPiB0aGVyZSBhbiBhbHRlcm5hdGl2ZSBkcml2ZXIgZnJpZW5kbHkgb3B0 aW9uPyBJdCBtYWtlcyB0aGUgc3luYyBjcmVhdGluZyBjb2RlCj4gY2xlYW5lciBpZiB3ZSBjYW4g ZG8gZXZlcnl0aGluZyBpbiBvbmUgcGxhY2UgcmF0aGVyIHRoYW4gZG8gc29tZSBwcm9jZXNzaW5n Cj4gdXAgZnJvbnQgYW5kIHNvbWUgYXQgdGhlIGVuZC4KCllvdSBkb24ndCBnZXQgdG8gZG8gdGhp cyA7LSkgRml4IGl0IGJ5IG9ubHkgaW5zdGFsbGluZyB0aGUgZmQgaWYKZXZlcnl0aGluZyBoYXMg c3VjY2VlZGVkLgotRGFuaWVsCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJ bnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVs LWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=