Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mIxr9-0004m6-T0 for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Aug 2021 18:42:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1mIxqd-0003yd-7q for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Aug 2021 18:42:03 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mIxqc-0003y8-Fo for pgsql-hackers@lists.postgresql.org; Wed, 25 Aug 2021 18:42:02 +0000 Received: from mail-co1nam11on20611.outbound.protection.outlook.com ([2a01:111:f400:7eab::611] helo=NAM11-CO1-obe.outbound.protection.outlook.com) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mIxqN-00029O-MV for pgsql-hackers@postgresql.org; Wed, 25 Aug 2021 18:42:01 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SJxh3xvYUNQJMPy7UcQBIghpEc4FsLN9gsFUK2j1T225KL6lq3Dv7ciArXZ6/UJajxG7JVg5FY1z3w1MBiAXQi5NGuLZLee+Csf5HlEhUS44YyuhgvDu5Fckp/4f4ACxeGcYdZiCaqe19WZHLKsMTWUnUTv4I0i/IeG42kxiW36Vl0VBqYP8kjWNiIFWMsnc4d+0Ju82wFqDUbgntabtaEsKcDGVYS7cs/WfuvEvs4AWtVGZKtRNSK4YW4EqkzQ92x2BSVYgnQqMcmo6yxLPpfG0Fskfv6aTs9/UUkEIyRL7Ap7Yvk0SmKzN8leUBlzO5IOLDmjLm3vPviethOwsmQ== 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=GGOcRmKOSmrrSwdIUmuW9akEfmkYiJ7fvIEaGiC8w7U=; b=SNExv60bq7Z3AMv8LYUgQ/lOyuaLIDpB0Aa5FmZv5eJ6/RC5SlAu2yEqQdc1CUHUAcVsGmViUiewzu7vFkCfeUgSsc5F1srsPuUztApMaILuIZ68r7w2UTtMerrG+WjgzFGpjqTLuKMNbRkQ+F5BwjIkkhXZfbgsd2O1M34/xsxO69rooN1XkAIsOwDDGNuNmPqua/4rLHQjKYNaPBMsqh1YP4FF43PimUlRaoQZYN0M3sS/j3iFW4YjTY9bi3WORX9TgG3gfdWbc7pE1bujLDh8IWBWjOGeZv8HTdPziFO+MP4Lvi1x2ZL9MN1zCsH49vRi60vF22TlFjwxBQG5sg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=vmware.com; dmarc=pass action=none header.from=vmware.com; dkim=pass header.d=vmware.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vmware.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GGOcRmKOSmrrSwdIUmuW9akEfmkYiJ7fvIEaGiC8w7U=; b=JfeWRMRjmpCKvtuPXT1nq6ckPRyKYCXq9g5LfiuHhoFMXIzbQuq5ZRkEIBLygRsCqXEqA3TSkGCZzK6OdrUGlu+T6F9AYzs6U8kQuZ5JaN1ahcNdu9k/QmxmUuWLoBclHq956mVZn4VNTg6NdRoh8Cz3VzfNpSDskrRiuf1mC3E= Received: from MWHPR05MB2896.namprd05.prod.outlook.com (2603:10b6:300:65::20) by CO6PR05MB7715.namprd05.prod.outlook.com (2603:10b6:5:34d::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4457.8; Wed, 25 Aug 2021 18:41:40 +0000 Received: from MWHPR05MB2896.namprd05.prod.outlook.com ([fe80::b8ad:c0df:fc49:52a]) by MWHPR05MB2896.namprd05.prod.outlook.com ([fe80::b8ad:c0df:fc49:52a%8]) with mapi id 15.20.4457.019; Wed, 25 Aug 2021 18:41:40 +0000 From: Jacob Champion To: "hlinnaka@iki.fi" , "pgsql-hackers@postgresql.org" CC: "michael@paquier.xyz" Subject: Re: [PoC] Federated Authn/z with OAUTHBEARER Thread-Topic: [PoC] Federated Authn/z with OAUTHBEARER Thread-Index: AQHXXISc0BUwpEo1NUi6cD0VutaLHasZf38AgAdCaoCAZEa6AA== Date: Wed, 25 Aug 2021 18:41:39 +0000 Message-ID: <8a5a35b31c3f25f6b047e77def0445a60399981d.camel@vmware.com> References: <2f06a4aef1d5defe4b7aaec01478572e5557d32a.camel@vmware.com> In-Reply-To: <2f06a4aef1d5defe4b7aaec01478572e5557d32a.camel@vmware.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: user-agent: Evolution 3.36.5-0ubuntu1 authentication-results: iki.fi; dkim=none (message not signed) header.d=none;iki.fi; dmarc=none action=none header.from=vmware.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 5ff12aa5-f317-4f99-30dd-08d967f7fa31 x-ms-traffictypediagnostic: CO6PR05MB7715: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:556; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Ln1pi7pkDRw1LX0M9hPQng55TJaa7nyvo2aakWq5qXrAaL3+pv7UWvikqJ8pJZh7K6UcHXExebKWqdVT8VZuxohYVMRnlaD7eCuPRy/bsV9u2gxi5LByqJOgSR4r2JpmK8VgFYjxv3iimt+559HEdb+4g+H7mWEdeo9Tf8/HhqS4Uzblwpd14i8b8wEivVYCXURTQ8yAXLwZhEtS/bpo/Qqj3fNDwZelNUunSeRjIb3amamCyLlQJuYcf4rbe9Xfm/whRLzZ3850LDLOuWDHOwANn0jSyo2yiOGusTFnveWuCzTGa+QBY1YLAtZuorMysH35Ozy7I9HpieWTZw2FQuqnSAwLzUNre7IA9ZsM++Rg7pS+5v9tP8uliLkePsSwLEfWB09+5KCuWFgw2Pr8wKJOFMZfJu67yM5FMS2EkWu7G/Aizr9iPgo+UmyNEXxtCve0N3BelfheN5f+PBfBpo6+nNZL/Pv/NWvt2b8qXJV0dU5PSi8Ghfwbl7z4Q6j+8A6Ihn8AD+vBpQXOSqIkhKMSfYSQKnQ8V20YKwa4g8WCpuNShEpvCZsHT/uuXZZ+NBxmfSovXOeAk/uMJmE+/oEvzRWxE5vdniP+bhwBFvlNgMG7c2Q726zlm46gJSzx+Zg4j2WBs77eslEy1Swn3mFepHq54OrmuGRi8Xvu1mjxuca6o8SWXWjN+YCW5vCste9S4+JStm1pYZcszw885w== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MWHPR05MB2896.namprd05.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(136003)(346002)(376002)(366004)(39860400002)(66446008)(478600001)(66946007)(66556008)(66476007)(66576008)(64756008)(71200400001)(76116006)(86362001)(2616005)(6512007)(2906002)(83380400001)(36756003)(26005)(186003)(5660300002)(99936003)(6506007)(4326008)(38100700002)(8676002)(122000001)(110136005)(316002)(38070700005)(6486002)(8936002);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?YVZIZzJGekNPOUZRR0hMaTBKeU9uczhSV1U5SDQwbEV3cHJnMVJiUUxleHJZ?= =?utf-8?B?MDM0blhFa3RMQUxudXd4K2U4Q0lMa1hlTnJtelFVS3RsTVdjam1pZTV3a25G?= =?utf-8?B?ek03Q2YvNFVmVXpiWHZ0c2lkSjYyRmQ2UmNSRVovUFlqelUrR2tXVjZ6MGxq?= =?utf-8?B?eTFVRHZkOXZST3phRFVEWnlESmhrZStUSTFncTIrMkJsbzJTdlVrR0F1OVBi?= =?utf-8?B?c3owWXorSk55bjByWGQyWlEyT1l3cmpGdXdiTTVycmtwRXRzbXBzeFZyKzZN?= =?utf-8?B?d2txOTg3ai9EdW5RSWhYNldNWEJOL0dYODRtRHU2eTZ2VmRKb0QxMlZZaW9N?= =?utf-8?B?dnRlMVNXYkF4eXkvM25rSllydjZHZTIrYXZtUGJhaVp4OGtHaU1SZlFaNFlY?= =?utf-8?B?L2Z6Q2VGT0Y5WEJNUE96QXJyakR0ek01V3RmWWpRV0JIMjhSSXYvVWZwVHJS?= =?utf-8?B?cnVudlJIL01BQ1lOUU5lSzh2amJkVCszbzRVaW1Ubmw0QzJPSjBlQUZ4WXU3?= =?utf-8?B?ek1WUWF1YTkyeVRqOGMyeWxmUzY4Y0tpa0RMdkJGVnFySzdEeWtIUWJzSXlq?= =?utf-8?B?Qit0WXNWU1RhUXpkN0h4aTZnRFB1M0laRVdqSnExR1ZDN2xNdzZ5UkRuWDRy?= =?utf-8?B?Tkp3R2QyMm5NdldISjBDRU5jMVl6MW5WL29ZeS9NSUp5Umt6bWE1Y2QxYVFW?= =?utf-8?B?L0cyR1RoNFkvK1lDQzVmREVZV1BlOTZ2MzRZcXJiQmdORHlhT0NPREZzOEJJ?= =?utf-8?B?Y1dLcCtxU2JpWXR2cTREUlRKdUUwd0k1RVlWUkwxTzFwcE95cWQ4TVUyOFB5?= =?utf-8?B?UzRsTGNFRXZGUEthTmpSZE9oSGwrcjNyRS90SDFzSVIySTNqOE5yWk5oSFcy?= =?utf-8?B?NVlZNzVrMTdGUVNCL05XdXJhYUJFaGUvU2lrSEk0YkVDWlI5Y3JNVXJwUlNF?= =?utf-8?B?Q0NVNkZrTzkwYjZISXY2UUR6aUd5MXpsQVVNREYxUXk2UUVRa1BMTklIV2hn?= =?utf-8?B?VXRDaTdTUUg1VFF5RWtYSllhSkRoU0JsZ3JybEZmMU43a0s0RHJRTlczWlYw?= =?utf-8?B?SWpHNzJTZ0t5Uy8vNFFocWZMaVpNRDJqZ1phZWhkcWs5MGR4Ly9md2x2RDJw?= =?utf-8?B?OUQvZWhkV0tpUXBxNFdRUktoaXZHM0Q5NnlBY3RBMCtpeUhqNlF5amFWNkxP?= =?utf-8?B?cU9lTU5lZVIva1F2ejhsVGlXRTQyM3Rjc1ZRRTJIYW93cnlGSDZndGpwdGNa?= =?utf-8?B?cGFBL2VRcitsU09kTkUyUEpLV0RYTnVld1d5eTVNTzFGaWZveGpzeFQzSzZF?= =?utf-8?B?WFNCaHUxNlQ1bitLWnFsN0JuM3BYL0tHa3JLemxIV1B5WE5SOTBYUzJvMi9P?= =?utf-8?B?c0IyVURSRGl1aDJZZzhncDhoQVVmZldSS25LQnpBazc5N0JsNGYxUUE2RXZM?= =?utf-8?B?Sm5zeEV5NmwwWTFib3d4elc5WGpzS3FmbGhRVW1ZYStRS2hrRjJPTmxURU5h?= =?utf-8?B?OEgwZTQxWHd4U1NzbE9jMG9qVk1JUkZmMEtrOFZkZUl5T1Z4dmZ1Y3hHWXho?= =?utf-8?B?aGRhL1JUNVdMeGE4K09IRkthbHl6Vi85R0dSWUF4RU5Xbm9ndjVWYS9McEFo?= =?utf-8?B?M1dMd2o2clJOVkUzL2g0UWhueE9pSzNwcFI4aUd6dkJaVE5iOXBhMTFDWjVU?= =?utf-8?B?TTU3QkptQ09aNG80N0NHa1hlWFBBZ0k2QVNCVXlhZTVPbEQ3S1Q2L1hNVVFu?= =?utf-8?Q?vCmNrWV7kKzJzSKUAa1K5vN6GH9s1Kd5OGOZd8s?= x-ms-exchange-transport-forked: True Content-Type: multipart/mixed; boundary="_006_8a5a35b31c3f25f6b047e77def0445a60399981dcamelvmwarecom_" MIME-Version: 1.0 X-OriginatorOrg: vmware.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MWHPR05MB2896.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5ff12aa5-f317-4f99-30dd-08d967f7fa31 X-MS-Exchange-CrossTenant-originalarrivaltime: 25 Aug 2021 18:41:39.8358 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b39138ca-3cee-4b4a-a4d6-cd83d9dd62f0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: aDKt7jbbbfZNEmIRUiK08bYfWV0i5b8zf4ZT5vufZctUlkOOWI9RWUOyfFwkf9pNiKkciuQbDNrX1eVFmDhAvw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO6PR05MB7715 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_006_8a5a35b31c3f25f6b047e77def0445a60399981dcamelvmwarecom_ Content-Type: text/plain; charset="utf-8" Content-ID: <4F5C9C96C86BDD4CA086C353662FBD0B@namprd05.prod.outlook.com> Content-Transfer-Encoding: base64 T24gVHVlLCAyMDIxLTA2LTIyIGF0IDIzOjIyICswMDAwLCBKYWNvYiBDaGFtcGlvbiB3cm90ZToN Cj4gT24gRnJpLCAyMDIxLTA2LTE4IGF0IDExOjMxICswMzAwLCBIZWlra2kgTGlubmFrYW5nYXMg d3JvdGU6DQo+ID4gDQo+ID4gQSBmZXcgc21hbGwgdGhpbmdzIGNhdWdodCBteSBleWUgaW4gdGhl IGJhY2tlbmQgb2F1dGhfZXhjaGFuZ2UgZnVuY3Rpb246DQo+ID4gDQo+ID4gPiArICAgICAgIC8q IEhhbmRsZSB0aGUgY2xpZW50J3MgaW5pdGlhbCBtZXNzYWdlLiAqLw0KPiA+ID4gKyAgICAgICBw ID0gc3RyZHVwKGlucHV0KTsNCj4gPiANCj4gPiB0aGlzIHN0cmR1cCgpIHNob3VsZCBiZSBwc3Ry ZHVwKCkuDQo+IA0KPiBUaGFua3MsIEknbGwgZml4IHRoYXQgaW4gdGhlIG5leHQgcmUtcm9sbC4N Cj4gDQo+ID4gSW4gdGhlIHNhbWUgZnVuY3Rpb24sIHRoZXJlIGFyZSBhIGJ1bmNoIG9mIHJlcG9y dHMgbGlrZSB0aGlzOg0KPiA+IA0KPiA+ID4gICAgICAgICAgICAgICAgICAgIGVyZXBvcnQoRVJS T1IsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyY29kZShFUlJDT0RFX1BS T1RPQ09MX1ZJT0xBVElPTiksDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJy bXNnKCJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIpLA0KPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIGVycmRldGFpbCgiQ29tbWEgZXhwZWN0ZWQsIGJ1dCBmb3VuZCBjaGFy YWN0ZXIgXCIlc1wiLiIsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNhbml0aXplX2NoYXIoKnApKSkpOw0KPiA+IA0KPiA+IEkgZG9uJ3QgdGhpbmsgdGhlIGRv dWJsZSBxdW90ZXMgYXJlIG5lZWRlZCBoZXJlLCBiZWNhdXNlIHNhbml0aXplX2NoYXIgDQo+ID4g d2lsbCByZXR1cm4gcXVvdGVzIGlmIGl0J3MgYSBzaW5nbGUgY2hhcmFjdGVyLiBTbyBpdCB3b3Vs ZCBlbmQgdXAgDQo+ID4gbG9va2luZyBsaWtlIHRoaXM6IC4uLiBmb3VuZCBjaGFyYWN0ZXIgIid4 JyIuDQo+IA0KPiBJJ2xsIGZpeCB0aGlzIHRvby4gVGhhbmtzIQ0KDQp2MiwgYXR0YWNoZWQsIGlu Y29ycG9yYXRlcyBIZWlra2kncyBzdWdnZXN0ZWQgZml4ZXMgYW5kIGFsc28gcmViYXNlcyBvbg0K dG9wIG9mIGxhdGVzdCBIRUFELCB3aGljaCBoYWQgdGhlIFNBU0wgcmVmYWN0b3JpbmcgY2hhbmdl cyBjb21taXR0ZWQNCmxhc3QgbW9udGguDQoNClRoZSBiaWdnZXN0IGNoYW5nZSBmcm9tIHRoZSBs YXN0IHBhdGNoc2V0IGlzIDAwMDEsIGFuIGF0dGVtcHQgYXQNCmVuYWJsaW5nIGpzb25hcGkgaW4g dGhlIGZyb250ZW5kIHdpdGhvdXQgdGhlIHVzZSBvZiBwYWxsb2MoKSwgYmFzZWQgb24NCnN1Z2dl c3Rpb25zIGJ5IE1pY2hhZWwgYW5kIFRvbSBmcm9tIGxhc3QgY29tbWl0ZmVzdC4gSSd2ZSBhbHNv IG1hZGUNCnNvbWUgaW1wcm92ZW1lbnRzIHRvIHRoZSBweXRlc3Qgc3VpdGUuIE5vIG1ham9yIGNo YW5nZXMgdG8gdGhlIE9BdXRoDQppbXBsZW1lbnRhdGlvbiB5ZXQuDQoNCi0tSmFjb2INCg== --_006_8a5a35b31c3f25f6b047e77def0445a60399981dcamelvmwarecom_ Content-Type: text/x-patch; name="v2-0001-common-jsonapi-support-FRONTEND-clients.patch" Content-Description: v2-0001-common-jsonapi-support-FRONTEND-clients.patch Content-Disposition: attachment; filename="v2-0001-common-jsonapi-support-FRONTEND-clients.patch"; size=20868; creation-date="Wed, 25 Aug 2021 18:41:39 GMT"; modification-date="Wed, 25 Aug 2021 18:41:39 GMT" Content-ID: Content-Transfer-Encoding: base64 RnJvbSA4YzRiODI5NDBlZmI3ZTBmMGYzM2FjOTE1ZDVmNzk2OWEzNmUzNjQ0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8cGNoYW1waW9uQHZtd2FyZS5jb20+ CkRhdGU6IE1vbiwgMyBNYXkgMjAyMSAxNTozODoyNiAtMDcwMApTdWJqZWN0OiBbUEFUQ0ggdjIg MS81XSBjb21tb24vanNvbmFwaTogc3VwcG9ydCBGUk9OVEVORCBjbGllbnRzCgpCYXNlZCBvbiBh IHBhdGNoIGJ5IE1pY2hhZWwgUGFxdWllci4KCkZvciBmcm9udGVuZCBjb2RlLCB1c2UgUFFFeHBC dWZmZXIgaW5zdGVhZCBvZiBTdHJpbmdJbmZvLiBUaGlzIHJlcXVpcmVzCnVzIHRvIHRyYWNrIGFs bG9jYXRpb24gZmFpbHVyZXMgc28gdGhhdCB3ZSBjYW4gcmV0dXJuIEpTT05fT1VUX09GX01FTU9S WQphcyBuZWVkZWQuIGpzb25fZXJyZGV0YWlsKCkgbm93IGFsbG9jYXRlcyBpdHMgZXJyb3IgbWVz c2FnZSBpbnNpZGUKbWVtb3J5IG93bmVkIGJ5IHRoZSBKc29uTGV4Q29udGV4dCwgc28gY2xpZW50 cyBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0CmZyZWVpbmcgaXQuCgpGb3IgY29udmVuaWVuY2Us IHRoZSBiYWNrZW5kIG5vdyBoYXMgZGVzdHJveUpzb25MZXhDb250ZXh0KCkgdG8gbWlycm9yCm90 aGVyIGNyZWF0ZS9kZXN0cm95IEFQSXMuIFRoZSBmcm9udGVuZCBoYXMgaW5pdC90ZXJtIHZlcnNp b25zIG9mIHRoZQpBUEkgdG8gaGFuZGxlIHN0YWNrLWFsbG9jYXRlZCBKc29uTGV4Q29udGV4dHMu CgpXZSBjYW4gbm93IHBhcnRpYWxseSByZXZlcnQgYjQ0NjY5YjJjYSwgbm93IHRoYXQganNvbl9l cnJkZXRhaWwoKSB3b3Jrcwpjb3JyZWN0bHkuCi0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pz b25mdW5jcy5jICAgICAgICAgICAgIHwgICA0ICstCiBzcmMvYmluL3BnX3ZlcmlmeWJhY2t1cC9w YXJzZV9tYW5pZmVzdC5jICAgICAgfCAgMTMgKy0KIHNyYy9iaW4vcGdfdmVyaWZ5YmFja3VwL3Qv MDA1X2JhZF9tYW5pZmVzdC5wbCB8ICAgMiArLQogc3JjL2NvbW1vbi9NYWtlZmlsZSAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgICAyICstCiBzcmMvY29tbW9uL2pzb25hcGkuYyAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAyOTAgKysrKysrKysrKysrKy0tLS0tCiBzcmMvaW5jbHVkZS9j b21tb24vanNvbmFwaS5oICAgICAgICAgICAgICAgICAgfCAgNDcgKystCiA2IGZpbGVzIGNoYW5n ZWQsIDI3MCBpbnNlcnRpb25zKCspLCA4OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNv bmZ1bmNzLmMKaW5kZXggNWZkNTRiNjRiNS4uZmEzOTc1MTE4OCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2pzb25mdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9q c29uZnVuY3MuYwpAQCAtNzIzLDkgKzcyMyw3IEBAIGpzb25fb2JqZWN0X2tleXMoUEdfRlVOQ1RJ T05fQVJHUykKIAkJcGdfcGFyc2VfanNvbl9vcl9lcmVwb3J0KGxleCwgc2VtKTsKIAkJLyoga2V5 cyBhcmUgbm93IGluIHN0YXRlLT5yZXN1bHQgKi8KIAotCQlwZnJlZShsZXgtPnN0cnZhbC0+ZGF0 YSk7Ci0JCXBmcmVlKGxleC0+c3RydmFsKTsKLQkJcGZyZWUobGV4KTsKKwkJZGVzdHJveUpzb25M ZXhDb250ZXh0KGxleCk7CiAJCXBmcmVlKHNlbSk7CiAKIAkJTWVtb3J5Q29udGV4dFN3aXRjaFRv KG9sZGNvbnRleHQpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvcGFyc2Vf bWFuaWZlc3QuYyBiL3NyYy9iaW4vcGdfdmVyaWZ5YmFja3VwL3BhcnNlX21hbmlmZXN0LmMKaW5k ZXggYzdjY2M3OGM3MC4uNmNlZGI3NDM1ZiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ192ZXJpZnli YWNrdXAvcGFyc2VfbWFuaWZlc3QuYworKysgYi9zcmMvYmluL3BnX3ZlcmlmeWJhY2t1cC9wYXJz ZV9tYW5pZmVzdC5jCkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZAoganNvbl9wYXJzZV9tYW5pZmVz dChKc29uTWFuaWZlc3RQYXJzZUNvbnRleHQgKmNvbnRleHQsIGNoYXIgKmJ1ZmZlciwKIAkJCQkJ c2l6ZV90IHNpemUpCiB7Ci0JSnNvbkxleENvbnRleHQgKmxleDsKKwlKc29uTGV4Q29udGV4dCBs ZXggPSB7MH07CiAJSnNvblBhcnNlRXJyb3JUeXBlIGpzb25fZXJyb3I7CiAJSnNvblNlbUFjdGlv biBzZW07CiAJSnNvbk1hbmlmZXN0UGFyc2VTdGF0ZSBwYXJzZTsKQEAgLTEyOSw4ICsxMjksOCBA QCBqc29uX3BhcnNlX21hbmlmZXN0KEpzb25NYW5pZmVzdFBhcnNlQ29udGV4dCAqY29udGV4dCwg Y2hhciAqYnVmZmVyLAogCXBhcnNlLnN0YXRlID0gSk1fRVhQRUNUX1RPUExFVkVMX1NUQVJUOwog CXBhcnNlLnNhd192ZXJzaW9uX2ZpZWxkID0gZmFsc2U7CiAKLQkvKiBDcmVhdGUgYSBKU09OIGxl eGluZyBjb250ZXh0LiAqLwotCWxleCA9IG1ha2VKc29uTGV4Q29udGV4dENzdHJpbmdMZW4oYnVm ZmVyLCBzaXplLCBQR19VVEY4LCB0cnVlKTsKKwkvKiBJbml0aWFsaXplIGEgSlNPTiBsZXhpbmcg Y29udGV4dC4gKi8KKwlpbml0SnNvbkxleENvbnRleHRDc3RyaW5nTGVuKCZsZXgsIGJ1ZmZlciwg c2l6ZSwgUEdfVVRGOCwgdHJ1ZSk7CiAKIAkvKiBTZXQgdXAgc2VtYW50aWMgYWN0aW9ucy4gKi8K IAlzZW0uc2Vtc3RhdGUgPSAmcGFyc2U7CkBAIC0xNDUsMTQgKzE0NSwxNyBAQCBqc29uX3BhcnNl X21hbmlmZXN0KEpzb25NYW5pZmVzdFBhcnNlQ29udGV4dCAqY29udGV4dCwgY2hhciAqYnVmZmVy LAogCXNlbS5zY2FsYXIgPSBqc29uX21hbmlmZXN0X3NjYWxhcjsKIAogCS8qIFJ1biB0aGUgYWN0 dWFsIEpTT04gcGFyc2VyLiAqLwotCWpzb25fZXJyb3IgPSBwZ19wYXJzZV9qc29uKGxleCwgJnNl bSk7CisJanNvbl9lcnJvciA9IHBnX3BhcnNlX2pzb24oJmxleCwgJnNlbSk7CiAJaWYgKGpzb25f ZXJyb3IgIT0gSlNPTl9TVUNDRVNTKQotCQlqc29uX21hbmlmZXN0X3BhcnNlX2ZhaWx1cmUoY29u dGV4dCwgInBhcnNpbmcgZmFpbGVkIik7CisJCWpzb25fbWFuaWZlc3RfcGFyc2VfZmFpbHVyZShj b250ZXh0LCBqc29uX2VycmRldGFpbChqc29uX2Vycm9yLCAmbGV4KSk7CiAJaWYgKHBhcnNlLnN0 YXRlICE9IEpNX0VYUEVDVF9FT0YpCiAJCWpzb25fbWFuaWZlc3RfcGFyc2VfZmFpbHVyZShjb250 ZXh0LCAibWFuaWZlc3QgZW5kZWQgdW5leHBlY3RlZGx5Iik7CiAKIAkvKiBWZXJpZnkgdGhlIG1h bmlmZXN0IGNoZWNrc3VtLiAqLwogCXZlcmlmeV9tYW5pZmVzdF9jaGVja3N1bSgmcGFyc2UsIGJ1 ZmZlciwgc2l6ZSk7CisKKwkvKiBDbGVhbiB1cC4gKi8KKwl0ZXJtSnNvbkxleENvbnRleHQoJmxl eCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3ZlcmlmeWJhY2t1cC90LzAwNV9i YWRfbWFuaWZlc3QucGwgYi9zcmMvYmluL3BnX3ZlcmlmeWJhY2t1cC90LzAwNV9iYWRfbWFuaWZl c3QucGwKaW5kZXggNGY1YjhmNWE0OS4uOWY4YTEwMGE3MSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9w Z192ZXJpZnliYWNrdXAvdC8wMDVfYmFkX21hbmlmZXN0LnBsCisrKyBiL3NyYy9iaW4vcGdfdmVy aWZ5YmFja3VwL3QvMDA1X2JhZF9tYW5pZmVzdC5wbApAQCAtMTYsNyArMTYsNyBAQCBteSAkdGVt cGRpciA9IFRlc3RMaWI6OnRlbXBkaXI7CiAKIHRlc3RfYmFkX21hbmlmZXN0KAogCSdpbnB1dCBz dHJpbmcgZW5kZWQgdW5leHBlY3RlZGx5JywKLQlxci9jb3VsZCBub3QgcGFyc2UgYmFja3VwIG1h bmlmZXN0OiBwYXJzaW5nIGZhaWxlZC8sCisJcXIvY291bGQgbm90IHBhcnNlIGJhY2t1cCBtYW5p ZmVzdDogVGhlIGlucHV0IHN0cmluZyBlbmRlZCB1bmV4cGVjdGVkbHkvLAogCTw8RU9NKTsKIHsK IEVPTQpkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi9NYWtlZmlsZSBiL3NyYy9jb21tb24vTWFrZWZp bGUKaW5kZXggODgwNzIyZmNmNS4uNWVjYjA5YThjNCAxMDA2NDQKLS0tIGEvc3JjL2NvbW1vbi9N YWtlZmlsZQorKysgYi9zcmMvY29tbW9uL01ha2VmaWxlCkBAIC00MCw3ICs0MCw3IEBAIG92ZXJy aWRlIENQUEZMQUdTICs9IC1EVkFMX0xERkxBR1NfRVg9IlwiJChMREZMQUdTX0VYKVwiIgogb3Zl cnJpZGUgQ1BQRkxBR1MgKz0gLURWQUxfTERGTEFHU19TTD0iXCIkKExERkxBR1NfU0wpXCIiCiBv dmVycmlkZSBDUFBGTEFHUyArPSAtRFZBTF9MSUJTPSJcIiQoTElCUylcIiIKIAotb3ZlcnJpZGUg Q1BQRkxBR1MgOj0gLURGUk9OVEVORCAtSS4gLUkkKHRvcF9zcmNkaXIpL3NyYy9jb21tb24gJChD UFBGTEFHUykKK292ZXJyaWRlIENQUEZMQUdTIDo9IC1ERlJPTlRFTkQgLUkuIC1JJCh0b3Bfc3Jj ZGlyKS9zcmMvY29tbW9uIC1JJChsaWJwcV9zcmNkaXIpICQoQ1BQRkxBR1MpCiBMSUJTICs9ICQo UFRIUkVBRF9MSUJTKQogCiAjIElmIHlvdSBhZGQgb2JqZWN0cyBoZXJlLCBzZWUgYWxzbyBzcmMv dG9vbHMvbXN2Yy9Na3ZjYnVpbGQucG0KZGlmZiAtLWdpdCBhL3NyYy9jb21tb24vanNvbmFwaS5j IGIvc3JjL2NvbW1vbi9qc29uYXBpLmMKaW5kZXggNTUwNDA3MmI0Zi4uM2E5NjIwZjczOSAxMDA2 NDQKLS0tIGEvc3JjL2NvbW1vbi9qc29uYXBpLmMKKysrIGIvc3JjL2NvbW1vbi9qc29uYXBpLmMK QEAgLTIwLDEwICsyMCwzOSBAQAogI2luY2x1ZGUgImNvbW1vbi9qc29uYXBpLmgiCiAjaW5jbHVk ZSAibWIvcGdfd2NoYXIuaCIKIAotI2lmbmRlZiBGUk9OVEVORAorI2lmZGVmIEZST05URU5ECisj aW5jbHVkZSAicHFleHBidWZmZXIuaCIKKyNlbHNlCisjaW5jbHVkZSAibGliL3N0cmluZ2luZm8u aCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNlbmRpZgogCisvKgorICogSW4gYmFja2VuZCwg d2Ugd2lsbCB1c2UgcGFsbG9jL3BmcmVlIGFsb25nIHdpdGggU3RyaW5nSW5mby4gIEluIGZyb250 ZW5kLCB1c2UKKyAqIG1hbGxvYyBhbmQgUFFFeHBCdWZmZXIsIGFuZCByZXR1cm4gSlNPTl9PVVRf T0ZfTUVNT1JZIG9uIG91dC1vZi1tZW1vcnkuCisgKi8KKyNpZmRlZiBGUk9OVEVORAorCisjZGVm aW5lIFNUUkRVUChzKSBzdHJkdXAocykKKyNkZWZpbmUgQUxMT0Moc2l6ZSkgbWFsbG9jKHNpemUp CisKKyNkZWZpbmUgYXBwZW5kU3RyVmFsCQlhcHBlbmRQUUV4cEJ1ZmZlcgorI2RlZmluZSBhcHBl bmRTdHJWYWxDaGFyCWFwcGVuZFBRRXhwQnVmZmVyQ2hhcgorI2RlZmluZSBjcmVhdGVTdHJWYWwJ CWNyZWF0ZVBRRXhwQnVmZmVyCisjZGVmaW5lIHJlc2V0U3RyVmFsCQkJcmVzZXRQUUV4cEJ1ZmZl cgorCisjZWxzZSAvKiAhRlJPTlRFTkQgKi8KKworI2RlZmluZSBTVFJEVVAocykgcHN0cmR1cChz KQorI2RlZmluZSBBTExPQyhzaXplKSBwYWxsb2Moc2l6ZSkKKworI2RlZmluZSBhcHBlbmRTdHJW YWwJCWFwcGVuZFN0cmluZ0luZm8KKyNkZWZpbmUgYXBwZW5kU3RyVmFsQ2hhcglhcHBlbmRTdHJp bmdJbmZvQ2hhcgorI2RlZmluZSBjcmVhdGVTdHJWYWwJCW1ha2VTdHJpbmdJbmZvCisjZGVmaW5l IHJlc2V0U3RyVmFsCQkJcmVzZXRTdHJpbmdJbmZvCisKKyNlbmRpZgorCiAvKgogICogVGhlIGNv bnRleHQgb2YgdGhlIHBhcnNlciBpcyBtYWludGFpbmVkIGJ5IHRoZSByZWN1cnNpdmUgZGVzY2Vu dAogICogbWVjaGFuaXNtLCBidXQgaXMgcGFzc2VkIGV4cGxpY2l0bHkgdG8gdGhlIGVycm9yIHJl cG9ydGluZyByb3V0aW5lCkBAIC0xMzIsMTAgKzE2MSwxMiBAQCBJc1ZhbGlkSnNvbk51bWJlcihj b25zdCBjaGFyICpzdHIsIGludCBsZW4pCiAJcmV0dXJuICghbnVtZXJpY19lcnJvcikgJiYgKHRv dGFsX2xlbiA9PSBkdW1teV9sZXguaW5wdXRfbGVuZ3RoKTsKIH0KIAorI2lmbmRlZiBGUk9OVEVO RAorCiAvKgogICogbWFrZUpzb25MZXhDb250ZXh0Q3N0cmluZ0xlbgogICoKLSAqIGxleCBjb25z dHJ1Y3Rvciwgd2l0aCBvciB3aXRob3V0IFN0cmluZ0luZm8gb2JqZWN0IGZvciBkZS1lc2NhcGVk IGxleGVtZXMuCisgKiBsZXggY29uc3RydWN0b3IsIHdpdGggb3Igd2l0aG91dCBhIHN0cmluZyBv YmplY3QgZm9yIGRlLWVzY2FwZWQgbGV4ZW1lcy4KICAqCiAgKiBXaXRob3V0IGlzIGJldHRlciBh cyBpdCBtYWtlcyB0aGUgcHJvY2Vzc2luZyBmYXN0ZXIsIHNvIG9ubHkgbWFrZSBvbmUKICAqIGlm IHJlYWxseSByZXF1aXJlZC4KQEAgLTE0NSwxMyArMTc2LDY2IEBAIG1ha2VKc29uTGV4Q29udGV4 dENzdHJpbmdMZW4oY2hhciAqanNvbiwgaW50IGxlbiwgaW50IGVuY29kaW5nLCBib29sIG5lZWRf ZXNjYXBlCiB7CiAJSnNvbkxleENvbnRleHQgKmxleCA9IHBhbGxvYzAoc2l6ZW9mKEpzb25MZXhD b250ZXh0KSk7CiAKKwlpbml0SnNvbkxleENvbnRleHRDc3RyaW5nTGVuKGxleCwganNvbiwgbGVu LCBlbmNvZGluZywgbmVlZF9lc2NhcGVzKTsKKworCXJldHVybiBsZXg7Cit9CisKK3ZvaWQKK2Rl c3Ryb3lKc29uTGV4Q29udGV4dChKc29uTGV4Q29udGV4dCAqbGV4KQoreworCXRlcm1Kc29uTGV4 Q29udGV4dChsZXgpOworCXBmcmVlKGxleCk7Cit9CisKKyNlbmRpZiAvKiAhRlJPTlRFTkQgKi8K Kwordm9pZAoraW5pdEpzb25MZXhDb250ZXh0Q3N0cmluZ0xlbihKc29uTGV4Q29udGV4dCAqbGV4 LCBjaGFyICpqc29uLCBpbnQgbGVuLCBpbnQgZW5jb2RpbmcsIGJvb2wgbmVlZF9lc2NhcGVzKQor ewogCWxleC0+aW5wdXQgPSBsZXgtPnRva2VuX3Rlcm1pbmF0b3IgPSBsZXgtPmxpbmVfc3RhcnQg PSBqc29uOwogCWxleC0+bGluZV9udW1iZXIgPSAxOwogCWxleC0+aW5wdXRfbGVuZ3RoID0gbGVu OwogCWxleC0+aW5wdXRfZW5jb2RpbmcgPSBlbmNvZGluZzsKLQlpZiAobmVlZF9lc2NhcGVzKQot CQlsZXgtPnN0cnZhbCA9IG1ha2VTdHJpbmdJbmZvKCk7Ci0JcmV0dXJuIGxleDsKKwlsZXgtPnBh cnNlX3N0cnZhbCA9IG5lZWRfZXNjYXBlczsKKwlpZiAobGV4LT5wYXJzZV9zdHJ2YWwpCisJewor CQkvKgorCQkgKiBUaGlzIGNhbGwgY2FuIGZhaWwgaW4gRlJPTlRFTkQgY29kZS4gV2UgZGVmZXIg ZXJyb3IgaGFuZGxpbmcgdG8gdGltZQorCQkgKiBvZiB1c2UgKGpzb25fbGV4X3N0cmluZygpKSBz aW5jZSB0aGVyZSdzIG5vIHdheSB0byBzaWduYWwgZmFpbHVyZQorCQkgKiBoZXJlLCBhbmQgd2Ug bWlnaHQgbm90IG5lZWQgdG8gcGFyc2UgYW55IHN0cmluZ3MgYW55d2F5LgorCQkgKi8KKwkJbGV4 LT5zdHJ2YWwgPSBjcmVhdGVTdHJWYWwoKTsKKwl9CisJbGV4LT5lcnJvcm1zZyA9IE5VTEw7Cit9 CisKK3ZvaWQKK3Rlcm1Kc29uTGV4Q29udGV4dChKc29uTGV4Q29udGV4dCAqbGV4KQoreworCXN0 YXRpYyBjb25zdCBKc29uTGV4Q29udGV4dCBlbXB0eSA9IHswfTsKKworCWlmIChsZXgtPnN0cnZh bCkKKwl7CisjaWZkZWYgRlJPTlRFTkQKKwkJZGVzdHJveVBRRXhwQnVmZmVyKGxleC0+c3RydmFs KTsKKyNlbHNlCisJCXBmcmVlKGxleC0+c3RydmFsLT5kYXRhKTsKKwkJcGZyZWUobGV4LT5zdHJ2 YWwpOworI2VuZGlmCisJfQorCisJaWYgKGxleC0+ZXJyb3Jtc2cpCisJeworI2lmZGVmIEZST05U RU5ECisJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihsZXgtPmVycm9ybXNnKTsKKyNlbHNlCisJCXBmcmVl KGxleC0+ZXJyb3Jtc2ctPmRhdGEpOworCQlwZnJlZShsZXgtPmVycm9ybXNnKTsKKyNlbmRpZgor CX0KKworCSpsZXggPSBlbXB0eTsKIH0KIAogLyoKQEAgLTIxNyw3ICszMDEsNyBAQCBqc29uX2Nv dW50X2FycmF5X2VsZW1lbnRzKEpzb25MZXhDb250ZXh0ICpsZXgsIGludCAqZWxlbWVudHMpCiAJ ICogZXRjLCBzbyBkb2luZyB0aGlzIHdpdGggYSBjb3B5IG1ha2VzIHRoYXQgc2FmZS4KIAkgKi8K IAltZW1jcHkoJmNvcHlsZXgsIGxleCwgc2l6ZW9mKEpzb25MZXhDb250ZXh0KSk7Ci0JY29weWxl eC5zdHJ2YWwgPSBOVUxMOwkJLyogbm90IGludGVyZXN0ZWQgaW4gdmFsdWVzIGhlcmUgKi8KKwlj b3B5bGV4LnBhcnNlX3N0cnZhbCA9IGZhbHNlOwkJLyogbm90IGludGVyZXN0ZWQgaW4gdmFsdWVz IGhlcmUgKi8KIAljb3B5bGV4LmxleF9sZXZlbCsrOwogCiAJY291bnQgPSAwOwpAQCAtMjc5LDE0 ICszNjMsMjEgQEAgcGFyc2Vfc2NhbGFyKEpzb25MZXhDb250ZXh0ICpsZXgsIEpzb25TZW1BY3Rp b24gKnNlbSkKIAkvKiBleHRyYWN0IHRoZSBkZS1lc2NhcGVkIHN0cmluZyB2YWx1ZSwgb3IgdGhl IHJhdyBsZXhlbWUgKi8KIAlpZiAobGV4X3BlZWsobGV4KSA9PSBKU09OX1RPS0VOX1NUUklORykK IAl7Ci0JCWlmIChsZXgtPnN0cnZhbCAhPSBOVUxMKQotCQkJdmFsID0gcHN0cmR1cChsZXgtPnN0 cnZhbC0+ZGF0YSk7CisJCWlmIChsZXgtPnBhcnNlX3N0cnZhbCkKKwkJeworCQkJdmFsID0gU1RS RFVQKGxleC0+c3RydmFsLT5kYXRhKTsKKwkJCWlmICh2YWwgPT0gTlVMTCkKKwkJCQlyZXR1cm4g SlNPTl9PVVRfT0ZfTUVNT1JZOworCQl9CiAJfQogCWVsc2UKIAl7CiAJCWludAkJCWxlbiA9IChs ZXgtPnRva2VuX3Rlcm1pbmF0b3IgLSBsZXgtPnRva2VuX3N0YXJ0KTsKIAotCQl2YWwgPSBwYWxs b2MobGVuICsgMSk7CisJCXZhbCA9IEFMTE9DKGxlbiArIDEpOworCQlpZiAodmFsID09IE5VTEwp CisJCQlyZXR1cm4gSlNPTl9PVVRfT0ZfTUVNT1JZOworCiAJCW1lbWNweSh2YWwsIGxleC0+dG9r ZW5fc3RhcnQsIGxlbik7CiAJCXZhbFtsZW5dID0gJ1wwJzsKIAl9CkBAIC0zMjAsOCArNDExLDEy IEBAIHBhcnNlX29iamVjdF9maWVsZChKc29uTGV4Q29udGV4dCAqbGV4LCBKc29uU2VtQWN0aW9u ICpzZW0pCiAKIAlpZiAobGV4X3BlZWsobGV4KSAhPSBKU09OX1RPS0VOX1NUUklORykKIAkJcmV0 dXJuIHJlcG9ydF9wYXJzZV9lcnJvcihKU09OX1BBUlNFX1NUUklORywgbGV4KTsKLQlpZiAoKG9z dGFydCAhPSBOVUxMIHx8IG9lbmQgIT0gTlVMTCkgJiYgbGV4LT5zdHJ2YWwgIT0gTlVMTCkKLQkJ Zm5hbWUgPSBwc3RyZHVwKGxleC0+c3RydmFsLT5kYXRhKTsKKwlpZiAoKG9zdGFydCAhPSBOVUxM IHx8IG9lbmQgIT0gTlVMTCkgJiYgbGV4LT5wYXJzZV9zdHJ2YWwpCisJeworCQlmbmFtZSA9IFNU UkRVUChsZXgtPnN0cnZhbC0+ZGF0YSk7CisJCWlmIChmbmFtZSA9PSBOVUxMKQorCQkJcmV0dXJu IEpTT05fT1VUX09GX01FTU9SWTsKKwl9CiAJcmVzdWx0ID0ganNvbl9sZXgobGV4KTsKIAlpZiAo cmVzdWx0ICE9IEpTT05fU1VDQ0VTUykKIAkJcmV0dXJuIHJlc3VsdDsKQEAgLTM2OCw2ICs0NjMs MTAgQEAgcGFyc2Vfb2JqZWN0KEpzb25MZXhDb250ZXh0ICpsZXgsIEpzb25TZW1BY3Rpb24gKnNl bSkKIAlKc29uUGFyc2VFcnJvclR5cGUgcmVzdWx0OwogCiAjaWZuZGVmIEZST05URU5ECisJLyoK KwkgKiBUT0RPOiBjbGllbnRzIG5lZWQgc29tZSB3YXkgdG8gcHV0IGEgYm91bmQgb24gc3RhY2sg Z3Jvd3RoLiBQYXJzZSBsZXZlbAorCSAqIGxpbWl0cyBtYXliZT8KKwkgKi8KIAljaGVja19zdGFj a19kZXB0aCgpOwogI2VuZGlmCiAKQEAgLTY3Niw4ICs3NzUsMTUgQEAganNvbl9sZXhfc3RyaW5n KEpzb25MZXhDb250ZXh0ICpsZXgpCiAJaW50CQkJbGVuOwogCWludAkJCWhpX3N1cnJvZ2F0ZSA9 IC0xOwogCi0JaWYgKGxleC0+c3RydmFsICE9IE5VTEwpCi0JCXJlc2V0U3RyaW5nSW5mbyhsZXgt PnN0cnZhbCk7CisJaWYgKGxleC0+cGFyc2Vfc3RydmFsKQorCXsKKyNpZmRlZiBGUk9OVEVORAor CQkvKiBtYWtlIHN1cmUgaW5pdGlhbGl6YXRpb24gc3VjY2VlZGVkICovCisJCWlmIChsZXgtPnN0 cnZhbCA9PSBOVUxMKQorCQkJcmV0dXJuIEpTT05fT1VUX09GX01FTU9SWTsKKyNlbmRpZgorCQly ZXNldFN0clZhbChsZXgtPnN0cnZhbCk7CisJfQogCiAJQXNzZXJ0KGxleC0+aW5wdXRfbGVuZ3Ro ID4gMCk7CiAJcyA9IGxleC0+dG9rZW5fc3RhcnQ7CkBAIC03MzcsNyArODQzLDcgQEAganNvbl9s ZXhfc3RyaW5nKEpzb25MZXhDb250ZXh0ICpsZXgpCiAJCQkJCQlyZXR1cm4gSlNPTl9VTklDT0RF X0VTQ0FQRV9GT1JNQVQ7CiAJCQkJCX0KIAkJCQl9Ci0JCQkJaWYgKGxleC0+c3RydmFsICE9IE5V TEwpCisJCQkJaWYgKGxleC0+cGFyc2Vfc3RydmFsKQogCQkJCXsKIAkJCQkJLyoKIAkJCQkJICog Q29tYmluZSBzdXJyb2dhdGUgcGFpcnMuCkBAIC03OTcsMTkgKzkwMywxOSBAQCBqc29uX2xleF9z dHJpbmcoSnNvbkxleENvbnRleHQgKmxleCkKIAogCQkJCQkJdW5pY29kZV90b191dGY4KGNoLCAo dW5zaWduZWQgY2hhciAqKSB1dGY4c3RyKTsKIAkJCQkJCXV0ZjhsZW4gPSBwZ191dGZfbWJsZW4o KHVuc2lnbmVkIGNoYXIgKikgdXRmOHN0cik7Ci0JCQkJCQlhcHBlbmRCaW5hcnlTdHJpbmdJbmZv KGxleC0+c3RydmFsLCB1dGY4c3RyLCB1dGY4bGVuKTsKKwkJCQkJCWFwcGVuZEJpbmFyeVBRRXhw QnVmZmVyKGxleC0+c3RydmFsLCB1dGY4c3RyLCB1dGY4bGVuKTsKIAkJCQkJfQogCQkJCQllbHNl IGlmIChjaCA8PSAweDAwN2YpCiAJCQkJCXsKIAkJCQkJCS8qIFRoZSBBU0NJSSByYW5nZSBpcyB0 aGUgc2FtZSBpbiBhbGwgZW5jb2RpbmdzICovCi0JCQkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihs ZXgtPnN0cnZhbCwgKGNoYXIpIGNoKTsKKwkJCQkJCWFwcGVuZFBRRXhwQnVmZmVyQ2hhcihsZXgt PnN0cnZhbCwgKGNoYXIpIGNoKTsKIAkJCQkJfQogCQkJCQllbHNlCiAJCQkJCQlyZXR1cm4gSlNP Tl9VTklDT0RFX0hJR0hfRVNDQVBFOwogI2VuZGlmCQkJCQkJCS8qIEZST05URU5EICovCiAJCQkJ fQogCQkJfQotCQkJZWxzZSBpZiAobGV4LT5zdHJ2YWwgIT0gTlVMTCkKKwkJCWVsc2UgaWYgKGxl eC0+cGFyc2Vfc3RydmFsKQogCQkJewogCQkJCWlmIChoaV9zdXJyb2dhdGUgIT0gLTEpCiAJCQkJ CXJldHVybiBKU09OX1VOSUNPREVfTE9XX1NVUlJPR0FURTsKQEAgLTgxOSwyMiArOTI1LDIyIEBA IGpzb25fbGV4X3N0cmluZyhKc29uTGV4Q29udGV4dCAqbGV4KQogCQkJCQljYXNlICciJzoKIAkJ CQkJY2FzZSAnXFwnOgogCQkJCQljYXNlICcvJzoKLQkJCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFy KGxleC0+c3RydmFsLCAqcyk7CisJCQkJCQlhcHBlbmRTdHJWYWxDaGFyKGxleC0+c3RydmFsLCAq cyk7CiAJCQkJCQlicmVhazsKIAkJCQkJY2FzZSAnYic6Ci0JCQkJCQlhcHBlbmRTdHJpbmdJbmZv Q2hhcihsZXgtPnN0cnZhbCwgJ1xiJyk7CisJCQkJCQlhcHBlbmRTdHJWYWxDaGFyKGxleC0+c3Ry dmFsLCAnXGInKTsKIAkJCQkJCWJyZWFrOwogCQkJCQljYXNlICdmJzoKLQkJCQkJCWFwcGVuZFN0 cmluZ0luZm9DaGFyKGxleC0+c3RydmFsLCAnXGYnKTsKKwkJCQkJCWFwcGVuZFN0clZhbENoYXIo bGV4LT5zdHJ2YWwsICdcZicpOwogCQkJCQkJYnJlYWs7CiAJCQkJCWNhc2UgJ24nOgotCQkJCQkJ YXBwZW5kU3RyaW5nSW5mb0NoYXIobGV4LT5zdHJ2YWwsICdcbicpOworCQkJCQkJYXBwZW5kU3Ry VmFsQ2hhcihsZXgtPnN0cnZhbCwgJ1xuJyk7CiAJCQkJCQlicmVhazsKIAkJCQkJY2FzZSAncic6 Ci0JCQkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihsZXgtPnN0cnZhbCwgJ1xyJyk7CisJCQkJCQlh cHBlbmRTdHJWYWxDaGFyKGxleC0+c3RydmFsLCAnXHInKTsKIAkJCQkJCWJyZWFrOwogCQkJCQlj YXNlICd0JzoKLQkJCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGxleC0+c3RydmFsLCAnXHQnKTsK KwkJCQkJCWFwcGVuZFN0clZhbENoYXIobGV4LT5zdHJ2YWwsICdcdCcpOwogCQkJCQkJYnJlYWs7 CiAJCQkJCWRlZmF1bHQ6CiAJCQkJCQkvKiBOb3QgYSB2YWxpZCBzdHJpbmcgZXNjYXBlLCBzbyBz aWduYWwgZXJyb3IuICovCkBAIC04NTgsMTIgKzk2NCwxMiBAQCBqc29uX2xleF9zdHJpbmcoSnNv bkxleENvbnRleHQgKmxleCkKIAkJCX0KIAogCQl9Ci0JCWVsc2UgaWYgKGxleC0+c3RydmFsICE9 IE5VTEwpCisJCWVsc2UgaWYgKGxleC0+cGFyc2Vfc3RydmFsKQogCQl7CiAJCQlpZiAoaGlfc3Vy cm9nYXRlICE9IC0xKQogCQkJCXJldHVybiBKU09OX1VOSUNPREVfTE9XX1NVUlJPR0FURTsKIAot CQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIobGV4LT5zdHJ2YWwsICpzKTsKKwkJCWFwcGVuZFN0clZh bENoYXIobGV4LT5zdHJ2YWwsICpzKTsKIAkJfQogCiAJfQpAQCAtODcxLDYgKzk3NywxMSBAQCBq c29uX2xleF9zdHJpbmcoSnNvbkxleENvbnRleHQgKmxleCkKIAlpZiAoaGlfc3Vycm9nYXRlICE9 IC0xKQogCQlyZXR1cm4gSlNPTl9VTklDT0RFX0xPV19TVVJST0dBVEU7CiAKKyNpZmRlZiBGUk9O VEVORAorCWlmIChsZXgtPnBhcnNlX3N0cnZhbCAmJiBQUUV4cEJ1ZmZlckJyb2tlbihsZXgtPnN0 cnZhbCkpCisJCXJldHVybiBKU09OX09VVF9PRl9NRU1PUlk7CisjZW5kaWYKKwogCS8qIEhvb3Jh eSwgd2UgZm91bmQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nISAqLwogCWxleC0+cHJldl90b2tlbl90 ZXJtaW5hdG9yID0gbGV4LT50b2tlbl90ZXJtaW5hdG9yOwogCWxleC0+dG9rZW5fdGVybWluYXRv ciA9IHMgKyAxOwpAQCAtMTA0Myw3MiArMTE1NCw5MyBAQCByZXBvcnRfcGFyc2VfZXJyb3IoSnNv blBhcnNlQ29udGV4dCBjdHgsIEpzb25MZXhDb250ZXh0ICpsZXgpCiAJcmV0dXJuIEpTT05fU1VD Q0VTUzsJCS8qIHNpbGVuY2Ugc3R1cGlkZXIgY29tcGlsZXJzICovCiB9CiAKLQotI2lmbmRlZiBG Uk9OVEVORAotLyoKLSAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdG9rZW4gZnJvbSBhIGxleGluZyBj b250ZXh0LCBmb3IgZXJyb3IgcmVwb3J0aW5nLgotICovCi1zdGF0aWMgY2hhciAqCi1leHRyYWN0 X3Rva2VuKEpzb25MZXhDb250ZXh0ICpsZXgpCi17Ci0JaW50CQkJdG9rbGVuID0gbGV4LT50b2tl bl90ZXJtaW5hdG9yIC0gbGV4LT50b2tlbl9zdGFydDsKLQljaGFyCSAgICp0b2tlbiA9IHBhbGxv Yyh0b2tsZW4gKyAxKTsKLQotCW1lbWNweSh0b2tlbiwgbGV4LT50b2tlbl9zdGFydCwgdG9rbGVu KTsKLQl0b2tlblt0b2tsZW5dID0gJ1wwJzsKLQlyZXR1cm4gdG9rZW47Ci19Ci0KIC8qCiAgKiBD b25zdHJ1Y3QgYSBkZXRhaWwgbWVzc2FnZSBmb3IgYSBKU09OIGVycm9yLgogICoKLSAqIE5vdGUg dGhhdCB0aGUgZXJyb3IgbWVzc2FnZSBnZW5lcmF0ZWQgYnkgdGhpcyByb3V0aW5lIG1heSBub3Qg YmUKLSAqIHBhbGxvYydkLCBtYWtpbmcgaXQgdW5zYWZlIGZvciBmcm9udGVuZCBjb2RlIGFzIHRo ZXJlIGlzIG5vIHdheSB0bwotICoga25vdyBpZiB0aGlzIGNhbiBiZSBzYWZlcnkgcGZyZWUnZCBv ciBub3QuCisgKiBUaGUgcmV0dXJuZWQgYWxsb2NhdGlvbiBpcyBlaXRoZXIgc3RhdGljIG9yIG93 bmVkIGJ5IHRoZSBKc29uTGV4Q29udGV4dCBhbmQKKyAqIHNob3VsZCBub3QgYmUgZnJlZWQuCiAg Ki8KIGNoYXIgKgoganNvbl9lcnJkZXRhaWwoSnNvblBhcnNlRXJyb3JUeXBlIGVycm9yLCBKc29u TGV4Q29udGV4dCAqbGV4KQogeworCWludAkJdG9rbGVuID0gbGV4LT50b2tlbl90ZXJtaW5hdG9y IC0gbGV4LT50b2tlbl9zdGFydDsKKworCWlmIChlcnJvciA9PSBKU09OX09VVF9PRl9NRU1PUlkp CisJeworCQkvKiBTaG9ydCBjaXJjdWl0LiBBbGxvY2F0aW5nIGFueXRoaW5nIGZvciB0aGlzIGNh c2UgaXMgdW5oZWxwZnVsLiAqLworCQlyZXR1cm4gXygib3V0IG9mIG1lbW9yeSIpOworCX0KKwor CWlmIChsZXgtPmVycm9ybXNnKQorCQlyZXNldFN0clZhbChsZXgtPmVycm9ybXNnKTsKKwllbHNl CisJCWxleC0+ZXJyb3Jtc2cgPSBjcmVhdGVTdHJWYWwoKTsKKwogCXN3aXRjaCAoZXJyb3IpCiAJ ewogCQljYXNlIEpTT05fU1VDQ0VTUzoKIAkJCS8qIGZhbGwgdGhyb3VnaCB0byB0aGUgZXJyb3Ig Y29kZSBhZnRlciBzd2l0Y2ggKi8KIAkJCWJyZWFrOwogCQljYXNlIEpTT05fRVNDQVBJTkdfSU5W QUxJRDoKLQkJCXJldHVybiBwc3ByaW50ZihfKCJFc2NhcGUgc2VxdWVuY2UgXCJcXCVzXCIgaXMg aW52YWxpZC4iKSwKLQkJCQkJCQlleHRyYWN0X3Rva2VuKGxleCkpOworCQkJYXBwZW5kU3RyVmFs KGxleC0+ZXJyb3Jtc2csCisJCQkJCQkgXygiRXNjYXBlIHNlcXVlbmNlIFwiXFwlLipzXCIgaXMg aW52YWxpZC4iKSwKKwkJCQkJCSB0b2tsZW4sIGxleC0+dG9rZW5fc3RhcnQpOworCQkJYnJlYWs7 CiAJCWNhc2UgSlNPTl9FU0NBUElOR19SRVFVSVJFRDoKLQkJCXJldHVybiBwc3ByaW50ZihfKCJD aGFyYWN0ZXIgd2l0aCB2YWx1ZSAweCUwMnggbXVzdCBiZSBlc2NhcGVkLiIpLAotCQkJCQkJCSh1 bnNpZ25lZCBjaGFyKSAqKGxleC0+dG9rZW5fdGVybWluYXRvcikpOworCQkJYXBwZW5kU3RyVmFs KGxleC0+ZXJyb3Jtc2csCisJCQkJCQkgXygiQ2hhcmFjdGVyIHdpdGggdmFsdWUgMHglMDJ4IG11 c3QgYmUgZXNjYXBlZC4iKSwKKwkJCQkJCSAodW5zaWduZWQgY2hhcikgKihsZXgtPnRva2VuX3Rl cm1pbmF0b3IpKTsKKwkJCWJyZWFrOwogCQljYXNlIEpTT05fRVhQRUNURURfRU5EOgotCQkJcmV0 dXJuIHBzcHJpbnRmKF8oIkV4cGVjdGVkIGVuZCBvZiBpbnB1dCwgYnV0IGZvdW5kIFwiJXNcIi4i KSwKLQkJCQkJCQlleHRyYWN0X3Rva2VuKGxleCkpOworCQkJYXBwZW5kU3RyVmFsKGxleC0+ZXJy b3Jtc2csCisJCQkJCQkgXygiRXhwZWN0ZWQgZW5kIG9mIGlucHV0LCBidXQgZm91bmQgXCIlLipz XCIuIiksCisJCQkJCQkgdG9rbGVuLCBsZXgtPnRva2VuX3N0YXJ0KTsKKwkJCWJyZWFrOwogCQlj YXNlIEpTT05fRVhQRUNURURfQVJSQVlfRklSU1Q6Ci0JCQlyZXR1cm4gcHNwcmludGYoXygiRXhw ZWN0ZWQgYXJyYXkgZWxlbWVudCBvciBcIl1cIiwgYnV0IGZvdW5kIFwiJXNcIi4iKSwKLQkJCQkJ CQlleHRyYWN0X3Rva2VuKGxleCkpOworCQkJYXBwZW5kU3RyVmFsKGxleC0+ZXJyb3Jtc2csCisJ CQkJCQkgXygiRXhwZWN0ZWQgYXJyYXkgZWxlbWVudCBvciBcIl1cIiwgYnV0IGZvdW5kIFwiJS4q c1wiLiIpLAorCQkJCQkJIHRva2xlbiwgbGV4LT50b2tlbl9zdGFydCk7CisJCQlicmVhazsKIAkJ Y2FzZSBKU09OX0VYUEVDVEVEX0FSUkFZX05FWFQ6Ci0JCQlyZXR1cm4gcHNwcmludGYoXygiRXhw ZWN0ZWQgXCIsXCIgb3IgXCJdXCIsIGJ1dCBmb3VuZCBcIiVzXCIuIiksCi0JCQkJCQkJZXh0cmFj dF90b2tlbihsZXgpKTsKKwkJCWFwcGVuZFN0clZhbChsZXgtPmVycm9ybXNnLAorCQkJCQkJIF8o IkV4cGVjdGVkIFwiLFwiIG9yIFwiXVwiLCBidXQgZm91bmQgXCIlLipzXCIuIiksCisJCQkJCQkg dG9rbGVuLCBsZXgtPnRva2VuX3N0YXJ0KTsKKwkJCWJyZWFrOwogCQljYXNlIEpTT05fRVhQRUNU RURfQ09MT046Ci0JCQlyZXR1cm4gcHNwcmludGYoXygiRXhwZWN0ZWQgXCI6XCIsIGJ1dCBmb3Vu ZCBcIiVzXCIuIiksCi0JCQkJCQkJZXh0cmFjdF90b2tlbihsZXgpKTsKKwkJCWFwcGVuZFN0clZh bChsZXgtPmVycm9ybXNnLAorCQkJCQkJIF8oIkV4cGVjdGVkIFwiOlwiLCBidXQgZm91bmQgXCIl LipzXCIuIiksCisJCQkJCQkgdG9rbGVuLCBsZXgtPnRva2VuX3N0YXJ0KTsKKwkJCWJyZWFrOwog CQljYXNlIEpTT05fRVhQRUNURURfSlNPTjoKLQkJCXJldHVybiBwc3ByaW50ZihfKCJFeHBlY3Rl ZCBKU09OIHZhbHVlLCBidXQgZm91bmQgXCIlc1wiLiIpLAotCQkJCQkJCWV4dHJhY3RfdG9rZW4o bGV4KSk7CisJCQlhcHBlbmRTdHJWYWwobGV4LT5lcnJvcm1zZywKKwkJCQkJCSBfKCJFeHBlY3Rl ZCBKU09OIHZhbHVlLCBidXQgZm91bmQgXCIlLipzXCIuIiksCisJCQkJCQkgdG9rbGVuLCBsZXgt PnRva2VuX3N0YXJ0KTsKKwkJCWJyZWFrOwogCQljYXNlIEpTT05fRVhQRUNURURfTU9SRToKIAkJ CXJldHVybiBfKCJUaGUgaW5wdXQgc3RyaW5nIGVuZGVkIHVuZXhwZWN0ZWRseS4iKTsKIAkJY2Fz ZSBKU09OX0VYUEVDVEVEX09CSkVDVF9GSVJTVDoKLQkJCXJldHVybiBwc3ByaW50ZihfKCJFeHBl Y3RlZCBzdHJpbmcgb3IgXCJ9XCIsIGJ1dCBmb3VuZCBcIiVzXCIuIiksCi0JCQkJCQkJZXh0cmFj dF90b2tlbihsZXgpKTsKKwkJCWFwcGVuZFN0clZhbChsZXgtPmVycm9ybXNnLAorCQkJCQkJIF8o IkV4cGVjdGVkIHN0cmluZyBvciBcIn1cIiwgYnV0IGZvdW5kIFwiJS4qc1wiLiIpLAorCQkJCQkJ IHRva2xlbiwgbGV4LT50b2tlbl9zdGFydCk7CisJCQlicmVhazsKIAkJY2FzZSBKU09OX0VYUEVD VEVEX09CSkVDVF9ORVhUOgotCQkJcmV0dXJuIHBzcHJpbnRmKF8oIkV4cGVjdGVkIFwiLFwiIG9y IFwifVwiLCBidXQgZm91bmQgXCIlc1wiLiIpLAotCQkJCQkJCWV4dHJhY3RfdG9rZW4obGV4KSk7 CisJCQlhcHBlbmRTdHJWYWwobGV4LT5lcnJvcm1zZywKKwkJCQkJCSBfKCJFeHBlY3RlZCBcIixc IiBvciBcIn1cIiwgYnV0IGZvdW5kIFwiJS4qc1wiLiIpLAorCQkJCQkJIHRva2xlbiwgbGV4LT50 b2tlbl9zdGFydCk7CisJCQlicmVhazsKIAkJY2FzZSBKU09OX0VYUEVDVEVEX1NUUklORzoKLQkJ CXJldHVybiBwc3ByaW50ZihfKCJFeHBlY3RlZCBzdHJpbmcsIGJ1dCBmb3VuZCBcIiVzXCIuIiks Ci0JCQkJCQkJZXh0cmFjdF90b2tlbihsZXgpKTsKKwkJCWFwcGVuZFN0clZhbChsZXgtPmVycm9y bXNnLAorCQkJCQkJIF8oIkV4cGVjdGVkIHN0cmluZywgYnV0IGZvdW5kIFwiJS4qc1wiLiIpLAor CQkJCQkJIHRva2xlbiwgbGV4LT50b2tlbl9zdGFydCk7CisJCQlicmVhazsKIAkJY2FzZSBKU09O X0lOVkFMSURfVE9LRU46Ci0JCQlyZXR1cm4gcHNwcmludGYoXygiVG9rZW4gXCIlc1wiIGlzIGlu dmFsaWQuIiksCi0JCQkJCQkJZXh0cmFjdF90b2tlbihsZXgpKTsKKwkJCWFwcGVuZFN0clZhbChs ZXgtPmVycm9ybXNnLAorCQkJCQkJIF8oIlRva2VuIFwiJS4qc1wiIGlzIGludmFsaWQuIiksCisJ CQkJCQkgdG9rbGVuLCBsZXgtPnRva2VuX3N0YXJ0KTsKKwkJCWJyZWFrOworCQljYXNlIEpTT05f T1VUX09GX01FTU9SWToKKwkJCS8qIHNob3VsZCBoYXZlIGJlZW4gaGFuZGxlZCBhYm92ZTsgdXNl IHRoZSBlcnJvciBwYXRoICovCisJCQlicmVhazsKIAkJY2FzZSBKU09OX1VOSUNPREVfQ09ERV9Q T0lOVF9aRVJPOgogCQkJcmV0dXJuIF8oIlxcdTAwMDAgY2Fubm90IGJlIGNvbnZlcnRlZCB0byB0 ZXh0LiIpOwogCQljYXNlIEpTT05fVU5JQ09ERV9FU0NBUEVfRk9STUFUOgpAQCAtMTEyMiwxMiAr MTI1NCwyMiBAQCBqc29uX2VycmRldGFpbChKc29uUGFyc2VFcnJvclR5cGUgZXJyb3IsIEpzb25M ZXhDb250ZXh0ICpsZXgpCiAJCQlyZXR1cm4gXygiVW5pY29kZSBsb3cgc3Vycm9nYXRlIG11c3Qg Zm9sbG93IGEgaGlnaCBzdXJyb2dhdGUuIik7CiAJfQogCi0JLyoKLQkgKiBXZSBkb24ndCB1c2Ug YSBkZWZhdWx0OiBjYXNlLCBzbyB0aGF0IHRoZSBjb21waWxlciB3aWxsIHdhcm4gYWJvdXQKLQkg KiB1bmhhbmRsZWQgZW51bSB2YWx1ZXMuICBCdXQgdGhpcyBuZWVkcyB0byBiZSBoZXJlIGFueXdh eSB0byBjb3ZlciB0aGUKLQkgKiBwb3NzaWJpbGl0eSBvZiBhbiBpbmNvcnJlY3QgaW5wdXQuCi0J ICovCi0JZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQganNvbiBwYXJzZSBlcnJvciB0eXBlOiAlZCIs IChpbnQpIGVycm9yKTsKLQlyZXR1cm4gTlVMTDsKLX0KKwkvKiBOb3RlIHRoYXQgbGV4LT5lcnJv cm1zZyBjYW4gYmUgTlVMTCBpbiBGUk9OVEVORCBjb2RlLiAqLworCWlmIChsZXgtPmVycm9ybXNn ICYmICFsZXgtPmVycm9ybXNnLT5kYXRhWzBdKQorCXsKKwkJLyoKKwkJICogV2UgZG9uJ3QgdXNl IGEgZGVmYXVsdDogY2FzZSwgc28gdGhhdCB0aGUgY29tcGlsZXIgd2lsbCB3YXJuIGFib3V0CisJ CSAqIHVuaGFuZGxlZCBlbnVtIHZhbHVlcy4gIEJ1dCB0aGlzIG5lZWRzIHRvIGJlIGhlcmUgYW55 d2F5IHRvIGNvdmVyIHRoZQorCQkgKiBwb3NzaWJpbGl0eSBvZiBhbiBpbmNvcnJlY3QgaW5wdXQu CisJCSAqLworCQlhcHBlbmRTdHJWYWwobGV4LT5lcnJvcm1zZywKKwkJCQkJICJ1bmV4cGVjdGVk IGpzb24gcGFyc2UgZXJyb3IgdHlwZTogJWQiLCAoaW50KSBlcnJvcik7CisJfQorCisjaWZkZWYg RlJPTlRFTkQKKwlpZiAoUFFFeHBCdWZmZXJCcm9rZW4obGV4LT5lcnJvcm1zZykpCisJCXJldHVy biBfKCJvdXQgb2YgbWVtb3J5IHdoaWxlIGNvbnN0cnVjdGluZyBlcnJvciBkZXNjcmlwdGlvbiIp OwogI2VuZGlmCisKKwlyZXR1cm4gbGV4LT5lcnJvcm1zZy0+ZGF0YTsKK30KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2NvbW1vbi9qc29uYXBpLmggYi9zcmMvaW5jbHVkZS9jb21tb24vanNvbmFw aS5oCmluZGV4IGVjM2RmY2U5YzMuLmRjNzFhYjJjZDMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2NvbW1vbi9qc29uYXBpLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbW9uL2pzb25hcGkuaApAQCAt MTQsOCArMTQsNiBAQAogI2lmbmRlZiBKU09OQVBJX0gKICNkZWZpbmUgSlNPTkFQSV9ICiAKLSNp bmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgotCiB0eXBlZGVmIGVudW0KIHsKIAlKU09OX1RPS0VO X0lOVkFMSUQsCkBAIC00OCw2ICs0Niw3IEBAIHR5cGVkZWYgZW51bQogCUpTT05fRVhQRUNURURf T0JKRUNUX05FWFQsCiAJSlNPTl9FWFBFQ1RFRF9TVFJJTkcsCiAJSlNPTl9JTlZBTElEX1RPS0VO LAorCUpTT05fT1VUX09GX01FTU9SWSwKIAlKU09OX1VOSUNPREVfQ09ERV9QT0lOVF9aRVJPLAog CUpTT05fVU5JQ09ERV9FU0NBUEVfRk9STUFULAogCUpTT05fVU5JQ09ERV9ISUdIX0VTQ0FQRSwK QEAgLTU1LDYgKzU0LDE3IEBAIHR5cGVkZWYgZW51bQogCUpTT05fVU5JQ09ERV9MT1dfU1VSUk9H QVRFCiB9IEpzb25QYXJzZUVycm9yVHlwZTsKIAorLyoKKyAqIERvbid0IGRlcGVuZCBvbiB0aGUg aW50ZXJuYWwgdHlwZSBoZWFkZXIgZm9yIHN0cnZhbDsgaWYgY2FsbGVycyBuZWVkIGFjY2Vzcwor ICogdGhlbiB0aGV5IGNhbiBpbmNsdWRlIHRoZSBhcHByb3ByaWF0ZSBoZWFkZXIgdGhlbXNlbHZl cy4KKyAqLworI2lmZGVmIEZST05URU5ECisjZGVmaW5lIFN0clZhbFR5cGUgUFFFeHBCdWZmZXJE YXRhCisjZWxzZQorI2RlZmluZSBTdHJWYWxUeXBlIFN0cmluZ0luZm9EYXRhCisjZW5kaWYKKwor dHlwZWRlZiBzdHJ1Y3QgU3RyVmFsVHlwZSBTdHJWYWxUeXBlOwogCiAvKgogICogQWxsIHRoZSBm aWVsZHMgaW4gdGhpcyBzdHJ1Y3R1cmUgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgcmVhZC1vbmx5LgpA QCAtODEsNyArOTEsOSBAQCB0eXBlZGVmIHN0cnVjdCBKc29uTGV4Q29udGV4dAogCWludAkJCWxl eF9sZXZlbDsKIAlpbnQJCQlsaW5lX251bWJlcjsJLyogbGluZSBudW1iZXIsIHN0YXJ0aW5nIGZy b20gMSAqLwogCWNoYXIJICAgKmxpbmVfc3RhcnQ7CQkvKiB3aGVyZSB0aGF0IGxpbmUgc3RhcnRz IHdpdGhpbiBpbnB1dCAqLwotCVN0cmluZ0luZm8Jc3RydmFsOworCWJvb2wJCXBhcnNlX3N0cnZh bDsKKwlTdHJWYWxUeXBlICpzdHJ2YWw7CQkJLyogb25seSB1c2VkIGlmIHBhcnNlX3N0cnZhbCA9 PSB0cnVlICovCisJU3RyVmFsVHlwZSAqZXJyb3Jtc2c7CiB9IEpzb25MZXhDb250ZXh0OwogCiB0 eXBlZGVmIHZvaWQgKCpqc29uX3N0cnVjdF9hY3Rpb24pICh2b2lkICpzdGF0ZSk7CkBAIC0xNDEs OSArMTUzLDEwIEBAIGV4dGVybiBKc29uU2VtQWN0aW9uIG51bGxTZW1BY3Rpb247CiAgKi8KIGV4 dGVybiBKc29uUGFyc2VFcnJvclR5cGUganNvbl9jb3VudF9hcnJheV9lbGVtZW50cyhKc29uTGV4 Q29udGV4dCAqbGV4LAogCQkJCQkJCQkJCQkJCWludCAqZWxlbWVudHMpOworI2lmbmRlZiBGUk9O VEVORAogCiAvKgotICogY29uc3RydWN0b3IgZm9yIEpzb25MZXhDb250ZXh0LCB3aXRoIG9yIHdp dGhvdXQgc3RydmFsIGVsZW1lbnQuCisgKiBhbGxvY2F0aW5nIGNvbnN0cnVjdG9yIGZvciBKc29u TGV4Q29udGV4dCwgd2l0aCBvciB3aXRob3V0IHN0cnZhbCBlbGVtZW50LgogICogSWYgc3VwcGxp ZWQsIHRoZSBzdHJ2YWwgZWxlbWVudCB3aWxsIGNvbnRhaW4gYSBkZS1lc2NhcGVkIHZlcnNpb24g b2YKICAqIHRoZSBsZXhlbWUuIEhvd2V2ZXIsIGRvaW5nIHRoaXMgaW1wb3NlcyBhIHBlcmZvcm1h bmNlIHBlbmFsdHksIHNvCiAgKiBpdCBzaG91bGQgYmUgYXZvaWRlZCBpZiB0aGUgZGUtZXNjYXBl ZCBsZXhlbWUgaXMgbm90IHJlcXVpcmVkLgpAQCAtMTUzLDYgKzE2NiwzMiBAQCBleHRlcm4gSnNv bkxleENvbnRleHQgKm1ha2VKc29uTGV4Q29udGV4dENzdHJpbmdMZW4oY2hhciAqanNvbiwKIAkJ CQkJCQkJCQkJCQlpbnQgZW5jb2RpbmcsCiAJCQkJCQkJCQkJCQkJYm9vbCBuZWVkX2VzY2FwZXMp OwogCisvKgorICogQ291bnRlcnBhcnQgdG8gbWFrZUpzb25MZXhDb250ZXh0Q3N0cmluZ0xlbigp OiBjbGVhcnMgYW5kIGRlYWxsb2NhdGVzIGxleC4KKyAqIFRoZSBjb250ZXh0IHBvaW50ZXIgc2hv dWxkIG5vdCBiZSB1c2VkIGFmdGVyIHRoaXMgY2FsbC4KKyAqLworZXh0ZXJuIHZvaWQgZGVzdHJv eUpzb25MZXhDb250ZXh0KEpzb25MZXhDb250ZXh0ICpsZXgpOworCisjZW5kaWYgLyogIUZST05U RU5EICovCisKKy8qCisgKiBzdGFjayBjb25zdHJ1Y3RvciBmb3IgSnNvbkxleENvbnRleHQsIHdp dGggb3Igd2l0aG91dCBzdHJ2YWwgZWxlbWVudC4KKyAqIElmIHN1cHBsaWVkLCB0aGUgc3RydmFs IGVsZW1lbnQgd2lsbCBjb250YWluIGEgZGUtZXNjYXBlZCB2ZXJzaW9uIG9mCisgKiB0aGUgbGV4 ZW1lLiBIb3dldmVyLCBkb2luZyB0aGlzIGltcG9zZXMgYSBwZXJmb3JtYW5jZSBwZW5hbHR5LCBz bworICogaXQgc2hvdWxkIGJlIGF2b2lkZWQgaWYgdGhlIGRlLWVzY2FwZWQgbGV4ZW1lIGlzIG5v dCByZXF1aXJlZC4KKyAqLworZXh0ZXJuIHZvaWQgaW5pdEpzb25MZXhDb250ZXh0Q3N0cmluZ0xl bihKc29uTGV4Q29udGV4dCAqbGV4LAorCQkJCQkJCQkJCSBjaGFyICpqc29uLAorCQkJCQkJCQkJ CSBpbnQgbGVuLAorCQkJCQkJCQkJCSBpbnQgZW5jb2RpbmcsCisJCQkJCQkJCQkJIGJvb2wgbmVl ZF9lc2NhcGVzKTsKKworLyoKKyAqIENvdW50ZXJwYXJ0IHRvIGluaXRKc29uTGV4Q29udGV4dENz dHJpbmdMZW4oKTogY2xlYXJzIHRoZSBjb250ZW50cyBvZiBsZXgsCisgKiBidXQgZG9lcyBub3Qg ZGVhbGxvY2F0ZSBsZXggaXRzZWxmLgorICovCitleHRlcm4gdm9pZCB0ZXJtSnNvbkxleENvbnRl eHQoSnNvbkxleENvbnRleHQgKmxleCk7CisKIC8qIGxleCBvbmUgdG9rZW4gKi8KIGV4dGVybiBK c29uUGFyc2VFcnJvclR5cGUganNvbl9sZXgoSnNvbkxleENvbnRleHQgKmxleCk7CiAKLS0gCjIu MjUuMQoK --_006_8a5a35b31c3f25f6b047e77def0445a60399981dcamelvmwarecom_ Content-Type: text/x-patch; name="v2-0002-libpq-add-OAUTHBEARER-SASL-mechanism.patch" Content-Description: v2-0002-libpq-add-OAUTHBEARER-SASL-mechanism.patch Content-Disposition: attachment; filename="v2-0002-libpq-add-OAUTHBEARER-SASL-mechanism.patch"; size=36514; creation-date="Wed, 25 Aug 2021 18:41:39 GMT"; modification-date="Wed, 25 Aug 2021 18:41:39 GMT" Content-ID: <5432D0F26215D043BBB7910298D0300E@namprd05.prod.outlook.com> Content-Transfer-Encoding: base64 RnJvbSA1MmFjNGJkMjVjYTE5NzM1ZWIyYmQ4NjNlOGIxNTQ5Y2NiZTY1NjBhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8cGNoYW1waW9uQHZtd2FyZS5jb20+ CkRhdGU6IFR1ZSwgMTMgQXByIDIwMjEgMTA6Mjc6MjcgLTA3MDAKU3ViamVjdDogW1BBVENIIHYy IDIvNV0gbGlicHE6IGFkZCBPQVVUSEJFQVJFUiBTQVNMIG1lY2hhbmlzbQoKRE8gTk9UIFVTRSBU SElTIFBST09GIE9GIENPTkNFUFQgSU4gUFJPRFVDVElPTi4KCkltcGxlbWVudCBPQVVUSEJFQVJF UiAoUkZDIDc2MjgpIGFuZCBPQXV0aCAyLjAgRGV2aWNlIEF1dGhvcml6YXRpb24KR3JhbnRzIChS RkMgODYyOCkgb24gdGhlIGNsaWVudCBzaWRlLiBXaGVuIHNwZWFraW5nIHRvIGEgT0F1dGgtZW5h YmxlZApzZXJ2ZXIsIGl0IGxvb2tzIGEgYml0IGxpa2UgdGhpczoKCiAgICAkIHBzcWwgJ2hvc3Q9 ZXhhbXBsZS5vcmcgb2F1dGhfY2xpZW50X2lkPWYwMmM2MzYxLTA2MzUtLi4uJwogICAgVmlzaXQg aHR0cHM6Ly9vYXV0aC5leGFtcGxlLm9yZy9sb2dpbiBhbmQgZW50ZXIgdGhlIGNvZGU6IEZQUTIt TTRCRwoKVGhlIE9BdXRoIGlzc3VlciBtdXN0IHN1cHBvcnQgZGV2aWNlIGF1dGhvcml6YXRpb24u IE5vIG90aGVyIE9BdXRoIGZsb3dzCmFyZSBjdXJyZW50bHkgaW1wbGVtZW50ZWQuCgpUaGUgY2xp ZW50IGltcGxlbWVudGF0aW9uIHJlcXVpcmVzIGxpYmlkZGF3YyBhbmQgaXRzIGRldmVsb3BtZW50 CmhlYWRlcnMuIENvbmZpZ3VyZSAtLXdpdGgtb2F1dGggKGFuZCAtLXdpdGgtaW5jbHVkZXMvLS13 aXRoLWxpYnJhcmllcyB0bwpwb2ludCBhdCB0aGUgaWRkYXdjIGluc3RhbGxhdGlvbiwgaWYgaXQn cyBpbiBhIGN1c3RvbSBsb2NhdGlvbikuCgpTZXZlcmFsIFRPRE9zOgotIGRvbid0IHJldHJ5IGZv cmV2ZXIgaWYgdGhlIHNlcnZlciB3b24ndCBhY2NlcHQgb3VyIHRva2VuCi0gcGVyZm9ybSBzZXZl cmFsIHNhbml0eSBjaGVja3Mgb24gdGhlIE9BdXRoIGlzc3VlcidzIHJlc3BvbnNlcwotIGhhbmRs ZSBjYXNlcyB3aGVyZSB0aGUgY2xpZW50IGhhcyBiZWVuIHNldCB1cCB3aXRoIGFuIGlzc3VlciBh bmQKICBzY29wZSwgYnV0IHRoZSBQb3N0Z3JlcyBzZXJ2ZXIgd2FudHMgdG8gdXNlIHNvbWV0aGlu ZyBkaWZmZXJlbnQKLSBpbXByb3ZlIGVycm9yIGRlYnVnZ2FiaWxpdHkgZHVyaW5nIHRoZSBPQXV0 aCBoYW5kc2hha2UKLSAuLi5hbmQgbW9yZS4KLS0tCiBjb25maWd1cmUgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCAxMDAgKysrKwogY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAg ICAgIHwgIDE5ICsKIHNyYy9NYWtlZmlsZS5nbG9iYWwuaW4gICAgICAgICAgICAgICB8ICAgMSAr CiBzcmMvaW5jbHVkZS9jb21tb24vb2F1dGgtY29tbW9uLmggICAgfCAgMTkgKwogc3JjL2luY2x1 ZGUvcGdfY29uZmlnLmguaW4gICAgICAgICAgIHwgICA2ICsKIHNyYy9pbnRlcmZhY2VzL2xpYnBx L01ha2VmaWxlICAgICAgICB8ICAgNyArLQogc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1v YXV0aC5jIHwgNzQ1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2ludGVyZmFjZXMv bGlicHEvZmUtYXV0aC1zYXNsLmggIHwgICA1ICstCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1h dXRoLXNjcmFtLmMgfCAgIDYgKy0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGguYyAgICAg ICB8ICA0MiArLQogc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC5oICAgICAgIHwgICAzICsK IHNyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNvbm5lY3QuYyAgICB8ICAzOCArKwogc3JjL2ludGVy ZmFjZXMvbGlicHEvbGlicHEtaW50LmggICAgIHwgICA4ICsKIDEzIGZpbGVzIGNoYW5nZWQsIDk4 MCBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv aW5jbHVkZS9jb21tb24vb2F1dGgtY29tbW9uLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW50 ZXJmYWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmMKCmRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9j b25maWd1cmUKaW5kZXggNzU0MmZlMzBhMS4uMmRkYmU5YTFkOSAxMDA3NTUKLS0tIGEvY29uZmln dXJlCisrKyBiL2NvbmZpZ3VyZQpAQCAtNzEzLDYgKzcxMyw3IEBAIHdpdGhfdXVpZAogd2l0aF9y ZWFkbGluZQogd2l0aF9zeXN0ZW1kCiB3aXRoX3NlbGludXgKK3dpdGhfb2F1dGgKIHdpdGhfbGRh cAogd2l0aF9rcmJfc3J2bmFtCiBrcmJfc3J2dGFiCkBAIC04NTYsNiArODU3LDcgQEAgd2l0aF9r cmJfc3J2bmFtCiB3aXRoX3BhbQogd2l0aF9ic2RfYXV0aAogd2l0aF9sZGFwCit3aXRoX29hdXRo CiB3aXRoX2JvbmpvdXIKIHdpdGhfc2VsaW51eAogd2l0aF9zeXN0ZW1kCkBAIC0xNTYyLDYgKzE1 NjQsNyBAQCBPcHRpb25hbCBQYWNrYWdlczoKICAgLS13aXRoLXBhbSAgICAgICAgICAgICAgYnVp bGQgd2l0aCBQQU0gc3VwcG9ydAogICAtLXdpdGgtYnNkLWF1dGggICAgICAgICBidWlsZCB3aXRo IEJTRCBBdXRoZW50aWNhdGlvbiBzdXBwb3J0CiAgIC0td2l0aC1sZGFwICAgICAgICAgICAgIGJ1 aWxkIHdpdGggTERBUCBzdXBwb3J0CisgIC0td2l0aC1vYXV0aCAgICAgICAgICAgIGJ1aWxkIHdp dGggT0F1dGggMi4wIHN1cHBvcnQKICAgLS13aXRoLWJvbmpvdXIgICAgICAgICAgYnVpbGQgd2l0 aCBCb25qb3VyIHN1cHBvcnQKICAgLS13aXRoLXNlbGludXggICAgICAgICAgYnVpbGQgd2l0aCBT RUxpbnV4IHN1cHBvcnQKICAgLS13aXRoLXN5c3RlbWQgICAgICAgICAgYnVpbGQgd2l0aCBzeXN0 ZW1kIHN1cHBvcnQKQEAgLTgxNDQsNiArODE0Nyw0MiBAQCAkYXNfZWNobyAiJHdpdGhfbGRhcCIg PiY2OyB9CiAKIAogCisjCisjIE9BdXRoIDIuMAorIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHdpdGggT0F1dGggc3Vw cG9ydCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHdpdGggT0F1 dGggc3VwcG9ydC4uLiAiID4mNjsgfQorCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1vYXV0 aCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfb2F1dGgrc2V0fSIgPSBzZXQ7IHRoZW4gOgor ICB3aXRodmFsPSR3aXRoX29hdXRoOworICBjYXNlICR3aXRodmFsIGluCisgICAgeWVzKQorCisk YXNfZWNobyAiI2RlZmluZSBVU0VfT0FVVEggMSIgPj5jb25mZGVmcy5oCisKKyAgICAgIDs7Cisg ICAgbm8pCisgICAgICA6CisgICAgICA7OworICAgICopCisgICAgICBhc19mbl9lcnJvciAkPyAi bm8gYXJndW1lbnQgZXhwZWN0ZWQgZm9yIC0td2l0aC1vYXV0aCBvcHRpb24iICIkTElORU5PIiA1 CisgICAgICA7OworICBlc2FjCisKK2Vsc2UKKyAgd2l0aF9vYXV0aD1ubworCitmaQorCisKK3sg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkd2l0aF9vYXV0 aCIgPiY1CiskYXNfZWNobyAiJHdpdGhfb2F1dGgiID4mNjsgfQorCisKKwogIwogIyBCb25qb3Vy CiAjCkBAIC0xMzA4NCw2ICsxMzEyMyw1NiBAQCBmaQogCiAKIAoraWYgdGVzdCAiJHdpdGhfb2F1 dGgiID0geWVzIDsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IGNoZWNraW5nIGZvciBpX2luaXRfc2Vzc2lvbiBpbiAtbGlkZGF3YyIgPiY1CiskYXNfZWNo b19uICJjaGVja2luZyBmb3IgaV9pbml0X3Nlc3Npb24gaW4gLWxpZGRhd2MuLi4gIiA+JjY7IH0K K2lmICR7YWNfY3ZfbGliX2lkZGF3Y19pX2luaXRfc2Vzc2lvbis6fSBmYWxzZTsgdGhlbiA6Cisg ICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJ QlM9JExJQlMKK0xJQlM9Ii1saWRkYXdjICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNF T0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJp ZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2Ug Y2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAg IGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBs eS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBpX2lu aXRfc2Vzc2lvbiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGlfaW5pdF9zZXNzaW9uICgp OworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElO RU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9pZGRhd2NfaV9pbml0X3Nlc3Npb249eWVzCitlbHNl CisgIGFjX2N2X2xpYl9pZGRhd2NfaV9pbml0X3Nlc3Npb249bm8KK2ZpCitybSAtZiBjb3JlIGNv bmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQg Y29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2lk ZGF3Y19pX2luaXRfc2Vzc2lvbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9pZGRhd2NfaV9p bml0X3Nlc3Npb24iID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfaWRkYXdjX2lfaW5pdF9z ZXNzaW9uIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVm aW5lIEhBVkVfTElCSUREQVdDIDEKK19BQ0VPRgorCisgIExJQlM9Ii1saWRkYXdjICRMSUJTIgor CitlbHNlCisgIGFzX2ZuX2Vycm9yICQ/ICJsaWJyYXJ5ICdpZGRhd2MnIGlzIHJlcXVpcmVkIGZv ciBPQXV0aCBzdXBwb3J0IiAiJExJTkVOTyIgNQorZmkKKworZmkKKwogIyBmb3IgY29udHJpYi9z ZXBnc3FsCiBpZiB0ZXN0ICIkd2l0aF9zZWxpbnV4IiA9IHllczsgdGhlbgogICB7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzZWN1cml0eV9jb21w dXRlX2NyZWF0ZV9uYW1lIGluIC1sc2VsaW51eCIgPiY1CkBAIC0xMzk3OCw2ICsxNDA2NywxNyBA QCBmaQogCiBkb25lCiAKK2ZpCisKK2lmIHRlc3QgIiR3aXRoX29hdXRoIiAhPSBubzsgdGhlbgor ICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiaWRkYXdjLmgiICJhY19j dl9oZWFkZXJfaWRkYXdjX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNf Y3ZfaGVhZGVyX2lkZGF3Y19oIiA9IHh5ZXM7IHRoZW4gOgorCitlbHNlCisgIGFzX2ZuX2Vycm9y ICQ/ICJoZWFkZXIgZmlsZSA8aWRkYXdjLmg+IGlzIHJlcXVpcmVkIGZvciBPQXV0aCIgIiRMSU5F Tk8iIDUKK2ZpCisKKwogZmkKIAogaWYgdGVzdCAiJFBPUlROQU1FIiA9ICJ3aW4zMiIgOyB0aGVu CmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggZWQzY2RiOWE4 ZS4uMjIwMjY0NzZkOSAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5h YwpAQCAtODUxLDYgKzg1MSwxNyBAQCBBQ19NU0dfUkVTVUxUKFskd2l0aF9sZGFwXSkKIEFDX1NV QlNUKHdpdGhfbGRhcCkKIAogCisjCisjIE9BdXRoIDIuMAorIworQUNfTVNHX0NIRUNLSU5HKFt3 aGV0aGVyIHRvIGJ1aWxkIHdpdGggT0F1dGggc3VwcG9ydF0pCitQR0FDX0FSR19CT09MKHdpdGgs IG9hdXRoLCBubywKKyAgICAgICAgICAgICAgW2J1aWxkIHdpdGggT0F1dGggMi4wIHN1cHBvcnRd LAorICAgICAgICAgICAgICBbQUNfREVGSU5FKFtVU0VfT0FVVEhdLCAxLCBbRGVmaW5lIHRvIDEg dG8gYnVpbGQgd2l0aCBPQXV0aCAyLjAgc3VwcG9ydC4gKC0td2l0aC1vYXV0aCldKV0pCitBQ19N U0dfUkVTVUxUKFskd2l0aF9vYXV0aF0pCitBQ19TVUJTVCh3aXRoX29hdXRoKQorCisKICMKICMg Qm9uam91cgogIwpAQCAtMTMyMSw2ICsxMzMyLDEwIEBAIGZpCiBBQ19TVUJTVChMREFQX0xJQlNf RkUpCiBBQ19TVUJTVChMREFQX0xJQlNfQkUpCiAKK2lmIHRlc3QgIiR3aXRoX29hdXRoIiA9IHll cyA7IHRoZW4KKyAgQUNfQ0hFQ0tfTElCKGlkZGF3YywgaV9pbml0X3Nlc3Npb24sIFtdLCBbQUNf TVNHX0VSUk9SKFtsaWJyYXJ5ICdpZGRhd2MnIGlzIHJlcXVpcmVkIGZvciBPQXV0aCBzdXBwb3J0 XSldKQorZmkKKwogIyBmb3IgY29udHJpYi9zZXBnc3FsCiBpZiB0ZXN0ICIkd2l0aF9zZWxpbnV4 IiA9IHllczsgdGhlbgogICBBQ19DSEVDS19MSUIoc2VsaW51eCwgc2VjdXJpdHlfY29tcHV0ZV9j cmVhdGVfbmFtZSwgW10sCkBAIC0xNTMxLDYgKzE1NDYsMTAgQEAgZWxpZiB0ZXN0ICIkd2l0aF91 dWlkIiA9IG9zc3AgOyB0aGVuCiAgICAgICBbQUNfTVNHX0VSUk9SKFtoZWFkZXIgZmlsZSA8b3Nz cC91dWlkLmg+IG9yIDx1dWlkLmg+IGlzIHJlcXVpcmVkIGZvciBPU1NQIFVVSURdKV0pXSkKIGZp CiAKK2lmIHRlc3QgIiR3aXRoX29hdXRoIiAhPSBubzsgdGhlbgorICBBQ19DSEVDS19IRUFERVIo aWRkYXdjLmgsIFtdLCBbQUNfTVNHX0VSUk9SKFtoZWFkZXIgZmlsZSA8aWRkYXdjLmg+IGlzIHJl cXVpcmVkIGZvciBPQXV0aF0pXSkKK2ZpCisKIGlmIHRlc3QgIiRQT1JUTkFNRSIgPSAid2luMzIi IDsgdGhlbgogICAgQUNfQ0hFQ0tfSEVBREVSUyhjcnRkZWZzLmgpCiBmaQpkaWZmIC0tZ2l0IGEv c3JjL01ha2VmaWxlLmdsb2JhbC5pbiBiL3NyYy9NYWtlZmlsZS5nbG9iYWwuaW4KaW5kZXggNmUy ZjIyNGNjNC4uZDY3OTEyNzExZSAxMDA2NDQKLS0tIGEvc3JjL01ha2VmaWxlLmdsb2JhbC5pbgor KysgYi9zcmMvTWFrZWZpbGUuZ2xvYmFsLmluCkBAIC0xOTMsNiArMTkzLDcgQEAgd2l0aF9sZGFw CT0gQHdpdGhfbGRhcEAKIHdpdGhfbGlieG1sCT0gQHdpdGhfbGlieG1sQAogd2l0aF9saWJ4c2x0 CT0gQHdpdGhfbGlieHNsdEAKIHdpdGhfbGx2bQk9IEB3aXRoX2xsdm1ACit3aXRoX29hdXRoCT0g QHdpdGhfb2F1dGhACiB3aXRoX3N5c3RlbV90emRhdGEgPSBAd2l0aF9zeXN0ZW1fdHpkYXRhQAog d2l0aF91dWlkCT0gQHdpdGhfdXVpZEAKIHdpdGhfemxpYgk9IEB3aXRoX3psaWJACmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9jb21tb24vb2F1dGgtY29tbW9uLmggYi9zcmMvaW5jbHVkZS9jb21t b24vb2F1dGgtY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u M2ZhOTVhYzdlOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1vbi9vYXV0aC1j b21tb24uaApAQCAtMCwwICsxLDE5IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBvYXV0 aC1jb21tb24uaAorICoJCURlY2xhcmF0aW9ucyBmb3IgaGVscGVyIGZ1bmN0aW9ucyB1c2VkIGZv ciBPQXV0aC9PSURDIGF1dGhlbnRpY2F0aW9uCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChj KSAxOTk2LTIwMjEsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0 aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2Fs aWZvcm5pYQorICoKKyAqIHNyYy9pbmNsdWRlL2NvbW1vbi9vYXV0aC1jb21tb24uaAorICoKKyAq LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIE9BVVRIX0NPTU1PTl9ICisjZGVmaW5lIE9B VVRIX0NPTU1PTl9ICisKKy8qIE5hbWUgb2YgU0FTTCBtZWNoYW5pc20gcGVyIElBTkEgKi8KKyNk ZWZpbmUgT0FVVEhCRUFSRVJfTkFNRSAiT0FVVEhCRUFSRVIiCisKKyNlbmRpZiAvKiBPQVVUSF9D T01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcGdfY29uZmlnLmguaW4gYi9zcmMv aW5jbHVkZS9wZ19jb25maWcuaC5pbgppbmRleCAxNWZmZGQ4OTVhLi5mODJhYjM4NTM2IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9wZ19jb25maWcuaC5pbgorKysgYi9zcmMvaW5jbHVkZS9wZ19j b25maWcuaC5pbgpAQCAtMzMxLDYgKzMzMSw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2 ZSB0aGUgYGNyeXB0bycgbGlicmFyeSAoLWxjcnlwdG8pLiAqLwogI3VuZGVmIEhBVkVfTElCQ1JZ UFRPCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaWRkYXdjJyBsaWJyYXJ5ICgt bGlkZGF3YykuICovCisjdW5kZWYgSEFWRV9MSUJJRERBV0MKKwogLyogRGVmaW5lIHRvIDEgaWYg eW91IGhhdmUgdGhlIGBsZGFwJyBsaWJyYXJ5ICgtbGxkYXApLiAqLwogI3VuZGVmIEhBVkVfTElC TERBUAogCkBAIC05MjYsNiArOTI5LDkgQEAKIC8qIERlZmluZSB0byBzZWxlY3QgbmFtZWQgUE9T SVggc2VtYXBob3Jlcy4gKi8KICN1bmRlZiBVU0VfTkFNRURfUE9TSVhfU0VNQVBIT1JFUwogCisv KiBEZWZpbmUgdG8gMSB0byBidWlsZCB3aXRoIE9BdXRoIDIuMCBzdXBwb3J0LiAoLS13aXRoLW9h dXRoKSAqLworI3VuZGVmIFVTRV9PQVVUSAorCiAvKiBEZWZpbmUgdG8gMSB0byBidWlsZCB3aXRo IE9wZW5TU0wgc3VwcG9ydC4gKC0td2l0aC1zc2w9b3BlbnNzbCkgKi8KICN1bmRlZiBVU0VfT1BF TlNTTAogCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9NYWtlZmlsZSBiL3NyYy9p bnRlcmZhY2VzL2xpYnBxL01ha2VmaWxlCmluZGV4IDdjYmRlYjU4OWIuLjNjZGYxOTI5NGIgMTAw NjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL01ha2VmaWxlCisrKyBiL3NyYy9pbnRlcmZh Y2VzL2xpYnBxL01ha2VmaWxlCkBAIC02Miw2ICs2MiwxMSBAQCBPQkpTICs9IFwKIAlmZS1zZWN1 cmUtZ3NzYXBpLm8KIGVuZGlmCiAKK2lmZXEgKCQod2l0aF9vYXV0aCkseWVzKQorT0JKUyArPSBc CisJZmUtYXV0aC1vYXV0aC5vCitlbmRpZgorCiBpZmVxICgkKFBPUlROQU1FKSwgY3lnd2luKQog b3ZlcnJpZGUgc2hsaWIgPSBjeWckKE5BTUUpJChETFNVRkZJWCkKIGVuZGlmCkBAIC04Myw3ICs4 OCw3IEBAIGVuZGlmCiAjIHRoYXQgYXJlIGJ1aWx0IGNvcnJlY3RseSBmb3IgdXNlIGluIGEgc2hs aWIuCiBTSExJQl9MSU5LX0lOVEVSTkFMID0gLWxwZ2NvbW1vbl9zaGxpYiAtbHBncG9ydF9zaGxp YgogaWZuZXEgKCQoUE9SVE5BTUUpLCB3aW4zMikKLVNITElCX0xJTksgKz0gJChmaWx0ZXIgLWxj cnlwdCAtbGRlcyAtbGNvbV9lcnIgLWxjcnlwdG8gLWxrNWNyeXB0byAtbGtyYjUgLWxnc3NhcGlf a3JiNSAtbGdzcyAtbGdzc2FwaSAtbHNzbCAtbHNvY2tldCAtbG5zbCAtbHJlc29sdiAtbGludGwg LWxtLCAkKExJQlMpKSAkKExEQVBfTElCU19GRSkgJChQVEhSRUFEX0xJQlMpCitTSExJQl9MSU5L ICs9ICQoZmlsdGVyIC1sY3J5cHQgLWxkZXMgLWxjb21fZXJyIC1sY3J5cHRvIC1sazVjcnlwdG8g LWxrcmI1IC1sZ3NzYXBpX2tyYjUgLWxnc3MgLWxnc3NhcGkgLWxzc2wgLWxpZGRhd2MgLWxzb2Nr ZXQgLWxuc2wgLWxyZXNvbHYgLWxpbnRsIC1sbSwgJChMSUJTKSkgJChMREFQX0xJQlNfRkUpICQo UFRIUkVBRF9MSUJTKQogZWxzZQogU0hMSUJfTElOSyArPSAkKGZpbHRlciAtbGNyeXB0IC1sZGVz IC1sY29tX2VyciAtbGNyeXB0byAtbGs1Y3J5cHRvIC1sa3JiNSAtbGdzc2FwaTMyIC1sc3NsIC1s c29ja2V0IC1sbnNsIC1scmVzb2x2IC1saW50bCAtbG0gJChQVEhSRUFEX0xJQlMpLCAkKExJQlMp KSAkKExEQVBfTElCU19GRSkKIGVuZGlmCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJw cS9mZS1hdXRoLW9hdXRoLmMgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uOTFkMmM2OWYxNgotLS0gL2Rl di9udWxsCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGguYwpAQCAtMCww ICsxLDc0NSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZmUtYXV0aC1vYXV0aC5jCisg KgkgICBUaGUgZnJvbnQtZW5kIChjbGllbnQpIGltcGxlbWVudGF0aW9uIG9mIE9BdXRoL09JREMg YXV0aGVudGljYXRpb24uCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjEs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmln aHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoK KyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1 dGguYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlIDxpZGRhd2MuaD4K KworI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCisKKyNpbmNsdWRlICJjb21tb24vYmFzZTY0Lmgi CisjaW5jbHVkZSAiY29tbW9uL2htYWMuaCIKKyNpbmNsdWRlICJjb21tb24vanNvbmFwaS5oIgor I2luY2x1ZGUgImNvbW1vbi9vYXV0aC1jb21tb24uaCIKKyNpbmNsdWRlICJmZS1hdXRoLmgiCisj aW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKKworLyogVGhlIGV4cG9ydGVkIE9BdXRoIGNhbGxiYWNr IG1lY2hhbmlzbS4gKi8KK3N0YXRpYyB2b2lkICpvYXV0aF9pbml0KFBHY29ubiAqY29ubiwgY29u c3QgY2hhciAqcGFzc3dvcmQsCisJCQkJCQljb25zdCBjaGFyICpzYXNsX21lY2hhbmlzbSk7Citz dGF0aWMgdm9pZCBvYXV0aF9leGNoYW5nZSh2b2lkICpvcGFxLCBib29sIGZpbmFsLAorCQkJCQkJ ICAgY2hhciAqaW5wdXQsIGludCBpbnB1dGxlbiwKKwkJCQkJCSAgIGNoYXIgKipvdXRwdXQsIGlu dCAqb3V0cHV0bGVuLAorCQkJCQkJICAgYm9vbCAqZG9uZSwgYm9vbCAqc3VjY2Vzcyk7CitzdGF0 aWMgYm9vbCBvYXV0aF9jaGFubmVsX2JvdW5kKHZvaWQgKm9wYXEpOworc3RhdGljIHZvaWQgb2F1 dGhfZnJlZSh2b2lkICpvcGFxKTsKKworY29uc3QgcGdfZmVfc2FzbF9tZWNoIHBnX29hdXRoX21l Y2ggPSB7CisJb2F1dGhfaW5pdCwKKwlvYXV0aF9leGNoYW5nZSwKKwlvYXV0aF9jaGFubmVsX2Jv dW5kLAorCW9hdXRoX2ZyZWUsCit9OworCit0eXBlZGVmIGVudW0KK3sKKwlGRV9PQVVUSF9JTklU LAorCUZFX09BVVRIX0JFQVJFUl9TRU5ULAorCUZFX09BVVRIX1NFUlZFUl9FUlJPUiwKK30gZmVf b2F1dGhfc3RhdGVfZW51bTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlmZV9vYXV0aF9zdGF0ZV9l bnVtIHN0YXRlOworCisJUEdjb25uCSAgICpjb25uOworfSBmZV9vYXV0aF9zdGF0ZTsKKworc3Rh dGljIHZvaWQgKgorb2F1dGhfaW5pdChQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnBhc3N3b3Jk LAorCQkgICBjb25zdCBjaGFyICpzYXNsX21lY2hhbmlzbSkKK3sKKwlmZV9vYXV0aF9zdGF0ZSAq c3RhdGU7CisKKwkvKgorCSAqIFdlIG9ubHkgc3VwcG9ydCBvbmUgU0FTTCBtZWNoYW5pc20gaGVy ZTsgYW55dGhpbmcgZWxzZSBpcyBwcm9ncmFtbWVyCisJICogZXJyb3IuCisJICovCisJQXNzZXJ0 KHNhc2xfbWVjaGFuaXNtICE9IE5VTEwpOworCUFzc2VydCghc3RyY21wKHNhc2xfbWVjaGFuaXNt LCBPQVVUSEJFQVJFUl9OQU1FKSk7CisKKwlzdGF0ZSA9IG1hbGxvYyhzaXplb2YoKnN0YXRlKSk7 CisJaWYgKCFzdGF0ZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzdGF0ZS0+c3RhdGUgPSBGRV9PQVVU SF9JTklUOworCXN0YXRlLT5jb25uID0gY29ubjsKKworCXJldHVybiBzdGF0ZTsKK30KKworc3Rh dGljIGNvbnN0IGNoYXIgKgoraWRkYXdjX2Vycm9yX3N0cmluZyhpbnQgZXJyY29kZSkKK3sKKwlz d2l0Y2ggKGVycmNvZGUpCisJeworCQljYXNlIElfT0s6CisJCQlyZXR1cm4gIklfT0siOworCisJ CWNhc2UgSV9FUlJPUjoKKwkJCXJldHVybiAiSV9FUlJPUiI7CisKKwkJY2FzZSBJX0VSUk9SX1BB UkFNOgorCQkJcmV0dXJuICJJX0VSUk9SX1BBUkFNIjsKKworCQljYXNlIElfRVJST1JfTUVNT1JZ OgorCQkJcmV0dXJuICJJX0VSUk9SX01FTU9SWSI7CisKKwkJY2FzZSBJX0VSUk9SX1VOQVVUSE9S SVpFRDoKKwkJCXJldHVybiAiSV9FUlJPUl9VTkFVVEhPUklaRUQiOworCisJCWNhc2UgSV9FUlJP Ul9TRVJWRVI6CisJCQlyZXR1cm4gIklfRVJST1JfU0VSVkVSIjsKKwl9CisKKwlyZXR1cm4gIjx1 bmtub3duPiI7Cit9CisKK3N0YXRpYyB2b2lkCitpZGRhd2NfZXJyb3IoUEdjb25uICpjb25uLCBp bnQgZXJyY29kZSwgY29uc3QgY2hhciAqbXNnKQoreworCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZj b25uLT5lcnJvck1lc3NhZ2UsIGxpYnBxX2dldHRleHQobXNnKSk7CisJYXBwZW5kUFFFeHBCdWZm ZXIoJmNvbm4tPmVycm9yTWVzc2FnZSwKKwkJCQkJICBsaWJwcV9nZXR0ZXh0KCIgKGlkZGF3YyBl cnJvciAlcylcbiIpLAorCQkJCQkgIGlkZGF3Y19lcnJvcl9zdHJpbmcoZXJyY29kZSkpOworfQor CitzdGF0aWMgdm9pZAoraWRkYXdjX3JlcXVlc3RfZXJyb3IoUEdjb25uICpjb25uLCBzdHJ1Y3Qg X2lfc2Vzc2lvbiAqaSwgaW50IGVyciwgY29uc3QgY2hhciAqbXNnKQoreworCWNvbnN0IGNoYXIg KmVycm9yX2NvZGU7CisJY29uc3QgY2hhciAqZGVzYzsKKworCWFwcGVuZFBRRXhwQnVmZmVyKCZj b25uLT5lcnJvck1lc3NhZ2UsICIlczogIiwgbGlicHFfZ2V0dGV4dChtc2cpKTsKKworCWVycm9y X2NvZGUgPSBpX2dldF9zdHJfcGFyYW1ldGVyKGksIElfT1BUX0VSUk9SKTsKKwlpZiAoIWVycm9y X2NvZGUpCisJeworCQkvKgorCQkgKiBUaGUgc2VydmVyIGRpZG4ndCBnaXZlIHVzIGFueSB1c2Vm dWwgaW5mb3JtYXRpb24sIHNvIGp1c3QgcHJpbnQgdGhlCisJCSAqIGVycm9yIGNvZGUuCisJCSAq LworCQlhcHBlbmRQUUV4cEJ1ZmZlcigmY29ubi0+ZXJyb3JNZXNzYWdlLAorCQkJCQkJICBsaWJw cV9nZXR0ZXh0KCIoaWRkYXdjIGVycm9yICVzKVxuIiksCisJCQkJCQkgIGlkZGF3Y19lcnJvcl9z dHJpbmcoZXJyKSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBJZiB0aGUgc2VydmVyIGdhdmUgYSBz dHJpbmcgZGVzY3JpcHRpb24sIHByaW50IHRoYXQgdG9vLiAqLworCWRlc2MgPSBpX2dldF9zdHJf cGFyYW1ldGVyKGksIElfT1BUX0VSUk9SX0RFU0NSSVBUSU9OKTsKKwlpZiAoZGVzYykKKwkJYXBw ZW5kUFFFeHBCdWZmZXIoJmNvbm4tPmVycm9yTWVzc2FnZSwgIiVzICIsIGRlc2MpOworCisJYXBw ZW5kUFFFeHBCdWZmZXIoJmNvbm4tPmVycm9yTWVzc2FnZSwgIiglcylcbiIsIGVycm9yX2NvZGUp OworfQorCitzdGF0aWMgY2hhciAqCitnZXRfYXV0aF90b2tlbihQR2Nvbm4gKmNvbm4pCit7CisJ UFFFeHBCdWZmZXIJdG9rZW5fYnVmID0gTlVMTDsKKwlzdHJ1Y3QgX2lfc2Vzc2lvbiBzZXNzaW9u OworCWludAkJCWVycjsKKwlpbnQJCQlhdXRoX21ldGhvZDsKKwlib29sCQl1c2VyX3Byb21wdGVk ID0gZmFsc2U7CisJY29uc3QgY2hhciAqdmVyaWZpY2F0aW9uX3VyaTsKKwljb25zdCBjaGFyICp1 c2VyX2NvZGU7CisJY29uc3QgY2hhciAqYWNjZXNzX3Rva2VuOworCWNvbnN0IGNoYXIgKnRva2Vu X3R5cGU7CisJY2hhcgkgICAqdG9rZW4gPSBOVUxMOworCisJaWYgKCFjb25uLT5vYXV0aF9kaXNj b3ZlcnlfdXJpKQorCQlyZXR1cm4gc3RyZHVwKCIiKTsgLyogYXNrIHRoZSBzZXJ2ZXIgZm9yIG9u ZSAqLworCisJaV9pbml0X3Nlc3Npb24oJnNlc3Npb24pOworCisJaWYgKCFjb25uLT5vYXV0aF9j bGllbnRfaWQpCisJeworCQkvKiBXZSBjYW4ndCB0YWxrIHRvIGEgc2VydmVyIHdpdGhvdXQgYSBj bGllbnQgaWRlbnRpZmllci4gKi8KKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVycm9y TWVzc2FnZSwKKwkJCQkJCQkgbGlicHFfZ2V0dGV4dCgibm8gb2F1dGhfY2xpZW50X2lkIGlzIHNl dCBmb3IgdGhlIGNvbm5lY3Rpb24iKSk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwl0b2tlbl9i dWYgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCisJaWYgKCF0b2tlbl9idWYpCisJCWdvdG8gY2xl YW51cDsKKworCWVyciA9IGlfc2V0X3N0cl9wYXJhbWV0ZXIoJnNlc3Npb24sIElfT1BUX09QRU5J RF9DT05GSUdfRU5EUE9JTlQsIGNvbm4tPm9hdXRoX2Rpc2NvdmVyeV91cmkpOworCWlmIChlcnIp CisJeworCQlpZGRhd2NfZXJyb3IoY29ubiwgZXJyLCAiZmFpbGVkIHRvIHNldCBPcGVuSUQgY29u ZmlnIGVuZHBvaW50Iik7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwllcnIgPSBpX2dldF9vcGVu aWRfY29uZmlnKCZzZXNzaW9uKTsKKwlpZiAoZXJyKQorCXsKKwkJaWRkYXdjX2Vycm9yKGNvbm4s IGVyciwgImZhaWxlZCB0byBmZXRjaCBPcGVuSUQgZGlzY292ZXJ5IGRvY3VtZW50Iik7CisJCWdv dG8gY2xlYW51cDsKKwl9CisKKwlpZiAoIWlfZ2V0X3N0cl9wYXJhbWV0ZXIoJnNlc3Npb24sIElf T1BUX1RPS0VOX0VORFBPSU5UKSkKKwl7CisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjb25uLT5l cnJvck1lc3NhZ2UsCisJCQkJCQkJIGxpYnBxX2dldHRleHQoImlzc3VlciBoYXMgbm8gdG9rZW4g ZW5kcG9pbnQiKSk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlpZiAoIWlfZ2V0X3N0cl9wYXJh bWV0ZXIoJnNlc3Npb24sIElfT1BUX0RFVklDRV9BVVRIT1JJWkFUSU9OX0VORFBPSU5UKSkKKwl7 CisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjb25uLT5lcnJvck1lc3NhZ2UsCisJCQkJCQkJIGxp YnBxX2dldHRleHQoImlzc3VlciBkb2VzIG5vdCBzdXBwb3J0IGRldmljZSBhdXRob3JpemF0aW9u IikpOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJZXJyID0gaV9zZXRfcmVzcG9uc2VfdHlwZSgm c2Vzc2lvbiwgSV9SRVNQT05TRV9UWVBFX0RFVklDRV9DT0RFKTsKKwlpZiAoZXJyKQorCXsKKwkJ aWRkYXdjX2Vycm9yKGNvbm4sIGVyciwgImZhaWxlZCB0byBzZXQgZGV2aWNlIGNvZGUgcmVzcG9u c2UgdHlwZSIpOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJYXV0aF9tZXRob2QgPSBJX1RPS0VO X0FVVEhfTUVUSE9EX05PTkU7CisJaWYgKGNvbm4tPm9hdXRoX2NsaWVudF9zZWNyZXQgJiYgKmNv bm4tPm9hdXRoX2NsaWVudF9zZWNyZXQpCisJCWF1dGhfbWV0aG9kID0gSV9UT0tFTl9BVVRIX01F VEhPRF9TRUNSRVRfQkFTSUM7CisKKwllcnIgPSBpX3NldF9wYXJhbWV0ZXJfbGlzdCgmc2Vzc2lv biwKKwkJSV9PUFRfQ0xJRU5UX0lELCBjb25uLT5vYXV0aF9jbGllbnRfaWQsCisJCUlfT1BUX0NM SUVOVF9TRUNSRVQsIGNvbm4tPm9hdXRoX2NsaWVudF9zZWNyZXQsCisJCUlfT1BUX1RPS0VOX01F VEhPRCwgYXV0aF9tZXRob2QsCisJCUlfT1BUX1NDT1BFLCBjb25uLT5vYXV0aF9zY29wZSwKKwkJ SV9PUFRfTk9ORQorCSk7CisJaWYgKGVycikKKwl7CisJCWlkZGF3Y19lcnJvcihjb25uLCBlcnIs ICJmYWlsZWQgdG8gc2V0IGNsaWVudCBpZGVudGlmaWVyIik7CisJCWdvdG8gY2xlYW51cDsKKwl9 CisKKwllcnIgPSBpX3J1bl9kZXZpY2VfYXV0aF9yZXF1ZXN0KCZzZXNzaW9uKTsKKwlpZiAoZXJy KQorCXsKKwkJaWRkYXdjX3JlcXVlc3RfZXJyb3IoY29ubiwgJnNlc3Npb24sIGVyciwKKwkJCQkJ CQkiZmFpbGVkIHRvIG9idGFpbiBkZXZpY2UgYXV0aG9yaXphdGlvbiIpOworCQlnb3RvIGNsZWFu dXA7CisJfQorCisJdmVyaWZpY2F0aW9uX3VyaSA9IGlfZ2V0X3N0cl9wYXJhbWV0ZXIoJnNlc3Np b24sIElfT1BUX0RFVklDRV9BVVRIX1ZFUklGSUNBVElPTl9VUkkpOworCWlmICghdmVyaWZpY2F0 aW9uX3VyaSkKKwl7CisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjb25uLT5lcnJvck1lc3NhZ2Us CisJCQkJCQkJIGxpYnBxX2dldHRleHQoImlzc3VlciBkaWQgbm90IHByb3ZpZGUgYSB2ZXJpZmlj YXRpb24gVVJJIikpOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJdXNlcl9jb2RlID0gaV9nZXRf c3RyX3BhcmFtZXRlcigmc2Vzc2lvbiwgSV9PUFRfREVWSUNFX0FVVEhfVVNFUl9DT0RFKTsKKwlp ZiAoIXVzZXJfY29kZSkKKwl7CisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjb25uLT5lcnJvck1l c3NhZ2UsCisJCQkJCQkJIGxpYnBxX2dldHRleHQoImlzc3VlciBkaWQgbm90IHByb3ZpZGUgYSB1 c2VyIGNvZGUiKSk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkvKgorCSAqIFBvbGwgdGhlIHRv a2VuIGVuZHBvaW50IHVudGlsIGVpdGhlciB0aGUgdXNlciBsb2dzIGluIGFuZCBhdXRob3JpemVz IHRoZQorCSAqIHVzZSBvZiBhIHRva2VuLCBvciBhIGhhcmQgZmFpbHVyZSBvY2N1cnMuIFdlIHBl cmZvcm0gb25lIHBpbmcgX2JlZm9yZV8KKwkgKiBwcm9tcHRpbmcgdGhlIHVzZXIsIHNvIHRoYXQg d2UgZG9uJ3QgbWFrZSB0aGVtIGRvIHRoZSB3b3JrIG9mIGxvZ2dpbmcgaW4KKwkgKiBvbmx5IHRv IGZpbmQgdGhhdCB0aGUgdG9rZW4gZW5kcG9pbnQgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZS4K KwkgKi8KKwllcnIgPSBpX3J1bl90b2tlbl9yZXF1ZXN0KCZzZXNzaW9uKTsKKwl3aGlsZSAoZXJy KQorCXsKKwkJY29uc3QgY2hhciAqZXJyb3JfY29kZTsKKwkJdWludAkJaW50ZXJ2YWw7CisKKwkJ ZXJyb3JfY29kZSA9IGlfZ2V0X3N0cl9wYXJhbWV0ZXIoJnNlc3Npb24sIElfT1BUX0VSUk9SKTsK KworCQkvKgorCQkgKiBhdXRob3JpemF0aW9uX3BlbmRpbmcgYW5kIHNsb3dfZG93biBhcmUgdGhl IG9ubHkgYWNjZXB0YWJsZSBlcnJvcnM7CisJCSAqIGFueXRoaW5nIGVsc2UgYW5kIHdlIGJhaWwu CisJCSAqLworCQlpZiAoIWVycm9yX2NvZGUgfHwgKHN0cmNtcChlcnJvcl9jb2RlLCAiYXV0aG9y aXphdGlvbl9wZW5kaW5nIikKKwkJCQkJCQkmJiBzdHJjbXAoZXJyb3JfY29kZSwgInNsb3dfZG93 biIpKSkKKwkJeworCQkJaWRkYXdjX3JlcXVlc3RfZXJyb3IoY29ubiwgJnNlc3Npb24sIGVyciwK KwkJCQkJCQkJIk9BdXRoIHRva2VuIHJldHJpZXZhbCBmYWlsZWQiKTsKKwkJCWdvdG8gY2xlYW51 cDsKKwkJfQorCisJCWlmICghdXNlcl9wcm9tcHRlZCkKKwkJeworCQkJLyoKKwkJCSAqIE5vdyB0 aGF0IHdlIGtub3cgdGhlIHRva2VuIGVuZHBvaW50IGlzbid0IGJyb2tlbiwgZ2l2ZSB0aGUgdXNl cgorCQkJICogdGhlIGxvZ2luIGluc3RydWN0aW9ucy4KKwkJCSAqLworCQkJcHFJbnRlcm5hbE5v dGljZSgmY29ubi0+bm90aWNlSG9va3MsCisJCQkJCQkJICJWaXNpdCAlcyBhbmQgZW50ZXIgdGhl IGNvZGU6ICVzIiwKKwkJCQkJCQkgdmVyaWZpY2F0aW9uX3VyaSwgdXNlcl9jb2RlKTsKKworCQkJ dXNlcl9wcm9tcHRlZCA9IHRydWU7CisJCX0KKworCQkvKgorCQkgKiBXZSBhcmUgcmVxdWlyZWQg dG8gd2FpdCBiZXR3ZWVuIHBvbGxzOyB0aGUgc2VydmVyIHRlbGxzIHVzIGhvdyBsb25nLgorCQkg KiBUT0RPOiBpZiBpbnRlcnZhbCdzIG5vdCBzZXQsIHdlIG5lZWQgdG8gZGVmYXVsdCB0byBmaXZl IHNlY29uZHMKKwkJICogVE9ETzogc2FuaXR5IGNoZWNrIHRoZSBpbnRlcnZhbAorCQkgKi8KKwkJ aW50ZXJ2YWwgPSBpX2dldF9pbnRfcGFyYW1ldGVyKCZzZXNzaW9uLCBJX09QVF9ERVZJQ0VfQVVU SF9JTlRFUlZBTCk7CisKKwkJLyoKKwkJICogQSBzbG93X2Rvd24gZXJyb3IgcmVxdWlyZXMgdXMg dG8gcGVybWFuZW50bHkgaW5jcmVhc2Ugb3VyIHJldHJ5CisJCSAqIGludGVydmFsIGJ5IGZpdmUg c2Vjb25kcy4gUkZDIDg2MjgsIFNlYy4gMy41LgorCQkgKi8KKwkJaWYgKCFzdHJjbXAoZXJyb3Jf Y29kZSwgInNsb3dfZG93biIpKQorCQl7CisJCQlpbnRlcnZhbCArPSA1OworCQkJaV9zZXRfaW50 X3BhcmFtZXRlcigmc2Vzc2lvbiwgSV9PUFRfREVWSUNFX0FVVEhfSU5URVJWQUwsIGludGVydmFs KTsKKwkJfQorCisJCXNsZWVwKGludGVydmFsKTsKKworCQkvKgorCQkgKiBYWFggUmVzZXQgdGhl IGVycm9yIGNvZGUgYmVmb3JlIGV2ZXJ5IGNhbGwsIGJlY2F1c2UgaWRkYXdjIHdvbid0IGRvCisJ CSAqIHRoYXQgZm9yIHVzLiBUaGlzIG1hdHRlcnMgaWYgdGhlIHNlcnZlciBmaXJzdCBzZW5kcyBh ICJwZW5kaW5nIiBlcnJvcgorCQkgKiBjb2RlLCB0aGVuIGxhdGVyIGhhcmQtZmFpbHMgd2l0aG91 dCBzZW5kaW5nIGFuIGVycm9yIGNvZGUgdG8KKwkJICogb3ZlcndyaXRlIHRoZSBmaXJzdCBvbmUu CisJCSAqCisJCSAqIFRoYXQgd2UgaGF2ZSB0byBkbyB0aGlzIGF0IGFsbCBzZWVtcyBsaWtlIGEg YnVnIGluIGlkZGF3Yy4KKwkJICovCisJCWlfc2V0X3N0cl9wYXJhbWV0ZXIoJnNlc3Npb24sIElf T1BUX0VSUk9SLCBOVUxMKTsKKworCQllcnIgPSBpX3J1bl90b2tlbl9yZXF1ZXN0KCZzZXNzaW9u KTsKKwl9CisKKwlhY2Nlc3NfdG9rZW4gPSBpX2dldF9zdHJfcGFyYW1ldGVyKCZzZXNzaW9uLCBJ X09QVF9BQ0NFU1NfVE9LRU4pOworCXRva2VuX3R5cGUgPSBpX2dldF9zdHJfcGFyYW1ldGVyKCZz ZXNzaW9uLCBJX09QVF9UT0tFTl9UWVBFKTsKKworCWlmICghYWNjZXNzX3Rva2VuIHx8ICF0b2tl bl90eXBlIHx8IHN0cmNhc2VjbXAodG9rZW5fdHlwZSwgIkJlYXJlciIpKQorCXsKKwkJYXBwZW5k UFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVycm9yTWVzc2FnZSwKKwkJCQkJCQkgbGlicHFfZ2V0dGV4 dCgiaXNzdWVyIGRpZCBub3QgcHJvdmlkZSBhIGJlYXJlciB0b2tlbiIpKTsKKwkJZ290byBjbGVh bnVwOworCX0KKworCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHRva2VuX2J1ZiwgIkJlYXJlciAiKTsK KwlhcHBlbmRQUUV4cEJ1ZmZlclN0cih0b2tlbl9idWYsIGFjY2Vzc190b2tlbik7CisKKwlpZiAo UFFFeHBCdWZmZXJCcm9rZW4odG9rZW5fYnVmKSkKKwkJZ290byBjbGVhbnVwOworCisJdG9rZW4g PSBzdHJkdXAodG9rZW5fYnVmLT5kYXRhKTsKKworY2xlYW51cDoKKwlpZiAodG9rZW5fYnVmKQor CQlkZXN0cm95UFFFeHBCdWZmZXIodG9rZW5fYnVmKTsKKwlpX2NsZWFuX3Nlc3Npb24oJnNlc3Np b24pOworCisJcmV0dXJuIHRva2VuOworfQorCisjZGVmaW5lIGt2c2VwICJceDAxIgorCitzdGF0 aWMgY2hhciAqCitjbGllbnRfaW5pdGlhbF9yZXNwb25zZShQR2Nvbm4gKmNvbm4pCit7CisJc3Rh dGljIGNvbnN0IGNoYXIgKiBjb25zdCByZXNwX2Zvcm1hdCA9ICJuLCwiIGt2c2VwICJhdXRoPSVz IiBrdnNlcCBrdnNlcDsKKworCVBRRXhwQnVmZmVyCXRva2VuX2J1ZjsKKwlQUUV4cEJ1ZmZlcglk aXNjb3ZlcnlfYnVmID0gTlVMTDsKKwljaGFyCSAgICp0b2tlbiA9IE5VTEw7CisJY2hhcgkgICAq cmVzcG9uc2UgPSBOVUxMOworCisJdG9rZW5fYnVmID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwlp ZiAoIXRva2VuX2J1ZikKKwkJZ290byBjbGVhbnVwOworCisJLyoKKwkgKiBJZiB3ZSBkb24ndCB5 ZXQgaGF2ZSBhIGRpc2NvdmVyeSBVUkksIGJ1dCB0aGUgdXNlciBnYXZlIHVzIGFuIGV4cGxpY2l0 CisJICogaXNzdWVyLCB1c2UgdGhlIC53ZWxsLWtub3duIGRpc2NvdmVyeSBVUkkgZm9yIHRoYXQg aXNzdWVyLgorCSAqLworCWlmICghY29ubi0+b2F1dGhfZGlzY292ZXJ5X3VyaSAmJiBjb25uLT5v YXV0aF9pc3N1ZXIpCisJeworCQlkaXNjb3ZlcnlfYnVmID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsK KwkJaWYgKCFkaXNjb3ZlcnlfYnVmKQorCQkJZ290byBjbGVhbnVwOworCisJCWFwcGVuZFBRRXhw QnVmZmVyU3RyKGRpc2NvdmVyeV9idWYsIGNvbm4tPm9hdXRoX2lzc3Vlcik7CisJCWFwcGVuZFBR RXhwQnVmZmVyU3RyKGRpc2NvdmVyeV9idWYsICIvLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3Vy YXRpb24iKTsKKworCQlpZiAoUFFFeHBCdWZmZXJCcm9rZW4oZGlzY292ZXJ5X2J1ZikpCisJCQln b3RvIGNsZWFudXA7CisKKwkJY29ubi0+b2F1dGhfZGlzY292ZXJ5X3VyaSA9IHN0cmR1cChkaXNj b3ZlcnlfYnVmLT5kYXRhKTsKKwl9CisKKwl0b2tlbiA9IGdldF9hdXRoX3Rva2VuKGNvbm4pOwor CWlmICghdG9rZW4pCisJCWdvdG8gY2xlYW51cDsKKworCWFwcGVuZFBRRXhwQnVmZmVyKHRva2Vu X2J1ZiwgcmVzcF9mb3JtYXQsIHRva2VuKTsKKwlpZiAoUFFFeHBCdWZmZXJCcm9rZW4odG9rZW5f YnVmKSkKKwkJZ290byBjbGVhbnVwOworCisJcmVzcG9uc2UgPSBzdHJkdXAodG9rZW5fYnVmLT5k YXRhKTsKKworY2xlYW51cDoKKwlpZiAodG9rZW4pCisJCWZyZWUodG9rZW4pOworCWlmIChkaXNj b3ZlcnlfYnVmKQorCQlkZXN0cm95UFFFeHBCdWZmZXIoZGlzY292ZXJ5X2J1Zik7CisJaWYgKHRv a2VuX2J1ZikKKwkJZGVzdHJveVBRRXhwQnVmZmVyKHRva2VuX2J1Zik7CisKKwlyZXR1cm4gcmVz cG9uc2U7Cit9CisKKyNkZWZpbmUgRVJST1JfU1RBVFVTX0ZJRUxEICJzdGF0dXMiCisjZGVmaW5l IEVSUk9SX1NDT1BFX0ZJRUxEICJzY29wZSIKKyNkZWZpbmUgRVJST1JfT1BFTklEX0NPTkZJR1VS QVRJT05fRklFTEQgIm9wZW5pZC1jb25maWd1cmF0aW9uIgorCitzdHJ1Y3QganNvbl9jdHgKK3sK KwljaGFyCQkgICAqZXJybXNnOyAvKiBhbnkgbm9uLU5VTEwgdmFsdWUgc3RvcHMgYWxsIHByb2Nl c3NpbmcgKi8KKwlQUUV4cEJ1ZmZlckRhdGEgZXJyYnVmOyAvKiBiYWNraW5nIG1lbW9yeSBmb3Ig ZXJybXNnICovCisJaW50CQkJCW5lc3RlZDsgLyogbmVzdGluZyBsZXZlbCAoemVybyBpcyB0aGUg dG9wKSAqLworCisJY29uc3QgY2hhcgkgICAqdGFyZ2V0X2ZpZWxkX25hbWU7IC8qIHBvaW50cyB0 byBhIHN0YXRpYyBhbGxvY2F0aW9uICovCisJY2hhcgkJICAqKnRhcmdldF9maWVsZDsgICAgICAv KiBzZWUgYmVsb3cgKi8KKworCS8qIHRhcmdldF9maWVsZCwgaWYgc2V0LCBwb2ludHMgdG8gb25l IG9mIHRoZSBmb2xsb3dpbmc6ICovCisJY2hhcgkJICAgKnN0YXR1czsKKwljaGFyCQkgICAqc2Nv cGU7CisJY2hhcgkJICAgKmRpc2NvdmVyeV91cmk7Cit9OworCisjZGVmaW5lIG9hdXRoX2pzb25f aGFzX2Vycm9yKGN0eCkgXAorCShQUUV4cEJ1ZmZlckRhdGFCcm9rZW4oKGN0eCktPmVycmJ1Zikg fHwgKGN0eCktPmVycm1zZykKKworI2RlZmluZSBvYXV0aF9qc29uX3NldF9lcnJvcihjdHgsIC4u LikgXAorCWRvIHsgXAorCQlhcHBlbmRQUUV4cEJ1ZmZlcigmKGN0eCktPmVycmJ1ZiwgX19WQV9B UkdTX18pOyBcCisJCShjdHgpLT5lcnJtc2cgPSAoY3R4KS0+ZXJyYnVmLmRhdGE7IFwKKwl9IHdo aWxlICgwKQorCitzdGF0aWMgdm9pZAorb2F1dGhfanNvbl9vYmplY3Rfc3RhcnQodm9pZCAqc3Rh dGUpCit7CisJc3RydWN0IGpzb25fY3R4CSAgICpjdHggPSBzdGF0ZTsKKworCWlmIChvYXV0aF9q c29uX2hhc19lcnJvcihjdHgpKQorCQlyZXR1cm47IC8qIHNob3J0LWNpcmN1aXQgKi8KKworCWlm IChjdHgtPnRhcmdldF9maWVsZCkKKwl7CisJCUFzc2VydChjdHgtPm5lc3RlZCA9PSAxKTsKKwor CQlvYXV0aF9qc29uX3NldF9lcnJvcihjdHgsCisJCQkJCQkJIGxpYnBxX2dldHRleHQoImZpZWxk IFwiJXNcIiBtdXN0IGJlIGEgc3RyaW5nIiksCisJCQkJCQkJIGN0eC0+dGFyZ2V0X2ZpZWxkX25h bWUpOworCX0KKworCSsrY3R4LT5uZXN0ZWQ7Cit9CisKK3N0YXRpYyB2b2lkCitvYXV0aF9qc29u X29iamVjdF9lbmQodm9pZCAqc3RhdGUpCit7CisJc3RydWN0IGpzb25fY3R4CSAgICpjdHggPSBz dGF0ZTsKKworCWlmIChvYXV0aF9qc29uX2hhc19lcnJvcihjdHgpKQorCQlyZXR1cm47IC8qIHNo b3J0LWNpcmN1aXQgKi8KKworCS0tY3R4LT5uZXN0ZWQ7Cit9CisKK3N0YXRpYyB2b2lkCitvYXV0 aF9qc29uX29iamVjdF9maWVsZF9zdGFydCh2b2lkICpzdGF0ZSwgY2hhciAqbmFtZSwgYm9vbCBp c251bGwpCit7CisJc3RydWN0IGpzb25fY3R4CSAgICpjdHggPSBzdGF0ZTsKKworCWlmIChvYXV0 aF9qc29uX2hhc19lcnJvcihjdHgpKQorCXsKKwkJLyogc2hvcnQtY2lyY3VpdCAqLworCQlmcmVl KG5hbWUpOworCQlyZXR1cm47CisJfQorCisJaWYgKGN0eC0+bmVzdGVkID09IDEpCisJeworCQlp ZiAoIXN0cmNtcChuYW1lLCBFUlJPUl9TVEFUVVNfRklFTEQpKQorCQl7CisJCQljdHgtPnRhcmdl dF9maWVsZF9uYW1lID0gRVJST1JfU1RBVFVTX0ZJRUxEOworCQkJY3R4LT50YXJnZXRfZmllbGQg PSAmY3R4LT5zdGF0dXM7CisJCX0KKwkJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCBFUlJPUl9TQ09Q RV9GSUVMRCkpCisJCXsKKwkJCWN0eC0+dGFyZ2V0X2ZpZWxkX25hbWUgPSBFUlJPUl9TQ09QRV9G SUVMRDsKKwkJCWN0eC0+dGFyZ2V0X2ZpZWxkID0gJmN0eC0+c2NvcGU7CisJCX0KKwkJZWxzZSBp ZiAoIXN0cmNtcChuYW1lLCBFUlJPUl9PUEVOSURfQ09ORklHVVJBVElPTl9GSUVMRCkpCisJCXsK KwkJCWN0eC0+dGFyZ2V0X2ZpZWxkX25hbWUgPSBFUlJPUl9PUEVOSURfQ09ORklHVVJBVElPTl9G SUVMRDsKKwkJCWN0eC0+dGFyZ2V0X2ZpZWxkID0gJmN0eC0+ZGlzY292ZXJ5X3VyaTsKKwkJfQor CX0KKworCWZyZWUobmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkCitvYXV0aF9qc29uX2FycmF5X3N0 YXJ0KHZvaWQgKnN0YXRlKQoreworCXN0cnVjdCBqc29uX2N0eAkgICAqY3R4ID0gc3RhdGU7CisK KwlpZiAob2F1dGhfanNvbl9oYXNfZXJyb3IoY3R4KSkKKwkJcmV0dXJuOyAvKiBzaG9ydC1jaXJj dWl0ICovCisKKwlpZiAoIWN0eC0+bmVzdGVkKQorCXsKKwkJY3R4LT5lcnJtc2cgPSBsaWJwcV9n ZXR0ZXh0KCJ0b3AtbGV2ZWwgZWxlbWVudCBtdXN0IGJlIGFuIG9iamVjdCIpOworCX0KKwllbHNl IGlmIChjdHgtPnRhcmdldF9maWVsZCkKKwl7CisJCUFzc2VydChjdHgtPm5lc3RlZCA9PSAxKTsK KworCQlvYXV0aF9qc29uX3NldF9lcnJvcihjdHgsCisJCQkJCQkJIGxpYnBxX2dldHRleHQoImZp ZWxkIFwiJXNcIiBtdXN0IGJlIGEgc3RyaW5nIiksCisJCQkJCQkJIGN0eC0+dGFyZ2V0X2ZpZWxk X25hbWUpOworCX0KK30KKworc3RhdGljIHZvaWQKK29hdXRoX2pzb25fc2NhbGFyKHZvaWQgKnN0 YXRlLCBjaGFyICp0b2tlbiwgSnNvblRva2VuVHlwZSB0eXBlKQoreworCXN0cnVjdCBqc29uX2N0 eAkgICAqY3R4ID0gc3RhdGU7CisKKwlpZiAob2F1dGhfanNvbl9oYXNfZXJyb3IoY3R4KSkKKwl7 CisJCS8qIHNob3J0LWNpcmN1aXQgKi8KKwkJZnJlZSh0b2tlbik7CisJCXJldHVybjsKKwl9CisK KwlpZiAoIWN0eC0+bmVzdGVkKQorCXsKKwkJY3R4LT5lcnJtc2cgPSBsaWJwcV9nZXR0ZXh0KCJ0 b3AtbGV2ZWwgZWxlbWVudCBtdXN0IGJlIGFuIG9iamVjdCIpOworCX0KKwllbHNlIGlmIChjdHgt PnRhcmdldF9maWVsZCkKKwl7CisJCUFzc2VydChjdHgtPm5lc3RlZCA9PSAxKTsKKworCQlpZiAo dHlwZSA9PSBKU09OX1RPS0VOX1NUUklORykKKwkJeworCQkJKmN0eC0+dGFyZ2V0X2ZpZWxkID0g dG9rZW47CisKKwkJCWN0eC0+dGFyZ2V0X2ZpZWxkID0gTlVMTDsKKwkJCWN0eC0+dGFyZ2V0X2Zp ZWxkX25hbWUgPSBOVUxMOworCisJCQlyZXR1cm47IC8qIGRvbid0IGZyZWUgdGhlIHRva2VuIHdl J3JlIHVzaW5nICovCisJCX0KKworCQlvYXV0aF9qc29uX3NldF9lcnJvcihjdHgsCisJCQkJCQkJ IGxpYnBxX2dldHRleHQoImZpZWxkIFwiJXNcIiBtdXN0IGJlIGEgc3RyaW5nIiksCisJCQkJCQkJ IGN0eC0+dGFyZ2V0X2ZpZWxkX25hbWUpOworCX0KKworCWZyZWUodG9rZW4pOworfQorCitzdGF0 aWMgYm9vbAoraGFuZGxlX29hdXRoX3Nhc2xfZXJyb3IoUEdjb25uICpjb25uLCBjaGFyICptc2cs IGludCBtc2dsZW4pCit7CisJSnNvbkxleENvbnRleHQJCWxleCA9IHswfTsKKwlKc29uU2VtQWN0 aW9uCQlzZW0gPSB7MH07CisJSnNvblBhcnNlRXJyb3JUeXBlCWVycjsKKwlzdHJ1Y3QganNvbl9j dHgJCWN0eCA9IHswfTsKKwljaGFyCQkJICAgKmVycm1zZyA9IE5VTEw7CisKKwkvKiBTYW5pdHkg Y2hlY2suICovCisJaWYgKHN0cmxlbihtc2cpICE9IG1zZ2xlbikKKwl7CisJCWFwcGVuZFBRRXhw QnVmZmVyU3RyKCZjb25uLT5lcnJvck1lc3NhZ2UsCisJCQkJCQkJIGxpYnBxX2dldHRleHQoInNl cnZlcidzIGVycm9yIG1lc3NhZ2UgY29udGFpbmVkIGFuIGVtYmVkZGVkIE5VTEwiKSk7CisJCXJl dHVybiBmYWxzZTsKKwl9CisKKwlpbml0SnNvbkxleENvbnRleHRDc3RyaW5nTGVuKCZsZXgsIG1z ZywgbXNnbGVuLCBQR19VVEY4LCB0cnVlKTsKKworCWluaXRQUUV4cEJ1ZmZlcigmY3R4LmVycmJ1 Zik7CisJc2VtLnNlbXN0YXRlID0gJmN0eDsKKworCXNlbS5vYmplY3Rfc3RhcnQgPSBvYXV0aF9q c29uX29iamVjdF9zdGFydDsKKwlzZW0ub2JqZWN0X2VuZCA9IG9hdXRoX2pzb25fb2JqZWN0X2Vu ZDsKKwlzZW0ub2JqZWN0X2ZpZWxkX3N0YXJ0ID0gb2F1dGhfanNvbl9vYmplY3RfZmllbGRfc3Rh cnQ7CisJc2VtLmFycmF5X3N0YXJ0ID0gb2F1dGhfanNvbl9hcnJheV9zdGFydDsKKwlzZW0uc2Nh bGFyID0gb2F1dGhfanNvbl9zY2FsYXI7CisKKwllcnIgPSBwZ19wYXJzZV9qc29uKCZsZXgsICZz ZW0pOworCisJaWYgKGVyciAhPSBKU09OX1NVQ0NFU1MpCisJeworCQllcnJtc2cgPSBqc29uX2Vy cmRldGFpbChlcnIsICZsZXgpOworCX0KKwllbHNlIGlmIChQUUV4cEJ1ZmZlckRhdGFCcm9rZW4o Y3R4LmVycmJ1ZikpCisJeworCQllcnJtc2cgPSBsaWJwcV9nZXR0ZXh0KCJvdXQgb2YgbWVtb3J5 Iik7CisJfQorCWVsc2UgaWYgKGN0eC5lcnJtc2cpCisJeworCQllcnJtc2cgPSBjdHguZXJybXNn OworCX0KKworCWlmIChlcnJtc2cpCisJCWFwcGVuZFBRRXhwQnVmZmVyKCZjb25uLT5lcnJvck1l c3NhZ2UsCisJCQkJCQkgIGxpYnBxX2dldHRleHQoImZhaWxlZCB0byBwYXJzZSBzZXJ2ZXIncyBl cnJvciByZXNwb25zZTogJXMiKSwKKwkJCQkJCSAgZXJybXNnKTsKKworCS8qIERvbid0IG5lZWQg dGhlIGVycm9yIGJ1ZmZlciBvciB0aGUgSlNPTiBsZXhlciBhbnltb3JlLiAqLworCXRlcm1QUUV4 cEJ1ZmZlcigmY3R4LmVycmJ1Zik7CisJdGVybUpzb25MZXhDb250ZXh0KCZsZXgpOworCisJaWYg KGVycm1zZykKKwkJcmV0dXJuIGZhbHNlOworCisJLyogVE9ETzogd2hhdCBpZiB0aGVzZSBvdmVy cmlkZSB3aGF0IHRoZSB1c2VyIGFscmVhZHkgc3BlY2lmaWVkPyAqLworCWlmIChjdHguZGlzY292 ZXJ5X3VyaSkKKwl7CisJCWlmIChjb25uLT5vYXV0aF9kaXNjb3ZlcnlfdXJpKQorCQkJZnJlZShj b25uLT5vYXV0aF9kaXNjb3ZlcnlfdXJpKTsKKworCQljb25uLT5vYXV0aF9kaXNjb3ZlcnlfdXJp ID0gY3R4LmRpc2NvdmVyeV91cmk7CisJfQorCisJaWYgKGN0eC5zY29wZSkKKwl7CisJCWlmIChj b25uLT5vYXV0aF9zY29wZSkKKwkJCWZyZWUoY29ubi0+b2F1dGhfc2NvcGUpOworCisJCWNvbm4t Pm9hdXRoX3Njb3BlID0gY3R4LnNjb3BlOworCX0KKwkvKiBUT0RPOiBtaXNzaW5nIGVycm9yIHNj b3BlIHNob3VsZCBjbGVhciBhbnkgZXhpc3RpbmcgY29ubmVjdGlvbiBzY29wZSAqLworCisJaWYg KCFjdHguc3RhdHVzKQorCXsKKwkJYXBwZW5kUFFFeHBCdWZmZXIoJmNvbm4tPmVycm9yTWVzc2Fn ZSwKKwkJCQkJCSAgbGlicHFfZ2V0dGV4dCgic2VydmVyIHNlbnQgZXJyb3IgcmVzcG9uc2Ugd2l0 aG91dCBhIHN0YXR1cyIpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmICghc3RyY21wKGN0 eC5zdGF0dXMsICJpbnZhbGlkX3Rva2VuIikpCisJeworCQkvKgorCQkgKiBpbnZhbGlkX3Rva2Vu IGlzIHRoZSBvbmx5IGVycm9yIGNvZGUgd2UnbGwgYXV0b21hdGljYWxseSByZXRyeSBmb3IsCisJ CSAqIGJ1dCBvbmx5IGlmIHdlIGhhdmUgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGRvIHNvLgorCQkg Ki8KKwkJaWYgKGNvbm4tPm9hdXRoX2Rpc2NvdmVyeV91cmkpCisJCQljb25uLT5vYXV0aF93YW50 X3JldHJ5ID0gdHJ1ZTsKKwl9CisJLyogVE9ETzogaW5jbHVkZSBzdGF0dXMgaW4gaGFyZCBmYWls dXJlIG1lc3NhZ2UgKi8KKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZAorb2F1dGhf ZXhjaGFuZ2Uodm9pZCAqb3BhcSwgYm9vbCBmaW5hbCwKKwkJCSAgIGNoYXIgKmlucHV0LCBpbnQg aW5wdXRsZW4sCisJCQkgICBjaGFyICoqb3V0cHV0LCBpbnQgKm91dHB1dGxlbiwKKwkJCSAgIGJv b2wgKmRvbmUsIGJvb2wgKnN1Y2Nlc3MpCit7CisJZmVfb2F1dGhfc3RhdGUgKnN0YXRlID0gb3Bh cTsKKwlQR2Nvbm4JICAgKmNvbm4gPSBzdGF0ZS0+Y29ubjsKKworCSpkb25lID0gZmFsc2U7CisJ KnN1Y2Nlc3MgPSBmYWxzZTsKKwkqb3V0cHV0ID0gTlVMTDsKKwkqb3V0cHV0bGVuID0gMDsKKwor CXN3aXRjaCAoc3RhdGUtPnN0YXRlKQorCXsKKwkJY2FzZSBGRV9PQVVUSF9JTklUOgorCQkJQXNz ZXJ0KGlucHV0bGVuID09IC0xKTsKKworCQkJKm91dHB1dCA9IGNsaWVudF9pbml0aWFsX3Jlc3Bv bnNlKGNvbm4pOworCQkJaWYgKCEqb3V0cHV0KQorCQkJCWdvdG8gZXJyb3I7CisKKwkJCSpvdXRw dXRsZW4gPSBzdHJsZW4oKm91dHB1dCk7CisJCQlzdGF0ZS0+c3RhdGUgPSBGRV9PQVVUSF9CRUFS RVJfU0VOVDsKKworCQkJYnJlYWs7CisKKwkJY2FzZSBGRV9PQVVUSF9CRUFSRVJfU0VOVDoKKwkJ CWlmIChmaW5hbCkKKwkJCXsKKwkJCQkvKiBUT0RPOiBlbnN1cmUgdGhlcmUgaXMgbm8gbWVzc2Fn ZSBjb250ZW50IGhlcmUuICovCisJCQkJKmRvbmUgPSB0cnVlOworCQkJCSpzdWNjZXNzID0gdHJ1 ZTsKKworCQkJCWJyZWFrOworCQkJfQorCisJCQkvKgorCQkJICogRXJyb3IgbWVzc2FnZSBzZW50 IGJ5IHRoZSBzZXJ2ZXIuCisJCQkgKi8KKwkJCWlmICghaGFuZGxlX29hdXRoX3Nhc2xfZXJyb3Io Y29ubiwgaW5wdXQsIGlucHV0bGVuKSkKKwkJCQlnb3RvIGVycm9yOworCisJCQkvKgorCQkJICog UmVzcG9uZCB3aXRoIHRoZSByZXF1aXJlZCBkdW1teSBtZXNzYWdlIChSRkMgNzYyOCwgc2VjLiAz LjIuMykuCisJCQkgKi8KKwkJCSpvdXRwdXQgPSBzdHJkdXAoa3ZzZXApOworCQkJKm91dHB1dGxl biA9IHN0cmxlbigqb3V0cHV0KTsgLyogPT0gMSAqLworCisJCQlzdGF0ZS0+c3RhdGUgPSBGRV9P QVVUSF9TRVJWRVJfRVJST1I7CisJCQlicmVhazsKKworCQljYXNlIEZFX09BVVRIX1NFUlZFUl9F UlJPUjoKKwkJCS8qCisJCQkgKiBBZnRlciBhbiBlcnJvciwgdGhlIHNlcnZlciBzaG91bGQgc2Vu ZCBhbiBlcnJvciByZXNwb25zZSB0byBmYWlsCisJCQkgKiB0aGUgU0FTTCBoYW5kc2hha2UsIHdo aWNoIGlzIGhhbmRsZWQgaW4gaGlnaGVyIGxheWVycy4KKwkJCSAqCisJCQkgKiBJZiB3ZSBnZXQg aGVyZSwgdGhlIHNlcnZlciBlaXRoZXIgc2VudCAqYW5vdGhlciogY2hhbGxlbmdlIHdoaWNoCisJ CQkgKiBpc24ndCBkZWZpbmVkIGluIHRoZSBSRkMsIG9yIGNvbXBsZXRlZCB0aGUgaGFuZHNoYWtl IHN1Y2Nlc3NmdWxseQorCQkJICogYWZ0ZXIgdGVsbGluZyB1cyBpdCB3YXMgZ29pbmcgdG8gZmFp bC4gTmVpdGhlciBpcyBhY2NlcHRhYmxlLgorCQkJICovCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0 cigmY29ubi0+ZXJyb3JNZXNzYWdlLAorCQkJCQkJCQkgbGlicHFfZ2V0dGV4dCgic2VydmVyIHNl bnQgYWRkaXRpb25hbCBPQXV0aCBkYXRhIGFmdGVyIGVycm9yXG4iKSk7CisJCQlnb3RvIGVycm9y OworCisJCWRlZmF1bHQ6CisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JNZXNz YWdlLAorCQkJCQkJCQkgbGlicHFfZ2V0dGV4dCgiaW52YWxpZCBPQXV0aCBleGNoYW5nZSBzdGF0 ZVxuIikpOworCQkJZ290byBlcnJvcjsKKwl9CisKKwlyZXR1cm47CisKK2Vycm9yOgorCSpkb25l ID0gdHJ1ZTsKKwkqc3VjY2VzcyA9IGZhbHNlOworfQorCitzdGF0aWMgYm9vbAorb2F1dGhfY2hh bm5lbF9ib3VuZCh2b2lkICpvcGFxKQoreworCS8qIFRoaXMgbWVjaGFuaXNtIGRvZXMgbm90IHN1 cHBvcnQgY2hhbm5lbCBiaW5kaW5nLiAqLworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZv aWQKK29hdXRoX2ZyZWUodm9pZCAqb3BhcSkKK3sKKwlmZV9vYXV0aF9zdGF0ZSAqc3RhdGUgPSBv cGFxOworCisJZnJlZShzdGF0ZSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJw cS9mZS1hdXRoLXNhc2wuaCBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtc2FzbC5oCmlu ZGV4IDNkN2VlNTc2ZjIuLjA5MjAxMDI5MDggMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xp YnBxL2ZlLWF1dGgtc2FzbC5oCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtc2Fz bC5oCkBAIC02NSw2ICs2NSw4IEBAIHR5cGVkZWYgc3RydWN0IHBnX2ZlX3Nhc2xfbWVjaAogCSAq CiAJICoJc3RhdGU6CSAgIFRoZSBvcGFxdWUgbWVjaGFuaXNtIHN0YXRlIHJldHVybmVkIGJ5IGlu aXQoKQogCSAqCisJICoJZmluYWw6CSAgIHRydWUgaWYgdGhlIHNlcnZlciBoYXMgc2VudCBhIGZp bmFsIGV4Y2hhbmdlIG91dGNvbWUKKwkgKgogCSAqCWlucHV0OgkgICBUaGUgY2hhbGxlbmdlIGRh dGEgc2VudCBieSB0aGUgc2VydmVyLCBvciBOVUxMIHdoZW4KIAkgKgkJCSAgIGdlbmVyYXRpbmcg YSBjbGllbnQtZmlyc3QgaW5pdGlhbCByZXNwb25zZSAodGhhdCBpcywgd2hlbgogCSAqCQkJICAg dGhlIHNlcnZlciBleHBlY3RzIHRoZSBjbGllbnQgdG8gc2VuZCBhIG1lc3NhZ2UgdG8gc3RhcnQK QEAgLTkyLDcgKzk0LDggQEAgdHlwZWRlZiBzdHJ1Y3QgcGdfZmVfc2FzbF9tZWNoCiAJICoJCQkg ICBJZ25vcmVkIGlmICpkb25lIGlzIGZhbHNlLgogCSAqLS0tLS0tLS0KIAkgKi8KLQl2b2lkCQko KmV4Y2hhbmdlKSAodm9pZCAqc3RhdGUsIGNoYXIgKmlucHV0LCBpbnQgaW5wdXRsZW4sCisJdm9p ZAkJKCpleGNoYW5nZSkgKHZvaWQgKnN0YXRlLCBib29sIGZpbmFsLAorCQkJCQkJCSBjaGFyICpp bnB1dCwgaW50IGlucHV0bGVuLAogCQkJCQkJCSBjaGFyICoqb3V0cHV0LCBpbnQgKm91dHB1dGxl biwKIAkJCQkJCQkgYm9vbCAqZG9uZSwgYm9vbCAqc3VjY2Vzcyk7CiAKZGlmZiAtLWdpdCBhL3Ny Yy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtc2NyYW0uYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBx L2ZlLWF1dGgtc2NyYW0uYwppbmRleCA0MzM3ZTg5Y2U5Li40ODljYmVkYTUwIDEwMDY0NAotLS0g YS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLXNjcmFtLmMKKysrIGIvc3JjL2ludGVyZmFj ZXMvbGlicHEvZmUtYXV0aC1zY3JhbS5jCkBAIC0yNCw3ICsyNCw4IEBACiAvKiBUaGUgZXhwb3J0 ZWQgU0NSQU0gY2FsbGJhY2sgbWVjaGFuaXNtLiAqLwogc3RhdGljIHZvaWQgKnNjcmFtX2luaXQo UEdjb25uICpjb25uLCBjb25zdCBjaGFyICpwYXNzd29yZCwKIAkJCQkJCWNvbnN0IGNoYXIgKnNh c2xfbWVjaGFuaXNtKTsKLXN0YXRpYyB2b2lkIHNjcmFtX2V4Y2hhbmdlKHZvaWQgKm9wYXEsIGNo YXIgKmlucHV0LCBpbnQgaW5wdXRsZW4sCitzdGF0aWMgdm9pZCBzY3JhbV9leGNoYW5nZSh2b2lk ICpvcGFxLCBib29sIGZpbmFsLAorCQkJCQkJICAgY2hhciAqaW5wdXQsIGludCBpbnB1dGxlbiwK IAkJCQkJCSAgIGNoYXIgKipvdXRwdXQsIGludCAqb3V0cHV0bGVuLAogCQkJCQkJICAgYm9vbCAq ZG9uZSwgYm9vbCAqc3VjY2Vzcyk7CiBzdGF0aWMgYm9vbCBzY3JhbV9jaGFubmVsX2JvdW5kKHZv aWQgKm9wYXEpOwpAQCAtMjA1LDcgKzIwNiw4IEBAIHNjcmFtX2ZyZWUodm9pZCAqb3BhcSkKICAq IEV4Y2hhbmdlIGEgU0NSQU0gbWVzc2FnZSB3aXRoIGJhY2tlbmQuCiAgKi8KIHN0YXRpYyB2b2lk Ci1zY3JhbV9leGNoYW5nZSh2b2lkICpvcGFxLCBjaGFyICppbnB1dCwgaW50IGlucHV0bGVuLAor c2NyYW1fZXhjaGFuZ2Uodm9pZCAqb3BhcSwgYm9vbCBmaW5hbCwKKwkJCSAgIGNoYXIgKmlucHV0 LCBpbnQgaW5wdXRsZW4sCiAJCQkgICBjaGFyICoqb3V0cHV0LCBpbnQgKm91dHB1dGxlbiwKIAkJ CSAgIGJvb2wgKmRvbmUsIGJvb2wgKnN1Y2Nlc3MpCiB7CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJm YWNlcy9saWJwcS9mZS1hdXRoLmMgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLmMKaW5k ZXggMzQyMWVkNDY4NS4uMGI1YjkxOTYyYSAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGli cHEvZmUtYXV0aC5jCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGguYwpAQCAtMzks NiArMzksNyBAQAogI2VuZGlmCiAKICNpbmNsdWRlICJjb21tb24vbWQ1LmgiCisjaW5jbHVkZSAi Y29tbW9uL29hdXRoLWNvbW1vbi5oIgogI2luY2x1ZGUgImNvbW1vbi9zY3JhbS1jb21tb24uaCIK ICNpbmNsdWRlICJmZS1hdXRoLmgiCiAjaW5jbHVkZSAiZmUtYXV0aC1zYXNsLmgiCkBAIC00MjMs NyArNDI0LDcgQEAgcGdfU0FTTF9pbml0KFBHY29ubiAqY29ubiwgaW50IHBheWxvYWRsZW4pCiAJ Ym9vbAkJc3VjY2VzczsKIAljb25zdCBjaGFyICpzZWxlY3RlZF9tZWNoYW5pc207CiAJUFFFeHBC dWZmZXJEYXRhIG1lY2hhbmlzbV9idWY7Ci0JY2hhcgkgICAqcGFzc3dvcmQ7CisJY2hhcgkgICAq cGFzc3dvcmQgPSBOVUxMOwogCiAJaW5pdFBRRXhwQnVmZmVyKCZtZWNoYW5pc21fYnVmKTsKIApA QCAtNDQ1LDggKzQ0Niw3IEBAIHBnX1NBU0xfaW5pdChQR2Nvbm4gKmNvbm4sIGludCBwYXlsb2Fk bGVuKQogCS8qCiAJICogUGFyc2UgdGhlIGxpc3Qgb2YgU0FTTCBhdXRoZW50aWNhdGlvbiBtZWNo YW5pc21zIGluIHRoZQogCSAqIEF1dGhlbnRpY2F0aW9uU0FTTCBtZXNzYWdlLCBhbmQgc2VsZWN0 IHRoZSBiZXN0IG1lY2hhbmlzbSB0aGF0IHdlCi0JICogc3VwcG9ydC4gIFNDUkFNLVNIQS0yNTYt UExVUyBhbmQgU0NSQU0tU0hBLTI1NiBhcmUgdGhlIG9ubHkgb25lcwotCSAqIHN1cHBvcnRlZCBh dCB0aGUgbW9tZW50LCBsaXN0ZWQgYnkgb3JkZXIgb2YgZGVjcmVhc2luZyBpbXBvcnRhbmNlLgor CSAqIHN1cHBvcnQuICBNZWNoYW5pc21zIGFyZSBsaXN0ZWQgYnkgb3JkZXIgb2YgZGVjcmVhc2lu ZyBpbXBvcnRhbmNlLgogCSAqLwogCXNlbGVjdGVkX21lY2hhbmlzbSA9IE5VTEw7CiAJZm9yICg7 OykKQEAgLTQ4Niw2ICs0ODYsNyBAQCBwZ19TQVNMX2luaXQoUEdjb25uICpjb25uLCBpbnQgcGF5 bG9hZGxlbikKIAkJCQl7CiAJCQkJCXNlbGVjdGVkX21lY2hhbmlzbSA9IFNDUkFNX1NIQV8yNTZf UExVU19OQU1FOwogCQkJCQljb25uLT5zYXNsID0gJnBnX3NjcmFtX21lY2g7CisJCQkJCWNvbm4t PnBhc3N3b3JkX25lZWRlZCA9IHRydWU7CiAJCQkJfQogI2Vsc2UKIAkJCQkvKgpAQCAtNTIzLDcg KzUyNCwxNyBAQCBwZ19TQVNMX2luaXQoUEdjb25uICpjb25uLCBpbnQgcGF5bG9hZGxlbikKIAkJ ewogCQkJc2VsZWN0ZWRfbWVjaGFuaXNtID0gU0NSQU1fU0hBXzI1Nl9OQU1FOwogCQkJY29ubi0+ c2FzbCA9ICZwZ19zY3JhbV9tZWNoOworCQkJY29ubi0+cGFzc3dvcmRfbmVlZGVkID0gdHJ1ZTsK IAkJfQorI2lmZGVmIFVTRV9PQVVUSAorCQllbHNlIGlmIChzdHJjbXAobWVjaGFuaXNtX2J1Zi5k YXRhLCBPQVVUSEJFQVJFUl9OQU1FKSA9PSAwICYmCisJCQkJIXNlbGVjdGVkX21lY2hhbmlzbSkK KwkJeworCQkJc2VsZWN0ZWRfbWVjaGFuaXNtID0gT0FVVEhCRUFSRVJfTkFNRTsKKwkJCWNvbm4t PnNhc2wgPSAmcGdfb2F1dGhfbWVjaDsKKwkJCWNvbm4tPnBhc3N3b3JkX25lZWRlZCA9IGZhbHNl OworCQl9CisjZW5kaWYKIAl9CiAKIAlpZiAoIXNlbGVjdGVkX21lY2hhbmlzbSkKQEAgLTU0OCwx OCArNTU5LDE5IEBAIHBnX1NBU0xfaW5pdChQR2Nvbm4gKmNvbm4sIGludCBwYXlsb2FkbGVuKQog CiAJLyoKIAkgKiBGaXJzdCwgc2VsZWN0IHRoZSBwYXNzd29yZCB0byB1c2UgZm9yIHRoZSBleGNo YW5nZSwgY29tcGxhaW5pbmcgaWYKLQkgKiB0aGVyZSBpc24ndCBvbmUuICBDdXJyZW50bHksIGFs bCBzdXBwb3J0ZWQgU0FTTCBtZWNoYW5pc21zIHJlcXVpcmUgYQotCSAqIHBhc3N3b3JkLCBzbyB3 ZSBjYW4ganVzdCBnbyBhaGVhZCBoZXJlIHdpdGhvdXQgZnVydGhlciBkaXN0aW5jdGlvbi4KKwkg KiB0aGVyZSBpc24ndCBvbmUgYW5kIHRoZSBTQVNMIG1lY2hhbmlzbSBuZWVkcyBpdC4KIAkgKi8K LQljb25uLT5wYXNzd29yZF9uZWVkZWQgPSB0cnVlOwotCXBhc3N3b3JkID0gY29ubi0+Y29ubmhv c3RbY29ubi0+d2hpY2hob3N0XS5wYXNzd29yZDsKLQlpZiAocGFzc3dvcmQgPT0gTlVMTCkKLQkJ cGFzc3dvcmQgPSBjb25uLT5wZ3Bhc3M7Ci0JaWYgKHBhc3N3b3JkID09IE5VTEwgfHwgcGFzc3dv cmRbMF0gPT0gJ1wwJykKKwlpZiAoY29ubi0+cGFzc3dvcmRfbmVlZGVkKQogCXsKLQkJYXBwZW5k UFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVycm9yTWVzc2FnZSwKLQkJCQkJCQkgUFFub1Bhc3N3b3Jk U3VwcGxpZWQpOwotCQlnb3RvIGVycm9yOworCQlwYXNzd29yZCA9IGNvbm4tPmNvbm5ob3N0W2Nv bm4tPndoaWNoaG9zdF0ucGFzc3dvcmQ7CisJCWlmIChwYXNzd29yZCA9PSBOVUxMKQorCQkJcGFz c3dvcmQgPSBjb25uLT5wZ3Bhc3M7CisJCWlmIChwYXNzd29yZCA9PSBOVUxMIHx8IHBhc3N3b3Jk WzBdID09ICdcMCcpCisJCXsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjb25uLT5lcnJvck1l c3NhZ2UsCisJCQkJCQkJCSBQUW5vUGFzc3dvcmRTdXBwbGllZCk7CisJCQlnb3RvIGVycm9yOwor CQl9CiAJfQogCiAJQXNzZXJ0KGNvbm4tPnNhc2wpOwpAQCAtNTc3LDcgKzU4OSw3IEBAIHBnX1NB U0xfaW5pdChQR2Nvbm4gKmNvbm4sIGludCBwYXlsb2FkbGVuKQogCQlnb3RvIG9vbV9lcnJvcjsK IAogCS8qIEdldCB0aGUgbWVjaGFuaXNtLXNwZWNpZmljIEluaXRpYWwgQ2xpZW50IFJlc3BvbnNl LCBpZiBhbnkgKi8KLQljb25uLT5zYXNsLT5leGNoYW5nZShjb25uLT5zYXNsX3N0YXRlLAorCWNv bm4tPnNhc2wtPmV4Y2hhbmdlKGNvbm4tPnNhc2xfc3RhdGUsIGZhbHNlLAogCQkJCQkJIE5VTEws IC0xLAogCQkJCQkJICZpbml0aWFscmVzcG9uc2UsICZpbml0aWFscmVzcG9uc2VsZW4sCiAJCQkJ CQkgJmRvbmUsICZzdWNjZXNzKTsKQEAgLTY1OCw3ICs2NzAsNyBAQCBwZ19TQVNMX2NvbnRpbnVl KFBHY29ubiAqY29ubiwgaW50IHBheWxvYWRsZW4sIGJvb2wgZmluYWwpCiAJLyogRm9yIHNhZmV0 eSBhbmQgY29udmVuaWVuY2UsIGVuc3VyZSB0aGUgYnVmZmVyIGlzIE5VTEwtdGVybWluYXRlZC4g Ki8KIAljaGFsbGVuZ2VbcGF5bG9hZGxlbl0gPSAnXDAnOwogCi0JY29ubi0+c2FzbC0+ZXhjaGFu Z2UoY29ubi0+c2FzbF9zdGF0ZSwKKwljb25uLT5zYXNsLT5leGNoYW5nZShjb25uLT5zYXNsX3N0 YXRlLCBmaW5hbCwKIAkJCQkJCSBjaGFsbGVuZ2UsIHBheWxvYWRsZW4sCiAJCQkJCQkgJm91dHB1 dCwgJm91dHB1dGxlbiwKIAkJCQkJCSAmZG9uZSwgJnN1Y2Nlc3MpOwpkaWZmIC0tZ2l0IGEvc3Jj L2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC5oIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0 aC5oCmluZGV4IDYzOTI3NDgwZWUuLjAzYmVhMTI0YTYgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZh Y2VzL2xpYnBxL2ZlLWF1dGguaAorKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLmgK QEAgLTI2LDQgKzI2LDcgQEAgZXh0ZXJuIGNoYXIgKnBnX2ZlX2dldGF1dGhuYW1lKFBRRXhwQnVm ZmVyIGVycm9yTWVzc2FnZSk7CiBleHRlcm4gY29uc3QgcGdfZmVfc2FzbF9tZWNoIHBnX3NjcmFt X21lY2g7CiBleHRlcm4gY2hhciAqcGdfZmVfc2NyYW1fYnVpbGRfc2VjcmV0KGNvbnN0IGNoYXIg KnBhc3N3b3JkKTsKIAorLyogTWVjaGFuaXNtcyBpbiBmZS1hdXRoLW9hdXRoLmMgKi8KK2V4dGVy biBjb25zdCBwZ19mZV9zYXNsX21lY2ggcGdfb2F1dGhfbWVjaDsKKwogI2VuZGlmCQkJCQkJCS8q IEZFX0FVVEhfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtY29ubmVj dC5jIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtY29ubmVjdC5jCmluZGV4IDQ5ZWVjM2U4MzUu LmJhOWMwOTcwNjAgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNvbm5lY3Qu YworKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMKQEAgLTM0NCw2ICszNDQs MjMgQEAgc3RhdGljIGNvbnN0IGludGVybmFsUFFjb25uaW5mb09wdGlvbiBQUWNvbm5pbmZvT3B0 aW9uc1tdID0gewogCQkiVGFyZ2V0LVNlc3Npb24tQXR0cnMiLCAiIiwgMTUsIC8qIHNpemVvZigi cHJlZmVyLXN0YW5kYnkiKSA9IDE1ICovCiAJb2Zmc2V0b2Yoc3RydWN0IHBnX2Nvbm4sIHRhcmdl dF9zZXNzaW9uX2F0dHJzKX0sCiAKKwkvKiBPQXV0aCB2MiAqLworCXsib2F1dGhfaXNzdWVyIiwg TlVMTCwgTlVMTCwgTlVMTCwKKwkJIk9BdXRoLUlzc3VlciIsICIiLCA0MCwKKwlvZmZzZXRvZihz dHJ1Y3QgcGdfY29ubiwgb2F1dGhfaXNzdWVyKX0sCisKKwl7Im9hdXRoX2NsaWVudF9pZCIsIE5V TEwsIE5VTEwsIE5VTEwsCisJCSJPQXV0aC1DbGllbnQtSUQiLCAiIiwgNDAsCisJb2Zmc2V0b2Yo c3RydWN0IHBnX2Nvbm4sIG9hdXRoX2NsaWVudF9pZCl9LAorCisJeyJvYXV0aF9jbGllbnRfc2Vj cmV0IiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJIk9BdXRoLUNsaWVudC1TZWNyZXQiLCAiIiwgNDAs CisJb2Zmc2V0b2Yoc3RydWN0IHBnX2Nvbm4sIG9hdXRoX2NsaWVudF9zZWNyZXQpfSwKKworCXsi b2F1dGhfc2NvcGUiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiT0F1dGgtU2NvcGUiLCAiIiwgMTUs CisJb2Zmc2V0b2Yoc3RydWN0IHBnX2Nvbm4sIG9hdXRoX3Njb3BlKX0sCisKIAkvKiBUZXJtaW5h dGluZyBlbnRyeSAtLS0gTVVTVCBCRSBMQVNUICovCiAJe05VTEwsIE5VTEwsIE5VTEwsIE5VTEws CiAJTlVMTCwgTlVMTCwgMH0KQEAgLTYwNiw2ICs2MjMsNyBAQCBwcURyb3BTZXJ2ZXJEYXRhKFBH Y29ubiAqY29ubikKIAljb25uLT53cml0ZV9lcnJfbXNnID0gTlVMTDsKIAljb25uLT5iZV9waWQg PSAwOwogCWNvbm4tPmJlX2tleSA9IDA7CisJLyogY29ubi0+b2F1dGhfd2FudF9yZXRyeSA9IGZh bHNlOyBUT0RPICovCiB9CiAKIApAQCAtMzM1NSw2ICszMzczLDE2IEBAIGtlZXBfZ29pbmc6CQkJ CQkJLyogV2Ugd2lsbCBjb21lIGJhY2sgdG8gaGVyZSB1bnRpbCB0aGVyZSBpcwogCQkJCQkvKiBD aGVjayB0byBzZWUgaWYgd2Ugc2hvdWxkIG1lbnRpb24gcGdwYXNzZmlsZSAqLwogCQkJCQlwZ3Bh c3NmaWxlV2FybmluZyhjb25uKTsKIAorI2lmZGVmIFVTRV9PQVVUSAorCQkJCQlpZiAoY29ubi0+ c2FzbCA9PSAmcGdfb2F1dGhfbWVjaAorCQkJCQkJJiYgY29ubi0+b2F1dGhfd2FudF9yZXRyeSkK KwkJCQkJeworCQkJCQkJLyogVE9ETzogb25seSBhbGxvdyByZXRyeSBvbmNlICovCisJCQkJCQlu ZWVkX25ld19jb25uZWN0aW9uID0gdHJ1ZTsKKwkJCQkJCWdvdG8ga2VlcF9nb2luZzsKKwkJCQkJ fQorI2VuZGlmCisKICNpZmRlZiBFTkFCTEVfR1NTCiAKIAkJCQkJLyoKQEAgLTQxMjksNiArNDE1 NywxNiBAQCBmcmVlUEdjb25uKFBHY29ubiAqY29ubikKIAkJZnJlZShjb25uLT5yb3dCdWYpOwog CWlmIChjb25uLT50YXJnZXRfc2Vzc2lvbl9hdHRycykKIAkJZnJlZShjb25uLT50YXJnZXRfc2Vz c2lvbl9hdHRycyk7CisJaWYgKGNvbm4tPm9hdXRoX2lzc3VlcikKKwkJZnJlZShjb25uLT5vYXV0 aF9pc3N1ZXIpOworCWlmIChjb25uLT5vYXV0aF9kaXNjb3ZlcnlfdXJpKQorCQlmcmVlKGNvbm4t Pm9hdXRoX2Rpc2NvdmVyeV91cmkpOworCWlmIChjb25uLT5vYXV0aF9jbGllbnRfaWQpCisJCWZy ZWUoY29ubi0+b2F1dGhfY2xpZW50X2lkKTsKKwlpZiAoY29ubi0+b2F1dGhfY2xpZW50X3NlY3Jl dCkKKwkJZnJlZShjb25uLT5vYXV0aF9jbGllbnRfc2VjcmV0KTsKKwlpZiAoY29ubi0+b2F1dGhf c2NvcGUpCisJCWZyZWUoY29ubi0+b2F1dGhfc2NvcGUpOwogCXRlcm1QUUV4cEJ1ZmZlcigmY29u bi0+ZXJyb3JNZXNzYWdlKTsKIAl0ZXJtUFFFeHBCdWZmZXIoJmNvbm4tPndvcmtCdWZmZXIpOwog CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1pbnQuaCBiL3NyYy9pbnRl cmZhY2VzL2xpYnBxL2xpYnBxLWludC5oCmluZGV4IDQ5MDQ1OGFkZWYuLjNkMjA0ODI1NTAgMTAw NjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWludC5oCisrKyBiL3NyYy9pbnRl cmZhY2VzL2xpYnBxL2xpYnBxLWludC5oCkBAIC0zOTQsNiArMzk0LDE0IEBAIHN0cnVjdCBwZ19j b25uCiAJY2hhcgkgICAqc3NsX21heF9wcm90b2NvbF92ZXJzaW9uOwkvKiBtYXhpbXVtIFRMUyBw cm90b2NvbCB2ZXJzaW9uICovCiAJY2hhcgkgICAqdGFyZ2V0X3Nlc3Npb25fYXR0cnM7CS8qIGRl c2lyZWQgc2Vzc2lvbiBwcm9wZXJ0aWVzICovCiAKKwkvKiBPQXV0aCB2MiAqLworCWNoYXIJICAg Km9hdXRoX2lzc3VlcjsJCQkvKiB0b2tlbiBpc3N1ZXIgVVJMICovCisJY2hhcgkgICAqb2F1dGhf ZGlzY292ZXJ5X3VyaTsJLyogVVJJIG9mIHRoZSBpc3N1ZXIncyBkaXNjb3ZlcnkgZG9jdW1lbnQg Ki8KKwljaGFyCSAgICpvYXV0aF9jbGllbnRfaWQ7CQkvKiBjbGllbnQgaWRlbnRpZmllciAqLwor CWNoYXIJICAgKm9hdXRoX2NsaWVudF9zZWNyZXQ7CS8qIGNsaWVudCBzZWNyZXQgKi8KKwljaGFy CSAgICpvYXV0aF9zY29wZTsJCQkvKiBhY2Nlc3MgdG9rZW4gc2NvcGUgKi8KKwlib29sCQlvYXV0 aF93YW50X3JldHJ5OwkJLyogc2hvdWxkIHdlIHJldHJ5IG9uIGZhaWx1cmU/ICovCisKIAkvKiBP cHRpb25hbCBmaWxlIHRvIHdyaXRlIHRyYWNlIGluZm8gdG8gKi8KIAlGSUxFCSAgICpQZmRlYnVn OwogCWludAkJCXRyYWNlRmxhZ3M7Ci0tIAoyLjI1LjEKCg== --_006_8a5a35b31c3f25f6b047e77def0445a60399981dcamelvmwarecom_ Content-Type: text/x-patch; name="v2-0003-backend-add-OAUTHBEARER-SASL-mechanism.patch" Content-Description: v2-0003-backend-add-OAUTHBEARER-SASL-mechanism.patch Content-Disposition: attachment; filename="v2-0003-backend-add-OAUTHBEARER-SASL-mechanism.patch"; size=39572; creation-date="Wed, 25 Aug 2021 18:41:39 GMT"; modification-date="Wed, 25 Aug 2021 18:41:39 GMT" Content-ID: <5B6ABD4C0B3BFA47B311A3ECFF8EEE95@namprd05.prod.outlook.com> Content-Transfer-Encoding: base64 RnJvbSBkMDlhMDBiNGQ1MmE1ZWQ1NzhlZTVjZDc2MjMxMDhlYmRkMTJmMjAyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8cGNoYW1waW9uQHZtd2FyZS5jb20+ CkRhdGU6IFR1ZSwgNCBNYXkgMjAyMSAxNjoyMToxMSAtMDcwMApTdWJqZWN0OiBbUEFUQ0ggdjIg My81XSBiYWNrZW5kOiBhZGQgT0FVVEhCRUFSRVIgU0FTTCBtZWNoYW5pc20KCkRPIE5PVCBVU0Ug VEhJUyBQUk9PRiBPRiBDT05DRVBUIElOIFBST0RVQ1RJT04uCgpJbXBsZW1lbnQgT0FVVEhCRUFS RVIgKFJGQyA3NjI4KSBvbiB0aGUgc2VydmVyIHNpZGUuIFRoaXMgYWRkcyBhIG5ldwphdXRoIG1l dGhvZCwgb2F1dGgsIHRvIHBnX2hiYS4KCkJlY2F1c2UgT0F1dGggaW1wbGVtZW50YXRpb25zIHZh cnkgc28gd2lsZGx5LCBhbmQgYmVhcmVyIHRva2VuCnZhbGlkYXRpb24gaXMgaGVhdmlseSBkZXBl bmRlbnQgb24gdGhlIGlzc3VpbmcgcGFydHksIGF1dGhuL3ogaXMgZG9uZSBieQpjb21tdW5pY2F0 aW5nIHdpdGggYW4gZXh0ZXJuYWwgcHJvZ3JhbTogdGhlIG9hdXRoX3ZhbGlkYXRvcl9jb21tYW5k LgpUaGlzIGNvbW1hbmQgbXVzdCBkbyB0aGUgZm9sbG93aW5nOgoKMS4gUmVjZWl2ZSB0aGUgYmVh cmVyIHRva2VuIGJ5IHJlYWRpbmcgaXRzIGNvbnRlbnRzIGZyb20gYSBmaWxlCiAgIGRlc2NyaXB0 b3IgcGFzc2VkIGZyb20gdGhlIHNlcnZlci4gKFRoZSBudW1lcmljIHZhbHVlIG9mIHRoaXMKICAg ZGVzY3JpcHRvciBtYXkgYmUgaW5zZXJ0ZWQgaW50byB0aGUgb2F1dGhfdmFsaWRhdG9yX2NvbW1h bmQgdXNpbmcgdGhlCiAgICVmIHNwZWNpZmllci4pCgogICBUaGlzIE1VU1QgYmUgdGhlIGZpcnN0 IGFjdGlvbiB0aGUgY29tbWFuZCBwZXJmb3Jtcy4gVGhlIHNlcnZlciB3aWxsCiAgIG5vdCBiZWdp biByZWFkaW5nIHN0ZG91dCBmcm9tIHRoZSBjb21tYW5kIHVudGlsIHRoZSB0b2tlbiBoYXMgYmVl bgogICByZWFkIGluIGZ1bGwsIHNvIGlmIHRoZSBjb21tYW5kIHRyaWVzIHRvIHByaW50IGFueXRo aW5nIGFuZCBoaXRzIGEKICAgYnVmZmVyIGxpbWl0LCB0aGUgYmFja2VuZCB3aWxsIGRlYWRsb2Nr IGFuZCB0aW1lIG91dC4KCjIuIFZhbGlkYXRlIHRoZSBiZWFyZXIgdG9rZW4uIFRoZSBjb3JyZWN0 IHdheSB0byBkbyB0aGlzIGRlcGVuZHMgb24gdGhlCiAgIGlzc3VlciwgYnV0IGl0IGdlbmVyYWxs eSBpbnZvbHZlcyBlaXRoZXIgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb25zIHRvCiAgIHByb3ZlIHRo YXQgdGhlIHRva2VuIHdhcyBpc3N1ZWQgYnkgYSB0cnVzdGVkIHBhcnR5LCBvciB0aGUKICAgcHJl c2VudGF0aW9uIG9mIHRoZSBiZWFyZXIgdG9rZW4gdG8gc29tZSBvdGhlciBwYXJ0eSBzbyB0aGF0 IF9pdF8gY2FuCiAgIHBlcmZvcm0gdmFsaWRhdGlvbi4KCiAgIFRoZSBjb21tYW5kIE1VU1QgbWFp bnRhaW4gY29uZmlkZW50aWFsaXR5IG9mIHRoZSBiZWFyZXIgdG9rZW4sIHNpbmNlCiAgIGluIG1v c3QgY2FzZXMgaXQgY2FuIGJlIHVzZWQganVzdCBsaWtlIGEgcGFzc3dvcmQuIChUaGVyZSBhcmUg d2F5cyB0bwogICBjcnlwdG9ncmFwaGljYWxseSBiaW5kIHRva2VucyB0byBjbGllbnQgY2VydGlm aWNhdGVzLCBidXQgdGhleSBhcmUKICAgd2F5IGJleW9uZCB0aGUgc2NvcGUgb2YgdGhpcyBjb21t aXQgbWVzc2FnZS4pCgogICBJZiB0aGUgdG9rZW4gY2Fubm90IGJlIHZhbGlkYXRlZCwgdGhlIGNv bW1hbmQgbXVzdCBleGl0IHdpdGggYQogICBub24temVybyBzdGF0dXMuIEZ1cnRoZXIgYXV0aGVu dGljYXRpb24vYXV0aG9yaXphdGlvbiBpcyBwb2ludGxlc3MgaWYKICAgdGhlIGJlYXJlciB0b2tl biB3YXNuJ3QgaXNzdWVkIGJ5IHNvbWVvbmUgeW91IHRydXN0LgoKMy4gQXV0aGVudGljYXRlIHRo ZSB1c2VyLCBhdXRob3JpemUgdGhlIHVzZXIsIG9yIGJvdGg6CgogICBhLiBUbyBhdXRoZW50aWNh dGUgdGhlIHVzZXIsIHVzZSB0aGUgYmVhcmVyIHRva2VuIHRvIHJldHJpZXZlIHNvbWUKICAgICAg dHJ1c3RlZCBpZGVudGlmaWVyIHN0cmluZyBmb3IgdGhlIGVuZCB1c2VyLiBUaGUgZXhhY3QgcHJv Y2VzcyBmb3IKICAgICAgdGhpcyBpcywgYWdhaW4sIGlzc3Vlci1kZXBlbmRlbnQuIFRoZSBjb21t YW5kIHNob3VsZCBwcmludCB0aGUKICAgICAgYXV0aGVudGljYXRlZCBpZGVudGl0eSBzdHJpbmcg dG8gc3Rkb3V0LCBmb2xsb3dlZCBieSBhIG5ld2xpbmUuCgogICAgICBJZiB0aGUgdXNlciBjYW5u b3QgYmUgYXV0aGVudGljYXRlZCwgdGhlIHZhbGlkYXRvciBzaG91bGQgbm90CiAgICAgIHByaW50 IGFueXRoaW5nIHRvIHN0ZG91dC4gSXQgc2hvdWxkIGFsc28gZXhpdCB3aXRoIGEgbm9uLXplcm8K ICAgICAgc3RhdHVzLCB1bmxlc3MgdGhlIHRva2VuIG1heSBiZSB1c2VkIHRvIGF1dGhvcml6ZSB0 aGUgY29ubmVjdGlvbgogICAgICB0aHJvdWdoIHNvbWUgb3RoZXIgbWVhbnMgKHNlZSBiZWxvdyku CgogICAgICBPbiBhIHN1Y2Nlc3MsIHRoZSBjb21tYW5kIG1heSB0aGVuIGV4aXQgd2l0aCBhIHpl cm8gc3VjY2VzcyBjb2RlLgogICAgICBCeSBkZWZhdWx0LCB0aGUgc2VydmVyIHdpbGwgdGhlbiBj aGVjayB0byBtYWtlIHN1cmUgdGhlIGlkZW50aXR5CiAgICAgIHN0cmluZyBtYXRjaGVzIHRoZSBy b2xlIHRoYXQgaXMgYmVpbmcgdXNlZCAob3IgbWF0Y2hlcyBhIHVzZXJtYXAKICAgICAgZW50cnks IGlmIG9uZSBpcyBpbiB1c2UpLgoKICAgYi4gVG8gb3B0aW9uYWxseSBhdXRob3JpemUgdGhlIHVz ZXIsIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIEhCQQogICAgICBvcHRpb24gdHJ1c3RfdmFsaWRh dG9yX2F1dGh6PTEgKHNlZSBiZWxvdyksIHRoZSB2YWxpZGF0b3Igc2ltcGx5CiAgICAgIHJldHVy bnMgYSB6ZXJvIGV4aXQgY29kZSBpZiB0aGUgY2xpZW50IHNob3VsZCBiZSBhbGxvd2VkIHRvCiAg ICAgIGNvbm5lY3Qgd2l0aCBpdHMgcHJlc2VudGVkIHJvbGUgKHdoaWNoIGNhbiBiZSBwYXNzZWQg dG8gdGhlCiAgICAgIGNvbW1hbmQgdXNpbmcgdGhlICVyIHNwZWNpZmllciksIG9yIGEgbm9uLXpl cm8gY29kZSBvdGhlcndpc2UuCgogICAgICBUaGUgaGFyZCBwYXJ0IGlzIGluIGRldGVybWluaW5n IHdoZXRoZXIgdGhlIGdpdmVuIHRva2VuIHRydWx5CiAgICAgIGF1dGhvcml6ZXMgdGhlIGNsaWVu dCB0byB1c2UgdGhlIGdpdmVuIHJvbGUsIHdoaWNoIG11c3QKICAgICAgdW5mb3J0dW5hdGVseSBi ZSBsZWZ0IGFzIGFuIGV4ZXJjaXNlIHRvIHRoZSByZWFkZXIuCgogICAgICBUaGlzIG9idmlvdXNs eSByZXF1aXJlcyBzb21lIGNhcmUsIGFzIGEgcG9vcmx5IGltcGxlbWVudGVkIHRva2VuCiAgICAg IHZhbGlkYXRvciBtYXkgc2lsZW50bHkgb3BlbiB0aGUgZW50aXJlIGRhdGFiYXNlIHRvIGFueW9u ZSB3aXRoIGEKICAgICAgYmVhcmVyIHRva2VuLiBCdXQgaXQgbWF5IGJlIGEgbW9yZSBwb3J0YWJs ZSBhcHByb2FjaCwgc2luY2UgT0F1dGgKICAgICAgaXMgZGVzaWduZWQgYXMgYW4gYXV0aG9yaXph dGlvbiBmcmFtZXdvcmssIG5vdCBhbiBhdXRoZW50aWNhdGlvbgogICAgICBmcmFtZXdvcmsuIEZv ciBleGFtcGxlLCB0aGUgdXNlcidzIGJlYXJlciB0b2tlbiBjb3VsZCBjYXJyeSBhbgogICAgICAi YWxsb3dfc3VwZXJ1c2VyX2FjY2VzcyIgY2xhaW0sIHdoaWNoIHdvdWxkIGF1dGhvcml6ZSBwc2V1 ZG9ueW1vdXMKICAgICAgZGF0YWJhc2UgYWNjZXNzIGFzIGFueSByb2xlLiBJdCdzIHRoZW4gdXAg dG8gdGhlIE9BdXRoIHN5c3RlbQogICAgICBhZG1pbmlzdHJhdG9ycyB0byBlbnN1cmUgdGhhdCBh bGxvd19zdXBlcnVzZXJfYWNjZXNzIGlzIGRvbGVkIG91dAogICAgICBvbmx5IHRvIHRoZSBwcm9w ZXIgdXNlcnMuCgogICBjLiBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHVzZXIgY2FuIGJlIHN1Y2Nl c3NmdWxseSBhdXRoZW50aWNhdGVkIGJ1dAogICAgICBpc24ndCBhdXRob3JpemVkIHRvIGNvbm5l Y3QuIEluIHRoaXMgY2FzZSwgdGhlIGNvbW1hbmQgbWF5IHByaW50CiAgICAgIHRoZSBhdXRoZW50 aWNhdGVkIElEIGFuZCB0aGVuIGZhaWwgd2l0aCBhIG5vbi16ZXJvIGV4aXQgY29kZS4KICAgICAg KFRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIHNlZSB3aGF0J3MgZ29pbmcgb24gaW4gdGhlIFBvc3Rn cmVzCiAgICAgIGxvZ3MuKQoKNC4gVG9rZW4gdmFsaWRhdG9ycyBtYXkgb3B0aW9uYWxseSBsb2cg dG8gc3RkZXJyLiBUaGlzIHdpbGwgYmUgcHJpbnRlZAogICB2ZXJiYXRpbSBpbnRvIHRoZSBQb3N0 Z3JlcyBzZXJ2ZXIgbG9ncy4KClRoZSBvYXV0aCBtZXRob2Qgc3VwcG9ydHMgdGhlIGZvbGxvd2lu ZyBIQkEgb3B0aW9ucyAoYnV0IG5vdGUgdGhhdCB0d28Kb2YgdGhlbSBhcmUgbm90IG9wdGlvbmFs LCBzaW5jZSB3ZSBoYXZlIG5vIHdheSBvZiBjaG9vc2luZyBzZW5zaWJsZQpkZWZhdWx0cyk6Cgog IGlzc3VlcjogUmVxdWlyZWQuIFRoZSBVUkwgb2YgdGhlIE9BdXRoIGlzc3VpbmcgcGFydHksIHdo aWNoIHRoZSBjbGllbnQKICAgICAgICAgIG11c3QgY29udGFjdCB0byByZWNlaXZlIGEgYmVhcmVy IHRva2VuLgoKICAgICAgICAgIFNvbWUgcmVhbC13b3JsZCBleGFtcGxlcyBhcyBvZiB0aW1lIG9m IHdyaXRpbmc6CiAgICAgICAgICAtIGh0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbQogICAgICAg ICAgLSBodHRwczovL2xvZ2luLm1pY3Jvc29mdC5jb20vW3RlbmFudC1pZF0vdjIuMAoKICBzY29w ZTogIFJlcXVpcmVkLiBUaGUgT0F1dGggc2NvcGUocykgcmVxdWlyZWQgZm9yIHRoZSBzZXJ2ZXIg dG8KICAgICAgICAgIGF1dGhlbnRpY2F0ZSBhbmQvb3IgYXV0aG9yaXplIHRoZSB1c2VyLiBUaGlz IGlzIGhlYXZpbHkKICAgICAgICAgIGRlcGxveW1lbnQtc3BlY2lmaWMsIGJ1dCBhIHNpbXBsZSBl eGFtcGxlIGlzICJvcGVuaWQgZW1haWwiLgoKICBtYXA6ICAgIE9wdGlvbmFsLiBTcGVjaWZ5IGEg c3RhbmRhcmQgUG9zdGdyZVNRTCB1c2VyIG1hcDsgdGhpcyB3b3JrcwogICAgICAgICAgdGhlIHNh bWUgYXMgd2l0aCBvdGhlciBhdXRoIG1ldGhvZHMgc3VjaCBhcyBwZWVyLiBJZiBhIG1hcCBpcwog ICAgICAgICAgbm90IHNwZWNpZmllZCwgdGhlIHVzZXIgSUQgcmV0dXJuZWQgYnkgdGhlIHRva2Vu IHZhbGlkYXRvcgogICAgICAgICAgbXVzdCBleGFjdGx5IG1hdGNoIHRoZSByb2xlIHRoYXQncyBi ZWluZyByZXF1ZXN0ZWQgKGJ1dCBzZWUKICAgICAgICAgIHRydXN0X3ZhbGlkYXRvcl9hdXRoeiwg YmVsb3cpLgoKICB0cnVzdF92YWxpZGF0b3JfYXV0aHo6CiAgICAgICAgICBPcHRpb25hbC4gV2hl biBzZXQgdG8gMSwgdGhpcyBhbGxvd3MgdGhlIHRva2VuIHZhbGlkYXRvciB0bwogICAgICAgICAg dGFrZSBmdWxsIGNvbnRyb2wgb2YgdGhlIGF1dGhvcml6YXRpb24gcHJvY2Vzcy4gU3RhbmRhcmQg dXNlcgogICAgICAgICAgbWFwcGluZyBpcyBza2lwcGVkOiBpZiB0aGUgdmFsaWRhdG9yIGNvbW1h bmQgc3VjY2VlZHMsIHRoZQogICAgICAgICAgY2xpZW50IGlzIGFsbG93ZWQgdG8gY29ubmVjdCB1 bmRlciBpdHMgZGVzaXJlZCByb2xlIGFuZCBubwogICAgICAgICAgZnVydGhlciBjaGVja3MgYXJl IGRvbmUuCgpVbmxpa2UgdGhlIGNsaWVudCwgc2VydmVycyBzdXBwb3J0IE9BdXRoIHdpdGhvdXQg bmVlZGluZyB0byBiZSBidWlsdAphZ2FpbnN0IGxpYmlkZGF3YyAoc2luY2UgdGhlIHJlc3BvbnNp YmlsaXR5IGZvciAic3BlYWtpbmciIE9BdXRoL09JREMKY29ycmVjdGx5IGlzIGRlbGVnYXRlZCBl bnRpcmVseSB0byB0aGUgb2F1dGhfdmFsaWRhdG9yX2NvbW1hbmQpLgoKU2V2ZXJhbCBUT0RPczoK LSBwb3J0IHRvIHBsYXRmb3JtcyBvdGhlciB0aGFuICJtb2Rlcm4gTGludXgiCi0gb3ZlcmhhdWwg dGhlIGNvbW11bmljYXRpb24gd2l0aCBvYXV0aF92YWxpZGF0b3JfY29tbWFuZCwgd2hpY2ggaXMK ICBjdXJyZW50bHkgYSBiYWQgaGFjayBvbiBPcGVuUGlwZVN0cmVhbSgpCi0gaW1wbGVtZW50IG1v cmUgc2FuaXR5IGNoZWNrcyBvbiB0aGUgT0FVVEhCRUFSRVIgbWVzc2FnZSBmb3JtYXQgYW5kCiAg dG9rZW5zIHNlbnQgYnkgdGhlIGNsaWVudAotIGltcGxlbWVudCBtb3JlIGhlbHBmdWwgaGFuZGxp bmcgb2YgSEJBIG1pc2NvbmZpZ3VyYXRpb25zCi0gcHJvcGVybHkgaW50ZXJwb2xhdGUgSlNPTiB3 aGVuIGdlbmVyYXRpbmcgZXJyb3IgcmVzcG9uc2VzCi0gdXNlIGxvZ2RldGFpbCBkdXJpbmcgYXV0 aCBmYWlsdXJlcwotIGRlYWwgd2l0aCByb2xlIG5hbWVzIHRoYXQgY2FuJ3QgYmUgc2FmZWx5IHBh c3NlZCB0byBzeXN0ZW0oKSB3aXRob3V0CiAgc2hlbGwtZXNjYXBpbmcKLSBhbGxvdyBwYXNzaW5n IHRoZSBjb25maWd1cmVkIGlzc3VlciB0byB0aGUgb2F1dGhfdmFsaWRhdG9yX2NvbW1hbmQsIHRv CiAgZGVhbCB3aXRoIG11bHRpLWlzc3VlciBzZXR1cHMKLSAuLi5hbmQgbW9yZS4KLS0tCiBzcmMv YmFja2VuZC9saWJwcS9NYWtlZmlsZSAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvbGlicHEvYXV0 aC1vYXV0aC5jIHwgNzk3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2Jh Y2tlbmQvbGlicHEvYXV0aC1zYXNsLmMgIHwgIDEwICstCiBzcmMvYmFja2VuZC9saWJwcS9hdXRo LXNjcmFtLmMgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL2xpYnBxL2F1dGguYyAgICAgICB8ICAyNiAr LQogc3JjL2JhY2tlbmQvbGlicHEvaGJhLmMgICAgICAgIHwgIDI5ICstCiBzcmMvYmFja2VuZC91 dGlscy9taXNjL2d1Yy5jICAgfCAgMTIgKwogc3JjL2luY2x1ZGUvbGlicHEvYXV0aC5oICAgICAg IHwgIDE3ICsKIHNyYy9pbmNsdWRlL2xpYnBxL2hiYS5oICAgICAgICB8ICAgOCArLQogc3JjL2lu Y2x1ZGUvbGlicHEvb2F1dGguaCAgICAgIHwgIDI0ICsKIHNyYy9pbmNsdWRlL2xpYnBxL3Nhc2wu aCAgICAgICB8ICAxMSArCiAxMSBmaWxlcyBjaGFuZ2VkLCA5MDcgaW5zZXJ0aW9ucygrKSwgMzIg ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvbGlicHEvYXV0aC1v YXV0aC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvbGlicHEvb2F1dGguaAoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYnBxL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvbGlicHEv TWFrZWZpbGUKaW5kZXggNmQzODVmZDZhNC4uOThlYjJhODI0MiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvbGlicHEvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvbGlicHEvTWFrZWZpbGUKQEAg LTE1LDYgKzE1LDcgQEAgaW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2Jh bAogIyBiZS1mc3N0dWJzIGlzIGhlcmUgZm9yIGhpc3RvcmljYWwgcmVhc29ucywgcHJvYmFibHkg YmVsb25ncyBlbHNld2hlcmUKIAogT0JKUyA9IFwKKwlhdXRoLW9hdXRoLm8gXAogCWF1dGgtc2Fz bC5vIFwKIAlhdXRoLXNjcmFtLm8gXAogCWF1dGgubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9saWJwcS9hdXRoLW9hdXRoLmMgYi9zcmMvYmFja2VuZC9saWJwcS9hdXRoLW9hdXRoLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYzQ3MjExMTMyYwotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGgtb2F1dGguYwpAQCAtMCwwICsxLDc5NyBA QAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogYXV0aC1vYXV0aC5jCisgKgkgIFNlcnZlci1z aWRlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTQVNMIE9BVVRIQkVBUkVSIG1lY2hhbmlzbS4KKyAq CisgKiBTZWUgdGhlIGZvbGxvd2luZyBSRkMgZm9yIG1vcmUgZGV0YWlsczoKKyAqIC0gUkZDIDc2 Mjg6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NjI4CisgKgorICogUG9ydGlvbnMg Q29weXJpZ2h0IChjKSAxOTk2LTIwMjEsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdy b3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZl cnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHNyYy9iYWNrZW5kL2xpYnBxL2F1dGgtb2F1dGgu YworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKwor I2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlICJjb21t b24vb2F1dGgtY29tbW9uLmgiCisjaW5jbHVkZSAibGliL3N0cmluZ2luZm8uaCIKKyNpbmNsdWRl ICJsaWJwcS9hdXRoLmgiCisjaW5jbHVkZSAibGlicHEvaGJhLmgiCisjaW5jbHVkZSAibGlicHEv b2F1dGguaCIKKyNpbmNsdWRlICJsaWJwcS9zYXNsLmgiCisjaW5jbHVkZSAic3RvcmFnZS9mZC5o IgorCisvKiBHVUMgKi8KK2NoYXIgKm9hdXRoX3ZhbGlkYXRvcl9jb21tYW5kOworCitzdGF0aWMg dm9pZCAgb2F1dGhfZ2V0X21lY2hhbmlzbXMoUG9ydCAqcG9ydCwgU3RyaW5nSW5mbyBidWYpOwor c3RhdGljIHZvaWQgKm9hdXRoX2luaXQoUG9ydCAqcG9ydCwgY29uc3QgY2hhciAqc2VsZWN0ZWRf bWVjaCwgY29uc3QgY2hhciAqc2hhZG93X3Bhc3MpOworc3RhdGljIGludCAgIG9hdXRoX2V4Y2hh bmdlKHZvaWQgKm9wYXEsIGNvbnN0IGNoYXIgKmlucHV0LCBpbnQgaW5wdXRsZW4sCisJCQkJCQkJ Y2hhciAqKm91dHB1dCwgaW50ICpvdXRwdXRsZW4sIGNoYXIgKipsb2dkZXRhaWwpOworCisvKiBN ZWNoYW5pc20gZGVjbGFyYXRpb24gKi8KK2NvbnN0IHBnX2JlX3Nhc2xfbWVjaCBwZ19iZV9vYXV0 aF9tZWNoID0geworCW9hdXRoX2dldF9tZWNoYW5pc21zLAorCW9hdXRoX2luaXQsCisJb2F1dGhf ZXhjaGFuZ2UsCisKKwlQR19NQVhfQVVUSF9UT0tFTl9MRU5HVEgsCit9OworCisKK3R5cGVkZWYg ZW51bQoreworCU9BVVRIX1NUQVRFX0lOSVQgPSAwLAorCU9BVVRIX1NUQVRFX0VSUk9SLAorCU9B VVRIX1NUQVRFX0ZJTklTSEVELAorfSBvYXV0aF9zdGF0ZTsKKworc3RydWN0IG9hdXRoX2N0eAor eworCW9hdXRoX3N0YXRlCXN0YXRlOworCVBvcnQJICAgKnBvcnQ7CisJY29uc3QgY2hhciAqaXNz dWVyOworCWNvbnN0IGNoYXIgKnNjb3BlOworfTsKKworc3RhdGljIGNoYXIgKnNhbml0aXplX2No YXIoY2hhciBjKTsKK3N0YXRpYyBjaGFyICpwYXJzZV9rdnBhaXJzX2Zvcl9hdXRoKGNoYXIgKipp bnB1dCk7CitzdGF0aWMgdm9pZCBnZW5lcmF0ZV9lcnJvcl9yZXNwb25zZShzdHJ1Y3Qgb2F1dGhf Y3R4ICpjdHgsIGNoYXIgKipvdXRwdXQsIGludCAqb3V0cHV0bGVuKTsKK3N0YXRpYyBib29sIHZh bGlkYXRlKFBvcnQgKnBvcnQsIGNvbnN0IGNoYXIgKmF1dGgsIGNoYXIgKipsb2dkZXRhaWwpOwor c3RhdGljIGJvb2wgcnVuX3ZhbGlkYXRvcl9jb21tYW5kKFBvcnQgKnBvcnQsIGNvbnN0IGNoYXIg KnRva2VuKTsKK3N0YXRpYyBib29sIGNoZWNrX2V4aXQoRklMRSAqKmZoLCBjb25zdCBjaGFyICpj b21tYW5kKTsKK3N0YXRpYyBib29sIHVuc2V0X2Nsb2V4ZWMoaW50IGZkKTsKK3N0YXRpYyBib29s IHVzZXJuYW1lX29rX2Zvcl9zaGVsbChjb25zdCBjaGFyICp1c2VybmFtZSk7CisKKyNkZWZpbmUg S1ZTRVAgMHgwMQorI2RlZmluZSBBVVRIX0tFWSAiYXV0aCIKKyNkZWZpbmUgQkVBUkVSX1NDSEVN RSAiQmVhcmVyICIKKworc3RhdGljIHZvaWQKK29hdXRoX2dldF9tZWNoYW5pc21zKFBvcnQgKnBv cnQsIFN0cmluZ0luZm8gYnVmKQoreworCS8qIE9ubHkgT0FVVEhCRUFSRVIgaXMgc3VwcG9ydGVk LiAqLworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBPQVVUSEJFQVJFUl9OQU1FKTsKKwlh cHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICdcMCcpOworfQorCitzdGF0aWMgdm9pZCAqCitvYXV0 aF9pbml0KFBvcnQgKnBvcnQsIGNvbnN0IGNoYXIgKnNlbGVjdGVkX21lY2gsIGNvbnN0IGNoYXIg KnNoYWRvd19wYXNzKQoreworCXN0cnVjdCBvYXV0aF9jdHggKmN0eDsKKworCWlmIChzdHJjbXAo c2VsZWN0ZWRfbWVjaCwgT0FVVEhCRUFSRVJfTkFNRSkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJ KGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAorCQkJCSBlcnJtc2coImNsaWVu dCBzZWxlY3RlZCBhbiBpbnZhbGlkIFNBU0wgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtIikpKTsK KworCWN0eCA9IHBhbGxvYzAoc2l6ZW9mKCpjdHgpKTsKKworCWN0eC0+c3RhdGUgPSBPQVVUSF9T VEFURV9JTklUOworCWN0eC0+cG9ydCA9IHBvcnQ7CisKKwlBc3NlcnQocG9ydC0+aGJhKTsKKwlj dHgtPmlzc3VlciA9IHBvcnQtPmhiYS0+b2F1dGhfaXNzdWVyOworCWN0eC0+c2NvcGUgPSBwb3J0 LT5oYmEtPm9hdXRoX3Njb3BlOworCisJcmV0dXJuIGN0eDsKK30KKworc3RhdGljIGludAorb2F1 dGhfZXhjaGFuZ2Uodm9pZCAqb3BhcSwgY29uc3QgY2hhciAqaW5wdXQsIGludCBpbnB1dGxlbiwK KwkJCSAgIGNoYXIgKipvdXRwdXQsIGludCAqb3V0cHV0bGVuLCBjaGFyICoqbG9nZGV0YWlsKQor eworCWNoYXIgICAqcDsKKwljaGFyCWNiaW5kX2ZsYWc7CisJY2hhciAgICphdXRoOworCisJc3Ry dWN0IG9hdXRoX2N0eCAqY3R4ID0gb3BhcTsKKworCSpvdXRwdXQgPSBOVUxMOworCSpvdXRwdXRs ZW4gPSAtMTsKKworCS8qCisJICogSWYgdGhlIGNsaWVudCBkaWRuJ3QgaW5jbHVkZSBhbiAiSW5p dGlhbCBDbGllbnQgUmVzcG9uc2UiIGluIHRoZQorCSAqIFNBU0xJbml0aWFsUmVzcG9uc2UgbWVz c2FnZSwgc2VuZCBhbiBlbXB0eSBjaGFsbGVuZ2UsIHRvIHdoaWNoIHRoZQorCSAqIGNsaWVudCB3 aWxsIHJlc3BvbmQgd2l0aCB0aGUgc2FtZSBkYXRhIHRoYXQgdXN1YWxseSBjb21lcyBpbiB0aGUK KwkgKiBJbml0aWFsIENsaWVudCBSZXNwb25zZS4KKwkgKi8KKwlpZiAoaW5wdXQgPT0gTlVMTCkK Kwl7CisJCUFzc2VydChjdHgtPnN0YXRlID09IE9BVVRIX1NUQVRFX0lOSVQpOworCisJCSpvdXRw dXQgPSBwc3RyZHVwKCIiKTsKKwkJKm91dHB1dGxlbiA9IDA7CisJCXJldHVybiBQR19TQVNMX0VY Q0hBTkdFX0NPTlRJTlVFOworCX0KKworCS8qCisJICogQ2hlY2sgdGhhdCB0aGUgaW5wdXQgbGVu Z3RoIGFncmVlcyB3aXRoIHRoZSBzdHJpbmcgbGVuZ3RoIG9mIHRoZSBpbnB1dC4KKwkgKi8KKwlp ZiAoaW5wdXRsZW4gPT0gMCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RF X1BST1RPQ09MX1ZJT0xBVElPTiksCisJCQkJIGVycm1zZygibWFsZm9ybWVkIE9BVVRIQkVBUkVS IG1lc3NhZ2UiKSwKKwkJCQkgZXJyZGV0YWlsKCJUaGUgbWVzc2FnZSBpcyBlbXB0eS4iKSkpOwor CWlmIChpbnB1dGxlbiAhPSBzdHJsZW4oaW5wdXQpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShl cnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKKwkJCQkgZXJybXNnKCJtYWxmb3Jt ZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIpLAorCQkJCSBlcnJkZXRhaWwoIk1lc3NhZ2UgbGVuZ3Ro IGRvZXMgbm90IG1hdGNoIGlucHV0IGxlbmd0aC4iKSkpOworCisJc3dpdGNoIChjdHgtPnN0YXRl KQorCXsKKwkJY2FzZSBPQVVUSF9TVEFURV9JTklUOgorCQkJLyogSGFuZGxlIHRoaXMgY2FzZSBi ZWxvdy4gKi8KKwkJCWJyZWFrOworCisJCWNhc2UgT0FVVEhfU1RBVEVfRVJST1I6CisJCQkvKgor CQkJICogT25seSBvbmUgcmVzcG9uc2UgaXMgdmFsaWQgZm9yIHRoZSBjbGllbnQgZHVyaW5nIGF1 dGhlbnRpY2F0aW9uCisJCQkgKiBmYWlsdXJlOiBhIHNpbmdsZSBrdnNlcC4KKwkJCSAqLworCQkJ aWYgKGlucHV0bGVuICE9IDEgfHwgKmlucHV0ICE9IEtWU0VQKQorCQkJCWVyZXBvcnQoRVJST1Is CisJCQkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCisJCQkJCQkgZXJy bXNnKCJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIpLAorCQkJCQkJIGVycmRldGFpbCgi Q2xpZW50IGRpZCBub3Qgc2VuZCBhIGt2c2VwIHJlc3BvbnNlLiIpKSk7CisKKwkJCS8qIFRoZSAo ZmFpbGVkKSBoYW5kc2hha2UgaXMgbm93IGNvbXBsZXRlLiAqLworCQkJY3R4LT5zdGF0ZSA9IE9B VVRIX1NUQVRFX0ZJTklTSEVEOworCQkJcmV0dXJuIFBHX1NBU0xfRVhDSEFOR0VfRkFJTFVSRTsK KworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgT0FVVEhCRUFSRVIgZXhjaGFu Z2Ugc3RhdGUiKTsKKwkJCXJldHVybiBQR19TQVNMX0VYQ0hBTkdFX0ZBSUxVUkU7CisJfQorCisJ LyogSGFuZGxlIHRoZSBjbGllbnQncyBpbml0aWFsIG1lc3NhZ2UuICovCisJcCA9IHBzdHJkdXAo aW5wdXQpOworCisJLyoKKwkgKiBPQVVUSEJFQVJFUiBkb2VzIG5vdCBjdXJyZW50bHkgZGVmaW5l IGEgY2hhbm5lbCBiaW5kaW5nIChzbyB0aGVyZSBpcyBubworCSAqIE9BVVRIQkVBUkVSLVBMVVMs IGFuZCB3ZSBkbyBub3QgYWNjZXB0IGEgJ3AnIHNwZWNpZmllcikuIFdlIGFjY2VwdCBhICd5Jwor CSAqIHNwZWNpZmllciBwdXJlbHkgZm9yIHRoZSByZW1vdGUgY2hhbmNlIHRoYXQgYSBmdXR1cmUg c3BlY2lmaWNhdGlvbiBjb3VsZAorCSAqIGRlZmluZSBvbmU7IHRoZW4gZnV0dXJlIGNsaWVudHMg Y2FuIHN0aWxsIGludGVyb3BlcmF0ZSB3aXRoIHRoaXMgc2VydmVyCisJICogaW1wbGVtZW50YXRp b24uICduJyBpcyB0aGUgZXhwZWN0ZWQgY2FzZS4KKwkgKi8KKwljYmluZF9mbGFnID0gKnA7CisJ c3dpdGNoIChjYmluZF9mbGFnKQorCXsKKwkJY2FzZSAncCc6CisJCQllcmVwb3J0KEVSUk9SLAor CQkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCisJCQkJCSBlcnJtc2co Im1hbGZvcm1lZCBPQVVUSEJFQVJFUiBtZXNzYWdlIiksCisJCQkJCSBlcnJkZXRhaWwoIlRoZSBz ZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBjaGFubmVsIGJpbmRpbmcgZm9yIE9BdXRoLCBidXQgdGhl IGNsaWVudCBtZXNzYWdlIGluY2x1ZGVzIGNoYW5uZWwgYmluZGluZyBkYXRhLiIpKSk7CisJCQli cmVhazsKKworCQljYXNlICd5JzogLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgJ24nOgorCQkJ cCsrOworCQkJaWYgKCpwICE9ICcsJykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNv ZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAorCQkJCQkJIGVycm1zZygibWFsZm9ybWVk IE9BVVRIQkVBUkVSIG1lc3NhZ2UiKSwKKwkJCQkJCSBlcnJkZXRhaWwoIkNvbW1hIGV4cGVjdGVk LCBidXQgZm91bmQgY2hhcmFjdGVyICVzLiIsCisJCQkJCQkJCSAgIHNhbml0aXplX2NoYXIoKnAp KSkpOworCQkJcCsrOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVyZXBvcnQoRVJST1Is CisJCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKKwkJCQkJIGVycm1z ZygibWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiKSwKKwkJCQkJIGVycmRldGFpbCgiVW5l eHBlY3RlZCBjaGFubmVsLWJpbmRpbmcgZmxhZyAlcy4iLAorCQkJCQkJCSAgIHNhbml0aXplX2No YXIoY2JpbmRfZmxhZykpKSk7CisJfQorCisJLyoKKwkgKiBGb3JiaWQgb3B0aW9uYWwgYXV0aHpp ZCAoYXV0aG9yaXphdGlvbiBpZGVudGl0eSkuICBXZSBkb24ndCBzdXBwb3J0IGl0LgorCSAqLwor CWlmICgqcCA9PSAnYScpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9G RUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCSBlcnJtc2coImNsaWVudCB1c2VzIGF1dGhvcml6 YXRpb24gaWRlbnRpdHksIGJ1dCBpdCBpcyBub3Qgc3VwcG9ydGVkIikpKTsKKwlpZiAoKnAgIT0g JywnKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklP TEFUSU9OKSwKKwkJCQkgZXJybXNnKCJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIpLAor CQkJCSBlcnJkZXRhaWwoIlVuZXhwZWN0ZWQgYXR0cmlidXRlICVzIGluIGNsaWVudC1maXJzdC1t ZXNzYWdlLiIsCisJCQkJCQkgICBzYW5pdGl6ZV9jaGFyKCpwKSkpKTsKKwlwKys7CisKKwkvKiBB bGwgcmVtYWluaW5nIGZpZWxkcyBhcmUgc2VwYXJhdGVkIGJ5IHRoZSBSRkMncyBrdnNlcCAoXHgw MSkuICovCisJaWYgKCpwICE9IEtWU0VQKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2Rl KEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKKwkJCQkgZXJybXNnKCJtYWxmb3JtZWQgT0FV VEhCRUFSRVIgbWVzc2FnZSIpLAorCQkJCSBlcnJkZXRhaWwoIktleS12YWx1ZSBzZXBhcmF0b3Ig ZXhwZWN0ZWQsIGJ1dCBmb3VuZCBjaGFyYWN0ZXIgJXMuIiwKKwkJCQkJCSAgIHNhbml0aXplX2No YXIoKnApKSkpOworCXArKzsKKworCWF1dGggPSBwYXJzZV9rdnBhaXJzX2Zvcl9hdXRoKCZwKTsK KwlpZiAoIWF1dGgpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9U T0NPTF9WSU9MQVRJT04pLAorCQkJCSBlcnJtc2coIm1hbGZvcm1lZCBPQVVUSEJFQVJFUiBtZXNz YWdlIiksCisJCQkJIGVycmRldGFpbCgiTWVzc2FnZSBkb2VzIG5vdCBjb250YWluIGFuIGF1dGgg dmFsdWUuIikpKTsKKworCS8qIFdlIHNob3VsZCBiZSBhdCB0aGUgZW5kIG9mIG91ciBtZXNzYWdl LiAqLworCWlmICgqcCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1BS T1RPQ09MX1ZJT0xBVElPTiksCisJCQkJIGVycm1zZygibWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1l c3NhZ2UiKSwKKwkJCQkgZXJyZGV0YWlsKCJNZXNzYWdlIGNvbnRhaW5zIGFkZGl0aW9uYWwgZGF0 YSBhZnRlciB0aGUgZmluYWwgdGVybWluYXRvci4iKSkpOworCisJaWYgKCF2YWxpZGF0ZShjdHgt PnBvcnQsIGF1dGgsIGxvZ2RldGFpbCkpCisJeworCQlnZW5lcmF0ZV9lcnJvcl9yZXNwb25zZShj dHgsIG91dHB1dCwgb3V0cHV0bGVuKTsKKworCQljdHgtPnN0YXRlID0gT0FVVEhfU1RBVEVfRVJS T1I7CisJCXJldHVybiBQR19TQVNMX0VYQ0hBTkdFX0NPTlRJTlVFOworCX0KKworCWN0eC0+c3Rh dGUgPSBPQVVUSF9TVEFURV9GSU5JU0hFRDsKKwlyZXR1cm4gUEdfU0FTTF9FWENIQU5HRV9TVUND RVNTOworfQorCisvKgorICogQ29udmVydCBhbiBhcmJpdHJhcnkgYnl0ZSB0byBwcmludGFibGUg Zm9ybS4gIEZvciBlcnJvciBtZXNzYWdlcy4KKyAqCisgKiBJZiBpdCdzIGEgcHJpbnRhYmxlIEFT Q0lJIGNoYXJhY3RlciwgcHJpbnQgaXQgYXMgYSBzaW5nbGUgY2hhcmFjdGVyLgorICogb3RoZXJ3 aXNlLCBwcmludCBpdCBpbiBoZXguCisgKgorICogVGhlIHJldHVybmVkIHBvaW50ZXIgcG9pbnRz IHRvIGEgc3RhdGljIGJ1ZmZlci4KKyAqLworc3RhdGljIGNoYXIgKgorc2FuaXRpemVfY2hhcihj aGFyIGMpCit7CisJc3RhdGljIGNoYXIgYnVmWzVdOworCisJaWYgKGMgPj0gMHgyMSAmJiBjIDw9 IDB4N0UpCisJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICInJWMnIiwgYyk7CisJZWxzZQor CQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiMHglMDJ4IiwgKHVuc2lnbmVkIGNoYXIpIGMp OworCXJldHVybiBidWY7Cit9CisKKy8qCisgKiBDb25zdW1lcyBhbGwga3ZwYWlycyBpbiBhbiBP QVVUSEJFQVJFUiBleGNoYW5nZSBtZXNzYWdlLiBJZiB0aGUgImF1dGgiIGtleSBpcworICogZm91 bmQsIGl0cyB2YWx1ZSBpcyByZXR1cm5lZC4KKyAqLworc3RhdGljIGNoYXIgKgorcGFyc2Vfa3Zw YWlyc19mb3JfYXV0aChjaGFyICoqaW5wdXQpCit7CisJY2hhciAgICpwb3MgPSAqaW5wdXQ7CisJ Y2hhciAgICphdXRoID0gTlVMTDsKKworCS8qCisJICogVGhlIHJlbGV2YW50IEFCTkYsIGZyb20g U2VjLiAzLjE6CisJICoKKwkgKiAgICAga3ZzZXAgICAgICAgICAgPSAleDAxCisJICogICAgIGtl eSAgICAgICAgICAgID0gMSooQUxQSEEpCisJICogICAgIHZhbHVlICAgICAgICAgID0gKihWQ0hB UiAvIFNQIC8gSFRBQiAvIENSIC8gTEYgKQorCSAqICAgICBrdnBhaXIgICAgICAgICA9IGtleSAi PSIgdmFsdWUga3ZzZXAKKwkgKiAgIDs7Z3MyLWhlYWRlciAgICAgPSBTZWUgUkZDIDU4MDEKKwkg KiAgICAgY2xpZW50LXJlc3AgICAgPSAoZ3MyLWhlYWRlciBrdnNlcCAqa3ZwYWlyIGt2c2VwKSAv IGt2c2VwCisJICoKKwkgKiBCeSB0aGUgdGltZSB3ZSByZWFjaCB0aGlzIGNvZGUsIHRoZSBnczIt aGVhZGVyIGFuZCBpbml0aWFsIGt2c2VwIGhhdmUKKwkgKiBhbHJlYWR5IGJlZW4gdmFsaWRhdGVk LiBXZSBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaXJzdCBrdnBhaXIuCisJICovCisK Kwl3aGlsZSAoKnBvcykKKwl7CisJCWNoYXIgICAqZW5kOworCQljaGFyICAgKnNlcDsKKwkJY2hh ciAgICprZXk7CisJCWNoYXIgICAqdmFsdWU7CisKKwkJLyoKKwkJICogRmluZCB0aGUgZW5kIG9m IHRoaXMga3ZwYWlyLiBOb3RlIHRoYXQgaW5wdXQgaXMgbnVsbC10ZXJtaW5hdGVkIGJ5CisJCSAq IHRoZSBTQVNMIGNvZGUsIHNvIHRoZSBzdHJjaHIoKSBpcyBib3VuZGVkLgorCQkgKi8KKwkJZW5k ID0gc3RyY2hyKHBvcywgS1ZTRVApOworCQlpZiAoIWVuZCkKKwkJCWVyZXBvcnQoRVJST1IsCisJ CQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKKwkJCQkJIGVycm1zZygi bWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiKSwKKwkJCQkJIGVycmRldGFpbCgiTWVzc2Fn ZSBjb250YWlucyBhbiB1bnRlcm1pbmF0ZWQga2V5L3ZhbHVlIHBhaXIuIikpKTsKKwkJKmVuZCA9 ICdcMCc7CisKKwkJaWYgKHBvcyA9PSBlbmQpCisJCXsKKwkJCS8qIEVtcHR5IGt2cGFpciwgc2ln bmlmeWluZyB0aGUgZW5kIG9mIHRoZSBsaXN0LiAqLworCQkJKmlucHV0ID0gcG9zICsgMTsKKwkJ CXJldHVybiBhdXRoOworCQl9CisKKwkJLyoKKwkJICogRmluZCB0aGUgZW5kIG9mIHRoZSBrZXkg bmFtZS4KKwkJICoKKwkJICogVE9ETyBmdXJ0aGVyIHZhbGlkYXRlIHRoZSBrZXkvdmFsdWUgZ3Jh bW1hcj8gZW1wdHkga2V5cywgYmFkIGNoYXJzLi4uCisJCSAqLworCQlzZXAgPSBzdHJjaHIocG9z LCAnPScpOworCQlpZiAoIXNlcCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVS UkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKKwkJCQkJIGVycm1zZygibWFsZm9ybWVkIE9BVVRI QkVBUkVSIG1lc3NhZ2UiKSwKKwkJCQkJIGVycmRldGFpbCgiTWVzc2FnZSBjb250YWlucyBhIGtl eSB3aXRob3V0IGEgdmFsdWUuIikpKTsKKwkJKnNlcCA9ICdcMCc7CisKKwkJLyogQm90aCBrZXkg YW5kIHZhbHVlIGFyZSBub3cgc2FmZWx5IHRlcm1pbmF0ZWQuICovCisJCWtleSA9IHBvczsKKwkJ dmFsdWUgPSBzZXAgKyAxOworCisJCWlmICghc3RyY21wKGtleSwgQVVUSF9LRVkpKQorCQl7CisJ CQlpZiAoYXV0aCkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9Q Uk9UT0NPTF9WSU9MQVRJT04pLAorCQkJCQkJIGVycm1zZygibWFsZm9ybWVkIE9BVVRIQkVBUkVS IG1lc3NhZ2UiKSwKKwkJCQkJCSBlcnJkZXRhaWwoIk1lc3NhZ2UgY29udGFpbnMgbXVsdGlwbGUg YXV0aCB2YWx1ZXMuIikpKTsKKworCQkJYXV0aCA9IHZhbHVlOworCQl9CisJCWVsc2UKKwkJewor CQkJLyoKKwkJCSAqIFRoZSBSRkMgYWxzbyBkZWZpbmVzIHRoZSBob3N0IGFuZCBwb3J0IGtleXMs IGJ1dCB0aGV5IGFyZSBub3QKKwkJCSAqIHJlcXVpcmVkIGZvciBPQVVUSEJFQVJFUiBhbmQgd2Ug ZG8gbm90IHVzZSB0aGVtLiBBbHNvLCBwZXIKKwkJCSAqIFNlYy4gMy4xLCBhbnkga2V5L3ZhbHVl IHBhaXJzIHdlIGRvbid0IHJlY29nbml6ZSBtdXN0IGJlIGlnbm9yZWQuCisJCQkgKi8KKwkJfQor CisJCS8qIE1vdmUgdG8gdGhlIG5leHQgcGFpci4gKi8KKwkJcG9zID0gZW5kICsgMTsKKwl9CisK KwllcmVwb3J0KEVSUk9SLAorCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04p LAorCQkJIGVycm1zZygibWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiKSwKKwkJCSBlcnJk ZXRhaWwoIk1lc3NhZ2UgZGlkIG5vdCBjb250YWluIGEgZmluYWwgdGVybWluYXRvci4iKSkpOwor CisJcmV0dXJuIE5VTEw7IC8qIHVucmVhY2hhYmxlICovCit9CisKK3N0YXRpYyB2b2lkCitnZW5l cmF0ZV9lcnJvcl9yZXNwb25zZShzdHJ1Y3Qgb2F1dGhfY3R4ICpjdHgsIGNoYXIgKipvdXRwdXQs IGludCAqb3V0cHV0bGVuKQoreworCVN0cmluZ0luZm9EYXRhCWJ1ZjsKKworCS8qCisJICogVGhl IGFkbWluIG5lZWRzIHRvIHNldCBhbiBpc3N1ZXIgYW5kIHNjb3BlIGZvciBPQXV0aCB0byB3b3Jr LiBUaGVyZSdzIG5vdAorCSAqIHJlYWxseSBhIHdheSB0byBoaWRlIHRoaXMgZnJvbSB0aGUgdXNl ciwgZWl0aGVyLCBiZWNhdXNlIHdlIGNhbid0IGNob29zZQorCSAqIGEgImRlZmF1bHQiIGlzc3Vl ciwgc28gYmUgaG9uZXN0IGluIHRoZSBmYWlsdXJlIG1lc3NhZ2UuCisJICoKKwkgKiBUT0RPOiBz ZWUgaWYgdGhlcmUncyBhIGJldHRlciBwbGFjZSB0byBmYWlsLCBlYXJsaWVyIHRoYW4gdGhpcy4K KwkgKi8KKwlpZiAoIWN0eC0+aXNzdWVyIHx8ICFjdHgtPnNjb3BlKQorCQllcmVwb3J0KEZBVEFM LAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5URVJOQUxfRVJST1IpLAorCQkJCSBlcnJtc2coIk9B dXRoIGlzIG5vdCBwcm9wZXJseSBjb25maWd1cmVkIGZvciB0aGlzIHVzZXIiKSwKKwkJCQkgZXJy ZGV0YWlsX2xvZygiVGhlIGlzc3VlciBhbmQgc2NvcGUgcGFyYW1ldGVycyBtdXN0IGJlIHNldCBp biBwZ19oYmEuY29uZi4iKSkpOworCisKKwlpbml0U3RyaW5nSW5mbygmYnVmKTsKKworCS8qCisJ ICogVE9ETzogSlNPTiBlc2NhcGluZworCSAqLworCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwKKwkJ InsgIgorCQkJIlwic3RhdHVzXCI6IFwiaW52YWxpZF90b2tlblwiLCAiCisJCQkiXCJvcGVuaWQt Y29uZmlndXJhdGlvblwiOiBcIiVzLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uXCIs IgorCQkJIlwic2NvcGVcIjogXCIlc1wiICIKKwkJIn0iLAorCQljdHgtPmlzc3VlciwgY3R4LT5z Y29wZSk7CisKKwkqb3V0cHV0ID0gYnVmLmRhdGE7CisJKm91dHB1dGxlbiA9IGJ1Zi5sZW47Cit9 CisKK3N0YXRpYyBib29sCit2YWxpZGF0ZShQb3J0ICpwb3J0LCBjb25zdCBjaGFyICphdXRoLCBj aGFyICoqbG9nZGV0YWlsKQoreworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYjY0X3NldCA9 ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIKKwkJCQkJCQkJCQkiQUJDREVGR0hJSktMTU5P UFFSU1RVVldYWVoiCisJCQkJCQkJCQkJIjAxMjM0NTY3ODktLl9+Ky8iOworCisJY29uc3QgY2hh ciAqdG9rZW47CisJc2l6ZV90CQlzcGFuOworCWludAkJCXJldDsKKworCS8qIFRPRE86IGhhbmRs ZSBsb2dkZXRhaWwgd2hlbiB0aGUgdGVzdCBmcmFtZXdvcmsgY2FuIGNoZWNrIGl0ICovCisKKwkv KgorCSAqIE9ubHkgQmVhcmVyIHRva2VucyBhcmUgYWNjZXB0ZWQuIFRoZSBBQk5GIGlzIGRlZmlu ZWQgaW4gUkZDIDY3NTAsIFNlYy4KKwkgKiAyLjE6CisJICoKKwkgKiAgICAgIGI2NHRva2VuICAg ID0gMSooIEFMUEhBIC8gRElHSVQgLworCSAqICAgICAgICAgICAgICAgICAgICAgICAgIi0iIC8g Ii4iIC8gIl8iIC8gIn4iIC8gIisiIC8gIi8iICkgKiI9IgorCSAqICAgICAgY3JlZGVudGlhbHMg PSAiQmVhcmVyIiAxKlNQIGI2NHRva2VuCisJICoKKwkgKiBUaGUgImNyZWRlbnRpYWxzIiBjb25z dHJ1Y3Rpb24gaXMgd2hhdCB3ZSByZWNlaXZlIGluIG91ciBhdXRoIHZhbHVlLgorCSAqCisJICog U2luY2UgdGhhdCBzcGVjIGlzIHN1Ym9yZGluYXRlIHRvIEhUVFAgKGkuZS4gdGhlIEhUVFAgQXV0 aG9yaXphdGlvbgorCSAqIGhlYWRlciBmb3JtYXQ7IFJGQyA3MjM1IFNlYy4gMiksIHRoZSAiQmVh cmVyIiBzY2hlbWUgc3RyaW5nIG11c3QgYmUKKwkgKiBjb21wYXJlZCBjYXNlLWluc2Vuc2l0aXZl bHkuIChUaGlzIGlzIG5vdCBtZW50aW9uZWQgaW4gUkZDIDY3NTAsIGJ1dCBpdCdzCisJICogcG9p bnRlZCBvdXQgaW4gUkZDIDc2MjggU2VjLiA0LikKKwkgKgorCSAqIFRPRE86IGhhbmRsZSB0aGUg QXV0aG9yaXphdGlvbiBzcGVjLCBSRkMgNzIzNSBTZWMuIDIuMS4KKwkgKi8KKwlpZiAoc3RybmNh c2VjbXAoYXV0aCwgQkVBUkVSX1NDSEVNRSwgc3RybGVuKEJFQVJFUl9TQ0hFTUUpKSkKKwkJcmV0 dXJuIGZhbHNlOworCisJLyogUHVsbCB0aGUgYmVhcmVyIHRva2VuIG91dCBvZiB0aGUgYXV0aCB2 YWx1ZS4gKi8KKwl0b2tlbiA9IGF1dGggKyBzdHJsZW4oQkVBUkVSX1NDSEVNRSk7CisKKwkvKiBT d2FsbG93IGFueSBhZGRpdGlvbmFsIHNwYWNlcy4gKi8KKwl3aGlsZSAoKnRva2VuID09ICcgJykK KwkJdG9rZW4rKzsKKworCS8qCisJICogQmVmb3JlIGludm9raW5nIHRoZSB2YWxpZGF0b3IgY29t bWFuZCwgc2FuaXR5LWNoZWNrIHRoZSB0b2tlbiBmb3JtYXQgdG8KKwkgKiBhdm9pZCBhbnkgaW5q ZWN0aW9uIGF0dGFja3MgbGF0ZXIgaW4gdGhlIGNoYWluLiBJbnZhbGlkIGZvcm1hdHMgYXJlCisJ ICogdGVjaG5pY2FsbHkgYSBwcm90b2NvbCB2aW9sYXRpb24sIGJ1dCBkb24ndCByZWZsZWN0IGFu eSBpbmZvcm1hdGlvbiBhYm91dAorCSAqIHRoZSBzZW5zaXRpdmUgQmVhcmVyIHRva2VuIGJhY2sg dG8gdGhlIGNsaWVudDsgbG9nIGF0IENPTU1FUlJPUiBpbnN0ZWFkLgorCSAqLworCisJLyogVG9r ZW5zIG11c3Qgbm90IGJlIGVtcHR5LiAqLworCWlmICghKnRva2VuKQorCXsKKwkJZXJlcG9ydChD T01NRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAorCQkJ CSBlcnJtc2coIm1hbGZvcm1lZCBPQVVUSEJFQVJFUiBtZXNzYWdlIiksCisJCQkJIGVycmRldGFp bCgiQmVhcmVyIHRva2VuIGlzIGVtcHR5LiIpKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkv KgorCSAqIE1ha2Ugc3VyZSB0aGUgdG9rZW4gY29udGFpbnMgb25seSBhbGxvd2VkIGNoYXJhY3Rl cnMuIFRva2VucyBtYXkgZW5kIHdpdGgKKwkgKiBhbnkgbnVtYmVyIG9mICc9JyBjaGFyYWN0ZXJz LgorCSAqLworCXNwYW4gPSBzdHJzcG4odG9rZW4sIGI2NF9zZXQpOworCXdoaWxlICh0b2tlbltz cGFuXSA9PSAnPScpCisJCXNwYW4rKzsKKworCWlmICh0b2tlbltzcGFuXSAhPSAnXDAnKQorCXsK KwkJLyoKKwkJICogVGhpcyBlcnJvciBtZXNzYWdlIGNvdWxkIGJlIG1vcmUgaGVscGZ1bCBieSBw cmludGluZyB0aGUgcHJvYmxlbWF0aWMKKwkJICogY2hhcmFjdGVyKHMpLCBidXQgdGhhdCdkIGJl IGEgYml0IGxpa2UgcHJpbnRpbmcgYSBwaWVjZSBvZiBzb21lb25lJ3MKKwkJICogcGFzc3dvcmQg aW50byB0aGUgbG9ncy4KKwkJICovCisJCWVyZXBvcnQoQ09NTUVSUk9SLAorCQkJCShlcnJjb2Rl KEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKKwkJCQkgZXJybXNnKCJtYWxmb3JtZWQgT0FV VEhCRUFSRVIgbWVzc2FnZSIpLAorCQkJCSBlcnJkZXRhaWwoIkJlYXJlciB0b2tlbiBpcyBub3Qg aW4gdGhlIGNvcnJlY3QgZm9ybWF0LiIpKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBI YXZlIHRoZSB2YWxpZGF0b3IgY2hlY2sgdGhlIHRva2VuLiAqLworCWlmICghcnVuX3ZhbGlkYXRv cl9jb21tYW5kKHBvcnQsIHRva2VuKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHBvcnQtPmhi YS0+b2F1dGhfc2tpcF91c2VybWFwKQorCXsKKwkJLyoKKwkJICogSWYgdGhlIHZhbGlkYXRvciBp cyBvdXIgYXV0aG9yaXphdGlvbiBhdXRob3JpdHksIHdlJ3JlIGRvbmUuCisJCSAqIEF1dGhlbnRp Y2F0aW9uIG1heSBvciBtYXkgbm90IGhhdmUgYmVlbiBwZXJmb3JtZWQgZGVwZW5kaW5nIG9uIHRo ZQorCQkgKiB2YWxpZGF0b3IgaW1wbGVtZW50YXRpb247IGFsbCB0aGF0IG1hdHRlcnMgaXMgdGhh dCB0aGUgdmFsaWRhdG9yIHNheXMKKwkJICogdGhlIHVzZXIgY2FuIGxvZyBpbiB3aXRoIHRoZSB0 YXJnZXQgcm9sZS4KKwkJICovCisJCXJldHVybiB0cnVlOworCX0KKworCS8qIE1ha2Ugc3VyZSB0 aGUgdmFsaWRhdG9yIGF1dGhlbnRpY2F0ZWQgdGhlIHVzZXIuICovCisJaWYgKCFwb3J0LT5hdXRo bl9pZCkKKwl7CisJCS8qIFRPRE86IHVzZSBsb2dkZXRhaWw7IHJlZHVjZSBtZXNzYWdlIGR1cGxp Y2F0aW9uICovCisJCWVyZXBvcnQoTE9HLAorCQkJCShlcnJtc2coIk9BdXRoIGJlYXJlciBhdXRo ZW50aWNhdGlvbiBmYWlsZWQgZm9yIHVzZXIgXCIlc1wiOiB2YWxpZGF0b3IgcHJvdmlkZWQgbm8g aWRlbnRpdHkiLAorCQkJCQkJcG9ydC0+dXNlcl9uYW1lKSkpOworCQlyZXR1cm4gZmFsc2U7CisJ fQorCisJLyogRmluYWxseSwgY2hlY2sgdGhlIHVzZXIgbWFwLiAqLworCXJldCA9IGNoZWNrX3Vz ZXJtYXAocG9ydC0+aGJhLT51c2VybWFwLCBwb3J0LT51c2VyX25hbWUsIHBvcnQtPmF1dGhuX2lk LAorCQkJCQkJZmFsc2UpOworCXJldHVybiAocmV0ID09IFNUQVRVU19PSyk7Cit9CisKK3N0YXRp YyBib29sCitydW5fdmFsaWRhdG9yX2NvbW1hbmQoUG9ydCAqcG9ydCwgY29uc3QgY2hhciAqdG9r ZW4pCit7CisJYm9vbAkJc3VjY2VzcyA9IGZhbHNlOworCWludAkJCXJjOworCWludAkJCXBpcGVm ZFsyXTsKKwlpbnQJCQlyZmQgPSAtMTsKKwlpbnQJCQl3ZmQgPSAtMTsKKworCVN0cmluZ0luZm9E YXRhIGNvbW1hbmQgPSB7IDAgfTsKKwljaGFyCSAgICpwOworCUZJTEUJICAgKmZoID0gTlVMTDsK KworCXNzaXplX3QJCXdyaXR0ZW47CisJY2hhcgkgICAqbGluZSA9IE5VTEw7CisJc2l6ZV90CQlz aXplID0gMDsKKwlzc2l6ZV90CQlsZW47CisKKwlBc3NlcnQob2F1dGhfdmFsaWRhdG9yX2NvbW1h bmQpOworCisJaWYgKCFvYXV0aF92YWxpZGF0b3JfY29tbWFuZFswXSkKKwl7CisJCWVyZXBvcnQo Q09NTUVSUk9SLAorCQkJCShlcnJtc2coIm9hdXRoX3ZhbGlkYXRvcl9jb21tYW5kIGlzIG5vdCBz ZXQiKSwKKwkJCQkgZXJyaGludCgiVG8gYWxsb3cgT0F1dGggYXV0aGVudGljYXRlZCBjb25uZWN0 aW9ucywgc2V0ICIKKwkJCQkJCSAib2F1dGhfdmFsaWRhdG9yX2NvbW1hbmQgaW4gcG9zdGdyZXNx bC5jb25mLiIpKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKgorCSAqIFNpbmNlIHBvcGVu KCkgaXMgdW5pZGlyZWN0aW9uYWwsIG9wZW4gdXAgYSBwaXBlIGZvciB0aGUgb3RoZXIgZGlyZWN0 aW9uLgorCSAqIFVzZSBDTE9FWEVDIHRvIGVuc3VyZSB0aGF0IG91ciB3cml0ZSBlbmQgZG9lc24n dCBhY2NpZGVudGFsbHkgZ2V0IGNvcGllZAorCSAqIGludG8gY2hpbGQgcHJvY2Vzc2VzLCB3aGlj aCB3b3VsZCBwcmV2ZW50IHVzIGZyb20gY2xvc2luZyBpdCBjbGVhbmx5LgorCSAqCisJICogWFhY IHRoaXMgaXMgdWdseS4gV2Ugc2hvdWxkIGp1c3QgcmVhZCBmcm9tIHRoZSBjaGlsZCBwcm9jZXNz J3Mgc3Rkb3V0LAorCSAqIGJ1dCB0aGF0J3MgYSBsb3QgbW9yZSBjb2RlLgorCSAqIFhYWCBieSBi eXBhc3NpbmcgdGhlIHBvcGVuIEFQSSwgd2Ugb3BlbiB0aGUgcG90ZW50aWFsIG9mIHByb2Nlc3MK KwkgKiBkZWFkbG9jay4gQ2xlYXJseSBkb2N1bWVudCBjaGlsZCBwcm9jZXNzIHJlcXVpcmVtZW50 cyAoaS5lLiB0aGUgY2hpbGQKKwkgKiBNVVNUIHJlYWQgYWxsIGRhdGEgb2ZmIG9mIHRoZSBwaXBl IGJlZm9yZSB3cml0aW5nIGFueXRoaW5nKS4KKwkgKiBUT0RPOiBwb3J0IHRvIFdpbmRvd3MgdXNp bmcgX3BpcGUoKS4KKwkgKi8KKwlyYyA9IHBpcGUyKHBpcGVmZCwgT19DTE9FWEVDKTsKKwlpZiAo cmMgPCAwKQorCXsKKwkJZXJlcG9ydChDT01NRVJST1IsCisJCQkJKGVycmNvZGVfZm9yX2ZpbGVf YWNjZXNzKCksCisJCQkJIGVycm1zZygiY291bGQgbm90IGNyZWF0ZSBjaGlsZCBwaXBlOiAlbSIp KSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZmQgPSBwaXBlZmRbMF07CisJd2ZkID0gcGlw ZWZkWzFdOworCisJLyogQWxsb3cgdGhlIHJlYWQgcGlwZSBiZSBwYXNzZWQgdG8gdGhlIGNoaWxk LiAqLworCWlmICghdW5zZXRfY2xvZXhlYyhyZmQpKQorCXsKKwkJLyogZXJyb3IgbWVzc2FnZSB3 YXMgYWxyZWFkeSBsb2dnZWQgKi8KKwkJZ290byBjbGVhbnVwOworCX0KKworCS8qCisJICogQ29u c3RydWN0IHRoZSBjb21tYW5kLCBzdWJzdGl0dXRpbmcgYW55IHJlY29nbml6ZWQgJS1zcGVjaWZp ZXJzOgorCSAqCisJICogICAlZjogdGhlIGZpbGUgZGVzY3JpcHRvciBvZiB0aGUgaW5wdXQgcGlw ZQorCSAqICAgJXI6IHRoZSByb2xlIHRoYXQgdGhlIGNsaWVudCB3YW50cyB0byBhc3N1bWUgKHBv cnQtPnVzZXJfbmFtZSkKKwkgKiAgICUlOiBhIGxpdGVyYWwgJyUnCisJICovCisJaW5pdFN0cmlu Z0luZm8oJmNvbW1hbmQpOworCisJZm9yIChwID0gb2F1dGhfdmFsaWRhdG9yX2NvbW1hbmQ7ICpw OyBwKyspCisJeworCQlpZiAocFswXSA9PSAnJScpCisJCXsKKwkJCXN3aXRjaCAocFsxXSkKKwkJ CXsKKwkJCQljYXNlICdmJzoKKwkJCQkJYXBwZW5kU3RyaW5nSW5mbygmY29tbWFuZCwgIiVkIiwg cmZkKTsKKwkJCQkJcCsrOworCQkJCQlicmVhazsKKwkJCQljYXNlICdyJzoKKwkJCQkJLyoKKwkJ CQkJICogVE9ETzogZGVjaWRlIGhvdyB0aGlzIHN0cmluZyBzaG91bGQgYmUgZXNjYXBlZC4gVGhl IHJvbGUKKwkJCQkJICogaXMgY29udHJvbGxlZCBieSB0aGUgY2xpZW50LCBzbyBpZiB3ZSBkb24n dCBlc2NhcGUgaXQsCisJCQkJCSAqIGNvbW1hbmQgaW5qZWN0aW9ucyBhcmUgaW5ldml0YWJsZS4K KwkJCQkJICoKKwkJCQkJICogVGhpcyBpcyBwcm9iYWJseSBhbiBpbmRpY2F0aW9uIHRoYXQgdGhl IHJvbGUgbmFtZSBuZWVkcworCQkJCQkgKiB0byBiZSBjb21tdW5pY2F0ZWQgdG8gdGhlIHZhbGlk YXRvciBwcm9jZXNzIGluIHNvbWUgb3RoZXIKKwkJCQkJICogd2F5LiBGb3IgdGhpcyBwcm9vZiBv ZiBjb25jZXB0LCBqdXN0IGJlIGluY3JlZGlibHkgc3RyaWN0CisJCQkJCSAqIGFib3V0IHRoZSBj aGFyYWN0ZXJzIHRoYXQgYXJlIGFsbG93ZWQgaW4gdXNlciBuYW1lcy4KKwkJCQkJICovCisJCQkJ CWlmICghdXNlcm5hbWVfb2tfZm9yX3NoZWxsKHBvcnQtPnVzZXJfbmFtZSkpCisJCQkJCQlnb3Rv IGNsZWFudXA7CisKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY29tbWFuZCwgcG9ydC0+ dXNlcl9uYW1lKTsKKwkJCQkJcCsrOworCQkJCQlicmVhazsKKwkJCQljYXNlICclJzoKKwkJCQkJ YXBwZW5kU3RyaW5nSW5mb0NoYXIoJmNvbW1hbmQsICclJyk7CisJCQkJCXArKzsKKwkJCQkJYnJl YWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmNvbW1hbmQsIHBb MF0pOworCQkJfQorCQl9CisJCWVsc2UKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZjb21tYW5k LCBwWzBdKTsKKwl9CisKKwkvKiBFeGVjdXRlIHRoZSBjb21tYW5kLiAqLworCWZoID0gT3BlblBp cGVTdHJlYW0oY29tbWFuZC5kYXRhLCAicmUiKTsKKwkvKiBUT0RPOiBoYW5kbGUgZmFpbHVyZXMg Ki8KKworCS8qIFdlIGRvbid0IG5lZWQgdGhlIHJlYWQgZW5kIG9mIHRoZSBwaXBlIGFueW1vcmUu ICovCisJY2xvc2UocmZkKTsKKwlyZmQgPSAtMTsKKworCS8qIEdpdmUgdGhlIGNvbW1hbmQgdGhl IHRva2VuIHRvIHZhbGlkYXRlLiAqLworCXdyaXR0ZW4gPSB3cml0ZSh3ZmQsIHRva2VuLCBzdHJs ZW4odG9rZW4pKTsKKwlpZiAod3JpdHRlbiAhPSBzdHJsZW4odG9rZW4pKQorCXsKKwkJLyogVE9E TyBtdXN0IGxvb3AgZm9yIHNob3J0IHdyaXRlcywgRUlOVFIgZXQgYWwgKi8KKwkJZXJlcG9ydChD T01NRVJST1IsCisJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJIGVycm1zZygi Y291bGQgbm90IHdyaXRlIHRva2VuIHRvIGNoaWxkIHBpcGU6ICVtIikpKTsKKwkJZ290byBjbGVh bnVwOworCX0KKworCWNsb3NlKHdmZCk7CisJd2ZkID0gLTE7CisKKwkvKgorCSAqIFJlYWQgdGhl IGNvbW1hbmQncyByZXNwb25zZS4KKwkgKgorCSAqIFRPRE86IGdldGxpbmUoKSBpcyBwcm9iYWJs eSB0b28gbmV3IHRvIHVzZSwgdW5mb3J0dW5hdGVseS4KKwkgKiBUT0RPOiBsb29wIG92ZXIgYWxs IGxpbmVzCisJICovCisJaWYgKChsZW4gPSBnZXRsaW5lKCZsaW5lLCAmc2l6ZSwgZmgpKSA+PSAw KQorCXsKKwkJLyogVE9ETzogZmFpbCBpZiB0aGUgYXV0aG5faWQgZG9lc24ndCBlbmQgd2l0aCBh IG5ld2xpbmUgKi8KKwkJaWYgKGxlbiA+IDApCisJCQlsaW5lW2xlbiAtIDFdID0gJ1wwJzsKKwor CQlzZXRfYXV0aG5faWQocG9ydCwgbGluZSk7CisJfQorCWVsc2UgaWYgKGZlcnJvcihmaCkpCisJ eworCQllcmVwb3J0KENPTU1FUlJPUiwKKwkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwK KwkJCQkgZXJybXNnKCJjb3VsZCBub3QgcmVhZCBmcm9tIGNvbW1hbmQgXCIlc1wiOiAlbSIsCisJ CQkJCQljb21tYW5kLmRhdGEpKSk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkvKiBNYWtlIHN1 cmUgdGhlIGNvbW1hbmQgZXhpdHMgY2xlYW5seS4gKi8KKwlpZiAoIWNoZWNrX2V4aXQoJmZoLCBj b21tYW5kLmRhdGEpKQorCXsKKwkJLyogZXJyb3IgbWVzc2FnZSBhbHJlYWR5IGxvZ2dlZCAqLwor CQlnb3RvIGNsZWFudXA7CisJfQorCisJLyogRG9uZS4gKi8KKwlzdWNjZXNzID0gdHJ1ZTsKKwor Y2xlYW51cDoKKwlpZiAobGluZSkKKwkJZnJlZShsaW5lKTsKKworCS8qCisJICogSW4gdGhlIHN1 Y2Nlc3NmdWwgY2FzZSwgdGhlIHBpcGUgZmRzIGFyZSBhbHJlYWR5IGNsb3NlZC4gRm9yIHRoZSBl cnJvcgorCSAqIGNhc2UsIGFsd2F5cyBjbG9zZSBvdXQgdGhlIHBpcGUgYmVmb3JlIHdhaXRpbmcg Zm9yIHRoZSBjb21tYW5kLCB0bworCSAqIHByZXZlbnQgZGVhZGxvY2suCisJICovCisJaWYgKHJm ZCA+PSAwKQorCQljbG9zZShyZmQpOworCWlmICh3ZmQgPj0gMCkKKwkJY2xvc2Uod2ZkKTsKKwor CWlmIChmaCkKKwl7CisJCUFzc2VydCghc3VjY2Vzcyk7CisJCWNoZWNrX2V4aXQoJmZoLCBjb21t YW5kLmRhdGEpOworCX0KKworCWlmIChjb21tYW5kLmRhdGEpCisJCXBmcmVlKGNvbW1hbmQuZGF0 YSk7CisKKwlyZXR1cm4gc3VjY2VzczsKK30KKworc3RhdGljIGJvb2wKK2NoZWNrX2V4aXQoRklM RSAqKmZoLCBjb25zdCBjaGFyICpjb21tYW5kKQoreworCWludCByYzsKKworCXJjID0gQ2xvc2VQ aXBlU3RyZWFtKCpmaCk7CisJKmZoID0gTlVMTDsKKworCWlmIChyYyA9PSAtMSkKKwl7CisJCS8q IHBjbG9zZSgpIGl0c2VsZiBmYWlsZWQuICovCisJCWVyZXBvcnQoQ09NTUVSUk9SLAorCQkJCShl cnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCBjbG9zZSBw aXBlIHRvIGNvbW1hbmQgXCIlc1wiOiAlbSIsCisJCQkJCQljb21tYW5kKSkpOworCX0KKwllbHNl IGlmIChyYyAhPSAwKQorCXsKKwkJY2hhciAqcmVhc29uID0gd2FpdF9yZXN1bHRfdG9fc3RyKHJj KTsKKworCQllcmVwb3J0KENPTU1FUlJPUiwKKwkJCQkoZXJybXNnKCJmYWlsZWQgdG8gZXhlY3V0 ZSBjb21tYW5kIFwiJXNcIjogJXMiLAorCQkJCQkJY29tbWFuZCwgcmVhc29uKSkpOworCisJCXBm cmVlKHJlYXNvbik7CisJfQorCisJcmV0dXJuIChyYyA9PSAwKTsKK30KKworc3RhdGljIGJvb2wK K3Vuc2V0X2Nsb2V4ZWMoaW50IGZkKQoreworCWludAkJCWZsYWdzOworCWludAkJCXJjOworCisJ ZmxhZ3MgPSBmY250bChmZCwgRl9HRVRGRCk7CisJaWYgKGZsYWdzID09IC0xKQorCXsKKwkJZXJl cG9ydChDT01NRVJST1IsCisJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJIGVy cm1zZygiY291bGQgbm90IGdldCBmZCBmbGFncyBmb3IgY2hpbGQgcGlwZTogJW0iKSkpOworCQly ZXR1cm4gZmFsc2U7CisJfQorCisJcmMgPSBmY250bChmZCwgRl9TRVRGRCwgZmxhZ3MgJiB+RkRf Q0xPRVhFQyk7CisJaWYgKHJjIDwgMCkKKwl7CisJCWVyZXBvcnQoQ09NTUVSUk9SLAorCQkJCShl cnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCB1bnNldCBG RF9DTE9FWEVDIGZvciBjaGlsZCBwaXBlOiAlbSIpKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisK KwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIFhYWCBUaGlzIHNob3VsZCBnbyBhd2F5IGV2ZW50 dWFsbHkgYW5kIGJlIHJlcGxhY2VkIHdpdGggZWl0aGVyIGEgcHJvcGVyCisgKiBlc2NhcGUgb3Ig YSBkaWZmZXJlbnQgc3RyYXRlZ3kgZm9yIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdmFsaWRhdG9y IGNvbW1hbmQuCisgKi8KK3N0YXRpYyBib29sCit1c2VybmFtZV9va19mb3Jfc2hlbGwoY29uc3Qg Y2hhciAqdXNlcm5hbWUpCit7CisJLyogVGhpcyBzZXQgaXMgYm9ycm93ZWQgZnJvbSBmZV91dGls cycgYXBwZW5kU2hlbGxTdHJpbmdOb0Vycm9yKCkuICovCisJc3RhdGljIGNvbnN0IGNoYXIgKiBj b25zdCBhbGxvd2VkID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgorCQkJCQkJCQkJCSJB QkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIKKwkJCQkJCQkJCQkiMDEyMzQ1Njc4OS1fLi86IjsK KwlzaXplX3QJc3BhbjsKKworCUFzc2VydCh1c2VybmFtZSAmJiB1c2VybmFtZVswXSk7IC8qIHNo b3VsZCBoYXZlIGFscmVhZHkgYmVlbiBjaGVja2VkICovCisKKwlzcGFuID0gc3Ryc3BuKHVzZXJu YW1lLCBhbGxvd2VkKTsKKwlpZiAodXNlcm5hbWVbc3Bhbl0gIT0gJ1wwJykKKwl7CisJCWVyZXBv cnQoQ09NTUVSUk9SLAorCQkJCShlcnJtc2coIlBvc3RncmVTUUwgdXNlciBuYW1lIGNvbnRhaW5z IHVuc2FmZSBjaGFyYWN0ZXJzIGFuZCBjYW5ub3QgYmUgcGFzc2VkIHRvIHRoZSBPQXV0aCB2YWxp ZGF0b3IiKSkpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9saWJwcS9hdXRoLXNhc2wuYyBiL3NyYy9iYWNrZW5kL2xpYnBx L2F1dGgtc2FzbC5jCmluZGV4IDZjZmQ5MGZhMjEuLmY2YzQ5YTRkZTUgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2xpYnBxL2F1dGgtc2FzbC5jCisrKyBiL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGgt c2FzbC5jCkBAIC0yMCwxNCArMjAsNiBAQAogI2luY2x1ZGUgImxpYnBxL3BxZm9ybWF0LmgiCiAj aW5jbHVkZSAibGlicHEvc2FzbC5oIgogCi0vKgotICogTWF4aW11bSBhY2NlcHRlZCBzaXplIG9m IFNBU0wgbWVzc2FnZXMuCi0gKgotICogVGhlIG1lc3NhZ2VzIHRoYXQgdGhlIHNlcnZlciBvciBs aWJwcSBnZW5lcmF0ZSBhcmUgbXVjaCBzbWFsbGVyIHRoYW4gdGhpcywKLSAqIGJ1dCBoYXZlIHNv bWUgaGVhZHJvb20uCi0gKi8KLSNkZWZpbmUgUEdfTUFYX1NBU0xfTUVTU0FHRV9MRU5HVEgJMTAy NAotCiAvKgogICogUGVyZm9ybSBhIFNBU0wgZXhjaGFuZ2Ugd2l0aCBhIGxpYnBxIGNsaWVudCwg dXNpbmcgYSBzcGVjaWZpYyBtZWNoYW5pc20KICAqIGltcGxlbWVudGF0aW9uLgpAQCAtMTAzLDcg Kzk1LDcgQEAgQ2hlY2tTQVNMQXV0aChjb25zdCBwZ19iZV9zYXNsX21lY2ggKm1lY2gsIFBvcnQg KnBvcnQsIGNoYXIgKnNoYWRvd19wYXNzLAogCiAJCS8qIEdldCB0aGUgYWN0dWFsIFNBU0wgbWVz c2FnZSAqLwogCQlpbml0U3RyaW5nSW5mbygmYnVmKTsKLQkJaWYgKHBxX2dldG1lc3NhZ2UoJmJ1 ZiwgUEdfTUFYX1NBU0xfTUVTU0FHRV9MRU5HVEgpKQorCQlpZiAocHFfZ2V0bWVzc2FnZSgmYnVm LCBtZWNoLT5tYXhfbWVzc2FnZV9sZW5ndGgpKQogCQl7CiAJCQkvKiBFT0YgLSBwcV9nZXRtZXNz YWdlIGFscmVhZHkgbG9nZ2VkIGVycm9yICovCiAJCQlwZnJlZShidWYuZGF0YSk7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9saWJwcS9hdXRoLXNjcmFtLmMgYi9zcmMvYmFja2VuZC9saWJwcS9h dXRoLXNjcmFtLmMKaW5kZXggOWRmOGYxNzgzNy4uNWJiMDM4OGMwMSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvbGlicHEvYXV0aC1zY3JhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGgt c2NyYW0uYwpAQCAtMTE3LDcgKzExNyw5IEBAIHN0YXRpYyBpbnQJc2NyYW1fZXhjaGFuZ2Uodm9p ZCAqb3BhcSwgY29uc3QgY2hhciAqaW5wdXQsIGludCBpbnB1dGxlbiwKIGNvbnN0IHBnX2JlX3Nh c2xfbWVjaCBwZ19iZV9zY3JhbV9tZWNoID0gewogCXNjcmFtX2dldF9tZWNoYW5pc21zLAogCXNj cmFtX2luaXQsCi0Jc2NyYW1fZXhjaGFuZ2UKKwlzY3JhbV9leGNoYW5nZSwKKworCVBHX01BWF9T QVNMX01FU1NBR0VfTEVOR1RICiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbGli cHEvYXV0aC5jIGIvc3JjL2JhY2tlbmQvbGlicHEvYXV0aC5jCmluZGV4IDhjYzIzZWY3ZmIuLmZi Y2MyYzU1YjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGguYworKysgYi9zcmMv YmFja2VuZC9saWJwcS9hdXRoLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJsaWJwcS9h dXRoLmgiCiAjaW5jbHVkZSAibGlicHEvY3J5cHQuaCIKICNpbmNsdWRlICJsaWJwcS9saWJwcS5o IgorI2luY2x1ZGUgImxpYnBxL29hdXRoLmgiCiAjaW5jbHVkZSAibGlicHEvcHFmb3JtYXQuaCIK ICNpbmNsdWRlICJsaWJwcS9zYXNsLmgiCiAjaW5jbHVkZSAibGlicHEvc2NyYW0uaCIKQEAgLTQ3 LDcgKzQ4LDYgQEAKICAqLwogc3RhdGljIHZvaWQgYXV0aF9mYWlsZWQoUG9ydCAqcG9ydCwgaW50 IHN0YXR1cywgY2hhciAqbG9nZGV0YWlsKTsKIHN0YXRpYyBjaGFyICpyZWN2X3Bhc3N3b3JkX3Bh Y2tldChQb3J0ICpwb3J0KTsKLXN0YXRpYyB2b2lkIHNldF9hdXRobl9pZChQb3J0ICpwb3J0LCBj b25zdCBjaGFyICppZCk7CiAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMDUsMjIgKzIwNSw2IEBAIHN0YXRp YyBpbnQJQ2hlY2tSQURJVVNBdXRoKFBvcnQgKnBvcnQpOwogc3RhdGljIGludAlQZXJmb3JtUmFk aXVzVHJhbnNhY3Rpb24oY29uc3QgY2hhciAqc2VydmVyLCBjb25zdCBjaGFyICpzZWNyZXQsIGNv bnN0IGNoYXIgKnBvcnRzdHIsIGNvbnN0IGNoYXIgKmlkZW50aWZpZXIsIGNvbnN0IGNoYXIgKnVz ZXJfbmFtZSwgY29uc3QgY2hhciAqcGFzc3dkKTsKIAogCi0vKgotICogTWF4aW11bSBhY2NlcHRl ZCBzaXplIG9mIEdTUyBhbmQgU1NQSSBhdXRoZW50aWNhdGlvbiB0b2tlbnMuCi0gKiBXZSBhbHNv IHVzZSB0aGlzIGFzIGEgbGltaXQgb24gb3JkaW5hcnkgcGFzc3dvcmQgcGFja2V0IGxlbmd0aHMu Ci0gKgotICogS2VyYmVyb3MgdGlja2V0cyBhcmUgdXN1YWxseSBxdWl0ZSBzbWFsbCwgYnV0IHRo ZSBUR1RzIGlzc3VlZCBieSBXaW5kb3dzCi0gKiBkb21haW4gY29udHJvbGxlcnMgaW5jbHVkZSBh biBhdXRob3JpemF0aW9uIGZpZWxkIGtub3duIGFzIHRoZSBQcml2aWxlZ2UKLSAqIEF0dHJpYnV0 ZSBDZXJ0aWZpY2F0ZSAoUEFDKSwgd2hpY2ggY29udGFpbnMgdGhlIHVzZXIncyBXaW5kb3dzIHBl cm1pc3Npb25zCi0gKiAoZ3JvdXAgbWVtYmVyc2hpcHMgZXRjLikuIFRoZSBQQUMgaXMgY29waWVk IGludG8gYWxsIHRpY2tldHMgb2J0YWluZWQgb24KLSAqIHRoZSBiYXNpcyBvZiB0aGlzIFRHVCAo ZXZlbiB0aG9zZSBpc3N1ZWQgYnkgVW5peCByZWFsbXMgd2hpY2ggdGhlIFdpbmRvd3MKLSAqIHJl YWxtIHRydXN0cyksIGFuZCBjYW4gYmUgc2V2ZXJhbCBrQiBpbiBzaXplLiBUaGUgbWF4aW11bSB0 b2tlbiBzaXplCi0gKiBhY2NlcHRlZCBieSBXaW5kb3dzIHN5c3RlbXMgaXMgZGV0ZXJtaW5lZCBi eSB0aGUgTWF4QXV0aFRva2VuIFdpbmRvd3MKLSAqIHJlZ2lzdHJ5IHNldHRpbmcuIE1pY3Jvc29m dCByZWNvbW1lbmRzIHRoYXQgaXQgaXMgbm90IHNldCBoaWdoZXIgdGhhbgotICogNjU1MzUgYnl0 ZXMsIHNvIHRoYXQgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgbGltaXQgZm9yIHVzIGFzIHdlbGwu Ci0gKi8KLSNkZWZpbmUgUEdfTUFYX0FVVEhfVE9LRU5fTEVOR1RICTY1NTM1Ci0KIC8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogICogR2xvYmFsIGF1dGhlbnRpY2F0aW9uIGZ1bmN0aW9ucwogICotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zMDks NiArMjkzLDkgQEAgYXV0aF9mYWlsZWQoUG9ydCAqcG9ydCwgaW50IHN0YXR1cywgY2hhciAqbG9n ZGV0YWlsKQogCQljYXNlIHVhUkFESVVTOgogCQkJZXJyc3RyID0gZ2V0dGV4dF9ub29wKCJSQURJ VVMgYXV0aGVudGljYXRpb24gZmFpbGVkIGZvciB1c2VyIFwiJXNcIiIpOwogCQkJYnJlYWs7CisJ CWNhc2UgdWFPQXV0aDoKKwkJCWVycnN0ciA9IGdldHRleHRfbm9vcCgiT0F1dGggYmVhcmVyIGF1 dGhlbnRpY2F0aW9uIGZhaWxlZCBmb3IgdXNlciBcIiVzXCIiKTsKKwkJCWJyZWFrOwogCQlkZWZh dWx0OgogCQkJZXJyc3RyID0gZ2V0dGV4dF9ub29wKCJhdXRoZW50aWNhdGlvbiBmYWlsZWQgZm9y IHVzZXIgXCIlc1wiOiBpbnZhbGlkIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCIpOwogCQkJYnJlYWs7 CkBAIC0zNDMsNyArMzMwLDcgQEAgYXV0aF9mYWlsZWQoUG9ydCAqcG9ydCwgaW50IHN0YXR1cywg Y2hhciAqbG9nZGV0YWlsKQogICogbGlmZXRpbWUgb2YgdGhlIFBvcnQsIHNvIGl0IGlzIHNhZmUg dG8gcGFzcyBhIHN0cmluZyB0aGF0IGlzIG1hbmFnZWQgYnkgYW4KICAqIGV4dGVybmFsIGxpYnJh cnkuCiAgKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBzZXRfYXV0aG5faWQoUG9ydCAqcG9ydCwgY29u c3QgY2hhciAqaWQpCiB7CiAJQXNzZXJ0KGlkKTsKQEAgLTYyOCw2ICs2MTUsOSBAQCBDbGllbnRB dXRoZW50aWNhdGlvbihQb3J0ICpwb3J0KQogCQljYXNlIHVhVHJ1c3Q6CiAJCQlzdGF0dXMgPSBT VEFUVVNfT0s7CiAJCQlicmVhazsKKwkJY2FzZSB1YU9BdXRoOgorCQkJc3RhdHVzID0gQ2hlY2tT QVNMQXV0aCgmcGdfYmVfb2F1dGhfbWVjaCwgcG9ydCwgTlVMTCwgTlVMTCk7CisJCQlicmVhazsK IAl9CiAKIAlpZiAoKHN0YXR1cyA9PSBTVEFUVVNfT0sgJiYgcG9ydC0+aGJhLT5jbGllbnRjZXJ0 ID09IGNsaWVudENlcnRGdWxsKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbGlicHEvaGJhLmMg Yi9zcmMvYmFja2VuZC9saWJwcS9oYmEuYwppbmRleCAzYmU4Nzc4ZDIxLi45ODE0NzcwMGRkIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9saWJwcS9oYmEuYworKysgYi9zcmMvYmFja2VuZC9saWJw cS9oYmEuYwpAQCAtMTM0LDcgKzEzNCw4IEBAIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBVc2Vy QXV0aE5hbWVbXSA9CiAJImxkYXAiLAogCSJjZXJ0IiwKIAkicmFkaXVzIiwKLQkicGVlciIKKwki cGVlciIsCisJIm9hdXRoIiwKIH07CiAKIApAQCAtMTM5OSw2ICsxNDAwLDggQEAgcGFyc2VfaGJh X2xpbmUoVG9rZW5pemVkTGluZSAqdG9rX2xpbmUsIGludCBlbGV2ZWwpCiAjZW5kaWYKIAllbHNl IGlmIChzdHJjbXAodG9rZW4tPnN0cmluZywgInJhZGl1cyIpID09IDApCiAJCXBhcnNlZGxpbmUt PmF1dGhfbWV0aG9kID0gdWFSQURJVVM7CisJZWxzZSBpZiAoc3RyY21wKHRva2VuLT5zdHJpbmcs ICJvYXV0aCIpID09IDApCisJCXBhcnNlZGxpbmUtPmF1dGhfbWV0aG9kID0gdWFPQXV0aDsKIAll bHNlCiAJewogCQllcmVwb3J0KGVsZXZlbCwKQEAgLTE3MTMsOCArMTcxNiw5IEBAIHBhcnNlX2hi YV9hdXRoX29wdChjaGFyICpuYW1lLCBjaGFyICp2YWwsIEhiYUxpbmUgKmhiYWxpbmUsCiAJCQlo YmFsaW5lLT5hdXRoX21ldGhvZCAhPSB1YVBlZXIgJiYKIAkJCWhiYWxpbmUtPmF1dGhfbWV0aG9k ICE9IHVhR1NTICYmCiAJCQloYmFsaW5lLT5hdXRoX21ldGhvZCAhPSB1YVNTUEkgJiYKKwkJCWhi YWxpbmUtPmF1dGhfbWV0aG9kICE9IHVhT0F1dGggJiYKIAkJCWhiYWxpbmUtPmF1dGhfbWV0aG9k ICE9IHVhQ2VydCkKLQkJCUlOVkFMSURfQVVUSF9PUFRJT04oIm1hcCIsIGdldHRleHRfbm9vcCgi aWRlbnQsIHBlZXIsIGdzc2FwaSwgc3NwaSwgYW5kIGNlcnQiKSk7CisJCQlJTlZBTElEX0FVVEhf T1BUSU9OKCJtYXAiLCBnZXR0ZXh0X25vb3AoImlkZW50LCBwZWVyLCBnc3NhcGksIHNzcGksIG9h dXRoLCBhbmQgY2VydCIpKTsKIAkJaGJhbGluZS0+dXNlcm1hcCA9IHBzdHJkdXAodmFsKTsKIAl9 CiAJZWxzZSBpZiAoc3RyY21wKG5hbWUsICJjbGllbnRjZXJ0IikgPT0gMCkKQEAgLTIwOTgsNiAr MjEwMiwyNyBAQCBwYXJzZV9oYmFfYXV0aF9vcHQoY2hhciAqbmFtZSwgY2hhciAqdmFsLCBIYmFM aW5lICpoYmFsaW5lLAogCQloYmFsaW5lLT5yYWRpdXNpZGVudGlmaWVycyA9IHBhcnNlZF9pZGVu dGlmaWVyczsKIAkJaGJhbGluZS0+cmFkaXVzaWRlbnRpZmllcnNfcyA9IHBzdHJkdXAodmFsKTsK IAl9CisJZWxzZSBpZiAoc3RyY21wKG5hbWUsICJpc3N1ZXIiKSA9PSAwKQorCXsKKwkJaWYgKGhi YWxpbmUtPmF1dGhfbWV0aG9kICE9IHVhT0F1dGgpCisJCQlJTlZBTElEX0FVVEhfT1BUSU9OKCJp c3N1ZXIiLCBnZXR0ZXh0X25vb3AoIm9hdXRoIikpOworCQloYmFsaW5lLT5vYXV0aF9pc3N1ZXIg PSBwc3RyZHVwKHZhbCk7CisJfQorCWVsc2UgaWYgKHN0cmNtcChuYW1lLCAic2NvcGUiKSA9PSAw KQorCXsKKwkJaWYgKGhiYWxpbmUtPmF1dGhfbWV0aG9kICE9IHVhT0F1dGgpCisJCQlJTlZBTElE X0FVVEhfT1BUSU9OKCJzY29wZSIsIGdldHRleHRfbm9vcCgib2F1dGgiKSk7CisJCWhiYWxpbmUt Pm9hdXRoX3Njb3BlID0gcHN0cmR1cCh2YWwpOworCX0KKwllbHNlIGlmIChzdHJjbXAobmFtZSwg InRydXN0X3ZhbGlkYXRvcl9hdXRoeiIpID09IDApCisJeworCQlpZiAoaGJhbGluZS0+YXV0aF9t ZXRob2QgIT0gdWFPQXV0aCkKKwkJCUlOVkFMSURfQVVUSF9PUFRJT04oInRydXN0X3ZhbGlkYXRv cl9hdXRoeiIsIGdldHRleHRfbm9vcCgib2F1dGgiKSk7CisJCWlmIChzdHJjbXAodmFsLCAiMSIp ID09IDApCisJCQloYmFsaW5lLT5vYXV0aF9za2lwX3VzZXJtYXAgPSB0cnVlOworCQllbHNlCisJ CQloYmFsaW5lLT5vYXV0aF9za2lwX3VzZXJtYXAgPSBmYWxzZTsKKwl9CiAJZWxzZQogCXsKIAkJ ZXJlcG9ydChlbGV2ZWwsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYwppbmRleCA0NjdiMGZkNmZlLi4yYjQyODYy ZjcxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5jCisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMKQEAgLTU2LDYgKzU2LDcgQEAKICNpbmNsdWRlICJsaWJw cS9hdXRoLmgiCiAjaW5jbHVkZSAibGlicHEvbGlicHEuaCIKICNpbmNsdWRlICJsaWJwcS9wcWZv cm1hdC5oIgorI2luY2x1ZGUgImxpYnBxL29hdXRoLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgi CiAjaW5jbHVkZSAib3B0aW1pemVyL2Nvc3QuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvZ2Vxby5o IgpAQCAtNDU5NCw2ICs0NTk1LDE3IEBAIHN0YXRpYyBzdHJ1Y3QgY29uZmlnX3N0cmluZyBDb25m aWd1cmVOYW1lc1N0cmluZ1tdID0KIAkJY2hlY2tfYmFja3RyYWNlX2Z1bmN0aW9ucywgYXNzaWdu X2JhY2t0cmFjZV9mdW5jdGlvbnMsIE5VTEwKIAl9LAogCisJeworCQl7Im9hdXRoX3ZhbGlkYXRv cl9jb21tYW5kIiwgUEdDX1NJR0hVUCwgQ09OTl9BVVRIX0FVVEgsCisJCQlnZXR0ZXh0X25vb3Ao IkNvbW1hbmQgdG8gdmFsaWRhdGUgT0F1dGggdjIgYmVhcmVyIHRva2Vucy4iKSwKKwkJCU5VTEws CisJCQlHVUNfU1VQRVJVU0VSX09OTFkKKwkJfSwKKwkJJm9hdXRoX3ZhbGlkYXRvcl9jb21tYW5k LAorCQkiIiwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKIAkvKiBFbmQtb2YtbGlzdCBtYXJr ZXIgKi8KIAl7CiAJCXtOVUxMLCAwLCAwLCBOVUxMLCBOVUxMfSwgTlVMTCwgTlVMTCwgTlVMTCwg TlVMTCwgTlVMTApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGlicHEvYXV0aC5oIGIvc3JjL2lu Y2x1ZGUvbGlicHEvYXV0aC5oCmluZGV4IDNkNjczNGYyNTMuLjFjNzdkY2IwYzEgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2xpYnBxL2F1dGguaAorKysgYi9zcmMvaW5jbHVkZS9saWJwcS9hdXRo LmgKQEAgLTE2LDYgKzE2LDIyIEBACiAKICNpbmNsdWRlICJsaWJwcS9saWJwcS1iZS5oIgogCisv KgorICogTWF4aW11bSBhY2NlcHRlZCBzaXplIG9mIEdTUyBhbmQgU1NQSSBhdXRoZW50aWNhdGlv biB0b2tlbnMuCisgKiBXZSBhbHNvIHVzZSB0aGlzIGFzIGEgbGltaXQgb24gb3JkaW5hcnkgcGFz c3dvcmQgcGFja2V0IGxlbmd0aHMuCisgKgorICogS2VyYmVyb3MgdGlja2V0cyBhcmUgdXN1YWxs eSBxdWl0ZSBzbWFsbCwgYnV0IHRoZSBUR1RzIGlzc3VlZCBieSBXaW5kb3dzCisgKiBkb21haW4g Y29udHJvbGxlcnMgaW5jbHVkZSBhbiBhdXRob3JpemF0aW9uIGZpZWxkIGtub3duIGFzIHRoZSBQ cml2aWxlZ2UKKyAqIEF0dHJpYnV0ZSBDZXJ0aWZpY2F0ZSAoUEFDKSwgd2hpY2ggY29udGFpbnMg dGhlIHVzZXIncyBXaW5kb3dzIHBlcm1pc3Npb25zCisgKiAoZ3JvdXAgbWVtYmVyc2hpcHMgZXRj LikuIFRoZSBQQUMgaXMgY29waWVkIGludG8gYWxsIHRpY2tldHMgb2J0YWluZWQgb24KKyAqIHRo ZSBiYXNpcyBvZiB0aGlzIFRHVCAoZXZlbiB0aG9zZSBpc3N1ZWQgYnkgVW5peCByZWFsbXMgd2hp Y2ggdGhlIFdpbmRvd3MKKyAqIHJlYWxtIHRydXN0cyksIGFuZCBjYW4gYmUgc2V2ZXJhbCBrQiBp biBzaXplLiBUaGUgbWF4aW11bSB0b2tlbiBzaXplCisgKiBhY2NlcHRlZCBieSBXaW5kb3dzIHN5 c3RlbXMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgTWF4QXV0aFRva2VuIFdpbmRvd3MKKyAqIHJlZ2lz dHJ5IHNldHRpbmcuIE1pY3Jvc29mdCByZWNvbW1lbmRzIHRoYXQgaXQgaXMgbm90IHNldCBoaWdo ZXIgdGhhbgorICogNjU1MzUgYnl0ZXMsIHNvIHRoYXQgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUg bGltaXQgZm9yIHVzIGFzIHdlbGwuCisgKi8KKyNkZWZpbmUgUEdfTUFYX0FVVEhfVE9LRU5fTEVO R1RICTY1NTM1CisKIGV4dGVybiBjaGFyICpwZ19rcmJfc2VydmVyX2tleWZpbGU7CiBleHRlcm4g Ym9vbCBwZ19rcmJfY2FzZWluc191c2VyczsKIGV4dGVybiBjaGFyICpwZ19rcmJfcmVhbG07CkBA IC0yMyw2ICszOSw3IEBAIGV4dGVybiBjaGFyICpwZ19rcmJfcmVhbG07CiBleHRlcm4gdm9pZCBD bGllbnRBdXRoZW50aWNhdGlvbihQb3J0ICpwb3J0KTsKIGV4dGVybiB2b2lkIHNlbmRBdXRoUmVx dWVzdChQb3J0ICpwb3J0LCBBdXRoUmVxdWVzdCBhcmVxLCBjb25zdCBjaGFyICpleHRyYWRhdGEs CiAJCQkJCQkJaW50IGV4dHJhbGVuKTsKK2V4dGVybiB2b2lkIHNldF9hdXRobl9pZChQb3J0ICpw b3J0LCBjb25zdCBjaGFyICppZCk7CiAKIC8qIEhvb2sgZm9yIHBsdWdpbnMgdG8gZ2V0IGNvbnRy b2wgaW4gQ2xpZW50QXV0aGVudGljYXRpb24oKSAqLwogdHlwZWRlZiB2b2lkICgqQ2xpZW50QXV0 aGVudGljYXRpb25faG9va190eXBlKSAoUG9ydCAqLCBpbnQpOwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvbGlicHEvaGJhLmggYi9zcmMvaW5jbHVkZS9saWJwcS9oYmEuaAppbmRleCA4ZDlmMzgy MWIxLi40NDFkZDU2MjNlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9saWJwcS9oYmEuaAorKysg Yi9zcmMvaW5jbHVkZS9saWJwcS9oYmEuaApAQCAtMzgsOCArMzgsOSBAQCB0eXBlZGVmIGVudW0g VXNlckF1dGgKIAl1YUxEQVAsCiAJdWFDZXJ0LAogCXVhUkFESVVTLAotCXVhUGVlcgotI2RlZmlu ZSBVU0VSX0FVVEhfTEFTVCB1YVBlZXIJLyogTXVzdCBiZSBsYXN0IHZhbHVlIG9mIHRoaXMgZW51 bSAqLworCXVhUGVlciwKKwl1YU9BdXRoCisjZGVmaW5lIFVTRVJfQVVUSF9MQVNUIHVhT0F1dGgJ LyogTXVzdCBiZSBsYXN0IHZhbHVlIG9mIHRoaXMgZW51bSAqLwogfSBVc2VyQXV0aDsKIAogLyoK QEAgLTEyMCw2ICsxMjEsOSBAQCB0eXBlZGVmIHN0cnVjdCBIYmFMaW5lCiAJY2hhcgkgICAqcmFk aXVzaWRlbnRpZmllcnNfczsKIAlMaXN0CSAgICpyYWRpdXNwb3J0czsKIAljaGFyCSAgICpyYWRp dXNwb3J0c19zOworCWNoYXIJICAgKm9hdXRoX2lzc3VlcjsKKwljaGFyCSAgICpvYXV0aF9zY29w ZTsKKwlib29sCQlvYXV0aF9za2lwX3VzZXJtYXA7CiB9IEhiYUxpbmU7CiAKIHR5cGVkZWYgc3Ry dWN0IElkZW50TGluZQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGlicHEvb2F1dGguaCBiL3Ny Yy9pbmNsdWRlL2xpYnBxL29hdXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMC4uODcwZTQyNmFmMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2xpYnBxL29h dXRoLmgKQEAgLTAsMCArMSwyNCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogb2F1dGgu aAorICoJICBJbnRlcmZhY2UgdG8gbGlicHEvYXV0aC1vYXV0aC5jCisgKgorICogUG9ydGlvbnMg Q29weXJpZ2h0IChjKSAxOTk2LTIwMjEsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdy b3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZl cnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHNyYy9pbmNsdWRlL2xpYnBxL29hdXRoLmgKKyAq CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR19PQVVUSF9ICisjZGVmaW5lIFBH X09BVVRIX0gKKworI2luY2x1ZGUgImxpYnBxL2xpYnBxLWJlLmgiCisjaW5jbHVkZSAibGlicHEv c2FzbC5oIgorCitleHRlcm4gY2hhciAqb2F1dGhfdmFsaWRhdG9yX2NvbW1hbmQ7CisKKy8qIElt cGxlbWVudGF0aW9uICovCitleHRlcm4gY29uc3QgcGdfYmVfc2FzbF9tZWNoIHBnX2JlX29hdXRo X21lY2g7CisKKyNlbmRpZiAvKiBQR19PQVVUSF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9saWJwcS9zYXNsLmggYi9zcmMvaW5jbHVkZS9saWJwcS9zYXNsLmgKaW5kZXggNGM2MTFiYWI2 Yi4uYzBhODg0MzBkNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbGlicHEvc2FzbC5oCisrKyBi L3NyYy9pbmNsdWRlL2xpYnBxL3Nhc2wuaApAQCAtMjYsNiArMjYsMTQgQEAKICNkZWZpbmUgUEdf U0FTTF9FWENIQU5HRV9TVUNDRVNTCQkxCiAjZGVmaW5lIFBHX1NBU0xfRVhDSEFOR0VfRkFJTFVS RQkJMgogCisvKgorICogTWF4aW11bSBhY2NlcHRlZCBzaXplIG9mIFNBU0wgbWVzc2FnZXMuCisg KgorICogVGhlIG1lc3NhZ2VzIHRoYXQgdGhlIHNlcnZlciBvciBsaWJwcSBnZW5lcmF0ZSBhcmUg bXVjaCBzbWFsbGVyIHRoYW4gdGhpcywKKyAqIGJ1dCBoYXZlIHNvbWUgaGVhZHJvb20uCisgKi8K KyNkZWZpbmUgUEdfTUFYX1NBU0xfTUVTU0FHRV9MRU5HVEgJMTAyNAorCiAvKgogICogQmFja2Vu ZCBTQVNMIG1lY2hhbmlzbSBjYWxsYmFja3MuCiAgKgpAQCAtMTI3LDYgKzEzNSw5IEBAIHR5cGVk ZWYgc3RydWN0IHBnX2JlX3Nhc2xfbWVjaAogCQkJCQkJCSBjb25zdCBjaGFyICppbnB1dCwgaW50 IGlucHV0bGVuLAogCQkJCQkJCSBjaGFyICoqb3V0cHV0LCBpbnQgKm91dHB1dGxlbiwKIAkJCQkJ CQkgY2hhciAqKmxvZ2RldGFpbCk7CisKKwkvKiBUaGUgbWF4aW11bSBzaXplIGFsbG93ZWQgZm9y IGNsaWVudCBTQVNMUmVzcG9uc2VzLiAqLworCWludAkJCW1heF9tZXNzYWdlX2xlbmd0aDsKIH0g cGdfYmVfc2FzbF9tZWNoOwogCiAvKiBDb21tb24gaW1wbGVtZW50YXRpb24gZm9yIGF1dGguYyAq LwotLSAKMi4yNS4xCgo= --_006_8a5a35b31c3f25f6b047e77def0445a60399981dcamelvmwarecom_ Content-Type: text/x-patch; name="v2-0004-Add-a-very-simple-authn_id-extension.patch" Content-Description: v2-0004-Add-a-very-simple-authn_id-extension.patch Content-Disposition: attachment; filename="v2-0004-Add-a-very-simple-authn_id-extension.patch"; size=2895; creation-date="Wed, 25 Aug 2021 18:41:39 GMT"; modification-date="Wed, 25 Aug 2021 18:41:39 GMT" Content-ID: <14D53594937FAB49AB6CC695505C28BB@namprd05.prod.outlook.com> Content-Transfer-Encoding: base64 RnJvbSA3YzQxNzVmOWFkODcxNDFkNDBkZDQ0ZDZjOWZlOTMxMmNlOGU1Yjg4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8cGNoYW1waW9uQHZtd2FyZS5jb20+ CkRhdGU6IFR1ZSwgMTggTWF5IDIwMjEgMTU6MDE6MjkgLTA3MDAKU3ViamVjdDogW1BBVENIIHYy IDQvNV0gQWRkIGEgdmVyeSBzaW1wbGUgYXV0aG5faWQgZXh0ZW5zaW9uCgouLi5mb3IgcmV0cmll dmluZyB0aGUgYXV0aG5faWQgZnJvbSB0aGUgc2VydmVyIGluIHRlc3RzLgotLS0KIGNvbnRyaWIv YXV0aG5faWQvTWFrZWZpbGUgICAgICAgICAgfCAxOSArKysrKysrKysrKysrKysrKysrCiBjb250 cmliL2F1dGhuX2lkL2F1dGhuX2lkLS0xLjAuc3FsIHwgIDggKysrKysrKysKIGNvbnRyaWIvYXV0 aG5faWQvYXV0aG5faWQuYyAgICAgICAgfCAyOCArKysrKysrKysrKysrKysrKysrKysrKysrKysr CiBjb250cmliL2F1dGhuX2lkL2F1dGhuX2lkLmNvbnRyb2wgIHwgIDUgKysrKysKIDQgZmlsZXMg Y2hhbmdlZCwgNjAgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvYXV0 aG5faWQvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL2F1dGhuX2lkL2F1dGhu X2lkLS0xLjAuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9hdXRobl9pZC9hdXRobl9p ZC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9hdXRobl9pZC9hdXRobl9pZC5jb250cm9s CgpkaWZmIC0tZ2l0IGEvY29udHJpYi9hdXRobl9pZC9NYWtlZmlsZSBiL2NvbnRyaWIvYXV0aG5f aWQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNDYwMjYz NThlMAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvYXV0aG5faWQvTWFrZWZpbGUKQEAgLTAs MCArMSwxOSBAQAorIyBjb250cmliL2F1dGhuX2lkL01ha2VmaWxlCisKK01PRFVMRV9iaWcgPSBh dXRobl9pZAorT0JKUyA9IGF1dGhuX2lkLm8KKworRVhURU5TSU9OID0gYXV0aG5faWQKK0RBVEEg PSBhdXRobl9pZC0tMS4wLnNxbAorUEdGSUxFREVTQyA9ICJhdXRobl9pZCAtIGluZm9ybWF0aW9u IGFib3V0IHRoZSBhdXRoZW50aWNhdGVkIHVzZXIiCisKK2lmZGVmIFVTRV9QR1hTCitQR19DT05G SUcgPSBwZ19jb25maWcKK1BHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJRykgLS1wZ3hzKQoraW5j bHVkZSAkKFBHWFMpCitlbHNlCitzdWJkaXIgPSBjb250cmliL2F1dGhuX2lkCit0b3BfYnVpbGRk aXIgPSAuLi8uLgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAor aW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmCmRp ZmYgLS1naXQgYS9jb250cmliL2F1dGhuX2lkL2F1dGhuX2lkLS0xLjAuc3FsIGIvY29udHJpYi9h dXRobl9pZC9hdXRobl9pZC0tMS4wLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi5hZjJhNGQzOTkxCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9hdXRobl9pZC9h dXRobl9pZC0tMS4wLnNxbApAQCAtMCwwICsxLDggQEAKKy8qIGNvbnRyaWIvYXV0aG5faWQvYXV0 aG5faWQtLTEuMC5zcWwgKi8KKworLS0gY29tcGxhaW4gaWYgc2NyaXB0IGlzIHNvdXJjZWQgaW4g cHNxbCwgcmF0aGVyIHRoYW4gdmlhIENSRUFURSBFWFRFTlNJT04KK1xlY2hvIFVzZSAiQ1JFQVRF IEVYVEVOU0lPTiBhdXRobl9pZCIgdG8gbG9hZCB0aGlzIGZpbGUuIFxxdWl0CisKK0NSRUFURSBG VU5DVElPTiBhdXRobl9pZCgpIFJFVFVSTlMgdGV4dAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdh dXRobl9pZCcKK0xBTkdVQUdFIEMgSU1NVVRBQkxFOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9hdXRo bl9pZC9hdXRobl9pZC5jIGIvY29udHJpYi9hdXRobl9pZC9hdXRobl9pZC5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjBmZWNhYzM2YTgKLS0tIC9kZXYvbnVsbAorKysg Yi9jb250cmliL2F1dGhuX2lkL2F1dGhuX2lkLmMKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIEV4 dGVuc2lvbiB0byBleHBvc2UgdGhlIGN1cnJlbnQgdXNlcidzIGF1dGhuX2lkLgorICoKKyAqIGNv bnRyaWIvYXV0aG5faWQvYXV0aG5faWQuYworICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgor CisjaW5jbHVkZSAiZm1nci5oIgorI2luY2x1ZGUgImxpYnBxL2xpYnBxLWJlLmgiCisjaW5jbHVk ZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKworUEdfTU9EVUxF X01BR0lDOworCitQR19GVU5DVElPTl9JTkZPX1YxKGF1dGhuX2lkKTsKKworLyoKKyAqIFJldHVy bnMgdGhlIGN1cnJlbnQgdXNlcidzIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdHkuCisgKi8KK0RhdHVt CithdXRobl9pZChQR19GVU5DVElPTl9BUkdTKQoreworCWlmICghTXlQcm9jUG9ydC0+YXV0aG5f aWQpCisJCVBHX1JFVFVSTl9OVUxMKCk7CisKKwlQR19SRVRVUk5fVEVYVF9QKGNzdHJpbmdfdG9f dGV4dChNeVByb2NQb3J0LT5hdXRobl9pZCkpOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9hdXRo bl9pZC9hdXRobl9pZC5jb250cm9sIGIvY29udHJpYi9hdXRobl9pZC9hdXRobl9pZC5jb250cm9s Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmUwZjllMDZiZWQKLS0tIC9k ZXYvbnVsbAorKysgYi9jb250cmliL2F1dGhuX2lkL2F1dGhuX2lkLmNvbnRyb2wKQEAgLTAsMCAr MSw1IEBACisjIGF1dGhuX2lkIGV4dGVuc2lvbgorY29tbWVudCA9ICdjdXJyZW50IHVzZXIgaWRl bnRpdHknCitkZWZhdWx0X3ZlcnNpb24gPSAnMS4wJworbW9kdWxlX3BhdGhuYW1lID0gJyRsaWJk aXIvYXV0aG5faWQnCityZWxvY2F0YWJsZSA9IHRydWUKLS0gCjIuMjUuMQoK --_006_8a5a35b31c3f25f6b047e77def0445a60399981dcamelvmwarecom_ Content-Type: text/x-patch; name="v2-0005-Add-pytest-suite-for-OAuth.patch" Content-Description: v2-0005-Add-pytest-suite-for-OAuth.patch Content-Disposition: attachment; filename="v2-0005-Add-pytest-suite-for-OAuth.patch"; size=134781; creation-date="Wed, 25 Aug 2021 18:41:39 GMT"; modification-date="Wed, 25 Aug 2021 18:41:39 GMT" Content-ID: <84849F8F3EEEB347BF1A51FCA17FD190@namprd05.prod.outlook.com> Content-Transfer-Encoding: base64 RnJvbSAwMjgxNjM1ZjM1YTQ0ZTBmZGZkNDM2OTQyM2Y5OGViZTViNDY3Y2UzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8cGNoYW1waW9uQHZtd2FyZS5jb20+ CkRhdGU6IEZyaSwgNCBKdW4gMjAyMSAwOTowNjozOCAtMDcwMApTdWJqZWN0OiBbUEFUQ0ggdjIg NS81XSBBZGQgcHl0ZXN0IHN1aXRlIGZvciBPQXV0aAoKUmVxdWlyZXMgUHl0aG9uIDM7IG9uIHRo ZSBmaXJzdCBydW4gb2YgYG1ha2UgaW5zdGFsbGNoZWNrYCB0aGUKZGVwZW5kZW5jaWVzIHdpbGwg YmUgaW5zdGFsbGVkIGludG8gLi92ZW52IGZvciB5b3UuIFNlZSB0aGUgUkVBRE1FIGZvcgptb3Jl IGRldGFpbHMuCi0tLQogc3JjL3Rlc3QvcHl0aG9uLy5naXRpZ25vcmUgICAgICAgICAgICAgICAg IHwgICAgMiArCiBzcmMvdGVzdC9weXRob24vTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgfCAg IDM4ICsKIHNyYy90ZXN0L3B5dGhvbi9SRUFETUUgICAgICAgICAgICAgICAgICAgICB8ICAgNTQg KysKIHNyYy90ZXN0L3B5dGhvbi9jbGllbnQvX19pbml0X18ucHkgICAgICAgICB8ICAgIDAKIHNy Yy90ZXN0L3B5dGhvbi9jbGllbnQvY29uZnRlc3QucHkgICAgICAgICB8ICAxMjYgKysrCiBzcmMv dGVzdC9weXRob24vY2xpZW50L3Rlc3RfY2xpZW50LnB5ICAgICAgfCAgMTgwICsrKysKIHNyYy90 ZXN0L3B5dGhvbi9jbGllbnQvdGVzdF9vYXV0aC5weSAgICAgICB8ICA5MzYgKysrKysrKysrKysr KysrKysrCiBzcmMvdGVzdC9weXRob24vcHEzLnB5ICAgICAgICAgICAgICAgICAgICAgfCAgNzI3 ICsrKysrKysrKysrKysrCiBzcmMvdGVzdC9weXRob24vcHl0ZXN0LmluaSAgICAgICAgICAgICAg ICAgfCAgICA0ICsKIHNyYy90ZXN0L3B5dGhvbi9yZXF1aXJlbWVudHMudHh0ICAgICAgICAgICB8 ICAgIDcgKwogc3JjL3Rlc3QvcHl0aG9uL3NlcnZlci9fX2luaXRfXy5weSAgICAgICAgIHwgICAg MAogc3JjL3Rlc3QvcHl0aG9uL3NlcnZlci9jb25mdGVzdC5weSAgICAgICAgIHwgICA0NSArCiBz cmMvdGVzdC9weXRob24vc2VydmVyL3Rlc3Rfb2F1dGgucHkgICAgICAgfCAxMDEyICsrKysrKysr KysrKysrKysrKysrCiBzcmMvdGVzdC9weXRob24vc2VydmVyL3Rlc3Rfc2VydmVyLnB5ICAgICAg fCAgIDIxICsKIHNyYy90ZXN0L3B5dGhvbi9zZXJ2ZXIvdmFsaWRhdGVfYmVhcmVyLnB5ICB8ICAx MDEgKysKIHNyYy90ZXN0L3B5dGhvbi9zZXJ2ZXIvdmFsaWRhdGVfcmVmbGVjdC5weSB8ICAgMzQg Kwogc3JjL3Rlc3QvcHl0aG9uL3Rlc3RfaW50ZXJuYWxzLnB5ICAgICAgICAgIHwgIDEzOCArKysK IHNyYy90ZXN0L3B5dGhvbi90ZXN0X3BxMy5weSAgICAgICAgICAgICAgICB8ICA1NTggKysrKysr KysrKysKIHNyYy90ZXN0L3B5dGhvbi90bHMucHkgICAgICAgICAgICAgICAgICAgICB8ICAxOTUg KysrKwogMTkgZmlsZXMgY2hhbmdlZCwgNDE3OCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL3Rlc3QvcHl0aG9uLy5naXRpZ25vcmUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv dGVzdC9weXRob24vTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9weXRob24v UkVBRE1FCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcHl0aG9uL2NsaWVudC9fX2luaXRf Xy5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3B5dGhvbi9jbGllbnQvY29uZnRlc3Qu cHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9weXRob24vY2xpZW50L3Rlc3RfY2xpZW50 LnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcHl0aG9uL2NsaWVudC90ZXN0X29hdXRo LnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcHl0aG9uL3BxMy5weQogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy90ZXN0L3B5dGhvbi9weXRlc3QuaW5pCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL3Rlc3QvcHl0aG9uL3JlcXVpcmVtZW50cy50eHQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv dGVzdC9weXRob24vc2VydmVyL19faW5pdF9fLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rl c3QvcHl0aG9uL3NlcnZlci9jb25mdGVzdC5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L3B5dGhvbi9zZXJ2ZXIvdGVzdF9vYXV0aC5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L3B5dGhvbi9zZXJ2ZXIvdGVzdF9zZXJ2ZXIucHkKIGNyZWF0ZSBtb2RlIDEwMDc1NSBzcmMvdGVz dC9weXRob24vc2VydmVyL3ZhbGlkYXRlX2JlYXJlci5weQogY3JlYXRlIG1vZGUgMTAwNzU1IHNy Yy90ZXN0L3B5dGhvbi9zZXJ2ZXIvdmFsaWRhdGVfcmVmbGVjdC5weQogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy90ZXN0L3B5dGhvbi90ZXN0X2ludGVybmFscy5weQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy90ZXN0L3B5dGhvbi90ZXN0X3BxMy5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L3B5dGhvbi90bHMucHkKCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9weXRob24vLmdpdGlnbm9yZSBi L3NyYy90ZXN0L3B5dGhvbi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAuLjBlOGYwMjdiMmUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9weXRob24v LmdpdGlnbm9yZQpAQCAtMCwwICsxLDIgQEAKK19fcHljYWNoZV9fLworL3ZlbnYvCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9weXRob24vTWFrZWZpbGUgYi9zcmMvdGVzdC9weXRob24vTWFrZWZpbGUK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYjA2OTViNjI4NwotLS0gL2Rl di9udWxsCisrKyBiL3NyYy90ZXN0L3B5dGhvbi9NYWtlZmlsZQpAQCAtMCwwICsxLDM4IEBACisj CisjIENvcHlyaWdodCAyMDIxIFZNd2FyZSwgSW5jLgorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogUG9zdGdyZVNRTAorIworCisjIE9ubHkgUHl0aG9uIDMgaXMgc3VwcG9ydGVkLCBidXQgaWYg aXQncyBuYW1lZCBzb21ldGhpbmcgZGlmZmVyZW50IG9uIHlvdXIKKyMgc3lzdGVtIHlvdSBjYW4g b3ZlcnJpZGUgaXQgd2l0aCB0aGUgUFlUSE9OMyB2YXJpYWJsZS4KK1BZVEhPTjMgOj0gcHl0aG9u MworCisjIEFsbCBkZXBlbmRlbmNpZXMgYXJlIHBsYWNlZCBpbnRvIHRoaXMgZGlyZWN0b3J5LiBU aGUgZGVmYXVsdCBpcyAuZ2l0aWdub3JlZAorIyBmb3IgeW91LCBidXQgeW91IGNhbiBvdmVycmlk ZSBpdCBpZiB5b3UnZCBsaWtlLgorVkVOViA6PSAuL3ZlbnYKKworb3ZlcnJpZGUgVkJJTiAgIDo9 ICQoVkVOVikvYmluCitvdmVycmlkZSBQSVAgICAgOj0gJChWQklOKS9waXAKK292ZXJyaWRlIFBZ VEVTVCA6PSAkKFZCSU4pL3B5LnRlc3QKK292ZXJyaWRlIElTT1JUICA6PSAkKFZCSU4pL2lzb3J0 CitvdmVycmlkZSBCTEFDSyAgOj0gJChWQklOKS9ibGFjaworCisuUEhPTlk6IGluc3RhbGxjaGVj ayBpbmRlbnQKKworaW5zdGFsbGNoZWNrOiAkKFBZVEVTVCkKKwkkKFBZVEVTVCkgLXYgLXJzCisK K2luZGVudDogJChJU09SVCkgJChCTEFDSykKKwkkKElTT1JUKSAtLXByb2ZpbGUgYmxhY2sgKi5w eSBjbGllbnQvKi5weSBzZXJ2ZXIvKi5weQorCSQoQkxBQ0spICoucHkgY2xpZW50LyoucHkgc2Vy dmVyLyoucHkKKworJChQWVRFU1QpICQoSVNPUlQpICQoQkxBQ0spICY6IHJlcXVpcmVtZW50cy50 eHQgfCAkKFBJUCkKKwkkKFBJUCkgaW5zdGFsbCAtLWZvcmNlLXJlaW5zdGFsbCAtciAkPAorCisk KFBJUCk6CisJJChQWVRIT04zKSAtbSB2ZW52ICQoVkVOVikKKworIyBBIGNvbnZlbmllbmNlIHJl Y2lwZSB0byByZWJ1aWxkIHBzeWNvcGcyIGFnYWluc3QgdGhlIGxvY2FsIGxpYnBxLgorLlBIT05Z OiByZWJ1aWxkLXBzeWNvcGcyCityZWJ1aWxkLXBzeWNvcGcyOiB8ICQoUElQKQorCSQoUElQKSBp bnN0YWxsIC0tZm9yY2UtcmVpbnN0YWxsIC0tbm8tYmluYXJ5IDphbGw6ICQoc2hlbGwgZ3JlcCBw c3ljb3BnMiByZXF1aXJlbWVudHMudHh0KQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcHl0aG9uL1JF QURNRSBiL3NyYy90ZXN0L3B5dGhvbi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMC4uMGJkYTU4MmM0YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3B5dGhv bi9SRUFETUUKQEAgLTAsMCArMSw1NCBAQAorQSB0ZXN0IHN1aXRlIGZvciBleGVyY2lzaW5nIGJv dGggdGhlIGxpYnBxIGNsaWVudCBhbmQgdGhlIHNlcnZlciBiYWNrZW5kIGF0IHRoZQorcHJvdG9j b2wgbGV2ZWwsIGJhc2VkIG9uIHB5dGVzdCBhbmQgQ29uc3RydWN0LgorCitUaGUgdGVzdCBzdWl0 ZSBjdXJyZW50bHkgYXNzdW1lcyB0aGF0IHRoZSBzdGFuZGFyZCBQRyogZW52aXJvbm1lbnQgdmFy aWFibGVzCitwb2ludCB0byB0aGUgZGF0YWJhc2UgdW5kZXIgdGVzdCBhbmQgYXJlIHN1ZmZpY2ll bnQgdG8gbG9nIGluIGEgc3VwZXJ1c2VyIG9uCit0aGF0IHN5c3RlbS4gSW4gb3RoZXIgd29yZHMs IGEgYmFyZSBgcHNxbGAgbmVlZHMgdG8gSnVzdCBXb3JrIGJlZm9yZSB0aGUgdGVzdAorc3VpdGUg Y2FuIGRvIGl0cyB0aGluZy4gRm9yIGEgbmV3bHkgYnVpbHQgZGV2IGNsdXN0ZXIsIHR5cGljYWxs eSBhbGwgdGhhdCBJIG5lZWQKK3RvIGRvIGlzIGEKKworICAgIGV4cG9ydCBQR0RBVEFCQVNFPXBv c3RncmVzCisKK2J1dCB5b3UgY2FuIGFkanVzdCBhcyBuZWVkZWQgZm9yIHlvdXIgc2V0dXAuCisK KyMjIFJlcXVpcmVtZW50cworCitBIHN1cHBvcnRlZCB2ZXJzaW9uICgzLjYrKSBvZiBQeXRob24u CisKK1RoZSBmaXJzdCBydW4gb2YKKworICAgIG1ha2UgaW5zdGFsbGNoZWNrCisKK3dpbGwgaW5z dGFsbCBhIGxvY2FsIHZpcnR1YWwgZW52aXJvbm1lbnQgYW5kIGFsbCBuZWVkZWQgZGVwZW5kZW5j aWVzLiBEdXJpbmcKK2RldmVsb3BtZW50LCBpZiBsaWJwcSBjaGFuZ2VzIGluY29tcGF0aWJseSwg eW91IGNhbiBpc3N1ZQorCisgICAgJCBtYWtlIHJlYnVpbGQtcHN5Y29wZzIKKwordG8gZm9yY2Ug YSByZWJ1aWxkIG9mIHRoZSBjbGllbnQgbGlicmFyeS4KKworIyMgSGFja2luZworCitUaGUgY29k ZSBzdHlsZSBpcyBlbmZvcmNlZCBieSBhIF92ZXJ5XyBvcGluaW9uYXRlZCBhdXRvZm9ybWF0dGVy LiBSdW5uaW5nIHRoZQorCisgICAgbWFrZSBpbmRlbnQKKworcmVjaXBlIHdpbGwgaW52b2tlIGl0 IGZvciB5b3UgYXV0b21hdGljYWxseS4gRG9uJ3QgZmlnaHQgdGhlIHRvb2w7IHBhcnQgb2YgdGhl Cit6ZW4gaXMgaW4ga25vd2luZyB0aGF0IGlmIHRoZSBmb3JtYXR0ZXIgbWFrZXMgeW91ciBjb2Rl IHVnbHksIHRoZXJlJ3MgcHJvYmFibHkgYQorY2xlYW5lciB3YXkgdG8gd3JpdGUgeW91ciBjb2Rl LgorCisjIyBBZHZhbmNlZCBVc2FnZQorCitUaGUgTWFrZWZpbGUgaXMgdGhlcmUgZm9yIGNvbnZl bmllbmNlLCBidXQgeW91IGRvbid0IGhhdmUgdG8gdXNlIGl0LiBBY3RpdmF0ZQordGhlIHZpcnR1 YWxlbnYgdG8gYmUgYWJsZSB0byB1c2UgcHl0ZXN0IGRpcmVjdGx5OgorCisgICAgJCBzb3VyY2Ug dmVudi9iaW4vYWN0aXZhdGUKKyAgICAkIHB5LnRlc3QgLWsgb2F1dGgKKyAgICAuLi4KKyAgICAk IHB5LnRlc3QgLi9zZXJ2ZXIvdGVzdF9zZXJ2ZXIucHkKKyAgICAuLi4KKyAgICAkIGRlYWN0aXZh dGUgICMgcHV0cyB0aGUgUEFUSCBldCBhbCBiYWNrIHRoZSB3YXkgaXQgd2FzIGJlZm9yZQorCitU byBtYWtlIHF1aWNrIHNtb2tlIHRlc3RzIHBvc3NpYmxlLCBzbG93IHRlc3RzIGhhdmUgYmVlbiBt YXJrZWQgZXhwbGljaXRseS4gWW91CitjYW4gc2tpcCB0aGVtIGJ5IHNheWluZyBlLmcuCisKKyAg ICAkIHB5LnRlc3QgLW0gJ25vdCBzbG93JwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcHl0aG9uL2Ns aWVudC9fX2luaXRfXy5weSBiL3NyYy90ZXN0L3B5dGhvbi9jbGllbnQvX19pbml0X18ucHkKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZTY5ZGUyOWJiMgpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvcHl0aG9uL2NsaWVudC9jb25mdGVzdC5weSBiL3NyYy90ZXN0L3B5dGhvbi9j bGllbnQvY29uZnRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u ZjM4ZGE3YTEzOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3B5dGhvbi9jbGllbnQvY29u ZnRlc3QucHkKQEAgLTAsMCArMSwxMjYgQEAKKyMKKyMgQ29weXJpZ2h0IDIwMjEgVk13YXJlLCBJ bmMuCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBQb3N0Z3JlU1FMCisjCisKK2ltcG9ydCBz b2NrZXQKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKKworaW1wb3J0IHBzeWNvcGcyCitp bXBvcnQgcHl0ZXN0CisKK2ltcG9ydCBwcTMKKworQkxPQ0tJTkdfVElNRU9VVCA9IDIgICMgdGhl IG51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgZm9yIGJsb2NraW5nIGNhbGxzCisKKworQHB5dGVz dC5maXh0dXJlCitkZWYgc2VydmVyX3NvY2tldCh1bnVzZWRfdGNwX3BvcnRfZmFjdG9yeSk6Cisg ICAgIiIiCisgICAgUmV0dXJucyBhIGxpc3RlbmluZyBzb2NrZXQgYm91bmQgdG8gYW4gZXBoZW1l cmFsIHBvcnQuCisgICAgIiIiCisgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVU LCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHM6CisgICAgICAgIHMuYmluZCgoIjEyNy4wLjAuMSIs IHVudXNlZF90Y3BfcG9ydF9mYWN0b3J5KCkpKQorICAgICAgICBzLmxpc3RlbigxKQorICAgICAg ICBzLnNldHRpbWVvdXQoQkxPQ0tJTkdfVElNRU9VVCkKKyAgICAgICAgeWllbGQgcworCisKK2Ns YXNzIENsaWVudEhhbmRzaGFrZSh0aHJlYWRpbmcuVGhyZWFkKToKKyAgICAiIiIKKyAgICBBIHRo cmVhZCB0aGF0IGNvbm5lY3RzIHRvIGEgbG9jYWwgUG9zdGdyZXMgc2VydmVyIHVzaW5nIHBzeWNv cGcyLiBPbmNlIHRoZQorICAgIG9wZW5pbmcgaGFuZHNoYWtlIGNvbXBsZXRlcywgdGhlIGNvbm5l Y3Rpb24gd2lsbCBiZSBpbW1lZGlhdGVseSBjbG9zZWQuCisgICAgIiIiCisKKyAgICBkZWYgX19p bml0X18oc2VsZiwgKiwgcG9ydCwgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9f KCkKKworICAgICAgICBrd2FyZ3NbInBvcnQiXSA9IHBvcnQKKyAgICAgICAgc2VsZi5fa3dhcmdz ID0ga3dhcmdzCisKKyAgICAgICAgc2VsZi5leGNlcHRpb24gPSBOb25lCisKKyAgICBkZWYgcnVu KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb25uID0gcHN5Y29wZzIuY29ubmVj dChob3N0PSIxMjcuMC4wLjEiLCAqKnNlbGYuX2t3YXJncykKKyAgICAgICAgICAgIGNvbm4uY2xv c2UoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBzZWxmLmV4 Y2VwdGlvbiA9IGUKKworICAgIGRlZiBjaGVja19jb21wbGV0ZWQoc2VsZiwgdGltZW91dD1CTE9D S0lOR19USU1FT1VUKToKKyAgICAgICAgIiIiCisgICAgICAgIEpvaW5zIHRoZSBjbGllbnQgdGhy ZWFkLiBSYWlzZXMgYW4gZXhjZXB0aW9uIGlmIHRoZSB0aHJlYWQgY291bGQgbm90IGJlCisgICAg ICAgIGpvaW5lZCwgb3IgaWYgaXQgdGhyZXcgYW4gZXhjZXB0aW9uIGl0c2VsZi4gKFRoZSBleGNl cHRpb24gd2lsbCBiZQorICAgICAgICBjbGVhcmVkLCBzbyBmdXR1cmUgY2FsbHMgdG8gY2hlY2tf Y29tcGxldGVkIHdpbGwgc3VjY2VlZC4pCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmpvaW4o dGltZW91dCkKKworICAgICAgICBpZiBzZWxmLmlzX2FsaXZlKCk6CisgICAgICAgICAgICByYWlz ZSBUaW1lb3V0RXJyb3IoImNsaWVudCB0aHJlYWQgZGlkIG5vdCBoYW5kc2hha2Ugd2l0aGluIHRo ZSB0aW1lb3V0IikKKyAgICAgICAgZWxpZiBzZWxmLmV4Y2VwdGlvbjoKKyAgICAgICAgICAgIGUg PSBzZWxmLmV4Y2VwdGlvbgorICAgICAgICAgICAgc2VsZi5leGNlcHRpb24gPSBOb25lCisgICAg ICAgICAgICByYWlzZSBlCisKKworQHB5dGVzdC5maXh0dXJlCitkZWYgYWNjZXB0KHNlcnZlcl9z b2NrZXQpOgorICAgICIiIgorICAgIFJldHVybnMgYSBmYWN0b3J5IGZ1bmN0aW9uIHRoYXQsIHdo ZW4gY2FsbGVkLCByZXR1cm5zIGEgcGFpciAoc29jaywgY2xpZW50KQorICAgIHdoZXJlIHNvY2sg aXMgYSBzZXJ2ZXIgc29ja2V0IHRoYXQgaGFzIGFjY2VwdGVkIGEgY29ubmVjdGlvbiBmcm9tIGNs aWVudCwKKyAgICBhbmQgY2xpZW50IGlzIGFuIGluc3RhbmNlIG9mIENsaWVudEhhbmRzaGFrZS4g Q2xpZW50cyB3aWxsIGNvbXBsZXRlIHRoZWlyCisgICAgaGFuZHNoYWtlcyBhbmQgY2xlYW5seSBk aXNjb25uZWN0LgorCisgICAgVGhlIGRlZmF1bHQgY29ubnN0cmluZyBvcHRpb25zIG1heSBiZSBl eHRlbmRlZCBvciBvdmVycmlkZGVuIGJ5IHBhc3NpbmcKKyAgICBhcmJpdHJhcnkga2V5d29yZCBh cmd1bWVudHMuIEtlZXAgaW4gbWluZCB0aGF0IHlvdSBnZW5lcmFsbHkgc2hvdWxkIG5vdAorICAg IG92ZXJyaWRlIHRoZSBob3N0IG9yIHBvcnQsIHNpbmNlIHRoZXkgcG9pbnQgdG8gdGhlIGxvY2Fs IHRlc3Qgc2VydmVyLgorCisgICAgRm9yIHNpdHVhdGlvbnMgd2hlcmUgYSBjbGllbnQgbmVlZHMg dG8gY29ubmVjdCBtb3JlIHRoYW4gb25jZSB0byBjb21wbGV0ZSBhCisgICAgaGFuZHNoYWtlLCB0 aGUgYWNjZXB0IGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UuIChUaGUgY2xp ZW50CisgICAgcmV0dXJuZWQgZm9yIHN1YnNlcXVlbnQgY2FsbHMgd2lsbCBhbHdheXMgYmUgdGhl IHNhbWUgY2xpZW50IHRoYXQgd2FzCisgICAgcmV0dXJuZWQgZm9yIHRoZSBmaXJzdCBjYWxsLikK KworICAgIFRlc3RzIG11c3QgZWl0aGVyIGNvbXBsZXRlIHRoZSBoYW5kc2hha2Ugc28gdGhhdCB0 aGUgY2xpZW50IHRocmVhZCBjYW4gYmUKKyAgICBhdXRvbWF0aWNhbGx5IGpvaW5lZCBkdXJpbmcg dGVhcmRvd24sIG9yIGVsc2UgY2FsbCBjbGllbnQuY2hlY2tfY29tcGxldGVkKCkKKyAgICBhbmQg bWFudWFsbHkgaGFuZGxlIGFueSBleHBlY3RlZCBlcnJvcnMuCisgICAgIiIiCisgICAgXywgcG9y dCA9IHNlcnZlcl9zb2NrZXQuZ2V0c29ja25hbWUoKQorCisgICAgY2xpZW50ID0gTm9uZQorICAg IGRlZmF1bHRfb3B0cyA9IGRpY3QoCisgICAgICAgIHBvcnQ9cG9ydCwKKyAgICAgICAgdXNlcj1w cTMucGd1c2VyKCksCisgICAgICAgIHNzbG1vZGU9ImRpc2FibGUiLAorICAgICkKKworICAgIGRl ZiBmYWN0b3J5KCoqa3dhcmdzKToKKyAgICAgICAgbm9ubG9jYWwgY2xpZW50CisKKyAgICAgICAg aWYgY2xpZW50IGlzIE5vbmU6CisgICAgICAgICAgICBvcHRzID0gZGljdChkZWZhdWx0X29wdHMp CisgICAgICAgICAgICBvcHRzLnVwZGF0ZShrd2FyZ3MpCisKKyAgICAgICAgICAgICMgVGhlIHNl cnZlcl9zb2NrZXQgaXMgYWxyZWFkeSBsaXN0ZW5pbmcsIHNvIHRoZSBjbGllbnQgdGhyZWFkIGNh bgorICAgICAgICAgICAgIyBiZSBzYWZlbHkgc3RhcnRlZDsgaXQnbGwgYmxvY2sgb24gdGhlIGNv bm5lY3Rpb24gdW50aWwgd2UgYWNjZXB0LgorICAgICAgICAgICAgY2xpZW50ID0gQ2xpZW50SGFu ZHNoYWtlKCoqb3B0cykKKyAgICAgICAgICAgIGNsaWVudC5zdGFydCgpCisKKyAgICAgICAgc29j aywgXyA9IHNlcnZlcl9zb2NrZXQuYWNjZXB0KCkKKyAgICAgICAgcmV0dXJuIHNvY2ssIGNsaWVu dAorCisgICAgeWllbGQgZmFjdG9yeQorICAgIGNsaWVudC5jaGVja19jb21wbGV0ZWQoKQorCisK K0BweXRlc3QuZml4dHVyZQorZGVmIGNvbm4oYWNjZXB0KToKKyAgICAiIiIKKyAgICBSZXR1cm5z IGFuIGFjY2VwdGVkLCB3cmFwcGVkIHBxMyBjb25uZWN0aW9uIHRvIGEgcHN5Y29wZzIgY2xpZW50 LiBUaGUgc29ja2V0CisgICAgd2lsbCBiZSBjbG9zZWQgd2hlbiB0aGUgdGVzdCBmaW5pc2hlcywg YW5kIHRoZSBjbGllbnQgd2lsbCBiZSBjaGVja2VkIGZvciBhCisgICAgY2xlYW5seSBjb21wbGV0 ZWQgaGFuZHNoYWtlLgorICAgICIiIgorICAgIHNvY2ssIGNsaWVudCA9IGFjY2VwdCgpCisgICAg d2l0aCBzb2NrOgorICAgICAgICB3aXRoIHBxMy53cmFwKHNvY2ssIGRlYnVnX3N0cmVhbT1zeXMu c3Rkb3V0KSBhcyBjb25uOgorICAgICAgICAgICAgeWllbGQgY29ubgpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcHl0aG9uL2NsaWVudC90ZXN0X2NsaWVudC5weSBiL3NyYy90ZXN0L3B5dGhvbi9jbGll bnQvdGVzdF9jbGllbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u YzRjOTQ2ZmRhNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3B5dGhvbi9jbGllbnQvdGVz dF9jbGllbnQucHkKQEAgLTAsMCArMSwxODAgQEAKKyMKKyMgQ29weXJpZ2h0IDIwMjEgVk13YXJl LCBJbmMuCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBQb3N0Z3JlU1FMCisjCisKK2ltcG9y dCBiYXNlNjQKK2ltcG9ydCBzeXMKKworaW1wb3J0IHBzeWNvcGcyCitpbXBvcnQgcHl0ZXN0Citm cm9tIGNyeXB0b2dyYXBoeS5oYXptYXQucHJpbWl0aXZlcyBpbXBvcnQgaGFzaGVzLCBobWFjCisK K2ltcG9ydCBwcTMKKworCitkZWYgZmluaXNoX2hhbmRzaGFrZShjb25uKToKKyAgICAiIiIKKyAg ICBTZW5kcyB0aGUgQXV0aGVudGljYXRpb25PSyBtZXNzYWdlIGFuZCB0aGUgc3RhbmRhcmQgb3Bl bmluZyBzYWx2byBvZiBzZXJ2ZXIKKyAgICBtZXNzYWdlcywgdGhlbiBhc3NlcnRzIHRoYXQgdGhl IGNsaWVudCBpbW1lZGlhdGVseSBzZW5kcyBhIFRlcm1pbmF0ZSBtZXNzYWdlCisgICAgdG8gY2xv c2UgdGhlIGNvbm5lY3Rpb24gY2xlYW5seS4KKyAgICAiIiIKKyAgICBwcTMuc2VuZChjb25uLCBw cTMudHlwZXMuQXV0aG5SZXF1ZXN0LCB0eXBlPXBxMy5hdXRobi5PSykKKyAgICBwcTMuc2VuZChj b25uLCBwcTMudHlwZXMuUGFyYW1ldGVyU3RhdHVzLCBuYW1lPWIiY2xpZW50X2VuY29kaW5nIiwg dmFsdWU9YiJVVEYtOCIpCisgICAgcHEzLnNlbmQoY29ubiwgcHEzLnR5cGVzLlBhcmFtZXRlclN0 YXR1cywgbmFtZT1iIkRhdGVTdHlsZSIsIHZhbHVlPWIiSVNPLCBNRFkiKQorICAgIHBxMy5zZW5k KGNvbm4sIHBxMy50eXBlcy5SZWFkeUZvclF1ZXJ5LCBzdGF0dXM9YiJJIikKKworICAgIHBrdCA9 IHBxMy5yZWN2MShjb25uKQorICAgIGFzc2VydCBwa3QudHlwZSA9PSBwcTMudHlwZXMuVGVybWlu YXRlCisKKworZGVmIHRlc3RfaGFuZHNoYWtlKGNvbm4pOgorICAgIHN0YXJ0dXAgPSBwcTMucmVj djEoY29ubiwgY2xzPXBxMy5TdGFydHVwKQorICAgIGFzc2VydCBzdGFydHVwLnByb3RvID09IHBx My5wcm90b2NvbCgzLCAwKQorCisgICAgZmluaXNoX2hhbmRzaGFrZShjb25uKQorCisKK2RlZiB0 ZXN0X2Fib3J0ZWRfY29ubmVjdGlvbihhY2NlcHQpOgorICAgICIiIgorICAgIE1ha2Ugc3VyZSB0 aGUgY2xpZW50IGNvcnJlY3RseSByZXBvcnRzIGFuIGVhcmx5IGNsb3NlIGR1cmluZyBoYW5kc2hh a2VzLgorICAgICIiIgorICAgIHNvY2ssIGNsaWVudCA9IGFjY2VwdCgpCisgICAgc29jay5jbG9z ZSgpCisKKyAgICBleHBlY3RlZCA9ICJzZXJ2ZXIgY2xvc2VkIHRoZSBjb25uZWN0aW9uIHVuZXhw ZWN0ZWRseSIKKyAgICB3aXRoIHB5dGVzdC5yYWlzZXMocHN5Y29wZzIuT3BlcmF0aW9uYWxFcnJv ciwgbWF0Y2g9ZXhwZWN0ZWQpOgorICAgICAgICBjbGllbnQuY2hlY2tfY29tcGxldGVkKCkKKwor CisjCisjIFNDUkFNLVNIQS0yNTYgKHNlZSBSRkMgNTgwMjogaHR0cHM6Ly90b29scy5pZXRmLm9y Zy9odG1sL3JmYzU4MDIpCisjCisKKworQHB5dGVzdC5maXh0dXJlCitkZWYgcGFzc3dvcmQoKToK KyAgICAiIiIKKyAgICBSZXR1cm5zIGEgcGFzc3dvcmQgZm9yIHVzZSBieSBib3RoIGNsaWVudCBh bmQgc2VydmVyLgorICAgICIiIgorICAgICMgVE9ETzogcGFyYW1ldGVyaXplIHRoaXMgd2l0aCBw YXNzd29yZHMgdGhhdCByZXF1aXJlIFNBU0xwcmVwLgorICAgIHJldHVybiAic2VjcmV0IgorCisK K0BweXRlc3QuZml4dHVyZQorZGVmIHB3Y29ubihhY2NlcHQsIHBhc3N3b3JkKToKKyAgICAiIiIK KyAgICBMaWtlIHRoZSBjb25uIGZpeHR1cmUsIGJ1dCB1c2VzIGEgcGFzc3dvcmQgaW4gdGhlIGNv bm5lY3Rpb24uCisgICAgIiIiCisgICAgc29jaywgY2xpZW50ID0gYWNjZXB0KHBhc3N3b3JkPXBh c3N3b3JkKQorICAgIHdpdGggc29jazoKKyAgICAgICAgd2l0aCBwcTMud3JhcChzb2NrLCBkZWJ1 Z19zdHJlYW09c3lzLnN0ZG91dCkgYXMgY29ubjoKKyAgICAgICAgICAgIHlpZWxkIGNvbm4KKwor CitkZWYgc2hhMjU2KGRhdGEpOgorICAgICIiIlRoZSBIKHN0cikgZnVuY3Rpb24gZnJvbSBTZWN0 aW9uIDIuMi4iIiIKKyAgICBkaWdlc3QgPSBoYXNoZXMuSGFzaChoYXNoZXMuU0hBMjU2KCkpCisg ICAgZGlnZXN0LnVwZGF0ZShkYXRhKQorICAgIHJldHVybiBkaWdlc3QuZmluYWxpemUoKQorCisK K2RlZiBobWFjXzI1NihrZXksIGRhdGEpOgorICAgICIiIlRoZSBITUFDKGtleSwgc3RyKSBmdW5j dGlvbiBmcm9tIFNlY3Rpb24gMi4yLiIiIgorICAgIGggPSBobWFjLkhNQUMoa2V5LCBoYXNoZXMu U0hBMjU2KCkpCisgICAgaC51cGRhdGUoZGF0YSkKKyAgICByZXR1cm4gaC5maW5hbGl6ZSgpCisK KworZGVmIHhvcihhLCBiKToKKyAgICAiIiJUaGUgWE9SIG9wZXJhdGlvbiBmcm9tIFNlY3Rpb24g Mi4yLiIiIgorICAgIHJlcyA9IGJ5dGVhcnJheShhKQorICAgIGZvciBpLCBieXRlIGluIGVudW1l cmF0ZShiKToKKyAgICAgICAgcmVzW2ldIF49IGJ5dGUKKyAgICByZXR1cm4gYnl0ZXMocmVzKQor CisKK2RlZiBoX2koZGF0YSwgc2FsdCwgaSk6CisgICAgIiIiVGhlIEhpKHN0ciwgc2FsdCwgaSkg ZnVuY3Rpb24gZnJvbSBTZWN0aW9uIDIuMi4iIiIKKyAgICBhc3NlcnQgaSA+IDAKKworICAgIGFj YyA9IGhtYWNfMjU2KGRhdGEsIHNhbHQgKyBiIlx4MDBceDAwXHgwMFx4MDEiKQorICAgIGxhc3Qg PSBhY2MKKyAgICBpIC09IDEKKworICAgIHdoaWxlIGk6CisgICAgICAgIHUgPSBobWFjXzI1Nihk YXRhLCBsYXN0KQorICAgICAgICBhY2MgPSB4b3IoYWNjLCB1KQorCisgICAgICAgIGxhc3QgPSB1 CisgICAgICAgIGkgLT0gMQorCisgICAgcmV0dXJuIGFjYworCisKK2RlZiB0ZXN0X3NjcmFtKHB3 Y29ubiwgcGFzc3dvcmQpOgorICAgIHN0YXJ0dXAgPSBwcTMucmVjdjEocHdjb25uLCBjbHM9cHEz LlN0YXJ0dXApCisgICAgYXNzZXJ0IHN0YXJ0dXAucHJvdG8gPT0gcHEzLnByb3RvY29sKDMsIDAp CisKKyAgICBwcTMuc2VuZCgKKyAgICAgICAgcHdjb25uLAorICAgICAgICBwcTMudHlwZXMuQXV0 aG5SZXF1ZXN0LAorICAgICAgICB0eXBlPXBxMy5hdXRobi5TQVNMLAorICAgICAgICBib2R5PVti IlNDUkFNLVNIQS0yNTYiLCBiIiJdLAorICAgICkKKworICAgICMgR2V0IHRoZSBjbGllbnQtZmly c3QtbWVzc2FnZS4KKyAgICBwa3QgPSBwcTMucmVjdjEocHdjb25uKQorICAgIGFzc2VydCBwa3Qu dHlwZSA9PSBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlCisKKyAgICBpbml0aWFsID0gcHEzLlNB U0xJbml0aWFsUmVzcG9uc2UucGFyc2UocGt0LnBheWxvYWQpCisgICAgYXNzZXJ0IGluaXRpYWwu bmFtZSA9PSBiIlNDUkFNLVNIQS0yNTYiCisKKyAgICBjX2JpbmQsIGF1dGh6aWQsIGNfbmFtZSwg Y19ub25jZSA9IGluaXRpYWwuZGF0YS5zcGxpdChiIiwiKQorICAgIGFzc2VydCBjX2JpbmQgPT0g YiJuIiAgIyBubyBjaGFubmVsIGJpbmRpbmdzIG9uIGEgcGxhaW50ZXh0IGNvbm5lY3Rpb24KKyAg ICBhc3NlcnQgYXV0aHppZCA9PSBiIiIgICMgd2UgZG9uJ3Qgc3VwcG9ydCBhdXRoemlkIGN1cnJl bnRseQorICAgIGFzc2VydCBjX25hbWUgPT0gYiJuPSIgICMgbGlicHEgZG9lc24ndCBob25vciB0 aGUgR1MyIHVzZXJuYW1lCisgICAgYXNzZXJ0IGNfbm9uY2Uuc3RhcnRzd2l0aChiInI9IikKKwor ICAgICMgU2VuZCB0aGUgc2VydmVyLWZpcnN0LW1lc3NhZ2UuCisgICAgc2FsdCA9IGIiMTIzNDUi CisgICAgaXRlcmF0aW9ucyA9IDIKKworICAgIHNfbm9uY2UgPSBjX25vbmNlICsgYiJzb21lbm9u Y2UiCisgICAgc19zYWx0ID0gYiJzPSIgKyBiYXNlNjQuYjY0ZW5jb2RlKHNhbHQpCisgICAgc19p dGVyYXRpb25zID0gYiJpPSVkIiAlIGl0ZXJhdGlvbnMKKworICAgIG1zZyA9IGIiLCIuam9pbihb c19ub25jZSwgc19zYWx0LCBzX2l0ZXJhdGlvbnNdKQorICAgIHBxMy5zZW5kKHB3Y29ubiwgcHEz LnR5cGVzLkF1dGhuUmVxdWVzdCwgdHlwZT1wcTMuYXV0aG4uU0FTTENvbnRpbnVlLCBib2R5PW1z ZykKKworICAgICMgR2V0IHRoZSBjbGllbnQtZmluYWwtbWVzc2FnZS4KKyAgICBwa3QgPSBwcTMu cmVjdjEocHdjb25uKQorICAgIGFzc2VydCBwa3QudHlwZSA9PSBwcTMudHlwZXMuUGFzc3dvcmRN ZXNzYWdlCisKKyAgICBjX2JpbmRfZmluYWwsIGNfbm9uY2VfZmluYWwsIGNfcHJvb2YgPSBwa3Qu cGF5bG9hZC5zcGxpdChiIiwiKQorICAgIGFzc2VydCBjX2JpbmRfZmluYWwgPT0gYiJjPSIgKyBi YXNlNjQuYjY0ZW5jb2RlKGNfYmluZCArIGIiLCIgKyBhdXRoemlkICsgYiIsIikKKyAgICBhc3Nl cnQgY19ub25jZV9maW5hbCA9PSBzX25vbmNlCisKKyAgICAjIENhbGN1bGF0ZSB3aGF0IHRoZSBj bGllbnQgcHJvb2Ygc2hvdWxkIGJlLgorICAgIHNhbHRlZF9wYXNzd29yZCA9IGhfaShwYXNzd29y ZC5lbmNvZGUoImFzY2lpIiksIHNhbHQsIGl0ZXJhdGlvbnMpCisgICAgY2xpZW50X2tleSA9IGht YWNfMjU2KHNhbHRlZF9wYXNzd29yZCwgYiJDbGllbnQgS2V5IikKKyAgICBzdG9yZWRfa2V5ID0g c2hhMjU2KGNsaWVudF9rZXkpCisKKyAgICBhdXRoX21lc3NhZ2UgPSBiIiwiLmpvaW4oCisgICAg ICAgIFtjX25hbWUsIGNfbm9uY2UsIHNfbm9uY2UsIHNfc2FsdCwgc19pdGVyYXRpb25zLCBjX2Jp bmRfZmluYWwsIGNfbm9uY2VfZmluYWxdCisgICAgKQorICAgIGNsaWVudF9zaWduYXR1cmUgPSBo bWFjXzI1NihzdG9yZWRfa2V5LCBhdXRoX21lc3NhZ2UpCisgICAgY2xpZW50X3Byb29mID0geG9y KGNsaWVudF9rZXksIGNsaWVudF9zaWduYXR1cmUpCisKKyAgICBleHBlY3RlZCA9IGIicD0iICsg YmFzZTY0LmI2NGVuY29kZShjbGllbnRfcHJvb2YpCisgICAgYXNzZXJ0IGNfcHJvb2YgPT0gZXhw ZWN0ZWQKKworICAgICMgU2VuZCB0aGUgY29ycmVjdCBzZXJ2ZXIgc2lnbmF0dXJlLgorICAgIHNl cnZlcl9rZXkgPSBobWFjXzI1NihzYWx0ZWRfcGFzc3dvcmQsIGIiU2VydmVyIEtleSIpCisgICAg c2VydmVyX3NpZ25hdHVyZSA9IGhtYWNfMjU2KHNlcnZlcl9rZXksIGF1dGhfbWVzc2FnZSkKKwor ICAgIHNfdmVyaWZ5ID0gYiJ2PSIgKyBiYXNlNjQuYjY0ZW5jb2RlKHNlcnZlcl9zaWduYXR1cmUp CisgICAgcHEzLnNlbmQocHdjb25uLCBwcTMudHlwZXMuQXV0aG5SZXF1ZXN0LCB0eXBlPXBxMy5h dXRobi5TQVNMRmluYWwsIGJvZHk9c192ZXJpZnkpCisKKyAgICAjIERvbmUhCisgICAgZmluaXNo X2hhbmRzaGFrZShwd2Nvbm4pCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9weXRob24vY2xpZW50L3Rl c3Rfb2F1dGgucHkgYi9zcmMvdGVzdC9weXRob24vY2xpZW50L3Rlc3Rfb2F1dGgucHkKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYTc1NGE5YzBiNgotLS0gL2Rldi9udWxs CisrKyBiL3NyYy90ZXN0L3B5dGhvbi9jbGllbnQvdGVzdF9vYXV0aC5weQpAQCAtMCwwICsxLDkz NiBAQAorIworIyBDb3B5cmlnaHQgMjAyMSBWTXdhcmUsIEluYy4KKyMgU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IFBvc3RncmVTUUwKKyMKKworaW1wb3J0IGJhc2U2NAoraW1wb3J0IGh0dHAuc2Vy dmVyCitpbXBvcnQganNvbgoraW1wb3J0IHNlY3JldHMKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJl YWRpbmcKK2ltcG9ydCB0aW1lCitpbXBvcnQgdXJsbGliLnBhcnNlCisKK2ltcG9ydCBwc3ljb3Bn MgoraW1wb3J0IHB5dGVzdAorCitpbXBvcnQgcHEzCisKK2Zyb20gLmNvbmZ0ZXN0IGltcG9ydCBC TE9DS0lOR19USU1FT1VUCisKKworZGVmIGZpbmlzaF9oYW5kc2hha2UoY29ubik6CisgICAgIiIi CisgICAgU2VuZHMgdGhlIEF1dGhlbnRpY2F0aW9uT0sgbWVzc2FnZSBhbmQgdGhlIHN0YW5kYXJk IG9wZW5pbmcgc2Fsdm8gb2Ygc2VydmVyCisgICAgbWVzc2FnZXMsIHRoZW4gYXNzZXJ0cyB0aGF0 IHRoZSBjbGllbnQgaW1tZWRpYXRlbHkgc2VuZHMgYSBUZXJtaW5hdGUgbWVzc2FnZQorICAgIHRv IGNsb3NlIHRoZSBjb25uZWN0aW9uIGNsZWFubHkuCisgICAgIiIiCisgICAgcHEzLnNlbmQoY29u biwgcHEzLnR5cGVzLkF1dGhuUmVxdWVzdCwgdHlwZT1wcTMuYXV0aG4uT0spCisgICAgcHEzLnNl bmQoY29ubiwgcHEzLnR5cGVzLlBhcmFtZXRlclN0YXR1cywgbmFtZT1iImNsaWVudF9lbmNvZGlu ZyIsIHZhbHVlPWIiVVRGLTgiKQorICAgIHBxMy5zZW5kKGNvbm4sIHBxMy50eXBlcy5QYXJhbWV0 ZXJTdGF0dXMsIG5hbWU9YiJEYXRlU3R5bGUiLCB2YWx1ZT1iIklTTywgTURZIikKKyAgICBwcTMu c2VuZChjb25uLCBwcTMudHlwZXMuUmVhZHlGb3JRdWVyeSwgc3RhdHVzPWIiSSIpCisKKyAgICBw a3QgPSBwcTMucmVjdjEoY29ubikKKyAgICBhc3NlcnQgcGt0LnR5cGUgPT0gcHEzLnR5cGVzLlRl cm1pbmF0ZQorCisKKyMKKyMgT0FVVEhCRUFSRVIgKHNlZSBSRkMgNzYyODogaHR0cHM6Ly90b29s cy5pZXRmLm9yZy9odG1sL3JmYzc2MjgpCisjCisKKworZGVmIHN0YXJ0X29hdXRoX2hhbmRzaGFr ZShjb25uKToKKyAgICAiIiIKKyAgICBOZWdvdGlhdGVzIGFuIE9BVVRIQkVBUkVSIFNBU0wgY2hh bGxlbmdlLiBSZXR1cm5zIHRoZSBjbGllbnQncyBpbml0aWFsCisgICAgcmVzcG9uc2UgZGF0YS4K KyAgICAiIiIKKyAgICBzdGFydHVwID0gcHEzLnJlY3YxKGNvbm4sIGNscz1wcTMuU3RhcnR1cCkK KyAgICBhc3NlcnQgc3RhcnR1cC5wcm90byA9PSBwcTMucHJvdG9jb2woMywgMCkKKworICAgIHBx My5zZW5kKAorICAgICAgICBjb25uLCBwcTMudHlwZXMuQXV0aG5SZXF1ZXN0LCB0eXBlPXBxMy5h dXRobi5TQVNMLCBib2R5PVtiIk9BVVRIQkVBUkVSIiwgYiIiXQorICAgICkKKworICAgIHBrdCA9 IHBxMy5yZWN2MShjb25uKQorICAgIGFzc2VydCBwa3QudHlwZSA9PSBwcTMudHlwZXMuUGFzc3dv cmRNZXNzYWdlCisKKyAgICBpbml0aWFsID0gcHEzLlNBU0xJbml0aWFsUmVzcG9uc2UucGFyc2Uo cGt0LnBheWxvYWQpCisgICAgYXNzZXJ0IGluaXRpYWwubmFtZSA9PSBiIk9BVVRIQkVBUkVSIgor CisgICAgcmV0dXJuIGluaXRpYWwuZGF0YQorCisKK2RlZiBnZXRfYXV0aF92YWx1ZShpbml0aWFs KToKKyAgICAiIiIKKyAgICBGaW5kcyB0aGUgYXV0aCB2YWx1ZSAoZS5nLiAiQmVhcmVyIHNvbWVk YXRhLi4uIiBpbiB0aGUgY2xpZW50J3MgaW5pdGlhbCBTQVNMCisgICAgcmVzcG9uc2UuCisgICAg IiIiCisgICAga3ZwYWlycyA9IGluaXRpYWwuc3BsaXQoYiJceDAxIikKKyAgICBhc3NlcnQga3Zw YWlyc1swXSA9PSBiIm4sLCIgICMgbm8gY2hhbm5lbCBiaW5kaW5nIG9yIGF1dGh6aWQKKyAgICBh c3NlcnQga3ZwYWlyc1syXSA9PSBiIiIgICMgZW5kcyB3aXRoIGFuIGVtcHR5IGt2cGFpcgorICAg IGFzc2VydCBrdnBhaXJzWzNdID09IGIiIiAgIyAuLi5hbmQgdGhlcmUncyBub3RoaW5nIGFmdGVy IGl0CisgICAgYXNzZXJ0IGxlbihrdnBhaXJzKSA9PSA0CisKKyAgICBrZXksIHZhbHVlID0ga3Zw YWlyc1sxXS5zcGxpdChiIj0iLCAyKQorICAgIGFzc2VydCBrZXkgPT0gYiJhdXRoIgorCisgICAg cmV0dXJuIHZhbHVlCisKKworZGVmIHh0ZXN0X29hdXRoX3N1Y2Nlc3MoY29ubik6ICAjIFRPRE8K KyAgICBpbml0aWFsID0gc3RhcnRfb2F1dGhfaGFuZHNoYWtlKGNvbm4pCisKKyAgICBhdXRoID0g Z2V0X2F1dGhfdmFsdWUoaW5pdGlhbCkKKyAgICBhc3NlcnQgYXV0aC5zdGFydHN3aXRoKGIiQmVh cmVyICIpCisKKyAgICAjIEFjY2VwdCB0aGUgdG9rZW4uIFRPRE8gYWN0dWFsbHkgdmFsaWRhdGUK KyAgICBwcTMuc2VuZChjb25uLCBwcTMudHlwZXMuQXV0aG5SZXF1ZXN0LCB0eXBlPXBxMy5hdXRo bi5TQVNMRmluYWwpCisgICAgZmluaXNoX2hhbmRzaGFrZShjb25uKQorCisKK2NsYXNzIE9wZW5J RFByb3ZpZGVyKHRocmVhZGluZy5UaHJlYWQpOgorICAgICIiIgorICAgIEEgdGhyZWFkIHRoYXQg cnVucyBhIG1vY2sgT3BlbklEIHByb3ZpZGVyIHNlcnZlci4KKyAgICAiIiIKKworICAgIGRlZiBf X2luaXRfXyhzZWxmLCAqLCBwb3J0KToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisKKyAg ICAgICAgc2VsZi5leGNlcHRpb24gPSBOb25lCisKKyAgICAgICAgYWRkciA9ICgiIiwgcG9ydCkK KyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZWxmLl9TZXJ2ZXIoYWRkciwgc2VsZi5fSGFuZGxlcikK KworICAgICAgICAjIFRPRE86IGFsbG93IEhUVFBTIG9ubHksIHNvbWVob3cKKyAgICAgICAgb2F1 dGggPSBzZWxmLl9PQXV0aFN0YXRlKCkKKyAgICAgICAgb2F1dGguaG9zdCA9IGYibG9jYWxob3N0 Ontwb3J0fSIKKyAgICAgICAgb2F1dGguaXNzdWVyID0gZiJodHRwOi8vbG9jYWxob3N0Ontwb3J0 fSIKKworICAgICAgICAjIFRoZSBmb2xsb3dpbmcgZW5kcG9pbnRzIGFyZSByZXF1aXJlZCB0byBi ZSBhZHZlcnRpc2VkIGJ5IHByb3ZpZGVycywKKyAgICAgICAgIyBldmVuIHRob3VnaCBvdXIgY2hv c2VuIGNsaWVudCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBhY3R1YWxseSBtYWtlCisgICAgICAg ICMgdXNlIG9mIHRoZW0uCisgICAgICAgIG9hdXRoLnJlZ2lzdGVyX2VuZHBvaW50KAorICAgICAg ICAgICAgImF1dGhvcml6YXRpb25fZW5kcG9pbnQiLCAiUE9TVCIsICIvYXV0aG9yaXplIiwgc2Vs Zi5fYXV0aG9yaXphdGlvbl9oYW5kbGVyCisgICAgICAgICkKKyAgICAgICAgb2F1dGgucmVnaXN0 ZXJfZW5kcG9pbnQoImp3a3NfdXJpIiwgIkdFVCIsICIva2V5cyIsIHNlbGYuX2p3a3NfaGFuZGxl cikKKworICAgICAgICBzZWxmLnNlcnZlci5vYXV0aCA9IG9hdXRoCisKKyAgICBkZWYgcnVuKHNl bGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnNlcnZlci5zZXJ2ZV9mb3JldmVy KCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgc2VsZi5leGNl cHRpb24gPSBlCisKKyAgICBkZWYgc3RvcChzZWxmLCB0aW1lb3V0PUJMT0NLSU5HX1RJTUVPVVQp OgorICAgICAgICAiIiIKKyAgICAgICAgU2h1dHMgZG93biB0aGUgc2VydmVyIGFuZCBqb2lucyBp dHMgdGhyZWFkLiBSYWlzZXMgYW4gZXhjZXB0aW9uIGlmIHRoZQorICAgICAgICB0aHJlYWQgY291 bGQgbm90IGJlIGpvaW5lZCwgb3IgaWYgaXQgdGhyZXcgYW4gZXhjZXB0aW9uIGl0c2VsZi4gTXVz dAorICAgICAgICBvbmx5IGJlIGNhbGxlZCBvbmNlLCBhZnRlciBzdGFydCgpLgorICAgICAgICAi IiIKKyAgICAgICAgc2VsZi5zZXJ2ZXIuc2h1dGRvd24oKQorICAgICAgICBzZWxmLmpvaW4odGlt ZW91dCkKKworICAgICAgICBpZiBzZWxmLmlzX2FsaXZlKCk6CisgICAgICAgICAgICByYWlzZSBU aW1lb3V0RXJyb3IoImNsaWVudCB0aHJlYWQgZGlkIG5vdCBoYW5kc2hha2Ugd2l0aGluIHRoZSB0 aW1lb3V0IikKKyAgICAgICAgZWxpZiBzZWxmLmV4Y2VwdGlvbjoKKyAgICAgICAgICAgIGUgPSBz ZWxmLmV4Y2VwdGlvbgorICAgICAgICAgICAgcmFpc2UgZQorCisgICAgY2xhc3MgX09BdXRoU3Rh dGUob2JqZWN0KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgc2Vs Zi5lbmRwb2ludF9wYXRocyA9IHt9CisgICAgICAgICAgICBzZWxmLl9lbmRwb2ludHMgPSB7fQor CisgICAgICAgIGRlZiByZWdpc3Rlcl9lbmRwb2ludChzZWxmLCBuYW1lLCBtZXRob2QsIHBhdGgs IGZ1bmMpOgorICAgICAgICAgICAgaWYgbWV0aG9kIG5vdCBpbiBzZWxmLl9lbmRwb2ludHM6Cisg ICAgICAgICAgICAgICAgc2VsZi5fZW5kcG9pbnRzW21ldGhvZF0gPSB7fQorCisgICAgICAgICAg ICBzZWxmLl9lbmRwb2ludHNbbWV0aG9kXVtwYXRoXSA9IGZ1bmMKKyAgICAgICAgICAgIHNlbGYu ZW5kcG9pbnRfcGF0aHNbbmFtZV0gPSBwYXRoCisKKyAgICAgICAgZGVmIGVuZHBvaW50KHNlbGYs IG1ldGhvZCwgcGF0aCk6CisgICAgICAgICAgICBpZiBtZXRob2Qgbm90IGluIHNlbGYuX2VuZHBv aW50czoKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICAgICByZXR1cm4g c2VsZi5fZW5kcG9pbnRzW21ldGhvZF0uZ2V0KHBhdGgpCisKKyAgICBjbGFzcyBfU2VydmVyKGh0 dHAuc2VydmVyLkhUVFBTZXJ2ZXIpOgorICAgICAgICBkZWYgaGFuZGxlX2Vycm9yKHNlbGYsIHJl cXVlc3QsIGFkZHIpOgorICAgICAgICAgICAgc2VsZi5zaHV0ZG93bl9yZXF1ZXN0KHJlcXVlc3Qp CisgICAgICAgICAgICByYWlzZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfandrc19o YW5kbGVyKGhlYWRlcnMsIHBhcmFtcyk6CisgICAgICAgIHJldHVybiAyMDAsIHsia2V5cyI6IFtd fQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfYXV0aG9yaXphdGlvbl9oYW5kbGVyKGhl YWRlcnMsIHBhcmFtcyk6CisgICAgICAgICMgV2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0aGlzIHRv IGJlIGNhbGxlZCBkdXJpbmcgdGhlc2UgdGVzdHMgLS0gd2UKKyAgICAgICAgIyBzaG91bGQgYmUg dXNpbmcgdGhlIGRldmljZSBhdXRob3JpemF0aW9uIGVuZHBvaW50IGluc3RlYWQuCisgICAgICAg IGFzc2VydCAoCisgICAgICAgICAgICBGYWxzZQorICAgICAgICApLCAiYXV0aG9yaXphdGlvbiBo YW5kbGVyIGNhbGxlZCBpbnN0ZWFkIG9mIGRldmljZSBhdXRob3JpemF0aW9uIGhhbmRsZXIiCisK KyAgICBjbGFzcyBfSGFuZGxlcihodHRwLnNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyKToK KyAgICAgICAgdGltZW91dCA9IEJMT0NLSU5HX1RJTUVPVVQKKworICAgICAgICBkZWYgX2Rpc2Nv dmVyeV9oYW5kbGVyKHNlbGYsIGhlYWRlcnMsIHBhcmFtcyk6CisgICAgICAgICAgICBvYXV0aCA9 IHNlbGYuc2VydmVyLm9hdXRoCisKKyAgICAgICAgICAgIGRvYyA9IHsKKyAgICAgICAgICAgICAg ICAiaXNzdWVyIjogb2F1dGguaXNzdWVyLAorICAgICAgICAgICAgICAgICJyZXNwb25zZV90eXBl c19zdXBwb3J0ZWQiOiBbInRva2VuIl0sCisgICAgICAgICAgICAgICAgInN1YmplY3RfdHlwZXNf c3VwcG9ydGVkIjogWyJwdWJsaWMiXSwKKyAgICAgICAgICAgICAgICAiaWRfdG9rZW5fc2lnbmlu Z19hbGdfdmFsdWVzX3N1cHBvcnRlZCI6IFsiUlMyNTYiXSwKKyAgICAgICAgICAgIH0KKworICAg ICAgICAgICAgZm9yIG5hbWUsIHBhdGggaW4gb2F1dGguZW5kcG9pbnRfcGF0aHMuaXRlbXMoKToK KyAgICAgICAgICAgICAgICBkb2NbbmFtZV0gPSBvYXV0aC5pc3N1ZXIgKyBwYXRoCisKKyAgICAg ICAgICAgIHJldHVybiAyMDAsIGRvYworCisgICAgICAgIGRlZiBfaGFuZGxlKHNlbGYsICosIHBh cmFtcz1Ob25lLCBoYW5kbGVyPU5vbmUpOgorICAgICAgICAgICAgb2F1dGggPSBzZWxmLnNlcnZl ci5vYXV0aAorICAgICAgICAgICAgYXNzZXJ0IHNlbGYuaGVhZGVyc1siSG9zdCJdID09IG9hdXRo Lmhvc3QKKworICAgICAgICAgICAgaWYgaGFuZGxlciBpcyBOb25lOgorICAgICAgICAgICAgICAg IGhhbmRsZXIgPSBvYXV0aC5lbmRwb2ludChzZWxmLmNvbW1hbmQsIHNlbGYucGF0aCkKKyAgICAg ICAgICAgICAgICBhc3NlcnQgKAorICAgICAgICAgICAgICAgICAgICBoYW5kbGVyIGlzIG5vdCBO b25lCisgICAgICAgICAgICAgICAgKSwgZiJubyByZWdpc3RlcmVkIGVuZHBvaW50IGZvciB7c2Vs Zi5jb21tYW5kfSB7c2VsZi5wYXRofSIKKworICAgICAgICAgICAgY29kZSwgcmVzcCA9IGhhbmRs ZXIoc2VsZi5oZWFkZXJzLCBwYXJhbXMpCisKKyAgICAgICAgICAgIHNlbGYuc2VuZF9yZXNwb25z ZShjb2RlKQorICAgICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigiQ29udGVudC1UeXBlIiwgImFw cGxpY2F0aW9uL2pzb24iKQorICAgICAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCisKKyAgICAg ICAgICAgIHJlc3AgPSBqc29uLmR1bXBzKHJlc3ApCisgICAgICAgICAgICByZXNwID0gcmVzcC5l bmNvZGUoInV0Zi04IikKKyAgICAgICAgICAgIHNlbGYud2ZpbGUud3JpdGUocmVzcCkKKworICAg ICAgICAgICAgc2VsZi5jbG9zZV9jb25uZWN0aW9uID0gVHJ1ZQorCisgICAgICAgIGRlZiBkb19H RVQoc2VsZik6CisgICAgICAgICAgICBpZiBzZWxmLnBhdGggPT0gIi8ud2VsbC1rbm93bi9vcGVu aWQtY29uZmlndXJhdGlvbiI6CisgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlKGhhbmRsZXI9 c2VsZi5fZGlzY292ZXJ5X2hhbmRsZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAg ICAgICAgIHNlbGYuX2hhbmRsZSgpCisKKyAgICAgICAgZGVmIF9yZXF1ZXN0X2JvZHkoc2VsZik6 CisgICAgICAgICAgICBsZW5ndGggPSBzZWxmLmhlYWRlcnNbIkNvbnRlbnQtTGVuZ3RoIl0KKwor ICAgICAgICAgICAgIyBIYW5kbGUgb25seSBhbiBleHBsaWNpdCBjb250ZW50LWxlbmd0aC4KKyAg ICAgICAgICAgIGFzc2VydCBsZW5ndGggaXMgbm90IE5vbmUKKyAgICAgICAgICAgIGxlbmd0aCA9 IGludChsZW5ndGgpCisKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnJmaWxlLnJlYWQobGVuZ3Ro KS5kZWNvZGUoInV0Zi04IikKKworICAgICAgICBkZWYgZG9fUE9TVChzZWxmKToKKyAgICAgICAg ICAgIGFzc2VydCBzZWxmLmhlYWRlcnNbIkNvbnRlbnQtVHlwZSJdID09ICJhcHBsaWNhdGlvbi94 LXd3dy1mb3JtLXVybGVuY29kZWQiCisKKyAgICAgICAgICAgIGJvZHkgPSBzZWxmLl9yZXF1ZXN0 X2JvZHkoKQorICAgICAgICAgICAgcGFyYW1zID0gdXJsbGliLnBhcnNlLnBhcnNlX3FzKGJvZHkp CisKKyAgICAgICAgICAgIHNlbGYuX2hhbmRsZShwYXJhbXM9cGFyYW1zKQorCisKK0BweXRlc3Qu Zml4dHVyZQorZGVmIG9wZW5pZF9wcm92aWRlcih1bnVzZWRfdGNwX3BvcnRfZmFjdG9yeSk6Cisg ICAgIiIiCisgICAgQSBmaXh0dXJlIHRoYXQgcmV0dXJucyB0aGUgT0F1dGggc3RhdGUgb2YgYSBy dW5uaW5nIE9wZW5JRCBwcm92aWRlciBzZXJ2ZXIuIFRoZQorICAgIHNlcnZlciB3aWxsIGJlIHN0 b3BwZWQgd2hlbiB0aGUgZml4dHVyZSBpcyB0b3JuIGRvd24uCisgICAgIiIiCisgICAgdGhyZWFk ID0gT3BlbklEUHJvdmlkZXIocG9ydD11bnVzZWRfdGNwX3BvcnRfZmFjdG9yeSgpKQorICAgIHRo cmVhZC5zdGFydCgpCisKKyAgICB0cnk6CisgICAgICAgIHlpZWxkIHRocmVhZC5zZXJ2ZXIub2F1 dGgKKyAgICBmaW5hbGx5OgorICAgICAgICB0aHJlYWQuc3RvcCgpCisKKworQHB5dGVzdC5tYXJr LnBhcmFtZXRyaXplKCJzZWNyZXQiLCBbTm9uZSwgIiIsICJodW50ZXIyIl0pCitAcHl0ZXN0Lm1h cmsucGFyYW1ldHJpemUoInNjb3BlIiwgW05vbmUsICIiLCAib3BlbmlkIGVtYWlsIl0pCitAcHl0 ZXN0Lm1hcmsucGFyYW1ldHJpemUoInJldHJpZXMiLCBbMCwgMV0pCitkZWYgdGVzdF9vYXV0aF93 aXRoX2V4cGxpY2l0X2lzc3VlcigKKyAgICBjYXBmZCwgYWNjZXB0LCBvcGVuaWRfcHJvdmlkZXIs IHJldHJpZXMsIHNjb3BlLCBzZWNyZXQKKyk6CisgICAgY2xpZW50X2lkID0gc2VjcmV0cy50b2tl bl9oZXgoKQorCisgICAgc29jaywgY2xpZW50ID0gYWNjZXB0KAorICAgICAgICBvYXV0aF9pc3N1 ZXI9b3BlbmlkX3Byb3ZpZGVyLmlzc3VlciwKKyAgICAgICAgb2F1dGhfY2xpZW50X2lkPWNsaWVu dF9pZCwKKyAgICAgICAgb2F1dGhfY2xpZW50X3NlY3JldD1zZWNyZXQsCisgICAgICAgIG9hdXRo X3Njb3BlPXNjb3BlLAorICAgICkKKworICAgIGRldmljZV9jb2RlID0gc2VjcmV0cy50b2tlbl9o ZXgoKQorICAgIHVzZXJfY29kZSA9IGYie3NlY3JldHMudG9rZW5faGV4KDIpfS17c2VjcmV0cy50 b2tlbl9oZXgoMil9IgorICAgIHZlcmlmaWNhdGlvbl91cmwgPSAiaHR0cHM6Ly9leGFtcGxlLmNv bS9kZXZpY2UiCisKKyAgICBhY2Nlc3NfdG9rZW4gPSBzZWNyZXRzLnRva2VuX3VybHNhZmUoKQor CisgICAgZGVmIGNoZWNrX2NsaWVudF9hdXRobihoZWFkZXJzLCBwYXJhbXMpOgorICAgICAgICBp ZiBub3Qgc2VjcmV0OgorICAgICAgICAgICAgYXNzZXJ0IHBhcmFtc1siY2xpZW50X2lkIl0gPT0g W2NsaWVudF9pZF0KKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgUmVxdWlyZSB0aGUg Y2xpZW50IHRvIHVzZSBCYXNpYyBhdXRobjsgcmVxdWVzdC1ib2R5IGNyZWRlbnRpYWxzIGFyZQor ICAgICAgICAjIE5PVCBSRUNPTU1FTkRFRCAoUkZDIDY3NDksIFNlYy4gMi4zLjEpLgorICAgICAg ICBhc3NlcnQgIkF1dGhvcml6YXRpb24iIGluIGhlYWRlcnMKKworICAgICAgICBtZXRob2QsIGNy ZWRzID0gaGVhZGVyc1siQXV0aG9yaXphdGlvbiJdLnNwbGl0KCkKKyAgICAgICAgYXNzZXJ0IG1l dGhvZCA9PSAiQmFzaWMiCisKKyAgICAgICAgZXhwZWN0ZWQgPSBmIntjbGllbnRfaWR9OntzZWNy ZXR9IgorICAgICAgICBhc3NlcnQgYmFzZTY0LmI2NGRlY29kZShjcmVkcykgPT0gZXhwZWN0ZWQu ZW5jb2RlKCJhc2NpaSIpCisKKyAgICAjIFNldCB1cCBvdXIgcHJvdmlkZXIgY2FsbGJhY2tzLgor ICAgICMgTk9URSB0aGF0IHRoZXNlIGNhbGxiYWNrcyB3aWxsIGJlIGNhbGxlZCBvbiBhIGJhY2tn cm91bmQgdGhyZWFkLiBEb24ndCBkbworICAgICMgYW55IHVucHJvdGVjdGVkIHN0YXRlIG11dGF0 aW9uIGhlcmUuCisKKyAgICBkZWYgYXV0aG9yaXphdGlvbl9lbmRwb2ludChoZWFkZXJzLCBwYXJh bXMpOgorICAgICAgICBjaGVja19jbGllbnRfYXV0aG4oaGVhZGVycywgcGFyYW1zKQorCisgICAg ICAgIGlmIHNjb3BlOgorICAgICAgICAgICAgYXNzZXJ0IHBhcmFtc1sic2NvcGUiXSA9PSBbc2Nv cGVdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQgInNjb3BlIiBub3QgaW4gcGFy YW1zCisKKyAgICAgICAgcmVzcCA9IHsKKyAgICAgICAgICAgICJkZXZpY2VfY29kZSI6IGRldmlj ZV9jb2RlLAorICAgICAgICAgICAgInVzZXJfY29kZSI6IHVzZXJfY29kZSwKKyAgICAgICAgICAg ICJpbnRlcnZhbCI6IDAsCisgICAgICAgICAgICAidmVyaWZpY2F0aW9uX3VyaSI6IHZlcmlmaWNh dGlvbl91cmwsCisgICAgICAgICAgICAiZXhwaXJlc19pbiI6IDUsCisgICAgICAgIH0KKworICAg ICAgICByZXR1cm4gMjAwLCByZXNwCisKKyAgICBvcGVuaWRfcHJvdmlkZXIucmVnaXN0ZXJfZW5k cG9pbnQoCisgICAgICAgICJkZXZpY2VfYXV0aG9yaXphdGlvbl9lbmRwb2ludCIsICJQT1NUIiwg Ii9kZXZpY2UiLCBhdXRob3JpemF0aW9uX2VuZHBvaW50CisgICAgKQorCisgICAgYXR0ZW1wdHMg PSAwCisgICAgcmV0cnlfbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKworICAgIGRlZiB0b2tlbl9l bmRwb2ludChoZWFkZXJzLCBwYXJhbXMpOgorICAgICAgICBjaGVja19jbGllbnRfYXV0aG4oaGVh ZGVycywgcGFyYW1zKQorCisgICAgICAgIGFzc2VydCBwYXJhbXNbImdyYW50X3R5cGUiXSA9PSBb InVybjppZXRmOnBhcmFtczpvYXV0aDpncmFudC10eXBlOmRldmljZV9jb2RlIl0KKyAgICAgICAg YXNzZXJ0IHBhcmFtc1siZGV2aWNlX2NvZGUiXSA9PSBbZGV2aWNlX2NvZGVdCisKKyAgICAgICAg bm93ID0gdGltZS5tb25vdG9uaWMoKQorCisgICAgICAgIHdpdGggcmV0cnlfbG9jazoKKyAgICAg ICAgICAgIG5vbmxvY2FsIGF0dGVtcHRzCisKKyAgICAgICAgICAgICMgSWYgdGhlIHRlc3Qgd2Fu dHMgdG8gZm9yY2UgdGhlIGNsaWVudCB0byByZXRyeSwgcmV0dXJuIGFuCisgICAgICAgICAgICAj IGF1dGhvcml6YXRpb25fcGVuZGluZyByZXNwb25zZSBhbmQgZGVjcmVtZW50IHRoZSByZXRyeSBj b3VudC4KKyAgICAgICAgICAgIGlmIGF0dGVtcHRzIDwgcmV0cmllczoKKyAgICAgICAgICAgICAg ICBhdHRlbXB0cyArPSAxCisgICAgICAgICAgICAgICAgcmV0dXJuIDQwMCwgeyJlcnJvciI6ICJh dXRob3JpemF0aW9uX3BlbmRpbmcifQorCisgICAgICAgICMgU3VjY2Vzc2Z1bGx5IGZpbmlzaCB0 aGUgcmVxdWVzdCBieSBzZW5kaW5nIHRoZSBhY2Nlc3MgYmVhcmVyIHRva2VuLgorICAgICAgICBy ZXNwID0geworICAgICAgICAgICAgImFjY2Vzc190b2tlbiI6IGFjY2Vzc190b2tlbiwKKyAgICAg ICAgICAgICJ0b2tlbl90eXBlIjogImJlYXJlciIsCisgICAgICAgIH0KKworICAgICAgICByZXR1 cm4gMjAwLCByZXNwCisKKyAgICBvcGVuaWRfcHJvdmlkZXIucmVnaXN0ZXJfZW5kcG9pbnQoCisg ICAgICAgICJ0b2tlbl9lbmRwb2ludCIsICJQT1NUIiwgIi90b2tlbiIsIHRva2VuX2VuZHBvaW50 CisgICAgKQorCisgICAgd2l0aCBzb2NrOgorICAgICAgICB3aXRoIHBxMy53cmFwKHNvY2ssIGRl YnVnX3N0cmVhbT1zeXMuc3Rkb3V0KSBhcyBjb25uOgorICAgICAgICAgICAgIyBJbml0aWF0ZSBh IGhhbmRzaGFrZSwgd2hpY2ggc2hvdWxkIHJlc3VsdCBpbiB0aGUgYWJvdmUgZW5kcG9pbnRzCisg ICAgICAgICAgICAjIGJlaW5nIGNhbGxlZC4KKyAgICAgICAgICAgIGluaXRpYWwgPSBzdGFydF9v YXV0aF9oYW5kc2hha2UoY29ubikKKworICAgICAgICAgICAgIyBWYWxpZGF0ZSBhbmQgYWNjZXB0 IHRoZSB0b2tlbi4KKyAgICAgICAgICAgIGF1dGggPSBnZXRfYXV0aF92YWx1ZShpbml0aWFsKQor ICAgICAgICAgICAgYXNzZXJ0IGF1dGggPT0gZiJCZWFyZXIge2FjY2Vzc190b2tlbn0iLmVuY29k ZSgiYXNjaWkiKQorCisgICAgICAgICAgICBwcTMuc2VuZChjb25uLCBwcTMudHlwZXMuQXV0aG5S ZXF1ZXN0LCB0eXBlPXBxMy5hdXRobi5TQVNMRmluYWwpCisgICAgICAgICAgICBmaW5pc2hfaGFu ZHNoYWtlKGNvbm4pCisKKyAgICBpZiByZXRyaWVzOgorICAgICAgICAjIEZpbmFsbHksIG1ha2Ug c3VyZSB0aGF0IHRoZSBjbGllbnQgcHJvbXB0ZWQgdGhlIHVzZXIgd2l0aCB0aGUgZXhwZWN0ZWQK KyAgICAgICAgIyBhdXRob3JpemF0aW9uIFVSTCBhbmQgdXNlciBjb2RlLgorICAgICAgICBleHBl Y3RlZCA9IGYiVmlzaXQge3ZlcmlmaWNhdGlvbl91cmx9IGFuZCBlbnRlciB0aGUgY29kZToge3Vz ZXJfY29kZX0iCisgICAgICAgIF8sIHN0ZGVyciA9IGNhcGZkLnJlYWRvdXRlcnIoKQorICAgICAg ICBhc3NlcnQgZXhwZWN0ZWQgaW4gc3RkZXJyCisKKworZGVmIHRlc3Rfb2F1dGhfcmVxdWlyZXNf Y2xpZW50X2lkKGFjY2VwdCwgb3BlbmlkX3Byb3ZpZGVyKToKKyAgICBzb2NrLCBjbGllbnQgPSBh Y2NlcHQoCisgICAgICAgIG9hdXRoX2lzc3Vlcj1vcGVuaWRfcHJvdmlkZXIuaXNzdWVyLAorICAg ICAgICAjIERvIG5vdCBzZXQgYSBjbGllbnQgSUQ7IHRoaXMgc2hvdWxkIGNhdXNlIGEgY2xpZW50 IGVycm9yIGFmdGVyIHRoZQorICAgICAgICAjIHNlcnZlciBhc2tzIGZvciBPQVVUSEJFQVJFUiBh bmQgdGhlIGNsaWVudCB0cmllcyB0byBjb250YWN0IHRoZQorICAgICAgICAjIGlzc3Vlci4KKyAg ICApCisKKyAgICB3aXRoIHNvY2s6CisgICAgICAgIHdpdGggcHEzLndyYXAoc29jaywgZGVidWdf c3RyZWFtPXN5cy5zdGRvdXQpIGFzIGNvbm46CisgICAgICAgICAgICAjIEluaXRpYXRlIGEgaGFu ZHNoYWtlLgorICAgICAgICAgICAgc3RhcnR1cCA9IHBxMy5yZWN2MShjb25uLCBjbHM9cHEzLlN0 YXJ0dXApCisgICAgICAgICAgICBhc3NlcnQgc3RhcnR1cC5wcm90byA9PSBwcTMucHJvdG9jb2wo MywgMCkKKworICAgICAgICAgICAgcHEzLnNlbmQoCisgICAgICAgICAgICAgICAgY29ubiwKKyAg ICAgICAgICAgICAgICBwcTMudHlwZXMuQXV0aG5SZXF1ZXN0LAorICAgICAgICAgICAgICAgIHR5 cGU9cHEzLmF1dGhuLlNBU0wsCisgICAgICAgICAgICAgICAgYm9keT1bYiJPQVVUSEJFQVJFUiIs IGIiIl0sCisgICAgICAgICAgICApCisKKyAgICAgICAgICAgICMgVGhlIGNsaWVudCBzaG91bGQg ZGlzY29ubmVjdCBhdCB0aGlzIHBvaW50LgorICAgICAgICAgICAgYXNzZXJ0IG5vdCBjb25uLnJl YWQoKQorCisgICAgZXhwZWN0ZWRfZXJyb3IgPSAibm8gb2F1dGhfY2xpZW50X2lkIGlzIHNldCIK KyAgICB3aXRoIHB5dGVzdC5yYWlzZXMocHN5Y29wZzIuT3BlcmF0aW9uYWxFcnJvciwgbWF0Y2g9 ZXhwZWN0ZWRfZXJyb3IpOgorICAgICAgICBjbGllbnQuY2hlY2tfY29tcGxldGVkKCkKKworCitA cHl0ZXN0Lm1hcmsuc2xvdworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJlcnJvcl9jb2RlIiwg WyJhdXRob3JpemF0aW9uX3BlbmRpbmciLCAic2xvd19kb3duIl0pCitAcHl0ZXN0Lm1hcmsucGFy YW1ldHJpemUoInJldHJpZXMiLCBbMSwgMl0pCitkZWYgdGVzdF9vYXV0aF9yZXRyeV9pbnRlcnZh bChhY2NlcHQsIG9wZW5pZF9wcm92aWRlciwgcmV0cmllcywgZXJyb3JfY29kZSk6CisgICAgc29j aywgY2xpZW50ID0gYWNjZXB0KAorICAgICAgICBvYXV0aF9pc3N1ZXI9b3BlbmlkX3Byb3ZpZGVy Lmlzc3VlciwKKyAgICAgICAgb2F1dGhfY2xpZW50X2lkPSJzb21lLWlkIiwKKyAgICApCisKKyAg ICBleHBlY3RlZF9yZXRyeV9pbnRlcnZhbCA9IDEKKyAgICBhY2Nlc3NfdG9rZW4gPSBzZWNyZXRz LnRva2VuX3VybHNhZmUoKQorCisgICAgIyBTZXQgdXAgb3VyIHByb3ZpZGVyIGNhbGxiYWNrcy4K KyAgICAjIE5PVEUgdGhhdCB0aGVzZSBjYWxsYmFja3Mgd2lsbCBiZSBjYWxsZWQgb24gYSBiYWNr Z3JvdW5kIHRocmVhZC4gRG9uJ3QgZG8KKyAgICAjIGFueSB1bnByb3RlY3RlZCBzdGF0ZSBtdXRh dGlvbiBoZXJlLgorCisgICAgZGVmIGF1dGhvcml6YXRpb25fZW5kcG9pbnQoaGVhZGVycywgcGFy YW1zKToKKyAgICAgICAgcmVzcCA9IHsKKyAgICAgICAgICAgICJkZXZpY2VfY29kZSI6ICJteS1k ZXZpY2UtY29kZSIsCisgICAgICAgICAgICAidXNlcl9jb2RlIjogIm15LXVzZXItY29kZSIsCisg ICAgICAgICAgICAiaW50ZXJ2YWwiOiBleHBlY3RlZF9yZXRyeV9pbnRlcnZhbCwKKyAgICAgICAg ICAgICJ2ZXJpZmljYXRpb25fdXJpIjogImh0dHBzOi8vZXhhbXBsZS5jb20iLAorICAgICAgICAg ICAgImV4cGlyZXNfaW4iOiA1LAorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIDIwMCwgcmVz cAorCisgICAgb3BlbmlkX3Byb3ZpZGVyLnJlZ2lzdGVyX2VuZHBvaW50KAorICAgICAgICAiZGV2 aWNlX2F1dGhvcml6YXRpb25fZW5kcG9pbnQiLCAiUE9TVCIsICIvZGV2aWNlIiwgYXV0aG9yaXph dGlvbl9lbmRwb2ludAorICAgICkKKworICAgIGF0dGVtcHRzID0gMAorICAgIGxhc3RfcmV0cnkg PSBOb25lCisgICAgcmV0cnlfbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKworICAgIGRlZiB0b2tl bl9lbmRwb2ludChoZWFkZXJzLCBwYXJhbXMpOgorICAgICAgICBub3cgPSB0aW1lLm1vbm90b25p YygpCisKKyAgICAgICAgd2l0aCByZXRyeV9sb2NrOgorICAgICAgICAgICAgbm9ubG9jYWwgYXR0 ZW1wdHMsIGxhc3RfcmV0cnksIGV4cGVjdGVkX3JldHJ5X2ludGVydmFsCisKKyAgICAgICAgICAg ICMgTWFrZSBzdXJlIHRoZSByZXRyeSBpbnRlcnZhbCBpcyBiZWluZyByZXNwZWN0ZWQgYnkgdGhl IGNsaWVudC4KKyAgICAgICAgICAgIGlmIGxhc3RfcmV0cnkgaXMgbm90IE5vbmU6CisgICAgICAg ICAgICAgICAgaW50ZXJ2YWwgPSBub3cgLSBsYXN0X3JldHJ5CisgICAgICAgICAgICAgICAgYXNz ZXJ0IGludGVydmFsID49IGV4cGVjdGVkX3JldHJ5X2ludGVydmFsCisKKyAgICAgICAgICAgIGxh c3RfcmV0cnkgPSBub3cKKworICAgICAgICAgICAgIyBJZiB0aGUgdGVzdCB3YW50cyB0byBmb3Jj ZSB0aGUgY2xpZW50IHRvIHJldHJ5LCByZXR1cm4gdGhlIGRlc2lyZWQKKyAgICAgICAgICAgICMg ZXJyb3IgcmVzcG9uc2UgYW5kIGRlY3JlbWVudCB0aGUgcmV0cnkgY291bnQuCisgICAgICAgICAg ICBpZiBhdHRlbXB0cyA8IHJldHJpZXM6CisgICAgICAgICAgICAgICAgYXR0ZW1wdHMgKz0gMQor CisgICAgICAgICAgICAgICAgIyBBIHNsb3dfZG93biBjb2RlIHJlcXVpcmVzIHRoZSBjbGllbnQg dG8gYWRkaXRpb25hbGx5IGluY3JlYXNlCisgICAgICAgICAgICAgICAgIyBpdHMgaW50ZXJ2YWwg YnkgZml2ZSBzZWNvbmRzLgorICAgICAgICAgICAgICAgIGlmIGVycm9yX2NvZGUgPT0gInNsb3df ZG93biI6CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3JldHJ5X2ludGVydmFsICs9IDUK KworICAgICAgICAgICAgICAgIHJldHVybiA0MDAsIHsiZXJyb3IiOiBlcnJvcl9jb2RlfQorCisg ICAgICAgICMgU3VjY2Vzc2Z1bGx5IGZpbmlzaCB0aGUgcmVxdWVzdCBieSBzZW5kaW5nIHRoZSBh Y2Nlc3MgYmVhcmVyIHRva2VuLgorICAgICAgICByZXNwID0geworICAgICAgICAgICAgImFjY2Vz c190b2tlbiI6IGFjY2Vzc190b2tlbiwKKyAgICAgICAgICAgICJ0b2tlbl90eXBlIjogImJlYXJl ciIsCisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gMjAwLCByZXNwCisKKyAgICBvcGVuaWRf cHJvdmlkZXIucmVnaXN0ZXJfZW5kcG9pbnQoCisgICAgICAgICJ0b2tlbl9lbmRwb2ludCIsICJQ T1NUIiwgIi90b2tlbiIsIHRva2VuX2VuZHBvaW50CisgICAgKQorCisgICAgd2l0aCBzb2NrOgor ICAgICAgICB3aXRoIHBxMy53cmFwKHNvY2ssIGRlYnVnX3N0cmVhbT1zeXMuc3Rkb3V0KSBhcyBj b25uOgorICAgICAgICAgICAgIyBJbml0aWF0ZSBhIGhhbmRzaGFrZSwgd2hpY2ggc2hvdWxkIHJl c3VsdCBpbiB0aGUgYWJvdmUgZW5kcG9pbnRzCisgICAgICAgICAgICAjIGJlaW5nIGNhbGxlZC4K KyAgICAgICAgICAgIGluaXRpYWwgPSBzdGFydF9vYXV0aF9oYW5kc2hha2UoY29ubikKKworICAg ICAgICAgICAgIyBWYWxpZGF0ZSBhbmQgYWNjZXB0IHRoZSB0b2tlbi4KKyAgICAgICAgICAgIGF1 dGggPSBnZXRfYXV0aF92YWx1ZShpbml0aWFsKQorICAgICAgICAgICAgYXNzZXJ0IGF1dGggPT0g ZiJCZWFyZXIge2FjY2Vzc190b2tlbn0iLmVuY29kZSgiYXNjaWkiKQorCisgICAgICAgICAgICBw cTMuc2VuZChjb25uLCBwcTMudHlwZXMuQXV0aG5SZXF1ZXN0LCB0eXBlPXBxMy5hdXRobi5TQVNM RmluYWwpCisgICAgICAgICAgICBmaW5pc2hfaGFuZHNoYWtlKGNvbm4pCisKKworQHB5dGVzdC5t YXJrLnBhcmFtZXRyaXplKAorICAgICJmYWlsdXJlX21vZGUsIGVycm9yX3BhdHRlcm4iLAorICAg IFsKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg ICJlcnJvciI6ICJpbnZhbGlkX2NsaWVudCIsCisgICAgICAgICAgICAgICAgImVycm9yX2Rlc2Ny aXB0aW9uIjogImNsaWVudCBhdXRoZW50aWNhdGlvbiBmYWlsZWQiLAorICAgICAgICAgICAgfSwK KyAgICAgICAgICAgIHIiY2xpZW50IGF1dGhlbnRpY2F0aW9uIGZhaWxlZCBcKGludmFsaWRfY2xp ZW50XCkiLAorICAgICAgICAgICAgaWQ9ImF1dGhlbnRpY2F0aW9uIGZhaWx1cmUgd2l0aCBkZXNj cmlwdGlvbiIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAg IHsiZXJyb3IiOiAiaW52YWxpZF9yZXF1ZXN0In0sCisgICAgICAgICAgICByIlwoaW52YWxpZF9y ZXF1ZXN0XCkiLAorICAgICAgICAgICAgaWQ9ImludmFsaWQgcmVxdWVzdCB3aXRob3V0IGRlc2Ny aXB0aW9uIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAg e30sCisgICAgICAgICAgICByImZhaWxlZCB0byBvYnRhaW4gZGV2aWNlIGF1dGhvcml6YXRpb24i LAorICAgICAgICAgICAgaWQ9ImJyb2tlbiBlcnJvciByZXNwb25zZSIsCisgICAgICAgICksCisg ICAgXSwKKykKK2RlZiB0ZXN0X29hdXRoX2RldmljZV9hdXRob3JpemF0aW9uX2ZhaWx1cmVzKAor ICAgIGFjY2VwdCwgb3BlbmlkX3Byb3ZpZGVyLCBmYWlsdXJlX21vZGUsIGVycm9yX3BhdHRlcm4K Kyk6CisgICAgY2xpZW50X2lkID0gc2VjcmV0cy50b2tlbl9oZXgoKQorCisgICAgc29jaywgY2xp ZW50ID0gYWNjZXB0KAorICAgICAgICBvYXV0aF9pc3N1ZXI9b3BlbmlkX3Byb3ZpZGVyLmlzc3Vl ciwKKyAgICAgICAgb2F1dGhfY2xpZW50X2lkPWNsaWVudF9pZCwKKyAgICApCisKKyAgICAjIFNl dCB1cCBvdXIgcHJvdmlkZXIgY2FsbGJhY2tzLgorICAgICMgTk9URSB0aGF0IHRoZXNlIGNhbGxi YWNrcyB3aWxsIGJlIGNhbGxlZCBvbiBhIGJhY2tncm91bmQgdGhyZWFkLiBEb24ndCBkbworICAg ICMgYW55IHVucHJvdGVjdGVkIHN0YXRlIG11dGF0aW9uIGhlcmUuCisKKyAgICBkZWYgYXV0aG9y aXphdGlvbl9lbmRwb2ludChoZWFkZXJzLCBwYXJhbXMpOgorICAgICAgICByZXR1cm4gNDAwLCBm YWlsdXJlX21vZGUKKworICAgIG9wZW5pZF9wcm92aWRlci5yZWdpc3Rlcl9lbmRwb2ludCgKKyAg ICAgICAgImRldmljZV9hdXRob3JpemF0aW9uX2VuZHBvaW50IiwgIlBPU1QiLCAiL2RldmljZSIs IGF1dGhvcml6YXRpb25fZW5kcG9pbnQKKyAgICApCisKKyAgICBkZWYgdG9rZW5fZW5kcG9pbnQo aGVhZGVycywgcGFyYW1zKToKKyAgICAgICAgYXNzZXJ0IEZhbHNlLCAidG9rZW4gZW5kcG9pbnQg d2FzIGludm9rZWQgdW5leHBlY3RlZGx5IgorCisgICAgb3BlbmlkX3Byb3ZpZGVyLnJlZ2lzdGVy X2VuZHBvaW50KAorICAgICAgICAidG9rZW5fZW5kcG9pbnQiLCAiUE9TVCIsICIvdG9rZW4iLCB0 b2tlbl9lbmRwb2ludAorICAgICkKKworICAgIHdpdGggc29jazoKKyAgICAgICAgd2l0aCBwcTMu d3JhcChzb2NrLCBkZWJ1Z19zdHJlYW09c3lzLnN0ZG91dCkgYXMgY29ubjoKKyAgICAgICAgICAg ICMgSW5pdGlhdGUgYSBoYW5kc2hha2UsIHdoaWNoIHNob3VsZCByZXN1bHQgaW4gdGhlIGFib3Zl IGVuZHBvaW50cworICAgICAgICAgICAgIyBiZWluZyBjYWxsZWQuCisgICAgICAgICAgICBzdGFy dHVwID0gcHEzLnJlY3YxKGNvbm4sIGNscz1wcTMuU3RhcnR1cCkKKyAgICAgICAgICAgIGFzc2Vy dCBzdGFydHVwLnByb3RvID09IHBxMy5wcm90b2NvbCgzLCAwKQorCisgICAgICAgICAgICBwcTMu c2VuZCgKKyAgICAgICAgICAgICAgICBjb25uLAorICAgICAgICAgICAgICAgIHBxMy50eXBlcy5B dXRoblJlcXVlc3QsCisgICAgICAgICAgICAgICAgdHlwZT1wcTMuYXV0aG4uU0FTTCwKKyAgICAg ICAgICAgICAgICBib2R5PVtiIk9BVVRIQkVBUkVSIiwgYiIiXSwKKyAgICAgICAgICAgICkKKwor ICAgICAgICAgICAgIyBUaGUgY2xpZW50IHNob3VsZCBub3QgY29udGludWUgdGhlIGNvbm5lY3Rp b24gZHVlIHRvIHRoZSBoYXJkY29kZWQKKyAgICAgICAgICAgICMgcHJvdmlkZXIgZmFpbHVyZTsg d2UgZGlzY29ubmVjdCBoZXJlLgorCisgICAgIyBOb3cgbWFrZSBzdXJlIHRoZSBjbGllbnQgY29y cmVjdGx5IGZhaWxlZC4KKyAgICB3aXRoIHB5dGVzdC5yYWlzZXMocHN5Y29wZzIuT3BlcmF0aW9u YWxFcnJvciwgbWF0Y2g9ZXJyb3JfcGF0dGVybik6CisgICAgICAgIGNsaWVudC5jaGVja19jb21w bGV0ZWQoKQorCisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgKKyAgICAiZmFpbHVyZV9tb2Rl LCBlcnJvcl9wYXR0ZXJuIiwKKyAgICBbCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICAiZXJyb3IiOiAiZXhwaXJlZF90b2tlbiIsCisgICAgICAg ICAgICAgICAgImVycm9yX2Rlc2NyaXB0aW9uIjogInRoZSBkZXZpY2UgY29kZSBoYXMgZXhwaXJl ZCIsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgciJ0aGUgZGV2aWNlIGNvZGUgaGFzIGV4 cGlyZWQgXChleHBpcmVkX3Rva2VuXCkiLAorICAgICAgICAgICAgaWQ9ImV4cGlyZWQgdG9rZW4g d2l0aCBkZXNjcmlwdGlvbiIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAg ICAgICAgICAgIHsiZXJyb3IiOiAiYWNjZXNzX2RlbmllZCJ9LAorICAgICAgICAgICAgciJcKGFj Y2Vzc19kZW5pZWRcKSIsCisgICAgICAgICAgICBpZD0iYWNjZXNzIGRlbmllZCB3aXRob3V0IGRl c2NyaXB0aW9uIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAg ICAge30sCisgICAgICAgICAgICByIk9BdXRoIHRva2VuIHJldHJpZXZhbCBmYWlsZWQiLAorICAg ICAgICAgICAgaWQ9ImJyb2tlbiBlcnJvciByZXNwb25zZSIsCisgICAgICAgICksCisgICAgXSwK KykKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgicmV0cmllcyIsIFswLCAxXSkKK2RlZiB0ZXN0 X29hdXRoX3Rva2VuX2ZhaWx1cmVzKAorICAgIGFjY2VwdCwgb3BlbmlkX3Byb3ZpZGVyLCByZXRy aWVzLCBmYWlsdXJlX21vZGUsIGVycm9yX3BhdHRlcm4KKyk6CisgICAgY2xpZW50X2lkID0gc2Vj cmV0cy50b2tlbl9oZXgoKQorCisgICAgc29jaywgY2xpZW50ID0gYWNjZXB0KAorICAgICAgICBv YXV0aF9pc3N1ZXI9b3BlbmlkX3Byb3ZpZGVyLmlzc3VlciwKKyAgICAgICAgb2F1dGhfY2xpZW50 X2lkPWNsaWVudF9pZCwKKyAgICApCisKKyAgICBkZXZpY2VfY29kZSA9IHNlY3JldHMudG9rZW5f aGV4KCkKKyAgICB1c2VyX2NvZGUgPSBmIntzZWNyZXRzLnRva2VuX2hleCgyKX0te3NlY3JldHMu dG9rZW5faGV4KDIpfSIKKworICAgICMgU2V0IHVwIG91ciBwcm92aWRlciBjYWxsYmFja3MuCisg ICAgIyBOT1RFIHRoYXQgdGhlc2UgY2FsbGJhY2tzIHdpbGwgYmUgY2FsbGVkIG9uIGEgYmFja2dy b3VuZCB0aHJlYWQuIERvbid0IGRvCisgICAgIyBhbnkgdW5wcm90ZWN0ZWQgc3RhdGUgbXV0YXRp b24gaGVyZS4KKworICAgIGRlZiBhdXRob3JpemF0aW9uX2VuZHBvaW50KGhlYWRlcnMsIHBhcmFt cyk6CisgICAgICAgIGFzc2VydCBwYXJhbXNbImNsaWVudF9pZCJdID09IFtjbGllbnRfaWRdCisK KyAgICAgICAgcmVzcCA9IHsKKyAgICAgICAgICAgICJkZXZpY2VfY29kZSI6IGRldmljZV9jb2Rl LAorICAgICAgICAgICAgInVzZXJfY29kZSI6IHVzZXJfY29kZSwKKyAgICAgICAgICAgICJpbnRl cnZhbCI6IDAsCisgICAgICAgICAgICAidmVyaWZpY2F0aW9uX3VyaSI6ICJodHRwczovL2V4YW1w bGUuY29tL2RldmljZSIsCisgICAgICAgICAgICAiZXhwaXJlc19pbiI6IDUsCisgICAgICAgIH0K KworICAgICAgICByZXR1cm4gMjAwLCByZXNwCisKKyAgICBvcGVuaWRfcHJvdmlkZXIucmVnaXN0 ZXJfZW5kcG9pbnQoCisgICAgICAgICJkZXZpY2VfYXV0aG9yaXphdGlvbl9lbmRwb2ludCIsICJQ T1NUIiwgIi9kZXZpY2UiLCBhdXRob3JpemF0aW9uX2VuZHBvaW50CisgICAgKQorCisgICAgcmV0 cnlfbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKworICAgIGRlZiB0b2tlbl9lbmRwb2ludChoZWFk ZXJzLCBwYXJhbXMpOgorICAgICAgICB3aXRoIHJldHJ5X2xvY2s6CisgICAgICAgICAgICBub25s b2NhbCByZXRyaWVzCisKKyAgICAgICAgICAgICMgSWYgdGhlIHRlc3Qgd2FudHMgdG8gZm9yY2Ug dGhlIGNsaWVudCB0byByZXRyeSwgcmV0dXJuIGFuCisgICAgICAgICAgICAjIGF1dGhvcml6YXRp b25fcGVuZGluZyByZXNwb25zZSBhbmQgZGVjcmVtZW50IHRoZSByZXRyeSBjb3VudC4KKyAgICAg ICAgICAgIGlmIHJldHJpZXMgPiAwOgorICAgICAgICAgICAgICAgIHJldHJpZXMgLT0gMQorICAg ICAgICAgICAgICAgIHJldHVybiA0MDAsIHsiZXJyb3IiOiAiYXV0aG9yaXphdGlvbl9wZW5kaW5n In0KKworICAgICAgICByZXR1cm4gNDAwLCBmYWlsdXJlX21vZGUKKworICAgIG9wZW5pZF9wcm92 aWRlci5yZWdpc3Rlcl9lbmRwb2ludCgKKyAgICAgICAgInRva2VuX2VuZHBvaW50IiwgIlBPU1Qi LCAiL3Rva2VuIiwgdG9rZW5fZW5kcG9pbnQKKyAgICApCisKKyAgICB3aXRoIHNvY2s6CisgICAg ICAgIHdpdGggcHEzLndyYXAoc29jaywgZGVidWdfc3RyZWFtPXN5cy5zdGRvdXQpIGFzIGNvbm46 CisgICAgICAgICAgICAjIEluaXRpYXRlIGEgaGFuZHNoYWtlLCB3aGljaCBzaG91bGQgcmVzdWx0 IGluIHRoZSBhYm92ZSBlbmRwb2ludHMKKyAgICAgICAgICAgICMgYmVpbmcgY2FsbGVkLgorICAg ICAgICAgICAgc3RhcnR1cCA9IHBxMy5yZWN2MShjb25uLCBjbHM9cHEzLlN0YXJ0dXApCisgICAg ICAgICAgICBhc3NlcnQgc3RhcnR1cC5wcm90byA9PSBwcTMucHJvdG9jb2woMywgMCkKKworICAg ICAgICAgICAgcHEzLnNlbmQoCisgICAgICAgICAgICAgICAgY29ubiwKKyAgICAgICAgICAgICAg ICBwcTMudHlwZXMuQXV0aG5SZXF1ZXN0LAorICAgICAgICAgICAgICAgIHR5cGU9cHEzLmF1dGhu LlNBU0wsCisgICAgICAgICAgICAgICAgYm9keT1bYiJPQVVUSEJFQVJFUiIsIGIiIl0sCisgICAg ICAgICAgICApCisKKyAgICAgICAgICAgICMgVGhlIGNsaWVudCBzaG91bGQgbm90IGNvbnRpbnVl IHRoZSBjb25uZWN0aW9uIGR1ZSB0byB0aGUgaGFyZGNvZGVkCisgICAgICAgICAgICAjIHByb3Zp ZGVyIGZhaWx1cmU7IHdlIGRpc2Nvbm5lY3QgaGVyZS4KKworICAgICMgTm93IG1ha2Ugc3VyZSB0 aGUgY2xpZW50IGNvcnJlY3RseSBmYWlsZWQuCisgICAgd2l0aCBweXRlc3QucmFpc2VzKHBzeWNv cGcyLk9wZXJhdGlvbmFsRXJyb3IsIG1hdGNoPWVycm9yX3BhdHRlcm4pOgorICAgICAgICBjbGll bnQuY2hlY2tfY29tcGxldGVkKCkKKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoInNjb3Bl IiwgW05vbmUsICJvcGVuaWQgZW1haWwiXSkKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgKKyAg ICAiYmFzZV9yZXNwb25zZSIsCisgICAgWworICAgICAgICB7InN0YXR1cyI6ICJpbnZhbGlkX3Rv a2VuIn0sCisgICAgICAgIHsiZXh0cmFfb2JqZWN0IjogeyJrZXkiOiAidmFsdWUifSwgInN0YXR1 cyI6ICJpbnZhbGlkX3Rva2VuIn0sCisgICAgICAgIHsiZXh0cmFfb2JqZWN0IjogeyJzdGF0dXMi OiAxfSwgInN0YXR1cyI6ICJpbnZhbGlkX3Rva2VuIn0sCisgICAgXSwKKykKK2RlZiB0ZXN0X29h dXRoX2Rpc2NvdmVyeShhY2NlcHQsIG9wZW5pZF9wcm92aWRlciwgYmFzZV9yZXNwb25zZSwgc2Nv cGUpOgorICAgIHNvY2ssIGNsaWVudCA9IGFjY2VwdChvYXV0aF9jbGllbnRfaWQ9c2VjcmV0cy50 b2tlbl9oZXgoKSkKKworICAgIGRldmljZV9jb2RlID0gc2VjcmV0cy50b2tlbl9oZXgoKQorICAg IHVzZXJfY29kZSA9IGYie3NlY3JldHMudG9rZW5faGV4KDIpfS17c2VjcmV0cy50b2tlbl9oZXgo Mil9IgorICAgIHZlcmlmaWNhdGlvbl91cmwgPSAiaHR0cHM6Ly9leGFtcGxlLmNvbS9kZXZpY2Ui CisKKyAgICBhY2Nlc3NfdG9rZW4gPSBzZWNyZXRzLnRva2VuX3VybHNhZmUoKQorCisgICAgIyBT ZXQgdXAgb3VyIHByb3ZpZGVyIGNhbGxiYWNrcy4KKyAgICAjIE5PVEUgdGhhdCB0aGVzZSBjYWxs YmFja3Mgd2lsbCBiZSBjYWxsZWQgb24gYSBiYWNrZ3JvdW5kIHRocmVhZC4gRG9uJ3QgZG8KKyAg ICAjIGFueSB1bnByb3RlY3RlZCBzdGF0ZSBtdXRhdGlvbiBoZXJlLgorCisgICAgZGVmIGF1dGhv cml6YXRpb25fZW5kcG9pbnQoaGVhZGVycywgcGFyYW1zKToKKyAgICAgICAgaWYgc2NvcGU6Cisg ICAgICAgICAgICBhc3NlcnQgcGFyYW1zWyJzY29wZSJdID09IFtzY29wZV0KKyAgICAgICAgZWxz ZToKKyAgICAgICAgICAgIGFzc2VydCAic2NvcGUiIG5vdCBpbiBwYXJhbXMKKworICAgICAgICBy ZXNwID0geworICAgICAgICAgICAgImRldmljZV9jb2RlIjogZGV2aWNlX2NvZGUsCisgICAgICAg ICAgICAidXNlcl9jb2RlIjogdXNlcl9jb2RlLAorICAgICAgICAgICAgImludGVydmFsIjogMCwK KyAgICAgICAgICAgICJ2ZXJpZmljYXRpb25fdXJpIjogdmVyaWZpY2F0aW9uX3VybCwKKyAgICAg ICAgICAgICJleHBpcmVzX2luIjogNSwKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAyMDAs IHJlc3AKKworICAgIG9wZW5pZF9wcm92aWRlci5yZWdpc3Rlcl9lbmRwb2ludCgKKyAgICAgICAg ImRldmljZV9hdXRob3JpemF0aW9uX2VuZHBvaW50IiwgIlBPU1QiLCAiL2RldmljZSIsIGF1dGhv cml6YXRpb25fZW5kcG9pbnQKKyAgICApCisKKyAgICBkZWYgdG9rZW5fZW5kcG9pbnQoaGVhZGVy cywgcGFyYW1zKToKKyAgICAgICAgYXNzZXJ0IHBhcmFtc1siZ3JhbnRfdHlwZSJdID09IFsidXJu OmlldGY6cGFyYW1zOm9hdXRoOmdyYW50LXR5cGU6ZGV2aWNlX2NvZGUiXQorICAgICAgICBhc3Nl cnQgcGFyYW1zWyJkZXZpY2VfY29kZSJdID09IFtkZXZpY2VfY29kZV0KKworICAgICAgICAjIFN1 Y2Nlc3NmdWxseSBmaW5pc2ggdGhlIHJlcXVlc3QgYnkgc2VuZGluZyB0aGUgYWNjZXNzIGJlYXJl ciB0b2tlbi4KKyAgICAgICAgcmVzcCA9IHsKKyAgICAgICAgICAgICJhY2Nlc3NfdG9rZW4iOiBh Y2Nlc3NfdG9rZW4sCisgICAgICAgICAgICAidG9rZW5fdHlwZSI6ICJiZWFyZXIiLAorICAgICAg ICB9CisKKyAgICAgICAgcmV0dXJuIDIwMCwgcmVzcAorCisgICAgb3BlbmlkX3Byb3ZpZGVyLnJl Z2lzdGVyX2VuZHBvaW50KAorICAgICAgICAidG9rZW5fZW5kcG9pbnQiLCAiUE9TVCIsICIvdG9r ZW4iLCB0b2tlbl9lbmRwb2ludAorICAgICkKKworICAgIHdpdGggc29jazoKKyAgICAgICAgd2l0 aCBwcTMud3JhcChzb2NrLCBkZWJ1Z19zdHJlYW09c3lzLnN0ZG91dCkgYXMgY29ubjoKKyAgICAg ICAgICAgIGluaXRpYWwgPSBzdGFydF9vYXV0aF9oYW5kc2hha2UoY29ubikKKworICAgICAgICAg ICAgIyBGb3IgZGlzY292ZXJ5LCB0aGUgY2xpZW50IHNob3VsZCBzZW5kIGFuIGVtcHR5IGF1dGgg aGVhZGVyLiBTZWUKKyAgICAgICAgICAgICMgUkZDIDc2MjgsIFNlYy4gNC4zLgorICAgICAgICAg ICAgYXV0aCA9IGdldF9hdXRoX3ZhbHVlKGluaXRpYWwpCisgICAgICAgICAgICBhc3NlcnQgYXV0 aCA9PSBiIiIKKworICAgICAgICAgICAgIyBXZSB3aWxsIGZhaWwgdGhlIGZpcnN0IFNBU0wgZXhj aGFuZ2UuIEZpcnN0IHJldHVybiBhIGxpbmsgdG8gdGhlCisgICAgICAgICAgICAjIGRpc2NvdmVy eSBkb2N1bWVudCwgcG9pbnRpbmcgdG8gdGhlIHRlc3QgcHJvdmlkZXIgc2VydmVyLgorICAgICAg ICAgICAgcmVzcCA9IGRpY3QoYmFzZV9yZXNwb25zZSkKKworICAgICAgICAgICAgZGlzY292ZXJ5 X3VyaSA9IGYie29wZW5pZF9wcm92aWRlci5pc3N1ZXJ9Ly53ZWxsLWtub3duL29wZW5pZC1jb25m aWd1cmF0aW9uIgorICAgICAgICAgICAgcmVzcFsib3BlbmlkLWNvbmZpZ3VyYXRpb24iXSA9IGRp c2NvdmVyeV91cmkKKworICAgICAgICAgICAgaWYgc2NvcGU6CisgICAgICAgICAgICAgICAgcmVz cFsic2NvcGUiXSA9IHNjb3BlCisKKyAgICAgICAgICAgIHJlc3AgPSBqc29uLmR1bXBzKHJlc3Ap CisKKyAgICAgICAgICAgIHBxMy5zZW5kKAorICAgICAgICAgICAgICAgIGNvbm4sCisgICAgICAg ICAgICAgICAgcHEzLnR5cGVzLkF1dGhuUmVxdWVzdCwKKyAgICAgICAgICAgICAgICB0eXBlPXBx My5hdXRobi5TQVNMQ29udGludWUsCisgICAgICAgICAgICAgICAgYm9keT1yZXNwLmVuY29kZSgi YXNjaWkiKSwKKyAgICAgICAgICAgICkKKworICAgICAgICAgICAgIyBQZXIgUkZDLCB0aGUgY2xp ZW50IGlzIHJlcXVpcmVkIHRvIHNlbmQgYSBkdW1teSBeQSByZXNwb25zZS4KKyAgICAgICAgICAg IHBrdCA9IHBxMy5yZWN2MShjb25uKQorICAgICAgICAgICAgYXNzZXJ0IHBrdC50eXBlID09IHBx My50eXBlcy5QYXNzd29yZE1lc3NhZ2UKKyAgICAgICAgICAgIGFzc2VydCBwa3QucGF5bG9hZCA9 PSBiIlx4MDEiCisKKyAgICAgICAgICAgICMgTm93IGZhaWwgdGhlIFNBU0wgZXhjaGFuZ2UuCisg ICAgICAgICAgICBwcTMuc2VuZCgKKyAgICAgICAgICAgICAgICBjb25uLAorICAgICAgICAgICAg ICAgIHBxMy50eXBlcy5FcnJvclJlc3BvbnNlLAorICAgICAgICAgICAgICAgIGZpZWxkcz1bCisg ICAgICAgICAgICAgICAgICAgIGIiU0ZBVEFMIiwKKyAgICAgICAgICAgICAgICAgICAgYiJDMjgw MDAiLAorICAgICAgICAgICAgICAgICAgICBiIk1kb2Vzbid0IG1hdHRlciIsCisgICAgICAgICAg ICAgICAgICAgIGIiIiwKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgKQorCisgICAg IyBUaGUgY2xpZW50IHdpbGwgY29ubmVjdCB0byB1cyBhIHNlY29uZCB0aW1lLCB1c2luZyB0aGUg cGFyYW1ldGVycyB3ZSBzZW50CisgICAgIyBpdC4KKyAgICBzb2NrLCBfID0gYWNjZXB0KCkKKwor ICAgIHdpdGggc29jazoKKyAgICAgICAgd2l0aCBwcTMud3JhcChzb2NrLCBkZWJ1Z19zdHJlYW09 c3lzLnN0ZG91dCkgYXMgY29ubjoKKyAgICAgICAgICAgIGluaXRpYWwgPSBzdGFydF9vYXV0aF9o YW5kc2hha2UoY29ubikKKworICAgICAgICAgICAgIyBWYWxpZGF0ZSBhbmQgYWNjZXB0IHRoZSB0 b2tlbi4KKyAgICAgICAgICAgIGF1dGggPSBnZXRfYXV0aF92YWx1ZShpbml0aWFsKQorICAgICAg ICAgICAgYXNzZXJ0IGF1dGggPT0gZiJCZWFyZXIge2FjY2Vzc190b2tlbn0iLmVuY29kZSgiYXNj aWkiKQorCisgICAgICAgICAgICBwcTMuc2VuZChjb25uLCBwcTMudHlwZXMuQXV0aG5SZXF1ZXN0 LCB0eXBlPXBxMy5hdXRobi5TQVNMRmluYWwpCisgICAgICAgICAgICBmaW5pc2hfaGFuZHNoYWtl KGNvbm4pCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKAorICAgICJyZXNwb25zZSxleHBl Y3RlZF9lcnJvciIsCisgICAgWworICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICAi YWJjZGUiLAorICAgICAgICAgICAgJ1Rva2VuICJhYmNkZSIgaXMgaW52YWxpZCcsCisgICAgICAg ICAgICBpZD0iYmFkIEpTT046IGludmFsaWQgc3ludGF4IiwKKyAgICAgICAgKSwKKyAgICAgICAg cHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgJyJhYmNkZSInLAorICAgICAgICAgICAgInRvcC1s ZXZlbCBlbGVtZW50IG11c3QgYmUgYW4gb2JqZWN0IiwKKyAgICAgICAgICAgIGlkPSJiYWQgSlNP TjogdG9wLWxldmVsIGVsZW1lbnQgaXMgYSBzdHJpbmciLAorICAgICAgICApLAorICAgICAgICBw eXRlc3QucGFyYW0oCisgICAgICAgICAgICAiW10iLAorICAgICAgICAgICAgInRvcC1sZXZlbCBl bGVtZW50IG11c3QgYmUgYW4gb2JqZWN0IiwKKyAgICAgICAgICAgIGlkPSJiYWQgSlNPTjogdG9w LWxldmVsIGVsZW1lbnQgaXMgYW4gYXJyYXkiLAorICAgICAgICApLAorICAgICAgICBweXRlc3Qu cGFyYW0oCisgICAgICAgICAgICAie30iLAorICAgICAgICAgICAgInNlcnZlciBzZW50IGVycm9y IHJlc3BvbnNlIHdpdGhvdXQgYSBzdGF0dXMiLAorICAgICAgICAgICAgaWQ9ImJhZCBKU09OOiBu byBzdGF0dXMgbWVtYmVyIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAg ICAgICAgICAgJ3sgInN0YXR1cyI6IG51bGwgfScsCisgICAgICAgICAgICAnZmllbGQgInN0YXR1 cyIgbXVzdCBiZSBhIHN0cmluZycsCisgICAgICAgICAgICBpZD0iYmFkIEpTT046IG51bGwgc3Rh dHVzIG1lbWJlciIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAg ICAgICd7ICJzdGF0dXMiOiAwIH0nLAorICAgICAgICAgICAgJ2ZpZWxkICJzdGF0dXMiIG11c3Qg YmUgYSBzdHJpbmcnLAorICAgICAgICAgICAgaWQ9ImJhZCBKU09OOiBpbnQgc3RhdHVzIG1lbWJl ciIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgICd7ICJz dGF0dXMiOiBbICJiYWQiIF0gfScsCisgICAgICAgICAgICAnZmllbGQgInN0YXR1cyIgbXVzdCBi ZSBhIHN0cmluZycsCisgICAgICAgICAgICBpZD0iYmFkIEpTT046IGFycmF5IHN0YXR1cyBtZW1i ZXIiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICAneyAi c3RhdHVzIjogeyAiYmFkIjogImJhZCIgfSB9JywKKyAgICAgICAgICAgICdmaWVsZCAic3RhdHVz IiBtdXN0IGJlIGEgc3RyaW5nJywKKyAgICAgICAgICAgIGlkPSJiYWQgSlNPTjogb2JqZWN0IHN0 YXR1cyBtZW1iZXIiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAg ICAgICAneyAibmVzdGVkIjogeyAic3RhdHVzIjogImJhZCIgfSB9JywKKyAgICAgICAgICAgICJz ZXJ2ZXIgc2VudCBlcnJvciByZXNwb25zZSB3aXRob3V0IGEgc3RhdHVzIiwKKyAgICAgICAgICAg IGlkPSJiYWQgSlNPTjogbmVzdGVkIHN0YXR1cyIsCisgICAgICAgICksCisgICAgICAgIHB5dGVz dC5wYXJhbSgKKyAgICAgICAgICAgICd7ICJzdGF0dXMiOiAiaW52YWxpZF90b2tlbiIgJywKKyAg ICAgICAgICAgICJUaGUgaW5wdXQgc3RyaW5nIGVuZGVkIHVuZXhwZWN0ZWRseSIsCisgICAgICAg ICAgICBpZD0iYmFkIEpTT046IHVudGVybWluYXRlZCBvYmplY3QiLAorICAgICAgICApLAorICAg ICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICAneyAic3RhdHVzIjogImludmFsaWRfdG9r ZW4iIH0geyB9JywKKyAgICAgICAgICAgICdFeHBlY3RlZCBlbmQgb2YgaW5wdXQsIGJ1dCBmb3Vu ZCAieyInLAorICAgICAgICAgICAgaWQ9ImJhZCBKU09OOiB0cmFpbGluZyBkYXRhIiwKKyAgICAg ICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgJ3sgInN0YXR1cyI6ICJp bnZhbGlkX3Rva2VuIiwgIm9wZW5pZC1jb25maWd1cmF0aW9uIjogMSB9JywKKyAgICAgICAgICAg ICdmaWVsZCAib3BlbmlkLWNvbmZpZ3VyYXRpb24iIG11c3QgYmUgYSBzdHJpbmcnLAorICAgICAg ICAgICAgaWQ9ImJhZCBKU09OOiBpbnQgb3BlbmlkLWNvbmZpZ3VyYXRpb24gbWVtYmVyIiwKKyAg ICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgJ3sgInN0YXR1cyI6 ICJpbnZhbGlkX3Rva2VuIiwgIm9wZW5pZC1jb25maWd1cmF0aW9uIjogMSB9JywKKyAgICAgICAg ICAgICdmaWVsZCAib3BlbmlkLWNvbmZpZ3VyYXRpb24iIG11c3QgYmUgYSBzdHJpbmcnLAorICAg ICAgICAgICAgaWQ9ImJhZCBKU09OOiBpbnQgb3BlbmlkLWNvbmZpZ3VyYXRpb24gbWVtYmVyIiwK KyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgJ3sgInN0YXR1 cyI6ICJpbnZhbGlkX3Rva2VuIiwgInNjb3BlIjogMSB9JywKKyAgICAgICAgICAgICdmaWVsZCAi c2NvcGUiIG11c3QgYmUgYSBzdHJpbmcnLAorICAgICAgICAgICAgaWQ9ImJhZCBKU09OOiBpbnQg c2NvcGUgbWVtYmVyIiwKKyAgICAgICAgKSwKKyAgICBdLAorKQorZGVmIHRlc3Rfb2F1dGhfZGlz Y292ZXJ5X3NlcnZlcl9lcnJvcihhY2NlcHQsIHJlc3BvbnNlLCBleHBlY3RlZF9lcnJvcik6Cisg ICAgc29jaywgY2xpZW50ID0gYWNjZXB0KG9hdXRoX2NsaWVudF9pZD1zZWNyZXRzLnRva2VuX2hl eCgpKQorCisgICAgd2l0aCBzb2NrOgorICAgICAgICB3aXRoIHBxMy53cmFwKHNvY2ssIGRlYnVn X3N0cmVhbT1zeXMuc3Rkb3V0KSBhcyBjb25uOgorICAgICAgICAgICAgaW5pdGlhbCA9IHN0YXJ0 X29hdXRoX2hhbmRzaGFrZShjb25uKQorCisgICAgICAgICAgICAjIEZhaWwgdGhlIFNBU0wgZXhj aGFuZ2Ugd2l0aCBhbiBpbnZhbGlkIEpTT04gcmVzcG9uc2UuCisgICAgICAgICAgICBwcTMuc2Vu ZCgKKyAgICAgICAgICAgICAgICBjb25uLAorICAgICAgICAgICAgICAgIHBxMy50eXBlcy5BdXRo blJlcXVlc3QsCisgICAgICAgICAgICAgICAgdHlwZT1wcTMuYXV0aG4uU0FTTENvbnRpbnVlLAor ICAgICAgICAgICAgICAgIGJvZHk9cmVzcG9uc2UuZW5jb2RlKCJ1dGYtOCIpLAorICAgICAgICAg ICAgKQorCisgICAgICAgICAgICAjIFRoZSBjbGllbnQgc2hvdWxkIGRpc2Nvbm5lY3QsIHNvIHRo ZSBzb2NrZXQgaXMgY2xvc2VkIGhlcmUuIChJZgorICAgICAgICAgICAgIyB0aGUgY2xpZW50IGRv ZXNuJ3QgZGlzY29ubmVjdCwgaXQgd2lsbCByZXBvcnQgYSBkaWZmZXJlbnQgZXJyb3IKKyAgICAg ICAgICAgICMgYmVsb3cgYW5kIHRoZSB0ZXN0IHdpbGwgZmFpbC4pCisKKyAgICB3aXRoIHB5dGVz dC5yYWlzZXMocHN5Y29wZzIuT3BlcmF0aW9uYWxFcnJvciwgbWF0Y2g9ZXhwZWN0ZWRfZXJyb3Ip OgorICAgICAgICBjbGllbnQuY2hlY2tfY29tcGxldGVkKCkKKworCitAcHl0ZXN0Lm1hcmsucGFy YW1ldHJpemUoCisgICAgInNhc2xfZXJyLHJlc3BfdHlwZSxyZXNwX3BheWxvYWQsZXhwZWN0ZWRf ZXJyb3IiLAorICAgIFsKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgeyJzdGF0 dXMiOiAiaW52YWxpZF9yZXF1ZXN0In0sCisgICAgICAgICAgICBwcTMudHlwZXMuRXJyb3JSZXNw b25zZSwKKyAgICAgICAgICAgIGRpY3QoCisgICAgICAgICAgICAgICAgZmllbGRzPVtiIlNGQVRB TCIsIGIiQzI4MDAwIiwgYiJNZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZSIsIGIiIl0sCisgICAgICAg ICAgICApLAorICAgICAgICAgICAgImV4cGVjdGVkIGVycm9yIG1lc3NhZ2UiLAorICAgICAgICAg ICAgaWQ9InN0YW5kYXJkIHNlcnZlciBlcnJvcjogaW52YWxpZF9yZXF1ZXN0IiwKKyAgICAgICAg KSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgeyJzdGF0dXMiOiAiaW52YWxp ZF90b2tlbiJ9LAorICAgICAgICAgICAgcHEzLnR5cGVzLkVycm9yUmVzcG9uc2UsCisgICAgICAg ICAgICBkaWN0KAorICAgICAgICAgICAgICAgIGZpZWxkcz1bYiJTRkFUQUwiLCBiIkMyODAwMCIs IGIiTWV4cGVjdGVkIGVycm9yIG1lc3NhZ2UiLCBiIiJdLAorICAgICAgICAgICAgKSwKKyAgICAg ICAgICAgICJleHBlY3RlZCBlcnJvciBtZXNzYWdlIiwKKyAgICAgICAgICAgIGlkPSJzdGFuZGFy ZCBzZXJ2ZXIgZXJyb3I6IGludmFsaWRfdG9rZW4gd2l0aG91dCBkaXNjb3ZlcnkgVVJJIiwKKyAg ICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgeyJzdGF0dXMiOiAi aW52YWxpZF9yZXF1ZXN0In0sCisgICAgICAgICAgICBwcTMudHlwZXMuQXV0aG5SZXF1ZXN0LAor ICAgICAgICAgICAgZGljdCh0eXBlPXBxMy5hdXRobi5TQVNMQ29udGludWUsIGJvZHk9YiIiKSwK KyAgICAgICAgICAgICJzZXJ2ZXIgc2VudCBhZGRpdGlvbmFsIE9BdXRoIGRhdGEiLAorICAgICAg ICAgICAgaWQ9ImJyb2tlbiBzZXJ2ZXI6IGFkZGl0aW9uYWwgY2hhbGxlbmdlIGFmdGVyIGVycm9y IiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgeyJzdGF0 dXMiOiAiaW52YWxpZF9yZXF1ZXN0In0sCisgICAgICAgICAgICBwcTMudHlwZXMuQXV0aG5SZXF1 ZXN0LAorICAgICAgICAgICAgZGljdCh0eXBlPXBxMy5hdXRobi5TQVNMRmluYWwpLAorICAgICAg ICAgICAgInNlcnZlciBzZW50IGFkZGl0aW9uYWwgT0F1dGggZGF0YSIsCisgICAgICAgICAgICBp ZD0iYnJva2VuIHNlcnZlcjogU0FTTCBzdWNjZXNzIGFmdGVyIGVycm9yIiwKKyAgICAgICAgKSwK KyAgICBdLAorKQorZGVmIHRlc3Rfb2F1dGhfc2VydmVyX2Vycm9yKGFjY2VwdCwgc2FzbF9lcnIs IHJlc3BfdHlwZSwgcmVzcF9wYXlsb2FkLCBleHBlY3RlZF9lcnJvcik6CisgICAgc29jaywgY2xp ZW50ID0gYWNjZXB0KCkKKworICAgIHdpdGggc29jazoKKyAgICAgICAgd2l0aCBwcTMud3JhcChz b2NrLCBkZWJ1Z19zdHJlYW09c3lzLnN0ZG91dCkgYXMgY29ubjoKKyAgICAgICAgICAgIHN0YXJ0 X29hdXRoX2hhbmRzaGFrZShjb25uKQorCisgICAgICAgICAgICAjIElnbm9yZSB0aGUgY2xpZW50 IGRhdGEuIFJldHVybiBhbiBlcnJvciAiY2hhbGxlbmdlIi4KKyAgICAgICAgICAgIHJlc3AgPSBq c29uLmR1bXBzKHNhc2xfZXJyKQorICAgICAgICAgICAgcmVzcCA9IHJlc3AuZW5jb2RlKCJ1dGYt OCIpCisKKyAgICAgICAgICAgIHBxMy5zZW5kKAorICAgICAgICAgICAgICAgIGNvbm4sIHBxMy50 eXBlcy5BdXRoblJlcXVlc3QsIHR5cGU9cHEzLmF1dGhuLlNBU0xDb250aW51ZSwgYm9keT1yZXNw CisgICAgICAgICAgICApCisKKyAgICAgICAgICAgICMgUGVyIFJGQywgdGhlIGNsaWVudCBpcyBy ZXF1aXJlZCB0byBzZW5kIGEgZHVtbXkgXkEgcmVzcG9uc2UuCisgICAgICAgICAgICBwa3QgPSBw cTMucmVjdjEoY29ubikKKyAgICAgICAgICAgIGFzc2VydCBwa3QudHlwZSA9PSBwcTMudHlwZXMu UGFzc3dvcmRNZXNzYWdlCisgICAgICAgICAgICBhc3NlcnQgcGt0LnBheWxvYWQgPT0gYiJceDAx IgorCisgICAgICAgICAgICAjIE5vdyBmYWlsIHRoZSBTQVNMIGV4Y2hhbmdlIChpbiBlaXRoZXIg YSB2YWxpZCB3YXksIG9yIGFuIGludmFsaWQKKyAgICAgICAgICAgICMgb25lLCBkZXBlbmRpbmcg b24gdGhlIHRlc3QpLgorICAgICAgICAgICAgcHEzLnNlbmQoY29ubiwgcmVzcF90eXBlLCAqKnJl c3BfcGF5bG9hZCkKKworICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhwc3ljb3BnMi5PcGVyYXRpb25h bEVycm9yLCBtYXRjaD1leHBlY3RlZF9lcnJvcik6CisgICAgICAgIGNsaWVudC5jaGVja19jb21w bGV0ZWQoKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcHl0aG9uL3BxMy5weSBiL3NyYy90ZXN0L3B5 dGhvbi9wcTMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uM2EyMmRh ZDBiNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3B5dGhvbi9wcTMucHkKQEAgLTAsMCAr MSw3MjcgQEAKKyMKKyMgQ29weXJpZ2h0IDIwMjEgVk13YXJlLCBJbmMuCisjIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBQb3N0Z3JlU1FMCisjCisKK2ltcG9ydCBjb250ZXh0bGliCitpbXBvcnQg Z2V0cGFzcworaW1wb3J0IGlvCitpbXBvcnQgb3MKK2ltcG9ydCBzc2wKK2ltcG9ydCBzeXMKK2lt cG9ydCB0ZXh0d3JhcAorCitmcm9tIGNvbnN0cnVjdCBpbXBvcnQgKgorCitpbXBvcnQgdGxzCisK KworZGVmIHByb3RvY29sKG1ham9yLCBtaW5vcik6CisgICAgIiIiCisgICAgUmV0dXJucyB0aGUg cHJvdG9jb2wgdmVyc2lvbiwgaW4gaW50ZWdlciBmb3JtYXQsIGNvcnJlc3BvbmRpbmcgdG8gdGhl IGdpdmVuCisgICAgbWFqb3IgYW5kIG1pbm9yIHZlcnNpb24gbnVtYmVycy4KKyAgICAiIiIKKyAg ICByZXR1cm4gKG1ham9yIDw8IDE2KSB8IG1pbm9yCisKKworIyBTdGFydHVwCisKK1N0cmluZ0xp c3QgPSBHcmVlZHlSYW5nZShOdWxsVGVybWluYXRlZChHcmVlZHlCeXRlcykpCisKKworY2xhc3Mg S2V5VmFsdWVBZGFwdGVyKEFkYXB0ZXIpOgorICAgICIiIgorICAgIFR1cm5zIGEga2V5LXZhbHVl IHN0b3JlIGludG8gYSBudWxsLXRlcm1pbmF0ZWQgbGlzdCBvZiBudWxsLXRlcm1pbmF0ZWQKKyAg ICBzdHJpbmdzLCBhcyBwcmVzZW50ZWQgb24gdGhlIHdpcmUgaW4gdGhlIHN0YXJ0dXAgcGFja2V0 LgorICAgICIiIgorCisgICAgZGVmIF9lbmNvZGUoc2VsZiwgb2JqLCBjb250ZXh0LCBwYXRoKToK KyAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIGxpc3QpOgorICAgICAgICAgICAgcmV0dXJuIG9i agorCisgICAgICAgIGwgPSBbXQorCisgICAgICAgIGZvciBrLCB2IGluIG9iai5pdGVtcygpOgor ICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShrLCBzdHIpOgorICAgICAgICAgICAgICAgIGsgPSBr LmVuY29kZSgidXRmLTgiKQorICAgICAgICAgICAgbC5hcHBlbmQoaykKKworICAgICAgICAgICAg aWYgaXNpbnN0YW5jZSh2LCBzdHIpOgorICAgICAgICAgICAgICAgIHYgPSB2LmVuY29kZSgidXRm LTgiKQorICAgICAgICAgICAgbC5hcHBlbmQodikKKworICAgICAgICBsLmFwcGVuZChiIiIpCisg ICAgICAgIHJldHVybiBsCisKKyAgICBkZWYgX2RlY29kZShzZWxmLCBvYmosIGNvbnRleHQsIHBh dGgpOgorICAgICAgICAjIFRPRE86IHR1cm4gYSBsaXN0IGJhY2sgaW50byBhIGRpY3QKKyAgICAg ICAgcmV0dXJuIG9iagorCisKK0tleVZhbHVlcyA9IEtleVZhbHVlQWRhcHRlcihTdHJpbmdMaXN0 KQorCitfc3RhcnR1cF9wYXlsb2FkID0gU3dpdGNoKAorICAgIHRoaXMucHJvdG8sCisgICAgewor ICAgICAgICBwcm90b2NvbCgzLCAwKTogS2V5VmFsdWVzLAorICAgIH0sCisgICAgZGVmYXVsdD1H cmVlZHlCeXRlcywKKykKKworCitkZWYgX2RlZmF1bHRfcHJvdG9jb2wodGhpcyk6CisgICAgdHJ5 OgorICAgICAgICBpZiBpc2luc3RhbmNlKHRoaXMucGF5bG9hZCwgKGxpc3QsIGRpY3QpKToKKyAg ICAgICAgICAgIHJldHVybiBwcm90b2NvbCgzLCAwKQorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJv cjoKKyAgICAgICAgcGFzcyAgIyBubyBwYXlsb2FkIHBhc3NlZCBkdXJpbmcgYnVpbGQKKworICAg IHJldHVybiAwCisKKworZGVmIF9zdGFydHVwX3BheWxvYWRfbGVuKHRoaXMpOgorICAgICIiIgor ICAgIFRoZSBwYXlsb2FkIGZpZWxkIGhhcyBhIGZpeGVkIHNpemUgYmFzZWQgb24gdGhlIGxlbmd0 aCBvZiB0aGUgcGFja2V0LiBCdXQKKyAgICBpZiB0aGUgY2FsbGVyIGhhc24ndCBzdXBwbGllZCBh biBleHBsaWNpdCBsZW5ndGggYXQgYnVpbGQgdGltZSwgd2UgaGF2ZSB0bworICAgIGJ1aWxkIHRo ZSBwYXlsb2FkIHRvIGZpZ3VyZSBvdXQgaG93IGxvbmcgaXQgaXMsIHdoaWNoIHJlcXVpcmVzIHVz IHRvIGtub3cKKyAgICB0aGUgbGVuZ3RoIGZpcnN0Li4uIFRoaXMgZnVuY3Rpb24gZXhpc3RzIHNv bGVseSB0byBicmVhayB0aGUgY3ljbGUuCisgICAgIiIiCisgICAgYXNzZXJ0IHRoaXMuX2J1aWxk aW5nLCAiX3N0YXJ0dXBfcGF5bG9hZF9sZW4oKSBjYW5ub3QgYmUgY2FsbGVkIGR1cmluZyBwYXJz aW5nIgorCisgICAgdHJ5OgorICAgICAgICBwYXlsb2FkID0gdGhpcy5wYXlsb2FkCisgICAgZXhj ZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICByZXR1cm4gMCAgIyBubyBwYXlsb2FkCisKKyAg ICBpZiBpc2luc3RhbmNlKHBheWxvYWQsIGJ5dGVzKToKKyAgICAgICAgIyBhbHJlYWR5IHNlcmlh bGl6ZWQ7IGp1c3QgdXNlIHRoZSBnaXZlbiBsZW5ndGgKKyAgICAgICAgcmV0dXJuIGxlbihwYXls b2FkKQorCisgICAgdHJ5OgorICAgICAgICBwcm90byA9IHRoaXMucHJvdG8KKyAgICBleGNlcHQg QXR0cmlidXRlRXJyb3I6CisgICAgICAgIHByb3RvID0gX2RlZmF1bHRfcHJvdG9jb2wodGhpcykK KworICAgIGRhdGEgPSBfc3RhcnR1cF9wYXlsb2FkLmJ1aWxkKHBheWxvYWQsIHByb3RvPXByb3Rv KQorICAgIHJldHVybiBsZW4oZGF0YSkKKworCitTdGFydHVwID0gU3RydWN0KAorICAgICJsZW4i IC8gRGVmYXVsdChJbnQzMnNiLCBsYW1iZGEgdGhpczogX3N0YXJ0dXBfcGF5bG9hZF9sZW4odGhp cykgKyA4KSwKKyAgICAicHJvdG8iIC8gRGVmYXVsdChIZXgoSW50MzJzYiksIF9kZWZhdWx0X3By b3RvY29sKSwKKyAgICAicGF5bG9hZCIgLyBGaXhlZFNpemVkKHRoaXMubGVuIC0gOCwgRGVmYXVs dChfc3RhcnR1cF9wYXlsb2FkLCBiIiIpKSwKKykKKworIyBQcTMKKworIyBBZGFwdGVkIGZyb20g Y29uc3RydWN0LmNvcmUuRW51bUludGVnZXJTdHJpbmcKK2NsYXNzIEVudW1OYW1lZEJ5dGU6Cisg ICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbCwgbmFtZSk6CisgICAgICAgIHNlbGYuX3ZhbCA9IHZh bAorICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQorCisgICAgZGVmIF9faW50X18oc2VsZik6Cisg ICAgICAgIHJldHVybiBvcmQoc2VsZi5fdmFsKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6Cisg ICAgICAgIHJldHVybiAiKGVudW0pICVzICVyIiAlIChzZWxmLl9uYW1lLCBzZWxmLl92YWwpCisK KyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiRW51bU5hbWVkQnl0ZSgl cikiICUgc2VsZi5fdmFsCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAg aWYgaXNpbnN0YW5jZShvdGhlciwgRW51bU5hbWVkQnl0ZSk6CisgICAgICAgICAgICBvdGhlciA9 IG90aGVyLl92YWwKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIGJ5dGVzKToKKyAg ICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgICAgIHJldHVybiBzZWxmLl92 YWwgPT0gb3RoZXIKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhh c2goc2VsZi5fdmFsKQorCisKKyMgQWRhcHRlZCBmcm9tIGNvbnN0cnVjdC5jb3JlLkVudW0KK2Ns YXNzIEJ5dGVFbnVtKEFkYXB0ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKm1hcHBpbmcp OgorICAgICAgICBzdXBlcihCeXRlRW51bSwgc2VsZikuX19pbml0X18oQnl0ZSkKKyAgICAgICAg c2VsZi5uYW1lbWFwcGluZyA9IHtrOiBFbnVtTmFtZWRCeXRlKHYsIGspIGZvciBrLCB2IGluIG1h cHBpbmcuaXRlbXMoKX0KKyAgICAgICAgc2VsZi5kZWNtYXBwaW5nID0ge3Y6IEVudW1OYW1lZEJ5 dGUodiwgaykgZm9yIGssIHYgaW4gbWFwcGluZy5pdGVtcygpfQorCisgICAgZGVmIF9fZ2V0YXR0 cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICBpZiBuYW1lIGluIHNlbGYubmFtZW1hcHBpbmc6Cisg ICAgICAgICAgICByZXR1cm4gc2VsZi5kZWNtYXBwaW5nW3NlbGYubmFtZW1hcHBpbmdbbmFtZV1d CisgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yCisKKyAgICBkZWYgX2RlY29kZShzZWxmLCBv YmosIGNvbnRleHQsIHBhdGgpOgorICAgICAgICBiID0gYnl0ZXMoW29ial0pCisgICAgICAgIHRy eToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmRlY21hcHBpbmdbYl0KKyAgICAgICAgZXhjZXB0 IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEVudW1OYW1lZEJ5dGUoYiwgIih1bmtub3du KSIpCisKKyAgICBkZWYgX2VuY29kZShzZWxmLCBvYmosIGNvbnRleHQsIHBhdGgpOgorICAgICAg ICBpZiBpc2luc3RhbmNlKG9iaiwgaW50KToKKyAgICAgICAgICAgIHJldHVybiBvYmoKKyAgICAg ICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgYnl0ZXMpOgorICAgICAgICAgICAgcmV0dXJuIG9yZChv YmopCisgICAgICAgIHJldHVybiBpbnQob2JqKQorCisKK3R5cGVzID0gQnl0ZUVudW0oCisgICAg RXJyb3JSZXNwb25zZT1iIkUiLAorICAgIFJlYWR5Rm9yUXVlcnk9YiJaIiwKKyAgICBRdWVyeT1i IlEiLAorICAgIEVtcHR5UXVlcnlSZXNwb25zZT1iIkkiLAorICAgIEF1dGhuUmVxdWVzdD1iIlIi LAorICAgIFBhc3N3b3JkTWVzc2FnZT1iInAiLAorICAgIEJhY2tlbmRLZXlEYXRhPWIiSyIsCisg ICAgQ29tbWFuZENvbXBsZXRlPWIiQyIsCisgICAgUGFyYW1ldGVyU3RhdHVzPWIiUyIsCisgICAg RGF0YVJvdz1iIkQiLAorICAgIFRlcm1pbmF0ZT1iIlgiLAorKQorCisKK2F1dGhuID0gRW51bSgK KyAgICBJbnQzMnViLAorICAgIE9LPTAsCisgICAgU0FTTD0xMCwKKyAgICBTQVNMQ29udGludWU9 MTEsCisgICAgU0FTTEZpbmFsPTEyLAorKQorCisKK19hdXRobl9ib2R5ID0gU3dpdGNoKAorICAg IHRoaXMudHlwZSwKKyAgICB7CisgICAgICAgIGF1dGhuLk9LOiBUZXJtaW5hdGVkLAorICAgICAg ICBhdXRobi5TQVNMOiBTdHJpbmdMaXN0LAorICAgIH0sCisgICAgZGVmYXVsdD1HcmVlZHlCeXRl cywKKykKKworCitkZWYgX2RhdGFfbGVuKHRoaXMpOgorICAgIGFzc2VydCB0aGlzLl9idWlsZGlu ZywgIl9kYXRhX2xlbigpIGNhbm5vdCBiZSBjYWxsZWQgZHVyaW5nIHBhcnNpbmciCisKKyAgICBp ZiBub3QgaGFzYXR0cih0aGlzLCAiZGF0YSIpIG9yIHRoaXMuZGF0YSBpcyBOb25lOgorICAgICAg ICByZXR1cm4gLTEKKworICAgIHJldHVybiBsZW4odGhpcy5kYXRhKQorCisKKyMgVGhlIHByb3Rv Y29sIHJldXNlcyB0aGUgUGFzc3dvcmRNZXNzYWdlIGZvciBzZXZlcmFsIGF1dGhlbnRpY2F0aW9u IHJlc3BvbnNlCisjIHR5cGVzLCBhbmQgdGhlcmUncyBubyBnb29kIHdheSB0byBmaWd1cmUgb3V0 IHdoaWNoIGlzIHdoaWNoIHdpdGhvdXQga2VlcGluZworIyBzdGF0ZSBmb3IgdGhlIGVudGlyZSBz dHJlYW0uIFNvIHRoaXMgaXMgYSBzZXBhcmF0ZSBDb25zdHJ1Y3QgdGhhdCBjYW4gYmUKKyMgZXhw bGljaXRseSBwYXJzZWQvYnVpbHQgYnkgY29kZSB0aGF0IGtub3dzIGl0J3MgbmVlZGVkLgorU0FT TEluaXRpYWxSZXNwb25zZSA9IFN0cnVjdCgKKyAgICAibmFtZSIgLyBOdWxsVGVybWluYXRlZChH cmVlZHlCeXRlcyksCisgICAgImxlbiIgLyBEZWZhdWx0KEludDMyc2IsIGxhbWJkYSB0aGlzOiBf ZGF0YV9sZW4odGhpcykpLAorICAgICJkYXRhIgorICAgIC8gSWZUaGVuRWxzZSgKKyAgICAgICAg IyBBbGxvdyB0ZXN0cyB0byBleHBsaWNpdGx5IHBhc3MgYW4gaW5jb3JyZWN0IGxlbmd0aCBkdXJp bmcgdGVzdGluZywgYnkKKyAgICAgICAgIyBub3QgZW5mb3JjaW5nIGEgRml4ZWRTaXplZCBkdXJp bmcgYnVpbGQuIChUaGUgbGVuIGNhbGN1bGF0aW9uIGFib3ZlCisgICAgICAgICMgZGVmYXVsdHMg dG8gdGhlIGNvcnJlY3Qgc2l6ZS4pCisgICAgICAgIHRoaXMuX2J1aWxkaW5nLAorICAgICAgICBP cHRpb25hbChHcmVlZHlCeXRlcyksCisgICAgICAgIElmKHRoaXMubGVuICE9IC0xLCBEZWZhdWx0 KEZpeGVkU2l6ZWQodGhpcy5sZW4sIEdyZWVkeUJ5dGVzKSwgYiIiKSksCisgICAgKSwKKyAgICBU ZXJtaW5hdGVkLCAgIyBtYWtlIHN1cmUgdGhlIGVudGlyZSByZXNwb25zZSBpcyBjb25zdW1lZAor KQorCisKK19jb2x1bW4gPSBGb2N1c2VkU2VxKAorICAgICJkYXRhIiwKKyAgICAibGVuIiAvIERl ZmF1bHQoSW50MzJzYiwgbGFtYmRhIHRoaXM6IF9kYXRhX2xlbih0aGlzKSksCisgICAgImRhdGEi IC8gSWYodGhpcy5sZW4gIT0gLTEsIEZpeGVkU2l6ZWQodGhpcy5sZW4sIEdyZWVkeUJ5dGVzKSks CispCisKKworX3BheWxvYWRfbWFwID0geworICAgIHR5cGVzLkVycm9yUmVzcG9uc2U6IFN0cnVj dCgiZmllbGRzIiAvIFN0cmluZ0xpc3QpLAorICAgIHR5cGVzLlJlYWR5Rm9yUXVlcnk6IFN0cnVj dCgic3RhdHVzIiAvIEJ5dGVzKDEpKSwKKyAgICB0eXBlcy5RdWVyeTogU3RydWN0KCJxdWVyeSIg LyBOdWxsVGVybWluYXRlZChHcmVlZHlCeXRlcykpLAorICAgIHR5cGVzLkVtcHR5UXVlcnlSZXNw b25zZTogVGVybWluYXRlZCwKKyAgICB0eXBlcy5BdXRoblJlcXVlc3Q6IFN0cnVjdCgidHlwZSIg LyBhdXRobiwgImJvZHkiIC8gRGVmYXVsdChfYXV0aG5fYm9keSwgYiIiKSksCisgICAgdHlwZXMu QmFja2VuZEtleURhdGE6IFN0cnVjdCgicGlkIiAvIEludDMydWIsICJrZXkiIC8gSGV4KEludDMy dWIpKSwKKyAgICB0eXBlcy5Db21tYW5kQ29tcGxldGU6IFN0cnVjdCgidGFnIiAvIE51bGxUZXJt aW5hdGVkKEdyZWVkeUJ5dGVzKSksCisgICAgdHlwZXMuUGFyYW1ldGVyU3RhdHVzOiBTdHJ1Y3Qo CisgICAgICAgICJuYW1lIiAvIE51bGxUZXJtaW5hdGVkKEdyZWVkeUJ5dGVzKSwgInZhbHVlIiAv IE51bGxUZXJtaW5hdGVkKEdyZWVkeUJ5dGVzKQorICAgICksCisgICAgdHlwZXMuRGF0YVJvdzog U3RydWN0KCJjb2x1bW5zIiAvIERlZmF1bHQoUHJlZml4ZWRBcnJheShJbnQxNnNiLCBfY29sdW1u KSwgYiIiKSksCisgICAgdHlwZXMuVGVybWluYXRlOiBUZXJtaW5hdGVkLAorfQorCisKK19wYXls b2FkID0gRm9jdXNlZFNlcSgKKyAgICAiX3BheWxvYWQiLAorICAgICJfcGF5bG9hZCIKKyAgICAv IFN3aXRjaCgKKyAgICAgICAgdGhpcy5fLnR5cGUsCisgICAgICAgIF9wYXlsb2FkX21hcCwKKyAg ICAgICAgZGVmYXVsdD1HcmVlZHlCeXRlcywKKyAgICApLAorICAgIFRlcm1pbmF0ZWQsICAjIG1h a2Ugc3VyZSBldmVyeSBwYXlsb2FkIGNvbnN1bWVzIHRoZSBlbnRpcmUgcGFja2V0CispCisKKwor ZGVmIF9wYXlsb2FkX2xlbih0aGlzKToKKyAgICAiIiIKKyAgICBTZWUgX3N0YXJ0dXBfcGF5bG9h ZF9sZW4oKSBmb3IgYW4gZXhwbGFuYXRpb24uCisgICAgIiIiCisgICAgYXNzZXJ0IHRoaXMuX2J1 aWxkaW5nLCAiX3BheWxvYWRfbGVuKCkgY2Fubm90IGJlIGNhbGxlZCBkdXJpbmcgcGFyc2luZyIK KworICAgIHRyeToKKyAgICAgICAgcGF5bG9hZCA9IHRoaXMucGF5bG9hZAorICAgIGV4Y2VwdCBB dHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcmV0dXJuIDAgICMgbm8gcGF5bG9hZAorCisgICAgaWYg aXNpbnN0YW5jZShwYXlsb2FkLCBieXRlcyk6CisgICAgICAgICMgYWxyZWFkeSBzZXJpYWxpemVk OyBqdXN0IHVzZSB0aGUgZ2l2ZW4gbGVuZ3RoCisgICAgICAgIHJldHVybiBsZW4ocGF5bG9hZCkK KworICAgIGRhdGEgPSBfcGF5bG9hZC5idWlsZChwYXlsb2FkLCB0eXBlPXRoaXMudHlwZSkKKyAg ICByZXR1cm4gbGVuKGRhdGEpCisKKworUHEzID0gU3RydWN0KAorICAgICJ0eXBlIiAvIHR5cGVz LAorICAgICJsZW4iIC8gRGVmYXVsdChJbnQzMnViLCBsYW1iZGEgdGhpczogX3BheWxvYWRfbGVu KHRoaXMpICsgNCksCisgICAgInBheWxvYWQiIC8gRml4ZWRTaXplZCh0aGlzLmxlbiAtIDQsIERl ZmF1bHQoX3BheWxvYWQsIGIiIikpLAorKQorCisKKyMgRW52aXJvbm1lbnQKKworCitkZWYgcGdo b3N0KCk6CisgICAgcmV0dXJuIG9zLmVudmlyb24uZ2V0KCJQR0hPU1QiLCBkZWZhdWx0PSJsb2Nh bGhvc3QiKQorCisKK2RlZiBwZ3BvcnQoKToKKyAgICByZXR1cm4gaW50KG9zLmVudmlyb24uZ2V0 KCJQR1BPUlQiLCBkZWZhdWx0PTU0MzIpKQorCisKK2RlZiBwZ3VzZXIoKToKKyAgICB0cnk6Cisg ICAgICAgIHJldHVybiBvcy5lbnZpcm9uWyJQR1VTRVIiXQorICAgIGV4Y2VwdCBLZXlFcnJvcjoK KyAgICAgICAgcmV0dXJuIGdldHBhc3MuZ2V0dXNlcigpCisKKworZGVmIHBnZGF0YWJhc2UoKToK KyAgICByZXR1cm4gb3MuZW52aXJvbi5nZXQoIlBHREFUQUJBU0UiLCBkZWZhdWx0PSJwb3N0Z3Jl cyIpCisKKworIyBDb25uZWN0aW9ucworCisKK2RlZiBfaGV4ZHVtcF90cmFuc2xhdGlvbl9tYXAo KToKKyAgICAiIiIKKyAgICBGb3IgaGV4ZHVtcHMuIFRyYW5zbGF0ZXMgYW55IHVucHJpbnRhYmxl IG9yIG5vbi1BU0NJSSBieXRlcyBpbnRvICcuJy4KKyAgICAiIiIKKyAgICBpbnB1dCA9IGJ5dGVh cnJheSgpCisKKyAgICBmb3IgaSBpbiByYW5nZSgxMjgpOgorICAgICAgICBjID0gY2hyKGkpCisK KyAgICAgICAgaWYgbm90IGMuaXNwcmludGFibGUoKToKKyAgICAgICAgICAgIGlucHV0ICs9IGJ5 dGVzKFtpXSkKKworICAgIGlucHV0ICs9IGJ5dGVzKHJhbmdlKDEyOCwgMjU2KSkKKworICAgIHJl dHVybiBieXRlcy5tYWtldHJhbnMoaW5wdXQsIGIiLiIgKiBsZW4oaW5wdXQpKQorCisKK2NsYXNz IF9EZWJ1Z1N0cmVhbShvYmplY3QpOgorICAgICIiIgorICAgIFdyYXBzIGEgZmlsZS1saWtlIG9i amVjdCBhbmQgYWRkcyBoZXhkdW1wcyBvZiB0aGUgcmVhZCBhbmQgd3JpdGUgZGF0YS4gQ2FsbAor ICAgIGVuZF9wYWNrZXQoKSBvbiBhIF9EZWJ1Z1N0cmVhbSB0byB3cml0ZSB0aGUgYWNjdW11bGF0 ZWQgaGV4ZHVtcHMgdG8gdGhlCisgICAgb3V0cHV0IHN0cmVhbSwgYWxvbmcgd2l0aCB0aGUgcGFj a2V0IHRoYXQgd2FzIHNlbnQuCisgICAgIiIiCisKKyAgICBfdHJhbnNsYXRpb25fbWFwID0gX2hl eGR1bXBfdHJhbnNsYXRpb25fbWFwKCkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJlYW0s IG91dD1zeXMuc3Rkb3V0KToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZXMgYSBuZXcgX0Rl YnVnU3RyZWFtIHdyYXBwaW5nIHRoZSBnaXZlbiBzdHJlYW0gKHdoaWNoIG11c3QgaGF2ZQorICAg ICAgICBiZWVuIGNyZWF0ZWQgYnkgd3JhcCgpKS4gQWxsIGF0dHJpYnV0ZXMgbm90IHByb3ZpZGVk IGJ5IHRoZSBfRGVidWdTdHJlYW0KKyAgICAgICAgYXJlIGRlbGVnYXRlZCB0byB0aGUgd3JhcHBl ZCBzdHJlYW0uIG91dCBpcyB0aGUgdGV4dCBzdHJlYW0gdG8gd2hpY2gKKyAgICAgICAgaGV4ZHVt cHMgYXJlIHdyaXR0ZW4uCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnJhdyA9IHN0cmVhbQor ICAgICAgICBzZWxmLl9vdXQgPSBvdXQKKyAgICAgICAgc2VsZi5fcmJ1ZiA9IGlvLkJ5dGVzSU8o KQorICAgICAgICBzZWxmLl93YnVmID0gaW8uQnl0ZXNJTygpCisKKyAgICBkZWYgX19nZXRhdHRy X18oc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYucmF3LCBuYW1lKQor CisgICAgZGVmIF9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKToKKyAgICAgICAgaWYgbmFt ZSBpbiAoInJhdyIsICJfb3V0IiwgIl9yYnVmIiwgIl93YnVmIik6CisgICAgICAgICAgICByZXR1 cm4gb2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKQorCisgICAgICAgIHNldGF0 dHIoc2VsZi5yYXcsIG5hbWUsIHZhbHVlKQorCisgICAgZGVmIHJlYWQoc2VsZiwgKmFyZ3MsICoq a3dhcmdzKToKKyAgICAgICAgYnVmID0gc2VsZi5yYXcucmVhZCgqYXJncywgKiprd2FyZ3MpCisK KyAgICAgICAgc2VsZi5fcmJ1Zi53cml0ZShidWYpCisgICAgICAgIHJldHVybiBidWYKKworICAg IGRlZiB3cml0ZShzZWxmLCBiKToKKyAgICAgICAgc2VsZi5fd2J1Zi53cml0ZShiKQorICAgICAg ICByZXR1cm4gc2VsZi5yYXcud3JpdGUoYikKKworICAgIGRlZiByZWN2KHNlbGYsICphcmdzKToK KyAgICAgICAgYnVmID0gc2VsZi5yYXcucmVjdigqYXJncykKKworICAgICAgICBzZWxmLl9yYnVm LndyaXRlKGJ1ZikKKyAgICAgICAgcmV0dXJuIGJ1ZgorCisgICAgZGVmIF9mbHVzaChzZWxmLCBi dWYsIHByZWZpeCk6CisgICAgICAgIHdpZHRoID0gMTYKKyAgICAgICAgaGV4d2lkdGggPSB3aWR0 aCAqIDMgLSAxCisKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIGJ1Zi5zZWVrKDApCisKKyAg ICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGxpbmUgPSBidWYucmVhZCgxNikKKworICAg ICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgaWYgY291bnQ6CisgICAgICAg ICAgICAgICAgICAgIHNlbGYuX291dC53cml0ZSgiXG4iKSAgIyBzZXBhcmF0ZSB0aGUgb3V0cHV0 IGJsb2NrIHdpdGggYSBuZXdsaW5lCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAg ICAgIHNlbGYuX291dC53cml0ZSgiJXMgJTA0WDpcdCIgJSAocHJlZml4LCBjb3VudCkpCisgICAg ICAgICAgICBzZWxmLl9vdXQud3JpdGUoIiUqc1x0IiAlICgtaGV4d2lkdGgsIGxpbmUuaGV4KCIg IikpKQorICAgICAgICAgICAgc2VsZi5fb3V0LndyaXRlKGxpbmUudHJhbnNsYXRlKHNlbGYuX3Ry YW5zbGF0aW9uX21hcCkuZGVjb2RlKCJhc2NpaSIpKQorICAgICAgICAgICAgc2VsZi5fb3V0Lndy aXRlKCJcbiIpCisKKyAgICAgICAgICAgIGNvdW50ICs9IDE2CisKKyAgICBkZWYgcHJpbnRfZGVi dWcoc2VsZiwgb2JqLCAqLCBwcmVmaXg9IiIpOgorICAgICAgICBjb250ZW50cyA9ICIiCisgICAg ICAgIGlmIG9iaiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGNvbnRlbnRzID0gc3RyKG9iaikK KworICAgICAgICBmb3IgbGluZSBpbiBjb250ZW50cy5zcGxpdGxpbmVzKCk6CisgICAgICAgICAg ICBzZWxmLl9vdXQud3JpdGUoIiVzJXNcbiIgJSAocHJlZml4LCBsaW5lKSkKKworICAgICAgICBz ZWxmLl9vdXQud3JpdGUoIlxuIikKKworICAgIGRlZiBmbHVzaF9kZWJ1ZyhzZWxmLCAqLCBwcmVm aXg9IiIpOgorICAgICAgICBzZWxmLl9mbHVzaChzZWxmLl9yYnVmLCBwcmVmaXggKyAiPCIpCisg ICAgICAgIHNlbGYuX3JidWYgPSBpby5CeXRlc0lPKCkKKworICAgICAgICBzZWxmLl9mbHVzaChz ZWxmLl93YnVmLCBwcmVmaXggKyAiPiIpCisgICAgICAgIHNlbGYuX3didWYgPSBpby5CeXRlc0lP KCkKKworICAgIGRlZiBlbmRfcGFja2V0KHNlbGYsIHBrdCwgKiwgcmVhZD1GYWxzZSwgcHJlZml4 PSIiLCBpbmRlbnQ9IiAgIik6CisgICAgICAgICIiIgorICAgICAgICBNYXJrcyB0aGUgZW5kIG9m IGEgbG9naWNhbCAicGFja2V0IiBvZiBkYXRhLiBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZgor ICAgICAgICBwa3Qgd2lsbCBiZSBwcmludGVkLCBhbmQgdGhlIGRlYnVnIGJ1ZmZlcnMgd2lsbCBi ZSBmbHVzaGVkIHdpdGggYW4KKyAgICAgICAgaW5kZW50LiBBbGwgbGluZXMgY2FuIGJlIG9wdGlv bmFsbHkgcHJlZml4ZWQuCisKKyAgICAgICAgSWYgcmVhZCBpcyBUcnVlLCB0aGUgcGFja2V0IHJl cHJlc2VudGF0aW9uIGlzIHdyaXR0ZW4gYWZ0ZXIgdGhlIGRlYnVnCisgICAgICAgIGJ1ZmZlcnM7 IG90aGVyd2lzZSB0aGUgZGVmYXVsdCBvZiBGYWxzZSAobWVhbmluZyB3cml0ZSkgY2F1c2VzIHRo ZQorICAgICAgICBwYWNrZXQgcmVwcmVzZW50YXRpb24gdG8gYmUgZHVtcGVkIGZpcnN0LiBUaGlz IGlzIG1lYW50IHRvIGNhcHR1cmUgdGhlCisgICAgICAgIGxvZ2ljYWwgZmxvdyBvZiBsYXllciB0 cmFuc2xhdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIHdyaXRlID0gbm90IHJlYWQKKworICAg ICAgICBpZiB3cml0ZToKKyAgICAgICAgICAgIHNlbGYucHJpbnRfZGVidWcocGt0LCBwcmVmaXg9 cHJlZml4ICsgIj4gIikKKworICAgICAgICBzZWxmLmZsdXNoX2RlYnVnKHByZWZpeD1wcmVmaXgg KyBpbmRlbnQpCisKKyAgICAgICAgaWYgcmVhZDoKKyAgICAgICAgICAgIHNlbGYucHJpbnRfZGVi dWcocGt0LCBwcmVmaXg9cHJlZml4ICsgIjwgIikKKworCitAY29udGV4dGxpYi5jb250ZXh0bWFu YWdlcgorZGVmIHdyYXAoc29ja2V0LCAqLCBkZWJ1Z19zdHJlYW09Tm9uZSk6CisgICAgIiIiCisg ICAgVHJhbnNmb3JtcyBhIHJhdyBzb2NrZXQgaW50byBhIGNvbm5lY3Rpb24gdGhhdCBjYW4gYmUg dXNlZCBmb3IgQ29uc3RydWN0CisgICAgYnVpbGRpbmcgYW5kIHBhcnNpbmcuIFRoZSByZXR1cm4g dmFsdWUgaXMgYSBjb250ZXh0IG1hbmFnZXIgYW5kIGNhbiBiZSB1c2VkCisgICAgaW4gYSB3aXRo IHN0YXRlbWVudC4KKyAgICAiIiIKKyAgICAjIEl0IGlzIGNyaXRpY2FsIHRoYXQgYnVmZmVyaW5n IGJlIGRpc2FibGVkIGhlcmUsIHNvIHRoYXQgd2UgY2FuIHN0aWxsCisgICAgIyBtYW5pcHVsYXRl IHRoZSByYXcgc29ja2V0IHdpdGhvdXQgZGVzeW5jaW5nIHRoZSBzdHJlYW0uCisgICAgd2l0aCBz b2NrZXQubWFrZWZpbGUoInJ3YiIsIGJ1ZmZlcmluZz0wKSBhcyBzZmlsZToKKyAgICAgICAgIyBF eHBvc2UgdGhlIG9yaWdpbmFsIHNvY2tldCdzIHJlY3YoKSBvbiB0aGUgU29ja2V0SU8gb2JqZWN0 IHdlIHJldHVybi4KKyAgICAgICAgZGVmIHJlY3Yoc2VsZiwgKmFyZ3MpOgorICAgICAgICAgICAg cmV0dXJuIHNvY2tldC5yZWN2KCphcmdzKQorCisgICAgICAgIHNmaWxlLnJlY3YgPSByZWN2Ll9f Z2V0X18oc2ZpbGUpCisKKyAgICAgICAgY29ubiA9IHNmaWxlCisgICAgICAgIGlmIGRlYnVnX3N0 cmVhbToKKyAgICAgICAgICAgIGNvbm4gPSBfRGVidWdTdHJlYW0oY29ubiwgZGVidWdfc3RyZWFt KQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkIGNvbm4KKyAgICAgICAgZmluYWxs eToKKyAgICAgICAgICAgIGlmIGRlYnVnX3N0cmVhbToKKyAgICAgICAgICAgICAgICBjb25uLmZs dXNoX2RlYnVnKHByZWZpeD0iPyAiKQorCisKK2RlZiBfc2VuZChzdHJlYW0sIGNscywgb2JqKToK KyAgICBkZWJ1Z2dpbmcgPSBoYXNhdHRyKHN0cmVhbSwgImZsdXNoX2RlYnVnIikKKyAgICBvdXQg PSBpby5CeXRlc0lPKCkKKworICAgICMgSWRlYWxseSB3ZSB3b3VsZCBidWlsZCBkaXJlY3RseSB0 byB0aGUgcGFzc2VkIHN0cmVhbSwgYnV0IGJlY2F1c2Ugd2UgbmVlZAorICAgICMgdG8gcmVwYXJz ZSB0aGUgZ2VuZXJhdGVkIG91dHB1dCBmb3IgdGhlIGRlYnVnZ2luZyBjYXNlLCBidWlsZCB0byBh bgorICAgICMgaW50ZXJtZWRpYXRlIEJ5dGVzSU8gYW5kIHNlbmQgaXQgaW5zdGVhZC4KKyAgICBj bHMuYnVpbGRfc3RyZWFtKG9iaiwgb3V0KQorICAgIGJ1ZiA9IG91dC5nZXR2YWx1ZSgpCisKKyAg ICBzdHJlYW0ud3JpdGUoYnVmKQorICAgIGlmIGRlYnVnZ2luZzoKKyAgICAgICAgcGt0ID0gY2xz LnBhcnNlKGJ1ZikKKyAgICAgICAgc3RyZWFtLmVuZF9wYWNrZXQocGt0KQorCisgICAgc3RyZWFt LmZsdXNoKCkKKworCitkZWYgc2VuZChzdHJlYW0sIHBhY2tldF90eXBlLCBwYXlsb2FkX2RhdGE9 Tm9uZSwgKipwYXlsb2Fka3cpOgorICAgICIiIgorICAgIFNlbmRzIGEgcGFja2V0IG9uIHRoZSBn aXZlbiBwcTMgY29ubmVjdGlvbi4gdHlwZSBpcyB0aGUgcHEzLnR5cGVzIG1lbWJlcgorICAgIHRo YXQgc2hvdWxkIGJlIGFzc2lnbmVkIHRvIHRoZSBwYWNrZXQuIElmIHBheWxvYWRfZGF0YSBpcyBn aXZlbiwgaXQgd2lsbCBiZQorICAgIHVzZWQgYXMgdGhlIHBhY2tldCBwYXlsb2FkOyBvdGhlcndp c2UgdGhlIGtleS92YWx1ZSBwYWlycyBpbiBwYXlsb2Fka3cgd2lsbAorICAgIGJlIHRoZSBwYXls b2FkIGNvbnRlbnRzLgorICAgICIiIgorICAgIGRhdGEgPSBwYXlsb2Fka3cKKworICAgIGlmIHBh eWxvYWRfZGF0YSBpcyBub3QgTm9uZToKKyAgICAgICAgaWYgcGF5bG9hZGt3OgorICAgICAgICAg ICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAicGF5bG9hZF9kYXRhIGFuZCBw YXlsb2FkIGtleXdvcmRzIG1heSBub3QgYmUgdXNlZCBzaW11bHRhbmVvdXNseSIKKyAgICAgICAg ICAgICkKKworICAgICAgICBkYXRhID0gcGF5bG9hZF9kYXRhCisKKyAgICBfc2VuZChzdHJlYW0s IFBxMywgZGljdCh0eXBlPXBhY2tldF90eXBlLCBwYXlsb2FkPWRhdGEpKQorCisKK2RlZiBzZW5k X3N0YXJ0dXAoc3RyZWFtLCBwcm90bz1Ob25lLCAqKmt3YXJncyk6CisgICAgIiIiCisgICAgU2Vu ZHMgYSBzdGFydHVwIHBhY2tldCBvbiB0aGUgZ2l2ZW4gcHEzIGNvbm5lY3Rpb24uIEluIG1vc3Qg Y2FzZXMgeW91IHNob3VsZAorICAgIHVzZSB0aGUgaGFuZHNoYWtlIGZ1bmN0aW9ucyBpbnN0ZWFk LCB3aGljaCB3aWxsIGRvIHRoaXMgZm9yIHlvdS4KKworICAgIEJ5IGRlZmF1bHQsIGEgcHJvdG9j b2wgdmVyc2lvbiAzIHBhY2tldCB3aWxsIGJlIHNlbnQuIFRoaXMgY2FuIGJlIG92ZXJyaWRkZW4K KyAgICB3aXRoIHRoZSBwcm90byBwYXJhbWV0ZXIuCisgICAgIiIiCisgICAgcGt0ID0ge30KKwor ICAgIGlmIHByb3RvIGlzIG5vdCBOb25lOgorICAgICAgICBwa3RbInByb3RvIl0gPSBwcm90bwor ICAgIGlmIGt3YXJnczoKKyAgICAgICAgcGt0WyJwYXlsb2FkIl0gPSBrd2FyZ3MKKworICAgIF9z ZW5kKHN0cmVhbSwgU3RhcnR1cCwgcGt0KQorCisKK2RlZiByZWN2MShzdHJlYW0sICosIGNscz1Q cTMpOgorICAgICIiIgorICAgIFJlY2VpdmVzIGEgc2luZ2xlIHBxMyBwYWNrZXQgZnJvbSB0aGUg Z2l2ZW4gc3RyZWFtIGFuZCByZXR1cm5zIGl0LgorICAgICIiIgorICAgIHJlc3AgPSBjbHMucGFy c2Vfc3RyZWFtKHN0cmVhbSkKKworICAgIGRlYnVnZ2luZyA9IGhhc2F0dHIoc3RyZWFtLCAiZmx1 c2hfZGVidWciKQorICAgIGlmIGRlYnVnZ2luZzoKKyAgICAgICAgc3RyZWFtLmVuZF9wYWNrZXQo cmVzcCwgcmVhZD1UcnVlKQorCisgICAgcmV0dXJuIHJlc3AKKworCitkZWYgaGFuZHNoYWtlKHN0 cmVhbSwgKiprd2FyZ3MpOgorICAgICIiIgorICAgIFBlcmZvcm1zIGEgbGlicHEgdjMgc3RhcnR1 cCBoYW5kc2hha2UuIGt3YXJncyBzaG91bGQgY29udGFpbiB0aGUga2V5L3ZhbHVlCisgICAgcGFy YW1ldGVycyB0byBzZW5kIHRvIHRoZSBzZXJ2ZXIgaW4gdGhlIHN0YXJ0dXAgcGFja2V0LgorICAg ICIiIgorICAgICMgU2VuZCBvdXIgc3RhcnR1cCBwYXJhbWV0ZXJzLgorICAgIHNlbmRfc3RhcnR1 cChzdHJlYW0sICoqa3dhcmdzKQorCisgICAgIyBSZWNlaXZlIGFuZCBkdW1wIHBhY2tldHMgdW50 aWwgdGhlIHNlcnZlciBpbmRpY2F0ZXMgaXQncyByZWFkeSBmb3Igb3VyCisgICAgIyBmaXJzdCBx dWVyeS4KKyAgICB3aGlsZSBUcnVlOgorICAgICAgICByZXNwID0gcmVjdjEoc3RyZWFtKQorICAg ICAgICBpZiByZXNwIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoInNl cnZlciBjbG9zZWQgY29ubmVjdGlvbiBkdXJpbmcgaGFuZHNoYWtlIikKKworICAgICAgICBpZiBy ZXNwLnR5cGUgPT0gdHlwZXMuUmVhZHlGb3JRdWVyeToKKyAgICAgICAgICAgIHJldHVybgorICAg ICAgICBlbGlmIHJlc3AudHlwZSA9PSB0eXBlcy5FcnJvclJlc3BvbnNlOgorICAgICAgICAgICAg cmFpc2UgUnVudGltZUVycm9yKAorICAgICAgICAgICAgICAgIGYicmVjZWl2ZWQgZXJyb3IgcmVz cG9uc2UgZnJvbSBwZWVyOiB7cmVzcC5wYXlsb2FkLmZpZWxkcyFyfSIKKyAgICAgICAgICAgICkK KworCisjIFRMUworCisKK2NsYXNzIF9UTFNTdHJlYW0ob2JqZWN0KToKKyAgICAiIiIKKyAgICBB IGZpbGUtbGlrZSBvYmplY3QgdGhhdCBwZXJmb3JtcyBUTFMgZW5jcnlwdGlvbi9kZWNyeXB0aW9u IG9uIGEgd3JhcHBlZAorICAgIHN0cmVhbS4gRGlmZmVycyBmcm9tIHNzbC5TU0xTb2NrZXQgaW4g dGhhdCB3ZSBoYXZlIGZ1bGwgdmlzaWJpbGl0eSBhbmQKKyAgICBjb250cm9sIG92ZXIgdGhlIFRM UyBsYXllci4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJlYW0sIGNvbnRl eHQpOgorICAgICAgICBzZWxmLl9zdHJlYW0gPSBzdHJlYW0KKyAgICAgICAgc2VsZi5fZGVidWdn aW5nID0gaGFzYXR0cihzdHJlYW0sICJmbHVzaF9kZWJ1ZyIpCisKKyAgICAgICAgc2VsZi5faW4g PSBzc2wuTWVtb3J5QklPKCkKKyAgICAgICAgc2VsZi5fb3V0ID0gc3NsLk1lbW9yeUJJTygpCisg ICAgICAgIHNlbGYuX3NzbCA9IGNvbnRleHQud3JhcF9iaW8oc2VsZi5faW4sIHNlbGYuX291dCkK KworICAgIGRlZiBoYW5kc2hha2Uoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNl bGYuX3B1bXAobGFtYmRhOiBzZWxmLl9zc2wuZG9faGFuZHNoYWtlKCkpCisgICAgICAgIGZpbmFs bHk6CisgICAgICAgICAgICBzZWxmLl9mbHVzaF9kZWJ1ZyhwcmVmaXg9Ij8gIikKKworICAgIGRl ZiByZWFkKHNlbGYsICphcmdzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3B1bXAobGFtYmRhOiBz ZWxmLl9zc2wucmVhZCgqYXJncykpCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgKmFyZ3MpOgorICAg ICAgICByZXR1cm4gc2VsZi5fcHVtcChsYW1iZGE6IHNlbGYuX3NzbC53cml0ZSgqYXJncykpCisK KyAgICBkZWYgX2RlY29kZShzZWxmLCBidWYpOgorICAgICAgICAiIiIKKyAgICAgICAgQXR0ZW1w dHMgdG8gZGVjb2RlIGEgYnVmZmVyIG9mIFRMUyBkYXRhIGludG8gYSBwYWNrZXQgcmVwcmVzZW50 YXRpb24KKyAgICAgICAgdGhhdCBjYW4gYmUgcHJpbnRlZC4KKworICAgICAgICBUT0RPOiBoYW5k bGUgYnVmZmVycyAoYW5kIHJlY29yZCBmcmFnbWVudHMpIHRoYXQgZG9uJ3QgYWxpZ24gd2l0aCBw YWNrZXQKKyAgICAgICAgYm91bmRhcmllcy4KKyAgICAgICAgIiIiCisgICAgICAgIGVuZCA9IGxl bihidWYpCisgICAgICAgIGJpbyA9IGlvLkJ5dGVzSU8oYnVmKQorCisgICAgICAgIHJldCA9IGlv LlN0cmluZ0lPKCkKKworICAgICAgICB3aGlsZSBiaW8udGVsbCgpIDwgZW5kOgorICAgICAgICAg ICAgcmVjb3JkID0gdGxzLlBsYWludGV4dC5wYXJzZV9zdHJlYW0oYmlvKQorCisgICAgICAgICAg ICBpZiByZXQudGVsbCgpID4gMDoKKyAgICAgICAgICAgICAgICByZXQud3JpdGUoIlxuIikKKyAg ICAgICAgICAgIHJldC53cml0ZSgiW1JlY29yZF0gIikKKyAgICAgICAgICAgIHJldC53cml0ZShz dHIocmVjb3JkKSkKKyAgICAgICAgICAgIHJldC53cml0ZSgiXG4iKQorCisgICAgICAgICAgICBp ZiByZWNvcmQudHlwZSA9PSB0bHMuQ29udGVudFR5cGUuaGFuZHNoYWtlOgorICAgICAgICAgICAg ICAgIHJlY29yZF9jbHMgPSB0bHMuSGFuZHNoYWtlCisgICAgICAgICAgICBlbHNlOgorICAgICAg ICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlubmVybGVuID0gbGVuKHJlY29yZC5m cmFnbWVudCkKKyAgICAgICAgICAgIGlubmVyID0gaW8uQnl0ZXNJTyhyZWNvcmQuZnJhZ21lbnQp CisKKyAgICAgICAgICAgIHdoaWxlIGlubmVyLnRlbGwoKSA8IGlubmVybGVuOgorICAgICAgICAg ICAgICAgIG1zZyA9IHJlY29yZF9jbHMucGFyc2Vfc3RyZWFtKGlubmVyKQorCisgICAgICAgICAg ICAgICAgaW5kZW50ZWQgPSAiW01lc3NhZ2VdICIgKyBzdHIobXNnKQorICAgICAgICAgICAgICAg IGluZGVudGVkID0gdGV4dHdyYXAuaW5kZW50KGluZGVudGVkLCAiICAgICIpCisKKyAgICAgICAg ICAgICAgICByZXQud3JpdGUoIlxuIikKKyAgICAgICAgICAgICAgICByZXQud3JpdGUoaW5kZW50 ZWQpCisgICAgICAgICAgICAgICAgcmV0LndyaXRlKCJcbiIpCisKKyAgICAgICAgcmV0dXJuIHJl dC5nZXR2YWx1ZSgpCisKKyAgICBkZWYgZmx1c2goc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxm Ll9vdXQucGVuZGluZzoKKyAgICAgICAgICAgIHNlbGYuX3N0cmVhbS5mbHVzaCgpCisgICAgICAg ICAgICByZXR1cm4KKworICAgICAgICBidWYgPSBzZWxmLl9vdXQucmVhZCgpCisgICAgICAgIHNl bGYuX3N0cmVhbS53cml0ZShidWYpCisKKyAgICAgICAgaWYgc2VsZi5fZGVidWdnaW5nOgorICAg ICAgICAgICAgcGt0ID0gc2VsZi5fZGVjb2RlKGJ1ZikKKyAgICAgICAgICAgIHNlbGYuX3N0cmVh bS5lbmRfcGFja2V0KHBrdCwgcHJlZml4PSIgICIpCisKKyAgICAgICAgc2VsZi5fc3RyZWFtLmZs dXNoKCkKKworICAgIGRlZiBfcHVtcChzZWxmLCBvcGVyYXRpb24pOgorICAgICAgICB3aGlsZSBU cnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb24o KQorICAgICAgICAgICAgZXhjZXB0IChzc2wuU1NMV2FudFJlYWRFcnJvciwgc3NsLlNTTFdhbnRX cml0ZUVycm9yKSBhcyBlOgorICAgICAgICAgICAgICAgIHdhbnQgPSBlCisgICAgICAgICAgICBz ZWxmLl9yZWFkX3dyaXRlKHdhbnQpCisKKyAgICBkZWYgX3JlY3Yoc2VsZiwgbWF4c2l6ZSk6Cisg ICAgICAgIGJ1ZiA9IHNlbGYuX3N0cmVhbS5yZWN2KDQwOTYpCisgICAgICAgIGlmIG5vdCBidWY6 CisgICAgICAgICAgICBzZWxmLl9pbi53cml0ZV9lb2YoKQorICAgICAgICAgICAgcmV0dXJuCisK KyAgICAgICAgc2VsZi5faW4ud3JpdGUoYnVmKQorCisgICAgICAgIGlmIG5vdCBzZWxmLl9kZWJ1 Z2dpbmc6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBwa3QgPSBzZWxmLl9kZWNvZGUo YnVmKQorICAgICAgICBzZWxmLl9zdHJlYW0uZW5kX3BhY2tldChwa3QsIHJlYWQ9VHJ1ZSwgcHJl Zml4PSIgICIpCisKKyAgICBkZWYgX3JlYWRfd3JpdGUoc2VsZiwgd2FudCk6CisgICAgICAgICMg WFhYIFRoaXMgbmVlZHMgd29yay4gU28gbWFueSBjb3JuZXIgY2FzZXMgeWV0IHRvIGhhbmRsZS4g Rm9yIG9uZSwKKyAgICAgICAgIyBkb2luZyBibG9ja2luZyB3cml0ZXMgaW4gZmx1c2ggbWF5IGxl YWQgdG8gZGlzdHJpYnV0ZWQgZGVhZGxvY2sgaWYgdGhlCisgICAgICAgICMgcGVlciBpcyBhbHJl YWR5IGJsb2NraW5nIG9uIGl0cyB3cml0ZXMuCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh3YW50 LCBzc2wuU1NMV2FudFdyaXRlRXJyb3IpOgorICAgICAgICAgICAgYXNzZXJ0IHNlbGYuX291dC5w ZW5kaW5nLCAiU1NMIGJhY2tlbmQgd2FudHMgd3JpdGUgd2l0aG91dCBkYXRhIgorCisgICAgICAg IHNlbGYuZmx1c2goKQorCisgICAgICAgIGlmIGlzaW5zdGFuY2Uod2FudCwgc3NsLlNTTFdhbnRS ZWFkRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5fcmVjdig0MDk2KQorCisgICAgZGVmIF9mbHVz aF9kZWJ1ZyhzZWxmLCBwcmVmaXgpOgorICAgICAgICBpZiBub3Qgc2VsZi5fZGVidWdnaW5nOgor ICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5fc3RyZWFtLmZsdXNoX2RlYnVnKHBy ZWZpeD1wcmVmaXgpCisKKworQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKK2RlZiB0bHNfaGFu ZHNoYWtlKHN0cmVhbSwgY29udGV4dCk6CisgICAgIiIiCisgICAgUGVyZm9ybXMgYSBUTFMgaGFu ZHNoYWtlIG92ZXIgdGhlIGdpdmVuIHN0cmVhbSAod2hpY2ggbXVzdCBoYXZlIGJlZW4gY3JlYXRl ZAorICAgIHZpYSBhIGNhbGwgdG8gd3JhcCgpKSwgYW5kIHJldHVybnMgYSBuZXcgc3RyZWFtIHdo aWNoIHRyYW5zcGFyZW50bHkgdHVubmVscworICAgIGRhdGEgb3ZlciB0aGUgVExTIGNvbm5lY3Rp b24uCisKKyAgICBJZiB0aGUgcGFzc2VkIHN0cmVhbSBoYXMgZGVidWdnaW5nIGVuYWJsZWQsIHRo ZSByZXR1cm5lZCBzdHJlYW0gd2lsbCBhbHNvCisgICAgaGF2ZSBkZWJ1Z2dpbmcsIHVzaW5nIHRo ZSBzYW1lIG91dHB1dCBJTy4KKyAgICAiIiIKKyAgICBkZWJ1Z2dpbmcgPSBoYXNhdHRyKHN0cmVh bSwgImZsdXNoX2RlYnVnIikKKworICAgICMgU2VuZCBvdXIgc3RhcnR1cCBwYXJhbWV0ZXJzLgor ICAgIHNlbmRfc3RhcnR1cChzdHJlYW0sIHByb3RvPXByb3RvY29sKDEyMzQsIDU2NzkpKQorCisg ICAgIyBMb29rIGF0IHRoZSBTU0wgcmVzcG9uc2UuCisgICAgcmVzcCA9IHN0cmVhbS5yZWFkKDEp CisgICAgaWYgZGVidWdnaW5nOgorICAgICAgICBzdHJlYW0uZmx1c2hfZGVidWcocHJlZml4PSIg ICIpCisKKyAgICBpZiByZXNwID09IGIiTiI6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigi c2VydmVyIGRvZXMgbm90IHN1cHBvcnQgU1NMUmVxdWVzdCIpCisgICAgaWYgcmVzcCAhPSBiIlMi OgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoZiJ1bmV4cGVjdGVkIHJlc3BvbnNlIG9mIHR5 cGUge3Jlc3Ahcn0gZHVyaW5nIFRMUyBzdGFydHVwIikKKworICAgIHRscyA9IF9UTFNTdHJlYW0o c3RyZWFtLCBjb250ZXh0KQorICAgIHRscy5oYW5kc2hha2UoKQorCisgICAgaWYgZGVidWdnaW5n OgorICAgICAgICB0bHMgPSBfRGVidWdTdHJlYW0odGxzLCBzdHJlYW0uX291dCkKKworICAgIHRy eToKKyAgICAgICAgeWllbGQgdGxzCisgICAgICAgICMgVE9ETzogdGVhcmRvd24vdW53cmFwIHRo ZSBjb25uZWN0aW9uPworICAgIGZpbmFsbHk6CisgICAgICAgIGlmIGRlYnVnZ2luZzoKKyAgICAg ICAgICAgIHRscy5mbHVzaF9kZWJ1ZyhwcmVmaXg9Ij8gIikKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3B5dGhvbi9weXRlc3QuaW5pIGIvc3JjL3Rlc3QvcHl0aG9uL3B5dGVzdC5pbmkKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYWI3YTZlN2ZiOQotLS0gL2Rldi9udWxsCisr KyBiL3NyYy90ZXN0L3B5dGhvbi9weXRlc3QuaW5pCkBAIC0wLDAgKzEsNCBAQAorW3B5dGVzdF0K KworbWFya2VycyA9CisgICAgc2xvdzogbWFyayB0ZXN0IGFzIHNsb3cKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3B5dGhvbi9yZXF1aXJlbWVudHMudHh0IGIvc3JjL3Rlc3QvcHl0aG9uL3JlcXVpcmVt ZW50cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMzJmMTA1ZWE4 NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3B5dGhvbi9yZXF1aXJlbWVudHMudHh0CkBA IC0wLDAgKzEsNyBAQAorYmxhY2sKK2NyeXB0b2dyYXBoeX49My40LjYKK2NvbnN0cnVjdH49Mi4x MC42MQoraXNvcnR+PTUuNgorcHN5Y29wZzJ+PTIuOC42CitweXRlc3R+PTYuMQorcHl0ZXN0LWFz eW5jaW9+PTAuMTQuMApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcHl0aG9uL3NlcnZlci9fX2luaXRf Xy5weSBiL3NyYy90ZXN0L3B5dGhvbi9zZXJ2ZXIvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZTY5ZGUyOWJiMgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cHl0aG9uL3NlcnZlci9jb25mdGVzdC5weSBiL3NyYy90ZXN0L3B5dGhvbi9zZXJ2ZXIvY29uZnRl c3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYmE3MzQyYTQ1Mwot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3B5dGhvbi9zZXJ2ZXIvY29uZnRlc3QucHkKQEAg LTAsMCArMSw0NSBAQAorIworIyBDb3B5cmlnaHQgMjAyMSBWTXdhcmUsIEluYy4KKyMgU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IFBvc3RncmVTUUwKKyMKKworaW1wb3J0IGNvbnRleHRsaWIKK2lt cG9ydCBzb2NrZXQKK2ltcG9ydCBzeXMKKworaW1wb3J0IHB5dGVzdAorCitpbXBvcnQgcHEzCisK KworQHB5dGVzdC5maXh0dXJlCitkZWYgY29ubmVjdCgpOgorICAgICIiIgorICAgIEEgZmFjdG9y eSBmaXh0dXJlIHRoYXQsIHdoZW4gY2FsbGVkLCByZXR1cm5zIGEgc29ja2V0IGNvbm5lY3RlZCB0 byBhCisgICAgUG9zdGdyZXMgc2VydmVyLCB3cmFwcGVkIGluIGEgcHEzIGNvbm5lY3Rpb24uIFRo ZSBjYWxsaW5nIHRlc3Qgd2lsbCBiZQorICAgIHNraXBwZWQgYXV0b21hdGljYWxseSBpZiBhIHNl cnZlciBpcyBub3QgcnVubmluZyBhdCBQR0hPU1Q6UEdQT1JULCBzbyBpdCdzCisgICAgYmVzdCB0 byBjb25uZWN0IGFzIHNvb24gYXMgcG9zc2libGUgYWZ0ZXIgdGhlIHRlc3QgY2FzZSBiZWdpbnMs IHRvIGF2b2lkCisgICAgZG9pbmcgdW5uZWNlc3Nhcnkgd29yay4KKyAgICAiIiIKKyAgICAjIFNl dCB1cCBhbiBFeGl0U3RhY2sgdG8gaGFuZGxlIHNhZmUgY2xlYW51cCBvZiBhbGwgb2YgdGhlIG1v dmluZyBwaWVjZXMuCisgICAgd2l0aCBjb250ZXh0bGliLkV4aXRTdGFjaygpIGFzIHN0YWNrOgor CisgICAgICAgIGRlZiBjb25uX2ZhY3RvcnkoKToKKyAgICAgICAgICAgIGFkZHIgPSAocHEzLnBn aG9zdCgpLCBwcTMucGdwb3J0KCkpCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAg ICBzb2NrID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKGFkZHIsIHRpbWVvdXQ9MikKKyAgICAg ICAgICAgIGV4Y2VwdCBDb25uZWN0aW9uRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBweXRl c3Quc2tpcChmInVuYWJsZSB0byBjb25uZWN0IHRvIHthZGRyfToge2V9IikKKworICAgICAgICAg ICAgIyBIYXZlIEV4aXRTdGFjayBjbG9zZSBvdXIgc29ja2V0LgorICAgICAgICAgICAgc3RhY2su ZW50ZXJfY29udGV4dChzb2NrKQorCisgICAgICAgICAgICAjIFdyYXAgdGhlIGNvbm5lY3Rpb24g aW4gYSBwcTMgbGF5ZXIgYW5kIGhhdmUgRXhpdFN0YWNrIGNsZWFuIGl0IHVwCisgICAgICAgICAg ICAjIHRvby4KKyAgICAgICAgICAgIHdyYXBfY3R4ID0gcHEzLndyYXAoc29jaywgZGVidWdfc3Ry ZWFtPXN5cy5zdGRvdXQpCisgICAgICAgICAgICBjb25uID0gc3RhY2suZW50ZXJfY29udGV4dCh3 cmFwX2N0eCkKKworICAgICAgICAgICAgcmV0dXJuIGNvbm4KKworICAgICAgICB5aWVsZCBjb25u X2ZhY3RvcnkKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3B5dGhvbi9zZXJ2ZXIvdGVzdF9vYXV0aC5w eSBiL3NyYy90ZXN0L3B5dGhvbi9zZXJ2ZXIvdGVzdF9vYXV0aC5weQpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwLi5jYjVjYTdmYTIzCi0tLSAvZGV2L251bGwKKysrIGIvc3Jj L3Rlc3QvcHl0aG9uL3NlcnZlci90ZXN0X29hdXRoLnB5CkBAIC0wLDAgKzEsMTAxMiBAQAorIwor IyBDb3B5cmlnaHQgMjAyMSBWTXdhcmUsIEluYy4KKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IFBvc3RncmVTUUwKKyMKKworaW1wb3J0IGJhc2U2NAoraW1wb3J0IGNvbnRleHRsaWIKK2ltcG9y dCBqc29uCitpbXBvcnQgb3MKK2ltcG9ydCBwYXRobGliCitpbXBvcnQgc2VjcmV0cworaW1wb3J0 IHNobGV4CitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3RydWN0Citmcm9t IG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgc2hhcmVkX21lbW9yeQorCitpbXBvcnQgcHN5Y29wZzIK K2ltcG9ydCBweXRlc3QKK2Zyb20gcHN5Y29wZzIgaW1wb3J0IHNxbAorCitpbXBvcnQgcHEzCisK K01BWF9TQVNMX01FU1NBR0VfTEVOR1RIID0gNjU1MzUKKworSU5WQUxJRF9BVVRIT1JJWkFUSU9O X0VSUkNPREUgPSBiIjI4MDAwIgorUFJPVE9DT0xfVklPTEFUSU9OX0VSUkNPREUgPSBiIjA4UDAx IgorRkVBVFVSRV9OT1RfU1VQUE9SVEVEX0VSUkNPREUgPSBiIjBBMDAwIgorCitTSEFSRURfTUVN X05BTUUgPSAib2F1dGgtcHl0ZXN0IgorTUFYX1RPS0VOX1NJWkUgPSA0MDk2CitNQVhfVUlOVDE2 ID0gMiAqKiAxNiAtIDEKKworCitkZWYgc2tpcF9pZl9ub19wb3N0Z3JlcygpOgorICAgICIiIgor ICAgIFVzZWQgYnkgdGhlIG9hdXRoX2N0eCBmaXh0dXJlIHRvIHNraXAgdGhpcyB0ZXN0IG1vZHVs ZSBpZiBubyBQb3N0Z3JlcyBzZXJ2ZXIKKyAgICBpcyBydW5uaW5nLgorCisgICAgVGhpcyBsb2dp YyBpcyBuZWFybHkgZHVwbGljYXRlZCB3aXRoIHRoZSBjb25uIGZpeHR1cmUuIElkZWFsbHkgb2F1 dGhfY3R4CisgICAgd291bGQgZGVwZW5kIG9uIHRoYXQsIGJ1dCBhIG1vZHVsZS1zY29wZSBmaXh0 dXJlIGNhbid0IGRlcGVuZCBvbiBhCisgICAgdGVzdC1zY29wZSBmaXh0dXJlLCBhbmQgd2UgaGF2 ZW4ndCByZWFjaGVkIHRoZSBydWxlIG9mIHRocmVlIHlldC4KKyAgICAiIiIKKyAgICBhZGRyID0g KHBxMy5wZ2hvc3QoKSwgcHEzLnBncG9ydCgpKQorCisgICAgdHJ5OgorICAgICAgICB3aXRoIHNv Y2tldC5jcmVhdGVfY29ubmVjdGlvbihhZGRyLCB0aW1lb3V0PTIpOgorICAgICAgICAgICAgcGFz cworICAgIGV4Y2VwdCBDb25uZWN0aW9uRXJyb3IgYXMgZToKKyAgICAgICAgcHl0ZXN0LnNraXAo ZiJ1bmFibGUgdG8gY29ubmVjdCB0byB7YWRkcn06IHtlfSIpCisKKworQGNvbnRleHRsaWIuY29u dGV4dG1hbmFnZXIKK2RlZiBwcmVwZW5kX2ZpbGUocGF0aCwgbGluZXMpOgorICAgICIiIgorICAg IEEgY29udGV4dCBtYW5hZ2VyIHRoYXQgcHJlcGVuZHMgYSBmaWxlIG9uIGRpc2sgd2l0aCB0aGUg ZGVzaXJlZCBsaW5lcyBvZgorICAgIHRleHQuIFdoZW4gdGhlIGNvbnRleHQgbWFuYWdlciBpcyBl eGl0ZWQsIHRoZSBmaWxlIHdpbGwgYmUgcmVzdG9yZWQgdG8gaXRzCisgICAgb3JpZ2luYWwgY29u dGVudHMuCisgICAgIiIiCisgICAgIyBGaXJzdCBtYWtlIGEgYmFja3VwIG9mIHRoZSBvcmlnaW5h bCBmaWxlLgorICAgIGJhayA9IHBhdGggKyAiLmJhayIKKyAgICBzaHV0aWwuY29weTIocGF0aCwg YmFrKQorCisgICAgdHJ5OgorICAgICAgICAjIFdyaXRlIHRoZSBuZXcgbGluZXMsIGZvbGxvd2Vk IGJ5IHRoZSBvcmlnaW5hbCBmaWxlIGNvbnRlbnQuCisgICAgICAgIHdpdGggb3BlbihwYXRoLCAi dyIpIGFzIG5ldywgb3BlbihiYWssICJyIikgYXMgb3JpZzoKKyAgICAgICAgICAgIG5ldy53cml0 ZWxpbmVzKGxpbmVzKQorICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlb2JqKG9yaWcsIG5ldykK KworICAgICAgICAjIFJldHVybiBjb250cm9sIHRvIHRoZSBjYWxsaW5nIGNvZGUuCisgICAgICAg IHlpZWxkCisKKyAgICBmaW5hbGx5OgorICAgICAgICAjIFB1dCB0aGUgYmFja3VwIGJhY2sgaW50 byBwbGFjZS4KKyAgICAgICAgb3MucmVwbGFjZShiYWssIHBhdGgpCisKKworQHB5dGVzdC5maXh0 dXJlKHNjb3BlPSJtb2R1bGUiKQorZGVmIG9hdXRoX2N0eCgpOgorICAgICIiIgorICAgIENyZWF0 ZXMgYSBkYXRhYmFzZSBhbmQgdXNlciB0aGF0IHVzZSB0aGUgb2F1dGggYXV0aCBtZXRob2QuIFRo ZSBjb250ZXh0CisgICAgb2JqZWN0IGNvbnRhaW5zIHRoZSBkYm5hbWUgYW5kIHVzZXIgYXR0cmli dXRlcyBhcyBzdHJpbmdzIHRvIGJlIHVzZWQgZHVyaW5nCisgICAgY29ubmVjdGlvbiwgYXMgd2Vs bCBhcyB0aGUgaXNzdWVyIGFuZCBzY29wZSB0aGF0IGhhdmUgYmVlbiBzZXQgaW4gdGhlIEhCQQor ICAgIGNvbmZpZ3VyYXRpb24uCisKKyAgICBUaGlzIGZpeHR1cmUgYXNzdW1lcyB0aGF0IHRoZSBz dGFuZGFyZCBQRyogZW52aXJvbm1lbnQgdmFyaWFibGVzIHBvaW50IHRvIGEKKyAgICBzZXJ2ZXIg cnVubmluZyBvbiBhIGxvY2FsIG1hY2hpbmUsIGFuZCB0aGF0IHRoZSBQR1VTRVIgaGFzIHJpZ2h0 cyB0byBjcmVhdGUKKyAgICBkYXRhYmFzZXMgYW5kIHJvbGVzLgorICAgICIiIgorICAgIHNraXBf aWZfbm9fcG9zdGdyZXMoKSAgIyBkb24ndCBib3RoZXIgcnVubmluZyB0aGVzZSB0ZXN0cyB3aXRo b3V0IGEgc2VydmVyCisKKyAgICBpZCA9IHNlY3JldHMudG9rZW5faGV4KDQpCisKKyAgICBjbGFz cyBDb250ZXh0OgorICAgICAgICBkYm5hbWUgPSAib2F1dGhfdGVzdF8iICsgaWQKKworICAgICAg ICB1c2VyID0gIm9hdXRoX3VzZXJfIiArIGlkCisgICAgICAgIG1hcF91c2VyID0gIm9hdXRoX21h cF91c2VyXyIgKyBpZAorICAgICAgICBhdXRoel91c2VyID0gIm9hdXRoX2F1dGh6X3VzZXJfIiAr IGlkCisKKyAgICAgICAgaXNzdWVyID0gImh0dHBzOi8vZXhhbXBsZS5jb20vIiArIGlkCisgICAg ICAgIHNjb3BlID0gIm9wZW5pZCAiICsgaWQKKworICAgIGN0eCA9IENvbnRleHQoKQorICAgIGhi YV9saW5lcyA9ICgKKyAgICAgICAgZidob3N0IHtjdHguZGJuYW1lfSB7Y3R4Lm1hcF91c2VyfSAg IHNhbWVob3N0IG9hdXRoIGlzc3Vlcj0ie2N0eC5pc3N1ZXJ9IiBzY29wZT0ie2N0eC5zY29wZX0i IG1hcD1vYXV0aFxuJywKKyAgICAgICAgZidob3N0IHtjdHguZGJuYW1lfSB7Y3R4LmF1dGh6X3Vz ZXJ9IHNhbWVob3N0IG9hdXRoIGlzc3Vlcj0ie2N0eC5pc3N1ZXJ9IiBzY29wZT0ie2N0eC5zY29w ZX0iIHRydXN0X3ZhbGlkYXRvcl9hdXRoej0xXG4nLAorICAgICAgICBmJ2hvc3Qge2N0eC5kYm5h bWV9IGFsbCAgICAgICAgICAgICAgc2FtZWhvc3Qgb2F1dGggaXNzdWVyPSJ7Y3R4Lmlzc3Vlcn0i IHNjb3BlPSJ7Y3R4LnNjb3BlfSJcbicsCisgICAgKQorICAgIGlkZW50X2xpbmVzID0gKHIib2F1 dGggL14oLiopQGV4YW1wbGVcLmNvbSQgXDEiLCkKKworICAgIGNvbm4gPSBwc3ljb3BnMi5jb25u ZWN0KCIiKQorICAgIGNvbm4uYXV0b2NvbW1pdCA9IFRydWUKKworICAgIHdpdGggY29udGV4dGxp Yi5jbG9zaW5nKGNvbm4pOgorICAgICAgICBjID0gY29ubi5jdXJzb3IoKQorCisgICAgICAgICMg Q3JlYXRlIG91ciByb2xlcyBhbmQgZGF0YWJhc2UuCisgICAgICAgIHVzZXIgPSBzcWwuSWRlbnRp ZmllcihjdHgudXNlcikKKyAgICAgICAgbWFwX3VzZXIgPSBzcWwuSWRlbnRpZmllcihjdHgubWFw X3VzZXIpCisgICAgICAgIGF1dGh6X3VzZXIgPSBzcWwuSWRlbnRpZmllcihjdHguYXV0aHpfdXNl cikKKyAgICAgICAgZGJuYW1lID0gc3FsLklkZW50aWZpZXIoY3R4LmRibmFtZSkKKworICAgICAg ICBjLmV4ZWN1dGUoc3FsLlNRTCgiQ1JFQVRFIFJPTEUge30gTE9HSU47IikuZm9ybWF0KHVzZXIp KQorICAgICAgICBjLmV4ZWN1dGUoc3FsLlNRTCgiQ1JFQVRFIFJPTEUge30gTE9HSU47IikuZm9y bWF0KG1hcF91c2VyKSkKKyAgICAgICAgYy5leGVjdXRlKHNxbC5TUUwoIkNSRUFURSBST0xFIHt9 IExPR0lOOyIpLmZvcm1hdChhdXRoel91c2VyKSkKKyAgICAgICAgYy5leGVjdXRlKHNxbC5TUUwo IkNSRUFURSBEQVRBQkFTRSB7fTsiKS5mb3JtYXQoZGJuYW1lKSkKKworICAgICAgICAjIE1ha2Ug dGhpcyB0ZXN0IHNjcmlwdCB0aGUgc2VydmVyJ3Mgb2F1dGhfdmFsaWRhdG9yLgorICAgICAgICBw YXRoID0gcGF0aGxpYi5QYXRoKF9fZmlsZV9fKS5wYXJlbnQgLyAidmFsaWRhdGVfYmVhcmVyLnB5 IgorICAgICAgICBwYXRoID0gc3RyKHBhdGguYWJzb2x1dGUoKSkKKworICAgICAgICBjbWQgPSBm IntzaGxleC5xdW90ZShwYXRoKX0ge1NIQVJFRF9NRU1fTkFNRX0gPCYlZiIKKyAgICAgICAgYy5l eGVjdXRlKCJBTFRFUiBTWVNURU0gU0VUIG9hdXRoX3ZhbGlkYXRvcl9jb21tYW5kIFRPICVzOyIs IChjbWQsKSkKKworICAgICAgICAjIFJlcGxhY2UgcGdfaGJhIGFuZCBwZ19pZGVudC4KKyAgICAg ICAgYy5leGVjdXRlKCJTSE9XIGhiYV9maWxlOyIpCisgICAgICAgIGhiYSA9IGMuZmV0Y2hvbmUo KVswXQorCisgICAgICAgIGMuZXhlY3V0ZSgiU0hPVyBpZGVudF9maWxlOyIpCisgICAgICAgIGlk ZW50ID0gYy5mZXRjaG9uZSgpWzBdCisKKyAgICAgICAgd2l0aCBwcmVwZW5kX2ZpbGUoaGJhLCBo YmFfbGluZXMpLCBwcmVwZW5kX2ZpbGUoaWRlbnQsIGlkZW50X2xpbmVzKToKKyAgICAgICAgICAg IGMuZXhlY3V0ZSgiU0VMRUNUIHBnX3JlbG9hZF9jb25mKCk7IikKKworICAgICAgICAgICAgIyBV c2UgdGhlIG5ldyBkYXRhYmFzZSBhbmQgdXNlci4KKyAgICAgICAgICAgIHlpZWxkIGN0eAorCisg ICAgICAgICMgUHV0IHRoaW5ncyBiYWNrIHRoZSB3YXkgdGhleSB3ZXJlLgorICAgICAgICBjLmV4 ZWN1dGUoIlNFTEVDVCBwZ19yZWxvYWRfY29uZigpOyIpCisKKyAgICAgICAgYy5leGVjdXRlKCJB TFRFUiBTWVNURU0gUkVTRVQgb2F1dGhfdmFsaWRhdG9yX2NvbW1hbmQ7IikKKyAgICAgICAgYy5l eGVjdXRlKHNxbC5TUUwoIkRST1AgREFUQUJBU0Uge307IikuZm9ybWF0KGRibmFtZSkpCisgICAg ICAgIGMuZXhlY3V0ZShzcWwuU1FMKCJEUk9QIFJPTEUge307IikuZm9ybWF0KGF1dGh6X3VzZXIp KQorICAgICAgICBjLmV4ZWN1dGUoc3FsLlNRTCgiRFJPUCBST0xFIHt9OyIpLmZvcm1hdChtYXBf dXNlcikpCisgICAgICAgIGMuZXhlY3V0ZShzcWwuU1FMKCJEUk9QIFJPTEUge307IikuZm9ybWF0 KHVzZXIpKQorCisKK0BweXRlc3QuZml4dHVyZSgpCitkZWYgY29ubihvYXV0aF9jdHgsIGNvbm5l Y3QpOgorICAgICIiIgorICAgIEEgY29udmVuaWVuY2Ugd3JhcHBlciBmb3IgY29ubmVjdCgpLiBU aGUgbWFpbiBwdXJwb3NlIG9mIHRoaXMgZml4dHVyZSBpcyB0bworICAgIG1ha2Ugc3VyZSBvYXV0 aF9jdHggcnVucyBpdHMgc2V0dXAgY29kZSBiZWZvcmUgdGhlIGNvbm5lY3Rpb24gaXMgbWFkZS4K KyAgICAiIiIKKyAgICByZXR1cm4gY29ubmVjdCgpCisKKworQHB5dGVzdC5maXh0dXJlKHNjb3Bl PSJtb2R1bGUiLCBhdXRvdXNlPVRydWUpCitkZWYgYXV0aG5faWRfZXh0ZW5zaW9uKG9hdXRoX2N0 eCk6CisgICAgIiIiCisgICAgUGVyZm9ybXMgYSBgQ1JFQVRFIEVYVEVOU0lPTiBhdXRobl9pZGAg aW4gdGhlIHRlc3QgZGF0YWJhc2UuIFRoaXMgZml4dHVyZSBpcworICAgIGF1dG91c2VkLCBzbyB0 ZXN0cyBkb24ndCBuZWVkIHRvIHJlbHkgb24gaXQuCisgICAgIiIiCisgICAgY29ubiA9IHBzeWNv cGcyLmNvbm5lY3QoZGF0YWJhc2U9b2F1dGhfY3R4LmRibmFtZSkKKyAgICBjb25uLmF1dG9jb21t aXQgPSBUcnVlCisKKyAgICB3aXRoIGNvbnRleHRsaWIuY2xvc2luZyhjb25uKToKKyAgICAgICAg YyA9IGNvbm4uY3Vyc29yKCkKKyAgICAgICAgYy5leGVjdXRlKCJDUkVBVEUgRVhURU5TSU9OIGF1 dGhuX2lkOyIpCisKKworQHB5dGVzdC5maXh0dXJlKHNjb3BlPSJzZXNzaW9uIikKK2RlZiBzaGFy ZWRfbWVtKCk6CisgICAgIiIiCisgICAgWWllbGRzIGEgc2hhcmVkIG1lbW9yeSBzZWdtZW50IHRo YXQgY2FuIGJlIHVzZWQgZm9yIGNvbW11bmljYXRpb24gYmV0d2VlbgorICAgIHRoZSBiZWFyZXJf dG9rZW4gZml4dHVyZSBhbmQgLi92YWxpZGF0ZV9iZWFyZXIucHkuCisgICAgIiIiCisgICAgc2l6 ZSA9IE1BWF9UT0tFTl9TSVpFICsgMiAgIyB0d28gYnl0ZSBsZW5ndGggcHJlZml4CisgICAgbWVt ID0gc2hhcmVkX21lbW9yeS5TaGFyZWRNZW1vcnkoU0hBUkVEX01FTV9OQU1FLCBjcmVhdGU9VHJ1 ZSwgc2l6ZT1zaXplKQorCisgICAgdHJ5OgorICAgICAgICB3aXRoIGNvbnRleHRsaWIuY2xvc2lu ZyhtZW0pOgorICAgICAgICAgICAgeWllbGQgbWVtCisgICAgZmluYWxseToKKyAgICAgICAgbWVt LnVubGluaygpCisKKworQHB5dGVzdC5maXh0dXJlKCkKK2RlZiBiZWFyZXJfdG9rZW4oc2hhcmVk X21lbSk6CisgICAgIiIiCisgICAgUmV0dXJucyBhIGZhY3RvcnkgZnVuY3Rpb24gdGhhdCwgd2hl biBjYWxsZWQsIHdpbGwgc3RvcmUgYSBCZWFyZXIgdG9rZW4gaW4KKyAgICBzaGFyZWRfbWVtLiBJ ZiB0b2tlbiBpcyBOb25lICh0aGUgZGVmYXVsdCksIGEgbmV3IHRva2VuIHdpbGwgYmUgZ2VuZXJh dGVkCisgICAgdXNpbmcgc2VjcmV0cy50b2tlbl91cmxzYWZlKCkgYW5kIHJldHVybmVkOyBvdGhl cndpc2UgdGhlIHBhc3NlZCB0b2tlbiB3aWxsCisgICAgYmUgdXNlZCBhcy1pcy4KKworICAgIFdo ZW4gdG9rZW4gaXMgTm9uZSwgdGhlIGdlbmVyYXRlZCB0b2tlbiBzaXplIGluIGJ5dGVzIG1heSBi ZSBzcGVjaWZpZWQgYXMgYW4KKyAgICBhcmd1bWVudDsgaWYgdW5zZXQsIGEgc21hbGwgMTYtYnl0 ZSB0b2tlbiB3aWxsIGJlIGdlbmVyYXRlZC4gVGhlIHRva2VuIHNpemUKKyAgICBtYXkgbm90IGV4 Y2VlZCBNQVhfVE9LRU5fU0laRSBpbiBhbnkgY2FzZS4KKworICAgIFRoZSByZXR1cm4gdmFsdWUg aXMgdGhlIHRva2VuLCBjb252ZXJ0ZWQgdG8gYSBieXRlcyBvYmplY3QuCisKKyAgICBBcyBhIHNw ZWNpYWwgY2FzZSBmb3IgdGVzdGluZyBmYWlsdXJlIG1vZGVzLCBhY2NlcHRfYW55IG1heSBiZSBz ZXQgdG8gVHJ1ZS4KKyAgICBUaGlzIHNpZ25hbHMgdG8gdGhlIHZhbGlkYXRvciBjb21tYW5kIHRo YXQgYW55IGJlYXJlciB0b2tlbiBzaG91bGQgYmUKKyAgICBhY2NlcHRlZC4gVGhlIHJldHVybmVk IHRva2VuIGluIHRoaXMgY2FzZSBtYXkgYmUgdXNlZCBvciBkaXNjYXJkZWQgYXMgbmVlZGVkCisg ICAgYnkgdGhlIHRlc3QuCisgICAgIiIiCisKKyAgICBkZWYgc2V0X3Rva2VuKHRva2VuPU5vbmUs ICosIHNpemU9MTYsIGFjY2VwdF9hbnk9RmFsc2UpOgorICAgICAgICBpZiB0b2tlbiBpcyBub3Qg Tm9uZToKKyAgICAgICAgICAgIHNpemUgPSBsZW4odG9rZW4pCisKKyAgICAgICAgaWYgc2l6ZSA+ IE1BWF9UT0tFTl9TSVpFOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihmInRva2VuIHNp emUge3NpemV9IGV4Y2VlZHMgbWF4aW11bSBzaXplIHtNQVhfVE9LRU5fU0laRX0iKQorCisgICAg ICAgIGlmIHRva2VuIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBzaXplICUgNDoKKyAgICAgICAg ICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGYicmVxdWVzdGVkIHRva2VuIHNpemUge3NpemV9IGlz IG5vdCBhIG11bHRpcGxlIG9mIDQiKQorCisgICAgICAgICAgICB0b2tlbiA9IHNlY3JldHMudG9r ZW5fdXJsc2FmZShzaXplIC8vIDQgKiAzKQorICAgICAgICAgICAgYXNzZXJ0IGxlbih0b2tlbikg PT0gc2l6ZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRva2VuID0gdG9rZW4uZW5jb2Rl KCJhc2NpaSIpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBh c3MgICMgYWxyZWFkeSBlbmNvZGVkCisKKyAgICAgICAgaWYgYWNjZXB0X2FueToKKyAgICAgICAg ICAgICMgVHdvLWJ5dGUgbWFnaWMgdmFsdWUuCisgICAgICAgICAgICBzaGFyZWRfbWVtLmJ1Zls6 Ml0gPSBzdHJ1Y3QucGFjaygiSCIsIE1BWF9VSU5UMTYpCisgICAgICAgIGVsc2U6CisgICAgICAg ICAgICAjIFR3by1ieXRlIGxlbmd0aCBwcmVmaXgsIHRoZW4gdGhlIHRva2VuIGRhdGEuCisgICAg ICAgICAgICBzaGFyZWRfbWVtLmJ1Zls6Ml0gPSBzdHJ1Y3QucGFjaygiSCIsIGxlbih0b2tlbikp CisgICAgICAgICAgICBzaGFyZWRfbWVtLmJ1ZlsyIDogc2l6ZSArIDJdID0gdG9rZW4KKworICAg ICAgICByZXR1cm4gdG9rZW4KKworICAgIHJldHVybiBzZXRfdG9rZW4KKworCitkZWYgYmVnaW5f b2F1dGhfaGFuZHNoYWtlKGNvbm4sIG9hdXRoX2N0eCwgKiwgdXNlcj1Ob25lKToKKyAgICBpZiB1 c2VyIGlzIE5vbmU6CisgICAgICAgIHVzZXIgPSBvYXV0aF9jdHguYXV0aHpfdXNlcgorCisgICAg cHEzLnNlbmRfc3RhcnR1cChjb25uLCB1c2VyPXVzZXIsIGRhdGFiYXNlPW9hdXRoX2N0eC5kYm5h bWUpCisKKyAgICByZXNwID0gcHEzLnJlY3YxKGNvbm4pCisgICAgYXNzZXJ0IHJlc3AudHlwZSA9 PSBwcTMudHlwZXMuQXV0aG5SZXF1ZXN0CisKKyAgICAjIFRoZSBzZXJ2ZXIgc2hvdWxkIGFkdmVy dGlzZSBleGFjdGx5IG9uZSBtZWNoYW5pc20uCisgICAgYXNzZXJ0IHJlc3AucGF5bG9hZC50eXBl ID09IHBxMy5hdXRobi5TQVNMCisgICAgYXNzZXJ0IHJlc3AucGF5bG9hZC5ib2R5ID09IFtiIk9B VVRIQkVBUkVSIiwgYiIiXQorCisKK2RlZiBzZW5kX2luaXRpYWxfcmVzcG9uc2UoY29ubiwgKiwg YXV0aD1Ob25lLCBiZWFyZXI9Tm9uZSk6CisgICAgIiIiCisgICAgU2VuZHMgdGhlIE9BVVRIQkVB UkVSIGluaXRpYWwgcmVzcG9uc2Ugb24gdGhlIGNvbm5lY3Rpb24sIHVzaW5nIHRoZSBnaXZlbgor ICAgIGJlYXJlciB0b2tlbi4gQWx0ZXJuYXRpdmVseSB0byBhIGJlYXJlciB0b2tlbiwgdGhlIGlu aXRpYWwgcmVzcG9uc2UncyBhdXRoCisgICAgZmllbGQgbWF5IGJlIGV4cGxpY2l0bHkgc3BlY2lm aWVkIHRvIHRlc3QgY29ybmVyIGNhc2VzLgorICAgICIiIgorICAgIGlmIGJlYXJlciBpcyBub3Qg Tm9uZSBhbmQgYXV0aCBpcyBub3QgTm9uZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZXhh Y3RseSBvbmUgb2YgdGhlIGF1dGggYW5kIGJlYXJlciBrd2FyZ3MgbXVzdCBiZSBzZXQiKQorCisg ICAgaWYgYmVhcmVyIGlzIG5vdCBOb25lOgorICAgICAgICBhdXRoID0gYiJCZWFyZXIgIiArIGJl YXJlcgorCisgICAgaWYgYXV0aCBpcyBOb25lOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJl eGFjdGx5IG9uZSBvZiB0aGUgYXV0aCBhbmQgYmVhcmVyIGt3YXJncyBtdXN0IGJlIHNldCIpCisK KyAgICBpbml0aWFsID0gcHEzLlNBU0xJbml0aWFsUmVzcG9uc2UuYnVpbGQoCisgICAgICAgIGRp Y3QoCisgICAgICAgICAgICBuYW1lPWIiT0FVVEhCRUFSRVIiLAorICAgICAgICAgICAgZGF0YT1i Im4sLFx4MDFhdXRoPSIgKyBhdXRoICsgYiJceDAxXHgwMSIsCisgICAgICAgICkKKyAgICApCisg ICAgcHEzLnNlbmQoY29ubiwgcHEzLnR5cGVzLlBhc3N3b3JkTWVzc2FnZSwgaW5pdGlhbCkKKwor CitkZWYgZXhwZWN0X2hhbmRzaGFrZV9zdWNjZXNzKGNvbm4pOgorICAgICIiIgorICAgIFZhbGlk YXRlcyB0aGF0IHRoZSBzZXJ2ZXIgcmVzcG9uZHMgd2l0aCBhbiBBdXRobk9LIG1lc3NhZ2UsIGFu ZCB0aGVuIGRyYWlucworICAgIHRoZSBjb25uZWN0aW9uIHVudGlsIGEgUmVhZHlGb3JRdWVyeSBt ZXNzYWdlIGlzIHJlY2VpdmVkLgorICAgICIiIgorICAgIHJlc3AgPSBwcTMucmVjdjEoY29ubikK KworICAgIGFzc2VydCByZXNwLnR5cGUgPT0gcHEzLnR5cGVzLkF1dGhuUmVxdWVzdAorICAgIGFz c2VydCByZXNwLnBheWxvYWQudHlwZSA9PSBwcTMuYXV0aG4uT0sKKyAgICBhc3NlcnQgbm90IHJl c3AucGF5bG9hZC5ib2R5CisKKyAgICByZWNlaXZlX3VudGlsKGNvbm4sIHBxMy50eXBlcy5SZWFk eUZvclF1ZXJ5KQorCisKK2RlZiBleHBlY3RfaGFuZHNoYWtlX2ZhaWx1cmUoY29ubiwgb2F1dGhf Y3R4KToKKyAgICAiIiIKKyAgICBQZXJmb3JtcyB0aGUgT0FVVEhCRUFSRVIgU0FTTCBmYWlsdXJl ICJoYW5kc2hha2UiIGFuZCB2YWxpZGF0ZXMgdGhlIHNlcnZlcidzCisgICAgc2lkZSBvZiB0aGUg Y29udmVyc2F0aW9uLCBpbmNsdWRpbmcgdGhlIGZpbmFsIEVycm9yUmVzcG9uc2UuCisgICAgIiIi CisKKyAgICAjIFdlIGV4cGVjdCBhIGRpc2NvdmVyeSAiY2hhbGxlbmdlIiBiYWNrIGZyb20gdGhl IHNlcnZlciBiZWZvcmUgdGhlIGF1dGhuCisgICAgIyBmYWlsdXJlIG1lc3NhZ2UuCisgICAgcmVz cCA9IHBxMy5yZWN2MShjb25uKQorICAgIGFzc2VydCByZXNwLnR5cGUgPT0gcHEzLnR5cGVzLkF1 dGhuUmVxdWVzdAorCisgICAgcmVxID0gcmVzcC5wYXlsb2FkCisgICAgYXNzZXJ0IHJlcS50eXBl ID09IHBxMy5hdXRobi5TQVNMQ29udGludWUKKworICAgIGJvZHkgPSBqc29uLmxvYWRzKHJlcS5i b2R5KQorICAgIGFzc2VydCBib2R5WyJzdGF0dXMiXSA9PSAiaW52YWxpZF90b2tlbiIKKyAgICBh c3NlcnQgYm9keVsic2NvcGUiXSA9PSBvYXV0aF9jdHguc2NvcGUKKworICAgIGV4cGVjdGVkX2Nv bmZpZyA9IG9hdXRoX2N0eC5pc3N1ZXIgKyAiLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0 aW9uIgorICAgIGFzc2VydCBib2R5WyJvcGVuaWQtY29uZmlndXJhdGlvbiJdID09IGV4cGVjdGVk X2NvbmZpZworCisgICAgIyBTZW5kIHRoZSBkdW1teSByZXNwb25zZSB0byBjb21wbGV0ZSB0aGUg ZmFpbGVkIGhhbmRzaGFrZS4KKyAgICBwcTMuc2VuZChjb25uLCBwcTMudHlwZXMuUGFzc3dvcmRN ZXNzYWdlLCBiIlx4MDEiKQorICAgIHJlc3AgPSBwcTMucmVjdjEoY29ubikKKworICAgIGVyciA9 IEV4cGVjdGVkRXJyb3IoSU5WQUxJRF9BVVRIT1JJWkFUSU9OX0VSUkNPREUsICJiZWFyZXIgYXV0 aGVudGljYXRpb24gZmFpbGVkIikKKyAgICBlcnIubWF0Y2gocmVzcCkKKworCitkZWYgcmVjZWl2 ZV91bnRpbChjb25uLCB0eXBlKToKKyAgICAiIiIKKyAgICByZWNlaXZlX3VudGlsIHB1bGxzIHBh Y2tldHMgb2ZmIHRoZSBwcTMgY29ubmVjdGlvbiB1bnRpbCBhIHBhY2tldCB3aXRoIHRoZQorICAg IGRlc2lyZWQgdHlwZSBpcyBmb3VuZCwgb3IgYW4gZXJyb3IgcmVzcG9uc2UgaXMgcmVjZWl2ZWQu CisgICAgIiIiCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgcGt0ID0gcHEzLnJlY3YxKGNvbm4p CisKKyAgICAgICAgaWYgcGt0LnR5cGUgPT0gdHlwZToKKyAgICAgICAgICAgIHJldHVybiBwa3QK KyAgICAgICAgZWxpZiBwa3QudHlwZSA9PSBwcTMudHlwZXMuRXJyb3JSZXNwb25zZToKKyAgICAg ICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKKyAgICAgICAgICAgICAgICBmInJlY2VpdmVkIGVy cm9yIHJlc3BvbnNlIGZyb20gcGVlcjoge3BrdC5wYXlsb2FkLmZpZWxkcyFyfSIKKyAgICAgICAg ICAgICkKKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoInRva2VuX2xlbiIsIFsxNiwgMTAy NCwgNDA5Nl0pCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoCisgICAgImF1dGhfcHJlZml4IiwK KyAgICBbCisgICAgICAgIGIiQmVhcmVyICIsCisgICAgICAgIGIiYmVhcmVyICIsCisgICAgICAg IGIiQmVhcmVyICAgICIsCisgICAgXSwKKykKK2RlZiB0ZXN0X29hdXRoKGNvbm4sIG9hdXRoX2N0 eCwgYmVhcmVyX3Rva2VuLCBhdXRoX3ByZWZpeCwgdG9rZW5fbGVuKToKKyAgICBiZWdpbl9vYXV0 aF9oYW5kc2hha2UoY29ubiwgb2F1dGhfY3R4KQorCisgICAgIyBHZW5lcmF0ZSBvdXIgYmVhcmVy IHRva2VuIHdpdGggdGhlIGRlc2lyZWQgbGVuZ3RoLgorICAgIHRva2VuID0gYmVhcmVyX3Rva2Vu KHNpemU9dG9rZW5fbGVuKQorICAgIGF1dGggPSBhdXRoX3ByZWZpeCArIHRva2VuCisKKyAgICBz ZW5kX2luaXRpYWxfcmVzcG9uc2UoY29ubiwgYXV0aD1hdXRoKQorICAgIGV4cGVjdF9oYW5kc2hh a2Vfc3VjY2Vzcyhjb25uKQorCisgICAgIyBNYWtlIHN1cmUgdGhhdCB0aGUgc2VydmVyIGhhcyBu b3Qgc2V0IGFuIGF1dGhlbnRpY2F0ZWQgSUQuCisgICAgcHEzLnNlbmQoY29ubiwgcHEzLnR5cGVz LlF1ZXJ5LCBxdWVyeT1iIlNFTEVDVCBhdXRobl9pZCgpOyIpCisgICAgcmVzcCA9IHJlY2VpdmVf dW50aWwoY29ubiwgcHEzLnR5cGVzLkRhdGFSb3cpCisKKyAgICByb3cgPSByZXNwLnBheWxvYWQK KyAgICBhc3NlcnQgcm93LmNvbHVtbnMgPT0gW05vbmVdCisKKworQHB5dGVzdC5tYXJrLnBhcmFt ZXRyaXplKAorICAgICJ0b2tlbl92YWx1ZSIsCisgICAgWworICAgICAgICAiYWJjZHpBPT0iLAor ICAgICAgICAiMTIzNDU2TT0iLAorICAgICAgICAieC0uX34rL3giLAorICAgIF0sCispCitkZWYg dGVzdF9vYXV0aF9iZWFyZXJfY29ybmVyX2Nhc2VzKGNvbm4sIG9hdXRoX2N0eCwgYmVhcmVyX3Rv a2VuLCB0b2tlbl92YWx1ZSk6CisgICAgYmVnaW5fb2F1dGhfaGFuZHNoYWtlKGNvbm4sIG9hdXRo X2N0eCkKKworICAgIHNlbmRfaW5pdGlhbF9yZXNwb25zZShjb25uLCBiZWFyZXI9YmVhcmVyX3Rv a2VuKHRva2VuX3ZhbHVlKSkKKworICAgIGV4cGVjdF9oYW5kc2hha2Vfc3VjY2Vzcyhjb25uKQor CisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgKKyAgICAidXNlcixhdXRobl9pZCxzaG91bGRf c3VjY2VlZCIsCisgICAgWworICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBsYW1i ZGEgY3R4OiBjdHgudXNlciwKKyAgICAgICAgICAgIGxhbWJkYSBjdHg6IGN0eC51c2VyLAorICAg ICAgICAgICAgVHJ1ZSwKKyAgICAgICAgICAgIGlkPSJ2YWxpZGF0b3IgYXV0aG46IHN1Y2NlZWRz IHdoZW4gYXV0aG5faWQgPT0gdXNlcm5hbWUiLAorICAgICAgICApLAorICAgICAgICBweXRlc3Qu cGFyYW0oCisgICAgICAgICAgICBsYW1iZGEgY3R4OiBjdHgudXNlciwKKyAgICAgICAgICAgIGxh bWJkYSBjdHg6IE5vbmUsCisgICAgICAgICAgICBGYWxzZSwKKyAgICAgICAgICAgIGlkPSJ2YWxp ZGF0b3IgYXV0aG46IGZhaWxzIHdoZW4gYXV0aG5faWQgaXMgbm90IHNldCIsCisgICAgICAgICks CisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGxhbWJkYSBjdHg6IGN0eC51c2Vy LAorICAgICAgICAgICAgbGFtYmRhIGN0eDogY3R4LmF1dGh6X3VzZXIsCisgICAgICAgICAgICBG YWxzZSwKKyAgICAgICAgICAgIGlkPSJ2YWxpZGF0b3IgYXV0aG46IGZhaWxzIHdoZW4gYXV0aG5f aWQgIT0gdXNlcm5hbWUiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAg ICAgICAgICBsYW1iZGEgY3R4OiBjdHgubWFwX3VzZXIsCisgICAgICAgICAgICBsYW1iZGEgY3R4 OiBjdHgubWFwX3VzZXIgKyAiQGV4YW1wbGUuY29tIiwKKyAgICAgICAgICAgIFRydWUsCisgICAg ICAgICAgICBpZD0idmFsaWRhdG9yIHdpdGggbWFwOiBzdWNjZWVkcyB3aGVuIGF1dGhuX2lkIG1h dGNoZXMgbWFwIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAg ICAgbGFtYmRhIGN0eDogY3R4Lm1hcF91c2VyLAorICAgICAgICAgICAgbGFtYmRhIGN0eDogTm9u ZSwKKyAgICAgICAgICAgIEZhbHNlLAorICAgICAgICAgICAgaWQ9InZhbGlkYXRvciB3aXRoIG1h cDogZmFpbHMgd2hlbiBhdXRobl9pZCBpcyBub3Qgc2V0IiwKKyAgICAgICAgKSwKKyAgICAgICAg cHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgbGFtYmRhIGN0eDogY3R4Lm1hcF91c2VyLAorICAg ICAgICAgICAgbGFtYmRhIGN0eDogY3R4Lm1hcF91c2VyICsgIkBleGFtcGxlLm5ldCIsCisgICAg ICAgICAgICBGYWxzZSwKKyAgICAgICAgICAgIGlkPSJ2YWxpZGF0b3Igd2l0aCBtYXA6IGZhaWxz IHdoZW4gYXV0aG5faWQgZG9lc24ndCBtYXRjaCBtYXAiLAorICAgICAgICApLAorICAgICAgICBw eXRlc3QucGFyYW0oCisgICAgICAgICAgICBsYW1iZGEgY3R4OiBjdHguYXV0aHpfdXNlciwKKyAg ICAgICAgICAgIGxhbWJkYSBjdHg6IE5vbmUsCisgICAgICAgICAgICBUcnVlLAorICAgICAgICAg ICAgaWQ9InZhbGlkYXRvciBhdXRoejogc3VjY2VlZHMgd2l0aCBubyBhdXRobl9pZCIsCisgICAg ICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGxhbWJkYSBjdHg6IGN0 eC5hdXRoel91c2VyLAorICAgICAgICAgICAgbGFtYmRhIGN0eDogIiIsCisgICAgICAgICAgICBU cnVlLAorICAgICAgICAgICAgaWQ9InZhbGlkYXRvciBhdXRoejogc3VjY2VlZHMgd2l0aCBlbXB0 eSBhdXRobl9pZCIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAg ICAgIGxhbWJkYSBjdHg6IGN0eC5hdXRoel91c2VyLAorICAgICAgICAgICAgbGFtYmRhIGN0eDog InBvc3RncmVzIiwKKyAgICAgICAgICAgIFRydWUsCisgICAgICAgICAgICBpZD0idmFsaWRhdG9y IGF1dGh6OiBzdWNjZWVkcyB3aXRoIGJhc2ljIHVzZXJuYW1lIiwKKyAgICAgICAgKSwKKyAgICAg ICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgbGFtYmRhIGN0eDogY3R4LmF1dGh6X3VzZXIs CisgICAgICAgICAgICBsYW1iZGEgY3R4OiAibWVAZXhhbXBsZS5jb20iLAorICAgICAgICAgICAg VHJ1ZSwKKyAgICAgICAgICAgIGlkPSJ2YWxpZGF0b3IgYXV0aHo6IHN1Y2NlZWRzIHdpdGggZW1h aWwgYWRkcmVzcyIsCisgICAgICAgICksCisgICAgXSwKKykKK2RlZiB0ZXN0X29hdXRoX2F1dGhu X2lkKGNvbm4sIG9hdXRoX2N0eCwgYmVhcmVyX3Rva2VuLCB1c2VyLCBhdXRobl9pZCwgc2hvdWxk X3N1Y2NlZWQpOgorICAgIHRva2VuID0gTm9uZQorCisgICAgYXV0aG5faWQgPSBhdXRobl9pZChv YXV0aF9jdHgpCisgICAgaWYgYXV0aG5faWQgaXMgbm90IE5vbmU6CisgICAgICAgIGF1dGhuX2lk ID0gYXV0aG5faWQuZW5jb2RlKCJhc2NpaSIpCisKKyAgICAgICAgIyBBcyBhIGhhY2sgdG8gZ2V0 IHRoZSB2YWxpZGF0b3IgdG8gcmVmbGVjdCBhcmJpdHJhcnkgb3V0cHV0IGZyb20gdGhpcworICAg ICAgICAjIHRlc3QsIGVuY29kZSB0aGUgZGVzaXJlZCBvdXRwdXQgYXMgYSBiYXNlNjQgdG9rZW4u IFRoZSB2YWxpZGF0b3Igd2lsbAorICAgICAgICAjIGtleSBvbiB0aGUgbGVhZGluZyAib3V0cHV0 PSIgdG8gZGlmZmVyZW50aWF0ZSB0aGlzIGZyb20gdGhlIHJhbmRvbQorICAgICAgICAjIHRva2Vu cyBnZW5lcmF0ZWQgYnkgc2VjcmV0cy50b2tlbl91cmxzYWZlKCkuCisgICAgICAgIG91dHB1dCA9 IGIib3V0cHV0PSIgKyBhdXRobl9pZCArIGIiXG4iCisgICAgICAgIHRva2VuID0gYmFzZTY0LnVy bHNhZmVfYjY0ZW5jb2RlKG91dHB1dCkKKworICAgIHRva2VuID0gYmVhcmVyX3Rva2VuKHRva2Vu KQorICAgIHVzZXJuYW1lID0gdXNlcihvYXV0aF9jdHgpCisKKyAgICBiZWdpbl9vYXV0aF9oYW5k c2hha2UoY29ubiwgb2F1dGhfY3R4LCB1c2VyPXVzZXJuYW1lKQorICAgIHNlbmRfaW5pdGlhbF9y ZXNwb25zZShjb25uLCBiZWFyZXI9dG9rZW4pCisKKyAgICBpZiBub3Qgc2hvdWxkX3N1Y2NlZWQ6 CisgICAgICAgIGV4cGVjdF9oYW5kc2hha2VfZmFpbHVyZShjb25uLCBvYXV0aF9jdHgpCisgICAg ICAgIHJldHVybgorCisgICAgZXhwZWN0X2hhbmRzaGFrZV9zdWNjZXNzKGNvbm4pCisKKyAgICAj IENoZWNrIHRoZSByZXBvcnRlZCBhdXRobl9pZC4KKyAgICBwcTMuc2VuZChjb25uLCBwcTMudHlw ZXMuUXVlcnksIHF1ZXJ5PWIiU0VMRUNUIGF1dGhuX2lkKCk7IikKKyAgICByZXNwID0gcmVjZWl2 ZV91bnRpbChjb25uLCBwcTMudHlwZXMuRGF0YVJvdykKKworICAgIHJvdyA9IHJlc3AucGF5bG9h ZAorICAgIGFzc2VydCByb3cuY29sdW1ucyA9PSBbYXV0aG5faWRdCisKKworY2xhc3MgRXhwZWN0 ZWRFcnJvcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb2RlLCBtc2c9Tm9uZSwg ZGV0YWlsPU5vbmUpOgorICAgICAgICBzZWxmLmNvZGUgPSBjb2RlCisgICAgICAgIHNlbGYubXNn ID0gbXNnCisgICAgICAgIHNlbGYuZGV0YWlsID0gZGV0YWlsCisKKyAgICAgICAgIyBQcm90ZWN0 IGFnYWluc3QgdGhlIGZvb3RndW4gb2YgYW4gYWNjaWRlbnRhbCBlbXB0eSBzdHJpbmcsIHdoaWNo IHdpbGwKKyAgICAgICAgIyAibWF0Y2giIGFueXRoaW5nLiBJZiB5b3UgZG9uJ3Qgd2FudCB0byBt YXRjaCBtZXNzYWdlIG9yIGRldGFpbCwganVzdAorICAgICAgICAjIGRvbid0IHBhc3MgdGhlbS4K KyAgICAgICAgaWYgc2VsZi5tc2cgPT0gIiI6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9y KCJtc2cgbXVzdCBiZSBub24tZW1wdHkgb3IgTm9uZSIpCisgICAgICAgIGlmIHNlbGYuZGV0YWls ID09ICIiOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZGV0YWlsIG11c3QgYmUgbm9u LWVtcHR5IG9yIE5vbmUiKQorCisgICAgZGVmIF9nZXRmaWVsZChzZWxmLCByZXNwLCB0eXBlKToK KyAgICAgICAgIiIiCisgICAgICAgIFNlYXJjaGVzIGFuIEVycm9yUmVzcG9uc2UgZm9yIGEgc2lu Z2xlIGZpZWxkIG9mIHRoZSBnaXZlbiB0eXBlIChlLmcuCisgICAgICAgICJNIiwgIkMiLCAiRCIp IGFuZCByZXR1cm5zIGl0cyB2YWx1ZS4gQXNzZXJ0cyBpZiBpdCBkb2Vzbid0IGZpbmQgZXhhY3Rs eQorICAgICAgICBvbmUgZmllbGQuCisgICAgICAgICIiIgorICAgICAgICBwcmVmaXggPSB0eXBl LmVuY29kZSgiYXNjaWkiKQorICAgICAgICBmaWVsZHMgPSBbZiBmb3IgZiBpbiByZXNwLnBheWxv YWQuZmllbGRzIGlmIGYuc3RhcnRzd2l0aChwcmVmaXgpXQorCisgICAgICAgIGFzc2VydCBsZW4o ZmllbGRzKSA9PSAxCisgICAgICAgIHJldHVybiBmaWVsZHNbMF1bMTpdICAjIHN0cmlwIG9mZiB0 aGUgdHlwZSBieXRlCisKKyAgICBkZWYgbWF0Y2goc2VsZiwgcmVzcCk6CisgICAgICAgICIiIgor ICAgICAgICBDaGVja3MgdGhhdCB0aGUgZ2l2ZW4gcmVzcG9uc2UgbWF0Y2hlcyB0aGUgZXhwZWN0 ZWQgY29kZSwgbWVzc2FnZSwgYW5kCisgICAgICAgIGRldGFpbCAoaWYgZ2l2ZW4pLiBUaGUgZXJy b3IgY29kZSBtdXN0IG1hdGNoIGV4YWN0bHkuIFRoZSBleHBlY3RlZAorICAgICAgICBtZXNzYWdl IGFuZCBkZXRhaWwgbXVzdCBiZSBjb250YWluZWQgd2l0aGluIHRoZSBhY3R1YWwgc3RyaW5ncy4K KyAgICAgICAgIiIiCisgICAgICAgIGFzc2VydCByZXNwLnR5cGUgPT0gcHEzLnR5cGVzLkVycm9y UmVzcG9uc2UKKworICAgICAgICBjb2RlID0gc2VsZi5fZ2V0ZmllbGQocmVzcCwgIkMiKQorICAg ICAgICBhc3NlcnQgY29kZSA9PSBzZWxmLmNvZGUKKworICAgICAgICBpZiBzZWxmLm1zZzoKKyAg ICAgICAgICAgIG1zZyA9IHNlbGYuX2dldGZpZWxkKHJlc3AsICJNIikKKyAgICAgICAgICAgIGV4 cGVjdGVkID0gc2VsZi5tc2cuZW5jb2RlKCJ1dGYtOCIpCisgICAgICAgICAgICBhc3NlcnQgZXhw ZWN0ZWQgaW4gbXNnCisKKyAgICAgICAgaWYgc2VsZi5kZXRhaWw6CisgICAgICAgICAgICBkZXRh aWwgPSBzZWxmLl9nZXRmaWVsZChyZXNwLCAiRCIpCisgICAgICAgICAgICBleHBlY3RlZCA9IHNl bGYuZGV0YWlsLmVuY29kZSgidXRmLTgiKQorICAgICAgICAgICAgYXNzZXJ0IGV4cGVjdGVkIGlu IGRldGFpbAorCisKK2RlZiB0ZXN0X29hdXRoX3JlamVjdGVkX2JlYXJlcihjb25uLCBvYXV0aF9j dHgsIGJlYXJlcl90b2tlbik6CisgICAgIyBHZW5lcmF0ZSBhIG5ldyBiZWFyZXIgdG9rZW4sIHdo aWNoIHdlIHdpbGwgcHJvY2VlZCBub3QgdG8gdXNlLgorICAgIF8gPSBiZWFyZXJfdG9rZW4oKQor CisgICAgYmVnaW5fb2F1dGhfaGFuZHNoYWtlKGNvbm4sIG9hdXRoX2N0eCkKKworICAgICMgU2Vu ZCBhIGJlYXJlciB0b2tlbiB0aGF0IGRvZXNuJ3QgbWF0Y2ggd2hhdCB0aGUgdmFsaWRhdG9yIGV4 cGVjdHMuIEl0CisgICAgIyBzaG91bGQgZmFpbCB0aGUgY29ubmVjdGlvbi4KKyAgICBzZW5kX2lu aXRpYWxfcmVzcG9uc2UoY29ubiwgYmVhcmVyPWIieHh4eHh4IikKKworICAgIGV4cGVjdF9oYW5k c2hha2VfZmFpbHVyZShjb25uLCBvYXV0aF9jdHgpCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRy aXplKAorICAgICJiYWRfYmVhcmVyIiwKKyAgICBbCisgICAgICAgIGIiQmVhcmVyICAgICIsCisg ICAgICAgIGIiQmVhcmVyIGE9PT1iIiwKKyAgICAgICAgYiJCZWFyZXIgaGVsbG8hIiwKKyAgICAg ICAgYiJCZWFyZXIgbWVAZXhhbXBsZS5jb20iLAorICAgICAgICBiJ09BdXRoIHJlYWxtPSJFeGFt cGxlIicsCisgICAgICAgIGIiIiwKKyAgICBdLAorKQorZGVmIHRlc3Rfb2F1dGhfaW52YWxpZF9i ZWFyZXIoY29ubiwgb2F1dGhfY3R4LCBiZWFyZXJfdG9rZW4sIGJhZF9iZWFyZXIpOgorICAgICMg VGVsbCB0aGUgdmFsaWRhdG9yIHRvIGFjY2VwdCBhbnkgdG9rZW4uIFRoaXMgZW5zdXJlcyB0aGF0 IHRoZSBpbnZhbGlkCisgICAgIyBiZWFyZXIgdG9rZW5zIGFyZSByZWplY3RlZCBiZWZvcmUgdGhl IHZhbGlkYXRpb24gc3RlcC4KKyAgICBfID0gYmVhcmVyX3Rva2VuKGFjY2VwdF9hbnk9VHJ1ZSkK KworICAgIGJlZ2luX29hdXRoX2hhbmRzaGFrZShjb25uLCBvYXV0aF9jdHgpCisgICAgc2VuZF9p bml0aWFsX3Jlc3BvbnNlKGNvbm4sIGF1dGg9YmFkX2JlYXJlcikKKworICAgIGV4cGVjdF9oYW5k c2hha2VfZmFpbHVyZShjb25uLCBvYXV0aF9jdHgpCisKKworQHB5dGVzdC5tYXJrLnNsb3cKK0Bw eXRlc3QubWFyay5wYXJhbWV0cml6ZSgKKyAgICAicmVzcF90eXBlLHJlc3AsZXJyIiwKKyAgICBb CisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICBO b25lLAorICAgICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgIG1hcmtzPXB5dGVzdC5tYXJrLnNs b3csCisgICAgICAgICAgICBpZD0ibm8gcmVzcG9uc2UgKGV4cGVjdCB0aW1lb3V0KSIsCisgICAg ICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIHBxMy50eXBlcy5QYXNz d29yZE1lc3NhZ2UsCisgICAgICAgICAgICBiImhlbGxvIiwKKyAgICAgICAgICAgIEV4cGVjdGVk RXJyb3IoCisgICAgICAgICAgICAgICAgUFJPVE9DT0xfVklPTEFUSU9OX0VSUkNPREUsCisgICAg ICAgICAgICAgICAgIm1hbGZvcm1lZCBPQVVUSEJFQVJFUiBtZXNzYWdlIiwKKyAgICAgICAgICAg ICAgICAiZGlkIG5vdCBzZW5kIGEga3ZzZXAgcmVzcG9uc2UiLAorICAgICAgICAgICAgKSwKKyAg ICAgICAgICAgIGlkPSJiYWQgZHVtbXkgcmVzcG9uc2UiLAorICAgICAgICApLAorICAgICAgICBw eXRlc3QucGFyYW0oCisgICAgICAgICAgICBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlLAorICAg ICAgICAgICAgYiJceDAxXHgwMSIsCisgICAgICAgICAgICBFeHBlY3RlZEVycm9yKAorICAgICAg ICAgICAgICAgIFBST1RPQ09MX1ZJT0xBVElPTl9FUlJDT0RFLAorICAgICAgICAgICAgICAgICJt YWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIsCisgICAgICAgICAgICAgICAgImRpZCBub3Qg c2VuZCBhIGt2c2VwIHJlc3BvbnNlIiwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBpZD0i bXVsdGlwbGUga3ZzZXBzIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAg ICAgICAgICAgcHEzLnR5cGVzLlF1ZXJ5LAorICAgICAgICAgICAgZGljdChxdWVyeT1iIiIpLAor ICAgICAgICAgICAgRXhwZWN0ZWRFcnJvcihQUk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSwgImV4 cGVjdGVkIFNBU0wgcmVzcG9uc2UiKSwKKyAgICAgICAgICAgIGlkPSJiYWQgcmVzcG9uc2UgbWVz c2FnZSB0eXBlIiwKKyAgICAgICAgKSwKKyAgICBdLAorKQorZGVmIHRlc3Rfb2F1dGhfYmFkX3Jl c3BvbnNlX3RvX2Vycm9yX2NoYWxsZW5nZShjb25uLCBvYXV0aF9jdHgsIHJlc3BfdHlwZSwgcmVz cCwgZXJyKToKKyAgICBiZWdpbl9vYXV0aF9oYW5kc2hha2UoY29ubiwgb2F1dGhfY3R4KQorCisg ICAgIyBTZW5kIGFuIGVtcHR5IGF1dGggaW5pdGlhbCByZXNwb25zZSwgd2hpY2ggd2lsbCBmb3Jj ZSBhbiBhdXRobiBmYWlsdXJlLgorICAgIHNlbmRfaW5pdGlhbF9yZXNwb25zZShjb25uLCBhdXRo PWIiIikKKworICAgICMgV2UgZXhwZWN0IGEgZGlzY292ZXJ5ICJjaGFsbGVuZ2UiIGJhY2sgZnJv bSB0aGUgc2VydmVyIGJlZm9yZSB0aGUgYXV0aG4KKyAgICAjIGZhaWx1cmUgbWVzc2FnZS4KKyAg ICBwa3QgPSBwcTMucmVjdjEoY29ubikKKyAgICBhc3NlcnQgcGt0LnR5cGUgPT0gcHEzLnR5cGVz LkF1dGhuUmVxdWVzdAorCisgICAgcmVxID0gcGt0LnBheWxvYWQKKyAgICBhc3NlcnQgcmVxLnR5 cGUgPT0gcHEzLmF1dGhuLlNBU0xDb250aW51ZQorCisgICAgYm9keSA9IGpzb24ubG9hZHMocmVx LmJvZHkpCisgICAgYXNzZXJ0IGJvZHlbInN0YXR1cyJdID09ICJpbnZhbGlkX3Rva2VuIgorCisg ICAgaWYgcmVzcF90eXBlIGlzIE5vbmU6CisgICAgICAgICMgRG8gbm90IHNlbmQgdGhlIGR1bW15 IHJlc3BvbnNlLiBXZSBzaG91bGQgdGltZSBvdXQgYW5kIG5vdCBnZXQgYQorICAgICAgICAjIHJl c3BvbnNlIGZyb20gdGhlIHNlcnZlci4KKyAgICAgICAgd2l0aCBweXRlc3QucmFpc2VzKHNvY2tl dC50aW1lb3V0KToKKyAgICAgICAgICAgIGNvbm4ucmVhZCgxKQorCisgICAgICAgICMgRG9uZSB3 aXRoIHRoZSB0ZXN0LgorICAgICAgICByZXR1cm4KKworICAgICMgU2VuZCB0aGUgYmFkIHJlc3Bv bnNlLgorICAgIHBxMy5zZW5kKGNvbm4sIHJlc3BfdHlwZSwgcmVzcCkKKworICAgICMgTWFrZSBz dXJlIHRoZSBzZXJ2ZXIgZmFpbHMgdGhlIGNvbm5lY3Rpb24gY29ycmVjdGx5LgorICAgIHBrdCA9 IHBxMy5yZWN2MShjb25uKQorICAgIGVyci5tYXRjaChwa3QpCisKKworQHB5dGVzdC5tYXJrLnBh cmFtZXRyaXplKAorICAgICJ0eXBlLHBheWxvYWQsZXJyIiwKKyAgICBbCisgICAgICAgIHB5dGVz dC5wYXJhbSgKKyAgICAgICAgICAgIHBxMy50eXBlcy5FcnJvclJlc3BvbnNlLAorICAgICAgICAg ICAgZGljdChmaWVsZHM9W2IiIl0pLAorICAgICAgICAgICAgRXhwZWN0ZWRFcnJvcihQUk9UT0NP TF9WSU9MQVRJT05fRVJSQ09ERSwgImV4cGVjdGVkIFNBU0wgcmVzcG9uc2UiKSwKKyAgICAgICAg ICAgIGlkPSJlcnJvciByZXNwb25zZSBpbiBpbml0aWFsIG1lc3NhZ2UiLAorICAgICAgICApLAor ICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBwcTMudHlwZXMuUGFzc3dvcmRNZXNz YWdlLAorICAgICAgICAgICAgYiJ4IiAqIChNQVhfU0FTTF9NRVNTQUdFX0xFTkdUSCArIDEpLAor ICAgICAgICAgICAgRXhwZWN0ZWRFcnJvcigKKyAgICAgICAgICAgICAgICBJTlZBTElEX0FVVEhP UklaQVRJT05fRVJSQ09ERSwgImJlYXJlciBhdXRoZW50aWNhdGlvbiBmYWlsZWQiCisgICAgICAg ICAgICApLAorICAgICAgICAgICAgaWQ9Im92ZXJsb25nIGluaXRpYWwgcmVzcG9uc2UgZGF0YSIs CisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIHBxMy50eXBl cy5QYXNzd29yZE1lc3NhZ2UsCisgICAgICAgICAgICBwcTMuU0FTTEluaXRpYWxSZXNwb25zZS5i dWlsZChkaWN0KG5hbWU9YiJTQ1JBTS1TSEEtMjU2IikpLAorICAgICAgICAgICAgRXhwZWN0ZWRF cnJvcigKKyAgICAgICAgICAgICAgICBQUk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSwgImludmFs aWQgU0FTTCBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc20iCisgICAgICAgICAgICApLAorICAgICAg ICAgICAgaWQ9ImJhZCBTQVNMIG1lY2hhbmlzbSBzZWxlY3Rpb24iLAorICAgICAgICApLAorICAg ICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdl LAorICAgICAgICAgICAgcHEzLlNBU0xJbml0aWFsUmVzcG9uc2UuYnVpbGQoZGljdChuYW1lPWIi T0FVVEhCRUFSRVIiLCBsZW49MiwgZGF0YT1iIngiKSksCisgICAgICAgICAgICBFeHBlY3RlZEVy cm9yKFBST1RPQ09MX1ZJT0xBVElPTl9FUlJDT0RFLCAiaW5zdWZmaWNpZW50IGRhdGEiKSwKKyAg ICAgICAgICAgIGlkPSJTQVNMIGRhdGEgdW5kZXJmbG93IiwKKyAgICAgICAgKSwKKyAgICAgICAg cHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgcHEzLnR5cGVzLlBhc3N3b3JkTWVzc2FnZSwKKyAg ICAgICAgICAgIHBxMy5TQVNMSW5pdGlhbFJlc3BvbnNlLmJ1aWxkKGRpY3QobmFtZT1iIk9BVVRI QkVBUkVSIiwgbGVuPTAsIGRhdGE9YiJ4IikpLAorICAgICAgICAgICAgRXhwZWN0ZWRFcnJvcihQ Uk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSwgImludmFsaWQgbWVzc2FnZSBmb3JtYXQiKSwKKyAg ICAgICAgICAgIGlkPSJTQVNMIGRhdGEgb3ZlcmZsb3ciLAorICAgICAgICApLAorICAgICAgICBw eXRlc3QucGFyYW0oCisgICAgICAgICAgICBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlLAorICAg ICAgICAgICAgcHEzLlNBU0xJbml0aWFsUmVzcG9uc2UuYnVpbGQoZGljdChuYW1lPWIiT0FVVEhC RUFSRVIiLCBkYXRhPWIiIikpLAorICAgICAgICAgICAgRXhwZWN0ZWRFcnJvcigKKyAgICAgICAg ICAgICAgICBQUk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSwKKyAgICAgICAgICAgICAgICAibWFs Zm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiLAorICAgICAgICAgICAgICAgICJtZXNzYWdlIGlz IGVtcHR5IiwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBpZD0iZW1wdHkiLAorICAgICAg ICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBwcTMudHlwZXMuUGFzc3dv cmRNZXNzYWdlLAorICAgICAgICAgICAgcHEzLlNBU0xJbml0aWFsUmVzcG9uc2UuYnVpbGQoCisg ICAgICAgICAgICAgICAgZGljdChuYW1lPWIiT0FVVEhCRUFSRVIiLCBkYXRhPWIibiwsXHgwMWF1 dGg9XHgwMVx4MDFcMCIpCisgICAgICAgICAgICApLAorICAgICAgICAgICAgRXhwZWN0ZWRFcnJv cigKKyAgICAgICAgICAgICAgICBQUk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSwKKyAgICAgICAg ICAgICAgICAibWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiLAorICAgICAgICAgICAgICAg ICJsZW5ndGggZG9lcyBub3QgbWF0Y2ggaW5wdXQgbGVuZ3RoIiwKKyAgICAgICAgICAgICksCisg ICAgICAgICAgICBpZD0iY29udGFpbnMgbnVsbCBieXRlIiwKKyAgICAgICAgKSwKKyAgICAgICAg cHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgcHEzLnR5cGVzLlBhc3N3b3JkTWVzc2FnZSwKKyAg ICAgICAgICAgIHBxMy5TQVNMSW5pdGlhbFJlc3BvbnNlLmJ1aWxkKGRpY3QobmFtZT1iIk9BVVRI QkVBUkVSIiwgZGF0YT1iIlx4MDEiKSksCisgICAgICAgICAgICBFeHBlY3RlZEVycm9yKAorICAg ICAgICAgICAgICAgIFBST1RPQ09MX1ZJT0xBVElPTl9FUlJDT0RFLAorICAgICAgICAgICAgICAg ICJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIsCisgICAgICAgICAgICAgICAgIlVuZXhw ZWN0ZWQgY2hhbm5lbC1iaW5kaW5nIGZsYWciLCAgIyBYWFggdGhpcyBpcyBhIGJpdCBzdHJhbmdl CisgICAgICAgICAgICApLAorICAgICAgICAgICAgaWQ9ImluaXRpYWwgZXJyb3IgcmVzcG9uc2Ui LAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBwcTMudHlw ZXMuUGFzc3dvcmRNZXNzYWdlLAorICAgICAgICAgICAgcHEzLlNBU0xJbml0aWFsUmVzcG9uc2Uu YnVpbGQoCisgICAgICAgICAgICAgICAgZGljdChuYW1lPWIiT0FVVEhCRUFSRVIiLCBkYXRhPWIi cD10bHMtc2VydmVyLWVuZC1wb2ludCwsXHgwMSIpCisgICAgICAgICAgICApLAorICAgICAgICAg ICAgRXhwZWN0ZWRFcnJvcigKKyAgICAgICAgICAgICAgICBQUk9UT0NPTF9WSU9MQVRJT05fRVJS Q09ERSwKKyAgICAgICAgICAgICAgICAibWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiLAor ICAgICAgICAgICAgICAgICJzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBjaGFubmVsIGJpbmRpbmci LAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIGlkPSJ1c2VzIGNoYW5uZWwgYmluZGluZyIs CisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIHBxMy50eXBl cy5QYXNzd29yZE1lc3NhZ2UsCisgICAgICAgICAgICBwcTMuU0FTTEluaXRpYWxSZXNwb25zZS5i dWlsZChkaWN0KG5hbWU9YiJPQVVUSEJFQVJFUiIsIGRhdGE9YiJ4LCxceDAxIikpLAorICAgICAg ICAgICAgRXhwZWN0ZWRFcnJvcigKKyAgICAgICAgICAgICAgICBQUk9UT0NPTF9WSU9MQVRJT05f RVJSQ09ERSwKKyAgICAgICAgICAgICAgICAibWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2Ui LAorICAgICAgICAgICAgICAgICJVbmV4cGVjdGVkIGNoYW5uZWwtYmluZGluZyBmbGFnIiwKKyAg ICAgICAgICAgICksCisgICAgICAgICAgICBpZD0iaW52YWxpZCBjaGFubmVsIGJpbmRpbmcgc3Bl Y2lmaWVyIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAg cHEzLnR5cGVzLlBhc3N3b3JkTWVzc2FnZSwKKyAgICAgICAgICAgIHBxMy5TQVNMSW5pdGlhbFJl c3BvbnNlLmJ1aWxkKGRpY3QobmFtZT1iIk9BVVRIQkVBUkVSIiwgZGF0YT1iInkiKSksCisgICAg ICAgICAgICBFeHBlY3RlZEVycm9yKAorICAgICAgICAgICAgICAgIFBST1RPQ09MX1ZJT0xBVElP Tl9FUlJDT0RFLAorICAgICAgICAgICAgICAgICJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2Fn ZSIsCisgICAgICAgICAgICAgICAgIkNvbW1hIGV4cGVjdGVkIiwKKyAgICAgICAgICAgICksCisg ICAgICAgICAgICBpZD0iYmFkIEdTMiBoZWFkZXI6IG1pc3NpbmcgY2hhbm5lbCBiaW5kaW5nIHRl cm1pbmF0b3IiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAg ICBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlLAorICAgICAgICAgICAgcHEzLlNBU0xJbml0aWFs UmVzcG9uc2UuYnVpbGQoZGljdChuYW1lPWIiT0FVVEhCRUFSRVIiLCBkYXRhPWIieSxhIikpLAor ICAgICAgICAgICAgRXhwZWN0ZWRFcnJvcigKKyAgICAgICAgICAgICAgICBGRUFUVVJFX05PVF9T VVBQT1JURURfRVJSQ09ERSwKKyAgICAgICAgICAgICAgICAiY2xpZW50IHVzZXMgYXV0aG9yaXph dGlvbiBpZGVudGl0eSIsCisgICAgICAgICAgICApLAorICAgICAgICAgICAgaWQ9ImJhZCBHUzIg aGVhZGVyOiBhdXRoemlkIGluIHVzZSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJh bSgKKyAgICAgICAgICAgIHBxMy50eXBlcy5QYXNzd29yZE1lc3NhZ2UsCisgICAgICAgICAgICBw cTMuU0FTTEluaXRpYWxSZXNwb25zZS5idWlsZChkaWN0KG5hbWU9YiJPQVVUSEJFQVJFUiIsIGRh dGE9YiJ5LGIsIikpLAorICAgICAgICAgICAgRXhwZWN0ZWRFcnJvcigKKyAgICAgICAgICAgICAg ICBQUk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSwKKyAgICAgICAgICAgICAgICAibWFsZm9ybWVk IE9BVVRIQkVBUkVSIG1lc3NhZ2UiLAorICAgICAgICAgICAgICAgICJVbmV4cGVjdGVkIGF0dHJp YnV0ZSIsCisgICAgICAgICAgICApLAorICAgICAgICAgICAgaWQ9ImJhZCBHUzIgaGVhZGVyOiBl eHRyYSBhdHRyaWJ1dGUiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAg ICAgICAgICBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlLAorICAgICAgICAgICAgcHEzLlNBU0xJ bml0aWFsUmVzcG9uc2UuYnVpbGQoZGljdChuYW1lPWIiT0FVVEhCRUFSRVIiLCBkYXRhPWIieSwi KSksCisgICAgICAgICAgICBFeHBlY3RlZEVycm9yKAorICAgICAgICAgICAgICAgIFBST1RPQ09M X1ZJT0xBVElPTl9FUlJDT0RFLAorICAgICAgICAgICAgICAgICJtYWxmb3JtZWQgT0FVVEhCRUFS RVIgbWVzc2FnZSIsCisgICAgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgYXR0cmlidXRlIDB4MDAi LCAgIyBYWFggdGhpcyBpcyBhIGJpdCBzdHJhbmdlCisgICAgICAgICAgICApLAorICAgICAgICAg ICAgaWQ9ImJhZCBHUzIgaGVhZGVyOiBtaXNzaW5nIGF1dGh6aWQgdGVybWluYXRvciIsCisgICAg ICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIHBxMy50eXBlcy5QYXNz d29yZE1lc3NhZ2UsCisgICAgICAgICAgICBwcTMuU0FTTEluaXRpYWxSZXNwb25zZS5idWlsZChk aWN0KG5hbWU9YiJPQVVUSEJFQVJFUiIsIGRhdGE9YiJ5LCwiKSksCisgICAgICAgICAgICBFeHBl Y3RlZEVycm9yKAorICAgICAgICAgICAgICAgIFBST1RPQ09MX1ZJT0xBVElPTl9FUlJDT0RFLAor ICAgICAgICAgICAgICAgICJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIsCisgICAgICAg ICAgICAgICAgIktleS12YWx1ZSBzZXBhcmF0b3IgZXhwZWN0ZWQiLAorICAgICAgICAgICAgKSwK KyAgICAgICAgICAgIGlkPSJtaXNzaW5nIGluaXRpYWwga3ZzZXAiLAorICAgICAgICApLAorICAg ICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdl LAorICAgICAgICAgICAgcHEzLlNBU0xJbml0aWFsUmVzcG9uc2UuYnVpbGQoZGljdChuYW1lPWIi T0FVVEhCRUFSRVIiLCBkYXRhPWIieSwsIikpLAorICAgICAgICAgICAgRXhwZWN0ZWRFcnJvcigK KyAgICAgICAgICAgICAgICBQUk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSwKKyAgICAgICAgICAg ICAgICAibWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiLAorICAgICAgICAgICAgICAgICJL ZXktdmFsdWUgc2VwYXJhdG9yIGV4cGVjdGVkIiwKKyAgICAgICAgICAgICksCisgICAgICAgICAg ICBpZD0ibWlzc2luZyBpbml0aWFsIGt2c2VwIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0 LnBhcmFtKAorICAgICAgICAgICAgcHEzLnR5cGVzLlBhc3N3b3JkTWVzc2FnZSwKKyAgICAgICAg ICAgIHBxMy5TQVNMSW5pdGlhbFJlc3BvbnNlLmJ1aWxkKAorICAgICAgICAgICAgICAgIGRpY3Qo bmFtZT1iIk9BVVRIQkVBUkVSIiwgZGF0YT1iInksLFx4MDFceDAxIikKKyAgICAgICAgICAgICks CisgICAgICAgICAgICBFeHBlY3RlZEVycm9yKAorICAgICAgICAgICAgICAgIFBST1RPQ09MX1ZJ T0xBVElPTl9FUlJDT0RFLAorICAgICAgICAgICAgICAgICJtYWxmb3JtZWQgT0FVVEhCRUFSRVIg bWVzc2FnZSIsCisgICAgICAgICAgICAgICAgImRvZXMgbm90IGNvbnRhaW4gYW4gYXV0aCB2YWx1 ZSIsCisgICAgICAgICAgICApLAorICAgICAgICAgICAgaWQ9Im1pc3NpbmcgYXV0aCB2YWx1ZTog ZW1wdHkga2V5LXZhbHVlIGxpc3QiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0o CisgICAgICAgICAgICBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlLAorICAgICAgICAgICAgcHEz LlNBU0xJbml0aWFsUmVzcG9uc2UuYnVpbGQoCisgICAgICAgICAgICAgICAgZGljdChuYW1lPWIi T0FVVEhCRUFSRVIiLCBkYXRhPWIieSwsXHgwMWhvc3Q9ZXhhbXBsZS5jb21ceDAxXHgwMSIpCisg ICAgICAgICAgICApLAorICAgICAgICAgICAgRXhwZWN0ZWRFcnJvcigKKyAgICAgICAgICAgICAg ICBQUk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSwKKyAgICAgICAgICAgICAgICAibWFsZm9ybWVk IE9BVVRIQkVBUkVSIG1lc3NhZ2UiLAorICAgICAgICAgICAgICAgICJkb2VzIG5vdCBjb250YWlu IGFuIGF1dGggdmFsdWUiLAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIGlkPSJtaXNzaW5n IGF1dGggdmFsdWU6IG90aGVyIGtleXMgcHJlc2VudCIsCisgICAgICAgICksCisgICAgICAgIHB5 dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIHBxMy50eXBlcy5QYXNzd29yZE1lc3NhZ2UsCisgICAg ICAgICAgICBwcTMuU0FTTEluaXRpYWxSZXNwb25zZS5idWlsZCgKKyAgICAgICAgICAgICAgICBk aWN0KG5hbWU9YiJPQVVUSEJFQVJFUiIsIGRhdGE9YiJ5LCxceDAxaG9zdD1leGFtcGxlLmNvbSIp CisgICAgICAgICAgICApLAorICAgICAgICAgICAgRXhwZWN0ZWRFcnJvcigKKyAgICAgICAgICAg ICAgICBQUk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSwKKyAgICAgICAgICAgICAgICAibWFsZm9y bWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiLAorICAgICAgICAgICAgICAgICJ1bnRlcm1pbmF0ZWQg a2V5L3ZhbHVlIHBhaXIiLAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIGlkPSJtaXNzaW5n IHZhbHVlIHRlcm1pbmF0b3IiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisg ICAgICAgICAgICBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlLAorICAgICAgICAgICAgcHEzLlNB U0xJbml0aWFsUmVzcG9uc2UuYnVpbGQoZGljdChuYW1lPWIiT0FVVEhCRUFSRVIiLCBkYXRhPWIi eSwsXHgwMSIpKSwKKyAgICAgICAgICAgIEV4cGVjdGVkRXJyb3IoCisgICAgICAgICAgICAgICAg UFJPVE9DT0xfVklPTEFUSU9OX0VSUkNPREUsCisgICAgICAgICAgICAgICAgIm1hbGZvcm1lZCBP QVVUSEJFQVJFUiBtZXNzYWdlIiwKKyAgICAgICAgICAgICAgICAiZGlkIG5vdCBjb250YWluIGEg ZmluYWwgdGVybWluYXRvciIsCisgICAgICAgICAgICApLAorICAgICAgICAgICAgaWQ9Im1pc3Np bmcgbGlzdCB0ZXJtaW5hdG9yOiBlbXB0eSBsaXN0IiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0 ZXN0LnBhcmFtKAorICAgICAgICAgICAgcHEzLnR5cGVzLlBhc3N3b3JkTWVzc2FnZSwKKyAgICAg ICAgICAgIHBxMy5TQVNMSW5pdGlhbFJlc3BvbnNlLmJ1aWxkKAorICAgICAgICAgICAgICAgIGRp Y3QobmFtZT1iIk9BVVRIQkVBUkVSIiwgZGF0YT1iInksLFx4MDFhdXRoPUJlYXJlciAwXHgwMSIp CisgICAgICAgICAgICApLAorICAgICAgICAgICAgRXhwZWN0ZWRFcnJvcigKKyAgICAgICAgICAg ICAgICBQUk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSwKKyAgICAgICAgICAgICAgICAibWFsZm9y bWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiLAorICAgICAgICAgICAgICAgICJkaWQgbm90IGNvbnRh aW4gYSBmaW5hbCB0ZXJtaW5hdG9yIiwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBpZD0i bWlzc2luZyBsaXN0IHRlcm1pbmF0b3I6IHdpdGggYXV0aCB2YWx1ZSIsCisgICAgICAgICksCisg ICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIHBxMy50eXBlcy5QYXNzd29yZE1lc3Nh Z2UsCisgICAgICAgICAgICBwcTMuU0FTTEluaXRpYWxSZXNwb25zZS5idWlsZCgKKyAgICAgICAg ICAgICAgICBkaWN0KG5hbWU9YiJPQVVUSEJFQVJFUiIsIGRhdGE9YiJ5LCxceDAxYXV0aD1CZWFy ZXIgMFx4MDFceDAxYmxhaCIpCisgICAgICAgICAgICApLAorICAgICAgICAgICAgRXhwZWN0ZWRF cnJvcigKKyAgICAgICAgICAgICAgICBQUk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSwKKyAgICAg ICAgICAgICAgICAibWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiLAorICAgICAgICAgICAg ICAgICJhZGRpdGlvbmFsIGRhdGEgYWZ0ZXIgdGhlIGZpbmFsIHRlcm1pbmF0b3IiLAorICAgICAg ICAgICAgKSwKKyAgICAgICAgICAgIGlkPSJhZGRpdGlvbmFsIGtleSBhZnRlciB0ZXJtaW5hdG9y IiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgcHEzLnR5 cGVzLlBhc3N3b3JkTWVzc2FnZSwKKyAgICAgICAgICAgIHBxMy5TQVNMSW5pdGlhbFJlc3BvbnNl LmJ1aWxkKAorICAgICAgICAgICAgICAgIGRpY3QobmFtZT1iIk9BVVRIQkVBUkVSIiwgZGF0YT1i InksLFx4MDFrZXlceDAxXHgwMSIpCisgICAgICAgICAgICApLAorICAgICAgICAgICAgRXhwZWN0 ZWRFcnJvcigKKyAgICAgICAgICAgICAgICBQUk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSwKKyAg ICAgICAgICAgICAgICAibWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiLAorICAgICAgICAg ICAgICAgICJrZXkgd2l0aG91dCBhIHZhbHVlIiwKKyAgICAgICAgICAgICksCisgICAgICAgICAg ICBpZD0ia2V5IHdpdGhvdXQgdmFsdWUiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFy YW0oCisgICAgICAgICAgICBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlLAorICAgICAgICAgICAg cHEzLlNBU0xJbml0aWFsUmVzcG9uc2UuYnVpbGQoCisgICAgICAgICAgICAgICAgZGljdCgKKyAg ICAgICAgICAgICAgICAgICAgbmFtZT1iIk9BVVRIQkVBUkVSIiwKKyAgICAgICAgICAgICAgICAg ICAgZGF0YT1iInksLFx4MDFhdXRoPUJlYXJlciAwXHgwMWF1dGg9QmVhcmVyIDFceDAxXHgwMSIs CisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIEV4cGVjdGVk RXJyb3IoCisgICAgICAgICAgICAgICAgUFJPVE9DT0xfVklPTEFUSU9OX0VSUkNPREUsCisgICAg ICAgICAgICAgICAgIm1hbGZvcm1lZCBPQVVUSEJFQVJFUiBtZXNzYWdlIiwKKyAgICAgICAgICAg ICAgICAiY29udGFpbnMgbXVsdGlwbGUgYXV0aCB2YWx1ZXMiLAorICAgICAgICAgICAgKSwKKyAg ICAgICAgICAgIGlkPSJtdWx0aXBsZSBhdXRoIHZhbHVlcyIsCisgICAgICAgICksCisgICAgXSwK KykKK2RlZiB0ZXN0X29hdXRoX2JhZF9pbml0aWFsX3Jlc3BvbnNlKGNvbm4sIG9hdXRoX2N0eCwg dHlwZSwgcGF5bG9hZCwgZXJyKToKKyAgICBiZWdpbl9vYXV0aF9oYW5kc2hha2UoY29ubiwgb2F1 dGhfY3R4KQorCisgICAgIyBUaGUgc2VydmVyIGV4cGVjdHMgYSBTQVNMIHJlc3BvbnNlOyBnaXZl IGl0IHNvbWV0aGluZyBlbHNlIGluc3RlYWQuCisgICAgaWYgbm90IGlzaW5zdGFuY2UocGF5bG9h ZCwgZGljdCk6CisgICAgICAgIHBheWxvYWQgPSBkaWN0KHBheWxvYWRfZGF0YT1wYXlsb2FkKQor ICAgIHBxMy5zZW5kKGNvbm4sIHR5cGUsICoqcGF5bG9hZCkKKworICAgIHJlc3AgPSBwcTMucmVj djEoY29ubikKKyAgICBlcnIubWF0Y2gocmVzcCkKKworCitkZWYgdGVzdF9vYXV0aF9lbXB0eV9p bml0aWFsX3Jlc3BvbnNlKGNvbm4sIG9hdXRoX2N0eCwgYmVhcmVyX3Rva2VuKToKKyAgICBiZWdp bl9vYXV0aF9oYW5kc2hha2UoY29ubiwgb2F1dGhfY3R4KQorCisgICAgIyBTZW5kIGFuIGluaXRp YWwgcmVzcG9uc2Ugd2l0aG91dCBkYXRhLgorICAgIGluaXRpYWwgPSBwcTMuU0FTTEluaXRpYWxS ZXNwb25zZS5idWlsZChkaWN0KG5hbWU9YiJPQVVUSEJFQVJFUiIpKQorICAgIHBxMy5zZW5kKGNv bm4sIHBxMy50eXBlcy5QYXNzd29yZE1lc3NhZ2UsIGluaXRpYWwpCisKKyAgICAjIFRoZSBzZXJ2 ZXIgc2hvdWxkIHJlc3BvbmQgd2l0aCBhbiBlbXB0eSBjaGFsbGVuZ2Ugc28gd2UgY2FuIHNlbmQg dGhlIGRhdGEKKyAgICAjIGl0IHdhbnRzLgorICAgIHBrdCA9IHBxMy5yZWN2MShjb25uKQorCisg ICAgYXNzZXJ0IHBrdC50eXBlID09IHBxMy50eXBlcy5BdXRoblJlcXVlc3QKKyAgICBhc3NlcnQg cGt0LnBheWxvYWQudHlwZSA9PSBwcTMuYXV0aG4uU0FTTENvbnRpbnVlCisgICAgYXNzZXJ0IG5v dCBwa3QucGF5bG9hZC5ib2R5CisKKyAgICAjIE5vdyBzZW5kIHRoZSBpbml0aWFsIGRhdGEuCisg ICAgZGF0YSA9IGIibiwsXHgwMWF1dGg9QmVhcmVyICIgKyBiZWFyZXJfdG9rZW4oKSArIGIiXHgw MVx4MDEiCisgICAgcHEzLnNlbmQoY29ubiwgcHEzLnR5cGVzLlBhc3N3b3JkTWVzc2FnZSwgZGF0 YSkKKworICAgICMgU2VydmVyIHNob3VsZCBub3cgY29tcGxldGUgdGhlIGhhbmRzaGFrZS4KKyAg ICBleHBlY3RfaGFuZHNoYWtlX3N1Y2Nlc3MoY29ubikKKworCitAcHl0ZXN0LmZpeHR1cmUoKQor ZGVmIHNldF92YWxpZGF0b3IoKToKKyAgICAiIiIKKyAgICBBIHBlci10ZXN0IGZpeHR1cmUgdGhh dCBhbGxvd3MgYSB0ZXN0IHRvIG92ZXJyaWRlIHRoZSBzZXR0aW5nIG9mCisgICAgb2F1dGhfdmFs aWRhdG9yX2NvbW1hbmQgZm9yIHRoZSBjbHVzdGVyLiBUaGUgc2V0dGluZyB3aWxsIGJlIHJldmVy dGVkIGR1cmluZworICAgIHRlYXJkb3duLgorCisgICAgUGFzc2luZyBOb25lIHdpbGwgcGVyZm9y bSBhbiBBTFRFUiBTWVNURU0gUkVTRVQuCisgICAgIiIiCisgICAgY29ubiA9IHBzeWNvcGcyLmNv bm5lY3QoIiIpCisgICAgY29ubi5hdXRvY29tbWl0ID0gVHJ1ZQorCisgICAgd2l0aCBjb250ZXh0 bGliLmNsb3NpbmcoY29ubik6CisgICAgICAgIGMgPSBjb25uLmN1cnNvcigpCisKKyAgICAgICAg IyBTYXZlIHRoZSBwcmV2aW91cyB2YWx1ZS4KKyAgICAgICAgYy5leGVjdXRlKCJTSE9XIG9hdXRo X3ZhbGlkYXRvcl9jb21tYW5kOyIpCisgICAgICAgIHByZXZfY21kID0gYy5mZXRjaG9uZSgpWzBd CisKKyAgICAgICAgZGVmIHNldHRlcihjbWQpOgorICAgICAgICAgICAgYy5leGVjdXRlKCJBTFRF UiBTWVNURU0gU0VUIG9hdXRoX3ZhbGlkYXRvcl9jb21tYW5kIFRPICVzOyIsIChjbWQsKSkKKyAg ICAgICAgICAgIGMuZXhlY3V0ZSgiU0VMRUNUIHBnX3JlbG9hZF9jb25mKCk7IikKKworICAgICAg ICB5aWVsZCBzZXR0ZXIKKworICAgICAgICAjIFJlc3RvcmUgdGhlIHByZXZpb3VzIHZhbHVlLgor ICAgICAgICBjLmV4ZWN1dGUoIkFMVEVSIFNZU1RFTSBTRVQgb2F1dGhfdmFsaWRhdG9yX2NvbW1h bmQgVE8gJXM7IiwgKHByZXZfY21kLCkpCisgICAgICAgIGMuZXhlY3V0ZSgiU0VMRUNUIHBnX3Jl bG9hZF9jb25mKCk7IikKKworCitkZWYgdGVzdF9vYXV0aF9ub192YWxpZGF0b3Iob2F1dGhfY3R4 LCBzZXRfdmFsaWRhdG9yLCBjb25uZWN0LCBiZWFyZXJfdG9rZW4pOgorICAgICMgQ2xlYXIgb3V0 IG91ciB2YWxpZGF0b3IgY29tbWFuZCwgdGhlbiBlc3RhYmxpc2ggYSBuZXcgY29ubmVjdGlvbi4K KyAgICBzZXRfdmFsaWRhdG9yKCIiKQorICAgIGNvbm4gPSBjb25uZWN0KCkKKworICAgIGJlZ2lu X29hdXRoX2hhbmRzaGFrZShjb25uLCBvYXV0aF9jdHgpCisgICAgc2VuZF9pbml0aWFsX3Jlc3Bv bnNlKGNvbm4sIGJlYXJlcj1iZWFyZXJfdG9rZW4oKSkKKworICAgICMgVGhlIHNlcnZlciBzaG91 bGQgZmFpbCB0aGUgY29ubmVjdGlvbi4KKyAgICBleHBlY3RfaGFuZHNoYWtlX2ZhaWx1cmUoY29u biwgb2F1dGhfY3R4KQorCisKK2RlZiB0ZXN0X29hdXRoX3ZhbGlkYXRvcl9yb2xlKG9hdXRoX2N0 eCwgc2V0X3ZhbGlkYXRvciwgY29ubmVjdCk6CisgICAgIyBTd2l0Y2ggdGhlIHZhbGlkYXRvciBp bXBsZW1lbnRhdGlvbi4gVGhpcyB2YWxpZGF0b3Igd2lsbCByZWZsZWN0IHRoZQorICAgICMgUEdV U0VSIGFzIHRoZSBhdXRoZW50aWNhdGVkIGlkZW50aXR5LgorICAgIHBhdGggPSBwYXRobGliLlBh dGgoX19maWxlX18pLnBhcmVudCAvICJ2YWxpZGF0ZV9yZWZsZWN0LnB5IgorICAgIHBhdGggPSBz dHIocGF0aC5hYnNvbHV0ZSgpKQorCisgICAgc2V0X3ZhbGlkYXRvcihmIntzaGxleC5xdW90ZShw YXRoKX0gJyVyJyA8JiVmIikKKyAgICBjb25uID0gY29ubmVjdCgpCisKKyAgICAjIExvZyBpbi4g Tm90ZSB0aGF0IHRoZSByZWZsZWN0aW9uIHZhbGlkYXRvciBpZ25vcmVzIHRoZSBiZWFyZXIgdG9r ZW4uCisgICAgYmVnaW5fb2F1dGhfaGFuZHNoYWtlKGNvbm4sIG9hdXRoX2N0eCwgdXNlcj1vYXV0 aF9jdHgudXNlcikKKyAgICBzZW5kX2luaXRpYWxfcmVzcG9uc2UoY29ubiwgYmVhcmVyPWIiZG9u dGNhcmUiKQorICAgIGV4cGVjdF9oYW5kc2hha2Vfc3VjY2Vzcyhjb25uKQorCisgICAgIyBDaGVj ayB0aGUgdXNlciBpZGVudGl0eS4KKyAgICBwcTMuc2VuZChjb25uLCBwcTMudHlwZXMuUXVlcnks IHF1ZXJ5PWIiU0VMRUNUIGF1dGhuX2lkKCk7IikKKyAgICByZXNwID0gcmVjZWl2ZV91bnRpbChj b25uLCBwcTMudHlwZXMuRGF0YVJvdykKKworICAgIHJvdyA9IHJlc3AucGF5bG9hZAorICAgIGV4 cGVjdGVkID0gb2F1dGhfY3R4LnVzZXIuZW5jb2RlKCJ1dGYtOCIpCisgICAgYXNzZXJ0IHJvdy5j b2x1bW5zID09IFtleHBlY3RlZF0KKworCitkZWYgdGVzdF9vYXV0aF9yb2xlX3dpdGhfc2hlbGxf dW5zYWZlX2NoYXJhY3RlcnMob2F1dGhfY3R4LCBzZXRfdmFsaWRhdG9yLCBjb25uZWN0KToKKyAg ICAiIiIKKyAgICBYWFggVGhpcyB0ZXN0IHBpbnMgdW5kZXNpcmFibGUgYmVoYXZpb3IuIFdlIHNo b3VsZCBiZSBhYmxlIHRvIGhhbmRsZSBhbnkKKyAgICB2YWxpZCBQb3N0Z3JlcyByb2xlIG5hbWUu CisgICAgIiIiCisgICAgIyBTd2l0Y2ggdGhlIHZhbGlkYXRvciBpbXBsZW1lbnRhdGlvbi4gVGhp cyB2YWxpZGF0b3Igd2lsbCByZWZsZWN0IHRoZQorICAgICMgUEdVU0VSIGFzIHRoZSBhdXRoZW50 aWNhdGVkIGlkZW50aXR5LgorICAgIHBhdGggPSBwYXRobGliLlBhdGgoX19maWxlX18pLnBhcmVu dCAvICJ2YWxpZGF0ZV9yZWZsZWN0LnB5IgorICAgIHBhdGggPSBzdHIocGF0aC5hYnNvbHV0ZSgp KQorCisgICAgc2V0X3ZhbGlkYXRvcihmIntzaGxleC5xdW90ZShwYXRoKX0gJyVyJyA8JiVmIikK KyAgICBjb25uID0gY29ubmVjdCgpCisKKyAgICB1bnNhZmVfdXNlcm5hbWUgPSAiaGVsbG8ndGhl cmUiCisgICAgYmVnaW5fb2F1dGhfaGFuZHNoYWtlKGNvbm4sIG9hdXRoX2N0eCwgdXNlcj11bnNh ZmVfdXNlcm5hbWUpCisKKyAgICAjIFRoZSBzZXJ2ZXIgc2hvdWxkIHJlamVjdCB0aGUgaGFuZHNo YWtlLgorICAgIHNlbmRfaW5pdGlhbF9yZXNwb25zZShjb25uLCBiZWFyZXI9YiJkb250Y2FyZSIp CisgICAgZXhwZWN0X2hhbmRzaGFrZV9mYWlsdXJlKGNvbm4sIG9hdXRoX2N0eCkKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3B5dGhvbi9zZXJ2ZXIvdGVzdF9zZXJ2ZXIucHkgYi9zcmMvdGVzdC9weXRo b24vc2VydmVyL3Rlc3Rfc2VydmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAuLjAyMTI2ZGJhNzkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9weXRob24vc2Vy dmVyL3Rlc3Rfc2VydmVyLnB5CkBAIC0wLDAgKzEsMjEgQEAKKyMKKyMgQ29weXJpZ2h0IDIwMjEg Vk13YXJlLCBJbmMuCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBQb3N0Z3JlU1FMCisjCisK K2ltcG9ydCBwcTMKKworCitkZWYgdGVzdF9oYW5kc2hha2UoY29ubmVjdCk6CisgICAgIiIiQmFz aWMgc2FuaXR5IGNoZWNrLiIiIgorICAgIGNvbm4gPSBjb25uZWN0KCkKKworICAgIHBxMy5oYW5k c2hha2UoY29ubiwgdXNlcj1wcTMucGd1c2VyKCksIGRhdGFiYXNlPXBxMy5wZ2RhdGFiYXNlKCkp CisKKyAgICBwcTMuc2VuZChjb25uLCBwcTMudHlwZXMuUXVlcnksIHF1ZXJ5PWIiIikKKworICAg IHJlc3AgPSBwcTMucmVjdjEoY29ubikKKyAgICBhc3NlcnQgcmVzcC50eXBlID09IHBxMy50eXBl cy5FbXB0eVF1ZXJ5UmVzcG9uc2UKKworICAgIHJlc3AgPSBwcTMucmVjdjEoY29ubikKKyAgICBh c3NlcnQgcmVzcC50eXBlID09IHBxMy50eXBlcy5SZWFkeUZvclF1ZXJ5CmRpZmYgLS1naXQgYS9z cmMvdGVzdC9weXRob24vc2VydmVyL3ZhbGlkYXRlX2JlYXJlci5weSBiL3NyYy90ZXN0L3B5dGhv bi9zZXJ2ZXIvdmFsaWRhdGVfYmVhcmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAw MDAwMDAwMDAuLjJjYzczZmYxNTQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9weXRob24v c2VydmVyL3ZhbGlkYXRlX2JlYXJlci5weQpAQCAtMCwwICsxLDEwMSBAQAorIyEgL3Vzci9iaW4v ZW52IHB5dGhvbjMKKyMKKyMgQ29weXJpZ2h0IDIwMjEgVk13YXJlLCBJbmMuCisjIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBQb3N0Z3JlU1FMCisjCisjIERPIE5PVCBVU0UgVEhJUyBPQVVUSCBW QUxJREFUT1IgSU4gUFJPRFVDVElPTi4gSXQgZG9lc24ndCBhY3R1YWxseSB2YWxpZGF0ZQorIyBh bnl0aGluZywgYW5kIGl0IGxvZ3MgdGhlIGJlYXJlciB0b2tlbiBkYXRhLCB3aGljaCBpcyBzZW5z aXRpdmUuCisjCisjIFRoaXMgZXhlY3V0YWJsZSBpcyB1c2VkIGFzIGFuIG9hdXRoX3ZhbGlkYXRv cl9jb21tYW5kIGluIGNvbmNlcnQgd2l0aAorIyB0ZXN0X29hdXRoLnB5LiBNZW1vcnkgaXMgc2hh cmVkIGFuZCBjb21tdW5pY2F0ZWQgZnJvbSB0aGF0IHRlc3QgbW9kdWxlJ3MKKyMgYmVhcmVyX3Rv a2VuKCkgZml4dHVyZS4KKyMKKyMgVGhpcyBzY3JpcHQgbXVzdCBydW4gdW5kZXIgdGhlIFBvc3Rn cmVzIHNlcnZlciBlbnZpcm9ubWVudDsga2VlcCB0aGUKKyMgZGVwZW5kZW5jeSBsaXN0IGZhaXJs eSBzdGFuZGFyZC4KKworaW1wb3J0IGJhc2U2NAoraW1wb3J0IGJpbmFzY2lpCitpbXBvcnQgY29u dGV4dGxpYgoraW1wb3J0IHN0cnVjdAoraW1wb3J0IHN5cworZnJvbSBtdWx0aXByb2Nlc3Npbmcg aW1wb3J0IHNoYXJlZF9tZW1vcnkKKworTUFYX1VJTlQxNiA9IDIgKiogMTYgLSAxCisKKworZGVm IHJlbW92ZV9zaG1fZnJvbV9yZXNvdXJjZV90cmFja2VyKCk6CisgICAgIiIiCisgICAgTW9ua2V5 LXBhdGNoIG11bHRpcHJvY2Vzc2luZy5yZXNvdXJjZV90cmFja2VyIHNvIFNoYXJlZE1lbW9yeSB3 b24ndCBiZQorICAgIHRyYWNrZWQuIFB1bGxlZCBmcm9tIHRoaXMgdGhyZWFkLCB3aGVyZSB0aGVy ZSBhcmUgbW9yZSBkZXRhaWxzOgorCisgICAgICAgIGh0dHBzOi8vYnVncy5weXRob24ub3JnL2lz c3VlMzgxMTkKKworICAgIFRMO0RSOiBhbGwgY2xpZW50cyBvZiBzaGFyZWQgbWVtb3J5IHNlZ21l bnRzIGF1dG9tYXRpY2FsbHkgZGVzdHJveSB0aGVtIG9uCisgICAgcHJvY2VzcyBleGl0LCB3aGlj aCBtYWtlcyBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzIG11Y2ggbGVzcyB1c2VmdWwuIFRoaXMKKyAg ICBtb25rZXlwYXRjaCByZW1vdmVzIHRoYXQgYmVoYXZpb3Igc28gdGhhdCB3ZSBjYW4gZGVmZXIg dG8gdGhlIHRlc3QgdG8gbWFuYWdlCisgICAgdGhlIHNlZ21lbnQgbGlmZXRpbWUuCisKKyAgICBJ ZGVhbGx5IGEgZnV0dXJlIFB5dGhvbiBwYXRjaCB3aWxsIHB1bGwgaW4gdGhpcyBmaXggYW5kIHRo ZW4gdGhlIGVudGlyZQorICAgIGZ1bmN0aW9uIGNhbiBnbyBhd2F5LgorICAgICIiIgorICAgIGZy b20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCByZXNvdXJjZV90cmFja2VyCisKKyAgICBkZWYgZml4 X3JlZ2lzdGVyKG5hbWUsIHJ0eXBlKToKKyAgICAgICAgaWYgcnR5cGUgPT0gInNoYXJlZF9tZW1v cnkiOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHJldHVybiByZXNvdXJjZV90cmFja2Vy Ll9yZXNvdXJjZV90cmFja2VyLnJlZ2lzdGVyKHNlbGYsIG5hbWUsIHJ0eXBlKQorCisgICAgcmVz b3VyY2VfdHJhY2tlci5yZWdpc3RlciA9IGZpeF9yZWdpc3RlcgorCisgICAgZGVmIGZpeF91bnJl Z2lzdGVyKG5hbWUsIHJ0eXBlKToKKyAgICAgICAgaWYgcnR5cGUgPT0gInNoYXJlZF9tZW1vcnki OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHJldHVybiByZXNvdXJjZV90cmFja2VyLl9y ZXNvdXJjZV90cmFja2VyLnVucmVnaXN0ZXIoc2VsZiwgbmFtZSwgcnR5cGUpCisKKyAgICByZXNv dXJjZV90cmFja2VyLnVucmVnaXN0ZXIgPSBmaXhfdW5yZWdpc3RlcgorCisgICAgaWYgInNoYXJl ZF9tZW1vcnkiIGluIHJlc291cmNlX3RyYWNrZXIuX0NMRUFOVVBfRlVOQ1M6CisgICAgICAgIGRl bCByZXNvdXJjZV90cmFja2VyLl9DTEVBTlVQX0ZVTkNTWyJzaGFyZWRfbWVtb3J5Il0KKworCitk ZWYgbWFpbihhcmdzKToKKyAgICByZW1vdmVfc2htX2Zyb21fcmVzb3VyY2VfdHJhY2tlcigpICAj IFhYWCByZW1vdmUgc29tZSBkYXkKKworICAgICMgR2V0IHRoZSBleHBlY3RlZCB0b2tlbiBmcm9t IHRoZSBjdXJyZW50bHkgcnVubmluZyB0ZXN0LgorICAgIHNoYXJlZF9tZW1fbmFtZSA9IGFyZ3Nb MF0KKworICAgIG1lbSA9IHNoYXJlZF9tZW1vcnkuU2hhcmVkTWVtb3J5KHNoYXJlZF9tZW1fbmFt ZSkKKyAgICB3aXRoIGNvbnRleHRsaWIuY2xvc2luZyhtZW0pOgorICAgICAgICAjIEZpcnN0IHR3 byBieXRlcyBhcmUgdGhlIHRva2VuIGxlbmd0aC4KKyAgICAgICAgc2l6ZSA9IHN0cnVjdC51bnBh Y2soIkgiLCBtZW0uYnVmWzoyXSlbMF0KKworICAgICAgICBpZiBzaXplID09IE1BWF9VSU5UMTY6 CisgICAgICAgICAgICAjIFNwZWNpYWwgY2FzZTogdGhlIHRlc3Qgd2FudHMgdXMgdG8gYWNjZXB0 IGFueSB0b2tlbi4KKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoImFjY2VwdGluZyB0b2tl biB3aXRob3V0IHZhbGlkYXRpb25cbiIpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAj IFRoZSByZW1haW5kZXIgb2YgdGhlIGJ1ZmZlciBjb250YWlucyB0aGUgZXhwZWN0ZWQgdG9rZW4u CisgICAgICAgIGFzc2VydCBzaXplIDw9IChtZW0uc2l6ZSAtIDIpCisgICAgICAgIGV4cGVjdGVk X3Rva2VuID0gbWVtLmJ1ZlsyIDogc2l6ZSArIDJdLnRvYnl0ZXMoKQorCisgICAgICAgIG1lbS5i dWZbOl0gPSBiIlwwIiAqIG1lbS5zaXplICAjIHNjcmliYmxlIG92ZXIgdGhlIHRva2VuCisKKyAg ICB0b2tlbiA9IHN5cy5zdGRpbi5idWZmZXIucmVhZCgpCisgICAgaWYgdG9rZW4gIT0gZXhwZWN0 ZWRfdG9rZW46CisgICAgICAgIHN5cy5leGl0KGYiZmFpbGVkIHRvIG1hdGNoIEJlYXJlciB0b2tl biAoe3Rva2VuIXJ9ICE9IHtleHBlY3RlZF90b2tlbiFyfSkiKQorCisgICAgIyBTZWUgaWYgdGhl IHRlc3Qgd2FudHMgdXMgdG8gcHJpbnQgYW55dGhpbmcuIElmIHNvLCBpdCB3aWxsIGhhdmUgZW5j b2RlZAorICAgICMgdGhlIGRlc2lyZWQgb3V0cHV0IGluIHRoZSB0b2tlbiB3aXRoIGFuICJvdXRw dXQ9IiBwcmVmaXguCisgICAgdHJ5OgorICAgICAgICAjIGFsdGNoYXJzPSItXyIgY29ycmVzcG9u ZHMgdG8gdGhlIHVybHNhZmUgYWxwaGFiZXQuCisgICAgICAgIGRhdGEgPSBiYXNlNjQuYjY0ZGVj b2RlKHRva2VuLCBhbHRjaGFycz0iLV8iLCB2YWxpZGF0ZT1UcnVlKQorCisgICAgICAgIGlmIGRh dGEuc3RhcnRzd2l0aChiIm91dHB1dD0iKToKKyAgICAgICAgICAgIHN5cy5zdGRvdXQuYnVmZmVy LndyaXRlKGRhdGFbNzpdKQorCisgICAgZXhjZXB0IGJpbmFzY2lpLkVycm9yOgorICAgICAgICBw YXNzCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKHN5cy5hcmd2WzE6 XSkKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3B5dGhvbi9zZXJ2ZXIvdmFsaWRhdGVfcmVmbGVjdC5w eSBiL3NyYy90ZXN0L3B5dGhvbi9zZXJ2ZXIvdmFsaWRhdGVfcmVmbGVjdC5weQpuZXcgZmlsZSBt b2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwLi4yNGMzYTdlNzE1Ci0tLSAvZGV2L251bGwKKysr IGIvc3JjL3Rlc3QvcHl0aG9uL3NlcnZlci92YWxpZGF0ZV9yZWZsZWN0LnB5CkBAIC0wLDAgKzEs MzQgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24zCisjCisjIENvcHlyaWdodCAyMDIxIFZNd2Fy ZSwgSW5jLgorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogUG9zdGdyZVNRTAorIworIyBETyBO T1QgVVNFIFRISVMgT0FVVEggVkFMSURBVE9SIElOIFBST0RVQ1RJT04uIEl0IGlnbm9yZXMgdGhl IGJlYXJlciB0b2tlbgorIyBlbnRpcmVseSBhbmQgYXV0b21hdGljYWxseSBsb2dzIHRoZSB1c2Vy IGluLgorIworIyBUaGlzIGV4ZWN1dGFibGUgaXMgdXNlZCBhcyBhbiBvYXV0aF92YWxpZGF0b3Jf Y29tbWFuZCBpbiBjb25jZXJ0IHdpdGgKKyMgdGVzdF9vYXV0aC5weS4gSXQgZXhwZWN0cyB0aGUg dXNlcidzIGRlc2lyZWQgcm9sZSBuYW1lIGFzIGFuIGFyZ3VtZW50OyB0aGUKKyMgYWN0dWFsIHRv a2VuIHdpbGwgYmUgZGlzY2FyZGVkIGFuZCB0aGUgdXNlciB3aWxsIGJlIGxvZ2dlZCBpbiB3aXRo IHRoZSByb2xlCisjIG5hbWUgYXMgdGhlIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdHkuCisjCisjIFRo aXMgc2NyaXB0IG11c3QgcnVuIHVuZGVyIHRoZSBQb3N0Z3JlcyBzZXJ2ZXIgZW52aXJvbm1lbnQ7 IGtlZXAgdGhlCisjIGRlcGVuZGVuY3kgbGlzdCBmYWlybHkgc3RhbmRhcmQuCisKK2ltcG9ydCBz eXMKKworCitkZWYgbWFpbihhcmdzKToKKyAgICAjIFdlIGhhdmUgdG8gcmVhZCB0aGUgZW50aXJl IHRva2VuIGFzIG91ciBmaXJzdCBhY3Rpb24gdG8gdW5ibG9jayB0aGUKKyAgICAjIHNlcnZlciwg YnV0IHdlIHdvbid0IGFjdHVhbGx5IHVzZSBpdC4KKyAgICBfID0gc3lzLnN0ZGluLmJ1ZmZlci5y ZWFkKCkKKworICAgIGlmIGxlbihhcmdzKSAhPSAxOgorICAgICAgICBzeXMuZXhpdCgidXNhZ2U6 IC4vdmFsaWRhdGVfcmVmbGVjdC5weSBST0xFIikKKworICAgICMgTG9nIHRoZSB1c2VyIGluIGFz IHRoZSBwcm92aWRlZCByb2xlLgorICAgIHJvbGUgPSBhcmdzWzBdCisgICAgcHJpbnQocm9sZSkK KworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oc3lzLmFyZ3ZbMTpdKQpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcHl0aG9uL3Rlc3RfaW50ZXJuYWxzLnB5IGIvc3JjL3Rlc3Qv cHl0aG9uL3Rlc3RfaW50ZXJuYWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAuLmRlZTQ4NTVmYzAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9weXRob24vdGVz dF9pbnRlcm5hbHMucHkKQEAgLTAsMCArMSwxMzggQEAKKyMKKyMgQ29weXJpZ2h0IDIwMjEgVk13 YXJlLCBJbmMuCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBQb3N0Z3JlU1FMCisjCisKK2lt cG9ydCBpbworCitmcm9tIHBxMyBpbXBvcnQgX0RlYnVnU3RyZWFtCisKKworZGVmIHRlc3RfRGVi dWdTdHJlYW1fcmVhZCgpOgorICAgIHVuZGVyID0gaW8uQnl0ZXNJTyhiImFiY2RlZmdoaWprbG1u b3BxcnN0dXZ3eHl6IikKKyAgICBvdXQgPSBpby5TdHJpbmdJTygpCisKKyAgICBzdHJlYW0gPSBf RGVidWdTdHJlYW0odW5kZXIsIG91dCkKKworICAgIHJlcyA9IHN0cmVhbS5yZWFkKDUpCisgICAg YXNzZXJ0IHJlcyA9PSBiImFiY2RlIgorCisgICAgcmVzID0gc3RyZWFtLnJlYWQoMTYpCisgICAg YXNzZXJ0IHJlcyA9PSBiImZnaGlqa2xtbm9wcXJzdHUiCisKKyAgICBzdHJlYW0uZmx1c2hfZGVi dWcoKQorCisgICAgcmVzID0gc3RyZWFtLnJlYWQoKQorICAgIGFzc2VydCByZXMgPT0gYiJ2d3h5 eiIKKworICAgIHN0cmVhbS5mbHVzaF9kZWJ1ZygpCisKKyAgICBleHBlY3RlZCA9ICgKKyAgICAg ICAgIjwgMDAwMDpcdDYxIDYyIDYzIDY0IDY1IDY2IDY3IDY4IDY5IDZhIDZiIDZjIDZkIDZlIDZm IDcwXHRhYmNkZWZnaGlqa2xtbm9wXG4iCisgICAgICAgICI8IDAwMTA6XHQ3MSA3MiA3MyA3NCA3 NSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0cXJzdHVcbiIKKyAgICAgICAgIlxu IgorICAgICAgICAiPCAwMDAwOlx0NzYgNzcgNzggNzkgN2EgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcdHZ3eHl6XG4iCisgICAgICAgICJcbiIKKyAgICApCisgICAgYXNzZXJ0IG91 dC5nZXR2YWx1ZSgpID09IGV4cGVjdGVkCisKKworZGVmIHRlc3RfRGVidWdTdHJlYW1fd3JpdGUo KToKKyAgICB1bmRlciA9IGlvLkJ5dGVzSU8oKQorICAgIG91dCA9IGlvLlN0cmluZ0lPKCkKKwor ICAgIHN0cmVhbSA9IF9EZWJ1Z1N0cmVhbSh1bmRlciwgb3V0KQorCisgICAgc3RyZWFtLndyaXRl KGIiXHgwMFx4MDFceDAyIikKKyAgICBzdHJlYW0uZmx1c2goKQorCisgICAgYXNzZXJ0IHVuZGVy LmdldHZhbHVlKCkgPT0gYiJceDAwXHgwMVx4MDIiCisKKyAgICBzdHJlYW0ud3JpdGUoYiJceGMw XHhjMVx4YzIiKQorICAgIHN0cmVhbS5mbHVzaCgpCisKKyAgICBhc3NlcnQgdW5kZXIuZ2V0dmFs dWUoKSA9PSBiIlx4MDBceDAxXHgwMlx4YzBceGMxXHhjMiIKKworICAgIHN0cmVhbS5mbHVzaF9k ZWJ1ZygpCisKKyAgICBleHBlY3RlZCA9ICI+IDAwMDA6XHQwMCAwMSAwMiBjMCBjMSBjMiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFx0Li4uLi4uXG5cbiIKKyAgICBhc3NlcnQgb3V0Lmdl dHZhbHVlKCkgPT0gZXhwZWN0ZWQKKworCitkZWYgdGVzdF9EZWJ1Z1N0cmVhbV9yZWFkX3dyaXRl KCk6CisgICAgdW5kZXIgPSBpby5CeXRlc0lPKGIiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoi KQorICAgIG91dCA9IGlvLlN0cmluZ0lPKCkKKyAgICBzdHJlYW0gPSBfRGVidWdTdHJlYW0odW5k ZXIsIG91dCkKKworICAgIHJlcyA9IHN0cmVhbS5yZWFkKDUpCisgICAgYXNzZXJ0IHJlcyA9PSBi ImFiY2RlIgorCisgICAgc3RyZWFtLndyaXRlKGIieHh4eHgiKQorICAgIHN0cmVhbS5mbHVzaCgp CisKKyAgICBhc3NlcnQgdW5kZXIuZ2V0dmFsdWUoKSA9PSBiImFiY2RleHh4eHhrbG1ub3BxcnN0 dXZ3eHl6IgorCisgICAgcmVzID0gc3RyZWFtLnJlYWQoNSkKKyAgICBhc3NlcnQgcmVzID09IGIi a2xtbm8iCisKKyAgICBzdHJlYW0ud3JpdGUoYiJ4eHh4eCIpCisgICAgc3RyZWFtLmZsdXNoKCkK KworICAgIGFzc2VydCB1bmRlci5nZXR2YWx1ZSgpID09IGIiYWJjZGV4eHh4eGtsbW5veHh4eHh1 dnd4eXoiCisKKyAgICBzdHJlYW0uZmx1c2hfZGVidWcoKQorCisgICAgZXhwZWN0ZWQgPSAoCisg ICAgICAgICI8IDAwMDA6XHQ2MSA2MiA2MyA2NCA2NSA2YiA2YyA2ZCA2ZSA2ZiAgICAgICAgICAg ICAgICAgIFx0YWJjZGVrbG1ub1xuIgorICAgICAgICAiXG4iCisgICAgICAgICI+IDAwMDA6XHQ3 OCA3OCA3OCA3OCA3OCA3OCA3OCA3OCA3OCA3OCAgICAgICAgICAgICAgICAgIFx0eHh4eHh4eHh4 eFxuIgorICAgICAgICAiXG4iCisgICAgKQorICAgIGFzc2VydCBvdXQuZ2V0dmFsdWUoKSA9PSBl eHBlY3RlZAorCisKK2RlZiB0ZXN0X0RlYnVnU3RyZWFtX2VuZF9wYWNrZXQoKToKKyAgICB1bmRl ciA9IGlvLkJ5dGVzSU8oYiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIpCisgICAgb3V0ID0g aW8uU3RyaW5nSU8oKQorICAgIHN0cmVhbSA9IF9EZWJ1Z1N0cmVhbSh1bmRlciwgb3V0KQorCisg ICAgc3RyZWFtLnJlYWQoNSkKKyAgICBzdHJlYW0uZW5kX3BhY2tldCgicmVhZCBkZXNjcmlwdGlv biIsIHJlYWQ9VHJ1ZSwgaW5kZW50PSIgIikKKworICAgIHN0cmVhbS53cml0ZShiInh4eHh4IikK KyAgICBzdHJlYW0uZmx1c2goKQorICAgIHN0cmVhbS5lbmRfcGFja2V0KCJ3cml0ZSBkZXNjcmlw dGlvbiIsIGluZGVudD0iICIpCisKKyAgICBzdHJlYW0ucmVhZCg1KQorICAgIHN0cmVhbS53cml0 ZShiInh4eHh4IikKKyAgICBzdHJlYW0uZmx1c2goKQorICAgIHN0cmVhbS5lbmRfcGFja2V0KCJy ZWFkL3dyaXRlIGNvbWJvIGZvciByZWFkIiwgcmVhZD1UcnVlLCBpbmRlbnQ9IiAiKQorCisgICAg c3RyZWFtLnJlYWQoNSkKKyAgICBzdHJlYW0ud3JpdGUoYiJ4eHh4eCIpCisgICAgc3RyZWFtLmZs dXNoKCkKKyAgICBzdHJlYW0uZW5kX3BhY2tldCgicmVhZC93cml0ZSBjb21ibyBmb3Igd3JpdGUi LCBpbmRlbnQ9IiAiKQorCisgICAgZXhwZWN0ZWQgPSAoCisgICAgICAgICIgPCAwMDAwOlx0NjEg NjIgNjMgNjQgNjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdGFiY2RlXG4iCisg ICAgICAgICJcbiIKKyAgICAgICAgIjwgcmVhZCBkZXNjcmlwdGlvblxuIgorICAgICAgICAiXG4i CisgICAgICAgICI+IHdyaXRlIGRlc2NyaXB0aW9uXG4iCisgICAgICAgICJcbiIKKyAgICAgICAg IiA+IDAwMDA6XHQ3OCA3OCA3OCA3OCA3OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFx0eHh4eHhcbiIKKyAgICAgICAgIlxuIgorICAgICAgICAiIDwgMDAwMDpcdDZiIDZjIDZkIDZl IDZmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHRrbG1ub1xuIgorICAgICAgICAi XG4iCisgICAgICAgICIgPiAwMDAwOlx0NzggNzggNzggNzggNzggICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcdHh4eHh4XG4iCisgICAgICAgICJcbiIKKyAgICAgICAgIjwgcmVhZC93 cml0ZSBjb21ibyBmb3IgcmVhZFxuIgorICAgICAgICAiXG4iCisgICAgICAgICI+IHJlYWQvd3Jp dGUgY29tYm8gZm9yIHdyaXRlXG4iCisgICAgICAgICJcbiIKKyAgICAgICAgIiA8IDAwMDA6XHQ3 NSA3NiA3NyA3OCA3OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0dXZ3eHlcbiIK KyAgICAgICAgIlxuIgorICAgICAgICAiID4gMDAwMDpcdDc4IDc4IDc4IDc4IDc4ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXHR4eHh4eFxuIgorICAgICAgICAiXG4iCisgICAgKQor ICAgIGFzc2VydCBvdXQuZ2V0dmFsdWUoKSA9PSBleHBlY3RlZApkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcHl0aG9uL3Rlc3RfcHEzLnB5IGIvc3JjL3Rlc3QvcHl0aG9uL3Rlc3RfcHEzLnB5Cm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmUwYzBlMDU2OGQKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvdGVzdC9weXRob24vdGVzdF9wcTMucHkKQEAgLTAsMCArMSw1NTggQEAKKyMK KyMgQ29weXJpZ2h0IDIwMjEgVk13YXJlLCBJbmMuCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBQb3N0Z3JlU1FMCisjCisKK2ltcG9ydCBjb250ZXh0bGliCitpbXBvcnQgZ2V0cGFzcworaW1w b3J0IGlvCitpbXBvcnQgc3RydWN0CitpbXBvcnQgc3lzCisKK2ltcG9ydCBweXRlc3QKK2Zyb20g Y29uc3RydWN0IGltcG9ydCBDb250YWluZXIsIFBhZGRpbmdFcnJvciwgU3RyZWFtRXJyb3IsIFRl cm1pbmF0ZWRFcnJvcgorCitpbXBvcnQgcHEzCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXpl KAorICAgICJyYXcsZXhwZWN0ZWQsZXh0cmEiLAorICAgIFsKKyAgICAgICAgcHl0ZXN0LnBhcmFt KAorICAgICAgICAgICAgYiJceDAwXHgwMFx4MDBceDEwXHgwMFx4MDRceDAwXHgwMGFiY2RlZmdo IiwKKyAgICAgICAgICAgIENvbnRhaW5lcihsZW49MTYsIHByb3RvPTB4NDAwMDAsIHBheWxvYWQ9 YiJhYmNkZWZnaCIpLAorICAgICAgICAgICAgYiIiLAorICAgICAgICAgICAgaWQ9IjgtYnl0ZSBw YXlsb2FkIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAg YiJceDAwXHgwMFx4MDBceDA4XHgwMFx4MDRceDAwXHgwMCIsCisgICAgICAgICAgICBDb250YWlu ZXIobGVuPTgsIHByb3RvPTB4NDAwMDAsIHBheWxvYWQ9YiIiKSwKKyAgICAgICAgICAgIGIiIiwK KyAgICAgICAgICAgIGlkPSJubyBwYXlsb2FkIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0 LnBhcmFtKAorICAgICAgICAgICAgYiJceDAwXHgwMFx4MDBceDA5XHgwMFx4MDRceDAwXHgwMGFi Y2RlIiwKKyAgICAgICAgICAgIENvbnRhaW5lcihsZW49OSwgcHJvdG89MHg0MDAwMCwgcGF5bG9h ZD1iImEiKSwKKyAgICAgICAgICAgIGIiYmNkZSIsCisgICAgICAgICAgICBpZD0iMS1ieXRlIHBh eWxvYWQgYW5kIGV4dHJhIHBhZGRpbmciLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFy YW0oCisgICAgICAgICAgICBiIlx4MDBceDAwXHgwMFx4MEJceDAwXHgwM1x4MDBceDAwaGlceDAw IiwKKyAgICAgICAgICAgIENvbnRhaW5lcihsZW49MTEsIHByb3RvPXBxMy5wcm90b2NvbCgzLCAw KSwgcGF5bG9hZD1bYiJoaSJdKSwKKyAgICAgICAgICAgIGIiIiwKKyAgICAgICAgICAgIGlkPSJp bXBsaWVkIHBhcmFtZXRlciBsaXN0IHdoZW4gdXNpbmcgcHJvdG8gdmVyc2lvbiAzLjAiLAorICAg ICAgICApLAorICAgIF0sCispCitkZWYgdGVzdF9TdGFydHVwX3BhcnNlKHJhdywgZXhwZWN0ZWQs IGV4dHJhKToKKyAgICB3aXRoIGlvLkJ5dGVzSU8ocmF3KSBhcyBzdHJlYW06CisgICAgICAgIGFj dHVhbCA9IHBxMy5TdGFydHVwLnBhcnNlX3N0cmVhbShzdHJlYW0pCisKKyAgICAgICAgYXNzZXJ0 IGFjdHVhbCA9PSBleHBlY3RlZAorICAgICAgICBhc3NlcnQgc3RyZWFtLnJlYWQoKSA9PSBleHRy YQorCisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgKKyAgICAicGFja2V0LGV4cGVjdGVkX2J5 dGVzIiwKKyAgICBbCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGRpY3QoKSwK KyAgICAgICAgICAgIGIiXHgwMFx4MDBceDAwXHgwOFx4MDBceDAwXHgwMFx4MDAiLAorICAgICAg ICAgICAgaWQ9Im5vdGhpbmcgc2V0IiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFt KAorICAgICAgICAgICAgZGljdChsZW49MTAsIHByb3RvPTB4MTIzNDU2NzgpLAorICAgICAgICAg ICAgYiJceDAwXHgwMFx4MDBceDBBXHgxMlx4MzRceDU2XHg3OFx4MDBceDAwIiwKKyAgICAgICAg ICAgIGlkPSJsZW4gYW5kIHByb3RvIHNldCBleHBsaWNpdGx5IiwKKyAgICAgICAgKSwKKyAgICAg ICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgZGljdChwcm90bz0weDEyMzQ1Njc4KSwKKyAg ICAgICAgICAgIGIiXHgwMFx4MDBceDAwXHgwOFx4MTJceDM0XHg1Nlx4NzgiLAorICAgICAgICAg ICAgaWQ9ImltcGxpZWQgbGVuIHdpdGggbm8gcGF5bG9hZCIsCisgICAgICAgICksCisgICAgICAg IHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGRpY3QocHJvdG89MHgxMjM0NTY3OCwgcGF5bG9h ZD1iImFiY2QiKSwKKyAgICAgICAgICAgIGIiXHgwMFx4MDBceDAwXHgwQ1x4MTJceDM0XHg1Nlx4 NzhhYmNkIiwKKyAgICAgICAgICAgIGlkPSJpbXBsaWVkIGxlbiB3aXRoIHBheWxvYWQiLAorICAg ICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBkaWN0KHBheWxvYWQ9 W2IiIl0pLAorICAgICAgICAgICAgYiJceDAwXHgwMFx4MDBceDA5XHgwMFx4MDNceDAwXHgwMFx4 MDAiLAorICAgICAgICAgICAgaWQ9ImltcGxpZWQgcHJvdG8gdmVyc2lvbiAzIHdoZW4gc2VuZGlu ZyBwYXJhbWV0ZXJzIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAg ICAgICAgZGljdChwYXlsb2FkPVtiImhpIiwgYiIiXSksCisgICAgICAgICAgICBiIlx4MDBceDAw XHgwMFx4MENceDAwXHgwM1x4MDBceDAwaGlceDAwXHgwMCIsCisgICAgICAgICAgICBpZD0iaW1w bGllZCBwcm90byB2ZXJzaW9uIDMgYW5kIGxlbiB3aGVuIHNlbmRpbmcgbW9yZSB0aGFuIG9uZSBw YXJhbWV0ZXIiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAg ICBkaWN0KHBheWxvYWQ9ZGljdCh1c2VyPSJqc21pdGgiLCBkYXRhYmFzZT0icG9zdGdyZXMiKSks CisgICAgICAgICAgICBiIlx4MDBceDAwXHgwMFx4MjdceDAwXHgwM1x4MDBceDAwdXNlclx4MDBq c21pdGhceDAwZGF0YWJhc2VceDAwcG9zdGdyZXNceDAwXHgwMCIsCisgICAgICAgICAgICBpZD0i YXV0by1zZXJpYWxpemF0aW9uIG9mIGRpY3QgcGFyYW1ldGVycyIsCisgICAgICAgICksCisgICAg XSwKKykKK2RlZiB0ZXN0X1N0YXJ0dXBfYnVpbGQocGFja2V0LCBleHBlY3RlZF9ieXRlcyk6Cisg ICAgYWN0dWFsID0gcHEzLlN0YXJ0dXAuYnVpbGQocGFja2V0KQorICAgIGFzc2VydCBhY3R1YWwg PT0gZXhwZWN0ZWRfYnl0ZXMKKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoCisgICAgInJh dyxleHBlY3RlZCxleHRyYSIsCisgICAgWworICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAg ICAgICBiIipceDAwXHgwMFx4MDBceDA4YWJjZCIsCisgICAgICAgICAgICBkaWN0KHR5cGU9YiIq IiwgbGVuPTgsIHBheWxvYWQ9YiJhYmNkIiksCisgICAgICAgICAgICBiIiIsCisgICAgICAgICAg ICBpZD0iNC1ieXRlIHBheWxvYWQiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0o CisgICAgICAgICAgICBiIipceDAwXHgwMFx4MDBceDA0IiwKKyAgICAgICAgICAgIGRpY3QodHlw ZT1iIioiLCBsZW49NCwgcGF5bG9hZD1iIiIpLAorICAgICAgICAgICAgYiIiLAorICAgICAgICAg ICAgaWQ9Im5vIHBheWxvYWQiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisg ICAgICAgICAgICBiIipceDAwXHgwMFx4MDBceDA1eGFiY2QiLAorICAgICAgICAgICAgZGljdCh0 eXBlPWIiKiIsIGxlbj01LCBwYXlsb2FkPWIieCIpLAorICAgICAgICAgICAgYiJhYmNkIiwKKyAg ICAgICAgICAgIGlkPSIxLWJ5dGUgcGF5bG9hZCB3aXRoIGV4dHJhIHBhZGRpbmciLAorICAgICAg ICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBiIlJceDAwXHgwMFx4MDBc eDA4XHgwMFx4MDBceDAwXHgwMCIsCisgICAgICAgICAgICBkaWN0KAorICAgICAgICAgICAgICAg IHR5cGU9cHEzLnR5cGVzLkF1dGhuUmVxdWVzdCwKKyAgICAgICAgICAgICAgICBsZW49OCwKKyAg ICAgICAgICAgICAgICBwYXlsb2FkPWRpY3QodHlwZT1wcTMuYXV0aG4uT0ssIGJvZHk9Tm9uZSks CisgICAgICAgICAgICApLAorICAgICAgICAgICAgYiIiLAorICAgICAgICAgICAgaWQ9IkF1dGhl bnRpY2F0aW9uT2siLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAg ICAgICBiIlJceDAwXHgwMFx4MDBceDEyXHgwMFx4MDBceDAwXHgwQUVYVEVSTkFMXHgwMFx4MDAi LAorICAgICAgICAgICAgZGljdCgKKyAgICAgICAgICAgICAgICB0eXBlPXBxMy50eXBlcy5BdXRo blJlcXVlc3QsCisgICAgICAgICAgICAgICAgbGVuPTE4LAorICAgICAgICAgICAgICAgIHBheWxv YWQ9ZGljdCh0eXBlPXBxMy5hdXRobi5TQVNMLCBib2R5PVtiIkVYVEVSTkFMIiwgYiIiXSksCisg ICAgICAgICAgICApLAorICAgICAgICAgICAgYiIiLAorICAgICAgICAgICAgaWQ9IkF1dGhlbnRp Y2F0aW9uU0FTTCIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAg ICAgIGIiUlx4MDBceDAwXHgwMFx4MERceDAwXHgwMFx4MDBceDBCMTIzNDUiLAorICAgICAgICAg ICAgZGljdCgKKyAgICAgICAgICAgICAgICB0eXBlPXBxMy50eXBlcy5BdXRoblJlcXVlc3QsCisg ICAgICAgICAgICAgICAgbGVuPTEzLAorICAgICAgICAgICAgICAgIHBheWxvYWQ9ZGljdCh0eXBl PXBxMy5hdXRobi5TQVNMQ29udGludWUsIGJvZHk9YiIxMjM0NSIpLAorICAgICAgICAgICAgKSwK KyAgICAgICAgICAgIGIiIiwKKyAgICAgICAgICAgIGlkPSJBdXRoZW50aWNhdGlvblNBU0xDb250 aW51ZSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGIi Ulx4MDBceDAwXHgwMFx4MERceDAwXHgwMFx4MDBceDBDMTIzNDUiLAorICAgICAgICAgICAgZGlj dCgKKyAgICAgICAgICAgICAgICB0eXBlPXBxMy50eXBlcy5BdXRoblJlcXVlc3QsCisgICAgICAg ICAgICAgICAgbGVuPTEzLAorICAgICAgICAgICAgICAgIHBheWxvYWQ9ZGljdCh0eXBlPXBxMy5h dXRobi5TQVNMRmluYWwsIGJvZHk9YiIxMjM0NSIpLAorICAgICAgICAgICAgKSwKKyAgICAgICAg ICAgIGIiIiwKKyAgICAgICAgICAgIGlkPSJBdXRoZW50aWNhdGlvblNBU0xGaW5hbCIsCisgICAg ICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGIicFx4MDBceDAwXHgw MFx4MEJodW50ZXIyIiwKKyAgICAgICAgICAgIGRpY3QoCisgICAgICAgICAgICAgICAgdHlwZT1w cTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlLAorICAgICAgICAgICAgICAgIGxlbj0xMSwKKyAgICAg ICAgICAgICAgICBwYXlsb2FkPWIiaHVudGVyMiIsCisgICAgICAgICAgICApLAorICAgICAgICAg ICAgYiIiLAorICAgICAgICAgICAgaWQ9IlBhc3N3b3JkTWVzc2FnZSIsCisgICAgICAgICksCisg ICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGIiS1x4MDBceDAwXHgwMFx4MENceDAw XHgwMFx4MDBceDAwXHgxMlx4MzRceDU2XHg3OCIsCisgICAgICAgICAgICBkaWN0KAorICAgICAg ICAgICAgICAgIHR5cGU9cHEzLnR5cGVzLkJhY2tlbmRLZXlEYXRhLAorICAgICAgICAgICAgICAg IGxlbj0xMiwKKyAgICAgICAgICAgICAgICBwYXlsb2FkPWRpY3QocGlkPTAsIGtleT0weDEyMzQ1 Njc4KSwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBiIiIsCisgICAgICAgICAgICBpZD0i QmFja2VuZEtleURhdGEiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAg ICAgICAgICBiIkNceDAwXHgwMFx4MDBceDA4U0VUXHgwMCIsCisgICAgICAgICAgICBkaWN0KAor ICAgICAgICAgICAgICAgIHR5cGU9cHEzLnR5cGVzLkNvbW1hbmRDb21wbGV0ZSwKKyAgICAgICAg ICAgICAgICBsZW49OCwKKyAgICAgICAgICAgICAgICBwYXlsb2FkPWRpY3QodGFnPWIiU0VUIiks CisgICAgICAgICAgICApLAorICAgICAgICAgICAgYiIiLAorICAgICAgICAgICAgaWQ9IkNvbW1h bmRDb21wbGV0ZSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAg ICAgIGIiRVx4MDBceDAwXHgwMFx4MTFNYmFkIVx4MDBNZG9nIVx4MDBceDAwIiwKKyAgICAgICAg ICAgIGRpY3QodHlwZT1iIkUiLCBsZW49MTcsIHBheWxvYWQ9ZGljdChmaWVsZHM9W2IiTWJhZCEi LCBiIk1kb2chIiwgYiIiXSkpLAorICAgICAgICAgICAgYiIiLAorICAgICAgICAgICAgaWQ9IkVy cm9yUmVzcG9uc2UiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAg ICAgICBiIlNceDAwXHgwMFx4MDBceDA4YVx4MDBiXHgwMCIsCisgICAgICAgICAgICBkaWN0KAor ICAgICAgICAgICAgICAgIHR5cGU9cHEzLnR5cGVzLlBhcmFtZXRlclN0YXR1cywKKyAgICAgICAg ICAgICAgICBsZW49OCwKKyAgICAgICAgICAgICAgICBwYXlsb2FkPWRpY3QobmFtZT1iImEiLCB2 YWx1ZT1iImIiKSwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBiIiIsCisgICAgICAgICAg ICBpZD0iUGFyYW1ldGVyU3RhdHVzIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFt KAorICAgICAgICAgICAgYiJaXHgwMFx4MDBceDAwXHgwNXgiLAorICAgICAgICAgICAgZGljdCh0 eXBlPWIiWiIsIGxlbj01LCBwYXlsb2FkPWRpY3Qoc3RhdHVzPWIieCIpKSwKKyAgICAgICAgICAg IGIiIiwKKyAgICAgICAgICAgIGlkPSJSZWFkeUZvclF1ZXJ5IiwKKyAgICAgICAgKSwKKyAgICAg ICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgYiJRXHgwMFx4MDBceDAwXHgwNiFceDAwIiwK KyAgICAgICAgICAgIGRpY3QodHlwZT1wcTMudHlwZXMuUXVlcnksIGxlbj02LCBwYXlsb2FkPWRp Y3QocXVlcnk9YiIhIikpLAorICAgICAgICAgICAgYiIiLAorICAgICAgICAgICAgaWQ9IlF1ZXJ5 IiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgYiJEXHgw MFx4MDBceDAwXHgwQlx4MDBceDAxXHgwMFx4MDBceDAwXHgwMSEiLAorICAgICAgICAgICAgZGlj dCh0eXBlPXBxMy50eXBlcy5EYXRhUm93LCBsZW49MTEsIHBheWxvYWQ9ZGljdChjb2x1bW5zPVti IiEiXSkpLAorICAgICAgICAgICAgYiIiLAorICAgICAgICAgICAgaWQ9IkRhdGFSb3ciLAorICAg ICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBiIkRceDAwXHgwMFx4 MDBceDA2XHgwMFx4MDBleHRyYSIsCisgICAgICAgICAgICBkaWN0KHR5cGU9cHEzLnR5cGVzLkRh dGFSb3csIGxlbj02LCBwYXlsb2FkPWRpY3QoY29sdW1ucz1bXSkpLAorICAgICAgICAgICAgYiJl eHRyYSIsCisgICAgICAgICAgICBpZD0iRGF0YVJvdyB3aXRoIGV4dHJhIGRhdGEiLAorICAgICAg ICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBiIklceDAwXHgwMFx4MDBc eDA0IiwKKyAgICAgICAgICAgIGRpY3QodHlwZT1wcTMudHlwZXMuRW1wdHlRdWVyeVJlc3BvbnNl LCBsZW49NCwgcGF5bG9hZD1Ob25lKSwKKyAgICAgICAgICAgIGIiIiwKKyAgICAgICAgICAgIGlk PSJFbXB0eVF1ZXJ5UmVzcG9uc2UiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0o CisgICAgICAgICAgICBiIklceDAwXHgwMFx4MDBceDA0XHhGRiIsCisgICAgICAgICAgICBkaWN0 KHR5cGU9YiJJIiwgbGVuPTQsIHBheWxvYWQ9Tm9uZSksCisgICAgICAgICAgICBiIlx4RkYiLAor ICAgICAgICAgICAgaWQ9IkVtcHR5UXVlcnlSZXNwb25zZSB3aXRoIGV4dHJhIGJ5dGVzIiwKKyAg ICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgYiJYXHgwMFx4MDBc eDAwXHgwNCIsCisgICAgICAgICAgICBkaWN0KHR5cGU9cHEzLnR5cGVzLlRlcm1pbmF0ZSwgbGVu PTQsIHBheWxvYWQ9Tm9uZSksCisgICAgICAgICAgICBiIiIsCisgICAgICAgICAgICBpZD0iVGVy bWluYXRlIiwKKyAgICAgICAgKSwKKyAgICBdLAorKQorZGVmIHRlc3RfUHEzX3BhcnNlKHJhdywg ZXhwZWN0ZWQsIGV4dHJhKToKKyAgICB3aXRoIGlvLkJ5dGVzSU8ocmF3KSBhcyBzdHJlYW06Cisg ICAgICAgIGFjdHVhbCA9IHBxMy5QcTMucGFyc2Vfc3RyZWFtKHN0cmVhbSkKKworICAgICAgICBh c3NlcnQgYWN0dWFsID09IGV4cGVjdGVkCisgICAgICAgIGFzc2VydCBzdHJlYW0ucmVhZCgpID09 IGV4dHJhCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKAorICAgICJmaWVsZHMsZXhwZWN0 ZWQiLAorICAgIFsKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgZGljdCh0eXBl PWIiKiIsIGxlbj01KSwKKyAgICAgICAgICAgIGIiKlx4MDBceDAwXHgwMFx4MDVceDAwIiwKKyAg ICAgICAgICAgIGlkPSJ0eXBlIGFuZCBsZW4gc2V0IGV4cGxpY2l0bHkiLAorICAgICAgICApLAor ICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBkaWN0KHR5cGU9YiIqIiksCisgICAg ICAgICAgICBiIipceDAwXHgwMFx4MDBceDA0IiwKKyAgICAgICAgICAgIGlkPSJpbXBsaWVkIGxl biB3aXRoIG5vIHBheWxvYWQiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisg ICAgICAgICAgICBkaWN0KHR5cGU9YiIqIiwgcGF5bG9hZD1iIjEyMzQiKSwKKyAgICAgICAgICAg IGIiKlx4MDBceDAwXHgwMFx4MDgxMjM0IiwKKyAgICAgICAgICAgIGlkPSJpbXBsaWVkIGxlbiB3 aXRoIHBheWxvYWQiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAg ICAgICBkaWN0KHR5cGU9cHEzLnR5cGVzLkF1dGhuUmVxdWVzdCwgcGF5bG9hZD1kaWN0KHR5cGU9 cHEzLmF1dGhuLk9LKSksCisgICAgICAgICAgICBiIlJceDAwXHgwMFx4MDBceDA4XHgwMFx4MDBc eDAwXHgwMCIsCisgICAgICAgICAgICBpZD0iaW1wbGllZCBsZW4vdHlwZSBmb3IgQXV0aGVudGlj YXRpb25PSyIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAg IGRpY3QoCisgICAgICAgICAgICAgICAgdHlwZT1wcTMudHlwZXMuQXV0aG5SZXF1ZXN0LAorICAg ICAgICAgICAgICAgIHBheWxvYWQ9ZGljdCgKKyAgICAgICAgICAgICAgICAgICAgdHlwZT1wcTMu YXV0aG4uU0FTTCwKKyAgICAgICAgICAgICAgICAgICAgYm9keT1bYiJTQ1JBTS1TSEEtMjU2LVBM VVMiLCBiIlNDUkFNLVNIQS0yNTYiLCBiIiJdLAorICAgICAgICAgICAgICAgICksCisgICAgICAg ICAgICApLAorICAgICAgICAgICAgYiJSXHgwMFx4MDBceDAwXHgyQVx4MDBceDAwXHgwMFx4MEFT Q1JBTS1TSEEtMjU2LVBMVVNceDAwU0NSQU0tU0hBLTI1Nlx4MDBceDAwIiwKKyAgICAgICAgICAg IGlkPSJpbXBsaWVkIGxlbi90eXBlIGZvciBBdXRoZW50aWNhdGlvblNBU0wiLAorICAgICAgICAp LAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBkaWN0KAorICAgICAgICAgICAg ICAgIHR5cGU9cHEzLnR5cGVzLkF1dGhuUmVxdWVzdCwKKyAgICAgICAgICAgICAgICBwYXlsb2Fk PWRpY3QodHlwZT1wcTMuYXV0aG4uU0FTTENvbnRpbnVlLCBib2R5PWIiMTIzNDUiKSwKKyAgICAg ICAgICAgICksCisgICAgICAgICAgICBiIlJceDAwXHgwMFx4MDBceDBEXHgwMFx4MDBceDAwXHgw QjEyMzQ1IiwKKyAgICAgICAgICAgIGlkPSJpbXBsaWVkIGxlbi90eXBlIGZvciBBdXRoZW50aWNh dGlvblNBU0xDb250aW51ZSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAg ICAgICAgICAgIGRpY3QoCisgICAgICAgICAgICAgICAgdHlwZT1wcTMudHlwZXMuQXV0aG5SZXF1 ZXN0LAorICAgICAgICAgICAgICAgIHBheWxvYWQ9ZGljdCh0eXBlPXBxMy5hdXRobi5TQVNMRmlu YWwsIGJvZHk9YiIxMjM0NSIpLAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIGIiUlx4MDBc eDAwXHgwMFx4MERceDAwXHgwMFx4MDBceDBDMTIzNDUiLAorICAgICAgICAgICAgaWQ9ImltcGxp ZWQgbGVuL3R5cGUgZm9yIEF1dGhlbnRpY2F0aW9uU0FTTEZpbmFsIiwKKyAgICAgICAgKSwKKyAg ICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgZGljdCgKKyAgICAgICAgICAgICAgICB0 eXBlPXBxMy50eXBlcy5QYXNzd29yZE1lc3NhZ2UsCisgICAgICAgICAgICAgICAgcGF5bG9hZD1i Imh1bnRlcjIiLAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIGIicFx4MDBceDAwXHgwMFx4 MEJodW50ZXIyIiwKKyAgICAgICAgICAgIGlkPSJpbXBsaWVkIGxlbi90eXBlIGZvciBQYXNzd29y ZE1lc3NhZ2UiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAg ICBkaWN0KHR5cGU9cHEzLnR5cGVzLkJhY2tlbmRLZXlEYXRhLCBwYXlsb2FkPWRpY3QocGlkPTEs IGtleT03KSksCisgICAgICAgICAgICBiIktceDAwXHgwMFx4MDBceDBDXHgwMFx4MDBceDAwXHgw MVx4MDBceDAwXHgwMFx4MDciLAorICAgICAgICAgICAgaWQ9ImltcGxpZWQgbGVuL3R5cGUgZm9y IEJhY2tlbmRLZXlEYXRhIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAg ICAgICAgICAgZGljdCh0eXBlPXBxMy50eXBlcy5Db21tYW5kQ29tcGxldGUsIHBheWxvYWQ9ZGlj dCh0YWc9YiJTRVQiKSksCisgICAgICAgICAgICBiIkNceDAwXHgwMFx4MDBceDA4U0VUXHgwMCIs CisgICAgICAgICAgICBpZD0iaW1wbGllZCBsZW4vdHlwZSBmb3IgQ29tbWFuZENvbXBsZXRlIiwK KyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgZGljdCh0eXBl PXBxMy50eXBlcy5FcnJvclJlc3BvbnNlLCBwYXlsb2FkPWRpY3QoZmllbGRzPVtiImVycm9yIiwg YiIiXSkpLAorICAgICAgICAgICAgYiJFXHgwMFx4MDBceDAwXHgwQmVycm9yXHgwMFx4MDAiLAor ICAgICAgICAgICAgaWQ9ImltcGxpZWQgbGVuL3R5cGUgZm9yIEVycm9yUmVzcG9uc2UiLAorICAg ICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBkaWN0KHR5cGU9cHEz LnR5cGVzLlBhcmFtZXRlclN0YXR1cywgcGF5bG9hZD1kaWN0KG5hbWU9YiJhIiwgdmFsdWU9YiJi IikpLAorICAgICAgICAgICAgYiJTXHgwMFx4MDBceDAwXHgwOGFceDAwYlx4MDAiLAorICAgICAg ICAgICAgaWQ9ImltcGxpZWQgbGVuL3R5cGUgZm9yIFBhcmFtZXRlclN0YXR1cyIsCisgICAgICAg ICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGRpY3QodHlwZT1wcTMudHlw ZXMuUmVhZHlGb3JRdWVyeSwgcGF5bG9hZD1kaWN0KHN0YXR1cz1iIkkiKSksCisgICAgICAgICAg ICBiIlpceDAwXHgwMFx4MDBceDA1SSIsCisgICAgICAgICAgICBpZD0iaW1wbGllZCBsZW4vdHlw ZSBmb3IgUmVhZHlGb3JRdWVyeSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgK KyAgICAgICAgICAgIGRpY3QodHlwZT1wcTMudHlwZXMuUXVlcnksIHBheWxvYWQ9ZGljdChxdWVy eT1iIlNFTEVDVCAxOyIpKSwKKyAgICAgICAgICAgIGIiUVx4MDBceDAwXHgwMFx4MGVTRUxFQ1Qg MTtceDAwIiwKKyAgICAgICAgICAgIGlkPSJpbXBsaWVkIGxlbi90eXBlIGZvciBRdWVyeSIsCisg ICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGRpY3QodHlwZT1w cTMudHlwZXMuRGF0YVJvdywgcGF5bG9hZD1kaWN0KGNvbHVtbnM9W2IiYWJjZCJdKSksCisgICAg ICAgICAgICBiIkRceDAwXHgwMFx4MDBceDBFXHgwMFx4MDFceDAwXHgwMFx4MDBceDA0YWJjZCIs CisgICAgICAgICAgICBpZD0iaW1wbGllZCBsZW4vdHlwZSBmb3IgRGF0YVJvdyIsCisgICAgICAg ICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGRpY3QodHlwZT1wcTMudHlw ZXMuRW1wdHlRdWVyeVJlc3BvbnNlKSwKKyAgICAgICAgICAgIGIiSVx4MDBceDAwXHgwMFx4MDQi LAorICAgICAgICAgICAgaWQ9ImltcGxpZWQgbGVuIGZvciBFbXB0eVF1ZXJ5UmVzcG9uc2UiLAor ICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBkaWN0KHR5cGU9 cHEzLnR5cGVzLlRlcm1pbmF0ZSksCisgICAgICAgICAgICBiIlhceDAwXHgwMFx4MDBceDA0IiwK KyAgICAgICAgICAgIGlkPSJpbXBsaWVkIGxlbiBmb3IgVGVybWluYXRlIiwKKyAgICAgICAgKSwK KyAgICBdLAorKQorZGVmIHRlc3RfUHEzX2J1aWxkKGZpZWxkcywgZXhwZWN0ZWQpOgorICAgIGFj dHVhbCA9IHBxMy5QcTMuYnVpbGQoZmllbGRzKQorICAgIGFzc2VydCBhY3R1YWwgPT0gZXhwZWN0 ZWQKKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoCisgICAgInJhdyxleHBlY3RlZCxleHRy YSIsCisgICAgWworICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBiIlx4MDBceDAw IiwKKyAgICAgICAgICAgIGRpY3QoY29sdW1ucz1bXSksCisgICAgICAgICAgICBiIiIsCisgICAg ICAgICAgICBpZD0ibm8gY29sdW1ucyIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJh bSgKKyAgICAgICAgICAgIGIiXHgwMFx4MDFceDAwXHgwMFx4MDBceDA0YWJjZCIsCisgICAgICAg ICAgICBkaWN0KGNvbHVtbnM9W2IiYWJjZCJdKSwKKyAgICAgICAgICAgIGIiIiwKKyAgICAgICAg ICAgIGlkPSJvbmUgY29sdW1uIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAor ICAgICAgICAgICAgYiJceDAwXHgwMlx4MDBceDAwXHgwMFx4MDRhYmNkXHgwMFx4MDBceDAwXHgw MXgiLAorICAgICAgICAgICAgZGljdChjb2x1bW5zPVtiImFiY2QiLCBiIngiXSksCisgICAgICAg ICAgICBiIiIsCisgICAgICAgICAgICBpZD0ibXVsdGlwbGUgY29sdW1ucyIsCisgICAgICAgICks CisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGIiXHgwMFx4MDJceDAwXHgwMFx4 MDBceDAwXHgwMFx4MDBceDAwXHgwMXgiLAorICAgICAgICAgICAgZGljdChjb2x1bW5zPVtiIiIs IGIieCJdKSwKKyAgICAgICAgICAgIGIiIiwKKyAgICAgICAgICAgIGlkPSJlbXB0eSBjb2x1bW4g dmFsdWUiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBi Ilx4MDBceDAyXHhGRlx4RkZceEZGXHhGRlx4RkZceEZGXHhGRlx4RkYiLAorICAgICAgICAgICAg ZGljdChjb2x1bW5zPVtOb25lLCBOb25lXSksCisgICAgICAgICAgICBiIiIsCisgICAgICAgICAg ICBpZD0ibnVsbCBjb2x1bW5zIiwKKyAgICAgICAgKSwKKyAgICBdLAorKQorZGVmIHRlc3RfRGF0 YVJvd19wYXJzZShyYXcsIGV4cGVjdGVkLCBleHRyYSk6CisgICAgcGt0ID0gYiJEIiArIHN0cnVj dC5wYWNrKCIhaSIsIGxlbihyYXcpICsgNCkgKyByYXcKKyAgICB3aXRoIGlvLkJ5dGVzSU8ocGt0 KSBhcyBzdHJlYW06CisgICAgICAgIGFjdHVhbCA9IHBxMy5QcTMucGFyc2Vfc3RyZWFtKHN0cmVh bSkKKworICAgICAgICBhc3NlcnQgYWN0dWFsLnR5cGUgPT0gcHEzLnR5cGVzLkRhdGFSb3cKKyAg ICAgICAgYXNzZXJ0IGFjdHVhbC5wYXlsb2FkID09IGV4cGVjdGVkCisgICAgICAgIGFzc2VydCBz dHJlYW0ucmVhZCgpID09IGV4dHJhCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKAorICAg ICJmaWVsZHMsZXhwZWN0ZWQiLAorICAgIFsKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAg ICAgICAgZGljdCgpLAorICAgICAgICAgICAgYiJceDAwXHgwMCIsCisgICAgICAgICAgICBpZD0i bm8gY29sdW1ucyIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAg ICAgIGRpY3QoY29sdW1ucz1bTm9uZSwgTm9uZV0pLAorICAgICAgICAgICAgYiJceDAwXHgwMlx4 RkZceEZGXHhGRlx4RkZceEZGXHhGRlx4RkZceEZGIiwKKyAgICAgICAgICAgIGlkPSJudWxsIGNv bHVtbnMiLAorICAgICAgICApLAorICAgIF0sCispCitkZWYgdGVzdF9EYXRhUm93X2J1aWxkKGZp ZWxkcywgZXhwZWN0ZWQpOgorICAgIGFjdHVhbCA9IHBxMy5QcTMuYnVpbGQoZGljdCh0eXBlPXBx My50eXBlcy5EYXRhUm93LCBwYXlsb2FkPWZpZWxkcykpCisKKyAgICBleHBlY3RlZCA9IGIiRCIg KyBzdHJ1Y3QucGFjaygiIWkiLCBsZW4oZXhwZWN0ZWQpICsgNCkgKyBleHBlY3RlZAorICAgIGFz c2VydCBhY3R1YWwgPT0gZXhwZWN0ZWQKKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoCisg ICAgInJhdyxleHBlY3RlZCxleGNlcHRpb24iLAorICAgIFsKKyAgICAgICAgcHl0ZXN0LnBhcmFt KAorICAgICAgICAgICAgYiJFWFRFUk5BTFx4MDBceEZGXHhGRlx4RkZceEZGIiwKKyAgICAgICAg ICAgIGRpY3QobmFtZT1iIkVYVEVSTkFMIiwgbGVuPS0xLCBkYXRhPU5vbmUpLAorICAgICAgICAg ICAgTm9uZSwKKyAgICAgICAgICAgIGlkPSJubyBpbml0aWFsIHJlc3BvbnNlIiwKKyAgICAgICAg KSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgYiJFWFRFUk5BTFx4MDBceDAw XHgwMFx4MDBceDAybWUiLAorICAgICAgICAgICAgZGljdChuYW1lPWIiRVhURVJOQUwiLCBsZW49 MiwgZGF0YT1iIm1lIiksCisgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgaWQ9ImluaXRp YWwgcmVzcG9uc2UiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAg ICAgICBiIkVYVEVSTkFMXHgwMFx4MDBceDAwXHgwMFx4MDJtZWV4dHJhIiwKKyAgICAgICAgICAg IE5vbmUsCisgICAgICAgICAgICBUZXJtaW5hdGVkRXJyb3IsCisgICAgICAgICAgICBpZD0iZXh0 cmEgZGF0YSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAg IGIiRVhURVJOQUxceDAwXHgwMFx4MDBceDAwXHhGRm1lIiwKKyAgICAgICAgICAgIE5vbmUsCisg ICAgICAgICAgICBTdHJlYW1FcnJvciwKKyAgICAgICAgICAgIGlkPSJ1bmRlcmZsb3ciLAorICAg ICAgICApLAorICAgIF0sCispCitkZWYgdGVzdF9TQVNMSW5pdGlhbFJlc3BvbnNlX3BhcnNlKHJh dywgZXhwZWN0ZWQsIGV4Y2VwdGlvbik6CisgICAgY3R4ID0gY29udGV4dGxpYi5udWxsY29udGV4 dCgpCisgICAgaWYgZXhjZXB0aW9uOgorICAgICAgICBjdHggPSBweXRlc3QucmFpc2VzKGV4Y2Vw dGlvbikKKworICAgIHdpdGggY3R4OgorICAgICAgICBhY3R1YWwgPSBwcTMuU0FTTEluaXRpYWxS ZXNwb25zZS5wYXJzZShyYXcpCisgICAgICAgIGFzc2VydCBhY3R1YWwgPT0gZXhwZWN0ZWQKKwor CitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoCisgICAgImZpZWxkcyxleHBlY3RlZCIsCisgICAg WworICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBkaWN0KG5hbWU9YiJFWFRFUk5B TCIpLAorICAgICAgICAgICAgYiJFWFRFUk5BTFx4MDBceEZGXHhGRlx4RkZceEZGIiwKKyAgICAg ICAgICAgIGlkPSJubyBpbml0aWFsIHJlc3BvbnNlIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0 ZXN0LnBhcmFtKAorICAgICAgICAgICAgZGljdChuYW1lPWIiRVhURVJOQUwiLCBkYXRhPU5vbmUp LAorICAgICAgICAgICAgYiJFWFRFUk5BTFx4MDBceEZGXHhGRlx4RkZceEZGIiwKKyAgICAgICAg ICAgIGlkPSJubyBpbml0aWFsIHJlc3BvbnNlIChleHBsaWNpdCBOb25lKSIsCisgICAgICAgICks CisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGRpY3QobmFtZT1iIkVYVEVSTkFM IiwgZGF0YT1iIiIpLAorICAgICAgICAgICAgYiJFWFRFUk5BTFx4MDBceDAwXHgwMFx4MDBceDAw IiwKKyAgICAgICAgICAgIGlkPSJlbXB0eSByZXNwb25zZSIsCisgICAgICAgICksCisgICAgICAg IHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGRpY3QobmFtZT1iIkVYVEVSTkFMIiwgZGF0YT1i Im1lQGV4YW1wbGUuY29tIiksCisgICAgICAgICAgICBiIkVYVEVSTkFMXHgwMFx4MDBceDAwXHgw MFx4MEVtZUBleGFtcGxlLmNvbSIsCisgICAgICAgICAgICBpZD0iaW5pdGlhbCByZXNwb25zZSIs CisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGRpY3QobmFt ZT1iIkVYVEVSTkFMIiwgbGVuPTIsIGRhdGE9YiJtZUBleGFtcGxlLmNvbSIpLAorICAgICAgICAg ICAgYiJFWFRFUk5BTFx4MDBceDAwXHgwMFx4MDBceDAybWVAZXhhbXBsZS5jb20iLAorICAgICAg ICAgICAgaWQ9ImRhdGEgb3ZlcmZsb3ciLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFy YW0oCisgICAgICAgICAgICBkaWN0KG5hbWU9YiJFWFRFUk5BTCIsIGxlbj0xNCwgZGF0YT1iIm1l IiksCisgICAgICAgICAgICBiIkVYVEVSTkFMXHgwMFx4MDBceDAwXHgwMFx4MEVtZSIsCisgICAg ICAgICAgICBpZD0iZGF0YSB1bmRlcmZsb3ciLAorICAgICAgICApLAorICAgIF0sCispCitkZWYg dGVzdF9TQVNMSW5pdGlhbFJlc3BvbnNlX2J1aWxkKGZpZWxkcywgZXhwZWN0ZWQpOgorICAgIGFj dHVhbCA9IHBxMy5TQVNMSW5pdGlhbFJlc3BvbnNlLmJ1aWxkKGZpZWxkcykKKyAgICBhc3NlcnQg YWN0dWFsID09IGV4cGVjdGVkCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKAorICAgICJ2 ZXJzaW9uLGV4cGVjdGVkX2J5dGVzIiwKKyAgICBbCisgICAgICAgIHB5dGVzdC5wYXJhbSgoMywg MCksIGIiXHgwMFx4MDNceDAwXHgwMCIsIGlkPSJ2ZXJzaW9uIDMiKSwKKyAgICAgICAgcHl0ZXN0 LnBhcmFtKCgxMjM0LCA1Njc5KSwgYiJceDA0XHhkMlx4MTZceDJmIiwgaWQ9IlNTTFJlcXVlc3Qi KSwKKyAgICBdLAorKQorZGVmIHRlc3RfcHJvdG9jb2wodmVyc2lvbiwgZXhwZWN0ZWRfYnl0ZXMp OgorICAgICMgTWFrZSBzdXJlIHRoZSBpbnRlZ2VyIHJldHVybmVkIGJ5IHByb3RvY29sIGlzIGNv cnJlY3RseSBzZXJpYWxpemVkIG9uIHRoZQorICAgICMgd2lyZS4KKyAgICBhc3NlcnQgc3RydWN0 LnBhY2soIiFpIiwgcHEzLnByb3RvY29sKCp2ZXJzaW9uKSkgPT0gZXhwZWN0ZWRfYnl0ZXMKKwor CitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoCisgICAgImVudnZhcixmdW5jLGV4cGVjdGVkIiwK KyAgICBbCisgICAgICAgICgiUEdIT1NUIiwgcHEzLnBnaG9zdCwgImxvY2FsaG9zdCIpLAorICAg ICAgICAoIlBHUE9SVCIsIHBxMy5wZ3BvcnQsIDU0MzIpLAorICAgICAgICAoIlBHVVNFUiIsIHBx My5wZ3VzZXIsIGdldHBhc3MuZ2V0dXNlcigpKSwKKyAgICAgICAgKCJQR0RBVEFCQVNFIiwgcHEz LnBnZGF0YWJhc2UsICJwb3N0Z3JlcyIpLAorICAgIF0sCispCitkZWYgdGVzdF9lbnZfZGVmYXVs dHMobW9ua2V5cGF0Y2gsIGVudnZhciwgZnVuYywgZXhwZWN0ZWQpOgorICAgIG1vbmtleXBhdGNo LmRlbGVudihlbnZ2YXIsIHJhaXNpbmc9RmFsc2UpCisKKyAgICBhY3R1YWwgPSBmdW5jKCkKKyAg ICBhc3NlcnQgYWN0dWFsID09IGV4cGVjdGVkCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXpl KAorICAgICJlbnZ2YXJzLGZ1bmMsZXhwZWN0ZWQiLAorICAgIFsKKyAgICAgICAgKGRpY3QoUEdI T1NUPSJvdGhlcmhvc3QiKSwgcHEzLnBnaG9zdCwgIm90aGVyaG9zdCIpLAorICAgICAgICAoZGlj dChQR1BPUlQ9IjY3ODkiKSwgcHEzLnBncG9ydCwgNjc4OSksCisgICAgICAgIChkaWN0KFBHVVNF Uj0icG9zdGdyZXMiKSwgcHEzLnBndXNlciwgInBvc3RncmVzIiksCisgICAgICAgIChkaWN0KFBH REFUQUJBU0U9InRlbXBsYXRlMSIpLCBwcTMucGdkYXRhYmFzZSwgInRlbXBsYXRlMSIpLAorICAg IF0sCispCitkZWYgdGVzdF9lbnYobW9ua2V5cGF0Y2gsIGVudnZhcnMsIGZ1bmMsIGV4cGVjdGVk KToKKyAgICBmb3IgaywgdiBpbiBlbnZ2YXJzLml0ZW1zKCk6CisgICAgICAgIG1vbmtleXBhdGNo LnNldGVudihrLCB2KQorCisgICAgYWN0dWFsID0gZnVuYygpCisgICAgYXNzZXJ0IGFjdHVhbCA9 PSBleHBlY3RlZApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcHl0aG9uL3Rscy5weSBiL3NyYy90ZXN0 L3B5dGhvbi90bHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMDc1 YzAyYzFjYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3B5dGhvbi90bHMucHkKQEAgLTAs MCArMSwxOTUgQEAKKyMKKyMgQ29weXJpZ2h0IDIwMjEgVk13YXJlLCBJbmMuCisjIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBQb3N0Z3JlU1FMCisjCisKK2Zyb20gY29uc3RydWN0IGltcG9ydCAq CisKKyMKKyMgVExTIDEuMworIworIyBNb3N0IG9mIHRoZSB0eXBlcyBiZWxvdyBhcmUgdHJhbnNj cmliZWQgZnJvbSBSRkMgODQ0NjoKKyMKKyMgICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRt bC9yZmM4NDQ2CisjCisKKworZGVmIF9WZWN0b3Ioc2l6ZV9maWVsZCwgZWxlbWVudCk6CisgICAg cmV0dXJuIFByZWZpeGVkKHNpemVfZmllbGQsIEdyZWVkeVJhbmdlKGVsZW1lbnQpKQorCisKKyMg QWxlcnRzCisKK0FsZXJ0TGV2ZWwgPSBFbnVtKAorICAgIEJ5dGUsCisgICAgd2FybmluZz0xLAor ICAgIGZhdGFsPTIsCispCisKK0FsZXJ0RGVzY3JpcHRpb24gPSBFbnVtKAorICAgIEJ5dGUsCisg ICAgY2xvc2Vfbm90aWZ5PTAsCisgICAgdW5leHBlY3RlZF9tZXNzYWdlPTEwLAorICAgIGJhZF9y ZWNvcmRfbWFjPTIwLAorICAgIGRlY3J5cHRpb25fZmFpbGVkX1JFU0VSVkVEPTIxLAorICAgIHJl Y29yZF9vdmVyZmxvdz0yMiwKKyAgICBkZWNvbXByZXNzaW9uX2ZhaWx1cmU9MzAsCisgICAgaGFu ZHNoYWtlX2ZhaWx1cmU9NDAsCisgICAgbm9fY2VydGlmaWNhdGVfUkVTRVJWRUQ9NDEsCisgICAg YmFkX2NlcnRpZmljYXRlPTQyLAorICAgIHVuc3VwcG9ydGVkX2NlcnRpZmljYXRlPTQzLAorICAg IGNlcnRpZmljYXRlX3Jldm9rZWQ9NDQsCisgICAgY2VydGlmaWNhdGVfZXhwaXJlZD00NSwKKyAg ICBjZXJ0aWZpY2F0ZV91bmtub3duPTQ2LAorICAgIGlsbGVnYWxfcGFyYW1ldGVyPTQ3LAorICAg IHVua25vd25fY2E9NDgsCisgICAgYWNjZXNzX2RlbmllZD00OSwKKyAgICBkZWNvZGVfZXJyb3I9 NTAsCisgICAgZGVjcnlwdF9lcnJvcj01MSwKKyAgICBleHBvcnRfcmVzdHJpY3Rpb25fUkVTRVJW RUQ9NjAsCisgICAgcHJvdG9jb2xfdmVyc2lvbj03MCwKKyAgICBpbnN1ZmZpY2llbnRfc2VjdXJp dHk9NzEsCisgICAgaW50ZXJuYWxfZXJyb3I9ODAsCisgICAgdXNlcl9jYW5jZWxlZD05MCwKKyAg ICBub19yZW5lZ290aWF0aW9uPTEwMCwKKyAgICB1bnN1cHBvcnRlZF9leHRlbnNpb249MTEwLAor KQorCitBbGVydCA9IFN0cnVjdCgKKyAgICAibGV2ZWwiIC8gQWxlcnRMZXZlbCwKKyAgICAiZGVz Y3JpcHRpb24iIC8gQWxlcnREZXNjcmlwdGlvbiwKKykKKworCisjIEV4dGVuc2lvbnMKKworRXh0 ZW5zaW9uVHlwZSA9IEVudW0oCisgICAgSW50MTZ1YiwKKyAgICBzZXJ2ZXJfbmFtZT0wLAorICAg IG1heF9mcmFnbWVudF9sZW5ndGg9MSwKKyAgICBzdGF0dXNfcmVxdWVzdD01LAorICAgIHN1cHBv cnRlZF9ncm91cHM9MTAsCisgICAgc2lnbmF0dXJlX2FsZ29yaXRobXM9MTMsCisgICAgdXNlX3Ny dHA9MTQsCisgICAgaGVhcnRiZWF0PTE1LAorICAgIGFwcGxpY2F0aW9uX2xheWVyX3Byb3RvY29s X25lZ290aWF0aW9uPTE2LAorICAgIHNpZ25lZF9jZXJ0aWZpY2F0ZV90aW1lc3RhbXA9MTgsCisg ICAgY2xpZW50X2NlcnRpZmljYXRlX3R5cGU9MTksCisgICAgc2VydmVyX2NlcnRpZmljYXRlX3R5 cGU9MjAsCisgICAgcGFkZGluZz0yMSwKKyAgICBwcmVfc2hhcmVkX2tleT00MSwKKyAgICBlYXJs eV9kYXRhPTQyLAorICAgIHN1cHBvcnRlZF92ZXJzaW9ucz00MywKKyAgICBjb29raWU9NDQsCisg ICAgcHNrX2tleV9leGNoYW5nZV9tb2Rlcz00NSwKKyAgICBjZXJ0aWZpY2F0ZV9hdXRob3JpdGll cz00NywKKyAgICBvaWRfZmlsdGVycz00OCwKKyAgICBwb3N0X2hhbmRzaGFrZV9hdXRoPTQ5LAor ICAgIHNpZ25hdHVyZV9hbGdvcml0aG1zX2NlcnQ9NTAsCisgICAga2V5X3NoYXJlPTUxLAorKQor CitFeHRlbnNpb24gPSBTdHJ1Y3QoCisgICAgImV4dGVuc2lvbl90eXBlIiAvIEV4dGVuc2lvblR5 cGUsCisgICAgImV4dGVuc2lvbl9kYXRhIiAvIFByZWZpeGVkKEludDE2dWIsIEdyZWVkeUJ5dGVz KSwKKykKKworCisjIENsaWVudEhlbGxvCisKKworY2xhc3MgX0NpcGhlclN1aXRlQWRhcHRlcihB ZGFwdGVyKToKKyAgICBjbGFzcyBfaGV4dHVwbGUodHVwbGUpOgorICAgICAgICBkZWYgX19yZXBy X18oc2VsZik6CisgICAgICAgICAgICByZXR1cm4gZiIoMHh7c2VsZlswXTowMlh9LCAweHtzZWxm WzFdOjAyWH0pIgorCisgICAgZGVmIF9lbmNvZGUoc2VsZiwgb2JqLCBjb250ZXh0LCBwYXRoKToK KyAgICAgICAgcmV0dXJuIGJ5dGVzKG9iaikKKworICAgIGRlZiBfZGVjb2RlKHNlbGYsIG9iaiwg Y29udGV4dCwgcGF0aCk6CisgICAgICAgIGFzc2VydCBsZW4ob2JqKSA9PSAyCisgICAgICAgIHJl dHVybiBzZWxmLl9oZXh0dXBsZShvYmopCisKKworUHJvdG9jb2xWZXJzaW9uID0gSGV4KEludDE2 dWIpCisKK1JhbmRvbSA9IEhleChCeXRlcygzMikpCisKK0NpcGhlclN1aXRlID0gX0NpcGhlclN1 aXRlQWRhcHRlcihCeXRlWzJdKQorCitDbGllbnRIZWxsbyA9IFN0cnVjdCgKKyAgICAibGVnYWN5 X3ZlcnNpb24iIC8gUHJvdG9jb2xWZXJzaW9uLAorICAgICJyYW5kb20iIC8gUmFuZG9tLAorICAg ICJsZWdhY3lfc2Vzc2lvbl9pZCIgLyBQcmVmaXhlZChCeXRlLCBIZXgoR3JlZWR5Qnl0ZXMpKSwK KyAgICAiY2lwaGVyX3N1aXRlcyIgLyBfVmVjdG9yKEludDE2dWIsIENpcGhlclN1aXRlKSwKKyAg ICAibGVnYWN5X2NvbXByZXNzaW9uX21ldGhvZHMiIC8gUHJlZml4ZWQoQnl0ZSwgR3JlZWR5Qnl0 ZXMpLAorICAgICJleHRlbnNpb25zIiAvIF9WZWN0b3IoSW50MTZ1YiwgRXh0ZW5zaW9uKSwKKykK KworIyBTZXJ2ZXJIZWxsbworCitTZXJ2ZXJIZWxsbyA9IFN0cnVjdCgKKyAgICAibGVnYWN5X3Zl cnNpb24iIC8gUHJvdG9jb2xWZXJzaW9uLAorICAgICJyYW5kb20iIC8gUmFuZG9tLAorICAgICJs ZWdhY3lfc2Vzc2lvbl9pZF9lY2hvIiAvIFByZWZpeGVkKEJ5dGUsIEhleChHcmVlZHlCeXRlcykp LAorICAgICJjaXBoZXJfc3VpdGUiIC8gQ2lwaGVyU3VpdGUsCisgICAgImxlZ2FjeV9jb21wcmVz c2lvbl9tZXRob2QiIC8gSGV4KEJ5dGUpLAorICAgICJleHRlbnNpb25zIiAvIF9WZWN0b3IoSW50 MTZ1YiwgRXh0ZW5zaW9uKSwKKykKKworIyBIYW5kc2hha2UKKworSGFuZHNoYWtlVHlwZSA9IEVu dW0oCisgICAgQnl0ZSwKKyAgICBjbGllbnRfaGVsbG89MSwKKyAgICBzZXJ2ZXJfaGVsbG89MiwK KyAgICBuZXdfc2Vzc2lvbl90aWNrZXQ9NCwKKyAgICBlbmRfb2ZfZWFybHlfZGF0YT01LAorICAg IGVuY3J5cHRlZF9leHRlbnNpb25zPTgsCisgICAgY2VydGlmaWNhdGU9MTEsCisgICAgY2VydGlm aWNhdGVfcmVxdWVzdD0xMywKKyAgICBjZXJ0aWZpY2F0ZV92ZXJpZnk9MTUsCisgICAgZmluaXNo ZWQ9MjAsCisgICAga2V5X3VwZGF0ZT0yNCwKKyAgICBtZXNzYWdlX2hhc2g9MjU0LAorKQorCitI YW5kc2hha2UgPSBTdHJ1Y3QoCisgICAgIm1zZ190eXBlIiAvIEhhbmRzaGFrZVR5cGUsCisgICAg Imxlbmd0aCIgLyBJbnQyNHViLAorICAgICJwYXlsb2FkIgorICAgIC8gU3dpdGNoKAorICAgICAg ICB0aGlzLm1zZ190eXBlLAorICAgICAgICB7CisgICAgICAgICAgICBIYW5kc2hha2VUeXBlLmNs aWVudF9oZWxsbzogQ2xpZW50SGVsbG8sCisgICAgICAgICAgICBIYW5kc2hha2VUeXBlLnNlcnZl cl9oZWxsbzogU2VydmVySGVsbG8sCisgICAgICAgICAgICAjIEhhbmRzaGFrZVR5cGUuZW5kX29m X2Vhcmx5X2RhdGE6IEVuZE9mRWFybHlEYXRhLAorICAgICAgICAgICAgIyBIYW5kc2hha2VUeXBl LmVuY3J5cHRlZF9leHRlbnNpb25zOiBFbmNyeXB0ZWRFeHRlbnNpb25zLAorICAgICAgICAgICAg IyBIYW5kc2hha2VUeXBlLmNlcnRpZmljYXRlX3JlcXVlc3Q6IENlcnRpZmljYXRlUmVxdWVzdCwK KyAgICAgICAgICAgICMgSGFuZHNoYWtlVHlwZS5jZXJ0aWZpY2F0ZTogQ2VydGlmaWNhdGUsCisg ICAgICAgICAgICAjIEhhbmRzaGFrZVR5cGUuY2VydGlmaWNhdGVfdmVyaWZ5OiBDZXJ0aWZpY2F0 ZVZlcmlmeSwKKyAgICAgICAgICAgICMgSGFuZHNoYWtlVHlwZS5maW5pc2hlZDogRmluaXNoZWQs CisgICAgICAgICAgICAjIEhhbmRzaGFrZVR5cGUubmV3X3Nlc3Npb25fdGlja2V0OiBOZXdTZXNz aW9uVGlja2V0LAorICAgICAgICAgICAgIyBIYW5kc2hha2VUeXBlLmtleV91cGRhdGU6IEtleVVw ZGF0ZSwKKyAgICAgICAgfSwKKyAgICAgICAgZGVmYXVsdD1GaXhlZFNpemVkKHRoaXMubGVuZ3Ro LCBHcmVlZHlCeXRlcyksCisgICAgKSwKKykKKworIyBSZWNvcmRzCisKK0NvbnRlbnRUeXBlID0g RW51bSgKKyAgICBCeXRlLAorICAgIGludmFsaWQ9MCwKKyAgICBjaGFuZ2VfY2lwaGVyX3NwZWM9 MjAsCisgICAgYWxlcnQ9MjEsCisgICAgaGFuZHNoYWtlPTIyLAorICAgIGFwcGxpY2F0aW9uX2Rh dGE9MjMsCispCisKK1BsYWludGV4dCA9IFN0cnVjdCgKKyAgICAidHlwZSIgLyBDb250ZW50VHlw ZSwKKyAgICAibGVnYWN5X3JlY29yZF92ZXJzaW9uIiAvIFByb3RvY29sVmVyc2lvbiwKKyAgICAi bGVuZ3RoIiAvIEludDE2dWIsCisgICAgImZyYWdtZW50IiAvIEZpeGVkU2l6ZWQodGhpcy5sZW5n dGgsIEdyZWVkeUJ5dGVzKSwKKykKLS0gCjIuMjUuMQoK --_006_8a5a35b31c3f25f6b047e77def0445a60399981dcamelvmwarecom_--