From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v2 23/24] drm/i915/bdw: Dynamic page table allocations Date: Mon, 5 Jan 2015 15:52:49 +0100 Message-ID: <20150105145249.GD2711@phenom.ffwll.local> References: <1418922621-25818-1-git-send-email-michel.thierry@intel.com> <1419354987-4622-1-git-send-email-michel.thierry@intel.com> <1419354987-4622-24-git-send-email-michel.thierry@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-we0-f169.google.com (mail-we0-f169.google.com [74.125.82.169]) by gabe.freedesktop.org (Postfix) with ESMTP id DF96C6E1D7 for ; Mon, 5 Jan 2015 06:52:53 -0800 (PST) Received: by mail-we0-f169.google.com with SMTP id m14so8070231wev.0 for ; Mon, 05 Jan 2015 06:52:52 -0800 (PST) Content-Disposition: inline In-Reply-To: <1419354987-4622-24-git-send-email-michel.thierry@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Michel Thierry Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBEZWMgMjMsIDIwMTQgYXQgMDU6MTY6MjZQTSArMDAwMCwgTWljaGVsIFRoaWVycnkg d3JvdGU6Cj4gRnJvbTogQmVuIFdpZGF3c2t5IDxiZW5qYW1pbi53aWRhd3NreUBpbnRlbC5jb20+ Cj4gCj4gVGhpcyBmaW5pc2hlcyBvZmYgdGhlIGR5bmFtaWMgcGFnZSB0YWJsZXMgYWxsb2NhdGlv bnMsIGluIHRoZSBsZWdhY3kgMwo+IGxldmVsIHN0eWxlIHRoYXQgYWxyZWFkeSBleGlzdHMuIE1v c3QgZXZlcnl0aGluZyBoYXMgYWxyZWFkeSBiZWVuIHNldHVwCj4gdG8gdGhpcyBwb2ludCwgdGhl IHBhdGNoIGZpbmlzaGVzIG9mZiB0aGUgZW5hYmxpbmcgYnkgc2V0dGluZyB0aGUKPiBhcHByb3By aWF0ZSBmdW5jdGlvbiBwb2ludGVycy4KPiAKPiBab21iaWUgdHJhY2tpbmc6Cj4gVGhpcyBjb3Vs ZCBiZSBhIHNlcGFyYXRlIHBhdGNoLCBidXQgSSBmb3VuZCBpdCBoZWxwZnVsIGZvciBkZWJ1Z2dp bmcuCj4gU2luY2Ugd2Ugd3JpdGUgcGFnZSB0YWJsZXMgYXN5bmNocm9ub3VzbHkgd2l0aCByZXNw ZWN0IHRvIHRoZSBHUFUgdXNpbmcKPiB0aGVtLCB3ZSBjYW4ndCBhY3R1YWxseSBmcmVlIHRoZSBw YWdlIHRhYmxlcyB1bnRpbCB3ZSBrbm93IHRoZSBHUFUgd29uJ3QKPiB1c2UgdGhlbS4gV2l0aCB0 aGlzIHBhdGNoLCB0aGF0IGlzIGFsd2F5cyB3aGVuIHRoZSBjb250ZXh0IGRpZXMuICBJdAo+IHdv dWxkIGJlIHBvc3NpYmxlIHRvIHdyaXRlIGEgcmVhcGVyIHRvIGdvIHRocm91Z2ggem9tYmllcyBh bmQgY2xlYW4gdGhlbQo+IHVwIHdoZW4gdW5kZXIgbWVtb3J5IHByZXNzdXJlLiBUaGF0IGV4ZXJj aXNlIGlzIGxlZnQgZm9yIHRoZSByZWFkZXIuCgpBcyBtZW50aW9uIGluIHNvbWUgcHJldmlvdXMg cmVwbHksIGZyZWVpbmcgcGFnZXRhYmxlcyBpcyBhIHNlcGFyYXRlIGlzc3VlCmVudGlyZWx5LiBJ bW8gd2UgY2FuIGp1c3QgaWRsZSB0aGUgZ3B1IGFuZCB0aGVuIHJpcCBvdXQgYWxsIHBhZ2V0YWJs ZXMgZm9yCmVtcHR5IHZtcy4KCj4gU2NyYXRjaCB1bnVzZWQgcGFnZXM6Cj4gVGhlIG9iamVjdCBw YWdlcyBjYW4gZ2V0IGZyZWVkIGV2ZW4gaWYgYSBwYWdlIHRhYmxlIHN0aWxsIHBvaW50cyB0bwo+ IHRoZW0uICBMaWtlIHRoZSB6b21iaWUgZml4LCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkb24n dCBsZXQgb3VyIEdQVQo+IGFjY2VzcyBhcmJpdHJhcnkgbWVtb3J5IHdoZW4gd2UndmUgdW5tYXBw ZWQgdGhpbmdzLgoKSG0sIGVpdGhlciBJIGRvbid0IGZvbGxvdyBvciB0aGlzIHdvdWxkIG1lYW4g dGhhdCBvdXIgYWN0aXZlIHRyYWNraW5nIGlzCmJyb2tlbiBhbmQgd2UgcmVsZWFzZSBiYWNraW5n IHN0b3JhZ2UgYmVmb3JlIHRoZSBncHUgc3RvcHBlZCB1c2luZyBpdC4KCkluIGFueSBjYXNlIEkg dm90ZSB0byBzaW1wbGlmeSB0aGluZ3MgYSBsb3QgZm9yIG5vdyBhbmQganVzdCBuZXZlcgp0ZWFy ZG93biBwYWdldGFibGVzIGF0IGFsbC4gSW1wbGVtZW50aW5nIGEgbGFzdC1kaXRjaCBhdHRlbXB0 IHRvIGZyZWUKbWVtb3J5IGNhbiBiZSBkb25lIHdpdGggYSBsb3QgbGVzcyBjb21wbGV4aXR5IGlt byB0aGFuIHRyeWluZyB0byBiZSBzdXBlcgpjYXJlZnVsIHdpdGhvdXQgc3RhbGxpbmcgdGhlIGdw dSBpbiBub3JtYWwgb3BlcmF0aW9ucy4KCk9uZSBtb3JlIGNvbW1lbnQgYmVsb3cuCi1EYW5pZWwK Cj4gCj4gdjI6IFVwZGF0ZSBhbGlhc2luZy90cnVlIHBwZ3R0IGFsbG9jYXRlL3RlYXJkb3duL2Ns ZWFyIGZ1bmN0aW9ucyBmb3IKPiBnZW4gNiAmIDcuCj4gCj4gdjM6IFJlYmFzZS4KPiAKPiBTaWdu ZWQtb2ZmLWJ5OiBCZW4gV2lkYXdza3kgPGJlbkBid2lkYXdzay5uZXQ+Cj4gU2lnbmVkLW9mZi1i eTogTWljaGVsIFRoaWVycnkgPG1pY2hlbC50aGllcnJ5QGludGVsLmNvbT4gKHYyKykKPiAtLS0K PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMgfCAzNzcgKysrKysrKysrKysr KysrKysrKysrKysrKysrKystLS0tLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X2d0dC5oIHwgIDE2ICstCj4gIDIgZmlsZXMgY2hhbmdlZCwgMzI2IGluc2VydGlvbnMoKyksIDY3 IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9ndHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCj4gaW5kZXgg NjI1NDY3Ny4uNTcxYzMwNyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9ndHQuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCj4g QEAgLTYwMiw3ICs2MDIsNyBAQCBzdGF0aWMgdm9pZCBnZW44X3BwZ3R0X2luc2VydF9lbnRyaWVz KHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJfQo+ICB9Cj4gIAo+IC1zdGF0aWMg dm9pZCBfX2dlbjhfZG9fbWFwX3B0KGdlbjhfcHBndHRfcGRlX3QgKnBkZSwKPiArc3RhdGljIHZv aWQgX19nZW44X2RvX21hcF9wdChnZW44X3BwZ3R0X3BkZV90ICogY29uc3QgcGRlLAo+ICAJCQkg ICAgIHN0cnVjdCBpOTE1X3BhZ2V0YWIgKnB0LAo+ICAJCQkgICAgIHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpCj4gIHsKPiBAQCAtNjE5LDcgKzYxOSw3IEBAIHN0YXRpYyB2b2lkIGdlbjhfbWFwX3Bh Z2V0YWJsZV9yYW5nZShzdHJ1Y3QgaTkxNV9wYWdlZGlyICpwZCwKPiAgCQkJCSAgICAgdWludDY0 X3QgbGVuZ3RoLAo+ICAJCQkJICAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICB7Cj4gLQln ZW44X3BwZ3R0X3BkZV90ICpwYWdlZGlyID0ga21hcF9hdG9taWMocGQtPnBhZ2UpOwo+ICsJZ2Vu OF9wcGd0dF9wZGVfdCAqIGNvbnN0IHBhZ2VkaXIgPSBrbWFwX2F0b21pYyhwZC0+cGFnZSk7Cj4g IAlzdHJ1Y3QgaTkxNV9wYWdldGFiICpwdDsKPiAgCXVpbnQ2NF90IHRlbXAsIHBkZTsKPiAgCj4g QEAgLTYzMiw4ICs2MzIsOSBAQCBzdGF0aWMgdm9pZCBnZW44X21hcF9wYWdldGFibGVfcmFuZ2Uo c3RydWN0IGk5MTVfcGFnZWRpciAqcGQsCj4gIAlrdW5tYXBfYXRvbWljKHBhZ2VkaXIpOwo+ICB9 Cj4gIAo+IC1zdGF0aWMgdm9pZCBnZW44X3RlYXJkb3duX3ZhX3JhbmdlKHN0cnVjdCBpOTE1X2Fk ZHJlc3Nfc3BhY2UgKnZtLAo+IC0JCQkJICAgdWludDY0X3Qgc3RhcnQsIHVpbnQ2NF90IGxlbmd0 aCkKPiArc3RhdGljIHZvaWQgX19nZW44X3RlYXJkb3duX3ZhX3JhbmdlKHN0cnVjdCBpOTE1X2Fk ZHJlc3Nfc3BhY2UgKnZtLAo+ICsJCQkJICAgICB1aW50NjRfdCBzdGFydCwgdWludDY0X3QgbGVu Z3RoLAo+ICsJCQkJICAgICBib29sIGRlYWQpCj4gIHsKPiAgCXN0cnVjdCBpOTE1X2h3X3BwZ3R0 ICpwcGd0dCA9Cj4gIAkJCQljb250YWluZXJfb2Yodm0sIHN0cnVjdCBpOTE1X2h3X3BwZ3R0LCBi YXNlKTsKPiBAQCAtNjU1LDYgKzY1NiwxMyBAQCBzdGF0aWMgdm9pZCBnZW44X3RlYXJkb3duX3Zh X3JhbmdlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJCQkgICAgIHBkcGUsIHZt KTsKPiAgCQkJY29udGludWU7Cj4gIAkJfSBlbHNlIHsKPiArCQkJaWYgKGRlYWQgJiYgcGQtPnpv bWJpZSkgewo+ICsJCQkJV0FSTl9PTih0ZXN0X2JpdChwZHBlLCBwcGd0dC0+cGRwLnVzZWRfcGRw ZXMpKTsKPiArCQkJCWZyZWVfcGRfc2luZ2xlKHBkLCB2bS0+ZGV2KTsKPiArCQkJCXBwZ3R0LT5w ZHAucGFnZWRpcltwZHBlXSA9IE5VTEw7Cj4gKwkJCQljb250aW51ZTsKPiArCQkJfQo+ICsKPiAg CQkJV0FSTighdGVzdF9iaXQocGRwZSwgcHBndHQtPnBkcC51c2VkX3BkcGVzKSwKPiAgCQkJICAg ICAiUERQRSAlZCBub3QgcmVzZXJ2ZWQsIGJ1dCBpcyBhbGxvY2F0ZWQgKCVwKSIsCj4gIAkJCSAg ICAgcGRwZSwgdm0pOwo+IEBAIC02NjYsMzQgKzY3NCw2NCBAQCBzdGF0aWMgdm9pZCBnZW44X3Rl YXJkb3duX3ZhX3JhbmdlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJCQkJICAg ICAiUERFICVkIGlzIG5vdCBhbGxvY2F0ZWQsIGJ1dCBpcyByZXNlcnZlZCAoJXApXG4iLAo+ICAJ CQkJICAgICBwZGUsIHZtKTsKPiAgCQkJCWNvbnRpbnVlOwo+IC0JCQl9IGVsc2UKPiArCQkJfSBl bHNlIHsKPiArCQkJCWlmIChkZWFkICYmIHB0LT56b21iaWUpIHsKPiArCQkJCQlXQVJOX09OKHRl c3RfYml0KHBkZSwgcGQtPnVzZWRfcGRlcykpOwo+ICsJCQkJCWZyZWVfcHRfc2luZ2xlKHB0LCB2 bS0+ZGV2KTsKPiArCQkJCQlwZC0+cGFnZV90YWJsZXNbcGRlXSA9IE5VTEw7Cj4gKwkJCQkJY29u dGludWU7Cj4gKwkJCQl9Cj4gIAkJCQlXQVJOKCF0ZXN0X2JpdChwZGUsIHBkLT51c2VkX3BkZXMp LAo+ICAJCQkJICAgICAiUERFICVkIG5vdCByZXNlcnZlZCwgYnV0IGlzIGFsbG9jYXRlZCAoJXAp IiwKPiAgCQkJCSAgICAgcGRlLCB2bSk7Cj4gKwkJCX0KPiAgCj4gIAkJCWJpdG1hcF9jbGVhcihw dC0+dXNlZF9wdGVzLAo+ICAJCQkJICAgICBnZW44X3B0ZV9pbmRleChwZF9zdGFydCksCj4gIAkJ CQkgICAgIGdlbjhfcHRlX2NvdW50KHBkX3N0YXJ0LCBwZF9sZW4pKTsKPiAgCj4gIAkJCWlmIChi aXRtYXBfZW1wdHkocHQtPnVzZWRfcHRlcywgR0VOOF9QVEVTX1BFUl9QQUdFKSkgewo+ICsJCQkJ V0FSTl9PTighdGVzdF9hbmRfY2xlYXJfYml0KHBkZSwgcGQtPnVzZWRfcGRlcykpOwo+ICsJCQkJ aWYgKCFkZWFkKSB7Cj4gKwkJCQkJcHQtPnpvbWJpZSA9IDE7Cj4gKwkJCQkJY29udGludWU7Cj4g KwkJCQl9Cj4gIAkJCQlmcmVlX3B0X3NpbmdsZShwdCwgdm0tPmRldik7Cj4gIAkJCQlwZC0+cGFn ZV90YWJsZXNbcGRlXSA9IE5VTEw7Cj4gLQkJCQlXQVJOX09OKCF0ZXN0X2FuZF9jbGVhcl9iaXQo cGRlLCBwZC0+dXNlZF9wZGVzKSk7Cj4gKwo+ICAJCQl9Cj4gIAkJfQo+ICAKPiArCQlnZW44X3Bw Z3R0X2NsZWFyX3JhbmdlKHZtLCBwZF9zdGFydCwgcGRfbGVuLCB0cnVlKTsKPiArCj4gIAkJaWYg KGJpdG1hcF9lbXB0eShwZC0+dXNlZF9wZGVzLCBHRU44X1BERVNfUEVSX1BBR0UpKSB7Cj4gKwkJ CVdBUk5fT04oIXRlc3RfYW5kX2NsZWFyX2JpdChwZHBlLCBwcGd0dC0+cGRwLnVzZWRfcGRwZXMp KTsKPiArCQkJaWYgKCFkZWFkKSB7Cj4gKwkJCQkvKiBXZSd2ZSB1bm1hcHBlZCBhIHBvc3NpYmx5 IGxpdmUgY29udGV4dC4gTWFrZQo+ICsJCQkJICogbm90ZSBvZiBpdCBzbyB3ZSBjYW4gY2xlYW4g aXQgdXAgbGF0ZXIuICovCj4gKwkJCQlwZC0+em9tYmllID0gMTsKPiArCQkJCWNvbnRpbnVlOwo+ ICsJCQl9Cj4gIAkJCWZyZWVfcGRfc2luZ2xlKHBkLCB2bS0+ZGV2KTsKPiAgCQkJcHBndHQtPnBk cC5wYWdlZGlyW3BkcGVdID0gTlVMTDsKPiAtCQkJV0FSTl9PTighdGVzdF9hbmRfY2xlYXJfYml0 KHBkcGUsIHBwZ3R0LT5wZHAudXNlZF9wZHBlcykpOwo+ICAJCX0KPiAgCX0KPiAgfQo+ICAKPiAr c3RhdGljIHZvaWQgZ2VuOF90ZWFyZG93bl92YV9yYW5nZShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3Nw YWNlICp2bSwKPiArCQkJCSAgIHVpbnQ2NF90IHN0YXJ0LCB1aW50NjRfdCBsZW5ndGgpCj4gK3sK PiArCV9fZ2VuOF90ZWFyZG93bl92YV9yYW5nZSh2bSwgc3RhcnQsIGxlbmd0aCwgZmFsc2UpOwo+ ICt9Cj4gKwo+ICBzdGF0aWMgdm9pZCBnZW44X3BwZ3R0X2ZyZWUoc3RydWN0IGk5MTVfaHdfcHBn dHQgKnBwZ3R0KQo+ICB7Cj4gLQlnZW44X3RlYXJkb3duX3ZhX3JhbmdlKCZwcGd0dC0+YmFzZSwK PiAtCQkJICAgICAgIHBwZ3R0LT5iYXNlLnN0YXJ0LCBwcGd0dC0+YmFzZS50b3RhbCk7Cj4gKwl0 cmFjZV9pOTE1X3ZhX3RlYXJkb3duKCZwcGd0dC0+YmFzZSwKPiArCQkJICAgICAgIHBwZ3R0LT5i YXNlLnN0YXJ0LCBwcGd0dC0+YmFzZS50b3RhbCwKPiArCQkJICAgICAgIFZNX1RPX1RSQUNFX05B TUUoJnBwZ3R0LT5iYXNlKSk7Cj4gKwlfX2dlbjhfdGVhcmRvd25fdmFfcmFuZ2UoJnBwZ3R0LT5i YXNlLAo+ICsJCQkJIHBwZ3R0LT5iYXNlLnN0YXJ0LCBwcGd0dC0+YmFzZS50b3RhbCwKPiArCQkJ CSB0cnVlKTsKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9jbGVhbnVwKHN0cnVj dCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQo+IEBAIC03MDQsNjcgKzc0MiwxNzcgQEAgc3RhdGlj IHZvaWQgZ2VuOF9wcGd0dF9jbGVhbnVwKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQo+ ICAJZ2VuOF9wcGd0dF9mcmVlKHBwZ3R0KTsKPiAgfQo+ICAKPiAtc3RhdGljIGludCBnZW44X3Bw Z3R0X2FsbG9jX3BhZ2V0YWJzKHN0cnVjdCBpOTE1X3BhZ2VkaXIgKnBkLAo+ICsvKioKPiArICog Z2VuOF9wcGd0dF9hbGxvY19wYWdldGFicygpIC0gQWxsb2NhdGUgcGFnZSB0YWJsZXMgZm9yIFZB IHJhbmdlLgo+ICsgKiBAcHBndHQ6CU1hc3RlciBwcGd0dCBzdHJ1Y3R1cmUuCj4gKyAqIEBwZDoJ CVBhZ2UgZGlyZWN0b3J5IGZvciB0aGlzIGFkZHJlc3MgcmFuZ2UuCj4gKyAqIEBzdGFydDoJU3Rh cnRpbmcgdmlydHVhbCBhZGRyZXNzIHRvIGJlZ2luIGFsbG9jYXRpb25zLgo+ICsgKiBAbGVuZ3Ro CVNpemUgb2YgdGhlIGFsbG9jYXRpb25zLgo+ICsgKiBAbmV3X3B0czoJQml0bWFwIHNldCBieSBm dW5jdGlvbiB3aXRoIG5ldyBhbGxvY2F0aW9ucy4gTGlrZWx5IHVzZWQgYnkgdGhlCj4gKyAqCQlj YWxsZXIgdG8gZnJlZSBvbiBlcnJvci4KPiArICoKPiArICogQWxsb2NhdGUgdGhlIHJlcXVpcmVk IG51bWJlciBvZiBwYWdlIHRhYmxlcy4gRXh0cmVtZWx5IHNpbWlsYXIgdG8KPiArICogZ2VuOF9w cGd0dF9hbGxvY19wYWdlZGlycygpLiBUaGUgbWFpbiBkaWZmZXJlbmNlIGlzIGhlcmUgd2UgYXJl IGxpbWl0ZWQgYnkKPiArICogdGhlIHBhZ2UgZGlyZWN0b3J5IGJvdW5kYXJ5IChpbnN0ZWFkIG9m IHRoZSBwYWdlIGRpcmVjdG9yeSBwb2ludGVyKS4gVGhhdAo+ICsgKiBib3VuZGFyeSBpcyAxR0Ig dmlydHVhbC4gVGhlcmVmb3JlLCB1bmxpa2UgZ2VuOF9wcGd0dF9hbGxvY19wYWdlZGlycygpLCBp dCBpcwo+ICsgKiBwb3NzaWJsZSwgYW5kIGxpa2VseSB0aGF0IHRoZSBjYWxsZXIgd2lsbCBuZWVk IHRvIHVzZSBtdWx0aXBsZSBjYWxscyBvZiB0aGlzCj4gKyAqIGZ1bmN0aW9uIHRvIGFjaGlldmUg dGhlIGFwcHJvcHJpYXRlIGFsbG9jYXRpb24uCj4gKyAqCj4gKyAqIFJldHVybjogMCBpZiBzdWNj ZXNzOyBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KPiArICovCj4gK3N0YXRpYyBpbnQg Z2VuOF9wcGd0dF9hbGxvY19wYWdldGFicyhzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQsCj4g KwkJCQkgICAgIHN0cnVjdCBpOTE1X3BhZ2VkaXIgKnBkLAo+ICAJCQkJICAgICB1aW50NjRfdCBz dGFydCwKPiAgCQkJCSAgICAgdWludDY0X3QgbGVuZ3RoLAo+IC0JCQkJICAgICBzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KQo+ICsJCQkJICAgICB1bnNpZ25lZCBsb25nICpuZXdfcHRzKQo+ICB7Cj4g LQlzdHJ1Y3QgaTkxNV9wYWdldGFiICp1bnVzZWQ7Cj4gKwlzdHJ1Y3QgaTkxNV9wYWdldGFiICpw dDsKPiAgCXVpbnQ2NF90IHRlbXA7Cj4gIAl1aW50MzJfdCBwZGU7Cj4gIAo+IC0JZ2VuOF9mb3Jf ZWFjaF9wZGUodW51c2VkLCBwZCwgc3RhcnQsIGxlbmd0aCwgdGVtcCwgcGRlKSB7Cj4gLQkJQlVH X09OKHVudXNlZCk7Cj4gLQkJcGQtPnBhZ2VfdGFibGVzW3BkZV0gPSBhbGxvY19wdF9zaW5nbGUo ZGV2KTsKPiAtCQlpZiAoSVNfRVJSKHBkLT5wYWdlX3RhYmxlc1twZGVdKSkKPiArCWdlbjhfZm9y X2VhY2hfcGRlKHB0LCBwZCwgc3RhcnQsIGxlbmd0aCwgdGVtcCwgcGRlKSB7Cj4gKwkJLyogRG9u J3QgcmVhbGxvY2F0ZSBwYWdlIHRhYmxlcyAqLwo+ICsJCWlmIChwdCkgewo+ICsJCQkvKiBTY3Jh dGNoIGlzIG5ldmVyIGFsbG9jYXRlZCB0aGlzIHdheSAqLwo+ICsJCQlXQVJOX09OKHB0LT5zY3Jh dGNoKTsKPiArCQkJLyogSWYgdGhlcmUgaXMgYSB6b21iaWUsIHdlIGNhbiByZXVzZSBpdCBhbmQg c2F2ZSB0aW1lCj4gKwkJCSAqIG9uIHRoZSBhbGxvY2F0aW9uLiBJZiB3ZSBjbGVhciB0aGUgem9t YmllIHN0YXR1cyBhbmQKPiArCQkJICogdGhlIGNhbGxlciBzb21laG93IGZhaWxzLCB3ZSdsbCBw cm9iYWJseSBoaXQgc29tZQo+ICsJCQkgKiBhc3NlcnRpb25zLCBzbyBpdCdzIHVwIHRvIHRoZW0g dG8gZml4IHVwIHRoZSBiaXRtYXBzLgo+ICsJCQkgKi8KPiArCQkJY29udGludWU7Cj4gKwkJfQo+ ICsKPiArCQlwdCA9IGFsbG9jX3B0X3NpbmdsZShwcGd0dC0+YmFzZS5kZXYpOwo+ICsJCWlmIChJ U19FUlIocHQpKQo+ICAJCQlnb3RvIHVud2luZF9vdXQ7Cj4gKwo+ICsJCXBkLT5wYWdlX3RhYmxl c1twZGVdID0gcHQ7Cj4gKwkJc2V0X2JpdChwZGUsIG5ld19wdHMpOwo+ICAJfQo+ICAKPiAgCXJl dHVybiAwOwo+ICAKPiAgdW53aW5kX291dDoKPiAtCXdoaWxlIChwZGUtLSkKPiAtCQlmcmVlX3B0 X3NpbmdsZShwZC0+cGFnZV90YWJsZXNbcGRlXSwgZGV2KTsKPiArCWZvcl9lYWNoX3NldF9iaXQo cGRlLCBuZXdfcHRzLCBHRU44X1BERVNfUEVSX1BBR0UpCj4gKwkJZnJlZV9wdF9zaW5nbGUocGQt PnBhZ2VfdGFibGVzW3BkZV0sIHBwZ3R0LT5iYXNlLmRldik7Cj4gIAo+ICAJcmV0dXJuIC1FTk9N RU07Cj4gIH0KPiAgCj4gLS8qIGJpdG1hcCBvZiBuZXcgcGFnZWRpcnMgKi8KPiAtc3RhdGljIGlu dCBnZW44X3BwZ3R0X2FsbG9jX3BhZ2VkaXJzKHN0cnVjdCBpOTE1X3BhZ2VkaXJwbyAqcGRwLAo+ ICsvKioKPiArICogZ2VuOF9wcGd0dF9hbGxvY19wYWdlZGlycygpIC0gQWxsb2NhdGUgcGFnZSBk aXJlY3RvcmllcyBmb3IgVkEgcmFuZ2UuCj4gKyAqIEBwcGd0dDoJTWFzdGVyIHBwZ3R0IHN0cnVj dHVyZS4KPiArICogQHBkcDoJUGFnZSBkaXJlY3RvcnkgcG9pbnRlciBmb3IgdGhpcyBhZGRyZXNz IHJhbmdlLgo+ICsgKiBAc3RhcnQ6CVN0YXJ0aW5nIHZpcnR1YWwgYWRkcmVzcyB0byBiZWdpbiBh bGxvY2F0aW9ucy4KPiArICogQGxlbmd0aAlTaXplIG9mIHRoZSBhbGxvY2F0aW9ucy4KPiArICog QG5ld19wZHMJQml0bWFwIHNldCBieSBmdW5jdGlvbiB3aXRoIG5ldyBhbGxvY2F0aW9ucy4gTGlr ZWx5IHVzZWQgYnkgdGhlCj4gKyAqCQljYWxsZXIgdG8gZnJlZSBvbiBlcnJvci4KPiArICoKPiAr ICogQWxsb2NhdGUgdGhlIHJlcXVpcmVkIG51bWJlciBvZiBwYWdlIGRpcmVjdG9yaWVzIHN0YXJ0 aW5nIGF0IHRoZSBwZGUgaW5kZXggb2YKPiArICogQHN0YXJ0LCBhbmQgZW5kaW5nIGF0IHRoZSBw ZGUgaW5kZXggQHN0YXJ0ICsgQGxlbmd0aC4gVGhpcyBmdW5jdGlvbiB3aWxsIHNraXAKPiArICog b3ZlciBhbHJlYWR5IGFsbG9jYXRlZCBwYWdlIGRpcmVjdG9yaWVzIHdpdGhpbiB0aGUgcmFuZ2Us IGFuZCBvbmx5IGFsbG9jYXRlCj4gKyAqIG5ldyBvbmVzLCBzZXR0aW5nIHRoZSBhcHByb3ByaWF0 ZSBwb2ludGVyIHdpdGhpbiB0aGUgcGRwIGFzIHdlbGwgYXMgdGhlCj4gKyAqIGNvcnJlY3QgcG9z aXRpb24gaW4gdGhlIGJpdG1hcCBAbmV3X3Bkcy4KPiArICoKPiArICogVGhlIGZ1bmN0aW9uIHdp bGwgb25seSBhbGxvY2F0ZSB0aGUgcGFnZXMgd2l0aGluIHRoZSByYW5nZSBmb3IgYSBnaXZlIHBh Z2UKPiArICogZGlyZWN0b3J5IHBvaW50ZXIuIEluIG90aGVyIHdvcmRzLCBpZiBAc3RhcnQgKyBA bGVuZ3RoIHN0cmFkZGxlcyBhIHZpcnR1YWxseQo+ICsgKiBhZGRyZXNzZWQgUERQIGJvdW5kYXJ5 ICg1MTJHQiBmb3IgNGsgcGFnZXMpLCB0aGVyZSB3aWxsIGJlIG1vcmUgYWxsb2NhdGlvbnMKPiAr ICogcmVxdWlyZWQgYnkgdGhlIGNhbGxlciwgVGhpcyBpcyBub3QgY3VycmVudGx5IHBvc3NpYmxl LCBhbmQgdGhlIEJVRyBpbiB0aGUKPiArICogY29kZSB3aWxsIHByZXZlbnQgaXQuCj4gKyAqCj4g KyAqIFJldHVybjogMCBpZiBzdWNjZXNzOyBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4K PiArICovCj4gK3N0YXRpYyBpbnQgZ2VuOF9wcGd0dF9hbGxvY19wYWdlZGlycyhzdHJ1Y3QgaTkx NV9od19wcGd0dCAqcHBndHQsCj4gKwkJCQkgICAgIHN0cnVjdCBpOTE1X3BhZ2VkaXJwbyAqcGRw LAo+ICAJCQkJICAgICB1aW50NjRfdCBzdGFydCwKPiAgCQkJCSAgICAgdWludDY0X3QgbGVuZ3Ro LAo+IC0JCQkJICAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICsJCQkJICAgICB1bnNpZ25l ZCBsb25nICpuZXdfcGRzKQo+ICB7Cj4gLQlzdHJ1Y3QgaTkxNV9wYWdlZGlyICp1bnVzZWQ7Cj4g KwlzdHJ1Y3QgaTkxNV9wYWdlZGlyICpwZDsKPiAgCXVpbnQ2NF90IHRlbXA7Cj4gIAl1aW50MzJf dCBwZHBlOwo+ICAKPiArCUJVR19PTighYml0bWFwX2VtcHR5KG5ld19wZHMsIEdFTjhfTEVHQUNZ X1BEUEVTKSk7Cj4gKwo+ICAJLyogRklYTUU6IFBQR1RUIGNvbnRhaW5lcl9vZiB3b24ndCB3b3Jr IGZvciA2NGIgKi8KPiAgCUJVR19PTigoc3RhcnQgKyBsZW5ndGgpID4gMHg4MDAwMDAwMDBVTEwp Owo+ICAKPiAtCWdlbjhfZm9yX2VhY2hfcGRwZSh1bnVzZWQsIHBkcCwgc3RhcnQsIGxlbmd0aCwg dGVtcCwgcGRwZSkgewo+IC0JCUJVR19PTih1bnVzZWQpOwo+IC0JCXBkcC0+cGFnZWRpcltwZHBl XSA9IGFsbG9jX3BkX3NpbmdsZShkZXYpOwo+ICsJZ2VuOF9mb3JfZWFjaF9wZHBlKHBkLCBwZHAs IHN0YXJ0LCBsZW5ndGgsIHRlbXAsIHBkcGUpIHsKPiArCQlpZiAocGQpCj4gKwkJCWNvbnRpbnVl Owo+ICAKPiAtCQlpZiAoSVNfRVJSKHBkcC0+cGFnZWRpcltwZHBlXSkpCj4gKwkJcGQgPSBhbGxv Y19wZF9zaW5nbGUocHBndHQtPmJhc2UuZGV2KTsKPiArCQlpZiAoSVNfRVJSKHBkKSkKPiAgCQkJ Z290byB1bndpbmRfb3V0Owo+ICsKPiArCQlwZHAtPnBhZ2VkaXJbcGRwZV0gPSBwZDsKPiArCQlz ZXRfYml0KHBkcGUsIG5ld19wZHMpOwo+ICAJfQo+ICAKPiAgCXJldHVybiAwOwo+ICAKPiAgdW53 aW5kX291dDoKPiAtCXdoaWxlIChwZHBlLS0pCj4gLQkJZnJlZV9wZF9zaW5nbGUocGRwLT5wYWdl ZGlyW3BkcGVdLCBkZXYpOwo+ICsJZm9yX2VhY2hfc2V0X2JpdChwZHBlLCBuZXdfcGRzLCBHRU44 X0xFR0FDWV9QRFBFUykKPiArCQlmcmVlX3BkX3NpbmdsZShwZHAtPnBhZ2VkaXJbcGRwZV0sIHBw Z3R0LT5iYXNlLmRldik7Cj4gIAo+ICAJcmV0dXJuIC1FTk9NRU07Cj4gIH0KPiAgCj4gK3N0YXRp YyBpbmxpbmUgdm9pZAo+ICtmcmVlX2dlbjhfdGVtcF9iaXRtYXBzKHVuc2lnbmVkIGxvbmcgKm5l d19wZHMsIHVuc2lnbmVkIGxvbmcgKipuZXdfcHRzKQo+ICt7Cj4gKwlpbnQgaTsKPiArCWZvciAo aSA9IDA7IGkgPCBHRU44X0xFR0FDWV9QRFBFUzsgaSsrKQo+ICsJCWtmcmVlKG5ld19wdHNbaV0p Owo+ICsJa2ZyZWUobmV3X3B0cyk7Cj4gKwlrZnJlZShuZXdfcGRzKTsKPiArfQo+ICsKPiArLyog RmlsbHMgaW4gdGhlIHBhZ2UgZGlyZWN0b3J5IGJpdG1hcCwgYW50IHRoZSBhcnJheSBvZiBwYWdl IHRhYmxlcyBiaXRtYXAuIEJvdGgKPiArICogb2YgdGhlc2UgYXJlIGJhc2VkIG9uIHRoZSBudW1i ZXIgb2YgUERQRXMgaW4gdGhlIHN5c3RlbS4KPiArICovCj4gK2ludCBfX211c3RfY2hlY2sgYWxs b2NfZ2VuOF90ZW1wX2JpdG1hcHModW5zaWduZWQgbG9uZyAqKm5ld19wZHMsCj4gKwkJCQkJIHVu c2lnbmVkIGxvbmcgKioqbmV3X3B0cykKPiArewo+ICsJaW50IGk7Cj4gKwl1bnNpZ25lZCBsb25n ICpwZHM7Cj4gKwl1bnNpZ25lZCBsb25nICoqcHRzOwo+ICsKPiArCXBkcyA9IGtjYWxsb2MoQklU U19UT19MT05HUyhHRU44X0xFR0FDWV9QRFBFUyksIHNpemVvZih1bnNpZ25lZCBsb25nKSwgR0ZQ X0tFUk5FTCk7Cj4gKwlpZiAoIXBkcykKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlwdHMg PSBrY2FsbG9jKEdFTjhfUERFU19QRVJfUEFHRSwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcgKiksIEdG UF9LRVJORUwpOwo+ICsJaWYgKCFwdHMpIHsKPiArCQlrZnJlZShwZHMpOwo+ICsJCXJldHVybiAt RU5PTUVNOwo+ICsJfQo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBHRU44X0xFR0FDWV9QRFBFUzsg aSsrKSB7Cj4gKwkJcHRzW2ldID0ga2NhbGxvYyhCSVRTX1RPX0xPTkdTKEdFTjhfUERFU19QRVJf UEFHRSksCj4gKwkJCQkgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLCBHRlBfS0VSTkVMKTsKPiArCQlp ZiAoIXB0c1tpXSkKPiArCQkJZ290byBlcnJfb3V0Owo+ICsJfQo+ICsKPiArCSpuZXdfcGRzID0g cGRzOwo+ICsJKm5ld19wdHMgPSAodW5zaWduZWQgbG9uZyAqKilwdHM7Cj4gKwo+ICsJcmV0dXJu IDA7Cj4gKwo+ICtlcnJfb3V0Ogo+ICsJZnJlZV9nZW44X3RlbXBfYml0bWFwcyhwZHMsIHB0cyk7 Cj4gKwlyZXR1cm4gLUVOT01FTTsKPiArfQo+ICsKPiAgc3RhdGljIGludCBnZW44X2FsbG9jX3Zh X3JhbmdlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJCQkgICAgICAgdWludDY0 X3Qgc3RhcnQsCj4gIAkJCSAgICAgICB1aW50NjRfdCBsZW5ndGgpCj4gIHsKPiAgCXN0cnVjdCBp OTE1X2h3X3BwZ3R0ICpwcGd0dCA9Cj4gIAkJY29udGFpbmVyX29mKHZtLCBzdHJ1Y3QgaTkxNV9o d19wcGd0dCwgYmFzZSk7Cj4gKwl1bnNpZ25lZCBsb25nICpuZXdfcGFnZV9kaXJzLCAqKm5ld19w YWdlX3RhYmxlczsKPiAgCXN0cnVjdCBpOTE1X3BhZ2VkaXIgKnBkOwo+ICAJY29uc3QgdWludDY0 X3Qgb3JpZ19zdGFydCA9IHN0YXJ0Owo+ICAJY29uc3QgdWludDY0X3Qgb3JpZ19sZW5ndGggPSBs ZW5ndGg7Cj4gQEAgLTc3Miw0MyArOTIwLDEwMyBAQCBzdGF0aWMgaW50IGdlbjhfYWxsb2NfdmFf cmFuZ2Uoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gIAl1aW50MzJfdCBwZHBlOwo+ ICAJaW50IHJldDsKPiAgCj4gLQkvKiBEbyB0aGUgYWxsb2NhdGlvbnMgZmlyc3Qgc28gd2UgY2Fu IGVhc2lseSBiYWlsIG91dCAqLwo+IC0JcmV0ID0gZ2VuOF9wcGd0dF9hbGxvY19wYWdlZGlycygm cHBndHQtPnBkcCwgc3RhcnQsIGxlbmd0aCwKPiAtCQkJCQlwcGd0dC0+YmFzZS5kZXYpOwo+ICsj aWZuZGVmIENPTkZJR182NEJJVAo+ICsJLyogRGlzYWxsb3cgNjRiIGFkZHJlc3Mgb24gMzJiIHBs YXRmb3Jtcy4gTm90aGluZyBpcyB3cm9uZyB3aXRoIGRvaW5nCj4gKwkgKiB0aGlzIGluIGhhcmR3 YXJlLCBidXQgYSBsb3Qgb2YgdGhlIGRybSBjb2RlIGlzIG5vdCBwcmVwYXJlZCB0byBoYW5kbGUK PiArCSAqIDY0YiBvZmZzZXQgb24gMzJiIHBsYXRmb3Jtcy4gKi8KPiArCWlmIChzdGFydCArIGxl bmd0aCA+IDB4MTAwMDAwMDAwVUxMKQo+ICsJCXJldHVybiAtRTJCSUc7Cj4gKyNlbmRpZgo+ICsK PiArCS8qIFdyYXAgaXMgbmV2ZXIgb2theSBzaW5jZSB3ZSBjYW4gb25seSByZXByZXNlbnQgNDhi LCBhbmQgd2UgZG9uJ3QKPiArCSAqIGFjdHVhbGx5IHVzZSB0aGUgb3RoZXIgc2lkZSBvZiB0aGUg Y2Fub25pY2FsIGFkZHJlc3Mgc3BhY2UuCj4gKwkgKi8KPiArCWlmIChXQVJOX09OKHN0YXJ0ICsg bGVuZ3RoIDwgc3RhcnQpKQo+ICsJCXJldHVybiAtRVJBTkdFOwo+ICsKPiArCXJldCA9IGFsbG9j X2dlbjhfdGVtcF9iaXRtYXBzKCZuZXdfcGFnZV9kaXJzLCAmbmV3X3BhZ2VfdGFibGVzKTsKPiAg CWlmIChyZXQpCj4gIAkJcmV0dXJuIHJldDsKPiAgCj4gKwkvKiBEbyB0aGUgYWxsb2NhdGlvbnMg Zmlyc3Qgc28gd2UgY2FuIGVhc2lseSBiYWlsIG91dCAqLwo+ICsJcmV0ID0gZ2VuOF9wcGd0dF9h bGxvY19wYWdlZGlycyhwcGd0dCwgJnBwZ3R0LT5wZHAsIHN0YXJ0LCBsZW5ndGgsCj4gKwkJCQkJ bmV3X3BhZ2VfZGlycyk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZnJlZV9nZW44X3RlbXBfYml0bWFw cyhuZXdfcGFnZV9kaXJzLCBuZXdfcGFnZV90YWJsZXMpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9 Cj4gKwo+ICsJLyogRm9yIGV2ZXJ5IHBhZ2UgZGlyZWN0b3J5IHJlZmVyZW5jZWQsIGFsbG9jYXRl IHBhZ2UgdGFibGVzICovCj4gIAlnZW44X2Zvcl9lYWNoX3BkcGUocGQsICZwcGd0dC0+cGRwLCBz dGFydCwgbGVuZ3RoLCB0ZW1wLCBwZHBlKSB7Cj4gLQkJcmV0ID0gZ2VuOF9wcGd0dF9hbGxvY19w YWdldGFicyhwZCwgc3RhcnQsIGxlbmd0aCwKPiAtCQkJCQkJcHBndHQtPmJhc2UuZGV2KTsKPiAr CQliaXRtYXBfemVybyhuZXdfcGFnZV90YWJsZXNbcGRwZV0sIEdFTjhfUERFU19QRVJfUEFHRSk7 Cj4gKwkJcmV0ID0gZ2VuOF9wcGd0dF9hbGxvY19wYWdldGFicyhwcGd0dCwgcGQsIHN0YXJ0LCBs ZW5ndGgsCj4gKwkJCQkJCW5ld19wYWdlX3RhYmxlc1twZHBlXSk7Cj4gIAkJaWYgKHJldCkKPiAg CQkJZ290byBlcnJfb3V0Owo+ICAJfQo+ICAKPiAtCS8qIE5vdyBtYXJrIGV2ZXJ5dGhpbmcgd2Un dmUgdG91Y2hlZCBhcyB1c2VkLiBUaGlzIGRvZXNuJ3QgYWxsb3cgZm9yCj4gLQkgKiByb2J1c3Qg ZXJyb3IgY2hlY2tpbmcsIGJ1dCBpdCBtYWtlcyB0aGUgY29kZSBhIGhlbGwgb2YgYSBsb3Qgc2lt cGxlci4KPiAtCSAqLwo+ICAJc3RhcnQgPSBvcmlnX3N0YXJ0Owo+ICAJbGVuZ3RoID0gb3JpZ19s ZW5ndGg7Cj4gIAo+ICsJLyogQWxsb2NhdGlvbnMgaGF2ZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5 LCBzbyBzZXQgdGhlIGJpdG1hcHMsIGFuZCBkbwo+ICsJICogdGhlIG1hcHBpbmdzLiAqLwo+ICAJ Z2VuOF9mb3JfZWFjaF9wZHBlKHBkLCAmcHBndHQtPnBkcCwgc3RhcnQsIGxlbmd0aCwgdGVtcCwg cGRwZSkgewo+ICsJCWdlbjhfcHBndHRfcGRlX3QgKmNvbnN0IHBhZ2VkaXIgPSBrbWFwX2F0b21p YyhwZC0+cGFnZSk7Cj4gIAkJc3RydWN0IGk5MTVfcGFnZXRhYiAqcHQ7Cj4gIAkJdWludDY0X3Qg cGRfbGVuID0gZ2VuOF9jbGFtcF9wZChzdGFydCwgbGVuZ3RoKTsKPiAgCQl1aW50NjRfdCBwZF9z dGFydCA9IHN0YXJ0Owo+ICAJCXVpbnQzMl90IHBkZTsKPiAtCQlnZW44X2Zvcl9lYWNoX3BkZShw dCwgJnBwZ3R0LT5wZCwgcGRfc3RhcnQsIHBkX2xlbiwgdGVtcCwgcGRlKSB7Cj4gLQkJCWJpdG1h cF9zZXQocGQtPnBhZ2VfdGFibGVzW3BkZV0tPnVzZWRfcHRlcywKPiAtCQkJCSAgIGdlbjhfcHRl X2luZGV4KHN0YXJ0KSwKPiAtCQkJCSAgIGdlbjhfcHRlX2NvdW50KHN0YXJ0LCBsZW5ndGgpKTsK PiArCj4gKwkJLyogRXZlcnkgcGQgc2hvdWxkIGJlIGFsbG9jYXRlZCwgd2UganVzdCBkaWQgdGhh dCBhYm92ZS4gKi8KPiArCQlCVUdfT04oIXBkKTsKPiArCj4gKwkJZ2VuOF9mb3JfZWFjaF9wZGUo cHQsIHBkLCBwZF9zdGFydCwgcGRfbGVuLCB0ZW1wLCBwZGUpIHsKPiArCQkJLyogU2FtZSByZWFz b25pbmcgYXMgcGQgKi8KPiArCQkJQlVHX09OKCFwdCk7Cj4gKwkJCUJVR19PTighcGRfbGVuKTsK PiArCQkJQlVHX09OKCFnZW44X3B0ZV9jb3VudChwZF9zdGFydCwgcGRfbGVuKSk7Cj4gKwo+ICsJ CQkvKiBTZXQgb3VyIHVzZWQgcHRlcyB3aXRoaW4gdGhlIHBhZ2UgdGFibGUgKi8KPiArCQkJYml0 bWFwX3NldChwdC0+dXNlZF9wdGVzLAo+ICsJCQkJICAgZ2VuOF9wdGVfaW5kZXgocGRfc3RhcnQp LAo+ICsJCQkJICAgZ2VuOF9wdGVfY291bnQocGRfc3RhcnQsIHBkX2xlbikpOwo+ICsKPiArCQkJ LyogT3VyIHBkZSBpcyBub3cgcG9pbnRpbmcgdG8gdGhlIHBhZ2V0YWJsZSwgcHQgKi8KPiAgCQkJ c2V0X2JpdChwZGUsIHBkLT51c2VkX3BkZXMpOwo+ICsKPiArCQkJLyogTWFwIHRoZSBQREUgdG8g dGhlIHBhZ2UgdGFibGUgKi8KPiArCQkJX19nZW44X2RvX21hcF9wdChwYWdlZGlyICsgcGRlLCBw dCwgdm0tPmRldik7Cj4gKwo+ICsJCQkvKiBOQjogV2UgaGF2ZW4ndCB5ZXQgbWFwcGVkIHB0ZXMg dG8gcGFnZXMuIEF0IHRoaXMKPiArCQkJICogcG9pbnQgd2UncmUgc3RpbGwgcmVseWluZyBvbiBp bnNlcnRfZW50cmllcygpICovCj4gKwo+ICsJCQkvKiBObyBsb25nZXIgcG9zc2libGUgdGhpcyBw YWdlIHRhYmxlIGlzIGEgem9tYmllICovCj4gKwkJCXB0LT56b21iaWUgPSAwOwo+ICAJCX0KPiAr Cj4gKwkJaWYgKCFIQVNfTExDKHZtLT5kZXYpKQo+ICsJCQlkcm1fY2xmbHVzaF92aXJ0X3Jhbmdl KHBhZ2VkaXIsIFBBR0VfU0laRSk7Cj4gKwo+ICsJCWt1bm1hcF9hdG9taWMocGFnZWRpcik7Cj4g Kwo+ICAJCXNldF9iaXQocGRwZSwgcHBndHQtPnBkcC51c2VkX3BkcGVzKTsKPiArCQkvKiBUaGlz IHBkIGlzIG9mZmljaWFsbHkgbm90IGEgem9tYmllIGVpdGhlciAqLwo+ICsJCXBwZ3R0LT5wZHAu cGFnZWRpcltwZHBlXS0+em9tYmllID0gMDsKPiAgCX0KPiAgCj4gKwlmcmVlX2dlbjhfdGVtcF9i aXRtYXBzKG5ld19wYWdlX2RpcnMsIG5ld19wYWdlX3RhYmxlcyk7Cj4gIAlyZXR1cm4gMDsKPiAg Cj4gIGVycl9vdXQ6Cj4gLQlnZW44X3RlYXJkb3duX3ZhX3JhbmdlKHZtLCBvcmlnX3N0YXJ0LCBz dGFydCk7Cj4gKwl3aGlsZSAocGRwZS0tKSB7Cj4gKwkJZm9yX2VhY2hfc2V0X2JpdCh0ZW1wLCBu ZXdfcGFnZV90YWJsZXNbcGRwZV0sIEdFTjhfUERFU19QRVJfUEFHRSkKPiArCQkJZnJlZV9wdF9z aW5nbGUocGQtPnBhZ2VfdGFibGVzW3RlbXBdLCB2bS0+ZGV2KTsKPiArCX0KPiArCj4gKwlmb3Jf ZWFjaF9zZXRfYml0KHBkcGUsIG5ld19wYWdlX2RpcnMsIEdFTjhfTEVHQUNZX1BEUEVTKQo+ICsJ CWZyZWVfcGRfc2luZ2xlKHBwZ3R0LT5wZHAucGFnZWRpcltwZHBlXSwgdm0tPmRldik7Cj4gKwo+ ICsJZnJlZV9nZW44X3RlbXBfYml0bWFwcyhuZXdfcGFnZV9kaXJzLCBuZXdfcGFnZV90YWJsZXMp Owo+ICAJcmV0dXJuIHJldDsKPiAgfQo+ICAKPiBAQCAtODE5LDM3ICsxMDI3LDY4IEBAIGVycl9v dXQ6Cj4gICAqIHNwYWNlLgo+ICAgKgo+ICAgKi8KPiAtc3RhdGljIGludCBnZW44X3BwZ3R0X2lu aXQoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0LCB1aW50NjRfdCBzaXplKQo+ICtzdGF0aWMg aW50IGdlbjhfcHBndHRfaW5pdF9jb21tb24oc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0LCB1 aW50NjRfdCBzaXplKQo+ICB7Cj4gLQlzdHJ1Y3QgaTkxNV9wYWdlZGlyICpwZDsKPiAtCXVpbnQ2 NF90IHRlbXAsIHN0YXJ0ID0gMDsKPiAtCWNvbnN0IHVpbnQ2NF90IG9yaWdfbGVuZ3RoID0gc2l6 ZTsKPiAtCXVpbnQzMl90IHBkcGU7Cj4gLQlpbnQgcmV0Owo+ICsJcHBndHQtPnNjcmF0Y2hfcGQg PSBhbGxvY19wdF9zY3JhdGNoKHBwZ3R0LT5iYXNlLmRldik7Cj4gKwlpZiAoSVNfRVJSKHBwZ3R0 LT5zY3JhdGNoX3BkKSkKPiArCQlyZXR1cm4gUFRSX0VSUihwcGd0dC0+c2NyYXRjaF9wZCk7Cj4g IAo+ICAJcHBndHQtPmJhc2Uuc3RhcnQgPSAwOwo+ICAJcHBndHQtPmJhc2UudG90YWwgPSBzaXpl Owo+IC0JcHBndHQtPmJhc2UuY2xlYXJfcmFuZ2UgPSBnZW44X3BwZ3R0X2NsZWFyX3JhbmdlOwo+ IC0JcHBndHQtPmJhc2UuaW5zZXJ0X2VudHJpZXMgPSBnZW44X3BwZ3R0X2luc2VydF9lbnRyaWVz Owo+ICAJcHBndHQtPmJhc2UuY2xlYW51cCA9IGdlbjhfcHBndHRfY2xlYW51cDsKPiArCXBwZ3R0 LT5iYXNlLmluc2VydF9lbnRyaWVzID0gZ2VuOF9wcGd0dF9pbnNlcnRfZW50cmllczsKPiArCj4g IAlwcGd0dC0+c3dpdGNoX21tID0gZ2VuOF9tbV9zd2l0Y2g7Cj4gIAo+IC0JcHBndHQtPnNjcmF0 Y2hfcGQgPSBhbGxvY19wdF9zY3JhdGNoKHBwZ3R0LT5iYXNlLmRldik7Cj4gLQlpZiAoSVNfRVJS KHBwZ3R0LT5zY3JhdGNoX3BkKSkKPiAtCQlyZXR1cm4gUFRSX0VSUihwcGd0dC0+c2NyYXRjaF9w ZCk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBnZW44X2FsaWFzaW5nX3Bw Z3R0X2luaXQoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2ID0gcHBndHQtPmJhc2UuZGV2Owo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCBpOTE1X3BhZ2VkaXIg KnBkOwo+ICsJdWludDY0X3QgdGVtcCwgc3RhcnQgPSAwLCBzaXplID0gZGV2X3ByaXYtPmd0dC5i YXNlLnRvdGFsOwo+ICsJdWludDMyX3QgcGRwZTsKPiArCWludCByZXQ7Cj4gIAo+ICsJcmV0ID0g Z2VuOF9wcGd0dF9pbml0X2NvbW1vbihwcGd0dCwgZGV2X3ByaXYtPmd0dC5iYXNlLnRvdGFsKTsK PiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwkvKiBBbGlhc2luZyBQUEdUVCBo YXMgdG8gYWx3YXlzIHdvcmsgYW5kIGJlIG1hcHBlZCBiZWNhdXNlIG9mIHRoZSB3YXkgd2UKPiAr CSAqIHVzZSBSRVNUT1JFX0lOSElCSVQgaW4gdGhlIGNvbnRleHQgc3dpdGNoLiBUaGlzIHdpbGwg YmUgZml4ZWQKPiArCSAqIGV2ZW50dWFsbHkuICovCj4gIAlyZXQgPSBnZW44X2FsbG9jX3ZhX3Jh bmdlKCZwcGd0dC0+YmFzZSwgc3RhcnQsIHNpemUpOwo+ICAJaWYgKHJldCkgewo+ICAJCWZyZWVf cHRfc2NyYXRjaChwcGd0dC0+c2NyYXRjaF9wZCwgcHBndHQtPmJhc2UuZGV2KTsKPiAgCQlyZXR1 cm4gcmV0Owo+ICAJfQo+ICAKPiAtCXN0YXJ0ID0gMDsKPiAtCXNpemUgPSBvcmlnX2xlbmd0aDsK PiAtCj4gIAlnZW44X2Zvcl9lYWNoX3BkcGUocGQsICZwcGd0dC0+cGRwLCBzdGFydCwgc2l6ZSwg dGVtcCwgcGRwZSkKPiAgCQlnZW44X21hcF9wYWdldGFibGVfcmFuZ2UocGQsIHN0YXJ0LCBzaXpl LCBwcGd0dC0+YmFzZS5kZXYpOwo+ICAKPiArCXBwZ3R0LT5iYXNlLmFsbG9jYXRlX3ZhX3Jhbmdl ID0gTlVMTDsKPiArCXBwZ3R0LT5iYXNlLnRlYXJkb3duX3ZhX3JhbmdlID0gTlVMTDsKPiArCXBw Z3R0LT5iYXNlLmNsZWFyX3JhbmdlID0gZ2VuOF9wcGd0dF9jbGVhcl9yYW5nZTsKPiArCj4gKwly ZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBnZW44X3BwZ3R0X2luaXQoc3RydWN0IGk5 MTVfaHdfcHBndHQgKnBwZ3R0KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcHBn dHQtPmJhc2UuZGV2Owo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2 LT5kZXZfcHJpdmF0ZTsKPiArCWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gZ2VuOF9wcGd0dF9pbml0 X2NvbW1vbihwcGd0dCwgZGV2X3ByaXYtPmd0dC5iYXNlLnRvdGFsKTsKPiArCWlmIChyZXQpCj4g KwkJcmV0dXJuIHJldDsKPiArCj4gKwlwcGd0dC0+YmFzZS5hbGxvY2F0ZV92YV9yYW5nZSA9IGdl bjhfYWxsb2NfdmFfcmFuZ2U7Cj4gKwlwcGd0dC0+YmFzZS50ZWFyZG93bl92YV9yYW5nZSA9IGdl bjhfdGVhcmRvd25fdmFfcmFuZ2U7Cj4gKwlwcGd0dC0+YmFzZS5jbGVhcl9yYW5nZSA9IE5VTEw7 Cj4gKwo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gQEAgLTE0MTMsOSArMTY1Miw5IEBAIHN0YXRp YyBpbnQgZ2VuNl9wcGd0dF9pbml0KHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCwgYm9vbCBh bGlhc2luZykKPiAgCWlmIChyZXQpCj4gIAkJcmV0dXJuIHJldDsKPiAgCj4gLQlwcGd0dC0+YmFz ZS5hbGxvY2F0ZV92YV9yYW5nZSA9IGdlbjZfYWxsb2NfdmFfcmFuZ2U7Cj4gLQlwcGd0dC0+YmFz ZS50ZWFyZG93bl92YV9yYW5nZSA9IGdlbjZfdGVhcmRvd25fdmFfcmFuZ2U7Cj4gLQlwcGd0dC0+ YmFzZS5jbGVhcl9yYW5nZSA9IGdlbjZfcHBndHRfY2xlYXJfcmFuZ2U7Cj4gKwlwcGd0dC0+YmFz ZS5hbGxvY2F0ZV92YV9yYW5nZSA9IGFsaWFzaW5nID8gTlVMTCA6IGdlbjZfYWxsb2NfdmFfcmFu Z2U7Cj4gKwlwcGd0dC0+YmFzZS50ZWFyZG93bl92YV9yYW5nZSA9IGFsaWFzaW5nID8gTlVMTCA6 IGdlbjZfdGVhcmRvd25fdmFfcmFuZ2U7Cj4gKwlwcGd0dC0+YmFzZS5jbGVhcl9yYW5nZSA9IGFs aWFzaW5nID8gZ2VuNl9wcGd0dF9jbGVhcl9yYW5nZSA6IE5VTEw7Cj4gIAlwcGd0dC0+YmFzZS5p bnNlcnRfZW50cmllcyA9IGdlbjZfcHBndHRfaW5zZXJ0X2VudHJpZXM7Cj4gIAlwcGd0dC0+YmFz ZS5jbGVhbnVwID0gZ2VuNl9wcGd0dF9jbGVhbnVwOwo+ICAJcHBndHQtPmJhc2Uuc3RhcnQgPSAw Owo+IEBAIC0xNDUzLDggKzE2OTIsMTAgQEAgc3RhdGljIGludCBfX2h3X3BwZ3R0X2luaXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0LAo+ICAKPiAg CWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA8IDgpCj4gIAkJcmV0dXJuIGdlbjZfcHBndHRfaW5p dChwcGd0dCwgYWxpYXNpbmcpOwo+ICsJZWxzZSBpZiAoYWxpYXNpbmcpCj4gKwkJcmV0dXJuIGdl bjhfYWxpYXNpbmdfcHBndHRfaW5pdChwcGd0dCk7Cj4gIAllbHNlCj4gLQkJcmV0dXJuIGdlbjhf cHBndHRfaW5pdChwcGd0dCwgZGV2X3ByaXYtPmd0dC5iYXNlLnRvdGFsKTsKPiArCQlyZXR1cm4g Z2VuOF9wcGd0dF9pbml0KHBwZ3R0KTsKPiAgfQo+ICBpbnQgaTkxNV9wcGd0dF9pbml0KHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkKPiAgewo+IEBA IC0xNDY2LDggKzE3MDcsOSBAQCBpbnQgaTkxNV9wcGd0dF9pbml0KHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkKPiAgCQlrcmVmX2luaXQoJnBwZ3R0 LT5yZWYpOwo+ICAJCWRybV9tbV9pbml0KCZwcGd0dC0+YmFzZS5tbSwgcHBndHQtPmJhc2Uuc3Rh cnQsCj4gIAkJCSAgICBwcGd0dC0+YmFzZS50b3RhbCk7Cj4gLQkJcHBndHQtPmJhc2UuY2xlYXJf cmFuZ2UoJnBwZ3R0LT5iYXNlLCAwLAo+IC0JCQkgICAgcHBndHQtPmJhc2UudG90YWwsIHRydWUp Owo+ICsJCWlmIChwcGd0dC0+YmFzZS5jbGVhcl9yYW5nZSkKPiArCQkJcHBndHQtPmJhc2UuY2xl YXJfcmFuZ2UoJnBwZ3R0LT5iYXNlLCAwLAo+ICsJCQkJcHBndHQtPmJhc2UudG90YWwsIHRydWUp Owo+ICAJCWk5MTVfaW5pdF92bShkZXZfcHJpdiwgJnBwZ3R0LT5iYXNlKTsKPiAgCX0KPiAgCj4g QEAgLTE1NjUsMTAgKzE4MDcsNyBAQCBwcGd0dF9iaW5kX3ZtYShzdHJ1Y3QgaTkxNV92bWEgKnZt YSwKPiAgCj4gIHN0YXRpYyB2b2lkIHBwZ3R0X3VuYmluZF92bWEoc3RydWN0IGk5MTVfdm1hICp2 bWEpCj4gIHsKPiAtCXZtYS0+dm0tPmNsZWFyX3JhbmdlKHZtYS0+dm0sCj4gLQkJCSAgICAgdm1h LT5ub2RlLnN0YXJ0LAo+IC0JCQkgICAgIHZtYS0+b2JqLT5iYXNlLnNpemUsCj4gLQkJCSAgICAg dHJ1ZSk7Cj4gKwlXQVJOX09OKHZtYS0+dm0tPnRlYXJkb3duX3ZhX3JhbmdlICYmIHZtYS0+dm0t PmNsZWFyX3JhbmdlKTsKPiAgCWlmICh2bWEtPnZtLT50ZWFyZG93bl92YV9yYW5nZSkgewo+ICAJ CXRyYWNlX2k5MTVfdmFfdGVhcmRvd24odm1hLT52bSwKPiAgCQkJCSAgICAgICB2bWEtPm5vZGUu c3RhcnQsIHZtYS0+bm9kZS5zaXplLAo+IEBAIC0xNTc2LDcgKzE4MTUsMTMgQEAgc3RhdGljIHZv aWQgcHBndHRfdW5iaW5kX3ZtYShzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAgCj4gIAkJdm1hLT52 bS0+dGVhcmRvd25fdmFfcmFuZ2Uodm1hLT52bSwKPiAgCQkJCQkgICB2bWEtPm5vZGUuc3RhcnQs IHZtYS0+bm9kZS5zaXplKTsKPiAtCX0KPiArCX0gZWxzZSBpZiAodm1hLT52bS0+Y2xlYXJfcmFu Z2UpIHsKPiArCQl2bWEtPnZtLT5jbGVhcl9yYW5nZSh2bWEtPnZtLAo+ICsJCQkJICAgICB2bWEt Pm5vZGUuc3RhcnQsCj4gKwkJCQkgICAgIHZtYS0+b2JqLT5iYXNlLnNpemUsCj4gKwkJCQkgICAg IHRydWUpOwo+ICsJfSBlbHNlCj4gKwkJQlVHKCk7CgpObyBncmF0aXRpb3VzIGFkZGl0aW9ucyBv ZiBCVUcgcGxlYXNlLgoKPiAgfQo+ICAKPiAgZXh0ZXJuIGludCBpbnRlbF9pb21tdV9nZnhfbWFw cGVkOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oCj4gaW5kZXggOTU3ZjJkMC4uNTM0 ZWQ4MiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaAo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oCj4gQEAgLTE5MCwxMyAr MTkwLDI2IEBAIHN0cnVjdCBpOTE1X3ZtYSB7Cj4gIAkJCXUzMiBmbGFncyk7Cj4gIH07Cj4gIAo+ IC0KPiArLyogWm9tYmllcy4gV2Ugd3JpdGUgcGFnZSB0YWJsZXMgd2l0aCB0aGUgQ1BVLCBhbmQg aGFyZHdhcmUgc3dpdGNoZXMgdGhlbSB3aXRoCj4gKyAqIHRoZSBHUFUuIEFzIHN1Y2gsIHRoZSBv bmx5IHRpbWUgd2UgY2FuIHNhZmVseSByZW1vdmUgYSBwYWdlIHRhYmxlIGlzIHdoZW4gd2UKPiAr ICoga25vdyB0aGUgY29udGV4dCBpcyBpZGxlLiBTaW5jZSB3ZSBoYXZlIG5vIGdvb2Qgd2F5IHRv IGRvIHRoaXMsIHdlIHVzZSB0aGUKPiArICogem9tYmllLgo+ICsgKgo+ICsgKiBVbmRlciBtZW1v cnkgcHJlc3N1cmUsIGlmIHRoZSBzeXN0ZW0gaXMgaWRsZSwgem9tYmllcyBtYXkgYmUgcmVhcGVk Lgo+ICsgKgo+ICsgKiBUaGVyZSBhcmUgMyBzdGF0ZXMgYSBwYWdlIHRhYmxlIGNhbiBiZSBpbiAo bm90IGluY2x1ZGluZyBzY3JhdGNoKQo+ICsgKiAgYml0bWFwID0gMCwgem9tYmllID0gMDogdW5h bGxvY2F0ZWQKPiArICogIGJpdG1hcCA9IDEsIHpvbWJpZSA9IDA6IGFsbG9jYXRlZAo+ICsgKiAg Yml0bWFwID0gMCwgem9tYmllID0gMTogem9tYmllCj4gKyAqICBiaXRtYXAgPSAxLCB6b21iaWUg PSAxOiBpbnZhbGlkCj4gKyAqLwo+ICBzdHJ1Y3QgaTkxNV9wYWdldGFiIHsKPiAgCXN0cnVjdCBw YWdlICpwYWdlOwo+ICAJZG1hX2FkZHJfdCBkYWRkcjsKPiAgCj4gIAl1bnNpZ25lZCBsb25nICp1 c2VkX3B0ZXM7Cj4gIAl1bnNpZ25lZCBpbnQgc2NyYXRjaDoxOwo+ICsJdW5zaWduZWQgem9tYmll OjE7Cj4gIH07Cj4gIAo+ICBzdHJ1Y3QgaTkxNV9wYWdlZGlyIHsKPiBAQCAtMjA4LDYgKzIyMSw3 IEBAIHN0cnVjdCBpOTE1X3BhZ2VkaXIgewo+ICAKPiAgCXVuc2lnbmVkIGxvbmcgKnVzZWRfcGRl czsKPiAgCXN0cnVjdCBpOTE1X3BhZ2V0YWIgKnBhZ2VfdGFibGVzW0dFTjZfUFBHVFRfUERfRU5U UklFU107Cj4gKwl1bnNpZ25lZCB6b21iaWU6MTsKPiAgfTsKPiAgCj4gIHN0cnVjdCBpOTE1X3Bh Z2VkaXJwbyB7Cj4gLS0gCj4gMi4xLjEKPiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwo+IEludGVsLWdmeCBtYWlsaW5nIGxpc3QKPiBJbnRlbC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2ludGVsLWdmeAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5l ZXIsIEludGVsIENvcnBvcmF0aW9uCis0MSAoMCkgNzkgMzY1IDU3IDQ4IC0gaHR0cDovL2Jsb2cu ZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K SW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK