From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liviu Dudau Subject: Re: [PATCH 2/2] drm/bridge: Add support for a virtual display bridge Date: Tue, 28 Aug 2018 15:46:36 +0100 Message-ID: <20180828144636.GH907@e110455-lin.cambridge.arm.com> References: <20180824122332.3238-1-linus.walleij@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from foss.arm.com (foss.arm.com [217.140.101.70]) by gabe.freedesktop.org (Postfix) with ESMTP id 72FF56E0AE for ; Tue, 28 Aug 2018 14:46:38 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20180824122332.3238-1-linus.walleij@linaro.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Linus Walleij Cc: Lorenzo Pieralisi , dri-devel@lists.freedesktop.org, Ryan Harkin , Laurent Pinchart , Sudeep Holla , linux-arm-kernel@lists.infradead.org List-Id: dri-devel@lists.freedesktop.org SGkgTGludXMsCgpPbiBGcmksIEF1ZyAyNCwgMjAxOCBhdCAwMjoyMzozMlBNICswMjAwLCBMaW51 cyBXYWxsZWlqIHdyb3RlOgo+IFRoaXMgYWRkcyBhIHZlcnkgc21hbGwgYW5kIHNpbXBsZSBkcml2 ZXIgdG8gcmVhZCBhIHZpcnR1YWwKCi4uLi4gYW5kIHNpbXBsZSBicmlkZ2UgZHJpdmVyIC4uLi4K Cj4gZGlzcGxheSBjaGFyYWN0ZXJpc3RpYyBmcm9tIHRoZSBkZXZpY2UgdHJlZSBhbmQgcmVmbGVj dCBpdAo+IGJhY2sgaW50byBEUk0gc28gYSBkaXNwbGF5IGRyaXZlciBpbiBhIHZpcnR1YWwgZW52 aXJvbm1lbnQKPiBrbm93cyBob3cgdG8gY29uZmlndXJlIGl0cyBvdXRwdXQuCgpJdCBpcyB0aGUg am9iIG9mIHRoZSBlbmNvZGVyIHRvIGNvbmZpZ3VyZSBpdHNlbGYgYXMgd2VsbCwgYW5kIEkKdGhp bmsgdGhhdCBmb3IgUlRTTSB5b3UgbmVlZCBhIHZpcnR1YWwgZW5jb2RlciBhcyB3ZWxsLgoKPiAK PiBUaGlzIHdhcyBjcmVhdGVkIGZvciB0aGUgQVJNIFJUU00gYWVtdjhhIGVtdWxhdG9yIGFzIGEg d2F5Cj4gZm9yd2FyZCB0byBjb252ZXJ0IGFsbCBBUk0gcmVmZXJlbmNlIGRlc2lnbnMgdG8gdXNl IHRoZQo+IFBMMTF4IERSTSBkcml2ZXIuCj4gCj4gQ2M6IExpdml1IER1ZGF1IDxMaXZpdS5EdWRh dUBhcm0uY29tPgo+IENjOiBSeWFuIEhhcmtpbiA8cnlhbi5oYXJraW5AbGluYXJvLm9yZz4KPiBT aWduZWQtb2ZmLWJ5OiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQGxpbmFyby5vcmc+Cj4g LS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZyAgICAgICAgICAgfCAgMTAgKysK PiAgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZSAgICAgICAgICB8ICAgMSArCj4gIGRy aXZlcnMvZ3B1L2RybS9icmlkZ2UvdmlydHVhbC1kaXNwbGF5LmMgfCAxODYgKysrKysrKysrKysr KysrKysrKysrKysKPiAgMyBmaWxlcyBjaGFuZ2VkLCAxOTcgaW5zZXJ0aW9ucygrKQo+ICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS92aXJ0dWFsLWRpc3BsYXkuYwo+ IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcgYi9kcml2ZXJz L2dwdS9kcm0vYnJpZGdlL0tjb25maWcKPiBpbmRleCBmYTJjNzk5N2UyZmQuLmNmYjYxMzA1YjNm NiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcKPiBAQCAtMTI2LDYgKzEyNiwxNiBAQCBjb25m aWcgRFJNX1RJX1RGUDQxMAo+ICAJLS0taGVscC0tLQo+ICAJICBUZXhhcyBJbnN0cnVtZW50cyBU RlA0MTAgRFZJL0hETUkgVHJhbnNtaXR0ZXIgZHJpdmVyCj4gIAo+ICtjb25maWcgRFJNX1ZJUlRV QUxfRElTUExBWV9CUklER0UKPiArCXRyaXN0YXRlICJWaXJ0dWFsIERpc3BsYXkgQnJpZGdlIHN1 cHBvcnQiCj4gKwlkZXBlbmRzIG9uIE9GCj4gKwlzZWxlY3QgRFJNX0tNU19IRUxQRVIKPiArCXNl bGVjdCBWSURFT01PREVfSEVMUEVSUwo+ICsJaGVscAo+ICsJICBTdXBwb3J0IGZvciB2aXJ0dWFs aXplZCBlbnZpcm9ubWVudHMgd2hlcmUgdGhlIGF2aWxhYmxlCj4gKwkgIHJlc29sdXRpb24gaXMg Y29udHJvbGxlZCBieSBzb2Z0d2FyZSBjb25maWd1cmF0aW9uIGluCj4gKwkgIHRoZSBkZXZpY2Ug dHJlZS4KPiArCj4gIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9LY29u ZmlnIgo+ICAKPiAgc291cmNlICJkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2Fkdjc1MTEvS2NvbmZp ZyIKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZSBiL2RyaXZl cnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUKPiBpbmRleCAzNWY4OGQ0OGVjMjAuLjJiZGY2N2Q5 ODk3MiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZQo+IEBAIC0xNCw0ICsxNCw1IEBAIG9i ai0kKENPTkZJR19EUk1fVE9TSElCQV9UQzM1ODc2NykgKz0gdGMzNTg3Njcubwo+ICBvYmotJChD T05GSUdfRFJNX0FOQUxPR0lYX0RQKSArPSBhbmFsb2dpeC8KPiAgb2JqLSQoQ09ORklHX0RSTV9J MkNfQURWNzUxMSkgKz0gYWR2NzUxMS8KPiAgb2JqLSQoQ09ORklHX0RSTV9USV9URlA0MTApICs9 IHRpLXRmcDQxMC5vCj4gK29iai0kKENPTkZJR19EUk1fVklSVFVBTF9ESVNQTEFZX0JSSURHRSkg Kz0gdmlydHVhbC1kaXNwbGF5Lm8KPiAgb2JqLXkgKz0gc3lub3BzeXMvCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdmlydHVhbC1kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9k cm0vYnJpZGdlL3ZpcnR1YWwtZGlzcGxheS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwMDAwMDAuLmFiNTViM2Q2YmU4YQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL3ZpcnR1YWwtZGlzcGxheS5jCj4gQEAgLTAsMCArMSwxODYgQEAK PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiArLyoKPiArICogKEMpIENv cHlyaWdodCAyMDE4IExpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAbGluYXJvLm9yZz4KPiAr ICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJt UC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxk cm0vZHJtX2NydGNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX21vZGVzLmg+Cj4gKyNp bmNsdWRlIDx2aWRlby9vZl9kaXNwbGF5X3RpbWluZy5oPgo+ICsKPiArc3RydWN0IHZpcnRlbmMg ewoKSSB0aGluayB0aGUgbmFtZSB5b3UgcGlja2VkIGlzIGdvaW5nIHRvIGJlIGNvbmZ1c2luZywg YXMgdGhpcyBpcyBub3QgYW4KZW5jb2RlciBhdCBhbGwsIGJ1dCBhIHZpcnR1YWwgY29ubmVjdG9y LgoKPiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm07Cj4g KwlzdHJ1Y3QgZHJtX2JyaWRnZSBicmlkZ2U7Cj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciBjb25u ZWN0b3I7Cj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBtb2RlOwo+ICsJdTMyIGJ1c19mbGFn czsKPiArfTsKPiArCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IHZpcnRlbmMgKmJyaWRnZV90b192 aXJ0ZW5jKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCj4gK3sKPiArCXJldHVybiBjb250YWlu ZXJfb2YoYnJpZGdlLCBzdHJ1Y3QgdmlydGVuYywgYnJpZGdlKTsKPiArfQo+ICsKPiArc3RhdGlj IGlubGluZSBzdHJ1Y3QgdmlydGVuYyAqY29ubmVjdG9yX3RvX3ZpcnRlbmMoc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbikKPiArewo+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihjb24sIHN0cnVjdCB2 aXJ0ZW5jLCBjb25uZWN0b3IpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9y X3N0YXR1cwo+ICt2aXJ0ZW5jX2Nvbm5lY3Rvcl9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvciwgYm9vbCBmb3JjZSkKPiArewo+ICsJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNf Y29ubmVjdGVkOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jf ZnVuY3MgdmlydGVuY19jb25uZWN0b3JfZnVuY3MgPSB7Cj4gKwkuZGV0ZWN0ID0gdmlydGVuY19j b25uZWN0b3JfZGV0ZWN0LAo+ICsJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3Npbmds ZV9jb25uZWN0b3JfbW9kZXMsCj4gKwkuZGVzdHJveSA9IGRybV9jb25uZWN0b3JfY2xlYW51cCwK PiArCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKPiArCS5hdG9t aWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0 ZV9zdGF0ZSwKPiArCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nv bm5lY3Rvcl9kZXN0cm95X3N0YXRlLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCB2aXJ0ZW5jX2dl dF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ICt7Cj4gKwlzdHJ1Y3Qg dmlydGVuYyAqdmlydGVuYyA9IGNvbm5lY3Rvcl90b192aXJ0ZW5jKGNvbm5lY3Rvcik7Cj4gKwlz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9IGRybV9tb2RlX2NyZWF0ZSh2aXJ0ZW5jLT5k cm0pOwo+ICsJdTMyIGJ1c19mb3JtYXQgPSBNRURJQV9CVVNfRk1UX1JHQjg4OF8xWDI0Owo+ICsJ aW50IHJldDsKPiArCj4gKwlkcm1fbW9kZV9jb3B5KG1vZGUsICZ2aXJ0ZW5jLT5tb2RlKTsKPiAr CW1vZGUtPnR5cGUgPSBEUk1fTU9ERV9UWVBFX0RSSVZFUiB8IERSTV9NT0RFX1RZUEVfUFJFRkVS UkVEOwo+ICsJbW9kZS0+d2lkdGhfbW0gPSA4MDsKPiArCW1vZGUtPmhlaWdodF9tbSA9IDYwOwo+ ICsJZHJtX21vZGVfc2V0X25hbWUobW9kZSk7Cj4gKwo+ICsJZHJtX21vZGVfcHJvYmVkX2FkZChj b25uZWN0b3IsIG1vZGUpOwo+ICsJcmV0ID0gZHJtX2Rpc3BsYXlfaW5mb19zZXRfYnVzX2Zvcm1h dHMoJmNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLAo+ICsJCQkJCSAgICAgICAmYnVzX2Zvcm1hdCwg MSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0dXJuIDE7Cj4gK30K PiArCj4gK3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cyB2aXJ0ZW5jX21vZGVfdmFsaWQoc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiArCQkJCQkgICAgICAgc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKm1vZGUpCj4gK3sKPiArCXJldHVybiBNT0RFX09LOwo+ICt9Cj4gKwo+ICtz dGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzCj4gK3ZpcnRlbmNf Y29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKPiArCS5nZXRfbW9kZXMgPSB2aXJ0ZW5jX2dldF9t b2RlcywKPiArCS5tb2RlX3ZhbGlkID0gdmlydGVuY19tb2RlX3ZhbGlkLAo+ICt9Owo+ICsKPiAr c3RhdGljIHZvaWQgdmlydGVuY19icmlkZ2VfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJp ZGdlKQo+ICt7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZpcnRlbmNfYnJpZGdlX2VuYWJsZShz dHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+ICt7Cj4gK30KCkkgZG9uJ3QgdGhpbmsgeW91IG5l ZWQgdGhlc2UgZW5hYmxlL2Rpc2FibGUgaG9va3MsIHRoZSBkcm1fYnJpZGdlLmMgY29kZQpzZWVt cyB0byBiZSBjaGVja2luZyBpZiB0aGV5IGFyZSBwcmVzZW50IGFuZCBza2lwcyB0aGVtIGlmIHRo ZXkncmUgbm90LgoKPiArCj4gK3N0YXRpYyB2b2lkIHZpcnRlbmNfYnJpZGdlX21vZGVfc2V0KHN0 cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4gKwkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKm1vZGUsCj4gKwkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkaikKPiArewo+ ICt9CgpTYW1lIGZvciB0aGlzIG9uZSwgQUZBSUNULgoKPiArCj4gK3N0YXRpYyBpbnQgdmlydGVu Y19icmlkZ2VfYXR0YWNoKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCj4gK3sKPiArCXN0cnVj dCB2aXJ0ZW5jICp2aXJ0ZW5jID0gYnJpZGdlX3RvX3ZpcnRlbmMoYnJpZGdlKTsKPiArCXN0cnVj dCBkcm1fZGV2aWNlICpkcm0gPSBicmlkZ2UtPmRldjsKPiArCWludCByZXQ7Cj4gKwo+ICsJdmly dGVuYy0+ZHJtID0gZHJtOwo+ICsJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZ2aXJ0ZW5jLT5j b25uZWN0b3IsCj4gKwkJCQkgJnZpcnRlbmNfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7Cj4gKwo+ ICsJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRybSwgRFJJVkVSX0FUT01JQykpIHsKPiAr CQlkZXZfZXJyKHZpcnRlbmMtPmRldiwKPiArCQkJIlZpcnR1YWwgRGlzcGxheSBicmlkZ2UgZHJp dmVyIGlzIG9ubHkgY29tcGF0aWJsZSB3aXRoIERSTSBkZXZpY2VzIHN1cHBvcnRpbmcgYXRvbWlj IHVwZGF0ZXNcbiIpOwo+ICsJCXJldHVybiAtRU5PVFNVUFA7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0g ZHJtX2Nvbm5lY3Rvcl9pbml0KGRybSwgJnZpcnRlbmMtPmNvbm5lY3RvciwKPiArCQkJCSAmdmly dGVuY19jb25uZWN0b3JfZnVuY3MsCj4gKwkJCQkgRFJNX01PREVfQ09OTkVDVE9SX1ZJUlRVQUwp Owo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXZpcnRlbmMtPmNvbm5lY3Rv ci5wb2xsZWQgPSBEUk1fQ09OTkVDVE9SX1BPTExfQ09OTkVDVDsKPiArCj4gKwlkcm1fbW9kZV9j b25uZWN0b3JfYXR0YWNoX2VuY29kZXIoJnZpcnRlbmMtPmNvbm5lY3RvciwgYnJpZGdlLT5lbmNv ZGVyKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBk cm1fYnJpZGdlX2Z1bmNzIHZpcnRlbmNfYnJpZGdlX2Z1bmNzID0gewo+ICsJLmF0dGFjaCA9IHZp cnRlbmNfYnJpZGdlX2F0dGFjaCwKPiArCS5tb2RlX3NldCA9IHZpcnRlbmNfYnJpZGdlX21vZGVf c2V0LAo+ICsJLmRpc2FibGUgPSB2aXJ0ZW5jX2JyaWRnZV9kaXNhYmxlLAo+ICsJLmVuYWJsZSA9 IHZpcnRlbmNfYnJpZGdlX2VuYWJsZSwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgdmlydGVuY19w cm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmcGRldi0+ZGV2Owo+ICsJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zf bm9kZTsKPiArCXN0cnVjdCB2aXJ0ZW5jICp2aXJ0ZW5jOwo+ICsJaW50IHJldDsKPiArCj4gKwl2 aXJ0ZW5jID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCp2aXJ0ZW5jKSwgR0ZQX0tFUk5FTCk7 Cj4gKwlpZiAoIXZpcnRlbmMpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJcmV0ID0gb2Zf Z2V0X2RybV9kaXNwbGF5X21vZGUobnAsICZ2aXJ0ZW5jLT5tb2RlLAo+ICsJCQkJICAgICAgJnZp cnRlbmMtPmJ1c19mbGFncywKPiArCQkJCSAgICAgIDApOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1 cm4gcmV0Owo+ICsKPiArCXZpcnRlbmMtPmRldiA9IGRldjsKPiArCXZpcnRlbmMtPmJyaWRnZS5m dW5jcyA9ICZ2aXJ0ZW5jX2JyaWRnZV9mdW5jczsKPiArCXZpcnRlbmMtPmJyaWRnZS5vZl9ub2Rl ID0gZGV2LT5vZl9ub2RlOwo+ICsJZHJtX2JyaWRnZV9hZGQoJnZpcnRlbmMtPmJyaWRnZSk7Cj4g KwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCB2aXJ0ZW5jKTsKPiArCWRldl9pbmZvKGRldiwg ImFkZGVkIHZpcnR1YWwgZGlzcGxheSBicmlkZ2VcbiIpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IHZpcnRlbmNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCj4gKwo+ICt7Cj4gKwlzdHJ1Y3QgdmlydGVuYyAqdmlydGVuYyA9IHBsYXRmb3JtX2dl dF9kcnZkYXRhKHBkZXYpOwo+ICsKPiArCWRybV9icmlkZ2VfcmVtb3ZlKCZ2aXJ0ZW5jLT5icmlk Z2UpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9m X2RldmljZV9pZCB2aXJ0ZW5jX2R0X2lkc1tdID0gewo+ICsJeyAuY29tcGF0aWJsZSA9ICJ2aXJ0 dWFsLWRpc3BsYXktYnJpZGdlIiwgfSwKPiArCXsgfQo+ICt9Owo+ICtNT0RVTEVfREVWSUNFX1RB QkxFKG9mLCB2aXJ0ZW5jX2R0X2lkcyk7Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2Ry aXZlciB2aXJ0ZW5jX2RyaXZlciA9IHsKPiArCS5kcml2ZXIgPSB7Cj4gKwkJLm5hbWUgPSAidmly dGVuYyIsCj4gKwkJLm9mX21hdGNoX3RhYmxlID0gdmlydGVuY19kdF9pZHMsCj4gKwl9LAo+ICsJ LnByb2JlID0gdmlydGVuY19wcm9iZSwKPiArCS5yZW1vdmUgPSB2aXJ0ZW5jX3JlbW92ZSwKPiAr fTsKPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcih2aXJ0ZW5jX2RyaXZlcik7Cj4gKwo+ICtNT0RV TEVfQVVUSE9SKCJMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQGxpbmFyby5vcmc+Iik7Cj4g K01PRFVMRV9ERVNDUklQVElPTigiVmlydHVhbCBEaXNwbGF5IEJyaWRnZSIpOwo+ICtNT0RVTEVf TElDRU5TRSgiR1BMIik7Cj4gLS0gCj4gMi4xNy4xCj4gCgpJIG5lZWQgdG8gY2hlY2sgaG93IHlv dXIgZHJpdmVyIGJlaGF2ZXMgY29tcGFyZWQgd2l0aCBteSBvbGQgdmlydHVhbAplbmNvZGVyIGRy aXZlciBidXQgYXQgYSBnbGFuY2UgdGhpbmdzIGxvb2sgT0sgdG8gbWUuCgpCZXN0IHJlZ2FyZHMs Ckxpdml1CgoKLS0gCj09PT09PT09PT09PT09PT09PT09CnwgSSB3b3VsZCBsaWtlIHRvIHwKfCBm aXggdGhlIHdvcmxkLCAgfAp8IGJ1dCB0aGV5J3JlIG5vdCB8CnwgZ2l2aW5nIG1lIHRoZSAgIHwK IFwgc291cmNlIGNvZGUhICAvCiAgLS0tLS0tLS0tLS0tLS0tCiAgICDCr1xfKOODhClfL8KvCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBt YWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=