From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lukas Wunner Subject: Re: [PATCH v5 1/2] drm/i915: Fix failure paths around initial fbdev allocation Date: Sun, 18 Oct 2015 20:03:23 +0200 Message-ID: <20151018180323.GA18123@wunner.de> References: <20151013150440.GR26517@intel.com> <20151015171435.GA17598@wunner.de> <20151015173423.GK26517@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mailout2.hostsharing.net (mailout2.hostsharing.net [83.223.90.233]) by gabe.freedesktop.org (Postfix) with ESMTPS id B658F6E1B4 for ; Sun, 18 Oct 2015 11:03:31 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20151015173423.GK26517@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Cc: Jani Nikula , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org SGkgVmlsbGUsCgpPbiBUaHUsIE9jdCAxNSwgMjAxNSBhdCAwODozNDoyM1BNICswMzAwLCBWaWxs ZSBTeXJqw6Rsw6Qgd3JvdGU6Cj4gT24gVGh1LCBPY3QgMTUsIDIwMTUgYXQgMDc6MTQ6MzVQTSAr MDIwMCwgTHVrYXMgV3VubmVyIHdyb3RlOgo+ID4gSGkgVmlsbGUsCj4gPiAKPiA+IE9uIFR1ZSwg T2N0IDEzLCAyMDE1IGF0IDA2OjA0OjQwUE0gKzAzMDAsIFZpbGxlIFN5cmrDpGzDpCB3cm90ZToK PiA+ID4gT24gVHVlLCBKdW4gMzAsIDIwMTUgYXQgMTA6MDY6MjdBTSArMDEwMCwgTHVrYXMgV3Vu bmVyIHdyb3RlOgo+ID4gPiA+IEZyb206IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBp bnRlbC5jb20+Cj4gPiA+ID4gCj4gPiA+ID4gV2UgaGFkIHR3byBmYWlsdXJlIG1vZGVzIGhlcmU6 Cj4gPiA+ID4gCj4gPiA+ID4gMS4KPiA+ID4gPiBEZWFkbG9jayBpbiBpbnRlbGZiX2FsbG9jIGZh aWx1cmUgcGF0aCB3aGVyZSBpdCBjYWxscwo+ID4gPiA+IGRybV9mcmFtZWJ1ZmZlcl9yZW1vdmUs IHdoaWNoIGdyYWJzIHRoZSBzdHJ1Y3QgbXV0ZXggYW5kIGludGVsZmJfY3JlYXRlCj4gPiA+ID4g KGNhbGxlciBvZiBpbnRlbGZiX2FsbG9jKSB3YXMgYWxyZWFkeSBob2xkaW5nIGl0Lgo+ID4gPiA+ IAo+ID4gPiA+IDIuCj4gPiA+ID4gRGVhZGxvY2sgaW4gaW50ZWxmYl9jcmVhdGUgZmFpbHVyZSBw YXRoIHdoZXJlIGl0IGNhbGxzCj4gPiA+ID4gZHJtX2ZyYW1lYnVmZmVyX3VucmVmZXJlbmNlLCB3 aGljaCBncmFicyB0aGUgc3RydWN0IG11dGV4IGFuZAo+ID4gPiA+IGludGVsZmJfY3JlYXRlIHdh cyBhbHJlYWR5IGhvbGRpbmcgaXQuCj4gPiA+ID4gCj4gPiA+ID4gdjI6Cj4gPiA+ID4gICAgKiBS ZWZvcm1hdCBjb21taXQgbXNnIHRvIDcyIGNoYXJzLiAoTHVrYXMgV3VubmVyKQo+ID4gPiA+ICAg ICogQWRkIHRoaXJkIGZhaWx1cmUgbW9kZS4gKEx1a2FzIFd1bm5lcikKPiA+ID4gPiAKPiA+ID4g PiB2MzoKPiA+ID4gPiAgICAqIE9uIGZiIGFsbG9jIGZhaWx1cmUsIHVucmVmIGdlbSBvYmplY3Qg d2hlcmUgaXQgZ2V0cyByZWZlZCwKPiA+ID4gPiAgICAgIGZpeCBkb3VibGUgdW5yZWYgaW4gc2Vw YXJhdGUgY29tbWl0LiAoVmlsbGUgU3lyasOkbMOkKQo+ID4gPiA+IAo+ID4gPiA+IHY0Ogo+ID4g PiA+ICAgICogTG9jayBzdHJ1Y3QgbXV0ZXggb24gdW5yZWYuIChDaHJpcyBXaWxzb24pCj4gPiA+ ID4gCj4gPiA+ID4gdjU6Cj4gPiA+ID4gICAgKiBSZWJhc2Ugb24gZHJtLWludGVsLW5pZ2h0bHkg MjAxNXktMDltLTA0ZC0wOGgtMTltLTM1cyBVVEMsCj4gPiA+ID4gICAgICByZXBocmFzZSBjb21t aXQgbWVzc2FnZS4gKEphbmkgTmljdWxhKQo+ID4gPiA+IAo+ID4gPiA+IFRlc3RlZC1ieTogUGll cnJlIE1vcmVhdSA8cGllcnJlLm1vcnJvd0BmcmVlLmZyPgo+ID4gPiA+ICAgICBbTUJQICA1LDMg MjAwOSAgbnZpZGlhIDk0MDBNICsgOTYwME0gR1QgICBwcmUtcmV0aW5hXQo+ID4gPiA+IFRlc3Rl ZC1ieTogUGF1bCBIb3JkaWllbmtvIDxwdnQuZ29yZEBnbWFpbC5jb20+Cj4gPiA+ID4gICAgIFtN QlAgIDYsMiAyMDEwICBpbnRlbCBJTEsgKyBudmlkaWEgR1QyMTYgIHByZS1yZXRpbmFdCj4gPiA+ ID4gVGVzdGVkLWJ5OiBXaWxsaWFtIEJyb3duIDx3aWxsaWFtQGJsYWNraGF0cy5uZXQuYXU+Cj4g PiA+ID4gICAgIFtNQlAgIDgsMiAyMDExICBpbnRlbCBTTkIgKyBhbWQgdHVya3MgICAgIHByZS1y ZXRpbmFdCj4gPiA+ID4gVGVzdGVkLWJ5OiBMdWthcyBXdW5uZXIgPGx1a2FzQHd1bm5lci5kZT4K PiA+ID4gPiAgICAgW01CUCAgOSwxIDIwMTIgIGludGVsIElWQiArIG52aWRpYSBHSzEwNyAgcHJl LXJldGluYV0KPiA+ID4gPiBUZXN0ZWQtYnk6IEJydW5vIEJpZXJiYXVtZXIgPGJydW5vQGJpZXJi YXVtZXIubmV0Pgo+ID4gPiA+ICAgICBbTUJQIDExLDMgMjAxMyAgaW50ZWwgSFNXICsgbnZpZGlh IEdLMTA3ICByZXRpbmFdCj4gPiA+ID4gCj4gPiA+ID4gU2lnbmVkLW9mZi1ieTogVHZydGtvIFVy c3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KPiA+ID4gPiBGaXhlczogNjBhNWNhMDE1 ZmZkICgiZHJtL2k5MTU6IEFkZCBsb2NraW5nIGFyb3VuZAo+ID4gPiA+ICAgICBmcmFtZWJ1ZmZl cl9yZWZlcmVuY2VzLS0iKQo+ID4gPiA+IFJlcG9ydGVkLWJ5OiBMdWthcyBXdW5uZXIgPGx1a2Fz QHd1bm5lci5kZT4KPiA+ID4gPiBbTHVrYXM6IENyZWF0ZSB2MyArIHY0ICsgdjUgYmFzZWQgb24g VHZydGtvJ3MgdjJdCj4gPiA+ID4gU2lnbmVkLW9mZi1ieTogTHVrYXMgV3VubmVyIDxsdWthc0B3 dW5uZXIuZGU+Cj4gPiA+ID4gQ2M6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNv LnVrPgo+ID4gPiA+IENjOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50 ZWwuY29tPgo+ID4gPiA+IENjOiBKYW5pIE5pa3VsYSA8amFuaS5uaWt1bGFAaW50ZWwuY29tPgo+ ID4gPiA+IC0tLQo+ID4gPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYmRldi5jIHwg MjAgKysrKysrKysrKysrLS0tLS0tLS0KPiA+ID4gPiAgMSBmaWxlIGNoYW5nZWQsIDEyIGluc2Vy dGlvbnMoKyksIDggZGVsZXRpb25zKC0pCj4gPiA+ID4gCj4gPiA+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiZGV2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9mYmRldi5jCj4gPiA+ID4gaW5kZXggOTY0NzZkNy4uZWVlMzMwNiAxMDA2NDQKPiA+ID4g PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYmRldi5jCj4gPiA+ID4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJkZXYuYwo+ID4gPiA+IEBAIC0xMTksNyArMTE5 LDcgQEAgc3RhdGljIGludCBpbnRlbGZiX2FsbG9jKHN0cnVjdCBkcm1fZmJfaGVscGVyICpoZWxw ZXIsCj4gPiA+ID4gIHsKPiA+ID4gPiAgCXN0cnVjdCBpbnRlbF9mYmRldiAqaWZiZGV2ID0KPiA+ ID4gPiAgCQljb250YWluZXJfb2YoaGVscGVyLCBzdHJ1Y3QgaW50ZWxfZmJkZXYsIGhlbHBlcik7 Cj4gPiA+ID4gLQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKPiA+ID4gPiArCXN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZiID0gTlVMTDsKPiA+ID4gPiAgCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSBoZWxwZXItPmRldjsKPiA+ID4gPiAgCXN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyIG1vZGVf Y21kID0ge307Cj4gPiA+ID4gIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+ID4g PiA+IEBAIC0xMzcsNiArMTM3LDggQEAgc3RhdGljIGludCBpbnRlbGZiX2FsbG9jKHN0cnVjdCBk cm1fZmJfaGVscGVyICpoZWxwZXIsCj4gPiA+ID4gIAltb2RlX2NtZC5waXhlbF9mb3JtYXQgPSBk cm1fbW9kZV9sZWdhY3lfZmJfZm9ybWF0KHNpemVzLT5zdXJmYWNlX2JwcCwKPiA+ID4gPiAgCQkJ CQkJCSAgc2l6ZXMtPnN1cmZhY2VfZGVwdGgpOwo+ID4gPiA+ICAKPiA+ID4gPiArCW11dGV4X2xv Y2soJmRldi0+c3RydWN0X211dGV4KTsKPiA+ID4gPiArCj4gPiA+ID4gIAlzaXplID0gbW9kZV9j bWQucGl0Y2hlc1swXSAqIG1vZGVfY21kLmhlaWdodDsKPiA+ID4gPiAgCXNpemUgPSBQQUdFX0FM SUdOKHNpemUpOwo+ID4gPiA+ICAJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9zdG9sZW4o ZGV2LCBzaXplKTsKPiA+ID4gPiBAQCAtMTU4LDE4ICsxNjAsMjEgQEAgc3RhdGljIGludCBpbnRl bGZiX2FsbG9jKHN0cnVjdCBkcm1fZmJfaGVscGVyICpoZWxwZXIsCj4gPiA+ID4gIAlyZXQgPSBp bnRlbF9waW5fYW5kX2ZlbmNlX2ZiX29iaihOVUxMLCBmYiwgTlVMTCwgTlVMTCwgTlVMTCk7Cj4g PiA+ID4gIAlpZiAocmV0KSB7Cj4gPiA+ID4gIAkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcGluIG9i ajogJWRcbiIsIHJldCk7Cj4gPiA+ID4gLQkJZ290byBvdXRfZmI7Cj4gPiA+ID4gKwkJZ290byBv dXRfdW5yZWY7Cj4gPiA+ID4gIAl9Cj4gPiA+ID4gIAo+ID4gPiA+ICsJbXV0ZXhfdW5sb2NrKCZk ZXYtPnN0cnVjdF9tdXRleCk7Cj4gPiA+ID4gKwo+ID4gPiA+ICAJaWZiZGV2LT5mYiA9IHRvX2lu dGVsX2ZyYW1lYnVmZmVyKGZiKTsKPiA+ID4gPiAgCj4gPiA+ID4gIAlyZXR1cm4gMDsKPiA+ID4g PiAgCj4gPiA+ID4gLW91dF9mYjoKPiA+ID4gPiAtCWRybV9mcmFtZWJ1ZmZlcl9yZW1vdmUoZmIp Owo+ID4gPiA+ICBvdXRfdW5yZWY6Cj4gPiA+ID4gIAlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5j ZSgmb2JqLT5iYXNlKTsKPiA+ID4gCj4gPiA+IElmIGZiIGluaXQgc3VjY2VlZGVkIGl0IHRvb2sg b3ZlciB0aGUgcmVmLCBubz8gU28gZHJtX2ZyYW1lYnVmZmVyX3JlbW92ZSgpCj4gPiA+IHdpbGwg bm93IGF0dGVtcHQgdG8gdW5yZWYgb25lIHRvbyBtYW55IHRpbWVzLgo+ID4gPiAKPiA+ID4gVGhp cyB0YWtpbmcgb3ZlciByZWZzIHN0dWZmIGlzIGNvbmZ1c2luZy4gTWF5YmUgaXQgd291bGQgYmUg YmV0dGVyIGlmCj4gPiA+IGV2ZXJ5b25lIGp1c3QgdG9vayBhbiBleHRyYSByZWYgd2hlbiB0aGV5 IHN0YXNoIHRoZSBvYmogcG9pbnRlcgo+ID4gPiBzb21ld2hlcmUsIGFuZCBldmVyeW9uZSB3b3Vs ZCB0aGVuIGFsd2F5cyByZWxlYXNlIHdoYXRldmVyIHJlZiB0aGV5IG93bgo+ID4gPiBhbmQgbm8g bG9uZ2VyIG5lZWQuCj4gPiA+IAo+ID4gPiA+ICBvdXQ6Cj4gPiA+ID4gKwltdXRleF91bmxvY2so JmRldi0+c3RydWN0X211dGV4KTsKPiA+ID4gPiArCWlmIChmYikKPiA+ID4gPiArCQlkcm1fZnJh bWVidWZmZXJfcmVtb3ZlKGZiKTsKPiA+ID4gPiAgCXJldHVybiByZXQ7Cj4gPiA+ID4gIH0KPiA+ ID4gPiAgCj4gPiAKPiA+IEhtLCB3aHkgZG8geW91IHRoaW5rIHdlIHVucmVmIG9uZSB0b28gbWFu eSB0aW1lcz8KPiAKPiBCZWNhdXNlIHRoZSBmYiBub3cgb3ducyB0aGUgcmVmZXJlbmNlLCBzbyBp dCBnZXRzIHVucmVmZmVkIGJ5IHRoZSBmYgo+IC5kZXN0cm95KCkgaG9vay4uLiBJIHRoaW5rLgoK WW91J3JlIHJpZ2h0LiBkcm1fZnJhbWVidWZmZXJfcmVtb3ZlKCkgY2FsbHMgZHJtX2ZyYW1lYnVm ZmVyX3VucmVmZXJlbmNlKCksCmlmIHRoaXMgd2FzIHRoZSBsYXN0IHJlZiB0aGVuIGRybV9mcmFt ZWJ1ZmZlcl9mcmVlKCkgZ2V0cyBjYWxsZWQsCndoaWNoIGludm9rZXMgdGhlIC0+ZGVzdHJveSBj YWxsYmFjayBpbnRlbF91c2VyX2ZyYW1lYnVmZmVyX2Rlc3Ryb3koKSwKd2hpY2ggaW4gdHVybiBj YWxscyBkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgpLgoKU28gaW5kZWVkIGl0IGdldHMgdW5y ZWZlZCB0d2ljZSBoZXJlLgoKCj4gPiAKPiA+IEEgYml0IGZ1cnRoZXIgdXAgaW4gdGhpcyBmdW5j dGlvbiB3ZSBjYWxsIF9faW50ZWxfZnJhbWVidWZmZXJfY3JlYXRlKCkKPiA+IHdoaWNoIHNldHMg dGhlIHJlZmNvdW50IHRvIDEuIChJdCBjYWxscyBpbnRlbF9mcmFtZWJ1ZmZlcl9pbml0KCksIHdo aWNoCj4gPiBjYWxscyBkcm1fZnJhbWVidWZmZXJfaW5pdCgpLCB3aGljaCBjYWxscyBrcmVmX2lu aXQoJmZiLT5yZWZjb3VudCkuKQo+ID4gCj4gPiBTbyBpZiBpbnRlbF9waW5fYW5kX2ZlbmNlX2Zi X29iaigpIGZhaWxzLCB3ZSBkbyBuZWVkIHRvIHVucmVmZXJlbmNlIGFuZAo+ID4gdGVhciBkb3du IHRoZSBmYi4gVGh1cywgZHJtX2ZyYW1lYnVmZmVyX3JlbW92ZSgpIHNlZW1zIHJpZ2h0IGhlcmUg dG8gbWUuCj4gCj4gSSB3YXNuJ3QgY29tcGxhaW5pbmcgYWJvdXQgdGhlIGZiIHVucmVmLCBidXQg dGhlIGJvIHVucmVmLgo+IAo+ID4gCj4gPiBIb3dldmVyLCBiZWNhdXNlIG9mIHlvdXIgb2JqZWN0 aW9uIEkndmUgbm90aWNlZCBub3cgdGhhdCAiaWYgKGZiKSIgc2VlbXMKPiA+IHRvIGJlIHdyb25n LCBJIHRoaW5rIHRoaXMgc2hvdWxkIGJlICJpZiAoIUlTX0VSUl9PUl9OVUxMKGZiKSkiLgo+ID4g Cj4gPiBCZWNhdXNlIGlmIF9faW50ZWxfZnJhbWVidWZmZXJfY3JlYXRlKCkgZmFpbGVkLCBmYiB3 aWxsIGJlIGEgUFRSX0VSUigpLAo+ID4gc28gbm90IG51bGwsIGFuZCB3ZSdkIGNhbGwgZHJtX2Zy YW1lYnVmZmVyX3JlbW92ZSgpIG9uIHRoaXMuIElzIHRoYXQKPiA+IHdoYXQgeW91IG1lYW50Pwo+ IAo+IE5vLCBidXQgdGhhdCdzIGEgZ29vZCBvYnNlcnZhdGlvbiB0b28uCj4gCj4gPiAKPiA+IAo+ ID4gPiA+IEBAIC0xODcsOCArMTkyLDYgQEAgc3RhdGljIGludCBpbnRlbGZiX2NyZWF0ZShzdHJ1 Y3QgZHJtX2ZiX2hlbHBlciAqaGVscGVyLAo+ID4gPiA+ICAJaW50IHNpemUsIHJldDsKPiA+ID4g PiAgCWJvb2wgcHJlYWxsb2MgPSBmYWxzZTsKPiA+ID4gPiAgCj4gPiA+ID4gLQltdXRleF9sb2Nr KCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gPiA+ID4gLQo+ID4gPiA+ICAJaWYgKGludGVsX2ZiICYm Cj4gPiA+ID4gIAkgICAgKHNpemVzLT5mYl93aWR0aCA+IGludGVsX2ZiLT5iYXNlLndpZHRoIHx8 Cj4gPiA+ID4gIAkgICAgIHNpemVzLT5mYl9oZWlnaHQgPiBpbnRlbF9mYi0+YmFzZS5oZWlnaHQp KSB7Cj4gPiA+ID4gQEAgLTIwMyw3ICsyMDYsNyBAQCBzdGF0aWMgaW50IGludGVsZmJfY3JlYXRl KHN0cnVjdCBkcm1fZmJfaGVscGVyICpoZWxwZXIsCj4gPiA+ID4gIAkJRFJNX0RFQlVHX0tNUygi bm8gQklPUyBmYiwgYWxsb2NhdGluZyBhIG5ldyBvbmVcbiIpOwo+ID4gPiA+ICAJCXJldCA9IGlu dGVsZmJfYWxsb2MoaGVscGVyLCBzaXplcyk7Cj4gPiA+ID4gIAkJaWYgKHJldCkKPiA+ID4gPiAt CQkJZ290byBvdXRfdW5sb2NrOwo+ID4gPiA+ICsJCQlyZXR1cm4gcmV0Owo+ID4gPiA+ICAJCWlu dGVsX2ZiID0gaWZiZGV2LT5mYjsKPiA+ID4gPiAgCX0gZWxzZSB7Cj4gPiA+ID4gIAkJRFJNX0RF QlVHX0tNUygicmUtdXNpbmcgQklPUyBmYlxuIik7Cj4gPiA+ID4gQEAgLTIxNSw2ICsyMTgsOCBA QCBzdGF0aWMgaW50IGludGVsZmJfY3JlYXRlKHN0cnVjdCBkcm1fZmJfaGVscGVyICpoZWxwZXIs Cj4gPiA+ID4gIAlvYmogPSBpbnRlbF9mYi0+b2JqOwo+ID4gPiA+ICAJc2l6ZSA9IG9iai0+YmFz ZS5zaXplOwo+ID4gPiA+ICAKPiA+ID4gPiArCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4 KTsKPiA+ID4gPiArCj4gPiA+IAo+ID4gPiBJJ20gdGhpbmtpbmcgd2Ugd29uJ3QgZXZlbiBuZWVk IHRoZSBsb2NrIGhlcmUgYW55bW9yZS4gQnV0IG1heWJlIEknbQo+ID4gPiBtaXNzaW5nIHNvbWV0 aGluZy4KPiA+ID4gCj4gPiA+ID4gIAlpbmZvID0gZHJtX2ZiX2hlbHBlcl9hbGxvY19mYmkoaGVs cGVyKTsKPiA+ID4gPiAgCWlmIChJU19FUlIoaW5mbykpIHsKPiA+ID4gPiAgCQlyZXQgPSBQVFJf RVJSKGluZm8pOwo+ID4gPiA+IEBAIC0yNzYsNyArMjgxLDYgQEAgb3V0X2Rlc3Ryb3lfZmJpOgo+ ID4gPiA+ICBvdXRfdW5waW46Cj4gPiA+ID4gIAlpOTE1X2dlbV9vYmplY3RfZ2d0dF91bnBpbihv YmopOwo+ID4gPiA+ICAJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7Cj4g PiA+IAo+ID4gPiBBbmQgdGhpcyByZWYgd2UgZG9uJ3Qgb3duIGVpdGhlciBBRkFJQ1MuCj4gPiAK PiA+IFdoeT8gV2UgZGlkIGNhbGwgaW50ZWxmYl9hbGxvYygpIGFib3ZlLCBzbyBpZiBzb21ldGhp bmcgc3Vic2VxdWVudGx5Cj4gPiBnb2VzIHdyb25nLCB3ZSBuZWVkIHRvIHJldmVydCB0aGUgc3Rl cHMgdGhhdCBpbnRlbGZiX2FsbG9jKCkgY2FycmllZAo+ID4gb3V0LiBUaGUgZHJtX2dlbV9vYmpl Y3RfdW5yZWZlcmVuY2UoKSB0aGVyZWZvcmUgc2VlbXMgcmlnaHQgaGVyZSB0byBtZS4KPiAKPiBI ZXJlIHRvbyB0aGUgZmIgKGlmIHN1Y2Nlc2Z1bGx5IGNyZWF0ZWQpIG5vdyBvd25zIHRoYXQgcmVm ZXJlbmNlLgoKQnV0IGhlcmUgdGhlIC0+ZGVzdHJveSBjYWxsYmFjayBpc24ndCBpbnZva2VkIGJl Y2F1c2UgdGhlIGZiIGlzbid0IHVucmVmZWQuClRoZXJlJ3Mgbm8gY2FsbCB0byBkcm1fZnJhbWVi dWZmZXJfdW5yZWZlcmVuY2UoKSAvIGRybV9mcmFtZWJ1ZmZlcl9yZW1vdmUoKSwKc28gdGhlIGdl bSBvYmplY3QgaXNuJ3QgdW5yZWZlZCB0d2ljZSBidXQgd2Ugc2VlbSB0byBsZWFrIHRoZSBmYi4K ClRoYXQncyBleGFjdGx5IHdoYXQgSSBmaW5kIGNvbmZ1c2luZyBoZXJlLCBpZiBpbnRlbGZiX2Fs bG9jKCkgYWJvdmUgd2FzCnN1Y2Nlc3NmdWwgYW5kIHNvbWV0aGluZyBlbHNlIHN1YnNlcXVlbnRs eSBnb2VzIGF3cnksIHdlIG5lZWQgdG8gdW5yZWYKdGhlIGZiLCByaWdodD8gT3IgYW0gSSBtaXNz aW5nIHNvbWV0aGluZz8KCkluIHRoZSBjYXNlIHdoZW4gd2UndmUgaW5oZXJpdGVkIHRoZSBmYiBm cm9tIEJJT1MgKGluc3RlYWQgb2YgY3JlYXRpbmcgaXQKd2l0aCBpbnRlbGZiX2FsbG9jKCkpLCBp cyBpdCBva2F5IHRvIHVucmVmIHRoZSBmYiBhcyB3ZWxsPwoKCkJlc3QgcmVnYXJkcywKCkx1a2Fz CgoKPiA+IEhvd2V2ZXIgSSdtIHB1enpsZWQgd2h5IHdlIGRvbid0IGNhbGwgZHJtX2ZyYW1lYnVm ZmVyX3JlbW92ZSgpIHVuZGVyCj4gPiB0aGUgb3V0X3VucGluOiBsYWJlbC4gQXJlbid0IHdlIGxl YWtpbmcgYSBmcmFtZWJ1ZmZlciBoZXJlIHdpdGhvdXQgdGhhdD8KPiA+IAo+ID4gTWF5YmUgeW91 J3JlIHJlZmVycmluZyB0byB0aGUgZmFjdCB0aGF0IHRoaXMgZnVuY3Rpb24gZWl0aGVyIGluaGVy aXRzCj4gPiB0aGUgQklPUyBmYiBvciBjcmVhdGVzIGEgbmV3IGZiIHdpdGggaW50ZWxmYl9hbGxv YygpLiBJJ20gbm90IHN1cmUgaWYKPiA+IHRoZSBjbGVhbnVwIG9uIGVycm9yIGlzIGlkZW50aWNh bCBpbiB0aGVzZSB0d28gY2FzZXMuIE1heWJlIHlvdSBtZWFudAo+ID4gdGhhdCB3ZSBkb24ndCBv d24gdGhlIHJlZiBpbiB0aGUgY2FzZSB0aGF0IHRoZSBmYiB3YXMgaW5oZXJpdGVkIGZyb20KPiA+ IEJJT1M/Cj4gPiAKPiA+IAo+ID4gQmVzdCByZWdhcmRzLAo+ID4gCj4gPiBMdWthcwo+ID4gCj4g PiA+IAo+ID4gPiA+IC1vdXRfdW5sb2NrOgo+ID4gPiA+ICAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0 cnVjdF9tdXRleCk7Cj4gPiA+ID4gIAlyZXR1cm4gcmV0Owo+ID4gPiA+ICB9Cj4gPiA+ID4gLS0g Cj4gPiA+ID4gMi4xLjAKPiA+ID4gCj4gPiA+IC0tIAo+ID4gPiBWaWxsZSBTeXJqw6Rsw6QKPiA+ ID4gSW50ZWwgT1RDCj4gCj4gLS0gCj4gVmlsbGUgU3lyasOkbMOkCj4gSW50ZWwgT1RDCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWls aW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==