From mboxrd@z Thu Jan 1 00:00:00 1970 From: Damien Lespiau Subject: Re: [PATCH] Add Dmesg Triage Feature: further triage i-g-t kmsg log to reduce result noise resulted from piglit dmesg defect Date: Thu, 19 Mar 2015 17:16:20 +0000 Message-ID: <20150319171619.GA31785@strange.ger.corp.intel.com> References: <1426732611-24404-1-git-send-email-ethan.gao@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id 7DD076E2EA for ; Thu, 19 Mar 2015 10:16:22 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1426732611-24404-1-git-send-email-ethan.gao@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: ethan gao Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBNYXIgMTksIDIwMTUgYXQgMTA6MzY6NTFBTSArMDgwMCwgZXRoYW4gZ2FvIHdyb3Rl Ogo+IHRlc3RzL2lndC5weTogYWRkIGlndCBlbnYgdG8gZW5hYmxlIG9yIGRpc2FibGUgZG1lc2cg dHJpYWdlCj4gZnJhbWV3b3JrL3Rlc3QvYmFzZS5weTogdHJpZ2dlciBkbWVzZyB0cmlhZ2UgZGVw ZW5kaW5nIG9uIGRtZXNnIGxvZyBvY2N1cnJlbmNlCj4gZnJhbWV3b3JrL2RtZXNnLnB5OiBlbXBs b3kgZG1lc2cgdHJpYWdlIHNpbXBseSBmb3IgTGludXggZG1lc2cKPiBkbWVzZ190cmlhZ2UvKjog ZGVhbCB3aXRoIGttc2cgbG9nIHdpdGggcHJlLWRlZmluZWQgZG1lc2cgb29wcyBwYXR0ZXJuCj4g Cj4gSW4gZ2VuZXJhbCwgaWYgZG1lc2cgdHJpYWdlIGlzIGVuYWJsZWQgYW5kIHRoZXJlIGlzIG5l dyBkbWVzZyBhbG9uZyB3aXRoIGktZy10IHRlc3RjYXNlcwo+IHJ1bm5pbmcsIHRoZSBuZXcgZG1l c2cgd2lsbCBiZSBjYXB0dXJlZCBhbmQgd29ya2VkIG91dCBhIHRhZyBhbmQgaGVhZCB0byByb2xs YmFjayB0aGUKPiBkZXRhaWwgd2hlbiBuZWNlc3NhcnksIGluIGFkZGl0aW9uLCBvbiB0aGUgYmFz aXMgb2YgZGlmZmVyZW50IGRtZXNnIHRhZyBvciBoZWFkLCB0aGUgZmluYWwKPiByZXN1bHQgbm9p c2Ugb2YgYSB0ZXN0Y2FzZSBjYW4gYmUgcmVkdWNlZCB3aXRoIGRlZmluZWQgcnVsZXMgb3Igc3Ry YXRlZ3kuCj4gCj4gU2lnbmVkLW9mZi1ieTogZXRoYW4gZ2FvIDxldGhhbi5nYW9AaW50ZWwuY29t PgoKVGhhdCdzIGEgcGF0Y2ggdG8gcGlnbGl0LCBzaG91bGRuJ3QgYmUgc2VudCB0byB0aGUgcGln bGl0IG1sIGFzIHdlbGwgdG8KZ2V0IHRoZWlyIG9waW5pb24/CgotLSAKRGFtaWVuCgo+IC0tLQo+ ICBkbWVzZ190cmlhZ2UvZGVidWcuc2ggICAgICAgICAgICAgfCAgNjcgKysrKysrKysrKysrKysK PiAgZG1lc2dfdHJpYWdlL2RtZXNnLnJiICAgICAgICAgICAgIHwgMTE3ICsrKysrKysrKysrKysr KysrKysrKysrKwo+ICBkbWVzZ190cmlhZ2Uva21zZ190cmlhZ2UgICAgICAgICAgfCAxODIgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgZG1lc2dfdHJpYWdlL2xpYmRt ZXNnLnNoICAgICAgICAgIHwgMTU2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4g IGRtZXNnX3RyaWFnZS9vb3BzLWNvbnRleHQtcGF0dGVybiB8ICAzNyArKysrKysrKwo+ICBkbWVz Z190cmlhZ2Uvb29wcy1wYXR0ZXJuICAgICAgICAgfCAgNTkgKysrKysrKysrKysrCj4gIGZyYW1l d29yay9kbWVzZy5weSAgICAgICAgICAgICAgICB8ICA2MCArKysrKysrKysrKysrCj4gIGZyYW1l d29yay90ZXN0L2Jhc2UucHkgICAgICAgICAgICB8ICAgNCArCj4gIHRlc3RzL2lndC5weSAgICAg ICAgICAgICAgICAgICAgICB8ICAgNyArKwo+ICA5IGZpbGVzIGNoYW5nZWQsIDY4OSBpbnNlcnRp b25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkbWVzZ190cmlhZ2UvZGVidWcuc2gKPiAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGRtZXNnX3RyaWFnZS9kbWVzZy5yYgo+ICBjcmVhdGUgbW9kZSAxMDA3 NTUgZG1lc2dfdHJpYWdlL2ttc2dfdHJpYWdlCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkbWVzZ190 cmlhZ2UvbGliZG1lc2cuc2gKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRtZXNnX3RyaWFnZS9vb3Bz LWNvbnRleHQtcGF0dGVybgo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZG1lc2dfdHJpYWdlL29vcHMt cGF0dGVybgo+IAo+IGRpZmYgLS1naXQgYS9kbWVzZ190cmlhZ2UvZGVidWcuc2ggYi9kbWVzZ190 cmlhZ2UvZGVidWcuc2gKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmVj ODI4MGUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZG1lc2dfdHJpYWdlL2RlYnVnLnNoCj4gQEAg LTAsMCArMSw2NyBAQAo+ICsjIS9iaW4vYmFzaAo+ICsKPiArIyBDb3B5cmlnaHQgKGMpIDIwMTUg SW50ZWwgQ29ycG9yYXRpb24KPiArCj4gKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQo+ICsjIG9mIHRo aXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0 d2FyZSIpLCB0byBkZWFsCj4gKyMgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwo+ICsjIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29y IHNlbGwKPiArIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKPiArIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3Qg dG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsKPiArIyBUaGUgYWJvdmUgY29weXJpZ2h0 IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgo+ ICsjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgo+ ICsKPiArIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5U WSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9U IExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsjIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVW RU5UIFNIQUxMIFRIRQo+ICsjIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxF IEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArIyBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9N LAo+ICsjIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCj4gKyMgU09GVFdBUkUuCj4gKwo+ICtbWyAiJEJB U0hQSUQiIF1dIHx8IGVjaG8gIj09PT09PT0gUnVuIG1lIHdpdGggYmFzaCA9PT09PT09Igo+ICsK PiArZHVtcF9zaGVsbF92YXJzKCkKPiArewo+ICsJKAo+ICsJCXNldCAtbyBwb3NpeAo+ICsJCWxv Y2FsIGJyYW5jaF9jb21taXRfZmlsZXM9KCkKPiArCQlsb2NhbCBzcGFyc2VfbGluZXM9KCkKPiAr CQlsb2NhbCByZW1vdGVfdXJsPSgpCj4gKwkJc2V0ID4mMgo+ICsJKQo+ICt9Cj4gKwo+ICtkdW1w X2NhbGxfc3RhY2soKQo+ICt7Cj4gKwlsb2NhbCBzdGFja19kZXB0aD0keyNGVU5DTkFNRVtAXX0K PiArCWxvY2FsIGkKPiArCWZvciAoKGkgPSAwOyBpIDwgJCgoc3RhY2tfZGVwdGgtMSkpOyBpKysp KTsgZG8KPiArCQllY2hvICIgICR7QkFTSF9TT1VSQ0VbaSsxXX06JHtCQVNIX0xJTkVOT1tpXX06 ICR7RlVOQ05BTUVbaSsxXX0iID4mMgo+ICsJZG9uZQo+ICt9Cj4gKwo+ICsjIG5yX3N0YWNrX2R1 bXBzPTAKPiArZHVtcF9zdGFjaygpCj4gK3sKPiArCSMgZWNobyAiU3RhY2sgZHVtcDogJEJBU0hf Q09NTUFORCIKPiArCWR1bXBfY2FsbF9zdGFjawo+ICsJZWNobwo+ICsJZHVtcF9zaGVsbF92YXJz Cj4gK30KPiArCj4gK25vdGljZSgpCj4gK3sKPiArCWxvY2FsIHRpbWVfc3RyPSIkKGRhdGUgKycl RiAlSDolTTolUycpICIKPiArCWVjaG8gLWUgJHtjb2xvcltNQUdFTlRBXX0iJHt0aW1lX3N0cn0k KiIkcmVzZXRfY29sb3IKPiArfQo+ICsKPiArZGllKCkKPiArewo+ICsJbm90aWNlICIkKiIKPiAr Cj4gKwlkdW1wX3N0YWNrCj4gKwllbWFpbCAiJCoiCj4gKwlleGl0Cj4gK30KPiBkaWZmIC0tZ2l0 IGEvZG1lc2dfdHJpYWdlL2RtZXNnLnJiIGIvZG1lc2dfdHJpYWdlL2RtZXNnLnJiCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5kN2FlY2FlCj4gLS0tIC9kZXYvbnVsbAo+ ICsrKyBiL2RtZXNnX3RyaWFnZS9kbWVzZy5yYgo+IEBAIC0wLDAgKzEsMTE3IEBACj4gKyMhL3Vz ci9iaW4vcnVieQo+ICsKPiArIyBDb3B5cmlnaHQgKGMpIDIwMTUgSW50ZWwgQ29ycG9yYXRpb24K PiArCj4gKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv IGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQo+ICsjIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCj4g KyMgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0 IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwo+ICsjIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwg cHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKPiArIyBjb3BpZXMg b2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdh cmUgaXMKPiArIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBj b25kaXRpb25zOgo+ICsKPiArIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw ZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgo+ICsjIGFsbCBjb3BpZXMgb3Ig c3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgo+ICsKPiArIyBUSEUgU09GVFdB UkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQ UkVTUyBPUgo+ICsjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQo+ICsj IEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB TUFHRVMgT1IgT1RIRVIKPiArIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAo+ICsjIE9VVCBPRiBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElO R1MgSU4gVEhFCj4gKyMgU09GVFdBUkUuCj4gKyMKPiArIyBbRGVzY3JpcHRpb25dOiBGaW5kIG91 dCBhbGwgY3Jhc2ggZG1lc2cgY2xhdXNlcyB3aXRoIHRhaWxvcmVkIHBhdHRlcm4KPiArIyBbQXV0 aG9yXTogZXRoYW4uZ2FvQGludGVsLmNvbQo+ICsKPiArCj4gKwo+ICtyZXF1aXJlICJmaWxldXRp bHMiCj4gK3JlcXVpcmUgInRlbXBmaWxlIgo+ICsKPiArZGVmIGZpeHVwX2RtZXNnKGxpbmUpCj4g KwlsaW5lLmNob21wIQo+ICsKPiArCSMgcmVtb3ZlIGFic29sdXRlIHBhdGggbmFtZXMKPiArCWxp bmUuc3ViISglcnsva2J1aWxkL3NyYy9bXi9dKy99LCAnJykKPiArCj4gKwlsaW5lLnN1YiEoL1wu KGlzcmF8Y29uc3Rwcm9wfHBhcnQpXC5bMC05XStcKzB4LywgJysweCcpCj4gKwo+ICsJIyBicmVh ayB1cCBtaXhlZCBtZXNzYWdlcwo+ICsJY2FzZSBsaW5lCj4gKwl3aGVuIC9ePFswLTldPi8KPiAr CXdoZW4gLyguKykoXFsgKlswLTldezEsNn1cLlswLTldezZ9XF0gLiopLwo+ICsJCWxpbmUgPSAk MSArICJcbiIgKyAkMgo+ICsJZW5kCj4gKwo+ICsJcmV0dXJuIGxpbmUKPiArZW5kCj4gKwo+ICtk ZWYgZml4dXBfZG1lc2dfZmlsZShkbWVzZ19maWxlKQo+ICsJdG1wZmlsZSA9IFRlbXBmaWxlLm5l dyAnLmZpeHVwLWRtZXNnLScsIEZpbGUuZGlybmFtZShkbWVzZ19maWxlKQo+ICsJZG1lc2dfbGlu ZXMgPSBbXQo+ICsJRmlsZS5vcGVuKGRtZXNnX2ZpbGUsICdyYicpIGRvIHxmfAo+ICsJCWYuZWFj aF9saW5lIHsgfGxpbmV8Cj4gKwkJCWxpbmUgPSBmaXh1cF9kbWVzZyhsaW5lKQo+ICsJCQlkbWVz Z19saW5lcyA8PCBsaW5lCj4gKwkJCXRtcGZpbGUucHV0cyBsaW5lCj4gKwkJfQo+ICsJZW5kCj4g Kwl0bXBmaWxlLmNobW9kIDA2NjQKPiArCXRtcGZpbGUuY2xvc2UKPiArCUZpbGVVdGlscy5tdiB0 bXBmaWxlLnBhdGgsIGRtZXNnX2ZpbGUsIDpmb3JjZSA9PiB0cnVlCj4gKwlyZXR1cm4gZG1lc2df bGluZXMKPiArZW5kCj4gKwo+ICtkZWYgZ3JlcF9jcmFzaF9oZWFkKGRtZXNnLCBncmVwX29wdGlv bnMgPSAnJykKPiArCW9vcHMgPSAleFsgZ3JlcCAtYSAtZiAje0RNRVNHX1JPT1R9L29vcHMtcGF0 dGVybiAje2dyZXBfb3B0aW9uc30gI3tkbWVzZ30gfAo+ICsJCSAgIGdyZXAgLXYgLWUgJ0lORk86 IE5NSSBoYW5kbGVyIC4qIHRvb2sgdG9vIGxvbmcgdG8gcnVuJyB8Cj4gKwkJICAgYXdrICd7bGlu ZSA9ICQwOyBzdWIoL14oPFswLTldPik/XFtbIDAtOS5dK1xdIC8sICIiLCBsaW5lKTsgaWYgKCF4 W2xpbmVdKyspIHByaW50O30nCj4gKwldCj4gKwlyZXR1cm4gb29wcyB1bmxlc3Mgb29wcy5lbXB0 eT8KPiArCj4gKwo+ICsJaWYgc3lzdGVtICJncmVwIC1xIC1GICdFWFQ0LWZzICgnCSN7ZG1lc2d9 Igo+ICsJCW9vcHMgPSBgZ3JlcCAtYSAtZiAje0RNRVNHX1JPT1R9L2V4dDQtY3JpdC1wYXR0ZXJu CSN7Z3JlcF9vcHRpb25zfSAje2RtZXNnfWAKPiArCQlyZXR1cm4gb29wcyB1bmxlc3Mgb29wcy5l bXB0eT8KPiArCWVuZAo+ICsKPiArCWlmIHN5c3RlbSAiZ3JlcCAtcSAtRiAnWEZTICgnCSN7ZG1l c2d9Igo+ICsJCW9vcHMgPSBgZ3JlcCAtYSAtZiAje0RNRVNHX1JPT1R9L3hmcy1hbGVydC1wYXR0 ZXJuCSN7Z3JlcF9vcHRpb25zfSAje2RtZXNnfWAKPiArCQlyZXR1cm4gb29wcyB1bmxlc3Mgb29w cy5lbXB0eT8KPiArCWVuZAo+ICsKPiArCWlmIHN5c3RlbSAiZ3JlcCAtcSAtRiAnYnRyZnM6ICcJ I3tkbWVzZ30iCj4gKwkJb29wcyA9IGBncmVwIC1hIC1mICN7RE1FU0dfUk9PVH0vYnRyZnMtY3Jp dC1wYXR0ZXJuCSN7Z3JlcF9vcHRpb25zfSAje2RtZXNnfWAKPiArCQlyZXR1cm4gb29wcyB1bmxl c3Mgb29wcy5lbXB0eT8KPiArCWVuZAo+ICsKPiArCXJldHVybiAnJwo+ICtlbmQKPiArCj4gK2Rl ZiBncmVwX3ByaW50a19lcnJvcnMoZG1lc2dfZmlsZSwgZG1lc2dfbGluZXMpCj4gKwlvb3BzID0g YGdyZXAgLWEgLWYgI3tETUVTR19ST09UfS9vb3BzLXBhdHRlcm4gI3tkbWVzZ19maWxlfWAKPiAr CWRtZXNnID0gZG1lc2dfbGluZXMuam9pbiAiXG4iCj4gKwlvb3BzICs9IGBncmVwIC1hIC1mICN7 RE1FU0dfUk9PVH0vZXh0NC1jcml0LXBhdHRlcm4JI3tkbWVzZ19maWxlfWAgaWYgZG1lc2cuaW5k ZXggJ0VYVDQtZnMgKCcKPiArCW9vcHMgKz0gYGdyZXAgLWEgLWYgI3tETUVTR19ST09UfS94ZnMt YWxlcnQtcGF0dGVybgkje2RtZXNnX2ZpbGV9YCBpZiBkbWVzZy5pbmRleCAnWEZTICgnCj4gKwlv b3BzICs9IGBncmVwIC1hIC1mICN7RE1FU0dfUk9PVH0vYnRyZnMtY3JpdC1wYXR0ZXJuCSN7ZG1l c2dfZmlsZX1gIGlmIGRtZXNnLmluZGV4ICdidHJmczogJwo+ICsJcmV0dXJuIG9vcHMKPiArZW5k Cj4gKwo+ICtkZWYgY29tbW9uX2Vycm9yX2lkKGxpbmUpCj4gKwlsaW5lID0gbGluZS5jaG9tcAo+ ICsJbGluZS5nc3ViISAvXGIzXC5bMC05XStbLWEtejAtOS5dKy8sICcjJwkJCSMgbGludXggdmVy c2lvbjogMy4xNy4wLW5leHQtMjAxNDEwMDgtZzA5OTY2OWVkCj4gKwlsaW5lLmdzdWIhIC9cYlsx LTldWzAtOV0tW0EtWl1bYS16XSstWzAtOV17NH1cYi8sICcjJwkJIyBEYXRlOiAyOC1EZWMtMjAx Mwo+ICsJbGluZS5nc3ViISAvXGIweFswLTlhLWZdK1xiLywgJyMnCQkJCSMgaGV4IG51bWJlcgo+ ICsJbGluZS5nc3ViISAvXGJbYS1mMC05XXs0MH1cYi8sICcjJwkJCQkjIFNIQS0xCj4gKwlsaW5l LmdzdWIhIC9cYlswLTldWzAtOS5dKi8sICcjJwkJCQkjIG51bWJlcgo+ICsJbGluZS5nc3ViISAv I3hcYi8sICcweCcKPiArCWxpbmUuZ3N1YiEgL1sgXHRdLywgJyAnCj4gKwlsaW5lLmdzdWIhIC9c IFwgKy8sICcgJwo+ICsJbGluZS5nc3ViISAvKFteYS16QS1aMC05XSlcIC8sICdcMScKPiArCWxp bmUuZ3N1YiEgL1wgKFteYS16QS1aXSkvLCAnXDEnCj4gKwlsaW5lLmdzdWIhIC9eXCAvLCAnJwo+ ICsJbGluZS5nc3ViISAvXCAgXy8sICdfJwo+ICsJbGluZS5nc3ViISAvXCAvLCAnXycKPiArCWxp bmUuZ3N1YiEgL1stXy4sOzojIVxbXChdKyQvLCAnJwo+ICsJbGluZQo+ICtlbmQKPiBkaWZmIC0t Z2l0IGEvZG1lc2dfdHJpYWdlL2ttc2dfdHJpYWdlIGIvZG1lc2dfdHJpYWdlL2ttc2dfdHJpYWdl Cj4gbmV3IGZpbGUgbW9kZSAxMDA3NTUKPiBpbmRleCAwMDAwMDAwLi41ODMyODcxCj4gLS0tIC9k ZXYvbnVsbAo+ICsrKyBiL2RtZXNnX3RyaWFnZS9rbXNnX3RyaWFnZQo+IEBAIC0wLDAgKzEsMTgy IEBACj4gKyMhL3Vzci9iaW4vcnVieQo+ICsKPiArIyBDb3B5cmlnaHQgKGMpIDIwMTUgSW50ZWwg Q29ycG9yYXRpb24KPiArCj4gKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBv ZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQo+ICsjIG9mIHRoaXMgc29m dHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIp LCB0byBkZWFsCj4gKyMgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1 ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwo+ICsjIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwK PiArIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hv bSB0aGUgU29mdHdhcmUgaXMKPiArIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhl IGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsKPiArIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgo+ICsjIGFs bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgo+ICsKPiAr IyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBB TlkgS0lORCwgRVhQUkVTUyBPUgo+ICsjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsjIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNI QUxMIFRIRQo+ICsjIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBB TlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAo+ICsj IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1Ig T1RIRVIgREVBTElOR1MgSU4gVEhFCj4gKyMgU09GVFdBUkUuCj4gKyMKPiArIyBbRGVzY3JpcHRp b25dOiBUcmlhZ2UgdmFyaW91cyBkbWVzZyB0cmFjZSBsb2cgZm9yIGFuIHVuaXF1ZSB0YWcgCj4g KyMgW0F1dGhvcl06IGV0aGFuLmdhb0BpbnRlbC5jb20KPiArCj4gKwo+ICtETUVTR19ST09UID0g RU5WWydETUVTR19UUklBR0VfUk9PVCddIHx8IEZpbGUuZGlybmFtZShGaWxlLmRpcm5hbWUoRmls ZS5yZWFscGF0aCgkMCkpKQo+ICtyZXF1aXJlICIje0RNRVNHX1JPT1R9L2RtZXNnLnJiIgo+ICsK PiAraWYgRU5WWydLTVNHX1RSSUFHRV9MT0cnXQo+ICsJS01TRyA9IEVOVlsnS01TR19UUklBR0Vf TE9HJ10KPiArCWttc2dfZmlsZSA9ICIje0tNU0d9Ly5kbWVzZyIKPiArCQo+ICsJaWYgRmlsZS5l eGlzdD8ga21zZ19maWxlCj4gKwkJZG1lc2dfZmlsZSA9IGttc2dfZmlsZQo+ICsJZW5kCj4gKwo+ ICtlbHNpZiBBUkdWWzBdCj4gKwlkbWVzZ19maWxlID0gQVJHVlswXQo+ICtlbHNlCj4gKwlleGl0 Cj4gK2VuZAo+ICsKPiAraWYgbm90IEZpbGUuZXhpc3Q/KGRtZXNnX2ZpbGUpIG9yIEZpbGUuc2l6 ZShkbWVzZ19maWxlKSA9PSAwCj4gKwlwdXRzICJObyByZXF1aXJlZCBkbWVzZyBmaWxlIGZvdW5k ICEiCj4gKwlleGl0Cj4gK2VuZAo+ICsKPiArZGVmIG9vcHNfdG9fYmlzZWN0X3BhdHRlcm4obGlu ZSkKPiArCQl3b3JkcyA9IGxpbmUuc3BsaXQKPiArCQlyZXR1cm4gJycgaWYgd29yZHMuZW1wdHk/ Cj4gKwkJcGF0dGVybnMgPSBbXQo+ICsJCXdvcmRzLmVhY2ggeyB8d3wKPiArCQkJY2FzZSB3Cj4g KwkJCXdoZW4gLyhbYS16QS1aMC05X10rKVwuKGlzcmF8Y29uc3Rwcm9wfHBhcnQpXC5bMC05XStc KzB4Lwo+ICsJCQkJcGF0dGVybnMgPDwgJDEKPiArCQkJCWJyZWFrCj4gKwkJCXdoZW4gLyhbYS16 QS1aMC05X10rXCsweCkvLCAvKFthLXpBLVowLTlfXSs9KS8KPiArCQkJCXBhdHRlcm5zIDw8ICQx Cj4gKwkJCQlicmVhawo+ICsJCQl3aGVuIC9bXmEtekEtWlwvOi5fLV0vCj4gKwkJCQlwYXR0ZXJu cyA8PCAnLionIGlmIHBhdHRlcm5zWy0xXSAhPSAnLionCj4gKwkJCWVsc2UKPiArCQkJCXBhdHRl cm5zIDw8IHcKPiArCQkJZW5kCj4gKwkJfQo+ICsJCXBhdHRlcm5zLnNoaWZ0IHdoaWxlIHBhdHRl cm5zWzBdID09ICcuKicKPiArCQlwYXR0ZXJucy5wb3AgICBpZiBwYXR0ZXJuc1stMV0gPT0gJy4q Jwo+ICsJCXBhdHRlcm5zLmpvaW4oJyAnKQo+ICtlbmQKPiArCj4gK2Vycm9yX2lkcyA9IHt9Cj4g K2lmICRQUk9HUkFNX05BTUUgPX4gL2ttc2dfdHJpYWdlLwo+ICsJb3V0cHV0ID0gZ3JlcF9jcmFz aF9oZWFkIGRtZXNnX2ZpbGUsICctbycKPiArZW5kCj4gK2V4aXQgaWYgb3V0cHV0LmVtcHR5Pwo+ ICsKPiArb3V0cHV0LmVhY2hfbGluZSB7IHxsaW5lfAo+ICsJbGluZS5jaG9tcCEKPiArCj4gKwlu ZXh0IGlmIGxpbmUgPX4gL0lORk86IFN0YWxsIGVuZGVkIGJlZm9yZSBzdGF0ZSBkdW1wIHN0YXJ0 Lwo+ICsJbmV4dCBpZiBsaW5lID1+IC9JTkZPOiBOTUkgaGFuZGxlciAuKiB0b29rIHRvbyBsb25n IHRvIHJ1bjovCj4gKwluZXh0IGlmIGxpbmUgPX4gL0tpbGxlZCBwcm9jZXNzIFxkKyBcKC8JCQkJ CSMgZHVwbGljYXRlZCB3aXRoICJPdXQgb2YgbWVtb3J5OiBLaWxsIHByb2Nlc3MgIgo+ICsKPiAr CSMgcHJpbnRfaGV4X2R1bXAKPiArCW5leHQgaWYgbGluZSA9fiAvKFxzWzAtOWEtZl17Mn0pezE2 fS8KPiArCW5leHQgaWYgbGluZSA9fiAvKFxzWzAtOWEtZl17NH0pezh9Lwo+ICsJbmV4dCBpZiBs aW5lID1+IC8oXHNbMC05YS1mXXs4fSl7NH0vCj4gKwo+ICsJbmV4dCBpZiBsaW5lID1+IC9bXlx0 XG5cMFs6cHJpbnQ6XV0vCj4gKwlsaW5lLnRyISAiXDAiLCAnJwo+ICsKPiArCWNhc2UgbGluZQo+ ICsJd2hlbiAvKElORk86IHJjdVtfYS16XSogc2VsZi1kZXRlY3RlZCBzdGFsbCBvbiBDUFUpLywK PiArCSAgICAgLyhJTkZPOiByY3VbX2Etel0qIGRldGVjdGVkIHN0YWxscyBvbiBDUFVzXC90YXNr czopLwo+ICsJCWxpbmUgPSAkMQo+ICsJCWJ1Z190b19iaXNlY3QgPSAkMQo+ICsJd2hlbiAvKEJV RzogdW5hYmxlIHRvIGhhbmRsZSBrZXJuZWwpLywKPiArCSAgICAgLyhCVUc6IHVuYWJsZSB0byBo YW5kbGUga2VybmVsKSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UvLAo+ICsJICAgICAvKEJVRzog dW5hYmxlIHRvIGhhbmRsZSBrZXJuZWwpIHBhZ2luZyByZXF1ZXN0Lwo+ICsJCWxpbmUgPSAkMQo+ ICsJCWJ1Z190b19iaXNlY3QgPSAkMQo+ICsJd2hlbiAvKEJVRzogc2NoZWR1bGluZyB3aGlsZSBh dG9taWM6KS8sCj4gKwkgICAgIC8oQlVHOiBCYWQgcGFnZSBtYXAgaW4gcHJvY2VzcykvLAo+ICsJ ICAgICAvKEJVRzogQmFkIHBhZ2Ugc3RhdGUgaW4gcHJvY2VzcykvLAo+ICsJICAgICAvKEJVRzog c29mdCBsb2NrdXAgLSBDUFUjXGQrIHN0dWNrIGZvciBcZCtzISkvLAo+ICsJICAgICAvKEJVRzog c3BpbmxvY2sgLiogb24gQ1BVI1xkKykvCj4gKwkJbGluZSA9ICQxCj4gKwkJYnVnX3RvX2Jpc2Vj dCA9ICQxCj4gKwl3aGVuIC8oQlVHOiApLiogKHN0aWxsIGhhcyBsb2NrcyBoZWxkKS8sCj4gKwkg ICAgIC8oSU5GTzogdGFzayApLiogKGJsb2NrZWQgZm9yIG1vcmUgdGhhbiBcZCsgc2Vjb25kcykv Cj4gKwkJbGluZSA9ICQxICsgJDIKPiArCQlidWdfdG9fYmlzZWN0ID0gJDIKPiArCXdoZW4gL1dB Uk5JTkc6LiogYXQgLiogKFthLXpBLVouMC05X10rXCsweCkvCj4gKwkJYnVnX3RvX2Jpc2VjdCA9 ICdXQVJOSU5HOi4qIGF0IC4qICcgKyAkMS5zdWIoL1wuKGlzcmF8Y29uc3Rwcm9wfHBhcnQpXC5b MC05XStcKzB4LywgJycpCj4gKwkJbGluZSA9fiAvKGF0IC4qKS8KPiArCQlsaW5lID0gIldBUk5J Tkc6ICIgKyAkMQo+ICsJd2hlbiAvKEtlcm5lbCBwYW5pYyAtIG5vdCBzeW5jaW5nOiBObyB3b3Jr aW5nIGluaXQgZm91bmQuKSAgVHJ5IHBhc3NpbmcgaW5pdD0gb3B0aW9uIHRvIGtlcm5lbC4gLywK PiArCSAgICAgLyhLZXJuZWwgcGFuaWMgLSBub3Qgc3luY2luZzogTm8gaW5pdCBmb3VuZC4pICBU cnkgcGFzc2luZyBpbml0PSBvcHRpb24gdG8ga2VybmVsLiAvCj4gKwkJbGluZSA9ICQxCj4gKwkJ YnVnX3RvX2Jpc2VjdCA9IGxpbmUKPiArCXdoZW4gLyhPdXQgb2YgbWVtb3J5OiBLaWxsIHByb2Nl c3MpIFxkKyBcKC8KPiArCQlsaW5lID0gJDEKPiArCQlidWdfdG9fYmlzZWN0ID0gJDEKPiArCXdo ZW4gLyhXcml0ZXIgc3RhbGwgc3RhdGUpIFxkKyBnXGQrIGNcZCsgZi8KPiArCQlsaW5lID0gJDEK PiArCQlidWdfdG9fYmlzZWN0ID0gJDEKPiArCXdoZW4gLyh1c2VkIGdyZWF0ZXN0IHN0YWNrIGRl cHRoOikvCj4gKwkJbGluZSA9ICQxCj4gKwkJYnVnX3RvX2Jpc2VjdCA9ICQxCj4gKwkjIHByaW50 ayhLRVJOX0VSUiAiQlVHOiBEZW50cnkgJXB7aT0lbHgsbj0lcGR9IHN0aWxsIGluIHVzZSAoJWQp IFt1bm1vdW50IG9mICVzICVzXVxuIgo+ICsJd2hlbiAgLyhCVUc6IERlbnRyeSApLiogKHN0aWxs IGluIHVzZSkgLiogXFt1bm1vdW50IG9mIC8KPiArCQlsaW5lID0gJDEgKyAkMgo+ICsJCWJ1Z190 b19iaXNlY3QgPSAkMSArICcuKiAnICsgJDIKPiArCXdoZW4gLyhbYS16QS1aXStbIGEtekEtWl0q OiBbYS1mMC05XXs0fSkgXFsjWzAtOV0rXF0gW0EtWl8gXSokLwo+ICsJCWxpbmUgPSAkMQo+ICsJ CWJ1Z190b19iaXNlY3QgPSAkMQo+ICsJd2hlbiAvXmJhY2t0cmFjZTooW2EtekEtWjAtOV9dKykv Cj4gKwkJYnVnX3RvX2Jpc2VjdCA9ICQxICsgJysweCcKPiArCWVsc2UKPiArCQlidWdfdG9fYmlz ZWN0ID0gb29wc190b19iaXNlY3RfcGF0dGVybiBsaW5lCj4gKwllbmQKPiArCj4gKwllcnJvcl9p ZCA9IGxpbmUuc3ViKC9eW15hLXpBLVpdKy8sICIiKQo+ICsKPiArCWVycm9yX2lkLmdzdWIhIC9c IFxdJC8sICIiCQkJCQkjIFsgSU5GTzogcG9zc2libGUgcmVjdXJzaXZlIGxvY2tpbmcgZGV0ZWN0 ZWQgXQo+ICsJI2Vycm9yX2lkLmdzdWIhIC9cL2NcL2tlcm5lbC10ZXN0c1wvc3JjXC9bXlwvXStc Ly8sICcnCj4gKwkjZXJyb3JfaWQuZ3N1YiEgL1wvY1wvKHdmZ3x5bGl1KVwvW15cL10rXC8vLCAn Jwo+ICsJI2Vycm9yX2lkLmdzdWIhIC9cL2xrcFwvW15cL10rXC9saW51eFswLTldKlwvLywgJycK PiArCSNlcnJvcl9pZC5nc3ViISAvXC9rZXJuZWwtdGVzdHNcL2xpbnV4WzAtOV0qXC8vLCAnJwo+ ICsJZXJyb3JfaWQuZ3N1YiEgL1wuKGlzcmF8Y29uc3Rwcm9wfHBhcnQpXC5bMC05XSsvLCAnJwo+ ICsKPiArCWVycm9yX2lkLmdzdWIhIC9cYlswLTlhLWZdezh9XGIvLCAiIyIKPiArCWVycm9yX2lk LmdzdWIhIC9cYlswLTlhLWZdezE2fVxiLywgIiMiCj4gKwllcnJvcl9pZC5nc3ViISAvKD0pWzAt OWEtZl0rXGIvLCAnXDEjJwo+ICsJZXJyb3JfaWQuZ3N1YiEgL1srXC9dMHhbMC05YS1mXStcYi8s ICcnCj4gKwllcnJvcl9pZC5nc3ViISAvWytcL11bMC05YS1mXStcYi8sICcnCj4gKwo+ICsJI2Vy cm9yX2lkID0gY29tbW9uX2Vycm9yX2lkKGVycm9yX2lkKSArICc6IDEnCj4gKwllcnJvcl9pZCA9 IGNvbW1vbl9lcnJvcl9pZChlcnJvcl9pZCkKPiArCj4gKwllcnJvcl9pZC5nc3ViISAvKFthLXpd OilbMC05XStcYi8sICdcMScJCQkJIyBXQVJOSU5HOiBhdCBhcmNoL3g4Ni9rZXJuZWwvY3B1L3Bl cmZfZXZlbnQuYzoxMDc3IHg4Nl9wbXVfc3RhcnQrMHhhYS8weDExMCgpCj4gKwllcnJvcl9pZC5n c3ViISAvIzpcWzwjPlxdXFs8Iz5cXS8sICcnCQkJCSMgUklQOiAwMDEwOls8ZmZmZmZmZmY5MTkw NmQ4ZD5dICBbPGZmZmZmZmZmOTE5MDZkOGQ+XSB2YWxpZGF0ZV9jaGFpbisweGVkLzB4ZTgwCj4g Kwo+ICsJbmV4dCBpZiBlcnJvcl9pZC5zaXplIDw9IDMKPiArCj4gKwllcnJvcl9pZHNbZXJyb3Jf aWRdIHx8PSBidWdfdG9fYmlzZWN0Cj4gK30KPiArCj4gK2V4aXQgaWYgZXJyb3JfaWRzLmVtcHR5 Pwo+ICsKPiArcHV0cyAiRm91bmQgbmVjZXNzYXJ5IGttc2cgZXJyb3IgaWRzIiBpZiAkUFJPR1JB TV9OQU1FID1+IC9rbXNnX3RyaWFnZS8KPiArCj4gK0tNU0dfRVJST1JfSUQgPSBFTlZbJ0tNU0df VFJJQUdFX0xPRyddIHx8ICIje0RNRVNHX1JPT1R9Igo+ICsjIFRoaXMgc3RvcmVzIGVhY2ggZXJy b3IgaWQKPiArZiA9IEZpbGUubmV3KEZpbGUuam9pbigiI3tLTVNHX0VSUk9SX0lEfSIsICIuZG1l c2dfZXJyb3JfaWRzIiksICJ3IikKPiArZXJyb3JfaWRzLmVhY2ggeyB8ZXJyb3JfaWQsIGhlYWR8 Cj4gKwlmLndyaXRlKCIje2Vycm9yX2lkfUAje2hlYWR9XG4iKQo+ICt9Cj4gKwo+ICtmLmNsb3Nl Cj4gKwo+IGRpZmYgLS1naXQgYS9kbWVzZ190cmlhZ2UvbGliZG1lc2cuc2ggYi9kbWVzZ190cmlh Z2UvbGliZG1lc2cuc2gKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjdh NTNmY2YKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZG1lc2dfdHJpYWdlL2xpYmRtZXNnLnNoCj4g QEAgLTAsMCArMSwxNTYgQEAKPiArIyAhL2Jpbi9iYXNoCj4gKwo+ICsjIENvcHlyaWdodCAoYykg MjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsKPiArIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFu dGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cj4gKyMg b2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUg IlNvZnR3YXJlIiksIHRvIGRlYWwKPiArIyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmlj dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCj4gKyMgdG8gdXNl LCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBh bmQvb3Igc2VsbAo+ICsjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVy c29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwo+ICsjIGZ1cm5pc2hlZCB0byBkbyBzbywgc3Vi amVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKwo+ICsjIFRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVk IGluCj4gKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdh cmUuCj4gKwo+ICsjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB UlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyMgSU1QTElFRCwgSU5DTFVESU5HIEJV VCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyMg RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4g Tk8gRVZFTlQgU0hBTEwgVEhFCj4gKyMgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBM SUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsjIExJQUJJTElUWSwgV0hF VEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5H IEZST00sCj4gKyMgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKPiArIyBTT0ZUV0FSRS4KPiArIwo+ICsj IFtEZXNjcmlwdGlvbl06IERlZmluZWQgdXRpbGl0aWVzIHRvIGNoZWNrIG91dCBzcGVjaWZpZWQg ZG1lc2cgc2VnbWVudCAKPiArIyBbQXV0aG9yXTogZXRoYW4uZ2FvQGludGVsLmNvbQo+ICsKPiAr Cj4gK2lmIFtbIC16ICIke0RNRVNHX1JPT1R9IiBdXTsgdGhlbgo+ICsJRE1FU0dfUk9PVD1gcHdk YAo+ICtmaQo+ICsKPiArc291cmNlICRETUVTR19ST09UL2RlYnVnLnNoCj4gKwo+ICtFUlI9MQo+ ICsKPiArIyBkZXNjOiBjYXB0dXJlIGFsbCB0aGUgaGVhZHMgb2YgdmFyaW91cyBrbXNnIGV4Y2Vw dGlvbmFsIGxvZwo+ICsjIHBhcmFtOgo+ICsjICAgW2RtZXNnXTogdGhlIGRtZXNnIGxvZyB3aGlj aCB5b3UnbGwgZW1wbG95Cj4gK2dyZXBfY3Jhc2hfaGVhZCgpCj4gK3sKPiArCVtbICEgIiQqIiB8 fCAiJCoiID1+IF4tW2Etel0rJCBdXSAmJiB7Cj4gKwkJZWNobyAiaW5wdXQgb2YgZ3JlcF9jcmFz aF9oZWFkIGlzIGVtcHR5IiA+JjIKPiArCQlkdW1wX3N0YWNrCj4gKwkJcmV0dXJuIDEKPiArCX0K PiArCWdyZXAgLWEgLWYgJERNRVNHX1JPT1Qvb29wcy1wYXR0ZXJuICIkQCIgJiYgcmV0dXJuCj4g Kwo+ICsJZ3JlcCAtQjggJ0NhbGwgVHJhY2U6JCcgIiRAIiB8Cj4gKwlncmVwIC1CMSAtZSAnUGlk OiBbMC05XSssIGNvbW06ICcgXAo+ICsJCSAtZSAnQ1BVOiBbMC05XSsgUElEOiBbMC05XSsgQ29t bTogJyB8Cj4gKwlncmVwIC12IC1lICcgW2NDXW9tbTogJyBcCj4gKwkJLWUgJ14tLSQnIFwKPiAr CQktZSAnXiQnIFwKPiArCQktZSAnXlxbWyAwLTkuXSpcXSAkJyBcCj4gKwkJLWUgJ1RoZSBmb2xs b3dpbmcgdHJhY2UgaXMgYSBrZXJuZWwgc2VsZiB0ZXN0IGFuZCBub3QgYSBidWcnCj4gK30KPiAr Cj4gKyMgZGVzYzogZmlsdGVyIHRoZSBrbXNnIGV4Y2VwdGlvbmFsIGxvZyBtZXNzYWdlcwo+ICsj IHBhcmFtOgo+ICsjICAgW2RtZXNnXTogdGhlIGRtZXNnIGxvZyB3aGljaCB5b3UnbGwgZW5nYWdl Cj4gK2dyZXBfY3Jhc2hfZG1lc2coKQo+ICt7Cj4gKwlbWyAiJEAiIF1dIHx8IHsKPiArCQllY2hv ICJpbnB1dCBvZiBncmVwX2NyYXNoX2RtZXNnIGlzIGVtcHR5IiA+JjIKPiArCQlkdW1wX3N0YWNr Cj4gKwkJcmV0dXJuIDEKPiArCX0KPiArCj4gKwlncmVwIC1hIC1mICRETUVTR19ST09UL29vcHMt cGF0dGVybiBcCj4gKwkJLWYgJERNRVNHX1JPT1Qvb29wcy1jb250ZXh0LXBhdHRlcm4gIiRAIgo+ ICt9Cj4gKwo+ICsjIGRlc2M6IGZpbHRlciB0aGUgZmlyc3Qga21zZyBleGNlcHRpb25hbCBsb2cg Cj4gKyMgcGFyYW06Cj4gKyMgICBbZG1lc2ddOiB0aGUgZG1lc2cgc291cmNlIHlvdSdsbCB1c2UK PiArZmlyc3RfY3Jhc2hfZG1lc2coKQo+ICt7Cj4gKwlncmVwX2NyYXNoX2RtZXNnIC1DMyAiJEAi IHwgYXdrICdCRUdJTiB7IG5yX2ZpcnN0X2hlYWQ9MDsgfTsKPiArCQkJCQkvXi0tJC8geyBleGl0 IH07Cj4gKwkJCQkJLy0tLVxbIGVuZCB0cmFjZSAuKlxdLS0tLyB7IHByaW50OyBnZXRsaW5lOyBw cmludDsgZXhpdCB9Owo+ICsJCQkJCS8oa2VybmVsIEJVRyBhdCB8S2VybmVsIHBhbmljIC18XDxC VUc6IHxXQVJOSU5HOiB8SU5GTzogKS8geyBpZiAobnJfZmlyc3RfaGVhZCA+IE5SICsgMSkgZXhp dDsgbnJfZmlyc3RfaGVhZCA9IE5SOyB9Owo+ICsJCQkJCXsgcHJpbnQgfTsKPiArCQkJCQlOUiA+ IDIwMCB7IGV4aXQgfTsnCj4gK30KPiArCj4gKyMgZGVzYzogcmV0cmlldmUgZG1lc2cgdHJhY2Ug aW5mbyBiYXNlZCBvbiBkbWVzZyB0YWcKPiArIyBwYXJhbToKPiArIyAgIFt0YWddOiBhIGRtZXNn IHRhZyBvciBoZWFkCj4gKyMgICBbZG1lc2ddOiB0aGUgZmlsZSB3aGljaCBjb250YWlucyB5b3Vy IGZ1bGwgZG1lc2cgbG9nCj4gK2hlYWRfdG9fZG1lc2coKQo+ICt7Cj4gKwlbWyAkIyAtZXEgMiBd XSB8fCB7Cj4gKwkJZWNobyAiRVJST1I6aW5wdXQgb2YgaGVhZF90b19kbWVzZyBpcyBlbXB0eSAh IiA+JjIKPiArCQllY2hvICJVc2FnZTogaGVhZF90b19kbWVzZyA8ZG1lc2dfaGVhZD4gPGRtZXNn X2xvZ19maWxlPiIKPiArCQlyZXR1cm4gJEVSUgo+ICsJfQo+ICsJCj4gKwlkbWVzZ19oZWFkPSQx Cj4gKwlkbWVzZ19maWxlPSQyCj4gKwo+ICsJYXdrIC12IHBhdHRlcm49IiR7ZG1lc2dfaGVhZH0i ICcKPiArCUJFR0lOIHsgbnJfZG1lc2dfdGFyZ2V0ID0gMDsgfQo+ICsJewo+ICsJCWlmICggJDAg IX4gcGF0dGVybil7Cj4gKwkJCW5leHQ7Cj4gKwkJfSAKPiArCQllbHNlIHsgCj4gKwkJCW5yX2Rt ZXNnX3RhcmdldCA9IEZOUjsgcHJpbnQ7Cj4gKwkJfQo+ICsKPiArCQlkbwo+ICsJCXsKPiArCQkJ aWYgKGdldGxpbmUgPiAwKSAKPiArCQkJCXByaW50OyAKPiArCQkJZWxzZQo+ICsJCQkJYnJlYWs7 Cj4gKwo+ICsJCQlpZiAoJDAgfiAvLS0tXFsgZW5kIHRyYWNlIC4qXF0vKXsKPiArCQkJCWJyZWFr Owo+ICsJCQl9Cj4gKwkJfSB3aGlsZSAoTlIgLSBucl9kbWVzZ190YXJnZXQgPCA2MCkKPiArCX0J Cj4gKwlFTkQgeyAKPiArCQlpZiAobnJfZG1lc2dfdGFyZ2V0ID4gMCkgewo+ICsJCQlwcmludCAi LS0tW2tlcm5lbCBtc2cgZW5kXS0tLSI7Cj4gKwkJfQo+ICsJCWVsc2Ugewo+ICsJCQlwcmludCAi Tm90IEZvdW5kIjsKPiArCQl9Cj4gKwl9JyAiJHtkbWVzZ19maWxlfSIKPiArfQo+ICsKPiArCj4g KyMgZGVzYzogc29ydCBvdXQgdGhlIGNhbGwgdHJhY2UgZnVuY3MgZnJvbSB0aGUgZ2l2ZW4gZG1l c2cgbG9nCj4gKyMgcGFyYW06Cj4gKyMgICBbZG1lc2ddOiB0aGUgZG1lc2cgc291cmNlIHlvdSds bCB1c2UsIGlmIGEgZmlsZSAKPiArQ0FMTF9UUkFDRV9GVU5DUz0nW2EtekEtWjAtOS5fXStcKzB4 WzAtOWEtZl0rXC8weFswLTlhLWZdKycKPiArY2FsbF90cmFjZV9mdW5jcygpCj4gK3sKPiArCWxv Y2FsIGRtZXNnPSQxCj4gKwlncmVwIC1FbyAiJENBTExfVFJBQ0VfRlVOQ1MiICQxIHwgY3V0IC1m MSAtZCsgfCB1bmlxCj4gK30KPiArCj4gKyMgZGVzYzogc29ydCBvdXQgZnVuY3MgZnJvbSB0aGUg Zmlyc3QgY2FsbCB0cmFjZSBzdGFjayBvZiBkbWVzZwo+ICsjIHBhcmFtOgo+ICsjICAgW2RtZXNn XTogdGhlIGRtZXNnIGNhbGwgdHJhY2UgbG9nCj4gK2ZpcnN0X2NhbGxfdHJhY2UoKQo+ICt7Cj4g Kwlsb2NhbCBkbWVzZz0kMQo+ICsJYXdrICdCRUdJTiB7IGluX3RyYWNlPTA7IH07Cj4gKwkJLyhD YWxsIFRyYWNlOnxzdGF0ZSB3YXMgcmVnaXN0ZXJlZCBhdDopLyB7IGluX3RyYWNlKys7IG5yPTA7 IG5leHQ7IH07Cj4gKwkJLyciJENBTExfVFJBQ0VfRlVOQ1MiJy97IGlmIChtYXRjaCgkMCwgLz5c XSAoP1xzKT8oXyk/W2EtekEtWl9dW2EtekEtWjAtOS5fXStcKzB4LykpCj4gKwkJCQkJCXsgcHJp bnQgc3Vic3RyKCQwLCBSU1RBUlQrMywgUkxFTkdUSC02KTsgbnIrKzsgfTsgbmV4dDsgfTsKPiAr CQkvLyB7aWYgKGluX3RyYWNlID4gMCAmJiBuciA+IDEpIGV4aXQ7fTsnICRkbWVzZyB8Cj4gKwkJ c2VkIC1yIC1lICdzL1wuKGlzcmF8Y29uc3Rwcm9wfHBhcnQpXC5bMC05XSsvL2cnIFwKPiArCQkJ fCB1bmlxCj4gK30KPiBkaWZmIC0tZ2l0IGEvZG1lc2dfdHJpYWdlL29vcHMtY29udGV4dC1wYXR0 ZXJuIGIvZG1lc2dfdHJpYWdlL29vcHMtY29udGV4dC1wYXR0ZXJuCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQKPiBpbmRleCAwMDAwMDAwLi5mN2RjMjA5Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2Rt ZXNnX3RyaWFnZS9vb3BzLWNvbnRleHQtcGF0dGVybgo+IEBAIC0wLDAgKzEsMzcgQEAKPiAraW52 b2tlZCBvb20ta2lsbGVyOgo+ICtJTkZPOiBwb3NzaWJsZSByZWN1cnNpdmUgbG9ja2luZyBkZXRl Y3RlZAo+ICsgaXMgdHJ5aW5nIHRvIGFjcXVpcmUgbG9jazoKPiArIHN0YXRlIHdhcyByZWdpc3Rl cmVkIGF0Ogo+ICtQb3NzaWJsZSB1bnNhZmUgbG9ja2luZyBzY2VuYXJpbzoKPiArICAgICAgIENQ VTAkCj4gKyAgICAgICAtLS0tJAo+ICsgIGxvY2soLiopOwo+ICtcKlwqXCogREVBRExPQ0sgXCpc KlwqCj4gK01heSBiZSBkdWUgdG8gbWlzc2luZyBsb2NrIG5lc3Rpbmcgbm90YXRpb24KPiArICA8 SW50ZXJydXB0Pgo+ICtidXQgdGFzayBpcyBhbHJlYWR5IGhvbGRpbmcgbG9jazoKPiArd2hpY2gg bG9jayBhbHJlYWR5IGRlcGVuZHMgb24gdGhlIG5ldyBsb2NrLgo+ICtvdGhlciBpbmZvIHRoYXQg bWlnaHQgaGVscCB1cyBkZWJ1ZyB0aGlzOgo+ICtzdGFjayBiYWNrdHJhY2U6Cj4gKyBFRkxBR1M6 IAo+ICtSQlA6IAo+ICsga25sR1M6Cj4gKyBDUjM6IAo+ICtTdGFjazoKPiArQ29kZTogCj4gK3Nl bmRpbmcgTk1JIHRvIGFsbCBDUFVzOgo+ICtNb2R1bGVzIGxpbmtlZCBpbjoKPiArSGFyZHdhcmUg bmFtZTogCj4gK0NhbGwgVHJhY2U6Cj4gK1xbPFthLWYwLTldXCs+XF0gW2EtejAtOS5fXVwrKzB4 WzAtOWEtZl1cKy8weFswLTlhLWZdXCsKPiArXFs8W2EtZjAtOV1cKz5cXSA/IFthLXowLTkuX11c KysweFswLTlhLWZdXCsvMHhbMC05YS1mXVwrCj4gK1woIFswLTlhLWZdXHsxNlx9XClcezdcfQo+ ICtzbGFiX3VucmVjbGFpbWFibGU6Cj4gK1N3YXAgY2FjaGUgc3RhdHM6Cj4gK3BhZ2VzIFJBTQo+ ICsgbG9ja3MgaGVsZCBieSAKPiArIGxvY2sgaGVsZCBieSAKPiArUkNVIHVzZWQgaWxsZWdhbGx5 IGZyb20gCj4gKyA9PT09PT09PT09PT09PT09PT09PT09PT09JAo+ICtPYmplY3QgWzAtOWEtZl1c KzogWzAtOWEtZiBdXCsgIFwuXC5cLgo+ICtSZWR6b25lIFswLTlhLWZdXCs6IFswLTlhLWYgXVwr IAo+IGRpZmYgLS1naXQgYS9kbWVzZ190cmlhZ2Uvb29wcy1wYXR0ZXJuIGIvZG1lc2dfdHJpYWdl L29vcHMtcGF0dGVybgo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uOWNl NDE0OAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kbWVzZ190cmlhZ2Uvb29wcy1wYXR0ZXJuCj4g QEAgLTAsMCArMSw1OSBAQAo+ICtbYS16QS1aIF1cKzogW2EtZjAtOV1cezRcfSBcWyNbMC05XVwr XF0gW0EtWl8gXSokCj4gK2tlcm5lbCBCVUcgYXQgLioKPiArS2VybmVsIHBhbmljIC0gbm90IHN5 bmNpbmc6IC4qCj4gK15CVUc6IC4qCj4gK1xbICpbMC05Ll1cK1xdIEJVRzogLioKPiArQlVHIC4q ICguKik6IC4qCj4gK09vcHM6IC4qCj4gK1dBUk5JTkc6IGF0IC4qCj4gK1dBUk5JTkc6IENQVTog WzAtOV1cKyBQSUQ6IFswLTldXCsgYXQgLioKPiArXklORk86IC4qZGV0ZWN0ZWQgc3RhbGwuKgo+ ICteSU5GTzogLiogY3B1PS4qCj4gK15JTkZPOiBTbGFiIDB4LioKPiArXklORk86IE9iamVjdCAw eC4qCj4gK15JTkZPOiAweC4qLiBGaXJzdCBieXRlIDB4LioKPiArXFsgKlswLTkuXVwrXF0gSU5G TzogLioKPiArXFsgSU5GTzogW15pXS4qIFxdCj4gK1JDVSB1c2VkIGlsbGVnYWxseSBmcm9tIG9m ZmxpbmUgQ1BVIQo+ICtSQ1UgdXNlZCBpbGxlZ2FsbHkgZnJvbSBpZGxlIENQVSEKPiArUkNVIHVz ZWQgaWxsZWdhbGx5IGZyb20gZXh0ZW5kZWQgcXVpZXNjZW50IHN0YXRlIQo+ICtpbmNvbnNpc3Rl bnQgey4qfSAtPiB7Lip9IHVzYWdlXC4KPiAraW5pdGNhbGwgLiogcmV0dXJuZWQgd2l0aCAuKgo+ ICtcWyBCVUc6IFteYl0uKiEgXF0KPiArIGlzIHRyeWluZyB0byByZWxlYXNlIGxvY2sgKC4qKSBh dAo+ICsgaXMgdHJ5aW5nIHRvIGNvbnRlbmQgbG9jayAoLiopIGF0Cj4gKyBpcyB0cnlpbmcgdG8g bG9jazogLioKPiArIGJ1dCB0aGlzIHRhc2sgaXMgbm90IGhvbGRpbmc6IC4qCj4gKyBpcyBsZWF2 aW5nIHRoZSBrZXJuZWwgd2l0aCBsb2NrcyBzdGlsbCBoZWxkIQo+ICsgaXMgZXhpdGluZyB3aXRo IGxvY2tzIHN0aWxsIGhlbGQhCj4gKyBpcyBmcmVlaW5nIG1lbW9yeSAuKiwgd2l0aCBhIGxvY2sg c3RpbGwgaGVsZCB0aGVyZSEKPiArZ2VuaXJxOiBGbGFncyBtaXNtYXRjaCBpcnEgLioKPiArT3V0 IG9mIG1lbW9yeTogS2lsbCBwcm9jZXNzIAo+ICtwYWdlIGFsbG9jYXRpb24gZmFpbHVyZTogb3Jk ZXI6WzAtOV1cKywgbW9kZToweC4qCj4gK3BhZ2VhbGxvYzogc2luZ2xlIGJpdCBlcnJvcgo+ICtw YWdlYWxsb2M6IG1lbW9yeSBjb3JydXB0aW9uCj4gK2F1ZGl0OiAoLiopIGVycm9yOiAuKgo+ICtn ZXRibGsoKTogaW52YWxpZCBibG9jayBzaXplIFswLTldXCsgcmVxdWVzdGVkCj4gK0tHREI6IHJl LWVudGVyIGV4Y2VwdGlvbjogQUxMIGJyZWFrcG9pbnRzIGtpbGxlZAo+ICtJUC1Db25maWc6IEF1 dG8tY29uZmlndXJhdGlvbiBvZiBuZXR3b3JrIGZhaWxlZAo+ICtFSVAgaXMgYXQgW2EtekEtWjAt OS5fXVwrKzB4LiovMHguKgo+ICtSSVA6IFswLTlhLWZdXHs0XH06XFsuKlxdIFthLXpBLVowLTku X11cKysweC4qLzB4LioKPiArUEFOSUM6IGVhcmx5IGV4Y2VwdGlvbiAKPiArUEFOSUM6IGRvdWJs ZSBmYXVsdCwgCj4gK1Vua25vd24gaW50ZXJydXB0IG9yIGZhdWx0IGF0Ogo+ICtFbmQgb2YgdGVz dDogRkFJTFVSRQo+ICtFbmQgb2YgdGVzdDogUkNVX0hPVFBMVUcKPiArUzBCb3g6IG1vcmUgdGhh biA1IGxvb3BzIGluIHMwYm94X2ludGVycnVwdAo+ICtJbml0cmFtZnMgdW5wYWNraW5nIGZhaWxl ZDogCj4gK2Fzc2VydGlvbiBmYWlsZWQKPiArQXNzZXJ0aW9uIGZhaWxlZAo+ICthc3NlcnRpb24g ZmFpbHVyZQo+ICtBc3NlcnRpb24gZmFpbHVyZQo+ICszMi1iaXQgcmVsb2NhdGlvbiBvdXRzaWRl IG9mIGtlcm5lbCEKPiArNjQtYml0IHJlbG9jYXRpb24gb3V0c2lkZSBvZiBrZXJuZWwhCj4gK0tl cm5lbCBpcyBub3QgYSB2YWxpZCBFTEYgZmlsZQo+ICtGYWlsZWQgdG8gYWxsb2NhdGUgc3BhY2Ug Zm9yIHBoZHJzCj4gK0Rlc3RpbmF0aW9uIGFkZHJlc3MgaW5hcHByb3ByaWF0ZWx5IGFsaWduZWQK PiArRGVzdGluYXRpb24gYWRkcmVzcyB0b28gbGFyZ2UKPiArV3JvbmcgZGVzdGluYXRpb24gYWRk cmVzcwo+ICsgLS0gU3lzdGVtIGhhbHRlZAo+IGRpZmYgLS1naXQgYS9mcmFtZXdvcmsvZG1lc2cu cHkgYi9mcmFtZXdvcmsvZG1lc2cucHkKPiBpbmRleCAxYTVmNjI5Li5kMjNiYTIzIDEwMDY0NAo+ IC0tLSBhL2ZyYW1ld29yay9kbWVzZy5weQo+ICsrKyBiL2ZyYW1ld29yay9kbWVzZy5weQo+IEBA IC00MSw2ICs0MSw3IEBAIGltcG9ydCBzeXMKPiAgaW1wb3J0IHN1YnByb2Nlc3MKPiAgaW1wb3J0 IHdhcm5pbmdzCj4gIGltcG9ydCBhYmMKPiAraW1wb3J0IG9zLCBlcnJubwo+ICAKPiAgX19hbGxf XyA9IFsKPiAgICAgICdCYXNlRG1lc2cnLAo+IEBAIC0yMDEsNiArMjAyLDY1IEBAIGNsYXNzIExp bnV4RG1lc2coQmFzZURtZXNnKToKPiAgICAgICAgICAjIEF0dGVtcHQgdG8gc3RvcmUgdGhlIGxh c3QgZWxlbWVudCBvZiBkbWVzZywgdW5sZXNzIHRoZXJlIHdhcyBubyBkbWVzZwo+ICAgICAgICAg IHNlbGYuX2xhc3RfbWVzc2FnZSA9IGRtZXNnWy0xXSBpZiBkbWVzZyBlbHNlIE5vbmUKPiAgCj4g KyAgICBkZWYgZG1lc2dfdHJpYWdlKHNlbGYsIHJlc3VsdCwgY29uZmlnKToKPiArICAgICAgICAi IiIgVHJpYWdlIGRtZXNnIGxvZyB0byBzb3J0IG91dCBkaWZmZXJlbnQgdGFnIGFuZCBoZWFkCj4g Kwo+ICsgICAgICAgIFJldHJpZXZlIHRoZSBjb250ZW50cyBvZiBkbWVzZyBsb2csIHRoZW4gd29y ayBvdXQgYSB0YWcgYW5kIGEgaGVhZCwgd2hpY2gKPiArICAgICAgICBjYW4gYmUgdXNlZCB0byBy b2xsYmFjayB0aGUgb3JpZ2luYWwgZG1lc2cgdHJhY2UgZGV0YWlscy4KPiArCj4gKyAgICAgICAg IiIiCj4gKyAgICAgICAgdHJ5Ogo+ICsgICAgICAgICAgICBvcy5zdGF0KGNvbmZpZ1siRE1FU0df VFJJQUdFX1NSQyJdKQo+ICsgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Cj4gKyAgICAgICAg ICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PRU5UIG9yIGUuZXJybm8gPT0gZXJybm8uRU5PRElS Ogo+ICsgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiW0RtZXNnIFRyaWFnZSBFcnJd OiAlcyIgJSBzdHIoZSkpCj4gKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Cj4gKwo+ICsg ICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhjb25maWdbIkRNRVNHX1RSSUFHRV9UTVAiXSk6 Cj4gKyAgICAgICAgICAgIHRyeToKPiArICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKGNvbmZp Z1siRE1FU0dfVFJJQUdFX1RNUCJdKQo+ICsgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBl Ogo+ICsgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiW0RtZXNnIFRyaWFnZSBXYXJu XTogJXMiICUgc3RyKGUpKQo+ICsgICAgICAgICAgICAgICAgY29uZmlnWyJETUVTR19UUklBR0Vf VE1QIl0gPSAiL3RtcCIgCQo+ICsKPiArICAgICAgICBvcy5lbnZpcm9uWyJETUVTR19UUklBR0Vf Uk9PVCJdID0gY29uZmlnWyJETUVTR19UUklBR0VfU1JDIl0KPiArICAgICAgICBvcy5lbnZpcm9u WyJLTVNHX1RSSUFHRV9MT0ciXSA9IGNvbmZpZ1siRE1FU0dfVFJJQUdFX1RNUCJdCj4gKwo+ICsg ICAgICAgIGZkID0gb3BlbigiJXMiICUgb3MucGF0aC5qb2luKGNvbmZpZ1siRE1FU0dfVFJJQUdF X1RNUCJdLCAiLmRtZXNnIiksICd3YicpCj4gKyAgICAgICAgdHJ5Ogo+ICsgICAgICAgICAgICBm ZC53cml0ZShyZXN1bHRbImRtZXNnIl0pCj4gKyAgICAgICAgICAgIGZkLmZsdXNoKCkKPiArICAg ICAgICBmaW5hbGx5Ogo+ICsgICAgICAgICAgICBmZC5jbG9zZSgpCj4gKwo+ICsgICAgICAgIHRy eToKPiArICAgICAgICAgICAgb3MuY2hkaXIoY29uZmlnWyJETUVTR19UUklBR0VfU1JDIl0pCj4g KyAgICAgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbCgid2hpY2ggcnVieSA+IC9kZXYvbnVs bCIsIHNoZWxsPVRydWUpCj4gKyAgICAgICAgICAgIGlmIHJldCAhPSAwOgo+ICsgICAgICAgICAg ICAgICAgc3lzLnN0ZGVyci53cml0ZSgiW0RtZXNnIFRyaWFnZSBFcnJdOiBObyBydWJ5IGJpbmFy eSBmb3VuZCwgcGxlYXNlIGluc3RhbGwgYW5kIHRyeSBhZ2FpbiAhXG4iKQo+ICsgICAgICAgICAg ICAgICAgcmV0dXJuIHJlc3VsdAo+ICsgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwo InJ1Ynkga21zZ190cmlhZ2UiLCBzaGVsbD1UcnVlKQo+ICsgICAgICAgIGV4Y2VwdCBzdWJwcm9j ZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgo+ICsgICAgICAgICAgICBzeXMuc3RkZXJyLndy aXRlKCJbRG1lc2cgVHJpYWdlIEVycl06ICVzIiAlIHN0cihlKSkKPiArICAgICAgICAgICAgcmV0 dXJuIHJlc3VsdAo+ICsKPiArICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoIiVzIiAlIG9z LnBhdGguam9pbihjb25maWdbIkRNRVNHX1RSSUFHRV9UTVAiXSwgIi5kbWVzZ19lcnJvcl9pZHMi KSk6Cj4gKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKPiArCj4gKyAgICAgICAgZXJyb3JfaWRz ID0gZGljdCgpCj4gKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihjb25maWdbIkRNRVNH X1RSSUFHRV9UTVAiXSwgIi5kbWVzZ19lcnJvcl9pZHMiKSkgYXMgZjoKPiArICAgICAgICAgICAg Zm9yIGVyciBpbiBpdGVyKGYucmVhZGxpbmUsICcnKToKPiArICAgICAgICAgICAgICAgIGlmIHJl LnNlYXJjaChyJ0AnLCBlcnIpIGlzIE5vbmU6Cj4gKyAgICAgICAgICAgICAgICAgICAgZi5jbG9z ZSgpCj4gKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAo+ICsgICAgICAgICAgICAg ICAgZXJyX2lkID0gcmUuc3BsaXQocidAJywgZXJyKQo+ICsgICAgICAgICAgICAgICAgZXJyb3Jf aWRzW2Vycl9pZFswXV0gPSBlcnJfaWRbMV0uc3RyaXAoIlxuIikucmVwbGFjZSgiMHgiLCAiKiIp Cj4gKyAgICAgICAgICAgICAKPiArICAgICAgICAgICAgZi5jbG9zZSgpCj4gKwo+ICsgICAgICAg IHJlc3VsdFsiZG1lc2dfdHJpYWdlX2luZm8iXSA9IGVycm9yX2lkcwo+ICsgICAgICAgIHJldHVy biByZXN1bHQKPiArICAgIAo+ICAKPiAgY2xhc3MgRHVtbXlEbWVzZyhCYXNlRG1lc2cpOgo+ICAg ICAgIiIiIEFuIGR1bW15IGNsYXNzIGZvciBkbWVzZyBvbiBub24gdW5peC1saWtlIHN5c3RlbXMK PiBkaWZmIC0tZ2l0IGEvZnJhbWV3b3JrL3Rlc3QvYmFzZS5weSBiL2ZyYW1ld29yay90ZXN0L2Jh c2UucHkKPiBpbmRleCBlZmMyMGNiLi5hNTdjN2VhIDEwMDY0NAo+IC0tLSBhL2ZyYW1ld29yay90 ZXN0L2Jhc2UucHkKPiArKysgYi9mcmFtZXdvcmsvdGVzdC9iYXNlLnB5Cj4gQEAgLTE1Nyw2ICsx NTcsMTAgQEAgY2xhc3MgVGVzdChvYmplY3QpOgo+ICAgICAgICAgICAgICAgICAgc2VsZi5ydW4o KQo+ICAgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHRbJ3RpbWUnXSA9IHRpbWUudGltZSgpIC0g dGltZV9zdGFydAo+ICAgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSBkbWVzZy51cGRhdGVf cmVzdWx0KHNlbGYucmVzdWx0KQo+ICsgICAgICAgICAgICAgICAgaWYgc2VsZi5yZXN1bHQuaGFz X2tleSgiZG1lc2ciKSBhbmQgc2VsZi5lbnZbIkVOQUJMRV9ETUVTR19UUklBR0UiXToKPiArICAg ICAgICAgICAgICAgICAgICBzZWxmLmVudlsiRE1FU0dfVFJJQUdFX1NSQyJdID0gb3MucGF0aC5q b2luKHNlbGYuT1BUUy5lbnZbIlBJR0xJVF9TT1VSQ0VfRElSIl0sIHNlbGYuZW52WyJETUVTR19U UklBR0VfU1JDIl0pCj4gKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSBkbWVzZy5k bWVzZ190cmlhZ2Uoc2VsZi5yZXN1bHQsIHNlbGYuZW52KQo+ICsKPiAgICAgICAgICAgICAgIyBU aGlzIGlzIGEgcmFyZSBjYXNlIHdoZXJlIGEgYmFyZSBleGNlcHRpb24gaXMgb2theSwgc2luY2Ug d2UncmUKPiAgICAgICAgICAgICAgIyB1c2luZyBpdCB0byBsb2cgZXhjZXB0aW9ucwo+ICAgICAg ICAgICAgICBleGNlcHQ6Cj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2lndC5weSBiL3Rlc3RzL2lndC5w eQo+IGluZGV4IDIwNDc3ODEuLjcwNGVlNzUgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMvaWd0LnB5Cj4g KysrIGIvdGVzdHMvaWd0LnB5Cj4gQEAgLTEwNCw2ICsxMDQsMTMgQEAgY2xhc3MgSUdUVGVzdChU ZXN0KToKPiAgICAgICAgICAgICAgW29zLnBhdGguam9pbihJR1RfVEVTVF9ST09ULCBiaW5hcnkp XSArIGFyZ3VtZW50cykKPiAgICAgICAgICBzZWxmLnRpbWVvdXQgPSA2MDAKPiAgCj4gKyAgICAg ICAgIyBlbmFibGUgb3IgZGlzYWJsZSBkbWVzZyB0cmlhZ2UgZmVhdHVyZSBoZXJlCj4gKyAgICAg ICAgc2VsZi5lbnZbIkVOQUJMRV9ETUVTR19UUklBR0UiXSA9IFRydWUKPiArICAgICAgICBpZiBz ZWxmLmVudlsiRU5BQkxFX0RNRVNHX1RSSUFHRSJdOgo+ICsgICAgICAgICAgICAjIEluaXRpYWxp emUgZG1lc2cgdHJpYWdlIHJlc291cmNlcwo+ICsgICAgICAgICAgICBzZWxmLmVudlsiRE1FU0df VFJJQUdFX1RNUCJdID0gIi90bXAvZG1lc2ciCj4gKyAgICAgICAgICAgIHNlbGYuZW52WyJETUVT R19UUklBR0VfU1JDIl0gPSAiZG1lc2dfdHJpYWdlIgo+ICsKPiAgICAgIGRlZiBpbnRlcnByZXRf cmVzdWx0KHNlbGYpOgo+ICAgICAgICAgIGlmIHNlbGYucmVzdWx0WydyZXR1cm5jb2RlJ10gPT0g MDoKPiAgICAgICAgICAgICAgc2VsZi5yZXN1bHRbJ3Jlc3VsdCddID0gJ3Bhc3MnCj4gLS0gCj4g MS45LjEKPiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Xwo+IEludGVsLWdmeCBtYWlsaW5nIGxpc3QKPiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCj4gaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVs LWdmeApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRl bC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=