From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 0F7049A9E for ; Mon, 18 May 2015 09:43:19 +0200 (CEST) Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga102.fm.intel.com with ESMTP; 18 May 2015 00:43:19 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.13,451,1427785200"; d="scan'208";a="711747783" Received: from pgsmsx105.gar.corp.intel.com ([10.221.44.96]) by fmsmga001.fm.intel.com with ESMTP; 18 May 2015 00:43:18 -0700 Received: from shsmsx152.ccr.corp.intel.com (10.239.6.52) by PGSMSX105.gar.corp.intel.com (10.221.44.96) with Microsoft SMTP Server (TLS) id 14.3.224.2; Mon, 18 May 2015 15:43:16 +0800 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.94]) by SHSMSX152.ccr.corp.intel.com ([169.254.6.50]) with mapi id 14.03.0224.002; Mon, 18 May 2015 15:43:14 +0800 From: "Jiajia, SunX" To: "Liu, Yong" , "dts@dpdk.org" Thread-Topic: =?utf-8?B?W2R0c10gW+KAmGR0cy12MeKAmSAyLzldIE9wdGltaXplIHNzaCBjb25uZWN0?= =?utf-8?Q?ion?= Thread-Index: AQHQkSiPPOSpQa6ncEqplx/fI50StZ2AyeCAgACMSLA= Date: Mon, 18 May 2015 07:43:14 +0000 Message-ID: References: <1431925646-1314-1-git-send-email-sunx.jiajia@intel.com> <1431925646-1314-3-git-send-email-sunx.jiajia@intel.com> <86228AFD5BCD8E4EBFD2B90117B5E81E10DE47C6@SHSMSX103.ccr.corp.intel.com> In-Reply-To: <86228AFD5BCD8E4EBFD2B90117B5E81E10DE47C6@SHSMSX103.ccr.corp.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-cr-hashedpuzzle: Sbg= ABFP Aa7V AgYE AwUE CAkv Co4u Cwla C9OH D80Z EiYb GDId Gmlm GozD GwnD Jd1z; 1; ZAB0AHMAQABkAHAAZABrAC4AbwByAGcA; Sosha1_v1; 7; {AEE4C7DE-8A5D-492A-8819-444152A378FB}; cwB1AG4AeAAuAGoAaQBhAGoAaQBhAEAAaQBuAHQAZQBsAC4AYwBvAG0A; Mon, 18 May 2015 07:43:12 GMT; UgBFADoAIABbAGQAdABzAF0AIABbABggZAB0AHMALQB2ADEAGSAgADIALwA5AF0AIABPAHAAdABpAG0AaQB6AGUAIABzAHMAaAAgAGMAbwBuAG4AZQBjAHQAaQBvAG4A x-cr-puzzleid: {AEE4C7DE-8A5D-492A-8819-444152A378FB} x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dts] =?utf-8?b?W+KAmGR0cy12MeKAmSAyLzldIE9wdGltaXplIHNzaCBjb25u?= =?utf-8?q?ection?= X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 May 2015 07:43:21 -0000 SGkgWW9uZywgDQoNCkkgaGF2ZSByZXBsaWVkIHRoZSBjb21tZW50cyBhcyBiZWxvdy4NCg0KPiAt LS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBMaXUsIFlvbmcNCj4gU2VudDogTW9u ZGF5LCBNYXkgMTgsIDIwMTUgMzowNiBQTQ0KPiBUbzogSmlhamlhLCBTdW5YOyBkdHNAZHBkay5v cmcNCj4gU3ViamVjdDogUkU6IFtkdHNdIFvigJhkdHMtdjHigJkgMi85XSBPcHRpbWl6ZSBzc2gg Y29ubmVjdGlvbg0KPiANCj4gSmlhamlhLA0KPiBQbGVhc2Ugc2VlIG15IGNvbW1lbnRzIGJlbG93 Lg0KPiANCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+IEZyb206IGR0cyBbbWFp bHRvOmR0cy1ib3VuY2VzQGRwZGsub3JnXSBPbiBCZWhhbGYgT2Ygc2ppYWppYXgNCj4gPiBTZW50 OiBNb25kYXksIE1heSAxOCwgMjAxNSAxOjA3IFBNDQo+ID4gVG86IGR0c0BkcGRrLm9yZw0KPiA+ IFN1YmplY3Q6IFtkdHNdIFvigJhkdHMtdjHigJkgMi85XSBPcHRpbWl6ZSBzc2ggY29ubmVjdGlv bg0KPiA+DQo+ID4gT3B0aW1pemUgY29uZmlndXJlIHBhcnNlDQo+ID4NCj4gPiBNb3ZlIHNvbWUg ZnVuY3Rpb25zIGluIGR0cyB0byBhbiBjb21tb24gdXRpbHMgbW9kdWxlDQo+ID4NCj4gPiBTaWdu ZWQtb2ZmLWJ5OiBzamlhamlheCA8c3VueC5qaWFqaWFAaW50ZWwuY29tPg0KPiA+IC0tLQ0KPiA+ ICBmcmFtZXdvcmsvY29uZmlnLnB5ICAgICAgICAgfCAxNzENCj4gKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKystLS0tDQo+ID4gLS0tLS0NCj4gPiAgZnJhbWV3b3JrL3NzaF9jb25u ZWN0aW9uLnB5IHwgICA1ICsrDQo+ID4gIGZyYW1ld29yay9zc2hfcGV4cGVjdC5weSAgICB8ICA2 MyArKysrKysrKysrKysrLS0tDQo+ID4gIGZyYW1ld29yay91dGlscy5weSAgICAgICAgICB8ICA3 NyArKysrKysrKysrKysrKysrKysrKw0KPiA+ICA0IGZpbGVzIGNoYW5nZWQsIDI3MCBpbnNlcnRp b25zKCspLCA0NiBkZWxldGlvbnMoLSkNCj4gPiAgbW9kZSBjaGFuZ2UgMTAwNzU1ID0+IDEwMDY0 NCBmcmFtZXdvcmsvY29uZmlnLnB5DQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBmcmFtZXdvcmsv dXRpbHMucHkNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9mcmFtZXdvcmsvY29uZmlnLnB5IGIvZnJh bWV3b3JrL2NvbmZpZy5weQ0KPiA+IG9sZCBtb2RlIDEwMDc1NQ0KPiA+IG5ldyBtb2RlIDEwMDY0 NA0KPiA+IGluZGV4IGQyNTQ4ZTguLjkyN2M4NDYNCj4gPiAtLS0gYS9mcmFtZXdvcmsvY29uZmln LnB5DQo+ID4gKysrIGIvZnJhbWV3b3JrL2NvbmZpZy5weQ0KPiA+IEBAIC0zNyw0NSArMzcsMTMz IEBAIGltcG9ydCByZQ0KPiA+ICBpbXBvcnQgQ29uZmlnUGFyc2VyICAjIGNvbmZpZyBwYXJzZSBt b2R1bGUNCj4gPiAgaW1wb3J0IGFyZ3BhcnNlICAgICAgIyBwcmFzZSBhcmd1bWVudHMgbW9kdWxl DQo+ID4NCj4gPiAtcG9ydGNvbmYgPSAiY29uZi9wb3J0cy5jZmciDQo+ID4gLWNyYmNvbmYgPSAi Y29uZi9jcmJzLmNmZyINCj4gPiArUE9SVENPTkYgPSAiY29uZi9wb3J0cy5jZmciDQo+ID4gK0NS QkNPTkYgPSAiY29uZi9jcmJzLmNmZyINCj4gPiArVklSVENPTkYgPSAiY29uZi92aXJ0X2dsb2Jh bC5jZmciDQo+ID4NCj4gPg0KPiA+ICBjbGFzcyBVc2VyQ29uZigpOg0KPiA+DQo+ID4gLSAgICBk ZWYgX19pbml0X18oc2VsZiwgcG9ydF9jb25mPXBvcnRjb25mLCBjcmJfY29uZj1jcmJjb25mKToN Cj4gPiAtICAgICAgICBzZWxmLnBvcnRfY29uZmlnID0gcG9ydF9jb25mDQo+ID4gLSAgICAgICAg c2VsZi5jcmJfY29uZmlnID0gY3JiX2NvbmYNCj4gPiArICAgIGRlZiBfX2luaXRfXyhzZWxmLCBj b25maWcpOg0KPiA+ICsgICAgICAgIHNlbGYuY29uZiA9IENvbmZpZ1BhcnNlci5TYWZlQ29uZmln UGFyc2VyKCkNCj4gPiArICAgICAgICBsb2FkX2ZpbGVzID0gc2VsZi5jb25mLnJlYWQoY29uZmln KQ0KPiA+ICsgICAgICAgIGlmIGxvYWRfZmlsZXMgPT0gW106DQo+ID4gKyAgICAgICAgICAgIHBy aW50ICJGQUlMRUQgTE9BRElORyAlcyEhISIgJSBjb25maWcNCj4gPiArICAgICAgICAgICAgc2Vs Zi5jb25mID0gTm9uZQ0KPiA+ICsgICAgICAgICAgICByYWlzZQ0KPiA+ICsNCj4gDQo+IFRoZXJl J3MgbmVlZCBvbmUgc3BlY2lhbCBleGNlcHRpb24gZm9yIGNvbmZpZ3VyYXRpb24gcGFyc2VkIGZh aWx1cmUuDQoNClllcywgSSB0aGluayBpdCBpcyBnb29kIHRvIGRvIHRoYXQuDQoNCj4gDQo+ID4g KyAgICBkZWYgZ2V0X3NlY3Rpb25zKHNlbGYpOg0KPiA+ICsgICAgICAgIGlmIHNlbGYuY29uZiBp cyBOb25lOg0KPiA+ICsgICAgICAgICAgICByZXR1cm4gTm9uZQ0KPiA+ICsNCj4gPiArICAgICAg ICByZXR1cm4gc2VsZi5jb25mLnNlY3Rpb25zKCkNCj4gPiArDQo+ID4gKyAgICBkZWYgbG9hZF9z ZWN0aW9uKHNlbGYsIHNlY3Rpb24pOg0KPiA+ICsgICAgICAgIGlmIHNlbGYuY29uZiBpcyBOb25l Og0KPiA+ICsgICAgICAgICAgICByZXR1cm4gTm9uZQ0KPiA+ICsNCj4gPiArICAgICAgICBpdGVt cyA9IE5vbmUNCj4gPiArICAgICAgICBmb3IgY29uZl9zZWN0IGluIHNlbGYuY29uZi5zZWN0aW9u cygpOg0KPiA+ICsgICAgICAgICAgICBpZiBjb25mX3NlY3QgPT0gc2VjdGlvbjoNCj4gPiArICAg ICAgICAgICAgICAgIGl0ZW1zID0gc2VsZi5jb25mLml0ZW1zKHNlY3Rpb24pDQo+ID4gKw0KPiA+ ICsgICAgICAgIHJldHVybiBpdGVtcw0KPiA+ICsNCj4gPiArICAgIGRlZiBsb2FkX2NvbmZpZyhz ZWxmLCBpdGVtKToNCj4gPiArICAgICAgICBjb25mcyA9IFtjb25mLnN0cmlwKCkgZm9yIGNvbmYg aW4gaXRlbS5zcGxpdCgnOycpXQ0KPiA+ICsgICAgICAgIGlmICcnIGluIGNvbmZzOg0KPiA+ICsg ICAgICAgICAgICBjb25mcy5yZW1vdmUoJycpDQo+ID4gKyAgICAgICAgcmV0dXJuIGNvbmZzDQo+ ID4gKw0KPiA+ICsgICAgZGVmIGxvYWRfcGFyYW0oc2VsZiwgY29uZik6DQo+ID4gKyAgICAgICAg cGFyYW1EaWN0ID0gZGljdCgpDQo+ID4gKw0KPiA+ICsgICAgICAgIGZvciBwYXJhbSBpbiBjb25m LnNwbGl0KCcsJyk6DQo+ID4gKyAgICAgICAgICAgIChrZXksIF8sIHZhbHVlKSA9IHBhcmFtLnBh cnRpdGlvbignPScpDQo+ID4gKyAgICAgICAgICAgIHBhcmFtRGljdFtrZXldID0gdmFsdWUNCj4g PiArICAgICAgICByZXR1cm4gcGFyYW1EaWN0DQo+ID4gKw0KPiA+ICsNCj4gPiArY2xhc3MgVmly dENvbmYoVXNlckNvbmYpOg0KPiA+ICsNCj4gPiArICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2aXJ0 X2NvbmY9VklSVENPTkYpOg0KPiA+ICsgICAgICAgIHNlbGYuY29uZmlnX2ZpbGUgPSB2aXJ0X2Nv bmYNCj4gPiArICAgICAgICBzZWxmLnZpcnRfY2ZnID0ge30NCj4gPiArICAgICAgICB0cnk6DQo+ ID4gKyAgICAgICAgICAgIHNlbGYudmlydF9jb25mID0gVXNlckNvbmYoc2VsZi5jb25maWdfZmls ZSkNCj4gPiArICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6DQo+ID4gKyAgICAgICAgICAg IHByaW50ICJGQUlMRUQgTE9BRElORyBWSVJUIENPTkZJRyEhISINCj4gPiArICAgICAgICAgICAg c2VsZi52aXJ0X2NvbmYgPSBOb25lDQo+ID4gKw0KPiBUaGVyZSdzIG5lZWQgb25lIHNwZWNpYWwg ZXhjZXB0aW9uIGZvciBjb25maWd1cmF0aW9uIHBhcnNlZCBmYWlsdXJlLg0KDQpJIHdpbGwgZG8g aXQgaW4gdGhlIG5leHQgdmVyc2lvbi4NCg0KPiANCj4gPiArICAgIGRlZiBsb2FkX3ZpcnRfY29u ZmlnKHNlbGYsIG5hbWUpOg0KPiA+ICsgICAgICAgIHNlbGYudmlydF9jZmdzID0gW10NCj4gPiAr DQo+ID4gKyAgICAgICAgdHJ5Og0KPiA+ICsgICAgICAgICAgICB2aXJ0X2NvbmZzID0gc2VsZi52 aXJ0X2NvbmYubG9hZF9zZWN0aW9uKG5hbWUpDQo+ID4gKyAgICAgICAgZXhjZXB0Og0KPiA+ICsg ICAgICAgICAgICBwcmludCAiRkFJTEVEIEZJTkQgU0VDVElPTiAlcyEhISIgJSBuYW1lDQo+ID4g KyAgICAgICAgICAgIHJldHVybg0KPiA+ICsNCj4gQWRkIGV4Y2VwdGlvbiBmb3IgbG9hZCBzZWN0 aW9uIGZhaWxlZC4NCg0KSSB3aWxsIGRvIGl0IGluIHRoZSBuZXh0IHZlcnNpb24uDQoNCj4gDQo+ ID4gKyAgICAgICAgZm9yIHZpcnRfY29uZiBpbiB2aXJ0X2NvbmZzOg0KPiA+ICsgICAgICAgICAg ICB2aXJ0X2NmZyA9IHt9DQo+ID4gKyAgICAgICAgICAgIHZpcnRfcGFyYW1zID0gW10NCj4gPiAr ICAgICAgICAgICAga2V5LCBjb25maWcgPSB2aXJ0X2NvbmYNCj4gPiArICAgICAgICAgICAgY29u ZnMgPSBzZWxmLnZpcnRfY29uZi5sb2FkX2NvbmZpZyhjb25maWcpDQo+ID4gKyAgICAgICAgICAg IGZvciBjb25maWcgaW4gY29uZnM6DQo+ID4gKyAgICAgICAgICAgICAgICB2aXJ0X3BhcmFtcy5h cHBlbmQoc2VsZi5sb2FkX3ZpcnRfcGFyYW0oY29uZmlnKSkNCj4gPiArICAgICAgICAgICAgdmly dF9jZmdba2V5XSA9IHZpcnRfcGFyYW1zDQo+ID4gKyAgICAgICAgICAgIHNlbGYudmlydF9jZmdz LmFwcGVuZCh2aXJ0X2NmZykNCj4gPiArDQo+ID4gKyAgICBkZWYgZ2V0X3ZpcnRfY29uZmlnKHNl bGYpOg0KPiA+ICsgICAgICAgIHJldHVybiBzZWxmLnZpcnRfY2Zncw0KPiA+ICsNCj4gPiArICAg IGRlZiBsb2FkX3ZpcnRfcGFyYW0oc2VsZiwgY29uZmlnKToNCj4gPiArICAgICAgICBjZmdfcGFy YW1zID0gc2VsZi52aXJ0X2NvbmYubG9hZF9wYXJhbShjb25maWcpDQo+ID4gKyAgICAgICAgcmV0 dXJuIGNmZ19wYXJhbXMNCj4gPiArDQo+ID4gKw0KPiA+ICtjbGFzcyBQb3J0Q29uZihVc2VyQ29u Zik6DQo+ID4gKw0KPiA+ICsgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfY29uZj1QT1JUQ09O Rik6DQo+ID4gKyAgICAgICAgc2VsZi5jb25maWdfZmlsZSA9IHBvcnRfY29uZg0KPiA+ICAgICAg ICAgIHNlbGYucG9ydHNfY2ZnID0ge30NCj4gPiAgICAgICAgICBzZWxmLnBjaV9yZWdleCA9ICIo W1xkYS1mXXsyfTpbXGRhLWZdezJ9LlxkezF9KSQiDQo+ID4gICAgICAgICAgdHJ5Og0KPiA+IC0g ICAgICAgICAgICBzZWxmLnBvcnRfY29uZiA9IENvbmZpZ1BhcnNlci5TYWZlQ29uZmlnUGFyc2Vy KCkNCj4gPiAtICAgICAgICAgICAgc2VsZi5wb3J0X2NvbmYucmVhZChzZWxmLnBvcnRfY29uZmln KQ0KPiA+ICsgICAgICAgICAgICBzZWxmLnBvcnRfY29uZiA9IFVzZXJDb25mKHNlbGYuY29uZmln X2ZpbGUpDQo+ID4gICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOg0KPiA+ICAgICAgICAg ICAgICBwcmludCAiRkFJTEVEIExPQURJTkcgUE9SVCBDT05GSUchISEiDQo+ID4gKyAgICAgICAg ICAgIHNlbGYucG9ydF9jb25mID0gTm9uZQ0KPiA+DQo+IFRoZXJlJ3MgbmVlZCBvbmUgc3BlY2lh bCBleGNlcHRpb24gZm9yIGNvbmZpZ3VyYXRpb24gcGFyc2VkIGZhaWx1cmUuDQoNCkkgd2lsbCBk byBpdCBpbiB0aGUgbmV4dCB2ZXJzaW9uLg0KDQo+IA0KPiA+ICAgICAgZGVmIGxvYWRfcG9ydHNf Y29uZmlnKHNlbGYsIGNyYklQKToNCj4gPiAtICAgICAgICBwb3J0cyA9IFtdDQo+ID4gLSAgICAg ICAgZm9yIGNyYiBpbiBzZWxmLnBvcnRfY29uZi5zZWN0aW9ucygpOg0KPiA+IC0gICAgICAgICAg ICBpZiBjcmIgIT0gY3JiSVA6DQo+ID4gLSAgICAgICAgICAgICAgICBjb250aW51ZQ0KPiA+IC0g ICAgICAgICAgICBwb3J0cyA9IFtwb3J0LnN0cmlwKCkNCj4gPiAtICAgICAgICAgICAgICAgICAg ICAgZm9yIHBvcnQgaW4gc2VsZi5wb3J0X2NvbmYuZ2V0KGNyYiwNCj4gPiAncG9ydHMnKS5zcGxp dCgnOycpXQ0KPiA+ICsgICAgICAgIHNlbGYucG9ydHNfY2ZnID0ge30NCj4gPiArICAgICAgICBp ZiBzZWxmLnBvcnRfY29uZiBpcyBOb25lOg0KPiA+ICsgICAgICAgICAgICByZXR1cm4NCj4gPiAr DQo+ID4gKyAgICAgICAgcG9ydHMgPSBzZWxmLnBvcnRfY29uZi5sb2FkX3NlY3Rpb24oY3JiSVAp DQo+ID4gKyAgICAgICAgaWYgcG9ydHMgaXMgTm9uZToNCj4gPiArICAgICAgICAgICAgcmV0dXJu DQo+ID4gKyAgICAgICAga2V5LCBjb25maWcgPSBwb3J0c1swXQ0KPiA+ICsgICAgICAgIGNvbmZz ID0gc2VsZi5wb3J0X2NvbmYubG9hZF9jb25maWcoY29uZmlnKQ0KPiA+ICsNCj4gPiArICAgICAg ICBmb3IgY29uZmlnIGluIGNvbmZzOg0KPiA+ICsgICAgICAgICAgICBwb3J0X3BhcmFtID0gc2Vs Zi5wb3J0X2NvbmYubG9hZF9wYXJhbShjb25maWcpDQo+ID4NCj4gPiAtICAgICAgICBmb3IgcG9y dCBpbiBwb3J0czoNCj4gPiAtICAgICAgICAgICAgcG9ydF9jZmcgPSBzZWxmLl9fcGFyc2VfcG9y dF9wYXJhbShwb3J0KQ0KPiA+ICAgICAgICAgICAgICAjIGNoZWNrIHBjaSBCREYgdmFsaWRpdHkN Cj4gPiAtICAgICAgICAgICAgaWYgJ3BjaScgbm90IGluIHBvcnRfY2ZnOg0KPiA+ICsgICAgICAg ICAgICBpZiAncGNpJyBub3QgaW4gcG9ydF9wYXJhbToNCj4gPiAgICAgICAgICAgICAgICAgIHBy aW50ICJOT1QgRk9VTkQgQ09ORklHIEZPUiBOTyBQQ0kgQUREUkVTUyEhISINCj4gPiAgICAgICAg ICAgICAgICAgIGNvbnRpbnVlDQo+ID4gLSAgICAgICAgICAgIG0gPSByZS5tYXRjaChzZWxmLnBj aV9yZWdleCwgcG9ydF9jZmdbJ3BjaSddKQ0KPiA+ICsgICAgICAgICAgICBtID0gcmUubWF0Y2go c2VsZi5wY2lfcmVnZXgsIHBvcnRfcGFyYW1bJ3BjaSddKQ0KPiA+ICAgICAgICAgICAgICBpZiBt IGlzIE5vbmU6DQo+ID4gICAgICAgICAgICAgICAgICBwcmludCAiSU5WQUxJRCBDT05GSUcgRk9S IE5PIFBDSSBBRERSRVNTISEhIg0KPiA+ICAgICAgICAgICAgICAgICAgY29udGludWUNCj4gPg0K PiA+IC0gICAgICAgICAgICBrZXlzID0gcG9ydF9jZmcua2V5cygpDQo+ID4gKyAgICAgICAgICAg IGtleXMgPSBwb3J0X3BhcmFtLmtleXMoKQ0KPiA+ICAgICAgICAgICAgICBrZXlzLnJlbW92ZSgn cGNpJykNCj4gPiAtICAgICAgICAgICAgc2VsZi5wb3J0c19jZmdbcG9ydF9jZmdbJ3BjaSddXSA9 IHtrZXk6IHBvcnRfY2ZnW2tleV0NCj4gZm9yIGtleQ0KPiA+IGluIGtleXN9DQo+ID4gKyAgICAg ICAgICAgIHNlbGYucG9ydHNfY2ZnW3BvcnRfcGFyYW1bJ3BjaSddXSA9IHsNCj4gPiArICAgICAg ICAgICAgICAgIGtleTogcG9ydF9wYXJhbVtrZXldIGZvciBrZXkgaW4ga2V5c30NCj4gPiArICAg ICAgICAgICAgaWYgJ251bWEnIGluIHNlbGYucG9ydHNfY2ZnW3BvcnRfcGFyYW1bJ3BjaSddXToN Cj4gPiArICAgICAgICAgICAgICAgIG51bWFfc3RyID0gc2VsZi5wb3J0c19jZmdbcG9ydF9wYXJh bVsncGNpJ11dWydudW1hJ10NCj4gPiArICAgICAgICAgICAgICAgIHNlbGYucG9ydHNfY2ZnW3Bv cnRfcGFyYW1bJ3BjaSddXVsnbnVtYSddID0NCj4gaW50KG51bWFfc3RyKQ0KPiA+DQo+ID4gICAg ICBkZWYgZ2V0X3BvcnRzX2NvbmZpZyhzZWxmKToNCj4gPiAgICAgICAgICByZXR1cm4gc2VsZi5w b3J0c19jZmcNCj4gPiBAQCAtODYsMjMgKzE3NCwzNiBAQCBjbGFzcyBVc2VyQ29uZigpOg0KPiA+ ICAgICAgICAgIGVsc2U6DQo+ID4gICAgICAgICAgICAgIHJldHVybiBGYWxzZQ0KPiA+DQo+ID4g LSAgICBkZWYgX19wYXJzZV9wb3J0X3BhcmFtKHNlbGYsIHBvcnQpOg0KPiA+IC0gICAgICAgIHBv cnREaWN0ID0gZGljdCgpDQo+ID4gLQ0KPiA+IC0gICAgICAgIGZvciBwYXJhbSBpbiBwb3J0LnNw bGl0KCcsJyk6DQo+ID4gLSAgICAgICAgICAgIChrZXksIF8sIHZhbHVlKSA9IHBhcmFtLnBhcnRp dGlvbignPScpDQo+ID4gLSAgICAgICAgICAgIGlmIGtleSA9PSAnbnVtYSc6DQo+ID4gLSAgICAg ICAgICAgICAgICBwb3J0RGljdFtrZXldID0gaW50KHZhbHVlKQ0KPiA+IC0gICAgICAgICAgICBl bHNlOg0KPiA+IC0gICAgICAgICAgICAgICAgcG9ydERpY3Rba2V5XSA9IHZhbHVlDQo+ID4gLSAg ICAgICAgcmV0dXJuIHBvcnREaWN0DQo+ID4gKw0KPiA+DQo+ID4NCj4gPiAgaWYgX19uYW1lX18g PT0gJ19fbWFpbl9fJzoNCj4gPiAtICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2Vy KGRlc2NyaXB0aW9uPSJMb2FkIERUUw0KPiBjb25maWd1cmF0aW9uDQo+ID4gZmlsZXMiKQ0KPiA+ IC0gICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLXAiLCAiLS1wb3J0Y29uZiIsIGRlZmF1bHQ9cG9y dGNvbmYpDQo+ID4gLSAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItYyIsICItLWNyYmNvbmYiLCBk ZWZhdWx0PWNyYmNvbmYpDQo+ID4gKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNl cigNCj4gPiArICAgICAgICBkZXNjcmlwdGlvbj0iTG9hZCBEVFMgY29uZmlndXJhdGlvbiBmaWxl cyIpDQo+ID4gKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItcCIsICItLXBvcnRjb25mIiwgZGVm YXVsdD1QT1JUQ09ORikNCj4gPiArICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1jIiwgIi0tY3Ji Y29uZiIsIGRlZmF1bHQ9Q1JCQ09ORikNCj4gPiArICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi12 IiwgIi0tdmlydGNvbmYiLCBkZWZhdWx0PVZJUlRDT05GKQ0KPiA+ICAgICAgYXJncyA9IHBhcnNl ci5wYXJzZV9hcmdzKCkNCj4gPiAtICAgIGNvbmYgPSBVc2VyQ29uZigpDQo+ID4gLSAgICBjb25m LmxvYWRfcG9ydHNfY29uZmlnKCcxOTIuMTY4LjEuMScpDQo+ID4gLSAgICBjb25mLmNoZWNrX3Bv cnRfYXZhaWxhYmxlKCcwMDAwOjg2OjAwLjAnKQ0KPiA+ICsNCj4gPiArICAgICMgbm90IGV4aXN0 ZWQgY29uZmlndXJhdGlvbiBmaWxlDQo+ID4gKyAgICBWaXJ0Q29uZignL3RtcC9ub3QtZXhpc3Rl ZC5jZmcnKQ0KPiA+ICsNCj4gPiArICAgICMgZXhhbXBsZSBmb3IgYmFzaWMgdXNlIGNvbmZpZ3Vy YXRpb24gZmlsZQ0KPiA+ICsgICAgY29uZiA9IFVzZXJDb25mKFBPUlRDT05GKQ0KPiA+ICsgICAg Zm9yIHNlY3Rpb24gaW4gY29uZi5nZXRfc2VjdGlvbnMoKToNCj4gPiArICAgICAgICBpdGVtcyA9 IGNvbmYubG9hZF9zZWN0aW9uKHNlY3Rpb24pDQo+ID4gKyAgICAgICAga2V5LCB2YWx1ZSA9IGl0 ZW1zWzBdDQo+ID4gKyAgICAgICAgY29uZnMgPSBjb25mLmxvYWRfY29uZmlnKHZhbHVlKQ0KPiA+ ICsgICAgICAgIGZvciBjb25maWcgaW4gY29uZnM6DQo+ID4gKyAgICAgICAgICAgIGNvbmYubG9h ZF9wYXJhbShjb25maWcpDQo+ID4gKw0KPiA+ICsgICAgIyBleGFtcGxlIGZvciBwb3J0IGNvbmZp Z3VyYXRpb24gZmlsZQ0KPiA+ICsgICAgcG9ydGNvbmYgPSBQb3J0Q29uZihQT1JUQ09ORikNCj4g PiArICAgIHBvcnRjb25mLmxvYWRfcG9ydHNfY29uZmlnKCdEVVQgSVAnKQ0KPiA+ICsgICAgcHJp bnQgcG9ydGNvbmYuZ2V0X3BvcnRzX2NvbmZpZygpDQo+ID4gKyAgICBwb3J0Y29uZi5jaGVja19w b3J0X2F2YWlsYWJsZSgnODY6MDAuMCcpDQo+ID4gKw0KPiA+ICsgICAgIyBleGFtcGxlIGZvciBn bG9iYWwgdmlydHVhbGl6YXRpb24gY29uZmlndXJhdGlvbiBmaWxlDQo+ID4gKyAgICB2aXJ0Y29u ZiA9IFZpcnRDb25mKFZJUlRDT05GKQ0KPiA+ICsgICAgdmlydGNvbmYubG9hZF92aXJ0X2NvbmZp ZygnTElCVklSVCcpDQo+ID4gKyAgICBwcmludCB2aXJ0Y29uZi5nZXRfdmlydF9jb25maWcoKQ0K PiA+IGRpZmYgLS1naXQgYS9mcmFtZXdvcmsvc3NoX2Nvbm5lY3Rpb24ucHkNCj4gYi9mcmFtZXdv cmsvc3NoX2Nvbm5lY3Rpb24ucHkNCj4gPiBpbmRleCAxOGE2NTE3Li43Mjg2YjE0IDEwMDY0NA0K PiA+IC0tLSBhL2ZyYW1ld29yay9zc2hfY29ubmVjdGlvbi5weQ0KPiA+ICsrKyBiL2ZyYW1ld29y ay9zc2hfY29ubmVjdGlvbi5weQ0KPiA+IEBAIC02Miw2ICs2MiwxMSBAQCBjbGFzcyBTU0hDb25u ZWN0aW9uKG9iamVjdCk6DQo+ID4gICAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcob3V0KQ0KPiA+ ICAgICAgICAgIHJldHVybiBvdXQNCj4gPg0KPiA+ICsgICAgZGVmIGdldF9zZXNzaW9uX2JlZm9y ZShzZWxmLCB0aW1lb3V0PTE1KToNCj4gPiArICAgICAgICBvdXQgPSBzZWxmLnNlc3Npb24uZ2V0 X3Nlc3Npb25fYmVmb3JlKHRpbWVvdXQpDQo+ID4gKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWco b3V0KQ0KPiA+ICsgICAgICAgIHJldHVybiBvdXQNCj4gPiArDQo+IA0KPiBJJ3ZlIHNlbnQgb3V0 IHRoaXMgcGF0Y2gsIHBsZWFzZSBtYWtlIHN1cmUgdGhlcmUncyBubyBnYXAgdGhlcmUuDQo+IFlv dSdkIGJldHRlciByZW1vdmUgdGhvc2UgZnJvbSB5b3VyIHBhdGNoIHdvcmsuDQo+IA0KDQpBYm91 dCB0aGlzLCBJIGhhdmUgY2hlY2tlZCBpdCwgeWVzLCB5b3UgaGF2ZSBzZW50IGl0LCBJIHdpbGwg cmVtb3ZlIGl0DQpmcm9tIG15IHBhdGNoIHdvcmsuDQoNCj4gPiAgICAgIGRlZiBjbG9zZShzZWxm KToNCj4gPiAgICAgICAgICBzZWxmLnNlc3Npb24uY2xvc2UoKQ0KPiA+DQo+ID4gZGlmZiAtLWdp dCBhL2ZyYW1ld29yay9zc2hfcGV4cGVjdC5weSBiL2ZyYW1ld29yay9zc2hfcGV4cGVjdC5weQ0K PiA+IGluZGV4IDczNWRmNDQuLjQxOTMwMjAgMTAwNjQ0DQo+ID4gLS0tIGEvZnJhbWV3b3JrL3Nz aF9wZXhwZWN0LnB5DQo+ID4gKysrIGIvZnJhbWV3b3JrL3NzaF9wZXhwZWN0LnB5DQo+ID4gQEAg LTIsNyArMiw4IEBAIGltcG9ydCB0aW1lDQo+ID4gIGltcG9ydCBwZXhwZWN0DQo+ID4gIGltcG9y dCBweHNzaA0KPiA+ICBmcm9tIGRlYnVnZ2VyIGltcG9ydCBpZ25vcmVfa2V5aW50ciwgYXdhcmVf a2V5aW50cg0KPiA+IC1mcm9tIGV4Y2VwdGlvbiBpbXBvcnQgVGltZW91dEV4Y2VwdGlvbiwgU1NI Q29ubmVjdGlvbkV4Y2VwdGlvbg0KPiA+ICtmcm9tIGV4Y2VwdGlvbiBpbXBvcnQgVGltZW91dEV4 Y2VwdGlvbiwgU1NIQ29ubmVjdGlvbkV4Y2VwdGlvbiwNCj4gPiBTU0hTZXNzaW9uRGVhZEV4Y2Vw dGlvbg0KPiA+ICtmcm9tIHV0aWxzIGltcG9ydCBSRUQsIEdSRUVODQo+ID4NCj4gPiAgIiIiDQo+ ID4gIE1vZHVsZSBoYW5kbGUgc3NoIHNlc3Npb25zIGJldHdlZW4gdGVzdGVyIGFuZCBEVVQuDQo+ ID4gQEAgLTE0LDE2ICsxNSwyOCBAQCBBc2xvIHN1cHBvcnQgdHJhbnNmZXIgZmlsZXMgdG8gdGVz dGVyIG9yIERVVC4NCj4gPiAgY2xhc3MgU1NIUGV4cGVjdChvYmplY3QpOg0KPiA+DQo+ID4gICAg ICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgdXNlcm5hbWUsIHBhc3N3b3JkKToNCj4gPiAtICAg ICAgICBzZWxmLm1hZ2ljX3Byb21wdCA9ICJbTUFHSUMgUFJPTVBUXSINCj4gPiArICAgICAgICBz ZWxmLm1hZ2ljX3Byb21wdCA9ICJNQUdJQyBQUk9NUFQiDQo+ID4gICAgICAgICAgdHJ5Og0KPiA+ ICAgICAgICAgICAgICBzZWxmLnNlc3Npb24gPSBweHNzaC5weHNzaCgpDQo+ID4gLSAgICAgICAg ICAgIHNlbGYudXNlcm5hbWUgPSB1c2VybmFtZQ0KPiA+ICAgICAgICAgICAgICBzZWxmLmhvc3Qg PSBob3N0DQo+ID4gKyAgICAgICAgICAgIHNlbGYudXNlcm5hbWUgPSB1c2VybmFtZQ0KPiA+ICAg ICAgICAgICAgICBzZWxmLnBhc3N3b3JkID0gcGFzc3dvcmQNCj4gPiAtICAgICAgICAgICAgc2Vs Zi5zZXNzaW9uLmxvZ2luKHNlbGYuaG9zdCwgc2VsZi51c2VybmFtZSwNCj4gPiAtICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFzc3dvcmQsDQo+IG9yaWdpbmFsX3Byb21wdD0n WyQjPl0nKQ0KPiA+ICsgICAgICAgICAgICBpZiAnOicgaW4gaG9zdDoNCj4gPiArICAgICAgICAg ICAgICAgIHNlbGYuaXAgPSBob3N0LnNwbGl0KCc6JylbMF0NCj4gPiArICAgICAgICAgICAgICAg IHNlbGYucG9ydCA9IGludChob3N0LnNwbGl0KCc6JylbMV0pDQo+ID4gKyAgICAgICAgICAgICAg ICBzZWxmLnNlc3Npb24ubG9naW4oc2VsZi5pcCwgc2VsZi51c2VybmFtZSwNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhc3N3b3JkLA0KPiBvcmlnaW5hbF9w cm9tcHQ9J1skIz5dJywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw b3J0PXNlbGYucG9ydCwgbG9naW5fdGltZW91dD0yMCkNCj4gPiArICAgICAgICAgICAgZWxzZToN Cj4gPiArICAgICAgICAgICAgICAgIHNlbGYuc2Vzc2lvbi5sb2dpbihzZWxmLmhvc3QsIHNlbGYu dXNlcm5hbWUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5w YXNzd29yZCwNCj4gb3JpZ2luYWxfcHJvbXB0PSdbJCM+XScpDQo+ID4gICAgICAgICAgICAgIHNl bGYuc2VuZF9leHBlY3QoJ3N0dHkgLWVjaG8nLCAnIyAnLCB0aW1lb3V0PTIpDQo+ID4gLSAgICAg ICAgZXhjZXB0IEV4Y2VwdGlvbjoNCj4gPiArICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOg0K PiA+ICsgICAgICAgICAgICBwcmludCBSRUQoZSkNCj4gPiArICAgICAgICAgICAgaWYgZ2V0YXR0 cihzZWxmLCAncG9ydCcsIE5vbmUpOg0KPiA+ICsgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbiA9 ICJcblN1Z2dlc3Npb246IENoZWNrIGlmIHRoZSBmaXJld2FyZSBvbg0KPiA+IFsgJXMgXSAiICUg XA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIHNlbGYuaXAgKyAiaXMgc3RvcGVkXG4iDQo+ID4g KyAgICAgICAgICAgICAgICBwcmludCBHUkVFTihzdWdnZXN0aW9uKQ0KPiA+ICAgICAgICAgICAg ICByYWlzZSBTU0hDb25uZWN0aW9uRXhjZXB0aW9uKGhvc3QpDQo+ID4NCj4gPiAgICAgIGRlZiBp bml0X2xvZyhzZWxmLCBsb2dnZXIsIG5hbWUpOg0KPiA+IEBAIC0zMyw3ICs0Niw3IEBAIGNsYXNz IFNTSFBleHBlY3Qob2JqZWN0KToNCj4gPg0KPiA+ICAgICAgZGVmIHNlbmRfZXhwZWN0X2Jhc2Uo c2VsZiwgY29tbWFuZCwgZXhwZWN0ZWQsIHRpbWVvdXQ9MTUpOg0KPiA+ICAgICAgICAgIGlnbm9y ZV9rZXlpbnRyKCkNCj4gPiAtICAgICAgICBzZWxmLl9fZmx1c2goKSAjIGNsZWFyIGJ1ZmZlcg0K PiA+ICsgICAgICAgIHNlbGYuX19mbHVzaCgpICAjIGNsZWFyIGJ1ZmZlcg0KPiA+ICAgICAgICAg IHNlbGYuc2Vzc2lvbi5QUk9NUFQgPSBleHBlY3RlZA0KPiA+ICAgICAgICAgIHNlbGYuX19zZW5k bGluZShjb21tYW5kKQ0KPiA+ICAgICAgICAgIHNlbGYuX19wcm9tcHQoY29tbWFuZCwgdGltZW91 dCkNCj4gPiBAQCAtNDUsNyArNTgsNyBAQCBjbGFzcyBTU0hQZXhwZWN0KG9iamVjdCk6DQo+ID4g ICAgICBkZWYgc2VuZF9leHBlY3Qoc2VsZiwgY29tbWFuZCwgZXhwZWN0ZWQsIHRpbWVvdXQ9MTUs DQo+IHZlcmlmeT1GYWxzZSk6DQo+ID4gICAgICAgICAgcmV0ID0gc2VsZi5zZW5kX2V4cGVjdF9i YXNlKGNvbW1hbmQsIGV4cGVjdGVkLCB0aW1lb3V0KQ0KPiA+ICAgICAgICAgIGlmIHZlcmlmeToN Cj4gPiAtICAgICAgICAgICAgcmV0X3N0YXR1cyA9IHNlbGYuc2VuZF9leHBlY3RfYmFzZSgiZWNo byAkPyIsIGV4cGVjdGVkKQ0KPiA+ICsgICAgICAgICAgICByZXRfc3RhdHVzID0gc2VsZi5zZW5k X2V4cGVjdF9iYXNlKCJlY2hvICQ/IiwgZXhwZWN0ZWQsDQo+ID4gdGltZW91dCkNCj4gPiAgICAg ICAgICAgICAgaWYgbm90IGludChyZXRfc3RhdHVzKToNCj4gPiAgICAgICAgICAgICAgICAgIHJl dHVybiByZXQNCj4gPiAgICAgICAgICAgICAgZWxzZToNCj4gPiBAQCAtNTQsMjEgKzY3LDQ0IEBA IGNsYXNzIFNTSFBleHBlY3Qob2JqZWN0KToNCj4gPiAgICAgICAgICBlbHNlOg0KPiA+ICAgICAg ICAgICAgICByZXR1cm4gcmV0DQo+ID4NCj4gPiAtICAgIGRlZiBfX2ZsdXNoKHNlbGYpOg0KPiA+ ICsgICAgZGVmIGdldF9zZXNzaW9uX2JlZm9yZShzZWxmLCB0aW1lb3V0PTE1KToNCj4gPiArICAg ICAgICAiIiINCj4gPiArICAgICAgICBHZXQgYWxsIG91dHB1dCBiZWZvcmUgdGltZW91dA0KPiA+ ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIGlnbm9yZV9rZXlpbnRyKCkNCj4gPiAgICAgICAg ICBzZWxmLnNlc3Npb24uUFJPTVBUID0gc2VsZi5tYWdpY19wcm9tcHQNCj4gPiAtICAgICAgICBz ZWxmLnNlc3Npb24ucHJvbXB0KDAuMSkNCj4gPiArICAgICAgICB0cnk6DQo+ID4gKyAgICAgICAg ICAgIHNlbGYuc2Vzc2lvbi5wcm9tcHQodGltZW91dCkNCj4gPiArICAgICAgICBleGNlcHQgRXhj ZXB0aW9uIGFzIGU6DQo+ID4gKyAgICAgICAgICAgIHBhc3MNCj4gPiArDQo+ID4gKyAgICAgICAg YXdhcmVfa2V5aW50cigpDQo+ID4gKyAgICAgICAgYmVmb3JlID0gc2VsZi5nZXRfb3V0cHV0X2Jl Zm9yZSgpDQo+ID4gKyAgICAgICAgc2VsZi5fX2ZsdXNoKCkNCj4gPiArICAgICAgICByZXR1cm4g YmVmb3JlDQo+ID4gKw0KPiA+ICsgICAgZGVmIF9fZmx1c2goc2VsZik6DQo+ID4gKyAgICAgICAg IiIiDQo+ID4gKyAgICAgICAgQ2xlYXIgYWxsIHNlc3Npb24gYnVmZmVyDQo+ID4gKyAgICAgICAg IiIiDQo+ID4gKyAgICAgICAgc2VsZi5zZXNzaW9uLmJ1ZmZlciA9ICIiDQo+ID4gKyAgICAgICAg c2VsZi5zZXNzaW9uLmJlZm9yZSA9ICIiDQo+ID4NCj4gPiAgICAgIGRlZiBfX3Byb21wdChzZWxm LCBjb21tYW5kLCB0aW1lb3V0KToNCj4gPiAgICAgICAgICBpZiBub3Qgc2VsZi5zZXNzaW9uLnBy b21wdCh0aW1lb3V0KToNCj4gPiAgICAgICAgICAgICAgcmFpc2UgVGltZW91dEV4Y2VwdGlvbihj b21tYW5kLCBzZWxmLmdldF9vdXRwdXRfYWxsKCkpDQo+ID4NCj4gPiAgICAgIGRlZiBfX3NlbmRs aW5lKHNlbGYsIGNvbW1hbmQpOg0KPiA+ICsgICAgICAgIGlmIG5vdCBzZWxmLmlzYWxpdmUoKToN Cj4gPiArICAgICAgICAgICAgcmFpc2UgU1NIU2Vzc2lvbkRlYWRFeGNlcHRpb24oc2VsZi5ob3N0 KQ0KPiA+ICAgICAgICAgIGlmIGxlbihjb21tYW5kKSA9PSAyIGFuZCBjb21tYW5kLnN0YXJ0c3dp dGgoJ14nKToNCj4gPiAgICAgICAgICAgICAgc2VsZi5zZXNzaW9uLnNlbmRjb250cm9sKGNvbW1h bmRbMV0pDQo+ID4gICAgICAgICAgZWxzZToNCj4gPiAgICAgICAgICAgICAgc2VsZi5zZXNzaW9u LnNlbmRsaW5lKGNvbW1hbmQpDQo+ID4NCj4gPiAgICAgIGRlZiBnZXRfb3V0cHV0X2JlZm9yZShz ZWxmKToNCj4gPiArICAgICAgICBpZiBub3Qgc2VsZi5pc2FsaXZlKCk6DQo+ID4gKyAgICAgICAg ICAgIHJhaXNlIFNTSFNlc3Npb25EZWFkRXhjZXB0aW9uKHNlbGYuaG9zdCkNCj4gPiAgICAgICAg ICBzZWxmLnNlc3Npb24uZmx1c2goKQ0KPiA+ICAgICAgICAgIGJlZm9yZSA9IHNlbGYuc2Vzc2lv bi5iZWZvcmUucnNwbGl0KCdcclxuJywgMSkNCj4gPiAgICAgICAgICBpZiBiZWZvcmVbMF0gPT0g IltQRVhQRUNUXSI6DQo+ID4gQEAgLTEwMyw3ICsxMzksMTIgQEAgY2xhc3MgU1NIUGV4cGVjdChv YmplY3QpOg0KPiA+ICAgICAgICAgICIiIg0KPiA+ICAgICAgICAgIFNlbmRzIGEgbG9jYWwgZmls ZSB0byBhIHJlbW90ZSBwbGFjZS4NCj4gPiAgICAgICAgICAiIiINCj4gPiAtICAgICAgICBjb21t YW5kID0gJ3NjcCB7MH0gezF9QHsyfTp7M30nLmZvcm1hdChzcmMsIHNlbGYudXNlcm5hbWUsDQo+ ID4gc2VsZi5ob3N0LCBkc3QpDQo+ID4gKyAgICAgICAgaWYgJzonIGluIHNlbGYuaG9zdDoNCj4g PiArICAgICAgICAgICAgY29tbWFuZCA9ICdzY3AgLVAgezB9IC1vDQo+IE5vSG9zdEF1dGhlbnRp Y2F0aW9uRm9yTG9jYWxob3N0PXllcw0KPiA+IHsxfSB7Mn1AezN9Ons0fScuZm9ybWF0KA0KPiA+ ICsgICAgICAgICAgICAgICAgc3RyKHNlbGYucG9ydCksIHNyYywgc2VsZi51c2VybmFtZSwgc2Vs Zi5pcCwgZHN0KQ0KPiA+ICsgICAgICAgIGVsc2U6DQo+ID4gKyAgICAgICAgICAgIGNvbW1hbmQg PSAnc2NwIHswfSB7MX1AezJ9OnszfScuZm9ybWF0KA0KPiA+ICsgICAgICAgICAgICAgICAgc3Jj LCBzZWxmLnVzZXJuYW1lLCBzZWxmLmhvc3QsIGRzdCkNCj4gPiAgICAgICAgICBpZiBwYXNzd29y ZCA9PSAnJzoNCj4gPiAgICAgICAgICAgICAgc2VsZi5fc3Bhd25fc2NwKGNvbW1hbmQsIHNlbGYu cGFzc3dvcmQpDQo+ID4gICAgICAgICAgZWxzZToNCj4gPiBkaWZmIC0tZ2l0IGEvZnJhbWV3b3Jr L3V0aWxzLnB5IGIvZnJhbWV3b3JrL3V0aWxzLnB5DQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4gPiBpbmRleCAwMDAwMDAwLi41N2ViOTg4DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBi L2ZyYW1ld29yay91dGlscy5weQ0KPiA+IEBAIC0wLDAgKzEsNzcgQEANCj4gPiArIyBCU0QgTElD RU5TRQ0KPiA+ICsjDQo+ID4gKyMgQ29weXJpZ2h0KGMpIDIwMTAtMjAxNCBJbnRlbCBDb3Jwb3Jh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gPiArIyBBbGwgcmlnaHRzIHJlc2VydmVkLg0K PiA+ICsjDQo+ID4gKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQo+ID4gKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0 dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zDQo+ID4gKyMgYXJlIG1l dDoNCj4gPiArIw0KPiA+ICsjICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KPiA+ICsjICAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQo+ID4gKyMgICAq IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUN Cj4gY29weXJpZ2h0DQo+ID4gKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcg0KPiBpbg0KPiA+ICsjICAgICB0aGUgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlDQo+ID4gKyMg ICAgIGRpc3RyaWJ1dGlvbi4NCj4gPiArIyAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBD b3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cw0KPiA+ICsjICAgICBjb250cmlidXRvcnMg bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzDQo+IGRlcml2ZWQNCj4g PiArIyAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl biBwZXJtaXNzaW9uLg0KPiA+ICsjDQo+ID4gKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EDQo+IENPTlRSSUJVVE9SUw0KPiA+ICsjICJBUyBJ UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UDQo+ID4gKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MNCj4gRk9SDQo+ID4gKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQ0KPiBDT1BZUklHSFQNCj4gPiAr IyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwNCj4gSU5DSURFTlRBTCwNCj4gPiArIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UDQo+ID4gKyMgTElNSVRFRCBUTywgUFJP Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRg0KPiBVU0Us DQo+ID4gKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF VkVSIENBVVNFRCBBTkQgT04NCj4gQU5ZDQo+ID4gKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1INCj4gVE9SVA0KPiA+ICsjIChJ TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg T0YgVEhFDQo+IFVTRQ0KPiA+ICsjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSA0KPiBEQU1BR0UuDQo+ID4gKw0KPiA+ICtpbXBvcnQg anNvbiAgICAgICAgICMganNvbiBmb3JtYXQNCj4gPiAraW1wb3J0IHJlDQo+ID4gKw0KPiA+ICsN Cj4gPiArZGVmIFJFRCh0ZXh0KToNCj4gPiArICAgIHJldHVybiAiXHgxQlsiICsgIjMxOzFtIiAr IHN0cih0ZXh0KSArICJceDFCWyIgKyAiMG0iDQo+ID4gKw0KPiA+ICsNCj4gPiArZGVmIEJMVUUo dGV4dCk6DQo+ID4gKyAgICByZXR1cm4gIlx4MUJbIiArICIzNjsxbSIgKyBzdHIodGV4dCkgKyAi XHgxQlsiICsgIjBtIg0KPiA+ICsNCj4gPiArDQo+ID4gK2RlZiBHUkVFTih0ZXh0KToNCj4gPiAr ICAgIHJldHVybiAiXHgxQlsiICsgIjMyOzFtIiArIHN0cih0ZXh0KSArICJceDFCWyIgKyAiMG0i DQo+ID4gKw0KPiA+ICsNCj4gPiArZGVmIHBwcmludChzb21lX2RpY3QpOg0KPiA+ICsgICAgIiIi DQo+ID4gKyAgICBQcmludCBKU09OIGZvcm1hdCBkaWN0aW9uYXJ5IG9iamVjdC4NCj4gPiArICAg ICIiIg0KPiA+ICsgICAgcmV0dXJuIGpzb24uZHVtcHMoc29tZV9kaWN0LCBzb3J0X2tleXM9VHJ1 ZSwgaW5kZW50PTQpDQo+ID4gKw0KPiA+ICsNCj4gPiArZGVmIHJlZ2V4cChzLCB0b19tYXRjaCwg YWxsU3RyaW5nPUZhbHNlKToNCj4gPiArICAgICIiIg0KPiA+ICsgICAgRW5zdXJlIHRoYXQgdGhl IHJlIGB0b19tYXRjaCcgb25seSBoYXMgb25lIGdyb3VwIGluIGl0Lg0KPiA+ICsgICAgIiIiDQo+ ID4gKw0KPiA+ICsgICAgc2Nhbm5lciA9IHJlLmNvbXBpbGUodG9fbWF0Y2gsIHJlLkRPVEFMTCkN Cj4gPiArICAgIGlmIGFsbFN0cmluZzoNCj4gPiArICAgICAgICByZXR1cm4gc2Nhbm5lci5maW5k YWxsKHMpDQo+ID4gKyAgICBtID0gc2Nhbm5lci5zZWFyY2gocykNCj4gPiArICAgIGlmIG0gaXMg Tm9uZToNCj4gPiArICAgICAgICBwcmludCBSRUQoIkZhaWxlZCB0byBtYXRjaCAiICsgdG9fbWF0 Y2ggKyAiIGluIHRoZSBzdHJpbmcgIg0KPiArIHMpDQo+ID4gKyAgICAgICAgcmV0dXJuIE5vbmUN Cj4gPiArICAgIHJldHVybiBtLmdyb3VwKDEpDQo+ID4gKw0KPiA+ICsNCj4gPiArZGVmIGdldF9v YmpfZnVuY3Mob2JqLCBmdW5jX25hbWVfcmVnZXgpOg0KPiA+ICsgICAgIiIiDQo+ID4gKyAgICBS ZXR1cm4gZnVuY3Rpb24gbGlzdCB3aGljaCBuYW1lIG1hdGNoZWQgcmVnZXguDQo+ID4gKyAgICAi IiINCj4gPiArICAgIGZvciBmdW5jX25hbWUgaW4gZGlyKG9iaik6DQo+ID4gKyAgICAgICAgZnVu YyA9IGdldGF0dHIob2JqLCBmdW5jX25hbWUpDQo+ID4gKyAgICAgICAgaWYgY2FsbGFibGUoZnVu YykgYW5kIHJlLm1hdGNoKGZ1bmNfbmFtZV9yZWdleCwNCj4gZnVuYy5fX25hbWVfXyk6DQo+ID4g KyAgICAgICAgICAgIHlpZWxkIGZ1bmMNCj4gPiAtLQ0KPiBUaGlzIGZ1bmN0aW9uIG5vdyB1c2Vk IHRvIGZyZWUgcmVzb3VyY2Ugb2YgdmlydHVhbGl6YXRpb24gbWFjaGluZSwgSQ0KPiB0aGluayBp dCdzIGJldHRlciB0byBjYWxsIGZyZWUgZnVuY3Rpb25zIGRpcmVjdGx5Lg0KPiBNYXliZSB0aGVy ZSB3aWxsIGJlIGRlcGVuZGVuY3kgb2YgdGhlc2UgZnJlZSBmdW5jdGlvbnMuIFdoYXQncyB5b3Vy DQo+IGlkZWEgYWJvdXQgaXQ/DQoNCk5vLCBub3cgaXQgaXMganVzdCB1c2VkIG9uIHRoZSBtb2R1 bGUgb2YgdmlydHVhbCByZXNvdXJjZS4NCkJ1dCBJIHRoaW5rIHRoaXMgaXMgY29tbW9uIGZ1bmN0 aW9uLCBpdCBjYW4gYmUgdXNlZCBpbiBvdGhlciBtb2R1bGUgaWYgdGhlcmUgDQppcyBhIGRlbWFu ZC4gDQoNCj4gDQo+ID4gMS45LjANCg0K