From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 03/10] drm: xlnx: Add xlnx fb of Xilinx DRM KMS Date: Tue, 9 Jan 2018 10:35:55 +0100 Message-ID: <20180109093555.GF26573@phenom.ffwll.local> References: <1515117959-18068-1-git-send-email-hyun.kwon@xilinx.com> <1515117959-18068-4-git-send-email-hyun.kwon@xilinx.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1515117959-18068-4-git-send-email-hyun.kwon@xilinx.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Hyun Kwon Cc: devicetree@vger.kernel.org, Michal Simek , dri-devel@lists.freedesktop.org List-Id: devicetree@vger.kernel.org T24gVGh1LCBKYW4gMDQsIDIwMTggYXQgMDY6MDU6NTJQTSAtMDgwMCwgSHl1biBLd29uIHdyb3Rl Ogo+IEhlbHBlcnMgZm9yIGZyYW1lYnVmZmVycyBiYWNrZWQgYnkgY21hIGFsbG9jYXRvci4KPiAK PiBTaWduZWQtb2ZmLWJ5OiBIeXVuIEt3b24gPGh5dW4ua3dvbkB4aWxpbnguY29tPgoKUGxlYXNl IHRha2UgYSBsb29rIGF0IHRoZSB2ZXJ5IG5ldyBkcm1fZ2VtX2ZyYW1lYnVmZmVyX2hlbHBlci5j IGZpbGUuClRoZXJlJ3MgbG90cyBvZiBoZWxwZXJzIGluIHRoZXJlIHRoYXQgeW91IGNhbiB1c2Ug dG8gcmVtb3ZlIGFsbW9zdCB0aGUKZW50aXJlIGZpbGUgaGVyZSA6LSkgWW91IG1pZ2h0IGV2ZW4g d2FudCB0byBlbnRpcmVseSBkcm9wIHRoaXMgaWYgaXQKYmVjb21lcyB0b28gc21hbGwuCi1EYW5p ZWwKCj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZmIuYyB8IDQ2NyArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0veGxu eC94bG54X2ZiLmggfCAgMzAgKysrCj4gIDIgZmlsZXMgY2hhbmdlZCwgNDk3IGluc2VydGlvbnMo KykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZmIuYwo+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9mYi5oCj4gCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZmIuYyBiL2RyaXZlcnMvZ3B1 L2RybS94bG54L3hsbnhfZmIuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAw MC4uZGJlOWZiZgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGxueC94 bG54X2ZiLmMKPiBAQCAtMCwwICsxLDQ2NyBAQAo+ICsvKgo+ICsgKiBYaWxpbnggRFJNIEtNUyBG cmFtZWJ1ZmZlciBoZWxwZXIKPiArICoKPiArICogIENvcHlyaWdodCAoQykgMjAxNSAtIDIwMTgg WGlsaW54LCBJbmMuCj4gKyAqCj4gKyAqICBBdXRob3I6IEh5dW4gV29vIEt3b24gPGh5dW4ua3dv bkB4aWxpbnguY29tPgo+ICsgKgo+ICsgKiBCYXNlZCBvbiBkcm1fZmJfY21hX2hlbHBlci5jCj4g KyAqCj4gKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgQW5hbG9nIERldmljZSBJbmMuCj4gKyAqCj4g KyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gKyAqLwo+ICsKPiArI2luY2x1 ZGUgPGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPiArI2luY2x1ZGUg PGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+ Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+Cj4gKwo+ICsjaW5jbHVkZSAi eGxueF9mYi5oIgo+ICsKPiArI2RlZmluZSBYTE5YX01BWF9QTEFORVMJNAo+ICsKPiArc3RydWN0 IHhsbnhfZmIgewo+ICsJc3RydWN0IGRybV9mcmFtZWJ1ZmZlcgkJYmFzZTsKPiArCXN0cnVjdCBk cm1fZ2VtX2NtYV9vYmplY3QJKm9ialtYTE5YX01BWF9QTEFORVNdOwo+ICt9Owo+ICsKPiArc3Ry dWN0IHhsbnhfZmJkZXYgewo+ICsJc3RydWN0IGRybV9mYl9oZWxwZXIgZmJfaGVscGVyOwo+ICsJ c3RydWN0IHhsbnhfZmIJKmZiOwo+ICsJdW5zaWduZWQgaW50IGFsaWduOwo+ICsJdW5zaWduZWQg aW50IHZyZXNfbXVsdDsKPiArfTsKPiArCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IHhsbnhfZmJk ZXYgKnRvX2ZiZGV2KHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIpCj4gK3sKPiArCXJl dHVybiBjb250YWluZXJfb2YoZmJfaGVscGVyLCBzdHJ1Y3QgeGxueF9mYmRldiwgZmJfaGVscGVy KTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgeGxueF9mYiAqdG9fZmIoc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqYmFzZV9mYikKPiArewo+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihi YXNlX2ZiLCBzdHJ1Y3QgeGxueF9mYiwgYmFzZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHhs bnhfZmJfZGVzdHJveShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpiYXNlX2ZiKQo+ICt7Cj4gKwlz dHJ1Y3QgeGxueF9mYiAqZmIgPSB0b19mYihiYXNlX2ZiKTsKPiArCWludCBpOwo+ICsKPiArCWZv ciAoaSA9IDA7IGkgPCBYTE5YX01BWF9QTEFORVM7IGkrKykKPiArCQlpZiAoZmItPm9ialtpXSkK PiArCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJmZiLT5vYmpbaV0tPmJh c2UpOwo+ICsKPiArCWRybV9mcmFtZWJ1ZmZlcl9jbGVhbnVwKGJhc2VfZmIpOwo+ICsJa2ZyZWUo ZmIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHhsbnhfZmJfY3JlYXRlX2hhbmRsZShzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpiYXNlX2ZiLAo+ICsJCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9w cml2LAo+ICsJCQkJIHVuc2lnbmVkIGludCAqaGFuZGxlKQo+ICt7Cj4gKwlzdHJ1Y3QgeGxueF9m YiAqZmIgPSB0b19mYihiYXNlX2ZiKTsKPiArCj4gKwlyZXR1cm4gZHJtX2dlbV9oYW5kbGVfY3Jl YXRlKGZpbGVfcHJpdiwgJmZiLT5vYmpbMF0tPmJhc2UsIGhhbmRsZSk7Cj4gK30KPiArCj4gK3N0 YXRpYyBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyX2Z1bmNzIHhsbnhfZmJfZnVuY3MgPSB7Cj4gKwku ZGVzdHJveQk9IHhsbnhfZmJfZGVzdHJveSwKPiArCS5jcmVhdGVfaGFuZGxlCT0geGxueF9mYl9j cmVhdGVfaGFuZGxlLAo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIHhsbnhfZmJfYWxsb2MgLSBBbGxv Y2F0ZSBhIHhsbnhfZmIKPiArICogQGRybTogRFJNIG9iamVjdAo+ICsgKiBAbW9kZV9jbWQ6IGRy bV9tb2RlX2ZiX2NtZDIgc3RydWN0Cj4gKyAqIEBvYmo6IHBvaW50ZXJzIGZvciByZXR1cm5lZCBk cm1fZ2VtX2NtYV9vYmplY3RzCj4gKyAqIEBudW1fcGxhbmVzOiBudW1iZXIgb2YgcGxhbmVzIHRv IGJlIGFsbG9jYXRlZAo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIGJhc2VkIG9uIGRybV9m Yl9jbWFfYWxsb2MoKS4KPiArICoKPiArICogUmV0dXJuOiBhIHhsbnhfZmIgb2JqZWN0LCBvciBF UlJfUFRSLgo+ICsgKi8KPiArc3RhdGljIHN0cnVjdCB4bG54X2ZiICoKPiAreGxueF9mYl9hbGxv YyhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAo+ICsJICAgICAgY29uc3Qgc3RydWN0IGRybV9tb2Rl X2ZiX2NtZDIgKm1vZGVfY21kLAo+ICsJICAgICAgc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAq Km9iaiwgdW5zaWduZWQgaW50IG51bV9wbGFuZXMpCj4gK3sKPiArCXN0cnVjdCB4bG54X2ZiICpm YjsKPiArCWludCByZXQ7Cj4gKwlpbnQgaTsKPiArCj4gKwlmYiA9IGt6YWxsb2Moc2l6ZW9mKCpm YiksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFmYikKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVN KTsKPiArCj4gKwlkcm1faGVscGVyX21vZGVfZmlsbF9mYl9zdHJ1Y3QoZHJtLCAmZmItPmJhc2Us IG1vZGVfY21kKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BsYW5lczsgaSsrKQo+ICsJ CWZiLT5vYmpbaV0gPSBvYmpbaV07Cj4gKwo+ICsJcmV0ID0gZHJtX2ZyYW1lYnVmZmVyX2luaXQo ZHJtLCAmZmItPmJhc2UsICZ4bG54X2ZiX2Z1bmNzKTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZf ZXJyKGRybS0+ZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgZmI6ICVkXG4iLCByZXQpOwo+ICsJ CWtmcmVlKGZiKTsKPiArCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICsJfQo+ICsKPiArCXJldHVy biBmYjsKPiArfQo+ICsKPiArLyoqCj4gKyAqIHhsbnhfZmJfZ2V0X3BhZGRyIC0gR2V0IHBoeXN5 Y2FsIGFkZHJlc3Mgb2YgZnJhbWVidWZmZXIKPiArICogQGJhc2VfZmI6IHRoZSBmcmFtZWJ1ZmZl cgo+ICsgKiBAcGxhbmU6IHdoaWNoIHBsYW5lCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gaXMg YmFzZWQgb24gZHJtX2ZiX2NtYV9nZXRfZ2VtX29iaigpLgo+ICsgKgo+ICsgKiBSZXR1cm46IGEg cGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgcGxhbmUsIG9yIDAKPiArICovCj4gK2RtYV9hZGRyX3QK PiAreGxueF9mYl9nZXRfcGFkZHIoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqYmFzZV9mYiwgdW5z aWduZWQgaW50IHBsYW5lKQo+ICt7Cj4gKwlzdHJ1Y3QgeGxueF9mYiAqZmIgPSB0b19mYihiYXNl X2ZiKTsKPiArCj4gKwlpZiAocGxhbmUgPj0gWExOWF9NQVhfUExBTkVTKQo+ICsJCXJldHVybiAw Owo+ICsKPiArCXJldHVybiBmYi0+b2JqW3BsYW5lXS0+cGFkZHI7Cj4gK30KPiArRVhQT1JUX1NZ TUJPTF9HUEwoeGxueF9mYl9nZXRfcGFkZHIpOwo+ICsKPiArc3RhdGljIGludAo+ICt4bG54X2Zi X2lvY3RsKHN0cnVjdCBmYl9pbmZvICppbmZvLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBs b25nIGFyZykKPiArewo+ICsJc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciA9IGluZm8t PnBhcjsKPiArCXVuc2lnbmVkIGludCBpOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJc3dpdGNo IChjbWQpIHsKPiArCWNhc2UgRkJJT19XQUlURk9SVlNZTkM6Cj4gKwkJZm9yIChpID0gMDsgaSA8 IGZiX2hlbHBlci0+Y3J0Y19jb3VudDsgaSsrKSB7Cj4gKwkJCXN0cnVjdCBkcm1fbW9kZV9zZXQg Km1vZGVfc2V0Owo+ICsJCQlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4gKwo+ICsJCQltb2RlX3Nl dCA9ICZmYl9oZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldDsKPiArCQkJY3J0YyA9IG1vZGVf c2V0LT5jcnRjOwo+ICsJCQlyZXQgPSBkcm1fY3J0Y192YmxhbmtfZ2V0KGNydGMpOwo+ICsJCQlp ZiAoIXJldCkgewo+ICsJCQkJZHJtX2NydGNfd2FpdF9vbmVfdmJsYW5rKGNydGMpOwo+ICsJCQkJ ZHJtX2NydGNfdmJsYW5rX3B1dChjcnRjKTsKPiArCQkJfQo+ICsJCX0KPiArCQlyZXR1cm4gcmV0 Owo+ICsJZGVmYXVsdDoKPiArCQlyZXR1cm4gLUVOT1RUWTsKPiArCX0KPiArCj4gKwlyZXR1cm4g MDsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBmYl9vcHMgeGxueF9mYmRldl9vcHMgPSB7Cj4g Kwkub3duZXIJCT0gVEhJU19NT0RVTEUsCj4gKwkuZmJfZmlsbHJlY3QJPSBzeXNfZmlsbHJlY3Qs Cj4gKwkuZmJfY29weWFyZWEJPSBzeXNfY29weWFyZWEsCj4gKwkuZmJfaW1hZ2VibGl0CT0gc3lz X2ltYWdlYmxpdCwKPiArCS5mYl9jaGVja192YXIJPSBkcm1fZmJfaGVscGVyX2NoZWNrX3ZhciwK PiArCS5mYl9zZXRfcGFyCT0gZHJtX2ZiX2hlbHBlcl9zZXRfcGFyLAo+ICsJLmZiX2JsYW5rCT0g ZHJtX2ZiX2hlbHBlcl9ibGFuaywKPiArCS5mYl9wYW5fZGlzcGxheQk9IGRybV9mYl9oZWxwZXJf cGFuX2Rpc3BsYXksCj4gKwkuZmJfc2V0Y21hcAk9IGRybV9mYl9oZWxwZXJfc2V0Y21hcCwKPiAr CS5mYl9pb2N0bAk9IHhsbnhfZmJfaW9jdGwsCj4gK307Cj4gKwo+ICsvKioKPiArICogeGxueF9m YmRldl9jcmVhdGUgLSBDcmVhdGUgdGhlIGZiZGV2IHdpdGggYSBmcmFtZWJ1ZmZlcgo+ICsgKiBA ZmJfaGVscGVyOiBmYiBoZWxwZXIgc3RydWN0dXJlCj4gKyAqIEBzaXplOiBmcmFtZWJ1ZmZlciBz aXplIGluZm8KPiArICoKPiArICogVGhpcyBmdW5jdGlvbiBpcyBiYXNlZCBvbiBkcm1fZmJkZXZf Y21hX2NyZWF0ZSgpLgo+ICsgKgo+ICsgKiBSZXR1cm46IDAgaWYgc3VjY2Vzc2Z1bCwgb3IgdGhl IGVycm9yIGNvZGUuCj4gKyAqLwo+ICtzdGF0aWMgaW50IHhsbnhfZmJkZXZfY3JlYXRlKHN0cnVj dCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCj4gKwkJCSAgICAgc3RydWN0IGRybV9mYl9oZWxw ZXJfc3VyZmFjZV9zaXplICpzaXplKQo+ICt7Cj4gKwlzdHJ1Y3QgeGxueF9mYmRldiAqZmJkZXYg PSB0b19mYmRldihmYl9oZWxwZXIpOwo+ICsJc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgbW9kZV9j bWQgPSB7IDAgfTsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBmYl9oZWxwZXItPmRldjsK PiArCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKm9iajsKPiArCXN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmJhc2VfZmI7Cj4gKwl1bnNpZ25lZCBpbnQgYnl0ZXNfcGVyX3BpeGVsOwo+ICsJdW5z aWduZWQgbG9uZyBvZmZzZXQ7Cj4gKwlzdHJ1Y3QgZmJfaW5mbyAqZmJpOwo+ICsJc2l6ZV90IGJ5 dGVzOwo+ICsJaW50IHJldDsKPiArCj4gKwlkZXZfZGJnKGRybS0+ZGV2LCAic3VyZmFjZSB3aWR0 aCglZCksIGhlaWdodCglZCkgYW5kIGJwcCglZClcbiIsCj4gKwkJc2l6ZS0+c3VyZmFjZV93aWR0 aCwgc2l6ZS0+c3VyZmFjZV9oZWlnaHQsIHNpemUtPnN1cmZhY2VfYnBwKTsKPiArCj4gKwlieXRl c19wZXJfcGl4ZWwgPSBESVZfUk9VTkRfVVAoc2l6ZS0+c3VyZmFjZV9icHAsIDgpOwo+ICsKPiAr CW1vZGVfY21kLndpZHRoID0gc2l6ZS0+c3VyZmFjZV93aWR0aDsKPiArCW1vZGVfY21kLmhlaWdo dCA9IHNpemUtPnN1cmZhY2VfaGVpZ2h0Owo+ICsJbW9kZV9jbWQucGl0Y2hlc1swXSA9IEFMSUdO KHNpemUtPnN1cmZhY2Vfd2lkdGggKiBieXRlc19wZXJfcGl4ZWwsCj4gKwkJCQkgICAgZmJkZXYt PmFsaWduKTsKPiArCW1vZGVfY21kLnBpeGVsX2Zvcm1hdCA9IHhsbnhfZ2V0X2Zvcm1hdChkcm0p Owo+ICsKPiArCW1vZGVfY21kLmhlaWdodCAqPSBmYmRldi0+dnJlc19tdWx0Owo+ICsJYnl0ZXMg PSBtb2RlX2NtZC5waXRjaGVzWzBdICogbW9kZV9jbWQuaGVpZ2h0Owo+ICsJb2JqID0gZHJtX2dl bV9jbWFfY3JlYXRlKGRybSwgYnl0ZXMpOwo+ICsJaWYgKElTX0VSUihvYmopKQo+ICsJCXJldHVy biBQVFJfRVJSKG9iaik7Cj4gKwo+ICsJZmJpID0gZnJhbWVidWZmZXJfYWxsb2MoMCwgZHJtLT5k ZXYpOwo+ICsJaWYgKCFmYmkpIHsKPiArCQlkZXZfZXJyKGRybS0+ZGV2LCAiRmFpbGVkIHRvIGFs bG9jYXRlIGZyYW1lYnVmZmVyIGluZm8uXG4iKTsKPiArCQlyZXQgPSAtRU5PTUVNOwo+ICsJCWdv dG8gZXJyX2RybV9nZW1fY21hX2ZyZWVfb2JqZWN0Owo+ICsJfQo+ICsKPiArCWZiZGV2LT5mYiA9 IHhsbnhfZmJfYWxsb2MoZHJtLCAmbW9kZV9jbWQsICZvYmosIDEpOwo+ICsJaWYgKElTX0VSUihm YmRldi0+ZmIpKSB7Cj4gKwkJZGV2X2Vycihkcm0tPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBE Uk0gZnJhbWVidWZmZXIuXG4iKTsKPiArCQlyZXQgPSBQVFJfRVJSKGZiZGV2LT5mYik7Cj4gKwkJ Z290byBlcnJfZnJhbWVidWZmZXJfcmVsZWFzZTsKPiArCX0KPiArCj4gKwliYXNlX2ZiID0gJmZi ZGV2LT5mYi0+YmFzZTsKPiArCWZiX2hlbHBlci0+ZmIgPSBiYXNlX2ZiOwo+ICsJZmJfaGVscGVy LT5mYmRldiA9IGZiaTsKPiArCWZiaS0+cGFyID0gZmJfaGVscGVyOwo+ICsJZmJpLT5mbGFncyA9 IEZCSU5GT19GTEFHX0RFRkFVTFQ7Cj4gKwlmYmktPmZib3BzID0gJnhsbnhfZmJkZXZfb3BzOwo+ ICsKPiArCXJldCA9IGZiX2FsbG9jX2NtYXAoJmZiaS0+Y21hcCwgMjU2LCAwKTsKPiArCWlmIChy ZXQpIHsKPiArCQlkZXZfZXJyKGRybS0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIGNvbG9yIG1h cC5cbiIpOwo+ICsJCWdvdG8gZXJyX3hsbnhfZmJfZGVzdHJveTsKPiArCX0KPiArCj4gKwlkcm1f ZmJfaGVscGVyX2ZpbGxfZml4KGZiaSwgYmFzZV9mYi0+cGl0Y2hlc1swXSwKPiArCQkJICAgICAg IGJhc2VfZmItPmZvcm1hdC0+ZGVwdGgpOwo+ICsJZHJtX2ZiX2hlbHBlcl9maWxsX3ZhcihmYmks IGZiX2hlbHBlciwgYmFzZV9mYi0+d2lkdGgsIGJhc2VfZmItPmhlaWdodCk7Cj4gKwlmYmktPnZh ci55cmVzID0gYmFzZV9mYi0+aGVpZ2h0IC8gZmJkZXYtPnZyZXNfbXVsdDsKPiArCj4gKwlvZmZz ZXQgPSBmYmktPnZhci54b2Zmc2V0ICogYnl0ZXNfcGVyX3BpeGVsOwo+ICsJb2Zmc2V0ICs9IGZi aS0+dmFyLnlvZmZzZXQgKiBiYXNlX2ZiLT5waXRjaGVzWzBdOwo+ICsKPiArCWRybS0+bW9kZV9j b25maWcuZmJfYmFzZSA9IChyZXNvdXJjZV9zaXplX3Qpb2JqLT5wYWRkcjsKPiArCWZiaS0+c2Ny ZWVuX2Jhc2UgPSAoY2hhciBfX2lvbWVtICopKG9iai0+dmFkZHIgKyBvZmZzZXQpOwo+ICsJZmJp LT5maXguc21lbV9zdGFydCA9ICh1bnNpZ25lZCBsb25nKShvYmotPnBhZGRyICsgb2Zmc2V0KTsK PiArCWZiaS0+c2NyZWVuX3NpemUgPSBieXRlczsKPiArCWZiaS0+Zml4LnNtZW1fbGVuID0gYnl0 ZXM7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnJfeGxueF9mYl9kZXN0cm95Ogo+ICsJZHJt X2ZyYW1lYnVmZmVyX3VucmVnaXN0ZXJfcHJpdmF0ZShiYXNlX2ZiKTsKPiArCXhsbnhfZmJfZGVz dHJveShiYXNlX2ZiKTsKPiArZXJyX2ZyYW1lYnVmZmVyX3JlbGVhc2U6Cj4gKwlmcmFtZWJ1ZmZl cl9yZWxlYXNlKGZiaSk7Cj4gK2Vycl9kcm1fZ2VtX2NtYV9mcmVlX29iamVjdDoKPiArCWRybV9n ZW1fY21hX2ZyZWVfb2JqZWN0KCZvYmotPmJhc2UpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsK PiArc3RhdGljIHN0cnVjdCBkcm1fZmJfaGVscGVyX2Z1bmNzIHhsbnhfZmJfaGVscGVyX2Z1bmNz ID0gewo+ICsJLmZiX3Byb2JlID0geGxueF9mYmRldl9jcmVhdGUsCj4gK307Cj4gKwo+ICsvKioK PiArICogeGxueF9mYl9pbml0IC0gQWxsb2NhdGUgYW5kIGluaXRpYWxpemVzIHRoZSBYaWxpbngg ZnJhbWVidWZmZXIKPiArICogQGRybTogRFJNIGRldmljZQo+ICsgKiBAcHJlZmVycmVkX2JwcDog cHJlZmVycmVkIGJpdHMgcGVyIHBpeGVsIGZvciB0aGUgZGV2aWNlCj4gKyAqIEBtYXhfY29ubl9j b3VudDogbWF4aW11bSBudW1iZXIgb2YgY29ubmVjdG9ycwo+ICsgKiBAYWxpZ246IGFsaWdubWVu dCB2YWx1ZSBmb3IgcGl0Y2gKPiArICogQHZyZXNfbXVsdDogbXVsdGlwbGllciBmb3IgdmlydHVh bCByZXNvbHV0aW9uCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gaXMgYmFzZWQgb24gZHJtX2Zi ZGV2X2NtYV9pbml0KCkuCj4gKyAqCj4gKyAqIFJldHVybjogYSBuZXdseSBhbGxvY2F0ZWQgZHJt X2ZiX2hlbHBlciBzdHJ1Y3Qgb3IgYSBFUlJfUFRSLgo+ICsgKi8KPiArc3RydWN0IGRybV9mYl9o ZWxwZXIgKgo+ICt4bG54X2ZiX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgaW50IHByZWZl cnJlZF9icHAsCj4gKwkgICAgIHVuc2lnbmVkIGludCBtYXhfY29ubl9jb3VudCwgdW5zaWduZWQg aW50IGFsaWduLAo+ICsJICAgICB1bnNpZ25lZCBpbnQgdnJlc19tdWx0KQo+ICt7Cj4gKwlzdHJ1 Y3QgeGxueF9mYmRldiAqZmJkZXY7Cj4gKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVy Owo+ICsJaW50IHJldDsKPiArCj4gKwlmYmRldiA9IGt6YWxsb2Moc2l6ZW9mKCpmYmRldiksIEdG UF9LRVJORUwpOwo+ICsJaWYgKCFmYmRldikKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsK PiArCj4gKwlmYmRldi0+dnJlc19tdWx0ID0gdnJlc19tdWx0Owo+ICsJZmJkZXYtPmFsaWduID0g YWxpZ247Cj4gKwlmYl9oZWxwZXIgPSAmZmJkZXYtPmZiX2hlbHBlcjsKPiArCWRybV9mYl9oZWxw ZXJfcHJlcGFyZShkcm0sIGZiX2hlbHBlciwgJnhsbnhfZmJfaGVscGVyX2Z1bmNzKTsKPiArCj4g KwlyZXQgPSBkcm1fZmJfaGVscGVyX2luaXQoZHJtLCBmYl9oZWxwZXIsIG1heF9jb25uX2NvdW50 KTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZGV2X2Vycihkcm0tPmRldiwgIkZhaWxlZCB0byBp bml0aWFsaXplIGRybSBmYiBoZWxwZXIuXG4iKTsKPiArCQlnb3RvIGVycl9mcmVlOwo+ICsJfQo+ ICsKPiArCXJldCA9IGRybV9mYl9oZWxwZXJfc2luZ2xlX2FkZF9hbGxfY29ubmVjdG9ycyhmYl9o ZWxwZXIpOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlkZXZfZXJyKGRybS0+ZGV2LCAiRmFpbGVk IHRvIGFkZCBjb25uZWN0b3JzLlxuIik7Cj4gKwkJZ290byBlcnJfZHJtX2ZiX2hlbHBlcl9maW5p Owo+ICsJfQo+ICsKPiArCXJldCA9IGRybV9mYl9oZWxwZXJfaW5pdGlhbF9jb25maWcoZmJfaGVs cGVyLCBwcmVmZXJyZWRfYnBwKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZGV2X2Vycihkcm0t PmRldiwgIkZhaWxlZCB0byBzZXQgaW5pdGlhbCBodyBjb25maWd1cmF0aW9uLlxuIik7Cj4gKwkJ Z290byBlcnJfZHJtX2ZiX2hlbHBlcl9maW5pOwo+ICsJfQo+ICsKPiArCXJldHVybiBmYl9oZWxw ZXI7Cj4gKwo+ICtlcnJfZHJtX2ZiX2hlbHBlcl9maW5pOgo+ICsJZHJtX2ZiX2hlbHBlcl9maW5p KGZiX2hlbHBlcik7Cj4gK2Vycl9mcmVlOgo+ICsJa2ZyZWUoZmJkZXYpOwo+ICsJcmV0dXJuIEVS Ul9QVFIocmV0KTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIHhsbnhfZmJkZXZfZGVmaW9fZmluaSAt IEZyZWUgdGhlIGRlZmlvIGZiCj4gKyAqIEBmYmk6IGZiX2luZm8gc3RydWN0Cj4gKyAqCj4gKyAq IFRoaXMgZnVuY3Rpb24gaXMgYmFzZWQgb24gZHJtX2ZiZGV2X2NtYV9kZWZpb19maW5pKCkuCj4g KyAqLwo+ICtzdGF0aWMgdm9pZCB4bG54X2ZiZGV2X2RlZmlvX2Zpbmkoc3RydWN0IGZiX2luZm8g KmZiaSkKPiArewo+ICsJaWYgKCFmYmktPmZiZGVmaW8pCj4gKwkJcmV0dXJuOwo+ICsKPiArCWZi X2RlZmVycmVkX2lvX2NsZWFudXAoZmJpKTsKPiArCWtmcmVlKGZiaS0+ZmJkZWZpbyk7Cj4gKwlr ZnJlZShmYmktPmZib3BzKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIHhsbnhfZmJkZXZfZmluaSAt IEZyZWUgdGhlIFhpbGlueCBmcmFtZWJ1ZmZlcgo+ICsgKiBAZmJfaGVscGVyOiBkcm1fZmJfaGVs cGVyIHN0cnVjdAo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIGJhc2VkIG9uIGRybV9mYmRl dl9jbWFfZmluaSgpLgo+ICsgKi8KPiArdm9pZCB4bG54X2ZiX2Zpbmkoc3RydWN0IGRybV9mYl9o ZWxwZXIgKmZiX2hlbHBlcikKPiArewo+ICsJc3RydWN0IHhsbnhfZmJkZXYgKmZiZGV2ID0gdG9f ZmJkZXYoZmJfaGVscGVyKTsKPiArCj4gKwlkcm1fZmJfaGVscGVyX3VucmVnaXN0ZXJfZmJpKCZm YmRldi0+ZmJfaGVscGVyKTsKPiArCWlmIChmYmRldi0+ZmJfaGVscGVyLmZiZGV2KQo+ICsJCXhs bnhfZmJkZXZfZGVmaW9fZmluaShmYmRldi0+ZmJfaGVscGVyLmZiZGV2KTsKPiArCj4gKwlpZiAo ZmJkZXYtPmZiX2hlbHBlci5mYikKPiArCQlkcm1fZnJhbWVidWZmZXJfcmVtb3ZlKGZiZGV2LT5m Yl9oZWxwZXIuZmIpOwo+ICsKPiArCWRybV9mYl9oZWxwZXJfZmluaSgmZmJkZXYtPmZiX2hlbHBl cik7Cj4gKwlrZnJlZShmYmRldik7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiB4bG54X2ZiX3Jlc3Rv cmVfbW9kZSAtIFJlc3RvcmVzIGluaXRpYWwgZnJhbWVidWZmZXIgbW9kZQo+ICsgKiBAZmJfaGVs cGVyOiBkcm1fZmJfaGVscGVyIHN0cnVjdCwgbWF5IGJlIE5VTEwKPiArICoKPiArICogVGhpcyBm dW5jdGlvbiBpcyBiYXNlZCBvbiBkcm1fZmJkZXZfY21hX3Jlc3RvcmVfbW9kZSgpIGFuZCB1c3Vh bGx5IGNhbGxlZAo+ICsgKiBmcm9tIHRoZSBYaWxpbnggRFJNIGRyaXZlcnMgbGFzdGNsb3NlIGNh bGxiYWNrLgo+ICsgKi8KPiArdm9pZCB4bG54X2ZiX3Jlc3RvcmVfbW9kZShzdHJ1Y3QgZHJtX2Zi X2hlbHBlciAqZmJfaGVscGVyKQo+ICt7Cj4gKwlpZiAoIWZiX2hlbHBlcikKPiArCQlyZXR1cm47 Cj4gKwlkcm1fZmJfaGVscGVyX3Jlc3RvcmVfZmJkZXZfbW9kZV91bmxvY2tlZChmYl9oZWxwZXIp Owo+ICt9Cj4gKwo+ICsvKioKPiArICogeGxueF9mYl9jcmVhdGUgLSAoc3RydWN0IGRybV9tb2Rl X2NvbmZpZ19mdW5jcyAqKS0+ZmJfY3JlYXRlIGNhbGxiYWNrCj4gKyAqIEBkcm06IERSTSBkZXZp Y2UKPiArICogQGZpbGVfcHJpdjogZHJtIGZpbGUgcHJpdmF0ZSBkYXRhCj4gKyAqIEBtb2RlX2Nt ZDogbW9kZSBjb21tYW5kIGZvciBmYiBjcmVhdGlvbgo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9u cyBjcmVhdGVzIGEgZHJtX2ZyYW1lYnVmZmVyIGZvciBnaXZlbiBtb2RlIEBtb2RlX2NtZC4gVGhp cwo+ICsgKiBmdW5jdGlvbnMgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3IgdGhlIGZiX2NyZWF0 ZSBjYWxsYmFjayBmdW5jdGlvbiBvZgo+ICsgKiBkcm1fbW9kZV9jb25maWdfZnVuY3MuCj4gKyAq Cj4gKyAqIFJldHVybjogYSBkcm1fZnJhbWVidWZmZXIgb2JqZWN0IGlmIHN1Y2Nlc3NmdWwsIG9y IEVSUl9QVFIuCj4gKyAqLwo+ICtzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICoKPiAreGxueF9mYl9j cmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYs Cj4gKwkgICAgICAgY29uc3Qgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGVfY21kKQo+ICt7 Cj4gKwlzdHJ1Y3QgeGxueF9mYiAqZmI7Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpv YmpzW1hMTlhfTUFYX1BMQU5FU107Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKPiAr CWNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gKmluZm87Cj4gKwlzdHJ1Y3QgZHJtX2Zvcm1h dF9uYW1lX2J1ZiBmb3JtYXRfbmFtZTsKPiArCWludCByZXQ7Cj4gKwlpbnQgaTsKPiArCj4gKwlp bmZvID0gZHJtX2Zvcm1hdF9pbmZvKG1vZGVfY21kLT5waXhlbF9mb3JtYXQpOwo+ICsJaWYgKCFp bmZvKSB7Cj4gKwkJZGV2X2Vycihkcm0tPmRldiwgInVuc3VwcG9ydGVkIGZyYW1lYnVmZmVyIGZv cm1hdCAlc1xuIiwKPiArCQkJZHJtX2dldF9mb3JtYXRfbmFtZShtb2RlX2NtZC0+cGl4ZWxfZm9y bWF0LAo+ICsJCQkJCSAgICAmZm9ybWF0X25hbWUpKTsKPiArCQlyZXQgPSAtRUlOVkFMOwo+ICsJ CWdvdG8gZXJyX291dDsKPiArCX0KPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+bnVtX3Bs YW5lczsgaSsrKSB7Cj4gKwkJdW5zaWduZWQgaW50IHdpZHRoID0gbW9kZV9jbWQtPndpZHRoIC8g KGkgPyBpbmZvLT5oc3ViIDogMSk7Cj4gKwkJdW5zaWduZWQgaW50IGhlaWdodCA9IG1vZGVfY21k LT5oZWlnaHQgLyAoaSA/IGluZm8tPnZzdWIgOiAxKTsKPiArCQl1bnNpZ25lZCBpbnQgbWluX3Np emU7Cj4gKwo+ICsJCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChmaWxlX3ByaXYsCj4gKwkJ CQkJICAgIG1vZGVfY21kLT5oYW5kbGVzW2ldKTsKPiArCQlpZiAoIW9iaikgewo+ICsJCQlkZXZf ZXJyKGRybS0+ZGV2LCAiRmFpbGVkIHRvIGxvb2t1cCBHRU0gb2JqZWN0XG4iKTsKPiArCQkJcmV0 ID0gLUVOWElPOwo+ICsJCQlnb3RvIGVycl9nZW1fb2JqZWN0X3VucmVmZXJlbmNlOwo+ICsJCX0K PiArCj4gKwkJbWluX3NpemUgPSAoaGVpZ2h0IC0gMSkgKiBtb2RlX2NtZC0+cGl0Y2hlc1tpXSAr IHdpZHRoICoKPiArCQkJICAgaW5mby0+Y3BwW2ldICsgbW9kZV9jbWQtPm9mZnNldHNbaV07Cj4g Kwo+ICsJCWlmIChvYmotPnNpemUgPCBtaW5fc2l6ZSkgewo+ICsJCQlkcm1fZ2VtX29iamVjdF91 bnJlZmVyZW5jZV91bmxvY2tlZChvYmopOwo+ICsJCQlyZXQgPSAtRUlOVkFMOwo+ICsJCQlnb3Rv IGVycl9nZW1fb2JqZWN0X3VucmVmZXJlbmNlOwo+ICsJCX0KPiArCQlvYmpzW2ldID0gdG9fZHJt X2dlbV9jbWFfb2JqKG9iaik7Cj4gKwl9Cj4gKwo+ICsJZmIgPSB4bG54X2ZiX2FsbG9jKGRybSwg bW9kZV9jbWQsIG9ianMsIGkpOwo+ICsJaWYgKElTX0VSUihmYikpIHsKPiArCQlyZXQgPSBQVFJf RVJSKGZiKTsKPiArCQlnb3RvIGVycl9nZW1fb2JqZWN0X3VucmVmZXJlbmNlOwo+ICsJfQo+ICsK PiArCWZiLT5iYXNlLmZvcm1hdCA9IGluZm87Cj4gKwo+ICsJcmV0dXJuICZmYi0+YmFzZTsKPiAr Cj4gK2Vycl9nZW1fb2JqZWN0X3VucmVmZXJlbmNlOgo+ICsJZm9yIChpLS07IGkgPj0gMDsgaS0t KQo+ICsJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKCZvYmpzW2ldLT5iYXNl KTsKPiArZXJyX291dDoKPiArCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gK30KPiArCj4gKy8qKgo+ ICsgKiB4bG54X2ZiX2hvdHBsdWdfZXZlbnQgLSBQb2xsIGZvciBob3RwdWx1ZyBldmVudHMKPiAr ICogQGZiX2hlbHBlcjogZHJtX2ZiX2hlbHBlciBzdHJ1Y3QsIG1heSBiZSBOVUxMCj4gKyAqCj4g KyAqIFRoaXMgZnVuY3Rpb24gaXMgYmFzZWQgb24gZHJtX2ZiZGV2X2NtYV9ob3RwbHVnX2V2ZW50 KCkgYW5kIHVzdWFsbHkgY2FsbGVkCj4gKyAqIGZyb20gdGhlIFhpbGlueCBEUk0gZHJpdmVycyBv dXRwdXRfcG9sbF9jaGFuZ2VkIGNhbGxiYWNrLgo+ICsgKi8KPiArdm9pZCB4bG54X2ZiX2hvdHBs dWdfZXZlbnQoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlcikKPiArewo+ICsJaWYgKCFm Yl9oZWxwZXIpCj4gKwkJcmV0dXJuOwo+ICsJZHJtX2ZiX2hlbHBlcl9ob3RwbHVnX2V2ZW50KGZi X2hlbHBlcik7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9m Yi5oIGIvZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9mYi5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiBpbmRleCAwMDAwMDAwLi4zZjdlOTYyCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS94bG54L3hsbnhfZmIuaAo+IEBAIC0wLDAgKzEsMzAgQEAKPiArLyoKPiArICog WGlsaW54IERSTSBLTVMgRnJhbWVidWZmZXIgaGVscGVyIGhlYWRlcgo+ICsgKgo+ICsgKiAgQ29w eXJpZ2h0IChDKSAyMDE1IC0gMjAxOCBYaWxpbngsIEluYy4KPiArICoKPiArICogIEF1dGhvcjog SHl1biBXb28gS3dvbiA8aHl1bi5rd29uQHhpbGlueC5jb20+Cj4gKyAqCj4gKyAqIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfWExOWF9GQl9I Xwo+ICsjZGVmaW5lIF9YTE5YX0ZCX0hfCj4gKwo+ICtzdHJ1Y3QgZHJtX2ZiX2hlbHBlcjsKPiAr Cj4gK2RtYV9hZGRyX3QKPiAreGxueF9mYl9nZXRfcGFkZHIoc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqYmFzZV9mYiwgdW5zaWduZWQgaW50IHBsYW5lKTsKPiArCj4gK3ZvaWQgeGxueF9mYl9yZXN0 b3JlX21vZGUoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlcik7Cj4gK3N0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKgo+ICt4bG54X2ZiX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKPiArCSAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX21v ZGVfZmJfY21kMiAqbW9kZV9jbWQpOwo+ICt2b2lkIHhsbnhfZmJfaG90cGx1Z19ldmVudChzdHJ1 Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKTsKPiArc3RydWN0IGRybV9mYl9oZWxwZXIgKgo+ ICt4bG54X2ZiX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgaW50IHByZWZlcnJlZF9icHAs Cj4gKwkgICAgIHVuc2lnbmVkIGludCBtYXhfY29ubl9jb3VudCwgdW5zaWduZWQgaW50IGFsaWdu LAo+ICsJICAgICB1bnNpZ25lZCBpbnQgdnJlc19tdWx0KTsKPiArdm9pZCB4bG54X2ZiX2Zpbmko c3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlcik7Cj4gKwo+ICsjZW5kaWYgLyogX1hMTlhf RkJfSF8gKi8KPiAtLSAKPiAyLjcuNAo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCj4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+IGRyaS1kZXZlbEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2RyaS1kZXZlbAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5l ZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QK ZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=