From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yolkfull Chow Subject: Re: [PATCH] KVM test: Add PCI device assignment support Date: Wed, 13 Jan 2010 10:19:02 +0800 Message-ID: <20100113021838.GA2333@aFu.nay.redhat.com> References: <1263320893-6219-1-git-send-email-lmr@redhat.com> Reply-To: Yolkfull Chow Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: autotest@test.kernel.org, kvm@vger.kernel.org To: Lucas Meneghel Rodrigues Return-path: Content-Disposition: inline In-Reply-To: <1263320893-6219-1-git-send-email-lmr@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: autotest-bounces@test.kernel.org Errors-To: autotest-bounces@test.kernel.org List-Id: kvm.vger.kernel.org T24gVHVlLCBKYW4gMTIsIDIwMTAgYXQgMDQ6Mjg6MTNQTSAtMDIwMCwgTHVjYXMgTWVuZWdoZWwg Um9kcmlndWVzIHdyb3RlOgo+IEFkZCBzdXBwb3J0IHRvIFBDSSBkZXZpY2UgYXNzaWdubWVudCBv biB0aGUga3ZtIHRlc3QuIEl0IHN1cHBvcnRzCj4gYm90aCBTUi1JT1YgdmlydHVhbCBmdW5jdGlv bnMgYW5kIHBoeXNpY2FsIE5JQyBjYXJkIGRldmljZQo+IGFzc2lnbm1lbnQuCj4gCj4gU2luZ2xl IFJvb3QgSS9PIFZpcnR1YWxpemF0aW9uIChTUi1JT1YpIGFsbG93cyBhIHNpbmdsZSBQQ0kgZGV2 aWNlIHRvCj4gYmUgc2hhcmVkIGFtb25nc3QgbXVsdGlwbGUgdmlydHVhbCBtYWNoaW5lcyB3aGls ZSByZXRhaW5pbmcgdGhlCj4gcGVyZm9ybWFuY2UgYmVuZWZpdCBvZiBhc3NpZ25pbmcgYSBQQ0kg ZGV2aWNlIHRvIGEgdmlydHVhbCBtYWNoaW5lLgo+IEEgY29tbW9uIGV4YW1wbGUgaXMgd2hlcmUg YSBzaW5nbGUgU1ItSU9WIGNhcGFibGUgTklDIC0gd2l0aCBwZXJoYXBzCj4gb25seSBhIHNpbmds ZSBwaHlzaWNhbCBuZXR3b3JrIHBvcnQgLSBtaWdodCBiZSBzaGFyZWQgd2l0aCBtdWx0aXBsZQo+ IHZpcnR1YWwgbWFjaGluZXMgYnkgYXNzaWduaW5nIGEgdmlydHVhbCBmdW5jdGlvbiB0byBlYWNo IFZNLgo+IAo+IFNSLUlPViBzdXBwb3J0IGlzIGltcGxlbWVudGVkIGluIHRoZSBrZXJuZWwuIFRo ZSBjb3JlIGltcGxlbWVudGF0aW9uCj4gaXMgY29udGFpbmVkIGluIHRoZSBQQ0kgc3Vic3lzdGVt LCBidXQgdGhlcmUgbXVzdCBhbHNvIGJlIGRyaXZlciBzdXBwb3J0Cj4gZm9yIGJvdGggdGhlIFBo eXNpY2FsIEZ1bmN0aW9uIChQRikgYW5kIFZpcnR1YWwgRnVuY3Rpb24gKFZGKSBkZXZpY2VzLgo+ IFdpdGggYW4gU1ItSU9WIGNhcGFibGUgZGV2aWNlIG9uZSBjYW4gYWxsb2NhdGUgVkZzIGZyb20g YSBQRi4gVGhlIFZGcwo+IHN1cmZhY2UgYXMgUENJIGRldmljZXMgd2hpY2ggYXJlIGJhY2tlZCBv biB0aGUgcGh5c2ljYWwgUENJIGRldmljZSBieQo+IHJlc291cmNlcyAocXVldWVzLCBhbmQgcmVn aXN0ZXIgc2V0cykuCj4gCj4gRGV2aWNlIHN1cHBvcnQ6Cj4gCj4gSW4gMi42LjMwLCB0aGUgSW50 ZWzCriA4MjU3NiBHaWdhYml0IEV0aGVybmV0IENvbnRyb2xsZXIgaXMgdGhlIG9ubHkKPiBTUi1J T1YgY2FwYWJsZSBkZXZpY2Ugc3VwcG9ydGVkLiBUaGUgaWdiIGRyaXZlciBoYXMgUEYgc3VwcG9y dCBhbmQgdGhlCj4gaWdidmYgaGFzIFZGIHN1cHBvcnQuCj4gCj4gSW4gMi42LjMxIHRoZSBOZXRl cmlvbsKuIFgzMTAw4oSiIGlzIHN1cHBvcnRlZCBhcyB3ZWxsLiBUaGlzIGRldmljZSB1c2VzCj4g dGhlIHNhbWUgdnhnZSBkcml2ZXIgZm9yIHRoZSBQRiBhcyB3ZWxsIGFzIHRoZSBWRnMuCj4gCj4g SW4gb3JkZXIgdG8gY29uZmlndXJlIHRoZSB0ZXN0Ogo+IAo+ICAgKiBGb3IgU1ItSU9WIHZpcnR1 YWwgZnVuY3Rpb25zIHBhc3N0aHJvdWdoLCB3ZSBjb3VsZCBzcGVjaWZ5IHRoZQo+ICAgICBtb2R1 bGUgcGFyYW1ldGVyICdtYXhfdmZzJyBpbiBjb25maWcgZmlsZS4KPiAgICogRm9yIHBoeXNpY2Fs IE5JQyBjYXJkIHBhc3MgdGhyb3VnaCwgd2Ugc2hvdWxkIHNwZWNpZnkgdGhlIGRldmljZQo+ICAg ICBuYW1lKHMpLgoKTG9va3MgZ29vZCBmb3IgbWUuIApMdWNhcywgdGhhbmsgeW91IHNvIG11Y2gg Zm9yIGltcHJvdmluZyB0aGlzIHBhdGNoLiA6LSkKCj4gCj4gU2lnbmVkLW9mZi1ieTogWW9sa2Z1 bGwgQ2hvdyA8eXpob3VAcmVkaGF0LmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBMdWNhcyBNZW5lZ2hl bCBSb2RyaWd1ZXMgPGxtckByZWRoYXQuY29tPgo+IC0tLQo+ICBjbGllbnQvdGVzdHMva3ZtL2t2 bV91dGlscy5weSAgICAgICAgICB8ICAyODQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKPiAgY2xpZW50L3Rlc3RzL2t2bS9rdm1fdm0ucHkgICAgICAgICAgICAgfCAgIDYwICsrKysr KysKPiAgY2xpZW50L3Rlc3RzL2t2bS90ZXN0c19iYXNlLmNmZy5zYW1wbGUgfCAgIDIyICsrKy0K PiAgMyBmaWxlcyBjaGFuZ2VkLCAzNjUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKPiAK PiBkaWZmIC0tZ2l0IGEvY2xpZW50L3Rlc3RzL2t2bS9rdm1fdXRpbHMucHkgYi9jbGllbnQvdGVz dHMva3ZtL2t2bV91dGlscy5weQo+IGluZGV4IDJiYmJlMjIuLmEyZDk2MDcgMTAwNjQ0Cj4gLS0t IGEvY2xpZW50L3Rlc3RzL2t2bS9rdm1fdXRpbHMucHkKPiArKysgYi9jbGllbnQvdGVzdHMva3Zt L2t2bV91dGlscy5weQo+IEBAIC05MjQsMyArOTI0LDI4NyBAQCBkZWYgY3JlYXRlX3JlcG9ydChy ZXBvcnRfZGlyLCByZXN1bHRzX2Rpcik6Cj4gICAgICByZXBvcnRlciA9IG9zLnBhdGguam9pbihy ZXBvcnRfZGlyLCAnaHRtbF9yZXBvcnQucHknKQo+ICAgICAgaHRtbF9maWxlID0gb3MucGF0aC5q b2luKHJlc3VsdHNfZGlyLCAncmVzdWx0cy5odG1sJykKPiAgICAgIG9zLnN5c3RlbSgnJXMgLXIg JXMgLWYgJXMgLVInICUgKHJlcG9ydGVyLCByZXN1bHRzX2RpciwgaHRtbF9maWxlKSkKPiArCj4g Kwo+ICtkZWYgZ2V0X2Z1bGxfcGNpX2lkKHBjaV9pZCk6Cj4gKyAgICAiIiIKPiArICAgIEdldCBm dWxsIFBDSSBJRCBvZiBwY2lfaWQuCj4gKwo+ICsgICAgQHBhcmFtIHBjaV9pZDogUENJIElEIG9m IGEgZGV2aWNlLgo+ICsgICAgIiIiCj4gKyAgICBjbWQgPSAibHNwY2kgLUQgfCBhd2sgJy8lcy8g e3ByaW50ICQxfSciICUgcGNpX2lkCj4gKyAgICBzdGF0dXMsIGZ1bGxfaWQgPSBjb21tYW5kcy5n ZXRzdGF0dXNvdXRwdXQoY21kKQo+ICsgICAgaWYgc3RhdHVzICE9IDA6Cj4gKyAgICAgICAgcmV0 dXJuIE5vbmUKPiArICAgIHJldHVybiBmdWxsX2lkCj4gKwo+ICsKPiArZGVmIGdldF92ZW5kb3Jf ZnJvbV9wY2lfaWQocGNpX2lkKToKPiArICAgICIiIgo+ICsgICAgQ2hlY2sgb3V0IHRoZSBkZXZp Y2UgdmVuZG9yIElEIGFjY29yZGluZyB0byBwY2lfaWQuCj4gKwo+ICsgICAgQHBhcmFtIHBjaV9p ZDogUENJIElEIG9mIGEgZGV2aWNlLgo+ICsgICAgIiIiCj4gKyAgICBjbWQgPSAibHNwY2kgLW4g fCBhd2sgJy8lcy8ge3ByaW50ICQzfSciICUgcGNpX2lkCj4gKyAgICByZXR1cm4gcmUuc3ViKCI6 IiwgIiAiLCBjb21tYW5kcy5nZXRvdXRwdXQoY21kKSkKPiArCj4gKwo+ICtjbGFzcyBQY2lBc3Np Z25hYmxlKG9iamVjdCk6Cj4gKyAgICAiIiIKPiArICAgIFJlcXVlc3QgUENJIGFzc2lnbmFibGUg ZGV2aWNlcyBvbiBob3N0LiBJdCB3aWxsIGNoZWNrIHdoZXRoZXIgdG8gcmVxdWVzdAo+ICsgICAg UEYgKHBoeXNpY2FsIEZ1bmN0aW9ucykgb3IgVkYgKFZpcnR1YWwgRnVuY3Rpb25zKS4KPiArICAg ICIiIgo+ICsgICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGU9Im5pY192ZiIsIGRyaXZlcj1Ob25l LCBkcml2ZXJfb3B0aW9uPU5vbmUsCj4gKyAgICAgICAgICAgICAgICAgbmFtZXM9Tm9uZSwgZGV2 aWNlc19yZXF1ZXN0ZWQ9Tm9uZSk6Cj4gKyAgICAgICAgIiIiCj4gKyAgICAgICAgSW5pdGlhbGl6 ZSBwYXJhbWV0ZXIgJ3R5cGUnIHdoaWNoIGNvdWxkIGJlOgo+ICsgICAgICAgIG5pY192ZjogVmly dHVhbCBGdW5jdGlvbnMKPiArICAgICAgICBuaWNfcGY6IFBoeXNpY2FsIEZ1bmN0aW9uIChhY3R1 YWwgaGFyZHdhcmUpCj4gKyAgICAgICAgbWl4ZWQ6ICBCb3RoIGluY2x1ZGVzIFZGcyBhbmQgUEZz Cj4gKwo+ICsgICAgICAgIElmIHBhc3MgdGhyb3VnaCBQaHlzaWNhbCBOSUMgY2FyZHMsIHdlIG5l ZWQgdG8gc3BlY2lmeSB3aGljaCBkZXZpY2VzCj4gKyAgICAgICAgdG8gYmUgYXNzaWduZWQsIGUu Zy4gJ2V0aDEgZXRoMicuCj4gKwo+ICsgICAgICAgIElmIHBhc3MgdGhyb3VnaCBWaXJ0dWFsIEZ1 bmN0aW9ucywgd2UgbmVlZCB0byBzcGVjaWZ5IGhvdyBtYW55IHZmcwo+ICsgICAgICAgIGFyZSBn b2luZyB0byBiZSBhc3NpZ25lZCwgZS5nLiBwYXNzdGhyb3VnaF9jb3VudCA9IDggYW5kIG1heF92 ZnMgaW4KPiArICAgICAgICBjb25maWcgZmlsZS4KPiArCj4gKyAgICAgICAgQHBhcmFtIHR5cGU6 IFBDSSBkZXZpY2UgdHlwZS4KPiArICAgICAgICBAcGFyYW0gZHJpdmVyOiBLZXJuZWwgbW9kdWxl IGZvciB0aGUgUENJIGFzc2lnbmFibGUgZGV2aWNlLgo+ICsgICAgICAgIEBwYXJhbSBkcml2ZXJf b3B0aW9uOiBNb2R1bGUgb3B0aW9uIHRvIHNwZWNpZnkgdGhlIG1heGltdW0gbnVtYmVyIG9mCj4g KyAgICAgICAgICAgICAgICBWRnMgKGVnICdtYXhfdmZzPTcnKQo+ICsgICAgICAgIEBwYXJhbSBu YW1lczogUGh5c2ljYWwgTklDIGNhcmRzIGNvcnJlc3BvbmRlbnQgbmV0d29yayBpbnRlcmZhY2Vz LAo+ICsgICAgICAgICAgICAgICAgZS5nLidldGgxIGV0aDIgLi4uJwo+ICsgICAgICAgIEBwYXJh bSBkZXZpY2VzX3JlcXVlc3RlZDogTnVtYmVyIG9mIGRldmljZXMgYmVpbmcgcmVxdWVzdGVkLgo+ ICsgICAgICAgICIiIgo+ICsgICAgICAgIHNlbGYudHlwZSA9IHR5cGUKPiArICAgICAgICBzZWxm LmRyaXZlciA9IGRyaXZlcgo+ICsgICAgICAgIHNlbGYuZHJpdmVyX29wdGlvbiA9IGRyaXZlcl9v cHRpb24KPiArICAgICAgICBpZiBuYW1lczoKPiArICAgICAgICAgICAgc2VsZi5uYW1lX2xpc3Qg PSBuYW1lcy5zcGxpdCgpCj4gKyAgICAgICAgaWYgZGV2aWNlc19yZXF1ZXN0ZWQ6Cj4gKyAgICAg ICAgICAgIHNlbGYuZGV2aWNlc19yZXF1ZXN0ZWQgPSBpbnQoZGV2aWNlc19yZXF1ZXN0ZWQpCj4g KyAgICAgICAgZWxzZToKPiArICAgICAgICAgICAgc2VsZi5kZXZpY2VzX3JlcXVlc3RlZCA9IE5v bmUKPiArCj4gKwo+ICsgICAgZGVmIF9nZXRfcGZfcGNpX2lkKHNlbGYsIG5hbWUsIHNlYXJjaF9z dHIpOgo+ICsgICAgICAgICIiIgo+ICsgICAgICAgIEdldCB0aGUgUEYgUENJIElEIGFjY29yZGlu ZyB0byBuYW1lLgo+ICsKPiArICAgICAgICBAcGFyYW0gbmFtZTogTmFtZSBvZiB0aGUgUENJIGRl dmljZS4KPiArICAgICAgICBAcGFyYW0gc2VhcmNoX3N0cjogU2VhcmNoIHN0cmluZyB0byBiZSB1 c2VkIG9uIGxzcGNpLgo+ICsgICAgICAgICIiIgo+ICsgICAgICAgIGNtZCA9ICJldGh0b29sIC1p ICVzIHwgYXdrICcvYnVzLWluZm8vIHtwcmludCAkMn0nIiAlIG5hbWUKPiArICAgICAgICBzLCBw Y2lfaWQgPSBjb21tYW5kcy5nZXRzdGF0dXNvdXRwdXQoY21kKQo+ICsgICAgICAgIGlmIG5vdCAo cyBvciAiQ2Fubm90IGdldCBkcml2ZXIgaW5mb3JtYXRpb24iIGluIHBjaV9pZCk6Cj4gKyAgICAg ICAgICAgIHJldHVybiBwY2lfaWRbNTpdCj4gKyAgICAgICAgY21kID0gImxzcGNpIHwgYXdrICcv JXMvIHtwcmludCAkMX0nIiAlIHNlYXJjaF9zdHIKPiArICAgICAgICBwY2lfaWRzID0gW2lkIGZv ciBpZCBpbiBjb21tYW5kcy5nZXRvdXRwdXQoY21kKS5zcGxpdGxpbmVzKCldCj4gKyAgICAgICAg bmljX2lkID0gaW50KHJlLnNlYXJjaCgnWzAtOV0rJywgbmFtZSkuZ3JvdXAoMCkpCj4gKyAgICAg ICAgaWYgKGxlbihwY2lfaWRzKSAtIDEpIDwgbmljX2lkOgo+ICsgICAgICAgICAgICByZXR1cm4g Tm9uZQo+ICsgICAgICAgIHJldHVybiBwY2lfaWRzW25pY19pZF0KPiArCj4gKwo+ICsgICAgZGVm IF9yZWxlYXNlX2RldihzZWxmLCBwY2lfaWQpOgo+ICsgICAgICAgICIiIgo+ICsgICAgICAgIFJl bGVhc2UgYSBzaW5nbGUgUENJIGRldmljZS4KPiArCj4gKyAgICAgICAgQHBhcmFtIHBjaV9pZDog UENJIElEIG9mIGEgZ2l2ZW4gUENJIGRldmljZS4KPiArICAgICAgICAiIiIKPiArICAgICAgICBi YXNlX2RpciA9ICIvc3lzL2J1cy9wY2kiCj4gKyAgICAgICAgZnVsbF9pZCA9IGdldF9mdWxsX3Bj aV9pZChwY2lfaWQpCj4gKyAgICAgICAgdmVuZG9yX2lkID0gZ2V0X3ZlbmRvcl9mcm9tX3BjaV9p ZChwY2lfaWQpCj4gKyAgICAgICAgZHJ2X3BhdGggPSBvcy5wYXRoLmpvaW4oYmFzZV9kaXIsICJk ZXZpY2VzLyVzL2RyaXZlciIgJSBmdWxsX2lkKQo+ICsgICAgICAgIGlmICdwY2ktc3R1YicgaW4g b3MucmVhZGxpbmsoZHJ2X3BhdGgpOgo+ICsgICAgICAgICAgICBjbWQgPSAiZWNobyAnJXMnID4g JXMvbmV3X2lkIiAlICh2ZW5kb3JfaWQsIGRydl9wYXRoKQo+ICsgICAgICAgICAgICBpZiBvcy5z eXN0ZW0oY21kKToKPiArICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQo+ICsKPiArICAgICAg ICAgICAgc3R1Yl9wYXRoID0gb3MucGF0aC5qb2luKGJhc2VfZGlyLCAiZHJpdmVycy9wY2ktc3R1 YiIpCj4gKyAgICAgICAgICAgIGNtZCA9ICJlY2hvICclcycgPiAlcy91bmJpbmQiICUgKGZ1bGxf aWQsIHN0dWJfcGF0aCkKPiArICAgICAgICAgICAgaWYgb3Muc3lzdGVtKGNtZCk6Cj4gKyAgICAg ICAgICAgICAgICByZXR1cm4gRmFsc2UKPiArCj4gKyAgICAgICAgICAgIGRyaXZlciA9IHNlbGYu ZGV2X2RyaXZlcnNbcGNpX2lkXQo+ICsgICAgICAgICAgICBjbWQgPSAiZWNobyAnJXMnID4gJXMv YmluZCIgJSAoZnVsbF9pZCwgZHJpdmVyKQo+ICsgICAgICAgICAgICBpZiBvcy5zeXN0ZW0oY21k KToKPiArICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQo+ICsKPiArICAgICAgICByZXR1cm4g VHJ1ZQo+ICsKPiArCj4gKyAgICBkZWYgZ2V0X3ZmX2RldnMoc2VsZik6Cj4gKyAgICAgICAgIiIi Cj4gKyAgICAgICAgQ2F0Y2ggYWxsIFZGcyBQQ0kgSURzLgo+ICsKPiArICAgICAgICBAcmV0dXJu OiBMaXN0IHdpdGggYWxsIFBDSSBJRHMgZm9yIHRoZSBWaXJ0dWFsIEZ1bmN0aW9ucyBhdmFsaWFi bGUKPiArICAgICAgICAiIiIKPiArICAgICAgICBpZiBub3Qgc2VsZi5zcl9pb3Zfc2V0dXAoKToK PiArICAgICAgICAgICAgcmV0dXJuIFtdCj4gKwo+ICsgICAgICAgIGNtZCA9ICJsc3BjaSB8IGF3 ayAnL1ZpcnR1YWwgRnVuY3Rpb24vIHtwcmludCAkMX0nIgo+ICsgICAgICAgIHJldHVybiBjb21t YW5kcy5nZXRvdXRwdXQoY21kKS5zcGxpdCgpCj4gKwo+ICsKPiArICAgIGRlZiBnZXRfcGZfZGV2 cyhzZWxmKToKPiArICAgICAgICAiIiIKPiArICAgICAgICBDYXRjaCBhbGwgUEZzIFBDSSBJRHMu Cj4gKwo+ICsgICAgICAgIEByZXR1cm46IExpc3Qgd2l0aCBhbGwgUENJIElEcyBmb3IgdGhlIHBo eXNpY2FsIGhhcmR3YXJlIHJlcXVlc3RlZAo+ICsgICAgICAgICIiIgo+ICsgICAgICAgIHBmX2lk cyA9IFtdCj4gKyAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi5uYW1lX2xpc3Q6Cj4gKyAgICAgICAg ICAgIHBmX2lkID0gc2VsZi5fZ2V0X3BmX3BjaV9pZChuYW1lLCAiRXRoZXJuZXQiKQo+ICsgICAg ICAgICAgICBpZiBub3QgcGZfaWQ6Cj4gKyAgICAgICAgICAgICAgICBjb250aW51ZQo+ICsgICAg ICAgICAgICBwZl9pZHMuYXBwZW5kKHBmX2lkKQo+ICsgICAgICAgIHJldHVybiBwZl9pZHMKPiAr Cj4gKwo+ICsgICAgZGVmIGdldF9kZXZzKHNlbGYsIGNvdW50KToKPiArICAgICAgICAiIiIKPiAr ICAgICAgICBDaGVjayBvdXQgYWxsIGRldmljZXMnIFBDSSBJRHMgYWNjb3JkaW5nIHRvIHRoZWly IG5hbWUuCj4gKwo+ICsgICAgICAgIEBwYXJhbSBjb3VudDogY291bnQgbnVtYmVyIG9mIFBDSSBk ZXZpY2VzIG5lZWRlZCBmb3IgcGFzcyB0aHJvdWdoCj4gKyAgICAgICAgQHJldHVybjogYSBsaXN0 IG9mIGFsbCBkZXZpY2VzJyBQQ0kgSURzCj4gKyAgICAgICAgIiIiCj4gKyAgICAgICAgaWYgc2Vs Zi50eXBlID09ICJuaWNfdmYiOgo+ICsgICAgICAgICAgICB2Zl9pZHMgPSBzZWxmLmdldF92Zl9k ZXZzKCkKPiArICAgICAgICBlbGlmIHNlbGYudHlwZSA9PSAibmljX3BmIjoKPiArICAgICAgICAg ICAgdmZfaWRzID0gc2VsZi5nZXRfcGZfZGV2cygpCj4gKyAgICAgICAgZWxpZiBzZWxmLnR5cGUg PT0gIm1peGVkIjoKPiArICAgICAgICAgICAgdmZfaWRzID0gc2VsZi5nZXRfdmZfZGV2cygpCj4g KyAgICAgICAgICAgIHZmX2lkcy5leHRlbmQoc2VsZi5nZXRfcGZfZGV2cygpKQo+ICsgICAgICAg IHJldHVybiB2Zl9pZHNbMDpjb3VudF0KPiArCj4gKwo+ICsgICAgZGVmIGdldF92ZnNfY291bnQo c2VsZik6Cj4gKyAgICAgICAgIiIiCj4gKyAgICAgICAgR2V0IFZGcyBjb3VudCBudW1iZXIgYWNj b3JkaW5nIHRvIGxzcGNpLgo+ICsgICAgICAgICIiIgo+ICsgICAgICAgIGNtZCA9ICJsc3BjaSB8 IGdyZXAgJ1ZpcnR1YWwgRnVuY3Rpb24nIHwgd2MgLWwiCj4gKyAgICAgICAgIyBGb3IgZWFjaCBW RiB3ZSdsbCBzZWUgMiBwcmludHMgb2YgJ1ZpcnR1YWwgRnVuY3Rpb24nLCBzbyBsZXQncwo+ICsg ICAgICAgICMgZGl2aWRlIHRoZSByZXN1bHQgcGVyIDIKPiArICAgICAgICByZXR1cm4gaW50KGNv bW1hbmRzLmdldG91dHB1dChjbWQpKSAvIDIKPiArCj4gKwo+ICsgICAgZGVmIGNoZWNrX3Zmc19j b3VudChzZWxmKToKPiArICAgICAgICAiIiIKPiArICAgICAgICBDaGVjayBWRnMgY291bnQgbnVt YmVyIGFjY29yZGluZyB0byB0aGUgcGFyYW1ldGVyIGRyaXZlcl9vcHRpb25zLgo+ICsgICAgICAg ICIiIgo+ICsgICAgICAgIHJldHVybiAoc2VsZi5nZXRfdmZzX2NvdW50ID09IHNlbGYuZGV2aWNl c19yZXF1ZXN0ZWQpCj4gKwo+ICsKPiArICAgIGRlZiBpc19iaW5kZWRfdG9fc3R1YihzZWxmLCBm dWxsX2lkKToKPiArICAgICAgICAiIiIKPiArICAgICAgICBWZXJpZnkgd2hldGhlciB0aGUgZGV2 aWNlIHdpdGggZnVsbF9pZCBpcyBhbHJlYWR5IGJpbmRlZCB0byBwY2ktc3R1Yi4KPiArCj4gKyAg ICAgICAgQHBhcmFtIGZ1bGxfaWQ6IEZ1bGwgSUQgZm9yIHRoZSBnaXZlbiBQQ0kgZGV2aWNlCj4g KyAgICAgICAgIiIiCj4gKyAgICAgICAgYmFzZV9kaXIgPSAiL3N5cy9idXMvcGNpIgo+ICsgICAg ICAgIHN0dWJfcGF0aCA9IG9zLnBhdGguam9pbihiYXNlX2RpciwgImRyaXZlcnMvcGNpLXN0dWIi KQo+ICsgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzdHViX3BhdGgsIGZ1 bGxfaWQpKToKPiArICAgICAgICAgICAgcmV0dXJuIFRydWUKPiArICAgICAgICByZXR1cm4gRmFs c2UKPiArCj4gKwo+ICsgICAgZGVmIHNyX2lvdl9zZXR1cChzZWxmKToKPiArICAgICAgICAiIiIK PiArICAgICAgICBFbnN1cmUgdGhlIFBDSSBkZXZpY2UgaXMgd29ya2luZyBpbiBzcl9pb3YgbW9k ZS4KPiArCj4gKyAgICAgICAgQ2hlY2sgaWYgdGhlIFBDSSBoYXJkd2FyZSBkZXZpY2UgZHJpdmUg aXMgbG9hZGVkIHdpdGggdGhlIGFwcHJvcHJpYXRlLAo+ICsgICAgICAgIHBhcmFtZXRlcnMgKG51 bWJlciBvZiBWRnMpLCBhbmQgaWYgaXQncyBub3QsIHBlcmZvcm0gc2V0dXAuCj4gKwo+ICsgICAg ICAgIEByZXR1cm46IFRydWUsIGlmIHRoZSBzZXR1cCB3YXMgY29tcGxldGVkIHN1Y2Nlc3NmdWx5 LCBGYWxzZSBvdGhlcndpc2UuCj4gKyAgICAgICAgIiIiCj4gKyAgICAgICAgcmVfcHJvYmUgPSBG YWxzZQo+ICsgICAgICAgIHMsIG8gPSBjb21tYW5kcy5nZXRzdGF0dXNvdXRwdXQoJ2xzbW9kIHwg Z3JlcCAlcycgJSBzZWxmLmRyaXZlcikKPiArICAgICAgICBpZiBzOgo+ICsgICAgICAgICAgICBy ZV9wcm9iZSA9IFRydWUKPiArICAgICAgICBlbGlmIG5vdCBzZWxmLmNoZWNrX3Zmc19jb3VudCgp Ogo+ICsgICAgICAgICAgICBvcy5zeXN0ZW0oIm1vZHByb2JlIC1yICVzIiAlIHNlbGYuZHJpdmVy KQo+ICsgICAgICAgICAgICByZV9wcm9iZSA9IFRydWUKPiArCj4gKyAgICAgICAgIyBSZS1wcm9i ZSBkcml2ZXIgd2l0aCBwcm9wZXIgbnVtYmVyIG9mIFZGcwo+ICsgICAgICAgIGlmIHJlX3Byb2Jl Ogo+ICsgICAgICAgICAgICBjbWQgPSAibW9kcHJvYmUgJXMgJXMiICUgKHNlbGYuZHJpdmVyLCBz ZWxmLmRyaXZlcl9vcHRpb24pCj4gKyAgICAgICAgICAgIHMsIG8gPSBjb21tYW5kcy5nZXRzdGF0 dXNvdXRwdXQoY21kKQo+ICsgICAgICAgICAgICBpZiBzOgo+ICsgICAgICAgICAgICAgICAgcmV0 dXJuIEZhbHNlCj4gKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmNoZWNrX3Zmc19jb3VudCgpOgo+ ICsgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCj4gKyAgICAgICAgICAgIHJldHVybiBUcnVl Cj4gKwo+ICsKPiArICAgIGRlZiByZXF1ZXN0X2RldnMoc2VsZik6Cj4gKyAgICAgICAgIiIiCj4g KyAgICAgICAgSW1wbGVtZW50IHNldHVwIHByb2Nlc3M6IHVuYmluZCB0aGUgUENJIGRldmljZSBh bmQgdGhlbiBiaW5kIGl0Cj4gKyAgICAgICAgdG8gdGhlIHBjaS1zdHViIGRyaXZlci4KPiArCj4g KyAgICAgICAgQHJldHVybjogYSBsaXN0IG9mIHN1Y2Nlc3NmdWxseSByZXF1ZXN0ZWQgZGV2aWNl cycgUENJIElEcy4KPiArICAgICAgICAiIiIKPiArICAgICAgICBiYXNlX2RpciA9ICIvc3lzL2J1 cy9wY2kiCj4gKyAgICAgICAgc3R1Yl9wYXRoID0gb3MucGF0aC5qb2luKGJhc2VfZGlyLCAiZHJp dmVycy9wY2ktc3R1YiIpCj4gKwo+ICsgICAgICAgIHNlbGYucGNpX2lkcyA9IHNlbGYuZ2V0X2Rl dnMoc2VsZi5kZXZpY2VzX3JlcXVlc3RlZCkKPiArICAgICAgICBsb2dnaW5nLmRlYnVnKCJUaGUg Zm9sbG93aW5nIHBjaV9pZHMgd2VyZSBmb3VuZDogJXMiICUgc2VsZi5wY2lfaWRzKQo+ICsgICAg ICAgIHJlcXVlc3RlZF9wY2lfaWRzID0gW10KPiArICAgICAgICBzZWxmLmRldl9kcml2ZXJzID0g e30KPiArCj4gKyAgICAgICAgIyBTZXR1cCBhbGwgZGV2aWNlcyBzcGVjaWZpZWQgZm9yIGFzc2ln bm1lbnQgdG8gZ3Vlc3QKPiArICAgICAgICBmb3IgcGNpX2lkIGluIHNlbGYucGNpX2lkczoKPiAr ICAgICAgICAgICAgZnVsbF9pZCA9IGdldF9mdWxsX3BjaV9pZChwY2lfaWQpCj4gKyAgICAgICAg ICAgIGlmIG5vdCBmdWxsX2lkOgo+ICsgICAgICAgICAgICAgICAgY29udGludWUKPiArICAgICAg ICAgICAgZHJ2X3BhdGggPSBvcy5wYXRoLmpvaW4oYmFzZV9kaXIsICJkZXZpY2VzLyVzL2RyaXZl ciIgJSBmdWxsX2lkKQo+ICsgICAgICAgICAgICBkZXZfcHJldl9kcml2ZXI9IG9zLnBhdGgucmVh bHBhdGgob3MucGF0aC5qb2luKGRydl9wYXRoLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgb3MucmVhZGxpbmsoZHJ2X3BhdGgpKSkKPiArICAgICAgICAg ICAgc2VsZi5kZXZfZHJpdmVyc1twY2lfaWRdID0gZGV2X3ByZXZfZHJpdmVyCj4gKwo+ICsgICAg ICAgICAgICAjIEp1ZGdlIHdoZXRoZXIgdGhlIGRldmljZSBkcml2ZXIgaGFzIGJlZW4gYmluZGVk IHRvIHN0dWIKPiArICAgICAgICAgICAgaWYgbm90IHNlbGYuaXNfYmluZGVkX3RvX3N0dWIoZnVs bF9pZCk6Cj4gKyAgICAgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJCaW5kaW5nIGRldmljZSAl cyB0byBzdHViIiAlIGZ1bGxfaWQpCj4gKyAgICAgICAgICAgICAgICB2ZW5kb3JfaWQgPSBnZXRf dmVuZG9yX2Zyb21fcGNpX2lkKHBjaV9pZCkKPiArICAgICAgICAgICAgICAgIHN0dWJfbmV3X2lk ID0gb3MucGF0aC5qb2luKHN0dWJfcGF0aCwgJ25ld19pZCcpCj4gKyAgICAgICAgICAgICAgICB1 bmJpbmRfZGV2ID0gb3MucGF0aC5qb2luKGRydl9wYXRoLCAndW5iaW5kJykKPiArICAgICAgICAg ICAgICAgIHN0dWJfYmluZCA9IG9zLnBhdGguam9pbihzdHViX3BhdGgsICdiaW5kJykKPiArCj4g KyAgICAgICAgICAgICAgICBpbmZvX3dyaXRlX3RvX2ZpbGVzID0gWyh2ZW5kb3JfaWQsIHN0dWJf bmV3X2lkKSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZ1bGxf aWQsIHVuYmluZF9kZXYpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoZnVsbF9pZCwgc3R1Yl9iaW5kKV0KPiArCj4gKyAgICAgICAgICAgICAgICBmb3IgY29udGVu dCwgZmlsZSBpbiBpbmZvX3dyaXRlX3RvX2ZpbGVzOgo+ICsgICAgICAgICAgICAgICAgICAgIHRy eToKPiArICAgICAgICAgICAgICAgICAgICAgICAgdXRpbHMub3Blbl93cml0ZV9jbG9zZShjb250 ZW50LCBmaWxlKQo+ICsgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgo+ICsgICAg ICAgICAgICAgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJGYWlsZWQgdG8gd3JpdGUgJXMgdG8g ZmlsZSAlcyIgJQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb250 ZW50LCBmaWxlKSkKPiArICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKPiArCj4gKyAg ICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5pc19iaW5kZWRfdG9fc3R1YihmdWxsX2lkKToKPiAr ICAgICAgICAgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJCaW5kaW5nIGRldmljZSAlcyB0byBz dHViIGZhaWxlZCIgJQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpX2lk KQo+ICsgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCj4gKyAgICAgICAgICAgIGVsc2U6Cj4g KyAgICAgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJEZXZpY2UgJXMgYWxyZWFkeSBiaW5kZWQg dG8gc3R1YiIgJSBwY2lfaWQpCj4gKyAgICAgICAgICAgIHJlcXVlc3RlZF9wY2lfaWRzLmFwcGVu ZChwY2lfaWQpCj4gKyAgICAgICAgc2VsZi5wY2lfaWRzID0gcmVxdWVzdGVkX3BjaV9pZHMKPiAr ICAgICAgICByZXR1cm4gc2VsZi5wY2lfaWRzCj4gKwo+ICsKPiArICAgIGRlZiByZWxlYXNlX2Rl dnMoc2VsZik6Cj4gKyAgICAgICAgIiIiCj4gKyAgICAgICAgUmVsZWFzZSBhbGwgUENJIGRldmlj ZXMgY3VycmVudGx5IGFzc2lnbmVkIHRvIFZNcyBiYWNrIHRvIHRoZQo+ICsgICAgICAgIHZpcnR1 YWxpemF0aW9uIGhvc3QuCj4gKyAgICAgICAgIiIiCj4gKyAgICAgICAgdHJ5Ogo+ICsgICAgICAg ICAgICBmb3IgcGNpX2lkIGluIHNlbGYuZGV2X2RyaXZlcnM6Cj4gKyAgICAgICAgICAgICAgICBp ZiBub3Qgc2VsZi5fcmVsZWFzZV9kZXYocGNpX2lkKToKPiArICAgICAgICAgICAgICAgICAgICBs b2dnaW5nLmVycm9yKCJGYWlsZWQgdG8gcmVsZWFzZSBkZXZpY2UgJXMgdG8gaG9zdCIgJQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpX2lkKQo+ICsgICAgICAgICAgICAg ICAgZWxzZToKPiArICAgICAgICAgICAgICAgICAgICBsb2dnaW5nLmluZm8oIlJlbGVhc2VkIGRl dmljZSAlcyBzdWNjZXNzZnVsbHkiICUgcGNpX2lkKQo+ICsgICAgICAgIGV4Y2VwdDoKPiArICAg ICAgICAgICAgcmV0dXJuCj4gZGlmZiAtLWdpdCBhL2NsaWVudC90ZXN0cy9rdm0va3ZtX3ZtLnB5 IGIvY2xpZW50L3Rlc3RzL2t2bS9rdm1fdm0ucHkKPiBpbmRleCA3MjI5Yjc5Li43OGExNmFjIDEw MDc1NQo+IC0tLSBhL2NsaWVudC90ZXN0cy9rdm0va3ZtX3ZtLnB5Cj4gKysrIGIvY2xpZW50L3Rl c3RzL2t2bS9rdm1fdm0ucHkKPiBAQCAtMTE5LDYgKzExOSw3IEBAIGNsYXNzIFZNOgo+ICAgICAg ICAgIHNlbGYucGFyYW1zID0gcGFyYW1zCj4gICAgICAgICAgc2VsZi5yb290X2RpciA9IHJvb3Rf ZGlyCj4gICAgICAgICAgc2VsZi5hZGRyZXNzX2NhY2hlID0gYWRkcmVzc19jYWNoZQo+ICsgICAg ICAgIHNlbGYucGNpX2Fzc2lnbmFibGUgPSBOb25lCj4gIAo+ICAgICAgICAgICMgRmluZCBhdmFp bGFibGUgbW9uaXRvciBmaWxlbmFtZQo+ICAgICAgICAgIHdoaWxlIFRydWU6Cj4gQEAgLTMwNCw2 ICszMDUsMTIgQEAgY2xhc3MgVk06Cj4gICAgICAgICAgZWxpZiBwYXJhbXMuZ2V0KCJ1dWlkIik6 Cj4gICAgICAgICAgICAgIHFlbXVfY21kICs9ICIgLXV1aWQgJXMiICUgcGFyYW1zLmdldCgidXVp ZCIpCj4gIAo+ICsgICAgICAgICMgSWYgdGhlIFBDSSBhc3NpZ25tZW50IHN0ZXAgd2VudCBPSywg YWRkIGVhY2ggb25lIG9mIHRoZSBQQ0kgYXNzaWduZWQKPiArICAgICAgICAjIGRldmljZXMgdG8g dGhlIHFlbXUgY29tbWFuZCBsaW5lLgo+ICsgICAgICAgIGlmIHNlbGYucGNpX2Fzc2lnbmFibGU6 Cj4gKyAgICAgICAgICAgIGZvciBwY2lfaWQgaW4gc2VsZi5wYV9wY2lfaWRzOgo+ICsgICAgICAg ICAgICAgICAgcWVtdV9jbWQgKz0gIiAtcGNpZGV2aWNlIGhvc3Q9JXMiICUgcGNpX2lkCj4gKwo+ ICAgICAgICAgIHJldHVybiBxZW11X2NtZAo+ICAKPiAgCj4gQEAgLTM5Miw2ICszOTksNTAgQEAg Y2xhc3MgVk06Cj4gICAgICAgICAgICAgICAgICBzZWxmLnV1aWQgPSBmLnJlYWQoKS5zdHJpcCgp Cj4gICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKPiAgCj4gKyAgICAgICAgICAgIGlmIG5vdCBw YXJhbXMuZ2V0KCJwY2lfYXNzaWduYWJsZSIpID09ICJubyI6Cj4gKyAgICAgICAgICAgICAgICBw YV90eXBlID0gcGFyYW1zLmdldCgicGNpX2Fzc2lnbmFibGUiKQo+ICsgICAgICAgICAgICAgICAg cGFfZGV2aWNlc19yZXF1ZXN0ZWQgPSBwYXJhbXMuZ2V0KCJkZXZpY2VzX3JlcXVlc3RlZCIpCj4g Kwo+ICsgICAgICAgICAgICAgICAgIyBWaXJ0dWFsIEZ1bmN0aW9ucyAoVkYpIGFzc2lnbmFibGUg ZGV2aWNlcwo+ICsgICAgICAgICAgICAgICAgaWYgcGFfdHlwZSA9PSAidmYiOgo+ICsgICAgICAg ICAgICAgICAgICAgIHBhX2RyaXZlciA9IHBhcmFtcy5nZXQoImRyaXZlciIpCj4gKyAgICAgICAg ICAgICAgICAgICAgcGFfZHJpdmVyX29wdGlvbiA9IHBhcmFtcy5nZXQoImRyaXZlcl9vcHRpb24i KQo+ICsgICAgICAgICAgICAgICAgICAgIHNlbGYucGNpX2Fzc2lnbmFibGUgPSBrdm1fdXRpbHMu UGNpQXNzaWduYWJsZSh0eXBlPXBhX3R5cGUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkcml2ZXI9cGFfZHJpdmVyLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZHJpdmVyX29wdGlvbj1wYV9kcml2ZXJfb3B0aW9uLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlc19yZXF1ZXN0ZWQ9cGFf ZGV2aWNlc19yZXF1ZXN0ZWQpCj4gKyAgICAgICAgICAgICAgICAjIFBoeXNpY2FsIE5JQyAoUEYp IGFzc2lnbmFibGUgZGV2aWNlcwo+ICsgICAgICAgICAgICAgICAgZWxpZiBwYV90eXBlID09ICJw ZiI6Cj4gKyAgICAgICAgICAgICAgICAgICAgcGFfZGV2aWNlX25hbWVzID0gcGFyYW1zLmdldCgi ZGV2aWNlX25hbWVzIikKPiArICAgICAgICAgICAgICAgICAgICBzZWxmLnBjaV9hc3NpZ25hYmxl ID0ga3ZtX3V0aWxzLlBjaUFzc2lnbmFibGUodHlwZT1wYV90eXBlLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzPXBhX2RldmljZV9uYW1lcywKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VzX3JlcXVlc3RlZD1w YV9kZXZpY2VzX3JlcXVlc3RlZCkKPiArICAgICAgICAgICAgICAgICMgV29ya2luZyB3aXRoIGJv dGggVkYgYW5kIFBGCj4gKyAgICAgICAgICAgICAgICBlbGlmIHBhX3R5cGUgPT0gIm1peGVkIjoK PiArICAgICAgICAgICAgICAgICAgICBwYV9kZXZpY2VfbmFtZXMgPSBwYXJhbXMuZ2V0KCJkZXZp Y2VfbmFtZXMiKQo+ICsgICAgICAgICAgICAgICAgICAgIHBhX2RyaXZlciA9IHBhcmFtcy5nZXQo ImRyaXZlciIpCj4gKyAgICAgICAgICAgICAgICAgICAgcGFfZHJpdmVyX29wdGlvbiA9IHBhcmFt cy5nZXQoImRyaXZlcl9vcHRpb24iKQo+ICsgICAgICAgICAgICAgICAgICAgIHNlbGYucGNpX2Fz c2lnbmFibGUgPSBrdm1fdXRpbHMuUGNpQXNzaWduYWJsZSh0eXBlPXBhX3R5cGUsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXI9cGFfZHJpdmVyLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyX29wdGlvbj1wYV9k cml2ZXJfb3B0aW9uLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bmFtZXM9cGFfZGV2aWNlX25hbWVzLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGV2aWNlc19yZXF1ZXN0ZWQ9cGFfZGV2aWNlc19yZXF1ZXN0ZWQpCj4gKwo+ICsg ICAgICAgICAgICAgICAgc2VsZi5wYV9wY2lfaWRzID0gc2VsZi5wY2lfYXNzaWduYWJsZS5yZXF1 ZXN0X2RldnMoKQo+ICsKPiArICAgICAgICAgICAgICAgIGlmIHNlbGYucGFfcGNpX2lkczoKPiAr ICAgICAgICAgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJTdWNjZXNzZnVseSBhc3NpZ25lZCBk ZXZpY2VzOiAlcyIgJQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5w YV9wY2lfaWRzKQo+ICsgICAgICAgICAgICAgICAgZWxzZToKPiArICAgICAgICAgICAgICAgICAg ICBsb2dnaW5nLmVycm9yKCJObyBQQ0kgYXNzaWduYWJsZSBkZXZpY2VzIHdlcmUgYXNzaWduZWQg Igo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFuZCAncGNpX2Fzc2lnbmFi bGUnIGlzIGRlZmluZWQgdG8gJXMgIgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIm9uIHlvdXIgY29uZmlnIGZpbGUuIEFib3J0aW5nIFZNIGNyZWF0aW9uLiIgJQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFfdHlwZSkKPiArICAgICAgICAgICAgICAg ICAgICByZXR1cm4gRmFsc2UKPiArCj4gKyAgICAgICAgICAgIGVsc2U6Cj4gKyAgICAgICAgICAg ICAgICBzZWxmLnBjaV9hc3NpZ25hYmxlID0gTm9uZQo+ICsKPiAgICAgICAgICAgICAgIyBNYWtl IHFlbXUgY29tbWFuZAo+ICAgICAgICAgICAgICBxZW11X2NvbW1hbmQgPSBzZWxmLm1ha2VfcWVt dV9jb21tYW5kKCkKPiAgCj4gQEAgLTUzNyw2ICs1ODgsOCBAQCBjbGFzcyBWTToKPiAgICAgICAg ICAgICAgIyBJcyBpdCBhbHJlYWR5IGRlYWQ/Cj4gICAgICAgICAgICAgIGlmIHNlbGYuaXNfZGVh ZCgpOgo+ICAgICAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiVk0gaXMgYWxyZWFkeSBkb3du IikKPiArICAgICAgICAgICAgICAgIGlmIHNlbGYucGNpX2Fzc2lnbmFibGU6Cj4gKyAgICAgICAg ICAgICAgICAgICAgc2VsZi5wY2lfYXNzaWduYWJsZS5yZWxlYXNlX2RldnMoKQo+ICAgICAgICAg ICAgICAgICAgcmV0dXJuCj4gIAo+ICAgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJEZXN0cm95 aW5nIFZNIHdpdGggUElEICVkLi4uIiAlCj4gQEAgLTU1Nyw2ICs2MTAsOSBAQCBjbGFzcyBWTToK PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgo+ICAgICAgICAgICAgICAgICAg ICAgIGZpbmFsbHk6Cj4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24uY2xvc2UoKQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnBjaV9hc3NpZ25hYmxlOgo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wY2lfYXNzaWduYWJsZS5yZWxlYXNlX2RldnMo KQo+ICsKPiAgCj4gICAgICAgICAgICAgICMgVHJ5IHRvIGRlc3Ryb3kgd2l0aCBhIG1vbml0b3Ig Y29tbWFuZAo+ICAgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJUcnlpbmcgdG8ga2lsbCBWTSB3 aXRoIG1vbml0b3IgY29tbWFuZC4uLiIpCj4gQEAgLTU2Niw2ICs2MjIsOCBAQCBjbGFzcyBWTToK PiAgICAgICAgICAgICAgICAgICMgV2FpdCBmb3IgdGhlIFZNIHRvIGJlIHJlYWxseSBkZWFkCj4g ICAgICAgICAgICAgICAgICBpZiBrdm1fdXRpbHMud2FpdF9mb3Ioc2VsZi5pc19kZWFkLCA1LCAw LjUsIDAuNSk6Cj4gICAgICAgICAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiVk0gaXMgZG93 biIpCj4gKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5wY2lfYXNzaWduYWJsZToKPiArICAg ICAgICAgICAgICAgICAgICAgICAgc2VsZi5wY2lfYXNzaWduYWJsZS5yZWxlYXNlX2RldnMoKQo+ ICAgICAgICAgICAgICAgICAgICAgIHJldHVybgo+ICAKPiAgICAgICAgICAgICAgIyBJZiB0aGUg Vk0gaXNuJ3QgZGVhZCB5ZXQuLi4KPiBAQCAtNTc1LDYgKzYzMyw4IEBAIGNsYXNzIFZNOgo+ICAg ICAgICAgICAgICAjIFdhaXQgZm9yIHRoZSBWTSB0byBiZSByZWFsbHkgZGVhZAo+ICAgICAgICAg ICAgICBpZiBrdm1fdXRpbHMud2FpdF9mb3Ioc2VsZi5pc19kZWFkLCA1LCAwLjUsIDAuNSk6Cj4g ICAgICAgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJWTSBpcyBkb3duIikKPiArICAgICAgICAg ICAgICAgIGlmIHNlbGYucGNpX2Fzc2lnbmFibGU6Cj4gKyAgICAgICAgICAgICAgICAgICAgc2Vs Zi5wY2lfYXNzaWduYWJsZS5yZWxlYXNlX2RldnMoKQo+ICAgICAgICAgICAgICAgICAgcmV0dXJu Cj4gIAo+ICAgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJQcm9jZXNzICVzIGlzIGEgem9tYmll ISIgJSBzZWxmLnByb2Nlc3MuZ2V0X3BpZCgpKQo+IGRpZmYgLS1naXQgYS9jbGllbnQvdGVzdHMv a3ZtL3Rlc3RzX2Jhc2UuY2ZnLnNhbXBsZSBiL2NsaWVudC90ZXN0cy9rdm0vdGVzdHNfYmFzZS5j Zmcuc2FtcGxlCj4gaW5kZXggYjhmMjVmNC4uNDliNmQ2YiAxMDA2NDQKPiAtLS0gYS9jbGllbnQv dGVzdHMva3ZtL3Rlc3RzX2Jhc2UuY2ZnLnNhbXBsZQo+ICsrKyBiL2NsaWVudC90ZXN0cy9rdm0v dGVzdHNfYmFzZS5jZmcuc2FtcGxlCj4gQEAgLTg4OSw3ICs4ODksMjcgQEAgdmFyaWFudHM6Cj4g ICAgICAgICAgZXh0cmFfcGFyYW1zICs9ICIgLW1lbS1wYXRoIC9tbnQva3ZtX2h1Z2VwYWdlIgo+ ICAKPiAgCj4gK3ZhcmlhbnRzOgo+ICsgICAgLSBAbm9fcGNpX2Fzc2lnbmFibGU6Cj4gKyAgICAg ICAgcGNpX2Fzc2lnbmFibGUgPSBubwo+ICsgICAgLSBwZl9hc3NpZ25hYmxlOgo+ICsgICAgICAg IHBjaV9hc3NpZ25hYmxlID0gcGYKPiArICAgICAgICBkZXZpY2VfbmFtZXMgPSBldGgxCj4gKyAg ICAtIHZmX2Fzc2lnbmFibGU6Cj4gKyAgICAgICAgcGNpX2Fzc2lnbmFibGUgPSB2Zgo+ICsgICAg ICAgICMgRHJpdmVyIChrZXJuZWwgbW9kdWxlKSB0aGF0IHN1cHBvcnRzIFNSLUlPViBoYXJkd2Fy ZS4KPiArICAgICAgICAjIEFzIG9mIHRvZGF5ICgzMC0xMS0yMDA5KSwgd2UgaGF2ZSAyIGRyaXZl cnMgZm9yIHRoaXMgdHlwZSBvZiBoYXJkd2FyZToKPiArICAgICAgICAjIEludGVswq4gODI1NzYg R2lnYWJpdCBFdGhlcm5ldCBDb250cm9sbGVyIC0gaWdiCj4gKyAgICAgICAgIyBOZXRlcmlvbsKu IFgzMTAw4oSiIC0gdnhnZQo+ICsgICAgICAgIGRyaXZlciA9IGlnYgo+ICsgICAgICAgICMgRHJp dmVyIG9wdGlvbiB0byBzcGVjaWZ5IHRoZSBtYXhpbXVtIG51bWJlciBvZiB2aXJ0dWFsIGZ1bmN0 aW9ucwo+ICsgICAgICAgICMgKG9uIHZ4Z2UgdGhlIG9wdGlvbiBpcyAsIGZvciBleGFtcGxlLCBp cyBtYXhfY29uZmlnX2RldikKPiArICAgICAgICAjIHRoZSBkZWZhdWx0IGJlbG93IGlzIGZvciB0 aGUgaWdiIGRyaXZlcgo+ICsgICAgICAgIGRyaXZlcl9vcHRpb24gPSAibWF4X3Zmcz03Igo+ICsg ICAgICAgICMgTnVtYmVyIG9mIGRldmljZXMgdGhhdCBhcmUgZ29pbmcgdG8gYmUgcmVxdWVzdGVk Lgo+ICsgICAgICAgIGRldmljZXNfcmVxdWVzdGVkID0gNwo+ICsKPiArCj4gIGltYWdlX25hbWUu KiA/PD0gaW1hZ2VzLwo+ICBjZHJvbS4qID88PSBpc29zLwo+ICBzdGVwcyA/PD0gc3RlcHMvCj4g LQo+IC0tIAo+IDEuNi41LjIKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KQXV0b3Rlc3QgbWFpbGluZyBsaXN0CkF1dG90ZXN0QHRlc3Qua2VybmVsLm9yZwpo dHRwOi8vdGVzdC5rZXJuZWwub3JnL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9hdXRvdGVzdAo=