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.web08.10304.1603897682913645945 for ; Wed, 28 Oct 2020 08:08:03 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=juPbyNtk; spf=pass (domain: intel.com, ip: 134.134.136.20, mailfrom: bob.c.feng@intel.com) IronPort-SDR: UkqrlkQ7qA2iEoQBBCI5vLl3t5UOcAFKwGfrY30jPCs2/rnUnKtoa9gxaU6O0Ix+4iazK+lOpw L8TgPR68XZJQ== X-IronPort-AV: E=McAfee;i="6000,8403,9788"; a="155241660" X-IronPort-AV: E=Sophos;i="5.77,426,1596524400"; d="scan'208";a="155241660" 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/ECDHE-RSA-AES256-GCM-SHA384; 28 Oct 2020 08:08:01 -0700 IronPort-SDR: pMgJ+wUhAc7w3PwKIoiojJa5GqUdJCbEPKL6snwtKroUkezKogzTYhWQsDHSwP230Naf5LROWP cyKtzlpJT9kg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.77,426,1596524400"; d="scan'208";a="351039058" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by fmsmga004.fm.intel.com with ESMTP; 28 Oct 2020 08:08:01 -0700 Received: from orsmsx601.amr.corp.intel.com (10.22.229.14) by ORSMSX602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 28 Oct 2020 08:08:00 -0700 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5 via Frontend Transport; Wed, 28 Oct 2020 08:08:00 -0700 Received: from NAM04-BN8-obe.outbound.protection.outlook.com (104.47.74.48) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.1713.5; Wed, 28 Oct 2020 08:08:00 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Mz8IBQZ58NkOaLqzrFJYhGov5tYl4iRJrDXuLG+hJns21ftWRah/FKHi5WC6QnmGSi1nYyFTBLKJXaLIV1wo0FNoG/YYhX2KCVbR9+zCAyydf07anWgasqUxd9XHFwKkAZQtjYx9nXini18iEzD7aKObCFND7r9x2wZB1Xe2LHGprDZHYrR4rfgXz3Yg/Zk+pmJYpiLc4ZTV0NjMPr2lQdf8zr4sotaTaAWttlYD2Om+xLoY+A8aWasYnpcf/9/gCbIRPXOhja38o+KkYeyKRgy3WV8++WwjY7Nr+0hFP6dkP8qHyipscvlV8+fzOCnx5QY8ZG14SDb3XMGX6Sy/ew== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=X7PNwBmrWEnzgxPPlTJcIgHG1ybcJby9g0WJuZoRRog=; b=IV7P7Q5C1QwdWXy9Z2HxsrzW/V9IcviBimc8Nq3RT4v7TUGj39yT4FFCa736ozF+NtbXDkxYjcNaOqbbYIZlOTeDSBNsT6qAW0mnI7SSBVPyK1QGO+VX3EVgy1lZJM2JNzegshESq5H4RXQFnQoVKVgaNjs91jR+bVAshBoERBxmNdFSAoBPAQv5SQoVMux2gZWMLJ0ADCK4BxNyiA2Fdz0uUABIDg/Lp6J2vsMQQwCxxyxDoGCqeNCr++ciC+kdfzG0KfLYBo86517/CkyQ4Kpr19l3ecmbl6d0AaJVbODVPu5RgnZp9OPD6vEgzY76rWxbNQGn22cnq8F1Vn5RLA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=X7PNwBmrWEnzgxPPlTJcIgHG1ybcJby9g0WJuZoRRog=; b=juPbyNtkecvs2kylCOtNZlpkoat+sPYx8CvMeCyFe6+vIFbm/ol/gN1sgWpx4bkTk4x99B9ey4bshAXBNpsMvR6ebnXnbYiz6lKnrYtVOGHjXHfWR9KNNkAhka7tb5wj7kj+1LX/SkeQaBG7xVfmikaZ8qY7zptuxPDeb7VeW/Q= Received: from DM6PR11MB4073.namprd11.prod.outlook.com (2603:10b6:5:19f::22) by DM5PR1101MB2267.namprd11.prod.outlook.com (2603:10b6:4:52::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3477.20; Wed, 28 Oct 2020 15:07:57 +0000 Received: from DM6PR11MB4073.namprd11.prod.outlook.com ([fe80::cd42:ed68:e66a:1eaa]) by DM6PR11MB4073.namprd11.prod.outlook.com ([fe80::cd42:ed68:e66a:1eaa%7]) with mapi id 15.20.3499.019; Wed, 28 Oct 2020 15:07:57 +0000 From: "Bob Feng" To: "devel@edk2.groups.io" , "gaoliming@byosoft.com.cn" CC: "Chen, Christine" , "Kinney, Michael D" Subject: Re: [edk2-devel] [Patch V2] BaseTools: Enable Module Scope Structure Pcd Thread-Topic: [edk2-devel] [Patch V2] BaseTools: Enable Module Scope Structure Pcd Thread-Index: AQHWouJCQxf+y8L01Em2JzRSBZ2HyqmpUr5wgAG5yoCAAiOiAA== Date: Wed, 28 Oct 2020 15:07:57 +0000 Message-ID: References: <163E2552F529AEC6.4805@groups.io> <002801d6ac29$26c30540$74490fc0$@byosoft.com.cn> In-Reply-To: <002801d6ac29$26c30540$74490fc0$@byosoft.com.cn> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-version: 11.5.1.3 dlp-product: dlpe-windows dlp-reaction: no-action authentication-results: edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=none action=none header.from=intel.com; x-originating-ip: [192.102.204.37] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: efffd041-e949-4ef8-6fcb-08d87b534122 x-ms-traffictypediagnostic: DM5PR1101MB2267: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:305; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: xZbA5A2fQSSbs8DDp3TiThdo+9IR0dmLmnKccQeURPtipcA/YO5vqPJXC6k2Jwiy3k6t2gFnP/U5ddqNRz4UXbdBM3ue/aEgo5Y1FryI/Xqr4ZoQ2T8C+x1pLNArvwdJgRW1cOZEkcShxyRSOEI2dZfHk7rn4mLPFXIlD7mKKJQMleWNTlPv+ZiRNdSkwDFmIHUp1aa/19MMuBuzbOJH6XMgtN7dmoZSYIt0oCoXZ56yHFYKCQZzusuguQkU1cTIgcAxpvEmBWtV4sbFBiMjrY34+jryDOipOcvzEMCQ7+oXVr2h5/p5xwfIOpUOalFZrjctfSXxmZ+KT9BLrT/BikxoSpAm47eqXbTFZIrZWkRy+6SbFC+wFlMs8B87nVrInNWz8R1MWIHQxWiCX3eP1j6KJO0+Hx94AaLvnGP+JXqOHyqFyacaGAhefXNzxSQ0pXb8SrnBMYKjp+ABeeixskP2oiUY1rX78DWTiDYnofY= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR11MB4073.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(39860400002)(376002)(366004)(396003)(136003)(478600001)(86362001)(76116006)(66446008)(52536014)(26005)(110136005)(107886003)(6506007)(66556008)(55016002)(71200400001)(30864003)(9686003)(5660300002)(54906003)(8936002)(966005)(66476007)(53546011)(64756008)(186003)(66946007)(7696005)(316002)(2906002)(8676002)(83380400001)(33656002)(4326008)(21314003)(559001)(579004)(460985005);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: 9Qulaq1Z5LxChFUxNERkBtrz6VLjL94GOEeyxAaeSetgI8kIeCCJcBXnibPU3wQFHUyh1MXB/mci1S7+xOtSceCUAMlMXfaqed7jhLsydO3ylq6MG4mCCy3u0wznLa7yMziLuWIC+IZUdbPeRCC5KbHtDVW/novP76LEzJi4PflmoN2y3XeAWntw/CdN+BpF8wXjZkihsVyoWbptZIh3M0t3+JCHKtvZsW8BWoMx88X+/LrNkARHGxPwJvenRNSexDMn7oBBoti1g9mgdP/w5PJshF0IdFutE3S9NFi0eHTGZLHjqCob2unvfKcALnW2YOm6UvPyjmsjRxzqP6r8IzL+gLe8AK2G3M6sAtkEOasdOP88idClV2pBwg3pkgmsFx4kjDwm/VyjIdSm2Uy2eeOcgETrUDuCVi10li1JbMDMRlBfR7bRYLr7fBD4dNGKqYPDHZLZrhiJL78Etkem8P1FpB5fIEXuOiM1IpR/q6piolLDcn+eCN55dSdNUmOU85dmSa2MFh7O7DJ3k12Yy2U5TWUxFj71OgFPxcuf49avXF44ld38K58mWOrryUn0FDU5hjyhVGS4P78OUFO/J8Aip+NpzBhMAi+EMTQSko5LT2xKPF9whaeBi+f9yOegjPq4J32GMjHBXeRe35jtvg== MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM6PR11MB4073.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: efffd041-e949-4ef8-6fcb-08d87b534122 X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Oct 2020 15:07:57.7323 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: sL7QaI5ZyV1lQT88Tk4x6W5Y02KG8uW2RaaOj1OfVfdvz9yUwept9xpuPRdDsI36R2VTIIK2QamwptroXOfZFw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR1101MB2267 Return-Path: bob.c.feng@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 TGltaW5nLA0KDQpZb3UgY2FuIHZlcmlmeSB0aGlzIHBhdGNoIHdpdGggTWlrZSdzIGNhc2UuDQoN CkNsb25lIE1pa2UncyBlZGsyIHJlcG8sIGFuZCBjaGVja291dCB0aGUgYnJhbmNoIEJ1Z194eHhf Q3J5cHRvUGtnX1VzZU1vZHVsZVNjb3BlZFBjZHMNCmh0dHBzOi8vZ2l0aHViLmNvbS9tZGtpbm5l eS9lZGsyL3RyZWUvQnVnX3h4eF9DcnlwdG9Qa2dfVXNlTW9kdWxlU2NvcGVkUGNkcw0KDQpUaGVu IGJ1aWxkIHRoZSBDcnlwdG9Qa2cuDQoNCmJ1aWxkIC1wIENyeXB0b1BrZ1xDcnlwdG9Qa2cuZHNj IC1hIElBMzIgLXkgcmVwb3J0LnR4dA0KDQpUaGFua3MsDQpCb2INCg0KLS0tLS1PcmlnaW5hbCBN ZXNzYWdlLS0tLS0NCkZyb206IGRldmVsQGVkazIuZ3JvdXBzLmlvIDxkZXZlbEBlZGsyLmdyb3Vw cy5pbz4gT24gQmVoYWxmIE9mIGdhb2xpbWluZw0KU2VudDogVHVlc2RheSwgT2N0b2JlciAyNywg MjAyMCAyOjIwIFBNDQpUbzogRmVuZywgQm9iIEMgPGJvYi5jLmZlbmdAaW50ZWwuY29tPjsgZGV2 ZWxAZWRrMi5ncm91cHMuaW8NCkNjOiBDaGVuLCBDaHJpc3RpbmUgPHl1d2VpLmNoZW5AaW50ZWwu Y29tPjsgS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPg0KU3Vi amVjdDog5Zue5aSNOiBbZWRrMi1kZXZlbF0gW1BhdGNoIFYyXSBCYXNlVG9vbHM6IEVuYWJsZSBN b2R1bGUgU2NvcGUgU3RydWN0dXJlIFBjZA0KDQpCb2I6DQogSSB3aWxsIHJldmlldyB0aGlzIGNo YW5nZSB0aGlzIHdlZWsuIENhbiB5b3Ugc2hhcmUgeW91ciB0ZXN0IGNhc2U/IEkgYWxzbw0Kd2Fu dCB0byBjaGVjayB0aGUgYnVpbGQgb3V0cHV0LiANCg0KVGhhbmtzDQpMaW1pbmcNCj4gLS0tLS3p gq7ku7bljp/ku7YtLS0tLQ0KPiDlj5Hku7bkuro6IEZlbmcsIEJvYiBDIDxib2IuYy5mZW5nQGlu dGVsLmNvbT4NCj4g5Y+R6YCB5pe26Ze0OiAyMDIw5bm0MTDmnIgyNuaXpSAxMjowMA0KPiDmlLbk u7bkuro6IGRldmVsQGVkazIuZ3JvdXBzLmlvOyBGZW5nLCBCb2IgQyA8Ym9iLmMuZmVuZ0BpbnRl bC5jb20+OyBMaW1pbmcNCj4gR2FvIDxnYW9saW1pbmdAYnlvc29mdC5jb20uY24+DQo+IOaKhOmA gTogQ2hlbiwgQ2hyaXN0aW5lIDx5dXdlaS5jaGVuQGludGVsLmNvbT47IEtpbm5leSwgTWljaGFl bCBEDQo+IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4NCj4g5Li76aKYOiBSRTogW2VkazIt ZGV2ZWxdIFtQYXRjaCBWMl0gQmFzZVRvb2xzOiBFbmFibGUgTW9kdWxlIFNjb3BlIFN0cnVjdHVy ZQ0KPiBQY2QNCj4gDQo+IExpbWluZywgd291bGQgeW91IHJldmlldyB0aGlzIHBhdGNoPw0KPiAN Cj4gVGhhbmtzLA0KPiBCb2INCj4gDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZy b206IGRldmVsQGVkazIuZ3JvdXBzLmlvIDxkZXZlbEBlZGsyLmdyb3Vwcy5pbz4gT24gQmVoYWxm IE9mIEJvYiBGZW5nDQo+IFNlbnQ6IFRodXJzZGF5LCBPY3RvYmVyIDE1LCAyMDIwIDY6NTkgUE0N Cj4gVG86IGRldmVsQGVkazIuZ3JvdXBzLmlvDQo+IENjOiBMaW1pbmcgR2FvIDxnYW9saW1pbmdA Ynlvc29mdC5jb20uY24+OyBDaGVuLCBDaHJpc3RpbmUNCj4gPHl1d2VpLmNoZW5AaW50ZWwuY29t Pg0KPiBTdWJqZWN0OiBbZWRrMi1kZXZlbF0gW1BhdGNoIFYyXSBCYXNlVG9vbHM6IEVuYWJsZSBN b2R1bGUgU2NvcGUgU3RydWN0dXJlDQo+IFBjZA0KPiANCj4gVGhpcyBwYXRjaCBpcyB0byBlbmFi bGUgdGhlIE1vZHVsZSBzY29wZWQgU3RydWN0dXJlIFBjZCB1c2FnZS4NCj4gVXNlciBjYW4gc2V0 IHN0cnVjdHVyZSBwY2QgZmllbGQgdmFsdWUgaW4gbW9kdWxlIHNjb3BlLiBGb3IgZXhhbXBsZSwN Cj4gdW5kZXIgdGhlIFtjb21wb25lbnRzXSBzZWN0aW9uIG9mIGEgZHNjIGZpbGUsIHVzZXIgY2Fu IG92ZXJyaWRlIHNvbWUNCj4gZmllbGQgdmFsdWUgZm9yIGEgc3BlY2lmaWMgbW9kdWxlLg0KPiAN Cj4gICBQYWNrYWdlL01vZHVsZS5pbmZ7DQo+ICAgICAgIDxQY2RzRml4ZWRBdEJ1aWxkPg0KPiAg ICAgICBnVWVmaVRva2VuU3BhY2VHdWlkLlN0cnVjdHVyZVBjZE1vZHVsZS5GaWVsZE5hbWUgfCA1 DQo+ICAgfQ0KPiANCj4gU2lnbmVkLW9mZi1ieTogQm9iIEZlbmcgPGJvYi5jLmZlbmdAaW50ZWwu Y29tPg0KPiBDYzogTGltaW5nIEdhbyA8Z2FvbGltaW5nQGJ5b3NvZnQuY29tLmNuPg0KPiBDYzog WXV3ZWkgQ2hlbiA8eXV3ZWkuY2hlbkBpbnRlbC5jb20+DQo+IC0tLQ0KPiBWMjogRml4ZWQgdGhl IGluY29ycmVjdCBmb3JtYXQgaW4gYnVpbGQgcmVwb3J0Lg0KPiAgQmFzZVRvb2xzL1NvdXJjZS9Q eXRob24vQXV0b0dlbi9EYXRhUGlwZS5weSAgIHwgICA1ICstDQo+ICAuLi4vU291cmNlL1B5dGhv bi9BdXRvR2VuL01vZHVsZUF1dG9HZW4ucHkgICAgfCAgIDQgKy0NCj4gIC4uLi9QeXRob24vQXV0 b0dlbi9Nb2R1bGVBdXRvR2VuSGVscGVyLnB5ICAgICB8ICAxMCArLQ0KPiAgLi4uL1NvdXJjZS9Q eXRob24vQXV0b0dlbi9QbGF0Zm9ybUF1dG9HZW4ucHkgIHwgICA4ICstDQo+ICAuLi4vUHl0aG9u L1dvcmtzcGFjZS9CdWlsZENsYXNzT2JqZWN0LnB5ICAgICAgfCAgMTIgKw0KPiAgLi4uL1NvdXJj ZS9QeXRob24vV29ya3NwYWNlL0RzY0J1aWxkRGF0YS5weSAgIHwgMjQzDQo+ICsrKysrKysrKysr KysrKystLQ0KPiAgQmFzZVRvb2xzL1NvdXJjZS9QeXRob24vYnVpbGQvQnVpbGRSZXBvcnQucHkg IHwgMTA5ICsrKystLS0tDQo+ICA3IGZpbGVzIGNoYW5nZWQsIDMxOSBpbnNlcnRpb25zKCspLCA3 MiBkZWxldGlvbnMoLSkNCj4gDQo+IGRpZmYgLS1naXQgYS9CYXNlVG9vbHMvU291cmNlL1B5dGhv bi9BdXRvR2VuL0RhdGFQaXBlLnB5DQo+IGIvQmFzZVRvb2xzL1NvdXJjZS9QeXRob24vQXV0b0dl bi9EYXRhUGlwZS5weQ0KPiBpbmRleCA1MDQwM2ZiZmI1Li44NmFjMmI5MjhkIDEwMDc1NQ0KPiAt LS0gYS9CYXNlVG9vbHMvU291cmNlL1B5dGhvbi9BdXRvR2VuL0RhdGFQaXBlLnB5DQo+ICsrKyBi L0Jhc2VUb29scy9Tb3VyY2UvUHl0aG9uL0F1dG9HZW4vRGF0YVBpcGUucHkNCj4gQEAgLTcwLDEz ICs3MCwxNCBAQCBjbGFzcyBNZW1vcnlEYXRhUGlwZShEYXRhUGlwZSk6DQo+ICAgICAgICAgICAg ICB9DQo+IA0KPiAgICAgICAgICAjUGxhdGZvcm0gTW9kdWxlIFBjZHMNCj4gICAgICAgICAgTW9k dWxlUGNkcyA9IHt9DQo+ICAgICAgICAgIGZvciBtIGluIFBsYXRmb3JtSW5mby5QbGF0Zm9ybS5N b2R1bGVzOg0KPiAtICAgICAgICAgICAgbV9wY2RzID0gIFBsYXRmb3JtSW5mby5QbGF0Zm9ybS5N b2R1bGVzW21dLlBjZHMNCj4gKyAgICAgICAgICAgIG1vZHVsZSA9IFBsYXRmb3JtSW5mby5QbGF0 Zm9ybS5Nb2R1bGVzW21dDQo+ICsgICAgICAgICAgICBtX3BjZHMgPSAgbW9kdWxlLlBjZHMNCj4g ICAgICAgICAgICAgIGlmIG1fcGNkczoNCj4gLSAgICAgICAgICAgICAgICBNb2R1bGVQY2RzWyht LkZpbGUsbS5Sb290LG0uQXJjaCldID0gW1BDRF9EQVRBKA0KPiArICAgICAgICAgICAgICAgIE1v ZHVsZVBjZHNbbW9kdWxlLkd1aWRdID0gW1BDRF9EQVRBKA0KPiAgICAgICAgICAgICAgcGNkLlRv a2VuQ05hbWUscGNkLlRva2VuU3BhY2VHdWlkQ05hbWUscGNkLlR5cGUsDQo+ICAgICAgICAgICAg ICBwY2QuRGF0dW1UeXBlLHBjZC5Ta3VJbmZvTGlzdCxwY2QuRGVmYXVsdFZhbHVlLA0KPiANCj4g cGNkLk1heERhdHVtU2l6ZSxwY2QuVXNlckRlZmluZWREZWZhdWx0U3RvcmVzRmxhZyxwY2QudmFs aWRhdGVyYW5nZXMsDQo+IA0KPiBwY2QudmFsaWRsaXN0cyxwY2QuZXhwcmVzc2lvbnMscGNkLkN1 c3RvbUF0dHJpYnV0ZSxwY2QuVG9rZW5WYWx1ZSkNCj4gICAgICAgICAgICAgIGZvciBwY2QgaW4g UGxhdGZvcm1JbmZvLlBsYXRmb3JtLk1vZHVsZXNbbV0uUGNkcy52YWx1ZXMoKV0NCj4gZGlmZiAt LWdpdCBhL0Jhc2VUb29scy9Tb3VyY2UvUHl0aG9uL0F1dG9HZW4vTW9kdWxlQXV0b0dlbi5weQ0K PiBiL0Jhc2VUb29scy9Tb3VyY2UvUHl0aG9uL0F1dG9HZW4vTW9kdWxlQXV0b0dlbi5weQ0KPiBp bmRleCBlZWJmNmU4N2Y1Li5kNzBiMGQ3YWU4IDEwMDc1NQ0KPiAtLS0gYS9CYXNlVG9vbHMvU291 cmNlL1B5dGhvbi9BdXRvR2VuL01vZHVsZUF1dG9HZW4ucHkNCj4gKysrIGIvQmFzZVRvb2xzL1Nv dXJjZS9QeXRob24vQXV0b0dlbi9Nb2R1bGVBdXRvR2VuLnB5DQo+IEBAIC0xMDMwLDExICsxMDMw LDExIEBAIGNsYXNzIE1vZHVsZUF1dG9HZW4oQXV0b0dlbik6DQo+ICAgICAgIyAgIEByZXR2YWwg ICAgIGxpc3QgICAgICAgICAgICAgICAgICAgIFRoZSBsaXN0IG9mIFBDRA0KPiAgICAgICMNCj4g ICAgICBAY2FjaGVkX3Byb3BlcnR5DQo+ICAgICAgZGVmIE1vZHVsZVBjZExpc3Qoc2VsZik6DQo+ ICAgICAgICAgICMgYXBwbHkgUENEIHNldHRpbmdzIGZyb20gcGxhdGZvcm0NCj4gLSAgICAgICAg UmV0VmFsID0gc2VsZi5QbGF0Zm9ybUluZm8uQXBwbHlQY2RTZXR0aW5nKHNlbGYuTW9kdWxlLA0K PiBzZWxmLk1vZHVsZS5QY2RzKQ0KPiArICAgICAgICBSZXRWYWwgPSBzZWxmLlBsYXRmb3JtSW5m by5BcHBseVBjZFNldHRpbmcoc2VsZiwNCnNlbGYuTW9kdWxlLlBjZHMpDQo+IA0KPiAgICAgICAg ICByZXR1cm4gUmV0VmFsDQo+ICAgICAgQGNhY2hlZF9wcm9wZXJ0eQ0KPiAgICAgIGRlZiBfUGNk Q29tbWVudHMoc2VsZik6DQo+ICAgICAgICAgIFJlVmFsID0gT3JkZXJlZExpc3REaWN0KCkNCj4g QEAgLTEwNjEsMTEgKzEwNjEsMTEgQEAgY2xhc3MgTW9kdWxlQXV0b0dlbihBdXRvR2VuKToNCj4g ICAgICAgICAgICAgICAgICAjIHNraXAgZHVwbGljYXRlZCBQQ0RzDQo+ICAgICAgICAgICAgICAg ICAgaWYgS2V5IGluIHNlbGYuTW9kdWxlLlBjZHMgb3IgS2V5IGluIFBjZHM6DQo+ICAgICAgICAg ICAgICAgICAgICAgIGNvbnRpbnVlDQo+ICAgICAgICAgICAgICAgICAgUGNkcy5hZGQoS2V5KQ0K PiAgICAgICAgICAgICAgICAgIFBjZHNJbkxpYnJhcnlbS2V5XSA9IGNvcHkuY29weShMaWJyYXJ5 LlBjZHNbS2V5XSkNCj4gLSAgICAgICAgICAgIFJldFZhbC5leHRlbmQoc2VsZi5QbGF0Zm9ybUlu Zm8uQXBwbHlQY2RTZXR0aW5nKHNlbGYuTW9kdWxlLA0KPiBQY2RzSW5MaWJyYXJ5LCBMaWJyYXJ5 PUxpYnJhcnkpKQ0KPiArICAgICAgICAgICAgUmV0VmFsLmV4dGVuZChzZWxmLlBsYXRmb3JtSW5m by5BcHBseVBjZFNldHRpbmcoc2VsZiwNCj4gUGNkc0luTGlicmFyeSwgTGlicmFyeT1MaWJyYXJ5 KSkNCj4gICAgICAgICAgcmV0dXJuIFJldFZhbA0KPiANCj4gICAgICAjIyBHZXQgdGhlIEdVSUQg dmFsdWUgbWFwcGluZw0KPiAgICAgICMNCj4gICAgICAjICAgQHJldHZhbCAgICAgZGljdCAgICBU aGUgbWFwcGluZyBiZXR3ZWVuIEdVSUQgY25hbWUgYW5kIGl0cw0KPiB2YWx1ZQ0KPiBkaWZmIC0t Z2l0IGEvQmFzZVRvb2xzL1NvdXJjZS9QeXRob24vQXV0b0dlbi9Nb2R1bGVBdXRvR2VuSGVscGVy LnB5DQo+IGIvQmFzZVRvb2xzL1NvdXJjZS9QeXRob24vQXV0b0dlbi9Nb2R1bGVBdXRvR2VuSGVs cGVyLnB5DQo+IGluZGV4IDlkZDkzYjliZWIuLjhlNjA2NDNkMWYgMTAwNjQ0DQo+IC0tLSBhL0Jh c2VUb29scy9Tb3VyY2UvUHl0aG9uL0F1dG9HZW4vTW9kdWxlQXV0b0dlbkhlbHBlci5weQ0KPiAr KysgYi9CYXNlVG9vbHMvU291cmNlL1B5dGhvbi9BdXRvR2VuL01vZHVsZUF1dG9HZW5IZWxwZXIu cHkNCj4gQEAgLTQ3NywxMiArNDc3LDEzIEBAIGNsYXNzIFBsYXRmb3JtSW5mbyhBdXRvR2VuSW5m byk6DQo+ICAgICAgICAgICAgICAgICAgU2t1TmFtZSA9IFRBQl9ERUZBVUxUDQo+ICAgICAgICAg ICAgICBUb1BjZC5Ta3VJbmZvTGlzdCA9IHsNCj4gICAgICAgICAgICAgICAgICBTa3VOYW1lIDog U2t1SW5mb0NsYXNzKFNrdU5hbWUsDQo+IHNlbGYuUGxhdGZvcm0uU2t1SWRzW1NrdU5hbWVdWzBd LCAnJywgJycsICcnLCAnJywgJycsIFRvUGNkLkRlZmF1bHRWYWx1ZSkNCj4gICAgICAgICAgICAg IH0NCj4gDQo+IC0gICAgZGVmIEFwcGx5UGNkU2V0dGluZyhzZWxmLCBNb2R1bGUsIFBjZHMsIExp YnJhcnk9IiIpOg0KPiArICAgIGRlZiBBcHBseVBjZFNldHRpbmcoc2VsZiwgTWEsIFBjZHMsIExp YnJhcnk9IiIpOg0KPiAgICAgICAgICAjIGZvciBlYWNoIFBDRCBpbiBtb2R1bGUNCj4gKyAgICAg ICAgTW9kdWxlPU1hLk1vZHVsZQ0KPiAgICAgICAgICBmb3IgTmFtZSwgR3VpZCBpbiBQY2RzOg0K PiAgICAgICAgICAgICAgUGNkSW5Nb2R1bGUgPSBQY2RzW05hbWUsIEd1aWRdDQo+ICAgICAgICAg ICAgICAjIGZpbmQgb3V0IHRoZSBQQ0Qgc2V0dGluZyBpbiBwbGF0Zm9ybQ0KPiAgICAgICAgICAg ICAgaWYgKE5hbWUsIEd1aWQpIGluIHNlbGYuUGNkczoNCj4gICAgICAgICAgICAgICAgICBQY2RJ blBsYXRmb3JtID0gc2VsZi5QY2RzW05hbWUsIEd1aWRdDQo+IEBAIC01MDUsMTMgKzUwNiwxNiBA QCBjbGFzcyBQbGF0Zm9ybUluZm8oQXV0b0dlbkluZm8pOg0KPiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlDQo+IChHdWlkLCBOYW1lLCBz dHIoTW9kdWxlKSksDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGU9c2Vs Zi5NZXRhRmlsZQ0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQo+IA0KPiAg ICAgICAgICAjIG92ZXJyaWRlIFBDRCBzZXR0aW5ncyB3aXRoIG1vZHVsZSBzcGVjaWZpYyBzZXR0 aW5nDQo+ICsgICAgICAgIE1vZHVsZVNjb3BlUGNkcyA9IHNlbGYuRGF0YVBpcGUuR2V0KCJNT0xf UENEUyIpDQo+ICAgICAgICAgIGlmIE1vZHVsZSBpbiBzZWxmLlBsYXRmb3JtLk1vZHVsZXM6DQo+ ICAgICAgICAgICAgICBQbGF0Zm9ybU1vZHVsZSA9IHNlbGYuUGxhdGZvcm0uTW9kdWxlc1tzdHIo TW9kdWxlKV0NCj4gLSAgICAgICAgICAgIGZvciBLZXkgIGluIFBsYXRmb3JtTW9kdWxlLlBjZHM6 DQo+ICsgICAgICAgICAgICBQQ0RfREFUQSA9IE1vZHVsZVNjb3BlUGNkcy5nZXQoTWEuR3VpZCx7 fSkNCj4gKyAgICAgICAgICAgIG1QY2RzID0geyhwY2QuVG9rZW5DTmFtZSxwY2QuVG9rZW5TcGFj ZUd1aWRDTmFtZSk6DQo+IHBjZCBmb3IgcGNkIGluIFBDRF9EQVRBfQ0KPiArICAgICAgICAgICAg Zm9yIEtleSAgaW4gbVBjZHM6DQo+ICAgICAgICAgICAgICAgICAgaWYgc2VsZi5CdWlsZE9wdGlv blBjZDoNCj4gICAgICAgICAgICAgICAgICAgICAgZm9yIHBjZCBpbiBzZWxmLkJ1aWxkT3B0aW9u UGNkOg0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgKFRva2VuU3BhY2VHdWlkQ05hbWUsIFRv a2VuQ05hbWUsDQo+IEZpZWxkTmFtZSwgcGNkdmFsdWUsIF8pID0gcGNkDQo+ICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiAoVG9rZW5DTmFtZSwgVG9rZW5TcGFjZUd1aWRDTmFtZSkgPT0NCj4g S2V5IGFuZCBGaWVsZE5hbWUgPT0iIjoNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ bGF0Zm9ybU1vZHVsZS5QY2RzW0tleV0uRGVmYXVsdFZhbHVlDQo+ID0gcGNkdmFsdWUNCj4gQEAg LTUyNiwxMSArNTMwLDExIEBAIGNsYXNzIFBsYXRmb3JtSW5mbyhBdXRvR2VuSW5mbyk6DQo+ICAg ICAgICAgICAgICAgICAgICAgICAgICBpZiBQY2RJdGVtIGluIFBjZHM6DQo+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVG9QY2QgPSBQY2RzW1BjZEl0ZW1dDQo+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxhZyA9IFRydWUNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBicmVhaw0KPiAgICAgICAgICAgICAgICAgIGlmIEZsYWc6DQo+IC0gICAgICAgICAgICAgICAg ICAgIHNlbGYuX092ZXJyaWRlUGNkKFRvUGNkLCBQbGF0Zm9ybU1vZHVsZS5QY2RzW0tleV0sDQo+ IE1vZHVsZSwgTXNnPSJEU0MgQ29tcG9uZW50cyBNb2R1bGUgc2NvcGVkIFBDRCBzZWN0aW9uIiwN Cj4gTGlicmFyeT1MaWJyYXJ5KQ0KPiArICAgICAgICAgICAgICAgICAgICBzZWxmLl9PdmVycmlk ZVBjZChUb1BjZCwgbVBjZHNbS2V5XSwgTW9kdWxlLA0KPiBNc2c9IkRTQyBDb21wb25lbnRzIE1v ZHVsZSBzY29wZWQgUENEIHNlY3Rpb24iLCBMaWJyYXJ5PUxpYnJhcnkpDQo+ICAgICAgICAgICMg dXNlIFBDRCB2YWx1ZSB0byBjYWxjdWxhdGUgdGhlIE1heERhdHVtU2l6ZSB3aGVuIGl0IGlzIG5v dA0KPiBzcGVjaWZpZWQNCj4gICAgICAgICAgZm9yIE5hbWUsIEd1aWQgaW4gUGNkczoNCj4gICAg ICAgICAgICAgIFBjZCA9IFBjZHNbTmFtZSwgR3VpZF0NCj4gICAgICAgICAgICAgIGlmIFBjZC5E YXR1bVR5cGUgPT0gVEFCX1ZPSUQgYW5kIG5vdCBQY2QuTWF4RGF0dW1TaXplOg0KPiAgICAgICAg ICAgICAgICAgIFBjZC5NYXhTaXplVXNlclNldCA9IE5vbmUNCj4gZGlmZiAtLWdpdCBhL0Jhc2VU b29scy9Tb3VyY2UvUHl0aG9uL0F1dG9HZW4vUGxhdGZvcm1BdXRvR2VuLnB5DQo+IGIvQmFzZVRv b2xzL1NvdXJjZS9QeXRob24vQXV0b0dlbi9QbGF0Zm9ybUF1dG9HZW4ucHkNCj4gaW5kZXggMjZh YjhlN2YzNi4uYzdhNGNiOWEwOCAxMDA2NDQNCj4gLS0tIGEvQmFzZVRvb2xzL1NvdXJjZS9QeXRo b24vQXV0b0dlbi9QbGF0Zm9ybUF1dG9HZW4ucHkNCj4gKysrIGIvQmFzZVRvb2xzL1NvdXJjZS9Q eXRob24vQXV0b0dlbi9QbGF0Zm9ybUF1dG9HZW4ucHkNCj4gQEAgLTEwNDEsMTEgKzEwNDEsMTcg QEAgY2xhc3MgUGxhdGZvcm1BdXRvR2VuKEF1dG9HZW4pOg0KPiAgICAgICAgICAgICAgVG9rZW5O dW1iZXIgKz0gMQ0KPiAgICAgICAgICByZXR1cm4gUmV0VmFsDQo+IA0KPiAgICAgIEBjYWNoZWRf cHJvcGVydHkNCj4gICAgICBkZWYgX01iTGlzdChzZWxmKToNCj4gLSAgICAgICAgcmV0dXJuIFtz ZWxmLkJ1aWxkRGF0YWJhc2VbbSwgc2VsZi5BcmNoLCBzZWxmLkJ1aWxkVGFyZ2V0LA0KPiBzZWxm LlRvb2xDaGFpbl0gZm9yIG0gaW4gc2VsZi5QbGF0Zm9ybS5Nb2R1bGVzXQ0KPiArICAgICAgICBt bGlzdCA9IFtdDQo+ICsgICAgICAgIGZvciBtIGluIHNlbGYuUGxhdGZvcm0uTW9kdWxlczoNCj4g KyAgICAgICAgICAgIGNvbXBvbmVudCA9IHNlbGYuUGxhdGZvcm0uTW9kdWxlc1ttXQ0KPiArICAg ICAgICAgICAgbW9kdWxlID0gc2VsZi5CdWlsZERhdGFiYXNlW20sIHNlbGYuQXJjaCwgc2VsZi5C dWlsZFRhcmdldCwNCj4gc2VsZi5Ub29sQ2hhaW5dDQo+ICsgICAgICAgICAgICBtb2R1bGUuR3Vp ZCA9IGNvbXBvbmVudC5HdWlkDQo+ICsgICAgICAgICAgICBtbGlzdC5hcHBlbmQobW9kdWxlKQ0K PiArICAgICAgICByZXR1cm4gbWxpc3QNCj4gDQo+ICAgICAgQGNhY2hlZF9wcm9wZXJ0eQ0KPiAg ICAgIGRlZiBfTWFMaXN0KHNlbGYpOg0KPiAgICAgICAgICBmb3IgTW9kdWxlRmlsZSBpbiBzZWxm LlBsYXRmb3JtLk1vZHVsZXM6DQo+ICAgICAgICAgICAgICBNYSA9IE1vZHVsZUF1dG9HZW4oDQo+ IGRpZmYgLS1naXQgYS9CYXNlVG9vbHMvU291cmNlL1B5dGhvbi9Xb3Jrc3BhY2UvQnVpbGRDbGFz c09iamVjdC5weQ0KPiBiL0Jhc2VUb29scy9Tb3VyY2UvUHl0aG9uL1dvcmtzcGFjZS9CdWlsZENs YXNzT2JqZWN0LnB5DQo+IGluZGV4IGRiNDBlM2IxMGMuLmViYjY1ZmMyZmUgMTAwNjQ0DQo+IC0t LSBhL0Jhc2VUb29scy9Tb3VyY2UvUHl0aG9uL1dvcmtzcGFjZS9CdWlsZENsYXNzT2JqZWN0LnB5 DQo+ICsrKyBiL0Jhc2VUb29scy9Tb3VyY2UvUHl0aG9uL1dvcmtzcGFjZS9CdWlsZENsYXNzT2Jq ZWN0LnB5DQo+IEBAIC02OCwxMCArNjgsMTEgQEAgY2xhc3MgUGNkQ2xhc3NPYmplY3Qob2JqZWN0 KToNCj4gICAgICAgICAgc2VsZi5Ec2NSYXdWYWx1ZUluZm8gPSB7fQ0KPiAgICAgICAgICBpZiBJ c0RzYzoNCj4gICAgICAgICAgICAgIHNlbGYuRHNjRGVmYXVsdFZhbHVlID0gVmFsdWUNCj4gICAg ICAgICAgc2VsZi5QY2RWYWx1ZUZyb21Db21tID0gIiINCj4gICAgICAgICAgc2VsZi5QY2RWYWx1 ZUZyb21GZGYgPSAiIg0KPiArICAgICAgICBzZWxmLlBjZFZhbHVlRnJvbUNvbXBvbmVudHMgPSB7 fSAje01vZHVsZUd1aWQ6dmFsdWUsDQo+IGZpbGVfcGF0aCxsaW5lTm99DQo+ICAgICAgICAgIHNl bGYuQ3VzdG9tQXR0cmlidXRlID0ge30NCj4gICAgICAgICAgc2VsZi5Vc2VyRGVmaW5lZERlZmF1 bHRTdG9yZXNGbGFnID0gVXNlckRlZmluZWREZWZhdWx0U3RvcmVzRmxhZw0KPiAgICAgICAgICBz ZWxmLl9DYXBhY2l0eSA9IE5vbmUNCj4gDQo+ICAgICAgQHByb3BlcnR5DQo+IEBAIC0yOTYsMTAg KzI5NywxMSBAQCBjbGFzcyBTdHJ1Y3R1cmVQY2QoUGNkQ2xhc3NPYmplY3QpOg0KPiAgICAgICAg ICBzZWxmLkRlZmF1bHRWYWx1ZUZyb21EZWNJbmZvID0gTm9uZQ0KPiAgICAgICAgICBzZWxmLlZh bHVlQ2hhaW4gPSBzZXQoKQ0KPiAgICAgICAgICBzZWxmLlBjZEZpZWxkVmFsdWVGcm9tQ29tbSA9 IE9yZGVyZWREaWN0KCkNCj4gICAgICAgICAgc2VsZi5QY2RGaWVsZFZhbHVlRnJvbUZkZiA9IE9y ZGVyZWREaWN0KCkNCj4gICAgICAgICAgc2VsZi5EZWZhdWx0RnJvbURTQz1Ob25lDQo+ICsgICAg ICAgIHNlbGYuUGNkRmlsZWRWYWx1ZUZyb21Ec2NDb21wb25lbnQgPSBPcmRlcmVkRGljdCgpDQo+ ICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOg0KPiAgICAgICAgICByZXR1cm4gc2VsZi5UeXBlTmFt ZQ0KPiANCj4gICAgICBkZWYgQWRkRGVmYXVsdFZhbHVlIChzZWxmLCBGaWVsZE5hbWUsIFZhbHVl LCBGaWxlTmFtZT0iIiwNCj4gTGluZU5vPTAsRGltZW5zaW9uQXR0ciA9Ii0xIik6DQo+ICAgICAg ICAgIGlmIERpbWVuc2lvbkF0dHIgbm90IGluIHNlbGYuRGVmYXVsdFZhbHVlczoNCj4gQEAgLTMy MiwxMCArMzI0LDE2IEBAIGNsYXNzIFN0cnVjdHVyZVBjZChQY2RDbGFzc09iamVjdCk6DQo+ICAg ICAgICAgIGlmIEZpZWxkTmFtZSBpbg0KPiBzZWxmLlNrdU92ZXJyaWRlVmFsdWVzW1NrdU5hbWVd W0RlZmF1bHRTdG9yZU5hbWVdW0RpbWVuc2lvbkF0dHJdOg0KPiAgICAgICAgICAgICAgZGVsDQo+ IHNlbGYuU2t1T3ZlcnJpZGVWYWx1ZXNbU2t1TmFtZV1bRGVmYXVsdFN0b3JlTmFtZV1bRGltZW5z aW9uQXR0cl1bRmllbGRODQo+IGFtZV0NCj4gDQo+IHNlbGYuU2t1T3ZlcnJpZGVWYWx1ZXNbU2t1 TmFtZV1bRGVmYXVsdFN0b3JlTmFtZV1bRGltZW5zaW9uQXR0cl1bRmllbGRODQo+IGFtZV0gPSBb VmFsdWUuc3RyaXAoKSwgRmlsZU5hbWUsIExpbmVOb10NCj4gICAgICAgICAgcmV0dXJuDQo+IHNl bGYuU2t1T3ZlcnJpZGVWYWx1ZXNbU2t1TmFtZV1bRGVmYXVsdFN0b3JlTmFtZV1bRGltZW5zaW9u QXR0cl1bRmllbGRODQo+IGFtZV0NCj4gDQo+ICsgICAgZGVmIEFkZENvbXBvbmVudE92ZXJyaWRl VmFsdWUoc2VsZixGaWVsZE5hbWUsIFZhbHVlLCBNb2R1bGVHdWlkLA0KPiBGaWxlTmFtZT0iIiwg TGluZU5vPTAsIERpbWVuc2lvbkF0dHIgPSAnLTEnKToNCj4gKyAgICAgICAgc2VsZi5QY2RGaWxl ZFZhbHVlRnJvbURzY0NvbXBvbmVudC5zZXRkZWZhdWx0KE1vZHVsZUd1aWQsDQo+IE9yZGVyZWRE aWN0KCkpDQo+ICsNCj4gc2VsZi5QY2RGaWxlZFZhbHVlRnJvbURzY0NvbXBvbmVudFtNb2R1bGVH dWlkXS5zZXRkZWZhdWx0KERpbWVuc2lvbkF0dA0KPiByLE9yZGVyZWREaWN0KCkpDQo+ICsNCj4g c2VsZi5QY2RGaWxlZFZhbHVlRnJvbURzY0NvbXBvbmVudFtNb2R1bGVHdWlkXVtEaW1lbnNpb25B dHRyXVtGaWVsZE5hDQo+IG1lXSA9ICBbVmFsdWUuc3RyaXAoKSwgRmlsZU5hbWUsIExpbmVOb10N Cj4gKyAgICAgICAgcmV0dXJuDQo+IHNlbGYuUGNkRmlsZWRWYWx1ZUZyb21Ec2NDb21wb25lbnRb TW9kdWxlR3VpZF1bRGltZW5zaW9uQXR0cl1bRmllbGROYQ0KPiBtZV0NCj4gKw0KPiAgICAgIGRl ZiBTZXRQY2RNb2RlIChzZWxmLCBQY2RNb2RlKToNCj4gICAgICAgICAgc2VsZi5QY2RNb2RlID0g UGNkTW9kZQ0KPiANCj4gICAgICBkZWYgY29weShzZWxmLCBQY2RPYmplY3QpOg0KPiAgICAgICAg ICBzZWxmLlRva2VuQ05hbWUgPSBQY2RPYmplY3QuVG9rZW5DTmFtZSBpZg0KPiBQY2RPYmplY3Qu VG9rZW5DTmFtZSBlbHNlIHNlbGYuVG9rZW5DTmFtZQ0KPiBAQCAtMzYzLDEwICszNzEsMTEgQEAg Y2xhc3MgU3RydWN0dXJlUGNkKFBjZENsYXNzT2JqZWN0KToNCj4gICAgICAgICAgICAgIHNlbGYu UGNkRGVmaW5lTGluZU5vID0gUGNkT2JqZWN0LlBjZERlZmluZUxpbmVObyBpZg0KPiBQY2RPYmpl Y3QuUGNkRGVmaW5lTGluZU5vIGVsc2Ugc2VsZi5QY2REZWZpbmVMaW5lTm8NCj4gICAgICAgICAg ICAgIHNlbGYuUGtnUGF0aCA9IFBjZE9iamVjdC5Qa2dQYXRoIGlmIFBjZE9iamVjdC5Qa2dQYXRo IGVsc2UNCj4gc2VsZi5Qa2dQYXRoDQo+ICAgICAgICAgICAgICBzZWxmLlZhbHVlQ2hhaW4gPSBQ Y2RPYmplY3QuVmFsdWVDaGFpbiBpZg0KPiBQY2RPYmplY3QuVmFsdWVDaGFpbiBlbHNlIHNlbGYu VmFsdWVDaGFpbg0KPiAgICAgICAgICAgICAgc2VsZi5QY2RGaWVsZFZhbHVlRnJvbUNvbW0gPQ0K PiBQY2RPYmplY3QuUGNkRmllbGRWYWx1ZUZyb21Db21tIGlmIFBjZE9iamVjdC5QY2RGaWVsZFZh bHVlRnJvbUNvbW0NCj4gZWxzZSBzZWxmLlBjZEZpZWxkVmFsdWVGcm9tQ29tbQ0KPiAgICAgICAg ICAgICAgc2VsZi5QY2RGaWVsZFZhbHVlRnJvbUZkZiA9IFBjZE9iamVjdC5QY2RGaWVsZFZhbHVl RnJvbUZkZg0KPiBpZiBQY2RPYmplY3QuUGNkRmllbGRWYWx1ZUZyb21GZGYgZWxzZSBzZWxmLlBj ZEZpZWxkVmFsdWVGcm9tRmRmDQo+ICsgICAgICAgICAgICBzZWxmLlBjZEZpbGVkVmFsdWVGcm9t RHNjQ29tcG9uZW50ID0NCj4gUGNkT2JqZWN0LlBjZEZpbGVkVmFsdWVGcm9tRHNjQ29tcG9uZW50 IGlmDQo+IFBjZE9iamVjdC5QY2RGaWxlZFZhbHVlRnJvbURzY0NvbXBvbmVudCBlbHNlDQo+IHNl bGYuUGNkRmlsZWRWYWx1ZUZyb21Ec2NDb21wb25lbnQNCj4gDQo+ICAgICAgZGVmIF9fZGVlcGNv cHlfXyhzZWxmLG1lbW8pOg0KPiAgICAgICAgICBuZXdfcGNkID0gU3RydWN0dXJlUGNkKCkNCj4g ICAgICAgICAgc2VsZi5zaGFyZWRjb3B5KG5ld19wY2QpDQo+IA0KPiBAQCAtMzgxLDEwICszOTAs MTEgQEAgY2xhc3MgU3RydWN0dXJlUGNkKFBjZENsYXNzT2JqZWN0KToNCj4gICAgICAgICAgbmV3 X3BjZC5EZWZhdWx0VmFsdWVzID0gQ29weURpY3Qoc2VsZi5EZWZhdWx0VmFsdWVzKQ0KPiAgICAg ICAgICBuZXdfcGNkLkRlZmF1bHRGcm9tRFNDPUNvcHlEaWN0KHNlbGYuRGVmYXVsdEZyb21EU0Mp DQo+ICAgICAgICAgIG5ld19wY2QuU2t1T3ZlcnJpZGVWYWx1ZXMgPSBDb3B5RGljdChzZWxmLlNr dU92ZXJyaWRlVmFsdWVzKQ0KPiAgICAgICAgICBuZXdfcGNkLlBjZEZpZWxkVmFsdWVGcm9tQ29t bSA9DQo+IENvcHlEaWN0KHNlbGYuUGNkRmllbGRWYWx1ZUZyb21Db21tKQ0KPiAgICAgICAgICBu ZXdfcGNkLlBjZEZpZWxkVmFsdWVGcm9tRmRmID0NCj4gQ29weURpY3Qoc2VsZi5QY2RGaWVsZFZh bHVlRnJvbUZkZikNCj4gKyAgICAgICAgbmV3X3BjZC5QY2RGaWxlZFZhbHVlRnJvbURzY0NvbXBv bmVudCA9DQo+IENvcHlEaWN0KHNlbGYuUGNkRmlsZWRWYWx1ZUZyb21Ec2NDb21wb25lbnQpDQo+ ICAgICAgICAgIG5ld19wY2QuVmFsdWVDaGFpbiA9IHtpdGVtIGZvciBpdGVtIGluIHNlbGYuVmFs dWVDaGFpbn0NCj4gICAgICAgICAgcmV0dXJuIG5ld19wY2QNCj4gDQo+ICBMaWJyYXJ5Q2xhc3NP YmplY3QgPSBuYW1lZHR1cGxlKCdMaWJyYXJ5Q2xhc3NPYmplY3QnLA0KPiBbJ0xpYnJhcnlDbGFz cycsJ1N1cE1vZExpc3QnXSkNCj4gDQo+IEBAIC00NjEsMTAgKzQ3MSwxMiBAQCBjbGFzcyBNb2R1 bGVCdWlsZENsYXNzT2JqZWN0KG9iamVjdCk6DQo+ICAgICAgICAgIHNlbGYuSW5jbHVkZXMgICAg ICAgICAgICAgICAgPSBbXQ0KPiAgICAgICAgICBzZWxmLlBhY2thZ2VzICAgICAgICAgICAgICAg ID0gW10NCj4gICAgICAgICAgc2VsZi5QY2RzICAgICAgICAgICAgICAgICAgICA9IHt9DQo+ICAg ICAgICAgIHNlbGYuQnVpbGRPcHRpb25zICAgICAgICAgICAgPSB7fQ0KPiAgICAgICAgICBzZWxm LkRlcGV4ICAgICAgICAgICAgICAgICAgID0ge30NCj4gKyAgICAgICAgc2VsZi5TdHJQY2RTZXQg ICAgICAgICAgICAgICA9IFtdDQo+ICsgICAgICAgIHNlbGYuU3RyUGNkT3ZlcmFsbFZhbHVlICAg ICAgPSB7fQ0KPiANCj4gICAgICAjIyBDb252ZXJ0IHRoZSBjbGFzcyB0byBhIHN0cmluZw0KPiAg ICAgICMNCj4gICAgICAjICBDb252ZXJ0IG1lbWJlciBNZXRhRmlsZSBvZiB0aGUgY2xhc3MgdG8g YSBzdHJpbmcNCj4gICAgICAjDQo+IGRpZmYgLS1naXQgYS9CYXNlVG9vbHMvU291cmNlL1B5dGhv bi9Xb3Jrc3BhY2UvRHNjQnVpbGREYXRhLnB5DQo+IGIvQmFzZVRvb2xzL1NvdXJjZS9QeXRob24v V29ya3NwYWNlL0RzY0J1aWxkRGF0YS5weQ0KPiBpbmRleCAxZWQzZDliOTA5Li4xYmI0ZmRjMTgz IDEwMDY0NA0KPiAtLS0gYS9CYXNlVG9vbHMvU291cmNlL1B5dGhvbi9Xb3Jrc3BhY2UvRHNjQnVp bGREYXRhLnB5DQo+ICsrKyBiL0Jhc2VUb29scy9Tb3VyY2UvUHl0aG9uL1dvcmtzcGFjZS9Ec2NC dWlsZERhdGEucHkNCj4gQEAgLTc1MywxMyArNzUzLDE0IEBAIGNsYXNzIERzY0J1aWxkRGF0YShQ bGF0Zm9ybUJ1aWxkQ2xhc3NPYmplY3QpOg0KPiAgICAgICAgICAgICAgRXJyb3JDb2RlLCBFcnJv ckluZm8gPSBNb2R1bGVGaWxlLlZhbGlkYXRlKCcuaW5mJykNCj4gICAgICAgICAgICAgIGlmIEVy cm9yQ29kZSAhPSAwOg0KPiAgICAgICAgICAgICAgICAgIEVka0xvZ2dlci5lcnJvcignYnVpbGQn LCBFcnJvckNvZGUsIEZpbGU9c2VsZi5NZXRhRmlsZSwNCj4gTGluZT1MaW5lTm8sDQo+ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dHJhRGF0YT1FcnJvckluZm8pDQo+IA0KPiAr ICAgICAgICAgICAgTW9kdWxlQnVpbGREYXRhID0gc2VsZi5fQmRiW01vZHVsZUZpbGUsIHNlbGYu X0FyY2gsDQo+IHNlbGYuX1RhcmdldCwgc2VsZi5fVG9vbGNoYWluXQ0KPiAgICAgICAgICAgICAg TW9kdWxlID0gTW9kdWxlQnVpbGRDbGFzc09iamVjdCgpDQo+ICAgICAgICAgICAgICBNb2R1bGUu TWV0YUZpbGUgPSBNb2R1bGVGaWxlDQo+IC0NCj4gKyAgICAgICAgICAgIE1vZHVsZS5HdWlkID0g TW9kdWxlQnVpbGREYXRhLkd1aWQNCj4gICAgICAgICAgICAgICMgZ2V0IG1vZHVsZSBwcml2YXRl IGxpYnJhcnkgaW5zdGFuY2UNCj4gICAgICAgICAgICAgIFJlY29yZExpc3QgPSBzZWxmLl9SYXdE YXRhW01PREVMX0VGSV9MSUJSQVJZX0NMQVNTLA0KPiBzZWxmLl9BcmNoLCBOb25lLCBNb2R1bGVJ ZF0NCj4gICAgICAgICAgICAgIGZvciBSZWNvcmQgaW4gUmVjb3JkTGlzdDoNCj4gICAgICAgICAg ICAgICAgICBMaWJyYXJ5Q2xhc3MgPSBSZWNvcmRbMF0NCj4gICAgICAgICAgICAgICAgICBMaWJy YXJ5UGF0aCA9IFBhdGhDbGFzcyhOb3JtUGF0aChSZWNvcmRbMV0sIE1hY3JvcyksDQo+IEdsb2Jh bERhdGEuZ1dvcmtzcGFjZSwgQXJjaD1zZWxmLl9BcmNoKQ0KPiBAQCAtNzc2LDExICs3NzcsMTEg QEAgY2xhc3MgRHNjQnVpbGREYXRhKFBsYXRmb3JtQnVpbGRDbGFzc09iamVjdCk6DQo+ICAgICAg ICAgICAgICAgICAgICAgIExpYnJhcnlDbGFzcyA9ICdOVUxMJWQnICUgc2VsZi5fTnVsbExpYnJh cnlOdW1iZXINCj4gICAgICAgICAgICAgICAgICAgICAgRWRrTG9nZ2VyLnZlcmJvc2UoIkZvdW5k IGZvcmNlZCBsaWJyYXJ5DQo+IGZvciAlc1xuXHQlcyBbJXNdIiAlIChNb2R1bGVGaWxlLCBMaWJy YXJ5UGF0aCwgTGlicmFyeUNsYXNzKSkNCj4gICAgICAgICAgICAgICAgICBNb2R1bGUuTGlicmFy eUNsYXNzZXNbTGlicmFyeUNsYXNzXSA9IExpYnJhcnlQYXRoDQo+ICAgICAgICAgICAgICAgICAg aWYgTGlicmFyeVBhdGggbm90IGluIHNlbGYuTGlicmFyeUluc3RhbmNlczoNCj4gICAgICAgICAg ICAgICAgICAgICAgc2VsZi5MaWJyYXJ5SW5zdGFuY2VzLmFwcGVuZChMaWJyYXJ5UGF0aCkNCj4g LQ0KPiArICAgICAgICAgICAgU19QY2RTZXQgPSBbXQ0KPiAgICAgICAgICAgICAgIyBnZXQgbW9k dWxlIHByaXZhdGUgUENEIHNldHRpbmcNCj4gICAgICAgICAgICAgIGZvciBUeXBlIGluIFtNT0RF TF9QQ0RfRklYRURfQVRfQlVJTEQsDQo+IE1PREVMX1BDRF9QQVRDSEFCTEVfSU5fTU9EVUxFLCBc DQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgTU9ERUxfUENEX0ZFQVRVUkVfRkxBRywNCj4g TU9ERUxfUENEX0RZTkFNSUMsIE1PREVMX1BDRF9EWU5BTUlDX0VYXToNCj4gICAgICAgICAgICAg ICAgICBSZWNvcmRMaXN0ID0gc2VsZi5fUmF3RGF0YVtUeXBlLCBzZWxmLl9BcmNoLCBOb25lLA0K PiBNb2R1bGVJZF0NCj4gICAgICAgICAgICAgICAgICBmb3IgVG9rZW5TcGFjZUd1aWQsIFBjZENO YW1lLCBTZXR0aW5nLCBEdW1teTEsDQo+IER1bW15MiwgRHVtbXkzLCBEdW1teTQsIER1bW15NSBp biBSZWNvcmRMaXN0Og0KPiBAQCAtNzkwLDI0ICs3OTEsMzUgQEAgY2xhc3MgRHNjQnVpbGREYXRh KFBsYXRmb3JtQnVpbGRDbGFzc09iamVjdCk6DQo+ICAgICAgICAgICAgICAgICAgICAgIGlmIGxl bihUb2tlbkxpc3QpID4gMjoNCj4gICAgICAgICAgICAgICAgICAgICAgICAgIE1heERhdHVtU2l6 ZSA9IFRva2VuTGlzdFsyXQ0KPiAgICAgICAgICAgICAgICAgICAgICBlbHNlOg0KPiAgICAgICAg ICAgICAgICAgICAgICAgICAgTWF4RGF0dW1TaXplID0gJycNCj4gICAgICAgICAgICAgICAgICAg ICAgVHlwZVN0cmluZyA9IHNlbGYuX1BDRF9UWVBFX1NUUklOR19bVHlwZV0NCj4gLSAgICAgICAg ICAgICAgICAgICAgUGNkID0gUGNkQ2xhc3NPYmplY3QoDQo+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgUGNkQ05hbWUsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVG9rZW5T cGFjZUd1aWQsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZVN0cmluZywNCj4g LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJywNCj4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBEZWZhdWx0VmFsdWUsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJycs DQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4RGF0dW1TaXplLA0KPiAtICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHt9LA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZhbHNlLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUNCj4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICApDQo+IC0gICAgICAgICAgICAgICAgICAgIE1vZHVsZS5QY2Rz W1BjZENOYW1lLCBUb2tlblNwYWNlR3VpZF0gPSBQY2QNCj4gDQo+ICsgICAgICAgICAgICAgICAg ICAgIFRDTmFtZSxQQ05hbWUsRGltZW5zaW9uQXR0cixGaWVsZCA9DQo+IHNlbGYuUGFyc2VQY2RO YW1lU3RydWN0KFRva2VuU3BhY2VHdWlkLCBQY2RDTmFtZSkNCj4gKw0KPiArICAgICAgICAgICAg ICAgICAgICBpZiAoIi4iIGluIFRva2VuU3BhY2VHdWlkIG9yICJbIiBpbiBQY2RDTmFtZSk6DQo+ ICsNCj4gU19QY2RTZXQuYXBwZW5kKFsgVENOYW1lLFBDTmFtZSxEaW1lbnNpb25BdHRyLEZpZWxk LA0KPiBNb2R1bGVCdWlsZERhdGEuR3VpZCwgIiIsIER1bW15NSwgQW5hbHl6ZVBjZEV4cHJlc3Np b24oU2V0dGluZylbMF1dKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdFZhbHVl ID0gJycNCj4gKyAgICAgICAgICAgICAgICAgICAgaWYgKCBQQ05hbWUsVENOYW1lKSBub3QgaW4g TW9kdWxlLlBjZHM6DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICBQY2QgPSBQY2RDbGFzc09i amVjdCgNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENOYW1lLA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQ05hbWUsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFR5cGVTdHJpbmcsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICcnLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0VmFs dWUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBNYXhEYXR1bVNpemUsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHt9LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG YWxzZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSXNEc2M9VHJ1ZSkNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgIE1vZHVsZS5QY2RzW1BDTmFtZSwgVENOYW1lXSA9IFBjZA0KPiArDQo+ICsgICAg ICAgICAgICBNb2R1bGUuU3RyUGNkU2V0ID0gU19QY2RTZXQNCj4gKyAgICAgICAgICAgIGZvciBU Q05hbWUsUENOYW1lLCBfLF8sXyxfLF8sXyBpbiBTX1BjZFNldDoNCj4gKyAgICAgICAgICAgICAg ICBpZiAoUENOYW1lLFRDTmFtZSkgaW4gTW9kdWxlLlBjZHM6DQo+ICsgICAgICAgICAgICAgICAg ICAgIE1vZHVsZS5TdHJQY2RPdmVyYWxsVmFsdWVbKFBDTmFtZSxUQ05hbWUpXSA9DQo+IE1vZHVs ZS5QY2RzWyhQQ05hbWUsVENOYW1lKV0uRGVmYXVsdFZhbHVlLCBzZWxmLk1ldGFGaWxlLER1bW15 NQ0KPiAgICAgICAgICAgICAgIyBnZXQgbW9kdWxlIHByaXZhdGUgYnVpbGQgb3B0aW9ucw0KPiAg ICAgICAgICAgICAgUmVjb3JkTGlzdCA9DQo+IHNlbGYuX1Jhd0RhdGFbTU9ERUxfTUVUQV9EQVRB X0JVSUxEX09QVElPTiwgc2VsZi5fQXJjaCwgTm9uZSwNCj4gTW9kdWxlSWRdDQo+ICAgICAgICAg ICAgICBmb3IgVG9vbENoYWluRmFtaWx5LCBUb29sQ2hhaW4sIE9wdGlvbiwgRHVtbXkxLCBEdW1t eTIsDQo+IER1bW15MywgRHVtbXk0LCBEdW1teTUgaW4gUmVjb3JkTGlzdDoNCj4gICAgICAgICAg ICAgICAgICBpZiAoVG9vbENoYWluRmFtaWx5LCBUb29sQ2hhaW4pIG5vdCBpbg0KPiBNb2R1bGUu QnVpbGRPcHRpb25zOg0KPiAgICAgICAgICAgICAgICAgICAgICBNb2R1bGUuQnVpbGRPcHRpb25z W1Rvb2xDaGFpbkZhbWlseSwgVG9vbENoYWluXSA9DQo+IE9wdGlvbg0KPiBAQCAtODIwLDExICs4 MzIsMTMgQEAgY2xhc3MgRHNjQnVpbGREYXRhKFBsYXRmb3JtQnVpbGRDbGFzc09iamVjdCk6DQo+ ICAgICAgICAgICAgICAgICAgaWYgbGVuKFJlY29yZExpc3QpICE9IDE6DQo+ICAgICAgICAgICAg ICAgICAgICAgIEVka0xvZ2dlci5lcnJvcignYnVpbGQnLCBPUFRJT05fVU5LTk9XTiwgJ09ubHkN Cj4gRklMRV9HVUlEIGNhbiBiZSBsaXN0ZWQgaW4gPERlZmluZXM+IHNlY3Rpb24uJywNCj4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGU9c2VsZi5NZXRhRmlsZSwNCj4g RXh0cmFEYXRhPXN0cihNb2R1bGVGaWxlKSwgTGluZT1MaW5lTm8pDQo+ICAgICAgICAgICAgICAg ICAgTW9kdWxlRmlsZSA9IFByb2Nlc3NEdXBsaWNhdGVkSW5mKE1vZHVsZUZpbGUsDQo+IFJlY29y ZExpc3RbMF1bMl0sIEdsb2JhbERhdGEuZ1dvcmtzcGFjZSkNCj4gICAgICAgICAgICAgICAgICBN b2R1bGVGaWxlLkFyY2ggPSBzZWxmLl9BcmNoDQo+IC0NCj4gKyAgICAgICAgICAgICAgICBNb2R1 bGUuR3VpZCA9IFJlY29yZExpc3RbMF1bMl0NCj4gKyAgICAgICAgICAgICAgICBmb3IgaXRlbSBp biBNb2R1bGUuU3RyUGNkU2V0Og0KPiArICAgICAgICAgICAgICAgICAgICBpdGVtWzRdID0gUmVj b3JkTGlzdFswXVsyXQ0KPiAgICAgICAgICAgICAgc2VsZi5fTW9kdWxlc1tNb2R1bGVGaWxlXSA9 IE1vZHVsZQ0KPiAgICAgICAgICByZXR1cm4gc2VsZi5fTW9kdWxlcw0KPiANCj4gICAgICAjIyBS ZXRyaWV2ZSBhbGwgcG9zc2libGUgbGlicmFyeSBpbnN0YW5jZXMgdXNlZCBpbiB0aGlzIHBsYXRm b3JtDQo+ICAgICAgQHByb3BlcnR5DQo+IEBAIC0xNDk3LDExICsxNTExLDE5IEBAIGNsYXNzIERz Y0J1aWxkRGF0YShQbGF0Zm9ybUJ1aWxkQ2xhc3NPYmplY3QpOg0KPiAgICAgICAgICAgICAgICAg ICAgICBFZGtMb2dnZXIuZXJyb3IoJ2J1aWxkJywgUEFSU0VSX0VSUk9SLA0KPiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiUGNkICglcy4lcykgaXMgbm90IGRlY2xhcmVkIGFzDQo+ IFN0cnVjdHVyZSBQQ0QgaW4gREVDIGZpbGVzLiBBcmNoOiBbJyVzJ10iICUgKFRDTmFtZSwgUENO YW1lLCBzZWxmLl9BcmNoKSwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmls ZT1zZWxmLk1ldGFGaWxlLCBMaW5lID0gRHVtbXk1KQ0KPiANCj4gDQo+IFNfUGNkU2V0LmFwcGVu ZChbIFRDTmFtZSxQQ05hbWUsRGltZW5zaW9uQXR0cixGaWVsZCwgU2t1TmFtZSwNCj4gZGVmYXVs dF9zdG9yZSwgRHVtbXk1LCBBbmFseXplUGNkRXhwcmVzc2lvbihTZXR0aW5nKVswXV0pDQo+IC0N Cj4gKyAgICAgICAgTW9kdWxlU2NvcGVPdmVyYWxsVmFsdWUgPSB7fQ0KPiArICAgICAgICBmb3Ig bSBpbiBzZWxmLk1vZHVsZXMudmFsdWVzKCk6DQo+ICsgICAgICAgICAgICBtZ3VpZCA9IG0uR3Vp ZA0KPiArICAgICAgICAgICAgaWYgbS5TdHJQY2RTZXQ6DQo+ICsgICAgICAgICAgICAgICAgU19Q Y2RTZXQuZXh0ZW5kKG0uU3RyUGNkU2V0KQ0KPiArICAgICAgICAgICAgICAgIG1ndWlkID0gbS5T dHJQY2RTZXRbMF1bNF0NCj4gKyAgICAgICAgICAgIGZvciAoUENOYW1lLFRDTmFtZSkgaW4gbS5T dHJQY2RPdmVyYWxsVmFsdWU6DQo+ICsgICAgICAgICAgICAgICAgVmFsdWUsIGRzY19maWxlLCBs aW5lTm8gPQ0KPiBtLlN0clBjZE92ZXJhbGxWYWx1ZVsoUENOYW1lLFRDTmFtZSldDQo+ICsNCj4g TW9kdWxlU2NvcGVPdmVyYWxsVmFsdWUuc2V0ZGVmYXVsdCgoUENOYW1lLFRDTmFtZSkse30pW21n dWlkXSA9IFZhbHVlLA0KPiBkc2NfZmlsZSwgbGluZU5vDQo+ICAgICAgICAgICMgaGFuZGxlIHBj ZCB2YWx1ZSBvdmVycmlkZQ0KPiAgICAgICAgICBTdHJQY2RTZXQgPSBEc2NCdWlsZERhdGEuR2V0 U3RydWN0dXJlUGNkSW5mbyhTX1BjZFNldCkNCj4gICAgICAgICAgU19wY2Rfc2V0ID0gT3JkZXJl ZERpY3QoKQ0KPiAgICAgICAgICBmb3Igc3RyX3BjZCBpbiBTdHJQY2RTZXQ6DQo+ICAgICAgICAg ICAgICBzdHJfcGNkX29iaiA9IFBjZHMuZ2V0KChzdHJfcGNkWzFdLCBzdHJfcGNkWzBdKSwgTm9u ZSkNCj4gQEAgLTE1MTUsMTAgKzE1MzcsMTUgQEAgY2xhc3MgRHNjQnVpbGREYXRhKFBsYXRmb3Jt QnVpbGRDbGFzc09iamVjdCk6DQo+ICAgICAgICAgICAgICAgICAgZWxzZToNCj4gICAgICAgICAg ICAgICAgICAgICAgc3RyX3BjZF9vYmpfc3RyLkRlZmF1bHRGcm9tRFNDID0NCj4ge3NrdW5hbWU6 e2RlZmF1bHRzdG9yZToNCj4gc3RyX3BjZF9vYmouU2t1SW5mb0xpc3Rbc2t1bmFtZV0uRGVmYXVs dFN0b3JlRGljdC5nZXQoZGVmYXVsdHN0b3JlLA0KPiBzdHJfcGNkX29iai5Ta3VJbmZvTGlzdFtz a3VuYW1lXS5EZWZhdWx0VmFsdWUpIGZvciBkZWZhdWx0c3RvcmUgaW4NCj4gRGVmYXVsdFN0b3Jl c30gZm9yIHNrdW5hbWUgaW4gc3RyX3BjZF9vYmouU2t1SW5mb0xpc3R9DQo+ICAgICAgICAgICAg ICBmb3Igc3RyX3BjZF9kYXRhIGluIFN0clBjZFNldFtzdHJfcGNkXToNCj4gICAgICAgICAgICAg ICAgICBpZiBzdHJfcGNkX2RhdGFbNF0gaW4gU2t1SWRzOg0KPiAgICAgICAgICAgICAgICAgICAg ICBzdHJfcGNkX29ial9zdHIuQWRkT3ZlcnJpZGVWYWx1ZShzdHJfcGNkX2RhdGFbM10sDQo+IHN0 cihzdHJfcGNkX2RhdGFbN10pLCBUQUJfREVGQVVMVCBpZiBzdHJfcGNkX2RhdGFbNF0gPT0gVEFC X0NPTU1PTiBlbHNlDQo+IHN0cl9wY2RfZGF0YVs0XSwgVEFCX0RFRkFVTFRfU1RPUkVTX0RFRkFV TFQgaWYgc3RyX3BjZF9kYXRhWzVdID09DQo+IFRBQl9DT01NT04gZWxzZSBzdHJfcGNkX2RhdGFb NV0sIHNlbGYuTWV0YUZpbGUuRmlsZSBpZiBzZWxmLldvcmtzcGFjZURpcg0KPiBub3QgaW4gc2Vs Zi5NZXRhRmlsZS5GaWxlIGVsc2Ugc2VsZi5NZXRhRmlsZS5GaWxlW2xlbihzZWxmLldvcmtzcGFj ZURpcikNCmlmDQo+IHNlbGYuV29ya3NwYWNlRGlyLmVuZHN3aXRoKG9zLnBhdGguc2VwKSBlbHNl IGxlbihzZWxmLldvcmtzcGFjZURpcikrMTpdLA0KPiBMaW5lTm89c3RyX3BjZF9kYXRhWzZdLERp bWVuc2lvbkF0dHIgPSBzdHJfcGNkX2RhdGFbMl0pDQo+ICsgICAgICAgICAgICAgICAgZWxpZiBH bG9iYWxEYXRhLmdHdWlkUGF0dGVybi5tYXRjaChzdHJfcGNkX2RhdGFbNF0pOg0KPiArDQo+IHN0 cl9wY2Rfb2JqX3N0ci5BZGRDb21wb25lbnRPdmVycmlkZVZhbHVlKHN0cl9wY2RfZGF0YVszXSwN Cj4gc3RyKHN0cl9wY2RfZGF0YVs3XSksIHN0cl9wY2RfZGF0YVs0XS5yZXBsYWNlKCItIiwiUyIp LCBzZWxmLk1ldGFGaWxlLkZpbGUNCmlmDQo+IHNlbGYuV29ya3NwYWNlRGlyIG5vdCBpbiBzZWxm Lk1ldGFGaWxlLkZpbGUgZWxzZQ0KPiBzZWxmLk1ldGFGaWxlLkZpbGVbbGVuKHNlbGYuV29ya3Nw YWNlRGlyKSBpZg0KPiBzZWxmLldvcmtzcGFjZURpci5lbmRzd2l0aChvcy5wYXRoLnNlcCkgZWxz ZSBsZW4oc2VsZi5Xb3Jrc3BhY2VEaXIpKzE6XSwNCj4gTGluZU5vPXN0cl9wY2RfZGF0YVs2XSxE aW1lbnNpb25BdHRyID0gc3RyX3BjZF9kYXRhWzJdKQ0KPiArICAgICAgICAgICAgICAgICAgICBQ Y2RDb21wb25lbnRWYWx1ZSA9DQo+IE1vZHVsZVNjb3BlT3ZlcmFsbFZhbHVlLmdldCgoc3RyX3Bj ZF9vYmpfc3RyLlRva2VuQ05hbWUsc3RyX3BjZF9vYmpfc3RyLg0KPiBUb2tlblNwYWNlR3VpZENO YW1lKSkNCj4gKyAgICAgICAgICAgICAgICAgICAgZm9yIG1vZHVsZV9ndWlkIGluIFBjZENvbXBv bmVudFZhbHVlOg0KPiArDQo+IHN0cl9wY2Rfb2JqX3N0ci5QY2RWYWx1ZUZyb21Db21wb25lbnRz W21vZHVsZV9ndWlkLnJlcGxhY2UoIi0iLCJTIildID0NCj4gUGNkQ29tcG9uZW50VmFsdWVbbW9k dWxlX2d1aWRdDQo+ICAgICAgICAgICAgICBTX3BjZF9zZXRbc3RyX3BjZFsxXSwgc3RyX3BjZFsw XV0gPSBzdHJfcGNkX29ial9zdHINCj4gDQo+ICAgICAgICAgICMgQWRkIHRoZSBTdHJ1Y3R1cmUg UENEIHRoYXQgb25seSBkZWZpbmVkIGluIERFQywgZG9uJ3QgaGF2ZQ0KPiBvdmVycmlkZSBpbiBE U0MgZmlsZQ0KPiAgICAgICAgICBmb3IgUGNkIGluIHNlbGYuRGVjUGNkczoNCj4gICAgICAgICAg ICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5fRGVjUGNkc1tQY2RdLCBTdHJ1Y3R1cmVQY2QpOg0KPiBA QCAtMTU3MywxMSArMTYwMCwxNCBAQCBjbGFzcyBEc2NCdWlsZERhdGEoUGxhdGZvcm1CdWlsZENs YXNzT2JqZWN0KToNCj4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRlZmF1bHRzdG9yZWlk IG5vdCBpbg0KPiBzdHJ1X3BjZC5Ta3VPdmVycmlkZVZhbHVlc1tza3VpZF06DQo+IA0KPiBzdHJ1 X3BjZC5Ta3VPdmVycmlkZVZhbHVlc1tza3VpZF1bZGVmYXVsdHN0b3JlaWRdID0NCj4gQ29weURp Y3Qoc3RydV9wY2QuU2t1T3ZlcnJpZGVWYWx1ZXNbbmV4dHNrdWlkXVttaW5kZWZhdWx0c3RvcmVu YW1lXSkNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1X3BjZC5WYWx1ZUNoYWlu LmFkZCgoc2t1aWQsDQo+IGRlZmF1bHRzdG9yZWlkKSkNCj4gICAgICAgICAgU19wY2Rfc2V0ID0N Cj4gRHNjQnVpbGREYXRhLk92ZXJyaWRlQnlGZGYoU19wY2Rfc2V0LHNlbGYuV29ya3NwYWNlRGly KQ0KPiAgICAgICAgICBTX3BjZF9zZXQgPSBEc2NCdWlsZERhdGEuT3ZlcnJpZGVCeUNvbW0oU19w Y2Rfc2V0KQ0KPiArDQo+ICsgICAgICAgICMgQ3JlYXRlIGEgdG9vbCB0byBjYWN1bGF0ZSBzdHJ1 Y3R1cmUgcGNkIHZhbHVlDQo+ICAgICAgICAgIFN0cl9QY2RfVmFsdWVzID0gc2VsZi5HZW5lcmF0 ZUJ5dGVBcnJheVZhbHVlKFNfcGNkX3NldCkNCj4gKw0KPiAgICAgICAgICBpZiBTdHJfUGNkX1Zh bHVlczoNCj4gICAgICAgICAgICAgIGZvciAoc2t1bmFtZSwgU3RvcmVOYW1lLCBQY2RHdWlkLCBQ Y2ROYW1lLCBQY2RWYWx1ZSkgaW4NCj4gU3RyX1BjZF9WYWx1ZXM6DQo+ICAgICAgICAgICAgICAg ICAgc3RyX3BjZF9vYmogPSBTX3BjZF9zZXQuZ2V0KChQY2ROYW1lLCBQY2RHdWlkKSkNCj4gICAg ICAgICAgICAgICAgICBpZiBzdHJfcGNkX29iaiBpcyBOb25lOg0KPiAgICAgICAgICAgICAgICAg ICAgICBwcmludChQY2ROYW1lLCBQY2RHdWlkKQ0KPiBAQCAtMTU5MSwxMCArMTYyMSwxOCBAQCBj bGFzcyBEc2NCdWlsZERhdGEoUGxhdGZvcm1CdWlsZENsYXNzT2JqZWN0KToNCj4gDQo+IHN0cl9w Y2Rfb2JqLlNrdUluZm9MaXN0W3NrdW5hbWVdLkRlZmF1bHRTdG9yZURpY3QudXBkYXRlKHtTdG9y ZU5hbWU6UGNkVg0KPiBhbHVlfSkNCj4gICAgICAgICAgICAgICAgICBlbGlmIHN0cl9wY2Rfb2Jq LlR5cGUgaW4NCj4gW3NlbGYuX1BDRF9UWVBFX1NUUklOR19bTU9ERUxfUENEX0ZJWEVEX0FUX0JV SUxEXSwNCj4gDQo+IHNlbGYuX1BDRF9UWVBFX1NUUklOR19bTU9ERUxfUENEX1BBVENIQUJMRV9J Tl9NT0RVTEVdXToNCj4gICAgICAgICAgICAgICAgICAgICAgaWYgc2t1bmFtZSBpbiAoc2VsZi5T a3VJZE1nci5TeXN0ZW1Ta3VJZCwNCj4gVEFCX0RFRkFVTFQsIFRBQl9DT01NT04pOg0KPiAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RyX3BjZF9vYmouRGVmYXVsdFZhbHVlID0gUGNkVmFsdWUN Cj4gKyAgICAgICAgICAgICAgICAgICAgZWxzZToNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICNNb2R1bGUgU2NvcGUgU3RydWN0dXJlIFBjZA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg bW9kdWxlZ3VpZCA9IHNrdW5hbWUucmVwbGFjZSgiUyIsIi0iKQ0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgaWYNCj4gR2xvYmFsRGF0YS5nR3VpZFBhdHRlcm4ubWF0Y2gobW9kdWxlZ3VpZCk6 DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGNvbXBvbmVudCBpbiBzZWxmLk1v ZHVsZXMudmFsdWVzKCk6DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNv bXBvbmVudC5HdWlkID09IG1vZHVsZWd1aWQ6DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb21wb25lbnQuUGNkc1soUGNkTmFtZSwNCj4gUGNkR3VpZCldLkRlZmF1bHRW YWx1ZSA9IFBjZFZhbHVlDQo+ICsNCj4gICAgICAgICAgICAgICAgICBlbHNlOg0KPiAgICAgICAg ICAgICAgICAgICAgICBpZiBza3VuYW1lIG5vdCBpbiBzdHJfcGNkX29iai5Ta3VJbmZvTGlzdDoN Cj4gICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRza3VpZCA9DQo+IHNlbGYuU2t1SWRNZ3Iu R2V0TmV4dFNrdUlkKHNrdW5hbWUpDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICBOb0RlZmF1 bHQgPSBGYWxzZQ0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgbmV4dHNrdWlkIG5v dCBpbiBzdHJfcGNkX29iai5Ta3VJbmZvTGlzdDoNCj4gQEAgLTIzMzksMTAgKzIzNzcsNzkgQEAg Y2xhc3MgRHNjQnVpbGREYXRhKFBsYXRmb3JtQnVpbGRDbGFzc09iamVjdCk6DQo+ICAgICAgICAg ICAgICAgICAgICAgIGVsc2U6DQo+ICAgICAgICAgICAgICAgICAgICAgICAgICBDQXBwID0gQ0Fw cCArICcgIFBjZC0+JXMgPSAlZDsgLy8gRnJvbSAlcw0KPiBMaW5lICVkIFZhbHVlICVzXG4nICUg KEZpZWxkTmFtZSwgVmFsdWUsIEZpZWxkTGlzdFtGaWVsZE5hbWVdWzFdLA0KPiBGaWVsZExpc3Rb RmllbGROYW1lXVsyXSwgRmllbGRMaXN0W0ZpZWxkTmFtZV1bMF0pDQo+ICAgICAgICAgIENBcHAg PSBDQXBwICsgIn1cbiINCj4gICAgICAgICAgcmV0dXJuIENBcHANCj4gDQo+ICsgICAgZGVmIEdl bmVyYXRlTW9kdWxlU2NvcGVWYWx1ZShzZWxmLCBQY2QpOg0KPiArICAgICAgICBDQXBwID0gIi8v IFZhbHVlIGluIERzYyBNb2R1bGUgc2NvcGUgXG4iDQo+ICsgICAgICAgIGZvciBNb2R1bGVHdWlk IGluIFBjZC5QY2RGaWxlZFZhbHVlRnJvbURzY0NvbXBvbmVudDoNCj4gKw0KPiArICAgICAgICAg ICAgQ0FwcCA9IENBcHAgKyAidm9pZCBBc3NpZ25fJXNfJXNfJXNfVmFsdWUoJXMgKlBjZCl7XG4i ICUNCj4gKFBjZC5Ub2tlblNwYWNlR3VpZENOYW1lLCBQY2QuVG9rZW5DTmFtZSwNCj4gTW9kdWxl R3VpZCxQY2QuQmFzZURhdHVtVHlwZSkNCj4gKyAgICAgICAgICAgIENBcHAgPSBDQXBwICsgJyAg VUlOVDMyICBGaWVsZFNpemU7XG4nDQo+ICsgICAgICAgICAgICBDQXBwID0gQ0FwcCArICcgIENI QVI4ICAgKlZhbHVlO1xuJw0KPiArICAgICAgICAgICAgcGNkZGVmYXVsdHZhbHVlLCBmaWxlX3Bh dGgsbGluZU5vID0NCj4gUGNkLlBjZFZhbHVlRnJvbUNvbXBvbmVudHMuZ2V0KE1vZHVsZUd1aWQs KE5vbmUsTm9uZSxOb25lKSkNCj4gKw0KPiArICAgICAgICAgICAgaWYgcGNkZGVmYXVsdHZhbHVl Og0KPiArICAgICAgICAgICAgICAgIElzQXJyYXkgPSBfSXNGaWVsZFZhbHVlQW5BcnJheShwY2Rk ZWZhdWx0dmFsdWUpDQo+ICsgICAgICAgICAgICAgICAgaWYgSXNBcnJheToNCj4gKyAgICAgICAg ICAgICAgICAgICAgdHJ5Og0KPiArICAgICAgICAgICAgICAgICAgICAgICAgRmllbGRMaXN0ID0g VmFsdWVFeHByZXNzaW9uRXgocGNkZGVmYXVsdHZhbHVlLA0KPiBUQUJfVk9JRCkoVHJ1ZSkNCj4g KyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEJhZEV4cHJlc3Npb246DQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICBFZGtMb2dnZXIuZXJyb3IoIkJ1aWxkIiwgRk9STUFUX0lOVkFMSUQsDQo+ ICJJbnZhbGlkIHZhbHVlIGZvcm1hdCBmb3IgJXMuJXMsIGZyb20gJXMgTGluZSAlczogJXMiICUN Cj4gKw0KPiAoUGNkLlRva2VuU3BhY2VHdWlkQ05hbWUsIFBjZC5Ub2tlbkNOYW1lLCBmaWxlX3Bh dGgsIGxpbmVObywgRmllbGRMaXN0KSkNCj4gKyAgICAgICAgICAgICAgICBWYWx1ZSwgVmFsdWVT aXplID0gUGFyc2VGaWVsZFZhbHVlIChGaWVsZExpc3QpDQo+ICsNCj4gKyAgICAgICAgICAgICAg ICBpZiBpc2luc3RhbmNlKFZhbHVlLCBzdHIpOg0KPiArICAgICAgICAgICAgICAgICAgICBDQXBw ID0gQ0FwcCArICcgIFBjZCA9ICVzOyAvLyBGcm9tICVzIExpbmUgJXMgXG4nICUNCj4gKFZhbHVl LCBmaWxlX3BhdGgsIGxpbmVObykNCj4gKyAgICAgICAgICAgICAgICBlbGlmIElzQXJyYXk6DQo+ ICsgICAgICAgICAgICAgICAgIw0KPiArICAgICAgICAgICAgICAgICMgVXNlIG1lbWNweSgpIHRv IGNvcHkgdmFsdWUgaW50byBmaWVsZA0KPiArICAgICAgICAgICAgICAgICMNCj4gKyAgICAgICAg ICAgICAgICAgICAgQ0FwcCA9IENBcHAgKyAnICBWYWx1ZSAgICAgPSAlczsgLy8gRnJvbSAlcw0K PiBMaW5lICVzLlxuJyAlIChEc2NCdWlsZERhdGEuSW50VG9DU3RyaW5nKFZhbHVlLCBWYWx1ZVNp emUpLCBmaWxlX3BhdGgsDQpsaW5lTm8pDQo+ICsgICAgICAgICAgICAgICAgICAgIENBcHAgPSBD QXBwICsgJyAgbWVtY3B5IChQY2QsIFZhbHVlLCAlZCk7XG4nICUNCj4gKFZhbHVlU2l6ZSkNCj4g Kw0KPiArDQo+ICsgICAgICAgICAgICBQY2RGaWxlZFZhbHVlID0NCj4gUGNkLlBjZEZpbGVkVmFs dWVGcm9tRHNjQ29tcG9uZW50LmdldChNb2R1bGVHdWlkKQ0KPiArICAgICAgICAgICAgZm9yIGlu ZGV4IGluIFBjZEZpbGVkVmFsdWU6DQo+ICsgICAgICAgICAgICAgICAgRmllbGRMaXN0ID0gUGNk RmlsZWRWYWx1ZVtpbmRleF0NCj4gKyAgICAgICAgICAgICAgICBpZiBub3QgRmllbGRMaXN0Og0K PiArICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KPiArICAgICAgICAgICAgICAgIGZvciBG aWVsZE5hbWUgaW4gRmllbGRMaXN0Og0KPiArICAgICAgICAgICAgICAgICAgICBJc0FycmF5ID0N Cj4gX0lzRmllbGRWYWx1ZUFuQXJyYXkoRmllbGRMaXN0W0ZpZWxkTmFtZV1bMF0pDQo+ICsgICAg ICAgICAgICAgICAgICAgIGlmIElzQXJyYXk6DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICB0 cnk6DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmllbGRMaXN0W0ZpZWxkTmFtZV1b MF0gPQ0KPiBWYWx1ZUV4cHJlc3Npb25FeChGaWVsZExpc3RbRmllbGROYW1lXVswXSwgVEFCX1ZP SUQsIHNlbGYuX0d1aWREaWN0KShUcnVlKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgZXhj ZXB0IEJhZEV4cHJlc3Npb246DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRrTG9n Z2VyLmVycm9yKCdCdWlsZCcsDQo+IEZPUk1BVF9JTlZBTElELCAiSW52YWxpZCB2YWx1ZSBmb3Jt YXQgZm9yICVzLiBGcm9tICVzIExpbmUgJWQgIiAlDQo+ICsNCj4gKCIuIi5qb2luKChQY2QuVG9r ZW5TcGFjZUd1aWRDTmFtZSwgUGNkLlRva2VuQ05hbWUsIEZpZWxkTmFtZSkpLA0KPiBGaWVsZExp c3RbRmllbGROYW1lXVsxXSwgRmllbGRMaXN0W0ZpZWxkTmFtZV1bMl0pKQ0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgZXhjZXB0Og0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy aW50KCJlcnJvciIpDQo+ICsgICAgICAgICAgICAgICAgICAgIHRyeToNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgIFZhbHVlLCBWYWx1ZVNpemUgPSBQYXJzZUZpZWxkVmFsdWUNCj4gKEZpZWxk TGlzdFtGaWVsZE5hbWVdWzBdKQ0KPiArICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0 aW9uOg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgRWRrTG9nZ2VyLmVycm9yKCdCdWlsZCcs IEZPUk1BVF9JTlZBTElELA0KPiAiSW52YWxpZCB2YWx1ZSBmb3JtYXQgZm9yICVzLiBGcm9tICVz IExpbmUgJWQgIiAlDQo+ICgiLiIuam9pbigoUGNkLlRva2VuU3BhY2VHdWlkQ05hbWUsIFBjZC5U b2tlbkNOYW1lLCBGaWVsZE5hbWUpKSwNCj4gRmllbGRMaXN0W0ZpZWxkTmFtZV1bMV0sIEZpZWxk TGlzdFtGaWVsZE5hbWVdWzJdKSkNCj4gKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5j ZShWYWx1ZSwgc3RyKToNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIENBcHAgPSBDQXBwICsg JyAgUGNkLT4lcyA9ICVzOyAvLyBGcm9tICVzDQo+IExpbmUgJWQgVmFsdWUgJXNcbicgJSAoRmll bGROYW1lLCBWYWx1ZSwgRmllbGRMaXN0W0ZpZWxkTmFtZV1bMV0sDQo+IEZpZWxkTGlzdFtGaWVs ZE5hbWVdWzJdLCBGaWVsZExpc3RbRmllbGROYW1lXVswXSkNCj4gKyAgICAgICAgICAgICAgICAg ICAgZWxpZiBJc0FycmF5Og0KPiArICAgICAgICAgICAgICAgICAgICAjDQo+ICsgICAgICAgICAg ICAgICAgICAgICMgVXNlIG1lbWNweSgpIHRvIGNvcHkgdmFsdWUgaW50byBmaWVsZA0KPiArICAg ICAgICAgICAgICAgICAgICAjDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICBDQXBwID0gQ0Fw cCArICcgIEZpZWxkU2l6ZSA9DQo+IF9fRklFTERfU0laRSglcywgJXMpO1xuJyAlIChQY2QuQmFz ZURhdHVtVHlwZSwgRmllbGROYW1lKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgQ0FwcCA9 IENBcHAgKyAnICBWYWx1ZSAgICAgPSAlczsgLy8NCj4gRnJvbSAlcyBMaW5lICVkIFZhbHVlICVz XG4nICUgKERzY0J1aWxkRGF0YS5JbnRUb0NTdHJpbmcoVmFsdWUsDQpWYWx1ZVNpemUpLA0KPiBG aWVsZExpc3RbRmllbGROYW1lXVsxXSwgRmllbGRMaXN0W0ZpZWxkTmFtZV1bMl0sIEZpZWxkTGlz dFtGaWVsZE5hbWVdWzBdKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgQ0FwcCA9IENBcHAg KyAnDQo+IF9fU1RBVElDX0FTU0VSVCgoX19GSUVMRF9TSVpFKCVzLCAlcykgPj0gJWQpIHx8IChf X0ZJRUxEX1NJWkUoJXMsICVzKSA9PQ0KPiAwKSwgIklucHV0IGJ1ZmZlciBleGNlZWRzIHRoZSBi dWZmZXIgYXJyYXkiKTsgLy8gRnJvbSAlcyBMaW5lICVkIFZhbHVlDQolc1xuJyAlDQo+IChQY2Qu QmFzZURhdHVtVHlwZSwgRmllbGROYW1lLCBWYWx1ZVNpemUsIFBjZC5CYXNlRGF0dW1UeXBlLCBG aWVsZE5hbWUsDQo+IEZpZWxkTGlzdFtGaWVsZE5hbWVdWzFdLCBGaWVsZExpc3RbRmllbGROYW1l XVsyXSwgRmllbGRMaXN0W0ZpZWxkTmFtZV1bMF0pDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICBDQXBwID0gQ0FwcCArICcgIG1lbWNweSAoJlBjZC0+JXMsIFZhbHVlLA0KPiAoRmllbGRTaXpl ID4gMCAmJiBGaWVsZFNpemUgPCAlZCkgPyBGaWVsZFNpemUgOiAlZCk7XG4nICUgKEZpZWxkTmFt ZSwNClZhbHVlU2l6ZSwNCj4gVmFsdWVTaXplKQ0KPiArICAgICAgICAgICAgICAgICAgICBlbHNl Og0KPiArICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ1snIGluIEZpZWxkTmFtZSBhbmQgJ10n IGluIEZpZWxkTmFtZToNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCA9DQo+ IGludChGaWVsZE5hbWUuc3BsaXQoJ1snKVsxXS5zcGxpdCgnXScpWzBdKQ0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgIENBcHAgPSBDQXBwICsgJyAgX19TVEFUSUNfQVNTRVJUKCglZA0K PiA8IF9fQVJSQVlfU0laRShQY2QtPiVzKSkgfHwgKF9fQVJSQVlfU0laRShQY2QtPiVzKSA9PSAw KSwgImFycmF5IGluZGV4DQo+IGV4Y2VlZHMgdGhlIGFycmF5IG51bWJlciIpOyAvLyBGcm9tICVz IExpbmUgJWQgSW5kZXggb2YgJXNcbicgJSAoSW5kZXgsDQo+IEZpZWxkTmFtZS5zcGxpdCgnWycp WzBdLCBGaWVsZE5hbWUuc3BsaXQoJ1snKVswXSwgRmllbGRMaXN0W0ZpZWxkTmFtZV1bMV0sDQo+ IEZpZWxkTGlzdFtGaWVsZE5hbWVdWzJdLCBGaWVsZE5hbWUpDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICBpZiBWYWx1ZVNpemUgPiA0Og0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg IENBcHAgPSBDQXBwICsgJyAgUGNkLT4lcyA9ICVkVUxMOyAvLw0KPiBGcm9tICVzIExpbmUgJWQg VmFsdWUgJXNcbicgJSAoRmllbGROYW1lLCBWYWx1ZSwgRmllbGRMaXN0W0ZpZWxkTmFtZV1bMV0s DQo+IEZpZWxkTGlzdFtGaWVsZE5hbWVdWzJdLCBGaWVsZExpc3RbRmllbGROYW1lXVswXSkNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6DQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQ0FwcCA9IENBcHAgKyAnICBQY2QtPiVzID0gJWQ7IC8vDQo+IEZyb20gJXMgTGluZSAl ZCBWYWx1ZSAlc1xuJyAlIChGaWVsZE5hbWUsIFZhbHVlLCBGaWVsZExpc3RbRmllbGROYW1lXVsx XSwNCj4gRmllbGRMaXN0W0ZpZWxkTmFtZV1bMl0sIEZpZWxkTGlzdFtGaWVsZE5hbWVdWzBdKQ0K PiArICAgICAgICAgICAgQ0FwcCA9IENBcHAgKyAifVxuIg0KPiArICAgICAgICByZXR1cm4gQ0Fw cA0KPiArDQo+ICAgICAgQHN0YXRpY21ldGhvZA0KPiAgICAgIGRlZiBHZW5lcmF0ZUNvbW1hbmRM aW5lVmFsdWVTdGF0ZW1lbnQoUGNkKToNCj4gICAgICAgICAgQ0FwcCA9ICcgIEFzc2lnbl8lc18l c19Db21tYW5kTGluZV9WYWx1ZShQY2QpO1xuJyAlDQo+IChQY2QuVG9rZW5TcGFjZUd1aWRDTmFt ZSwgUGNkLlRva2VuQ05hbWUpDQo+ICAgICAgICAgIHJldHVybiBDQXBwDQo+ICAgICAgZGVmIEdl bmVyYXRlRmRmVmFsdWUoc2VsZixQY2QpOg0KPiBAQCAtMjQxMiwxMCArMjUxOSw4OCBAQCBjbGFz cyBEc2NCdWlsZERhdGEoUGxhdGZvcm1CdWlsZENsYXNzT2JqZWN0KToNCj4gICAgICBAc3RhdGlj bWV0aG9kDQo+ICAgICAgZGVmIEdlbmVyYXRlRmRmVmFsdWVTdGF0ZW1lbnQoUGNkKToNCj4gICAg ICAgICAgQ0FwcCA9ICcgIEFzc2lnbl8lc18lc19GZGZfVmFsdWUoUGNkKTtcbicgJQ0KPiAoUGNk LlRva2VuU3BhY2VHdWlkQ05hbWUsIFBjZC5Ub2tlbkNOYW1lKQ0KPiAgICAgICAgICByZXR1cm4g Q0FwcA0KPiANCj4gKyAgICBAc3RhdGljbWV0aG9kDQo+ICsgICAgZGVmIEdlbmVyYXRlTW9kdWxl VmFsdWVTdGF0ZW1lbnQobW9kdWxlX2d1aWQsIFBjZCk6DQo+ICsgICAgICAgIENBcHAgPSAiICBB c3NpZ25fJXNfJXNfJXNfVmFsdWUoUGNkKTtcbiIgJQ0KPiAoUGNkLlRva2VuU3BhY2VHdWlkQ05h bWUsIFBjZC5Ub2tlbkNOYW1lLCBtb2R1bGVfZ3VpZCkNCj4gKyAgICAgICAgcmV0dXJuIENBcHAN Cj4gKyAgICBkZWYgR2VuZXJhdGVNb2R1bGVTY29wZUluaXRpYWxpemVGdW5jKHNlbGYsU2t1TmFt ZSwgUGNkLA0KPiBJbml0Qnl0ZVZhbHVlLCBDQXBwKToNCj4gKyAgICAgICAgZm9yIG1vZHVsZV9n dWlkIGluIFBjZC5QY2RGaWxlZFZhbHVlRnJvbURzY0NvbXBvbmVudDoNCj4gKyAgICAgICAgICAg IENBcHAgPSBDQXBwICsgJ3ZvaWRcbicNCj4gKyAgICAgICAgICAgIENBcHAgPSBDQXBwICsgJ0lu aXRpYWxpemVfJXNfJXNfJXNfJXMoXG4nICUgKG1vZHVsZV9ndWlkLA0KPiBUQUJfREVGQVVMVF9T VE9SRVNfREVGQVVMVCwgUGNkLlRva2VuU3BhY2VHdWlkQ05hbWUsDQo+IFBjZC5Ub2tlbkNOYW1l KQ0KPiArICAgICAgICAgICAgQ0FwcCA9IENBcHAgKyAnICB2b2lkXG4nDQo+ICsgICAgICAgICAg ICBDQXBwID0gQ0FwcCArICcgIClcbicNCj4gKyAgICAgICAgICAgIENBcHAgPSBDQXBwICsgJ3tc bicNCj4gKyAgICAgICAgICAgIENBcHAgPSBDQXBwICsgJyAgVUlOVDMyICBTaXplO1xuJw0KPiAr ICAgICAgICAgICAgQ0FwcCA9IENBcHAgKyAnICBVSU5UMzIgIEZpZWxkU2l6ZTtcbicNCj4gKyAg ICAgICAgICAgIENBcHAgPSBDQXBwICsgJyAgQ0hBUjggICAqVmFsdWU7XG4nDQo+ICsgICAgICAg ICAgICBDQXBwID0gQ0FwcCArICcgIFVJTlQzMiAgT3JpZ2luYWxTaXplO1xuJw0KPiArICAgICAg ICAgICAgQ0FwcCA9IENBcHAgKyAnICBWT0lEICAgICpPcmlnaW5hbFBjZDtcbicNCj4gKw0KPiAr ICAgICAgICAgICAgQ0FwcCA9IENBcHAgKyAnICAlcyAgICAgICpQY2Q7ICAvLyBGcm9tICVzIExp bmUgJWQgXG4nICUNCj4gKFBjZC5CYXNlRGF0dW1UeXBlLFBjZC5Qa2dQYXRoLCBQY2QuUGNkRGVm aW5lTGluZU5vKQ0KPiArDQo+ICsgICAgICAgICAgICBDQXBwID0gQ0FwcCArICdcbicNCj4gKw0K PiArICAgICAgICAgICAgUGNkRGVmYXVsdFZhbHVlID0NCj4gU3RyaW5nVG9BcnJheShQY2QuRGVm YXVsdFZhbHVlRnJvbURlYy5zdHJpcCgpKQ0KPiArICAgICAgICAgICAgSW5pdEJ5dGVWYWx1ZSAr PSAnJXMuJXMuJXMuJXN8JXN8JXNcbicgJSAobW9kdWxlX2d1aWQsDQo+IFRBQl9ERUZBVUxUX1NU T1JFU19ERUZBVUxULCBQY2QuVG9rZW5TcGFjZUd1aWRDTmFtZSwNCj4gUGNkLlRva2VuQ05hbWUs IFBjZC5EYXR1bVR5cGUsIFBjZERlZmF1bHRWYWx1ZSkNCj4gKyAgICAgICAgICAgICMNCj4gKyAg ICAgICAgICAgICMgR2V0IGN1cnJlbnQgUENEIHZhbHVlIGFuZCBzaXplDQo+ICsgICAgICAgICAg ICAjDQo+ICsgICAgICAgICAgICBDQXBwID0gQ0FwcCArICcgIE9yaWdpbmFsUGNkID0gUGNkR2V0 UHRyICglcywgJXMsICVzLCAlcywNCj4gJk9yaWdpbmFsU2l6ZSk7XG4nICUgKG1vZHVsZV9ndWlk LCBUQUJfREVGQVVMVF9TVE9SRVNfREVGQVVMVCwNCj4gUGNkLlRva2VuU3BhY2VHdWlkQ05hbWUs IFBjZC5Ub2tlbkNOYW1lKQ0KPiArDQo+ICsgICAgICAgICAgICAjDQo+ICsgICAgICAgICAgICAj IERldGVybWluZSB0aGUgc2l6ZSBvZiB0aGUgUENELiAgRm9yIHNpbXBsZSBzdHJ1Y3R1cmVzLA0K PiBzaXplb2YoVFlQRSkgcHJvdmlkZXMNCj4gKyAgICAgICAgICAgICMgdGhlIGNvcnJlY3QgdmFs dWUuICBGb3Igc3RydWN0dXJlcyB3aXRoIGEgZmxleGlibGUgYXJyYXkNCj4gbWVtYmVyLCB0aGUg ZmxleGlibGUNCj4gKyAgICAgICAgICAgICMgYXJyYXkgbWVtYmVyIGlzIGRldGVjdGVkLCBhbmQg dGhlIHNpemUgaXMgYmFzZWQgb24gdGhlDQo+IGhpZ2hlc3QgaW5kZXggdXNlZCB3aXRoDQo+ICsg ICAgICAgICAgICAjIHRoZSBmbGV4aWJsZSBhcnJheSBtZW1iZXIuICBUaGUgZmxleGlibGUgYXJy YXkgbWVtYmVyDQo+IG11c3QgYmUgdGhlIGxhc3QgZmllbGQNCj4gKyAgICAgICAgICAgICMgaW4g YSBzdHJ1Y3R1cmUuICBUaGUgc2l6ZSBmb3JtdWxhIGZvciB0aGlzIGNhc2UgaXM6DQo+ICsgICAg ICAgICAgICAjIE9GRlNFVF9PRihGbGV4YmxlQXJyYXlGaWVsZCkgKyBzaXplb2YoRmxleGlibGVB cnJheVswXSkgKg0KPiAoSGlnaGVzdEluZGV4ICsgMSkNCj4gKyAgICAgICAgICAgICMNCj4gKyAg ICAgICAgICAgIENBcHAgPSBDQXBwICsNCj4gRHNjQnVpbGREYXRhLkdlbmVyYXRlU2l6ZVN0YXRt ZW50cyhQY2QsU2t1TmFtZSxUQUJfREVGQVVMVF9TVE9SRVNfRA0KPiBFRkFVTFQpDQo+ICsgICAg ICAgICAgICBpZiBQY2QuSXNBcnJheSgpIGFuZCBQY2QuQ2FwYWNpdHlbLTFdICE9ICItMSI6DQo+ ICsgICAgICAgICAgICAgICAgQ0FwcCA9IENBcHAgKyAnICBPcmlnaW5hbFNpemUgPSBPcmlnaW5h bFNpemUgPCBzaXplb2YoJXMpDQo+ICogJWQ/IE9yaWdpbmFsU2l6ZTpzaXplb2YoJXMpICogJWQ7 IFxuJyAlDQo+IChQY2QuQmFzZURhdHVtVHlwZSxQY2QuUGNkQXJyYXlTaXplKCksUGNkLkJhc2VE YXR1bVR5cGUsUGNkLlBjZEFycmF5U2l6DQo+IGUoKSkNCj4gKyAgICAgICAgICAgICAgICBDQXBw ID0gQ0FwcCArICcgIFNpemUgPSBzaXplb2YoJXMpICogJWQ7IFxuJyAlDQo+IChQY2QuQmFzZURh dHVtVHlwZSxQY2QuUGNkQXJyYXlTaXplKCkpDQo+ICsNCj4gKyAgICAgICAgICAgICMNCj4gKyAg ICAgICAgICAgICMgQWxsb2NhdGUgYW5kIHplcm8gYnVmZmVyIGZvciB0aGUgUENEDQo+ICsgICAg ICAgICAgICAjIE11c3QgaGFuZGxlIGNhc2VzIHdoZXJlIGN1cnJlbnQgdmFsdWUgaXMgc21hbGxl ciwgbGFyZ2VyLA0Kb3INCj4gc2FtZSBzaXplDQo+ICsgICAgICAgICAgICAjIEFsd2F5cyBrZWVw IHRoYXQgbGFyZ2VyIG9uZSBhcyB0aGUgY3VycmVudCBzaXplDQo+ICsgICAgICAgICAgICAjDQo+ ICsgICAgICAgICAgICBDQXBwID0gQ0FwcCArICcgIFNpemUgPSAoT3JpZ2luYWxTaXplID4gU2l6 ZSA/IE9yaWdpbmFsU2l6ZSA6DQo+IFNpemUpO1xuJw0KPiArICAgICAgICAgICAgQ0FwcCA9IENB cHAgKyAnICBQY2QgICAgID0gKCVzICopbWFsbG9jIChTaXplKTtcbicgJQ0KPiAoUGNkLkJhc2VE YXR1bVR5cGUsKQ0KPiArICAgICAgICAgICAgQ0FwcCA9IENBcHAgKyAnICBtZW1zZXQgKFBjZCwg MCwgU2l6ZSk7XG4nDQo+ICsNCj4gKyAgICAgICAgICAgICMNCj4gKyAgICAgICAgICAgICMgQ29w eSBjdXJyZW50IFBDRCB2YWx1ZSBpbnRvIGFsbG9jYXRlZCBidWZmZXIuDQo+ICsgICAgICAgICAg ICAjDQo+ICsgICAgICAgICAgICBDQXBwID0gQ0FwcCArICcgIG1lbWNweSAoUGNkLCBPcmlnaW5h bFBjZCwgT3JpZ2luYWxTaXplKTtcbicNCj4gKw0KPiArICAgICAgICAgICAgIw0KPiArICAgICAg ICAgICAgIyBBc3NpZ24gZmllbGQgdmFsdWVzIGluIFBDRA0KPiArICAgICAgICAgICAgIw0KPiAr ICAgICAgICAgICAgQ0FwcCA9IENBcHAgKw0KPiBEc2NCdWlsZERhdGEuR2VuZXJhdGVEZWZhdWx0 VmFsdWVBc3NpZ25TdGF0ZW1lbnQoUGNkKQ0KPiArDQo+ICsgICAgICAgICAgICBDQXBwID0gQ0Fw cCArICIvLyBTa3VOYW1lOiAlcywgIERlZmF1bHRTdG9yZU5hbWU6DQo+IFNUQU5EQVJEIFxuIiAl IHNlbGYuU2t1SWRNZ3IuU3lzdGVtU2t1SWQNCj4gKyAgICAgICAgICAgIENBcHAgPSBDQXBwICsN Cj4gRHNjQnVpbGREYXRhLkdlbmVyYXRlSW5pdFZhbHVlU3RhdGVtZW50KFBjZCwgc2VsZi5Ta3VJ ZE1nci5TeXN0ZW1Ta3VJZCwNCj4gVEFCX0RFRkFVTFRfU1RPUkVTX0RFRkFVTFQpDQo+ICsgICAg ICAgICAgICBDQXBwID0gQ0FwcCArDQo+IERzY0J1aWxkRGF0YS5HZW5lcmF0ZUZkZlZhbHVlU3Rh dGVtZW50KFBjZCkNCj4gKyAgICAgICAgICAgIENBcHAgPSBDQXBwICsNCj4gRHNjQnVpbGREYXRh LkdlbmVyYXRlQ29tbWFuZExpbmVWYWx1ZVN0YXRlbWVudChQY2QpDQo+ICsgICAgICAgICAgICBD QXBwID0gQ0FwcCArDQo+IERzY0J1aWxkRGF0YS5HZW5lcmF0ZU1vZHVsZVZhbHVlU3RhdGVtZW50 KG1vZHVsZV9ndWlkLFBjZCkNCj4gKyAgICAgICAgICAgICMNCj4gKyAgICAgICAgICAgICMgU2V0 IG5ldyBQQ0QgdmFsdWUgYW5kIHNpemUNCj4gKyAgICAgICAgICAgICMNCj4gKyAgICAgICAgICAg IENBcHAgPSBDQXBwICsgJyAgUGNkU2V0UHRyICglcywgJXMsICVzLCAlcywgU2l6ZSwgKHZvaWQN Cj4gKilQY2QpO1xuJyAlIChtb2R1bGVfZ3VpZCwgVEFCX0RFRkFVTFRfU1RPUkVTX0RFRkFVTFQs DQo+IFBjZC5Ub2tlblNwYWNlR3VpZENOYW1lLCBQY2QuVG9rZW5DTmFtZSkNCj4gKw0KPiArICAg ICAgICAgICAgIw0KPiArICAgICAgICAgICAgIyBGcmVlIFBDRA0KPiArICAgICAgICAgICAgIw0K PiArICAgICAgICAgICAgQ0FwcCA9IENBcHAgKyAnICBmcmVlIChQY2QpO1xuJw0KPiArICAgICAg ICAgICAgQ0FwcCA9IENBcHAgKyAnfVxuJw0KPiArICAgICAgICAgICAgQ0FwcCA9IENBcHAgKyAn XG4nDQo+ICsgICAgICAgIHJldHVybiBJbml0Qnl0ZVZhbHVlLENBcHANCj4gKw0KPiAgICAgIGRl ZiBHZW5lcmF0ZUluaXRpYWxpemVGdW5jKHNlbGYsIFNrdU5hbWUsIERlZmF1bHRTdG9yZSwgUGNk LA0KPiBJbml0Qnl0ZVZhbHVlLCBDQXBwKToNCj4gICAgICAgICAgT3ZlcnJpZGVWYWx1ZXMgPSB7 RGVmYXVsdFN0b3JlOnt9fQ0KPiAgICAgICAgICBpZiBQY2QuU2t1T3ZlcnJpZGVWYWx1ZXM6DQo+ ICAgICAgICAgICAgICBPdmVycmlkZVZhbHVlcyA9IFBjZC5Ta3VPdmVycmlkZVZhbHVlc1tTa3VO YW1lXQ0KPiAgICAgICAgICBpZiBub3QgT3ZlcnJpZGVWYWx1ZXM6DQo+IEBAIC0yNTg0LDI2ICsy NzY5LDQyIEBAIGNsYXNzIERzY0J1aWxkRGF0YShQbGF0Zm9ybUJ1aWxkQ2xhc3NPYmplY3QpOg0K PiAgICAgICAgICBDQXBwID0gQ0FwcCArICdcbicNCj4gICAgICAgICAgZm9yIFBjZCBpbiBTdHJ1 Y3R1cmVkUGNkcy52YWx1ZXMoKToNCj4gICAgICAgICAgICAgIENBcHAgPSBDQXBwICsgc2VsZi5H ZW5lcmF0ZUFycmF5QXNzaWdubWVudChQY2QpDQo+ICAgICAgICAgIGZvciBQY2ROYW1lIGluIHNv cnRlZChTdHJ1Y3R1cmVkUGNkcy5rZXlzKCkpOg0KPiAgICAgICAgICAgICAgUGNkID0gU3RydWN0 dXJlZFBjZHNbUGNkTmFtZV0NCj4gKw0KPiArICAgICAgICAgICAgI2NyZWF0ZSB2b2lkIHZvaWQg Q2FsX3RvY2tlbl9jbmFtZV9TaXplIGZ1bmN0aW9ucw0KPiAgICAgICAgICAgICAgQ0FwcCA9IENB cHAgKyBzZWxmLkdlbmVyYXRlU2l6ZUZ1bmN0aW9uKFBjZCkNCj4gKw0KPiArICAgICAgICAgICAg I2NyZWF0ZSB2b2lkIEFzc2lnbl8gZnVuY3Rpb25zDQo+ICsNCj4gKyAgICAgICAgICAgICMgRnJv bSBERUMNCj4gICAgICAgICAgICAgIENBcHAgPSBDQXBwICsgc2VsZi5HZW5lcmF0ZURlZmF1bHRW YWx1ZUFzc2lnbkZ1bmN0aW9uKFBjZCkNCj4gKyAgICAgICAgICAgICMgRnJvbSBGZGYNCj4gICAg ICAgICAgICAgIENBcHAgPSBDQXBwICsgc2VsZi5HZW5lcmF0ZUZkZlZhbHVlKFBjZCkNCj4gKyAg ICAgICAgICAgICMgRnJvbSBDb21tYW5kTGluZQ0KPiAgICAgICAgICAgICAgQ0FwcCA9IENBcHAg KyBzZWxmLkdlbmVyYXRlQ29tbWFuZExpbmVWYWx1ZShQY2QpDQo+ICsNCj4gKyAgICAgICAgICAg ICMgRnJvbSBEc2MgR2xvYmFsIHNldHRpbmcNCj4gICAgICAgICAgICAgIGlmIHNlbGYuU2t1T3Zl cnJpZGVWYWx1ZXNFbXB0eShQY2QuU2t1T3ZlcnJpZGVWYWx1ZXMpIG9yDQo+IFBjZC5UeXBlIGlu IFtzZWxmLl9QQ0RfVFlQRV9TVFJJTkdfW01PREVMX1BDRF9GSVhFRF9BVF9CVUlMRF0sDQo+IA0K PiBzZWxmLl9QQ0RfVFlQRV9TVFJJTkdfW01PREVMX1BDRF9QQVRDSEFCTEVfSU5fTU9EVUxFXV06 DQo+ICAgICAgICAgICAgICAgICAgQ0FwcCA9IENBcHAgKyBzZWxmLkdlbmVyYXRlSW5pdFZhbHVl RnVuY3Rpb24oUGNkLA0KPiBzZWxmLlNrdUlkTWdyLlN5c3RlbVNrdUlkLCBUQUJfREVGQVVMVF9T VE9SRVNfREVGQVVMVCkNCj4gICAgICAgICAgICAgIGVsc2U6DQo+ICAgICAgICAgICAgICAgICAg Zm9yIFNrdU5hbWUgaW4gc2VsZi5Ta3VJZE1nci5Ta3VPdmVycmlkZU9yZGVyKCk6DQo+ICAgICAg ICAgICAgICAgICAgICAgIGlmIFNrdU5hbWUgbm90IGluIFBjZC5Ta3VPdmVycmlkZVZhbHVlczoN Cj4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQo+ICAgICAgICAgICAgICAgICAg ICAgIGZvciBEZWZhdWx0U3RvcmVOYW1lIGluDQo+IFBjZC5Ta3VPdmVycmlkZVZhbHVlc1tTa3VO YW1lXToNCj4gICAgICAgICAgICAgICAgICAgICAgICAgIENBcHAgPSBDQXBwICsNCj4gc2VsZi5H ZW5lcmF0ZUluaXRWYWx1ZUZ1bmN0aW9uKFBjZCwgU2t1TmFtZSwgRGVmYXVsdFN0b3JlTmFtZSkN Cj4gKw0KPiArICAgICAgICAgICAgIyBGcm9tIERzYyBtb2R1bGUgc2NvcGUgc2V0dGluZw0KPiAr ICAgICAgICAgICAgQ0FwcCA9IENBcHAgKyBzZWxmLkdlbmVyYXRlTW9kdWxlU2NvcGVWYWx1ZShQ Y2QpDQo+ICsNCj4gKyAgICAgICAgICAgICNjcmVhdGUgSW5pdGlhbGl6ZV8gZnVuY3Rpb25zDQo+ ICAgICAgICAgICAgICBpZiBzZWxmLlNrdU92ZXJyaWRlVmFsdWVzRW1wdHkoUGNkLlNrdU92ZXJy aWRlVmFsdWVzKSBvcg0KPiBQY2QuVHlwZSBpbiBbc2VsZi5fUENEX1RZUEVfU1RSSU5HX1tNT0RF TF9QQ0RfRklYRURfQVRfQlVJTERdLA0KPiANCj4gc2VsZi5fUENEX1RZUEVfU1RSSU5HX1tNT0RF TF9QQ0RfUEFUQ0hBQkxFX0lOX01PRFVMRV1dOg0KPiAgICAgICAgICAgICAgICAgIEluaXRCeXRl VmFsdWUsIENBcHAgPQ0KPiBzZWxmLkdlbmVyYXRlSW5pdGlhbGl6ZUZ1bmMoc2VsZi5Ta3VJZE1n ci5TeXN0ZW1Ta3VJZCwNCj4gVEFCX0RFRkFVTFRfU1RPUkVTX0RFRkFVTFQsIFBjZCwgSW5pdEJ5 dGVWYWx1ZSwgQ0FwcCkNCj4gKyAgICAgICAgICAgICAgICBJbml0Qnl0ZVZhbHVlLCBDQXBwID0N Cj4NCnNlbGYuR2VuZXJhdGVNb2R1bGVTY29wZUluaXRpYWxpemVGdW5jKHNlbGYuU2t1SWRNZ3Iu U3lzdGVtU2t1SWQsUGNkLEluaXRCeQ0KPiB0ZVZhbHVlLENBcHApDQo+ICAgICAgICAgICAgICBl bHNlOg0KPiAgICAgICAgICAgICAgICAgIGZvciBTa3VOYW1lIGluIHNlbGYuU2t1SWRNZ3IuU2t1 T3ZlcnJpZGVPcmRlcigpOg0KPiAgICAgICAgICAgICAgICAgICAgICBpZiBTa3VOYW1lIG5vdCBp biBQY2QuU2t1T3ZlcnJpZGVWYWx1ZXM6DQo+ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250 aW51ZQ0KPiAgICAgICAgICAgICAgICAgICAgICBmb3IgRGVmYXVsdFN0b3JlTmFtZSBpbiBQY2Qu RGVmYXVsdFN0b3JlTmFtZToNCj4gQEAgLTI2MTYsMTAgKzI4MTcsMTIgQEAgY2xhc3MgRHNjQnVp bGREYXRhKFBsYXRmb3JtQnVpbGRDbGFzc09iamVjdCk6DQo+ICAgICAgICAgIENBcHAgPSBDQXBw ICsgJyAgKVxuJw0KPiAgICAgICAgICBDQXBwID0gQ0FwcCArICd7XG4nDQo+ICAgICAgICAgIGZv ciBQY2QgaW4gU3RydWN0dXJlZFBjZHMudmFsdWVzKCk6DQo+ICAgICAgICAgICAgICBpZiBzZWxm LlNrdU92ZXJyaWRlVmFsdWVzRW1wdHkoUGNkLlNrdU92ZXJyaWRlVmFsdWVzKSBvcg0KPiBQY2Qu VHlwZSBpbiBbc2VsZi5fUENEX1RZUEVfU1RSSU5HX1tNT0RFTF9QQ0RfRklYRURfQVRfQlVJTERd LA0KPiBzZWxmLl9QQ0RfVFlQRV9TVFJJTkdfW01PREVMX1BDRF9QQVRDSEFCTEVfSU5fTU9EVUxF XV06DQo+ICAgICAgICAgICAgICAgICAgQ0FwcCA9IENBcHAgKyAnICBJbml0aWFsaXplXyVzXyVz XyVzXyVzKCk7XG4nICUNCj4gKHNlbGYuU2t1SWRNZ3IuU3lzdGVtU2t1SWQsIFRBQl9ERUZBVUxU X1NUT1JFU19ERUZBVUxULA0KPiBQY2QuVG9rZW5TcGFjZUd1aWRDTmFtZSwgUGNkLlRva2VuQ05h bWUpDQo+ICsgICAgICAgICAgICAgICAgZm9yIE1vZHVsZUd1aWQgaW4NCj4gUGNkLlBjZEZpbGVk VmFsdWVGcm9tRHNjQ29tcG9uZW50Og0KPiArICAgICAgICAgICAgICAgICAgICBDQXBwICs9ICIg IEluaXRpYWxpemVfJXNfJXNfJXNfJXMoKTtcbiIgJQ0KPiAoTW9kdWxlR3VpZCxUQUJfREVGQVVM VF9TVE9SRVNfREVGQVVMVCAsUGNkLlRva2VuU3BhY2VHdWlkQ05hbWUsDQo+IFBjZC5Ub2tlbkNO YW1lKQ0KPiAgICAgICAgICAgICAgZWxzZToNCj4gICAgICAgICAgICAgICAgICBmb3IgU2t1TmFt ZSBpbiBzZWxmLlNrdUlkTWdyLlNrdU92ZXJyaWRlT3JkZXIoKToNCj4gICAgICAgICAgICAgICAg ICAgICAgaWYgU2t1TmFtZSBub3QgaW4gc2VsZi5Ta3VJZE1nci5BdmFpbGFibGVTa3VJZFNldDoN Cj4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQo+ICAgICAgICAgICAgICAgICAg ICAgIGZvciBEZWZhdWx0U3RvcmVOYW1lIGluDQo+IFBjZC5Ta3VPdmVycmlkZVZhbHVlc1tTa3VO YW1lXToNCj4gQEAgLTI2MzEsMTAgKzI4MzQsMTEgQEAgY2xhc3MgRHNjQnVpbGREYXRhKFBsYXRm b3JtQnVpbGRDbGFzc09iamVjdCk6DQo+ICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhz ZWxmLk91dHB1dFBhdGgpOg0KPiAgICAgICAgICAgICAgb3MubWFrZWRpcnMoc2VsZi5PdXRwdXRQ YXRoKQ0KPiAgICAgICAgICBDQXBwQmFzZUZpbGVOYW1lID0gb3MucGF0aC5qb2luKHNlbGYuT3V0 cHV0UGF0aCwNCj4gUGNkVmFsdWVJbml0TmFtZSkNCj4gICAgICAgICAgU2F2ZUZpbGVPbkNoYW5n ZShDQXBwQmFzZUZpbGVOYW1lICsgJy5jJywgQ0FwcCwgRmFsc2UpDQo+IA0KPiArICAgICAgICAj IHN0YXJ0IGdlbmVyYXRpbmcgbWFrZWZpbGUNCj4gICAgICAgICAgTWFrZUFwcCA9IFBjZE1ha2Vm aWxlSGVhZGVyDQo+ICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOg0KPiAgICAg ICAgICAgICAgTWFrZUFwcCA9IE1ha2VBcHAgKyAnQVBQRklMRSA9ICVzXCVzLmV4ZVxuJyAlDQo+ IChzZWxmLk91dHB1dFBhdGgsIFBjZFZhbHVlSW5pdE5hbWUpICsgJ0FQUE5BTUUgPSAlc1xuJyAl DQo+IChQY2RWYWx1ZUluaXROYW1lKSArICdPQkpFQ1RTID0gJXNcJXMub2JqICVzLm9ialxuJyAl IChzZWxmLk91dHB1dFBhdGgsDQo+IFBjZFZhbHVlSW5pdE5hbWUsIG9zLnBhdGguam9pbihzZWxm Lk91dHB1dFBhdGgsIFBjZFZhbHVlQ29tbW9uTmFtZSkpICsNCj4gJ0lOQyA9ICcNCj4gICAgICAg ICAgZWxzZToNCj4gICAgICAgICAgICAgIE1ha2VBcHAgPSBNYWtlQXBwICsgUGNkR2NjTWFrZWZp bGUNCj4gQEAgLTI3NTMsMTkgKzI5NTcsMjIgQEAgY2xhc3MgRHNjQnVpbGREYXRhKFBsYXRmb3Jt QnVpbGRDbGFzc09iamVjdCk6DQo+ICAgICAgICAgICAgICBNYWtlQXBwID0gTWFrZUFwcCArICdc dGNwIC1mICVzICVzL1BjZFZhbHVlQ29tbW9uLmNcbicgJQ0KPiAoUGNkVmFsdWVDb21tb25QYXRo LCBzZWxmLk91dHB1dFBhdGgpDQo+ICAgICAgICAgIE1ha2VGaWxlTmFtZSA9IG9zLnBhdGguam9p bihzZWxmLk91dHB1dFBhdGgsICdNYWtlZmlsZScpDQo+ICAgICAgICAgIE1ha2VBcHAgKz0gIiQo T0JKRUNUUykgOiAlc1xuIiAlIE1ha2VGaWxlTmFtZQ0KPiAgICAgICAgICBTYXZlRmlsZU9uQ2hh bmdlKE1ha2VGaWxlTmFtZSwgTWFrZUFwcCwgRmFsc2UpDQo+IA0KPiArICAgICAgICAjIHN0YXJ0 IGdlbmVyYXRpbmcgaW5wdXQgZmlsZQ0KPiAgICAgICAgICBJbnB1dFZhbHVlRmlsZSA9IG9zLnBh dGguam9pbihzZWxmLk91dHB1dFBhdGgsICdJbnB1dC50eHQnKQ0KPiAgICAgICAgICBPdXRwdXRW YWx1ZUZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5PdXRwdXRQYXRoLCAnT3V0cHV0LnR4dCcpDQo+ ICAgICAgICAgIFNhdmVGaWxlT25DaGFuZ2UoSW5wdXRWYWx1ZUZpbGUsIEluaXRCeXRlVmFsdWUs IEZhbHNlKQ0KPiANCj4gICAgICAgICAgRGVzdF9QY2RWYWx1ZUluaXRFeGUgPSBQY2RWYWx1ZUlu aXROYW1lDQo+ICAgICAgICAgIGlmIG5vdCBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoNCj4gICAg ICAgICAgICAgIERlc3RfUGNkVmFsdWVJbml0RXhlID0gb3MucGF0aC5qb2luKHNlbGYuT3V0cHV0 UGF0aCwNCj4gUGNkVmFsdWVJbml0TmFtZSkNCj4gICAgICAgICAgZWxzZToNCj4gICAgICAgICAg ICAgIERlc3RfUGNkVmFsdWVJbml0RXhlID0gb3MucGF0aC5qb2luKHNlbGYuT3V0cHV0UGF0aCwN Cj4gUGNkVmFsdWVJbml0TmFtZSkgKyIuZXhlIg0KPiArDQo+ICsgICAgICAgICNzdGFydCBidWls ZGluZyB0aGUgc3RydWN0dXJlIHBjZCB2YWx1ZSB0b29sDQo+ICAgICAgICAgIE1lc3NhZ2VzID0g JycNCj4gICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6DQo+ICAgICAgICAgICAg ICBNYWtlQ29tbWFuZCA9ICdubWFrZSAtZiAlcycgJSAoTWFrZUZpbGVOYW1lKQ0KPiAgICAgICAg ICAgICAgcmV0dXJuY29kZSwgU3RkT3V0LCBTdGRFcnIgPSBEc2NCdWlsZERhdGEuRXhlY3V0ZUNv bW1hbmQNCj4gKE1ha2VDb21tYW5kKQ0KPiAgICAgICAgICAgICAgTWVzc2FnZXMgPSBTdGRPdXQN Cj4gQEAgLTI4MjQsMTcgKzMwMzEsMTkgQEAgY2xhc3MgRHNjQnVpbGREYXRhKFBsYXRmb3JtQnVp bGRDbGFzc09iamVjdCk6DQo+ICAgICAgICAgICAgICBpZiBNZXNzYWdlR3JvdXA6DQo+ICAgICAg ICAgICAgICAgICAgRWRrTG9nZ2VyLmVycm9yKCJidWlsZCIsIFBDRF9TVFJVQ1RVUkVfUENEX0VS Uk9SLA0KPiAiXG4iLmpvaW4oTWVzc2FnZUdyb3VwKSApDQo+ICAgICAgICAgICAgICBlbHNlOg0K PiAgICAgICAgICAgICAgICAgIEVka0xvZ2dlci5lcnJvcignQnVpbGQnLCBDT01NQU5EX0ZBSUxV UkUsICdDYW4gbm90DQo+IGV4ZWN1dGUgY29tbWFuZDogJXNcbiVzXG4lcycgJSAoTWFrZUNvbW1h bmQsIFN0ZE91dCwgU3RkRXJyKSkNCj4gDQo+ICsgICAgICAgICNzdGFydCBleGVjdXRpbmcgdGhl IHN0cnVjdHVyZSBwY2QgdmFsdWUgdG9vbA0KPiAgICAgICAgICBpZiBEc2NCdWlsZERhdGEuTmVl ZFVwZGF0ZU91dHB1dChPdXRwdXRWYWx1ZUZpbGUsDQo+IERlc3RfUGNkVmFsdWVJbml0RXhlLCBJ bnB1dFZhbHVlRmlsZSk6DQo+ICAgICAgICAgICAgICBDb21tYW5kID0gRGVzdF9QY2RWYWx1ZUlu aXRFeGUgKyAnIC1pICVzIC1vICVzJyAlDQo+IChJbnB1dFZhbHVlRmlsZSwgT3V0cHV0VmFsdWVG aWxlKQ0KPiAgICAgICAgICAgICAgcmV0dXJuY29kZSwgU3RkT3V0LCBTdGRFcnIgPSBEc2NCdWls ZERhdGEuRXhlY3V0ZUNvbW1hbmQNCj4gKENvbW1hbmQpDQo+ICAgICAgICAgICAgICBFZGtMb2dn ZXIudmVyYm9zZSAoJyVzXG4lc1xuJXMnICUgKENvbW1hbmQsIFN0ZE91dCwNCj4gU3RkRXJyKSkN Cj4gICAgICAgICAgICAgIGlmIHJldHVybmNvZGUgIT0gMDoNCj4gICAgICAgICAgICAgICAgICBF ZGtMb2dnZXIud2FybignQnVpbGQnLCBDT01NQU5EX0ZBSUxVUkUsICdDYW4gbm90DQo+IGNvbGxl Y3Qgb3V0cHV0IGZyb20gY29tbWFuZDogJXNcbiVzXG4nICUgKENvbW1hbmQsIFN0ZE91dCwgU3Rk RXJyKSkNCj4gDQo+ICsgICAgICAgICNzdGFydCB1cGRhdGUgc3RydWN0dXJlIHBjZCBmaW5hbCB2 YWx1ZQ0KPiAgICAgICAgICBGaWxlID0gb3BlbiAoT3V0cHV0VmFsdWVGaWxlLCAncicpDQo+ICAg ICAgICAgIEZpbGVCdWZmZXIgPSBGaWxlLnJlYWRsaW5lcygpDQo+ICAgICAgICAgIEZpbGUuY2xv c2UoKQ0KPiANCj4gICAgICAgICAgU3RydWN0dXJlUGNkU2V0ID0gW10NCj4gZGlmZiAtLWdpdCBh L0Jhc2VUb29scy9Tb3VyY2UvUHl0aG9uL2J1aWxkL0J1aWxkUmVwb3J0LnB5DQo+IGIvQmFzZVRv b2xzL1NvdXJjZS9QeXRob24vYnVpbGQvQnVpbGRSZXBvcnQucHkNCj4gaW5kZXggOGVmYTg2OTE2 Mi4uZDRkZTA3Y2FlMiAxMDA2NDQNCj4gLS0tIGEvQmFzZVRvb2xzL1NvdXJjZS9QeXRob24vYnVp bGQvQnVpbGRSZXBvcnQucHkNCj4gKysrIGIvQmFzZVRvb2xzL1NvdXJjZS9QeXRob24vYnVpbGQv QnVpbGRSZXBvcnQucHkNCj4gQEAgLTY5NCwxMSArNjk0LDExIEBAIGNsYXNzIE1vZHVsZVJlcG9y dChvYmplY3QpOg0KPiAgICAgICAgICAgICAgRmlsZVdyaXRlKEZpbGUsICJQQ0kgQ2xhc3MgQ29k ZTogICAgICAgJXMiICUNCj4gc2VsZi5QY2lDbGFzc0NvZGUpDQo+IA0KPiAgICAgICAgICBGaWxl V3JpdGUoRmlsZSwgZ1NlY3Rpb25TZXApDQo+IA0KPiAgICAgICAgICBpZiAiUENEIiBpbiBSZXBv cnRUeXBlOg0KPiAtICAgICAgICAgICAgR2xvYmFsUGNkUmVwb3J0LkdlbmVyYXRlUmVwb3J0KEZp bGUsIHNlbGYuTW9kdWxlUGNkU2V0KQ0KPiArICAgICAgICAgICAgR2xvYmFsUGNkUmVwb3J0Lkdl bmVyYXRlUmVwb3J0KEZpbGUsDQo+IHNlbGYuTW9kdWxlUGNkU2V0LHNlbGYuRmlsZUd1aWQpDQo+ IA0KPiAgICAgICAgICBpZiAiTElCUkFSWSIgaW4gUmVwb3J0VHlwZToNCj4gICAgICAgICAgICAg IHNlbGYuTGlicmFyeVJlcG9ydC5HZW5lcmF0ZVJlcG9ydChGaWxlKQ0KPiANCj4gICAgICAgICAg aWYgIkRFUEVYIiBpbiBSZXBvcnRUeXBlOg0KPiBAQCAtODc5LDExICs4NzksMTEgQEAgY2xhc3Mg UGNkUmVwb3J0KG9iamVjdCk6DQo+ICAgICAgICAgICAgICBmb3IgKFRva2VuQ05hbWUsIFRva2Vu U3BhY2VHdWlkQ05hbWUpIGluDQo+IFBhLlBsYXRmb3JtLlBjZHM6DQo+ICAgICAgICAgICAgICAg ICAgRHNjRGVmYXVsdFZhbHVlID0gUGEuUGxhdGZvcm0uUGNkc1soVG9rZW5DTmFtZSwNCj4gVG9r ZW5TcGFjZUd1aWRDTmFtZSldLkRzY0RlZmF1bHRWYWx1ZQ0KPiAgICAgICAgICAgICAgICAgIGlm IERzY0RlZmF1bHRWYWx1ZToNCj4gICAgICAgICAgICAgICAgICAgICAgc2VsZi5Ec2NQY2REZWZh dWx0WyhUb2tlbkNOYW1lLA0KPiBUb2tlblNwYWNlR3VpZENOYW1lKV0gPSBEc2NEZWZhdWx0VmFs dWUNCj4gDQo+IC0gICAgZGVmIEdlbmVyYXRlUmVwb3J0KHNlbGYsIEZpbGUsIE1vZHVsZVBjZFNl dCk6DQo+ICsgICAgZGVmIEdlbmVyYXRlUmVwb3J0KHNlbGYsIEZpbGUsIE1vZHVsZVBjZFNldCxt b2R1bGVfZ3VpZD1Ob25lKToNCj4gICAgICAgICAgaWYgbm90IE1vZHVsZVBjZFNldDoNCj4gICAg ICAgICAgICAgIGlmIHNlbGYuQ29uZGl0aW9uYWxQY2RzOg0KPiAgICAgICAgICAgICAgICAgIHNl bGYuR2VuZXJhdGVSZXBvcnREZXRhaWwoRmlsZSwgTW9kdWxlUGNkU2V0LCAxKQ0KPiAgICAgICAg ICAgICAgaWYgc2VsZi5VbnVzZWRQY2RzOg0KPiAgICAgICAgICAgICAgICAgIElzRW1wdHkgPSBU cnVlDQo+IEBAIC04OTUsMTEgKzg5NSwxMSBAQCBjbGFzcyBQY2RSZXBvcnQob2JqZWN0KToNCj4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaw0KPiAgICAgICAgICAgICAgICAgICAg ICBpZiBub3QgSXNFbXB0eToNCj4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrDQo+ICAg ICAgICAgICAgICAgICAgaWYgbm90IElzRW1wdHk6DQo+ICAgICAgICAgICAgICAgICAgICAgIHNl bGYuR2VuZXJhdGVSZXBvcnREZXRhaWwoRmlsZSwgTW9kdWxlUGNkU2V0LCAyKQ0KPiAtICAgICAg ICBzZWxmLkdlbmVyYXRlUmVwb3J0RGV0YWlsKEZpbGUsIE1vZHVsZVBjZFNldCkNCj4gKyAgICAg ICAgc2VsZi5HZW5lcmF0ZVJlcG9ydERldGFpbChGaWxlLCBNb2R1bGVQY2RTZXQsbW9kdWxlX2d1 aWQgPQ0KPiBtb2R1bGVfZ3VpZCkNCj4gDQo+ICAgICAgIyMNCj4gICAgICAjIEdlbmVyYXRlIHJl cG9ydCBmb3IgUENEIGluZm9ybWF0aW9uDQo+ICAgICAgIw0KPiAgICAgICMgVGhpcyBmdW5jdGlv biBnZW5lcmF0ZXMgcmVwb3J0IGZvciBzZXBhcmF0ZSBtb2R1bGUgZXhwcmVzc2lvbg0KPiBAQCAt OTExLDExICs5MTEsMTEgQEAgY2xhc3MgUGNkUmVwb3J0KG9iamVjdCk6DQo+ICAgICAgIyAgICAg ICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtIFBDRCByZXBvcnQNCj4gICAgICAjIEBwYXJhbSBS ZXBvcnR5U3ViVHlwZSAgMCBtZWFucyBwbGF0Zm9ybS9tb2R1bGUgUENEIHJlcG9ydCwgMQ0KPiBt ZWFucyBDb25kaXRpb25hbA0KPiAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rp dmVzIHNlY3Rpb24gcmVwb3J0LCAyIG1lYW5zDQo+IFVudXNlZCBQY2RzIHNlY3Rpb24gcmVwb3J0 DQo+ICAgICAgIyBAcGFyYW0gRHNjT3ZlcnJpZGVQY2RzIE1vZHVsZSBEU0Mgb3ZlcnJpZGUgUENE cyBzZXQNCj4gICAgICAjDQo+IC0gICAgZGVmIEdlbmVyYXRlUmVwb3J0RGV0YWlsKHNlbGYsIEZp bGUsIE1vZHVsZVBjZFNldCwgUmVwb3J0U3ViVHlwZSA9DQowKToNCj4gKyAgICBkZWYgR2VuZXJh dGVSZXBvcnREZXRhaWwoc2VsZiwgRmlsZSwgTW9kdWxlUGNkU2V0LCBSZXBvcnRTdWJUeXBlID0N Cj4gMCxtb2R1bGVfZ3VpZD1Ob25lKToNCj4gICAgICAgICAgUGNkRGljdCA9IHNlbGYuQWxsUGNk cw0KPiAgICAgICAgICBpZiBSZXBvcnRTdWJUeXBlID09IDE6DQo+ICAgICAgICAgICAgICBQY2RE aWN0ID0gc2VsZi5Db25kaXRpb25hbFBjZHMNCj4gICAgICAgICAgZWxpZiBSZXBvcnRTdWJUeXBl ID09IDI6DQo+ICAgICAgICAgICAgICBQY2REaWN0ID0gc2VsZi5VbnVzZWRQY2RzDQo+IEBAIC05 OTEsMTQgKzk5MSwxNiBAQCBjbGFzcyBQY2RSZXBvcnQob2JqZWN0KToNCj4gICAgICAgICAgICAg ICAgICBpZiBEc2NEZWZhdWx0VmFsdWU6DQo+ICAgICAgICAgICAgICAgICAgICAgIFBjZFZhbHVl ID0gRHNjRGVmYXVsdFZhbHVlDQo+ICAgICAgICAgICAgICAgICAgI1RoZSBEZWZhdWx0VmFsdWUg b2YgU3RydWN0dXJlUGNkIGFscmVhZHkgYmUgdGhlIGxhdGVzdCwNCj4gbm8gbmVlZCB0byB1cGRh dGUuDQo+ICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuSXNTdHJ1Y3R1cmVQY2QoUGNkLlRv a2VuQ05hbWUsDQo+IFBjZC5Ub2tlblNwYWNlR3VpZENOYW1lKToNCj4gICAgICAgICAgICAgICAg ICAgICAgUGNkLkRlZmF1bHRWYWx1ZSA9IFBjZFZhbHVlDQo+ICsgICAgICAgICAgICAgICAgUGNk Q29tcG9uZW50VmFsdWUgPSBOb25lDQo+ICAgICAgICAgICAgICAgICAgaWYgTW9kdWxlUGNkU2V0 IGlzIG5vdCBOb25lOg0KPiAgICAgICAgICAgICAgICAgICAgICBpZiAoUGNkLlRva2VuQ05hbWUs IFBjZC5Ub2tlblNwYWNlR3VpZENOYW1lLA0KPiBUeXBlKSBub3QgaW4gTW9kdWxlUGNkU2V0Og0K PiAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUNCj4gLSAgICAgICAgICAgICAgICAg ICAgSW5mRGVmYXVsdFZhbHVlLCBQY2RWYWx1ZSA9DQo+IE1vZHVsZVBjZFNldFtQY2QuVG9rZW5D TmFtZSwgUGNkLlRva2VuU3BhY2VHdWlkQ05hbWUsIFR5cGVdDQo+ICsgICAgICAgICAgICAgICAg ICAgIEluZkRlZmF1bHRWYWx1ZSwgUGNkQ29tcG9uZW50VmFsdWUgPQ0KPiBNb2R1bGVQY2RTZXRb UGNkLlRva2VuQ05hbWUsIFBjZC5Ub2tlblNwYWNlR3VpZENOYW1lLCBUeXBlXQ0KPiArICAgICAg ICAgICAgICAgICAgICBQY2RWYWx1ZSA9IFBjZENvbXBvbmVudFZhbHVlDQo+ICAgICAgICAgICAg ICAgICAgICAgICNUaGUgRGVmYXVsdFZhbHVlIG9mIFN0cnVjdHVyZVBjZCBhbHJlYWR5IGJlIHRo ZQ0KPiBsYXRlc3QsIG5vIG5lZWQgdG8gdXBkYXRlLg0KPiAgICAgICAgICAgICAgICAgICAgICBp ZiBub3Qgc2VsZi5Jc1N0cnVjdHVyZVBjZChQY2QuVG9rZW5DTmFtZSwNCj4gUGNkLlRva2VuU3Bh Y2VHdWlkQ05hbWUpOg0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgUGNkLkRlZmF1bHRWYWx1 ZSA9IFBjZFZhbHVlDQo+ICAgICAgICAgICAgICAgICAgICAgIGlmIEluZkRlZmF1bHRWYWx1ZToN Cj4gICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToNCj4gQEAgLTEwNzksNjIgKzEwODEsNjgg QEAgY2xhc3MgUGNkUmVwb3J0KG9iamVjdCk6DQo+ICAgICAgICAgICAgICAgICAgaWYgc2VsZi5J c1N0cnVjdHVyZVBjZChQY2QuVG9rZW5DTmFtZSwNCj4gUGNkLlRva2VuU3BhY2VHdWlkQ05hbWUp Og0KPiAgICAgICAgICAgICAgICAgICAgICBJc1N0cnVjdHVyZSA9IFRydWUNCj4gICAgICAgICAg ICAgICAgICAgICAgaWYgVHlwZU5hbWUgaW4gKCdEWU5WUEQnLCAnREVYVlBEJyk6DQo+ICAgICAg ICAgICAgICAgICAgICAgICAgICBTa3VJbmZvTGlzdCA9IFBjZC5Ta3VJbmZvTGlzdA0KPiAgICAg ICAgICAgICAgICAgICAgICBQY2QgPQ0KPiBHbG9iYWxEYXRhLmdTdHJ1Y3R1cmVQY2Rbc2VsZi5B cmNoXVsoUGNkLlRva2VuQ05hbWUsDQo+IFBjZC5Ub2tlblNwYWNlR3VpZENOYW1lKV0NCj4gKyAg ICAgICAgICAgICAgICAgICAgaWYgTW9kdWxlUGNkU2V0IGFuZA0KPiBNb2R1bGVQY2RTZXQuZ2V0 KChQY2QuVG9rZW5DTmFtZSwgUGNkLlRva2VuU3BhY2VHdWlkQ05hbWUsIFR5cGUpKToNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgIEluZkRlZmF1bHRWYWx1ZSwgUGNkQ29tcG9uZW50VmFsdWUg PQ0KPiBNb2R1bGVQY2RTZXRbUGNkLlRva2VuQ05hbWUsIFBjZC5Ub2tlblNwYWNlR3VpZENOYW1l LCBUeXBlXQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgRHNjRGVmYXVsdFZhbEJhayA9IFBj ZC5EZWZhdWx0VmFsdWUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIFBjZC5EZWZhdWx0VmFs dWUgPSBQY2RDb21wb25lbnRWYWx1ZQ0KPiArDQo+ICAgICAgICAgICAgICAgICAgICAgIFBjZC5E YXR1bVR5cGUgPSBQY2QuU3RydWN0TmFtZQ0KPiAgICAgICAgICAgICAgICAgICAgICBpZiBUeXBl TmFtZSBpbiAoJ0RZTlZQRCcsICdERVhWUEQnKToNCj4gICAgICAgICAgICAgICAgICAgICAgICAg IFBjZC5Ta3VJbmZvTGlzdCA9IFNrdUluZm9MaXN0DQo+ICAgICAgICAgICAgICAgICAgICAgIGlm IFBjZC5QY2RWYWx1ZUZyb21Db21tIG9yDQo+IFBjZC5QY2RGaWVsZFZhbHVlRnJvbUNvbW06DQo+ ICAgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZE9wdGlvbk1hdGNoID0gVHJ1ZQ0KPiAgICAg ICAgICAgICAgICAgICAgICAgICAgRGVjTWF0Y2ggPSBGYWxzZQ0KPiAgICAgICAgICAgICAgICAg ICAgICBlbGlmIFBjZC5QY2RWYWx1ZUZyb21GZGYgb3INCj4gUGNkLlBjZEZpZWxkVmFsdWVGcm9t RmRmOg0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgRHNjRGVmYXVsdFZhbHVlID0gVHJ1ZQ0K PiAgICAgICAgICAgICAgICAgICAgICAgICAgRHNjTWF0Y2ggPSBUcnVlDQo+ICAgICAgICAgICAg ICAgICAgICAgICAgICBEZWNNYXRjaCA9IEZhbHNlDQo+IC0gICAgICAgICAgICAgICAgICAgIGVs aWYgUGNkLlNrdU92ZXJyaWRlVmFsdWVzOg0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgRHNj T3ZlcnJpZGUgPSBGYWxzZQ0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgaWYgUGNkLkRlZmF1 bHRGcm9tRFNDOg0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgIERzY092ZXJyaWRlID0g VHJ1ZQ0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToNCj4gLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICBEaWN0TGVuID0gMA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZvciBpdGVtIGluIFBjZC5Ta3VPdmVycmlkZVZhbHVlczoNCj4gLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRGljdExlbiArPQ0KPiBsZW4oUGNkLlNrdU92ZXJyaWRlVmFsdWVzW2l0 ZW1dKQ0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBEaWN0TGVuOg0KPiAt ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEc2NPdmVycmlkZSA9IEZhbHNlDQo+ICsg ICAgICAgICAgICAgICAgICAgIGVsc2U6DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICBpZiBQ Y2QuVHlwZSBpbiBQQ0RfRFlOQU1JQ19UWVBFX1NFVCB8DQo+IFBDRF9EWU5BTUlDX0VYX1RZUEVf U0VUOg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIERzY092ZXJyaWRlID0gRmFsc2UN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBQY2QuRGVmYXVsdEZyb21EU0M6DQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERzY092ZXJyaWRlID0gVHJ1ZQ0KPiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6DQo+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmIG5vdCBQY2QuU2t1SW5mb0xpc3Q6DQo+IC0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPdmVycmlkZVZhbHVlcyA9DQo+IFBjZC5Ta3VPdmVycmlkZVZh bHVlcw0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgT3ZlcnJpZGVW YWx1ZXM6DQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIERh dGEgaW4NCj4gT3ZlcnJpZGVWYWx1ZXMudmFsdWVzKCk6DQo+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdCA9DQo+IGxpc3QoRGF0YS52YWx1ZXMoKSkN Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgU3RydWN0 Og0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHNj T3ZlcnJpZGUgPQ0KPiBzZWxmLlBhcnNlU3RydWN0KFN0cnVjdFswXSkNCj4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIERpY3RMZW4gPSAwDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGZvciBpdGVtIGluIFBjZC5Ta3VPdmVycmlkZVZhbHVlczoNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpY3RMZW4gKz0NCj4gbGVuKFBjZC5Ta3VP dmVycmlkZVZhbHVlc1tpdGVtXSkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aWYgbm90IERpY3RMZW46DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE c2NPdmVycmlkZSA9IEZhbHNlDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs c2U6DQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa3VMaXN0ID0NCj4g c29ydGVkKFBjZC5Ta3VJbmZvTGlzdC5rZXlzKCkpDQo+IC0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBmb3IgU2t1IGluIFNrdUxpc3Q6DQo+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgU2t1SW5mbyA9DQo+IFBjZC5Ta3VJbmZvTGlzdFtTa3VdDQo+ IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYNCj4gU2t1SW5mby5E ZWZhdWx0U3RvcmVEaWN0Og0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBEZWZhdWx0U3RvcmVMaXN0ID0NCj4gc29ydGVkKFNrdUluZm8uRGVmYXVsdFN0b3Jl RGljdC5rZXlzKCkpDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGZvciBEZWZhdWx0U3RvcmUgaW4NCj4gRGVmYXVsdFN0b3JlTGlzdDoNCj4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE92ZXJyaWRlVmFsdWVzID0N Cj4gUGNkLlNrdU92ZXJyaWRlVmFsdWVzW1NrdV0NCj4gLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIERzY092ZXJyaWRlID0NCj4gc2VsZi5QYXJzZVN0cnVj dChPdmVycmlkZVZhbHVlc1tEZWZhdWx0U3RvcmVdKQ0KPiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgRHNjT3ZlcnJpZGU6DQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgUGNkLlNrdUluZm9MaXN0Og0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE92ZXJyaWRlVmFsdWVzID0NCj4g UGNkLlNrdU92ZXJyaWRlVmFsdWVzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgT3ZlcnJpZGVWYWx1ZXM6DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZvciBEYXRhIGluDQo+IE92ZXJyaWRlVmFsdWVzLnZhbHVlcygp Og0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3Ry dWN0ID0NCj4gbGlzdChEYXRhLnZhbHVlcygpKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWYgU3RydWN0Og0KPiArDQo+IERzY092ZXJyaWRlID0g c2VsZi5QYXJzZVN0cnVjdChTdHJ1Y3RbMF0pDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsNCj4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiBEc2NPdmVycmlkZToNCj4gLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsNCj4gLSAgICAgICAgICAgICAgICAgICAg ICAgIGlmIERzY092ZXJyaWRlOg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZWxzZToNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa3VM aXN0ID0NCj4gc29ydGVkKFBjZC5Ta3VJbmZvTGlzdC5rZXlzKCkpDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIFNrdSBpbiBTa3VMaXN0Og0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa3VJbmZvID0NCj4gUGNkLlNr dUluZm9MaXN0W1NrdV0NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYNCj4gU2t1SW5mby5EZWZhdWx0U3RvcmVEaWN0Og0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdFN0b3JlTGlzdA0KPiA9IHNv cnRlZChTa3VJbmZvLkRlZmF1bHRTdG9yZURpY3Qua2V5cygpKQ0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIERlZmF1bHRTdG9yZQ0KPiBpbiBE ZWZhdWx0U3RvcmVMaXN0Og0KPiArDQo+IE92ZXJyaWRlVmFsdWVzID0gUGNkLlNrdU92ZXJyaWRl VmFsdWVzW1NrdV0NCj4gKw0KPiBEc2NPdmVycmlkZSA9IHNlbGYuUGFyc2VTdHJ1Y3QoT3ZlcnJp ZGVWYWx1ZXNbRGVmYXVsdFN0b3JlXSkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpZg0KPiBEc2NPdmVycmlkZToNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgRHNjT3ZlcnJpZGU6 DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh aw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIERzY092ZXJyaWRlOg0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEc2NEZWZhdWx0VmFsdWUgPSBUcnVlDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERzY01hdGNoID0gVHJ1ZQ0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNNYXRjaCA9IEZhbHNlDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZWxzZToNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRGVjTWF0Y2ggPSBUcnVlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOg0KPiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERzY0RlZmF1bHRWYWx1ZSA9IFRydWUNCj4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBEc2NNYXRjaCA9IFRydWUNCj4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBEZWNNYXRjaCA9IEZhbHNlDQo+IC0gICAgICAgICAgICAgICAgICAg ICAgICBlbHNlOg0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY01hdGNoID0gVHJ1 ZQ0KPiAtICAgICAgICAgICAgICAgICAgICBlbHNlOg0KPiAtICAgICAgICAgICAgICAgICAgICAg ICAgRHNjRGVmYXVsdFZhbHVlID0gVHJ1ZQ0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgRHNj TWF0Y2ggPSBUcnVlDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICBEZWNNYXRjaCA9IEZhbHNl DQo+IA0KPiAgICAgICAgICAgICAgICAgICMNCj4gICAgICAgICAgICAgICAgICAjIFJlcG9ydCBQ Q0QgaXRlbSBhY2NvcmRpbmcgdG8gdGhlaXIgb3ZlcnJpZGUNCj4gcmVsYXRpb25zaGlwDQo+ICAg ICAgICAgICAgICAgICAgIw0KPiAgICAgICAgICAgICAgICAgIGlmIFBjZC5EYXR1bVR5cGUgPT0g J0JPT0xFQU4nOg0KPiBAQCAtMTE1MSwxNyArMTE1OSwxOCBAQCBjbGFzcyBQY2RSZXBvcnQob2Jq ZWN0KToNCj4gICAgICAgICAgICAgICAgICBlbGlmIEluZkRlZmF1bHRWYWx1ZSBhbmQgSW5mTWF0 Y2g6DQo+ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuUHJpbnRQY2RWYWx1ZShGaWxlLCBQY2Qs IFBjZFRva2VuQ05hbWUsDQo+IFR5cGVOYW1lLCBJc1N0cnVjdHVyZSwgRHNjTWF0Y2gsIERzY0Rl ZmF1bHRWYWxCYWssIEluZk1hdGNoLA0KPiBJbmZEZWZhdWx0VmFsdWUsIERlY01hdGNoLCBEZWNE ZWZhdWx0VmFsdWUsICcqTScpDQo+ICAgICAgICAgICAgICAgICAgZWxpZiBCdWlsZE9wdGlvbk1h dGNoOg0KPiAgICAgICAgICAgICAgICAgICAgICBzZWxmLlByaW50UGNkVmFsdWUoRmlsZSwgUGNk LCBQY2RUb2tlbkNOYW1lLA0KPiBUeXBlTmFtZSwgSXNTdHJ1Y3R1cmUsIERzY01hdGNoLCBEc2NE ZWZhdWx0VmFsQmFrLCBJbmZNYXRjaCwNCj4gSW5mRGVmYXVsdFZhbHVlLCBEZWNNYXRjaCwgRGVj RGVmYXVsdFZhbHVlLCAnKkInKQ0KPiAgICAgICAgICAgICAgICAgIGVsc2U6DQo+IC0gICAgICAg ICAgICAgICAgICAgIGlmIERzY0RlZmF1bHRWYWx1ZSBhbmQgRHNjTWF0Y2g6DQo+ICsgICAgICAg ICAgICAgICAgICAgIGlmIFBjZENvbXBvbmVudFZhbHVlOg0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgc2VsZi5QcmludFBjZFZhbHVlKEZpbGUsIFBjZCwgUGNkVG9rZW5DTmFtZSwNCj4gVHlw ZU5hbWUsIElzU3RydWN0dXJlLCBEc2NNYXRjaCwgRHNjRGVmYXVsdFZhbEJhaywgSW5mTWF0Y2gs DQo+IFBjZENvbXBvbmVudFZhbHVlLCBEZWNNYXRjaCwgRGVjRGVmYXVsdFZhbHVlLCAnKk0nLCBt b2R1bGVfZ3VpZCkNCj4gKyAgICAgICAgICAgICAgICAgICAgZWxpZiBEc2NEZWZhdWx0VmFsdWUg YW5kIERzY01hdGNoOg0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBjZC5Ub2tlbkNO YW1lLCBLZXksIEZpZWxkKSBpbg0KPiBzZWxmLkZkZlBjZFNldDoNCj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzZWxmLlByaW50UGNkVmFsdWUoRmlsZSwgUGNkLA0KPiBQY2RUb2tlbkNO YW1lLCBUeXBlTmFtZSwgSXNTdHJ1Y3R1cmUsIERzY01hdGNoLCBEc2NEZWZhdWx0VmFsQmFrLA0K PiBJbmZNYXRjaCwgSW5mRGVmYXVsdFZhbHVlLCBEZWNNYXRjaCwgRGVjRGVmYXVsdFZhbHVlLCAn KkYnKQ0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToNCj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzZWxmLlByaW50UGNkVmFsdWUoRmlsZSwgUGNkLA0KPiBQY2RUb2tlbkNO YW1lLCBUeXBlTmFtZSwgSXNTdHJ1Y3R1cmUsIERzY01hdGNoLCBEc2NEZWZhdWx0VmFsQmFrLA0K PiBJbmZNYXRjaCwgSW5mRGVmYXVsdFZhbHVlLCBEZWNNYXRjaCwgRGVjRGVmYXVsdFZhbHVlLCAn KlAnKQ0KPiAtICAgICAgICAgICAgICAgICAgICBlbHNlOg0KPiAtICAgICAgICAgICAgICAgICAg ICAgICAgc2VsZi5QcmludFBjZFZhbHVlKEZpbGUsIFBjZCwgUGNkVG9rZW5DTmFtZSwNCj4gVHlw ZU5hbWUsIElzU3RydWN0dXJlLCBEc2NNYXRjaCwgRHNjRGVmYXVsdFZhbEJhaywgSW5mTWF0Y2gs DQo+IEluZkRlZmF1bHRWYWx1ZSwgRGVjTWF0Y2gsIERlY0RlZmF1bHRWYWx1ZSwgJypNJykNCj4g Kw0KPiANCj4gICAgICAgICAgICAgICAgICBpZiBNb2R1bGVQY2RTZXQgaXMgTm9uZToNCj4gICAg ICAgICAgICAgICAgICAgICAgaWYgSXNTdHJ1Y3R1cmU6DQo+ICAgICAgICAgICAgICAgICAgICAg ICAgICBjb250aW51ZQ0KPiAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgVHlwZU5hbWUgaW4g KCdQQVRDSCcsICdGTEFHJywgJ0ZJWEVEJyk6DQo+IEBAIC0xMjYzLDExICsxMjcyLDExIEBAIGNs YXNzIFBjZFJlcG9ydChvYmplY3QpOg0KPiAgICAgICAgICAgICAgICAgICAgICBzZWxmLlByaW50 U3RydWN0dXJlSW5mbyhGaWxlLCBmaWxlZHZhbHVlcykNCj4gICAgICAgICAgaWYgRGVjTWF0Y2gg YW5kIElzU3RydWN0dXJlOg0KPiAgICAgICAgICAgICAgZm9yIGZpbGVkdmFsdWVzIGluIFBjZC5E ZWZhdWx0VmFsdWVzLnZhbHVlcygpOg0KPiAgICAgICAgICAgICAgICAgIHNlbGYuUHJpbnRTdHJ1 Y3R1cmVJbmZvKEZpbGUsIGZpbGVkdmFsdWVzKQ0KPiANCj4gLSAgICBkZWYgUHJpbnRQY2RWYWx1 ZShzZWxmLCBGaWxlLCBQY2QsIFBjZFRva2VuQ05hbWUsIFR5cGVOYW1lLA0KPiBJc1N0cnVjdHVy ZSwgRHNjTWF0Y2gsIERzY0RlZmF1bHRWYWx1ZSwgSW5mTWF0Y2gsIEluZkRlZmF1bHRWYWx1ZSwN CkRlY01hdGNoLA0KPiBEZWNEZWZhdWx0VmFsdWUsIEZsYWcgPSAnICAnKToNCj4gKyAgICBkZWYg UHJpbnRQY2RWYWx1ZShzZWxmLCBGaWxlLCBQY2QsIFBjZFRva2VuQ05hbWUsIFR5cGVOYW1lLA0K PiBJc1N0cnVjdHVyZSwgRHNjTWF0Y2gsIERzY0RlZmF1bHRWYWx1ZSwgSW5mTWF0Y2gsIEluZkRl ZmF1bHRWYWx1ZSwNCkRlY01hdGNoLA0KPiBEZWNEZWZhdWx0VmFsdWUsIEZsYWcgPSAnICAnLG1v ZHVsZV9ndWlkPU5vbmUpOg0KPiAgICAgICAgICBpZiBub3QgUGNkLlNrdUluZm9MaXN0Og0KPiAg ICAgICAgICAgICAgVmFsdWUgPSBQY2QuRGVmYXVsdFZhbHVlDQo+ICAgICAgICAgICAgICBJc0J5 dGVBcnJheSwgQXJyYXlMaXN0ID0gQnl0ZUFycmF5Rm9yYW10KFZhbHVlKQ0KPiAgICAgICAgICAg ICAgaWYgSXNCeXRlQXJyYXk6DQo+ICAgICAgICAgICAgICAgICAgRmlsZVdyaXRlKEZpbGUsICcg JS0qcyAgIDogJTZzICUxMHMgPSAlcycgJSAoc2VsZi5NYXhMZW4sDQo+IEZsYWcgKyAnICcgKyBQ Y2RUb2tlbkNOYW1lLCBUeXBlTmFtZSwgJygnICsgUGNkLkRhdHVtVHlwZSArICcpJywgJ3snKSkN Cj4gQEAgLTEyODYsMTggKzEyOTUsMjQgQEAgY2xhc3MgUGNkUmVwb3J0KG9iamVjdCk6DQo+ICAg ICAgICAgICAgICAgICAgRmlsZWRPdmVycmlkZUZsYWcgPSBGYWxzZQ0KPiAgICAgICAgICAgICAg ICAgIGlmIChQY2QuVG9rZW5DTmFtZSxQY2QuVG9rZW5TcGFjZUd1aWRDTmFtZSkgaW4NCj4gR2xv YmFsRGF0YS5nUGNkU2t1T3ZlcnJpZGVzOg0KPiAgICAgICAgICAgICAgICAgICAgICBPdmVycmlk ZVZhbHVlcyA9DQo+IEdsb2JhbERhdGEuZ1BjZFNrdU92ZXJyaWRlc1soUGNkLlRva2VuQ05hbWUs UGNkLlRva2VuU3BhY2VHdWlkQ05hbWUpDQo+IF0NCj4gICAgICAgICAgICAgICAgICBlbHNlOg0K PiAgICAgICAgICAgICAgICAgICAgICBPdmVycmlkZVZhbHVlcyA9IFBjZC5Ta3VPdmVycmlkZVZh bHVlcw0KPiArICAgICAgICAgICAgICAgIEZpZWxkT3ZlcnJpZGVWYWx1ZXMgPSBOb25lDQo+ICAg ICAgICAgICAgICAgICAgaWYgT3ZlcnJpZGVWYWx1ZXM6DQo+ICAgICAgICAgICAgICAgICAgICAg IGZvciBEYXRhIGluIE92ZXJyaWRlVmFsdWVzLnZhbHVlcygpOg0KPiAgICAgICAgICAgICAgICAg ICAgICAgICAgU3RydWN0ID0gbGlzdChEYXRhLnZhbHVlcygpKQ0KPiAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgU3RydWN0Og0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgIE92ZXJy aWRlRmllbGRTdHJ1Y3QgPQ0KPiBzZWxmLk92ZXJyaWRlRmllbGRWYWx1ZShQY2QsIFN0cnVjdFsw XSkNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLlByaW50U3RydWN0dXJlSW5m byhGaWxlLA0KPiBPdmVycmlkZUZpZWxkU3RydWN0KQ0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZpZWxkT3ZlcnJpZGVWYWx1ZXMgPSBTdHJ1Y3RbMF0NCj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGaWxlZE92ZXJyaWRlRmxhZyA9IFRydWUNCj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBicmVhaw0KPiArICAgICAgICAgICAgICAgIGlmIFBjZC5QY2RGaWxlZFZh bHVlRnJvbURzY0NvbXBvbmVudCBhbmQNCj4gbW9kdWxlX2d1aWQgYW5kIG1vZHVsZV9ndWlkLnJl cGxhY2UoIi0iLCJTIikgaW4NCj4gUGNkLlBjZEZpbGVkVmFsdWVGcm9tRHNjQ29tcG9uZW50Og0K PiArICAgICAgICAgICAgICAgICAgICBGaWVsZE92ZXJyaWRlVmFsdWVzID0NCj4gUGNkLlBjZEZp bGVkVmFsdWVGcm9tRHNjQ29tcG9uZW50W21vZHVsZV9ndWlkLnJlcGxhY2UoIi0iLCJTIildDQo+ ICsgICAgICAgICAgICAgICAgaWYgRmllbGRPdmVycmlkZVZhbHVlczoNCj4gKyAgICAgICAgICAg ICAgICAgICAgT3ZlcnJpZGVGaWVsZFN0cnVjdCA9IHNlbGYuT3ZlcnJpZGVGaWVsZFZhbHVlKFBj ZCwNCj4gRmllbGRPdmVycmlkZVZhbHVlcykNCj4gKyAgICAgICAgICAgICAgICAgICAgc2VsZi5Q cmludFN0cnVjdHVyZUluZm8oRmlsZSwgT3ZlcnJpZGVGaWVsZFN0cnVjdCkNCj4gKw0KPiAgICAg ICAgICAgICAgICAgIGlmIG5vdCBGaWxlZE92ZXJyaWRlRmxhZyBhbmQNCj4gKFBjZC5QY2RGaWVs ZFZhbHVlRnJvbUNvbW0gb3IgUGNkLlBjZEZpZWxkVmFsdWVGcm9tRmRmKToNCj4gICAgICAgICAg ICAgICAgICAgICAgT3ZlcnJpZGVGaWVsZFN0cnVjdCA9IHNlbGYuT3ZlcnJpZGVGaWVsZFZhbHVl KFBjZCwNCj4ge30pDQo+ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuUHJpbnRTdHJ1Y3R1cmVJ bmZvKEZpbGUsIE92ZXJyaWRlRmllbGRTdHJ1Y3QpDQo+ICAgICAgICAgICAgICBzZWxmLlByaW50 UGNkRGVmYXVsdChGaWxlLCBQY2QsIElzU3RydWN0dXJlLCBEc2NNYXRjaCwNCj4gRHNjRGVmYXVs dFZhbHVlLCBJbmZNYXRjaCwgSW5mRGVmYXVsdFZhbHVlLCBEZWNNYXRjaCwgRGVjRGVmYXVsdFZh bHVlKQ0KPiAgICAgICAgICBlbHNlOg0KPiAtLQ0KPiAyLjIwLjEud2luZG93cy4xDQo+IA0KPiAN Cj4gDQo+IA0KPiANCg0KDQoNCg0KDQoNCg0KDQo=