From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v2 07/20] drm/i915: Rework primary plane stuff slightly. Date: Wed, 8 Jul 2015 11:27:12 +0200 Message-ID: <20150708092712.GG7568@phenom.ffwll.local> References: <1436252911-5703-1-git-send-email-maarten.lankhorst@linux.intel.com> <1436252911-5703-8-git-send-email-maarten.lankhorst@linux.intel.com> <20150707111655.GJ7568@phenom.ffwll.local> <559BDBF8.9060309@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wi0-f178.google.com (mail-wi0-f178.google.com [209.85.212.178]) by gabe.freedesktop.org (Postfix) with ESMTPS id B82DC6E025 for ; Wed, 8 Jul 2015 02:24:27 -0700 (PDT) Received: by wiga1 with SMTP id a1so279291925wig.0 for ; Wed, 08 Jul 2015 02:24:26 -0700 (PDT) Content-Disposition: inline In-Reply-To: <559BDBF8.9060309@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Maarten Lankhorst Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBKdWwgMDcsIDIwMTUgYXQgMDQ6MDI6MzJQTSArMDIwMCwgTWFhcnRlbiBMYW5raG9y c3Qgd3JvdGU6Cj4gT3AgMDctMDctMTUgb20gMTM6MTYgc2NocmVlZiBEYW5pZWwgVmV0dGVyOgo+ ID4gT24gVHVlLCBKdWwgMDcsIDIwMTUgYXQgMDk6MDg6MThBTSArMDIwMCwgTWFhcnRlbiBMYW5r aG9yc3Qgd3JvdGU6Cj4gPj4gTWFrZSBzdXJlIHRoZSBwcmltYXJ5IHBsYW5lIGlzIHNldCB1cCBj b3JyZWN0bHkuIFRoaXMgaXMgZG9uZSBieQo+ID4+IHNldHRpbmcgcGxhbmVfc3RhdGUtPnNyYyBh bmQgcGxhbmVfc3RhdGUtPmNydGMuCj4gPj4KPiA+PiBBbGwgbm9uLXByaW1hcnkgcGxhbmVzIGdl dCBkaXNhYmxlZC4KPiA+IFRvbyB0ZXJzZSBjb21taXQgbWVzc2FnZSwgZmFpbHMgdG8gbWVudGlv biB0aGF0IHRoaXMgaXMgYWJvdXQgaHcKPiA+IHJlYWRvdXQgY29tcGxldGVseS4gQWxzbyBzaG91 bGQgbWVudGlvbiB0aGF0IHRoaXMgcmVtb3ZlcyB0aGUKPiA+IGluaXRpYWxfcGxhbmVzIGhhY2su Cj4gPgo+ID4+IFNpZ25lZC1vZmYtYnk6IE1hYXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxhbmto b3JzdEBsaW51eC5pbnRlbC5jb20+Cj4gPj4gLS0tCj4gPj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2F0b21pYy5jICB8ICAgNyAtLQo+ID4+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9kaXNwbGF5LmMgfCAxNjcgKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+ PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggICAgIHwgICAyIC0KPiA+PiAgMyBm aWxlcyBjaGFuZ2VkLCA2MCBpbnNlcnRpb25zKCspLCAxMTYgZGVsZXRpb25zKC0pCj4gPj4KPiA+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdG9taWMuYwo+ID4+IGluZGV4IDQyOTY3N2ExMTFkNS4u YjU5MzYxMmE5MTdkIDEwMDY0NAo+ID4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2F0b21pYy5jCj4gPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljLmMK PiA+PiBAQCAtOTgsMTMgKzk4LDYgQEAgaW50IGludGVsX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAo+ID4+ICAJCXJldHVybiAtRUlOVkFMOwo+ID4+ICAJfQo+ID4+ICAKPiA+ PiAtCWlmIChjcnRjX3N0YXRlICYmCj4gPj4gLQkgICAgY3J0Y19zdGF0ZS0+cXVpcmtzICYgUElQ RV9DT05GSUdfUVVJUktfSU5JVElBTF9QTEFORVMpIHsKPiA+PiAtCQlyZXQgPSBkcm1fYXRvbWlj X2FkZF9hZmZlY3RlZF9wbGFuZXMoc3RhdGUsICZudWNsZWFyX2NydGMtPmJhc2UpOwo+ID4+IC0J CWlmIChyZXQpCj4gPj4gLQkJCXJldHVybiByZXQ7Cj4gPj4gLQl9Cj4gPj4gLQo+ID4+ICAJcmV0 ID0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2tfcGxhbmVzKGRldiwgc3RhdGUpOwo+ID4+ICAJaWYg KHJldCkKPiA+PiAgCQlyZXR1cm4gcmV0Owo+ID4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNw bGF5LmMKPiA+PiBpbmRleCBlYjdjMmUyODE5YjcuLmZhMTEwMjM5MmVjYSAxMDA2NDQKPiA+PiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+PiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+PiBAQCAtMTA5LDYgKzEwOSw3IEBA IHN0YXRpYyB2b2lkIHNrbF9pbml0X3NjYWxlcnMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3Ry dWN0IGludGVsX2NydGMgKmludGVsX2NyCj4gPj4gIAlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZSk7Cj4gPj4gIHN0YXRpYyBpbnQgaTl4eF9nZXRfcmVmY2xrKGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ID4+ICAJCQkgICBpbnQgbnVtX2Nvbm5l Y3RvcnMpOwo+ID4+ICtzdGF0aWMgdm9pZCBpbnRlbF9wcmVfZGlzYWJsZV9wcmltYXJ5KHN0cnVj dCBkcm1fY3J0YyAqY3J0Yyk7Cj4gPj4gIAo+ID4+ICBzdGF0aWMgc3RydWN0IGludGVsX2VuY29k ZXIgKmludGVsX2ZpbmRfZW5jb2RlcihzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3Is IGludCBwaXBlKQo+ID4+ICB7Cj4gPj4gQEAgLTI1ODIsMTEgKzI1ODMsMTIgQEAgaW50ZWxfZmlu ZF9pbml0aWFsX3BsYW5lX29iaihzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YywKPiA+PiAg ewo+ID4+ICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGludGVsX2NydGMtPmJhc2UuZGV2Owo+ ID4+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0 ZTsKPiA+PiAtCXN0cnVjdCBkcm1fY3J0YyAqYzsKPiA+PiAtCXN0cnVjdCBpbnRlbF9jcnRjICpp Owo+ID4+ICAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKPiA+PiAtCXN0cnVjdCBk cm1fcGxhbmUgKnByaW1hcnkgPSBpbnRlbF9jcnRjLT5iYXNlLnByaW1hcnk7Cj4gPj4gIAlzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKPiA+PiArCXN0cnVjdCBkcm1fcGxhbmUgKnByaW1hcnkg PSBpbnRlbF9jcnRjLT5iYXNlLnByaW1hcnk7Cj4gPj4gKwlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnA7 Cj4gPj4gKwlzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlID0KPiA+PiArCQl0 b19pbnRlbF9wbGFuZV9zdGF0ZShwcmltYXJ5LT5zdGF0ZSk7Cj4gPj4gIAo+ID4+ICAJaWYgKCFw bGFuZV9jb25maWctPmZiKQo+ID4+ICAJCXJldHVybjsKPiA+PiBAQCAtMjYwMiwxNiArMjYwNCwx MSBAQCBpbnRlbF9maW5kX2luaXRpYWxfcGxhbmVfb2JqKHN0cnVjdCBpbnRlbF9jcnRjICppbnRl bF9jcnRjLAo+ID4+ICAJICogRmFpbGVkIHRvIGFsbG9jIHRoZSBvYmosIGNoZWNrIHRvIHNlZSBp ZiB3ZSBzaG91bGQgc2hhcmUKPiA+PiAgCSAqIGFuIGZiIHdpdGggYW5vdGhlciBDUlRDIGluc3Rl YWQKPiA+PiAgCSAqLwo+ID4+IC0JZm9yX2VhY2hfY3J0YyhkZXYsIGMpIHsKPiA+PiAtCQlpID0g dG9faW50ZWxfY3J0YyhjKTsKPiA+PiAtCj4gPj4gLQkJaWYgKGMgPT0gJmludGVsX2NydGMtPmJh c2UpCj4gPj4gLQkJCWNvbnRpbnVlOwo+ID4+IC0KPiA+PiAtCQlpZiAoIWktPmFjdGl2ZSkKPiA+ PiArCWZvcl9lYWNoX2ludGVsX3BsYW5lKGRldiwgcCkgewo+ID4+ICsJCWlmIChwLT5iYXNlLnR5 cGUgIT0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSkKPiA+PiAgCQkJY29udGludWU7Cj4gPj4gIAo+ ID4+IC0JCWZiID0gYy0+cHJpbWFyeS0+ZmI7Cj4gPj4gKwkJZmIgPSBwLT5iYXNlLnN0YXRlLT5m YjsKPiA+IFRoaXMgc2VlbXMgdG8gYnJlYWsgdGhlIHNoYXJpbmcgbG9naWMgY29tcGxldGVseTog V2Ugd2FudCB0byBjaGVjayBwcmltYXJ5Cj4gPiBwbGFuZXMgb2YgYWxsIG90aGVyIGNydGNzIHRv IHNlZSB3aGV0aGVyIHdlIGNvdWxkIG1lcmdlZCB0aGUgZmIgdG9nZXRoZXIuCj4gPiBXZSBkb24n dCBldmVuIHJlYWQgb3V0IHBsYW5lIHN0YXRlIGZvciBub24tcHJpbWFyeSBwbGFuZXMsIHNvIHRo ZSBiZWxvdyBmYgo+ID4gY2hlY2sgd2lsbCBuZXZlciBiZSBub24tTlVMTC4KPiBJIHRob3VnaHQg dGhpcyB3YXMgYWJvdXQgbXVsdGlwbGUgcGxhbmVzIHNoYXJpbmcgdGhlIHNhbWUgZmIgd2l0aCBz YW1lIG9mZnNldC4KPiBBbmQgYXMgc3VjaCBjaGVja2luZyBmb3IgdGhlIGNydGMgaXMgdW5uZWNl c3NhcnksIGZvciB0aGUgY3VycmVudCBjcnRjIGl0IHdpbGwgYmUgYmUgTlVMTCBoZXJlLgo+IAo+ IFRoaXMgb25seSByZWFkcyBvdXQgdGhlIGN1cnJlbnQgZmIsIG5vdCBkaWZmZXJlbnQgb25lcy4K PiAKPiBBbmQgc2hhcmluZyB0aGUgc2FtZSBmYiB3aXRoIG90aGVyIGNydGMncyBpcyBkb25lIGlu IGludGVsX2ZiZGV2X2luaXRfYmlvcy4KClRoaXMgaXMgYWJvdXQgc2hhcmluZyB0aGUgc2FtZSBm YiBidXQgYWNyb3NzIGRpZmZlcmVudCBjcnRjcyAtIGJpb3MgbmV2ZXIKZW5hYmxlcyBtb3JlIHRo YW4gdGhlIHByaW1hcnkgcGxhbmUgYW55d2F5LiBBbmQgeW91IGNhbid0IHJlbHkgdXBvbgpmYmRl dl9pbml0X2Jpb3Mgc2luY2UgdGhhdCdzIG5vdCBydW4gYXQgYWxsIHdoZW4gSTkxNV9GQkRFVj1u LgoKU28geWVzIHdpdGggY3VycmVudCBjb2RlIHRoaXMgbG9vcCBoZXJlIHJlY29uc3RydWN0IHRo ZSBzaGFyZWQgYmV0d2VlbgpwcmltYXJ5IHBsYW5lcyBvbiBkaWZmZXJlbnQgY3J0Y3MgKGlmIHRo ZSBzdG9sZW4gYWxsb2NhdG9yIHRlbGxzIHVzIHRoYXQKb3VyIHJhbmdlIGlzIG9jY3VwaWVkIGFs cmVhZHkpLiBmYmRldl9pbml0X2Jpb3MganVzdCB0cmllcyB0byBjcmVhdGUgYQpjb25maWcgbWF0 Y2hpbmcgdGhlIG9uZSB0aGUgYmlvcyBoYXMgc2V0IHVwIChhbmQgdGhlbiBwaWNrIGEgc3VpdGFi bGUgZmIKZm9yIGZiY29uIGZyb20gdGhlIG9uZXMgYWxyZWFkeSBhbGxvY2F0ZWQpLgoKTWF5YmUg d2Ugc2hvdWxkIGV4dHJhY3QgdGhpcyBhcyB0cnlfdG9fZmluZF9zaGFyZWRfZmIgb3Igc2ltaWxh ciB0byBtYWtlCnRoZSBjb2RlIHNlbGYtZXhwbGFuYXRvcnk/Cgo+IAo+ID4+ICAJCWlmICghZmIp Cj4gPj4gIAkJCWNvbnRpbnVlOwo+ID4+ICAKPiA+PiBAQCAtMjYyMiwxOCArMjYxOSwyOCBAQCBp bnRlbF9maW5kX2luaXRpYWxfcGxhbmVfb2JqKHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRj LAo+ID4+ICAJCX0KPiA+PiAgCX0KPiA+PiAgCj4gPj4gKwlpbnRlbF9wcmVfZGlzYWJsZV9wcmlt YXJ5KCZpbnRlbF9jcnRjLT5iYXNlKTsKPiA+PiArCXRvX2ludGVsX3BsYW5lKHByaW1hcnkpLT5k aXNhYmxlX3BsYW5lKHByaW1hcnksICZpbnRlbF9jcnRjLT5iYXNlKTsKPiA+PiArCj4gPj4gIAly ZXR1cm47Cj4gPj4gIAo+ID4+ICB2YWxpZF9mYjoKPiA+PiArCWRybV9mcmFtZWJ1ZmZlcl9yZWZl cmVuY2UoZmIpOwo+ID4+ICsJcHJpbWFyeS0+ZmIgPSBwbGFuZV9zdGF0ZS0+YmFzZS5mYiA9IGZi Owo+ID4+ICsJcGxhbmVfc3RhdGUtPmJhc2UuY3J0YyA9IHByaW1hcnktPmNydGMgPSAmaW50ZWxf Y3J0Yy0+YmFzZTsKPiA+PiArCj4gPj4gKwlwbGFuZV9zdGF0ZS0+YmFzZS5zcmNfeCA9IHBsYW5l X3N0YXRlLT5iYXNlLnNyY195ID0gMDsKPiA+PiArCXBsYW5lX3N0YXRlLT5iYXNlLnNyY193ID0g ZmItPndpZHRoIDw8IDE2Owo+ID4+ICsJcGxhbmVfc3RhdGUtPmJhc2Uuc3JjX2ggPSBmYi0+aGVp Z2h0IDw8IDE2Owo+ID4+ICsKPiA+PiArCXBsYW5lX3N0YXRlLT5iYXNlLmNydGNfeCA9IHBsYW5l X3N0YXRlLT5iYXNlLnNyY195ID0gMDsKPiA+PiArCXBsYW5lX3N0YXRlLT5iYXNlLmNydGNfdyA9 IGZiLT53aWR0aDsKPiA+PiArCXBsYW5lX3N0YXRlLT5iYXNlLmNydGNfaCA9IGZiLT5oZWlnaHQ7 Cj4gPj4gKwo+ID4+ICsJcGxhbmVfc3RhdGUtPnZpc2libGUgPSB0cnVlOwo+ID4+ICAJb2JqID0g aW50ZWxfZmJfb2JqKGZiKTsKPiA+PiAgCWlmIChvYmotPnRpbGluZ19tb2RlICE9IEk5MTVfVElM SU5HX05PTkUpCj4gPj4gIAkJZGV2X3ByaXYtPnByZXNlcnZlX2Jpb3Nfc3dpenpsZSA9IHRydWU7 Cj4gPj4gLQo+ID4+IC0JcHJpbWFyeS0+ZmIgPSBmYjsKPiA+PiAtCXByaW1hcnktPmNydGMgPSBw cmltYXJ5LT5zdGF0ZS0+Y3J0YyA9ICZpbnRlbF9jcnRjLT5iYXNlOwo+ID4+IC0JdXBkYXRlX3N0 YXRlX2ZiKHByaW1hcnkpOwo+ID4gRG8gd2Ugc3RpbGwgaGF2ZSBvdGhlciB1c2VycyBvZiB1cGRh dGVfc3RhdGVfZmIgbGVmdD8KPiBKdXN0IHRoZSBwYWdlIGZsaXAgaGFuZGxlci4KPiA+PiAtCWlu dGVsX2NydGMtPmJhc2Uuc3RhdGUtPnBsYW5lX21hc2sgfD0gKDEgPDwgZHJtX3BsYW5lX2luZGV4 KHByaW1hcnkpKTsKPiA+PiAtCW9iai0+ZnJvbnRidWZmZXJfYml0cyB8PSB0b19pbnRlbF9wbGFu ZShwcmltYXJ5KS0+ZnJvbnRidWZmZXJfYml0Owo+ID4+ICB9Cj4gPj4gIAo+ID4+ICBzdGF0aWMg dm9pZCBpOXh4X3VwZGF0ZV9wcmltYXJ5X3BsYW5lKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+ PiBAQCAtMTE3NjEsMzQgKzExNzY4LDYgQEAgc3RhdGljIGJvb2wgY2hlY2tfZW5jb2Rlcl9jbG9u aW5nKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiA+PiAgCXJldHVybiB0cnVlOwo+ ID4+ICB9Cj4gPj4gIAo+ID4+IC1zdGF0aWMgdm9pZCBpbnRlbF9jcnRjX2NoZWNrX2luaXRpYWxf cGxhbmVzKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+PiAtCQkJCQkgICAgc3RydWN0IGRybV9j cnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+ID4+IC17Cj4gPj4gLQlzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqcGlwZV9jb25maWcgPQo+ID4+IC0JCXRvX2ludGVsX2NydGNfc3RhdGUoY3J0Y19zdGF0 ZSk7Cj4gPj4gLQlzdHJ1Y3QgZHJtX3BsYW5lICpwOwo+ID4+IC0JdW5zaWduZWQgdmlzaWJsZV9t YXNrID0gMDsKPiA+PiAtCj4gPj4gLQlkcm1fZm9yX2VhY2hfcGxhbmVfbWFzayhwLCBjcnRjLT5k ZXYsIGNydGNfc3RhdGUtPnBsYW5lX21hc2spIHsKPiA+PiAtCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0 YXRlICpwbGFuZV9zdGF0ZSA9Cj4gPj4gLQkJCWRybV9hdG9taWNfZ2V0X2V4aXN0aW5nX3BsYW5l X3N0YXRlKGNydGNfc3RhdGUtPnN0YXRlLCBwKTsKPiA+PiAtCj4gPj4gLQkJaWYgKFdBUk5fT04o IXBsYW5lX3N0YXRlKSkKPiA+PiAtCQkJY29udGludWU7Cj4gPj4gLQo+ID4+IC0JCWlmICghcGxh bmVfc3RhdGUtPmZiKQo+ID4+IC0JCQljcnRjX3N0YXRlLT5wbGFuZV9tYXNrICY9Cj4gPj4gLQkJ CQl+KDEgPDwgZHJtX3BsYW5lX2luZGV4KHApKTsKPiA+PiAtCQllbHNlIGlmICh0b19pbnRlbF9w bGFuZV9zdGF0ZShwbGFuZV9zdGF0ZSktPnZpc2libGUpCj4gPj4gLQkJCXZpc2libGVfbWFzayB8 PSAxIDw8IGRybV9wbGFuZV9pbmRleChwKTsKPiA+PiAtCX0KPiA+PiAtCj4gPj4gLQlpZiAoIXZp c2libGVfbWFzaykKPiA+PiAtCQlyZXR1cm47Cj4gPj4gLQo+ID4+IC0JcGlwZV9jb25maWctPnF1 aXJrcyAmPSB+UElQRV9DT05GSUdfUVVJUktfSU5JVElBTF9QTEFORVM7Cj4gPj4gLX0KPiA+PiAt Cj4gPj4gIHN0YXRpYyBpbnQgaW50ZWxfY3J0Y19hdG9taWNfY2hlY2soc3RydWN0IGRybV9jcnRj ICpjcnRjLAo+ID4+ICAJCQkJICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+ ID4+ICB7Cj4gPj4gQEAgLTExODEwLDEwICsxMTc4OSw2IEBAIHN0YXRpYyBpbnQgaW50ZWxfY3J0 Y19hdG9taWNfY2hlY2soc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ID4+ICAJCSJbQ1JUQzolaV0g bWlzbWF0Y2ggYmV0d2VlbiBzdGF0ZS0+YWN0aXZlKCVpKSBhbmQgY3J0Yy0+YWN0aXZlKCVpKVxu IiwKPiA+PiAgCQlpZHgsIGNydGMtPnN0YXRlLT5hY3RpdmUsIGludGVsX2NydGMtPmFjdGl2ZSk7 Cj4gPj4gIAo+ID4+IC0JLyogcGxhbmUgbWFzayBpcyBmaXhlZCB1cCBhZnRlciBhbGwgaW5pdGlh bCBwbGFuZXMgYXJlIGNhbGN1bGF0ZWQgKi8KPiA+PiAtCWlmIChwaXBlX2NvbmZpZy0+cXVpcmtz ICYgUElQRV9DT05GSUdfUVVJUktfSU5JVElBTF9QTEFORVMpCj4gPj4gLQkJaW50ZWxfY3J0Y19j aGVja19pbml0aWFsX3BsYW5lcyhjcnRjLCBjcnRjX3N0YXRlKTsKPiA+PiAtCj4gPj4gIAlpZiAo bW9kZV9jaGFuZ2VkICYmICFjcnRjX3N0YXRlLT5hY3RpdmUpCj4gPj4gIAkJaW50ZWxfY3J0Yy0+ YXRvbWljLnVwZGF0ZV93bV9wb3N0ID0gdHJ1ZTsKPiA+PiAgCj4gPj4gQEAgLTEzMTU1LDE5ICsx MzEzMCw2IEBAIGludGVsX21vZGVzZXRfY29tcHV0ZV9jb25maWcoc3RydWN0IGRybV9hdG9taWNf c3RhdGUgKnN0YXRlKQo+ID4+ICAJCQljb250aW51ZTsKPiA+PiAgCQl9Cj4gPj4gIAo+ID4+IC0J CWlmIChwaXBlX2NvbmZpZy0+cXVpcmtzICYgUElQRV9DT05GSUdfUVVJUktfSU5JVElBTF9QTEFO RVMpIHsKPiA+PiAtCQkJcmV0ID0gZHJtX2F0b21pY19hZGRfYWZmZWN0ZWRfcGxhbmVzKHN0YXRl LCBjcnRjKTsKPiA+PiAtCQkJaWYgKHJldCkKPiA+PiAtCQkJCXJldHVybiByZXQ7Cj4gPj4gLQo+ ID4+IC0JCQkvKgo+ID4+IC0JCQkgKiBXZSBvdWdodCB0byBoYW5kbGUgaTkxNS5mYXN0Ym9vdCBo ZXJlLgo+ID4+IC0JCQkgKiBJZiBubyBtb2Rlc2V0IGlzIHJlcXVpcmVkIGFuZCB0aGUgcHJpbWFy eSBwbGFuZSBoYXMKPiA+PiAtCQkJICogYSBmYiwgdXBkYXRlIHRoZSBtZW1iZXJzIG9mIGNydGNf c3RhdGUgYXMgbmVlZGVkLAo+ID4+IC0JCQkgKiBhbmQgcnVuIHRoZSBuZWNlc3NhcnkgdXBkYXRl cyBkdXJpbmcgdmJsYW5rIGV2YXNpb24uCj4gPj4gLQkJCSAqLwo+ID4+IC0JCX0KPiA+PiAtCj4g Pj4gIAkJaWYgKCFuZWVkc19tb2Rlc2V0KGNydGNfc3RhdGUpKSB7Cj4gPj4gIAkJCWlmICghKHBp cGVfY29uZmlnLT5xdWlya3MgJiBQSVBFX0NPTkZJR19RVUlSS19JTkhFUklURURfTU9ERSkpCj4g Pj4gIAkJCQljb250aW51ZTsKPiA+PiBAQCAtMTUxNDksMjUgKzE1MTExLDMwIEBAIHZvaWQgaW50 ZWxfbW9kZXNldF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gPj4gIAlkcm1fbW9kZXNl dF91bmxvY2tfYWxsKGRldik7Cj4gPj4gIAo+ID4+ICAJZm9yX2VhY2hfaW50ZWxfY3J0YyhkZXYs IGNydGMpIHsKPiA+PiAtCQlpZiAoIWNydGMtPmFjdGl2ZSkKPiA+PiArCQlzdHJ1Y3QgaW50ZWxf aW5pdGlhbF9wbGFuZV9jb25maWcgcGxhbmVfY29uZmlnOwo+ID4+ICsJCXN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lOwo+ID4+ICsKPiA+PiArCQlpZiAoIWNydGMtPmJhc2Uuc3RhdGUtPmFjdGl2ZSkK PiA+PiAgCQkJY29udGludWU7Cj4gPj4gIAo+ID4+ICsJCS8qIGRpc2FibGUgYWxsIG5vbi1wcmlt YXJ5IHBsYW5lcyAqLwo+ID4+ICsJCWRybV9mb3JfZWFjaF9wbGFuZV9tYXNrKHBsYW5lLCBkZXYs Cj4gPj4gKwkJCQkJY3J0Yy0+YmFzZS5zdGF0ZS0+cGxhbmVfbWFzaykKPiA+PiArCQkJaWYgKHBs YW5lLT50eXBlICE9IERSTV9QTEFORV9UWVBFX1BSSU1BUlkpCj4gPj4gKwkJCQl0b19pbnRlbF9w bGFuZShwbGFuZSktPmRpc2FibGVfcGxhbmUocGxhbmUsICZjcnRjLT5iYXNlKTsKPiA+PiArCj4g Pj4gKwkJY3J0Yy0+YmFzZS5zdGF0ZS0+cGxhbmVfbWFzayAmPQo+ID4+ICsJCQkxIDw8IGRybV9w bGFuZV9pbmRleChjcnRjLT5iYXNlLnByaW1hcnkpOwo+ID4+ICsKPiA+PiArCQlwbGFuZV9jb25m aWcuZmIgPSBOVUxMOwo+ID4+ICsJCWRldl9wcml2LT5kaXNwbGF5LmdldF9pbml0aWFsX3BsYW5l X2NvbmZpZyhjcnRjLAo+ID4+ICsJCQkJCQkJICAgJnBsYW5lX2NvbmZpZyk7Cj4gPj4gKwo+ID4+ ICAJCS8qCj4gPj4gLQkJICogTm90ZSB0aGF0IHJlc2VydmluZyB0aGUgQklPUyBmYiB1cCBmcm9u dCBwcmV2ZW50cyB1cwo+ID4+IC0JCSAqIGZyb20gc3R1ZmZpbmcgb3RoZXIgc3RvbGVuIGFsbG9j YXRpb25zIGxpa2UgdGhlIHJpbmcKPiA+PiAtCQkgKiBvbiB0b3AuICBUaGlzIHByZXZlbnRzIHNv bWUgdWdsaW5lc3MgYXQgYm9vdCB0aW1lLCBhbmQKPiA+PiAtCQkgKiBjYW4gZXZlbiBhbGxvdyBm b3Igc21vb3RoIGJvb3QgdHJhbnNpdGlvbnMgaWYgdGhlIEJJT1MKPiA+PiAtCQkgKiBmYiBpcyBs YXJnZSBlbm91Z2ggZm9yIHRoZSBhY3RpdmUgcGlwZSBjb25maWd1cmF0aW9uLgo+ID4+ICsJCSAq IElmIHRoZSBmYiBpcyBzaGFyZWQgYmV0d2VlbiBtdWx0aXBsZSBoZWFkcywgd2UnbGwKPiA+PiAr CQkgKiBqdXN0IGdldCB0aGUgZmlyc3Qgb25lLgo+ID4+ICAJCSAqLwo+ID4+IC0JCWlmIChkZXZf cHJpdi0+ZGlzcGxheS5nZXRfaW5pdGlhbF9wbGFuZV9jb25maWcpIHsKPiA+PiAtCQkJZGV2X3By aXYtPmRpc3BsYXkuZ2V0X2luaXRpYWxfcGxhbmVfY29uZmlnKGNydGMsCj4gPj4gLQkJCQkJCQkg ICAmY3J0Yy0+cGxhbmVfY29uZmlnKTsKPiA+PiAtCQkJLyoKPiA+PiAtCQkJICogSWYgdGhlIGZi IGlzIHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxlIGhlYWRzLCB3ZSdsbAo+ID4+IC0JCQkgKiBqdXN0 IGdldCB0aGUgZmlyc3Qgb25lLgo+ID4+IC0JCQkgKi8KPiA+PiAtCQkJaW50ZWxfZmluZF9pbml0 aWFsX3BsYW5lX29iaihjcnRjLCAmY3J0Yy0+cGxhbmVfY29uZmlnKTsKPiA+PiAtCQl9Cj4gPj4g KwkJaW50ZWxfZmluZF9pbml0aWFsX3BsYW5lX29iaihjcnRjLCAmcGxhbmVfY29uZmlnKTsKPiA+ PiAgCX0KPiA+PiAgfQo+ID4gT2sgSSBsb29rZWQgYXQgdGhpcyBhbmQgdGhlIHJlYWRvdXRfcGxh bmVfc3RhdGUgZnVuY3Rpb24gYW5kIEkgdGhpbmsgd2UKPiA+IGhhdmUgYSBiaXQgYSBjb25mdXNp b24gYWJvdXQgcmVzcG9uc2liaWxpdGllcyBoZXJlLiBUaGUgYmlnIHRoaW5nIGlzIHRoYXQKPiA+ IG9ubHkgZHJpdmVyIGxvYWQgY2FyZXMgYWJvdXQgcmVjb25zdHJ1Y3RpbmcgcGxhbmUgc3RhdGUg YWNjdXJhdGVseSwgZm9yCj4gPiByZXN1bWUgYW5kIGxpZCBub3RpZmllciB3ZSBqdXN0IHdhbnQg dG8gbWFrZSBzdXJlIHRoYXQgd2UgdXBkYXRlIHRoZQo+ID4gcGxhbmVzLiBBbmQgdGhhdCBjb3Vs ZCBiZSBhY2hpZXZlZCBieSB1bmNvbmRpdGlvbmFsbHkgc2V0dGluZwo+ID4gY3J0Y19zdGF0ZS0+ cGxhbmVzX2NoYW5nZWQuIFdlIGFscmVhZHkgaGF2ZSBhbGwgdGhlIHBsYW5lIHN0YXRlcyB3aGVu Cj4gPiByZXN0b3Jpbmcgc3RhdGUgYW55d2F5Lgo+IE9uIHJlc3VtZSBJIGZvcmNlIGEgbW9kZXNl dCBmb3IgdGhpcyByZWFzb24sIGFuZCBzZXQgdGhlIHBsYW5lX21hc2suCj4gVGhpcyBtYWtlcyBz dXJlIGFueSBwbGFuZSBnZXRzIGRpc2FibGVkLgo+IAo+IFRoZSBtb2Rlc2V0IHdpbGwgYWxzbyBh ZGQgYWxsIHBsYW5lcywgd2hpY2ggc2V0cyBwbGFuZXNfY2hhbmdlZCBpZiBuZWVkZWQuCgpZZWFo IHRoYXQncyB3aGF0IEkgaGFkIGluIG1pbmQgZm9yIHJlc3VtZTogV2UgbmVlZCB0byBncmFiIGFs bCBwbGFuZQpzdGF0ZXMgYW55d2F5ICh0byBiZSBhYmxlIHRvIHJlc3RvcmUgdGhlIG9sZCBjb25m aWcpLCBzbyBhdCBtb3N0IHdlIG5lZWQKdG8gc2V0IGEgcGxhbmVzX2NoYW5nZWQgdG8gbWFrZSBz dXJlIHRoZSB1cGRhdGUgaGFwcGVucy4KCj4gQSBjb21taXQgb24gaXRzIG93biBkb2Vzbid0IGRv IHRoaXMsIHdoZW4gYSBwbGFuZSBkb2Vzbid0IGhhdmUgYSBmYgo+IGl0IHdvbid0IGRpc2FibGUg aXQgb24gaXRzIG93biBiZWNhdXNlIHRoZSBwbGFuZSdzIGFzc3VtZWQgdG8gYmUgZGlzYWJsZWQK PiB3aGVuIG9sZF9wbGFuZV9zdGF0ZS0+ZmIgPT0gTlVMTCBhbmQgbmV3X3BsYW5lX3N0YXRlLT5m YiA9PSBOVUxMLgoKTm90IGEgcHJvYmxlbSBzaW5jZSB0b28gbWFueSBwbGFuZXMgZG9lc24ndCBz ZWVtIHRvIGhhcHBlbiBpbiByZWFsaXR5LiBBdApsZWFzdCB3ZSBkaWRuJ3QgaGF2ZSBjb2RlIHRv IGZvcmNlLWRpc2FibGUgcGxhbmVzIG9uIHJlc3VtZS9saWRfbm90aWZ5CmJlZm9yZSwgd2hpY2gg bWVhbnMgd2UgZG9uJ3Qgc3VkZGVubHkgbmVlZCBpdCBub3cuIHNhbml0aXplXyogc2hvdWxkIG9u bHkKZml4IHVwIHN0dWZmIHRoYXQncyBicm9rZW4gZm9yIGk5MTUgb24gcmVhbC13b3JsZCBtYWNo aW5lcywgbm90IHdoYXQgYWxsCmNvdWxkIGJlIHBvc3NpYmxlLgoKPiBJIGRvbid0IGtub3cgaWYg SSBjYW4gY2FsbCBkaXNhYmxlX3BsYW5lIGluIHRoaXMgbG9vcCBlaXRoZXIsIGJlY2F1c2UgdGhh dCB3aWxsCj4gdXBkYXRlIHRoZSB3YXRlcm1hcmtzIG9uIHNreWxha2Ugd2l0aCB0aGUgY2FsbCB0 byBpbnRlbF91cGRhdGVfc3ByaXRlX3dhdGVybWFya3MKPiBjYWxsaW5nIHNrbF91cGRhdGVfc3By aXRlX3dtIGNhbGxpbmcgc2tsX3VwZGF0ZV93bS4KCkhtIHRoYXQgc291bmRzIGxpa2UgYSBidWcg c3RpbGwuIE1heWJlIGp1c3QgZm9yZ2V0IGFib3V0IGRpc2FibGluZwpub24tcHJpbWFyeSBwbGFu ZXMgZm9yIG5vdyBvbiBkcml2ZXIgbG9hZD8gV2UgZG9uJ3Qgc2VlbSB0byBoYXZlIGFueSBuZWVk CmN1cnJlbnRseSBlaXRoZXIuIEFuZCBmb3IgcHJpbWFyeSBwbGFuZXMgbWF5YmUgd2UgY2FuIGhh cmQtY29kZSBzb21ldGhpbmcKd2hpY2gganVzdCBjbGVhcnMgdGhlIFBMQU5FX0VOQUJMRSBiaXQg YW5kIGRvZXMgbm90aGluZyBlbHNlPyAgS2luZCBvZiBhCnN1cGVyLWxvdy1sZXZlbCBwbGFuZSBm b3JjZSBkaXNhYmxlLiBTaW1pbGFyIHRvIGhvdyB3ZSBoYXZlIGEgc3BlY2lhbApmdW5jdGlvbiB0 byBmb3JjZS1kaXNhYmxlIHRoZSB2Z2EgcGxhbmUuCgo+IFdlIGRvbid0IGV2ZW4gaGF2ZSBhbnkg d2F0ZXJtYXJrcyBjYWxjdWxhdGVkIHlldCwgc28gdGhhdCB3aWxsIGJyZWFrLgo+ID4gVGhhdCBt ZWFucyB3ZSBzaG91bGQgbW92ZSByZWFkb3V0X3BsYW5lX3N0YXRlIGludG8gdGhlIGFib3ZlIGxv b3AuIFdoaWNoCj4gPiB0aGVuIGdldHMgYSBiaXQgdG9vIGJpZywgc28gYmV0dGVyIGV4dHJhY3Qg dGhpcyBpbnRvIGEKPiA+IGludGVsX3JlY29uc3RydWN0X3BsYW5lX3N0YXRlIG9yIHNpbWlsYXIu IFRoaXMgZnVuY3Rpb24gc2hvdWxkIHRoZW4gZG8gYWxsCj4gPiB0aGUgcGxhbmUgc3RhdGUgcmVj b25zdHJ1Y3Rpb24uCj4gPgo+ID4gVGhhdCBhbHNvIG1lYW5zIHdlIGRvbid0IGhhdmUgdG8gcGxh eSB0cmlja3Mgd2l0aCBwbGFuZV9tYXNrIGxpa2UgeW91IGRvLgo+ID4gV2Ugc2ltcGx5IHJlY29u c3RydWN0IHRoZSBwcmltYXJ5IHBsYW5lIChpZiBwb3NzaWJsZSkgYW5kIGZvcmNlLWRpc2FibGUK PiA+IGFsbCB0aGUgb3RoZXJzLiBTaW5jZSB0aGlzIG9ubHkgaGFwcGVucyBhdCBkcml2ZXIgbG9h ZCB0aGVyZSdzIG5vIG5lZWQgdG8KPiA+IGNsZWFyIG91dCBhbnkgc3RhdGUgZm9yIHNwcml0ZS9j dXJzb3JzIHNpbmNlIGl0J3MgYWxyZWFkeSBmdWxseSBjbGVhcmVkLgo+ID4KPiA+IEkgdGhpbmsg dGhpcyB3YXkgd2Ugc2hvdWxkIGJlIGFibGUgdG8gaGF2ZSBldmVyeXRoaW5nIGluIG9uZSBwbGFj ZSwgYW5kCj4gPiB0aGF0IHNob3VsZCBhbGxvdyB1cyB0byBzaW1wbGlmeSB0aGluZ3MgYSBsb3Qu Cj4gSSBkbyB0aGlzIHRyaWNrIGZvciBhdG9taWMgcmVzdW1lLCB3ZSBjYW4ndCBhbGxvY2F0ZSB0 aGUgb3JpZ2luYWwgZmIgaW4gdGhhdCBjYXNlCj4gYnV0IEkgc3RpbGwgd2FudCB0byBzYW5pdGl6 ZSBldmVyeXRoaW5nLiBUaGlzIGVpdGhlciBoYXBwZW5zIGJlY2F1c2UKPiBhIG5ldyBwcmltYXJ5 IGZiIGdldHMgY29tbWl0dGVkIG9yIHRoZSBwcmltYXJ5IGZiIGdldHMgZGlzYWJsZWQuCgpXZWxs IG9uIHJlc3VtZSB3ZSBkb24ndCBjYXJlIGF0IGFsbCBhYm91dCB0aGUgb3JpZ2luYWwgZmIgZm9y IHR3byByZWFzb25zOgotIEFueXRoaW5nIHJlbW90ZWx5IG1vZGVybiByZXN1bWVzIHdpdGggZXZl cnl0aGluZyBvZmYuCi0gV2Ugb25seSByZWNvdmVyIHRoZSBpbml0aWFsIHBsYW5lIGZyb20gdGhl IGJpb3MgdG8gZW5zdXJlIGJvb3QtdXAgaXMKICBjb21wbGV0ZWx5IGZsaWNrZXItZnJlZS4gSWYg d2UgZG9uJ3QgcmVzZXJ2ZSB0aGF0IHdlJ2xsIGFsbG9jYXRlIHJpbmdzCiAgYW5kIG90aGVyIGdw dSBvYmplY3RzIGluIHRoZXJlIHdoaWNoIGlzbid0IHByZXR0eS4KCkkgZG9uJ3QgdGhpbmsgd2Ug bmVlZCB0byBzYW5pdGl6ZSBwbGFuZXMgZWl0aGVyIGFzIGxvbmcgYXMgd2UgZm9yY2UgYSBmdWxs CnBsYW5lIHVwZGF0ZSBvbiByZXN1bWUgKGJ5IGZvcmNpbmcgcGxhbmVzX2NoYW5nZWQgb3Igc2lt aWxhcikuCgpBbmQgZm9yIHRoZSBsaWRfcmVzdG9yZSBjYXNlIHRoZSBwcm9ibGVtIGhhc24ndCBi ZWVuIHRoYXQgdGhlIGJpb3MgY2hhbmdlZAp0aGUgcGxhbmUgc3RhdGUgcmVhbGx5LCBidXQgdGhh dCBpdCBqdXN0IHdlbnQgYWhlYWQgYW5kIGRpc2FibGVkCmV2ZXJ5dGhpbmcgb24gaXRzIG93bi4g VGhhdCB3aWxsIHJlc3VsdCBpbiBhIGNydGNfZW5hYmxlIHdoaWNoIHdpbGwKcmVzdG9yZSBldmVy eXRoaW5nIGNvcnJlY3RseS4KCkltbyB3ZSBkb24ndCBuZWVkIHRvIGhhdmUgYSBwZXJmZWN0IHNh bml0aXplIGZvciBldmVyeXRoaW5nLCB0aGlzIGNvZGUKcmVhbGx5IGp1c3QgZml4ZXMgdXAgd2hh dCdzIGFjdHVhbGx5IGJlZW4gYnJva2VuIGluIHJlYWwtd29ybGQgbWFjaGluZXMKb3V0IHRoZXJl LiBUaGF0IGtpbmQgb2YgcmVhbC13b3JsZCB0ZXN0aW5nIGlzIGFsc28gd2h5IEkgd2FudCB0byBj aGFuZ2UgYXMKbGl0dGxlIGFzIHBvc3NpYmxlIGluIHRoZSBzYW5pdGl6ZV8qIGZ1bmN0aW9ucy4K Cj4gPj4gQEAgLTE1NDA0LDQ3ICsxNTM3MSwzMCBAQCBzdGF0aWMgdm9pZCByZWFkb3V0X3BsYW5l X3N0YXRlKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAo+ID4+ICAJc3RydWN0IGludGVsX3BsYW5l ICpwOwo+ID4+ICAJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqZHJtX3BsYW5lX3N0YXRlOwo+ID4+ ICAJYm9vbCBhY3RpdmUgPSBjcnRjX3N0YXRlLT5iYXNlLmFjdGl2ZTsKPiA+PiArCWJvb2wgd3Jv bmdfcGxhbmU7Cj4gPj4gIAo+ID4+IC0JaWYgKGFjdGl2ZSkgewo+ID4+IC0JCWNydGNfc3RhdGUt PnF1aXJrcyB8PSBQSVBFX0NPTkZJR19RVUlSS19JTklUSUFMX1BMQU5FUzsKPiA+PiAtCj4gPj4g LQkJLyogYXBwbHkgdG8gcHJldmlvdXMgc3cgc3RhdGUgdG9vICovCj4gPj4gLQkJdG9faW50ZWxf Y3J0Y19zdGF0ZShjcnRjLT5iYXNlLnN0YXRlKS0+cXVpcmtzIHw9Cj4gPj4gLQkJCVBJUEVfQ09O RklHX1FVSVJLX0lOSVRJQUxfUExBTkVTOwo+ID4+IC0JfQo+ID4+ICsJd3JvbmdfcGxhbmUgPSBh Y3RpdmUgJiYgIWludGVsX2NoZWNrX3BsYW5lX21hcHBpbmcoY3J0Yyk7Cj4gPj4gKwlpZiAod3Jv bmdfcGxhbmUpCj4gPj4gKwkJY3J0Yy0+cGlwZSA9ICFjcnRjLT5waXBlOwo+ID4+ICAKPiA+PiAg CWZvcl9lYWNoX2ludGVsX3BsYW5lKGNydGMtPmJhc2UuZGV2LCBwKSB7Cj4gPj4gLQkJYm9vbCB2 aXNpYmxlID0gYWN0aXZlOwo+ID4+IC0KPiA+PiAgCQlpZiAoY3J0Yy0+cGlwZSAhPSBwLT5waXBl KQo+ID4+ICAJCQljb250aW51ZTsKPiA+PiAgCj4gPj4gIAkJZHJtX3BsYW5lX3N0YXRlID0gcC0+ YmFzZS5zdGF0ZTsKPiA+PiAgCj4gPj4gLQkJLyogUGxhbmUgc2NhbGVyIHN0YXRlIGlzIG5vdCB0 b3VjaGVkIGhlcmUuIFRoZSBmaXJzdCBhdG9taWMKPiA+PiAtCQkgKiBjb21taXQgd2lsbCByZXN0 b3JlIGFsbCBwbGFuZSBzY2FsZXJzIHRvIGl0cyBvbGQgc3RhdGUuCj4gPj4gLQkJICovCj4gPj4g LQo+ID4+IC0JCWlmIChhY3RpdmUgJiYgcC0+YmFzZS50eXBlID09IERSTV9QTEFORV9UWVBFX1BS SU1BUlkpIHsKPiA+PiAtCQkJdmlzaWJsZSA9IHByaW1hcnlfZ2V0X2h3X3N0YXRlKGNydGMpOwo+ ID4+IC0JCQl0b19pbnRlbF9wbGFuZV9zdGF0ZShkcm1fcGxhbmVfc3RhdGUpLT52aXNpYmxlID0g dmlzaWJsZTsKPiA+PiAtCQl9IGVsc2Ugewo+ID4+IC0JCQkvKgo+ID4+IC0JCQkgKiB1bmtub3du IHN0YXRlLCBhc3N1bWUgaXQncyBvZmYgdG8gZm9yY2UgYSB0cmFuc2l0aW9uCj4gPj4gLQkJCSAq IHRvIG9uIHdoZW4gY2FsY3VsYXRpbmcgc3RhdGUgY2hhbmdlcy4KPiA+PiAtCQkJICovCj4gPj4g KwkJaWYgKHAtPmJhc2UudHlwZSA9PSBEUk1fUExBTkVfVFlQRV9QUklNQVJZKQo+ID4+ICsJCQl0 b19pbnRlbF9wbGFuZV9zdGF0ZShkcm1fcGxhbmVfc3RhdGUpLT52aXNpYmxlID0KPiA+PiArCQkJ CXByaW1hcnlfZ2V0X2h3X3N0YXRlKGNydGMpOwo+ID4+ICsJCWVsc2UKPiA+PiAgCQkJdG9faW50 ZWxfcGxhbmVfc3RhdGUoZHJtX3BsYW5lX3N0YXRlKS0+dmlzaWJsZSA9IGZhbHNlOwo+ID4+IC0J CX0KPiA+PiAgCj4gPj4gLQkJaWYgKHZpc2libGUpIHsKPiA+PiAtCQkJY3J0Y19zdGF0ZS0+YmFz ZS5wbGFuZV9tYXNrIHw9Cj4gPj4gLQkJCQkxIDw8IGRybV9wbGFuZV9pbmRleCgmcC0+YmFzZSk7 Cj4gPj4gLQkJfSBlbHNlIGlmIChjcnRjX3N0YXRlLT5iYXNlLnN0YXRlKSB7Cj4gPj4gLQkJCS8q IE1ha2UgdGhpcyB1bmNvbmRpdGlvbmFsIGZvciBhdG9taWMgaHcgcmVhZG91dC4gKi8KPiA+PiAt CQkJY3J0Y19zdGF0ZS0+YmFzZS5wbGFuZV9tYXNrICY9Cj4gPj4gLQkJCQl+KDEgPDwgZHJtX3Bs YW5lX2luZGV4KCZwLT5iYXNlKSk7Cj4gPj4gLQkJfQo+ID4+ICsJCWNydGNfc3RhdGUtPmJhc2Uu cGxhbmVfbWFzayB8PQo+ID4+ICsJCQkxIDw8IGRybV9wbGFuZV9pbmRleCgmcC0+YmFzZSk7Cj4g Pj4gIAl9Cj4gPj4gKwo+ID4+ICsJaWYgKHdyb25nX3BsYW5lKQo+ID4+ICsJCWNydGMtPnBpcGUg PSAhY3J0Yy0+cGlwZTsKPiA+PiAgfQo+ID4+ICAKPiA+PiAgc3RhdGljIHZvaWQgaW50ZWxfbW9k ZXNldF9yZWFkb3V0X2h3X3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gPj4gQEAgLTE1 NjY0LDYgKzE1NjE0LDkgQEAgdm9pZCBpbnRlbF9tb2Rlc2V0X2dlbV9pbml0KHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpCj4gPj4gIAkJCXVwZGF0ZV9zdGF0ZV9mYihjLT5wcmltYXJ5KTsKPiA+PiAg CQkJYy0+c3RhdGUtPnBsYW5lX21hc2sgJj0gfigxIDw8IGRybV9wbGFuZV9pbmRleChjLT5wcmlt YXJ5KSk7Cj4gPj4gIAkJfQo+ID4+ICsJCWVsc2UKPiA+PiArCQkJb2JqLT5mcm9udGJ1ZmZlcl9i aXRzIHw9Cj4gPj4gKwkJCQl0b19pbnRlbF9wbGFuZShjLT5wcmltYXJ5KS0+ZnJvbnRidWZmZXJf Yml0Owo+ID4gVGhpcyBpcyBwYXJ0IG9mIHBsYW5lIHN0YXRlIHJlY29uc3RydWN0aW9uLCBubyBu ZWVkIHRvIG1vdmUgaXQuIFRoZSBvbmx5Cj4gPiByZWFzb24gd2UgaGF2ZSB0byBwaW4gbGF0ZSBp cyB0aGF0IGdlbSBpc24ndCBpbml0aWFsaXplZCB5ZXQgZnVsbHkgd2hlbiB3ZQo+ID4gd2FudCB0 byByZWNvbnN0cnVjdCB0aGUgbW9kZXNldCBzdGF0ZS4gQW5kIHRoYXQgcGlubmluZyBzaG91bGRu J3QgZXZlcgo+ID4gZmFpbCwgaXQganVzdCBpbmNyZW1lbnRzIHBpbl9jb3VudCBhbmQgd3JpdGVz IHRoZSBwdGVzIChhZ2FpbikuCj4gV2h5IGJvdGhlciBoYW5kbGluZyB0aGUgcmV0dXJuIHZhbHVl IGF0IGFsbCB0aGVuPwoKVG8gcHJpbnQgdGhlIHdhcm5pbmcuIEkgdGhpbmsgZXZlbiB0aGUgY2xl YW51cCBpcyBwb2ludGxlc3Mgc2luY2UgYXQgd29yc3QKd2UnbGwgdW5kZXJydW4gdGhlIHBpbiBj b3VudCwgYW5kIHdlIGhhdmUgcHJvdGVjdGlvbiBmb3IgdGhhdCBhbHJlYWR5CihhZ2FpbiB3aXRo IGEgbG91ZCB3YXJuaW5nKS4gSWYgeW91IHdhbnQgeW91IGNhbiByZW1vdmUgdGhhdCBjb2RlLgot RGFuaWVsCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3Jh dGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ludGVsLWdmeAo=