From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by mx.groups.io with SMTP id smtpd.web12.32955.1578884796879158039 for ; Sun, 12 Jan 2020 19:06:37 -0800 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 134.134.136.20, mailfrom: zhichao.gao@intel.com) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 12 Jan 2020 19:06:35 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.69,427,1571727600"; d="scan'208";a="247586160" Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by fmsmga004.fm.intel.com with ESMTP; 12 Jan 2020 19:06:35 -0800 Received: from shsmsx603.ccr.corp.intel.com (10.109.6.143) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.439.0; Sun, 12 Jan 2020 19:06:35 -0800 Received: from shsmsx603.ccr.corp.intel.com (10.109.6.143) by SHSMSX603.ccr.corp.intel.com (10.109.6.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 13 Jan 2020 11:06:33 +0800 Received: from shsmsx603.ccr.corp.intel.com ([10.109.6.143]) by SHSMSX603.ccr.corp.intel.com ([10.109.6.143]) with mapi id 15.01.1713.004; Mon, 13 Jan 2020 11:06:33 +0800 From: "Gao, Zhichao" To: Vladimir Olovyannikov , "Ni, Ray" , "devel@edk2.groups.io" Subject: Re: [edk2-devel] [PATCH 1/1] ShellPkg/Application: Support nested variables substitution from cmd line Thread-Topic: [edk2-devel] [PATCH 1/1] ShellPkg/Application: Support nested variables substitution from cmd line Thread-Index: AQHVxzkZJHDPTGHnJ0yu3Ew17s9Xpqfi4qeAgACv7YCABFr78A== Date: Mon, 13 Jan 2020 03:06:33 +0000 Message-ID: References: <20200109220637.28691-1-vladimir.olovyannikov@broadcom.com> <734D49CCEBEEF84792F5B80ED585239D5C3E6CF4@SHSMSX104.ccr.corp.intel.com> <2d6b2d376dfef281c2ec66b35d0735f8@mail.gmail.com> In-Reply-To: <2d6b2d376dfef281c2ec66b35d0735f8@mail.gmail.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows x-ctpclassification: CTP_NT x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMmMyMDczNWYtMTczYy00M2RjLWI1MmQtY2I4YmM3OTZjMDFlIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiNCt3V0lwdXdcL28xRE1hXC9RRHNLdHJzUmhFb2dkekFqN2hKQ1ZkdHpXMlNMWVFPOGVsNlQ1WSt1QVhCcDZiSGRHIn0= dlp-reaction: no-action dlp-version: 11.2.0.6 x-originating-ip: [10.239.127.36] MIME-Version: 1.0 Return-Path: zhichao.gao@intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgVmxhZGltaXIsDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogVmxh ZGltaXIgT2xvdnlhbm5pa292IDx2bGFkaW1pci5vbG92eWFubmlrb3ZAYnJvYWRjb20uY29tPg0K PiBTZW50OiBTYXR1cmRheSwgSmFudWFyeSAxMSwgMjAyMCAxMjozMyBBTQ0KPiBUbzogTmksIFJh eSA8cmF5Lm5pQGludGVsLmNvbT47IGRldmVsQGVkazIuZ3JvdXBzLmlvOyBHYW8sIFpoaWNoYW8N Cj4gPHpoaWNoYW8uZ2FvQGludGVsLmNvbT4NCj4gU3ViamVjdDogUkU6IFtlZGsyLWRldmVsXSBb UEFUQ0ggMS8xXSBTaGVsbFBrZy9BcHBsaWNhdGlvbjogU3VwcG9ydCBuZXN0ZWQNCj4gdmFyaWFi bGVzIHN1YnN0aXR1dGlvbiBmcm9tIGNtZCBsaW5lDQo+IA0KPiBIaSBSYXksDQo+IA0KPiBBcyBh biBleGFtcGxlLCBsZXQncyBzYXkgdGhhdCB5b3UgaGF2ZSBtdWx0aXBsZSB2YXJpYW50cyBvZiBz ZXJ2ZXJpcHMgLSBlYWNoDQo+IGludGVyZmFjZSBoYXMgaXRzIG93biwgYW5kIGVhY2ggaW50ZXJm YWNlIGhhcyBhIHByb3BlcnR5IGFzIHNheSBpbnRlcmZhY2Ugbm8NCj4gKGV0aF9ubykuDQo+IEl0 IGlzIGxvZ2ljYWwgdG8gYWRkcmVzcyBhIHNlcnZlcmlwIGZvciBhbiBpbnRlcmZhY2UgYXMgJXNl cnZlcmlwJWV0aF9ubyUlLCBhbmQNCj4gaW4gdGhlIGVuZCBnZXQgdGhlIGNvbnRlbnRzIG9mIHZh cmlhYmxlIHNlcnZlcmlwMCAoc2F5IGZvciBldGhfbm8gY29udGFpbmluZyB2YWx1ZQ0KPiAwKS4N Cj4gSW4gZmFjdCwgTGludXggYmFzaCBhbGxvd3MgZG9pbmcgdGhhdCBlYXNpbHkuDQo+IFdlIGFy ZSBkb2luZyBtb3N0IG9mIG91ciB1cGdyYWRlL2NvbmZpZ3VyYXRpb24gc3R1ZmYgdmlhIFNoZWxs IHNjcmlwdHMgd2hpY2ggaXMNCj4gdmVyeSBmbGV4aWJsZSwgZWFzeSBhbmQgZWZmaWNpZW50Lg0K PiBUbyBzdXBwb3J0IGJvb3QgcmVkdW5kYW5jeSwgd2Ugc3VwcG9ydCBtdWx0aXBsZSBzbG90cyBm b3Iga2VybmVsL2R0YnMsIGV0YywNCj4gd2hpY2ggYXJlIGFkZHJlc3NlZCBhcyAldXBkYXRlX3R5 cGVfJXVwZF90eXBlJSUgd2hlcmUgdXBkX3R5cGUgY2FuIGJlDQo+IGR0Yiwga2VybmVsLCBldGMu DQo+IFRoZSBzcGVjIHNheXMgIiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgY2FuIGJlIHVzZWQgb24g dGhlIGNvbW1hbmQtbGluZSBieQ0KPiB1c2luZyAldmFyaWFibGUtbmFtZSUgd2hlcmUgdmFyaWFi bGUtbmFtZSBpcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUncw0KPiBuYW1lLiBWYXJpYWJsZSBz dWJzdGl0dXRpb24gaXMgbm90IHJlY3Vyc2l2ZS4iDQo+IEkgdHJlYXQgaXQgYXMgYW4gZXh0ZW5z aW9uIHRvICV2YXIlIGNhc2U7ICV2YXIgY2FzZSBpcyBub3QgdG91Y2hlZC4gV2hhdCBkbyB5b3UN Cj4gdGhpbms/DQoNCiJWYXJpYWJsZSBzdWJzdGl0dXRpb24gaXMgbm90IHJlY3Vyc2l2ZSIgbWVh bnMgdGhlIGVudmlvcm5tZW50IHZhcmlhYmxlIGRvZXNuJ3Qgc3VwcG9ydCBuZXN0ZWQuIElmIHlv dSB3YW50IHRvIHB1c2ggdGhlIGNoYW5nZSwgeW91IHNob3VsZCBjaGFuZ2UgdGhlIHNwZWMgZmly c3QuIEFuZCB0aGVyZSBpcyBvbmUgdmFyaWFibGUgc3Vic3RpdHV0aW9uIGZsb3cgZmlndXJlLCBp dCBzaG91bGQgYmUgdXBkYXRlIGFzIHdlbGwuDQoNClRoYW5rcywNClpoaWNoYW8NCg0KPiANCj4g UmVnYXJkaW5nIHVuaXQgdGVzdHMuDQo+IEkgdmVyaWZpZWQgdmFyaWFibGVzIHN1YnN0aXR1dGlv bnMgdXNpbmcgJXZhciUgYW5kICV2YXIldmFyMSUlDQo+IGFuZCAlJXZhcjEldmFyJSB0byBtYWtl IHN1cmUgdGhlcmUgd291bGQgYmUgbm8gcmVncmVzc2lvbi4NCj4gT3VyIHNjcmlwdHMgdXNlIHZh cmlhYmxlcyBleHRlbnNpdmVseSwgYW5kIG5vIGlzc3VlcyB3ZXJlIGVuY291bnRlcmVkLg0KPiBQ bGVhc2UgbGV0IG1lIGtub3cgaWYgeW91IG5lZWQgdGhlIHNjcmlwdHMgd2UgYXJlIHVzaW5nLCBh bmQgSSB3aWxsIHNlbmQgdGhlbSB0bw0KPiB5b3UuDQo+IA0KPiBXaGljaCB1bml0IHRlc3RzIGFy ZSBhdmFpbGFibGU/DQo+IA0KPiBUaGFuayB5b3UsDQo+IFZsYWRpbWlyDQo+IA0KPiAtLS0tLU9y aWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBOaSwgUmF5IDxyYXkubmlAaW50ZWwuY29tPg0K PiBTZW50OiBUaHVyc2RheSwgSmFudWFyeSA5LCAyMDIwIDEwOjAzIFBNDQo+IFRvOiBkZXZlbEBl ZGsyLmdyb3Vwcy5pbzsgdmxhZGltaXIub2xvdnlhbm5pa292QGJyb2FkY29tLmNvbTsgR2FvLA0K PiBaaGljaGFvIDx6aGljaGFvLmdhb0BpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFJFOiBbZWRrMi1k ZXZlbF0gW1BBVENIIDEvMV0gU2hlbGxQa2cvQXBwbGljYXRpb246IFN1cHBvcnQgbmVzdGVkDQo+ IHZhcmlhYmxlcyBzdWJzdGl0dXRpb24gZnJvbSBjbWQgbGluZQ0KPiANCj4gVmxhZGltaXIsDQo+ IElzIHRoaXMgZW5oYW5jZW1lbnQgYW4gZXh0ZW5zaW9uIHRvIFNoZWxsIHNwZWMgb3IgdmlvbGF0 aW9uIG9mIFNoZWxsIHNwZWM/DQo+IElmIGl0J3MgYW4gZXh0ZW5zaW9uLCBJIGFtIGhhcHB5IHRv IGhhdmUgc3VjaCBmZWF0dXJlIGltcGxlbWVudGVkLg0KPiBPdGhlcndpc2UsIHdlIG1heSBuZWVk IHRvIGRpc2N1c3MgaW4gdWVmaS5vcmcuDQo+IA0KPiBDYW4geW91IGxpc3QgdGhlIHVuaXQgdGVz dHMgeW91IGhhdmUgZG9uZT8NCj4gDQo+IFRoYW5rcywNCj4gUmF5DQo+IA0KPiA+IC0tLS0tT3Jp Z2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gRnJvbTogZGV2ZWxAZWRrMi5ncm91cHMuaW8gPGRldmVs QGVkazIuZ3JvdXBzLmlvPiBPbiBCZWhhbGYgT2YNCj4gPiBWbGFkaW1pciBPbG92eWFubmlrb3Yg dmlhIEdyb3Vwcy5Jbw0KPiA+IFNlbnQ6IEZyaWRheSwgSmFudWFyeSAxMCwgMjAyMCA2OjA3IEFN DQo+ID4gVG86IGRldmVsQGVkazIuZ3JvdXBzLmlvOyBOaSwgUmF5IDxyYXkubmlAaW50ZWwuY29t PjsgR2FvLCBaaGljaGFvDQo+ID4gPHpoaWNoYW8uZ2FvQGludGVsLmNvbT4NCj4gPiBDYzogVmxh ZGltaXIgT2xvdnlhbm5pa292IDx2bGFkaW1pci5vbG92eWFubmlrb3ZAYnJvYWRjb20uY29tPg0K PiA+IFN1YmplY3Q6IFtlZGsyLWRldmVsXSBbUEFUQ0ggMS8xXSBTaGVsbFBrZy9BcHBsaWNhdGlv bjogU3VwcG9ydCBuZXN0ZWQNCj4gPiB2YXJpYWJsZXMgc3Vic3RpdHV0aW9uIGZyb20gY21kIGxp bmUNCj4gPg0KPiA+IFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIFNoZWxsU3Vic3RpdHV0 ZVZhcmlhYmxlcygpIGRvZXMgbm90DQo+ID4gYWxsb3cgc3Vic3RpdHV0aW9uIG9mIHZhcmlhYmxl cyBuYW1lcyBjb250YWluaW5nIGFub3RoZXIgdmFyaWFibGUNCj4gPiBuYW1lKHMpIGJldHdlZW4g JS4uLiUNCj4gPg0KPiA+IEV4YW1wbGU6ICV0ZXh0JXZhcl9uYW1lJSUgd2hlcmUgdmFyX25hbWUg dmFyaWFibGUgY29udGFpbnMgMC4NCj4gPiBIZXJlIHRoZSB2YXJpYWJsZSB2YWx1ZSB3aGljaCBz aG91bGQgYmUgcmV0dXJuZWQgb24gc3Vic3RpdHV0aW9uIHdvdWxkDQo+ID4gYmUgY29udGVudHMg b2YgdGV4dDAgdmFyaWFibGUuDQo+ID4gVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gd291bGQg cmV0dXJuIG5vdGhpbmcgYXMgJXRleHQwJSB3b3VsZCBiZQ0KPiA+IGVsaW1pbmF0ZWQgYnkgU3Ry aXBVbnJlcGxhY2VkRW52aXJvbm1lbnRWYXJpYWJsZXMoKS4NCj4gPg0KPiA+IE1vZGlmeSB0aGUg Y29kZSBzbyB0aGF0IFN0cmlwVW5yZXBsYWNlZEVudmlyb25tZW50VmFyaWFibGVzIGNoZWNrcyBp Zg0KPiA+IHZhcmlhYmxlIGJldHdlZW4gJS4uLiUgcmVhbGx5IGV4aXN0cy4gSWYgaXQgZG9lcyBu b3QsIGRlbGV0ZSAlLi4uJS4NCj4gPiBJZiBpdCBleGlzdHMsIHByZXNlcnZlIGl0IGFuZCB0ZWxs IHRoZSBjYWxsZXIgdGhhdCBhbm90aGVyIHJ1biBvZg0KPiA+IFNoZWxsQ29udmVydFZhcmlhYmxl cygpIGlzIG5lZWRlZC4gVGhpcyB3YXksIGFueSBuZXN0ZWQgdmFyaWFibGUNCj4gPiBiZXR3ZWVu ICUuLi4lIGNhbiBiZSBlYXNpbHkgcmV0cmlldmVkLg0KPiA+IFJFRjpodHRwczovL2J1Z3ppbGxh LnRpYW5vY29yZS5vcmcvc2hvd19idWcuY2dpP2lkPTI0NTINCj4gPg0KPiA+IFNpZ25lZC1vZmYt Ynk6IFZsYWRpbWlyIE9sb3Z5YW5uaWtvdg0KPiA+IDx2bGFkaW1pci5vbG92eWFubmlrb3ZAYnJv YWRjb20uY29tPg0KPiA+IENvbnRyaWJ1dGVkLXVuZGVyOiBUaWFub0NvcmUgQ29udHJpYnV0aW9u IEFncmVlbWVudCAxLjENCj4gPiAtLS0NCj4gPiAgU2hlbGxQa2cvQXBwbGljYXRpb24vU2hlbGwv U2hlbGwuYyB8IDcxDQo+ID4gKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tDQo+ID4gIDEg ZmlsZSBjaGFuZ2VkLCA1NyBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkNCj4gPg0KPiA+ IGRpZmYgLS1naXQgYS9TaGVsbFBrZy9BcHBsaWNhdGlvbi9TaGVsbC9TaGVsbC5jDQo+ID4gYi9T aGVsbFBrZy9BcHBsaWNhdGlvbi9TaGVsbC9TaGVsbC5jDQo+ID4gaW5kZXggZDE2YWRhZTBlYTMw Li4zNzU2YTcxNzk0ZDEgMTAwNjQ0DQo+ID4gLS0tIGEvU2hlbGxQa2cvQXBwbGljYXRpb24vU2hl bGwvU2hlbGwuYw0KPiA+ICsrKyBiL1NoZWxsUGtnL0FwcGxpY2F0aW9uL1NoZWxsL1NoZWxsLmMN Cj4gPiBAQCAtMTUxMCwxMiArMTUxMCwxNiBAQCBTaGVsbENvbnZlcnRBbGlhcygNCj4gPg0KPiA+ ICAvKioNCj4gPiAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgZWxpbWluYXRlIHVucmVwbGFjZWQgKGFu ZCB0aGVyZWZvcmUgbm9uLWZvdW5kKQ0KPiBlbnZpcm9ubWVudCB2YXJpYWJsZXMuDQo+ID4gLQ0K PiA+ICsgIElmIGEgdmFyaWFibGUgZXhpc3RzIGJldHdlZW4gJS4uLiUsIGl0IHdpbGwgYmUgcHJl c2VydmVkLCBhbmQNCj4gPiArIFZhckV4aXN0cyAgd291bGQgYmUgVFJVRS4NCj4gPiAgICBAcGFy YW1baW4sb3V0XSBDbWRMaW5lICAgVGhlIGNvbW1hbmQgbGluZSB0byB1cGRhdGUuDQo+ID4gKyAg QHBhcmFtW291dF0gVmFyRXhpc3RzICAgIEEgcG9pbnRlciB0byB0aGUgQk9PTEVBTiB3aGljaCBp cyBzZXQgaWYNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBTaGVsbCB2YXJpYWJs ZSBiZXR3ZWVuICUuLi4lIGV4aXN0cy4NCj4gPiAgKiovDQo+ID4gIEVGSV9TVEFUVVMNCj4gPiAg U3RyaXBVbnJlcGxhY2VkRW52aXJvbm1lbnRWYXJpYWJsZXMoDQo+ID4gLSAgSU4gT1VUIENIQVIx NiAqQ21kTGluZQ0KPiA+ICsgIElOIE9VVCBDSEFSMTYgKkNtZExpbmUsDQo+ID4gKyAgT1VUIEJP T0xFQU4gICAqVmFyRXhpc3RzDQo+ID4gICAgKQ0KPiA+ICB7DQo+ID4gICAgQ0hBUjE2ICpGaXJz dFBlcmNlbnQ7DQo+ID4gQEAgLTE1NTgsMTIgKzE1NjIsMzggQEAgU3RyaXBVbnJlcGxhY2VkRW52 aXJvbm1lbnRWYXJpYWJsZXMoDQo+ID4gICAgICBpZiAoRmlyc3RRdW90ZSA9PSBOVUxMIHx8IFNl Y29uZFBlcmNlbnQgPCBGaXJzdFF1b3RlKSB7DQo+ID4gICAgICAgIGlmIChJc1ZhbGlkRW52aXJv bm1lbnRWYXJpYWJsZU5hbWUoRmlyc3RQZXJjZW50LA0KPiA+IFNlY29uZFBlcmNlbnQpKQ0KPiB7 DQo+ID4gICAgICAgICAgLy8NCj4gPiAtICAgICAgICAvLyBXZSBuZWVkIHRvIHJlbW92ZSBmcm9t IEZpcnN0UGVyY2VudCB0byBTZWNvbmRQZXJjZW50DQo+ID4gLSAgICAgICAgLy8NCj4gPiAtICAg ICAgICBDb3B5TWVtKEZpcnN0UGVyY2VudCwgU2Vjb25kUGVyY2VudCArIDEsIFN0clNpemUoU2Vj b25kUGVyY2VudA0KPiArIDEpKTsNCj4gPiAtICAgICAgICAvLw0KPiA+IC0gICAgICAgIC8vIGRv bid0IG5lZWQgdG8gdXBkYXRlIHRoZSBsb2NhdG9yLiAgYm90aCAlIGNoYXJhY3RlcnMgYXJlDQo+ IGdvbmUuDQo+ID4gKyAgICAgICAgLy8gSWYgdGhpcyBTaGVsbCB2YXJpYWJsZSBleGlzdHMsIGNv bnNpZGVyIHRoYXQgYW5vdGhlciBydW4NCj4gPiArIGlzDQo+IG5lZWRlZC4NCj4gPiArICAgICAg ICAvLyBGb3IgZXhhbXBsZSwgY29uc2lkZXIgYSB2YXJpYWJsZSAldmFyJXZhcjIlJSB3aGVuIHZh cjIgaXMgMC4NCj4gPiArICAgICAgICAvLyBBZnRlciB0aGUgZmlyc3QgcnVuLCBpdCBiZWNvbWVz ICV2YXIwJSwgYW5kIGFmdGVyIHRoZQ0KPiA+ICsgc2Vjb25kDQo+IHJ1bg0KPiA+ICsgICAgICAg IC8vIGl0IGNvbnRhaW5zIHRoZSB2YWx1ZSBvZiB2YXIwIHZhcmlhYmxlLg0KPiA+ICsgICAgICAg IC8vIEVsaW1pbmF0ZSB2YXJpYWJsZSBpZiBpdCBkb2VzIG5vdCBleGlzdC4NCj4gPiAgICAgICAg ICAvLw0KPiA+ICsgICAgICAgIENIQVIxNiAqVmFyTmFtZTsNCj4gPiArDQo+ID4gKyAgICAgICAg Ly8gQ29uc2lkZXIgTlVMTCB0ZXJtaW5hdG9yIGFzIHdlbGwNCj4gPiArICAgICAgICBWYXJOYW1l ID0gKENIQVIxNiAqKUFsbG9jYXRlWmVyb1Bvb2woKFNlY29uZFBlcmNlbnQgLQ0KPiBGaXJzdFBl cmNlbnQpICoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZW9mKENIQVIxNikpOw0KPiA+ICsgICAgICAgIGlmIChWYXJOYW1lKSB7DQo+ID4gKyAg ICAgICAgICBDb3B5TWVtKFZhck5hbWUsIEZpcnN0UGVyY2VudCArIDEsDQo+ID4gKyAgICAgICAg ICAgICAgICAgIChTZWNvbmRQZXJjZW50IC0gRmlyc3RQZXJjZW50IC0gMSkgKiBzaXplb2YoQ0hB UjE2KSk7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICBpZiAoIVZhck5hbWUg fHwgIVNoZWxsR2V0RW52aXJvbm1lbnRWYXJpYWJsZShWYXJOYW1lKSkgew0KPiA+ICsgICAgICAg ICAgLy8NCj4gPiArICAgICAgICAgIC8vIFdlIG5lZWQgdG8gcmVtb3ZlIGZyb20gRmlyc3RQZXJj ZW50IHRvIFNlY29uZFBlcmNlbnQuDQo+ID4gKyAgICAgICAgICAvLw0KPiA+ICsgICAgICAgICAg Q29weU1lbShGaXJzdFBlcmNlbnQsIFNlY29uZFBlcmNlbnQgKyAxLA0KPiBTdHJTaXplKFNlY29u ZFBlcmNlbnQgKyAxKSk7DQo+ID4gKyAgICAgICAgICAvLw0KPiA+ICsgICAgICAgICAgLy8gZG9u J3QgbmVlZCB0byB1cGRhdGUgdGhlIGxvY2F0b3IuICBib3RoICUgY2hhcmFjdGVycyBhcmUNCj4g Z29uZS4NCj4gPiArICAgICAgICAgIC8vDQo+ID4gKyAgICAgICAgfSBlbHNlIHsNCj4gPiArICAg ICAgICAgICpWYXJFeGlzdHMgPSBUUlVFOw0KPiA+ICsgICAgICAgICAgLy8NCj4gPiArICAgICAg ICAgIC8vIEluIHRoaXMgY2FzZSwgbG9jYXRvciBuZWVkcyB0byBiZSB1cGRhdGVkIGFzICUNCj4g PiArIGNoYXJhY3RlcnMNCj4gcHJlc2VudC4NCj4gPiArICAgICAgICAgIC8vDQo+ID4gKyAgICAg ICAgICBDdXJyZW50TG9jYXRvciA9IFNlY29uZFBlcmNlbnQgKyAxOw0KPiA+ICsgICAgICAgIH0N Cj4gPiArICAgICAgICBTSEVMTF9GUkVFX05PTl9OVUxMKFZhck5hbWUpOw0KPiA+ICAgICAgICB9 IGVsc2Ugew0KPiA+ICAgICAgICAgIEN1cnJlbnRMb2NhdG9yID0gU2Vjb25kUGVyY2VudCArIDE7 DQo+ID4gICAgICAgIH0NCj4gPiBAQCAtMTU4MSwxMyArMTYxMSwxOCBAQCBTdHJpcFVucmVwbGFj ZWRFbnZpcm9ubWVudFZhcmlhYmxlcygNCj4gPiAgICBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIG5v dCBOVUxMIHRoZSBtZW1vcnkgbXVzdCBiZSBjYWxsZXIgZnJlZWQuDQo+ID4NCj4gPiAgICBAcGFy YW1baW5dIE9yaWdpbmFsQ29tbWFuZExpbmUgICAgVGhlIG9yaWdpbmFsIGNvbW1hbmQgbGluZQ0K PiA+ICsgIEBwYXJhbVtvdXRdIE5lZWRFeHRyYVJ1biAgICAgICAgICBJbmRpY2F0aW9uIHRoYXQg dGhlIGNhbGxlciBuZWVkcyB0bw0KPiByZXBlYXQNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGhpcyBjYWxsIHRvIGNvbnZlcnQgdmFyaWFibGVzIGFzDQo+IHRoZXJl IGFyZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZyB2 YXJpYWJsZShzKSBiZXR3ZWVuICUuLiUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcHJlc2VudCBhZnRlciB0aGUgY2FsbC4NCj4gPg0KPiA+ICAgIEByZXR2YWwgTlVM TCAgICAgICAgICAgICAgICAgICAgICBBbiBlcnJvciBvY2N1cnJlZC4NCj4gPiAgICBAcmV0dXJu ICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG5ldyBjb21tYW5kIGxpbmUgd2l0aCBubw0K PiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgcHJlc2VudC4NCj4gPiAgKiovDQo+ID4gIENIQVIxNioN Cj4gPiAgU2hlbGxDb252ZXJ0VmFyaWFibGVzICgNCj4gPiAtICBJTiBDT05TVCBDSEFSMTYgKk9y aWdpbmFsQ29tbWFuZExpbmUNCj4gPiArICBJTiBDT05TVCBDSEFSMTYgKk9yaWdpbmFsQ29tbWFu ZExpbmUsDQo+ID4gKyAgT1VUIEJPT0xFQU4gICAgICpOZWVkRXh0cmFSdW4NCj4gPiAgICApDQo+ ID4gIHsNCj4gPiAgICBDT05TVCBDSEFSMTYgICAgICAgICpNYXN0ZXJFbnZMaXN0Ow0KPiA+IEBA IC0xNjAxLDExICsxNjM2LDEzIEBAIFNoZWxsQ29udmVydFZhcmlhYmxlcyAoDQo+ID4gICAgQUxJ QVNfTElTVCAgICAgICAgICAqQWxpYXNMaXN0Tm9kZTsNCj4gPg0KPiA+ICAgIEFTU0VSVChPcmln aW5hbENvbW1hbmRMaW5lICE9IE5VTEwpOw0KPiA+ICsgIEFTU0VSVChOZWVkRXh0cmFSdW4gIT0g TlVMTCk7DQo+ID4NCj4gPiAgICBJdGVtU2l6ZSAgICAgICAgICA9IDA7DQo+ID4gICAgTmV3U2l6 ZSAgICAgICAgICAgPSBTdHJTaXplKE9yaWdpbmFsQ29tbWFuZExpbmUpOw0KPiA+ICAgIEN1cnJl bnRTY3JpcHRGaWxlID0gU2hlbGxDb21tYW5kR2V0Q3VycmVudFNjcmlwdEZpbGUoKTsNCj4gPiAg ICBUZW1wICAgICAgICAgICAgICA9IE5VTEw7DQo+ID4gKyAgKk5lZWRFeHRyYVJ1biAgICAgPSBG QUxTRTsNCj4gPg0KPiA+ICAgIC8vL0B0b2RvIHVwZGF0ZSB0aGlzIHRvIGhhbmRsZSB0aGUgJTAg LSAlOSBmb3Igc2NyaXB0aW5nIG9ubHkNCj4gPiAoYm9ycm93DQo+IGZyb20gbGluZSAxMjU2IGFy ZWEpID8gPyA/DQo+ID4NCj4gPiBAQCAtMTY5OCw3ICsxNzM1LDcgQEAgU2hlbGxDb252ZXJ0VmFy aWFibGVzICgNCj4gPiAgICAvLw0KPiA+ICAgIC8vIFJlbW92ZSBub24tZXhpc3RlbnQgZW52aXJv bm1lbnQgdmFyaWFibGVzDQo+ID4gICAgLy8NCj4gPiAtICBTdHJpcFVucmVwbGFjZWRFbnZpcm9u bWVudFZhcmlhYmxlcyhOZXdDb21tYW5kTGluZTEpOw0KPiA+ICsgIFN0cmlwVW5yZXBsYWNlZEVu dmlyb25tZW50VmFyaWFibGVzKE5ld0NvbW1hbmRMaW5lMSwgTmVlZEV4dHJhUnVuKTsNCj4gPg0K PiA+ICAgIC8vDQo+ID4gICAgLy8gTm93IGNsZWFudXAgYW55IHN0cmFnZ2xlciBpbnRlbnRpb25h bGx5IGlnbm9yZWQgIiUiIGNoYXJhY3RlcnMNCj4gPiBAQCAtMTg0NSwxMiArMTg4MiwxOCBAQCBT aGVsbFN1YnN0aXR1dGVWYXJpYWJsZXMoDQo+ID4gICAgKQ0KPiA+ICB7DQo+ID4gICAgQ0hBUjE2 ICAgICAgKk5ld0NtZExpbmU7DQo+ID4gLSAgTmV3Q21kTGluZSA9IFNoZWxsQ29udmVydFZhcmlh YmxlcygqQ21kTGluZSk7DQo+ID4gLSAgU0hFTExfRlJFRV9OT05fTlVMTCgqQ21kTGluZSk7DQo+ ID4gLSAgaWYgKE5ld0NtZExpbmUgPT0gTlVMTCkgew0KPiA+IC0gICAgcmV0dXJuIChFRklfT1VU X09GX1JFU09VUkNFUyk7DQo+ID4gKyAgQk9PTEVBTiAgICAgTmVlZEV4dHJhUnVuOw0KPiA+ICsN Cj4gPiArICBOZWVkRXh0cmFSdW4gPSBUUlVFOw0KPiA+ICsgIHdoaWxlIChOZWVkRXh0cmFSdW4p IHsNCj4gPiArICAgIE5ld0NtZExpbmUgPSBTaGVsbENvbnZlcnRWYXJpYWJsZXMoKkNtZExpbmUs ICZOZWVkRXh0cmFSdW4pOw0KPiA+ICsgICAgU0hFTExfRlJFRV9OT05fTlVMTCgqQ21kTGluZSk7 DQo+ID4gKyAgICBpZiAoTmV3Q21kTGluZSA9PSBOVUxMKSB7DQo+ID4gKyAgICAgIHJldHVybiAo RUZJX09VVF9PRl9SRVNPVVJDRVMpOw0KPiA+ICsgICAgfQ0KPiA+ICsgICAgKkNtZExpbmUgPSBO ZXdDbWRMaW5lOw0KPiA+ICAgIH0NCj4gPiAtICAqQ21kTGluZSA9IE5ld0NtZExpbmU7DQo+ID4g Kw0KPiA+ICAgIHJldHVybiAoRUZJX1NVQ0NFU1MpOw0KPiA+ICB9DQo+ID4NCj4gPiAtLQ0KPiA+ IDIuMTcuMQ0KPiA+DQo+ID4NCj4gPiANCg==