From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id 6355F9A8F for ; Tue, 19 May 2015 02:38:51 +0200 (CEST) Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga102.jf.intel.com with ESMTP; 18 May 2015 17:38:50 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.13,456,1427785200"; d="scan'208";a="573370673" Received: from pgsmsx105.gar.corp.intel.com ([10.221.44.96]) by orsmga003.jf.intel.com with ESMTP; 18 May 2015 17:38:49 -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; Tue, 19 May 2015 08:38:48 +0800 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.23]) by SHSMSX152.ccr.corp.intel.com ([169.254.6.50]) with mapi id 14.03.0224.002; Tue, 19 May 2015 08:38:46 +0800 From: "Liu, Yong" To: "Jiajia, SunX" , "dts@dpdk.org" Thread-Topic: =?utf-8?B?W2R0c10gW+KAmGR0cy12MeKAmSAyLzldIE9wdGltaXplIHNzaCBjb25uZWN0?= =?utf-8?Q?ion?= Thread-Index: AQHQkSiddzNGtZ1wrkOOOAuOBaBjoZ2BSi6A//+J/ACAAaEIoA== Date: Tue, 19 May 2015 00:38:46 +0000 Message-ID: <86228AFD5BCD8E4EBFD2B90117B5E81E10DE4F0B@SHSMSX103.ccr.corp.intel.com> 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: Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: 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: Tue, 19 May 2015 00:38:52 -0000 SmlhamlhLCBhYm91dCBnZXRfb2JqX2Z1bmNzLCBpdOKAmXMgY29tbW9uIGZ1bmN0aW9uIGFuZCBj YW4gYmUgaW4gdXRpbHMucHkuIFdoYXQgSSBtZWFuIGlzIHRoYXQgaW4gZnJlZV9hbGxfcmVzb3Vy Y2UsIGRvIG5vdCB1c2UgZ2V0X29ial9mdW5jcyB0byBleHRyYWN0IGFsbCBmcmVlIGZ1bmN0aW9u cy4NCg0KSXQncyB1bmNsZWFyIGFib3V0IHdoYXQgbmVlZCB0byBiZSBmcmVlZCBhbmQgbWF5YmUg d2lsbCBiZSBzZXF1ZW5jZSBpc3N1ZS4NCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0K PiBGcm9tOiBKaWFqaWEsIFN1blgNCj4gU2VudDogTW9uZGF5LCBNYXkgMTgsIDIwMTUgMzo0MyBQ TQ0KPiBUbzogTGl1LCBZb25nOyBkdHNAZHBkay5vcmcNCj4gU3ViamVjdDogUkU6IFtkdHNdIFvi gJhkdHMtdjHigJkgMi85XSBPcHRpbWl6ZSBzc2ggY29ubmVjdGlvbg0KPiANCj4gSGkgWW9uZywN Cj4gDQo+IEkgaGF2ZSByZXBsaWVkIHRoZSBjb21tZW50cyBhcyBiZWxvdy4NCj4gDQo+ID4gLS0t LS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiBGcm9tOiBMaXUsIFlvbmcNCj4gPiBTZW50OiBN b25kYXksIE1heSAxOCwgMjAxNSAzOjA2IFBNDQo+ID4gVG86IEppYWppYSwgU3VuWDsgZHRzQGRw ZGsub3JnDQo+ID4gU3ViamVjdDogUkU6IFtkdHNdIFvigJhkdHMtdjHigJkgMi85XSBPcHRpbWl6 ZSBzc2ggY29ubmVjdGlvbg0KPiA+DQo+ID4gSmlhamlhLA0KPiA+IFBsZWFzZSBzZWUgbXkgY29t bWVudHMgYmVsb3cuDQo+ID4NCj4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4g PiBGcm9tOiBkdHMgW21haWx0bzpkdHMtYm91bmNlc0BkcGRrLm9yZ10gT24gQmVoYWxmIE9mIHNq aWFqaWF4DQo+ID4gPiBTZW50OiBNb25kYXksIE1heSAxOCwgMjAxNSAxOjA3IFBNDQo+ID4gPiBU bzogZHRzQGRwZGsub3JnDQo+ID4gPiBTdWJqZWN0OiBbZHRzXSBb4oCYZHRzLXYx4oCZIDIvOV0g T3B0aW1pemUgc3NoIGNvbm5lY3Rpb24NCj4gPiA+DQo+ID4gPiBPcHRpbWl6ZSBjb25maWd1cmUg cGFyc2UNCj4gPiA+DQo+ID4gPiBNb3ZlIHNvbWUgZnVuY3Rpb25zIGluIGR0cyB0byBhbiBjb21t b24gdXRpbHMgbW9kdWxlDQo+ID4gPg0KPiA+ID4gU2lnbmVkLW9mZi1ieTogc2ppYWppYXggPHN1 bnguamlhamlhQGludGVsLmNvbT4NCj4gPiA+IC0tLQ0KPiA+ID4gIGZyYW1ld29yay9jb25maWcu cHkgICAgICAgICB8IDE3MQ0KPiA+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr LS0tLQ0KPiA+ID4gLS0tLS0NCj4gPiA+ICBmcmFtZXdvcmsvc3NoX2Nvbm5lY3Rpb24ucHkgfCAg IDUgKysNCj4gPiA+ICBmcmFtZXdvcmsvc3NoX3BleHBlY3QucHkgICAgfCAgNjMgKysrKysrKysr KysrKy0tLQ0KPiA+ID4gIGZyYW1ld29yay91dGlscy5weSAgICAgICAgICB8ICA3NyArKysrKysr KysrKysrKysrKysrKw0KPiA+ID4gIDQgZmlsZXMgY2hhbmdlZCwgMjcwIGluc2VydGlvbnMoKyks IDQ2IGRlbGV0aW9ucygtKQ0KPiA+ID4gIG1vZGUgY2hhbmdlIDEwMDc1NSA9PiAxMDA2NDQgZnJh bWV3b3JrL2NvbmZpZy5weQ0KPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBmcmFtZXdvcmsvdXRp bHMucHkNCj4gPiA+DQo+ID4gPiBkaWZmIC0tZ2l0IGEvZnJhbWV3b3JrL2NvbmZpZy5weSBiL2Zy YW1ld29yay9jb25maWcucHkNCj4gPiA+IG9sZCBtb2RlIDEwMDc1NQ0KPiA+ID4gbmV3IG1vZGUg MTAwNjQ0DQo+ID4gPiBpbmRleCBkMjU0OGU4Li45MjdjODQ2DQo+ID4gPiAtLS0gYS9mcmFtZXdv cmsvY29uZmlnLnB5DQo+ID4gPiArKysgYi9mcmFtZXdvcmsvY29uZmlnLnB5DQo+ID4gPiBAQCAt MzcsNDUgKzM3LDEzMyBAQCBpbXBvcnQgcmUNCj4gPiA+ICBpbXBvcnQgQ29uZmlnUGFyc2VyICAj IGNvbmZpZyBwYXJzZSBtb2R1bGUNCj4gPiA+ICBpbXBvcnQgYXJncGFyc2UgICAgICAjIHByYXNl IGFyZ3VtZW50cyBtb2R1bGUNCj4gPiA+DQo+ID4gPiAtcG9ydGNvbmYgPSAiY29uZi9wb3J0cy5j ZmciDQo+ID4gPiAtY3JiY29uZiA9ICJjb25mL2NyYnMuY2ZnIg0KPiA+ID4gK1BPUlRDT05GID0g ImNvbmYvcG9ydHMuY2ZnIg0KPiA+ID4gK0NSQkNPTkYgPSAiY29uZi9jcmJzLmNmZyINCj4gPiA+ ICtWSVJUQ09ORiA9ICJjb25mL3ZpcnRfZ2xvYmFsLmNmZyINCj4gPiA+DQo+ID4gPg0KPiA+ID4g IGNsYXNzIFVzZXJDb25mKCk6DQo+ID4gPg0KPiA+ID4gLSAgICBkZWYgX19pbml0X18oc2VsZiwg cG9ydF9jb25mPXBvcnRjb25mLCBjcmJfY29uZj1jcmJjb25mKToNCj4gPiA+IC0gICAgICAgIHNl bGYucG9ydF9jb25maWcgPSBwb3J0X2NvbmYNCj4gPiA+IC0gICAgICAgIHNlbGYuY3JiX2NvbmZp ZyA9IGNyYl9jb25mDQo+ID4gPiArICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25maWcpOg0KPiA+ ID4gKyAgICAgICAgc2VsZi5jb25mID0gQ29uZmlnUGFyc2VyLlNhZmVDb25maWdQYXJzZXIoKQ0K PiA+ID4gKyAgICAgICAgbG9hZF9maWxlcyA9IHNlbGYuY29uZi5yZWFkKGNvbmZpZykNCj4gPiA+ ICsgICAgICAgIGlmIGxvYWRfZmlsZXMgPT0gW106DQo+ID4gPiArICAgICAgICAgICAgcHJpbnQg IkZBSUxFRCBMT0FESU5HICVzISEhIiAlIGNvbmZpZw0KPiA+ID4gKyAgICAgICAgICAgIHNlbGYu Y29uZiA9IE5vbmUNCj4gPiA+ICsgICAgICAgICAgICByYWlzZQ0KPiA+ID4gKw0KPiA+DQo+ID4g VGhlcmUncyBuZWVkIG9uZSBzcGVjaWFsIGV4Y2VwdGlvbiBmb3IgY29uZmlndXJhdGlvbiBwYXJz ZWQgZmFpbHVyZS4NCj4gDQo+IFllcywgSSB0aGluayBpdCBpcyBnb29kIHRvIGRvIHRoYXQuDQo+ IA0KPiA+DQo+ID4gPiArICAgIGRlZiBnZXRfc2VjdGlvbnMoc2VsZik6DQo+ID4gPiArICAgICAg ICBpZiBzZWxmLmNvbmYgaXMgTm9uZToNCj4gPiA+ICsgICAgICAgICAgICByZXR1cm4gTm9uZQ0K PiA+ID4gKw0KPiA+ID4gKyAgICAgICAgcmV0dXJuIHNlbGYuY29uZi5zZWN0aW9ucygpDQo+ID4g PiArDQo+ID4gPiArICAgIGRlZiBsb2FkX3NlY3Rpb24oc2VsZiwgc2VjdGlvbik6DQo+ID4gPiAr ICAgICAgICBpZiBzZWxmLmNvbmYgaXMgTm9uZToNCj4gPiA+ICsgICAgICAgICAgICByZXR1cm4g Tm9uZQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgaXRlbXMgPSBOb25lDQo+ID4gPiArICAgICAg ICBmb3IgY29uZl9zZWN0IGluIHNlbGYuY29uZi5zZWN0aW9ucygpOg0KPiA+ID4gKyAgICAgICAg ICAgIGlmIGNvbmZfc2VjdCA9PSBzZWN0aW9uOg0KPiA+ID4gKyAgICAgICAgICAgICAgICBpdGVt cyA9IHNlbGYuY29uZi5pdGVtcyhzZWN0aW9uKQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgcmV0 dXJuIGl0ZW1zDQo+ID4gPiArDQo+ID4gPiArICAgIGRlZiBsb2FkX2NvbmZpZyhzZWxmLCBpdGVt KToNCj4gPiA+ICsgICAgICAgIGNvbmZzID0gW2NvbmYuc3RyaXAoKSBmb3IgY29uZiBpbiBpdGVt LnNwbGl0KCc7JyldDQo+ID4gPiArICAgICAgICBpZiAnJyBpbiBjb25mczoNCj4gPiA+ICsgICAg ICAgICAgICBjb25mcy5yZW1vdmUoJycpDQo+ID4gPiArICAgICAgICByZXR1cm4gY29uZnMNCj4g PiA+ICsNCj4gPiA+ICsgICAgZGVmIGxvYWRfcGFyYW0oc2VsZiwgY29uZik6DQo+ID4gPiArICAg ICAgICBwYXJhbURpY3QgPSBkaWN0KCkNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgIGZvciBwYXJh bSBpbiBjb25mLnNwbGl0KCcsJyk6DQo+ID4gPiArICAgICAgICAgICAgKGtleSwgXywgdmFsdWUp ID0gcGFyYW0ucGFydGl0aW9uKCc9JykNCj4gPiA+ICsgICAgICAgICAgICBwYXJhbURpY3Rba2V5 XSA9IHZhbHVlDQo+ID4gPiArICAgICAgICByZXR1cm4gcGFyYW1EaWN0DQo+ID4gPiArDQo+ID4g PiArDQo+ID4gPiArY2xhc3MgVmlydENvbmYoVXNlckNvbmYpOg0KPiA+ID4gKw0KPiA+ID4gKyAg ICBkZWYgX19pbml0X18oc2VsZiwgdmlydF9jb25mPVZJUlRDT05GKToNCj4gPiA+ICsgICAgICAg IHNlbGYuY29uZmlnX2ZpbGUgPSB2aXJ0X2NvbmYNCj4gPiA+ICsgICAgICAgIHNlbGYudmlydF9j ZmcgPSB7fQ0KPiA+ID4gKyAgICAgICAgdHJ5Og0KPiA+ID4gKyAgICAgICAgICAgIHNlbGYudmly dF9jb25mID0gVXNlckNvbmYoc2VsZi5jb25maWdfZmlsZSkNCj4gPiA+ICsgICAgICAgIGV4Y2Vw dCBFeGNlcHRpb24gYXMgZToNCj4gPiA+ICsgICAgICAgICAgICBwcmludCAiRkFJTEVEIExPQURJ TkcgVklSVCBDT05GSUchISEiDQo+ID4gPiArICAgICAgICAgICAgc2VsZi52aXJ0X2NvbmYgPSBO b25lDQo+ID4gPiArDQo+ID4gVGhlcmUncyBuZWVkIG9uZSBzcGVjaWFsIGV4Y2VwdGlvbiBmb3Ig Y29uZmlndXJhdGlvbiBwYXJzZWQgZmFpbHVyZS4NCj4gDQo+IEkgd2lsbCBkbyBpdCBpbiB0aGUg bmV4dCB2ZXJzaW9uLg0KPiANCj4gPg0KPiA+ID4gKyAgICBkZWYgbG9hZF92aXJ0X2NvbmZpZyhz ZWxmLCBuYW1lKToNCj4gPiA+ICsgICAgICAgIHNlbGYudmlydF9jZmdzID0gW10NCj4gPiA+ICsN Cj4gPiA+ICsgICAgICAgIHRyeToNCj4gPiA+ICsgICAgICAgICAgICB2aXJ0X2NvbmZzID0gc2Vs Zi52aXJ0X2NvbmYubG9hZF9zZWN0aW9uKG5hbWUpDQo+ID4gPiArICAgICAgICBleGNlcHQ6DQo+ ID4gPiArICAgICAgICAgICAgcHJpbnQgIkZBSUxFRCBGSU5EIFNFQ1RJT04gJXMhISEiICUgbmFt ZQ0KPiA+ID4gKyAgICAgICAgICAgIHJldHVybg0KPiA+ID4gKw0KPiA+IEFkZCBleGNlcHRpb24g Zm9yIGxvYWQgc2VjdGlvbiBmYWlsZWQuDQo+IA0KPiBJIHdpbGwgZG8gaXQgaW4gdGhlIG5leHQg dmVyc2lvbi4NCj4gDQo+ID4NCj4gPiA+ICsgICAgICAgIGZvciB2aXJ0X2NvbmYgaW4gdmlydF9j b25mczoNCj4gPiA+ICsgICAgICAgICAgICB2aXJ0X2NmZyA9IHt9DQo+ID4gPiArICAgICAgICAg ICAgdmlydF9wYXJhbXMgPSBbXQ0KPiA+ID4gKyAgICAgICAgICAgIGtleSwgY29uZmlnID0gdmly dF9jb25mDQo+ID4gPiArICAgICAgICAgICAgY29uZnMgPSBzZWxmLnZpcnRfY29uZi5sb2FkX2Nv bmZpZyhjb25maWcpDQo+ID4gPiArICAgICAgICAgICAgZm9yIGNvbmZpZyBpbiBjb25mczoNCj4g PiA+ICsgICAgICAgICAgICAgICAgdmlydF9wYXJhbXMuYXBwZW5kKHNlbGYubG9hZF92aXJ0X3Bh cmFtKGNvbmZpZykpDQo+ID4gPiArICAgICAgICAgICAgdmlydF9jZmdba2V5XSA9IHZpcnRfcGFy YW1zDQo+ID4gPiArICAgICAgICAgICAgc2VsZi52aXJ0X2NmZ3MuYXBwZW5kKHZpcnRfY2ZnKQ0K PiA+ID4gKw0KPiA+ID4gKyAgICBkZWYgZ2V0X3ZpcnRfY29uZmlnKHNlbGYpOg0KPiA+ID4gKyAg ICAgICAgcmV0dXJuIHNlbGYudmlydF9jZmdzDQo+ID4gPiArDQo+ID4gPiArICAgIGRlZiBsb2Fk X3ZpcnRfcGFyYW0oc2VsZiwgY29uZmlnKToNCj4gPiA+ICsgICAgICAgIGNmZ19wYXJhbXMgPSBz ZWxmLnZpcnRfY29uZi5sb2FkX3BhcmFtKGNvbmZpZykNCj4gPiA+ICsgICAgICAgIHJldHVybiBj ZmdfcGFyYW1zDQo+ID4gPiArDQo+ID4gPiArDQo+ID4gPiArY2xhc3MgUG9ydENvbmYoVXNlckNv bmYpOg0KPiA+ID4gKw0KPiA+ID4gKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9jb25mPVBP UlRDT05GKToNCj4gPiA+ICsgICAgICAgIHNlbGYuY29uZmlnX2ZpbGUgPSBwb3J0X2NvbmYNCj4g PiA+ICAgICAgICAgIHNlbGYucG9ydHNfY2ZnID0ge30NCj4gPiA+ICAgICAgICAgIHNlbGYucGNp X3JlZ2V4ID0gIihbXGRhLWZdezJ9OltcZGEtZl17Mn0uXGR7MX0pJCINCj4gPiA+ICAgICAgICAg IHRyeToNCj4gPiA+IC0gICAgICAgICAgICBzZWxmLnBvcnRfY29uZiA9IENvbmZpZ1BhcnNlci5T YWZlQ29uZmlnUGFyc2VyKCkNCj4gPiA+IC0gICAgICAgICAgICBzZWxmLnBvcnRfY29uZi5yZWFk KHNlbGYucG9ydF9jb25maWcpDQo+ID4gPiArICAgICAgICAgICAgc2VsZi5wb3J0X2NvbmYgPSBV c2VyQ29uZihzZWxmLmNvbmZpZ19maWxlKQ0KPiA+ID4gICAgICAgICAgZXhjZXB0IEV4Y2VwdGlv biBhcyBlOg0KPiA+ID4gICAgICAgICAgICAgIHByaW50ICJGQUlMRUQgTE9BRElORyBQT1JUIENP TkZJRyEhISINCj4gPiA+ICsgICAgICAgICAgICBzZWxmLnBvcnRfY29uZiA9IE5vbmUNCj4gPiA+ DQo+ID4gVGhlcmUncyBuZWVkIG9uZSBzcGVjaWFsIGV4Y2VwdGlvbiBmb3IgY29uZmlndXJhdGlv biBwYXJzZWQgZmFpbHVyZS4NCj4gDQo+IEkgd2lsbCBkbyBpdCBpbiB0aGUgbmV4dCB2ZXJzaW9u Lg0KPiANCj4gPg0KPiA+ID4gICAgICBkZWYgbG9hZF9wb3J0c19jb25maWcoc2VsZiwgY3JiSVAp Og0KPiA+ID4gLSAgICAgICAgcG9ydHMgPSBbXQ0KPiA+ID4gLSAgICAgICAgZm9yIGNyYiBpbiBz ZWxmLnBvcnRfY29uZi5zZWN0aW9ucygpOg0KPiA+ID4gLSAgICAgICAgICAgIGlmIGNyYiAhPSBj cmJJUDoNCj4gPiA+IC0gICAgICAgICAgICAgICAgY29udGludWUNCj4gPiA+IC0gICAgICAgICAg ICBwb3J0cyA9IFtwb3J0LnN0cmlwKCkNCj4gPiA+IC0gICAgICAgICAgICAgICAgICAgICBmb3Ig cG9ydCBpbiBzZWxmLnBvcnRfY29uZi5nZXQoY3JiLA0KPiA+ID4gJ3BvcnRzJykuc3BsaXQoJzsn KV0NCj4gPiA+ICsgICAgICAgIHNlbGYucG9ydHNfY2ZnID0ge30NCj4gPiA+ICsgICAgICAgIGlm IHNlbGYucG9ydF9jb25mIGlzIE5vbmU6DQo+ID4gPiArICAgICAgICAgICAgcmV0dXJuDQo+ID4g PiArDQo+ID4gPiArICAgICAgICBwb3J0cyA9IHNlbGYucG9ydF9jb25mLmxvYWRfc2VjdGlvbihj cmJJUCkNCj4gPiA+ICsgICAgICAgIGlmIHBvcnRzIGlzIE5vbmU6DQo+ID4gPiArICAgICAgICAg ICAgcmV0dXJuDQo+ID4gPiArICAgICAgICBrZXksIGNvbmZpZyA9IHBvcnRzWzBdDQo+ID4gPiAr ICAgICAgICBjb25mcyA9IHNlbGYucG9ydF9jb25mLmxvYWRfY29uZmlnKGNvbmZpZykNCj4gPiA+ ICsNCj4gPiA+ICsgICAgICAgIGZvciBjb25maWcgaW4gY29uZnM6DQo+ID4gPiArICAgICAgICAg ICAgcG9ydF9wYXJhbSA9IHNlbGYucG9ydF9jb25mLmxvYWRfcGFyYW0oY29uZmlnKQ0KPiA+ID4N Cj4gPiA+IC0gICAgICAgIGZvciBwb3J0IGluIHBvcnRzOg0KPiA+ID4gLSAgICAgICAgICAgIHBv cnRfY2ZnID0gc2VsZi5fX3BhcnNlX3BvcnRfcGFyYW0ocG9ydCkNCj4gPiA+ICAgICAgICAgICAg ICAjIGNoZWNrIHBjaSBCREYgdmFsaWRpdHkNCj4gPiA+IC0gICAgICAgICAgICBpZiAncGNpJyBu b3QgaW4gcG9ydF9jZmc6DQo+ID4gPiArICAgICAgICAgICAgaWYgJ3BjaScgbm90IGluIHBvcnRf cGFyYW06DQo+ID4gPiAgICAgICAgICAgICAgICAgIHByaW50ICJOT1QgRk9VTkQgQ09ORklHIEZP UiBOTyBQQ0kgQUREUkVTUyEhISINCj4gPiA+ICAgICAgICAgICAgICAgICAgY29udGludWUNCj4g PiA+IC0gICAgICAgICAgICBtID0gcmUubWF0Y2goc2VsZi5wY2lfcmVnZXgsIHBvcnRfY2ZnWydw Y2knXSkNCj4gPiA+ICsgICAgICAgICAgICBtID0gcmUubWF0Y2goc2VsZi5wY2lfcmVnZXgsIHBv cnRfcGFyYW1bJ3BjaSddKQ0KPiA+ID4gICAgICAgICAgICAgIGlmIG0gaXMgTm9uZToNCj4gPiA+ ICAgICAgICAgICAgICAgICAgcHJpbnQgIklOVkFMSUQgQ09ORklHIEZPUiBOTyBQQ0kgQUREUkVT UyEhISINCj4gPiA+ICAgICAgICAgICAgICAgICAgY29udGludWUNCj4gPiA+DQo+ID4gPiAtICAg ICAgICAgICAga2V5cyA9IHBvcnRfY2ZnLmtleXMoKQ0KPiA+ID4gKyAgICAgICAgICAgIGtleXMg PSBwb3J0X3BhcmFtLmtleXMoKQ0KPiA+ID4gICAgICAgICAgICAgIGtleXMucmVtb3ZlKCdwY2kn KQ0KPiA+ID4gLSAgICAgICAgICAgIHNlbGYucG9ydHNfY2ZnW3BvcnRfY2ZnWydwY2knXV0gPSB7 a2V5OiBwb3J0X2NmZ1trZXldDQo+ID4gZm9yIGtleQ0KPiA+ID4gaW4ga2V5c30NCj4gPiA+ICsg ICAgICAgICAgICBzZWxmLnBvcnRzX2NmZ1twb3J0X3BhcmFtWydwY2knXV0gPSB7DQo+ID4gPiAr ICAgICAgICAgICAgICAgIGtleTogcG9ydF9wYXJhbVtrZXldIGZvciBrZXkgaW4ga2V5c30NCj4g PiA+ICsgICAgICAgICAgICBpZiAnbnVtYScgaW4gc2VsZi5wb3J0c19jZmdbcG9ydF9wYXJhbVsn cGNpJ11dOg0KPiA+ID4gKyAgICAgICAgICAgICAgICBudW1hX3N0ciA9IHNlbGYucG9ydHNfY2Zn W3BvcnRfcGFyYW1bJ3BjaSddXVsnbnVtYSddDQo+ID4gPiArICAgICAgICAgICAgICAgIHNlbGYu cG9ydHNfY2ZnW3BvcnRfcGFyYW1bJ3BjaSddXVsnbnVtYSddID0NCj4gPiBpbnQobnVtYV9zdHIp DQo+ID4gPg0KPiA+ID4gICAgICBkZWYgZ2V0X3BvcnRzX2NvbmZpZyhzZWxmKToNCj4gPiA+ICAg ICAgICAgIHJldHVybiBzZWxmLnBvcnRzX2NmZw0KPiA+ID4gQEAgLTg2LDIzICsxNzQsMzYgQEAg Y2xhc3MgVXNlckNvbmYoKToNCj4gPiA+ICAgICAgICAgIGVsc2U6DQo+ID4gPiAgICAgICAgICAg ICAgcmV0dXJuIEZhbHNlDQo+ID4gPg0KPiA+ID4gLSAgICBkZWYgX19wYXJzZV9wb3J0X3BhcmFt KHNlbGYsIHBvcnQpOg0KPiA+ID4gLSAgICAgICAgcG9ydERpY3QgPSBkaWN0KCkNCj4gPiA+IC0N Cj4gPiA+IC0gICAgICAgIGZvciBwYXJhbSBpbiBwb3J0LnNwbGl0KCcsJyk6DQo+ID4gPiAtICAg ICAgICAgICAgKGtleSwgXywgdmFsdWUpID0gcGFyYW0ucGFydGl0aW9uKCc9JykNCj4gPiA+IC0g ICAgICAgICAgICBpZiBrZXkgPT0gJ251bWEnOg0KPiA+ID4gLSAgICAgICAgICAgICAgICBwb3J0 RGljdFtrZXldID0gaW50KHZhbHVlKQ0KPiA+ID4gLSAgICAgICAgICAgIGVsc2U6DQo+ID4gPiAt ICAgICAgICAgICAgICAgIHBvcnREaWN0W2tleV0gPSB2YWx1ZQ0KPiA+ID4gLSAgICAgICAgcmV0 dXJuIHBvcnREaWN0DQo+ID4gPiArDQo+ID4gPg0KPiA+ID4NCj4gPiA+ICBpZiBfX25hbWVfXyA9 PSAnX19tYWluX18nOg0KPiA+ID4gLSAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNl cihkZXNjcmlwdGlvbj0iTG9hZCBEVFMNCj4gPiBjb25maWd1cmF0aW9uDQo+ID4gPiBmaWxlcyIp DQo+ID4gPiAtICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1wIiwgIi0tcG9ydGNvbmYiLCBkZWZh dWx0PXBvcnRjb25mKQ0KPiA+ID4gLSAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItYyIsICItLWNy YmNvbmYiLCBkZWZhdWx0PWNyYmNvbmYpDQo+ID4gPiArICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFy Z3VtZW50UGFyc2VyKA0KPiA+ID4gKyAgICAgICAgZGVzY3JpcHRpb249IkxvYWQgRFRTIGNvbmZp Z3VyYXRpb24gZmlsZXMiKQ0KPiA+ID4gKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItcCIsICIt LXBvcnRjb25mIiwgZGVmYXVsdD1QT1JUQ09ORikNCj4gPiA+ICsgICAgcGFyc2VyLmFkZF9hcmd1 bWVudCgiLWMiLCAiLS1jcmJjb25mIiwgZGVmYXVsdD1DUkJDT05GKQ0KPiA+ID4gKyAgICBwYXJz ZXIuYWRkX2FyZ3VtZW50KCItdiIsICItLXZpcnRjb25mIiwgZGVmYXVsdD1WSVJUQ09ORikNCj4g PiA+ICAgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkNCj4gPiA+IC0gICAgY29uZiA9IFVz ZXJDb25mKCkNCj4gPiA+IC0gICAgY29uZi5sb2FkX3BvcnRzX2NvbmZpZygnMTkyLjE2OC4xLjEn KQ0KPiA+ID4gLSAgICBjb25mLmNoZWNrX3BvcnRfYXZhaWxhYmxlKCcwMDAwOjg2OjAwLjAnKQ0K PiA+ID4gKw0KPiA+ID4gKyAgICAjIG5vdCBleGlzdGVkIGNvbmZpZ3VyYXRpb24gZmlsZQ0KPiA+ ID4gKyAgICBWaXJ0Q29uZignL3RtcC9ub3QtZXhpc3RlZC5jZmcnKQ0KPiA+ID4gKw0KPiA+ID4g KyAgICAjIGV4YW1wbGUgZm9yIGJhc2ljIHVzZSBjb25maWd1cmF0aW9uIGZpbGUNCj4gPiA+ICsg ICAgY29uZiA9IFVzZXJDb25mKFBPUlRDT05GKQ0KPiA+ID4gKyAgICBmb3Igc2VjdGlvbiBpbiBj b25mLmdldF9zZWN0aW9ucygpOg0KPiA+ID4gKyAgICAgICAgaXRlbXMgPSBjb25mLmxvYWRfc2Vj dGlvbihzZWN0aW9uKQ0KPiA+ID4gKyAgICAgICAga2V5LCB2YWx1ZSA9IGl0ZW1zWzBdDQo+ID4g PiArICAgICAgICBjb25mcyA9IGNvbmYubG9hZF9jb25maWcodmFsdWUpDQo+ID4gPiArICAgICAg ICBmb3IgY29uZmlnIGluIGNvbmZzOg0KPiA+ID4gKyAgICAgICAgICAgIGNvbmYubG9hZF9wYXJh bShjb25maWcpDQo+ID4gPiArDQo+ID4gPiArICAgICMgZXhhbXBsZSBmb3IgcG9ydCBjb25maWd1 cmF0aW9uIGZpbGUNCj4gPiA+ICsgICAgcG9ydGNvbmYgPSBQb3J0Q29uZihQT1JUQ09ORikNCj4g PiA+ICsgICAgcG9ydGNvbmYubG9hZF9wb3J0c19jb25maWcoJ0RVVCBJUCcpDQo+ID4gPiArICAg IHByaW50IHBvcnRjb25mLmdldF9wb3J0c19jb25maWcoKQ0KPiA+ID4gKyAgICBwb3J0Y29uZi5j aGVja19wb3J0X2F2YWlsYWJsZSgnODY6MDAuMCcpDQo+ID4gPiArDQo+ID4gPiArICAgICMgZXhh bXBsZSBmb3IgZ2xvYmFsIHZpcnR1YWxpemF0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZQ0KPiA+ID4g KyAgICB2aXJ0Y29uZiA9IFZpcnRDb25mKFZJUlRDT05GKQ0KPiA+ID4gKyAgICB2aXJ0Y29uZi5s b2FkX3ZpcnRfY29uZmlnKCdMSUJWSVJUJykNCj4gPiA+ICsgICAgcHJpbnQgdmlydGNvbmYuZ2V0 X3ZpcnRfY29uZmlnKCkNCj4gPiA+IGRpZmYgLS1naXQgYS9mcmFtZXdvcmsvc3NoX2Nvbm5lY3Rp b24ucHkNCj4gPiBiL2ZyYW1ld29yay9zc2hfY29ubmVjdGlvbi5weQ0KPiA+ID4gaW5kZXggMThh NjUxNy4uNzI4NmIxNCAxMDA2NDQNCj4gPiA+IC0tLSBhL2ZyYW1ld29yay9zc2hfY29ubmVjdGlv bi5weQ0KPiA+ID4gKysrIGIvZnJhbWV3b3JrL3NzaF9jb25uZWN0aW9uLnB5DQo+ID4gPiBAQCAt NjIsNiArNjIsMTEgQEAgY2xhc3MgU1NIQ29ubmVjdGlvbihvYmplY3QpOg0KPiA+ID4gICAgICAg ICAgc2VsZi5sb2dnZXIuZGVidWcob3V0KQ0KPiA+ID4gICAgICAgICAgcmV0dXJuIG91dA0KPiA+ ID4NCj4gPiA+ICsgICAgZGVmIGdldF9zZXNzaW9uX2JlZm9yZShzZWxmLCB0aW1lb3V0PTE1KToN Cj4gPiA+ICsgICAgICAgIG91dCA9IHNlbGYuc2Vzc2lvbi5nZXRfc2Vzc2lvbl9iZWZvcmUodGlt ZW91dCkNCj4gPiA+ICsgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKG91dCkNCj4gPiA+ICsgICAg ICAgIHJldHVybiBvdXQNCj4gPiA+ICsNCj4gPg0KPiA+IEkndmUgc2VudCBvdXQgdGhpcyBwYXRj aCwgcGxlYXNlIG1ha2Ugc3VyZSB0aGVyZSdzIG5vIGdhcCB0aGVyZS4NCj4gPiBZb3UnZCBiZXR0 ZXIgcmVtb3ZlIHRob3NlIGZyb20geW91ciBwYXRjaCB3b3JrLg0KPiA+DQo+IA0KPiBBYm91dCB0 aGlzLCBJIGhhdmUgY2hlY2tlZCBpdCwgeWVzLCB5b3UgaGF2ZSBzZW50IGl0LCBJIHdpbGwgcmVt b3ZlIGl0DQo+IGZyb20gbXkgcGF0Y2ggd29yay4NCj4gDQo+ID4gPiAgICAgIGRlZiBjbG9zZShz ZWxmKToNCj4gPiA+ICAgICAgICAgIHNlbGYuc2Vzc2lvbi5jbG9zZSgpDQo+ID4gPg0KPiA+ID4g ZGlmZiAtLWdpdCBhL2ZyYW1ld29yay9zc2hfcGV4cGVjdC5weSBiL2ZyYW1ld29yay9zc2hfcGV4 cGVjdC5weQ0KPiA+ID4gaW5kZXggNzM1ZGY0NC4uNDE5MzAyMCAxMDA2NDQNCj4gPiA+IC0tLSBh L2ZyYW1ld29yay9zc2hfcGV4cGVjdC5weQ0KPiA+ID4gKysrIGIvZnJhbWV3b3JrL3NzaF9wZXhw ZWN0LnB5DQo+ID4gPiBAQCAtMiw3ICsyLDggQEAgaW1wb3J0IHRpbWUNCj4gPiA+ICBpbXBvcnQg cGV4cGVjdA0KPiA+ID4gIGltcG9ydCBweHNzaA0KPiA+ID4gIGZyb20gZGVidWdnZXIgaW1wb3J0 IGlnbm9yZV9rZXlpbnRyLCBhd2FyZV9rZXlpbnRyDQo+ID4gPiAtZnJvbSBleGNlcHRpb24gaW1w b3J0IFRpbWVvdXRFeGNlcHRpb24sIFNTSENvbm5lY3Rpb25FeGNlcHRpb24NCj4gPiA+ICtmcm9t IGV4Y2VwdGlvbiBpbXBvcnQgVGltZW91dEV4Y2VwdGlvbiwgU1NIQ29ubmVjdGlvbkV4Y2VwdGlv biwNCj4gPiA+IFNTSFNlc3Npb25EZWFkRXhjZXB0aW9uDQo+ID4gPiArZnJvbSB1dGlscyBpbXBv cnQgUkVELCBHUkVFTg0KPiA+ID4NCj4gPiA+ICAiIiINCj4gPiA+ICBNb2R1bGUgaGFuZGxlIHNz aCBzZXNzaW9ucyBiZXR3ZWVuIHRlc3RlciBhbmQgRFVULg0KPiA+ID4gQEAgLTE0LDE2ICsxNSwy OCBAQCBBc2xvIHN1cHBvcnQgdHJhbnNmZXIgZmlsZXMgdG8gdGVzdGVyIG9yIERVVC4NCj4gPiA+ ICBjbGFzcyBTU0hQZXhwZWN0KG9iamVjdCk6DQo+ID4gPg0KPiA+ID4gICAgICBkZWYgX19pbml0 X18oc2VsZiwgaG9zdCwgdXNlcm5hbWUsIHBhc3N3b3JkKToNCj4gPiA+IC0gICAgICAgIHNlbGYu bWFnaWNfcHJvbXB0ID0gIltNQUdJQyBQUk9NUFRdIg0KPiA+ID4gKyAgICAgICAgc2VsZi5tYWdp Y19wcm9tcHQgPSAiTUFHSUMgUFJPTVBUIg0KPiA+ID4gICAgICAgICAgdHJ5Og0KPiA+ID4gICAg ICAgICAgICAgIHNlbGYuc2Vzc2lvbiA9IHB4c3NoLnB4c3NoKCkNCj4gPiA+IC0gICAgICAgICAg ICBzZWxmLnVzZXJuYW1lID0gdXNlcm5hbWUNCj4gPiA+ICAgICAgICAgICAgICBzZWxmLmhvc3Qg PSBob3N0DQo+ID4gPiArICAgICAgICAgICAgc2VsZi51c2VybmFtZSA9IHVzZXJuYW1lDQo+ID4g PiAgICAgICAgICAgICAgc2VsZi5wYXNzd29yZCA9IHBhc3N3b3JkDQo+ID4gPiAtICAgICAgICAg ICAgc2VsZi5zZXNzaW9uLmxvZ2luKHNlbGYuaG9zdCwgc2VsZi51c2VybmFtZSwNCj4gPiA+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXNzd29yZCwNCj4gPiBvcmlnaW5h bF9wcm9tcHQ9J1skIz5dJykNCj4gPiA+ICsgICAgICAgICAgICBpZiAnOicgaW4gaG9zdDoNCj4g PiA+ICsgICAgICAgICAgICAgICAgc2VsZi5pcCA9IGhvc3Quc3BsaXQoJzonKVswXQ0KPiA+ID4g KyAgICAgICAgICAgICAgICBzZWxmLnBvcnQgPSBpbnQoaG9zdC5zcGxpdCgnOicpWzFdKQ0KPiA+ ID4gKyAgICAgICAgICAgICAgICBzZWxmLnNlc3Npb24ubG9naW4oc2VsZi5pcCwgc2VsZi51c2Vy bmFtZSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFz c3dvcmQsDQo+ID4gb3JpZ2luYWxfcHJvbXB0PSdbJCM+XScsDQo+ID4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwb3J0PXNlbGYucG9ydCwgbG9naW5fdGltZW91dD0yMCkN Cj4gPiA+ICsgICAgICAgICAgICBlbHNlOg0KPiA+ID4gKyAgICAgICAgICAgICAgICBzZWxmLnNl c3Npb24ubG9naW4oc2VsZi5ob3N0LCBzZWxmLnVzZXJuYW1lLA0KPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXNzd29yZCwNCj4gPiBvcmlnaW5hbF9wcm9t cHQ9J1skIz5dJykNCj4gPiA+ICAgICAgICAgICAgICBzZWxmLnNlbmRfZXhwZWN0KCdzdHR5IC1l Y2hvJywgJyMgJywgdGltZW91dD0yKQ0KPiA+ID4gLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoN Cj4gPiA+ICsgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6DQo+ID4gPiArICAgICAgICAgICAg cHJpbnQgUkVEKGUpDQo+ID4gPiArICAgICAgICAgICAgaWYgZ2V0YXR0cihzZWxmLCAncG9ydCcs IE5vbmUpOg0KPiA+ID4gKyAgICAgICAgICAgICAgICBzdWdnZXN0aW9uID0gIlxuU3VnZ2Vzc2lv bjogQ2hlY2sgaWYgdGhlIGZpcmV3YXJlIG9uDQo+ID4gPiBbICVzIF0gIiAlIFwNCj4gPiA+ICsg ICAgICAgICAgICAgICAgICAgIHNlbGYuaXAgKyAiaXMgc3RvcGVkXG4iDQo+ID4gPiArICAgICAg ICAgICAgICAgIHByaW50IEdSRUVOKHN1Z2dlc3Rpb24pDQo+ID4gPiAgICAgICAgICAgICAgcmFp c2UgU1NIQ29ubmVjdGlvbkV4Y2VwdGlvbihob3N0KQ0KPiA+ID4NCj4gPiA+ICAgICAgZGVmIGlu aXRfbG9nKHNlbGYsIGxvZ2dlciwgbmFtZSk6DQo+ID4gPiBAQCAtMzMsNyArNDYsNyBAQCBjbGFz cyBTU0hQZXhwZWN0KG9iamVjdCk6DQo+ID4gPg0KPiA+ID4gICAgICBkZWYgc2VuZF9leHBlY3Rf YmFzZShzZWxmLCBjb21tYW5kLCBleHBlY3RlZCwgdGltZW91dD0xNSk6DQo+ID4gPiAgICAgICAg ICBpZ25vcmVfa2V5aW50cigpDQo+ID4gPiAtICAgICAgICBzZWxmLl9fZmx1c2goKSAjIGNsZWFy IGJ1ZmZlcg0KPiA+ID4gKyAgICAgICAgc2VsZi5fX2ZsdXNoKCkgICMgY2xlYXIgYnVmZmVyDQo+ ID4gPiAgICAgICAgICBzZWxmLnNlc3Npb24uUFJPTVBUID0gZXhwZWN0ZWQNCj4gPiA+ICAgICAg ICAgIHNlbGYuX19zZW5kbGluZShjb21tYW5kKQ0KPiA+ID4gICAgICAgICAgc2VsZi5fX3Byb21w dChjb21tYW5kLCB0aW1lb3V0KQ0KPiA+ID4gQEAgLTQ1LDcgKzU4LDcgQEAgY2xhc3MgU1NIUGV4 cGVjdChvYmplY3QpOg0KPiA+ID4gICAgICBkZWYgc2VuZF9leHBlY3Qoc2VsZiwgY29tbWFuZCwg ZXhwZWN0ZWQsIHRpbWVvdXQ9MTUsDQo+ID4gdmVyaWZ5PUZhbHNlKToNCj4gPiA+ICAgICAgICAg IHJldCA9IHNlbGYuc2VuZF9leHBlY3RfYmFzZShjb21tYW5kLCBleHBlY3RlZCwgdGltZW91dCkN Cj4gPiA+ICAgICAgICAgIGlmIHZlcmlmeToNCj4gPiA+IC0gICAgICAgICAgICByZXRfc3RhdHVz ID0gc2VsZi5zZW5kX2V4cGVjdF9iYXNlKCJlY2hvICQ/IiwgZXhwZWN0ZWQpDQo+ID4gPiArICAg ICAgICAgICAgcmV0X3N0YXR1cyA9IHNlbGYuc2VuZF9leHBlY3RfYmFzZSgiZWNobyAkPyIsIGV4 cGVjdGVkLA0KPiA+ID4gdGltZW91dCkNCj4gPiA+ICAgICAgICAgICAgICBpZiBub3QgaW50KHJl dF9zdGF0dXMpOg0KPiA+ID4gICAgICAgICAgICAgICAgICByZXR1cm4gcmV0DQo+ID4gPiAgICAg ICAgICAgICAgZWxzZToNCj4gPiA+IEBAIC01NCwyMSArNjcsNDQgQEAgY2xhc3MgU1NIUGV4cGVj dChvYmplY3QpOg0KPiA+ID4gICAgICAgICAgZWxzZToNCj4gPiA+ICAgICAgICAgICAgICByZXR1 cm4gcmV0DQo+ID4gPg0KPiA+ID4gLSAgICBkZWYgX19mbHVzaChzZWxmKToNCj4gPiA+ICsgICAg ZGVmIGdldF9zZXNzaW9uX2JlZm9yZShzZWxmLCB0aW1lb3V0PTE1KToNCj4gPiA+ICsgICAgICAg ICIiIg0KPiA+ID4gKyAgICAgICAgR2V0IGFsbCBvdXRwdXQgYmVmb3JlIHRpbWVvdXQNCj4gPiA+ ICsgICAgICAgICIiIg0KPiA+ID4gKyAgICAgICAgaWdub3JlX2tleWludHIoKQ0KPiA+ID4gICAg ICAgICAgc2VsZi5zZXNzaW9uLlBST01QVCA9IHNlbGYubWFnaWNfcHJvbXB0DQo+ID4gPiAtICAg ICAgICBzZWxmLnNlc3Npb24ucHJvbXB0KDAuMSkNCj4gPiA+ICsgICAgICAgIHRyeToNCj4gPiA+ ICsgICAgICAgICAgICBzZWxmLnNlc3Npb24ucHJvbXB0KHRpbWVvdXQpDQo+ID4gPiArICAgICAg ICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6DQo+ID4gPiArICAgICAgICAgICAgcGFzcw0KPiA+ID4g Kw0KPiA+ID4gKyAgICAgICAgYXdhcmVfa2V5aW50cigpDQo+ID4gPiArICAgICAgICBiZWZvcmUg PSBzZWxmLmdldF9vdXRwdXRfYmVmb3JlKCkNCj4gPiA+ICsgICAgICAgIHNlbGYuX19mbHVzaCgp DQo+ID4gPiArICAgICAgICByZXR1cm4gYmVmb3JlDQo+ID4gPiArDQo+ID4gPiArICAgIGRlZiBf X2ZsdXNoKHNlbGYpOg0KPiA+ID4gKyAgICAgICAgIiIiDQo+ID4gPiArICAgICAgICBDbGVhciBh bGwgc2Vzc2lvbiBidWZmZXINCj4gPiA+ICsgICAgICAgICIiIg0KPiA+ID4gKyAgICAgICAgc2Vs Zi5zZXNzaW9uLmJ1ZmZlciA9ICIiDQo+ID4gPiArICAgICAgICBzZWxmLnNlc3Npb24uYmVmb3Jl ID0gIiINCj4gPiA+DQo+ID4gPiAgICAgIGRlZiBfX3Byb21wdChzZWxmLCBjb21tYW5kLCB0aW1l b3V0KToNCj4gPiA+ICAgICAgICAgIGlmIG5vdCBzZWxmLnNlc3Npb24ucHJvbXB0KHRpbWVvdXQp Og0KPiA+ID4gICAgICAgICAgICAgIHJhaXNlIFRpbWVvdXRFeGNlcHRpb24oY29tbWFuZCwgc2Vs Zi5nZXRfb3V0cHV0X2FsbCgpKQ0KPiA+ID4NCj4gPiA+ICAgICAgZGVmIF9fc2VuZGxpbmUoc2Vs ZiwgY29tbWFuZCk6DQo+ID4gPiArICAgICAgICBpZiBub3Qgc2VsZi5pc2FsaXZlKCk6DQo+ID4g PiArICAgICAgICAgICAgcmFpc2UgU1NIU2Vzc2lvbkRlYWRFeGNlcHRpb24oc2VsZi5ob3N0KQ0K PiA+ID4gICAgICAgICAgaWYgbGVuKGNvbW1hbmQpID09IDIgYW5kIGNvbW1hbmQuc3RhcnRzd2l0 aCgnXicpOg0KPiA+ID4gICAgICAgICAgICAgIHNlbGYuc2Vzc2lvbi5zZW5kY29udHJvbChjb21t YW5kWzFdKQ0KPiA+ID4gICAgICAgICAgZWxzZToNCj4gPiA+ICAgICAgICAgICAgICBzZWxmLnNl c3Npb24uc2VuZGxpbmUoY29tbWFuZCkNCj4gPiA+DQo+ID4gPiAgICAgIGRlZiBnZXRfb3V0cHV0 X2JlZm9yZShzZWxmKToNCj4gPiA+ICsgICAgICAgIGlmIG5vdCBzZWxmLmlzYWxpdmUoKToNCj4g PiA+ICsgICAgICAgICAgICByYWlzZSBTU0hTZXNzaW9uRGVhZEV4Y2VwdGlvbihzZWxmLmhvc3Qp DQo+ID4gPiAgICAgICAgICBzZWxmLnNlc3Npb24uZmx1c2goKQ0KPiA+ID4gICAgICAgICAgYmVm b3JlID0gc2VsZi5zZXNzaW9uLmJlZm9yZS5yc3BsaXQoJ1xyXG4nLCAxKQ0KPiA+ID4gICAgICAg ICAgaWYgYmVmb3JlWzBdID09ICJbUEVYUEVDVF0iOg0KPiA+ID4gQEAgLTEwMyw3ICsxMzksMTIg QEAgY2xhc3MgU1NIUGV4cGVjdChvYmplY3QpOg0KPiA+ID4gICAgICAgICAgIiIiDQo+ID4gPiAg ICAgICAgICBTZW5kcyBhIGxvY2FsIGZpbGUgdG8gYSByZW1vdGUgcGxhY2UuDQo+ID4gPiAgICAg ICAgICAiIiINCj4gPiA+IC0gICAgICAgIGNvbW1hbmQgPSAnc2NwIHswfSB7MX1AezJ9OnszfScu Zm9ybWF0KHNyYywgc2VsZi51c2VybmFtZSwNCj4gPiA+IHNlbGYuaG9zdCwgZHN0KQ0KPiA+ID4g KyAgICAgICAgaWYgJzonIGluIHNlbGYuaG9zdDoNCj4gPiA+ICsgICAgICAgICAgICBjb21tYW5k ID0gJ3NjcCAtUCB7MH0gLW8NCj4gPiBOb0hvc3RBdXRoZW50aWNhdGlvbkZvckxvY2FsaG9zdD15 ZXMNCj4gPiA+IHsxfSB7Mn1AezN9Ons0fScuZm9ybWF0KA0KPiA+ID4gKyAgICAgICAgICAgICAg ICBzdHIoc2VsZi5wb3J0KSwgc3JjLCBzZWxmLnVzZXJuYW1lLCBzZWxmLmlwLCBkc3QpDQo+ID4g PiArICAgICAgICBlbHNlOg0KPiA+ID4gKyAgICAgICAgICAgIGNvbW1hbmQgPSAnc2NwIHswfSB7 MX1AezJ9OnszfScuZm9ybWF0KA0KPiA+ID4gKyAgICAgICAgICAgICAgICBzcmMsIHNlbGYudXNl cm5hbWUsIHNlbGYuaG9zdCwgZHN0KQ0KPiA+ID4gICAgICAgICAgaWYgcGFzc3dvcmQgPT0gJyc6 DQo+ID4gPiAgICAgICAgICAgICAgc2VsZi5fc3Bhd25fc2NwKGNvbW1hbmQsIHNlbGYucGFzc3dv cmQpDQo+ID4gPiAgICAgICAgICBlbHNlOg0KPiA+ID4gZGlmZiAtLWdpdCBhL2ZyYW1ld29yay91 dGlscy5weSBiL2ZyYW1ld29yay91dGlscy5weQ0KPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4gPiA+IGluZGV4IDAwMDAwMDAuLjU3ZWI5ODgNCj4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ ICsrKyBiL2ZyYW1ld29yay91dGlscy5weQ0KPiA+ID4gQEAgLTAsMCArMSw3NyBAQA0KPiA+ID4g KyMgQlNEIExJQ0VOU0UNCj4gPiA+ICsjDQo+ID4gPiArIyBDb3B5cmlnaHQoYykgMjAxMC0yMDE0 IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiA+ID4gKyMgQWxsIHJp Z2h0cyByZXNlcnZlZC4NCj4gPiA+ICsjDQo+ID4gPiArIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCj4gPiA+ICsjIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucw0KPiA+ID4gKyMgYXJlIG1ldDoNCj4gPiA+ICsjDQo+ID4gPiArIyAgICogUmVkaXN0 cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQN Cj4gPiA+ICsjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIuDQo+ID4gPiArIyAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQ0KPiA+IGNvcHlyaWdodA0KPiA+ID4gKyMg ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lcg0KPiA+IGluDQo+ID4gPiArIyAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQ0KPiA+ID4gKyMgICAgIGRpc3RyaWJ1dGlv bi4NCj4gPiA+ICsjICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5v ciB0aGUgbmFtZXMgb2YgaXRzDQo+ID4gPiArIyAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cw0KPiA+IGRlcml2ZWQNCj4gPiA+ICsjICAg ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p c3Npb24uDQo+ID4gPiArIw0KPiA+ID4gKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EDQo+ID4gQ09OVFJJQlVUT1JTDQo+ID4gPiArIyAiQVMg SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVA0KPiA+ID4gKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MNCj4gPiBGT1INCj4gPiA+ICsjIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUNCj4gPiBDT1BZUklH SFQNCj4gPiA+ICsjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF Q1QsIElORElSRUNULA0KPiA+IElOQ0lERU5UQUwsDQo+ID4gPiArIyBTUEVDSUFMLCBFWEVNUExB UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UDQo+ID4gPiAr IyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT OyBMT1NTIE9GDQo+ID4gVVNFLA0KPiA+ID4gKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCj4gPiBBTlkNCj4gPiA+ICsj IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ VFksIE9SDQo+ID4gVE9SVA0KPiA+ID4gKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUNCj4gPiBVU0UNCj4gPiA+ICsjIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD SA0KPiA+IERBTUFHRS4NCj4gPiA+ICsNCj4gPiA+ICtpbXBvcnQganNvbiAgICAgICAgICMganNv biBmb3JtYXQNCj4gPiA+ICtpbXBvcnQgcmUNCj4gPiA+ICsNCj4gPiA+ICsNCj4gPiA+ICtkZWYg UkVEKHRleHQpOg0KPiA+ID4gKyAgICByZXR1cm4gIlx4MUJbIiArICIzMTsxbSIgKyBzdHIodGV4 dCkgKyAiXHgxQlsiICsgIjBtIg0KPiA+ID4gKw0KPiA+ID4gKw0KPiA+ID4gK2RlZiBCTFVFKHRl eHQpOg0KPiA+ID4gKyAgICByZXR1cm4gIlx4MUJbIiArICIzNjsxbSIgKyBzdHIodGV4dCkgKyAi XHgxQlsiICsgIjBtIg0KPiA+ID4gKw0KPiA+ID4gKw0KPiA+ID4gK2RlZiBHUkVFTih0ZXh0KToN Cj4gPiA+ICsgICAgcmV0dXJuICJceDFCWyIgKyAiMzI7MW0iICsgc3RyKHRleHQpICsgIlx4MUJb IiArICIwbSINCj4gPiA+ICsNCj4gPiA+ICsNCj4gPiA+ICtkZWYgcHByaW50KHNvbWVfZGljdCk6 DQo+ID4gPiArICAgICIiIg0KPiA+ID4gKyAgICBQcmludCBKU09OIGZvcm1hdCBkaWN0aW9uYXJ5 IG9iamVjdC4NCj4gPiA+ICsgICAgIiIiDQo+ID4gPiArICAgIHJldHVybiBqc29uLmR1bXBzKHNv bWVfZGljdCwgc29ydF9rZXlzPVRydWUsIGluZGVudD00KQ0KPiA+ID4gKw0KPiA+ID4gKw0KPiA+ ID4gK2RlZiByZWdleHAocywgdG9fbWF0Y2gsIGFsbFN0cmluZz1GYWxzZSk6DQo+ID4gPiArICAg ICIiIg0KPiA+ID4gKyAgICBFbnN1cmUgdGhhdCB0aGUgcmUgYHRvX21hdGNoJyBvbmx5IGhhcyBv bmUgZ3JvdXAgaW4gaXQuDQo+ID4gPiArICAgICIiIg0KPiA+ID4gKw0KPiA+ID4gKyAgICBzY2Fu bmVyID0gcmUuY29tcGlsZSh0b19tYXRjaCwgcmUuRE9UQUxMKQ0KPiA+ID4gKyAgICBpZiBhbGxT dHJpbmc6DQo+ID4gPiArICAgICAgICByZXR1cm4gc2Nhbm5lci5maW5kYWxsKHMpDQo+ID4gPiAr ICAgIG0gPSBzY2FubmVyLnNlYXJjaChzKQ0KPiA+ID4gKyAgICBpZiBtIGlzIE5vbmU6DQo+ID4g PiArICAgICAgICBwcmludCBSRUQoIkZhaWxlZCB0byBtYXRjaCAiICsgdG9fbWF0Y2ggKyAiIGlu IHRoZSBzdHJpbmcgIg0KPiA+ICsgcykNCj4gPiA+ICsgICAgICAgIHJldHVybiBOb25lDQo+ID4g PiArICAgIHJldHVybiBtLmdyb3VwKDEpDQo+ID4gPiArDQo+ID4gPiArDQo+ID4gPiArZGVmIGdl dF9vYmpfZnVuY3Mob2JqLCBmdW5jX25hbWVfcmVnZXgpOg0KPiA+ID4gKyAgICAiIiINCj4gPiA+ ICsgICAgUmV0dXJuIGZ1bmN0aW9uIGxpc3Qgd2hpY2ggbmFtZSBtYXRjaGVkIHJlZ2V4Lg0KPiA+ ID4gKyAgICAiIiINCj4gPiA+ICsgICAgZm9yIGZ1bmNfbmFtZSBpbiBkaXIob2JqKToNCj4gPiA+ ICsgICAgICAgIGZ1bmMgPSBnZXRhdHRyKG9iaiwgZnVuY19uYW1lKQ0KPiA+ID4gKyAgICAgICAg aWYgY2FsbGFibGUoZnVuYykgYW5kIHJlLm1hdGNoKGZ1bmNfbmFtZV9yZWdleCwNCj4gPiBmdW5j Ll9fbmFtZV9fKToNCj4gPiA+ICsgICAgICAgICAgICB5aWVsZCBmdW5jDQo+ID4gPiAtLQ0KPiA+ IFRoaXMgZnVuY3Rpb24gbm93IHVzZWQgdG8gZnJlZSByZXNvdXJjZSBvZiB2aXJ0dWFsaXphdGlv biBtYWNoaW5lLCBJDQo+ID4gdGhpbmsgaXQncyBiZXR0ZXIgdG8gY2FsbCBmcmVlIGZ1bmN0aW9u cyBkaXJlY3RseS4NCj4gPiBNYXliZSB0aGVyZSB3aWxsIGJlIGRlcGVuZGVuY3kgb2YgdGhlc2Ug ZnJlZSBmdW5jdGlvbnMuIFdoYXQncyB5b3VyDQo+ID4gaWRlYSBhYm91dCBpdD8NCj4gDQo+IE5v LCBub3cgaXQgaXMganVzdCB1c2VkIG9uIHRoZSBtb2R1bGUgb2YgdmlydHVhbCByZXNvdXJjZS4N Cj4gQnV0IEkgdGhpbmsgdGhpcyBpcyBjb21tb24gZnVuY3Rpb24sIGl0IGNhbiBiZSB1c2VkIGlu IG90aGVyIG1vZHVsZSBpZg0KPiB0aGVyZQ0KPiBpcyBhIGRlbWFuZC4NCj4gDQo+ID4NCj4gPiA+ IDEuOS4wDQoNCg==