From mboxrd@z Thu Jan 1 00:00:00 1970 From: John Harrison Subject: Re: [PATCH v2 11/28] drm/i915: Add IRQ friendly request deference facility Date: Wed, 19 Nov 2014 12:25:36 +0000 Message-ID: <546C8C40.5090503@Intel.com> References: <1415967559-17074-1-git-send-email-John.C.Harrison@Intel.com> <1415967559-17074-12-git-send-email-John.C.Harrison@Intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id A5CE56E728 for ; Wed, 19 Nov 2014 04:25:53 -0800 (PST) In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "Daniel, Thomas" , "Intel-GFX@Lists.FreeDesktop.Org" List-Id: intel-gfx@lists.freedesktop.org T24gMTgvMTEvMjAxNCAwOTozNCwgRGFuaWVsLCBUaG9tYXMgd3JvdGU6Cj4+IC0tLS0tT3JpZ2lu YWwgTWVzc2FnZS0tLS0tCj4+IEZyb206IEludGVsLWdmeCBbbWFpbHRvOmludGVsLWdmeC1ib3Vu Y2VzQGxpc3RzLmZyZWVkZXNrdG9wLm9yZ10gT24gQmVoYWxmCj4+IE9mIEpvaG4uQy5IYXJyaXNv bkBJbnRlbC5jb20KPj4gU2VudDogRnJpZGF5LCBOb3ZlbWJlciAxNCwgMjAxNCAxMjoxOSBQTQo+ PiBUbzogSW50ZWwtR0ZYQExpc3RzLkZyZWVEZXNrdG9wLk9yZwo+PiBTdWJqZWN0OiBbSW50ZWwt Z2Z4XSBbUEFUQ0ggdjIgMTEvMjhdIGRybS9pOTE1OiBBZGQgSVJRIGZyaWVuZGx5IHJlcXVlc3QK Pj4gZGVmZXJlbmNlIGZhY2lsaXR5Cj4+Cj4+IEZyb206IEpvaG4gSGFycmlzb24gPEpvaG4uQy5I YXJyaXNvbkBJbnRlbC5jb20+Cj4+Cj4+IFRoZSBuZXh0IHBhdGNoZXMgaW4gdGhlIHNlcmllcyBj b252ZXJ0IHNvbWUgZGlzcGxheSByZWxhdGVkIHNlcW5vIHVzYWdlIHRvCj4+IHJlcXVlc3Qgc3Ry dWN0dXJlIHVzYWdlLiBIb3dldmVyLCB0aGUgcmVxdWVzdCBkZXJlZmVyZW5jZSBpbnRyb2R1Y2Vk Cj4+IG11c3QgYmUgZG9uZSBmcm9tIGludGVycnVwdCBjb250ZXh0LiBBcyB0aGUgZGVyZWZlcmVu Y2UgcG90ZW50aWFsbHkKPj4gaW52b2x2ZXMgZnJlZWluZyB0aGUgcmVxdWVzdCBzdHJ1Y3R1cmUg YW5kIHRodXMgY2FsbGluZyBsb3RzIG9mIG5vbi1pbnRlcnJ1cHQKPj4gZnJpZW5kbHkgY29kZSwg dGhpcyBwb3NlcyBhIHByb2JsZW0uCj4+Cj4+IFRoZSBzb2x1dGlvbiBpcyB0byBhZGQgYW4gSVJR IGZyaWVuZGx5IHZlcnNpb24gb2YgdGhlIGRlcmVmZXJlbmNlIGZ1bmN0aW9uLiBBbGwKPj4gdGhp cyBkb2VzIGlzIHRvIGFkZCB0aGUgcmVxdWVzdCBzdHJ1Y3R1cmUgdG8gYSAnZGVsYXllZCBmcmVl JyBsaXN0IGFuZCByZXR1cm4uCj4+IFRoZSByZXRpcmUgY29kZSwgd2hpY2ggaXMgcnVuIHBlcmlv ZGljYWxseSwgdGhlbiBwcm9jZXNzZXMgdGhpcyBsaXN0IGFuZCBkb2VzCj4+IHRoZSBhY3R1YWwg ZGVyZWZlcmVuY2luZyBvZiB0aGUgcmVxdWVzdCBzdHJ1Y3R1cmVzLgo+Pgo+PiB2MjogQWRkZWQg YSBjb3VudCB0byBhbGxvdyBmb3IgbXVsdGlwbGUgSVJRIGRlcmVmZXJlbmNlcyBvZiB0aGUgc2Ft ZQo+PiByZXF1ZXN0IGF0IGEgdGltZS4KPj4KPj4gRm9yOiBWSVotNDM3Nwo+PiBTaWduZWQtb2Zm LWJ5OiBKb2huIEhhcnJpc29uIDxKb2huLkMuSGFycmlzb25ASW50ZWwuY29tPgo+PiAtLS0KPj4g ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAgfCAgICA3ICsrKysrKysK Pj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAgICAgfCAgIDMzCj4+ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9scmMuYyAgICAgICAgfCAgICAyICsrCj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfcmluZ2J1ZmZlci5jIHwgICAgMyArKysKPj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9yaW5nYnVmZmVyLmggfCAgICAyICsrCj4+ICAgNSBmaWxlcyBjaGFuZ2VkLCA0NyBpbnNlcnRp b25zKCspCj4+Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5o Cj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBpbmRleCAxODBiNjc0Li44N2Ni MzU1IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPj4gQEAgLTIwMTksNiArMjAxOSwx MCBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3Qgewo+PiAgIAlzdHJ1Y3QgZHJtX2k5MTVf ZmlsZV9wcml2YXRlICpmaWxlX3ByaXY7Cj4+ICAgCS8qKiBmaWxlX3ByaXYgbGlzdCBlbnRyeSBm b3IgdGhpcyByZXF1ZXN0ICovCj4+ICAgCXN0cnVjdCBsaXN0X2hlYWQgY2xpZW50X2xpc3Q7Cj4+ ICsKPj4gKwkvKiogZGVmZXJyZWQgZnJlZSBsaXN0IGZvciBkZXJlZmVyZW5jaW5nIGZyb20gSVJR IGNvbnRleHQgKi8KPj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIGRlbGF5X2ZyZWVfbGlzdDsKPj4gKwl1 aW50MzJfdCBkZWxheV9mcmVlX2NvdW50Owo+PiAgIH07Cj4+Cj4+ICAgdm9pZCBpOTE1X2dlbV9y ZXF1ZXN0X2ZyZWUoc3RydWN0IGtyZWYgKnJlcV9yZWYpOyBAQCAtMjA0NCw5ICsyMDQ4LDEyCj4+ IEBAIGk5MTVfZ2VtX3JlcXVlc3RfcmVmZXJlbmNlKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVz dCAqcmVxKQo+PiBzdGF0aWMgaW5saW5lIHZvaWQgIGk5MTVfZ2VtX3JlcXVlc3RfdW5yZWZlcmVu Y2Uoc3RydWN0Cj4+IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpICB7Cj4+ICsJV0FSTl9PTigh bXV0ZXhfaXNfbG9ja2VkKCZyZXEtPnJpbmctPmRldi0+c3RydWN0X211dGV4KSk7Cj4+ICAgCWty ZWZfcHV0KCZyZXEtPnJlZiwgaTkxNV9nZW1fcmVxdWVzdF9mcmVlKTsgIH0KPj4KPj4gK3ZvaWQg aTkxNV9nZW1fcmVxdWVzdF91bnJlZmVyZW5jZV9pcnEoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1 ZXN0Cj4+ICsqcmVxKTsKPj4gKwo+PiAgIHN0YXRpYyBpbmxpbmUgdm9pZCBpOTE1X2dlbV9yZXF1 ZXN0X2Fzc2lnbihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QKPj4gKipwZHN0LAo+PiAgIAkJ CQkJICAgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpzcmMpCj4+IHsgZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbS5jIGluZGV4IDYwZTVlZWMuLjg0NTNiYmQgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW0uYwo+PiBAQCAtMjcyMiw2ICsyNzIyLDE5IEBAIHZvaWQgaTkxNV9nZW1fcmVzZXQo c3RydWN0IGRybV9kZXZpY2UgKmRldikKPj4gICAJaTkxNV9nZW1fcmVzdG9yZV9mZW5jZXMoZGV2 KTsKPj4gICB9Cj4+Cj4+ICt2b2lkIGk5MTVfZ2VtX3JlcXVlc3RfdW5yZWZlcmVuY2VfaXJxKHN0 cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdAo+PiAqcmVxKQo+PiArewo+PiArCXN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKnJpbmcgPSByZXEtPnJpbmc7Cj4+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsK Pj4gKwo+PiArCS8qIE5lZWQgdG8gYWRkIHRoZSByZXEgdG8gYSBkZWZlcnJlZCBkZXJlZmVyZW5j ZSBsaXN0IHRvIGJlCj4+IHByb2Nlc3NlZAo+PiArCSAqIG91dHNpZGUgb2YgaW50ZXJydXB0IHRp bWUgKi8KPj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmluZy0+cmVxbGlzdF9sb2NrLCBmbGFncyk7 Cj4+ICsJaWYgKHJlcS0+ZGVsYXlfZnJlZV9jb3VudCsrID09IDApCj4+ICsJCWxpc3RfYWRkX3Rh aWwoJnJlcS0+ZGVsYXlfZnJlZV9saXN0LCAmcmluZy0KPj4+IGRlbGF5ZWRfZnJlZV9saXN0KTsK Pj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyaW5nLT5yZXFsaXN0X2xvY2ssIGZsYWdzKTsg fQo+PiArCj4+ICAgLyoqCj4+ICAgICogVGhpcyBmdW5jdGlvbiBjbGVhcnMgdGhlIHJlcXVlc3Qg bGlzdCBhcyBzZXF1ZW5jZSBudW1iZXJzIGFyZSBwYXNzZWQuCj4+ICAgICovCj4+IEBAIC0yNzk2 LDYgKzI4MDksMjUgQEAgaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzX3Jpbmcoc3RydWN0Cj4+IGlu dGVsX2VuZ2luZV9jcyAqcmluZykKPj4gICAJCXJpbmctPnRyYWNlX2lycV9zZXFubyA9IDA7Cj4+ ICAgCX0KPj4KPj4gKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnJpbmctPmRlbGF5ZWRfZnJlZV9saXN0 KSkgewo+PiArCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3Q7Cj4+ICsJCXVu c2lnbmVkIGxvbmcgZmxhZ3M7Cj4+ICsJCXVpbnQzMl90IGNvdW50Owo+PiArCj4+ICsJCXJlcXVl c3QgPSBsaXN0X2ZpcnN0X2VudHJ5KCZyaW5nLT5kZWxheWVkX2ZyZWVfbGlzdCwKPj4gKwkJCQkJ ICAgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0LAo+PiArCQkJCQkgICBkZWxheV9mcmVlX2xp c3QpOwo+PiArCj4+ICsJCXNwaW5fbG9ja19pcnFzYXZlKCZyZXF1ZXN0LT5yaW5nLT5yZXFsaXN0 X2xvY2ssIGZsYWdzKTsKPj4gKwkJbGlzdF9kZWwoJnJlcXVlc3QtPmRlbGF5X2ZyZWVfbGlzdCk7 Cj4+ICsJCWNvdW50ID0gcmVxdWVzdC0+ZGVsYXlfZnJlZV9jb3VudDsKPj4gKwkJcmVxdWVzdC0+ ZGVsYXlfZnJlZV9jb3VudCA9IDA7Cj4+ICsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJlcXVl c3QtPnJpbmctPnJlcWxpc3RfbG9jaywgZmxhZ3MpOwo+PiArCj4+ICsJCXdoaWxlIChjb3VudC0t ID4gMCkKPj4gKwkJCWk5MTVfZ2VtX3JlcXVlc3RfdW5yZWZlcmVuY2UocmVxdWVzdCk7Cj4+ICsJ fQo+PiArCj4+ICAgCVdBUk5fT04oaTkxNV92ZXJpZnlfbGlzdHMocmluZy0+ZGV2KSk7Cj4+ICAg fQo+Pgo+PiBAQCAtNTA1NSw2ICs1MDg3LDcgQEAgaW5pdF9yaW5nX2xpc3RzKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKnJpbmcpICB7Cj4+ICAgCUlOSVRfTElTVF9IRUFEKCZyaW5nLT5hY3RpdmVf bGlzdCk7Cj4+ICAgCUlOSVRfTElTVF9IRUFEKCZyaW5nLT5yZXF1ZXN0X2xpc3QpOwo+PiArCUlO SVRfTElTVF9IRUFEKCZyaW5nLT5kZWxheWVkX2ZyZWVfbGlzdCk7Cj4gU2FtZSBjb21tZW50IGFz IGJlZm9yZSAtIG11bHRpcGxlIGluaXQgcG9pbnRzIGZvciB0aGlzIGxpc3QuCj4KPiBUaG9tYXMu ClNhbWUgcmVwbHkgYXMgYmVmb3JlOiB0aGUgZnVuY3Rpb24gYWxyZWFkeSBleGlzdHMgYW5kIGlz IGFscmVhZHkgCmluaXRpYWxpc2luZyBvdGhlciBsaXN0cyB0aGVyZWZvcmUgaXQgc2VlbXMgc2Vu c2libGUgdG8gaW5pdGlhbGlzZSB0aGUgCm5ldyBsaXN0IGFzIHdlbGwuIFdoZXRoZXIgdGhlIGZ1 bmN0aW9uIGFzIGEgd2hvbGUgaXMgcmVkdW5kYW50IG9yIG5vdCBpcyAKdW5jbGVhci4gVGhlIHNh bWUgZHVwbGljYXRlZCBpbml0aWFsaXNhdGlvbiBhbHNvIGhhcHBlbnMgaW4gCmludGVsX3JlbmRl cl9yaW5nX2luaXRfZHJpKCkuIElmIHNvbWVvbmUgdGhpbmtzIHRoZXNlIGNhbiBhbGwgYmUgCnNp bXBsaWZpZWQgYW5kIHdhbnRzIHRvIG9ubHkgZG8gdGhlIGluaXRpYWxpc2F0aW9uIG9uY2UgaW4g b25lIHBsYWNlIAp0aGVuIHRoYXQgc2hvdWxkIGJlIGFub3RoZXIgcGF0Y2guCgo+PiAgIH0KPj4K Pj4gICB2b2lkIGk5MTVfaW5pdF92bShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs IGRpZmYgLS1naXQKPj4gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4+IGluZGV4IGViYTBhY2QuLmRiOGVmYWEgMTAw NjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4+IEBAIC0xMjg3LDcgKzEyODcsOSBAQCBz dGF0aWMgaW50IGxvZ2ljYWxfcmluZ19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4+IHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbgo+PiAgIAlyaW5nLT5kZXYgPSBkZXY7Cj4+ICAgCUlO SVRfTElTVF9IRUFEKCZyaW5nLT5hY3RpdmVfbGlzdCk7Cj4+ICAgCUlOSVRfTElTVF9IRUFEKCZy aW5nLT5yZXF1ZXN0X2xpc3QpOwo+PiArCXNwaW5fbG9ja19pbml0KCZyaW5nLT5yZXFsaXN0X2xv Y2spOwo+PiAgIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZyaW5nLT5pcnFfcXVldWUpOwo+PiArCUlO SVRfTElTVF9IRUFEKCZyaW5nLT5kZWxheWVkX2ZyZWVfbGlzdCk7Cj4+Cj4+ICAgCUlOSVRfTElT VF9IRUFEKCZyaW5nLT5leGVjbGlzdF9xdWV1ZSk7Cj4+ICAgCXNwaW5fbG9ja19pbml0KCZyaW5n LT5leGVjbGlzdF9sb2NrKTsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3JpbmdidWZmZXIuYwo+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZm ZXIuYwo+PiBpbmRleCA3NGM0OGVkLi40MzM4MTMyIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfcmluZ2J1ZmZlci5jCj4+IEBAIC0xODA4LDYgKzE4MDgsOCBAQCBzdGF0aWMgaW50 IGludGVsX2luaXRfcmluZ19idWZmZXIoc3RydWN0IGRybV9kZXZpY2UKPj4gKmRldiwKPj4gICAJ cmluZy0+ZGV2ID0gZGV2Owo+PiAgIAlJTklUX0xJU1RfSEVBRCgmcmluZy0+YWN0aXZlX2xpc3Qp Owo+PiAgIAlJTklUX0xJU1RfSEVBRCgmcmluZy0+cmVxdWVzdF9saXN0KTsKPj4gKwlzcGluX2xv Y2tfaW5pdCgmcmluZy0+cmVxbGlzdF9sb2NrKTsKPj4gKwlJTklUX0xJU1RfSEVBRCgmcmluZy0+ ZGVsYXllZF9mcmVlX2xpc3QpOwo+PiAgIAlJTklUX0xJU1RfSEVBRCgmcmluZy0+ZXhlY2xpc3Rf cXVldWUpOwo+PiAgIAlyaW5nYnVmLT5zaXplID0gMzIgKiBQQUdFX1NJWkU7Cj4+ICAgCXJpbmdi dWYtPnJpbmcgPSByaW5nOwo+PiBAQCAtMjUxMCw2ICsyNTEyLDcgQEAgaW50IGludGVsX3JlbmRl cl9yaW5nX2luaXRfZHJpKHN0cnVjdCBkcm1fZGV2aWNlCj4+ICpkZXYsIHU2NCBzdGFydCwgdTMy IHNpemUpCj4+ICAgCXJpbmctPmRldiA9IGRldjsKPj4gICAJSU5JVF9MSVNUX0hFQUQoJnJpbmct PmFjdGl2ZV9saXN0KTsKPj4gICAJSU5JVF9MSVNUX0hFQUQoJnJpbmctPnJlcXVlc3RfbGlzdCk7 Cj4+ICsJSU5JVF9MSVNUX0hFQUQoJnJpbmctPmRlbGF5ZWRfZnJlZV9saXN0KTsKPj4KPj4gICAJ cmluZ2J1Zi0+c2l6ZSA9IHNpemU7Cj4+ICAgCXJpbmdidWYtPmVmZmVjdGl2ZV9zaXplID0gcmlu Z2J1Zi0+c2l6ZTsgZGlmZiAtLWdpdAo+PiBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Jp bmdidWZmZXIuaAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAo+ PiBpbmRleCA4MjRmNTg4NC4uM2FmN2I3YyAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3JpbmdidWZmZXIuaAo+PiBAQCAtMjYyLDYgKzI2Miw4IEBAIHN0cnVjdCAgaW50ZWxfZW5n aW5lX2NzIHsKPj4gICAJICogb3V0c3RhbmRpbmcuCj4+ICAgCSAqLwo+PiAgIAlzdHJ1Y3QgbGlz dF9oZWFkIHJlcXVlc3RfbGlzdDsKPj4gKwlzcGlubG9ja190IHJlcWxpc3RfbG9jazsKPj4gKwlz dHJ1Y3QgbGlzdF9oZWFkIGRlbGF5ZWRfZnJlZV9saXN0Owo+Pgo+PiAgIAkvKioKPj4gICAJICog RG8gd2UgaGF2ZSBzb21lIG5vdCB5ZXQgZW1pdHRlZCByZXF1ZXN0cyBvdXRzdGFuZGluZz8KPj4g LS0KPj4gMS43LjkuNQo+Pgo+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwo+PiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4+IEludGVsLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKPj4gaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ludGVsLWdmeAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRl bC1nZngK