Delivered-To: tjphuhs@gmail.com
Received: by 2002:adf:e74f:0:b0:439:fcfb:30e with SMTP id c15csp1118954wrn;
        Thu, 19 Mar 2026 10:51:04 -0700 (PDT)
X-Received: by 2002:a05:690c:e688:b0:79a:8dd1:53bd with SMTP id 00721157ae682-79a90ac1347mr44917b3.7.1773942663343;
        Thu, 19 Mar 2026 10:51:03 -0700 (PDT)
ARC-Seal: i=2; a=rsa-sha256; t=1773942663; cv=pass;
        d=google.com; s=arc-20240605;
        b=emBQ9/blrLYzog5ouku7bM/zdQAh2T2x9cicjXME1cO63i7h/z9hecPh/4bCH0EWyb
         TfOQ82MTCfn08cyKAoRapVXO2tXYm7iooUhsJnc+bQWfTp5Twpyod/4IS4BS/ii+CKLr
         SkxkSZrTP/MpXkp01NedkSxGylwUM7dtLBCJCtmVGw0qZtM3VOGl1CUnclrToQqH3Zuj
         dtxIYoebGsyWXQu/JMdooflXhU/FAa3XKPAj1/URpKRGQHmjRW3sNxl8+pJWvqqxQtdw
         EcAAv+IHjmIBR+324BaEYW0X6cjVwLses+SikgcYvmOd+NrLVNC2iA3dplGwbdMnBe/T
         r3/A==
ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605;
        h=mime-version:content-language:accept-language:in-reply-to
         :references:message-id:date:thread-index:subject:to:from
         :dkim-signature;
        bh=Ceir7JsIzJWkLDePWhODIm+msgitfNDF7m9mVhSs7+M=;
        fh=Hcu5VqhndQNvtVhwbc8tr7JrSOSQJms/+lG2L+E9gBs=;
        b=MJ/nMekERpIwZ0rs1V6JbRzlRK5kb3aVf6/828kp4CUcpgwv2M0OMiJRFUUGd9vqnD
         vyRL010J6u1pl/FmvyToEPw3Ssj9Ds5DWdWXUk0Vf8+K+mmNEIa2E3vrQ/V9XPhi47LK
         Fqi5Pl3/OnewyLM/UjSGV2OVXIVUlQuIpV+DZAt9oWbsQUrgTB4eIxYKObycVUajqdIi
         zGGW2h+26Sj3nfO/9W9bdixNXmDGGCaHsiwPQHNX2+gnF8iffVWABseR3zEoZ6eaBvaa
         65iqrPDIlooELUYYHqYaxAe0KiBgJFTkwKTawJW3YZ5WtvZUiX47OUVK3LFuUI55ipkc
         8JHQ==;
        dara=google.com
ARC-Authentication-Results: i=2; mx.google.com;
       dkim=permerror (no key for signature) header.i=@formulatedsolutions.com header.s=selector2 header.b=f9N8J0Vv;
       arc=pass (i=1 spf=pass spfdomain=formulatedsolutions.com dkim=pass dkdomain=formulatedsolutions.com dmarc=pass fromdomain=formulatedsolutions.com);
       spf=pass (google.com: domain of tbourdeau@formulatedsolutions.com designates 66.159.238.178 as permitted sender) smtp.mailfrom=tbourdeau@formulatedsolutions.com;
       dmarc=pass (p=QUARANTINE sp=REJECT dis=NONE) header.from=formulatedsolutions.com
Return-Path: <tbourdeau@formulatedsolutions.com>
Received: from mx0b-00976d01.pphosted.com (mx0b-00976d01.pphosted.com. [66.159.238.178])
        by mx.google.com with ESMTPS id 00721157ae682-79a903a312bsi1594257b3.7.2026.03.19.10.51.03
        for <tjphuhs@gmail.com>
        (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
        Thu, 19 Mar 2026 10:51:03 -0700 (PDT)
Received-SPF: pass (google.com: domain of tbourdeau@formulatedsolutions.com designates 66.159.238.178 as permitted sender) client-ip=66.159.238.178;
Authentication-Results: mx.google.com;
       dkim=permerror (no key for signature) header.i=@formulatedsolutions.com header.s=selector2 header.b=f9N8J0Vv;
       arc=pass (i=1 spf=pass spfdomain=formulatedsolutions.com dkim=pass dkdomain=formulatedsolutions.com dmarc=pass fromdomain=formulatedsolutions.com);
       spf=pass (google.com: domain of tbourdeau@formulatedsolutions.com designates 66.159.238.178 as permitted sender) smtp.mailfrom=tbourdeau@formulatedsolutions.com;
       dmarc=pass (p=QUARANTINE sp=REJECT dis=NONE) header.from=formulatedsolutions.com
Received: from pps.filterd (m0421396.ppops.net [127.0.0.1])
	by mx0b-00976d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62JH4m8c3187027
	for <tjphuhs@gmail.com>; Thu, 19 Mar 2026 17:51:02 GMT
Received: from dm5pr21cu001.outbound.protection.outlook.com (mail-centralusazon11021124.outbound.protection.outlook.com [52.101.62.124])
	by mx0b-00976d01.pphosted.com (PPS) with ESMTPS id 4cwkna2d4b-1
	(version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT)
	for <tjphuhs@gmail.com>; Thu, 19 Mar 2026 17:51:02 +0000 (GMT)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=Qm9bmNBkN+Qy6IinPXxi2cl5a8hisi94t4OlFT4oVPtiEGOvGwIlsUZT6ApQ93PqIJCen+x/j0nVy7tmEEqTSMrItxaFMCG6pLKYdFaJVtB/Ek9sShb/p+OngqghjBBvS4UxWsT5eeS0Fjy3kL49dpiaCrMl7lGcr8cIta94lW8XE8hDhOQ2D6RDme5ce7wQ75SfdR+f2YYAXqcTPyu+eZn9CPU0+RcW878fkJmGa1tV9NVAgnHBmkLVwIXvsWypH3XjTTHP9oZlZti/XtVtECq6xCg3AX5ZAUGnD5bPLKK2rnDsoakag4AMzzUNcu6T8bTU3ycaWOpQ4t3Yqu56fg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=Ceir7JsIzJWkLDePWhODIm+msgitfNDF7m9mVhSs7+M=;
 b=nQ3MR/9p/pBe1kWuAg9Pu9z86o4b68XnuCmRT0miGmhOiZw0EXgqn30hXpKDh/jmnOdMuQB5/xs/UzEOqUmZ4U2Im84kgcPM4Y6auJvweJtaLrM+d1lwjbCPgwQVmPeOI3LiUKx1rbE1NpcSBbVK0O7oMuagJIfvRzFFsdA6yirjC+XsUSTcJvASi5LMG2pwbI5RBXbEvd/UVNnk8RIoZ21YP58XRuu9fojExcbrvZpitxsYKWFFmnFhTaU5O8aM475GSdA8PBQa1ajFcoG4bWxI4dqkrZM6Cg0bPZll2BgNZfsXdvekD3pwIFYqoj68nJTtFyuLseihURke3PUe2Q==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=formulatedsolutions.com; dmarc=pass action=none
 header.from=formulatedsolutions.com; dkim=pass
 header.d=formulatedsolutions.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=formulatedsolutions.com; s=selector2;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Ceir7JsIzJWkLDePWhODIm+msgitfNDF7m9mVhSs7+M=;
 b=f9N8J0Vv1m675yv7sBmMNazwL30bFKGQqqbElu6MxlnjdVfcgiW+yeLMe6Oku6q5Qcr+8kSJvqjyCsqcdx/8rKLR4YYloxCrMt1m9A4fCcui2m8ajBWsCaIaxIi4++q1zwwWYwVoU3KrdBTQ8ayuYf/Px/Qo8QfZDxo272gOL6c=
Received: from PH7PR17MB5929.namprd17.prod.outlook.com (2603:10b6:510:158::14)
 by MN2PR17MB3727.namprd17.prod.outlook.com (2603:10b6:208:20e::23) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.19; Thu, 19 Mar
 2026 17:50:57 +0000
Received: from PH7PR17MB5929.namprd17.prod.outlook.com
 ([fe80::bbb5:69c:c575:b98d]) by PH7PR17MB5929.namprd17.prod.outlook.com
 ([fe80::bbb5:69c:c575:b98d%6]) with mapi id 15.20.9723.018; Thu, 19 Mar 2026
 17:50:57 +0000
From: Timothy Bourdeau <tbourdeau@formulatedsolutions.com>
To: "tjphuhs@gmail.com" <tjphuhs@gmail.com>
Subject: FW: 
Thread-Index: Ady3yCTfVUHtmn4vTP2lhmuOB1M75QAAJrDwAAALB+A=
Date: Thu, 19 Mar 2026 17:50:57 +0000
Message-ID:
 <PH7PR17MB59294F382DE65EA44D2C3642AF4FA@PH7PR17MB5929.namprd17.prod.outlook.com>
References:
 <PH7PR17MB592997EDEBFAADFA0F26072FAF4FA@PH7PR17MB5929.namprd17.prod.outlook.com>
 <PH7PR17MB5929C453F1C05B1099F4FAE7AF4FA@PH7PR17MB5929.namprd17.prod.outlook.com>
In-Reply-To:
 <PH7PR17MB5929C453F1C05B1099F4FAE7AF4FA@PH7PR17MB5929.namprd17.prod.outlook.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: yes
X-MS-TNEF-Correlator:
x-sigsync-processed: YesClient
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: PH7PR17MB5929:EE_|MN2PR17MB3727:EE_
x-ms-office365-filtering-correlation-id: b67f2e16-751e-40f3-5baa-08de85e01334
x-smart_host-processed: yes
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|3109299003|6049299003|7049299003|376014|366016|69100299015|1800799024|7053199007|56012099003|18002099003|22082099003|4053099003|4013099003|38070700021|13003099007|8096899003;
x-microsoft-antispam-message-info:
 aJ+9AH0pI1OsxbuNEaol/kT+ZmEw5GI3BxTXqeH99r3dpZJdkVnj6o8rYGvOgR73RFJXtR+RUA2C3qF4AmT3uLzgguadYj1hSnW9WWAdkktszanyQX4SNGZwCVIVzTUS4TtWtqPXG7as6HK1SQrRdH9Jg2YuvMqEi01oyeB06MjOdSOh0iIhnH5hpAZ5cjLeoCJCxpr3RkcRbU7SVa8e22CAxzvuAxOPdeuaanHvsCpauNITlkfGRSF03obRiLPcF6H7XsAWQUDngAxYPkm7mUOA8q4G+2d6dtvY3Se9kmpwtNMgKpK9Mu6JfNUzGUB+Qi0J52D/Lks4+tBp9ffvmR1nN6FxnqISqAVFz1EzKho5kO11hwvDTYI4WiXXLSmRTj8rGdkHbrvDDEILKtO4dyeS4cEN6uI6IoK2SR8t6SOv7KLbtsWGY/5OK38wYl69r5+Z4y2iUm9LTMHjxLa8DFVoohwRajEtWYlpZk9Yz7IqDy/b1+0X1m48QBluA0tfnnAbhuQ9UiQfbu5urRIH+LCz6aJISlxyyMHmEVxuJ1R+NyEu6/RPjEDJmmDyrus4dJgmYa3EbqPE+KlvmeQZT7kSpIvgNqhh0cmzw5CtMOwne7jSrds0waBAFcMAcfrjozstq81yQqrrbjx9/kzbuDelWuXEuASLxU4D4JB6DAbwt4CfpmlRoj4k0FeViQAuWTaUun3PlVpQLDOi+0AYXWPj6lfeA3+AuLH32AWoyGs=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH7PR17MB5929.namprd17.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(3109299003)(6049299003)(7049299003)(376014)(366016)(69100299015)(1800799024)(7053199007)(56012099003)(18002099003)(22082099003)(4053099003)(4013099003)(38070700021)(13003099007)(8096899003);DIR:OUT;SFP:1102;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?Yg90BP29KcNZACo96JqJnVAGgrXiGGtJz+lFN+yYu8QvWomonJvJdsXzmVHT?=
 =?us-ascii?Q?FnWJu+Cxm64hHy1lrhAIi+SLg7UvJB8FS98tqw7vtO7JtELG841K8hsl5cMo?=
 =?us-ascii?Q?Mr+FL0l8kUPpXQjzBhLnYzh0yRisEFtDV3Ze+NpVIJJSFbA6kTsG4MtZmDqP?=
 =?us-ascii?Q?ZCbZ/k7PEXVViaDQZsEnc6m5TzA3mz99UYAIOZmbPV++jKC2VFW23KLQHRoj?=
 =?us-ascii?Q?vQ2BQLRbq5GR6aCSnYqxZwHlbmzwFZDvbttrPhcXwwMkQ0z9HNXlj1CsHPnd?=
 =?us-ascii?Q?utjExj3//T43fvH38/c+ySPxcA4qa1AWPyTJCuqJfI+S2Hv1vCfeybc7SX6j?=
 =?us-ascii?Q?CBpBThpswFO+a3VctLluAMXKgWaUwlHNmuOXoMVQu2VqwXcjx5jIH6bioarA?=
 =?us-ascii?Q?EKwzg38zqEDkmYDq9g88v9JnE07SaIiEyJSq/Y0iq2pBrABC9QgAKxog6Y3K?=
 =?us-ascii?Q?25K69r/fNridyEdCBZdiTAfdwyZefwXZ1f+B56ozcj6+JcCjZo8aHnYLaYq/?=
 =?us-ascii?Q?uPJqYfCJgdFL2wuXXaaqjDIGzv5E/mpj/wlcToAeI0qvREAEcnb2ownDrh07?=
 =?us-ascii?Q?eQ73AQLv2sr2t0muL0u6QOhQdbyfmw8na8Sh3TymqIhx9WIYYFOVFtzET0la?=
 =?us-ascii?Q?FPBDN6W0p2ykv/lKaP3JSt0ARgmEPivw62XjBo/quYOd7TXJSTBPrtnYVxNn?=
 =?us-ascii?Q?bfq5TSwfwug1jqPyKtjjQ8/f2VEG7dP0hLmmDc5D1bHazlp45ENY0tMMkDDl?=
 =?us-ascii?Q?K5kghoF7pe3jJ1TvoDH/wHRGJgdsiMkNqs52Zkg1nwrVOcCOV7rgiD5pmMIr?=
 =?us-ascii?Q?y91Zcq61nbZi61irkFXdoSF7YnH3ZZ+rCQ8ABoe3i3ByUPnk6uJ3DxaopqKW?=
 =?us-ascii?Q?Bh8befZQTRXzcFA7a+xAV9BiuNKtWWqVuttslAdWEjP6kjODjZItuGkgQF+F?=
 =?us-ascii?Q?YUpvw6gzkAhWTWWJSkWKc5Ijwn89pqhfLWHdeWAOQVBQCkvaAgMRJ99kxNbN?=
 =?us-ascii?Q?FkjbpKRalxpyLOurMHB8WbJM+b5ACT2ICKhb9rVMBEbD5zL9OpIAF2gXDHEL?=
 =?us-ascii?Q?91HMhnkKqtLzWgGN3lJQfvEaP8nsYUm+u0Rsu57pGB+IP2Koi0rbnHVH2RdS?=
 =?us-ascii?Q?pDI5aVGiG2BhAHN/YHSFdpl+EJPvKcpPSVQWzrtgzv+PPQRn0qJPmSA+IwOS?=
 =?us-ascii?Q?z0mbuAisd2PMu05ZI2E2U3pWC1T1g7YVI/mhZs3M/8G/xpHLP3yv6l01xDeA?=
 =?us-ascii?Q?XseLm4NcHZlQQFPNiHuaNhgCQVy2h2JVFCQTj2mezCly/EYWHLuJUfwuh/Vc?=
 =?us-ascii?Q?nKaDZ19mYtBkUusSZZsGWDTQYeTfZMy7XWTAEeVed57Vmrhh27PtSTA4VfcH?=
 =?us-ascii?Q?Kdp5DsHGVvBLkTQ8VHaM8WVWbIt7oqNIrufFVKrkWlkDpES3htPyHcn+oGi8?=
 =?us-ascii?Q?FlURJmUr+nw5PekFwWI4i4TN+Egai6FjMCEe1cVSK8H2VtpymlZek47CICJ2?=
 =?us-ascii?Q?XPgTJlofd78+dde2IJxntia93hC+C6uCBqQvIAPHoKq14iOUyTHoGErbt+DK?=
 =?us-ascii?Q?qhAzkqS3vtXCpM9gBQMvAxeD74gBePT55D04IqRqh5qjQE95Tdd8DpMEPE08?=
 =?us-ascii?Q?tuB4S0FhfVvkuwE6W6gTuTmx6lNDqjWO2XsTnR/cLKMpg2rdgJzTQmKFWhoy?=
 =?us-ascii?Q?HWuJmVwJDybXk0fMXEeHVEJ0h0l1OABkSKlUGST79x0Oq1fSW+2hFzwzGJpO?=
 =?us-ascii?Q?zbgu4ngOdeEjHpDv10iZ2yt1xFkEPmQ=3D?=
Content-Type: multipart/mixed;
	boundary="_004_PH7PR17MB59294F382DE65EA44D2C3642AF4FAPH7PR17MB5929namp_"
MIME-Version: 1.0
X-Exchange-RoutingPolicyChecked:
	toYt4WmBWLNzM7YmOEOst/Xx8RHeQc1IDkexstVMN9+QhcpDwNEjRSq3fwYtEYpg9FwlzXE/rB0k2Ebk3AUYh6gPxqYqT2tdIBUU13N4FWhwUmKQ4mqr0XB6vtwTXdI6KU4iQzTzORwfe+EGyWDq4tJKLmKAynWUR3To94c8+mbQp04WumoGf9pcYHVRj8K6utrkVBQpNxBFd+GqdpD6lxFHfsclJ0/rt/9K1D1aKq+ZlHs6xrH9yC6JIyTD7HaNLE+elsa+TkBd1gSgeFbdp0RdxGUX22ntRVftUcfYDrfl3+wAGIWNRsSe5c8QJj/PRcZbbo05qy7n2ApzD0l8eg==
X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0:
	xvZ3bBmZtO7C4k3CRwwrXp4skKeOZJvuPCdQ9HswbGpHzZWRHHhIRWThs9Sq37D8UKIbPJux6BNRjVrHm9VQRZnq1m5YN65l+QXb8tZVFv1X5dlQTRkJiyA8zsJfaxOer03cYiUdL+Ouv0szmyYXrs7df1bcUjo9N7hRbDzkcuatZJW3qFYMJT70jZOkS9lRlKSu+imx4mmV+0ITF9SNaYBFoKo14hPdbYbiatgIVaU/Q4LOMnz/SOGULBG96GpDdiqw2yaFg4KoSL7iZvTEYVC0B6i1E8C1zc9IJOWGCdw+2AxzP+1/33i01GWq1FoZJC1skJ1FXakM++b1YbPFo9swjATFRWwW0h5F4BeM+dyXqKF1Nd3GN8khhJtnsJ49QC5S0jcZ+teONvhIYQ/K2hJUrZcG5aJJ7nXeDSQHFz7yUfGXwLpRGwGIA69VGmLxjfB611oDvvF3wlUl7VUXnO+ubgxe/YBKdaEVD3QEu/5LFHFAUXJjKegA66AArFNqVgu5O0XKSaPq2h7Qihws+b03Kavo3rNg2lZHmYEY7RDQK0UMkqHJS3tHfk2L8iGHRlZH97btT/7X2/v4znZS4JuuYfMydlNRNI9iyAK+th/E1gs/nLDfbIiIdck04Xp3
X-OriginatorOrg: formulatedsolutions.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: PH7PR17MB5929.namprd17.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: b67f2e16-751e-40f3-5baa-08de85e01334
X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Mar 2026 17:50:57.3317
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: bb3a1915-8313-4114-ade8-7268361e2953
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: dBn7yX1PfYI1GvsvlBTMlj3Kc24e4KDIqOyfWI7NGxSIhSrPJGlqIOl7nD7as1DoKUamdxYIqFjWtAOIetzia2LlAaLjZU78dQx1z8yU7DTFobOADoFEajEYnU+Iirn7
X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR17MB3727
X-Proofpoint-GUID: skUfVWiAghj3TTZsebN2VGdIZ0TfUmHj
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzE5MDE0MiBTYWx0ZWRfX22HhIANsijJJ
 aekSxaSsJ2x2t60XOoH39luhWBHjYg/UhlcDRfqr2aNmdNGcsFUEaKDYwfZaV1jcV9qcSiyPo8d
 H4miP4CB9EPQYO+O+96tnis9xOZbkO9klHtcWfnQQhoGVKp8HHhDXjZf6JnwF0I2Ontqhl2DNZm
 EndRTg3cR7dDpMnuYXz4fMrB/wA2xcADERfYmTk7pvRFFX4g3daS2SYxOsZUYE3lmlMo5yuNu+T
 9eKmVHDunR9FGipQ91sPcTjXxuH729jgnRw7MD0XwRqrwzeBj4FlZqbDTMI3vLUNwx4nNp3aFKs
 h7AdY3RzLwnpw7D/14+GxlhVPWL2Uc2pMxkHBgBhFFbLR2Vwh4WkhB7gtQ1wFmiOwJ4tYX3B3Z/
 IfaLF4Wdg/iQOkgPmmyWb3EvTt3FnUd4znv18DW15ozzJEpl/VJplZiC9yRiLkpARZ9B+VFPasv
 377FfrSOAT9JAYUTbmQ==
X-Authority-Analysis: v=2.4 cv=CecFJbrl c=1 sm=1 tr=0 ts=69bc3786 cx=c_pps
 a=xVCXbABICjn79FXy6fcvAA==:117 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19
 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=Yq5XynenixoA:10
 a=OSPmvBFmqhQA:10 a=VkNPw1HP01LnGYTKEx00:22 a=eDZDj-VGFv1wq5J0CQ-2:22
 a=PeKYsRNyYwFh6lHeL2Ys:22 a=0q0zR5xjAAAA:8 a=9nYebtllAAAA:8 a=pGLkceISAAAA:8
 a=A2gkqye-FDafOeOtq6YA:9 a=lqcHg5cX4UMA:10 a=CjuIK1q_8ugA:10 a=yMhMjlubAAAA:8
 a=SSmOFEACAAAA:8 a=lnOd0ZVR5Q22_8YN:21 a=gKO2Hq4RSVkA:10 a=UiCQ7L4-1S4A:10
 a=hTZeC7Yk6K0A:10 a=frz4AuCg-hUA:10 a=NMttJ6IE-1x2rEfsAboA:9
 a=0zUajL1KmtYA:10 a=AAax9OWoP4y68yJDFtqK:22 a=wkLTPLz0Iho3OJW96VTD:22
X-Proofpoint-ORIG-GUID: skUfVWiAghj3TTZsebN2VGdIZ0TfUmHj
X-Proofpoint-Virus-Version: vendor=baseguard
 engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49
 definitions=2026-03-19_02,2026-03-19_05,2025-10-01_01
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
 clxscore=1015 priorityscore=1501 spamscore=0 phishscore=0 lowpriorityscore=0
 impostorscore=0 bulkscore=0 malwarescore=0 adultscore=0 suspectscore=0
 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0
 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603190142

--_004_PH7PR17MB59294F382DE65EA44D2C3642AF4FAPH7PR17MB5929namp_
Content-Type: multipart/alternative;
	boundary="_000_PH7PR17MB59294F382DE65EA44D2C3642AF4FAPH7PR17MB5929namp_"

--_000_PH7PR17MB59294F382DE65EA44D2C3642AF4FAPH7PR17MB5929namp_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable




Timothy Bourdeau | Manager IPQA | Formulated Solutions, LLC | Phone: 727-37=
3-3970<tel:727-373-3970> |
Site Address: 11775 Starkey Road, Largo, FL 33773 | Website: www.formulated=
solutions.com<https://www.formulatedsolutions.com>
[logo]
[https://azureimages.sigsync.com/sigsync/14d9c828ea48f6c457a1f460ec1318fa_c=
osmoprofmiami2026email10.png]
[https://azureimages.sigsync.com/sigsync/14d9c828ea48f6c457a1f460ec1318fa_1=
770833513.png]
This electronic message transmission contains information from Formulated S=
olutions, LLC and is intended only for the use of the individual or entity =
to which it is addressed and may contain information that is privileged, co=
nfidential and exempt from disclosure under applicable law. If the reader o=
f this message is not the intended recipient, you are hereby notified that =
any dissemination or distribution of this communication to other than the i=
ntended recipient is strictly prohibited. If you have received this communi=
cation in error, please notify us immediately by collect telephone at (727)=
 373-3970 or electronic mail (privacy@formulatedsolutions.com<https://priva=
cy@formulatedsolutions.com>)
Thank you.

From: Timothy Bourdeau <tbourdeau@formulatedsolutions.com>
Sent: Thursday, March 19, 2026 1:50 PM
To: Timothy Bourdeau <tbourdeau@formulatedsolutions.com>
Subject: RE:




Timothy Bourdeau | Manager IPQA | Formulated Solutions, LLC | Phone: 727-37=
3-3970<tel:727-373-3970> |
Site Address: 11775 Starkey Road, Largo, FL 33773 | Website: www.formulated=
solutions.com<https://www.formulatedsolutions.com>
[logo]
[https://azureimages.sigsync.com/sigsync/14d9c828ea48f6c457a1f460ec1318fa_c=
osmoprofmiami2026email10.png]
[https://azureimages.sigsync.com/sigsync/14d9c828ea48f6c457a1f460ec1318fa_1=
770833513.png]
This electronic message transmission contains information from Formulated S=
olutions, LLC and is intended only for the use of the individual or entity =
to which it is addressed and may contain information that is privileged, co=
nfidential and exempt from disclosure under applicable law. If the reader o=
f this message is not the intended recipient, you are hereby notified that =
any dissemination or distribution of this communication to other than the i=
ntended recipient is strictly prohibited. If you have received this communi=
cation in error, please notify us immediately by collect telephone at (727)=
 373-3970 or electronic mail (privacy@formulatedsolutions.com<https://priva=
cy@formulatedsolutions.com>)
Thank you.

From: Timothy Bourdeau
Sent: Thursday, March 19, 2026 1:45 PM
To: 'tjphuhs@gmail.com' <tjphuhs@gmail.com<mailto:tjphuhs@gmail.com>>
Subject:




Timothy Bourdeau | Manager IPQA | Formulated Solutions, LLC | Phone: 727-37=
3-3970<tel:727-373-3970> |
Site Address: 11775 Starkey Road, Largo, FL 33773 | Website: www.formulated=
solutions.com<https://www.formulatedsolutions.com>
[logo]
[https://azureimages.sigsync.com/sigsync/14d9c828ea48f6c457a1f460ec1318fa_c=
osmoprofmiami2026email10.png]
[https://azureimages.sigsync.com/sigsync/14d9c828ea48f6c457a1f460ec1318fa_1=
770833513.png]
This electronic message transmission contains information from Formulated S=
olutions, LLC and is intended only for the use of the individual or entity =
to which it is addressed and may contain information that is privileged, co=
nfidential and exempt from disclosure under applicable law. If the reader o=
f this message is not the intended recipient, you are hereby notified that =
any dissemination or distribution of this communication to other than the i=
ntended recipient is strictly prohibited. If you have received this communi=
cation in error, please notify us immediately by collect telephone at (727)=
 373-3970 or electronic mail (privacy@formulatedsolutions.com<https://priva=
cy@formulatedsolutions.com>)
Thank you.


--_000_PH7PR17MB59294F382DE65EA44D2C3642AF4FAPH7PR17MB5929namp_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=
osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=
//www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"=
>
<meta name=3D"Generator" content=3D"Microsoft Word 15 (filtered medium)">
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
	{font-family:Aptos;}
@font-face
	{font-family:"Trebuchet MS";
	panose-1:2 11 6 3 2 2 2 2 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0in;
	font-size:12.0pt;
	font-family:"Aptos",sans-serif;
	mso-ligatures:standardcontextual;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:#467886;
	text-decoration:underline;}
span.EmailStyle20
	{mso-style-type:personal-reply;
	font-family:"Aptos",sans-serif;
	color:windowtext;}
.MsoChpDefault
	{mso-style-type:export-only;
	font-size:10.0pt;
	mso-ligatures:none;}
@page WordSection1
	{size:8.5in 11.0in;
	margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=3D"EN-US" link=3D"#467886" vlink=3D"#96607D" style=3D"word-wrap:=
break-word">
<div class=3D"WordSection1">
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<div>
<table class=3D"MsoNormalTable" border=3D"0" cellspacing=3D"0" cellpadding=
=3D"0" width=3D"100%" style=3D"width:100.0%;border-collapse:collapse">
<tbody>
<tr>
<td style=3D"padding:0in 0in 0in 0in">
<table class=3D"MsoNormalTable" border=3D"0" cellspacing=3D"0" cellpadding=
=3D"0" title=3D"Vertical Space" width=3D"22" style=3D"width:16.5pt;border-c=
ollapse:collapse">
<tbody>
<tr>
<td valign=3D"top" style=3D"padding:7.5pt 0in 0in 0in"></td>
</tr>
</tbody>
</table>
<p class=3D"MsoNormal"><span style=3D"display:none"><o:p>&nbsp;</o:p></span=
></p>
<table class=3D"MsoNormalTable" border=3D"0" cellspacing=3D"0" cellpadding=
=3D"0" title=3D"new Vertical Space" width=3D"22" style=3D"width:16.5pt;bord=
er-collapse:collapse" id=3D"iyj35">
<tbody>
<tr>
<td valign=3D"top" style=3D"padding:7.5pt 0in 0in 0in"></td>
</tr>
</tbody>
</table>
<p class=3D"MsoNormal"><span style=3D"font-size:10.5pt;font-family:&quot;Tr=
ebuchet MS&quot;,sans-serif;color:black">Timothy&nbsp;Bourdeau</span>&nbsp;=
<span style=3D"font-size:10.5pt;font-family:&quot;Trebuchet MS&quot;,sans-s=
erif;color:black">|</span>&nbsp;<span style=3D"font-size:10.5pt;font-family=
:&quot;Trebuchet MS&quot;,sans-serif;color:black">Manager&nbsp;IPQA</span>&=
nbsp;<span style=3D"font-size:10.5pt;color:black">|</span>&nbsp;<b><span st=
yle=3D"font-size:10.5pt;font-family:&quot;Trebuchet MS&quot;,sans-serif;col=
or:black">Formulated&nbsp;Solutions,&nbsp;LLC</span></b>&nbsp;<span style=
=3D"font-size:10.5pt;font-family:&quot;Trebuchet MS&quot;,sans-serif;color:=
black">|</span>&nbsp;<span style=3D"font-size:10.5pt;font-family:&quot;Treb=
uchet MS&quot;,sans-serif;color:black">Phone:</span>&nbsp;<a href=3D"tel:72=
7-373-3970" target=3D"_blank"><span style=3D"font-size:10.5pt;font-family:&=
quot;Trebuchet MS&quot;,sans-serif;color:black;text-decoration:none">727-37=
3-3970</span></a>&nbsp;<span style=3D"font-size:10.5pt;font-family:&quot;Tr=
ebuchet MS&quot;,sans-serif;color:black">|</span>&nbsp;<o:p></o:p></p>
<table class=3D"MsoNormalTable" border=3D"0" cellspacing=3D"0" cellpadding=
=3D"0" title=3D"new Vertical Space" width=3D"22" style=3D"width:16.5pt;bord=
er-collapse:collapse" id=3D"iyj35-2">
<tbody>
<tr>
<td valign=3D"top" style=3D"padding:.75pt 0in 0in 0in"></td>
</tr>
</tbody>
</table>
<p class=3D"MsoNormal"><b><span style=3D"font-size:10.5pt;font-family:&quot=
;Trebuchet MS&quot;,sans-serif;color:black">Site&nbsp;Address:</span></b>&n=
bsp;<span style=3D"font-size:10.5pt;font-family:&quot;Trebuchet MS&quot;,sa=
ns-serif;color:black">11775&nbsp;Starkey&nbsp;Road,&nbsp;Largo,&nbsp;FL&nbs=
p;33773</span>&nbsp;<span style=3D"font-size:10.5pt;font-family:&quot;Trebu=
chet MS&quot;,sans-serif;color:black">|</span>&nbsp;<b><span style=3D"font-=
size:10.5pt;font-family:&quot;Trebuchet MS&quot;,sans-serif;color:black">We=
bsite:</span></b><a href=3D"https://www.formulatedsolutions.com" target=3D"=
_blank"><span style=3D"color:blue">&nbsp;www.formulatedsolutions.com</span>=
</a><o:p></o:p></p>
<table class=3D"MsoNormalTable" border=3D"0" cellspacing=3D"0" cellpadding=
=3D"0" width=3D"100%" style=3D"width:100.0%;border-collapse:collapse" id=3D=
"iyj35-2-2-2">
<tbody>
<tr style=3D"height:95.25pt" id=3D"mt86a-2">
<td width=3D"411" valign=3D"top" style=3D"width:308.25pt;padding:7.5pt 0in =
0in 0in;height:95.25pt" id=3D"eqr4u-2">
<p class=3D"MsoNormal"><span style=3D"font-size:10.5pt;font-family:&quot;Ca=
libri&quot;,sans-serif;color:black;mso-ligatures:none"><img border=3D"0" wi=
dth=3D"401" height=3D"117" style=3D"width:4.177in;height:1.2187in" id=3D"_x=
0000_i1033" src=3D"https://azureimages.sigsync.com/sigsync/14d9c828ea48f6c4=
57a1f460ec1318fa_14d9c828ea48f6c457a1f460ec1318fa_17407701301.png" alt=3D"l=
ogo"></span><span style=3D"font-size:10.5pt;font-family:&quot;Calibri&quot;=
,sans-serif;color:black"><o:p></o:p></span></p>
</td>
</tr>
<tr id=3D"lt2la-2">
<td width=3D"100%" valign=3D"top" style=3D"width:100.0%;padding:3.75pt 0in =
0in 0in" id=3D"bg52l-2">
<p class=3D"MsoNormal"><span style=3D"font-size:10.5pt;font-family:&quot;Ca=
libri&quot;,sans-serif;color:black;mso-ligatures:none"><img border=3D"0" wi=
dth=3D"401" height=3D"117" style=3D"width:4.177in;height:1.2187in" id=3D"_x=
0000_i1032" src=3D"https://azureimages.sigsync.com/sigsync/14d9c828ea48f6c4=
57a1f460ec1318fa_cosmoprofmiami2026email10.png"></span><span style=3D"font-=
size:10.5pt;font-family:&quot;Calibri&quot;,sans-serif;color:black"><o:p></=
o:p></span></p>
</td>
</tr>
<tr id=3D"k2n99-2">
<td width=3D"100%" valign=3D"top" style=3D"width:100.0%;padding:1.5pt 0in 0=
in 0in" id=3D"ngs8l-2">
<p class=3D"MsoNormal"><span style=3D"font-size:10.5pt;font-family:&quot;Ca=
libri&quot;,sans-serif;color:black;mso-ligatures:none"><img border=3D"0" wi=
dth=3D"401" height=3D"117" style=3D"width:4.177in;height:1.2187in" id=3D"_x=
0000_i1031" src=3D"https://azureimages.sigsync.com/sigsync/14d9c828ea48f6c4=
57a1f460ec1318fa_1770833513.png"></span><span style=3D"font-size:10.5pt;fon=
t-family:&quot;Calibri&quot;,sans-serif;color:black"><o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-align:justify"><span style=3D"font-siz=
e:10.0pt;font-family:&quot;Trebuchet MS&quot;,sans-serif;color:#8E8A8A">Thi=
s electronic message transmission contains information from Formulated Solu=
tions, LLC and is intended only for the use of the
 individual or entity to which it is addressed and may contain information =
that is privileged, confidential and exempt from disclosure under applicabl=
e law. If the reader of this message is not the intended recipient, you are=
 hereby notified that any dissemination
 or distribution of this communication to other than the intended recipient=
 is strictly prohibited. If you have received this communication in error, =
please notify us immediately by collect telephone at (727) 373-3970 or elec=
tronic mail (</span><span style=3D"font-size:10.0pt;font-family:&quot;Trebu=
chet MS&quot;,sans-serif;color:#8E8A8A"><a href=3D"https://privacy@formulat=
edsolutions.com"><span style=3D"font-family:&quot;Aptos&quot;,sans-serif;co=
lor:blue;text-decoration:none">privacy@formulatedsolutions.com</span></a></=
span><span style=3D"font-size:10.0pt;font-family:&quot;Trebuchet MS&quot;,s=
ans-serif;color:#8E8A8A">)</span><span style=3D"font-size:10.0pt;font-famil=
y:&quot;Trebuchet MS&quot;,sans-serif;color:#8E8A8A"><o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-size:10.0pt;font-family:&quot;Tr=
ebuchet MS&quot;,sans-serif;color:#8E8A8A">Thank&nbsp;you.</span><span styl=
e=3D"font-size:10.5pt;font-family:&quot;Calibri&quot;,sans-serif;color:blac=
k"><o:p></o:p></span></p>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<div>
<div style=3D"border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in =
0in 0in">
<p class=3D"MsoNormal"><b><span style=3D"font-size:11.0pt;font-family:&quot=
;Calibri&quot;,sans-serif;mso-ligatures:none">From:</span></b><span style=
=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;mso-ligatur=
es:none"> Timothy Bourdeau &lt;tbourdeau@formulatedsolutions.com&gt;
<br>
<b>Sent:</b> Thursday, March 19, 2026 1:50 PM<br>
<b>To:</b> Timothy Bourdeau &lt;tbourdeau@formulatedsolutions.com&gt;<br>
<b>Subject:</b> RE: <o:p></o:p></span></p>
</div>
</div>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<div>
<table class=3D"MsoNormalTable" border=3D"0" cellspacing=3D"0" cellpadding=
=3D"0" width=3D"100%" style=3D"width:100.0%;border-collapse:collapse">
<tbody>
<tr>
<td style=3D"padding:0in 0in 0in 0in">
<table class=3D"MsoNormalTable" border=3D"0" cellspacing=3D"0" cellpadding=
=3D"0" title=3D"Vertical Space" width=3D"22" style=3D"width:16.5pt;border-c=
ollapse:collapse">
<tbody>
<tr>
<td valign=3D"top" style=3D"padding:7.5pt 0in 0in 0in"></td>
</tr>
</tbody>
</table>
<p class=3D"MsoNormal"><span style=3D"display:none"><o:p>&nbsp;</o:p></span=
></p>
<table class=3D"MsoNormalTable" border=3D"0" cellspacing=3D"0" cellpadding=
=3D"0" title=3D"new Vertical Space" width=3D"22" style=3D"width:16.5pt;bord=
er-collapse:collapse" id=3D"iyj35">
<tbody>
<tr>
<td valign=3D"top" style=3D"padding:7.5pt 0in 0in 0in"></td>
</tr>
</tbody>
</table>
<p class=3D"MsoNormal"><span style=3D"font-size:10.5pt;font-family:&quot;Tr=
ebuchet MS&quot;,sans-serif;color:black">Timothy&nbsp;Bourdeau</span>&nbsp;=
<span style=3D"font-size:10.5pt;font-family:&quot;Trebuchet MS&quot;,sans-s=
erif;color:black">|</span>&nbsp;<span style=3D"font-size:10.5pt;font-family=
:&quot;Trebuchet MS&quot;,sans-serif;color:black">Manager&nbsp;IPQA</span>&=
nbsp;<span style=3D"font-size:10.5pt;color:black">|</span>&nbsp;<b><span st=
yle=3D"font-size:10.5pt;font-family:&quot;Trebuchet MS&quot;,sans-serif;col=
or:black">Formulated&nbsp;Solutions,&nbsp;LLC</span></b>&nbsp;<span style=
=3D"font-size:10.5pt;font-family:&quot;Trebuchet MS&quot;,sans-serif;color:=
black">|</span>&nbsp;<span style=3D"font-size:10.5pt;font-family:&quot;Treb=
uchet MS&quot;,sans-serif;color:black">Phone:</span>&nbsp;<a href=3D"tel:72=
7-373-3970" target=3D"_blank"><span style=3D"font-size:10.5pt;font-family:&=
quot;Trebuchet MS&quot;,sans-serif;color:black;text-decoration:none">727-37=
3-3970</span></a>&nbsp;<span style=3D"font-size:10.5pt;font-family:&quot;Tr=
ebuchet MS&quot;,sans-serif;color:black">|</span>&nbsp;<o:p></o:p></p>
<table class=3D"MsoNormalTable" border=3D"0" cellspacing=3D"0" cellpadding=
=3D"0" title=3D"new Vertical Space" width=3D"22" style=3D"width:16.5pt;bord=
er-collapse:collapse" id=3D"iyj35-2">
<tbody>
<tr>
<td valign=3D"top" style=3D"padding:.75pt 0in 0in 0in"></td>
</tr>
</tbody>
</table>
<p class=3D"MsoNormal"><b><span style=3D"font-size:10.5pt;font-family:&quot=
;Trebuchet MS&quot;,sans-serif;color:black">Site&nbsp;Address:</span></b>&n=
bsp;<span style=3D"font-size:10.5pt;font-family:&quot;Trebuchet MS&quot;,sa=
ns-serif;color:black">11775&nbsp;Starkey&nbsp;Road,&nbsp;Largo,&nbsp;FL&nbs=
p;33773</span>&nbsp;<span style=3D"font-size:10.5pt;font-family:&quot;Trebu=
chet MS&quot;,sans-serif;color:black">|</span>&nbsp;<b><span style=3D"font-=
size:10.5pt;font-family:&quot;Trebuchet MS&quot;,sans-serif;color:black">We=
bsite:</span></b><a href=3D"https://www.formulatedsolutions.com" target=3D"=
_blank"><span style=3D"color:blue">&nbsp;www.formulatedsolutions.com</span>=
</a><o:p></o:p></p>
<table class=3D"MsoNormalTable" border=3D"0" cellspacing=3D"0" cellpadding=
=3D"0" width=3D"100%" style=3D"width:100.0%;border-collapse:collapse" id=3D=
"iyj35-2-2-2">
<tbody>
<tr style=3D"height:95.25pt" id=3D"mt86a-2">
<td width=3D"411" valign=3D"top" style=3D"width:308.25pt;padding:7.5pt 0in =
0in 0in;height:95.25pt" id=3D"eqr4u-2">
<p class=3D"MsoNormal"><span style=3D"font-size:10.5pt;font-family:&quot;Ca=
libri&quot;,sans-serif;color:black;mso-ligatures:none"><img border=3D"0" wi=
dth=3D"401" height=3D"117" style=3D"width:4.177in;height:1.2187in" id=3D"_x=
0000_i1030" src=3D"https://azureimages.sigsync.com/sigsync/14d9c828ea48f6c4=
57a1f460ec1318fa_14d9c828ea48f6c457a1f460ec1318fa_17407701301.png" alt=3D"l=
ogo"></span><span style=3D"font-size:10.5pt;font-family:&quot;Calibri&quot;=
,sans-serif;color:black"><o:p></o:p></span></p>
</td>
</tr>
<tr id=3D"lt2la-2">
<td width=3D"100%" valign=3D"top" style=3D"width:100.0%;padding:3.75pt 0in =
0in 0in" id=3D"bg52l-2">
<p class=3D"MsoNormal"><span style=3D"font-size:10.5pt;font-family:&quot;Ca=
libri&quot;,sans-serif;color:black;mso-ligatures:none"><img border=3D"0" wi=
dth=3D"401" height=3D"117" style=3D"width:4.177in;height:1.2187in" id=3D"_x=
0000_i1029" src=3D"https://azureimages.sigsync.com/sigsync/14d9c828ea48f6c4=
57a1f460ec1318fa_cosmoprofmiami2026email10.png"></span><span style=3D"font-=
size:10.5pt;font-family:&quot;Calibri&quot;,sans-serif;color:black"><o:p></=
o:p></span></p>
</td>
</tr>
<tr id=3D"k2n99-2">
<td width=3D"100%" valign=3D"top" style=3D"width:100.0%;padding:1.5pt 0in 0=
in 0in" id=3D"ngs8l-2">
<p class=3D"MsoNormal"><span style=3D"font-size:10.5pt;font-family:&quot;Ca=
libri&quot;,sans-serif;color:black;mso-ligatures:none"><img border=3D"0" wi=
dth=3D"401" height=3D"117" style=3D"width:4.177in;height:1.2187in" id=3D"_x=
0000_i1028" src=3D"https://azureimages.sigsync.com/sigsync/14d9c828ea48f6c4=
57a1f460ec1318fa_1770833513.png"></span><span style=3D"font-size:10.5pt;fon=
t-family:&quot;Calibri&quot;,sans-serif;color:black"><o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-align:justify"><span style=3D"font-siz=
e:10.0pt;font-family:&quot;Trebuchet MS&quot;,sans-serif;color:#8E8A8A">Thi=
s electronic message transmission contains information from Formulated Solu=
tions, LLC and is intended only for the use of the
 individual or entity to which it is addressed and may contain information =
that is privileged, confidential and exempt from disclosure under applicabl=
e law. If the reader of this message is not the intended recipient, you are=
 hereby notified that any dissemination
 or distribution of this communication to other than the intended recipient=
 is strictly prohibited. If you have received this communication in error, =
please notify us immediately by collect telephone at (727) 373-3970 or elec=
tronic mail (<a href=3D"https://privacy@formulatedsolutions.com"><span styl=
e=3D"font-family:&quot;Aptos&quot;,sans-serif;color:blue;text-decoration:no=
ne">privacy@formulatedsolutions.com</span></a>)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-size:10.0pt;font-family:&quot;Tr=
ebuchet MS&quot;,sans-serif;color:#8E8A8A">Thank&nbsp;you.</span><span styl=
e=3D"font-size:10.5pt;font-family:&quot;Calibri&quot;,sans-serif;color:blac=
k"><o:p></o:p></span></p>
</td>
</tr>
</tbody>
</table>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p></o:p></span=
></p>
</td>
</tr>
</tbody>
</table>
</div>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<div>
<div style=3D"border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in =
0in 0in">
<p class=3D"MsoNormal"><b><span style=3D"font-size:11.0pt;font-family:&quot=
;Calibri&quot;,sans-serif;mso-ligatures:none">From:</span></b><span style=
=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;mso-ligatur=
es:none"> Timothy Bourdeau
<br>
<b>Sent:</b> Thursday, March 19, 2026 1:45 PM<br>
<b>To:</b> 'tjphuhs@gmail.com' &lt;<a href=3D"mailto:tjphuhs@gmail.com">tjp=
huhs@gmail.com</a>&gt;<br>
<b>Subject:</b> <o:p></o:p></span></p>
</div>
</div>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<table class=3D"MsoNormalTable" border=3D"0" cellspacing=3D"0" cellpadding=
=3D"0" width=3D"100%" style=3D"width:100.0%;border-collapse:collapse">
<tbody>
<tr>
<td style=3D"padding:0in 0in 0in 0in">
<table class=3D"MsoNormalTable" border=3D"0" cellspacing=3D"0" cellpadding=
=3D"0" title=3D"Vertical Space" width=3D"22" style=3D"width:16.5pt;border-c=
ollapse:collapse">
<tbody>
<tr>
<td valign=3D"top" style=3D"padding:7.5pt 0in 0in 0in"></td>
</tr>
</tbody>
</table>
<p class=3D"MsoNormal"><span style=3D"display:none"><o:p>&nbsp;</o:p></span=
></p>
<table class=3D"MsoNormalTable" border=3D"0" cellspacing=3D"0" cellpadding=
=3D"0" title=3D"new Vertical Space" width=3D"22" style=3D"width:16.5pt;bord=
er-collapse:collapse" id=3D"iyj35">
<tbody>
<tr>
<td valign=3D"top" style=3D"padding:7.5pt 0in 0in 0in"></td>
</tr>
</tbody>
</table>
<p class=3D"MsoNormal"><span style=3D"font-size:10.5pt;font-family:&quot;Tr=
ebuchet MS&quot;,sans-serif;color:black">Timothy&nbsp;Bourdeau</span>&nbsp;=
<span style=3D"font-size:10.5pt;font-family:&quot;Trebuchet MS&quot;,sans-s=
erif;color:black">|</span>&nbsp;<span style=3D"font-size:10.5pt;font-family=
:&quot;Trebuchet MS&quot;,sans-serif;color:black">Manager&nbsp;IPQA</span>&=
nbsp;<span style=3D"font-size:10.5pt;color:black">|</span>&nbsp;<b><span st=
yle=3D"font-size:10.5pt;font-family:&quot;Trebuchet MS&quot;,sans-serif;col=
or:black">Formulated&nbsp;Solutions,&nbsp;LLC</span></b>&nbsp;<span style=
=3D"font-size:10.5pt;font-family:&quot;Trebuchet MS&quot;,sans-serif;color:=
black">|</span>&nbsp;<span style=3D"font-size:10.5pt;font-family:&quot;Treb=
uchet MS&quot;,sans-serif;color:black">Phone:</span>&nbsp;<a href=3D"tel:72=
7-373-3970" target=3D"_blank"><span style=3D"font-size:10.5pt;font-family:&=
quot;Trebuchet MS&quot;,sans-serif;color:black;text-decoration:none">727-37=
3-3970</span></a>&nbsp;<span style=3D"font-size:10.5pt;font-family:&quot;Tr=
ebuchet MS&quot;,sans-serif;color:black">|</span>&nbsp;<o:p></o:p></p>
<table class=3D"MsoNormalTable" border=3D"0" cellspacing=3D"0" cellpadding=
=3D"0" title=3D"new Vertical Space" width=3D"22" style=3D"width:16.5pt;bord=
er-collapse:collapse" id=3D"iyj35-2">
<tbody>
<tr>
<td valign=3D"top" style=3D"padding:.75pt 0in 0in 0in"></td>
</tr>
</tbody>
</table>
<p class=3D"MsoNormal"><b><span style=3D"font-size:10.5pt;font-family:&quot=
;Trebuchet MS&quot;,sans-serif;color:black">Site&nbsp;Address:</span></b>&n=
bsp;<span style=3D"font-size:10.5pt;font-family:&quot;Trebuchet MS&quot;,sa=
ns-serif;color:black">11775&nbsp;Starkey&nbsp;Road,&nbsp;Largo,&nbsp;FL&nbs=
p;33773</span>&nbsp;<span style=3D"font-size:10.5pt;font-family:&quot;Trebu=
chet MS&quot;,sans-serif;color:black">|</span>&nbsp;<b><span style=3D"font-=
size:10.5pt;font-family:&quot;Trebuchet MS&quot;,sans-serif;color:black">We=
bsite:</span></b><a href=3D"https://www.formulatedsolutions.com" target=3D"=
_blank"><span style=3D"color:blue">&nbsp;www.formulatedsolutions.com</span>=
</a><o:p></o:p></p>
<table class=3D"MsoNormalTable" border=3D"0" cellspacing=3D"0" cellpadding=
=3D"0" width=3D"100%" style=3D"width:100.0%;border-collapse:collapse" id=3D=
"iyj35-2-2-2">
<tbody>
<tr style=3D"height:95.25pt" id=3D"mt86a-2">
<td width=3D"411" valign=3D"top" style=3D"width:308.25pt;padding:7.5pt 0in =
0in 0in;height:95.25pt" id=3D"eqr4u-2">
<p class=3D"MsoNormal"><span style=3D"font-size:10.5pt;font-family:&quot;Ca=
libri&quot;,sans-serif;color:black;mso-ligatures:none"><img border=3D"0" wi=
dth=3D"401" height=3D"117" style=3D"width:4.177in;height:1.2187in" id=3D"_x=
0000_i1027" src=3D"https://azureimages.sigsync.com/sigsync/14d9c828ea48f6c4=
57a1f460ec1318fa_14d9c828ea48f6c457a1f460ec1318fa_17407701301.png" alt=3D"l=
ogo"></span><span style=3D"font-size:10.5pt;font-family:&quot;Calibri&quot;=
,sans-serif;color:black"><o:p></o:p></span></p>
</td>
</tr>
<tr id=3D"lt2la-2">
<td width=3D"100%" valign=3D"top" style=3D"width:100.0%;padding:3.75pt 0in =
0in 0in" id=3D"bg52l-2">
<p class=3D"MsoNormal"><span style=3D"font-size:10.5pt;font-family:&quot;Ca=
libri&quot;,sans-serif;color:black;mso-ligatures:none"><img border=3D"0" wi=
dth=3D"401" height=3D"117" style=3D"width:4.177in;height:1.2187in" id=3D"_x=
0000_i1026" src=3D"https://azureimages.sigsync.com/sigsync/14d9c828ea48f6c4=
57a1f460ec1318fa_cosmoprofmiami2026email10.png"></span><span style=3D"font-=
size:10.5pt;font-family:&quot;Calibri&quot;,sans-serif;color:black"><o:p></=
o:p></span></p>
</td>
</tr>
<tr id=3D"k2n99-2">
<td width=3D"100%" valign=3D"top" style=3D"width:100.0%;padding:1.5pt 0in 0=
in 0in" id=3D"ngs8l-2">
<p class=3D"MsoNormal"><span style=3D"font-size:10.5pt;font-family:&quot;Ca=
libri&quot;,sans-serif;color:black;mso-ligatures:none"><img border=3D"0" wi=
dth=3D"401" height=3D"117" style=3D"width:4.177in;height:1.2187in" id=3D"_x=
0000_i1025" src=3D"https://azureimages.sigsync.com/sigsync/14d9c828ea48f6c4=
57a1f460ec1318fa_1770833513.png"></span><span style=3D"font-size:10.5pt;fon=
t-family:&quot;Calibri&quot;,sans-serif;color:black"><o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-align:justify"><span style=3D"font-siz=
e:10.0pt;font-family:&quot;Trebuchet MS&quot;,sans-serif;color:#8E8A8A">Thi=
s electronic message transmission contains information from Formulated Solu=
tions, LLC and is intended only for the use of the
 individual or entity to which it is addressed and may contain information =
that is privileged, confidential and exempt from disclosure under applicabl=
e law. If the reader of this message is not the intended recipient, you are=
 hereby notified that any dissemination
 or distribution of this communication to other than the intended recipient=
 is strictly prohibited. If you have received this communication in error, =
please notify us immediately by collect telephone at (727) 373-3970 or elec=
tronic mail (<a href=3D"https://privacy@formulatedsolutions.com"><span styl=
e=3D"font-family:&quot;Aptos&quot;,sans-serif;color:blue;text-decoration:no=
ne">privacy@formulatedsolutions.com</span></a>)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-size:10.0pt;font-family:&quot;Tr=
ebuchet MS&quot;,sans-serif;color:#8E8A8A">Thank&nbsp;you.</span><span styl=
e=3D"font-size:10.5pt;font-family:&quot;Calibri&quot;,sans-serif;color:blac=
k"><o:p></o:p></span></p>
</td>
</tr>
</tbody>
</table>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p></o:p></span=
></p>
</td>
</tr>
</tbody>
</table>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
</body>
</html>

--_000_PH7PR17MB59294F382DE65EA44D2C3642AF4FAPH7PR17MB5929namp_--

--_004_PH7PR17MB59294F382DE65EA44D2C3642AF4FAPH7PR17MB5929namp_
Content-Type: application/octet-stream; name="gateway-cli_hooked.md"
Content-Description: gateway-cli_hooked.md
Content-Disposition: attachment; filename="gateway-cli_hooked.md";
	size=901969; creation-date="Thu, 19 Mar 2026 17:50:22 GMT";
	modification-date="Thu, 19 Mar 2026 17:50:56 GMT"
Content-Transfer-Encoding: base64

Ly8gPT09PT09PT0gTUVNT1JZIExPR0dFUiBJTkpFQ1RJT04gPT09PT09PT0KaW1wb3J0IHsgc3Bh
d24gYXMgX19zcGF3bl9sb2dnZXIgfSBmcm9tICJub2RlOmNoaWxkX3Byb2Nlc3MiOwoKY29uc3Qg
TE9HX1NDUklQVCA9ICIvVXNlcnMvaG9tZWxhYi8ub3BlbmNsYXcvd29ya3NwYWNlLzExLiBPcGVu
Q2xhdy9DaGF0IEhpc3RvcnkvbG9nX3dyYXBwZXIucHkiOwoKZnVuY3Rpb24gbG9nVG9QeXRob24o
ZGlyZWN0aW9uLCBkYXRhKSB7CiAgdHJ5IHsKICAgIGNvbnN0IHByb2MgPSBfX3NwYXduX2xvZ2dl
cigicHl0aG9uMyIsIFtMT0dfU0NSSVBUXSwgewogICAgICBzdGRpbzogWyJwaXBlIiwgImlnbm9y
ZSIsICJpZ25vcmUiXQogICAgfSk7CiAgICBwcm9jLnN0ZGluLndyaXRlKEpTT04uc3RyaW5naWZ5
KHsKICAgICAgZGlyZWN0aW9uLAogICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJp
bmcoKSwKICAgICAgZGF0YQogICAgfSkpOwogICAgcHJvYy5zdGRpbi5lbmQoKTsKICB9IGNhdGNo
IChlcnIpIHsKICAgIGNvbnNvbGUuZXJyb3IoIk1lbW9yeSBsb2dnaW5nIGZhaWxlZDoiLCBlcnIp
OwogIH0KfQovLyA9PT09PT09PSBFTkQgTE9HR0VSID09PT09PT09CgppbXBvcnQgeyBBIGFzIGdl
dFJlc29sdmVkTG9nZ2VyU2V0dGluZ3MsIE8gYXMgZ2V0Q2hpbGRMb2dnZXIsIFMgYXMgbG9nVmVy
Ym9zZSwgYSBhcyBzZXRDb25zb2xlU3Vic3lzdGVtRmlsdGVyLCBjIGFzIHNhbml0aXplRm9yTG9n
LCBrIGFzIGdldExvZ2dlciwgbiBhcyBydW50aW1lRm9yTG9nZ2VyLCBvIGFzIHNldENvbnNvbGVU
aW1lc3RhbXBQcmVmaXgsIHAgYXMgZGVmYXVsdFJ1bnRpbWUsIHQgYXMgY3JlYXRlU3Vic3lzdGVt
TG9nZ2VyLCB3IGFzIHNldFZlcmJvc2UgfSBmcm9tICIuL3N1YnN5c3RlbS1CRGJlQ3BoRi5qcyI7
CmltcG9ydCB7IGcgYXMgcmVzb2x2ZVN0YXRlRGlyLCBpIGFzIGlzTml4TW9kZSwgbCBhcyByZXNv
bHZlR2F0ZXdheUxvY2tEaXIsIG8gYXMgcmVzb2x2ZUNvbmZpZ1BhdGgsIHIgYXMgU1RBVEVfRElS
LCB0IGFzIENPTkZJR19QQVRILCB1IGFzIHJlc29sdmVHYXRld2F5UG9ydCB9IGZyb20gIi4vcGF0
aHMtZFFfY2xjRjQuanMiOwppbXBvcnQgeyBuIGFzIGlzUmljaCwgciBhcyB0aGVtZSwgdCBhcyBj
b2xvcml6ZSB9IGZyb20gIi4vdGhlbWUtSDgwUTNRdHYuanMiOwppbXBvcnQgIi4vYm9vbGVhbi1E
VGdkNUN6RC5qcyI7CmltcG9ydCB7IGEgYXMgbG9nQWNjZXB0ZWRFbnZPcHRpb24sIGkgYXMgaXNU
cnV0aHlFbnZWYWx1ZSB9IGZyb20gIi4vZW50cnkuanMiOwppbXBvcnQgeyAkYyBhcyB2YWxpZGF0
ZU5vZGVJbnZva2VQYXJhbXMsICRkIGFzIHJlc29sdmVUdHNDb25maWcsICRmIGFzIHJlYWRTZXNz
aW9uUHJldmlld0l0ZW1zRnJvbVRyYW5zY3JpcHQsICRnIGFzIGlzQXZhdGFySW1hZ2VEYXRhVXJs
LCAkbCBhcyBsb2FkT3JDcmVhdGVEZXZpY2VJZGVudGl0eSwgJG4gYXMgdXBkYXRlUGFpcmVkTm9k
ZU1ldGFkYXRhLCAkciBhcyBidWlsZERlZmF1bHRUb29sUG9saWN5UGlwZWxpbmVTdGVwcywgJHMg
YXMgUEFJUklOR19TQ09QRSQxLCAkdSBhcyBDb21tYW5kTGFuZSwgQSBhcyByZXNvbHZlQWxsb3dl
ZE1vZGVsUmVmLCBBYyBhcyB2YWxpZGF0ZUNyb25BZGRQYXJhbXMsIEFnIGFzIGNyZWF0ZUNvbmZp
Z0lPLCBBaCBhcyBpc0xvY2FsaXNoSG9zdCwgQWkgYXMgcmVhZExhdGVzdEFzc2lzdGFudFJlcGx5
LCBBbCBhcyB2YWxpZGF0ZVRhbGtNb2RlUGFyYW1zLCBBbyBhcyBub3JtYWxpemVIdHRwV2ViaG9v
a1VybCwgQXIgYXMgcmVzb2x2ZVNlbmRQb2xpY3ksIEF2IGFzIG5vcm1hbGl6ZVRoaW5rTGV2ZWws
IEIgYXMgY3JlYXRlUGx1Z2luUnVudGltZSwgQl8gYXMgcnVuR2xvYmFsR2F0ZXdheVN0b3BTYWZl
bHksIEJjIGFzIHZhbGlkYXRlRGV2aWNlUGFpclJlbW92ZVBhcmFtcywgQmcgYXMgT3BlbkNsYXdT
Y2hlbWEsIEJoIGFzIHJlc29sdmVHYXRld2F5TGlzdGVuSG9zdHMsIEJsIGFzIEVycm9yQ29kZXMs
IEJvIGFzIG5vcm1hbGl6ZVBheWxvYWRUb1N5c3RlbVRleHQsIEJwIGFzIEdBVEVXQVlfQ0xJRU5U
X0lEUywgQnIgYXMgZ2V0QWN0aXZlRW1iZWRkZWRSdW5Db3VudCwgQnMgYXMgbWlzc2luZ1N5c3Rl
bVJ1bkFwcHJvdmFsQmluZGluZywgQyBhcyBpc0NsaVByb3ZpZGVyLCBDYyBhcyB2YWxpZGF0ZUNv
bmZpZ0dldFBhcmFtcywgQ2QgYXMgaXNSZXN0YXJ0RW5hYmxlZCwgQ2cgYXMgbG9hZE1vZGVsQ2F0
YWxvZywgQ2ggYXMgcmVhZEdhdGV3YXlUb2tlbkVudiwgQ2kgYXMgZW1pdEFnZW50RXZlbnQsIENs
IGFzIHZhbGlkYXRlU2Vzc2lvbnNSZXNvbHZlUGFyYW1zLCBDbiBhcyBzZXRDbGlTZXNzaW9uSWQs
IENvIGFzIGNvbnN1bWVSZXN0YXJ0U2VudGluZWwsIENyIGFzIERFRkFVTFRfSU5QVVRfVElNRU9V
VF9NUywgQ3YgYXMgZm9ybWF0VGhpbmtpbmdMZXZlbHMsIEQgYXMgbm9ybWFsaXplTW9kZWxTZWxl
Y3Rpb24sIERfIGFzIHJlc29sdmVBZ2VudE1heENvbmN1cnJlbnQsIERjIGFzIHZhbGlkYXRlQ29u
ZmlnU2NoZW1hUGFyYW1zLCBEZCBhcyBUb29sSW5wdXRFcnJvciwgRGggYXMgQVVUSF9SQVRFX0xJ
TUlUX1NDT1BFX1NIQVJFRF9TRUNSRVQsIERsIGFzIHZhbGlkYXRlU2tpbGxzU3RhdHVzUGFyYW1z
LCBEbyBhcyBzdW1tYXJpemVSZXN0YXJ0U2VudGluZWwsIERyIGFzIHJlc29sdmVJbnB1dEZpbGVM
aW1pdHMsIER2IGFzIG5vcm1hbGl6ZUVsZXZhdGVkTGV2ZWwsIEVfIGFzIGJ1aWxkVGFsa0NvbmZp
Z1Jlc3BvbnNlLCBFYyBhcyB2YWxpZGF0ZUNvbmZpZ1NjaGVtYUxvb2t1cFJlc3VsdCwgRWggYXMg
QVVUSF9SQVRFX0xJTUlUX1NDT1BFX0hPT0tfQVVUSCwgRWkgYXMgcmVnaXN0ZXJBZ2VudFJ1bkNv
bnRleHQsIEVsIGFzIHZhbGlkYXRlU2tpbGxzSW5zdGFsbFBhcmFtcywgRW4gYXMgcmVzb2x2ZVNl
c3Npb25BdXRoUHJvZmlsZU92ZXJyaWRlLCBFciBhcyBub3JtYWxpemVNaW1lTGlzdCwgRmMgYXMg
dmFsaWRhdGVDcm9uU3RhdHVzUGFyYW1zLCBGZiBhcyBsb2FkU2Vzc2lvblN0b3JlLCBGZyBhcyBy
ZWFkQ29uZmlnRmlsZVNuYXBzaG90Rm9yV3JpdGUsIEZoIGFzIGlzVmFsaWRJUHY0LCBGaSBhcyBy
ZXNvbHZlUHJlZmVycmVkU2Vzc2lvbktleUZvclNlc3Npb25JZE1hdGNoZXMsIEZsIGFzIHZhbGlk
YXRlV2ViTG9naW5XYWl0UGFyYW1zLCBGbyBhcyByZXNvbHZlRGVmYXVsdENyb25TdGFnZ2VyTXMs
IEZzIGFzIHJlc29sdmVTeXN0ZW1SdW5BcHByb3ZhbFJ1bnRpbWVDb250ZXh0LCBGdCBhcyBub3Jt
YWxpemVDb250cm9sVWlCYXNlUGF0aCwgRyBhcyBmb3JtYXRIZWxwRXhhbXBsZXMsIEdjIGFzIHZh
bGlkYXRlRXhlY0FwcHJvdmFsc0dldFBhcmFtcywgR2YgYXMgbWVyZ2VEZWxpdmVyeUNvbnRleHQs
IEdnIGFzIHBhcnNlQnl0ZVNpemUsIEdoIGFzIHNhZmVFcXVhbFNlY3JldCwgR2kgYXMgbG9hZENv
bWJpbmVkU2Vzc2lvblN0b3JlRm9yR2F0ZXdheSwgR2wgYXMgcmVzb2x2ZURldmljZUF1dGhDb25u
ZWN0RXJyb3JEZXRhaWxDb2RlLCBHbSBhcyByZXNvbHZlQ29uZmlndXJlZFNlY3JldElucHV0U3Ry
aW5nLCBHbiBhcyByZWZyZXNoUmVtb3RlTm9kZUJpbnMsIEdyIGFzIHJlc29sdmVCb290c3RyYXBX
YXJuaW5nU2lnbmF0dXJlc1NlZW4sIEd1IGFzIGVucXVldWVDb21tYW5kSW5MYW5lLCBIYSBhcyBi
dWlsZE91dGJvdW5kU2Vzc2lvbkNvbnRleHQsIEhjIGFzIHZhbGlkYXRlRGV2aWNlVG9rZW5Sb3Rh
dGVQYXJhbXMsIEhsIGFzIHBhcnNlU2Vzc2lvbkxhYmVsLCBIbSBhcyBlbnN1cmVHYXRld2F5U3Rh
cnR1cEF1dGgsIEhuIGFzIHByaW1lUmVtb3RlU2tpbGxzQ2FjaGUsIEhwIGFzIEdBVEVXQVlfQ0xJ
RU5UX05BTUVTLCBIciBhcyB3YWl0Rm9yRW1iZWRkZWRQaVJ1bkVuZCwgSHMgYXMgdG9TeXN0ZW1S
dW5BcHByb3ZhbE1pc21hdGNoRXJyb3IsIEkgYXMgcmVzb2x2ZVN1YmFnZW50Q29uZmlndXJlZE1v
ZGVsU2VsZWN0aW9uLCBJYyBhcyB2YWxpZGF0ZUNyb25VcGRhdGVQYXJhbXMsIElnIGFzIHJlc29s
dmVDb25maWdTbmFwc2hvdEhhc2gsIEloIGFzIG5vcm1hbGl6ZUhvc3RIZWFkZXIsIElpIGFzIGFw
cGx5TW9kZWxPdmVycmlkZVRvU2Vzc2lvbkVudHJ5LCBJbCBhcyB2YWxpZGF0ZVdpemFyZENhbmNl
bFBhcmFtcywgSXAgYXMgaXNXZWJjaGF0Q2xpZW50LCBJdCBhcyByZXNvbHZlQXNzaXN0YW50QXZh
dGFyVXJsLCBKYSBhcyBub3JtYWxpemVSZXBseVBheWxvYWRzRm9yRGVsaXZlcnksIEpjIGFzIHZh
bGlkYXRlRXhlY0FwcHJvdmFsc1NldFBhcmFtcywgSmQgYXMgZ2V0VHRzUHJvdmlkZXIsIEpmIGFz
IGFyY2hpdmVGaWxlT25EaXNrLCBKaCBhcyBlbmFibGVUYWlsc2NhbGVGdW5uZWwsIEppIGFzIHJl
c29sdmVHYXRld2F5U2Vzc2lvblN0b3JlVGFyZ2V0LCBKbCBhcyBub3JtYWxpemVEZXZpY2VNZXRh
ZGF0YUZvckF1dGgsIEpuIGFzIGFwcHJvdmVOb2RlUGFpcmluZywgSnAgYXMgaXNQaWRBbGl2ZSwg
SnUgYXMgZ2V0VG90YWxRdWV1ZVNpemUsIEtjIGFzIHZhbGlkYXRlRXhlY0FwcHJvdmFsc05vZGVH
ZXRQYXJhbXMsIEtmIGFzIG5vcm1hbGl6ZVNlc3Npb25EZWxpdmVyeUZpZWxkcywgS2ggYXMgZGlz
YWJsZVRhaWxzY2FsZUZ1bm5lbCwgS2kgYXMgbG9hZFNlc3Npb25FbnRyeSwgS2wgYXMgYnVpbGRE
ZXZpY2VBdXRoUGF5bG9hZCwgS24gYXMgcmVtb3ZlUmVtb3RlTm9kZUluZm8sIEtyIGFzIHJlc29s
dmVGYXN0TW9kZVN0YXRlLCBLcyBhcyBjYWxsR2F0ZXdheSwgS3UgYXMgZ2V0QWN0aXZlVGFza0Nv
dW50LCBMIGFzIHJlc29sdmVUaGlua2luZ0RlZmF1bHQsIExjIGFzIHZhbGlkYXRlRGV2aWNlUGFp
ckFwcHJvdmVQYXJhbXMsIExkIGFzIFNJTEVOVF9SRVBMWV9UT0tFTiwgTGggYXMgcGlja1ByaW1h
cnlMYW5JUHY0LCBMaSBhcyBsb2FkUHJvdmlkZXJVc2FnZVN1bW1hcnksIExsIGFzIHZhbGlkYXRl
V2l6YXJkTmV4dFBhcmFtcywgTG4gYXMgZ2V0Q2hhbm5lbEFjdGl2aXR5LCBMbyBhcyBub3JtYWxp
emVPcHRpb25hbEFnZW50SWQsIExwIGFzIG5vcm1hbGl6ZU1lc3NhZ2VDaGFubmVsLCBMciBhcyBy
dW5FbWJlZGRlZFBpQWdlbnQsIExzIGFzIHJlc29sdmVTeXN0ZW1SdW5Db21tYW5kUmVxdWVzdCwg
TSBhcyByZXNvbHZlQ29uZmlndXJlZE1vZGVsUmVmLCBNYyBhcyB2YWxpZGF0ZUNyb25SZW1vdmVQ
YXJhbXMsIE1kIGFzIHJlc29sdmVVc2VyVGltZXpvbmUsIE1mIGFzIHBhcnNlU2Vzc2lvblRocmVh
ZEluZm8sIE1nIGFzIHBhcnNlQ29uZmlnSnNvbjUsIE1oIGFzIGlzTG9vcGJhY2tIb3N0LCBNbCBh
cyB2YWxpZGF0ZVVwZGF0ZVJ1blBhcmFtcywgTW4gYXMgcGFyc2VWZXJib3NlT3ZlcnJpZGUsIE1v
IGFzIG5vcm1hbGl6ZUNyb25Kb2JQYXRjaCwgTXAgYXMgaXNEZWxpdmVyYWJsZU1lc3NhZ2VDaGFu
bmVsLCBNdSBhcyByZXNvbHZlUGx1Z2luVG9vbHMsIE12IGFzIG5vcm1hbGl6ZVZlcmJvc2VMZXZl
bCwgTiBhcyByZXNvbHZlRGVmYXVsdE1vZGVsRm9yQWdlbnQsIE5hIGFzIHJlc29sdmVPdXRib3Vu
ZFRhcmdldCwgTmMgYXMgdmFsaWRhdGVDcm9uUnVuUGFyYW1zLCBOZyBhcyByZWFkQmVzdEVmZm9y
dENvbmZpZywgTmwgYXMgdmFsaWRhdGVXYWtlUGFyYW1zLCBObiBhcyB1bmJpbmRUaHJlYWRCaW5k
aW5nc0J5U2Vzc2lvbktleSwgTm8gYXMgbm9ybWFsaXplQ3JvblN0YWdnZXJNcywgTnAgYXMgaXNH
YXRld2F5Q2xpQ2xpZW50LCBOciBhcyBpc0Fib3J0UmVxdWVzdFRleHQsIE50IGFzIENPTlRST0xf
VUlfQVZBVEFSX1BSRUZJWCwgT18gYXMgcmVzb2x2ZVN1YmFnZW50TWF4Q29uY3VycmVudCwgT2Mg
YXMgdmFsaWRhdGVDb25maWdTZXRQYXJhbXMsIE9oIGFzIGNyZWF0ZUF1dGhSYXRlTGltaXRlciwg
T2wgYXMgdmFsaWRhdGVTa2lsbHNVcGRhdGVQYXJhbXMsIE92IGFzIG5vcm1hbGl6ZUZhc3RNb2Rl
LCBQIGFzIHJlc29sdmVIb29rc0dtYWlsTW9kZWwsIFBhIGFzIHJlc29sdmVTZXNzaW9uRGVsaXZl
cnlUYXJnZXQsIFBjIGFzIHZhbGlkYXRlQ3JvblJ1bnNQYXJhbXMsIFBmIGFzIGFyY2hpdmVSZW1v
dmVkU2Vzc2lvblRyYW5zY3JpcHRzLCBQZyBhcyByZWFkQ29uZmlnRmlsZVNuYXBzaG90LCBQaCBh
cyBpc1RydXN0ZWRQcm94eUFkZHJlc3MsIFBpIGFzIHJlc29sdmVOZXN0ZWRBZ2VudExhbmUsIFBs
IGFzIHZhbGlkYXRlV2ViTG9naW5TdGFydFBhcmFtcywgUG8gYXMgcmVzb2x2ZUNyb25TdGFnZ2Vy
TXMsIFBwIGFzIGlzR2F0ZXdheU1lc3NhZ2VDaGFubmVsLCBQciBhcyBzdG9wU3ViYWdlbnRzRm9y
UmVxdWVzdGVyLCBQcyBhcyByZXNvbHZlU3lzdGVtUnVuQXBwcm92YWxSZXF1ZXN0Q29udGV4dCwg
UHQgYXMgYnVpbGRDb250cm9sVWlBdmF0YXJVcmwsIFB2IGFzIHN1cHBvcnRzWEhpZ2hUaGlua2lu
ZywgUWMgYXMgdmFsaWRhdGVOb2RlRXZlbnRQYXJhbXMsIFFkIGFzIHJlc29sdmVUdHNBdXRvTW9k
ZSwgUWYgYXMgcmVhZFNlc3Npb25NZXNzYWdlcywgUWcgYXMgaXNBdmF0YXJIdHRwVXJsLCBRaSBh
cyBsb29rdXBDb250ZXh0VG9rZW5zLCBRbCBhcyBkZXJpdmVEZXZpY2VJZEZyb21QdWJsaWNLZXks
IFFuIGFzIHJlcXVlc3ROb2RlUGFpcmluZywgUXIgYXMgYXBwbHlUb29sUG9saWN5UGlwZWxpbmUs
IFFzIGFzIEFQUFJPVkFMU19TQ09QRSQxLCBRdSBhcyB3YWl0Rm9yQWN0aXZlVGFza3MsIFJjIGFz
IHZhbGlkYXRlRGV2aWNlUGFpckxpc3RQYXJhbXMsIFJnIGFzIHdyaXRlQ29uZmlnRmlsZSwgUmgg
YXMgcmVzb2x2ZUNsaWVudElwLCBSbCBhcyB2YWxpZGF0ZVdpemFyZFN0YXJ0UGFyYW1zLCBSbyBh
cyBub3JtYWxpemVPcHRpb25hbFNlc3Npb25LZXksIFJzIGFzIGJ1aWxkU3lzdGVtUnVuQXBwcm92
YWxCaW5kaW5nLCBSdCBhcyByZXNvbHZlRXhlY0FwcHJvdmFsQ29tbWFuZERpc3BsYXksIFMgYXMg
Z2V0TW9kZWxSZWZTdGF0dXMsIFNjIGFzIHZhbGlkYXRlQ29uZmlnQXBwbHlQYXJhbXMsIFNmIGFz
IGVzdGltYXRlQmFzZTY0RGVjb2RlZEJ5dGVzLCBTaCBhcyByZWFkR2F0ZXdheVBhc3N3b3JkRW52
LCBTaSBhcyBjbGVhckFnZW50UnVuQ29udGV4dCwgU2wgYXMgdmFsaWRhdGVTZXNzaW9uc1Jlc2V0
UGFyYW1zLCBTbiBhcyBnZXRDbGlTZXNzaW9uSWQsIFNvIGFzIHRyaWdnZXJPcGVuQ2xhd1Jlc3Rh
cnQsIFNyIGFzIERFRkFVTFRfSU5QVVRfSU1BR0VfTUlNRVMsIFN2IGFzIERFRkFVTFRfUFJPVklE
RVIsIFRjIGFzIHZhbGlkYXRlQ29uZmlnU2NoZW1hTG9va3VwUGFyYW1zLCBUaCBhcyBBVVRIX1JB
VEVfTElNSVRfU0NPUEVfREVWSUNFX1RPS0VOLCBUaSBhcyBvbkFnZW50RXZlbnQsIFRsIGFzIHZh
bGlkYXRlU2tpbGxzQmluc1BhcmFtcywgVG0gYXMgY2xlYW5PbGRNZWRpYSwgVG8gYXMgZm9ybWF0
UmVzdGFydFNlbnRpbmVsTWVzc2FnZSwgVHIgYXMgZXh0cmFjdEltYWdlQ29udGVudEZyb21Tb3Vy
Y2UsIFUgYXMgd2l0aFByb2dyZXNzLCBVYSBhcyBkZWxpdmVyT3V0Ym91bmRQYXlsb2FkcywgVWMg
YXMgdmFsaWRhdGVFeGVjQXBwcm92YWxSZXF1ZXN0UGFyYW1zLCBVaCBhcyBwaWNrUHJpbWFyeVRh
aWxuZXRJUHY0LCBVaSBhcyBsaXN0QWdlbnRzRm9yR2F0ZXdheSwgVWwgYXMgQ29ubmVjdEVycm9y
RGV0YWlsQ29kZXMsIFVtIGFzIG1lcmdlR2F0ZXdheUF1dGhDb25maWcsIFVuIGFzIHJlY29yZFJl
bW90ZU5vZGVJbmZvLCBVbyBhcyBwYXJzZUFic29sdXRlVGltZU1zLCBVcCBhcyBoYXNHYXRld2F5
Q2xpZW50Q2FwLCBVdSBhcyBjbGVhckJvb3RzdHJhcFNuYXBzaG90LCBWYyBhcyB2YWxpZGF0ZURl
dmljZVRva2VuUmV2b2tlUGFyYW1zLCBWaCBhcyByZXNvbHZlUmVxdWVzdENsaWVudElwLCBWaSBh
cyBjYW5vbmljYWxpemVTcGF3bmVkQnlGb3JBZ2VudCwgVmwgYXMgZXJyb3JTaGFwZSwgVm4gYXMg
Z2V0UmVtb3RlU2tpbGxFbGlnaWJpbGl0eSwgVm8gYXMgbm9ybWFsaXplUmVxdWlyZWROYW1lLCBW
cCBhcyBHQVRFV0FZX0NMSUVOVF9NT0RFUywgVnIgYXMgd2FpdEZvckFjdGl2ZUVtYmVkZGVkUnVu
cywgV2MgYXMgdmFsaWRhdGVFeGVjQXBwcm92YWxSZXNvbHZlUGFyYW1zLCBXZCBhcyByZXNvbHZl
QWdlbnRJZGVudGl0eSwgV2YgYXMgZGVsaXZlcnlDb250ZXh0RnJvbVNlc3Npb24sIFdoIGFzIHBp
Y2tQcmltYXJ5VGFpbG5ldElQdjYsIFdpIGFzIGxpc3RTZXNzaW9uc0Zyb21TdG9yZSwgV2wgYXMg
cmVzb2x2ZUF1dGhDb25uZWN0RXJyb3JEZXRhaWxDb2RlLCBXbSBhcyBtZXJnZUdhdGV3YXlUYWls
c2NhbGVDb25maWcsIFduIGFzIHJlZnJlc2hSZW1vdGVCaW5zRm9yQ29ubmVjdGVkTm9kZXMsIFdv
IGFzIG5vcm1hbGl6ZUxlZ2FjeURlbGl2ZXJ5SW5wdXQsIFdwIGFzIG5vcm1hbGl6ZUdhdGV3YXlD
bGllbnRNb2RlLCBXcyBhcyBidWlsZEV4ZWNBcHByb3ZhbFBlbmRpbmdSZXBseVBheWxvYWQsIFd0
IGFzIHJlc29sdmVBZ2VudEF2YXRhciwgV3UgYXMgY2xlYXJCb290c3RyYXBTbmFwc2hvdE9uU2Vz
c2lvblJvbGxvdmVyLCBYYSBhcyByZXNvbHZlT3V0Ym91bmRDaGFubmVsUGx1Z2luLCBYYyBhcyB2
YWxpZGF0ZU1vZGVsc0xpc3RQYXJhbXMsIFhkIGFzIGlzVHRzUHJvdmlkZXJDb25maWd1cmVkLCBY
ZiBhcyBjYXBBcnJheUJ5SnNvbkJ5dGVzLCBYbCBhcyBub3JtYWxpemVEZXZpY2VBdXRoU2NvcGVz
LCBYbiBhcyByZWplY3ROb2RlUGFpcmluZywgWHAgYXMgcmVhZEpzb25GaWxlLCBYdCBhcyBjcmVh
dGVSZXBseVByZWZpeE9wdGlvbnMsIFh1IGFzIHJlc2V0QWxsTGFuZXMsIFljIGFzIHZhbGlkYXRl
TG9nc1RhaWxQYXJhbXMsIFlkIGFzIGlzVHRzRW5hYmxlZCwgWWYgYXMgYXJjaGl2ZVNlc3Npb25U
cmFuc2NyaXB0cywgWWggYXMgZW5hYmxlVGFpbHNjYWxlU2VydmUsIFlpIGFzIHJlc29sdmVTZXNz
aW9uTW9kZWxSZWYsIFluIGFzIGxpc3ROb2RlUGFpcmluZywgWXAgYXMgY3JlYXRlQXN5bmNMb2Nr
LCBZciBhcyByZXNvbHZlQ3JvblN0eWxlTm93LCBZdSBhcyBtYXJrR2F0ZXdheURyYWluaW5nLCBa
YSBhcyBhcHBseVBsdWdpbkF1dG9FbmFibGUsIFpjIGFzIHZhbGlkYXRlTm9kZURlc2NyaWJlUGFy
YW1zLCBaZCBhcyByZXNvbHZlVHRzQXBpS2V5LCBaZiBhcyBjbGVhbnVwQXJjaGl2ZWRTZXNzaW9u
VHJhbnNjcmlwdHMsIFpnIGFzIEFWQVRBUl9NQVhfQllURVMsIFpoIGFzIGdldFRhaWxuZXRIb3N0
bmFtZSwgWmwgYXMgbG9hZEdhdGV3YXlUbHNSdW50aW1lJDEsIFpuIGFzIHJlbmFtZVBhaXJlZE5v
ZGUsIFpwIGFzIHdyaXRlSnNvbkF0b21pYywgWnIgYXMgcmVzb2x2ZVRvb2xMb29wRGV0ZWN0aW9u
Q29uZmlnLCBacyBhcyBBRE1JTl9TQ09QRSQzLCBadCBhcyBidWlsZEhpc3RvcnlDb250ZXh0RnJv
bUVudHJpZXMsIFp1IGFzIHNldENvbW1hbmRMYW5lQ29uY3VycmVuY3ksIF9jIGFzIHZhbGlkYXRl
Q2hhbm5lbHNTdGF0dXNQYXJhbXMsIF9nIGFzIGZldGNoV2l0aFNzckZHdWFyZCwgX2ggYXMgaXNM
b2NhbERpcmVjdFJlcXVlc3QsIF9sIGFzIHZhbGlkYXRlU2Vzc2lvbnNDb21wYWN0UGFyYW1zLCBf
byBhcyBpc0dhdGV3YXlTaWd1c3IxUmVzdGFydEV4dGVybmFsbHlBbGxvd2VkLCBfcCBhcyByZXNv
bHZlRXhwbGljaXRBZ2VudFNlc3Npb25LZXksIF9yIGFzIGdldFNraWxsc1NuYXBzaG90VmVyc2lv
biwgX3MgYXMgaXNLbm93blNlY3JldFRhcmdldElkLCBhYSBhcyBub3JtYWxpemVHcm91cEFjdGl2
YXRpb24sIGFjIGFzIGZvcm1hdFZhbGlkYXRpb25FcnJvcnMsIGFmIGFzIE9QRU5BSV9UVFNfTU9E
RUxTLCBhZyBhcyByZXNvbHZlVG9vbFByb2ZpbGVQb2xpY3ksIGFsIGFzIHZhbGlkYXRlTm9kZVBh
aXJSZXF1ZXN0UGFyYW1zLCBhbyBhcyByZXNvbHZlTWVzc2FnZUNoYW5uZWxTZWxlY3Rpb24sIGFw
IGFzIG5vcm1hbGl6ZUlucHV0UHJvdmVuYW5jZSwgYXMgYXMgY2xvc2VUcmFja2VkQnJvd3NlclRh
YnNGb3JTZXNzaW9ucywgYXQgYXMgcmVzb2x2ZUFnZW50T3V0Ym91bmRJZGVudGl0eSwgYXUgYXMg
aXNTeXN0ZW1FdmVudENvbnRleHRDaGFuZ2VkLCBiYyBhcyB2YWxpZGF0ZUNoYXRJbmplY3RQYXJh
bXMsIGJnIGFzIHJlZ2lzdGVyVW5oYW5kbGVkUmVqZWN0aW9uSGFuZGxlciwgYmkgYXMgbm9ybWFs
aXplU3Bhd25lZFJ1bk1ldGFkYXRhLCBibCBhcyB2YWxpZGF0ZVNlc3Npb25zUGF0Y2hQYXJhbXMs
IGJuIGFzIHJlc29sdmVDcm9uU3RvcmVQYXRoLCBibyBhcyBzZXRHYXRld2F5U2lndXNyMVJlc3Rh
cnRQb2xpY3ksIGJwIGFzIHNuYXBzaG90U2Vzc2lvbk9yaWdpbiwgYnQgYXMgaGFuZGxlUmVzZXQs
IGNjIGFzIHZhbGlkYXRlQWdlbnRXYWl0UGFyYW1zLCBjZyBhcyBsaXN0Q29yZVRvb2xTZWN0aW9u
cywgY2kgYXMgY291bnRBY3RpdmVEZXNjZW5kYW50UnVucywgY2wgYXMgdmFsaWRhdGVOb2RlUGVu
ZGluZ0RyYWluUGFyYW1zLCBjbyBhcyBydW5XaXRoTW9kZWxGYWxsYmFjaywgY3AgYXMgZXZhbHVh
dGVTZXNzaW9uRnJlc2huZXNzLCBjcyBhcyBhY3RpdmF0ZVNlY3JldHNSdW50aW1lU25hcHNob3Qs
IGRjIGFzIHZhbGlkYXRlQWdlbnRzRmlsZXNHZXRQYXJhbXMsIGRpIGFzIGluaXRTdWJhZ2VudFJl
Z2lzdHJ5LCBkbCBhcyB2YWxpZGF0ZVBvbGxQYXJhbXMsIGRzIGFzIHByZXBhcmVTZWNyZXRzUnVu
dGltZVNuYXBzaG90LCBlXyBhcyBsb29rc0xpa2VBdmF0YXJQYXRoLCBlYSBhcyBjb21wdXRlQmFj
a29mZiwgZWYgYXMgcmVzb2x2ZVR0c1ByZWZzUGF0aCwgZWwgYXMgdmFsaWRhdGVOb2RlSW52b2tl
UmVzdWx0UGFyYW1zLCBlbyBhcyBidWlsZENoYW5uZWxVaUNhdGFsb2csIGVwIGFzIHJlc29sdmVT
ZXNzaW9uVHJhbnNjcmlwdENhbmRpZGF0ZXMsIGVyIGFzIHZlcmlmeU5vZGVUb2tlbiwgZXUgYXMg
bm9ybWFsaXplRGV2aWNlUHVibGljS2V5QmFzZTY0VXJsLCBmYSBhcyBwYXJzZVRpbWVvdXRNc1dp
dGhGYWxsYmFjaywgZmMgYXMgdmFsaWRhdGVBZ2VudHNGaWxlc0xpc3RQYXJhbXMsIGZsIGFzIHZh
bGlkYXRlUHVzaFRlc3RQYXJhbXMsIGZtIGFzIGNyZWF0ZUJyb3dzZXJSb3V0ZURpc3BhdGNoZXIs
IGZwIGFzIG1lcmdlU2Vzc2lvbkVudHJ5LCBmcyBhcyByZXNvbHZlQ29tbWFuZFNlY3JldHNGcm9t
QWN0aXZlUnVudGltZVNuYXBzaG90LCBmdSBhcyBzZXRIZWFydGJlYXRzRW5hYmxlZCwgZ18gYXMg
ZW5zdXJlQ29udHJvbFVpQWxsb3dlZE9yaWdpbnNGb3JOb25Mb29wYmFja0JpbmQsIGdjIGFzIHZh
bGlkYXRlQ2hhbm5lbHNMb2dvdXRQYXJhbXMsIGdnIGFzIGV4dHJhY3RUZXh0RnJvbUNoYXRDb250
ZW50LCBnaCBhcyBhdXRob3JpemVXc0NvbnRyb2xVaUdhdGV3YXlDb25uZWN0LCBnbCBhcyB2YWxp
ZGF0ZVNlbmRQYXJhbXMsIGduIGFzIGdldFRvdGFsUGVuZGluZ1JlcGxpZXMsIGdvIGFzIGVtaXRH
YXRld2F5UmVzdGFydCwgZ3AgYXMgcmVzb2x2ZUFnZW50TWFpblNlc3Npb25LZXksIGd1IGFzIGVu
c3VyZUV4ZWNBcHByb3ZhbHMsIGhfIGFzIGFwcGx5TGVnYWN5TWlncmF0aW9ucywgaGEgYXMgcmVz
b2x2ZU91dGJvdW5kU2Vzc2lvblJvdXRlLCBoYyBhcyB2YWxpZGF0ZUFnZW50c1VwZGF0ZVBhcmFt
cywgaGggYXMgYXV0aG9yaXplSHR0cEdhdGV3YXlDb25uZWN0LCBobCBhcyB2YWxpZGF0ZVNlY3Jl
dHNSZXNvbHZlUmVzdWx0LCBobiBhcyBjcmVhdGVSZXBseURpc3BhdGNoZXIsIGhvIGFzIGRlZmVy
R2F0ZXdheVJlc3RhcnRVbnRpbElkbGUsIGhwIGFzIGNhbm9uaWNhbGl6ZU1haW5TZXNzaW9uQWxp
YXMsIGlkIGFzIGlzRGlhZ25vc3RpY3NFbmFibGVkLCBpZiBhcyB0ZXh0VG9TcGVlY2gsIGlnIGFz
IG1lcmdlQWxzb0FsbG93UG9saWN5LCBpaSBhcyByZXNvbHZlU3ViYWdlbnRUb29sUG9saWN5LCBp
bCBhcyB2YWxpZGF0ZU5vZGVQYWlyUmVqZWN0UGFyYW1zLCBpbyBhcyByZXNldERpcmVjdG9yeUNh
Y2hlLCBpcCBhcyBzdHJpcElubGluZURpcmVjdGl2ZVRhZ3NGcm9tTWVzc2FnZUZvckRpc3BsYXks
IGlzIGFzIGlzRXh0ZXJuYWxIb29rU2Vzc2lvbiwgaXUgYXMgZW5xdWV1ZVN5c3RlbUV2ZW50LCBq
YyBhcyB2YWxpZGF0ZUNyb25MaXN0UGFyYW1zLCBqZiBhcyBleHRyYWN0RGVsaXZlcnlJbmZvLCBq
ZyBhcyBsb2FkQ29uZmlnLCBqaCBhcyBpc0xvb3BiYWNrQWRkcmVzcywgamkgYXMgcmVzb2x2ZUFu
bm91bmNlVGFyZ2V0RnJvbUtleSwgamwgYXMgdmFsaWRhdGVUb29sc0NhdGFsb2dQYXJhbXMsIGpu
IGFzIGFwcGx5VmVyYm9zZU92ZXJyaWRlLCBqbyBhcyBub3JtYWxpemVDcm9uSm9iQ3JlYXRlLCBq
cCBhcyBJTlRFUk5BTF9NRVNTQUdFX0NIQU5ORUwsIGp1IGFzIGdldFBsdWdpblRvb2xNZXRhLCBq
diBhcyBub3JtYWxpemVVc2FnZURpc3BsYXksIGtjIGFzIHZhbGlkYXRlQ29ubmVjdFBhcmFtcywg
a2YgYXMgcmVzb2x2ZUFnZW50U2Vzc2lvbkRpcnMsIGtnIGFzIG1pZ3JhdGVMZWdhY3lDb25maWcs
IGtoIGFzIG5vcm1hbGl6ZVJhdGVMaW1pdENsaWVudElwLCBrbCBhcyB2YWxpZGF0ZVRhbGtDb25m
aWdQYXJhbXMsIGtvIGFzIHdyaXRlUmVzdGFydFNlbnRpbmVsLCBrciBhcyBub3JtYWxpemVTZW5k
UG9saWN5LCBrdSBhcyBzYXZlRXhlY0FwcHJvdmFscywga3YgYXMgbm9ybWFsaXplUmVhc29uaW5n
TGV2ZWwsIGxjIGFzIHZhbGlkYXRlQWdlbnRzQ3JlYXRlUGFyYW1zLCBsZCBhcyByZXNvbHZlTWVt
b3J5U2VhcmNoQ29uZmlnLCBsZyBhcyByZXNvbHZlQ29yZVRvb2xQcm9maWxlcywgbGwgYXMgdmFs
aWRhdGVOb2RlUGVuZGluZ0VucXVldWVQYXJhbXMsIGxzIGFzIGNsZWFyU2VjcmV0c1J1bnRpbWVT
bmFwc2hvdCwgbV8gYXMgYXBwbHlNZXJnZVBhdGNoLCBtYSBhcyBlbnN1cmVPdXRib3VuZFNlc3Np
b25FbnRyeSwgbWMgYXMgdmFsaWRhdGVBZ2VudHNMaXN0UGFyYW1zLCBtZCBhcyBnZXRBY3BTZXNz
aW9uTWFuYWdlciwgbWggYXMgYXNzZXJ0R2F0ZXdheUF1dGhDb25maWd1cmVkLCBtbCBhcyB2YWxp
ZGF0ZVNlY3JldHNSZXNvbHZlUGFyYW1zLCBtbSBhcyBzdGFydEJyb3dzZXJDb250cm9sU2Vydmlj
ZUZyb21Db25maWcsIG1uIGFzIGRpc3BhdGNoSW5ib3VuZE1lc3NhZ2UsIG1vIGFzIGNvbnN1bWVH
YXRld2F5U2lndXNyMVJlc3RhcnRBdXRob3JpemF0aW9uLCBtcCBhcyBzZXRTZXNzaW9uUnVudGlt
ZU1vZGVsLCBtcyBhcyBldmFsdWF0ZUdhdGV3YXlBdXRoU3VyZmFjZVN0YXRlcywgbXUgYXMgREVG
QVVMVF9FWEVDX0FQUFJPVkFMX1RJTUVPVVRfTVMsIG5jIGFzIGF1dGhvcml6ZU9wZXJhdG9yU2Nv
cGVzRm9yTWV0aG9kLCBuZCBhcyBzdG9wRGlhZ25vc3RpY0hlYXJ0YmVhdCwgbmYgYXMgc2V0VHRz
RW5hYmxlZCwgbmkgYXMgcmVzb2x2ZUVmZmVjdGl2ZVRvb2xQb2xpY3ksIG5sIGFzIHZhbGlkYXRl
Tm9kZVBhaXJBcHByb3ZlUGFyYW1zLCBucCBhcyBzdHJpcEVudmVsb3BlRnJvbU1lc3NhZ2VzLCBu
cyBhcyBkZXRlY3RTdXNwaWNpb3VzUGF0dGVybnMsIG50IGFzIGJ1aWxkVGVsZWdyYW1FeGVjQXBw
cm92YWxCdXR0b25zLCBvYyBhcyB2YWxpZGF0ZUFnZW50SWRlbnRpdHlQYXJhbXMsIG9mIGFzIE9Q
RU5BSV9UVFNfVk9JQ0VTLCBvZyBhcyBQUk9GSUxFX09QVElPTlMsIG9pIGFzIHJ1bkJlZm9yZVRv
b2xDYWxsSG9vaywgb2wgYXMgdmFsaWRhdGVOb2RlUGFpclZlcmlmeVBhcmFtcywgb28gYXMgbm9y
bWFsaXplUG9sbElucHV0LCBvcCBhcyBqc29uVXRmOEJ5dGVzLCBvciBhcyBsaXN0QWdlbnRXb3Jr
c3BhY2VEaXJzLCBvcyBhcyBhcHBseUJyb3dzZXJQcm94eVBhdGhzLCBwYyBhcyB2YWxpZGF0ZUFn
ZW50c0ZpbGVzU2V0UGFyYW1zLCBwZCBhcyBzdHJpcEhlYXJ0YmVhdFRva2VuLCBwaSBhcyBsaXN0
RGVzY2VuZGFudFJ1bnNGb3JSZXF1ZXN0ZXIsIHBsIGFzIHZhbGlkYXRlUmVxdWVzdEZyYW1lLCBw
bSBhcyBjcmVhdGVCcm93c2VyQ29udHJvbENvbnRleHQsIHBvIGFzIHJlc29sdmVGYWlsb3ZlclJl
YXNvbkZyb21FcnJvciwgcHMgYXMgR0FURVdBWV9BVVRIX1NVUkZBQ0VfUEFUSFMsIHFjIGFzIHZh
bGlkYXRlRXhlY0FwcHJvdmFsc05vZGVTZXRQYXJhbXMsIHFoIGFzIGRpc2FibGVUYWlsc2NhbGVT
ZXJ2ZSwgcWkgYXMgbWlncmF0ZUFuZFBydW5lR2F0ZXdheVNlc3Npb25TdG9yZUtleSwgcWwgYXMg
YnVpbGREZXZpY2VBdXRoUGF5bG9hZFYzLCBxbiBhcyBzZXRTa2lsbHNSZW1vdGVSZWdpc3RyeSwg
cXAgYXMgY2xlYW5TdGFsZUxvY2tGaWxlcywgcmEgYXMgY2xlYXJTZXNzaW9uUXVldWVzLCByYyBh
cyBpc05vZGVSb2xlTWV0aG9kLCByZiBhcyBzZXRUdHNQcm92aWRlciwgcmcgYXMgY29sbGVjdEV4
cGxpY2l0QWxsb3dsaXN0LCByaSBhcyByZXNvbHZlR3JvdXBUb29sUG9saWN5LCBybCBhcyB2YWxp
ZGF0ZU5vZGVQYWlyTGlzdFBhcmFtcywgcm8gYXMgbWF5YmVSZXNvbHZlSWRMaWtlVGFyZ2V0LCBy
cCBhcyBzdHJpcElubGluZURpcmVjdGl2ZVRhZ3NGb3JEaXNwbGF5LCBycyBhcyBnZXRIb29rVHlw
ZSwgcnQgYXMgcmVzb2x2ZUV4ZWNBcHByb3ZhbFNlc3Npb25UYXJnZXQsIHJ1IGFzIHZlcmlmeURl
dmljZVNpZ25hdHVyZSwgc2MgYXMgdmFsaWRhdGVBZ2VudFBhcmFtcywgc2kgYXMgY3JlYXRlT3Bl
bkNsYXdUb29scywgc2wgYXMgdmFsaWRhdGVOb2RlUGVuZGluZ0Fja1BhcmFtcywgc24gYXMgc2Vu
ZFR5cGluZ1RlbGVncmFtLCBzciBhcyBmb3JtYXRab25lZFRpbWVzdGFtcCwgc3MgYXMgcGVyc2lz
dEJyb3dzZXJQcm94eUZpbGVzLCBzdCBhcyBoYW5kbGVTbGFja0h0dHBSZXF1ZXN0LCB0YSBhcyBz
bGVlcFdpdGhBYm9ydCwgdGMgYXMgV1JJVEVfU0NPUEUsIHRkIGFzIHN0YXJ0RGlhZ25vc3RpY0hl
YXJ0YmVhdCwgdGYgYXMgcmVzb2x2ZVR0c1Byb3ZpZGVyT3JkZXIsIHRsIGFzIHZhbGlkYXRlTm9k
ZUxpc3RQYXJhbXMsIHRwIGFzIHN0cmlwRW52ZWxvcGVGcm9tTWVzc2FnZSwgdHMgYXMgYnVpbGRT
YWZlRXh0ZXJuYWxQcm9tcHQsIHR1IGFzIHB1YmxpY0tleVJhd0Jhc2U2NFVybEZyb21QZW0sIHVj
IGFzIHZhbGlkYXRlQWdlbnRzRGVsZXRlUGFyYW1zLCB1ZCBhcyBnZXRNYWNoaW5lRGlzcGxheU5h
bWUsIHVsIGFzIHZhbGlkYXRlTm9kZVJlbmFtZVBhcmFtcywgdXAgYXMgcmVzb2x2ZVNlc3Npb25S
ZXNldFBvbGljeSwgdXMgYXMgZ2V0QWN0aXZlU2VjcmV0c1J1bnRpbWVTbmFwc2hvdCwgdXUgYXMg
cmVxdWVzdEhlYXJ0YmVhdE5vdywgdmMgYXMgdmFsaWRhdGVDaGF0QWJvcnRQYXJhbXMsIHZnIGFz
IFNzckZCbG9ja2VkRXJyb3IsIHZoIGFzIHJlc29sdmVHYXRld2F5QXV0aCwgdmkgYXMgcmVzb2x2
ZUFnZW50VGltZW91dE1zLCB2bCBhcyB2YWxpZGF0ZVNlc3Npb25zRGVsZXRlUGFyYW1zLCB2bSBh
cyBtb3ZlUGF0aFRvVHJhc2gsIHZuIGFzIGJ1aWxkQmFyZVNlc3Npb25SZXNldFByb21wdCwgdm8g
YXMgbWFya0dhdGV3YXlTaWd1c3IxUmVzdGFydEhhbmRsZWQsIHZwIGFzIHJlc29sdmVNYWluU2Vz
c2lvbktleSwgdnIgYXMgcmVnaXN0ZXJTa2lsbHNDaGFuZ2VMaXN0ZW5lciwgd2MgYXMgdmFsaWRh
dGVDb25maWdQYXRjaFBhcmFtcywgd2kgYXMgZ2V0QWdlbnRSdW5Db250ZXh0LCB3bCBhcyB2YWxp
ZGF0ZVNlc3Npb25zVXNhZ2VQYXJhbXMsIHdtIGFzIHJhd0RhdGFUb1N0cmluZywgd24gYXMgcnVu
Q2xpQWdlbnQsIHdvIGFzIGZvcm1hdERvY3Rvck5vbkludGVyYWN0aXZlSGludCwgd3IgYXMgZXh0
cmFjdEZpbGVDb250ZW50RnJvbVNvdXJjZSwgd3UgYXMgcmVhZEV4ZWNBcHByb3ZhbHNTbmFwc2hv
dCwgd3YgYXMgZm9ybWF0WEhpZ2hNb2RlbEhpbnQsIHhjIGFzIHZhbGlkYXRlQ2hhdFNlbmRQYXJh
bXMsIHhpIGFzIHJlc29sdmVJbmdyZXNzV29ya3NwYWNlT3ZlcnJpZGVGb3JTcGF3bmVkUnVuLCB4
bCBhcyB2YWxpZGF0ZVNlc3Npb25zUHJldmlld1BhcmFtcywgeG4gYXMgc2F2ZUNyb25TdG9yZSwg
eG8gYXMgc2V0UHJlUmVzdGFydERlZmVycmFsQ2hlY2ssIHhyIGFzIERFRkFVTFRfSU5QVVRfSU1B
R0VfTUFYX0JZVEVTLCB4dSBhcyBub3JtYWxpemVFeGVjQXBwcm92YWxzLCB4diBhcyBERUZBVUxU
X01PREVMLCB5IGFzIGJ1aWxkQWxsb3dlZE1vZGVsU2V0LCB5YSBhcyByZWFkQ2hhbm5lbEFsbG93
RnJvbVN0b3JlU3luYywgeWMgYXMgdmFsaWRhdGVDaGF0SGlzdG9yeVBhcmFtcywgeWwgYXMgdmFs
aWRhdGVTZXNzaW9uc0xpc3RQYXJhbXMsIHluIGFzIGxvYWRDcm9uU3RvcmUsIHlvIGFzIHNjaGVk
dWxlR2F0ZXdheVNpZ3VzcjFSZXN0YXJ0LCB5cCBhcyByZXNvbHZlTWFpblNlc3Npb25LZXlGcm9t
Q29uZmlnLCB5dSBhcyBtZXJnZUV4ZWNBcHByb3ZhbHNTb2NrZXREZWZhdWx0cywgeXYgYXMgbm9y
bWFsaXplU2VjcmV0SW5wdXQsIHogYXMgbG9hZE9wZW5DbGF3UGx1Z2lucywgel8gYXMgZ2V0R2xv
YmFsSG9va1J1bm5lciwgemMgYXMgdmFsaWRhdGVEZXZpY2VQYWlyUmVqZWN0UGFyYW1zLCB6ZCBh
cyBpc1NpbGVudFJlcGx5VGV4dCwgemYgYXMgdXBkYXRlU2Vzc2lvblN0b3JlLCB6ZyBhcyB2YWxp
ZGF0ZUNvbmZpZ09iamVjdFdpdGhQbHVnaW5zLCB6aCBhcyByZXNvbHZlR2F0ZXdheUJpbmRIb3N0
LCB6bCBhcyB2YWxpZGF0ZVdpemFyZFN0YXR1c1BhcmFtcywgem8gYXMgbm9ybWFsaXplT3B0aW9u
YWxUZXh0JDEsIHpwIGFzIEdBVEVXQVlfQ0xJRU5UX0NBUFMsIHpyIGFzIGFib3J0RW1iZWRkZWRQ
aVJ1biwgenMgYXMgbWF0Y2hTeXN0ZW1SdW5BcHByb3ZhbEJpbmRpbmcsIHp0IGFzIHNhbml0aXpl
RXhlY0FwcHJvdmFsRGlzcGxheVRleHQgfSBmcm9tICIuL2F1dGgtcHJvZmlsZXMtRFJqcUtFM0cu
anMiOwppbXBvcnQgeyB0IGFzIGZvcm1hdENsaUNvbW1hbmQgfSBmcm9tICIuL2NvbW1hbmQtZm9y
bWF0LUJUbkxWV0k4LmpzIjsKaW1wb3J0IHsgQyBhcyBERUZBVUxUX01FTU9SWV9GSUxFTkFNRSwg
RCBhcyBlbnN1cmVBZ2VudFdvcmtzcGFjZSwgRSBhcyBERUZBVUxUX1VTRVJfRklMRU5BTUUsIE0g
YXMgcmVzb2x2ZVdvcmtzcGFjZVRlbXBsYXRlRGlyLCBTIGFzIERFRkFVTFRfTUVNT1JZX0FMVF9G
SUxFTkFNRSwgVCBhcyBERUZBVUxUX1RPT0xTX0ZJTEVOQU1FLCBfIGFzIERFRkFVTFRfQUdFTlRT
X0ZJTEVOQU1FLCBhIGFzIHJlc29sdmVBZ2VudERpciwgYiBhcyBERUZBVUxUX0hFQVJUQkVBVF9G
SUxFTkFNRSwgZCBhcyByZXNvbHZlQWdlbnRXb3Jrc3BhY2VEaXIsIGYgYXMgcmVzb2x2ZURlZmF1
bHRBZ2VudElkLCBoIGFzIHJlc29sdmVTZXNzaW9uQWdlbnRJZCwgaSBhcyByZXNvbHZlQWdlbnRD
b25maWcsIGogYXMgcmVzb2x2ZURlZmF1bHRBZ2VudFdvcmtzcGFjZURpciwgayBhcyBpc1dvcmtz
cGFjZU9uYm9hcmRpbmdDb21wbGV0ZWQsIGwgYXMgcmVzb2x2ZUFnZW50TW9kZWxGYWxsYmFja3NP
dmVycmlkZSwgbiBhcyBsaXN0QWdlbnRFbnRyaWVzLCByIGFzIGxpc3RBZ2VudElkcywgdSBhcyBy
ZXNvbHZlQWdlbnRTa2lsbHNGaWx0ZXIsIHcgYXMgREVGQVVMVF9TT1VMX0ZJTEVOQU1FLCB4IGFz
IERFRkFVTFRfSURFTlRJVFlfRklMRU5BTUUsIHkgYXMgREVGQVVMVF9CT09UU1RSQVBfRklMRU5B
TUUgfSBmcm9tICIuL2FnZW50LXNjb3BlLUNaSUY5M3U3LmpzIjsKaW1wb3J0IHsgQyBhcyBpc0Ny
b25SdW5TZXNzaW9uS2V5LCBFIGFzIHBhcnNlQWdlbnRTZXNzaW9uS2V5LCBTIGFzIGlzQWNwU2Vz
c2lvbktleSwgVCBhcyBpc1N1YmFnZW50U2Vzc2lvbktleSwgXyBhcyBub3JtYWxpemVBY2NvdW50
SWQkMSwgYyBhcyBub3JtYWxpemVBZ2VudElkLCBnIGFzIERFRkFVTFRfQUNDT1VOVF9JRCwgaCBh
cyB0b0FnZW50U3RvcmVTZXNzaW9uS2V5LCBsIGFzIG5vcm1hbGl6ZU1haW5LZXksIG0gYXMgdG9B
Z2VudFJlcXVlc3RTZXNzaW9uS2V5LCBvIGFzIGNsYXNzaWZ5U2Vzc2lvbktleVNoYXBlLCByIGFz
IGJ1aWxkQWdlbnRNYWluU2Vzc2lvbktleSwgdCBhcyBERUZBVUxUX0FHRU5UX0lELCB1IGFzIHJl
c29sdmVBZ2VudElkRnJvbVNlc3Npb25LZXkgfSBmcm9tICIuL3Nlc3Npb24ta2V5LTUxTG5JU3Bx
LmpzIjsKaW1wb3J0IHsgRSBhcyBpc1BsYWluT2JqZWN0LCBTIGFzIHNsZWVwLCBUIGFzIHRydW5j
YXRlVXRmMTZTYWZlLCBuIGFzIGNsYW1wLCBzIGFzIGVuc3VyZURpciwgdiBhcyByZXNvbHZlVXNl
clBhdGgsIHggYXMgc2hvcnRlbkhvbWVQYXRoIH0gZnJvbSAiLi91dGlscy1CODhhMDk2Si5qcyI7
CmltcG9ydCB7IGEgYXMgc2FtZUZpbGVJZGVudGl0eSwgaSBhcyBvcGVuVmVyaWZpZWRGaWxlU3lu
YywgbSBhcyBtYXRjaGVzU2tpbGxGaWx0ZXIsIG4gYXMgb3BlbkJvdW5kYXJ5RmlsZSwgciBhcyBv
cGVuQm91bmRhcnlGaWxlU3luYywgdSBhcyBpc05vdEZvdW5kUGF0aEVycm9yIH0gZnJvbSAiLi9i
b3VuZGFyeS1maWxlLXJlYWQtQmIwV0RVSU4uanMiOwppbXBvcnQgeyBpIGFzIGxvZ1dhcm4sIHQg
YXMgbG9nRGVidWcgfSBmcm9tICIuL2xvZ2dlci1EMG1zeE96Mi5qcyI7CmltcG9ydCB7IG4gYXMg
cnVuRXhlYywgdCBhcyBydW5Db21tYW5kV2l0aFRpbWVvdXQgfSBmcm9tICIuL2V4ZWMtQ2RaSnR2
aXouanMiOwppbXBvcnQgeyB0IGFzIHJlc29sdmVPcGVuQ2xhd1BhY2thZ2VSb290IH0gZnJvbSAi
Li9vcGVuY2xhdy1yb290LUNiY0JKWmdPLmpzIjsKaW1wb3J0IHsgYSBhcyBoYXNDb25maWd1cmVk
U2VjcmV0SW5wdXQgfSBmcm9tICIuL3R5cGVzLnNlY3JldHMtQnZOb1NmVWYuanMiOwppbXBvcnQg
Ii4vZ2l0aHViLWNvcGlsb3QtdG9rZW4tRFFkN2F4RDUuanMiOwppbXBvcnQgeyBDIGFzIGNyZWF0
ZUludGVybmFsSG9va0V2ZW50LCBTIGFzIGNsZWFySW50ZXJuYWxIb29rcywgVCBhcyB0cmlnZ2Vy
SW50ZXJuYWxIb29rLCBiIGFzIGNhbm9uaWNhbGl6ZVBhdGhWYXJpYW50LCBoIGFzIGNyZWF0ZUVt
cHR5UGx1Z2luUmVnaXN0cnksIHQgYXMgQ0hBTk5FTF9JRFMsIHUgYXMgZ2V0QWN0aXZlUGx1Z2lu
UmVnaXN0cnksIHYgYXMgUFJPVEVDVEVEX1BMVUdJTl9ST1VURV9QUkVGSVhFUywgdyBhcyByZWdp
c3RlckludGVybmFsSG9vaywgeSBhcyBjYW5vbmljYWxpemVQYXRoRm9yU2VjdXJpdHkgfSBmcm9t
ICIuL3JlZ2lzdHJ5LUR0VEtKZk44LmpzIjsKaW1wb3J0IHsgVCBhcyBpc1Rlc3REZWZhdWx0TWVt
b3J5U2xvdERpc2FibGVkLCBpIGFzIGxvYWRXb3Jrc3BhY2VTa2lsbEVudHJpZXMsIHIgYXMgYnVp
bGRXb3Jrc3BhY2VTa2lsbFNuYXBzaG90IH0gZnJvbSAiLi9za2lsbHMtQ3R6VWltelkuanMiOwpp
bXBvcnQgeyBmIGFzIGhhc0JpbmFyeSB9IGZyb20gIi4vZnJvbnRtYXR0ZXItRDBLM3FYUUguanMi
OwppbXBvcnQgIi4vZW52LW92ZXJyaWRlcy1EN1IzUnNjQy5qcyI7CmltcG9ydCB7IG4gYXMgcmVz
b2x2ZVJ1bnRpbWVTZXJ2aWNlVmVyc2lvbiwgdCBhcyBWRVJTSU9OIH0gZnJvbSAiLi92ZXJzaW9u
LURjQTlJVHljLmpzIjsKaW1wb3J0IHsgaSBhcyBwYXJzZUR1cmF0aW9uTXMsIHIgYXMgcmVzb2x2
ZU1lbW9yeUJhY2tlbmRDb25maWcsIHQgYXMgZ2V0TWVtb3J5U2VhcmNoTWFuYWdlciB9IGZyb20g
Ii4vc2VhcmNoLW1hbmFnZXItQ1I1Y3lranAuanMiOwppbXBvcnQgeyBVIGFzIHJlc29sdmVXaGF0
c0FwcEFjY291bnQsIGN0IGFzIG5vcm1hbGl6ZVdoYXRzQXBwVGFyZ2V0LCBnIGFzIGJ1aWxkQ2hh
bm5lbEFjY291bnRCaW5kaW5ncywgbiBhcyBsaXN0Q2hhbm5lbFBsdWdpbnMsIHIgYXMgbm9ybWFs
aXplQ2hhbm5lbElkLCB0IGFzIGdldENoYW5uZWxQbHVnaW4sIHV0IGFzIHJlc29sdmVDaGFubmVs
RGVmYXVsdEFjY291bnRJZCB9IGZyb20gIi4vcGx1Z2lucy1DLXo2VlpsTy5qcyI7CmltcG9ydCB7
IEIgYXMgcmVhZExvY2FsRmlsZVNhZmVseSwgSCBhcyB3cml0ZUZpbGVXaXRoaW5Sb290LCBMIGFz
IG9wZW5GaWxlV2l0aGluUm9vdCwgTiBhcyBTYWZlT3BlbkVycm9yLCBXIGFzIGRldGVjdE1pbWUg
fSBmcm9tICIuL3F1ZXJ5LWV4cGFuc2lvbi1FNzhmWDBlbi5qcyI7CmltcG9ydCB7IGEgYXMgdGVz
dFJlZ2V4V2l0aEJvdW5kZWRJbnB1dCwgaSBhcyBjb21waWxlU2FmZVJlZ2V4IH0gZnJvbSAiLi9y
ZWRhY3QtRHJVYTJ2NFMuanMiOwppbXBvcnQgeyBvIGFzIGlzRXJybm8sIHIgYXMgZm9ybWF0RXJy
b3JNZXNzYWdlIH0gZnJvbSAiLi9lcnJvcnMtQmd1NVkzSkkuanMiOwppbXBvcnQgIi4vZmV0Y2gt
Qm1FblNpbVYuanMiOwppbXBvcnQgeyBuIGFzIGFzc2VydE5vUGF0aEFsaWFzRXNjYXBlIH0gZnJv
bSAiLi9wYXRoLWFsaWFzLWd1YXJkcy1DMmZFWFJYOS5qcyI7CmltcG9ydCB7IGwgYXMgZW5zdXJl
UG9ydEF2YWlsYWJsZSwgbSBhcyBmb3JtYXRQb3J0RGlhZ25vc3RpY3MsIG8gYXMgY2xlYW5TdGFs
ZUdhdGV3YXlQcm9jZXNzZXNTeW5jLCB1IGFzIGluc3BlY3RQb3J0VXNhZ2UgfSBmcm9tICIuL2Nt
ZC1hcmd2LUNubDI2NlBULmpzIjsKaW1wb3J0ICIuL2RlbGl2ZXJ5LXF1ZXVlLXVvdGZ3UkgzLmpz
IjsKaW1wb3J0IHsgYSBhcyByZXNvbHZlU2Vzc2lvblRyYW5zY3JpcHRQYXRoLCBjIGFzIHJlc29s
dmVTZXNzaW9uVHJhbnNjcmlwdHNEaXJGb3JBZ2VudCwgaSBhcyByZXNvbHZlU2Vzc2lvbkZpbGVQ
YXRoT3B0aW9ucywgbCBhcyByZXNvbHZlU3RvcmVQYXRoLCByIGFzIHJlc29sdmVTZXNzaW9uRmls
ZVBhdGggfSBmcm9tICIuL3BhdGhzLUI5cTRFdjNULmpzIjsKaW1wb3J0IHsgYyBhcyBmb3JtYXRV
c2QsIGQgYXMgZGVyaXZlU2Vzc2lvblRvdGFsVG9rZW5zLCBmIGFzIGhhc05vbnplcm9Vc2FnZSwg
aSBhcyBsb2FkU2Vzc2lvblVzYWdlVGltZVNlcmllcywgbiBhcyBsb2FkQ29zdFVzYWdlU3VtbWFy
eSwgciBhcyBsb2FkU2Vzc2lvbkNvc3RTdW1tYXJ5LCBzIGFzIGZvcm1hdFRva2VuQ291bnQsIHQg
YXMgZGlzY292ZXJBbGxTZXNzaW9ucyB9IGZyb20gIi4vc2Vzc2lvbi1jb3N0LXVzYWdlLUI3WVNz
bG9fLmpzIjsKaW1wb3J0ICIuL3Byb21wdC1zdHlsZS1DOTRIWHZTSC5qcyI7CmltcG9ydCB7IHQg
YXMgZm9ybWF0RG9jc0xpbmsgfSBmcm9tICIuL2xpbmtzLUJ1V3RRS0s1LmpzIjsKaW1wb3J0IHsg
biBhcyBydW5Db21tYW5kV2l0aFJ1bnRpbWUgfSBmcm9tICIuL2NsaS11dGlscy1DQ0R5bFJrWC5q
cyI7CmltcG9ydCB7IHQgYXMgYnVpbGRXb3Jrc3BhY2VTa2lsbFN0YXR1cyB9IGZyb20gIi4vc2tp
bGxzLXN0YXR1cy12WkFBd2poWS5qcyI7CmltcG9ydCB7IGkgYXMgb25IZWFydGJlYXRFdmVudCwg
ciBhcyBnZXRMYXN0SGVhcnRiZWF0RXZlbnQsIHQgYXMgcmVzb2x2ZUhlYXJ0YmVhdFZpc2liaWxp
dHkgfSBmcm9tICIuL2hlYXJ0YmVhdC12aXNpYmlsaXR5LUNsMHR4dThlLmpzIjsKaW1wb3J0IHsg
dCBhcyBlbnN1cmVPcGVuQ2xhd0NsaU9uUGF0aCB9IGZyb20gIi4vcGF0aC1lbnYtQ0dkQVBIeHIu
anMiOwppbXBvcnQgeyBuIGFzIERFRkFVTFRfR0FURVdBWV9IVFRQX1RPT0xfREVOWSB9IGZyb20g
Ii4vZGFuZ2Vyb3VzLXRvb2xzLUJRckpfUFduLmpzIjsKaW1wb3J0IHsgdCBhcyByZWFkU2VjcmV0
RnJvbUZpbGUgfSBmcm9tICIuL3NlY3JldC1maWxlLUN2V190RnJOLmpzIjsKaW1wb3J0IHsgbiBh
cyBpbmhlcml0T3B0aW9uRnJvbVBhcmVudCB9IGZyb20gIi4vY29tbWFuZC1vcHRpb25zLURxZkkt
WEI4LmpzIjsKaW1wb3J0IHsgdCBhcyBXaXphcmRDYW5jZWxsZWRFcnJvciB9IGZyb20gIi4vcHJv
bXB0cy1EOXJiZ0h3Zi5qcyI7CmltcG9ydCB7IGEgYXMgcHJ1bmVBZ2VudENvbmZpZywgaSBhcyBs
b2FkQWdlbnRJZGVudGl0eSwgciBhcyBmaW5kQWdlbnRFbnRyeUluZGV4LCB0IGFzIGFwcGx5QWdl
bnRDb25maWcgfSBmcm9tICIuL2FnZW50cy5jb25maWctRGZlR3NtNjIuanMiOwppbXBvcnQgeyB0
IGFzIGlzV2l0aGluRGlyIH0gZnJvbSAiLi9wYXRoLXNhZmV0eS1aOTdGTzFLLS5qcyI7CmltcG9y
dCAiLi9pbnN0YWxsLXNhZmUtcGF0aC1EWk0ySkhjQy5qcyI7CmltcG9ydCAiLi9za2lsbC1zY2Fu
bmVyLU1zMHVaWWR3LmpzIjsKaW1wb3J0IHsgbiBhcyBmb3JtYXRDb25maWdJc3N1ZUxpbmVzIH0g
ZnJvbSAiLi9pc3N1ZS1mb3JtYXQtRFNFcVBrd3guanMiOwppbXBvcnQgeyB0IGFzIGJ1aWxkQ2hh
bm5lbEFjY291bnRTbmFwc2hvdCB9IGZyb20gIi4vc3RhdHVzLUhfMXVZcTh3LmpzIjsKaW1wb3J0
ICIuL2NoYW5uZWxzLXN0YXR1cy1pc3N1ZXMtRDBEMUdONWUuanMiOwppbXBvcnQgeyBuIGFzIHZl
cmlmeURldmljZUJvb3RzdHJhcFRva2VuIH0gZnJvbSAiLi9kZXZpY2UtYm9vdHN0cmFwLUJLSFJD
SlR2LmpzIjsKaW1wb3J0IHsgYSBhcyBidWlsZEJhc2VIaW50cywgaSBhcyBhcHBseVNlbnNpdGl2
ZUhpbnRzLCBuIGFzIHJlZGFjdENvbmZpZ1NuYXBzaG90LCBvIGFzIG1hcFNlbnNpdGl2ZVBhdGhz
LCByIGFzIHJlc3RvcmVSZWRhY3RlZFZhbHVlcywgcyBhcyBhcHBseURlcml2ZWRUYWdzLCB0IGFz
IHJlZGFjdENvbmZpZ09iamVjdCB9IGZyb20gIi4vcmVkYWN0LXNuYXBzaG90LTNTd0VVWWZxLmpz
IjsKaW1wb3J0ICIuL2RhZW1vbi1pbnN0YWxsLXBsYW4uc2hhcmVkLUM4MjdVcFp2LmpzIjsKaW1w
b3J0ICIuL3J1bnRpbWUtZ3VhcmQtQkd1TXlRZVQuanMiOwppbXBvcnQgIi4vZ2F0ZXdheS1pbnN0
YWxsLXRva2VuLUJDajU0WURSLmpzIjsKaW1wb3J0ICIuL3J1bnRpbWUtcGFyc2UtQkNSV2NyZTku
anMiOwppbXBvcnQgeyBwIGFzIHNjaGVkdWxlRGV0YWNoZWRMYXVuY2hkUmVzdGFydEhhbmRvZmYg
fSBmcm9tICIuL2xhdW5jaGQtRG5UVl9iYzcuanMiOwppbXBvcnQgeyBjIGFzIGlzR2F0ZXdheUFy
Z3YsIGwgYXMgcGFyc2VQcm9jQ21kbGluZSB9IGZyb20gIi4vc2VydmljZS1CNk8yWTlMMS5qcyI7
CmltcG9ydCAiLi9zeXN0ZW1kLS0tWjFjMTk3LmpzIjsKaW1wb3J0ICIuL2xpZmVjeWNsZS1jb3Jl
LUJXR0VkOHJhLmpzIjsKaW1wb3J0ICIuL3N5c3RlbWQtaGludHMtQzVwSDNYZHMuanMiOwppbXBv
cnQgeyB0IGFzIHBhcnNlUG9ydCQxIH0gZnJvbSAiLi9wYXJzZS1wb3J0LUQ2R3NPelgyLmpzIjsK
aW1wb3J0IHsgbiBhcyBhZGRHYXRld2F5U2VydmljZUNvbW1hbmRzIH0gZnJvbSAiLi9kYWVtb24t
Y2xpLUNmajVHZkNDLmpzIjsKaW1wb3J0IHsgciBhcyBwcm9iZUdhdGV3YXkgfSBmcm9tICIuL3By
b2JlLWF1dGgtQjFseUlZMHguanMiOwppbXBvcnQgIi4vZGlhZ25vc3RpY3MtQkhSZ3Z3MVEuanMi
OwppbXBvcnQgIi4vaW5zcGVjdC1DMXdIVjRLdC5qcyI7CmltcG9ydCB7IGEgYXMgcmVqZWN0RGV2
aWNlUGFpcmluZywgYyBhcyByZXZva2VEZXZpY2VUb2tlbiwgZCBhcyB1cGRhdGVQYWlyZWREZXZp
Y2VNZXRhZGF0YSwgZiBhcyB2ZXJpZnlEZXZpY2VUb2tlbiwgaSBhcyBsaXN0RGV2aWNlUGFpcmlu
ZywgbCBhcyByb3RhdGVEZXZpY2VUb2tlbiwgbiBhcyBlbnN1cmVEZXZpY2VUb2tlbiwgbyBhcyBy
ZW1vdmVQYWlyZWREZXZpY2UsIHAgYXMgcm9sZVNjb3Blc0FsbG93LCByIGFzIGdldFBhaXJlZERl
dmljZSwgcyBhcyByZXF1ZXN0RGV2aWNlUGFpcmluZywgdCBhcyBhcHByb3ZlRGV2aWNlUGFpcmlu
ZywgdSBhcyBzdW1tYXJpemVEZXZpY2VUb2tlbnMgfSBmcm9tICIuL2RldmljZS1wYWlyaW5nLURs
WC11UGcyLmpzIjsKaW1wb3J0ICIuL3RhYmxlLUJGMVhJMTNDLmpzIjsKaW1wb3J0IHsgbiBhcyBy
ZXNvbHZlV2lkZUFyZWFEaXNjb3ZlcnlEb21haW4sIHIgYXMgd3JpdGVXaWRlQXJlYUdhdGV3YXla
b25lIH0gZnJvbSAiLi93aWRlYXJlYS1kbnMtWkwzREpIYXguanMiOwppbXBvcnQgeyBpIGFzIHRv
T3B0aW9uU3RyaW5nLCBuIGFzIGV4dHJhY3RHYXRld2F5TWlza2V5cywgciBhcyBtYXliZUV4cGxh
aW5HYXRld2F5U2VydmljZVN0b3AsIHQgYXMgZGVzY3JpYmVVbmtub3duRXJyb3IgfSBmcm9tICIu
L3NoYXJlZC1EUWFVS3RFNC5qcyI7CmltcG9ydCB7IHQgYXMgZGlzY292ZXJHYXRld2F5QmVhY29u
cyB9IGZyb20gIi4vYm9uam91ci1kaXNjb3ZlcnktcEZIREFBOWkuanMiOwppbXBvcnQgeyBpIGFz
IHBpY2tHYXRld2F5U2VsZlByZXNlbmNlLCByIGFzIGdldFN0YXR1c1N1bW1hcnkgfSBmcm9tICIu
L3N0YXR1cy1ERDFua1VISy5qcyI7CmltcG9ydCB7IGEgYXMgc3R5bGVIZWFsdGhDaGFubmVsTGlu
ZSwgYyBhcyBzdGFydEhlYXJ0YmVhdFJ1bm5lciwgbiBhcyBnZXRIZWFsdGhTbmFwc2hvdCwgcyBh
cyBydW5IZWFydGJlYXRPbmNlLCB0IGFzIGZvcm1hdEhlYWx0aENoYW5uZWxMaW5lcyB9IGZyb20g
Ii4vaGVhbHRoLURTVHRHQlVWLmpzIjsKaW1wb3J0IHsgbiBhcyBjcmVhdGVEZWZhdWx0RGVwcywg
ciBhcyBjcmVhdGVPdXRib3VuZFNlbmREZXBzJDEsIHQgYXMgY3JlYXRlT3V0Ym91bmRTZW5kRGVw
cyB9IGZyb20gIi4vb3V0Ym91bmQtc2VuZC1kZXBzLUN6aGxjb0xhLmpzIjsKaW1wb3J0IHsgYSBh
cyByZXNvbHZlQ29udHJvbFVpUm9vdE92ZXJyaWRlU3luYywgbiBhcyBpc1BhY2thZ2VQcm92ZW5D
b250cm9sVWlSb290U3luYywgbyBhcyByZXNvbHZlQ29udHJvbFVpUm9vdFN5bmMsIHQgYXMgZW5z
dXJlQ29udHJvbFVpQXNzZXRzQnVpbHQgfSBmcm9tICIuL2NvbnRyb2wtdWktYXNzZXRzLTJQRE1a
djIzLmpzIjsKaW1wb3J0IHsgbSBhcyBub3JtYWxpemVVcGRhdGVDaGFubmVsLCBuIGFzIGNoZWNr
VXBkYXRlU3RhdHVzLCBvIGFzIHJlc29sdmVOcG1DaGFubmVsVGFnLCByIGFzIGNvbXBhcmVTZW12
ZXJTdHJpbmdzIH0gZnJvbSAiLi9jaGFubmVsLWFjY291bnQtY29udGV4dC1EXzBheGRZaS5qcyI7
CmltcG9ydCAiLi9vbmJvYXJkaW5nLnNlY3JldC1pbnB1dC1CaEVEamxmZy5qcyI7CmltcG9ydCB7
IHQgYXMgcnVuT25ib2FyZGluZ1dpemFyZCB9IGZyb20gIi4vb25ib2FyZGluZy1FOWZyZlRaei5q
cyI7CmltcG9ydCB7IGEgYXMgcmVzb2x2ZUFwbnNBdXRoQ29uZmlnRnJvbUVudiwgYyBhcyBzaG91
bGRDbGVhclN0b3JlZEFwbnNSZWdpc3RyYXRpb24sIGQgYXMgcGFyc2VNZXNzYWdlV2l0aEF0dGFj
aG1lbnRzLCBmIGFzIGZvcm1hdEZvckxvZywgZyBhcyBzZXRHYXRld2F5V3NMb2dTdHlsZSwgaCBh
cyBzdW1tYXJpemVBZ2VudEV2ZW50Rm9yV3NMb2csIGwgYXMgcmVzb2x2ZUFwbnNSZWxheUNvbmZp
Z0Zyb21FbnYsIG0gYXMgc2hvdWxkTG9nV3MsIG4gYXMgbG9hZEFwbnNSZWdpc3RyYXRpb24sIG8g
YXMgc2VuZEFwbnNBbGVydCwgcCBhcyBsb2dXcywgciBhcyBub3JtYWxpemVBcG5zRW52aXJvbm1l
bnQsIHMgYXMgc2VuZEFwbnNCYWNrZ3JvdW5kV2FrZSwgdCBhcyBjbGVhckFwbnNSZWdpc3RyYXRp
b25JZkN1cnJlbnQsIHUgYXMgbm9ybWFsaXplUnBjQXR0YWNobWVudHNUb0NoYXRBdHRhY2htZW50
cyB9IGZyb20gIi4vcHVzaC1hcG5zLXY1VUo1a2ctLmpzIjsKaW1wb3J0IHsgXyBhcyBidWlsZEdv
Z1dhdGNoU3RhcnRBcmdzLCBnIGFzIGJ1aWxkR29nV2F0Y2hTZXJ2ZUFyZ3MsIGkgYXMgZW5zdXJl
VGFpbHNjYWxlRW5kcG9pbnQsIHcgYXMgcmVzb2x2ZUdtYWlsSG9va1J1bnRpbWVDb25maWcgfSBm
cm9tICIuL2dtYWlsLXNldHVwLXV0aWxzLUM3ekF6aGJDLmpzIjsKaW1wb3J0IHsgZiBhcyBub3Jt
YWxpemVTdG9yZWRDcm9uSm9icywgaCBhcyBjb21wdXRlUHJldmlvdXNSdW5BdE1zLCBtIGFzIGNv
bXB1dGVOZXh0UnVuQXRNcywgcCBhcyBjb2VyY2VGaW5pdGVTY2hlZHVsZU51bWJlciwgdCBhcyBy
dW5HYXRld2F5VXBkYXRlIH0gZnJvbSAiLi91cGRhdGUtcnVubmVyLUR3UkIwSHlFLmpzIjsKaW1w
b3J0IHsgYSBhcyByZXNvbHZlQWdlbnRPdXRib3VuZFRhcmdldCwgaSBhcyByZXNvbHZlQWdlbnRE
ZWxpdmVyeVBsYW4sIG4gYXMgYWdlbnRDb21tYW5kRnJvbUluZ3Jlc3MgfSBmcm9tICIuL2FnZW50
LUR0a3JWN2RuLmpzIjsKaW1wb3J0IHsgbiBhcyBpc05vZGVDb21tYW5kQWxsb3dlZCwgciBhcyBy
ZXNvbHZlTm9kZUNvbW1hbmRBbGxvd2xpc3QgfSBmcm9tICIuL25vZGUtY29tbWFuZC1wb2xpY3kt
Qnl4MmplZHkuanMiOwppbXBvcnQgeyBfIGFzIHJlc29sdmVIb29rVGFyZ2V0QWdlbnRJZCwgYSBh
cyBnZXRIb29rQWdlbnRQb2xpY3lFcnJvciwgYiBhcyByZXNvbHZlRnVuY3Rpb25Nb2R1bGVFeHBv
cnQsIGMgYXMgbm9ybWFsaXplQWdlbnRQYXlsb2FkLCBkIGFzIG5vcm1hbGl6ZVdha2VQYXlsb2Fk
LCBmIGFzIHJlYWRKc29uQm9keSwgZyBhcyByZXNvbHZlSG9va1Nlc3Npb25LZXksIGggYXMgcmVz
b2x2ZUhvb2tJZGVtcG90ZW5jeUtleSwgaSBhcyBleHRyYWN0SG9va1Rva2VuLCBsIGFzIG5vcm1h
bGl6ZUhvb2tEaXNwYXRjaFNlc3Npb25LZXksIG0gYXMgcmVzb2x2ZUhvb2tEZWxpdmVyLCBuIGFz
IGNvbGxlY3RFbmFibGVkSW5zZWN1cmVPckRhbmdlcm91c0ZsYWdzLCBvIGFzIGdldEhvb2tDaGFu
bmVsRXJyb3IsIHAgYXMgcmVzb2x2ZUhvb2tDaGFubmVsLCBzIGFzIGlzSG9va0FnZW50QWxsb3dl
ZCwgdSBhcyBub3JtYWxpemVIb29rSGVhZGVycywgdiBhcyByZXNvbHZlSG9va3NDb25maWcsIHkg
YXMgYXBwbHlIb29rTWFwcGluZ3MgfSBmcm9tICIuL2F1ZGl0LUI3alNRS0FULmpzIjsKaW1wb3J0
ICIuL25vZGUtc2VydmljZS03eUljNlJSWS5qcyI7CmltcG9ydCAiLi9zdGF0dXMudXBkYXRlLUJE
TUFrSnlVLmpzIjsKaW1wb3J0IHsgdCBhcyBpbnN0YWxsU2tpbGwgfSBmcm9tICIuL3NraWxscy1p
bnN0YWxsLUNrbGdIVWFZLmpzIjsKaW1wb3J0IHsgaSBhcyBzaG91bGRJbmNsdWRlSG9vaywgciBh
cyByZXNvbHZlSG9va0NvbmZpZywgdCBhcyBsb2FkV29ya3NwYWNlSG9va0VudHJpZXMgfSBmcm9t
ICIuL3dvcmtzcGFjZS1CbERISVE5Vi5qcyI7CmltcG9ydCB7IG4gYXMgZm9yY2VGcmVlUG9ydEFu
ZFdhaXQsIHIgYXMgd2FpdEZvclBvcnRCaW5kYWJsZSB9IGZyb20gIi4vcG9ydHMtQ2NjTHRYZE0u
anMiOwppbXBvcnQgeyBleGVjLCBzcGF3biwgc3Bhd25TeW5jIH0gZnJvbSAibm9kZTpjaGlsZF9w
cm9jZXNzIjsKaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCwgcGF0aFRvRmlsZVVSTCB9IGZyb20gIm5v
ZGU6dXJsIjsKaW1wb3J0IG9zIGZyb20gIm5vZGU6b3MiOwppbXBvcnQgcGF0aCBmcm9tICJub2Rl
OnBhdGgiOwppbXBvcnQgKiBhcyBmc1N5bmMgZnJvbSAibm9kZTpmcyI7CmltcG9ydCBmcyBmcm9t
ICJub2RlOmZzIjsKaW1wb3J0IGNoYWxrIGZyb20gImNoYWxrIjsKaW1wb3J0IHsgaXNEZWVwU3Ry
aWN0RXF1YWwgfSBmcm9tICJub2RlOnV0aWwiOwppbXBvcnQgZnMkMSBmcm9tICJub2RlOmZzL3By
b21pc2VzIjsKaW1wb3J0IGNyeXB0bywgeyBjcmVhdGVIYXNoLCByYW5kb21CeXRlcywgcmFuZG9t
VVVJRCB9IGZyb20gIm5vZGU6Y3J5cHRvIjsKaW1wb3J0IHsgeiB9IGZyb20gInpvZCI7CmltcG9y
dCBuZXQgZnJvbSAibm9kZTpuZXQiOwppbXBvcnQgeyBDVVJSRU5UX1NFU1NJT05fVkVSU0lPTiwg
U2Vzc2lvbk1hbmFnZXIgfSBmcm9tICJAbWFyaW96ZWNobmVyL3BpLWNvZGluZy1hZ2VudCI7Cmlt
cG9ydCB7IGNyZWF0ZVNlcnZlciBhcyBjcmVhdGVTZXJ2ZXIkMSB9IGZyb20gIm5vZGU6aHR0cCI7
CmltcG9ydCB7IGNyZWF0ZVNlcnZlciBhcyBjcmVhdGVTZXJ2ZXIkMiB9IGZyb20gIm5vZGU6aHR0
cHMiOwppbXBvcnQgeyBXZWJTb2NrZXRTZXJ2ZXIgfSBmcm9tICJ3cyI7CmltcG9ydCB7IEJ1ZmZl
ciBhcyBCdWZmZXIkMSB9IGZyb20gIm5vZGU6YnVmZmVyIjsKaW1wb3J0IGNob2tpZGFyIGZyb20g
ImNob2tpZGFyIjsKaW1wb3J0IHsgQXN5bmNMb2NhbFN0b3JhZ2UgfSBmcm9tICJub2RlOmFzeW5j
X2hvb2tzIjsKLy8jcmVnaW9uIHNyYy9pbmZyYS9zc2gtY29uZmlnLnRzCmZ1bmN0aW9uIHBhcnNl
UG9ydCh2YWx1ZSkgewoJaWYgKCF2YWx1ZSkgcmV0dXJuOwoJY29uc3QgcGFyc2VkID0gTnVtYmVy
LnBhcnNlSW50KHZhbHVlLCAxMCk7CglpZiAoIU51bWJlci5pc0Zpbml0ZShwYXJzZWQpIHx8IHBh
cnNlZCA8PSAwKSByZXR1cm47CglyZXR1cm4gcGFyc2VkOwp9CmZ1bmN0aW9uIHBhcnNlU3NoQ29u
ZmlnT3V0cHV0KG91dHB1dCkgewoJY29uc3QgcmVzdWx0ID0geyBpZGVudGl0eUZpbGVzOiBbXSB9
OwoJY29uc3QgbGluZXMgPSBvdXRwdXQuc3BsaXQoIlxuIik7Cglmb3IgKGNvbnN0IHJhdyBvZiBs
aW5lcykgewoJCWNvbnN0IGxpbmUgPSByYXcudHJpbSgpOwoJCWlmICghbGluZSkgY29udGludWU7
CgkJY29uc3QgW2tleSwgLi4ucmVzdF0gPSBsaW5lLnNwbGl0KC9ccysvKTsKCQljb25zdCB2YWx1
ZSA9IHJlc3Quam9pbigiICIpLnRyaW0oKTsKCQlpZiAoIWtleSB8fCAhdmFsdWUpIGNvbnRpbnVl
OwoJCXN3aXRjaCAoa2V5KSB7CgkJCWNhc2UgInVzZXIiOgoJCQkJcmVzdWx0LnVzZXIgPSB2YWx1
ZTsKCQkJCWJyZWFrOwoJCQljYXNlICJob3N0bmFtZSI6CgkJCQlyZXN1bHQuaG9zdCA9IHZhbHVl
OwoJCQkJYnJlYWs7CgkJCWNhc2UgInBvcnQiOgoJCQkJcmVzdWx0LnBvcnQgPSBwYXJzZVBvcnQo
dmFsdWUpOwoJCQkJYnJlYWs7CgkJCWNhc2UgImlkZW50aXR5ZmlsZSI6CgkJCQlpZiAodmFsdWUg
IT09ICJub25lIikgcmVzdWx0LmlkZW50aXR5RmlsZXMucHVzaCh2YWx1ZSk7CgkJCQlicmVhazsK
CQkJZGVmYXVsdDogYnJlYWs7CgkJfQoJfQoJcmV0dXJuIHJlc3VsdDsKfQphc3luYyBmdW5jdGlv
biByZXNvbHZlU3NoQ29uZmlnKHRhcmdldCwgb3B0cyA9IHt9KSB7Cgljb25zdCBzc2hQYXRoID0g
Ii91c3IvYmluL3NzaCI7Cgljb25zdCBhcmdzID0gWyItRyJdOwoJaWYgKHRhcmdldC5wb3J0ID4g
MCAmJiB0YXJnZXQucG9ydCAhPT0gMjIpIGFyZ3MucHVzaCgiLXAiLCBTdHJpbmcodGFyZ2V0LnBv
cnQpKTsKCWlmIChvcHRzLmlkZW50aXR5Py50cmltKCkpIGFyZ3MucHVzaCgiLWkiLCBvcHRzLmlk
ZW50aXR5LnRyaW0oKSk7Cgljb25zdCB1c2VySG9zdCA9IHRhcmdldC51c2VyID8gYCR7dGFyZ2V0
LnVzZXJ9QCR7dGFyZ2V0Lmhvc3R9YCA6IHRhcmdldC5ob3N0OwoJYXJncy5wdXNoKCItLSIsIHVz
ZXJIb3N0KTsKCXJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewoJCWNvbnN0
IGNoaWxkID0gc3Bhd24oc3NoUGF0aCwgYXJncywgeyBzdGRpbzogWwoJCQkiaWdub3JlIiwKCQkJ
InBpcGUiLAoJCQkiaWdub3JlIgoJCV0gfSk7CgkJbGV0IHN0ZG91dCA9ICIiOwoJCWNoaWxkLnN0
ZG91dD8uc2V0RW5jb2RpbmcoInV0ZjgiKTsKCQljaGlsZC5zdGRvdXQ/Lm9uKCJkYXRhIiwgKGNo
dW5rKSA9PiB7CgkJCXN0ZG91dCArPSBTdHJpbmcoY2h1bmspOwoJCX0pOwoJCWNvbnN0IHRpbWVv
dXRNcyA9IE1hdGgubWF4KDIwMCwgb3B0cy50aW1lb3V0TXMgPz8gODAwKTsKCQljb25zdCB0aW1l
ciA9IHNldFRpbWVvdXQoKCkgPT4gewoJCQl0cnkgewoJCQkJY2hpbGQua2lsbCgiU0lHS0lMTCIp
OwoJCQl9IGZpbmFsbHkgewoJCQkJcmVzb2x2ZShudWxsKTsKCQkJfQoJCX0sIHRpbWVvdXRNcyk7
CgkJY2hpbGQub25jZSgiZXJyb3IiLCAoKSA9PiB7CgkJCWNsZWFyVGltZW91dCh0aW1lcik7CgkJ
CXJlc29sdmUobnVsbCk7CgkJfSk7CgkJY2hpbGQub25jZSgiZXhpdCIsIChjb2RlKSA9PiB7CgkJ
CWNsZWFyVGltZW91dCh0aW1lcik7CgkJCWlmIChjb2RlICE9PSAwIHx8ICFzdGRvdXQudHJpbSgp
KSB7CgkJCQlyZXNvbHZlKG51bGwpOwoJCQkJcmV0dXJuOwoJCQl9CgkJCXJlc29sdmUocGFyc2VT
c2hDb25maWdPdXRwdXQoc3Rkb3V0KSk7CgkJfSk7Cgl9KTsKfQovLyNlbmRyZWdpb24KLy8jcmVn
aW9uIHNyYy9pbmZyYS9zc2gtdHVubmVsLnRzCmZ1bmN0aW9uIHBhcnNlU3NoVGFyZ2V0KHJhdykg
ewoJY29uc3QgdHJpbW1lZCA9IHJhdy50cmltKCkucmVwbGFjZSgvXnNzaFxzKy8sICIiKTsKCWlm
ICghdHJpbW1lZCkgcmV0dXJuIG51bGw7Cgljb25zdCBbdXNlclBhcnQsIGhvc3RQYXJ0XSA9IHRy
aW1tZWQuaW5jbHVkZXMoIkAiKSA/ICgoKSA9PiB7CgkJY29uc3QgaWR4ID0gdHJpbW1lZC5pbmRl
eE9mKCJAIik7CgkJY29uc3QgdXNlciA9IHRyaW1tZWQuc2xpY2UoMCwgaWR4KS50cmltKCk7CgkJ
Y29uc3QgaG9zdCA9IHRyaW1tZWQuc2xpY2UoaWR4ICsgMSkudHJpbSgpOwoJCXJldHVybiBbdXNl
ciB8fCB2b2lkIDAsIGhvc3RdOwoJfSkoKSA6IFt2b2lkIDAsIHRyaW1tZWRdOwoJY29uc3QgY29s
b25JZHggPSBob3N0UGFydC5sYXN0SW5kZXhPZigiOiIpOwoJaWYgKGNvbG9uSWR4ID4gMCAmJiBj
b2xvbklkeCA8IGhvc3RQYXJ0Lmxlbmd0aCAtIDEpIHsKCQljb25zdCBob3N0ID0gaG9zdFBhcnQu
c2xpY2UoMCwgY29sb25JZHgpLnRyaW0oKTsKCQljb25zdCBwb3J0UmF3ID0gaG9zdFBhcnQuc2xp
Y2UoY29sb25JZHggKyAxKS50cmltKCk7CgkJY29uc3QgcG9ydCA9IE51bWJlci5wYXJzZUludChw
b3J0UmF3LCAxMCk7CgkJaWYgKCFob3N0IHx8ICFOdW1iZXIuaXNGaW5pdGUocG9ydCkgfHwgcG9y
dCA8PSAwKSByZXR1cm4gbnVsbDsKCQlpZiAoaG9zdC5zdGFydHNXaXRoKCItIikpIHJldHVybiBu
dWxsOwoJCXJldHVybiB7CgkJCXVzZXI6IHVzZXJQYXJ0LAoJCQlob3N0LAoJCQlwb3J0CgkJfTsK
CX0KCWlmICghaG9zdFBhcnQpIHJldHVybiBudWxsOwoJaWYgKGhvc3RQYXJ0LnN0YXJ0c1dpdGgo
Ii0iKSkgcmV0dXJuIG51bGw7CglyZXR1cm4gewoJCXVzZXI6IHVzZXJQYXJ0LAoJCWhvc3Q6IGhv
c3RQYXJ0LAoJCXBvcnQ6IDIyCgl9Owp9CmFzeW5jIGZ1bmN0aW9uIHBpY2tFcGhlbWVyYWxQb3J0
KCkgewoJcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKCQlj
b25zdCBzZXJ2ZXIgPSBuZXQuY3JlYXRlU2VydmVyKCk7CgkJc2VydmVyLm9uY2UoImVycm9yIiwg
cmVqZWN0KTsKCQlzZXJ2ZXIubGlzdGVuKDAsICIxMjcuMC4wLjEiLCAoKSA9PiB7CgkJCWNvbnN0
IGFkZHIgPSBzZXJ2ZXIuYWRkcmVzcygpOwoJCQlzZXJ2ZXIuY2xvc2UoKCkgPT4gewoJCQkJaWYg
KCFhZGRyIHx8IHR5cGVvZiBhZGRyID09PSAic3RyaW5nIikgewoJCQkJCXJlamVjdCgvKiBAX19Q
VVJFX18gKi8gbmV3IEVycm9yKCJmYWlsZWQgdG8gYWxsb2NhdGUgYSBsb2NhbCBwb3J0IikpOwoJ
CQkJCXJldHVybjsKCQkJCX0KCQkJCXJlc29sdmUoYWRkci5wb3J0KTsKCQkJfSk7CgkJfSk7Cgl9
KTsKfQphc3luYyBmdW5jdGlvbiBjYW5Db25uZWN0TG9jYWwocG9ydCkgewoJcmV0dXJuIGF3YWl0
IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CgkJY29uc3Qgc29ja2V0ID0gbmV0LmNvbm5lY3Qo
ewoJCQlob3N0OiAiMTI3LjAuMC4xIiwKCQkJcG9ydAoJCX0pOwoJCWNvbnN0IGRvbmUgPSAob2sp
ID0+IHsKCQkJc29ja2V0LnJlbW92ZUFsbExpc3RlbmVycygpOwoJCQlzb2NrZXQuZGVzdHJveSgp
OwoJCQlyZXNvbHZlKG9rKTsKCQl9OwoJCXNvY2tldC5vbmNlKCJjb25uZWN0IiwgKCkgPT4gZG9u
ZSh0cnVlKSk7CgkJc29ja2V0Lm9uY2UoImVycm9yIiwgKCkgPT4gZG9uZShmYWxzZSkpOwoJCXNv
Y2tldC5zZXRUaW1lb3V0KDI1MCwgKCkgPT4gZG9uZShmYWxzZSkpOwoJfSk7Cn0KYXN5bmMgZnVu
Y3Rpb24gd2FpdEZvckxvY2FsTGlzdGVuZXIocG9ydCwgdGltZW91dE1zKSB7Cgljb25zdCBzdGFy
dGVkQXQgPSBEYXRlLm5vdygpOwoJd2hpbGUgKERhdGUubm93KCkgLSBzdGFydGVkQXQgPCB0aW1l
b3V0TXMpIHsKCQlpZiAoYXdhaXQgY2FuQ29ubmVjdExvY2FsKHBvcnQpKSByZXR1cm47CgkJYXdh
aXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgNTApKTsKCX0KCXRocm93IG5ldyBF
cnJvcihgc3NoIHR1bm5lbCBkaWQgbm90IHN0YXJ0IGxpc3RlbmluZyBvbiBsb2NhbGhvc3Q6JHtw
b3J0fWApOwp9CmFzeW5jIGZ1bmN0aW9uIHN0YXJ0U3NoUG9ydEZvcndhcmQob3B0cykgewoJY29u
c3QgcGFyc2VkID0gcGFyc2VTc2hUYXJnZXQob3B0cy50YXJnZXQpOwoJaWYgKCFwYXJzZWQpIHRo
cm93IG5ldyBFcnJvcihgaW52YWxpZCBTU0ggdGFyZ2V0OiAke29wdHMudGFyZ2V0fWApOwoJbGV0
IGxvY2FsUG9ydCA9IG9wdHMubG9jYWxQb3J0UHJlZmVycmVkOwoJdHJ5IHsKCQlhd2FpdCBlbnN1
cmVQb3J0QXZhaWxhYmxlKGxvY2FsUG9ydCk7Cgl9IGNhdGNoIChlcnIpIHsKCQlpZiAoaXNFcnJu
byhlcnIpICYmIGVyci5jb2RlID09PSAiRUFERFJJTlVTRSIpIGxvY2FsUG9ydCA9IGF3YWl0IHBp
Y2tFcGhlbWVyYWxQb3J0KCk7CgkJZWxzZSB0aHJvdyBlcnI7Cgl9Cgljb25zdCB1c2VySG9zdCA9
IHBhcnNlZC51c2VyID8gYCR7cGFyc2VkLnVzZXJ9QCR7cGFyc2VkLmhvc3R9YCA6IHBhcnNlZC5o
b3N0OwoJY29uc3QgYXJncyA9IFsKCQkiLU4iLAoJCSItTCIsCgkJYCR7bG9jYWxQb3J0fToxMjcu
MC4wLjE6JHtvcHRzLnJlbW90ZVBvcnR9YCwKCQkiLXAiLAoJCVN0cmluZyhwYXJzZWQucG9ydCks
CgkJIi1vIiwKCQkiRXhpdE9uRm9yd2FyZEZhaWx1cmU9eWVzIiwKCQkiLW8iLAoJCSJCYXRjaE1v
ZGU9eWVzIiwKCQkiLW8iLAoJCSJTdHJpY3RIb3N0S2V5Q2hlY2tpbmc9eWVzIiwKCQkiLW8iLAoJ
CSJVcGRhdGVIb3N0S2V5cz15ZXMiLAoJCSItbyIsCgkJIkNvbm5lY3RUaW1lb3V0PTUiLAoJCSIt
byIsCgkJIlNlcnZlckFsaXZlSW50ZXJ2YWw9MTUiLAoJCSItbyIsCgkJIlNlcnZlckFsaXZlQ291
bnRNYXg9MyIKCV07CglpZiAob3B0cy5pZGVudGl0eT8udHJpbSgpKSBhcmdzLnB1c2goIi1pIiwg
b3B0cy5pZGVudGl0eS50cmltKCkpOwoJYXJncy5wdXNoKCItLSIsIHVzZXJIb3N0KTsKCWNvbnN0
IHN0ZGVyciA9IFtdOwoJY29uc3QgY2hpbGQgPSBzcGF3bigiL3Vzci9iaW4vc3NoIiwgYXJncywg
eyBzdGRpbzogWwoJCSJpZ25vcmUiLAoJCSJpZ25vcmUiLAoJCSJwaXBlIgoJXSB9KTsKCWNoaWxk
LnN0ZGVycj8uc2V0RW5jb2RpbmcoInV0ZjgiKTsKCWNoaWxkLnN0ZGVycj8ub24oImRhdGEiLCAo
Y2h1bmspID0+IHsKCQljb25zdCBsaW5lcyA9IFN0cmluZyhjaHVuaykuc3BsaXQoIlxuIikubWFw
KChsKSA9PiBsLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOwoJCXN0ZGVyci5wdXNoKC4uLmxpbmVz
KTsKCX0pOwoJY29uc3Qgc3RvcCA9IGFzeW5jICgpID0+IHsKCQlpZiAoY2hpbGQua2lsbGVkKSBy
ZXR1cm47CgkJY2hpbGQua2lsbCgiU0lHVEVSTSIpOwoJCWF3YWl0IG5ldyBQcm9taXNlKChyZXNv
bHZlKSA9PiB7CgkJCWNvbnN0IHQgPSBzZXRUaW1lb3V0KCgpID0+IHsKCQkJCXRyeSB7CgkJCQkJ
Y2hpbGQua2lsbCgiU0lHS0lMTCIpOwoJCQkJfSBmaW5hbGx5IHsKCQkJCQlyZXNvbHZlKCk7CgkJ
CQl9CgkJCX0sIDE1MDApOwoJCQljaGlsZC5vbmNlKCJleGl0IiwgKCkgPT4gewoJCQkJY2xlYXJU
aW1lb3V0KHQpOwoJCQkJcmVzb2x2ZSgpOwoJCQl9KTsKCQl9KTsKCX07Cgl0cnkgewoJCWF3YWl0
IFByb21pc2UucmFjZShbd2FpdEZvckxvY2FsTGlzdGVuZXIobG9jYWxQb3J0LCBNYXRoLm1heCgy
NTAsIG9wdHMudGltZW91dE1zKSksIG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHsKCQkJY2hp
bGQub25jZSgiZXhpdCIsIChjb2RlLCBzaWduYWwpID0+IHsKCQkJCXJlamVjdCgvKiBAX19QVVJF
X18gKi8gbmV3IEVycm9yKGBzc2ggZXhpdGVkICgke2NvZGUgPz8gIm51bGwifSR7c2lnbmFsID8g
YC8ke3NpZ25hbH1gIDogIiJ9KWApKTsKCQkJfSk7CgkJfSldKTsKCX0gY2F0Y2ggKGVycikgewoJ
CWF3YWl0IHN0b3AoKTsKCQljb25zdCBzdWZmaXggPSBzdGRlcnIubGVuZ3RoID4gMCA/IGBcbiR7
c3RkZXJyLmpvaW4oIlxuIil9YCA6ICIiOwoJCXRocm93IG5ldyBFcnJvcihgJHtlcnIgaW5zdGFu
Y2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycil9JHtzdWZmaXh9YCwgeyBjYXVz
ZTogZXJyIH0pOwoJfQoJcmV0dXJuIHsKCQlwYXJzZWRUYXJnZXQ6IHBhcnNlZCwKCQlsb2NhbFBv
cnQsCgkJcmVtb3RlUG9ydDogb3B0cy5yZW1vdGVQb3J0LAoJCXBpZDogdHlwZW9mIGNoaWxkLnBp
ZCA9PT0gIm51bWJlciIgPyBjaGlsZC5waWQgOiBudWxsLAoJCXN0ZGVyciwKCQlzdG9wCgl9Owp9
Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2NvbW1hbmRzL2dhdGV3YXktc3RhdHVzL2hlbHBl
cnMudHMKY29uc3QgTUlTU0lOR19TQ09QRV9QQVRURVJOID0gL1xibWlzc2luZyBzY29wZTpccypb
YS16MC05Ll8tXSsvaTsKZnVuY3Rpb24gcGFyc2VJbnRPck51bGwodmFsdWUpIHsKCWNvbnN0IHMg
PSB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciID8gdmFsdWUudHJpbSgpIDogdHlwZW9mIHZhbHVl
ID09PSAibnVtYmVyIiB8fCB0eXBlb2YgdmFsdWUgPT09ICJiaWdpbnQiID8gU3RyaW5nKHZhbHVl
KSA6ICIiOwoJaWYgKCFzKSByZXR1cm4gbnVsbDsKCWNvbnN0IG4gPSBOdW1iZXIucGFyc2VJbnQo
cywgMTApOwoJcmV0dXJuIE51bWJlci5pc0Zpbml0ZShuKSA/IG4gOiBudWxsOwp9CmZ1bmN0aW9u
IHBhcnNlVGltZW91dE1zKHJhdywgZmFsbGJhY2tNcykgewoJcmV0dXJuIHBhcnNlVGltZW91dE1z
V2l0aEZhbGxiYWNrKHJhdywgZmFsbGJhY2tNcyk7Cn0KZnVuY3Rpb24gbm9ybWFsaXplV3NVcmwo
dmFsdWUpIHsKCWNvbnN0IHRyaW1tZWQgPSB2YWx1ZS50cmltKCk7CglpZiAoIXRyaW1tZWQpIHJl
dHVybiBudWxsOwoJaWYgKCF0cmltbWVkLnN0YXJ0c1dpdGgoIndzOi8vIikgJiYgIXRyaW1tZWQu
c3RhcnRzV2l0aCgid3NzOi8vIikpIHJldHVybiBudWxsOwoJcmV0dXJuIHRyaW1tZWQ7Cn0KZnVu
Y3Rpb24gcmVzb2x2ZVRhcmdldHMoY2ZnLCBleHBsaWNpdFVybCkgewoJY29uc3QgdGFyZ2V0cyA9
IFtdOwoJY29uc3QgYWRkID0gKHQpID0+IHsKCQlpZiAoIXRhcmdldHMuc29tZSgoeCkgPT4geC51
cmwgPT09IHQudXJsKSkgdGFyZ2V0cy5wdXNoKHQpOwoJfTsKCWNvbnN0IGV4cGxpY2l0ID0gdHlw
ZW9mIGV4cGxpY2l0VXJsID09PSAic3RyaW5nIiA/IG5vcm1hbGl6ZVdzVXJsKGV4cGxpY2l0VXJs
KSA6IG51bGw7CglpZiAoZXhwbGljaXQpIGFkZCh7CgkJaWQ6ICJleHBsaWNpdCIsCgkJa2luZDog
ImV4cGxpY2l0IiwKCQl1cmw6IGV4cGxpY2l0LAoJCWFjdGl2ZTogdHJ1ZQoJfSk7Cgljb25zdCBy
ZW1vdGVVcmwgPSB0eXBlb2YgY2ZnLmdhdGV3YXk/LnJlbW90ZT8udXJsID09PSAic3RyaW5nIiA/
IG5vcm1hbGl6ZVdzVXJsKGNmZy5nYXRld2F5LnJlbW90ZS51cmwpIDogbnVsbDsKCWlmIChyZW1v
dGVVcmwpIGFkZCh7CgkJaWQ6ICJjb25maWdSZW1vdGUiLAoJCWtpbmQ6ICJjb25maWdSZW1vdGUi
LAoJCXVybDogcmVtb3RlVXJsLAoJCWFjdGl2ZTogY2ZnLmdhdGV3YXk/Lm1vZGUgPT09ICJyZW1v
dGUiCgl9KTsKCWFkZCh7CgkJaWQ6ICJsb2NhbExvb3BiYWNrIiwKCQlraW5kOiAibG9jYWxMb29w
YmFjayIsCgkJdXJsOiBgd3M6Ly8xMjcuMC4wLjE6JHtyZXNvbHZlR2F0ZXdheVBvcnQoY2ZnKX1g
LAoJCWFjdGl2ZTogY2ZnLmdhdGV3YXk/Lm1vZGUgIT09ICJyZW1vdGUiCgl9KTsKCXJldHVybiB0
YXJnZXRzOwp9CmZ1bmN0aW9uIHJlc29sdmVQcm9iZUJ1ZGdldE1zKG92ZXJhbGxNcywga2luZCkg
ewoJaWYgKGtpbmQgPT09ICJsb2NhbExvb3BiYWNrIikgcmV0dXJuIE1hdGgubWluKDgwMCwgb3Zl
cmFsbE1zKTsKCWlmIChraW5kID09PSAic3NoVHVubmVsIikgcmV0dXJuIE1hdGgubWluKDJlMywg
b3ZlcmFsbE1zKTsKCXJldHVybiBNYXRoLm1pbigxNTAwLCBvdmVyYWxsTXMpOwp9CmZ1bmN0aW9u
IHNhbml0aXplU3NoVGFyZ2V0KHZhbHVlKSB7CglpZiAodHlwZW9mIHZhbHVlICE9PSAic3RyaW5n
IikgcmV0dXJuIG51bGw7Cgljb25zdCB0cmltbWVkID0gdmFsdWUudHJpbSgpOwoJaWYgKCF0cmlt
bWVkKSByZXR1cm4gbnVsbDsKCXJldHVybiB0cmltbWVkLnJlcGxhY2UoL15zc2hcXHMrLywgIiIp
Owp9CmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVBdXRoRm9yVGFyZ2V0KGNmZywgdGFyZ2V0LCBvdmVy
cmlkZXMpIHsKCWNvbnN0IHRva2VuT3ZlcnJpZGUgPSBvdmVycmlkZXMudG9rZW4/LnRyaW0oKSA/
IG92ZXJyaWRlcy50b2tlbi50cmltKCkgOiB2b2lkIDA7Cgljb25zdCBwYXNzd29yZE92ZXJyaWRl
ID0gb3ZlcnJpZGVzLnBhc3N3b3JkPy50cmltKCkgPyBvdmVycmlkZXMucGFzc3dvcmQudHJpbSgp
IDogdm9pZCAwOwoJaWYgKHRva2VuT3ZlcnJpZGUgfHwgcGFzc3dvcmRPdmVycmlkZSkgcmV0dXJu
IHsKCQl0b2tlbjogdG9rZW5PdmVycmlkZSwKCQlwYXNzd29yZDogcGFzc3dvcmRPdmVycmlkZQoJ
fTsKCWNvbnN0IGRpYWdub3N0aWNzID0gW107Cgljb25zdCBhdXRoTW9kZSA9IGNmZy5nYXRld2F5
Py5hdXRoPy5tb2RlOwoJY29uc3QgdG9rZW5Pbmx5ID0gYXV0aE1vZGUgPT09ICJ0b2tlbiI7Cglj
b25zdCBwYXNzd29yZE9ubHkgPSBhdXRoTW9kZSA9PT0gInBhc3N3b3JkIjsKCWNvbnN0IHJlc29s
dmVUb2tlbiA9IGFzeW5jICh2YWx1ZSwgcGF0aCkgPT4gewoJCWNvbnN0IHRva2VuUmVzb2x1dGlv
biA9IGF3YWl0IHJlc29sdmVDb25maWd1cmVkU2VjcmV0SW5wdXRTdHJpbmcoewoJCQljb25maWc6
IGNmZywKCQkJZW52OiBwcm9jZXNzLmVudiwKCQkJdmFsdWUsCgkJCXBhdGgsCgkJCXVucmVzb2x2
ZWRSZWFzb25TdHlsZTogImRldGFpbGVkIgoJCX0pOwoJCWlmICh0b2tlblJlc29sdXRpb24udW5y
ZXNvbHZlZFJlZlJlYXNvbikgZGlhZ25vc3RpY3MucHVzaCh0b2tlblJlc29sdXRpb24udW5yZXNv
bHZlZFJlZlJlYXNvbik7CgkJcmV0dXJuIHRva2VuUmVzb2x1dGlvbi52YWx1ZTsKCX07Cgljb25z
dCByZXNvbHZlUGFzc3dvcmQgPSBhc3luYyAodmFsdWUsIHBhdGgpID0+IHsKCQljb25zdCBwYXNz
d29yZFJlc29sdXRpb24gPSBhd2FpdCByZXNvbHZlQ29uZmlndXJlZFNlY3JldElucHV0U3RyaW5n
KHsKCQkJY29uZmlnOiBjZmcsCgkJCWVudjogcHJvY2Vzcy5lbnYsCgkJCXZhbHVlLAoJCQlwYXRo
LAoJCQl1bnJlc29sdmVkUmVhc29uU3R5bGU6ICJkZXRhaWxlZCIKCQl9KTsKCQlpZiAocGFzc3dv
cmRSZXNvbHV0aW9uLnVucmVzb2x2ZWRSZWZSZWFzb24pIGRpYWdub3N0aWNzLnB1c2gocGFzc3dv
cmRSZXNvbHV0aW9uLnVucmVzb2x2ZWRSZWZSZWFzb24pOwoJCXJldHVybiBwYXNzd29yZFJlc29s
dXRpb24udmFsdWU7Cgl9OwoJY29uc3Qgd2l0aERpYWdub3N0aWNzID0gKHJlc3VsdCkgPT4gZGlh
Z25vc3RpY3MubGVuZ3RoID4gMCA/IHsKCQkuLi5yZXN1bHQsCgkJZGlhZ25vc3RpY3MKCX0gOiBy
ZXN1bHQ7CglpZiAodGFyZ2V0LmtpbmQgPT09ICJjb25maWdSZW1vdGUiIHx8IHRhcmdldC5raW5k
ID09PSAic3NoVHVubmVsIikgewoJCWNvbnN0IHJlbW90ZVRva2VuVmFsdWUgPSBjZmcuZ2F0ZXdh
eT8ucmVtb3RlPy50b2tlbjsKCQljb25zdCByZW1vdGVQYXNzd29yZFZhbHVlID0gKGNmZy5nYXRl
d2F5Py5yZW1vdGUpPy5wYXNzd29yZDsKCQljb25zdCB0b2tlbiA9IGF3YWl0IHJlc29sdmVUb2tl
bihyZW1vdGVUb2tlblZhbHVlLCAiZ2F0ZXdheS5yZW1vdGUudG9rZW4iKTsKCQlyZXR1cm4gd2l0
aERpYWdub3N0aWNzKHsKCQkJdG9rZW4sCgkJCXBhc3N3b3JkOiB0b2tlbiA/IHZvaWQgMCA6IGF3
YWl0IHJlc29sdmVQYXNzd29yZChyZW1vdGVQYXNzd29yZFZhbHVlLCAiZ2F0ZXdheS5yZW1vdGUu
cGFzc3dvcmQiKQoJCX0pOwoJfQoJaWYgKGF1dGhNb2RlID09PSAibm9uZSIgfHwgYXV0aE1vZGUg
PT09ICJ0cnVzdGVkLXByb3h5IikgcmV0dXJuIHt9OwoJY29uc3QgZW52VG9rZW4gPSByZWFkR2F0
ZXdheVRva2VuRW52KCk7Cgljb25zdCBlbnZQYXNzd29yZCA9IHJlYWRHYXRld2F5UGFzc3dvcmRF
bnYoKTsKCWlmICh0b2tlbk9ubHkpIHsKCQljb25zdCB0b2tlbiA9IGF3YWl0IHJlc29sdmVUb2tl
bihjZmcuZ2F0ZXdheT8uYXV0aD8udG9rZW4sICJnYXRld2F5LmF1dGgudG9rZW4iKTsKCQlpZiAo
dG9rZW4pIHJldHVybiB3aXRoRGlhZ25vc3RpY3MoeyB0b2tlbiB9KTsKCQlpZiAoZW52VG9rZW4p
IHJldHVybiB7IHRva2VuOiBlbnZUb2tlbiB9OwoJCXJldHVybiB3aXRoRGlhZ25vc3RpY3Moe30p
OwoJfQoJaWYgKHBhc3N3b3JkT25seSkgewoJCWNvbnN0IHBhc3N3b3JkID0gYXdhaXQgcmVzb2x2
ZVBhc3N3b3JkKGNmZy5nYXRld2F5Py5hdXRoPy5wYXNzd29yZCwgImdhdGV3YXkuYXV0aC5wYXNz
d29yZCIpOwoJCWlmIChwYXNzd29yZCkgcmV0dXJuIHdpdGhEaWFnbm9zdGljcyh7IHBhc3N3b3Jk
IH0pOwoJCWlmIChlbnZQYXNzd29yZCkgcmV0dXJuIHsgcGFzc3dvcmQ6IGVudlBhc3N3b3JkIH07
CgkJcmV0dXJuIHdpdGhEaWFnbm9zdGljcyh7fSk7Cgl9Cgljb25zdCB0b2tlbiA9IGF3YWl0IHJl
c29sdmVUb2tlbihjZmcuZ2F0ZXdheT8uYXV0aD8udG9rZW4sICJnYXRld2F5LmF1dGgudG9rZW4i
KTsKCWlmICh0b2tlbikgcmV0dXJuIHdpdGhEaWFnbm9zdGljcyh7IHRva2VuIH0pOwoJaWYgKGVu
dlRva2VuKSByZXR1cm4geyB0b2tlbjogZW52VG9rZW4gfTsKCWlmIChlbnZQYXNzd29yZCkgcmV0
dXJuIHdpdGhEaWFnbm9zdGljcyh7IHBhc3N3b3JkOiBlbnZQYXNzd29yZCB9KTsKCXJldHVybiB3
aXRoRGlhZ25vc3RpY3MoewoJCXRva2VuLAoJCXBhc3N3b3JkOiBhd2FpdCByZXNvbHZlUGFzc3dv
cmQoY2ZnLmdhdGV3YXk/LmF1dGg/LnBhc3N3b3JkLCAiZ2F0ZXdheS5hdXRoLnBhc3N3b3JkIikK
CX0pOwp9CmZ1bmN0aW9uIGV4dHJhY3RDb25maWdTdW1tYXJ5KHNuYXBzaG90VW5rbm93bikgewoJ
Y29uc3Qgc25hcCA9IHNuYXBzaG90VW5rbm93bjsKCWNvbnN0IHBhdGggPSB0eXBlb2Ygc25hcD8u
cGF0aCA9PT0gInN0cmluZyIgPyBzbmFwLnBhdGggOiBudWxsOwoJY29uc3QgZXhpc3RzID0gQm9v
bGVhbihzbmFwPy5leGlzdHMpOwoJY29uc3QgdmFsaWQgPSBCb29sZWFuKHNuYXA/LnZhbGlkKTsK
CWNvbnN0IGlzc3Vlc1JhdyA9IEFycmF5LmlzQXJyYXkoc25hcD8uaXNzdWVzKSA/IHNuYXAuaXNz
dWVzIDogW107Cgljb25zdCBsZWdhY3lSYXcgPSBBcnJheS5pc0FycmF5KHNuYXA/LmxlZ2FjeUlz
c3VlcykgPyBzbmFwLmxlZ2FjeUlzc3VlcyA6IFtdOwoJY29uc3QgY2ZnID0gc25hcD8uY29uZmln
ID8/IHt9OwoJY29uc3QgZ2F0ZXdheSA9IGNmZy5nYXRld2F5ID8/IHt9OwoJY29uc3Qgc2VjcmV0
RGVmYXVsdHMgPSAoY2ZnLnNlY3JldHMgPz8ge30pLmRlZmF1bHRzID8/IHZvaWQgMDsKCWNvbnN0
IHdpZGVBcmVhID0gKGNmZy5kaXNjb3ZlcnkgPz8ge30pLndpZGVBcmVhID8/IHt9OwoJY29uc3Qg
cmVtb3RlID0gZ2F0ZXdheS5yZW1vdGUgPz8ge307Cgljb25zdCBhdXRoID0gZ2F0ZXdheS5hdXRo
ID8/IHt9OwoJY29uc3QgY29udHJvbFVpID0gZ2F0ZXdheS5jb250cm9sVWkgPz8ge307Cgljb25z
dCB0YWlsc2NhbGUgPSBnYXRld2F5LnRhaWxzY2FsZSA/PyB7fTsKCWNvbnN0IGF1dGhNb2RlID0g
dHlwZW9mIGF1dGgubW9kZSA9PT0gInN0cmluZyIgPyBhdXRoLm1vZGUgOiBudWxsOwoJY29uc3Qg
YXV0aFRva2VuQ29uZmlndXJlZCA9IGhhc0NvbmZpZ3VyZWRTZWNyZXRJbnB1dChhdXRoLnRva2Vu
LCBzZWNyZXREZWZhdWx0cyk7Cgljb25zdCBhdXRoUGFzc3dvcmRDb25maWd1cmVkID0gaGFzQ29u
ZmlndXJlZFNlY3JldElucHV0KGF1dGgucGFzc3dvcmQsIHNlY3JldERlZmF1bHRzKTsKCWNvbnN0
IHJlbW90ZVVybCA9IHR5cGVvZiByZW1vdGUudXJsID09PSAic3RyaW5nIiA/IG5vcm1hbGl6ZVdz
VXJsKHJlbW90ZS51cmwpIDogbnVsbDsKCWNvbnN0IHJlbW90ZVRva2VuQ29uZmlndXJlZCA9IGhh
c0NvbmZpZ3VyZWRTZWNyZXRJbnB1dChyZW1vdGUudG9rZW4sIHNlY3JldERlZmF1bHRzKTsKCWNv
bnN0IHJlbW90ZVBhc3N3b3JkQ29uZmlndXJlZCA9IGhhc0NvbmZpZ3VyZWRTZWNyZXRJbnB1dChy
ZW1vdGUucGFzc3dvcmQsIHNlY3JldERlZmF1bHRzKTsKCWNvbnN0IHdpZGVBcmVhRW5hYmxlZCA9
IHR5cGVvZiB3aWRlQXJlYS5lbmFibGVkID09PSAiYm9vbGVhbiIgPyB3aWRlQXJlYS5lbmFibGVk
IDogbnVsbDsKCXJldHVybiB7CgkJcGF0aCwKCQlleGlzdHMsCgkJdmFsaWQsCgkJaXNzdWVzOiBp
c3N1ZXNSYXcuZmlsdGVyKChpKSA9PiBCb29sZWFuKGkgJiYgdHlwZW9mIGkucGF0aCA9PT0gInN0
cmluZyIgJiYgdHlwZW9mIGkubWVzc2FnZSA9PT0gInN0cmluZyIpKS5tYXAoKGkpID0+ICh7CgkJ
CXBhdGg6IGkucGF0aCwKCQkJbWVzc2FnZTogaS5tZXNzYWdlCgkJfSkpLAoJCWxlZ2FjeUlzc3Vl
czogbGVnYWN5UmF3LmZpbHRlcigoaSkgPT4gQm9vbGVhbihpICYmIHR5cGVvZiBpLnBhdGggPT09
ICJzdHJpbmciICYmIHR5cGVvZiBpLm1lc3NhZ2UgPT09ICJzdHJpbmciKSkubWFwKChpKSA9PiAo
ewoJCQlwYXRoOiBpLnBhdGgsCgkJCW1lc3NhZ2U6IGkubWVzc2FnZQoJCX0pKSwKCQlnYXRld2F5
OiB7CgkJCW1vZGU6IHR5cGVvZiBnYXRld2F5Lm1vZGUgPT09ICJzdHJpbmciID8gZ2F0ZXdheS5t
b2RlIDogbnVsbCwKCQkJYmluZDogdHlwZW9mIGdhdGV3YXkuYmluZCA9PT0gInN0cmluZyIgPyBn
YXRld2F5LmJpbmQgOiBudWxsLAoJCQlwb3J0OiBwYXJzZUludE9yTnVsbChnYXRld2F5LnBvcnQp
LAoJCQljb250cm9sVWlFbmFibGVkOiB0eXBlb2YgY29udHJvbFVpLmVuYWJsZWQgPT09ICJib29s
ZWFuIiA/IGNvbnRyb2xVaS5lbmFibGVkIDogbnVsbCwKCQkJY29udHJvbFVpQmFzZVBhdGg6IHR5
cGVvZiBjb250cm9sVWkuYmFzZVBhdGggPT09ICJzdHJpbmciID8gY29udHJvbFVpLmJhc2VQYXRo
IDogbnVsbCwKCQkJYXV0aE1vZGUsCgkJCWF1dGhUb2tlbkNvbmZpZ3VyZWQsCgkJCWF1dGhQYXNz
d29yZENvbmZpZ3VyZWQsCgkJCXJlbW90ZVVybCwKCQkJcmVtb3RlVG9rZW5Db25maWd1cmVkLAoJ
CQlyZW1vdGVQYXNzd29yZENvbmZpZ3VyZWQsCgkJCXRhaWxzY2FsZU1vZGU6IHR5cGVvZiB0YWls
c2NhbGUubW9kZSA9PT0gInN0cmluZyIgPyB0YWlsc2NhbGUubW9kZSA6IG51bGwKCQl9LAoJCWRp
c2NvdmVyeTogeyB3aWRlQXJlYUVuYWJsZWQgfQoJfTsKfQpmdW5jdGlvbiBidWlsZE5ldHdvcmtI
aW50cyhjZmcpIHsKCWNvbnN0IHRhaWxuZXRJUHY0ID0gcGlja1ByaW1hcnlUYWlsbmV0SVB2NCgp
OwoJY29uc3QgcG9ydCA9IHJlc29sdmVHYXRld2F5UG9ydChjZmcpOwoJcmV0dXJuIHsKCQlsb2Nh
bExvb3BiYWNrVXJsOiBgd3M6Ly8xMjcuMC4wLjE6JHtwb3J0fWAsCgkJbG9jYWxUYWlsbmV0VXJs
OiB0YWlsbmV0SVB2NCA/IGB3czovLyR7dGFpbG5ldElQdjR9OiR7cG9ydH1gIDogbnVsbCwKCQl0
YWlsbmV0SVB2NDogdGFpbG5ldElQdjQgPz8gbnVsbAoJfTsKfQpmdW5jdGlvbiByZW5kZXJUYXJn
ZXRIZWFkZXIodGFyZ2V0LCByaWNoKSB7Cgljb25zdCBraW5kTGFiZWwgPSB0YXJnZXQua2luZCA9
PT0gImxvY2FsTG9vcGJhY2siID8gIkxvY2FsIGxvb3BiYWNrIiA6IHRhcmdldC5raW5kID09PSAi
c3NoVHVubmVsIiA/ICJSZW1vdGUgb3ZlciBTU0giIDogdGFyZ2V0LmtpbmQgPT09ICJjb25maWdS
ZW1vdGUiID8gdGFyZ2V0LmFjdGl2ZSA/ICJSZW1vdGUgKGNvbmZpZ3VyZWQpIiA6ICJSZW1vdGUg
KGNvbmZpZ3VyZWQsIGluYWN0aXZlKSIgOiAiVVJMIChleHBsaWNpdCkiOwoJcmV0dXJuIGAke2Nv
bG9yaXplKHJpY2gsIHRoZW1lLmhlYWRpbmcsIGtpbmRMYWJlbCl9ICR7Y29sb3JpemUocmljaCwg
dGhlbWUubXV0ZWQsIHRhcmdldC51cmwpfWA7Cn0KZnVuY3Rpb24gaXNTY29wZUxpbWl0ZWRQcm9i
ZUZhaWx1cmUocHJvYmUpIHsKCWlmIChwcm9iZS5vayB8fCBwcm9iZS5jb25uZWN0TGF0ZW5jeU1z
ID09IG51bGwpIHJldHVybiBmYWxzZTsKCXJldHVybiBNSVNTSU5HX1NDT1BFX1BBVFRFUk4udGVz
dChwcm9iZS5lcnJvciA/PyAiIik7Cn0KZnVuY3Rpb24gaXNQcm9iZVJlYWNoYWJsZShwcm9iZSkg
ewoJcmV0dXJuIHByb2JlLm9rIHx8IGlzU2NvcGVMaW1pdGVkUHJvYmVGYWlsdXJlKHByb2JlKTsK
fQpmdW5jdGlvbiByZW5kZXJQcm9iZVN1bW1hcnlMaW5lKHByb2JlLCByaWNoKSB7CglpZiAocHJv
YmUub2spIHsKCQljb25zdCBsYXRlbmN5ID0gdHlwZW9mIHByb2JlLmNvbm5lY3RMYXRlbmN5TXMg
PT09ICJudW1iZXIiID8gYCR7cHJvYmUuY29ubmVjdExhdGVuY3lNc31tc2AgOiAidW5rbm93biI7
CgkJcmV0dXJuIGAke2NvbG9yaXplKHJpY2gsIHRoZW1lLnN1Y2Nlc3MsICJDb25uZWN0OiBvayIp
fSAoJHtsYXRlbmN5fSkgwrcgJHtjb2xvcml6ZShyaWNoLCB0aGVtZS5zdWNjZXNzLCAiUlBDOiBv
ayIpfWA7Cgl9Cgljb25zdCBkZXRhaWwgPSBwcm9iZS5lcnJvciA/IGAgLSAke3Byb2JlLmVycm9y
fWAgOiAiIjsKCWlmIChwcm9iZS5jb25uZWN0TGF0ZW5jeU1zICE9IG51bGwpIHsKCQljb25zdCBs
YXRlbmN5ID0gdHlwZW9mIHByb2JlLmNvbm5lY3RMYXRlbmN5TXMgPT09ICJudW1iZXIiID8gYCR7
cHJvYmUuY29ubmVjdExhdGVuY3lNc31tc2AgOiAidW5rbm93biI7CgkJY29uc3QgcnBjU3RhdHVz
ID0gaXNTY29wZUxpbWl0ZWRQcm9iZUZhaWx1cmUocHJvYmUpID8gY29sb3JpemUocmljaCwgdGhl
bWUud2FybiwgIlJQQzogbGltaXRlZCIpIDogY29sb3JpemUocmljaCwgdGhlbWUuZXJyb3IsICJS
UEM6IGZhaWxlZCIpOwoJCXJldHVybiBgJHtjb2xvcml6ZShyaWNoLCB0aGVtZS5zdWNjZXNzLCAi
Q29ubmVjdDogb2siKX0gKCR7bGF0ZW5jeX0pIMK3ICR7cnBjU3RhdHVzfSR7ZGV0YWlsfWA7Cgl9
CglyZXR1cm4gYCR7Y29sb3JpemUocmljaCwgdGhlbWUuZXJyb3IsICJDb25uZWN0OiBmYWlsZWQi
KX0ke2RldGFpbH1gOwp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2NvbW1hbmRzL2dhdGV3
YXktc3RhdHVzLnRzCmFzeW5jIGZ1bmN0aW9uIGdhdGV3YXlTdGF0dXNDb21tYW5kKG9wdHMsIHJ1
bnRpbWUpIHsKCWNvbnN0IHN0YXJ0ZWRBdCA9IERhdGUubm93KCk7Cgljb25zdCBjZmcgPSBhd2Fp
dCByZWFkQmVzdEVmZm9ydENvbmZpZygpOwoJY29uc3QgcmljaCA9IGlzUmljaCgpICYmIG9wdHMu
anNvbiAhPT0gdHJ1ZTsKCWNvbnN0IG92ZXJhbGxUaW1lb3V0TXMgPSBwYXJzZVRpbWVvdXRNcyhv
cHRzLnRpbWVvdXQsIDNlMyk7Cgljb25zdCB3aWRlQXJlYURvbWFpbiA9IHJlc29sdmVXaWRlQXJl
YURpc2NvdmVyeURvbWFpbih7IGNvbmZpZ0RvbWFpbjogY2ZnLmRpc2NvdmVyeT8ud2lkZUFyZWE/
LmRvbWFpbiB9KTsKCWNvbnN0IGJhc2VUYXJnZXRzID0gcmVzb2x2ZVRhcmdldHMoY2ZnLCBvcHRz
LnVybCk7Cgljb25zdCBuZXR3b3JrID0gYnVpbGROZXR3b3JrSGludHMoY2ZnKTsKCWNvbnN0IGRp
c2NvdmVyeVRpbWVvdXRNcyA9IE1hdGgubWluKDEyMDAsIG92ZXJhbGxUaW1lb3V0TXMpOwoJY29u
c3QgZGlzY292ZXJ5UHJvbWlzZSA9IGRpc2NvdmVyR2F0ZXdheUJlYWNvbnMoewoJCXRpbWVvdXRN
czogZGlzY292ZXJ5VGltZW91dE1zLAoJCXdpZGVBcmVhRG9tYWluCgl9KTsKCWxldCBzc2hUYXJn
ZXQgPSBzYW5pdGl6ZVNzaFRhcmdldChvcHRzLnNzaCkgPz8gc2FuaXRpemVTc2hUYXJnZXQoY2Zn
LmdhdGV3YXk/LnJlbW90ZT8uc3NoVGFyZ2V0KTsKCWxldCBzc2hJZGVudGl0eSA9IHNhbml0aXpl
U3NoVGFyZ2V0KG9wdHMuc3NoSWRlbnRpdHkpID8/IHNhbml0aXplU3NoVGFyZ2V0KGNmZy5nYXRl
d2F5Py5yZW1vdGU/LnNzaElkZW50aXR5KTsKCWNvbnN0IHJlbW90ZVBvcnQgPSByZXNvbHZlR2F0
ZXdheVBvcnQoY2ZnKTsKCWxldCBzc2hUdW5uZWxFcnJvciA9IG51bGw7CglsZXQgc3NoVHVubmVs
U3RhcnRlZCA9IGZhbHNlOwoJaWYgKCFzc2hUYXJnZXQpIHNzaFRhcmdldCA9IGluZmVyU3NoVGFy
Z2V0RnJvbVJlbW90ZVVybChjZmcuZ2F0ZXdheT8ucmVtb3RlPy51cmwpOwoJaWYgKHNzaFRhcmdl
dCkgewoJCWNvbnN0IHJlc29sdmVkID0gYXdhaXQgcmVzb2x2ZVNzaFRhcmdldChzc2hUYXJnZXQs
IHNzaElkZW50aXR5LCBvdmVyYWxsVGltZW91dE1zKTsKCQlpZiAocmVzb2x2ZWQpIHsKCQkJc3No
VGFyZ2V0ID0gcmVzb2x2ZWQudGFyZ2V0OwoJCQlpZiAoIXNzaElkZW50aXR5ICYmIHJlc29sdmVk
LmlkZW50aXR5KSBzc2hJZGVudGl0eSA9IHJlc29sdmVkLmlkZW50aXR5OwoJCX0KCX0KCWNvbnN0
IHsgZGlzY292ZXJ5LCBwcm9iZWQgfSA9IGF3YWl0IHdpdGhQcm9ncmVzcyh7CgkJbGFiZWw6ICJJ
bnNwZWN0aW5nIGdhdGV3YXlz4oCmIiwKCQlpbmRldGVybWluYXRlOiB0cnVlLAoJCWVuYWJsZWQ6
IG9wdHMuanNvbiAhPT0gdHJ1ZQoJfSwgYXN5bmMgKCkgPT4gewoJCWNvbnN0IHRyeVN0YXJ0VHVu
bmVsID0gYXN5bmMgKCkgPT4gewoJCQlpZiAoIXNzaFRhcmdldCkgcmV0dXJuIG51bGw7CgkJCXRy
eSB7CgkJCQljb25zdCB0dW5uZWwgPSBhd2FpdCBzdGFydFNzaFBvcnRGb3J3YXJkKHsKCQkJCQl0
YXJnZXQ6IHNzaFRhcmdldCwKCQkJCQlpZGVudGl0eTogc3NoSWRlbnRpdHkgPz8gdm9pZCAwLAoJ
CQkJCWxvY2FsUG9ydFByZWZlcnJlZDogcmVtb3RlUG9ydCwKCQkJCQlyZW1vdGVQb3J0LAoJCQkJ
CXRpbWVvdXRNczogTWF0aC5taW4oMTUwMCwgb3ZlcmFsbFRpbWVvdXRNcykKCQkJCX0pOwoJCQkJ
c3NoVHVubmVsU3RhcnRlZCA9IHRydWU7CgkJCQlyZXR1cm4gdHVubmVsOwoJCQl9IGNhdGNoIChl
cnIpIHsKCQkJCXNzaFR1bm5lbEVycm9yID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVz
c2FnZSA6IFN0cmluZyhlcnIpOwoJCQkJcmV0dXJuIG51bGw7CgkJCX0KCQl9OwoJCWNvbnN0IGRp
c2NvdmVyeVRhc2sgPSBkaXNjb3ZlcnlQcm9taXNlLmNhdGNoKCgpID0+IFtdKTsKCQljb25zdCB0
dW5uZWxUYXNrID0gc3NoVGFyZ2V0ID8gdHJ5U3RhcnRUdW5uZWwoKSA6IFByb21pc2UucmVzb2x2
ZShudWxsKTsKCQljb25zdCBbZGlzY292ZXJ5LCB0dW5uZWxGaXJzdF0gPSBhd2FpdCBQcm9taXNl
LmFsbChbZGlzY292ZXJ5VGFzaywgdHVubmVsVGFza10pOwoJCWlmICghc3NoVGFyZ2V0ICYmIG9w
dHMuc3NoQXV0bykgewoJCQljb25zdCB1c2VyID0gcHJvY2Vzcy5lbnYuVVNFUj8udHJpbSgpIHx8
ICIiOwoJCQljb25zdCBjYW5kaWRhdGVzID0gZGlzY292ZXJ5Lm1hcCgoYikgPT4gewoJCQkJY29u
c3QgaG9zdCA9IGIudGFpbG5ldERucyB8fCBiLmxhbkhvc3QgfHwgYi5ob3N0OwoJCQkJaWYgKCFo
b3N0Py50cmltKCkpIHJldHVybiBudWxsOwoJCQkJY29uc3Qgc3NoUG9ydCA9IHR5cGVvZiBiLnNz
aFBvcnQgPT09ICJudW1iZXIiICYmIGIuc3NoUG9ydCA+IDAgPyBiLnNzaFBvcnQgOiAyMjsKCQkJ
CWNvbnN0IGJhc2UgPSB1c2VyID8gYCR7dXNlcn1AJHtob3N0LnRyaW0oKX1gIDogaG9zdC50cmlt
KCk7CgkJCQlyZXR1cm4gc3NoUG9ydCAhPT0gMjIgPyBgJHtiYXNlfToke3NzaFBvcnR9YCA6IGJh
c2U7CgkJCX0pLmZpbHRlcigoY2FuZGlkYXRlKSA9PiBCb29sZWFuKGNhbmRpZGF0ZSAmJiBwYXJz
ZVNzaFRhcmdldChjYW5kaWRhdGUpKSk7CgkJCWlmIChjYW5kaWRhdGVzLmxlbmd0aCA+IDApIHNz
aFRhcmdldCA9IGNhbmRpZGF0ZXNbMF0gPz8gbnVsbDsKCQl9CgkJY29uc3QgdHVubmVsID0gdHVu
bmVsRmlyc3QgfHwgKHNzaFRhcmdldCAmJiAhc3NoVHVubmVsU3RhcnRlZCAmJiAhc3NoVHVubmVs
RXJyb3IgPyBhd2FpdCB0cnlTdGFydFR1bm5lbCgpIDogbnVsbCk7CgkJY29uc3QgdHVubmVsVGFy
Z2V0ID0gdHVubmVsID8gewoJCQlpZDogInNzaFR1bm5lbCIsCgkJCWtpbmQ6ICJzc2hUdW5uZWwi
LAoJCQl1cmw6IGB3czovLzEyNy4wLjAuMToke3R1bm5lbC5sb2NhbFBvcnR9YCwKCQkJYWN0aXZl
OiB0cnVlLAoJCQl0dW5uZWw6IHsKCQkJCWtpbmQ6ICJzc2giLAoJCQkJdGFyZ2V0OiBzc2hUYXJn
ZXQgPz8gIiIsCgkJCQlsb2NhbFBvcnQ6IHR1bm5lbC5sb2NhbFBvcnQsCgkJCQlyZW1vdGVQb3J0
LAoJCQkJcGlkOiB0dW5uZWwucGlkCgkJCX0KCQl9IDogbnVsbDsKCQljb25zdCB0YXJnZXRzID0g
dHVubmVsVGFyZ2V0ID8gW3R1bm5lbFRhcmdldCwgLi4uYmFzZVRhcmdldHMuZmlsdGVyKCh0KSA9
PiB0LnVybCAhPT0gdHVubmVsVGFyZ2V0LnVybCldIDogYmFzZVRhcmdldHM7CgkJdHJ5IHsKCQkJ
cmV0dXJuIHsKCQkJCWRpc2NvdmVyeSwKCQkJCXByb2JlZDogYXdhaXQgUHJvbWlzZS5hbGwodGFy
Z2V0cy5tYXAoYXN5bmMgKHRhcmdldCkgPT4gewoJCQkJCWNvbnN0IGF1dGhSZXNvbHV0aW9uID0g
YXdhaXQgcmVzb2x2ZUF1dGhGb3JUYXJnZXQoY2ZnLCB0YXJnZXQsIHsKCQkJCQkJdG9rZW46IHR5
cGVvZiBvcHRzLnRva2VuID09PSAic3RyaW5nIiA/IG9wdHMudG9rZW4gOiB2b2lkIDAsCgkJCQkJ
CXBhc3N3b3JkOiB0eXBlb2Ygb3B0cy5wYXNzd29yZCA9PT0gInN0cmluZyIgPyBvcHRzLnBhc3N3
b3JkIDogdm9pZCAwCgkJCQkJfSk7CgkJCQkJY29uc3QgYXV0aCA9IHsKCQkJCQkJdG9rZW46IGF1
dGhSZXNvbHV0aW9uLnRva2VuLAoJCQkJCQlwYXNzd29yZDogYXV0aFJlc29sdXRpb24ucGFzc3dv
cmQKCQkJCQl9OwoJCQkJCWNvbnN0IHRpbWVvdXRNcyA9IHJlc29sdmVQcm9iZUJ1ZGdldE1zKG92
ZXJhbGxUaW1lb3V0TXMsIHRhcmdldC5raW5kKTsKCQkJCQljb25zdCBwcm9iZSA9IGF3YWl0IHBy
b2JlR2F0ZXdheSh7CgkJCQkJCXVybDogdGFyZ2V0LnVybCwKCQkJCQkJYXV0aCwKCQkJCQkJdGlt
ZW91dE1zCgkJCQkJfSk7CgkJCQkJcmV0dXJuIHsKCQkJCQkJdGFyZ2V0LAoJCQkJCQlwcm9iZSwK
CQkJCQkJY29uZmlnU3VtbWFyeTogcHJvYmUuY29uZmlnU25hcHNob3QgPyBleHRyYWN0Q29uZmln
U3VtbWFyeShwcm9iZS5jb25maWdTbmFwc2hvdCkgOiBudWxsLAoJCQkJCQlzZWxmOiBwaWNrR2F0
ZXdheVNlbGZQcmVzZW5jZShwcm9iZS5wcmVzZW5jZSksCgkJCQkJCWF1dGhEaWFnbm9zdGljczog
YXV0aFJlc29sdXRpb24uZGlhZ25vc3RpY3MgPz8gW10KCQkJCQl9OwoJCQkJfSkpCgkJCX07CgkJ
fSBmaW5hbGx5IHsKCQkJaWYgKHR1bm5lbCkgdHJ5IHsKCQkJCWF3YWl0IHR1bm5lbC5zdG9wKCk7
CgkJCX0gY2F0Y2gge30KCQl9Cgl9KTsKCWNvbnN0IHJlYWNoYWJsZSA9IHByb2JlZC5maWx0ZXIo
KHApID0+IGlzUHJvYmVSZWFjaGFibGUocC5wcm9iZSkpOwoJY29uc3Qgb2sgPSByZWFjaGFibGUu
bGVuZ3RoID4gMDsKCWNvbnN0IGRlZ3JhZGVkU2NvcGVMaW1pdGVkID0gcHJvYmVkLmZpbHRlcigo
cCkgPT4gaXNTY29wZUxpbWl0ZWRQcm9iZUZhaWx1cmUocC5wcm9iZSkpOwoJY29uc3QgZGVncmFk
ZWQgPSBkZWdyYWRlZFNjb3BlTGltaXRlZC5sZW5ndGggPiAwOwoJY29uc3QgbXVsdGlwbGVHYXRl
d2F5cyA9IHJlYWNoYWJsZS5sZW5ndGggPiAxOwoJY29uc3QgcHJpbWFyeSA9IHJlYWNoYWJsZS5m
aW5kKChwKSA9PiBwLnRhcmdldC5raW5kID09PSAiZXhwbGljaXQiKSA/PyByZWFjaGFibGUuZmlu
ZCgocCkgPT4gcC50YXJnZXQua2luZCA9PT0gInNzaFR1bm5lbCIpID8/IHJlYWNoYWJsZS5maW5k
KChwKSA9PiBwLnRhcmdldC5raW5kID09PSAiY29uZmlnUmVtb3RlIikgPz8gcmVhY2hhYmxlLmZp
bmQoKHApID0+IHAudGFyZ2V0LmtpbmQgPT09ICJsb2NhbExvb3BiYWNrIikgPz8gbnVsbDsKCWNv
bnN0IHdhcm5pbmdzID0gW107CglpZiAoc3NoVGFyZ2V0ICYmICFzc2hUdW5uZWxTdGFydGVkKSB3
YXJuaW5ncy5wdXNoKHsKCQljb2RlOiAic3NoX3R1bm5lbF9mYWlsZWQiLAoJCW1lc3NhZ2U6IHNz
aFR1bm5lbEVycm9yID8gYFNTSCB0dW5uZWwgZmFpbGVkOiAke1N0cmluZyhzc2hUdW5uZWxFcnJv
cil9YCA6ICJTU0ggdHVubmVsIGZhaWxlZCB0byBzdGFydDsgZmFsbGluZyBiYWNrIHRvIGRpcmVj
dCBwcm9iZXMuIgoJfSk7CglpZiAobXVsdGlwbGVHYXRld2F5cykgd2FybmluZ3MucHVzaCh7CgkJ
Y29kZTogIm11bHRpcGxlX2dhdGV3YXlzIiwKCQltZXNzYWdlOiAiVW5jb252ZW50aW9uYWwgc2V0
dXA6IG11bHRpcGxlIHJlYWNoYWJsZSBnYXRld2F5cyBkZXRlY3RlZC4gVXN1YWxseSBvbmUgZ2F0
ZXdheSBwZXIgbmV0d29yayBpcyByZWNvbW1lbmRlZCB1bmxlc3MgeW91IGludGVudGlvbmFsbHkg
cnVuIGlzb2xhdGVkIHByb2ZpbGVzLCBsaWtlIGEgcmVzY3VlIGJvdCAoc2VlIGRvY3M6IC9nYXRl
d2F5I211bHRpcGxlLWdhdGV3YXlzLXNhbWUtaG9zdCkuIiwKCQl0YXJnZXRJZHM6IHJlYWNoYWJs
ZS5tYXAoKHApID0+IHAudGFyZ2V0LmlkKQoJfSk7Cglmb3IgKGNvbnN0IHJlc3VsdCBvZiBwcm9i
ZWQpIHsKCQlpZiAocmVzdWx0LmF1dGhEaWFnbm9zdGljcy5sZW5ndGggPT09IDApIGNvbnRpbnVl
OwoJCWZvciAoY29uc3QgZGlhZ25vc3RpYyBvZiByZXN1bHQuYXV0aERpYWdub3N0aWNzKSB3YXJu
aW5ncy5wdXNoKHsKCQkJY29kZTogImF1dGhfc2VjcmV0cmVmX3VucmVzb2x2ZWQiLAoJCQltZXNz
YWdlOiBkaWFnbm9zdGljLAoJCQl0YXJnZXRJZHM6IFtyZXN1bHQudGFyZ2V0LmlkXQoJCX0pOwoJ
fQoJZm9yIChjb25zdCByZXN1bHQgb2YgZGVncmFkZWRTY29wZUxpbWl0ZWQpIHdhcm5pbmdzLnB1
c2goewoJCWNvZGU6ICJwcm9iZV9zY29wZV9saW1pdGVkIiwKCQltZXNzYWdlOiAiUHJvYmUgZGlh
Z25vc3RpY3MgYXJlIGxpbWl0ZWQgYnkgZ2F0ZXdheSBzY29wZXMgKG1pc3Npbmcgb3BlcmF0b3Iu
cmVhZCkuIENvbm5lY3Rpb24gc3VjY2VlZGVkLCBidXQgc3RhdHVzIGRldGFpbHMgbWF5IGJlIGlu
Y29tcGxldGUuIEhpbnQ6IHBhaXIgZGV2aWNlIGlkZW50aXR5IG9yIHVzZSBjcmVkZW50aWFscyB3
aXRoIG9wZXJhdG9yLnJlYWQuIiwKCQl0YXJnZXRJZHM6IFtyZXN1bHQudGFyZ2V0LmlkXQoJfSk7
CglpZiAob3B0cy5qc29uKSB7CgkJcnVudGltZS5sb2coSlNPTi5zdHJpbmdpZnkoewoJCQlvaywK
CQkJZGVncmFkZWQsCgkJCXRzOiBEYXRlLm5vdygpLAoJCQlkdXJhdGlvbk1zOiBEYXRlLm5vdygp
IC0gc3RhcnRlZEF0LAoJCQl0aW1lb3V0TXM6IG92ZXJhbGxUaW1lb3V0TXMsCgkJCXByaW1hcnlU
YXJnZXRJZDogcHJpbWFyeT8udGFyZ2V0LmlkID8/IG51bGwsCgkJCXdhcm5pbmdzLAoJCQluZXR3
b3JrLAoJCQlkaXNjb3Zlcnk6IHsKCQkJCXRpbWVvdXRNczogZGlzY292ZXJ5VGltZW91dE1zLAoJ
CQkJY291bnQ6IGRpc2NvdmVyeS5sZW5ndGgsCgkJCQliZWFjb25zOiBkaXNjb3ZlcnkubWFwKChi
KSA9PiAoewoJCQkJCWluc3RhbmNlTmFtZTogYi5pbnN0YW5jZU5hbWUsCgkJCQkJZGlzcGxheU5h
bWU6IGIuZGlzcGxheU5hbWUgPz8gbnVsbCwKCQkJCQlkb21haW46IGIuZG9tYWluID8/IG51bGws
CgkJCQkJaG9zdDogYi5ob3N0ID8/IG51bGwsCgkJCQkJbGFuSG9zdDogYi5sYW5Ib3N0ID8/IG51
bGwsCgkJCQkJdGFpbG5ldERuczogYi50YWlsbmV0RG5zID8/IG51bGwsCgkJCQkJZ2F0ZXdheVBv
cnQ6IGIuZ2F0ZXdheVBvcnQgPz8gbnVsbCwKCQkJCQlzc2hQb3J0OiBiLnNzaFBvcnQgPz8gbnVs
bCwKCQkJCQl3c1VybDogKCgpID0+IHsKCQkJCQkJY29uc3QgaG9zdCA9IGIudGFpbG5ldERucyB8
fCBiLmxhbkhvc3QgfHwgYi5ob3N0OwoJCQkJCQljb25zdCBwb3J0ID0gYi5nYXRld2F5UG9ydCA/
PyAxODc4OTsKCQkJCQkJcmV0dXJuIGhvc3QgPyBgd3M6Ly8ke2hvc3R9OiR7cG9ydH1gIDogbnVs
bDsKCQkJCQl9KSgpCgkJCQl9KSkKCQkJfSwKCQkJdGFyZ2V0czogcHJvYmVkLm1hcCgocCkgPT4g
KHsKCQkJCWlkOiBwLnRhcmdldC5pZCwKCQkJCWtpbmQ6IHAudGFyZ2V0LmtpbmQsCgkJCQl1cmw6
IHAudGFyZ2V0LnVybCwKCQkJCWFjdGl2ZTogcC50YXJnZXQuYWN0aXZlLAoJCQkJdHVubmVsOiBw
LnRhcmdldC50dW5uZWwgPz8gbnVsbCwKCQkJCWNvbm5lY3Q6IHsKCQkJCQlvazogaXNQcm9iZVJl
YWNoYWJsZShwLnByb2JlKSwKCQkJCQlycGNPazogcC5wcm9iZS5vaywKCQkJCQlzY29wZUxpbWl0
ZWQ6IGlzU2NvcGVMaW1pdGVkUHJvYmVGYWlsdXJlKHAucHJvYmUpLAoJCQkJCWxhdGVuY3lNczog
cC5wcm9iZS5jb25uZWN0TGF0ZW5jeU1zLAoJCQkJCWVycm9yOiBwLnByb2JlLmVycm9yLAoJCQkJ
CWNsb3NlOiBwLnByb2JlLmNsb3NlCgkJCQl9LAoJCQkJc2VsZjogcC5zZWxmLAoJCQkJY29uZmln
OiBwLmNvbmZpZ1N1bW1hcnksCgkJCQloZWFsdGg6IHAucHJvYmUuaGVhbHRoLAoJCQkJc3VtbWFy
eTogcC5wcm9iZS5zdGF0dXMsCgkJCQlwcmVzZW5jZTogcC5wcm9iZS5wcmVzZW5jZQoJCQl9KSkK
CQl9LCBudWxsLCAyKSk7CgkJaWYgKCFvaykgcnVudGltZS5leGl0KDEpOwoJCXJldHVybjsKCX0K
CXJ1bnRpbWUubG9nKGNvbG9yaXplKHJpY2gsIHRoZW1lLmhlYWRpbmcsICJHYXRld2F5IFN0YXR1
cyIpKTsKCXJ1bnRpbWUubG9nKG9rID8gYCR7Y29sb3JpemUocmljaCwgdGhlbWUuc3VjY2Vzcywg
IlJlYWNoYWJsZSIpfTogeWVzYCA6IGAke2NvbG9yaXplKHJpY2gsIHRoZW1lLmVycm9yLCAiUmVh
Y2hhYmxlIil9OiBub2ApOwoJcnVudGltZS5sb2coY29sb3JpemUocmljaCwgdGhlbWUubXV0ZWQs
IGBQcm9iZSBidWRnZXQ6ICR7b3ZlcmFsbFRpbWVvdXRNc31tc2ApKTsKCWlmICh3YXJuaW5ncy5s
ZW5ndGggPiAwKSB7CgkJcnVudGltZS5sb2coIiIpOwoJCXJ1bnRpbWUubG9nKGNvbG9yaXplKHJp
Y2gsIHRoZW1lLndhcm4sICJXYXJuaW5nOiIpKTsKCQlmb3IgKGNvbnN0IHcgb2Ygd2FybmluZ3Mp
IHJ1bnRpbWUubG9nKGAtICR7dy5tZXNzYWdlfWApOwoJfQoJcnVudGltZS5sb2coIiIpOwoJcnVu
dGltZS5sb2coY29sb3JpemUocmljaCwgdGhlbWUuaGVhZGluZywgIkRpc2NvdmVyeSAodGhpcyBt
YWNoaW5lKSIpKTsKCWNvbnN0IGRpc2NvdmVyeURvbWFpbnMgPSB3aWRlQXJlYURvbWFpbiA/IGBs
b2NhbC4gKyAke3dpZGVBcmVhRG9tYWlufWAgOiAibG9jYWwuIjsKCXJ1bnRpbWUubG9nKGRpc2Nv
dmVyeS5sZW5ndGggPiAwID8gYEZvdW5kICR7ZGlzY292ZXJ5Lmxlbmd0aH0gZ2F0ZXdheShzKSB2
aWEgQm9uam91ciAoJHtkaXNjb3ZlcnlEb21haW5zfSlgIDogYEZvdW5kIDAgZ2F0ZXdheXMgdmlh
IEJvbmpvdXIgKCR7ZGlzY292ZXJ5RG9tYWluc30pYCk7CglpZiAoZGlzY292ZXJ5Lmxlbmd0aCA9
PT0gMCkgcnVudGltZS5sb2coY29sb3JpemUocmljaCwgdGhlbWUubXV0ZWQsICJUaXA6IGlmIHRo
ZSBnYXRld2F5IGlzIHJlbW90ZSwgbUROUyB3b27igJl0IGNyb3NzIG5ldHdvcmtzOyB1c2UgV2lk
ZS1BcmVhIEJvbmpvdXIgKHNwbGl0IEROUykgb3IgU1NIIHR1bm5lbHMuIikpOwoJcnVudGltZS5s
b2coIiIpOwoJcnVudGltZS5sb2coY29sb3JpemUocmljaCwgdGhlbWUuaGVhZGluZywgIlRhcmdl
dHMiKSk7Cglmb3IgKGNvbnN0IHAgb2YgcHJvYmVkKSB7CgkJcnVudGltZS5sb2cocmVuZGVyVGFy
Z2V0SGVhZGVyKHAudGFyZ2V0LCByaWNoKSk7CgkJcnVudGltZS5sb2coYCAgJHtyZW5kZXJQcm9i
ZVN1bW1hcnlMaW5lKHAucHJvYmUsIHJpY2gpfWApOwoJCWlmIChwLnRhcmdldC50dW5uZWw/Lmtp
bmQgPT09ICJzc2giKSBydW50aW1lLmxvZyhgICAke2NvbG9yaXplKHJpY2gsIHRoZW1lLm11dGVk
LCAic3NoIil9OiAke2NvbG9yaXplKHJpY2gsIHRoZW1lLmNvbW1hbmQsIHAudGFyZ2V0LnR1bm5l
bC50YXJnZXQpfWApOwoJCWlmIChwLnByb2JlLm9rICYmIHAuc2VsZikgewoJCQljb25zdCBob3N0
ID0gcC5zZWxmLmhvc3QgPz8gInVua25vd24iOwoJCQljb25zdCBpcCA9IHAuc2VsZi5pcCA/IGAg
KCR7cC5zZWxmLmlwfSlgIDogIiI7CgkJCWNvbnN0IHBsYXRmb3JtID0gcC5zZWxmLnBsYXRmb3Jt
ID8gYCDCtyAke3Auc2VsZi5wbGF0Zm9ybX1gIDogIiI7CgkJCWNvbnN0IHZlcnNpb24gPSBwLnNl
bGYudmVyc2lvbiA/IGAgwrcgYXBwICR7cC5zZWxmLnZlcnNpb259YCA6ICIiOwoJCQlydW50aW1l
LmxvZyhgICAke2NvbG9yaXplKHJpY2gsIHRoZW1lLmluZm8sICJHYXRld2F5Iil9OiAke2hvc3R9
JHtpcH0ke3BsYXRmb3JtfSR7dmVyc2lvbn1gKTsKCQl9CgkJaWYgKHAuY29uZmlnU3VtbWFyeSkg
ewoJCQljb25zdCBjID0gcC5jb25maWdTdW1tYXJ5OwoJCQljb25zdCB3aWRlQXJlYSA9IGMuZGlz
Y292ZXJ5LndpZGVBcmVhRW5hYmxlZCA9PT0gdHJ1ZSA/ICJlbmFibGVkIiA6IGMuZGlzY292ZXJ5
LndpZGVBcmVhRW5hYmxlZCA9PT0gZmFsc2UgPyAiZGlzYWJsZWQiIDogInVua25vd24iOwoJCQly
dW50aW1lLmxvZyhgICAke2NvbG9yaXplKHJpY2gsIHRoZW1lLmluZm8sICJXaWRlLWFyZWEgZGlz
Y292ZXJ5Iil9OiAke3dpZGVBcmVhfWApOwoJCX0KCQlydW50aW1lLmxvZygiIik7Cgl9CglpZiAo
IW9rKSBydW50aW1lLmV4aXQoMSk7Cn0KZnVuY3Rpb24gaW5mZXJTc2hUYXJnZXRGcm9tUmVtb3Rl
VXJsKHJhd1VybCkgewoJaWYgKHR5cGVvZiByYXdVcmwgIT09ICJzdHJpbmciKSByZXR1cm4gbnVs
bDsKCWNvbnN0IHRyaW1tZWQgPSByYXdVcmwudHJpbSgpOwoJaWYgKCF0cmltbWVkKSByZXR1cm4g
bnVsbDsKCWxldCBob3N0ID0gbnVsbDsKCXRyeSB7CgkJaG9zdCA9IG5ldyBVUkwodHJpbW1lZCku
aG9zdG5hbWUgfHwgbnVsbDsKCX0gY2F0Y2ggewoJCXJldHVybiBudWxsOwoJfQoJaWYgKCFob3N0
KSByZXR1cm4gbnVsbDsKCWNvbnN0IHVzZXIgPSBwcm9jZXNzLmVudi5VU0VSPy50cmltKCkgfHwg
IiI7CglyZXR1cm4gdXNlciA/IGAke3VzZXJ9QCR7aG9zdH1gIDogaG9zdDsKfQpmdW5jdGlvbiBi
dWlsZFNzaFRhcmdldChpbnB1dCkgewoJY29uc3QgaG9zdCA9IGlucHV0Lmhvc3Q/LnRyaW0oKSA/
PyAiIjsKCWlmICghaG9zdCkgcmV0dXJuIG51bGw7Cgljb25zdCB1c2VyID0gaW5wdXQudXNlcj8u
dHJpbSgpID8/ICIiOwoJY29uc3QgYmFzZSA9IHVzZXIgPyBgJHt1c2VyfUAke2hvc3R9YCA6IGhv
c3Q7Cgljb25zdCBwb3J0ID0gaW5wdXQucG9ydCA/PyAyMjsKCWlmIChwb3J0ICYmIHBvcnQgIT09
IDIyKSByZXR1cm4gYCR7YmFzZX06JHtwb3J0fWA7CglyZXR1cm4gYmFzZTsKfQphc3luYyBmdW5j
dGlvbiByZXNvbHZlU3NoVGFyZ2V0KHJhd1RhcmdldCwgaWRlbnRpdHksIG92ZXJhbGxUaW1lb3V0
TXMpIHsKCWNvbnN0IHBhcnNlZCA9IHBhcnNlU3NoVGFyZ2V0KHJhd1RhcmdldCk7CglpZiAoIXBh
cnNlZCkgcmV0dXJuIG51bGw7Cgljb25zdCBjb25maWcgPSBhd2FpdCByZXNvbHZlU3NoQ29uZmln
KHBhcnNlZCwgewoJCWlkZW50aXR5OiBpZGVudGl0eSA/PyB2b2lkIDAsCgkJdGltZW91dE1zOiBN
YXRoLm1pbig4MDAsIG92ZXJhbGxUaW1lb3V0TXMpCgl9KTsKCWlmICghY29uZmlnKSByZXR1cm4g
ewoJCXRhcmdldDogcmF3VGFyZ2V0LAoJCWlkZW50aXR5OiBpZGVudGl0eSA/PyB2b2lkIDAKCX07
Cgljb25zdCB0YXJnZXQgPSBidWlsZFNzaFRhcmdldCh7CgkJdXNlcjogY29uZmlnLnVzZXIgPz8g
cGFyc2VkLnVzZXIsCgkJaG9zdDogY29uZmlnLmhvc3QgPz8gcGFyc2VkLmhvc3QsCgkJcG9ydDog
Y29uZmlnLnBvcnQgPz8gcGFyc2VkLnBvcnQKCX0pOwoJaWYgKCF0YXJnZXQpIHJldHVybiB7CgkJ
dGFyZ2V0OiByYXdUYXJnZXQsCgkJaWRlbnRpdHk6IGlkZW50aXR5ID8/IHZvaWQgMAoJfTsKCXJl
dHVybiB7CgkJdGFyZ2V0LAoJCWlkZW50aXR5OiBpZGVudGl0eSA/PyBjb25maWcuaWRlbnRpdHlG
aWxlcy5maW5kKChlbnRyeSkgPT4gZW50cnkudHJpbSgpLmxlbmd0aCA+IDApPy50cmltKCkgPz8g
dm9pZCAwCgl9Owp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2NsaS9nYXRld2F5LWNsaS9j
YWxsLnRzCmNvbnN0IGdhdGV3YXlDYWxsT3B0cyA9IChjbWQpID0+IGNtZC5vcHRpb24oIi0tdXJs
IDx1cmw+IiwgIkdhdGV3YXkgV2ViU29ja2V0IFVSTCAoZGVmYXVsdHMgdG8gZ2F0ZXdheS5yZW1v
dGUudXJsIHdoZW4gY29uZmlndXJlZCkiKS5vcHRpb24oIi0tdG9rZW4gPHRva2VuPiIsICJHYXRl
d2F5IHRva2VuIChpZiByZXF1aXJlZCkiKS5vcHRpb24oIi0tcGFzc3dvcmQgPHBhc3N3b3JkPiIs
ICJHYXRld2F5IHBhc3N3b3JkIChwYXNzd29yZCBhdXRoKSIpLm9wdGlvbigiLS10aW1lb3V0IDxt
cz4iLCAiVGltZW91dCBpbiBtcyIsICIxMDAwMCIpLm9wdGlvbigiLS1leHBlY3QtZmluYWwiLCAi
V2FpdCBmb3IgZmluYWwgcmVzcG9uc2UgKGFnZW50KSIsIGZhbHNlKS5vcHRpb24oIi0tanNvbiIs
ICJPdXRwdXQgSlNPTiIsIGZhbHNlKTsKY29uc3QgY2FsbEdhdGV3YXlDbGkgPSBhc3luYyAobWV0
aG9kLCBvcHRzLCBwYXJhbXMpID0+IHdpdGhQcm9ncmVzcyh7CglsYWJlbDogYEdhdGV3YXkgJHtt
ZXRob2R9YCwKCWluZGV0ZXJtaW5hdGU6IHRydWUsCgllbmFibGVkOiBvcHRzLmpzb24gIT09IHRy
dWUKfSwgYXN5bmMgKCkgPT4gYXdhaXQgY2FsbEdhdGV3YXkoewoJY29uZmlnOiBvcHRzLmNvbmZp
ZywKCXVybDogb3B0cy51cmwsCgl0b2tlbjogb3B0cy50b2tlbiwKCXBhc3N3b3JkOiBvcHRzLnBh
c3N3b3JkLAoJbWV0aG9kLAoJcGFyYW1zLAoJZXhwZWN0RmluYWw6IEJvb2xlYW4ob3B0cy5leHBl
Y3RGaW5hbCksCgl0aW1lb3V0TXM6IE51bWJlcihvcHRzLnRpbWVvdXQgPz8gMWU0KSwKCWNsaWVu
dE5hbWU6IEdBVEVXQVlfQ0xJRU5UX05BTUVTLkNMSSwKCW1vZGU6IEdBVEVXQVlfQ0xJRU5UX01P
REVTLkNMSQp9KSk7Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2NsaS9nYXRld2F5LWNsaS9k
aXNjb3Zlci50cwpmdW5jdGlvbiBwYXJzZURpc2NvdmVyVGltZW91dE1zKHJhdywgZmFsbGJhY2tN
cykgewoJcmV0dXJuIHBhcnNlVGltZW91dE1zV2l0aEZhbGxiYWNrKHJhdywgZmFsbGJhY2tNcywg
eyBpbnZhbGlkVHlwZTogImVycm9yIiB9KTsKfQpmdW5jdGlvbiBwaWNrQmVhY29uSG9zdChiZWFj
b24pIHsKCWNvbnN0IGhvc3QgPSBiZWFjb24uaG9zdCB8fCBiZWFjb24udGFpbG5ldERucyB8fCBi
ZWFjb24ubGFuSG9zdDsKCXJldHVybiBob3N0Py50cmltKCkgPyBob3N0LnRyaW0oKSA6IG51bGw7
Cn0KZnVuY3Rpb24gcGlja0dhdGV3YXlQb3J0KGJlYWNvbikgewoJY29uc3QgcG9ydCA9IGJlYWNv
bi5wb3J0ID8/IGJlYWNvbi5nYXRld2F5UG9ydCA/PyAxODc4OTsKCXJldHVybiBwb3J0ID4gMCA/
IHBvcnQgOiAxODc4OTsKfQpmdW5jdGlvbiBkZWR1cGVCZWFjb25zKGJlYWNvbnMpIHsKCWNvbnN0
IG91dCA9IFtdOwoJY29uc3Qgc2VlbiA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7Cglmb3Ig
KGNvbnN0IGIgb2YgYmVhY29ucykgewoJCWNvbnN0IGhvc3QgPSBwaWNrQmVhY29uSG9zdChiKSA/
PyAiIjsKCQljb25zdCBrZXkgPSBbCgkJCWIuZG9tYWluID8/ICIiLAoJCQliLmluc3RhbmNlTmFt
ZSA/PyAiIiwKCQkJYi5kaXNwbGF5TmFtZSA/PyAiIiwKCQkJaG9zdCwKCQkJU3RyaW5nKGIucG9y
dCA/PyAiIiksCgkJCVN0cmluZyhiLmdhdGV3YXlQb3J0ID8/ICIiKQoJCV0uam9pbigifCIpOwoJ
CWlmIChzZWVuLmhhcyhrZXkpKSBjb250aW51ZTsKCQlzZWVuLmFkZChrZXkpOwoJCW91dC5wdXNo
KGIpOwoJfQoJcmV0dXJuIG91dDsKfQpmdW5jdGlvbiByZW5kZXJCZWFjb25MaW5lcyhiZWFjb24s
IHJpY2gpIHsKCWNvbnN0IG5hbWVSYXcgPSAoYmVhY29uLmRpc3BsYXlOYW1lIHx8IGJlYWNvbi5p
bnN0YW5jZU5hbWUgfHwgIkdhdGV3YXkiKS50cmltKCk7Cgljb25zdCBkb21haW5SYXcgPSAoYmVh
Y29uLmRvbWFpbiB8fCAibG9jYWwuIikudHJpbSgpOwoJY29uc3QgdGl0bGUgPSBjb2xvcml6ZShy
aWNoLCB0aGVtZS5hY2NlbnRCcmlnaHQsIG5hbWVSYXcpOwoJY29uc3QgZG9tYWluID0gY29sb3Jp
emUocmljaCwgdGhlbWUubXV0ZWQsIGRvbWFpblJhdyk7Cgljb25zdCBob3N0ID0gcGlja0JlYWNv
bkhvc3QoYmVhY29uKTsKCWNvbnN0IGdhdGV3YXlQb3J0ID0gcGlja0dhdGV3YXlQb3J0KGJlYWNv
bik7Cgljb25zdCBzY2hlbWUgPSBiZWFjb24uZ2F0ZXdheVRscyA/ICJ3c3MiIDogIndzIjsKCWNv
bnN0IHdzVXJsID0gaG9zdCA/IGAke3NjaGVtZX06Ly8ke2hvc3R9OiR7Z2F0ZXdheVBvcnR9YCA6
IG51bGw7Cgljb25zdCBsaW5lcyA9IFtgLSAke3RpdGxlfSAke2RvbWFpbn1gXTsKCWlmIChiZWFj
b24udGFpbG5ldERucykgbGluZXMucHVzaChgICAke2NvbG9yaXplKHJpY2gsIHRoZW1lLmluZm8s
ICJ0YWlsbmV0Iil9OiAke2JlYWNvbi50YWlsbmV0RG5zfWApOwoJaWYgKGJlYWNvbi5sYW5Ib3N0
KSBsaW5lcy5wdXNoKGAgICR7Y29sb3JpemUocmljaCwgdGhlbWUuaW5mbywgImxhbiIpfTogJHti
ZWFjb24ubGFuSG9zdH1gKTsKCWlmIChiZWFjb24uaG9zdCkgbGluZXMucHVzaChgICAke2NvbG9y
aXplKHJpY2gsIHRoZW1lLmluZm8sICJob3N0Iil9OiAke2JlYWNvbi5ob3N0fWApOwoJaWYgKHdz
VXJsKSBsaW5lcy5wdXNoKGAgICR7Y29sb3JpemUocmljaCwgdGhlbWUubXV0ZWQsICJ3cyIpfTog
JHtjb2xvcml6ZShyaWNoLCB0aGVtZS5jb21tYW5kLCB3c1VybCl9YCk7CglpZiAoYmVhY29uLnJv
bGUpIGxpbmVzLnB1c2goYCAgJHtjb2xvcml6ZShyaWNoLCB0aGVtZS5tdXRlZCwgInJvbGUiKX06
ICR7YmVhY29uLnJvbGV9YCk7CglpZiAoYmVhY29uLnRyYW5zcG9ydCkgbGluZXMucHVzaChgICAk
e2NvbG9yaXplKHJpY2gsIHRoZW1lLm11dGVkLCAidHJhbnNwb3J0Iil9OiAke2JlYWNvbi50cmFu
c3BvcnR9YCk7CglpZiAoYmVhY29uLmdhdGV3YXlUbHMpIHsKCQljb25zdCBmaW5nZXJwcmludCA9
IGJlYWNvbi5nYXRld2F5VGxzRmluZ2VycHJpbnRTaGEyNTYgPyBgc2hhMjU2ICR7YmVhY29uLmdh
dGV3YXlUbHNGaW5nZXJwcmludFNoYTI1Nn1gIDogImVuYWJsZWQiOwoJCWxpbmVzLnB1c2goYCAg
JHtjb2xvcml6ZShyaWNoLCB0aGVtZS5tdXRlZCwgInRscyIpfTogJHtmaW5nZXJwcmludH1gKTsK
CX0KCWlmICh0eXBlb2YgYmVhY29uLnNzaFBvcnQgPT09ICJudW1iZXIiICYmIGJlYWNvbi5zc2hQ
b3J0ID4gMCAmJiBob3N0KSB7CgkJY29uc3Qgc3NoID0gYHNzaCAtTiAtTCAxODc4OToxMjcuMC4w
LjE6MTg3ODkgPHVzZXI+QCR7aG9zdH0gLXAgJHtiZWFjb24uc3NoUG9ydH1gOwoJCWxpbmVzLnB1
c2goYCAgJHtjb2xvcml6ZShyaWNoLCB0aGVtZS5tdXRlZCwgInNzaCIpfTogJHtjb2xvcml6ZShy
aWNoLCB0aGVtZS5jb21tYW5kLCBzc2gpfWApOwoJfQoJcmV0dXJuIGxpbmVzOwp9Ci8vI2VuZHJl
Z2lvbgovLyNyZWdpb24gc3JjL2dhdGV3YXkvc2VydmVyL2Nsb3NlLXJlYXNvbi50cwpjb25zdCBD
TE9TRV9SRUFTT05fTUFYX0JZVEVTID0gMTIwOwpmdW5jdGlvbiB0cnVuY2F0ZUNsb3NlUmVhc29u
KHJlYXNvbiwgbWF4Qnl0ZXMgPSBDTE9TRV9SRUFTT05fTUFYX0JZVEVTKSB7CglpZiAoIXJlYXNv
bikgcmV0dXJuICJpbnZhbGlkIGhhbmRzaGFrZSI7Cgljb25zdCBidWYgPSBCdWZmZXIkMS5mcm9t
KHJlYXNvbik7CglpZiAoYnVmLmxlbmd0aCA8PSBtYXhCeXRlcykgcmV0dXJuIHJlYXNvbjsKCXJl
dHVybiBidWYuc3ViYXJyYXkoMCwgbWF4Qnl0ZXMpLnRvU3RyaW5nKCk7Cn0KLy8jZW5kcmVnaW9u
Ci8vI3JlZ2lvbiBzcmMvaW5mcmEvZXhlYy1hcHByb3ZhbC1mb3J3YXJkZXIudHMKY29uc3QgbG9n
JDUgPSBjcmVhdGVTdWJzeXN0ZW1Mb2dnZXIoImdhdGV3YXkvZXhlYy1hcHByb3ZhbHMiKTsKY29u
c3QgREVGQVVMVF9NT0RFID0gInNlc3Npb24iOwpmdW5jdGlvbiBub3JtYWxpemVNb2RlKG1vZGUp
IHsKCXJldHVybiBtb2RlID8/IERFRkFVTFRfTU9ERTsKfQpmdW5jdGlvbiBtYXRjaFNlc3Npb25G
aWx0ZXIoc2Vzc2lvbktleSwgcGF0dGVybnMpIHsKCXJldHVybiBwYXR0ZXJucy5zb21lKChwYXR0
ZXJuKSA9PiB7CgkJaWYgKHNlc3Npb25LZXkuaW5jbHVkZXMocGF0dGVybikpIHJldHVybiB0cnVl
OwoJCWNvbnN0IHJlZ2V4ID0gY29tcGlsZVNhZmVSZWdleChwYXR0ZXJuKTsKCQlyZXR1cm4gcmVn
ZXggPyB0ZXN0UmVnZXhXaXRoQm91bmRlZElucHV0KHJlZ2V4LCBzZXNzaW9uS2V5KSA6IGZhbHNl
OwoJfSk7Cn0KZnVuY3Rpb24gc2hvdWxkRm9yd2FyZChwYXJhbXMpIHsKCWNvbnN0IGNvbmZpZyA9
IHBhcmFtcy5jb25maWc7CglpZiAoIWNvbmZpZz8uZW5hYmxlZCkgcmV0dXJuIGZhbHNlOwoJaWYg
KGNvbmZpZy5hZ2VudEZpbHRlcj8ubGVuZ3RoKSB7CgkJY29uc3QgYWdlbnRJZCA9IHBhcmFtcy5y
ZXF1ZXN0LnJlcXVlc3QuYWdlbnRJZCA/PyBwYXJzZUFnZW50U2Vzc2lvbktleShwYXJhbXMucmVx
dWVzdC5yZXF1ZXN0LnNlc3Npb25LZXkpPy5hZ2VudElkOwoJCWlmICghYWdlbnRJZCkgcmV0dXJu
IGZhbHNlOwoJCWlmICghY29uZmlnLmFnZW50RmlsdGVyLmluY2x1ZGVzKGFnZW50SWQpKSByZXR1
cm4gZmFsc2U7Cgl9CglpZiAoY29uZmlnLnNlc3Npb25GaWx0ZXI/Lmxlbmd0aCkgewoJCWNvbnN0
IHNlc3Npb25LZXkgPSBwYXJhbXMucmVxdWVzdC5yZXF1ZXN0LnNlc3Npb25LZXk7CgkJaWYgKCFz
ZXNzaW9uS2V5KSByZXR1cm4gZmFsc2U7CgkJaWYgKCFtYXRjaFNlc3Npb25GaWx0ZXIoc2Vzc2lv
bktleSwgY29uZmlnLnNlc3Npb25GaWx0ZXIpKSByZXR1cm4gZmFsc2U7Cgl9CglyZXR1cm4gdHJ1
ZTsKfQpmdW5jdGlvbiBidWlsZFRhcmdldEtleSh0YXJnZXQpIHsKCWNvbnN0IGNoYW5uZWwgPSBu
b3JtYWxpemVNZXNzYWdlQ2hhbm5lbCh0YXJnZXQuY2hhbm5lbCkgPz8gdGFyZ2V0LmNoYW5uZWw7
Cgljb25zdCBhY2NvdW50SWQgPSB0YXJnZXQuYWNjb3VudElkID8/ICIiOwoJY29uc3QgdGhyZWFk
SWQgPSB0YXJnZXQudGhyZWFkSWQgPz8gIiI7CglyZXR1cm4gWwoJCWNoYW5uZWwsCgkJdGFyZ2V0
LnRvLAoJCWFjY291bnRJZCwKCQl0aHJlYWRJZAoJXS5qb2luKCI6Iik7Cn0KZnVuY3Rpb24gcmVz
b2x2ZUNoYW5uZWxBY2NvdW50Q29uZmlnKGFjY291bnRzLCBhY2NvdW50SWQpIHsKCWlmICghYWNj
b3VudHMgfHwgIWFjY291bnRJZD8udHJpbSgpKSByZXR1cm47Cgljb25zdCBub3JtYWxpemVkID0g
bm9ybWFsaXplQWNjb3VudElkJDEoYWNjb3VudElkKTsKCWNvbnN0IGRpcmVjdCA9IGFjY291bnRz
W25vcm1hbGl6ZWRdOwoJaWYgKGRpcmVjdCkgcmV0dXJuIGRpcmVjdDsKCWNvbnN0IGZhbGxiYWNr
S2V5ID0gT2JqZWN0LmtleXMoYWNjb3VudHMpLmZpbmQoKGtleSkgPT4ga2V5LnRvTG93ZXJDYXNl
KCkgPT09IG5vcm1hbGl6ZWQudG9Mb3dlckNhc2UoKSk7CglyZXR1cm4gZmFsbGJhY2tLZXkgPyBh
Y2NvdW50c1tmYWxsYmFja0tleV0gOiB2b2lkIDA7Cn0KZnVuY3Rpb24gc2hvdWxkU2tpcERpc2Nv
cmRGb3J3YXJkaW5nKHRhcmdldCwgY2ZnKSB7CglpZiAoKG5vcm1hbGl6ZU1lc3NhZ2VDaGFubmVs
KHRhcmdldC5jaGFubmVsKSA/PyB0YXJnZXQuY2hhbm5lbCkgIT09ICJkaXNjb3JkIikgcmV0dXJu
IGZhbHNlOwoJY29uc3QgZGlzY29yZCA9IGNmZy5jaGFubmVscz8uZGlzY29yZDsKCWlmICghZGlz
Y29yZCkgcmV0dXJuIGZhbHNlOwoJY29uc3QgZXhlY0FwcHJvdmFscyA9IHJlc29sdmVDaGFubmVs
QWNjb3VudENvbmZpZyhkaXNjb3JkLmFjY291bnRzLCB0YXJnZXQuYWNjb3VudElkKT8uZXhlY0Fw
cHJvdmFscyA/PyBkaXNjb3JkLmV4ZWNBcHByb3ZhbHM7CglyZXR1cm4gQm9vbGVhbihleGVjQXBw
cm92YWxzPy5lbmFibGVkICYmIChleGVjQXBwcm92YWxzLmFwcHJvdmVycz8ubGVuZ3RoID8/IDAp
ID4gMCk7Cn0KZnVuY3Rpb24gc2hvdWxkU2tpcFRlbGVncmFtRm9yd2FyZGluZyhwYXJhbXMpIHsK
CWlmICgobm9ybWFsaXplTWVzc2FnZUNoYW5uZWwocGFyYW1zLnRhcmdldC5jaGFubmVsKSA/PyBw
YXJhbXMudGFyZ2V0LmNoYW5uZWwpICE9PSAidGVsZWdyYW0iKSByZXR1cm4gZmFsc2U7CglpZiAo
bm9ybWFsaXplTWVzc2FnZUNoYW5uZWwocGFyYW1zLnJlcXVlc3QucmVxdWVzdC50dXJuU291cmNl
Q2hhbm5lbCA/PyAiIikgIT09ICJ0ZWxlZ3JhbSIpIHJldHVybiBmYWxzZTsKCWNvbnN0IHRlbGVn
cmFtID0gcGFyYW1zLmNmZy5jaGFubmVscz8udGVsZWdyYW07CglpZiAoIXRlbGVncmFtKSByZXR1
cm4gZmFsc2U7Cgljb25zdCB0ZWxlZ3JhbUNvbmZpZyA9IHRlbGVncmFtOwoJaWYgKCF0ZWxlZ3Jh
bUNvbmZpZykgcmV0dXJuIGZhbHNlOwoJY29uc3QgYWNjb3VudElkID0gcGFyYW1zLnRhcmdldC5h
Y2NvdW50SWQ/LnRyaW0oKSB8fCBwYXJhbXMucmVxdWVzdC5yZXF1ZXN0LnR1cm5Tb3VyY2VBY2Nv
dW50SWQ/LnRyaW0oKTsKCWNvbnN0IGV4ZWNBcHByb3ZhbHMgPSAoYWNjb3VudElkID8gcmVzb2x2
ZUNoYW5uZWxBY2NvdW50Q29uZmlnKHRlbGVncmFtQ29uZmlnLmFjY291bnRzLCBhY2NvdW50SWQp
IDogdm9pZCAwKT8uZXhlY0FwcHJvdmFscyA/PyB0ZWxlZ3JhbUNvbmZpZy5leGVjQXBwcm92YWxz
OwoJcmV0dXJuIEJvb2xlYW4oZXhlY0FwcHJvdmFscz8uZW5hYmxlZCAmJiAoZXhlY0FwcHJvdmFs
cy5hcHByb3ZlcnM/Lmxlbmd0aCA/PyAwKSA+IDApOwp9CmZ1bmN0aW9uIGZvcm1hdEFwcHJvdmFs
Q29tbWFuZChjb21tYW5kKSB7CglpZiAoIWNvbW1hbmQuaW5jbHVkZXMoIlxuIikgJiYgIWNvbW1h
bmQuaW5jbHVkZXMoImAiKSkgcmV0dXJuIHsKCQlpbmxpbmU6IHRydWUsCgkJdGV4dDogYFxgJHtj
b21tYW5kfVxgYAoJfTsKCWxldCBmZW5jZSA9ICJgYGAiOwoJd2hpbGUgKGNvbW1hbmQuaW5jbHVk
ZXMoZmVuY2UpKSBmZW5jZSArPSAiYCI7CglyZXR1cm4gewoJCWlubGluZTogZmFsc2UsCgkJdGV4
dDogYCR7ZmVuY2V9XG4ke2NvbW1hbmR9XG4ke2ZlbmNlfWAKCX07Cn0KZnVuY3Rpb24gYnVpbGRS
ZXF1ZXN0TWVzc2FnZShyZXF1ZXN0LCBub3dNcykgewoJY29uc3QgbGluZXMgPSBbIvCflJIgRXhl
YyBhcHByb3ZhbCByZXF1aXJlZCIsIGBJRDogJHtyZXF1ZXN0LmlkfWBdOwoJY29uc3QgY29tbWFu
ZCA9IGZvcm1hdEFwcHJvdmFsQ29tbWFuZChyZXNvbHZlRXhlY0FwcHJvdmFsQ29tbWFuZERpc3Bs
YXkocmVxdWVzdC5yZXF1ZXN0KS5jb21tYW5kVGV4dCk7CglpZiAoY29tbWFuZC5pbmxpbmUpIGxp
bmVzLnB1c2goYENvbW1hbmQ6ICR7Y29tbWFuZC50ZXh0fWApOwoJZWxzZSB7CgkJbGluZXMucHVz
aCgiQ29tbWFuZDoiKTsKCQlsaW5lcy5wdXNoKGNvbW1hbmQudGV4dCk7Cgl9CglpZiAocmVxdWVz
dC5yZXF1ZXN0LmN3ZCkgbGluZXMucHVzaChgQ1dEOiAke3JlcXVlc3QucmVxdWVzdC5jd2R9YCk7
CglpZiAocmVxdWVzdC5yZXF1ZXN0Lm5vZGVJZCkgbGluZXMucHVzaChgTm9kZTogJHtyZXF1ZXN0
LnJlcXVlc3Qubm9kZUlkfWApOwoJaWYgKEFycmF5LmlzQXJyYXkocmVxdWVzdC5yZXF1ZXN0LmVu
dktleXMpICYmIHJlcXVlc3QucmVxdWVzdC5lbnZLZXlzLmxlbmd0aCA+IDApIGxpbmVzLnB1c2go
YEVudiBvdmVycmlkZXM6ICR7cmVxdWVzdC5yZXF1ZXN0LmVudktleXMuam9pbigiLCAiKX1gKTsK
CWlmIChyZXF1ZXN0LnJlcXVlc3QuaG9zdCkgbGluZXMucHVzaChgSG9zdDogJHtyZXF1ZXN0LnJl
cXVlc3QuaG9zdH1gKTsKCWlmIChyZXF1ZXN0LnJlcXVlc3QuYWdlbnRJZCkgbGluZXMucHVzaChg
QWdlbnQ6ICR7cmVxdWVzdC5yZXF1ZXN0LmFnZW50SWR9YCk7CglpZiAocmVxdWVzdC5yZXF1ZXN0
LnNlY3VyaXR5KSBsaW5lcy5wdXNoKGBTZWN1cml0eTogJHtyZXF1ZXN0LnJlcXVlc3Quc2VjdXJp
dHl9YCk7CglpZiAocmVxdWVzdC5yZXF1ZXN0LmFzaykgbGluZXMucHVzaChgQXNrOiAke3JlcXVl
c3QucmVxdWVzdC5hc2t9YCk7Cgljb25zdCBleHBpcmVzSW4gPSBNYXRoLm1heCgwLCBNYXRoLnJv
dW5kKChyZXF1ZXN0LmV4cGlyZXNBdE1zIC0gbm93TXMpIC8gMWUzKSk7CglsaW5lcy5wdXNoKGBF
eHBpcmVzIGluOiAke2V4cGlyZXNJbn1zYCk7CglsaW5lcy5wdXNoKCJNb2RlOiBmb3JlZ3JvdW5k
IChpbnRlcmFjdGl2ZSBhcHByb3ZhbHMgYXZhaWxhYmxlIGluIHRoaXMgY2hhdCkuIik7CglsaW5l
cy5wdXNoKCJCYWNrZ3JvdW5kIG1vZGUgbm90ZTogbm9uLWludGVyYWN0aXZlIHJ1bnMgY2Fubm90
IHdhaXQgZm9yIGNoYXQgYXBwcm92YWxzOyB1c2UgcHJlLWFwcHJvdmVkIHBvbGljeSAoYWxsb3ct
YWx3YXlzIG9yIGFzaz1vZmYpLiIpOwoJbGluZXMucHVzaCgiUmVwbHkgd2l0aDogL2FwcHJvdmUg
PGlkPiBhbGxvdy1vbmNlfGFsbG93LWFsd2F5c3xkZW55Iik7CglyZXR1cm4gbGluZXMuam9pbigi
XG4iKTsKfQpmdW5jdGlvbiBkZWNpc2lvbkxhYmVsKGRlY2lzaW9uKSB7CglpZiAoZGVjaXNpb24g
PT09ICJhbGxvdy1vbmNlIikgcmV0dXJuICJhbGxvd2VkIG9uY2UiOwoJaWYgKGRlY2lzaW9uID09
PSAiYWxsb3ctYWx3YXlzIikgcmV0dXJuICJhbGxvd2VkIGFsd2F5cyI7CglyZXR1cm4gImRlbmll
ZCI7Cn0KZnVuY3Rpb24gYnVpbGRSZXNvbHZlZE1lc3NhZ2UocmVzb2x2ZWQpIHsKCXJldHVybiBg
JHtg4pyFIEV4ZWMgYXBwcm92YWwgJHtkZWNpc2lvbkxhYmVsKHJlc29sdmVkLmRlY2lzaW9uKX0u
YH0ke3Jlc29sdmVkLnJlc29sdmVkQnkgPyBgIFJlc29sdmVkIGJ5ICR7cmVzb2x2ZWQucmVzb2x2
ZWRCeX0uYCA6ICIifSBJRDogJHtyZXNvbHZlZC5pZH1gOwp9CmZ1bmN0aW9uIGJ1aWxkRXhwaXJl
ZE1lc3NhZ2UocmVxdWVzdCkgewoJcmV0dXJuIGDij7HvuI8gRXhlYyBhcHByb3ZhbCBleHBpcmVk
LiBJRDogJHtyZXF1ZXN0LmlkfWA7Cn0KZnVuY3Rpb24gbm9ybWFsaXplVHVyblNvdXJjZUNoYW5u
ZWwodmFsdWUpIHsKCWNvbnN0IG5vcm1hbGl6ZWQgPSB2YWx1ZSA/IG5vcm1hbGl6ZU1lc3NhZ2VD
aGFubmVsKHZhbHVlKSA6IHZvaWQgMDsKCXJldHVybiBub3JtYWxpemVkICYmIGlzRGVsaXZlcmFi
bGVNZXNzYWdlQ2hhbm5lbChub3JtYWxpemVkKSA/IG5vcm1hbGl6ZWQgOiB2b2lkIDA7Cn0KZnVu
Y3Rpb24gZGVmYXVsdFJlc29sdmVTZXNzaW9uVGFyZ2V0KHBhcmFtcykgewoJY29uc3QgcmVzb2x2
ZWRUYXJnZXQgPSByZXNvbHZlRXhlY0FwcHJvdmFsU2Vzc2lvblRhcmdldCh7CgkJY2ZnOiBwYXJh
bXMuY2ZnLAoJCXJlcXVlc3Q6IHBhcmFtcy5yZXF1ZXN0LAoJCXR1cm5Tb3VyY2VDaGFubmVsOiBu
b3JtYWxpemVUdXJuU291cmNlQ2hhbm5lbChwYXJhbXMucmVxdWVzdC5yZXF1ZXN0LnR1cm5Tb3Vy
Y2VDaGFubmVsKSwKCQl0dXJuU291cmNlVG86IHBhcmFtcy5yZXF1ZXN0LnJlcXVlc3QudHVyblNv
dXJjZVRvPy50cmltKCkgfHwgdm9pZCAwLAoJCXR1cm5Tb3VyY2VBY2NvdW50SWQ6IHBhcmFtcy5y
ZXF1ZXN0LnJlcXVlc3QudHVyblNvdXJjZUFjY291bnRJZD8udHJpbSgpIHx8IHZvaWQgMCwKCQl0
dXJuU291cmNlVGhyZWFkSWQ6IHBhcmFtcy5yZXF1ZXN0LnJlcXVlc3QudHVyblNvdXJjZVRocmVh
ZElkID8/IHZvaWQgMAoJfSk7CglpZiAoIXJlc29sdmVkVGFyZ2V0Py5jaGFubmVsIHx8ICFyZXNv
bHZlZFRhcmdldC50bykgcmV0dXJuIG51bGw7Cgljb25zdCBjaGFubmVsID0gcmVzb2x2ZWRUYXJn
ZXQuY2hhbm5lbDsKCWlmICghaXNEZWxpdmVyYWJsZU1lc3NhZ2VDaGFubmVsKGNoYW5uZWwpKSBy
ZXR1cm4gbnVsbDsKCXJldHVybiB7CgkJY2hhbm5lbCwKCQl0bzogcmVzb2x2ZWRUYXJnZXQudG8s
CgkJYWNjb3VudElkOiByZXNvbHZlZFRhcmdldC5hY2NvdW50SWQsCgkJdGhyZWFkSWQ6IHJlc29s
dmVkVGFyZ2V0LnRocmVhZElkCgl9Owp9CmFzeW5jIGZ1bmN0aW9uIGRlbGl2ZXJUb1RhcmdldHMo
cGFyYW1zKSB7Cgljb25zdCBkZWxpdmVyaWVzID0gcGFyYW1zLnRhcmdldHMubWFwKGFzeW5jICh0
YXJnZXQpID0+IHsKCQlpZiAocGFyYW1zLnNob3VsZFNlbmQgJiYgIXBhcmFtcy5zaG91bGRTZW5k
KCkpIHJldHVybjsKCQljb25zdCBjaGFubmVsID0gbm9ybWFsaXplTWVzc2FnZUNoYW5uZWwodGFy
Z2V0LmNoYW5uZWwpID8/IHRhcmdldC5jaGFubmVsOwoJCWlmICghaXNEZWxpdmVyYWJsZU1lc3Nh
Z2VDaGFubmVsKGNoYW5uZWwpKSByZXR1cm47CgkJdHJ5IHsKCQkJY29uc3QgcGF5bG9hZCA9IHBh
cmFtcy5idWlsZFBheWxvYWQodGFyZ2V0KTsKCQkJaWYgKGNoYW5uZWwgPT09ICJ0ZWxlZ3JhbSIg
JiYgcGF5bG9hZC5jaGFubmVsRGF0YSAmJiB0eXBlb2YgcGF5bG9hZC5jaGFubmVsRGF0YSA9PT0g
Im9iamVjdCIgJiYgIUFycmF5LmlzQXJyYXkocGF5bG9hZC5jaGFubmVsRGF0YSkgJiYgcGF5bG9h
ZC5jaGFubmVsRGF0YS5leGVjQXBwcm92YWwpIHsKCQkJCWNvbnN0IHRocmVhZElkID0gdHlwZW9m
IHRhcmdldC50aHJlYWRJZCA9PT0gIm51bWJlciIgPyB0YXJnZXQudGhyZWFkSWQgOiB0eXBlb2Yg
dGFyZ2V0LnRocmVhZElkID09PSAic3RyaW5nIiA/IE51bWJlci5wYXJzZUludCh0YXJnZXQudGhy
ZWFkSWQsIDEwKSA6IHZvaWQgMDsKCQkJCWF3YWl0IHNlbmRUeXBpbmdUZWxlZ3JhbSh0YXJnZXQu
dG8sIHsKCQkJCQljZmc6IHBhcmFtcy5jZmcsCgkJCQkJYWNjb3VudElkOiB0YXJnZXQuYWNjb3Vu
dElkLAoJCQkJCS4uLk51bWJlci5pc0Zpbml0ZSh0aHJlYWRJZCkgPyB7IG1lc3NhZ2VUaHJlYWRJ
ZDogdGhyZWFkSWQgfSA6IHt9CgkJCQl9KS5jYXRjaCgoKSA9PiB7fSk7CgkJCX0KCQkJYXdhaXQg
cGFyYW1zLmRlbGl2ZXIoewoJCQkJY2ZnOiBwYXJhbXMuY2ZnLAoJCQkJY2hhbm5lbCwKCQkJCXRv
OiB0YXJnZXQudG8sCgkJCQlhY2NvdW50SWQ6IHRhcmdldC5hY2NvdW50SWQsCgkJCQl0aHJlYWRJ
ZDogdGFyZ2V0LnRocmVhZElkLAoJCQkJcGF5bG9hZHM6IFtwYXlsb2FkXQoJCQl9KTsKCQl9IGNh
dGNoIChlcnIpIHsKCQkJbG9nJDUuZXJyb3IoYGV4ZWMgYXBwcm92YWxzOiBmYWlsZWQgdG8gZGVs
aXZlciB0byAke2NoYW5uZWx9OiR7dGFyZ2V0LnRvfTogJHtTdHJpbmcoZXJyKX1gKTsKCQl9Cgl9
KTsKCWF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChkZWxpdmVyaWVzKTsKfQpmdW5jdGlvbiBidWls
ZFJlcXVlc3RQYXlsb2FkRm9yVGFyZ2V0KF9jZmcsIHJlcXVlc3QsIG5vd01zVmFsdWUsIHRhcmdl
dCkgewoJaWYgKChub3JtYWxpemVNZXNzYWdlQ2hhbm5lbCh0YXJnZXQuY2hhbm5lbCkgPz8gdGFy
Z2V0LmNoYW5uZWwpID09PSAidGVsZWdyYW0iKSB7CgkJY29uc3QgcGF5bG9hZCA9IGJ1aWxkRXhl
Y0FwcHJvdmFsUGVuZGluZ1JlcGx5UGF5bG9hZCh7CgkJCWFwcHJvdmFsSWQ6IHJlcXVlc3QuaWQs
CgkJCWFwcHJvdmFsU2x1ZzogcmVxdWVzdC5pZC5zbGljZSgwLCA4KSwKCQkJYXBwcm92YWxDb21t
YW5kSWQ6IHJlcXVlc3QuaWQsCgkJCWNvbW1hbmQ6IHJlc29sdmVFeGVjQXBwcm92YWxDb21tYW5k
RGlzcGxheShyZXF1ZXN0LnJlcXVlc3QpLmNvbW1hbmRUZXh0LAoJCQljd2Q6IHJlcXVlc3QucmVx
dWVzdC5jd2QgPz8gdm9pZCAwLAoJCQlob3N0OiByZXF1ZXN0LnJlcXVlc3QuaG9zdCA9PT0gIm5v
ZGUiID8gIm5vZGUiIDogImdhdGV3YXkiLAoJCQlub2RlSWQ6IHJlcXVlc3QucmVxdWVzdC5ub2Rl
SWQgPz8gdm9pZCAwLAoJCQlleHBpcmVzQXRNczogcmVxdWVzdC5leHBpcmVzQXRNcywKCQkJbm93
TXM6IG5vd01zVmFsdWUKCQl9KTsKCQljb25zdCBidXR0b25zID0gYnVpbGRUZWxlZ3JhbUV4ZWNB
cHByb3ZhbEJ1dHRvbnMocmVxdWVzdC5pZCk7CgkJaWYgKCFidXR0b25zKSByZXR1cm4gcGF5bG9h
ZDsKCQlyZXR1cm4gewoJCQkuLi5wYXlsb2FkLAoJCQljaGFubmVsRGF0YTogewoJCQkJLi4ucGF5
bG9hZC5jaGFubmVsRGF0YSwKCQkJCXRlbGVncmFtOiB7IGJ1dHRvbnMgfQoJCQl9CgkJfTsKCX0K
CXJldHVybiB7IHRleHQ6IGJ1aWxkUmVxdWVzdE1lc3NhZ2UocmVxdWVzdCwgbm93TXNWYWx1ZSkg
fTsKfQpmdW5jdGlvbiByZXNvbHZlRm9yd2FyZFRhcmdldHMocGFyYW1zKSB7Cgljb25zdCBtb2Rl
ID0gbm9ybWFsaXplTW9kZShwYXJhbXMuY29uZmlnPy5tb2RlKTsKCWNvbnN0IHRhcmdldHMgPSBb
XTsKCWNvbnN0IHNlZW4gPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwoJaWYgKG1vZGUgPT09
ICJzZXNzaW9uIiB8fCBtb2RlID09PSAiYm90aCIpIHsKCQljb25zdCBzZXNzaW9uVGFyZ2V0ID0g
cGFyYW1zLnJlc29sdmVTZXNzaW9uVGFyZ2V0KHsKCQkJY2ZnOiBwYXJhbXMuY2ZnLAoJCQlyZXF1
ZXN0OiBwYXJhbXMucmVxdWVzdAoJCX0pOwoJCWlmIChzZXNzaW9uVGFyZ2V0KSB7CgkJCWNvbnN0
IGtleSA9IGJ1aWxkVGFyZ2V0S2V5KHNlc3Npb25UYXJnZXQpOwoJCQlpZiAoIXNlZW4uaGFzKGtl
eSkpIHsKCQkJCXNlZW4uYWRkKGtleSk7CgkJCQl0YXJnZXRzLnB1c2goewoJCQkJCS4uLnNlc3Np
b25UYXJnZXQsCgkJCQkJc291cmNlOiAic2Vzc2lvbiIKCQkJCX0pOwoJCQl9CgkJfQoJfQoJaWYg
KG1vZGUgPT09ICJ0YXJnZXRzIiB8fCBtb2RlID09PSAiYm90aCIpIHsKCQljb25zdCBleHBsaWNp
dFRhcmdldHMgPSBwYXJhbXMuY29uZmlnPy50YXJnZXRzID8/IFtdOwoJCWZvciAoY29uc3QgdGFy
Z2V0IG9mIGV4cGxpY2l0VGFyZ2V0cykgewoJCQljb25zdCBrZXkgPSBidWlsZFRhcmdldEtleSh0
YXJnZXQpOwoJCQlpZiAoc2Vlbi5oYXMoa2V5KSkgY29udGludWU7CgkJCXNlZW4uYWRkKGtleSk7
CgkJCXRhcmdldHMucHVzaCh7CgkJCQkuLi50YXJnZXQsCgkJCQlzb3VyY2U6ICJ0YXJnZXQiCgkJ
CX0pOwoJCX0KCX0KCXJldHVybiB0YXJnZXRzOwp9CmZ1bmN0aW9uIGNyZWF0ZUV4ZWNBcHByb3Zh
bEZvcndhcmRlcihkZXBzID0ge30pIHsKCWNvbnN0IGdldENvbmZpZyA9IGRlcHMuZ2V0Q29uZmln
ID8/IGxvYWRDb25maWc7Cgljb25zdCBkZWxpdmVyID0gZGVwcy5kZWxpdmVyID8/IGRlbGl2ZXJP
dXRib3VuZFBheWxvYWRzOwoJY29uc3Qgbm93TXMgPSBkZXBzLm5vd01zID8/IERhdGUubm93OwoJ
Y29uc3QgcmVzb2x2ZVNlc3Npb25UYXJnZXQgPSBkZXBzLnJlc29sdmVTZXNzaW9uVGFyZ2V0ID8/
IGRlZmF1bHRSZXNvbHZlU2Vzc2lvblRhcmdldDsKCWNvbnN0IHBlbmRpbmcgPSAvKiBAX19QVVJF
X18gKi8gbmV3IE1hcCgpOwoJY29uc3QgaGFuZGxlUmVxdWVzdGVkID0gYXN5bmMgKHJlcXVlc3Qp
ID0+IHsKCQljb25zdCBjZmcgPSBnZXRDb25maWcoKTsKCQljb25zdCBjb25maWcgPSBjZmcuYXBw
cm92YWxzPy5leGVjOwoJCWNvbnN0IGZpbHRlcmVkVGFyZ2V0cyA9IFsuLi5zaG91bGRGb3J3YXJk
KHsKCQkJY29uZmlnLAoJCQlyZXF1ZXN0CgkJfSkgPyByZXNvbHZlRm9yd2FyZFRhcmdldHMoewoJ
CQljZmcsCgkJCWNvbmZpZywKCQkJcmVxdWVzdCwKCQkJcmVzb2x2ZVNlc3Npb25UYXJnZXQKCQl9
KSA6IFtdXS5maWx0ZXIoKHRhcmdldCkgPT4gIXNob3VsZFNraXBEaXNjb3JkRm9yd2FyZGluZyh0
YXJnZXQsIGNmZykgJiYgIXNob3VsZFNraXBUZWxlZ3JhbUZvcndhcmRpbmcoewoJCQl0YXJnZXQs
CgkJCWNmZywKCQkJcmVxdWVzdAoJCX0pKTsKCQlpZiAoZmlsdGVyZWRUYXJnZXRzLmxlbmd0aCA9
PT0gMCkgcmV0dXJuIGZhbHNlOwoJCWNvbnN0IGV4cGlyZXNJbk1zID0gTWF0aC5tYXgoMCwgcmVx
dWVzdC5leHBpcmVzQXRNcyAtIG5vd01zKCkpOwoJCWNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVv
dXQoKCkgPT4gewoJCQkoYXN5bmMgKCkgPT4gewoJCQkJY29uc3QgZW50cnkgPSBwZW5kaW5nLmdl
dChyZXF1ZXN0LmlkKTsKCQkJCWlmICghZW50cnkpIHJldHVybjsKCQkJCXBlbmRpbmcuZGVsZXRl
KHJlcXVlc3QuaWQpOwoJCQkJY29uc3QgZXhwaXJlZFRleHQgPSBidWlsZEV4cGlyZWRNZXNzYWdl
KHJlcXVlc3QpOwoJCQkJYXdhaXQgZGVsaXZlclRvVGFyZ2V0cyh7CgkJCQkJY2ZnLAoJCQkJCXRh
cmdldHM6IGVudHJ5LnRhcmdldHMsCgkJCQkJYnVpbGRQYXlsb2FkOiAoKSA9PiAoeyB0ZXh0OiBl
eHBpcmVkVGV4dCB9KSwKCQkJCQlkZWxpdmVyCgkJCQl9KTsKCQkJfSkoKTsKCQl9LCBleHBpcmVz
SW5Ncyk7CgkJdGltZW91dElkLnVucmVmPy4oKTsKCQljb25zdCBwZW5kaW5nRW50cnkgPSB7CgkJ
CXJlcXVlc3QsCgkJCXRhcmdldHM6IGZpbHRlcmVkVGFyZ2V0cywKCQkJdGltZW91dElkCgkJfTsK
CQlwZW5kaW5nLnNldChyZXF1ZXN0LmlkLCBwZW5kaW5nRW50cnkpOwoJCWlmIChwZW5kaW5nLmdl
dChyZXF1ZXN0LmlkKSAhPT0gcGVuZGluZ0VudHJ5KSByZXR1cm4gZmFsc2U7CgkJZGVsaXZlclRv
VGFyZ2V0cyh7CgkJCWNmZywKCQkJdGFyZ2V0czogZmlsdGVyZWRUYXJnZXRzLAoJCQlidWlsZFBh
eWxvYWQ6ICh0YXJnZXQpID0+IGJ1aWxkUmVxdWVzdFBheWxvYWRGb3JUYXJnZXQoY2ZnLCByZXF1
ZXN0LCBub3dNcygpLCB0YXJnZXQpLAoJCQlkZWxpdmVyLAoJCQlzaG91bGRTZW5kOiAoKSA9PiBw
ZW5kaW5nLmdldChyZXF1ZXN0LmlkKSA9PT0gcGVuZGluZ0VudHJ5CgkJfSkuY2F0Y2goKGVycikg
PT4gewoJCQlsb2ckNS5lcnJvcihgZXhlYyBhcHByb3ZhbHM6IGZhaWxlZCB0byBkZWxpdmVyIHJl
cXVlc3QgJHtyZXF1ZXN0LmlkfTogJHtTdHJpbmcoZXJyKX1gKTsKCQl9KTsKCQlyZXR1cm4gdHJ1
ZTsKCX07Cgljb25zdCBoYW5kbGVSZXNvbHZlZCA9IGFzeW5jIChyZXNvbHZlZCkgPT4gewoJCWNv
bnN0IGVudHJ5ID0gcGVuZGluZy5nZXQocmVzb2x2ZWQuaWQpOwoJCWlmIChlbnRyeSkgewoJCQlp
ZiAoZW50cnkudGltZW91dElkKSBjbGVhclRpbWVvdXQoZW50cnkudGltZW91dElkKTsKCQkJcGVu
ZGluZy5kZWxldGUocmVzb2x2ZWQuaWQpOwoJCX0KCQljb25zdCBjZmcgPSBnZXRDb25maWcoKTsK
CQlsZXQgdGFyZ2V0cyA9IGVudHJ5Py50YXJnZXRzOwoJCWlmICghdGFyZ2V0cyAmJiByZXNvbHZl
ZC5yZXF1ZXN0KSB7CgkJCWNvbnN0IHJlcXVlc3QgPSB7CgkJCQlpZDogcmVzb2x2ZWQuaWQsCgkJ
CQlyZXF1ZXN0OiByZXNvbHZlZC5yZXF1ZXN0LAoJCQkJY3JlYXRlZEF0TXM6IHJlc29sdmVkLnRz
LAoJCQkJZXhwaXJlc0F0TXM6IHJlc29sdmVkLnRzCgkJCX07CgkJCWNvbnN0IGNvbmZpZyA9IGNm
Zy5hcHByb3ZhbHM/LmV4ZWM7CgkJCXRhcmdldHMgPSBbLi4uc2hvdWxkRm9yd2FyZCh7CgkJCQlj
b25maWcsCgkJCQlyZXF1ZXN0CgkJCX0pID8gcmVzb2x2ZUZvcndhcmRUYXJnZXRzKHsKCQkJCWNm
ZywKCQkJCWNvbmZpZywKCQkJCXJlcXVlc3QsCgkJCQlyZXNvbHZlU2Vzc2lvblRhcmdldAoJCQl9
KSA6IFtdXS5maWx0ZXIoKHRhcmdldCkgPT4gIXNob3VsZFNraXBEaXNjb3JkRm9yd2FyZGluZyh0
YXJnZXQsIGNmZykgJiYgIXNob3VsZFNraXBUZWxlZ3JhbUZvcndhcmRpbmcoewoJCQkJdGFyZ2V0
LAoJCQkJY2ZnLAoJCQkJcmVxdWVzdAoJCQl9KSk7CgkJfQoJCWlmICghdGFyZ2V0cyB8fCB0YXJn
ZXRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoJCWNvbnN0IHRleHQgPSBidWlsZFJlc29sdmVkTWVz
c2FnZShyZXNvbHZlZCk7CgkJYXdhaXQgZGVsaXZlclRvVGFyZ2V0cyh7CgkJCWNmZywKCQkJdGFy
Z2V0cywKCQkJYnVpbGRQYXlsb2FkOiAoKSA9PiAoeyB0ZXh0IH0pLAoJCQlkZWxpdmVyCgkJfSk7
Cgl9OwoJY29uc3Qgc3RvcCA9ICgpID0+IHsKCQlmb3IgKGNvbnN0IGVudHJ5IG9mIHBlbmRpbmcu
dmFsdWVzKCkpIGlmIChlbnRyeS50aW1lb3V0SWQpIGNsZWFyVGltZW91dChlbnRyeS50aW1lb3V0
SWQpOwoJCXBlbmRpbmcuY2xlYXIoKTsKCX07CglyZXR1cm4gewoJCWhhbmRsZVJlcXVlc3RlZCwK
CQloYW5kbGVSZXNvbHZlZCwKCQlzdG9wCgl9Owp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3Jj
L2luZnJhL3VwZGF0ZS1zdGFydHVwLnRzCmxldCB1cGRhdGVBdmFpbGFibGVDYWNoZSA9IG51bGw7
CmZ1bmN0aW9uIGdldFVwZGF0ZUF2YWlsYWJsZSgpIHsKCXJldHVybiB1cGRhdGVBdmFpbGFibGVD
YWNoZTsKfQpjb25zdCBVUERBVEVfQ0hFQ0tfRklMRU5BTUUgPSAidXBkYXRlLWNoZWNrLmpzb24i
Owpjb25zdCBVUERBVEVfQ0hFQ0tfSU5URVJWQUxfTVMgPSAxNDQwICogNjAgKiAxZTM7CmNvbnN0
IE9ORV9IT1VSX01TJDEgPSAzNjAwICogMWUzOwpjb25zdCBBVVRPX1VQREFURV9DT01NQU5EX1RJ
TUVPVVRfTVMgPSAyNzAwICogMWUzOwpjb25zdCBBVVRPX1NUQUJMRV9ERUxBWV9IT1VSU19ERUZB
VUxUID0gNjsKY29uc3QgQVVUT19TVEFCTEVfSklUVEVSX0hPVVJTX0RFRkFVTFQgPSAxMjsKY29u
c3QgQVVUT19CRVRBX0NIRUNLX0lOVEVSVkFMX0hPVVJTX0RFRkFVTFQgPSAxOwpmdW5jdGlvbiBz
aG91bGRTa2lwQ2hlY2soYWxsb3dJblRlc3RzKSB7CglpZiAoYWxsb3dJblRlc3RzKSByZXR1cm4g
ZmFsc2U7CglpZiAocHJvY2Vzcy5lbnYuVklURVNUIHx8IGZhbHNlKSByZXR1cm4gdHJ1ZTsKCXJl
dHVybiBmYWxzZTsKfQpmdW5jdGlvbiByZXNvbHZlQXV0b1VwZGF0ZVBvbGljeShjZmcpIHsKCWNv
bnN0IGF1dG8gPSBjZmcudXBkYXRlPy5hdXRvOwoJY29uc3Qgc3RhYmxlRGVsYXlIb3VycyA9IHR5
cGVvZiBhdXRvPy5zdGFibGVEZWxheUhvdXJzID09PSAibnVtYmVyIiAmJiBOdW1iZXIuaXNGaW5p
dGUoYXV0by5zdGFibGVEZWxheUhvdXJzKSA/IE1hdGgubWF4KDAsIGF1dG8uc3RhYmxlRGVsYXlI
b3VycykgOiBBVVRPX1NUQUJMRV9ERUxBWV9IT1VSU19ERUZBVUxUOwoJY29uc3Qgc3RhYmxlSml0
dGVySG91cnMgPSB0eXBlb2YgYXV0bz8uc3RhYmxlSml0dGVySG91cnMgPT09ICJudW1iZXIiICYm
IE51bWJlci5pc0Zpbml0ZShhdXRvLnN0YWJsZUppdHRlckhvdXJzKSA/IE1hdGgubWF4KDAsIGF1
dG8uc3RhYmxlSml0dGVySG91cnMpIDogQVVUT19TVEFCTEVfSklUVEVSX0hPVVJTX0RFRkFVTFQ7
Cgljb25zdCBiZXRhQ2hlY2tJbnRlcnZhbEhvdXJzID0gdHlwZW9mIGF1dG8/LmJldGFDaGVja0lu
dGVydmFsSG91cnMgPT09ICJudW1iZXIiICYmIE51bWJlci5pc0Zpbml0ZShhdXRvLmJldGFDaGVj
a0ludGVydmFsSG91cnMpID8gTWF0aC5tYXgoLjI1LCBhdXRvLmJldGFDaGVja0ludGVydmFsSG91
cnMpIDogQVVUT19CRVRBX0NIRUNLX0lOVEVSVkFMX0hPVVJTX0RFRkFVTFQ7CglyZXR1cm4gewoJ
CWVuYWJsZWQ6IEJvb2xlYW4oYXV0bz8uZW5hYmxlZCksCgkJc3RhYmxlRGVsYXlIb3VycywKCQlz
dGFibGVKaXR0ZXJIb3VycywKCQliZXRhQ2hlY2tJbnRlcnZhbEhvdXJzCgl9Owp9CmZ1bmN0aW9u
IHJlc29sdmVDaGVja0ludGVydmFsTXMoY2ZnKSB7Cgljb25zdCBjaGFubmVsID0gbm9ybWFsaXpl
VXBkYXRlQ2hhbm5lbChjZmcudXBkYXRlPy5jaGFubmVsKSA/PyAic3RhYmxlIjsKCWNvbnN0IGF1
dG8gPSByZXNvbHZlQXV0b1VwZGF0ZVBvbGljeShjZmcpOwoJaWYgKCFhdXRvLmVuYWJsZWQpIHJl
dHVybiBVUERBVEVfQ0hFQ0tfSU5URVJWQUxfTVM7CglpZiAoY2hhbm5lbCA9PT0gImJldGEiKSBy
ZXR1cm4gTWF0aC5tYXgoT05FX0hPVVJfTVMkMSAvIDQsIE1hdGguZmxvb3IoYXV0by5iZXRhQ2hl
Y2tJbnRlcnZhbEhvdXJzICogT05FX0hPVVJfTVMkMSkpOwoJaWYgKGNoYW5uZWwgPT09ICJzdGFi
bGUiKSByZXR1cm4gT05FX0hPVVJfTVMkMTsKCXJldHVybiBVUERBVEVfQ0hFQ0tfSU5URVJWQUxf
TVM7Cn0KYXN5bmMgZnVuY3Rpb24gcmVhZFN0YXRlKHN0YXRlUGF0aCkgewoJdHJ5IHsKCQljb25z
dCByYXcgPSBhd2FpdCBmcyQxLnJlYWRGaWxlKHN0YXRlUGF0aCwgInV0Zi04Iik7CgkJY29uc3Qg
cGFyc2VkID0gSlNPTi5wYXJzZShyYXcpOwoJCXJldHVybiBwYXJzZWQgJiYgdHlwZW9mIHBhcnNl
ZCA9PT0gIm9iamVjdCIgPyBwYXJzZWQgOiB7fTsKCX0gY2F0Y2ggewoJCXJldHVybiB7fTsKCX0K
fQphc3luYyBmdW5jdGlvbiB3cml0ZVN0YXRlKHN0YXRlUGF0aCwgc3RhdGUpIHsKCWF3YWl0IHdy
aXRlSnNvbkF0b21pYyhzdGF0ZVBhdGgsIHN0YXRlKTsKfQpmdW5jdGlvbiBzYW1lVXBkYXRlQXZh
aWxhYmxlKGEsIGIpIHsKCWlmIChhID09PSBiKSByZXR1cm4gdHJ1ZTsKCWlmICghYSB8fCAhYikg
cmV0dXJuIGZhbHNlOwoJcmV0dXJuIGEuY3VycmVudFZlcnNpb24gPT09IGIuY3VycmVudFZlcnNp
b24gJiYgYS5sYXRlc3RWZXJzaW9uID09PSBiLmxhdGVzdFZlcnNpb24gJiYgYS5jaGFubmVsID09
PSBiLmNoYW5uZWw7Cn0KZnVuY3Rpb24gc2V0VXBkYXRlQXZhaWxhYmxlQ2FjaGUocGFyYW1zKSB7
CglpZiAoc2FtZVVwZGF0ZUF2YWlsYWJsZSh1cGRhdGVBdmFpbGFibGVDYWNoZSwgcGFyYW1zLm5l
eHQpKSByZXR1cm47Cgl1cGRhdGVBdmFpbGFibGVDYWNoZSA9IHBhcmFtcy5uZXh0OwoJcGFyYW1z
Lm9uVXBkYXRlQXZhaWxhYmxlQ2hhbmdlPy4ocGFyYW1zLm5leHQpOwp9CmZ1bmN0aW9uIHJlc29s
dmVQZXJzaXN0ZWRVcGRhdGVBdmFpbGFibGUoc3RhdGUpIHsKCWNvbnN0IGxhdGVzdFZlcnNpb24g
PSBzdGF0ZS5sYXN0QXZhaWxhYmxlVmVyc2lvbj8udHJpbSgpOwoJaWYgKCFsYXRlc3RWZXJzaW9u
KSByZXR1cm4gbnVsbDsKCWNvbnN0IGNtcCA9IGNvbXBhcmVTZW12ZXJTdHJpbmdzKFZFUlNJT04s
IGxhdGVzdFZlcnNpb24pOwoJaWYgKGNtcCA9PSBudWxsIHx8IGNtcCA+PSAwKSByZXR1cm4gbnVs
bDsKCXJldHVybiB7CgkJY3VycmVudFZlcnNpb246IFZFUlNJT04sCgkJbGF0ZXN0VmVyc2lvbiwK
CQljaGFubmVsOiBzdGF0ZS5sYXN0QXZhaWxhYmxlVGFnPy50cmltKCkgfHwgInN0YWJsZSIKCX07
Cn0KZnVuY3Rpb24gcmVzb2x2ZVN0YWJsZUppdHRlck1zKHBhcmFtcykgewoJaWYgKHBhcmFtcy5q
aXR0ZXJXaW5kb3dNcyA8PSAwKSByZXR1cm4gMDsKCXJldHVybiBjcmVhdGVIYXNoKCJzaGEyNTYi
KS51cGRhdGUoYCR7cGFyYW1zLmluc3RhbGxJZH06JHtwYXJhbXMudmVyc2lvbn06JHtwYXJhbXMu
dGFnfWApLmRpZ2VzdCgpLnJlYWRVSW50MzJCRSgwKSAlIChNYXRoLmZsb29yKHBhcmFtcy5qaXR0
ZXJXaW5kb3dNcykgKyAxKTsKfQpmdW5jdGlvbiByZXNvbHZlU3RhYmxlQXV0b0FwcGx5QXRNcyhw
YXJhbXMpIHsKCWlmICghcGFyYW1zLm5leHRTdGF0ZS5hdXRvSW5zdGFsbElkKSBwYXJhbXMubmV4
dFN0YXRlLmF1dG9JbnN0YWxsSWQgPSBwYXJhbXMuc3RhdGUuYXV0b0luc3RhbGxJZD8udHJpbSgp
IHx8IHJhbmRvbVVVSUQoKTsKCWNvbnN0IGluc3RhbGxJZCA9IHBhcmFtcy5uZXh0U3RhdGUuYXV0
b0luc3RhbGxJZDsKCWlmICghKHBhcmFtcy5zdGF0ZS5hdXRvRmlyc3RTZWVuVmVyc2lvbiA9PT0g
cGFyYW1zLnZlcnNpb24gJiYgcGFyYW1zLnN0YXRlLmF1dG9GaXJzdFNlZW5UYWcgPT09IHBhcmFt
cy50YWcpKSB7CgkJcGFyYW1zLm5leHRTdGF0ZS5hdXRvRmlyc3RTZWVuVmVyc2lvbiA9IHBhcmFt
cy52ZXJzaW9uOwoJCXBhcmFtcy5uZXh0U3RhdGUuYXV0b0ZpcnN0U2VlblRhZyA9IHBhcmFtcy50
YWc7CgkJcGFyYW1zLm5leHRTdGF0ZS5hdXRvRmlyc3RTZWVuQXQgPSBuZXcgRGF0ZShwYXJhbXMu
bm93TXMpLnRvSVNPU3RyaW5nKCk7Cgl9IGVsc2UgewoJCXBhcmFtcy5uZXh0U3RhdGUuYXV0b0Zp
cnN0U2VlblZlcnNpb24gPSBwYXJhbXMuc3RhdGUuYXV0b0ZpcnN0U2VlblZlcnNpb247CgkJcGFy
YW1zLm5leHRTdGF0ZS5hdXRvRmlyc3RTZWVuVGFnID0gcGFyYW1zLnN0YXRlLmF1dG9GaXJzdFNl
ZW5UYWc7CgkJcGFyYW1zLm5leHRTdGF0ZS5hdXRvRmlyc3RTZWVuQXQgPSBwYXJhbXMuc3RhdGUu
YXV0b0ZpcnN0U2VlbkF0OwoJfQoJY29uc3QgZmlyc3RTZWVuTXMgPSBwYXJhbXMubmV4dFN0YXRl
LmF1dG9GaXJzdFNlZW5BdCA/IERhdGUucGFyc2UocGFyYW1zLm5leHRTdGF0ZS5hdXRvRmlyc3RT
ZWVuQXQpIDogcGFyYW1zLm5vd01zOwoJY29uc3QgYmFzZURlbGF5TXMgPSBNYXRoLm1heCgwLCBw
YXJhbXMuc3RhYmxlRGVsYXlIb3VycykgKiBPTkVfSE9VUl9NUyQxOwoJY29uc3Qgaml0dGVyV2lu
ZG93TXMgPSBNYXRoLm1heCgwLCBwYXJhbXMuc3RhYmxlSml0dGVySG91cnMpICogT05FX0hPVVJf
TVMkMTsKCWNvbnN0IGppdHRlck1zID0gcmVzb2x2ZVN0YWJsZUppdHRlck1zKHsKCQlpbnN0YWxs
SWQsCgkJdmVyc2lvbjogcGFyYW1zLnZlcnNpb24sCgkJdGFnOiBwYXJhbXMudGFnLAoJCWppdHRl
cldpbmRvd01zCgl9KTsKCXJldHVybiBmaXJzdFNlZW5NcyArIGJhc2VEZWxheU1zICsgaml0dGVy
TXM7Cn0KYXN5bmMgZnVuY3Rpb24gcnVuQXV0b1VwZGF0ZUNvbW1hbmQocGFyYW1zKSB7Cgljb25z
dCBiYXNlQXJncyA9IFsKCQkidXBkYXRlIiwKCQkiLS15ZXMiLAoJCSItLWNoYW5uZWwiLAoJCXBh
cmFtcy5jaGFubmVsLAoJCSItLWpzb24iCgldOwoJY29uc3QgZXhlY1BhdGggPSBwcm9jZXNzLmV4
ZWNQYXRoPy50cmltKCk7Cgljb25zdCBhcmd2MSA9IHByb2Nlc3MuYXJndlsxXT8udHJpbSgpOwoJ
Y29uc3QgbG93ZXJFeGVjQmFzZSA9IGV4ZWNQYXRoID8gcGF0aC5iYXNlbmFtZShleGVjUGF0aCku
dG9Mb3dlckNhc2UoKSA6ICIiOwoJY29uc3QgcnVudGltZUlzTm9kZU9yQnVuID0gbG93ZXJFeGVj
QmFzZSA9PT0gIm5vZGUiIHx8IGxvd2VyRXhlY0Jhc2UgPT09ICJub2RlLmV4ZSIgfHwgbG93ZXJF
eGVjQmFzZSA9PT0gImJ1biIgfHwgbG93ZXJFeGVjQmFzZSA9PT0gImJ1bi5leGUiOwoJY29uc3Qg
YXJndiA9IFtdOwoJaWYgKGV4ZWNQYXRoICYmIGFyZ3YxKSBhcmd2LnB1c2goZXhlY1BhdGgsIGFy
Z3YxLCAuLi5iYXNlQXJncyk7CgllbHNlIGlmIChleGVjUGF0aCAmJiAhcnVudGltZUlzTm9kZU9y
QnVuKSBhcmd2LnB1c2goZXhlY1BhdGgsIC4uLmJhc2VBcmdzKTsKCWVsc2UgaWYgKGV4ZWNQYXRo
ICYmIHBhcmFtcy5yb290KSB7CgkJY29uc3QgY2FuZGlkYXRlcyA9IFsKCQkJcGF0aC5qb2luKHBh
cmFtcy5yb290LCAiZGlzdCIsICJlbnRyeS5qcyIpLAoJCQlwYXRoLmpvaW4ocGFyYW1zLnJvb3Qs
ICJkaXN0IiwgImVudHJ5Lm1qcyIpLAoJCQlwYXRoLmpvaW4ocGFyYW1zLnJvb3QsICJkaXN0Iiwg
ImluZGV4LmpzIiksCgkJCXBhdGguam9pbihwYXJhbXMucm9vdCwgImRpc3QiLCAiaW5kZXgubWpz
IikKCQldOwoJCWZvciAoY29uc3QgY2FuZGlkYXRlIG9mIGNhbmRpZGF0ZXMpIHRyeSB7CgkJCWF3
YWl0IGZzJDEuYWNjZXNzKGNhbmRpZGF0ZSk7CgkJCWFyZ3YucHVzaChleGVjUGF0aCwgY2FuZGlk
YXRlLCAuLi5iYXNlQXJncyk7CgkJCWJyZWFrOwoJCX0gY2F0Y2gge30KCX0KCWlmIChhcmd2Lmxl
bmd0aCA9PT0gMCkgYXJndi5wdXNoKCJvcGVuY2xhdyIsIC4uLmJhc2VBcmdzKTsKCXRyeSB7CgkJ
Y29uc3QgcmVzID0gYXdhaXQgcnVuQ29tbWFuZFdpdGhUaW1lb3V0KGFyZ3YsIHsKCQkJdGltZW91
dE1zOiBwYXJhbXMudGltZW91dE1zLAoJCQllbnY6IHsgT1BFTkNMQVdfQVVUT19VUERBVEU6ICIx
IiB9CgkJfSk7CgkJcmV0dXJuIHsKCQkJb2s6IHJlcy5jb2RlID09PSAwLAoJCQljb2RlOiByZXMu
Y29kZSwKCQkJc3Rkb3V0OiByZXMuc3Rkb3V0LAoJCQlzdGRlcnI6IHJlcy5zdGRlcnIsCgkJCXJl
YXNvbjogcmVzLmNvZGUgPT09IDAgPyB2b2lkIDAgOiAibm9uLXplcm8tZXhpdCIKCQl9OwoJfSBj
YXRjaCAoZXJyKSB7CgkJcmV0dXJuIHsKCQkJb2s6IGZhbHNlLAoJCQljb2RlOiBudWxsLAoJCQly
ZWFzb246IFN0cmluZyhlcnIpCgkJfTsKCX0KfQpmdW5jdGlvbiBjbGVhckF1dG9TdGF0ZShuZXh0
U3RhdGUpIHsKCWRlbGV0ZSBuZXh0U3RhdGUuYXV0b0ZpcnN0U2VlblZlcnNpb247CglkZWxldGUg
bmV4dFN0YXRlLmF1dG9GaXJzdFNlZW5UYWc7CglkZWxldGUgbmV4dFN0YXRlLmF1dG9GaXJzdFNl
ZW5BdDsKfQphc3luYyBmdW5jdGlvbiBydW5HYXRld2F5VXBkYXRlQ2hlY2socGFyYW1zKSB7Cglp
ZiAoc2hvdWxkU2tpcENoZWNrKEJvb2xlYW4ocGFyYW1zLmFsbG93SW5UZXN0cykpKSByZXR1cm47
CglpZiAocGFyYW1zLmlzTml4TW9kZSkgcmV0dXJuOwoJY29uc3QgYXV0byA9IHJlc29sdmVBdXRv
VXBkYXRlUG9saWN5KHBhcmFtcy5jZmcpOwoJY29uc3Qgc2hvdWxkUnVuVXBkYXRlSGludHMgPSBw
YXJhbXMuY2ZnLnVwZGF0ZT8uY2hlY2tPblN0YXJ0ICE9PSBmYWxzZTsKCWlmICghc2hvdWxkUnVu
VXBkYXRlSGludHMgJiYgIWF1dG8uZW5hYmxlZCkgcmV0dXJuOwoJY29uc3Qgc3RhdGVQYXRoID0g
cGF0aC5qb2luKHJlc29sdmVTdGF0ZURpcigpLCBVUERBVEVfQ0hFQ0tfRklMRU5BTUUpOwoJY29u
c3Qgc3RhdGUgPSBhd2FpdCByZWFkU3RhdGUoc3RhdGVQYXRoKTsKCWNvbnN0IG5vdyA9IERhdGUu
bm93KCk7Cgljb25zdCBsYXN0Q2hlY2tlZEF0ID0gc3RhdGUubGFzdENoZWNrZWRBdCA/IERhdGUu
cGFyc2Uoc3RhdGUubGFzdENoZWNrZWRBdCkgOiBudWxsOwoJaWYgKHNob3VsZFJ1blVwZGF0ZUhp
bnRzKSBzZXRVcGRhdGVBdmFpbGFibGVDYWNoZSh7CgkJbmV4dDogcmVzb2x2ZVBlcnNpc3RlZFVw
ZGF0ZUF2YWlsYWJsZShzdGF0ZSksCgkJb25VcGRhdGVBdmFpbGFibGVDaGFuZ2U6IHBhcmFtcy5v
blVwZGF0ZUF2YWlsYWJsZUNoYW5nZQoJfSk7CgllbHNlIHNldFVwZGF0ZUF2YWlsYWJsZUNhY2hl
KHsKCQluZXh0OiBudWxsLAoJCW9uVXBkYXRlQXZhaWxhYmxlQ2hhbmdlOiBwYXJhbXMub25VcGRh
dGVBdmFpbGFibGVDaGFuZ2UKCX0pOwoJY29uc3QgY2hlY2tJbnRlcnZhbE1zID0gcmVzb2x2ZUNo
ZWNrSW50ZXJ2YWxNcyhwYXJhbXMuY2ZnKTsKCWlmIChsYXN0Q2hlY2tlZEF0ICYmIE51bWJlci5p
c0Zpbml0ZShsYXN0Q2hlY2tlZEF0KSkgewoJCWlmIChub3cgLSBsYXN0Q2hlY2tlZEF0IDwgY2hl
Y2tJbnRlcnZhbE1zKSByZXR1cm47Cgl9Cgljb25zdCByb290ID0gYXdhaXQgcmVzb2x2ZU9wZW5D
bGF3UGFja2FnZVJvb3QoewoJCW1vZHVsZVVybDogaW1wb3J0Lm1ldGEudXJsLAoJCWFyZ3YxOiBw
cm9jZXNzLmFyZ3ZbMV0sCgkJY3dkOiBwcm9jZXNzLmN3ZCgpCgl9KTsKCWNvbnN0IHN0YXR1cyA9
IGF3YWl0IGNoZWNrVXBkYXRlU3RhdHVzKHsKCQlyb290LAoJCXRpbWVvdXRNczogMjUwMCwKCQlm
ZXRjaEdpdDogZmFsc2UsCgkJaW5jbHVkZVJlZ2lzdHJ5OiBmYWxzZQoJfSk7Cgljb25zdCBuZXh0
U3RhdGUgPSB7CgkJLi4uc3RhdGUsCgkJbGFzdENoZWNrZWRBdDogbmV3IERhdGUobm93KS50b0lT
T1N0cmluZygpCgl9OwoJaWYgKHN0YXR1cy5pbnN0YWxsS2luZCAhPT0gInBhY2thZ2UiKSB7CgkJ
ZGVsZXRlIG5leHRTdGF0ZS5sYXN0QXZhaWxhYmxlVmVyc2lvbjsKCQlkZWxldGUgbmV4dFN0YXRl
Lmxhc3RBdmFpbGFibGVUYWc7CgkJY2xlYXJBdXRvU3RhdGUobmV4dFN0YXRlKTsKCQlzZXRVcGRh
dGVBdmFpbGFibGVDYWNoZSh7CgkJCW5leHQ6IG51bGwsCgkJCW9uVXBkYXRlQXZhaWxhYmxlQ2hh
bmdlOiBwYXJhbXMub25VcGRhdGVBdmFpbGFibGVDaGFuZ2UKCQl9KTsKCQlhd2FpdCB3cml0ZVN0
YXRlKHN0YXRlUGF0aCwgbmV4dFN0YXRlKTsKCQlyZXR1cm47Cgl9Cgljb25zdCBjaGFubmVsID0g
bm9ybWFsaXplVXBkYXRlQ2hhbm5lbChwYXJhbXMuY2ZnLnVwZGF0ZT8uY2hhbm5lbCkgPz8gInN0
YWJsZSI7Cgljb25zdCByZXNvbHZlZCA9IGF3YWl0IHJlc29sdmVOcG1DaGFubmVsVGFnKHsKCQlj
aGFubmVsLAoJCXRpbWVvdXRNczogMjUwMAoJfSk7Cgljb25zdCB0YWcgPSByZXNvbHZlZC50YWc7
CglpZiAoIXJlc29sdmVkLnZlcnNpb24pIHsKCQlhd2FpdCB3cml0ZVN0YXRlKHN0YXRlUGF0aCwg
bmV4dFN0YXRlKTsKCQlyZXR1cm47Cgl9Cgljb25zdCBjbXAgPSBjb21wYXJlU2VtdmVyU3RyaW5n
cyhWRVJTSU9OLCByZXNvbHZlZC52ZXJzaW9uKTsKCWlmIChjbXAgIT0gbnVsbCAmJiBjbXAgPCAw
KSB7CgkJY29uc3QgbmV4dEF2YWlsYWJsZSA9IHsKCQkJY3VycmVudFZlcnNpb246IFZFUlNJT04s
CgkJCWxhdGVzdFZlcnNpb246IHJlc29sdmVkLnZlcnNpb24sCgkJCWNoYW5uZWw6IHRhZwoJCX07
CgkJaWYgKHNob3VsZFJ1blVwZGF0ZUhpbnRzKSBzZXRVcGRhdGVBdmFpbGFibGVDYWNoZSh7CgkJ
CW5leHQ6IG5leHRBdmFpbGFibGUsCgkJCW9uVXBkYXRlQXZhaWxhYmxlQ2hhbmdlOiBwYXJhbXMu
b25VcGRhdGVBdmFpbGFibGVDaGFuZ2UKCQl9KTsKCQluZXh0U3RhdGUubGFzdEF2YWlsYWJsZVZl
cnNpb24gPSByZXNvbHZlZC52ZXJzaW9uOwoJCW5leHRTdGF0ZS5sYXN0QXZhaWxhYmxlVGFnID0g
dGFnOwoJCWNvbnN0IHNob3VsZE5vdGlmeSA9IHN0YXRlLmxhc3ROb3RpZmllZFZlcnNpb24gIT09
IHJlc29sdmVkLnZlcnNpb24gfHwgc3RhdGUubGFzdE5vdGlmaWVkVGFnICE9PSB0YWc7CgkJaWYg
KHNob3VsZFJ1blVwZGF0ZUhpbnRzICYmIHNob3VsZE5vdGlmeSkgewoJCQlwYXJhbXMubG9nLmlu
Zm8oYHVwZGF0ZSBhdmFpbGFibGUgKCR7dGFnfSk6IHYke3Jlc29sdmVkLnZlcnNpb259IChjdXJy
ZW50IHYke1ZFUlNJT059KS4gUnVuOiAke2Zvcm1hdENsaUNvbW1hbmQoIm9wZW5jbGF3IHVwZGF0
ZSIpfWApOwoJCQluZXh0U3RhdGUubGFzdE5vdGlmaWVkVmVyc2lvbiA9IHJlc29sdmVkLnZlcnNp
b247CgkJCW5leHRTdGF0ZS5sYXN0Tm90aWZpZWRUYWcgPSB0YWc7CgkJfQoJCWlmIChhdXRvLmVu
YWJsZWQgJiYgKGNoYW5uZWwgPT09ICJzdGFibGUiIHx8IGNoYW5uZWwgPT09ICJiZXRhIikpIHsK
CQkJY29uc3QgcnVuQXV0byA9IHBhcmFtcy5ydW5BdXRvVXBkYXRlID8/IHJ1bkF1dG9VcGRhdGVD
b21tYW5kOwoJCQljb25zdCBhdHRlbXB0SW50ZXJ2YWxNcyA9IGNoYW5uZWwgPT09ICJiZXRhIiA/
IE1hdGgubWF4KE9ORV9IT1VSX01TJDEgLyA0LCBNYXRoLmZsb29yKGF1dG8uYmV0YUNoZWNrSW50
ZXJ2YWxIb3VycyAqIE9ORV9IT1VSX01TJDEpKSA6IE9ORV9IT1VSX01TJDE7CgkJCWNvbnN0IGxh
c3RBdHRlbXB0QXQgPSBzdGF0ZS5hdXRvTGFzdEF0dGVtcHRBdCA/IERhdGUucGFyc2Uoc3RhdGUu
YXV0b0xhc3RBdHRlbXB0QXQpIDogbnVsbDsKCQkJY29uc3QgcmVjZW50QXR0ZW1wdEZvclNhbWVW
ZXJzaW9uID0gc3RhdGUuYXV0b0xhc3RBdHRlbXB0VmVyc2lvbiA9PT0gcmVzb2x2ZWQudmVyc2lv
biAmJiBsYXN0QXR0ZW1wdEF0ICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKGxhc3RBdHRlbXB0
QXQpICYmIG5vdyAtIGxhc3RBdHRlbXB0QXQgPCBhdHRlbXB0SW50ZXJ2YWxNczsKCQkJbGV0IGR1
ZU5vdyA9IGNoYW5uZWwgPT09ICJiZXRhIjsKCQkJbGV0IGFwcGx5QWZ0ZXJNcyA9IG51bGw7CgkJ
CWlmIChjaGFubmVsID09PSAic3RhYmxlIikgewoJCQkJYXBwbHlBZnRlck1zID0gcmVzb2x2ZVN0
YWJsZUF1dG9BcHBseUF0TXMoewoJCQkJCXN0YXRlLAoJCQkJCW5leHRTdGF0ZSwKCQkJCQlub3dN
czogbm93LAoJCQkJCXZlcnNpb246IHJlc29sdmVkLnZlcnNpb24sCgkJCQkJdGFnLAoJCQkJCXN0
YWJsZURlbGF5SG91cnM6IGF1dG8uc3RhYmxlRGVsYXlIb3VycywKCQkJCQlzdGFibGVKaXR0ZXJI
b3VyczogYXV0by5zdGFibGVKaXR0ZXJIb3VycwoJCQkJfSk7CgkJCQlkdWVOb3cgPSBub3cgPj0g
YXBwbHlBZnRlck1zOwoJCQl9CgkJCWlmICghZHVlTm93KSBwYXJhbXMubG9nLmluZm8oImF1dG8t
dXBkYXRlIGRlZmVycmVkIChzdGFibGUgcm9sbG91dCB3aW5kb3cgYWN0aXZlKSIsIHsKCQkJCXZl
cnNpb246IHJlc29sdmVkLnZlcnNpb24sCgkJCQl0YWcsCgkJCQlhcHBseUFmdGVyOiBhcHBseUFm
dGVyTXMgPyBuZXcgRGF0ZShhcHBseUFmdGVyTXMpLnRvSVNPU3RyaW5nKCkgOiB2b2lkIDAKCQkJ
fSk7CgkJCWVsc2UgaWYgKHJlY2VudEF0dGVtcHRGb3JTYW1lVmVyc2lvbikgcGFyYW1zLmxvZy5p
bmZvKCJhdXRvLXVwZGF0ZSBkZWZlcnJlZCAocmVjZW50IGF0dGVtcHQgZXhpc3RzKSIsIHsKCQkJ
CXZlcnNpb246IHJlc29sdmVkLnZlcnNpb24sCgkJCQl0YWcKCQkJfSk7CgkJCWVsc2UgewoJCQkJ
bmV4dFN0YXRlLmF1dG9MYXN0QXR0ZW1wdFZlcnNpb24gPSByZXNvbHZlZC52ZXJzaW9uOwoJCQkJ
bmV4dFN0YXRlLmF1dG9MYXN0QXR0ZW1wdEF0ID0gbmV3IERhdGUobm93KS50b0lTT1N0cmluZygp
OwoJCQkJY29uc3Qgb3V0Y29tZSA9IGF3YWl0IHJ1bkF1dG8oewoJCQkJCWNoYW5uZWwsCgkJCQkJ
dGltZW91dE1zOiBBVVRPX1VQREFURV9DT01NQU5EX1RJTUVPVVRfTVMsCgkJCQkJcm9vdDogcm9v
dCA/PyB2b2lkIDAKCQkJCX0pOwoJCQkJaWYgKG91dGNvbWUub2spIHsKCQkJCQluZXh0U3RhdGUu
YXV0b0xhc3RTdWNjZXNzVmVyc2lvbiA9IHJlc29sdmVkLnZlcnNpb247CgkJCQkJbmV4dFN0YXRl
LmF1dG9MYXN0U3VjY2Vzc0F0ID0gbmV3IERhdGUobm93KS50b0lTT1N0cmluZygpOwoJCQkJCXBh
cmFtcy5sb2cuaW5mbygiYXV0by11cGRhdGUgYXBwbGllZCIsIHsKCQkJCQkJY2hhbm5lbCwKCQkJ
CQkJdmVyc2lvbjogcmVzb2x2ZWQudmVyc2lvbiwKCQkJCQkJdGFnCgkJCQkJfSk7CgkJCQl9IGVs
c2UgcGFyYW1zLmxvZy5pbmZvKCJhdXRvLXVwZGF0ZSBhdHRlbXB0IGZhaWxlZCIsIHsKCQkJCQlj
aGFubmVsLAoJCQkJCXZlcnNpb246IHJlc29sdmVkLnZlcnNpb24sCgkJCQkJdGFnLAoJCQkJCXJl
YXNvbjogb3V0Y29tZS5yZWFzb24gPz8gYGV4aXQ6JHtvdXRjb21lLmNvZGV9YAoJCQkJfSk7CgkJ
CX0KCQl9Cgl9IGVsc2UgewoJCWRlbGV0ZSBuZXh0U3RhdGUubGFzdEF2YWlsYWJsZVZlcnNpb247
CgkJZGVsZXRlIG5leHRTdGF0ZS5sYXN0QXZhaWxhYmxlVGFnOwoJCWNsZWFyQXV0b1N0YXRlKG5l
eHRTdGF0ZSk7CgkJc2V0VXBkYXRlQXZhaWxhYmxlQ2FjaGUoewoJCQluZXh0OiBudWxsLAoJCQlv
blVwZGF0ZUF2YWlsYWJsZUNoYW5nZTogcGFyYW1zLm9uVXBkYXRlQXZhaWxhYmxlQ2hhbmdlCgkJ
fSk7Cgl9Cglhd2FpdCB3cml0ZVN0YXRlKHN0YXRlUGF0aCwgbmV4dFN0YXRlKTsKfQpmdW5jdGlv
biBzY2hlZHVsZUdhdGV3YXlVcGRhdGVDaGVjayhwYXJhbXMpIHsKCWxldCBzdG9wcGVkID0gZmFs
c2U7CglsZXQgdGltZXIgPSBudWxsOwoJbGV0IHJ1bm5pbmcgPSBmYWxzZTsKCWNvbnN0IHRpY2sg
PSBhc3luYyAoKSA9PiB7CgkJaWYgKHN0b3BwZWQgfHwgcnVubmluZykgcmV0dXJuOwoJCXJ1bm5p
bmcgPSB0cnVlOwoJCXRyeSB7CgkJCWF3YWl0IHJ1bkdhdGV3YXlVcGRhdGVDaGVjayhwYXJhbXMp
OwoJCX0gY2F0Y2gge30gZmluYWxseSB7CgkJCXJ1bm5pbmcgPSBmYWxzZTsKCQl9CgkJaWYgKHN0
b3BwZWQpIHJldHVybjsKCQljb25zdCBpbnRlcnZhbE1zID0gcmVzb2x2ZUNoZWNrSW50ZXJ2YWxN
cyhwYXJhbXMuY2ZnKTsKCQl0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gewoJCQl0aWNrKCk7CgkJ
fSwgaW50ZXJ2YWxNcyk7Cgl9OwoJdGljaygpOwoJcmV0dXJuICgpID0+IHsKCQlzdG9wcGVkID0g
dHJ1ZTsKCQlpZiAodGltZXIpIHsKCQkJY2xlYXJUaW1lb3V0KHRpbWVyKTsKCQkJdGltZXIgPSBu
dWxsOwoJCX0KCX07Cn0KLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvZ2F0ZXdheS9jaGFubmVs
LWhlYWx0aC1wb2xpY3kudHMKZnVuY3Rpb24gaXNNYW5hZ2VkQWNjb3VudChzbmFwc2hvdCkgewoJ
cmV0dXJuIHNuYXBzaG90LmVuYWJsZWQgIT09IGZhbHNlICYmIHNuYXBzaG90LmNvbmZpZ3VyZWQg
IT09IGZhbHNlOwp9CmNvbnN0IEJVU1lfQUNUSVZJVFlfU1RBTEVfVEhSRVNIT0xEX01TID0gMjUg
KiA2ZTQ7CmNvbnN0IERFRkFVTFRfQ0hBTk5FTF9TVEFMRV9FVkVOVF9USFJFU0hPTERfTVMgPSAz
MCAqIDZlNDsKY29uc3QgREVGQVVMVF9DSEFOTkVMX0NPTk5FQ1RfR1JBQ0VfTVMgPSAxMmU0Owpm
dW5jdGlvbiBldmFsdWF0ZUNoYW5uZWxIZWFsdGgoc25hcHNob3QsIHBvbGljeSkgewoJaWYgKCFp
c01hbmFnZWRBY2NvdW50KHNuYXBzaG90KSkgcmV0dXJuIHsKCQloZWFsdGh5OiB0cnVlLAoJCXJl
YXNvbjogInVubWFuYWdlZCIKCX07CglpZiAoIXNuYXBzaG90LnJ1bm5pbmcpIHJldHVybiB7CgkJ
aGVhbHRoeTogZmFsc2UsCgkJcmVhc29uOiAibm90LXJ1bm5pbmciCgl9OwoJY29uc3QgYWN0aXZl
UnVucyA9IHR5cGVvZiBzbmFwc2hvdC5hY3RpdmVSdW5zID09PSAibnVtYmVyIiAmJiBOdW1iZXIu
aXNGaW5pdGUoc25hcHNob3QuYWN0aXZlUnVucykgPyBNYXRoLm1heCgwLCBNYXRoLnRydW5jKHNu
YXBzaG90LmFjdGl2ZVJ1bnMpKSA6IDA7Cgljb25zdCBpc0J1c3kgPSBzbmFwc2hvdC5idXN5ID09
PSB0cnVlIHx8IGFjdGl2ZVJ1bnMgPiAwOwoJY29uc3QgbGFzdFN0YXJ0QXQgPSB0eXBlb2Ygc25h
cHNob3QubGFzdFN0YXJ0QXQgPT09ICJudW1iZXIiICYmIE51bWJlci5pc0Zpbml0ZShzbmFwc2hv
dC5sYXN0U3RhcnRBdCkgPyBzbmFwc2hvdC5sYXN0U3RhcnRBdCA6IG51bGw7Cgljb25zdCBsYXN0
UnVuQWN0aXZpdHlBdCA9IHR5cGVvZiBzbmFwc2hvdC5sYXN0UnVuQWN0aXZpdHlBdCA9PT0gIm51
bWJlciIgJiYgTnVtYmVyLmlzRmluaXRlKHNuYXBzaG90Lmxhc3RSdW5BY3Rpdml0eUF0KSA/IHNu
YXBzaG90Lmxhc3RSdW5BY3Rpdml0eUF0IDogbnVsbDsKCWNvbnN0IGJ1c3lTdGF0ZUluaXRpYWxp
emVkRm9yTGlmZWN5Y2xlID0gbGFzdFN0YXJ0QXQgPT0gbnVsbCB8fCBsYXN0UnVuQWN0aXZpdHlB
dCAhPSBudWxsICYmIGxhc3RSdW5BY3Rpdml0eUF0ID49IGxhc3RTdGFydEF0OwoJaWYgKGlzQnVz
eSkgaWYgKCFidXN5U3RhdGVJbml0aWFsaXplZEZvckxpZmVjeWNsZSkge30gZWxzZSB7CgkJaWYg
KChsYXN0UnVuQWN0aXZpdHlBdCA9PSBudWxsID8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIDog
TWF0aC5tYXgoMCwgcG9saWN5Lm5vdyAtIGxhc3RSdW5BY3Rpdml0eUF0KSkgPCBCVVNZX0FDVElW
SVRZX1NUQUxFX1RIUkVTSE9MRF9NUykgcmV0dXJuIHsKCQkJaGVhbHRoeTogdHJ1ZSwKCQkJcmVh
c29uOiAiYnVzeSIKCQl9OwoJCXJldHVybiB7CgkJCWhlYWx0aHk6IGZhbHNlLAoJCQlyZWFzb246
ICJzdHVjayIKCQl9OwoJfQoJaWYgKHNuYXBzaG90Lmxhc3RTdGFydEF0ICE9IG51bGwpIHsKCQlp
ZiAocG9saWN5Lm5vdyAtIHNuYXBzaG90Lmxhc3RTdGFydEF0IDwgcG9saWN5LmNoYW5uZWxDb25u
ZWN0R3JhY2VNcykgcmV0dXJuIHsKCQkJaGVhbHRoeTogdHJ1ZSwKCQkJcmVhc29uOiAic3RhcnR1
cC1jb25uZWN0LWdyYWNlIgoJCX07Cgl9CglpZiAoc25hcHNob3QuY29ubmVjdGVkID09PSBmYWxz
ZSkgcmV0dXJuIHsKCQloZWFsdGh5OiBmYWxzZSwKCQlyZWFzb246ICJkaXNjb25uZWN0ZWQiCgl9
OwoJaWYgKHBvbGljeS5jaGFubmVsSWQgIT09ICJ0ZWxlZ3JhbSIgJiYgc25hcHNob3QubW9kZSAh
PT0gIndlYmhvb2siICYmIHNuYXBzaG90LmNvbm5lY3RlZCA9PT0gdHJ1ZSAmJiBzbmFwc2hvdC5s
YXN0RXZlbnRBdCAhPSBudWxsKSB7CgkJaWYgKGxhc3RTdGFydEF0ICE9IG51bGwgJiYgc25hcHNo
b3QubGFzdEV2ZW50QXQgPCBsYXN0U3RhcnRBdCkgewoJCQlpZiAoTWF0aC5tYXgoMCwgcG9saWN5
Lm5vdyAtIGxhc3RTdGFydEF0KSA8PSBwb2xpY3kuc3RhbGVFdmVudFRocmVzaG9sZE1zKSByZXR1
cm4gewoJCQkJaGVhbHRoeTogdHJ1ZSwKCQkJCXJlYXNvbjogImhlYWx0aHkiCgkJCX07CgkJCXJl
dHVybiB7CgkJCQloZWFsdGh5OiBmYWxzZSwKCQkJCXJlYXNvbjogInN0YWxlLXNvY2tldCIKCQkJ
fTsKCQl9CgkJaWYgKHBvbGljeS5ub3cgLSBzbmFwc2hvdC5sYXN0RXZlbnRBdCA+IHBvbGljeS5z
dGFsZUV2ZW50VGhyZXNob2xkTXMpIHJldHVybiB7CgkJCWhlYWx0aHk6IGZhbHNlLAoJCQlyZWFz
b246ICJzdGFsZS1zb2NrZXQiCgkJfTsKCX0KCXJldHVybiB7CgkJaGVhbHRoeTogdHJ1ZSwKCQly
ZWFzb246ICJoZWFsdGh5IgoJfTsKfQpmdW5jdGlvbiByZXNvbHZlQ2hhbm5lbFJlc3RhcnRSZWFz
b24oc25hcHNob3QsIGV2YWx1YXRpb24pIHsKCWlmIChldmFsdWF0aW9uLnJlYXNvbiA9PT0gInN0
YWxlLXNvY2tldCIpIHJldHVybiAic3RhbGUtc29ja2V0IjsKCWlmIChldmFsdWF0aW9uLnJlYXNv
biA9PT0gIm5vdC1ydW5uaW5nIikgcmV0dXJuIHNuYXBzaG90LnJlY29ubmVjdEF0dGVtcHRzICYm
IHNuYXBzaG90LnJlY29ubmVjdEF0dGVtcHRzID49IDEwID8gImdhdmUtdXAiIDogInN0b3BwZWQi
OwoJaWYgKGV2YWx1YXRpb24ucmVhc29uID09PSAiZGlzY29ubmVjdGVkIikgcmV0dXJuICJkaXNj
b25uZWN0ZWQiOwoJcmV0dXJuICJzdHVjayI7Cn0KLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMv
Z2F0ZXdheS9jaGFubmVsLWhlYWx0aC1tb25pdG9yLnRzCmNvbnN0IGxvZyQ0ID0gY3JlYXRlU3Vi
c3lzdGVtTG9nZ2VyKCJnYXRld2F5L2hlYWx0aC1tb25pdG9yIik7CmNvbnN0IERFRkFVTFRfQ0hF
Q0tfSU5URVJWQUxfTVMgPSA1ICogNmU0Owpjb25zdCBERUZBVUxUX01PTklUT1JfU1RBUlRVUF9H
UkFDRV9NUyA9IDZlNDsKY29uc3QgREVGQVVMVF9DT09MRE9XTl9DWUNMRVMgPSAyOwpjb25zdCBE
RUZBVUxUX01BWF9SRVNUQVJUU19QRVJfSE9VUiA9IDEwOwpjb25zdCBPTkVfSE9VUl9NUyA9IDYw
ICogNmU0OwpmdW5jdGlvbiByZXNvbHZlVGltaW5nUG9saWN5KGRlcHMpIHsKCXJldHVybiB7CgkJ
bW9uaXRvclN0YXJ0dXBHcmFjZU1zOiBkZXBzLnRpbWluZz8ubW9uaXRvclN0YXJ0dXBHcmFjZU1z
ID8/IGRlcHMuc3RhcnR1cEdyYWNlTXMgPz8gREVGQVVMVF9NT05JVE9SX1NUQVJUVVBfR1JBQ0Vf
TVMsCgkJY2hhbm5lbENvbm5lY3RHcmFjZU1zOiBkZXBzLnRpbWluZz8uY2hhbm5lbENvbm5lY3RH
cmFjZU1zID8/IGRlcHMuY2hhbm5lbFN0YXJ0dXBHcmFjZU1zID8/IDEyZTQsCgkJc3RhbGVFdmVu
dFRocmVzaG9sZE1zOiBkZXBzLnRpbWluZz8uc3RhbGVFdmVudFRocmVzaG9sZE1zID8/IGRlcHMu
c3RhbGVFdmVudFRocmVzaG9sZE1zID8/IDE4ZTUKCX07Cn0KZnVuY3Rpb24gc3RhcnRDaGFubmVs
SGVhbHRoTW9uaXRvcihkZXBzKSB7Cgljb25zdCB7IGNoYW5uZWxNYW5hZ2VyLCBjaGVja0ludGVy
dmFsTXMgPSBERUZBVUxUX0NIRUNLX0lOVEVSVkFMX01TLCBjb29sZG93bkN5Y2xlcyA9IERFRkFV
TFRfQ09PTERPV05fQ1lDTEVTLCBtYXhSZXN0YXJ0c1BlckhvdXIgPSBERUZBVUxUX01BWF9SRVNU
QVJUU19QRVJfSE9VUiwgYWJvcnRTaWduYWwgfSA9IGRlcHM7Cgljb25zdCB0aW1pbmcgPSByZXNv
bHZlVGltaW5nUG9saWN5KGRlcHMpOwoJY29uc3QgY29vbGRvd25NcyA9IGNvb2xkb3duQ3ljbGVz
ICogY2hlY2tJbnRlcnZhbE1zOwoJY29uc3QgcmVzdGFydFJlY29yZHMgPSAvKiBAX19QVVJFX18g
Ki8gbmV3IE1hcCgpOwoJY29uc3Qgc3RhcnRlZEF0ID0gRGF0ZS5ub3coKTsKCWxldCBzdG9wcGVk
ID0gZmFsc2U7CglsZXQgY2hlY2tJbkZsaWdodCA9IGZhbHNlOwoJbGV0IHRpbWVyID0gbnVsbDsK
CWNvbnN0IHJLZXkgPSAoY2hhbm5lbElkLCBhY2NvdW50SWQpID0+IGAke2NoYW5uZWxJZH06JHth
Y2NvdW50SWR9YDsKCWZ1bmN0aW9uIHBydW5lT2xkUmVzdGFydHMocmVjb3JkLCBub3cpIHsKCQly
ZWNvcmQucmVzdGFydHNUaGlzSG91ciA9IHJlY29yZC5yZXN0YXJ0c1RoaXNIb3VyLmZpbHRlcigo
cikgPT4gbm93IC0gci5hdCA8IE9ORV9IT1VSX01TKTsKCX0KCWFzeW5jIGZ1bmN0aW9uIHJ1bkNo
ZWNrKCkgewoJCWlmIChzdG9wcGVkIHx8IGNoZWNrSW5GbGlnaHQpIHJldHVybjsKCQljaGVja0lu
RmxpZ2h0ID0gdHJ1ZTsKCQl0cnkgewoJCQljb25zdCBub3cgPSBEYXRlLm5vdygpOwoJCQlpZiAo
bm93IC0gc3RhcnRlZEF0IDwgdGltaW5nLm1vbml0b3JTdGFydHVwR3JhY2VNcykgcmV0dXJuOwoJ
CQljb25zdCBzbmFwc2hvdCA9IGNoYW5uZWxNYW5hZ2VyLmdldFJ1bnRpbWVTbmFwc2hvdCgpOwoJ
CQlmb3IgKGNvbnN0IFtjaGFubmVsSWQsIGFjY291bnRzXSBvZiBPYmplY3QuZW50cmllcyhzbmFw
c2hvdC5jaGFubmVsQWNjb3VudHMpKSB7CgkJCQlpZiAoIWFjY291bnRzKSBjb250aW51ZTsKCQkJ
CWZvciAoY29uc3QgW2FjY291bnRJZCwgc3RhdHVzXSBvZiBPYmplY3QuZW50cmllcyhhY2NvdW50
cykpIHsKCQkJCQlpZiAoIXN0YXR1cykgY29udGludWU7CgkJCQkJaWYgKGNoYW5uZWxNYW5hZ2Vy
LmlzTWFudWFsbHlTdG9wcGVkKGNoYW5uZWxJZCwgYWNjb3VudElkKSkgY29udGludWU7CgkJCQkJ
Y29uc3QgaGVhbHRoID0gZXZhbHVhdGVDaGFubmVsSGVhbHRoKHN0YXR1cywgewoJCQkJCQljaGFu
bmVsSWQsCgkJCQkJCW5vdywKCQkJCQkJc3RhbGVFdmVudFRocmVzaG9sZE1zOiB0aW1pbmcuc3Rh
bGVFdmVudFRocmVzaG9sZE1zLAoJCQkJCQljaGFubmVsQ29ubmVjdEdyYWNlTXM6IHRpbWluZy5j
aGFubmVsQ29ubmVjdEdyYWNlTXMKCQkJCQl9KTsKCQkJCQlpZiAoaGVhbHRoLmhlYWx0aHkpIGNv
bnRpbnVlOwoJCQkJCWNvbnN0IGtleSA9IHJLZXkoY2hhbm5lbElkLCBhY2NvdW50SWQpOwoJCQkJ
CWNvbnN0IHJlY29yZCA9IHJlc3RhcnRSZWNvcmRzLmdldChrZXkpID8/IHsKCQkJCQkJbGFzdFJl
c3RhcnRBdDogMCwKCQkJCQkJcmVzdGFydHNUaGlzSG91cjogW10KCQkJCQl9OwoJCQkJCWlmIChu
b3cgLSByZWNvcmQubGFzdFJlc3RhcnRBdCA8PSBjb29sZG93bk1zKSBjb250aW51ZTsKCQkJCQlw
cnVuZU9sZFJlc3RhcnRzKHJlY29yZCwgbm93KTsKCQkJCQlpZiAocmVjb3JkLnJlc3RhcnRzVGhp
c0hvdXIubGVuZ3RoID49IG1heFJlc3RhcnRzUGVySG91cikgewoJCQkJCQlsb2ckNC53YXJuPy4o
YFske2NoYW5uZWxJZH06JHthY2NvdW50SWR9XSBoZWFsdGgtbW9uaXRvcjogaGl0ICR7bWF4UmVz
dGFydHNQZXJIb3VyfSByZXN0YXJ0cy9ob3VyIGxpbWl0LCBza2lwcGluZ2ApOwoJCQkJCQljb250
aW51ZTsKCQkJCQl9CgkJCQkJY29uc3QgcmVhc29uID0gcmVzb2x2ZUNoYW5uZWxSZXN0YXJ0UmVh
c29uKHN0YXR1cywgaGVhbHRoKTsKCQkJCQlsb2ckNC5pbmZvPy4oYFske2NoYW5uZWxJZH06JHth
Y2NvdW50SWR9XSBoZWFsdGgtbW9uaXRvcjogcmVzdGFydGluZyAocmVhc29uOiAke3JlYXNvbn0p
YCk7CgkJCQkJdHJ5IHsKCQkJCQkJaWYgKHN0YXR1cy5ydW5uaW5nKSBhd2FpdCBjaGFubmVsTWFu
YWdlci5zdG9wQ2hhbm5lbChjaGFubmVsSWQsIGFjY291bnRJZCk7CgkJCQkJCWNoYW5uZWxNYW5h
Z2VyLnJlc2V0UmVzdGFydEF0dGVtcHRzKGNoYW5uZWxJZCwgYWNjb3VudElkKTsKCQkJCQkJYXdh
aXQgY2hhbm5lbE1hbmFnZXIuc3RhcnRDaGFubmVsKGNoYW5uZWxJZCwgYWNjb3VudElkKTsKCQkJ
CQkJcmVjb3JkLmxhc3RSZXN0YXJ0QXQgPSBub3c7CgkJCQkJCXJlY29yZC5yZXN0YXJ0c1RoaXNI
b3VyLnB1c2goeyBhdDogbm93IH0pOwoJCQkJCQlyZXN0YXJ0UmVjb3Jkcy5zZXQoa2V5LCByZWNv
cmQpOwoJCQkJCX0gY2F0Y2ggKGVycikgewoJCQkJCQlsb2ckNC5lcnJvcj8uKGBbJHtjaGFubmVs
SWR9OiR7YWNjb3VudElkfV0gaGVhbHRoLW1vbml0b3I6IHJlc3RhcnQgZmFpbGVkOiAke1N0cmlu
ZyhlcnIpfWApOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0gZmluYWxseSB7CgkJCWNoZWNrSW5GbGln
aHQgPSBmYWxzZTsKCQl9Cgl9CglmdW5jdGlvbiBzdG9wKCkgewoJCXN0b3BwZWQgPSB0cnVlOwoJ
CWlmICh0aW1lcikgewoJCQljbGVhckludGVydmFsKHRpbWVyKTsKCQkJdGltZXIgPSBudWxsOwoJ
CX0KCX0KCWlmIChhYm9ydFNpZ25hbD8uYWJvcnRlZCkgc3RvcHBlZCA9IHRydWU7CgllbHNlIHsK
CQlhYm9ydFNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLCBzdG9wLCB7IG9uY2U6IHRy
dWUgfSk7CgkJdGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB2b2lkIHJ1bkNoZWNrKCksIGNoZWNr
SW50ZXJ2YWxNcyk7CgkJaWYgKHR5cGVvZiB0aW1lciA9PT0gIm9iamVjdCIgJiYgInVucmVmIiBp
biB0aW1lcikgdGltZXIudW5yZWYoKTsKCQlsb2ckNC5pbmZvPy4oYHN0YXJ0ZWQgKGludGVydmFs
OiAke01hdGgucm91bmQoY2hlY2tJbnRlcnZhbE1zIC8gMWUzKX1zLCBzdGFydHVwLWdyYWNlOiAk
e01hdGgucm91bmQodGltaW5nLm1vbml0b3JTdGFydHVwR3JhY2VNcyAvIDFlMyl9cywgY2hhbm5l
bC1jb25uZWN0LWdyYWNlOiAke01hdGgucm91bmQodGltaW5nLmNoYW5uZWxDb25uZWN0R3JhY2VN
cyAvIDFlMyl9cylgKTsKCX0KCXJldHVybiB7IHN0b3AgfTsKfQovLyNlbmRyZWdpb24KLy8jcmVn
aW9uIHNyYy9nYXRld2F5L2NvbmZpZy1yZWxvYWQtcGxhbi50cwpjb25zdCBCQVNFX1JFTE9BRF9S
VUxFUyA9IFsKCXsKCQlwcmVmaXg6ICJnYXRld2F5LnJlbW90ZSIsCgkJa2luZDogIm5vbmUiCgl9
LAoJewoJCXByZWZpeDogImdhdGV3YXkucmVsb2FkIiwKCQlraW5kOiAibm9uZSIKCX0sCgl7CgkJ
cHJlZml4OiAiZ2F0ZXdheS5jaGFubmVsSGVhbHRoQ2hlY2tNaW51dGVzIiwKCQlraW5kOiAiaG90
IiwKCQlhY3Rpb25zOiBbInJlc3RhcnQtaGVhbHRoLW1vbml0b3IiXQoJfSwKCXsKCQlwcmVmaXg6
ICJkaWFnbm9zdGljcy5zdHVja1Nlc3Npb25XYXJuTXMiLAoJCWtpbmQ6ICJub25lIgoJfSwKCXsK
CQlwcmVmaXg6ICJob29rcy5nbWFpbCIsCgkJa2luZDogImhvdCIsCgkJYWN0aW9uczogWyJyZXN0
YXJ0LWdtYWlsLXdhdGNoZXIiXQoJfSwKCXsKCQlwcmVmaXg6ICJob29rcyIsCgkJa2luZDogImhv
dCIsCgkJYWN0aW9uczogWyJyZWxvYWQtaG9va3MiXQoJfSwKCXsKCQlwcmVmaXg6ICJhZ2VudHMu
ZGVmYXVsdHMuaGVhcnRiZWF0IiwKCQlraW5kOiAiaG90IiwKCQlhY3Rpb25zOiBbInJlc3RhcnQt
aGVhcnRiZWF0Il0KCX0sCgl7CgkJcHJlZml4OiAiYWdlbnRzLmRlZmF1bHRzLm1vZGVscyIsCgkJ
a2luZDogImhvdCIsCgkJYWN0aW9uczogWyJyZXN0YXJ0LWhlYXJ0YmVhdCJdCgl9LAoJewoJCXBy
ZWZpeDogImFnZW50cy5kZWZhdWx0cy5tb2RlbCIsCgkJa2luZDogImhvdCIsCgkJYWN0aW9uczog
WyJyZXN0YXJ0LWhlYXJ0YmVhdCJdCgl9LAoJewoJCXByZWZpeDogIm1vZGVscyIsCgkJa2luZDog
ImhvdCIsCgkJYWN0aW9uczogWyJyZXN0YXJ0LWhlYXJ0YmVhdCJdCgl9LAoJewoJCXByZWZpeDog
ImFnZW50LmhlYXJ0YmVhdCIsCgkJa2luZDogImhvdCIsCgkJYWN0aW9uczogWyJyZXN0YXJ0LWhl
YXJ0YmVhdCJdCgl9LAoJewoJCXByZWZpeDogImNyb24iLAoJCWtpbmQ6ICJob3QiLAoJCWFjdGlv
bnM6IFsicmVzdGFydC1jcm9uIl0KCX0sCgl7CgkJcHJlZml4OiAiYnJvd3NlciIsCgkJa2luZDog
ImhvdCIsCgkJYWN0aW9uczogWyJyZXN0YXJ0LWJyb3dzZXItY29udHJvbCJdCgl9Cl07CmNvbnN0
IEJBU0VfUkVMT0FEX1JVTEVTX1RBSUwgPSBbCgl7CgkJcHJlZml4OiAibWV0YSIsCgkJa2luZDog
Im5vbmUiCgl9LAoJewoJCXByZWZpeDogImlkZW50aXR5IiwKCQlraW5kOiAibm9uZSIKCX0sCgl7
CgkJcHJlZml4OiAid2l6YXJkIiwKCQlraW5kOiAibm9uZSIKCX0sCgl7CgkJcHJlZml4OiAibG9n
Z2luZyIsCgkJa2luZDogIm5vbmUiCgl9LAoJewoJCXByZWZpeDogImFnZW50cyIsCgkJa2luZDog
Im5vbmUiCgl9LAoJewoJCXByZWZpeDogInRvb2xzIiwKCQlraW5kOiAibm9uZSIKCX0sCgl7CgkJ
cHJlZml4OiAiYmluZGluZ3MiLAoJCWtpbmQ6ICJub25lIgoJfSwKCXsKCQlwcmVmaXg6ICJhdWRp
byIsCgkJa2luZDogIm5vbmUiCgl9LAoJewoJCXByZWZpeDogImFnZW50IiwKCQlraW5kOiAibm9u
ZSIKCX0sCgl7CgkJcHJlZml4OiAicm91dGluZyIsCgkJa2luZDogIm5vbmUiCgl9LAoJewoJCXBy
ZWZpeDogIm1lc3NhZ2VzIiwKCQlraW5kOiAibm9uZSIKCX0sCgl7CgkJcHJlZml4OiAic2Vzc2lv
biIsCgkJa2luZDogIm5vbmUiCgl9LAoJewoJCXByZWZpeDogInRhbGsiLAoJCWtpbmQ6ICJub25l
IgoJfSwKCXsKCQlwcmVmaXg6ICJza2lsbHMiLAoJCWtpbmQ6ICJub25lIgoJfSwKCXsKCQlwcmVm
aXg6ICJzZWNyZXRzIiwKCQlraW5kOiAibm9uZSIKCX0sCgl7CgkJcHJlZml4OiAicGx1Z2lucyIs
CgkJa2luZDogInJlc3RhcnQiCgl9LAoJewoJCXByZWZpeDogInVpIiwKCQlraW5kOiAibm9uZSIK
CX0sCgl7CgkJcHJlZml4OiAiZ2F0ZXdheSIsCgkJa2luZDogInJlc3RhcnQiCgl9LAoJewoJCXBy
ZWZpeDogImRpc2NvdmVyeSIsCgkJa2luZDogInJlc3RhcnQiCgl9LAoJewoJCXByZWZpeDogImNh
bnZhc0hvc3QiLAoJCWtpbmQ6ICJyZXN0YXJ0IgoJfQpdOwpsZXQgY2FjaGVkUmVsb2FkUnVsZXMg
PSBudWxsOwpsZXQgY2FjaGVkUmVnaXN0cnkgPSBudWxsOwpmdW5jdGlvbiBsaXN0UmVsb2FkUnVs
ZXMoKSB7Cgljb25zdCByZWdpc3RyeSA9IGdldEFjdGl2ZVBsdWdpblJlZ2lzdHJ5KCk7CglpZiAo
cmVnaXN0cnkgIT09IGNhY2hlZFJlZ2lzdHJ5KSB7CgkJY2FjaGVkUmVsb2FkUnVsZXMgPSBudWxs
OwoJCWNhY2hlZFJlZ2lzdHJ5ID0gcmVnaXN0cnk7Cgl9CglpZiAoY2FjaGVkUmVsb2FkUnVsZXMp
IHJldHVybiBjYWNoZWRSZWxvYWRSdWxlczsKCWNvbnN0IGNoYW5uZWxSZWxvYWRSdWxlcyA9IGxp
c3RDaGFubmVsUGx1Z2lucygpLmZsYXRNYXAoKHBsdWdpbikgPT4gWy4uLihwbHVnaW4ucmVsb2Fk
Py5jb25maWdQcmVmaXhlcyA/PyBbXSkubWFwKChwcmVmaXgpID0+ICh7CgkJcHJlZml4LAoJCWtp
bmQ6ICJob3QiLAoJCWFjdGlvbnM6IFtgcmVzdGFydC1jaGFubmVsOiR7cGx1Z2luLmlkfWBdCgl9
KSksIC4uLihwbHVnaW4ucmVsb2FkPy5ub29wUHJlZml4ZXMgPz8gW10pLm1hcCgocHJlZml4KSA9
PiAoewoJCXByZWZpeCwKCQlraW5kOiAibm9uZSIKCX0pKV0pOwoJY29uc3QgcnVsZXMgPSBbCgkJ
Li4uQkFTRV9SRUxPQURfUlVMRVMsCgkJLi4uY2hhbm5lbFJlbG9hZFJ1bGVzLAoJCS4uLkJBU0Vf
UkVMT0FEX1JVTEVTX1RBSUwKCV07CgljYWNoZWRSZWxvYWRSdWxlcyA9IHJ1bGVzOwoJcmV0dXJu
IHJ1bGVzOwp9CmZ1bmN0aW9uIG1hdGNoUnVsZShwYXRoKSB7Cglmb3IgKGNvbnN0IHJ1bGUgb2Yg
bGlzdFJlbG9hZFJ1bGVzKCkpIGlmIChwYXRoID09PSBydWxlLnByZWZpeCB8fCBwYXRoLnN0YXJ0
c1dpdGgoYCR7cnVsZS5wcmVmaXh9LmApKSByZXR1cm4gcnVsZTsKCXJldHVybiBudWxsOwp9CmZ1
bmN0aW9uIGJ1aWxkR2F0ZXdheVJlbG9hZFBsYW4oY2hhbmdlZFBhdGhzKSB7Cgljb25zdCBwbGFu
ID0gewoJCWNoYW5nZWRQYXRocywKCQlyZXN0YXJ0R2F0ZXdheTogZmFsc2UsCgkJcmVzdGFydFJl
YXNvbnM6IFtdLAoJCWhvdFJlYXNvbnM6IFtdLAoJCXJlbG9hZEhvb2tzOiBmYWxzZSwKCQlyZXN0
YXJ0R21haWxXYXRjaGVyOiBmYWxzZSwKCQlyZXN0YXJ0QnJvd3NlckNvbnRyb2w6IGZhbHNlLAoJ
CXJlc3RhcnRDcm9uOiBmYWxzZSwKCQlyZXN0YXJ0SGVhcnRiZWF0OiBmYWxzZSwKCQlyZXN0YXJ0
SGVhbHRoTW9uaXRvcjogZmFsc2UsCgkJcmVzdGFydENoYW5uZWxzOiAvKiBAX19QVVJFX18gKi8g
bmV3IFNldCgpLAoJCW5vb3BQYXRoczogW10KCX07Cgljb25zdCBhcHBseUFjdGlvbiA9IChhY3Rp
b24pID0+IHsKCQlpZiAoYWN0aW9uLnN0YXJ0c1dpdGgoInJlc3RhcnQtY2hhbm5lbDoiKSkgewoJ
CQljb25zdCBjaGFubmVsID0gYWN0aW9uLnNsaWNlKDE2KTsKCQkJcGxhbi5yZXN0YXJ0Q2hhbm5l
bHMuYWRkKGNoYW5uZWwpOwoJCQlyZXR1cm47CgkJfQoJCXN3aXRjaCAoYWN0aW9uKSB7CgkJCWNh
c2UgInJlbG9hZC1ob29rcyI6CgkJCQlwbGFuLnJlbG9hZEhvb2tzID0gdHJ1ZTsKCQkJCWJyZWFr
OwoJCQljYXNlICJyZXN0YXJ0LWdtYWlsLXdhdGNoZXIiOgoJCQkJcGxhbi5yZXN0YXJ0R21haWxX
YXRjaGVyID0gdHJ1ZTsKCQkJCWJyZWFrOwoJCQljYXNlICJyZXN0YXJ0LWJyb3dzZXItY29udHJv
bCI6CgkJCQlwbGFuLnJlc3RhcnRCcm93c2VyQ29udHJvbCA9IHRydWU7CgkJCQlicmVhazsKCQkJ
Y2FzZSAicmVzdGFydC1jcm9uIjoKCQkJCXBsYW4ucmVzdGFydENyb24gPSB0cnVlOwoJCQkJYnJl
YWs7CgkJCWNhc2UgInJlc3RhcnQtaGVhcnRiZWF0IjoKCQkJCXBsYW4ucmVzdGFydEhlYXJ0YmVh
dCA9IHRydWU7CgkJCQlicmVhazsKCQkJY2FzZSAicmVzdGFydC1oZWFsdGgtbW9uaXRvciI6CgkJ
CQlwbGFuLnJlc3RhcnRIZWFsdGhNb25pdG9yID0gdHJ1ZTsKCQkJCWJyZWFrOwoJCQlkZWZhdWx0
OiBicmVhazsKCQl9Cgl9OwoJZm9yIChjb25zdCBwYXRoIG9mIGNoYW5nZWRQYXRocykgewoJCWNv
bnN0IHJ1bGUgPSBtYXRjaFJ1bGUocGF0aCk7CgkJaWYgKCFydWxlKSB7CgkJCXBsYW4ucmVzdGFy
dEdhdGV3YXkgPSB0cnVlOwoJCQlwbGFuLnJlc3RhcnRSZWFzb25zLnB1c2gocGF0aCk7CgkJCWNv
bnRpbnVlOwoJCX0KCQlpZiAocnVsZS5raW5kID09PSAicmVzdGFydCIpIHsKCQkJcGxhbi5yZXN0
YXJ0R2F0ZXdheSA9IHRydWU7CgkJCXBsYW4ucmVzdGFydFJlYXNvbnMucHVzaChwYXRoKTsKCQkJ
Y29udGludWU7CgkJfQoJCWlmIChydWxlLmtpbmQgPT09ICJub25lIikgewoJCQlwbGFuLm5vb3BQ
YXRocy5wdXNoKHBhdGgpOwoJCQljb250aW51ZTsKCQl9CgkJcGxhbi5ob3RSZWFzb25zLnB1c2go
cGF0aCk7CgkJZm9yIChjb25zdCBhY3Rpb24gb2YgcnVsZS5hY3Rpb25zID8/IFtdKSBhcHBseUFj
dGlvbihhY3Rpb24pOwoJfQoJaWYgKHBsYW4ucmVzdGFydEdtYWlsV2F0Y2hlcikgcGxhbi5yZWxv
YWRIb29rcyA9IHRydWU7CglyZXR1cm4gcGxhbjsKfQovLyNlbmRyZWdpb24KLy8jcmVnaW9uIHNy
Yy9nYXRld2F5L2NvbmZpZy1yZWxvYWQudHMKY29uc3QgREVGQVVMVF9SRUxPQURfU0VUVElOR1Mg
PSB7Cgltb2RlOiAiaHlicmlkIiwKCWRlYm91bmNlTXM6IDMwMAp9Owpjb25zdCBNSVNTSU5HX0NP
TkZJR19SRVRSWV9ERUxBWV9NUyA9IDE1MDsKY29uc3QgTUlTU0lOR19DT05GSUdfTUFYX1JFVFJJ
RVMgPSAyOwpmdW5jdGlvbiBkaWZmQ29uZmlnUGF0aHMocHJldiwgbmV4dCwgcHJlZml4ID0gIiIp
IHsKCWlmIChwcmV2ID09PSBuZXh0KSByZXR1cm4gW107CglpZiAoaXNQbGFpbk9iamVjdChwcmV2
KSAmJiBpc1BsYWluT2JqZWN0KG5leHQpKSB7CgkJY29uc3Qga2V5cyA9IG5ldyBTZXQoWy4uLk9i
amVjdC5rZXlzKHByZXYpLCAuLi5PYmplY3Qua2V5cyhuZXh0KV0pOwoJCWNvbnN0IHBhdGhzID0g
W107CgkJZm9yIChjb25zdCBrZXkgb2Yga2V5cykgewoJCQljb25zdCBwcmV2VmFsdWUgPSBwcmV2
W2tleV07CgkJCWNvbnN0IG5leHRWYWx1ZSA9IG5leHRba2V5XTsKCQkJaWYgKHByZXZWYWx1ZSA9
PT0gdm9pZCAwICYmIG5leHRWYWx1ZSA9PT0gdm9pZCAwKSBjb250aW51ZTsKCQkJY29uc3QgY2hp
bGRQYXRocyA9IGRpZmZDb25maWdQYXRocyhwcmV2VmFsdWUsIG5leHRWYWx1ZSwgcHJlZml4ID8g
YCR7cHJlZml4fS4ke2tleX1gIDoga2V5KTsKCQkJaWYgKGNoaWxkUGF0aHMubGVuZ3RoID4gMCkg
cGF0aHMucHVzaCguLi5jaGlsZFBhdGhzKTsKCQl9CgkJcmV0dXJuIHBhdGhzOwoJfQoJaWYgKEFy
cmF5LmlzQXJyYXkocHJldikgJiYgQXJyYXkuaXNBcnJheShuZXh0KSkgewoJCWlmIChpc0RlZXBT
dHJpY3RFcXVhbChwcmV2LCBuZXh0KSkgcmV0dXJuIFtdOwoJfQoJcmV0dXJuIFtwcmVmaXggfHwg
Ijxyb290PiJdOwp9CmZ1bmN0aW9uIHJlc29sdmVHYXRld2F5UmVsb2FkU2V0dGluZ3MoY2ZnKSB7
Cgljb25zdCByYXdNb2RlID0gY2ZnLmdhdGV3YXk/LnJlbG9hZD8ubW9kZTsKCWNvbnN0IG1vZGUg
PSByYXdNb2RlID09PSAib2ZmIiB8fCByYXdNb2RlID09PSAicmVzdGFydCIgfHwgcmF3TW9kZSA9
PT0gImhvdCIgfHwgcmF3TW9kZSA9PT0gImh5YnJpZCIgPyByYXdNb2RlIDogREVGQVVMVF9SRUxP
QURfU0VUVElOR1MubW9kZTsKCWNvbnN0IGRlYm91bmNlUmF3ID0gY2ZnLmdhdGV3YXk/LnJlbG9h
ZD8uZGVib3VuY2VNczsKCXJldHVybiB7CgkJbW9kZSwKCQlkZWJvdW5jZU1zOiB0eXBlb2YgZGVi
b3VuY2VSYXcgPT09ICJudW1iZXIiICYmIE51bWJlci5pc0Zpbml0ZShkZWJvdW5jZVJhdykgPyBN
YXRoLm1heCgwLCBNYXRoLmZsb29yKGRlYm91bmNlUmF3KSkgOiBERUZBVUxUX1JFTE9BRF9TRVRU
SU5HUy5kZWJvdW5jZU1zCgl9Owp9CmZ1bmN0aW9uIHN0YXJ0R2F0ZXdheUNvbmZpZ1JlbG9hZGVy
KG9wdHMpIHsKCWxldCBjdXJyZW50Q29uZmlnID0gb3B0cy5pbml0aWFsQ29uZmlnOwoJbGV0IHNl
dHRpbmdzID0gcmVzb2x2ZUdhdGV3YXlSZWxvYWRTZXR0aW5ncyhjdXJyZW50Q29uZmlnKTsKCWxl
dCBkZWJvdW5jZVRpbWVyID0gbnVsbDsKCWxldCBwZW5kaW5nID0gZmFsc2U7CglsZXQgcnVubmlu
ZyA9IGZhbHNlOwoJbGV0IHN0b3BwZWQgPSBmYWxzZTsKCWxldCByZXN0YXJ0UXVldWVkID0gZmFs
c2U7CglsZXQgbWlzc2luZ0NvbmZpZ1JldHJpZXMgPSAwOwoJY29uc3Qgc2NoZWR1bGVBZnRlciA9
ICh3YWl0KSA9PiB7CgkJaWYgKHN0b3BwZWQpIHJldHVybjsKCQlpZiAoZGVib3VuY2VUaW1lcikg
Y2xlYXJUaW1lb3V0KGRlYm91bmNlVGltZXIpOwoJCWRlYm91bmNlVGltZXIgPSBzZXRUaW1lb3V0
KCgpID0+IHsKCQkJcnVuUmVsb2FkKCk7CgkJfSwgd2FpdCk7Cgl9OwoJY29uc3Qgc2NoZWR1bGUg
PSAoKSA9PiB7CgkJc2NoZWR1bGVBZnRlcihzZXR0aW5ncy5kZWJvdW5jZU1zKTsKCX07Cgljb25z
dCBxdWV1ZVJlc3RhcnQgPSAocGxhbiwgbmV4dENvbmZpZykgPT4gewoJCWlmIChyZXN0YXJ0UXVl
dWVkKSByZXR1cm47CgkJcmVzdGFydFF1ZXVlZCA9IHRydWU7CgkJKGFzeW5jICgpID0+IHsKCQkJ
dHJ5IHsKCQkJCWF3YWl0IG9wdHMub25SZXN0YXJ0KHBsYW4sIG5leHRDb25maWcpOwoJCQl9IGNh
dGNoIChlcnIpIHsKCQkJCXJlc3RhcnRRdWV1ZWQgPSBmYWxzZTsKCQkJCW9wdHMubG9nLmVycm9y
KGBjb25maWcgcmVzdGFydCBmYWlsZWQ6ICR7U3RyaW5nKGVycil9YCk7CgkJCX0KCQl9KSgpOwoJ
fTsKCWNvbnN0IGhhbmRsZU1pc3NpbmdTbmFwc2hvdCA9IChzbmFwc2hvdCkgPT4gewoJCWlmIChz
bmFwc2hvdC5leGlzdHMpIHsKCQkJbWlzc2luZ0NvbmZpZ1JldHJpZXMgPSAwOwoJCQlyZXR1cm4g
ZmFsc2U7CgkJfQoJCWlmIChtaXNzaW5nQ29uZmlnUmV0cmllcyA8IE1JU1NJTkdfQ09ORklHX01B
WF9SRVRSSUVTKSB7CgkJCW1pc3NpbmdDb25maWdSZXRyaWVzICs9IDE7CgkJCW9wdHMubG9nLmlu
Zm8oYGNvbmZpZyByZWxvYWQgcmV0cnkgKCR7bWlzc2luZ0NvbmZpZ1JldHJpZXN9LyR7TUlTU0lO
R19DT05GSUdfTUFYX1JFVFJJRVN9KTogY29uZmlnIGZpbGUgbm90IGZvdW5kYCk7CgkJCXNjaGVk
dWxlQWZ0ZXIoTUlTU0lOR19DT05GSUdfUkVUUllfREVMQVlfTVMpOwoJCQlyZXR1cm4gdHJ1ZTsK
CQl9CgkJb3B0cy5sb2cud2FybigiY29uZmlnIHJlbG9hZCBza2lwcGVkIChjb25maWcgZmlsZSBu
b3QgZm91bmQpIik7CgkJcmV0dXJuIHRydWU7Cgl9OwoJY29uc3QgaGFuZGxlSW52YWxpZFNuYXBz
aG90ID0gKHNuYXBzaG90KSA9PiB7CgkJaWYgKHNuYXBzaG90LnZhbGlkKSByZXR1cm4gZmFsc2U7
CgkJY29uc3QgaXNzdWVzID0gZm9ybWF0Q29uZmlnSXNzdWVMaW5lcyhzbmFwc2hvdC5pc3N1ZXMs
ICIiKS5qb2luKCIsICIpOwoJCW9wdHMubG9nLndhcm4oYGNvbmZpZyByZWxvYWQgc2tpcHBlZCAo
aW52YWxpZCBjb25maWcpOiAke2lzc3Vlc31gKTsKCQlyZXR1cm4gdHJ1ZTsKCX07Cgljb25zdCBh
cHBseVNuYXBzaG90ID0gYXN5bmMgKG5leHRDb25maWcpID0+IHsKCQljb25zdCBjaGFuZ2VkUGF0
aHMgPSBkaWZmQ29uZmlnUGF0aHMoY3VycmVudENvbmZpZywgbmV4dENvbmZpZyk7CgkJY3VycmVu
dENvbmZpZyA9IG5leHRDb25maWc7CgkJc2V0dGluZ3MgPSByZXNvbHZlR2F0ZXdheVJlbG9hZFNl
dHRpbmdzKG5leHRDb25maWcpOwoJCWlmIChjaGFuZ2VkUGF0aHMubGVuZ3RoID09PSAwKSByZXR1
cm47CgkJb3B0cy5sb2cuaW5mbyhgY29uZmlnIGNoYW5nZSBkZXRlY3RlZDsgZXZhbHVhdGluZyBy
ZWxvYWQgKCR7Y2hhbmdlZFBhdGhzLmpvaW4oIiwgIil9KWApOwoJCWNvbnN0IHBsYW4gPSBidWls
ZEdhdGV3YXlSZWxvYWRQbGFuKGNoYW5nZWRQYXRocyk7CgkJaWYgKHNldHRpbmdzLm1vZGUgPT09
ICJvZmYiKSB7CgkJCW9wdHMubG9nLmluZm8oImNvbmZpZyByZWxvYWQgZGlzYWJsZWQgKGdhdGV3
YXkucmVsb2FkLm1vZGU9b2ZmKSIpOwoJCQlyZXR1cm47CgkJfQoJCWlmIChzZXR0aW5ncy5tb2Rl
ID09PSAicmVzdGFydCIpIHsKCQkJcXVldWVSZXN0YXJ0KHBsYW4sIG5leHRDb25maWcpOwoJCQly
ZXR1cm47CgkJfQoJCWlmIChwbGFuLnJlc3RhcnRHYXRld2F5KSB7CgkJCWlmIChzZXR0aW5ncy5t
b2RlID09PSAiaG90IikgewoJCQkJb3B0cy5sb2cud2FybihgY29uZmlnIHJlbG9hZCByZXF1aXJl
cyBnYXRld2F5IHJlc3RhcnQ7IGhvdCBtb2RlIGlnbm9yaW5nICgke3BsYW4ucmVzdGFydFJlYXNv
bnMuam9pbigiLCAiKX0pYCk7CgkJCQlyZXR1cm47CgkJCX0KCQkJcXVldWVSZXN0YXJ0KHBsYW4s
IG5leHRDb25maWcpOwoJCQlyZXR1cm47CgkJfQoJCWF3YWl0IG9wdHMub25Ib3RSZWxvYWQocGxh
biwgbmV4dENvbmZpZyk7Cgl9OwoJY29uc3QgcnVuUmVsb2FkID0gYXN5bmMgKCkgPT4gewoJCWlm
IChzdG9wcGVkKSByZXR1cm47CgkJaWYgKHJ1bm5pbmcpIHsKCQkJcGVuZGluZyA9IHRydWU7CgkJ
CXJldHVybjsKCQl9CgkJcnVubmluZyA9IHRydWU7CgkJaWYgKGRlYm91bmNlVGltZXIpIHsKCQkJ
Y2xlYXJUaW1lb3V0KGRlYm91bmNlVGltZXIpOwoJCQlkZWJvdW5jZVRpbWVyID0gbnVsbDsKCQl9
CgkJdHJ5IHsKCQkJY29uc3Qgc25hcHNob3QgPSBhd2FpdCBvcHRzLnJlYWRTbmFwc2hvdCgpOwoJ
CQlpZiAoaGFuZGxlTWlzc2luZ1NuYXBzaG90KHNuYXBzaG90KSkgcmV0dXJuOwoJCQlpZiAoaGFu
ZGxlSW52YWxpZFNuYXBzaG90KHNuYXBzaG90KSkgcmV0dXJuOwoJCQlhd2FpdCBhcHBseVNuYXBz
aG90KHNuYXBzaG90LmNvbmZpZyk7CgkJfSBjYXRjaCAoZXJyKSB7CgkJCW9wdHMubG9nLmVycm9y
KGBjb25maWcgcmVsb2FkIGZhaWxlZDogJHtTdHJpbmcoZXJyKX1gKTsKCQl9IGZpbmFsbHkgewoJ
CQlydW5uaW5nID0gZmFsc2U7CgkJCWlmIChwZW5kaW5nKSB7CgkJCQlwZW5kaW5nID0gZmFsc2U7
CgkJCQlzY2hlZHVsZSgpOwoJCQl9CgkJfQoJfTsKCWNvbnN0IHdhdGNoZXIgPSBjaG9raWRhci53
YXRjaChvcHRzLndhdGNoUGF0aCwgewoJCWlnbm9yZUluaXRpYWw6IHRydWUsCgkJYXdhaXRXcml0
ZUZpbmlzaDogewoJCQlzdGFiaWxpdHlUaHJlc2hvbGQ6IDIwMCwKCQkJcG9sbEludGVydmFsOiA1
MAoJCX0sCgkJdXNlUG9sbGluZzogQm9vbGVhbihwcm9jZXNzLmVudi5WSVRFU1QpCgl9KTsKCXdh
dGNoZXIub24oImFkZCIsIHNjaGVkdWxlKTsKCXdhdGNoZXIub24oImNoYW5nZSIsIHNjaGVkdWxl
KTsKCXdhdGNoZXIub24oInVubGluayIsIHNjaGVkdWxlKTsKCWxldCB3YXRjaGVyQ2xvc2VkID0g
ZmFsc2U7Cgl3YXRjaGVyLm9uKCJlcnJvciIsIChlcnIpID0+IHsKCQlpZiAod2F0Y2hlckNsb3Nl
ZCkgcmV0dXJuOwoJCXdhdGNoZXJDbG9zZWQgPSB0cnVlOwoJCW9wdHMubG9nLndhcm4oYGNvbmZp
ZyB3YXRjaGVyIGVycm9yOiAke1N0cmluZyhlcnIpfWApOwoJCXdhdGNoZXIuY2xvc2UoKS5jYXRj
aCgoKSA9PiB7fSk7Cgl9KTsKCXJldHVybiB7IHN0b3A6IGFzeW5jICgpID0+IHsKCQlzdG9wcGVk
ID0gdHJ1ZTsKCQlpZiAoZGVib3VuY2VUaW1lcikgY2xlYXJUaW1lb3V0KGRlYm91bmNlVGltZXIp
OwoJCWRlYm91bmNlVGltZXIgPSBudWxsOwoJCXdhdGNoZXJDbG9zZWQgPSB0cnVlOwoJCWF3YWl0
IHdhdGNoZXIuY2xvc2UoKS5jYXRjaCgoKSA9PiB7fSk7Cgl9IH07Cn0KLy8jZW5kcmVnaW9uCi8v
I3JlZ2lvbiBzcmMvZ2F0ZXdheS9ldmVudHMudHMKY29uc3QgR0FURVdBWV9FVkVOVF9VUERBVEVf
QVZBSUxBQkxFID0gInVwZGF0ZS5hdmFpbGFibGUiOwovLyNlbmRyZWdpb24KLy8jcmVnaW9uIHNy
Yy9nYXRld2F5L2V4ZWMtYXBwcm92YWwtbWFuYWdlci50cwpjb25zdCBSRVNPTFZFRF9FTlRSWV9H
UkFDRV9NUyA9IDE1ZTM7CnZhciBFeGVjQXBwcm92YWxNYW5hZ2VyID0gY2xhc3MgewoJY29uc3Ry
dWN0b3IoKSB7CgkJdGhpcy5wZW5kaW5nID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKCX0K
CWNyZWF0ZShyZXF1ZXN0LCB0aW1lb3V0TXMsIGlkKSB7CgkJY29uc3Qgbm93ID0gRGF0ZS5ub3co
KTsKCQlyZXR1cm4gewoJCQlpZDogaWQgJiYgaWQudHJpbSgpLmxlbmd0aCA+IDAgPyBpZC50cmlt
KCkgOiByYW5kb21VVUlEKCksCgkJCXJlcXVlc3QsCgkJCWNyZWF0ZWRBdE1zOiBub3csCgkJCWV4
cGlyZXNBdE1zOiBub3cgKyB0aW1lb3V0TXMKCQl9OwoJfQoJLyoqCgkqIFJlZ2lzdGVyIGFuIGFw
cHJvdmFsIHJlY29yZCBhbmQgcmV0dXJuIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhl
IGRlY2lzaW9uIGlzIG1hZGUuCgkqIFRoaXMgc2VwYXJhdGVzIHJlZ2lzdHJhdGlvbiAoc3luY2hy
b25vdXMpIGZyb20gd2FpdGluZyAoYXN5bmMpLCBhbGxvd2luZyBjYWxsZXJzIHRvCgkqIGNvbmZp
cm0gcmVnaXN0cmF0aW9uIGJlZm9yZSB0aGUgZGVjaXNpb24gaXMgbWFkZS4KCSovCglyZWdpc3Rl
cihyZWNvcmQsIHRpbWVvdXRNcykgewoJCWNvbnN0IGV4aXN0aW5nID0gdGhpcy5wZW5kaW5nLmdl
dChyZWNvcmQuaWQpOwoJCWlmIChleGlzdGluZykgewoJCQlpZiAoZXhpc3RpbmcucmVjb3JkLnJl
c29sdmVkQXRNcyA9PT0gdm9pZCAwKSByZXR1cm4gZXhpc3RpbmcucHJvbWlzZTsKCQkJdGhyb3cg
bmV3IEVycm9yKGBhcHByb3ZhbCBpZCAnJHtyZWNvcmQuaWR9JyBhbHJlYWR5IHJlc29sdmVkYCk7
CgkJfQoJCWxldCByZXNvbHZlUHJvbWlzZTsKCQlsZXQgcmVqZWN0UHJvbWlzZTsKCQljb25zdCBw
cm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewoJCQlyZXNvbHZlUHJv
bWlzZSA9IHJlc29sdmU7CgkJCXJlamVjdFByb21pc2UgPSByZWplY3Q7CgkJfSk7CgkJY29uc3Qg
ZW50cnkgPSB7CgkJCXJlY29yZCwKCQkJcmVzb2x2ZTogcmVzb2x2ZVByb21pc2UsCgkJCXJlamVj
dDogcmVqZWN0UHJvbWlzZSwKCQkJdGltZXI6IG51bGwsCgkJCXByb21pc2UKCQl9OwoJCWVudHJ5
LnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7CgkJCXRoaXMuZXhwaXJlKHJlY29yZC5pZCk7CgkJ
fSwgdGltZW91dE1zKTsKCQl0aGlzLnBlbmRpbmcuc2V0KHJlY29yZC5pZCwgZW50cnkpOwoJCXJl
dHVybiBwcm9taXNlOwoJfQoJLyoqCgkqIEBkZXByZWNhdGVkIFVzZSByZWdpc3RlcigpIGluc3Rl
YWQgZm9yIGV4cGxpY2l0IHNlcGFyYXRpb24gb2YgcmVnaXN0cmF0aW9uIGFuZCB3YWl0aW5nLgoJ
Ki8KCWFzeW5jIHdhaXRGb3JEZWNpc2lvbihyZWNvcmQsIHRpbWVvdXRNcykgewoJCXJldHVybiB0
aGlzLnJlZ2lzdGVyKHJlY29yZCwgdGltZW91dE1zKTsKCX0KCXJlc29sdmUocmVjb3JkSWQsIGRl
Y2lzaW9uLCByZXNvbHZlZEJ5KSB7CgkJY29uc3QgcGVuZGluZyA9IHRoaXMucGVuZGluZy5nZXQo
cmVjb3JkSWQpOwoJCWlmICghcGVuZGluZykgcmV0dXJuIGZhbHNlOwoJCWlmIChwZW5kaW5nLnJl
Y29yZC5yZXNvbHZlZEF0TXMgIT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlOwoJCWNsZWFyVGltZW91
dChwZW5kaW5nLnRpbWVyKTsKCQlwZW5kaW5nLnJlY29yZC5yZXNvbHZlZEF0TXMgPSBEYXRlLm5v
dygpOwoJCXBlbmRpbmcucmVjb3JkLmRlY2lzaW9uID0gZGVjaXNpb247CgkJcGVuZGluZy5yZWNv
cmQucmVzb2x2ZWRCeSA9IHJlc29sdmVkQnkgPz8gbnVsbDsKCQlwZW5kaW5nLnJlc29sdmUoZGVj
aXNpb24pOwoJCXNldFRpbWVvdXQoKCkgPT4gewoJCQlpZiAodGhpcy5wZW5kaW5nLmdldChyZWNv
cmRJZCkgPT09IHBlbmRpbmcpIHRoaXMucGVuZGluZy5kZWxldGUocmVjb3JkSWQpOwoJCX0sIFJF
U09MVkVEX0VOVFJZX0dSQUNFX01TKTsKCQlyZXR1cm4gdHJ1ZTsKCX0KCWV4cGlyZShyZWNvcmRJ
ZCwgcmVzb2x2ZWRCeSkgewoJCWNvbnN0IHBlbmRpbmcgPSB0aGlzLnBlbmRpbmcuZ2V0KHJlY29y
ZElkKTsKCQlpZiAoIXBlbmRpbmcpIHJldHVybiBmYWxzZTsKCQlpZiAocGVuZGluZy5yZWNvcmQu
cmVzb2x2ZWRBdE1zICE9PSB2b2lkIDApIHJldHVybiBmYWxzZTsKCQljbGVhclRpbWVvdXQocGVu
ZGluZy50aW1lcik7CgkJcGVuZGluZy5yZWNvcmQucmVzb2x2ZWRBdE1zID0gRGF0ZS5ub3coKTsK
CQlwZW5kaW5nLnJlY29yZC5kZWNpc2lvbiA9IHZvaWQgMDsKCQlwZW5kaW5nLnJlY29yZC5yZXNv
bHZlZEJ5ID0gcmVzb2x2ZWRCeSA/PyBudWxsOwoJCXBlbmRpbmcucmVzb2x2ZShudWxsKTsKCQlz
ZXRUaW1lb3V0KCgpID0+IHsKCQkJaWYgKHRoaXMucGVuZGluZy5nZXQocmVjb3JkSWQpID09PSBw
ZW5kaW5nKSB0aGlzLnBlbmRpbmcuZGVsZXRlKHJlY29yZElkKTsKCQl9LCBSRVNPTFZFRF9FTlRS
WV9HUkFDRV9NUyk7CgkJcmV0dXJuIHRydWU7Cgl9CglnZXRTbmFwc2hvdChyZWNvcmRJZCkgewoJ
CXJldHVybiB0aGlzLnBlbmRpbmcuZ2V0KHJlY29yZElkKT8ucmVjb3JkID8/IG51bGw7Cgl9Cglj
b25zdW1lQWxsb3dPbmNlKHJlY29yZElkKSB7CgkJY29uc3QgZW50cnkgPSB0aGlzLnBlbmRpbmcu
Z2V0KHJlY29yZElkKTsKCQlpZiAoIWVudHJ5KSByZXR1cm4gZmFsc2U7CgkJY29uc3QgcmVjb3Jk
ID0gZW50cnkucmVjb3JkOwoJCWlmIChyZWNvcmQuZGVjaXNpb24gIT09ICJhbGxvdy1vbmNlIikg
cmV0dXJuIGZhbHNlOwoJCXJlY29yZC5kZWNpc2lvbiA9IHZvaWQgMDsKCQlyZXR1cm4gdHJ1ZTsK
CX0KCS8qKgoJKiBXYWl0IGZvciBkZWNpc2lvbiBvbiBhbiBhbHJlYWR5LXJlZ2lzdGVyZWQgYXBw
cm92YWwuCgkqIFJldHVybnMgdGhlIGRlY2lzaW9uIHByb21pc2UgaWYgdGhlIElEIGlzIHBlbmRp
bmcsIG51bGwgb3RoZXJ3aXNlLgoJKi8KCWF3YWl0RGVjaXNpb24ocmVjb3JkSWQpIHsKCQlyZXR1
cm4gdGhpcy5wZW5kaW5nLmdldChyZWNvcmRJZCk/LnByb21pc2UgPz8gbnVsbDsKCX0KCWxvb2t1
cFBlbmRpbmdJZChpbnB1dCkgewoJCWNvbnN0IG5vcm1hbGl6ZWQgPSBpbnB1dC50cmltKCk7CgkJ
aWYgKCFub3JtYWxpemVkKSByZXR1cm4geyBraW5kOiAibm9uZSIgfTsKCQljb25zdCBleGFjdCA9
IHRoaXMucGVuZGluZy5nZXQobm9ybWFsaXplZCk7CgkJaWYgKGV4YWN0KSByZXR1cm4gZXhhY3Qu
cmVjb3JkLnJlc29sdmVkQXRNcyA9PT0gdm9pZCAwID8gewoJCQlraW5kOiAiZXhhY3QiLAoJCQlp
ZDogbm9ybWFsaXplZAoJCX0gOiB7IGtpbmQ6ICJub25lIiB9OwoJCWNvbnN0IGxvd2VyUHJlZml4
ID0gbm9ybWFsaXplZC50b0xvd2VyQ2FzZSgpOwoJCWNvbnN0IG1hdGNoZXMgPSBbXTsKCQlmb3Ig
KGNvbnN0IFtpZCwgZW50cnldIG9mIHRoaXMucGVuZGluZy5lbnRyaWVzKCkpIHsKCQkJaWYgKGVu
dHJ5LnJlY29yZC5yZXNvbHZlZEF0TXMgIT09IHZvaWQgMCkgY29udGludWU7CgkJCWlmIChpZC50
b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgobG93ZXJQcmVmaXgpKSBtYXRjaGVzLnB1c2goaWQpOwoJ
CX0KCQlpZiAobWF0Y2hlcy5sZW5ndGggPT09IDEpIHJldHVybiB7CgkJCWtpbmQ6ICJwcmVmaXgi
LAoJCQlpZDogbWF0Y2hlc1swXQoJCX07CgkJaWYgKG1hdGNoZXMubGVuZ3RoID4gMSkgcmV0dXJu
IHsKCQkJa2luZDogImFtYmlndW91cyIsCgkJCWlkczogbWF0Y2hlcwoJCX07CgkJcmV0dXJuIHsg
a2luZDogIm5vbmUiIH07Cgl9Cn07Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dhdGV3YXkv
bm9kZS1yZWdpc3RyeS50cwp2YXIgTm9kZVJlZ2lzdHJ5ID0gY2xhc3MgewoJY29uc3RydWN0b3Io
KSB7CgkJdGhpcy5ub2Rlc0J5SWQgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwoJCXRoaXMu
bm9kZXNCeUNvbm4gPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwoJCXRoaXMucGVuZGluZ0lu
dm9rZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwoJfQoJcmVnaXN0ZXIoY2xpZW50LCBv
cHRzKSB7CgkJY29uc3QgY29ubmVjdCA9IGNsaWVudC5jb25uZWN0OwoJCWNvbnN0IG5vZGVJZCA9
IGNvbm5lY3QuZGV2aWNlPy5pZCA/PyBjb25uZWN0LmNsaWVudC5pZDsKCQljb25zdCBjYXBzID0g
QXJyYXkuaXNBcnJheShjb25uZWN0LmNhcHMpID8gY29ubmVjdC5jYXBzIDogW107CgkJY29uc3Qg
Y29tbWFuZHMgPSBBcnJheS5pc0FycmF5KGNvbm5lY3QuY29tbWFuZHMpID8gY29ubmVjdC5jb21t
YW5kcyA/PyBbXSA6IFtdOwoJCWNvbnN0IHBlcm1pc3Npb25zID0gdHlwZW9mIGNvbm5lY3QucGVy
bWlzc2lvbnMgPT09ICJvYmplY3QiID8gY29ubmVjdC5wZXJtaXNzaW9ucyA/PyB2b2lkIDAgOiB2
b2lkIDA7CgkJY29uc3QgcGF0aEVudiA9IHR5cGVvZiBjb25uZWN0LnBhdGhFbnYgPT09ICJzdHJp
bmciID8gY29ubmVjdC5wYXRoRW52IDogdm9pZCAwOwoJCWNvbnN0IHNlc3Npb24gPSB7CgkJCW5v
ZGVJZCwKCQkJY29ubklkOiBjbGllbnQuY29ubklkLAoJCQljbGllbnQsCgkJCWRpc3BsYXlOYW1l
OiBjb25uZWN0LmNsaWVudC5kaXNwbGF5TmFtZSwKCQkJcGxhdGZvcm06IGNvbm5lY3QuY2xpZW50
LnBsYXRmb3JtLAoJCQl2ZXJzaW9uOiBjb25uZWN0LmNsaWVudC52ZXJzaW9uLAoJCQljb3JlVmVy
c2lvbjogY29ubmVjdC5jb3JlVmVyc2lvbiwKCQkJdWlWZXJzaW9uOiBjb25uZWN0LnVpVmVyc2lv
biwKCQkJZGV2aWNlRmFtaWx5OiBjb25uZWN0LmNsaWVudC5kZXZpY2VGYW1pbHksCgkJCW1vZGVs
SWRlbnRpZmllcjogY29ubmVjdC5jbGllbnQubW9kZWxJZGVudGlmaWVyLAoJCQlyZW1vdGVJcDog
b3B0cy5yZW1vdGVJcCwKCQkJY2FwcywKCQkJY29tbWFuZHMsCgkJCXBlcm1pc3Npb25zLAoJCQlw
YXRoRW52LAoJCQljb25uZWN0ZWRBdE1zOiBEYXRlLm5vdygpCgkJfTsKCQl0aGlzLm5vZGVzQnlJ
ZC5zZXQobm9kZUlkLCBzZXNzaW9uKTsKCQl0aGlzLm5vZGVzQnlDb25uLnNldChjbGllbnQuY29u
bklkLCBub2RlSWQpOwoJCXJldHVybiBzZXNzaW9uOwoJfQoJdW5yZWdpc3Rlcihjb25uSWQpIHsK
CQljb25zdCBub2RlSWQgPSB0aGlzLm5vZGVzQnlDb25uLmdldChjb25uSWQpOwoJCWlmICghbm9k
ZUlkKSByZXR1cm4gbnVsbDsKCQl0aGlzLm5vZGVzQnlDb25uLmRlbGV0ZShjb25uSWQpOwoJCXRo
aXMubm9kZXNCeUlkLmRlbGV0ZShub2RlSWQpOwoJCWZvciAoY29uc3QgW2lkLCBwZW5kaW5nXSBv
ZiB0aGlzLnBlbmRpbmdJbnZva2VzLmVudHJpZXMoKSkgewoJCQlpZiAocGVuZGluZy5ub2RlSWQg
IT09IG5vZGVJZCkgY29udGludWU7CgkJCWNsZWFyVGltZW91dChwZW5kaW5nLnRpbWVyKTsKCQkJ
cGVuZGluZy5yZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihgbm9kZSBkaXNjb25uZWN0
ZWQgKCR7cGVuZGluZy5jb21tYW5kfSlgKSk7CgkJCXRoaXMucGVuZGluZ0ludm9rZXMuZGVsZXRl
KGlkKTsKCQl9CgkJcmV0dXJuIG5vZGVJZDsKCX0KCWxpc3RDb25uZWN0ZWQoKSB7CgkJcmV0dXJu
IFsuLi50aGlzLm5vZGVzQnlJZC52YWx1ZXMoKV07Cgl9CglnZXQobm9kZUlkKSB7CgkJcmV0dXJu
IHRoaXMubm9kZXNCeUlkLmdldChub2RlSWQpOwoJfQoJYXN5bmMgaW52b2tlKHBhcmFtcykgewoJ
CWNvbnN0IG5vZGUgPSB0aGlzLm5vZGVzQnlJZC5nZXQocGFyYW1zLm5vZGVJZCk7CgkJaWYgKCFu
b2RlKSByZXR1cm4gewoJCQlvazogZmFsc2UsCgkJCWVycm9yOiB7CgkJCQljb2RlOiAiTk9UX0NP
Tk5FQ1RFRCIsCgkJCQltZXNzYWdlOiAibm9kZSBub3QgY29ubmVjdGVkIgoJCQl9CgkJfTsKCQlj
b25zdCByZXF1ZXN0SWQgPSByYW5kb21VVUlEKCk7CgkJY29uc3QgcGF5bG9hZCA9IHsKCQkJaWQ6
IHJlcXVlc3RJZCwKCQkJbm9kZUlkOiBwYXJhbXMubm9kZUlkLAoJCQljb21tYW5kOiBwYXJhbXMu
Y29tbWFuZCwKCQkJcGFyYW1zSlNPTjogInBhcmFtcyIgaW4gcGFyYW1zICYmIHBhcmFtcy5wYXJh
bXMgIT09IHZvaWQgMCA/IEpTT04uc3RyaW5naWZ5KHBhcmFtcy5wYXJhbXMpIDogbnVsbCwKCQkJ
dGltZW91dE1zOiBwYXJhbXMudGltZW91dE1zLAoJCQlpZGVtcG90ZW5jeUtleTogcGFyYW1zLmlk
ZW1wb3RlbmN5S2V5CgkJfTsKCQlpZiAoIXRoaXMuc2VuZEV2ZW50VG9TZXNzaW9uKG5vZGUsICJu
b2RlLmludm9rZS5yZXF1ZXN0IiwgcGF5bG9hZCkpIHJldHVybiB7CgkJCW9rOiBmYWxzZSwKCQkJ
ZXJyb3I6IHsKCQkJCWNvZGU6ICJVTkFWQUlMQUJMRSIsCgkJCQltZXNzYWdlOiAiZmFpbGVkIHRv
IHNlbmQgaW52b2tlIHRvIG5vZGUiCgkJCX0KCQl9OwoJCWNvbnN0IHRpbWVvdXRNcyA9IHR5cGVv
ZiBwYXJhbXMudGltZW91dE1zID09PSAibnVtYmVyIiA/IHBhcmFtcy50aW1lb3V0TXMgOiAzZTQ7
CgkJcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKCQkJY29u
c3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHsKCQkJCXRoaXMucGVuZGluZ0ludm9rZXMuZGVs
ZXRlKHJlcXVlc3RJZCk7CgkJCQlyZXNvbHZlKHsKCQkJCQlvazogZmFsc2UsCgkJCQkJZXJyb3I6
IHsKCQkJCQkJY29kZTogIlRJTUVPVVQiLAoJCQkJCQltZXNzYWdlOiAibm9kZSBpbnZva2UgdGlt
ZWQgb3V0IgoJCQkJCX0KCQkJCX0pOwoJCQl9LCB0aW1lb3V0TXMpOwoJCQl0aGlzLnBlbmRpbmdJ
bnZva2VzLnNldChyZXF1ZXN0SWQsIHsKCQkJCW5vZGVJZDogcGFyYW1zLm5vZGVJZCwKCQkJCWNv
bW1hbmQ6IHBhcmFtcy5jb21tYW5kLAoJCQkJcmVzb2x2ZSwKCQkJCXJlamVjdCwKCQkJCXRpbWVy
CgkJCX0pOwoJCX0pOwoJfQoJaGFuZGxlSW52b2tlUmVzdWx0KHBhcmFtcykgewoJCWNvbnN0IHBl
bmRpbmcgPSB0aGlzLnBlbmRpbmdJbnZva2VzLmdldChwYXJhbXMuaWQpOwoJCWlmICghcGVuZGlu
ZykgcmV0dXJuIGZhbHNlOwoJCWlmIChwZW5kaW5nLm5vZGVJZCAhPT0gcGFyYW1zLm5vZGVJZCkg
cmV0dXJuIGZhbHNlOwoJCWNsZWFyVGltZW91dChwZW5kaW5nLnRpbWVyKTsKCQl0aGlzLnBlbmRp
bmdJbnZva2VzLmRlbGV0ZShwYXJhbXMuaWQpOwoJCXBlbmRpbmcucmVzb2x2ZSh7CgkJCW9rOiBw
YXJhbXMub2ssCgkJCXBheWxvYWQ6IHBhcmFtcy5wYXlsb2FkLAoJCQlwYXlsb2FkSlNPTjogcGFy
YW1zLnBheWxvYWRKU09OID8/IG51bGwsCgkJCWVycm9yOiBwYXJhbXMuZXJyb3IgPz8gbnVsbAoJ
CX0pOwoJCXJldHVybiB0cnVlOwoJfQoJc2VuZEV2ZW50KG5vZGVJZCwgZXZlbnQsIHBheWxvYWQp
IHsKCQljb25zdCBub2RlID0gdGhpcy5ub2Rlc0J5SWQuZ2V0KG5vZGVJZCk7CgkJaWYgKCFub2Rl
KSByZXR1cm4gZmFsc2U7CgkJcmV0dXJuIHRoaXMuc2VuZEV2ZW50VG9TZXNzaW9uKG5vZGUsIGV2
ZW50LCBwYXlsb2FkKTsKCX0KCXNlbmRFdmVudEludGVybmFsKG5vZGUsIGV2ZW50LCBwYXlsb2Fk
KSB7CgkJdHJ5IHsKCQkJbm9kZS5jbGllbnQuc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoewoJ
CQkJdHlwZTogImV2ZW50IiwKCQkJCWV2ZW50LAoJCQkJcGF5bG9hZAoJCQl9KSk7CgkJCXJldHVy
biB0cnVlOwoJCX0gY2F0Y2ggewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJfQoJc2VuZEV2ZW50VG9T
ZXNzaW9uKG5vZGUsIGV2ZW50LCBwYXlsb2FkKSB7CgkJcmV0dXJuIHRoaXMuc2VuZEV2ZW50SW50
ZXJuYWwobm9kZSwgZXZlbnQsIHBheWxvYWQpOwoJfQp9OwovLyNlbmRyZWdpb24KLy8jcmVnaW9u
IHNyYy9nYXRld2F5L3NlcnZlci1jaGFubmVscy50cwpjb25zdCBDSEFOTkVMX1JFU1RBUlRfUE9M
SUNZID0gewoJaW5pdGlhbE1zOiA1ZTMsCgltYXhNczogNSAqIDZlNCwKCWZhY3RvcjogMiwKCWpp
dHRlcjogLjEKfTsKY29uc3QgTUFYX1JFU1RBUlRfQVRURU1QVFMgPSAxMDsKZnVuY3Rpb24gY3Jl
YXRlUnVudGltZVN0b3JlKCkgewoJcmV0dXJuIHsKCQlhYm9ydHM6IC8qIEBfX1BVUkVfXyAqLyBu
ZXcgTWFwKCksCgkJdGFza3M6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksCgkJcnVudGltZXM6
IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkKCX07Cn0KZnVuY3Rpb24gaXNBY2NvdW50RW5hYmxl
ZChhY2NvdW50KSB7CglpZiAoIWFjY291bnQgfHwgdHlwZW9mIGFjY291bnQgIT09ICJvYmplY3Qi
KSByZXR1cm4gdHJ1ZTsKCXJldHVybiBhY2NvdW50LmVuYWJsZWQgIT09IGZhbHNlOwp9CmZ1bmN0
aW9uIHJlc29sdmVEZWZhdWx0UnVudGltZShjaGFubmVsSWQpIHsKCXJldHVybiBnZXRDaGFubmVs
UGx1Z2luKGNoYW5uZWxJZCk/LnN0YXR1cz8uZGVmYXVsdFJ1bnRpbWUgPz8geyBhY2NvdW50SWQ6
ICJkZWZhdWx0IiB9Owp9CmZ1bmN0aW9uIGNsb25lRGVmYXVsdFJ1bnRpbWUoY2hhbm5lbElkLCBh
Y2NvdW50SWQpIHsKCXJldHVybiB7CgkJLi4ucmVzb2x2ZURlZmF1bHRSdW50aW1lKGNoYW5uZWxJ
ZCksCgkJYWNjb3VudElkCgl9Owp9CmZ1bmN0aW9uIGNyZWF0ZUNoYW5uZWxNYW5hZ2VyKG9wdHMp
IHsKCWNvbnN0IHsgbG9hZENvbmZpZywgY2hhbm5lbExvZ3MsIGNoYW5uZWxSdW50aW1lRW52cywg
Y2hhbm5lbFJ1bnRpbWUgfSA9IG9wdHM7Cgljb25zdCBjaGFubmVsU3RvcmVzID0gLyogQF9fUFVS
RV9fICovIG5ldyBNYXAoKTsKCWNvbnN0IHJlc3RhcnRBdHRlbXB0cyA9IC8qIEBfX1BVUkVfXyAq
LyBuZXcgTWFwKCk7Cgljb25zdCBtYW51YWxseVN0b3BwZWQgPSAvKiBAX19QVVJFX18gKi8gbmV3
IFNldCgpOwoJY29uc3QgcmVzdGFydEtleSA9IChjaGFubmVsSWQsIGFjY291bnRJZCkgPT4gYCR7
Y2hhbm5lbElkfToke2FjY291bnRJZH1gOwoJY29uc3QgZ2V0U3RvcmUgPSAoY2hhbm5lbElkKSA9
PiB7CgkJY29uc3QgZXhpc3RpbmcgPSBjaGFubmVsU3RvcmVzLmdldChjaGFubmVsSWQpOwoJCWlm
IChleGlzdGluZykgcmV0dXJuIGV4aXN0aW5nOwoJCWNvbnN0IG5leHQgPSBjcmVhdGVSdW50aW1l
U3RvcmUoKTsKCQljaGFubmVsU3RvcmVzLnNldChjaGFubmVsSWQsIG5leHQpOwoJCXJldHVybiBu
ZXh0OwoJfTsKCWNvbnN0IGdldFJ1bnRpbWUgPSAoY2hhbm5lbElkLCBhY2NvdW50SWQpID0+IHsK
CQlyZXR1cm4gZ2V0U3RvcmUoY2hhbm5lbElkKS5ydW50aW1lcy5nZXQoYWNjb3VudElkKSA/PyBj
bG9uZURlZmF1bHRSdW50aW1lKGNoYW5uZWxJZCwgYWNjb3VudElkKTsKCX07Cgljb25zdCBzZXRS
dW50aW1lID0gKGNoYW5uZWxJZCwgYWNjb3VudElkLCBwYXRjaCkgPT4gewoJCWNvbnN0IHN0b3Jl
ID0gZ2V0U3RvcmUoY2hhbm5lbElkKTsKCQljb25zdCBuZXh0ID0gewoJCQkuLi5nZXRSdW50aW1l
KGNoYW5uZWxJZCwgYWNjb3VudElkKSwKCQkJLi4ucGF0Y2gsCgkJCWFjY291bnRJZAoJCX07CgkJ
c3RvcmUucnVudGltZXMuc2V0KGFjY291bnRJZCwgbmV4dCk7CgkJcmV0dXJuIG5leHQ7Cgl9OwoJ
Y29uc3Qgc3RhcnRDaGFubmVsSW50ZXJuYWwgPSBhc3luYyAoY2hhbm5lbElkLCBhY2NvdW50SWQs
IG9wdHMgPSB7fSkgPT4gewoJCWNvbnN0IHBsdWdpbiA9IGdldENoYW5uZWxQbHVnaW4oY2hhbm5l
bElkKTsKCQljb25zdCBzdGFydEFjY291bnQgPSBwbHVnaW4/LmdhdGV3YXk/LnN0YXJ0QWNjb3Vu
dDsKCQlpZiAoIXN0YXJ0QWNjb3VudCkgcmV0dXJuOwoJCWNvbnN0IHsgcHJlc2VydmVSZXN0YXJ0
QXR0ZW1wdHMgPSBmYWxzZSwgcHJlc2VydmVNYW51YWxTdG9wID0gZmFsc2UgfSA9IG9wdHM7CgkJ
Y29uc3QgY2ZnID0gbG9hZENvbmZpZygpOwoJCXJlc2V0RGlyZWN0b3J5Q2FjaGUoewoJCQljaGFu
bmVsOiBjaGFubmVsSWQsCgkJCWFjY291bnRJZAoJCX0pOwoJCWNvbnN0IHN0b3JlID0gZ2V0U3Rv
cmUoY2hhbm5lbElkKTsKCQljb25zdCBhY2NvdW50SWRzID0gYWNjb3VudElkID8gW2FjY291bnRJ
ZF0gOiBwbHVnaW4uY29uZmlnLmxpc3RBY2NvdW50SWRzKGNmZyk7CgkJaWYgKGFjY291bnRJZHMu
bGVuZ3RoID09PSAwKSByZXR1cm47CgkJYXdhaXQgUHJvbWlzZS5hbGwoYWNjb3VudElkcy5tYXAo
YXN5bmMgKGlkKSA9PiB7CgkJCWlmIChzdG9yZS50YXNrcy5oYXMoaWQpKSByZXR1cm47CgkJCWNv
bnN0IGFjY291bnQgPSBwbHVnaW4uY29uZmlnLnJlc29sdmVBY2NvdW50KGNmZywgaWQpOwoJCQlp
ZiAoIShwbHVnaW4uY29uZmlnLmlzRW5hYmxlZCA/IHBsdWdpbi5jb25maWcuaXNFbmFibGVkKGFj
Y291bnQsIGNmZykgOiBpc0FjY291bnRFbmFibGVkKGFjY291bnQpKSkgewoJCQkJc2V0UnVudGlt
ZShjaGFubmVsSWQsIGlkLCB7CgkJCQkJYWNjb3VudElkOiBpZCwKCQkJCQllbmFibGVkOiBmYWxz
ZSwKCQkJCQljb25maWd1cmVkOiB0cnVlLAoJCQkJCXJ1bm5pbmc6IGZhbHNlLAoJCQkJCXJlc3Rh
cnRQZW5kaW5nOiBmYWxzZSwKCQkJCQlsYXN0RXJyb3I6IHBsdWdpbi5jb25maWcuZGlzYWJsZWRS
ZWFzb24/LihhY2NvdW50LCBjZmcpID8/ICJkaXNhYmxlZCIKCQkJCX0pOwoJCQkJcmV0dXJuOwoJ
CQl9CgkJCWxldCBjb25maWd1cmVkID0gdHJ1ZTsKCQkJaWYgKHBsdWdpbi5jb25maWcuaXNDb25m
aWd1cmVkKSBjb25maWd1cmVkID0gYXdhaXQgcGx1Z2luLmNvbmZpZy5pc0NvbmZpZ3VyZWQoYWNj
b3VudCwgY2ZnKTsKCQkJaWYgKCFjb25maWd1cmVkKSB7CgkJCQlzZXRSdW50aW1lKGNoYW5uZWxJ
ZCwgaWQsIHsKCQkJCQlhY2NvdW50SWQ6IGlkLAoJCQkJCWVuYWJsZWQ6IHRydWUsCgkJCQkJY29u
ZmlndXJlZDogZmFsc2UsCgkJCQkJcnVubmluZzogZmFsc2UsCgkJCQkJcmVzdGFydFBlbmRpbmc6
IGZhbHNlLAoJCQkJCWxhc3RFcnJvcjogcGx1Z2luLmNvbmZpZy51bmNvbmZpZ3VyZWRSZWFzb24/
LihhY2NvdW50LCBjZmcpID8/ICJub3QgY29uZmlndXJlZCIKCQkJCX0pOwoJCQkJcmV0dXJuOwoJ
CQl9CgkJCWNvbnN0IHJLZXkgPSByZXN0YXJ0S2V5KGNoYW5uZWxJZCwgaWQpOwoJCQlpZiAoIXBy
ZXNlcnZlTWFudWFsU3RvcCkgbWFudWFsbHlTdG9wcGVkLmRlbGV0ZShyS2V5KTsKCQkJY29uc3Qg
YWJvcnQgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7CgkJCXN0b3JlLmFib3J0cy5zZXQoaWQsIGFi
b3J0KTsKCQkJaWYgKCFwcmVzZXJ2ZVJlc3RhcnRBdHRlbXB0cykgcmVzdGFydEF0dGVtcHRzLmRl
bGV0ZShyS2V5KTsKCQkJc2V0UnVudGltZShjaGFubmVsSWQsIGlkLCB7CgkJCQlhY2NvdW50SWQ6
IGlkLAoJCQkJZW5hYmxlZDogdHJ1ZSwKCQkJCWNvbmZpZ3VyZWQ6IHRydWUsCgkJCQlydW5uaW5n
OiB0cnVlLAoJCQkJcmVzdGFydFBlbmRpbmc6IGZhbHNlLAoJCQkJbGFzdFN0YXJ0QXQ6IERhdGUu
bm93KCksCgkJCQlsYXN0RXJyb3I6IG51bGwsCgkJCQlyZWNvbm5lY3RBdHRlbXB0czogcHJlc2Vy
dmVSZXN0YXJ0QXR0ZW1wdHMgPyByZXN0YXJ0QXR0ZW1wdHMuZ2V0KHJLZXkpID8/IDAgOiAwCgkJ
CX0pOwoJCQljb25zdCBsb2cgPSBjaGFubmVsTG9nc1tjaGFubmVsSWRdOwoJCQljb25zdCB0YXNr
ID0gc3RhcnRBY2NvdW50KHsKCQkJCWNmZywKCQkJCWFjY291bnRJZDogaWQsCgkJCQlhY2NvdW50
LAoJCQkJcnVudGltZTogY2hhbm5lbFJ1bnRpbWVFbnZzW2NoYW5uZWxJZF0sCgkJCQlhYm9ydFNp
Z25hbDogYWJvcnQuc2lnbmFsLAoJCQkJbG9nLAoJCQkJZ2V0U3RhdHVzOiAoKSA9PiBnZXRSdW50
aW1lKGNoYW5uZWxJZCwgaWQpLAoJCQkJc2V0U3RhdHVzOiAobmV4dCkgPT4gc2V0UnVudGltZShj
aGFubmVsSWQsIGlkLCBuZXh0KSwKCQkJCS4uLmNoYW5uZWxSdW50aW1lID8geyBjaGFubmVsUnVu
dGltZSB9IDoge30KCQkJfSk7CgkJCWNvbnN0IHRyYWNrZWRQcm9taXNlID0gUHJvbWlzZS5yZXNv
bHZlKHRhc2spLmNhdGNoKChlcnIpID0+IHsKCQkJCWNvbnN0IG1lc3NhZ2UgPSBmb3JtYXRFcnJv
ck1lc3NhZ2UoZXJyKTsKCQkJCXNldFJ1bnRpbWUoY2hhbm5lbElkLCBpZCwgewoJCQkJCWFjY291
bnRJZDogaWQsCgkJCQkJbGFzdEVycm9yOiBtZXNzYWdlCgkJCQl9KTsKCQkJCWxvZy5lcnJvcj8u
KGBbJHtpZH1dIGNoYW5uZWwgZXhpdGVkOiAke21lc3NhZ2V9YCk7CgkJCX0pLmZpbmFsbHkoKCkg
PT4gewoJCQkJc2V0UnVudGltZShjaGFubmVsSWQsIGlkLCB7CgkJCQkJYWNjb3VudElkOiBpZCwK
CQkJCQlydW5uaW5nOiBmYWxzZSwKCQkJCQlsYXN0U3RvcEF0OiBEYXRlLm5vdygpCgkJCQl9KTsK
CQkJfSkudGhlbihhc3luYyAoKSA9PiB7CgkJCQlpZiAobWFudWFsbHlTdG9wcGVkLmhhcyhyS2V5
KSkgcmV0dXJuOwoJCQkJY29uc3QgYXR0ZW1wdCA9IChyZXN0YXJ0QXR0ZW1wdHMuZ2V0KHJLZXkp
ID8/IDApICsgMTsKCQkJCXJlc3RhcnRBdHRlbXB0cy5zZXQocktleSwgYXR0ZW1wdCk7CgkJCQlp
ZiAoYXR0ZW1wdCA+IE1BWF9SRVNUQVJUX0FUVEVNUFRTKSB7CgkJCQkJc2V0UnVudGltZShjaGFu
bmVsSWQsIGlkLCB7CgkJCQkJCWFjY291bnRJZDogaWQsCgkJCQkJCXJlc3RhcnRQZW5kaW5nOiBm
YWxzZSwKCQkJCQkJcmVjb25uZWN0QXR0ZW1wdHM6IGF0dGVtcHQKCQkJCQl9KTsKCQkJCQlsb2cu
ZXJyb3I/LihgWyR7aWR9XSBnaXZpbmcgdXAgYWZ0ZXIgJHtNQVhfUkVTVEFSVF9BVFRFTVBUU30g
cmVzdGFydCBhdHRlbXB0c2ApOwoJCQkJCXJldHVybjsKCQkJCX0KCQkJCWNvbnN0IGRlbGF5TXMg
PSBjb21wdXRlQmFja29mZihDSEFOTkVMX1JFU1RBUlRfUE9MSUNZLCBhdHRlbXB0KTsKCQkJCWxv
Zy5pbmZvPy4oYFske2lkfV0gYXV0by1yZXN0YXJ0IGF0dGVtcHQgJHthdHRlbXB0fS8ke01BWF9S
RVNUQVJUX0FUVEVNUFRTfSBpbiAke01hdGgucm91bmQoZGVsYXlNcyAvIDFlMyl9c2ApOwoJCQkJ
c2V0UnVudGltZShjaGFubmVsSWQsIGlkLCB7CgkJCQkJYWNjb3VudElkOiBpZCwKCQkJCQlyZXN0
YXJ0UGVuZGluZzogdHJ1ZSwKCQkJCQlyZWNvbm5lY3RBdHRlbXB0czogYXR0ZW1wdAoJCQkJfSk7
CgkJCQl0cnkgewoJCQkJCWF3YWl0IHNsZWVwV2l0aEFib3J0KGRlbGF5TXMsIGFib3J0LnNpZ25h
bCk7CgkJCQkJaWYgKG1hbnVhbGx5U3RvcHBlZC5oYXMocktleSkpIHJldHVybjsKCQkJCQlpZiAo
c3RvcmUudGFza3MuZ2V0KGlkKSA9PT0gdHJhY2tlZFByb21pc2UpIHN0b3JlLnRhc2tzLmRlbGV0
ZShpZCk7CgkJCQkJaWYgKHN0b3JlLmFib3J0cy5nZXQoaWQpID09PSBhYm9ydCkgc3RvcmUuYWJv
cnRzLmRlbGV0ZShpZCk7CgkJCQkJYXdhaXQgc3RhcnRDaGFubmVsSW50ZXJuYWwoY2hhbm5lbElk
LCBpZCwgewoJCQkJCQlwcmVzZXJ2ZVJlc3RhcnRBdHRlbXB0czogdHJ1ZSwKCQkJCQkJcHJlc2Vy
dmVNYW51YWxTdG9wOiB0cnVlCgkJCQkJfSk7CgkJCQl9IGNhdGNoIHt9CgkJCX0pLmZpbmFsbHko
KCkgPT4gewoJCQkJaWYgKHN0b3JlLnRhc2tzLmdldChpZCkgPT09IHRyYWNrZWRQcm9taXNlKSBz
dG9yZS50YXNrcy5kZWxldGUoaWQpOwoJCQkJaWYgKHN0b3JlLmFib3J0cy5nZXQoaWQpID09PSBh
Ym9ydCkgc3RvcmUuYWJvcnRzLmRlbGV0ZShpZCk7CgkJCX0pOwoJCQlzdG9yZS50YXNrcy5zZXQo
aWQsIHRyYWNrZWRQcm9taXNlKTsKCQl9KSk7Cgl9OwoJY29uc3Qgc3RhcnRDaGFubmVsID0gYXN5
bmMgKGNoYW5uZWxJZCwgYWNjb3VudElkKSA9PiB7CgkJYXdhaXQgc3RhcnRDaGFubmVsSW50ZXJu
YWwoY2hhbm5lbElkLCBhY2NvdW50SWQpOwoJfTsKCWNvbnN0IHN0b3BDaGFubmVsID0gYXN5bmMg
KGNoYW5uZWxJZCwgYWNjb3VudElkKSA9PiB7CgkJY29uc3QgcGx1Z2luID0gZ2V0Q2hhbm5lbFBs
dWdpbihjaGFubmVsSWQpOwoJCWNvbnN0IHN0b3JlID0gZ2V0U3RvcmUoY2hhbm5lbElkKTsKCQlp
ZiAoIXBsdWdpbj8uZ2F0ZXdheT8uc3RvcEFjY291bnQgJiYgc3RvcmUuYWJvcnRzLnNpemUgPT09
IDAgJiYgc3RvcmUudGFza3Muc2l6ZSA9PT0gMCkgcmV0dXJuOwoJCWNvbnN0IGNmZyA9IGxvYWRD
b25maWcoKTsKCQljb25zdCBrbm93bklkcyA9IG5ldyBTZXQoWwoJCQkuLi5zdG9yZS5hYm9ydHMu
a2V5cygpLAoJCQkuLi5zdG9yZS50YXNrcy5rZXlzKCksCgkJCS4uLnBsdWdpbiA/IHBsdWdpbi5j
b25maWcubGlzdEFjY291bnRJZHMoY2ZnKSA6IFtdCgkJXSk7CgkJaWYgKGFjY291bnRJZCkgewoJ
CQlrbm93bklkcy5jbGVhcigpOwoJCQlrbm93bklkcy5hZGQoYWNjb3VudElkKTsKCQl9CgkJYXdh
aXQgUHJvbWlzZS5hbGwoQXJyYXkuZnJvbShrbm93bklkcy52YWx1ZXMoKSkubWFwKGFzeW5jIChp
ZCkgPT4gewoJCQljb25zdCBhYm9ydCA9IHN0b3JlLmFib3J0cy5nZXQoaWQpOwoJCQljb25zdCB0
YXNrID0gc3RvcmUudGFza3MuZ2V0KGlkKTsKCQkJaWYgKCFhYm9ydCAmJiAhdGFzayAmJiAhcGx1
Z2luPy5nYXRld2F5Py5zdG9wQWNjb3VudCkgcmV0dXJuOwoJCQltYW51YWxseVN0b3BwZWQuYWRk
KHJlc3RhcnRLZXkoY2hhbm5lbElkLCBpZCkpOwoJCQlhYm9ydD8uYWJvcnQoKTsKCQkJaWYgKHBs
dWdpbj8uZ2F0ZXdheT8uc3RvcEFjY291bnQpIHsKCQkJCWNvbnN0IGFjY291bnQgPSBwbHVnaW4u
Y29uZmlnLnJlc29sdmVBY2NvdW50KGNmZywgaWQpOwoJCQkJYXdhaXQgcGx1Z2luLmdhdGV3YXku
c3RvcEFjY291bnQoewoJCQkJCWNmZywKCQkJCQlhY2NvdW50SWQ6IGlkLAoJCQkJCWFjY291bnQs
CgkJCQkJcnVudGltZTogY2hhbm5lbFJ1bnRpbWVFbnZzW2NoYW5uZWxJZF0sCgkJCQkJYWJvcnRT
aWduYWw6IGFib3J0Py5zaWduYWwgPz8gbmV3IEFib3J0Q29udHJvbGxlcigpLnNpZ25hbCwKCQkJ
CQlsb2c6IGNoYW5uZWxMb2dzW2NoYW5uZWxJZF0sCgkJCQkJZ2V0U3RhdHVzOiAoKSA9PiBnZXRS
dW50aW1lKGNoYW5uZWxJZCwgaWQpLAoJCQkJCXNldFN0YXR1czogKG5leHQpID0+IHNldFJ1bnRp
bWUoY2hhbm5lbElkLCBpZCwgbmV4dCkKCQkJCX0pOwoJCQl9CgkJCXRyeSB7CgkJCQlhd2FpdCB0
YXNrOwoJCQl9IGNhdGNoIHt9CgkJCXN0b3JlLmFib3J0cy5kZWxldGUoaWQpOwoJCQlzdG9yZS50
YXNrcy5kZWxldGUoaWQpOwoJCQlzZXRSdW50aW1lKGNoYW5uZWxJZCwgaWQsIHsKCQkJCWFjY291
bnRJZDogaWQsCgkJCQlydW5uaW5nOiBmYWxzZSwKCQkJCXJlc3RhcnRQZW5kaW5nOiBmYWxzZSwK
CQkJCWxhc3RTdG9wQXQ6IERhdGUubm93KCkKCQkJfSk7CgkJfSkpOwoJfTsKCWNvbnN0IHN0YXJ0
Q2hhbm5lbHMgPSBhc3luYyAoKSA9PiB7CgkJZm9yIChjb25zdCBwbHVnaW4gb2YgbGlzdENoYW5u
ZWxQbHVnaW5zKCkpIGF3YWl0IHN0YXJ0Q2hhbm5lbChwbHVnaW4uaWQpOwoJfTsKCWNvbnN0IG1h
cmtDaGFubmVsTG9nZ2VkT3V0ID0gKGNoYW5uZWxJZCwgY2xlYXJlZCwgYWNjb3VudElkKSA9PiB7
CgkJY29uc3QgcGx1Z2luID0gZ2V0Q2hhbm5lbFBsdWdpbihjaGFubmVsSWQpOwoJCWlmICghcGx1
Z2luKSByZXR1cm47CgkJY29uc3QgY2ZnID0gbG9hZENvbmZpZygpOwoJCWNvbnN0IHJlc29sdmVk
SWQgPSBhY2NvdW50SWQgPz8gcmVzb2x2ZUNoYW5uZWxEZWZhdWx0QWNjb3VudElkKHsKCQkJcGx1
Z2luLAoJCQljZmcKCQl9KTsKCQljb25zdCBjdXJyZW50ID0gZ2V0UnVudGltZShjaGFubmVsSWQs
IHJlc29sdmVkSWQpOwoJCWNvbnN0IG5leHQgPSB7CgkJCWFjY291bnRJZDogcmVzb2x2ZWRJZCwK
CQkJcnVubmluZzogZmFsc2UsCgkJCXJlc3RhcnRQZW5kaW5nOiBmYWxzZSwKCQkJbGFzdEVycm9y
OiBjbGVhcmVkID8gImxvZ2dlZCBvdXQiIDogY3VycmVudC5sYXN0RXJyb3IKCQl9OwoJCWlmICh0
eXBlb2YgY3VycmVudC5jb25uZWN0ZWQgPT09ICJib29sZWFuIikgbmV4dC5jb25uZWN0ZWQgPSBm
YWxzZTsKCQlzZXRSdW50aW1lKGNoYW5uZWxJZCwgcmVzb2x2ZWRJZCwgbmV4dCk7Cgl9OwoJY29u
c3QgZ2V0UnVudGltZVNuYXBzaG90ID0gKCkgPT4gewoJCWNvbnN0IGNmZyA9IGxvYWRDb25maWco
KTsKCQljb25zdCBjaGFubmVscyA9IHt9OwoJCWNvbnN0IGNoYW5uZWxBY2NvdW50cyA9IHt9OwoJ
CWZvciAoY29uc3QgcGx1Z2luIG9mIGxpc3RDaGFubmVsUGx1Z2lucygpKSB7CgkJCWNvbnN0IHN0
b3JlID0gZ2V0U3RvcmUocGx1Z2luLmlkKTsKCQkJY29uc3QgYWNjb3VudElkcyA9IHBsdWdpbi5j
b25maWcubGlzdEFjY291bnRJZHMoY2ZnKTsKCQkJY29uc3QgZGVmYXVsdEFjY291bnRJZCA9IHJl
c29sdmVDaGFubmVsRGVmYXVsdEFjY291bnRJZCh7CgkJCQlwbHVnaW4sCgkJCQljZmcsCgkJCQlh
Y2NvdW50SWRzCgkJCX0pOwoJCQljb25zdCBhY2NvdW50cyA9IHt9OwoJCQlmb3IgKGNvbnN0IGlk
IG9mIGFjY291bnRJZHMpIHsKCQkJCWNvbnN0IGFjY291bnQgPSBwbHVnaW4uY29uZmlnLnJlc29s
dmVBY2NvdW50KGNmZywgaWQpOwoJCQkJY29uc3QgZW5hYmxlZCA9IHBsdWdpbi5jb25maWcuaXNF
bmFibGVkID8gcGx1Z2luLmNvbmZpZy5pc0VuYWJsZWQoYWNjb3VudCwgY2ZnKSA6IGlzQWNjb3Vu
dEVuYWJsZWQoYWNjb3VudCk7CgkJCQljb25zdCBjb25maWd1cmVkID0gKHBsdWdpbi5jb25maWcu
ZGVzY3JpYmVBY2NvdW50Py4oYWNjb3VudCwgY2ZnKSk/LmNvbmZpZ3VyZWQ7CgkJCQljb25zdCBu
ZXh0ID0gewoJCQkJCS4uLnN0b3JlLnJ1bnRpbWVzLmdldChpZCkgPz8gY2xvbmVEZWZhdWx0UnVu
dGltZShwbHVnaW4uaWQsIGlkKSwKCQkJCQlhY2NvdW50SWQ6IGlkCgkJCQl9OwoJCQkJbmV4dC5l
bmFibGVkID0gZW5hYmxlZDsKCQkJCW5leHQuY29uZmlndXJlZCA9IHR5cGVvZiBjb25maWd1cmVk
ID09PSAiYm9vbGVhbiIgPyBjb25maWd1cmVkIDogbmV4dC5jb25maWd1cmVkID8/IHRydWU7CgkJ
CQlpZiAoIW5leHQucnVubmluZykgewoJCQkJCWlmICghZW5hYmxlZCkgbmV4dC5sYXN0RXJyb3Ig
Pz89IHBsdWdpbi5jb25maWcuZGlzYWJsZWRSZWFzb24/LihhY2NvdW50LCBjZmcpID8/ICJkaXNh
YmxlZCI7CgkJCQkJZWxzZSBpZiAoY29uZmlndXJlZCA9PT0gZmFsc2UpIG5leHQubGFzdEVycm9y
ID8/PSBwbHVnaW4uY29uZmlnLnVuY29uZmlndXJlZFJlYXNvbj8uKGFjY291bnQsIGNmZykgPz8g
Im5vdCBjb25maWd1cmVkIjsKCQkJCX0KCQkJCWFjY291bnRzW2lkXSA9IG5leHQ7CgkJCX0KCQkJ
Y29uc3QgZGVmYXVsdEFjY291bnQgPSBhY2NvdW50c1tkZWZhdWx0QWNjb3VudElkXSA/PyBjbG9u
ZURlZmF1bHRSdW50aW1lKHBsdWdpbi5pZCwgZGVmYXVsdEFjY291bnRJZCk7CgkJCWNoYW5uZWxz
W3BsdWdpbi5pZF0gPSBkZWZhdWx0QWNjb3VudDsKCQkJY2hhbm5lbEFjY291bnRzW3BsdWdpbi5p
ZF0gPSBhY2NvdW50czsKCQl9CgkJcmV0dXJuIHsKCQkJY2hhbm5lbHMsCgkJCWNoYW5uZWxBY2Nv
dW50cwoJCX07Cgl9OwoJY29uc3QgaXNNYW51YWxseVN0b3BwZWRfID0gKGNoYW5uZWxJZCwgYWNj
b3VudElkKSA9PiB7CgkJcmV0dXJuIG1hbnVhbGx5U3RvcHBlZC5oYXMocmVzdGFydEtleShjaGFu
bmVsSWQsIGFjY291bnRJZCkpOwoJfTsKCWNvbnN0IHJlc2V0UmVzdGFydEF0dGVtcHRzXyA9IChj
aGFubmVsSWQsIGFjY291bnRJZCkgPT4gewoJCXJlc3RhcnRBdHRlbXB0cy5kZWxldGUocmVzdGFy
dEtleShjaGFubmVsSWQsIGFjY291bnRJZCkpOwoJfTsKCXJldHVybiB7CgkJZ2V0UnVudGltZVNu
YXBzaG90LAoJCXN0YXJ0Q2hhbm5lbHMsCgkJc3RhcnRDaGFubmVsLAoJCXN0b3BDaGFubmVsLAoJ
CW1hcmtDaGFubmVsTG9nZ2VkT3V0LAoJCWlzTWFudWFsbHlTdG9wcGVkOiBpc01hbnVhbGx5U3Rv
cHBlZF8sCgkJcmVzZXRSZXN0YXJ0QXR0ZW1wdHM6IHJlc2V0UmVzdGFydEF0dGVtcHRzXwoJfTsK
fQovLyNlbmRyZWdpb24KLy8jcmVnaW9uIHNyYy9nYXRld2F5L3NlcnZlci1jaGF0LnRzCmZ1bmN0
aW9uIHJlc29sdmVIZWFydGJlYXRBY2tNYXhDaGFycyQxKCkgewoJdHJ5IHsKCQljb25zdCBjZmcg
PSBsb2FkQ29uZmlnKCk7CgkJcmV0dXJuIE1hdGgubWF4KDAsIGNmZy5hZ2VudHM/LmRlZmF1bHRz
Py5oZWFydGJlYXQ/LmFja01heENoYXJzID8/IDMwMCk7Cgl9IGNhdGNoIHsKCQlyZXR1cm4gMzAw
OwoJfQp9CmZ1bmN0aW9uIHJlc29sdmVIZWFydGJlYXRDb250ZXh0KHJ1bklkLCBzb3VyY2VSdW5J
ZCkgewoJY29uc3QgcHJpbWFyeSA9IGdldEFnZW50UnVuQ29udGV4dChydW5JZCk7CglpZiAocHJp
bWFyeT8uaXNIZWFydGJlYXQpIHJldHVybiBwcmltYXJ5OwoJaWYgKHNvdXJjZVJ1bklkICYmIHNv
dXJjZVJ1bklkICE9PSBydW5JZCkgewoJCWNvbnN0IHNvdXJjZSA9IGdldEFnZW50UnVuQ29udGV4
dChzb3VyY2VSdW5JZCk7CgkJaWYgKHNvdXJjZT8uaXNIZWFydGJlYXQpIHJldHVybiBzb3VyY2U7
Cgl9CglyZXR1cm4gcHJpbWFyeTsKfQovKioKKiBDaGVjayBpZiBoZWFydGJlYXQgQUNLL25vaXNl
IHNob3VsZCBiZSBoaWRkZW4gZnJvbSBpbnRlcmFjdGl2ZSBjaGF0IHN1cmZhY2VzLgoqLwpmdW5j
dGlvbiBzaG91bGRIaWRlSGVhcnRiZWF0Q2hhdE91dHB1dChydW5JZCwgc291cmNlUnVuSWQpIHsK
CWlmICghcmVzb2x2ZUhlYXJ0YmVhdENvbnRleHQocnVuSWQsIHNvdXJjZVJ1bklkKT8uaXNIZWFy
dGJlYXQpIHJldHVybiBmYWxzZTsKCXRyeSB7CgkJcmV0dXJuICFyZXNvbHZlSGVhcnRiZWF0Vmlz
aWJpbGl0eSh7CgkJCWNmZzogbG9hZENvbmZpZygpLAoJCQljaGFubmVsOiAid2ViY2hhdCIKCQl9
KS5zaG93T2s7Cgl9IGNhdGNoIHsKCQlyZXR1cm4gdHJ1ZTsKCX0KfQpmdW5jdGlvbiBub3JtYWxp
emVIZWFydGJlYXRDaGF0RmluYWxUZXh0KHBhcmFtcykgewoJaWYgKCFzaG91bGRIaWRlSGVhcnRi
ZWF0Q2hhdE91dHB1dChwYXJhbXMucnVuSWQsIHBhcmFtcy5zb3VyY2VSdW5JZCkpIHJldHVybiB7
CgkJc3VwcHJlc3M6IGZhbHNlLAoJCXRleHQ6IHBhcmFtcy50ZXh0Cgl9OwoJY29uc3Qgc3RyaXBw
ZWQgPSBzdHJpcEhlYXJ0YmVhdFRva2VuKHBhcmFtcy50ZXh0LCB7CgkJbW9kZTogImhlYXJ0YmVh
dCIsCgkJbWF4QWNrQ2hhcnM6IHJlc29sdmVIZWFydGJlYXRBY2tNYXhDaGFycyQxKCkKCX0pOwoJ
aWYgKCFzdHJpcHBlZC5kaWRTdHJpcCkgcmV0dXJuIHsKCQlzdXBwcmVzczogZmFsc2UsCgkJdGV4
dDogcGFyYW1zLnRleHQKCX07CglpZiAoc3RyaXBwZWQuc2hvdWxkU2tpcCkgcmV0dXJuIHsKCQlz
dXBwcmVzczogdHJ1ZSwKCQl0ZXh0OiAiIgoJfTsKCXJldHVybiB7CgkJc3VwcHJlc3M6IGZhbHNl
LAoJCXRleHQ6IHN0cmlwcGVkLnRleHQKCX07Cn0KZnVuY3Rpb24gaXNTaWxlbnRSZXBseUxlYWRG
cmFnbWVudCh0ZXh0KSB7Cgljb25zdCBub3JtYWxpemVkID0gdGV4dC50cmltKCkudG9VcHBlckNh
c2UoKTsKCWlmICghbm9ybWFsaXplZCkgcmV0dXJuIGZhbHNlOwoJaWYgKCEvXltBLVpfXSskLy50
ZXN0KG5vcm1hbGl6ZWQpKSByZXR1cm4gZmFsc2U7CglpZiAobm9ybWFsaXplZCA9PT0gIk5PX1JF
UExZIikgcmV0dXJuIGZhbHNlOwoJcmV0dXJuIFNJTEVOVF9SRVBMWV9UT0tFTi5zdGFydHNXaXRo
KG5vcm1hbGl6ZWQpOwp9CmZ1bmN0aW9uIGFwcGVuZFVuaXF1ZVN1ZmZpeChiYXNlLCBzdWZmaXgp
IHsKCWlmICghc3VmZml4KSByZXR1cm4gYmFzZTsKCWlmICghYmFzZSkgcmV0dXJuIHN1ZmZpeDsK
CWlmIChiYXNlLmVuZHNXaXRoKHN1ZmZpeCkpIHJldHVybiBiYXNlOwoJY29uc3QgbWF4T3Zlcmxh
cCA9IE1hdGgubWluKGJhc2UubGVuZ3RoLCBzdWZmaXgubGVuZ3RoKTsKCWZvciAobGV0IG92ZXJs
YXAgPSBtYXhPdmVybGFwOyBvdmVybGFwID4gMDsgb3ZlcmxhcCAtPSAxKSBpZiAoYmFzZS5zbGlj
ZSgtb3ZlcmxhcCkgPT09IHN1ZmZpeC5zbGljZSgwLCBvdmVybGFwKSkgcmV0dXJuIGJhc2UgKyBz
dWZmaXguc2xpY2Uob3ZlcmxhcCk7CglyZXR1cm4gYmFzZSArIHN1ZmZpeDsKfQpmdW5jdGlvbiBy
ZXNvbHZlTWVyZ2VkQXNzaXN0YW50VGV4dChwYXJhbXMpIHsKCWNvbnN0IHsgcHJldmlvdXNUZXh0
LCBuZXh0VGV4dCwgbmV4dERlbHRhIH0gPSBwYXJhbXM7CglpZiAobmV4dFRleHQgJiYgcHJldmlv
dXNUZXh0KSB7CgkJaWYgKG5leHRUZXh0LnN0YXJ0c1dpdGgocHJldmlvdXNUZXh0KSkgcmV0dXJu
IG5leHRUZXh0OwoJCWlmIChwcmV2aW91c1RleHQuc3RhcnRzV2l0aChuZXh0VGV4dCkgJiYgIW5l
eHREZWx0YSkgcmV0dXJuIHByZXZpb3VzVGV4dDsKCX0KCWlmIChuZXh0RGVsdGEpIHJldHVybiBh
cHBlbmRVbmlxdWVTdWZmaXgocHJldmlvdXNUZXh0LCBuZXh0RGVsdGEpOwoJaWYgKG5leHRUZXh0
KSByZXR1cm4gbmV4dFRleHQ7CglyZXR1cm4gcHJldmlvdXNUZXh0Owp9CmZ1bmN0aW9uIGNyZWF0
ZUNoYXRSdW5SZWdpc3RyeSgpIHsKCWNvbnN0IGNoYXRSdW5TZXNzaW9ucyA9IC8qIEBfX1BVUkVf
XyAqLyBuZXcgTWFwKCk7Cgljb25zdCBhZGQgPSAoc2Vzc2lvbklkLCBlbnRyeSkgPT4gewoJCWNv
bnN0IHF1ZXVlID0gY2hhdFJ1blNlc3Npb25zLmdldChzZXNzaW9uSWQpOwoJCWlmIChxdWV1ZSkg
cXVldWUucHVzaChlbnRyeSk7CgkJZWxzZSBjaGF0UnVuU2Vzc2lvbnMuc2V0KHNlc3Npb25JZCwg
W2VudHJ5XSk7Cgl9OwoJY29uc3QgcGVlayA9IChzZXNzaW9uSWQpID0+IGNoYXRSdW5TZXNzaW9u
cy5nZXQoc2Vzc2lvbklkKT8uWzBdOwoJY29uc3Qgc2hpZnQgPSAoc2Vzc2lvbklkKSA9PiB7CgkJ
Y29uc3QgcXVldWUgPSBjaGF0UnVuU2Vzc2lvbnMuZ2V0KHNlc3Npb25JZCk7CgkJaWYgKCFxdWV1
ZSB8fCBxdWV1ZS5sZW5ndGggPT09IDApIHJldHVybjsKCQljb25zdCBlbnRyeSA9IHF1ZXVlLnNo
aWZ0KCk7CgkJaWYgKCFxdWV1ZS5sZW5ndGgpIGNoYXRSdW5TZXNzaW9ucy5kZWxldGUoc2Vzc2lv
bklkKTsKCQlyZXR1cm4gZW50cnk7Cgl9OwoJY29uc3QgcmVtb3ZlID0gKHNlc3Npb25JZCwgY2xp
ZW50UnVuSWQsIHNlc3Npb25LZXkpID0+IHsKCQljb25zdCBxdWV1ZSA9IGNoYXRSdW5TZXNzaW9u
cy5nZXQoc2Vzc2lvbklkKTsKCQlpZiAoIXF1ZXVlIHx8IHF1ZXVlLmxlbmd0aCA9PT0gMCkgcmV0
dXJuOwoJCWNvbnN0IGlkeCA9IHF1ZXVlLmZpbmRJbmRleCgoZW50cnkpID0+IGVudHJ5LmNsaWVu
dFJ1bklkID09PSBjbGllbnRSdW5JZCAmJiAoc2Vzc2lvbktleSA/IGVudHJ5LnNlc3Npb25LZXkg
PT09IHNlc3Npb25LZXkgOiB0cnVlKSk7CgkJaWYgKGlkeCA8IDApIHJldHVybjsKCQljb25zdCBb
ZW50cnldID0gcXVldWUuc3BsaWNlKGlkeCwgMSk7CgkJaWYgKCFxdWV1ZS5sZW5ndGgpIGNoYXRS
dW5TZXNzaW9ucy5kZWxldGUoc2Vzc2lvbklkKTsKCQlyZXR1cm4gZW50cnk7Cgl9OwoJY29uc3Qg
Y2xlYXIgPSAoKSA9PiB7CgkJY2hhdFJ1blNlc3Npb25zLmNsZWFyKCk7Cgl9OwoJcmV0dXJuIHsK
CQlhZGQsCgkJcGVlaywKCQlzaGlmdCwKCQlyZW1vdmUsCgkJY2xlYXIKCX07Cn0KZnVuY3Rpb24g
Y3JlYXRlQ2hhdFJ1blN0YXRlKCkgewoJY29uc3QgcmVnaXN0cnkgPSBjcmVhdGVDaGF0UnVuUmVn
aXN0cnkoKTsKCWNvbnN0IGJ1ZmZlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwoJY29u
c3QgZGVsdGFTZW50QXQgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwoJY29uc3QgZGVsdGFM
YXN0QnJvYWRjYXN0TGVuID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKCWNvbnN0IGFib3J0
ZWRSdW5zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKCWNvbnN0IGNsZWFyID0gKCkgPT4g
ewoJCXJlZ2lzdHJ5LmNsZWFyKCk7CgkJYnVmZmVycy5jbGVhcigpOwoJCWRlbHRhU2VudEF0LmNs
ZWFyKCk7CgkJZGVsdGFMYXN0QnJvYWRjYXN0TGVuLmNsZWFyKCk7CgkJYWJvcnRlZFJ1bnMuY2xl
YXIoKTsKCX07CglyZXR1cm4gewoJCXJlZ2lzdHJ5LAoJCWJ1ZmZlcnMsCgkJZGVsdGFTZW50QXQs
CgkJZGVsdGFMYXN0QnJvYWRjYXN0TGVuLAoJCWFib3J0ZWRSdW5zLAoJCWNsZWFyCgl9Owp9CmNv
bnN0IFRPT0xfRVZFTlRfUkVDSVBJRU5UX1RUTF9NUyA9IDYwMCAqIDFlMzsKY29uc3QgVE9PTF9F
VkVOVF9SRUNJUElFTlRfRklOQUxfR1JBQ0VfTVMgPSAzMCAqIDFlMzsKZnVuY3Rpb24gY3JlYXRl
VG9vbEV2ZW50UmVjaXBpZW50UmVnaXN0cnkoKSB7Cgljb25zdCByZWNpcGllbnRzID0gLyogQF9f
UFVSRV9fICovIG5ldyBNYXAoKTsKCWNvbnN0IHBydW5lID0gKCkgPT4gewoJCWlmIChyZWNpcGll
bnRzLnNpemUgPT09IDApIHJldHVybjsKCQljb25zdCBub3cgPSBEYXRlLm5vdygpOwoJCWZvciAo
Y29uc3QgW3J1bklkLCBlbnRyeV0gb2YgcmVjaXBpZW50cykgaWYgKG5vdyA+PSAoZW50cnkuZmlu
YWxpemVkQXQgPyBlbnRyeS5maW5hbGl6ZWRBdCArIFRPT0xfRVZFTlRfUkVDSVBJRU5UX0ZJTkFM
X0dSQUNFX01TIDogZW50cnkudXBkYXRlZEF0ICsgVE9PTF9FVkVOVF9SRUNJUElFTlRfVFRMX01T
KSkgcmVjaXBpZW50cy5kZWxldGUocnVuSWQpOwoJfTsKCWNvbnN0IGFkZCA9IChydW5JZCwgY29u
bklkKSA9PiB7CgkJaWYgKCFydW5JZCB8fCAhY29ubklkKSByZXR1cm47CgkJY29uc3Qgbm93ID0g
RGF0ZS5ub3coKTsKCQljb25zdCBleGlzdGluZyA9IHJlY2lwaWVudHMuZ2V0KHJ1bklkKTsKCQlp
ZiAoZXhpc3RpbmcpIHsKCQkJZXhpc3RpbmcuY29ubklkcy5hZGQoY29ubklkKTsKCQkJZXhpc3Rp
bmcudXBkYXRlZEF0ID0gbm93OwoJCX0gZWxzZSByZWNpcGllbnRzLnNldChydW5JZCwgewoJCQlj
b25uSWRzOiBuZXcgU2V0KFtjb25uSWRdKSwKCQkJdXBkYXRlZEF0OiBub3cKCQl9KTsKCQlwcnVu
ZSgpOwoJfTsKCWNvbnN0IGdldCA9IChydW5JZCkgPT4gewoJCWNvbnN0IGVudHJ5ID0gcmVjaXBp
ZW50cy5nZXQocnVuSWQpOwoJCWlmICghZW50cnkpIHJldHVybjsKCQllbnRyeS51cGRhdGVkQXQg
PSBEYXRlLm5vdygpOwoJCXBydW5lKCk7CgkJcmV0dXJuIGVudHJ5LmNvbm5JZHM7Cgl9OwoJY29u
c3QgbWFya0ZpbmFsID0gKHJ1bklkKSA9PiB7CgkJY29uc3QgZW50cnkgPSByZWNpcGllbnRzLmdl
dChydW5JZCk7CgkJaWYgKCFlbnRyeSkgcmV0dXJuOwoJCWVudHJ5LmZpbmFsaXplZEF0ID0gRGF0
ZS5ub3coKTsKCQlwcnVuZSgpOwoJfTsKCXJldHVybiB7CgkJYWRkLAoJCWdldCwKCQltYXJrRmlu
YWwKCX07Cn0KZnVuY3Rpb24gY3JlYXRlQWdlbnRFdmVudEhhbmRsZXIoeyBicm9hZGNhc3QsIGJy
b2FkY2FzdFRvQ29ubklkcywgbm9kZVNlbmRUb1Nlc3Npb24sIGFnZW50UnVuU2VxLCBjaGF0UnVu
U3RhdGUsIHJlc29sdmVTZXNzaW9uS2V5Rm9yUnVuLCBjbGVhckFnZW50UnVuQ29udGV4dCwgdG9v
bEV2ZW50UmVjaXBpZW50cyB9KSB7Cgljb25zdCBlbWl0Q2hhdERlbHRhID0gKHNlc3Npb25LZXks
IGNsaWVudFJ1bklkLCBzb3VyY2VSdW5JZCwgc2VxLCB0ZXh0LCBkZWx0YSkgPT4gewoJCWNvbnN0
IGNsZWFuZWRUZXh0ID0gc3RyaXBJbmxpbmVEaXJlY3RpdmVUYWdzRm9yRGlzcGxheSh0ZXh0KS50
ZXh0OwoJCWNvbnN0IGNsZWFuZWREZWx0YSA9IHR5cGVvZiBkZWx0YSA9PT0gInN0cmluZyIgPyBz
dHJpcElubGluZURpcmVjdGl2ZVRhZ3NGb3JEaXNwbGF5KGRlbHRhKS50ZXh0IDogIiI7CgkJY29u
c3QgbWVyZ2VkVGV4dCA9IHJlc29sdmVNZXJnZWRBc3Npc3RhbnRUZXh0KHsKCQkJcHJldmlvdXNU
ZXh0OiBjaGF0UnVuU3RhdGUuYnVmZmVycy5nZXQoY2xpZW50UnVuSWQpID8/ICIiLAoJCQluZXh0
VGV4dDogY2xlYW5lZFRleHQsCgkJCW5leHREZWx0YTogY2xlYW5lZERlbHRhCgkJfSk7CgkJaWYg
KCFtZXJnZWRUZXh0KSByZXR1cm47CgkJY2hhdFJ1blN0YXRlLmJ1ZmZlcnMuc2V0KGNsaWVudFJ1
bklkLCBtZXJnZWRUZXh0KTsKCQlpZiAoaXNTaWxlbnRSZXBseVRleHQobWVyZ2VkVGV4dCwgIk5P
X1JFUExZIikpIHJldHVybjsKCQlpZiAoaXNTaWxlbnRSZXBseUxlYWRGcmFnbWVudChtZXJnZWRU
ZXh0KSkgcmV0dXJuOwoJCWlmIChzaG91bGRIaWRlSGVhcnRiZWF0Q2hhdE91dHB1dChjbGllbnRS
dW5JZCwgc291cmNlUnVuSWQpKSByZXR1cm47CgkJY29uc3Qgbm93ID0gRGF0ZS5ub3coKTsKCQlp
ZiAobm93IC0gKGNoYXRSdW5TdGF0ZS5kZWx0YVNlbnRBdC5nZXQoY2xpZW50UnVuSWQpID8/IDAp
IDwgMTUwKSByZXR1cm47CgkJY2hhdFJ1blN0YXRlLmRlbHRhU2VudEF0LnNldChjbGllbnRSdW5J
ZCwgbm93KTsKCQljaGF0UnVuU3RhdGUuZGVsdGFMYXN0QnJvYWRjYXN0TGVuLnNldChjbGllbnRS
dW5JZCwgbWVyZ2VkVGV4dC5sZW5ndGgpOwoJCWNvbnN0IHBheWxvYWQgPSB7CgkJCXJ1bklkOiBj
bGllbnRSdW5JZCwKCQkJc2Vzc2lvbktleSwKCQkJc2VxLAoJCQlzdGF0ZTogImRlbHRhIiwKCQkJ
bWVzc2FnZTogewoJCQkJcm9sZTogImFzc2lzdGFudCIsCgkJCQljb250ZW50OiBbewoJCQkJCXR5
cGU6ICJ0ZXh0IiwKCQkJCQl0ZXh0OiBtZXJnZWRUZXh0CgkJCQl9XSwKCQkJCXRpbWVzdGFtcDog
bm93CgkJCX0KCQl9OwoJCWJyb2FkY2FzdCgiY2hhdCIsIHBheWxvYWQsIHsgZHJvcElmU2xvdzog
dHJ1ZSB9KTsKCQlub2RlU2VuZFRvU2Vzc2lvbihzZXNzaW9uS2V5LCAiY2hhdCIsIHBheWxvYWQp
OwoJfTsKCWNvbnN0IHJlc29sdmVCdWZmZXJlZENoYXRUZXh0U3RhdGUgPSAoY2xpZW50UnVuSWQs
IHNvdXJjZVJ1bklkKSA9PiB7CgkJY29uc3Qgbm9ybWFsaXplZEhlYXJ0YmVhdFRleHQgPSBub3Jt
YWxpemVIZWFydGJlYXRDaGF0RmluYWxUZXh0KHsKCQkJcnVuSWQ6IGNsaWVudFJ1bklkLAoJCQlz
b3VyY2VSdW5JZCwKCQkJdGV4dDogc3RyaXBJbmxpbmVEaXJlY3RpdmVUYWdzRm9yRGlzcGxheShj
aGF0UnVuU3RhdGUuYnVmZmVycy5nZXQoY2xpZW50UnVuSWQpID8/ICIiKS50ZXh0LnRyaW0oKQoJ
CX0pOwoJCWNvbnN0IHRleHQgPSBub3JtYWxpemVkSGVhcnRiZWF0VGV4dC50ZXh0LnRyaW0oKTsK
CQlyZXR1cm4gewoJCQl0ZXh0LAoJCQlzaG91bGRTdXBwcmVzc1NpbGVudDogbm9ybWFsaXplZEhl
YXJ0YmVhdFRleHQuc3VwcHJlc3MgfHwgaXNTaWxlbnRSZXBseVRleHQodGV4dCwgIk5PX1JFUExZ
IikKCQl9OwoJfTsKCWNvbnN0IGZsdXNoQnVmZmVyZWRDaGF0RGVsdGFJZk5lZWRlZCA9IChzZXNz
aW9uS2V5LCBjbGllbnRSdW5JZCwgc291cmNlUnVuSWQsIHNlcSkgPT4gewoJCWNvbnN0IHsgdGV4
dCwgc2hvdWxkU3VwcHJlc3NTaWxlbnQgfSA9IHJlc29sdmVCdWZmZXJlZENoYXRUZXh0U3RhdGUo
Y2xpZW50UnVuSWQsIHNvdXJjZVJ1bklkKTsKCQljb25zdCBzaG91bGRTdXBwcmVzc1NpbGVudExl
YWRGcmFnbWVudCA9IGlzU2lsZW50UmVwbHlMZWFkRnJhZ21lbnQodGV4dCk7CgkJY29uc3Qgc2hv
dWxkU3VwcHJlc3NIZWFydGJlYXRTdHJlYW1pbmcgPSBzaG91bGRIaWRlSGVhcnRiZWF0Q2hhdE91
dHB1dChjbGllbnRSdW5JZCwgc291cmNlUnVuSWQpOwoJCWlmICghdGV4dCB8fCBzaG91bGRTdXBw
cmVzc1NpbGVudCB8fCBzaG91bGRTdXBwcmVzc1NpbGVudExlYWRGcmFnbWVudCB8fCBzaG91bGRT
dXBwcmVzc0hlYXJ0YmVhdFN0cmVhbWluZykgcmV0dXJuOwoJCWNvbnN0IGxhc3RCcm9hZGNhc3RM
ZW4gPSBjaGF0UnVuU3RhdGUuZGVsdGFMYXN0QnJvYWRjYXN0TGVuLmdldChjbGllbnRSdW5JZCkg
Pz8gMDsKCQlpZiAodGV4dC5sZW5ndGggPD0gbGFzdEJyb2FkY2FzdExlbikgcmV0dXJuOwoJCWNv
bnN0IG5vdyA9IERhdGUubm93KCk7CgkJY29uc3QgZmx1c2hQYXlsb2FkID0gewoJCQlydW5JZDog
Y2xpZW50UnVuSWQsCgkJCXNlc3Npb25LZXksCgkJCXNlcSwKCQkJc3RhdGU6ICJkZWx0YSIsCgkJ
CW1lc3NhZ2U6IHsKCQkJCXJvbGU6ICJhc3Npc3RhbnQiLAoJCQkJY29udGVudDogW3sKCQkJCQl0
eXBlOiAidGV4dCIsCgkJCQkJdGV4dAoJCQkJfV0sCgkJCQl0aW1lc3RhbXA6IG5vdwoJCQl9CgkJ
fTsKCQlicm9hZGNhc3QoImNoYXQiLCBmbHVzaFBheWxvYWQsIHsgZHJvcElmU2xvdzogdHJ1ZSB9
KTsKCQlub2RlU2VuZFRvU2Vzc2lvbihzZXNzaW9uS2V5LCAiY2hhdCIsIGZsdXNoUGF5bG9hZCk7
CgkJY2hhdFJ1blN0YXRlLmRlbHRhTGFzdEJyb2FkY2FzdExlbi5zZXQoY2xpZW50UnVuSWQsIHRl
eHQubGVuZ3RoKTsKCQljaGF0UnVuU3RhdGUuZGVsdGFTZW50QXQuc2V0KGNsaWVudFJ1bklkLCBu
b3cpOwoJfTsKCWNvbnN0IGVtaXRDaGF0RmluYWwgPSAoc2Vzc2lvbktleSwgY2xpZW50UnVuSWQs
IHNvdXJjZVJ1bklkLCBzZXEsIGpvYlN0YXRlLCBlcnJvciwgc3RvcFJlYXNvbikgPT4gewoJCWNv
bnN0IHsgdGV4dCwgc2hvdWxkU3VwcHJlc3NTaWxlbnQgfSA9IHJlc29sdmVCdWZmZXJlZENoYXRU
ZXh0U3RhdGUoY2xpZW50UnVuSWQsIHNvdXJjZVJ1bklkKTsKCQlmbHVzaEJ1ZmZlcmVkQ2hhdERl
bHRhSWZOZWVkZWQoc2Vzc2lvbktleSwgY2xpZW50UnVuSWQsIHNvdXJjZVJ1bklkLCBzZXEpOwoJ
CWNoYXRSdW5TdGF0ZS5kZWx0YUxhc3RCcm9hZGNhc3RMZW4uZGVsZXRlKGNsaWVudFJ1bklkKTsK
CQljaGF0UnVuU3RhdGUuYnVmZmVycy5kZWxldGUoY2xpZW50UnVuSWQpOwoJCWNoYXRSdW5TdGF0
ZS5kZWx0YVNlbnRBdC5kZWxldGUoY2xpZW50UnVuSWQpOwoJCWlmIChqb2JTdGF0ZSA9PT0gImRv
bmUiKSB7CgkJCWNvbnN0IHBheWxvYWQgPSB7CgkJCQlydW5JZDogY2xpZW50UnVuSWQsCgkJCQlz
ZXNzaW9uS2V5LAoJCQkJc2VxLAoJCQkJc3RhdGU6ICJmaW5hbCIsCgkJCQkuLi5zdG9wUmVhc29u
ICYmIHsgc3RvcFJlYXNvbiB9LAoJCQkJbWVzc2FnZTogdGV4dCAmJiAhc2hvdWxkU3VwcHJlc3NT
aWxlbnQgPyB7CgkJCQkJcm9sZTogImFzc2lzdGFudCIsCgkJCQkJY29udGVudDogW3sKCQkJCQkJ
dHlwZTogInRleHQiLAoJCQkJCQl0ZXh0CgkJCQkJfV0sCgkJCQkJdGltZXN0YW1wOiBEYXRlLm5v
dygpCgkJCQl9IDogdm9pZCAwCgkJCX07CgkJCWJyb2FkY2FzdCgiY2hhdCIsIHBheWxvYWQpOwoJ
CQlub2RlU2VuZFRvU2Vzc2lvbihzZXNzaW9uS2V5LCAiY2hhdCIsIHBheWxvYWQpOwoJCQlyZXR1
cm47CgkJfQoJCWNvbnN0IHBheWxvYWQgPSB7CgkJCXJ1bklkOiBjbGllbnRSdW5JZCwKCQkJc2Vz
c2lvbktleSwKCQkJc2VxLAoJCQlzdGF0ZTogImVycm9yIiwKCQkJZXJyb3JNZXNzYWdlOiBlcnJv
ciA/IGZvcm1hdEZvckxvZyhlcnJvcikgOiB2b2lkIDAKCQl9OwoJCWJyb2FkY2FzdCgiY2hhdCIs
IHBheWxvYWQpOwoJCW5vZGVTZW5kVG9TZXNzaW9uKHNlc3Npb25LZXksICJjaGF0IiwgcGF5bG9h
ZCk7Cgl9OwoJY29uc3QgcmVzb2x2ZVRvb2xWZXJib3NlTGV2ZWwgPSAocnVuSWQsIHNlc3Npb25L
ZXkpID0+IHsKCQljb25zdCBydW5WZXJib3NlID0gbm9ybWFsaXplVmVyYm9zZUxldmVsKGdldEFn
ZW50UnVuQ29udGV4dChydW5JZCk/LnZlcmJvc2VMZXZlbCk7CgkJaWYgKHJ1blZlcmJvc2UpIHJl
dHVybiBydW5WZXJib3NlOwoJCWlmICghc2Vzc2lvbktleSkgcmV0dXJuICJvZmYiOwoJCXRyeSB7
CgkJCWNvbnN0IHsgY2ZnLCBlbnRyeSB9ID0gbG9hZFNlc3Npb25FbnRyeShzZXNzaW9uS2V5KTsK
CQkJY29uc3Qgc2Vzc2lvblZlcmJvc2UgPSBub3JtYWxpemVWZXJib3NlTGV2ZWwoZW50cnk/LnZl
cmJvc2VMZXZlbCk7CgkJCWlmIChzZXNzaW9uVmVyYm9zZSkgcmV0dXJuIHNlc3Npb25WZXJib3Nl
OwoJCQlyZXR1cm4gbm9ybWFsaXplVmVyYm9zZUxldmVsKGNmZy5hZ2VudHM/LmRlZmF1bHRzPy52
ZXJib3NlRGVmYXVsdCkgPz8gIm9mZiI7CgkJfSBjYXRjaCB7CgkJCXJldHVybiAib2ZmIjsKCQl9
Cgl9OwoJcmV0dXJuIChldnQpID0+IHsKCQljb25zdCBjaGF0TGluayA9IGNoYXRSdW5TdGF0ZS5y
ZWdpc3RyeS5wZWVrKGV2dC5ydW5JZCk7CgkJY29uc3QgZXZlbnRTZXNzaW9uS2V5ID0gdHlwZW9m
IGV2dC5zZXNzaW9uS2V5ID09PSAic3RyaW5nIiAmJiBldnQuc2Vzc2lvbktleS50cmltKCkgPyBl
dnQuc2Vzc2lvbktleSA6IHZvaWQgMDsKCQljb25zdCBpc0NvbnRyb2xVaVZpc2libGUgPSBnZXRB
Z2VudFJ1bkNvbnRleHQoZXZ0LnJ1bklkKT8uaXNDb250cm9sVWlWaXNpYmxlID8/IHRydWU7CgkJ
Y29uc3Qgc2Vzc2lvbktleSA9IGNoYXRMaW5rPy5zZXNzaW9uS2V5ID8/IGV2ZW50U2Vzc2lvbktl
eSA/PyByZXNvbHZlU2Vzc2lvbktleUZvclJ1bihldnQucnVuSWQpOwoJCWNvbnN0IGNsaWVudFJ1
bklkID0gY2hhdExpbms/LmNsaWVudFJ1bklkID8/IGV2dC5ydW5JZDsKCQljb25zdCBldmVudFJ1
bklkID0gY2hhdExpbms/LmNsaWVudFJ1bklkID8/IGV2dC5ydW5JZDsKCQljb25zdCBldmVudEZv
ckNsaWVudHMgPSBjaGF0TGluayA/IHsKCQkJLi4uZXZ0LAoJCQlydW5JZDogZXZlbnRSdW5JZAoJ
CX0gOiBldnQ7CgkJY29uc3QgaXNBYm9ydGVkID0gY2hhdFJ1blN0YXRlLmFib3J0ZWRSdW5zLmhh
cyhjbGllbnRSdW5JZCkgfHwgY2hhdFJ1blN0YXRlLmFib3J0ZWRSdW5zLmhhcyhldnQucnVuSWQp
OwoJCWNvbnN0IGFnZW50UGF5bG9hZCA9IHNlc3Npb25LZXkgPyB7CgkJCS4uLmV2ZW50Rm9yQ2xp
ZW50cywKCQkJc2Vzc2lvbktleQoJCX0gOiBldmVudEZvckNsaWVudHM7CgkJY29uc3QgbGFzdCA9
IGFnZW50UnVuU2VxLmdldChldnQucnVuSWQpID8/IDA7CgkJY29uc3QgaXNUb29sRXZlbnQgPSBl
dnQuc3RyZWFtID09PSAidG9vbCI7CgkJY29uc3QgdG9vbFZlcmJvc2UgPSBpc1Rvb2xFdmVudCA/
IHJlc29sdmVUb29sVmVyYm9zZUxldmVsKGV2dC5ydW5JZCwgc2Vzc2lvbktleSkgOiAib2ZmIjsK
CQljb25zdCB0b29sUGF5bG9hZCA9IGlzVG9vbEV2ZW50ICYmIHRvb2xWZXJib3NlICE9PSAiZnVs
bCIgPyAoKCkgPT4gewoJCQljb25zdCBkYXRhID0gZXZ0LmRhdGEgPyB7IC4uLmV2dC5kYXRhIH0g
OiB7fTsKCQkJZGVsZXRlIGRhdGEucmVzdWx0OwoJCQlkZWxldGUgZGF0YS5wYXJ0aWFsUmVzdWx0
OwoJCQlyZXR1cm4gc2Vzc2lvbktleSA/IHsKCQkJCS4uLmV2ZW50Rm9yQ2xpZW50cywKCQkJCXNl
c3Npb25LZXksCgkJCQlkYXRhCgkJCX0gOiB7CgkJCQkuLi5ldmVudEZvckNsaWVudHMsCgkJCQlk
YXRhCgkJCX07CgkJfSkoKSA6IGFnZW50UGF5bG9hZDsKCQlpZiAoZXZ0LnNlcSAhPT0gbGFzdCAr
IDEpIGJyb2FkY2FzdCgiYWdlbnQiLCB7CgkJCXJ1bklkOiBldmVudFJ1bklkLAoJCQlzdHJlYW06
ICJlcnJvciIsCgkJCXRzOiBEYXRlLm5vdygpLAoJCQlzZXNzaW9uS2V5LAoJCQlkYXRhOiB7CgkJ
CQlyZWFzb246ICJzZXEgZ2FwIiwKCQkJCWV4cGVjdGVkOiBsYXN0ICsgMSwKCQkJCXJlY2VpdmVk
OiBldnQuc2VxCgkJCX0KCQl9KTsKCQlhZ2VudFJ1blNlcS5zZXQoZXZ0LnJ1bklkLCBldnQuc2Vx
KTsKCQlpZiAoaXNUb29sRXZlbnQpIHsKCQkJaWYgKCh0eXBlb2YgZXZ0LmRhdGE/LnBoYXNlID09
PSAic3RyaW5nIiA/IGV2dC5kYXRhLnBoYXNlIDogIiIpID09PSAic3RhcnQiICYmIGlzQ29udHJv
bFVpVmlzaWJsZSAmJiBzZXNzaW9uS2V5ICYmICFpc0Fib3J0ZWQpIGZsdXNoQnVmZmVyZWRDaGF0
RGVsdGFJZk5lZWRlZChzZXNzaW9uS2V5LCBjbGllbnRSdW5JZCwgZXZ0LnJ1bklkLCBldnQuc2Vx
KTsKCQkJY29uc3QgcmVjaXBpZW50cyA9IHRvb2xFdmVudFJlY2lwaWVudHMuZ2V0KGV2dC5ydW5J
ZCk7CgkJCWlmIChyZWNpcGllbnRzICYmIHJlY2lwaWVudHMuc2l6ZSA+IDApIGJyb2FkY2FzdFRv
Q29ubklkcygiYWdlbnQiLCB0b29sUGF5bG9hZCwgcmVjaXBpZW50cyk7CgkJfSBlbHNlIGJyb2Fk
Y2FzdCgiYWdlbnQiLCBhZ2VudFBheWxvYWQpOwoJCWNvbnN0IGxpZmVjeWNsZVBoYXNlID0gZXZ0
LnN0cmVhbSA9PT0gImxpZmVjeWNsZSIgJiYgdHlwZW9mIGV2dC5kYXRhPy5waGFzZSA9PT0gInN0
cmluZyIgPyBldnQuZGF0YS5waGFzZSA6IG51bGw7CgkJaWYgKGlzQ29udHJvbFVpVmlzaWJsZSAm
JiBzZXNzaW9uS2V5KSB7CgkJCWlmICghaXNUb29sRXZlbnQgfHwgdG9vbFZlcmJvc2UgIT09ICJv
ZmYiKSBub2RlU2VuZFRvU2Vzc2lvbihzZXNzaW9uS2V5LCAiYWdlbnQiLCBpc1Rvb2xFdmVudCA/
IHRvb2xQYXlsb2FkIDogYWdlbnRQYXlsb2FkKTsKCQkJaWYgKCFpc0Fib3J0ZWQgJiYgZXZ0LnN0
cmVhbSA9PT0gImFzc2lzdGFudCIgJiYgdHlwZW9mIGV2dC5kYXRhPy50ZXh0ID09PSAic3RyaW5n
IikgZW1pdENoYXREZWx0YShzZXNzaW9uS2V5LCBjbGllbnRSdW5JZCwgZXZ0LnJ1bklkLCBldnQu
c2VxLCBldnQuZGF0YS50ZXh0LCBldnQuZGF0YS5kZWx0YSk7CgkJCWVsc2UgaWYgKCFpc0Fib3J0
ZWQgJiYgKGxpZmVjeWNsZVBoYXNlID09PSAiZW5kIiB8fCBsaWZlY3ljbGVQaGFzZSA9PT0gImVy
cm9yIikpIHsKCQkJCWNvbnN0IGV2dFN0b3BSZWFzb24gPSB0eXBlb2YgZXZ0LmRhdGE/LnN0b3BS
ZWFzb24gPT09ICJzdHJpbmciID8gZXZ0LmRhdGEuc3RvcFJlYXNvbiA6IHZvaWQgMDsKCQkJCWlm
IChjaGF0TGluaykgewoJCQkJCWNvbnN0IGZpbmlzaGVkID0gY2hhdFJ1blN0YXRlLnJlZ2lzdHJ5
LnNoaWZ0KGV2dC5ydW5JZCk7CgkJCQkJaWYgKCFmaW5pc2hlZCkgewoJCQkJCQljbGVhckFnZW50
UnVuQ29udGV4dChldnQucnVuSWQpOwoJCQkJCQlyZXR1cm47CgkJCQkJfQoJCQkJCWVtaXRDaGF0
RmluYWwoZmluaXNoZWQuc2Vzc2lvbktleSwgZmluaXNoZWQuY2xpZW50UnVuSWQsIGV2dC5ydW5J
ZCwgZXZ0LnNlcSwgbGlmZWN5Y2xlUGhhc2UgPT09ICJlcnJvciIgPyAiZXJyb3IiIDogImRvbmUi
LCBldnQuZGF0YT8uZXJyb3IsIGV2dFN0b3BSZWFzb24pOwoJCQkJfSBlbHNlIGVtaXRDaGF0Rmlu
YWwoc2Vzc2lvbktleSwgZXZlbnRSdW5JZCwgZXZ0LnJ1bklkLCBldnQuc2VxLCBsaWZlY3ljbGVQ
aGFzZSA9PT0gImVycm9yIiA/ICJlcnJvciIgOiAiZG9uZSIsIGV2dC5kYXRhPy5lcnJvciwgZXZ0
U3RvcFJlYXNvbik7CgkJCX0gZWxzZSBpZiAoaXNBYm9ydGVkICYmIChsaWZlY3ljbGVQaGFzZSA9
PT0gImVuZCIgfHwgbGlmZWN5Y2xlUGhhc2UgPT09ICJlcnJvciIpKSB7CgkJCQljaGF0UnVuU3Rh
dGUuYWJvcnRlZFJ1bnMuZGVsZXRlKGNsaWVudFJ1bklkKTsKCQkJCWNoYXRSdW5TdGF0ZS5hYm9y
dGVkUnVucy5kZWxldGUoZXZ0LnJ1bklkKTsKCQkJCWNoYXRSdW5TdGF0ZS5idWZmZXJzLmRlbGV0
ZShjbGllbnRSdW5JZCk7CgkJCQljaGF0UnVuU3RhdGUuZGVsdGFTZW50QXQuZGVsZXRlKGNsaWVu
dFJ1bklkKTsKCQkJCWlmIChjaGF0TGluaykgY2hhdFJ1blN0YXRlLnJlZ2lzdHJ5LnJlbW92ZShl
dnQucnVuSWQsIGNsaWVudFJ1bklkLCBzZXNzaW9uS2V5KTsKCQkJfQoJCX0KCQlpZiAobGlmZWN5
Y2xlUGhhc2UgPT09ICJlbmQiIHx8IGxpZmVjeWNsZVBoYXNlID09PSAiZXJyb3IiKSB7CgkJCXRv
b2xFdmVudFJlY2lwaWVudHMubWFya0ZpbmFsKGV2dC5ydW5JZCk7CgkJCWNsZWFyQWdlbnRSdW5D
b250ZXh0KGV2dC5ydW5JZCk7CgkJCWFnZW50UnVuU2VxLmRlbGV0ZShldnQucnVuSWQpOwoJCQlh
Z2VudFJ1blNlcS5kZWxldGUoY2xpZW50UnVuSWQpOwoJCX0KCX07Cn0KLy8jZW5kcmVnaW9uCi8v
I3JlZ2lvbiBzcmMvaG9va3MvZ21haWwtd2F0Y2hlci50cwovKioKKiBHbWFpbCBXYXRjaGVyIFNl
cnZpY2UKKgoqIEF1dG9tYXRpY2FsbHkgc3RhcnRzIGBnb2cgZ21haWwgd2F0Y2ggc2VydmVgIHdo
ZW4gdGhlIGdhdGV3YXkgc3RhcnRzLAoqIGlmIGhvb2tzLmdtYWlsIGlzIGNvbmZpZ3VyZWQgd2l0
aCBhbiBhY2NvdW50LgoqLwpjb25zdCBsb2ckMyA9IGNyZWF0ZVN1YnN5c3RlbUxvZ2dlcigiZ21h
aWwtd2F0Y2hlciIpOwpjb25zdCBBRERSRVNTX0lOX1VTRV9SRSA9IC9hZGRyZXNzIGFscmVhZHkg
aW4gdXNlfEVBRERSSU5VU0UvaTsKZnVuY3Rpb24gaXNBZGRyZXNzSW5Vc2VFcnJvcihsaW5lKSB7
CglyZXR1cm4gQUREUkVTU19JTl9VU0VfUkUudGVzdChsaW5lKTsKfQpsZXQgd2F0Y2hlclByb2Nl
c3MgPSBudWxsOwpsZXQgcmVuZXdJbnRlcnZhbCA9IG51bGw7CmxldCBzaHV0dGluZ0Rvd24gPSBm
YWxzZTsKbGV0IGN1cnJlbnRDb25maWcgPSBudWxsOwovKioKKiBDaGVjayBpZiBnb2cgYmluYXJ5
IGlzIGF2YWlsYWJsZQoqLwpmdW5jdGlvbiBpc0dvZ0F2YWlsYWJsZSgpIHsKCXJldHVybiBoYXNC
aW5hcnkoImdvZyIpOwp9Ci8qKgoqIFN0YXJ0IHRoZSBHbWFpbCB3YXRjaCAocmVnaXN0ZXJzIHdp
dGggR21haWwgQVBJKQoqLwphc3luYyBmdW5jdGlvbiBzdGFydEdtYWlsV2F0Y2goY2ZnKSB7Cglj
b25zdCBhcmdzID0gWyJnb2ciLCAuLi5idWlsZEdvZ1dhdGNoU3RhcnRBcmdzKGNmZyldOwoJdHJ5
IHsKCQljb25zdCByZXN1bHQgPSBhd2FpdCBydW5Db21tYW5kV2l0aFRpbWVvdXQoYXJncywgeyB0
aW1lb3V0TXM6IDEyZTQgfSk7CgkJaWYgKHJlc3VsdC5jb2RlICE9PSAwKSB7CgkJCWNvbnN0IG1l
c3NhZ2UgPSByZXN1bHQuc3RkZXJyIHx8IHJlc3VsdC5zdGRvdXQgfHwgImdvZyB3YXRjaCBzdGFy
dCBmYWlsZWQiOwoJCQlsb2ckMy5lcnJvcihgd2F0Y2ggc3RhcnQgZmFpbGVkOiAke21lc3NhZ2V9
YCk7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJbG9nJDMuaW5mbyhgd2F0Y2ggc3RhcnRlZCBmb3Ig
JHtjZmcuYWNjb3VudH1gKTsKCQlyZXR1cm4gdHJ1ZTsKCX0gY2F0Y2ggKGVycikgewoJCWxvZyQz
LmVycm9yKGB3YXRjaCBzdGFydCBlcnJvcjogJHtTdHJpbmcoZXJyKX1gKTsKCQlyZXR1cm4gZmFs
c2U7Cgl9Cn0KLyoqCiogU3Bhd24gdGhlIGdvZyBnbWFpbCB3YXRjaCBzZXJ2ZSBwcm9jZXNzCiov
CmZ1bmN0aW9uIHNwYXduR29nU2VydmUoY2ZnKSB7Cgljb25zdCBhcmdzID0gYnVpbGRHb2dXYXRj
aFNlcnZlQXJncyhjZmcpOwoJbG9nJDMuaW5mbyhgc3RhcnRpbmcgZ29nICR7YXJncy5qb2luKCIg
Iil9YCk7CglsZXQgYWRkcmVzc0luVXNlID0gZmFsc2U7Cgljb25zdCBjaGlsZCA9IHNwYXduKCJn
b2ciLCBhcmdzLCB7CgkJc3RkaW86IFsKCQkJImlnbm9yZSIsCgkJCSJwaXBlIiwKCQkJInBpcGUi
CgkJXSwKCQlkZXRhY2hlZDogZmFsc2UKCX0pOwoJY2hpbGQuc3Rkb3V0Py5vbigiZGF0YSIsIChk
YXRhKSA9PiB7CgkJY29uc3QgbGluZSA9IGRhdGEudG9TdHJpbmcoKS50cmltKCk7CgkJaWYgKGxp
bmUpIGxvZyQzLmluZm8oYFtnb2ddICR7bGluZX1gKTsKCX0pOwoJY2hpbGQuc3RkZXJyPy5vbigi
ZGF0YSIsIChkYXRhKSA9PiB7CgkJY29uc3QgbGluZSA9IGRhdGEudG9TdHJpbmcoKS50cmltKCk7
CgkJaWYgKCFsaW5lKSByZXR1cm47CgkJaWYgKGlzQWRkcmVzc0luVXNlRXJyb3IobGluZSkpIGFk
ZHJlc3NJblVzZSA9IHRydWU7CgkJbG9nJDMud2FybihgW2dvZ10gJHtsaW5lfWApOwoJfSk7Cglj
aGlsZC5vbigiZXJyb3IiLCAoZXJyKSA9PiB7CgkJbG9nJDMuZXJyb3IoYGdvZyBwcm9jZXNzIGVy
cm9yOiAke1N0cmluZyhlcnIpfWApOwoJfSk7CgljaGlsZC5vbigiZXhpdCIsIChjb2RlLCBzaWdu
YWwpID0+IHsKCQlpZiAoc2h1dHRpbmdEb3duKSByZXR1cm47CgkJaWYgKGFkZHJlc3NJblVzZSkg
ewoJCQlsb2ckMy53YXJuKCJnb2cgc2VydmUgZmFpbGVkIHRvIGJpbmQgKGFkZHJlc3MgYWxyZWFk
eSBpbiB1c2UpOyBzdG9wcGluZyByZXN0YXJ0cy4gQW5vdGhlciB3YXRjaGVyIGlzIGxpa2VseSBy
dW5uaW5nLiBTZXQgT1BFTkNMQVdfU0tJUF9HTUFJTF9XQVRDSEVSPTEgb3Igc3RvcCB0aGUgb3Ro
ZXIgcHJvY2Vzcy4iKTsKCQkJd2F0Y2hlclByb2Nlc3MgPSBudWxsOwoJCQlyZXR1cm47CgkJfQoJ
CWxvZyQzLndhcm4oYGdvZyBleGl0ZWQgKGNvZGU9JHtjb2RlfSwgc2lnbmFsPSR7c2lnbmFsfSk7
IHJlc3RhcnRpbmcgaW4gNXNgKTsKCQl3YXRjaGVyUHJvY2VzcyA9IG51bGw7CgkJc2V0VGltZW91
dCgoKSA9PiB7CgkJCWlmIChzaHV0dGluZ0Rvd24gfHwgIWN1cnJlbnRDb25maWcpIHJldHVybjsK
CQkJd2F0Y2hlclByb2Nlc3MgPSBzcGF3bkdvZ1NlcnZlKGN1cnJlbnRDb25maWcpOwoJCX0sIDVl
Myk7Cgl9KTsKCXJldHVybiBjaGlsZDsKfQovKioKKiBTdGFydCB0aGUgR21haWwgd2F0Y2hlciBz
ZXJ2aWNlLgoqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBnYXRld2F5IGlmIGhvb2tzLmdt
YWlsIGlzIGNvbmZpZ3VyZWQuCiovCmFzeW5jIGZ1bmN0aW9uIHN0YXJ0R21haWxXYXRjaGVyKGNm
ZykgewoJaWYgKCFjZmcuaG9va3M/LmVuYWJsZWQpIHJldHVybiB7CgkJc3RhcnRlZDogZmFsc2Us
CgkJcmVhc29uOiAiaG9va3Mgbm90IGVuYWJsZWQiCgl9OwoJaWYgKCFjZmcuaG9va3M/LmdtYWls
Py5hY2NvdW50KSByZXR1cm4gewoJCXN0YXJ0ZWQ6IGZhbHNlLAoJCXJlYXNvbjogIm5vIGdtYWls
IGFjY291bnQgY29uZmlndXJlZCIKCX07CglpZiAoIWlzR29nQXZhaWxhYmxlKCkpIHJldHVybiB7
CgkJc3RhcnRlZDogZmFsc2UsCgkJcmVhc29uOiAiZ29nIGJpbmFyeSBub3QgZm91bmQiCgl9OwoJ
Y29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlR21haWxIb29rUnVudGltZUNvbmZpZyhjZmcsIHt9KTsK
CWlmICghcmVzb2x2ZWQub2spIHJldHVybiB7CgkJc3RhcnRlZDogZmFsc2UsCgkJcmVhc29uOiBy
ZXNvbHZlZC5lcnJvcgoJfTsKCWNvbnN0IHJ1bnRpbWVDb25maWcgPSByZXNvbHZlZC52YWx1ZTsK
CWN1cnJlbnRDb25maWcgPSBydW50aW1lQ29uZmlnOwoJaWYgKHJ1bnRpbWVDb25maWcudGFpbHNj
YWxlLm1vZGUgIT09ICJvZmYiKSB0cnkgewoJCWF3YWl0IGVuc3VyZVRhaWxzY2FsZUVuZHBvaW50
KHsKCQkJbW9kZTogcnVudGltZUNvbmZpZy50YWlsc2NhbGUubW9kZSwKCQkJcGF0aDogcnVudGlt
ZUNvbmZpZy50YWlsc2NhbGUucGF0aCwKCQkJcG9ydDogcnVudGltZUNvbmZpZy5zZXJ2ZS5wb3J0
LAoJCQl0YXJnZXQ6IHJ1bnRpbWVDb25maWcudGFpbHNjYWxlLnRhcmdldAoJCX0pOwoJCWxvZyQz
LmluZm8oYHRhaWxzY2FsZSAke3J1bnRpbWVDb25maWcudGFpbHNjYWxlLm1vZGV9IGNvbmZpZ3Vy
ZWQgZm9yIHBvcnQgJHtydW50aW1lQ29uZmlnLnNlcnZlLnBvcnR9YCk7Cgl9IGNhdGNoIChlcnIp
IHsKCQlsb2ckMy5lcnJvcihgdGFpbHNjYWxlIHNldHVwIGZhaWxlZDogJHtTdHJpbmcoZXJyKX1g
KTsKCQlyZXR1cm4gewoJCQlzdGFydGVkOiBmYWxzZSwKCQkJcmVhc29uOiBgdGFpbHNjYWxlIHNl
dHVwIGZhaWxlZDogJHtTdHJpbmcoZXJyKX1gCgkJfTsKCX0KCWlmICghYXdhaXQgc3RhcnRHbWFp
bFdhdGNoKHJ1bnRpbWVDb25maWcpKSBsb2ckMy53YXJuKCJnbWFpbCB3YXRjaCBzdGFydCBmYWls
ZWQsIGJ1dCBjb250aW51aW5nIHdpdGggc2VydmUiKTsKCXNodXR0aW5nRG93biA9IGZhbHNlOwoJ
d2F0Y2hlclByb2Nlc3MgPSBzcGF3bkdvZ1NlcnZlKHJ1bnRpbWVDb25maWcpOwoJY29uc3QgcmVu
ZXdNcyA9IHJ1bnRpbWVDb25maWcucmVuZXdFdmVyeU1pbnV0ZXMgKiA2ZTQ7CglyZW5ld0ludGVy
dmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4gewoJCWlmIChzaHV0dGluZ0Rvd24pIHJldHVybjsKCQlz
dGFydEdtYWlsV2F0Y2gocnVudGltZUNvbmZpZyk7Cgl9LCByZW5ld01zKTsKCWxvZyQzLmluZm8o
YGdtYWlsIHdhdGNoZXIgc3RhcnRlZCBmb3IgJHtydW50aW1lQ29uZmlnLmFjY291bnR9IChyZW5l
dyBldmVyeSAke3J1bnRpbWVDb25maWcucmVuZXdFdmVyeU1pbnV0ZXN9bSlgKTsKCXJldHVybiB7
IHN0YXJ0ZWQ6IHRydWUgfTsKfQovKioKKiBTdG9wIHRoZSBHbWFpbCB3YXRjaGVyIHNlcnZpY2Uu
CiovCmFzeW5jIGZ1bmN0aW9uIHN0b3BHbWFpbFdhdGNoZXIoKSB7CglzaHV0dGluZ0Rvd24gPSB0
cnVlOwoJaWYgKHJlbmV3SW50ZXJ2YWwpIHsKCQljbGVhckludGVydmFsKHJlbmV3SW50ZXJ2YWwp
OwoJCXJlbmV3SW50ZXJ2YWwgPSBudWxsOwoJfQoJaWYgKHdhdGNoZXJQcm9jZXNzKSB7CgkJbG9n
JDMuaW5mbygic3RvcHBpbmcgZ21haWwgd2F0Y2hlciIpOwoJCXdhdGNoZXJQcm9jZXNzLmtpbGwo
IlNJR1RFUk0iKTsKCQlhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewoJCQljb25zdCB0
aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CgkJCQlpZiAod2F0Y2hlclByb2Nlc3MpIHdhdGNo
ZXJQcm9jZXNzLmtpbGwoIlNJR0tJTEwiKTsKCQkJCXJlc29sdmUoKTsKCQkJfSwgM2UzKTsKCQkJ
d2F0Y2hlclByb2Nlc3M/Lm9uKCJleGl0IiwgKCkgPT4gewoJCQkJY2xlYXJUaW1lb3V0KHRpbWVv
dXQpOwoJCQkJcmVzb2x2ZSgpOwoJCQl9KTsKCQl9KTsKCQl3YXRjaGVyUHJvY2VzcyA9IG51bGw7
Cgl9CgljdXJyZW50Q29uZmlnID0gbnVsbDsKCWxvZyQzLmluZm8oImdtYWlsIHdhdGNoZXIgc3Rv
cHBlZCIpOwp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dhdGV3YXkvc2VydmVyLWNsb3Nl
LnRzCmZ1bmN0aW9uIGNyZWF0ZUdhdGV3YXlDbG9zZUhhbmRsZXIocGFyYW1zKSB7CglyZXR1cm4g
YXN5bmMgKG9wdHMpID0+IHsKCQljb25zdCByZWFzb24gPSAodHlwZW9mIG9wdHM/LnJlYXNvbiA9
PT0gInN0cmluZyIgPyBvcHRzLnJlYXNvbi50cmltKCkgOiAiIikgfHwgImdhdGV3YXkgc3RvcHBp
bmciOwoJCWNvbnN0IHJlc3RhcnRFeHBlY3RlZE1zID0gdHlwZW9mIG9wdHM/LnJlc3RhcnRFeHBl
Y3RlZE1zID09PSAibnVtYmVyIiAmJiBOdW1iZXIuaXNGaW5pdGUob3B0cy5yZXN0YXJ0RXhwZWN0
ZWRNcykgPyBNYXRoLm1heCgwLCBNYXRoLmZsb29yKG9wdHMucmVzdGFydEV4cGVjdGVkTXMpKSA6
IG51bGw7CgkJaWYgKHBhcmFtcy5ib25qb3VyU3RvcCkgdHJ5IHsKCQkJYXdhaXQgcGFyYW1zLmJv
bmpvdXJTdG9wKCk7CgkJfSBjYXRjaCB7fQoJCWlmIChwYXJhbXMudGFpbHNjYWxlQ2xlYW51cCkg
YXdhaXQgcGFyYW1zLnRhaWxzY2FsZUNsZWFudXAoKTsKCQlpZiAocGFyYW1zLmNhbnZhc0hvc3Qp
IHRyeSB7CgkJCWF3YWl0IHBhcmFtcy5jYW52YXNIb3N0LmNsb3NlKCk7CgkJfSBjYXRjaCB7fQoJ
CWlmIChwYXJhbXMuY2FudmFzSG9zdFNlcnZlcikgdHJ5IHsKCQkJYXdhaXQgcGFyYW1zLmNhbnZh
c0hvc3RTZXJ2ZXIuY2xvc2UoKTsKCQl9IGNhdGNoIHt9CgkJZm9yIChjb25zdCBwbHVnaW4gb2Yg
bGlzdENoYW5uZWxQbHVnaW5zKCkpIGF3YWl0IHBhcmFtcy5zdG9wQ2hhbm5lbChwbHVnaW4uaWQp
OwoJCWlmIChwYXJhbXMucGx1Z2luU2VydmljZXMpIGF3YWl0IHBhcmFtcy5wbHVnaW5TZXJ2aWNl
cy5zdG9wKCkuY2F0Y2goKCkgPT4ge30pOwoJCWF3YWl0IHN0b3BHbWFpbFdhdGNoZXIoKTsKCQlw
YXJhbXMuY3Jvbi5zdG9wKCk7CgkJcGFyYW1zLmhlYXJ0YmVhdFJ1bm5lci5zdG9wKCk7CgkJdHJ5
IHsKCQkJcGFyYW1zLnVwZGF0ZUNoZWNrU3RvcD8uKCk7CgkJfSBjYXRjaCB7fQoJCWZvciAoY29u
c3QgdGltZXIgb2YgcGFyYW1zLm5vZGVQcmVzZW5jZVRpbWVycy52YWx1ZXMoKSkgY2xlYXJJbnRl
cnZhbCh0aW1lcik7CgkJcGFyYW1zLm5vZGVQcmVzZW5jZVRpbWVycy5jbGVhcigpOwoJCXBhcmFt
cy5icm9hZGNhc3QoInNodXRkb3duIiwgewoJCQlyZWFzb24sCgkJCXJlc3RhcnRFeHBlY3RlZE1z
CgkJfSk7CgkJY2xlYXJJbnRlcnZhbChwYXJhbXMudGlja0ludGVydmFsKTsKCQljbGVhckludGVy
dmFsKHBhcmFtcy5oZWFsdGhJbnRlcnZhbCk7CgkJY2xlYXJJbnRlcnZhbChwYXJhbXMuZGVkdXBl
Q2xlYW51cCk7CgkJaWYgKHBhcmFtcy5tZWRpYUNsZWFudXApIGNsZWFySW50ZXJ2YWwocGFyYW1z
Lm1lZGlhQ2xlYW51cCk7CgkJaWYgKHBhcmFtcy5hZ2VudFVuc3ViKSB0cnkgewoJCQlwYXJhbXMu
YWdlbnRVbnN1YigpOwoJCX0gY2F0Y2gge30KCQlpZiAocGFyYW1zLmhlYXJ0YmVhdFVuc3ViKSB0
cnkgewoJCQlwYXJhbXMuaGVhcnRiZWF0VW5zdWIoKTsKCQl9IGNhdGNoIHt9CgkJcGFyYW1zLmNo
YXRSdW5TdGF0ZS5jbGVhcigpOwoJCWZvciAoY29uc3QgYyBvZiBwYXJhbXMuY2xpZW50cykgdHJ5
IHsKCQkJYy5zb2NrZXQuY2xvc2UoMTAxMiwgInNlcnZpY2UgcmVzdGFydCIpOwoJCX0gY2F0Y2gg
e30KCQlwYXJhbXMuY2xpZW50cy5jbGVhcigpOwoJCWF3YWl0IHBhcmFtcy5jb25maWdSZWxvYWRl
ci5zdG9wKCkuY2F0Y2goKCkgPT4ge30pOwoJCWlmIChwYXJhbXMuYnJvd3NlckNvbnRyb2wpIGF3
YWl0IHBhcmFtcy5icm93c2VyQ29udHJvbC5zdG9wKCkuY2F0Y2goKCkgPT4ge30pOwoJCWF3YWl0
IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBwYXJhbXMud3NzLmNsb3NlKCgpID0+IHJlc29sdmUo
KSkpOwoJCWNvbnN0IHNlcnZlcnMgPSBwYXJhbXMuaHR0cFNlcnZlcnMgJiYgcGFyYW1zLmh0dHBT
ZXJ2ZXJzLmxlbmd0aCA+IDAgPyBwYXJhbXMuaHR0cFNlcnZlcnMgOiBbcGFyYW1zLmh0dHBTZXJ2
ZXJdOwoJCWZvciAoY29uc3Qgc2VydmVyIG9mIHNlcnZlcnMpIHsKCQkJY29uc3QgaHR0cFNlcnZl
ciA9IHNlcnZlcjsKCQkJaWYgKHR5cGVvZiBodHRwU2VydmVyLmNsb3NlSWRsZUNvbm5lY3Rpb25z
ID09PSAiZnVuY3Rpb24iKSBodHRwU2VydmVyLmNsb3NlSWRsZUNvbm5lY3Rpb25zKCk7CgkJCWF3
YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IGh0dHBTZXJ2ZXIuY2xvc2UoKGVy
cikgPT4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKCkpKTsKCQl9Cgl9Owp9Ci8vI2VuZHJl
Z2lvbgovLyNyZWdpb24gc3JjL2Nyb24vaXNvbGF0ZWQtYWdlbnQvZGVsaXZlcnktdGFyZ2V0LnRz
CmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVEZWxpdmVyeVRhcmdldChjZmcsIGFnZW50SWQsIGpvYlBh
eWxvYWQpIHsKCWNvbnN0IHJlcXVlc3RlZENoYW5uZWwgPSB0eXBlb2Ygam9iUGF5bG9hZC5jaGFu
bmVsID09PSAic3RyaW5nIiA/IGpvYlBheWxvYWQuY2hhbm5lbCA6ICJsYXN0IjsKCWNvbnN0IGV4
cGxpY2l0VG8gPSB0eXBlb2Ygam9iUGF5bG9hZC50byA9PT0gInN0cmluZyIgPyBqb2JQYXlsb2Fk
LnRvIDogdm9pZCAwOwoJY29uc3QgYWxsb3dNaXNtYXRjaGVkTGFzdFRvID0gcmVxdWVzdGVkQ2hh
bm5lbCA9PT0gImxhc3QiOwoJY29uc3Qgc2Vzc2lvbkNmZyA9IGNmZy5zZXNzaW9uOwoJY29uc3Qg
bWFpblNlc3Npb25LZXkgPSByZXNvbHZlQWdlbnRNYWluU2Vzc2lvbktleSh7CgkJY2ZnLAoJCWFn
ZW50SWQKCX0pOwoJY29uc3Qgc3RvcmUgPSBsb2FkU2Vzc2lvblN0b3JlKHJlc29sdmVTdG9yZVBh
dGgoc2Vzc2lvbkNmZz8uc3RvcmUsIHsgYWdlbnRJZCB9KSk7Cgljb25zdCB0aHJlYWRTZXNzaW9u
S2V5ID0gam9iUGF5bG9hZC5zZXNzaW9uS2V5Py50cmltKCk7Cgljb25zdCBtYWluID0gKHRocmVh
ZFNlc3Npb25LZXkgPyBzdG9yZVt0aHJlYWRTZXNzaW9uS2V5XSA6IHZvaWQgMCkgPz8gc3RvcmVb
bWFpblNlc3Npb25LZXldOwoJY29uc3QgcHJlbGltaW5hcnkgPSByZXNvbHZlU2Vzc2lvbkRlbGl2
ZXJ5VGFyZ2V0KHsKCQllbnRyeTogbWFpbiwKCQlyZXF1ZXN0ZWRDaGFubmVsLAoJCWV4cGxpY2l0
VG8sCgkJYWxsb3dNaXNtYXRjaGVkTGFzdFRvCgl9KTsKCWxldCBmYWxsYmFja0NoYW5uZWw7Cgls
ZXQgY2hhbm5lbFJlc29sdXRpb25FcnJvcjsKCWlmICghcHJlbGltaW5hcnkuY2hhbm5lbCkgaWYg
KHByZWxpbWluYXJ5Lmxhc3RDaGFubmVsKSBmYWxsYmFja0NoYW5uZWwgPSBwcmVsaW1pbmFyeS5s
YXN0Q2hhbm5lbDsKCWVsc2UgdHJ5IHsKCQlmYWxsYmFja0NoYW5uZWwgPSAoYXdhaXQgcmVzb2x2
ZU1lc3NhZ2VDaGFubmVsU2VsZWN0aW9uKHsgY2ZnIH0pKS5jaGFubmVsOwoJfSBjYXRjaCAoZXJy
KSB7CgkJY29uc3QgZGV0YWlsID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6
IFN0cmluZyhlcnIpOwoJCWNoYW5uZWxSZXNvbHV0aW9uRXJyb3IgPSAvKiBAX19QVVJFX18gKi8g
bmV3IEVycm9yKGAke2RldGFpbH0gU2V0IGRlbGl2ZXJ5LmNoYW5uZWwgZXhwbGljaXRseSBvciB1
c2UgYSBtYWluIHNlc3Npb24gd2l0aCBhIHByZXZpb3VzIGNoYW5uZWwuYCk7Cgl9Cgljb25zdCBy
ZXNvbHZlZCA9IGZhbGxiYWNrQ2hhbm5lbCA/IHJlc29sdmVTZXNzaW9uRGVsaXZlcnlUYXJnZXQo
ewoJCWVudHJ5OiBtYWluLAoJCXJlcXVlc3RlZENoYW5uZWwsCgkJZXhwbGljaXRUbywKCQlmYWxs
YmFja0NoYW5uZWwsCgkJYWxsb3dNaXNtYXRjaGVkTGFzdFRvLAoJCW1vZGU6IHByZWxpbWluYXJ5
Lm1vZGUKCX0pIDogcHJlbGltaW5hcnk7Cgljb25zdCBjaGFubmVsID0gcmVzb2x2ZWQuY2hhbm5l
bCA/PyBmYWxsYmFja0NoYW5uZWw7Cgljb25zdCBtb2RlID0gcmVzb2x2ZWQubW9kZTsKCWxldCB0
b0NhbmRpZGF0ZSA9IHJlc29sdmVkLnRvOwoJbGV0IGFjY291bnRJZCA9ICh0eXBlb2Ygam9iUGF5
bG9hZC5hY2NvdW50SWQgPT09ICJzdHJpbmciICYmIGpvYlBheWxvYWQuYWNjb3VudElkLnRyaW0o
KSA/IGpvYlBheWxvYWQuYWNjb3VudElkLnRyaW0oKSA6IHZvaWQgMCkgPz8gcmVzb2x2ZWQuYWNj
b3VudElkOwoJaWYgKCFhY2NvdW50SWQgJiYgY2hhbm5lbCkgewoJCWNvbnN0IGJvdW5kQWNjb3Vu
dHMgPSBidWlsZENoYW5uZWxBY2NvdW50QmluZGluZ3MoY2ZnKS5nZXQoY2hhbm5lbCk/LmdldChu
b3JtYWxpemVBZ2VudElkKGFnZW50SWQpKTsKCQlpZiAoYm91bmRBY2NvdW50cyAmJiBib3VuZEFj
Y291bnRzLmxlbmd0aCA+IDApIGFjY291bnRJZCA9IGJvdW5kQWNjb3VudHNbMF07Cgl9CglpZiAo
am9iUGF5bG9hZC5hY2NvdW50SWQpIGFjY291bnRJZCA9IGpvYlBheWxvYWQuYWNjb3VudElkOwoJ
Y29uc3QgdGhyZWFkSWQgPSByZXNvbHZlZC50aHJlYWRJZCAmJiAocmVzb2x2ZWQudGhyZWFkSWRF
eHBsaWNpdCB8fCByZXNvbHZlZC50byAmJiByZXNvbHZlZC50byA9PT0gcmVzb2x2ZWQubGFzdFRv
KSA/IHJlc29sdmVkLnRocmVhZElkIDogdm9pZCAwOwoJaWYgKCFjaGFubmVsKSByZXR1cm4gewoJ
CW9rOiBmYWxzZSwKCQljaGFubmVsOiB2b2lkIDAsCgkJdG86IHZvaWQgMCwKCQlhY2NvdW50SWQs
CgkJdGhyZWFkSWQsCgkJbW9kZSwKCQllcnJvcjogY2hhbm5lbFJlc29sdXRpb25FcnJvciA/PyAv
KiBAX19QVVJFX18gKi8gbmV3IEVycm9yKCJDaGFubmVsIGlzIHJlcXVpcmVkIHdoZW4gZGVsaXZl
cnkuY2hhbm5lbD1sYXN0IGhhcyBubyBwcmV2aW91cyBjaGFubmVsLiIpCgl9OwoJbGV0IGFsbG93
RnJvbU92ZXJyaWRlOwoJaWYgKGNoYW5uZWwgPT09ICJ3aGF0c2FwcCIpIHsKCQljb25zdCByZXNv
bHZlZEFjY291bnRJZCA9IG5vcm1hbGl6ZUFjY291bnRJZCQxKGFjY291bnRJZCk7CgkJY29uc3Qg
Y29uZmlndXJlZEFsbG93RnJvbSA9IChyZXNvbHZlV2hhdHNBcHBBY2NvdW50KHsKCQkJY2ZnLAoJ
CQlhY2NvdW50SWQ6IHJlc29sdmVkQWNjb3VudElkCgkJfSkuYWxsb3dGcm9tID8/IFtdKS5tYXAo
KGVudHJ5KSA9PiBTdHJpbmcoZW50cnkpLnRyaW0oKSkuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkg
JiYgZW50cnkgIT09ICIqIikubWFwKChlbnRyeSkgPT4gbm9ybWFsaXplV2hhdHNBcHBUYXJnZXQo
ZW50cnkpKS5maWx0ZXIoKGVudHJ5KSA9PiBCb29sZWFuKGVudHJ5KSk7CgkJY29uc3Qgc3RvcmVB
bGxvd0Zyb20gPSByZWFkQ2hhbm5lbEFsbG93RnJvbVN0b3JlU3luYygid2hhdHNhcHAiLCBwcm9j
ZXNzLmVudiwgcmVzb2x2ZWRBY2NvdW50SWQpLm1hcCgoZW50cnkpID0+IG5vcm1hbGl6ZVdoYXRz
QXBwVGFyZ2V0KGVudHJ5KSkuZmlsdGVyKChlbnRyeSkgPT4gQm9vbGVhbihlbnRyeSkpOwoJCWFs
bG93RnJvbU92ZXJyaWRlID0gWy4uLm5ldyBTZXQoWy4uLmNvbmZpZ3VyZWRBbGxvd0Zyb20sIC4u
LnN0b3JlQWxsb3dGcm9tXSldOwoJCWlmICh0b0NhbmRpZGF0ZSAmJiBtb2RlID09PSAiaW1wbGlj
aXQiICYmIGFsbG93RnJvbU92ZXJyaWRlLmxlbmd0aCA+IDApIHsKCQkJY29uc3Qgbm9ybWFsaXpl
ZEN1cnJlbnRUYXJnZXQgPSBub3JtYWxpemVXaGF0c0FwcFRhcmdldCh0b0NhbmRpZGF0ZSk7CgkJ
CWlmICghbm9ybWFsaXplZEN1cnJlbnRUYXJnZXQgfHwgIWFsbG93RnJvbU92ZXJyaWRlLmluY2x1
ZGVzKG5vcm1hbGl6ZWRDdXJyZW50VGFyZ2V0KSkgdG9DYW5kaWRhdGUgPSBhbGxvd0Zyb21PdmVy
cmlkZVswXTsKCQl9Cgl9Cgljb25zdCBkb2NrZWQgPSByZXNvbHZlT3V0Ym91bmRUYXJnZXQoewoJ
CWNoYW5uZWwsCgkJdG86IHRvQ2FuZGlkYXRlLAoJCWNmZywKCQlhY2NvdW50SWQsCgkJbW9kZSwK
CQlhbGxvd0Zyb206IGFsbG93RnJvbU92ZXJyaWRlCgl9KTsKCWlmICghZG9ja2VkLm9rKSByZXR1
cm4gewoJCW9rOiBmYWxzZSwKCQljaGFubmVsLAoJCXRvOiB2b2lkIDAsCgkJYWNjb3VudElkLAoJ
CXRocmVhZElkLAoJCW1vZGUsCgkJZXJyb3I6IGRvY2tlZC5lcnJvcgoJfTsKCXJldHVybiB7CgkJ
b2s6IHRydWUsCgkJY2hhbm5lbCwKCQl0bzogKGF3YWl0IG1heWJlUmVzb2x2ZUlkTGlrZVRhcmdl
dCh7CgkJCWNmZywKCQkJY2hhbm5lbCwKCQkJaW5wdXQ6IGRvY2tlZC50bywKCQkJYWNjb3VudElk
CgkJfSkpPy50byA/PyBkb2NrZWQudG8sCgkJYWNjb3VudElkLAoJCXRocmVhZElkLAoJCW1vZGUK
CX07Cn0KLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvY3Jvbi9kZWxpdmVyeS50cwpmdW5jdGlv
biBub3JtYWxpemVDaGFubmVsKHZhbHVlKSB7CglpZiAodHlwZW9mIHZhbHVlICE9PSAic3RyaW5n
IikgcmV0dXJuOwoJY29uc3QgdHJpbW1lZCA9IHZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpOwoJ
aWYgKCF0cmltbWVkKSByZXR1cm47CglyZXR1cm4gdHJpbW1lZDsKfQpmdW5jdGlvbiBub3JtYWxp
emVUbyQxKHZhbHVlKSB7CglpZiAodHlwZW9mIHZhbHVlICE9PSAic3RyaW5nIikgcmV0dXJuOwoJ
Y29uc3QgdHJpbW1lZCA9IHZhbHVlLnRyaW0oKTsKCXJldHVybiB0cmltbWVkID8gdHJpbW1lZCA6
IHZvaWQgMDsKfQpmdW5jdGlvbiBub3JtYWxpemVBY2NvdW50SWQodmFsdWUpIHsKCWlmICh0eXBl
b2YgdmFsdWUgIT09ICJzdHJpbmciKSByZXR1cm47Cgljb25zdCB0cmltbWVkID0gdmFsdWUudHJp
bSgpOwoJcmV0dXJuIHRyaW1tZWQgPyB0cmltbWVkIDogdm9pZCAwOwp9CmZ1bmN0aW9uIHJlc29s
dmVDcm9uRGVsaXZlcnlQbGFuKGpvYikgewoJY29uc3QgcGF5bG9hZCA9IGpvYi5wYXlsb2FkLmtp
bmQgPT09ICJhZ2VudFR1cm4iID8gam9iLnBheWxvYWQgOiBudWxsOwoJY29uc3QgZGVsaXZlcnkg
PSBqb2IuZGVsaXZlcnk7Cgljb25zdCBoYXNEZWxpdmVyeSA9IGRlbGl2ZXJ5ICYmIHR5cGVvZiBk
ZWxpdmVyeSA9PT0gIm9iamVjdCI7Cgljb25zdCByYXdNb2RlID0gaGFzRGVsaXZlcnkgPyBkZWxp
dmVyeS5tb2RlIDogdm9pZCAwOwoJY29uc3Qgbm9ybWFsaXplZE1vZGUgPSB0eXBlb2YgcmF3TW9k
ZSA9PT0gInN0cmluZyIgPyByYXdNb2RlLnRyaW0oKS50b0xvd2VyQ2FzZSgpIDogcmF3TW9kZTsK
CWNvbnN0IG1vZGUgPSBub3JtYWxpemVkTW9kZSA9PT0gImFubm91bmNlIiA/ICJhbm5vdW5jZSIg
OiBub3JtYWxpemVkTW9kZSA9PT0gIndlYmhvb2siID8gIndlYmhvb2siIDogbm9ybWFsaXplZE1v
ZGUgPT09ICJub25lIiA/ICJub25lIiA6IG5vcm1hbGl6ZWRNb2RlID09PSAiZGVsaXZlciIgPyAi
YW5ub3VuY2UiIDogdm9pZCAwOwoJY29uc3QgcGF5bG9hZENoYW5uZWwgPSBub3JtYWxpemVDaGFu
bmVsKHBheWxvYWQ/LmNoYW5uZWwpOwoJY29uc3QgcGF5bG9hZFRvID0gbm9ybWFsaXplVG8kMShw
YXlsb2FkPy50byk7Cgljb25zdCBkZWxpdmVyeUNoYW5uZWwgPSBub3JtYWxpemVDaGFubmVsKGRl
bGl2ZXJ5Py5jaGFubmVsKTsKCWNvbnN0IGRlbGl2ZXJ5VG8gPSBub3JtYWxpemVUbyQxKGRlbGl2
ZXJ5Py50byk7Cgljb25zdCBjaGFubmVsID0gZGVsaXZlcnlDaGFubmVsID8/IHBheWxvYWRDaGFu
bmVsID8/ICJsYXN0IjsKCWNvbnN0IHRvID0gZGVsaXZlcnlUbyA/PyBwYXlsb2FkVG87Cgljb25z
dCBkZWxpdmVyeUFjY291bnRJZCA9IG5vcm1hbGl6ZUFjY291bnRJZChkZWxpdmVyeT8uYWNjb3Vu
dElkKTsKCWlmIChoYXNEZWxpdmVyeSkgewoJCWNvbnN0IHJlc29sdmVkTW9kZSA9IG1vZGUgPz8g
ImFubm91bmNlIjsKCQlyZXR1cm4gewoJCQltb2RlOiByZXNvbHZlZE1vZGUsCgkJCWNoYW5uZWw6
IHJlc29sdmVkTW9kZSA9PT0gImFubm91bmNlIiA/IGNoYW5uZWwgOiB2b2lkIDAsCgkJCXRvLAoJ
CQlhY2NvdW50SWQ6IGRlbGl2ZXJ5QWNjb3VudElkLAoJCQlzb3VyY2U6ICJkZWxpdmVyeSIsCgkJ
CXJlcXVlc3RlZDogcmVzb2x2ZWRNb2RlID09PSAiYW5ub3VuY2UiCgkJfTsKCX0KCWNvbnN0IGxl
Z2FjeU1vZGUgPSBwYXlsb2FkPy5kZWxpdmVyID09PSB0cnVlID8gImV4cGxpY2l0IiA6IHBheWxv
YWQ/LmRlbGl2ZXIgPT09IGZhbHNlID8gIm9mZiIgOiAiYXV0byI7Cgljb25zdCByZXF1ZXN0ZWQg
PSBsZWdhY3lNb2RlID09PSAiZXhwbGljaXQiIHx8IGxlZ2FjeU1vZGUgPT09ICJhdXRvIiAmJiBC
b29sZWFuKHRvKTsKCXJldHVybiB7CgkJbW9kZTogcmVxdWVzdGVkID8gImFubm91bmNlIiA6ICJu
b25lIiwKCQljaGFubmVsLAoJCXRvLAoJCXNvdXJjZTogInBheWxvYWQiLAoJCXJlcXVlc3RlZAoJ
fTsKfQpmdW5jdGlvbiBub3JtYWxpemVGYWlsdXJlTW9kZSh2YWx1ZSkgewoJaWYgKHR5cGVvZiB2
YWx1ZSAhPT0gInN0cmluZyIpIHJldHVybjsKCWNvbnN0IHRyaW1tZWQgPSB2YWx1ZS50cmltKCku
dG9Mb3dlckNhc2UoKTsKCWlmICh0cmltbWVkID09PSAiYW5ub3VuY2UiIHx8IHRyaW1tZWQgPT09
ICJ3ZWJob29rIikgcmV0dXJuIHRyaW1tZWQ7Cn0KZnVuY3Rpb24gcmVzb2x2ZUZhaWx1cmVEZXN0
aW5hdGlvbihqb2IsIGdsb2JhbENvbmZpZykgewoJY29uc3QgZGVsaXZlcnkgPSBqb2IuZGVsaXZl
cnk7Cgljb25zdCBqb2JGYWlsdXJlRGVzdCA9IGRlbGl2ZXJ5Py5mYWlsdXJlRGVzdGluYXRpb247
Cgljb25zdCBoYXNKb2JGYWlsdXJlRGVzdCA9IGpvYkZhaWx1cmVEZXN0ICYmIHR5cGVvZiBqb2JG
YWlsdXJlRGVzdCA9PT0gIm9iamVjdCI7CglsZXQgY2hhbm5lbDsKCWxldCB0bzsKCWxldCBhY2Nv
dW50SWQ7CglsZXQgbW9kZTsKCWlmIChnbG9iYWxDb25maWcpIHsKCQljaGFubmVsID0gbm9ybWFs
aXplQ2hhbm5lbChnbG9iYWxDb25maWcuY2hhbm5lbCk7CgkJdG8gPSBub3JtYWxpemVUbyQxKGds
b2JhbENvbmZpZy50byk7CgkJYWNjb3VudElkID0gbm9ybWFsaXplQWNjb3VudElkKGdsb2JhbENv
bmZpZy5hY2NvdW50SWQpOwoJCW1vZGUgPSBub3JtYWxpemVGYWlsdXJlTW9kZShnbG9iYWxDb25m
aWcubW9kZSk7Cgl9CglpZiAoaGFzSm9iRmFpbHVyZURlc3QpIHsKCQljb25zdCBqb2JDaGFubmVs
ID0gbm9ybWFsaXplQ2hhbm5lbChqb2JGYWlsdXJlRGVzdC5jaGFubmVsKTsKCQljb25zdCBqb2JU
byA9IG5vcm1hbGl6ZVRvJDEoam9iRmFpbHVyZURlc3QudG8pOwoJCWNvbnN0IGpvYkFjY291bnRJ
ZCA9IG5vcm1hbGl6ZUFjY291bnRJZChqb2JGYWlsdXJlRGVzdC5hY2NvdW50SWQpOwoJCWNvbnN0
IGpvYk1vZGUgPSBub3JtYWxpemVGYWlsdXJlTW9kZShqb2JGYWlsdXJlRGVzdC5tb2RlKTsKCQlj
b25zdCBoYXNKb2JDaGFubmVsRmllbGQgPSAiY2hhbm5lbCIgaW4gam9iRmFpbHVyZURlc3Q7CgkJ
Y29uc3QgaGFzSm9iVG9GaWVsZCA9ICJ0byIgaW4gam9iRmFpbHVyZURlc3Q7CgkJY29uc3QgaGFz
Sm9iQWNjb3VudElkRmllbGQgPSAiYWNjb3VudElkIiBpbiBqb2JGYWlsdXJlRGVzdDsKCQljb25z
dCBqb2JUb0V4cGxpY2l0VmFsdWUgPSBoYXNKb2JUb0ZpZWxkICYmIGpvYlRvICE9PSB2b2lkIDA7
CgkJaWYgKGhhc0pvYkNoYW5uZWxGaWVsZCkgY2hhbm5lbCA9IGpvYkNoYW5uZWw7CgkJaWYgKGhh
c0pvYlRvRmllbGQpIHRvID0gam9iVG87CgkJaWYgKGhhc0pvYkFjY291bnRJZEZpZWxkKSBhY2Nv
dW50SWQgPSBqb2JBY2NvdW50SWQ7CgkJaWYgKGpvYk1vZGUgIT09IHZvaWQgMCkgewoJCQljb25z
dCBnbG9iYWxNb2RlID0gZ2xvYmFsQ29uZmlnPy5tb2RlID8/ICJhbm5vdW5jZSI7CgkJCWlmICgh
am9iVG9FeHBsaWNpdFZhbHVlICYmIGdsb2JhbE1vZGUgIT09IGpvYk1vZGUpIHRvID0gdm9pZCAw
OwoJCQltb2RlID0gam9iTW9kZTsKCQl9Cgl9CglpZiAoIWNoYW5uZWwgJiYgIXRvICYmICFhY2Nv
dW50SWQgJiYgIW1vZGUpIHJldHVybiBudWxsOwoJY29uc3QgcmVzb2x2ZWRNb2RlID0gbW9kZSA/
PyAiYW5ub3VuY2UiOwoJaWYgKHJlc29sdmVkTW9kZSA9PT0gIndlYmhvb2siICYmICF0bykgcmV0
dXJuIG51bGw7Cgljb25zdCByZXN1bHQgPSB7CgkJbW9kZTogcmVzb2x2ZWRNb2RlLAoJCWNoYW5u
ZWw6IHJlc29sdmVkTW9kZSA9PT0gImFubm91bmNlIiA/IGNoYW5uZWwgPz8gImxhc3QiIDogdm9p
ZCAwLAoJCXRvLAoJCWFjY291bnRJZAoJfTsKCWlmIChkZWxpdmVyeSAmJiBpc1NhbWVEZWxpdmVy
eVRhcmdldChkZWxpdmVyeSwgcmVzdWx0KSkgcmV0dXJuIG51bGw7CglyZXR1cm4gcmVzdWx0Owp9
CmZ1bmN0aW9uIGlzU2FtZURlbGl2ZXJ5VGFyZ2V0KGRlbGl2ZXJ5LCBmYWlsdXJlUGxhbikgewoJ
Y29uc3QgcHJpbWFyeU1vZGUgPSBkZWxpdmVyeS5tb2RlID8/ICJhbm5vdW5jZSI7CglpZiAocHJp
bWFyeU1vZGUgPT09ICJub25lIikgcmV0dXJuIGZhbHNlOwoJY29uc3QgcHJpbWFyeUNoYW5uZWwg
PSBkZWxpdmVyeS5jaGFubmVsOwoJY29uc3QgcHJpbWFyeVRvID0gZGVsaXZlcnkudG87Cgljb25z
dCBwcmltYXJ5QWNjb3VudElkID0gZGVsaXZlcnkuYWNjb3VudElkOwoJaWYgKGZhaWx1cmVQbGFu
Lm1vZGUgPT09ICJ3ZWJob29rIikgcmV0dXJuIHByaW1hcnlNb2RlID09PSAid2ViaG9vayIgJiYg
cHJpbWFyeVRvID09PSBmYWlsdXJlUGxhbi50bzsKCWNvbnN0IHByaW1hcnlDaGFubmVsTm9ybWFs
aXplZCA9IHByaW1hcnlDaGFubmVsID8/ICJsYXN0IjsKCXJldHVybiAoZmFpbHVyZVBsYW4uY2hh
bm5lbCA/PyAibGFzdCIpID09PSBwcmltYXJ5Q2hhbm5lbE5vcm1hbGl6ZWQgJiYgZmFpbHVyZVBs
YW4udG8gPT09IHByaW1hcnlUbyAmJiBmYWlsdXJlUGxhbi5hY2NvdW50SWQgPT09IHByaW1hcnlB
Y2NvdW50SWQ7Cn0KY29uc3QgRkFJTFVSRV9OT1RJRklDQVRJT05fVElNRU9VVF9NUyA9IDNlNDsK
Y29uc3QgY3JvbkRlbGl2ZXJ5TG9nZ2VyID0gZ2V0Q2hpbGRMb2dnZXIoeyBzdWJzeXN0ZW06ICJj
cm9uLWRlbGl2ZXJ5IiB9KTsKYXN5bmMgZnVuY3Rpb24gc2VuZEZhaWx1cmVOb3RpZmljYXRpb25B
bm5vdW5jZShkZXBzLCBjZmcsIGFnZW50SWQsIGpvYklkLCB0YXJnZXQsIG1lc3NhZ2UpIHsKCWNv
bnN0IHJlc29sdmVkVGFyZ2V0ID0gYXdhaXQgcmVzb2x2ZURlbGl2ZXJ5VGFyZ2V0KGNmZywgYWdl
bnRJZCwgewoJCWNoYW5uZWw6IHRhcmdldC5jaGFubmVsLAoJCXRvOiB0YXJnZXQudG8sCgkJYWNj
b3VudElkOiB0YXJnZXQuYWNjb3VudElkCgl9KTsKCWlmICghcmVzb2x2ZWRUYXJnZXQub2spIHsK
CQljcm9uRGVsaXZlcnlMb2dnZXIud2Fybih7IGVycm9yOiByZXNvbHZlZFRhcmdldC5lcnJvci5t
ZXNzYWdlIH0sICJjcm9uOiBmYWlsZWQgdG8gcmVzb2x2ZSBmYWlsdXJlIGRlc3RpbmF0aW9uIHRh
cmdldCIpOwoJCXJldHVybjsKCX0KCWNvbnN0IGlkZW50aXR5ID0gcmVzb2x2ZUFnZW50T3V0Ym91
bmRJZGVudGl0eShjZmcsIGFnZW50SWQpOwoJY29uc3Qgc2Vzc2lvbiA9IGJ1aWxkT3V0Ym91bmRT
ZXNzaW9uQ29udGV4dCh7CgkJY2ZnLAoJCWFnZW50SWQsCgkJc2Vzc2lvbktleTogYGNyb246JHtq
b2JJZH06ZmFpbHVyZWAKCX0pOwoJY29uc3QgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29u
dHJvbGxlcigpOwoJY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gewoJCWFib3J0Q29u
dHJvbGxlci5hYm9ydCgpOwoJfSwgRkFJTFVSRV9OT1RJRklDQVRJT05fVElNRU9VVF9NUyk7Cgl0
cnkgewoJCXRyeSB7IGxvZ1RvUHl0aG9uKCJvdXRib3VuZCIsIHsgbWVzc2FnZSwgY2hhbm5lbCwg
dGFyZ2V0OiBkZWxpdmVyeVRhcmdldCB9KTsgfSBjYXRjaCB7fQphd2FpdCBkZWxpdmVyT3V0Ym91
bmRQYXlsb2Fkcyh7CgkJCWNmZywKCQkJY2hhbm5lbDogcmVzb2x2ZWRUYXJnZXQuY2hhbm5lbCwK
CQkJdG86IHJlc29sdmVkVGFyZ2V0LnRvLAoJCQlhY2NvdW50SWQ6IHJlc29sdmVkVGFyZ2V0LmFj
Y291bnRJZCwKCQkJdGhyZWFkSWQ6IHJlc29sdmVkVGFyZ2V0LnRocmVhZElkLAoJCQlwYXlsb2Fk
czogW3sgdGV4dDogbWVzc2FnZSB9XSwKCQkJc2Vzc2lvbiwKCQkJaWRlbnRpdHksCgkJCWJlc3RF
ZmZvcnQ6IGZhbHNlLAoJCQlkZXBzOiBjcmVhdGVPdXRib3VuZFNlbmREZXBzKGRlcHMpLAoJCQlh
Ym9ydFNpZ25hbDogYWJvcnRDb250cm9sbGVyLnNpZ25hbAoJCX0pOwoJfSBjYXRjaCAoZXJyKSB7
CgkJY3JvbkRlbGl2ZXJ5TG9nZ2VyLndhcm4oewoJCQllcnI6IGZvcm1hdEVycm9yTWVzc2FnZShl
cnIpLAoJCQljaGFubmVsOiByZXNvbHZlZFRhcmdldC5jaGFubmVsLAoJCQl0bzogcmVzb2x2ZWRU
YXJnZXQudG8KCQl9LCAiY3JvbjogZmFpbHVyZSBkZXN0aW5hdGlvbiBhbm5vdW5jZSBmYWlsZWQi
KTsKCX0gZmluYWxseSB7CgkJY2xlYXJUaW1lb3V0KHRpbWVvdXQpOwoJfQp9Ci8vI2VuZHJlZ2lv
bgovLyNyZWdpb24gc3JjL2Nyb24vaGVhcnRiZWF0LXBvbGljeS50cwpmdW5jdGlvbiBzaG91bGRT
a2lwSGVhcnRiZWF0T25seURlbGl2ZXJ5KHBheWxvYWRzLCBhY2tNYXhDaGFycykgewoJaWYgKHBh
eWxvYWRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7CglpZiAocGF5bG9hZHMuc29tZSgocGF5
bG9hZCkgPT4gKHBheWxvYWQubWVkaWFVcmxzPy5sZW5ndGggPz8gMCkgPiAwIHx8IEJvb2xlYW4o
cGF5bG9hZC5tZWRpYVVybCkpKSByZXR1cm4gZmFsc2U7CglyZXR1cm4gcGF5bG9hZHMuc29tZSgo
cGF5bG9hZCkgPT4gewoJCXJldHVybiBzdHJpcEhlYXJ0YmVhdFRva2VuKHBheWxvYWQudGV4dCwg
ewoJCQltb2RlOiAiaGVhcnRiZWF0IiwKCQkJbWF4QWNrQ2hhcnM6IGFja01heENoYXJzCgkJfSku
c2hvdWxkU2tpcDsKCX0pOwp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2Nyb24vaXNvbGF0
ZWQtYWdlbnQvaGVscGVycy50cwpmdW5jdGlvbiBwaWNrU3VtbWFyeUZyb21PdXRwdXQodGV4dCkg
ewoJY29uc3QgY2xlYW4gPSAodGV4dCA/PyAiIikudHJpbSgpOwoJaWYgKCFjbGVhbikgcmV0dXJu
OwoJY29uc3QgbGltaXQgPSAyZTM7CglyZXR1cm4gY2xlYW4ubGVuZ3RoID4gbGltaXQgPyBgJHt0
cnVuY2F0ZVV0ZjE2U2FmZShjbGVhbiwgbGltaXQpfeKApmAgOiBjbGVhbjsKfQpmdW5jdGlvbiBw
aWNrU3VtbWFyeUZyb21QYXlsb2FkcyhwYXlsb2FkcykgewoJZm9yIChsZXQgaSA9IHBheWxvYWRz
Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CgkJaWYgKHBheWxvYWRzW2ldPy5pc0Vycm9yKSBj
b250aW51ZTsKCQljb25zdCBzdW1tYXJ5ID0gcGlja1N1bW1hcnlGcm9tT3V0cHV0KHBheWxvYWRz
W2ldPy50ZXh0KTsKCQlpZiAoc3VtbWFyeSkgcmV0dXJuIHN1bW1hcnk7Cgl9Cglmb3IgKGxldCBp
ID0gcGF5bG9hZHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKCQljb25zdCBzdW1tYXJ5ID0g
cGlja1N1bW1hcnlGcm9tT3V0cHV0KHBheWxvYWRzW2ldPy50ZXh0KTsKCQlpZiAoc3VtbWFyeSkg
cmV0dXJuIHN1bW1hcnk7Cgl9Cn0KZnVuY3Rpb24gcGlja0xhc3ROb25FbXB0eVRleHRGcm9tUGF5
bG9hZHMocGF5bG9hZHMpIHsKCWZvciAobGV0IGkgPSBwYXlsb2Fkcy5sZW5ndGggLSAxOyBpID49
IDA7IGktLSkgewoJCWlmIChwYXlsb2Fkc1tpXT8uaXNFcnJvcikgY29udGludWU7CgkJY29uc3Qg
Y2xlYW4gPSAocGF5bG9hZHNbaV0/LnRleHQgPz8gIiIpLnRyaW0oKTsKCQlpZiAoY2xlYW4pIHJl
dHVybiBjbGVhbjsKCX0KCWZvciAobGV0IGkgPSBwYXlsb2Fkcy5sZW5ndGggLSAxOyBpID49IDA7
IGktLSkgewoJCWNvbnN0IGNsZWFuID0gKHBheWxvYWRzW2ldPy50ZXh0ID8/ICIiKS50cmltKCk7
CgkJaWYgKGNsZWFuKSByZXR1cm4gY2xlYW47Cgl9Cn0KZnVuY3Rpb24gcGlja0xhc3REZWxpdmVy
YWJsZVBheWxvYWQocGF5bG9hZHMpIHsKCWNvbnN0IGlzRGVsaXZlcmFibGUgPSAocCkgPT4gewoJ
CWNvbnN0IHRleHQgPSAocD8udGV4dCA/PyAiIikudHJpbSgpOwoJCWNvbnN0IGhhc01lZGlhID0g
Qm9vbGVhbihwPy5tZWRpYVVybCkgfHwgKHA/Lm1lZGlhVXJscz8ubGVuZ3RoID8/IDApID4gMDsK
CQljb25zdCBoYXNDaGFubmVsRGF0YSA9IE9iamVjdC5rZXlzKHA/LmNoYW5uZWxEYXRhID8/IHt9
KS5sZW5ndGggPiAwOwoJCXJldHVybiB0ZXh0IHx8IGhhc01lZGlhIHx8IGhhc0NoYW5uZWxEYXRh
OwoJfTsKCWZvciAobGV0IGkgPSBwYXlsb2Fkcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewoJ
CWlmIChwYXlsb2Fkc1tpXT8uaXNFcnJvcikgY29udGludWU7CgkJaWYgKGlzRGVsaXZlcmFibGUo
cGF5bG9hZHNbaV0pKSByZXR1cm4gcGF5bG9hZHNbaV07Cgl9Cglmb3IgKGxldCBpID0gcGF5bG9h
ZHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChpc0RlbGl2ZXJhYmxlKHBheWxvYWRzW2ld
KSkgcmV0dXJuIHBheWxvYWRzW2ldOwp9Ci8qKgoqIENoZWNrIGlmIGRlbGl2ZXJ5IHNob3VsZCBi
ZSBza2lwcGVkIGJlY2F1c2UgdGhlIGFnZW50IHNpZ25hbGVkIG5vIHVzZXItdmlzaWJsZSB1cGRh
dGUuCiogUmV0dXJucyB0cnVlIHdoZW4gYW55IHBheWxvYWQgaXMgYSBoZWFydGJlYXQgYWNrIHRv
a2VuIGFuZCBubyBwYXlsb2FkIGNvbnRhaW5zIG1lZGlhLgoqLwpmdW5jdGlvbiBpc0hlYXJ0YmVh
dE9ubHlSZXNwb25zZShwYXlsb2FkcywgYWNrTWF4Q2hhcnMpIHsKCXJldHVybiBzaG91bGRTa2lw
SGVhcnRiZWF0T25seURlbGl2ZXJ5KHBheWxvYWRzLCBhY2tNYXhDaGFycyk7Cn0KZnVuY3Rpb24g
cmVzb2x2ZUhlYXJ0YmVhdEFja01heENoYXJzKGFnZW50Q2ZnKSB7Cgljb25zdCByYXcgPSBhZ2Vu
dENmZz8uaGVhcnRiZWF0Py5hY2tNYXhDaGFycyA/PyAzMDA7CglyZXR1cm4gTWF0aC5tYXgoMCwg
cmF3KTsKfQovLyNlbmRyZWdpb24KLy8jcmVnaW9uIHNyYy9jcm9uL2lzb2xhdGVkLWFnZW50L3N1
YmFnZW50LWZvbGxvd3VwLnRzCmNvbnN0IEZBU1RfVEVTVF9NT0RFID0gcHJvY2Vzcy5lbnYuT1BF
TkNMQVdfVEVTVF9GQVNUID09PSAiMSI7CmNvbnN0IENST05fU1VCQUdFTlRfV0FJVF9NSU5fTVMg
PSBGQVNUX1RFU1RfTU9ERSA/IDEwIDogM2U0Owpjb25zdCBDUk9OX1NVQkFHRU5UX0ZJTkFMX1JF
UExZX0dSQUNFX01TID0gRkFTVF9URVNUX01PREUgPyA1MCA6IDVlMzsKY29uc3QgQ1JPTl9TVUJB
R0VOVF9HUkFDRV9QT0xMX01TID0gRkFTVF9URVNUX01PREUgPyA4IDogMjAwOwpjb25zdCBTVUJB
R0VOVF9GT0xMT1dVUF9ISU5UUyA9IFsKCSJzdWJhZ2VudCBzcGF3bmVkIiwKCSJzcGF3bmVkIGEg
c3ViYWdlbnQiLAoJImF1dG8tYW5ub3VuY2Ugd2hlbiBkb25lIiwKCSJib3RoIHN1YmFnZW50cyBh
cmUgcnVubmluZyIsCgkid2FpdCBmb3IgdGhlbSB0byByZXBvcnQgYmFjayIKXTsKY29uc3QgSU5U
RVJJTV9DUk9OX0hJTlRTID0gWwoJIm9uIGl0IiwKCSJwdWxsaW5nIGV2ZXJ5dGhpbmcgdG9nZXRo
ZXIiLAoJImdpdmUgbWUgYSBmZXciLAoJImdpdmUgbWUgYSBmZXcgbWluIiwKCSJmZXcgbWludXRl
cyIsCgkibGV0IG1lIGNvbXBpbGUiLAoJImknbGwgZ2F0aGVyIiwKCSJpIHdpbGwgZ2F0aGVyIiwK
CSJ3b3JraW5nIG9uIGl0IiwKCSJyZXRyeWluZyBub3ciLAoJInNob3VsZCBiZSBhYm91dCIsCgki
c2hvdWxkIGhhdmUgeW91ciBzdW1tYXJ5IiwKCSJpdCdsbCBhdXRvLWFubm91bmNlIHdoZW4gZG9u
ZSIsCgkiaXQgd2lsbCBhdXRvLWFubm91bmNlIHdoZW4gZG9uZSIsCgkuLi5TVUJBR0VOVF9GT0xM
T1dVUF9ISU5UUwpdOwpmdW5jdGlvbiBub3JtYWxpemVIaW50VGV4dCh2YWx1ZSkgewoJcmV0dXJu
IHZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xzKy9nLCAiICIpOwp9CmZ1bmN0
aW9uIGlzTGlrZWx5SW50ZXJpbUNyb25NZXNzYWdlKHZhbHVlKSB7Cgljb25zdCBub3JtYWxpemVk
ID0gbm9ybWFsaXplSGludFRleHQodmFsdWUpOwoJaWYgKCFub3JtYWxpemVkKSByZXR1cm4gZmFs
c2U7CglyZXR1cm4gbm9ybWFsaXplZC5zcGxpdCgiICIpLmZpbHRlcihCb29sZWFuKS5sZW5ndGgg
PD0gNDUgJiYgSU5URVJJTV9DUk9OX0hJTlRTLnNvbWUoKGhpbnQpID0+IG5vcm1hbGl6ZWQuaW5j
bHVkZXMoaGludCkpOwp9CmZ1bmN0aW9uIGV4cGVjdHNTdWJhZ2VudEZvbGxvd3VwKHZhbHVlKSB7
Cgljb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplSGludFRleHQodmFsdWUpOwoJcmV0dXJuIEJv
b2xlYW4obm9ybWFsaXplZCAmJiBTVUJBR0VOVF9GT0xMT1dVUF9ISU5UUy5zb21lKChoaW50KSA9
PiBub3JtYWxpemVkLmluY2x1ZGVzKGhpbnQpKSk7Cn0KYXN5bmMgZnVuY3Rpb24gcmVhZERlc2Nl
bmRhbnRTdWJhZ2VudEZhbGxiYWNrUmVwbHkocGFyYW1zKSB7Cgljb25zdCBkZXNjZW5kYW50cyA9
IGxpc3REZXNjZW5kYW50UnVuc0ZvclJlcXVlc3RlcihwYXJhbXMuc2Vzc2lvbktleSkuZmlsdGVy
KChlbnRyeSkgPT4gdHlwZW9mIGVudHJ5LmVuZGVkQXQgPT09ICJudW1iZXIiICYmIGVudHJ5LmVu
ZGVkQXQgPj0gcGFyYW1zLnJ1blN0YXJ0ZWRBdCAmJiBlbnRyeS5jaGlsZFNlc3Npb25LZXkudHJp
bSgpLmxlbmd0aCA+IDApLnRvU29ydGVkKChhLCBiKSA9PiAoYS5lbmRlZEF0ID8/IDApIC0gKGIu
ZW5kZWRBdCA/PyAwKSk7CglpZiAoZGVzY2VuZGFudHMubGVuZ3RoID09PSAwKSByZXR1cm47Cglj
b25zdCBsYXRlc3RCeUNoaWxkID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKCWZvciAoY29u
c3QgZW50cnkgb2YgZGVzY2VuZGFudHMpIHsKCQljb25zdCBjaGlsZEtleSA9IGVudHJ5LmNoaWxk
U2Vzc2lvbktleS50cmltKCk7CgkJaWYgKCFjaGlsZEtleSkgY29udGludWU7CgkJY29uc3QgY3Vy
cmVudCA9IGxhdGVzdEJ5Q2hpbGQuZ2V0KGNoaWxkS2V5KTsKCQlpZiAoIWN1cnJlbnQgfHwgKGVu
dHJ5LmVuZGVkQXQgPz8gMCkgPj0gKGN1cnJlbnQuZW5kZWRBdCA/PyAwKSkgbGF0ZXN0QnlDaGls
ZC5zZXQoY2hpbGRLZXksIGVudHJ5KTsKCX0KCWNvbnN0IHJlcGxpZXMgPSBbXTsKCWNvbnN0IGxh
dGVzdFJ1bnMgPSBbLi4ubGF0ZXN0QnlDaGlsZC52YWx1ZXMoKV0udG9Tb3J0ZWQoKGEsIGIpID0+
IChhLmVuZGVkQXQgPz8gMCkgLSAoYi5lbmRlZEF0ID8/IDApKS5zbGljZSgtNCk7Cglmb3IgKGNv
bnN0IGVudHJ5IG9mIGxhdGVzdFJ1bnMpIHsKCQlsZXQgcmVwbHkgPSAoYXdhaXQgcmVhZExhdGVz
dEFzc2lzdGFudFJlcGx5KHsgc2Vzc2lvbktleTogZW50cnkuY2hpbGRTZXNzaW9uS2V5IH0pKT8u
dHJpbSgpOwoJCWlmICghcmVwbHkgJiYgdHlwZW9mIGVudHJ5LmZyb3plblJlc3VsdFRleHQgPT09
ICJzdHJpbmciICYmIGVudHJ5LmZyb3plblJlc3VsdFRleHQudHJpbSgpKSByZXBseSA9IGVudHJ5
LmZyb3plblJlc3VsdFRleHQudHJpbSgpOwoJCWlmICghcmVwbHkgfHwgcmVwbHkudG9VcHBlckNh
c2UoKSA9PT0gIk5PX1JFUExZIi50b1VwcGVyQ2FzZSgpKSBjb250aW51ZTsKCQlyZXBsaWVzLnB1
c2gocmVwbHkpOwoJfQoJaWYgKHJlcGxpZXMubGVuZ3RoID09PSAwKSByZXR1cm47CglpZiAocmVw
bGllcy5sZW5ndGggPT09IDEpIHJldHVybiByZXBsaWVzWzBdOwoJcmV0dXJuIHJlcGxpZXMuam9p
bigiXG5cbiIpOwp9Ci8qKgoqIFdhaXRzIGZvciBkZXNjZW5kYW50IHN1YmFnZW50cyB0byBjb21w
bGV0ZSB1c2luZyBhIHB1c2gtYmFzZWQgYXBwcm9hY2g6CiogZWFjaCBhY3RpdmUgZGVzY2VuZGFu
dCBydW4gaXMgYXdhaXRlZCB2aWEgYGFnZW50LndhaXRgIChnYXRld2F5IFJQQykgaW5zdGVhZAoq
IG9mIGEgYnVzeS1wb2xsIGxvb3AuICBBZnRlciBhbGwgYWN0aXZlIHJ1bnMgc2V0dGxlLCBhIHNo
b3J0IGdyYWNlIHBlcmlvZAoqIHBvbGxzIHRoZSBjcm9uIGFnZW50J3Mgc2Vzc2lvbiBmb3IgYSBw
b3N0LW9yY2hlc3RyYXRpb24gc3ludGhlc2lzIG1lc3NhZ2UuCiovCmFzeW5jIGZ1bmN0aW9uIHdh
aXRGb3JEZXNjZW5kYW50U3ViYWdlbnRTdW1tYXJ5KHBhcmFtcykgewoJY29uc3QgaW5pdGlhbFJl
cGx5ID0gcGFyYW1zLmluaXRpYWxSZXBseT8udHJpbSgpOwoJY29uc3QgZGVhZGxpbmUgPSBEYXRl
Lm5vdygpICsgTWF0aC5tYXgoQ1JPTl9TVUJBR0VOVF9XQUlUX01JTl9NUywgTWF0aC5mbG9vcihw
YXJhbXMudGltZW91dE1zKSk7Cgljb25zdCBnZXRBY3RpdmVSdW5zID0gKCkgPT4gbGlzdERlc2Nl
bmRhbnRSdW5zRm9yUmVxdWVzdGVyKHBhcmFtcy5zZXNzaW9uS2V5KS5maWx0ZXIoKGVudHJ5KSA9
PiB0eXBlb2YgZW50cnkuZW5kZWRBdCAhPT0gIm51bWJlciIpOwoJY29uc3QgaW5pdGlhbEFjdGl2
ZVJ1bnMgPSBnZXRBY3RpdmVSdW5zKCk7CglpZiAoIShwYXJhbXMub2JzZXJ2ZWRBY3RpdmVEZXNj
ZW5kYW50cyA9PT0gdHJ1ZSB8fCBpbml0aWFsQWN0aXZlUnVucy5sZW5ndGggPiAwKSkgcmV0dXJu
IGluaXRpYWxSZXBseTsKCWxldCBwZW5kaW5nUnVuSWRzID0gbmV3IFNldChpbml0aWFsQWN0aXZl
UnVucy5tYXAoKGUpID0+IGUucnVuSWQpKTsKCXdoaWxlIChwZW5kaW5nUnVuSWRzLnNpemUgPiAw
ICYmIERhdGUubm93KCkgPCBkZWFkbGluZSkgewoJCWNvbnN0IHJlbWFpbmluZ01zID0gTWF0aC5t
YXgoMSwgZGVhZGxpbmUgLSBEYXRlLm5vdygpKTsKCQlhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQo
Wy4uLnBlbmRpbmdSdW5JZHNdLm1hcCgocnVuSWQpID0+IGNhbGxHYXRld2F5KHsKCQkJbWV0aG9k
OiAiYWdlbnQud2FpdCIsCgkJCXBhcmFtczogewoJCQkJcnVuSWQsCgkJCQl0aW1lb3V0TXM6IHJl
bWFpbmluZ01zCgkJCX0sCgkJCXRpbWVvdXRNczogcmVtYWluaW5nTXMgKyAyZTMKCQl9KS5jYXRj
aCgoKSA9PiB2b2lkIDApKSk7CgkJcGVuZGluZ1J1bklkcyA9IG5ldyBTZXQoZ2V0QWN0aXZlUnVu
cygpLm1hcCgoZSkgPT4gZS5ydW5JZCkpOwoJfQoJY29uc3QgZ3JhY2VQZXJpb2REZWFkbGluZSA9
IE1hdGgubWluKERhdGUubm93KCkgKyBDUk9OX1NVQkFHRU5UX0ZJTkFMX1JFUExZX0dSQUNFX01T
LCBkZWFkbGluZSk7Cgljb25zdCByZXNvbHZlVXNhYmxlTGF0ZXN0UmVwbHkgPSBhc3luYyAoKSA9
PiB7CgkJY29uc3QgbGF0ZXN0ID0gKGF3YWl0IHJlYWRMYXRlc3RBc3Npc3RhbnRSZXBseSh7IHNl
c3Npb25LZXk6IHBhcmFtcy5zZXNzaW9uS2V5IH0pKT8udHJpbSgpOwoJCWlmIChsYXRlc3QgJiYg
bGF0ZXN0LnRvVXBwZXJDYXNlKCkgIT09ICJOT19SRVBMWSIudG9VcHBlckNhc2UoKSAmJiAobGF0
ZXN0ICE9PSBpbml0aWFsUmVwbHkgfHwgIWlzTGlrZWx5SW50ZXJpbUNyb25NZXNzYWdlKGxhdGVz
dCkpKSByZXR1cm4gbGF0ZXN0OwoJfTsKCXdoaWxlIChEYXRlLm5vdygpIDwgZ3JhY2VQZXJpb2RE
ZWFkbGluZSkgewoJCWNvbnN0IGxhdGVzdCA9IGF3YWl0IHJlc29sdmVVc2FibGVMYXRlc3RSZXBs
eSgpOwoJCWlmIChsYXRlc3QpIHJldHVybiBsYXRlc3Q7CgkJYXdhaXQgbmV3IFByb21pc2UoKHJl
c29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgQ1JPTl9TVUJBR0VOVF9HUkFDRV9QT0xMX01T
KSk7Cgl9Cgljb25zdCBsYXRlc3QgPSBhd2FpdCByZXNvbHZlVXNhYmxlTGF0ZXN0UmVwbHkoKTsK
CWlmIChsYXRlc3QpIHJldHVybiBsYXRlc3Q7Cn0KLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMv
Y3Jvbi9pc29sYXRlZC1hZ2VudC9kZWxpdmVyeS1kaXNwYXRjaC50cwpmdW5jdGlvbiBub3JtYWxp
emVEZWxpdmVyeVRhcmdldChjaGFubmVsLCB0bykgewoJY29uc3QgY2hhbm5lbExvd2VyID0gY2hh
bm5lbC50cmltKCkudG9Mb3dlckNhc2UoKTsKCWNvbnN0IHRvVHJpbW1lZCA9IHRvLnRyaW0oKTsK
CWlmIChjaGFubmVsTG93ZXIgPT09ICJmZWlzaHUiIHx8IGNoYW5uZWxMb3dlciA9PT0gImxhcmsi
KSB7CgkJY29uc3QgbG93ZXJlZCA9IHRvVHJpbW1lZC50b0xvd2VyQ2FzZSgpOwoJCWlmIChsb3dl
cmVkLnN0YXJ0c1dpdGgoInVzZXI6IikpIHJldHVybiB0b1RyaW1tZWQuc2xpY2UoNSkudHJpbSgp
OwoJCWlmIChsb3dlcmVkLnN0YXJ0c1dpdGgoImNoYXQ6IikpIHJldHVybiB0b1RyaW1tZWQuc2xp
Y2UoNSkudHJpbSgpOwoJfQoJcmV0dXJuIHRvVHJpbW1lZDsKfQpmdW5jdGlvbiBtYXRjaGVzTWVz
c2FnaW5nVG9vbERlbGl2ZXJ5VGFyZ2V0KHRhcmdldCwgZGVsaXZlcnkpIHsKCWlmICghZGVsaXZl
cnkuY2hhbm5lbCB8fCAhZGVsaXZlcnkudG8gfHwgIXRhcmdldC50bykgcmV0dXJuIGZhbHNlOwoJ
Y29uc3QgY2hhbm5lbCA9IGRlbGl2ZXJ5LmNoYW5uZWwudHJpbSgpLnRvTG93ZXJDYXNlKCk7Cglj
b25zdCBwcm92aWRlciA9IHRhcmdldC5wcm92aWRlcj8udHJpbSgpLnRvTG93ZXJDYXNlKCk7Cglp
ZiAocHJvdmlkZXIgJiYgcHJvdmlkZXIgIT09ICJtZXNzYWdlIiAmJiBwcm92aWRlciAhPT0gY2hh
bm5lbCkgcmV0dXJuIGZhbHNlOwoJaWYgKHRhcmdldC5hY2NvdW50SWQgJiYgZGVsaXZlcnkuYWNj
b3VudElkICYmIHRhcmdldC5hY2NvdW50SWQgIT09IGRlbGl2ZXJ5LmFjY291bnRJZCkgcmV0dXJu
IGZhbHNlOwoJcmV0dXJuIG5vcm1hbGl6ZURlbGl2ZXJ5VGFyZ2V0KGNoYW5uZWwsIHRhcmdldC50
by5yZXBsYWNlKC86dG9waWM6XGQrJC8sICIiKSkgPT09IG5vcm1hbGl6ZURlbGl2ZXJ5VGFyZ2V0
KGNoYW5uZWwsIGRlbGl2ZXJ5LnRvKTsKfQpmdW5jdGlvbiByZXNvbHZlQ3JvbkRlbGl2ZXJ5QmVz
dEVmZm9ydChqb2IpIHsKCWlmICh0eXBlb2Ygam9iLmRlbGl2ZXJ5Py5iZXN0RWZmb3J0ID09PSAi
Ym9vbGVhbiIpIHJldHVybiBqb2IuZGVsaXZlcnkuYmVzdEVmZm9ydDsKCWlmIChqb2IucGF5bG9h
ZC5raW5kID09PSAiYWdlbnRUdXJuIiAmJiB0eXBlb2Ygam9iLnBheWxvYWQuYmVzdEVmZm9ydERl
bGl2ZXIgPT09ICJib29sZWFuIikgcmV0dXJuIGpvYi5wYXlsb2FkLmJlc3RFZmZvcnREZWxpdmVy
OwoJcmV0dXJuIGZhbHNlOwp9CmNvbnN0IFRSQU5TSUVOVF9ESVJFQ1RfQ1JPTl9ERUxJVkVSWV9F
UlJPUl9QQVRURVJOUyA9IFsKCS9cYmVycm9yY29kZT11bmF2YWlsYWJsZVxiL2ksCgkvXGJzdGF0
dXNccypbOj1dXHMqIj91bmF2YWlsYWJsZVxiL2ksCgkvXGJVTkFWQUlMQUJMRVxiLywKCS9ubyBh
Y3RpdmUgLiogbGlzdGVuZXIvaSwKCS9nYXRld2F5IG5vdCBjb25uZWN0ZWQvaSwKCS9nYXRld2F5
IGNsb3NlZCBcKDEwMDYvaSwKCS9nYXRld2F5IHRpbWVvdXQvaSwKCS9cYihlY29ubnJlc2V0fGVj
b25ucmVmdXNlZHxldGltZWRvdXR8ZW5vdGZvdW5kfGVob3N0dW5yZWFjaHxuZXR3b3JrIGVycm9y
KVxiL2kKXTsKY29uc3QgUEVSTUFORU5UX0RJUkVDVF9DUk9OX0RFTElWRVJZX0VSUk9SX1BBVFRF
Uk5TID0gWwoJL3Vuc3VwcG9ydGVkIGNoYW5uZWwvaSwKCS91bmtub3duIGNoYW5uZWwvaSwKCS9j
aGF0IG5vdCBmb3VuZC9pLAoJL3VzZXIgbm90IGZvdW5kL2ksCgkvYm90IHdhcyBibG9ja2VkIGJ5
IHRoZSB1c2VyL2ksCgkvZm9yYmlkZGVuOiBib3Qgd2FzIGtpY2tlZC9pLAoJL3JlY2lwaWVudCBp
cyBub3QgYSB2YWxpZC9pLAoJL291dGJvdW5kIG5vdCBjb25maWd1cmVkIGZvciBjaGFubmVsL2kK
XTsKY29uc3QgQ09NUExFVEVEX0RJUkVDVF9DUk9OX0RFTElWRVJJRVMgPSAvKiBAX19QVVJFX18g
Ki8gbmV3IE1hcCgpOwpmdW5jdGlvbiBjbG9uZURlbGl2ZXJ5UmVzdWx0cyhyZXN1bHRzKSB7Cgly
ZXR1cm4gcmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gKHsKCQkuLi5yZXN1bHQsCgkJLi4ucmVzdWx0
Lm1ldGEgPyB7IG1ldGE6IHsgLi4ucmVzdWx0Lm1ldGEgfSB9IDoge30KCX0pKTsKfQpmdW5jdGlv
biBwcnVuZUNvbXBsZXRlZERpcmVjdENyb25EZWxpdmVyaWVzKG5vdykgewoJY29uc3QgdHRsTXMg
PSBwcm9jZXNzLmVudi5PUEVOQ0xBV19URVNUX0ZBU1QgPT09ICIxIiA/IDZlNCA6IDE0NDAgKiA2
MCAqIDFlMzsKCWZvciAoY29uc3QgW2tleSwgZW50cnldIG9mIENPTVBMRVRFRF9ESVJFQ1RfQ1JP
Tl9ERUxJVkVSSUVTKSBpZiAobm93IC0gZW50cnkudHMgPj0gdHRsTXMpIENPTVBMRVRFRF9ESVJF
Q1RfQ1JPTl9ERUxJVkVSSUVTLmRlbGV0ZShrZXkpOwoJY29uc3QgbWF4RW50cmllcyA9IDJlMzsK
CWlmIChDT01QTEVURURfRElSRUNUX0NST05fREVMSVZFUklFUy5zaXplIDw9IG1heEVudHJpZXMp
IHJldHVybjsKCWNvbnN0IGVudHJpZXMgPSBbLi4uQ09NUExFVEVEX0RJUkVDVF9DUk9OX0RFTElW
RVJJRVMuZW50cmllcygpXS50b1NvcnRlZCgoYSwgYikgPT4gYVsxXS50cyAtIGJbMV0udHMpOwoJ
Y29uc3QgdG9EZWxldGUgPSBDT01QTEVURURfRElSRUNUX0NST05fREVMSVZFUklFUy5zaXplIC0g
bWF4RW50cmllczsKCWZvciAobGV0IGkgPSAwOyBpIDwgdG9EZWxldGU7IGkgKz0gMSkgewoJCWNv
bnN0IG9sZGVzdCA9IGVudHJpZXNbaV07CgkJaWYgKCFvbGRlc3QpIGJyZWFrOwoJCUNPTVBMRVRF
RF9ESVJFQ1RfQ1JPTl9ERUxJVkVSSUVTLmRlbGV0ZShvbGRlc3RbMF0pOwoJfQp9CmZ1bmN0aW9u
IHJlbWVtYmVyQ29tcGxldGVkRGlyZWN0Q3JvbkRlbGl2ZXJ5KGlkZW1wb3RlbmN5S2V5LCByZXN1
bHRzKSB7Cgljb25zdCBub3cgPSBEYXRlLm5vdygpOwoJQ09NUExFVEVEX0RJUkVDVF9DUk9OX0RF
TElWRVJJRVMuc2V0KGlkZW1wb3RlbmN5S2V5LCB7CgkJdHM6IG5vdywKCQlyZXN1bHRzOiBjbG9u
ZURlbGl2ZXJ5UmVzdWx0cyhyZXN1bHRzKQoJfSk7CglwcnVuZUNvbXBsZXRlZERpcmVjdENyb25E
ZWxpdmVyaWVzKG5vdyk7Cn0KZnVuY3Rpb24gZ2V0Q29tcGxldGVkRGlyZWN0Q3JvbkRlbGl2ZXJ5
KGlkZW1wb3RlbmN5S2V5KSB7CglwcnVuZUNvbXBsZXRlZERpcmVjdENyb25EZWxpdmVyaWVzKERh
dGUubm93KCkpOwoJY29uc3QgY2FjaGVkID0gQ09NUExFVEVEX0RJUkVDVF9DUk9OX0RFTElWRVJJ
RVMuZ2V0KGlkZW1wb3RlbmN5S2V5KTsKCWlmICghY2FjaGVkKSByZXR1cm47CglyZXR1cm4gY2xv
bmVEZWxpdmVyeVJlc3VsdHMoY2FjaGVkLnJlc3VsdHMpOwp9CmZ1bmN0aW9uIGJ1aWxkRGlyZWN0
Q3JvbkRlbGl2ZXJ5SWRlbXBvdGVuY3lLZXkocGFyYW1zKSB7Cgljb25zdCB0aHJlYWRJZCA9IHBh
cmFtcy5kZWxpdmVyeS50aHJlYWRJZCA9PSBudWxsIHx8IHBhcmFtcy5kZWxpdmVyeS50aHJlYWRJ
ZCA9PT0gIiIgPyAiIiA6IFN0cmluZyhwYXJhbXMuZGVsaXZlcnkudGhyZWFkSWQpOwoJY29uc3Qg
YWNjb3VudElkID0gcGFyYW1zLmRlbGl2ZXJ5LmFjY291bnRJZD8udHJpbSgpID8/ICIiOwoJY29u
c3Qgbm9ybWFsaXplZFRvID0gbm9ybWFsaXplRGVsaXZlcnlUYXJnZXQocGFyYW1zLmRlbGl2ZXJ5
LmNoYW5uZWwsIHBhcmFtcy5kZWxpdmVyeS50byk7CglyZXR1cm4gYGNyb24tZGlyZWN0LWRlbGl2
ZXJ5OnYxOiR7cGFyYW1zLnJ1blNlc3Npb25JZH06JHtwYXJhbXMuZGVsaXZlcnkuY2hhbm5lbH06
JHthY2NvdW50SWR9OiR7bm9ybWFsaXplZFRvfToke3RocmVhZElkfWA7Cn0KZnVuY3Rpb24gc3Vt
bWFyaXplRGlyZWN0Q3JvbkRlbGl2ZXJ5RXJyb3IoZXJyb3IpIHsKCWlmIChlcnJvciBpbnN0YW5j
ZW9mIEVycm9yKSByZXR1cm4gZXJyb3IubWVzc2FnZSB8fCAiZXJyb3IiOwoJaWYgKHR5cGVvZiBl
cnJvciA9PT0gInN0cmluZyIpIHJldHVybiBlcnJvcjsKCXRyeSB7CgkJcmV0dXJuIEpTT04uc3Ry
aW5naWZ5KGVycm9yKSB8fCBTdHJpbmcoZXJyb3IpOwoJfSBjYXRjaCB7CgkJcmV0dXJuIFN0cmlu
ZyhlcnJvcik7Cgl9Cn0KZnVuY3Rpb24gaXNUcmFuc2llbnREaXJlY3RDcm9uRGVsaXZlcnlFcnJv
cihlcnJvcikgewoJY29uc3QgbWVzc2FnZSA9IHN1bW1hcml6ZURpcmVjdENyb25EZWxpdmVyeUVy
cm9yKGVycm9yKTsKCWlmICghbWVzc2FnZSkgcmV0dXJuIGZhbHNlOwoJaWYgKFBFUk1BTkVOVF9E
SVJFQ1RfQ1JPTl9ERUxJVkVSWV9FUlJPUl9QQVRURVJOUy5zb21lKChyZSkgPT4gcmUudGVzdCht
ZXNzYWdlKSkpIHJldHVybiBmYWxzZTsKCXJldHVybiBUUkFOU0lFTlRfRElSRUNUX0NST05fREVM
SVZFUllfRVJST1JfUEFUVEVSTlMuc29tZSgocmUpID0+IHJlLnRlc3QobWVzc2FnZSkpOwp9CmZ1
bmN0aW9uIHJlc29sdmVEaXJlY3RDcm9uUmV0cnlEZWxheXNNcygpIHsKCXJldHVybiBbCgkJNWUz
LAoJCTFlNCwKCQkyZTQKCV07Cn0KYXN5bmMgZnVuY3Rpb24gcmV0cnlUcmFuc2llbnREaXJlY3RD
cm9uRGVsaXZlcnkocGFyYW1zKSB7Cgljb25zdCByZXRyeURlbGF5c01zID0gcmVzb2x2ZURpcmVj
dENyb25SZXRyeURlbGF5c01zKCk7CglsZXQgcmV0cnlJbmRleCA9IDA7Cglmb3IgKDs7KSB7CgkJ
aWYgKHBhcmFtcy5zaWduYWw/LmFib3J0ZWQpIHRocm93IG5ldyBFcnJvcigiY3JvbiBkZWxpdmVy
eSBhYm9ydGVkIik7CgkJdHJ5IHsKCQkJcmV0dXJuIGF3YWl0IHBhcmFtcy5ydW4oKTsKCQl9IGNh
dGNoIChlcnIpIHsKCQkJY29uc3QgZGVsYXlNcyA9IHJldHJ5RGVsYXlzTXNbcmV0cnlJbmRleF07
CgkJCWlmIChkZWxheU1zID09IG51bGwgfHwgIWlzVHJhbnNpZW50RGlyZWN0Q3JvbkRlbGl2ZXJ5
RXJyb3IoZXJyKSB8fCBwYXJhbXMuc2lnbmFsPy5hYm9ydGVkKSB0aHJvdyBlcnI7CgkJCWNvbnN0
IG5leHRBdHRlbXB0ID0gcmV0cnlJbmRleCArIDI7CgkJCWNvbnN0IG1heEF0dGVtcHRzID0gcmV0
cnlEZWxheXNNcy5sZW5ndGggKyAxOwoJCQlsb2dXYXJuKGBbY3Jvbjoke3BhcmFtcy5qb2JJZH1d
IHRyYW5zaWVudCBkaXJlY3QgYW5ub3VuY2UgZGVsaXZlcnkgZmFpbHVyZSwgcmV0cnlpbmcgJHtu
ZXh0QXR0ZW1wdH0vJHttYXhBdHRlbXB0c30gaW4gJHtNYXRoLnJvdW5kKGRlbGF5TXMgLyAxZTMp
fXM6ICR7c3VtbWFyaXplRGlyZWN0Q3JvbkRlbGl2ZXJ5RXJyb3IoZXJyKX1gKTsKCQkJcmV0cnlJ
bmRleCArPSAxOwoJCQlhd2FpdCBzbGVlcFdpdGhBYm9ydChkZWxheU1zLCBwYXJhbXMuc2lnbmFs
KTsKCQl9Cgl9Cn0KYXN5bmMgZnVuY3Rpb24gZGlzcGF0Y2hDcm9uRGVsaXZlcnkocGFyYW1zKSB7
Cgljb25zdCBza2lwTWVzc2FnaW5nVG9vbERlbGl2ZXJ5ID0gcGFyYW1zLnNraXBNZXNzYWdpbmdU
b29sRGVsaXZlcnkgPT09IHRydWU7CglsZXQgc3VtbWFyeSA9IHBhcmFtcy5zdW1tYXJ5OwoJbGV0
IG91dHB1dFRleHQgPSBwYXJhbXMub3V0cHV0VGV4dDsKCWxldCBzeW50aGVzaXplZFRleHQgPSBw
YXJhbXMuc3ludGhlc2l6ZWRUZXh0OwoJbGV0IGRlbGl2ZXJ5UGF5bG9hZHMgPSBwYXJhbXMuZGVs
aXZlcnlQYXlsb2FkczsKCWxldCBkZWxpdmVyZWQgPSBza2lwTWVzc2FnaW5nVG9vbERlbGl2ZXJ5
OwoJbGV0IGRlbGl2ZXJ5QXR0ZW1wdGVkID0gc2tpcE1lc3NhZ2luZ1Rvb2xEZWxpdmVyeTsKCWNv
bnN0IGZhaWxEZWxpdmVyeVRhcmdldCA9IChlcnJvcikgPT4gcGFyYW1zLndpdGhSdW5TZXNzaW9u
KHsKCQlzdGF0dXM6ICJlcnJvciIsCgkJZXJyb3IsCgkJZXJyb3JLaW5kOiAiZGVsaXZlcnktdGFy
Z2V0IiwKCQlzdW1tYXJ5LAoJCW91dHB1dFRleHQsCgkJZGVsaXZlcnlBdHRlbXB0ZWQsCgkJLi4u
cGFyYW1zLnRlbGVtZXRyeQoJfSk7Cgljb25zdCBkZWxpdmVyVmlhRGlyZWN0ID0gYXN5bmMgKGRl
bGl2ZXJ5LCBvcHRpb25zKSA9PiB7CgkJY29uc3QgaWRlbnRpdHkgPSByZXNvbHZlQWdlbnRPdXRi
b3VuZElkZW50aXR5KHBhcmFtcy5jZmdXaXRoQWdlbnREZWZhdWx0cywgcGFyYW1zLmFnZW50SWQp
OwoJCWNvbnN0IGRlbGl2ZXJ5SWRlbXBvdGVuY3lLZXkgPSBidWlsZERpcmVjdENyb25EZWxpdmVy
eUlkZW1wb3RlbmN5S2V5KHsKCQkJcnVuU2Vzc2lvbklkOiBwYXJhbXMucnVuU2Vzc2lvbklkLAoJ
CQlkZWxpdmVyeQoJCX0pOwoJCXRyeSB7CgkJCWNvbnN0IHBheWxvYWRzRm9yRGVsaXZlcnkgPSBk
ZWxpdmVyeVBheWxvYWRzLmxlbmd0aCA+IDAgPyBkZWxpdmVyeVBheWxvYWRzIDogc3ludGhlc2l6
ZWRUZXh0ID8gW3sgdGV4dDogc3ludGhlc2l6ZWRUZXh0IH1dIDogW107CgkJCWlmIChwYXlsb2Fk
c0ZvckRlbGl2ZXJ5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7CgkJCWlmIChwYXJhbXMuaXNB
Ym9ydGVkKCkpIHJldHVybiBwYXJhbXMud2l0aFJ1blNlc3Npb24oewoJCQkJc3RhdHVzOiAiZXJy
b3IiLAoJCQkJZXJyb3I6IHBhcmFtcy5hYm9ydFJlYXNvbigpLAoJCQkJZGVsaXZlcnlBdHRlbXB0
ZWQsCgkJCQkuLi5wYXJhbXMudGVsZW1ldHJ5CgkJCX0pOwoJCQlkZWxpdmVyeUF0dGVtcHRlZCA9
IHRydWU7CgkJCWlmIChnZXRDb21wbGV0ZWREaXJlY3RDcm9uRGVsaXZlcnkoZGVsaXZlcnlJZGVt
cG90ZW5jeUtleSkpIHsKCQkJCWRlbGl2ZXJlZCA9IHRydWU7CgkJCQlyZXR1cm4gbnVsbDsKCQkJ
fQoJCQljb25zdCBkZWxpdmVyeVNlc3Npb24gPSBidWlsZE91dGJvdW5kU2Vzc2lvbkNvbnRleHQo
ewoJCQkJY2ZnOiBwYXJhbXMuY2ZnV2l0aEFnZW50RGVmYXVsdHMsCgkJCQlhZ2VudElkOiBwYXJh
bXMuYWdlbnRJZCwKCQkJCXNlc3Npb25LZXk6IHBhcmFtcy5hZ2VudFNlc3Npb25LZXkKCQkJfSk7
CgkJCWNvbnN0IHJ1bkRlbGl2ZXJ5ID0gYXN5bmMgKCkgPT4gdHJ5IHsgbG9nVG9QeXRob24oIm91
dGJvdW5kIiwgeyBtZXNzYWdlLCBjaGFubmVsLCB0YXJnZXQ6IGRlbGl2ZXJ5VGFyZ2V0IH0pOyB9
IGNhdGNoIHt9CmF3YWl0IGRlbGl2ZXJPdXRib3VuZFBheWxvYWRzKHsKCQkJCWNmZzogcGFyYW1z
LmNmZ1dpdGhBZ2VudERlZmF1bHRzLAoJCQkJY2hhbm5lbDogZGVsaXZlcnkuY2hhbm5lbCwKCQkJ
CXRvOiBkZWxpdmVyeS50bywKCQkJCWFjY291bnRJZDogZGVsaXZlcnkuYWNjb3VudElkLAoJCQkJ
dGhyZWFkSWQ6IGRlbGl2ZXJ5LnRocmVhZElkLAoJCQkJcGF5bG9hZHM6IHBheWxvYWRzRm9yRGVs
aXZlcnksCgkJCQlzZXNzaW9uOiBkZWxpdmVyeVNlc3Npb24sCgkJCQlpZGVudGl0eSwKCQkJCWJl
c3RFZmZvcnQ6IHBhcmFtcy5kZWxpdmVyeUJlc3RFZmZvcnQsCgkJCQlkZXBzOiBjcmVhdGVPdXRi
b3VuZFNlbmREZXBzKHBhcmFtcy5kZXBzKSwKCQkJCWFib3J0U2lnbmFsOiBwYXJhbXMuYWJvcnRT
aWduYWwsCgkJCQlza2lwUXVldWU6IHRydWUKCQkJfSk7CgkJCWNvbnN0IGRlbGl2ZXJ5UmVzdWx0
cyA9IG9wdGlvbnM/LnJldHJ5VHJhbnNpZW50ID8gYXdhaXQgcmV0cnlUcmFuc2llbnREaXJlY3RD
cm9uRGVsaXZlcnkoewoJCQkJam9iSWQ6IHBhcmFtcy5qb2IuaWQsCgkJCQlzaWduYWw6IHBhcmFt
cy5hYm9ydFNpZ25hbCwKCQkJCXJ1bjogcnVuRGVsaXZlcnkKCQkJfSkgOiBhd2FpdCBydW5EZWxp
dmVyeSgpOwoJCQlkZWxpdmVyZWQgPSBkZWxpdmVyeVJlc3VsdHMubGVuZ3RoID4gMDsKCQkJaWYg
KGRlbGl2ZXJlZCkgcmVtZW1iZXJDb21wbGV0ZWREaXJlY3RDcm9uRGVsaXZlcnkoZGVsaXZlcnlJ
ZGVtcG90ZW5jeUtleSwgZGVsaXZlcnlSZXN1bHRzKTsKCQkJcmV0dXJuIG51bGw7CgkJfSBjYXRj
aCAoZXJyKSB7CgkJCWlmICghcGFyYW1zLmRlbGl2ZXJ5QmVzdEVmZm9ydCkgcmV0dXJuIHBhcmFt
cy53aXRoUnVuU2Vzc2lvbih7CgkJCQlzdGF0dXM6ICJlcnJvciIsCgkJCQlzdW1tYXJ5LAoJCQkJ
b3V0cHV0VGV4dCwKCQkJCWVycm9yOiBTdHJpbmcoZXJyKSwKCQkJCWRlbGl2ZXJ5QXR0ZW1wdGVk
LAoJCQkJLi4ucGFyYW1zLnRlbGVtZXRyeQoJCQl9KTsKCQkJcmV0dXJuIG51bGw7CgkJfQoJfTsK
CWNvbnN0IGZpbmFsaXplVGV4dERlbGl2ZXJ5ID0gYXN5bmMgKGRlbGl2ZXJ5KSA9PiB7CgkJY29u
c3QgY2xlYW51cERpcmVjdENyb25TZXNzaW9uSWZOZWVkZWQgPSBhc3luYyAoKSA9PiB7CgkJCWlm
ICghcGFyYW1zLmpvYi5kZWxldGVBZnRlclJ1bikgcmV0dXJuOwoJCQl0cnkgewoJCQkJYXdhaXQg
Y2FsbEdhdGV3YXkoewoJCQkJCW1ldGhvZDogInNlc3Npb25zLmRlbGV0ZSIsCgkJCQkJcGFyYW1z
OiB7CgkJCQkJCWtleTogcGFyYW1zLmFnZW50U2Vzc2lvbktleSwKCQkJCQkJZGVsZXRlVHJhbnNj
cmlwdDogdHJ1ZSwKCQkJCQkJZW1pdExpZmVjeWNsZUhvb2tzOiBmYWxzZQoJCQkJCX0sCgkJCQkJ
dGltZW91dE1zOiAxZTQKCQkJCX0pOwoJCQl9IGNhdGNoIHt9CgkJfTsKCQlpZiAoIXN5bnRoZXNp
emVkVGV4dCkgcmV0dXJuIG51bGw7CgkJY29uc3QgaW5pdGlhbFN5bnRoZXNpemVkVGV4dCA9IHN5
bnRoZXNpemVkVGV4dC50cmltKCk7CgkJbGV0IGFjdGl2ZVN1YmFnZW50UnVucyA9IGNvdW50QWN0
aXZlRGVzY2VuZGFudFJ1bnMocGFyYW1zLmFnZW50U2Vzc2lvbktleSk7CgkJY29uc3QgZXhwZWN0
ZWRTdWJhZ2VudEZvbGxvd3VwID0gZXhwZWN0c1N1YmFnZW50Rm9sbG93dXAoaW5pdGlhbFN5bnRo
ZXNpemVkVGV4dCk7CgkJY29uc3QgY29tcGxldGVkRGVzY2VuZGFudFJlcGx5ID0gYWN0aXZlU3Vi
YWdlbnRSdW5zID09PSAwICYmIGlzTGlrZWx5SW50ZXJpbUNyb25NZXNzYWdlKGluaXRpYWxTeW50
aGVzaXplZFRleHQpID8gYXdhaXQgcmVhZERlc2NlbmRhbnRTdWJhZ2VudEZhbGxiYWNrUmVwbHko
ewoJCQlzZXNzaW9uS2V5OiBwYXJhbXMuYWdlbnRTZXNzaW9uS2V5LAoJCQlydW5TdGFydGVkQXQ6
IHBhcmFtcy5ydW5TdGFydGVkQXQKCQl9KSA6IHZvaWQgMDsKCQljb25zdCBoYWREZXNjZW5kYW50
cyA9IGFjdGl2ZVN1YmFnZW50UnVucyA+IDAgfHwgQm9vbGVhbihjb21wbGV0ZWREZXNjZW5kYW50
UmVwbHkpOwoJCWlmIChhY3RpdmVTdWJhZ2VudFJ1bnMgPiAwIHx8IGV4cGVjdGVkU3ViYWdlbnRG
b2xsb3d1cCkgewoJCQlsZXQgZmluYWxSZXBseSA9IGF3YWl0IHdhaXRGb3JEZXNjZW5kYW50U3Vi
YWdlbnRTdW1tYXJ5KHsKCQkJCXNlc3Npb25LZXk6IHBhcmFtcy5hZ2VudFNlc3Npb25LZXksCgkJ
CQlpbml0aWFsUmVwbHk6IGluaXRpYWxTeW50aGVzaXplZFRleHQsCgkJCQl0aW1lb3V0TXM6IHBh
cmFtcy50aW1lb3V0TXMsCgkJCQlvYnNlcnZlZEFjdGl2ZURlc2NlbmRhbnRzOiBhY3RpdmVTdWJh
Z2VudFJ1bnMgPiAwIHx8IGV4cGVjdGVkU3ViYWdlbnRGb2xsb3d1cAoJCQl9KTsKCQkJYWN0aXZl
U3ViYWdlbnRSdW5zID0gY291bnRBY3RpdmVEZXNjZW5kYW50UnVucyhwYXJhbXMuYWdlbnRTZXNz
aW9uS2V5KTsKCQkJaWYgKCFmaW5hbFJlcGx5ICYmIGFjdGl2ZVN1YmFnZW50UnVucyA9PT0gMCkg
ZmluYWxSZXBseSA9IGF3YWl0IHJlYWREZXNjZW5kYW50U3ViYWdlbnRGYWxsYmFja1JlcGx5KHsK
CQkJCXNlc3Npb25LZXk6IHBhcmFtcy5hZ2VudFNlc3Npb25LZXksCgkJCQlydW5TdGFydGVkQXQ6
IHBhcmFtcy5ydW5TdGFydGVkQXQKCQkJfSk7CgkJCWlmIChmaW5hbFJlcGx5ICYmIGFjdGl2ZVN1
YmFnZW50UnVucyA9PT0gMCkgewoJCQkJb3V0cHV0VGV4dCA9IGZpbmFsUmVwbHk7CgkJCQlzdW1t
YXJ5ID0gcGlja1N1bW1hcnlGcm9tT3V0cHV0KGZpbmFsUmVwbHkpID8/IHN1bW1hcnk7CgkJCQlz
eW50aGVzaXplZFRleHQgPSBmaW5hbFJlcGx5OwoJCQkJZGVsaXZlcnlQYXlsb2FkcyA9IFt7IHRl
eHQ6IGZpbmFsUmVwbHkgfV07CgkJCX0KCQl9IGVsc2UgaWYgKGNvbXBsZXRlZERlc2NlbmRhbnRS
ZXBseSkgewoJCQlvdXRwdXRUZXh0ID0gY29tcGxldGVkRGVzY2VuZGFudFJlcGx5OwoJCQlzdW1t
YXJ5ID0gcGlja1N1bW1hcnlGcm9tT3V0cHV0KGNvbXBsZXRlZERlc2NlbmRhbnRSZXBseSkgPz8g
c3VtbWFyeTsKCQkJc3ludGhlc2l6ZWRUZXh0ID0gY29tcGxldGVkRGVzY2VuZGFudFJlcGx5OwoJ
CQlkZWxpdmVyeVBheWxvYWRzID0gW3sgdGV4dDogY29tcGxldGVkRGVzY2VuZGFudFJlcGx5IH1d
OwoJCX0KCQlpZiAoYWN0aXZlU3ViYWdlbnRSdW5zID4gMCkgewoJCQlkZWxpdmVyeUF0dGVtcHRl
ZCA9IHRydWU7CgkJCXJldHVybiBwYXJhbXMud2l0aFJ1blNlc3Npb24oewoJCQkJc3RhdHVzOiAi
b2siLAoJCQkJc3VtbWFyeSwKCQkJCW91dHB1dFRleHQsCgkJCQlkZWxpdmVyeUF0dGVtcHRlZCwK
CQkJCS4uLnBhcmFtcy50ZWxlbWV0cnkKCQkJfSk7CgkJfQoJCWlmIChoYWREZXNjZW5kYW50cyAm
JiBzeW50aGVzaXplZFRleHQudHJpbSgpID09PSBpbml0aWFsU3ludGhlc2l6ZWRUZXh0ICYmIGlz
TGlrZWx5SW50ZXJpbUNyb25NZXNzYWdlKGluaXRpYWxTeW50aGVzaXplZFRleHQpICYmIGluaXRp
YWxTeW50aGVzaXplZFRleHQudG9VcHBlckNhc2UoKSAhPT0gIk5PX1JFUExZIi50b1VwcGVyQ2Fz
ZSgpKSB7CgkJCWRlbGl2ZXJ5QXR0ZW1wdGVkID0gdHJ1ZTsKCQkJcmV0dXJuIHBhcmFtcy53aXRo
UnVuU2Vzc2lvbih7CgkJCQlzdGF0dXM6ICJvayIsCgkJCQlzdW1tYXJ5LAoJCQkJb3V0cHV0VGV4
dCwKCQkJCWRlbGl2ZXJ5QXR0ZW1wdGVkLAoJCQkJLi4ucGFyYW1zLnRlbGVtZXRyeQoJCQl9KTsK
CQl9CgkJaWYgKHN5bnRoZXNpemVkVGV4dC50b1VwcGVyQ2FzZSgpID09PSAiTk9fUkVQTFkiLnRv
VXBwZXJDYXNlKCkpIHJldHVybiBwYXJhbXMud2l0aFJ1blNlc3Npb24oewoJCQlzdGF0dXM6ICJv
ayIsCgkJCXN1bW1hcnksCgkJCW91dHB1dFRleHQsCgkJCWRlbGl2ZXJlZDogdHJ1ZSwKCQkJLi4u
cGFyYW1zLnRlbGVtZXRyeQoJCX0pOwoJCWlmIChwYXJhbXMuaXNBYm9ydGVkKCkpIHJldHVybiBw
YXJhbXMud2l0aFJ1blNlc3Npb24oewoJCQlzdGF0dXM6ICJlcnJvciIsCgkJCWVycm9yOiBwYXJh
bXMuYWJvcnRSZWFzb24oKSwKCQkJZGVsaXZlcnlBdHRlbXB0ZWQsCgkJCS4uLnBhcmFtcy50ZWxl
bWV0cnkKCQl9KTsKCQl0cnkgewoJCQlyZXR1cm4gYXdhaXQgZGVsaXZlclZpYURpcmVjdChkZWxp
dmVyeSwgeyByZXRyeVRyYW5zaWVudDogdHJ1ZSB9KTsKCQl9IGZpbmFsbHkgewoJCQlhd2FpdCBj
bGVhbnVwRGlyZWN0Q3JvblNlc3Npb25JZk5lZWRlZCgpOwoJCX0KCX07CglpZiAocGFyYW1zLmRl
bGl2ZXJ5UmVxdWVzdGVkICYmICFwYXJhbXMuc2tpcEhlYXJ0YmVhdERlbGl2ZXJ5ICYmICFza2lw
TWVzc2FnaW5nVG9vbERlbGl2ZXJ5KSB7CgkJaWYgKCFwYXJhbXMucmVzb2x2ZWREZWxpdmVyeS5v
aykgewoJCQlpZiAoIXBhcmFtcy5kZWxpdmVyeUJlc3RFZmZvcnQpIHJldHVybiB7CgkJCQlyZXN1
bHQ6IGZhaWxEZWxpdmVyeVRhcmdldChwYXJhbXMucmVzb2x2ZWREZWxpdmVyeS5lcnJvci5tZXNz
YWdlKSwKCQkJCWRlbGl2ZXJlZCwKCQkJCWRlbGl2ZXJ5QXR0ZW1wdGVkLAoJCQkJc3VtbWFyeSwK
CQkJCW91dHB1dFRleHQsCgkJCQlzeW50aGVzaXplZFRleHQsCgkJCQlkZWxpdmVyeVBheWxvYWRz
CgkJCX07CgkJCWxvZ1dhcm4oYFtjcm9uOiR7cGFyYW1zLmpvYi5pZH1dICR7cGFyYW1zLnJlc29s
dmVkRGVsaXZlcnkuZXJyb3IubWVzc2FnZX1gKTsKCQkJcmV0dXJuIHsKCQkJCXJlc3VsdDogcGFy
YW1zLndpdGhSdW5TZXNzaW9uKHsKCQkJCQlzdGF0dXM6ICJvayIsCgkJCQkJc3VtbWFyeSwKCQkJ
CQlvdXRwdXRUZXh0LAoJCQkJCWRlbGl2ZXJ5QXR0ZW1wdGVkLAoJCQkJCS4uLnBhcmFtcy50ZWxl
bWV0cnkKCQkJCX0pLAoJCQkJZGVsaXZlcmVkLAoJCQkJZGVsaXZlcnlBdHRlbXB0ZWQsCgkJCQlz
dW1tYXJ5LAoJCQkJb3V0cHV0VGV4dCwKCQkJCXN5bnRoZXNpemVkVGV4dCwKCQkJCWRlbGl2ZXJ5
UGF5bG9hZHMKCQkJfTsKCQl9CgkJaWYgKHBhcmFtcy5kZWxpdmVyeVBheWxvYWRIYXNTdHJ1Y3R1
cmVkQ29udGVudCB8fCBwYXJhbXMucmVzb2x2ZWREZWxpdmVyeS50aHJlYWRJZCAhPSBudWxsKSB7
CgkJCWNvbnN0IGRpcmVjdFJlc3VsdCA9IGF3YWl0IGRlbGl2ZXJWaWFEaXJlY3QocGFyYW1zLnJl
c29sdmVkRGVsaXZlcnkpOwoJCQlpZiAoZGlyZWN0UmVzdWx0KSByZXR1cm4gewoJCQkJcmVzdWx0
OiBkaXJlY3RSZXN1bHQsCgkJCQlkZWxpdmVyZWQsCgkJCQlkZWxpdmVyeUF0dGVtcHRlZCwKCQkJ
CXN1bW1hcnksCgkJCQlvdXRwdXRUZXh0LAoJCQkJc3ludGhlc2l6ZWRUZXh0LAoJCQkJZGVsaXZl
cnlQYXlsb2FkcwoJCQl9OwoJCX0gZWxzZSB7CgkJCWNvbnN0IGZpbmFsaXplZFRleHRSZXN1bHQg
PSBhd2FpdCBmaW5hbGl6ZVRleHREZWxpdmVyeShwYXJhbXMucmVzb2x2ZWREZWxpdmVyeSk7CgkJ
CWlmIChmaW5hbGl6ZWRUZXh0UmVzdWx0KSByZXR1cm4gewoJCQkJcmVzdWx0OiBmaW5hbGl6ZWRU
ZXh0UmVzdWx0LAoJCQkJZGVsaXZlcmVkLAoJCQkJZGVsaXZlcnlBdHRlbXB0ZWQsCgkJCQlzdW1t
YXJ5LAoJCQkJb3V0cHV0VGV4dCwKCQkJCXN5bnRoZXNpemVkVGV4dCwKCQkJCWRlbGl2ZXJ5UGF5
bG9hZHMKCQkJfTsKCQl9Cgl9CglyZXR1cm4gewoJCWRlbGl2ZXJlZCwKCQlkZWxpdmVyeUF0dGVt
cHRlZCwKCQlzdW1tYXJ5LAoJCW91dHB1dFRleHQsCgkJc3ludGhlc2l6ZWRUZXh0LAoJCWRlbGl2
ZXJ5UGF5bG9hZHMKCX07Cn0KLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvY3Jvbi9pc29sYXRl
ZC1hZ2VudC9zZXNzaW9uLWtleS50cwpmdW5jdGlvbiByZXNvbHZlQ3JvbkFnZW50U2Vzc2lvbktl
eShwYXJhbXMpIHsKCXJldHVybiB0b0FnZW50U3RvcmVTZXNzaW9uS2V5KHsKCQlhZ2VudElkOiBw
YXJhbXMuYWdlbnRJZCwKCQlyZXF1ZXN0S2V5OiBwYXJhbXMuc2Vzc2lvbktleS50cmltKCksCgkJ
bWFpbktleTogcGFyYW1zLm1haW5LZXkKCX0pOwp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3Jj
L2Nyb24vaXNvbGF0ZWQtYWdlbnQvc2Vzc2lvbi50cwpmdW5jdGlvbiByZXNvbHZlQ3JvblNlc3Np
b24ocGFyYW1zKSB7Cgljb25zdCBzZXNzaW9uQ2ZnID0gcGFyYW1zLmNmZy5zZXNzaW9uOwoJY29u
c3Qgc3RvcmVQYXRoID0gcmVzb2x2ZVN0b3JlUGF0aChzZXNzaW9uQ2ZnPy5zdG9yZSwgeyBhZ2Vu
dElkOiBwYXJhbXMuYWdlbnRJZCB9KTsKCWNvbnN0IHN0b3JlID0gbG9hZFNlc3Npb25TdG9yZShz
dG9yZVBhdGgpOwoJY29uc3QgZW50cnkgPSBzdG9yZVtwYXJhbXMuc2Vzc2lvbktleV07CglsZXQg
c2Vzc2lvbklkOwoJbGV0IGlzTmV3U2Vzc2lvbjsKCWxldCBzeXN0ZW1TZW50OwoJaWYgKCFwYXJh
bXMuZm9yY2VOZXcgJiYgZW50cnk/LnNlc3Npb25JZCkgewoJCWNvbnN0IHJlc2V0UG9saWN5ID0g
cmVzb2x2ZVNlc3Npb25SZXNldFBvbGljeSh7CgkJCXNlc3Npb25DZmcsCgkJCXJlc2V0VHlwZTog
ImRpcmVjdCIKCQl9KTsKCQlpZiAoZXZhbHVhdGVTZXNzaW9uRnJlc2huZXNzKHsKCQkJdXBkYXRl
ZEF0OiBlbnRyeS51cGRhdGVkQXQsCgkJCW5vdzogcGFyYW1zLm5vd01zLAoJCQlwb2xpY3k6IHJl
c2V0UG9saWN5CgkJfSkuZnJlc2gpIHsKCQkJc2Vzc2lvbklkID0gZW50cnkuc2Vzc2lvbklkOwoJ
CQlpc05ld1Nlc3Npb24gPSBmYWxzZTsKCQkJc3lzdGVtU2VudCA9IGVudHJ5LnN5c3RlbVNlbnQg
Pz8gZmFsc2U7CgkJfSBlbHNlIHsKCQkJc2Vzc2lvbklkID0gY3J5cHRvLnJhbmRvbVVVSUQoKTsK
CQkJaXNOZXdTZXNzaW9uID0gdHJ1ZTsKCQkJc3lzdGVtU2VudCA9IGZhbHNlOwoJCX0KCX0gZWxz
ZSB7CgkJc2Vzc2lvbklkID0gY3J5cHRvLnJhbmRvbVVVSUQoKTsKCQlpc05ld1Nlc3Npb24gPSB0
cnVlOwoJCXN5c3RlbVNlbnQgPSBmYWxzZTsKCX0KCWNsZWFyQm9vdHN0cmFwU25hcHNob3RPblNl
c3Npb25Sb2xsb3Zlcih7CgkJc2Vzc2lvbktleTogcGFyYW1zLnNlc3Npb25LZXksCgkJcHJldmlv
dXNTZXNzaW9uSWQ6IGlzTmV3U2Vzc2lvbiA/IGVudHJ5Py5zZXNzaW9uSWQgOiB2b2lkIDAKCX0p
OwoJcmV0dXJuIHsKCQlzdG9yZVBhdGgsCgkJc3RvcmUsCgkJc2Vzc2lvbkVudHJ5OiB7CgkJCS4u
LmVudHJ5LAoJCQlzZXNzaW9uSWQsCgkJCXVwZGF0ZWRBdDogcGFyYW1zLm5vd01zLAoJCQlzeXN0
ZW1TZW50LAoJCQkuLi5pc05ld1Nlc3Npb24gJiYgewoJCQkJbGFzdENoYW5uZWw6IHZvaWQgMCwK
CQkJCWxhc3RUbzogdm9pZCAwLAoJCQkJbGFzdEFjY291bnRJZDogdm9pZCAwLAoJCQkJbGFzdFRo
cmVhZElkOiB2b2lkIDAsCgkJCQlkZWxpdmVyeUNvbnRleHQ6IHZvaWQgMAoJCQl9CgkJfSwKCQlz
eXN0ZW1TZW50LAoJCWlzTmV3U2Vzc2lvbgoJfTsKfQovLyNlbmRyZWdpb24KLy8jcmVnaW9uIHNy
Yy9jcm9uL2lzb2xhdGVkLWFnZW50L3NraWxscy1zbmFwc2hvdC50cwpmdW5jdGlvbiByZXNvbHZl
Q3JvblNraWxsc1NuYXBzaG90KHBhcmFtcykgewoJaWYgKHBhcmFtcy5pc0Zhc3RUZXN0RW52KSBy
ZXR1cm4gcGFyYW1zLmV4aXN0aW5nU25hcHNob3QgPz8gewoJCXByb21wdDogIiIsCgkJc2tpbGxz
OiBbXQoJfTsKCWNvbnN0IHNuYXBzaG90VmVyc2lvbiA9IGdldFNraWxsc1NuYXBzaG90VmVyc2lv
bihwYXJhbXMud29ya3NwYWNlRGlyKTsKCWNvbnN0IHNraWxsRmlsdGVyID0gcmVzb2x2ZUFnZW50
U2tpbGxzRmlsdGVyKHBhcmFtcy5jb25maWcsIHBhcmFtcy5hZ2VudElkKTsKCWNvbnN0IGV4aXN0
aW5nU25hcHNob3QgPSBwYXJhbXMuZXhpc3RpbmdTbmFwc2hvdDsKCWlmICghKCFleGlzdGluZ1Nu
YXBzaG90IHx8IGV4aXN0aW5nU25hcHNob3QudmVyc2lvbiAhPT0gc25hcHNob3RWZXJzaW9uIHx8
ICFtYXRjaGVzU2tpbGxGaWx0ZXIoZXhpc3RpbmdTbmFwc2hvdC5za2lsbEZpbHRlciwgc2tpbGxG
aWx0ZXIpKSkgcmV0dXJuIGV4aXN0aW5nU25hcHNob3Q7CglyZXR1cm4gYnVpbGRXb3Jrc3BhY2VT
a2lsbFNuYXBzaG90KHBhcmFtcy53b3Jrc3BhY2VEaXIsIHsKCQljb25maWc6IHBhcmFtcy5jb25m
aWcsCgkJc2tpbGxGaWx0ZXIsCgkJZWxpZ2liaWxpdHk6IHsgcmVtb3RlOiBnZXRSZW1vdGVTa2ls
bEVsaWdpYmlsaXR5KCkgfSwKCQlzbmFwc2hvdFZlcnNpb24KCX0pOwp9Ci8vI2VuZHJlZ2lvbgov
LyNyZWdpb24gc3JjL2Nyb24vaXNvbGF0ZWQtYWdlbnQvcnVuLnRzCmZ1bmN0aW9uIGV4dHJhY3RD
cm9uQWdlbnREZWZhdWx0c092ZXJyaWRlKGFnZW50Q29uZmlnT3ZlcnJpZGUpIHsKCWNvbnN0IHsg
bW9kZWw6IG92ZXJyaWRlTW9kZWwsIHNhbmRib3g6IF9hZ2VudFNhbmRib3hPdmVycmlkZSwgLi4u
YWdlbnRPdmVycmlkZVJlc3QgfSA9IGFnZW50Q29uZmlnT3ZlcnJpZGUgPz8ge307CglyZXR1cm4g
ewoJCW92ZXJyaWRlTW9kZWwsCgkJZGVmaW5lZE92ZXJyaWRlczogT2JqZWN0LmZyb21FbnRyaWVz
KE9iamVjdC5lbnRyaWVzKGFnZW50T3ZlcnJpZGVSZXN0KS5maWx0ZXIoKFssIHZhbHVlXSkgPT4g
dmFsdWUgIT09IHZvaWQgMCkpCgl9Owp9CmZ1bmN0aW9uIG1lcmdlQ3JvbkFnZW50TW9kZWxPdmVy
cmlkZShwYXJhbXMpIHsKCWNvbnN0IG5leHREZWZhdWx0cyA9IHsgLi4ucGFyYW1zLmRlZmF1bHRz
IH07Cgljb25zdCBleGlzdGluZ01vZGVsID0gbmV4dERlZmF1bHRzLm1vZGVsICYmIHR5cGVvZiBu
ZXh0RGVmYXVsdHMubW9kZWwgPT09ICJvYmplY3QiID8gbmV4dERlZmF1bHRzLm1vZGVsIDoge307
CglpZiAodHlwZW9mIHBhcmFtcy5vdmVycmlkZU1vZGVsID09PSAic3RyaW5nIikgbmV4dERlZmF1
bHRzLm1vZGVsID0gewoJCS4uLmV4aXN0aW5nTW9kZWwsCgkJcHJpbWFyeTogcGFyYW1zLm92ZXJy
aWRlTW9kZWwKCX07CgllbHNlIGlmIChwYXJhbXMub3ZlcnJpZGVNb2RlbCkgbmV4dERlZmF1bHRz
Lm1vZGVsID0gewoJCS4uLmV4aXN0aW5nTW9kZWwsCgkJLi4ucGFyYW1zLm92ZXJyaWRlTW9kZWwK
CX07CglyZXR1cm4gbmV4dERlZmF1bHRzOwp9CmZ1bmN0aW9uIGJ1aWxkQ3JvbkFnZW50RGVmYXVs
dHNDb25maWcocGFyYW1zKSB7Cgljb25zdCB7IG92ZXJyaWRlTW9kZWwsIGRlZmluZWRPdmVycmlk
ZXMgfSA9IGV4dHJhY3RDcm9uQWdlbnREZWZhdWx0c092ZXJyaWRlKHBhcmFtcy5hZ2VudENvbmZp
Z092ZXJyaWRlKTsKCXJldHVybiBtZXJnZUNyb25BZ2VudE1vZGVsT3ZlcnJpZGUoewoJCWRlZmF1
bHRzOiBPYmplY3QuYXNzaWduKHt9LCBwYXJhbXMuZGVmYXVsdHMsIGRlZmluZWRPdmVycmlkZXMp
LAoJCW92ZXJyaWRlTW9kZWwKCX0pOwp9CmZ1bmN0aW9uIHJlc29sdmVDcm9uVG9vbFBvbGljeShw
YXJhbXMpIHsKCXJldHVybiB7CgkJcmVxdWlyZUV4cGxpY2l0TWVzc2FnZVRhcmdldDogcGFyYW1z
LmRlbGl2ZXJ5UmVxdWVzdGVkICYmIHBhcmFtcy5yZXNvbHZlZERlbGl2ZXJ5Lm9rLAoJCWRpc2Fi
bGVNZXNzYWdlVG9vbDogcGFyYW1zLmRlbGl2ZXJ5Q29udHJhY3QgPT09ICJjcm9uLW93bmVkIiA/
IHRydWUgOiBwYXJhbXMuZGVsaXZlcnlSZXF1ZXN0ZWQKCX07Cn0KYXN5bmMgZnVuY3Rpb24gcmVz
b2x2ZUNyb25EZWxpdmVyeUNvbnRleHQocGFyYW1zKSB7Cgljb25zdCBkZWxpdmVyeVBsYW4gPSBy
ZXNvbHZlQ3JvbkRlbGl2ZXJ5UGxhbihwYXJhbXMuam9iKTsKCWNvbnN0IHJlc29sdmVkRGVsaXZl
cnkgPSBhd2FpdCByZXNvbHZlRGVsaXZlcnlUYXJnZXQocGFyYW1zLmNmZywgcGFyYW1zLmFnZW50
SWQsIHsKCQljaGFubmVsOiBkZWxpdmVyeVBsYW4uY2hhbm5lbCA/PyAibGFzdCIsCgkJdG86IGRl
bGl2ZXJ5UGxhbi50bywKCQlhY2NvdW50SWQ6IGRlbGl2ZXJ5UGxhbi5hY2NvdW50SWQsCgkJc2Vz
c2lvbktleTogcGFyYW1zLmpvYi5zZXNzaW9uS2V5Cgl9KTsKCXJldHVybiB7CgkJZGVsaXZlcnlQ
bGFuLAoJCWRlbGl2ZXJ5UmVxdWVzdGVkOiBkZWxpdmVyeVBsYW4ucmVxdWVzdGVkLAoJCXJlc29s
dmVkRGVsaXZlcnksCgkJdG9vbFBvbGljeTogcmVzb2x2ZUNyb25Ub29sUG9saWN5KHsKCQkJZGVs
aXZlcnlSZXF1ZXN0ZWQ6IGRlbGl2ZXJ5UGxhbi5yZXF1ZXN0ZWQsCgkJCXJlc29sdmVkRGVsaXZl
cnksCgkJCWRlbGl2ZXJ5Q29udHJhY3Q6IHBhcmFtcy5kZWxpdmVyeUNvbnRyYWN0CgkJfSkKCX07
Cn0KZnVuY3Rpb24gYXBwZW5kQ3JvbkRlbGl2ZXJ5SW5zdHJ1Y3Rpb24ocGFyYW1zKSB7CglpZiAo
IXBhcmFtcy5kZWxpdmVyeVJlcXVlc3RlZCkgcmV0dXJuIHBhcmFtcy5jb21tYW5kQm9keTsKCXJl
dHVybiBgJHtwYXJhbXMuY29tbWFuZEJvZHl9XG5cblJldHVybiB5b3VyIHN1bW1hcnkgYXMgcGxh
aW4gdGV4dDsgaXQgd2lsbCBiZSBkZWxpdmVyZWQgYXV0b21hdGljYWxseS4gSWYgdGhlIHRhc2sg
ZXhwbGljaXRseSBjYWxscyBmb3IgbWVzc2FnaW5nIGEgc3BlY2lmaWMgZXh0ZXJuYWwgcmVjaXBp
ZW50LCBub3RlIHdoby93aGVyZSBpdCBzaG91bGQgZ28gaW5zdGVhZCBvZiBzZW5kaW5nIGl0IHlv
dXJzZWxmLmAudHJpbSgpOwp9CmFzeW5jIGZ1bmN0aW9uIHJ1bkNyb25Jc29sYXRlZEFnZW50VHVy
bihwYXJhbXMpIHsKCWNvbnN0IGFib3J0U2lnbmFsID0gcGFyYW1zLmFib3J0U2lnbmFsID8/IHBh
cmFtcy5zaWduYWw7Cgljb25zdCBpc0Fib3J0ZWQgPSAoKSA9PiBhYm9ydFNpZ25hbD8uYWJvcnRl
ZCA9PT0gdHJ1ZTsKCWNvbnN0IGFib3J0UmVhc29uID0gKCkgPT4gewoJCWNvbnN0IHJlYXNvbiA9
IGFib3J0U2lnbmFsPy5yZWFzb247CgkJcmV0dXJuIHR5cGVvZiByZWFzb24gPT09ICJzdHJpbmci
ICYmIHJlYXNvbi50cmltKCkgPyByZWFzb24udHJpbSgpIDogImNyb246IGpvYiBleGVjdXRpb24g
dGltZWQgb3V0IjsKCX07Cgljb25zdCBpc0Zhc3RUZXN0RW52ID0gcHJvY2Vzcy5lbnYuT1BFTkNM
QVdfVEVTVF9GQVNUID09PSAiMSI7Cgljb25zdCBkZWxpdmVyeUNvbnRyYWN0ID0gcGFyYW1zLmRl
bGl2ZXJ5Q29udHJhY3QgPz8gImNyb24tb3duZWQiOwoJY29uc3QgZGVmYXVsdEFnZW50SWQgPSBy
ZXNvbHZlRGVmYXVsdEFnZW50SWQocGFyYW1zLmNmZyk7Cgljb25zdCByZXF1ZXN0ZWRBZ2VudElk
ID0gdHlwZW9mIHBhcmFtcy5hZ2VudElkID09PSAic3RyaW5nIiAmJiBwYXJhbXMuYWdlbnRJZC50
cmltKCkgPyBwYXJhbXMuYWdlbnRJZCA6IHR5cGVvZiBwYXJhbXMuam9iLmFnZW50SWQgPT09ICJz
dHJpbmciICYmIHBhcmFtcy5qb2IuYWdlbnRJZC50cmltKCkgPyBwYXJhbXMuam9iLmFnZW50SWQg
OiB2b2lkIDA7Cgljb25zdCBub3JtYWxpemVkUmVxdWVzdGVkID0gcmVxdWVzdGVkQWdlbnRJZCA/
IG5vcm1hbGl6ZUFnZW50SWQocmVxdWVzdGVkQWdlbnRJZCkgOiB2b2lkIDA7Cgljb25zdCBhZ2Vu
dENvbmZpZ092ZXJyaWRlID0gbm9ybWFsaXplZFJlcXVlc3RlZCA/IHJlc29sdmVBZ2VudENvbmZp
ZyhwYXJhbXMuY2ZnLCBub3JtYWxpemVkUmVxdWVzdGVkKSA6IHZvaWQgMDsKCWNvbnN0IGFnZW50
SWQgPSBub3JtYWxpemVkUmVxdWVzdGVkID8/IGRlZmF1bHRBZ2VudElkOwoJY29uc3QgYWdlbnRD
ZmcgPSBidWlsZENyb25BZ2VudERlZmF1bHRzQ29uZmlnKHsKCQlkZWZhdWx0czogcGFyYW1zLmNm
Zy5hZ2VudHM/LmRlZmF1bHRzLAoJCWFnZW50Q29uZmlnT3ZlcnJpZGUKCX0pOwoJY29uc3QgY2Zn
V2l0aEFnZW50RGVmYXVsdHMgPSB7CgkJLi4ucGFyYW1zLmNmZywKCQlhZ2VudHM6IE9iamVjdC5h
c3NpZ24oe30sIHBhcmFtcy5jZmcuYWdlbnRzLCB7IGRlZmF1bHRzOiBhZ2VudENmZyB9KQoJfTsK
CWNvbnN0IGJhc2VTZXNzaW9uS2V5ID0gKHBhcmFtcy5zZXNzaW9uS2V5Py50cmltKCkgfHwgYGNy
b246JHtwYXJhbXMuam9iLmlkfWApLnRyaW0oKTsKCWNvbnN0IGFnZW50U2Vzc2lvbktleSA9IHJl
c29sdmVDcm9uQWdlbnRTZXNzaW9uS2V5KHsKCQlzZXNzaW9uS2V5OiBiYXNlU2Vzc2lvbktleSwK
CQlhZ2VudElkCgl9KTsKCWNvbnN0IHdvcmtzcGFjZURpclJhdyA9IHJlc29sdmVBZ2VudFdvcmtz
cGFjZURpcihwYXJhbXMuY2ZnLCBhZ2VudElkKTsKCWNvbnN0IGFnZW50RGlyID0gcmVzb2x2ZUFn
ZW50RGlyKHBhcmFtcy5jZmcsIGFnZW50SWQpOwoJY29uc3Qgd29ya3NwYWNlRGlyID0gKGF3YWl0
IGVuc3VyZUFnZW50V29ya3NwYWNlKHsKCQlkaXI6IHdvcmtzcGFjZURpclJhdywKCQllbnN1cmVC
b290c3RyYXBGaWxlczogIWFnZW50Q2ZnPy5za2lwQm9vdHN0cmFwICYmICFpc0Zhc3RUZXN0RW52
Cgl9KSkuZGlyOwoJY29uc3QgcmVzb2x2ZWREZWZhdWx0ID0gcmVzb2x2ZUNvbmZpZ3VyZWRNb2Rl
bFJlZih7CgkJY2ZnOiBjZmdXaXRoQWdlbnREZWZhdWx0cywKCQlkZWZhdWx0UHJvdmlkZXI6IERF
RkFVTFRfUFJPVklERVIsCgkJZGVmYXVsdE1vZGVsOiBERUZBVUxUX01PREVMCgl9KTsKCWxldCBw
cm92aWRlciA9IHJlc29sdmVkRGVmYXVsdC5wcm92aWRlcjsKCWxldCBtb2RlbCA9IHJlc29sdmVk
RGVmYXVsdC5tb2RlbDsKCWxldCBjYXRhbG9nOwoJY29uc3QgbG9hZENhdGFsb2cgPSBhc3luYyAo
KSA9PiB7CgkJaWYgKCFjYXRhbG9nKSBjYXRhbG9nID0gYXdhaXQgbG9hZE1vZGVsQ2F0YWxvZyh7
IGNvbmZpZzogY2ZnV2l0aEFnZW50RGVmYXVsdHMgfSk7CgkJcmV0dXJuIGNhdGFsb2c7Cgl9OwoJ
Y29uc3Qgc3ViYWdlbnRNb2RlbFJhdyA9IG5vcm1hbGl6ZU1vZGVsU2VsZWN0aW9uKGFnZW50Q29u
ZmlnT3ZlcnJpZGU/LnN1YmFnZW50cz8ubW9kZWwpID8/IG5vcm1hbGl6ZU1vZGVsU2VsZWN0aW9u
KHBhcmFtcy5jZmcuYWdlbnRzPy5kZWZhdWx0cz8uc3ViYWdlbnRzPy5tb2RlbCk7CglpZiAoc3Vi
YWdlbnRNb2RlbFJhdykgewoJCWNvbnN0IHJlc29sdmVkU3ViYWdlbnQgPSByZXNvbHZlQWxsb3dl
ZE1vZGVsUmVmKHsKCQkJY2ZnOiBjZmdXaXRoQWdlbnREZWZhdWx0cywKCQkJY2F0YWxvZzogYXdh
aXQgbG9hZENhdGFsb2coKSwKCQkJcmF3OiBzdWJhZ2VudE1vZGVsUmF3LAoJCQlkZWZhdWx0UHJv
dmlkZXI6IHJlc29sdmVkRGVmYXVsdC5wcm92aWRlciwKCQkJZGVmYXVsdE1vZGVsOiByZXNvbHZl
ZERlZmF1bHQubW9kZWwKCQl9KTsKCQlpZiAoISgiZXJyb3IiIGluIHJlc29sdmVkU3ViYWdlbnQp
KSB7CgkJCXByb3ZpZGVyID0gcmVzb2x2ZWRTdWJhZ2VudC5yZWYucHJvdmlkZXI7CgkJCW1vZGVs
ID0gcmVzb2x2ZWRTdWJhZ2VudC5yZWYubW9kZWw7CgkJfQoJfQoJY29uc3QgaXNHbWFpbEhvb2sg
PSBiYXNlU2Vzc2lvbktleS5zdGFydHNXaXRoKCJob29rOmdtYWlsOiIpOwoJbGV0IGhvb2tzR21h
aWxNb2RlbEFwcGxpZWQgPSBmYWxzZTsKCWNvbnN0IGhvb2tzR21haWxNb2RlbFJlZiA9IGlzR21h
aWxIb29rID8gcmVzb2x2ZUhvb2tzR21haWxNb2RlbCh7CgkJY2ZnOiBwYXJhbXMuY2ZnLAoJCWRl
ZmF1bHRQcm92aWRlcjogREVGQVVMVF9QUk9WSURFUgoJfSkgOiBudWxsOwoJaWYgKGhvb2tzR21h
aWxNb2RlbFJlZikgewoJCWlmIChnZXRNb2RlbFJlZlN0YXR1cyh7CgkJCWNmZzogcGFyYW1zLmNm
ZywKCQkJY2F0YWxvZzogYXdhaXQgbG9hZENhdGFsb2coKSwKCQkJcmVmOiBob29rc0dtYWlsTW9k
ZWxSZWYsCgkJCWRlZmF1bHRQcm92aWRlcjogcmVzb2x2ZWREZWZhdWx0LnByb3ZpZGVyLAoJCQlk
ZWZhdWx0TW9kZWw6IHJlc29sdmVkRGVmYXVsdC5tb2RlbAoJCX0pLmFsbG93ZWQpIHsKCQkJcHJv
dmlkZXIgPSBob29rc0dtYWlsTW9kZWxSZWYucHJvdmlkZXI7CgkJCW1vZGVsID0gaG9va3NHbWFp
bE1vZGVsUmVmLm1vZGVsOwoJCQlob29rc0dtYWlsTW9kZWxBcHBsaWVkID0gdHJ1ZTsKCQl9Cgl9
Cgljb25zdCBtb2RlbE92ZXJyaWRlUmF3ID0gcGFyYW1zLmpvYi5wYXlsb2FkLmtpbmQgPT09ICJh
Z2VudFR1cm4iID8gcGFyYW1zLmpvYi5wYXlsb2FkLm1vZGVsIDogdm9pZCAwOwoJY29uc3QgbW9k
ZWxPdmVycmlkZSA9IHR5cGVvZiBtb2RlbE92ZXJyaWRlUmF3ID09PSAic3RyaW5nIiA/IG1vZGVs
T3ZlcnJpZGVSYXcudHJpbSgpIDogdm9pZCAwOwoJaWYgKG1vZGVsT3ZlcnJpZGUgIT09IHZvaWQg
MCAmJiBtb2RlbE92ZXJyaWRlLmxlbmd0aCA+IDApIHsKCQljb25zdCByZXNvbHZlZE92ZXJyaWRl
ID0gcmVzb2x2ZUFsbG93ZWRNb2RlbFJlZih7CgkJCWNmZzogY2ZnV2l0aEFnZW50RGVmYXVsdHMs
CgkJCWNhdGFsb2c6IGF3YWl0IGxvYWRDYXRhbG9nKCksCgkJCXJhdzogbW9kZWxPdmVycmlkZSwK
CQkJZGVmYXVsdFByb3ZpZGVyOiByZXNvbHZlZERlZmF1bHQucHJvdmlkZXIsCgkJCWRlZmF1bHRN
b2RlbDogcmVzb2x2ZWREZWZhdWx0Lm1vZGVsCgkJfSk7CgkJaWYgKCJlcnJvciIgaW4gcmVzb2x2
ZWRPdmVycmlkZSkgaWYgKHJlc29sdmVkT3ZlcnJpZGUuZXJyb3Iuc3RhcnRzV2l0aCgibW9kZWwg
bm90IGFsbG93ZWQ6IikpIGxvZ1dhcm4oYGNyb246IHBheWxvYWQubW9kZWwgJyR7bW9kZWxPdmVy
cmlkZX0nIG5vdCBhbGxvd2VkLCBmYWxsaW5nIGJhY2sgdG8gYWdlbnQgZGVmYXVsdHNgKTsKCQll
bHNlIHJldHVybiB7CgkJCXN0YXR1czogImVycm9yIiwKCQkJZXJyb3I6IHJlc29sdmVkT3ZlcnJp
ZGUuZXJyb3IKCQl9OwoJCWVsc2UgewoJCQlwcm92aWRlciA9IHJlc29sdmVkT3ZlcnJpZGUucmVm
LnByb3ZpZGVyOwoJCQltb2RlbCA9IHJlc29sdmVkT3ZlcnJpZGUucmVmLm1vZGVsOwoJCX0KCX0K
CWNvbnN0IG5vdyA9IERhdGUubm93KCk7Cgljb25zdCBjcm9uU2Vzc2lvbiA9IHJlc29sdmVDcm9u
U2Vzc2lvbih7CgkJY2ZnOiBwYXJhbXMuY2ZnLAoJCXNlc3Npb25LZXk6IGFnZW50U2Vzc2lvbktl
eSwKCQlhZ2VudElkLAoJCW5vd01zOiBub3csCgkJZm9yY2VOZXc6IHBhcmFtcy5qb2Iuc2Vzc2lv
blRhcmdldCA9PT0gImlzb2xhdGVkIgoJfSk7Cgljb25zdCBydW5TZXNzaW9uSWQgPSBjcm9uU2Vz
c2lvbi5zZXNzaW9uRW50cnkuc2Vzc2lvbklkOwoJY29uc3QgcnVuU2Vzc2lvbktleSA9IGJhc2VT
ZXNzaW9uS2V5LnN0YXJ0c1dpdGgoImNyb246IikgPyBgJHthZ2VudFNlc3Npb25LZXl9OnJ1bjok
e3J1blNlc3Npb25JZH1gIDogYWdlbnRTZXNzaW9uS2V5OwoJY29uc3QgcGVyc2lzdFNlc3Npb25F
bnRyeSA9IGFzeW5jICgpID0+IHsKCQlpZiAoaXNGYXN0VGVzdEVudikgcmV0dXJuOwoJCWNyb25T
ZXNzaW9uLnN0b3JlW2FnZW50U2Vzc2lvbktleV0gPSBjcm9uU2Vzc2lvbi5zZXNzaW9uRW50cnk7
CgkJaWYgKHJ1blNlc3Npb25LZXkgIT09IGFnZW50U2Vzc2lvbktleSkgY3JvblNlc3Npb24uc3Rv
cmVbcnVuU2Vzc2lvbktleV0gPSBjcm9uU2Vzc2lvbi5zZXNzaW9uRW50cnk7CgkJYXdhaXQgdXBk
YXRlU2Vzc2lvblN0b3JlKGNyb25TZXNzaW9uLnN0b3JlUGF0aCwgKHN0b3JlKSA9PiB7CgkJCXN0
b3JlW2FnZW50U2Vzc2lvbktleV0gPSBjcm9uU2Vzc2lvbi5zZXNzaW9uRW50cnk7CgkJCWlmIChy
dW5TZXNzaW9uS2V5ICE9PSBhZ2VudFNlc3Npb25LZXkpIHN0b3JlW3J1blNlc3Npb25LZXldID0g
Y3JvblNlc3Npb24uc2Vzc2lvbkVudHJ5OwoJCX0pOwoJfTsKCWNvbnN0IHdpdGhSdW5TZXNzaW9u
ID0gKHJlc3VsdCkgPT4gKHsKCQkuLi5yZXN1bHQsCgkJc2Vzc2lvbklkOiBydW5TZXNzaW9uSWQs
CgkJc2Vzc2lvbktleTogcnVuU2Vzc2lvbktleQoJfSk7CglpZiAoIWNyb25TZXNzaW9uLnNlc3Np
b25FbnRyeS5sYWJlbD8udHJpbSgpICYmIGJhc2VTZXNzaW9uS2V5LnN0YXJ0c1dpdGgoImNyb246
IikpIHsKCQljb25zdCBsYWJlbFN1ZmZpeCA9IHR5cGVvZiBwYXJhbXMuam9iLm5hbWUgPT09ICJz
dHJpbmciICYmIHBhcmFtcy5qb2IubmFtZS50cmltKCkgPyBwYXJhbXMuam9iLm5hbWUudHJpbSgp
IDogcGFyYW1zLmpvYi5pZDsKCQljcm9uU2Vzc2lvbi5zZXNzaW9uRW50cnkubGFiZWwgPSBgQ3Jv
bjogJHtsYWJlbFN1ZmZpeH1gOwoJfQoJaWYgKCFtb2RlbE92ZXJyaWRlICYmICFob29rc0dtYWls
TW9kZWxBcHBsaWVkKSB7CgkJY29uc3Qgc2Vzc2lvbk1vZGVsT3ZlcnJpZGUgPSBjcm9uU2Vzc2lv
bi5zZXNzaW9uRW50cnkubW9kZWxPdmVycmlkZT8udHJpbSgpOwoJCWlmIChzZXNzaW9uTW9kZWxP
dmVycmlkZSkgewoJCQljb25zdCBzZXNzaW9uUHJvdmlkZXJPdmVycmlkZSA9IGNyb25TZXNzaW9u
LnNlc3Npb25FbnRyeS5wcm92aWRlck92ZXJyaWRlPy50cmltKCkgfHwgcmVzb2x2ZWREZWZhdWx0
LnByb3ZpZGVyOwoJCQljb25zdCByZXNvbHZlZFNlc3Npb25PdmVycmlkZSA9IHJlc29sdmVBbGxv
d2VkTW9kZWxSZWYoewoJCQkJY2ZnOiBjZmdXaXRoQWdlbnREZWZhdWx0cywKCQkJCWNhdGFsb2c6
IGF3YWl0IGxvYWRDYXRhbG9nKCksCgkJCQlyYXc6IGAke3Nlc3Npb25Qcm92aWRlck92ZXJyaWRl
fS8ke3Nlc3Npb25Nb2RlbE92ZXJyaWRlfWAsCgkJCQlkZWZhdWx0UHJvdmlkZXI6IHJlc29sdmVk
RGVmYXVsdC5wcm92aWRlciwKCQkJCWRlZmF1bHRNb2RlbDogcmVzb2x2ZWREZWZhdWx0Lm1vZGVs
CgkJCX0pOwoJCQlpZiAoISgiZXJyb3IiIGluIHJlc29sdmVkU2Vzc2lvbk92ZXJyaWRlKSkgewoJ
CQkJcHJvdmlkZXIgPSByZXNvbHZlZFNlc3Npb25PdmVycmlkZS5yZWYucHJvdmlkZXI7CgkJCQlt
b2RlbCA9IHJlc29sdmVkU2Vzc2lvbk92ZXJyaWRlLnJlZi5tb2RlbDsKCQkJfQoJCX0KCX0KCWNv
bnN0IGhvb2tzR21haWxUaGlua2luZyA9IGlzR21haWxIb29rID8gbm9ybWFsaXplVGhpbmtMZXZl
bChwYXJhbXMuY2ZnLmhvb2tzPy5nbWFpbD8udGhpbmtpbmcpIDogdm9pZCAwOwoJbGV0IHRoaW5r
TGV2ZWwgPSBub3JtYWxpemVUaGlua0xldmVsKChwYXJhbXMuam9iLnBheWxvYWQua2luZCA9PT0g
ImFnZW50VHVybiIgPyBwYXJhbXMuam9iLnBheWxvYWQudGhpbmtpbmcgOiB2b2lkIDApID8/IHZv
aWQgMCkgPz8gaG9va3NHbWFpbFRoaW5raW5nOwoJaWYgKCF0aGlua0xldmVsKSB0aGlua0xldmVs
ID0gcmVzb2x2ZVRoaW5raW5nRGVmYXVsdCh7CgkJY2ZnOiBjZmdXaXRoQWdlbnREZWZhdWx0cywK
CQlwcm92aWRlciwKCQltb2RlbCwKCQljYXRhbG9nOiBhd2FpdCBsb2FkQ2F0YWxvZygpCgl9KTsK
CWlmICh0aGlua0xldmVsID09PSAieGhpZ2giICYmICFzdXBwb3J0c1hIaWdoVGhpbmtpbmcocHJv
dmlkZXIsIG1vZGVsKSkgewoJCWxvZ1dhcm4oYFtjcm9uOiR7cGFyYW1zLmpvYi5pZH1dIFRoaW5r
aW5nIGxldmVsICJ4aGlnaCIgaXMgbm90IHN1cHBvcnRlZCBmb3IgJHtwcm92aWRlcn0vJHttb2Rl
bH07IGRvd25ncmFkaW5nIHRvICJoaWdoIi5gKTsKCQl0aGlua0xldmVsID0gImhpZ2giOwoJfQoJ
Y29uc3QgdGltZW91dE1zID0gcmVzb2x2ZUFnZW50VGltZW91dE1zKHsKCQljZmc6IGNmZ1dpdGhB
Z2VudERlZmF1bHRzLAoJCW92ZXJyaWRlU2Vjb25kczogcGFyYW1zLmpvYi5wYXlsb2FkLmtpbmQg
PT09ICJhZ2VudFR1cm4iID8gcGFyYW1zLmpvYi5wYXlsb2FkLnRpbWVvdXRTZWNvbmRzIDogdm9p
ZCAwCgl9KTsKCWNvbnN0IGFnZW50UGF5bG9hZCA9IHBhcmFtcy5qb2IucGF5bG9hZC5raW5kID09
PSAiYWdlbnRUdXJuIiA/IHBhcmFtcy5qb2IucGF5bG9hZCA6IG51bGw7Cgljb25zdCB7IGRlbGl2
ZXJ5UmVxdWVzdGVkLCByZXNvbHZlZERlbGl2ZXJ5LCB0b29sUG9saWN5IH0gPSBhd2FpdCByZXNv
bHZlQ3JvbkRlbGl2ZXJ5Q29udGV4dCh7CgkJY2ZnOiBjZmdXaXRoQWdlbnREZWZhdWx0cywKCQlq
b2I6IHBhcmFtcy5qb2IsCgkJYWdlbnRJZCwKCQlkZWxpdmVyeUNvbnRyYWN0Cgl9KTsKCWNvbnN0
IHsgZm9ybWF0dGVkVGltZSwgdGltZUxpbmUgfSA9IHJlc29sdmVDcm9uU3R5bGVOb3cocGFyYW1z
LmNmZywgbm93KTsKCWNvbnN0IGJhc2UgPSBgW2Nyb246JHtwYXJhbXMuam9iLmlkfSAke3BhcmFt
cy5qb2IubmFtZX1dICR7cGFyYW1zLm1lc3NhZ2V9YC50cmltKCk7Cgljb25zdCBpc0V4dGVybmFs
SG9vayA9IGlzRXh0ZXJuYWxIb29rU2Vzc2lvbihiYXNlU2Vzc2lvbktleSk7Cgljb25zdCBhbGxv
d1Vuc2FmZUV4dGVybmFsQ29udGVudCA9IGFnZW50UGF5bG9hZD8uYWxsb3dVbnNhZmVFeHRlcm5h
bENvbnRlbnQgPT09IHRydWUgfHwgaXNHbWFpbEhvb2sgJiYgcGFyYW1zLmNmZy5ob29rcz8uZ21h
aWw/LmFsbG93VW5zYWZlRXh0ZXJuYWxDb250ZW50ID09PSB0cnVlOwoJY29uc3Qgc2hvdWxkV3Jh
cEV4dGVybmFsID0gaXNFeHRlcm5hbEhvb2sgJiYgIWFsbG93VW5zYWZlRXh0ZXJuYWxDb250ZW50
OwoJbGV0IGNvbW1hbmRCb2R5OwoJaWYgKGlzRXh0ZXJuYWxIb29rKSB7CgkJY29uc3Qgc3VzcGlj
aW91c1BhdHRlcm5zID0gZGV0ZWN0U3VzcGljaW91c1BhdHRlcm5zKHBhcmFtcy5tZXNzYWdlKTsK
CQlpZiAoc3VzcGljaW91c1BhdHRlcm5zLmxlbmd0aCA+IDApIGxvZ1dhcm4oYFtzZWN1cml0eV0g
U3VzcGljaW91cyBwYXR0ZXJucyBkZXRlY3RlZCBpbiBleHRlcm5hbCBob29rIGNvbnRlbnQgKHNl
c3Npb249JHtiYXNlU2Vzc2lvbktleX0sIHBhdHRlcm5zPSR7c3VzcGljaW91c1BhdHRlcm5zLmxl
bmd0aH0pOiAke3N1c3BpY2lvdXNQYXR0ZXJucy5zbGljZSgwLCAzKS5qb2luKCIsICIpfWApOwoJ
fQoJaWYgKHNob3VsZFdyYXBFeHRlcm5hbCkgewoJCWNvbnN0IGhvb2tUeXBlID0gZ2V0SG9va1R5
cGUoYmFzZVNlc3Npb25LZXkpOwoJCWNvbW1hbmRCb2R5ID0gYCR7YnVpbGRTYWZlRXh0ZXJuYWxQ
cm9tcHQoewoJCQljb250ZW50OiBwYXJhbXMubWVzc2FnZSwKCQkJc291cmNlOiBob29rVHlwZSwK
CQkJam9iTmFtZTogcGFyYW1zLmpvYi5uYW1lLAoJCQlqb2JJZDogcGFyYW1zLmpvYi5pZCwKCQkJ
dGltZXN0YW1wOiBmb3JtYXR0ZWRUaW1lCgkJfSl9XG5cbiR7dGltZUxpbmV9YC50cmltKCk7Cgl9
IGVsc2UgY29tbWFuZEJvZHkgPSBgJHtiYXNlfVxuJHt0aW1lTGluZX1gLnRyaW0oKTsKCWNvbW1h
bmRCb2R5ID0gYXBwZW5kQ3JvbkRlbGl2ZXJ5SW5zdHJ1Y3Rpb24oewoJCWNvbW1hbmRCb2R5LAoJ
CWRlbGl2ZXJ5UmVxdWVzdGVkCgl9KTsKCWNvbnN0IGV4aXN0aW5nU2tpbGxzU25hcHNob3QgPSBj
cm9uU2Vzc2lvbi5zZXNzaW9uRW50cnkuc2tpbGxzU25hcHNob3Q7Cgljb25zdCBza2lsbHNTbmFw
c2hvdCA9IHJlc29sdmVDcm9uU2tpbGxzU25hcHNob3QoewoJCXdvcmtzcGFjZURpciwKCQljb25m
aWc6IGNmZ1dpdGhBZ2VudERlZmF1bHRzLAoJCWFnZW50SWQsCgkJZXhpc3RpbmdTbmFwc2hvdDog
ZXhpc3RpbmdTa2lsbHNTbmFwc2hvdCwKCQlpc0Zhc3RUZXN0RW52Cgl9KTsKCWlmICghaXNGYXN0
VGVzdEVudiAmJiBza2lsbHNTbmFwc2hvdCAhPT0gZXhpc3RpbmdTa2lsbHNTbmFwc2hvdCkgewoJ
CWNyb25TZXNzaW9uLnNlc3Npb25FbnRyeSA9IHsKCQkJLi4uY3JvblNlc3Npb24uc2Vzc2lvbkVu
dHJ5LAoJCQl1cGRhdGVkQXQ6IERhdGUubm93KCksCgkJCXNraWxsc1NuYXBzaG90CgkJfTsKCQlh
d2FpdCBwZXJzaXN0U2Vzc2lvbkVudHJ5KCk7Cgl9Cgljcm9uU2Vzc2lvbi5zZXNzaW9uRW50cnku
bW9kZWxQcm92aWRlciA9IHByb3ZpZGVyOwoJY3JvblNlc3Npb24uc2Vzc2lvbkVudHJ5Lm1vZGVs
ID0gbW9kZWw7Cgljcm9uU2Vzc2lvbi5zZXNzaW9uRW50cnkuc3lzdGVtU2VudCA9IHRydWU7Cgl0
cnkgewoJCWF3YWl0IHBlcnNpc3RTZXNzaW9uRW50cnkoKTsKCX0gY2F0Y2ggKGVycikgewoJCWxv
Z1dhcm4oYFtjcm9uOiR7cGFyYW1zLmpvYi5pZH1dIEZhaWxlZCB0byBwZXJzaXN0IHByZS1ydW4g
c2Vzc2lvbiBlbnRyeTogJHtTdHJpbmcoZXJyKX1gKTsKCX0KCWNvbnN0IGF1dGhQcm9maWxlSWQg
PSBhd2FpdCByZXNvbHZlU2Vzc2lvbkF1dGhQcm9maWxlT3ZlcnJpZGUoewoJCWNmZzogY2ZnV2l0
aEFnZW50RGVmYXVsdHMsCgkJcHJvdmlkZXIsCgkJYWdlbnREaXIsCgkJc2Vzc2lvbkVudHJ5OiBj
cm9uU2Vzc2lvbi5zZXNzaW9uRW50cnksCgkJc2Vzc2lvblN0b3JlOiBjcm9uU2Vzc2lvbi5zdG9y
ZSwKCQlzZXNzaW9uS2V5OiBhZ2VudFNlc3Npb25LZXksCgkJc3RvcmVQYXRoOiBjcm9uU2Vzc2lv
bi5zdG9yZVBhdGgsCgkJaXNOZXdTZXNzaW9uOiBjcm9uU2Vzc2lvbi5pc05ld1Nlc3Npb24KCX0p
OwoJY29uc3QgYXV0aFByb2ZpbGVJZFNvdXJjZSA9IGNyb25TZXNzaW9uLnNlc3Npb25FbnRyeS5h
dXRoUHJvZmlsZU92ZXJyaWRlU291cmNlOwoJbGV0IHJ1blJlc3VsdDsKCWxldCBmYWxsYmFja1By
b3ZpZGVyID0gcHJvdmlkZXI7CglsZXQgZmFsbGJhY2tNb2RlbCA9IG1vZGVsOwoJY29uc3QgcnVu
U3RhcnRlZEF0ID0gRGF0ZS5ub3coKTsKCWxldCBydW5FbmRlZEF0ID0gcnVuU3RhcnRlZEF0OwoJ
dHJ5IHsKCQljb25zdCBzZXNzaW9uRmlsZSA9IHJlc29sdmVTZXNzaW9uVHJhbnNjcmlwdFBhdGgo
Y3JvblNlc3Npb24uc2Vzc2lvbkVudHJ5LnNlc3Npb25JZCwgYWdlbnRJZCk7CgkJY29uc3QgcmVz
b2x2ZWRWZXJib3NlTGV2ZWwgPSBub3JtYWxpemVWZXJib3NlTGV2ZWwoY3JvblNlc3Npb24uc2Vz
c2lvbkVudHJ5LnZlcmJvc2VMZXZlbCkgPz8gbm9ybWFsaXplVmVyYm9zZUxldmVsKGFnZW50Q2Zn
Py52ZXJib3NlRGVmYXVsdCkgPz8gIm9mZiI7CgkJcmVnaXN0ZXJBZ2VudFJ1bkNvbnRleHQoY3Jv
blNlc3Npb24uc2Vzc2lvbkVudHJ5LnNlc3Npb25JZCwgewoJCQlzZXNzaW9uS2V5OiBhZ2VudFNl
c3Npb25LZXksCgkJCXZlcmJvc2VMZXZlbDogcmVzb2x2ZWRWZXJib3NlTGV2ZWwKCQl9KTsKCQlj
b25zdCBtZXNzYWdlQ2hhbm5lbCA9IHJlc29sdmVkRGVsaXZlcnkuY2hhbm5lbDsKCQljb25zdCBw
YXlsb2FkRmFsbGJhY2tzID0gcGFyYW1zLmpvYi5wYXlsb2FkLmtpbmQgPT09ICJhZ2VudFR1cm4i
ICYmIEFycmF5LmlzQXJyYXkocGFyYW1zLmpvYi5wYXlsb2FkLmZhbGxiYWNrcykgPyBwYXJhbXMu
am9iLnBheWxvYWQuZmFsbGJhY2tzIDogdm9pZCAwOwoJCWxldCBib290c3RyYXBQcm9tcHRXYXJu
aW5nU2lnbmF0dXJlc1NlZW4gPSByZXNvbHZlQm9vdHN0cmFwV2FybmluZ1NpZ25hdHVyZXNTZWVu
KGNyb25TZXNzaW9uLnNlc3Npb25FbnRyeS5zeXN0ZW1Qcm9tcHRSZXBvcnQpOwoJCWNvbnN0IHJ1
blByb21wdCA9IGFzeW5jIChwcm9tcHRUZXh0KSA9PiB7CgkJCWNvbnN0IGZhbGxiYWNrUmVzdWx0
ID0gYXdhaXQgcnVuV2l0aE1vZGVsRmFsbGJhY2soewoJCQkJY2ZnOiBjZmdXaXRoQWdlbnREZWZh
dWx0cywKCQkJCXByb3ZpZGVyLAoJCQkJbW9kZWwsCgkJCQlydW5JZDogY3JvblNlc3Npb24uc2Vz
c2lvbkVudHJ5LnNlc3Npb25JZCwKCQkJCWFnZW50RGlyLAoJCQkJZmFsbGJhY2tzT3ZlcnJpZGU6
IHBheWxvYWRGYWxsYmFja3MgPz8gcmVzb2x2ZUFnZW50TW9kZWxGYWxsYmFja3NPdmVycmlkZShw
YXJhbXMuY2ZnLCBhZ2VudElkKSwKCQkJCXJ1bjogYXN5bmMgKHByb3ZpZGVyT3ZlcnJpZGUsIG1v
ZGVsT3ZlcnJpZGUsIHJ1bk9wdGlvbnMpID0+IHsKCQkJCQlpZiAoYWJvcnRTaWduYWw/LmFib3J0
ZWQpIHRocm93IG5ldyBFcnJvcihhYm9ydFJlYXNvbigpKTsKCQkJCQljb25zdCBib290c3RyYXBQ
cm9tcHRXYXJuaW5nU2lnbmF0dXJlID0gYm9vdHN0cmFwUHJvbXB0V2FybmluZ1NpZ25hdHVyZXNT
ZWVuW2Jvb3RzdHJhcFByb21wdFdhcm5pbmdTaWduYXR1cmVzU2Vlbi5sZW5ndGggLSAxXTsKCQkJ
CQlpZiAoaXNDbGlQcm92aWRlcihwcm92aWRlck92ZXJyaWRlLCBjZmdXaXRoQWdlbnREZWZhdWx0
cykpIHsKCQkJCQkJY29uc3QgY2xpU2Vzc2lvbklkID0gY3JvblNlc3Npb24uaXNOZXdTZXNzaW9u
ID8gdm9pZCAwIDogZ2V0Q2xpU2Vzc2lvbklkKGNyb25TZXNzaW9uLnNlc3Npb25FbnRyeSwgcHJv
dmlkZXJPdmVycmlkZSk7CgkJCQkJCWNvbnN0IHJlc3VsdCA9IGF3YWl0IHJ1bkNsaUFnZW50KHsK
CQkJCQkJCXNlc3Npb25JZDogY3JvblNlc3Npb24uc2Vzc2lvbkVudHJ5LnNlc3Npb25JZCwKCQkJ
CQkJCXNlc3Npb25LZXk6IGFnZW50U2Vzc2lvbktleSwKCQkJCQkJCWFnZW50SWQsCgkJCQkJCQlz
ZXNzaW9uRmlsZSwKCQkJCQkJCXdvcmtzcGFjZURpciwKCQkJCQkJCWNvbmZpZzogY2ZnV2l0aEFn
ZW50RGVmYXVsdHMsCgkJCQkJCQlwcm9tcHQ6IHByb21wdFRleHQsCgkJCQkJCQlwcm92aWRlcjog
cHJvdmlkZXJPdmVycmlkZSwKCQkJCQkJCW1vZGVsOiBtb2RlbE92ZXJyaWRlLAoJCQkJCQkJdGhp
bmtMZXZlbCwKCQkJCQkJCXRpbWVvdXRNcywKCQkJCQkJCXJ1bklkOiBjcm9uU2Vzc2lvbi5zZXNz
aW9uRW50cnkuc2Vzc2lvbklkLAoJCQkJCQkJY2xpU2Vzc2lvbklkLAoJCQkJCQkJYm9vdHN0cmFw
UHJvbXB0V2FybmluZ1NpZ25hdHVyZXNTZWVuLAoJCQkJCQkJYm9vdHN0cmFwUHJvbXB0V2Fybmlu
Z1NpZ25hdHVyZQoJCQkJCQl9KTsKCQkJCQkJYm9vdHN0cmFwUHJvbXB0V2FybmluZ1NpZ25hdHVy
ZXNTZWVuID0gcmVzb2x2ZUJvb3RzdHJhcFdhcm5pbmdTaWduYXR1cmVzU2VlbihyZXN1bHQubWV0
YT8uc3lzdGVtUHJvbXB0UmVwb3J0KTsKCQkJCQkJcmV0dXJuIHJlc3VsdDsKCQkJCQl9CgkJCQkJ
Y29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuRW1iZWRkZWRQaUFnZW50KHsKCQkJCQkJc2Vzc2lvbklk
OiBjcm9uU2Vzc2lvbi5zZXNzaW9uRW50cnkuc2Vzc2lvbklkLAoJCQkJCQlzZXNzaW9uS2V5OiBh
Z2VudFNlc3Npb25LZXksCgkJCQkJCWFnZW50SWQsCgkJCQkJCXRyaWdnZXI6ICJjcm9uIiwKCQkJ
CQkJc2VuZGVySXNPd25lcjogdHJ1ZSwKCQkJCQkJbWVzc2FnZUNoYW5uZWwsCgkJCQkJCWFnZW50
QWNjb3VudElkOiByZXNvbHZlZERlbGl2ZXJ5LmFjY291bnRJZCwKCQkJCQkJc2Vzc2lvbkZpbGUs
CgkJCQkJCWFnZW50RGlyLAoJCQkJCQl3b3Jrc3BhY2VEaXIsCgkJCQkJCWNvbmZpZzogY2ZnV2l0
aEFnZW50RGVmYXVsdHMsCgkJCQkJCXNraWxsc1NuYXBzaG90LAoJCQkJCQlwcm9tcHQ6IHByb21w
dFRleHQsCgkJCQkJCWxhbmU6IHJlc29sdmVOZXN0ZWRBZ2VudExhbmUocGFyYW1zLmxhbmUpLAoJ
CQkJCQlwcm92aWRlcjogcHJvdmlkZXJPdmVycmlkZSwKCQkJCQkJbW9kZWw6IG1vZGVsT3ZlcnJp
ZGUsCgkJCQkJCWF1dGhQcm9maWxlSWQsCgkJCQkJCWF1dGhQcm9maWxlSWRTb3VyY2UsCgkJCQkJ
CXRoaW5rTGV2ZWwsCgkJCQkJCWZhc3RNb2RlOiByZXNvbHZlRmFzdE1vZGVTdGF0ZSh7CgkJCQkJ
CQljZmc6IGNmZ1dpdGhBZ2VudERlZmF1bHRzLAoJCQkJCQkJcHJvdmlkZXI6IHByb3ZpZGVyT3Zl
cnJpZGUsCgkJCQkJCQltb2RlbDogbW9kZWxPdmVycmlkZSwKCQkJCQkJCXNlc3Npb25FbnRyeTog
Y3JvblNlc3Npb24uc2Vzc2lvbkVudHJ5CgkJCQkJCX0pLmVuYWJsZWQsCgkJCQkJCXZlcmJvc2VM
ZXZlbDogcmVzb2x2ZWRWZXJib3NlTGV2ZWwsCgkJCQkJCXRpbWVvdXRNcywKCQkJCQkJYm9vdHN0
cmFwQ29udGV4dE1vZGU6IGFnZW50UGF5bG9hZD8ubGlnaHRDb250ZXh0ID8gImxpZ2h0d2VpZ2h0
IiA6IHZvaWQgMCwKCQkJCQkJYm9vdHN0cmFwQ29udGV4dFJ1bktpbmQ6ICJjcm9uIiwKCQkJCQkJ
cnVuSWQ6IGNyb25TZXNzaW9uLnNlc3Npb25FbnRyeS5zZXNzaW9uSWQsCgkJCQkJCXJlcXVpcmVF
eHBsaWNpdE1lc3NhZ2VUYXJnZXQ6IHRvb2xQb2xpY3kucmVxdWlyZUV4cGxpY2l0TWVzc2FnZVRh
cmdldCwKCQkJCQkJZGlzYWJsZU1lc3NhZ2VUb29sOiB0b29sUG9saWN5LmRpc2FibGVNZXNzYWdl
VG9vbCwKCQkJCQkJYWxsb3dUcmFuc2llbnRDb29sZG93blByb2JlOiBydW5PcHRpb25zPy5hbGxv
d1RyYW5zaWVudENvb2xkb3duUHJvYmUsCgkJCQkJCWFib3J0U2lnbmFsLAoJCQkJCQlib290c3Ry
YXBQcm9tcHRXYXJuaW5nU2lnbmF0dXJlc1NlZW4sCgkJCQkJCWJvb3RzdHJhcFByb21wdFdhcm5p
bmdTaWduYXR1cmUKCQkJCQl9KTsKCQkJCQlib290c3RyYXBQcm9tcHRXYXJuaW5nU2lnbmF0dXJl
c1NlZW4gPSByZXNvbHZlQm9vdHN0cmFwV2FybmluZ1NpZ25hdHVyZXNTZWVuKHJlc3VsdC5tZXRh
Py5zeXN0ZW1Qcm9tcHRSZXBvcnQpOwoJCQkJCXJldHVybiByZXN1bHQ7CgkJCQl9CgkJCX0pOwoJ
CQlydW5SZXN1bHQgPSBmYWxsYmFja1Jlc3VsdC5yZXN1bHQ7CgkJCWZhbGxiYWNrUHJvdmlkZXIg
PSBmYWxsYmFja1Jlc3VsdC5wcm92aWRlcjsKCQkJZmFsbGJhY2tNb2RlbCA9IGZhbGxiYWNrUmVz
dWx0Lm1vZGVsOwoJCQlwcm92aWRlciA9IGZhbGxiYWNrUmVzdWx0LnByb3ZpZGVyOwoJCQltb2Rl
bCA9IGZhbGxiYWNrUmVzdWx0Lm1vZGVsOwoJCQlydW5FbmRlZEF0ID0gRGF0ZS5ub3coKTsKCQl9
OwoJCWF3YWl0IHJ1blByb21wdChjb21tYW5kQm9keSk7CgkJaWYgKCFydW5SZXN1bHQpIHRocm93
IG5ldyBFcnJvcigiY3JvbiBpc29sYXRlZCBydW4gcmV0dXJuZWQgbm8gcmVzdWx0Iik7CgkJaWYg
KCFpc0Fib3J0ZWQoKSkgewoJCQljb25zdCBpbnRlcmltUnVuUmVzdWx0ID0gcnVuUmVzdWx0OwoJ
CQljb25zdCBpbnRlcmltUGF5bG9hZHMgPSBpbnRlcmltUnVuUmVzdWx0LnBheWxvYWRzID8/IFtd
OwoJCQljb25zdCBpbnRlcmltRGVsaXZlcnlQYXlsb2FkID0gcGlja0xhc3REZWxpdmVyYWJsZVBh
eWxvYWQoaW50ZXJpbVBheWxvYWRzKTsKCQkJY29uc3QgaW50ZXJpbVBheWxvYWRIYXNTdHJ1Y3R1
cmVkQ29udGVudCA9IEJvb2xlYW4oaW50ZXJpbURlbGl2ZXJ5UGF5bG9hZD8ubWVkaWFVcmwpIHx8
IChpbnRlcmltRGVsaXZlcnlQYXlsb2FkPy5tZWRpYVVybHM/Lmxlbmd0aCA/PyAwKSA+IDAgfHwg
T2JqZWN0LmtleXMoaW50ZXJpbURlbGl2ZXJ5UGF5bG9hZD8uY2hhbm5lbERhdGEgPz8ge30pLmxl
bmd0aCA+IDA7CgkJCWNvbnN0IGludGVyaW1UZXh0ID0gcGlja0xhc3ROb25FbXB0eVRleHRGcm9t
UGF5bG9hZHMoaW50ZXJpbVBheWxvYWRzKT8udHJpbSgpID8/ICIiOwoJCQljb25zdCBoYXNEZXNj
ZW5kYW50c1NpbmNlUnVuU3RhcnQgPSBsaXN0RGVzY2VuZGFudFJ1bnNGb3JSZXF1ZXN0ZXIoYWdl
bnRTZXNzaW9uS2V5KS5zb21lKChlbnRyeSkgPT4gewoJCQkJY29uc3QgZGVzY2VuZGFudFN0YXJ0
ZWRBdCA9IHR5cGVvZiBlbnRyeS5zdGFydGVkQXQgPT09ICJudW1iZXIiID8gZW50cnkuc3RhcnRl
ZEF0IDogZW50cnkuY3JlYXRlZEF0OwoJCQkJcmV0dXJuIHR5cGVvZiBkZXNjZW5kYW50U3RhcnRl
ZEF0ID09PSAibnVtYmVyIiAmJiBkZXNjZW5kYW50U3RhcnRlZEF0ID49IHJ1blN0YXJ0ZWRBdDsK
CQkJfSk7CgkJCWlmICghaW50ZXJpbVJ1blJlc3VsdC5tZXRhPy5lcnJvciAmJiAhaW50ZXJpbVJ1
blJlc3VsdC5kaWRTZW5kVmlhTWVzc2FnaW5nVG9vbCAmJiAhaW50ZXJpbVBheWxvYWRIYXNTdHJ1
Y3R1cmVkQ29udGVudCAmJiAhaW50ZXJpbVBheWxvYWRzLnNvbWUoKHBheWxvYWQpID0+IHBheWxv
YWQ/LmlzRXJyb3IgPT09IHRydWUpICYmIGNvdW50QWN0aXZlRGVzY2VuZGFudFJ1bnMoYWdlbnRT
ZXNzaW9uS2V5KSA9PT0gMCAmJiAhaGFzRGVzY2VuZGFudHNTaW5jZVJ1blN0YXJ0ICYmIGlzTGlr
ZWx5SW50ZXJpbUNyb25NZXNzYWdlKGludGVyaW1UZXh0KSkgYXdhaXQgcnVuUHJvbXB0KFsKCQkJ
CSJZb3VyIHByZXZpb3VzIHJlc3BvbnNlIHdhcyBvbmx5IGFuIGFja25vd2xlZGdlbWVudCBhbmQg
ZGlkIG5vdCBjb21wbGV0ZSB0aGlzIGNyb24gdGFzay4iLAoJCQkJIkNvbXBsZXRlIHRoZSBvcmln
aW5hbCB0YXNrIG5vdy4iLAoJCQkJIkRvIG5vdCBzZW5kIGEgc3RhdHVzIHVwZGF0ZSBsaWtlICdv
biBpdCcuIiwKCQkJCSJVc2UgdG9vbHMgd2hlbiBuZWVkZWQsIGluY2x1ZGluZyBzZXNzaW9uc19z
cGF3biBmb3IgcGFyYWxsZWwgc3VidGFza3MsIHdhaXQgZm9yIHNwYXduZWQgc3ViYWdlbnRzIHRv
IGZpbmlzaCwgdGhlbiByZXR1cm4gb25seSB0aGUgZmluYWwgc3VtbWFyeS4iCgkJCV0uam9pbigi
ICIpKTsKCQl9Cgl9IGNhdGNoIChlcnIpIHsKCQlyZXR1cm4gd2l0aFJ1blNlc3Npb24oewoJCQlz
dGF0dXM6ICJlcnJvciIsCgkJCWVycm9yOiBTdHJpbmcoZXJyKQoJCX0pOwoJfQoJaWYgKGlzQWJv
cnRlZCgpKSByZXR1cm4gd2l0aFJ1blNlc3Npb24oewoJCXN0YXR1czogImVycm9yIiwKCQllcnJv
cjogYWJvcnRSZWFzb24oKQoJfSk7CglpZiAoIXJ1blJlc3VsdCkgcmV0dXJuIHdpdGhSdW5TZXNz
aW9uKHsKCQlzdGF0dXM6ICJlcnJvciIsCgkJZXJyb3I6ICJjcm9uIGlzb2xhdGVkIHJ1biByZXR1
cm5lZCBubyByZXN1bHQiCgl9KTsKCWNvbnN0IGZpbmFsUnVuUmVzdWx0ID0gcnVuUmVzdWx0OwoJ
Y29uc3QgcGF5bG9hZHMgPSBmaW5hbFJ1blJlc3VsdC5wYXlsb2FkcyA/PyBbXTsKCWxldCB0ZWxl
bWV0cnk7Cgl7CgkJaWYgKGZpbmFsUnVuUmVzdWx0Lm1ldGE/LnN5c3RlbVByb21wdFJlcG9ydCkg
Y3JvblNlc3Npb24uc2Vzc2lvbkVudHJ5LnN5c3RlbVByb21wdFJlcG9ydCA9IGZpbmFsUnVuUmVz
dWx0Lm1ldGEuc3lzdGVtUHJvbXB0UmVwb3J0OwoJCWNvbnN0IHVzYWdlID0gZmluYWxSdW5SZXN1
bHQubWV0YT8uYWdlbnRNZXRhPy51c2FnZTsKCQljb25zdCBwcm9tcHRUb2tlbnMgPSBmaW5hbFJ1
blJlc3VsdC5tZXRhPy5hZ2VudE1ldGE/LnByb21wdFRva2VuczsKCQljb25zdCBtb2RlbFVzZWQg
PSBmaW5hbFJ1blJlc3VsdC5tZXRhPy5hZ2VudE1ldGE/Lm1vZGVsID8/IGZhbGxiYWNrTW9kZWwg
Pz8gbW9kZWw7CgkJY29uc3QgcHJvdmlkZXJVc2VkID0gZmluYWxSdW5SZXN1bHQubWV0YT8uYWdl
bnRNZXRhPy5wcm92aWRlciA/PyBmYWxsYmFja1Byb3ZpZGVyID8/IHByb3ZpZGVyOwoJCWNvbnN0
IGNvbnRleHRUb2tlbnMgPSBhZ2VudENmZz8uY29udGV4dFRva2VucyA/PyBsb29rdXBDb250ZXh0
VG9rZW5zKG1vZGVsVXNlZCkgPz8gMmU1OwoJCXNldFNlc3Npb25SdW50aW1lTW9kZWwoY3JvblNl
c3Npb24uc2Vzc2lvbkVudHJ5LCB7CgkJCXByb3ZpZGVyOiBwcm92aWRlclVzZWQsCgkJCW1vZGVs
OiBtb2RlbFVzZWQKCQl9KTsKCQljcm9uU2Vzc2lvbi5zZXNzaW9uRW50cnkuY29udGV4dFRva2Vu
cyA9IGNvbnRleHRUb2tlbnM7CgkJaWYgKGlzQ2xpUHJvdmlkZXIocHJvdmlkZXJVc2VkLCBjZmdX
aXRoQWdlbnREZWZhdWx0cykpIHsKCQkJY29uc3QgY2xpU2Vzc2lvbklkID0gZmluYWxSdW5SZXN1
bHQubWV0YT8uYWdlbnRNZXRhPy5zZXNzaW9uSWQ/LnRyaW0oKTsKCQkJaWYgKGNsaVNlc3Npb25J
ZCkgc2V0Q2xpU2Vzc2lvbklkKGNyb25TZXNzaW9uLnNlc3Npb25FbnRyeSwgcHJvdmlkZXJVc2Vk
LCBjbGlTZXNzaW9uSWQpOwoJCX0KCQlpZiAoaGFzTm9uemVyb1VzYWdlKHVzYWdlKSkgewoJCQlj
b25zdCBpbnB1dCA9IHVzYWdlLmlucHV0ID8/IDA7CgkJCWNvbnN0IG91dHB1dCA9IHVzYWdlLm91
dHB1dCA/PyAwOwoJCQljb25zdCB0b3RhbFRva2VucyA9IGRlcml2ZVNlc3Npb25Ub3RhbFRva2Vu
cyh7CgkJCQl1c2FnZSwKCQkJCWNvbnRleHRUb2tlbnMsCgkJCQlwcm9tcHRUb2tlbnMKCQkJfSk7
CgkJCWNyb25TZXNzaW9uLnNlc3Npb25FbnRyeS5pbnB1dFRva2VucyA9IGlucHV0OwoJCQljcm9u
U2Vzc2lvbi5zZXNzaW9uRW50cnkub3V0cHV0VG9rZW5zID0gb3V0cHV0OwoJCQljb25zdCB0ZWxl
bWV0cnlVc2FnZSA9IHsKCQkJCWlucHV0X3Rva2VuczogaW5wdXQsCgkJCQlvdXRwdXRfdG9rZW5z
OiBvdXRwdXQKCQkJfTsKCQkJaWYgKHR5cGVvZiB0b3RhbFRva2VucyA9PT0gIm51bWJlciIgJiYg
TnVtYmVyLmlzRmluaXRlKHRvdGFsVG9rZW5zKSAmJiB0b3RhbFRva2VucyA+IDApIHsKCQkJCWNy
b25TZXNzaW9uLnNlc3Npb25FbnRyeS50b3RhbFRva2VucyA9IHRvdGFsVG9rZW5zOwoJCQkJY3Jv
blNlc3Npb24uc2Vzc2lvbkVudHJ5LnRvdGFsVG9rZW5zRnJlc2ggPSB0cnVlOwoJCQkJdGVsZW1l
dHJ5VXNhZ2UudG90YWxfdG9rZW5zID0gdG90YWxUb2tlbnM7CgkJCX0gZWxzZSB7CgkJCQljcm9u
U2Vzc2lvbi5zZXNzaW9uRW50cnkudG90YWxUb2tlbnMgPSB2b2lkIDA7CgkJCQljcm9uU2Vzc2lv
bi5zZXNzaW9uRW50cnkudG90YWxUb2tlbnNGcmVzaCA9IGZhbHNlOwoJCQl9CgkJCWNyb25TZXNz
aW9uLnNlc3Npb25FbnRyeS5jYWNoZVJlYWQgPSB1c2FnZS5jYWNoZVJlYWQgPz8gMDsKCQkJY3Jv
blNlc3Npb24uc2Vzc2lvbkVudHJ5LmNhY2hlV3JpdGUgPSB1c2FnZS5jYWNoZVdyaXRlID8/IDA7
CgkJCXRlbGVtZXRyeSA9IHsKCQkJCW1vZGVsOiBtb2RlbFVzZWQsCgkJCQlwcm92aWRlcjogcHJv
dmlkZXJVc2VkLAoJCQkJdXNhZ2U6IHRlbGVtZXRyeVVzYWdlCgkJCX07CgkJfSBlbHNlIHRlbGVt
ZXRyeSA9IHsKCQkJbW9kZWw6IG1vZGVsVXNlZCwKCQkJcHJvdmlkZXI6IHByb3ZpZGVyVXNlZAoJ
CX07CgkJYXdhaXQgcGVyc2lzdFNlc3Npb25FbnRyeSgpOwoJfQoJaWYgKGlzQWJvcnRlZCgpKSBy
ZXR1cm4gd2l0aFJ1blNlc3Npb24oewoJCXN0YXR1czogImVycm9yIiwKCQllcnJvcjogYWJvcnRS
ZWFzb24oKSwKCQkuLi50ZWxlbWV0cnkKCX0pOwoJY29uc3QgZmlyc3RUZXh0ID0gcGF5bG9hZHNb
MF0/LnRleHQgPz8gIiI7CglsZXQgc3VtbWFyeSA9IHBpY2tTdW1tYXJ5RnJvbVBheWxvYWRzKHBh
eWxvYWRzKSA/PyBwaWNrU3VtbWFyeUZyb21PdXRwdXQoZmlyc3RUZXh0KTsKCWxldCBvdXRwdXRU
ZXh0ID0gcGlja0xhc3ROb25FbXB0eVRleHRGcm9tUGF5bG9hZHMocGF5bG9hZHMpOwoJbGV0IHN5
bnRoZXNpemVkVGV4dCA9IG91dHB1dFRleHQ/LnRyaW0oKSB8fCBzdW1tYXJ5Py50cmltKCkgfHwg
dm9pZCAwOwoJY29uc3QgZGVsaXZlcnlQYXlsb2FkID0gcGlja0xhc3REZWxpdmVyYWJsZVBheWxv
YWQocGF5bG9hZHMpOwoJbGV0IGRlbGl2ZXJ5UGF5bG9hZHMgPSBkZWxpdmVyeVBheWxvYWQgIT09
IHZvaWQgMCA/IFtkZWxpdmVyeVBheWxvYWRdIDogc3ludGhlc2l6ZWRUZXh0ID8gW3sgdGV4dDog
c3ludGhlc2l6ZWRUZXh0IH1dIDogW107Cgljb25zdCBkZWxpdmVyeVBheWxvYWRIYXNTdHJ1Y3R1
cmVkQ29udGVudCA9IEJvb2xlYW4oZGVsaXZlcnlQYXlsb2FkPy5tZWRpYVVybCkgfHwgKGRlbGl2
ZXJ5UGF5bG9hZD8ubWVkaWFVcmxzPy5sZW5ndGggPz8gMCkgPiAwIHx8IE9iamVjdC5rZXlzKGRl
bGl2ZXJ5UGF5bG9hZD8uY2hhbm5lbERhdGEgPz8ge30pLmxlbmd0aCA+IDA7Cgljb25zdCBkZWxp
dmVyeUJlc3RFZmZvcnQgPSByZXNvbHZlQ3JvbkRlbGl2ZXJ5QmVzdEVmZm9ydChwYXJhbXMuam9i
KTsKCWNvbnN0IGhhc0Vycm9yUGF5bG9hZCA9IHBheWxvYWRzLnNvbWUoKHBheWxvYWQpID0+IHBh
eWxvYWQ/LmlzRXJyb3IgPT09IHRydWUpOwoJY29uc3QgcnVuTGV2ZWxFcnJvciA9IGZpbmFsUnVu
UmVzdWx0Lm1ldGE/LmVycm9yOwoJY29uc3QgbGFzdEVycm9yUGF5bG9hZEluZGV4ID0gcGF5bG9h
ZHMuZmluZExhc3RJbmRleCgocGF5bG9hZCkgPT4gcGF5bG9hZD8uaXNFcnJvciA9PT0gdHJ1ZSk7
Cgljb25zdCBoYXNTdWNjZXNzZnVsUGF5bG9hZEFmdGVyTGFzdEVycm9yID0gIXJ1bkxldmVsRXJy
b3IgJiYgbGFzdEVycm9yUGF5bG9hZEluZGV4ID49IDAgJiYgcGF5bG9hZHMuc2xpY2UobGFzdEVy
cm9yUGF5bG9hZEluZGV4ICsgMSkuc29tZSgocGF5bG9hZCkgPT4gcGF5bG9hZD8uaXNFcnJvciAh
PT0gdHJ1ZSAmJiBCb29sZWFuKHBheWxvYWQ/LnRleHQ/LnRyaW0oKSkpOwoJY29uc3QgaGFzRmF0
YWxFcnJvclBheWxvYWQgPSBoYXNFcnJvclBheWxvYWQgJiYgIWhhc1N1Y2Nlc3NmdWxQYXlsb2Fk
QWZ0ZXJMYXN0RXJyb3I7Cgljb25zdCBsYXN0RXJyb3JQYXlsb2FkVGV4dCA9IFsuLi5wYXlsb2Fk
c10udG9SZXZlcnNlZCgpLmZpbmQoKHBheWxvYWQpID0+IHBheWxvYWQ/LmlzRXJyb3IgPT09IHRy
dWUgJiYgQm9vbGVhbihwYXlsb2FkPy50ZXh0Py50cmltKCkpKT8udGV4dD8udHJpbSgpOwoJY29u
c3QgZW1iZWRkZWRSdW5FcnJvciA9IGhhc0ZhdGFsRXJyb3JQYXlsb2FkID8gbGFzdEVycm9yUGF5
bG9hZFRleHQgPz8gImNyb24gaXNvbGF0ZWQgcnVuIHJldHVybmVkIGFuIGVycm9yIHBheWxvYWQi
IDogdm9pZCAwOwoJY29uc3QgcmVzb2x2ZVJ1bk91dGNvbWUgPSAocGFyYW1zKSA9PiB3aXRoUnVu
U2Vzc2lvbih7CgkJc3RhdHVzOiBoYXNGYXRhbEVycm9yUGF5bG9hZCA/ICJlcnJvciIgOiAib2si
LAoJCS4uLmhhc0ZhdGFsRXJyb3JQYXlsb2FkID8geyBlcnJvcjogZW1iZWRkZWRSdW5FcnJvciA/
PyAiY3JvbiBpc29sYXRlZCBydW4gcmV0dXJuZWQgYW4gZXJyb3IgcGF5bG9hZCIgfSA6IHt9LAoJ
CXN1bW1hcnksCgkJb3V0cHV0VGV4dCwKCQlkZWxpdmVyZWQ6IHBhcmFtcz8uZGVsaXZlcmVkLAoJ
CWRlbGl2ZXJ5QXR0ZW1wdGVkOiBwYXJhbXM/LmRlbGl2ZXJ5QXR0ZW1wdGVkLAoJCS4uLnRlbGVt
ZXRyeQoJfSk7Cgljb25zdCBhY2tNYXhDaGFycyA9IHJlc29sdmVIZWFydGJlYXRBY2tNYXhDaGFy
cyhhZ2VudENmZyk7Cgljb25zdCBza2lwSGVhcnRiZWF0RGVsaXZlcnkgPSBkZWxpdmVyeVJlcXVl
c3RlZCAmJiBpc0hlYXJ0YmVhdE9ubHlSZXNwb25zZShwYXlsb2FkcywgYWNrTWF4Q2hhcnMpOwoJ
Y29uc3Qgc2tpcE1lc3NhZ2luZ1Rvb2xEZWxpdmVyeSA9IGRlbGl2ZXJ5Q29udHJhY3QgPT09ICJz
aGFyZWQiICYmIGRlbGl2ZXJ5UmVxdWVzdGVkICYmIGZpbmFsUnVuUmVzdWx0LmRpZFNlbmRWaWFN
ZXNzYWdpbmdUb29sID09PSB0cnVlICYmIChmaW5hbFJ1blJlc3VsdC5tZXNzYWdpbmdUb29sU2Vu
dFRhcmdldHMgPz8gW10pLnNvbWUoKHRhcmdldCkgPT4gbWF0Y2hlc01lc3NhZ2luZ1Rvb2xEZWxp
dmVyeVRhcmdldCh0YXJnZXQsIHsKCQljaGFubmVsOiByZXNvbHZlZERlbGl2ZXJ5LmNoYW5uZWws
CgkJdG86IHJlc29sdmVkRGVsaXZlcnkudG8sCgkJYWNjb3VudElkOiByZXNvbHZlZERlbGl2ZXJ5
LmFjY291bnRJZAoJfSkpOwoJY29uc3QgZGVsaXZlcnlSZXN1bHQgPSBhd2FpdCBkaXNwYXRjaENy
b25EZWxpdmVyeSh7CgkJY2ZnOiBwYXJhbXMuY2ZnLAoJCWNmZ1dpdGhBZ2VudERlZmF1bHRzLAoJ
CWRlcHM6IHBhcmFtcy5kZXBzLAoJCWpvYjogcGFyYW1zLmpvYiwKCQlhZ2VudElkLAoJCWFnZW50
U2Vzc2lvbktleSwKCQlydW5TZXNzaW9uSWQsCgkJcnVuU3RhcnRlZEF0LAoJCXJ1bkVuZGVkQXQs
CgkJdGltZW91dE1zLAoJCXJlc29sdmVkRGVsaXZlcnksCgkJZGVsaXZlcnlSZXF1ZXN0ZWQsCgkJ
c2tpcEhlYXJ0YmVhdERlbGl2ZXJ5LAoJCXNraXBNZXNzYWdpbmdUb29sRGVsaXZlcnksCgkJZGVs
aXZlcnlCZXN0RWZmb3J0LAoJCWRlbGl2ZXJ5UGF5bG9hZEhhc1N0cnVjdHVyZWRDb250ZW50LAoJ
CWRlbGl2ZXJ5UGF5bG9hZHMsCgkJc3ludGhlc2l6ZWRUZXh0LAoJCXN1bW1hcnksCgkJb3V0cHV0
VGV4dCwKCQl0ZWxlbWV0cnksCgkJYWJvcnRTaWduYWwsCgkJaXNBYm9ydGVkLAoJCWFib3J0UmVh
c29uLAoJCXdpdGhSdW5TZXNzaW9uCgl9KTsKCWlmIChkZWxpdmVyeVJlc3VsdC5yZXN1bHQpIHsK
CQljb25zdCByZXN1bHRXaXRoRGVsaXZlcnlNZXRhID0gewoJCQkuLi5kZWxpdmVyeVJlc3VsdC5y
ZXN1bHQsCgkJCWRlbGl2ZXJ5QXR0ZW1wdGVkOiBkZWxpdmVyeVJlc3VsdC5yZXN1bHQuZGVsaXZl
cnlBdHRlbXB0ZWQgPz8gZGVsaXZlcnlSZXN1bHQuZGVsaXZlcnlBdHRlbXB0ZWQKCQl9OwoJCWlm
ICghaGFzRmF0YWxFcnJvclBheWxvYWQgfHwgZGVsaXZlcnlSZXN1bHQucmVzdWx0LnN0YXR1cyAh
PT0gIm9rIikgcmV0dXJuIHJlc3VsdFdpdGhEZWxpdmVyeU1ldGE7CgkJcmV0dXJuIHJlc29sdmVS
dW5PdXRjb21lKHsKCQkJZGVsaXZlcmVkOiBkZWxpdmVyeVJlc3VsdC5yZXN1bHQuZGVsaXZlcmVk
LAoJCQlkZWxpdmVyeUF0dGVtcHRlZDogcmVzdWx0V2l0aERlbGl2ZXJ5TWV0YS5kZWxpdmVyeUF0
dGVtcHRlZAoJCX0pOwoJfQoJY29uc3QgZGVsaXZlcmVkID0gZGVsaXZlcnlSZXN1bHQuZGVsaXZl
cmVkOwoJY29uc3QgZGVsaXZlcnlBdHRlbXB0ZWQgPSBkZWxpdmVyeVJlc3VsdC5kZWxpdmVyeUF0
dGVtcHRlZDsKCXN1bW1hcnkgPSBkZWxpdmVyeVJlc3VsdC5zdW1tYXJ5OwoJb3V0cHV0VGV4dCA9
IGRlbGl2ZXJ5UmVzdWx0Lm91dHB1dFRleHQ7CglyZXR1cm4gcmVzb2x2ZVJ1bk91dGNvbWUoewoJ
CWRlbGl2ZXJlZCwKCQlkZWxpdmVyeUF0dGVtcHRlZAoJfSk7Cn0KLy8jZW5kcmVnaW9uCi8vI3Jl
Z2lvbiBzcmMvY3Jvbi9ydW4tbG9nLnRzCmZ1bmN0aW9uIGFzc2VydFNhZmVDcm9uUnVuTG9nSm9i
SWQoam9iSWQpIHsKCWNvbnN0IHRyaW1tZWQgPSBqb2JJZC50cmltKCk7CglpZiAoIXRyaW1tZWQp
IHRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjcm9uIHJ1biBsb2cgam9iIGlkIik7CglpZiAodHJp
bW1lZC5pbmNsdWRlcygiLyIpIHx8IHRyaW1tZWQuaW5jbHVkZXMoIlxcIikgfHwgdHJpbW1lZC5p
bmNsdWRlcygiXDAiKSkgdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNyb24gcnVuIGxvZyBqb2Ig
aWQiKTsKCXJldHVybiB0cmltbWVkOwp9CmZ1bmN0aW9uIHJlc29sdmVDcm9uUnVuTG9nUGF0aChw
YXJhbXMpIHsKCWNvbnN0IHN0b3JlUGF0aCA9IHBhdGgucmVzb2x2ZShwYXJhbXMuc3RvcmVQYXRo
KTsKCWNvbnN0IGRpciA9IHBhdGguZGlybmFtZShzdG9yZVBhdGgpOwoJY29uc3QgcnVuc0RpciA9
IHBhdGgucmVzb2x2ZShkaXIsICJydW5zIik7Cgljb25zdCBzYWZlSm9iSWQgPSBhc3NlcnRTYWZl
Q3JvblJ1bkxvZ0pvYklkKHBhcmFtcy5qb2JJZCk7Cgljb25zdCByZXNvbHZlZFBhdGggPSBwYXRo
LnJlc29sdmUocnVuc0RpciwgYCR7c2FmZUpvYklkfS5qc29ubGApOwoJaWYgKCFyZXNvbHZlZFBh
dGguc3RhcnRzV2l0aChgJHtydW5zRGlyfSR7cGF0aC5zZXB9YCkpIHRocm93IG5ldyBFcnJvcigi
aW52YWxpZCBjcm9uIHJ1biBsb2cgam9iIGlkIik7CglyZXR1cm4gcmVzb2x2ZWRQYXRoOwp9CmNv
bnN0IHdyaXRlc0J5UGF0aCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CmFzeW5jIGZ1bmN0
aW9uIHNldFNlY3VyZUZpbGVNb2RlKGZpbGVQYXRoKSB7Cglhd2FpdCBmcyQxLmNobW9kKGZpbGVQ
YXRoLCAzODQpLmNhdGNoKCgpID0+IHZvaWQgMCk7Cn0KY29uc3QgREVGQVVMVF9DUk9OX1JVTl9M
T0dfTUFYX0JZVEVTID0gMmU2Owpjb25zdCBERUZBVUxUX0NST05fUlVOX0xPR19LRUVQX0xJTkVT
ID0gMmUzOwpmdW5jdGlvbiByZXNvbHZlQ3JvblJ1bkxvZ1BydW5lT3B0aW9ucyhjZmcpIHsKCWxl
dCBtYXhCeXRlcyA9IERFRkFVTFRfQ1JPTl9SVU5fTE9HX01BWF9CWVRFUzsKCWlmIChjZmc/Lm1h
eEJ5dGVzICE9PSB2b2lkIDApIHRyeSB7CgkJbWF4Qnl0ZXMgPSBwYXJzZUJ5dGVTaXplKFN0cmlu
ZyhjZmcubWF4Qnl0ZXMpLnRyaW0oKSwgeyBkZWZhdWx0VW5pdDogImIiIH0pOwoJfSBjYXRjaCB7
CgkJbWF4Qnl0ZXMgPSBERUZBVUxUX0NST05fUlVOX0xPR19NQVhfQllURVM7Cgl9CglsZXQga2Vl
cExpbmVzID0gREVGQVVMVF9DUk9OX1JVTl9MT0dfS0VFUF9MSU5FUzsKCWlmICh0eXBlb2YgY2Zn
Py5rZWVwTGluZXMgPT09ICJudW1iZXIiICYmIE51bWJlci5pc0Zpbml0ZShjZmcua2VlcExpbmVz
KSAmJiBjZmcua2VlcExpbmVzID4gMCkga2VlcExpbmVzID0gTWF0aC5mbG9vcihjZmcua2VlcExp
bmVzKTsKCXJldHVybiB7CgkJbWF4Qnl0ZXMsCgkJa2VlcExpbmVzCgl9Owp9CmFzeW5jIGZ1bmN0
aW9uIGRyYWluUGVuZGluZ1dyaXRlKGZpbGVQYXRoKSB7Cgljb25zdCByZXNvbHZlZCA9IHBhdGgu
cmVzb2x2ZShmaWxlUGF0aCk7Cgljb25zdCBwZW5kaW5nID0gd3JpdGVzQnlQYXRoLmdldChyZXNv
bHZlZCk7CglpZiAocGVuZGluZykgYXdhaXQgcGVuZGluZy5jYXRjaCgoKSA9PiB2b2lkIDApOwp9
CmFzeW5jIGZ1bmN0aW9uIHBydW5lSWZOZWVkZWQoZmlsZVBhdGgsIG9wdHMpIHsKCWNvbnN0IHN0
YXQgPSBhd2FpdCBmcyQxLnN0YXQoZmlsZVBhdGgpLmNhdGNoKCgpID0+IG51bGwpOwoJaWYgKCFz
dGF0IHx8IHN0YXQuc2l6ZSA8PSBvcHRzLm1heEJ5dGVzKSByZXR1cm47Cgljb25zdCBsaW5lcyA9
IChhd2FpdCBmcyQxLnJlYWRGaWxlKGZpbGVQYXRoLCAidXRmLTgiKS5jYXRjaCgoKSA9PiAiIikp
LnNwbGl0KCJcbiIpLm1hcCgobCkgPT4gbC50cmltKCkpLmZpbHRlcihCb29sZWFuKTsKCWNvbnN0
IGtlcHQgPSBsaW5lcy5zbGljZShNYXRoLm1heCgwLCBsaW5lcy5sZW5ndGggLSBvcHRzLmtlZXBM
aW5lcykpOwoJY29uc3QgeyByYW5kb21CeXRlcyB9ID0gYXdhaXQgaW1wb3J0KCJub2RlOmNyeXB0
byIpOwoJY29uc3QgdG1wID0gYCR7ZmlsZVBhdGh9LiR7cHJvY2Vzcy5waWR9LiR7cmFuZG9tQnl0
ZXMoOCkudG9TdHJpbmcoImhleCIpfS50bXBgOwoJYXdhaXQgZnMkMS53cml0ZUZpbGUodG1wLCBg
JHtrZXB0LmpvaW4oIlxuIil9XG5gLCB7CgkJZW5jb2Rpbmc6ICJ1dGYtOCIsCgkJbW9kZTogMzg0
Cgl9KTsKCWF3YWl0IHNldFNlY3VyZUZpbGVNb2RlKHRtcCk7Cglhd2FpdCBmcyQxLnJlbmFtZSh0
bXAsIGZpbGVQYXRoKTsKCWF3YWl0IHNldFNlY3VyZUZpbGVNb2RlKGZpbGVQYXRoKTsKfQphc3lu
YyBmdW5jdGlvbiBhcHBlbmRDcm9uUnVuTG9nKGZpbGVQYXRoLCBlbnRyeSwgb3B0cykgewoJY29u
c3QgcmVzb2x2ZWQgPSBwYXRoLnJlc29sdmUoZmlsZVBhdGgpOwoJY29uc3QgbmV4dCA9ICh3cml0
ZXNCeVBhdGguZ2V0KHJlc29sdmVkKSA/PyBQcm9taXNlLnJlc29sdmUoKSkuY2F0Y2goKCkgPT4g
dm9pZCAwKS50aGVuKGFzeW5jICgpID0+IHsKCQljb25zdCBydW5EaXIgPSBwYXRoLmRpcm5hbWUo
cmVzb2x2ZWQpOwoJCWF3YWl0IGZzJDEubWtkaXIocnVuRGlyLCB7CgkJCXJlY3Vyc2l2ZTogdHJ1
ZSwKCQkJbW9kZTogNDQ4CgkJfSk7CgkJYXdhaXQgZnMkMS5jaG1vZChydW5EaXIsIDQ0OCkuY2F0
Y2goKCkgPT4gdm9pZCAwKTsKCQlhd2FpdCBmcyQxLmFwcGVuZEZpbGUocmVzb2x2ZWQsIGAke0pT
T04uc3RyaW5naWZ5KGVudHJ5KX1cbmAsIHsKCQkJZW5jb2Rpbmc6ICJ1dGYtOCIsCgkJCW1vZGU6
IDM4NAoJCX0pOwoJCWF3YWl0IHNldFNlY3VyZUZpbGVNb2RlKHJlc29sdmVkKTsKCQlhd2FpdCBw
cnVuZUlmTmVlZGVkKHJlc29sdmVkLCB7CgkJCW1heEJ5dGVzOiBvcHRzPy5tYXhCeXRlcyA/PyAy
ZTYsCgkJCWtlZXBMaW5lczogb3B0cz8ua2VlcExpbmVzID8/IDJlMwoJCX0pOwoJfSk7Cgl3cml0
ZXNCeVBhdGguc2V0KHJlc29sdmVkLCBuZXh0KTsKCXRyeSB7CgkJYXdhaXQgbmV4dDsKCX0gZmlu
YWxseSB7CgkJaWYgKHdyaXRlc0J5UGF0aC5nZXQocmVzb2x2ZWQpID09PSBuZXh0KSB3cml0ZXNC
eVBhdGguZGVsZXRlKHJlc29sdmVkKTsKCX0KfQpmdW5jdGlvbiBub3JtYWxpemVSdW5TdGF0dXNG
aWx0ZXIoc3RhdHVzKSB7CglpZiAoc3RhdHVzID09PSAib2siIHx8IHN0YXR1cyA9PT0gImVycm9y
IiB8fCBzdGF0dXMgPT09ICJza2lwcGVkIiB8fCBzdGF0dXMgPT09ICJhbGwiKSByZXR1cm4gc3Rh
dHVzOwoJcmV0dXJuICJhbGwiOwp9CmZ1bmN0aW9uIG5vcm1hbGl6ZVJ1blN0YXR1c2VzKG9wdHMp
IHsKCWlmIChBcnJheS5pc0FycmF5KG9wdHM/LnN0YXR1c2VzKSAmJiBvcHRzLnN0YXR1c2VzLmxl
bmd0aCA+IDApIHsKCQljb25zdCBmaWx0ZXJlZCA9IG9wdHMuc3RhdHVzZXMuZmlsdGVyKChzdGF0
dXMpID0+IHN0YXR1cyA9PT0gIm9rIiB8fCBzdGF0dXMgPT09ICJlcnJvciIgfHwgc3RhdHVzID09
PSAic2tpcHBlZCIpOwoJCWlmIChmaWx0ZXJlZC5sZW5ndGggPiAwKSByZXR1cm4gQXJyYXkuZnJv
bShuZXcgU2V0KGZpbHRlcmVkKSk7Cgl9Cgljb25zdCBzdGF0dXMgPSBub3JtYWxpemVSdW5TdGF0
dXNGaWx0ZXIob3B0cz8uc3RhdHVzKTsKCWlmIChzdGF0dXMgPT09ICJhbGwiKSByZXR1cm4gbnVs
bDsKCXJldHVybiBbc3RhdHVzXTsKfQpmdW5jdGlvbiBub3JtYWxpemVEZWxpdmVyeVN0YXR1c2Vz
KG9wdHMpIHsKCWlmIChBcnJheS5pc0FycmF5KG9wdHM/LmRlbGl2ZXJ5U3RhdHVzZXMpICYmIG9w
dHMuZGVsaXZlcnlTdGF0dXNlcy5sZW5ndGggPiAwKSB7CgkJY29uc3QgZmlsdGVyZWQgPSBvcHRz
LmRlbGl2ZXJ5U3RhdHVzZXMuZmlsdGVyKChzdGF0dXMpID0+IHN0YXR1cyA9PT0gImRlbGl2ZXJl
ZCIgfHwgc3RhdHVzID09PSAibm90LWRlbGl2ZXJlZCIgfHwgc3RhdHVzID09PSAidW5rbm93biIg
fHwgc3RhdHVzID09PSAibm90LXJlcXVlc3RlZCIpOwoJCWlmIChmaWx0ZXJlZC5sZW5ndGggPiAw
KSByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KGZpbHRlcmVkKSk7Cgl9CglpZiAob3B0cz8uZGVs
aXZlcnlTdGF0dXMgPT09ICJkZWxpdmVyZWQiIHx8IG9wdHM/LmRlbGl2ZXJ5U3RhdHVzID09PSAi
bm90LWRlbGl2ZXJlZCIgfHwgb3B0cz8uZGVsaXZlcnlTdGF0dXMgPT09ICJ1bmtub3duIiB8fCBv
cHRzPy5kZWxpdmVyeVN0YXR1cyA9PT0gIm5vdC1yZXF1ZXN0ZWQiKSByZXR1cm4gW29wdHMuZGVs
aXZlcnlTdGF0dXNdOwoJcmV0dXJuIG51bGw7Cn0KZnVuY3Rpb24gcGFyc2VBbGxSdW5Mb2dFbnRy
aWVzKHJhdywgb3B0cykgewoJY29uc3Qgam9iSWQgPSBvcHRzPy5qb2JJZD8udHJpbSgpIHx8IHZv
aWQgMDsKCWlmICghcmF3LnRyaW0oKSkgcmV0dXJuIFtdOwoJY29uc3QgcGFyc2VkID0gW107Cglj
b25zdCBsaW5lcyA9IHJhdy5zcGxpdCgiXG4iKTsKCWZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMu
bGVuZ3RoOyBpKyspIHsKCQljb25zdCBsaW5lID0gbGluZXNbaV0/LnRyaW0oKTsKCQlpZiAoIWxp
bmUpIGNvbnRpbnVlOwoJCXRyeSB7CgkJCWNvbnN0IG9iaiA9IEpTT04ucGFyc2UobGluZSk7CgkJ
CWlmICghb2JqIHx8IHR5cGVvZiBvYmogIT09ICJvYmplY3QiKSBjb250aW51ZTsKCQkJaWYgKG9i
ai5hY3Rpb24gIT09ICJmaW5pc2hlZCIpIGNvbnRpbnVlOwoJCQlpZiAodHlwZW9mIG9iai5qb2JJ
ZCAhPT0gInN0cmluZyIgfHwgb2JqLmpvYklkLnRyaW0oKS5sZW5ndGggPT09IDApIGNvbnRpbnVl
OwoJCQlpZiAodHlwZW9mIG9iai50cyAhPT0gIm51bWJlciIgfHwgIU51bWJlci5pc0Zpbml0ZShv
YmoudHMpKSBjb250aW51ZTsKCQkJaWYgKGpvYklkICYmIG9iai5qb2JJZCAhPT0gam9iSWQpIGNv
bnRpbnVlOwoJCQljb25zdCB1c2FnZSA9IG9iai51c2FnZSAmJiB0eXBlb2Ygb2JqLnVzYWdlID09
PSAib2JqZWN0IiA/IG9iai51c2FnZSA6IHZvaWQgMDsKCQkJY29uc3QgZW50cnkgPSB7CgkJCQl0
czogb2JqLnRzLAoJCQkJam9iSWQ6IG9iai5qb2JJZCwKCQkJCWFjdGlvbjogImZpbmlzaGVkIiwK
CQkJCXN0YXR1czogb2JqLnN0YXR1cywKCQkJCWVycm9yOiBvYmouZXJyb3IsCgkJCQlzdW1tYXJ5
OiBvYmouc3VtbWFyeSwKCQkJCXJ1bkF0TXM6IG9iai5ydW5BdE1zLAoJCQkJZHVyYXRpb25Nczog
b2JqLmR1cmF0aW9uTXMsCgkJCQluZXh0UnVuQXRNczogb2JqLm5leHRSdW5BdE1zLAoJCQkJbW9k
ZWw6IHR5cGVvZiBvYmoubW9kZWwgPT09ICJzdHJpbmciICYmIG9iai5tb2RlbC50cmltKCkgPyBv
YmoubW9kZWwgOiB2b2lkIDAsCgkJCQlwcm92aWRlcjogdHlwZW9mIG9iai5wcm92aWRlciA9PT0g
InN0cmluZyIgJiYgb2JqLnByb3ZpZGVyLnRyaW0oKSA/IG9iai5wcm92aWRlciA6IHZvaWQgMCwK
CQkJCXVzYWdlOiB1c2FnZSA/IHsKCQkJCQlpbnB1dF90b2tlbnM6IHR5cGVvZiB1c2FnZS5pbnB1
dF90b2tlbnMgPT09ICJudW1iZXIiID8gdXNhZ2UuaW5wdXRfdG9rZW5zIDogdm9pZCAwLAoJCQkJ
CW91dHB1dF90b2tlbnM6IHR5cGVvZiB1c2FnZS5vdXRwdXRfdG9rZW5zID09PSAibnVtYmVyIiA/
IHVzYWdlLm91dHB1dF90b2tlbnMgOiB2b2lkIDAsCgkJCQkJdG90YWxfdG9rZW5zOiB0eXBlb2Yg
dXNhZ2UudG90YWxfdG9rZW5zID09PSAibnVtYmVyIiA/IHVzYWdlLnRvdGFsX3Rva2VucyA6IHZv
aWQgMCwKCQkJCQljYWNoZV9yZWFkX3Rva2VuczogdHlwZW9mIHVzYWdlLmNhY2hlX3JlYWRfdG9r
ZW5zID09PSAibnVtYmVyIiA/IHVzYWdlLmNhY2hlX3JlYWRfdG9rZW5zIDogdm9pZCAwLAoJCQkJ
CWNhY2hlX3dyaXRlX3Rva2VuczogdHlwZW9mIHVzYWdlLmNhY2hlX3dyaXRlX3Rva2VucyA9PT0g
Im51bWJlciIgPyB1c2FnZS5jYWNoZV93cml0ZV90b2tlbnMgOiB2b2lkIDAKCQkJCX0gOiB2b2lk
IDAKCQkJfTsKCQkJaWYgKHR5cGVvZiBvYmouZGVsaXZlcmVkID09PSAiYm9vbGVhbiIpIGVudHJ5
LmRlbGl2ZXJlZCA9IG9iai5kZWxpdmVyZWQ7CgkJCWlmIChvYmouZGVsaXZlcnlTdGF0dXMgPT09
ICJkZWxpdmVyZWQiIHx8IG9iai5kZWxpdmVyeVN0YXR1cyA9PT0gIm5vdC1kZWxpdmVyZWQiIHx8
IG9iai5kZWxpdmVyeVN0YXR1cyA9PT0gInVua25vd24iIHx8IG9iai5kZWxpdmVyeVN0YXR1cyA9
PT0gIm5vdC1yZXF1ZXN0ZWQiKSBlbnRyeS5kZWxpdmVyeVN0YXR1cyA9IG9iai5kZWxpdmVyeVN0
YXR1czsKCQkJaWYgKHR5cGVvZiBvYmouZGVsaXZlcnlFcnJvciA9PT0gInN0cmluZyIpIGVudHJ5
LmRlbGl2ZXJ5RXJyb3IgPSBvYmouZGVsaXZlcnlFcnJvcjsKCQkJaWYgKHR5cGVvZiBvYmouc2Vz
c2lvbklkID09PSAic3RyaW5nIiAmJiBvYmouc2Vzc2lvbklkLnRyaW0oKS5sZW5ndGggPiAwKSBl
bnRyeS5zZXNzaW9uSWQgPSBvYmouc2Vzc2lvbklkOwoJCQlpZiAodHlwZW9mIG9iai5zZXNzaW9u
S2V5ID09PSAic3RyaW5nIiAmJiBvYmouc2Vzc2lvbktleS50cmltKCkubGVuZ3RoID4gMCkgZW50
cnkuc2Vzc2lvbktleSA9IG9iai5zZXNzaW9uS2V5OwoJCQlwYXJzZWQucHVzaChlbnRyeSk7CgkJ
fSBjYXRjaCB7fQoJfQoJcmV0dXJuIHBhcnNlZDsKfQpmdW5jdGlvbiBmaWx0ZXJSdW5Mb2dFbnRy
aWVzKGVudHJpZXMsIG9wdHMpIHsKCXJldHVybiBlbnRyaWVzLmZpbHRlcigoZW50cnkpID0+IHsK
CQlpZiAob3B0cy5zdGF0dXNlcyAmJiAoIWVudHJ5LnN0YXR1cyB8fCAhb3B0cy5zdGF0dXNlcy5p
bmNsdWRlcyhlbnRyeS5zdGF0dXMpKSkgcmV0dXJuIGZhbHNlOwoJCWlmIChvcHRzLmRlbGl2ZXJ5
U3RhdHVzZXMpIHsKCQkJY29uc3QgZGVsaXZlcnlTdGF0dXMgPSBlbnRyeS5kZWxpdmVyeVN0YXR1
cyA/PyAibm90LXJlcXVlc3RlZCI7CgkJCWlmICghb3B0cy5kZWxpdmVyeVN0YXR1c2VzLmluY2x1
ZGVzKGRlbGl2ZXJ5U3RhdHVzKSkgcmV0dXJuIGZhbHNlOwoJCX0KCQlpZiAoIW9wdHMucXVlcnkp
IHJldHVybiB0cnVlOwoJCXJldHVybiBvcHRzLnF1ZXJ5VGV4dEZvckVudHJ5KGVudHJ5KS50b0xv
d2VyQ2FzZSgpLmluY2x1ZGVzKG9wdHMucXVlcnkpOwoJfSk7Cn0KYXN5bmMgZnVuY3Rpb24gcmVh
ZENyb25SdW5Mb2dFbnRyaWVzUGFnZShmaWxlUGF0aCwgb3B0cykgewoJYXdhaXQgZHJhaW5QZW5k
aW5nV3JpdGUoZmlsZVBhdGgpOwoJY29uc3QgbGltaXQgPSBNYXRoLm1heCgxLCBNYXRoLm1pbigy
MDAsIE1hdGguZmxvb3Iob3B0cz8ubGltaXQgPz8gNTApKSk7Cgljb25zdCByYXcgPSBhd2FpdCBm
cyQxLnJlYWRGaWxlKHBhdGgucmVzb2x2ZShmaWxlUGF0aCksICJ1dGYtOCIpLmNhdGNoKCgpID0+
ICIiKTsKCWNvbnN0IHN0YXR1c2VzID0gbm9ybWFsaXplUnVuU3RhdHVzZXMob3B0cyk7Cgljb25z
dCBkZWxpdmVyeVN0YXR1c2VzID0gbm9ybWFsaXplRGVsaXZlcnlTdGF0dXNlcyhvcHRzKTsKCWNv
bnN0IHF1ZXJ5ID0gb3B0cz8ucXVlcnk/LnRyaW0oKS50b0xvd2VyQ2FzZSgpID8/ICIiOwoJY29u
c3Qgc29ydERpciA9IG9wdHM/LnNvcnREaXIgPT09ICJhc2MiID8gImFzYyIgOiAiZGVzYyI7Cglj
b25zdCBmaWx0ZXJlZCA9IGZpbHRlclJ1bkxvZ0VudHJpZXMocGFyc2VBbGxSdW5Mb2dFbnRyaWVz
KHJhdywgeyBqb2JJZDogb3B0cz8uam9iSWQgfSksIHsKCQlzdGF0dXNlcywKCQlkZWxpdmVyeVN0
YXR1c2VzLAoJCXF1ZXJ5LAoJCXF1ZXJ5VGV4dEZvckVudHJ5OiAoZW50cnkpID0+IFsKCQkJZW50
cnkuc3VtbWFyeSA/PyAiIiwKCQkJZW50cnkuZXJyb3IgPz8gIiIsCgkJCWVudHJ5LmpvYklkCgkJ
XS5qb2luKCIgIikKCX0pOwoJY29uc3Qgc29ydGVkID0gc29ydERpciA9PT0gImFzYyIgPyBmaWx0
ZXJlZC50b1NvcnRlZCgoYSwgYikgPT4gYS50cyAtIGIudHMpIDogZmlsdGVyZWQudG9Tb3J0ZWQo
KGEsIGIpID0+IGIudHMgLSBhLnRzKTsKCWNvbnN0IHRvdGFsID0gc29ydGVkLmxlbmd0aDsKCWNv
bnN0IG9mZnNldCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHRvdGFsLCBNYXRoLmZsb29yKG9wdHM/
Lm9mZnNldCA/PyAwKSkpOwoJY29uc3QgZW50cmllcyA9IHNvcnRlZC5zbGljZShvZmZzZXQsIG9m
ZnNldCArIGxpbWl0KTsKCWNvbnN0IG5leHRPZmZzZXQgPSBvZmZzZXQgKyBlbnRyaWVzLmxlbmd0
aDsKCXJldHVybiB7CgkJZW50cmllcywKCQl0b3RhbCwKCQlvZmZzZXQsCgkJbGltaXQsCgkJaGFz
TW9yZTogbmV4dE9mZnNldCA8IHRvdGFsLAoJCW5leHRPZmZzZXQ6IG5leHRPZmZzZXQgPCB0b3Rh
bCA/IG5leHRPZmZzZXQgOiBudWxsCgl9Owp9CmFzeW5jIGZ1bmN0aW9uIHJlYWRDcm9uUnVuTG9n
RW50cmllc1BhZ2VBbGwob3B0cykgewoJY29uc3QgbGltaXQgPSBNYXRoLm1heCgxLCBNYXRoLm1p
bigyMDAsIE1hdGguZmxvb3Iob3B0cy5saW1pdCA/PyA1MCkpKTsKCWNvbnN0IHN0YXR1c2VzID0g
bm9ybWFsaXplUnVuU3RhdHVzZXMob3B0cyk7Cgljb25zdCBkZWxpdmVyeVN0YXR1c2VzID0gbm9y
bWFsaXplRGVsaXZlcnlTdGF0dXNlcyhvcHRzKTsKCWNvbnN0IHF1ZXJ5ID0gb3B0cy5xdWVyeT8u
dHJpbSgpLnRvTG93ZXJDYXNlKCkgPz8gIiI7Cgljb25zdCBzb3J0RGlyID0gb3B0cy5zb3J0RGly
ID09PSAiYXNjIiA/ICJhc2MiIDogImRlc2MiOwoJY29uc3QgcnVuc0RpciA9IHBhdGgucmVzb2x2
ZShwYXRoLmRpcm5hbWUocGF0aC5yZXNvbHZlKG9wdHMuc3RvcmVQYXRoKSksICJydW5zIik7Cglj
b25zdCBqc29ubEZpbGVzID0gKGF3YWl0IGZzJDEucmVhZGRpcihydW5zRGlyLCB7IHdpdGhGaWxl
VHlwZXM6IHRydWUgfSkuY2F0Y2goKCkgPT4gW10pKS5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5p
c0ZpbGUoKSAmJiBlbnRyeS5uYW1lLmVuZHNXaXRoKCIuanNvbmwiKSkubWFwKChlbnRyeSkgPT4g
cGF0aC5qb2luKHJ1bnNEaXIsIGVudHJ5Lm5hbWUpKTsKCWlmIChqc29ubEZpbGVzLmxlbmd0aCA9
PT0gMCkgcmV0dXJuIHsKCQllbnRyaWVzOiBbXSwKCQl0b3RhbDogMCwKCQlvZmZzZXQ6IDAsCgkJ
bGltaXQsCgkJaGFzTW9yZTogZmFsc2UsCgkJbmV4dE9mZnNldDogbnVsbAoJfTsKCWF3YWl0IFBy
b21pc2UuYWxsKGpzb25sRmlsZXMubWFwKChmKSA9PiBkcmFpblBlbmRpbmdXcml0ZShmKSkpOwoJ
Y29uc3QgZmlsdGVyZWQgPSBmaWx0ZXJSdW5Mb2dFbnRyaWVzKChhd2FpdCBQcm9taXNlLmFsbChq
c29ubEZpbGVzLm1hcChhc3luYyAoZmlsZVBhdGgpID0+IHsKCQlyZXR1cm4gcGFyc2VBbGxSdW5M
b2dFbnRyaWVzKGF3YWl0IGZzJDEucmVhZEZpbGUoZmlsZVBhdGgsICJ1dGYtOCIpLmNhdGNoKCgp
ID0+ICIiKSk7Cgl9KSkpLmZsYXQoKSwgewoJCXN0YXR1c2VzLAoJCWRlbGl2ZXJ5U3RhdHVzZXMs
CgkJcXVlcnksCgkJcXVlcnlUZXh0Rm9yRW50cnk6IChlbnRyeSkgPT4gewoJCQljb25zdCBqb2JO
YW1lID0gb3B0cy5qb2JOYW1lQnlJZD8uW2VudHJ5LmpvYklkXSA/PyAiIjsKCQkJcmV0dXJuIFsK
CQkJCWVudHJ5LnN1bW1hcnkgPz8gIiIsCgkJCQllbnRyeS5lcnJvciA/PyAiIiwKCQkJCWVudHJ5
LmpvYklkLAoJCQkJam9iTmFtZQoJCQldLmpvaW4oIiAiKTsKCQl9Cgl9KTsKCWNvbnN0IHNvcnRl
ZCA9IHNvcnREaXIgPT09ICJhc2MiID8gZmlsdGVyZWQudG9Tb3J0ZWQoKGEsIGIpID0+IGEudHMg
LSBiLnRzKSA6IGZpbHRlcmVkLnRvU29ydGVkKChhLCBiKSA9PiBiLnRzIC0gYS50cyk7Cgljb25z
dCB0b3RhbCA9IHNvcnRlZC5sZW5ndGg7Cgljb25zdCBvZmZzZXQgPSBNYXRoLm1heCgwLCBNYXRo
Lm1pbih0b3RhbCwgTWF0aC5mbG9vcihvcHRzLm9mZnNldCA/PyAwKSkpOwoJY29uc3QgZW50cmll
cyA9IHNvcnRlZC5zbGljZShvZmZzZXQsIG9mZnNldCArIGxpbWl0KTsKCWlmIChvcHRzLmpvYk5h
bWVCeUlkKSBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHsKCQljb25zdCBqb2JOYW1lID0g
b3B0cy5qb2JOYW1lQnlJZFtlbnRyeS5qb2JJZF07CgkJaWYgKGpvYk5hbWUpIGVudHJ5LmpvYk5h
bWUgPSBqb2JOYW1lOwoJfQoJY29uc3QgbmV4dE9mZnNldCA9IG9mZnNldCArIGVudHJpZXMubGVu
Z3RoOwoJcmV0dXJuIHsKCQllbnRyaWVzLAoJCXRvdGFsLAoJCW9mZnNldCwKCQlsaW1pdCwKCQlo
YXNNb3JlOiBuZXh0T2Zmc2V0IDwgdG90YWwsCgkJbmV4dE9mZnNldDogbmV4dE9mZnNldCA8IHRv
dGFsID8gbmV4dE9mZnNldCA6IG51bGwKCX07Cn0KLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMv
Y3Jvbi9zZXJ2aWNlL2luaXRpYWwtZGVsaXZlcnkudHMKZnVuY3Rpb24gbm9ybWFsaXplQ3JvbkNy
ZWF0ZURlbGl2ZXJ5SW5wdXQoaW5wdXQpIHsKCWNvbnN0IHBheWxvYWRSZWNvcmQgPSBpbnB1dC5w
YXlsb2FkICYmIHR5cGVvZiBpbnB1dC5wYXlsb2FkID09PSAib2JqZWN0IiA/IHsgLi4uaW5wdXQu
cGF5bG9hZCB9IDogbnVsbDsKCWNvbnN0IG5vcm1hbGl6ZWRMZWdhY3kgPSBub3JtYWxpemVMZWdh
Y3lEZWxpdmVyeUlucHV0KHsKCQlkZWxpdmVyeTogaW5wdXQuZGVsaXZlcnkgJiYgdHlwZW9mIGlu
cHV0LmRlbGl2ZXJ5ID09PSAib2JqZWN0IiA/IHsgLi4uaW5wdXQuZGVsaXZlcnkgfSA6IG51bGws
CgkJcGF5bG9hZDogcGF5bG9hZFJlY29yZAoJfSk7CglpZiAoIW5vcm1hbGl6ZWRMZWdhY3kubXV0
YXRlZCkgcmV0dXJuIGlucHV0OwoJcmV0dXJuIHsKCQkuLi5pbnB1dCwKCQlwYXlsb2FkOiBwYXls
b2FkUmVjb3JkID8gcGF5bG9hZFJlY29yZCA6IGlucHV0LnBheWxvYWQsCgkJZGVsaXZlcnk6IG5v
cm1hbGl6ZWRMZWdhY3kuZGVsaXZlcnkgPz8gaW5wdXQuZGVsaXZlcnkKCX07Cn0KZnVuY3Rpb24g
cmVzb2x2ZUluaXRpYWxDcm9uRGVsaXZlcnkoaW5wdXQpIHsKCWlmIChpbnB1dC5kZWxpdmVyeSkg
cmV0dXJuIGlucHV0LmRlbGl2ZXJ5OwoJaWYgKGlucHV0LnNlc3Npb25UYXJnZXQgPT09ICJpc29s
YXRlZCIgJiYgaW5wdXQucGF5bG9hZC5raW5kID09PSAiYWdlbnRUdXJuIikgcmV0dXJuIHsgbW9k
ZTogImFubm91bmNlIiB9Owp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2Nyb24vc2Vydmlj
ZS9qb2JzLnRzCmNvbnN0IFNUVUNLX1JVTl9NUyA9IDcyMDAgKiAxZTM7CmNvbnN0IFNUQUdHRVJf
T0ZGU0VUX0NBQ0hFX01BWCA9IDQwOTY7CmNvbnN0IHN0YWdnZXJPZmZzZXRDYWNoZSA9IC8qIEBf
X1BVUkVfXyAqLyBuZXcgTWFwKCk7CmZ1bmN0aW9uIGlzRmluaXRlVGltZXN0YW1wKHZhbHVlKSB7
CglyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAibnVtYmVyIiAmJiBOdW1iZXIuaXNGaW5pdGUodmFs
dWUpOwp9CmZ1bmN0aW9uIHJlc29sdmVTdGFibGVDcm9uT2Zmc2V0TXMoam9iSWQsIHN0YWdnZXJN
cykgewoJaWYgKHN0YWdnZXJNcyA8PSAxKSByZXR1cm4gMDsKCWNvbnN0IGNhY2hlS2V5ID0gYCR7
c3RhZ2dlck1zfToke2pvYklkfWA7Cgljb25zdCBjYWNoZWQgPSBzdGFnZ2VyT2Zmc2V0Q2FjaGUu
Z2V0KGNhY2hlS2V5KTsKCWlmIChjYWNoZWQgIT09IHZvaWQgMCkgcmV0dXJuIGNhY2hlZDsKCWNv
bnN0IG9mZnNldCA9IGNyeXB0by5jcmVhdGVIYXNoKCJzaGEyNTYiKS51cGRhdGUoam9iSWQpLmRp
Z2VzdCgpLnJlYWRVSW50MzJCRSgwKSAlIHN0YWdnZXJNczsKCWlmIChzdGFnZ2VyT2Zmc2V0Q2Fj
aGUuc2l6ZSA+PSBTVEFHR0VSX09GRlNFVF9DQUNIRV9NQVgpIHsKCQljb25zdCBmaXJzdCA9IHN0
YWdnZXJPZmZzZXRDYWNoZS5rZXlzKCkubmV4dCgpOwoJCWlmICghZmlyc3QuZG9uZSkgc3RhZ2dl
ck9mZnNldENhY2hlLmRlbGV0ZShmaXJzdC52YWx1ZSk7Cgl9CglzdGFnZ2VyT2Zmc2V0Q2FjaGUu
c2V0KGNhY2hlS2V5LCBvZmZzZXQpOwoJcmV0dXJuIG9mZnNldDsKfQpmdW5jdGlvbiBjb21wdXRl
U3RhZ2dlcmVkQ3Jvbk5leHRSdW5BdE1zKGpvYiwgbm93TXMpIHsKCWlmIChqb2Iuc2NoZWR1bGUu
a2luZCAhPT0gImNyb24iKSByZXR1cm4gY29tcHV0ZU5leHRSdW5BdE1zKGpvYi5zY2hlZHVsZSwg
bm93TXMpOwoJY29uc3Qgc3RhZ2dlck1zID0gcmVzb2x2ZUNyb25TdGFnZ2VyTXMoam9iLnNjaGVk
dWxlKTsKCWNvbnN0IG9mZnNldE1zID0gcmVzb2x2ZVN0YWJsZUNyb25PZmZzZXRNcyhqb2IuaWQs
IHN0YWdnZXJNcyk7CglpZiAob2Zmc2V0TXMgPD0gMCkgcmV0dXJuIGNvbXB1dGVOZXh0UnVuQXRN
cyhqb2Iuc2NoZWR1bGUsIG5vd01zKTsKCWxldCBjdXJzb3JNcyA9IE1hdGgubWF4KDAsIG5vd01z
IC0gb2Zmc2V0TXMpOwoJZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPCA0OyBhdHRlbXB0
ICs9IDEpIHsKCQljb25zdCBiYXNlTmV4dCA9IGNvbXB1dGVOZXh0UnVuQXRNcyhqb2Iuc2NoZWR1
bGUsIGN1cnNvck1zKTsKCQlpZiAoYmFzZU5leHQgPT09IHZvaWQgMCkgcmV0dXJuOwoJCWNvbnN0
IHNoaWZ0ZWQgPSBiYXNlTmV4dCArIG9mZnNldE1zOwoJCWlmIChzaGlmdGVkID4gbm93TXMpIHJl
dHVybiBzaGlmdGVkOwoJCWN1cnNvck1zID0gTWF0aC5tYXgoY3Vyc29yTXMgKyAxLCBiYXNlTmV4
dCArIDFlMyk7Cgl9Cn0KZnVuY3Rpb24gY29tcHV0ZVN0YWdnZXJlZENyb25QcmV2aW91c1J1bkF0
TXMoam9iLCBub3dNcykgewoJaWYgKGpvYi5zY2hlZHVsZS5raW5kICE9PSAiY3JvbiIpIHJldHVy
bjsKCWNvbnN0IHN0YWdnZXJNcyA9IHJlc29sdmVDcm9uU3RhZ2dlck1zKGpvYi5zY2hlZHVsZSk7
Cgljb25zdCBvZmZzZXRNcyA9IHJlc29sdmVTdGFibGVDcm9uT2Zmc2V0TXMoam9iLmlkLCBzdGFn
Z2VyTXMpOwoJaWYgKG9mZnNldE1zIDw9IDApIHJldHVybiBjb21wdXRlUHJldmlvdXNSdW5BdE1z
KGpvYi5zY2hlZHVsZSwgbm93TXMpOwoJbGV0IGN1cnNvck1zID0gTWF0aC5tYXgoMCwgbm93TXMg
LSBvZmZzZXRNcyk7Cglmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8IDQ7IGF0dGVtcHQg
Kz0gMSkgewoJCWNvbnN0IGJhc2VQcmV2aW91cyA9IGNvbXB1dGVQcmV2aW91c1J1bkF0TXMoam9i
LnNjaGVkdWxlLCBjdXJzb3JNcyk7CgkJaWYgKGJhc2VQcmV2aW91cyA9PT0gdm9pZCAwKSByZXR1
cm47CgkJY29uc3Qgc2hpZnRlZCA9IGJhc2VQcmV2aW91cyArIG9mZnNldE1zOwoJCWlmIChzaGlm
dGVkIDw9IG5vd01zKSByZXR1cm4gc2hpZnRlZDsKCQljdXJzb3JNcyA9IE1hdGgubWF4KDAsIGJh
c2VQcmV2aW91cyAtIDFlMyk7Cgl9Cn0KZnVuY3Rpb24gcmVzb2x2ZUV2ZXJ5QW5jaG9yTXMocGFy
YW1zKSB7Cgljb25zdCBjb2VyY2VkID0gY29lcmNlRmluaXRlU2NoZWR1bGVOdW1iZXIocGFyYW1z
LnNjaGVkdWxlLmFuY2hvck1zKTsKCWlmIChjb2VyY2VkICE9PSB2b2lkIDApIHJldHVybiBNYXRo
Lm1heCgwLCBNYXRoLmZsb29yKGNvZXJjZWQpKTsKCWlmIChpc0Zpbml0ZVRpbWVzdGFtcChwYXJh
bXMuZmFsbGJhY2tBbmNob3JNcykpIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLmZsb29yKHBhcmFt
cy5mYWxsYmFja0FuY2hvck1zKSk7CglyZXR1cm4gMDsKfQpmdW5jdGlvbiBhc3NlcnRTdXBwb3J0
ZWRKb2JTcGVjKGpvYikgewoJaWYgKGpvYi5zZXNzaW9uVGFyZ2V0ID09PSAibWFpbiIgJiYgam9i
LnBheWxvYWQua2luZCAhPT0gInN5c3RlbUV2ZW50IikgdGhyb3cgbmV3IEVycm9yKCJtYWluIGNy
b24gam9icyByZXF1aXJlIHBheWxvYWQua2luZD1cInN5c3RlbUV2ZW50XCIiKTsKCWlmIChqb2Iu
c2Vzc2lvblRhcmdldCA9PT0gImlzb2xhdGVkIiAmJiBqb2IucGF5bG9hZC5raW5kICE9PSAiYWdl
bnRUdXJuIikgdGhyb3cgbmV3IEVycm9yKCJpc29sYXRlZCBjcm9uIGpvYnMgcmVxdWlyZSBwYXls
b2FkLmtpbmQ9XCJhZ2VudFR1cm5cIiIpOwp9CmZ1bmN0aW9uIGFzc2VydE1haW5TZXNzaW9uQWdl
bnRJZChqb2IsIGRlZmF1bHRBZ2VudElkKSB7CglpZiAoam9iLnNlc3Npb25UYXJnZXQgIT09ICJt
YWluIikgcmV0dXJuOwoJaWYgKCFqb2IuYWdlbnRJZCkgcmV0dXJuOwoJaWYgKG5vcm1hbGl6ZUFn
ZW50SWQoam9iLmFnZW50SWQpICE9PSBub3JtYWxpemVBZ2VudElkKGRlZmF1bHRBZ2VudElkKSkg
dGhyb3cgbmV3IEVycm9yKGBjcm9uOiBzZXNzaW9uVGFyZ2V0ICJtYWluIiBpcyBvbmx5IHZhbGlk
IGZvciB0aGUgZGVmYXVsdCBhZ2VudC4gVXNlIHNlc3Npb25UYXJnZXQgImlzb2xhdGVkIiB3aXRo
IHBheWxvYWQua2luZCAiYWdlbnRUdXJuIiBmb3Igbm9uLWRlZmF1bHQgYWdlbnRzIChhZ2VudElk
OiAke2pvYi5hZ2VudElkfSlgKTsKfQpjb25zdCBURUxFR1JBTV9UTUVfVVJMX1JFR0VYID0gL15o
dHRwcz86XC9cL3RcLm1lXC98dFwubWVcLy9pOwpjb25zdCBURUxFR1JBTV9TTEFTSF9UT1BJQ19S
RUdFWCA9IC9eLT9cZCtcL1xkKyQvOwpmdW5jdGlvbiB2YWxpZGF0ZVRlbGVncmFtRGVsaXZlcnlU
YXJnZXQodG8pIHsKCWlmICghdG8pIHJldHVybjsKCWNvbnN0IHRyaW1tZWQgPSB0by50cmltKCk7
CglpZiAoVEVMRUdSQU1fVE1FX1VSTF9SRUdFWC50ZXN0KHRyaW1tZWQpKSByZXR1cm47CglpZiAo
VEVMRUdSQU1fU0xBU0hfVE9QSUNfUkVHRVgudGVzdCh0cmltbWVkKSkgcmV0dXJuIGBJbnZhbGlk
IFRlbGVncmFtIGRlbGl2ZXJ5IHRhcmdldCAiJHt0b30iLiBVc2UgY29sb24gKDopIGFzIGRlbGlt
aXRlciBmb3IgdG9waWNzLCBub3Qgc2xhc2guIFZhbGlkIGZvcm1hdHM6IC0xMDAxMjM0NTY3ODkw
LCAtMTAwMTIzNDU2Nzg5MDoxMjMsIC0xMDAxMjM0NTY3ODkwOnRvcGljOjEyMywgQHVzZXJuYW1l
LCBodHRwczovL3QubWUvdXNlcm5hbWVgOwp9CmZ1bmN0aW9uIGFzc2VydERlbGl2ZXJ5U3VwcG9y
dChqb2IpIHsKCWlmICgham9iLmRlbGl2ZXJ5IHx8IGpvYi5kZWxpdmVyeS5tb2RlID09PSAibm9u
ZSIpIHJldHVybjsKCWlmIChqb2IuZGVsaXZlcnkubW9kZSA9PT0gIndlYmhvb2siKSB7CgkJY29u
c3QgdGFyZ2V0ID0gbm9ybWFsaXplSHR0cFdlYmhvb2tVcmwoam9iLmRlbGl2ZXJ5LnRvKTsKCQlp
ZiAoIXRhcmdldCkgdGhyb3cgbmV3IEVycm9yKCJjcm9uIHdlYmhvb2sgZGVsaXZlcnkgcmVxdWly
ZXMgZGVsaXZlcnkudG8gdG8gYmUgYSB2YWxpZCBodHRwKHMpIFVSTCIpOwoJCWpvYi5kZWxpdmVy
eS50byA9IHRhcmdldDsKCQlyZXR1cm47Cgl9CglpZiAoam9iLnNlc3Npb25UYXJnZXQgIT09ICJp
c29sYXRlZCIpIHRocm93IG5ldyBFcnJvcigiY3JvbiBjaGFubmVsIGRlbGl2ZXJ5IGNvbmZpZyBp
cyBvbmx5IHN1cHBvcnRlZCBmb3Igc2Vzc2lvblRhcmdldD1cImlzb2xhdGVkXCIiKTsKCWlmIChq
b2IuZGVsaXZlcnkuY2hhbm5lbCA9PT0gInRlbGVncmFtIikgewoJCWNvbnN0IHRlbGVncmFtRXJy
b3IgPSB2YWxpZGF0ZVRlbGVncmFtRGVsaXZlcnlUYXJnZXQoam9iLmRlbGl2ZXJ5LnRvKTsKCQlp
ZiAodGVsZWdyYW1FcnJvcikgdGhyb3cgbmV3IEVycm9yKHRlbGVncmFtRXJyb3IpOwoJfQp9CmZ1
bmN0aW9uIGFzc2VydEZhaWx1cmVEZXN0aW5hdGlvblN1cHBvcnQoam9iKSB7Cgljb25zdCBmYWls
dXJlRGVzdGluYXRpb24gPSBqb2IuZGVsaXZlcnk/LmZhaWx1cmVEZXN0aW5hdGlvbjsKCWlmICgh
ZmFpbHVyZURlc3RpbmF0aW9uKSByZXR1cm47CglpZiAoam9iLnNlc3Npb25UYXJnZXQgPT09ICJt
YWluIiAmJiBqb2IuZGVsaXZlcnk/Lm1vZGUgIT09ICJ3ZWJob29rIikgdGhyb3cgbmV3IEVycm9y
KCJjcm9uIGRlbGl2ZXJ5LmZhaWx1cmVEZXN0aW5hdGlvbiBpcyBvbmx5IHN1cHBvcnRlZCBmb3Ig
c2Vzc2lvblRhcmdldD1cImlzb2xhdGVkXCIgdW5sZXNzIGRlbGl2ZXJ5Lm1vZGU9XCJ3ZWJob29r
XCIiKTsKCWlmIChmYWlsdXJlRGVzdGluYXRpb24ubW9kZSA9PT0gIndlYmhvb2siKSB7CgkJY29u
c3QgdGFyZ2V0ID0gbm9ybWFsaXplSHR0cFdlYmhvb2tVcmwoZmFpbHVyZURlc3RpbmF0aW9uLnRv
KTsKCQlpZiAoIXRhcmdldCkgdGhyb3cgbmV3IEVycm9yKCJjcm9uIGZhaWx1cmUgZGVzdGluYXRp
b24gd2ViaG9vayByZXF1aXJlcyBkZWxpdmVyeS5mYWlsdXJlRGVzdGluYXRpb24udG8gdG8gYmUg
YSB2YWxpZCBodHRwKHMpIFVSTCIpOwoJCWZhaWx1cmVEZXN0aW5hdGlvbi50byA9IHRhcmdldDsK
CX0KfQpmdW5jdGlvbiBmaW5kSm9iT3JUaHJvdyhzdGF0ZSwgaWQpIHsKCWNvbnN0IGpvYiA9IHN0
YXRlLnN0b3JlPy5qb2JzLmZpbmQoKGopID0+IGouaWQgPT09IGlkKTsKCWlmICgham9iKSB0aHJv
dyBuZXcgRXJyb3IoYHVua25vd24gY3JvbiBqb2IgaWQ6ICR7aWR9YCk7CglyZXR1cm4gam9iOwp9
CmZ1bmN0aW9uIGNvbXB1dGVKb2JOZXh0UnVuQXRNcyhqb2IsIG5vd01zKSB7CglpZiAoIWpvYi5l
bmFibGVkKSByZXR1cm47CglpZiAoam9iLnNjaGVkdWxlLmtpbmQgPT09ICJldmVyeSIpIHsKCQlj
b25zdCBldmVyeU1zUmF3ID0gY29lcmNlRmluaXRlU2NoZWR1bGVOdW1iZXIoam9iLnNjaGVkdWxl
LmV2ZXJ5TXMpOwoJCWlmIChldmVyeU1zUmF3ID09PSB2b2lkIDApIHJldHVybjsKCQljb25zdCBl
dmVyeU1zID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihldmVyeU1zUmF3KSk7CgkJY29uc3QgbGFz
dFJ1bkF0TXMgPSBqb2Iuc3RhdGUubGFzdFJ1bkF0TXM7CgkJaWYgKHR5cGVvZiBsYXN0UnVuQXRN
cyA9PT0gIm51bWJlciIgJiYgTnVtYmVyLmlzRmluaXRlKGxhc3RSdW5BdE1zKSkgewoJCQljb25z
dCBuZXh0RnJvbUxhc3RSdW4gPSBNYXRoLmZsb29yKGxhc3RSdW5BdE1zKSArIGV2ZXJ5TXM7CgkJ
CWlmIChuZXh0RnJvbUxhc3RSdW4gPiBub3dNcykgcmV0dXJuIG5leHRGcm9tTGFzdFJ1bjsKCQl9
CgkJY29uc3QgZmFsbGJhY2tBbmNob3JNcyA9IGlzRmluaXRlVGltZXN0YW1wKGpvYi5jcmVhdGVk
QXRNcykgPyBqb2IuY3JlYXRlZEF0TXMgOiBub3dNczsKCQljb25zdCBhbmNob3JNcyA9IHJlc29s
dmVFdmVyeUFuY2hvck1zKHsKCQkJc2NoZWR1bGU6IGpvYi5zY2hlZHVsZSwKCQkJZmFsbGJhY2tB
bmNob3JNcwoJCX0pOwoJCWNvbnN0IG5leHQgPSBjb21wdXRlTmV4dFJ1bkF0TXMoewoJCQkuLi5q
b2Iuc2NoZWR1bGUsCgkJCWV2ZXJ5TXMsCgkJCWFuY2hvck1zCgkJfSwgbm93TXMpOwoJCXJldHVy
biBpc0Zpbml0ZVRpbWVzdGFtcChuZXh0KSA/IG5leHQgOiB2b2lkIDA7Cgl9CglpZiAoam9iLnNj
aGVkdWxlLmtpbmQgPT09ICJhdCIpIHsKCQljb25zdCBzY2hlZHVsZSA9IGpvYi5zY2hlZHVsZTsK
CQljb25zdCBhdE1zID0gdHlwZW9mIHNjaGVkdWxlLmF0TXMgPT09ICJudW1iZXIiICYmIE51bWJl
ci5pc0Zpbml0ZShzY2hlZHVsZS5hdE1zKSAmJiBzY2hlZHVsZS5hdE1zID4gMCA/IHNjaGVkdWxl
LmF0TXMgOiB0eXBlb2Ygc2NoZWR1bGUuYXRNcyA9PT0gInN0cmluZyIgPyBwYXJzZUFic29sdXRl
VGltZU1zKHNjaGVkdWxlLmF0TXMpIDogdHlwZW9mIHNjaGVkdWxlLmF0ID09PSAic3RyaW5nIiA/
IHBhcnNlQWJzb2x1dGVUaW1lTXMoc2NoZWR1bGUuYXQpIDogbnVsbDsKCQlpZiAoam9iLnN0YXRl
Lmxhc3RTdGF0dXMgPT09ICJvayIgJiYgam9iLnN0YXRlLmxhc3RSdW5BdE1zKSB7CgkJCWlmIChh
dE1zICE9PSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShhdE1zKSAmJiBhdE1zID4gam9iLnN0YXRl
Lmxhc3RSdW5BdE1zKSByZXR1cm4gYXRNczsKCQkJcmV0dXJuOwoJCX0KCQlyZXR1cm4gYXRNcyAh
PT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUoYXRNcykgPyBhdE1zIDogdm9pZCAwOwoJfQoJY29u
c3QgbmV4dCA9IGNvbXB1dGVTdGFnZ2VyZWRDcm9uTmV4dFJ1bkF0TXMoam9iLCBub3dNcyk7Cglp
ZiAobmV4dCA9PT0gdm9pZCAwICYmIGpvYi5zY2hlZHVsZS5raW5kID09PSAiY3JvbiIpIHJldHVy
biBjb21wdXRlU3RhZ2dlcmVkQ3Jvbk5leHRSdW5BdE1zKGpvYiwgTWF0aC5mbG9vcihub3dNcyAv
IDFlMykgKiAxZTMgKyAxZTMpOwoJcmV0dXJuIGlzRmluaXRlVGltZXN0YW1wKG5leHQpID8gbmV4
dCA6IHZvaWQgMDsKfQpmdW5jdGlvbiBjb21wdXRlSm9iUHJldmlvdXNSdW5BdE1zKGpvYiwgbm93
TXMpIHsKCWlmICgham9iLmVuYWJsZWQgfHwgam9iLnNjaGVkdWxlLmtpbmQgIT09ICJjcm9uIikg
cmV0dXJuOwoJY29uc3QgcHJldmlvdXMgPSBjb21wdXRlU3RhZ2dlcmVkQ3JvblByZXZpb3VzUnVu
QXRNcyhqb2IsIG5vd01zKTsKCXJldHVybiBpc0Zpbml0ZVRpbWVzdGFtcChwcmV2aW91cykgPyBw
cmV2aW91cyA6IHZvaWQgMDsKfQovKiogTWF4aW11bSBjb25zZWN1dGl2ZSBzY2hlZHVsZSBlcnJv
cnMgYmVmb3JlIGF1dG8tZGlzYWJsaW5nIGEgam9iLiAqLwpjb25zdCBNQVhfU0NIRURVTEVfRVJS
T1JTID0gMzsKZnVuY3Rpb24gcmVjb3JkU2NoZWR1bGVDb21wdXRlRXJyb3IocGFyYW1zKSB7Cglj
b25zdCB7IHN0YXRlLCBqb2IsIGVyciB9ID0gcGFyYW1zOwoJY29uc3QgZXJyb3JDb3VudCA9IChq
b2Iuc3RhdGUuc2NoZWR1bGVFcnJvckNvdW50ID8/IDApICsgMTsKCWNvbnN0IGVyclRleHQgPSBT
dHJpbmcoZXJyKTsKCWpvYi5zdGF0ZS5zY2hlZHVsZUVycm9yQ291bnQgPSBlcnJvckNvdW50OwoJ
am9iLnN0YXRlLm5leHRSdW5BdE1zID0gdm9pZCAwOwoJam9iLnN0YXRlLmxhc3RFcnJvciA9IGBz
Y2hlZHVsZSBlcnJvcjogJHtlcnJUZXh0fWA7CglpZiAoZXJyb3JDb3VudCA+PSBNQVhfU0NIRURV
TEVfRVJST1JTKSB7CgkJam9iLmVuYWJsZWQgPSBmYWxzZTsKCQlzdGF0ZS5kZXBzLmxvZy5lcnJv
cih7CgkJCWpvYklkOiBqb2IuaWQsCgkJCW5hbWU6IGpvYi5uYW1lLAoJCQllcnJvckNvdW50LAoJ
CQllcnI6IGVyclRleHQKCQl9LCAiY3JvbjogYXV0by1kaXNhYmxlZCBqb2IgYWZ0ZXIgcmVwZWF0
ZWQgc2NoZWR1bGUgZXJyb3JzIik7CgkJY29uc3Qgbm90aWZ5VGV4dCA9IGDimqDvuI8gQ3JvbiBq
b2IgIiR7am9iLm5hbWV9IiBoYXMgYmVlbiBhdXRvLWRpc2FibGVkIGFmdGVyICR7ZXJyb3JDb3Vu
dH0gY29uc2VjdXRpdmUgc2NoZWR1bGUgZXJyb3JzLiBMYXN0IGVycm9yOiAke2VyclRleHR9YDsK
CQlzdGF0ZS5kZXBzLmVucXVldWVTeXN0ZW1FdmVudChub3RpZnlUZXh0LCB7CgkJCWFnZW50SWQ6
IGpvYi5hZ2VudElkLAoJCQlzZXNzaW9uS2V5OiBqb2Iuc2Vzc2lvbktleSwKCQkJY29udGV4dEtl
eTogYGNyb246JHtqb2IuaWR9OmF1dG8tZGlzYWJsZWRgCgkJfSk7CgkJc3RhdGUuZGVwcy5yZXF1
ZXN0SGVhcnRiZWF0Tm93KHsKCQkJcmVhc29uOiBgY3Jvbjoke2pvYi5pZH06YXV0by1kaXNhYmxl
ZGAsCgkJCWFnZW50SWQ6IGpvYi5hZ2VudElkLAoJCQlzZXNzaW9uS2V5OiBqb2Iuc2Vzc2lvbktl
eQoJCX0pOwoJfSBlbHNlIHN0YXRlLmRlcHMubG9nLndhcm4oewoJCWpvYklkOiBqb2IuaWQsCgkJ
bmFtZTogam9iLm5hbWUsCgkJZXJyb3JDb3VudCwKCQllcnI6IGVyclRleHQKCX0sICJjcm9uOiBm
YWlsZWQgdG8gY29tcHV0ZSBuZXh0IHJ1biBmb3Igam9iIChza2lwcGluZykiKTsKCXJldHVybiB0
cnVlOwp9CmZ1bmN0aW9uIG5vcm1hbGl6ZUpvYlRpY2tTdGF0ZShwYXJhbXMpIHsKCWNvbnN0IHsg
c3RhdGUsIGpvYiwgbm93TXMgfSA9IHBhcmFtczsKCWxldCBjaGFuZ2VkID0gZmFsc2U7CglpZiAo
IWpvYi5zdGF0ZSkgewoJCWpvYi5zdGF0ZSA9IHt9OwoJCWNoYW5nZWQgPSB0cnVlOwoJfQoJaWYg
KCFqb2IuZW5hYmxlZCkgewoJCWlmIChqb2Iuc3RhdGUubmV4dFJ1bkF0TXMgIT09IHZvaWQgMCkg
ewoJCQlqb2Iuc3RhdGUubmV4dFJ1bkF0TXMgPSB2b2lkIDA7CgkJCWNoYW5nZWQgPSB0cnVlOwoJ
CX0KCQlpZiAoam9iLnN0YXRlLnJ1bm5pbmdBdE1zICE9PSB2b2lkIDApIHsKCQkJam9iLnN0YXRl
LnJ1bm5pbmdBdE1zID0gdm9pZCAwOwoJCQljaGFuZ2VkID0gdHJ1ZTsKCQl9CgkJcmV0dXJuIHsK
CQkJY2hhbmdlZCwKCQkJc2tpcDogdHJ1ZQoJCX07Cgl9CglpZiAoIWlzRmluaXRlVGltZXN0YW1w
KGpvYi5zdGF0ZS5uZXh0UnVuQXRNcykgJiYgam9iLnN0YXRlLm5leHRSdW5BdE1zICE9PSB2b2lk
IDApIHsKCQlqb2Iuc3RhdGUubmV4dFJ1bkF0TXMgPSB2b2lkIDA7CgkJY2hhbmdlZCA9IHRydWU7
Cgl9Cgljb25zdCBydW5uaW5nQXQgPSBqb2Iuc3RhdGUucnVubmluZ0F0TXM7CglpZiAodHlwZW9m
IHJ1bm5pbmdBdCA9PT0gIm51bWJlciIgJiYgbm93TXMgLSBydW5uaW5nQXQgPiBTVFVDS19SVU5f
TVMpIHsKCQlzdGF0ZS5kZXBzLmxvZy53YXJuKHsKCQkJam9iSWQ6IGpvYi5pZCwKCQkJcnVubmlu
Z0F0TXM6IHJ1bm5pbmdBdAoJCX0sICJjcm9uOiBjbGVhcmluZyBzdHVjayBydW5uaW5nIG1hcmtl
ciIpOwoJCWpvYi5zdGF0ZS5ydW5uaW5nQXRNcyA9IHZvaWQgMDsKCQljaGFuZ2VkID0gdHJ1ZTsK
CX0KCXJldHVybiB7CgkJY2hhbmdlZCwKCQlza2lwOiBmYWxzZQoJfTsKfQpmdW5jdGlvbiB3YWxr
U2NoZWR1bGFibGVKb2JzKHN0YXRlLCBmbiwgbm93TXMgPSBzdGF0ZS5kZXBzLm5vd01zKCkpIHsK
CWlmICghc3RhdGUuc3RvcmUpIHJldHVybiBmYWxzZTsKCWxldCBjaGFuZ2VkID0gZmFsc2U7Cglm
b3IgKGNvbnN0IGpvYiBvZiBzdGF0ZS5zdG9yZS5qb2JzKSB7CgkJY29uc3QgdGljayA9IG5vcm1h
bGl6ZUpvYlRpY2tTdGF0ZSh7CgkJCXN0YXRlLAoJCQlqb2IsCgkJCW5vd01zCgkJfSk7CgkJaWYg
KHRpY2suY2hhbmdlZCkgY2hhbmdlZCA9IHRydWU7CgkJaWYgKHRpY2suc2tpcCkgY29udGludWU7
CgkJaWYgKGZuKHsKCQkJam9iLAoJCQlub3dNcwoJCX0pKSBjaGFuZ2VkID0gdHJ1ZTsKCX0KCXJl
dHVybiBjaGFuZ2VkOwp9CmZ1bmN0aW9uIHJlY29tcHV0ZUpvYk5leHRSdW5BdE1zKHBhcmFtcykg
ewoJbGV0IGNoYW5nZWQgPSBmYWxzZTsKCXRyeSB7CgkJY29uc3QgbmV3TmV4dCA9IGNvbXB1dGVK
b2JOZXh0UnVuQXRNcyhwYXJhbXMuam9iLCBwYXJhbXMubm93TXMpOwoJCWlmIChwYXJhbXMuam9i
LnN0YXRlLm5leHRSdW5BdE1zICE9PSBuZXdOZXh0KSB7CgkJCXBhcmFtcy5qb2Iuc3RhdGUubmV4
dFJ1bkF0TXMgPSBuZXdOZXh0OwoJCQljaGFuZ2VkID0gdHJ1ZTsKCQl9CgkJaWYgKHBhcmFtcy5q
b2Iuc3RhdGUuc2NoZWR1bGVFcnJvckNvdW50KSB7CgkJCXBhcmFtcy5qb2Iuc3RhdGUuc2NoZWR1
bGVFcnJvckNvdW50ID0gdm9pZCAwOwoJCQljaGFuZ2VkID0gdHJ1ZTsKCQl9Cgl9IGNhdGNoIChl
cnIpIHsKCQlpZiAocmVjb3JkU2NoZWR1bGVDb21wdXRlRXJyb3IoewoJCQlzdGF0ZTogcGFyYW1z
LnN0YXRlLAoJCQlqb2I6IHBhcmFtcy5qb2IsCgkJCWVycgoJCX0pKSBjaGFuZ2VkID0gdHJ1ZTsK
CX0KCXJldHVybiBjaGFuZ2VkOwp9CmZ1bmN0aW9uIHJlY29tcHV0ZU5leHRSdW5zKHN0YXRlKSB7
CglyZXR1cm4gd2Fsa1NjaGVkdWxhYmxlSm9icyhzdGF0ZSwgKHsgam9iLCBub3dNczogbm93IH0p
ID0+IHsKCQlsZXQgY2hhbmdlZCA9IGZhbHNlOwoJCWNvbnN0IG5leHRSdW4gPSBqb2Iuc3RhdGUu
bmV4dFJ1bkF0TXM7CgkJaWYgKCFpc0Zpbml0ZVRpbWVzdGFtcChuZXh0UnVuKSB8fCBub3cgPj0g
bmV4dFJ1bikgewoJCQlpZiAocmVjb21wdXRlSm9iTmV4dFJ1bkF0TXMoewoJCQkJc3RhdGUsCgkJ
CQlqb2IsCgkJCQlub3dNczogbm93CgkJCX0pKSBjaGFuZ2VkID0gdHJ1ZTsKCQl9CgkJcmV0dXJu
IGNoYW5nZWQ7Cgl9KTsKfQovKioKKiBNYWludGVuYW5jZS1vbmx5IHZlcnNpb24gb2YgcmVjb21w
dXRlTmV4dFJ1bnMgdGhhdCBoYW5kbGVzIGRpc2FibGVkIGpvYnMKKiBhbmQgc3R1Y2sgbWFya2Vy
cywgYnV0IGRvZXMgTk9UIHJlY29tcHV0ZSBuZXh0UnVuQXRNcyBmb3IgZW5hYmxlZCBqb2JzCiog
d2l0aCBleGlzdGluZyB2YWx1ZXMuIFVzZWQgZHVyaW5nIHRpbWVyIHRpY2tzIHdoZW4gbm8gZHVl
IGpvYnMgd2VyZSBmb3VuZAoqIHRvIHByZXZlbnQgc2lsZW50bHkgYWR2YW5jaW5nIHBhc3QtZHVl
IG5leHRSdW5BdE1zIHZhbHVlcyB3aXRob3V0IGV4ZWN1dGlvbgoqIChzZWUgIzEzOTkyKS4KKi8K
ZnVuY3Rpb24gcmVjb21wdXRlTmV4dFJ1bnNGb3JNYWludGVuYW5jZShzdGF0ZSwgb3B0cykgewoJ
Y29uc3QgcmVjb21wdXRlRXhwaXJlZCA9IG9wdHM/LnJlY29tcHV0ZUV4cGlyZWQgPz8gZmFsc2U7
CglyZXR1cm4gd2Fsa1NjaGVkdWxhYmxlSm9icyhzdGF0ZSwgKHsgam9iLCBub3dNczogbm93IH0p
ID0+IHsKCQlsZXQgY2hhbmdlZCA9IGZhbHNlOwoJCWlmICghaXNGaW5pdGVUaW1lc3RhbXAoam9i
LnN0YXRlLm5leHRSdW5BdE1zKSkgewoJCQlpZiAocmVjb21wdXRlSm9iTmV4dFJ1bkF0TXMoewoJ
CQkJc3RhdGUsCgkJCQlqb2IsCgkJCQlub3dNczogbm93CgkJCX0pKSBjaGFuZ2VkID0gdHJ1ZTsK
CQl9IGVsc2UgaWYgKHJlY29tcHV0ZUV4cGlyZWQgJiYgbm93ID49IGpvYi5zdGF0ZS5uZXh0UnVu
QXRNcyAmJiB0eXBlb2Ygam9iLnN0YXRlLnJ1bm5pbmdBdE1zICE9PSAibnVtYmVyIikgewoJCQlj
b25zdCBsYXN0UnVuID0gam9iLnN0YXRlLmxhc3RSdW5BdE1zOwoJCQlpZiAoaXNGaW5pdGVUaW1l
c3RhbXAobGFzdFJ1bikgJiYgbGFzdFJ1biA+PSBqb2Iuc3RhdGUubmV4dFJ1bkF0TXMpIHsKCQkJ
CWlmIChyZWNvbXB1dGVKb2JOZXh0UnVuQXRNcyh7CgkJCQkJc3RhdGUsCgkJCQkJam9iLAoJCQkJ
CW5vd01zOiBub3cKCQkJCX0pKSBjaGFuZ2VkID0gdHJ1ZTsKCQkJfQoJCX0KCQlyZXR1cm4gY2hh
bmdlZDsKCX0sIG9wdHM/Lm5vd01zKTsKfQpmdW5jdGlvbiBuZXh0V2FrZUF0TXMoc3RhdGUpIHsK
CWNvbnN0IGVuYWJsZWQgPSAoc3RhdGUuc3RvcmU/LmpvYnMgPz8gW10pLmZpbHRlcigoaikgPT4g
ai5lbmFibGVkICYmIGlzRmluaXRlVGltZXN0YW1wKGouc3RhdGUubmV4dFJ1bkF0TXMpKTsKCWlm
IChlbmFibGVkLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoJY29uc3QgZmlyc3QgPSBlbmFibGVkWzBd
Py5zdGF0ZS5uZXh0UnVuQXRNczsKCWlmICghaXNGaW5pdGVUaW1lc3RhbXAoZmlyc3QpKSByZXR1
cm47CglyZXR1cm4gZW5hYmxlZC5yZWR1Y2UoKG1pbiwgaikgPT4gewoJCWNvbnN0IG5leHQgPSBq
LnN0YXRlLm5leHRSdW5BdE1zOwoJCXJldHVybiBpc0Zpbml0ZVRpbWVzdGFtcChuZXh0KSA/IE1h
dGgubWluKG1pbiwgbmV4dCkgOiBtaW47Cgl9LCBmaXJzdCk7Cn0KZnVuY3Rpb24gY3JlYXRlSm9i
KHN0YXRlLCBpbnB1dCkgewoJY29uc3Qgbm93ID0gc3RhdGUuZGVwcy5ub3dNcygpOwoJY29uc3Qg
aWQgPSBjcnlwdG8ucmFuZG9tVVVJRCgpOwoJY29uc3Qgc2NoZWR1bGUgPSBpbnB1dC5zY2hlZHVs
ZS5raW5kID09PSAiZXZlcnkiID8gewoJCS4uLmlucHV0LnNjaGVkdWxlLAoJCWFuY2hvck1zOiBy
ZXNvbHZlRXZlcnlBbmNob3JNcyh7CgkJCXNjaGVkdWxlOiBpbnB1dC5zY2hlZHVsZSwKCQkJZmFs
bGJhY2tBbmNob3JNczogbm93CgkJfSkKCX0gOiBpbnB1dC5zY2hlZHVsZS5raW5kID09PSAiY3Jv
biIgPyAoKCkgPT4gewoJCWNvbnN0IGV4cGxpY2l0U3RhZ2dlck1zID0gbm9ybWFsaXplQ3JvblN0
YWdnZXJNcyhpbnB1dC5zY2hlZHVsZS5zdGFnZ2VyTXMpOwoJCWlmIChleHBsaWNpdFN0YWdnZXJN
cyAhPT0gdm9pZCAwKSByZXR1cm4gewoJCQkuLi5pbnB1dC5zY2hlZHVsZSwKCQkJc3RhZ2dlck1z
OiBleHBsaWNpdFN0YWdnZXJNcwoJCX07CgkJY29uc3QgZGVmYXVsdFN0YWdnZXJNcyA9IHJlc29s
dmVEZWZhdWx0Q3JvblN0YWdnZXJNcyhpbnB1dC5zY2hlZHVsZS5leHByKTsKCQlyZXR1cm4gZGVm
YXVsdFN0YWdnZXJNcyAhPT0gdm9pZCAwID8gewoJCQkuLi5pbnB1dC5zY2hlZHVsZSwKCQkJc3Rh
Z2dlck1zOiBkZWZhdWx0U3RhZ2dlck1zCgkJfSA6IGlucHV0LnNjaGVkdWxlOwoJfSkoKSA6IGlu
cHV0LnNjaGVkdWxlOwoJY29uc3QgZGVsZXRlQWZ0ZXJSdW4gPSB0eXBlb2YgaW5wdXQuZGVsZXRl
QWZ0ZXJSdW4gPT09ICJib29sZWFuIiA/IGlucHV0LmRlbGV0ZUFmdGVyUnVuIDogc2NoZWR1bGUu
a2luZCA9PT0gImF0IiA/IHRydWUgOiB2b2lkIDA7Cgljb25zdCBlbmFibGVkID0gdHlwZW9mIGlu
cHV0LmVuYWJsZWQgPT09ICJib29sZWFuIiA/IGlucHV0LmVuYWJsZWQgOiB0cnVlOwoJY29uc3Qg
am9iID0gewoJCWlkLAoJCWFnZW50SWQ6IG5vcm1hbGl6ZU9wdGlvbmFsQWdlbnRJZChpbnB1dC5h
Z2VudElkKSwKCQlzZXNzaW9uS2V5OiBub3JtYWxpemVPcHRpb25hbFNlc3Npb25LZXkoaW5wdXQu
c2Vzc2lvbktleSksCgkJbmFtZTogbm9ybWFsaXplUmVxdWlyZWROYW1lKGlucHV0Lm5hbWUpLAoJ
CWRlc2NyaXB0aW9uOiBub3JtYWxpemVPcHRpb25hbFRleHQkMShpbnB1dC5kZXNjcmlwdGlvbiks
CgkJZW5hYmxlZCwKCQlkZWxldGVBZnRlclJ1biwKCQljcmVhdGVkQXRNczogbm93LAoJCXVwZGF0
ZWRBdE1zOiBub3csCgkJc2NoZWR1bGUsCgkJc2Vzc2lvblRhcmdldDogaW5wdXQuc2Vzc2lvblRh
cmdldCwKCQl3YWtlTW9kZTogaW5wdXQud2FrZU1vZGUsCgkJcGF5bG9hZDogaW5wdXQucGF5bG9h
ZCwKCQlkZWxpdmVyeTogcmVzb2x2ZUluaXRpYWxDcm9uRGVsaXZlcnkoaW5wdXQpLAoJCWZhaWx1
cmVBbGVydDogaW5wdXQuZmFpbHVyZUFsZXJ0LAoJCXN0YXRlOiB7IC4uLmlucHV0LnN0YXRlIH0K
CX07Cglhc3NlcnRTdXBwb3J0ZWRKb2JTcGVjKGpvYik7Cglhc3NlcnRNYWluU2Vzc2lvbkFnZW50
SWQoam9iLCBzdGF0ZS5kZXBzLmRlZmF1bHRBZ2VudElkKTsKCWFzc2VydERlbGl2ZXJ5U3VwcG9y
dChqb2IpOwoJYXNzZXJ0RmFpbHVyZURlc3RpbmF0aW9uU3VwcG9ydChqb2IpOwoJam9iLnN0YXRl
Lm5leHRSdW5BdE1zID0gY29tcHV0ZUpvYk5leHRSdW5BdE1zKGpvYiwgbm93KTsKCXJldHVybiBq
b2I7Cn0KZnVuY3Rpb24gYXBwbHlKb2JQYXRjaChqb2IsIHBhdGNoLCBvcHRzKSB7CglpZiAoIm5h
bWUiIGluIHBhdGNoKSBqb2IubmFtZSA9IG5vcm1hbGl6ZVJlcXVpcmVkTmFtZShwYXRjaC5uYW1l
KTsKCWlmICgiZGVzY3JpcHRpb24iIGluIHBhdGNoKSBqb2IuZGVzY3JpcHRpb24gPSBub3JtYWxp
emVPcHRpb25hbFRleHQkMShwYXRjaC5kZXNjcmlwdGlvbik7CglpZiAodHlwZW9mIHBhdGNoLmVu
YWJsZWQgPT09ICJib29sZWFuIikgam9iLmVuYWJsZWQgPSBwYXRjaC5lbmFibGVkOwoJaWYgKHR5
cGVvZiBwYXRjaC5kZWxldGVBZnRlclJ1biA9PT0gImJvb2xlYW4iKSBqb2IuZGVsZXRlQWZ0ZXJS
dW4gPSBwYXRjaC5kZWxldGVBZnRlclJ1bjsKCWlmIChwYXRjaC5zY2hlZHVsZSkgaWYgKHBhdGNo
LnNjaGVkdWxlLmtpbmQgPT09ICJjcm9uIikgewoJCWNvbnN0IGV4cGxpY2l0U3RhZ2dlck1zID0g
bm9ybWFsaXplQ3JvblN0YWdnZXJNcyhwYXRjaC5zY2hlZHVsZS5zdGFnZ2VyTXMpOwoJCWlmIChl
eHBsaWNpdFN0YWdnZXJNcyAhPT0gdm9pZCAwKSBqb2Iuc2NoZWR1bGUgPSB7CgkJCS4uLnBhdGNo
LnNjaGVkdWxlLAoJCQlzdGFnZ2VyTXM6IGV4cGxpY2l0U3RhZ2dlck1zCgkJfTsKCQllbHNlIGlm
IChqb2Iuc2NoZWR1bGUua2luZCA9PT0gImNyb24iKSBqb2Iuc2NoZWR1bGUgPSB7CgkJCS4uLnBh
dGNoLnNjaGVkdWxlLAoJCQlzdGFnZ2VyTXM6IGpvYi5zY2hlZHVsZS5zdGFnZ2VyTXMKCQl9OwoJ
CWVsc2UgewoJCQljb25zdCBkZWZhdWx0U3RhZ2dlck1zID0gcmVzb2x2ZURlZmF1bHRDcm9uU3Rh
Z2dlck1zKHBhdGNoLnNjaGVkdWxlLmV4cHIpOwoJCQlqb2Iuc2NoZWR1bGUgPSBkZWZhdWx0U3Rh
Z2dlck1zICE9PSB2b2lkIDAgPyB7CgkJCQkuLi5wYXRjaC5zY2hlZHVsZSwKCQkJCXN0YWdnZXJN
czogZGVmYXVsdFN0YWdnZXJNcwoJCQl9IDogcGF0Y2guc2NoZWR1bGU7CgkJfQoJfSBlbHNlIGpv
Yi5zY2hlZHVsZSA9IHBhdGNoLnNjaGVkdWxlOwoJaWYgKHBhdGNoLnNlc3Npb25UYXJnZXQpIGpv
Yi5zZXNzaW9uVGFyZ2V0ID0gcGF0Y2guc2Vzc2lvblRhcmdldDsKCWlmIChwYXRjaC53YWtlTW9k
ZSkgam9iLndha2VNb2RlID0gcGF0Y2gud2FrZU1vZGU7CglpZiAocGF0Y2gucGF5bG9hZCkgam9i
LnBheWxvYWQgPSBtZXJnZUNyb25QYXlsb2FkKGpvYi5wYXlsb2FkLCBwYXRjaC5wYXlsb2FkKTsK
CWlmICghcGF0Y2guZGVsaXZlcnkgJiYgcGF0Y2gucGF5bG9hZD8ua2luZCA9PT0gImFnZW50VHVy
biIpIHsKCQljb25zdCBsZWdhY3lEZWxpdmVyeVBhdGNoID0gYnVpbGRMZWdhY3lEZWxpdmVyeVBh
dGNoKHBhdGNoLnBheWxvYWQpOwoJCWlmIChsZWdhY3lEZWxpdmVyeVBhdGNoICYmIGpvYi5zZXNz
aW9uVGFyZ2V0ID09PSAiaXNvbGF0ZWQiICYmIGpvYi5wYXlsb2FkLmtpbmQgPT09ICJhZ2VudFR1
cm4iKSBqb2IuZGVsaXZlcnkgPSBtZXJnZUNyb25EZWxpdmVyeShqb2IuZGVsaXZlcnksIGxlZ2Fj
eURlbGl2ZXJ5UGF0Y2gpOwoJfQoJaWYgKHBhdGNoLmRlbGl2ZXJ5KSBqb2IuZGVsaXZlcnkgPSBt
ZXJnZUNyb25EZWxpdmVyeShqb2IuZGVsaXZlcnksIHBhdGNoLmRlbGl2ZXJ5KTsKCWlmICgiZmFp
bHVyZUFsZXJ0IiBpbiBwYXRjaCkgam9iLmZhaWx1cmVBbGVydCA9IG1lcmdlQ3JvbkZhaWx1cmVB
bGVydChqb2IuZmFpbHVyZUFsZXJ0LCBwYXRjaC5mYWlsdXJlQWxlcnQpOwoJaWYgKGpvYi5zZXNz
aW9uVGFyZ2V0ID09PSAibWFpbiIgJiYgam9iLmRlbGl2ZXJ5Py5tb2RlICE9PSAid2ViaG9vayIg
JiYgam9iLmRlbGl2ZXJ5Py5mYWlsdXJlRGVzdGluYXRpb24pIHRocm93IG5ldyBFcnJvcigiY3Jv
biBkZWxpdmVyeS5mYWlsdXJlRGVzdGluYXRpb24gaXMgb25seSBzdXBwb3J0ZWQgZm9yIHNlc3Np
b25UYXJnZXQ9XCJpc29sYXRlZFwiIHVubGVzcyBkZWxpdmVyeS5tb2RlPVwid2ViaG9va1wiIik7
CglpZiAoam9iLnNlc3Npb25UYXJnZXQgPT09ICJtYWluIiAmJiBqb2IuZGVsaXZlcnk/Lm1vZGUg
IT09ICJ3ZWJob29rIikgam9iLmRlbGl2ZXJ5ID0gdm9pZCAwOwoJaWYgKHBhdGNoLnN0YXRlKSBq
b2Iuc3RhdGUgPSB7CgkJLi4uam9iLnN0YXRlLAoJCS4uLnBhdGNoLnN0YXRlCgl9OwoJaWYgKCJh
Z2VudElkIiBpbiBwYXRjaCkgam9iLmFnZW50SWQgPSBub3JtYWxpemVPcHRpb25hbEFnZW50SWQo
cGF0Y2guYWdlbnRJZCk7CglpZiAoInNlc3Npb25LZXkiIGluIHBhdGNoKSBqb2Iuc2Vzc2lvbktl
eSA9IG5vcm1hbGl6ZU9wdGlvbmFsU2Vzc2lvbktleShwYXRjaC5zZXNzaW9uS2V5KTsKCWFzc2Vy
dFN1cHBvcnRlZEpvYlNwZWMoam9iKTsKCWFzc2VydE1haW5TZXNzaW9uQWdlbnRJZChqb2IsIG9w
dHM/LmRlZmF1bHRBZ2VudElkKTsKCWFzc2VydERlbGl2ZXJ5U3VwcG9ydChqb2IpOwoJYXNzZXJ0
RmFpbHVyZURlc3RpbmF0aW9uU3VwcG9ydChqb2IpOwp9CmZ1bmN0aW9uIG1lcmdlQ3JvblBheWxv
YWQoZXhpc3RpbmcsIHBhdGNoKSB7CglpZiAocGF0Y2gua2luZCAhPT0gZXhpc3Rpbmcua2luZCkg
cmV0dXJuIGJ1aWxkUGF5bG9hZEZyb21QYXRjaChwYXRjaCk7CglpZiAocGF0Y2gua2luZCA9PT0g
InN5c3RlbUV2ZW50IikgewoJCWlmIChleGlzdGluZy5raW5kICE9PSAic3lzdGVtRXZlbnQiKSBy
ZXR1cm4gYnVpbGRQYXlsb2FkRnJvbVBhdGNoKHBhdGNoKTsKCQlyZXR1cm4gewoJCQlraW5kOiAi
c3lzdGVtRXZlbnQiLAoJCQl0ZXh0OiB0eXBlb2YgcGF0Y2gudGV4dCA9PT0gInN0cmluZyIgPyBw
YXRjaC50ZXh0IDogZXhpc3RpbmcudGV4dAoJCX07Cgl9CglpZiAoZXhpc3Rpbmcua2luZCAhPT0g
ImFnZW50VHVybiIpIHJldHVybiBidWlsZFBheWxvYWRGcm9tUGF0Y2gocGF0Y2gpOwoJY29uc3Qg
bmV4dCA9IHsgLi4uZXhpc3RpbmcgfTsKCWlmICh0eXBlb2YgcGF0Y2gubWVzc2FnZSA9PT0gInN0
cmluZyIpIG5leHQubWVzc2FnZSA9IHBhdGNoLm1lc3NhZ2U7CglpZiAodHlwZW9mIHBhdGNoLm1v
ZGVsID09PSAic3RyaW5nIikgbmV4dC5tb2RlbCA9IHBhdGNoLm1vZGVsOwoJaWYgKHR5cGVvZiBw
YXRjaC50aGlua2luZyA9PT0gInN0cmluZyIpIG5leHQudGhpbmtpbmcgPSBwYXRjaC50aGlua2lu
ZzsKCWlmICh0eXBlb2YgcGF0Y2gudGltZW91dFNlY29uZHMgPT09ICJudW1iZXIiKSBuZXh0LnRp
bWVvdXRTZWNvbmRzID0gcGF0Y2gudGltZW91dFNlY29uZHM7CglpZiAodHlwZW9mIHBhdGNoLmxp
Z2h0Q29udGV4dCA9PT0gImJvb2xlYW4iKSBuZXh0LmxpZ2h0Q29udGV4dCA9IHBhdGNoLmxpZ2h0
Q29udGV4dDsKCWlmICh0eXBlb2YgcGF0Y2guYWxsb3dVbnNhZmVFeHRlcm5hbENvbnRlbnQgPT09
ICJib29sZWFuIikgbmV4dC5hbGxvd1Vuc2FmZUV4dGVybmFsQ29udGVudCA9IHBhdGNoLmFsbG93
VW5zYWZlRXh0ZXJuYWxDb250ZW50OwoJaWYgKHR5cGVvZiBwYXRjaC5kZWxpdmVyID09PSAiYm9v
bGVhbiIpIG5leHQuZGVsaXZlciA9IHBhdGNoLmRlbGl2ZXI7CglpZiAodHlwZW9mIHBhdGNoLmNo
YW5uZWwgPT09ICJzdHJpbmciKSBuZXh0LmNoYW5uZWwgPSBwYXRjaC5jaGFubmVsOwoJaWYgKHR5
cGVvZiBwYXRjaC50byA9PT0gInN0cmluZyIpIG5leHQudG8gPSBwYXRjaC50bzsKCWlmICh0eXBl
b2YgcGF0Y2guYmVzdEVmZm9ydERlbGl2ZXIgPT09ICJib29sZWFuIikgbmV4dC5iZXN0RWZmb3J0
RGVsaXZlciA9IHBhdGNoLmJlc3RFZmZvcnREZWxpdmVyOwoJcmV0dXJuIG5leHQ7Cn0KZnVuY3Rp
b24gYnVpbGRMZWdhY3lEZWxpdmVyeVBhdGNoKHBheWxvYWQpIHsKCWNvbnN0IGRlbGl2ZXIgPSBw
YXlsb2FkLmRlbGl2ZXI7Cgljb25zdCB0b1JhdyA9IHR5cGVvZiBwYXlsb2FkLnRvID09PSAic3Ry
aW5nIiA/IHBheWxvYWQudG8udHJpbSgpIDogIiI7CglpZiAoISh0eXBlb2YgZGVsaXZlciA9PT0g
ImJvb2xlYW4iIHx8IHR5cGVvZiBwYXlsb2FkLmJlc3RFZmZvcnREZWxpdmVyID09PSAiYm9vbGVh
biIgfHwgQm9vbGVhbih0b1JhdykpKSByZXR1cm4gbnVsbDsKCWNvbnN0IHBhdGNoID0ge307Cgls
ZXQgaGFzUGF0Y2ggPSBmYWxzZTsKCWlmIChkZWxpdmVyID09PSBmYWxzZSkgewoJCXBhdGNoLm1v
ZGUgPSAibm9uZSI7CgkJaGFzUGF0Y2ggPSB0cnVlOwoJfSBlbHNlIGlmIChkZWxpdmVyID09PSB0
cnVlIHx8IHRvUmF3KSB7CgkJcGF0Y2gubW9kZSA9ICJhbm5vdW5jZSI7CgkJaGFzUGF0Y2ggPSB0
cnVlOwoJfQoJaWYgKHR5cGVvZiBwYXlsb2FkLmNoYW5uZWwgPT09ICJzdHJpbmciKSB7CgkJY29u
c3QgY2hhbm5lbCA9IHBheWxvYWQuY2hhbm5lbC50cmltKCkudG9Mb3dlckNhc2UoKTsKCQlwYXRj
aC5jaGFubmVsID0gY2hhbm5lbCA/IGNoYW5uZWwgOiB2b2lkIDA7CgkJaGFzUGF0Y2ggPSB0cnVl
OwoJfQoJaWYgKHR5cGVvZiBwYXlsb2FkLnRvID09PSAic3RyaW5nIikgewoJCXBhdGNoLnRvID0g
cGF5bG9hZC50by50cmltKCk7CgkJaGFzUGF0Y2ggPSB0cnVlOwoJfQoJaWYgKHR5cGVvZiBwYXls
b2FkLmJlc3RFZmZvcnREZWxpdmVyID09PSAiYm9vbGVhbiIpIHsKCQlwYXRjaC5iZXN0RWZmb3J0
ID0gcGF5bG9hZC5iZXN0RWZmb3J0RGVsaXZlcjsKCQloYXNQYXRjaCA9IHRydWU7Cgl9CglyZXR1
cm4gaGFzUGF0Y2ggPyBwYXRjaCA6IG51bGw7Cn0KZnVuY3Rpb24gYnVpbGRQYXlsb2FkRnJvbVBh
dGNoKHBhdGNoKSB7CglpZiAocGF0Y2gua2luZCA9PT0gInN5c3RlbUV2ZW50IikgewoJCWlmICh0
eXBlb2YgcGF0Y2gudGV4dCAhPT0gInN0cmluZyIgfHwgcGF0Y2gudGV4dC5sZW5ndGggPT09IDAp
IHRocm93IG5ldyBFcnJvcigiY3Jvbi51cGRhdGUgcGF5bG9hZC5raW5kPVwic3lzdGVtRXZlbnRc
IiByZXF1aXJlcyB0ZXh0Iik7CgkJcmV0dXJuIHsKCQkJa2luZDogInN5c3RlbUV2ZW50IiwKCQkJ
dGV4dDogcGF0Y2gudGV4dAoJCX07Cgl9CglpZiAodHlwZW9mIHBhdGNoLm1lc3NhZ2UgIT09ICJz
dHJpbmciIHx8IHBhdGNoLm1lc3NhZ2UubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoImNy
b24udXBkYXRlIHBheWxvYWQua2luZD1cImFnZW50VHVyblwiIHJlcXVpcmVzIG1lc3NhZ2UiKTsK
CXJldHVybiB7CgkJa2luZDogImFnZW50VHVybiIsCgkJbWVzc2FnZTogcGF0Y2gubWVzc2FnZSwK
CQltb2RlbDogcGF0Y2gubW9kZWwsCgkJdGhpbmtpbmc6IHBhdGNoLnRoaW5raW5nLAoJCXRpbWVv
dXRTZWNvbmRzOiBwYXRjaC50aW1lb3V0U2Vjb25kcywKCQlsaWdodENvbnRleHQ6IHBhdGNoLmxp
Z2h0Q29udGV4dCwKCQlhbGxvd1Vuc2FmZUV4dGVybmFsQ29udGVudDogcGF0Y2guYWxsb3dVbnNh
ZmVFeHRlcm5hbENvbnRlbnQsCgkJZGVsaXZlcjogcGF0Y2guZGVsaXZlciwKCQljaGFubmVsOiBw
YXRjaC5jaGFubmVsLAoJCXRvOiBwYXRjaC50bywKCQliZXN0RWZmb3J0RGVsaXZlcjogcGF0Y2gu
YmVzdEVmZm9ydERlbGl2ZXIKCX07Cn0KZnVuY3Rpb24gbm9ybWFsaXplT3B0aW9uYWxUcmltbWVk
U3RyaW5nKHZhbHVlKSB7Cgljb25zdCB0cmltbWVkID0gdHlwZW9mIHZhbHVlID09PSAic3RyaW5n
IiA/IHZhbHVlLnRyaW0oKSA6ICIiOwoJcmV0dXJuIHRyaW1tZWQgPyB0cmltbWVkIDogdm9pZCAw
Owp9CmZ1bmN0aW9uIG1lcmdlQ3JvbkRlbGl2ZXJ5KGV4aXN0aW5nLCBwYXRjaCkgewoJY29uc3Qg
bmV4dCA9IHsKCQltb2RlOiBleGlzdGluZz8ubW9kZSA/PyAibm9uZSIsCgkJY2hhbm5lbDogZXhp
c3Rpbmc/LmNoYW5uZWwsCgkJdG86IGV4aXN0aW5nPy50bywKCQlhY2NvdW50SWQ6IGV4aXN0aW5n
Py5hY2NvdW50SWQsCgkJYmVzdEVmZm9ydDogZXhpc3Rpbmc/LmJlc3RFZmZvcnQsCgkJZmFpbHVy
ZURlc3RpbmF0aW9uOiBleGlzdGluZz8uZmFpbHVyZURlc3RpbmF0aW9uCgl9OwoJaWYgKHR5cGVv
ZiBwYXRjaC5tb2RlID09PSAic3RyaW5nIikgbmV4dC5tb2RlID0gcGF0Y2gubW9kZSA9PT0gImRl
bGl2ZXIiID8gImFubm91bmNlIiA6IHBhdGNoLm1vZGU7CglpZiAoImNoYW5uZWwiIGluIHBhdGNo
KSBuZXh0LmNoYW5uZWwgPSBub3JtYWxpemVPcHRpb25hbFRyaW1tZWRTdHJpbmcocGF0Y2guY2hh
bm5lbCk7CglpZiAoInRvIiBpbiBwYXRjaCkgbmV4dC50byA9IG5vcm1hbGl6ZU9wdGlvbmFsVHJp
bW1lZFN0cmluZyhwYXRjaC50byk7CglpZiAoImFjY291bnRJZCIgaW4gcGF0Y2gpIG5leHQuYWNj
b3VudElkID0gbm9ybWFsaXplT3B0aW9uYWxUcmltbWVkU3RyaW5nKHBhdGNoLmFjY291bnRJZCk7
CglpZiAodHlwZW9mIHBhdGNoLmJlc3RFZmZvcnQgPT09ICJib29sZWFuIikgbmV4dC5iZXN0RWZm
b3J0ID0gcGF0Y2guYmVzdEVmZm9ydDsKCWlmICgiZmFpbHVyZURlc3RpbmF0aW9uIiBpbiBwYXRj
aCkgaWYgKHBhdGNoLmZhaWx1cmVEZXN0aW5hdGlvbiA9PT0gdm9pZCAwKSBuZXh0LmZhaWx1cmVE
ZXN0aW5hdGlvbiA9IHZvaWQgMDsKCWVsc2UgewoJCWNvbnN0IGV4aXN0aW5nRmQgPSBuZXh0LmZh
aWx1cmVEZXN0aW5hdGlvbjsKCQljb25zdCBwYXRjaEZkID0gcGF0Y2guZmFpbHVyZURlc3RpbmF0
aW9uOwoJCWNvbnN0IG5leHRGZCA9IHsKCQkJY2hhbm5lbDogZXhpc3RpbmdGZD8uY2hhbm5lbCwK
CQkJdG86IGV4aXN0aW5nRmQ/LnRvLAoJCQlhY2NvdW50SWQ6IGV4aXN0aW5nRmQ/LmFjY291bnRJ
ZCwKCQkJbW9kZTogZXhpc3RpbmdGZD8ubW9kZQoJCX07CgkJaWYgKHBhdGNoRmQpIHsKCQkJaWYg
KCJjaGFubmVsIiBpbiBwYXRjaEZkKSB7CgkJCQljb25zdCBjaGFubmVsID0gdHlwZW9mIHBhdGNo
RmQuY2hhbm5lbCA9PT0gInN0cmluZyIgPyBwYXRjaEZkLmNoYW5uZWwudHJpbSgpIDogIiI7CgkJ
CQluZXh0RmQuY2hhbm5lbCA9IGNoYW5uZWwgPyBjaGFubmVsIDogdm9pZCAwOwoJCQl9CgkJCWlm
ICgidG8iIGluIHBhdGNoRmQpIHsKCQkJCWNvbnN0IHRvID0gdHlwZW9mIHBhdGNoRmQudG8gPT09
ICJzdHJpbmciID8gcGF0Y2hGZC50by50cmltKCkgOiAiIjsKCQkJCW5leHRGZC50byA9IHRvID8g
dG8gOiB2b2lkIDA7CgkJCX0KCQkJaWYgKCJhY2NvdW50SWQiIGluIHBhdGNoRmQpIHsKCQkJCWNv
bnN0IGFjY291bnRJZCA9IHR5cGVvZiBwYXRjaEZkLmFjY291bnRJZCA9PT0gInN0cmluZyIgPyBw
YXRjaEZkLmFjY291bnRJZC50cmltKCkgOiAiIjsKCQkJCW5leHRGZC5hY2NvdW50SWQgPSBhY2Nv
dW50SWQgPyBhY2NvdW50SWQgOiB2b2lkIDA7CgkJCX0KCQkJaWYgKCJtb2RlIiBpbiBwYXRjaEZk
KSB7CgkJCQljb25zdCBtb2RlID0gdHlwZW9mIHBhdGNoRmQubW9kZSA9PT0gInN0cmluZyIgPyBw
YXRjaEZkLm1vZGUudHJpbSgpIDogIiI7CgkJCQluZXh0RmQubW9kZSA9IG1vZGUgPT09ICJhbm5v
dW5jZSIgfHwgbW9kZSA9PT0gIndlYmhvb2siID8gbW9kZSA6IHZvaWQgMDsKCQkJfQoJCX0KCQlu
ZXh0LmZhaWx1cmVEZXN0aW5hdGlvbiA9IG5leHRGZDsKCX0KCXJldHVybiBuZXh0Owp9CmZ1bmN0
aW9uIG1lcmdlQ3JvbkZhaWx1cmVBbGVydChleGlzdGluZywgcGF0Y2gpIHsKCWlmIChwYXRjaCA9
PT0gZmFsc2UpIHJldHVybiBmYWxzZTsKCWlmIChwYXRjaCA9PT0gdm9pZCAwKSByZXR1cm4gZXhp
c3Rpbmc7Cgljb25zdCBuZXh0ID0geyAuLi5leGlzdGluZyA9PT0gZmFsc2UgfHwgZXhpc3Rpbmcg
PT09IHZvaWQgMCA/IHt9IDogZXhpc3RpbmcgfTsKCWlmICgiYWZ0ZXIiIGluIHBhdGNoKSB7CgkJ
Y29uc3QgYWZ0ZXIgPSB0eXBlb2YgcGF0Y2guYWZ0ZXIgPT09ICJudW1iZXIiICYmIE51bWJlci5p
c0Zpbml0ZShwYXRjaC5hZnRlcikgPyBwYXRjaC5hZnRlciA6IDA7CgkJbmV4dC5hZnRlciA9IGFm
dGVyID4gMCA/IE1hdGguZmxvb3IoYWZ0ZXIpIDogdm9pZCAwOwoJfQoJaWYgKCJjaGFubmVsIiBp
biBwYXRjaCkgbmV4dC5jaGFubmVsID0gbm9ybWFsaXplT3B0aW9uYWxUcmltbWVkU3RyaW5nKHBh
dGNoLmNoYW5uZWwpOwoJaWYgKCJ0byIgaW4gcGF0Y2gpIG5leHQudG8gPSBub3JtYWxpemVPcHRp
b25hbFRyaW1tZWRTdHJpbmcocGF0Y2gudG8pOwoJaWYgKCJjb29sZG93bk1zIiBpbiBwYXRjaCkg
ewoJCWNvbnN0IGNvb2xkb3duTXMgPSB0eXBlb2YgcGF0Y2guY29vbGRvd25NcyA9PT0gIm51bWJl
ciIgJiYgTnVtYmVyLmlzRmluaXRlKHBhdGNoLmNvb2xkb3duTXMpID8gcGF0Y2guY29vbGRvd25N
cyA6IC0xOwoJCW5leHQuY29vbGRvd25NcyA9IGNvb2xkb3duTXMgPj0gMCA/IE1hdGguZmxvb3Io
Y29vbGRvd25NcykgOiB2b2lkIDA7Cgl9CglpZiAoIm1vZGUiIGluIHBhdGNoKSB7CgkJY29uc3Qg
bW9kZSA9IHR5cGVvZiBwYXRjaC5tb2RlID09PSAic3RyaW5nIiA/IHBhdGNoLm1vZGUudHJpbSgp
IDogIiI7CgkJbmV4dC5tb2RlID0gbW9kZSA9PT0gImFubm91bmNlIiB8fCBtb2RlID09PSAid2Vi
aG9vayIgPyBtb2RlIDogdm9pZCAwOwoJfQoJaWYgKCJhY2NvdW50SWQiIGluIHBhdGNoKSB7CgkJ
Y29uc3QgYWNjb3VudElkID0gdHlwZW9mIHBhdGNoLmFjY291bnRJZCA9PT0gInN0cmluZyIgPyBw
YXRjaC5hY2NvdW50SWQudHJpbSgpIDogIiI7CgkJbmV4dC5hY2NvdW50SWQgPSBhY2NvdW50SWQg
PyBhY2NvdW50SWQgOiB2b2lkIDA7Cgl9CglyZXR1cm4gbmV4dDsKfQpmdW5jdGlvbiBpc0pvYkR1
ZShqb2IsIG5vd01zLCBvcHRzKSB7CglpZiAoIWpvYi5zdGF0ZSkgam9iLnN0YXRlID0ge307Cglp
ZiAodHlwZW9mIGpvYi5zdGF0ZS5ydW5uaW5nQXRNcyA9PT0gIm51bWJlciIpIHJldHVybiBmYWxz
ZTsKCWlmIChvcHRzLmZvcmNlZCkgcmV0dXJuIHRydWU7CglyZXR1cm4gam9iLmVuYWJsZWQgJiYg
dHlwZW9mIGpvYi5zdGF0ZS5uZXh0UnVuQXRNcyA9PT0gIm51bWJlciIgJiYgbm93TXMgPj0gam9i
LnN0YXRlLm5leHRSdW5BdE1zOwp9CmZ1bmN0aW9uIHJlc29sdmVKb2JQYXlsb2FkVGV4dEZvck1h
aW4oam9iKSB7CglpZiAoam9iLnBheWxvYWQua2luZCAhPT0gInN5c3RlbUV2ZW50IikgcmV0dXJu
OwoJY29uc3QgdGV4dCA9IG5vcm1hbGl6ZVBheWxvYWRUb1N5c3RlbVRleHQoam9iLnBheWxvYWQp
OwoJcmV0dXJuIHRleHQudHJpbSgpID8gdGV4dCA6IHZvaWQgMDsKfQovLyNlbmRyZWdpb24KLy8j
cmVnaW9uIHNyYy9jcm9uL3NlcnZpY2UvbG9ja2VkLnRzCmNvbnN0IHN0b3JlTG9ja3MgPSAvKiBA
X19QVVJFX18gKi8gbmV3IE1hcCgpOwpjb25zdCByZXNvbHZlQ2hhaW4gPSAocHJvbWlzZSkgPT4g
cHJvbWlzZS50aGVuKCgpID0+IHZvaWQgMCwgKCkgPT4gdm9pZCAwKTsKYXN5bmMgZnVuY3Rpb24g
bG9ja2VkKHN0YXRlLCBmbikgewoJY29uc3Qgc3RvcmVQYXRoID0gc3RhdGUuZGVwcy5zdG9yZVBh
dGg7Cgljb25zdCBzdG9yZU9wID0gc3RvcmVMb2Nrcy5nZXQoc3RvcmVQYXRoKSA/PyBQcm9taXNl
LnJlc29sdmUoKTsKCWNvbnN0IG5leHQgPSBQcm9taXNlLmFsbChbcmVzb2x2ZUNoYWluKHN0YXRl
Lm9wKSwgcmVzb2x2ZUNoYWluKHN0b3JlT3ApXSkudGhlbihmbik7Cgljb25zdCBrZWVwQWxpdmUg
PSByZXNvbHZlQ2hhaW4obmV4dCk7CglzdGF0ZS5vcCA9IGtlZXBBbGl2ZTsKCXN0b3JlTG9ja3Mu
c2V0KHN0b3JlUGF0aCwga2VlcEFsaXZlKTsKCXJldHVybiBhd2FpdCBuZXh0Owp9Ci8vI2VuZHJl
Z2lvbgovLyNyZWdpb24gc3JjL2Nyb24vc2VydmljZS9zdG9yZS50cwphc3luYyBmdW5jdGlvbiBn
ZXRGaWxlTXRpbWVNcyhwYXRoKSB7Cgl0cnkgewoJCXJldHVybiAoYXdhaXQgZnMucHJvbWlzZXMu
c3RhdChwYXRoKSkubXRpbWVNczsKCX0gY2F0Y2ggewoJCXJldHVybiBudWxsOwoJfQp9CmFzeW5j
IGZ1bmN0aW9uIGVuc3VyZUxvYWRlZChzdGF0ZSwgb3B0cykgewoJaWYgKHN0YXRlLnN0b3JlICYm
ICFvcHRzPy5mb3JjZVJlbG9hZCkgcmV0dXJuOwoJY29uc3QgZmlsZU10aW1lTXMgPSBhd2FpdCBn
ZXRGaWxlTXRpbWVNcyhzdGF0ZS5kZXBzLnN0b3JlUGF0aCk7Cgljb25zdCBqb2JzID0gKGF3YWl0
IGxvYWRDcm9uU3RvcmUoc3RhdGUuZGVwcy5zdG9yZVBhdGgpKS5qb2JzID8/IFtdOwoJY29uc3Qg
eyBtdXRhdGVkIH0gPSBub3JtYWxpemVTdG9yZWRDcm9uSm9icyhqb2JzKTsKCXN0YXRlLnN0b3Jl
ID0gewoJCXZlcnNpb246IDEsCgkJam9icwoJfTsKCXN0YXRlLnN0b3JlTG9hZGVkQXRNcyA9IHN0
YXRlLmRlcHMubm93TXMoKTsKCXN0YXRlLnN0b3JlRmlsZU10aW1lTXMgPSBmaWxlTXRpbWVNczsK
CWlmICghb3B0cz8uc2tpcFJlY29tcHV0ZSkgcmVjb21wdXRlTmV4dFJ1bnMoc3RhdGUpOwoJaWYg
KG11dGF0ZWQpIGF3YWl0IHBlcnNpc3Qoc3RhdGUsIHsgc2tpcEJhY2t1cDogdHJ1ZSB9KTsKfQpm
dW5jdGlvbiB3YXJuSWZEaXNhYmxlZChzdGF0ZSwgYWN0aW9uKSB7CglpZiAoc3RhdGUuZGVwcy5j
cm9uRW5hYmxlZCkgcmV0dXJuOwoJaWYgKHN0YXRlLndhcm5lZERpc2FibGVkKSByZXR1cm47Cglz
dGF0ZS53YXJuZWREaXNhYmxlZCA9IHRydWU7CglzdGF0ZS5kZXBzLmxvZy53YXJuKHsKCQllbmFi
bGVkOiBmYWxzZSwKCQlhY3Rpb24sCgkJc3RvcmVQYXRoOiBzdGF0ZS5kZXBzLnN0b3JlUGF0aAoJ
fSwgImNyb246IHNjaGVkdWxlciBkaXNhYmxlZDsgam9icyB3aWxsIG5vdCBydW4gYXV0b21hdGlj
YWxseSIpOwp9CmFzeW5jIGZ1bmN0aW9uIHBlcnNpc3Qoc3RhdGUsIG9wdHMpIHsKCWlmICghc3Rh
dGUuc3RvcmUpIHJldHVybjsKCWF3YWl0IHNhdmVDcm9uU3RvcmUoc3RhdGUuZGVwcy5zdG9yZVBh
dGgsIHN0YXRlLnN0b3JlLCBvcHRzKTsKCXN0YXRlLnN0b3JlRmlsZU10aW1lTXMgPSBhd2FpdCBn
ZXRGaWxlTXRpbWVNcyhzdGF0ZS5kZXBzLnN0b3JlUGF0aCk7Cn0KLy8jZW5kcmVnaW9uCi8vI3Jl
Z2lvbiBzcmMvY3Jvbi9zZXNzaW9uLXJlYXBlci50cwovKioKKiBDcm9uIHNlc3Npb24gcmVhcGVy
IOKAlCBwcnVuZXMgY29tcGxldGVkIGlzb2xhdGVkIGNyb24gcnVuIHNlc3Npb25zCiogZnJvbSB0
aGUgc2Vzc2lvbiBzdG9yZSBhZnRlciBhIGNvbmZpZ3VyYWJsZSByZXRlbnRpb24gcGVyaW9kLgoq
CiogUGF0dGVybjogc2Vzc2lvbnMga2V5ZWQgYXMgYC4uLjpjcm9uOjxqb2JJZD46cnVuOjx1dWlk
PmAgYXJlIGVwaGVtZXJhbAoqIHJ1biByZWNvcmRzLiBUaGUgYmFzZSBzZXNzaW9uIChgLi4uOmNy
b246PGpvYklkPmApIGlzIGtlcHQgYXMtaXMuCiovCmNvbnN0IERFRkFVTFRfUkVURU5USU9OX01T
ID0gMjQgKiAzNmU1OwovKiogTWluaW11bSBpbnRlcnZhbCBiZXR3ZWVuIHJlYXBlciBzd2VlcHMg
KGF2b2lkIHJ1bm5pbmcgZXZlcnkgdGltZXIgdGljaykuICovCmNvbnN0IE1JTl9TV0VFUF9JTlRF
UlZBTF9NUyA9IDUgKiA2ZTQ7CmNvbnN0IGxhc3RTd2VlcEF0TXNCeVN0b3JlID0gLyogQF9fUFVS
RV9fICovIG5ldyBNYXAoKTsKZnVuY3Rpb24gcmVzb2x2ZVJldGVudGlvbk1zKGNyb25Db25maWcp
IHsKCWlmIChjcm9uQ29uZmlnPy5zZXNzaW9uUmV0ZW50aW9uID09PSBmYWxzZSkgcmV0dXJuIG51
bGw7Cgljb25zdCByYXcgPSBjcm9uQ29uZmlnPy5zZXNzaW9uUmV0ZW50aW9uOwoJaWYgKHR5cGVv
ZiByYXcgPT09ICJzdHJpbmciICYmIHJhdy50cmltKCkpIHRyeSB7CgkJcmV0dXJuIHBhcnNlRHVy
YXRpb25NcyhyYXcudHJpbSgpLCB7IGRlZmF1bHRVbml0OiAiaCIgfSk7Cgl9IGNhdGNoIHsKCQly
ZXR1cm4gREVGQVVMVF9SRVRFTlRJT05fTVM7Cgl9CglyZXR1cm4gREVGQVVMVF9SRVRFTlRJT05f
TVM7Cn0KLyoqCiogU3dlZXAgdGhlIHNlc3Npb24gc3RvcmUgYW5kIHBydW5lIGV4cGlyZWQgY3Jv
biBydW4gc2Vzc2lvbnMuCiogRGVzaWduZWQgdG8gYmUgY2FsbGVkIGZyb20gdGhlIGNyb24gdGlt
ZXIgdGljayDigJQgc2VsZi10aHJvdHRsZXMgdmlhCiogTUlOX1NXRUVQX0lOVEVSVkFMX01TIHRv
IGF2b2lkIGV4Y2Vzc2l2ZSBJL08uCioKKiBMb2NrIG9yZGVyaW5nOiB0aGlzIGZ1bmN0aW9uIGFj
cXVpcmVzIHRoZSBzZXNzaW9uLXN0b3JlIGZpbGUgbG9jayB2aWEKKiBgdXBkYXRlU2Vzc2lvblN0
b3JlYC4gSXQgbXVzdCBiZSBjYWxsZWQgT1VUU0lERSBvZiB0aGUgY3JvbiBzZXJ2aWNlJ3MKKiBv
d24gYGxvY2tlZCgpYCBzZWN0aW9uIHRvIGF2b2lkIGxvY2stb3JkZXIgaW52ZXJzaW9ucy4gVGhl
IGNyb24gdGltZXIKKiBjYWxscyB0aGlzIGFmdGVyIGFsbCBgbG9ja2VkKClgIHNlY3Rpb25zIGhh
dmUgYmVlbiByZWxlYXNlZC4KKi8KYXN5bmMgZnVuY3Rpb24gc3dlZXBDcm9uUnVuU2Vzc2lvbnMo
cGFyYW1zKSB7Cgljb25zdCBub3cgPSBwYXJhbXMubm93TXMgPz8gRGF0ZS5ub3coKTsKCWNvbnN0
IHN0b3JlUGF0aCA9IHBhcmFtcy5zZXNzaW9uU3RvcmVQYXRoOwoJY29uc3QgbGFzdFN3ZWVwQXRN
cyA9IGxhc3RTd2VlcEF0TXNCeVN0b3JlLmdldChzdG9yZVBhdGgpID8/IDA7CglpZiAoIXBhcmFt
cy5mb3JjZSAmJiBub3cgLSBsYXN0U3dlZXBBdE1zIDwgTUlOX1NXRUVQX0lOVEVSVkFMX01TKSBy
ZXR1cm4gewoJCXN3ZXB0OiBmYWxzZSwKCQlwcnVuZWQ6IDAKCX07Cgljb25zdCByZXRlbnRpb25N
cyA9IHJlc29sdmVSZXRlbnRpb25NcyhwYXJhbXMuY3JvbkNvbmZpZyk7CglpZiAocmV0ZW50aW9u
TXMgPT09IG51bGwpIHsKCQlsYXN0U3dlZXBBdE1zQnlTdG9yZS5zZXQoc3RvcmVQYXRoLCBub3cp
OwoJCXJldHVybiB7CgkJCXN3ZXB0OiBmYWxzZSwKCQkJcHJ1bmVkOiAwCgkJfTsKCX0KCWxldCBw
cnVuZWQgPSAwOwoJY29uc3QgcHJ1bmVkU2Vzc2lvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1h
cCgpOwoJdHJ5IHsKCQlhd2FpdCB1cGRhdGVTZXNzaW9uU3RvcmUoc3RvcmVQYXRoLCAoc3RvcmUp
ID0+IHsKCQkJY29uc3QgY3V0b2ZmID0gbm93IC0gcmV0ZW50aW9uTXM7CgkJCWZvciAoY29uc3Qg
a2V5IG9mIE9iamVjdC5rZXlzKHN0b3JlKSkgewoJCQkJaWYgKCFpc0Nyb25SdW5TZXNzaW9uS2V5
KGtleSkpIGNvbnRpbnVlOwoJCQkJY29uc3QgZW50cnkgPSBzdG9yZVtrZXldOwoJCQkJaWYgKCFl
bnRyeSkgY29udGludWU7CgkJCQlpZiAoKGVudHJ5LnVwZGF0ZWRBdCA/PyAwKSA8IGN1dG9mZikg
ewoJCQkJCWlmICghcHJ1bmVkU2Vzc2lvbnMuaGFzKGVudHJ5LnNlc3Npb25JZCkgfHwgZW50cnku
c2Vzc2lvbkZpbGUpIHBydW5lZFNlc3Npb25zLnNldChlbnRyeS5zZXNzaW9uSWQsIGVudHJ5LnNl
c3Npb25GaWxlKTsKCQkJCQlkZWxldGUgc3RvcmVba2V5XTsKCQkJCQlwcnVuZWQrKzsKCQkJCX0K
CQkJfQoJCX0pOwoJfSBjYXRjaCAoZXJyKSB7CgkJcGFyYW1zLmxvZy53YXJuKHsgZXJyOiBTdHJp
bmcoZXJyKSB9LCAiY3Jvbi1yZWFwZXI6IGZhaWxlZCB0byBzd2VlcCBzZXNzaW9uIHN0b3JlIik7
CgkJcmV0dXJuIHsKCQkJc3dlcHQ6IGZhbHNlLAoJCQlwcnVuZWQ6IDAKCQl9OwoJfQoJbGFzdFN3
ZWVwQXRNc0J5U3RvcmUuc2V0KHN0b3JlUGF0aCwgbm93KTsKCWlmIChwcnVuZWRTZXNzaW9ucy5z
aXplID4gMCkgdHJ5IHsKCQljb25zdCBzdG9yZSA9IGxvYWRTZXNzaW9uU3RvcmUoc3RvcmVQYXRo
LCB7IHNraXBDYWNoZTogdHJ1ZSB9KTsKCQljb25zdCBhcmNoaXZlZERpcnMgPSBhcmNoaXZlUmVt
b3ZlZFNlc3Npb25UcmFuc2NyaXB0cyh7CgkJCXJlbW92ZWRTZXNzaW9uRmlsZXM6IHBydW5lZFNl
c3Npb25zLAoJCQlyZWZlcmVuY2VkU2Vzc2lvbklkczogbmV3IFNldChPYmplY3QudmFsdWVzKHN0
b3JlKS5tYXAoKGVudHJ5KSA9PiBlbnRyeT8uc2Vzc2lvbklkKS5maWx0ZXIoKGlkKSA9PiBCb29s
ZWFuKGlkKSkpLAoJCQlzdG9yZVBhdGgsCgkJCXJlYXNvbjogImRlbGV0ZWQiLAoJCQlyZXN0cmlj
dFRvU3RvcmVEaXI6IHRydWUKCQl9KTsKCQlpZiAoYXJjaGl2ZWREaXJzLnNpemUgPiAwKSBhd2Fp
dCBjbGVhbnVwQXJjaGl2ZWRTZXNzaW9uVHJhbnNjcmlwdHMoewoJCQlkaXJlY3RvcmllczogWy4u
LmFyY2hpdmVkRGlyc10sCgkJCW9sZGVyVGhhbk1zOiByZXRlbnRpb25NcywKCQkJcmVhc29uOiAi
ZGVsZXRlZCIsCgkJCW5vd01zOiBub3cKCQl9KTsKCX0gY2F0Y2ggKGVycikgewoJCXBhcmFtcy5s
b2cud2Fybih7IGVycjogU3RyaW5nKGVycikgfSwgImNyb24tcmVhcGVyOiB0cmFuc2NyaXB0IGNs
ZWFudXAgZmFpbGVkIik7Cgl9CglpZiAocHJ1bmVkID4gMCkgcGFyYW1zLmxvZy5pbmZvKHsKCQlw
cnVuZWQsCgkJcmV0ZW50aW9uTXMKCX0sIGBjcm9uLXJlYXBlcjogcHJ1bmVkICR7cHJ1bmVkfSBl
eHBpcmVkIGNyb24gcnVuIHNlc3Npb24ocylgKTsKCXJldHVybiB7CgkJc3dlcHQ6IHRydWUsCgkJ
cHJ1bmVkCgl9Owp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2Nyb24vc2VydmljZS90aW1l
b3V0LXBvbGljeS50cwovKioKKiBNYXhpbXVtIHdhbGwtY2xvY2sgdGltZSBmb3IgYSBzaW5nbGUg
am9iIGV4ZWN1dGlvbi4gQWN0cyBhcyBhIHNhZmV0eSBuZXQKKiBvbiB0b3Agb2YgcGVyLXByb3Zp
ZGVyL3Blci1hZ2VudCB0aW1lb3V0cyB0byBwcmV2ZW50IG9uZSBzdHVjayBqb2IgZnJvbQoqIHdl
ZGdpbmcgdGhlIGVudGlyZSBjcm9uIGxhbmUuCiovCmNvbnN0IERFRkFVTFRfSk9CX1RJTUVPVVRf
TVMgPSAxMCAqIDZlNDsKLyoqCiogQWdlbnQgdHVybnMgY2FuIGxlZ2l0aW1hdGVseSBydW4gbXVj
aCBsb25nZXIgdGhhbiBnZW5lcmljIGNyb24gam9icy4KKiBVc2UgYSBsYXJnZXIgc2FmZXR5IGNl
aWxpbmcgd2hlbiBubyBleHBsaWNpdCB0aW1lb3V0IGlzIHNldC4KKi8KY29uc3QgQUdFTlRfVFVS
Tl9TQUZFVFlfVElNRU9VVF9NUyA9IDYwICogNmU0OwpmdW5jdGlvbiByZXNvbHZlQ3JvbkpvYlRp
bWVvdXRNcyhqb2IpIHsKCWNvbnN0IGNvbmZpZ3VyZWRUaW1lb3V0TXMgPSBqb2IucGF5bG9hZC5r
aW5kID09PSAiYWdlbnRUdXJuIiAmJiB0eXBlb2Ygam9iLnBheWxvYWQudGltZW91dFNlY29uZHMg
PT09ICJudW1iZXIiID8gTWF0aC5mbG9vcihqb2IucGF5bG9hZC50aW1lb3V0U2Vjb25kcyAqIDFl
MykgOiB2b2lkIDA7CglpZiAoY29uZmlndXJlZFRpbWVvdXRNcyA9PT0gdm9pZCAwKSByZXR1cm4g
am9iLnBheWxvYWQua2luZCA9PT0gImFnZW50VHVybiIgPyBBR0VOVF9UVVJOX1NBRkVUWV9USU1F
T1VUX01TIDogREVGQVVMVF9KT0JfVElNRU9VVF9NUzsKCXJldHVybiBjb25maWd1cmVkVGltZW91
dE1zIDw9IDAgPyB2b2lkIDAgOiBjb25maWd1cmVkVGltZW91dE1zOwp9Ci8vI2VuZHJlZ2lvbgov
LyNyZWdpb24gc3JjL2Nyb24vc2VydmljZS90aW1lci50cwpjb25zdCBNQVhfVElNRVJfREVMQVlf
TVMgPSA2ZTQ7Ci8qKgoqIE1pbmltdW0gZ2FwIGJldHdlZW4gY29uc2VjdXRpdmUgZmlyZXMgb2Yg
dGhlIHNhbWUgY3JvbiBqb2IuICBUaGlzIGlzIGEKKiBzYWZldHkgbmV0IHRoYXQgcHJldmVudHMg
c3Bpbi1sb29wcyB3aGVuIGBjb21wdXRlSm9iTmV4dFJ1bkF0TXNgIHJldHVybnMKKiBhIHZhbHVl
IHdpdGhpbiB0aGUgc2FtZSBzZWNvbmQgYXMgdGhlIGp1c3QtY29tcGxldGVkIHJ1bi4gIFRoZSBn
dWFyZAoqIGlzIGludGVudGlvbmFsbHkgZ2VuZXJvdXMgKDIgcykgc28gaXQgbmV2ZXIgbWFza3Mg
YSBsZWdpdGltYXRlIHNjaGVkdWxlCiogYnV0IGFsd2F5cyBicmVha3MgYW4gaW5maW5pdGUgcmUt
dHJpZ2dlciBjeWNsZS4gIChTZWUgIzE3ODIxKQoqLwpjb25zdCBNSU5fUkVGSVJFX0dBUF9NUyA9
IDJlMzsKY29uc3QgREVGQVVMVF9NSVNTRURfSk9CX1NUQUdHRVJfTVMgPSA1ZTM7CmNvbnN0IERF
RkFVTFRfTUFYX01JU1NFRF9KT0JTX1BFUl9SRVNUQVJUID0gNTsKY29uc3QgREVGQVVMVF9GQUlM
VVJFX0FMRVJUX0FGVEVSID0gMjsKY29uc3QgREVGQVVMVF9GQUlMVVJFX0FMRVJUX0NPT0xET1dO
X01TID0gNjAgKiA2ZTQ7CmFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVKb2JDb3JlV2l0aFRpbWVvdXQo
c3RhdGUsIGpvYikgewoJY29uc3Qgam9iVGltZW91dE1zID0gcmVzb2x2ZUNyb25Kb2JUaW1lb3V0
TXMoam9iKTsKCWlmICh0eXBlb2Ygam9iVGltZW91dE1zICE9PSAibnVtYmVyIikgcmV0dXJuIGF3
YWl0IGV4ZWN1dGVKb2JDb3JlKHN0YXRlLCBqb2IpOwoJY29uc3QgcnVuQWJvcnRDb250cm9sbGVy
ID0gbmV3IEFib3J0Q29udHJvbGxlcigpOwoJbGV0IHRpbWVvdXRJZDsKCXRyeSB7CgkJcmV0dXJu
IGF3YWl0IFByb21pc2UucmFjZShbZXhlY3V0ZUpvYkNvcmUoc3RhdGUsIGpvYiwgcnVuQWJvcnRD
b250cm9sbGVyLnNpZ25hbCksIG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHsKCQkJdGltZW91
dElkID0gc2V0VGltZW91dCgoKSA9PiB7CgkJCQlydW5BYm9ydENvbnRyb2xsZXIuYWJvcnQodGlt
ZW91dEVycm9yTWVzc2FnZSgpKTsKCQkJCXJlamVjdChuZXcgRXJyb3IodGltZW91dEVycm9yTWVz
c2FnZSgpKSk7CgkJCX0sIGpvYlRpbWVvdXRNcyk7CgkJfSldKTsKCX0gZmluYWxseSB7CgkJaWYg
KHRpbWVvdXRJZCkgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7Cgl9Cn0KZnVuY3Rpb24gcmVzb2x2
ZVJ1bkNvbmN1cnJlbmN5KHN0YXRlKSB7Cgljb25zdCByYXcgPSBzdGF0ZS5kZXBzLmNyb25Db25m
aWc/Lm1heENvbmN1cnJlbnRSdW5zOwoJaWYgKHR5cGVvZiByYXcgIT09ICJudW1iZXIiIHx8ICFO
dW1iZXIuaXNGaW5pdGUocmF3KSkgcmV0dXJuIDE7CglyZXR1cm4gTWF0aC5tYXgoMSwgTWF0aC5m
bG9vcihyYXcpKTsKfQpmdW5jdGlvbiB0aW1lb3V0RXJyb3JNZXNzYWdlKCkgewoJcmV0dXJuICJj
cm9uOiBqb2IgZXhlY3V0aW9uIHRpbWVkIG91dCI7Cn0KZnVuY3Rpb24gaXNBYm9ydEVycm9yKGVy
cikgewoJaWYgKCEoZXJyIGluc3RhbmNlb2YgRXJyb3IpKSByZXR1cm4gZmFsc2U7CglyZXR1cm4g
ZXJyLm5hbWUgPT09ICJBYm9ydEVycm9yIiB8fCBlcnIubWVzc2FnZSA9PT0gdGltZW91dEVycm9y
TWVzc2FnZSgpOwp9Ci8qKgoqIEV4cG9uZW50aWFsIGJhY2tvZmYgZGVsYXlzIChpbiBtcykgaW5k
ZXhlZCBieSBjb25zZWN1dGl2ZSBlcnJvciBjb3VudC4KKiBBZnRlciB0aGUgbGFzdCBlbnRyeSB0
aGUgZGVsYXkgc3RheXMgY29uc3RhbnQuCiovCmNvbnN0IERFRkFVTFRfQkFDS09GRl9TQ0hFRFVM
RV9NUyA9IFsKCTNlNCwKCTZlNCwKCTUgKiA2ZTQsCgkxNSAqIDZlNCwKCTYwICogNmU0Cl07CmZ1
bmN0aW9uIGVycm9yQmFja29mZk1zKGNvbnNlY3V0aXZlRXJyb3JzLCBzY2hlZHVsZU1zID0gREVG
QVVMVF9CQUNLT0ZGX1NDSEVEVUxFX01TKSB7Cgljb25zdCBpZHggPSBNYXRoLm1pbihjb25zZWN1
dGl2ZUVycm9ycyAtIDEsIHNjaGVkdWxlTXMubGVuZ3RoIC0gMSk7CglyZXR1cm4gc2NoZWR1bGVN
c1tNYXRoLm1heCgwLCBpZHgpXTsKfQovKiogRGVmYXVsdCBtYXggcmV0cmllcyBmb3Igb25lLXNo
b3Qgam9icyBvbiB0cmFuc2llbnQgZXJyb3JzICgjMjQzNTUpLiAqLwpjb25zdCBERUZBVUxUX01B
WF9UUkFOU0lFTlRfUkVUUklFUyA9IDM7CmNvbnN0IFRSQU5TSUVOVF9QQVRURVJOUyA9IHsKCXJh
dGVfbGltaXQ6IC8ocmF0ZVtfIF1saW1pdHx0b28gbWFueSByZXF1ZXN0c3w0Mjl8cmVzb3VyY2Ug
aGFzIGJlZW4gZXhoYXVzdGVkfGNsb3VkZmxhcmV8dG9rZW5zIHBlciBkYXkpL2ksCglvdmVybG9h
ZGVkOiAvXGI1MjlcYnxcYm92ZXJsb2FkZWQoPzpfZXJyb3IpP1xifGhpZ2ggZGVtYW5kfHRlbXBv
cmFyKD86aWx5fHkpIG92ZXJsb2FkZWR8Y2FwYWNpdHkgZXhjZWVkZWQvaSwKCW5ldHdvcms6IC8o
bmV0d29ya3xlY29ubnJlc2V0fGVjb25ucmVmdXNlZHxmZXRjaCBmYWlsZWR8c29ja2V0KS9pLAoJ
dGltZW91dDogLyh0aW1lb3V0fGV0aW1lZG91dCkvaSwKCXNlcnZlcl9lcnJvcjogL1xiNVxkezJ9
XGIvCn07CmZ1bmN0aW9uIGlzVHJhbnNpZW50Q3JvbkVycm9yKGVycm9yLCByZXRyeU9uKSB7Cglp
ZiAoIWVycm9yIHx8IHR5cGVvZiBlcnJvciAhPT0gInN0cmluZyIpIHJldHVybiBmYWxzZTsKCXJl
dHVybiAocmV0cnlPbj8ubGVuZ3RoID8gcmV0cnlPbiA6IE9iamVjdC5rZXlzKFRSQU5TSUVOVF9Q
QVRURVJOUykpLnNvbWUoKGspID0+IFRSQU5TSUVOVF9QQVRURVJOU1trXT8udGVzdChlcnJvcikp
Owp9CmZ1bmN0aW9uIHJlc29sdmVSZXRyeUNvbmZpZyhjcm9uQ29uZmlnKSB7Cgljb25zdCByZXRy
eSA9IGNyb25Db25maWc/LnJldHJ5OwoJcmV0dXJuIHsKCQltYXhBdHRlbXB0czogdHlwZW9mIHJl
dHJ5Py5tYXhBdHRlbXB0cyA9PT0gIm51bWJlciIgPyByZXRyeS5tYXhBdHRlbXB0cyA6IERFRkFV
TFRfTUFYX1RSQU5TSUVOVF9SRVRSSUVTLAoJCWJhY2tvZmZNczogQXJyYXkuaXNBcnJheShyZXRy
eT8uYmFja29mZk1zKSAmJiByZXRyeS5iYWNrb2ZmTXMubGVuZ3RoID4gMCA/IHJldHJ5LmJhY2tv
ZmZNcyA6IERFRkFVTFRfQkFDS09GRl9TQ0hFRFVMRV9NUy5zbGljZSgwLCAzKSwKCQlyZXRyeU9u
OiBBcnJheS5pc0FycmF5KHJldHJ5Py5yZXRyeU9uKSAmJiByZXRyeS5yZXRyeU9uLmxlbmd0aCA+
IDAgPyByZXRyeS5yZXRyeU9uIDogdm9pZCAwCgl9Owp9CmZ1bmN0aW9uIHJlc29sdmVEZWxpdmVy
eVN0YXR1cyhwYXJhbXMpIHsKCWlmIChwYXJhbXMuZGVsaXZlcmVkID09PSB0cnVlKSByZXR1cm4g
ImRlbGl2ZXJlZCI7CglpZiAocGFyYW1zLmRlbGl2ZXJlZCA9PT0gZmFsc2UpIHJldHVybiAibm90
LWRlbGl2ZXJlZCI7CglyZXR1cm4gcmVzb2x2ZUNyb25EZWxpdmVyeVBsYW4ocGFyYW1zLmpvYiku
cmVxdWVzdGVkID8gInVua25vd24iIDogIm5vdC1yZXF1ZXN0ZWQiOwp9CmZ1bmN0aW9uIG5vcm1h
bGl6ZUNyb25NZXNzYWdlQ2hhbm5lbChpbnB1dCkgewoJaWYgKHR5cGVvZiBpbnB1dCAhPT0gInN0
cmluZyIpIHJldHVybjsKCWNvbnN0IGNoYW5uZWwgPSBpbnB1dC50cmltKCkudG9Mb3dlckNhc2Uo
KTsKCXJldHVybiBjaGFubmVsID8gY2hhbm5lbCA6IHZvaWQgMDsKfQpmdW5jdGlvbiBub3JtYWxp
emVUbyhpbnB1dCkgewoJaWYgKHR5cGVvZiBpbnB1dCAhPT0gInN0cmluZyIpIHJldHVybjsKCWNv
bnN0IHRvID0gaW5wdXQudHJpbSgpOwoJcmV0dXJuIHRvID8gdG8gOiB2b2lkIDA7Cn0KZnVuY3Rp
b24gY2xhbXBQb3NpdGl2ZUludCh2YWx1ZSwgZmFsbGJhY2spIHsKCWlmICh0eXBlb2YgdmFsdWUg
IT09ICJudW1iZXIiIHx8ICFOdW1iZXIuaXNGaW5pdGUodmFsdWUpKSByZXR1cm4gZmFsbGJhY2s7
Cgljb25zdCBmbG9vcmVkID0gTWF0aC5mbG9vcih2YWx1ZSk7CglyZXR1cm4gZmxvb3JlZCA+PSAx
ID8gZmxvb3JlZCA6IGZhbGxiYWNrOwp9CmZ1bmN0aW9uIGNsYW1wTm9uTmVnYXRpdmVJbnQodmFs
dWUsIGZhbGxiYWNrKSB7CglpZiAodHlwZW9mIHZhbHVlICE9PSAibnVtYmVyIiB8fCAhTnVtYmVy
LmlzRmluaXRlKHZhbHVlKSkgcmV0dXJuIGZhbGxiYWNrOwoJY29uc3QgZmxvb3JlZCA9IE1hdGgu
Zmxvb3IodmFsdWUpOwoJcmV0dXJuIGZsb29yZWQgPj0gMCA/IGZsb29yZWQgOiBmYWxsYmFjazsK
fQpmdW5jdGlvbiByZXNvbHZlRmFpbHVyZUFsZXJ0KHN0YXRlLCBqb2IpIHsKCWNvbnN0IGdsb2Jh
bENvbmZpZyA9IHN0YXRlLmRlcHMuY3JvbkNvbmZpZz8uZmFpbHVyZUFsZXJ0OwoJY29uc3Qgam9i
Q29uZmlnID0gam9iLmZhaWx1cmVBbGVydCA9PT0gZmFsc2UgPyB2b2lkIDAgOiBqb2IuZmFpbHVy
ZUFsZXJ0OwoJaWYgKGpvYi5mYWlsdXJlQWxlcnQgPT09IGZhbHNlKSByZXR1cm4gbnVsbDsKCWlm
ICgham9iQ29uZmlnICYmIGdsb2JhbENvbmZpZz8uZW5hYmxlZCAhPT0gdHJ1ZSkgcmV0dXJuIG51
bGw7Cgljb25zdCBtb2RlID0gam9iQ29uZmlnPy5tb2RlID8/IGdsb2JhbENvbmZpZz8ubW9kZTsK
CWNvbnN0IGV4cGxpY2l0VG8gPSBub3JtYWxpemVUbyhqb2JDb25maWc/LnRvKTsKCXJldHVybiB7
CgkJYWZ0ZXI6IGNsYW1wUG9zaXRpdmVJbnQoam9iQ29uZmlnPy5hZnRlciA/PyBnbG9iYWxDb25m
aWc/LmFmdGVyLCBERUZBVUxUX0ZBSUxVUkVfQUxFUlRfQUZURVIpLAoJCWNvb2xkb3duTXM6IGNs
YW1wTm9uTmVnYXRpdmVJbnQoam9iQ29uZmlnPy5jb29sZG93bk1zID8/IGdsb2JhbENvbmZpZz8u
Y29vbGRvd25NcywgREVGQVVMVF9GQUlMVVJFX0FMRVJUX0NPT0xET1dOX01TKSwKCQljaGFubmVs
OiBub3JtYWxpemVDcm9uTWVzc2FnZUNoYW5uZWwoam9iQ29uZmlnPy5jaGFubmVsKSA/PyBub3Jt
YWxpemVDcm9uTWVzc2FnZUNoYW5uZWwoam9iLmRlbGl2ZXJ5Py5jaGFubmVsKSA/PyAibGFzdCIs
CgkJdG86IG1vZGUgPT09ICJ3ZWJob29rIiA/IGV4cGxpY2l0VG8gOiBleHBsaWNpdFRvID8/IG5v
cm1hbGl6ZVRvKGpvYi5kZWxpdmVyeT8udG8pLAoJCW1vZGUsCgkJYWNjb3VudElkOiBqb2JDb25m
aWc/LmFjY291bnRJZCA/PyBnbG9iYWxDb25maWc/LmFjY291bnRJZAoJfTsKfQpmdW5jdGlvbiBl
bWl0RmFpbHVyZUFsZXJ0KHN0YXRlLCBwYXJhbXMpIHsKCWNvbnN0IHNhZmVKb2JOYW1lID0gcGFy
YW1zLmpvYi5uYW1lIHx8IHBhcmFtcy5qb2IuaWQ7Cgljb25zdCB0cnVuY2F0ZWRFcnJvciA9IChw
YXJhbXMuZXJyb3I/LnRyaW0oKSB8fCAidW5rbm93biBlcnJvciIpLnNsaWNlKDAsIDIwMCk7Cglj
b25zdCB0ZXh0ID0gW2BDcm9uIGpvYiAiJHtzYWZlSm9iTmFtZX0iIGZhaWxlZCAke3BhcmFtcy5j
b25zZWN1dGl2ZUVycm9yc30gdGltZXNgLCBgTGFzdCBlcnJvcjogJHt0cnVuY2F0ZWRFcnJvcn1g
XS5qb2luKCJcbiIpOwoJaWYgKHN0YXRlLmRlcHMuc2VuZENyb25GYWlsdXJlQWxlcnQpIHsKCQlz
dGF0ZS5kZXBzLnNlbmRDcm9uRmFpbHVyZUFsZXJ0KHsKCQkJam9iOiBwYXJhbXMuam9iLAoJCQl0
ZXh0LAoJCQljaGFubmVsOiBwYXJhbXMuY2hhbm5lbCwKCQkJdG86IHBhcmFtcy50bywKCQkJbW9k
ZTogcGFyYW1zLm1vZGUsCgkJCWFjY291bnRJZDogcGFyYW1zLmFjY291bnRJZAoJCX0pLmNhdGNo
KChlcnIpID0+IHsKCQkJc3RhdGUuZGVwcy5sb2cud2Fybih7CgkJCQlqb2JJZDogcGFyYW1zLmpv
Yi5pZCwKCQkJCWVycjogU3RyaW5nKGVycikKCQkJfSwgImNyb246IGZhaWx1cmUgYWxlcnQgZGVs
aXZlcnkgZmFpbGVkIik7CgkJfSk7CgkJcmV0dXJuOwoJfQoJc3RhdGUuZGVwcy5lbnF1ZXVlU3lz
dGVtRXZlbnQodGV4dCwgeyBhZ2VudElkOiBwYXJhbXMuam9iLmFnZW50SWQgfSk7CglpZiAocGFy
YW1zLmpvYi53YWtlTW9kZSA9PT0gIm5vdyIpIHN0YXRlLmRlcHMucmVxdWVzdEhlYXJ0YmVhdE5v
dyh7IHJlYXNvbjogYGNyb246JHtwYXJhbXMuam9iLmlkfTpmYWlsdXJlLWFsZXJ0YCB9KTsKfQov
KioKKiBBcHBseSB0aGUgcmVzdWx0IG9mIGEgam9iIGV4ZWN1dGlvbiB0byB0aGUgam9iJ3Mgc3Rh
dGUuCiogSGFuZGxlcyBjb25zZWN1dGl2ZSBlcnJvciB0cmFja2luZywgZXhwb25lbnRpYWwgYmFj
a29mZiwgb25lLXNob3QgZGlzYWJsZSwKKiBhbmQgbmV4dFJ1bkF0TXMgY29tcHV0YXRpb24uIFJl
dHVybnMgYHRydWVgIGlmIHRoZSBqb2Igc2hvdWxkIGJlIGRlbGV0ZWQuCiovCmZ1bmN0aW9uIGFw
cGx5Sm9iUmVzdWx0KHN0YXRlLCBqb2IsIHJlc3VsdCwgb3B0cykgewoJY29uc3QgcHJldkxhc3RS
dW5BdE1zID0gam9iLnN0YXRlLmxhc3RSdW5BdE1zOwoJY29uc3QgY29tcHV0ZU5leHRXaXRoUHJl
c2VydmVkTGFzdFJ1biA9IChub3dNcykgPT4gewoJCWNvbnN0IHNhdmVkID0gam9iLnN0YXRlLmxh
c3RSdW5BdE1zOwoJCWpvYi5zdGF0ZS5sYXN0UnVuQXRNcyA9IHByZXZMYXN0UnVuQXRNczsKCQl0
cnkgewoJCQlyZXR1cm4gY29tcHV0ZUpvYk5leHRSdW5BdE1zKGpvYiwgbm93TXMpOwoJCX0gZmlu
YWxseSB7CgkJCWpvYi5zdGF0ZS5sYXN0UnVuQXRNcyA9IHNhdmVkOwoJCX0KCX07Cglqb2Iuc3Rh
dGUucnVubmluZ0F0TXMgPSB2b2lkIDA7Cglqb2Iuc3RhdGUubGFzdFJ1bkF0TXMgPSByZXN1bHQu
c3RhcnRlZEF0OwoJam9iLnN0YXRlLmxhc3RSdW5TdGF0dXMgPSByZXN1bHQuc3RhdHVzOwoJam9i
LnN0YXRlLmxhc3RTdGF0dXMgPSByZXN1bHQuc3RhdHVzOwoJam9iLnN0YXRlLmxhc3REdXJhdGlv
bk1zID0gTWF0aC5tYXgoMCwgcmVzdWx0LmVuZGVkQXQgLSByZXN1bHQuc3RhcnRlZEF0KTsKCWpv
Yi5zdGF0ZS5sYXN0RXJyb3IgPSByZXN1bHQuZXJyb3I7Cglqb2Iuc3RhdGUubGFzdEVycm9yUmVh
c29uID0gcmVzdWx0LnN0YXR1cyA9PT0gImVycm9yIiAmJiB0eXBlb2YgcmVzdWx0LmVycm9yID09
PSAic3RyaW5nIiA/IHJlc29sdmVGYWlsb3ZlclJlYXNvbkZyb21FcnJvcihyZXN1bHQuZXJyb3Ip
ID8/IHZvaWQgMCA6IHZvaWQgMDsKCWpvYi5zdGF0ZS5sYXN0RGVsaXZlcmVkID0gcmVzdWx0LmRl
bGl2ZXJlZDsKCWNvbnN0IGRlbGl2ZXJ5U3RhdHVzID0gcmVzb2x2ZURlbGl2ZXJ5U3RhdHVzKHsK
CQlqb2IsCgkJZGVsaXZlcmVkOiByZXN1bHQuZGVsaXZlcmVkCgl9KTsKCWpvYi5zdGF0ZS5sYXN0
RGVsaXZlcnlTdGF0dXMgPSBkZWxpdmVyeVN0YXR1czsKCWpvYi5zdGF0ZS5sYXN0RGVsaXZlcnlF
cnJvciA9IGRlbGl2ZXJ5U3RhdHVzID09PSAibm90LWRlbGl2ZXJlZCIgJiYgcmVzdWx0LmVycm9y
ID8gcmVzdWx0LmVycm9yIDogdm9pZCAwOwoJam9iLnVwZGF0ZWRBdE1zID0gcmVzdWx0LmVuZGVk
QXQ7CglpZiAocmVzdWx0LnN0YXR1cyA9PT0gImVycm9yIikgewoJCWpvYi5zdGF0ZS5jb25zZWN1
dGl2ZUVycm9ycyA9IChqb2Iuc3RhdGUuY29uc2VjdXRpdmVFcnJvcnMgPz8gMCkgKyAxOwoJCWNv
bnN0IGFsZXJ0Q29uZmlnID0gcmVzb2x2ZUZhaWx1cmVBbGVydChzdGF0ZSwgam9iKTsKCQlpZiAo
YWxlcnRDb25maWcgJiYgam9iLnN0YXRlLmNvbnNlY3V0aXZlRXJyb3JzID49IGFsZXJ0Q29uZmln
LmFmdGVyKSB7CgkJCWlmICghKGpvYi5kZWxpdmVyeT8uYmVzdEVmZm9ydCA9PT0gdHJ1ZSB8fCBq
b2IucGF5bG9hZC5raW5kID09PSAiYWdlbnRUdXJuIiAmJiBqb2IucGF5bG9hZC5iZXN0RWZmb3J0
RGVsaXZlciA9PT0gdHJ1ZSkpIHsKCQkJCWNvbnN0IG5vdyA9IHN0YXRlLmRlcHMubm93TXMoKTsK
CQkJCWNvbnN0IGxhc3RBbGVydCA9IGpvYi5zdGF0ZS5sYXN0RmFpbHVyZUFsZXJ0QXRNczsKCQkJ
CWlmICghKHR5cGVvZiBsYXN0QWxlcnQgPT09ICJudW1iZXIiICYmIG5vdyAtIGxhc3RBbGVydCA8
IE1hdGgubWF4KDAsIGFsZXJ0Q29uZmlnLmNvb2xkb3duTXMpKSkgewoJCQkJCWVtaXRGYWlsdXJl
QWxlcnQoc3RhdGUsIHsKCQkJCQkJam9iLAoJCQkJCQllcnJvcjogcmVzdWx0LmVycm9yLAoJCQkJ
CQljb25zZWN1dGl2ZUVycm9yczogam9iLnN0YXRlLmNvbnNlY3V0aXZlRXJyb3JzLAoJCQkJCQlj
aGFubmVsOiBhbGVydENvbmZpZy5jaGFubmVsLAoJCQkJCQl0bzogYWxlcnRDb25maWcudG8sCgkJ
CQkJCW1vZGU6IGFsZXJ0Q29uZmlnLm1vZGUsCgkJCQkJCWFjY291bnRJZDogYWxlcnRDb25maWcu
YWNjb3VudElkCgkJCQkJfSk7CgkJCQkJam9iLnN0YXRlLmxhc3RGYWlsdXJlQWxlcnRBdE1zID0g
bm93OwoJCQkJfQoJCQl9CgkJfQoJfSBlbHNlIHsKCQlqb2Iuc3RhdGUuY29uc2VjdXRpdmVFcnJv
cnMgPSAwOwoJCWpvYi5zdGF0ZS5sYXN0RmFpbHVyZUFsZXJ0QXRNcyA9IHZvaWQgMDsKCX0KCWNv
bnN0IHNob3VsZERlbGV0ZSA9IGpvYi5zY2hlZHVsZS5raW5kID09PSAiYXQiICYmIGpvYi5kZWxl
dGVBZnRlclJ1biA9PT0gdHJ1ZSAmJiByZXN1bHQuc3RhdHVzID09PSAib2siOwoJaWYgKCFzaG91
bGREZWxldGUpIGlmIChqb2Iuc2NoZWR1bGUua2luZCA9PT0gImF0IikgewoJCWlmIChyZXN1bHQu
c3RhdHVzID09PSAib2siIHx8IHJlc3VsdC5zdGF0dXMgPT09ICJza2lwcGVkIikgewoJCQlqb2Iu
ZW5hYmxlZCA9IGZhbHNlOwoJCQlqb2Iuc3RhdGUubmV4dFJ1bkF0TXMgPSB2b2lkIDA7CgkJfSBl
bHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSAiZXJyb3IiKSB7CgkJCWNvbnN0IHJldHJ5Q29uZmln
ID0gcmVzb2x2ZVJldHJ5Q29uZmlnKHN0YXRlLmRlcHMuY3JvbkNvbmZpZyk7CgkJCWNvbnN0IHRy
YW5zaWVudCA9IGlzVHJhbnNpZW50Q3JvbkVycm9yKHJlc3VsdC5lcnJvciwgcmV0cnlDb25maWcu
cmV0cnlPbik7CgkJCWNvbnN0IGNvbnNlY3V0aXZlID0gam9iLnN0YXRlLmNvbnNlY3V0aXZlRXJy
b3JzOwoJCQlpZiAodHJhbnNpZW50ICYmIGNvbnNlY3V0aXZlIDw9IHJldHJ5Q29uZmlnLm1heEF0
dGVtcHRzKSB7CgkJCQljb25zdCBiYWNrb2ZmID0gZXJyb3JCYWNrb2ZmTXMoY29uc2VjdXRpdmUs
IHJldHJ5Q29uZmlnLmJhY2tvZmZNcyk7CgkJCQlqb2Iuc3RhdGUubmV4dFJ1bkF0TXMgPSByZXN1
bHQuZW5kZWRBdCArIGJhY2tvZmY7CgkJCQlzdGF0ZS5kZXBzLmxvZy5pbmZvKHsKCQkJCQlqb2JJ
ZDogam9iLmlkLAoJCQkJCWpvYk5hbWU6IGpvYi5uYW1lLAoJCQkJCWNvbnNlY3V0aXZlRXJyb3Jz
OiBjb25zZWN1dGl2ZSwKCQkJCQliYWNrb2ZmTXM6IGJhY2tvZmYsCgkJCQkJbmV4dFJ1bkF0TXM6
IGpvYi5zdGF0ZS5uZXh0UnVuQXRNcwoJCQkJfSwgImNyb246IHNjaGVkdWxpbmcgb25lLXNob3Qg
cmV0cnkgYWZ0ZXIgdHJhbnNpZW50IGVycm9yIik7CgkJCX0gZWxzZSB7CgkJCQlqb2IuZW5hYmxl
ZCA9IGZhbHNlOwoJCQkJam9iLnN0YXRlLm5leHRSdW5BdE1zID0gdm9pZCAwOwoJCQkJc3RhdGUu
ZGVwcy5sb2cud2Fybih7CgkJCQkJam9iSWQ6IGpvYi5pZCwKCQkJCQlqb2JOYW1lOiBqb2IubmFt
ZSwKCQkJCQljb25zZWN1dGl2ZUVycm9yczogY29uc2VjdXRpdmUsCgkJCQkJZXJyb3I6IHJlc3Vs
dC5lcnJvciwKCQkJCQlyZWFzb246IHRyYW5zaWVudCA/ICJtYXggcmV0cmllcyBleGhhdXN0ZWQi
IDogInBlcm1hbmVudCBlcnJvciIKCQkJCX0sICJjcm9uOiBkaXNhYmxpbmcgb25lLXNob3Qgam9i
IGFmdGVyIGVycm9yIik7CgkJCX0KCQl9Cgl9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICJl
cnJvciIgJiYgam9iLmVuYWJsZWQpIHsKCQljb25zdCBiYWNrb2ZmID0gZXJyb3JCYWNrb2ZmTXMo
am9iLnN0YXRlLmNvbnNlY3V0aXZlRXJyb3JzID8/IDEpOwoJCWxldCBub3JtYWxOZXh0OwoJCXRy
eSB7CgkJCW5vcm1hbE5leHQgPSBvcHRzPy5wcmVzZXJ2ZVNjaGVkdWxlICYmIGpvYi5zY2hlZHVs
ZS5raW5kID09PSAiZXZlcnkiID8gY29tcHV0ZU5leHRXaXRoUHJlc2VydmVkTGFzdFJ1bihyZXN1
bHQuZW5kZWRBdCkgOiBjb21wdXRlSm9iTmV4dFJ1bkF0TXMoam9iLCByZXN1bHQuZW5kZWRBdCk7
CgkJfSBjYXRjaCAoZXJyKSB7CgkJCXJlY29yZFNjaGVkdWxlQ29tcHV0ZUVycm9yKHsKCQkJCXN0
YXRlLAoJCQkJam9iLAoJCQkJZXJyCgkJCX0pOwoJCX0KCQljb25zdCBiYWNrb2ZmTmV4dCA9IHJl
c3VsdC5lbmRlZEF0ICsgYmFja29mZjsKCQlqb2Iuc3RhdGUubmV4dFJ1bkF0TXMgPSBub3JtYWxO
ZXh0ICE9PSB2b2lkIDAgPyBNYXRoLm1heChub3JtYWxOZXh0LCBiYWNrb2ZmTmV4dCkgOiBiYWNr
b2ZmTmV4dDsKCQlzdGF0ZS5kZXBzLmxvZy5pbmZvKHsKCQkJam9iSWQ6IGpvYi5pZCwKCQkJY29u
c2VjdXRpdmVFcnJvcnM6IGpvYi5zdGF0ZS5jb25zZWN1dGl2ZUVycm9ycywKCQkJYmFja29mZk1z
OiBiYWNrb2ZmLAoJCQluZXh0UnVuQXRNczogam9iLnN0YXRlLm5leHRSdW5BdE1zCgkJfSwgImNy
b246IGFwcGx5aW5nIGVycm9yIGJhY2tvZmYiKTsKCX0gZWxzZSBpZiAoam9iLmVuYWJsZWQpIHsK
CQlsZXQgbmF0dXJhbE5leHQ7CgkJdHJ5IHsKCQkJbmF0dXJhbE5leHQgPSBvcHRzPy5wcmVzZXJ2
ZVNjaGVkdWxlICYmIGpvYi5zY2hlZHVsZS5raW5kID09PSAiZXZlcnkiID8gY29tcHV0ZU5leHRX
aXRoUHJlc2VydmVkTGFzdFJ1bihyZXN1bHQuZW5kZWRBdCkgOiBjb21wdXRlSm9iTmV4dFJ1bkF0
TXMoam9iLCByZXN1bHQuZW5kZWRBdCk7CgkJfSBjYXRjaCAoZXJyKSB7CgkJCXJlY29yZFNjaGVk
dWxlQ29tcHV0ZUVycm9yKHsKCQkJCXN0YXRlLAoJCQkJam9iLAoJCQkJZXJyCgkJCX0pOwoJCX0K
CQlpZiAoam9iLnNjaGVkdWxlLmtpbmQgPT09ICJjcm9uIikgewoJCQljb25zdCBtaW5OZXh0ID0g
cmVzdWx0LmVuZGVkQXQgKyBNSU5fUkVGSVJFX0dBUF9NUzsKCQkJam9iLnN0YXRlLm5leHRSdW5B
dE1zID0gbmF0dXJhbE5leHQgIT09IHZvaWQgMCA/IE1hdGgubWF4KG5hdHVyYWxOZXh0LCBtaW5O
ZXh0KSA6IG1pbk5leHQ7CgkJfSBlbHNlIGpvYi5zdGF0ZS5uZXh0UnVuQXRNcyA9IG5hdHVyYWxO
ZXh0OwoJfSBlbHNlIGpvYi5zdGF0ZS5uZXh0UnVuQXRNcyA9IHZvaWQgMDsKCXJldHVybiBzaG91
bGREZWxldGU7Cn0KZnVuY3Rpb24gYXBwbHlPdXRjb21lVG9TdG9yZWRKb2Ioc3RhdGUsIHJlc3Vs
dCkgewoJY29uc3Qgc3RvcmUgPSBzdGF0ZS5zdG9yZTsKCWlmICghc3RvcmUpIHJldHVybjsKCWNv
bnN0IGpvYnMgPSBzdG9yZS5qb2JzOwoJY29uc3Qgam9iID0gam9icy5maW5kKChlbnRyeSkgPT4g
ZW50cnkuaWQgPT09IHJlc3VsdC5qb2JJZCk7CglpZiAoIWpvYikgewoJCXN0YXRlLmRlcHMubG9n
Lndhcm4oeyBqb2JJZDogcmVzdWx0LmpvYklkIH0sICJjcm9uOiBhcHBseU91dGNvbWVUb1N0b3Jl
ZEpvYiDigJQgam9iIG5vdCBmb3VuZCBhZnRlciBmb3JjZVJlbG9hZCwgcmVzdWx0IGRpc2NhcmRl
ZCIpOwoJCXJldHVybjsKCX0KCWNvbnN0IHNob3VsZERlbGV0ZSA9IGFwcGx5Sm9iUmVzdWx0KHN0
YXRlLCBqb2IsIHsKCQlzdGF0dXM6IHJlc3VsdC5zdGF0dXMsCgkJZXJyb3I6IHJlc3VsdC5lcnJv
ciwKCQlkZWxpdmVyZWQ6IHJlc3VsdC5kZWxpdmVyZWQsCgkJc3RhcnRlZEF0OiByZXN1bHQuc3Rh
cnRlZEF0LAoJCWVuZGVkQXQ6IHJlc3VsdC5lbmRlZEF0Cgl9KTsKCWVtaXRKb2JGaW5pc2hlZChz
dGF0ZSwgam9iLCByZXN1bHQsIHJlc3VsdC5zdGFydGVkQXQpOwoJaWYgKHNob3VsZERlbGV0ZSkg
ewoJCXN0b3JlLmpvYnMgPSBqb2JzLmZpbHRlcigoZW50cnkpID0+IGVudHJ5LmlkICE9PSBqb2Iu
aWQpOwoJCWVtaXQoc3RhdGUsIHsKCQkJam9iSWQ6IGpvYi5pZCwKCQkJYWN0aW9uOiAicmVtb3Zl
ZCIKCQl9KTsKCX0KfQpmdW5jdGlvbiBhcm1UaW1lcihzdGF0ZSkgewoJaWYgKHN0YXRlLnRpbWVy
KSBjbGVhclRpbWVvdXQoc3RhdGUudGltZXIpOwoJc3RhdGUudGltZXIgPSBudWxsOwoJaWYgKCFz
dGF0ZS5kZXBzLmNyb25FbmFibGVkKSB7CgkJc3RhdGUuZGVwcy5sb2cuZGVidWcoe30sICJjcm9u
OiBhcm1UaW1lciBza2lwcGVkIC0gc2NoZWR1bGVyIGRpc2FibGVkIik7CgkJcmV0dXJuOwoJfQoJ
Y29uc3QgbmV4dEF0ID0gbmV4dFdha2VBdE1zKHN0YXRlKTsKCWlmICghbmV4dEF0KSB7CgkJY29u
c3Qgam9iQ291bnQgPSBzdGF0ZS5zdG9yZT8uam9icy5sZW5ndGggPz8gMDsKCQljb25zdCBlbmFi
bGVkQ291bnQgPSBzdGF0ZS5zdG9yZT8uam9icy5maWx0ZXIoKGopID0+IGouZW5hYmxlZCkubGVu
Z3RoID8/IDA7CgkJY29uc3Qgd2l0aE5leHRSdW4gPSBzdGF0ZS5zdG9yZT8uam9icy5maWx0ZXIo
KGopID0+IGouZW5hYmxlZCAmJiB0eXBlb2Ygai5zdGF0ZS5uZXh0UnVuQXRNcyA9PT0gIm51bWJl
ciIgJiYgTnVtYmVyLmlzRmluaXRlKGouc3RhdGUubmV4dFJ1bkF0TXMpKS5sZW5ndGggPz8gMDsK
CQlzdGF0ZS5kZXBzLmxvZy5kZWJ1Zyh7CgkJCWpvYkNvdW50LAoJCQllbmFibGVkQ291bnQsCgkJ
CXdpdGhOZXh0UnVuCgkJfSwgImNyb246IGFybVRpbWVyIHNraXBwZWQgLSBubyBqb2JzIHdpdGgg
bmV4dFJ1bkF0TXMiKTsKCQlyZXR1cm47Cgl9Cgljb25zdCBub3cgPSBzdGF0ZS5kZXBzLm5vd01z
KCk7Cgljb25zdCBkZWxheSA9IE1hdGgubWF4KG5leHRBdCAtIG5vdywgMCk7Cgljb25zdCBmbG9v
cmVkRGVsYXkgPSBkZWxheSA9PT0gMCA/IE1JTl9SRUZJUkVfR0FQX01TIDogZGVsYXk7Cgljb25z
dCBjbGFtcGVkRGVsYXkgPSBNYXRoLm1pbihmbG9vcmVkRGVsYXksIE1BWF9USU1FUl9ERUxBWV9N
Uyk7CglzdGF0ZS50aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gewoJCW9uVGltZXIoc3RhdGUpLmNh
dGNoKChlcnIpID0+IHsKCQkJc3RhdGUuZGVwcy5sb2cuZXJyb3IoeyBlcnI6IFN0cmluZyhlcnIp
IH0sICJjcm9uOiB0aW1lciB0aWNrIGZhaWxlZCIpOwoJCX0pOwoJfSwgY2xhbXBlZERlbGF5KTsK
CXN0YXRlLmRlcHMubG9nLmRlYnVnKHsKCQluZXh0QXQsCgkJZGVsYXlNczogY2xhbXBlZERlbGF5
LAoJCWNsYW1wZWQ6IGRlbGF5ID4gTUFYX1RJTUVSX0RFTEFZX01TCgl9LCAiY3JvbjogdGltZXIg
YXJtZWQiKTsKfQpmdW5jdGlvbiBhcm1SdW5uaW5nUmVjaGVja1RpbWVyKHN0YXRlKSB7CglpZiAo
c3RhdGUudGltZXIpIGNsZWFyVGltZW91dChzdGF0ZS50aW1lcik7CglzdGF0ZS50aW1lciA9IHNl
dFRpbWVvdXQoKCkgPT4gewoJCW9uVGltZXIoc3RhdGUpLmNhdGNoKChlcnIpID0+IHsKCQkJc3Rh
dGUuZGVwcy5sb2cuZXJyb3IoeyBlcnI6IFN0cmluZyhlcnIpIH0sICJjcm9uOiB0aW1lciB0aWNr
IGZhaWxlZCIpOwoJCX0pOwoJfSwgTUFYX1RJTUVSX0RFTEFZX01TKTsKfQphc3luYyBmdW5jdGlv
biBvblRpbWVyKHN0YXRlKSB7CglpZiAoc3RhdGUucnVubmluZykgewoJCWFybVJ1bm5pbmdSZWNo
ZWNrVGltZXIoc3RhdGUpOwoJCXJldHVybjsKCX0KCXN0YXRlLnJ1bm5pbmcgPSB0cnVlOwoJYXJt
UnVubmluZ1JlY2hlY2tUaW1lcihzdGF0ZSk7Cgl0cnkgewoJCWNvbnN0IGR1ZUpvYnMgPSBhd2Fp
dCBsb2NrZWQoc3RhdGUsIGFzeW5jICgpID0+IHsKCQkJYXdhaXQgZW5zdXJlTG9hZGVkKHN0YXRl
LCB7CgkJCQlmb3JjZVJlbG9hZDogdHJ1ZSwKCQkJCXNraXBSZWNvbXB1dGU6IHRydWUKCQkJfSk7
CgkJCWNvbnN0IGR1ZUNoZWNrTm93ID0gc3RhdGUuZGVwcy5ub3dNcygpOwoJCQljb25zdCBkdWUg
PSBjb2xsZWN0UnVubmFibGVKb2JzKHN0YXRlLCBkdWVDaGVja05vdyk7CgkJCWlmIChkdWUubGVu
Z3RoID09PSAwKSB7CgkJCQlpZiAocmVjb21wdXRlTmV4dFJ1bnNGb3JNYWludGVuYW5jZShzdGF0
ZSwgewoJCQkJCXJlY29tcHV0ZUV4cGlyZWQ6IHRydWUsCgkJCQkJbm93TXM6IGR1ZUNoZWNrTm93
CgkJCQl9KSkgYXdhaXQgcGVyc2lzdChzdGF0ZSk7CgkJCQlyZXR1cm4gW107CgkJCX0KCQkJY29u
c3Qgbm93ID0gc3RhdGUuZGVwcy5ub3dNcygpOwoJCQlmb3IgKGNvbnN0IGpvYiBvZiBkdWUpIHsK
CQkJCWpvYi5zdGF0ZS5ydW5uaW5nQXRNcyA9IG5vdzsKCQkJCWpvYi5zdGF0ZS5sYXN0RXJyb3Ig
PSB2b2lkIDA7CgkJCX0KCQkJYXdhaXQgcGVyc2lzdChzdGF0ZSk7CgkJCXJldHVybiBkdWUubWFw
KChqKSA9PiAoewoJCQkJaWQ6IGouaWQsCgkJCQlqb2I6IGoKCQkJfSkpOwoJCX0pOwoJCWNvbnN0
IHJ1bkR1ZUpvYiA9IGFzeW5jIChwYXJhbXMpID0+IHsKCQkJY29uc3QgeyBpZCwgam9iIH0gPSBw
YXJhbXM7CgkJCWNvbnN0IHN0YXJ0ZWRBdCA9IHN0YXRlLmRlcHMubm93TXMoKTsKCQkJam9iLnN0
YXRlLnJ1bm5pbmdBdE1zID0gc3RhcnRlZEF0OwoJCQllbWl0KHN0YXRlLCB7CgkJCQlqb2JJZDog
am9iLmlkLAoJCQkJYWN0aW9uOiAic3RhcnRlZCIsCgkJCQlydW5BdE1zOiBzdGFydGVkQXQKCQkJ
fSk7CgkJCWNvbnN0IGpvYlRpbWVvdXRNcyA9IHJlc29sdmVDcm9uSm9iVGltZW91dE1zKGpvYik7
CgkJCXRyeSB7CgkJCQlyZXR1cm4gewoJCQkJCWpvYklkOiBpZCwKCQkJCQkuLi5hd2FpdCBleGVj
dXRlSm9iQ29yZVdpdGhUaW1lb3V0KHN0YXRlLCBqb2IpLAoJCQkJCXN0YXJ0ZWRBdCwKCQkJCQll
bmRlZEF0OiBzdGF0ZS5kZXBzLm5vd01zKCkKCQkJCX07CgkJCX0gY2F0Y2ggKGVycikgewoJCQkJ
Y29uc3QgZXJyb3JUZXh0ID0gaXNBYm9ydEVycm9yKGVycikgPyB0aW1lb3V0RXJyb3JNZXNzYWdl
KCkgOiBTdHJpbmcoZXJyKTsKCQkJCXN0YXRlLmRlcHMubG9nLndhcm4oewoJCQkJCWpvYklkOiBp
ZCwKCQkJCQlqb2JOYW1lOiBqb2IubmFtZSwKCQkJCQl0aW1lb3V0TXM6IGpvYlRpbWVvdXRNcyA/
PyBudWxsCgkJCQl9LCBgY3Jvbjogam9iIGZhaWxlZDogJHtlcnJvclRleHR9YCk7CgkJCQlyZXR1
cm4gewoJCQkJCWpvYklkOiBpZCwKCQkJCQlzdGF0dXM6ICJlcnJvciIsCgkJCQkJZXJyb3I6IGVy
cm9yVGV4dCwKCQkJCQlzdGFydGVkQXQsCgkJCQkJZW5kZWRBdDogc3RhdGUuZGVwcy5ub3dNcygp
CgkJCQl9OwoJCQl9CgkJfTsKCQljb25zdCBjb25jdXJyZW5jeSA9IE1hdGgubWluKHJlc29sdmVS
dW5Db25jdXJyZW5jeShzdGF0ZSksIE1hdGgubWF4KDEsIGR1ZUpvYnMubGVuZ3RoKSk7CgkJY29u
c3QgcmVzdWx0cyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IGR1ZUpvYnMubGVuZ3RoIH0pOwoJCWxl
dCBjdXJzb3IgPSAwOwoJCWNvbnN0IHdvcmtlcnMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBjb25j
dXJyZW5jeSB9LCBhc3luYyAoKSA9PiB7CgkJCWZvciAoOzspIHsKCQkJCWNvbnN0IGluZGV4ID0g
Y3Vyc29yKys7CgkJCQlpZiAoaW5kZXggPj0gZHVlSm9icy5sZW5ndGgpIHJldHVybjsKCQkJCWNv
bnN0IGR1ZSA9IGR1ZUpvYnNbaW5kZXhdOwoJCQkJaWYgKCFkdWUpIHJldHVybjsKCQkJCXJlc3Vs
dHNbaW5kZXhdID0gYXdhaXQgcnVuRHVlSm9iKGR1ZSk7CgkJCX0KCQl9KTsKCQlhd2FpdCBQcm9t
aXNlLmFsbCh3b3JrZXJzKTsKCQljb25zdCBjb21wbGV0ZWRSZXN1bHRzID0gcmVzdWx0cy5maWx0
ZXIoKGVudHJ5KSA9PiBlbnRyeSAhPT0gdm9pZCAwKTsKCQlpZiAoY29tcGxldGVkUmVzdWx0cy5s
ZW5ndGggPiAwKSBhd2FpdCBsb2NrZWQoc3RhdGUsIGFzeW5jICgpID0+IHsKCQkJYXdhaXQgZW5z
dXJlTG9hZGVkKHN0YXRlLCB7CgkJCQlmb3JjZVJlbG9hZDogdHJ1ZSwKCQkJCXNraXBSZWNvbXB1
dGU6IHRydWUKCQkJfSk7CgkJCWZvciAoY29uc3QgcmVzdWx0IG9mIGNvbXBsZXRlZFJlc3VsdHMp
IGFwcGx5T3V0Y29tZVRvU3RvcmVkSm9iKHN0YXRlLCByZXN1bHQpOwoJCQlyZWNvbXB1dGVOZXh0
UnVuc0Zvck1haW50ZW5hbmNlKHN0YXRlKTsKCQkJYXdhaXQgcGVyc2lzdChzdGF0ZSk7CgkJfSk7
Cgl9IGZpbmFsbHkgewoJCWNvbnN0IHN0b3JlUGF0aHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNl
dCgpOwoJCWlmIChzdGF0ZS5kZXBzLnJlc29sdmVTZXNzaW9uU3RvcmVQYXRoKSB7CgkJCWNvbnN0
IGRlZmF1bHRBZ2VudElkID0gc3RhdGUuZGVwcy5kZWZhdWx0QWdlbnRJZCA/PyAibWFpbiI7CgkJ
CWlmIChzdGF0ZS5zdG9yZT8uam9icz8ubGVuZ3RoKSBmb3IgKGNvbnN0IGpvYiBvZiBzdGF0ZS5z
dG9yZS5qb2JzKSB7CgkJCQljb25zdCBhZ2VudElkID0gdHlwZW9mIGpvYi5hZ2VudElkID09PSAi
c3RyaW5nIiAmJiBqb2IuYWdlbnRJZC50cmltKCkgPyBqb2IuYWdlbnRJZCA6IGRlZmF1bHRBZ2Vu
dElkOwoJCQkJc3RvcmVQYXRocy5hZGQoc3RhdGUuZGVwcy5yZXNvbHZlU2Vzc2lvblN0b3JlUGF0
aChhZ2VudElkKSk7CgkJCX0KCQkJZWxzZSBzdG9yZVBhdGhzLmFkZChzdGF0ZS5kZXBzLnJlc29s
dmVTZXNzaW9uU3RvcmVQYXRoKGRlZmF1bHRBZ2VudElkKSk7CgkJfSBlbHNlIGlmIChzdGF0ZS5k
ZXBzLnNlc3Npb25TdG9yZVBhdGgpIHN0b3JlUGF0aHMuYWRkKHN0YXRlLmRlcHMuc2Vzc2lvblN0
b3JlUGF0aCk7CgkJaWYgKHN0b3JlUGF0aHMuc2l6ZSA+IDApIHsKCQkJY29uc3Qgbm93TXMgPSBz
dGF0ZS5kZXBzLm5vd01zKCk7CgkJCWZvciAoY29uc3Qgc3RvcmVQYXRoIG9mIHN0b3JlUGF0aHMp
IHRyeSB7CgkJCQlhd2FpdCBzd2VlcENyb25SdW5TZXNzaW9ucyh7CgkJCQkJY3JvbkNvbmZpZzog
c3RhdGUuZGVwcy5jcm9uQ29uZmlnLAoJCQkJCXNlc3Npb25TdG9yZVBhdGg6IHN0b3JlUGF0aCwK
CQkJCQlub3dNcywKCQkJCQlsb2c6IHN0YXRlLmRlcHMubG9nCgkJCQl9KTsKCQkJfSBjYXRjaCAo
ZXJyKSB7CgkJCQlzdGF0ZS5kZXBzLmxvZy53YXJuKHsKCQkJCQllcnI6IFN0cmluZyhlcnIpLAoJ
CQkJCXN0b3JlUGF0aAoJCQkJfSwgImNyb246IHNlc3Npb24gcmVhcGVyIHN3ZWVwIGZhaWxlZCIp
OwoJCQl9CgkJfQoJCXN0YXRlLnJ1bm5pbmcgPSBmYWxzZTsKCQlhcm1UaW1lcihzdGF0ZSk7Cgl9
Cn0KZnVuY3Rpb24gaXNSdW5uYWJsZUpvYihwYXJhbXMpIHsKCWNvbnN0IHsgam9iLCBub3dNcyB9
ID0gcGFyYW1zOwoJaWYgKCFqb2Iuc3RhdGUpIGpvYi5zdGF0ZSA9IHt9OwoJaWYgKCFqb2IuZW5h
YmxlZCkgcmV0dXJuIGZhbHNlOwoJaWYgKHBhcmFtcy5za2lwSm9iSWRzPy5oYXMoam9iLmlkKSkg
cmV0dXJuIGZhbHNlOwoJaWYgKHR5cGVvZiBqb2Iuc3RhdGUucnVubmluZ0F0TXMgPT09ICJudW1i
ZXIiKSByZXR1cm4gZmFsc2U7CglpZiAocGFyYW1zLnNraXBBdElmQWxyZWFkeVJhbiAmJiBqb2Iu
c2NoZWR1bGUua2luZCA9PT0gImF0IiAmJiBqb2Iuc3RhdGUubGFzdFN0YXR1cykgewoJCWNvbnN0
IGxhc3RSdW4gPSBqb2Iuc3RhdGUubGFzdFJ1bkF0TXM7CgkJY29uc3QgbmV4dFJ1biA9IGpvYi5z
dGF0ZS5uZXh0UnVuQXRNczsKCQlpZiAoam9iLnN0YXRlLmxhc3RTdGF0dXMgPT09ICJlcnJvciIg
JiYgam9iLmVuYWJsZWQgJiYgdHlwZW9mIG5leHRSdW4gPT09ICJudW1iZXIiICYmIHR5cGVvZiBs
YXN0UnVuID09PSAibnVtYmVyIiAmJiBuZXh0UnVuID4gbGFzdFJ1bikgcmV0dXJuIG5vd01zID49
IG5leHRSdW47CgkJcmV0dXJuIGZhbHNlOwoJfQoJY29uc3QgbmV4dCA9IGpvYi5zdGF0ZS5uZXh0
UnVuQXRNczsKCWlmICh0eXBlb2YgbmV4dCA9PT0gIm51bWJlciIgJiYgTnVtYmVyLmlzRmluaXRl
KG5leHQpICYmIG5vd01zID49IG5leHQpIHJldHVybiB0cnVlOwoJaWYgKHR5cGVvZiBuZXh0ID09
PSAibnVtYmVyIiAmJiBOdW1iZXIuaXNGaW5pdGUobmV4dCkgJiYgbmV4dCA+IG5vd01zICYmIGlz
RXJyb3JCYWNrb2ZmUGVuZGluZyhqb2IsIG5vd01zKSkgcmV0dXJuIGZhbHNlOwoJaWYgKCFwYXJh
bXMuYWxsb3dDcm9uTWlzc2VkUnVuQnlMYXN0UnVuIHx8IGpvYi5zY2hlZHVsZS5raW5kICE9PSAi
Y3JvbiIpIHJldHVybiBmYWxzZTsKCWxldCBwcmV2aW91c1J1bkF0TXM7Cgl0cnkgewoJCXByZXZp
b3VzUnVuQXRNcyA9IGNvbXB1dGVKb2JQcmV2aW91c1J1bkF0TXMoam9iLCBub3dNcyk7Cgl9IGNh
dGNoIHsKCQlyZXR1cm4gZmFsc2U7Cgl9CglpZiAodHlwZW9mIHByZXZpb3VzUnVuQXRNcyAhPT0g
Im51bWJlciIgfHwgIU51bWJlci5pc0Zpbml0ZShwcmV2aW91c1J1bkF0TXMpKSByZXR1cm4gZmFs
c2U7Cgljb25zdCBsYXN0UnVuQXRNcyA9IGpvYi5zdGF0ZS5sYXN0UnVuQXRNczsKCWlmICh0eXBl
b2YgbGFzdFJ1bkF0TXMgIT09ICJudW1iZXIiIHx8ICFOdW1iZXIuaXNGaW5pdGUobGFzdFJ1bkF0
TXMpKSByZXR1cm4gZmFsc2U7CglyZXR1cm4gcHJldmlvdXNSdW5BdE1zID4gbGFzdFJ1bkF0TXM7
Cn0KZnVuY3Rpb24gaXNFcnJvckJhY2tvZmZQZW5kaW5nKGpvYiwgbm93TXMpIHsKCWlmIChqb2Iu
c2NoZWR1bGUua2luZCA9PT0gImF0IiB8fCBqb2Iuc3RhdGUubGFzdFN0YXR1cyAhPT0gImVycm9y
IikgcmV0dXJuIGZhbHNlOwoJY29uc3QgbGFzdFJ1bkF0TXMgPSBqb2Iuc3RhdGUubGFzdFJ1bkF0
TXM7CglpZiAodHlwZW9mIGxhc3RSdW5BdE1zICE9PSAibnVtYmVyIiB8fCAhTnVtYmVyLmlzRmlu
aXRlKGxhc3RSdW5BdE1zKSkgcmV0dXJuIGZhbHNlOwoJY29uc3QgY29uc2VjdXRpdmVFcnJvcnNS
YXcgPSBqb2Iuc3RhdGUuY29uc2VjdXRpdmVFcnJvcnM7CglyZXR1cm4gbm93TXMgPCBsYXN0UnVu
QXRNcyArIGVycm9yQmFja29mZk1zKHR5cGVvZiBjb25zZWN1dGl2ZUVycm9yc1JhdyA9PT0gIm51
bWJlciIgJiYgTnVtYmVyLmlzRmluaXRlKGNvbnNlY3V0aXZlRXJyb3JzUmF3KSA/IE1hdGgubWF4
KDEsIE1hdGguZmxvb3IoY29uc2VjdXRpdmVFcnJvcnNSYXcpKSA6IDEpOwp9CmZ1bmN0aW9uIGNv
bGxlY3RSdW5uYWJsZUpvYnMoc3RhdGUsIG5vd01zLCBvcHRzKSB7CglpZiAoIXN0YXRlLnN0b3Jl
KSByZXR1cm4gW107CglyZXR1cm4gc3RhdGUuc3RvcmUuam9icy5maWx0ZXIoKGpvYikgPT4gaXNS
dW5uYWJsZUpvYih7CgkJam9iLAoJCW5vd01zLAoJCXNraXBKb2JJZHM6IG9wdHM/LnNraXBKb2JJ
ZHMsCgkJc2tpcEF0SWZBbHJlYWR5UmFuOiBvcHRzPy5za2lwQXRJZkFscmVhZHlSYW4sCgkJYWxs
b3dDcm9uTWlzc2VkUnVuQnlMYXN0UnVuOiBvcHRzPy5hbGxvd0Nyb25NaXNzZWRSdW5CeUxhc3RS
dW4KCX0pKTsKfQphc3luYyBmdW5jdGlvbiBydW5NaXNzZWRKb2JzKHN0YXRlLCBvcHRzKSB7Cglj
b25zdCBwbGFuID0gYXdhaXQgcGxhblN0YXJ0dXBDYXRjaHVwKHN0YXRlLCBvcHRzKTsKCWlmIChw
bGFuLmNhbmRpZGF0ZXMubGVuZ3RoID09PSAwICYmIHBsYW4uZGVmZXJyZWRKb2JJZHMubGVuZ3Ro
ID09PSAwKSByZXR1cm47Cglhd2FpdCBhcHBseVN0YXJ0dXBDYXRjaHVwT3V0Y29tZXMoc3RhdGUs
IHBsYW4sIGF3YWl0IGV4ZWN1dGVTdGFydHVwQ2F0Y2h1cFBsYW4oc3RhdGUsIHBsYW4pKTsKfQph
c3luYyBmdW5jdGlvbiBwbGFuU3RhcnR1cENhdGNodXAoc3RhdGUsIG9wdHMpIHsKCWNvbnN0IG1h
eEltbWVkaWF0ZSA9IE1hdGgubWF4KDAsIHN0YXRlLmRlcHMubWF4TWlzc2VkSm9ic1BlclJlc3Rh
cnQgPz8gREVGQVVMVF9NQVhfTUlTU0VEX0pPQlNfUEVSX1JFU1RBUlQpOwoJcmV0dXJuIGxvY2tl
ZChzdGF0ZSwgYXN5bmMgKCkgPT4gewoJCWF3YWl0IGVuc3VyZUxvYWRlZChzdGF0ZSwgeyBza2lw
UmVjb21wdXRlOiB0cnVlIH0pOwoJCWlmICghc3RhdGUuc3RvcmUpIHJldHVybiB7CgkJCWNhbmRp
ZGF0ZXM6IFtdLAoJCQlkZWZlcnJlZEpvYklkczogW10KCQl9OwoJCWNvbnN0IG5vdyA9IHN0YXRl
LmRlcHMubm93TXMoKTsKCQljb25zdCBtaXNzZWQgPSBjb2xsZWN0UnVubmFibGVKb2JzKHN0YXRl
LCBub3csIHsKCQkJc2tpcEpvYklkczogb3B0cz8uc2tpcEpvYklkcywKCQkJc2tpcEF0SWZBbHJl
YWR5UmFuOiB0cnVlLAoJCQlhbGxvd0Nyb25NaXNzZWRSdW5CeUxhc3RSdW46IHRydWUKCQl9KTsK
CQlpZiAobWlzc2VkLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHsKCQkJY2FuZGlkYXRlczogW10sCgkJ
CWRlZmVycmVkSm9iSWRzOiBbXQoJCX07CgkJY29uc3Qgc29ydGVkID0gbWlzc2VkLnRvU29ydGVk
KChhLCBiKSA9PiAoYS5zdGF0ZS5uZXh0UnVuQXRNcyA/PyAwKSAtIChiLnN0YXRlLm5leHRSdW5B
dE1zID8/IDApKTsKCQljb25zdCBzdGFydHVwQ2FuZGlkYXRlcyA9IHNvcnRlZC5zbGljZSgwLCBt
YXhJbW1lZGlhdGUpOwoJCWNvbnN0IGRlZmVycmVkID0gc29ydGVkLnNsaWNlKG1heEltbWVkaWF0
ZSk7CgkJaWYgKGRlZmVycmVkLmxlbmd0aCA+IDApIHN0YXRlLmRlcHMubG9nLmluZm8oewoJCQlp
bW1lZGlhdGVDb3VudDogc3RhcnR1cENhbmRpZGF0ZXMubGVuZ3RoLAoJCQlkZWZlcnJlZENvdW50
OiBkZWZlcnJlZC5sZW5ndGgsCgkJCXRvdGFsTWlzc2VkOiBtaXNzZWQubGVuZ3RoCgkJfSwgImNy
b246IHN0YWdnZXJpbmcgbWlzc2VkIGpvYnMgdG8gcHJldmVudCBnYXRld2F5IG92ZXJsb2FkIik7
CgkJaWYgKHN0YXJ0dXBDYW5kaWRhdGVzLmxlbmd0aCA+IDApIHN0YXRlLmRlcHMubG9nLmluZm8o
ewoJCQljb3VudDogc3RhcnR1cENhbmRpZGF0ZXMubGVuZ3RoLAoJCQlqb2JJZHM6IHN0YXJ0dXBD
YW5kaWRhdGVzLm1hcCgoaikgPT4gai5pZCkKCQl9LCAiY3JvbjogcnVubmluZyBtaXNzZWQgam9i
cyBhZnRlciByZXN0YXJ0Iik7CgkJZm9yIChjb25zdCBqb2Igb2Ygc3RhcnR1cENhbmRpZGF0ZXMp
IHsKCQkJam9iLnN0YXRlLnJ1bm5pbmdBdE1zID0gbm93OwoJCQlqb2Iuc3RhdGUubGFzdEVycm9y
ID0gdm9pZCAwOwoJCX0KCQlhd2FpdCBwZXJzaXN0KHN0YXRlKTsKCQlyZXR1cm4gewoJCQljYW5k
aWRhdGVzOiBzdGFydHVwQ2FuZGlkYXRlcy5tYXAoKGpvYikgPT4gKHsKCQkJCWpvYklkOiBqb2Iu
aWQsCgkJCQlqb2IKCQkJfSkpLAoJCQlkZWZlcnJlZEpvYklkczogZGVmZXJyZWQubWFwKChqb2Ip
ID0+IGpvYi5pZCkKCQl9OwoJfSk7Cn0KYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZVN0YXJ0dXBDYXRj
aHVwUGxhbihzdGF0ZSwgcGxhbikgewoJY29uc3Qgb3V0Y29tZXMgPSBbXTsKCWZvciAoY29uc3Qg
Y2FuZGlkYXRlIG9mIHBsYW4uY2FuZGlkYXRlcykgb3V0Y29tZXMucHVzaChhd2FpdCBydW5TdGFy
dHVwQ2F0Y2h1cENhbmRpZGF0ZShzdGF0ZSwgY2FuZGlkYXRlKSk7CglyZXR1cm4gb3V0Y29tZXM7
Cn0KYXN5bmMgZnVuY3Rpb24gcnVuU3RhcnR1cENhdGNodXBDYW5kaWRhdGUoc3RhdGUsIGNhbmRp
ZGF0ZSkgewoJY29uc3Qgc3RhcnRlZEF0ID0gc3RhdGUuZGVwcy5ub3dNcygpOwoJZW1pdChzdGF0
ZSwgewoJCWpvYklkOiBjYW5kaWRhdGUuam9iLmlkLAoJCWFjdGlvbjogInN0YXJ0ZWQiLAoJCXJ1
bkF0TXM6IHN0YXJ0ZWRBdAoJfSk7Cgl0cnkgewoJCWNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWN1
dGVKb2JDb3JlV2l0aFRpbWVvdXQoc3RhdGUsIGNhbmRpZGF0ZS5qb2IpOwoJCXJldHVybiB7CgkJ
CWpvYklkOiBjYW5kaWRhdGUuam9iSWQsCgkJCXN0YXR1czogcmVzdWx0LnN0YXR1cywKCQkJZXJy
b3I6IHJlc3VsdC5lcnJvciwKCQkJc3VtbWFyeTogcmVzdWx0LnN1bW1hcnksCgkJCWRlbGl2ZXJl
ZDogcmVzdWx0LmRlbGl2ZXJlZCwKCQkJc2Vzc2lvbklkOiByZXN1bHQuc2Vzc2lvbklkLAoJCQlz
ZXNzaW9uS2V5OiByZXN1bHQuc2Vzc2lvbktleSwKCQkJbW9kZWw6IHJlc3VsdC5tb2RlbCwKCQkJ
cHJvdmlkZXI6IHJlc3VsdC5wcm92aWRlciwKCQkJdXNhZ2U6IHJlc3VsdC51c2FnZSwKCQkJc3Rh
cnRlZEF0LAoJCQllbmRlZEF0OiBzdGF0ZS5kZXBzLm5vd01zKCkKCQl9OwoJfSBjYXRjaCAoZXJy
KSB7CgkJcmV0dXJuIHsKCQkJam9iSWQ6IGNhbmRpZGF0ZS5qb2JJZCwKCQkJc3RhdHVzOiAiZXJy
b3IiLAoJCQllcnJvcjogU3RyaW5nKGVyciksCgkJCXN0YXJ0ZWRBdCwKCQkJZW5kZWRBdDogc3Rh
dGUuZGVwcy5ub3dNcygpCgkJfTsKCX0KfQphc3luYyBmdW5jdGlvbiBhcHBseVN0YXJ0dXBDYXRj
aHVwT3V0Y29tZXMoc3RhdGUsIHBsYW4sIG91dGNvbWVzKSB7Cgljb25zdCBzdGFnZ2VyTXMgPSBN
YXRoLm1heCgwLCBzdGF0ZS5kZXBzLm1pc3NlZEpvYlN0YWdnZXJNcyA/PyBERUZBVUxUX01JU1NF
RF9KT0JfU1RBR0dFUl9NUyk7Cglhd2FpdCBsb2NrZWQoc3RhdGUsIGFzeW5jICgpID0+IHsKCQlh
d2FpdCBlbnN1cmVMb2FkZWQoc3RhdGUsIHsKCQkJZm9yY2VSZWxvYWQ6IHRydWUsCgkJCXNraXBS
ZWNvbXB1dGU6IHRydWUKCQl9KTsKCQlpZiAoIXN0YXRlLnN0b3JlKSByZXR1cm47CgkJZm9yIChj
b25zdCByZXN1bHQgb2Ygb3V0Y29tZXMpIGFwcGx5T3V0Y29tZVRvU3RvcmVkSm9iKHN0YXRlLCBy
ZXN1bHQpOwoJCWlmIChwbGFuLmRlZmVycmVkSm9iSWRzLmxlbmd0aCA+IDApIHsKCQkJY29uc3Qg
YmFzZU5vdyA9IHN0YXRlLmRlcHMubm93TXMoKTsKCQkJbGV0IG9mZnNldCA9IHN0YWdnZXJNczsK
CQkJZm9yIChjb25zdCBqb2JJZCBvZiBwbGFuLmRlZmVycmVkSm9iSWRzKSB7CgkJCQljb25zdCBq
b2IgPSBzdGF0ZS5zdG9yZS5qb2JzLmZpbmQoKGVudHJ5KSA9PiBlbnRyeS5pZCA9PT0gam9iSWQp
OwoJCQkJaWYgKCFqb2IgfHwgIWpvYi5lbmFibGVkKSBjb250aW51ZTsKCQkJCWpvYi5zdGF0ZS5u
ZXh0UnVuQXRNcyA9IGJhc2VOb3cgKyBvZmZzZXQ7CgkJCQlvZmZzZXQgKz0gc3RhZ2dlck1zOwoJ
CQl9CgkJfQoJCXJlY29tcHV0ZU5leHRSdW5zRm9yTWFpbnRlbmFuY2Uoc3RhdGUpOwoJCWF3YWl0
IHBlcnNpc3Qoc3RhdGUpOwoJfSk7Cn0KYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUpvYkNvcmUoc3Rh
dGUsIGpvYiwgYWJvcnRTaWduYWwpIHsKCWNvbnN0IHJlc29sdmVBYm9ydEVycm9yID0gKCkgPT4g
KHsKCQlzdGF0dXM6ICJlcnJvciIsCgkJZXJyb3I6IHRpbWVvdXRFcnJvck1lc3NhZ2UoKQoJfSk7
Cgljb25zdCB3YWl0V2l0aEFib3J0ID0gYXN5bmMgKG1zKSA9PiB7CgkJaWYgKCFhYm9ydFNpZ25h
bCkgewoJCQlhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZl
LCBtcykpOwoJCQlyZXR1cm47CgkJfQoJCWlmIChhYm9ydFNpZ25hbC5hYm9ydGVkKSByZXR1cm47
CgkJYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKCQkJY29uc3QgdGltZXIgPSBzZXRU
aW1lb3V0KCgpID0+IHsKCQkJCWFib3J0U2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0
Iiwgb25BYm9ydCk7CgkJCQlyZXNvbHZlKCk7CgkJCX0sIG1zKTsKCQkJY29uc3Qgb25BYm9ydCA9
ICgpID0+IHsKCQkJCWNsZWFyVGltZW91dCh0aW1lcik7CgkJCQlhYm9ydFNpZ25hbC5yZW1vdmVF
dmVudExpc3RlbmVyKCJhYm9ydCIsIG9uQWJvcnQpOwoJCQkJcmVzb2x2ZSgpOwoJCQl9OwoJCQlh
Ym9ydFNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsIG9uQWJvcnQsIHsgb25jZTogdHJ1
ZSB9KTsKCQl9KTsKCX07CglpZiAoYWJvcnRTaWduYWw/LmFib3J0ZWQpIHJldHVybiByZXNvbHZl
QWJvcnRFcnJvcigpOwoJaWYgKGpvYi5zZXNzaW9uVGFyZ2V0ID09PSAibWFpbiIpIHsKCQljb25z
dCB0ZXh0ID0gcmVzb2x2ZUpvYlBheWxvYWRUZXh0Rm9yTWFpbihqb2IpOwoJCWlmICghdGV4dCkg
cmV0dXJuIHsKCQkJc3RhdHVzOiAic2tpcHBlZCIsCgkJCWVycm9yOiBqb2IucGF5bG9hZC5raW5k
ID09PSAic3lzdGVtRXZlbnQiID8gIm1haW4gam9iIHJlcXVpcmVzIG5vbi1lbXB0eSBzeXN0ZW1F
dmVudCB0ZXh0IiA6ICJtYWluIGpvYiByZXF1aXJlcyBwYXlsb2FkLmtpbmQ9XCJzeXN0ZW1FdmVu
dFwiIgoJCX07CgkJY29uc3QgdGFyZ2V0TWFpblNlc3Npb25LZXkgPSBqb2Iuc2Vzc2lvbktleTsK
CQlzdGF0ZS5kZXBzLmVucXVldWVTeXN0ZW1FdmVudCh0ZXh0LCB7CgkJCWFnZW50SWQ6IGpvYi5h
Z2VudElkLAoJCQlzZXNzaW9uS2V5OiB0YXJnZXRNYWluU2Vzc2lvbktleSwKCQkJY29udGV4dEtl
eTogYGNyb246JHtqb2IuaWR9YAoJCX0pOwoJCWlmIChqb2Iud2FrZU1vZGUgPT09ICJub3ciICYm
IHN0YXRlLmRlcHMucnVuSGVhcnRiZWF0T25jZSkgewoJCQljb25zdCByZWFzb24gPSBgY3Jvbjok
e2pvYi5pZH1gOwoJCQljb25zdCBtYXhXYWl0TXMgPSBzdGF0ZS5kZXBzLndha2VOb3dIZWFydGJl
YXRCdXN5TWF4V2FpdE1zID8/IDIgKiA2ZTQ7CgkJCWNvbnN0IHJldHJ5RGVsYXlNcyA9IHN0YXRl
LmRlcHMud2FrZU5vd0hlYXJ0YmVhdEJ1c3lSZXRyeURlbGF5TXMgPz8gMjUwOwoJCQljb25zdCB3
YWl0U3RhcnRlZEF0ID0gc3RhdGUuZGVwcy5ub3dNcygpOwoJCQlsZXQgaGVhcnRiZWF0UmVzdWx0
OwoJCQlmb3IgKDs7KSB7CgkJCQlpZiAoYWJvcnRTaWduYWw/LmFib3J0ZWQpIHJldHVybiByZXNv
bHZlQWJvcnRFcnJvcigpOwoJCQkJaGVhcnRiZWF0UmVzdWx0ID0gYXdhaXQgc3RhdGUuZGVwcy5y
dW5IZWFydGJlYXRPbmNlKHsKCQkJCQlyZWFzb24sCgkJCQkJYWdlbnRJZDogam9iLmFnZW50SWQs
CgkJCQkJc2Vzc2lvbktleTogdGFyZ2V0TWFpblNlc3Npb25LZXksCgkJCQkJaGVhcnRiZWF0OiB7
IHRhcmdldDogImxhc3QiIH0KCQkJCX0pOwoJCQkJaWYgKGhlYXJ0YmVhdFJlc3VsdC5zdGF0dXMg
IT09ICJza2lwcGVkIiB8fCBoZWFydGJlYXRSZXN1bHQucmVhc29uICE9PSAicmVxdWVzdHMtaW4t
ZmxpZ2h0IikgYnJlYWs7CgkJCQlpZiAoYWJvcnRTaWduYWw/LmFib3J0ZWQpIHJldHVybiByZXNv
bHZlQWJvcnRFcnJvcigpOwoJCQkJaWYgKHN0YXRlLmRlcHMubm93TXMoKSAtIHdhaXRTdGFydGVk
QXQgPiBtYXhXYWl0TXMpIHsKCQkJCQlpZiAoYWJvcnRTaWduYWw/LmFib3J0ZWQpIHJldHVybiBy
ZXNvbHZlQWJvcnRFcnJvcigpOwoJCQkJCXN0YXRlLmRlcHMucmVxdWVzdEhlYXJ0YmVhdE5vdyh7
CgkJCQkJCXJlYXNvbiwKCQkJCQkJYWdlbnRJZDogam9iLmFnZW50SWQsCgkJCQkJCXNlc3Npb25L
ZXk6IHRhcmdldE1haW5TZXNzaW9uS2V5CgkJCQkJfSk7CgkJCQkJcmV0dXJuIHsKCQkJCQkJc3Rh
dHVzOiAib2siLAoJCQkJCQlzdW1tYXJ5OiB0ZXh0CgkJCQkJfTsKCQkJCX0KCQkJCWF3YWl0IHdh
aXRXaXRoQWJvcnQocmV0cnlEZWxheU1zKTsKCQkJfQoJCQlpZiAoaGVhcnRiZWF0UmVzdWx0LnN0
YXR1cyA9PT0gInJhbiIpIHJldHVybiB7CgkJCQlzdGF0dXM6ICJvayIsCgkJCQlzdW1tYXJ5OiB0
ZXh0CgkJCX07CgkJCWVsc2UgaWYgKGhlYXJ0YmVhdFJlc3VsdC5zdGF0dXMgPT09ICJza2lwcGVk
IikgcmV0dXJuIHsKCQkJCXN0YXR1czogInNraXBwZWQiLAoJCQkJZXJyb3I6IGhlYXJ0YmVhdFJl
c3VsdC5yZWFzb24sCgkJCQlzdW1tYXJ5OiB0ZXh0CgkJCX07CgkJCWVsc2UgcmV0dXJuIHsKCQkJ
CXN0YXR1czogImVycm9yIiwKCQkJCWVycm9yOiBoZWFydGJlYXRSZXN1bHQucmVhc29uLAoJCQkJ
c3VtbWFyeTogdGV4dAoJCQl9OwoJCX0gZWxzZSB7CgkJCWlmIChhYm9ydFNpZ25hbD8uYWJvcnRl
ZCkgcmV0dXJuIHJlc29sdmVBYm9ydEVycm9yKCk7CgkJCXN0YXRlLmRlcHMucmVxdWVzdEhlYXJ0
YmVhdE5vdyh7CgkJCQlyZWFzb246IGBjcm9uOiR7am9iLmlkfWAsCgkJCQlhZ2VudElkOiBqb2Iu
YWdlbnRJZCwKCQkJCXNlc3Npb25LZXk6IHRhcmdldE1haW5TZXNzaW9uS2V5CgkJCX0pOwoJCQly
ZXR1cm4gewoJCQkJc3RhdHVzOiAib2siLAoJCQkJc3VtbWFyeTogdGV4dAoJCQl9OwoJCX0KCX0K
CWlmIChqb2IucGF5bG9hZC5raW5kICE9PSAiYWdlbnRUdXJuIikgcmV0dXJuIHsKCQlzdGF0dXM6
ICJza2lwcGVkIiwKCQllcnJvcjogImlzb2xhdGVkIGpvYiByZXF1aXJlcyBwYXlsb2FkLmtpbmQ9
YWdlbnRUdXJuIgoJfTsKCWlmIChhYm9ydFNpZ25hbD8uYWJvcnRlZCkgcmV0dXJuIHJlc29sdmVB
Ym9ydEVycm9yKCk7Cgljb25zdCByZXMgPSBhd2FpdCBzdGF0ZS5kZXBzLnJ1bklzb2xhdGVkQWdl
bnRKb2IoewoJCWpvYiwKCQltZXNzYWdlOiBqb2IucGF5bG9hZC5tZXNzYWdlLAoJCWFib3J0U2ln
bmFsCgl9KTsKCWlmIChhYm9ydFNpZ25hbD8uYWJvcnRlZCkgcmV0dXJuIHsKCQlzdGF0dXM6ICJl
cnJvciIsCgkJZXJyb3I6IHRpbWVvdXRFcnJvck1lc3NhZ2UoKQoJfTsKCXJldHVybiB7CgkJc3Rh
dHVzOiByZXMuc3RhdHVzLAoJCWVycm9yOiByZXMuZXJyb3IsCgkJc3VtbWFyeTogcmVzLnN1bW1h
cnksCgkJZGVsaXZlcmVkOiByZXMuZGVsaXZlcmVkLAoJCWRlbGl2ZXJ5QXR0ZW1wdGVkOiByZXMu
ZGVsaXZlcnlBdHRlbXB0ZWQsCgkJc2Vzc2lvbklkOiByZXMuc2Vzc2lvbklkLAoJCXNlc3Npb25L
ZXk6IHJlcy5zZXNzaW9uS2V5LAoJCW1vZGVsOiByZXMubW9kZWwsCgkJcHJvdmlkZXI6IHJlcy5w
cm92aWRlciwKCQl1c2FnZTogcmVzLnVzYWdlCgl9Owp9CmZ1bmN0aW9uIGVtaXRKb2JGaW5pc2hl
ZChzdGF0ZSwgam9iLCByZXN1bHQsIHJ1bkF0TXMpIHsKCWVtaXQoc3RhdGUsIHsKCQlqb2JJZDog
am9iLmlkLAoJCWFjdGlvbjogImZpbmlzaGVkIiwKCQlzdGF0dXM6IHJlc3VsdC5zdGF0dXMsCgkJ
ZXJyb3I6IHJlc3VsdC5lcnJvciwKCQlzdW1tYXJ5OiByZXN1bHQuc3VtbWFyeSwKCQlkZWxpdmVy
ZWQ6IHJlc3VsdC5kZWxpdmVyZWQsCgkJZGVsaXZlcnlTdGF0dXM6IGpvYi5zdGF0ZS5sYXN0RGVs
aXZlcnlTdGF0dXMsCgkJZGVsaXZlcnlFcnJvcjogam9iLnN0YXRlLmxhc3REZWxpdmVyeUVycm9y
LAoJCXNlc3Npb25JZDogcmVzdWx0LnNlc3Npb25JZCwKCQlzZXNzaW9uS2V5OiByZXN1bHQuc2Vz
c2lvbktleSwKCQlydW5BdE1zLAoJCWR1cmF0aW9uTXM6IGpvYi5zdGF0ZS5sYXN0RHVyYXRpb25N
cywKCQluZXh0UnVuQXRNczogam9iLnN0YXRlLm5leHRSdW5BdE1zLAoJCW1vZGVsOiByZXN1bHQu
bW9kZWwsCgkJcHJvdmlkZXI6IHJlc3VsdC5wcm92aWRlciwKCQl1c2FnZTogcmVzdWx0LnVzYWdl
Cgl9KTsKfQpmdW5jdGlvbiB3YWtlKHN0YXRlLCBvcHRzKSB7Cgljb25zdCB0ZXh0ID0gb3B0cy50
ZXh0LnRyaW0oKTsKCWlmICghdGV4dCkgcmV0dXJuIHsgb2s6IGZhbHNlIH07CglzdGF0ZS5kZXBz
LmVucXVldWVTeXN0ZW1FdmVudCh0ZXh0KTsKCWlmIChvcHRzLm1vZGUgPT09ICJub3ciKSBzdGF0
ZS5kZXBzLnJlcXVlc3RIZWFydGJlYXROb3coeyByZWFzb246ICJ3YWtlIiB9KTsKCXJldHVybiB7
IG9rOiB0cnVlIH07Cn0KZnVuY3Rpb24gc3RvcFRpbWVyKHN0YXRlKSB7CglpZiAoc3RhdGUudGlt
ZXIpIGNsZWFyVGltZW91dChzdGF0ZS50aW1lcik7CglzdGF0ZS50aW1lciA9IG51bGw7Cn0KZnVu
Y3Rpb24gZW1pdChzdGF0ZSwgZXZ0KSB7Cgl0cnkgewoJCXN0YXRlLmRlcHMub25FdmVudD8uKGV2
dCk7Cgl9IGNhdGNoIHt9Cn0KLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvY3Jvbi9zZXJ2aWNl
L29wcy50cwpmdW5jdGlvbiBtZXJnZU1hbnVhbFJ1blNuYXBzaG90QWZ0ZXJSZWxvYWQocGFyYW1z
KSB7CglpZiAoIXBhcmFtcy5zdGF0ZS5zdG9yZSkgcmV0dXJuOwoJaWYgKHBhcmFtcy5yZW1vdmVk
KSB7CgkJcGFyYW1zLnN0YXRlLnN0b3JlLmpvYnMgPSBwYXJhbXMuc3RhdGUuc3RvcmUuam9icy5m
aWx0ZXIoKGpvYikgPT4gam9iLmlkICE9PSBwYXJhbXMuam9iSWQpOwoJCXJldHVybjsKCX0KCWlm
ICghcGFyYW1zLnNuYXBzaG90KSByZXR1cm47Cgljb25zdCByZWxvYWRlZCA9IHBhcmFtcy5zdGF0
ZS5zdG9yZS5qb2JzLmZpbmQoKGpvYikgPT4gam9iLmlkID09PSBwYXJhbXMuam9iSWQpOwoJaWYg
KCFyZWxvYWRlZCkgcmV0dXJuOwoJcmVsb2FkZWQuZW5hYmxlZCA9IHBhcmFtcy5zbmFwc2hvdC5l
bmFibGVkOwoJcmVsb2FkZWQudXBkYXRlZEF0TXMgPSBwYXJhbXMuc25hcHNob3QudXBkYXRlZEF0
TXM7CglyZWxvYWRlZC5zdGF0ZSA9IHBhcmFtcy5zbmFwc2hvdC5zdGF0ZTsKfQphc3luYyBmdW5j
dGlvbiBlbnN1cmVMb2FkZWRGb3JSZWFkKHN0YXRlKSB7Cglhd2FpdCBlbnN1cmVMb2FkZWQoc3Rh
dGUsIHsgc2tpcFJlY29tcHV0ZTogdHJ1ZSB9KTsKCWlmICghc3RhdGUuc3RvcmUpIHJldHVybjsK
CWlmIChyZWNvbXB1dGVOZXh0UnVuc0Zvck1haW50ZW5hbmNlKHN0YXRlKSkgYXdhaXQgcGVyc2lz
dChzdGF0ZSk7Cn0KYXN5bmMgZnVuY3Rpb24gc3RhcnQoc3RhdGUpIHsKCWlmICghc3RhdGUuZGVw
cy5jcm9uRW5hYmxlZCkgewoJCXN0YXRlLmRlcHMubG9nLmluZm8oeyBlbmFibGVkOiBmYWxzZSB9
LCAiY3JvbjogZGlzYWJsZWQiKTsKCQlyZXR1cm47Cgl9Cgljb25zdCBzdGFydHVwSW50ZXJydXB0
ZWRKb2JJZHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwoJYXdhaXQgbG9ja2VkKHN0YXRl
LCBhc3luYyAoKSA9PiB7CgkJYXdhaXQgZW5zdXJlTG9hZGVkKHN0YXRlLCB7IHNraXBSZWNvbXB1
dGU6IHRydWUgfSk7CgkJY29uc3Qgam9icyA9IHN0YXRlLnN0b3JlPy5qb2JzID8/IFtdOwoJCWZv
ciAoY29uc3Qgam9iIG9mIGpvYnMpIGlmICh0eXBlb2Ygam9iLnN0YXRlLnJ1bm5pbmdBdE1zID09
PSAibnVtYmVyIikgewoJCQlzdGF0ZS5kZXBzLmxvZy53YXJuKHsKCQkJCWpvYklkOiBqb2IuaWQs
CgkJCQlydW5uaW5nQXRNczogam9iLnN0YXRlLnJ1bm5pbmdBdE1zCgkJCX0sICJjcm9uOiBjbGVh
cmluZyBzdGFsZSBydW5uaW5nIG1hcmtlciBvbiBzdGFydHVwIik7CgkJCWpvYi5zdGF0ZS5ydW5u
aW5nQXRNcyA9IHZvaWQgMDsKCQkJc3RhcnR1cEludGVycnVwdGVkSm9iSWRzLmFkZChqb2IuaWQp
OwoJCX0KCQlhd2FpdCBwZXJzaXN0KHN0YXRlKTsKCX0pOwoJYXdhaXQgcnVuTWlzc2VkSm9icyhz
dGF0ZSwgeyBza2lwSm9iSWRzOiBzdGFydHVwSW50ZXJydXB0ZWRKb2JJZHMgfSk7Cglhd2FpdCBs
b2NrZWQoc3RhdGUsIGFzeW5jICgpID0+IHsKCQlhd2FpdCBlbnN1cmVMb2FkZWQoc3RhdGUsIHsK
CQkJZm9yY2VSZWxvYWQ6IHRydWUsCgkJCXNraXBSZWNvbXB1dGU6IHRydWUKCQl9KTsKCQlyZWNv
bXB1dGVOZXh0UnVucyhzdGF0ZSk7CgkJYXdhaXQgcGVyc2lzdChzdGF0ZSk7CgkJYXJtVGltZXIo
c3RhdGUpOwoJCXN0YXRlLmRlcHMubG9nLmluZm8oewoJCQllbmFibGVkOiB0cnVlLAoJCQlqb2Jz
OiBzdGF0ZS5zdG9yZT8uam9icy5sZW5ndGggPz8gMCwKCQkJbmV4dFdha2VBdE1zOiBuZXh0V2Fr
ZUF0TXMoc3RhdGUpID8/IG51bGwKCQl9LCAiY3Jvbjogc3RhcnRlZCIpOwoJfSk7Cn0KZnVuY3Rp
b24gc3RvcChzdGF0ZSkgewoJc3RvcFRpbWVyKHN0YXRlKTsKfQphc3luYyBmdW5jdGlvbiBzdGF0
dXMoc3RhdGUpIHsKCXJldHVybiBhd2FpdCBsb2NrZWQoc3RhdGUsIGFzeW5jICgpID0+IHsKCQlh
d2FpdCBlbnN1cmVMb2FkZWRGb3JSZWFkKHN0YXRlKTsKCQlyZXR1cm4gewoJCQllbmFibGVkOiBz
dGF0ZS5kZXBzLmNyb25FbmFibGVkLAoJCQlzdG9yZVBhdGg6IHN0YXRlLmRlcHMuc3RvcmVQYXRo
LAoJCQlqb2JzOiBzdGF0ZS5zdG9yZT8uam9icy5sZW5ndGggPz8gMCwKCQkJbmV4dFdha2VBdE1z
OiBzdGF0ZS5kZXBzLmNyb25FbmFibGVkID8gbmV4dFdha2VBdE1zKHN0YXRlKSA/PyBudWxsIDog
bnVsbAoJCX07Cgl9KTsKfQphc3luYyBmdW5jdGlvbiBsaXN0KHN0YXRlLCBvcHRzKSB7CglyZXR1
cm4gYXdhaXQgbG9ja2VkKHN0YXRlLCBhc3luYyAoKSA9PiB7CgkJYXdhaXQgZW5zdXJlTG9hZGVk
Rm9yUmVhZChzdGF0ZSk7CgkJY29uc3QgaW5jbHVkZURpc2FibGVkID0gb3B0cz8uaW5jbHVkZURp
c2FibGVkID09PSB0cnVlOwoJCXJldHVybiAoc3RhdGUuc3RvcmU/LmpvYnMgPz8gW10pLmZpbHRl
cigoaikgPT4gaW5jbHVkZURpc2FibGVkIHx8IGouZW5hYmxlZCkudG9Tb3J0ZWQoKGEsIGIpID0+
IChhLnN0YXRlLm5leHRSdW5BdE1zID8/IDApIC0gKGIuc3RhdGUubmV4dFJ1bkF0TXMgPz8gMCkp
OwoJfSk7Cn0KZnVuY3Rpb24gcmVzb2x2ZUVuYWJsZWRGaWx0ZXIob3B0cykgewoJaWYgKG9wdHM/
LmVuYWJsZWQgPT09ICJhbGwiIHx8IG9wdHM/LmVuYWJsZWQgPT09ICJlbmFibGVkIiB8fCBvcHRz
Py5lbmFibGVkID09PSAiZGlzYWJsZWQiKSByZXR1cm4gb3B0cy5lbmFibGVkOwoJcmV0dXJuIG9w
dHM/LmluY2x1ZGVEaXNhYmxlZCA/ICJhbGwiIDogImVuYWJsZWQiOwp9CmZ1bmN0aW9uIHNvcnRK
b2JzKGpvYnMsIHNvcnRCeSwgc29ydERpcikgewoJY29uc3QgZGlyID0gc29ydERpciA9PT0gImRl
c2MiID8gLTEgOiAxOwoJcmV0dXJuIGpvYnMudG9Tb3J0ZWQoKGEsIGIpID0+IHsKCQlsZXQgY21w
ID0gMDsKCQlpZiAoc29ydEJ5ID09PSAibmFtZSIpIHsKCQkJY29uc3QgYU5hbWUgPSB0eXBlb2Yg
YS5uYW1lID09PSAic3RyaW5nIiA/IGEubmFtZSA6ICIiOwoJCQljb25zdCBiTmFtZSA9IHR5cGVv
ZiBiLm5hbWUgPT09ICJzdHJpbmciID8gYi5uYW1lIDogIiI7CgkJCWNtcCA9IGFOYW1lLmxvY2Fs
ZUNvbXBhcmUoYk5hbWUsIHZvaWQgMCwgeyBzZW5zaXRpdml0eTogImJhc2UiIH0pOwoJCX0gZWxz
ZSBpZiAoc29ydEJ5ID09PSAidXBkYXRlZEF0TXMiKSBjbXAgPSBhLnVwZGF0ZWRBdE1zIC0gYi51
cGRhdGVkQXRNczsKCQllbHNlIHsKCQkJY29uc3QgYU5leHQgPSBhLnN0YXRlLm5leHRSdW5BdE1z
OwoJCQljb25zdCBiTmV4dCA9IGIuc3RhdGUubmV4dFJ1bkF0TXM7CgkJCWlmICh0eXBlb2YgYU5l
eHQgPT09ICJudW1iZXIiICYmIHR5cGVvZiBiTmV4dCA9PT0gIm51bWJlciIpIGNtcCA9IGFOZXh0
IC0gYk5leHQ7CgkJCWVsc2UgaWYgKHR5cGVvZiBhTmV4dCA9PT0gIm51bWJlciIpIGNtcCA9IC0x
OwoJCQllbHNlIGlmICh0eXBlb2YgYk5leHQgPT09ICJudW1iZXIiKSBjbXAgPSAxOwoJCQllbHNl
IGNtcCA9IDA7CgkJfQoJCWlmIChjbXAgIT09IDApIHJldHVybiBjbXAgKiBkaXI7CgkJY29uc3Qg
YUlkID0gdHlwZW9mIGEuaWQgPT09ICJzdHJpbmciID8gYS5pZCA6ICIiOwoJCWNvbnN0IGJJZCA9
IHR5cGVvZiBiLmlkID09PSAic3RyaW5nIiA/IGIuaWQgOiAiIjsKCQlyZXR1cm4gYUlkLmxvY2Fs
ZUNvbXBhcmUoYklkKTsKCX0pOwp9CmFzeW5jIGZ1bmN0aW9uIGxpc3RQYWdlKHN0YXRlLCBvcHRz
KSB7CglyZXR1cm4gYXdhaXQgbG9ja2VkKHN0YXRlLCBhc3luYyAoKSA9PiB7CgkJYXdhaXQgZW5z
dXJlTG9hZGVkRm9yUmVhZChzdGF0ZSk7CgkJY29uc3QgcXVlcnkgPSBvcHRzPy5xdWVyeT8udHJp
bSgpLnRvTG93ZXJDYXNlKCkgPz8gIiI7CgkJY29uc3QgZW5hYmxlZEZpbHRlciA9IHJlc29sdmVF
bmFibGVkRmlsdGVyKG9wdHMpOwoJCWNvbnN0IHNvcnRCeSA9IG9wdHM/LnNvcnRCeSA/PyAibmV4
dFJ1bkF0TXMiOwoJCWNvbnN0IHNvcnREaXIgPSBvcHRzPy5zb3J0RGlyID8/ICJhc2MiOwoJCWNv
bnN0IHNvcnRlZCA9IHNvcnRKb2JzKChzdGF0ZS5zdG9yZT8uam9icyA/PyBbXSkuZmlsdGVyKChq
b2IpID0+IHsKCQkJaWYgKGVuYWJsZWRGaWx0ZXIgPT09ICJlbmFibGVkIiAmJiAham9iLmVuYWJs
ZWQpIHJldHVybiBmYWxzZTsKCQkJaWYgKGVuYWJsZWRGaWx0ZXIgPT09ICJkaXNhYmxlZCIgJiYg
am9iLmVuYWJsZWQpIHJldHVybiBmYWxzZTsKCQkJaWYgKCFxdWVyeSkgcmV0dXJuIHRydWU7CgkJ
CXJldHVybiBbCgkJCQlqb2IubmFtZSwKCQkJCWpvYi5kZXNjcmlwdGlvbiA/PyAiIiwKCQkJCWpv
Yi5hZ2VudElkID8/ICIiCgkJCV0uam9pbigiICIpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVl
cnkpOwoJCX0pLCBzb3J0QnksIHNvcnREaXIpOwoJCWNvbnN0IHRvdGFsID0gc29ydGVkLmxlbmd0
aDsKCQljb25zdCBvZmZzZXQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbih0b3RhbCwgTWF0aC5mbG9v
cihvcHRzPy5vZmZzZXQgPz8gMCkpKTsKCQljb25zdCBkZWZhdWx0TGltaXQgPSB0b3RhbCA9PT0g
MCA/IDUwIDogdG90YWw7CgkJY29uc3QgbGltaXQgPSBNYXRoLm1heCgxLCBNYXRoLm1pbigyMDAs
IE1hdGguZmxvb3Iob3B0cz8ubGltaXQgPz8gZGVmYXVsdExpbWl0KSkpOwoJCWNvbnN0IGpvYnMg
PSBzb3J0ZWQuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBsaW1pdCk7CgkJY29uc3QgbmV4dE9mZnNl
dCA9IG9mZnNldCArIGpvYnMubGVuZ3RoOwoJCXJldHVybiB7CgkJCWpvYnMsCgkJCXRvdGFsLAoJ
CQlvZmZzZXQsCgkJCWxpbWl0LAoJCQloYXNNb3JlOiBuZXh0T2Zmc2V0IDwgdG90YWwsCgkJCW5l
eHRPZmZzZXQ6IG5leHRPZmZzZXQgPCB0b3RhbCA/IG5leHRPZmZzZXQgOiBudWxsCgkJfTsKCX0p
Owp9CmFzeW5jIGZ1bmN0aW9uIGFkZChzdGF0ZSwgaW5wdXQpIHsKCXJldHVybiBhd2FpdCBsb2Nr
ZWQoc3RhdGUsIGFzeW5jICgpID0+IHsKCQl3YXJuSWZEaXNhYmxlZChzdGF0ZSwgImFkZCIpOwoJ
CWF3YWl0IGVuc3VyZUxvYWRlZChzdGF0ZSk7CgkJY29uc3Qgam9iID0gY3JlYXRlSm9iKHN0YXRl
LCBub3JtYWxpemVDcm9uQ3JlYXRlRGVsaXZlcnlJbnB1dChpbnB1dCkpOwoJCXN0YXRlLnN0b3Jl
Py5qb2JzLnB1c2goam9iKTsKCQlyZWNvbXB1dGVOZXh0UnVucyhzdGF0ZSk7CgkJYXdhaXQgcGVy
c2lzdChzdGF0ZSk7CgkJYXJtVGltZXIoc3RhdGUpOwoJCXN0YXRlLmRlcHMubG9nLmluZm8oewoJ
CQlqb2JJZDogam9iLmlkLAoJCQlqb2JOYW1lOiBqb2IubmFtZSwKCQkJbmV4dFJ1bkF0TXM6IGpv
Yi5zdGF0ZS5uZXh0UnVuQXRNcywKCQkJc2NoZWR1bGVyTmV4dFdha2VBdE1zOiBuZXh0V2FrZUF0
TXMoc3RhdGUpID8/IG51bGwsCgkJCXRpbWVyQXJtZWQ6IHN0YXRlLnRpbWVyICE9PSBudWxsLAoJ
CQljcm9uRW5hYmxlZDogc3RhdGUuZGVwcy5jcm9uRW5hYmxlZAoJCX0sICJjcm9uOiBqb2IgYWRk
ZWQiKTsKCQllbWl0KHN0YXRlLCB7CgkJCWpvYklkOiBqb2IuaWQsCgkJCWFjdGlvbjogImFkZGVk
IiwKCQkJbmV4dFJ1bkF0TXM6IGpvYi5zdGF0ZS5uZXh0UnVuQXRNcwoJCX0pOwoJCXJldHVybiBq
b2I7Cgl9KTsKfQphc3luYyBmdW5jdGlvbiB1cGRhdGUoc3RhdGUsIGlkLCBwYXRjaCkgewoJcmV0
dXJuIGF3YWl0IGxvY2tlZChzdGF0ZSwgYXN5bmMgKCkgPT4gewoJCXdhcm5JZkRpc2FibGVkKHN0
YXRlLCAidXBkYXRlIik7CgkJYXdhaXQgZW5zdXJlTG9hZGVkKHN0YXRlLCB7IHNraXBSZWNvbXB1
dGU6IHRydWUgfSk7CgkJY29uc3Qgam9iID0gZmluZEpvYk9yVGhyb3coc3RhdGUsIGlkKTsKCQlj
b25zdCBub3cgPSBzdGF0ZS5kZXBzLm5vd01zKCk7CgkJYXBwbHlKb2JQYXRjaChqb2IsIHBhdGNo
LCB7IGRlZmF1bHRBZ2VudElkOiBzdGF0ZS5kZXBzLmRlZmF1bHRBZ2VudElkIH0pOwoJCWlmIChq
b2Iuc2NoZWR1bGUua2luZCA9PT0gImV2ZXJ5IikgewoJCQljb25zdCBhbmNob3IgPSBqb2Iuc2No
ZWR1bGUuYW5jaG9yTXM7CgkJCWlmICh0eXBlb2YgYW5jaG9yICE9PSAibnVtYmVyIiB8fCAhTnVt
YmVyLmlzRmluaXRlKGFuY2hvcikpIHsKCQkJCWNvbnN0IGZhbGxiYWNrQW5jaG9yTXMgPSBwYXRj
aC5zY2hlZHVsZT8ua2luZCA9PT0gImV2ZXJ5IiA/IG5vdyA6IHR5cGVvZiBqb2IuY3JlYXRlZEF0
TXMgPT09ICJudW1iZXIiICYmIE51bWJlci5pc0Zpbml0ZShqb2IuY3JlYXRlZEF0TXMpID8gam9i
LmNyZWF0ZWRBdE1zIDogbm93OwoJCQkJam9iLnNjaGVkdWxlID0gewoJCQkJCS4uLmpvYi5zY2hl
ZHVsZSwKCQkJCQlhbmNob3JNczogTWF0aC5tYXgoMCwgTWF0aC5mbG9vcihmYWxsYmFja0FuY2hv
ck1zKSkKCQkJCX07CgkJCX0KCQl9CgkJY29uc3Qgc2NoZWR1bGVDaGFuZ2VkID0gcGF0Y2guc2No
ZWR1bGUgIT09IHZvaWQgMDsKCQljb25zdCBlbmFibGVkQ2hhbmdlZCA9IHBhdGNoLmVuYWJsZWQg
IT09IHZvaWQgMDsKCQlqb2IudXBkYXRlZEF0TXMgPSBub3c7CgkJaWYgKHNjaGVkdWxlQ2hhbmdl
ZCB8fCBlbmFibGVkQ2hhbmdlZCkgaWYgKGpvYi5lbmFibGVkKSBqb2Iuc3RhdGUubmV4dFJ1bkF0
TXMgPSBjb21wdXRlSm9iTmV4dFJ1bkF0TXMoam9iLCBub3cpOwoJCWVsc2UgewoJCQlqb2Iuc3Rh
dGUubmV4dFJ1bkF0TXMgPSB2b2lkIDA7CgkJCWpvYi5zdGF0ZS5ydW5uaW5nQXRNcyA9IHZvaWQg
MDsKCQl9CgkJZWxzZSBpZiAoam9iLmVuYWJsZWQpIHsKCQkJY29uc3QgbmV4dFJ1biA9IGpvYi5z
dGF0ZS5uZXh0UnVuQXRNczsKCQkJaWYgKHR5cGVvZiBuZXh0UnVuICE9PSAibnVtYmVyIiB8fCAh
TnVtYmVyLmlzRmluaXRlKG5leHRSdW4pKSBqb2Iuc3RhdGUubmV4dFJ1bkF0TXMgPSBjb21wdXRl
Sm9iTmV4dFJ1bkF0TXMoam9iLCBub3cpOwoJCX0KCQlhd2FpdCBwZXJzaXN0KHN0YXRlKTsKCQlh
cm1UaW1lcihzdGF0ZSk7CgkJZW1pdChzdGF0ZSwgewoJCQlqb2JJZDogaWQsCgkJCWFjdGlvbjog
InVwZGF0ZWQiLAoJCQluZXh0UnVuQXRNczogam9iLnN0YXRlLm5leHRSdW5BdE1zCgkJfSk7CgkJ
cmV0dXJuIGpvYjsKCX0pOwp9CmFzeW5jIGZ1bmN0aW9uIHJlbW92ZShzdGF0ZSwgaWQpIHsKCXJl
dHVybiBhd2FpdCBsb2NrZWQoc3RhdGUsIGFzeW5jICgpID0+IHsKCQl3YXJuSWZEaXNhYmxlZChz
dGF0ZSwgInJlbW92ZSIpOwoJCWF3YWl0IGVuc3VyZUxvYWRlZChzdGF0ZSk7CgkJY29uc3QgYmVm
b3JlID0gc3RhdGUuc3RvcmU/LmpvYnMubGVuZ3RoID8/IDA7CgkJaWYgKCFzdGF0ZS5zdG9yZSkg
cmV0dXJuIHsKCQkJb2s6IGZhbHNlLAoJCQlyZW1vdmVkOiBmYWxzZQoJCX07CgkJc3RhdGUuc3Rv
cmUuam9icyA9IHN0YXRlLnN0b3JlLmpvYnMuZmlsdGVyKChqKSA9PiBqLmlkICE9PSBpZCk7CgkJ
Y29uc3QgcmVtb3ZlZCA9IChzdGF0ZS5zdG9yZS5qb2JzLmxlbmd0aCA/PyAwKSAhPT0gYmVmb3Jl
OwoJCWF3YWl0IHBlcnNpc3Qoc3RhdGUpOwoJCWFybVRpbWVyKHN0YXRlKTsKCQlpZiAocmVtb3Zl
ZCkgZW1pdChzdGF0ZSwgewoJCQlqb2JJZDogaWQsCgkJCWFjdGlvbjogInJlbW92ZWQiCgkJfSk7
CgkJcmV0dXJuIHsKCQkJb2s6IHRydWUsCgkJCXJlbW92ZWQKCQl9OwoJfSk7Cn0KbGV0IG5leHRN
YW51YWxSdW5JZCA9IDE7CmFzeW5jIGZ1bmN0aW9uIGluc3BlY3RNYW51YWxSdW5QcmVmbGlnaHQo
c3RhdGUsIGlkLCBtb2RlKSB7CglyZXR1cm4gYXdhaXQgbG9ja2VkKHN0YXRlLCBhc3luYyAoKSA9
PiB7CgkJd2FybklmRGlzYWJsZWQoc3RhdGUsICJydW4iKTsKCQlhd2FpdCBlbnN1cmVMb2FkZWQo
c3RhdGUsIHsgc2tpcFJlY29tcHV0ZTogdHJ1ZSB9KTsKCQlyZWNvbXB1dGVOZXh0UnVuc0Zvck1h
aW50ZW5hbmNlKHN0YXRlKTsKCQljb25zdCBqb2IgPSBmaW5kSm9iT3JUaHJvdyhzdGF0ZSwgaWQp
OwoJCWlmICh0eXBlb2Ygam9iLnN0YXRlLnJ1bm5pbmdBdE1zID09PSAibnVtYmVyIikgcmV0dXJu
IHsKCQkJb2s6IHRydWUsCgkJCXJhbjogZmFsc2UsCgkJCXJlYXNvbjogImFscmVhZHktcnVubmlu
ZyIKCQl9OwoJCWNvbnN0IG5vdyA9IHN0YXRlLmRlcHMubm93TXMoKTsKCQlpZiAoIWlzSm9iRHVl
KGpvYiwgbm93LCB7IGZvcmNlZDogbW9kZSA9PT0gImZvcmNlIiB9KSkgcmV0dXJuIHsKCQkJb2s6
IHRydWUsCgkJCXJhbjogZmFsc2UsCgkJCXJlYXNvbjogIm5vdC1kdWUiCgkJfTsKCQlyZXR1cm4g
ewoJCQlvazogdHJ1ZSwKCQkJcnVubmFibGU6IHRydWUsCgkJCWpvYiwKCQkJbm93CgkJfTsKCX0p
Owp9CmFzeW5jIGZ1bmN0aW9uIGluc3BlY3RNYW51YWxSdW5EaXNwb3NpdGlvbihzdGF0ZSwgaWQs
IG1vZGUpIHsKCWNvbnN0IHJlc3VsdCA9IGF3YWl0IGluc3BlY3RNYW51YWxSdW5QcmVmbGlnaHQo
c3RhdGUsIGlkLCBtb2RlKTsKCWlmICghcmVzdWx0Lm9rKSByZXR1cm4gcmVzdWx0OwoJaWYgKCJy
ZWFzb24iIGluIHJlc3VsdCkgcmV0dXJuIHJlc3VsdDsKCXJldHVybiB7CgkJb2s6IHRydWUsCgkJ
cnVubmFibGU6IHRydWUKCX07Cn0KYXN5bmMgZnVuY3Rpb24gcHJlcGFyZU1hbnVhbFJ1bihzdGF0
ZSwgaWQsIG1vZGUpIHsKCWNvbnN0IHByZWZsaWdodCA9IGF3YWl0IGluc3BlY3RNYW51YWxSdW5Q
cmVmbGlnaHQoc3RhdGUsIGlkLCBtb2RlKTsKCWlmICghcHJlZmxpZ2h0Lm9rKSByZXR1cm4gcHJl
ZmxpZ2h0OwoJaWYgKCJyZWFzb24iIGluIHByZWZsaWdodCkgcmV0dXJuIHsKCQlvazogdHJ1ZSwK
CQlyYW46IGZhbHNlLAoJCXJlYXNvbjogcHJlZmxpZ2h0LnJlYXNvbgoJfTsKCXJldHVybiBhd2Fp
dCBsb2NrZWQoc3RhdGUsIGFzeW5jICgpID0+IHsKCQljb25zdCBqb2IgPSBmaW5kSm9iT3JUaHJv
dyhzdGF0ZSwgaWQpOwoJCWlmICh0eXBlb2Ygam9iLnN0YXRlLnJ1bm5pbmdBdE1zID09PSAibnVt
YmVyIikgcmV0dXJuIHsKCQkJb2s6IHRydWUsCgkJCXJhbjogZmFsc2UsCgkJCXJlYXNvbjogImFs
cmVhZHktcnVubmluZyIKCQl9OwoJCWpvYi5zdGF0ZS5ydW5uaW5nQXRNcyA9IHByZWZsaWdodC5u
b3c7CgkJam9iLnN0YXRlLmxhc3RFcnJvciA9IHZvaWQgMDsKCQlhd2FpdCBwZXJzaXN0KHN0YXRl
KTsKCQllbWl0KHN0YXRlLCB7CgkJCWpvYklkOiBqb2IuaWQsCgkJCWFjdGlvbjogInN0YXJ0ZWQi
LAoJCQlydW5BdE1zOiBwcmVmbGlnaHQubm93CgkJfSk7CgkJY29uc3QgZXhlY3V0aW9uSm9iID0g
SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShqb2IpKTsKCQlyZXR1cm4gewoJCQlvazogdHJ1ZSwK
CQkJcmFuOiB0cnVlLAoJCQlqb2JJZDogam9iLmlkLAoJCQlzdGFydGVkQXQ6IHByZWZsaWdodC5u
b3csCgkJCWV4ZWN1dGlvbkpvYgoJCX07Cgl9KTsKfQphc3luYyBmdW5jdGlvbiBmaW5pc2hQcmVw
YXJlZE1hbnVhbFJ1bihzdGF0ZSwgcHJlcGFyZWQsIG1vZGUpIHsKCWNvbnN0IGV4ZWN1dGlvbkpv
YiA9IHByZXBhcmVkLmV4ZWN1dGlvbkpvYjsKCWNvbnN0IHN0YXJ0ZWRBdCA9IHByZXBhcmVkLnN0
YXJ0ZWRBdDsKCWNvbnN0IGpvYklkID0gcHJlcGFyZWQuam9iSWQ7CglsZXQgY29yZVJlc3VsdDsK
CXRyeSB7CgkJY29yZVJlc3VsdCA9IGF3YWl0IGV4ZWN1dGVKb2JDb3JlV2l0aFRpbWVvdXQoc3Rh
dGUsIGV4ZWN1dGlvbkpvYik7Cgl9IGNhdGNoIChlcnIpIHsKCQljb3JlUmVzdWx0ID0gewoJCQlz
dGF0dXM6ICJlcnJvciIsCgkJCWVycm9yOiBTdHJpbmcoZXJyKQoJCX07Cgl9Cgljb25zdCBlbmRl
ZEF0ID0gc3RhdGUuZGVwcy5ub3dNcygpOwoJYXdhaXQgbG9ja2VkKHN0YXRlLCBhc3luYyAoKSA9
PiB7CgkJYXdhaXQgZW5zdXJlTG9hZGVkKHN0YXRlLCB7IHNraXBSZWNvbXB1dGU6IHRydWUgfSk7
CgkJY29uc3Qgam9iID0gc3RhdGUuc3RvcmU/LmpvYnMuZmluZCgoZW50cnkpID0+IGVudHJ5Lmlk
ID09PSBqb2JJZCk7CgkJaWYgKCFqb2IpIHJldHVybjsKCQljb25zdCBzaG91bGREZWxldGUgPSBh
cHBseUpvYlJlc3VsdChzdGF0ZSwgam9iLCB7CgkJCXN0YXR1czogY29yZVJlc3VsdC5zdGF0dXMs
CgkJCWVycm9yOiBjb3JlUmVzdWx0LmVycm9yLAoJCQlkZWxpdmVyZWQ6IGNvcmVSZXN1bHQuZGVs
aXZlcmVkLAoJCQlzdGFydGVkQXQsCgkJCWVuZGVkQXQKCQl9LCB7IHByZXNlcnZlU2NoZWR1bGU6
IG1vZGUgPT09ICJmb3JjZSIgfSk7CgkJZW1pdChzdGF0ZSwgewoJCQlqb2JJZDogam9iLmlkLAoJ
CQlhY3Rpb246ICJmaW5pc2hlZCIsCgkJCXN0YXR1czogY29yZVJlc3VsdC5zdGF0dXMsCgkJCWVy
cm9yOiBjb3JlUmVzdWx0LmVycm9yLAoJCQlzdW1tYXJ5OiBjb3JlUmVzdWx0LnN1bW1hcnksCgkJ
CWRlbGl2ZXJlZDogY29yZVJlc3VsdC5kZWxpdmVyZWQsCgkJCWRlbGl2ZXJ5U3RhdHVzOiBqb2Iu
c3RhdGUubGFzdERlbGl2ZXJ5U3RhdHVzLAoJCQlkZWxpdmVyeUVycm9yOiBqb2Iuc3RhdGUubGFz
dERlbGl2ZXJ5RXJyb3IsCgkJCXNlc3Npb25JZDogY29yZVJlc3VsdC5zZXNzaW9uSWQsCgkJCXNl
c3Npb25LZXk6IGNvcmVSZXN1bHQuc2Vzc2lvbktleSwKCQkJcnVuQXRNczogc3RhcnRlZEF0LAoJ
CQlkdXJhdGlvbk1zOiBqb2Iuc3RhdGUubGFzdER1cmF0aW9uTXMsCgkJCW5leHRSdW5BdE1zOiBq
b2Iuc3RhdGUubmV4dFJ1bkF0TXMsCgkJCW1vZGVsOiBjb3JlUmVzdWx0Lm1vZGVsLAoJCQlwcm92
aWRlcjogY29yZVJlc3VsdC5wcm92aWRlciwKCQkJdXNhZ2U6IGNvcmVSZXN1bHQudXNhZ2UKCQl9
KTsKCQlpZiAoc2hvdWxkRGVsZXRlICYmIHN0YXRlLnN0b3JlKSB7CgkJCXN0YXRlLnN0b3JlLmpv
YnMgPSBzdGF0ZS5zdG9yZS5qb2JzLmZpbHRlcigoZW50cnkpID0+IGVudHJ5LmlkICE9PSBqb2Iu
aWQpOwoJCQllbWl0KHN0YXRlLCB7CgkJCQlqb2JJZDogam9iLmlkLAoJCQkJYWN0aW9uOiAicmVt
b3ZlZCIKCQkJfSk7CgkJfQoJCWNvbnN0IHBvc3RSdW5TbmFwc2hvdCA9IHNob3VsZERlbGV0ZSA/
IG51bGwgOiB7CgkJCWVuYWJsZWQ6IGpvYi5lbmFibGVkLAoJCQl1cGRhdGVkQXRNczogam9iLnVw
ZGF0ZWRBdE1zLAoJCQlzdGF0ZTogc3RydWN0dXJlZENsb25lKGpvYi5zdGF0ZSkKCQl9OwoJCWNv
bnN0IHBvc3RSdW5SZW1vdmVkID0gc2hvdWxkRGVsZXRlOwoJCWF3YWl0IGVuc3VyZUxvYWRlZChz
dGF0ZSwgewoJCQlmb3JjZVJlbG9hZDogdHJ1ZSwKCQkJc2tpcFJlY29tcHV0ZTogdHJ1ZQoJCX0p
OwoJCW1lcmdlTWFudWFsUnVuU25hcHNob3RBZnRlclJlbG9hZCh7CgkJCXN0YXRlLAoJCQlqb2JJ
ZCwKCQkJc25hcHNob3Q6IHBvc3RSdW5TbmFwc2hvdCwKCQkJcmVtb3ZlZDogcG9zdFJ1blJlbW92
ZWQKCQl9KTsKCQlyZWNvbXB1dGVOZXh0UnVuc0Zvck1haW50ZW5hbmNlKHN0YXRlLCB7IHJlY29t
cHV0ZUV4cGlyZWQ6IHRydWUgfSk7CgkJYXdhaXQgcGVyc2lzdChzdGF0ZSk7CgkJYXJtVGltZXIo
c3RhdGUpOwoJfSk7Cn0KYXN5bmMgZnVuY3Rpb24gcnVuKHN0YXRlLCBpZCwgbW9kZSkgewoJY29u
c3QgcHJlcGFyZWQgPSBhd2FpdCBwcmVwYXJlTWFudWFsUnVuKHN0YXRlLCBpZCwgbW9kZSk7Cglp
ZiAoIXByZXBhcmVkLm9rIHx8ICFwcmVwYXJlZC5yYW4pIHJldHVybiBwcmVwYXJlZDsKCWF3YWl0
IGZpbmlzaFByZXBhcmVkTWFudWFsUnVuKHN0YXRlLCBwcmVwYXJlZCwgbW9kZSk7CglyZXR1cm4g
ewoJCW9rOiB0cnVlLAoJCXJhbjogdHJ1ZQoJfTsKfQphc3luYyBmdW5jdGlvbiBlbnF1ZXVlUnVu
KHN0YXRlLCBpZCwgbW9kZSkgewoJY29uc3QgZGlzcG9zaXRpb24gPSBhd2FpdCBpbnNwZWN0TWFu
dWFsUnVuRGlzcG9zaXRpb24oc3RhdGUsIGlkLCBtb2RlKTsKCWlmICghZGlzcG9zaXRpb24ub2sg
fHwgISgicnVubmFibGUiIGluIGRpc3Bvc2l0aW9uICYmIGRpc3Bvc2l0aW9uLnJ1bm5hYmxlKSkg
cmV0dXJuIGRpc3Bvc2l0aW9uOwoJY29uc3QgcnVuSWQgPSBgbWFudWFsOiR7aWR9OiR7c3RhdGUu
ZGVwcy5ub3dNcygpfToke25leHRNYW51YWxSdW5JZCsrfWA7CgllbnF1ZXVlQ29tbWFuZEluTGFu
ZShDb21tYW5kTGFuZS5Dcm9uLCBhc3luYyAoKSA9PiB7CgkJY29uc3QgcmVzdWx0ID0gYXdhaXQg
cnVuKHN0YXRlLCBpZCwgbW9kZSk7CgkJaWYgKHJlc3VsdC5vayAmJiAicmFuIiBpbiByZXN1bHQg
JiYgIXJlc3VsdC5yYW4pIHN0YXRlLmRlcHMubG9nLmluZm8oewoJCQlqb2JJZDogaWQsCgkJCXJ1
bklkLAoJCQlyZWFzb246IHJlc3VsdC5yZWFzb24KCQl9LCAiY3JvbjogcXVldWVkIG1hbnVhbCBy
dW4gc2tpcHBlZCBiZWZvcmUgZXhlY3V0aW9uIik7CgkJcmV0dXJuIHJlc3VsdDsKCX0sIHsKCQl3
YXJuQWZ0ZXJNczogNWUzLAoJCW9uV2FpdDogKHdhaXRNcywgcXVldWVkQWhlYWQpID0+IHsKCQkJ
c3RhdGUuZGVwcy5sb2cud2Fybih7CgkJCQlqb2JJZDogaWQsCgkJCQlydW5JZCwKCQkJCXdhaXRN
cywKCQkJCXF1ZXVlZEFoZWFkCgkJCX0sICJjcm9uOiBxdWV1ZWQgbWFudWFsIHJ1biB3YWl0aW5n
IGZvciBhbiBleGVjdXRpb24gc2xvdCIpOwoJCX0KCX0pLmNhdGNoKChlcnIpID0+IHsKCQlzdGF0
ZS5kZXBzLmxvZy5lcnJvcih7CgkJCWpvYklkOiBpZCwKCQkJcnVuSWQsCgkJCWVycjogU3RyaW5n
KGVycikKCQl9LCAiY3JvbjogcXVldWVkIG1hbnVhbCBydW4gYmFja2dyb3VuZCBleGVjdXRpb24g
ZmFpbGVkIik7Cgl9KTsKCXJldHVybiB7CgkJb2s6IHRydWUsCgkJZW5xdWV1ZWQ6IHRydWUsCgkJ
cnVuSWQKCX07Cn0KZnVuY3Rpb24gd2FrZU5vdyhzdGF0ZSwgb3B0cykgewoJcmV0dXJuIHdha2Uo
c3RhdGUsIG9wdHMpOwp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2Nyb24vc2VydmljZS9z
dGF0ZS50cwpmdW5jdGlvbiBjcmVhdGVDcm9uU2VydmljZVN0YXRlKGRlcHMpIHsKCXJldHVybiB7
CgkJZGVwczogewoJCQkuLi5kZXBzLAoJCQlub3dNczogZGVwcy5ub3dNcyA/PyAoKCkgPT4gRGF0
ZS5ub3coKSkKCQl9LAoJCXN0b3JlOiBudWxsLAoJCXRpbWVyOiBudWxsLAoJCXJ1bm5pbmc6IGZh
bHNlLAoJCW9wOiBQcm9taXNlLnJlc29sdmUoKSwKCQl3YXJuZWREaXNhYmxlZDogZmFsc2UsCgkJ
c3RvcmVMb2FkZWRBdE1zOiBudWxsLAoJCXN0b3JlRmlsZU10aW1lTXM6IG51bGwKCX07Cn0KLy8j
ZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvY3Jvbi9zZXJ2aWNlLnRzCnZhciBDcm9uU2VydmljZSA9
IGNsYXNzIHsKCWNvbnN0cnVjdG9yKGRlcHMpIHsKCQl0aGlzLnN0YXRlID0gY3JlYXRlQ3JvblNl
cnZpY2VTdGF0ZShkZXBzKTsKCX0KCWFzeW5jIHN0YXJ0KCkgewoJCWF3YWl0IHN0YXJ0KHRoaXMu
c3RhdGUpOwoJfQoJc3RvcCgpIHsKCQlzdG9wKHRoaXMuc3RhdGUpOwoJfQoJYXN5bmMgc3RhdHVz
KCkgewoJCXJldHVybiBhd2FpdCBzdGF0dXModGhpcy5zdGF0ZSk7Cgl9Cglhc3luYyBsaXN0KG9w
dHMpIHsKCQlyZXR1cm4gYXdhaXQgbGlzdCh0aGlzLnN0YXRlLCBvcHRzKTsKCX0KCWFzeW5jIGxp
c3RQYWdlKG9wdHMpIHsKCQlyZXR1cm4gYXdhaXQgbGlzdFBhZ2UodGhpcy5zdGF0ZSwgb3B0cyk7
Cgl9Cglhc3luYyBhZGQoaW5wdXQpIHsKCQlyZXR1cm4gYXdhaXQgYWRkKHRoaXMuc3RhdGUsIGlu
cHV0KTsKCX0KCWFzeW5jIHVwZGF0ZShpZCwgcGF0Y2gpIHsKCQlyZXR1cm4gYXdhaXQgdXBkYXRl
KHRoaXMuc3RhdGUsIGlkLCBwYXRjaCk7Cgl9Cglhc3luYyByZW1vdmUoaWQpIHsKCQlyZXR1cm4g
YXdhaXQgcmVtb3ZlKHRoaXMuc3RhdGUsIGlkKTsKCX0KCWFzeW5jIHJ1bihpZCwgbW9kZSkgewoJ
CXJldHVybiBhd2FpdCBydW4odGhpcy5zdGF0ZSwgaWQsIG1vZGUpOwoJfQoJYXN5bmMgZW5xdWV1
ZVJ1bihpZCwgbW9kZSkgewoJCXJldHVybiBhd2FpdCBlbnF1ZXVlUnVuKHRoaXMuc3RhdGUsIGlk
LCBtb2RlKTsKCX0KCWdldEpvYihpZCkgewoJCXJldHVybiB0aGlzLnN0YXRlLnN0b3JlPy5qb2Jz
LmZpbmQoKGpvYikgPT4gam9iLmlkID09PSBpZCk7Cgl9Cgl3YWtlKG9wdHMpIHsKCQlyZXR1cm4g
d2FrZU5vdyh0aGlzLnN0YXRlLCBvcHRzKTsKCX0KfTsKLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBz
cmMvZ2F0ZXdheS9zZXJ2ZXItY3Jvbi50cwpjb25zdCBDUk9OX1dFQkhPT0tfVElNRU9VVF9NUyA9
IDFlNDsKZnVuY3Rpb24gdHJpbVRvT3B0aW9uYWxTdHJpbmcodmFsdWUpIHsKCWlmICh0eXBlb2Yg
dmFsdWUgIT09ICJzdHJpbmciKSByZXR1cm47Cgljb25zdCB0cmltbWVkID0gdmFsdWUudHJpbSgp
OwoJcmV0dXJuIHRyaW1tZWQubGVuZ3RoID4gMCA/IHRyaW1tZWQgOiB2b2lkIDA7Cn0KZnVuY3Rp
b24gcmVkYWN0V2ViaG9va1VybCh1cmwpIHsKCXRyeSB7CgkJY29uc3QgcGFyc2VkID0gbmV3IFVS
TCh1cmwpOwoJCXJldHVybiBgJHtwYXJzZWQub3JpZ2lufSR7cGFyc2VkLnBhdGhuYW1lfWA7Cgl9
IGNhdGNoIHsKCQlyZXR1cm4gIjxpbnZhbGlkLXdlYmhvb2stdXJsPiI7Cgl9Cn0KZnVuY3Rpb24g
cmVzb2x2ZUNyb25XZWJob29rVGFyZ2V0KHBhcmFtcykgewoJaWYgKHBhcmFtcy5kZWxpdmVyeT8u
bW9kZT8udHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09ICJ3ZWJob29rIikgewoJCWNvbnN0IHVybCA9
IG5vcm1hbGl6ZUh0dHBXZWJob29rVXJsKHBhcmFtcy5kZWxpdmVyeT8udG8pOwoJCXJldHVybiB1
cmwgPyB7CgkJCXVybCwKCQkJc291cmNlOiAiZGVsaXZlcnkiCgkJfSA6IG51bGw7Cgl9CglpZiAo
cGFyYW1zLmxlZ2FjeU5vdGlmeSkgewoJCWNvbnN0IGxlZ2FjeVVybCA9IG5vcm1hbGl6ZUh0dHBX
ZWJob29rVXJsKHBhcmFtcy5sZWdhY3lXZWJob29rKTsKCQlpZiAobGVnYWN5VXJsKSByZXR1cm4g
ewoJCQl1cmw6IGxlZ2FjeVVybCwKCQkJc291cmNlOiAibGVnYWN5IgoJCX07Cgl9CglyZXR1cm4g
bnVsbDsKfQpmdW5jdGlvbiBidWlsZENyb25XZWJob29rSGVhZGVycyh3ZWJob29rVG9rZW4pIHsK
CWNvbnN0IGhlYWRlcnMgPSB7ICJDb250ZW50LVR5cGUiOiAiYXBwbGljYXRpb24vanNvbiIgfTsK
CWlmICh3ZWJob29rVG9rZW4pIGhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IGBCZWFyZXIgJHt3ZWJo
b29rVG9rZW59YDsKCXJldHVybiBoZWFkZXJzOwp9CmFzeW5jIGZ1bmN0aW9uIHBvc3RDcm9uV2Vi
aG9vayhwYXJhbXMpIHsKCWNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xs
ZXIoKTsKCWNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKCQlhYm9ydENvbnRyb2xs
ZXIuYWJvcnQoKTsKCX0sIENST05fV0VCSE9PS19USU1FT1VUX01TKTsKCXRyeSB7CgkJYXdhaXQg
KGF3YWl0IGZldGNoV2l0aFNzckZHdWFyZCh7CgkJCXVybDogcGFyYW1zLndlYmhvb2tVcmwsCgkJ
CWluaXQ6IHsKCQkJCW1ldGhvZDogIlBPU1QiLAoJCQkJaGVhZGVyczogYnVpbGRDcm9uV2ViaG9v
a0hlYWRlcnMocGFyYW1zLndlYmhvb2tUb2tlbiksCgkJCQlib2R5OiBKU09OLnN0cmluZ2lmeShw
YXJhbXMucGF5bG9hZCksCgkJCQlzaWduYWw6IGFib3J0Q29udHJvbGxlci5zaWduYWwKCQkJfQoJ
CX0pKS5yZWxlYXNlKCk7Cgl9IGNhdGNoIChlcnIpIHsKCQlpZiAoZXJyIGluc3RhbmNlb2YgU3Ny
RkJsb2NrZWRFcnJvcikgcGFyYW1zLmxvZ2dlci53YXJuKHsKCQkJLi4ucGFyYW1zLmxvZ0NvbnRl
eHQsCgkJCXJlYXNvbjogZm9ybWF0RXJyb3JNZXNzYWdlKGVyciksCgkJCXdlYmhvb2tVcmw6IHJl
ZGFjdFdlYmhvb2tVcmwocGFyYW1zLndlYmhvb2tVcmwpCgkJfSwgcGFyYW1zLmJsb2NrZWRMb2cp
OwoJCWVsc2UgcGFyYW1zLmxvZ2dlci53YXJuKHsKCQkJLi4ucGFyYW1zLmxvZ0NvbnRleHQsCgkJ
CWVycjogZm9ybWF0RXJyb3JNZXNzYWdlKGVyciksCgkJCXdlYmhvb2tVcmw6IHJlZGFjdFdlYmhv
b2tVcmwocGFyYW1zLndlYmhvb2tVcmwpCgkJfSwgcGFyYW1zLmZhaWxlZExvZyk7Cgl9IGZpbmFs
bHkgewoJCWNsZWFyVGltZW91dCh0aW1lb3V0KTsKCX0KfQpmdW5jdGlvbiBidWlsZEdhdGV3YXlD
cm9uU2VydmljZShwYXJhbXMpIHsKCWNvbnN0IGNyb25Mb2dnZXIgPSBnZXRDaGlsZExvZ2dlcih7
IG1vZHVsZTogImNyb24iIH0pOwoJY29uc3Qgc3RvcmVQYXRoID0gcmVzb2x2ZUNyb25TdG9yZVBh
dGgocGFyYW1zLmNmZy5jcm9uPy5zdG9yZSk7Cgljb25zdCBjcm9uRW5hYmxlZCA9IHByb2Nlc3Mu
ZW52Lk9QRU5DTEFXX1NLSVBfQ1JPTiAhPT0gIjEiICYmIHBhcmFtcy5jZmcuY3Jvbj8uZW5hYmxl
ZCAhPT0gZmFsc2U7Cgljb25zdCByZXNvbHZlQ3JvbkFnZW50ID0gKHJlcXVlc3RlZCkgPT4gewoJ
CWNvbnN0IHJ1bnRpbWVDb25maWcgPSBsb2FkQ29uZmlnKCk7CgkJY29uc3Qgbm9ybWFsaXplZCA9
IHR5cGVvZiByZXF1ZXN0ZWQgPT09ICJzdHJpbmciICYmIHJlcXVlc3RlZC50cmltKCkgPyBub3Jt
YWxpemVBZ2VudElkKHJlcXVlc3RlZCkgOiB2b2lkIDA7CgkJcmV0dXJuIHsKCQkJYWdlbnRJZDog
bm9ybWFsaXplZCAhPT0gdm9pZCAwICYmIEFycmF5LmlzQXJyYXkocnVudGltZUNvbmZpZy5hZ2Vu
dHM/Lmxpc3QpICYmIHJ1bnRpbWVDb25maWcuYWdlbnRzLmxpc3Quc29tZSgoZW50cnkpID0+IGVu
dHJ5ICYmIHR5cGVvZiBlbnRyeS5pZCA9PT0gInN0cmluZyIgJiYgbm9ybWFsaXplQWdlbnRJZChl
bnRyeS5pZCkgPT09IG5vcm1hbGl6ZWQpID8gbm9ybWFsaXplZCA6IHJlc29sdmVEZWZhdWx0QWdl
bnRJZChydW50aW1lQ29uZmlnKSwKCQkJY2ZnOiBydW50aW1lQ29uZmlnCgkJfTsKCX07Cgljb25z
dCByZXNvbHZlQ3JvblNlc3Npb25LZXkgPSAocGFyYW1zKSA9PiB7CgkJY29uc3QgcmVxdWVzdGVk
ID0gcGFyYW1zLnJlcXVlc3RlZFNlc3Npb25LZXk/LnRyaW0oKTsKCQlpZiAoIXJlcXVlc3RlZCkg
cmV0dXJuIHJlc29sdmVBZ2VudE1haW5TZXNzaW9uS2V5KHsKCQkJY2ZnOiBwYXJhbXMucnVudGlt
ZUNvbmZpZywKCQkJYWdlbnRJZDogcGFyYW1zLmFnZW50SWQKCQl9KTsKCQljb25zdCBjYW5kaWRh
dGUgPSB0b0FnZW50U3RvcmVTZXNzaW9uS2V5KHsKCQkJYWdlbnRJZDogcGFyYW1zLmFnZW50SWQs
CgkJCXJlcXVlc3RLZXk6IHJlcXVlc3RlZCwKCQkJbWFpbktleTogcGFyYW1zLnJ1bnRpbWVDb25m
aWcuc2Vzc2lvbj8ubWFpbktleQoJCX0pOwoJCWNvbnN0IGNhbm9uaWNhbCA9IGNhbm9uaWNhbGl6
ZU1haW5TZXNzaW9uQWxpYXMoewoJCQljZmc6IHBhcmFtcy5ydW50aW1lQ29uZmlnLAoJCQlhZ2Vu
dElkOiBwYXJhbXMuYWdlbnRJZCwKCQkJc2Vzc2lvbktleTogY2FuZGlkYXRlCgkJfSk7CgkJaWYg
KGNhbm9uaWNhbCAhPT0gImdsb2JhbCIpIHsKCQkJaWYgKG5vcm1hbGl6ZUFnZW50SWQocmVzb2x2
ZUFnZW50SWRGcm9tU2Vzc2lvbktleShjYW5vbmljYWwpKSAhPT0gbm9ybWFsaXplQWdlbnRJZChw
YXJhbXMuYWdlbnRJZCkpIHJldHVybiByZXNvbHZlQWdlbnRNYWluU2Vzc2lvbktleSh7CgkJCQlj
Zmc6IHBhcmFtcy5ydW50aW1lQ29uZmlnLAoJCQkJYWdlbnRJZDogcGFyYW1zLmFnZW50SWQKCQkJ
fSk7CgkJfQoJCXJldHVybiBjYW5vbmljYWw7Cgl9OwoJY29uc3QgcmVzb2x2ZUNyb25XYWtlVGFy
Z2V0ID0gKG9wdHMpID0+IHsKCQljb25zdCBydW50aW1lQ29uZmlnID0gbG9hZENvbmZpZygpOwoJ
CWNvbnN0IGFnZW50SWQgPSAoKG9wdHM/LmFnZW50SWQgPyByZXNvbHZlQ3JvbkFnZW50KG9wdHMu
YWdlbnRJZCkuYWdlbnRJZCA6IHZvaWQgMCkgPz8gKG9wdHM/LnNlc3Npb25LZXkgPyBub3JtYWxp
emVBZ2VudElkKHJlc29sdmVBZ2VudElkRnJvbVNlc3Npb25LZXkob3B0cy5zZXNzaW9uS2V5KSkg
OiB2b2lkIDApKSB8fCB2b2lkIDA7CgkJcmV0dXJuIHsKCQkJcnVudGltZUNvbmZpZywKCQkJYWdl
bnRJZCwKCQkJc2Vzc2lvbktleTogb3B0cz8uc2Vzc2lvbktleSAmJiBhZ2VudElkID8gcmVzb2x2
ZUNyb25TZXNzaW9uS2V5KHsKCQkJCXJ1bnRpbWVDb25maWcsCgkJCQlhZ2VudElkLAoJCQkJcmVx
dWVzdGVkU2Vzc2lvbktleTogb3B0cy5zZXNzaW9uS2V5CgkJCX0pIDogdm9pZCAwCgkJfTsKCX07
Cgljb25zdCBkZWZhdWx0QWdlbnRJZCA9IHJlc29sdmVEZWZhdWx0QWdlbnRJZChwYXJhbXMuY2Zn
KTsKCWNvbnN0IHJ1bkxvZ1BydW5lID0gcmVzb2x2ZUNyb25SdW5Mb2dQcnVuZU9wdGlvbnMocGFy
YW1zLmNmZy5jcm9uPy5ydW5Mb2cpOwoJY29uc3QgcmVzb2x2ZVNlc3Npb25TdG9yZVBhdGggPSAo
YWdlbnRJZCkgPT4gcmVzb2x2ZVN0b3JlUGF0aChwYXJhbXMuY2ZnLnNlc3Npb24/LnN0b3JlLCB7
IGFnZW50SWQ6IGFnZW50SWQgPz8gZGVmYXVsdEFnZW50SWQgfSk7Cgljb25zdCBzZXNzaW9uU3Rv
cmVQYXRoID0gcmVzb2x2ZVNlc3Npb25TdG9yZVBhdGgoZGVmYXVsdEFnZW50SWQpOwoJY29uc3Qg
d2FybmVkTGVnYWN5V2ViaG9va0pvYnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwoJY29u
c3QgY3JvbiA9IG5ldyBDcm9uU2VydmljZSh7CgkJc3RvcmVQYXRoLAoJCWNyb25FbmFibGVkLAoJ
CWNyb25Db25maWc6IHBhcmFtcy5jZmcuY3JvbiwKCQlkZWZhdWx0QWdlbnRJZCwKCQlyZXNvbHZl
U2Vzc2lvblN0b3JlUGF0aCwKCQlzZXNzaW9uU3RvcmVQYXRoLAoJCWVucXVldWVTeXN0ZW1FdmVu
dDogKHRleHQsIG9wdHMpID0+IHsKCQkJY29uc3QgeyBhZ2VudElkLCBjZmc6IHJ1bnRpbWVDb25m
aWcgfSA9IHJlc29sdmVDcm9uQWdlbnQob3B0cz8uYWdlbnRJZCk7CgkJCWVucXVldWVTeXN0ZW1F
dmVudCh0ZXh0LCB7CgkJCQlzZXNzaW9uS2V5OiByZXNvbHZlQ3JvblNlc3Npb25LZXkoewoJCQkJ
CXJ1bnRpbWVDb25maWcsCgkJCQkJYWdlbnRJZCwKCQkJCQlyZXF1ZXN0ZWRTZXNzaW9uS2V5OiBv
cHRzPy5zZXNzaW9uS2V5CgkJCQl9KSwKCQkJCWNvbnRleHRLZXk6IG9wdHM/LmNvbnRleHRLZXkK
CQkJfSk7CgkJfSwKCQlyZXF1ZXN0SGVhcnRiZWF0Tm93OiAob3B0cykgPT4gewoJCQljb25zdCB7
IGFnZW50SWQsIHNlc3Npb25LZXkgfSA9IHJlc29sdmVDcm9uV2FrZVRhcmdldChvcHRzKTsKCQkJ
cmVxdWVzdEhlYXJ0YmVhdE5vdyh7CgkJCQlyZWFzb246IG9wdHM/LnJlYXNvbiwKCQkJCWFnZW50
SWQsCgkJCQlzZXNzaW9uS2V5CgkJCX0pOwoJCX0sCgkJcnVuSGVhcnRiZWF0T25jZTogYXN5bmMg
KG9wdHMpID0+IHsKCQkJY29uc3QgeyBydW50aW1lQ29uZmlnLCBhZ2VudElkLCBzZXNzaW9uS2V5
IH0gPSByZXNvbHZlQ3Jvbldha2VUYXJnZXQob3B0cyk7CgkJCWNvbnN0IGFnZW50RW50cnkgPSBB
cnJheS5pc0FycmF5KHJ1bnRpbWVDb25maWcuYWdlbnRzPy5saXN0KSAmJiBydW50aW1lQ29uZmln
LmFnZW50cy5saXN0LmZpbmQoKGVudHJ5KSA9PiBlbnRyeSAmJiB0eXBlb2YgZW50cnkuaWQgPT09
ICJzdHJpbmciICYmIG5vcm1hbGl6ZUFnZW50SWQoZW50cnkuaWQpID09PSBhZ2VudElkKTsKCQkJ
Y29uc3QgYWdlbnRIZWFydGJlYXQgPSBhZ2VudEVudHJ5ICYmIHR5cGVvZiBhZ2VudEVudHJ5ID09
PSAib2JqZWN0IiA/IGFnZW50RW50cnkuaGVhcnRiZWF0IDogdm9pZCAwOwoJCQljb25zdCBiYXNl
SGVhcnRiZWF0ID0gewoJCQkJLi4ucnVudGltZUNvbmZpZy5hZ2VudHM/LmRlZmF1bHRzPy5oZWFy
dGJlYXQsCgkJCQkuLi5hZ2VudEhlYXJ0YmVhdAoJCQl9OwoJCQljb25zdCBoZWFydGJlYXRPdmVy
cmlkZSA9IG9wdHM/LmhlYXJ0YmVhdCA/IHsKCQkJCS4uLmJhc2VIZWFydGJlYXQsCgkJCQkuLi5v
cHRzLmhlYXJ0YmVhdAoJCQl9IDogdm9pZCAwOwoJCQlyZXR1cm4gYXdhaXQgcnVuSGVhcnRiZWF0
T25jZSh7CgkJCQljZmc6IHJ1bnRpbWVDb25maWcsCgkJCQlyZWFzb246IG9wdHM/LnJlYXNvbiwK
CQkJCWFnZW50SWQsCgkJCQlzZXNzaW9uS2V5LAoJCQkJaGVhcnRiZWF0OiBoZWFydGJlYXRPdmVy
cmlkZSwKCQkJCWRlcHM6IHsKCQkJCQkuLi5wYXJhbXMuZGVwcywKCQkJCQlydW50aW1lOiBkZWZh
dWx0UnVudGltZQoJCQkJfQoJCQl9KTsKCQl9LAoJCXJ1bklzb2xhdGVkQWdlbnRKb2I6IGFzeW5j
ICh7IGpvYiwgbWVzc2FnZSwgYWJvcnRTaWduYWwgfSkgPT4gewoJCQljb25zdCB7IGFnZW50SWQs
IGNmZzogcnVudGltZUNvbmZpZyB9ID0gcmVzb2x2ZUNyb25BZ2VudChqb2IuYWdlbnRJZCk7CgkJ
CXJldHVybiBhd2FpdCBydW5Dcm9uSXNvbGF0ZWRBZ2VudFR1cm4oewoJCQkJY2ZnOiBydW50aW1l
Q29uZmlnLAoJCQkJZGVwczogcGFyYW1zLmRlcHMsCgkJCQlqb2IsCgkJCQltZXNzYWdlLAoJCQkJ
YWJvcnRTaWduYWwsCgkJCQlhZ2VudElkLAoJCQkJc2Vzc2lvbktleTogYGNyb246JHtqb2IuaWR9
YCwKCQkJCWxhbmU6ICJjcm9uIgoJCQl9KTsKCQl9LAoJCXNlbmRDcm9uRmFpbHVyZUFsZXJ0OiBh
c3luYyAoeyBqb2IsIHRleHQsIGNoYW5uZWwsIHRvLCBtb2RlLCBhY2NvdW50SWQgfSkgPT4gewoJ
CQljb25zdCB7IGFnZW50SWQsIGNmZzogcnVudGltZUNvbmZpZyB9ID0gcmVzb2x2ZUNyb25BZ2Vu
dChqb2IuYWdlbnRJZCk7CgkJCWNvbnN0IHdlYmhvb2tUb2tlbiA9IHRyaW1Ub09wdGlvbmFsU3Ry
aW5nKHBhcmFtcy5jZmcuY3Jvbj8ud2ViaG9va1Rva2VuKTsKCQkJaWYgKG1vZGUgPT09ICJ3ZWJo
b29rIiAmJiAhdG8pIHsKCQkJCWNyb25Mb2dnZXIud2Fybih7IGpvYklkOiBqb2IuaWQgfSwgImNy
b246IGZhaWx1cmUgYWxlcnQgd2ViaG9vayBtb2RlIHJlcXVpcmVzIFVSTCwgc2tpcHBpbmciKTsK
CQkJCXJldHVybjsKCQkJfQoJCQlpZiAobW9kZSA9PT0gIndlYmhvb2siICYmIHRvKSB7CgkJCQlj
b25zdCB3ZWJob29rVXJsID0gbm9ybWFsaXplSHR0cFdlYmhvb2tVcmwodG8pOwoJCQkJaWYgKHdl
Ymhvb2tVcmwpIGF3YWl0IHBvc3RDcm9uV2ViaG9vayh7CgkJCQkJd2ViaG9va1VybCwKCQkJCQl3
ZWJob29rVG9rZW4sCgkJCQkJcGF5bG9hZDogewoJCQkJCQlqb2JJZDogam9iLmlkLAoJCQkJCQlq
b2JOYW1lOiBqb2IubmFtZSwKCQkJCQkJbWVzc2FnZTogdGV4dAoJCQkJCX0sCgkJCQkJbG9nQ29u
dGV4dDogeyBqb2JJZDogam9iLmlkIH0sCgkJCQkJYmxvY2tlZExvZzogImNyb246IGZhaWx1cmUg
YWxlcnQgd2ViaG9vayBibG9ja2VkIGJ5IFNTUkYgZ3VhcmQiLAoJCQkJCWZhaWxlZExvZzogImNy
b246IGZhaWx1cmUgYWxlcnQgd2ViaG9vayBmYWlsZWQiLAoJCQkJCWxvZ2dlcjogY3JvbkxvZ2dl
cgoJCQkJfSk7CgkJCQllbHNlIGNyb25Mb2dnZXIud2Fybih7CgkJCQkJam9iSWQ6IGpvYi5pZCwK
CQkJCQl3ZWJob29rVXJsOiByZWRhY3RXZWJob29rVXJsKHRvKQoJCQkJfSwgImNyb246IGZhaWx1
cmUgYWxlcnQgd2ViaG9vayBVUkwgaXMgaW52YWxpZCwgc2tpcHBpbmciKTsKCQkJCXJldHVybjsK
CQkJfQoJCQljb25zdCB0YXJnZXQgPSBhd2FpdCByZXNvbHZlRGVsaXZlcnlUYXJnZXQocnVudGlt
ZUNvbmZpZywgYWdlbnRJZCwgewoJCQkJY2hhbm5lbCwKCQkJCXRvLAoJCQkJYWNjb3VudElkCgkJ
CX0pOwoJCQlpZiAoIXRhcmdldC5vaykgdGhyb3cgdGFyZ2V0LmVycm9yOwoJCQl0cnkgeyBsb2dU
b1B5dGhvbigib3V0Ym91bmQiLCB7IG1lc3NhZ2UsIGNoYW5uZWwsIHRhcmdldDogZGVsaXZlcnlU
YXJnZXQgfSk7IH0gY2F0Y2gge30KYXdhaXQgZGVsaXZlck91dGJvdW5kUGF5bG9hZHMoewoJCQkJ
Y2ZnOiBydW50aW1lQ29uZmlnLAoJCQkJY2hhbm5lbDogdGFyZ2V0LmNoYW5uZWwsCgkJCQl0bzog
dGFyZ2V0LnRvLAoJCQkJYWNjb3VudElkOiB0YXJnZXQuYWNjb3VudElkLAoJCQkJdGhyZWFkSWQ6
IHRhcmdldC50aHJlYWRJZCwKCQkJCXBheWxvYWRzOiBbeyB0ZXh0IH1dLAoJCQkJZGVwczogY3Jl
YXRlT3V0Ym91bmRTZW5kRGVwcyhwYXJhbXMuZGVwcykKCQkJfSk7CgkJfSwKCQlsb2c6IGdldENo
aWxkTG9nZ2VyKHsKCQkJbW9kdWxlOiAiY3JvbiIsCgkJCXN0b3JlUGF0aAoJCX0pLAoJCW9uRXZl
bnQ6IChldnQpID0+IHsKCQkJcGFyYW1zLmJyb2FkY2FzdCgiY3JvbiIsIGV2dCwgeyBkcm9wSWZT
bG93OiB0cnVlIH0pOwoJCQlpZiAoZXZ0LmFjdGlvbiA9PT0gImZpbmlzaGVkIikgewoJCQkJY29u
c3Qgd2ViaG9va1Rva2VuID0gdHJpbVRvT3B0aW9uYWxTdHJpbmcocGFyYW1zLmNmZy5jcm9uPy53
ZWJob29rVG9rZW4pOwoJCQkJY29uc3QgbGVnYWN5V2ViaG9vayA9IHRyaW1Ub09wdGlvbmFsU3Ry
aW5nKHBhcmFtcy5jZmcuY3Jvbj8ud2ViaG9vayk7CgkJCQljb25zdCBqb2IgPSBjcm9uLmdldEpv
YihldnQuam9iSWQpOwoJCQkJY29uc3QgbGVnYWN5Tm90aWZ5ID0gam9iPy5ub3RpZnkgPT09IHRy
dWU7CgkJCQljb25zdCB3ZWJob29rVGFyZ2V0ID0gcmVzb2x2ZUNyb25XZWJob29rVGFyZ2V0KHsK
CQkJCQlkZWxpdmVyeTogam9iPy5kZWxpdmVyeSAmJiB0eXBlb2Ygam9iLmRlbGl2ZXJ5Lm1vZGUg
PT09ICJzdHJpbmciID8gewoJCQkJCQltb2RlOiBqb2IuZGVsaXZlcnkubW9kZSwKCQkJCQkJdG86
IGpvYi5kZWxpdmVyeS50bwoJCQkJCX0gOiB2b2lkIDAsCgkJCQkJbGVnYWN5Tm90aWZ5LAoJCQkJ
CWxlZ2FjeVdlYmhvb2sKCQkJCX0pOwoJCQkJaWYgKCF3ZWJob29rVGFyZ2V0ICYmIGpvYj8uZGVs
aXZlcnk/Lm1vZGUgPT09ICJ3ZWJob29rIikgY3JvbkxvZ2dlci53YXJuKHsKCQkJCQlqb2JJZDog
ZXZ0LmpvYklkLAoJCQkJCWRlbGl2ZXJ5VG86IGpvYi5kZWxpdmVyeS50bwoJCQkJfSwgImNyb246
IHNraXBwZWQgd2ViaG9vayBkZWxpdmVyeSwgZGVsaXZlcnkudG8gbXVzdCBiZSBhIHZhbGlkIGh0
dHAocykgVVJMIik7CgkJCQlpZiAod2ViaG9va1RhcmdldD8uc291cmNlID09PSAibGVnYWN5IiAm
JiAhd2FybmVkTGVnYWN5V2ViaG9va0pvYnMuaGFzKGV2dC5qb2JJZCkpIHsKCQkJCQl3YXJuZWRM
ZWdhY3lXZWJob29rSm9icy5hZGQoZXZ0LmpvYklkKTsKCQkJCQljcm9uTG9nZ2VyLndhcm4oewoJ
CQkJCQlqb2JJZDogZXZ0LmpvYklkLAoJCQkJCQlsZWdhY3lXZWJob29rOiByZWRhY3RXZWJob29r
VXJsKHdlYmhvb2tUYXJnZXQudXJsKQoJCQkJCX0sICJjcm9uOiBkZXByZWNhdGVkIG5vdGlmeStj
cm9uLndlYmhvb2sgZmFsbGJhY2sgaW4gdXNlLCBtaWdyYXRlIHRvIGRlbGl2ZXJ5Lm1vZGU9d2Vi
aG9vayB3aXRoIGRlbGl2ZXJ5LnRvIik7CgkJCQl9CgkJCQlpZiAod2ViaG9va1RhcmdldCAmJiBl
dnQuc3VtbWFyeSkgKGFzeW5jICgpID0+IHsKCQkJCQlhd2FpdCBwb3N0Q3JvbldlYmhvb2soewoJ
CQkJCQl3ZWJob29rVXJsOiB3ZWJob29rVGFyZ2V0LnVybCwKCQkJCQkJd2ViaG9va1Rva2VuLAoJ
CQkJCQlwYXlsb2FkOiBldnQsCgkJCQkJCWxvZ0NvbnRleHQ6IHsgam9iSWQ6IGV2dC5qb2JJZCB9
LAoJCQkJCQlibG9ja2VkTG9nOiAiY3Jvbjogd2ViaG9vayBkZWxpdmVyeSBibG9ja2VkIGJ5IFNT
UkYgZ3VhcmQiLAoJCQkJCQlmYWlsZWRMb2c6ICJjcm9uOiB3ZWJob29rIGRlbGl2ZXJ5IGZhaWxl
ZCIsCgkJCQkJCWxvZ2dlcjogY3JvbkxvZ2dlcgoJCQkJCX0pOwoJCQkJfSkoKTsKCQkJCWlmIChl
dnQuc3RhdHVzID09PSAiZXJyb3IiICYmIGpvYikgewoJCQkJCWNvbnN0IGZhaWx1cmVEZXN0ID0g
cmVzb2x2ZUZhaWx1cmVEZXN0aW5hdGlvbihqb2IsIHBhcmFtcy5jZmcuY3Jvbj8uZmFpbHVyZURl
c3RpbmF0aW9uKTsKCQkJCQlpZiAoZmFpbHVyZURlc3QpIHsKCQkJCQkJaWYgKCEoam9iLmRlbGl2
ZXJ5Py5iZXN0RWZmb3J0ID09PSB0cnVlIHx8IGpvYi5wYXlsb2FkLmtpbmQgPT09ICJhZ2VudFR1
cm4iICYmIGpvYi5wYXlsb2FkLmJlc3RFZmZvcnREZWxpdmVyID09PSB0cnVlKSkgewoJCQkJCQkJ
Y29uc3QgZmFpbHVyZU1lc3NhZ2UgPSBgQ3JvbiBqb2IgIiR7am9iLm5hbWV9IiBmYWlsZWQ6ICR7
ZXZ0LmVycm9yID8/ICJ1bmtub3duIGVycm9yIn1gOwoJCQkJCQkJY29uc3QgZmFpbHVyZVBheWxv
YWQgPSB7CgkJCQkJCQkJam9iSWQ6IGpvYi5pZCwKCQkJCQkJCQlqb2JOYW1lOiBqb2IubmFtZSwK
CQkJCQkJCQltZXNzYWdlOiBmYWlsdXJlTWVzc2FnZSwKCQkJCQkJCQlzdGF0dXM6IGV2dC5zdGF0
dXMsCgkJCQkJCQkJZXJyb3I6IGV2dC5lcnJvciwKCQkJCQkJCQlydW5BdE1zOiBldnQucnVuQXRN
cywKCQkJCQkJCQlkdXJhdGlvbk1zOiBldnQuZHVyYXRpb25NcywKCQkJCQkJCQluZXh0UnVuQXRN
czogZXZ0Lm5leHRSdW5BdE1zCgkJCQkJCQl9OwoJCQkJCQkJaWYgKGZhaWx1cmVEZXN0Lm1vZGUg
PT09ICJ3ZWJob29rIiAmJiBmYWlsdXJlRGVzdC50bykgewoJCQkJCQkJCWNvbnN0IHdlYmhvb2tV
cmwgPSBub3JtYWxpemVIdHRwV2ViaG9va1VybChmYWlsdXJlRGVzdC50byk7CgkJCQkJCQkJaWYg
KHdlYmhvb2tVcmwpIChhc3luYyAoKSA9PiB7CgkJCQkJCQkJCWF3YWl0IHBvc3RDcm9uV2ViaG9v
ayh7CgkJCQkJCQkJCQl3ZWJob29rVXJsLAoJCQkJCQkJCQkJd2ViaG9va1Rva2VuLAoJCQkJCQkJ
CQkJcGF5bG9hZDogZmFpbHVyZVBheWxvYWQsCgkJCQkJCQkJCQlsb2dDb250ZXh0OiB7IGpvYklk
OiBldnQuam9iSWQgfSwKCQkJCQkJCQkJCWJsb2NrZWRMb2c6ICJjcm9uOiBmYWlsdXJlIGRlc3Rp
bmF0aW9uIHdlYmhvb2sgYmxvY2tlZCBieSBTU1JGIGd1YXJkIiwKCQkJCQkJCQkJCWZhaWxlZExv
ZzogImNyb246IGZhaWx1cmUgZGVzdGluYXRpb24gd2ViaG9vayBmYWlsZWQiLAoJCQkJCQkJCQkJ
bG9nZ2VyOiBjcm9uTG9nZ2VyCgkJCQkJCQkJCX0pOwoJCQkJCQkJCX0pKCk7CgkJCQkJCQkJZWxz
ZSBjcm9uTG9nZ2VyLndhcm4oewoJCQkJCQkJCQlqb2JJZDogZXZ0LmpvYklkLAoJCQkJCQkJCQl3
ZWJob29rVXJsOiByZWRhY3RXZWJob29rVXJsKGZhaWx1cmVEZXN0LnRvKQoJCQkJCQkJCX0sICJj
cm9uOiBmYWlsdXJlIGRlc3RpbmF0aW9uIHdlYmhvb2sgVVJMIGlzIGludmFsaWQsIHNraXBwaW5n
Iik7CgkJCQkJCQl9IGVsc2UgaWYgKGZhaWx1cmVEZXN0Lm1vZGUgPT09ICJhbm5vdW5jZSIpIHsK
CQkJCQkJCQljb25zdCB7IGFnZW50SWQsIGNmZzogcnVudGltZUNvbmZpZyB9ID0gcmVzb2x2ZUNy
b25BZ2VudChqb2IuYWdlbnRJZCk7CgkJCQkJCQkJc2VuZEZhaWx1cmVOb3RpZmljYXRpb25Bbm5v
dW5jZShwYXJhbXMuZGVwcywgcnVudGltZUNvbmZpZywgYWdlbnRJZCwgam9iLmlkLCB7CgkJCQkJ
CQkJCWNoYW5uZWw6IGZhaWx1cmVEZXN0LmNoYW5uZWwsCgkJCQkJCQkJCXRvOiBmYWlsdXJlRGVz
dC50bywKCQkJCQkJCQkJYWNjb3VudElkOiBmYWlsdXJlRGVzdC5hY2NvdW50SWQKCQkJCQkJCQl9
LCBgW0Nyb24gRmFpbHVyZV0gJHtmYWlsdXJlTWVzc2FnZX1gKTsKCQkJCQkJCX0KCQkJCQkJfQoJ
CQkJCX0KCQkJCX0KCQkJCWNvbnN0IGxvZ1BhdGggPSByZXNvbHZlQ3JvblJ1bkxvZ1BhdGgoewoJ
CQkJCXN0b3JlUGF0aCwKCQkJCQlqb2JJZDogZXZ0LmpvYklkCgkJCQl9KTsKCQkJCWFwcGVuZENy
b25SdW5Mb2cobG9nUGF0aCwgewoJCQkJCXRzOiBEYXRlLm5vdygpLAoJCQkJCWpvYklkOiBldnQu
am9iSWQsCgkJCQkJYWN0aW9uOiAiZmluaXNoZWQiLAoJCQkJCXN0YXR1czogZXZ0LnN0YXR1cywK
CQkJCQllcnJvcjogZXZ0LmVycm9yLAoJCQkJCXN1bW1hcnk6IGV2dC5zdW1tYXJ5LAoJCQkJCWRl
bGl2ZXJlZDogZXZ0LmRlbGl2ZXJlZCwKCQkJCQlkZWxpdmVyeVN0YXR1czogZXZ0LmRlbGl2ZXJ5
U3RhdHVzLAoJCQkJCWRlbGl2ZXJ5RXJyb3I6IGV2dC5kZWxpdmVyeUVycm9yLAoJCQkJCXNlc3Np
b25JZDogZXZ0LnNlc3Npb25JZCwKCQkJCQlzZXNzaW9uS2V5OiBldnQuc2Vzc2lvbktleSwKCQkJ
CQlydW5BdE1zOiBldnQucnVuQXRNcywKCQkJCQlkdXJhdGlvbk1zOiBldnQuZHVyYXRpb25NcywK
CQkJCQluZXh0UnVuQXRNczogZXZ0Lm5leHRSdW5BdE1zLAoJCQkJCW1vZGVsOiBldnQubW9kZWws
CgkJCQkJcHJvdmlkZXI6IGV2dC5wcm92aWRlciwKCQkJCQl1c2FnZTogZXZ0LnVzYWdlCgkJCQl9
LCBydW5Mb2dQcnVuZSkuY2F0Y2goKGVycikgPT4gewoJCQkJCWNyb25Mb2dnZXIud2Fybih7CgkJ
CQkJCWVycjogU3RyaW5nKGVyciksCgkJCQkJCWxvZ1BhdGgKCQkJCQl9LCAiY3JvbjogcnVuIGxv
ZyBhcHBlbmQgZmFpbGVkIik7CgkJCQl9KTsKCQkJfQoJCX0KCX0pOwoJcmV0dXJuIHsKCQljcm9u
LAoJCXN0b3JlUGF0aCwKCQljcm9uRW5hYmxlZAoJfTsKfQovLyNlbmRyZWdpb24KLy8jcmVnaW9u
IHNyYy9pbmZyYS9ib25qb3VyLWVycm9ycy50cwpmdW5jdGlvbiBmb3JtYXRCb25qb3VyRXJyb3Io
ZXJyKSB7CglpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHsKCQljb25zdCBtc2cgPSBlcnIubWVz
c2FnZS50cmltKCkgfHwgZXJyLm5hbWUgfHwgU3RyaW5nKGVycikudHJpbSgpOwoJCWlmIChlcnIu
bmFtZSAmJiBlcnIubmFtZSAhPT0gIkVycm9yIikgcmV0dXJuIG1zZyA9PT0gZXJyLm5hbWUgPyBl
cnIubmFtZSA6IGAke2Vyci5uYW1lfTogJHttc2d9YDsKCQlyZXR1cm4gbXNnOwoJfQoJcmV0dXJu
IFN0cmluZyhlcnIpOwp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2luZnJhL2JvbmpvdXIt
Y2lhby50cwpmdW5jdGlvbiBpZ25vcmVDaWFvQ2FuY2VsbGF0aW9uUmVqZWN0aW9uKHJlYXNvbikg
ewoJaWYgKCFmb3JtYXRCb25qb3VyRXJyb3IocmVhc29uKS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVz
KCJDSUFPIEFOTk9VTkNFTUVOVCBDQU5DRUxMRUQiKSkgcmV0dXJuIGZhbHNlOwoJbG9nRGVidWco
YGJvbmpvdXI6IGlnbm9yaW5nIHVuaGFuZGxlZCBjaWFvIHJlamVjdGlvbjogJHtmb3JtYXRCb25q
b3VyRXJyb3IocmVhc29uKX1gKTsKCXJldHVybiB0cnVlOwp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdp
b24gc3JjL2luZnJhL2JvbmpvdXIudHMKZnVuY3Rpb24gaXNEaXNhYmxlZEJ5RW52JDEoKSB7Cglp
ZiAoaXNUcnV0aHlFbnZWYWx1ZShwcm9jZXNzLmVudi5PUEVOQ0xBV19ESVNBQkxFX0JPTkpPVVIp
KSByZXR1cm4gdHJ1ZTsKCWlmIChwcm9jZXNzLmVudi5WSVRFU1QpIHJldHVybiB0cnVlOwoJcmV0
dXJuIGZhbHNlOwp9CmZ1bmN0aW9uIHNhZmVTZXJ2aWNlTmFtZShuYW1lKSB7Cgljb25zdCB0cmlt
bWVkID0gbmFtZS50cmltKCk7CglyZXR1cm4gdHJpbW1lZC5sZW5ndGggPiAwID8gdHJpbW1lZCA6
ICJPcGVuQ2xhdyI7Cn0KZnVuY3Rpb24gcHJldHRpZnlJbnN0YW5jZU5hbWUobmFtZSkgewoJY29u
c3Qgbm9ybWFsaXplZCA9IG5hbWUudHJpbSgpLnJlcGxhY2UoL1xzKy9nLCAiICIpOwoJcmV0dXJu
IG5vcm1hbGl6ZWQucmVwbGFjZSgvXHMrXChPcGVuQ2xhd1wpXHMqJC9pLCAiIikudHJpbSgpIHx8
IG5vcm1hbGl6ZWQ7Cn0KZnVuY3Rpb24gc2VydmljZVN1bW1hcnkobGFiZWwsIHN2YykgewoJbGV0
IGZxZG4gPSAidW5rbm93biI7CglsZXQgaG9zdG5hbWUgPSAidW5rbm93biI7CglsZXQgcG9ydCA9
IC0xOwoJdHJ5IHsKCQlmcWRuID0gc3ZjLmdldEZRRE4oKTsKCX0gY2F0Y2gge30KCXRyeSB7CgkJ
aG9zdG5hbWUgPSBzdmMuZ2V0SG9zdG5hbWUoKTsKCX0gY2F0Y2gge30KCXRyeSB7CgkJcG9ydCA9
IHN2Yy5nZXRQb3J0KCk7Cgl9IGNhdGNoIHt9Cgljb25zdCBzdGF0ZSA9IHR5cGVvZiBzdmMuc2Vy
dmljZVN0YXRlID09PSAic3RyaW5nIiA/IHN2Yy5zZXJ2aWNlU3RhdGUgOiAidW5rbm93biI7Cgly
ZXR1cm4gYCR7bGFiZWx9IGZxZG49JHtmcWRufSBob3N0PSR7aG9zdG5hbWV9IHBvcnQ9JHtwb3J0
fSBzdGF0ZT0ke3N0YXRlfWA7Cn0KYXN5bmMgZnVuY3Rpb24gc3RhcnRHYXRld2F5Qm9uam91ckFk
dmVydGlzZXIob3B0cykgewoJaWYgKGlzRGlzYWJsZWRCeUVudiQxKCkpIHJldHVybiB7IHN0b3A6
IGFzeW5jICgpID0+IHt9IH07Cgljb25zdCB7IGdldFJlc3BvbmRlciwgUHJvdG9jb2wgfSA9IGF3
YWl0IGltcG9ydCgiQGhvbWVicmlkZ2UvY2lhbyIpOwoJY29uc3QgcmVzcG9uZGVyID0gZ2V0UmVz
cG9uZGVyKCk7Cgljb25zdCBob3N0bmFtZSA9IChwcm9jZXNzLmVudi5PUEVOQ0xBV19NRE5TX0hP
U1ROQU1FPy50cmltKCkgfHwgcHJvY2Vzcy5lbnYuQ0xBV0RCT1RfTUROU19IT1NUTkFNRT8udHJp
bSgpIHx8ICJvcGVuY2xhdyIpLnJlcGxhY2UoL1wubG9jYWwkL2ksICIiKS5zcGxpdCgiLiIpWzBd
LnRyaW0oKSB8fCAib3BlbmNsYXciOwoJY29uc3QgaW5zdGFuY2VOYW1lID0gdHlwZW9mIG9wdHMu
aW5zdGFuY2VOYW1lID09PSAic3RyaW5nIiAmJiBvcHRzLmluc3RhbmNlTmFtZS50cmltKCkgPyBv
cHRzLmluc3RhbmNlTmFtZS50cmltKCkgOiBgJHtob3N0bmFtZX0gKE9wZW5DbGF3KWA7Cgljb25z
dCBkaXNwbGF5TmFtZSA9IHByZXR0aWZ5SW5zdGFuY2VOYW1lKGluc3RhbmNlTmFtZSk7Cgljb25z
dCB0eHRCYXNlID0gewoJCXJvbGU6ICJnYXRld2F5IiwKCQlnYXRld2F5UG9ydDogU3RyaW5nKG9w
dHMuZ2F0ZXdheVBvcnQpLAoJCWxhbkhvc3Q6IGAke2hvc3RuYW1lfS5sb2NhbGAsCgkJZGlzcGxh
eU5hbWUKCX07CglpZiAob3B0cy5nYXRld2F5VGxzRW5hYmxlZCkgewoJCXR4dEJhc2UuZ2F0ZXdh
eVRscyA9ICIxIjsKCQlpZiAob3B0cy5nYXRld2F5VGxzRmluZ2VycHJpbnRTaGEyNTYpIHR4dEJh
c2UuZ2F0ZXdheVRsc1NoYTI1NiA9IG9wdHMuZ2F0ZXdheVRsc0ZpbmdlcnByaW50U2hhMjU2OwoJ
fQoJaWYgKHR5cGVvZiBvcHRzLmNhbnZhc1BvcnQgPT09ICJudW1iZXIiICYmIG9wdHMuY2FudmFz
UG9ydCA+IDApIHR4dEJhc2UuY2FudmFzUG9ydCA9IFN0cmluZyhvcHRzLmNhbnZhc1BvcnQpOwoJ
aWYgKHR5cGVvZiBvcHRzLnRhaWxuZXREbnMgPT09ICJzdHJpbmciICYmIG9wdHMudGFpbG5ldERu
cy50cmltKCkpIHR4dEJhc2UudGFpbG5ldERucyA9IG9wdHMudGFpbG5ldERucy50cmltKCk7Cglp
ZiAoIW9wdHMubWluaW1hbCAmJiB0eXBlb2Ygb3B0cy5jbGlQYXRoID09PSAic3RyaW5nIiAmJiBv
cHRzLmNsaVBhdGgudHJpbSgpKSB0eHRCYXNlLmNsaVBhdGggPSBvcHRzLmNsaVBhdGgudHJpbSgp
OwoJY29uc3Qgc2VydmljZXMgPSBbXTsKCWNvbnN0IGdhdGV3YXlUeHQgPSB7CgkJLi4udHh0QmFz
ZSwKCQl0cmFuc3BvcnQ6ICJnYXRld2F5IgoJfTsKCWlmICghb3B0cy5taW5pbWFsKSBnYXRld2F5
VHh0LnNzaFBvcnQgPSBTdHJpbmcob3B0cy5zc2hQb3J0ID8/IDIyKTsKCWNvbnN0IGdhdGV3YXkg
PSByZXNwb25kZXIuY3JlYXRlU2VydmljZSh7CgkJbmFtZTogc2FmZVNlcnZpY2VOYW1lKGluc3Rh
bmNlTmFtZSksCgkJdHlwZTogIm9wZW5jbGF3LWd3IiwKCQlwcm90b2NvbDogUHJvdG9jb2wuVENQ
LAoJCXBvcnQ6IG9wdHMuZ2F0ZXdheVBvcnQsCgkJZG9tYWluOiAibG9jYWwiLAoJCWhvc3RuYW1l
LAoJCXR4dDogZ2F0ZXdheVR4dAoJfSk7CglzZXJ2aWNlcy5wdXNoKHsKCQlsYWJlbDogImdhdGV3
YXkiLAoJCXN2YzogZ2F0ZXdheQoJfSk7CglsZXQgY2lhb0NhbmNlbGxhdGlvblJlamVjdGlvbkhh
bmRsZXI7CglpZiAoc2VydmljZXMubGVuZ3RoID4gMCkgY2lhb0NhbmNlbGxhdGlvblJlamVjdGlv
bkhhbmRsZXIgPSByZWdpc3RlclVuaGFuZGxlZFJlamVjdGlvbkhhbmRsZXIoaWdub3JlQ2lhb0Nh
bmNlbGxhdGlvblJlamVjdGlvbik7Cglsb2dEZWJ1ZyhgYm9uam91cjogc3RhcnRpbmcgKGhvc3Ru
YW1lPSR7aG9zdG5hbWV9LCBpbnN0YW5jZT0ke0pTT04uc3RyaW5naWZ5KHNhZmVTZXJ2aWNlTmFt
ZShpbnN0YW5jZU5hbWUpKX0sIGdhdGV3YXlQb3J0PSR7b3B0cy5nYXRld2F5UG9ydH0ke29wdHMu
bWluaW1hbCA/ICIsIG1pbmltYWw9dHJ1ZSIgOiBgLCBzc2hQb3J0PSR7b3B0cy5zc2hQb3J0ID8/
IDIyfWB9KWApOwoJZm9yIChjb25zdCB7IGxhYmVsLCBzdmMgfSBvZiBzZXJ2aWNlcykgdHJ5IHsK
CQlzdmMub24oIm5hbWUtY2hhbmdlIiwgKG5hbWUpID0+IHsKCQkJY29uc3QgbmV4dCA9IHR5cGVv
ZiBuYW1lID09PSAic3RyaW5nIiA/IG5hbWUgOiBTdHJpbmcobmFtZSk7CgkJCWxvZ1dhcm4oYGJv
bmpvdXI6ICR7bGFiZWx9IG5hbWUgY29uZmxpY3QgcmVzb2x2ZWQ7IG5ld05hbWU9JHtKU09OLnN0
cmluZ2lmeShuZXh0KX1gKTsKCQl9KTsKCQlzdmMub24oImhvc3RuYW1lLWNoYW5nZSIsIChuZXh0
SG9zdG5hbWUpID0+IHsKCQkJY29uc3QgbmV4dCA9IHR5cGVvZiBuZXh0SG9zdG5hbWUgPT09ICJz
dHJpbmciID8gbmV4dEhvc3RuYW1lIDogU3RyaW5nKG5leHRIb3N0bmFtZSk7CgkJCWxvZ1dhcm4o
YGJvbmpvdXI6ICR7bGFiZWx9IGhvc3RuYW1lIGNvbmZsaWN0IHJlc29sdmVkOyBuZXdIb3N0bmFt
ZT0ke0pTT04uc3RyaW5naWZ5KG5leHQpfWApOwoJCX0pOwoJfSBjYXRjaCAoZXJyKSB7CgkJbG9n
RGVidWcoYGJvbmpvdXI6IGZhaWxlZCB0byBhdHRhY2ggbGlzdGVuZXJzIGZvciAke2xhYmVsfTog
JHtTdHJpbmcoZXJyKX1gKTsKCX0KCWZvciAoY29uc3QgeyBsYWJlbCwgc3ZjIH0gb2Ygc2Vydmlj
ZXMpIHRyeSB7CgkJc3ZjLmFkdmVydGlzZSgpLnRoZW4oKCkgPT4gewoJCQlnZXRMb2dnZXIoKS5p
bmZvKGBib25qb3VyOiBhZHZlcnRpc2VkICR7c2VydmljZVN1bW1hcnkobGFiZWwsIHN2Yyl9YCk7
CgkJfSkuY2F0Y2goKGVycikgPT4gewoJCQlsb2dXYXJuKGBib25qb3VyOiBhZHZlcnRpc2UgZmFp
bGVkICgke3NlcnZpY2VTdW1tYXJ5KGxhYmVsLCBzdmMpfSk6ICR7Zm9ybWF0Qm9uam91ckVycm9y
KGVycil9YCk7CgkJfSk7Cgl9IGNhdGNoIChlcnIpIHsKCQlsb2dXYXJuKGBib25qb3VyOiBhZHZl
cnRpc2UgdGhyZXcgKCR7c2VydmljZVN1bW1hcnkobGFiZWwsIHN2Yyl9KTogJHtmb3JtYXRCb25q
b3VyRXJyb3IoZXJyKX1gKTsKCX0KCWNvbnN0IGxhc3RSZXBhaXJBdHRlbXB0ID0gLyogQF9fUFVS
RV9fICovIG5ldyBNYXAoKTsKCWNvbnN0IHdhdGNoZG9nID0gc2V0SW50ZXJ2YWwoKCkgPT4gewoJ
CWZvciAoY29uc3QgeyBsYWJlbCwgc3ZjIH0gb2Ygc2VydmljZXMpIHsKCQkJY29uc3Qgc3RhdGVV
bmtub3duID0gc3ZjLnNlcnZpY2VTdGF0ZTsKCQkJaWYgKHR5cGVvZiBzdGF0ZVVua25vd24gIT09
ICJzdHJpbmciKSBjb250aW51ZTsKCQkJaWYgKHN0YXRlVW5rbm93biA9PT0gImFubm91bmNlZCIg
fHwgc3RhdGVVbmtub3duID09PSAiYW5ub3VuY2luZyIpIGNvbnRpbnVlOwoJCQlsZXQga2V5ID0g
bGFiZWw7CgkJCXRyeSB7CgkJCQlrZXkgPSBgJHtsYWJlbH06JHtzdmMuZ2V0RlFETigpfWA7CgkJ
CX0gY2F0Y2gge30KCQkJY29uc3Qgbm93ID0gRGF0ZS5ub3coKTsKCQkJaWYgKG5vdyAtIChsYXN0
UmVwYWlyQXR0ZW1wdC5nZXQoa2V5KSA/PyAwKSA8IDNlNCkgY29udGludWU7CgkJCWxhc3RSZXBh
aXJBdHRlbXB0LnNldChrZXksIG5vdyk7CgkJCWxvZ1dhcm4oYGJvbmpvdXI6IHdhdGNoZG9nIGRl
dGVjdGVkIG5vbi1hbm5vdW5jZWQgc2VydmljZTsgYXR0ZW1wdGluZyByZS1hZHZlcnRpc2UgKCR7
c2VydmljZVN1bW1hcnkobGFiZWwsIHN2Yyl9KWApOwoJCQl0cnkgewoJCQkJc3ZjLmFkdmVydGlz
ZSgpLmNhdGNoKChlcnIpID0+IHsKCQkJCQlsb2dXYXJuKGBib25qb3VyOiB3YXRjaGRvZyBhZHZl
cnRpc2UgZmFpbGVkICgke3NlcnZpY2VTdW1tYXJ5KGxhYmVsLCBzdmMpfSk6ICR7Zm9ybWF0Qm9u
am91ckVycm9yKGVycil9YCk7CgkJCQl9KTsKCQkJfSBjYXRjaCAoZXJyKSB7CgkJCQlsb2dXYXJu
KGBib25qb3VyOiB3YXRjaGRvZyBhZHZlcnRpc2UgdGhyZXcgKCR7c2VydmljZVN1bW1hcnkobGFi
ZWwsIHN2Yyl9KTogJHtmb3JtYXRCb25qb3VyRXJyb3IoZXJyKX1gKTsKCQkJfQoJCX0KCX0sIDZl
NCk7Cgl3YXRjaGRvZy51bnJlZj8uKCk7CglyZXR1cm4geyBzdG9wOiBhc3luYyAoKSA9PiB7CgkJ
Y2xlYXJJbnRlcnZhbCh3YXRjaGRvZyk7CgkJZm9yIChjb25zdCB7IHN2YyB9IG9mIHNlcnZpY2Vz
KSB0cnkgewoJCQlhd2FpdCBzdmMuZGVzdHJveSgpOwoJCX0gY2F0Y2gge30KCQl0cnkgewoJCQlh
d2FpdCByZXNwb25kZXIuc2h1dGRvd24oKTsKCQl9IGNhdGNoIHt9IGZpbmFsbHkgewoJCQljaWFv
Q2FuY2VsbGF0aW9uUmVqZWN0aW9uSGFuZGxlcj8uKCk7CgkJfQoJfSB9Owp9Ci8vI2VuZHJlZ2lv
bgovLyNyZWdpb24gc3JjL2dhdGV3YXkvc2VydmVyLWRpc2NvdmVyeS50cwpmdW5jdGlvbiBmb3Jt
YXRCb25qb3VySW5zdGFuY2VOYW1lKGRpc3BsYXlOYW1lKSB7Cgljb25zdCB0cmltbWVkID0gZGlz
cGxheU5hbWUudHJpbSgpOwoJaWYgKCF0cmltbWVkKSByZXR1cm4gIk9wZW5DbGF3IjsKCWlmICgv
b3BlbmNsYXcvaS50ZXN0KHRyaW1tZWQpKSByZXR1cm4gdHJpbW1lZDsKCXJldHVybiBgJHt0cmlt
bWVkfSAoT3BlbkNsYXcpYDsKfQpmdW5jdGlvbiByZXNvbHZlQm9uam91ckNsaVBhdGgob3B0cyA9
IHt9KSB7Cgljb25zdCBlbnZQYXRoID0gKG9wdHMuZW52ID8/IHByb2Nlc3MuZW52KS5PUEVOQ0xB
V19DTElfUEFUSD8udHJpbSgpOwoJaWYgKGVudlBhdGgpIHJldHVybiBlbnZQYXRoOwoJY29uc3Qg
c3RhdFN5bmMgPSBvcHRzLnN0YXRTeW5jID8/IGZzLnN0YXRTeW5jOwoJY29uc3QgaXNGaWxlID0g
KGNhbmRpZGF0ZSkgPT4gewoJCXRyeSB7CgkJCXJldHVybiBzdGF0U3luYyhjYW5kaWRhdGUpLmlz
RmlsZSgpOwoJCX0gY2F0Y2ggewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJfTsKCWNvbnN0IGV4ZWNQ
YXRoID0gb3B0cy5leGVjUGF0aCA/PyBwcm9jZXNzLmV4ZWNQYXRoOwoJY29uc3QgZXhlY0RpciA9
IHBhdGguZGlybmFtZShleGVjUGF0aCk7Cgljb25zdCBzaWJsaW5nQ2xpID0gcGF0aC5qb2luKGV4
ZWNEaXIsICJvcGVuY2xhdyIpOwoJaWYgKGlzRmlsZShzaWJsaW5nQ2xpKSkgcmV0dXJuIHNpYmxp
bmdDbGk7Cgljb25zdCBhcmd2UGF0aCA9IChvcHRzLmFyZ3YgPz8gcHJvY2Vzcy5hcmd2KVsxXTsK
CWlmIChhcmd2UGF0aCAmJiBpc0ZpbGUoYXJndlBhdGgpKSByZXR1cm4gYXJndlBhdGg7Cgljb25z
dCBjd2QgPSBvcHRzLmN3ZCA/PyBwcm9jZXNzLmN3ZCgpOwoJY29uc3QgZGlzdENsaSA9IHBhdGgu
am9pbihjd2QsICJkaXN0IiwgImluZGV4LmpzIik7CglpZiAoaXNGaWxlKGRpc3RDbGkpKSByZXR1
cm4gZGlzdENsaTsKCWNvbnN0IGJpbkNsaSA9IHBhdGguam9pbihjd2QsICJiaW4iLCAib3BlbmNs
YXciKTsKCWlmIChpc0ZpbGUoYmluQ2xpKSkgcmV0dXJuIGJpbkNsaTsKfQphc3luYyBmdW5jdGlv
biByZXNvbHZlVGFpbG5ldERuc0hpbnQob3B0cykgewoJY29uc3QgZW52UmF3ID0gKG9wdHM/LmVu
diA/PyBwcm9jZXNzLmVudikuT1BFTkNMQVdfVEFJTE5FVF9ETlM/LnRyaW0oKTsKCWNvbnN0IGVu
dlZhbHVlID0gZW52UmF3ICYmIGVudlJhdy5sZW5ndGggPiAwID8gZW52UmF3LnJlcGxhY2UoL1wu
JC8sICIiKSA6ICIiOwoJaWYgKGVudlZhbHVlKSByZXR1cm4gZW52VmFsdWU7CglpZiAob3B0cz8u
ZW5hYmxlZCA9PT0gZmFsc2UpIHJldHVybjsKCWNvbnN0IGV4ZWMgPSBvcHRzPy5leGVjID8/ICgo
Y29tbWFuZCwgYXJncykgPT4gcnVuRXhlYyhjb21tYW5kLCBhcmdzLCB7CgkJdGltZW91dE1zOiAx
NTAwLAoJCW1heEJ1ZmZlcjogMmU1Cgl9KSk7Cgl0cnkgewoJCXJldHVybiBhd2FpdCBnZXRUYWls
bmV0SG9zdG5hbWUoZXhlYyk7Cgl9IGNhdGNoIHsKCQlyZXR1cm47Cgl9Cn0KLy8jZW5kcmVnaW9u
Ci8vI3JlZ2lvbiBzcmMvZ2F0ZXdheS9zZXJ2ZXItZGlzY292ZXJ5LXJ1bnRpbWUudHMKYXN5bmMg
ZnVuY3Rpb24gc3RhcnRHYXRld2F5RGlzY292ZXJ5KHBhcmFtcykgewoJbGV0IGJvbmpvdXJTdG9w
ID0gbnVsbDsKCWNvbnN0IG1kbnNNb2RlID0gcGFyYW1zLm1kbnNNb2RlID8/ICJtaW5pbWFsIjsK
CWNvbnN0IGJvbmpvdXJFbmFibGVkID0gbWRuc01vZGUgIT09ICJvZmYiICYmIHByb2Nlc3MuZW52
Lk9QRU5DTEFXX0RJU0FCTEVfQk9OSk9VUiAhPT0gIjEiICYmICFwcm9jZXNzLmVudi5WSVRFU1Q7
Cgljb25zdCBtZG5zTWluaW1hbCA9IG1kbnNNb2RlICE9PSAiZnVsbCI7Cgljb25zdCB0YWlsc2Nh
bGVFbmFibGVkID0gcGFyYW1zLnRhaWxzY2FsZU1vZGUgIT09ICJvZmYiOwoJY29uc3QgdGFpbG5l
dERucyA9IGJvbmpvdXJFbmFibGVkIHx8IHBhcmFtcy53aWRlQXJlYURpc2NvdmVyeUVuYWJsZWQg
PyBhd2FpdCByZXNvbHZlVGFpbG5ldERuc0hpbnQoeyBlbmFibGVkOiB0YWlsc2NhbGVFbmFibGVk
IH0pIDogdm9pZCAwOwoJY29uc3Qgc3NoUG9ydEVudiA9IG1kbnNNaW5pbWFsID8gdm9pZCAwIDog
cHJvY2Vzcy5lbnYuT1BFTkNMQVdfU1NIX1BPUlQ/LnRyaW0oKTsKCWNvbnN0IHNzaFBvcnRQYXJz
ZWQgPSBzc2hQb3J0RW52ID8gTnVtYmVyLnBhcnNlSW50KHNzaFBvcnRFbnYsIDEwKSA6IE5hTjsK
CWNvbnN0IHNzaFBvcnQgPSBOdW1iZXIuaXNGaW5pdGUoc3NoUG9ydFBhcnNlZCkgJiYgc3NoUG9y
dFBhcnNlZCA+IDAgPyBzc2hQb3J0UGFyc2VkIDogdm9pZCAwOwoJY29uc3QgY2xpUGF0aCA9IG1k
bnNNaW5pbWFsID8gdm9pZCAwIDogcmVzb2x2ZUJvbmpvdXJDbGlQYXRoKCk7CglpZiAoYm9uam91
ckVuYWJsZWQpIHRyeSB7CgkJYm9uam91clN0b3AgPSAoYXdhaXQgc3RhcnRHYXRld2F5Qm9uam91
ckFkdmVydGlzZXIoewoJCQlpbnN0YW5jZU5hbWU6IGZvcm1hdEJvbmpvdXJJbnN0YW5jZU5hbWUo
cGFyYW1zLm1hY2hpbmVEaXNwbGF5TmFtZSksCgkJCWdhdGV3YXlQb3J0OiBwYXJhbXMucG9ydCwK
CQkJZ2F0ZXdheVRsc0VuYWJsZWQ6IHBhcmFtcy5nYXRld2F5VGxzPy5lbmFibGVkID8/IGZhbHNl
LAoJCQlnYXRld2F5VGxzRmluZ2VycHJpbnRTaGEyNTY6IHBhcmFtcy5nYXRld2F5VGxzPy5maW5n
ZXJwcmludFNoYTI1NiwKCQkJY2FudmFzUG9ydDogcGFyYW1zLmNhbnZhc1BvcnQsCgkJCXNzaFBv
cnQsCgkJCXRhaWxuZXREbnMsCgkJCWNsaVBhdGgsCgkJCW1pbmltYWw6IG1kbnNNaW5pbWFsCgkJ
fSkpLnN0b3A7Cgl9IGNhdGNoIChlcnIpIHsKCQlwYXJhbXMubG9nRGlzY292ZXJ5Lndhcm4oYGJv
bmpvdXIgYWR2ZXJ0aXNpbmcgZmFpbGVkOiAke1N0cmluZyhlcnIpfWApOwoJfQoJaWYgKHBhcmFt
cy53aWRlQXJlYURpc2NvdmVyeUVuYWJsZWQpIHsKCQljb25zdCB3aWRlQXJlYURvbWFpbiA9IHJl
c29sdmVXaWRlQXJlYURpc2NvdmVyeURvbWFpbih7IGNvbmZpZ0RvbWFpbjogcGFyYW1zLndpZGVB
cmVhRGlzY292ZXJ5RG9tYWluID8/IHZvaWQgMCB9KTsKCQlpZiAoIXdpZGVBcmVhRG9tYWluKSB7
CgkJCXBhcmFtcy5sb2dEaXNjb3Zlcnkud2FybigiZGlzY292ZXJ5LndpZGVBcmVhLmVuYWJsZWQg
aXMgdHJ1ZSwgYnV0IG5vIGRvbWFpbiB3YXMgY29uZmlndXJlZDsgc2V0IGRpc2NvdmVyeS53aWRl
QXJlYS5kb21haW4gdG8gZW5hYmxlIHVuaWNhc3QgRE5TLVNEIik7CgkJCXJldHVybiB7IGJvbmpv
dXJTdG9wIH07CgkJfQoJCWNvbnN0IHRhaWxuZXRJUHY0ID0gcGlja1ByaW1hcnlUYWlsbmV0SVB2
NCgpOwoJCWlmICghdGFpbG5ldElQdjQpIHBhcmFtcy5sb2dEaXNjb3Zlcnkud2FybigiZGlzY292
ZXJ5LndpZGVBcmVhLmVuYWJsZWQgaXMgdHJ1ZSwgYnV0IG5vIFRhaWxzY2FsZSBJUHY0IGFkZHJl
c3Mgd2FzIGZvdW5kOyBza2lwcGluZyB1bmljYXN0IEROUy1TRCB6b25lIHVwZGF0ZSIpOwoJCWVs
c2UgdHJ5IHsKCQkJY29uc3QgdGFpbG5ldElQdjYgPSBwaWNrUHJpbWFyeVRhaWxuZXRJUHY2KCk7
CgkJCWNvbnN0IHJlc3VsdCA9IGF3YWl0IHdyaXRlV2lkZUFyZWFHYXRld2F5Wm9uZSh7CgkJCQlk
b21haW46IHdpZGVBcmVhRG9tYWluLAoJCQkJZ2F0ZXdheVBvcnQ6IHBhcmFtcy5wb3J0LAoJCQkJ
ZGlzcGxheU5hbWU6IGZvcm1hdEJvbmpvdXJJbnN0YW5jZU5hbWUocGFyYW1zLm1hY2hpbmVEaXNw
bGF5TmFtZSksCgkJCQl0YWlsbmV0SVB2NCwKCQkJCXRhaWxuZXRJUHY2OiB0YWlsbmV0SVB2NiA/
PyB2b2lkIDAsCgkJCQlnYXRld2F5VGxzRW5hYmxlZDogcGFyYW1zLmdhdGV3YXlUbHM/LmVuYWJs
ZWQgPz8gZmFsc2UsCgkJCQlnYXRld2F5VGxzRmluZ2VycHJpbnRTaGEyNTY6IHBhcmFtcy5nYXRl
d2F5VGxzPy5maW5nZXJwcmludFNoYTI1NiwKCQkJCXRhaWxuZXREbnMsCgkJCQlzc2hQb3J0LAoJ
CQkJY2xpUGF0aDogcmVzb2x2ZUJvbmpvdXJDbGlQYXRoKCkKCQkJfSk7CgkJCXBhcmFtcy5sb2dE
aXNjb3ZlcnkuaW5mbyhgd2lkZS1hcmVhIEROUy1TRCAke3Jlc3VsdC5jaGFuZ2VkID8gInVwZGF0
ZWQiIDogInVuY2hhbmdlZCJ9ICgke3dpZGVBcmVhRG9tYWlufSDihpIgJHtyZXN1bHQuem9uZVBh
dGh9KWApOwoJCX0gY2F0Y2ggKGVycikgewoJCQlwYXJhbXMubG9nRGlzY292ZXJ5Lndhcm4oYHdp
ZGUtYXJlYSBkaXNjb3ZlcnkgdXBkYXRlIGZhaWxlZDogJHtTdHJpbmcoZXJyKX1gKTsKCQl9Cgl9
CglyZXR1cm4geyBib25qb3VyU3RvcCB9Owp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dh
dGV3YXkvc2VydmVyLWxhbmVzLnRzCmZ1bmN0aW9uIGFwcGx5R2F0ZXdheUxhbmVDb25jdXJyZW5j
eShjZmcpIHsKCXNldENvbW1hbmRMYW5lQ29uY3VycmVuY3koQ29tbWFuZExhbmUuQ3JvbiwgY2Zn
LmNyb24/Lm1heENvbmN1cnJlbnRSdW5zID8/IDEpOwoJc2V0Q29tbWFuZExhbmVDb25jdXJyZW5j
eShDb21tYW5kTGFuZS5NYWluLCByZXNvbHZlQWdlbnRNYXhDb25jdXJyZW50KGNmZykpOwoJc2V0
Q29tbWFuZExhbmVDb25jdXJyZW5jeShDb21tYW5kTGFuZS5TdWJhZ2VudCwgcmVzb2x2ZVN1YmFn
ZW50TWF4Q29uY3VycmVudChjZmcpKTsKfQovLyNlbmRyZWdpb24KLy8jcmVnaW9uIHNyYy9nYXRl
d2F5L2NoYXQtYWJvcnQudHMKZnVuY3Rpb24gaXNDaGF0U3RvcENvbW1hbmRUZXh0KHRleHQpIHsK
CXJldHVybiBpc0Fib3J0UmVxdWVzdFRleHQodGV4dCk7Cn0KZnVuY3Rpb24gcmVzb2x2ZUNoYXRS
dW5FeHBpcmVzQXRNcyhwYXJhbXMpIHsKCWNvbnN0IHsgbm93LCB0aW1lb3V0TXMsIGdyYWNlTXMg
PSA2ZTQsIG1pbk1zID0gMiAqIDZlNCwgbWF4TXMgPSAxNDQwICogNmU0IH0gPSBwYXJhbXM7Cglj
b25zdCB0YXJnZXQgPSBub3cgKyBNYXRoLm1heCgwLCB0aW1lb3V0TXMpICsgZ3JhY2VNczsKCWNv
bnN0IG1pbiA9IG5vdyArIG1pbk1zOwoJY29uc3QgbWF4ID0gbm93ICsgbWF4TXM7CglyZXR1cm4g
TWF0aC5taW4obWF4LCBNYXRoLm1heChtaW4sIHRhcmdldCkpOwp9CmZ1bmN0aW9uIGJyb2FkY2Fz
dENoYXRBYm9ydGVkKG9wcywgcGFyYW1zKSB7Cgljb25zdCB7IHJ1bklkLCBzZXNzaW9uS2V5LCBz
dG9wUmVhc29uLCBwYXJ0aWFsVGV4dCB9ID0gcGFyYW1zOwoJY29uc3QgcGF5bG9hZCA9IHsKCQly
dW5JZCwKCQlzZXNzaW9uS2V5LAoJCXNlcTogKG9wcy5hZ2VudFJ1blNlcS5nZXQocnVuSWQpID8/
IDApICsgMSwKCQlzdGF0ZTogImFib3J0ZWQiLAoJCXN0b3BSZWFzb24sCgkJbWVzc2FnZTogcGFy
dGlhbFRleHQgPyB7CgkJCXJvbGU6ICJhc3Npc3RhbnQiLAoJCQljb250ZW50OiBbewoJCQkJdHlw
ZTogInRleHQiLAoJCQkJdGV4dDogcGFydGlhbFRleHQKCQkJfV0sCgkJCXRpbWVzdGFtcDogRGF0
ZS5ub3coKQoJCX0gOiB2b2lkIDAKCX07CglvcHMuYnJvYWRjYXN0KCJjaGF0IiwgcGF5bG9hZCk7
CglvcHMubm9kZVNlbmRUb1Nlc3Npb24oc2Vzc2lvbktleSwgImNoYXQiLCBwYXlsb2FkKTsKfQpm
dW5jdGlvbiBhYm9ydENoYXRSdW5CeUlkKG9wcywgcGFyYW1zKSB7Cgljb25zdCB7IHJ1bklkLCBz
ZXNzaW9uS2V5LCBzdG9wUmVhc29uIH0gPSBwYXJhbXM7Cgljb25zdCBhY3RpdmUgPSBvcHMuY2hh
dEFib3J0Q29udHJvbGxlcnMuZ2V0KHJ1bklkKTsKCWlmICghYWN0aXZlKSByZXR1cm4geyBhYm9y
dGVkOiBmYWxzZSB9OwoJaWYgKGFjdGl2ZS5zZXNzaW9uS2V5ICE9PSBzZXNzaW9uS2V5KSByZXR1
cm4geyBhYm9ydGVkOiBmYWxzZSB9OwoJY29uc3QgYnVmZmVyZWRUZXh0ID0gb3BzLmNoYXRSdW5C
dWZmZXJzLmdldChydW5JZCk7Cgljb25zdCBwYXJ0aWFsVGV4dCA9IGJ1ZmZlcmVkVGV4dCAmJiBi
dWZmZXJlZFRleHQudHJpbSgpID8gYnVmZmVyZWRUZXh0IDogdm9pZCAwOwoJb3BzLmNoYXRBYm9y
dGVkUnVucy5zZXQocnVuSWQsIERhdGUubm93KCkpOwoJYWN0aXZlLmNvbnRyb2xsZXIuYWJvcnQo
KTsKCW9wcy5jaGF0QWJvcnRDb250cm9sbGVycy5kZWxldGUocnVuSWQpOwoJb3BzLmNoYXRSdW5C
dWZmZXJzLmRlbGV0ZShydW5JZCk7CglvcHMuY2hhdERlbHRhU2VudEF0LmRlbGV0ZShydW5JZCk7
Cgljb25zdCByZW1vdmVkID0gb3BzLnJlbW92ZUNoYXRSdW4ocnVuSWQsIHJ1bklkLCBzZXNzaW9u
S2V5KTsKCWJyb2FkY2FzdENoYXRBYm9ydGVkKG9wcywgewoJCXJ1bklkLAoJCXNlc3Npb25LZXks
CgkJc3RvcFJlYXNvbiwKCQlwYXJ0aWFsVGV4dAoJfSk7CglvcHMuYWdlbnRSdW5TZXEuZGVsZXRl
KHJ1bklkKTsKCWlmIChyZW1vdmVkPy5jbGllbnRSdW5JZCkgb3BzLmFnZW50UnVuU2VxLmRlbGV0
ZShyZW1vdmVkLmNsaWVudFJ1bklkKTsKCXJldHVybiB7IGFib3J0ZWQ6IHRydWUgfTsKfQovLyNl
bmRyZWdpb24KLy8jcmVnaW9uIHNyYy9nYXRld2F5L3NlcnZlci1jb25zdGFudHMudHMKY29uc3Qg
TUFYX1BBWUxPQURfQllURVMgPSAyNSAqIDEwMjQgKiAxMDI0Owpjb25zdCBNQVhfQlVGRkVSRURf
QllURVMgPSA1MCAqIDEwMjQgKiAxMDI0Owpjb25zdCBNQVhfUFJFQVVUSF9QQVlMT0FEX0JZVEVT
ID0gNjQgKiAxMDI0OwpsZXQgbWF4Q2hhdEhpc3RvcnlNZXNzYWdlc0J5dGVzID0gNiAqIDEwMjQg
KiAxMDI0Owpjb25zdCBnZXRNYXhDaGF0SGlzdG9yeU1lc3NhZ2VzQnl0ZXMgPSAoKSA9PiBtYXhD
aGF0SGlzdG9yeU1lc3NhZ2VzQnl0ZXM7CmNvbnN0IERFRkFVTFRfSEFORFNIQUtFX1RJTUVPVVRf
TVMgPSAzZTM7CmNvbnN0IGdldEhhbmRzaGFrZVRpbWVvdXRNcyA9ICgpID0+IHsKCWlmIChwcm9j
ZXNzLmVudi5WSVRFU1QgJiYgcHJvY2Vzcy5lbnYuT1BFTkNMQVdfVEVTVF9IQU5EU0hBS0VfVElN
RU9VVF9NUykgewoJCWNvbnN0IHBhcnNlZCA9IE51bWJlcihwcm9jZXNzLmVudi5PUEVOQ0xBV19U
RVNUX0hBTkRTSEFLRV9USU1FT1VUX01TKTsKCQlpZiAoTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkg
JiYgcGFyc2VkID4gMCkgcmV0dXJuIHBhcnNlZDsKCX0KCXJldHVybiBERUZBVUxUX0hBTkRTSEFL
RV9USU1FT1VUX01TOwp9Owpjb25zdCBUSUNLX0lOVEVSVkFMX01TID0gM2U0Owpjb25zdCBIRUFM
VEhfUkVGUkVTSF9JTlRFUlZBTF9NUyA9IDZlNDsKY29uc3QgREVEVVBFX1RUTF9NUyA9IDUgKiA2
ZTQ7CmNvbnN0IERFRFVQRV9NQVggPSAxZTM7Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2lu
ZnJhL3ZvaWNld2FrZS50cwpjb25zdCBERUZBVUxUX1RSSUdHRVJTID0gWwoJIm9wZW5jbGF3IiwK
CSJjbGF1ZGUiLAoJImNvbXB1dGVyIgpdOwpmdW5jdGlvbiByZXNvbHZlUGF0aChiYXNlRGlyKSB7
Cgljb25zdCByb290ID0gYmFzZURpciA/PyByZXNvbHZlU3RhdGVEaXIoKTsKCXJldHVybiBwYXRo
LmpvaW4ocm9vdCwgInNldHRpbmdzIiwgInZvaWNld2FrZS5qc29uIik7Cn0KZnVuY3Rpb24gc2Fu
aXRpemVUcmlnZ2Vycyh0cmlnZ2VycykgewoJY29uc3QgY2xlYW5lZCA9ICh0cmlnZ2VycyA/PyBb
XSkubWFwKCh3KSA9PiB0eXBlb2YgdyA9PT0gInN0cmluZyIgPyB3LnRyaW0oKSA6ICIiKS5maWx0
ZXIoKHcpID0+IHcubGVuZ3RoID4gMCk7CglyZXR1cm4gY2xlYW5lZC5sZW5ndGggPiAwID8gY2xl
YW5lZCA6IERFRkFVTFRfVFJJR0dFUlM7Cn0KY29uc3Qgd2l0aExvY2sgPSBjcmVhdGVBc3luY0xv
Y2soKTsKZnVuY3Rpb24gZGVmYXVsdFZvaWNlV2FrZVRyaWdnZXJzKCkgewoJcmV0dXJuIFsuLi5E
RUZBVUxUX1RSSUdHRVJTXTsKfQphc3luYyBmdW5jdGlvbiBsb2FkVm9pY2VXYWtlQ29uZmlnKGJh
c2VEaXIpIHsKCWNvbnN0IGV4aXN0aW5nID0gYXdhaXQgcmVhZEpzb25GaWxlKHJlc29sdmVQYXRo
KGJhc2VEaXIpKTsKCWlmICghZXhpc3RpbmcpIHJldHVybiB7CgkJdHJpZ2dlcnM6IGRlZmF1bHRW
b2ljZVdha2VUcmlnZ2VycygpLAoJCXVwZGF0ZWRBdE1zOiAwCgl9OwoJcmV0dXJuIHsKCQl0cmln
Z2Vyczogc2FuaXRpemVUcmlnZ2VycyhleGlzdGluZy50cmlnZ2VycyksCgkJdXBkYXRlZEF0TXM6
IHR5cGVvZiBleGlzdGluZy51cGRhdGVkQXRNcyA9PT0gIm51bWJlciIgJiYgZXhpc3RpbmcudXBk
YXRlZEF0TXMgPiAwID8gZXhpc3RpbmcudXBkYXRlZEF0TXMgOiAwCgl9Owp9CmFzeW5jIGZ1bmN0
aW9uIHNldFZvaWNlV2FrZVRyaWdnZXJzKHRyaWdnZXJzLCBiYXNlRGlyKSB7Cgljb25zdCBzYW5p
dGl6ZWQgPSBzYW5pdGl6ZVRyaWdnZXJzKHRyaWdnZXJzKTsKCWNvbnN0IGZpbGVQYXRoID0gcmVz
b2x2ZVBhdGgoYmFzZURpcik7CglyZXR1cm4gYXdhaXQgd2l0aExvY2soYXN5bmMgKCkgPT4gewoJ
CWNvbnN0IG5leHQgPSB7CgkJCXRyaWdnZXJzOiBzYW5pdGl6ZWQsCgkJCXVwZGF0ZWRBdE1zOiBE
YXRlLm5vdygpCgkJfTsKCQlhd2FpdCB3cml0ZUpzb25BdG9taWMoZmlsZVBhdGgsIG5leHQpOwoJ
CXJldHVybiBuZXh0OwoJfSk7Cn0KLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvZ2F0ZXdheS9z
ZXJ2ZXItdXRpbHMudHMKZnVuY3Rpb24gbm9ybWFsaXplVm9pY2VXYWtlVHJpZ2dlcnMoaW5wdXQp
IHsKCWNvbnN0IGNsZWFuZWQgPSAoQXJyYXkuaXNBcnJheShpbnB1dCkgPyBpbnB1dCA6IFtdKS5t
YXAoKHYpID0+IHR5cGVvZiB2ID09PSAic3RyaW5nIiA/IHYudHJpbSgpIDogIiIpLmZpbHRlcigo
dikgPT4gdi5sZW5ndGggPiAwKS5zbGljZSgwLCAzMikubWFwKCh2KSA9PiB2LnNsaWNlKDAsIDY0
KSk7CglyZXR1cm4gY2xlYW5lZC5sZW5ndGggPiAwID8gY2xlYW5lZCA6IGRlZmF1bHRWb2ljZVdh
a2VUcmlnZ2VycygpOwp9CmZ1bmN0aW9uIGZvcm1hdEVycm9yKGVycikgewoJaWYgKGVyciBpbnN0
YW5jZW9mIEVycm9yKSByZXR1cm4gZXJyLm1lc3NhZ2U7CglpZiAodHlwZW9mIGVyciA9PT0gInN0
cmluZyIpIHJldHVybiBlcnI7Cgljb25zdCBzdGF0dXNWYWx1ZSA9IGVycj8uc3RhdHVzOwoJY29u
c3QgY29kZVZhbHVlID0gZXJyPy5jb2RlOwoJaWYgKHN0YXR1c1ZhbHVlICE9PSB2b2lkIDAgfHwg
Y29kZVZhbHVlICE9PSB2b2lkIDApIHJldHVybiBgc3RhdHVzPSR7dHlwZW9mIHN0YXR1c1ZhbHVl
ID09PSAic3RyaW5nIiB8fCB0eXBlb2Ygc3RhdHVzVmFsdWUgPT09ICJudW1iZXIiID8gU3RyaW5n
KHN0YXR1c1ZhbHVlKSA6ICJ1bmtub3duIn0gY29kZT0ke3R5cGVvZiBjb2RlVmFsdWUgPT09ICJz
dHJpbmciIHx8IHR5cGVvZiBjb2RlVmFsdWUgPT09ICJudW1iZXIiID8gU3RyaW5nKGNvZGVWYWx1
ZSkgOiAidW5rbm93biJ9YDsKCXRyeSB7CgkJcmV0dXJuIEpTT04uc3RyaW5naWZ5KGVyciwgbnVs
bCwgMik7Cgl9IGNhdGNoIHsKCQlyZXR1cm4gU3RyaW5nKGVycik7Cgl9Cn0KLy8jZW5kcmVnaW9u
Ci8vI3JlZ2lvbiBzcmMvaW5mcmEvc3lzdGVtLXByZXNlbmNlLnRzCmNvbnN0IGVudHJpZXMgPSAv
KiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwpjb25zdCBUVExfTVMgPSAzMDAgKiAxZTM7CmNvbnN0
IE1BWF9FTlRSSUVTID0gMjAwOwpmdW5jdGlvbiBub3JtYWxpemVQcmVzZW5jZUtleShrZXkpIHsK
CWlmICgha2V5KSByZXR1cm47Cgljb25zdCB0cmltbWVkID0ga2V5LnRyaW0oKTsKCWlmICghdHJp
bW1lZCkgcmV0dXJuOwoJcmV0dXJuIHRyaW1tZWQudG9Mb3dlckNhc2UoKTsKfQpmdW5jdGlvbiBy
ZXNvbHZlUHJpbWFyeUlQdjQoKSB7CglyZXR1cm4gcGlja1ByaW1hcnlMYW5JUHY0KCkgPz8gb3Mu
aG9zdG5hbWUoKTsKfQpmdW5jdGlvbiBpbml0U2VsZlByZXNlbmNlKCkgewoJY29uc3QgaG9zdCA9
IG9zLmhvc3RuYW1lKCk7Cgljb25zdCBpcCA9IHJlc29sdmVQcmltYXJ5SVB2NCgpID8/IHZvaWQg
MDsKCWNvbnN0IHZlcnNpb24gPSByZXNvbHZlUnVudGltZVNlcnZpY2VWZXJzaW9uKHByb2Nlc3Mu
ZW52KTsKCWNvbnN0IG1vZGVsSWRlbnRpZmllciA9ICgoKSA9PiB7CgkJaWYgKG9zLnBsYXRmb3Jt
KCkgPT09ICJkYXJ3aW4iKSB7CgkJCWNvbnN0IHJlcyA9IHNwYXduU3luYygic3lzY3RsIiwgWyIt
biIsICJody5tb2RlbCJdLCB7IGVuY29kaW5nOiAidXRmLTgiIH0pOwoJCQljb25zdCBvdXQgPSB0
eXBlb2YgcmVzLnN0ZG91dCA9PT0gInN0cmluZyIgPyByZXMuc3Rkb3V0LnRyaW0oKSA6ICIiOwoJ
CQlyZXR1cm4gb3V0Lmxlbmd0aCA+IDAgPyBvdXQgOiB2b2lkIDA7CgkJfQoJCXJldHVybiBvcy5h
cmNoKCk7Cgl9KSgpOwoJY29uc3QgbWFjT1NWZXJzaW9uID0gKCkgPT4gewoJCWNvbnN0IHJlcyA9
IHNwYXduU3luYygic3dfdmVycyIsIFsiLXByb2R1Y3RWZXJzaW9uIl0sIHsgZW5jb2Rpbmc6ICJ1
dGYtOCIgfSk7CgkJY29uc3Qgb3V0ID0gdHlwZW9mIHJlcy5zdGRvdXQgPT09ICJzdHJpbmciID8g
cmVzLnN0ZG91dC50cmltKCkgOiAiIjsKCQlyZXR1cm4gb3V0Lmxlbmd0aCA+IDAgPyBvdXQgOiBv
cy5yZWxlYXNlKCk7Cgl9OwoJY29uc3Qgc2VsZkVudHJ5ID0gewoJCWhvc3QsCgkJaXAsCgkJdmVy
c2lvbiwKCQlwbGF0Zm9ybTogKCgpID0+IHsKCQkJY29uc3QgcCA9IG9zLnBsYXRmb3JtKCk7CgkJ
CWNvbnN0IHJlbCA9IG9zLnJlbGVhc2UoKTsKCQkJaWYgKHAgPT09ICJkYXJ3aW4iKSByZXR1cm4g
YG1hY29zICR7bWFjT1NWZXJzaW9uKCl9YDsKCQkJaWYgKHAgPT09ICJ3aW4zMiIpIHJldHVybiBg
d2luZG93cyAke3JlbH1gOwoJCQlyZXR1cm4gYCR7cH0gJHtyZWx9YDsKCQl9KSgpLAoJCWRldmlj
ZUZhbWlseTogKCgpID0+IHsKCQkJY29uc3QgcCA9IG9zLnBsYXRmb3JtKCk7CgkJCWlmIChwID09
PSAiZGFyd2luIikgcmV0dXJuICJNYWMiOwoJCQlpZiAocCA9PT0gIndpbjMyIikgcmV0dXJuICJX
aW5kb3dzIjsKCQkJaWYgKHAgPT09ICJsaW51eCIpIHJldHVybiAiTGludXgiOwoJCQlyZXR1cm4g
cDsKCQl9KSgpLAoJCW1vZGVsSWRlbnRpZmllciwKCQltb2RlOiAiZ2F0ZXdheSIsCgkJcmVhc29u
OiAic2VsZiIsCgkJdGV4dDogYEdhdGV3YXk6ICR7aG9zdH0ke2lwID8gYCAoJHtpcH0pYCA6ICIi
fSDCtyBhcHAgJHt2ZXJzaW9ufSDCtyBtb2RlIGdhdGV3YXkgwrcgcmVhc29uIHNlbGZgLAoJCXRz
OiBEYXRlLm5vdygpCgl9OwoJY29uc3Qga2V5ID0gaG9zdC50b0xvd2VyQ2FzZSgpOwoJZW50cmll
cy5zZXQoa2V5LCBzZWxmRW50cnkpOwp9CmZ1bmN0aW9uIGVuc3VyZVNlbGZQcmVzZW5jZSgpIHsK
CWlmIChlbnRyaWVzLnNpemUgPT09IDApIGluaXRTZWxmUHJlc2VuY2UoKTsKfQpmdW5jdGlvbiB0
b3VjaFNlbGZQcmVzZW5jZSgpIHsKCWNvbnN0IGtleSA9IG9zLmhvc3RuYW1lKCkudG9Mb3dlckNh
c2UoKTsKCWNvbnN0IGV4aXN0aW5nID0gZW50cmllcy5nZXQoa2V5KTsKCWlmIChleGlzdGluZykg
ZW50cmllcy5zZXQoa2V5LCB7CgkJLi4uZXhpc3RpbmcsCgkJdHM6IERhdGUubm93KCkKCX0pOwoJ
ZWxzZSBpbml0U2VsZlByZXNlbmNlKCk7Cn0KaW5pdFNlbGZQcmVzZW5jZSgpOwpmdW5jdGlvbiBw
YXJzZVByZXNlbmNlKHRleHQpIHsKCWNvbnN0IHRyaW1tZWQgPSB0ZXh0LnRyaW0oKTsKCWNvbnN0
IG1hdGNoID0gdHJpbW1lZC5tYXRjaCgvTm9kZTpccyooW14gKF0rKVxzKlwoKFteKV0rKVwpXHMq
wrdccyphcHBccyooW17Ct10rPylccyrCt1xzKmxhc3QgaW5wdXRccyooWzAtOV0rKXMgYWdvXHMq
wrdccyptb2RlXHMqKFtewrddKz8pXHMqwrdccypyZWFzb25ccyooLispJC9pKTsKCWlmICghbWF0
Y2gpIHJldHVybiB7CgkJdGV4dDogdHJpbW1lZCwKCQl0czogRGF0ZS5ub3coKQoJfTsKCWNvbnN0
IFssIGhvc3QsIGlwLCB2ZXJzaW9uLCBsYXN0SW5wdXRTdHIsIG1vZGUsIHJlYXNvblJhd10gPSBt
YXRjaDsKCWNvbnN0IGxhc3RJbnB1dFNlY29uZHMgPSBOdW1iZXIucGFyc2VJbnQobGFzdElucHV0
U3RyLCAxMCk7Cgljb25zdCByZWFzb24gPSByZWFzb25SYXcudHJpbSgpOwoJcmV0dXJuIHsKCQlo
b3N0OiBob3N0LnRyaW0oKSwKCQlpcDogaXAudHJpbSgpLAoJCXZlcnNpb246IHZlcnNpb24udHJp
bSgpLAoJCWxhc3RJbnB1dFNlY29uZHM6IE51bWJlci5pc0Zpbml0ZShsYXN0SW5wdXRTZWNvbmRz
KSA/IGxhc3RJbnB1dFNlY29uZHMgOiB2b2lkIDAsCgkJbW9kZTogbW9kZS50cmltKCksCgkJcmVh
c29uLAoJCXRleHQ6IHRyaW1tZWQsCgkJdHM6IERhdGUubm93KCkKCX07Cn0KZnVuY3Rpb24gbWVy
Z2VTdHJpbmdMaXN0KC4uLnZhbHVlcykgewoJY29uc3Qgb3V0ID0gLyogQF9fUFVSRV9fICovIG5l
dyBTZXQoKTsKCWZvciAoY29uc3QgbGlzdCBvZiB2YWx1ZXMpIHsKCQlpZiAoIUFycmF5LmlzQXJy
YXkobGlzdCkpIGNvbnRpbnVlOwoJCWZvciAoY29uc3QgaXRlbSBvZiBsaXN0KSB7CgkJCWNvbnN0
IHRyaW1tZWQgPSBTdHJpbmcoaXRlbSkudHJpbSgpOwoJCQlpZiAodHJpbW1lZCkgb3V0LmFkZCh0
cmltbWVkKTsKCQl9Cgl9CglyZXR1cm4gb3V0LnNpemUgPiAwID8gWy4uLm91dF0gOiB2b2lkIDA7
Cn0KZnVuY3Rpb24gdXBkYXRlU3lzdGVtUHJlc2VuY2UocGF5bG9hZCkgewoJZW5zdXJlU2VsZlBy
ZXNlbmNlKCk7Cgljb25zdCBwYXJzZWQgPSBwYXJzZVByZXNlbmNlKHBheWxvYWQudGV4dCk7Cglj
b25zdCBrZXkgPSBub3JtYWxpemVQcmVzZW5jZUtleShwYXlsb2FkLmRldmljZUlkKSB8fCBub3Jt
YWxpemVQcmVzZW5jZUtleShwYXlsb2FkLmluc3RhbmNlSWQpIHx8IG5vcm1hbGl6ZVByZXNlbmNl
S2V5KHBhcnNlZC5pbnN0YW5jZUlkKSB8fCBub3JtYWxpemVQcmVzZW5jZUtleShwYXJzZWQuaG9z
dCkgfHwgcGFyc2VkLmlwIHx8IHBhcnNlZC50ZXh0LnNsaWNlKDAsIDY0KSB8fCBvcy5ob3N0bmFt
ZSgpLnRvTG93ZXJDYXNlKCk7Cgljb25zdCBoYWRFeGlzdGluZyA9IGVudHJpZXMuaGFzKGtleSk7
Cgljb25zdCBleGlzdGluZyA9IGVudHJpZXMuZ2V0KGtleSkgPz8ge307Cgljb25zdCBtZXJnZWQg
PSB7CgkJLi4uZXhpc3RpbmcsCgkJLi4ucGFyc2VkLAoJCWhvc3Q6IHBheWxvYWQuaG9zdCA/PyBw
YXJzZWQuaG9zdCA/PyBleGlzdGluZy5ob3N0LAoJCWlwOiBwYXlsb2FkLmlwID8/IHBhcnNlZC5p
cCA/PyBleGlzdGluZy5pcCwKCQl2ZXJzaW9uOiBwYXlsb2FkLnZlcnNpb24gPz8gcGFyc2VkLnZl
cnNpb24gPz8gZXhpc3RpbmcudmVyc2lvbiwKCQlwbGF0Zm9ybTogcGF5bG9hZC5wbGF0Zm9ybSA/
PyBleGlzdGluZy5wbGF0Zm9ybSwKCQlkZXZpY2VGYW1pbHk6IHBheWxvYWQuZGV2aWNlRmFtaWx5
ID8/IGV4aXN0aW5nLmRldmljZUZhbWlseSwKCQltb2RlbElkZW50aWZpZXI6IHBheWxvYWQubW9k
ZWxJZGVudGlmaWVyID8/IGV4aXN0aW5nLm1vZGVsSWRlbnRpZmllciwKCQltb2RlOiBwYXlsb2Fk
Lm1vZGUgPz8gcGFyc2VkLm1vZGUgPz8gZXhpc3RpbmcubW9kZSwKCQlsYXN0SW5wdXRTZWNvbmRz
OiBwYXlsb2FkLmxhc3RJbnB1dFNlY29uZHMgPz8gcGFyc2VkLmxhc3RJbnB1dFNlY29uZHMgPz8g
ZXhpc3RpbmcubGFzdElucHV0U2Vjb25kcywKCQlyZWFzb246IHBheWxvYWQucmVhc29uID8/IHBh
cnNlZC5yZWFzb24gPz8gZXhpc3RpbmcucmVhc29uLAoJCWRldmljZUlkOiBwYXlsb2FkLmRldmlj
ZUlkID8/IGV4aXN0aW5nLmRldmljZUlkLAoJCXJvbGVzOiBtZXJnZVN0cmluZ0xpc3QoZXhpc3Rp
bmcucm9sZXMsIHBheWxvYWQucm9sZXMpLAoJCXNjb3BlczogbWVyZ2VTdHJpbmdMaXN0KGV4aXN0
aW5nLnNjb3BlcywgcGF5bG9hZC5zY29wZXMpLAoJCWluc3RhbmNlSWQ6IHBheWxvYWQuaW5zdGFu
Y2VJZCA/PyBwYXJzZWQuaW5zdGFuY2VJZCA/PyBleGlzdGluZy5pbnN0YW5jZUlkLAoJCXRleHQ6
IHBheWxvYWQudGV4dCB8fCBwYXJzZWQudGV4dCB8fCBleGlzdGluZy50ZXh0LAoJCXRzOiBEYXRl
Lm5vdygpCgl9OwoJZW50cmllcy5zZXQoa2V5LCBtZXJnZWQpOwoJY29uc3QgdHJhY2tLZXlzID0g
WwoJCSJob3N0IiwKCQkiaXAiLAoJCSJ2ZXJzaW9uIiwKCQkibW9kZSIsCgkJInJlYXNvbiIKCV07
Cgljb25zdCBjaGFuZ2VzID0ge307Cgljb25zdCBjaGFuZ2VkS2V5cyA9IFtdOwoJZm9yIChjb25z
dCBrIG9mIHRyYWNrS2V5cykgewoJCWNvbnN0IHByZXYgPSBleGlzdGluZ1trXTsKCQljb25zdCBu
ZXh0ID0gbWVyZ2VkW2tdOwoJCWlmIChwcmV2ICE9PSBuZXh0KSB7CgkJCWNoYW5nZXNba10gPSBu
ZXh0OwoJCQljaGFuZ2VkS2V5cy5wdXNoKGspOwoJCX0KCX0KCXJldHVybiB7CgkJa2V5LAoJCXBy
ZXZpb3VzOiBoYWRFeGlzdGluZyA/IGV4aXN0aW5nIDogdm9pZCAwLAoJCW5leHQ6IG1lcmdlZCwK
CQljaGFuZ2VzLAoJCWNoYW5nZWRLZXlzCgl9Owp9CmZ1bmN0aW9uIHVwc2VydFByZXNlbmNlKGtl
eSwgcHJlc2VuY2UpIHsKCWVuc3VyZVNlbGZQcmVzZW5jZSgpOwoJY29uc3Qgbm9ybWFsaXplZEtl
eSA9IG5vcm1hbGl6ZVByZXNlbmNlS2V5KGtleSkgPz8gb3MuaG9zdG5hbWUoKS50b0xvd2VyQ2Fz
ZSgpOwoJY29uc3QgZXhpc3RpbmcgPSBlbnRyaWVzLmdldChub3JtYWxpemVkS2V5KSA/PyB7fTsK
CWNvbnN0IHJvbGVzID0gbWVyZ2VTdHJpbmdMaXN0KGV4aXN0aW5nLnJvbGVzLCBwcmVzZW5jZS5y
b2xlcyk7Cgljb25zdCBzY29wZXMgPSBtZXJnZVN0cmluZ0xpc3QoZXhpc3Rpbmcuc2NvcGVzLCBw
cmVzZW5jZS5zY29wZXMpOwoJY29uc3QgbWVyZ2VkID0gewoJCS4uLmV4aXN0aW5nLAoJCS4uLnBy
ZXNlbmNlLAoJCXJvbGVzLAoJCXNjb3BlcywKCQl0czogRGF0ZS5ub3coKSwKCQl0ZXh0OiBwcmVz
ZW5jZS50ZXh0IHx8IGV4aXN0aW5nLnRleHQgfHwgYE5vZGU6ICR7cHJlc2VuY2UuaG9zdCA/PyBl
eGlzdGluZy5ob3N0ID8/ICJ1bmtub3duIn0gwrcgbW9kZSAke3ByZXNlbmNlLm1vZGUgPz8gZXhp
c3RpbmcubW9kZSA/PyAidW5rbm93biJ9YAoJfTsKCWVudHJpZXMuc2V0KG5vcm1hbGl6ZWRLZXks
IG1lcmdlZCk7Cn0KZnVuY3Rpb24gbGlzdFN5c3RlbVByZXNlbmNlKCkgewoJZW5zdXJlU2VsZlBy
ZXNlbmNlKCk7Cgljb25zdCBub3cgPSBEYXRlLm5vdygpOwoJZm9yIChjb25zdCBbaywgdl0gb2Yg
ZW50cmllcykgaWYgKG5vdyAtIHYudHMgPiBUVExfTVMpIGVudHJpZXMuZGVsZXRlKGspOwoJaWYg
KGVudHJpZXMuc2l6ZSA+IE1BWF9FTlRSSUVTKSB7CgkJY29uc3Qgc29ydGVkID0gWy4uLmVudHJp
ZXMuZW50cmllcygpXS50b1NvcnRlZCgoYSwgYikgPT4gYVsxXS50cyAtIGJbMV0udHMpOwoJCWNv
bnN0IHRvRHJvcCA9IGVudHJpZXMuc2l6ZSAtIE1BWF9FTlRSSUVTOwoJCWZvciAobGV0IGkgPSAw
OyBpIDwgdG9Ecm9wOyBpKyspIGVudHJpZXMuZGVsZXRlKHNvcnRlZFtpXVswXSk7Cgl9Cgl0b3Vj
aFNlbGZQcmVzZW5jZSgpOwoJcmV0dXJuIFsuLi5lbnRyaWVzLnZhbHVlcygpXS50b1NvcnRlZCgo
YSwgYikgPT4gYi50cyAtIGEudHMpOwp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dhdGV3
YXkvc2VydmVyL2hlYWx0aC1zdGF0ZS50cwpsZXQgcHJlc2VuY2VWZXJzaW9uID0gMTsKbGV0IGhl
YWx0aFZlcnNpb24gPSAxOwpsZXQgaGVhbHRoQ2FjaGUgPSBudWxsOwpsZXQgaGVhbHRoUmVmcmVz
aCA9IG51bGw7CmxldCBicm9hZGNhc3RIZWFsdGhVcGRhdGUgPSBudWxsOwpmdW5jdGlvbiBidWls
ZEdhdGV3YXlTbmFwc2hvdCgpIHsKCWNvbnN0IGNmZyA9IGxvYWRDb25maWcoKTsKCWNvbnN0IGNv
bmZpZ1BhdGggPSBjcmVhdGVDb25maWdJTygpLmNvbmZpZ1BhdGg7Cgljb25zdCBkZWZhdWx0QWdl
bnRJZCA9IHJlc29sdmVEZWZhdWx0QWdlbnRJZChjZmcpOwoJY29uc3QgbWFpbktleSA9IG5vcm1h
bGl6ZU1haW5LZXkoY2ZnLnNlc3Npb24/Lm1haW5LZXkpOwoJY29uc3QgbWFpblNlc3Npb25LZXkg
PSByZXNvbHZlTWFpblNlc3Npb25LZXkoY2ZnKTsKCWNvbnN0IHNjb3BlID0gY2ZnLnNlc3Npb24/
LnNjb3BlID8/ICJwZXItc2VuZGVyIjsKCWNvbnN0IHByZXNlbmNlID0gbGlzdFN5c3RlbVByZXNl
bmNlKCk7Cgljb25zdCB1cHRpbWVNcyA9IE1hdGgucm91bmQocHJvY2Vzcy51cHRpbWUoKSAqIDFl
Myk7Cgljb25zdCBhdXRoID0gcmVzb2x2ZUdhdGV3YXlBdXRoKHsKCQlhdXRoQ29uZmlnOiBjZmcu
Z2F0ZXdheT8uYXV0aCwKCQllbnY6IHByb2Nlc3MuZW52Cgl9KTsKCWNvbnN0IHVwZGF0ZUF2YWls
YWJsZSA9IGdldFVwZGF0ZUF2YWlsYWJsZSgpID8/IHZvaWQgMDsKCXJldHVybiB7CgkJcHJlc2Vu
Y2UsCgkJaGVhbHRoOiB7fSwKCQlzdGF0ZVZlcnNpb246IHsKCQkJcHJlc2VuY2U6IHByZXNlbmNl
VmVyc2lvbiwKCQkJaGVhbHRoOiBoZWFsdGhWZXJzaW9uCgkJfSwKCQl1cHRpbWVNcywKCQljb25m
aWdQYXRoLAoJCXN0YXRlRGlyOiBTVEFURV9ESVIsCgkJc2Vzc2lvbkRlZmF1bHRzOiB7CgkJCWRl
ZmF1bHRBZ2VudElkLAoJCQltYWluS2V5LAoJCQltYWluU2Vzc2lvbktleSwKCQkJc2NvcGUKCQl9
LAoJCWF1dGhNb2RlOiBhdXRoLm1vZGUsCgkJdXBkYXRlQXZhaWxhYmxlCgl9Owp9CmZ1bmN0aW9u
IGdldEhlYWx0aENhY2hlKCkgewoJcmV0dXJuIGhlYWx0aENhY2hlOwp9CmZ1bmN0aW9uIGdldEhl
YWx0aFZlcnNpb24oKSB7CglyZXR1cm4gaGVhbHRoVmVyc2lvbjsKfQpmdW5jdGlvbiBpbmNyZW1l
bnRQcmVzZW5jZVZlcnNpb24oKSB7CglwcmVzZW5jZVZlcnNpb24gKz0gMTsKCXJldHVybiBwcmVz
ZW5jZVZlcnNpb247Cn0KZnVuY3Rpb24gZ2V0UHJlc2VuY2VWZXJzaW9uKCkgewoJcmV0dXJuIHBy
ZXNlbmNlVmVyc2lvbjsKfQpmdW5jdGlvbiBzZXRCcm9hZGNhc3RIZWFsdGhVcGRhdGUoZm4pIHsK
CWJyb2FkY2FzdEhlYWx0aFVwZGF0ZSA9IGZuOwp9CmFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hHYXRl
d2F5SGVhbHRoU25hcHNob3Qob3B0cykgewoJaWYgKCFoZWFsdGhSZWZyZXNoKSBoZWFsdGhSZWZy
ZXNoID0gKGFzeW5jICgpID0+IHsKCQljb25zdCBzbmFwID0gYXdhaXQgZ2V0SGVhbHRoU25hcHNo
b3QoeyBwcm9iZTogb3B0cz8ucHJvYmUgfSk7CgkJaGVhbHRoQ2FjaGUgPSBzbmFwOwoJCWhlYWx0
aFZlcnNpb24gKz0gMTsKCQlpZiAoYnJvYWRjYXN0SGVhbHRoVXBkYXRlKSBicm9hZGNhc3RIZWFs
dGhVcGRhdGUoc25hcCk7CgkJcmV0dXJuIHNuYXA7Cgl9KSgpLmZpbmFsbHkoKCkgPT4gewoJCWhl
YWx0aFJlZnJlc2ggPSBudWxsOwoJfSk7CglyZXR1cm4gaGVhbHRoUmVmcmVzaDsKfQovLyNlbmRy
ZWdpb24KLy8jcmVnaW9uIHNyYy9nYXRld2F5L3NlcnZlci1tYWludGVuYW5jZS50cwpmdW5jdGlv
biBzdGFydEdhdGV3YXlNYWludGVuYW5jZVRpbWVycyhwYXJhbXMpIHsKCXNldEJyb2FkY2FzdEhl
YWx0aFVwZGF0ZSgoc25hcCkgPT4gewoJCXBhcmFtcy5icm9hZGNhc3QoImhlYWx0aCIsIHNuYXAs
IHsgc3RhdGVWZXJzaW9uOiB7CgkJCXByZXNlbmNlOiBwYXJhbXMuZ2V0UHJlc2VuY2VWZXJzaW9u
KCksCgkJCWhlYWx0aDogcGFyYW1zLmdldEhlYWx0aFZlcnNpb24oKQoJCX0gfSk7CgkJcGFyYW1z
Lm5vZGVTZW5kVG9BbGxTdWJzY3JpYmVkKCJoZWFsdGgiLCBzbmFwKTsKCX0pOwoJY29uc3QgdGlj
a0ludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4gewoJCWNvbnN0IHBheWxvYWQgPSB7IHRzOiBE
YXRlLm5vdygpIH07CgkJcGFyYW1zLmJyb2FkY2FzdCgidGljayIsIHBheWxvYWQsIHsgZHJvcElm
U2xvdzogdHJ1ZSB9KTsKCQlwYXJhbXMubm9kZVNlbmRUb0FsbFN1YnNjcmliZWQoInRpY2siLCBw
YXlsb2FkKTsKCX0sIFRJQ0tfSU5URVJWQUxfTVMpOwoJY29uc3QgaGVhbHRoSW50ZXJ2YWwgPSBz
ZXRJbnRlcnZhbCgoKSA9PiB7CgkJcGFyYW1zLnJlZnJlc2hHYXRld2F5SGVhbHRoU25hcHNob3Qo
eyBwcm9iZTogdHJ1ZSB9KS5jYXRjaCgoZXJyKSA9PiBwYXJhbXMubG9nSGVhbHRoLmVycm9yKGBy
ZWZyZXNoIGZhaWxlZDogJHtmb3JtYXRFcnJvcihlcnIpfWApKTsKCX0sIEhFQUxUSF9SRUZSRVNI
X0lOVEVSVkFMX01TKTsKCXBhcmFtcy5yZWZyZXNoR2F0ZXdheUhlYWx0aFNuYXBzaG90KHsgcHJv
YmU6IHRydWUgfSkuY2F0Y2goKGVycikgPT4gcGFyYW1zLmxvZ0hlYWx0aC5lcnJvcihgaW5pdGlh
bCByZWZyZXNoIGZhaWxlZDogJHtmb3JtYXRFcnJvcihlcnIpfWApKTsKCWNvbnN0IGRlZHVwZUNs
ZWFudXAgPSBzZXRJbnRlcnZhbCgoKSA9PiB7CgkJY29uc3QgQUdFTlRfUlVOX1NFUV9NQVggPSAx
ZTQ7CgkJY29uc3Qgbm93ID0gRGF0ZS5ub3coKTsKCQlmb3IgKGNvbnN0IFtrLCB2XSBvZiBwYXJh
bXMuZGVkdXBlKSBpZiAobm93IC0gdi50cyA+IDNlNSkgcGFyYW1zLmRlZHVwZS5kZWxldGUoayk7
CgkJaWYgKHBhcmFtcy5kZWR1cGUuc2l6ZSA+IDFlMykgewoJCQljb25zdCBlbnRyaWVzID0gWy4u
LnBhcmFtcy5kZWR1cGUuZW50cmllcygpXS50b1NvcnRlZCgoYSwgYikgPT4gYVsxXS50cyAtIGJb
MV0udHMpOwoJCQlmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtcy5kZWR1cGUuc2l6ZSAtIERFRFVQ
RV9NQVg7IGkrKykgcGFyYW1zLmRlZHVwZS5kZWxldGUoZW50cmllc1tpXVswXSk7CgkJfQoJCWlm
IChwYXJhbXMuYWdlbnRSdW5TZXEuc2l6ZSA+IEFHRU5UX1JVTl9TRVFfTUFYKSB7CgkJCWNvbnN0
IGV4Y2VzcyA9IHBhcmFtcy5hZ2VudFJ1blNlcS5zaXplIC0gQUdFTlRfUlVOX1NFUV9NQVg7CgkJ
CWxldCByZW1vdmVkID0gMDsKCQkJZm9yIChjb25zdCBydW5JZCBvZiBwYXJhbXMuYWdlbnRSdW5T
ZXEua2V5cygpKSB7CgkJCQlwYXJhbXMuYWdlbnRSdW5TZXEuZGVsZXRlKHJ1bklkKTsKCQkJCXJl
bW92ZWQgKz0gMTsKCQkJCWlmIChyZW1vdmVkID49IGV4Y2VzcykgYnJlYWs7CgkJCX0KCQl9CgkJ
Zm9yIChjb25zdCBbcnVuSWQsIGVudHJ5XSBvZiBwYXJhbXMuY2hhdEFib3J0Q29udHJvbGxlcnMp
IHsKCQkJaWYgKG5vdyA8PSBlbnRyeS5leHBpcmVzQXRNcykgY29udGludWU7CgkJCWFib3J0Q2hh
dFJ1bkJ5SWQoewoJCQkJY2hhdEFib3J0Q29udHJvbGxlcnM6IHBhcmFtcy5jaGF0QWJvcnRDb250
cm9sbGVycywKCQkJCWNoYXRSdW5CdWZmZXJzOiBwYXJhbXMuY2hhdFJ1bkJ1ZmZlcnMsCgkJCQlj
aGF0RGVsdGFTZW50QXQ6IHBhcmFtcy5jaGF0RGVsdGFTZW50QXQsCgkJCQljaGF0QWJvcnRlZFJ1
bnM6IHBhcmFtcy5jaGF0UnVuU3RhdGUuYWJvcnRlZFJ1bnMsCgkJCQlyZW1vdmVDaGF0UnVuOiBw
YXJhbXMucmVtb3ZlQ2hhdFJ1biwKCQkJCWFnZW50UnVuU2VxOiBwYXJhbXMuYWdlbnRSdW5TZXEs
CgkJCQlicm9hZGNhc3Q6IHBhcmFtcy5icm9hZGNhc3QsCgkJCQlub2RlU2VuZFRvU2Vzc2lvbjog
cGFyYW1zLm5vZGVTZW5kVG9TZXNzaW9uCgkJCX0sIHsKCQkJCXJ1bklkLAoJCQkJc2Vzc2lvbktl
eTogZW50cnkuc2Vzc2lvbktleSwKCQkJCXN0b3BSZWFzb246ICJ0aW1lb3V0IgoJCQl9KTsKCQl9
CgkJY29uc3QgQUJPUlRFRF9SVU5fVFRMX01TID0gNjAgKiA2ZTQ7CgkJZm9yIChjb25zdCBbcnVu
SWQsIGFib3J0ZWRBdF0gb2YgcGFyYW1zLmNoYXRSdW5TdGF0ZS5hYm9ydGVkUnVucykgewoJCQlp
ZiAobm93IC0gYWJvcnRlZEF0IDw9IEFCT1JURURfUlVOX1RUTF9NUykgY29udGludWU7CgkJCXBh
cmFtcy5jaGF0UnVuU3RhdGUuYWJvcnRlZFJ1bnMuZGVsZXRlKHJ1bklkKTsKCQkJcGFyYW1zLmNo
YXRSdW5CdWZmZXJzLmRlbGV0ZShydW5JZCk7CgkJCXBhcmFtcy5jaGF0RGVsdGFTZW50QXQuZGVs
ZXRlKHJ1bklkKTsKCQl9Cgl9LCA2ZTQpOwoJaWYgKHR5cGVvZiBwYXJhbXMubWVkaWFDbGVhbnVw
VHRsTXMgIT09ICJudW1iZXIiKSByZXR1cm4gewoJCXRpY2tJbnRlcnZhbCwKCQloZWFsdGhJbnRl
cnZhbCwKCQlkZWR1cGVDbGVhbnVwLAoJCW1lZGlhQ2xlYW51cDogbnVsbAoJfTsKCWxldCBtZWRp
YUNsZWFudXBJbkZsaWdodCA9IG51bGw7Cgljb25zdCBydW5NZWRpYUNsZWFudXAgPSAoKSA9PiB7
CgkJaWYgKG1lZGlhQ2xlYW51cEluRmxpZ2h0KSByZXR1cm4gbWVkaWFDbGVhbnVwSW5GbGlnaHQ7
CgkJbWVkaWFDbGVhbnVwSW5GbGlnaHQgPSBjbGVhbk9sZE1lZGlhKHBhcmFtcy5tZWRpYUNsZWFu
dXBUdGxNcywgewoJCQlyZWN1cnNpdmU6IHRydWUsCgkJCXBydW5lRW1wdHlEaXJzOiB0cnVlCgkJ
fSkuY2F0Y2goKGVycikgPT4gewoJCQlwYXJhbXMubG9nSGVhbHRoLmVycm9yKGBtZWRpYSBjbGVh
bnVwIGZhaWxlZDogJHtmb3JtYXRFcnJvcihlcnIpfWApOwoJCX0pLmZpbmFsbHkoKCkgPT4gewoJ
CQltZWRpYUNsZWFudXBJbkZsaWdodCA9IG51bGw7CgkJfSk7CgkJcmV0dXJuIG1lZGlhQ2xlYW51
cEluRmxpZ2h0OwoJfTsKCWNvbnN0IG1lZGlhQ2xlYW51cCA9IHNldEludGVydmFsKCgpID0+IHsK
CQlydW5NZWRpYUNsZWFudXAoKTsKCX0sIDYwICogNmU0KTsKCXJ1bk1lZGlhQ2xlYW51cCgpOwoJ
cmV0dXJuIHsKCQl0aWNrSW50ZXJ2YWwsCgkJaGVhbHRoSW50ZXJ2YWwsCgkJZGVkdXBlQ2xlYW51
cCwKCQltZWRpYUNsZWFudXAKCX07Cn0KLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvZ2F0ZXdh
eS9zZXJ2ZXItbWV0aG9kcy1saXN0LnRzCmNvbnN0IEJBU0VfTUVUSE9EUyA9IFsKCSJoZWFsdGgi
LAoJImRvY3Rvci5tZW1vcnkuc3RhdHVzIiwKCSJsb2dzLnRhaWwiLAoJImNoYW5uZWxzLnN0YXR1
cyIsCgkiY2hhbm5lbHMubG9nb3V0IiwKCSJzdGF0dXMiLAoJInVzYWdlLnN0YXR1cyIsCgkidXNh
Z2UuY29zdCIsCgkidHRzLnN0YXR1cyIsCgkidHRzLnByb3ZpZGVycyIsCgkidHRzLmVuYWJsZSIs
CgkidHRzLmRpc2FibGUiLAoJInR0cy5jb252ZXJ0IiwKCSJ0dHMuc2V0UHJvdmlkZXIiLAoJImNv
bmZpZy5nZXQiLAoJImNvbmZpZy5zZXQiLAoJImNvbmZpZy5hcHBseSIsCgkiY29uZmlnLnBhdGNo
IiwKCSJjb25maWcuc2NoZW1hIiwKCSJjb25maWcuc2NoZW1hLmxvb2t1cCIsCgkiZXhlYy5hcHBy
b3ZhbHMuZ2V0IiwKCSJleGVjLmFwcHJvdmFscy5zZXQiLAoJImV4ZWMuYXBwcm92YWxzLm5vZGUu
Z2V0IiwKCSJleGVjLmFwcHJvdmFscy5ub2RlLnNldCIsCgkiZXhlYy5hcHByb3ZhbC5yZXF1ZXN0
IiwKCSJleGVjLmFwcHJvdmFsLndhaXREZWNpc2lvbiIsCgkiZXhlYy5hcHByb3ZhbC5yZXNvbHZl
IiwKCSJ3aXphcmQuc3RhcnQiLAoJIndpemFyZC5uZXh0IiwKCSJ3aXphcmQuY2FuY2VsIiwKCSJ3
aXphcmQuc3RhdHVzIiwKCSJ0YWxrLmNvbmZpZyIsCgkidGFsay5tb2RlIiwKCSJtb2RlbHMubGlz
dCIsCgkidG9vbHMuY2F0YWxvZyIsCgkiYWdlbnRzLmxpc3QiLAoJImFnZW50cy5jcmVhdGUiLAoJ
ImFnZW50cy51cGRhdGUiLAoJImFnZW50cy5kZWxldGUiLAoJImFnZW50cy5maWxlcy5saXN0IiwK
CSJhZ2VudHMuZmlsZXMuZ2V0IiwKCSJhZ2VudHMuZmlsZXMuc2V0IiwKCSJza2lsbHMuc3RhdHVz
IiwKCSJza2lsbHMuYmlucyIsCgkic2tpbGxzLmluc3RhbGwiLAoJInNraWxscy51cGRhdGUiLAoJ
InVwZGF0ZS5ydW4iLAoJInZvaWNld2FrZS5nZXQiLAoJInZvaWNld2FrZS5zZXQiLAoJInNlY3Jl
dHMucmVsb2FkIiwKCSJzZWNyZXRzLnJlc29sdmUiLAoJInNlc3Npb25zLmxpc3QiLAoJInNlc3Np
b25zLnByZXZpZXciLAoJInNlc3Npb25zLnBhdGNoIiwKCSJzZXNzaW9ucy5yZXNldCIsCgkic2Vz
c2lvbnMuZGVsZXRlIiwKCSJzZXNzaW9ucy5jb21wYWN0IiwKCSJsYXN0LWhlYXJ0YmVhdCIsCgki
c2V0LWhlYXJ0YmVhdHMiLAoJIndha2UiLAoJIm5vZGUucGFpci5yZXF1ZXN0IiwKCSJub2RlLnBh
aXIubGlzdCIsCgkibm9kZS5wYWlyLmFwcHJvdmUiLAoJIm5vZGUucGFpci5yZWplY3QiLAoJIm5v
ZGUucGFpci52ZXJpZnkiLAoJImRldmljZS5wYWlyLmxpc3QiLAoJImRldmljZS5wYWlyLmFwcHJv
dmUiLAoJImRldmljZS5wYWlyLnJlamVjdCIsCgkiZGV2aWNlLnBhaXIucmVtb3ZlIiwKCSJkZXZp
Y2UudG9rZW4ucm90YXRlIiwKCSJkZXZpY2UudG9rZW4ucmV2b2tlIiwKCSJub2RlLnJlbmFtZSIs
Cgkibm9kZS5saXN0IiwKCSJub2RlLmRlc2NyaWJlIiwKCSJub2RlLnBlbmRpbmcuZHJhaW4iLAoJ
Im5vZGUucGVuZGluZy5lbnF1ZXVlIiwKCSJub2RlLmludm9rZSIsCgkibm9kZS5wZW5kaW5nLnB1
bGwiLAoJIm5vZGUucGVuZGluZy5hY2siLAoJIm5vZGUuaW52b2tlLnJlc3VsdCIsCgkibm9kZS5l
dmVudCIsCgkibm9kZS5jYW52YXMuY2FwYWJpbGl0eS5yZWZyZXNoIiwKCSJjcm9uLmxpc3QiLAoJ
ImNyb24uc3RhdHVzIiwKCSJjcm9uLmFkZCIsCgkiY3Jvbi51cGRhdGUiLAoJImNyb24ucmVtb3Zl
IiwKCSJjcm9uLnJ1biIsCgkiY3Jvbi5ydW5zIiwKCSJnYXRld2F5LmlkZW50aXR5LmdldCIsCgki
c3lzdGVtLXByZXNlbmNlIiwKCSJzeXN0ZW0tZXZlbnQiLAoJInNlbmQiLAoJImFnZW50IiwKCSJh
Z2VudC5pZGVudGl0eS5nZXQiLAoJImFnZW50LndhaXQiLAoJImJyb3dzZXIucmVxdWVzdCIsCgki
Y2hhdC5oaXN0b3J5IiwKCSJjaGF0LmFib3J0IiwKCSJjaGF0LnNlbmQiCl07CmZ1bmN0aW9uIGxp
c3RHYXRld2F5TWV0aG9kcygpIHsKCWNvbnN0IGNoYW5uZWxNZXRob2RzID0gbGlzdENoYW5uZWxQ
bHVnaW5zKCkuZmxhdE1hcCgocGx1Z2luKSA9PiBwbHVnaW4uZ2F0ZXdheU1ldGhvZHMgPz8gW10p
OwoJcmV0dXJuIEFycmF5LmZyb20obmV3IFNldChbLi4uQkFTRV9NRVRIT0RTLCAuLi5jaGFubmVs
TWV0aG9kc10pKTsKfQpjb25zdCBHQVRFV0FZX0VWRU5UUyA9IFsKCSJjb25uZWN0LmNoYWxsZW5n
ZSIsCgkiYWdlbnQiLAoJImNoYXQiLAoJInByZXNlbmNlIiwKCSJ0aWNrIiwKCSJ0YWxrLm1vZGUi
LAoJInNodXRkb3duIiwKCSJoZWFsdGgiLAoJImhlYXJ0YmVhdCIsCgkiY3JvbiIsCgkibm9kZS5w
YWlyLnJlcXVlc3RlZCIsCgkibm9kZS5wYWlyLnJlc29sdmVkIiwKCSJub2RlLmludm9rZS5yZXF1
ZXN0IiwKCSJkZXZpY2UucGFpci5yZXF1ZXN0ZWQiLAoJImRldmljZS5wYWlyLnJlc29sdmVkIiwK
CSJ2b2ljZXdha2UuY2hhbmdlZCIsCgkiZXhlYy5hcHByb3ZhbC5yZXF1ZXN0ZWQiLAoJImV4ZWMu
YXBwcm92YWwucmVzb2x2ZWQiLAoJR0FURVdBWV9FVkVOVF9VUERBVEVfQVZBSUxBQkxFCl07Ci8v
I2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL3BsdWdpbnMvcnVudGltZS9nYXRld2F5LXJlcXVlc3Qt
c2NvcGUudHMKY29uc3QgUExVR0lOX1JVTlRJTUVfR0FURVdBWV9SRVFVRVNUX1NDT1BFX0tFWSA9
IFN5bWJvbC5mb3IoIm9wZW5jbGF3LnBsdWdpblJ1bnRpbWVHYXRld2F5UmVxdWVzdFNjb3BlIik7
CmNvbnN0IHBsdWdpblJ1bnRpbWVHYXRld2F5UmVxdWVzdFNjb3BlID0gKCgpID0+IHsKCWNvbnN0
IGdsb2JhbFN0YXRlID0gZ2xvYmFsVGhpczsKCWNvbnN0IGV4aXN0aW5nID0gZ2xvYmFsU3RhdGVb
UExVR0lOX1JVTlRJTUVfR0FURVdBWV9SRVFVRVNUX1NDT1BFX0tFWV07CglpZiAoZXhpc3Rpbmcp
IHJldHVybiBleGlzdGluZzsKCWNvbnN0IGNyZWF0ZWQgPSBuZXcgQXN5bmNMb2NhbFN0b3JhZ2Uo
KTsKCWdsb2JhbFN0YXRlW1BMVUdJTl9SVU5USU1FX0dBVEVXQVlfUkVRVUVTVF9TQ09QRV9LRVld
ID0gY3JlYXRlZDsKCXJldHVybiBjcmVhdGVkOwp9KSgpOwovKioKKiBSdW5zIHBsdWdpbiBnYXRl
d2F5IGhhbmRsZXJzIHdpdGggcmVxdWVzdC1zY29wZWQgY29udGV4dCB0aGF0IHJ1bnRpbWUgaGVs
cGVycyBjYW4gcmVhZC4KKi8KZnVuY3Rpb24gd2l0aFBsdWdpblJ1bnRpbWVHYXRld2F5UmVxdWVz
dFNjb3BlKHNjb3BlLCBydW4pIHsKCXJldHVybiBwbHVnaW5SdW50aW1lR2F0ZXdheVJlcXVlc3RT
Y29wZS5ydW4oc2NvcGUsIHJ1bik7Cn0KLyoqCiogUmV0dXJucyB0aGUgY3VycmVudCBwbHVnaW4g
Z2F0ZXdheSByZXF1ZXN0IHNjb3BlIHdoZW4gY2FsbGVkIGZyb20gYSBwbHVnaW4gcmVxdWVzdCBo
YW5kbGVyLgoqLwpmdW5jdGlvbiBnZXRQbHVnaW5SdW50aW1lR2F0ZXdheVJlcXVlc3RTY29wZSgp
IHsKCXJldHVybiBwbHVnaW5SdW50aW1lR2F0ZXdheVJlcXVlc3RTY29wZS5nZXRTdG9yZSgpOwp9
Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dhdGV3YXkvY29udHJvbC1wbGFuZS1hdWRpdC50
cwpmdW5jdGlvbiBub3JtYWxpemVQYXJ0JDEodmFsdWUsIGZhbGxiYWNrKSB7CglpZiAodHlwZW9m
IHZhbHVlICE9PSAic3RyaW5nIikgcmV0dXJuIGZhbGxiYWNrOwoJY29uc3Qgbm9ybWFsaXplZCA9
IHZhbHVlLnRyaW0oKTsKCXJldHVybiBub3JtYWxpemVkLmxlbmd0aCA+IDAgPyBub3JtYWxpemVk
IDogZmFsbGJhY2s7Cn0KZnVuY3Rpb24gcmVzb2x2ZUNvbnRyb2xQbGFuZUFjdG9yKGNsaWVudCkg
ewoJcmV0dXJuIHsKCQlhY3Rvcjogbm9ybWFsaXplUGFydCQxKGNsaWVudD8uY29ubmVjdD8uY2xp
ZW50Py5pZCwgInVua25vd24tYWN0b3IiKSwKCQlkZXZpY2VJZDogbm9ybWFsaXplUGFydCQxKGNs
aWVudD8uY29ubmVjdD8uZGV2aWNlPy5pZCwgInVua25vd24tZGV2aWNlIiksCgkJY2xpZW50SXA6
IG5vcm1hbGl6ZVBhcnQkMShjbGllbnQ/LmNsaWVudElwLCAidW5rbm93bi1pcCIpLAoJCWNvbm5J
ZDogbm9ybWFsaXplUGFydCQxKGNsaWVudD8uY29ubklkLCAidW5rbm93bi1jb25uIikKCX07Cn0K
ZnVuY3Rpb24gZm9ybWF0Q29udHJvbFBsYW5lQWN0b3IoYWN0b3IpIHsKCXJldHVybiBgYWN0b3I9
JHthY3Rvci5hY3Rvcn0gZGV2aWNlPSR7YWN0b3IuZGV2aWNlSWR9IGlwPSR7YWN0b3IuY2xpZW50
SXB9IGNvbm49JHthY3Rvci5jb25uSWR9YDsKfQpmdW5jdGlvbiBzdW1tYXJpemVDaGFuZ2VkUGF0
aHMocGF0aHMsIG1heFBhdGhzID0gOCkgewoJaWYgKHBhdGhzLmxlbmd0aCA9PT0gMCkgcmV0dXJu
ICI8bm9uZT4iOwoJaWYgKHBhdGhzLmxlbmd0aCA8PSBtYXhQYXRocykgcmV0dXJuIHBhdGhzLmpv
aW4oIiwiKTsKCXJldHVybiBgJHtwYXRocy5zbGljZSgwLCBtYXhQYXRocykuam9pbigiLCIpfSwr
JHtwYXRocy5sZW5ndGggLSBtYXhQYXRoc30gbW9yZWA7Cn0KLy8jZW5kcmVnaW9uCi8vI3JlZ2lv
biBzcmMvZ2F0ZXdheS9jb250cm9sLXBsYW5lLXJhdGUtbGltaXQudHMKY29uc3QgQ09OVFJPTF9Q
TEFORV9SQVRFX0xJTUlUX01BWF9SRVFVRVNUUyA9IDM7CmNvbnN0IENPTlRST0xfUExBTkVfUkFU
RV9MSU1JVF9XSU5ET1dfTVMgPSA2ZTQ7CmNvbnN0IGNvbnRyb2xQbGFuZUJ1Y2tldHMgPSAvKiBA
X19QVVJFX18gKi8gbmV3IE1hcCgpOwpmdW5jdGlvbiBub3JtYWxpemVQYXJ0KHZhbHVlLCBmYWxs
YmFjaykgewoJaWYgKHR5cGVvZiB2YWx1ZSAhPT0gInN0cmluZyIpIHJldHVybiBmYWxsYmFjazsK
CWNvbnN0IG5vcm1hbGl6ZWQgPSB2YWx1ZS50cmltKCk7CglyZXR1cm4gbm9ybWFsaXplZC5sZW5n
dGggPiAwID8gbm9ybWFsaXplZCA6IGZhbGxiYWNrOwp9CmZ1bmN0aW9uIHJlc29sdmVDb250cm9s
UGxhbmVSYXRlTGltaXRLZXkoY2xpZW50KSB7Cgljb25zdCBkZXZpY2VJZCA9IG5vcm1hbGl6ZVBh
cnQoY2xpZW50Py5jb25uZWN0Py5kZXZpY2U/LmlkLCAidW5rbm93bi1kZXZpY2UiKTsKCWNvbnN0
IGNsaWVudElwID0gbm9ybWFsaXplUGFydChjbGllbnQ/LmNsaWVudElwLCAidW5rbm93bi1pcCIp
OwoJaWYgKGRldmljZUlkID09PSAidW5rbm93bi1kZXZpY2UiICYmIGNsaWVudElwID09PSAidW5r
bm93bi1pcCIpIHsKCQljb25zdCBjb25uSWQgPSBub3JtYWxpemVQYXJ0KGNsaWVudD8uY29ubklk
LCAiIik7CgkJaWYgKGNvbm5JZCkgcmV0dXJuIGAke2RldmljZUlkfXwke2NsaWVudElwfXxjb25u
PSR7Y29ubklkfWA7Cgl9CglyZXR1cm4gYCR7ZGV2aWNlSWR9fCR7Y2xpZW50SXB9YDsKfQpmdW5j
dGlvbiBjb25zdW1lQ29udHJvbFBsYW5lV3JpdGVCdWRnZXQocGFyYW1zKSB7Cgljb25zdCBub3dN
cyA9IHBhcmFtcy5ub3dNcyA/PyBEYXRlLm5vdygpOwoJY29uc3Qga2V5ID0gcmVzb2x2ZUNvbnRy
b2xQbGFuZVJhdGVMaW1pdEtleShwYXJhbXMuY2xpZW50KTsKCWNvbnN0IGJ1Y2tldCA9IGNvbnRy
b2xQbGFuZUJ1Y2tldHMuZ2V0KGtleSk7CglpZiAoIWJ1Y2tldCB8fCBub3dNcyAtIGJ1Y2tldC53
aW5kb3dTdGFydE1zID49IENPTlRST0xfUExBTkVfUkFURV9MSU1JVF9XSU5ET1dfTVMpIHsKCQlj
b250cm9sUGxhbmVCdWNrZXRzLnNldChrZXksIHsKCQkJY291bnQ6IDEsCgkJCXdpbmRvd1N0YXJ0
TXM6IG5vd01zCgkJfSk7CgkJcmV0dXJuIHsKCQkJYWxsb3dlZDogdHJ1ZSwKCQkJcmV0cnlBZnRl
ck1zOiAwLAoJCQlyZW1haW5pbmc6IENPTlRST0xfUExBTkVfUkFURV9MSU1JVF9NQVhfUkVRVUVT
VFMgLSAxLAoJCQlrZXkKCQl9OwoJfQoJaWYgKGJ1Y2tldC5jb3VudCA+PSBDT05UUk9MX1BMQU5F
X1JBVEVfTElNSVRfTUFYX1JFUVVFU1RTKSByZXR1cm4gewoJCWFsbG93ZWQ6IGZhbHNlLAoJCXJl
dHJ5QWZ0ZXJNczogTWF0aC5tYXgoMCwgYnVja2V0LndpbmRvd1N0YXJ0TXMgKyBDT05UUk9MX1BM
QU5FX1JBVEVfTElNSVRfV0lORE9XX01TIC0gbm93TXMpLAoJCXJlbWFpbmluZzogMCwKCQlrZXkK
CX07CglidWNrZXQuY291bnQgKz0gMTsKCXJldHVybiB7CgkJYWxsb3dlZDogdHJ1ZSwKCQlyZXRy
eUFmdGVyTXM6IDAsCgkJcmVtYWluaW5nOiBNYXRoLm1heCgwLCBDT05UUk9MX1BMQU5FX1JBVEVf
TElNSVRfTUFYX1JFUVVFU1RTIC0gYnVja2V0LmNvdW50KSwKCQlrZXkKCX07Cn0KLy8jZW5kcmVn
aW9uCi8vI3JlZ2lvbiBzcmMvZ2F0ZXdheS9yb2xlLXBvbGljeS50cwpmdW5jdGlvbiBwYXJzZUdh
dGV3YXlSb2xlKHJvbGVSYXcpIHsKCWlmIChyb2xlUmF3ID09PSAib3BlcmF0b3IiIHx8IHJvbGVS
YXcgPT09ICJub2RlIikgcmV0dXJuIHJvbGVSYXc7CglyZXR1cm4gbnVsbDsKfQpmdW5jdGlvbiBy
b2xlQ2FuU2tpcERldmljZUlkZW50aXR5KHJvbGUsIHNoYXJlZEF1dGhPaykgewoJcmV0dXJuIHJv
bGUgPT09ICJvcGVyYXRvciIgJiYgc2hhcmVkQXV0aE9rOwp9CmZ1bmN0aW9uIGlzUm9sZUF1dGhv
cml6ZWRGb3JNZXRob2Qocm9sZSwgbWV0aG9kKSB7CglpZiAoaXNOb2RlUm9sZU1ldGhvZChtZXRo
b2QpKSByZXR1cm4gcm9sZSA9PT0gIm5vZGUiOwoJcmV0dXJuIHJvbGUgPT09ICJvcGVyYXRvciI7
Cn0KLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvc2hhcmVkL2Fzc2lzdGFudC1pZGVudGl0eS12
YWx1ZXMudHMKZnVuY3Rpb24gY29lcmNlSWRlbnRpdHlWYWx1ZSh2YWx1ZSwgbWF4TGVuZ3RoKSB7
CglpZiAodHlwZW9mIHZhbHVlICE9PSAic3RyaW5nIikgcmV0dXJuOwoJY29uc3QgdHJpbW1lZCA9
IHZhbHVlLnRyaW0oKTsKCWlmICghdHJpbW1lZCkgcmV0dXJuOwoJaWYgKHRyaW1tZWQubGVuZ3Ro
IDw9IG1heExlbmd0aCkgcmV0dXJuIHRyaW1tZWQ7CglyZXR1cm4gdHJpbW1lZC5zbGljZSgwLCBt
YXhMZW5ndGgpOwp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dhdGV3YXkvYXNzaXN0YW50
LWlkZW50aXR5LnRzCmNvbnN0IE1BWF9BU1NJU1RBTlRfTkFNRSA9IDUwOwpjb25zdCBNQVhfQVNT
SVNUQU5UX0FWQVRBUiA9IDIwMDsKY29uc3QgTUFYX0FTU0lTVEFOVF9FTU9KSSA9IDE2Owpjb25z
dCBERUZBVUxUX0FTU0lTVEFOVF9JREVOVElUWSA9IHsKCWFnZW50SWQ6ICJtYWluIiwKCW5hbWU6
ICJBc3Npc3RhbnQiLAoJYXZhdGFyOiAiQSIKfTsKZnVuY3Rpb24gaXNBdmF0YXJVcmwodmFsdWUp
IHsKCXJldHVybiBpc0F2YXRhckh0dHBVcmwodmFsdWUpIHx8IGlzQXZhdGFySW1hZ2VEYXRhVXJs
KHZhbHVlKTsKfQpmdW5jdGlvbiBub3JtYWxpemVBdmF0YXJWYWx1ZSh2YWx1ZSkgewoJaWYgKCF2
YWx1ZSkgcmV0dXJuOwoJY29uc3QgdHJpbW1lZCA9IHZhbHVlLnRyaW0oKTsKCWlmICghdHJpbW1l
ZCkgcmV0dXJuOwoJaWYgKGlzQXZhdGFyVXJsKHRyaW1tZWQpKSByZXR1cm4gdHJpbW1lZDsKCWlm
IChsb29rc0xpa2VBdmF0YXJQYXRoKHRyaW1tZWQpKSByZXR1cm4gdHJpbW1lZDsKCWlmICghL1xz
Ly50ZXN0KHRyaW1tZWQpICYmIHRyaW1tZWQubGVuZ3RoIDw9IDQpIHJldHVybiB0cmltbWVkOwp9
CmZ1bmN0aW9uIG5vcm1hbGl6ZUVtb2ppVmFsdWUodmFsdWUpIHsKCWlmICghdmFsdWUpIHJldHVy
bjsKCWNvbnN0IHRyaW1tZWQgPSB2YWx1ZS50cmltKCk7CglpZiAoIXRyaW1tZWQpIHJldHVybjsK
CWlmICh0cmltbWVkLmxlbmd0aCA+IE1BWF9BU1NJU1RBTlRfRU1PSkkpIHJldHVybjsKCWxldCBo
YXNOb25Bc2NpaSA9IGZhbHNlOwoJZm9yIChsZXQgaSA9IDA7IGkgPCB0cmltbWVkLmxlbmd0aDsg
aSArPSAxKSBpZiAodHJpbW1lZC5jaGFyQ29kZUF0KGkpID4gMTI3KSB7CgkJaGFzTm9uQXNjaWkg
PSB0cnVlOwoJCWJyZWFrOwoJfQoJaWYgKCFoYXNOb25Bc2NpaSkgcmV0dXJuOwoJaWYgKGlzQXZh
dGFyVXJsKHRyaW1tZWQpIHx8IGxvb2tzTGlrZUF2YXRhclBhdGgodHJpbW1lZCkpIHJldHVybjsK
CXJldHVybiB0cmltbWVkOwp9CmZ1bmN0aW9uIHJlc29sdmVBc3Npc3RhbnRJZGVudGl0eShwYXJh
bXMpIHsKCWNvbnN0IGFnZW50SWQgPSBub3JtYWxpemVBZ2VudElkKHBhcmFtcy5hZ2VudElkID8/
IHJlc29sdmVEZWZhdWx0QWdlbnRJZChwYXJhbXMuY2ZnKSk7Cgljb25zdCB3b3Jrc3BhY2VEaXIg
PSBwYXJhbXMud29ya3NwYWNlRGlyID8/IHJlc29sdmVBZ2VudFdvcmtzcGFjZURpcihwYXJhbXMu
Y2ZnLCBhZ2VudElkKTsKCWNvbnN0IGNvbmZpZ0Fzc2lzdGFudCA9IHBhcmFtcy5jZmcudWk/LmFz
c2lzdGFudDsKCWNvbnN0IGFnZW50SWRlbnRpdHkgPSByZXNvbHZlQWdlbnRJZGVudGl0eShwYXJh
bXMuY2ZnLCBhZ2VudElkKTsKCWNvbnN0IGZpbGVJZGVudGl0eSA9IHdvcmtzcGFjZURpciA/IGxv
YWRBZ2VudElkZW50aXR5KHdvcmtzcGFjZURpcikgOiBudWxsOwoJcmV0dXJuIHsKCQlhZ2VudElk
LAoJCW5hbWU6IGNvZXJjZUlkZW50aXR5VmFsdWUoY29uZmlnQXNzaXN0YW50Py5uYW1lLCBNQVhf
QVNTSVNUQU5UX05BTUUpID8/IGNvZXJjZUlkZW50aXR5VmFsdWUoYWdlbnRJZGVudGl0eT8ubmFt
ZSwgTUFYX0FTU0lTVEFOVF9OQU1FKSA/PyBjb2VyY2VJZGVudGl0eVZhbHVlKGZpbGVJZGVudGl0
eT8ubmFtZSwgTUFYX0FTU0lTVEFOVF9OQU1FKSA/PyBERUZBVUxUX0FTU0lTVEFOVF9JREVOVElU
WS5uYW1lLAoJCWF2YXRhcjogWwoJCQljb2VyY2VJZGVudGl0eVZhbHVlKGNvbmZpZ0Fzc2lzdGFu
dD8uYXZhdGFyLCBNQVhfQVNTSVNUQU5UX0FWQVRBUiksCgkJCWNvZXJjZUlkZW50aXR5VmFsdWUo
YWdlbnRJZGVudGl0eT8uYXZhdGFyLCBNQVhfQVNTSVNUQU5UX0FWQVRBUiksCgkJCWNvZXJjZUlk
ZW50aXR5VmFsdWUoYWdlbnRJZGVudGl0eT8uZW1vamksIE1BWF9BU1NJU1RBTlRfQVZBVEFSKSwK
CQkJY29lcmNlSWRlbnRpdHlWYWx1ZShmaWxlSWRlbnRpdHk/LmF2YXRhciwgTUFYX0FTU0lTVEFO
VF9BVkFUQVIpLAoJCQljb2VyY2VJZGVudGl0eVZhbHVlKGZpbGVJZGVudGl0eT8uZW1vamksIE1B
WF9BU1NJU1RBTlRfQVZBVEFSKQoJCV0ubWFwKChjYW5kaWRhdGUpID0+IG5vcm1hbGl6ZUF2YXRh
clZhbHVlKGNhbmRpZGF0ZSkpLmZpbmQoQm9vbGVhbikgPz8gREVGQVVMVF9BU1NJU1RBTlRfSURF
TlRJVFkuYXZhdGFyLAoJCWVtb2ppOiBbCgkJCWNvZXJjZUlkZW50aXR5VmFsdWUoYWdlbnRJZGVu
dGl0eT8uZW1vamksIE1BWF9BU1NJU1RBTlRfRU1PSkkpLAoJCQljb2VyY2VJZGVudGl0eVZhbHVl
KGZpbGVJZGVudGl0eT8uZW1vamksIE1BWF9BU1NJU1RBTlRfRU1PSkkpLAoJCQljb2VyY2VJZGVu
dGl0eVZhbHVlKGFnZW50SWRlbnRpdHk/LmF2YXRhciwgTUFYX0FTU0lTVEFOVF9FTU9KSSksCgkJ
CWNvZXJjZUlkZW50aXR5VmFsdWUoZmlsZUlkZW50aXR5Py5hdmF0YXIsIE1BWF9BU1NJU1RBTlRf
RU1PSkkpCgkJXS5tYXAoKGNhbmRpZGF0ZSkgPT4gbm9ybWFsaXplRW1vamlWYWx1ZShjYW5kaWRh
dGUpKS5maW5kKEJvb2xlYW4pCgl9Owp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dhdGV3
YXkvc2Vzc2lvbi1yZXNldC1zZXJ2aWNlLnRzCmNvbnN0IEFDUF9SVU5USU1FX0NMRUFOVVBfVElN
RU9VVF9NUyA9IDE1ZTM7CmZ1bmN0aW9uIHN0cmlwUnVudGltZU1vZGVsU3RhdGUoZW50cnkpIHsK
CWlmICghZW50cnkpIHJldHVybiBlbnRyeTsKCXJldHVybiB7CgkJLi4uZW50cnksCgkJbW9kZWw6
IHZvaWQgMCwKCQltb2RlbFByb3ZpZGVyOiB2b2lkIDAsCgkJY29udGV4dFRva2Vuczogdm9pZCAw
LAoJCXN5c3RlbVByb21wdFJlcG9ydDogdm9pZCAwCgl9Owp9CmZ1bmN0aW9uIGFyY2hpdmVTZXNz
aW9uVHJhbnNjcmlwdHNGb3JTZXNzaW9uKHBhcmFtcykgewoJaWYgKCFwYXJhbXMuc2Vzc2lvbklk
KSByZXR1cm4gW107CglyZXR1cm4gYXJjaGl2ZVNlc3Npb25UcmFuc2NyaXB0cyh7CgkJc2Vzc2lv
bklkOiBwYXJhbXMuc2Vzc2lvbklkLAoJCXN0b3JlUGF0aDogcGFyYW1zLnN0b3JlUGF0aCwKCQlz
ZXNzaW9uRmlsZTogcGFyYW1zLnNlc3Npb25GaWxlLAoJCWFnZW50SWQ6IHBhcmFtcy5hZ2VudElk
LAoJCXJlYXNvbjogcGFyYW1zLnJlYXNvbgoJfSk7Cn0KYXN5bmMgZnVuY3Rpb24gZW1pdFNlc3Np
b25VbmJvdW5kTGlmZWN5Y2xlRXZlbnQocGFyYW1zKSB7Cgljb25zdCB0YXJnZXRLaW5kID0gaXNT
dWJhZ2VudFNlc3Npb25LZXkocGFyYW1zLnRhcmdldFNlc3Npb25LZXkpID8gInN1YmFnZW50IiA6
ICJhY3AiOwoJdW5iaW5kVGhyZWFkQmluZGluZ3NCeVNlc3Npb25LZXkoewoJCXRhcmdldFNlc3Np
b25LZXk6IHBhcmFtcy50YXJnZXRTZXNzaW9uS2V5LAoJCXRhcmdldEtpbmQsCgkJcmVhc29uOiBw
YXJhbXMucmVhc29uLAoJCXNlbmRGYXJld2VsbDogdHJ1ZQoJfSk7CglpZiAocGFyYW1zLmVtaXRI
b29rcyA9PT0gZmFsc2UpIHJldHVybjsKCWNvbnN0IGhvb2tSdW5uZXIgPSBnZXRHbG9iYWxIb29r
UnVubmVyKCk7CglpZiAoIWhvb2tSdW5uZXI/Lmhhc0hvb2tzKCJzdWJhZ2VudF9lbmRlZCIpKSBy
ZXR1cm47Cglhd2FpdCBob29rUnVubmVyLnJ1blN1YmFnZW50RW5kZWQoewoJCXRhcmdldFNlc3Np
b25LZXk6IHBhcmFtcy50YXJnZXRTZXNzaW9uS2V5LAoJCXRhcmdldEtpbmQsCgkJcmVhc29uOiBw
YXJhbXMucmVhc29uLAoJCXNlbmRGYXJld2VsbDogdHJ1ZSwKCQlvdXRjb21lOiBwYXJhbXMucmVh
c29uID09PSAic2Vzc2lvbi1yZXNldCIgPyAicmVzZXQiIDogImRlbGV0ZWQiCgl9LCB7IGNoaWxk
U2Vzc2lvbktleTogcGFyYW1zLnRhcmdldFNlc3Npb25LZXkgfSk7Cn0KYXN5bmMgZnVuY3Rpb24g
ZW5zdXJlU2Vzc2lvblJ1bnRpbWVDbGVhbnVwKHBhcmFtcykgewoJY29uc3QgY2xvc2VUcmFja2Vk
QnJvd3NlclRhYnMgPSBhc3luYyAoKSA9PiB7CgkJcmV0dXJuIGF3YWl0IGNsb3NlVHJhY2tlZEJy
b3dzZXJUYWJzRm9yU2Vzc2lvbnMoewoJCQlzZXNzaW9uS2V5czogWy4uLm5ldyBTZXQoWwoJCQkJ
cGFyYW1zLmtleSwKCQkJCXBhcmFtcy50YXJnZXQuY2Fub25pY2FsS2V5LAoJCQkJLi4ucGFyYW1z
LnRhcmdldC5zdG9yZUtleXMsCgkJCQlwYXJhbXMuc2Vzc2lvbklkID8/ICIiCgkJCV0pXSwKCQkJ
b25XYXJuOiAobWVzc2FnZSkgPT4gbG9nVmVyYm9zZShtZXNzYWdlKQoJCX0pOwoJfTsKCWNvbnN0
IHF1ZXVlS2V5cyA9IG5ldyBTZXQocGFyYW1zLnRhcmdldC5zdG9yZUtleXMpOwoJcXVldWVLZXlz
LmFkZChwYXJhbXMudGFyZ2V0LmNhbm9uaWNhbEtleSk7CglpZiAocGFyYW1zLnNlc3Npb25JZCkg
cXVldWVLZXlzLmFkZChwYXJhbXMuc2Vzc2lvbklkKTsKCWNsZWFyU2Vzc2lvblF1ZXVlcyhbLi4u
cXVldWVLZXlzXSk7CglzdG9wU3ViYWdlbnRzRm9yUmVxdWVzdGVyKHsKCQljZmc6IHBhcmFtcy5j
ZmcsCgkJcmVxdWVzdGVyU2Vzc2lvbktleTogcGFyYW1zLnRhcmdldC5jYW5vbmljYWxLZXkKCX0p
OwoJaWYgKCFwYXJhbXMuc2Vzc2lvbklkKSB7CgkJY2xlYXJCb290c3RyYXBTbmFwc2hvdChwYXJh
bXMudGFyZ2V0LmNhbm9uaWNhbEtleSk7CgkJYXdhaXQgY2xvc2VUcmFja2VkQnJvd3NlclRhYnMo
KTsKCQlyZXR1cm47Cgl9CglhYm9ydEVtYmVkZGVkUGlSdW4ocGFyYW1zLnNlc3Npb25JZCk7Cglj
b25zdCBlbmRlZCA9IGF3YWl0IHdhaXRGb3JFbWJlZGRlZFBpUnVuRW5kKHBhcmFtcy5zZXNzaW9u
SWQsIDE1ZTMpOwoJY2xlYXJCb290c3RyYXBTbmFwc2hvdChwYXJhbXMudGFyZ2V0LmNhbm9uaWNh
bEtleSk7CglpZiAoZW5kZWQpIHsKCQlhd2FpdCBjbG9zZVRyYWNrZWRCcm93c2VyVGFicygpOwoJ
CXJldHVybjsKCX0KCXJldHVybiBlcnJvclNoYXBlKEVycm9yQ29kZXMuVU5BVkFJTEFCTEUsIGBT
ZXNzaW9uICR7cGFyYW1zLmtleX0gaXMgc3RpbGwgYWN0aXZlOyB0cnkgYWdhaW4gaW4gYSBtb21l
bnQuYCk7Cn0KYXN5bmMgZnVuY3Rpb24gcnVuQWNwQ2xlYW51cFN0ZXAocGFyYW1zKSB7CglsZXQg
dGltZXI7Cgljb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7
CgkJdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUoeyBzdGF0dXM6ICJ0aW1lb3V0IiB9
KSwgQUNQX1JVTlRJTUVfQ0xFQU5VUF9USU1FT1VUX01TKTsKCX0pOwoJY29uc3Qgb3BQcm9taXNl
ID0gcGFyYW1zLm9wKCkudGhlbigoKSA9PiAoeyBzdGF0dXM6ICJvayIgfSkpLmNhdGNoKChlcnJv
cikgPT4gKHsKCQlzdGF0dXM6ICJlcnJvciIsCgkJZXJyb3IKCX0pKTsKCWNvbnN0IG91dGNvbWUg
PSBhd2FpdCBQcm9taXNlLnJhY2UoW29wUHJvbWlzZSwgdGltZW91dFByb21pc2VdKTsKCWlmICh0
aW1lcikgY2xlYXJUaW1lb3V0KHRpbWVyKTsKCXJldHVybiBvdXRjb21lOwp9CmFzeW5jIGZ1bmN0
aW9uIGNsb3NlQWNwUnVudGltZUZvclNlc3Npb24ocGFyYW1zKSB7CglpZiAoIXBhcmFtcy5lbnRy
eT8uYWNwKSByZXR1cm47Cgljb25zdCBhY3BNYW5hZ2VyID0gZ2V0QWNwU2Vzc2lvbk1hbmFnZXIo
KTsKCWNvbnN0IGNhbmNlbE91dGNvbWUgPSBhd2FpdCBydW5BY3BDbGVhbnVwU3RlcCh7IG9wOiBh
c3luYyAoKSA9PiB7CgkJYXdhaXQgYWNwTWFuYWdlci5jYW5jZWxTZXNzaW9uKHsKCQkJY2ZnOiBw
YXJhbXMuY2ZnLAoJCQlzZXNzaW9uS2V5OiBwYXJhbXMuc2Vzc2lvbktleSwKCQkJcmVhc29uOiBw
YXJhbXMucmVhc29uCgkJfSk7Cgl9IH0pOwoJaWYgKGNhbmNlbE91dGNvbWUuc3RhdHVzID09PSAi
dGltZW91dCIpIHJldHVybiBlcnJvclNoYXBlKEVycm9yQ29kZXMuVU5BVkFJTEFCTEUsIGBTZXNz
aW9uICR7cGFyYW1zLnNlc3Npb25LZXl9IGlzIHN0aWxsIGFjdGl2ZTsgdHJ5IGFnYWluIGluIGEg
bW9tZW50LmApOwoJaWYgKGNhbmNlbE91dGNvbWUuc3RhdHVzID09PSAiZXJyb3IiKSBsb2dWZXJi
b3NlKGBzZXNzaW9ucy4ke3BhcmFtcy5yZWFzb259OiBBQ1AgY2FuY2VsIGZhaWxlZCBmb3IgJHtw
YXJhbXMuc2Vzc2lvbktleX06ICR7U3RyaW5nKGNhbmNlbE91dGNvbWUuZXJyb3IpfWApOwoJY29u
c3QgY2xvc2VPdXRjb21lID0gYXdhaXQgcnVuQWNwQ2xlYW51cFN0ZXAoeyBvcDogYXN5bmMgKCkg
PT4gewoJCWF3YWl0IGFjcE1hbmFnZXIuY2xvc2VTZXNzaW9uKHsKCQkJY2ZnOiBwYXJhbXMuY2Zn
LAoJCQlzZXNzaW9uS2V5OiBwYXJhbXMuc2Vzc2lvbktleSwKCQkJcmVhc29uOiBwYXJhbXMucmVh
c29uLAoJCQlyZXF1aXJlQWNwU2Vzc2lvbjogZmFsc2UsCgkJCWFsbG93QmFja2VuZFVuYXZhaWxh
YmxlOiB0cnVlCgkJfSk7Cgl9IH0pOwoJaWYgKGNsb3NlT3V0Y29tZS5zdGF0dXMgPT09ICJ0aW1l
b3V0IikgcmV0dXJuIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5VTkFWQUlMQUJMRSwgYFNlc3Npb24g
JHtwYXJhbXMuc2Vzc2lvbktleX0gaXMgc3RpbGwgYWN0aXZlOyB0cnkgYWdhaW4gaW4gYSBtb21l
bnQuYCk7CglpZiAoY2xvc2VPdXRjb21lLnN0YXR1cyA9PT0gImVycm9yIikgbG9nVmVyYm9zZShg
c2Vzc2lvbnMuJHtwYXJhbXMucmVhc29ufTogQUNQIHJ1bnRpbWUgY2xvc2UgZmFpbGVkIGZvciAk
e3BhcmFtcy5zZXNzaW9uS2V5fTogJHtTdHJpbmcoY2xvc2VPdXRjb21lLmVycm9yKX1gKTsKfQph
c3luYyBmdW5jdGlvbiBjbGVhbnVwU2Vzc2lvbkJlZm9yZU11dGF0aW9uKHBhcmFtcykgewoJY29u
c3QgY2xlYW51cEVycm9yID0gYXdhaXQgZW5zdXJlU2Vzc2lvblJ1bnRpbWVDbGVhbnVwKHsKCQlj
Zmc6IHBhcmFtcy5jZmcsCgkJa2V5OiBwYXJhbXMua2V5LAoJCXRhcmdldDogcGFyYW1zLnRhcmdl
dCwKCQlzZXNzaW9uSWQ6IHBhcmFtcy5lbnRyeT8uc2Vzc2lvbklkCgl9KTsKCWlmIChjbGVhbnVw
RXJyb3IpIHJldHVybiBjbGVhbnVwRXJyb3I7CglyZXR1cm4gYXdhaXQgY2xvc2VBY3BSdW50aW1l
Rm9yU2Vzc2lvbih7CgkJY2ZnOiBwYXJhbXMuY2ZnLAoJCXNlc3Npb25LZXk6IHBhcmFtcy5sZWdh
Y3lLZXkgPz8gcGFyYW1zLmNhbm9uaWNhbEtleSA/PyBwYXJhbXMudGFyZ2V0LmNhbm9uaWNhbEtl
eSA/PyBwYXJhbXMua2V5LAoJCWVudHJ5OiBwYXJhbXMuZW50cnksCgkJcmVhc29uOiBwYXJhbXMu
cmVhc29uCgl9KTsKfQphc3luYyBmdW5jdGlvbiBwZXJmb3JtR2F0ZXdheVNlc3Npb25SZXNldChw
YXJhbXMpIHsKCWNvbnN0IHsgY2ZnLCB0YXJnZXQsIHN0b3JlUGF0aCB9ID0gKCgpID0+IHsKCQlj
b25zdCBjZmcgPSBsb2FkQ29uZmlnKCk7CgkJY29uc3QgdGFyZ2V0ID0gcmVzb2x2ZUdhdGV3YXlT
ZXNzaW9uU3RvcmVUYXJnZXQoewoJCQljZmcsCgkJCWtleTogcGFyYW1zLmtleQoJCX0pOwoJCXJl
dHVybiB7CgkJCWNmZywKCQkJdGFyZ2V0LAoJCQlzdG9yZVBhdGg6IHRhcmdldC5zdG9yZVBhdGgK
CQl9OwoJfSkoKTsKCWNvbnN0IHsgZW50cnksIGxlZ2FjeUtleSwgY2Fub25pY2FsS2V5IH0gPSBs
b2FkU2Vzc2lvbkVudHJ5KHBhcmFtcy5rZXkpOwoJY29uc3QgaGFkRXhpc3RpbmdFbnRyeSA9IEJv
b2xlYW4oZW50cnkpOwoJYXdhaXQgdHJpZ2dlckludGVybmFsSG9vayhjcmVhdGVJbnRlcm5hbEhv
b2tFdmVudCgiY29tbWFuZCIsIHBhcmFtcy5yZWFzb24sIHRhcmdldC5jYW5vbmljYWxLZXkgPz8g
cGFyYW1zLmtleSwgewoJCXNlc3Npb25FbnRyeTogZW50cnksCgkJcHJldmlvdXNTZXNzaW9uRW50
cnk6IGVudHJ5LAoJCWNvbW1hbmRTb3VyY2U6IHBhcmFtcy5jb21tYW5kU291cmNlLAoJCWNmZwoJ
fSkpOwoJY29uc3QgbXV0YXRpb25DbGVhbnVwRXJyb3IgPSBhd2FpdCBjbGVhbnVwU2Vzc2lvbkJl
Zm9yZU11dGF0aW9uKHsKCQljZmcsCgkJa2V5OiBwYXJhbXMua2V5LAoJCXRhcmdldCwKCQllbnRy
eSwKCQlsZWdhY3lLZXksCgkJY2Fub25pY2FsS2V5LAoJCXJlYXNvbjogInNlc3Npb24tcmVzZXQi
Cgl9KTsKCWlmIChtdXRhdGlvbkNsZWFudXBFcnJvcikgcmV0dXJuIHsKCQlvazogZmFsc2UsCgkJ
ZXJyb3I6IG11dGF0aW9uQ2xlYW51cEVycm9yCgl9OwoJbGV0IG9sZFNlc3Npb25JZDsKCWxldCBv
bGRTZXNzaW9uRmlsZTsKCWNvbnN0IG5leHQgPSBhd2FpdCB1cGRhdGVTZXNzaW9uU3RvcmUoc3Rv
cmVQYXRoLCAoc3RvcmUpID0+IHsKCQljb25zdCB7IHByaW1hcnlLZXkgfSA9IG1pZ3JhdGVBbmRQ
cnVuZUdhdGV3YXlTZXNzaW9uU3RvcmVLZXkoewoJCQljZmcsCgkJCWtleTogcGFyYW1zLmtleSwK
CQkJc3RvcmUKCQl9KTsKCQljb25zdCBjdXJyZW50RW50cnkgPSBzdG9yZVtwcmltYXJ5S2V5XTsK
CQljb25zdCByZXNldEVudHJ5ID0gc3RyaXBSdW50aW1lTW9kZWxTdGF0ZShjdXJyZW50RW50cnkp
OwoJCWNvbnN0IHJlc29sdmVkTW9kZWwgPSByZXNvbHZlU2Vzc2lvbk1vZGVsUmVmKGNmZywgcmVz
ZXRFbnRyeSwgbm9ybWFsaXplQWdlbnRJZChwYXJzZUFnZW50U2Vzc2lvbktleShwcmltYXJ5S2V5
KT8uYWdlbnRJZCA/PyByZXNvbHZlRGVmYXVsdEFnZW50SWQoY2ZnKSkpOwoJCW9sZFNlc3Npb25J
ZCA9IGN1cnJlbnRFbnRyeT8uc2Vzc2lvbklkOwoJCW9sZFNlc3Npb25GaWxlID0gY3VycmVudEVu
dHJ5Py5zZXNzaW9uRmlsZTsKCQljb25zdCBub3cgPSBEYXRlLm5vdygpOwoJCWNvbnN0IG5leHRF
bnRyeSA9IHsKCQkJc2Vzc2lvbklkOiByYW5kb21VVUlEKCksCgkJCXVwZGF0ZWRBdDogbm93LAoJ
CQlzeXN0ZW1TZW50OiBmYWxzZSwKCQkJYWJvcnRlZExhc3RSdW46IGZhbHNlLAoJCQl0aGlua2lu
Z0xldmVsOiBjdXJyZW50RW50cnk/LnRoaW5raW5nTGV2ZWwsCgkJCWZhc3RNb2RlOiBjdXJyZW50
RW50cnk/LmZhc3RNb2RlLAoJCQl2ZXJib3NlTGV2ZWw6IGN1cnJlbnRFbnRyeT8udmVyYm9zZUxl
dmVsLAoJCQlyZWFzb25pbmdMZXZlbDogY3VycmVudEVudHJ5Py5yZWFzb25pbmdMZXZlbCwKCQkJ
cmVzcG9uc2VVc2FnZTogY3VycmVudEVudHJ5Py5yZXNwb25zZVVzYWdlLAoJCQltb2RlbDogcmVz
b2x2ZWRNb2RlbC5tb2RlbCwKCQkJbW9kZWxQcm92aWRlcjogcmVzb2x2ZWRNb2RlbC5wcm92aWRl
ciwKCQkJY29udGV4dFRva2VuczogcmVzZXRFbnRyeT8uY29udGV4dFRva2VucywKCQkJc2VuZFBv
bGljeTogY3VycmVudEVudHJ5Py5zZW5kUG9saWN5LAoJCQlsYWJlbDogY3VycmVudEVudHJ5Py5s
YWJlbCwKCQkJb3JpZ2luOiBzbmFwc2hvdFNlc3Npb25PcmlnaW4oY3VycmVudEVudHJ5KSwKCQkJ
bGFzdENoYW5uZWw6IGN1cnJlbnRFbnRyeT8ubGFzdENoYW5uZWwsCgkJCWxhc3RUbzogY3VycmVu
dEVudHJ5Py5sYXN0VG8sCgkJCWxhc3RBY2NvdW50SWQ6IGN1cnJlbnRFbnRyeT8ubGFzdEFjY291
bnRJZCwKCQkJbGFzdFRocmVhZElkOiBjdXJyZW50RW50cnk/Lmxhc3RUaHJlYWRJZCwKCQkJc2tp
bGxzU25hcHNob3Q6IGN1cnJlbnRFbnRyeT8uc2tpbGxzU25hcHNob3QsCgkJCWlucHV0VG9rZW5z
OiAwLAoJCQlvdXRwdXRUb2tlbnM6IDAsCgkJCXRvdGFsVG9rZW5zOiAwLAoJCQl0b3RhbFRva2Vu
c0ZyZXNoOiB0cnVlCgkJfTsKCQlzdG9yZVtwcmltYXJ5S2V5XSA9IG5leHRFbnRyeTsKCQlyZXR1
cm4gbmV4dEVudHJ5OwoJfSk7CglhcmNoaXZlU2Vzc2lvblRyYW5zY3JpcHRzRm9yU2Vzc2lvbih7
CgkJc2Vzc2lvbklkOiBvbGRTZXNzaW9uSWQsCgkJc3RvcmVQYXRoLAoJCXNlc3Npb25GaWxlOiBv
bGRTZXNzaW9uRmlsZSwKCQlhZ2VudElkOiB0YXJnZXQuYWdlbnRJZCwKCQlyZWFzb246ICJyZXNl
dCIKCX0pOwoJaWYgKGhhZEV4aXN0aW5nRW50cnkpIGF3YWl0IGVtaXRTZXNzaW9uVW5ib3VuZExp
ZmVjeWNsZUV2ZW50KHsKCQl0YXJnZXRTZXNzaW9uS2V5OiB0YXJnZXQuY2Fub25pY2FsS2V5ID8/
IHBhcmFtcy5rZXksCgkJcmVhc29uOiAic2Vzc2lvbi1yZXNldCIKCX0pOwoJcmV0dXJuIHsKCQlv
azogdHJ1ZSwKCQlrZXk6IHRhcmdldC5jYW5vbmljYWxLZXksCgkJZW50cnk6IG5leHQKCX07Cn0K
Ly8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvZ2F0ZXdheS9zZXJ2ZXItbWV0aG9kcy9hZ2VudC1q
b2IudHMKY29uc3QgQUdFTlRfUlVOX0NBQ0hFX1RUTF9NUyA9IDEwICogNmU0OwovKioKKiBFbWJl
ZGRlZCBydW5zIGNhbiBlbWl0IHRyYW5zaWVudCBsaWZlY3ljbGUgYGVycm9yYCBldmVudHMgd2hp
bGUgYXV0aC9tb2RlbAoqIGZhaWxvdmVyIGlzIHN0aWxsIGluIHByb2dyZXNzLiBHaXZlIGVycm9y
cyBhIHNob3J0IGdyYWNlIHdpbmRvdyBzbyBhCiogc3Vic2VxdWVudCBgc3RhcnRgIGV2ZW50IGNh
biBjYW5jZWwgcHJlbWF0dXJlIHRlcm1pbmFsIHNuYXBzaG90cy4KKi8KY29uc3QgQUdFTlRfUlVO
X0VSUk9SX1JFVFJZX0dSQUNFX01TID0gMTVlMzsKY29uc3QgYWdlbnRSdW5DYWNoZSA9IC8qIEBf
X1BVUkVfXyAqLyBuZXcgTWFwKCk7CmNvbnN0IGFnZW50UnVuU3RhcnRzID0gLyogQF9fUFVSRV9f
ICovIG5ldyBNYXAoKTsKY29uc3QgcGVuZGluZ0FnZW50UnVuRXJyb3JzID0gLyogQF9fUFVSRV9f
ICovIG5ldyBNYXAoKTsKbGV0IGFnZW50UnVuTGlzdGVuZXJTdGFydGVkID0gZmFsc2U7CmZ1bmN0
aW9uIHBydW5lQWdlbnRSdW5DYWNoZShub3cgPSBEYXRlLm5vdygpKSB7Cglmb3IgKGNvbnN0IFty
dW5JZCwgZW50cnldIG9mIGFnZW50UnVuQ2FjaGUpIGlmIChub3cgLSBlbnRyeS50cyA+IEFHRU5U
X1JVTl9DQUNIRV9UVExfTVMpIGFnZW50UnVuQ2FjaGUuZGVsZXRlKHJ1bklkKTsKfQpmdW5jdGlv
biByZWNvcmRBZ2VudFJ1blNuYXBzaG90KGVudHJ5KSB7CglwcnVuZUFnZW50UnVuQ2FjaGUoZW50
cnkudHMpOwoJYWdlbnRSdW5DYWNoZS5zZXQoZW50cnkucnVuSWQsIGVudHJ5KTsKfQpmdW5jdGlv
biBjbGVhclBlbmRpbmdBZ2VudFJ1bkVycm9yKHJ1bklkKSB7Cgljb25zdCBwZW5kaW5nID0gcGVu
ZGluZ0FnZW50UnVuRXJyb3JzLmdldChydW5JZCk7CglpZiAoIXBlbmRpbmcpIHJldHVybjsKCWNs
ZWFyVGltZW91dChwZW5kaW5nLnRpbWVyKTsKCXBlbmRpbmdBZ2VudFJ1bkVycm9ycy5kZWxldGUo
cnVuSWQpOwp9CmZ1bmN0aW9uIHNjaGVkdWxlUGVuZGluZ0FnZW50UnVuRXJyb3Ioc25hcHNob3Qp
IHsKCWNsZWFyUGVuZGluZ0FnZW50UnVuRXJyb3Ioc25hcHNob3QucnVuSWQpOwoJY29uc3QgZHVl
QXQgPSBEYXRlLm5vdygpICsgQUdFTlRfUlVOX0VSUk9SX1JFVFJZX0dSQUNFX01TOwoJY29uc3Qg
dGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHsKCQljb25zdCBwZW5kaW5nID0gcGVuZGluZ0FnZW50
UnVuRXJyb3JzLmdldChzbmFwc2hvdC5ydW5JZCk7CgkJaWYgKCFwZW5kaW5nKSByZXR1cm47CgkJ
cGVuZGluZ0FnZW50UnVuRXJyb3JzLmRlbGV0ZShzbmFwc2hvdC5ydW5JZCk7CgkJcmVjb3JkQWdl
bnRSdW5TbmFwc2hvdChwZW5kaW5nLnNuYXBzaG90KTsKCX0sIEFHRU5UX1JVTl9FUlJPUl9SRVRS
WV9HUkFDRV9NUyk7Cgl0aW1lci51bnJlZj8uKCk7CglwZW5kaW5nQWdlbnRSdW5FcnJvcnMuc2V0
KHNuYXBzaG90LnJ1bklkLCB7CgkJc25hcHNob3QsCgkJZHVlQXQsCgkJdGltZXIKCX0pOwp9CmZ1
bmN0aW9uIGdldFBlbmRpbmdBZ2VudFJ1bkVycm9yKHJ1bklkKSB7Cgljb25zdCBwZW5kaW5nID0g
cGVuZGluZ0FnZW50UnVuRXJyb3JzLmdldChydW5JZCk7CglpZiAoIXBlbmRpbmcpIHJldHVybjsK
CXJldHVybiB7CgkJc25hcHNob3Q6IHBlbmRpbmcuc25hcHNob3QsCgkJZHVlQXQ6IHBlbmRpbmcu
ZHVlQXQKCX07Cn0KZnVuY3Rpb24gY3JlYXRlU25hcHNob3RGcm9tTGlmZWN5Y2xlRXZlbnQocGFy
YW1zKSB7Cgljb25zdCB7IHJ1bklkLCBwaGFzZSwgZGF0YSB9ID0gcGFyYW1zOwoJY29uc3Qgc3Rh
cnRlZEF0ID0gdHlwZW9mIGRhdGE/LnN0YXJ0ZWRBdCA9PT0gIm51bWJlciIgPyBkYXRhLnN0YXJ0
ZWRBdCA6IGFnZW50UnVuU3RhcnRzLmdldChydW5JZCk7Cgljb25zdCBlbmRlZEF0ID0gdHlwZW9m
IGRhdGE/LmVuZGVkQXQgPT09ICJudW1iZXIiID8gZGF0YS5lbmRlZEF0IDogdm9pZCAwOwoJY29u
c3QgZXJyb3IgPSB0eXBlb2YgZGF0YT8uZXJyb3IgPT09ICJzdHJpbmciID8gZGF0YS5lcnJvciA6
IHZvaWQgMDsKCXJldHVybiB7CgkJcnVuSWQsCgkJc3RhdHVzOiBwaGFzZSA9PT0gImVycm9yIiA/
ICJlcnJvciIgOiBkYXRhPy5hYm9ydGVkID8gInRpbWVvdXQiIDogIm9rIiwKCQlzdGFydGVkQXQs
CgkJZW5kZWRBdCwKCQllcnJvciwKCQl0czogRGF0ZS5ub3coKQoJfTsKfQpmdW5jdGlvbiBlbnN1
cmVBZ2VudFJ1bkxpc3RlbmVyKCkgewoJaWYgKGFnZW50UnVuTGlzdGVuZXJTdGFydGVkKSByZXR1
cm47CglhZ2VudFJ1bkxpc3RlbmVyU3RhcnRlZCA9IHRydWU7CglvbkFnZW50RXZlbnQoKGV2dCkg
PT4gewoJCWlmICghZXZ0KSByZXR1cm47CgkJaWYgKGV2dC5zdHJlYW0gIT09ICJsaWZlY3ljbGUi
KSByZXR1cm47CgkJY29uc3QgcGhhc2UgPSBldnQuZGF0YT8ucGhhc2U7CgkJaWYgKHBoYXNlID09
PSAic3RhcnQiKSB7CgkJCWNvbnN0IHN0YXJ0ZWRBdCA9IHR5cGVvZiBldnQuZGF0YT8uc3RhcnRl
ZEF0ID09PSAibnVtYmVyIiA/IGV2dC5kYXRhLnN0YXJ0ZWRBdCA6IHZvaWQgMDsKCQkJYWdlbnRS
dW5TdGFydHMuc2V0KGV2dC5ydW5JZCwgc3RhcnRlZEF0ID8/IERhdGUubm93KCkpOwoJCQljbGVh
clBlbmRpbmdBZ2VudFJ1bkVycm9yKGV2dC5ydW5JZCk7CgkJCWFnZW50UnVuQ2FjaGUuZGVsZXRl
KGV2dC5ydW5JZCk7CgkJCXJldHVybjsKCQl9CgkJaWYgKHBoYXNlICE9PSAiZW5kIiAmJiBwaGFz
ZSAhPT0gImVycm9yIikgcmV0dXJuOwoJCWNvbnN0IHNuYXBzaG90ID0gY3JlYXRlU25hcHNob3RG
cm9tTGlmZWN5Y2xlRXZlbnQoewoJCQlydW5JZDogZXZ0LnJ1bklkLAoJCQlwaGFzZSwKCQkJZGF0
YTogZXZ0LmRhdGEKCQl9KTsKCQlhZ2VudFJ1blN0YXJ0cy5kZWxldGUoZXZ0LnJ1bklkKTsKCQlp
ZiAocGhhc2UgPT09ICJlcnJvciIpIHsKCQkJc2NoZWR1bGVQZW5kaW5nQWdlbnRSdW5FcnJvcihz
bmFwc2hvdCk7CgkJCXJldHVybjsKCQl9CgkJY2xlYXJQZW5kaW5nQWdlbnRSdW5FcnJvcihldnQu
cnVuSWQpOwoJCXJlY29yZEFnZW50UnVuU25hcHNob3Qoc25hcHNob3QpOwoJfSk7Cn0KZnVuY3Rp
b24gZ2V0Q2FjaGVkQWdlbnRSdW4ocnVuSWQpIHsKCXBydW5lQWdlbnRSdW5DYWNoZSgpOwoJcmV0
dXJuIGFnZW50UnVuQ2FjaGUuZ2V0KHJ1bklkKTsKfQphc3luYyBmdW5jdGlvbiB3YWl0Rm9yQWdl
bnRKb2IocGFyYW1zKSB7Cgljb25zdCB7IHJ1bklkLCB0aW1lb3V0TXMsIHNpZ25hbCwgaWdub3Jl
Q2FjaGVkU25hcHNob3QgPSBmYWxzZSB9ID0gcGFyYW1zOwoJZW5zdXJlQWdlbnRSdW5MaXN0ZW5l
cigpOwoJY29uc3QgY2FjaGVkID0gaWdub3JlQ2FjaGVkU25hcHNob3QgPyB2b2lkIDAgOiBnZXRD
YWNoZWRBZ2VudFJ1bihydW5JZCk7CglpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkOwoJaWYgKHRp
bWVvdXRNcyA8PSAwIHx8IHNpZ25hbD8uYWJvcnRlZCkgcmV0dXJuIG51bGw7CglyZXR1cm4gYXdh
aXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKCQlsZXQgc2V0dGxlZCA9IGZhbHNlOwoJCWxl
dCBwZW5kaW5nRXJyb3JUaW1lcjsKCQlsZXQgb25BYm9ydDsKCQljb25zdCBjbGVhclBlbmRpbmdF
cnJvclRpbWVyID0gKCkgPT4gewoJCQlpZiAoIXBlbmRpbmdFcnJvclRpbWVyKSByZXR1cm47CgkJ
CWNsZWFyVGltZW91dChwZW5kaW5nRXJyb3JUaW1lcik7CgkJCXBlbmRpbmdFcnJvclRpbWVyID0g
dm9pZCAwOwoJCX07CgkJY29uc3QgZmluaXNoID0gKGVudHJ5KSA9PiB7CgkJCWlmIChzZXR0bGVk
KSByZXR1cm47CgkJCXNldHRsZWQgPSB0cnVlOwoJCQljbGVhclRpbWVvdXQodGltZXIpOwoJCQlj
bGVhclBlbmRpbmdFcnJvclRpbWVyKCk7CgkJCXVuc3Vic2NyaWJlKCk7CgkJCWlmIChvbkFib3J0
KSBzaWduYWw/LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0Iiwgb25BYm9ydCk7CgkJCXJlc29s
dmUoZW50cnkpOwoJCX07CgkJY29uc3Qgc2NoZWR1bGVFcnJvckZpbmlzaCA9IChzbmFwc2hvdCwg
ZGVsYXlNcyA9IEFHRU5UX1JVTl9FUlJPUl9SRVRSWV9HUkFDRV9NUykgPT4gewoJCQljbGVhclBl
bmRpbmdFcnJvclRpbWVyKCk7CgkJCWNvbnN0IGVmZmVjdGl2ZURlbGF5ID0gTWF0aC5tYXgoMSwg
TWF0aC5taW4oTWF0aC5mbG9vcihkZWxheU1zKSwgMjE0NzQ4MzY0NykpOwoJCQlwZW5kaW5nRXJy
b3JUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4gewoJCQkJY29uc3QgbGF0ZXN0ID0gaWdub3JlQ2Fj
aGVkU25hcHNob3QgPyB2b2lkIDAgOiBnZXRDYWNoZWRBZ2VudFJ1bihydW5JZCk7CgkJCQlpZiAo
bGF0ZXN0KSB7CgkJCQkJZmluaXNoKGxhdGVzdCk7CgkJCQkJcmV0dXJuOwoJCQkJfQoJCQkJcmVj
b3JkQWdlbnRSdW5TbmFwc2hvdChzbmFwc2hvdCk7CgkJCQlmaW5pc2goc25hcHNob3QpOwoJCQl9
LCBlZmZlY3RpdmVEZWxheSk7CgkJCXBlbmRpbmdFcnJvclRpbWVyLnVucmVmPy4oKTsKCQl9OwoJ
CWlmICghaWdub3JlQ2FjaGVkU25hcHNob3QpIHsKCQkJY29uc3QgcGVuZGluZyA9IGdldFBlbmRp
bmdBZ2VudFJ1bkVycm9yKHJ1bklkKTsKCQkJaWYgKHBlbmRpbmcpIHNjaGVkdWxlRXJyb3JGaW5p
c2gocGVuZGluZy5zbmFwc2hvdCwgcGVuZGluZy5kdWVBdCAtIERhdGUubm93KCkpOwoJCX0KCQlj
b25zdCB1bnN1YnNjcmliZSA9IG9uQWdlbnRFdmVudCgoZXZ0KSA9PiB7CgkJCWlmICghZXZ0IHx8
IGV2dC5zdHJlYW0gIT09ICJsaWZlY3ljbGUiKSByZXR1cm47CgkJCWlmIChldnQucnVuSWQgIT09
IHJ1bklkKSByZXR1cm47CgkJCWNvbnN0IHBoYXNlID0gZXZ0LmRhdGE/LnBoYXNlOwoJCQlpZiAo
cGhhc2UgPT09ICJzdGFydCIpIHsKCQkJCWNsZWFyUGVuZGluZ0Vycm9yVGltZXIoKTsKCQkJCXJl
dHVybjsKCQkJfQoJCQlpZiAocGhhc2UgIT09ICJlbmQiICYmIHBoYXNlICE9PSAiZXJyb3IiKSBy
ZXR1cm47CgkJCWNvbnN0IGxhdGVzdCA9IGlnbm9yZUNhY2hlZFNuYXBzaG90ID8gdm9pZCAwIDog
Z2V0Q2FjaGVkQWdlbnRSdW4ocnVuSWQpOwoJCQlpZiAobGF0ZXN0KSB7CgkJCQlmaW5pc2gobGF0
ZXN0KTsKCQkJCXJldHVybjsKCQkJfQoJCQljb25zdCBzbmFwc2hvdCA9IGNyZWF0ZVNuYXBzaG90
RnJvbUxpZmVjeWNsZUV2ZW50KHsKCQkJCXJ1bklkOiBldnQucnVuSWQsCgkJCQlwaGFzZSwKCQkJ
CWRhdGE6IGV2dC5kYXRhCgkJCX0pOwoJCQlpZiAocGhhc2UgPT09ICJlcnJvciIpIHsKCQkJCXNj
aGVkdWxlRXJyb3JGaW5pc2goc25hcHNob3QpOwoJCQkJcmV0dXJuOwoJCQl9CgkJCXJlY29yZEFn
ZW50UnVuU25hcHNob3Qoc25hcHNob3QpOwoJCQlmaW5pc2goc25hcHNob3QpOwoJCX0pOwoJCWNv
bnN0IHRpbWVyRGVsYXlNcyA9IE1hdGgubWF4KDEsIE1hdGgubWluKE1hdGguZmxvb3IodGltZW91
dE1zKSwgMjE0NzQ4MzY0NykpOwoJCWNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBmaW5p
c2gobnVsbCksIHRpbWVyRGVsYXlNcyk7CgkJb25BYm9ydCA9ICgpID0+IGZpbmlzaChudWxsKTsK
CQlzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoImFib3J0Iiwgb25BYm9ydCwgeyBvbmNlOiB0cnVl
IH0pOwoJfSk7Cn0KZW5zdXJlQWdlbnRSdW5MaXN0ZW5lcigpOwovLyNlbmRyZWdpb24KLy8jcmVn
aW9uIHNyYy9nYXRld2F5L3NlcnZlci1tZXRob2RzL2FnZW50LXRpbWVzdGFtcC50cwovKioKKiBD
cm9uIGpvYnMgaW5qZWN0ICJDdXJyZW50IHRpbWU6IC4uLiIgaW50byB0aGVpciBtZXNzYWdlcy4K
KiBTa2lwIGluamVjdGlvbiBmb3IgdGhvc2UuCiovCmNvbnN0IENST05fVElNRV9QQVRURVJOID0g
L0N1cnJlbnQgdGltZTogLzsKLyoqCiogTWF0Y2hlcyBhIGxlYWRpbmcgYFsuLi4gWVlZWS1NTS1E
RCBISDpNTSAuLi5dYCBlbnZlbG9wZSDigJQgZWl0aGVyIGZyb20KKiBjaGFubmVsIHBsdWdpbnMg
b3IgZnJvbSBhIHByZXZpb3VzIGluamVjdGlvbi4gVXNlcyB0aGUgc2FtZSBZWVlZLU1NLURECiog
SEg6TU0gZm9ybWF0IGFzIHtAbGluayBmb3JtYXRab25lZFRpbWVzdGFtcH0sIHNvIGRldGVjdGlv
biBzdGF5cyBpbiBzeW5jCiogd2l0aCB0aGUgZm9ybWF0dGluZy4KKi8KY29uc3QgVElNRVNUQU1Q
X0VOVkVMT1BFX1BBVFRFUk4gPSAvXlxbLipcZHs0fS1cZHsyfS1cZHsyfSBcZHsyfTpcZHsyfS87
Ci8qKgoqIEluamVjdHMgYSBjb21wYWN0IHRpbWVzdGFtcCBwcmVmaXggaW50byBhIG1lc3NhZ2Ug
aWYgb25lIGlzbid0IGFscmVhZHkKKiBwcmVzZW50LiBVc2VzIHRoZSBzYW1lIGBZWVlZLU1NLURE
IEhIOk1NIFRaYCBmb3JtYXQgYXMgY2hhbm5lbCBlbnZlbG9wZQoqIHRpbWVzdGFtcHMgKHtAbGlu
ayBmb3JtYXRab25lZFRpbWVzdGFtcH0pLCBrZWVwaW5nIHRva2VuIGNvc3QgbG93ICh+NwoqIHRv
a2VucykgYW5kIGZvcm1hdCBjb25zaXN0ZW50IGFjcm9zcyBhbGwgYWdlbnQgY29udGV4dHMuCioK
KiBVc2VkIGJ5IHRoZSBnYXRld2F5IGBhZ2VudGAgYW5kIGBjaGF0LnNlbmRgIGhhbmRsZXJzIHRv
IGdpdmUgVFVJLCB3ZWIsCiogc3Bhd25lZCBzdWJhZ2VudHMsIGBzZXNzaW9uc19zZW5kYCwgYW5k
IGhlYXJ0YmVhdCB3YWtlIGV2ZW50cyBkYXRlL3RpbWUKKiBhd2FyZW5lc3Mg4oCUIHdpdGhvdXQg
bW9kaWZ5aW5nIHRoZSBzeXN0ZW0gcHJvbXB0ICh3aGljaCBpcyBjYWNoZWQpLgoqCiogQ2hhbm5l
bCBtZXNzYWdlcyAoRGlzY29yZCwgVGVsZWdyYW0sIGV0Yy4pIGFscmVhZHkgaGF2ZSB0aW1lc3Rh
bXBzIHZpYQoqIGVudmVsb3BlIGZvcm1hdHRpbmcgYW5kIHRha2UgYSBzZXBhcmF0ZSBjb2RlIHBh
dGgg4oCUIHRoZXkgbmV2ZXIgcmVhY2gKKiB0aGVzZSBoYW5kbGVycywgc28gdGhlcmUgaXMgbm8g
ZG91YmxlLXN0YW1waW5nIHJpc2suIFRoZSBkZXRlY3Rpb24KKiBwYXR0ZXJuIGlzIGEgc2FmZXR5
IG5ldCBmb3IgZWRnZSBjYXNlcy4KKgoqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vbHRib3Qv
bW9sdGJvdC9pc3N1ZXMvMzY1OAoqLwpmdW5jdGlvbiBpbmplY3RUaW1lc3RhbXAobWVzc2FnZSwg
b3B0cykgewoJaWYgKCFtZXNzYWdlLnRyaW0oKSkgcmV0dXJuIG1lc3NhZ2U7CglpZiAoVElNRVNU
QU1QX0VOVkVMT1BFX1BBVFRFUk4udGVzdChtZXNzYWdlKSkgcmV0dXJuIG1lc3NhZ2U7CglpZiAo
Q1JPTl9USU1FX1BBVFRFUk4udGVzdChtZXNzYWdlKSkgcmV0dXJuIG1lc3NhZ2U7Cgljb25zdCBu
b3cgPSBvcHRzPy5ub3cgPz8gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7Cgljb25zdCB0aW1l
em9uZSA9IG9wdHM/LnRpbWV6b25lID8/ICJVVEMiOwoJY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0
Wm9uZWRUaW1lc3RhbXAobm93LCB7IHRpbWVab25lOiB0aW1lem9uZSB9KTsKCWlmICghZm9ybWF0
dGVkKSByZXR1cm4gbWVzc2FnZTsKCXJldHVybiBgWyR7bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQo
ImVuLVVTIiwgewoJCXRpbWVab25lOiB0aW1lem9uZSwKCQl3ZWVrZGF5OiAic2hvcnQiCgl9KS5m
b3JtYXQobm93KX0gJHtmb3JtYXR0ZWR9XSAke21lc3NhZ2V9YDsKfQovKioKKiBCdWlsZCBUaW1l
c3RhbXBJbmplY3Rpb25PcHRpb25zIGZyb20gYW4gT3BlbkNsYXdDb25maWcuCiovCmZ1bmN0aW9u
IHRpbWVzdGFtcE9wdHNGcm9tQ29uZmlnKGNmZykgewoJcmV0dXJuIHsgdGltZXpvbmU6IHJlc29s
dmVVc2VyVGltZXpvbmUoY2ZnLmFnZW50cz8uZGVmYXVsdHM/LnVzZXJUaW1lem9uZSkgfTsKfQov
LyNlbmRyZWdpb24KLy8jcmVnaW9uIHNyYy9nYXRld2F5L3NlcnZlci1tZXRob2RzL2FnZW50LXdh
aXQtZGVkdXBlLnRzCmNvbnN0IEFHRU5UX1dBSVRFUlNfQllfUlVOX0lEID0gLyogQF9fUFVSRV9f
ICovIG5ldyBNYXAoKTsKZnVuY3Rpb24gcGFyc2VSdW5JZEZyb21EZWR1cGVLZXkoa2V5KSB7Cglp
ZiAoa2V5LnN0YXJ0c1dpdGgoImFnZW50OiIpKSByZXR1cm4ga2V5LnNsaWNlKDYpIHx8IG51bGw7
CglpZiAoa2V5LnN0YXJ0c1dpdGgoImNoYXQ6IikpIHJldHVybiBrZXkuc2xpY2UoNSkgfHwgbnVs
bDsKCXJldHVybiBudWxsOwp9CmZ1bmN0aW9uIGFzRmluaXRlTnVtYmVyKHZhbHVlKSB7CglyZXR1
cm4gdHlwZW9mIHZhbHVlID09PSAibnVtYmVyIiAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpID8g
dmFsdWUgOiB2b2lkIDA7Cn0KZnVuY3Rpb24gcmVtb3ZlV2FpdGVyKHJ1bklkLCB3YWl0ZXIpIHsK
CWNvbnN0IHdhaXRlcnMgPSBBR0VOVF9XQUlURVJTX0JZX1JVTl9JRC5nZXQocnVuSWQpOwoJaWYg
KCF3YWl0ZXJzKSByZXR1cm47Cgl3YWl0ZXJzLmRlbGV0ZSh3YWl0ZXIpOwoJaWYgKHdhaXRlcnMu
c2l6ZSA9PT0gMCkgQUdFTlRfV0FJVEVSU19CWV9SVU5fSUQuZGVsZXRlKHJ1bklkKTsKfQpmdW5j
dGlvbiBhZGRXYWl0ZXIocnVuSWQsIHdhaXRlcikgewoJY29uc3Qgbm9ybWFsaXplZFJ1bklkID0g
cnVuSWQudHJpbSgpOwoJaWYgKCFub3JtYWxpemVkUnVuSWQpIHJldHVybiAoKSA9PiB7fTsKCWNv
bnN0IGV4aXN0aW5nID0gQUdFTlRfV0FJVEVSU19CWV9SVU5fSUQuZ2V0KG5vcm1hbGl6ZWRSdW5J
ZCk7CglpZiAoZXhpc3RpbmcpIHsKCQlleGlzdGluZy5hZGQod2FpdGVyKTsKCQlyZXR1cm4gKCkg
PT4gcmVtb3ZlV2FpdGVyKG5vcm1hbGl6ZWRSdW5JZCwgd2FpdGVyKTsKCX0KCUFHRU5UX1dBSVRF
UlNfQllfUlVOX0lELnNldChub3JtYWxpemVkUnVuSWQsIG5ldyBTZXQoW3dhaXRlcl0pKTsKCXJl
dHVybiAoKSA9PiByZW1vdmVXYWl0ZXIobm9ybWFsaXplZFJ1bklkLCB3YWl0ZXIpOwp9CmZ1bmN0
aW9uIG5vdGlmeVdhaXRlcnMocnVuSWQpIHsKCWNvbnN0IG5vcm1hbGl6ZWRSdW5JZCA9IHJ1bklk
LnRyaW0oKTsKCWlmICghbm9ybWFsaXplZFJ1bklkKSByZXR1cm47Cgljb25zdCB3YWl0ZXJzID0g
QUdFTlRfV0FJVEVSU19CWV9SVU5fSUQuZ2V0KG5vcm1hbGl6ZWRSdW5JZCk7CglpZiAoIXdhaXRl
cnMgfHwgd2FpdGVycy5zaXplID09PSAwKSByZXR1cm47Cglmb3IgKGNvbnN0IHdhaXRlciBvZiB3
YWl0ZXJzKSB3YWl0ZXIoKTsKfQpmdW5jdGlvbiByZWFkVGVybWluYWxTbmFwc2hvdEZyb21EZWR1
cGVFbnRyeShlbnRyeSkgewoJY29uc3QgcGF5bG9hZCA9IGVudHJ5LnBheWxvYWQ7Cgljb25zdCBz
dGF0dXMgPSB0eXBlb2YgcGF5bG9hZD8uc3RhdHVzID09PSAic3RyaW5nIiA/IHBheWxvYWQuc3Rh
dHVzIDogdm9pZCAwOwoJaWYgKHN0YXR1cyA9PT0gImFjY2VwdGVkIiB8fCBzdGF0dXMgPT09ICJz
dGFydGVkIiB8fCBzdGF0dXMgPT09ICJpbl9mbGlnaHQiKSByZXR1cm4gbnVsbDsKCWNvbnN0IHN0
YXJ0ZWRBdCA9IGFzRmluaXRlTnVtYmVyKHBheWxvYWQ/LnN0YXJ0ZWRBdCk7Cgljb25zdCBlbmRl
ZEF0ID0gYXNGaW5pdGVOdW1iZXIocGF5bG9hZD8uZW5kZWRBdCkgPz8gZW50cnkudHM7Cgljb25z
dCBlcnJvck1lc3NhZ2UgPSB0eXBlb2YgcGF5bG9hZD8uZXJyb3IgPT09ICJzdHJpbmciID8gcGF5
bG9hZC5lcnJvciA6IHR5cGVvZiBwYXlsb2FkPy5zdW1tYXJ5ID09PSAic3RyaW5nIiA/IHBheWxv
YWQuc3VtbWFyeSA6IGVudHJ5LmVycm9yPy5tZXNzYWdlOwoJaWYgKHN0YXR1cyA9PT0gIm9rIiB8
fCBzdGF0dXMgPT09ICJ0aW1lb3V0IikgcmV0dXJuIHsKCQlzdGF0dXMsCgkJc3RhcnRlZEF0LAoJ
CWVuZGVkQXQsCgkJZXJyb3I6IHN0YXR1cyA9PT0gInRpbWVvdXQiID8gZXJyb3JNZXNzYWdlIDog
dm9pZCAwCgl9OwoJaWYgKHN0YXR1cyA9PT0gImVycm9yIiB8fCAhZW50cnkub2spIHJldHVybiB7
CgkJc3RhdHVzOiAiZXJyb3IiLAoJCXN0YXJ0ZWRBdCwKCQllbmRlZEF0LAoJCWVycm9yOiBlcnJv
ck1lc3NhZ2UKCX07CglyZXR1cm4gbnVsbDsKfQpmdW5jdGlvbiByZWFkVGVybWluYWxTbmFwc2hv
dEZyb21HYXRld2F5RGVkdXBlKHBhcmFtcykgewoJaWYgKHBhcmFtcy5pZ25vcmVBZ2VudFRlcm1p
bmFsU25hcHNob3QpIHsKCQljb25zdCBjaGF0RW50cnkgPSBwYXJhbXMuZGVkdXBlLmdldChgY2hh
dDoke3BhcmFtcy5ydW5JZH1gKTsKCQlpZiAoIWNoYXRFbnRyeSkgcmV0dXJuIG51bGw7CgkJcmV0
dXJuIHJlYWRUZXJtaW5hbFNuYXBzaG90RnJvbURlZHVwZUVudHJ5KGNoYXRFbnRyeSk7Cgl9Cglj
b25zdCBjaGF0RW50cnkgPSBwYXJhbXMuZGVkdXBlLmdldChgY2hhdDoke3BhcmFtcy5ydW5JZH1g
KTsKCWNvbnN0IGNoYXRTbmFwc2hvdCA9IGNoYXRFbnRyeSA/IHJlYWRUZXJtaW5hbFNuYXBzaG90
RnJvbURlZHVwZUVudHJ5KGNoYXRFbnRyeSkgOiBudWxsOwoJY29uc3QgYWdlbnRFbnRyeSA9IHBh
cmFtcy5kZWR1cGUuZ2V0KGBhZ2VudDoke3BhcmFtcy5ydW5JZH1gKTsKCWNvbnN0IGFnZW50U25h
cHNob3QgPSBhZ2VudEVudHJ5ID8gcmVhZFRlcm1pbmFsU25hcHNob3RGcm9tRGVkdXBlRW50cnko
YWdlbnRFbnRyeSkgOiBudWxsOwoJaWYgKGFnZW50RW50cnkpIHsKCQlpZiAoIWFnZW50U25hcHNo
b3QpIHsKCQkJaWYgKGNoYXRTbmFwc2hvdCAmJiBjaGF0RW50cnkgJiYgY2hhdEVudHJ5LnRzID4g
YWdlbnRFbnRyeS50cykgcmV0dXJuIGNoYXRTbmFwc2hvdDsKCQkJcmV0dXJuIG51bGw7CgkJfQoJ
fQoJaWYgKGFnZW50U25hcHNob3QgJiYgY2hhdFNuYXBzaG90ICYmIGFnZW50RW50cnkgJiYgY2hh
dEVudHJ5KSByZXR1cm4gY2hhdEVudHJ5LnRzID4gYWdlbnRFbnRyeS50cyA/IGNoYXRTbmFwc2hv
dCA6IGFnZW50U25hcHNob3Q7CglyZXR1cm4gYWdlbnRTbmFwc2hvdCA/PyBjaGF0U25hcHNob3Q7
Cn0KYXN5bmMgZnVuY3Rpb24gd2FpdEZvclRlcm1pbmFsR2F0ZXdheURlZHVwZShwYXJhbXMpIHsK
CWNvbnN0IGluaXRpYWwgPSByZWFkVGVybWluYWxTbmFwc2hvdEZyb21HYXRld2F5RGVkdXBlKHBh
cmFtcyk7CglpZiAoaW5pdGlhbCkgcmV0dXJuIGluaXRpYWw7CglpZiAocGFyYW1zLnRpbWVvdXRN
cyA8PSAwIHx8IHBhcmFtcy5zaWduYWw/LmFib3J0ZWQpIHJldHVybiBudWxsOwoJcmV0dXJuIGF3
YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CgkJbGV0IHNldHRsZWQgPSBmYWxzZTsKCQls
ZXQgdGltZW91dEhhbmRsZTsKCQlsZXQgb25BYm9ydDsKCQlsZXQgcmVtb3ZlV2FpdGVyOwoJCWNv
bnN0IGZpbmlzaCA9IChzbmFwc2hvdCkgPT4gewoJCQlpZiAoc2V0dGxlZCkgcmV0dXJuOwoJCQlz
ZXR0bGVkID0gdHJ1ZTsKCQkJaWYgKHRpbWVvdXRIYW5kbGUpIGNsZWFyVGltZW91dCh0aW1lb3V0
SGFuZGxlKTsKCQkJaWYgKG9uQWJvcnQpIHBhcmFtcy5zaWduYWw/LnJlbW92ZUV2ZW50TGlzdGVu
ZXIoImFib3J0Iiwgb25BYm9ydCk7CgkJCXJlbW92ZVdhaXRlcj8uKCk7CgkJCXJlc29sdmUoc25h
cHNob3QpOwoJCX07CgkJY29uc3Qgb25XYWtlID0gKCkgPT4gewoJCQljb25zdCBzbmFwc2hvdCA9
IHJlYWRUZXJtaW5hbFNuYXBzaG90RnJvbUdhdGV3YXlEZWR1cGUocGFyYW1zKTsKCQkJaWYgKHNu
YXBzaG90KSBmaW5pc2goc25hcHNob3QpOwoJCX07CgkJcmVtb3ZlV2FpdGVyID0gYWRkV2FpdGVy
KHBhcmFtcy5ydW5JZCwgb25XYWtlKTsKCQlvbldha2UoKTsKCQlpZiAoc2V0dGxlZCkgcmV0dXJu
OwoJCWNvbnN0IHRpbWVvdXREZWxheU1zID0gTWF0aC5tYXgoMSwgTWF0aC5taW4oTWF0aC5mbG9v
cihwYXJhbXMudGltZW91dE1zKSwgMjE0NzQ4MzY0NykpOwoJCXRpbWVvdXRIYW5kbGUgPSBzZXRU
aW1lb3V0KCgpID0+IGZpbmlzaChudWxsKSwgdGltZW91dERlbGF5TXMpOwoJCXRpbWVvdXRIYW5k
bGUudW5yZWY/LigpOwoJCW9uQWJvcnQgPSAoKSA9PiBmaW5pc2gobnVsbCk7CgkJcGFyYW1zLnNp
Z25hbD8uYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLCBvbkFib3J0LCB7IG9uY2U6IHRydWUgfSk7
Cgl9KTsKfQpmdW5jdGlvbiBzZXRHYXRld2F5RGVkdXBlRW50cnkocGFyYW1zKSB7CglwYXJhbXMu
ZGVkdXBlLnNldChwYXJhbXMua2V5LCBwYXJhbXMuZW50cnkpOwoJY29uc3QgcnVuSWQgPSBwYXJz
ZVJ1bklkRnJvbURlZHVwZUtleShwYXJhbXMua2V5KTsKCWlmICghcnVuSWQpIHJldHVybjsKCWlm
ICghcmVhZFRlcm1pbmFsU25hcHNob3RGcm9tRGVkdXBlRW50cnkocGFyYW1zLmVudHJ5KSkgcmV0
dXJuOwoJbm90aWZ5V2FpdGVycyhydW5JZCk7Cn0KLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMv
Z2F0ZXdheS9zZXJ2ZXItbWV0aG9kcy9hZ2VudC50cwpjb25zdCBSRVNFVF9DT01NQU5EX1JFID0g
L15cLyhuZXd8cmVzZXQpKD86XHMrKFtcc1xTXSopKT8kL2k7CmZ1bmN0aW9uIHJlc29sdmVTZW5k
ZXJJc093bmVyRnJvbUNsaWVudChjbGllbnQpIHsKCXJldHVybiAoQXJyYXkuaXNBcnJheShjbGll
bnQ/LmNvbm5lY3Q/LnNjb3BlcykgPyBjbGllbnQuY29ubmVjdC5zY29wZXMgOiBbXSkuaW5jbHVk
ZXMoQURNSU5fU0NPUEUkMyk7Cn0KYXN5bmMgZnVuY3Rpb24gcnVuU2Vzc2lvblJlc2V0RnJvbUFn
ZW50KHBhcmFtcykgewoJY29uc3QgcmVzdWx0ID0gYXdhaXQgcGVyZm9ybUdhdGV3YXlTZXNzaW9u
UmVzZXQoewoJCWtleTogcGFyYW1zLmtleSwKCQlyZWFzb246IHBhcmFtcy5yZWFzb24sCgkJY29t
bWFuZFNvdXJjZTogImdhdGV3YXk6YWdlbnQiCgl9KTsKCWlmICghcmVzdWx0Lm9rKSByZXR1cm4g
cmVzdWx0OwoJcmV0dXJuIHsKCQlvazogdHJ1ZSwKCQlrZXk6IHJlc3VsdC5rZXksCgkJc2Vzc2lv
bklkOiByZXN1bHQuZW50cnkuc2Vzc2lvbklkCgl9Owp9CmZ1bmN0aW9uIGRpc3BhdGNoQWdlbnRS
dW5Gcm9tR2F0ZXdheShwYXJhbXMpIHsKCWFnZW50Q29tbWFuZEZyb21JbmdyZXNzKHBhcmFtcy5p
bmdyZXNzT3B0cywgZGVmYXVsdFJ1bnRpbWUsIHBhcmFtcy5jb250ZXh0LmRlcHMpLnRoZW4oKHJl
c3VsdCkgPT4gewoJCWNvbnN0IHBheWxvYWQgPSB7CgkJCXJ1bklkOiBwYXJhbXMucnVuSWQsCgkJ
CXN0YXR1czogIm9rIiwKCQkJc3VtbWFyeTogImNvbXBsZXRlZCIsCgkJCXJlc3VsdAoJCX07CgkJ
c2V0R2F0ZXdheURlZHVwZUVudHJ5KHsKCQkJZGVkdXBlOiBwYXJhbXMuY29udGV4dC5kZWR1cGUs
CgkJCWtleTogYGFnZW50OiR7cGFyYW1zLmlkZW1wb3RlbmN5S2V5fWAsCgkJCWVudHJ5OiB7CgkJ
CQl0czogRGF0ZS5ub3coKSwKCQkJCW9rOiB0cnVlLAoJCQkJcGF5bG9hZAoJCQl9CgkJfSk7CgkJ
cGFyYW1zLnJlc3BvbmQodHJ1ZSwgcGF5bG9hZCwgdm9pZCAwLCB7IHJ1bklkOiBwYXJhbXMucnVu
SWQgfSk7Cgl9KS5jYXRjaCgoZXJyKSA9PiB7CgkJY29uc3QgZXJyb3IgPSBlcnJvclNoYXBlKEVy
cm9yQ29kZXMuVU5BVkFJTEFCTEUsIFN0cmluZyhlcnIpKTsKCQljb25zdCBwYXlsb2FkID0gewoJ
CQlydW5JZDogcGFyYW1zLnJ1bklkLAoJCQlzdGF0dXM6ICJlcnJvciIsCgkJCXN1bW1hcnk6IFN0
cmluZyhlcnIpCgkJfTsKCQlzZXRHYXRld2F5RGVkdXBlRW50cnkoewoJCQlkZWR1cGU6IHBhcmFt
cy5jb250ZXh0LmRlZHVwZSwKCQkJa2V5OiBgYWdlbnQ6JHtwYXJhbXMuaWRlbXBvdGVuY3lLZXl9
YCwKCQkJZW50cnk6IHsKCQkJCXRzOiBEYXRlLm5vdygpLAoJCQkJb2s6IGZhbHNlLAoJCQkJcGF5
bG9hZCwKCQkJCWVycm9yCgkJCX0KCQl9KTsKCQlwYXJhbXMucmVzcG9uZChmYWxzZSwgcGF5bG9h
ZCwgZXJyb3IsIHsKCQkJcnVuSWQ6IHBhcmFtcy5ydW5JZCwKCQkJZXJyb3I6IGZvcm1hdEZvckxv
ZyhlcnIpCgkJfSk7Cgl9KTsKfQpjb25zdCBhZ2VudEhhbmRsZXJzID0gewoJYWdlbnQ6IGFzeW5j
ICh7IHBhcmFtcywgcmVzcG9uZCwgY29udGV4dCwgY2xpZW50LCBpc1dlYmNoYXRDb25uZWN0IH0p
ID0+IHsKCQljb25zdCBwID0gcGFyYW1zOwoJCWlmICghdmFsaWRhdGVBZ2VudFBhcmFtcyhwKSkg
ewoJCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElE
X1JFUVVFU1QsIGBpbnZhbGlkIGFnZW50IHBhcmFtczogJHtmb3JtYXRWYWxpZGF0aW9uRXJyb3Jz
KHZhbGlkYXRlQWdlbnRQYXJhbXMuZXJyb3JzKX1gKSk7CgkJCXJldHVybjsKCQl9CgkJY29uc3Qg
cmVxdWVzdCA9IHA7CgkJY29uc3Qgc2VuZGVySXNPd25lciA9IHJlc29sdmVTZW5kZXJJc093bmVy
RnJvbUNsaWVudChjbGllbnQpOwoJCWNvbnN0IGNmZyA9IGxvYWRDb25maWcoKTsKCQljb25zdCBp
ZGVtID0gcmVxdWVzdC5pZGVtcG90ZW5jeUtleTsKCQljb25zdCBub3JtYWxpemVkU3Bhd25lZCA9
IG5vcm1hbGl6ZVNwYXduZWRSdW5NZXRhZGF0YSh7CgkJCWdyb3VwSWQ6IHJlcXVlc3QuZ3JvdXBJ
ZCwKCQkJZ3JvdXBDaGFubmVsOiByZXF1ZXN0Lmdyb3VwQ2hhbm5lbCwKCQkJZ3JvdXBTcGFjZTog
cmVxdWVzdC5ncm91cFNwYWNlCgkJfSk7CgkJbGV0IHJlc29sdmVkR3JvdXBJZCA9IG5vcm1hbGl6
ZWRTcGF3bmVkLmdyb3VwSWQ7CgkJbGV0IHJlc29sdmVkR3JvdXBDaGFubmVsID0gbm9ybWFsaXpl
ZFNwYXduZWQuZ3JvdXBDaGFubmVsOwoJCWxldCByZXNvbHZlZEdyb3VwU3BhY2UgPSBub3JtYWxp
emVkU3Bhd25lZC5ncm91cFNwYWNlOwoJCWxldCBzcGF3bmVkQnlWYWx1ZTsKCQljb25zdCBpbnB1
dFByb3ZlbmFuY2UgPSBub3JtYWxpemVJbnB1dFByb3ZlbmFuY2UocmVxdWVzdC5pbnB1dFByb3Zl
bmFuY2UpOwoJCWNvbnN0IGNhY2hlZCA9IGNvbnRleHQuZGVkdXBlLmdldChgYWdlbnQ6JHtpZGVt
fWApOwoJCWlmIChjYWNoZWQpIHsKCQkJcmVzcG9uZChjYWNoZWQub2ssIGNhY2hlZC5wYXlsb2Fk
LCBjYWNoZWQuZXJyb3IsIHsgY2FjaGVkOiB0cnVlIH0pOwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0
IG5vcm1hbGl6ZWRBdHRhY2htZW50cyA9IG5vcm1hbGl6ZVJwY0F0dGFjaG1lbnRzVG9DaGF0QXR0
YWNobWVudHMocmVxdWVzdC5hdHRhY2htZW50cyk7CgkJY29uc3QgcmVxdWVzdGVkQmVzdEVmZm9y
dERlbGl2ZXIgPSB0eXBlb2YgcmVxdWVzdC5iZXN0RWZmb3J0RGVsaXZlciA9PT0gImJvb2xlYW4i
ID8gcmVxdWVzdC5iZXN0RWZmb3J0RGVsaXZlciA6IHZvaWQgMDsKCQlsZXQgbWVzc2FnZSA9IChy
ZXF1ZXN0Lm1lc3NhZ2UgPz8gIiIpLnRyaW0oKTsKCQlsZXQgaW1hZ2VzID0gW107CgkJaWYgKG5v
cm1hbGl6ZWRBdHRhY2htZW50cy5sZW5ndGggPiAwKSB0cnkgewoJCQljb25zdCBwYXJzZWQgPSBh
d2FpdCBwYXJzZU1lc3NhZ2VXaXRoQXR0YWNobWVudHMobWVzc2FnZSwgbm9ybWFsaXplZEF0dGFj
aG1lbnRzLCB7CgkJCQltYXhCeXRlczogNWU2LAoJCQkJbG9nOiBjb250ZXh0LmxvZ0dhdGV3YXkK
CQkJfSk7CgkJCW1lc3NhZ2UgPSBwYXJzZWQubWVzc2FnZS50cmltKCk7CgkJCWltYWdlcyA9IHBh
cnNlZC5pbWFnZXM7CgkJfSBjYXRjaCAoZXJyKSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwg
ZXJyb3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgU3RyaW5nKGVycikpKTsKCQkJ
cmV0dXJuOwoJCX0KCQljb25zdCBpc0tub3duR2F0ZXdheUNoYW5uZWwgPSAodmFsdWUpID0+IGlz
R2F0ZXdheU1lc3NhZ2VDaGFubmVsKHZhbHVlKTsKCQljb25zdCBjaGFubmVsSGludHMgPSBbcmVx
dWVzdC5jaGFubmVsLCByZXF1ZXN0LnJlcGx5Q2hhbm5lbF0uZmlsdGVyKCh2YWx1ZSkgPT4gdHlw
ZW9mIHZhbHVlID09PSAic3RyaW5nIikubWFwKCh2YWx1ZSkgPT4gdmFsdWUudHJpbSgpKS5maWx0
ZXIoQm9vbGVhbik7CgkJZm9yIChjb25zdCByYXdDaGFubmVsIG9mIGNoYW5uZWxIaW50cykgewoJ
CQljb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplTWVzc2FnZUNoYW5uZWwocmF3Q2hhbm5lbCk7
CgkJCWlmIChub3JtYWxpemVkICYmIG5vcm1hbGl6ZWQgIT09ICJsYXN0IiAmJiAhaXNLbm93bkdh
dGV3YXlDaGFubmVsKG5vcm1hbGl6ZWQpKSB7CgkJCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVy
cm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsIGBpbnZhbGlkIGFnZW50IHBhcmFt
czogdW5rbm93biBjaGFubmVsOiAke1N0cmluZyhub3JtYWxpemVkKX1gKSk7CgkJCQlyZXR1cm47
CgkJCX0KCQl9CgkJY29uc3QgYWdlbnRJZFJhdyA9IHR5cGVvZiByZXF1ZXN0LmFnZW50SWQgPT09
ICJzdHJpbmciID8gcmVxdWVzdC5hZ2VudElkLnRyaW0oKSA6ICIiOwoJCWNvbnN0IGFnZW50SWQg
PSBhZ2VudElkUmF3ID8gbm9ybWFsaXplQWdlbnRJZChhZ2VudElkUmF3KSA6IHZvaWQgMDsKCQlp
ZiAoYWdlbnRJZCkgewoJCQlpZiAoIWxpc3RBZ2VudElkcyhjZmcpLmluY2x1ZGVzKGFnZW50SWQp
KSB7CgkJCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZB
TElEX1JFUVVFU1QsIGBpbnZhbGlkIGFnZW50IHBhcmFtczogdW5rbm93biBhZ2VudCBpZCAiJHty
ZXF1ZXN0LmFnZW50SWR9ImApKTsKCQkJCXJldHVybjsKCQkJfQoJCX0KCQljb25zdCByZXF1ZXN0
ZWRTZXNzaW9uS2V5UmF3ID0gdHlwZW9mIHJlcXVlc3Quc2Vzc2lvbktleSA9PT0gInN0cmluZyIg
JiYgcmVxdWVzdC5zZXNzaW9uS2V5LnRyaW0oKSA/IHJlcXVlc3Quc2Vzc2lvbktleS50cmltKCkg
OiB2b2lkIDA7CgkJaWYgKHJlcXVlc3RlZFNlc3Npb25LZXlSYXcgJiYgY2xhc3NpZnlTZXNzaW9u
S2V5U2hhcGUocmVxdWVzdGVkU2Vzc2lvbktleVJhdykgPT09ICJtYWxmb3JtZWRfYWdlbnQiKSB7
CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURf
UkVRVUVTVCwgYGludmFsaWQgYWdlbnQgcGFyYW1zOiBtYWxmb3JtZWQgc2Vzc2lvbiBrZXkgIiR7
cmVxdWVzdGVkU2Vzc2lvbktleVJhd30iYCkpOwoJCQlyZXR1cm47CgkJfQoJCWxldCByZXF1ZXN0
ZWRTZXNzaW9uS2V5ID0gcmVxdWVzdGVkU2Vzc2lvbktleVJhdyA/PyByZXNvbHZlRXhwbGljaXRB
Z2VudFNlc3Npb25LZXkoewoJCQljZmcsCgkJCWFnZW50SWQKCQl9KTsKCQlpZiAoYWdlbnRJZCAm
JiByZXF1ZXN0ZWRTZXNzaW9uS2V5UmF3KSB7CgkJCWNvbnN0IHNlc3Npb25BZ2VudElkID0gcmVz
b2x2ZUFnZW50SWRGcm9tU2Vzc2lvbktleShyZXF1ZXN0ZWRTZXNzaW9uS2V5UmF3KTsKCQkJaWYg
KHNlc3Npb25BZ2VudElkICE9PSBhZ2VudElkKSB7CgkJCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAs
IGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsIGBpbnZhbGlkIGFnZW50IHBh
cmFtczogYWdlbnQgIiR7cmVxdWVzdC5hZ2VudElkfSIgZG9lcyBub3QgbWF0Y2ggc2Vzc2lvbiBr
ZXkgYWdlbnQgIiR7c2Vzc2lvbkFnZW50SWR9ImApKTsKCQkJCXJldHVybjsKCQkJfQoJCX0KCQls
ZXQgcmVzb2x2ZWRTZXNzaW9uSWQgPSByZXF1ZXN0LnNlc3Npb25JZD8udHJpbSgpIHx8IHZvaWQg
MDsKCQlsZXQgc2Vzc2lvbkVudHJ5OwoJCWxldCBiZXN0RWZmb3J0RGVsaXZlciA9IHJlcXVlc3Rl
ZEJlc3RFZmZvcnREZWxpdmVyID8/IGZhbHNlOwoJCWxldCBjZmdGb3JBZ2VudDsKCQlsZXQgcmVz
b2x2ZWRTZXNzaW9uS2V5ID0gcmVxdWVzdGVkU2Vzc2lvbktleTsKCQlsZXQgc2tpcFRpbWVzdGFt
cEluamVjdGlvbiA9IGZhbHNlOwoJCWNvbnN0IHJlc2V0Q29tbWFuZE1hdGNoID0gbWVzc2FnZS5t
YXRjaChSRVNFVF9DT01NQU5EX1JFKTsKCQlpZiAocmVzZXRDb21tYW5kTWF0Y2ggJiYgcmVxdWVz
dGVkU2Vzc2lvbktleSkgewoJCQljb25zdCByZXNldFJlYXNvbiA9IHJlc2V0Q29tbWFuZE1hdGNo
WzFdPy50b0xvd2VyQ2FzZSgpID09PSAibmV3IiA/ICJuZXciIDogInJlc2V0IjsKCQkJY29uc3Qg
cmVzZXRSZXN1bHQgPSBhd2FpdCBydW5TZXNzaW9uUmVzZXRGcm9tQWdlbnQoewoJCQkJa2V5OiBy
ZXF1ZXN0ZWRTZXNzaW9uS2V5LAoJCQkJcmVhc29uOiByZXNldFJlYXNvbgoJCQl9KTsKCQkJaWYg
KCFyZXNldFJlc3VsdC5vaykgewoJCQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCByZXNldFJlc3Vs
dC5lcnJvcik7CgkJCQlyZXR1cm47CgkJCX0KCQkJcmVxdWVzdGVkU2Vzc2lvbktleSA9IHJlc2V0
UmVzdWx0LmtleTsKCQkJcmVzb2x2ZWRTZXNzaW9uSWQgPSByZXNldFJlc3VsdC5zZXNzaW9uSWQg
Pz8gcmVzb2x2ZWRTZXNzaW9uSWQ7CgkJCWNvbnN0IHBvc3RSZXNldE1lc3NhZ2UgPSByZXNldENv
bW1hbmRNYXRjaFsyXT8udHJpbSgpID8/ICIiOwoJCQlpZiAocG9zdFJlc2V0TWVzc2FnZSkgbWVz
c2FnZSA9IHBvc3RSZXNldE1lc3NhZ2U7CgkJCWVsc2UgewoJCQkJbWVzc2FnZSA9IGJ1aWxkQmFy
ZVNlc3Npb25SZXNldFByb21wdChjZmcpOwoJCQkJc2tpcFRpbWVzdGFtcEluamVjdGlvbiA9IHRy
dWU7CgkJCX0KCQl9CgkJaWYgKCFza2lwVGltZXN0YW1wSW5qZWN0aW9uKSBtZXNzYWdlID0gaW5q
ZWN0VGltZXN0YW1wKG1lc3NhZ2UsIHRpbWVzdGFtcE9wdHNGcm9tQ29uZmlnKGNmZykpOwoJCWlm
IChyZXF1ZXN0ZWRTZXNzaW9uS2V5KSB7CgkJCWNvbnN0IHsgY2ZnLCBzdG9yZVBhdGgsIGVudHJ5
LCBjYW5vbmljYWxLZXkgfSA9IGxvYWRTZXNzaW9uRW50cnkocmVxdWVzdGVkU2Vzc2lvbktleSk7
CgkJCWNmZ0ZvckFnZW50ID0gY2ZnOwoJCQljb25zdCBub3cgPSBEYXRlLm5vdygpOwoJCQljb25z
dCBzZXNzaW9uSWQgPSBlbnRyeT8uc2Vzc2lvbklkID8/IHJhbmRvbVVVSUQoKTsKCQkJY29uc3Qg
bGFiZWxWYWx1ZSA9IHJlcXVlc3QubGFiZWw/LnRyaW0oKSB8fCBlbnRyeT8ubGFiZWw7CgkJCXNw
YXduZWRCeVZhbHVlID0gY2Fub25pY2FsaXplU3Bhd25lZEJ5Rm9yQWdlbnQoY2ZnLCByZXNvbHZl
QWdlbnRJZEZyb21TZXNzaW9uS2V5KGNhbm9uaWNhbEtleSksIGVudHJ5Py5zcGF3bmVkQnkpOwoJ
CQlsZXQgaW5oZXJpdGVkR3JvdXA7CgkJCWlmIChzcGF3bmVkQnlWYWx1ZSAmJiAoIXJlc29sdmVk
R3JvdXBJZCB8fCAhcmVzb2x2ZWRHcm91cENoYW5uZWwgfHwgIXJlc29sdmVkR3JvdXBTcGFjZSkp
IHRyeSB7CgkJCQljb25zdCBwYXJlbnRFbnRyeSA9IGxvYWRTZXNzaW9uRW50cnkoc3Bhd25lZEJ5
VmFsdWUpPy5lbnRyeTsKCQkJCWluaGVyaXRlZEdyb3VwID0gewoJCQkJCWdyb3VwSWQ6IHBhcmVu
dEVudHJ5Py5ncm91cElkLAoJCQkJCWdyb3VwQ2hhbm5lbDogcGFyZW50RW50cnk/Lmdyb3VwQ2hh
bm5lbCwKCQkJCQlncm91cFNwYWNlOiBwYXJlbnRFbnRyeT8uc3BhY2UKCQkJCX07CgkJCX0gY2F0
Y2ggewoJCQkJaW5oZXJpdGVkR3JvdXAgPSB2b2lkIDA7CgkJCX0KCQkJcmVzb2x2ZWRHcm91cElk
ID0gcmVzb2x2ZWRHcm91cElkIHx8IGluaGVyaXRlZEdyb3VwPy5ncm91cElkOwoJCQlyZXNvbHZl
ZEdyb3VwQ2hhbm5lbCA9IHJlc29sdmVkR3JvdXBDaGFubmVsIHx8IGluaGVyaXRlZEdyb3VwPy5n
cm91cENoYW5uZWw7CgkJCXJlc29sdmVkR3JvdXBTcGFjZSA9IHJlc29sdmVkR3JvdXBTcGFjZSB8
fCBpbmhlcml0ZWRHcm91cD8uZ3JvdXBTcGFjZTsKCQkJY29uc3QgZGVsaXZlcnlGaWVsZHMgPSBu
b3JtYWxpemVTZXNzaW9uRGVsaXZlcnlGaWVsZHMoZW50cnkpOwoJCQljb25zdCBuZXh0RW50cnlQ
YXRjaCA9IHsKCQkJCXNlc3Npb25JZCwKCQkJCXVwZGF0ZWRBdDogbm93LAoJCQkJdGhpbmtpbmdM
ZXZlbDogZW50cnk/LnRoaW5raW5nTGV2ZWwsCgkJCQlmYXN0TW9kZTogZW50cnk/LmZhc3RNb2Rl
LAoJCQkJdmVyYm9zZUxldmVsOiBlbnRyeT8udmVyYm9zZUxldmVsLAoJCQkJcmVhc29uaW5nTGV2
ZWw6IGVudHJ5Py5yZWFzb25pbmdMZXZlbCwKCQkJCXN5c3RlbVNlbnQ6IGVudHJ5Py5zeXN0ZW1T
ZW50LAoJCQkJc2VuZFBvbGljeTogZW50cnk/LnNlbmRQb2xpY3ksCgkJCQlza2lsbHNTbmFwc2hv
dDogZW50cnk/LnNraWxsc1NuYXBzaG90LAoJCQkJZGVsaXZlcnlDb250ZXh0OiBkZWxpdmVyeUZp
ZWxkcy5kZWxpdmVyeUNvbnRleHQsCgkJCQlsYXN0Q2hhbm5lbDogZGVsaXZlcnlGaWVsZHMubGFz
dENoYW5uZWwgPz8gZW50cnk/Lmxhc3RDaGFubmVsLAoJCQkJbGFzdFRvOiBkZWxpdmVyeUZpZWxk
cy5sYXN0VG8gPz8gZW50cnk/Lmxhc3RUbywKCQkJCWxhc3RBY2NvdW50SWQ6IGRlbGl2ZXJ5Rmll
bGRzLmxhc3RBY2NvdW50SWQgPz8gZW50cnk/Lmxhc3RBY2NvdW50SWQsCgkJCQltb2RlbE92ZXJy
aWRlOiBlbnRyeT8ubW9kZWxPdmVycmlkZSwKCQkJCXByb3ZpZGVyT3ZlcnJpZGU6IGVudHJ5Py5w
cm92aWRlck92ZXJyaWRlLAoJCQkJbGFiZWw6IGxhYmVsVmFsdWUsCgkJCQlzcGF3bmVkQnk6IHNw
YXduZWRCeVZhbHVlLAoJCQkJc3Bhd25lZFdvcmtzcGFjZURpcjogZW50cnk/LnNwYXduZWRXb3Jr
c3BhY2VEaXIsCgkJCQlzcGF3bkRlcHRoOiBlbnRyeT8uc3Bhd25EZXB0aCwKCQkJCWNoYW5uZWw6
IGVudHJ5Py5jaGFubmVsID8/IHJlcXVlc3QuY2hhbm5lbD8udHJpbSgpLAoJCQkJZ3JvdXBJZDog
cmVzb2x2ZWRHcm91cElkID8/IGVudHJ5Py5ncm91cElkLAoJCQkJZ3JvdXBDaGFubmVsOiByZXNv
bHZlZEdyb3VwQ2hhbm5lbCA/PyBlbnRyeT8uZ3JvdXBDaGFubmVsLAoJCQkJc3BhY2U6IHJlc29s
dmVkR3JvdXBTcGFjZSA/PyBlbnRyeT8uc3BhY2UsCgkJCQljbGlTZXNzaW9uSWRzOiBlbnRyeT8u
Y2xpU2Vzc2lvbklkcywKCQkJCWNsYXVkZUNsaVNlc3Npb25JZDogZW50cnk/LmNsYXVkZUNsaVNl
c3Npb25JZAoJCQl9OwoJCQlzZXNzaW9uRW50cnkgPSBtZXJnZVNlc3Npb25FbnRyeShlbnRyeSwg
bmV4dEVudHJ5UGF0Y2gpOwoJCQlpZiAocmVzb2x2ZVNlbmRQb2xpY3koewoJCQkJY2ZnLAoJCQkJ
ZW50cnksCgkJCQlzZXNzaW9uS2V5OiBjYW5vbmljYWxLZXksCgkJCQljaGFubmVsOiBlbnRyeT8u
Y2hhbm5lbCwKCQkJCWNoYXRUeXBlOiBlbnRyeT8uY2hhdFR5cGUKCQkJfSkgPT09ICJkZW55Iikg
ewoJCQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJ
RF9SRVFVRVNULCAic2VuZCBibG9ja2VkIGJ5IHNlc3Npb24gcG9saWN5IikpOwoJCQkJcmV0dXJu
OwoJCQl9CgkJCXJlc29sdmVkU2Vzc2lvbklkID0gc2Vzc2lvbklkOwoJCQljb25zdCBjYW5vbmlj
YWxTZXNzaW9uS2V5ID0gY2Fub25pY2FsS2V5OwoJCQlyZXNvbHZlZFNlc3Npb25LZXkgPSBjYW5v
bmljYWxTZXNzaW9uS2V5OwoJCQljb25zdCBtYWluU2Vzc2lvbktleSA9IHJlc29sdmVBZ2VudE1h
aW5TZXNzaW9uS2V5KHsKCQkJCWNmZywKCQkJCWFnZW50SWQ6IHJlc29sdmVBZ2VudElkRnJvbVNl
c3Npb25LZXkoY2Fub25pY2FsU2Vzc2lvbktleSkKCQkJfSk7CgkJCWlmIChzdG9yZVBhdGgpIHNl
c3Npb25FbnRyeSA9IGF3YWl0IHVwZGF0ZVNlc3Npb25TdG9yZShzdG9yZVBhdGgsIChzdG9yZSkg
PT4gewoJCQkJY29uc3QgeyBwcmltYXJ5S2V5IH0gPSBtaWdyYXRlQW5kUHJ1bmVHYXRld2F5U2Vz
c2lvblN0b3JlS2V5KHsKCQkJCQljZmcsCgkJCQkJa2V5OiByZXF1ZXN0ZWRTZXNzaW9uS2V5LAoJ
CQkJCXN0b3JlCgkJCQl9KTsKCQkJCWNvbnN0IG1lcmdlZCA9IG1lcmdlU2Vzc2lvbkVudHJ5KHN0
b3JlW3ByaW1hcnlLZXldLCBuZXh0RW50cnlQYXRjaCk7CgkJCQlzdG9yZVtwcmltYXJ5S2V5XSA9
IG1lcmdlZDsKCQkJCXJldHVybiBtZXJnZWQ7CgkJCX0pOwoJCQlpZiAoY2Fub25pY2FsU2Vzc2lv
bktleSA9PT0gbWFpblNlc3Npb25LZXkgfHwgY2Fub25pY2FsU2Vzc2lvbktleSA9PT0gImdsb2Jh
bCIpIHsKCQkJCWNvbnRleHQuYWRkQ2hhdFJ1bihpZGVtLCB7CgkJCQkJc2Vzc2lvbktleTogY2Fu
b25pY2FsU2Vzc2lvbktleSwKCQkJCQljbGllbnRSdW5JZDogaWRlbQoJCQkJfSk7CgkJCQlpZiAo
cmVxdWVzdGVkQmVzdEVmZm9ydERlbGl2ZXIgPT09IHZvaWQgMCkgYmVzdEVmZm9ydERlbGl2ZXIg
PSB0cnVlOwoJCQl9CgkJCXJlZ2lzdGVyQWdlbnRSdW5Db250ZXh0KGlkZW0sIHsgc2Vzc2lvbktl
eTogY2Fub25pY2FsU2Vzc2lvbktleSB9KTsKCQl9CgkJY29uc3QgcnVuSWQgPSBpZGVtOwoJCWNv
bnN0IGNvbm5JZCA9IHR5cGVvZiBjbGllbnQ/LmNvbm5JZCA9PT0gInN0cmluZyIgPyBjbGllbnQu
Y29ubklkIDogdm9pZCAwOwoJCWNvbnN0IHdhbnRzVG9vbEV2ZW50cyA9IGhhc0dhdGV3YXlDbGll
bnRDYXAoY2xpZW50Py5jb25uZWN0Py5jYXBzLCBHQVRFV0FZX0NMSUVOVF9DQVBTLlRPT0xfRVZF
TlRTKTsKCQlpZiAoY29ubklkICYmIHdhbnRzVG9vbEV2ZW50cykgewoJCQljb250ZXh0LnJlZ2lz
dGVyVG9vbEV2ZW50UmVjaXBpZW50KHJ1bklkLCBjb25uSWQpOwoJCQlmb3IgKGNvbnN0IFthY3Rp
dmVSdW5JZCwgYWN0aXZlXSBvZiBjb250ZXh0LmNoYXRBYm9ydENvbnRyb2xsZXJzKSBpZiAoYWN0
aXZlUnVuSWQgIT09IHJ1bklkICYmIGFjdGl2ZS5zZXNzaW9uS2V5ID09PSByZXF1ZXN0ZWRTZXNz
aW9uS2V5KSBjb250ZXh0LnJlZ2lzdGVyVG9vbEV2ZW50UmVjaXBpZW50KGFjdGl2ZVJ1bklkLCBj
b25uSWQpOwoJCX0KCQljb25zdCB3YW50c0RlbGl2ZXJ5ID0gcmVxdWVzdC5kZWxpdmVyID09PSB0
cnVlOwoJCWNvbnN0IGV4cGxpY2l0VG8gPSB0eXBlb2YgcmVxdWVzdC5yZXBseVRvID09PSAic3Ry
aW5nIiAmJiByZXF1ZXN0LnJlcGx5VG8udHJpbSgpID8gcmVxdWVzdC5yZXBseVRvLnRyaW0oKSA6
IHR5cGVvZiByZXF1ZXN0LnRvID09PSAic3RyaW5nIiAmJiByZXF1ZXN0LnRvLnRyaW0oKSA/IHJl
cXVlc3QudG8udHJpbSgpIDogdm9pZCAwOwoJCWNvbnN0IGV4cGxpY2l0VGhyZWFkSWQgPSB0eXBl
b2YgcmVxdWVzdC50aHJlYWRJZCA9PT0gInN0cmluZyIgJiYgcmVxdWVzdC50aHJlYWRJZC50cmlt
KCkgPyByZXF1ZXN0LnRocmVhZElkLnRyaW0oKSA6IHZvaWQgMDsKCQljb25zdCB0dXJuU291cmNl
Q2hhbm5lbCA9IHR5cGVvZiByZXF1ZXN0LmNoYW5uZWwgPT09ICJzdHJpbmciICYmIHJlcXVlc3Qu
Y2hhbm5lbC50cmltKCkgPyByZXF1ZXN0LmNoYW5uZWwudHJpbSgpIDogdm9pZCAwOwoJCWNvbnN0
IHR1cm5Tb3VyY2VUbyA9IHR5cGVvZiByZXF1ZXN0LnRvID09PSAic3RyaW5nIiAmJiByZXF1ZXN0
LnRvLnRyaW0oKSA/IHJlcXVlc3QudG8udHJpbSgpIDogdm9pZCAwOwoJCWNvbnN0IHR1cm5Tb3Vy
Y2VBY2NvdW50SWQgPSB0eXBlb2YgcmVxdWVzdC5hY2NvdW50SWQgPT09ICJzdHJpbmciICYmIHJl
cXVlc3QuYWNjb3VudElkLnRyaW0oKSA/IHJlcXVlc3QuYWNjb3VudElkLnRyaW0oKSA6IHZvaWQg
MDsKCQljb25zdCBkZWxpdmVyeVBsYW4gPSByZXNvbHZlQWdlbnREZWxpdmVyeVBsYW4oewoJCQlz
ZXNzaW9uRW50cnksCgkJCXJlcXVlc3RlZENoYW5uZWw6IHJlcXVlc3QucmVwbHlDaGFubmVsID8/
IHJlcXVlc3QuY2hhbm5lbCwKCQkJZXhwbGljaXRUbywKCQkJZXhwbGljaXRUaHJlYWRJZCwKCQkJ
YWNjb3VudElkOiByZXF1ZXN0LnJlcGx5QWNjb3VudElkID8/IHJlcXVlc3QuYWNjb3VudElkLAoJ
CQl3YW50c0RlbGl2ZXJ5LAoJCQl0dXJuU291cmNlQ2hhbm5lbCwKCQkJdHVyblNvdXJjZVRvLAoJ
CQl0dXJuU291cmNlQWNjb3VudElkLAoJCQl0dXJuU291cmNlVGhyZWFkSWQ6IGV4cGxpY2l0VGhy
ZWFkSWQKCQl9KTsKCQlsZXQgcmVzb2x2ZWRDaGFubmVsID0gZGVsaXZlcnlQbGFuLnJlc29sdmVk
Q2hhbm5lbDsKCQlsZXQgZGVsaXZlcnlUYXJnZXRNb2RlID0gZGVsaXZlcnlQbGFuLmRlbGl2ZXJ5
VGFyZ2V0TW9kZTsKCQlsZXQgcmVzb2x2ZWRBY2NvdW50SWQgPSBkZWxpdmVyeVBsYW4ucmVzb2x2
ZWRBY2NvdW50SWQ7CgkJbGV0IHJlc29sdmVkVG8gPSBkZWxpdmVyeVBsYW4ucmVzb2x2ZWRUbzsK
CQlsZXQgZWZmZWN0aXZlUGxhbiA9IGRlbGl2ZXJ5UGxhbjsKCQlpZiAod2FudHNEZWxpdmVyeSAm
JiByZXNvbHZlZENoYW5uZWwgPT09ICJ3ZWJjaGF0IikgewoJCQljb25zdCBjZmdSZXNvbHZlZCA9
IGNmZ0ZvckFnZW50ID8/IGNmZzsKCQkJdHJ5IHsKCQkJCXJlc29sdmVkQ2hhbm5lbCA9IChhd2Fp
dCByZXNvbHZlTWVzc2FnZUNoYW5uZWxTZWxlY3Rpb24oeyBjZmc6IGNmZ1Jlc29sdmVkIH0pKS5j
aGFubmVsOwoJCQkJZGVsaXZlcnlUYXJnZXRNb2RlID0gZGVsaXZlcnlUYXJnZXRNb2RlID8/ICJp
bXBsaWNpdCI7CgkJCQllZmZlY3RpdmVQbGFuID0gewoJCQkJCS4uLmRlbGl2ZXJ5UGxhbiwKCQkJ
CQlyZXNvbHZlZENoYW5uZWwsCgkJCQkJZGVsaXZlcnlUYXJnZXRNb2RlLAoJCQkJCXJlc29sdmVk
QWNjb3VudElkCgkJCQl9OwoJCQl9IGNhdGNoIChlcnIpIHsKCQkJCXJlc3BvbmQoZmFsc2UsIHZv
aWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgU3RyaW5nKGVycikp
KTsKCQkJCXJldHVybjsKCQkJfQoJCX0KCQlpZiAoIXJlc29sdmVkVG8gJiYgaXNEZWxpdmVyYWJs
ZU1lc3NhZ2VDaGFubmVsKHJlc29sdmVkQ2hhbm5lbCkpIHsKCQkJY29uc3QgZmFsbGJhY2sgPSBy
ZXNvbHZlQWdlbnRPdXRib3VuZFRhcmdldCh7CgkJCQljZmc6IGNmZ0ZvckFnZW50ID8/IGNmZywK
CQkJCXBsYW46IGVmZmVjdGl2ZVBsYW4sCgkJCQl0YXJnZXRNb2RlOiBkZWxpdmVyeVRhcmdldE1v
ZGUgPz8gImltcGxpY2l0IiwKCQkJCXZhbGlkYXRlRXhwbGljaXRUYXJnZXQ6IGZhbHNlCgkJCX0p
OwoJCQlpZiAoZmFsbGJhY2sucmVzb2x2ZWRUYXJnZXQ/Lm9rKSByZXNvbHZlZFRvID0gZmFsbGJh
Y2sucmVzb2x2ZWRUbzsKCQl9CgkJaWYgKHdhbnRzRGVsaXZlcnkgJiYgcmVzb2x2ZWRDaGFubmVs
ID09PSAid2ViY2hhdCIpIHsKCQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVy
cm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCAiZGVsaXZlcnkgY2hhbm5lbCBpcyByZXF1aXJlZDog
cGFzcyAtLWNoYW5uZWwvLS1yZXBseS1jaGFubmVsIG9yIHVzZSBhIG1haW4gc2Vzc2lvbiB3aXRo
IGEgcHJldmlvdXMgY2hhbm5lbCIpKTsKCQkJcmV0dXJuOwoJCX0KCQljb25zdCBub3JtYWxpemVk
VHVyblNvdXJjZSA9IG5vcm1hbGl6ZU1lc3NhZ2VDaGFubmVsKHR1cm5Tb3VyY2VDaGFubmVsKTsK
CQljb25zdCBvcmlnaW5NZXNzYWdlQ2hhbm5lbCA9IChub3JtYWxpemVkVHVyblNvdXJjZSAmJiBp
c0dhdGV3YXlNZXNzYWdlQ2hhbm5lbChub3JtYWxpemVkVHVyblNvdXJjZSkgPyBub3JtYWxpemVk
VHVyblNvdXJjZSA6IHZvaWQgMCkgPz8gKGNsaWVudD8uY29ubmVjdCAmJiBpc1dlYmNoYXRDb25u
ZWN0KGNsaWVudC5jb25uZWN0KSA/ICJ3ZWJjaGF0IiA6IHJlc29sdmVkQ2hhbm5lbCk7CgkJY29u
c3QgZGVsaXZlciA9IHJlcXVlc3QuZGVsaXZlciA9PT0gdHJ1ZSAmJiByZXNvbHZlZENoYW5uZWwg
IT09ICJ3ZWJjaGF0IjsKCQljb25zdCBhY2NlcHRlZCA9IHsKCQkJcnVuSWQsCgkJCXN0YXR1czog
ImFjY2VwdGVkIiwKCQkJYWNjZXB0ZWRBdDogRGF0ZS5ub3coKQoJCX07CgkJc2V0R2F0ZXdheURl
ZHVwZUVudHJ5KHsKCQkJZGVkdXBlOiBjb250ZXh0LmRlZHVwZSwKCQkJa2V5OiBgYWdlbnQ6JHtp
ZGVtfWAsCgkJCWVudHJ5OiB7CgkJCQl0czogRGF0ZS5ub3coKSwKCQkJCW9rOiB0cnVlLAoJCQkJ
cGF5bG9hZDogYWNjZXB0ZWQKCQkJfQoJCX0pOwoJCXJlc3BvbmQodHJ1ZSwgYWNjZXB0ZWQsIHZv
aWQgMCwgeyBydW5JZCB9KTsKCQljb25zdCByZXNvbHZlZFRocmVhZElkID0gZXhwbGljaXRUaHJl
YWRJZCA/PyBkZWxpdmVyeVBsYW4ucmVzb2x2ZWRUaHJlYWRJZDsKCQlkaXNwYXRjaEFnZW50UnVu
RnJvbUdhdGV3YXkoewoJCQlpbmdyZXNzT3B0czogewoJCQkJbWVzc2FnZSwKCQkJCWltYWdlcywK
CQkJCXRvOiByZXNvbHZlZFRvLAoJCQkJc2Vzc2lvbklkOiByZXNvbHZlZFNlc3Npb25JZCwKCQkJ
CXNlc3Npb25LZXk6IHJlc29sdmVkU2Vzc2lvbktleSwKCQkJCXRoaW5raW5nOiByZXF1ZXN0LnRo
aW5raW5nLAoJCQkJZGVsaXZlciwKCQkJCWRlbGl2ZXJ5VGFyZ2V0TW9kZSwKCQkJCWNoYW5uZWw6
IHJlc29sdmVkQ2hhbm5lbCwKCQkJCWFjY291bnRJZDogcmVzb2x2ZWRBY2NvdW50SWQsCgkJCQl0
aHJlYWRJZDogcmVzb2x2ZWRUaHJlYWRJZCwKCQkJCXJ1bkNvbnRleHQ6IHsKCQkJCQltZXNzYWdl
Q2hhbm5lbDogb3JpZ2luTWVzc2FnZUNoYW5uZWwsCgkJCQkJYWNjb3VudElkOiByZXNvbHZlZEFj
Y291bnRJZCwKCQkJCQlncm91cElkOiByZXNvbHZlZEdyb3VwSWQsCgkJCQkJZ3JvdXBDaGFubmVs
OiByZXNvbHZlZEdyb3VwQ2hhbm5lbCwKCQkJCQlncm91cFNwYWNlOiByZXNvbHZlZEdyb3VwU3Bh
Y2UsCgkJCQkJY3VycmVudFRocmVhZFRzOiByZXNvbHZlZFRocmVhZElkICE9IG51bGwgPyBTdHJp
bmcocmVzb2x2ZWRUaHJlYWRJZCkgOiB2b2lkIDAKCQkJCX0sCgkJCQlncm91cElkOiByZXNvbHZl
ZEdyb3VwSWQsCgkJCQlncm91cENoYW5uZWw6IHJlc29sdmVkR3JvdXBDaGFubmVsLAoJCQkJZ3Jv
dXBTcGFjZTogcmVzb2x2ZWRHcm91cFNwYWNlLAoJCQkJc3Bhd25lZEJ5OiBzcGF3bmVkQnlWYWx1
ZSwKCQkJCXRpbWVvdXQ6IHJlcXVlc3QudGltZW91dD8udG9TdHJpbmcoKSwKCQkJCWJlc3RFZmZv
cnREZWxpdmVyLAoJCQkJbWVzc2FnZUNoYW5uZWw6IG9yaWdpbk1lc3NhZ2VDaGFubmVsLAoJCQkJ
cnVuSWQsCgkJCQlsYW5lOiByZXF1ZXN0LmxhbmUsCgkJCQlleHRyYVN5c3RlbVByb21wdDogcmVx
dWVzdC5leHRyYVN5c3RlbVByb21wdCwKCQkJCWludGVybmFsRXZlbnRzOiByZXF1ZXN0LmludGVy
bmFsRXZlbnRzLAoJCQkJaW5wdXRQcm92ZW5hbmNlLAoJCQkJd29ya3NwYWNlRGlyOiByZXNvbHZl
SW5ncmVzc1dvcmtzcGFjZU92ZXJyaWRlRm9yU3Bhd25lZFJ1bih7CgkJCQkJc3Bhd25lZEJ5OiBz
cGF3bmVkQnlWYWx1ZSwKCQkJCQl3b3Jrc3BhY2VEaXI6IHNlc3Npb25FbnRyeT8uc3Bhd25lZFdv
cmtzcGFjZURpcgoJCQkJfSksCgkJCQlzZW5kZXJJc093bmVyCgkJCX0sCgkJCXJ1bklkLAoJCQlp
ZGVtcG90ZW5jeUtleTogaWRlbSwKCQkJcmVzcG9uZCwKCQkJY29udGV4dAoJCX0pOwoJfSwKCSJh
Z2VudC5pZGVudGl0eS5nZXQiOiAoeyBwYXJhbXMsIHJlc3BvbmQgfSkgPT4gewoJCWlmICghdmFs
aWRhdGVBZ2VudElkZW50aXR5UGFyYW1zKHBhcmFtcykpIHsKCQkJcmVzcG9uZChmYWxzZSwgdm9p
ZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCBgaW52YWxpZCBhZ2Vu
dC5pZGVudGl0eS5nZXQgcGFyYW1zOiAke2Zvcm1hdFZhbGlkYXRpb25FcnJvcnModmFsaWRhdGVB
Z2VudElkZW50aXR5UGFyYW1zLmVycm9ycyl9YCkpOwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0IHAg
PSBwYXJhbXM7CgkJY29uc3QgYWdlbnRJZFJhdyA9IHR5cGVvZiBwLmFnZW50SWQgPT09ICJzdHJp
bmciID8gcC5hZ2VudElkLnRyaW0oKSA6ICIiOwoJCWNvbnN0IHNlc3Npb25LZXlSYXcgPSB0eXBl
b2YgcC5zZXNzaW9uS2V5ID09PSAic3RyaW5nIiA/IHAuc2Vzc2lvbktleS50cmltKCkgOiAiIjsK
CQlsZXQgYWdlbnRJZCA9IGFnZW50SWRSYXcgPyBub3JtYWxpemVBZ2VudElkKGFnZW50SWRSYXcp
IDogdm9pZCAwOwoJCWlmIChzZXNzaW9uS2V5UmF3KSB7CgkJCWlmIChjbGFzc2lmeVNlc3Npb25L
ZXlTaGFwZShzZXNzaW9uS2V5UmF3KSA9PT0gIm1hbGZvcm1lZF9hZ2VudCIpIHsKCQkJCXJlc3Bv
bmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwg
YGludmFsaWQgYWdlbnQuaWRlbnRpdHkuZ2V0IHBhcmFtczogbWFsZm9ybWVkIHNlc3Npb24ga2V5
ICIke3Nlc3Npb25LZXlSYXd9ImApKTsKCQkJCXJldHVybjsKCQkJfQoJCQljb25zdCByZXNvbHZl
ZCA9IHJlc29sdmVBZ2VudElkRnJvbVNlc3Npb25LZXkoc2Vzc2lvbktleVJhdyk7CgkJCWlmIChh
Z2VudElkICYmIHJlc29sdmVkICE9PSBhZ2VudElkKSB7CgkJCQlyZXNwb25kKGZhbHNlLCB2b2lk
IDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsIGBpbnZhbGlkIGFnZW50
LmlkZW50aXR5LmdldCBwYXJhbXM6IGFnZW50ICIke2FnZW50SWRSYXd9IiBkb2VzIG5vdCBtYXRj
aCBzZXNzaW9uIGtleSBhZ2VudCAiJHtyZXNvbHZlZH0iYCkpOwoJCQkJcmV0dXJuOwoJCQl9CgkJ
CWFnZW50SWQgPSByZXNvbHZlZDsKCQl9CgkJY29uc3QgY2ZnID0gbG9hZENvbmZpZygpOwoJCWNv
bnN0IGlkZW50aXR5ID0gcmVzb2x2ZUFzc2lzdGFudElkZW50aXR5KHsKCQkJY2ZnLAoJCQlhZ2Vu
dElkCgkJfSk7CgkJY29uc3QgYXZhdGFyVmFsdWUgPSByZXNvbHZlQXNzaXN0YW50QXZhdGFyVXJs
KHsKCQkJYXZhdGFyOiBpZGVudGl0eS5hdmF0YXIsCgkJCWFnZW50SWQ6IGlkZW50aXR5LmFnZW50
SWQsCgkJCWJhc2VQYXRoOiBjZmcuZ2F0ZXdheT8uY29udHJvbFVpPy5iYXNlUGF0aAoJCX0pID8/
IGlkZW50aXR5LmF2YXRhcjsKCQlyZXNwb25kKHRydWUsIHsKCQkJLi4uaWRlbnRpdHksCgkJCWF2
YXRhcjogYXZhdGFyVmFsdWUKCQl9LCB2b2lkIDApOwoJfSwKCSJhZ2VudC53YWl0IjogYXN5bmMg
KHsgcGFyYW1zLCByZXNwb25kLCBjb250ZXh0IH0pID0+IHsKCQlpZiAoIXZhbGlkYXRlQWdlbnRX
YWl0UGFyYW1zKHBhcmFtcykpIHsKCQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBl
KEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCBgaW52YWxpZCBhZ2VudC53YWl0IHBhcmFtczog
JHtmb3JtYXRWYWxpZGF0aW9uRXJyb3JzKHZhbGlkYXRlQWdlbnRXYWl0UGFyYW1zLmVycm9ycyl9
YCkpOwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0IHAgPSBwYXJhbXM7CgkJY29uc3QgcnVuSWQgPSAo
cC5ydW5JZCA/PyAiIikudHJpbSgpOwoJCWNvbnN0IHRpbWVvdXRNcyA9IHR5cGVvZiBwLnRpbWVv
dXRNcyA9PT0gIm51bWJlciIgJiYgTnVtYmVyLmlzRmluaXRlKHAudGltZW91dE1zKSA/IE1hdGgu
bWF4KDAsIE1hdGguZmxvb3IocC50aW1lb3V0TXMpKSA6IDNlNDsKCQljb25zdCBoYXNBY3RpdmVD
aGF0UnVuID0gY29udGV4dC5jaGF0QWJvcnRDb250cm9sbGVycy5oYXMocnVuSWQpOwoJCWNvbnN0
IGNhY2hlZEdhdGV3YXlTbmFwc2hvdCA9IHJlYWRUZXJtaW5hbFNuYXBzaG90RnJvbUdhdGV3YXlE
ZWR1cGUoewoJCQlkZWR1cGU6IGNvbnRleHQuZGVkdXBlLAoJCQlydW5JZCwKCQkJaWdub3JlQWdl
bnRUZXJtaW5hbFNuYXBzaG90OiBoYXNBY3RpdmVDaGF0UnVuCgkJfSk7CgkJaWYgKGNhY2hlZEdh
dGV3YXlTbmFwc2hvdCkgewoJCQlyZXNwb25kKHRydWUsIHsKCQkJCXJ1bklkLAoJCQkJc3RhdHVz
OiBjYWNoZWRHYXRld2F5U25hcHNob3Quc3RhdHVzLAoJCQkJc3RhcnRlZEF0OiBjYWNoZWRHYXRl
d2F5U25hcHNob3Quc3RhcnRlZEF0LAoJCQkJZW5kZWRBdDogY2FjaGVkR2F0ZXdheVNuYXBzaG90
LmVuZGVkQXQsCgkJCQllcnJvcjogY2FjaGVkR2F0ZXdheVNuYXBzaG90LmVycm9yCgkJCX0pOwoJ
CQlyZXR1cm47CgkJfQoJCWNvbnN0IGxpZmVjeWNsZUFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9y
dENvbnRyb2xsZXIoKTsKCQljb25zdCBkZWR1cGVBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRD
b250cm9sbGVyKCk7CgkJY29uc3QgbGlmZWN5Y2xlUHJvbWlzZSA9IHdhaXRGb3JBZ2VudEpvYih7
CgkJCXJ1bklkLAoJCQl0aW1lb3V0TXMsCgkJCXNpZ25hbDogbGlmZWN5Y2xlQWJvcnRDb250cm9s
bGVyLnNpZ25hbCwKCQkJaWdub3JlQ2FjaGVkU25hcHNob3Q6IGhhc0FjdGl2ZUNoYXRSdW4KCQl9
KTsKCQljb25zdCBkZWR1cGVQcm9taXNlID0gd2FpdEZvclRlcm1pbmFsR2F0ZXdheURlZHVwZSh7
CgkJCWRlZHVwZTogY29udGV4dC5kZWR1cGUsCgkJCXJ1bklkLAoJCQl0aW1lb3V0TXMsCgkJCXNp
Z25hbDogZGVkdXBlQWJvcnRDb250cm9sbGVyLnNpZ25hbCwKCQkJaWdub3JlQWdlbnRUZXJtaW5h
bFNuYXBzaG90OiBoYXNBY3RpdmVDaGF0UnVuCgkJfSk7CgkJY29uc3QgZmlyc3QgPSBhd2FpdCBQ
cm9taXNlLnJhY2UoW2xpZmVjeWNsZVByb21pc2UudGhlbigoc25hcHNob3QpID0+ICh7CgkJCXNv
dXJjZTogImxpZmVjeWNsZSIsCgkJCXNuYXBzaG90CgkJfSkpLCBkZWR1cGVQcm9taXNlLnRoZW4o
KHNuYXBzaG90KSA9PiAoewoJCQlzb3VyY2U6ICJkZWR1cGUiLAoJCQlzbmFwc2hvdAoJCX0pKV0p
OwoJCWxldCBzbmFwc2hvdCA9IGZpcnN0LnNuYXBzaG90OwoJCWlmIChzbmFwc2hvdCkgaWYgKGZp
cnN0LnNvdXJjZSA9PT0gImxpZmVjeWNsZSIpIGRlZHVwZUFib3J0Q29udHJvbGxlci5hYm9ydCgp
OwoJCWVsc2UgbGlmZWN5Y2xlQWJvcnRDb250cm9sbGVyLmFib3J0KCk7CgkJZWxzZSB7CgkJCXNu
YXBzaG90ID0gZmlyc3Quc291cmNlID09PSAibGlmZWN5Y2xlIiA/IGF3YWl0IGRlZHVwZVByb21p
c2UgOiBhd2FpdCBsaWZlY3ljbGVQcm9taXNlOwoJCQlsaWZlY3ljbGVBYm9ydENvbnRyb2xsZXIu
YWJvcnQoKTsKCQkJZGVkdXBlQWJvcnRDb250cm9sbGVyLmFib3J0KCk7CgkJfQoJCWlmICghc25h
cHNob3QpIHsKCQkJcmVzcG9uZCh0cnVlLCB7CgkJCQlydW5JZCwKCQkJCXN0YXR1czogInRpbWVv
dXQiCgkJCX0pOwoJCQlyZXR1cm47CgkJfQoJCXJlc3BvbmQodHJ1ZSwgewoJCQlydW5JZCwKCQkJ
c3RhdHVzOiBzbmFwc2hvdC5zdGF0dXMsCgkJCXN0YXJ0ZWRBdDogc25hcHNob3Quc3RhcnRlZEF0
LAoJCQllbmRlZEF0OiBzbmFwc2hvdC5lbmRlZEF0LAoJCQllcnJvcjogc25hcHNob3QuZXJyb3IK
CQl9KTsKCX0KfTsKLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvZ2F0ZXdheS9zZXJ2ZXItbWV0
aG9kcy9hZ2VudHMudHMKY29uc3QgQk9PVFNUUkFQX0ZJTEVfTkFNRVMgPSBbCglERUZBVUxUX0FH
RU5UU19GSUxFTkFNRSwKCURFRkFVTFRfU09VTF9GSUxFTkFNRSwKCURFRkFVTFRfVE9PTFNfRklM
RU5BTUUsCglERUZBVUxUX0lERU5USVRZX0ZJTEVOQU1FLAoJREVGQVVMVF9VU0VSX0ZJTEVOQU1F
LAoJREVGQVVMVF9IRUFSVEJFQVRfRklMRU5BTUUsCglERUZBVUxUX0JPT1RTVFJBUF9GSUxFTkFN
RQpdOwpjb25zdCBCT09UU1RSQVBfRklMRV9OQU1FU19QT1NUX09OQk9BUkRJTkcgPSBCT09UU1RS
QVBfRklMRV9OQU1FUy5maWx0ZXIoKG5hbWUpID0+IG5hbWUgIT09IERFRkFVTFRfQk9PVFNUUkFQ
X0ZJTEVOQU1FKTsKY29uc3QgTUVNT1JZX0ZJTEVfTkFNRVMgPSBbREVGQVVMVF9NRU1PUllfRklM
RU5BTUUsIERFRkFVTFRfTUVNT1JZX0FMVF9GSUxFTkFNRV07CmNvbnN0IEFMTE9XRURfRklMRV9O
QU1FUyA9IG5ldyBTZXQoWy4uLkJPT1RTVFJBUF9GSUxFX05BTUVTLCAuLi5NRU1PUllfRklMRV9O
QU1FU10pOwpmdW5jdGlvbiByZXNvbHZlQWdlbnRXb3Jrc3BhY2VGaWxlT3JSZXNwb25kRXJyb3Io
cGFyYW1zLCByZXNwb25kKSB7Cgljb25zdCBjZmcgPSBsb2FkQ29uZmlnKCk7Cgljb25zdCByYXdB
Z2VudElkID0gcGFyYW1zLmFnZW50SWQ7Cgljb25zdCBhZ2VudElkID0gcmVzb2x2ZUFnZW50SWRP
ckVycm9yKHR5cGVvZiByYXdBZ2VudElkID09PSAic3RyaW5nIiB8fCB0eXBlb2YgcmF3QWdlbnRJ
ZCA9PT0gIm51bWJlciIgPyBTdHJpbmcocmF3QWdlbnRJZCkgOiAiIiwgY2ZnKTsKCWlmICghYWdl
bnRJZCkgewoJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLklO
VkFMSURfUkVRVUVTVCwgInVua25vd24gYWdlbnQgaWQiKSk7CgkJcmV0dXJuIG51bGw7Cgl9Cglj
b25zdCByYXdOYW1lID0gcGFyYW1zLm5hbWU7Cgljb25zdCBuYW1lID0gKHR5cGVvZiByYXdOYW1l
ID09PSAic3RyaW5nIiB8fCB0eXBlb2YgcmF3TmFtZSA9PT0gIm51bWJlciIgPyBTdHJpbmcocmF3
TmFtZSkgOiAiIikudHJpbSgpOwoJaWYgKCFBTExPV0VEX0ZJTEVfTkFNRVMuaGFzKG5hbWUpKSB7
CgkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9S
RVFVRVNULCBgdW5zdXBwb3J0ZWQgZmlsZSAiJHtuYW1lfSJgKSk7CgkJcmV0dXJuIG51bGw7Cgl9
CglyZXR1cm4gewoJCWNmZywKCQlhZ2VudElkLAoJCXdvcmtzcGFjZURpcjogcmVzb2x2ZUFnZW50
V29ya3NwYWNlRGlyKGNmZywgYWdlbnRJZCksCgkJbmFtZQoJfTsKfQpmdW5jdGlvbiByZXNvbHZl
Tm90Rm91bmRXb3Jrc3BhY2VGaWxlUGF0aFJlc3VsdChwYXJhbXMpIHsKCWlmICghaXNOb3RGb3Vu
ZFBhdGhFcnJvcihwYXJhbXMuZXJyb3IpKSByZXR1cm47CglpZiAocGFyYW1zLmFsbG93TWlzc2lu
ZykgcmV0dXJuIHsKCQlraW5kOiAibWlzc2luZyIsCgkJcmVxdWVzdFBhdGg6IHBhcmFtcy5yZXF1
ZXN0UGF0aCwKCQlpb1BhdGg6IHBhcmFtcy5pb1BhdGgsCgkJd29ya3NwYWNlUmVhbDogcGFyYW1z
LndvcmtzcGFjZVJlYWwKCX07CglyZXR1cm4gewoJCWtpbmQ6ICJpbnZhbGlkIiwKCQlyZXF1ZXN0
UGF0aDogcGFyYW1zLnJlcXVlc3RQYXRoLAoJCXJlYXNvbjogImZpbGUgbm90IGZvdW5kIgoJfTsK
fQpmdW5jdGlvbiByZXNvbHZlV29ya3NwYWNlRmlsZVBhdGhSZXN1bHRPclRocm93KHBhcmFtcykg
ewoJY29uc3Qgbm90Rm91bmRSZXN1bHQgPSByZXNvbHZlTm90Rm91bmRXb3Jrc3BhY2VGaWxlUGF0
aFJlc3VsdChwYXJhbXMpOwoJaWYgKG5vdEZvdW5kUmVzdWx0KSByZXR1cm4gbm90Rm91bmRSZXN1
bHQ7Cgl0aHJvdyBwYXJhbXMuZXJyb3I7Cn0KYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVdvcmtzcGFj
ZVJlYWxQYXRoKHdvcmtzcGFjZURpcikgewoJdHJ5IHsKCQlyZXR1cm4gYXdhaXQgZnMkMS5yZWFs
cGF0aCh3b3Jrc3BhY2VEaXIpOwoJfSBjYXRjaCB7CgkJcmV0dXJuIHBhdGgucmVzb2x2ZSh3b3Jr
c3BhY2VEaXIpOwoJfQp9CmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVBZ2VudFdvcmtzcGFjZUZpbGVQ
YXRoKHBhcmFtcykgewoJY29uc3QgcmVxdWVzdFBhdGggPSBwYXRoLmpvaW4ocGFyYW1zLndvcmtz
cGFjZURpciwgcGFyYW1zLm5hbWUpOwoJY29uc3Qgd29ya3NwYWNlUmVhbCA9IGF3YWl0IHJlc29s
dmVXb3Jrc3BhY2VSZWFsUGF0aChwYXJhbXMud29ya3NwYWNlRGlyKTsKCWNvbnN0IGNhbmRpZGF0
ZVBhdGggPSBwYXRoLnJlc29sdmUod29ya3NwYWNlUmVhbCwgcGFyYW1zLm5hbWUpOwoJdHJ5IHsK
CQlhd2FpdCBhc3NlcnROb1BhdGhBbGlhc0VzY2FwZSh7CgkJCWFic29sdXRlUGF0aDogY2FuZGlk
YXRlUGF0aCwKCQkJcm9vdFBhdGg6IHdvcmtzcGFjZVJlYWwsCgkJCWJvdW5kYXJ5TGFiZWw6ICJ3
b3Jrc3BhY2Ugcm9vdCIKCQl9KTsKCX0gY2F0Y2ggKGVycm9yKSB7CgkJcmV0dXJuIHsKCQkJa2lu
ZDogImludmFsaWQiLAoJCQlyZXF1ZXN0UGF0aCwKCQkJcmVhc29uOiBlcnJvciBpbnN0YW5jZW9m
IEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICJwYXRoIGVzY2FwZXMgd29ya3NwYWNlIHJvb3QiCgkJ
fTsKCX0KCWNvbnN0IG5vdEZvdW5kQ29udGV4dCA9IHsKCQlhbGxvd01pc3Npbmc6IHBhcmFtcy5h
bGxvd01pc3NpbmcsCgkJcmVxdWVzdFBhdGgsCgkJd29ya3NwYWNlUmVhbAoJfTsKCWxldCBjYW5k
aWRhdGVMc3RhdDsKCXRyeSB7CgkJY2FuZGlkYXRlTHN0YXQgPSBhd2FpdCBmcyQxLmxzdGF0KGNh
bmRpZGF0ZVBhdGgpOwoJfSBjYXRjaCAoZXJyKSB7CgkJcmV0dXJuIHJlc29sdmVXb3Jrc3BhY2VG
aWxlUGF0aFJlc3VsdE9yVGhyb3coewoJCQllcnJvcjogZXJyLAoJCQkuLi5ub3RGb3VuZENvbnRl
eHQsCgkJCWlvUGF0aDogY2FuZGlkYXRlUGF0aAoJCX0pOwoJfQoJaWYgKGNhbmRpZGF0ZUxzdGF0
LmlzU3ltYm9saWNMaW5rKCkpIHsKCQlsZXQgdGFyZ2V0UmVhbDsKCQl0cnkgewoJCQl0YXJnZXRS
ZWFsID0gYXdhaXQgZnMkMS5yZWFscGF0aChjYW5kaWRhdGVQYXRoKTsKCQl9IGNhdGNoIChlcnIp
IHsKCQkJcmV0dXJuIHJlc29sdmVXb3Jrc3BhY2VGaWxlUGF0aFJlc3VsdE9yVGhyb3coewoJCQkJ
ZXJyb3I6IGVyciwKCQkJCS4uLm5vdEZvdW5kQ29udGV4dCwKCQkJCWlvUGF0aDogY2FuZGlkYXRl
UGF0aAoJCQl9KTsKCQl9CgkJbGV0IHRhcmdldFN0YXQ7CgkJdHJ5IHsKCQkJdGFyZ2V0U3RhdCA9
IGF3YWl0IGZzJDEuc3RhdCh0YXJnZXRSZWFsKTsKCQl9IGNhdGNoIChlcnIpIHsKCQkJcmV0dXJu
IHJlc29sdmVXb3Jrc3BhY2VGaWxlUGF0aFJlc3VsdE9yVGhyb3coewoJCQkJZXJyb3I6IGVyciwK
CQkJCS4uLm5vdEZvdW5kQ29udGV4dCwKCQkJCWlvUGF0aDogdGFyZ2V0UmVhbAoJCQl9KTsKCQl9
CgkJaWYgKCF0YXJnZXRTdGF0LmlzRmlsZSgpKSByZXR1cm4gewoJCQlraW5kOiAiaW52YWxpZCIs
CgkJCXJlcXVlc3RQYXRoLAoJCQlyZWFzb246ICJwYXRoIGlzIG5vdCBhIHJlZ3VsYXIgZmlsZSIK
CQl9OwoJCWlmICh0YXJnZXRTdGF0Lm5saW5rID4gMSkgcmV0dXJuIHsKCQkJa2luZDogImludmFs
aWQiLAoJCQlyZXF1ZXN0UGF0aCwKCQkJcmVhc29uOiAiaGFyZGxpbmtlZCBmaWxlIHBhdGggbm90
IGFsbG93ZWQiCgkJfTsKCQlyZXR1cm4gewoJCQlraW5kOiAicmVhZHkiLAoJCQlyZXF1ZXN0UGF0
aCwKCQkJaW9QYXRoOiB0YXJnZXRSZWFsLAoJCQl3b3Jrc3BhY2VSZWFsCgkJfTsKCX0KCWlmICgh
Y2FuZGlkYXRlTHN0YXQuaXNGaWxlKCkpIHJldHVybiB7CgkJa2luZDogImludmFsaWQiLAoJCXJl
cXVlc3RQYXRoLAoJCXJlYXNvbjogInBhdGggaXMgbm90IGEgcmVndWxhciBmaWxlIgoJfTsKCWlm
IChjYW5kaWRhdGVMc3RhdC5ubGluayA+IDEpIHJldHVybiB7CgkJa2luZDogImludmFsaWQiLAoJ
CXJlcXVlc3RQYXRoLAoJCXJlYXNvbjogImhhcmRsaW5rZWQgZmlsZSBwYXRoIG5vdCBhbGxvd2Vk
IgoJfTsKCXJldHVybiB7CgkJa2luZDogInJlYWR5IiwKCQlyZXF1ZXN0UGF0aCwKCQlpb1BhdGg6
IGF3YWl0IGZzJDEucmVhbHBhdGgoY2FuZGlkYXRlUGF0aCkuY2F0Y2goKCkgPT4gY2FuZGlkYXRl
UGF0aCksCgkJd29ya3NwYWNlUmVhbAoJfTsKfQphc3luYyBmdW5jdGlvbiBzdGF0RmlsZVNhZmVs
eShmaWxlUGF0aCkgewoJdHJ5IHsKCQljb25zdCBbc3RhdCwgbHN0YXRdID0gYXdhaXQgUHJvbWlz
ZS5hbGwoW2ZzJDEuc3RhdChmaWxlUGF0aCksIGZzJDEubHN0YXQoZmlsZVBhdGgpXSk7CgkJaWYg
KGxzdGF0LmlzU3ltYm9saWNMaW5rKCkgfHwgIXN0YXQuaXNGaWxlKCkpIHJldHVybiBudWxsOwoJ
CWlmIChzdGF0Lm5saW5rID4gMSkgcmV0dXJuIG51bGw7CgkJaWYgKCFzYW1lRmlsZUlkZW50aXR5
KHN0YXQsIGxzdGF0KSkgcmV0dXJuIG51bGw7CgkJcmV0dXJuIHsKCQkJc2l6ZTogc3RhdC5zaXpl
LAoJCQl1cGRhdGVkQXRNczogTWF0aC5mbG9vcihzdGF0Lm10aW1lTXMpCgkJfTsKCX0gY2F0Y2gg
ewoJCXJldHVybiBudWxsOwoJfQp9CmFzeW5jIGZ1bmN0aW9uIGxpc3RBZ2VudEZpbGVzKHdvcmtz
cGFjZURpciwgb3B0aW9ucykgewoJY29uc3QgZmlsZXMgPSBbXTsKCWNvbnN0IGJvb3RzdHJhcEZp
bGVOYW1lcyA9IG9wdGlvbnM/LmhpZGVCb290c3RyYXAgPyBCT09UU1RSQVBfRklMRV9OQU1FU19Q
T1NUX09OQk9BUkRJTkcgOiBCT09UU1RSQVBfRklMRV9OQU1FUzsKCWZvciAoY29uc3QgbmFtZSBv
ZiBib290c3RyYXBGaWxlTmFtZXMpIHsKCQljb25zdCByZXNvbHZlZCA9IGF3YWl0IHJlc29sdmVB
Z2VudFdvcmtzcGFjZUZpbGVQYXRoKHsKCQkJd29ya3NwYWNlRGlyLAoJCQluYW1lLAoJCQlhbGxv
d01pc3Npbmc6IHRydWUKCQl9KTsKCQljb25zdCBmaWxlUGF0aCA9IHJlc29sdmVkLnJlcXVlc3RQ
YXRoOwoJCWNvbnN0IG1ldGEgPSByZXNvbHZlZC5raW5kID09PSAicmVhZHkiID8gYXdhaXQgc3Rh
dEZpbGVTYWZlbHkocmVzb2x2ZWQuaW9QYXRoKSA6IHJlc29sdmVkLmtpbmQgPT09ICJtaXNzaW5n
IiA/IG51bGwgOiBudWxsOwoJCWlmIChtZXRhKSBmaWxlcy5wdXNoKHsKCQkJbmFtZSwKCQkJcGF0
aDogZmlsZVBhdGgsCgkJCW1pc3Npbmc6IGZhbHNlLAoJCQlzaXplOiBtZXRhLnNpemUsCgkJCXVw
ZGF0ZWRBdE1zOiBtZXRhLnVwZGF0ZWRBdE1zCgkJfSk7CgkJZWxzZSBmaWxlcy5wdXNoKHsKCQkJ
bmFtZSwKCQkJcGF0aDogZmlsZVBhdGgsCgkJCW1pc3Npbmc6IHRydWUKCQl9KTsKCX0KCWNvbnN0
IHByaW1hcnlSZXNvbHZlZCA9IGF3YWl0IHJlc29sdmVBZ2VudFdvcmtzcGFjZUZpbGVQYXRoKHsK
CQl3b3Jrc3BhY2VEaXIsCgkJbmFtZTogREVGQVVMVF9NRU1PUllfRklMRU5BTUUsCgkJYWxsb3dN
aXNzaW5nOiB0cnVlCgl9KTsKCWNvbnN0IHByaW1hcnlNZXRhID0gcHJpbWFyeVJlc29sdmVkLmtp
bmQgPT09ICJyZWFkeSIgPyBhd2FpdCBzdGF0RmlsZVNhZmVseShwcmltYXJ5UmVzb2x2ZWQuaW9Q
YXRoKSA6IG51bGw7CglpZiAocHJpbWFyeU1ldGEpIGZpbGVzLnB1c2goewoJCW5hbWU6IERFRkFV
TFRfTUVNT1JZX0ZJTEVOQU1FLAoJCXBhdGg6IHByaW1hcnlSZXNvbHZlZC5yZXF1ZXN0UGF0aCwK
CQltaXNzaW5nOiBmYWxzZSwKCQlzaXplOiBwcmltYXJ5TWV0YS5zaXplLAoJCXVwZGF0ZWRBdE1z
OiBwcmltYXJ5TWV0YS51cGRhdGVkQXRNcwoJfSk7CgllbHNlIHsKCQljb25zdCBhbHRNZW1vcnlS
ZXNvbHZlZCA9IGF3YWl0IHJlc29sdmVBZ2VudFdvcmtzcGFjZUZpbGVQYXRoKHsKCQkJd29ya3Nw
YWNlRGlyLAoJCQluYW1lOiBERUZBVUxUX01FTU9SWV9BTFRfRklMRU5BTUUsCgkJCWFsbG93TWlz
c2luZzogdHJ1ZQoJCX0pOwoJCWNvbnN0IGFsdE1ldGEgPSBhbHRNZW1vcnlSZXNvbHZlZC5raW5k
ID09PSAicmVhZHkiID8gYXdhaXQgc3RhdEZpbGVTYWZlbHkoYWx0TWVtb3J5UmVzb2x2ZWQuaW9Q
YXRoKSA6IG51bGw7CgkJaWYgKGFsdE1ldGEpIGZpbGVzLnB1c2goewoJCQluYW1lOiBERUZBVUxU
X01FTU9SWV9BTFRfRklMRU5BTUUsCgkJCXBhdGg6IGFsdE1lbW9yeVJlc29sdmVkLnJlcXVlc3RQ
YXRoLAoJCQltaXNzaW5nOiBmYWxzZSwKCQkJc2l6ZTogYWx0TWV0YS5zaXplLAoJCQl1cGRhdGVk
QXRNczogYWx0TWV0YS51cGRhdGVkQXRNcwoJCX0pOwoJCWVsc2UgZmlsZXMucHVzaCh7CgkJCW5h
bWU6IERFRkFVTFRfTUVNT1JZX0ZJTEVOQU1FLAoJCQlwYXRoOiBwcmltYXJ5UmVzb2x2ZWQucmVx
dWVzdFBhdGgsCgkJCW1pc3Npbmc6IHRydWUKCQl9KTsKCX0KCXJldHVybiBmaWxlczsKfQpmdW5j
dGlvbiByZXNvbHZlQWdlbnRJZE9yRXJyb3IoYWdlbnRJZFJhdywgY2ZnKSB7Cgljb25zdCBhZ2Vu
dElkID0gbm9ybWFsaXplQWdlbnRJZChhZ2VudElkUmF3KTsKCWlmICghbmV3IFNldChsaXN0QWdl
bnRJZHMoY2ZnKSkuaGFzKGFnZW50SWQpKSByZXR1cm4gbnVsbDsKCXJldHVybiBhZ2VudElkOwp9
CmZ1bmN0aW9uIHNhbml0aXplSWRlbnRpdHlMaW5lKHZhbHVlKSB7CglyZXR1cm4gdmFsdWUucmVw
bGFjZSgvXHMrL2csICIgIikudHJpbSgpOwp9CmZ1bmN0aW9uIHJlc29sdmVPcHRpb25hbFN0cmlu
Z1BhcmFtKHZhbHVlKSB7CglyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiAmJiB2YWx1
ZS50cmltKCkgPyB2YWx1ZS50cmltKCkgOiB2b2lkIDA7Cn0KZnVuY3Rpb24gcmVzcG9uZEludmFs
aWRNZXRob2RQYXJhbXMocmVzcG9uZCwgbWV0aG9kLCBlcnJvcnMpIHsKCXJlc3BvbmQoZmFsc2Us
IHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgYGludmFsaWQg
JHttZXRob2R9IHBhcmFtczogJHtmb3JtYXRWYWxpZGF0aW9uRXJyb3JzKGVycm9ycyl9YCkpOwp9
CmZ1bmN0aW9uIGlzQ29uZmlndXJlZEFnZW50KGNmZywgYWdlbnRJZCkgewoJcmV0dXJuIGZpbmRB
Z2VudEVudHJ5SW5kZXgobGlzdEFnZW50RW50cmllcyhjZmcpLCBhZ2VudElkKSA+PSAwOwp9CmZ1
bmN0aW9uIHJlc3BvbmRBZ2VudE5vdEZvdW5kKHJlc3BvbmQsIGFnZW50SWQpIHsKCXJlc3BvbmQo
ZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgYGFn
ZW50ICIke2FnZW50SWR9IiBub3QgZm91bmRgKSk7Cn0KYXN5bmMgZnVuY3Rpb24gbW92ZVRvVHJh
c2hCZXN0RWZmb3J0KHBhdGhuYW1lKSB7CglpZiAoIXBhdGhuYW1lKSByZXR1cm47Cgl0cnkgewoJ
CWF3YWl0IGZzJDEuYWNjZXNzKHBhdGhuYW1lKTsKCX0gY2F0Y2ggewoJCXJldHVybjsKCX0KCXRy
eSB7CgkJYXdhaXQgbW92ZVBhdGhUb1RyYXNoKHBhdGhuYW1lKTsKCX0gY2F0Y2gge30KfQpmdW5j
dGlvbiByZXNwb25kV29ya3NwYWNlRmlsZUludmFsaWQocmVzcG9uZCwgbmFtZSwgcmVhc29uKSB7
CglyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JF
UVVFU1QsIGB1bnNhZmUgd29ya3NwYWNlIGZpbGUgIiR7bmFtZX0iICgke3JlYXNvbn0pYCkpOwp9
CmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVXb3Jrc3BhY2VGaWxlUGF0aE9yUmVzcG9uZChwYXJhbXMp
IHsKCWNvbnN0IHJlc29sdmVkUGF0aCA9IGF3YWl0IHJlc29sdmVBZ2VudFdvcmtzcGFjZUZpbGVQ
YXRoKHsKCQl3b3Jrc3BhY2VEaXI6IHBhcmFtcy53b3Jrc3BhY2VEaXIsCgkJbmFtZTogcGFyYW1z
Lm5hbWUsCgkJYWxsb3dNaXNzaW5nOiB0cnVlCgl9KTsKCWlmIChyZXNvbHZlZFBhdGgua2luZCA9
PT0gImludmFsaWQiKSB7CgkJcmVzcG9uZFdvcmtzcGFjZUZpbGVJbnZhbGlkKHBhcmFtcy5yZXNw
b25kLCBwYXJhbXMubmFtZSwgcmVzb2x2ZWRQYXRoLnJlYXNvbik7CgkJcmV0dXJuOwoJfQoJcmV0
dXJuIHJlc29sdmVkUGF0aDsKfQpmdW5jdGlvbiByZXNwb25kV29ya3NwYWNlRmlsZVVuc2FmZShy
ZXNwb25kLCBuYW1lKSB7CglyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JD
b2Rlcy5JTlZBTElEX1JFUVVFU1QsIGB1bnNhZmUgd29ya3NwYWNlIGZpbGUgIiR7bmFtZX0iYCkp
Owp9CmZ1bmN0aW9uIHJlc3BvbmRXb3Jrc3BhY2VGaWxlTWlzc2luZyhwYXJhbXMpIHsKCXBhcmFt
cy5yZXNwb25kKHRydWUsIHsKCQlhZ2VudElkOiBwYXJhbXMuYWdlbnRJZCwKCQl3b3Jrc3BhY2U6
IHBhcmFtcy53b3Jrc3BhY2VEaXIsCgkJZmlsZTogewoJCQluYW1lOiBwYXJhbXMubmFtZSwKCQkJ
cGF0aDogcGFyYW1zLmZpbGVQYXRoLAoJCQltaXNzaW5nOiB0cnVlCgkJfQoJfSwgdm9pZCAwKTsK
fQpjb25zdCBhZ2VudHNIYW5kbGVycyA9IHsKCSJhZ2VudHMubGlzdCI6ICh7IHBhcmFtcywgcmVz
cG9uZCB9KSA9PiB7CgkJaWYgKCF2YWxpZGF0ZUFnZW50c0xpc3RQYXJhbXMocGFyYW1zKSkgewoJ
CQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JF
UVVFU1QsIGBpbnZhbGlkIGFnZW50cy5saXN0IHBhcmFtczogJHtmb3JtYXRWYWxpZGF0aW9uRXJy
b3JzKHZhbGlkYXRlQWdlbnRzTGlzdFBhcmFtcy5lcnJvcnMpfWApKTsKCQkJcmV0dXJuOwoJCX0K
CQlyZXNwb25kKHRydWUsIGxpc3RBZ2VudHNGb3JHYXRld2F5KGxvYWRDb25maWcoKSksIHZvaWQg
MCk7Cgl9LAoJImFnZW50cy5jcmVhdGUiOiBhc3luYyAoeyBwYXJhbXMsIHJlc3BvbmQgfSkgPT4g
ewoJCWlmICghdmFsaWRhdGVBZ2VudHNDcmVhdGVQYXJhbXMocGFyYW1zKSkgewoJCQlyZXNwb25k
KGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsIGBp
bnZhbGlkIGFnZW50cy5jcmVhdGUgcGFyYW1zOiAke2Zvcm1hdFZhbGlkYXRpb25FcnJvcnModmFs
aWRhdGVBZ2VudHNDcmVhdGVQYXJhbXMuZXJyb3JzKX1gKSk7CgkJCXJldHVybjsKCQl9CgkJY29u
c3QgY2ZnID0gbG9hZENvbmZpZygpOwoJCWNvbnN0IHJhd05hbWUgPSBTdHJpbmcocGFyYW1zLm5h
bWUgPz8gIiIpLnRyaW0oKTsKCQljb25zdCBhZ2VudElkID0gbm9ybWFsaXplQWdlbnRJZChyYXdO
YW1lKTsKCQlpZiAoYWdlbnRJZCA9PT0gIm1haW4iKSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQg
MCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgYCIke0RFRkFVTFRfQUdF
TlRfSUR9IiBpcyByZXNlcnZlZGApKTsKCQkJcmV0dXJuOwoJCX0KCQlpZiAoZmluZEFnZW50RW50
cnlJbmRleChsaXN0QWdlbnRFbnRyaWVzKGNmZyksIGFnZW50SWQpID49IDApIHsKCQkJcmVzcG9u
ZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCBg
YWdlbnQgIiR7YWdlbnRJZH0iIGFscmVhZHkgZXhpc3RzYCkpOwoJCQlyZXR1cm47CgkJfQoJCWNv
bnN0IHdvcmtzcGFjZURpciA9IHJlc29sdmVVc2VyUGF0aChTdHJpbmcocGFyYW1zLndvcmtzcGFj
ZSA/PyAiIikudHJpbSgpKTsKCQlsZXQgbmV4dENvbmZpZyA9IGFwcGx5QWdlbnRDb25maWcoY2Zn
LCB7CgkJCWFnZW50SWQsCgkJCW5hbWU6IHJhd05hbWUsCgkJCXdvcmtzcGFjZTogd29ya3NwYWNl
RGlyCgkJfSk7CgkJY29uc3QgYWdlbnREaXIgPSByZXNvbHZlQWdlbnREaXIobmV4dENvbmZpZywg
YWdlbnRJZCk7CgkJbmV4dENvbmZpZyA9IGFwcGx5QWdlbnRDb25maWcobmV4dENvbmZpZywgewoJ
CQlhZ2VudElkLAoJCQlhZ2VudERpcgoJCX0pOwoJCWF3YWl0IGVuc3VyZUFnZW50V29ya3NwYWNl
KHsKCQkJZGlyOiB3b3Jrc3BhY2VEaXIsCgkJCWVuc3VyZUJvb3RzdHJhcEZpbGVzOiAhQm9vbGVh
bihuZXh0Q29uZmlnLmFnZW50cz8uZGVmYXVsdHM/LnNraXBCb290c3RyYXApCgkJfSk7CgkJYXdh
aXQgZnMkMS5ta2RpcihyZXNvbHZlU2Vzc2lvblRyYW5zY3JpcHRzRGlyRm9yQWdlbnQoYWdlbnRJ
ZCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pOwoJCWF3YWl0IHdyaXRlQ29uZmlnRmlsZShuZXh0Q29u
ZmlnKTsKCQljb25zdCBzYWZlTmFtZSA9IHNhbml0aXplSWRlbnRpdHlMaW5lKHJhd05hbWUpOwoJ
CWNvbnN0IGVtb2ppID0gcmVzb2x2ZU9wdGlvbmFsU3RyaW5nUGFyYW0ocGFyYW1zLmVtb2ppKTsK
CQljb25zdCBhdmF0YXIgPSByZXNvbHZlT3B0aW9uYWxTdHJpbmdQYXJhbShwYXJhbXMuYXZhdGFy
KTsKCQljb25zdCBpZGVudGl0eVBhdGggPSBwYXRoLmpvaW4od29ya3NwYWNlRGlyLCBERUZBVUxU
X0lERU5USVRZX0ZJTEVOQU1FKTsKCQljb25zdCBsaW5lcyA9IFsKCQkJIiIsCgkJCWAtIE5hbWU6
ICR7c2FmZU5hbWV9YCwKCQkJLi4uZW1vamkgPyBbYC0gRW1vamk6ICR7c2FuaXRpemVJZGVudGl0
eUxpbmUoZW1vamkpfWBdIDogW10sCgkJCS4uLmF2YXRhciA/IFtgLSBBdmF0YXI6ICR7c2FuaXRp
emVJZGVudGl0eUxpbmUoYXZhdGFyKX1gXSA6IFtdLAoJCQkiIgoJCV07CgkJYXdhaXQgZnMkMS5h
cHBlbmRGaWxlKGlkZW50aXR5UGF0aCwgbGluZXMuam9pbigiXG4iKSwgInV0Zi04Iik7CgkJcmVz
cG9uZCh0cnVlLCB7CgkJCW9rOiB0cnVlLAoJCQlhZ2VudElkLAoJCQluYW1lOiByYXdOYW1lLAoJ
CQl3b3Jrc3BhY2U6IHdvcmtzcGFjZURpcgoJCX0sIHZvaWQgMCk7Cgl9LAoJImFnZW50cy51cGRh
dGUiOiBhc3luYyAoeyBwYXJhbXMsIHJlc3BvbmQgfSkgPT4gewoJCWlmICghdmFsaWRhdGVBZ2Vu
dHNVcGRhdGVQYXJhbXMocGFyYW1zKSkgewoJCQlyZXNwb25kSW52YWxpZE1ldGhvZFBhcmFtcyhy
ZXNwb25kLCAiYWdlbnRzLnVwZGF0ZSIsIHZhbGlkYXRlQWdlbnRzVXBkYXRlUGFyYW1zLmVycm9y
cyk7CgkJCXJldHVybjsKCQl9CgkJY29uc3QgY2ZnID0gbG9hZENvbmZpZygpOwoJCWNvbnN0IGFn
ZW50SWQgPSBub3JtYWxpemVBZ2VudElkKFN0cmluZyhwYXJhbXMuYWdlbnRJZCA/PyAiIikpOwoJ
CWlmICghaXNDb25maWd1cmVkQWdlbnQoY2ZnLCBhZ2VudElkKSkgewoJCQlyZXNwb25kQWdlbnRO
b3RGb3VuZChyZXNwb25kLCBhZ2VudElkKTsKCQkJcmV0dXJuOwoJCX0KCQljb25zdCB3b3Jrc3Bh
Y2VEaXIgPSB0eXBlb2YgcGFyYW1zLndvcmtzcGFjZSA9PT0gInN0cmluZyIgJiYgcGFyYW1zLndv
cmtzcGFjZS50cmltKCkgPyByZXNvbHZlVXNlclBhdGgocGFyYW1zLndvcmtzcGFjZS50cmltKCkp
IDogdm9pZCAwOwoJCWNvbnN0IG1vZGVsID0gcmVzb2x2ZU9wdGlvbmFsU3RyaW5nUGFyYW0ocGFy
YW1zLm1vZGVsKTsKCQljb25zdCBhdmF0YXIgPSByZXNvbHZlT3B0aW9uYWxTdHJpbmdQYXJhbShw
YXJhbXMuYXZhdGFyKTsKCQljb25zdCBuZXh0Q29uZmlnID0gYXBwbHlBZ2VudENvbmZpZyhjZmcs
IHsKCQkJYWdlbnRJZCwKCQkJLi4udHlwZW9mIHBhcmFtcy5uYW1lID09PSAic3RyaW5nIiAmJiBw
YXJhbXMubmFtZS50cmltKCkgPyB7IG5hbWU6IHBhcmFtcy5uYW1lLnRyaW0oKSB9IDoge30sCgkJ
CS4uLndvcmtzcGFjZURpciA/IHsgd29ya3NwYWNlOiB3b3Jrc3BhY2VEaXIgfSA6IHt9LAoJCQku
Li5tb2RlbCA/IHsgbW9kZWwgfSA6IHt9CgkJfSk7CgkJYXdhaXQgd3JpdGVDb25maWdGaWxlKG5l
eHRDb25maWcpOwoJCWlmICh3b3Jrc3BhY2VEaXIpIGF3YWl0IGVuc3VyZUFnZW50V29ya3NwYWNl
KHsKCQkJZGlyOiB3b3Jrc3BhY2VEaXIsCgkJCWVuc3VyZUJvb3RzdHJhcEZpbGVzOiAhQm9vbGVh
bihuZXh0Q29uZmlnLmFnZW50cz8uZGVmYXVsdHM/LnNraXBCb290c3RyYXApCgkJfSk7CgkJaWYg
KGF2YXRhcikgewoJCQljb25zdCB3b3Jrc3BhY2UgPSB3b3Jrc3BhY2VEaXIgPz8gcmVzb2x2ZUFn
ZW50V29ya3NwYWNlRGlyKG5leHRDb25maWcsIGFnZW50SWQpOwoJCQlhd2FpdCBmcyQxLm1rZGly
KHdvcmtzcGFjZSwgeyByZWN1cnNpdmU6IHRydWUgfSk7CgkJCWNvbnN0IGlkZW50aXR5UGF0aCA9
IHBhdGguam9pbih3b3Jrc3BhY2UsIERFRkFVTFRfSURFTlRJVFlfRklMRU5BTUUpOwoJCQlhd2Fp
dCBmcyQxLmFwcGVuZEZpbGUoaWRlbnRpdHlQYXRoLCBgXG4tIEF2YXRhcjogJHtzYW5pdGl6ZUlk
ZW50aXR5TGluZShhdmF0YXIpfVxuYCwgInV0Zi04Iik7CgkJfQoJCXJlc3BvbmQodHJ1ZSwgewoJ
CQlvazogdHJ1ZSwKCQkJYWdlbnRJZAoJCX0sIHZvaWQgMCk7Cgl9LAoJImFnZW50cy5kZWxldGUi
OiBhc3luYyAoeyBwYXJhbXMsIHJlc3BvbmQgfSkgPT4gewoJCWlmICghdmFsaWRhdGVBZ2VudHNE
ZWxldGVQYXJhbXMocGFyYW1zKSkgewoJCQlyZXNwb25kSW52YWxpZE1ldGhvZFBhcmFtcyhyZXNw
b25kLCAiYWdlbnRzLmRlbGV0ZSIsIHZhbGlkYXRlQWdlbnRzRGVsZXRlUGFyYW1zLmVycm9ycyk7
CgkJCXJldHVybjsKCQl9CgkJY29uc3QgY2ZnID0gbG9hZENvbmZpZygpOwoJCWNvbnN0IGFnZW50
SWQgPSBub3JtYWxpemVBZ2VudElkKFN0cmluZyhwYXJhbXMuYWdlbnRJZCA/PyAiIikpOwoJCWlm
IChhZ2VudElkID09PSAibWFpbiIpIHsKCQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNo
YXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCBgIiR7REVGQVVMVF9BR0VOVF9JRH0iIGNh
bm5vdCBiZSBkZWxldGVkYCkpOwoJCQlyZXR1cm47CgkJfQoJCWlmICghaXNDb25maWd1cmVkQWdl
bnQoY2ZnLCBhZ2VudElkKSkgewoJCQlyZXNwb25kQWdlbnROb3RGb3VuZChyZXNwb25kLCBhZ2Vu
dElkKTsKCQkJcmV0dXJuOwoJCX0KCQljb25zdCBkZWxldGVGaWxlcyA9IHR5cGVvZiBwYXJhbXMu
ZGVsZXRlRmlsZXMgPT09ICJib29sZWFuIiA/IHBhcmFtcy5kZWxldGVGaWxlcyA6IHRydWU7CgkJ
Y29uc3Qgd29ya3NwYWNlRGlyID0gcmVzb2x2ZUFnZW50V29ya3NwYWNlRGlyKGNmZywgYWdlbnRJ
ZCk7CgkJY29uc3QgYWdlbnREaXIgPSByZXNvbHZlQWdlbnREaXIoY2ZnLCBhZ2VudElkKTsKCQlj
b25zdCBzZXNzaW9uc0RpciA9IHJlc29sdmVTZXNzaW9uVHJhbnNjcmlwdHNEaXJGb3JBZ2VudChh
Z2VudElkKTsKCQljb25zdCByZXN1bHQgPSBwcnVuZUFnZW50Q29uZmlnKGNmZywgYWdlbnRJZCk7
CgkJYXdhaXQgd3JpdGVDb25maWdGaWxlKHJlc3VsdC5jb25maWcpOwoJCWlmIChkZWxldGVGaWxl
cykgYXdhaXQgUHJvbWlzZS5hbGwoWwoJCQltb3ZlVG9UcmFzaEJlc3RFZmZvcnQod29ya3NwYWNl
RGlyKSwKCQkJbW92ZVRvVHJhc2hCZXN0RWZmb3J0KGFnZW50RGlyKSwKCQkJbW92ZVRvVHJhc2hC
ZXN0RWZmb3J0KHNlc3Npb25zRGlyKQoJCV0pOwoJCXJlc3BvbmQodHJ1ZSwgewoJCQlvazogdHJ1
ZSwKCQkJYWdlbnRJZCwKCQkJcmVtb3ZlZEJpbmRpbmdzOiByZXN1bHQucmVtb3ZlZEJpbmRpbmdz
CgkJfSwgdm9pZCAwKTsKCX0sCgkiYWdlbnRzLmZpbGVzLmxpc3QiOiBhc3luYyAoeyBwYXJhbXMs
IHJlc3BvbmQgfSkgPT4gewoJCWlmICghdmFsaWRhdGVBZ2VudHNGaWxlc0xpc3RQYXJhbXMocGFy
YW1zKSkgewoJCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5J
TlZBTElEX1JFUVVFU1QsIGBpbnZhbGlkIGFnZW50cy5maWxlcy5saXN0IHBhcmFtczogJHtmb3Jt
YXRWYWxpZGF0aW9uRXJyb3JzKHZhbGlkYXRlQWdlbnRzRmlsZXNMaXN0UGFyYW1zLmVycm9ycyl9
YCkpOwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0IGNmZyA9IGxvYWRDb25maWcoKTsKCQljb25zdCBh
Z2VudElkID0gcmVzb2x2ZUFnZW50SWRPckVycm9yKFN0cmluZyhwYXJhbXMuYWdlbnRJZCA/PyAi
IiksIGNmZyk7CgkJaWYgKCFhZ2VudElkKSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJy
b3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgInVua25vd24gYWdlbnQgaWQiKSk7
CgkJCXJldHVybjsKCQl9CgkJY29uc3Qgd29ya3NwYWNlRGlyID0gcmVzb2x2ZUFnZW50V29ya3Nw
YWNlRGlyKGNmZywgYWdlbnRJZCk7CgkJbGV0IGhpZGVCb290c3RyYXAgPSBmYWxzZTsKCQl0cnkg
ewoJCQloaWRlQm9vdHN0cmFwID0gYXdhaXQgaXNXb3Jrc3BhY2VPbmJvYXJkaW5nQ29tcGxldGVk
KHdvcmtzcGFjZURpcik7CgkJfSBjYXRjaCB7fQoJCXJlc3BvbmQodHJ1ZSwgewoJCQlhZ2VudElk
LAoJCQl3b3Jrc3BhY2U6IHdvcmtzcGFjZURpciwKCQkJZmlsZXM6IGF3YWl0IGxpc3RBZ2VudEZp
bGVzKHdvcmtzcGFjZURpciwgeyBoaWRlQm9vdHN0cmFwIH0pCgkJfSwgdm9pZCAwKTsKCX0sCgki
YWdlbnRzLmZpbGVzLmdldCI6IGFzeW5jICh7IHBhcmFtcywgcmVzcG9uZCB9KSA9PiB7CgkJaWYg
KCF2YWxpZGF0ZUFnZW50c0ZpbGVzR2V0UGFyYW1zKHBhcmFtcykpIHsKCQkJcmVzcG9uZEludmFs
aWRNZXRob2RQYXJhbXMocmVzcG9uZCwgImFnZW50cy5maWxlcy5nZXQiLCB2YWxpZGF0ZUFnZW50
c0ZpbGVzR2V0UGFyYW1zLmVycm9ycyk7CgkJCXJldHVybjsKCQl9CgkJY29uc3QgcmVzb2x2ZWQg
PSByZXNvbHZlQWdlbnRXb3Jrc3BhY2VGaWxlT3JSZXNwb25kRXJyb3IocGFyYW1zLCByZXNwb25k
KTsKCQlpZiAoIXJlc29sdmVkKSByZXR1cm47CgkJY29uc3QgeyBhZ2VudElkLCB3b3Jrc3BhY2VE
aXIsIG5hbWUgfSA9IHJlc29sdmVkOwoJCWNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHdvcmtz
cGFjZURpciwgbmFtZSk7CgkJY29uc3QgcmVzb2x2ZWRQYXRoID0gYXdhaXQgcmVzb2x2ZVdvcmtz
cGFjZUZpbGVQYXRoT3JSZXNwb25kKHsKCQkJcmVzcG9uZCwKCQkJd29ya3NwYWNlRGlyLAoJCQlu
YW1lCgkJfSk7CgkJaWYgKCFyZXNvbHZlZFBhdGgpIHJldHVybjsKCQlpZiAocmVzb2x2ZWRQYXRo
LmtpbmQgPT09ICJtaXNzaW5nIikgewoJCQlyZXNwb25kV29ya3NwYWNlRmlsZU1pc3NpbmcoewoJ
CQkJcmVzcG9uZCwKCQkJCWFnZW50SWQsCgkJCQl3b3Jrc3BhY2VEaXIsCgkJCQluYW1lLAoJCQkJ
ZmlsZVBhdGgKCQkJfSk7CgkJCXJldHVybjsKCQl9CgkJbGV0IHNhZmVSZWFkOwoJCXRyeSB7CgkJ
CXNhZmVSZWFkID0gYXdhaXQgcmVhZExvY2FsRmlsZVNhZmVseSh7IGZpbGVQYXRoOiByZXNvbHZl
ZFBhdGguaW9QYXRoIH0pOwoJCX0gY2F0Y2ggKGVycikgewoJCQlpZiAoZXJyIGluc3RhbmNlb2Yg
U2FmZU9wZW5FcnJvciAmJiBlcnIuY29kZSA9PT0gIm5vdC1mb3VuZCIpIHsKCQkJCXJlc3BvbmRX
b3Jrc3BhY2VGaWxlTWlzc2luZyh7CgkJCQkJcmVzcG9uZCwKCQkJCQlhZ2VudElkLAoJCQkJCXdv
cmtzcGFjZURpciwKCQkJCQluYW1lLAoJCQkJCWZpbGVQYXRoCgkJCQl9KTsKCQkJCXJldHVybjsK
CQkJfQoJCQlyZXNwb25kV29ya3NwYWNlRmlsZVVuc2FmZShyZXNwb25kLCBuYW1lKTsKCQkJcmV0
dXJuOwoJCX0KCQlyZXNwb25kKHRydWUsIHsKCQkJYWdlbnRJZCwKCQkJd29ya3NwYWNlOiB3b3Jr
c3BhY2VEaXIsCgkJCWZpbGU6IHsKCQkJCW5hbWUsCgkJCQlwYXRoOiBmaWxlUGF0aCwKCQkJCW1p
c3Npbmc6IGZhbHNlLAoJCQkJc2l6ZTogc2FmZVJlYWQuc3RhdC5zaXplLAoJCQkJdXBkYXRlZEF0
TXM6IE1hdGguZmxvb3Ioc2FmZVJlYWQuc3RhdC5tdGltZU1zKSwKCQkJCWNvbnRlbnQ6IHNhZmVS
ZWFkLmJ1ZmZlci50b1N0cmluZygidXRmLTgiKQoJCQl9CgkJfSwgdm9pZCAwKTsKCX0sCgkiYWdl
bnRzLmZpbGVzLnNldCI6IGFzeW5jICh7IHBhcmFtcywgcmVzcG9uZCB9KSA9PiB7CgkJaWYgKCF2
YWxpZGF0ZUFnZW50c0ZpbGVzU2V0UGFyYW1zKHBhcmFtcykpIHsKCQkJcmVzcG9uZEludmFsaWRN
ZXRob2RQYXJhbXMocmVzcG9uZCwgImFnZW50cy5maWxlcy5zZXQiLCB2YWxpZGF0ZUFnZW50c0Zp
bGVzU2V0UGFyYW1zLmVycm9ycyk7CgkJCXJldHVybjsKCQl9CgkJY29uc3QgcmVzb2x2ZWQgPSBy
ZXNvbHZlQWdlbnRXb3Jrc3BhY2VGaWxlT3JSZXNwb25kRXJyb3IocGFyYW1zLCByZXNwb25kKTsK
CQlpZiAoIXJlc29sdmVkKSByZXR1cm47CgkJY29uc3QgeyBhZ2VudElkLCB3b3Jrc3BhY2VEaXIs
IG5hbWUgfSA9IHJlc29sdmVkOwoJCWF3YWl0IGZzJDEubWtkaXIod29ya3NwYWNlRGlyLCB7IHJl
Y3Vyc2l2ZTogdHJ1ZSB9KTsKCQljb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbih3b3Jrc3BhY2VE
aXIsIG5hbWUpOwoJCWNvbnN0IHJlc29sdmVkUGF0aCA9IGF3YWl0IHJlc29sdmVXb3Jrc3BhY2VG
aWxlUGF0aE9yUmVzcG9uZCh7CgkJCXJlc3BvbmQsCgkJCXdvcmtzcGFjZURpciwKCQkJbmFtZQoJ
CX0pOwoJCWlmICghcmVzb2x2ZWRQYXRoKSByZXR1cm47CgkJY29uc3QgY29udGVudCA9IFN0cmlu
ZyhwYXJhbXMuY29udGVudCA/PyAiIik7CgkJY29uc3QgcmVsYXRpdmVXcml0ZVBhdGggPSBwYXRo
LnJlbGF0aXZlKHJlc29sdmVkUGF0aC53b3Jrc3BhY2VSZWFsLCByZXNvbHZlZFBhdGguaW9QYXRo
KTsKCQlpZiAoIXJlbGF0aXZlV3JpdGVQYXRoIHx8IHJlbGF0aXZlV3JpdGVQYXRoLnN0YXJ0c1dp
dGgoIi4uIikgfHwgcGF0aC5pc0Fic29sdXRlKHJlbGF0aXZlV3JpdGVQYXRoKSkgewoJCQlyZXNw
b25kV29ya3NwYWNlRmlsZVVuc2FmZShyZXNwb25kLCBuYW1lKTsKCQkJcmV0dXJuOwoJCX0KCQl0
cnkgewoJCQlhd2FpdCB3cml0ZUZpbGVXaXRoaW5Sb290KHsKCQkJCXJvb3REaXI6IHJlc29sdmVk
UGF0aC53b3Jrc3BhY2VSZWFsLAoJCQkJcmVsYXRpdmVQYXRoOiByZWxhdGl2ZVdyaXRlUGF0aCwK
CQkJCWRhdGE6IGNvbnRlbnQsCgkJCQllbmNvZGluZzogInV0ZjgiCgkJCX0pOwoJCX0gY2F0Y2gg
ewoJCQlyZXNwb25kV29ya3NwYWNlRmlsZVVuc2FmZShyZXNwb25kLCBuYW1lKTsKCQkJcmV0dXJu
OwoJCX0KCQljb25zdCBtZXRhID0gYXdhaXQgc3RhdEZpbGVTYWZlbHkocmVzb2x2ZWRQYXRoLmlv
UGF0aCk7CgkJcmVzcG9uZCh0cnVlLCB7CgkJCW9rOiB0cnVlLAoJCQlhZ2VudElkLAoJCQl3b3Jr
c3BhY2U6IHdvcmtzcGFjZURpciwKCQkJZmlsZTogewoJCQkJbmFtZSwKCQkJCXBhdGg6IGZpbGVQ
YXRoLAoJCQkJbWlzc2luZzogZmFsc2UsCgkJCQlzaXplOiBtZXRhPy5zaXplLAoJCQkJdXBkYXRl
ZEF0TXM6IG1ldGE/LnVwZGF0ZWRBdE1zLAoJCQkJY29udGVudAoJCQl9CgkJfSwgdm9pZCAwKTsK
CX0KfTsKLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvZ2F0ZXdheS9zZXJ2ZXItbWV0aG9kcy9u
b2Rlcy5oZWxwZXJzLnRzCmZ1bmN0aW9uIHJlc3BvbmRJbnZhbGlkUGFyYW1zKHBhcmFtcykgewoJ
cGFyYW1zLnJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLklOVkFM
SURfUkVRVUVTVCwgYGludmFsaWQgJHtwYXJhbXMubWV0aG9kfSBwYXJhbXM6ICR7Zm9ybWF0VmFs
aWRhdGlvbkVycm9ycyhwYXJhbXMudmFsaWRhdG9yLmVycm9ycyl9YCkpOwp9CmFzeW5jIGZ1bmN0
aW9uIHJlc3BvbmRVbmF2YWlsYWJsZU9uVGhyb3cocmVzcG9uZCwgZm4pIHsKCXRyeSB7CgkJYXdh
aXQgZm4oKTsKCX0gY2F0Y2ggKGVycikgewoJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JT
aGFwZShFcnJvckNvZGVzLlVOQVZBSUxBQkxFLCBmb3JtYXRGb3JMb2coZXJyKSkpOwoJfQp9CmZ1
bmN0aW9uIHVuaXF1ZVNvcnRlZFN0cmluZ3ModmFsdWVzKSB7CglyZXR1cm4gWy4uLm5ldyBTZXQo
dmFsdWVzLmZpbHRlcigodikgPT4gdHlwZW9mIHYgPT09ICJzdHJpbmciKSldLm1hcCgodikgPT4g
di50cmltKCkpLmZpbHRlcihCb29sZWFuKS50b1NvcnRlZCgpOwp9CmZ1bmN0aW9uIHNhZmVQYXJz
ZUpzb24odmFsdWUpIHsKCWlmICh0eXBlb2YgdmFsdWUgIT09ICJzdHJpbmciKSByZXR1cm47Cglj
b25zdCB0cmltbWVkID0gdmFsdWUudHJpbSgpOwoJaWYgKCF0cmltbWVkKSByZXR1cm47Cgl0cnkg
ewoJCXJldHVybiBKU09OLnBhcnNlKHRyaW1tZWQpOwoJfSBjYXRjaCB7CgkJcmV0dXJuIHsgcGF5
bG9hZEpTT046IHZhbHVlIH07Cgl9Cn0KZnVuY3Rpb24gcmVzcG9uZFVuYXZhaWxhYmxlT25Ob2Rl
SW52b2tlRXJyb3IocmVzcG9uZCwgcmVzKSB7CglpZiAocmVzLm9rKSByZXR1cm4gdHJ1ZTsKCWNv
bnN0IG5vZGVFcnJvciA9IHJlcy5lcnJvciAmJiB0eXBlb2YgcmVzLmVycm9yID09PSAib2JqZWN0
IiA/IHJlcy5lcnJvciA6IG51bGw7Cgljb25zdCBub2RlQ29kZSA9IHR5cGVvZiBub2RlRXJyb3I/
LmNvZGUgPT09ICJzdHJpbmciID8gbm9kZUVycm9yLmNvZGUudHJpbSgpIDogIiI7Cgljb25zdCBu
b2RlTWVzc2FnZSA9IHR5cGVvZiBub2RlRXJyb3I/Lm1lc3NhZ2UgPT09ICJzdHJpbmciICYmIG5v
ZGVFcnJvci5tZXNzYWdlLnRyaW0oKS5sZW5ndGggPiAwID8gbm9kZUVycm9yLm1lc3NhZ2UudHJp
bSgpIDogIm5vZGUgaW52b2tlIGZhaWxlZCI7Cgljb25zdCBtZXNzYWdlID0gbm9kZUNvZGUgPyBg
JHtub2RlQ29kZX06ICR7bm9kZU1lc3NhZ2V9YCA6IG5vZGVNZXNzYWdlOwoJcmVzcG9uZChmYWxz
ZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuVU5BVkFJTEFCTEUsIG1lc3NhZ2UsIHsg
ZGV0YWlsczogeyBub2RlRXJyb3I6IHJlcy5lcnJvciA/PyBudWxsIH0gfSkpOwoJcmV0dXJuIGZh
bHNlOwp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dhdGV3YXkvc2VydmVyLW1ldGhvZHMv
YnJvd3Nlci50cwpmdW5jdGlvbiBub3JtYWxpemVCcm93c2VyUmVxdWVzdFBhdGgodmFsdWUpIHsK
CWNvbnN0IHRyaW1tZWQgPSB2YWx1ZS50cmltKCk7CglpZiAoIXRyaW1tZWQpIHJldHVybiB0cmlt
bWVkOwoJY29uc3Qgd2l0aExlYWRpbmdTbGFzaCA9IHRyaW1tZWQuc3RhcnRzV2l0aCgiLyIpID8g
dHJpbW1lZCA6IGAvJHt0cmltbWVkfWA7CglpZiAod2l0aExlYWRpbmdTbGFzaC5sZW5ndGggPD0g
MSkgcmV0dXJuIHdpdGhMZWFkaW5nU2xhc2g7CglyZXR1cm4gd2l0aExlYWRpbmdTbGFzaC5yZXBs
YWNlKC9cLyskLywgIiIpOwp9CmZ1bmN0aW9uIGlzUGVyc2lzdGVudEJyb3dzZXJQcm9maWxlTXV0
YXRpb24obWV0aG9kLCBwYXRoKSB7Cgljb25zdCBub3JtYWxpemVkUGF0aCA9IG5vcm1hbGl6ZUJy
b3dzZXJSZXF1ZXN0UGF0aChwYXRoKTsKCWlmIChtZXRob2QgPT09ICJQT1NUIiAmJiBub3JtYWxp
emVkUGF0aCA9PT0gIi9wcm9maWxlcy9jcmVhdGUiKSByZXR1cm4gdHJ1ZTsKCXJldHVybiBtZXRo
b2QgPT09ICJERUxFVEUiICYmIC9eXC9wcm9maWxlc1wvW14vXSskLy50ZXN0KG5vcm1hbGl6ZWRQ
YXRoKTsKfQpmdW5jdGlvbiByZXNvbHZlUmVxdWVzdGVkUHJvZmlsZShwYXJhbXMpIHsKCWNvbnN0
IHF1ZXJ5UHJvZmlsZSA9IHR5cGVvZiBwYXJhbXMucXVlcnk/LnByb2ZpbGUgPT09ICJzdHJpbmci
ID8gcGFyYW1zLnF1ZXJ5LnByb2ZpbGUudHJpbSgpIDogdm9pZCAwOwoJaWYgKHF1ZXJ5UHJvZmls
ZSkgcmV0dXJuIHF1ZXJ5UHJvZmlsZTsKCWlmICghcGFyYW1zLmJvZHkgfHwgdHlwZW9mIHBhcmFt
cy5ib2R5ICE9PSAib2JqZWN0IikgcmV0dXJuOwoJcmV0dXJuICgicHJvZmlsZSIgaW4gcGFyYW1z
LmJvZHkgJiYgdHlwZW9mIHBhcmFtcy5ib2R5LnByb2ZpbGUgPT09ICJzdHJpbmciID8gcGFyYW1z
LmJvZHkucHJvZmlsZS50cmltKCkgOiB2b2lkIDApIHx8IHZvaWQgMDsKfQpmdW5jdGlvbiBpc0Jy
b3dzZXJOb2RlKG5vZGUpIHsKCWNvbnN0IGNhcHMgPSBBcnJheS5pc0FycmF5KG5vZGUuY2Fwcykg
PyBub2RlLmNhcHMgOiBbXTsKCWNvbnN0IGNvbW1hbmRzID0gQXJyYXkuaXNBcnJheShub2RlLmNv
bW1hbmRzKSA/IG5vZGUuY29tbWFuZHMgOiBbXTsKCXJldHVybiBjYXBzLmluY2x1ZGVzKCJicm93
c2VyIikgfHwgY29tbWFuZHMuaW5jbHVkZXMoImJyb3dzZXIucHJveHkiKTsKfQpmdW5jdGlvbiBu
b3JtYWxpemVOb2RlS2V5KHZhbHVlKSB7CglyZXR1cm4gdmFsdWUudHJpbSgpLnRvTG93ZXJDYXNl
KCkucmVwbGFjZSgvW15hLXowLTldKy9nLCAiIik7Cn0KZnVuY3Rpb24gcmVzb2x2ZUJyb3dzZXJO
b2RlKG5vZGVzLCBxdWVyeSkgewoJY29uc3QgcSA9IHF1ZXJ5LnRyaW0oKTsKCWlmICghcSkgcmV0
dXJuIG51bGw7Cgljb25zdCBxTm9ybSA9IG5vcm1hbGl6ZU5vZGVLZXkocSk7Cgljb25zdCBtYXRj
aGVzID0gbm9kZXMuZmlsdGVyKChub2RlKSA9PiB7CgkJaWYgKG5vZGUubm9kZUlkID09PSBxKSBy
ZXR1cm4gdHJ1ZTsKCQlpZiAodHlwZW9mIG5vZGUucmVtb3RlSXAgPT09ICJzdHJpbmciICYmIG5v
ZGUucmVtb3RlSXAgPT09IHEpIHJldHVybiB0cnVlOwoJCWNvbnN0IG5hbWUgPSB0eXBlb2Ygbm9k
ZS5kaXNwbGF5TmFtZSA9PT0gInN0cmluZyIgPyBub2RlLmRpc3BsYXlOYW1lIDogIiI7CgkJaWYg
KG5hbWUgJiYgbm9ybWFsaXplTm9kZUtleShuYW1lKSA9PT0gcU5vcm0pIHJldHVybiB0cnVlOwoJ
CWlmIChxLmxlbmd0aCA+PSA2ICYmIG5vZGUubm9kZUlkLnN0YXJ0c1dpdGgocSkpIHJldHVybiB0
cnVlOwoJCXJldHVybiBmYWxzZTsKCX0pOwoJaWYgKG1hdGNoZXMubGVuZ3RoID09PSAxKSByZXR1
cm4gbWF0Y2hlc1swXSA/PyBudWxsOwoJaWYgKG1hdGNoZXMubGVuZ3RoID09PSAwKSByZXR1cm4g
bnVsbDsKCXRocm93IG5ldyBFcnJvcihgYW1iaWd1b3VzIG5vZGU6ICR7cX0gKG1hdGNoZXM6ICR7
bWF0Y2hlcy5tYXAoKG5vZGUpID0+IG5vZGUuZGlzcGxheU5hbWUgfHwgbm9kZS5yZW1vdGVJcCB8
fCBub2RlLm5vZGVJZCkuam9pbigiLCAiKX0pYCk7Cn0KZnVuY3Rpb24gcmVzb2x2ZUJyb3dzZXJO
b2RlVGFyZ2V0KHBhcmFtcykgewoJY29uc3QgcG9saWN5ID0gcGFyYW1zLmNmZy5nYXRld2F5Py5u
b2Rlcz8uYnJvd3NlcjsKCWNvbnN0IG1vZGUgPSBwb2xpY3k/Lm1vZGUgPz8gImF1dG8iOwoJaWYg
KG1vZGUgPT09ICJvZmYiKSByZXR1cm4gbnVsbDsKCWNvbnN0IGJyb3dzZXJOb2RlcyA9IHBhcmFt
cy5ub2Rlcy5maWx0ZXIoKG5vZGUpID0+IGlzQnJvd3Nlck5vZGUobm9kZSkpOwoJaWYgKGJyb3dz
ZXJOb2Rlcy5sZW5ndGggPT09IDApIHsKCQlpZiAocG9saWN5Py5ub2RlPy50cmltKCkpIHRocm93
IG5ldyBFcnJvcigiTm8gY29ubmVjdGVkIGJyb3dzZXItY2FwYWJsZSBub2Rlcy4iKTsKCQlyZXR1
cm4gbnVsbDsKCX0KCWNvbnN0IHJlcXVlc3RlZCA9IHBvbGljeT8ubm9kZT8udHJpbSgpIHx8ICIi
OwoJaWYgKHJlcXVlc3RlZCkgewoJCWNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZUJyb3dzZXJOb2Rl
KGJyb3dzZXJOb2RlcywgcmVxdWVzdGVkKTsKCQlpZiAoIXJlc29sdmVkKSB0aHJvdyBuZXcgRXJy
b3IoYENvbmZpZ3VyZWQgYnJvd3NlciBub2RlIG5vdCBjb25uZWN0ZWQ6ICR7cmVxdWVzdGVkfWAp
OwoJCXJldHVybiByZXNvbHZlZDsKCX0KCWlmIChtb2RlID09PSAibWFudWFsIikgcmV0dXJuIG51
bGw7CglpZiAoYnJvd3Nlck5vZGVzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIGJyb3dzZXJOb2Rlc1sw
XSA/PyBudWxsOwoJcmV0dXJuIG51bGw7Cn0KYXN5bmMgZnVuY3Rpb24gcGVyc2lzdFByb3h5Rmls
ZXMoZmlsZXMpIHsKCXJldHVybiBhd2FpdCBwZXJzaXN0QnJvd3NlclByb3h5RmlsZXMoZmlsZXMp
Owp9CmZ1bmN0aW9uIGFwcGx5UHJveHlQYXRocyhyZXN1bHQsIG1hcHBpbmcpIHsKCWFwcGx5QnJv
d3NlclByb3h5UGF0aHMocmVzdWx0LCBtYXBwaW5nKTsKfQpjb25zdCBicm93c2VySGFuZGxlcnMg
PSB7ICJicm93c2VyLnJlcXVlc3QiOiBhc3luYyAoeyBwYXJhbXMsIHJlc3BvbmQsIGNvbnRleHQg
fSkgPT4gewoJY29uc3QgdHlwZWQgPSBwYXJhbXM7Cgljb25zdCBtZXRob2RSYXcgPSB0eXBlb2Yg
dHlwZWQubWV0aG9kID09PSAic3RyaW5nIiA/IHR5cGVkLm1ldGhvZC50cmltKCkudG9VcHBlckNh
c2UoKSA6ICIiOwoJY29uc3QgcGF0aCA9IHR5cGVvZiB0eXBlZC5wYXRoID09PSAic3RyaW5nIiA/
IHR5cGVkLnBhdGgudHJpbSgpIDogIiI7Cgljb25zdCBxdWVyeSA9IHR5cGVkLnF1ZXJ5ICYmIHR5
cGVvZiB0eXBlZC5xdWVyeSA9PT0gIm9iamVjdCIgPyB0eXBlZC5xdWVyeSA6IHZvaWQgMDsKCWNv
bnN0IGJvZHkgPSB0eXBlZC5ib2R5OwoJY29uc3QgdGltZW91dE1zID0gdHlwZW9mIHR5cGVkLnRp
bWVvdXRNcyA9PT0gIm51bWJlciIgJiYgTnVtYmVyLmlzRmluaXRlKHR5cGVkLnRpbWVvdXRNcykg
PyBNYXRoLm1heCgxLCBNYXRoLmZsb29yKHR5cGVkLnRpbWVvdXRNcykpIDogdm9pZCAwOwoJaWYg
KCFtZXRob2RSYXcgfHwgIXBhdGgpIHsKCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hh
cGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsICJtZXRob2QgYW5kIHBhdGggYXJlIHJlcXVp
cmVkIikpOwoJCXJldHVybjsKCX0KCWlmIChtZXRob2RSYXcgIT09ICJHRVQiICYmIG1ldGhvZFJh
dyAhPT0gIlBPU1QiICYmIG1ldGhvZFJhdyAhPT0gIkRFTEVURSIpIHsKCQlyZXNwb25kKGZhbHNl
LCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsICJtZXRob2Qg
bXVzdCBiZSBHRVQsIFBPU1QsIG9yIERFTEVURSIpKTsKCQlyZXR1cm47Cgl9CglpZiAoaXNQZXJz
aXN0ZW50QnJvd3NlclByb2ZpbGVNdXRhdGlvbihtZXRob2RSYXcsIHBhdGgpKSB7CgkJcmVzcG9u
ZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCAi
YnJvd3Nlci5yZXF1ZXN0IGNhbm5vdCBjcmVhdGUgb3IgZGVsZXRlIHBlcnNpc3RlbnQgYnJvd3Nl
ciBwcm9maWxlcyIpKTsKCQlyZXR1cm47Cgl9Cgljb25zdCBjZmcgPSBsb2FkQ29uZmlnKCk7Cgls
ZXQgbm9kZVRhcmdldCA9IG51bGw7Cgl0cnkgewoJCW5vZGVUYXJnZXQgPSByZXNvbHZlQnJvd3Nl
ck5vZGVUYXJnZXQoewoJCQljZmcsCgkJCW5vZGVzOiBjb250ZXh0Lm5vZGVSZWdpc3RyeS5saXN0
Q29ubmVjdGVkKCkKCQl9KTsKCX0gY2F0Y2ggKGVycikgewoJCXJlc3BvbmQoZmFsc2UsIHZvaWQg
MCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLlVOQVZBSUxBQkxFLCBTdHJpbmcoZXJyKSkpOwoJCXJl
dHVybjsKCX0KCWlmIChub2RlVGFyZ2V0KSB7CgkJY29uc3QgYWxsb3dsaXN0ID0gcmVzb2x2ZU5v
ZGVDb21tYW5kQWxsb3dsaXN0KGNmZywgbm9kZVRhcmdldCk7CgkJY29uc3QgYWxsb3dlZCA9IGlz
Tm9kZUNvbW1hbmRBbGxvd2VkKHsKCQkJY29tbWFuZDogImJyb3dzZXIucHJveHkiLAoJCQlkZWNs
YXJlZENvbW1hbmRzOiBub2RlVGFyZ2V0LmNvbW1hbmRzLAoJCQlhbGxvd2xpc3QKCQl9KTsKCQlp
ZiAoIWFsbG93ZWQub2spIHsKCQkJY29uc3QgcGxhdGZvcm0gPSBub2RlVGFyZ2V0LnBsYXRmb3Jt
ID8/ICJ1bmtub3duIjsKCQkJY29uc3QgaGludCA9IGBub2RlIGNvbW1hbmQgbm90IGFsbG93ZWQ6
ICR7YWxsb3dlZC5yZWFzb259IChwbGF0Zm9ybTogJHtwbGF0Zm9ybX0sIGNvbW1hbmQ6IGJyb3dz
ZXIucHJveHkpYDsKCQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29k
ZXMuSU5WQUxJRF9SRVFVRVNULCBoaW50LCB7IGRldGFpbHM6IHsKCQkJCXJlYXNvbjogYWxsb3dl
ZC5yZWFzb24sCgkJCQljb21tYW5kOiAiYnJvd3Nlci5wcm94eSIKCQkJfSB9KSk7CgkJCXJldHVy
bjsKCQl9CgkJY29uc3QgcHJveHlQYXJhbXMgPSB7CgkJCW1ldGhvZDogbWV0aG9kUmF3LAoJCQlw
YXRoLAoJCQlxdWVyeSwKCQkJYm9keSwKCQkJdGltZW91dE1zLAoJCQlwcm9maWxlOiByZXNvbHZl
UmVxdWVzdGVkUHJvZmlsZSh7CgkJCQlxdWVyeSwKCQkJCWJvZHkKCQkJfSkKCQl9OwoJCWNvbnN0
IHJlcyA9IGF3YWl0IGNvbnRleHQubm9kZVJlZ2lzdHJ5Lmludm9rZSh7CgkJCW5vZGVJZDogbm9k
ZVRhcmdldC5ub2RlSWQsCgkJCWNvbW1hbmQ6ICJicm93c2VyLnByb3h5IiwKCQkJcGFyYW1zOiBw
cm94eVBhcmFtcywKCQkJdGltZW91dE1zLAoJCQlpZGVtcG90ZW5jeUtleTogY3J5cHRvLnJhbmRv
bVVVSUQoKQoJCX0pOwoJCWlmICghcmVzcG9uZFVuYXZhaWxhYmxlT25Ob2RlSW52b2tlRXJyb3Io
cmVzcG9uZCwgcmVzKSkgcmV0dXJuOwoJCWNvbnN0IHBheWxvYWQgPSByZXMucGF5bG9hZEpTT04g
PyBzYWZlUGFyc2VKc29uKHJlcy5wYXlsb2FkSlNPTikgOiByZXMucGF5bG9hZDsKCQljb25zdCBw
cm94eSA9IHBheWxvYWQgJiYgdHlwZW9mIHBheWxvYWQgPT09ICJvYmplY3QiID8gcGF5bG9hZCA6
IG51bGw7CgkJaWYgKCFwcm94eSB8fCAhKCJyZXN1bHQiIGluIHByb3h5KSkgewoJCQlyZXNwb25k
KGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5VTkFWQUlMQUJMRSwgImJyb3dz
ZXIgcHJveHkgZmFpbGVkIikpOwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0IG1hcHBpbmcgPSBhd2Fp
dCBwZXJzaXN0UHJveHlGaWxlcyhwcm94eS5maWxlcyk7CgkJYXBwbHlQcm94eVBhdGhzKHByb3h5
LnJlc3VsdCwgbWFwcGluZyk7CgkJcmVzcG9uZCh0cnVlLCBwcm94eS5yZXN1bHQpOwoJCXJldHVy
bjsKCX0KCWlmICghYXdhaXQgc3RhcnRCcm93c2VyQ29udHJvbFNlcnZpY2VGcm9tQ29uZmlnKCkp
IHsKCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5VTkFWQUlM
QUJMRSwgImJyb3dzZXIgY29udHJvbCBpcyBkaXNhYmxlZCIpKTsKCQlyZXR1cm47Cgl9CglsZXQg
ZGlzcGF0Y2hlcjsKCXRyeSB7CgkJZGlzcGF0Y2hlciA9IGNyZWF0ZUJyb3dzZXJSb3V0ZURpc3Bh
dGNoZXIoY3JlYXRlQnJvd3NlckNvbnRyb2xDb250ZXh0KCkpOwoJfSBjYXRjaCAoZXJyKSB7CgkJ
cmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuVU5BVkFJTEFCTEUs
IFN0cmluZyhlcnIpKSk7CgkJcmV0dXJuOwoJfQoJY29uc3QgcmVzdWx0ID0gYXdhaXQgZGlzcGF0
Y2hlci5kaXNwYXRjaCh7CgkJbWV0aG9kOiBtZXRob2RSYXcsCgkJcGF0aCwKCQlxdWVyeSwKCQli
b2R5Cgl9KTsKCWlmIChyZXN1bHQuc3RhdHVzID49IDQwMCkgewoJCWNvbnN0IG1lc3NhZ2UgPSBy
ZXN1bHQuYm9keSAmJiB0eXBlb2YgcmVzdWx0LmJvZHkgPT09ICJvYmplY3QiICYmICJlcnJvciIg
aW4gcmVzdWx0LmJvZHkgPyBTdHJpbmcocmVzdWx0LmJvZHkuZXJyb3IpIDogYGJyb3dzZXIgcmVx
dWVzdCBmYWlsZWQgKCR7cmVzdWx0LnN0YXR1c30pYDsKCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAs
IGVycm9yU2hhcGUocmVzdWx0LnN0YXR1cyA+PSA1MDAgPyBFcnJvckNvZGVzLlVOQVZBSUxBQkxF
IDogRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsIG1lc3NhZ2UsIHsgZGV0YWlsczogcmVzdWx0
LmJvZHkgfSkpOwoJCXJldHVybjsKCX0KCXJlc3BvbmQodHJ1ZSwgcmVzdWx0LmJvZHkpOwp9IH07
Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dhdGV3YXkvc2VydmVyLW1ldGhvZHMvY2hhbm5l
bHMudHMKYXN5bmMgZnVuY3Rpb24gbG9nb3V0Q2hhbm5lbEFjY291bnQocGFyYW1zKSB7Cgljb25z
dCByZXNvbHZlZEFjY291bnRJZCA9IHBhcmFtcy5hY2NvdW50SWQ/LnRyaW0oKSB8fCBwYXJhbXMu
cGx1Z2luLmNvbmZpZy5kZWZhdWx0QWNjb3VudElkPy4ocGFyYW1zLmNmZykgfHwgcGFyYW1zLnBs
dWdpbi5jb25maWcubGlzdEFjY291bnRJZHMocGFyYW1zLmNmZylbMF0gfHwgImRlZmF1bHQiOwoJ
Y29uc3QgYWNjb3VudCA9IHBhcmFtcy5wbHVnaW4uY29uZmlnLnJlc29sdmVBY2NvdW50KHBhcmFt
cy5jZmcsIHJlc29sdmVkQWNjb3VudElkKTsKCWF3YWl0IHBhcmFtcy5jb250ZXh0LnN0b3BDaGFu
bmVsKHBhcmFtcy5jaGFubmVsSWQsIHJlc29sdmVkQWNjb3VudElkKTsKCWNvbnN0IHJlc3VsdCA9
IGF3YWl0IHBhcmFtcy5wbHVnaW4uZ2F0ZXdheT8ubG9nb3V0QWNjb3VudD8uKHsKCQljZmc6IHBh
cmFtcy5jZmcsCgkJYWNjb3VudElkOiByZXNvbHZlZEFjY291bnRJZCwKCQlhY2NvdW50LAoJCXJ1
bnRpbWU6IGRlZmF1bHRSdW50aW1lCgl9KTsKCWlmICghcmVzdWx0KSB0aHJvdyBuZXcgRXJyb3Io
YENoYW5uZWwgJHtwYXJhbXMuY2hhbm5lbElkfSBkb2VzIG5vdCBzdXBwb3J0IGxvZ291dGApOwoJ
Y29uc3QgY2xlYXJlZCA9IEJvb2xlYW4ocmVzdWx0LmNsZWFyZWQpOwoJaWYgKHR5cGVvZiByZXN1
bHQubG9nZ2VkT3V0ID09PSAiYm9vbGVhbiIgPyByZXN1bHQubG9nZ2VkT3V0IDogY2xlYXJlZCkg
cGFyYW1zLmNvbnRleHQubWFya0NoYW5uZWxMb2dnZWRPdXQocGFyYW1zLmNoYW5uZWxJZCwgdHJ1
ZSwgcmVzb2x2ZWRBY2NvdW50SWQpOwoJcmV0dXJuIHsKCQljaGFubmVsOiBwYXJhbXMuY2hhbm5l
bElkLAoJCWFjY291bnRJZDogcmVzb2x2ZWRBY2NvdW50SWQsCgkJLi4ucmVzdWx0LAoJCWNsZWFy
ZWQKCX07Cn0KY29uc3QgY2hhbm5lbHNIYW5kbGVycyA9IHsKCSJjaGFubmVscy5zdGF0dXMiOiBh
c3luYyAoeyBwYXJhbXMsIHJlc3BvbmQsIGNvbnRleHQgfSkgPT4gewoJCWlmICghdmFsaWRhdGVD
aGFubmVsc1N0YXR1c1BhcmFtcyhwYXJhbXMpKSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwg
ZXJyb3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgYGludmFsaWQgY2hhbm5lbHMu
c3RhdHVzIHBhcmFtczogJHtmb3JtYXRWYWxpZGF0aW9uRXJyb3JzKHZhbGlkYXRlQ2hhbm5lbHNT
dGF0dXNQYXJhbXMuZXJyb3JzKX1gKSk7CgkJCXJldHVybjsKCQl9CgkJY29uc3QgcHJvYmUgPSBw
YXJhbXMucHJvYmUgPT09IHRydWU7CgkJY29uc3QgdGltZW91dE1zUmF3ID0gcGFyYW1zLnRpbWVv
dXRNczsKCQljb25zdCB0aW1lb3V0TXMgPSB0eXBlb2YgdGltZW91dE1zUmF3ID09PSAibnVtYmVy
IiA/IE1hdGgubWF4KDFlMywgdGltZW91dE1zUmF3KSA6IDFlNDsKCQljb25zdCBjZmcgPSBsb2Fk
Q29uZmlnKCk7CgkJY29uc3QgcnVudGltZSA9IGNvbnRleHQuZ2V0UnVudGltZVNuYXBzaG90KCk7
CgkJY29uc3QgcGx1Z2lucyA9IGxpc3RDaGFubmVsUGx1Z2lucygpOwoJCWNvbnN0IHBsdWdpbk1h
cCA9IG5ldyBNYXAocGx1Z2lucy5tYXAoKHBsdWdpbikgPT4gW3BsdWdpbi5pZCwgcGx1Z2luXSkp
OwoJCWNvbnN0IHJlc29sdmVSdW50aW1lU25hcHNob3QgPSAoY2hhbm5lbElkLCBhY2NvdW50SWQs
IGRlZmF1bHRBY2NvdW50SWQpID0+IHsKCQkJY29uc3QgYWNjb3VudHMgPSBydW50aW1lLmNoYW5u
ZWxBY2NvdW50c1tjaGFubmVsSWRdOwoJCQljb25zdCBkZWZhdWx0UnVudGltZSA9IHJ1bnRpbWUu
Y2hhbm5lbHNbY2hhbm5lbElkXTsKCQkJY29uc3QgcmF3ID0gYWNjb3VudHM/LlthY2NvdW50SWRd
ID8/IChhY2NvdW50SWQgPT09IGRlZmF1bHRBY2NvdW50SWQgPyBkZWZhdWx0UnVudGltZSA6IHZv
aWQgMCk7CgkJCWlmICghcmF3KSByZXR1cm47CgkJCXJldHVybiByYXc7CgkJfTsKCQljb25zdCBp
c0FjY291bnRFbmFibGVkID0gKHBsdWdpbiwgYWNjb3VudCkgPT4gcGx1Z2luLmNvbmZpZy5pc0Vu
YWJsZWQgPyBwbHVnaW4uY29uZmlnLmlzRW5hYmxlZChhY2NvdW50LCBjZmcpIDogIWFjY291bnQg
fHwgdHlwZW9mIGFjY291bnQgIT09ICJvYmplY3QiIHx8IGFjY291bnQuZW5hYmxlZCAhPT0gZmFs
c2U7CgkJY29uc3QgYnVpbGRDaGFubmVsQWNjb3VudHMgPSBhc3luYyAoY2hhbm5lbElkKSA9PiB7
CgkJCWNvbnN0IHBsdWdpbiA9IHBsdWdpbk1hcC5nZXQoY2hhbm5lbElkKTsKCQkJaWYgKCFwbHVn
aW4pIHJldHVybiB7CgkJCQlhY2NvdW50czogW10sCgkJCQlkZWZhdWx0QWNjb3VudElkOiBERUZB
VUxUX0FDQ09VTlRfSUQsCgkJCQlkZWZhdWx0QWNjb3VudDogdm9pZCAwLAoJCQkJcmVzb2x2ZWRB
Y2NvdW50czoge30KCQkJfTsKCQkJY29uc3QgYWNjb3VudElkcyA9IHBsdWdpbi5jb25maWcubGlz
dEFjY291bnRJZHMoY2ZnKTsKCQkJY29uc3QgZGVmYXVsdEFjY291bnRJZCA9IHJlc29sdmVDaGFu
bmVsRGVmYXVsdEFjY291bnRJZCh7CgkJCQlwbHVnaW4sCgkJCQljZmcsCgkJCQlhY2NvdW50SWRz
CgkJCX0pOwoJCQljb25zdCBhY2NvdW50cyA9IFtdOwoJCQljb25zdCByZXNvbHZlZEFjY291bnRz
ID0ge307CgkJCWZvciAoY29uc3QgYWNjb3VudElkIG9mIGFjY291bnRJZHMpIHsKCQkJCWNvbnN0
IGFjY291bnQgPSBwbHVnaW4uY29uZmlnLnJlc29sdmVBY2NvdW50KGNmZywgYWNjb3VudElkKTsK
CQkJCWNvbnN0IGVuYWJsZWQgPSBpc0FjY291bnRFbmFibGVkKHBsdWdpbiwgYWNjb3VudCk7CgkJ
CQlyZXNvbHZlZEFjY291bnRzW2FjY291bnRJZF0gPSBhY2NvdW50OwoJCQkJbGV0IHByb2JlUmVz
dWx0OwoJCQkJbGV0IGxhc3RQcm9iZUF0ID0gbnVsbDsKCQkJCWlmIChwcm9iZSAmJiBlbmFibGVk
ICYmIHBsdWdpbi5zdGF0dXM/LnByb2JlQWNjb3VudCkgewoJCQkJCWxldCBjb25maWd1cmVkID0g
dHJ1ZTsKCQkJCQlpZiAocGx1Z2luLmNvbmZpZy5pc0NvbmZpZ3VyZWQpIGNvbmZpZ3VyZWQgPSBh
d2FpdCBwbHVnaW4uY29uZmlnLmlzQ29uZmlndXJlZChhY2NvdW50LCBjZmcpOwoJCQkJCWlmIChj
b25maWd1cmVkKSB7CgkJCQkJCXByb2JlUmVzdWx0ID0gYXdhaXQgcGx1Z2luLnN0YXR1cy5wcm9i
ZUFjY291bnQoewoJCQkJCQkJYWNjb3VudCwKCQkJCQkJCXRpbWVvdXRNcywKCQkJCQkJCWNmZwoJ
CQkJCQl9KTsKCQkJCQkJbGFzdFByb2JlQXQgPSBEYXRlLm5vdygpOwoJCQkJCX0KCQkJCX0KCQkJ
CWxldCBhdWRpdFJlc3VsdDsKCQkJCWlmIChwcm9iZSAmJiBlbmFibGVkICYmIHBsdWdpbi5zdGF0
dXM/LmF1ZGl0QWNjb3VudCkgewoJCQkJCWxldCBjb25maWd1cmVkID0gdHJ1ZTsKCQkJCQlpZiAo
cGx1Z2luLmNvbmZpZy5pc0NvbmZpZ3VyZWQpIGNvbmZpZ3VyZWQgPSBhd2FpdCBwbHVnaW4uY29u
ZmlnLmlzQ29uZmlndXJlZChhY2NvdW50LCBjZmcpOwoJCQkJCWlmIChjb25maWd1cmVkKSBhdWRp
dFJlc3VsdCA9IGF3YWl0IHBsdWdpbi5zdGF0dXMuYXVkaXRBY2NvdW50KHsKCQkJCQkJYWNjb3Vu
dCwKCQkJCQkJdGltZW91dE1zLAoJCQkJCQljZmcsCgkJCQkJCXByb2JlOiBwcm9iZVJlc3VsdAoJ
CQkJCX0pOwoJCQkJfQoJCQkJY29uc3Qgc25hcHNob3QgPSBhd2FpdCBidWlsZENoYW5uZWxBY2Nv
dW50U25hcHNob3QoewoJCQkJCXBsdWdpbiwKCQkJCQljZmcsCgkJCQkJYWNjb3VudElkLAoJCQkJ
CXJ1bnRpbWU6IHJlc29sdmVSdW50aW1lU25hcHNob3QoY2hhbm5lbElkLCBhY2NvdW50SWQsIGRl
ZmF1bHRBY2NvdW50SWQpLAoJCQkJCXByb2JlOiBwcm9iZVJlc3VsdCwKCQkJCQlhdWRpdDogYXVk
aXRSZXN1bHQKCQkJCX0pOwoJCQkJaWYgKGxhc3RQcm9iZUF0KSBzbmFwc2hvdC5sYXN0UHJvYmVB
dCA9IGxhc3RQcm9iZUF0OwoJCQkJY29uc3QgYWN0aXZpdHkgPSBnZXRDaGFubmVsQWN0aXZpdHko
ewoJCQkJCWNoYW5uZWw6IGNoYW5uZWxJZCwKCQkJCQlhY2NvdW50SWQKCQkJCX0pOwoJCQkJaWYg
KHNuYXBzaG90Lmxhc3RJbmJvdW5kQXQgPT0gbnVsbCkgc25hcHNob3QubGFzdEluYm91bmRBdCA9
IGFjdGl2aXR5LmluYm91bmRBdDsKCQkJCWlmIChzbmFwc2hvdC5sYXN0T3V0Ym91bmRBdCA9PSBu
dWxsKSBzbmFwc2hvdC5sYXN0T3V0Ym91bmRBdCA9IGFjdGl2aXR5Lm91dGJvdW5kQXQ7CgkJCQlh
Y2NvdW50cy5wdXNoKHNuYXBzaG90KTsKCQkJfQoJCQlyZXR1cm4gewoJCQkJYWNjb3VudHMsCgkJ
CQlkZWZhdWx0QWNjb3VudElkLAoJCQkJZGVmYXVsdEFjY291bnQ6IGFjY291bnRzLmZpbmQoKGVu
dHJ5KSA9PiBlbnRyeS5hY2NvdW50SWQgPT09IGRlZmF1bHRBY2NvdW50SWQpID8/IGFjY291bnRz
WzBdLAoJCQkJcmVzb2x2ZWRBY2NvdW50cwoJCQl9OwoJCX07CgkJY29uc3QgdWlDYXRhbG9nID0g
YnVpbGRDaGFubmVsVWlDYXRhbG9nKHBsdWdpbnMpOwoJCWNvbnN0IHBheWxvYWQgPSB7CgkJCXRz
OiBEYXRlLm5vdygpLAoJCQljaGFubmVsT3JkZXI6IHVpQ2F0YWxvZy5vcmRlciwKCQkJY2hhbm5l
bExhYmVsczogdWlDYXRhbG9nLmxhYmVscywKCQkJY2hhbm5lbERldGFpbExhYmVsczogdWlDYXRh
bG9nLmRldGFpbExhYmVscywKCQkJY2hhbm5lbFN5c3RlbUltYWdlczogdWlDYXRhbG9nLnN5c3Rl
bUltYWdlcywKCQkJY2hhbm5lbE1ldGE6IHVpQ2F0YWxvZy5lbnRyaWVzLAoJCQljaGFubmVsczog
e30sCgkJCWNoYW5uZWxBY2NvdW50czoge30sCgkJCWNoYW5uZWxEZWZhdWx0QWNjb3VudElkOiB7
fQoJCX07CgkJY29uc3QgY2hhbm5lbHNNYXAgPSBwYXlsb2FkLmNoYW5uZWxzOwoJCWNvbnN0IGFj
Y291bnRzTWFwID0gcGF5bG9hZC5jaGFubmVsQWNjb3VudHM7CgkJY29uc3QgZGVmYXVsdEFjY291
bnRJZE1hcCA9IHBheWxvYWQuY2hhbm5lbERlZmF1bHRBY2NvdW50SWQ7CgkJZm9yIChjb25zdCBw
bHVnaW4gb2YgcGx1Z2lucykgewoJCQljb25zdCB7IGFjY291bnRzLCBkZWZhdWx0QWNjb3VudElk
LCBkZWZhdWx0QWNjb3VudCwgcmVzb2x2ZWRBY2NvdW50cyB9ID0gYXdhaXQgYnVpbGRDaGFubmVs
QWNjb3VudHMocGx1Z2luLmlkKTsKCQkJY29uc3QgZmFsbGJhY2tBY2NvdW50ID0gcmVzb2x2ZWRB
Y2NvdW50c1tkZWZhdWx0QWNjb3VudElkXSA/PyBwbHVnaW4uY29uZmlnLnJlc29sdmVBY2NvdW50
KGNmZywgZGVmYXVsdEFjY291bnRJZCk7CgkJCWNvbnN0IHN1bW1hcnkgPSBwbHVnaW4uc3RhdHVz
Py5idWlsZENoYW5uZWxTdW1tYXJ5ID8gYXdhaXQgcGx1Z2luLnN0YXR1cy5idWlsZENoYW5uZWxT
dW1tYXJ5KHsKCQkJCWFjY291bnQ6IGZhbGxiYWNrQWNjb3VudCwKCQkJCWNmZywKCQkJCWRlZmF1
bHRBY2NvdW50SWQsCgkJCQlzbmFwc2hvdDogZGVmYXVsdEFjY291bnQgPz8geyBhY2NvdW50SWQ6
IGRlZmF1bHRBY2NvdW50SWQgfQoJCQl9KSA6IHsgY29uZmlndXJlZDogZGVmYXVsdEFjY291bnQ/
LmNvbmZpZ3VyZWQgPz8gZmFsc2UgfTsKCQkJY2hhbm5lbHNNYXBbcGx1Z2luLmlkXSA9IHN1bW1h
cnk7CgkJCWFjY291bnRzTWFwW3BsdWdpbi5pZF0gPSBhY2NvdW50czsKCQkJZGVmYXVsdEFjY291
bnRJZE1hcFtwbHVnaW4uaWRdID0gZGVmYXVsdEFjY291bnRJZDsKCQl9CgkJcmVzcG9uZCh0cnVl
LCBwYXlsb2FkLCB2b2lkIDApOwoJfSwKCSJjaGFubmVscy5sb2dvdXQiOiBhc3luYyAoeyBwYXJh
bXMsIHJlc3BvbmQsIGNvbnRleHQgfSkgPT4gewoJCWlmICghdmFsaWRhdGVDaGFubmVsc0xvZ291
dFBhcmFtcyhwYXJhbXMpKSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShF
cnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgYGludmFsaWQgY2hhbm5lbHMubG9nb3V0IHBhcmFt
czogJHtmb3JtYXRWYWxpZGF0aW9uRXJyb3JzKHZhbGlkYXRlQ2hhbm5lbHNMb2dvdXRQYXJhbXMu
ZXJyb3JzKX1gKSk7CgkJCXJldHVybjsKCQl9CgkJY29uc3QgcmF3Q2hhbm5lbCA9IHBhcmFtcy5j
aGFubmVsOwoJCWNvbnN0IGNoYW5uZWxJZCA9IHR5cGVvZiByYXdDaGFubmVsID09PSAic3RyaW5n
IiA/IG5vcm1hbGl6ZUNoYW5uZWxJZChyYXdDaGFubmVsKSA6IG51bGw7CgkJaWYgKCFjaGFubmVs
SWQpIHsKCQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5W
QUxJRF9SRVFVRVNULCAiaW52YWxpZCBjaGFubmVscy5sb2dvdXQgY2hhbm5lbCIpKTsKCQkJcmV0
dXJuOwoJCX0KCQljb25zdCBwbHVnaW4gPSBnZXRDaGFubmVsUGx1Z2luKGNoYW5uZWxJZCk7CgkJ
aWYgKCFwbHVnaW4/LmdhdGV3YXk/LmxvZ291dEFjY291bnQpIHsKCQkJcmVzcG9uZChmYWxzZSwg
dm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCBgY2hhbm5lbCAk
e2NoYW5uZWxJZH0gZG9lcyBub3Qgc3VwcG9ydCBsb2dvdXRgKSk7CgkJCXJldHVybjsKCQl9CgkJ
Y29uc3QgYWNjb3VudElkUmF3ID0gcGFyYW1zLmFjY291bnRJZDsKCQljb25zdCBhY2NvdW50SWQg
PSB0eXBlb2YgYWNjb3VudElkUmF3ID09PSAic3RyaW5nIiA/IGFjY291bnRJZFJhdy50cmltKCkg
OiB2b2lkIDA7CgkJY29uc3Qgc25hcHNob3QgPSBhd2FpdCByZWFkQ29uZmlnRmlsZVNuYXBzaG90
KCk7CgkJaWYgKCFzbmFwc2hvdC52YWxpZCkgewoJCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVy
cm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsICJjb25maWcgaW52YWxpZDsgZml4
IGl0IGJlZm9yZSBsb2dnaW5nIG91dCIpKTsKCQkJcmV0dXJuOwoJCX0KCQl0cnkgewoJCQlyZXNw
b25kKHRydWUsIGF3YWl0IGxvZ291dENoYW5uZWxBY2NvdW50KHsKCQkJCWNoYW5uZWxJZCwKCQkJ
CWFjY291bnRJZCwKCQkJCWNmZzogc25hcHNob3QuY29uZmlnID8/IHt9LAoJCQkJY29udGV4dCwK
CQkJCXBsdWdpbgoJCQl9KSwgdm9pZCAwKTsKCQl9IGNhdGNoIChlcnIpIHsKCQkJcmVzcG9uZChm
YWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuVU5BVkFJTEFCTEUsIGZvcm1hdEZv
ckxvZyhlcnIpKSk7CgkJfQoJfQp9OwovLyNlbmRyZWdpb24KLy8jcmVnaW9uIHNyYy9nYXRld2F5
L3NlcnZlci1tZXRob2RzL2NoYXQtdHJhbnNjcmlwdC1pbmplY3QudHMKZnVuY3Rpb24gYXBwZW5k
SW5qZWN0ZWRBc3Npc3RhbnRNZXNzYWdlVG9UcmFuc2NyaXB0KHBhcmFtcykgewoJY29uc3Qgbm93
ID0gcGFyYW1zLm5vdyA/PyBEYXRlLm5vdygpOwoJY29uc3QgbWVzc2FnZUJvZHkgPSB7CgkJcm9s
ZTogImFzc2lzdGFudCIsCgkJY29udGVudDogW3sKCQkJdHlwZTogInRleHQiLAoJCQl0ZXh0OiBg
JHtwYXJhbXMubGFiZWwgPyBgWyR7cGFyYW1zLmxhYmVsfV1cblxuYCA6ICIifSR7cGFyYW1zLm1l
c3NhZ2V9YAoJCX1dLAoJCXRpbWVzdGFtcDogbm93LAoJCXN0b3BSZWFzb246ICJzdG9wIiwKCQl1
c2FnZTogewoJCQlpbnB1dDogMCwKCQkJb3V0cHV0OiAwLAoJCQljYWNoZVJlYWQ6IDAsCgkJCWNh
Y2hlV3JpdGU6IDAsCgkJCXRvdGFsVG9rZW5zOiAwLAoJCQljb3N0OiB7CgkJCQlpbnB1dDogMCwK
CQkJCW91dHB1dDogMCwKCQkJCWNhY2hlUmVhZDogMCwKCQkJCWNhY2hlV3JpdGU6IDAsCgkJCQl0
b3RhbDogMAoJCQl9CgkJfSwKCQlhcGk6ICJvcGVuYWktcmVzcG9uc2VzIiwKCQlwcm92aWRlcjog
Im9wZW5jbGF3IiwKCQltb2RlbDogImdhdGV3YXktaW5qZWN0ZWQiLAoJCS4uLnBhcmFtcy5pZGVt
cG90ZW5jeUtleSA/IHsgaWRlbXBvdGVuY3lLZXk6IHBhcmFtcy5pZGVtcG90ZW5jeUtleSB9IDog
e30sCgkJLi4ucGFyYW1zLmFib3J0TWV0YSA/IHsgb3BlbmNsYXdBYm9ydDogewoJCQlhYm9ydGVk
OiB0cnVlLAoJCQlvcmlnaW46IHBhcmFtcy5hYm9ydE1ldGEub3JpZ2luLAoJCQlydW5JZDogcGFy
YW1zLmFib3J0TWV0YS5ydW5JZAoJCX0gfSA6IHt9Cgl9OwoJdHJ5IHsKCQlyZXR1cm4gewoJCQlv
azogdHJ1ZSwKCQkJbWVzc2FnZUlkOiBTZXNzaW9uTWFuYWdlci5vcGVuKHBhcmFtcy50cmFuc2Ny
aXB0UGF0aCkuYXBwZW5kTWVzc2FnZShtZXNzYWdlQm9keSksCgkJCW1lc3NhZ2U6IG1lc3NhZ2VC
b2R5CgkJfTsKCX0gY2F0Y2ggKGVycikgewoJCXJldHVybiB7CgkJCW9rOiBmYWxzZSwKCQkJZXJy
b3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKQoJCX07
Cgl9Cn0KLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvZ2F0ZXdheS9zZXJ2ZXItbWV0aG9kcy9j
aGF0LnRzCmNvbnN0IENIQVRfSElTVE9SWV9URVhUX01BWF9DSEFSUyA9IDEyZTM7CmNvbnN0IENI
QVRfSElTVE9SWV9NQVhfU0lOR0xFX01FU1NBR0VfQllURVMgPSAxMjggKiAxMDI0Owpjb25zdCBD
SEFUX0hJU1RPUllfT1ZFUlNJWkVEX1BMQUNFSE9MREVSID0gIltjaGF0Lmhpc3Rvcnkgb21pdHRl
ZDogbWVzc2FnZSB0b28gbGFyZ2VdIjsKbGV0IGNoYXRIaXN0b3J5UGxhY2Vob2xkZXJFbWl0Q291
bnQgPSAwOwpjb25zdCBDSEFOTkVMX0FHTk9TVElDX1NFU1NJT05fU0NPUEVTID0gbmV3IFNldChb
CgkibWFpbiIsCgkiZGlyZWN0IiwKCSJkbSIsCgkiZ3JvdXAiLAoJImNoYW5uZWwiLAoJImNyb24i
LAoJInJ1biIsCgkic3ViYWdlbnQiLAoJImFjcCIsCgkidGhyZWFkIiwKCSJ0b3BpYyIKXSk7CmNv
bnN0IENIQU5ORUxfU0NPUEVEX1NFU1NJT05fU0hBUEVTID0gbmV3IFNldChbCgkiZGlyZWN0IiwK
CSJkbSIsCgkiZ3JvdXAiLAoJImNoYW5uZWwiCl0pOwpmdW5jdGlvbiByZXNvbHZlQ2hhdFNlbmRP
cmlnaW5hdGluZ1JvdXRlKHBhcmFtcykgewoJaWYgKCEocGFyYW1zLmRlbGl2ZXIgPT09IHRydWUp
KSByZXR1cm4gewoJCW9yaWdpbmF0aW5nQ2hhbm5lbDogSU5URVJOQUxfTUVTU0FHRV9DSEFOTkVM
LAoJCWV4cGxpY2l0RGVsaXZlclJvdXRlOiBmYWxzZQoJfTsKCWNvbnN0IHJvdXRlQ2hhbm5lbENh
bmRpZGF0ZSA9IG5vcm1hbGl6ZU1lc3NhZ2VDaGFubmVsKHBhcmFtcy5lbnRyeT8uZGVsaXZlcnlD
b250ZXh0Py5jaGFubmVsID8/IHBhcmFtcy5lbnRyeT8ubGFzdENoYW5uZWwpOwoJY29uc3Qgcm91
dGVUb0NhbmRpZGF0ZSA9IHBhcmFtcy5lbnRyeT8uZGVsaXZlcnlDb250ZXh0Py50byA/PyBwYXJh
bXMuZW50cnk/Lmxhc3RUbzsKCWNvbnN0IHJvdXRlQWNjb3VudElkQ2FuZGlkYXRlID0gcGFyYW1z
LmVudHJ5Py5kZWxpdmVyeUNvbnRleHQ/LmFjY291bnRJZCA/PyBwYXJhbXMuZW50cnk/Lmxhc3RB
Y2NvdW50SWQgPz8gdm9pZCAwOwoJY29uc3Qgcm91dGVUaHJlYWRJZENhbmRpZGF0ZSA9IHBhcmFt
cy5lbnRyeT8uZGVsaXZlcnlDb250ZXh0Py50aHJlYWRJZCA/PyBwYXJhbXMuZW50cnk/Lmxhc3RU
aHJlYWRJZDsKCWlmIChwYXJhbXMuc2Vzc2lvbktleS5sZW5ndGggPiA1MTIpIHJldHVybiB7CgkJ
b3JpZ2luYXRpbmdDaGFubmVsOiBJTlRFUk5BTF9NRVNTQUdFX0NIQU5ORUwsCgkJZXhwbGljaXRE
ZWxpdmVyUm91dGU6IGZhbHNlCgl9OwoJY29uc3Qgc2Vzc2lvblNjb3BlUGFydHMgPSAocGFyc2VB
Z2VudFNlc3Npb25LZXkocGFyYW1zLnNlc3Npb25LZXkpPy5yZXN0ID8/IHBhcmFtcy5zZXNzaW9u
S2V5KS5zcGxpdCgiOiIsIDMpLmZpbHRlcihCb29sZWFuKTsKCWNvbnN0IHNlc3Npb25TY29wZUhl
YWQgPSBzZXNzaW9uU2NvcGVQYXJ0c1swXTsKCWNvbnN0IHNlc3Npb25DaGFubmVsSGludCA9IG5v
cm1hbGl6ZU1lc3NhZ2VDaGFubmVsKHNlc3Npb25TY29wZUhlYWQpOwoJY29uc3Qgbm9ybWFsaXpl
ZFNlc3Npb25TY29wZUhlYWQgPSAoc2Vzc2lvblNjb3BlSGVhZCA/PyAiIikudHJpbSgpLnRvTG93
ZXJDYXNlKCk7Cgljb25zdCBzZXNzaW9uUGVlclNoYXBlQ2FuZGlkYXRlcyA9IFtzZXNzaW9uU2Nv
cGVQYXJ0c1sxXSwgc2Vzc2lvblNjb3BlUGFydHNbMl1dLm1hcCgocGFydCkgPT4gKHBhcnQgPz8g
IiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpKS5maWx0ZXIoQm9vbGVhbik7Cgljb25zdCBpc0NoYW5u
ZWxBZ25vc3RpY1Nlc3Npb25TY29wZSA9IENIQU5ORUxfQUdOT1NUSUNfU0VTU0lPTl9TQ09QRVMu
aGFzKG5vcm1hbGl6ZWRTZXNzaW9uU2NvcGVIZWFkKTsKCWNvbnN0IGlzQ2hhbm5lbFNjb3BlZFNl
c3Npb24gPSBzZXNzaW9uUGVlclNoYXBlQ2FuZGlkYXRlcy5zb21lKChwYXJ0KSA9PiBDSEFOTkVM
X1NDT1BFRF9TRVNTSU9OX1NIQVBFUy5oYXMocGFydCkpOwoJY29uc3QgaGFzTGVnYWN5Q2hhbm5l
bFBlZXJTaGFwZSA9ICFpc0NoYW5uZWxTY29wZWRTZXNzaW9uICYmIHR5cGVvZiBzZXNzaW9uU2Nv
cGVQYXJ0c1sxXSA9PT0gInN0cmluZyIgJiYgc2Vzc2lvbkNoYW5uZWxIaW50ID09PSByb3V0ZUNo
YW5uZWxDYW5kaWRhdGU7Cgljb25zdCBpc0Zyb21XZWJjaGF0Q2xpZW50ID0gaXNXZWJjaGF0Q2xp
ZW50KHBhcmFtcy5jbGllbnQpOwoJY29uc3QgaXNGcm9tR2F0ZXdheUNsaUNsaWVudCA9IGlzR2F0
ZXdheUNsaUNsaWVudChwYXJhbXMuY2xpZW50KTsKCWNvbnN0IGhhc0NsaWVudE1ldGFkYXRhID0g
dHlwZW9mIHBhcmFtcy5jbGllbnQ/Lm1vZGUgPT09ICJzdHJpbmciICYmIHBhcmFtcy5jbGllbnQu
bW9kZS50cmltKCkubGVuZ3RoID4gMCB8fCB0eXBlb2YgcGFyYW1zLmNsaWVudD8uaWQgPT09ICJz
dHJpbmciICYmIHBhcmFtcy5jbGllbnQuaWQudHJpbSgpLmxlbmd0aCA+IDA7Cgljb25zdCBjb25m
aWd1cmVkTWFpbktleSA9IChwYXJhbXMubWFpbktleSA/PyAibWFpbiIpLnRyaW0oKS50b0xvd2Vy
Q2FzZSgpOwoJY29uc3QgY2FuSW5oZXJpdENvbmZpZ3VyZWRNYWluUm91dGUgPSBub3JtYWxpemVk
U2Vzc2lvblNjb3BlSGVhZC5sZW5ndGggPiAwICYmIG5vcm1hbGl6ZWRTZXNzaW9uU2NvcGVIZWFk
ID09PSBjb25maWd1cmVkTWFpbktleSAmJiBwYXJhbXMuaGFzQ29ubmVjdGVkQ2xpZW50ICYmIChp
c0Zyb21HYXRld2F5Q2xpQ2xpZW50IHx8ICFoYXNDbGllbnRNZXRhZGF0YSk7CglpZiAoIShCb29s
ZWFuKCFpc0Zyb21XZWJjaGF0Q2xpZW50ICYmIHNlc3Npb25DaGFubmVsSGludCAmJiBzZXNzaW9u
Q2hhbm5lbEhpbnQgIT09ICJ3ZWJjaGF0IiAmJiAoIWlzQ2hhbm5lbEFnbm9zdGljU2Vzc2lvblNj
b3BlICYmIChpc0NoYW5uZWxTY29wZWRTZXNzaW9uIHx8IGhhc0xlZ2FjeUNoYW5uZWxQZWVyU2hh
cGUpIHx8IGNhbkluaGVyaXRDb25maWd1cmVkTWFpblJvdXRlKSkgJiYgcm91dGVDaGFubmVsQ2Fu
ZGlkYXRlICYmIHJvdXRlQ2hhbm5lbENhbmRpZGF0ZSAhPT0gIndlYmNoYXQiICYmIHR5cGVvZiBy
b3V0ZVRvQ2FuZGlkYXRlID09PSAic3RyaW5nIiAmJiByb3V0ZVRvQ2FuZGlkYXRlLnRyaW0oKS5s
ZW5ndGggPiAwKSkgcmV0dXJuIHsKCQlvcmlnaW5hdGluZ0NoYW5uZWw6IElOVEVSTkFMX01FU1NB
R0VfQ0hBTk5FTCwKCQlleHBsaWNpdERlbGl2ZXJSb3V0ZTogZmFsc2UKCX07CglyZXR1cm4gewoJ
CW9yaWdpbmF0aW5nQ2hhbm5lbDogcm91dGVDaGFubmVsQ2FuZGlkYXRlLAoJCW9yaWdpbmF0aW5n
VG86IHJvdXRlVG9DYW5kaWRhdGUsCgkJYWNjb3VudElkOiByb3V0ZUFjY291bnRJZENhbmRpZGF0
ZSwKCQltZXNzYWdlVGhyZWFkSWQ6IHJvdXRlVGhyZWFkSWRDYW5kaWRhdGUsCgkJZXhwbGljaXRE
ZWxpdmVyUm91dGU6IHRydWUKCX07Cn0KZnVuY3Rpb24gc3RyaXBEaXNhbGxvd2VkQ2hhdENvbnRy
b2xDaGFycyhtZXNzYWdlKSB7CglsZXQgb3V0cHV0ID0gIiI7Cglmb3IgKGNvbnN0IGNoYXIgb2Yg
bWVzc2FnZSkgewoJCWNvbnN0IGNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMCk7CgkJaWYgKGNvZGUg
PT09IDkgfHwgY29kZSA9PT0gMTAgfHwgY29kZSA9PT0gMTMgfHwgY29kZSA+PSAzMiAmJiBjb2Rl
ICE9PSAxMjcpIG91dHB1dCArPSBjaGFyOwoJfQoJcmV0dXJuIG91dHB1dDsKfQpmdW5jdGlvbiBz
YW5pdGl6ZUNoYXRTZW5kTWVzc2FnZUlucHV0KG1lc3NhZ2UpIHsKCWNvbnN0IG5vcm1hbGl6ZWQg
PSBtZXNzYWdlLm5vcm1hbGl6ZSgiTkZDIik7CglpZiAobm9ybWFsaXplZC5pbmNsdWRlcygiXDAi
KSkgcmV0dXJuIHsKCQlvazogZmFsc2UsCgkJZXJyb3I6ICJtZXNzYWdlIG11c3Qgbm90IGNvbnRh
aW4gbnVsbCBieXRlcyIKCX07CglyZXR1cm4gewoJCW9rOiB0cnVlLAoJCW1lc3NhZ2U6IHN0cmlw
RGlzYWxsb3dlZENoYXRDb250cm9sQ2hhcnMobm9ybWFsaXplZCkKCX07Cn0KZnVuY3Rpb24gbm9y
bWFsaXplT3B0aW9uYWxDaGF0U3lzdGVtUmVjZWlwdCh2YWx1ZSkgewoJaWYgKHZhbHVlID09IG51
bGwpIHJldHVybiB7IG9rOiB0cnVlIH07CglpZiAodHlwZW9mIHZhbHVlICE9PSAic3RyaW5nIikg
cmV0dXJuIHsKCQlvazogZmFsc2UsCgkJZXJyb3I6ICJzeXN0ZW1Qcm92ZW5hbmNlUmVjZWlwdCBt
dXN0IGJlIGEgc3RyaW5nIgoJfTsKCWNvbnN0IHNhbml0aXplZCA9IHNhbml0aXplQ2hhdFNlbmRN
ZXNzYWdlSW5wdXQodmFsdWUpOwoJaWYgKCFzYW5pdGl6ZWQub2spIHJldHVybiBzYW5pdGl6ZWQ7
CglyZXR1cm4gewoJCW9rOiB0cnVlLAoJCXJlY2VpcHQ6IHNhbml0aXplZC5tZXNzYWdlLnRyaW0o
KSB8fCB2b2lkIDAKCX07Cn0KZnVuY3Rpb24gaXNBY3BCcmlkZ2VDbGllbnQoY2xpZW50KSB7Cglj
b25zdCBpbmZvID0gY2xpZW50Py5jb25uZWN0Py5jbGllbnQ7CglyZXR1cm4gaW5mbz8uaWQgPT09
IEdBVEVXQVlfQ0xJRU5UX05BTUVTLkNMSSAmJiBpbmZvPy5tb2RlID09PSBHQVRFV0FZX0NMSUVO
VF9NT0RFUy5DTEkgJiYgaW5mbz8uZGlzcGxheU5hbWUgPT09ICJBQ1AiICYmIGluZm8/LnZlcnNp
b24gPT09ICJhY3AiOwp9CmZ1bmN0aW9uIHRydW5jYXRlQ2hhdEhpc3RvcnlUZXh0KHRleHQpIHsK
CWlmICh0ZXh0Lmxlbmd0aCA8PSBDSEFUX0hJU1RPUllfVEVYVF9NQVhfQ0hBUlMpIHJldHVybiB7
CgkJdGV4dCwKCQl0cnVuY2F0ZWQ6IGZhbHNlCgl9OwoJcmV0dXJuIHsKCQl0ZXh0OiBgJHt0ZXh0
LnNsaWNlKDAsIENIQVRfSElTVE9SWV9URVhUX01BWF9DSEFSUyl9XG4uLi4odHJ1bmNhdGVkKS4u
LmAsCgkJdHJ1bmNhdGVkOiB0cnVlCgl9Owp9CmZ1bmN0aW9uIHNhbml0aXplQ2hhdEhpc3RvcnlD
b250ZW50QmxvY2soYmxvY2spIHsKCWlmICghYmxvY2sgfHwgdHlwZW9mIGJsb2NrICE9PSAib2Jq
ZWN0IikgcmV0dXJuIHsKCQlibG9jaywKCQljaGFuZ2VkOiBmYWxzZQoJfTsKCWNvbnN0IGVudHJ5
ID0geyAuLi5ibG9jayB9OwoJbGV0IGNoYW5nZWQgPSBmYWxzZTsKCWlmICh0eXBlb2YgZW50cnku
dGV4dCA9PT0gInN0cmluZyIpIHsKCQljb25zdCBzdHJpcHBlZCA9IHN0cmlwSW5saW5lRGlyZWN0
aXZlVGFnc0ZvckRpc3BsYXkoZW50cnkudGV4dCk7CgkJY29uc3QgcmVzID0gdHJ1bmNhdGVDaGF0
SGlzdG9yeVRleHQoc3RyaXBwZWQudGV4dCk7CgkJZW50cnkudGV4dCA9IHJlcy50ZXh0OwoJCWNo
YW5nZWQgfHw9IHN0cmlwcGVkLmNoYW5nZWQgfHwgcmVzLnRydW5jYXRlZDsKCX0KCWlmICh0eXBl
b2YgZW50cnkucGFydGlhbEpzb24gPT09ICJzdHJpbmciKSB7CgkJY29uc3QgcmVzID0gdHJ1bmNh
dGVDaGF0SGlzdG9yeVRleHQoZW50cnkucGFydGlhbEpzb24pOwoJCWVudHJ5LnBhcnRpYWxKc29u
ID0gcmVzLnRleHQ7CgkJY2hhbmdlZCB8fD0gcmVzLnRydW5jYXRlZDsKCX0KCWlmICh0eXBlb2Yg
ZW50cnkuYXJndW1lbnRzID09PSAic3RyaW5nIikgewoJCWNvbnN0IHJlcyA9IHRydW5jYXRlQ2hh
dEhpc3RvcnlUZXh0KGVudHJ5LmFyZ3VtZW50cyk7CgkJZW50cnkuYXJndW1lbnRzID0gcmVzLnRl
eHQ7CgkJY2hhbmdlZCB8fD0gcmVzLnRydW5jYXRlZDsKCX0KCWlmICh0eXBlb2YgZW50cnkudGhp
bmtpbmcgPT09ICJzdHJpbmciKSB7CgkJY29uc3QgcmVzID0gdHJ1bmNhdGVDaGF0SGlzdG9yeVRl
eHQoZW50cnkudGhpbmtpbmcpOwoJCWVudHJ5LnRoaW5raW5nID0gcmVzLnRleHQ7CgkJY2hhbmdl
ZCB8fD0gcmVzLnRydW5jYXRlZDsKCX0KCWlmICgidGhpbmtpbmdTaWduYXR1cmUiIGluIGVudHJ5
KSB7CgkJZGVsZXRlIGVudHJ5LnRoaW5raW5nU2lnbmF0dXJlOwoJCWNoYW5nZWQgPSB0cnVlOwoJ
fQoJaWYgKCh0eXBlb2YgZW50cnkudHlwZSA9PT0gInN0cmluZyIgPyBlbnRyeS50eXBlIDogIiIp
ID09PSAiaW1hZ2UiICYmIHR5cGVvZiBlbnRyeS5kYXRhID09PSAic3RyaW5nIikgewoJCWNvbnN0
IGJ5dGVzID0gQnVmZmVyLmJ5dGVMZW5ndGgoZW50cnkuZGF0YSwgInV0ZjgiKTsKCQlkZWxldGUg
ZW50cnkuZGF0YTsKCQllbnRyeS5vbWl0dGVkID0gdHJ1ZTsKCQllbnRyeS5ieXRlcyA9IGJ5dGVz
OwoJCWNoYW5nZWQgPSB0cnVlOwoJfQoJcmV0dXJuIHsKCQlibG9jazogY2hhbmdlZCA/IGVudHJ5
IDogYmxvY2ssCgkJY2hhbmdlZAoJfTsKfQovKioKKiBWYWxpZGF0ZSB0aGF0IGEgdmFsdWUgaXMg
YSBmaW5pdGUgbnVtYmVyLCByZXR1cm5pbmcgdW5kZWZpbmVkIG90aGVyd2lzZS4KKi8KZnVuY3Rp
b24gdG9GaW5pdGVOdW1iZXIoeCkgewoJcmV0dXJuIHR5cGVvZiB4ID09PSAibnVtYmVyIiAmJiBO
dW1iZXIuaXNGaW5pdGUoeCkgPyB4IDogdm9pZCAwOwp9Ci8qKgoqIFNhbml0aXplIHVzYWdlIG1l
dGFkYXRhIHRvIGVuc3VyZSBvbmx5IGZpbml0ZSBudW1lcmljIGZpZWxkcyBhcmUgaW5jbHVkZWQu
CiogUHJldmVudHMgVUkgY3Jhc2hlcyBmcm9tIG1hbGZvcm1lZCB0cmFuc2NyaXB0IEpTT04uCiov
CmZ1bmN0aW9uIHNhbml0aXplVXNhZ2UocmF3KSB7CglpZiAoIXJhdyB8fCB0eXBlb2YgcmF3ICE9
PSAib2JqZWN0IikgcmV0dXJuOwoJY29uc3QgdSA9IHJhdzsKCWNvbnN0IG91dCA9IHt9OwoJZm9y
IChjb25zdCBrIG9mIFsKCQkiaW5wdXQiLAoJCSJvdXRwdXQiLAoJCSJ0b3RhbFRva2VucyIsCgkJ
ImlucHV0VG9rZW5zIiwKCQkib3V0cHV0VG9rZW5zIiwKCQkiY2FjaGVSZWFkIiwKCQkiY2FjaGVX
cml0ZSIsCgkJImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIiwKCQkiY2FjaGVfY3JlYXRpb25faW5w
dXRfdG9rZW5zIgoJXSkgewoJCWNvbnN0IG4gPSB0b0Zpbml0ZU51bWJlcih1W2tdKTsKCQlpZiAo
biAhPT0gdm9pZCAwKSBvdXRba10gPSBuOwoJfQoJaWYgKCJjb3N0IiBpbiB1ICYmIHUuY29zdCAh
PSBudWxsICYmIHR5cGVvZiB1LmNvc3QgPT09ICJvYmplY3QiKSB7CgkJY29uc3Qgc2FuaXRpemVk
Q29zdCA9IHNhbml0aXplQ29zdCh1LmNvc3QpOwoJCWlmIChzYW5pdGl6ZWRDb3N0KSBvdXQuY29z
dCA9IHNhbml0aXplZENvc3Q7Cgl9CglyZXR1cm4gT2JqZWN0LmtleXMob3V0KS5sZW5ndGggPiAw
ID8gb3V0IDogdm9pZCAwOwp9Ci8qKgoqIFNhbml0aXplIGNvc3QgbWV0YWRhdGEgdG8gZW5zdXJl
IG9ubHkgZmluaXRlIG51bWVyaWMgZmllbGRzIGFyZSBpbmNsdWRlZC4KKiBQcmV2ZW50cyBVSSBj
cmFzaGVzIGZyb20gY2FsbGluZyAudG9GaXhlZCgpIG9uIG5vbi1udW1iZXJzLgoqLwpmdW5jdGlv
biBzYW5pdGl6ZUNvc3QocmF3KSB7CglpZiAoIXJhdyB8fCB0eXBlb2YgcmF3ICE9PSAib2JqZWN0
IikgcmV0dXJuOwoJY29uc3QgdG90YWwgPSB0b0Zpbml0ZU51bWJlcihyYXcudG90YWwpOwoJcmV0
dXJuIHRvdGFsICE9PSB2b2lkIDAgPyB7IHRvdGFsIH0gOiB2b2lkIDA7Cn0KZnVuY3Rpb24gc2Fu
aXRpemVDaGF0SGlzdG9yeU1lc3NhZ2UobWVzc2FnZSkgewoJaWYgKCFtZXNzYWdlIHx8IHR5cGVv
ZiBtZXNzYWdlICE9PSAib2JqZWN0IikgcmV0dXJuIHsKCQltZXNzYWdlLAoJCWNoYW5nZWQ6IGZh
bHNlCgl9OwoJY29uc3QgZW50cnkgPSB7IC4uLm1lc3NhZ2UgfTsKCWxldCBjaGFuZ2VkID0gZmFs
c2U7CglpZiAoImRldGFpbHMiIGluIGVudHJ5KSB7CgkJZGVsZXRlIGVudHJ5LmRldGFpbHM7CgkJ
Y2hhbmdlZCA9IHRydWU7Cgl9CglpZiAoZW50cnkucm9sZSAhPT0gImFzc2lzdGFudCIpIHsKCQlp
ZiAoInVzYWdlIiBpbiBlbnRyeSkgewoJCQlkZWxldGUgZW50cnkudXNhZ2U7CgkJCWNoYW5nZWQg
PSB0cnVlOwoJCX0KCQlpZiAoImNvc3QiIGluIGVudHJ5KSB7CgkJCWRlbGV0ZSBlbnRyeS5jb3N0
OwoJCQljaGFuZ2VkID0gdHJ1ZTsKCQl9Cgl9IGVsc2UgewoJCWlmICgidXNhZ2UiIGluIGVudHJ5
KSB7CgkJCWNvbnN0IHNhbml0aXplZCA9IHNhbml0aXplVXNhZ2UoZW50cnkudXNhZ2UpOwoJCQlp
ZiAoc2FuaXRpemVkKSBlbnRyeS51c2FnZSA9IHNhbml0aXplZDsKCQkJZWxzZSBkZWxldGUgZW50
cnkudXNhZ2U7CgkJCWNoYW5nZWQgPSB0cnVlOwoJCX0KCQlpZiAoImNvc3QiIGluIGVudHJ5KSB7
CgkJCWNvbnN0IHNhbml0aXplZCA9IHNhbml0aXplQ29zdChlbnRyeS5jb3N0KTsKCQkJaWYgKHNh
bml0aXplZCkgZW50cnkuY29zdCA9IHNhbml0aXplZDsKCQkJZWxzZSBkZWxldGUgZW50cnkuY29z
dDsKCQkJY2hhbmdlZCA9IHRydWU7CgkJfQoJfQoJaWYgKHR5cGVvZiBlbnRyeS5jb250ZW50ID09
PSAic3RyaW5nIikgewoJCWNvbnN0IHN0cmlwcGVkID0gc3RyaXBJbmxpbmVEaXJlY3RpdmVUYWdz
Rm9yRGlzcGxheShlbnRyeS5jb250ZW50KTsKCQljb25zdCByZXMgPSB0cnVuY2F0ZUNoYXRIaXN0
b3J5VGV4dChzdHJpcHBlZC50ZXh0KTsKCQllbnRyeS5jb250ZW50ID0gcmVzLnRleHQ7CgkJY2hh
bmdlZCB8fD0gc3RyaXBwZWQuY2hhbmdlZCB8fCByZXMudHJ1bmNhdGVkOwoJfSBlbHNlIGlmIChB
cnJheS5pc0FycmF5KGVudHJ5LmNvbnRlbnQpKSB7CgkJY29uc3QgdXBkYXRlZCA9IGVudHJ5LmNv
bnRlbnQubWFwKChibG9jaykgPT4gc2FuaXRpemVDaGF0SGlzdG9yeUNvbnRlbnRCbG9jayhibG9j
aykpOwoJCWlmICh1cGRhdGVkLnNvbWUoKGl0ZW0pID0+IGl0ZW0uY2hhbmdlZCkpIHsKCQkJZW50
cnkuY29udGVudCA9IHVwZGF0ZWQubWFwKChpdGVtKSA9PiBpdGVtLmJsb2NrKTsKCQkJY2hhbmdl
ZCA9IHRydWU7CgkJfQoJfQoJaWYgKHR5cGVvZiBlbnRyeS50ZXh0ID09PSAic3RyaW5nIikgewoJ
CWNvbnN0IHN0cmlwcGVkID0gc3RyaXBJbmxpbmVEaXJlY3RpdmVUYWdzRm9yRGlzcGxheShlbnRy
eS50ZXh0KTsKCQljb25zdCByZXMgPSB0cnVuY2F0ZUNoYXRIaXN0b3J5VGV4dChzdHJpcHBlZC50
ZXh0KTsKCQllbnRyeS50ZXh0ID0gcmVzLnRleHQ7CgkJY2hhbmdlZCB8fD0gc3RyaXBwZWQuY2hh
bmdlZCB8fCByZXMudHJ1bmNhdGVkOwoJfQoJcmV0dXJuIHsKCQltZXNzYWdlOiBjaGFuZ2VkID8g
ZW50cnkgOiBtZXNzYWdlLAoJCWNoYW5nZWQKCX07Cn0KLyoqCiogRXh0cmFjdCB0aGUgdmlzaWJs
ZSB0ZXh0IGZyb20gYW4gYXNzaXN0YW50IGhpc3RvcnkgbWVzc2FnZSBmb3Igc2lsZW50LXRva2Vu
IGNoZWNrcy4KKiBSZXR1cm5zIGB1bmRlZmluZWRgIGZvciBub24tYXNzaXN0YW50IG1lc3NhZ2Vz
IG9yIG1lc3NhZ2VzIHdpdGggbm8gZXh0cmFjdGFibGUgdGV4dC4KKiBXaGVuIGBlbnRyeS50ZXh0
YCBpcyBwcmVzZW50IGl0IHRha2VzIHByZWNlZGVuY2Ugb3ZlciBgZW50cnkuY29udGVudGAgdG8g
YXZvaWQKKiBkcm9wcGluZyBtZXNzYWdlcyB0aGF0IGNhcnJ5IHJlYWwgdGV4dCBhbG9uZ3NpZGUg
YSBzdGFsZSBgY29udGVudDogIk5PX1JFUExZImAuCiovCmZ1bmN0aW9uIGV4dHJhY3RBc3Npc3Rh
bnRUZXh0Rm9yU2lsZW50Q2hlY2sobWVzc2FnZSkgewoJaWYgKCFtZXNzYWdlIHx8IHR5cGVvZiBt
ZXNzYWdlICE9PSAib2JqZWN0IikgcmV0dXJuOwoJY29uc3QgZW50cnkgPSBtZXNzYWdlOwoJaWYg
KGVudHJ5LnJvbGUgIT09ICJhc3Npc3RhbnQiKSByZXR1cm47CglpZiAodHlwZW9mIGVudHJ5LnRl
eHQgPT09ICJzdHJpbmciKSByZXR1cm4gZW50cnkudGV4dDsKCWlmICh0eXBlb2YgZW50cnkuY29u
dGVudCA9PT0gInN0cmluZyIpIHJldHVybiBlbnRyeS5jb250ZW50OwoJaWYgKCFBcnJheS5pc0Fy
cmF5KGVudHJ5LmNvbnRlbnQpIHx8IGVudHJ5LmNvbnRlbnQubGVuZ3RoID09PSAwKSByZXR1cm47
Cgljb25zdCB0ZXh0cyA9IFtdOwoJZm9yIChjb25zdCBibG9jayBvZiBlbnRyeS5jb250ZW50KSB7
CgkJaWYgKCFibG9jayB8fCB0eXBlb2YgYmxvY2sgIT09ICJvYmplY3QiKSByZXR1cm47CgkJY29u
c3QgdHlwZWQgPSBibG9jazsKCQlpZiAodHlwZWQudHlwZSAhPT0gInRleHQiIHx8IHR5cGVvZiB0
eXBlZC50ZXh0ICE9PSAic3RyaW5nIikgcmV0dXJuOwoJCXRleHRzLnB1c2godHlwZWQudGV4dCk7
Cgl9CglyZXR1cm4gdGV4dHMubGVuZ3RoID4gMCA/IHRleHRzLmpvaW4oIlxuIikgOiB2b2lkIDA7
Cn0KZnVuY3Rpb24gc2FuaXRpemVDaGF0SGlzdG9yeU1lc3NhZ2VzKG1lc3NhZ2VzKSB7CglpZiAo
bWVzc2FnZXMubGVuZ3RoID09PSAwKSByZXR1cm4gbWVzc2FnZXM7CglsZXQgY2hhbmdlZCA9IGZh
bHNlOwoJY29uc3QgbmV4dCA9IFtdOwoJZm9yIChjb25zdCBtZXNzYWdlIG9mIG1lc3NhZ2VzKSB7
CgkJY29uc3QgcmVzID0gc2FuaXRpemVDaGF0SGlzdG9yeU1lc3NhZ2UobWVzc2FnZSk7CgkJY2hh
bmdlZCB8fD0gcmVzLmNoYW5nZWQ7CgkJY29uc3QgdGV4dCA9IGV4dHJhY3RBc3Npc3RhbnRUZXh0
Rm9yU2lsZW50Q2hlY2socmVzLm1lc3NhZ2UpOwoJCWlmICh0ZXh0ICE9PSB2b2lkIDAgJiYgaXNT
aWxlbnRSZXBseVRleHQodGV4dCwgIk5PX1JFUExZIikpIHsKCQkJY2hhbmdlZCA9IHRydWU7CgkJ
CWNvbnRpbnVlOwoJCX0KCQluZXh0LnB1c2gocmVzLm1lc3NhZ2UpOwoJfQoJcmV0dXJuIGNoYW5n
ZWQgPyBuZXh0IDogbWVzc2FnZXM7Cn0KZnVuY3Rpb24gYnVpbGRPdmVyc2l6ZWRIaXN0b3J5UGxh
Y2Vob2xkZXIobWVzc2FnZSkgewoJcmV0dXJuIHsKCQlyb2xlOiBtZXNzYWdlICYmIHR5cGVvZiBt
ZXNzYWdlID09PSAib2JqZWN0IiAmJiB0eXBlb2YgbWVzc2FnZS5yb2xlID09PSAic3RyaW5nIiA/
IG1lc3NhZ2Uucm9sZSA6ICJhc3Npc3RhbnQiLAoJCXRpbWVzdGFtcDogbWVzc2FnZSAmJiB0eXBl
b2YgbWVzc2FnZSA9PT0gIm9iamVjdCIgJiYgdHlwZW9mIG1lc3NhZ2UudGltZXN0YW1wID09PSAi
bnVtYmVyIiA/IG1lc3NhZ2UudGltZXN0YW1wIDogRGF0ZS5ub3coKSwKCQljb250ZW50OiBbewoJ
CQl0eXBlOiAidGV4dCIsCgkJCXRleHQ6IENIQVRfSElTVE9SWV9PVkVSU0laRURfUExBQ0VIT0xE
RVIKCQl9XSwKCQlfX29wZW5jbGF3OiB7CgkJCXRydW5jYXRlZDogdHJ1ZSwKCQkJcmVhc29uOiAi
b3ZlcnNpemVkIgoJCX0KCX07Cn0KZnVuY3Rpb24gcmVwbGFjZU92ZXJzaXplZENoYXRIaXN0b3J5
TWVzc2FnZXMocGFyYW1zKSB7Cgljb25zdCB7IG1lc3NhZ2VzLCBtYXhTaW5nbGVNZXNzYWdlQnl0
ZXMgfSA9IHBhcmFtczsKCWlmIChtZXNzYWdlcy5sZW5ndGggPT09IDApIHJldHVybiB7CgkJbWVz
c2FnZXMsCgkJcmVwbGFjZWRDb3VudDogMAoJfTsKCWxldCByZXBsYWNlZENvdW50ID0gMDsKCWNv
bnN0IG5leHQgPSBtZXNzYWdlcy5tYXAoKG1lc3NhZ2UpID0+IHsKCQlpZiAoanNvblV0ZjhCeXRl
cyhtZXNzYWdlKSA8PSBtYXhTaW5nbGVNZXNzYWdlQnl0ZXMpIHJldHVybiBtZXNzYWdlOwoJCXJl
cGxhY2VkQ291bnQgKz0gMTsKCQlyZXR1cm4gYnVpbGRPdmVyc2l6ZWRIaXN0b3J5UGxhY2Vob2xk
ZXIobWVzc2FnZSk7Cgl9KTsKCXJldHVybiB7CgkJbWVzc2FnZXM6IHJlcGxhY2VkQ291bnQgPiAw
ID8gbmV4dCA6IG1lc3NhZ2VzLAoJCXJlcGxhY2VkQ291bnQKCX07Cn0KZnVuY3Rpb24gZW5mb3Jj
ZUNoYXRIaXN0b3J5RmluYWxCdWRnZXQocGFyYW1zKSB7Cgljb25zdCB7IG1lc3NhZ2VzLCBtYXhC
eXRlcyB9ID0gcGFyYW1zOwoJaWYgKG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHsKCQlt
ZXNzYWdlcywKCQlwbGFjZWhvbGRlckNvdW50OiAwCgl9OwoJaWYgKGpzb25VdGY4Qnl0ZXMobWVz
c2FnZXMpIDw9IG1heEJ5dGVzKSByZXR1cm4gewoJCW1lc3NhZ2VzLAoJCXBsYWNlaG9sZGVyQ291
bnQ6IDAKCX07Cgljb25zdCBsYXN0ID0gbWVzc2FnZXMuYXQoLTEpOwoJaWYgKGxhc3QgJiYganNv
blV0ZjhCeXRlcyhbbGFzdF0pIDw9IG1heEJ5dGVzKSByZXR1cm4gewoJCW1lc3NhZ2VzOiBbbGFz
dF0sCgkJcGxhY2Vob2xkZXJDb3VudDogMAoJfTsKCWNvbnN0IHBsYWNlaG9sZGVyID0gYnVpbGRP
dmVyc2l6ZWRIaXN0b3J5UGxhY2Vob2xkZXIobGFzdCk7CglpZiAoanNvblV0ZjhCeXRlcyhbcGxh
Y2Vob2xkZXJdKSA8PSBtYXhCeXRlcykgcmV0dXJuIHsKCQltZXNzYWdlczogW3BsYWNlaG9sZGVy
XSwKCQlwbGFjZWhvbGRlckNvdW50OiAxCgl9OwoJcmV0dXJuIHsKCQltZXNzYWdlczogW10sCgkJ
cGxhY2Vob2xkZXJDb3VudDogMAoJfTsKfQpmdW5jdGlvbiByZXNvbHZlVHJhbnNjcmlwdFBhdGgo
cGFyYW1zKSB7Cgljb25zdCB7IHNlc3Npb25JZCwgc3RvcmVQYXRoLCBzZXNzaW9uRmlsZSwgYWdl
bnRJZCB9ID0gcGFyYW1zOwoJaWYgKCFzdG9yZVBhdGggJiYgIXNlc3Npb25GaWxlKSByZXR1cm4g
bnVsbDsKCXRyeSB7CgkJY29uc3Qgc2Vzc2lvbnNEaXIgPSBzdG9yZVBhdGggPyBwYXRoLmRpcm5h
bWUoc3RvcmVQYXRoKSA6IHZvaWQgMDsKCQlyZXR1cm4gcmVzb2x2ZVNlc3Npb25GaWxlUGF0aChz
ZXNzaW9uSWQsIHNlc3Npb25GaWxlID8geyBzZXNzaW9uRmlsZSB9IDogdm9pZCAwLCBzZXNzaW9u
c0RpciB8fCBhZ2VudElkID8gewoJCQlzZXNzaW9uc0RpciwKCQkJYWdlbnRJZAoJCX0gOiB2b2lk
IDApOwoJfSBjYXRjaCB7CgkJcmV0dXJuIG51bGw7Cgl9Cn0KZnVuY3Rpb24gZW5zdXJlVHJhbnNj
cmlwdEZpbGUocGFyYW1zKSB7CglpZiAoZnMuZXhpc3RzU3luYyhwYXJhbXMudHJhbnNjcmlwdFBh
dGgpKSByZXR1cm4geyBvazogdHJ1ZSB9OwoJdHJ5IHsKCQlmcy5ta2RpclN5bmMocGF0aC5kaXJu
YW1lKHBhcmFtcy50cmFuc2NyaXB0UGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pOwoJCWNvbnN0
IGhlYWRlciA9IHsKCQkJdHlwZTogInNlc3Npb24iLAoJCQl2ZXJzaW9uOiBDVVJSRU5UX1NFU1NJ
T05fVkVSU0lPTiwKCQkJaWQ6IHBhcmFtcy5zZXNzaW9uSWQsCgkJCXRpbWVzdGFtcDogKC8qIEBf
X1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpLAoJCQljd2Q6IHByb2Nlc3MuY3dk
KCkKCQl9OwoJCWZzLndyaXRlRmlsZVN5bmMocGFyYW1zLnRyYW5zY3JpcHRQYXRoLCBgJHtKU09O
LnN0cmluZ2lmeShoZWFkZXIpfVxuYCwgewoJCQllbmNvZGluZzogInV0Zi04IiwKCQkJbW9kZTog
Mzg0CgkJfSk7CgkJcmV0dXJuIHsgb2s6IHRydWUgfTsKCX0gY2F0Y2ggKGVycikgewoJCXJldHVy
biB7CgkJCW9rOiBmYWxzZSwKCQkJZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1l
c3NhZ2UgOiBTdHJpbmcoZXJyKQoJCX07Cgl9Cn0KZnVuY3Rpb24gdHJhbnNjcmlwdEhhc0lkZW1w
b3RlbmN5S2V5KHRyYW5zY3JpcHRQYXRoLCBpZGVtcG90ZW5jeUtleSkgewoJdHJ5IHsKCQljb25z
dCBsaW5lcyA9IGZzLnJlYWRGaWxlU3luYyh0cmFuc2NyaXB0UGF0aCwgInV0Zi04Iikuc3BsaXQo
L1xyP1xuLyk7CgkJZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7CgkJCWlmICghbGluZS50cmlt
KCkpIGNvbnRpbnVlOwoJCQlpZiAoSlNPTi5wYXJzZShsaW5lKT8ubWVzc2FnZT8uaWRlbXBvdGVu
Y3lLZXkgPT09IGlkZW1wb3RlbmN5S2V5KSByZXR1cm4gdHJ1ZTsKCQl9CgkJcmV0dXJuIGZhbHNl
OwoJfSBjYXRjaCB7CgkJcmV0dXJuIGZhbHNlOwoJfQp9CmZ1bmN0aW9uIGFwcGVuZEFzc2lzdGFu
dFRyYW5zY3JpcHRNZXNzYWdlKHBhcmFtcykgewoJY29uc3QgdHJhbnNjcmlwdFBhdGggPSByZXNv
bHZlVHJhbnNjcmlwdFBhdGgoewoJCXNlc3Npb25JZDogcGFyYW1zLnNlc3Npb25JZCwKCQlzdG9y
ZVBhdGg6IHBhcmFtcy5zdG9yZVBhdGgsCgkJc2Vzc2lvbkZpbGU6IHBhcmFtcy5zZXNzaW9uRmls
ZSwKCQlhZ2VudElkOiBwYXJhbXMuYWdlbnRJZAoJfSk7CglpZiAoIXRyYW5zY3JpcHRQYXRoKSBy
ZXR1cm4gewoJCW9rOiBmYWxzZSwKCQllcnJvcjogInRyYW5zY3JpcHQgcGF0aCBub3QgcmVzb2x2
ZWQiCgl9OwoJaWYgKCFmcy5leGlzdHNTeW5jKHRyYW5zY3JpcHRQYXRoKSkgewoJCWlmICghcGFy
YW1zLmNyZWF0ZUlmTWlzc2luZykgcmV0dXJuIHsKCQkJb2s6IGZhbHNlLAoJCQllcnJvcjogInRy
YW5zY3JpcHQgZmlsZSBub3QgZm91bmQiCgkJfTsKCQljb25zdCBlbnN1cmVkID0gZW5zdXJlVHJh
bnNjcmlwdEZpbGUoewoJCQl0cmFuc2NyaXB0UGF0aCwKCQkJc2Vzc2lvbklkOiBwYXJhbXMuc2Vz
c2lvbklkCgkJfSk7CgkJaWYgKCFlbnN1cmVkLm9rKSByZXR1cm4gewoJCQlvazogZmFsc2UsCgkJ
CWVycm9yOiBlbnN1cmVkLmVycm9yID8/ICJmYWlsZWQgdG8gY3JlYXRlIHRyYW5zY3JpcHQgZmls
ZSIKCQl9OwoJfQoJaWYgKHBhcmFtcy5pZGVtcG90ZW5jeUtleSAmJiB0cmFuc2NyaXB0SGFzSWRl
bXBvdGVuY3lLZXkodHJhbnNjcmlwdFBhdGgsIHBhcmFtcy5pZGVtcG90ZW5jeUtleSkpIHJldHVy
biB7IG9rOiB0cnVlIH07CglyZXR1cm4gYXBwZW5kSW5qZWN0ZWRBc3Npc3RhbnRNZXNzYWdlVG9U
cmFuc2NyaXB0KHsKCQl0cmFuc2NyaXB0UGF0aCwKCQltZXNzYWdlOiBwYXJhbXMubWVzc2FnZSwK
CQlsYWJlbDogcGFyYW1zLmxhYmVsLAoJCWlkZW1wb3RlbmN5S2V5OiBwYXJhbXMuaWRlbXBvdGVu
Y3lLZXksCgkJYWJvcnRNZXRhOiBwYXJhbXMuYWJvcnRNZXRhCgl9KTsKfQpmdW5jdGlvbiBjb2xs
ZWN0U2Vzc2lvbkFib3J0UGFydGlhbHMocGFyYW1zKSB7Cgljb25zdCBvdXQgPSBbXTsKCWZvciAo
Y29uc3QgW3J1bklkLCBhY3RpdmVdIG9mIHBhcmFtcy5jaGF0QWJvcnRDb250cm9sbGVycykgewoJ
CWlmICghcGFyYW1zLnJ1bklkcy5oYXMocnVuSWQpKSBjb250aW51ZTsKCQljb25zdCB0ZXh0ID0g
cGFyYW1zLmNoYXRSdW5CdWZmZXJzLmdldChydW5JZCk7CgkJaWYgKCF0ZXh0IHx8ICF0ZXh0LnRy
aW0oKSkgY29udGludWU7CgkJb3V0LnB1c2goewoJCQlydW5JZCwKCQkJc2Vzc2lvbklkOiBhY3Rp
dmUuc2Vzc2lvbklkLAoJCQl0ZXh0LAoJCQlhYm9ydE9yaWdpbjogcGFyYW1zLmFib3J0T3JpZ2lu
CgkJfSk7Cgl9CglyZXR1cm4gb3V0Owp9CmZ1bmN0aW9uIHBlcnNpc3RBYm9ydGVkUGFydGlhbHMo
cGFyYW1zKSB7CglpZiAocGFyYW1zLnNuYXBzaG90cy5sZW5ndGggPT09IDApIHJldHVybjsKCWNv
bnN0IHsgc3RvcmVQYXRoLCBlbnRyeSB9ID0gbG9hZFNlc3Npb25FbnRyeShwYXJhbXMuc2Vzc2lv
bktleSk7Cglmb3IgKGNvbnN0IHNuYXBzaG90IG9mIHBhcmFtcy5zbmFwc2hvdHMpIHsKCQljb25z
dCBzZXNzaW9uSWQgPSBlbnRyeT8uc2Vzc2lvbklkID8/IHNuYXBzaG90LnNlc3Npb25JZCA/PyBz
bmFwc2hvdC5ydW5JZDsKCQljb25zdCBhcHBlbmRlZCA9IGFwcGVuZEFzc2lzdGFudFRyYW5zY3Jp
cHRNZXNzYWdlKHsKCQkJbWVzc2FnZTogc25hcHNob3QudGV4dCwKCQkJc2Vzc2lvbklkLAoJCQlz
dG9yZVBhdGgsCgkJCXNlc3Npb25GaWxlOiBlbnRyeT8uc2Vzc2lvbkZpbGUsCgkJCWNyZWF0ZUlm
TWlzc2luZzogdHJ1ZSwKCQkJaWRlbXBvdGVuY3lLZXk6IGAke3NuYXBzaG90LnJ1bklkfTphc3Np
c3RhbnRgLAoJCQlhYm9ydE1ldGE6IHsKCQkJCWFib3J0ZWQ6IHRydWUsCgkJCQlvcmlnaW46IHNu
YXBzaG90LmFib3J0T3JpZ2luLAoJCQkJcnVuSWQ6IHNuYXBzaG90LnJ1bklkCgkJCX0KCQl9KTsK
CQlpZiAoIWFwcGVuZGVkLm9rKSBwYXJhbXMuY29udGV4dC5sb2dHYXRld2F5Lndhcm4oYGNoYXQu
YWJvcnQgdHJhbnNjcmlwdCBhcHBlbmQgZmFpbGVkOiAke2FwcGVuZGVkLmVycm9yID8/ICJ1bmtu
b3duIGVycm9yIn1gKTsKCX0KfQpmdW5jdGlvbiBjcmVhdGVDaGF0QWJvcnRPcHMoY29udGV4dCkg
ewoJcmV0dXJuIHsKCQljaGF0QWJvcnRDb250cm9sbGVyczogY29udGV4dC5jaGF0QWJvcnRDb250
cm9sbGVycywKCQljaGF0UnVuQnVmZmVyczogY29udGV4dC5jaGF0UnVuQnVmZmVycywKCQljaGF0
RGVsdGFTZW50QXQ6IGNvbnRleHQuY2hhdERlbHRhU2VudEF0LAoJCWNoYXRBYm9ydGVkUnVuczog
Y29udGV4dC5jaGF0QWJvcnRlZFJ1bnMsCgkJcmVtb3ZlQ2hhdFJ1bjogY29udGV4dC5yZW1vdmVD
aGF0UnVuLAoJCWFnZW50UnVuU2VxOiBjb250ZXh0LmFnZW50UnVuU2VxLAoJCWJyb2FkY2FzdDog
Y29udGV4dC5icm9hZGNhc3QsCgkJbm9kZVNlbmRUb1Nlc3Npb246IGNvbnRleHQubm9kZVNlbmRU
b1Nlc3Npb24KCX07Cn0KZnVuY3Rpb24gbm9ybWFsaXplT3B0aW9uYWxUZXh0KHZhbHVlKSB7Cgly
ZXR1cm4gdmFsdWU/LnRyaW0oKSB8fCB2b2lkIDA7Cn0KZnVuY3Rpb24gcmVzb2x2ZUNoYXRBYm9y
dFJlcXVlc3RlcihjbGllbnQpIHsKCWNvbnN0IHNjb3BlcyA9IEFycmF5LmlzQXJyYXkoY2xpZW50
Py5jb25uZWN0Py5zY29wZXMpID8gY2xpZW50LmNvbm5lY3Quc2NvcGVzIDogW107CglyZXR1cm4g
ewoJCWNvbm5JZDogbm9ybWFsaXplT3B0aW9uYWxUZXh0KGNsaWVudD8uY29ubklkKSwKCQlkZXZp
Y2VJZDogbm9ybWFsaXplT3B0aW9uYWxUZXh0KGNsaWVudD8uY29ubmVjdD8uZGV2aWNlPy5pZCks
CgkJaXNBZG1pbjogc2NvcGVzLmluY2x1ZGVzKEFETUlOX1NDT1BFJDMpCgl9Owp9CmZ1bmN0aW9u
IGNhblJlcXVlc3RlckFib3J0Q2hhdFJ1bihlbnRyeSwgcmVxdWVzdGVyKSB7CglpZiAocmVxdWVz
dGVyLmlzQWRtaW4pIHJldHVybiB0cnVlOwoJY29uc3Qgb3duZXJEZXZpY2VJZCA9IG5vcm1hbGl6
ZU9wdGlvbmFsVGV4dChlbnRyeS5vd25lckRldmljZUlkKTsKCWNvbnN0IG93bmVyQ29ubklkID0g
bm9ybWFsaXplT3B0aW9uYWxUZXh0KGVudHJ5Lm93bmVyQ29ubklkKTsKCWlmICghb3duZXJEZXZp
Y2VJZCAmJiAhb3duZXJDb25uSWQpIHJldHVybiB0cnVlOwoJaWYgKG93bmVyRGV2aWNlSWQgJiYg
cmVxdWVzdGVyLmRldmljZUlkICYmIG93bmVyRGV2aWNlSWQgPT09IHJlcXVlc3Rlci5kZXZpY2VJ
ZCkgcmV0dXJuIHRydWU7CglpZiAob3duZXJDb25uSWQgJiYgcmVxdWVzdGVyLmNvbm5JZCAmJiBv
d25lckNvbm5JZCA9PT0gcmVxdWVzdGVyLmNvbm5JZCkgcmV0dXJuIHRydWU7CglyZXR1cm4gZmFs
c2U7Cn0KZnVuY3Rpb24gcmVzb2x2ZUF1dGhvcml6ZWRSdW5JZHNGb3JTZXNzaW9uKHBhcmFtcykg
ewoJY29uc3QgYXV0aG9yaXplZFJ1bklkcyA9IFtdOwoJbGV0IG1hdGNoZWRTZXNzaW9uUnVucyA9
IDA7Cglmb3IgKGNvbnN0IFtydW5JZCwgYWN0aXZlXSBvZiBwYXJhbXMuY2hhdEFib3J0Q29udHJv
bGxlcnMpIHsKCQlpZiAoYWN0aXZlLnNlc3Npb25LZXkgIT09IHBhcmFtcy5zZXNzaW9uS2V5KSBj
b250aW51ZTsKCQltYXRjaGVkU2Vzc2lvblJ1bnMgKz0gMTsKCQlpZiAoY2FuUmVxdWVzdGVyQWJv
cnRDaGF0UnVuKGFjdGl2ZSwgcGFyYW1zLnJlcXVlc3RlcikpIGF1dGhvcml6ZWRSdW5JZHMucHVz
aChydW5JZCk7Cgl9CglyZXR1cm4gewoJCW1hdGNoZWRTZXNzaW9uUnVucywKCQlhdXRob3JpemVk
UnVuSWRzCgl9Owp9CmZ1bmN0aW9uIGFib3J0Q2hhdFJ1bnNGb3JTZXNzaW9uS2V5V2l0aFBhcnRp
YWxzKHBhcmFtcykgewoJY29uc3QgeyBtYXRjaGVkU2Vzc2lvblJ1bnMsIGF1dGhvcml6ZWRSdW5J
ZHMgfSA9IHJlc29sdmVBdXRob3JpemVkUnVuSWRzRm9yU2Vzc2lvbih7CgkJY2hhdEFib3J0Q29u
dHJvbGxlcnM6IHBhcmFtcy5jb250ZXh0LmNoYXRBYm9ydENvbnRyb2xsZXJzLAoJCXNlc3Npb25L
ZXk6IHBhcmFtcy5zZXNzaW9uS2V5LAoJCXJlcXVlc3RlcjogcGFyYW1zLnJlcXVlc3RlcgoJfSk7
CglpZiAoYXV0aG9yaXplZFJ1bklkcy5sZW5ndGggPT09IDApIHJldHVybiB7CgkJYWJvcnRlZDog
ZmFsc2UsCgkJcnVuSWRzOiBbXSwKCQl1bmF1dGhvcml6ZWQ6IG1hdGNoZWRTZXNzaW9uUnVucyA+
IDAKCX07Cgljb25zdCBhdXRob3JpemVkUnVuSWRTZXQgPSBuZXcgU2V0KGF1dGhvcml6ZWRSdW5J
ZHMpOwoJY29uc3Qgc25hcHNob3RzID0gY29sbGVjdFNlc3Npb25BYm9ydFBhcnRpYWxzKHsKCQlj
aGF0QWJvcnRDb250cm9sbGVyczogcGFyYW1zLmNvbnRleHQuY2hhdEFib3J0Q29udHJvbGxlcnMs
CgkJY2hhdFJ1bkJ1ZmZlcnM6IHBhcmFtcy5jb250ZXh0LmNoYXRSdW5CdWZmZXJzLAoJCXJ1bklk
czogYXV0aG9yaXplZFJ1bklkU2V0LAoJCWFib3J0T3JpZ2luOiBwYXJhbXMuYWJvcnRPcmlnaW4K
CX0pOwoJY29uc3QgcnVuSWRzID0gW107Cglmb3IgKGNvbnN0IHJ1bklkIG9mIGF1dGhvcml6ZWRS
dW5JZHMpIGlmIChhYm9ydENoYXRSdW5CeUlkKHBhcmFtcy5vcHMsIHsKCQlydW5JZCwKCQlzZXNz
aW9uS2V5OiBwYXJhbXMuc2Vzc2lvbktleSwKCQlzdG9wUmVhc29uOiBwYXJhbXMuc3RvcFJlYXNv
bgoJfSkuYWJvcnRlZCkgcnVuSWRzLnB1c2gocnVuSWQpOwoJY29uc3QgcmVzID0gewoJCWFib3J0
ZWQ6IHJ1bklkcy5sZW5ndGggPiAwLAoJCXJ1bklkcywKCQl1bmF1dGhvcml6ZWQ6IGZhbHNlCgl9
OwoJaWYgKHJlcy5hYm9ydGVkKSBwZXJzaXN0QWJvcnRlZFBhcnRpYWxzKHsKCQljb250ZXh0OiBw
YXJhbXMuY29udGV4dCwKCQlzZXNzaW9uS2V5OiBwYXJhbXMuc2Vzc2lvbktleSwKCQlzbmFwc2hv
dHMKCX0pOwoJcmV0dXJuIHJlczsKfQpmdW5jdGlvbiBuZXh0Q2hhdFNlcShjb250ZXh0LCBydW5J
ZCkgewoJY29uc3QgbmV4dCA9IChjb250ZXh0LmFnZW50UnVuU2VxLmdldChydW5JZCkgPz8gMCkg
KyAxOwoJY29udGV4dC5hZ2VudFJ1blNlcS5zZXQocnVuSWQsIG5leHQpOwoJcmV0dXJuIG5leHQ7
Cn0KZnVuY3Rpb24gYnJvYWRjYXN0Q2hhdEZpbmFsKHBhcmFtcykgewoJY29uc3Qgc2VxID0gbmV4
dENoYXRTZXEoeyBhZ2VudFJ1blNlcTogcGFyYW1zLmNvbnRleHQuYWdlbnRSdW5TZXEgfSwgcGFy
YW1zLnJ1bklkKTsKCWNvbnN0IHN0cmlwcGVkRW52ZWxvcGVNZXNzYWdlID0gc3RyaXBFbnZlbG9w
ZUZyb21NZXNzYWdlKHBhcmFtcy5tZXNzYWdlKTsKCWNvbnN0IHBheWxvYWQgPSB7CgkJcnVuSWQ6
IHBhcmFtcy5ydW5JZCwKCQlzZXNzaW9uS2V5OiBwYXJhbXMuc2Vzc2lvbktleSwKCQlzZXEsCgkJ
c3RhdGU6ICJmaW5hbCIsCgkJbWVzc2FnZTogc3RyaXBJbmxpbmVEaXJlY3RpdmVUYWdzRnJvbU1l
c3NhZ2VGb3JEaXNwbGF5KHN0cmlwcGVkRW52ZWxvcGVNZXNzYWdlKQoJfTsKCXBhcmFtcy5jb250
ZXh0LmJyb2FkY2FzdCgiY2hhdCIsIHBheWxvYWQpOwoJcGFyYW1zLmNvbnRleHQubm9kZVNlbmRU
b1Nlc3Npb24ocGFyYW1zLnNlc3Npb25LZXksICJjaGF0IiwgcGF5bG9hZCk7CglwYXJhbXMuY29u
dGV4dC5hZ2VudFJ1blNlcS5kZWxldGUocGFyYW1zLnJ1bklkKTsKfQpmdW5jdGlvbiBicm9hZGNh
c3RDaGF0RXJyb3IocGFyYW1zKSB7Cgljb25zdCBzZXEgPSBuZXh0Q2hhdFNlcSh7IGFnZW50UnVu
U2VxOiBwYXJhbXMuY29udGV4dC5hZ2VudFJ1blNlcSB9LCBwYXJhbXMucnVuSWQpOwoJY29uc3Qg
cGF5bG9hZCA9IHsKCQlydW5JZDogcGFyYW1zLnJ1bklkLAoJCXNlc3Npb25LZXk6IHBhcmFtcy5z
ZXNzaW9uS2V5LAoJCXNlcSwKCQlzdGF0ZTogImVycm9yIiwKCQllcnJvck1lc3NhZ2U6IHBhcmFt
cy5lcnJvck1lc3NhZ2UKCX07CglwYXJhbXMuY29udGV4dC5icm9hZGNhc3QoImNoYXQiLCBwYXls
b2FkKTsKCXBhcmFtcy5jb250ZXh0Lm5vZGVTZW5kVG9TZXNzaW9uKHBhcmFtcy5zZXNzaW9uS2V5
LCAiY2hhdCIsIHBheWxvYWQpOwoJcGFyYW1zLmNvbnRleHQuYWdlbnRSdW5TZXEuZGVsZXRlKHBh
cmFtcy5ydW5JZCk7Cn0KY29uc3QgY2hhdEhhbmRsZXJzID0gewoJImNoYXQuaGlzdG9yeSI6IGFz
eW5jICh7IHBhcmFtcywgcmVzcG9uZCwgY29udGV4dCB9KSA9PiB7CgkJaWYgKCF2YWxpZGF0ZUNo
YXRIaXN0b3J5UGFyYW1zKHBhcmFtcykpIHsKCQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJv
clNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCBgaW52YWxpZCBjaGF0Lmhpc3Rvcnkg
cGFyYW1zOiAke2Zvcm1hdFZhbGlkYXRpb25FcnJvcnModmFsaWRhdGVDaGF0SGlzdG9yeVBhcmFt
cy5lcnJvcnMpfWApKTsKCQkJcmV0dXJuOwoJCX0KCQljb25zdCB7IHNlc3Npb25LZXksIGxpbWl0
IH0gPSBwYXJhbXM7CgkJY29uc3QgeyBjZmcsIHN0b3JlUGF0aCwgZW50cnkgfSA9IGxvYWRTZXNz
aW9uRW50cnkoc2Vzc2lvbktleSk7CgkJY29uc3Qgc2Vzc2lvbklkID0gZW50cnk/LnNlc3Npb25J
ZDsKCQljb25zdCByYXdNZXNzYWdlcyA9IHNlc3Npb25JZCAmJiBzdG9yZVBhdGggPyByZWFkU2Vz
c2lvbk1lc3NhZ2VzKHNlc3Npb25JZCwgc3RvcmVQYXRoLCBlbnRyeT8uc2Vzc2lvbkZpbGUpIDog
W107CgkJY29uc3QgaGFyZE1heCA9IDFlMzsKCQljb25zdCByZXF1ZXN0ZWQgPSB0eXBlb2YgbGlt
aXQgPT09ICJudW1iZXIiID8gbGltaXQgOiAyMDA7CgkJY29uc3QgbWF4ID0gTWF0aC5taW4oaGFy
ZE1heCwgcmVxdWVzdGVkKTsKCQljb25zdCBub3JtYWxpemVkID0gc2FuaXRpemVDaGF0SGlzdG9y
eU1lc3NhZ2VzKHN0cmlwRW52ZWxvcGVGcm9tTWVzc2FnZXMocmF3TWVzc2FnZXMubGVuZ3RoID4g
bWF4ID8gcmF3TWVzc2FnZXMuc2xpY2UoLW1heCkgOiByYXdNZXNzYWdlcykpOwoJCWNvbnN0IG1h
eEhpc3RvcnlCeXRlcyA9IGdldE1heENoYXRIaXN0b3J5TWVzc2FnZXNCeXRlcygpOwoJCWNvbnN0
IHJlcGxhY2VkID0gcmVwbGFjZU92ZXJzaXplZENoYXRIaXN0b3J5TWVzc2FnZXMoewoJCQltZXNz
YWdlczogbm9ybWFsaXplZCwKCQkJbWF4U2luZ2xlTWVzc2FnZUJ5dGVzOiBNYXRoLm1pbihDSEFU
X0hJU1RPUllfTUFYX1NJTkdMRV9NRVNTQUdFX0JZVEVTLCBtYXhIaXN0b3J5Qnl0ZXMpCgkJfSk7
CgkJY29uc3QgY2FwcGVkID0gY2FwQXJyYXlCeUpzb25CeXRlcyhyZXBsYWNlZC5tZXNzYWdlcywg
bWF4SGlzdG9yeUJ5dGVzKS5pdGVtczsKCQljb25zdCBib3VuZGVkID0gZW5mb3JjZUNoYXRIaXN0
b3J5RmluYWxCdWRnZXQoewoJCQltZXNzYWdlczogY2FwcGVkLAoJCQltYXhCeXRlczogbWF4SGlz
dG9yeUJ5dGVzCgkJfSk7CgkJY29uc3QgcGxhY2Vob2xkZXJDb3VudCA9IHJlcGxhY2VkLnJlcGxh
Y2VkQ291bnQgKyBib3VuZGVkLnBsYWNlaG9sZGVyQ291bnQ7CgkJaWYgKHBsYWNlaG9sZGVyQ291
bnQgPiAwKSB7CgkJCWNoYXRIaXN0b3J5UGxhY2Vob2xkZXJFbWl0Q291bnQgKz0gcGxhY2Vob2xk
ZXJDb3VudDsKCQkJY29udGV4dC5sb2dHYXRld2F5LmRlYnVnKGBjaGF0Lmhpc3Rvcnkgb21pdHRl
ZCBvdmVyc2l6ZWQgcGF5bG9hZHMgcGxhY2Vob2xkZXJzPSR7cGxhY2Vob2xkZXJDb3VudH0gdG90
YWw9JHtjaGF0SGlzdG9yeVBsYWNlaG9sZGVyRW1pdENvdW50fWApOwoJCX0KCQlsZXQgdGhpbmtp
bmdMZXZlbCA9IGVudHJ5Py50aGlua2luZ0xldmVsOwoJCWlmICghdGhpbmtpbmdMZXZlbCkgewoJ
CQljb25zdCB7IHByb3ZpZGVyLCBtb2RlbCB9ID0gcmVzb2x2ZVNlc3Npb25Nb2RlbFJlZihjZmcs
IGVudHJ5LCByZXNvbHZlU2Vzc2lvbkFnZW50SWQoewoJCQkJc2Vzc2lvbktleSwKCQkJCWNvbmZp
ZzogY2ZnCgkJCX0pKTsKCQkJdGhpbmtpbmdMZXZlbCA9IHJlc29sdmVUaGlua2luZ0RlZmF1bHQo
ewoJCQkJY2ZnLAoJCQkJcHJvdmlkZXIsCgkJCQltb2RlbCwKCQkJCWNhdGFsb2c6IGF3YWl0IGNv
bnRleHQubG9hZEdhdGV3YXlNb2RlbENhdGFsb2coKQoJCQl9KTsKCQl9CgkJY29uc3QgdmVyYm9z
ZUxldmVsID0gZW50cnk/LnZlcmJvc2VMZXZlbCA/PyBjZmcuYWdlbnRzPy5kZWZhdWx0cz8udmVy
Ym9zZURlZmF1bHQ7CgkJcmVzcG9uZCh0cnVlLCB7CgkJCXNlc3Npb25LZXksCgkJCXNlc3Npb25J
ZCwKCQkJbWVzc2FnZXM6IGJvdW5kZWQubWVzc2FnZXMsCgkJCXRoaW5raW5nTGV2ZWwsCgkJCWZh
c3RNb2RlOiBlbnRyeT8uZmFzdE1vZGUsCgkJCXZlcmJvc2VMZXZlbAoJCX0pOwoJfSwKCSJjaGF0
LmFib3J0IjogKHsgcGFyYW1zLCByZXNwb25kLCBjb250ZXh0LCBjbGllbnQgfSkgPT4gewoJCWlm
ICghdmFsaWRhdGVDaGF0QWJvcnRQYXJhbXMocGFyYW1zKSkgewoJCQlyZXNwb25kKGZhbHNlLCB2
b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsIGBpbnZhbGlkIGNo
YXQuYWJvcnQgcGFyYW1zOiAke2Zvcm1hdFZhbGlkYXRpb25FcnJvcnModmFsaWRhdGVDaGF0QWJv
cnRQYXJhbXMuZXJyb3JzKX1gKSk7CgkJCXJldHVybjsKCQl9CgkJY29uc3QgeyBzZXNzaW9uS2V5
OiByYXdTZXNzaW9uS2V5LCBydW5JZCB9ID0gcGFyYW1zOwoJCWNvbnN0IG9wcyA9IGNyZWF0ZUNo
YXRBYm9ydE9wcyhjb250ZXh0KTsKCQljb25zdCByZXF1ZXN0ZXIgPSByZXNvbHZlQ2hhdEFib3J0
UmVxdWVzdGVyKGNsaWVudCk7CgkJaWYgKCFydW5JZCkgewoJCQljb25zdCByZXMgPSBhYm9ydENo
YXRSdW5zRm9yU2Vzc2lvbktleVdpdGhQYXJ0aWFscyh7CgkJCQljb250ZXh0LAoJCQkJb3BzLAoJ
CQkJc2Vzc2lvbktleTogcmF3U2Vzc2lvbktleSwKCQkJCWFib3J0T3JpZ2luOiAicnBjIiwKCQkJ
CXN0b3BSZWFzb246ICJycGMiLAoJCQkJcmVxdWVzdGVyCgkJCX0pOwoJCQlpZiAocmVzLnVuYXV0
aG9yaXplZCkgewoJCQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29k
ZXMuSU5WQUxJRF9SRVFVRVNULCAidW5hdXRob3JpemVkIikpOwoJCQkJcmV0dXJuOwoJCQl9CgkJ
CXJlc3BvbmQodHJ1ZSwgewoJCQkJb2s6IHRydWUsCgkJCQlhYm9ydGVkOiByZXMuYWJvcnRlZCwK
CQkJCXJ1bklkczogcmVzLnJ1bklkcwoJCQl9KTsKCQkJcmV0dXJuOwoJCX0KCQljb25zdCBhY3Rp
dmUgPSBjb250ZXh0LmNoYXRBYm9ydENvbnRyb2xsZXJzLmdldChydW5JZCk7CgkJaWYgKCFhY3Rp
dmUpIHsKCQkJcmVzcG9uZCh0cnVlLCB7CgkJCQlvazogdHJ1ZSwKCQkJCWFib3J0ZWQ6IGZhbHNl
LAoJCQkJcnVuSWRzOiBbXQoJCQl9KTsKCQkJcmV0dXJuOwoJCX0KCQlpZiAoYWN0aXZlLnNlc3Np
b25LZXkgIT09IHJhd1Nlc3Npb25LZXkpIHsKCQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJv
clNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCAicnVuSWQgZG9lcyBub3QgbWF0Y2gg
c2Vzc2lvbktleSIpKTsKCQkJcmV0dXJuOwoJCX0KCQlpZiAoIWNhblJlcXVlc3RlckFib3J0Q2hh
dFJ1bihhY3RpdmUsIHJlcXVlc3RlcikpIHsKCQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJv
clNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCAidW5hdXRob3JpemVkIikpOwoJCQly
ZXR1cm47CgkJfQoJCWNvbnN0IHBhcnRpYWxUZXh0ID0gY29udGV4dC5jaGF0UnVuQnVmZmVycy5n
ZXQocnVuSWQpOwoJCWNvbnN0IHJlcyA9IGFib3J0Q2hhdFJ1bkJ5SWQob3BzLCB7CgkJCXJ1bklk
LAoJCQlzZXNzaW9uS2V5OiByYXdTZXNzaW9uS2V5LAoJCQlzdG9wUmVhc29uOiAicnBjIgoJCX0p
OwoJCWlmIChyZXMuYWJvcnRlZCAmJiBwYXJ0aWFsVGV4dCAmJiBwYXJ0aWFsVGV4dC50cmltKCkp
IHBlcnNpc3RBYm9ydGVkUGFydGlhbHMoewoJCQljb250ZXh0LAoJCQlzZXNzaW9uS2V5OiByYXdT
ZXNzaW9uS2V5LAoJCQlzbmFwc2hvdHM6IFt7CgkJCQlydW5JZCwKCQkJCXNlc3Npb25JZDogYWN0
aXZlLnNlc3Npb25JZCwKCQkJCXRleHQ6IHBhcnRpYWxUZXh0LAoJCQkJYWJvcnRPcmlnaW46ICJy
cGMiCgkJCX1dCgkJfSk7CgkJcmVzcG9uZCh0cnVlLCB7CgkJCW9rOiB0cnVlLAoJCQlhYm9ydGVk
OiByZXMuYWJvcnRlZCwKCQkJcnVuSWRzOiByZXMuYWJvcnRlZCA/IFtydW5JZF0gOiBbXQoJCX0p
OwoJfSwKCSJjaGF0LnNlbmQiOiBhc3luYyAoeyBwYXJhbXMsIHJlc3BvbmQsIGNvbnRleHQsIGNs
aWVudCB9KSA9PiB7CgkJaWYgKCF2YWxpZGF0ZUNoYXRTZW5kUGFyYW1zKHBhcmFtcykpIHsKCQkJ
cmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFV
RVNULCBgaW52YWxpZCBjaGF0LnNlbmQgcGFyYW1zOiAke2Zvcm1hdFZhbGlkYXRpb25FcnJvcnMo
dmFsaWRhdGVDaGF0U2VuZFBhcmFtcy5lcnJvcnMpfWApKTsKCQkJcmV0dXJuOwoJCX0KCQljb25z
dCBwID0gcGFyYW1zOwoJCWlmICgocC5zeXN0ZW1JbnB1dFByb3ZlbmFuY2UgfHwgcC5zeXN0ZW1Q
cm92ZW5hbmNlUmVjZWlwdCkgJiYgIWlzQWNwQnJpZGdlQ2xpZW50KGNsaWVudCkpIHsKCQkJcmVz
cG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNU
LCAic3lzdGVtIHByb3ZlbmFuY2UgZmllbGRzIGFyZSByZXNlcnZlZCBmb3IgdGhlIEFDUCBicmlk
Z2UiKSk7CgkJCXJldHVybjsKCQl9CgkJY29uc3Qgc2FuaXRpemVkTWVzc2FnZVJlc3VsdCA9IHNh
bml0aXplQ2hhdFNlbmRNZXNzYWdlSW5wdXQocC5tZXNzYWdlKTsKCQlpZiAoIXNhbml0aXplZE1l
c3NhZ2VSZXN1bHQub2spIHsKCQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVy
cm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCBzYW5pdGl6ZWRNZXNzYWdlUmVzdWx0LmVycm9yKSk7
CgkJCXJldHVybjsKCQl9CgkJY29uc3Qgc3lzdGVtUmVjZWlwdFJlc3VsdCA9IG5vcm1hbGl6ZU9w
dGlvbmFsQ2hhdFN5c3RlbVJlY2VpcHQocC5zeXN0ZW1Qcm92ZW5hbmNlUmVjZWlwdCk7CgkJaWYg
KCFzeXN0ZW1SZWNlaXB0UmVzdWx0Lm9rKSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJy
b3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgc3lzdGVtUmVjZWlwdFJlc3VsdC5l
cnJvcikpOwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0IGluYm91bmRNZXNzYWdlID0gc2FuaXRpemVk
TWVzc2FnZVJlc3VsdC5tZXNzYWdlOwoJCWNvbnN0IHN5c3RlbUlucHV0UHJvdmVuYW5jZSA9IG5v
cm1hbGl6ZUlucHV0UHJvdmVuYW5jZShwLnN5c3RlbUlucHV0UHJvdmVuYW5jZSk7CgkJY29uc3Qg
c3lzdGVtUHJvdmVuYW5jZVJlY2VpcHQgPSBzeXN0ZW1SZWNlaXB0UmVzdWx0LnJlY2VpcHQ7CgkJ
Y29uc3Qgc3RvcENvbW1hbmQgPSBpc0NoYXRTdG9wQ29tbWFuZFRleHQoaW5ib3VuZE1lc3NhZ2Up
OwoJCWNvbnN0IG5vcm1hbGl6ZWRBdHRhY2htZW50cyA9IG5vcm1hbGl6ZVJwY0F0dGFjaG1lbnRz
VG9DaGF0QXR0YWNobWVudHMocC5hdHRhY2htZW50cyk7CgkJaWYgKCFpbmJvdW5kTWVzc2FnZS50
cmltKCkgJiYgbm9ybWFsaXplZEF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMCkgewoJCQlyZXNwb25k
KGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsICJt
ZXNzYWdlIG9yIGF0dGFjaG1lbnQgcmVxdWlyZWQiKSk7CgkJCXJldHVybjsKCQl9CgkJbGV0IHBh
cnNlZE1lc3NhZ2UgPSBpbmJvdW5kTWVzc2FnZTsKCQlsZXQgcGFyc2VkSW1hZ2VzID0gW107CgkJ
aWYgKG5vcm1hbGl6ZWRBdHRhY2htZW50cy5sZW5ndGggPiAwKSB0cnkgewoJCQljb25zdCBwYXJz
ZWQgPSBhd2FpdCBwYXJzZU1lc3NhZ2VXaXRoQXR0YWNobWVudHMoaW5ib3VuZE1lc3NhZ2UsIG5v
cm1hbGl6ZWRBdHRhY2htZW50cywgewoJCQkJbWF4Qnl0ZXM6IDVlNiwKCQkJCWxvZzogY29udGV4
dC5sb2dHYXRld2F5CgkJCX0pOwoJCQlwYXJzZWRNZXNzYWdlID0gcGFyc2VkLm1lc3NhZ2U7CgkJ
CXBhcnNlZEltYWdlcyA9IHBhcnNlZC5pbWFnZXM7CgkJfSBjYXRjaCAoZXJyKSB7CgkJCXJlc3Bv
bmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwg
U3RyaW5nKGVycikpKTsKCQkJcmV0dXJuOwoJCX0KCQljb25zdCByYXdTZXNzaW9uS2V5ID0gcC5z
ZXNzaW9uS2V5OwoJCWNvbnN0IHsgY2ZnLCBlbnRyeSwgY2Fub25pY2FsS2V5OiBzZXNzaW9uS2V5
IH0gPSBsb2FkU2Vzc2lvbkVudHJ5KHJhd1Nlc3Npb25LZXkpOwoJCWNvbnN0IHRpbWVvdXRNcyA9
IHJlc29sdmVBZ2VudFRpbWVvdXRNcyh7CgkJCWNmZywKCQkJb3ZlcnJpZGVNczogcC50aW1lb3V0
TXMKCQl9KTsKCQljb25zdCBub3cgPSBEYXRlLm5vdygpOwoJCWNvbnN0IGNsaWVudFJ1bklkID0g
cC5pZGVtcG90ZW5jeUtleTsKCQlpZiAocmVzb2x2ZVNlbmRQb2xpY3koewoJCQljZmcsCgkJCWVu
dHJ5LAoJCQlzZXNzaW9uS2V5LAoJCQljaGFubmVsOiBlbnRyeT8uY2hhbm5lbCwKCQkJY2hhdFR5
cGU6IGVudHJ5Py5jaGF0VHlwZQoJCX0pID09PSAiZGVueSIpIHsKCQkJcmVzcG9uZChmYWxzZSwg
dm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCAic2VuZCBibG9j
a2VkIGJ5IHNlc3Npb24gcG9saWN5IikpOwoJCQlyZXR1cm47CgkJfQoJCWlmIChzdG9wQ29tbWFu
ZCkgewoJCQljb25zdCByZXMgPSBhYm9ydENoYXRSdW5zRm9yU2Vzc2lvbktleVdpdGhQYXJ0aWFs
cyh7CgkJCQljb250ZXh0LAoJCQkJb3BzOiBjcmVhdGVDaGF0QWJvcnRPcHMoY29udGV4dCksCgkJ
CQlzZXNzaW9uS2V5OiByYXdTZXNzaW9uS2V5LAoJCQkJYWJvcnRPcmlnaW46ICJzdG9wLWNvbW1h
bmQiLAoJCQkJc3RvcFJlYXNvbjogInN0b3AiLAoJCQkJcmVxdWVzdGVyOiByZXNvbHZlQ2hhdEFi
b3J0UmVxdWVzdGVyKGNsaWVudCkKCQkJfSk7CgkJCWlmIChyZXMudW5hdXRob3JpemVkKSB7CgkJ
CQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JF
UVVFU1QsICJ1bmF1dGhvcml6ZWQiKSk7CgkJCQlyZXR1cm47CgkJCX0KCQkJcmVzcG9uZCh0cnVl
LCB7CgkJCQlvazogdHJ1ZSwKCQkJCWFib3J0ZWQ6IHJlcy5hYm9ydGVkLAoJCQkJcnVuSWRzOiBy
ZXMucnVuSWRzCgkJCX0pOwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0IGNhY2hlZCA9IGNvbnRleHQu
ZGVkdXBlLmdldChgY2hhdDoke2NsaWVudFJ1bklkfWApOwoJCWlmIChjYWNoZWQpIHsKCQkJcmVz
cG9uZChjYWNoZWQub2ssIGNhY2hlZC5wYXlsb2FkLCBjYWNoZWQuZXJyb3IsIHsgY2FjaGVkOiB0
cnVlIH0pOwoJCQlyZXR1cm47CgkJfQoJCWlmIChjb250ZXh0LmNoYXRBYm9ydENvbnRyb2xsZXJz
LmdldChjbGllbnRSdW5JZCkpIHsKCQkJcmVzcG9uZCh0cnVlLCB7CgkJCQlydW5JZDogY2xpZW50
UnVuSWQsCgkJCQlzdGF0dXM6ICJpbl9mbGlnaHQiCgkJCX0sIHZvaWQgMCwgewoJCQkJY2FjaGVk
OiB0cnVlLAoJCQkJcnVuSWQ6IGNsaWVudFJ1bklkCgkJCX0pOwoJCQlyZXR1cm47CgkJfQoJCXRy
eSB7CgkJCWNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTsKCQkJ
Y29udGV4dC5jaGF0QWJvcnRDb250cm9sbGVycy5zZXQoY2xpZW50UnVuSWQsIHsKCQkJCWNvbnRy
b2xsZXI6IGFib3J0Q29udHJvbGxlciwKCQkJCXNlc3Npb25JZDogZW50cnk/LnNlc3Npb25JZCA/
PyBjbGllbnRSdW5JZCwKCQkJCXNlc3Npb25LZXk6IHJhd1Nlc3Npb25LZXksCgkJCQlzdGFydGVk
QXRNczogbm93LAoJCQkJZXhwaXJlc0F0TXM6IHJlc29sdmVDaGF0UnVuRXhwaXJlc0F0TXMoewoJ
CQkJCW5vdywKCQkJCQl0aW1lb3V0TXMKCQkJCX0pLAoJCQkJb3duZXJDb25uSWQ6IG5vcm1hbGl6
ZU9wdGlvbmFsVGV4dChjbGllbnQ/LmNvbm5JZCksCgkJCQlvd25lckRldmljZUlkOiBub3JtYWxp
emVPcHRpb25hbFRleHQoY2xpZW50Py5jb25uZWN0Py5kZXZpY2U/LmlkKQoJCQl9KTsKCQkJcmVz
cG9uZCh0cnVlLCB7CgkJCQlydW5JZDogY2xpZW50UnVuSWQsCgkJCQlzdGF0dXM6ICJzdGFydGVk
IgoJCQl9LCB2b2lkIDAsIHsgcnVuSWQ6IGNsaWVudFJ1bklkIH0pOwoJCQljb25zdCB0cmltbWVk
TWVzc2FnZSA9IHBhcnNlZE1lc3NhZ2UudHJpbSgpOwoJCQljb25zdCBjb21tYW5kQm9keSA9IEJv
b2xlYW4ocC50aGlua2luZyAmJiB0cmltbWVkTWVzc2FnZSAmJiAhdHJpbW1lZE1lc3NhZ2Uuc3Rh
cnRzV2l0aCgiLyIpKSA/IGAvdGhpbmsgJHtwLnRoaW5raW5nfSAke3BhcnNlZE1lc3NhZ2V9YCA6
IHBhcnNlZE1lc3NhZ2U7CgkJCWNvbnN0IG1lc3NhZ2VGb3JBZ2VudCA9IHN5c3RlbVByb3ZlbmFu
Y2VSZWNlaXB0ID8gW3N5c3RlbVByb3ZlbmFuY2VSZWNlaXB0LCBwYXJzZWRNZXNzYWdlXS5maWx0
ZXIoQm9vbGVhbikuam9pbigiXG5cbiIpIDogcGFyc2VkTWVzc2FnZTsKCQkJY29uc3QgY2xpZW50
SW5mbyA9IGNsaWVudD8uY29ubmVjdD8uY2xpZW50OwoJCQljb25zdCB7IG9yaWdpbmF0aW5nQ2hh
bm5lbCwgb3JpZ2luYXRpbmdUbywgYWNjb3VudElkLCBtZXNzYWdlVGhyZWFkSWQsIGV4cGxpY2l0
RGVsaXZlclJvdXRlIH0gPSByZXNvbHZlQ2hhdFNlbmRPcmlnaW5hdGluZ1JvdXRlKHsKCQkJCWNs
aWVudDogY2xpZW50SW5mbywKCQkJCWRlbGl2ZXI6IHAuZGVsaXZlciwKCQkJCWVudHJ5LAoJCQkJ
aGFzQ29ubmVjdGVkQ2xpZW50OiBjbGllbnQ/LmNvbm5lY3QgIT09IHZvaWQgMCwKCQkJCW1haW5L
ZXk6IGNmZy5zZXNzaW9uPy5tYWluS2V5LAoJCQkJc2Vzc2lvbktleQoJCQl9KTsKCQkJY29uc3Qg
Y3R4ID0gewoJCQkJQm9keTogbWVzc2FnZUZvckFnZW50LAoJCQkJQm9keUZvckFnZW50OiBpbmpl
Y3RUaW1lc3RhbXAobWVzc2FnZUZvckFnZW50LCB0aW1lc3RhbXBPcHRzRnJvbUNvbmZpZyhjZmcp
KSwKCQkJCUJvZHlGb3JDb21tYW5kczogY29tbWFuZEJvZHksCgkJCQlSYXdCb2R5OiBwYXJzZWRN
ZXNzYWdlLAoJCQkJQ29tbWFuZEJvZHk6IGNvbW1hbmRCb2R5LAoJCQkJSW5wdXRQcm92ZW5hbmNl
OiBzeXN0ZW1JbnB1dFByb3ZlbmFuY2UsCgkJCQlTZXNzaW9uS2V5OiBzZXNzaW9uS2V5LAoJCQkJ
UHJvdmlkZXI6IElOVEVSTkFMX01FU1NBR0VfQ0hBTk5FTCwKCQkJCVN1cmZhY2U6IElOVEVSTkFM
X01FU1NBR0VfQ0hBTk5FTCwKCQkJCU9yaWdpbmF0aW5nQ2hhbm5lbDogb3JpZ2luYXRpbmdDaGFu
bmVsLAoJCQkJT3JpZ2luYXRpbmdUbzogb3JpZ2luYXRpbmdUbywKCQkJCUV4cGxpY2l0RGVsaXZl
clJvdXRlOiBleHBsaWNpdERlbGl2ZXJSb3V0ZSwKCQkJCUFjY291bnRJZDogYWNjb3VudElkLAoJ
CQkJTWVzc2FnZVRocmVhZElkOiBtZXNzYWdlVGhyZWFkSWQsCgkJCQlDaGF0VHlwZTogImRpcmVj
dCIsCgkJCQlDb21tYW5kQXV0aG9yaXplZDogdHJ1ZSwKCQkJCU1lc3NhZ2VTaWQ6IGNsaWVudFJ1
bklkLAoJCQkJU2VuZGVySWQ6IGNsaWVudEluZm8/LmlkLAoJCQkJU2VuZGVyTmFtZTogY2xpZW50
SW5mbz8uZGlzcGxheU5hbWUsCgkJCQlTZW5kZXJVc2VybmFtZTogY2xpZW50SW5mbz8uZGlzcGxh
eU5hbWUsCgkJCQlHYXRld2F5Q2xpZW50U2NvcGVzOiBjbGllbnQ/LmNvbm5lY3Q/LnNjb3BlcwoJ
CQl9OwoJCQljb25zdCBhZ2VudElkID0gcmVzb2x2ZVNlc3Npb25BZ2VudElkKHsKCQkJCXNlc3Np
b25LZXksCgkJCQljb25maWc6IGNmZwoJCQl9KTsKCQkJY29uc3QgeyBvbk1vZGVsU2VsZWN0ZWQs
IC4uLnByZWZpeE9wdGlvbnMgfSA9IGNyZWF0ZVJlcGx5UHJlZml4T3B0aW9ucyh7CgkJCQljZmcs
CgkJCQlhZ2VudElkLAoJCQkJY2hhbm5lbDogSU5URVJOQUxfTUVTU0FHRV9DSEFOTkVMCgkJCX0p
OwoJCQljb25zdCBmaW5hbFJlcGx5UGFydHMgPSBbXTsKCQkJY29uc3QgZGlzcGF0Y2hlciA9IGNy
ZWF0ZVJlcGx5RGlzcGF0Y2hlcih7CgkJCQkuLi5wcmVmaXhPcHRpb25zLAoJCQkJb25FcnJvcjog
KGVycikgPT4gewoJCQkJCWNvbnRleHQubG9nR2F0ZXdheS53YXJuKGB3ZWJjaGF0IGRpc3BhdGNo
IGZhaWxlZDogJHtmb3JtYXRGb3JMb2coZXJyKX1gKTsKCQkJCX0sCgkJCQlkZWxpdmVyOiBhc3lu
YyAocGF5bG9hZCwgaW5mbykgPT4gewoJCQkJCWlmIChpbmZvLmtpbmQgIT09ICJmaW5hbCIpIHJl
dHVybjsKCQkJCQljb25zdCB0ZXh0ID0gcGF5bG9hZC50ZXh0Py50cmltKCkgPz8gIiI7CgkJCQkJ
aWYgKCF0ZXh0KSByZXR1cm47CgkJCQkJZmluYWxSZXBseVBhcnRzLnB1c2godGV4dCk7CgkJCQl9
CgkJCX0pOwoJCQlsZXQgYWdlbnRSdW5TdGFydGVkID0gZmFsc2U7CgkJCXRyeSB7IGxvZ1RvUHl0
aG9uKCJpbmJvdW5kIiwgeyBhcmdzOiBhcmd1bWVudHMgfSk7IH0gY2F0Y2gge30KZGlzcGF0Y2hJ
bmJvdW5kTWVzc2FnZSh7CgkJCQljdHgsCgkJCQljZmcsCgkJCQlkaXNwYXRjaGVyLAoJCQkJcmVw
bHlPcHRpb25zOiB7CgkJCQkJcnVuSWQ6IGNsaWVudFJ1bklkLAoJCQkJCWFib3J0U2lnbmFsOiBh
Ym9ydENvbnRyb2xsZXIuc2lnbmFsLAoJCQkJCWltYWdlczogcGFyc2VkSW1hZ2VzLmxlbmd0aCA+
IDAgPyBwYXJzZWRJbWFnZXMgOiB2b2lkIDAsCgkJCQkJb25BZ2VudFJ1blN0YXJ0OiAocnVuSWQp
ID0+IHsKCQkJCQkJYWdlbnRSdW5TdGFydGVkID0gdHJ1ZTsKCQkJCQkJY29uc3QgY29ubklkID0g
dHlwZW9mIGNsaWVudD8uY29ubklkID09PSAic3RyaW5nIiA/IGNsaWVudC5jb25uSWQgOiB2b2lk
IDA7CgkJCQkJCWNvbnN0IHdhbnRzVG9vbEV2ZW50cyA9IGhhc0dhdGV3YXlDbGllbnRDYXAoY2xp
ZW50Py5jb25uZWN0Py5jYXBzLCBHQVRFV0FZX0NMSUVOVF9DQVBTLlRPT0xfRVZFTlRTKTsKCQkJ
CQkJaWYgKGNvbm5JZCAmJiB3YW50c1Rvb2xFdmVudHMpIHsKCQkJCQkJCWNvbnRleHQucmVnaXN0
ZXJUb29sRXZlbnRSZWNpcGllbnQocnVuSWQsIGNvbm5JZCk7CgkJCQkJCQlmb3IgKGNvbnN0IFth
Y3RpdmVSdW5JZCwgYWN0aXZlXSBvZiBjb250ZXh0LmNoYXRBYm9ydENvbnRyb2xsZXJzKSBpZiAo
YWN0aXZlUnVuSWQgIT09IHJ1bklkICYmIGFjdGl2ZS5zZXNzaW9uS2V5ID09PSBwLnNlc3Npb25L
ZXkpIGNvbnRleHQucmVnaXN0ZXJUb29sRXZlbnRSZWNpcGllbnQoYWN0aXZlUnVuSWQsIGNvbm5J
ZCk7CgkJCQkJCX0KCQkJCQl9LAoJCQkJCW9uTW9kZWxTZWxlY3RlZAoJCQkJfQoJCQl9KS50aGVu
KCgpID0+IHsKCQkJCWlmICghYWdlbnRSdW5TdGFydGVkKSB7CgkJCQkJY29uc3QgY29tYmluZWRS
ZXBseSA9IGZpbmFsUmVwbHlQYXJ0cy5tYXAoKHBhcnQpID0+IHBhcnQudHJpbSgpKS5maWx0ZXIo
Qm9vbGVhbikuam9pbigiXG5cbiIpLnRyaW0oKTsKCQkJCQlsZXQgbWVzc2FnZTsKCQkJCQlpZiAo
Y29tYmluZWRSZXBseSkgewoJCQkJCQljb25zdCB7IHN0b3JlUGF0aDogbGF0ZXN0U3RvcmVQYXRo
LCBlbnRyeTogbGF0ZXN0RW50cnkgfSA9IGxvYWRTZXNzaW9uRW50cnkoc2Vzc2lvbktleSk7CgkJ
CQkJCWNvbnN0IGFwcGVuZGVkID0gYXBwZW5kQXNzaXN0YW50VHJhbnNjcmlwdE1lc3NhZ2UoewoJ
CQkJCQkJbWVzc2FnZTogY29tYmluZWRSZXBseSwKCQkJCQkJCXNlc3Npb25JZDogbGF0ZXN0RW50
cnk/LnNlc3Npb25JZCA/PyBlbnRyeT8uc2Vzc2lvbklkID8/IGNsaWVudFJ1bklkLAoJCQkJCQkJ
c3RvcmVQYXRoOiBsYXRlc3RTdG9yZVBhdGgsCgkJCQkJCQlzZXNzaW9uRmlsZTogbGF0ZXN0RW50
cnk/LnNlc3Npb25GaWxlLAoJCQkJCQkJYWdlbnRJZCwKCQkJCQkJCWNyZWF0ZUlmTWlzc2luZzog
dHJ1ZQoJCQkJCQl9KTsKCQkJCQkJaWYgKGFwcGVuZGVkLm9rKSBtZXNzYWdlID0gYXBwZW5kZWQu
bWVzc2FnZTsKCQkJCQkJZWxzZSB7CgkJCQkJCQljb250ZXh0LmxvZ0dhdGV3YXkud2Fybihgd2Vi
Y2hhdCB0cmFuc2NyaXB0IGFwcGVuZCBmYWlsZWQ6ICR7YXBwZW5kZWQuZXJyb3IgPz8gInVua25v
d24gZXJyb3IifWApOwoJCQkJCQkJbWVzc2FnZSA9IHsKCQkJCQkJCQlyb2xlOiAiYXNzaXN0YW50
IiwKCQkJCQkJCQljb250ZW50OiBbewoJCQkJCQkJCQl0eXBlOiAidGV4dCIsCgkJCQkJCQkJCXRl
eHQ6IGNvbWJpbmVkUmVwbHkKCQkJCQkJCQl9XSwKCQkJCQkJCQl0aW1lc3RhbXA6IERhdGUubm93
KCksCgkJCQkJCQkJc3RvcFJlYXNvbjogInN0b3AiLAoJCQkJCQkJCXVzYWdlOiB7CgkJCQkJCQkJ
CWlucHV0OiAwLAoJCQkJCQkJCQlvdXRwdXQ6IDAsCgkJCQkJCQkJCXRvdGFsVG9rZW5zOiAwCgkJ
CQkJCQkJfQoJCQkJCQkJfTsKCQkJCQkJfQoJCQkJCX0KCQkJCQlicm9hZGNhc3RDaGF0RmluYWwo
ewoJCQkJCQljb250ZXh0LAoJCQkJCQlydW5JZDogY2xpZW50UnVuSWQsCgkJCQkJCXNlc3Npb25L
ZXk6IHJhd1Nlc3Npb25LZXksCgkJCQkJCW1lc3NhZ2UKCQkJCQl9KTsKCQkJCX0KCQkJCXNldEdh
dGV3YXlEZWR1cGVFbnRyeSh7CgkJCQkJZGVkdXBlOiBjb250ZXh0LmRlZHVwZSwKCQkJCQlrZXk6
IGBjaGF0OiR7Y2xpZW50UnVuSWR9YCwKCQkJCQllbnRyeTogewoJCQkJCQl0czogRGF0ZS5ub3co
KSwKCQkJCQkJb2s6IHRydWUsCgkJCQkJCXBheWxvYWQ6IHsKCQkJCQkJCXJ1bklkOiBjbGllbnRS
dW5JZCwKCQkJCQkJCXN0YXR1czogIm9rIgoJCQkJCQl9CgkJCQkJfQoJCQkJfSk7CgkJCX0pLmNh
dGNoKChlcnIpID0+IHsKCQkJCWNvbnN0IGVycm9yID0gZXJyb3JTaGFwZShFcnJvckNvZGVzLlVO
QVZBSUxBQkxFLCBTdHJpbmcoZXJyKSk7CgkJCQlzZXRHYXRld2F5RGVkdXBlRW50cnkoewoJCQkJ
CWRlZHVwZTogY29udGV4dC5kZWR1cGUsCgkJCQkJa2V5OiBgY2hhdDoke2NsaWVudFJ1bklkfWAs
CgkJCQkJZW50cnk6IHsKCQkJCQkJdHM6IERhdGUubm93KCksCgkJCQkJCW9rOiBmYWxzZSwKCQkJ
CQkJcGF5bG9hZDogewoJCQkJCQkJcnVuSWQ6IGNsaWVudFJ1bklkLAoJCQkJCQkJc3RhdHVzOiAi
ZXJyb3IiLAoJCQkJCQkJc3VtbWFyeTogU3RyaW5nKGVycikKCQkJCQkJfSwKCQkJCQkJZXJyb3IK
CQkJCQl9CgkJCQl9KTsKCQkJCWJyb2FkY2FzdENoYXRFcnJvcih7CgkJCQkJY29udGV4dCwKCQkJ
CQlydW5JZDogY2xpZW50UnVuSWQsCgkJCQkJc2Vzc2lvbktleTogcmF3U2Vzc2lvbktleSwKCQkJ
CQllcnJvck1lc3NhZ2U6IFN0cmluZyhlcnIpCgkJCQl9KTsKCQkJfSkuZmluYWxseSgoKSA9PiB7
CgkJCQljb250ZXh0LmNoYXRBYm9ydENvbnRyb2xsZXJzLmRlbGV0ZShjbGllbnRSdW5JZCk7CgkJ
CX0pOwoJCX0gY2F0Y2ggKGVycikgewoJCQljb25zdCBlcnJvciA9IGVycm9yU2hhcGUoRXJyb3JD
b2Rlcy5VTkFWQUlMQUJMRSwgU3RyaW5nKGVycikpOwoJCQljb25zdCBwYXlsb2FkID0gewoJCQkJ
cnVuSWQ6IGNsaWVudFJ1bklkLAoJCQkJc3RhdHVzOiAiZXJyb3IiLAoJCQkJc3VtbWFyeTogU3Ry
aW5nKGVycikKCQkJfTsKCQkJc2V0R2F0ZXdheURlZHVwZUVudHJ5KHsKCQkJCWRlZHVwZTogY29u
dGV4dC5kZWR1cGUsCgkJCQlrZXk6IGBjaGF0OiR7Y2xpZW50UnVuSWR9YCwKCQkJCWVudHJ5OiB7
CgkJCQkJdHM6IERhdGUubm93KCksCgkJCQkJb2s6IGZhbHNlLAoJCQkJCXBheWxvYWQsCgkJCQkJ
ZXJyb3IKCQkJCX0KCQkJfSk7CgkJCXJlc3BvbmQoZmFsc2UsIHBheWxvYWQsIGVycm9yLCB7CgkJ
CQlydW5JZDogY2xpZW50UnVuSWQsCgkJCQllcnJvcjogZm9ybWF0Rm9yTG9nKGVycikKCQkJfSk7
CgkJfQoJfSwKCSJjaGF0LmluamVjdCI6IGFzeW5jICh7IHBhcmFtcywgcmVzcG9uZCwgY29udGV4
dCB9KSA9PiB7CgkJaWYgKCF2YWxpZGF0ZUNoYXRJbmplY3RQYXJhbXMocGFyYW1zKSkgewoJCQly
ZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVF
U1QsIGBpbnZhbGlkIGNoYXQuaW5qZWN0IHBhcmFtczogJHtmb3JtYXRWYWxpZGF0aW9uRXJyb3Jz
KHZhbGlkYXRlQ2hhdEluamVjdFBhcmFtcy5lcnJvcnMpfWApKTsKCQkJcmV0dXJuOwoJCX0KCQlj
b25zdCBwID0gcGFyYW1zOwoJCWNvbnN0IHJhd1Nlc3Npb25LZXkgPSBwLnNlc3Npb25LZXk7CgkJ
Y29uc3QgeyBjZmcsIHN0b3JlUGF0aCwgZW50cnkgfSA9IGxvYWRTZXNzaW9uRW50cnkocmF3U2Vz
c2lvbktleSk7CgkJY29uc3Qgc2Vzc2lvbklkID0gZW50cnk/LnNlc3Npb25JZDsKCQlpZiAoIXNl
c3Npb25JZCB8fCAhc3RvcmVQYXRoKSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JT
aGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgInNlc3Npb24gbm90IGZvdW5kIikpOwoJ
CQlyZXR1cm47CgkJfQoJCWNvbnN0IGFwcGVuZGVkID0gYXBwZW5kQXNzaXN0YW50VHJhbnNjcmlw
dE1lc3NhZ2UoewoJCQltZXNzYWdlOiBwLm1lc3NhZ2UsCgkJCWxhYmVsOiBwLmxhYmVsLAoJCQlz
ZXNzaW9uSWQsCgkJCXN0b3JlUGF0aCwKCQkJc2Vzc2lvbkZpbGU6IGVudHJ5Py5zZXNzaW9uRmls
ZSwKCQkJYWdlbnRJZDogcmVzb2x2ZVNlc3Npb25BZ2VudElkKHsKCQkJCXNlc3Npb25LZXk6IHJh
d1Nlc3Npb25LZXksCgkJCQljb25maWc6IGNmZwoJCQl9KSwKCQkJY3JlYXRlSWZNaXNzaW5nOiB0
cnVlCgkJfSk7CgkJaWYgKCFhcHBlbmRlZC5vayB8fCAhYXBwZW5kZWQubWVzc2FnZUlkIHx8ICFh
cHBlbmRlZC5tZXNzYWdlKSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShF
cnJvckNvZGVzLlVOQVZBSUxBQkxFLCBgZmFpbGVkIHRvIHdyaXRlIHRyYW5zY3JpcHQ6ICR7YXBw
ZW5kZWQuZXJyb3IgPz8gInVua25vd24gZXJyb3IifWApKTsKCQkJcmV0dXJuOwoJCX0KCQljb25z
dCBjaGF0UGF5bG9hZCA9IHsKCQkJcnVuSWQ6IGBpbmplY3QtJHthcHBlbmRlZC5tZXNzYWdlSWR9
YCwKCQkJc2Vzc2lvbktleTogcmF3U2Vzc2lvbktleSwKCQkJc2VxOiAwLAoJCQlzdGF0ZTogImZp
bmFsIiwKCQkJbWVzc2FnZTogc3RyaXBJbmxpbmVEaXJlY3RpdmVUYWdzRnJvbU1lc3NhZ2VGb3JE
aXNwbGF5KHN0cmlwRW52ZWxvcGVGcm9tTWVzc2FnZShhcHBlbmRlZC5tZXNzYWdlKSkKCQl9OwoJ
CWNvbnRleHQuYnJvYWRjYXN0KCJjaGF0IiwgY2hhdFBheWxvYWQpOwoJCWNvbnRleHQubm9kZVNl
bmRUb1Nlc3Npb24ocmF3U2Vzc2lvbktleSwgImNoYXQiLCBjaGF0UGF5bG9hZCk7CgkJcmVzcG9u
ZCh0cnVlLCB7CgkJCW9rOiB0cnVlLAoJCQltZXNzYWdlSWQ6IGFwcGVuZGVkLm1lc3NhZ2VJZAoJ
CX0pOwoJfQp9OwovLyNlbmRyZWdpb24KLy8jcmVnaW9uIHNyYy9jb25maWcvc2NoZW1hLnRzCmNv
bnN0IEZPUkJJRERFTl9MT09LVVBfU0VHTUVOVFMgPSBuZXcgU2V0KFsKCSJfX3Byb3RvX18iLAoJ
InByb3RvdHlwZSIsCgkiY29uc3RydWN0b3IiCl0pOwpjb25zdCBMT09LVVBfU0NIRU1BX1NUUklO
R19LRVlTID0gbmV3IFNldChbCgkiJGlkIiwKCSIkc2NoZW1hIiwKCSJ0aXRsZSIsCgkiZGVzY3Jp
cHRpb24iLAoJImZvcm1hdCIsCgkicGF0dGVybiIsCgkiY29udGVudEVuY29kaW5nIiwKCSJjb250
ZW50TWVkaWFUeXBlIgpdKTsKY29uc3QgTE9PS1VQX1NDSEVNQV9OVU1CRVJfS0VZUyA9IG5ldyBT
ZXQoWwoJIm1pbmltdW0iLAoJIm1heGltdW0iLAoJImV4Y2x1c2l2ZU1pbmltdW0iLAoJImV4Y2x1
c2l2ZU1heGltdW0iLAoJIm11bHRpcGxlT2YiLAoJIm1pbkxlbmd0aCIsCgkibWF4TGVuZ3RoIiwK
CSJtaW5JdGVtcyIsCgkibWF4SXRlbXMiLAoJIm1pblByb3BlcnRpZXMiLAoJIm1heFByb3BlcnRp
ZXMiCl0pOwpjb25zdCBMT09LVVBfU0NIRU1BX0JPT0xFQU5fS0VZUyA9IG5ldyBTZXQoWwoJImFk
ZGl0aW9uYWxQcm9wZXJ0aWVzIiwKCSJ1bmlxdWVJdGVtcyIsCgkiZGVwcmVjYXRlZCIsCgkicmVh
ZE9ubHkiLAoJIndyaXRlT25seSIKXSk7CmNvbnN0IE1BWF9MT09LVVBfUEFUSF9TRUdNRU5UUyA9
IDMyOwpmdW5jdGlvbiBjbG9uZVNjaGVtYSh2YWx1ZSkgewoJaWYgKHR5cGVvZiBzdHJ1Y3R1cmVk
Q2xvbmUgPT09ICJmdW5jdGlvbiIpIHJldHVybiBzdHJ1Y3R1cmVkQ2xvbmUodmFsdWUpOwoJcmV0
dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWUpKTsKfQpmdW5jdGlvbiBhc1NjaGVt
YU9iamVjdCh2YWx1ZSkgewoJaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICJvYmplY3Qi
IHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gbnVsbDsKCXJldHVybiB2YWx1ZTsKfQpm
dW5jdGlvbiBpc09iamVjdFNjaGVtYShzY2hlbWEpIHsKCWNvbnN0IHR5cGUgPSBzY2hlbWEudHlw
ZTsKCWlmICh0eXBlID09PSAib2JqZWN0IikgcmV0dXJuIHRydWU7CglpZiAoQXJyYXkuaXNBcnJh
eSh0eXBlKSAmJiB0eXBlLmluY2x1ZGVzKCJvYmplY3QiKSkgcmV0dXJuIHRydWU7CglyZXR1cm4g
Qm9vbGVhbihzY2hlbWEucHJvcGVydGllcyB8fCBzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMp
Owp9CmZ1bmN0aW9uIG1lcmdlT2JqZWN0U2NoZW1hKGJhc2UsIGV4dGVuc2lvbikgewoJY29uc3Qg
bWVyZ2VkUmVxdWlyZWQgPSBuZXcgU2V0KFsuLi5iYXNlLnJlcXVpcmVkID8/IFtdLCAuLi5leHRl
bnNpb24ucmVxdWlyZWQgPz8gW11dKTsKCWNvbnN0IG1lcmdlZCA9IHsKCQkuLi5iYXNlLAoJCS4u
LmV4dGVuc2lvbiwKCQlwcm9wZXJ0aWVzOiB7CgkJCS4uLmJhc2UucHJvcGVydGllcywKCQkJLi4u
ZXh0ZW5zaW9uLnByb3BlcnRpZXMKCQl9Cgl9OwoJaWYgKG1lcmdlZFJlcXVpcmVkLnNpemUgPiAw
KSBtZXJnZWQucmVxdWlyZWQgPSBBcnJheS5mcm9tKG1lcmdlZFJlcXVpcmVkKTsKCWNvbnN0IGFk
ZGl0aW9uYWwgPSBleHRlbnNpb24uYWRkaXRpb25hbFByb3BlcnRpZXMgPz8gYmFzZS5hZGRpdGlv
bmFsUHJvcGVydGllczsKCWlmIChhZGRpdGlvbmFsICE9PSB2b2lkIDApIG1lcmdlZC5hZGRpdGlv
bmFsUHJvcGVydGllcyA9IGFkZGl0aW9uYWw7CglyZXR1cm4gbWVyZ2VkOwp9CmZ1bmN0aW9uIGNv
bGxlY3RFeHRlbnNpb25IaW50S2V5cyhoaW50cywgcGx1Z2lucywgY2hhbm5lbHMpIHsKCWNvbnN0
IHBsdWdpblByZWZpeGVzID0gcGx1Z2lucy5tYXAoKHBsdWdpbikgPT4gcGx1Z2luLmlkLnRyaW0o
KSkuZmlsdGVyKEJvb2xlYW4pLm1hcCgoaWQpID0+IGBwbHVnaW5zLmVudHJpZXMuJHtpZH1gKTsK
CWNvbnN0IGNoYW5uZWxQcmVmaXhlcyA9IGNoYW5uZWxzLm1hcCgoY2hhbm5lbCkgPT4gY2hhbm5l
bC5pZC50cmltKCkpLmZpbHRlcihCb29sZWFuKS5tYXAoKGlkKSA9PiBgY2hhbm5lbHMuJHtpZH1g
KTsKCWNvbnN0IHByZWZpeGVzID0gWy4uLnBsdWdpblByZWZpeGVzLCAuLi5jaGFubmVsUHJlZml4
ZXNdOwoJcmV0dXJuIG5ldyBTZXQoT2JqZWN0LmtleXMoaGludHMpLmZpbHRlcigoa2V5KSA9PiBw
cmVmaXhlcy5zb21lKChwcmVmaXgpID0+IGtleSA9PT0gcHJlZml4IHx8IGtleS5zdGFydHNXaXRo
KGAke3ByZWZpeH0uYCkpKSk7Cn0KZnVuY3Rpb24gYXBwbHlQbHVnaW5IaW50cyhoaW50cywgcGx1
Z2lucykgewoJY29uc3QgbmV4dCA9IHsgLi4uaGludHMgfTsKCWZvciAoY29uc3QgcGx1Z2luIG9m
IHBsdWdpbnMpIHsKCQljb25zdCBpZCA9IHBsdWdpbi5pZC50cmltKCk7CgkJaWYgKCFpZCkgY29u
dGludWU7CgkJY29uc3QgbmFtZSA9IChwbHVnaW4ubmFtZSA/PyBpZCkudHJpbSgpIHx8IGlkOwoJ
CWNvbnN0IGJhc2VQYXRoID0gYHBsdWdpbnMuZW50cmllcy4ke2lkfWA7CgkJbmV4dFtiYXNlUGF0
aF0gPSB7CgkJCS4uLm5leHRbYmFzZVBhdGhdLAoJCQlsYWJlbDogbmFtZSwKCQkJaGVscDogcGx1
Z2luLmRlc2NyaXB0aW9uID8gYCR7cGx1Z2luLmRlc2NyaXB0aW9ufSAocGx1Z2luOiAke2lkfSlg
IDogYFBsdWdpbiBlbnRyeSBmb3IgJHtpZH0uYAoJCX07CgkJbmV4dFtgJHtiYXNlUGF0aH0uZW5h
YmxlZGBdID0gewoJCQkuLi5uZXh0W2Ake2Jhc2VQYXRofS5lbmFibGVkYF0sCgkJCWxhYmVsOiBg
RW5hYmxlICR7bmFtZX1gCgkJfTsKCQluZXh0W2Ake2Jhc2VQYXRofS5jb25maWdgXSA9IHsKCQkJ
Li4ubmV4dFtgJHtiYXNlUGF0aH0uY29uZmlnYF0sCgkJCWxhYmVsOiBgJHtuYW1lfSBDb25maWdg
LAoJCQloZWxwOiBgUGx1Z2luLWRlZmluZWQgY29uZmlnIHBheWxvYWQgZm9yICR7aWR9LmAKCQl9
OwoJCWNvbnN0IHVpSGludHMgPSBwbHVnaW4uY29uZmlnVWlIaW50cyA/PyB7fTsKCQlmb3IgKGNv
bnN0IFtyZWxQYXRoUmF3LCBoaW50XSBvZiBPYmplY3QuZW50cmllcyh1aUhpbnRzKSkgewoJCQlj
b25zdCByZWxQYXRoID0gcmVsUGF0aFJhdy50cmltKCkucmVwbGFjZSgvXlwuLywgIiIpOwoJCQlp
ZiAoIXJlbFBhdGgpIGNvbnRpbnVlOwoJCQljb25zdCBrZXkgPSBgJHtiYXNlUGF0aH0uY29uZmln
LiR7cmVsUGF0aH1gOwoJCQluZXh0W2tleV0gPSB7CgkJCQkuLi5uZXh0W2tleV0sCgkJCQkuLi5o
aW50CgkJCX07CgkJfQoJfQoJcmV0dXJuIG5leHQ7Cn0KZnVuY3Rpb24gYXBwbHlDaGFubmVsSGlu
dHMoaGludHMsIGNoYW5uZWxzKSB7Cgljb25zdCBuZXh0ID0geyAuLi5oaW50cyB9OwoJZm9yIChj
b25zdCBjaGFubmVsIG9mIGNoYW5uZWxzKSB7CgkJY29uc3QgaWQgPSBjaGFubmVsLmlkLnRyaW0o
KTsKCQlpZiAoIWlkKSBjb250aW51ZTsKCQljb25zdCBiYXNlUGF0aCA9IGBjaGFubmVscy4ke2lk
fWA7CgkJY29uc3QgY3VycmVudCA9IG5leHRbYmFzZVBhdGhdID8/IHt9OwoJCWNvbnN0IGxhYmVs
ID0gY2hhbm5lbC5sYWJlbD8udHJpbSgpOwoJCWNvbnN0IGhlbHAgPSBjaGFubmVsLmRlc2NyaXB0
aW9uPy50cmltKCk7CgkJbmV4dFtiYXNlUGF0aF0gPSB7CgkJCS4uLmN1cnJlbnQsCgkJCS4uLmxh
YmVsID8geyBsYWJlbCB9IDoge30sCgkJCS4uLmhlbHAgPyB7IGhlbHAgfSA6IHt9CgkJfTsKCQlj
b25zdCB1aUhpbnRzID0gY2hhbm5lbC5jb25maWdVaUhpbnRzID8/IHt9OwoJCWZvciAoY29uc3Qg
W3JlbFBhdGhSYXcsIGhpbnRdIG9mIE9iamVjdC5lbnRyaWVzKHVpSGludHMpKSB7CgkJCWNvbnN0
IHJlbFBhdGggPSByZWxQYXRoUmF3LnRyaW0oKS5yZXBsYWNlKC9eXC4vLCAiIik7CgkJCWlmICgh
cmVsUGF0aCkgY29udGludWU7CgkJCWNvbnN0IGtleSA9IGAke2Jhc2VQYXRofS4ke3JlbFBhdGh9
YDsKCQkJbmV4dFtrZXldID0gewoJCQkJLi4ubmV4dFtrZXldLAoJCQkJLi4uaGludAoJCQl9OwoJ
CX0KCX0KCXJldHVybiBuZXh0Owp9CmZ1bmN0aW9uIGxpc3RIZWFydGJlYXRUYXJnZXRDaGFubmVs
cyhjaGFubmVscykgewoJY29uc3Qgc2VlbiA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7Cglj
b25zdCBvcmRlcmVkID0gW107Cglmb3IgKGNvbnN0IGlkIG9mIENIQU5ORUxfSURTKSB7CgkJY29u
c3Qgbm9ybWFsaXplZCA9IGlkLnRyaW0oKS50b0xvd2VyQ2FzZSgpOwoJCWlmICghbm9ybWFsaXpl
ZCB8fCBzZWVuLmhhcyhub3JtYWxpemVkKSkgY29udGludWU7CgkJc2Vlbi5hZGQobm9ybWFsaXpl
ZCk7CgkJb3JkZXJlZC5wdXNoKG5vcm1hbGl6ZWQpOwoJfQoJZm9yIChjb25zdCBjaGFubmVsIG9m
IGNoYW5uZWxzKSB7CgkJY29uc3Qgbm9ybWFsaXplZCA9IGNoYW5uZWwuaWQudHJpbSgpLnRvTG93
ZXJDYXNlKCk7CgkJaWYgKCFub3JtYWxpemVkIHx8IHNlZW4uaGFzKG5vcm1hbGl6ZWQpKSBjb250
aW51ZTsKCQlzZWVuLmFkZChub3JtYWxpemVkKTsKCQlvcmRlcmVkLnB1c2gobm9ybWFsaXplZCk7
Cgl9CglyZXR1cm4gb3JkZXJlZDsKfQpmdW5jdGlvbiBhcHBseUhlYXJ0YmVhdFRhcmdldEhpbnRz
KGhpbnRzLCBjaGFubmVscykgewoJY29uc3QgbmV4dCA9IHsgLi4uaGludHMgfTsKCWNvbnN0IGNo
YW5uZWxMaXN0ID0gbGlzdEhlYXJ0YmVhdFRhcmdldENoYW5uZWxzKGNoYW5uZWxzKTsKCWNvbnN0
IGhlbHAgPSBgRGVsaXZlcnkgdGFyZ2V0ICgibGFzdCIsICJub25lIiwgb3IgYSBjaGFubmVsIGlk
KS4ke2NoYW5uZWxMaXN0Lmxlbmd0aCA/IGAgS25vd24gY2hhbm5lbHM6ICR7Y2hhbm5lbExpc3Qu
am9pbigiLCAiKX0uYCA6ICIifWA7Cglmb3IgKGNvbnN0IHBhdGggb2YgWyJhZ2VudHMuZGVmYXVs
dHMuaGVhcnRiZWF0LnRhcmdldCIsICJhZ2VudHMubGlzdC4qLmhlYXJ0YmVhdC50YXJnZXQiXSkg
ewoJCWNvbnN0IGN1cnJlbnQgPSBuZXh0W3BhdGhdID8/IHt9OwoJCW5leHRbcGF0aF0gPSB7CgkJ
CS4uLmN1cnJlbnQsCgkJCWhlbHA6IGN1cnJlbnQuaGVscCA/PyBoZWxwLAoJCQlwbGFjZWhvbGRl
cjogY3VycmVudC5wbGFjZWhvbGRlciA/PyAibGFzdCIKCQl9OwoJfQoJcmV0dXJuIG5leHQ7Cn0K
ZnVuY3Rpb24gYXBwbHlQbHVnaW5TY2hlbWFzKHNjaGVtYSwgcGx1Z2lucykgewoJY29uc3QgbmV4
dCA9IGNsb25lU2NoZW1hKHNjaGVtYSk7Cgljb25zdCBlbnRyaWVzTm9kZSA9IGFzU2NoZW1hT2Jq
ZWN0KGFzU2NoZW1hT2JqZWN0KGFzU2NoZW1hT2JqZWN0KG5leHQpPy5wcm9wZXJ0aWVzPy5wbHVn
aW5zKT8ucHJvcGVydGllcz8uZW50cmllcyk7CglpZiAoIWVudHJpZXNOb2RlKSByZXR1cm4gbmV4
dDsKCWNvbnN0IGVudHJ5QmFzZSA9IGFzU2NoZW1hT2JqZWN0KGVudHJpZXNOb2RlLmFkZGl0aW9u
YWxQcm9wZXJ0aWVzKTsKCWNvbnN0IGVudHJ5UHJvcGVydGllcyA9IGVudHJpZXNOb2RlLnByb3Bl
cnRpZXMgPz8ge307CgllbnRyaWVzTm9kZS5wcm9wZXJ0aWVzID0gZW50cnlQcm9wZXJ0aWVzOwoJ
Zm9yIChjb25zdCBwbHVnaW4gb2YgcGx1Z2lucykgewoJCWlmICghcGx1Z2luLmNvbmZpZ1NjaGVt
YSkgY29udGludWU7CgkJY29uc3QgZW50cnlPYmplY3QgPSBhc1NjaGVtYU9iamVjdChlbnRyeUJh
c2UgPyBjbG9uZVNjaGVtYShlbnRyeUJhc2UpIDogeyB0eXBlOiAib2JqZWN0IiB9KSA/PyB7IHR5
cGU6ICJvYmplY3QiIH07CgkJY29uc3QgYmFzZUNvbmZpZ1NjaGVtYSA9IGFzU2NoZW1hT2JqZWN0
KGVudHJ5T2JqZWN0LnByb3BlcnRpZXM/LmNvbmZpZyk7CgkJY29uc3QgcGx1Z2luU2NoZW1hID0g
YXNTY2hlbWFPYmplY3QocGx1Z2luLmNvbmZpZ1NjaGVtYSk7CgkJY29uc3QgbmV4dENvbmZpZ1Nj
aGVtYSA9IGJhc2VDb25maWdTY2hlbWEgJiYgcGx1Z2luU2NoZW1hICYmIGlzT2JqZWN0U2NoZW1h
KGJhc2VDb25maWdTY2hlbWEpICYmIGlzT2JqZWN0U2NoZW1hKHBsdWdpblNjaGVtYSkgPyBtZXJn
ZU9iamVjdFNjaGVtYShiYXNlQ29uZmlnU2NoZW1hLCBwbHVnaW5TY2hlbWEpIDogY2xvbmVTY2hl
bWEocGx1Z2luLmNvbmZpZ1NjaGVtYSk7CgkJZW50cnlPYmplY3QucHJvcGVydGllcyA9IHsKCQkJ
Li4uZW50cnlPYmplY3QucHJvcGVydGllcywKCQkJY29uZmlnOiBuZXh0Q29uZmlnU2NoZW1hCgkJ
fTsKCQllbnRyeVByb3BlcnRpZXNbcGx1Z2luLmlkXSA9IGVudHJ5T2JqZWN0OwoJfQoJcmV0dXJu
IG5leHQ7Cn0KZnVuY3Rpb24gYXBwbHlDaGFubmVsU2NoZW1hcyhzY2hlbWEsIGNoYW5uZWxzKSB7
Cgljb25zdCBuZXh0ID0gY2xvbmVTY2hlbWEoc2NoZW1hKTsKCWNvbnN0IGNoYW5uZWxzTm9kZSA9
IGFzU2NoZW1hT2JqZWN0KGFzU2NoZW1hT2JqZWN0KG5leHQpPy5wcm9wZXJ0aWVzPy5jaGFubmVs
cyk7CglpZiAoIWNoYW5uZWxzTm9kZSkgcmV0dXJuIG5leHQ7Cgljb25zdCBjaGFubmVsUHJvcHMg
PSBjaGFubmVsc05vZGUucHJvcGVydGllcyA/PyB7fTsKCWNoYW5uZWxzTm9kZS5wcm9wZXJ0aWVz
ID0gY2hhbm5lbFByb3BzOwoJZm9yIChjb25zdCBjaGFubmVsIG9mIGNoYW5uZWxzKSB7CgkJaWYg
KCFjaGFubmVsLmNvbmZpZ1NjaGVtYSkgY29udGludWU7CgkJY29uc3QgZXhpc3RpbmcgPSBhc1Nj
aGVtYU9iamVjdChjaGFubmVsUHJvcHNbY2hhbm5lbC5pZF0pOwoJCWNvbnN0IGluY29taW5nID0g
YXNTY2hlbWFPYmplY3QoY2hhbm5lbC5jb25maWdTY2hlbWEpOwoJCWlmIChleGlzdGluZyAmJiBp
bmNvbWluZyAmJiBpc09iamVjdFNjaGVtYShleGlzdGluZykgJiYgaXNPYmplY3RTY2hlbWEoaW5j
b21pbmcpKSBjaGFubmVsUHJvcHNbY2hhbm5lbC5pZF0gPSBtZXJnZU9iamVjdFNjaGVtYShleGlz
dGluZywgaW5jb21pbmcpOwoJCWVsc2UgY2hhbm5lbFByb3BzW2NoYW5uZWwuaWRdID0gY2xvbmVT
Y2hlbWEoY2hhbm5lbC5jb25maWdTY2hlbWEpOwoJfQoJcmV0dXJuIG5leHQ7Cn0KbGV0IGNhY2hl
ZEJhc2UgPSBudWxsOwpjb25zdCBtZXJnZWRTY2hlbWFDYWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBu
ZXcgTWFwKCk7CmNvbnN0IE1FUkdFRF9TQ0hFTUFfQ0FDSEVfTUFYID0gNjQ7CmZ1bmN0aW9uIGJ1
aWxkTWVyZ2VkU2NoZW1hQ2FjaGVLZXkocGFyYW1zKSB7Cgljb25zdCBwbHVnaW5zID0gcGFyYW1z
LnBsdWdpbnMubWFwKChwbHVnaW4pID0+ICh7CgkJaWQ6IHBsdWdpbi5pZCwKCQluYW1lOiBwbHVn
aW4ubmFtZSwKCQlkZXNjcmlwdGlvbjogcGx1Z2luLmRlc2NyaXB0aW9uLAoJCWNvbmZpZ1NjaGVt
YTogcGx1Z2luLmNvbmZpZ1NjaGVtYSA/PyBudWxsLAoJCWNvbmZpZ1VpSGludHM6IHBsdWdpbi5j
b25maWdVaUhpbnRzID8/IG51bGwKCX0pKS50b1NvcnRlZCgoYSwgYikgPT4gYS5pZC5sb2NhbGVD
b21wYXJlKGIuaWQpKTsKCWNvbnN0IGNoYW5uZWxzID0gcGFyYW1zLmNoYW5uZWxzLm1hcCgoY2hh
bm5lbCkgPT4gKHsKCQlpZDogY2hhbm5lbC5pZCwKCQlsYWJlbDogY2hhbm5lbC5sYWJlbCwKCQlk
ZXNjcmlwdGlvbjogY2hhbm5lbC5kZXNjcmlwdGlvbiwKCQljb25maWdTY2hlbWE6IGNoYW5uZWwu
Y29uZmlnU2NoZW1hID8/IG51bGwsCgkJY29uZmlnVWlIaW50czogY2hhbm5lbC5jb25maWdVaUhp
bnRzID8/IG51bGwKCX0pKS50b1NvcnRlZCgoYSwgYikgPT4gYS5pZC5sb2NhbGVDb21wYXJlKGIu
aWQpKTsKCWNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaCgic2hhMjU2Iik7CgloYXNoLnVw
ZGF0ZSgie1wicGx1Z2luc1wiOlsiKTsKCXBsdWdpbnMuZm9yRWFjaCgocGx1Z2luLCBpbmRleCkg
PT4gewoJCWlmIChpbmRleCA+IDApIGhhc2gudXBkYXRlKCIsIik7CgkJaGFzaC51cGRhdGUoSlNP
Ti5zdHJpbmdpZnkocGx1Z2luKSk7Cgl9KTsKCWhhc2gudXBkYXRlKCJdLFwiY2hhbm5lbHNcIjpb
Iik7CgljaGFubmVscy5mb3JFYWNoKChjaGFubmVsLCBpbmRleCkgPT4gewoJCWlmIChpbmRleCA+
IDApIGhhc2gudXBkYXRlKCIsIik7CgkJaGFzaC51cGRhdGUoSlNPTi5zdHJpbmdpZnkoY2hhbm5l
bCkpOwoJfSk7CgloYXNoLnVwZGF0ZSgiXX0iKTsKCXJldHVybiBoYXNoLmRpZ2VzdCgiaGV4Iik7
Cn0KZnVuY3Rpb24gc2V0TWVyZ2VkU2NoZW1hQ2FjaGUoa2V5LCB2YWx1ZSkgewoJaWYgKG1lcmdl
ZFNjaGVtYUNhY2hlLnNpemUgPj0gTUVSR0VEX1NDSEVNQV9DQUNIRV9NQVgpIHsKCQljb25zdCBv
bGRlc3QgPSBtZXJnZWRTY2hlbWFDYWNoZS5rZXlzKCkubmV4dCgpOwoJCWlmICghb2xkZXN0LmRv
bmUpIG1lcmdlZFNjaGVtYUNhY2hlLmRlbGV0ZShvbGRlc3QudmFsdWUpOwoJfQoJbWVyZ2VkU2No
ZW1hQ2FjaGUuc2V0KGtleSwgdmFsdWUpOwp9CmZ1bmN0aW9uIHN0cmlwQ2hhbm5lbFNjaGVtYShz
Y2hlbWEpIHsKCWNvbnN0IG5leHQgPSBjbG9uZVNjaGVtYShzY2hlbWEpOwoJY29uc3Qgcm9vdCA9
IGFzU2NoZW1hT2JqZWN0KG5leHQpOwoJaWYgKCFyb290IHx8ICFyb290LnByb3BlcnRpZXMpIHJl
dHVybiBuZXh0OwoJZGVsZXRlIHJvb3QucHJvcGVydGllcy4kc2NoZW1hOwoJaWYgKEFycmF5Lmlz
QXJyYXkocm9vdC5yZXF1aXJlZCkpIHJvb3QucmVxdWlyZWQgPSByb290LnJlcXVpcmVkLmZpbHRl
cigoa2V5KSA9PiBrZXkgIT09ICIkc2NoZW1hIik7Cgljb25zdCBjaGFubmVsc05vZGUgPSBhc1Nj
aGVtYU9iamVjdChyb290LnByb3BlcnRpZXMuY2hhbm5lbHMpOwoJaWYgKGNoYW5uZWxzTm9kZSkg
ewoJCWNoYW5uZWxzTm9kZS5wcm9wZXJ0aWVzID0ge307CgkJY2hhbm5lbHNOb2RlLnJlcXVpcmVk
ID0gW107CgkJY2hhbm5lbHNOb2RlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gdHJ1ZTsKCX0KCXJl
dHVybiBuZXh0Owp9CmZ1bmN0aW9uIGJ1aWxkQmFzZUNvbmZpZ1NjaGVtYSgpIHsKCWlmIChjYWNo
ZWRCYXNlKSByZXR1cm4gY2FjaGVkQmFzZTsKCWNvbnN0IHNjaGVtYSA9IE9wZW5DbGF3U2NoZW1h
LnRvSlNPTlNjaGVtYSh7CgkJdGFyZ2V0OiAiZHJhZnQtMDciLAoJCXVucmVwcmVzZW50YWJsZTog
ImFueSIKCX0pOwoJc2NoZW1hLnRpdGxlID0gIk9wZW5DbGF3Q29uZmlnIjsKCWNvbnN0IGhpbnRz
ID0gYXBwbHlEZXJpdmVkVGFncyhtYXBTZW5zaXRpdmVQYXRocyhPcGVuQ2xhd1NjaGVtYSwgIiIs
IGJ1aWxkQmFzZUhpbnRzKCkpKTsKCWNvbnN0IG5leHQgPSB7CgkJc2NoZW1hOiBzdHJpcENoYW5u
ZWxTY2hlbWEoc2NoZW1hKSwKCQl1aUhpbnRzOiBoaW50cywKCQl2ZXJzaW9uOiBWRVJTSU9OLAoJ
CWdlbmVyYXRlZEF0OiAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCkK
CX07CgljYWNoZWRCYXNlID0gbmV4dDsKCXJldHVybiBuZXh0Owp9CmZ1bmN0aW9uIGJ1aWxkQ29u
ZmlnU2NoZW1hKHBhcmFtcykgewoJY29uc3QgYmFzZSA9IGJ1aWxkQmFzZUNvbmZpZ1NjaGVtYSgp
OwoJY29uc3QgcGx1Z2lucyA9IHBhcmFtcz8ucGx1Z2lucyA/PyBbXTsKCWNvbnN0IGNoYW5uZWxz
ID0gcGFyYW1zPy5jaGFubmVscyA/PyBbXTsKCWlmIChwbHVnaW5zLmxlbmd0aCA9PT0gMCAmJiBj
aGFubmVscy5sZW5ndGggPT09IDApIHJldHVybiBiYXNlOwoJY29uc3QgY2FjaGVLZXkgPSBidWls
ZE1lcmdlZFNjaGVtYUNhY2hlS2V5KHsKCQlwbHVnaW5zLAoJCWNoYW5uZWxzCgl9KTsKCWNvbnN0
IGNhY2hlZCA9IG1lcmdlZFNjaGVtYUNhY2hlLmdldChjYWNoZUtleSk7CglpZiAoY2FjaGVkKSBy
ZXR1cm4gY2FjaGVkOwoJY29uc3QgbWVyZ2VkV2l0aG91dFNlbnNpdGl2ZUhpbnRzID0gYXBwbHlI
ZWFydGJlYXRUYXJnZXRIaW50cyhhcHBseUNoYW5uZWxIaW50cyhhcHBseVBsdWdpbkhpbnRzKGJh
c2UudWlIaW50cywgcGx1Z2lucyksIGNoYW5uZWxzKSwgY2hhbm5lbHMpOwoJY29uc3QgbWVyZ2Vk
SGludHMgPSBhcHBseURlcml2ZWRUYWdzKGFwcGx5U2Vuc2l0aXZlSGludHMobWVyZ2VkV2l0aG91
dFNlbnNpdGl2ZUhpbnRzLCBjb2xsZWN0RXh0ZW5zaW9uSGludEtleXMobWVyZ2VkV2l0aG91dFNl
bnNpdGl2ZUhpbnRzLCBwbHVnaW5zLCBjaGFubmVscykpKTsKCWNvbnN0IG1lcmdlZFNjaGVtYSA9
IGFwcGx5Q2hhbm5lbFNjaGVtYXMoYXBwbHlQbHVnaW5TY2hlbWFzKGJhc2Uuc2NoZW1hLCBwbHVn
aW5zKSwgY2hhbm5lbHMpOwoJY29uc3QgbWVyZ2VkID0gewoJCS4uLmJhc2UsCgkJc2NoZW1hOiBt
ZXJnZWRTY2hlbWEsCgkJdWlIaW50czogbWVyZ2VkSGludHMKCX07CglzZXRNZXJnZWRTY2hlbWFD
YWNoZShjYWNoZUtleSwgbWVyZ2VkKTsKCXJldHVybiBtZXJnZWQ7Cn0KZnVuY3Rpb24gbm9ybWFs
aXplTG9va3VwUGF0aChwYXRoKSB7CglyZXR1cm4gcGF0aC50cmltKCkucmVwbGFjZSgvXFsoXCp8
XGQqKVxdL2csIChfbWF0Y2gsIHNlZ21lbnQpID0+IGAuJHtzZWdtZW50IHx8ICIqIn1gKS5yZXBs
YWNlKC9eXC4rfFwuKyQvZywgIiIpLnJlcGxhY2UoL1wuKy9nLCAiLiIpOwp9CmZ1bmN0aW9uIHNw
bGl0TG9va3VwUGF0aChwYXRoKSB7Cgljb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplTG9va3Vw
UGF0aChwYXRoKTsKCXJldHVybiBub3JtYWxpemVkID8gbm9ybWFsaXplZC5zcGxpdCgiLiIpLmZp
bHRlcihCb29sZWFuKSA6IFtdOwp9CmZ1bmN0aW9uIHJlc29sdmVVaUhpbnRNYXRjaCh1aUhpbnRz
LCBwYXRoKSB7Cgljb25zdCB0YXJnZXRQYXJ0cyA9IHNwbGl0TG9va3VwUGF0aChwYXRoKTsKCWxl
dCBiZXN0ID0gbnVsbDsKCWZvciAoY29uc3QgW2hpbnRQYXRoLCBoaW50XSBvZiBPYmplY3QuZW50
cmllcyh1aUhpbnRzKSkgewoJCWNvbnN0IGhpbnRQYXJ0cyA9IHNwbGl0TG9va3VwUGF0aChoaW50
UGF0aCk7CgkJaWYgKGhpbnRQYXJ0cy5sZW5ndGggIT09IHRhcmdldFBhcnRzLmxlbmd0aCkgY29u
dGludWU7CgkJbGV0IHdpbGRjYXJkQ291bnQgPSAwOwoJCWxldCBtYXRjaGVzID0gdHJ1ZTsKCQlm
b3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgaGludFBhcnRzLmxlbmd0aDsgaW5kZXggKz0gMSkg
ewoJCQljb25zdCBoaW50UGFydCA9IGhpbnRQYXJ0c1tpbmRleF07CgkJCWlmIChoaW50UGFydCA9
PT0gdGFyZ2V0UGFydHNbaW5kZXhdKSBjb250aW51ZTsKCQkJaWYgKGhpbnRQYXJ0ID09PSAiKiIp
IHsKCQkJCXdpbGRjYXJkQ291bnQgKz0gMTsKCQkJCWNvbnRpbnVlOwoJCQl9CgkJCW1hdGNoZXMg
PSBmYWxzZTsKCQkJYnJlYWs7CgkJfQoJCWlmICghbWF0Y2hlcykgY29udGludWU7CgkJaWYgKCFi
ZXN0IHx8IHdpbGRjYXJkQ291bnQgPCBiZXN0LndpbGRjYXJkQ291bnQpIGJlc3QgPSB7CgkJCXBh
dGg6IGhpbnRQYXRoLAoJCQloaW50LAoJCQl3aWxkY2FyZENvdW50CgkJfTsKCX0KCXJldHVybiBi
ZXN0ID8gewoJCXBhdGg6IGJlc3QucGF0aCwKCQloaW50OiBiZXN0LmhpbnQKCX0gOiBudWxsOwp9
CmZ1bmN0aW9uIHNjaGVtYUhhc0NoaWxkcmVuKHNjaGVtYSkgewoJaWYgKHNjaGVtYS5wcm9wZXJ0
aWVzICYmIE9iamVjdC5rZXlzKHNjaGVtYS5wcm9wZXJ0aWVzKS5sZW5ndGggPiAwKSByZXR1cm4g
dHJ1ZTsKCWlmIChzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMgJiYgdHlwZW9mIHNjaGVtYS5h
ZGRpdGlvbmFsUHJvcGVydGllcyA9PT0gIm9iamVjdCIpIHJldHVybiB0cnVlOwoJaWYgKEFycmF5
LmlzQXJyYXkoc2NoZW1hLml0ZW1zKSkgcmV0dXJuIHNjaGVtYS5pdGVtcy5zb21lKChlbnRyeSkg
PT4gdHlwZW9mIGVudHJ5ID09PSAib2JqZWN0IiAmJiBlbnRyeSAhPT0gbnVsbCk7CglyZXR1cm4g
Qm9vbGVhbihzY2hlbWEuaXRlbXMgJiYgdHlwZW9mIHNjaGVtYS5pdGVtcyA9PT0gIm9iamVjdCIp
Owp9CmZ1bmN0aW9uIHJlc29sdmVJdGVtc1NjaGVtYShzY2hlbWEsIGluZGV4KSB7CglpZiAoQXJy
YXkuaXNBcnJheShzY2hlbWEuaXRlbXMpKSB7CgkJY29uc3QgZW50cnkgPSBpbmRleCA9PT0gdm9p
ZCAwID8gc2NoZW1hLml0ZW1zLmZpbmQoKGNhbmRpZGF0ZSkgPT4gdHlwZW9mIGNhbmRpZGF0ZSA9
PT0gIm9iamVjdCIgJiYgY2FuZGlkYXRlICE9PSBudWxsKSA6IHNjaGVtYS5pdGVtc1tpbmRleF07
CgkJcmV0dXJuIGVudHJ5ICYmIHR5cGVvZiBlbnRyeSA9PT0gIm9iamVjdCIgPyBlbnRyeSA6IG51
bGw7Cgl9CglyZXR1cm4gc2NoZW1hLml0ZW1zICYmIHR5cGVvZiBzY2hlbWEuaXRlbXMgPT09ICJv
YmplY3QiID8gc2NoZW1hLml0ZW1zIDogbnVsbDsKfQpmdW5jdGlvbiByZXNvbHZlTG9va3VwQ2hp
bGRTY2hlbWEoc2NoZW1hLCBzZWdtZW50KSB7CglpZiAoRk9SQklEREVOX0xPT0tVUF9TRUdNRU5U
Uy5oYXMoc2VnbWVudCkpIHJldHVybiBudWxsOwoJY29uc3QgcHJvcGVydGllcyA9IHNjaGVtYS5w
cm9wZXJ0aWVzOwoJaWYgKHByb3BlcnRpZXMgJiYgT2JqZWN0Lmhhc093bihwcm9wZXJ0aWVzLCBz
ZWdtZW50KSkgcmV0dXJuIGFzU2NoZW1hT2JqZWN0KHByb3BlcnRpZXNbc2VnbWVudF0pOwoJY29u
c3QgaXRlbUluZGV4ID0gL15cZCskLy50ZXN0KHNlZ21lbnQpID8gTnVtYmVyLnBhcnNlSW50KHNl
Z21lbnQsIDEwKSA6IHZvaWQgMDsKCWNvbnN0IGl0ZW1zID0gcmVzb2x2ZUl0ZW1zU2NoZW1hKHNj
aGVtYSwgaXRlbUluZGV4KTsKCWlmICgoc2VnbWVudCA9PT0gIioiIHx8IGl0ZW1JbmRleCAhPT0g
dm9pZCAwKSAmJiBpdGVtcykgcmV0dXJuIGl0ZW1zOwoJaWYgKHNjaGVtYS5hZGRpdGlvbmFsUHJv
cGVydGllcyAmJiB0eXBlb2Ygc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzID09PSAib2JqZWN0
IikgcmV0dXJuIHNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllczsKCXJldHVybiBudWxsOwp9CmZ1
bmN0aW9uIHN0cmlwU2NoZW1hRm9yTG9va3VwKHNjaGVtYSkgewoJY29uc3QgbmV4dCA9IHt9OwoJ
Zm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hKSkgewoJCWlm
IChMT09LVVBfU0NIRU1BX1NUUklOR19LRVlTLmhhcyhrZXkpICYmIHR5cGVvZiB2YWx1ZSA9PT0g
InN0cmluZyIpIHsKCQkJbmV4dFtrZXldID0gdmFsdWU7CgkJCWNvbnRpbnVlOwoJCX0KCQlpZiAo
TE9PS1VQX1NDSEVNQV9OVU1CRVJfS0VZUy5oYXMoa2V5KSAmJiB0eXBlb2YgdmFsdWUgPT09ICJu
dW1iZXIiKSB7CgkJCW5leHRba2V5XSA9IHZhbHVlOwoJCQljb250aW51ZTsKCQl9CgkJaWYgKExP
T0tVUF9TQ0hFTUFfQk9PTEVBTl9LRVlTLmhhcyhrZXkpICYmIHR5cGVvZiB2YWx1ZSA9PT0gImJv
b2xlYW4iKSB7CgkJCW5leHRba2V5XSA9IHZhbHVlOwoJCQljb250aW51ZTsKCQl9CgkJaWYgKGtl
eSA9PT0gInR5cGUiKSB7CgkJCWlmICh0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciKSBuZXh0W2tl
eV0gPSB2YWx1ZTsKCQkJZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUuZXZl
cnkoKGVudHJ5KSA9PiB0eXBlb2YgZW50cnkgPT09ICJzdHJpbmciKSkgbmV4dFtrZXldID0gWy4u
LnZhbHVlXTsKCQkJY29udGludWU7CgkJfQoJCWlmIChrZXkgPT09ICJlbnVtIiAmJiBBcnJheS5p
c0FycmF5KHZhbHVlKSkgewoJCQljb25zdCBlbnRyaWVzID0gdmFsdWUuZmlsdGVyKChlbnRyeSkg
PT4gZW50cnkgPT09IG51bGwgfHwgdHlwZW9mIGVudHJ5ID09PSAic3RyaW5nIiB8fCB0eXBlb2Yg
ZW50cnkgPT09ICJudW1iZXIiIHx8IHR5cGVvZiBlbnRyeSA9PT0gImJvb2xlYW4iKTsKCQkJaWYg
KGVudHJpZXMubGVuZ3RoID09PSB2YWx1ZS5sZW5ndGgpIG5leHRba2V5XSA9IFsuLi5lbnRyaWVz
XTsKCQkJY29udGludWU7CgkJfQoJCWlmIChrZXkgPT09ICJjb25zdCIgJiYgKHZhbHVlID09PSBu
dWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgfHwgdHlwZW9mIHZhbHVlID09PSAibnVt
YmVyIiB8fCB0eXBlb2YgdmFsdWUgPT09ICJib29sZWFuIikpIG5leHRba2V5XSA9IHZhbHVlOwoJ
fQoJcmV0dXJuIG5leHQ7Cn0KZnVuY3Rpb24gYnVpbGRMb29rdXBDaGlsZHJlbihzY2hlbWEsIHBh
dGgsIHVpSGludHMpIHsKCWNvbnN0IGNoaWxkcmVuID0gW107Cgljb25zdCByZXF1aXJlZCA9IG5l
dyBTZXQoc2NoZW1hLnJlcXVpcmVkID8/IFtdKTsKCWNvbnN0IHB1c2hDaGlsZCA9IChrZXksIGNo
aWxkU2NoZW1hLCBpc1JlcXVpcmVkKSA9PiB7CgkJY29uc3QgY2hpbGRQYXRoID0gcGF0aCA/IGAk
e3BhdGh9LiR7a2V5fWAgOiBrZXk7CgkJY29uc3QgcmVzb2x2ZWRIaW50ID0gcmVzb2x2ZVVpSGlu
dE1hdGNoKHVpSGludHMsIGNoaWxkUGF0aCk7CgkJY2hpbGRyZW4ucHVzaCh7CgkJCWtleSwKCQkJ
cGF0aDogY2hpbGRQYXRoLAoJCQl0eXBlOiBjaGlsZFNjaGVtYS50eXBlLAoJCQlyZXF1aXJlZDog
aXNSZXF1aXJlZCwKCQkJaGFzQ2hpbGRyZW46IHNjaGVtYUhhc0NoaWxkcmVuKGNoaWxkU2NoZW1h
KSwKCQkJaGludDogcmVzb2x2ZWRIaW50Py5oaW50LAoJCQloaW50UGF0aDogcmVzb2x2ZWRIaW50
Py5wYXRoCgkJfSk7Cgl9OwoJZm9yIChjb25zdCBba2V5LCBjaGlsZFNjaGVtYV0gb2YgT2JqZWN0
LmVudHJpZXMoc2NoZW1hLnByb3BlcnRpZXMgPz8ge30pKSBwdXNoQ2hpbGQoa2V5LCBjaGlsZFNj
aGVtYSwgcmVxdWlyZWQuaGFzKGtleSkpOwoJY29uc3Qgd2lsZGNhcmRTY2hlbWEgPSAoc2NoZW1h
LmFkZGl0aW9uYWxQcm9wZXJ0aWVzICYmIHR5cGVvZiBzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRp
ZXMgPT09ICJvYmplY3QiICYmICFBcnJheS5pc0FycmF5KHNjaGVtYS5hZGRpdGlvbmFsUHJvcGVy
dGllcykgPyBzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMgOiBudWxsKSA/PyByZXNvbHZlSXRl
bXNTY2hlbWEoc2NoZW1hKTsKCWlmICh3aWxkY2FyZFNjaGVtYSkgcHVzaENoaWxkKCIqIiwgd2ls
ZGNhcmRTY2hlbWEsIGZhbHNlKTsKCXJldHVybiBjaGlsZHJlbjsKfQpmdW5jdGlvbiBsb29rdXBD
b25maWdTY2hlbWEocmVzcG9uc2UsIHBhdGgpIHsKCWNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbm9y
bWFsaXplTG9va3VwUGF0aChwYXRoKTsKCWlmICghbm9ybWFsaXplZFBhdGgpIHJldHVybiBudWxs
OwoJY29uc3QgcGFydHMgPSBzcGxpdExvb2t1cFBhdGgobm9ybWFsaXplZFBhdGgpOwoJaWYgKHBh
cnRzLmxlbmd0aCA9PT0gMCB8fCBwYXJ0cy5sZW5ndGggPiBNQVhfTE9PS1VQX1BBVEhfU0VHTUVO
VFMpIHJldHVybiBudWxsOwoJbGV0IGN1cnJlbnQgPSBhc1NjaGVtYU9iamVjdChyZXNwb25zZS5z
Y2hlbWEpOwoJaWYgKCFjdXJyZW50KSByZXR1cm4gbnVsbDsKCWZvciAoY29uc3Qgc2VnbWVudCBv
ZiBwYXJ0cykgewoJCWNvbnN0IG5leHQgPSByZXNvbHZlTG9va3VwQ2hpbGRTY2hlbWEoY3VycmVu
dCwgc2VnbWVudCk7CgkJaWYgKCFuZXh0KSByZXR1cm4gbnVsbDsKCQljdXJyZW50ID0gbmV4dDsK
CX0KCWNvbnN0IHJlc29sdmVkSGludCA9IHJlc29sdmVVaUhpbnRNYXRjaChyZXNwb25zZS51aUhp
bnRzLCBub3JtYWxpemVkUGF0aCk7CglyZXR1cm4gewoJCXBhdGg6IG5vcm1hbGl6ZWRQYXRoLAoJ
CXNjaGVtYTogc3RyaXBTY2hlbWFGb3JMb29rdXAoY3VycmVudCksCgkJaGludDogcmVzb2x2ZWRI
aW50Py5oaW50LAoJCWhpbnRQYXRoOiByZXNvbHZlZEhpbnQ/LnBhdGgsCgkJY2hpbGRyZW46IGJ1
aWxkTG9va3VwQ2hpbGRyZW4oY3VycmVudCwgbm9ybWFsaXplZFBhdGgsIHJlc3BvbnNlLnVpSGlu
dHMpCgl9Owp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dhdGV3YXkvc2VydmVyLW1ldGhv
ZHMvYmFzZS1oYXNoLnRzCmZ1bmN0aW9uIHJlc29sdmVCYXNlSGFzaFBhcmFtKHBhcmFtcykgewoJ
Y29uc3QgcmF3ID0gcGFyYW1zPy5iYXNlSGFzaDsKCWlmICh0eXBlb2YgcmF3ICE9PSAic3RyaW5n
IikgcmV0dXJuIG51bGw7Cgljb25zdCB0cmltbWVkID0gcmF3LnRyaW0oKTsKCXJldHVybiB0cmlt
bWVkID8gdHJpbW1lZCA6IG51bGw7Cn0KLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvZ2F0ZXdh
eS9zZXJ2ZXItbWV0aG9kcy9yZXN0YXJ0LXJlcXVlc3QudHMKZnVuY3Rpb24gcGFyc2VSZXN0YXJ0
UmVxdWVzdFBhcmFtcyhwYXJhbXMpIHsKCWNvbnN0IHNlc3Npb25LZXkgPSB0eXBlb2YgcGFyYW1z
LnNlc3Npb25LZXkgPT09ICJzdHJpbmciID8gcGFyYW1zLnNlc3Npb25LZXk/LnRyaW0oKSB8fCB2
b2lkIDAgOiB2b2lkIDA7Cgljb25zdCBub3RlID0gdHlwZW9mIHBhcmFtcy5ub3RlID09PSAic3Ry
aW5nIiA/IHBhcmFtcy5ub3RlPy50cmltKCkgfHwgdm9pZCAwIDogdm9pZCAwOwoJY29uc3QgcmVz
dGFydERlbGF5TXNSYXcgPSBwYXJhbXMucmVzdGFydERlbGF5TXM7CglyZXR1cm4gewoJCXNlc3Np
b25LZXksCgkJbm90ZSwKCQlyZXN0YXJ0RGVsYXlNczogdHlwZW9mIHJlc3RhcnREZWxheU1zUmF3
ID09PSAibnVtYmVyIiAmJiBOdW1iZXIuaXNGaW5pdGUocmVzdGFydERlbGF5TXNSYXcpID8gTWF0
aC5tYXgoMCwgTWF0aC5mbG9vcihyZXN0YXJ0RGVsYXlNc1JhdykpIDogdm9pZCAwCgl9Owp9Ci8v
I2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dhdGV3YXkvc2VydmVyLW1ldGhvZHMvdmFsaWRhdGlv
bi50cwpmdW5jdGlvbiBhc3NlcnRWYWxpZFBhcmFtcyhwYXJhbXMsIHZhbGlkYXRlLCBtZXRob2Qs
IHJlc3BvbmQpIHsKCWlmICh2YWxpZGF0ZShwYXJhbXMpKSByZXR1cm4gdHJ1ZTsKCXJlc3BvbmQo
ZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgYGlu
dmFsaWQgJHttZXRob2R9IHBhcmFtczogJHtmb3JtYXRWYWxpZGF0aW9uRXJyb3JzKHZhbGlkYXRl
LmVycm9ycyl9YCkpOwoJcmV0dXJuIGZhbHNlOwp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3Jj
L2dhdGV3YXkvc2VydmVyLW1ldGhvZHMvY29uZmlnLnRzCmNvbnN0IE1BWF9DT05GSUdfSVNTVUVT
X0lOX0VSUk9SX01FU1NBR0UgPSAzOwpmdW5jdGlvbiByZXF1aXJlQ29uZmlnQmFzZUhhc2gocGFy
YW1zLCBzbmFwc2hvdCwgcmVzcG9uZCkgewoJaWYgKCFzbmFwc2hvdC5leGlzdHMpIHJldHVybiB0
cnVlOwoJY29uc3Qgc25hcHNob3RIYXNoID0gcmVzb2x2ZUNvbmZpZ1NuYXBzaG90SGFzaChzbmFw
c2hvdCk7CglpZiAoIXNuYXBzaG90SGFzaCkgewoJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJy
b3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgImNvbmZpZyBiYXNlIGhhc2ggdW5h
dmFpbGFibGU7IHJlLXJ1biBjb25maWcuZ2V0IGFuZCByZXRyeSIpKTsKCQlyZXR1cm4gZmFsc2U7
Cgl9Cgljb25zdCBiYXNlSGFzaCA9IHJlc29sdmVCYXNlSGFzaFBhcmFtKHBhcmFtcyk7CglpZiAo
IWJhc2VIYXNoKSB7CgkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29k
ZXMuSU5WQUxJRF9SRVFVRVNULCAiY29uZmlnIGJhc2UgaGFzaCByZXF1aXJlZDsgcmUtcnVuIGNv
bmZpZy5nZXQgYW5kIHJldHJ5IikpOwoJCXJldHVybiBmYWxzZTsKCX0KCWlmIChiYXNlSGFzaCAh
PT0gc25hcHNob3RIYXNoKSB7CgkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVy
cm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCAiY29uZmlnIGNoYW5nZWQgc2luY2UgbGFzdCBsb2Fk
OyByZS1ydW4gY29uZmlnLmdldCBhbmQgcmV0cnkiKSk7CgkJcmV0dXJuIGZhbHNlOwoJfQoJcmV0
dXJuIHRydWU7Cn0KZnVuY3Rpb24gcGFyc2VSYXdDb25maWdPclJlc3BvbmQocGFyYW1zLCByZXF1
ZXN0TmFtZSwgcmVzcG9uZCkgewoJY29uc3QgcmF3VmFsdWUgPSBwYXJhbXMucmF3OwoJaWYgKHR5
cGVvZiByYXdWYWx1ZSAhPT0gInN0cmluZyIpIHsKCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVy
cm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsIGBpbnZhbGlkICR7cmVxdWVzdE5h
bWV9IHBhcmFtczogcmF3IChzdHJpbmcpIHJlcXVpcmVkYCkpOwoJCXJldHVybiBudWxsOwoJfQoJ
cmV0dXJuIHJhd1ZhbHVlOwp9CmZ1bmN0aW9uIHNhbml0aXplTG9va3VwUGF0aEZvckxvZyhwYXRo
KSB7Cgljb25zdCBzYW5pdGl6ZWQgPSBBcnJheS5mcm9tKHBhdGgsIChjaGFyKSA9PiB7CgkJY29u
c3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKTsKCQlyZXR1cm4gY29kZSA8IDMyIHx8IGNvZGUg
PT09IDEyNyA/ICI/IiA6IGNoYXI7Cgl9KS5qb2luKCIiKTsKCXJldHVybiBzYW5pdGl6ZWQubGVu
Z3RoID4gMTIwID8gYCR7c2FuaXRpemVkLnNsaWNlKDAsIDExNyl9Li4uYCA6IHNhbml0aXplZDsK
fQpmdW5jdGlvbiBwYXJzZVZhbGlkYXRlQ29uZmlnRnJvbVJhd09yUmVzcG9uZChwYXJhbXMsIHJl
cXVlc3ROYW1lLCBzbmFwc2hvdCwgcmVzcG9uZCkgewoJY29uc3QgcmF3VmFsdWUgPSBwYXJzZVJh
d0NvbmZpZ09yUmVzcG9uZChwYXJhbXMsIHJlcXVlc3ROYW1lLCByZXNwb25kKTsKCWlmICghcmF3
VmFsdWUpIHJldHVybiBudWxsOwoJY29uc3QgcGFyc2VkUmVzID0gcGFyc2VDb25maWdKc29uNShy
YXdWYWx1ZSk7CglpZiAoIXBhcnNlZFJlcy5vaykgewoJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwg
ZXJyb3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgcGFyc2VkUmVzLmVycm9yKSk7
CgkJcmV0dXJuIG51bGw7Cgl9Cgljb25zdCBzY2hlbWEgPSBsb2FkU2NoZW1hV2l0aFBsdWdpbnMo
KTsKCWNvbnN0IHJlc3RvcmVkID0gcmVzdG9yZVJlZGFjdGVkVmFsdWVzKHBhcnNlZFJlcy5wYXJz
ZWQsIHNuYXBzaG90LmNvbmZpZywgc2NoZW1hLnVpSGludHMpOwoJaWYgKCFyZXN0b3JlZC5vaykg
ewoJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURf
UkVRVUVTVCwgcmVzdG9yZWQuaHVtYW5SZWFkYWJsZU1lc3NhZ2UgPz8gImludmFsaWQgY29uZmln
IikpOwoJCXJldHVybiBudWxsOwoJfQoJY29uc3QgdmFsaWRhdGVkID0gdmFsaWRhdGVDb25maWdP
YmplY3RXaXRoUGx1Z2lucyhyZXN0b3JlZC5yZXN1bHQpOwoJaWYgKCF2YWxpZGF0ZWQub2spIHsK
CQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JF
UVVFU1QsIHN1bW1hcml6ZUNvbmZpZ1ZhbGlkYXRpb25Jc3N1ZXModmFsaWRhdGVkLmlzc3Vlcyks
IHsgZGV0YWlsczogeyBpc3N1ZXM6IHZhbGlkYXRlZC5pc3N1ZXMgfSB9KSk7CgkJcmV0dXJuIG51
bGw7Cgl9CglyZXR1cm4gewoJCWNvbmZpZzogdmFsaWRhdGVkLmNvbmZpZywKCQlzY2hlbWEKCX07
Cn0KZnVuY3Rpb24gc3VtbWFyaXplQ29uZmlnVmFsaWRhdGlvbklzc3Vlcyhpc3N1ZXMpIHsKCWNv
bnN0IGxpbmVzID0gZm9ybWF0Q29uZmlnSXNzdWVMaW5lcyhpc3N1ZXMuc2xpY2UoMCwgTUFYX0NP
TkZJR19JU1NVRVNfSU5fRVJST1JfTUVTU0FHRSksICIiLCB7IG5vcm1hbGl6ZVJvb3Q6IHRydWUg
fSkubWFwKChsaW5lKSA9PiBsaW5lLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOwoJaWYgKGxpbmVz
Lmxlbmd0aCA9PT0gMCkgcmV0dXJuICJpbnZhbGlkIGNvbmZpZyI7Cgljb25zdCBoaWRkZW5Db3Vu
dCA9IE1hdGgubWF4KDAsIGlzc3Vlcy5sZW5ndGggLSBsaW5lcy5sZW5ndGgpOwoJcmV0dXJuIGBp
bnZhbGlkIGNvbmZpZzogJHtsaW5lcy5qb2luKCI7ICIpfSR7aGlkZGVuQ291bnQgPiAwID8gYCAo
KyR7aGlkZGVuQ291bnR9IG1vcmUgaXNzdWUke2hpZGRlbkNvdW50ID09PSAxID8gIiIgOiAicyJ9
KWAgOiAiIn1gOwp9CmZ1bmN0aW9uIHJlc29sdmVDb25maWdSZXN0YXJ0UmVxdWVzdChwYXJhbXMp
IHsKCWNvbnN0IHsgc2Vzc2lvbktleSwgbm90ZSwgcmVzdGFydERlbGF5TXMgfSA9IHBhcnNlUmVz
dGFydFJlcXVlc3RQYXJhbXMocGFyYW1zKTsKCWNvbnN0IHsgZGVsaXZlcnlDb250ZXh0LCB0aHJl
YWRJZCB9ID0gZXh0cmFjdERlbGl2ZXJ5SW5mbyhzZXNzaW9uS2V5KTsKCXJldHVybiB7CgkJc2Vz
c2lvbktleSwKCQlub3RlLAoJCXJlc3RhcnREZWxheU1zLAoJCWRlbGl2ZXJ5Q29udGV4dCwKCQl0
aHJlYWRJZAoJfTsKfQpmdW5jdGlvbiBidWlsZENvbmZpZ1Jlc3RhcnRTZW50aW5lbFBheWxvYWQo
cGFyYW1zKSB7Cgljb25zdCBjb25maWdQYXRoID0gY3JlYXRlQ29uZmlnSU8oKS5jb25maWdQYXRo
OwoJcmV0dXJuIHsKCQlraW5kOiBwYXJhbXMua2luZCwKCQlzdGF0dXM6ICJvayIsCgkJdHM6IERh
dGUubm93KCksCgkJc2Vzc2lvbktleTogcGFyYW1zLnNlc3Npb25LZXksCgkJZGVsaXZlcnlDb250
ZXh0OiBwYXJhbXMuZGVsaXZlcnlDb250ZXh0LAoJCXRocmVhZElkOiBwYXJhbXMudGhyZWFkSWQs
CgkJbWVzc2FnZTogcGFyYW1zLm5vdGUgPz8gbnVsbCwKCQlkb2N0b3JIaW50OiBmb3JtYXREb2N0
b3JOb25JbnRlcmFjdGl2ZUhpbnQoKSwKCQlzdGF0czogewoJCQltb2RlOiBwYXJhbXMubW9kZSwK
CQkJcm9vdDogY29uZmlnUGF0aAoJCX0KCX07Cn0KYXN5bmMgZnVuY3Rpb24gdHJ5V3JpdGVSZXN0
YXJ0U2VudGluZWxQYXlsb2FkKHBheWxvYWQpIHsKCXRyeSB7CgkJcmV0dXJuIGF3YWl0IHdyaXRl
UmVzdGFydFNlbnRpbmVsKHBheWxvYWQpOwoJfSBjYXRjaCB7CgkJcmV0dXJuIG51bGw7Cgl9Cn0K
ZnVuY3Rpb24gbG9hZFNjaGVtYVdpdGhQbHVnaW5zKCkgewoJY29uc3QgY2ZnID0gbG9hZENvbmZp
ZygpOwoJcmV0dXJuIGJ1aWxkQ29uZmlnU2NoZW1hKHsKCQlwbHVnaW5zOiBsb2FkT3BlbkNsYXdQ
bHVnaW5zKHsKCQkJY29uZmlnOiBjZmcsCgkJCWNhY2hlOiB0cnVlLAoJCQl3b3Jrc3BhY2VEaXI6
IHJlc29sdmVBZ2VudFdvcmtzcGFjZURpcihjZmcsIHJlc29sdmVEZWZhdWx0QWdlbnRJZChjZmcp
KSwKCQkJbG9nZ2VyOiB7CgkJCQlpbmZvOiAoKSA9PiB7fSwKCQkJCXdhcm46ICgpID0+IHt9LAoJ
CQkJZXJyb3I6ICgpID0+IHt9LAoJCQkJZGVidWc6ICgpID0+IHt9CgkJCX0KCQl9KS5wbHVnaW5z
Lm1hcCgocGx1Z2luKSA9PiAoewoJCQlpZDogcGx1Z2luLmlkLAoJCQluYW1lOiBwbHVnaW4ubmFt
ZSwKCQkJZGVzY3JpcHRpb246IHBsdWdpbi5kZXNjcmlwdGlvbiwKCQkJY29uZmlnVWlIaW50czog
cGx1Z2luLmNvbmZpZ1VpSGludHMsCgkJCWNvbmZpZ1NjaGVtYTogcGx1Z2luLmNvbmZpZ0pzb25T
Y2hlbWEKCQl9KSksCgkJY2hhbm5lbHM6IGxpc3RDaGFubmVsUGx1Z2lucygpLm1hcCgoZW50cnkp
ID0+ICh7CgkJCWlkOiBlbnRyeS5pZCwKCQkJbGFiZWw6IGVudHJ5Lm1ldGEubGFiZWwsCgkJCWRl
c2NyaXB0aW9uOiBlbnRyeS5tZXRhLmJsdXJiLAoJCQljb25maWdTY2hlbWE6IGVudHJ5LmNvbmZp
Z1NjaGVtYT8uc2NoZW1hLAoJCQljb25maWdVaUhpbnRzOiBlbnRyeS5jb25maWdTY2hlbWE/LnVp
SGludHMKCQl9KSkKCX0pOwp9CmNvbnN0IGNvbmZpZ0hhbmRsZXJzID0gewoJImNvbmZpZy5nZXQi
OiBhc3luYyAoeyBwYXJhbXMsIHJlc3BvbmQgfSkgPT4gewoJCWlmICghYXNzZXJ0VmFsaWRQYXJh
bXMocGFyYW1zLCB2YWxpZGF0ZUNvbmZpZ0dldFBhcmFtcywgImNvbmZpZy5nZXQiLCByZXNwb25k
KSkgcmV0dXJuOwoJCXJlc3BvbmQodHJ1ZSwgcmVkYWN0Q29uZmlnU25hcHNob3QoYXdhaXQgcmVh
ZENvbmZpZ0ZpbGVTbmFwc2hvdCgpLCBsb2FkU2NoZW1hV2l0aFBsdWdpbnMoKS51aUhpbnRzKSwg
dm9pZCAwKTsKCX0sCgkiY29uZmlnLnNjaGVtYSI6ICh7IHBhcmFtcywgcmVzcG9uZCB9KSA9PiB7
CgkJaWYgKCFhc3NlcnRWYWxpZFBhcmFtcyhwYXJhbXMsIHZhbGlkYXRlQ29uZmlnU2NoZW1hUGFy
YW1zLCAiY29uZmlnLnNjaGVtYSIsIHJlc3BvbmQpKSByZXR1cm47CgkJcmVzcG9uZCh0cnVlLCBs
b2FkU2NoZW1hV2l0aFBsdWdpbnMoKSwgdm9pZCAwKTsKCX0sCgkiY29uZmlnLnNjaGVtYS5sb29r
dXAiOiAoeyBwYXJhbXMsIHJlc3BvbmQsIGNvbnRleHQgfSkgPT4gewoJCWlmICghYXNzZXJ0VmFs
aWRQYXJhbXMocGFyYW1zLCB2YWxpZGF0ZUNvbmZpZ1NjaGVtYUxvb2t1cFBhcmFtcywgImNvbmZp
Zy5zY2hlbWEubG9va3VwIiwgcmVzcG9uZCkpIHJldHVybjsKCQljb25zdCBwYXRoID0gcGFyYW1z
LnBhdGg7CgkJY29uc3QgcmVzdWx0ID0gbG9va3VwQ29uZmlnU2NoZW1hKGxvYWRTY2hlbWFXaXRo
UGx1Z2lucygpLCBwYXRoKTsKCQlpZiAoIXJlc3VsdCkgewoJCQlyZXNwb25kKGZhbHNlLCB2b2lk
IDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsICJjb25maWcgc2NoZW1h
IHBhdGggbm90IGZvdW5kIikpOwoJCQlyZXR1cm47CgkJfQoJCWlmICghdmFsaWRhdGVDb25maWdT
Y2hlbWFMb29rdXBSZXN1bHQocmVzdWx0KSkgewoJCQljb25zdCBlcnJvcnMgPSB2YWxpZGF0ZUNv
bmZpZ1NjaGVtYUxvb2t1cFJlc3VsdC5lcnJvcnMgPz8gW107CgkJCWNvbnRleHQubG9nR2F0ZXdh
eS53YXJuKGBjb25maWcuc2NoZW1hLmxvb2t1cCBwcm9kdWNlZCBpbnZhbGlkIHBheWxvYWQgZm9y
ICR7c2FuaXRpemVMb29rdXBQYXRoRm9yTG9nKHBhdGgpfTogJHtmb3JtYXRWYWxpZGF0aW9uRXJy
b3JzKGVycm9ycyl9YCk7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJv
ckNvZGVzLlVOQVZBSUxBQkxFLCAiY29uZmlnLnNjaGVtYS5sb29rdXAgcmV0dXJuZWQgaW52YWxp
ZCBwYXlsb2FkIiwgeyBkZXRhaWxzOiB7IGVycm9ycyB9IH0pKTsKCQkJcmV0dXJuOwoJCX0KCQly
ZXNwb25kKHRydWUsIHJlc3VsdCwgdm9pZCAwKTsKCX0sCgkiY29uZmlnLnNldCI6IGFzeW5jICh7
IHBhcmFtcywgcmVzcG9uZCB9KSA9PiB7CgkJaWYgKCFhc3NlcnRWYWxpZFBhcmFtcyhwYXJhbXMs
IHZhbGlkYXRlQ29uZmlnU2V0UGFyYW1zLCAiY29uZmlnLnNldCIsIHJlc3BvbmQpKSByZXR1cm47
CgkJY29uc3QgeyBzbmFwc2hvdCwgd3JpdGVPcHRpb25zIH0gPSBhd2FpdCByZWFkQ29uZmlnRmls
ZVNuYXBzaG90Rm9yV3JpdGUoKTsKCQlpZiAoIXJlcXVpcmVDb25maWdCYXNlSGFzaChwYXJhbXMs
IHNuYXBzaG90LCByZXNwb25kKSkgcmV0dXJuOwoJCWNvbnN0IHBhcnNlZCA9IHBhcnNlVmFsaWRh
dGVDb25maWdGcm9tUmF3T3JSZXNwb25kKHBhcmFtcywgImNvbmZpZy5zZXQiLCBzbmFwc2hvdCwg
cmVzcG9uZCk7CgkJaWYgKCFwYXJzZWQpIHJldHVybjsKCQlhd2FpdCB3cml0ZUNvbmZpZ0ZpbGUo
cGFyc2VkLmNvbmZpZywgd3JpdGVPcHRpb25zKTsKCQlyZXNwb25kKHRydWUsIHsKCQkJb2s6IHRy
dWUsCgkJCXBhdGg6IGNyZWF0ZUNvbmZpZ0lPKCkuY29uZmlnUGF0aCwKCQkJY29uZmlnOiByZWRh
Y3RDb25maWdPYmplY3QocGFyc2VkLmNvbmZpZywgcGFyc2VkLnNjaGVtYS51aUhpbnRzKQoJCX0s
IHZvaWQgMCk7Cgl9LAoJImNvbmZpZy5wYXRjaCI6IGFzeW5jICh7IHBhcmFtcywgcmVzcG9uZCwg
Y2xpZW50LCBjb250ZXh0IH0pID0+IHsKCQlpZiAoIWFzc2VydFZhbGlkUGFyYW1zKHBhcmFtcywg
dmFsaWRhdGVDb25maWdQYXRjaFBhcmFtcywgImNvbmZpZy5wYXRjaCIsIHJlc3BvbmQpKSByZXR1
cm47CgkJY29uc3QgeyBzbmFwc2hvdCwgd3JpdGVPcHRpb25zIH0gPSBhd2FpdCByZWFkQ29uZmln
RmlsZVNuYXBzaG90Rm9yV3JpdGUoKTsKCQlpZiAoIXJlcXVpcmVDb25maWdCYXNlSGFzaChwYXJh
bXMsIHNuYXBzaG90LCByZXNwb25kKSkgcmV0dXJuOwoJCWlmICghc25hcHNob3QudmFsaWQpIHsK
CQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9S
RVFVRVNULCAiaW52YWxpZCBjb25maWc7IGZpeCBiZWZvcmUgcGF0Y2hpbmciKSk7CgkJCXJldHVy
bjsKCQl9CgkJY29uc3QgcmF3VmFsdWUgPSBwYXJhbXMucmF3OwoJCWlmICh0eXBlb2YgcmF3VmFs
dWUgIT09ICJzdHJpbmciKSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShF
cnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgImludmFsaWQgY29uZmlnLnBhdGNoIHBhcmFtczog
cmF3IChzdHJpbmcpIHJlcXVpcmVkIikpOwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0IHBhcnNlZFJl
cyA9IHBhcnNlQ29uZmlnSnNvbjUocmF3VmFsdWUpOwoJCWlmICghcGFyc2VkUmVzLm9rKSB7CgkJ
CXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVR
VUVTVCwgcGFyc2VkUmVzLmVycm9yKSk7CgkJCXJldHVybjsKCQl9CgkJaWYgKCFwYXJzZWRSZXMu
cGFyc2VkIHx8IHR5cGVvZiBwYXJzZWRSZXMucGFyc2VkICE9PSAib2JqZWN0IiB8fCBBcnJheS5p
c0FycmF5KHBhcnNlZFJlcy5wYXJzZWQpKSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJy
b3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgImNvbmZpZy5wYXRjaCByYXcgbXVz
dCBiZSBhbiBvYmplY3QiKSk7CgkJCXJldHVybjsKCQl9CgkJY29uc3QgbWVyZ2VkID0gYXBwbHlN
ZXJnZVBhdGNoKHNuYXBzaG90LmNvbmZpZywgcGFyc2VkUmVzLnBhcnNlZCwgeyBtZXJnZU9iamVj
dEFycmF5c0J5SWQ6IHRydWUgfSk7CgkJY29uc3Qgc2NoZW1hUGF0Y2ggPSBsb2FkU2NoZW1hV2l0
aFBsdWdpbnMoKTsKCQljb25zdCByZXN0b3JlZE1lcmdlID0gcmVzdG9yZVJlZGFjdGVkVmFsdWVz
KG1lcmdlZCwgc25hcHNob3QuY29uZmlnLCBzY2hlbWFQYXRjaC51aUhpbnRzKTsKCQlpZiAoIXJl
c3RvcmVkTWVyZ2Uub2spIHsKCQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVy
cm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCByZXN0b3JlZE1lcmdlLmh1bWFuUmVhZGFibGVNZXNz
YWdlID8/ICJpbnZhbGlkIGNvbmZpZyIpKTsKCQkJcmV0dXJuOwoJCX0KCQljb25zdCB2YWxpZGF0
ZWQgPSB2YWxpZGF0ZUNvbmZpZ09iamVjdFdpdGhQbHVnaW5zKGFwcGx5TGVnYWN5TWlncmF0aW9u
cyhyZXN0b3JlZE1lcmdlLnJlc3VsdCkubmV4dCA/PyByZXN0b3JlZE1lcmdlLnJlc3VsdCk7CgkJ
aWYgKCF2YWxpZGF0ZWQub2spIHsKCQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBl
KEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCBzdW1tYXJpemVDb25maWdWYWxpZGF0aW9uSXNz
dWVzKHZhbGlkYXRlZC5pc3N1ZXMpLCB7IGRldGFpbHM6IHsgaXNzdWVzOiB2YWxpZGF0ZWQuaXNz
dWVzIH0gfSkpOwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0IGNoYW5nZWRQYXRocyA9IGRpZmZDb25m
aWdQYXRocyhzbmFwc2hvdC5jb25maWcsIHZhbGlkYXRlZC5jb25maWcpOwoJCWNvbnN0IGFjdG9y
ID0gcmVzb2x2ZUNvbnRyb2xQbGFuZUFjdG9yKGNsaWVudCk7CgkJY29udGV4dD8ubG9nR2F0ZXdh
eT8uaW5mbyhgY29uZmlnLnBhdGNoIHdyaXRlICR7Zm9ybWF0Q29udHJvbFBsYW5lQWN0b3IoYWN0
b3IpfSBjaGFuZ2VkUGF0aHM9JHtzdW1tYXJpemVDaGFuZ2VkUGF0aHMoY2hhbmdlZFBhdGhzKX0g
cmVzdGFydFJlYXNvbj1jb25maWcucGF0Y2hgKTsKCQlhd2FpdCB3cml0ZUNvbmZpZ0ZpbGUodmFs
aWRhdGVkLmNvbmZpZywgd3JpdGVPcHRpb25zKTsKCQljb25zdCB7IHNlc3Npb25LZXksIG5vdGUs
IHJlc3RhcnREZWxheU1zLCBkZWxpdmVyeUNvbnRleHQsIHRocmVhZElkIH0gPSByZXNvbHZlQ29u
ZmlnUmVzdGFydFJlcXVlc3QocGFyYW1zKTsKCQljb25zdCBwYXlsb2FkID0gYnVpbGRDb25maWdS
ZXN0YXJ0U2VudGluZWxQYXlsb2FkKHsKCQkJa2luZDogImNvbmZpZy1wYXRjaCIsCgkJCW1vZGU6
ICJjb25maWcucGF0Y2giLAoJCQlzZXNzaW9uS2V5LAoJCQlkZWxpdmVyeUNvbnRleHQsCgkJCXRo
cmVhZElkLAoJCQlub3RlCgkJfSk7CgkJY29uc3Qgc2VudGluZWxQYXRoID0gYXdhaXQgdHJ5V3Jp
dGVSZXN0YXJ0U2VudGluZWxQYXlsb2FkKHBheWxvYWQpOwoJCWNvbnN0IHJlc3RhcnQgPSBzY2hl
ZHVsZUdhdGV3YXlTaWd1c3IxUmVzdGFydCh7CgkJCWRlbGF5TXM6IHJlc3RhcnREZWxheU1zLAoJ
CQlyZWFzb246ICJjb25maWcucGF0Y2giLAoJCQlhdWRpdDogewoJCQkJYWN0b3I6IGFjdG9yLmFj
dG9yLAoJCQkJZGV2aWNlSWQ6IGFjdG9yLmRldmljZUlkLAoJCQkJY2xpZW50SXA6IGFjdG9yLmNs
aWVudElwLAoJCQkJY2hhbmdlZFBhdGhzCgkJCX0KCQl9KTsKCQlpZiAocmVzdGFydC5jb2FsZXNj
ZWQpIGNvbnRleHQ/LmxvZ0dhdGV3YXk/Lndhcm4oYGNvbmZpZy5wYXRjaCByZXN0YXJ0IGNvYWxl
c2NlZCAke2Zvcm1hdENvbnRyb2xQbGFuZUFjdG9yKGFjdG9yKX0gZGVsYXlNcz0ke3Jlc3RhcnQu
ZGVsYXlNc31gKTsKCQlyZXNwb25kKHRydWUsIHsKCQkJb2s6IHRydWUsCgkJCXBhdGg6IGNyZWF0
ZUNvbmZpZ0lPKCkuY29uZmlnUGF0aCwKCQkJY29uZmlnOiByZWRhY3RDb25maWdPYmplY3QodmFs
aWRhdGVkLmNvbmZpZywgc2NoZW1hUGF0Y2gudWlIaW50cyksCgkJCXJlc3RhcnQsCgkJCXNlbnRp
bmVsOiB7CgkJCQlwYXRoOiBzZW50aW5lbFBhdGgsCgkJCQlwYXlsb2FkCgkJCX0KCQl9LCB2b2lk
IDApOwoJfSwKCSJjb25maWcuYXBwbHkiOiBhc3luYyAoeyBwYXJhbXMsIHJlc3BvbmQsIGNsaWVu
dCwgY29udGV4dCB9KSA9PiB7CgkJaWYgKCFhc3NlcnRWYWxpZFBhcmFtcyhwYXJhbXMsIHZhbGlk
YXRlQ29uZmlnQXBwbHlQYXJhbXMsICJjb25maWcuYXBwbHkiLCByZXNwb25kKSkgcmV0dXJuOwoJ
CWNvbnN0IHsgc25hcHNob3QsIHdyaXRlT3B0aW9ucyB9ID0gYXdhaXQgcmVhZENvbmZpZ0ZpbGVT
bmFwc2hvdEZvcldyaXRlKCk7CgkJaWYgKCFyZXF1aXJlQ29uZmlnQmFzZUhhc2gocGFyYW1zLCBz
bmFwc2hvdCwgcmVzcG9uZCkpIHJldHVybjsKCQljb25zdCBwYXJzZWQgPSBwYXJzZVZhbGlkYXRl
Q29uZmlnRnJvbVJhd09yUmVzcG9uZChwYXJhbXMsICJjb25maWcuYXBwbHkiLCBzbmFwc2hvdCwg
cmVzcG9uZCk7CgkJaWYgKCFwYXJzZWQpIHJldHVybjsKCQljb25zdCBjaGFuZ2VkUGF0aHMgPSBk
aWZmQ29uZmlnUGF0aHMoc25hcHNob3QuY29uZmlnLCBwYXJzZWQuY29uZmlnKTsKCQljb25zdCBh
Y3RvciA9IHJlc29sdmVDb250cm9sUGxhbmVBY3RvcihjbGllbnQpOwoJCWNvbnRleHQ/LmxvZ0dh
dGV3YXk/LmluZm8oYGNvbmZpZy5hcHBseSB3cml0ZSAke2Zvcm1hdENvbnRyb2xQbGFuZUFjdG9y
KGFjdG9yKX0gY2hhbmdlZFBhdGhzPSR7c3VtbWFyaXplQ2hhbmdlZFBhdGhzKGNoYW5nZWRQYXRo
cyl9IHJlc3RhcnRSZWFzb249Y29uZmlnLmFwcGx5YCk7CgkJYXdhaXQgd3JpdGVDb25maWdGaWxl
KHBhcnNlZC5jb25maWcsIHdyaXRlT3B0aW9ucyk7CgkJY29uc3QgeyBzZXNzaW9uS2V5LCBub3Rl
LCByZXN0YXJ0RGVsYXlNcywgZGVsaXZlcnlDb250ZXh0LCB0aHJlYWRJZCB9ID0gcmVzb2x2ZUNv
bmZpZ1Jlc3RhcnRSZXF1ZXN0KHBhcmFtcyk7CgkJY29uc3QgcGF5bG9hZCA9IGJ1aWxkQ29uZmln
UmVzdGFydFNlbnRpbmVsUGF5bG9hZCh7CgkJCWtpbmQ6ICJjb25maWctYXBwbHkiLAoJCQltb2Rl
OiAiY29uZmlnLmFwcGx5IiwKCQkJc2Vzc2lvbktleSwKCQkJZGVsaXZlcnlDb250ZXh0LAoJCQl0
aHJlYWRJZCwKCQkJbm90ZQoJCX0pOwoJCWNvbnN0IHNlbnRpbmVsUGF0aCA9IGF3YWl0IHRyeVdy
aXRlUmVzdGFydFNlbnRpbmVsUGF5bG9hZChwYXlsb2FkKTsKCQljb25zdCByZXN0YXJ0ID0gc2No
ZWR1bGVHYXRld2F5U2lndXNyMVJlc3RhcnQoewoJCQlkZWxheU1zOiByZXN0YXJ0RGVsYXlNcywK
CQkJcmVhc29uOiAiY29uZmlnLmFwcGx5IiwKCQkJYXVkaXQ6IHsKCQkJCWFjdG9yOiBhY3Rvci5h
Y3RvciwKCQkJCWRldmljZUlkOiBhY3Rvci5kZXZpY2VJZCwKCQkJCWNsaWVudElwOiBhY3Rvci5j
bGllbnRJcCwKCQkJCWNoYW5nZWRQYXRocwoJCQl9CgkJfSk7CgkJaWYgKHJlc3RhcnQuY29hbGVz
Y2VkKSBjb250ZXh0Py5sb2dHYXRld2F5Py53YXJuKGBjb25maWcuYXBwbHkgcmVzdGFydCBjb2Fs
ZXNjZWQgJHtmb3JtYXRDb250cm9sUGxhbmVBY3RvcihhY3Rvcil9IGRlbGF5TXM9JHtyZXN0YXJ0
LmRlbGF5TXN9YCk7CgkJcmVzcG9uZCh0cnVlLCB7CgkJCW9rOiB0cnVlLAoJCQlwYXRoOiBjcmVh
dGVDb25maWdJTygpLmNvbmZpZ1BhdGgsCgkJCWNvbmZpZzogcmVkYWN0Q29uZmlnT2JqZWN0KHBh
cnNlZC5jb25maWcsIHBhcnNlZC5zY2hlbWEudWlIaW50cyksCgkJCXJlc3RhcnQsCgkJCXNlbnRp
bmVsOiB7CgkJCQlwYXRoOiBzZW50aW5lbFBhdGgsCgkJCQlwYXlsb2FkCgkJCX0KCQl9LCB2b2lk
IDApOwoJfSwKCSJjb25maWcub3BlbkZpbGUiOiAoeyBwYXJhbXMsIHJlc3BvbmQgfSkgPT4gewoJ
CWlmICghYXNzZXJ0VmFsaWRQYXJhbXMocGFyYW1zLCB2YWxpZGF0ZUNvbmZpZ0dldFBhcmFtcywg
ImNvbmZpZy5vcGVuRmlsZSIsIHJlc3BvbmQpKSByZXR1cm47CgkJY29uc3QgY29uZmlnUGF0aCA9
IGNyZWF0ZUNvbmZpZ0lPKCkuY29uZmlnUGF0aDsKCQljb25zdCBwbGF0Zm9ybSA9IHByb2Nlc3Mu
cGxhdGZvcm07CgkJZXhlYyhgJHtwbGF0Zm9ybSA9PT0gImRhcndpbiIgPyAib3BlbiIgOiBwbGF0
Zm9ybSA9PT0gIndpbjMyIiA/ICJzdGFydCIgOiAieGRnLW9wZW4ifSAke0pTT04uc3RyaW5naWZ5
KGNvbmZpZ1BhdGgpfWAsIChlcnIpID0+IHsKCQkJaWYgKGVycikgewoJCQkJcmVzcG9uZCh0cnVl
LCB7CgkJCQkJb2s6IGZhbHNlLAoJCQkJCXBhdGg6IGNvbmZpZ1BhdGgsCgkJCQkJZXJyb3I6IGVy
ci5tZXNzYWdlCgkJCQl9LCB2b2lkIDApOwoJCQkJcmV0dXJuOwoJCQl9CgkJCXJlc3BvbmQodHJ1
ZSwgewoJCQkJb2s6IHRydWUsCgkJCQlwYXRoOiBjb25maWdQYXRoCgkJCX0sIHZvaWQgMCk7CgkJ
fSk7Cgl9Cn07Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dhdGV3YXkvc2VydmVyLW1ldGhv
ZHMvY29ubmVjdC50cwpjb25zdCBjb25uZWN0SGFuZGxlcnMgPSB7IGNvbm5lY3Q6ICh7IHJlc3Bv
bmQgfSkgPT4gewoJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMu
SU5WQUxJRF9SRVFVRVNULCAiY29ubmVjdCBpcyBvbmx5IHZhbGlkIGFzIHRoZSBmaXJzdCByZXF1
ZXN0IikpOwp9IH07Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2Nyb24vdmFsaWRhdGUtdGlt
ZXN0YW1wLnRzCmNvbnN0IE9ORV9NSU5VVEVfTVMgPSA2MCAqIDFlMzsKY29uc3QgVEVOX1lFQVJT
X01TID0gMTAgKiAzNjUuMjUgKiAyNCAqIDYwICogNjAgKiAxZTM7Ci8qKgoqIFZhbGlkYXRlcyBh
dCB0aW1lc3RhbXBzIGluIGNyb24gc2NoZWR1bGVzLgoqIFJlamVjdHMgdGltZXN0YW1wcyB0aGF0
IGFyZToKKiAtIE1vcmUgdGhhbiAxIG1pbnV0ZSBpbiB0aGUgcGFzdAoqIC0gTW9yZSB0aGFuIDEw
IHllYXJzIGluIHRoZSBmdXR1cmUKKi8KZnVuY3Rpb24gdmFsaWRhdGVTY2hlZHVsZVRpbWVzdGFt
cChzY2hlZHVsZSwgbm93TXMgPSBEYXRlLm5vdygpKSB7CglpZiAoc2NoZWR1bGUua2luZCAhPT0g
ImF0IikgcmV0dXJuIHsgb2s6IHRydWUgfTsKCWNvbnN0IGF0UmF3ID0gdHlwZW9mIHNjaGVkdWxl
LmF0ID09PSAic3RyaW5nIiA/IHNjaGVkdWxlLmF0LnRyaW0oKSA6ICIiOwoJY29uc3QgYXRNcyA9
IGF0UmF3ID8gcGFyc2VBYnNvbHV0ZVRpbWVNcyhhdFJhdykgOiBudWxsOwoJaWYgKGF0TXMgPT09
IG51bGwgfHwgIU51bWJlci5pc0Zpbml0ZShhdE1zKSkgcmV0dXJuIHsKCQlvazogZmFsc2UsCgkJ
bWVzc2FnZTogYEludmFsaWQgc2NoZWR1bGUuYXQ6IGV4cGVjdGVkIElTTy04NjAxIHRpbWVzdGFt
cCAoZ290ICR7U3RyaW5nKHNjaGVkdWxlLmF0KX0pYAoJfTsKCWNvbnN0IGRpZmZNcyA9IGF0TXMg
LSBub3dNczsKCWlmIChkaWZmTXMgPCAtT05FX01JTlVURV9NUykgewoJCWNvbnN0IG5vd0RhdGUg
PSBuZXcgRGF0ZShub3dNcykudG9JU09TdHJpbmcoKTsKCQlyZXR1cm4gewoJCQlvazogZmFsc2Us
CgkJCW1lc3NhZ2U6IGBzY2hlZHVsZS5hdCBpcyBpbiB0aGUgcGFzdDogJHtuZXcgRGF0ZShhdE1z
KS50b0lTT1N0cmluZygpfSAoJHtNYXRoLmZsb29yKC1kaWZmTXMgLyBPTkVfTUlOVVRFX01TKX0g
bWludXRlcyBhZ28pLiBDdXJyZW50IHRpbWU6ICR7bm93RGF0ZX1gCgkJfTsKCX0KCWlmIChkaWZm
TXMgPiBURU5fWUVBUlNfTVMpIHJldHVybiB7CgkJb2s6IGZhbHNlLAoJCW1lc3NhZ2U6IGBzY2hl
ZHVsZS5hdCBpcyB0b28gZmFyIGluIHRoZSBmdXR1cmU6ICR7bmV3IERhdGUoYXRNcykudG9JU09T
dHJpbmcoKX0gKCR7TWF0aC5mbG9vcihkaWZmTXMgLyAoMzY1LjI1ICogMjQgKiA2MCAqIDYwICog
MWUzKSl9IHllYXJzIGFoZWFkKS4gTWF4aW11bSBhbGxvd2VkOiAxMCB5ZWFyc2AKCX07CglyZXR1
cm4geyBvazogdHJ1ZSB9Owp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dhdGV3YXkvc2Vy
dmVyLW1ldGhvZHMvY3Jvbi50cwpjb25zdCBjcm9uSGFuZGxlcnMgPSB7Cgl3YWtlOiAoeyBwYXJh
bXMsIHJlc3BvbmQsIGNvbnRleHQgfSkgPT4gewoJCWlmICghdmFsaWRhdGVXYWtlUGFyYW1zKHBh
cmFtcykpIHsKCQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMu
SU5WQUxJRF9SRVFVRVNULCBgaW52YWxpZCB3YWtlIHBhcmFtczogJHtmb3JtYXRWYWxpZGF0aW9u
RXJyb3JzKHZhbGlkYXRlV2FrZVBhcmFtcy5lcnJvcnMpfWApKTsKCQkJcmV0dXJuOwoJCX0KCQlj
b25zdCBwID0gcGFyYW1zOwoJCXJlc3BvbmQodHJ1ZSwgY29udGV4dC5jcm9uLndha2UoewoJCQlt
b2RlOiBwLm1vZGUsCgkJCXRleHQ6IHAudGV4dAoJCX0pLCB2b2lkIDApOwoJfSwKCSJjcm9uLmxp
c3QiOiBhc3luYyAoeyBwYXJhbXMsIHJlc3BvbmQsIGNvbnRleHQgfSkgPT4gewoJCWlmICghdmFs
aWRhdGVDcm9uTGlzdFBhcmFtcyhwYXJhbXMpKSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwg
ZXJyb3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgYGludmFsaWQgY3Jvbi5saXN0
IHBhcmFtczogJHtmb3JtYXRWYWxpZGF0aW9uRXJyb3JzKHZhbGlkYXRlQ3Jvbkxpc3RQYXJhbXMu
ZXJyb3JzKX1gKSk7CgkJCXJldHVybjsKCQl9CgkJY29uc3QgcCA9IHBhcmFtczsKCQlyZXNwb25k
KHRydWUsIGF3YWl0IGNvbnRleHQuY3Jvbi5saXN0UGFnZSh7CgkJCWluY2x1ZGVEaXNhYmxlZDog
cC5pbmNsdWRlRGlzYWJsZWQsCgkJCWxpbWl0OiBwLmxpbWl0LAoJCQlvZmZzZXQ6IHAub2Zmc2V0
LAoJCQlxdWVyeTogcC5xdWVyeSwKCQkJZW5hYmxlZDogcC5lbmFibGVkLAoJCQlzb3J0Qnk6IHAu
c29ydEJ5LAoJCQlzb3J0RGlyOiBwLnNvcnREaXIKCQl9KSwgdm9pZCAwKTsKCX0sCgkiY3Jvbi5z
dGF0dXMiOiBhc3luYyAoeyBwYXJhbXMsIHJlc3BvbmQsIGNvbnRleHQgfSkgPT4gewoJCWlmICgh
dmFsaWRhdGVDcm9uU3RhdHVzUGFyYW1zKHBhcmFtcykpIHsKCQkJcmVzcG9uZChmYWxzZSwgdm9p
ZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCBgaW52YWxpZCBjcm9u
LnN0YXR1cyBwYXJhbXM6ICR7Zm9ybWF0VmFsaWRhdGlvbkVycm9ycyh2YWxpZGF0ZUNyb25TdGF0
dXNQYXJhbXMuZXJyb3JzKX1gKSk7CgkJCXJldHVybjsKCQl9CgkJcmVzcG9uZCh0cnVlLCBhd2Fp
dCBjb250ZXh0LmNyb24uc3RhdHVzKCksIHZvaWQgMCk7Cgl9LAoJImNyb24uYWRkIjogYXN5bmMg
KHsgcGFyYW1zLCByZXNwb25kLCBjb250ZXh0IH0pID0+IHsKCQljb25zdCBub3JtYWxpemVkID0g
bm9ybWFsaXplQ3JvbkpvYkNyZWF0ZShwYXJhbXMpID8/IHBhcmFtczsKCQlpZiAoIXZhbGlkYXRl
Q3JvbkFkZFBhcmFtcyhub3JtYWxpemVkKSkgewoJCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVy
cm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsIGBpbnZhbGlkIGNyb24uYWRkIHBh
cmFtczogJHtmb3JtYXRWYWxpZGF0aW9uRXJyb3JzKHZhbGlkYXRlQ3JvbkFkZFBhcmFtcy5lcnJv
cnMpfWApKTsKCQkJcmV0dXJuOwoJCX0KCQljb25zdCBqb2JDcmVhdGUgPSBub3JtYWxpemVkOwoJ
CWNvbnN0IHRpbWVzdGFtcFZhbGlkYXRpb24gPSB2YWxpZGF0ZVNjaGVkdWxlVGltZXN0YW1wKGpv
YkNyZWF0ZS5zY2hlZHVsZSk7CgkJaWYgKCF0aW1lc3RhbXBWYWxpZGF0aW9uLm9rKSB7CgkJCXJl
c3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVT
VCwgdGltZXN0YW1wVmFsaWRhdGlvbi5tZXNzYWdlKSk7CgkJCXJldHVybjsKCQl9CgkJY29uc3Qg
am9iID0gYXdhaXQgY29udGV4dC5jcm9uLmFkZChqb2JDcmVhdGUpOwoJCWNvbnRleHQubG9nR2F0
ZXdheS5pbmZvKCJjcm9uOiBqb2IgY3JlYXRlZCIsIHsKCQkJam9iSWQ6IGpvYi5pZCwKCQkJc2No
ZWR1bGU6IGpvYkNyZWF0ZS5zY2hlZHVsZQoJCX0pOwoJCXJlc3BvbmQodHJ1ZSwgam9iLCB2b2lk
IDApOwoJfSwKCSJjcm9uLnVwZGF0ZSI6IGFzeW5jICh7IHBhcmFtcywgcmVzcG9uZCwgY29udGV4
dCB9KSA9PiB7CgkJY29uc3Qgbm9ybWFsaXplZFBhdGNoID0gbm9ybWFsaXplQ3JvbkpvYlBhdGNo
KHBhcmFtcz8ucGF0Y2gpOwoJCWNvbnN0IGNhbmRpZGF0ZSA9IG5vcm1hbGl6ZWRQYXRjaCAmJiB0
eXBlb2YgcGFyYW1zID09PSAib2JqZWN0IiAmJiBwYXJhbXMgIT09IG51bGwgPyB7CgkJCS4uLnBh
cmFtcywKCQkJcGF0Y2g6IG5vcm1hbGl6ZWRQYXRjaAoJCX0gOiBwYXJhbXM7CgkJaWYgKCF2YWxp
ZGF0ZUNyb25VcGRhdGVQYXJhbXMoY2FuZGlkYXRlKSkgewoJCQlyZXNwb25kKGZhbHNlLCB2b2lk
IDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsIGBpbnZhbGlkIGNyb24u
dXBkYXRlIHBhcmFtczogJHtmb3JtYXRWYWxpZGF0aW9uRXJyb3JzKHZhbGlkYXRlQ3JvblVwZGF0
ZVBhcmFtcy5lcnJvcnMpfWApKTsKCQkJcmV0dXJuOwoJCX0KCQljb25zdCBwID0gY2FuZGlkYXRl
OwoJCWNvbnN0IGpvYklkID0gcC5pZCA/PyBwLmpvYklkOwoJCWlmICgham9iSWQpIHsKCQkJcmVz
cG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNU
LCAiaW52YWxpZCBjcm9uLnVwZGF0ZSBwYXJhbXM6IG1pc3NpbmcgaWQiKSk7CgkJCXJldHVybjsK
CQl9CgkJY29uc3QgcGF0Y2ggPSBwLnBhdGNoOwoJCWlmIChwYXRjaC5zY2hlZHVsZSkgewoJCQlj
b25zdCB0aW1lc3RhbXBWYWxpZGF0aW9uID0gdmFsaWRhdGVTY2hlZHVsZVRpbWVzdGFtcChwYXRj
aC5zY2hlZHVsZSk7CgkJCWlmICghdGltZXN0YW1wVmFsaWRhdGlvbi5vaykgewoJCQkJcmVzcG9u
ZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCB0
aW1lc3RhbXBWYWxpZGF0aW9uLm1lc3NhZ2UpKTsKCQkJCXJldHVybjsKCQkJfQoJCX0KCQljb25z
dCBqb2IgPSBhd2FpdCBjb250ZXh0LmNyb24udXBkYXRlKGpvYklkLCBwYXRjaCk7CgkJY29udGV4
dC5sb2dHYXRld2F5LmluZm8oImNyb246IGpvYiB1cGRhdGVkIiwgeyBqb2JJZCB9KTsKCQlyZXNw
b25kKHRydWUsIGpvYiwgdm9pZCAwKTsKCX0sCgkiY3Jvbi5yZW1vdmUiOiBhc3luYyAoeyBwYXJh
bXMsIHJlc3BvbmQsIGNvbnRleHQgfSkgPT4gewoJCWlmICghdmFsaWRhdGVDcm9uUmVtb3ZlUGFy
YW1zKHBhcmFtcykpIHsKCQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9y
Q29kZXMuSU5WQUxJRF9SRVFVRVNULCBgaW52YWxpZCBjcm9uLnJlbW92ZSBwYXJhbXM6ICR7Zm9y
bWF0VmFsaWRhdGlvbkVycm9ycyh2YWxpZGF0ZUNyb25SZW1vdmVQYXJhbXMuZXJyb3JzKX1gKSk7
CgkJCXJldHVybjsKCQl9CgkJY29uc3QgcCA9IHBhcmFtczsKCQljb25zdCBqb2JJZCA9IHAuaWQg
Pz8gcC5qb2JJZDsKCQlpZiAoIWpvYklkKSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJy
b3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgImludmFsaWQgY3Jvbi5yZW1vdmUg
cGFyYW1zOiBtaXNzaW5nIGlkIikpOwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0IHJlc3VsdCA9IGF3
YWl0IGNvbnRleHQuY3Jvbi5yZW1vdmUoam9iSWQpOwoJCWlmIChyZXN1bHQucmVtb3ZlZCkgY29u
dGV4dC5sb2dHYXRld2F5LmluZm8oImNyb246IGpvYiByZW1vdmVkIiwgeyBqb2JJZCB9KTsKCQly
ZXNwb25kKHRydWUsIHJlc3VsdCwgdm9pZCAwKTsKCX0sCgkiY3Jvbi5ydW4iOiBhc3luYyAoeyBw
YXJhbXMsIHJlc3BvbmQsIGNvbnRleHQgfSkgPT4gewoJCWlmICghdmFsaWRhdGVDcm9uUnVuUGFy
YW1zKHBhcmFtcykpIHsKCQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9y
Q29kZXMuSU5WQUxJRF9SRVFVRVNULCBgaW52YWxpZCBjcm9uLnJ1biBwYXJhbXM6ICR7Zm9ybWF0
VmFsaWRhdGlvbkVycm9ycyh2YWxpZGF0ZUNyb25SdW5QYXJhbXMuZXJyb3JzKX1gKSk7CgkJCXJl
dHVybjsKCQl9CgkJY29uc3QgcCA9IHBhcmFtczsKCQljb25zdCBqb2JJZCA9IHAuaWQgPz8gcC5q
b2JJZDsKCQlpZiAoIWpvYklkKSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFw
ZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgImludmFsaWQgY3Jvbi5ydW4gcGFyYW1zOiBt
aXNzaW5nIGlkIikpOwoJCQlyZXR1cm47CgkJfQoJCXJlc3BvbmQodHJ1ZSwgYXdhaXQgY29udGV4
dC5jcm9uLmVucXVldWVSdW4oam9iSWQsIHAubW9kZSA/PyAiZm9yY2UiKSwgdm9pZCAwKTsKCX0s
CgkiY3Jvbi5ydW5zIjogYXN5bmMgKHsgcGFyYW1zLCByZXNwb25kLCBjb250ZXh0IH0pID0+IHsK
CQlpZiAoIXZhbGlkYXRlQ3JvblJ1bnNQYXJhbXMocGFyYW1zKSkgewoJCQlyZXNwb25kKGZhbHNl
LCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsIGBpbnZhbGlk
IGNyb24ucnVucyBwYXJhbXM6ICR7Zm9ybWF0VmFsaWRhdGlvbkVycm9ycyh2YWxpZGF0ZUNyb25S
dW5zUGFyYW1zLmVycm9ycyl9YCkpOwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0IHAgPSBwYXJhbXM7
CgkJY29uc3QgZXhwbGljaXRTY29wZSA9IHAuc2NvcGU7CgkJY29uc3Qgam9iSWQgPSBwLmlkID8/
IHAuam9iSWQ7CgkJY29uc3Qgc2NvcGUgPSBleHBsaWNpdFNjb3BlID8/IChqb2JJZCA/ICJqb2Ii
IDogImFsbCIpOwoJCWlmIChzY29wZSA9PT0gImpvYiIgJiYgIWpvYklkKSB7CgkJCXJlc3BvbmQo
ZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgImlu
dmFsaWQgY3Jvbi5ydW5zIHBhcmFtczogbWlzc2luZyBpZCIpKTsKCQkJcmV0dXJuOwoJCX0KCQlp
ZiAoc2NvcGUgPT09ICJhbGwiKSB7CgkJCWNvbnN0IGpvYnMgPSBhd2FpdCBjb250ZXh0LmNyb24u
bGlzdCh7IGluY2x1ZGVEaXNhYmxlZDogdHJ1ZSB9KTsKCQkJY29uc3Qgam9iTmFtZUJ5SWQgPSBP
YmplY3QuZnJvbUVudHJpZXMoam9icy5maWx0ZXIoKGpvYikgPT4gdHlwZW9mIGpvYi5pZCA9PT0g
InN0cmluZyIgJiYgdHlwZW9mIGpvYi5uYW1lID09PSAic3RyaW5nIikubWFwKChqb2IpID0+IFtq
b2IuaWQsIGpvYi5uYW1lXSkpOwoJCQlyZXNwb25kKHRydWUsIGF3YWl0IHJlYWRDcm9uUnVuTG9n
RW50cmllc1BhZ2VBbGwoewoJCQkJc3RvcmVQYXRoOiBjb250ZXh0LmNyb25TdG9yZVBhdGgsCgkJ
CQlsaW1pdDogcC5saW1pdCwKCQkJCW9mZnNldDogcC5vZmZzZXQsCgkJCQlzdGF0dXNlczogcC5z
dGF0dXNlcywKCQkJCXN0YXR1czogcC5zdGF0dXMsCgkJCQlkZWxpdmVyeVN0YXR1c2VzOiBwLmRl
bGl2ZXJ5U3RhdHVzZXMsCgkJCQlkZWxpdmVyeVN0YXR1czogcC5kZWxpdmVyeVN0YXR1cywKCQkJ
CXF1ZXJ5OiBwLnF1ZXJ5LAoJCQkJc29ydERpcjogcC5zb3J0RGlyLAoJCQkJam9iTmFtZUJ5SWQK
CQkJfSksIHZvaWQgMCk7CgkJCXJldHVybjsKCQl9CgkJbGV0IGxvZ1BhdGg7CgkJdHJ5IHsKCQkJ
bG9nUGF0aCA9IHJlc29sdmVDcm9uUnVuTG9nUGF0aCh7CgkJCQlzdG9yZVBhdGg6IGNvbnRleHQu
Y3JvblN0b3JlUGF0aCwKCQkJCWpvYklkCgkJCX0pOwoJCX0gY2F0Y2ggewoJCQlyZXNwb25kKGZh
bHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsICJpbnZh
bGlkIGNyb24ucnVucyBwYXJhbXM6IGludmFsaWQgaWQiKSk7CgkJCXJldHVybjsKCQl9CgkJcmVz
cG9uZCh0cnVlLCBhd2FpdCByZWFkQ3JvblJ1bkxvZ0VudHJpZXNQYWdlKGxvZ1BhdGgsIHsKCQkJ
bGltaXQ6IHAubGltaXQsCgkJCW9mZnNldDogcC5vZmZzZXQsCgkJCWpvYklkLAoJCQlzdGF0dXNl
czogcC5zdGF0dXNlcywKCQkJc3RhdHVzOiBwLnN0YXR1cywKCQkJZGVsaXZlcnlTdGF0dXNlczog
cC5kZWxpdmVyeVN0YXR1c2VzLAoJCQlkZWxpdmVyeVN0YXR1czogcC5kZWxpdmVyeVN0YXR1cywK
CQkJcXVlcnk6IHAucXVlcnksCgkJCXNvcnREaXI6IHAuc29ydERpcgoJCX0pLCB2b2lkIDApOwoJ
fQp9OwovLyNlbmRyZWdpb24KLy8jcmVnaW9uIHNyYy9nYXRld2F5L3NlcnZlci1tZXRob2RzL2Rl
dmljZXMudHMKZnVuY3Rpb24gcmVkYWN0UGFpcmVkRGV2aWNlKGRldmljZSkgewoJY29uc3QgeyB0
b2tlbnMsIGFwcHJvdmVkU2NvcGVzOiBfYXBwcm92ZWRTY29wZXMsIC4uLnJlc3QgfSA9IGRldmlj
ZTsKCXJldHVybiB7CgkJLi4ucmVzdCwKCQl0b2tlbnM6IHN1bW1hcml6ZURldmljZVRva2Vucyh0
b2tlbnMpCgl9Owp9CmZ1bmN0aW9uIHJlc29sdmVNaXNzaW5nUmVxdWVzdGVkU2NvcGUocGFyYW1z
KSB7Cglmb3IgKGNvbnN0IHNjb3BlIG9mIHBhcmFtcy5yZXF1ZXN0ZWRTY29wZXMpIGlmICghcm9s
ZVNjb3Blc0FsbG93KHsKCQlyb2xlOiBwYXJhbXMucm9sZSwKCQlyZXF1ZXN0ZWRTY29wZXM6IFtz
Y29wZV0sCgkJYWxsb3dlZFNjb3BlczogcGFyYW1zLmNhbGxlclNjb3BlcwoJfSkpIHJldHVybiBz
Y29wZTsKCXJldHVybiBudWxsOwp9CmNvbnN0IGRldmljZUhhbmRsZXJzID0gewoJImRldmljZS5w
YWlyLmxpc3QiOiBhc3luYyAoeyBwYXJhbXMsIHJlc3BvbmQgfSkgPT4gewoJCWlmICghdmFsaWRh
dGVEZXZpY2VQYWlyTGlzdFBhcmFtcyhwYXJhbXMpKSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQg
MCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgYGludmFsaWQgZGV2aWNl
LnBhaXIubGlzdCBwYXJhbXM6ICR7Zm9ybWF0VmFsaWRhdGlvbkVycm9ycyh2YWxpZGF0ZURldmlj
ZVBhaXJMaXN0UGFyYW1zLmVycm9ycyl9YCkpOwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0IGxpc3Qg
PSBhd2FpdCBsaXN0RGV2aWNlUGFpcmluZygpOwoJCXJlc3BvbmQodHJ1ZSwgewoJCQlwZW5kaW5n
OiBsaXN0LnBlbmRpbmcsCgkJCXBhaXJlZDogbGlzdC5wYWlyZWQubWFwKChkZXZpY2UpID0+IHJl
ZGFjdFBhaXJlZERldmljZShkZXZpY2UpKQoJCX0sIHZvaWQgMCk7Cgl9LAoJImRldmljZS5wYWly
LmFwcHJvdmUiOiBhc3luYyAoeyBwYXJhbXMsIHJlc3BvbmQsIGNvbnRleHQgfSkgPT4gewoJCWlm
ICghdmFsaWRhdGVEZXZpY2VQYWlyQXBwcm92ZVBhcmFtcyhwYXJhbXMpKSB7CgkJCXJlc3BvbmQo
ZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgYGlu
dmFsaWQgZGV2aWNlLnBhaXIuYXBwcm92ZSBwYXJhbXM6ICR7Zm9ybWF0VmFsaWRhdGlvbkVycm9y
cyh2YWxpZGF0ZURldmljZVBhaXJBcHByb3ZlUGFyYW1zLmVycm9ycyl9YCkpOwoJCQlyZXR1cm47
CgkJfQoJCWNvbnN0IHsgcmVxdWVzdElkIH0gPSBwYXJhbXM7CgkJY29uc3QgYXBwcm92ZWQgPSBh
d2FpdCBhcHByb3ZlRGV2aWNlUGFpcmluZyhyZXF1ZXN0SWQpOwoJCWlmICghYXBwcm92ZWQpIHsK
CQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9S
RVFVRVNULCAidW5rbm93biByZXF1ZXN0SWQiKSk7CgkJCXJldHVybjsKCQl9CgkJY29udGV4dC5s
b2dHYXRld2F5LmluZm8oYGRldmljZSBwYWlyaW5nIGFwcHJvdmVkIGRldmljZT0ke2FwcHJvdmVk
LmRldmljZS5kZXZpY2VJZH0gcm9sZT0ke2FwcHJvdmVkLmRldmljZS5yb2xlID8/ICJ1bmtub3du
In1gKTsKCQljb250ZXh0LmJyb2FkY2FzdCgiZGV2aWNlLnBhaXIucmVzb2x2ZWQiLCB7CgkJCXJl
cXVlc3RJZCwKCQkJZGV2aWNlSWQ6IGFwcHJvdmVkLmRldmljZS5kZXZpY2VJZCwKCQkJZGVjaXNp
b246ICJhcHByb3ZlZCIsCgkJCXRzOiBEYXRlLm5vdygpCgkJfSwgeyBkcm9wSWZTbG93OiB0cnVl
IH0pOwoJCXJlc3BvbmQodHJ1ZSwgewoJCQlyZXF1ZXN0SWQsCgkJCWRldmljZTogcmVkYWN0UGFp
cmVkRGV2aWNlKGFwcHJvdmVkLmRldmljZSkKCQl9LCB2b2lkIDApOwoJfSwKCSJkZXZpY2UucGFp
ci5yZWplY3QiOiBhc3luYyAoeyBwYXJhbXMsIHJlc3BvbmQsIGNvbnRleHQgfSkgPT4gewoJCWlm
ICghdmFsaWRhdGVEZXZpY2VQYWlyUmVqZWN0UGFyYW1zKHBhcmFtcykpIHsKCQkJcmVzcG9uZChm
YWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCBgaW52
YWxpZCBkZXZpY2UucGFpci5yZWplY3QgcGFyYW1zOiAke2Zvcm1hdFZhbGlkYXRpb25FcnJvcnMo
dmFsaWRhdGVEZXZpY2VQYWlyUmVqZWN0UGFyYW1zLmVycm9ycyl9YCkpOwoJCQlyZXR1cm47CgkJ
fQoJCWNvbnN0IHsgcmVxdWVzdElkIH0gPSBwYXJhbXM7CgkJY29uc3QgcmVqZWN0ZWQgPSBhd2Fp
dCByZWplY3REZXZpY2VQYWlyaW5nKHJlcXVlc3RJZCk7CgkJaWYgKCFyZWplY3RlZCkgewoJCQly
ZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVF
U1QsICJ1bmtub3duIHJlcXVlc3RJZCIpKTsKCQkJcmV0dXJuOwoJCX0KCQljb250ZXh0LmJyb2Fk
Y2FzdCgiZGV2aWNlLnBhaXIucmVzb2x2ZWQiLCB7CgkJCXJlcXVlc3RJZCwKCQkJZGV2aWNlSWQ6
IHJlamVjdGVkLmRldmljZUlkLAoJCQlkZWNpc2lvbjogInJlamVjdGVkIiwKCQkJdHM6IERhdGUu
bm93KCkKCQl9LCB7IGRyb3BJZlNsb3c6IHRydWUgfSk7CgkJcmVzcG9uZCh0cnVlLCByZWplY3Rl
ZCwgdm9pZCAwKTsKCX0sCgkiZGV2aWNlLnBhaXIucmVtb3ZlIjogYXN5bmMgKHsgcGFyYW1zLCBy
ZXNwb25kLCBjb250ZXh0IH0pID0+IHsKCQlpZiAoIXZhbGlkYXRlRGV2aWNlUGFpclJlbW92ZVBh
cmFtcyhwYXJhbXMpKSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJv
ckNvZGVzLklOVkFMSURfUkVRVUVTVCwgYGludmFsaWQgZGV2aWNlLnBhaXIucmVtb3ZlIHBhcmFt
czogJHtmb3JtYXRWYWxpZGF0aW9uRXJyb3JzKHZhbGlkYXRlRGV2aWNlUGFpclJlbW92ZVBhcmFt
cy5lcnJvcnMpfWApKTsKCQkJcmV0dXJuOwoJCX0KCQljb25zdCB7IGRldmljZUlkIH0gPSBwYXJh
bXM7CgkJY29uc3QgcmVtb3ZlZCA9IGF3YWl0IHJlbW92ZVBhaXJlZERldmljZShkZXZpY2VJZCk7
CgkJaWYgKCFyZW1vdmVkKSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShF
cnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgInVua25vd24gZGV2aWNlSWQiKSk7CgkJCXJldHVy
bjsKCQl9CgkJY29udGV4dC5sb2dHYXRld2F5LmluZm8oYGRldmljZSBwYWlyaW5nIHJlbW92ZWQg
ZGV2aWNlPSR7cmVtb3ZlZC5kZXZpY2VJZH1gKTsKCQlyZXNwb25kKHRydWUsIHJlbW92ZWQsIHZv
aWQgMCk7Cgl9LAoJImRldmljZS50b2tlbi5yb3RhdGUiOiBhc3luYyAoeyBwYXJhbXMsIHJlc3Bv
bmQsIGNvbnRleHQsIGNsaWVudCB9KSA9PiB7CgkJaWYgKCF2YWxpZGF0ZURldmljZVRva2VuUm90
YXRlUGFyYW1zKHBhcmFtcykpIHsKCQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBl
KEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCBgaW52YWxpZCBkZXZpY2UudG9rZW4ucm90YXRl
IHBhcmFtczogJHtmb3JtYXRWYWxpZGF0aW9uRXJyb3JzKHZhbGlkYXRlRGV2aWNlVG9rZW5Sb3Rh
dGVQYXJhbXMuZXJyb3JzKX1gKSk7CgkJCXJldHVybjsKCQl9CgkJY29uc3QgeyBkZXZpY2VJZCwg
cm9sZSwgc2NvcGVzIH0gPSBwYXJhbXM7CgkJY29uc3QgcGFpcmVkRGV2aWNlID0gYXdhaXQgZ2V0
UGFpcmVkRGV2aWNlKGRldmljZUlkKTsKCQlpZiAoIXBhaXJlZERldmljZSkgewoJCQlyZXNwb25k
KGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsICJ1
bmtub3duIGRldmljZUlkL3JvbGUiKSk7CgkJCXJldHVybjsKCQl9CgkJY29uc3QgY2FsbGVyU2Nv
cGVzID0gQXJyYXkuaXNBcnJheShjbGllbnQ/LmNvbm5lY3Q/LnNjb3BlcykgPyBjbGllbnQuY29u
bmVjdC5zY29wZXMgOiBbXTsKCQljb25zdCBtaXNzaW5nU2NvcGUgPSByZXNvbHZlTWlzc2luZ1Jl
cXVlc3RlZFNjb3BlKHsKCQkJcm9sZSwKCQkJcmVxdWVzdGVkU2NvcGVzOiBub3JtYWxpemVEZXZp
Y2VBdXRoU2NvcGVzKHNjb3BlcyA/PyBwYWlyZWREZXZpY2UudG9rZW5zPy5bcm9sZS50cmltKCld
Py5zY29wZXMgPz8gcGFpcmVkRGV2aWNlLnNjb3BlcyksCgkJCWNhbGxlclNjb3BlcwoJCX0pOwoJ
CWlmIChtaXNzaW5nU2NvcGUpIHsKCQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBl
KEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCBgbWlzc2luZyBzY29wZTogJHttaXNzaW5nU2Nv
cGV9YCkpOwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0IGVudHJ5ID0gYXdhaXQgcm90YXRlRGV2aWNl
VG9rZW4oewoJCQlkZXZpY2VJZCwKCQkJcm9sZSwKCQkJc2NvcGVzCgkJfSk7CgkJaWYgKCFlbnRy
eSkgewoJCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZB
TElEX1JFUVVFU1QsICJ1bmtub3duIGRldmljZUlkL3JvbGUiKSk7CgkJCXJldHVybjsKCQl9CgkJ
Y29udGV4dC5sb2dHYXRld2F5LmluZm8oYGRldmljZSB0b2tlbiByb3RhdGVkIGRldmljZT0ke2Rl
dmljZUlkfSByb2xlPSR7ZW50cnkucm9sZX0gc2NvcGVzPSR7ZW50cnkuc2NvcGVzLmpvaW4oIiwi
KX1gKTsKCQlyZXNwb25kKHRydWUsIHsKCQkJZGV2aWNlSWQsCgkJCXJvbGU6IGVudHJ5LnJvbGUs
CgkJCXRva2VuOiBlbnRyeS50b2tlbiwKCQkJc2NvcGVzOiBlbnRyeS5zY29wZXMsCgkJCXJvdGF0
ZWRBdE1zOiBlbnRyeS5yb3RhdGVkQXRNcyA/PyBlbnRyeS5jcmVhdGVkQXRNcwoJCX0sIHZvaWQg
MCk7Cgl9LAoJImRldmljZS50b2tlbi5yZXZva2UiOiBhc3luYyAoeyBwYXJhbXMsIHJlc3BvbmQs
IGNvbnRleHQgfSkgPT4gewoJCWlmICghdmFsaWRhdGVEZXZpY2VUb2tlblJldm9rZVBhcmFtcyhw
YXJhbXMpKSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVz
LklOVkFMSURfUkVRVUVTVCwgYGludmFsaWQgZGV2aWNlLnRva2VuLnJldm9rZSBwYXJhbXM6ICR7
Zm9ybWF0VmFsaWRhdGlvbkVycm9ycyh2YWxpZGF0ZURldmljZVRva2VuUmV2b2tlUGFyYW1zLmVy
cm9ycyl9YCkpOwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0IHsgZGV2aWNlSWQsIHJvbGUgfSA9IHBh
cmFtczsKCQljb25zdCBlbnRyeSA9IGF3YWl0IHJldm9rZURldmljZVRva2VuKHsKCQkJZGV2aWNl
SWQsCgkJCXJvbGUKCQl9KTsKCQlpZiAoIWVudHJ5KSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQg
MCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgInVua25vd24gZGV2aWNl
SWQvcm9sZSIpKTsKCQkJcmV0dXJuOwoJCX0KCQljb250ZXh0LmxvZ0dhdGV3YXkuaW5mbyhgZGV2
aWNlIHRva2VuIHJldm9rZWQgZGV2aWNlPSR7ZGV2aWNlSWR9IHJvbGU9JHtlbnRyeS5yb2xlfWAp
OwoJCXJlc3BvbmQodHJ1ZSwgewoJCQlkZXZpY2VJZCwKCQkJcm9sZTogZW50cnkucm9sZSwKCQkJ
cmV2b2tlZEF0TXM6IGVudHJ5LnJldm9rZWRBdE1zID8/IERhdGUubm93KCkKCQl9LCB2b2lkIDAp
OwoJfQp9OwovLyNlbmRyZWdpb24KLy8jcmVnaW9uIHNyYy9nYXRld2F5L3NlcnZlci1tZXRob2Rz
L2RvY3Rvci50cwpjb25zdCBkb2N0b3JIYW5kbGVycyA9IHsgImRvY3Rvci5tZW1vcnkuc3RhdHVz
IjogYXN5bmMgKHsgcmVzcG9uZCB9KSA9PiB7Cgljb25zdCBjZmcgPSBsb2FkQ29uZmlnKCk7Cglj
b25zdCBhZ2VudElkID0gcmVzb2x2ZURlZmF1bHRBZ2VudElkKGNmZyk7Cgljb25zdCB7IG1hbmFn
ZXIsIGVycm9yIH0gPSBhd2FpdCBnZXRNZW1vcnlTZWFyY2hNYW5hZ2VyKHsKCQljZmcsCgkJYWdl
bnRJZCwKCQlwdXJwb3NlOiAic3RhdHVzIgoJfSk7CglpZiAoIW1hbmFnZXIpIHsKCQlyZXNwb25k
KHRydWUsIHsKCQkJYWdlbnRJZCwKCQkJZW1iZWRkaW5nOiB7CgkJCQlvazogZmFsc2UsCgkJCQll
cnJvcjogZXJyb3IgPz8gIm1lbW9yeSBzZWFyY2ggdW5hdmFpbGFibGUiCgkJCX0KCQl9LCB2b2lk
IDApOwoJCXJldHVybjsKCX0KCXRyeSB7CgkJY29uc3Qgc3RhdHVzID0gbWFuYWdlci5zdGF0dXMo
KTsKCQlsZXQgZW1iZWRkaW5nID0gYXdhaXQgbWFuYWdlci5wcm9iZUVtYmVkZGluZ0F2YWlsYWJp
bGl0eSgpOwoJCWlmICghZW1iZWRkaW5nLm9rICYmICFlbWJlZGRpbmcuZXJyb3IpIGVtYmVkZGlu
ZyA9IHsKCQkJb2s6IGZhbHNlLAoJCQllcnJvcjogIm1lbW9yeSBlbWJlZGRpbmdzIHVuYXZhaWxh
YmxlIgoJCX07CgkJcmVzcG9uZCh0cnVlLCB7CgkJCWFnZW50SWQsCgkJCXByb3ZpZGVyOiBzdGF0
dXMucHJvdmlkZXIsCgkJCWVtYmVkZGluZwoJCX0sIHZvaWQgMCk7Cgl9IGNhdGNoIChlcnIpIHsK
CQlyZXNwb25kKHRydWUsIHsKCQkJYWdlbnRJZCwKCQkJZW1iZWRkaW5nOiB7CgkJCQlvazogZmFs
c2UsCgkJCQllcnJvcjogYGdhdGV3YXkgbWVtb3J5IHByb2JlIGZhaWxlZDogJHtmb3JtYXRFcnJv
cihlcnIpfWAKCQkJfQoJCX0sIHZvaWQgMCk7Cgl9IGZpbmFsbHkgewoJCWF3YWl0IG1hbmFnZXIu
Y2xvc2U/LigpLmNhdGNoKCgpID0+IHt9KTsKCX0KfSB9OwovLyNlbmRyZWdpb24KLy8jcmVnaW9u
IHNyYy9nYXRld2F5L3NlcnZlci1tZXRob2RzL2V4ZWMtYXBwcm92YWxzLnRzCmZ1bmN0aW9uIHJl
cXVpcmVBcHByb3ZhbHNCYXNlSGFzaChwYXJhbXMsIHNuYXBzaG90LCByZXNwb25kKSB7CglpZiAo
IXNuYXBzaG90LmV4aXN0cykgcmV0dXJuIHRydWU7CglpZiAoIXNuYXBzaG90Lmhhc2gpIHsKCQly
ZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVF
U1QsICJleGVjIGFwcHJvdmFscyBiYXNlIGhhc2ggdW5hdmFpbGFibGU7IHJlLXJ1biBleGVjLmFw
cHJvdmFscy5nZXQgYW5kIHJldHJ5IikpOwoJCXJldHVybiBmYWxzZTsKCX0KCWNvbnN0IGJhc2VI
YXNoID0gcmVzb2x2ZUJhc2VIYXNoUGFyYW0ocGFyYW1zKTsKCWlmICghYmFzZUhhc2gpIHsKCQly
ZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVF
U1QsICJleGVjIGFwcHJvdmFscyBiYXNlIGhhc2ggcmVxdWlyZWQ7IHJlLXJ1biBleGVjLmFwcHJv
dmFscy5nZXQgYW5kIHJldHJ5IikpOwoJCXJldHVybiBmYWxzZTsKCX0KCWlmIChiYXNlSGFzaCAh
PT0gc25hcHNob3QuaGFzaCkgewoJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShF
cnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgImV4ZWMgYXBwcm92YWxzIGNoYW5nZWQgc2luY2Ug
bGFzdCBsb2FkOyByZS1ydW4gZXhlYy5hcHByb3ZhbHMuZ2V0IGFuZCByZXRyeSIpKTsKCQlyZXR1
cm4gZmFsc2U7Cgl9CglyZXR1cm4gdHJ1ZTsKfQpmdW5jdGlvbiByZWRhY3RFeGVjQXBwcm92YWxz
KGZpbGUpIHsKCWNvbnN0IHNvY2tldFBhdGggPSBmaWxlLnNvY2tldD8ucGF0aD8udHJpbSgpOwoJ
cmV0dXJuIHsKCQkuLi5maWxlLAoJCXNvY2tldDogc29ja2V0UGF0aCA/IHsgcGF0aDogc29ja2V0
UGF0aCB9IDogdm9pZCAwCgl9Owp9CmZ1bmN0aW9uIHRvRXhlY0FwcHJvdmFsc1BheWxvYWQoc25h
cHNob3QpIHsKCXJldHVybiB7CgkJcGF0aDogc25hcHNob3QucGF0aCwKCQlleGlzdHM6IHNuYXBz
aG90LmV4aXN0cywKCQloYXNoOiBzbmFwc2hvdC5oYXNoLAoJCWZpbGU6IHJlZGFjdEV4ZWNBcHBy
b3ZhbHMoc25hcHNob3QuZmlsZSkKCX07Cn0KZnVuY3Rpb24gcmVzb2x2ZU5vZGVJZE9yUmVzcG9u
ZChub2RlSWQsIHJlc3BvbmQpIHsKCWNvbnN0IGlkID0gbm9kZUlkLnRyaW0oKTsKCWlmICghaWQp
IHsKCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElE
X1JFUVVFU1QsICJub2RlSWQgcmVxdWlyZWQiKSk7CgkJcmV0dXJuIG51bGw7Cgl9CglyZXR1cm4g
aWQ7Cn0KY29uc3QgZXhlY0FwcHJvdmFsc0hhbmRsZXJzID0gewoJImV4ZWMuYXBwcm92YWxzLmdl
dCI6ICh7IHBhcmFtcywgcmVzcG9uZCB9KSA9PiB7CgkJaWYgKCFhc3NlcnRWYWxpZFBhcmFtcyhw
YXJhbXMsIHZhbGlkYXRlRXhlY0FwcHJvdmFsc0dldFBhcmFtcywgImV4ZWMuYXBwcm92YWxzLmdl
dCIsIHJlc3BvbmQpKSByZXR1cm47CgkJZW5zdXJlRXhlY0FwcHJvdmFscygpOwoJCXJlc3BvbmQo
dHJ1ZSwgdG9FeGVjQXBwcm92YWxzUGF5bG9hZChyZWFkRXhlY0FwcHJvdmFsc1NuYXBzaG90KCkp
LCB2b2lkIDApOwoJfSwKCSJleGVjLmFwcHJvdmFscy5zZXQiOiAoeyBwYXJhbXMsIHJlc3BvbmQg
fSkgPT4gewoJCWlmICghYXNzZXJ0VmFsaWRQYXJhbXMocGFyYW1zLCB2YWxpZGF0ZUV4ZWNBcHBy
b3ZhbHNTZXRQYXJhbXMsICJleGVjLmFwcHJvdmFscy5zZXQiLCByZXNwb25kKSkgcmV0dXJuOwoJ
CWVuc3VyZUV4ZWNBcHByb3ZhbHMoKTsKCQljb25zdCBzbmFwc2hvdCA9IHJlYWRFeGVjQXBwcm92
YWxzU25hcHNob3QoKTsKCQlpZiAoIXJlcXVpcmVBcHByb3ZhbHNCYXNlSGFzaChwYXJhbXMsIHNu
YXBzaG90LCByZXNwb25kKSkgcmV0dXJuOwoJCWNvbnN0IGluY29taW5nID0gcGFyYW1zLmZpbGU7
CgkJaWYgKCFpbmNvbWluZyB8fCB0eXBlb2YgaW5jb21pbmcgIT09ICJvYmplY3QiKSB7CgkJCXJl
c3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVT
VCwgImV4ZWMgYXBwcm92YWxzIGZpbGUgaXMgcmVxdWlyZWQiKSk7CgkJCXJldHVybjsKCQl9CgkJ
c2F2ZUV4ZWNBcHByb3ZhbHMobWVyZ2VFeGVjQXBwcm92YWxzU29ja2V0RGVmYXVsdHMoewoJCQlu
b3JtYWxpemVkOiBub3JtYWxpemVFeGVjQXBwcm92YWxzKGluY29taW5nKSwKCQkJY3VycmVudDog
c25hcHNob3QuZmlsZQoJCX0pKTsKCQlyZXNwb25kKHRydWUsIHRvRXhlY0FwcHJvdmFsc1BheWxv
YWQocmVhZEV4ZWNBcHByb3ZhbHNTbmFwc2hvdCgpKSwgdm9pZCAwKTsKCX0sCgkiZXhlYy5hcHBy
b3ZhbHMubm9kZS5nZXQiOiBhc3luYyAoeyBwYXJhbXMsIHJlc3BvbmQsIGNvbnRleHQgfSkgPT4g
ewoJCWlmICghYXNzZXJ0VmFsaWRQYXJhbXMocGFyYW1zLCB2YWxpZGF0ZUV4ZWNBcHByb3ZhbHNO
b2RlR2V0UGFyYW1zLCAiZXhlYy5hcHByb3ZhbHMubm9kZS5nZXQiLCByZXNwb25kKSkgcmV0dXJu
OwoJCWNvbnN0IHsgbm9kZUlkIH0gPSBwYXJhbXM7CgkJY29uc3QgaWQgPSByZXNvbHZlTm9kZUlk
T3JSZXNwb25kKG5vZGVJZCwgcmVzcG9uZCk7CgkJaWYgKCFpZCkgcmV0dXJuOwoJCWF3YWl0IHJl
c3BvbmRVbmF2YWlsYWJsZU9uVGhyb3cocmVzcG9uZCwgYXN5bmMgKCkgPT4gewoJCQljb25zdCBy
ZXMgPSBhd2FpdCBjb250ZXh0Lm5vZGVSZWdpc3RyeS5pbnZva2UoewoJCQkJbm9kZUlkOiBpZCwK
CQkJCWNvbW1hbmQ6ICJzeXN0ZW0uZXhlY0FwcHJvdmFscy5nZXQiLAoJCQkJcGFyYW1zOiB7fQoJ
CQl9KTsKCQkJaWYgKCFyZXNwb25kVW5hdmFpbGFibGVPbk5vZGVJbnZva2VFcnJvcihyZXNwb25k
LCByZXMpKSByZXR1cm47CgkJCXJlc3BvbmQodHJ1ZSwgcmVzLnBheWxvYWRKU09OID8gc2FmZVBh
cnNlSnNvbihyZXMucGF5bG9hZEpTT04pIDogcmVzLnBheWxvYWQsIHZvaWQgMCk7CgkJfSk7Cgl9
LAoJImV4ZWMuYXBwcm92YWxzLm5vZGUuc2V0IjogYXN5bmMgKHsgcGFyYW1zLCByZXNwb25kLCBj
b250ZXh0IH0pID0+IHsKCQlpZiAoIWFzc2VydFZhbGlkUGFyYW1zKHBhcmFtcywgdmFsaWRhdGVF
eGVjQXBwcm92YWxzTm9kZVNldFBhcmFtcywgImV4ZWMuYXBwcm92YWxzLm5vZGUuc2V0IiwgcmVz
cG9uZCkpIHJldHVybjsKCQljb25zdCB7IG5vZGVJZCwgZmlsZSwgYmFzZUhhc2ggfSA9IHBhcmFt
czsKCQljb25zdCBpZCA9IHJlc29sdmVOb2RlSWRPclJlc3BvbmQobm9kZUlkLCByZXNwb25kKTsK
CQlpZiAoIWlkKSByZXR1cm47CgkJYXdhaXQgcmVzcG9uZFVuYXZhaWxhYmxlT25UaHJvdyhyZXNw
b25kLCBhc3luYyAoKSA9PiB7CgkJCWNvbnN0IHJlcyA9IGF3YWl0IGNvbnRleHQubm9kZVJlZ2lz
dHJ5Lmludm9rZSh7CgkJCQlub2RlSWQ6IGlkLAoJCQkJY29tbWFuZDogInN5c3RlbS5leGVjQXBw
cm92YWxzLnNldCIsCgkJCQlwYXJhbXM6IHsKCQkJCQlmaWxlLAoJCQkJCWJhc2VIYXNoCgkJCQl9
CgkJCX0pOwoJCQlpZiAoIXJlc3BvbmRVbmF2YWlsYWJsZU9uTm9kZUludm9rZUVycm9yKHJlc3Bv
bmQsIHJlcykpIHJldHVybjsKCQkJcmVzcG9uZCh0cnVlLCBzYWZlUGFyc2VKc29uKHJlcy5wYXls
b2FkSlNPTiA/PyBudWxsKSwgdm9pZCAwKTsKCQl9KTsKCX0KfTsKLy8jZW5kcmVnaW9uCi8vI3Jl
Z2lvbiBzcmMvZ2F0ZXdheS9zZXJ2ZXItbWV0aG9kcy9oZWFsdGgudHMKY29uc3QgQURNSU5fU0NP
UEUkMiA9ICJvcGVyYXRvci5hZG1pbiI7CmNvbnN0IGhlYWx0aEhhbmRsZXJzID0gewoJaGVhbHRo
OiBhc3luYyAoeyByZXNwb25kLCBjb250ZXh0LCBwYXJhbXMgfSkgPT4gewoJCWNvbnN0IHsgZ2V0
SGVhbHRoQ2FjaGUsIHJlZnJlc2hIZWFsdGhTbmFwc2hvdCwgbG9nSGVhbHRoIH0gPSBjb250ZXh0
OwoJCWNvbnN0IHdhbnRzUHJvYmUgPSBwYXJhbXM/LnByb2JlID09PSB0cnVlOwoJCWNvbnN0IG5v
dyA9IERhdGUubm93KCk7CgkJY29uc3QgY2FjaGVkID0gZ2V0SGVhbHRoQ2FjaGUoKTsKCQlpZiAo
IXdhbnRzUHJvYmUgJiYgY2FjaGVkICYmIG5vdyAtIGNhY2hlZC50cyA8IDZlNCkgewoJCQlyZXNw
b25kKHRydWUsIGNhY2hlZCwgdm9pZCAwLCB7IGNhY2hlZDogdHJ1ZSB9KTsKCQkJcmVmcmVzaEhl
YWx0aFNuYXBzaG90KHsgcHJvYmU6IGZhbHNlIH0pLmNhdGNoKChlcnIpID0+IGxvZ0hlYWx0aC5l
cnJvcihgYmFja2dyb3VuZCBoZWFsdGggcmVmcmVzaCBmYWlsZWQ6ICR7Zm9ybWF0RXJyb3IoZXJy
KX1gKSk7CgkJCXJldHVybjsKCQl9CgkJdHJ5IHsKCQkJcmVzcG9uZCh0cnVlLCBhd2FpdCByZWZy
ZXNoSGVhbHRoU25hcHNob3QoeyBwcm9iZTogd2FudHNQcm9iZSB9KSwgdm9pZCAwKTsKCQl9IGNh
dGNoIChlcnIpIHsKCQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29k
ZXMuVU5BVkFJTEFCTEUsIGZvcm1hdEZvckxvZyhlcnIpKSk7CgkJfQoJfSwKCXN0YXR1czogYXN5
bmMgKHsgcmVzcG9uZCwgY2xpZW50IH0pID0+IHsKCQlyZXNwb25kKHRydWUsIGF3YWl0IGdldFN0
YXR1c1N1bW1hcnkoeyBpbmNsdWRlU2Vuc2l0aXZlOiAoQXJyYXkuaXNBcnJheShjbGllbnQ/LmNv
bm5lY3Q/LnNjb3BlcykgPyBjbGllbnQuY29ubmVjdC5zY29wZXMgOiBbXSkuaW5jbHVkZXMoQURN
SU5fU0NPUEUkMikgfSksIHZvaWQgMCk7Cgl9Cn07Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3Jj
L2dhdGV3YXkvc2VydmVyLW1ldGhvZHMvbG9ncy50cwpjb25zdCBERUZBVUxUX0xJTUlUID0gNTAw
Owpjb25zdCBERUZBVUxUX01BWF9CWVRFUyA9IDI1ZTQ7CmNvbnN0IE1BWF9MSU1JVCA9IDVlMzsK
Y29uc3QgTUFYX0JZVEVTID0gMWU2Owpjb25zdCBST0xMSU5HX0xPR19SRSA9IC9eb3BlbmNsYXct
XGR7NH0tXGR7Mn0tXGR7Mn1cLmxvZyQvOwpmdW5jdGlvbiBpc1JvbGxpbmdMb2dGaWxlKGZpbGUp
IHsKCXJldHVybiBST0xMSU5HX0xPR19SRS50ZXN0KHBhdGguYmFzZW5hbWUoZmlsZSkpOwp9CmFz
eW5jIGZ1bmN0aW9uIHJlc29sdmVMb2dGaWxlKGZpbGUpIHsKCWlmIChhd2FpdCBmcyQxLnN0YXQo
ZmlsZSkuY2F0Y2goKCkgPT4gbnVsbCkpIHJldHVybiBmaWxlOwoJaWYgKCFpc1JvbGxpbmdMb2dG
aWxlKGZpbGUpKSByZXR1cm4gZmlsZTsKCWNvbnN0IGRpciA9IHBhdGguZGlybmFtZShmaWxlKTsK
CWNvbnN0IGVudHJpZXMgPSBhd2FpdCBmcyQxLnJlYWRkaXIoZGlyLCB7IHdpdGhGaWxlVHlwZXM6
IHRydWUgfSkuY2F0Y2goKCkgPT4gbnVsbCk7CglpZiAoIWVudHJpZXMpIHJldHVybiBmaWxlOwoJ
cmV0dXJuIChhd2FpdCBQcm9taXNlLmFsbChlbnRyaWVzLmZpbHRlcigoZW50cnkpID0+IGVudHJ5
LmlzRmlsZSgpICYmIFJPTExJTkdfTE9HX1JFLnRlc3QoZW50cnkubmFtZSkpLm1hcChhc3luYyAo
ZW50cnkpID0+IHsKCQljb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihkaXIsIGVudHJ5Lm5hbWUp
OwoJCWNvbnN0IGZpbGVTdGF0ID0gYXdhaXQgZnMkMS5zdGF0KGZ1bGxQYXRoKS5jYXRjaCgoKSA9
PiBudWxsKTsKCQlyZXR1cm4gZmlsZVN0YXQgPyB7CgkJCXBhdGg6IGZ1bGxQYXRoLAoJCQltdGlt
ZU1zOiBmaWxlU3RhdC5tdGltZU1zCgkJfSA6IG51bGw7Cgl9KSkpLmZpbHRlcigoZW50cnkpID0+
IEJvb2xlYW4oZW50cnkpKS50b1NvcnRlZCgoYSwgYikgPT4gYi5tdGltZU1zIC0gYS5tdGltZU1z
KVswXT8ucGF0aCA/PyBmaWxlOwp9CmFzeW5jIGZ1bmN0aW9uIHJlYWRMb2dTbGljZShwYXJhbXMp
IHsKCWNvbnN0IHN0YXQgPSBhd2FpdCBmcyQxLnN0YXQocGFyYW1zLmZpbGUpLmNhdGNoKCgpID0+
IG51bGwpOwoJaWYgKCFzdGF0KSByZXR1cm4gewoJCWN1cnNvcjogMCwKCQlzaXplOiAwLAoJCWxp
bmVzOiBbXSwKCQl0cnVuY2F0ZWQ6IGZhbHNlLAoJCXJlc2V0OiBmYWxzZQoJfTsKCWNvbnN0IHNp
emUgPSBzdGF0LnNpemU7Cgljb25zdCBtYXhCeXRlcyA9IGNsYW1wKHBhcmFtcy5tYXhCeXRlcywg
MSwgTUFYX0JZVEVTKTsKCWNvbnN0IGxpbWl0ID0gY2xhbXAocGFyYW1zLmxpbWl0LCAxLCBNQVhf
TElNSVQpOwoJbGV0IGN1cnNvciA9IHR5cGVvZiBwYXJhbXMuY3Vyc29yID09PSAibnVtYmVyIiAm
JiBOdW1iZXIuaXNGaW5pdGUocGFyYW1zLmN1cnNvcikgPyBNYXRoLm1heCgwLCBNYXRoLmZsb29y
KHBhcmFtcy5jdXJzb3IpKSA6IHZvaWQgMDsKCWxldCByZXNldCA9IGZhbHNlOwoJbGV0IHRydW5j
YXRlZCA9IGZhbHNlOwoJbGV0IHN0YXJ0ID0gMDsKCWlmIChjdXJzb3IgIT0gbnVsbCkgaWYgKGN1
cnNvciA+IHNpemUpIHsKCQlyZXNldCA9IHRydWU7CgkJc3RhcnQgPSBNYXRoLm1heCgwLCBzaXpl
IC0gbWF4Qnl0ZXMpOwoJCXRydW5jYXRlZCA9IHN0YXJ0ID4gMDsKCX0gZWxzZSB7CgkJc3RhcnQg
PSBjdXJzb3I7CgkJaWYgKHNpemUgLSBzdGFydCA+IG1heEJ5dGVzKSB7CgkJCXJlc2V0ID0gdHJ1
ZTsKCQkJdHJ1bmNhdGVkID0gdHJ1ZTsKCQkJc3RhcnQgPSBNYXRoLm1heCgwLCBzaXplIC0gbWF4
Qnl0ZXMpOwoJCX0KCX0KCWVsc2UgewoJCXN0YXJ0ID0gTWF0aC5tYXgoMCwgc2l6ZSAtIG1heEJ5
dGVzKTsKCQl0cnVuY2F0ZWQgPSBzdGFydCA+IDA7Cgl9CglpZiAoc2l6ZSA9PT0gMCB8fCBzaXpl
IDw9IHN0YXJ0KSByZXR1cm4gewoJCWN1cnNvcjogc2l6ZSwKCQlzaXplLAoJCWxpbmVzOiBbXSwK
CQl0cnVuY2F0ZWQsCgkJcmVzZXQKCX07Cgljb25zdCBoYW5kbGUgPSBhd2FpdCBmcyQxLm9wZW4o
cGFyYW1zLmZpbGUsICJyIik7Cgl0cnkgewoJCWxldCBwcmVmaXggPSAiIjsKCQlpZiAoc3RhcnQg
PiAwKSB7CgkJCWNvbnN0IHByZWZpeEJ1ZiA9IEJ1ZmZlci5hbGxvYygxKTsKCQkJY29uc3QgcHJl
Zml4UmVhZCA9IGF3YWl0IGhhbmRsZS5yZWFkKHByZWZpeEJ1ZiwgMCwgMSwgc3RhcnQgLSAxKTsK
CQkJcHJlZml4ID0gcHJlZml4QnVmLnRvU3RyaW5nKCJ1dGY4IiwgMCwgcHJlZml4UmVhZC5ieXRl
c1JlYWQpOwoJCX0KCQljb25zdCBsZW5ndGggPSBNYXRoLm1heCgwLCBzaXplIC0gc3RhcnQpOwoJ
CWNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYyhsZW5ndGgpOwoJCWNvbnN0IHJlYWRSZXN1bHQg
PSBhd2FpdCBoYW5kbGUucmVhZChidWZmZXIsIDAsIGxlbmd0aCwgc3RhcnQpOwoJCWxldCBsaW5l
cyA9IGJ1ZmZlci50b1N0cmluZygidXRmOCIsIDAsIHJlYWRSZXN1bHQuYnl0ZXNSZWFkKS5zcGxp
dCgiXG4iKTsKCQlpZiAoc3RhcnQgPiAwICYmIHByZWZpeCAhPT0gIlxuIikgbGluZXMgPSBsaW5l
cy5zbGljZSgxKTsKCQlpZiAobGluZXMubGVuZ3RoID4gMCAmJiBsaW5lc1tsaW5lcy5sZW5ndGgg
LSAxXSA9PT0gIiIpIGxpbmVzID0gbGluZXMuc2xpY2UoMCwgLTEpOwoJCWlmIChsaW5lcy5sZW5n
dGggPiBsaW1pdCkgbGluZXMgPSBsaW5lcy5zbGljZShsaW5lcy5sZW5ndGggLSBsaW1pdCk7CgkJ
Y3Vyc29yID0gc2l6ZTsKCQlyZXR1cm4gewoJCQljdXJzb3IsCgkJCXNpemUsCgkJCWxpbmVzLAoJ
CQl0cnVuY2F0ZWQsCgkJCXJlc2V0CgkJfTsKCX0gZmluYWxseSB7CgkJYXdhaXQgaGFuZGxlLmNs
b3NlKCk7Cgl9Cn0KY29uc3QgbG9nc0hhbmRsZXJzID0geyAibG9ncy50YWlsIjogYXN5bmMgKHsg
cGFyYW1zLCByZXNwb25kIH0pID0+IHsKCWlmICghdmFsaWRhdGVMb2dzVGFpbFBhcmFtcyhwYXJh
bXMpKSB7CgkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5W
QUxJRF9SRVFVRVNULCBgaW52YWxpZCBsb2dzLnRhaWwgcGFyYW1zOiAke2Zvcm1hdFZhbGlkYXRp
b25FcnJvcnModmFsaWRhdGVMb2dzVGFpbFBhcmFtcy5lcnJvcnMpfWApKTsKCQlyZXR1cm47Cgl9
Cgljb25zdCBwID0gcGFyYW1zOwoJY29uc3QgY29uZmlndXJlZEZpbGUgPSBnZXRSZXNvbHZlZExv
Z2dlclNldHRpbmdzKCkuZmlsZTsKCXRyeSB7CgkJY29uc3QgZmlsZSA9IGF3YWl0IHJlc29sdmVM
b2dGaWxlKGNvbmZpZ3VyZWRGaWxlKTsKCQlyZXNwb25kKHRydWUsIHsKCQkJZmlsZSwKCQkJLi4u
YXdhaXQgcmVhZExvZ1NsaWNlKHsKCQkJCWZpbGUsCgkJCQljdXJzb3I6IHAuY3Vyc29yLAoJCQkJ
bGltaXQ6IHAubGltaXQgPz8gREVGQVVMVF9MSU1JVCwKCQkJCW1heEJ5dGVzOiBwLm1heEJ5dGVz
ID8/IERFRkFVTFRfTUFYX0JZVEVTCgkJCX0pCgkJfSwgdm9pZCAwKTsKCX0gY2F0Y2ggKGVycikg
ewoJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLlVOQVZBSUxB
QkxFLCBgbG9nIHJlYWQgZmFpbGVkOiAke1N0cmluZyhlcnIpfWApKTsKCX0KfSB9OwovLyNlbmRy
ZWdpb24KLy8jcmVnaW9uIHNyYy9nYXRld2F5L3NlcnZlci1tZXRob2RzL21vZGVscy50cwpjb25z
dCBtb2RlbHNIYW5kbGVycyA9IHsgIm1vZGVscy5saXN0IjogYXN5bmMgKHsgcGFyYW1zLCByZXNw
b25kLCBjb250ZXh0IH0pID0+IHsKCWlmICghdmFsaWRhdGVNb2RlbHNMaXN0UGFyYW1zKHBhcmFt
cykpIHsKCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZB
TElEX1JFUVVFU1QsIGBpbnZhbGlkIG1vZGVscy5saXN0IHBhcmFtczogJHtmb3JtYXRWYWxpZGF0
aW9uRXJyb3JzKHZhbGlkYXRlTW9kZWxzTGlzdFBhcmFtcy5lcnJvcnMpfWApKTsKCQlyZXR1cm47
Cgl9Cgl0cnkgewoJCWNvbnN0IGNhdGFsb2cgPSBhd2FpdCBjb250ZXh0LmxvYWRHYXRld2F5TW9k
ZWxDYXRhbG9nKCk7CgkJY29uc3QgeyBhbGxvd2VkQ2F0YWxvZyB9ID0gYnVpbGRBbGxvd2VkTW9k
ZWxTZXQoewoJCQljZmc6IGxvYWRDb25maWcoKSwKCQkJY2F0YWxvZywKCQkJZGVmYXVsdFByb3Zp
ZGVyOiBERUZBVUxUX1BST1ZJREVSCgkJfSk7CgkJcmVzcG9uZCh0cnVlLCB7IG1vZGVsczogYWxs
b3dlZENhdGFsb2cubGVuZ3RoID4gMCA/IGFsbG93ZWRDYXRhbG9nIDogY2F0YWxvZyB9LCB2b2lk
IDApOwoJfSBjYXRjaCAoZXJyKSB7CgkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBl
KEVycm9yQ29kZXMuVU5BVkFJTEFCTEUsIFN0cmluZyhlcnIpKSk7Cgl9Cn0gfTsKLy8jZW5kcmVn
aW9uCi8vI3JlZ2lvbiBzcmMvZ2F0ZXdheS9ub2RlLXBlbmRpbmctd29yay50cwpjb25zdCBERUZB
VUxUX1NUQVRVU19JVEVNX0lEID0gImJhc2VsaW5lLXN0YXR1cyI7CmNvbnN0IERFRkFVTFRfU1RB
VFVTX1BSSU9SSVRZID0gImRlZmF1bHQiOwpjb25zdCBERUZBVUxUX1BSSU9SSVRZID0gIm5vcm1h
bCI7CmNvbnN0IERFRkFVTFRfTUFYX0lURU1TID0gNDsKY29uc3QgTUFYX0lURU1TID0gMTA7CmNv
bnN0IFBSSU9SSVRZX1JBTksgPSB7CgloaWdoOiAzLAoJbm9ybWFsOiAyLAoJZGVmYXVsdDogMQp9
Owpjb25zdCBzdGF0ZUJ5Tm9kZUlkID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKZnVuY3Rp
b24gZ2V0T3JDcmVhdGVTdGF0ZShub2RlSWQpIHsKCWxldCBzdGF0ZSA9IHN0YXRlQnlOb2RlSWQu
Z2V0KG5vZGVJZCk7CglpZiAoIXN0YXRlKSB7CgkJc3RhdGUgPSB7CgkJCXJldmlzaW9uOiAwLAoJ
CQlpdGVtc0J5SWQ6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkKCQl9OwoJCXN0YXRlQnlOb2Rl
SWQuc2V0KG5vZGVJZCwgc3RhdGUpOwoJfQoJcmV0dXJuIHN0YXRlOwp9CmZ1bmN0aW9uIHBydW5l
RXhwaXJlZChzdGF0ZSwgbm93TXMpIHsKCWxldCBjaGFuZ2VkID0gZmFsc2U7Cglmb3IgKGNvbnN0
IFtpZCwgaXRlbV0gb2Ygc3RhdGUuaXRlbXNCeUlkKSBpZiAoaXRlbS5leHBpcmVzQXRNcyAhPT0g
bnVsbCAmJiBpdGVtLmV4cGlyZXNBdE1zIDw9IG5vd01zKSB7CgkJc3RhdGUuaXRlbXNCeUlkLmRl
bGV0ZShpZCk7CgkJY2hhbmdlZCA9IHRydWU7Cgl9CglpZiAoY2hhbmdlZCkgc3RhdGUucmV2aXNp
b24gKz0gMTsKCXJldHVybiBjaGFuZ2VkOwp9CmZ1bmN0aW9uIHNvcnRlZEl0ZW1zKHN0YXRlKSB7
CglyZXR1cm4gWy4uLnN0YXRlLml0ZW1zQnlJZC52YWx1ZXMoKV0udG9Tb3J0ZWQoKGEsIGIpID0+
IHsKCQljb25zdCBwcmlvcml0eURlbHRhID0gUFJJT1JJVFlfUkFOS1tiLnByaW9yaXR5XSAtIFBS
SU9SSVRZX1JBTktbYS5wcmlvcml0eV07CgkJaWYgKHByaW9yaXR5RGVsdGEgIT09IDApIHJldHVy
biBwcmlvcml0eURlbHRhOwoJCWlmIChhLmNyZWF0ZWRBdE1zICE9PSBiLmNyZWF0ZWRBdE1zKSBy
ZXR1cm4gYS5jcmVhdGVkQXRNcyAtIGIuY3JlYXRlZEF0TXM7CgkJcmV0dXJuIGEuaWQubG9jYWxl
Q29tcGFyZShiLmlkKTsKCX0pOwp9CmZ1bmN0aW9uIG1ha2VCYXNlbGluZVN0YXR1c0l0ZW0obm93
TXMpIHsKCXJldHVybiB7CgkJaWQ6IERFRkFVTFRfU1RBVFVTX0lURU1fSUQsCgkJdHlwZTogInN0
YXR1cy5yZXF1ZXN0IiwKCQlwcmlvcml0eTogREVGQVVMVF9TVEFUVVNfUFJJT1JJVFksCgkJY3Jl
YXRlZEF0TXM6IG5vd01zLAoJCWV4cGlyZXNBdE1zOiBudWxsCgl9Owp9CmZ1bmN0aW9uIGVucXVl
dWVOb2RlUGVuZGluZ1dvcmsocGFyYW1zKSB7Cgljb25zdCBub2RlSWQgPSBwYXJhbXMubm9kZUlk
LnRyaW0oKTsKCWlmICghbm9kZUlkKSB0aHJvdyBuZXcgRXJyb3IoIm5vZGVJZCByZXF1aXJlZCIp
OwoJY29uc3Qgbm93TXMgPSBEYXRlLm5vdygpOwoJY29uc3Qgc3RhdGUgPSBnZXRPckNyZWF0ZVN0
YXRlKG5vZGVJZCk7CglwcnVuZUV4cGlyZWQoc3RhdGUsIG5vd01zKTsKCWNvbnN0IGV4aXN0aW5n
ID0gWy4uLnN0YXRlLml0ZW1zQnlJZC52YWx1ZXMoKV0uZmluZCgoaXRlbSkgPT4gaXRlbS50eXBl
ID09PSBwYXJhbXMudHlwZSk7CglpZiAoZXhpc3RpbmcpIHJldHVybiB7CgkJcmV2aXNpb246IHN0
YXRlLnJldmlzaW9uLAoJCWl0ZW06IGV4aXN0aW5nLAoJCWRlZHVwZWQ6IHRydWUKCX07Cgljb25z
dCBpdGVtID0gewoJCWlkOiByYW5kb21VVUlEKCksCgkJdHlwZTogcGFyYW1zLnR5cGUsCgkJcHJp
b3JpdHk6IHBhcmFtcy5wcmlvcml0eSA/PyBERUZBVUxUX1BSSU9SSVRZLAoJCWNyZWF0ZWRBdE1z
OiBub3dNcywKCQlleHBpcmVzQXRNczogdHlwZW9mIHBhcmFtcy5leHBpcmVzSW5NcyA9PT0gIm51
bWJlciIgJiYgTnVtYmVyLmlzRmluaXRlKHBhcmFtcy5leHBpcmVzSW5NcykgPyBub3dNcyArIE1h
dGgubWF4KDFlMywgTWF0aC50cnVuYyhwYXJhbXMuZXhwaXJlc0luTXMpKSA6IG51bGwsCgkJLi4u
cGFyYW1zLnBheWxvYWQgPyB7IHBheWxvYWQ6IHBhcmFtcy5wYXlsb2FkIH0gOiB7fQoJfTsKCXN0
YXRlLml0ZW1zQnlJZC5zZXQoaXRlbS5pZCwgaXRlbSk7CglzdGF0ZS5yZXZpc2lvbiArPSAxOwoJ
cmV0dXJuIHsKCQlyZXZpc2lvbjogc3RhdGUucmV2aXNpb24sCgkJaXRlbSwKCQlkZWR1cGVkOiBm
YWxzZQoJfTsKfQpmdW5jdGlvbiBkcmFpbk5vZGVQZW5kaW5nV29yayhub2RlSWQsIG9wdHMgPSB7
fSkgewoJY29uc3Qgbm9ybWFsaXplZE5vZGVJZCA9IG5vZGVJZC50cmltKCk7CglpZiAoIW5vcm1h
bGl6ZWROb2RlSWQpIHJldHVybiB7CgkJcmV2aXNpb246IDAsCgkJaXRlbXM6IFtdLAoJCWhhc01v
cmU6IGZhbHNlCgl9OwoJY29uc3Qgbm93TXMgPSBvcHRzLm5vd01zID8/IERhdGUubm93KCk7Cglj
b25zdCBzdGF0ZSA9IHN0YXRlQnlOb2RlSWQuZ2V0KG5vcm1hbGl6ZWROb2RlSWQpOwoJY29uc3Qg
cmV2aXNpb24gPSBzdGF0ZT8ucmV2aXNpb24gPz8gMDsKCWlmIChzdGF0ZSkgcHJ1bmVFeHBpcmVk
KHN0YXRlLCBub3dNcyk7Cgljb25zdCBtYXhJdGVtcyA9IE1hdGgubWluKE1BWF9JVEVNUywgTWF0
aC5tYXgoMSwgTWF0aC50cnVuYyhvcHRzLm1heEl0ZW1zID8/IERFRkFVTFRfTUFYX0lURU1TKSkp
OwoJY29uc3QgZXhwbGljaXRJdGVtcyA9IHN0YXRlID8gc29ydGVkSXRlbXMoc3RhdGUpIDogW107
Cgljb25zdCBpdGVtcyA9IGV4cGxpY2l0SXRlbXMuc2xpY2UoMCwgbWF4SXRlbXMpOwoJY29uc3Qg
aGFzRXhwbGljaXRTdGF0dXMgPSBleHBsaWNpdEl0ZW1zLnNvbWUoKGl0ZW0pID0+IGl0ZW0udHlw
ZSA9PT0gInN0YXR1cy5yZXF1ZXN0Iik7Cgljb25zdCBpbmNsdWRlQmFzZWxpbmUgPSBvcHRzLmlu
Y2x1ZGVEZWZhdWx0U3RhdHVzICE9PSBmYWxzZSAmJiAhaGFzRXhwbGljaXRTdGF0dXM7CglpZiAo
aW5jbHVkZUJhc2VsaW5lICYmIGl0ZW1zLmxlbmd0aCA8IG1heEl0ZW1zKSBpdGVtcy5wdXNoKG1h
a2VCYXNlbGluZVN0YXR1c0l0ZW0obm93TXMpKTsKCWNvbnN0IGV4cGxpY2l0UmV0dXJuZWRDb3Vu
dCA9IGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5pZCAhPT0gREVGQVVMVF9TVEFUVVNfSVRF
TV9JRCkubGVuZ3RoOwoJY29uc3QgYmFzZWxpbmVJbmNsdWRlZCA9IGl0ZW1zLnNvbWUoKGl0ZW0p
ID0+IGl0ZW0uaWQgPT09IERFRkFVTFRfU1RBVFVTX0lURU1fSUQpOwoJcmV0dXJuIHsKCQlyZXZp
c2lvbiwKCQlpdGVtcywKCQloYXNNb3JlOiBleHBsaWNpdEl0ZW1zLmxlbmd0aCA+IGV4cGxpY2l0
UmV0dXJuZWRDb3VudCB8fCBpbmNsdWRlQmFzZWxpbmUgJiYgIWJhc2VsaW5lSW5jbHVkZWQKCX07
Cn0KLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvZ2F0ZXdheS9jYW52YXMtY2FwYWJpbGl0eS50
cwpjb25zdCBDQU5WQVNfQ0FQQUJJTElUWV9QQVRIX1BSRUZJWCA9ICIvX19vcGVuY2xhd19fL2Nh
cCI7CmNvbnN0IENBTlZBU19DQVBBQklMSVRZX1FVRVJZX1BBUkFNID0gIm9jX2NhcCI7CmNvbnN0
IENBTlZBU19DQVBBQklMSVRZX1RUTF9NUyA9IDEwICogNmU0OwpmdW5jdGlvbiBub3JtYWxpemVD
YXBhYmlsaXR5KHJhdykgewoJY29uc3QgdHJpbW1lZCA9IHJhdz8udHJpbSgpOwoJcmV0dXJuIHRy
aW1tZWQgPyB0cmltbWVkIDogdm9pZCAwOwp9CmZ1bmN0aW9uIG1pbnRDYW52YXNDYXBhYmlsaXR5
VG9rZW4oKSB7CglyZXR1cm4gcmFuZG9tQnl0ZXMoMTgpLnRvU3RyaW5nKCJiYXNlNjR1cmwiKTsK
fQpmdW5jdGlvbiBidWlsZENhbnZhc1Njb3BlZEhvc3RVcmwoYmFzZVVybCwgY2FwYWJpbGl0eSkg
ewoJY29uc3Qgbm9ybWFsaXplZENhcGFiaWxpdHkgPSBub3JtYWxpemVDYXBhYmlsaXR5KGNhcGFi
aWxpdHkpOwoJaWYgKCFub3JtYWxpemVkQ2FwYWJpbGl0eSkgcmV0dXJuOwoJdHJ5IHsKCQljb25z
dCB1cmwgPSBuZXcgVVJMKGJhc2VVcmwpOwoJCXVybC5wYXRobmFtZSA9IGAke3VybC5wYXRobmFt
ZS5yZXBsYWNlKC9cLyskLywgIiIpfSR7YCR7Q0FOVkFTX0NBUEFCSUxJVFlfUEFUSF9QUkVGSVh9
LyR7ZW5jb2RlVVJJQ29tcG9uZW50KG5vcm1hbGl6ZWRDYXBhYmlsaXR5KX1gfWA7CgkJdXJsLnNl
YXJjaCA9ICIiOwoJCXVybC5oYXNoID0gIiI7CgkJcmV0dXJuIHVybC50b1N0cmluZygpLnJlcGxh
Y2UoL1wvJC8sICIiKTsKCX0gY2F0Y2ggewoJCXJldHVybjsKCX0KfQpmdW5jdGlvbiBub3JtYWxp
emVDYW52YXNTY29wZWRVcmwocmF3VXJsKSB7Cgljb25zdCB1cmwgPSBuZXcgVVJMKHJhd1VybCwg
Imh0dHA6Ly9sb2NhbGhvc3QiKTsKCWNvbnN0IHByZWZpeCA9IGAke0NBTlZBU19DQVBBQklMSVRZ
X1BBVEhfUFJFRklYfS9gOwoJbGV0IHNjb3BlZFBhdGggPSBmYWxzZTsKCWxldCBtYWxmb3JtZWRT
Y29wZWRQYXRoID0gZmFsc2U7CglsZXQgY2FwYWJpbGl0eUZyb21QYXRoOwoJbGV0IHJld3JpdHRl
blVybDsKCWlmICh1cmwucGF0aG5hbWUuc3RhcnRzV2l0aChwcmVmaXgpKSB7CgkJc2NvcGVkUGF0
aCA9IHRydWU7CgkJY29uc3QgcmVtYWluZGVyID0gdXJsLnBhdGhuYW1lLnNsaWNlKHByZWZpeC5s
ZW5ndGgpOwoJCWNvbnN0IHNsYXNoSW5kZXggPSByZW1haW5kZXIuaW5kZXhPZigiLyIpOwoJCWlm
IChzbGFzaEluZGV4IDw9IDApIG1hbGZvcm1lZFNjb3BlZFBhdGggPSB0cnVlOwoJCWVsc2UgewoJ
CQljb25zdCBlbmNvZGVkQ2FwYWJpbGl0eSA9IHJlbWFpbmRlci5zbGljZSgwLCBzbGFzaEluZGV4
KTsKCQkJY29uc3QgY2Fub25pY2FsUGF0aCA9IHJlbWFpbmRlci5zbGljZShzbGFzaEluZGV4KSB8
fCAiLyI7CgkJCWxldCBkZWNvZGVkOwoJCQl0cnkgewoJCQkJZGVjb2RlZCA9IGRlY29kZVVSSUNv
bXBvbmVudChlbmNvZGVkQ2FwYWJpbGl0eSk7CgkJCX0gY2F0Y2ggewoJCQkJbWFsZm9ybWVkU2Nv
cGVkUGF0aCA9IHRydWU7CgkJCX0KCQkJY2FwYWJpbGl0eUZyb21QYXRoID0gbm9ybWFsaXplQ2Fw
YWJpbGl0eShkZWNvZGVkKTsKCQkJaWYgKCFjYXBhYmlsaXR5RnJvbVBhdGggfHwgIWNhbm9uaWNh
bFBhdGguc3RhcnRzV2l0aCgiLyIpKSBtYWxmb3JtZWRTY29wZWRQYXRoID0gdHJ1ZTsKCQkJZWxz
ZSB7CgkJCQl1cmwucGF0aG5hbWUgPSBjYW5vbmljYWxQYXRoOwoJCQkJaWYgKCF1cmwuc2VhcmNo
UGFyYW1zLmhhcygib2NfY2FwIikpIHVybC5zZWFyY2hQYXJhbXMuc2V0KENBTlZBU19DQVBBQklM
SVRZX1FVRVJZX1BBUkFNLCBjYXBhYmlsaXR5RnJvbVBhdGgpOwoJCQkJcmV3cml0dGVuVXJsID0g
YCR7dXJsLnBhdGhuYW1lfSR7dXJsLnNlYXJjaH1gOwoJCQl9CgkJfQoJfQoJY29uc3QgY2FwYWJp
bGl0eSA9IGNhcGFiaWxpdHlGcm9tUGF0aCA/PyBub3JtYWxpemVDYXBhYmlsaXR5KHVybC5zZWFy
Y2hQYXJhbXMuZ2V0KCJvY19jYXAiKSk7CglyZXR1cm4gewoJCXBhdGhuYW1lOiB1cmwucGF0aG5h
bWUsCgkJY2FwYWJpbGl0eSwKCQlyZXdyaXR0ZW5VcmwsCgkJc2NvcGVkUGF0aCwKCQltYWxmb3Jt
ZWRTY29wZWRQYXRoCgl9Owp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dhdGV3YXkvbm9k
ZS1pbnZva2Utc3lzdGVtLXJ1bi1hcHByb3ZhbC1lcnJvcnMudHMKZnVuY3Rpb24gc3lzdGVtUnVu
QXBwcm92YWxHdWFyZEVycm9yKHBhcmFtcykgewoJY29uc3QgZGV0YWlscyA9IHBhcmFtcy5kZXRh
aWxzID8geyAuLi5wYXJhbXMuZGV0YWlscyB9IDoge307CglyZXR1cm4gewoJCW9rOiBmYWxzZSwK
CQltZXNzYWdlOiBwYXJhbXMubWVzc2FnZSwKCQlkZXRhaWxzOiB7CgkJCWNvZGU6IHBhcmFtcy5j
b2RlLAoJCQkuLi5kZXRhaWxzCgkJfQoJfTsKfQpmdW5jdGlvbiBzeXN0ZW1SdW5BcHByb3ZhbFJl
cXVpcmVkKHJ1bklkKSB7CglyZXR1cm4gc3lzdGVtUnVuQXBwcm92YWxHdWFyZEVycm9yKHsKCQlj
b2RlOiAiQVBQUk9WQUxfUkVRVUlSRUQiLAoJCW1lc3NhZ2U6ICJhcHByb3ZhbCByZXF1aXJlZCIs
CgkJZGV0YWlsczogeyBydW5JZCB9Cgl9KTsKfQovLyNlbmRyZWdpb24KLy8jcmVnaW9uIHNyYy9n
YXRld2F5L25vZGUtaW52b2tlLXN5c3RlbS1ydW4tYXBwcm92YWwtbWF0Y2gudHMKZnVuY3Rpb24g
cmVxdWVzdE1pc21hdGNoKCkgewoJcmV0dXJuIHsKCQlvazogZmFsc2UsCgkJY29kZTogIkFQUFJP
VkFMX1JFUVVFU1RfTUlTTUFUQ0giLAoJCW1lc3NhZ2U6ICJhcHByb3ZhbCBpZCBkb2VzIG5vdCBt
YXRjaCByZXF1ZXN0IgoJfTsKfQpmdW5jdGlvbiBldmFsdWF0ZVN5c3RlbVJ1bkFwcHJvdmFsTWF0
Y2gocGFyYW1zKSB7CglpZiAocGFyYW1zLnJlcXVlc3QuaG9zdCAhPT0gIm5vZGUiKSByZXR1cm4g
cmVxdWVzdE1pc21hdGNoKCk7Cgljb25zdCBhY3R1YWxCaW5kaW5nID0gYnVpbGRTeXN0ZW1SdW5B
cHByb3ZhbEJpbmRpbmcoewoJCWFyZ3Y6IHBhcmFtcy5hcmd2LAoJCWN3ZDogcGFyYW1zLmJpbmRp
bmcuY3dkLAoJCWFnZW50SWQ6IHBhcmFtcy5iaW5kaW5nLmFnZW50SWQsCgkJc2Vzc2lvbktleTog
cGFyYW1zLmJpbmRpbmcuc2Vzc2lvbktleSwKCQllbnY6IHBhcmFtcy5iaW5kaW5nLmVudgoJfSk7
Cgljb25zdCBleHBlY3RlZEJpbmRpbmcgPSBwYXJhbXMucmVxdWVzdC5zeXN0ZW1SdW5CaW5kaW5n
OwoJaWYgKCFleHBlY3RlZEJpbmRpbmcpIHJldHVybiBtaXNzaW5nU3lzdGVtUnVuQXBwcm92YWxC
aW5kaW5nKHsgYWN0dWFsRW52S2V5czogYWN0dWFsQmluZGluZy5lbnZLZXlzIH0pOwoJcmV0dXJu
IG1hdGNoU3lzdGVtUnVuQXBwcm92YWxCaW5kaW5nKHsKCQlleHBlY3RlZDogZXhwZWN0ZWRCaW5k
aW5nLAoJCWFjdHVhbDogYWN0dWFsQmluZGluZy5iaW5kaW5nLAoJCWFjdHVhbEVudktleXM6IGFj
dHVhbEJpbmRpbmcuZW52S2V5cwoJfSk7Cn0KLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvZ2F0
ZXdheS9ub2RlLWludm9rZS1zeXN0ZW0tcnVuLWFwcHJvdmFsLnRzCmZ1bmN0aW9uIGFzUmVjb3Jk
KHZhbHVlKSB7CglpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gIm9iamVjdCIgfHwgQXJy
YXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiBudWxsOwoJcmV0dXJuIHZhbHVlOwp9CmZ1bmN0aW9u
IG5vcm1hbGl6ZVN0cmluZyh2YWx1ZSkgewoJaWYgKHR5cGVvZiB2YWx1ZSAhPT0gInN0cmluZyIp
IHJldHVybiBudWxsOwoJY29uc3QgdHJpbW1lZCA9IHZhbHVlLnRyaW0oKTsKCXJldHVybiB0cmlt
bWVkID8gdHJpbW1lZCA6IG51bGw7Cn0KZnVuY3Rpb24gbm9ybWFsaXplQXBwcm92YWxEZWNpc2lv
bih2YWx1ZSkgewoJY29uc3QgcyA9IG5vcm1hbGl6ZVN0cmluZyh2YWx1ZSk7CglyZXR1cm4gcyA9
PT0gImFsbG93LW9uY2UiIHx8IHMgPT09ICJhbGxvdy1hbHdheXMiID8gcyA6IG51bGw7Cn0KZnVu
Y3Rpb24gY2xpZW50SGFzQXBwcm92YWxzKGNsaWVudCkgewoJY29uc3Qgc2NvcGVzID0gQXJyYXku
aXNBcnJheShjbGllbnQ/LmNvbm5lY3Q/LnNjb3BlcykgPyBjbGllbnQ/LmNvbm5lY3Q/LnNjb3Bl
cyA6IFtdOwoJcmV0dXJuIHNjb3Blcy5pbmNsdWRlcygib3BlcmF0b3IuYWRtaW4iKSB8fCBzY29w
ZXMuaW5jbHVkZXMoIm9wZXJhdG9yLmFwcHJvdmFscyIpOwp9CmZ1bmN0aW9uIHBpY2tTeXN0ZW1S
dW5QYXJhbXMocmF3KSB7Cgljb25zdCBuZXh0ID0ge307Cglmb3IgKGNvbnN0IGtleSBvZiBbCgkJ
ImNvbW1hbmQiLAoJCSJyYXdDb21tYW5kIiwKCQkic3lzdGVtUnVuUGxhbiIsCgkJImN3ZCIsCgkJ
ImVudiIsCgkJInRpbWVvdXRNcyIsCgkJIm5lZWRzU2NyZWVuUmVjb3JkaW5nIiwKCQkiYWdlbnRJ
ZCIsCgkJInNlc3Npb25LZXkiLAoJCSJydW5JZCIsCgkJInN1cHByZXNzTm90aWZ5T25FeGl0IgoJ
XSkgaWYgKGtleSBpbiByYXcpIG5leHRba2V5XSA9IHJhd1trZXldOwoJcmV0dXJuIG5leHQ7Cn0K
LyoqCiogR2F0ZSBgc3lzdGVtLnJ1bmAgYXBwcm92YWwgZmxhZ3MgKGBhcHByb3ZlZGAsIGBhcHBy
b3ZhbERlY2lzaW9uYCkgYmVoaW5kIGEgcmVhbAoqIGBleGVjLmFwcHJvdmFsLipgIHJlY29yZC4g
VGhpcyBwcmV2ZW50cyB1c2VycyB3aXRoIG9ubHkgYG9wZXJhdG9yLndyaXRlYCBmcm9tCiogYnlw
YXNzaW5nIG5vZGUtaG9zdCBhcHByb3ZhbHMgYnkgaW5qZWN0aW5nIGNvbnRyb2wgZmllbGRzIGlu
dG8gYG5vZGUuaW52b2tlYC4KKi8KZnVuY3Rpb24gc2FuaXRpemVTeXN0ZW1SdW5QYXJhbXNGb3JG
b3J3YXJkaW5nKG9wdHMpIHsKCWNvbnN0IG9iaiA9IGFzUmVjb3JkKG9wdHMucmF3UGFyYW1zKTsK
CWlmICghb2JqKSByZXR1cm4gewoJCW9rOiB0cnVlLAoJCXBhcmFtczogb3B0cy5yYXdQYXJhbXMK
CX07Cgljb25zdCBwID0gb2JqOwoJY29uc3QgYXBwcm92ZWQgPSBwLmFwcHJvdmVkID09PSB0cnVl
OwoJY29uc3QgcmVxdWVzdGVkRGVjaXNpb24gPSBub3JtYWxpemVBcHByb3ZhbERlY2lzaW9uKHAu
YXBwcm92YWxEZWNpc2lvbik7Cgljb25zdCB3YW50c0FwcHJvdmFsT3ZlcnJpZGUgPSBhcHByb3Zl
ZCB8fCByZXF1ZXN0ZWREZWNpc2lvbiAhPT0gbnVsbDsKCWNvbnN0IG5leHQgPSBwaWNrU3lzdGVt
UnVuUGFyYW1zKG9iaik7CglpZiAoIXdhbnRzQXBwcm92YWxPdmVycmlkZSkgewoJCWNvbnN0IGNt
ZFRleHRSZXNvbHV0aW9uID0gcmVzb2x2ZVN5c3RlbVJ1bkNvbW1hbmRSZXF1ZXN0KHsKCQkJY29t
bWFuZDogcC5jb21tYW5kLAoJCQlyYXdDb21tYW5kOiBwLnJhd0NvbW1hbmQKCQl9KTsKCQlpZiAo
IWNtZFRleHRSZXNvbHV0aW9uLm9rKSByZXR1cm4gewoJCQlvazogZmFsc2UsCgkJCW1lc3NhZ2U6
IGNtZFRleHRSZXNvbHV0aW9uLm1lc3NhZ2UsCgkJCWRldGFpbHM6IGNtZFRleHRSZXNvbHV0aW9u
LmRldGFpbHMKCQl9OwoJCXJldHVybiB7CgkJCW9rOiB0cnVlLAoJCQlwYXJhbXM6IG5leHQKCQl9
OwoJfQoJY29uc3QgcnVuSWQgPSBub3JtYWxpemVTdHJpbmcocC5ydW5JZCk7CglpZiAoIXJ1bklk
KSByZXR1cm4gc3lzdGVtUnVuQXBwcm92YWxHdWFyZEVycm9yKHsKCQljb2RlOiAiTUlTU0lOR19S
VU5fSUQiLAoJCW1lc3NhZ2U6ICJhcHByb3ZhbCBvdmVycmlkZSByZXF1aXJlcyBwYXJhbXMucnVu
SWQiCgl9KTsKCWNvbnN0IG1hbmFnZXIgPSBvcHRzLmV4ZWNBcHByb3ZhbE1hbmFnZXI7CglpZiAo
IW1hbmFnZXIpIHJldHVybiBzeXN0ZW1SdW5BcHByb3ZhbEd1YXJkRXJyb3IoewoJCWNvZGU6ICJB
UFBST1ZBTFNfVU5BVkFJTEFCTEUiLAoJCW1lc3NhZ2U6ICJleGVjIGFwcHJvdmFscyB1bmF2YWls
YWJsZSIKCX0pOwoJY29uc3Qgc25hcHNob3QgPSBtYW5hZ2VyLmdldFNuYXBzaG90KHJ1bklkKTsK
CWlmICghc25hcHNob3QpIHJldHVybiBzeXN0ZW1SdW5BcHByb3ZhbEd1YXJkRXJyb3IoewoJCWNv
ZGU6ICJVTktOT1dOX0FQUFJPVkFMX0lEIiwKCQltZXNzYWdlOiAidW5rbm93biBvciBleHBpcmVk
IGFwcHJvdmFsIGlkIiwKCQlkZXRhaWxzOiB7IHJ1bklkIH0KCX0pOwoJaWYgKCh0eXBlb2Ygb3B0
cy5ub3dNcyA9PT0gIm51bWJlciIgPyBvcHRzLm5vd01zIDogRGF0ZS5ub3coKSkgPiBzbmFwc2hv
dC5leHBpcmVzQXRNcykgcmV0dXJuIHN5c3RlbVJ1bkFwcHJvdmFsR3VhcmRFcnJvcih7CgkJY29k
ZTogIkFQUFJPVkFMX0VYUElSRUQiLAoJCW1lc3NhZ2U6ICJhcHByb3ZhbCBleHBpcmVkIiwKCQlk
ZXRhaWxzOiB7IHJ1bklkIH0KCX0pOwoJY29uc3QgdGFyZ2V0Tm9kZUlkID0gbm9ybWFsaXplU3Ry
aW5nKG9wdHMubm9kZUlkKTsKCWlmICghdGFyZ2V0Tm9kZUlkKSByZXR1cm4gc3lzdGVtUnVuQXBw
cm92YWxHdWFyZEVycm9yKHsKCQljb2RlOiAiTUlTU0lOR19OT0RFX0lEIiwKCQltZXNzYWdlOiAi
bm9kZS5pbnZva2UgcmVxdWlyZXMgbm9kZUlkIiwKCQlkZXRhaWxzOiB7IHJ1bklkIH0KCX0pOwoJ
Y29uc3QgYXBwcm92YWxOb2RlSWQgPSBub3JtYWxpemVTdHJpbmcoc25hcHNob3QucmVxdWVzdC5u
b2RlSWQpOwoJaWYgKCFhcHByb3ZhbE5vZGVJZCkgcmV0dXJuIHN5c3RlbVJ1bkFwcHJvdmFsR3Vh
cmRFcnJvcih7CgkJY29kZTogIkFQUFJPVkFMX05PREVfQklORElOR19NSVNTSU5HIiwKCQltZXNz
YWdlOiAiYXBwcm92YWwgaWQgbWlzc2luZyBub2RlIGJpbmRpbmciLAoJCWRldGFpbHM6IHsgcnVu
SWQgfQoJfSk7CglpZiAoYXBwcm92YWxOb2RlSWQgIT09IHRhcmdldE5vZGVJZCkgcmV0dXJuIHN5
c3RlbVJ1bkFwcHJvdmFsR3VhcmRFcnJvcih7CgkJY29kZTogIkFQUFJPVkFMX05PREVfTUlTTUFU
Q0giLAoJCW1lc3NhZ2U6ICJhcHByb3ZhbCBpZCBub3QgdmFsaWQgZm9yIHRoaXMgbm9kZSIsCgkJ
ZGV0YWlsczogeyBydW5JZCB9Cgl9KTsKCWNvbnN0IHNuYXBzaG90RGV2aWNlSWQgPSBzbmFwc2hv
dC5yZXF1ZXN0ZWRCeURldmljZUlkID8/IG51bGw7Cgljb25zdCBjbGllbnREZXZpY2VJZCA9IG9w
dHMuY2xpZW50Py5jb25uZWN0Py5kZXZpY2U/LmlkID8/IG51bGw7CglpZiAoc25hcHNob3REZXZp
Y2VJZCkgewoJCWlmIChzbmFwc2hvdERldmljZUlkICE9PSBjbGllbnREZXZpY2VJZCkgcmV0dXJu
IHN5c3RlbVJ1bkFwcHJvdmFsR3VhcmRFcnJvcih7CgkJCWNvZGU6ICJBUFBST1ZBTF9ERVZJQ0Vf
TUlTTUFUQ0giLAoJCQltZXNzYWdlOiAiYXBwcm92YWwgaWQgbm90IHZhbGlkIGZvciB0aGlzIGRl
dmljZSIsCgkJCWRldGFpbHM6IHsgcnVuSWQgfQoJCX0pOwoJfSBlbHNlIGlmIChzbmFwc2hvdC5y
ZXF1ZXN0ZWRCeUNvbm5JZCAmJiBzbmFwc2hvdC5yZXF1ZXN0ZWRCeUNvbm5JZCAhPT0gKG9wdHMu
Y2xpZW50Py5jb25uSWQgPz8gbnVsbCkpIHJldHVybiBzeXN0ZW1SdW5BcHByb3ZhbEd1YXJkRXJy
b3IoewoJCWNvZGU6ICJBUFBST1ZBTF9DTElFTlRfTUlTTUFUQ0giLAoJCW1lc3NhZ2U6ICJhcHBy
b3ZhbCBpZCBub3QgdmFsaWQgZm9yIHRoaXMgY2xpZW50IiwKCQlkZXRhaWxzOiB7IHJ1bklkIH0K
CX0pOwoJY29uc3QgcnVudGltZUNvbnRleHQgPSByZXNvbHZlU3lzdGVtUnVuQXBwcm92YWxSdW50
aW1lQ29udGV4dCh7CgkJcGxhbjogc25hcHNob3QucmVxdWVzdC5zeXN0ZW1SdW5QbGFuID8/IG51
bGwsCgkJY29tbWFuZDogcC5jb21tYW5kLAoJCXJhd0NvbW1hbmQ6IHAucmF3Q29tbWFuZCwKCQlj
d2Q6IHAuY3dkLAoJCWFnZW50SWQ6IHAuYWdlbnRJZCwKCQlzZXNzaW9uS2V5OiBwLnNlc3Npb25L
ZXkKCX0pOwoJaWYgKCFydW50aW1lQ29udGV4dC5vaykgcmV0dXJuIHsKCQlvazogZmFsc2UsCgkJ
bWVzc2FnZTogcnVudGltZUNvbnRleHQubWVzc2FnZSwKCQlkZXRhaWxzOiBydW50aW1lQ29udGV4
dC5kZXRhaWxzCgl9OwoJaWYgKHJ1bnRpbWVDb250ZXh0LnBsYW4pIHsKCQluZXh0LmNvbW1hbmQg
PSBbLi4ucnVudGltZUNvbnRleHQucGxhbi5hcmd2XTsKCQluZXh0LnN5c3RlbVJ1blBsYW4gPSBy
dW50aW1lQ29udGV4dC5wbGFuOwoJCWlmIChydW50aW1lQ29udGV4dC5jb21tYW5kVGV4dCkgbmV4
dC5yYXdDb21tYW5kID0gcnVudGltZUNvbnRleHQuY29tbWFuZFRleHQ7CgkJZWxzZSBkZWxldGUg
bmV4dC5yYXdDb21tYW5kOwoJCWlmIChydW50aW1lQ29udGV4dC5jd2QpIG5leHQuY3dkID0gcnVu
dGltZUNvbnRleHQuY3dkOwoJCWVsc2UgZGVsZXRlIG5leHQuY3dkOwoJCWlmIChydW50aW1lQ29u
dGV4dC5hZ2VudElkKSBuZXh0LmFnZW50SWQgPSBydW50aW1lQ29udGV4dC5hZ2VudElkOwoJCWVs
c2UgZGVsZXRlIG5leHQuYWdlbnRJZDsKCQlpZiAocnVudGltZUNvbnRleHQuc2Vzc2lvbktleSkg
bmV4dC5zZXNzaW9uS2V5ID0gcnVudGltZUNvbnRleHQuc2Vzc2lvbktleTsKCQllbHNlIGRlbGV0
ZSBuZXh0LnNlc3Npb25LZXk7Cgl9Cgljb25zdCBhcHByb3ZhbE1hdGNoID0gZXZhbHVhdGVTeXN0
ZW1SdW5BcHByb3ZhbE1hdGNoKHsKCQlhcmd2OiBydW50aW1lQ29udGV4dC5hcmd2LAoJCXJlcXVl
c3Q6IHNuYXBzaG90LnJlcXVlc3QsCgkJYmluZGluZzogewoJCQljd2Q6IHJ1bnRpbWVDb250ZXh0
LmN3ZCwKCQkJYWdlbnRJZDogcnVudGltZUNvbnRleHQuYWdlbnRJZCwKCQkJc2Vzc2lvbktleTog
cnVudGltZUNvbnRleHQuc2Vzc2lvbktleSwKCQkJZW52OiBwLmVudgoJCX0KCX0pOwoJaWYgKCFh
cHByb3ZhbE1hdGNoLm9rKSByZXR1cm4gdG9TeXN0ZW1SdW5BcHByb3ZhbE1pc21hdGNoRXJyb3Io
ewoJCXJ1bklkLAoJCW1hdGNoOiBhcHByb3ZhbE1hdGNoCgl9KTsKCWlmIChzbmFwc2hvdC5kZWNp
c2lvbiA9PT0gImFsbG93LW9uY2UiKSB7CgkJaWYgKHR5cGVvZiBtYW5hZ2VyLmNvbnN1bWVBbGxv
d09uY2UgIT09ICJmdW5jdGlvbiIgfHwgIW1hbmFnZXIuY29uc3VtZUFsbG93T25jZShydW5JZCkp
IHJldHVybiBzeXN0ZW1SdW5BcHByb3ZhbFJlcXVpcmVkKHJ1bklkKTsKCQluZXh0LmFwcHJvdmVk
ID0gdHJ1ZTsKCQluZXh0LmFwcHJvdmFsRGVjaXNpb24gPSAiYWxsb3ctb25jZSI7CgkJcmV0dXJu
IHsKCQkJb2s6IHRydWUsCgkJCXBhcmFtczogbmV4dAoJCX07Cgl9CglpZiAoc25hcHNob3QuZGVj
aXNpb24gPT09ICJhbGxvdy1hbHdheXMiKSB7CgkJbmV4dC5hcHByb3ZlZCA9IHRydWU7CgkJbmV4
dC5hcHByb3ZhbERlY2lzaW9uID0gImFsbG93LWFsd2F5cyI7CgkJcmV0dXJuIHsKCQkJb2s6IHRy
dWUsCgkJCXBhcmFtczogbmV4dAoJCX07Cgl9CglpZiAoc25hcHNob3QucmVzb2x2ZWRBdE1zICE9
PSB2b2lkIDAgJiYgc25hcHNob3QuZGVjaXNpb24gPT09IHZvaWQgMCAmJiBzbmFwc2hvdC5yZXNv
bHZlZEJ5ID09PSBudWxsICYmIGFwcHJvdmVkICYmIHJlcXVlc3RlZERlY2lzaW9uID09PSAiYWxs
b3ctb25jZSIgJiYgY2xpZW50SGFzQXBwcm92YWxzKG9wdHMuY2xpZW50KSkgewoJCW5leHQuYXBw
cm92ZWQgPSB0cnVlOwoJCW5leHQuYXBwcm92YWxEZWNpc2lvbiA9ICJhbGxvdy1vbmNlIjsKCQly
ZXR1cm4gewoJCQlvazogdHJ1ZSwKCQkJcGFyYW1zOiBuZXh0CgkJfTsKCX0KCXJldHVybiBzeXN0
ZW1SdW5BcHByb3ZhbFJlcXVpcmVkKHJ1bklkKTsKfQovLyNlbmRyZWdpb24KLy8jcmVnaW9uIHNy
Yy9nYXRld2F5L25vZGUtaW52b2tlLXNhbml0aXplLnRzCmZ1bmN0aW9uIHNhbml0aXplTm9kZUlu
dm9rZVBhcmFtc0ZvckZvcndhcmRpbmcob3B0cykgewoJaWYgKG9wdHMuY29tbWFuZCA9PT0gInN5
c3RlbS5ydW4iKSByZXR1cm4gc2FuaXRpemVTeXN0ZW1SdW5QYXJhbXNGb3JGb3J3YXJkaW5nKHsK
CQlub2RlSWQ6IG9wdHMubm9kZUlkLAoJCXJhd1BhcmFtczogb3B0cy5yYXdQYXJhbXMsCgkJY2xp
ZW50OiBvcHRzLmNsaWVudCwKCQlleGVjQXBwcm92YWxNYW5hZ2VyOiBvcHRzLmV4ZWNBcHByb3Zh
bE1hbmFnZXIKCX0pOwoJcmV0dXJuIHsKCQlvazogdHJ1ZSwKCQlwYXJhbXM6IG9wdHMucmF3UGFy
YW1zCgl9Owp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dhdGV3YXkvc2VydmVyLW1ldGhv
ZHMvbm9kZXMuaGFuZGxlcnMuaW52b2tlLXJlc3VsdC50cwpmdW5jdGlvbiBub3JtYWxpemVOb2Rl
SW52b2tlUmVzdWx0UGFyYW1zKHBhcmFtcykgewoJaWYgKCFwYXJhbXMgfHwgdHlwZW9mIHBhcmFt
cyAhPT0gIm9iamVjdCIpIHJldHVybiBwYXJhbXM7Cgljb25zdCBub3JtYWxpemVkID0geyAuLi5w
YXJhbXMgfTsKCWlmIChub3JtYWxpemVkLnBheWxvYWRKU09OID09PSBudWxsKSBkZWxldGUgbm9y
bWFsaXplZC5wYXlsb2FkSlNPTjsKCWVsc2UgaWYgKG5vcm1hbGl6ZWQucGF5bG9hZEpTT04gIT09
IHZvaWQgMCAmJiB0eXBlb2Ygbm9ybWFsaXplZC5wYXlsb2FkSlNPTiAhPT0gInN0cmluZyIpIHsK
CQlpZiAobm9ybWFsaXplZC5wYXlsb2FkID09PSB2b2lkIDApIG5vcm1hbGl6ZWQucGF5bG9hZCA9
IG5vcm1hbGl6ZWQucGF5bG9hZEpTT047CgkJZGVsZXRlIG5vcm1hbGl6ZWQucGF5bG9hZEpTT047
Cgl9CglpZiAobm9ybWFsaXplZC5lcnJvciA9PT0gbnVsbCkgZGVsZXRlIG5vcm1hbGl6ZWQuZXJy
b3I7CglyZXR1cm4gbm9ybWFsaXplZDsKfQpjb25zdCBoYW5kbGVOb2RlSW52b2tlUmVzdWx0ID0g
YXN5bmMgKHsgcGFyYW1zLCByZXNwb25kLCBjb250ZXh0LCBjbGllbnQgfSkgPT4gewoJY29uc3Qg
bm9ybWFsaXplZFBhcmFtcyA9IG5vcm1hbGl6ZU5vZGVJbnZva2VSZXN1bHRQYXJhbXMocGFyYW1z
KTsKCWlmICghdmFsaWRhdGVOb2RlSW52b2tlUmVzdWx0UGFyYW1zKG5vcm1hbGl6ZWRQYXJhbXMp
KSB7CgkJcmVzcG9uZEludmFsaWRQYXJhbXMoewoJCQlyZXNwb25kLAoJCQltZXRob2Q6ICJub2Rl
Lmludm9rZS5yZXN1bHQiLAoJCQl2YWxpZGF0b3I6IHZhbGlkYXRlTm9kZUludm9rZVJlc3VsdFBh
cmFtcwoJCX0pOwoJCXJldHVybjsKCX0KCWNvbnN0IHAgPSBub3JtYWxpemVkUGFyYW1zOwoJY29u
c3QgY2FsbGVyTm9kZUlkID0gY2xpZW50Py5jb25uZWN0Py5kZXZpY2U/LmlkID8/IGNsaWVudD8u
Y29ubmVjdD8uY2xpZW50Py5pZDsKCWlmIChjYWxsZXJOb2RlSWQgJiYgY2FsbGVyTm9kZUlkICE9
PSBwLm5vZGVJZCkgewoJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNv
ZGVzLklOVkFMSURfUkVRVUVTVCwgIm5vZGVJZCBtaXNtYXRjaCIpKTsKCQlyZXR1cm47Cgl9Cglp
ZiAoIWNvbnRleHQubm9kZVJlZ2lzdHJ5LmhhbmRsZUludm9rZVJlc3VsdCh7CgkJaWQ6IHAuaWQs
CgkJbm9kZUlkOiBwLm5vZGVJZCwKCQlvazogcC5vaywKCQlwYXlsb2FkOiBwLnBheWxvYWQsCgkJ
cGF5bG9hZEpTT046IHAucGF5bG9hZEpTT04gPz8gbnVsbCwKCQllcnJvcjogcC5lcnJvciA/PyBu
dWxsCgl9KSkgewoJCWNvbnRleHQubG9nR2F0ZXdheS5kZWJ1ZyhgbGF0ZSBpbnZva2UgcmVzdWx0
IGlnbm9yZWQ6IGlkPSR7cC5pZH0gbm9kZT0ke3Aubm9kZUlkfWApOwoJCXJlc3BvbmQodHJ1ZSwg
ewoJCQlvazogdHJ1ZSwKCQkJaWdub3JlZDogdHJ1ZQoJCX0sIHZvaWQgMCk7CgkJcmV0dXJuOwoJ
fQoJcmVzcG9uZCh0cnVlLCB7IG9rOiB0cnVlIH0sIHZvaWQgMCk7Cn07Ci8vI2VuZHJlZ2lvbgov
LyNyZWdpb24gc3JjL2dhdGV3YXkvc2VydmVyLW1ldGhvZHMvbm9kZXMudHMKY29uc3QgTk9ERV9X
QUtFX1JFQ09OTkVDVF9XQUlUX01TID0gM2UzOwpjb25zdCBOT0RFX1dBS0VfUkVDT05ORUNUX1JF
VFJZX1dBSVRfTVMgPSAxMmUzOwpjb25zdCBOT0RFX1dBS0VfVEhST1RUTEVfTVMgPSAxNWUzOwpj
b25zdCBOT0RFX1dBS0VfTlVER0VfVEhST1RUTEVfTVMgPSAxMCAqIDZlNDsKY29uc3QgTk9ERV9Q
RU5ESU5HX0FDVElPTl9UVExfTVMgPSAxMCAqIDZlNDsKY29uc3QgTk9ERV9QRU5ESU5HX0FDVElP
Tl9NQVhfUEVSX05PREUgPSA2NDsKY29uc3Qgbm9kZVdha2VCeUlkID0gLyogQF9fUFVSRV9fICov
IG5ldyBNYXAoKTsKY29uc3Qgbm9kZVdha2VOdWRnZUJ5SWQgPSAvKiBAX19QVVJFX18gKi8gbmV3
IE1hcCgpOwpjb25zdCBwZW5kaW5nTm9kZUFjdGlvbnNCeUlkID0gLyogQF9fUFVSRV9fICovIG5l
dyBNYXAoKTsKYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZURpcmVjdE5vZGVQdXNoQ29uZmlnKCkgewoJ
Y29uc3QgYXV0aCA9IGF3YWl0IHJlc29sdmVBcG5zQXV0aENvbmZpZ0Zyb21FbnYocHJvY2Vzcy5l
bnYpOwoJcmV0dXJuIGF1dGgub2sgPyB7CgkJb2s6IHRydWUsCgkJYXV0aDogYXV0aC52YWx1ZQoJ
fSA6IHsKCQlvazogZmFsc2UsCgkJZXJyb3I6IGF1dGguZXJyb3IKCX07Cn0KZnVuY3Rpb24gcmVz
b2x2ZVJlbGF5Tm9kZVB1c2hDb25maWcoKSB7Cgljb25zdCByZWxheSA9IHJlc29sdmVBcG5zUmVs
YXlDb25maWdGcm9tRW52KHByb2Nlc3MuZW52LCBsb2FkQ29uZmlnKCkuZ2F0ZXdheSk7CglyZXR1
cm4gcmVsYXkub2sgPyB7CgkJb2s6IHRydWUsCgkJcmVsYXlDb25maWc6IHJlbGF5LnZhbHVlCgl9
IDogewoJCW9rOiBmYWxzZSwKCQllcnJvcjogcmVsYXkuZXJyb3IKCX07Cn0KYXN5bmMgZnVuY3Rp
b24gY2xlYXJTdGFsZUFwbnNSZWdpc3RyYXRpb25JZk5lZWRlZChyZWdpc3RyYXRpb24sIG5vZGVJ
ZCwgcGFyYW1zKSB7CglpZiAoIXNob3VsZENsZWFyU3RvcmVkQXBuc1JlZ2lzdHJhdGlvbih7CgkJ
cmVnaXN0cmF0aW9uLAoJCXJlc3VsdDogcGFyYW1zCgl9KSkgcmV0dXJuOwoJYXdhaXQgY2xlYXJB
cG5zUmVnaXN0cmF0aW9uSWZDdXJyZW50KHsKCQlub2RlSWQsCgkJcmVnaXN0cmF0aW9uCgl9KTsK
fQpmdW5jdGlvbiBpc05vZGVFbnRyeShlbnRyeSkgewoJaWYgKGVudHJ5LnJvbGUgPT09ICJub2Rl
IikgcmV0dXJuIHRydWU7CglpZiAoQXJyYXkuaXNBcnJheShlbnRyeS5yb2xlcykgJiYgZW50cnku
cm9sZXMuaW5jbHVkZXMoIm5vZGUiKSkgcmV0dXJuIHRydWU7CglyZXR1cm4gZmFsc2U7Cn0KYXN5
bmMgZnVuY3Rpb24gZGVsYXlNcyhtcykgewoJYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+
IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTsKfQpmdW5jdGlvbiBpc0ZvcmVncm91bmRSZXN0cmlj
dGVkSW9zQ29tbWFuZChjb21tYW5kKSB7CglyZXR1cm4gY29tbWFuZCA9PT0gImNhbnZhcy5wcmVz
ZW50IiB8fCBjb21tYW5kID09PSAiY2FudmFzLm5hdmlnYXRlIiB8fCBjb21tYW5kLnN0YXJ0c1dp
dGgoImNhbnZhcy4iKSB8fCBjb21tYW5kLnN0YXJ0c1dpdGgoImNhbWVyYS4iKSB8fCBjb21tYW5k
LnN0YXJ0c1dpdGgoInNjcmVlbi4iKSB8fCBjb21tYW5kLnN0YXJ0c1dpdGgoInRhbGsuIik7Cn0K
ZnVuY3Rpb24gc2hvdWxkUXVldWVBc1BlbmRpbmdGb3JlZ3JvdW5kQWN0aW9uKHBhcmFtcykgewoJ
Y29uc3QgcGxhdGZvcm0gPSAocGFyYW1zLnBsYXRmb3JtID8/ICIiKS50cmltKCkudG9Mb3dlckNh
c2UoKTsKCWlmICghcGxhdGZvcm0uc3RhcnRzV2l0aCgiaW9zIikgJiYgIXBsYXRmb3JtLnN0YXJ0
c1dpdGgoImlwYWRvcyIpKSByZXR1cm4gZmFsc2U7CglpZiAoIWlzRm9yZWdyb3VuZFJlc3RyaWN0
ZWRJb3NDb21tYW5kKHBhcmFtcy5jb21tYW5kKSkgcmV0dXJuIGZhbHNlOwoJY29uc3QgZXJyb3Ig
PSBwYXJhbXMuZXJyb3IgJiYgdHlwZW9mIHBhcmFtcy5lcnJvciA9PT0gIm9iamVjdCIgPyBwYXJh
bXMuZXJyb3IgOiBudWxsOwoJY29uc3QgY29kZSA9IHR5cGVvZiBlcnJvcj8uY29kZSA9PT0gInN0
cmluZyIgPyBlcnJvci5jb2RlLnRyaW0oKS50b1VwcGVyQ2FzZSgpIDogIiI7Cgljb25zdCBtZXNz
YWdlID0gdHlwZW9mIGVycm9yPy5tZXNzYWdlID09PSAic3RyaW5nIiA/IGVycm9yLm1lc3NhZ2Uu
dHJpbSgpLnRvVXBwZXJDYXNlKCkgOiAiIjsKCXJldHVybiBjb2RlID09PSAiTk9ERV9CQUNLR1JP
VU5EX1VOQVZBSUxBQkxFIiB8fCBtZXNzYWdlLmluY2x1ZGVzKCJCQUNLR1JPVU5EX1VOQVZBSUxB
QkxFIik7Cn0KZnVuY3Rpb24gcHJ1bmVQZW5kaW5nTm9kZUFjdGlvbnMobm9kZUlkLCBub3dNcykg
ewoJY29uc3QgcXVldWUgPSBwZW5kaW5nTm9kZUFjdGlvbnNCeUlkLmdldChub2RlSWQpID8/IFtd
OwoJY29uc3QgbWluVGltZXN0YW1wTXMgPSBub3dNcyAtIE5PREVfUEVORElOR19BQ1RJT05fVFRM
X01TOwoJY29uc3QgbGl2ZSA9IHF1ZXVlLmZpbHRlcigoZW50cnkpID0+IGVudHJ5LmVucXVldWVk
QXRNcyA+PSBtaW5UaW1lc3RhbXBNcyk7CglpZiAobGl2ZS5sZW5ndGggPT09IDApIHsKCQlwZW5k
aW5nTm9kZUFjdGlvbnNCeUlkLmRlbGV0ZShub2RlSWQpOwoJCXJldHVybiBbXTsKCX0KCXBlbmRp
bmdOb2RlQWN0aW9uc0J5SWQuc2V0KG5vZGVJZCwgbGl2ZSk7CglyZXR1cm4gbGl2ZTsKfQpmdW5j
dGlvbiBlbnF1ZXVlUGVuZGluZ05vZGVBY3Rpb24ocGFyYW1zKSB7Cgljb25zdCBub3dNcyA9IERh
dGUubm93KCk7Cgljb25zdCBxdWV1ZSA9IHBydW5lUGVuZGluZ05vZGVBY3Rpb25zKHBhcmFtcy5u
b2RlSWQsIG5vd01zKTsKCWNvbnN0IGV4aXN0aW5nID0gcXVldWUuZmluZCgoZW50cnkpID0+IGVu
dHJ5LmlkZW1wb3RlbmN5S2V5ID09PSBwYXJhbXMuaWRlbXBvdGVuY3lLZXkpOwoJaWYgKGV4aXN0
aW5nKSByZXR1cm4gZXhpc3Rpbmc7Cgljb25zdCBlbnRyeSA9IHsKCQlpZDogcmFuZG9tVVVJRCgp
LAoJCW5vZGVJZDogcGFyYW1zLm5vZGVJZCwKCQljb21tYW5kOiBwYXJhbXMuY29tbWFuZCwKCQlw
YXJhbXNKU09OOiBwYXJhbXMucGFyYW1zSlNPTiwKCQlpZGVtcG90ZW5jeUtleTogcGFyYW1zLmlk
ZW1wb3RlbmN5S2V5LAoJCWVucXVldWVkQXRNczogbm93TXMKCX07CglxdWV1ZS5wdXNoKGVudHJ5
KTsKCWlmIChxdWV1ZS5sZW5ndGggPiBOT0RFX1BFTkRJTkdfQUNUSU9OX01BWF9QRVJfTk9ERSkg
cXVldWUuc3BsaWNlKDAsIHF1ZXVlLmxlbmd0aCAtIE5PREVfUEVORElOR19BQ1RJT05fTUFYX1BF
Ul9OT0RFKTsKCXBlbmRpbmdOb2RlQWN0aW9uc0J5SWQuc2V0KHBhcmFtcy5ub2RlSWQsIHF1ZXVl
KTsKCXJldHVybiBlbnRyeTsKfQpmdW5jdGlvbiBsaXN0UGVuZGluZ05vZGVBY3Rpb25zKG5vZGVJ
ZCkgewoJcmV0dXJuIHBydW5lUGVuZGluZ05vZGVBY3Rpb25zKG5vZGVJZCwgRGF0ZS5ub3coKSk7
Cn0KZnVuY3Rpb24gYWNrUGVuZGluZ05vZGVBY3Rpb25zKG5vZGVJZCwgaWRzKSB7CglpZiAoaWRz
Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIGxpc3RQZW5kaW5nTm9kZUFjdGlvbnMobm9kZUlkKTsKCWNv
bnN0IHBlbmRpbmcgPSBwcnVuZVBlbmRpbmdOb2RlQWN0aW9ucyhub2RlSWQsIERhdGUubm93KCkp
OwoJY29uc3QgaWRTZXQgPSBuZXcgU2V0KGlkcyk7Cgljb25zdCByZW1haW5pbmcgPSBwZW5kaW5n
LmZpbHRlcigoZW50cnkpID0+ICFpZFNldC5oYXMoZW50cnkuaWQpKTsKCWlmIChyZW1haW5pbmcu
bGVuZ3RoID09PSAwKSB7CgkJcGVuZGluZ05vZGVBY3Rpb25zQnlJZC5kZWxldGUobm9kZUlkKTsK
CQlyZXR1cm4gW107Cgl9CglwZW5kaW5nTm9kZUFjdGlvbnNCeUlkLnNldChub2RlSWQsIHJlbWFp
bmluZyk7CglyZXR1cm4gcmVtYWluaW5nOwp9CmZ1bmN0aW9uIHRvUGVuZGluZ1BhcmFtc0pTT04o
cGFyYW1zKSB7CglpZiAocGFyYW1zID09PSB2b2lkIDApIHJldHVybjsKCXRyeSB7CgkJcmV0dXJu
IEpTT04uc3RyaW5naWZ5KHBhcmFtcyk7Cgl9IGNhdGNoIHsKCQlyZXR1cm47Cgl9Cn0KYXN5bmMg
ZnVuY3Rpb24gbWF5YmVXYWtlTm9kZVdpdGhBcG5zKG5vZGVJZCwgb3B0cykgewoJY29uc3Qgc3Rh
dGUgPSBub2RlV2FrZUJ5SWQuZ2V0KG5vZGVJZCkgPz8geyBsYXN0V2FrZUF0TXM6IDAgfTsKCW5v
ZGVXYWtlQnlJZC5zZXQobm9kZUlkLCBzdGF0ZSk7CglpZiAoc3RhdGUuaW5GbGlnaHQpIHJldHVy
biBhd2FpdCBzdGF0ZS5pbkZsaWdodDsKCWNvbnN0IG5vdyA9IERhdGUubm93KCk7CglpZiAoIShv
cHRzPy5mb3JjZSA9PT0gdHJ1ZSkgJiYgc3RhdGUubGFzdFdha2VBdE1zID4gMCAmJiBub3cgLSBz
dGF0ZS5sYXN0V2FrZUF0TXMgPCBOT0RFX1dBS0VfVEhST1RUTEVfTVMpIHJldHVybiB7CgkJYXZh
aWxhYmxlOiB0cnVlLAoJCXRocm90dGxlZDogdHJ1ZSwKCQlwYXRoOiAidGhyb3R0bGVkIiwKCQlk
dXJhdGlvbk1zOiAwCgl9OwoJc3RhdGUuaW5GbGlnaHQgPSAoYXN5bmMgKCkgPT4gewoJCWNvbnN0
IHN0YXJ0ZWRBdE1zID0gRGF0ZS5ub3coKTsKCQljb25zdCB3aXRoRHVyYXRpb24gPSAoYXR0ZW1w
dCkgPT4gKHsKCQkJLi4uYXR0ZW1wdCwKCQkJZHVyYXRpb25NczogTWF0aC5tYXgoMCwgRGF0ZS5u
b3coKSAtIHN0YXJ0ZWRBdE1zKQoJCX0pOwoJCXRyeSB7CgkJCWNvbnN0IHJlZ2lzdHJhdGlvbiA9
IGF3YWl0IGxvYWRBcG5zUmVnaXN0cmF0aW9uKG5vZGVJZCk7CgkJCWlmICghcmVnaXN0cmF0aW9u
KSByZXR1cm4gd2l0aER1cmF0aW9uKHsKCQkJCWF2YWlsYWJsZTogZmFsc2UsCgkJCQl0aHJvdHRs
ZWQ6IGZhbHNlLAoJCQkJcGF0aDogIm5vLXJlZ2lzdHJhdGlvbiIKCQkJfSk7CgkJCWxldCB3YWtl
UmVzdWx0OwoJCQlpZiAocmVnaXN0cmF0aW9uLnRyYW5zcG9ydCA9PT0gInJlbGF5IikgewoJCQkJ
Y29uc3QgcmVsYXkgPSByZXNvbHZlUmVsYXlOb2RlUHVzaENvbmZpZygpOwoJCQkJaWYgKCFyZWxh
eS5vaykgcmV0dXJuIHdpdGhEdXJhdGlvbih7CgkJCQkJYXZhaWxhYmxlOiBmYWxzZSwKCQkJCQl0
aHJvdHRsZWQ6IGZhbHNlLAoJCQkJCXBhdGg6ICJuby1hdXRoIiwKCQkJCQlhcG5zUmVhc29uOiBy
ZWxheS5lcnJvcgoJCQkJfSk7CgkJCQlzdGF0ZS5sYXN0V2FrZUF0TXMgPSBEYXRlLm5vdygpOwoJ
CQkJd2FrZVJlc3VsdCA9IGF3YWl0IHNlbmRBcG5zQmFja2dyb3VuZFdha2UoewoJCQkJCXJlZ2lz
dHJhdGlvbiwKCQkJCQlub2RlSWQsCgkJCQkJd2FrZVJlYXNvbjogb3B0cz8ud2FrZVJlYXNvbiA/
PyAibm9kZS5pbnZva2UiLAoJCQkJCXJlbGF5Q29uZmlnOiByZWxheS5yZWxheUNvbmZpZwoJCQkJ
fSk7CgkJCX0gZWxzZSB7CgkJCQljb25zdCBhdXRoID0gYXdhaXQgcmVzb2x2ZURpcmVjdE5vZGVQ
dXNoQ29uZmlnKCk7CgkJCQlpZiAoIWF1dGgub2spIHJldHVybiB3aXRoRHVyYXRpb24oewoJCQkJ
CWF2YWlsYWJsZTogZmFsc2UsCgkJCQkJdGhyb3R0bGVkOiBmYWxzZSwKCQkJCQlwYXRoOiAibm8t
YXV0aCIsCgkJCQkJYXBuc1JlYXNvbjogYXV0aC5lcnJvcgoJCQkJfSk7CgkJCQlzdGF0ZS5sYXN0
V2FrZUF0TXMgPSBEYXRlLm5vdygpOwoJCQkJd2FrZVJlc3VsdCA9IGF3YWl0IHNlbmRBcG5zQmFj
a2dyb3VuZFdha2UoewoJCQkJCXJlZ2lzdHJhdGlvbiwKCQkJCQlub2RlSWQsCgkJCQkJd2FrZVJl
YXNvbjogb3B0cz8ud2FrZVJlYXNvbiA/PyAibm9kZS5pbnZva2UiLAoJCQkJCWF1dGg6IGF1dGgu
YXV0aAoJCQkJfSk7CgkJCX0KCQkJYXdhaXQgY2xlYXJTdGFsZUFwbnNSZWdpc3RyYXRpb25JZk5l
ZWRlZChyZWdpc3RyYXRpb24sIG5vZGVJZCwgd2FrZVJlc3VsdCk7CgkJCWlmICghd2FrZVJlc3Vs
dC5vaykgcmV0dXJuIHdpdGhEdXJhdGlvbih7CgkJCQlhdmFpbGFibGU6IHRydWUsCgkJCQl0aHJv
dHRsZWQ6IGZhbHNlLAoJCQkJcGF0aDogInNlbmQtZXJyb3IiLAoJCQkJYXBuc1N0YXR1czogd2Fr
ZVJlc3VsdC5zdGF0dXMsCgkJCQlhcG5zUmVhc29uOiB3YWtlUmVzdWx0LnJlYXNvbgoJCQl9KTsK
CQkJcmV0dXJuIHdpdGhEdXJhdGlvbih7CgkJCQlhdmFpbGFibGU6IHRydWUsCgkJCQl0aHJvdHRs
ZWQ6IGZhbHNlLAoJCQkJcGF0aDogInNlbnQiLAoJCQkJYXBuc1N0YXR1czogd2FrZVJlc3VsdC5z
dGF0dXMsCgkJCQlhcG5zUmVhc29uOiB3YWtlUmVzdWx0LnJlYXNvbgoJCQl9KTsKCQl9IGNhdGNo
IChlcnIpIHsKCQkJY29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1l
c3NhZ2UgOiBTdHJpbmcoZXJyKTsKCQkJaWYgKHN0YXRlLmxhc3RXYWtlQXRNcyA9PT0gMCkgcmV0
dXJuIHdpdGhEdXJhdGlvbih7CgkJCQlhdmFpbGFibGU6IGZhbHNlLAoJCQkJdGhyb3R0bGVkOiBm
YWxzZSwKCQkJCXBhdGg6ICJzZW5kLWVycm9yIiwKCQkJCWFwbnNSZWFzb246IG1lc3NhZ2UKCQkJ
fSk7CgkJCXJldHVybiB3aXRoRHVyYXRpb24oewoJCQkJYXZhaWxhYmxlOiB0cnVlLAoJCQkJdGhy
b3R0bGVkOiBmYWxzZSwKCQkJCXBhdGg6ICJzZW5kLWVycm9yIiwKCQkJCWFwbnNSZWFzb246IG1l
c3NhZ2UKCQkJfSk7CgkJfQoJfSkoKTsKCXRyeSB7CgkJcmV0dXJuIGF3YWl0IHN0YXRlLmluRmxp
Z2h0OwoJfSBmaW5hbGx5IHsKCQlzdGF0ZS5pbkZsaWdodCA9IHZvaWQgMDsKCX0KfQphc3luYyBm
dW5jdGlvbiBtYXliZVNlbmROb2RlV2FrZU51ZGdlKG5vZGVJZCkgewoJY29uc3Qgc3RhcnRlZEF0
TXMgPSBEYXRlLm5vdygpOwoJY29uc3Qgd2l0aER1cmF0aW9uID0gKGF0dGVtcHQpID0+ICh7CgkJ
Li4uYXR0ZW1wdCwKCQlkdXJhdGlvbk1zOiBNYXRoLm1heCgwLCBEYXRlLm5vdygpIC0gc3RhcnRl
ZEF0TXMpCgl9KTsKCWNvbnN0IGxhc3ROdWRnZUF0TXMgPSBub2RlV2FrZU51ZGdlQnlJZC5nZXQo
bm9kZUlkKSA/PyAwOwoJaWYgKGxhc3ROdWRnZUF0TXMgPiAwICYmIERhdGUubm93KCkgLSBsYXN0
TnVkZ2VBdE1zIDwgTk9ERV9XQUtFX05VREdFX1RIUk9UVExFX01TKSByZXR1cm4gd2l0aER1cmF0
aW9uKHsKCQlzZW50OiBmYWxzZSwKCQl0aHJvdHRsZWQ6IHRydWUsCgkJcmVhc29uOiAidGhyb3R0
bGVkIgoJfSk7Cgljb25zdCByZWdpc3RyYXRpb24gPSBhd2FpdCBsb2FkQXBuc1JlZ2lzdHJhdGlv
bihub2RlSWQpOwoJaWYgKCFyZWdpc3RyYXRpb24pIHJldHVybiB3aXRoRHVyYXRpb24oewoJCXNl
bnQ6IGZhbHNlLAoJCXRocm90dGxlZDogZmFsc2UsCgkJcmVhc29uOiAibm8tcmVnaXN0cmF0aW9u
IgoJfSk7Cgl0cnkgewoJCWxldCByZXN1bHQ7CgkJaWYgKHJlZ2lzdHJhdGlvbi50cmFuc3BvcnQg
PT09ICJyZWxheSIpIHsKCQkJY29uc3QgcmVsYXkgPSByZXNvbHZlUmVsYXlOb2RlUHVzaENvbmZp
ZygpOwoJCQlpZiAoIXJlbGF5Lm9rKSByZXR1cm4gd2l0aER1cmF0aW9uKHsKCQkJCXNlbnQ6IGZh
bHNlLAoJCQkJdGhyb3R0bGVkOiBmYWxzZSwKCQkJCXJlYXNvbjogIm5vLWF1dGgiLAoJCQkJYXBu
c1JlYXNvbjogcmVsYXkuZXJyb3IKCQkJfSk7CgkJCXJlc3VsdCA9IGF3YWl0IHNlbmRBcG5zQWxl
cnQoewoJCQkJcmVnaXN0cmF0aW9uLAoJCQkJbm9kZUlkLAoJCQkJdGl0bGU6ICJPcGVuQ2xhdyBu
ZWVkcyBhIHF1aWNrIHJlb3BlbiIsCgkJCQlib2R5OiAiVGFwIHRvIHJlb3BlbiBPcGVuQ2xhdyBh
bmQgcmVzdG9yZSB0aGUgbm9kZSBjb25uZWN0aW9uLiIsCgkJCQlyZWxheUNvbmZpZzogcmVsYXku
cmVsYXlDb25maWcKCQkJfSk7CgkJfSBlbHNlIHsKCQkJY29uc3QgYXV0aCA9IGF3YWl0IHJlc29s
dmVEaXJlY3ROb2RlUHVzaENvbmZpZygpOwoJCQlpZiAoIWF1dGgub2spIHJldHVybiB3aXRoRHVy
YXRpb24oewoJCQkJc2VudDogZmFsc2UsCgkJCQl0aHJvdHRsZWQ6IGZhbHNlLAoJCQkJcmVhc29u
OiAibm8tYXV0aCIsCgkJCQlhcG5zUmVhc29uOiBhdXRoLmVycm9yCgkJCX0pOwoJCQlyZXN1bHQg
PSBhd2FpdCBzZW5kQXBuc0FsZXJ0KHsKCQkJCXJlZ2lzdHJhdGlvbiwKCQkJCW5vZGVJZCwKCQkJ
CXRpdGxlOiAiT3BlbkNsYXcgbmVlZHMgYSBxdWljayByZW9wZW4iLAoJCQkJYm9keTogIlRhcCB0
byByZW9wZW4gT3BlbkNsYXcgYW5kIHJlc3RvcmUgdGhlIG5vZGUgY29ubmVjdGlvbi4iLAoJCQkJ
YXV0aDogYXV0aC5hdXRoCgkJCX0pOwoJCX0KCQlhd2FpdCBjbGVhclN0YWxlQXBuc1JlZ2lzdHJh
dGlvbklmTmVlZGVkKHJlZ2lzdHJhdGlvbiwgbm9kZUlkLCByZXN1bHQpOwoJCWlmICghcmVzdWx0
Lm9rKSByZXR1cm4gd2l0aER1cmF0aW9uKHsKCQkJc2VudDogZmFsc2UsCgkJCXRocm90dGxlZDog
ZmFsc2UsCgkJCXJlYXNvbjogImFwbnMtbm90LW9rIiwKCQkJYXBuc1N0YXR1czogcmVzdWx0LnN0
YXR1cywKCQkJYXBuc1JlYXNvbjogcmVzdWx0LnJlYXNvbgoJCX0pOwoJCW5vZGVXYWtlTnVkZ2VC
eUlkLnNldChub2RlSWQsIERhdGUubm93KCkpOwoJCXJldHVybiB3aXRoRHVyYXRpb24oewoJCQlz
ZW50OiB0cnVlLAoJCQl0aHJvdHRsZWQ6IGZhbHNlLAoJCQlyZWFzb246ICJzZW50IiwKCQkJYXBu
c1N0YXR1czogcmVzdWx0LnN0YXR1cywKCQkJYXBuc1JlYXNvbjogcmVzdWx0LnJlYXNvbgoJCX0p
OwoJfSBjYXRjaCAoZXJyKSB7CgkJcmV0dXJuIHdpdGhEdXJhdGlvbih7CgkJCXNlbnQ6IGZhbHNl
LAoJCQl0aHJvdHRsZWQ6IGZhbHNlLAoJCQlyZWFzb246ICJzZW5kLWVycm9yIiwKCQkJYXBuc1Jl
YXNvbjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpCgkJ
fSk7Cgl9Cn0KYXN5bmMgZnVuY3Rpb24gd2FpdEZvck5vZGVSZWNvbm5lY3QocGFyYW1zKSB7Cglj
b25zdCB0aW1lb3V0TXMgPSBNYXRoLm1heCgyNTAsIHBhcmFtcy50aW1lb3V0TXMgPz8gM2UzKTsK
CWNvbnN0IHBvbGxNcyA9IE1hdGgubWF4KDUwLCBwYXJhbXMucG9sbE1zID8/IDE1MCk7Cgljb25z
dCBkZWFkbGluZSA9IERhdGUubm93KCkgKyB0aW1lb3V0TXM7Cgl3aGlsZSAoRGF0ZS5ub3coKSA8
IGRlYWRsaW5lKSB7CgkJaWYgKHBhcmFtcy5jb250ZXh0Lm5vZGVSZWdpc3RyeS5nZXQocGFyYW1z
Lm5vZGVJZCkpIHJldHVybiB0cnVlOwoJCWF3YWl0IGRlbGF5TXMocG9sbE1zKTsKCX0KCXJldHVy
biBCb29sZWFuKHBhcmFtcy5jb250ZXh0Lm5vZGVSZWdpc3RyeS5nZXQocGFyYW1zLm5vZGVJZCkp
Owp9CmNvbnN0IG5vZGVIYW5kbGVycyA9IHsKCSJub2RlLnBhaXIucmVxdWVzdCI6IGFzeW5jICh7
IHBhcmFtcywgcmVzcG9uZCwgY29udGV4dCB9KSA9PiB7CgkJaWYgKCF2YWxpZGF0ZU5vZGVQYWly
UmVxdWVzdFBhcmFtcyhwYXJhbXMpKSB7CgkJCXJlc3BvbmRJbnZhbGlkUGFyYW1zKHsKCQkJCXJl
c3BvbmQsCgkJCQltZXRob2Q6ICJub2RlLnBhaXIucmVxdWVzdCIsCgkJCQl2YWxpZGF0b3I6IHZh
bGlkYXRlTm9kZVBhaXJSZXF1ZXN0UGFyYW1zCgkJCX0pOwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0
IHAgPSBwYXJhbXM7CgkJYXdhaXQgcmVzcG9uZFVuYXZhaWxhYmxlT25UaHJvdyhyZXNwb25kLCBh
c3luYyAoKSA9PiB7CgkJCWNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcXVlc3ROb2RlUGFpcmluZyh7
CgkJCQlub2RlSWQ6IHAubm9kZUlkLAoJCQkJZGlzcGxheU5hbWU6IHAuZGlzcGxheU5hbWUsCgkJ
CQlwbGF0Zm9ybTogcC5wbGF0Zm9ybSwKCQkJCXZlcnNpb246IHAudmVyc2lvbiwKCQkJCWNvcmVW
ZXJzaW9uOiBwLmNvcmVWZXJzaW9uLAoJCQkJdWlWZXJzaW9uOiBwLnVpVmVyc2lvbiwKCQkJCWRl
dmljZUZhbWlseTogcC5kZXZpY2VGYW1pbHksCgkJCQltb2RlbElkZW50aWZpZXI6IHAubW9kZWxJ
ZGVudGlmaWVyLAoJCQkJY2FwczogcC5jYXBzLAoJCQkJY29tbWFuZHM6IHAuY29tbWFuZHMsCgkJ
CQlwZXJtaXNzaW9uczogcC5wZXJtaXNzaW9ucywKCQkJCXJlbW90ZUlwOiBwLnJlbW90ZUlwLAoJ
CQkJc2lsZW50OiBwLnNpbGVudAoJCQl9KTsKCQkJaWYgKHJlc3VsdC5zdGF0dXMgPT09ICJwZW5k
aW5nIiAmJiByZXN1bHQuY3JlYXRlZCkgY29udGV4dC5icm9hZGNhc3QoIm5vZGUucGFpci5yZXF1
ZXN0ZWQiLCByZXN1bHQucmVxdWVzdCwgeyBkcm9wSWZTbG93OiB0cnVlIH0pOwoJCQlyZXNwb25k
KHRydWUsIHJlc3VsdCwgdm9pZCAwKTsKCQl9KTsKCX0sCgkibm9kZS5wYWlyLmxpc3QiOiBhc3lu
YyAoeyBwYXJhbXMsIHJlc3BvbmQgfSkgPT4gewoJCWlmICghdmFsaWRhdGVOb2RlUGFpckxpc3RQ
YXJhbXMocGFyYW1zKSkgewoJCQlyZXNwb25kSW52YWxpZFBhcmFtcyh7CgkJCQlyZXNwb25kLAoJ
CQkJbWV0aG9kOiAibm9kZS5wYWlyLmxpc3QiLAoJCQkJdmFsaWRhdG9yOiB2YWxpZGF0ZU5vZGVQ
YWlyTGlzdFBhcmFtcwoJCQl9KTsKCQkJcmV0dXJuOwoJCX0KCQlhd2FpdCByZXNwb25kVW5hdmFp
bGFibGVPblRocm93KHJlc3BvbmQsIGFzeW5jICgpID0+IHsKCQkJcmVzcG9uZCh0cnVlLCBhd2Fp
dCBsaXN0Tm9kZVBhaXJpbmcoKSwgdm9pZCAwKTsKCQl9KTsKCX0sCgkibm9kZS5wYWlyLmFwcHJv
dmUiOiBhc3luYyAoeyBwYXJhbXMsIHJlc3BvbmQsIGNvbnRleHQgfSkgPT4gewoJCWlmICghdmFs
aWRhdGVOb2RlUGFpckFwcHJvdmVQYXJhbXMocGFyYW1zKSkgewoJCQlyZXNwb25kSW52YWxpZFBh
cmFtcyh7CgkJCQlyZXNwb25kLAoJCQkJbWV0aG9kOiAibm9kZS5wYWlyLmFwcHJvdmUiLAoJCQkJ
dmFsaWRhdG9yOiB2YWxpZGF0ZU5vZGVQYWlyQXBwcm92ZVBhcmFtcwoJCQl9KTsKCQkJcmV0dXJu
OwoJCX0KCQljb25zdCB7IHJlcXVlc3RJZCB9ID0gcGFyYW1zOwoJCWF3YWl0IHJlc3BvbmRVbmF2
YWlsYWJsZU9uVGhyb3cocmVzcG9uZCwgYXN5bmMgKCkgPT4gewoJCQljb25zdCBhcHByb3ZlZCA9
IGF3YWl0IGFwcHJvdmVOb2RlUGFpcmluZyhyZXF1ZXN0SWQpOwoJCQlpZiAoIWFwcHJvdmVkKSB7
CgkJCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElE
X1JFUVVFU1QsICJ1bmtub3duIHJlcXVlc3RJZCIpKTsKCQkJCXJldHVybjsKCQkJfQoJCQljb250
ZXh0LmJyb2FkY2FzdCgibm9kZS5wYWlyLnJlc29sdmVkIiwgewoJCQkJcmVxdWVzdElkLAoJCQkJ
bm9kZUlkOiBhcHByb3ZlZC5ub2RlLm5vZGVJZCwKCQkJCWRlY2lzaW9uOiAiYXBwcm92ZWQiLAoJ
CQkJdHM6IERhdGUubm93KCkKCQkJfSwgeyBkcm9wSWZTbG93OiB0cnVlIH0pOwoJCQlyZXNwb25k
KHRydWUsIGFwcHJvdmVkLCB2b2lkIDApOwoJCX0pOwoJfSwKCSJub2RlLnBhaXIucmVqZWN0Ijog
YXN5bmMgKHsgcGFyYW1zLCByZXNwb25kLCBjb250ZXh0IH0pID0+IHsKCQlpZiAoIXZhbGlkYXRl
Tm9kZVBhaXJSZWplY3RQYXJhbXMocGFyYW1zKSkgewoJCQlyZXNwb25kSW52YWxpZFBhcmFtcyh7
CgkJCQlyZXNwb25kLAoJCQkJbWV0aG9kOiAibm9kZS5wYWlyLnJlamVjdCIsCgkJCQl2YWxpZGF0
b3I6IHZhbGlkYXRlTm9kZVBhaXJSZWplY3RQYXJhbXMKCQkJfSk7CgkJCXJldHVybjsKCQl9CgkJ
Y29uc3QgeyByZXF1ZXN0SWQgfSA9IHBhcmFtczsKCQlhd2FpdCByZXNwb25kVW5hdmFpbGFibGVP
blRocm93KHJlc3BvbmQsIGFzeW5jICgpID0+IHsKCQkJY29uc3QgcmVqZWN0ZWQgPSBhd2FpdCBy
ZWplY3ROb2RlUGFpcmluZyhyZXF1ZXN0SWQpOwoJCQlpZiAoIXJlamVjdGVkKSB7CgkJCQlyZXNw
b25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1Qs
ICJ1bmtub3duIHJlcXVlc3RJZCIpKTsKCQkJCXJldHVybjsKCQkJfQoJCQljb250ZXh0LmJyb2Fk
Y2FzdCgibm9kZS5wYWlyLnJlc29sdmVkIiwgewoJCQkJcmVxdWVzdElkLAoJCQkJbm9kZUlkOiBy
ZWplY3RlZC5ub2RlSWQsCgkJCQlkZWNpc2lvbjogInJlamVjdGVkIiwKCQkJCXRzOiBEYXRlLm5v
dygpCgkJCX0sIHsgZHJvcElmU2xvdzogdHJ1ZSB9KTsKCQkJcmVzcG9uZCh0cnVlLCByZWplY3Rl
ZCwgdm9pZCAwKTsKCQl9KTsKCX0sCgkibm9kZS5wYWlyLnZlcmlmeSI6IGFzeW5jICh7IHBhcmFt
cywgcmVzcG9uZCB9KSA9PiB7CgkJaWYgKCF2YWxpZGF0ZU5vZGVQYWlyVmVyaWZ5UGFyYW1zKHBh
cmFtcykpIHsKCQkJcmVzcG9uZEludmFsaWRQYXJhbXMoewoJCQkJcmVzcG9uZCwKCQkJCW1ldGhv
ZDogIm5vZGUucGFpci52ZXJpZnkiLAoJCQkJdmFsaWRhdG9yOiB2YWxpZGF0ZU5vZGVQYWlyVmVy
aWZ5UGFyYW1zCgkJCX0pOwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0IHsgbm9kZUlkLCB0b2tlbiB9
ID0gcGFyYW1zOwoJCWF3YWl0IHJlc3BvbmRVbmF2YWlsYWJsZU9uVGhyb3cocmVzcG9uZCwgYXN5
bmMgKCkgPT4gewoJCQlyZXNwb25kKHRydWUsIGF3YWl0IHZlcmlmeU5vZGVUb2tlbihub2RlSWQs
IHRva2VuKSwgdm9pZCAwKTsKCQl9KTsKCX0sCgkibm9kZS5yZW5hbWUiOiBhc3luYyAoeyBwYXJh
bXMsIHJlc3BvbmQgfSkgPT4gewoJCWlmICghdmFsaWRhdGVOb2RlUmVuYW1lUGFyYW1zKHBhcmFt
cykpIHsKCQkJcmVzcG9uZEludmFsaWRQYXJhbXMoewoJCQkJcmVzcG9uZCwKCQkJCW1ldGhvZDog
Im5vZGUucmVuYW1lIiwKCQkJCXZhbGlkYXRvcjogdmFsaWRhdGVOb2RlUmVuYW1lUGFyYW1zCgkJ
CX0pOwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0IHsgbm9kZUlkLCBkaXNwbGF5TmFtZSB9ID0gcGFy
YW1zOwoJCWF3YWl0IHJlc3BvbmRVbmF2YWlsYWJsZU9uVGhyb3cocmVzcG9uZCwgYXN5bmMgKCkg
PT4gewoJCQljb25zdCB0cmltbWVkID0gZGlzcGxheU5hbWUudHJpbSgpOwoJCQlpZiAoIXRyaW1t
ZWQpIHsKCQkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLklO
VkFMSURfUkVRVUVTVCwgImRpc3BsYXlOYW1lIHJlcXVpcmVkIikpOwoJCQkJcmV0dXJuOwoJCQl9
CgkJCWNvbnN0IHVwZGF0ZWQgPSBhd2FpdCByZW5hbWVQYWlyZWROb2RlKG5vZGVJZCwgdHJpbW1l
ZCk7CgkJCWlmICghdXBkYXRlZCkgewoJCQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNo
YXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCAidW5rbm93biBub2RlSWQiKSk7CgkJCQly
ZXR1cm47CgkJCX0KCQkJcmVzcG9uZCh0cnVlLCB7CgkJCQlub2RlSWQ6IHVwZGF0ZWQubm9kZUlk
LAoJCQkJZGlzcGxheU5hbWU6IHVwZGF0ZWQuZGlzcGxheU5hbWUKCQkJfSwgdm9pZCAwKTsKCQl9
KTsKCX0sCgkibm9kZS5saXN0IjogYXN5bmMgKHsgcGFyYW1zLCByZXNwb25kLCBjb250ZXh0IH0p
ID0+IHsKCQlpZiAoIXZhbGlkYXRlTm9kZUxpc3RQYXJhbXMocGFyYW1zKSkgewoJCQlyZXNwb25k
SW52YWxpZFBhcmFtcyh7CgkJCQlyZXNwb25kLAoJCQkJbWV0aG9kOiAibm9kZS5saXN0IiwKCQkJ
CXZhbGlkYXRvcjogdmFsaWRhdGVOb2RlTGlzdFBhcmFtcwoJCQl9KTsKCQkJcmV0dXJuOwoJCX0K
CQlhd2FpdCByZXNwb25kVW5hdmFpbGFibGVPblRocm93KHJlc3BvbmQsIGFzeW5jICgpID0+IHsK
CQkJY29uc3QgbGlzdCA9IGF3YWl0IGxpc3REZXZpY2VQYWlyaW5nKCk7CgkJCWNvbnN0IHBhaXJl
ZEJ5SWQgPSBuZXcgTWFwKGxpc3QucGFpcmVkLmZpbHRlcigoZW50cnkpID0+IGlzTm9kZUVudHJ5
KGVudHJ5KSkubWFwKChlbnRyeSkgPT4gW2VudHJ5LmRldmljZUlkLCB7CgkJCQlub2RlSWQ6IGVu
dHJ5LmRldmljZUlkLAoJCQkJZGlzcGxheU5hbWU6IGVudHJ5LmRpc3BsYXlOYW1lLAoJCQkJcGxh
dGZvcm06IGVudHJ5LnBsYXRmb3JtLAoJCQkJdmVyc2lvbjogdm9pZCAwLAoJCQkJY29yZVZlcnNp
b246IHZvaWQgMCwKCQkJCXVpVmVyc2lvbjogdm9pZCAwLAoJCQkJZGV2aWNlRmFtaWx5OiB2b2lk
IDAsCgkJCQltb2RlbElkZW50aWZpZXI6IHZvaWQgMCwKCQkJCXJlbW90ZUlwOiBlbnRyeS5yZW1v
dGVJcCwKCQkJCWNhcHM6IFtdLAoJCQkJY29tbWFuZHM6IFtdLAoJCQkJcGVybWlzc2lvbnM6IHZv
aWQgMAoJCQl9XSkpOwoJCQljb25zdCBjb25uZWN0ZWQgPSBjb250ZXh0Lm5vZGVSZWdpc3RyeS5s
aXN0Q29ubmVjdGVkKCk7CgkJCWNvbnN0IGNvbm5lY3RlZEJ5SWQgPSBuZXcgTWFwKGNvbm5lY3Rl
ZC5tYXAoKG4pID0+IFtuLm5vZGVJZCwgbl0pKTsKCQkJY29uc3Qgbm9kZXMgPSBbLi4ubmV3IFNl
dChbLi4ucGFpcmVkQnlJZC5rZXlzKCksIC4uLmNvbm5lY3RlZEJ5SWQua2V5cygpXSldLm1hcCgo
bm9kZUlkKSA9PiB7CgkJCQljb25zdCBwYWlyZWQgPSBwYWlyZWRCeUlkLmdldChub2RlSWQpOwoJ
CQkJY29uc3QgbGl2ZSA9IGNvbm5lY3RlZEJ5SWQuZ2V0KG5vZGVJZCk7CgkJCQljb25zdCBjYXBz
ID0gdW5pcXVlU29ydGVkU3RyaW5ncyhbLi4ubGl2ZT8uY2FwcyA/PyBwYWlyZWQ/LmNhcHMgPz8g
W11dKTsKCQkJCWNvbnN0IGNvbW1hbmRzID0gdW5pcXVlU29ydGVkU3RyaW5ncyhbLi4ubGl2ZT8u
Y29tbWFuZHMgPz8gcGFpcmVkPy5jb21tYW5kcyA/PyBbXV0pOwoJCQkJcmV0dXJuIHsKCQkJCQlu
b2RlSWQsCgkJCQkJZGlzcGxheU5hbWU6IGxpdmU/LmRpc3BsYXlOYW1lID8/IHBhaXJlZD8uZGlz
cGxheU5hbWUsCgkJCQkJcGxhdGZvcm06IGxpdmU/LnBsYXRmb3JtID8/IHBhaXJlZD8ucGxhdGZv
cm0sCgkJCQkJdmVyc2lvbjogbGl2ZT8udmVyc2lvbiA/PyBwYWlyZWQ/LnZlcnNpb24sCgkJCQkJ
Y29yZVZlcnNpb246IGxpdmU/LmNvcmVWZXJzaW9uID8/IHBhaXJlZD8uY29yZVZlcnNpb24sCgkJ
CQkJdWlWZXJzaW9uOiBsaXZlPy51aVZlcnNpb24gPz8gcGFpcmVkPy51aVZlcnNpb24sCgkJCQkJ
ZGV2aWNlRmFtaWx5OiBsaXZlPy5kZXZpY2VGYW1pbHkgPz8gcGFpcmVkPy5kZXZpY2VGYW1pbHks
CgkJCQkJbW9kZWxJZGVudGlmaWVyOiBsaXZlPy5tb2RlbElkZW50aWZpZXIgPz8gcGFpcmVkPy5t
b2RlbElkZW50aWZpZXIsCgkJCQkJcmVtb3RlSXA6IGxpdmU/LnJlbW90ZUlwID8/IHBhaXJlZD8u
cmVtb3RlSXAsCgkJCQkJY2FwcywKCQkJCQljb21tYW5kcywKCQkJCQlwYXRoRW52OiBsaXZlPy5w
YXRoRW52LAoJCQkJCXBlcm1pc3Npb25zOiBsaXZlPy5wZXJtaXNzaW9ucyA/PyBwYWlyZWQ/LnBl
cm1pc3Npb25zLAoJCQkJCWNvbm5lY3RlZEF0TXM6IGxpdmU/LmNvbm5lY3RlZEF0TXMsCgkJCQkJ
cGFpcmVkOiBCb29sZWFuKHBhaXJlZCksCgkJCQkJY29ubmVjdGVkOiBCb29sZWFuKGxpdmUpCgkJ
CQl9OwoJCQl9KTsKCQkJbm9kZXMuc29ydCgoYSwgYikgPT4gewoJCQkJaWYgKGEuY29ubmVjdGVk
ICE9PSBiLmNvbm5lY3RlZCkgcmV0dXJuIGEuY29ubmVjdGVkID8gLTEgOiAxOwoJCQkJY29uc3Qg
YW4gPSAoYS5kaXNwbGF5TmFtZSA/PyBhLm5vZGVJZCkudG9Mb3dlckNhc2UoKTsKCQkJCWNvbnN0
IGJuID0gKGIuZGlzcGxheU5hbWUgPz8gYi5ub2RlSWQpLnRvTG93ZXJDYXNlKCk7CgkJCQlpZiAo
YW4gPCBibikgcmV0dXJuIC0xOwoJCQkJaWYgKGFuID4gYm4pIHJldHVybiAxOwoJCQkJcmV0dXJu
IGEubm9kZUlkLmxvY2FsZUNvbXBhcmUoYi5ub2RlSWQpOwoJCQl9KTsKCQkJcmVzcG9uZCh0cnVl
LCB7CgkJCQl0czogRGF0ZS5ub3coKSwKCQkJCW5vZGVzCgkJCX0sIHZvaWQgMCk7CgkJfSk7Cgl9
LAoJIm5vZGUuZGVzY3JpYmUiOiBhc3luYyAoeyBwYXJhbXMsIHJlc3BvbmQsIGNvbnRleHQgfSkg
PT4gewoJCWlmICghdmFsaWRhdGVOb2RlRGVzY3JpYmVQYXJhbXMocGFyYW1zKSkgewoJCQlyZXNw
b25kSW52YWxpZFBhcmFtcyh7CgkJCQlyZXNwb25kLAoJCQkJbWV0aG9kOiAibm9kZS5kZXNjcmli
ZSIsCgkJCQl2YWxpZGF0b3I6IHZhbGlkYXRlTm9kZURlc2NyaWJlUGFyYW1zCgkJCX0pOwoJCQly
ZXR1cm47CgkJfQoJCWNvbnN0IHsgbm9kZUlkIH0gPSBwYXJhbXM7CgkJY29uc3QgaWQgPSBTdHJp
bmcobm9kZUlkID8/ICIiKS50cmltKCk7CgkJaWYgKCFpZCkgewoJCQlyZXNwb25kKGZhbHNlLCB2
b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsICJub2RlSWQgcmVx
dWlyZWQiKSk7CgkJCXJldHVybjsKCQl9CgkJYXdhaXQgcmVzcG9uZFVuYXZhaWxhYmxlT25UaHJv
dyhyZXNwb25kLCBhc3luYyAoKSA9PiB7CgkJCWNvbnN0IHBhaXJlZCA9IChhd2FpdCBsaXN0RGV2
aWNlUGFpcmluZygpKS5wYWlyZWQuZmluZCgobikgPT4gbi5kZXZpY2VJZCA9PT0gaWQgJiYgaXNO
b2RlRW50cnkobikpOwoJCQljb25zdCBsaXZlID0gY29udGV4dC5ub2RlUmVnaXN0cnkubGlzdENv
bm5lY3RlZCgpLmZpbmQoKG4pID0+IG4ubm9kZUlkID09PSBpZCk7CgkJCWlmICghcGFpcmVkICYm
ICFsaXZlKSB7CgkJCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rl
cy5JTlZBTElEX1JFUVVFU1QsICJ1bmtub3duIG5vZGVJZCIpKTsKCQkJCXJldHVybjsKCQkJfQoJ
CQljb25zdCBjYXBzID0gdW5pcXVlU29ydGVkU3RyaW5ncyhbLi4ubGl2ZT8uY2FwcyA/PyBbXV0p
OwoJCQljb25zdCBjb21tYW5kcyA9IHVuaXF1ZVNvcnRlZFN0cmluZ3MoWy4uLmxpdmU/LmNvbW1h
bmRzID8/IFtdXSk7CgkJCXJlc3BvbmQodHJ1ZSwgewoJCQkJdHM6IERhdGUubm93KCksCgkJCQlu
b2RlSWQ6IGlkLAoJCQkJZGlzcGxheU5hbWU6IGxpdmU/LmRpc3BsYXlOYW1lID8/IHBhaXJlZD8u
ZGlzcGxheU5hbWUsCgkJCQlwbGF0Zm9ybTogbGl2ZT8ucGxhdGZvcm0gPz8gcGFpcmVkPy5wbGF0
Zm9ybSwKCQkJCXZlcnNpb246IGxpdmU/LnZlcnNpb24sCgkJCQljb3JlVmVyc2lvbjogbGl2ZT8u
Y29yZVZlcnNpb24sCgkJCQl1aVZlcnNpb246IGxpdmU/LnVpVmVyc2lvbiwKCQkJCWRldmljZUZh
bWlseTogbGl2ZT8uZGV2aWNlRmFtaWx5LAoJCQkJbW9kZWxJZGVudGlmaWVyOiBsaXZlPy5tb2Rl
bElkZW50aWZpZXIsCgkJCQlyZW1vdGVJcDogbGl2ZT8ucmVtb3RlSXAgPz8gcGFpcmVkPy5yZW1v
dGVJcCwKCQkJCWNhcHMsCgkJCQljb21tYW5kcywKCQkJCXBhdGhFbnY6IGxpdmU/LnBhdGhFbnYs
CgkJCQlwZXJtaXNzaW9uczogbGl2ZT8ucGVybWlzc2lvbnMsCgkJCQljb25uZWN0ZWRBdE1zOiBs
aXZlPy5jb25uZWN0ZWRBdE1zLAoJCQkJcGFpcmVkOiBCb29sZWFuKHBhaXJlZCksCgkJCQljb25u
ZWN0ZWQ6IEJvb2xlYW4obGl2ZSkKCQkJfSwgdm9pZCAwKTsKCQl9KTsKCX0sCgkibm9kZS5jYW52
YXMuY2FwYWJpbGl0eS5yZWZyZXNoIjogYXN5bmMgKHsgcGFyYW1zLCByZXNwb25kLCBjbGllbnQg
fSkgPT4gewoJCWlmICghdmFsaWRhdGVOb2RlTGlzdFBhcmFtcyhwYXJhbXMpKSB7CgkJCXJlc3Bv
bmRJbnZhbGlkUGFyYW1zKHsKCQkJCXJlc3BvbmQsCgkJCQltZXRob2Q6ICJub2RlLmNhbnZhcy5j
YXBhYmlsaXR5LnJlZnJlc2giLAoJCQkJdmFsaWRhdG9yOiB2YWxpZGF0ZU5vZGVMaXN0UGFyYW1z
CgkJCX0pOwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0IGJhc2VDYW52YXNIb3N0VXJsID0gY2xpZW50
Py5jYW52YXNIb3N0VXJsPy50cmltKCkgPz8gIiI7CgkJaWYgKCFiYXNlQ2FudmFzSG9zdFVybCkg
ewoJCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5VTkFWQUlM
QUJMRSwgImNhbnZhcyBob3N0IHVuYXZhaWxhYmxlIGZvciB0aGlzIG5vZGUgc2Vzc2lvbiIpKTsK
CQkJcmV0dXJuOwoJCX0KCQljb25zdCBjYW52YXNDYXBhYmlsaXR5ID0gbWludENhbnZhc0NhcGFi
aWxpdHlUb2tlbigpOwoJCWNvbnN0IGNhbnZhc0NhcGFiaWxpdHlFeHBpcmVzQXRNcyA9IERhdGUu
bm93KCkgKyBDQU5WQVNfQ0FQQUJJTElUWV9UVExfTVM7CgkJY29uc3Qgc2NvcGVkQ2FudmFzSG9z
dFVybCA9IGJ1aWxkQ2FudmFzU2NvcGVkSG9zdFVybChiYXNlQ2FudmFzSG9zdFVybCwgY2FudmFz
Q2FwYWJpbGl0eSk7CgkJaWYgKCFzY29wZWRDYW52YXNIb3N0VXJsKSB7CgkJCXJlc3BvbmQoZmFs
c2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLlVOQVZBSUxBQkxFLCAiZmFpbGVkIHRv
IG1pbnQgc2NvcGVkIGNhbnZhcyBob3N0IFVSTCIpKTsKCQkJcmV0dXJuOwoJCX0KCQlpZiAoY2xp
ZW50KSB7CgkJCWNsaWVudC5jYW52YXNDYXBhYmlsaXR5ID0gY2FudmFzQ2FwYWJpbGl0eTsKCQkJ
Y2xpZW50LmNhbnZhc0NhcGFiaWxpdHlFeHBpcmVzQXRNcyA9IGNhbnZhc0NhcGFiaWxpdHlFeHBp
cmVzQXRNczsKCQl9CgkJcmVzcG9uZCh0cnVlLCB7CgkJCWNhbnZhc0NhcGFiaWxpdHksCgkJCWNh
bnZhc0NhcGFiaWxpdHlFeHBpcmVzQXRNcywKCQkJY2FudmFzSG9zdFVybDogc2NvcGVkQ2FudmFz
SG9zdFVybAoJCX0sIHZvaWQgMCk7Cgl9LAoJIm5vZGUucGVuZGluZy5wdWxsIjogYXN5bmMgKHsg
cGFyYW1zLCByZXNwb25kLCBjbGllbnQgfSkgPT4gewoJCWlmICghdmFsaWRhdGVOb2RlTGlzdFBh
cmFtcyhwYXJhbXMpKSB7CgkJCXJlc3BvbmRJbnZhbGlkUGFyYW1zKHsKCQkJCXJlc3BvbmQsCgkJ
CQltZXRob2Q6ICJub2RlLnBlbmRpbmcucHVsbCIsCgkJCQl2YWxpZGF0b3I6IHZhbGlkYXRlTm9k
ZUxpc3RQYXJhbXMKCQkJfSk7CgkJCXJldHVybjsKCQl9CgkJY29uc3Qgbm9kZUlkID0gY2xpZW50
Py5jb25uZWN0Py5kZXZpY2U/LmlkID8/IGNsaWVudD8uY29ubmVjdD8uY2xpZW50Py5pZDsKCQlj
b25zdCB0cmltbWVkTm9kZUlkID0gU3RyaW5nKG5vZGVJZCA/PyAiIikudHJpbSgpOwoJCWlmICgh
dHJpbW1lZE5vZGVJZCkgewoJCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJy
b3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsICJub2RlSWQgcmVxdWlyZWQiKSk7CgkJCXJldHVybjsK
CQl9CgkJcmVzcG9uZCh0cnVlLCB7CgkJCW5vZGVJZDogdHJpbW1lZE5vZGVJZCwKCQkJYWN0aW9u
czogbGlzdFBlbmRpbmdOb2RlQWN0aW9ucyh0cmltbWVkTm9kZUlkKS5tYXAoKGVudHJ5KSA9PiAo
ewoJCQkJaWQ6IGVudHJ5LmlkLAoJCQkJY29tbWFuZDogZW50cnkuY29tbWFuZCwKCQkJCXBhcmFt
c0pTT046IGVudHJ5LnBhcmFtc0pTT04gPz8gbnVsbCwKCQkJCWVucXVldWVkQXRNczogZW50cnku
ZW5xdWV1ZWRBdE1zCgkJCX0pKQoJCX0sIHZvaWQgMCk7Cgl9LAoJIm5vZGUucGVuZGluZy5hY2si
OiBhc3luYyAoeyBwYXJhbXMsIHJlc3BvbmQsIGNsaWVudCB9KSA9PiB7CgkJaWYgKCF2YWxpZGF0
ZU5vZGVQZW5kaW5nQWNrUGFyYW1zKHBhcmFtcykpIHsKCQkJcmVzcG9uZEludmFsaWRQYXJhbXMo
ewoJCQkJcmVzcG9uZCwKCQkJCW1ldGhvZDogIm5vZGUucGVuZGluZy5hY2siLAoJCQkJdmFsaWRh
dG9yOiB2YWxpZGF0ZU5vZGVQZW5kaW5nQWNrUGFyYW1zCgkJCX0pOwoJCQlyZXR1cm47CgkJfQoJ
CWNvbnN0IG5vZGVJZCA9IGNsaWVudD8uY29ubmVjdD8uZGV2aWNlPy5pZCA/PyBjbGllbnQ/LmNv
bm5lY3Q/LmNsaWVudD8uaWQ7CgkJY29uc3QgdHJpbW1lZE5vZGVJZCA9IFN0cmluZyhub2RlSWQg
Pz8gIiIpLnRyaW0oKTsKCQlpZiAoIXRyaW1tZWROb2RlSWQpIHsKCQkJcmVzcG9uZChmYWxzZSwg
dm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCAibm9kZUlkIHJl
cXVpcmVkIikpOwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0IGFja0lkcyA9IEFycmF5LmZyb20obmV3
IFNldCgocGFyYW1zLmlkcyA/PyBbXSkubWFwKCh2YWx1ZSkgPT4gU3RyaW5nKHZhbHVlID8/ICIi
KS50cmltKCkpLmZpbHRlcihCb29sZWFuKSkpOwoJCXJlc3BvbmQodHJ1ZSwgewoJCQlub2RlSWQ6
IHRyaW1tZWROb2RlSWQsCgkJCWFja2VkSWRzOiBhY2tJZHMsCgkJCXJlbWFpbmluZ0NvdW50OiBh
Y2tQZW5kaW5nTm9kZUFjdGlvbnModHJpbW1lZE5vZGVJZCwgYWNrSWRzKS5sZW5ndGgKCQl9LCB2
b2lkIDApOwoJfSwKCSJub2RlLmludm9rZSI6IGFzeW5jICh7IHBhcmFtcywgcmVzcG9uZCwgY29u
dGV4dCwgY2xpZW50LCByZXEgfSkgPT4gewoJCWlmICghdmFsaWRhdGVOb2RlSW52b2tlUGFyYW1z
KHBhcmFtcykpIHsKCQkJcmVzcG9uZEludmFsaWRQYXJhbXMoewoJCQkJcmVzcG9uZCwKCQkJCW1l
dGhvZDogIm5vZGUuaW52b2tlIiwKCQkJCXZhbGlkYXRvcjogdmFsaWRhdGVOb2RlSW52b2tlUGFy
YW1zCgkJCX0pOwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0IHAgPSBwYXJhbXM7CgkJY29uc3Qgbm9k
ZUlkID0gU3RyaW5nKHAubm9kZUlkID8/ICIiKS50cmltKCk7CgkJY29uc3QgY29tbWFuZCA9IFN0
cmluZyhwLmNvbW1hbmQgPz8gIiIpLnRyaW0oKTsKCQlpZiAoIW5vZGVJZCB8fCAhY29tbWFuZCkg
ewoJCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElE
X1JFUVVFU1QsICJub2RlSWQgYW5kIGNvbW1hbmQgcmVxdWlyZWQiKSk7CgkJCXJldHVybjsKCQl9
CgkJaWYgKGNvbW1hbmQgPT09ICJzeXN0ZW0uZXhlY0FwcHJvdmFscy5nZXQiIHx8IGNvbW1hbmQg
PT09ICJzeXN0ZW0uZXhlY0FwcHJvdmFscy5zZXQiKSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQg
MCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgIm5vZGUuaW52b2tlIGRv
ZXMgbm90IGFsbG93IHN5c3RlbS5leGVjQXBwcm92YWxzLio7IHVzZSBleGVjLmFwcHJvdmFscy5u
b2RlLioiLCB7IGRldGFpbHM6IHsgY29tbWFuZCB9IH0pKTsKCQkJcmV0dXJuOwoJCX0KCQlhd2Fp
dCByZXNwb25kVW5hdmFpbGFibGVPblRocm93KHJlc3BvbmQsIGFzeW5jICgpID0+IHsKCQkJbGV0
IG5vZGVTZXNzaW9uID0gY29udGV4dC5ub2RlUmVnaXN0cnkuZ2V0KG5vZGVJZCk7CgkJCWlmICgh
bm9kZVNlc3Npb24pIHsKCQkJCWNvbnN0IHdha2VSZXFJZCA9IHJlcS5pZDsKCQkJCWNvbnN0IHdh
a2VGbG93U3RhcnRlZEF0TXMgPSBEYXRlLm5vdygpOwoJCQkJY29udGV4dC5sb2dHYXRld2F5Lmlu
Zm8oYG5vZGUgd2FrZSBzdGFydCBub2RlPSR7bm9kZUlkfSByZXE9JHt3YWtlUmVxSWR9IGNvbW1h
bmQ9JHtjb21tYW5kfWApOwoJCQkJY29uc3Qgd2FrZSA9IGF3YWl0IG1heWJlV2FrZU5vZGVXaXRo
QXBucyhub2RlSWQpOwoJCQkJY29udGV4dC5sb2dHYXRld2F5LmluZm8oYG5vZGUgd2FrZSBzdGFn
ZT13YWtlMSBub2RlPSR7bm9kZUlkfSByZXE9JHt3YWtlUmVxSWR9IGF2YWlsYWJsZT0ke3dha2Uu
YXZhaWxhYmxlfSB0aHJvdHRsZWQ9JHt3YWtlLnRocm90dGxlZH0gcGF0aD0ke3dha2UucGF0aH0g
ZHVyYXRpb25Ncz0ke3dha2UuZHVyYXRpb25Nc30gYXBuc1N0YXR1cz0ke3dha2UuYXBuc1N0YXR1
cyA/PyAtMX0gYXBuc1JlYXNvbj0ke3dha2UuYXBuc1JlYXNvbiA/PyAiLSJ9YCk7CgkJCQlpZiAo
d2FrZS5hdmFpbGFibGUpIHsKCQkJCQljb25zdCB3YWl0U3RhcnRlZEF0TXMgPSBEYXRlLm5vdygp
OwoJCQkJCWNvbnN0IHdhaXRUaW1lb3V0TXMgPSBOT0RFX1dBS0VfUkVDT05ORUNUX1dBSVRfTVM7
CgkJCQkJY29uc3QgcmVjb25uZWN0ZWQgPSBhd2FpdCB3YWl0Rm9yTm9kZVJlY29ubmVjdCh7CgkJ
CQkJCW5vZGVJZCwKCQkJCQkJY29udGV4dCwKCQkJCQkJdGltZW91dE1zOiB3YWl0VGltZW91dE1z
CgkJCQkJfSk7CgkJCQkJY29uc3Qgd2FpdER1cmF0aW9uTXMgPSBNYXRoLm1heCgwLCBEYXRlLm5v
dygpIC0gd2FpdFN0YXJ0ZWRBdE1zKTsKCQkJCQljb250ZXh0LmxvZ0dhdGV3YXkuaW5mbyhgbm9k
ZSB3YWtlIHN0YWdlPXdhaXQxIG5vZGU9JHtub2RlSWR9IHJlcT0ke3dha2VSZXFJZH0gcmVjb25u
ZWN0ZWQ9JHtyZWNvbm5lY3RlZH0gdGltZW91dE1zPSR7d2FpdFRpbWVvdXRNc30gZHVyYXRpb25N
cz0ke3dhaXREdXJhdGlvbk1zfWApOwoJCQkJfQoJCQkJbm9kZVNlc3Npb24gPSBjb250ZXh0Lm5v
ZGVSZWdpc3RyeS5nZXQobm9kZUlkKTsKCQkJCWlmICghbm9kZVNlc3Npb24gJiYgd2FrZS5hdmFp
bGFibGUpIHsKCQkJCQljb25zdCByZXRyeVdha2UgPSBhd2FpdCBtYXliZVdha2VOb2RlV2l0aEFw
bnMobm9kZUlkLCB7IGZvcmNlOiB0cnVlIH0pOwoJCQkJCWNvbnRleHQubG9nR2F0ZXdheS5pbmZv
KGBub2RlIHdha2Ugc3RhZ2U9d2FrZTIgbm9kZT0ke25vZGVJZH0gcmVxPSR7d2FrZVJlcUlkfSBm
b3JjZT10cnVlIGF2YWlsYWJsZT0ke3JldHJ5V2FrZS5hdmFpbGFibGV9IHRocm90dGxlZD0ke3Jl
dHJ5V2FrZS50aHJvdHRsZWR9IHBhdGg9JHtyZXRyeVdha2UucGF0aH0gZHVyYXRpb25Ncz0ke3Jl
dHJ5V2FrZS5kdXJhdGlvbk1zfSBhcG5zU3RhdHVzPSR7cmV0cnlXYWtlLmFwbnNTdGF0dXMgPz8g
LTF9IGFwbnNSZWFzb249JHtyZXRyeVdha2UuYXBuc1JlYXNvbiA/PyAiLSJ9YCk7CgkJCQkJaWYg
KHJldHJ5V2FrZS5hdmFpbGFibGUpIHsKCQkJCQkJY29uc3Qgd2FpdFN0YXJ0ZWRBdE1zID0gRGF0
ZS5ub3coKTsKCQkJCQkJY29uc3Qgd2FpdFRpbWVvdXRNcyA9IE5PREVfV0FLRV9SRUNPTk5FQ1Rf
UkVUUllfV0FJVF9NUzsKCQkJCQkJY29uc3QgcmVjb25uZWN0ZWQgPSBhd2FpdCB3YWl0Rm9yTm9k
ZVJlY29ubmVjdCh7CgkJCQkJCQlub2RlSWQsCgkJCQkJCQljb250ZXh0LAoJCQkJCQkJdGltZW91
dE1zOiB3YWl0VGltZW91dE1zCgkJCQkJCX0pOwoJCQkJCQljb25zdCB3YWl0RHVyYXRpb25NcyA9
IE1hdGgubWF4KDAsIERhdGUubm93KCkgLSB3YWl0U3RhcnRlZEF0TXMpOwoJCQkJCQljb250ZXh0
LmxvZ0dhdGV3YXkuaW5mbyhgbm9kZSB3YWtlIHN0YWdlPXdhaXQyIG5vZGU9JHtub2RlSWR9IHJl
cT0ke3dha2VSZXFJZH0gcmVjb25uZWN0ZWQ9JHtyZWNvbm5lY3RlZH0gdGltZW91dE1zPSR7d2Fp
dFRpbWVvdXRNc30gZHVyYXRpb25Ncz0ke3dhaXREdXJhdGlvbk1zfWApOwoJCQkJCX0KCQkJCQlu
b2RlU2Vzc2lvbiA9IGNvbnRleHQubm9kZVJlZ2lzdHJ5LmdldChub2RlSWQpOwoJCQkJfQoJCQkJ
aWYgKCFub2RlU2Vzc2lvbikgewoJCQkJCWNvbnN0IHRvdGFsRHVyYXRpb25NcyA9IE1hdGgubWF4
KDAsIERhdGUubm93KCkgLSB3YWtlRmxvd1N0YXJ0ZWRBdE1zKTsKCQkJCQljb25zdCBudWRnZSA9
IGF3YWl0IG1heWJlU2VuZE5vZGVXYWtlTnVkZ2Uobm9kZUlkKTsKCQkJCQljb250ZXh0LmxvZ0dh
dGV3YXkuaW5mbyhgbm9kZSB3YWtlIG51ZGdlIG5vZGU9JHtub2RlSWR9IHJlcT0ke3dha2VSZXFJ
ZH0gc2VudD0ke251ZGdlLnNlbnR9IHRocm90dGxlZD0ke251ZGdlLnRocm90dGxlZH0gcmVhc29u
PSR7bnVkZ2UucmVhc29ufSBkdXJhdGlvbk1zPSR7bnVkZ2UuZHVyYXRpb25Nc30gYXBuc1N0YXR1
cz0ke251ZGdlLmFwbnNTdGF0dXMgPz8gLTF9IGFwbnNSZWFzb249JHtudWRnZS5hcG5zUmVhc29u
ID8/ICItIn1gKTsKCQkJCQljb250ZXh0LmxvZ0dhdGV3YXkud2Fybihgbm9kZSB3YWtlIGRvbmUg
bm9kZT0ke25vZGVJZH0gcmVxPSR7d2FrZVJlcUlkfSBjb25uZWN0ZWQ9ZmFsc2UgcmVhc29uPW5v
dF9jb25uZWN0ZWQgdG90YWxNcz0ke3RvdGFsRHVyYXRpb25Nc31gKTsKCQkJCQlyZXNwb25kKGZh
bHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5VTkFWQUlMQUJMRSwgIm5vZGUgbm90
IGNvbm5lY3RlZCIsIHsgZGV0YWlsczogeyBjb2RlOiAiTk9UX0NPTk5FQ1RFRCIgfSB9KSk7CgkJ
CQkJcmV0dXJuOwoJCQkJfQoJCQkJY29uc3QgdG90YWxEdXJhdGlvbk1zID0gTWF0aC5tYXgoMCwg
RGF0ZS5ub3coKSAtIHdha2VGbG93U3RhcnRlZEF0TXMpOwoJCQkJY29udGV4dC5sb2dHYXRld2F5
LmluZm8oYG5vZGUgd2FrZSBkb25lIG5vZGU9JHtub2RlSWR9IHJlcT0ke3dha2VSZXFJZH0gY29u
bmVjdGVkPXRydWUgdG90YWxNcz0ke3RvdGFsRHVyYXRpb25Nc31gKTsKCQkJfQoJCQljb25zdCBh
bGxvd2xpc3QgPSByZXNvbHZlTm9kZUNvbW1hbmRBbGxvd2xpc3QobG9hZENvbmZpZygpLCBub2Rl
U2Vzc2lvbik7CgkJCWNvbnN0IGFsbG93ZWQgPSBpc05vZGVDb21tYW5kQWxsb3dlZCh7CgkJCQlj
b21tYW5kLAoJCQkJZGVjbGFyZWRDb21tYW5kczogbm9kZVNlc3Npb24uY29tbWFuZHMsCgkJCQlh
bGxvd2xpc3QKCQkJfSk7CgkJCWlmICghYWxsb3dlZC5vaykgewoJCQkJY29uc3QgaGludCA9IGJ1
aWxkTm9kZUNvbW1hbmRSZWplY3Rpb25IaW50KGFsbG93ZWQucmVhc29uLCBjb21tYW5kLCBub2Rl
U2Vzc2lvbik7CgkJCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rl
cy5JTlZBTElEX1JFUVVFU1QsIGhpbnQsIHsgZGV0YWlsczogewoJCQkJCXJlYXNvbjogYWxsb3dl
ZC5yZWFzb24sCgkJCQkJY29tbWFuZAoJCQkJfSB9KSk7CgkJCQlyZXR1cm47CgkJCX0KCQkJY29u
c3QgZm9yd2FyZGVkUGFyYW1zID0gc2FuaXRpemVOb2RlSW52b2tlUGFyYW1zRm9yRm9yd2FyZGlu
Zyh7CgkJCQlub2RlSWQsCgkJCQljb21tYW5kLAoJCQkJcmF3UGFyYW1zOiBwLnBhcmFtcywKCQkJ
CWNsaWVudCwKCQkJCWV4ZWNBcHByb3ZhbE1hbmFnZXI6IGNvbnRleHQuZXhlY0FwcHJvdmFsTWFu
YWdlcgoJCQl9KTsKCQkJaWYgKCFmb3J3YXJkZWRQYXJhbXMub2spIHsKCQkJCXJlc3BvbmQoZmFs
c2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgZm9yd2Fy
ZGVkUGFyYW1zLm1lc3NhZ2UsIHsgZGV0YWlsczogZm9yd2FyZGVkUGFyYW1zLmRldGFpbHMgPz8g
bnVsbCB9KSk7CgkJCQlyZXR1cm47CgkJCX0KCQkJY29uc3QgcmVzID0gYXdhaXQgY29udGV4dC5u
b2RlUmVnaXN0cnkuaW52b2tlKHsKCQkJCW5vZGVJZCwKCQkJCWNvbW1hbmQsCgkJCQlwYXJhbXM6
IGZvcndhcmRlZFBhcmFtcy5wYXJhbXMsCgkJCQl0aW1lb3V0TXM6IHAudGltZW91dE1zLAoJCQkJ
aWRlbXBvdGVuY3lLZXk6IHAuaWRlbXBvdGVuY3lLZXkKCQkJfSk7CgkJCWlmICghcmVzLm9rKSB7
CgkJCQlpZiAoc2hvdWxkUXVldWVBc1BlbmRpbmdGb3JlZ3JvdW5kQWN0aW9uKHsKCQkJCQlwbGF0
Zm9ybTogbm9kZVNlc3Npb24ucGxhdGZvcm0sCgkJCQkJY29tbWFuZCwKCQkJCQllcnJvcjogcmVz
LmVycm9yCgkJCQl9KSkgewoJCQkJCWNvbnN0IHF1ZXVlZCA9IGVucXVldWVQZW5kaW5nTm9kZUFj
dGlvbih7CgkJCQkJCW5vZGVJZCwKCQkJCQkJY29tbWFuZCwKCQkJCQkJcGFyYW1zSlNPTjogdG9Q
ZW5kaW5nUGFyYW1zSlNPTihmb3J3YXJkZWRQYXJhbXMucGFyYW1zKSwKCQkJCQkJaWRlbXBvdGVu
Y3lLZXk6IHAuaWRlbXBvdGVuY3lLZXkKCQkJCQl9KTsKCQkJCQljb25zdCB3YWtlID0gYXdhaXQg
bWF5YmVXYWtlTm9kZVdpdGhBcG5zKG5vZGVJZCk7CgkJCQkJY29udGV4dC5sb2dHYXRld2F5Lmlu
Zm8oYG5vZGUgcGVuZGluZyBxdWV1ZWQgbm9kZT0ke25vZGVJZH0gcmVxPSR7cmVxLmlkfSBjb21t
YW5kPSR7Y29tbWFuZH0gcXVldWVkSWQ9JHtxdWV1ZWQuaWR9IHdha2VQYXRoPSR7d2FrZS5wYXRo
fSB3YWtlQXZhaWxhYmxlPSR7d2FrZS5hdmFpbGFibGV9YCk7CgkJCQkJcmVzcG9uZChmYWxzZSwg
dm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuVU5BVkFJTEFCTEUsICJub2RlIGNvbW1hbmQg
cXVldWVkIHVudGlsIGlPUyByZXR1cm5zIHRvIGZvcmVncm91bmQiLCB7CgkJCQkJCXJldHJ5YWJs
ZTogdHJ1ZSwKCQkJCQkJZGV0YWlsczogewoJCQkJCQkJY29kZTogIlFVRVVFRF9VTlRJTF9GT1JF
R1JPVU5EIiwKCQkJCQkJCXF1ZXVlZEFjdGlvbklkOiBxdWV1ZWQuaWQsCgkJCQkJCQlub2RlSWQs
CgkJCQkJCQljb21tYW5kLAoJCQkJCQkJd2FrZTogewoJCQkJCQkJCXBhdGg6IHdha2UucGF0aCwK
CQkJCQkJCQlhdmFpbGFibGU6IHdha2UuYXZhaWxhYmxlLAoJCQkJCQkJCXRocm90dGxlZDogd2Fr
ZS50aHJvdHRsZWQsCgkJCQkJCQkJYXBuc1N0YXR1czogd2FrZS5hcG5zU3RhdHVzLAoJCQkJCQkJ
CWFwbnNSZWFzb246IHdha2UuYXBuc1JlYXNvbgoJCQkJCQkJfSwKCQkJCQkJCW5vZGVFcnJvcjog
cmVzLmVycm9yID8/IG51bGwKCQkJCQkJfQoJCQkJCX0pKTsKCQkJCQlyZXR1cm47CgkJCQl9CgkJ
CQlpZiAoIXJlc3BvbmRVbmF2YWlsYWJsZU9uTm9kZUludm9rZUVycm9yKHJlc3BvbmQsIHJlcykp
IHJldHVybjsKCQkJCXJldHVybjsKCQkJfQoJCQlyZXNwb25kKHRydWUsIHsKCQkJCW9rOiB0cnVl
LAoJCQkJbm9kZUlkLAoJCQkJY29tbWFuZCwKCQkJCXBheWxvYWQ6IHJlcy5wYXlsb2FkSlNPTiA/
IHNhZmVQYXJzZUpzb24ocmVzLnBheWxvYWRKU09OKSA6IHJlcy5wYXlsb2FkLAoJCQkJcGF5bG9h
ZEpTT046IHJlcy5wYXlsb2FkSlNPTiA/PyBudWxsCgkJCX0sIHZvaWQgMCk7CgkJfSk7Cgl9LAoJ
Im5vZGUuaW52b2tlLnJlc3VsdCI6IGhhbmRsZU5vZGVJbnZva2VSZXN1bHQsCgkibm9kZS5ldmVu
dCI6IGFzeW5jICh7IHBhcmFtcywgcmVzcG9uZCwgY29udGV4dCwgY2xpZW50IH0pID0+IHsKCQlp
ZiAoIXZhbGlkYXRlTm9kZUV2ZW50UGFyYW1zKHBhcmFtcykpIHsKCQkJcmVzcG9uZEludmFsaWRQ
YXJhbXMoewoJCQkJcmVzcG9uZCwKCQkJCW1ldGhvZDogIm5vZGUuZXZlbnQiLAoJCQkJdmFsaWRh
dG9yOiB2YWxpZGF0ZU5vZGVFdmVudFBhcmFtcwoJCQl9KTsKCQkJcmV0dXJuOwoJCX0KCQljb25z
dCBwID0gcGFyYW1zOwoJCWNvbnN0IHBheWxvYWRKU09OID0gdHlwZW9mIHAucGF5bG9hZEpTT04g
PT09ICJzdHJpbmciID8gcC5wYXlsb2FkSlNPTiA6IHAucGF5bG9hZCAhPT0gdm9pZCAwID8gSlNP
Ti5zdHJpbmdpZnkocC5wYXlsb2FkKSA6IG51bGw7CgkJYXdhaXQgcmVzcG9uZFVuYXZhaWxhYmxl
T25UaHJvdyhyZXNwb25kLCBhc3luYyAoKSA9PiB7CgkJCWNvbnN0IHsgaGFuZGxlTm9kZUV2ZW50
IH0gPSBhd2FpdCBpbXBvcnQoIi4vc2VydmVyLW5vZGUtZXZlbnRzLUJMR0RmZTROLmpzIik7CgkJ
CWNvbnN0IG5vZGVJZCA9IGNsaWVudD8uY29ubmVjdD8uZGV2aWNlPy5pZCA/PyBjbGllbnQ/LmNv
bm5lY3Q/LmNsaWVudD8uaWQgPz8gIm5vZGUiOwoJCQlhd2FpdCBoYW5kbGVOb2RlRXZlbnQoewoJ
CQkJZGVwczogY29udGV4dC5kZXBzLAoJCQkJYnJvYWRjYXN0OiBjb250ZXh0LmJyb2FkY2FzdCwK
CQkJCW5vZGVTZW5kVG9TZXNzaW9uOiBjb250ZXh0Lm5vZGVTZW5kVG9TZXNzaW9uLAoJCQkJbm9k
ZVN1YnNjcmliZTogY29udGV4dC5ub2RlU3Vic2NyaWJlLAoJCQkJbm9kZVVuc3Vic2NyaWJlOiBj
b250ZXh0Lm5vZGVVbnN1YnNjcmliZSwKCQkJCWJyb2FkY2FzdFZvaWNlV2FrZUNoYW5nZWQ6IGNv
bnRleHQuYnJvYWRjYXN0Vm9pY2VXYWtlQ2hhbmdlZCwKCQkJCWFkZENoYXRSdW46IGNvbnRleHQu
YWRkQ2hhdFJ1biwKCQkJCXJlbW92ZUNoYXRSdW46IGNvbnRleHQucmVtb3ZlQ2hhdFJ1biwKCQkJ
CWNoYXRBYm9ydENvbnRyb2xsZXJzOiBjb250ZXh0LmNoYXRBYm9ydENvbnRyb2xsZXJzLAoJCQkJ
Y2hhdEFib3J0ZWRSdW5zOiBjb250ZXh0LmNoYXRBYm9ydGVkUnVucywKCQkJCWNoYXRSdW5CdWZm
ZXJzOiBjb250ZXh0LmNoYXRSdW5CdWZmZXJzLAoJCQkJY2hhdERlbHRhU2VudEF0OiBjb250ZXh0
LmNoYXREZWx0YVNlbnRBdCwKCQkJCWRlZHVwZTogY29udGV4dC5kZWR1cGUsCgkJCQlhZ2VudFJ1
blNlcTogY29udGV4dC5hZ2VudFJ1blNlcSwKCQkJCWdldEhlYWx0aENhY2hlOiBjb250ZXh0Lmdl
dEhlYWx0aENhY2hlLAoJCQkJcmVmcmVzaEhlYWx0aFNuYXBzaG90OiBjb250ZXh0LnJlZnJlc2hI
ZWFsdGhTbmFwc2hvdCwKCQkJCWxvYWRHYXRld2F5TW9kZWxDYXRhbG9nOiBjb250ZXh0LmxvYWRH
YXRld2F5TW9kZWxDYXRhbG9nLAoJCQkJbG9nR2F0ZXdheTogeyB3YXJuOiBjb250ZXh0LmxvZ0dh
dGV3YXkud2FybiB9CgkJCX0sIG5vZGVJZCwgewoJCQkJZXZlbnQ6IHAuZXZlbnQsCgkJCQlwYXls
b2FkSlNPTgoJCQl9KTsKCQkJcmVzcG9uZCh0cnVlLCB7IG9rOiB0cnVlIH0sIHZvaWQgMCk7CgkJ
fSk7Cgl9Cn07CmZ1bmN0aW9uIGJ1aWxkTm9kZUNvbW1hbmRSZWplY3Rpb25IaW50KHJlYXNvbiwg
Y29tbWFuZCwgbm9kZSkgewoJY29uc3QgcGxhdGZvcm0gPSBub2RlPy5wbGF0Zm9ybSA/PyAidW5r
bm93biI7CglpZiAocmVhc29uID09PSAiY29tbWFuZCBub3QgZGVjbGFyZWQgYnkgbm9kZSIpIHJl
dHVybiBgbm9kZSBjb21tYW5kIG5vdCBhbGxvd2VkOiB0aGUgbm9kZSAocGxhdGZvcm06ICR7cGxh
dGZvcm19KSBkb2VzIG5vdCBzdXBwb3J0ICIke2NvbW1hbmR9ImA7CglpZiAocmVhc29uID09PSAi
Y29tbWFuZCBub3QgYWxsb3dsaXN0ZWQiKSByZXR1cm4gYG5vZGUgY29tbWFuZCBub3QgYWxsb3dl
ZDogIiR7Y29tbWFuZH0iIGlzIG5vdCBpbiB0aGUgYWxsb3dsaXN0IGZvciBwbGF0Zm9ybSAiJHtw
bGF0Zm9ybX0iYDsKCWlmIChyZWFzb24gPT09ICJub2RlIGRpZCBub3QgZGVjbGFyZSBjb21tYW5k
cyIpIHJldHVybiBgbm9kZSBjb21tYW5kIG5vdCBhbGxvd2VkOiB0aGUgbm9kZSBkaWQgbm90IGRl
Y2xhcmUgYW55IHN1cHBvcnRlZCBjb21tYW5kc2A7CglyZXR1cm4gYG5vZGUgY29tbWFuZCBub3Qg
YWxsb3dlZDogJHtyZWFzb259YDsKfQovLyNlbmRyZWdpb24KLy8jcmVnaW9uIHNyYy9nYXRld2F5
L3NlcnZlci1tZXRob2RzL25vZGVzLXBlbmRpbmcudHMKZnVuY3Rpb24gcmVzb2x2ZUNsaWVudE5v
ZGVJZChjbGllbnQpIHsKCWNvbnN0IHRyaW1tZWQgPSAoY2xpZW50Py5jb25uZWN0Py5kZXZpY2U/
LmlkID8/IGNsaWVudD8uY29ubmVjdD8uY2xpZW50Py5pZCA/PyAiIikudHJpbSgpOwoJcmV0dXJu
IHRyaW1tZWQubGVuZ3RoID4gMCA/IHRyaW1tZWQgOiBudWxsOwp9CmNvbnN0IG5vZGVQZW5kaW5n
SGFuZGxlcnMgPSB7Cgkibm9kZS5wZW5kaW5nLmRyYWluIjogYXN5bmMgKHsgcGFyYW1zLCByZXNw
b25kLCBjbGllbnQgfSkgPT4gewoJCWlmICghdmFsaWRhdGVOb2RlUGVuZGluZ0RyYWluUGFyYW1z
KHBhcmFtcykpIHsKCQkJcmVzcG9uZEludmFsaWRQYXJhbXMoewoJCQkJcmVzcG9uZCwKCQkJCW1l
dGhvZDogIm5vZGUucGVuZGluZy5kcmFpbiIsCgkJCQl2YWxpZGF0b3I6IHZhbGlkYXRlTm9kZVBl
bmRpbmdEcmFpblBhcmFtcwoJCQl9KTsKCQkJcmV0dXJuOwoJCX0KCQljb25zdCBub2RlSWQgPSBy
ZXNvbHZlQ2xpZW50Tm9kZUlkKGNsaWVudCk7CgkJaWYgKCFub2RlSWQpIHsKCQkJcmVzcG9uZChm
YWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCAibm9k
ZS5wZW5kaW5nLmRyYWluIHJlcXVpcmVzIGEgY29ubmVjdGVkIGRldmljZSBpZGVudGl0eSIpKTsK
CQkJcmV0dXJuOwoJCX0KCQlyZXNwb25kKHRydWUsIHsKCQkJbm9kZUlkLAoJCQkuLi5kcmFpbk5v
ZGVQZW5kaW5nV29yayhub2RlSWQsIHsKCQkJCW1heEl0ZW1zOiBwYXJhbXMubWF4SXRlbXMsCgkJ
CQlpbmNsdWRlRGVmYXVsdFN0YXR1czogdHJ1ZQoJCQl9KQoJCX0sIHZvaWQgMCk7Cgl9LAoJIm5v
ZGUucGVuZGluZy5lbnF1ZXVlIjogYXN5bmMgKHsgcGFyYW1zLCByZXNwb25kLCBjb250ZXh0IH0p
ID0+IHsKCQlpZiAoIXZhbGlkYXRlTm9kZVBlbmRpbmdFbnF1ZXVlUGFyYW1zKHBhcmFtcykpIHsK
CQkJcmVzcG9uZEludmFsaWRQYXJhbXMoewoJCQkJcmVzcG9uZCwKCQkJCW1ldGhvZDogIm5vZGUu
cGVuZGluZy5lbnF1ZXVlIiwKCQkJCXZhbGlkYXRvcjogdmFsaWRhdGVOb2RlUGVuZGluZ0VucXVl
dWVQYXJhbXMKCQkJfSk7CgkJCXJldHVybjsKCQl9CgkJY29uc3QgcCA9IHBhcmFtczsKCQlhd2Fp
dCByZXNwb25kVW5hdmFpbGFibGVPblRocm93KHJlc3BvbmQsIGFzeW5jICgpID0+IHsKCQkJY29u
c3QgcXVldWVkID0gZW5xdWV1ZU5vZGVQZW5kaW5nV29yayh7CgkJCQlub2RlSWQ6IHAubm9kZUlk
LAoJCQkJdHlwZTogcC50eXBlLAoJCQkJcHJpb3JpdHk6IHAucHJpb3JpdHksCgkJCQlleHBpcmVz
SW5NczogcC5leHBpcmVzSW5NcwoJCQl9KTsKCQkJbGV0IHdha2VUcmlnZ2VyZWQgPSBmYWxzZTsK
CQkJaWYgKHAud2FrZSAhPT0gZmFsc2UgJiYgIXF1ZXVlZC5kZWR1cGVkICYmICFjb250ZXh0Lm5v
ZGVSZWdpc3RyeS5nZXQocC5ub2RlSWQpKSB7CgkJCQljb25zdCB3YWtlUmVxSWQgPSBxdWV1ZWQu
aXRlbS5pZDsKCQkJCWNvbnRleHQubG9nR2F0ZXdheS5pbmZvKGBub2RlIHBlbmRpbmcgd2FrZSBz
dGFydCBub2RlPSR7cC5ub2RlSWR9IHJlcT0ke3dha2VSZXFJZH0gdHlwZT0ke3F1ZXVlZC5pdGVt
LnR5cGV9YCk7CgkJCQljb25zdCB3YWtlID0gYXdhaXQgbWF5YmVXYWtlTm9kZVdpdGhBcG5zKHAu
bm9kZUlkLCB7IHdha2VSZWFzb246ICJub2RlLnBlbmRpbmciIH0pOwoJCQkJY29udGV4dC5sb2dH
YXRld2F5LmluZm8oYG5vZGUgcGVuZGluZyB3YWtlIHN0YWdlPXdha2UxIG5vZGU9JHtwLm5vZGVJ
ZH0gcmVxPSR7d2FrZVJlcUlkfSBhdmFpbGFibGU9JHt3YWtlLmF2YWlsYWJsZX0gdGhyb3R0bGVk
PSR7d2FrZS50aHJvdHRsZWR9IHBhdGg9JHt3YWtlLnBhdGh9IGR1cmF0aW9uTXM9JHt3YWtlLmR1
cmF0aW9uTXN9IGFwbnNTdGF0dXM9JHt3YWtlLmFwbnNTdGF0dXMgPz8gLTF9IGFwbnNSZWFzb249
JHt3YWtlLmFwbnNSZWFzb24gPz8gIi0ifWApOwoJCQkJd2FrZVRyaWdnZXJlZCA9IHdha2UuYXZh
aWxhYmxlOwoJCQkJaWYgKHdha2UuYXZhaWxhYmxlKSB7CgkJCQkJY29uc3QgcmVjb25uZWN0ZWQg
PSBhd2FpdCB3YWl0Rm9yTm9kZVJlY29ubmVjdCh7CgkJCQkJCW5vZGVJZDogcC5ub2RlSWQsCgkJ
CQkJCWNvbnRleHQsCgkJCQkJCXRpbWVvdXRNczogTk9ERV9XQUtFX1JFQ09OTkVDVF9XQUlUX01T
CgkJCQkJfSk7CgkJCQkJY29udGV4dC5sb2dHYXRld2F5LmluZm8oYG5vZGUgcGVuZGluZyB3YWtl
IHN0YWdlPXdhaXQxIG5vZGU9JHtwLm5vZGVJZH0gcmVxPSR7d2FrZVJlcUlkfSByZWNvbm5lY3Rl
ZD0ke3JlY29ubmVjdGVkfSB0aW1lb3V0TXM9JHtOT0RFX1dBS0VfUkVDT05ORUNUX1dBSVRfTVN9
YCk7CgkJCQl9CgkJCQlpZiAoIWNvbnRleHQubm9kZVJlZ2lzdHJ5LmdldChwLm5vZGVJZCkgJiYg
d2FrZS5hdmFpbGFibGUpIHsKCQkJCQljb25zdCByZXRyeVdha2UgPSBhd2FpdCBtYXliZVdha2VO
b2RlV2l0aEFwbnMocC5ub2RlSWQsIHsKCQkJCQkJZm9yY2U6IHRydWUsCgkJCQkJCXdha2VSZWFz
b246ICJub2RlLnBlbmRpbmciCgkJCQkJfSk7CgkJCQkJY29udGV4dC5sb2dHYXRld2F5LmluZm8o
YG5vZGUgcGVuZGluZyB3YWtlIHN0YWdlPXdha2UyIG5vZGU9JHtwLm5vZGVJZH0gcmVxPSR7d2Fr
ZVJlcUlkfSBmb3JjZT10cnVlIGF2YWlsYWJsZT0ke3JldHJ5V2FrZS5hdmFpbGFibGV9IHRocm90
dGxlZD0ke3JldHJ5V2FrZS50aHJvdHRsZWR9IHBhdGg9JHtyZXRyeVdha2UucGF0aH0gZHVyYXRp
b25Ncz0ke3JldHJ5V2FrZS5kdXJhdGlvbk1zfSBhcG5zU3RhdHVzPSR7cmV0cnlXYWtlLmFwbnNT
dGF0dXMgPz8gLTF9IGFwbnNSZWFzb249JHtyZXRyeVdha2UuYXBuc1JlYXNvbiA/PyAiLSJ9YCk7
CgkJCQkJaWYgKHJldHJ5V2FrZS5hdmFpbGFibGUpIHsKCQkJCQkJY29uc3QgcmVjb25uZWN0ZWQg
PSBhd2FpdCB3YWl0Rm9yTm9kZVJlY29ubmVjdCh7CgkJCQkJCQlub2RlSWQ6IHAubm9kZUlkLAoJ
CQkJCQkJY29udGV4dCwKCQkJCQkJCXRpbWVvdXRNczogTk9ERV9XQUtFX1JFQ09OTkVDVF9SRVRS
WV9XQUlUX01TCgkJCQkJCX0pOwoJCQkJCQljb250ZXh0LmxvZ0dhdGV3YXkuaW5mbyhgbm9kZSBw
ZW5kaW5nIHdha2Ugc3RhZ2U9d2FpdDIgbm9kZT0ke3Aubm9kZUlkfSByZXE9JHt3YWtlUmVxSWR9
IHJlY29ubmVjdGVkPSR7cmVjb25uZWN0ZWR9IHRpbWVvdXRNcz0ke05PREVfV0FLRV9SRUNPTk5F
Q1RfUkVUUllfV0FJVF9NU31gKTsKCQkJCQl9CgkJCQl9CgkJCQlpZiAoIWNvbnRleHQubm9kZVJl
Z2lzdHJ5LmdldChwLm5vZGVJZCkpIHsKCQkJCQljb25zdCBudWRnZSA9IGF3YWl0IG1heWJlU2Vu
ZE5vZGVXYWtlTnVkZ2UocC5ub2RlSWQpOwoJCQkJCWNvbnRleHQubG9nR2F0ZXdheS5pbmZvKGBu
b2RlIHBlbmRpbmcgd2FrZSBudWRnZSBub2RlPSR7cC5ub2RlSWR9IHJlcT0ke3dha2VSZXFJZH0g
c2VudD0ke251ZGdlLnNlbnR9IHRocm90dGxlZD0ke251ZGdlLnRocm90dGxlZH0gcmVhc29uPSR7
bnVkZ2UucmVhc29ufSBkdXJhdGlvbk1zPSR7bnVkZ2UuZHVyYXRpb25Nc30gYXBuc1N0YXR1cz0k
e251ZGdlLmFwbnNTdGF0dXMgPz8gLTF9IGFwbnNSZWFzb249JHtudWRnZS5hcG5zUmVhc29uID8/
ICItIn1gKTsKCQkJCQljb250ZXh0LmxvZ0dhdGV3YXkud2Fybihgbm9kZSBwZW5kaW5nIHdha2Ug
ZG9uZSBub2RlPSR7cC5ub2RlSWR9IHJlcT0ke3dha2VSZXFJZH0gY29ubmVjdGVkPWZhbHNlIHJl
YXNvbj1ub3RfY29ubmVjdGVkYCk7CgkJCQl9IGVsc2UgY29udGV4dC5sb2dHYXRld2F5LmluZm8o
YG5vZGUgcGVuZGluZyB3YWtlIGRvbmUgbm9kZT0ke3Aubm9kZUlkfSByZXE9JHt3YWtlUmVxSWR9
IGNvbm5lY3RlZD10cnVlYCk7CgkJCX0KCQkJcmVzcG9uZCh0cnVlLCB7CgkJCQlub2RlSWQ6IHAu
bm9kZUlkLAoJCQkJcmV2aXNpb246IHF1ZXVlZC5yZXZpc2lvbiwKCQkJCXF1ZXVlZDogcXVldWVk
Lml0ZW0sCgkJCQl3YWtlVHJpZ2dlcmVkCgkJCX0sIHZvaWQgMCk7CgkJfSk7Cgl9Cn07Ci8vI2Vu
ZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dhdGV3YXkvc2VydmVyLW1ldGhvZHMvcHVzaC50cwpmdW5j
dGlvbiBub3JtYWxpemVPcHRpb25hbFN0cmluZyh2YWx1ZSkgewoJaWYgKHR5cGVvZiB2YWx1ZSAh
PT0gInN0cmluZyIpIHJldHVybjsKCWNvbnN0IHRyaW1tZWQgPSB2YWx1ZS50cmltKCk7CglyZXR1
cm4gdHJpbW1lZC5sZW5ndGggPiAwID8gdHJpbW1lZCA6IHZvaWQgMDsKfQpjb25zdCBwdXNoSGFu
ZGxlcnMgPSB7ICJwdXNoLnRlc3QiOiBhc3luYyAoeyBwYXJhbXMsIHJlc3BvbmQgfSkgPT4gewoJ
aWYgKCF2YWxpZGF0ZVB1c2hUZXN0UGFyYW1zKHBhcmFtcykpIHsKCQlyZXNwb25kSW52YWxpZFBh
cmFtcyh7CgkJCXJlc3BvbmQsCgkJCW1ldGhvZDogInB1c2gudGVzdCIsCgkJCXZhbGlkYXRvcjog
dmFsaWRhdGVQdXNoVGVzdFBhcmFtcwoJCX0pOwoJCXJldHVybjsKCX0KCWNvbnN0IG5vZGVJZCA9
IFN0cmluZyhwYXJhbXMubm9kZUlkID8/ICIiKS50cmltKCk7CglpZiAoIW5vZGVJZCkgewoJCXJl
c3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVT
VCwgIm5vZGVJZCByZXF1aXJlZCIpKTsKCQlyZXR1cm47Cgl9Cgljb25zdCB0aXRsZSA9IG5vcm1h
bGl6ZU9wdGlvbmFsU3RyaW5nKHBhcmFtcy50aXRsZSkgPz8gIk9wZW5DbGF3IjsKCWNvbnN0IGJv
ZHkgPSBub3JtYWxpemVPcHRpb25hbFN0cmluZyhwYXJhbXMuYm9keSkgPz8gYFB1c2ggdGVzdCBm
b3Igbm9kZSAke25vZGVJZH1gOwoJYXdhaXQgcmVzcG9uZFVuYXZhaWxhYmxlT25UaHJvdyhyZXNw
b25kLCBhc3luYyAoKSA9PiB7CgkJY29uc3QgcmVnaXN0cmF0aW9uID0gYXdhaXQgbG9hZEFwbnNS
ZWdpc3RyYXRpb24obm9kZUlkKTsKCQlpZiAoIXJlZ2lzdHJhdGlvbikgewoJCQlyZXNwb25kKGZh
bHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsIGBub2Rl
ICR7bm9kZUlkfSBoYXMgbm8gQVBOcyByZWdpc3RyYXRpb24gKGNvbm5lY3QgaU9TIG5vZGUgZmly
c3QpYCkpOwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0IG92ZXJyaWRlRW52aXJvbm1lbnQgPSBub3Jt
YWxpemVBcG5zRW52aXJvbm1lbnQocGFyYW1zLmVudmlyb25tZW50KTsKCQljb25zdCByZXN1bHQg
PSByZWdpc3RyYXRpb24udHJhbnNwb3J0ID09PSAiZGlyZWN0IiA/IGF3YWl0IChhc3luYyAoKSA9
PiB7CgkJCWNvbnN0IGF1dGggPSBhd2FpdCByZXNvbHZlQXBuc0F1dGhDb25maWdGcm9tRW52KHBy
b2Nlc3MuZW52KTsKCQkJaWYgKCFhdXRoLm9rKSB7CgkJCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAs
IGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsIGF1dGguZXJyb3IpKTsKCQkJ
CXJldHVybiBudWxsOwoJCQl9CgkJCXJldHVybiBhd2FpdCBzZW5kQXBuc0FsZXJ0KHsKCQkJCXJl
Z2lzdHJhdGlvbjogewoJCQkJCS4uLnJlZ2lzdHJhdGlvbiwKCQkJCQllbnZpcm9ubWVudDogb3Zl
cnJpZGVFbnZpcm9ubWVudCA/PyByZWdpc3RyYXRpb24uZW52aXJvbm1lbnQKCQkJCX0sCgkJCQlu
b2RlSWQsCgkJCQl0aXRsZSwKCQkJCWJvZHksCgkJCQlhdXRoOiBhdXRoLnZhbHVlCgkJCX0pOwoJ
CX0pKCkgOiBhd2FpdCAoYXN5bmMgKCkgPT4gewoJCQljb25zdCByZWxheSA9IHJlc29sdmVBcG5z
UmVsYXlDb25maWdGcm9tRW52KHByb2Nlc3MuZW52LCBsb2FkQ29uZmlnKCkuZ2F0ZXdheSk7CgkJ
CWlmICghcmVsYXkub2spIHsKCQkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShF
cnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgcmVsYXkuZXJyb3IpKTsKCQkJCXJldHVybiBudWxs
OwoJCQl9CgkJCXJldHVybiBhd2FpdCBzZW5kQXBuc0FsZXJ0KHsKCQkJCXJlZ2lzdHJhdGlvbiwK
CQkJCW5vZGVJZCwKCQkJCXRpdGxlLAoJCQkJYm9keSwKCQkJCXJlbGF5Q29uZmlnOiByZWxheS52
YWx1ZQoJCQl9KTsKCQl9KSgpOwoJCWlmICghcmVzdWx0KSByZXR1cm47CgkJaWYgKHNob3VsZENs
ZWFyU3RvcmVkQXBuc1JlZ2lzdHJhdGlvbih7CgkJCXJlZ2lzdHJhdGlvbiwKCQkJcmVzdWx0LAoJ
CQlvdmVycmlkZUVudmlyb25tZW50CgkJfSkpIGF3YWl0IGNsZWFyQXBuc1JlZ2lzdHJhdGlvbklm
Q3VycmVudCh7CgkJCW5vZGVJZCwKCQkJcmVnaXN0cmF0aW9uCgkJfSk7CgkJcmVzcG9uZCh0cnVl
LCByZXN1bHQsIHZvaWQgMCk7Cgl9KTsKfSB9OwovLyNlbmRyZWdpb24KLy8jcmVnaW9uIHNyYy9n
YXRld2F5L3NlcnZlci1tZXRob2RzL3NlbmQudHMKY29uc3QgaW5mbGlnaHRCeUNvbnRleHQgPSAv
KiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKY29uc3QgZ2V0SW5mbGlnaHRNYXAgPSAoY29u
dGV4dCkgPT4gewoJbGV0IGluZmxpZ2h0ID0gaW5mbGlnaHRCeUNvbnRleHQuZ2V0KGNvbnRleHQp
OwoJaWYgKCFpbmZsaWdodCkgewoJCWluZmxpZ2h0ID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAo
KTsKCQlpbmZsaWdodEJ5Q29udGV4dC5zZXQoY29udGV4dCwgaW5mbGlnaHQpOwoJfQoJcmV0dXJu
IGluZmxpZ2h0Owp9Owphc3luYyBmdW5jdGlvbiByZXNvbHZlUmVxdWVzdGVkQ2hhbm5lbChwYXJh
bXMpIHsKCWNvbnN0IGNoYW5uZWxJbnB1dCA9IHR5cGVvZiBwYXJhbXMucmVxdWVzdENoYW5uZWwg
PT09ICJzdHJpbmciID8gcGFyYW1zLnJlcXVlc3RDaGFubmVsIDogdm9pZCAwOwoJY29uc3Qgbm9y
bWFsaXplZENoYW5uZWwgPSBjaGFubmVsSW5wdXQgPyBub3JtYWxpemVDaGFubmVsSWQoY2hhbm5l
bElucHV0KSA6IG51bGw7CglpZiAoY2hhbm5lbElucHV0ICYmICFub3JtYWxpemVkQ2hhbm5lbCkg
ewoJCWNvbnN0IG5vcm1hbGl6ZWRJbnB1dCA9IGNoYW5uZWxJbnB1dC50cmltKCkudG9Mb3dlckNh
c2UoKTsKCQlpZiAocGFyYW1zLnJlamVjdFdlYmNoYXRBc0ludGVybmFsT25seSAmJiBub3JtYWxp
emVkSW5wdXQgPT09ICJ3ZWJjaGF0IikgcmV0dXJuIHsgZXJyb3I6IGVycm9yU2hhcGUoRXJyb3JD
b2Rlcy5JTlZBTElEX1JFUVVFU1QsICJ1bnN1cHBvcnRlZCBjaGFubmVsOiB3ZWJjaGF0IChpbnRl
cm5hbC1vbmx5KS4gVXNlIGBjaGF0LnNlbmRgIGZvciBXZWJDaGF0IFVJIG1lc3NhZ2VzIG9yIGNo
b29zZSBhIGRlbGl2ZXJhYmxlIGNoYW5uZWwuIikgfTsKCQlyZXR1cm4geyBlcnJvcjogZXJyb3JT
aGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgcGFyYW1zLnVuc3VwcG9ydGVkTWVzc2Fn
ZShjaGFubmVsSW5wdXQpKSB9OwoJfQoJY29uc3QgY2ZnID0gbG9hZENvbmZpZygpOwoJbGV0IGNo
YW5uZWwgPSBub3JtYWxpemVkQ2hhbm5lbDsKCWlmICghY2hhbm5lbCkgdHJ5IHsKCQljaGFubmVs
ID0gKGF3YWl0IHJlc29sdmVNZXNzYWdlQ2hhbm5lbFNlbGVjdGlvbih7IGNmZyB9KSkuY2hhbm5l
bDsKCX0gY2F0Y2ggKGVycikgewoJCXJldHVybiB7IGVycm9yOiBlcnJvclNoYXBlKEVycm9yQ29k
ZXMuSU5WQUxJRF9SRVFVRVNULCBTdHJpbmcoZXJyKSkgfTsKCX0KCXJldHVybiB7CgkJY2ZnLAoJ
CWNoYW5uZWwKCX07Cn0KY29uc3Qgc2VuZEhhbmRsZXJzID0gewoJc2VuZDogYXN5bmMgKHsgcGFy
YW1zLCByZXNwb25kLCBjb250ZXh0IH0pID0+IHsKCQljb25zdCBwID0gcGFyYW1zOwoJCWlmICgh
dmFsaWRhdGVTZW5kUGFyYW1zKHApKSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JT
aGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgYGludmFsaWQgc2VuZCBwYXJhbXM6ICR7
Zm9ybWF0VmFsaWRhdGlvbkVycm9ycyh2YWxpZGF0ZVNlbmRQYXJhbXMuZXJyb3JzKX1gKSk7CgkJ
CXJldHVybjsKCQl9CgkJY29uc3QgcmVxdWVzdCA9IHA7CgkJY29uc3QgaWRlbSA9IHJlcXVlc3Qu
aWRlbXBvdGVuY3lLZXk7CgkJY29uc3QgZGVkdXBlS2V5ID0gYHNlbmQ6JHtpZGVtfWA7CgkJY29u
c3QgY2FjaGVkID0gY29udGV4dC5kZWR1cGUuZ2V0KGRlZHVwZUtleSk7CgkJaWYgKGNhY2hlZCkg
ewoJCQlyZXNwb25kKGNhY2hlZC5vaywgY2FjaGVkLnBheWxvYWQsIGNhY2hlZC5lcnJvciwgeyBj
YWNoZWQ6IHRydWUgfSk7CgkJCXJldHVybjsKCQl9CgkJY29uc3QgaW5mbGlnaHRNYXAgPSBnZXRJ
bmZsaWdodE1hcChjb250ZXh0KTsKCQljb25zdCBpbmZsaWdodCA9IGluZmxpZ2h0TWFwLmdldChk
ZWR1cGVLZXkpOwoJCWlmIChpbmZsaWdodCkgewoJCQljb25zdCByZXN1bHQgPSBhd2FpdCBpbmZs
aWdodDsKCQkJY29uc3QgbWV0YSA9IHJlc3VsdC5tZXRhID8gewoJCQkJLi4ucmVzdWx0Lm1ldGEs
CgkJCQljYWNoZWQ6IHRydWUKCQkJfSA6IHsgY2FjaGVkOiB0cnVlIH07CgkJCXJlc3BvbmQocmVz
dWx0Lm9rLCByZXN1bHQucGF5bG9hZCwgcmVzdWx0LmVycm9yLCBtZXRhKTsKCQkJcmV0dXJuOwoJ
CX0KCQljb25zdCB0byA9IHJlcXVlc3QudG8udHJpbSgpOwoJCWNvbnN0IG1lc3NhZ2UgPSB0eXBl
b2YgcmVxdWVzdC5tZXNzYWdlID09PSAic3RyaW5nIiA/IHJlcXVlc3QubWVzc2FnZS50cmltKCkg
OiAiIjsKCQljb25zdCBtZWRpYVVybCA9IHR5cGVvZiByZXF1ZXN0Lm1lZGlhVXJsID09PSAic3Ry
aW5nIiAmJiByZXF1ZXN0Lm1lZGlhVXJsLnRyaW0oKS5sZW5ndGggPiAwID8gcmVxdWVzdC5tZWRp
YVVybC50cmltKCkgOiB2b2lkIDA7CgkJY29uc3QgbWVkaWFVcmxzID0gQXJyYXkuaXNBcnJheShy
ZXF1ZXN0Lm1lZGlhVXJscykgPyByZXF1ZXN0Lm1lZGlhVXJscy5tYXAoKGVudHJ5KSA9PiB0eXBl
b2YgZW50cnkgPT09ICJzdHJpbmciID8gZW50cnkudHJpbSgpIDogIiIpLmZpbHRlcigoZW50cnkp
ID0+IGVudHJ5Lmxlbmd0aCA+IDApIDogdm9pZCAwOwoJCWlmICghbWVzc2FnZSAmJiAhbWVkaWFV
cmwgJiYgKG1lZGlhVXJscz8ubGVuZ3RoID8/IDApID09PSAwKSB7CgkJCXJlc3BvbmQoZmFsc2Us
IHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgImludmFsaWQg
c2VuZCBwYXJhbXM6IHRleHQgb3IgbWVkaWEgaXMgcmVxdWlyZWQiKSk7CgkJCXJldHVybjsKCQl9
CgkJY29uc3QgcmVzb2x2ZWRDaGFubmVsID0gYXdhaXQgcmVzb2x2ZVJlcXVlc3RlZENoYW5uZWwo
ewoJCQlyZXF1ZXN0Q2hhbm5lbDogcmVxdWVzdC5jaGFubmVsLAoJCQl1bnN1cHBvcnRlZE1lc3Nh
Z2U6IChpbnB1dCkgPT4gYHVuc3VwcG9ydGVkIGNoYW5uZWw6ICR7aW5wdXR9YCwKCQkJcmVqZWN0
V2ViY2hhdEFzSW50ZXJuYWxPbmx5OiB0cnVlCgkJfSk7CgkJaWYgKCJlcnJvciIgaW4gcmVzb2x2
ZWRDaGFubmVsKSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgcmVzb2x2ZWRDaGFubmVsLmVy
cm9yKTsKCQkJcmV0dXJuOwoJCX0KCQljb25zdCB7IGNmZywgY2hhbm5lbCB9ID0gcmVzb2x2ZWRD
aGFubmVsOwoJCWNvbnN0IGFjY291bnRJZCA9IHR5cGVvZiByZXF1ZXN0LmFjY291bnRJZCA9PT0g
InN0cmluZyIgJiYgcmVxdWVzdC5hY2NvdW50SWQudHJpbSgpLmxlbmd0aCA/IHJlcXVlc3QuYWNj
b3VudElkLnRyaW0oKSA6IHZvaWQgMDsKCQljb25zdCB0aHJlYWRJZCA9IHR5cGVvZiByZXF1ZXN0
LnRocmVhZElkID09PSAic3RyaW5nIiAmJiByZXF1ZXN0LnRocmVhZElkLnRyaW0oKS5sZW5ndGgg
PyByZXF1ZXN0LnRocmVhZElkLnRyaW0oKSA6IHZvaWQgMDsKCQljb25zdCBvdXRib3VuZENoYW5u
ZWwgPSBjaGFubmVsOwoJCWlmICghcmVzb2x2ZU91dGJvdW5kQ2hhbm5lbFBsdWdpbih7CgkJCWNo
YW5uZWwsCgkJCWNmZwoJCX0pKSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFw
ZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgYHVuc3VwcG9ydGVkIGNoYW5uZWw6ICR7Y2hh
bm5lbH1gKSk7CgkJCXJldHVybjsKCQl9CgkJY29uc3Qgd29yayA9IChhc3luYyAoKSA9PiB7CgkJ
CXRyeSB7CgkJCQljb25zdCByZXNvbHZlZCA9IHJlc29sdmVPdXRib3VuZFRhcmdldCh7CgkJCQkJ
Y2hhbm5lbDogb3V0Ym91bmRDaGFubmVsLAoJCQkJCXRvLAoJCQkJCWNmZywKCQkJCQlhY2NvdW50
SWQsCgkJCQkJbW9kZTogImV4cGxpY2l0IgoJCQkJfSk7CgkJCQlpZiAoIXJlc29sdmVkLm9rKSBy
ZXR1cm4gewoJCQkJCW9rOiBmYWxzZSwKCQkJCQllcnJvcjogZXJyb3JTaGFwZShFcnJvckNvZGVz
LklOVkFMSURfUkVRVUVTVCwgU3RyaW5nKHJlc29sdmVkLmVycm9yKSksCgkJCQkJbWV0YTogeyBj
aGFubmVsIH0KCQkJCX07CgkJCQljb25zdCBpZExpa2VUYXJnZXQgPSBhd2FpdCBtYXliZVJlc29s
dmVJZExpa2VUYXJnZXQoewoJCQkJCWNmZywKCQkJCQljaGFubmVsLAoJCQkJCWlucHV0OiByZXNv
bHZlZC50bywKCQkJCQlhY2NvdW50SWQKCQkJCX0pOwoJCQkJY29uc3QgZGVsaXZlcnlUYXJnZXQg
PSBpZExpa2VUYXJnZXQ/LnRvID8/IHJlc29sdmVkLnRvOwoJCQkJY29uc3Qgb3V0Ym91bmREZXBz
ID0gY29udGV4dC5kZXBzID8gY3JlYXRlT3V0Ym91bmRTZW5kRGVwcyQxKGNvbnRleHQuZGVwcykg
OiB2b2lkIDA7CgkJCQljb25zdCBtaXJyb3JQYXlsb2FkcyA9IG5vcm1hbGl6ZVJlcGx5UGF5bG9h
ZHNGb3JEZWxpdmVyeShbewoJCQkJCXRleHQ6IG1lc3NhZ2UsCgkJCQkJbWVkaWFVcmwsCgkJCQkJ
bWVkaWFVcmxzCgkJCQl9XSk7CgkJCQljb25zdCBtaXJyb3JUZXh0ID0gbWlycm9yUGF5bG9hZHMu
bWFwKChwYXlsb2FkKSA9PiBwYXlsb2FkLnRleHQpLmZpbHRlcihCb29sZWFuKS5qb2luKCJcbiIp
OwoJCQkJY29uc3QgbWlycm9yTWVkaWFVcmxzID0gbWlycm9yUGF5bG9hZHMuZmxhdE1hcCgocGF5
bG9hZCkgPT4gcGF5bG9hZC5tZWRpYVVybHMgPz8gKHBheWxvYWQubWVkaWFVcmwgPyBbcGF5bG9h
ZC5tZWRpYVVybF0gOiBbXSkpOwoJCQkJY29uc3QgcHJvdmlkZWRTZXNzaW9uS2V5ID0gdHlwZW9m
IHJlcXVlc3Quc2Vzc2lvbktleSA9PT0gInN0cmluZyIgJiYgcmVxdWVzdC5zZXNzaW9uS2V5LnRy
aW0oKSA/IHJlcXVlc3Quc2Vzc2lvbktleS50cmltKCkudG9Mb3dlckNhc2UoKSA6IHZvaWQgMDsK
CQkJCWNvbnN0IGV4cGxpY2l0QWdlbnRJZCA9IHR5cGVvZiByZXF1ZXN0LmFnZW50SWQgPT09ICJz
dHJpbmciICYmIHJlcXVlc3QuYWdlbnRJZC50cmltKCkgPyByZXF1ZXN0LmFnZW50SWQudHJpbSgp
IDogdm9pZCAwOwoJCQkJY29uc3Qgc2Vzc2lvbkFnZW50SWQgPSBwcm92aWRlZFNlc3Npb25LZXkg
PyByZXNvbHZlU2Vzc2lvbkFnZW50SWQoewoJCQkJCXNlc3Npb25LZXk6IHByb3ZpZGVkU2Vzc2lv
bktleSwKCQkJCQljb25maWc6IGNmZwoJCQkJfSkgOiB2b2lkIDA7CgkJCQljb25zdCBkZWZhdWx0
QWdlbnRJZCA9IHJlc29sdmVTZXNzaW9uQWdlbnRJZCh7IGNvbmZpZzogY2ZnIH0pOwoJCQkJY29u
c3QgZWZmZWN0aXZlQWdlbnRJZCA9IGV4cGxpY2l0QWdlbnRJZCA/PyBzZXNzaW9uQWdlbnRJZCA/
PyBkZWZhdWx0QWdlbnRJZDsKCQkJCWNvbnN0IGRlcml2ZWRSb3V0ZSA9ICFwcm92aWRlZFNlc3Np
b25LZXkgPyBhd2FpdCByZXNvbHZlT3V0Ym91bmRTZXNzaW9uUm91dGUoewoJCQkJCWNmZywKCQkJ
CQljaGFubmVsLAoJCQkJCWFnZW50SWQ6IGVmZmVjdGl2ZUFnZW50SWQsCgkJCQkJYWNjb3VudElk
LAoJCQkJCXRhcmdldDogZGVsaXZlcnlUYXJnZXQsCgkJCQkJcmVzb2x2ZWRUYXJnZXQ6IGlkTGlr
ZVRhcmdldCwKCQkJCQl0aHJlYWRJZAoJCQkJfSkgOiBudWxsOwoJCQkJaWYgKGRlcml2ZWRSb3V0
ZSkgYXdhaXQgZW5zdXJlT3V0Ym91bmRTZXNzaW9uRW50cnkoewoJCQkJCWNmZywKCQkJCQlhZ2Vu
dElkOiBlZmZlY3RpdmVBZ2VudElkLAoJCQkJCWNoYW5uZWwsCgkJCQkJYWNjb3VudElkLAoJCQkJ
CXJvdXRlOiBkZXJpdmVkUm91dGUKCQkJCX0pOwoJCQkJY29uc3Qgb3V0Ym91bmRTZXNzaW9uID0g
YnVpbGRPdXRib3VuZFNlc3Npb25Db250ZXh0KHsKCQkJCQljZmcsCgkJCQkJYWdlbnRJZDogZWZm
ZWN0aXZlQWdlbnRJZCwKCQkJCQlzZXNzaW9uS2V5OiBwcm92aWRlZFNlc3Npb25LZXkgPz8gZGVy
aXZlZFJvdXRlPy5zZXNzaW9uS2V5CgkJCQl9KTsKCQkJCWNvbnN0IHJlc3VsdCA9ICh0cnkgeyBs
b2dUb1B5dGhvbigib3V0Ym91bmQiLCB7IG1lc3NhZ2UsIGNoYW5uZWwsIHRhcmdldDogZGVsaXZl
cnlUYXJnZXQgfSk7IH0gY2F0Y2gge30KYXdhaXQgZGVsaXZlck91dGJvdW5kUGF5bG9hZHMoewoJ
CQkJCWNmZywKCQkJCQljaGFubmVsOiBvdXRib3VuZENoYW5uZWwsCgkJCQkJdG86IGRlbGl2ZXJ5
VGFyZ2V0LAoJCQkJCWFjY291bnRJZCwKCQkJCQlwYXlsb2FkczogW3sKCQkJCQkJdGV4dDogbWVz
c2FnZSwKCQkJCQkJbWVkaWFVcmwsCgkJCQkJCW1lZGlhVXJscwoJCQkJCX1dLAoJCQkJCXNlc3Np
b246IG91dGJvdW5kU2Vzc2lvbiwKCQkJCQlnaWZQbGF5YmFjazogcmVxdWVzdC5naWZQbGF5YmFj
aywKCQkJCQl0aHJlYWRJZDogdGhyZWFkSWQgPz8gbnVsbCwKCQkJCQlkZXBzOiBvdXRib3VuZERl
cHMsCgkJCQkJbWlycm9yOiBwcm92aWRlZFNlc3Npb25LZXkgPyB7CgkJCQkJCXNlc3Npb25LZXk6
IHByb3ZpZGVkU2Vzc2lvbktleSwKCQkJCQkJYWdlbnRJZDogZWZmZWN0aXZlQWdlbnRJZCwKCQkJ
CQkJdGV4dDogbWlycm9yVGV4dCB8fCBtZXNzYWdlLAoJCQkJCQltZWRpYVVybHM6IG1pcnJvck1l
ZGlhVXJscy5sZW5ndGggPiAwID8gbWlycm9yTWVkaWFVcmxzIDogdm9pZCAwLAoJCQkJCQlpZGVt
cG90ZW5jeUtleTogaWRlbQoJCQkJCX0gOiBkZXJpdmVkUm91dGUgPyB7CgkJCQkJCXNlc3Npb25L
ZXk6IGRlcml2ZWRSb3V0ZS5zZXNzaW9uS2V5LAoJCQkJCQlhZ2VudElkOiBlZmZlY3RpdmVBZ2Vu
dElkLAoJCQkJCQl0ZXh0OiBtaXJyb3JUZXh0IHx8IG1lc3NhZ2UsCgkJCQkJCW1lZGlhVXJsczog
bWlycm9yTWVkaWFVcmxzLmxlbmd0aCA+IDAgPyBtaXJyb3JNZWRpYVVybHMgOiB2b2lkIDAsCgkJ
CQkJCWlkZW1wb3RlbmN5S2V5OiBpZGVtCgkJCQkJfSA6IHZvaWQgMAoJCQkJfSkpLmF0KC0xKTsK
CQkJCWlmICghcmVzdWx0KSB0aHJvdyBuZXcgRXJyb3IoIk5vIGRlbGl2ZXJ5IHJlc3VsdCIpOwoJ
CQkJY29uc3QgcGF5bG9hZCA9IHsKCQkJCQlydW5JZDogaWRlbSwKCQkJCQltZXNzYWdlSWQ6IHJl
c3VsdC5tZXNzYWdlSWQsCgkJCQkJY2hhbm5lbAoJCQkJfTsKCQkJCWlmICgiY2hhdElkIiBpbiBy
ZXN1bHQpIHBheWxvYWQuY2hhdElkID0gcmVzdWx0LmNoYXRJZDsKCQkJCWlmICgiY2hhbm5lbElk
IiBpbiByZXN1bHQpIHBheWxvYWQuY2hhbm5lbElkID0gcmVzdWx0LmNoYW5uZWxJZDsKCQkJCWlm
ICgidG9KaWQiIGluIHJlc3VsdCkgcGF5bG9hZC50b0ppZCA9IHJlc3VsdC50b0ppZDsKCQkJCWlm
ICgiY29udmVyc2F0aW9uSWQiIGluIHJlc3VsdCkgcGF5bG9hZC5jb252ZXJzYXRpb25JZCA9IHJl
c3VsdC5jb252ZXJzYXRpb25JZDsKCQkJCWNvbnRleHQuZGVkdXBlLnNldChkZWR1cGVLZXksIHsK
CQkJCQl0czogRGF0ZS5ub3coKSwKCQkJCQlvazogdHJ1ZSwKCQkJCQlwYXlsb2FkCgkJCQl9KTsK
CQkJCXJldHVybiB7CgkJCQkJb2s6IHRydWUsCgkJCQkJcGF5bG9hZCwKCQkJCQltZXRhOiB7IGNo
YW5uZWwgfQoJCQkJfTsKCQkJfSBjYXRjaCAoZXJyKSB7CgkJCQljb25zdCBlcnJvciA9IGVycm9y
U2hhcGUoRXJyb3JDb2Rlcy5VTkFWQUlMQUJMRSwgU3RyaW5nKGVycikpOwoJCQkJY29udGV4dC5k
ZWR1cGUuc2V0KGRlZHVwZUtleSwgewoJCQkJCXRzOiBEYXRlLm5vdygpLAoJCQkJCW9rOiBmYWxz
ZSwKCQkJCQllcnJvcgoJCQkJfSk7CgkJCQlyZXR1cm4gewoJCQkJCW9rOiBmYWxzZSwKCQkJCQll
cnJvciwKCQkJCQltZXRhOiB7CgkJCQkJCWNoYW5uZWwsCgkJCQkJCWVycm9yOiBmb3JtYXRGb3JM
b2coZXJyKQoJCQkJCX0KCQkJCX07CgkJCX0KCQl9KSgpOwoJCWluZmxpZ2h0TWFwLnNldChkZWR1
cGVLZXksIHdvcmspOwoJCXRyeSB7CgkJCWNvbnN0IHJlc3VsdCA9IGF3YWl0IHdvcms7CgkJCXJl
c3BvbmQocmVzdWx0Lm9rLCByZXN1bHQucGF5bG9hZCwgcmVzdWx0LmVycm9yLCByZXN1bHQubWV0
YSk7CgkJfSBmaW5hbGx5IHsKCQkJaW5mbGlnaHRNYXAuZGVsZXRlKGRlZHVwZUtleSk7CgkJfQoJ
fSwKCXBvbGw6IGFzeW5jICh7IHBhcmFtcywgcmVzcG9uZCwgY29udGV4dCB9KSA9PiB7CgkJY29u
c3QgcCA9IHBhcmFtczsKCQlpZiAoIXZhbGlkYXRlUG9sbFBhcmFtcyhwKSkgewoJCQlyZXNwb25k
KGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsIGBp
bnZhbGlkIHBvbGwgcGFyYW1zOiAke2Zvcm1hdFZhbGlkYXRpb25FcnJvcnModmFsaWRhdGVQb2xs
UGFyYW1zLmVycm9ycyl9YCkpOwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0IHJlcXVlc3QgPSBwOwoJ
CWNvbnN0IGlkZW0gPSByZXF1ZXN0LmlkZW1wb3RlbmN5S2V5OwoJCWNvbnN0IGNhY2hlZCA9IGNv
bnRleHQuZGVkdXBlLmdldChgcG9sbDoke2lkZW19YCk7CgkJaWYgKGNhY2hlZCkgewoJCQlyZXNw
b25kKGNhY2hlZC5vaywgY2FjaGVkLnBheWxvYWQsIGNhY2hlZC5lcnJvciwgeyBjYWNoZWQ6IHRy
dWUgfSk7CgkJCXJldHVybjsKCQl9CgkJY29uc3QgdG8gPSByZXF1ZXN0LnRvLnRyaW0oKTsKCQlj
b25zdCByZXNvbHZlZENoYW5uZWwgPSBhd2FpdCByZXNvbHZlUmVxdWVzdGVkQ2hhbm5lbCh7CgkJ
CXJlcXVlc3RDaGFubmVsOiByZXF1ZXN0LmNoYW5uZWwsCgkJCXVuc3VwcG9ydGVkTWVzc2FnZTog
KGlucHV0KSA9PiBgdW5zdXBwb3J0ZWQgcG9sbCBjaGFubmVsOiAke2lucHV0fWAKCQl9KTsKCQlp
ZiAoImVycm9yIiBpbiByZXNvbHZlZENoYW5uZWwpIHsKCQkJcmVzcG9uZChmYWxzZSwgdm9pZCAw
LCByZXNvbHZlZENoYW5uZWwuZXJyb3IpOwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0IHsgY2ZnLCBj
aGFubmVsIH0gPSByZXNvbHZlZENoYW5uZWw7CgkJaWYgKHR5cGVvZiByZXF1ZXN0LmR1cmF0aW9u
U2Vjb25kcyA9PT0gIm51bWJlciIgJiYgY2hhbm5lbCAhPT0gInRlbGVncmFtIikgewoJCQlyZXNw
b25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1Qs
ICJkdXJhdGlvblNlY29uZHMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIFRlbGVncmFtIHBvbGxzIikp
OwoJCQlyZXR1cm47CgkJfQoJCWlmICh0eXBlb2YgcmVxdWVzdC5pc0Fub255bW91cyA9PT0gImJv
b2xlYW4iICYmIGNoYW5uZWwgIT09ICJ0ZWxlZ3JhbSIpIHsKCQkJcmVzcG9uZChmYWxzZSwgdm9p
ZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCAiaXNBbm9ueW1vdXMg
aXMgb25seSBzdXBwb3J0ZWQgZm9yIFRlbGVncmFtIHBvbGxzIikpOwoJCQlyZXR1cm47CgkJfQoJ
CWNvbnN0IHBvbGwgPSB7CgkJCXF1ZXN0aW9uOiByZXF1ZXN0LnF1ZXN0aW9uLAoJCQlvcHRpb25z
OiByZXF1ZXN0Lm9wdGlvbnMsCgkJCW1heFNlbGVjdGlvbnM6IHJlcXVlc3QubWF4U2VsZWN0aW9u
cywKCQkJZHVyYXRpb25TZWNvbmRzOiByZXF1ZXN0LmR1cmF0aW9uU2Vjb25kcywKCQkJZHVyYXRp
b25Ib3VyczogcmVxdWVzdC5kdXJhdGlvbkhvdXJzCgkJfTsKCQljb25zdCB0aHJlYWRJZCA9IHR5
cGVvZiByZXF1ZXN0LnRocmVhZElkID09PSAic3RyaW5nIiAmJiByZXF1ZXN0LnRocmVhZElkLnRy
aW0oKS5sZW5ndGggPyByZXF1ZXN0LnRocmVhZElkLnRyaW0oKSA6IHZvaWQgMDsKCQljb25zdCBh
Y2NvdW50SWQgPSB0eXBlb2YgcmVxdWVzdC5hY2NvdW50SWQgPT09ICJzdHJpbmciICYmIHJlcXVl
c3QuYWNjb3VudElkLnRyaW0oKS5sZW5ndGggPyByZXF1ZXN0LmFjY291bnRJZC50cmltKCkgOiB2
b2lkIDA7CgkJdHJ5IHsKCQkJY29uc3Qgb3V0Ym91bmQgPSByZXNvbHZlT3V0Ym91bmRDaGFubmVs
UGx1Z2luKHsKCQkJCWNoYW5uZWwsCgkJCQljZmcKCQkJfSk/Lm91dGJvdW5kOwoJCQlpZiAoIW91
dGJvdW5kPy5zZW5kUG9sbCkgewoJCQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBl
KEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCBgdW5zdXBwb3J0ZWQgcG9sbCBjaGFubmVsOiAk
e2NoYW5uZWx9YCkpOwoJCQkJcmV0dXJuOwoJCQl9CgkJCWNvbnN0IHJlc29sdmVkID0gcmVzb2x2
ZU91dGJvdW5kVGFyZ2V0KHsKCQkJCWNoYW5uZWwsCgkJCQl0bywKCQkJCWNmZywKCQkJCWFjY291
bnRJZCwKCQkJCW1vZGU6ICJleHBsaWNpdCIKCQkJfSk7CgkJCWlmICghcmVzb2x2ZWQub2spIHsK
CQkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURf
UkVRVUVTVCwgU3RyaW5nKHJlc29sdmVkLmVycm9yKSkpOwoJCQkJcmV0dXJuOwoJCQl9CgkJCWNv
bnN0IG5vcm1hbGl6ZWQgPSBvdXRib3VuZC5wb2xsTWF4T3B0aW9ucyA/IG5vcm1hbGl6ZVBvbGxJ
bnB1dChwb2xsLCB7IG1heE9wdGlvbnM6IG91dGJvdW5kLnBvbGxNYXhPcHRpb25zIH0pIDogbm9y
bWFsaXplUG9sbElucHV0KHBvbGwpOwoJCQljb25zdCByZXN1bHQgPSBhd2FpdCBvdXRib3VuZC5z
ZW5kUG9sbCh7CgkJCQljZmcsCgkJCQl0bzogcmVzb2x2ZWQudG8sCgkJCQlwb2xsOiBub3JtYWxp
emVkLAoJCQkJYWNjb3VudElkLAoJCQkJdGhyZWFkSWQsCgkJCQlzaWxlbnQ6IHJlcXVlc3Quc2ls
ZW50LAoJCQkJaXNBbm9ueW1vdXM6IHJlcXVlc3QuaXNBbm9ueW1vdXMKCQkJfSk7CgkJCWNvbnN0
IHBheWxvYWQgPSB7CgkJCQlydW5JZDogaWRlbSwKCQkJCW1lc3NhZ2VJZDogcmVzdWx0Lm1lc3Nh
Z2VJZCwKCQkJCWNoYW5uZWwKCQkJfTsKCQkJaWYgKHJlc3VsdC50b0ppZCkgcGF5bG9hZC50b0pp
ZCA9IHJlc3VsdC50b0ppZDsKCQkJaWYgKHJlc3VsdC5jaGFubmVsSWQpIHBheWxvYWQuY2hhbm5l
bElkID0gcmVzdWx0LmNoYW5uZWxJZDsKCQkJaWYgKHJlc3VsdC5jb252ZXJzYXRpb25JZCkgcGF5
bG9hZC5jb252ZXJzYXRpb25JZCA9IHJlc3VsdC5jb252ZXJzYXRpb25JZDsKCQkJaWYgKHJlc3Vs
dC5wb2xsSWQpIHBheWxvYWQucG9sbElkID0gcmVzdWx0LnBvbGxJZDsKCQkJY29udGV4dC5kZWR1
cGUuc2V0KGBwb2xsOiR7aWRlbX1gLCB7CgkJCQl0czogRGF0ZS5ub3coKSwKCQkJCW9rOiB0cnVl
LAoJCQkJcGF5bG9hZAoJCQl9KTsKCQkJcmVzcG9uZCh0cnVlLCBwYXlsb2FkLCB2b2lkIDAsIHsg
Y2hhbm5lbCB9KTsKCQl9IGNhdGNoIChlcnIpIHsKCQkJY29uc3QgZXJyb3IgPSBlcnJvclNoYXBl
KEVycm9yQ29kZXMuVU5BVkFJTEFCTEUsIFN0cmluZyhlcnIpKTsKCQkJY29udGV4dC5kZWR1cGUu
c2V0KGBwb2xsOiR7aWRlbX1gLCB7CgkJCQl0czogRGF0ZS5ub3coKSwKCQkJCW9rOiBmYWxzZSwK
CQkJCWVycm9yCgkJCX0pOwoJCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9yLCB7CgkJCQlj
aGFubmVsLAoJCQkJZXJyb3I6IGZvcm1hdEZvckxvZyhlcnIpCgkJCX0pOwoJCX0KCX0KfTsKLy8j
ZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvZ2F0ZXdheS9zZXNzaW9ucy1wYXRjaC50cwpmdW5jdGlv
biBpbnZhbGlkKG1lc3NhZ2UpIHsKCXJldHVybiB7CgkJb2s6IGZhbHNlLAoJCWVycm9yOiBlcnJv
clNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCBtZXNzYWdlKQoJfTsKfQpmdW5jdGlv
biBub3JtYWxpemVFeGVjSG9zdChyYXcpIHsKCWNvbnN0IG5vcm1hbGl6ZWQgPSByYXcudHJpbSgp
LnRvTG93ZXJDYXNlKCk7CglpZiAobm9ybWFsaXplZCA9PT0gInNhbmRib3giIHx8IG5vcm1hbGl6
ZWQgPT09ICJnYXRld2F5IiB8fCBub3JtYWxpemVkID09PSAibm9kZSIpIHJldHVybiBub3JtYWxp
emVkOwp9CmZ1bmN0aW9uIG5vcm1hbGl6ZUV4ZWNTZWN1cml0eShyYXcpIHsKCWNvbnN0IG5vcm1h
bGl6ZWQgPSByYXcudHJpbSgpLnRvTG93ZXJDYXNlKCk7CglpZiAobm9ybWFsaXplZCA9PT0gImRl
bnkiIHx8IG5vcm1hbGl6ZWQgPT09ICJhbGxvd2xpc3QiIHx8IG5vcm1hbGl6ZWQgPT09ICJmdWxs
IikgcmV0dXJuIG5vcm1hbGl6ZWQ7Cn0KZnVuY3Rpb24gbm9ybWFsaXplRXhlY0FzayhyYXcpIHsK
CWNvbnN0IG5vcm1hbGl6ZWQgPSByYXcudHJpbSgpLnRvTG93ZXJDYXNlKCk7CglpZiAobm9ybWFs
aXplZCA9PT0gIm9mZiIgfHwgbm9ybWFsaXplZCA9PT0gIm9uLW1pc3MiIHx8IG5vcm1hbGl6ZWQg
PT09ICJhbHdheXMiKSByZXR1cm4gbm9ybWFsaXplZDsKfQpmdW5jdGlvbiBzdXBwb3J0c1NwYXdu
TGluZWFnZShzdG9yZUtleSkgewoJcmV0dXJuIGlzU3ViYWdlbnRTZXNzaW9uS2V5KHN0b3JlS2V5
KSB8fCBpc0FjcFNlc3Npb25LZXkoc3RvcmVLZXkpOwp9CmZ1bmN0aW9uIG5vcm1hbGl6ZVN1YmFn
ZW50Um9sZShyYXcpIHsKCWNvbnN0IG5vcm1hbGl6ZWQgPSByYXcudHJpbSgpLnRvTG93ZXJDYXNl
KCk7CglpZiAobm9ybWFsaXplZCA9PT0gIm9yY2hlc3RyYXRvciIgfHwgbm9ybWFsaXplZCA9PT0g
ImxlYWYiKSByZXR1cm4gbm9ybWFsaXplZDsKfQpmdW5jdGlvbiBub3JtYWxpemVTdWJhZ2VudENv
bnRyb2xTY29wZShyYXcpIHsKCWNvbnN0IG5vcm1hbGl6ZWQgPSByYXcudHJpbSgpLnRvTG93ZXJD
YXNlKCk7CglpZiAobm9ybWFsaXplZCA9PT0gImNoaWxkcmVuIiB8fCBub3JtYWxpemVkID09PSAi
bm9uZSIpIHJldHVybiBub3JtYWxpemVkOwp9CmFzeW5jIGZ1bmN0aW9uIGFwcGx5U2Vzc2lvbnNQ
YXRjaFRvU3RvcmUocGFyYW1zKSB7Cgljb25zdCB7IGNmZywgc3RvcmUsIHN0b3JlS2V5LCBwYXRj
aCB9ID0gcGFyYW1zOwoJY29uc3Qgbm93ID0gRGF0ZS5ub3coKTsKCWNvbnN0IHNlc3Npb25BZ2Vu
dElkID0gbm9ybWFsaXplQWdlbnRJZChwYXJzZUFnZW50U2Vzc2lvbktleShzdG9yZUtleSk/LmFn
ZW50SWQgPz8gcmVzb2x2ZURlZmF1bHRBZ2VudElkKGNmZykpOwoJY29uc3QgcmVzb2x2ZWREZWZh
dWx0ID0gcmVzb2x2ZURlZmF1bHRNb2RlbEZvckFnZW50KHsKCQljZmcsCgkJYWdlbnRJZDogc2Vz
c2lvbkFnZW50SWQKCX0pOwoJY29uc3Qgc3ViYWdlbnRNb2RlbEhpbnQgPSBpc1N1YmFnZW50U2Vz
c2lvbktleShzdG9yZUtleSkgPyByZXNvbHZlU3ViYWdlbnRDb25maWd1cmVkTW9kZWxTZWxlY3Rp
b24oewoJCWNmZywKCQlhZ2VudElkOiBzZXNzaW9uQWdlbnRJZAoJfSkgOiB2b2lkIDA7Cgljb25z
dCBleGlzdGluZyA9IHN0b3JlW3N0b3JlS2V5XTsKCWNvbnN0IG5leHQgPSBleGlzdGluZyA/IHsK
CQkuLi5leGlzdGluZywKCQl1cGRhdGVkQXQ6IE1hdGgubWF4KGV4aXN0aW5nLnVwZGF0ZWRBdCA/
PyAwLCBub3cpCgl9IDogewoJCXNlc3Npb25JZDogcmFuZG9tVVVJRCgpLAoJCXVwZGF0ZWRBdDog
bm93Cgl9OwoJaWYgKCJzcGF3bmVkQnkiIGluIHBhdGNoKSB7CgkJY29uc3QgcmF3ID0gcGF0Y2gu
c3Bhd25lZEJ5OwoJCWlmIChyYXcgPT09IG51bGwpIHsKCQkJaWYgKGV4aXN0aW5nPy5zcGF3bmVk
QnkpIHJldHVybiBpbnZhbGlkKCJzcGF3bmVkQnkgY2Fubm90IGJlIGNsZWFyZWQgb25jZSBzZXQi
KTsKCQl9IGVsc2UgaWYgKHJhdyAhPT0gdm9pZCAwKSB7CgkJCWNvbnN0IHRyaW1tZWQgPSBTdHJp
bmcocmF3KS50cmltKCk7CgkJCWlmICghdHJpbW1lZCkgcmV0dXJuIGludmFsaWQoImludmFsaWQg
c3Bhd25lZEJ5OiBlbXB0eSIpOwoJCQlpZiAoIXN1cHBvcnRzU3Bhd25MaW5lYWdlKHN0b3JlS2V5
KSkgcmV0dXJuIGludmFsaWQoInNwYXduZWRCeSBpcyBvbmx5IHN1cHBvcnRlZCBmb3Igc3ViYWdl
bnQ6KiBvciBhY3A6KiBzZXNzaW9ucyIpOwoJCQlpZiAoZXhpc3Rpbmc/LnNwYXduZWRCeSAmJiBl
eGlzdGluZy5zcGF3bmVkQnkgIT09IHRyaW1tZWQpIHJldHVybiBpbnZhbGlkKCJzcGF3bmVkQnkg
Y2Fubm90IGJlIGNoYW5nZWQgb25jZSBzZXQiKTsKCQkJbmV4dC5zcGF3bmVkQnkgPSB0cmltbWVk
OwoJCX0KCX0KCWlmICgic3Bhd25lZFdvcmtzcGFjZURpciIgaW4gcGF0Y2gpIHsKCQljb25zdCBy
YXcgPSBwYXRjaC5zcGF3bmVkV29ya3NwYWNlRGlyOwoJCWlmIChyYXcgPT09IG51bGwpIHsKCQkJ
aWYgKGV4aXN0aW5nPy5zcGF3bmVkV29ya3NwYWNlRGlyKSByZXR1cm4gaW52YWxpZCgic3Bhd25l
ZFdvcmtzcGFjZURpciBjYW5ub3QgYmUgY2xlYXJlZCBvbmNlIHNldCIpOwoJCX0gZWxzZSBpZiAo
cmF3ICE9PSB2b2lkIDApIHsKCQkJaWYgKCFzdXBwb3J0c1NwYXduTGluZWFnZShzdG9yZUtleSkp
IHJldHVybiBpbnZhbGlkKCJzcGF3bmVkV29ya3NwYWNlRGlyIGlzIG9ubHkgc3VwcG9ydGVkIGZv
ciBzdWJhZ2VudDoqIG9yIGFjcDoqIHNlc3Npb25zIik7CgkJCWNvbnN0IHRyaW1tZWQgPSBTdHJp
bmcocmF3KS50cmltKCk7CgkJCWlmICghdHJpbW1lZCkgcmV0dXJuIGludmFsaWQoImludmFsaWQg
c3Bhd25lZFdvcmtzcGFjZURpcjogZW1wdHkiKTsKCQkJaWYgKGV4aXN0aW5nPy5zcGF3bmVkV29y
a3NwYWNlRGlyICYmIGV4aXN0aW5nLnNwYXduZWRXb3Jrc3BhY2VEaXIgIT09IHRyaW1tZWQpIHJl
dHVybiBpbnZhbGlkKCJzcGF3bmVkV29ya3NwYWNlRGlyIGNhbm5vdCBiZSBjaGFuZ2VkIG9uY2Ug
c2V0Iik7CgkJCW5leHQuc3Bhd25lZFdvcmtzcGFjZURpciA9IHRyaW1tZWQ7CgkJfQoJfQoJaWYg
KCJzcGF3bkRlcHRoIiBpbiBwYXRjaCkgewoJCWNvbnN0IHJhdyA9IHBhdGNoLnNwYXduRGVwdGg7
CgkJaWYgKHJhdyA9PT0gbnVsbCkgewoJCQlpZiAodHlwZW9mIGV4aXN0aW5nPy5zcGF3bkRlcHRo
ID09PSAibnVtYmVyIikgcmV0dXJuIGludmFsaWQoInNwYXduRGVwdGggY2Fubm90IGJlIGNsZWFy
ZWQgb25jZSBzZXQiKTsKCQl9IGVsc2UgaWYgKHJhdyAhPT0gdm9pZCAwKSB7CgkJCWlmICghc3Vw
cG9ydHNTcGF3bkxpbmVhZ2Uoc3RvcmVLZXkpKSByZXR1cm4gaW52YWxpZCgic3Bhd25EZXB0aCBp
cyBvbmx5IHN1cHBvcnRlZCBmb3Igc3ViYWdlbnQ6KiBvciBhY3A6KiBzZXNzaW9ucyIpOwoJCQlj
b25zdCBudW1lcmljID0gTnVtYmVyKHJhdyk7CgkJCWlmICghTnVtYmVyLmlzSW50ZWdlcihudW1l
cmljKSB8fCBudW1lcmljIDwgMCkgcmV0dXJuIGludmFsaWQoImludmFsaWQgc3Bhd25EZXB0aCAo
dXNlIGFuIGludGVnZXIgPj0gMCkiKTsKCQkJY29uc3Qgbm9ybWFsaXplZCA9IG51bWVyaWM7CgkJ
CWlmICh0eXBlb2YgZXhpc3Rpbmc/LnNwYXduRGVwdGggPT09ICJudW1iZXIiICYmIGV4aXN0aW5n
LnNwYXduRGVwdGggIT09IG5vcm1hbGl6ZWQpIHJldHVybiBpbnZhbGlkKCJzcGF3bkRlcHRoIGNh
bm5vdCBiZSBjaGFuZ2VkIG9uY2Ugc2V0Iik7CgkJCW5leHQuc3Bhd25EZXB0aCA9IG5vcm1hbGl6
ZWQ7CgkJfQoJfQoJaWYgKCJzdWJhZ2VudFJvbGUiIGluIHBhdGNoKSB7CgkJY29uc3QgcmF3ID0g
cGF0Y2guc3ViYWdlbnRSb2xlOwoJCWlmIChyYXcgPT09IG51bGwpIHsKCQkJaWYgKGV4aXN0aW5n
Py5zdWJhZ2VudFJvbGUpIHJldHVybiBpbnZhbGlkKCJzdWJhZ2VudFJvbGUgY2Fubm90IGJlIGNs
ZWFyZWQgb25jZSBzZXQiKTsKCQl9IGVsc2UgaWYgKHJhdyAhPT0gdm9pZCAwKSB7CgkJCWlmICgh
c3VwcG9ydHNTcGF3bkxpbmVhZ2Uoc3RvcmVLZXkpKSByZXR1cm4gaW52YWxpZCgic3ViYWdlbnRS
b2xlIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBzdWJhZ2VudDoqIG9yIGFjcDoqIHNlc3Npb25zIik7
CgkJCWNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVTdWJhZ2VudFJvbGUoU3RyaW5nKHJhdykp
OwoJCQlpZiAoIW5vcm1hbGl6ZWQpIHJldHVybiBpbnZhbGlkKCJpbnZhbGlkIHN1YmFnZW50Um9s
ZSAodXNlIFwib3JjaGVzdHJhdG9yXCIgb3IgXCJsZWFmXCIpIik7CgkJCWlmIChleGlzdGluZz8u
c3ViYWdlbnRSb2xlICYmIGV4aXN0aW5nLnN1YmFnZW50Um9sZSAhPT0gbm9ybWFsaXplZCkgcmV0
dXJuIGludmFsaWQoInN1YmFnZW50Um9sZSBjYW5ub3QgYmUgY2hhbmdlZCBvbmNlIHNldCIpOwoJ
CQluZXh0LnN1YmFnZW50Um9sZSA9IG5vcm1hbGl6ZWQ7CgkJfQoJfQoJaWYgKCJzdWJhZ2VudENv
bnRyb2xTY29wZSIgaW4gcGF0Y2gpIHsKCQljb25zdCByYXcgPSBwYXRjaC5zdWJhZ2VudENvbnRy
b2xTY29wZTsKCQlpZiAocmF3ID09PSBudWxsKSB7CgkJCWlmIChleGlzdGluZz8uc3ViYWdlbnRD
b250cm9sU2NvcGUpIHJldHVybiBpbnZhbGlkKCJzdWJhZ2VudENvbnRyb2xTY29wZSBjYW5ub3Qg
YmUgY2xlYXJlZCBvbmNlIHNldCIpOwoJCX0gZWxzZSBpZiAocmF3ICE9PSB2b2lkIDApIHsKCQkJ
aWYgKCFzdXBwb3J0c1NwYXduTGluZWFnZShzdG9yZUtleSkpIHJldHVybiBpbnZhbGlkKCJzdWJh
Z2VudENvbnRyb2xTY29wZSBpcyBvbmx5IHN1cHBvcnRlZCBmb3Igc3ViYWdlbnQ6KiBvciBhY3A6
KiBzZXNzaW9ucyIpOwoJCQljb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplU3ViYWdlbnRDb250
cm9sU2NvcGUoU3RyaW5nKHJhdykpOwoJCQlpZiAoIW5vcm1hbGl6ZWQpIHJldHVybiBpbnZhbGlk
KCJpbnZhbGlkIHN1YmFnZW50Q29udHJvbFNjb3BlICh1c2UgXCJjaGlsZHJlblwiIG9yIFwibm9u
ZVwiKSIpOwoJCQlpZiAoZXhpc3Rpbmc/LnN1YmFnZW50Q29udHJvbFNjb3BlICYmIGV4aXN0aW5n
LnN1YmFnZW50Q29udHJvbFNjb3BlICE9PSBub3JtYWxpemVkKSByZXR1cm4gaW52YWxpZCgic3Vi
YWdlbnRDb250cm9sU2NvcGUgY2Fubm90IGJlIGNoYW5nZWQgb25jZSBzZXQiKTsKCQkJbmV4dC5z
dWJhZ2VudENvbnRyb2xTY29wZSA9IG5vcm1hbGl6ZWQ7CgkJfQoJfQoJaWYgKCJsYWJlbCIgaW4g
cGF0Y2gpIHsKCQljb25zdCByYXcgPSBwYXRjaC5sYWJlbDsKCQlpZiAocmF3ID09PSBudWxsKSBk
ZWxldGUgbmV4dC5sYWJlbDsKCQllbHNlIGlmIChyYXcgIT09IHZvaWQgMCkgewoJCQljb25zdCBw
YXJzZWQgPSBwYXJzZVNlc3Npb25MYWJlbChyYXcpOwoJCQlpZiAoIXBhcnNlZC5vaykgcmV0dXJu
IGludmFsaWQocGFyc2VkLmVycm9yKTsKCQkJZm9yIChjb25zdCBba2V5LCBlbnRyeV0gb2YgT2Jq
ZWN0LmVudHJpZXMoc3RvcmUpKSB7CgkJCQlpZiAoa2V5ID09PSBzdG9yZUtleSkgY29udGludWU7
CgkJCQlpZiAoZW50cnk/LmxhYmVsID09PSBwYXJzZWQubGFiZWwpIHJldHVybiBpbnZhbGlkKGBs
YWJlbCBhbHJlYWR5IGluIHVzZTogJHtwYXJzZWQubGFiZWx9YCk7CgkJCX0KCQkJbmV4dC5sYWJl
bCA9IHBhcnNlZC5sYWJlbDsKCQl9Cgl9CglpZiAoInRoaW5raW5nTGV2ZWwiIGluIHBhdGNoKSB7
CgkJY29uc3QgcmF3ID0gcGF0Y2gudGhpbmtpbmdMZXZlbDsKCQlpZiAocmF3ID09PSBudWxsKSBk
ZWxldGUgbmV4dC50aGlua2luZ0xldmVsOwoJCWVsc2UgaWYgKHJhdyAhPT0gdm9pZCAwKSB7CgkJ
CWNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVUaGlua0xldmVsKFN0cmluZyhyYXcpKTsKCQkJ
aWYgKCFub3JtYWxpemVkKSByZXR1cm4gaW52YWxpZChgaW52YWxpZCB0aGlua2luZ0xldmVsICh1
c2UgJHtmb3JtYXRUaGlua2luZ0xldmVscyhleGlzdGluZz8ucHJvdmlkZXJPdmVycmlkZT8udHJp
bSgpIHx8IHJlc29sdmVkRGVmYXVsdC5wcm92aWRlciwgZXhpc3Rpbmc/Lm1vZGVsT3ZlcnJpZGU/
LnRyaW0oKSB8fCByZXNvbHZlZERlZmF1bHQubW9kZWwsICJ8Iil9KWApOwoJCQluZXh0LnRoaW5r
aW5nTGV2ZWwgPSBub3JtYWxpemVkOwoJCX0KCX0KCWlmICgiZmFzdE1vZGUiIGluIHBhdGNoKSB7
CgkJY29uc3QgcmF3ID0gcGF0Y2guZmFzdE1vZGU7CgkJaWYgKHJhdyA9PT0gbnVsbCkgZGVsZXRl
IG5leHQuZmFzdE1vZGU7CgkJZWxzZSBpZiAocmF3ICE9PSB2b2lkIDApIHsKCQkJY29uc3Qgbm9y
bWFsaXplZCA9IG5vcm1hbGl6ZUZhc3RNb2RlKHJhdyk7CgkJCWlmIChub3JtYWxpemVkID09PSB2
b2lkIDApIHJldHVybiBpbnZhbGlkKCJpbnZhbGlkIGZhc3RNb2RlICh1c2UgdHJ1ZSBvciBmYWxz
ZSkiKTsKCQkJbmV4dC5mYXN0TW9kZSA9IG5vcm1hbGl6ZWQ7CgkJfQoJfQoJaWYgKCJ2ZXJib3Nl
TGV2ZWwiIGluIHBhdGNoKSB7CgkJY29uc3QgcmF3ID0gcGF0Y2gudmVyYm9zZUxldmVsOwoJCWNv
bnN0IHBhcnNlZCA9IHBhcnNlVmVyYm9zZU92ZXJyaWRlKHJhdyk7CgkJaWYgKCFwYXJzZWQub2sp
IHJldHVybiBpbnZhbGlkKHBhcnNlZC5lcnJvcik7CgkJYXBwbHlWZXJib3NlT3ZlcnJpZGUobmV4
dCwgcGFyc2VkLnZhbHVlKTsKCX0KCWlmICgicmVhc29uaW5nTGV2ZWwiIGluIHBhdGNoKSB7CgkJ
Y29uc3QgcmF3ID0gcGF0Y2gucmVhc29uaW5nTGV2ZWw7CgkJaWYgKHJhdyA9PT0gbnVsbCkgZGVs
ZXRlIG5leHQucmVhc29uaW5nTGV2ZWw7CgkJZWxzZSBpZiAocmF3ICE9PSB2b2lkIDApIHsKCQkJ
Y29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVJlYXNvbmluZ0xldmVsKFN0cmluZyhyYXcpKTsK
CQkJaWYgKCFub3JtYWxpemVkKSByZXR1cm4gaW52YWxpZCgiaW52YWxpZCByZWFzb25pbmdMZXZl
bCAodXNlIFwib25cInxcIm9mZlwifFwic3RyZWFtXCIpIik7CgkJCW5leHQucmVhc29uaW5nTGV2
ZWwgPSBub3JtYWxpemVkOwoJCX0KCX0KCWlmICgicmVzcG9uc2VVc2FnZSIgaW4gcGF0Y2gpIHsK
CQljb25zdCByYXcgPSBwYXRjaC5yZXNwb25zZVVzYWdlOwoJCWlmIChyYXcgPT09IG51bGwpIGRl
bGV0ZSBuZXh0LnJlc3BvbnNlVXNhZ2U7CgkJZWxzZSBpZiAocmF3ICE9PSB2b2lkIDApIHsKCQkJ
Y29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVVzYWdlRGlzcGxheShTdHJpbmcocmF3KSk7CgkJ
CWlmICghbm9ybWFsaXplZCkgcmV0dXJuIGludmFsaWQoImludmFsaWQgcmVzcG9uc2VVc2FnZSAo
dXNlIFwib2ZmXCJ8XCJ0b2tlbnNcInxcImZ1bGxcIikiKTsKCQkJaWYgKG5vcm1hbGl6ZWQgPT09
ICJvZmYiKSBkZWxldGUgbmV4dC5yZXNwb25zZVVzYWdlOwoJCQllbHNlIG5leHQucmVzcG9uc2VV
c2FnZSA9IG5vcm1hbGl6ZWQ7CgkJfQoJfQoJaWYgKCJlbGV2YXRlZExldmVsIiBpbiBwYXRjaCkg
ewoJCWNvbnN0IHJhdyA9IHBhdGNoLmVsZXZhdGVkTGV2ZWw7CgkJaWYgKHJhdyA9PT0gbnVsbCkg
ZGVsZXRlIG5leHQuZWxldmF0ZWRMZXZlbDsKCQllbHNlIGlmIChyYXcgIT09IHZvaWQgMCkgewoJ
CQljb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplRWxldmF0ZWRMZXZlbChTdHJpbmcocmF3KSk7
CgkJCWlmICghbm9ybWFsaXplZCkgcmV0dXJuIGludmFsaWQoImludmFsaWQgZWxldmF0ZWRMZXZl
bCAodXNlIFwib25cInxcIm9mZlwifFwiYXNrXCJ8XCJmdWxsXCIpIik7CgkJCW5leHQuZWxldmF0
ZWRMZXZlbCA9IG5vcm1hbGl6ZWQ7CgkJfQoJfQoJaWYgKCJleGVjSG9zdCIgaW4gcGF0Y2gpIHsK
CQljb25zdCByYXcgPSBwYXRjaC5leGVjSG9zdDsKCQlpZiAocmF3ID09PSBudWxsKSBkZWxldGUg
bmV4dC5leGVjSG9zdDsKCQllbHNlIGlmIChyYXcgIT09IHZvaWQgMCkgewoJCQljb25zdCBub3Jt
YWxpemVkID0gbm9ybWFsaXplRXhlY0hvc3QoU3RyaW5nKHJhdykpOwoJCQlpZiAoIW5vcm1hbGl6
ZWQpIHJldHVybiBpbnZhbGlkKCJpbnZhbGlkIGV4ZWNIb3N0ICh1c2UgXCJzYW5kYm94XCJ8XCJn
YXRld2F5XCJ8XCJub2RlXCIpIik7CgkJCW5leHQuZXhlY0hvc3QgPSBub3JtYWxpemVkOwoJCX0K
CX0KCWlmICgiZXhlY1NlY3VyaXR5IiBpbiBwYXRjaCkgewoJCWNvbnN0IHJhdyA9IHBhdGNoLmV4
ZWNTZWN1cml0eTsKCQlpZiAocmF3ID09PSBudWxsKSBkZWxldGUgbmV4dC5leGVjU2VjdXJpdHk7
CgkJZWxzZSBpZiAocmF3ICE9PSB2b2lkIDApIHsKCQkJY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1h
bGl6ZUV4ZWNTZWN1cml0eShTdHJpbmcocmF3KSk7CgkJCWlmICghbm9ybWFsaXplZCkgcmV0dXJu
IGludmFsaWQoImludmFsaWQgZXhlY1NlY3VyaXR5ICh1c2UgXCJkZW55XCJ8XCJhbGxvd2xpc3Rc
InxcImZ1bGxcIikiKTsKCQkJbmV4dC5leGVjU2VjdXJpdHkgPSBub3JtYWxpemVkOwoJCX0KCX0K
CWlmICgiZXhlY0FzayIgaW4gcGF0Y2gpIHsKCQljb25zdCByYXcgPSBwYXRjaC5leGVjQXNrOwoJ
CWlmIChyYXcgPT09IG51bGwpIGRlbGV0ZSBuZXh0LmV4ZWNBc2s7CgkJZWxzZSBpZiAocmF3ICE9
PSB2b2lkIDApIHsKCQkJY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZUV4ZWNBc2soU3RyaW5n
KHJhdykpOwoJCQlpZiAoIW5vcm1hbGl6ZWQpIHJldHVybiBpbnZhbGlkKCJpbnZhbGlkIGV4ZWNB
c2sgKHVzZSBcIm9mZlwifFwib24tbWlzc1wifFwiYWx3YXlzXCIpIik7CgkJCW5leHQuZXhlY0Fz
ayA9IG5vcm1hbGl6ZWQ7CgkJfQoJfQoJaWYgKCJleGVjTm9kZSIgaW4gcGF0Y2gpIHsKCQljb25z
dCByYXcgPSBwYXRjaC5leGVjTm9kZTsKCQlpZiAocmF3ID09PSBudWxsKSBkZWxldGUgbmV4dC5l
eGVjTm9kZTsKCQllbHNlIGlmIChyYXcgIT09IHZvaWQgMCkgewoJCQljb25zdCB0cmltbWVkID0g
U3RyaW5nKHJhdykudHJpbSgpOwoJCQlpZiAoIXRyaW1tZWQpIHJldHVybiBpbnZhbGlkKCJpbnZh
bGlkIGV4ZWNOb2RlOiBlbXB0eSIpOwoJCQluZXh0LmV4ZWNOb2RlID0gdHJpbW1lZDsKCQl9Cgl9
CglpZiAoIm1vZGVsIiBpbiBwYXRjaCkgewoJCWNvbnN0IHJhdyA9IHBhdGNoLm1vZGVsOwoJCWlm
IChyYXcgPT09IG51bGwpIGFwcGx5TW9kZWxPdmVycmlkZVRvU2Vzc2lvbkVudHJ5KHsKCQkJZW50
cnk6IG5leHQsCgkJCXNlbGVjdGlvbjogewoJCQkJcHJvdmlkZXI6IHJlc29sdmVkRGVmYXVsdC5w
cm92aWRlciwKCQkJCW1vZGVsOiByZXNvbHZlZERlZmF1bHQubW9kZWwsCgkJCQlpc0RlZmF1bHQ6
IHRydWUKCQkJfQoJCX0pOwoJCWVsc2UgaWYgKHJhdyAhPT0gdm9pZCAwKSB7CgkJCWNvbnN0IHRy
aW1tZWQgPSBTdHJpbmcocmF3KS50cmltKCk7CgkJCWlmICghdHJpbW1lZCkgcmV0dXJuIGludmFs
aWQoImludmFsaWQgbW9kZWw6IGVtcHR5Iik7CgkJCWlmICghcGFyYW1zLmxvYWRHYXRld2F5TW9k
ZWxDYXRhbG9nKSByZXR1cm4gewoJCQkJb2s6IGZhbHNlLAoJCQkJZXJyb3I6IGVycm9yU2hhcGUo
RXJyb3JDb2Rlcy5VTkFWQUlMQUJMRSwgIm1vZGVsIGNhdGFsb2cgdW5hdmFpbGFibGUiKQoJCQl9
OwoJCQljb25zdCByZXNvbHZlZCA9IHJlc29sdmVBbGxvd2VkTW9kZWxSZWYoewoJCQkJY2ZnLAoJ
CQkJY2F0YWxvZzogYXdhaXQgcGFyYW1zLmxvYWRHYXRld2F5TW9kZWxDYXRhbG9nKCksCgkJCQly
YXc6IHRyaW1tZWQsCgkJCQlkZWZhdWx0UHJvdmlkZXI6IHJlc29sdmVkRGVmYXVsdC5wcm92aWRl
ciwKCQkJCWRlZmF1bHRNb2RlbDogc3ViYWdlbnRNb2RlbEhpbnQgPz8gcmVzb2x2ZWREZWZhdWx0
Lm1vZGVsCgkJCX0pOwoJCQlpZiAoImVycm9yIiBpbiByZXNvbHZlZCkgcmV0dXJuIGludmFsaWQo
cmVzb2x2ZWQuZXJyb3IpOwoJCQljb25zdCBpc0RlZmF1bHQgPSByZXNvbHZlZC5yZWYucHJvdmlk
ZXIgPT09IHJlc29sdmVkRGVmYXVsdC5wcm92aWRlciAmJiByZXNvbHZlZC5yZWYubW9kZWwgPT09
IHJlc29sdmVkRGVmYXVsdC5tb2RlbDsKCQkJYXBwbHlNb2RlbE92ZXJyaWRlVG9TZXNzaW9uRW50
cnkoewoJCQkJZW50cnk6IG5leHQsCgkJCQlzZWxlY3Rpb246IHsKCQkJCQlwcm92aWRlcjogcmVz
b2x2ZWQucmVmLnByb3ZpZGVyLAoJCQkJCW1vZGVsOiByZXNvbHZlZC5yZWYubW9kZWwsCgkJCQkJ
aXNEZWZhdWx0CgkJCQl9CgkJCX0pOwoJCX0KCX0KCWlmIChuZXh0LnRoaW5raW5nTGV2ZWwgPT09
ICJ4aGlnaCIpIHsKCQlpZiAoIXN1cHBvcnRzWEhpZ2hUaGlua2luZyhuZXh0LnByb3ZpZGVyT3Zl
cnJpZGUgPz8gcmVzb2x2ZWREZWZhdWx0LnByb3ZpZGVyLCBuZXh0Lm1vZGVsT3ZlcnJpZGUgPz8g
cmVzb2x2ZWREZWZhdWx0Lm1vZGVsKSkgewoJCQlpZiAoInRoaW5raW5nTGV2ZWwiIGluIHBhdGNo
KSByZXR1cm4gaW52YWxpZChgdGhpbmtpbmdMZXZlbCAieGhpZ2giIGlzIG9ubHkgc3VwcG9ydGVk
IGZvciAke2Zvcm1hdFhIaWdoTW9kZWxIaW50KCl9YCk7CgkJCW5leHQudGhpbmtpbmdMZXZlbCA9
ICJoaWdoIjsKCQl9Cgl9CglpZiAoInNlbmRQb2xpY3kiIGluIHBhdGNoKSB7CgkJY29uc3QgcmF3
ID0gcGF0Y2guc2VuZFBvbGljeTsKCQlpZiAocmF3ID09PSBudWxsKSBkZWxldGUgbmV4dC5zZW5k
UG9saWN5OwoJCWVsc2UgaWYgKHJhdyAhPT0gdm9pZCAwKSB7CgkJCWNvbnN0IG5vcm1hbGl6ZWQg
PSBub3JtYWxpemVTZW5kUG9saWN5KFN0cmluZyhyYXcpKTsKCQkJaWYgKCFub3JtYWxpemVkKSBy
ZXR1cm4gaW52YWxpZCgiaW52YWxpZCBzZW5kUG9saWN5ICh1c2UgXCJhbGxvd1wifFwiZGVueVwi
KSIpOwoJCQluZXh0LnNlbmRQb2xpY3kgPSBub3JtYWxpemVkOwoJCX0KCX0KCWlmICgiZ3JvdXBB
Y3RpdmF0aW9uIiBpbiBwYXRjaCkgewoJCWNvbnN0IHJhdyA9IHBhdGNoLmdyb3VwQWN0aXZhdGlv
bjsKCQlpZiAocmF3ID09PSBudWxsKSBkZWxldGUgbmV4dC5ncm91cEFjdGl2YXRpb247CgkJZWxz
ZSBpZiAocmF3ICE9PSB2b2lkIDApIHsKCQkJY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZUdy
b3VwQWN0aXZhdGlvbihTdHJpbmcocmF3KSk7CgkJCWlmICghbm9ybWFsaXplZCkgcmV0dXJuIGlu
dmFsaWQoImludmFsaWQgZ3JvdXBBY3RpdmF0aW9uICh1c2UgXCJtZW50aW9uXCJ8XCJhbHdheXNc
IikiKTsKCQkJbmV4dC5ncm91cEFjdGl2YXRpb24gPSBub3JtYWxpemVkOwoJCX0KCX0KCXN0b3Jl
W3N0b3JlS2V5XSA9IG5leHQ7CglyZXR1cm4gewoJCW9rOiB0cnVlLAoJCWVudHJ5OiBuZXh0Cgl9
Owp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dhdGV3YXkvc2Vzc2lvbnMtcmVzb2x2ZS50
cwphc3luYyBmdW5jdGlvbiByZXNvbHZlU2Vzc2lvbktleUZyb21SZXNvbHZlUGFyYW1zKHBhcmFt
cykgewoJY29uc3QgeyBjZmcsIHAgfSA9IHBhcmFtczsKCWNvbnN0IGtleSA9IHR5cGVvZiBwLmtl
eSA9PT0gInN0cmluZyIgPyBwLmtleS50cmltKCkgOiAiIjsKCWNvbnN0IGhhc0tleSA9IGtleS5s
ZW5ndGggPiAwOwoJY29uc3Qgc2Vzc2lvbklkID0gdHlwZW9mIHAuc2Vzc2lvbklkID09PSAic3Ry
aW5nIiA/IHAuc2Vzc2lvbklkLnRyaW0oKSA6ICIiOwoJY29uc3QgaGFzU2Vzc2lvbklkID0gc2Vz
c2lvbklkLmxlbmd0aCA+IDA7Cgljb25zdCBzZWxlY3Rpb25Db3VudCA9IFsKCQloYXNLZXksCgkJ
aGFzU2Vzc2lvbklkLAoJCXR5cGVvZiBwLmxhYmVsID09PSAic3RyaW5nIiAmJiBwLmxhYmVsLnRy
aW0oKS5sZW5ndGggPiAwCgldLmZpbHRlcihCb29sZWFuKS5sZW5ndGg7CglpZiAoc2VsZWN0aW9u
Q291bnQgPiAxKSByZXR1cm4gewoJCW9rOiBmYWxzZSwKCQllcnJvcjogZXJyb3JTaGFwZShFcnJv
ckNvZGVzLklOVkFMSURfUkVRVUVTVCwgIlByb3ZpZGUgZWl0aGVyIGtleSwgc2Vzc2lvbklkLCBv
ciBsYWJlbCAobm90IG11bHRpcGxlKSIpCgl9OwoJaWYgKHNlbGVjdGlvbkNvdW50ID09PSAwKSBy
ZXR1cm4gewoJCW9rOiBmYWxzZSwKCQllcnJvcjogZXJyb3JTaGFwZShFcnJvckNvZGVzLklOVkFM
SURfUkVRVUVTVCwgIkVpdGhlciBrZXksIHNlc3Npb25JZCwgb3IgbGFiZWwgaXMgcmVxdWlyZWQi
KQoJfTsKCWlmIChoYXNLZXkpIHsKCQljb25zdCB0YXJnZXQgPSByZXNvbHZlR2F0ZXdheVNlc3Np
b25TdG9yZVRhcmdldCh7CgkJCWNmZywKCQkJa2V5CgkJfSk7CgkJY29uc3Qgc3RvcmUgPSBsb2Fk
U2Vzc2lvblN0b3JlKHRhcmdldC5zdG9yZVBhdGgpOwoJCWlmIChzdG9yZVt0YXJnZXQuY2Fub25p
Y2FsS2V5XSkgcmV0dXJuIHsKCQkJb2s6IHRydWUsCgkJCWtleTogdGFyZ2V0LmNhbm9uaWNhbEtl
eQoJCX07CgkJY29uc3QgbGVnYWN5S2V5ID0gdGFyZ2V0LnN0b3JlS2V5cy5maW5kKChjYW5kaWRh
dGUpID0+IHN0b3JlW2NhbmRpZGF0ZV0pOwoJCWlmICghbGVnYWN5S2V5KSByZXR1cm4gewoJCQlv
azogZmFsc2UsCgkJCWVycm9yOiBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNU
LCBgTm8gc2Vzc2lvbiBmb3VuZDogJHtrZXl9YCkKCQl9OwoJCWF3YWl0IHVwZGF0ZVNlc3Npb25T
dG9yZSh0YXJnZXQuc3RvcmVQYXRoLCAocykgPT4gewoJCQljb25zdCB7IHByaW1hcnlLZXkgfSA9
IG1pZ3JhdGVBbmRQcnVuZUdhdGV3YXlTZXNzaW9uU3RvcmVLZXkoewoJCQkJY2ZnLAoJCQkJa2V5
LAoJCQkJc3RvcmU6IHMKCQkJfSk7CgkJCWlmICghc1twcmltYXJ5S2V5XSAmJiBzW2xlZ2FjeUtl
eV0pIHNbcHJpbWFyeUtleV0gPSBzW2xlZ2FjeUtleV07CgkJfSk7CgkJcmV0dXJuIHsKCQkJb2s6
IHRydWUsCgkJCWtleTogdGFyZ2V0LmNhbm9uaWNhbEtleQoJCX07Cgl9CglpZiAoaGFzU2Vzc2lv
bklkKSB7CgkJY29uc3QgeyBzdG9yZVBhdGgsIHN0b3JlIH0gPSBsb2FkQ29tYmluZWRTZXNzaW9u
U3RvcmVGb3JHYXRld2F5KGNmZyk7CgkJY29uc3QgbWF0Y2hlcyA9IGxpc3RTZXNzaW9uc0Zyb21T
dG9yZSh7CgkJCWNmZywKCQkJc3RvcmVQYXRoLAoJCQlzdG9yZSwKCQkJb3B0czogewoJCQkJaW5j
bHVkZUdsb2JhbDogcC5pbmNsdWRlR2xvYmFsID09PSB0cnVlLAoJCQkJaW5jbHVkZVVua25vd246
IHAuaW5jbHVkZVVua25vd24gPT09IHRydWUsCgkJCQlzcGF3bmVkQnk6IHAuc3Bhd25lZEJ5LAoJ
CQkJYWdlbnRJZDogcC5hZ2VudElkLAoJCQkJc2VhcmNoOiBzZXNzaW9uSWQsCgkJCQlsaW1pdDog
OAoJCQl9CgkJfSkuc2Vzc2lvbnMuZmlsdGVyKChzZXNzaW9uKSA9PiBzZXNzaW9uLnNlc3Npb25J
ZCA9PT0gc2Vzc2lvbklkIHx8IHNlc3Npb24ua2V5ID09PSBzZXNzaW9uSWQpOwoJCWlmIChtYXRj
aGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHsKCQkJb2s6IGZhbHNlLAoJCQllcnJvcjogZXJyb3JT
aGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgYE5vIHNlc3Npb24gZm91bmQ6ICR7c2Vz
c2lvbklkfWApCgkJfTsKCQlpZiAobWF0Y2hlcy5sZW5ndGggPiAxKSB7CgkJCWNvbnN0IGtleXMg
PSBtYXRjaGVzLm1hcCgoc2Vzc2lvbikgPT4gc2Vzc2lvbi5rZXkpLmpvaW4oIiwgIik7CgkJCXJl
dHVybiB7CgkJCQlvazogZmFsc2UsCgkJCQllcnJvcjogZXJyb3JTaGFwZShFcnJvckNvZGVzLklO
VkFMSURfUkVRVUVTVCwgYE11bHRpcGxlIHNlc3Npb25zIGZvdW5kIGZvciBzZXNzaW9uSWQ6ICR7
c2Vzc2lvbklkfSAoJHtrZXlzfSlgKQoJCQl9OwoJCX0KCQlyZXR1cm4gewoJCQlvazogdHJ1ZSwK
CQkJa2V5OiBTdHJpbmcobWF0Y2hlc1swXT8ua2V5ID8/ICIiKQoJCX07Cgl9Cgljb25zdCBwYXJz
ZWRMYWJlbCA9IHBhcnNlU2Vzc2lvbkxhYmVsKHAubGFiZWwpOwoJaWYgKCFwYXJzZWRMYWJlbC5v
aykgcmV0dXJuIHsKCQlvazogZmFsc2UsCgkJZXJyb3I6IGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5J
TlZBTElEX1JFUVVFU1QsIHBhcnNlZExhYmVsLmVycm9yKQoJfTsKCWNvbnN0IHsgc3RvcmVQYXRo
LCBzdG9yZSB9ID0gbG9hZENvbWJpbmVkU2Vzc2lvblN0b3JlRm9yR2F0ZXdheShjZmcpOwoJY29u
c3QgbGlzdCA9IGxpc3RTZXNzaW9uc0Zyb21TdG9yZSh7CgkJY2ZnLAoJCXN0b3JlUGF0aCwKCQlz
dG9yZSwKCQlvcHRzOiB7CgkJCWluY2x1ZGVHbG9iYWw6IHAuaW5jbHVkZUdsb2JhbCA9PT0gdHJ1
ZSwKCQkJaW5jbHVkZVVua25vd246IHAuaW5jbHVkZVVua25vd24gPT09IHRydWUsCgkJCWxhYmVs
OiBwYXJzZWRMYWJlbC5sYWJlbCwKCQkJYWdlbnRJZDogcC5hZ2VudElkLAoJCQlzcGF3bmVkQnk6
IHAuc3Bhd25lZEJ5LAoJCQlsaW1pdDogMgoJCX0KCX0pOwoJaWYgKGxpc3Quc2Vzc2lvbnMubGVu
Z3RoID09PSAwKSByZXR1cm4gewoJCW9rOiBmYWxzZSwKCQllcnJvcjogZXJyb3JTaGFwZShFcnJv
ckNvZGVzLklOVkFMSURfUkVRVUVTVCwgYE5vIHNlc3Npb24gZm91bmQgd2l0aCBsYWJlbDogJHtw
YXJzZWRMYWJlbC5sYWJlbH1gKQoJfTsKCWlmIChsaXN0LnNlc3Npb25zLmxlbmd0aCA+IDEpIHsK
CQljb25zdCBrZXlzID0gbGlzdC5zZXNzaW9ucy5tYXAoKHMpID0+IHMua2V5KS5qb2luKCIsICIp
OwoJCXJldHVybiB7CgkJCW9rOiBmYWxzZSwKCQkJZXJyb3I6IGVycm9yU2hhcGUoRXJyb3JDb2Rl
cy5JTlZBTElEX1JFUVVFU1QsIGBNdWx0aXBsZSBzZXNzaW9ucyBmb3VuZCB3aXRoIGxhYmVsOiAk
e3BhcnNlZExhYmVsLmxhYmVsfSAoJHtrZXlzfSlgKQoJCX07Cgl9CglyZXR1cm4gewoJCW9rOiB0
cnVlLAoJCWtleTogU3RyaW5nKGxpc3Quc2Vzc2lvbnNbMF0/LmtleSA/PyAiIikKCX07Cn0KLy8j
ZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvZ2F0ZXdheS9zZXJ2ZXItbWV0aG9kcy9zZXNzaW9ucy50
cwpmdW5jdGlvbiByZXF1aXJlU2Vzc2lvbktleShrZXksIHJlc3BvbmQpIHsKCWNvbnN0IG5vcm1h
bGl6ZWQgPSAodHlwZW9mIGtleSA9PT0gInN0cmluZyIgPyBrZXkgOiB0eXBlb2Yga2V5ID09PSAi
bnVtYmVyIiA/IFN0cmluZyhrZXkpIDogdHlwZW9mIGtleSA9PT0gImJpZ2ludCIgPyBTdHJpbmco
a2V5KSA6ICIiKS50cmltKCk7CglpZiAoIW5vcm1hbGl6ZWQpIHsKCQlyZXNwb25kKGZhbHNlLCB2
b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsICJrZXkgcmVxdWly
ZWQiKSk7CgkJcmV0dXJuIG51bGw7Cgl9CglyZXR1cm4gbm9ybWFsaXplZDsKfQpmdW5jdGlvbiBy
ZXNvbHZlR2F0ZXdheVNlc3Npb25UYXJnZXRGcm9tS2V5KGtleSkgewoJY29uc3QgY2ZnID0gbG9h
ZENvbmZpZygpOwoJY29uc3QgdGFyZ2V0ID0gcmVzb2x2ZUdhdGV3YXlTZXNzaW9uU3RvcmVUYXJn
ZXQoewoJCWNmZywKCQlrZXkKCX0pOwoJcmV0dXJuIHsKCQljZmcsCgkJdGFyZ2V0LAoJCXN0b3Jl
UGF0aDogdGFyZ2V0LnN0b3JlUGF0aAoJfTsKfQpmdW5jdGlvbiByZWplY3RXZWJjaGF0U2Vzc2lv
bk11dGF0aW9uKHBhcmFtcykgewoJaWYgKCFwYXJhbXMuY2xpZW50Py5jb25uZWN0IHx8ICFwYXJh
bXMuaXNXZWJjaGF0Q29ubmVjdChwYXJhbXMuY2xpZW50LmNvbm5lY3QpKSByZXR1cm4gZmFsc2U7
CglpZiAocGFyYW1zLmNsaWVudC5jb25uZWN0LmNsaWVudC5pZCA9PT0gR0FURVdBWV9DTElFTlRf
SURTLkNPTlRST0xfVUkpIHJldHVybiBmYWxzZTsKCXBhcmFtcy5yZXNwb25kKGZhbHNlLCB2b2lk
IDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsIGB3ZWJjaGF0IGNsaWVu
dHMgY2Fubm90ICR7cGFyYW1zLmFjdGlvbn0gc2Vzc2lvbnM7IHVzZSBjaGF0LnNlbmQgZm9yIHNl
c3Npb24tc2NvcGVkIHVwZGF0ZXNgKSk7CglyZXR1cm4gdHJ1ZTsKfQpjb25zdCBzZXNzaW9uc0hh
bmRsZXJzID0gewoJInNlc3Npb25zLmxpc3QiOiAoeyBwYXJhbXMsIHJlc3BvbmQgfSkgPT4gewoJ
CWlmICghYXNzZXJ0VmFsaWRQYXJhbXMocGFyYW1zLCB2YWxpZGF0ZVNlc3Npb25zTGlzdFBhcmFt
cywgInNlc3Npb25zLmxpc3QiLCByZXNwb25kKSkgcmV0dXJuOwoJCWNvbnN0IHAgPSBwYXJhbXM7
CgkJY29uc3QgY2ZnID0gbG9hZENvbmZpZygpOwoJCWNvbnN0IHsgc3RvcmVQYXRoLCBzdG9yZSB9
ID0gbG9hZENvbWJpbmVkU2Vzc2lvblN0b3JlRm9yR2F0ZXdheShjZmcpOwoJCXJlc3BvbmQodHJ1
ZSwgbGlzdFNlc3Npb25zRnJvbVN0b3JlKHsKCQkJY2ZnLAoJCQlzdG9yZVBhdGgsCgkJCXN0b3Jl
LAoJCQlvcHRzOiBwCgkJfSksIHZvaWQgMCk7Cgl9LAoJInNlc3Npb25zLnByZXZpZXciOiAoeyBw
YXJhbXMsIHJlc3BvbmQgfSkgPT4gewoJCWlmICghYXNzZXJ0VmFsaWRQYXJhbXMocGFyYW1zLCB2
YWxpZGF0ZVNlc3Npb25zUHJldmlld1BhcmFtcywgInNlc3Npb25zLnByZXZpZXciLCByZXNwb25k
KSkgcmV0dXJuOwoJCWNvbnN0IHAgPSBwYXJhbXM7CgkJY29uc3Qga2V5cyA9IChBcnJheS5pc0Fy
cmF5KHAua2V5cykgPyBwLmtleXMgOiBbXSkubWFwKChrZXkpID0+IFN0cmluZyhrZXkgPz8gIiIp
LnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pLnNsaWNlKDAsIDY0KTsKCQljb25zdCBsaW1pdCA9IHR5
cGVvZiBwLmxpbWl0ID09PSAibnVtYmVyIiAmJiBOdW1iZXIuaXNGaW5pdGUocC5saW1pdCkgPyBN
YXRoLm1heCgxLCBwLmxpbWl0KSA6IDEyOwoJCWNvbnN0IG1heENoYXJzID0gdHlwZW9mIHAubWF4
Q2hhcnMgPT09ICJudW1iZXIiICYmIE51bWJlci5pc0Zpbml0ZShwLm1heENoYXJzKSA/IE1hdGgu
bWF4KDIwLCBwLm1heENoYXJzKSA6IDI0MDsKCQlpZiAoa2V5cy5sZW5ndGggPT09IDApIHsKCQkJ
cmVzcG9uZCh0cnVlLCB7CgkJCQl0czogRGF0ZS5ub3coKSwKCQkJCXByZXZpZXdzOiBbXQoJCQl9
LCB2b2lkIDApOwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0IGNmZyA9IGxvYWRDb25maWcoKTsKCQlj
b25zdCBzdG9yZUNhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKCQljb25zdCBwcmV2
aWV3cyA9IFtdOwoJCWZvciAoY29uc3Qga2V5IG9mIGtleXMpIHRyeSB7CgkJCWNvbnN0IHN0b3Jl
VGFyZ2V0ID0gcmVzb2x2ZUdhdGV3YXlTZXNzaW9uU3RvcmVUYXJnZXQoewoJCQkJY2ZnLAoJCQkJ
a2V5LAoJCQkJc2NhbkxlZ2FjeUtleXM6IGZhbHNlCgkJCX0pOwoJCQljb25zdCBzdG9yZSA9IHN0
b3JlQ2FjaGUuZ2V0KHN0b3JlVGFyZ2V0LnN0b3JlUGF0aCkgPz8gbG9hZFNlc3Npb25TdG9yZShz
dG9yZVRhcmdldC5zdG9yZVBhdGgpOwoJCQlzdG9yZUNhY2hlLnNldChzdG9yZVRhcmdldC5zdG9y
ZVBhdGgsIHN0b3JlKTsKCQkJY29uc3QgdGFyZ2V0ID0gcmVzb2x2ZUdhdGV3YXlTZXNzaW9uU3Rv
cmVUYXJnZXQoewoJCQkJY2ZnLAoJCQkJa2V5LAoJCQkJc3RvcmUKCQkJfSk7CgkJCWNvbnN0IGVu
dHJ5ID0gdGFyZ2V0LnN0b3JlS2V5cy5tYXAoKGNhbmRpZGF0ZSkgPT4gc3RvcmVbY2FuZGlkYXRl
XSkuZmluZChCb29sZWFuKTsKCQkJaWYgKCFlbnRyeT8uc2Vzc2lvbklkKSB7CgkJCQlwcmV2aWV3
cy5wdXNoKHsKCQkJCQlrZXksCgkJCQkJc3RhdHVzOiAibWlzc2luZyIsCgkJCQkJaXRlbXM6IFtd
CgkJCQl9KTsKCQkJCWNvbnRpbnVlOwoJCQl9CgkJCWNvbnN0IGl0ZW1zID0gcmVhZFNlc3Npb25Q
cmV2aWV3SXRlbXNGcm9tVHJhbnNjcmlwdChlbnRyeS5zZXNzaW9uSWQsIHRhcmdldC5zdG9yZVBh
dGgsIGVudHJ5LnNlc3Npb25GaWxlLCB0YXJnZXQuYWdlbnRJZCwgbGltaXQsIG1heENoYXJzKTsK
CQkJcHJldmlld3MucHVzaCh7CgkJCQlrZXksCgkJCQlzdGF0dXM6IGl0ZW1zLmxlbmd0aCA+IDAg
PyAib2siIDogImVtcHR5IiwKCQkJCWl0ZW1zCgkJCX0pOwoJCX0gY2F0Y2ggewoJCQlwcmV2aWV3
cy5wdXNoKHsKCQkJCWtleSwKCQkJCXN0YXR1czogImVycm9yIiwKCQkJCWl0ZW1zOiBbXQoJCQl9
KTsKCQl9CgkJcmVzcG9uZCh0cnVlLCB7CgkJCXRzOiBEYXRlLm5vdygpLAoJCQlwcmV2aWV3cwoJ
CX0sIHZvaWQgMCk7Cgl9LAoJInNlc3Npb25zLnJlc29sdmUiOiBhc3luYyAoeyBwYXJhbXMsIHJl
c3BvbmQgfSkgPT4gewoJCWlmICghYXNzZXJ0VmFsaWRQYXJhbXMocGFyYW1zLCB2YWxpZGF0ZVNl
c3Npb25zUmVzb2x2ZVBhcmFtcywgInNlc3Npb25zLnJlc29sdmUiLCByZXNwb25kKSkgcmV0dXJu
OwoJCWNvbnN0IHAgPSBwYXJhbXM7CgkJY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCByZXNvbHZlU2Vz
c2lvbktleUZyb21SZXNvbHZlUGFyYW1zKHsKCQkJY2ZnOiBsb2FkQ29uZmlnKCksCgkJCXAKCQl9
KTsKCQlpZiAoIXJlc29sdmVkLm9rKSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgcmVzb2x2
ZWQuZXJyb3IpOwoJCQlyZXR1cm47CgkJfQoJCXJlc3BvbmQodHJ1ZSwgewoJCQlvazogdHJ1ZSwK
CQkJa2V5OiByZXNvbHZlZC5rZXkKCQl9LCB2b2lkIDApOwoJfSwKCSJzZXNzaW9ucy5wYXRjaCI6
IGFzeW5jICh7IHBhcmFtcywgcmVzcG9uZCwgY29udGV4dCwgY2xpZW50LCBpc1dlYmNoYXRDb25u
ZWN0IH0pID0+IHsKCQlpZiAoIWFzc2VydFZhbGlkUGFyYW1zKHBhcmFtcywgdmFsaWRhdGVTZXNz
aW9uc1BhdGNoUGFyYW1zLCAic2Vzc2lvbnMucGF0Y2giLCByZXNwb25kKSkgcmV0dXJuOwoJCWNv
bnN0IHAgPSBwYXJhbXM7CgkJY29uc3Qga2V5ID0gcmVxdWlyZVNlc3Npb25LZXkocC5rZXksIHJl
c3BvbmQpOwoJCWlmICgha2V5KSByZXR1cm47CgkJaWYgKHJlamVjdFdlYmNoYXRTZXNzaW9uTXV0
YXRpb24oewoJCQlhY3Rpb246ICJwYXRjaCIsCgkJCWNsaWVudCwKCQkJaXNXZWJjaGF0Q29ubmVj
dCwKCQkJcmVzcG9uZAoJCX0pKSByZXR1cm47CgkJY29uc3QgeyBjZmcsIHRhcmdldCwgc3RvcmVQ
YXRoIH0gPSByZXNvbHZlR2F0ZXdheVNlc3Npb25UYXJnZXRGcm9tS2V5KGtleSk7CgkJY29uc3Qg
YXBwbGllZCA9IGF3YWl0IHVwZGF0ZVNlc3Npb25TdG9yZShzdG9yZVBhdGgsIGFzeW5jIChzdG9y
ZSkgPT4gewoJCQljb25zdCB7IHByaW1hcnlLZXkgfSA9IG1pZ3JhdGVBbmRQcnVuZUdhdGV3YXlT
ZXNzaW9uU3RvcmVLZXkoewoJCQkJY2ZnLAoJCQkJa2V5LAoJCQkJc3RvcmUKCQkJfSk7CgkJCXJl
dHVybiBhd2FpdCBhcHBseVNlc3Npb25zUGF0Y2hUb1N0b3JlKHsKCQkJCWNmZywKCQkJCXN0b3Jl
LAoJCQkJc3RvcmVLZXk6IHByaW1hcnlLZXksCgkJCQlwYXRjaDogcCwKCQkJCWxvYWRHYXRld2F5
TW9kZWxDYXRhbG9nOiBjb250ZXh0LmxvYWRHYXRld2F5TW9kZWxDYXRhbG9nCgkJCX0pOwoJCX0p
OwoJCWlmICghYXBwbGllZC5vaykgewoJCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGFwcGxpZWQu
ZXJyb3IpOwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0IGFnZW50SWQgPSBub3JtYWxpemVBZ2VudElk
KHBhcnNlQWdlbnRTZXNzaW9uS2V5KHRhcmdldC5jYW5vbmljYWxLZXkgPz8ga2V5KT8uYWdlbnRJ
ZCA/PyByZXNvbHZlRGVmYXVsdEFnZW50SWQoY2ZnKSk7CgkJY29uc3QgcmVzb2x2ZWQgPSByZXNv
bHZlU2Vzc2lvbk1vZGVsUmVmKGNmZywgYXBwbGllZC5lbnRyeSwgYWdlbnRJZCk7CgkJcmVzcG9u
ZCh0cnVlLCB7CgkJCW9rOiB0cnVlLAoJCQlwYXRoOiBzdG9yZVBhdGgsCgkJCWtleTogdGFyZ2V0
LmNhbm9uaWNhbEtleSwKCQkJZW50cnk6IGFwcGxpZWQuZW50cnksCgkJCXJlc29sdmVkOiB7CgkJ
CQltb2RlbFByb3ZpZGVyOiByZXNvbHZlZC5wcm92aWRlciwKCQkJCW1vZGVsOiByZXNvbHZlZC5t
b2RlbAoJCQl9CgkJfSwgdm9pZCAwKTsKCX0sCgkic2Vzc2lvbnMucmVzZXQiOiBhc3luYyAoeyBw
YXJhbXMsIHJlc3BvbmQgfSkgPT4gewoJCWlmICghYXNzZXJ0VmFsaWRQYXJhbXMocGFyYW1zLCB2
YWxpZGF0ZVNlc3Npb25zUmVzZXRQYXJhbXMsICJzZXNzaW9ucy5yZXNldCIsIHJlc3BvbmQpKSBy
ZXR1cm47CgkJY29uc3QgcCA9IHBhcmFtczsKCQljb25zdCBrZXkgPSByZXF1aXJlU2Vzc2lvbktl
eShwLmtleSwgcmVzcG9uZCk7CgkJaWYgKCFrZXkpIHJldHVybjsKCQljb25zdCByZXN1bHQgPSBh
d2FpdCBwZXJmb3JtR2F0ZXdheVNlc3Npb25SZXNldCh7CgkJCWtleSwKCQkJcmVhc29uOiBwLnJl
YXNvbiA9PT0gIm5ldyIgPyAibmV3IiA6ICJyZXNldCIsCgkJCWNvbW1hbmRTb3VyY2U6ICJnYXRl
d2F5OnNlc3Npb25zLnJlc2V0IgoJCX0pOwoJCWlmICghcmVzdWx0Lm9rKSB7CgkJCXJlc3BvbmQo
ZmFsc2UsIHZvaWQgMCwgcmVzdWx0LmVycm9yKTsKCQkJcmV0dXJuOwoJCX0KCQlyZXNwb25kKHRy
dWUsIHsKCQkJb2s6IHRydWUsCgkJCWtleTogcmVzdWx0LmtleSwKCQkJZW50cnk6IHJlc3VsdC5l
bnRyeQoJCX0sIHZvaWQgMCk7Cgl9LAoJInNlc3Npb25zLmRlbGV0ZSI6IGFzeW5jICh7IHBhcmFt
cywgcmVzcG9uZCwgY2xpZW50LCBpc1dlYmNoYXRDb25uZWN0IH0pID0+IHsKCQlpZiAoIWFzc2Vy
dFZhbGlkUGFyYW1zKHBhcmFtcywgdmFsaWRhdGVTZXNzaW9uc0RlbGV0ZVBhcmFtcywgInNlc3Np
b25zLmRlbGV0ZSIsIHJlc3BvbmQpKSByZXR1cm47CgkJY29uc3QgcCA9IHBhcmFtczsKCQljb25z
dCBrZXkgPSByZXF1aXJlU2Vzc2lvbktleShwLmtleSwgcmVzcG9uZCk7CgkJaWYgKCFrZXkpIHJl
dHVybjsKCQlpZiAocmVqZWN0V2ViY2hhdFNlc3Npb25NdXRhdGlvbih7CgkJCWFjdGlvbjogImRl
bGV0ZSIsCgkJCWNsaWVudCwKCQkJaXNXZWJjaGF0Q29ubmVjdCwKCQkJcmVzcG9uZAoJCX0pKSBy
ZXR1cm47CgkJY29uc3QgeyBjZmcsIHRhcmdldCwgc3RvcmVQYXRoIH0gPSByZXNvbHZlR2F0ZXdh
eVNlc3Npb25UYXJnZXRGcm9tS2V5KGtleSk7CgkJY29uc3QgbWFpbktleSA9IHJlc29sdmVNYWlu
U2Vzc2lvbktleShjZmcpOwoJCWlmICh0YXJnZXQuY2Fub25pY2FsS2V5ID09PSBtYWluS2V5KSB7
CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURf
UkVRVUVTVCwgYENhbm5vdCBkZWxldGUgdGhlIG1haW4gc2Vzc2lvbiAoJHttYWluS2V5fSkuYCkp
OwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0IGRlbGV0ZVRyYW5zY3JpcHQgPSB0eXBlb2YgcC5kZWxl
dGVUcmFuc2NyaXB0ID09PSAiYm9vbGVhbiIgPyBwLmRlbGV0ZVRyYW5zY3JpcHQgOiB0cnVlOwoJ
CWNvbnN0IHsgZW50cnksIGxlZ2FjeUtleSwgY2Fub25pY2FsS2V5IH0gPSBsb2FkU2Vzc2lvbkVu
dHJ5KGtleSk7CgkJY29uc3QgbXV0YXRpb25DbGVhbnVwRXJyb3IgPSBhd2FpdCBjbGVhbnVwU2Vz
c2lvbkJlZm9yZU11dGF0aW9uKHsKCQkJY2ZnLAoJCQlrZXksCgkJCXRhcmdldCwKCQkJZW50cnks
CgkJCWxlZ2FjeUtleSwKCQkJY2Fub25pY2FsS2V5LAoJCQlyZWFzb246ICJzZXNzaW9uLWRlbGV0
ZSIKCQl9KTsKCQlpZiAobXV0YXRpb25DbGVhbnVwRXJyb3IpIHsKCQkJcmVzcG9uZChmYWxzZSwg
dm9pZCAwLCBtdXRhdGlvbkNsZWFudXBFcnJvcik7CgkJCXJldHVybjsKCQl9CgkJY29uc3Qgc2Vz
c2lvbklkID0gZW50cnk/LnNlc3Npb25JZDsKCQljb25zdCBkZWxldGVkID0gYXdhaXQgdXBkYXRl
U2Vzc2lvblN0b3JlKHN0b3JlUGF0aCwgKHN0b3JlKSA9PiB7CgkJCWNvbnN0IHsgcHJpbWFyeUtl
eSB9ID0gbWlncmF0ZUFuZFBydW5lR2F0ZXdheVNlc3Npb25TdG9yZUtleSh7CgkJCQljZmcsCgkJ
CQlrZXksCgkJCQlzdG9yZQoJCQl9KTsKCQkJY29uc3QgaGFkRW50cnkgPSBCb29sZWFuKHN0b3Jl
W3ByaW1hcnlLZXldKTsKCQkJaWYgKGhhZEVudHJ5KSBkZWxldGUgc3RvcmVbcHJpbWFyeUtleV07
CgkJCXJldHVybiBoYWRFbnRyeTsKCQl9KTsKCQljb25zdCBhcmNoaXZlZCA9IGRlbGV0ZWQgJiYg
ZGVsZXRlVHJhbnNjcmlwdCA/IGFyY2hpdmVTZXNzaW9uVHJhbnNjcmlwdHNGb3JTZXNzaW9uKHsK
CQkJc2Vzc2lvbklkLAoJCQlzdG9yZVBhdGgsCgkJCXNlc3Npb25GaWxlOiBlbnRyeT8uc2Vzc2lv
bkZpbGUsCgkJCWFnZW50SWQ6IHRhcmdldC5hZ2VudElkLAoJCQlyZWFzb246ICJkZWxldGVkIgoJ
CX0pIDogW107CgkJaWYgKGRlbGV0ZWQpIHsKCQkJY29uc3QgZW1pdExpZmVjeWNsZUhvb2tzID0g
cC5lbWl0TGlmZWN5Y2xlSG9va3MgIT09IGZhbHNlOwoJCQlhd2FpdCBlbWl0U2Vzc2lvblVuYm91
bmRMaWZlY3ljbGVFdmVudCh7CgkJCQl0YXJnZXRTZXNzaW9uS2V5OiB0YXJnZXQuY2Fub25pY2Fs
S2V5ID8/IGtleSwKCQkJCXJlYXNvbjogInNlc3Npb24tZGVsZXRlIiwKCQkJCWVtaXRIb29rczog
ZW1pdExpZmVjeWNsZUhvb2tzCgkJCX0pOwoJCX0KCQlyZXNwb25kKHRydWUsIHsKCQkJb2s6IHRy
dWUsCgkJCWtleTogdGFyZ2V0LmNhbm9uaWNhbEtleSwKCQkJZGVsZXRlZCwKCQkJYXJjaGl2ZWQK
CQl9LCB2b2lkIDApOwoJfSwKCSJzZXNzaW9ucy5nZXQiOiAoeyBwYXJhbXMsIHJlc3BvbmQgfSkg
PT4gewoJCWNvbnN0IHAgPSBwYXJhbXM7CgkJY29uc3Qga2V5ID0gcmVxdWlyZVNlc3Npb25LZXko
cC5rZXkgPz8gcC5zZXNzaW9uS2V5LCByZXNwb25kKTsKCQlpZiAoIWtleSkgcmV0dXJuOwoJCWNv
bnN0IGxpbWl0ID0gdHlwZW9mIHAubGltaXQgPT09ICJudW1iZXIiICYmIE51bWJlci5pc0Zpbml0
ZShwLmxpbWl0KSA/IE1hdGgubWF4KDEsIE1hdGguZmxvb3IocC5saW1pdCkpIDogMjAwOwoJCWNv
bnN0IHsgdGFyZ2V0LCBzdG9yZVBhdGggfSA9IHJlc29sdmVHYXRld2F5U2Vzc2lvblRhcmdldEZy
b21LZXkoa2V5KTsKCQljb25zdCBzdG9yZSA9IGxvYWRTZXNzaW9uU3RvcmUoc3RvcmVQYXRoKTsK
CQljb25zdCBlbnRyeSA9IHRhcmdldC5zdG9yZUtleXMubWFwKChrKSA9PiBzdG9yZVtrXSkuZmlu
ZChCb29sZWFuKTsKCQlpZiAoIWVudHJ5Py5zZXNzaW9uSWQpIHsKCQkJcmVzcG9uZCh0cnVlLCB7
IG1lc3NhZ2VzOiBbXSB9LCB2b2lkIDApOwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0IGFsbE1lc3Nh
Z2VzID0gcmVhZFNlc3Npb25NZXNzYWdlcyhlbnRyeS5zZXNzaW9uSWQsIHN0b3JlUGF0aCwgZW50
cnkuc2Vzc2lvbkZpbGUpOwoJCXJlc3BvbmQodHJ1ZSwgeyBtZXNzYWdlczogbGltaXQgPCBhbGxN
ZXNzYWdlcy5sZW5ndGggPyBhbGxNZXNzYWdlcy5zbGljZSgtbGltaXQpIDogYWxsTWVzc2FnZXMg
fSwgdm9pZCAwKTsKCX0sCgkic2Vzc2lvbnMuY29tcGFjdCI6IGFzeW5jICh7IHBhcmFtcywgcmVz
cG9uZCB9KSA9PiB7CgkJaWYgKCFhc3NlcnRWYWxpZFBhcmFtcyhwYXJhbXMsIHZhbGlkYXRlU2Vz
c2lvbnNDb21wYWN0UGFyYW1zLCAic2Vzc2lvbnMuY29tcGFjdCIsIHJlc3BvbmQpKSByZXR1cm47
CgkJY29uc3QgcCA9IHBhcmFtczsKCQljb25zdCBrZXkgPSByZXF1aXJlU2Vzc2lvbktleShwLmtl
eSwgcmVzcG9uZCk7CgkJaWYgKCFrZXkpIHJldHVybjsKCQljb25zdCBtYXhMaW5lcyA9IHR5cGVv
ZiBwLm1heExpbmVzID09PSAibnVtYmVyIiAmJiBOdW1iZXIuaXNGaW5pdGUocC5tYXhMaW5lcykg
PyBNYXRoLm1heCgxLCBNYXRoLmZsb29yKHAubWF4TGluZXMpKSA6IDQwMDsKCQljb25zdCB7IGNm
ZywgdGFyZ2V0LCBzdG9yZVBhdGggfSA9IHJlc29sdmVHYXRld2F5U2Vzc2lvblRhcmdldEZyb21L
ZXkoa2V5KTsKCQljb25zdCBjb21wYWN0VGFyZ2V0ID0gYXdhaXQgdXBkYXRlU2Vzc2lvblN0b3Jl
KHN0b3JlUGF0aCwgKHN0b3JlKSA9PiB7CgkJCWNvbnN0IHsgZW50cnksIHByaW1hcnlLZXkgfSA9
IG1pZ3JhdGVBbmRQcnVuZUdhdGV3YXlTZXNzaW9uU3RvcmVLZXkoewoJCQkJY2ZnLAoJCQkJa2V5
LAoJCQkJc3RvcmUKCQkJfSk7CgkJCXJldHVybiB7CgkJCQllbnRyeSwKCQkJCXByaW1hcnlLZXkK
CQkJfTsKCQl9KTsKCQljb25zdCBlbnRyeSA9IGNvbXBhY3RUYXJnZXQuZW50cnk7CgkJY29uc3Qg
c2Vzc2lvbklkID0gZW50cnk/LnNlc3Npb25JZDsKCQlpZiAoIXNlc3Npb25JZCkgewoJCQlyZXNw
b25kKHRydWUsIHsKCQkJCW9rOiB0cnVlLAoJCQkJa2V5OiB0YXJnZXQuY2Fub25pY2FsS2V5LAoJ
CQkJY29tcGFjdGVkOiBmYWxzZSwKCQkJCXJlYXNvbjogIm5vIHNlc3Npb25JZCIKCQkJfSwgdm9p
ZCAwKTsKCQkJcmV0dXJuOwoJCX0KCQljb25zdCBmaWxlUGF0aCA9IHJlc29sdmVTZXNzaW9uVHJh
bnNjcmlwdENhbmRpZGF0ZXMoc2Vzc2lvbklkLCBzdG9yZVBhdGgsIGVudHJ5Py5zZXNzaW9uRmls
ZSwgdGFyZ2V0LmFnZW50SWQpLmZpbmQoKGNhbmRpZGF0ZSkgPT4gZnMuZXhpc3RzU3luYyhjYW5k
aWRhdGUpKTsKCQlpZiAoIWZpbGVQYXRoKSB7CgkJCXJlc3BvbmQodHJ1ZSwgewoJCQkJb2s6IHRy
dWUsCgkJCQlrZXk6IHRhcmdldC5jYW5vbmljYWxLZXksCgkJCQljb21wYWN0ZWQ6IGZhbHNlLAoJ
CQkJcmVhc29uOiAibm8gdHJhbnNjcmlwdCIKCQkJfSwgdm9pZCAwKTsKCQkJcmV0dXJuOwoJCX0K
CQljb25zdCBsaW5lcyA9IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgInV0Zi04Iikuc3BsaXQo
L1xyP1xuLykuZmlsdGVyKChsKSA9PiBsLnRyaW0oKS5sZW5ndGggPiAwKTsKCQlpZiAobGluZXMu
bGVuZ3RoIDw9IG1heExpbmVzKSB7CgkJCXJlc3BvbmQodHJ1ZSwgewoJCQkJb2s6IHRydWUsCgkJ
CQlrZXk6IHRhcmdldC5jYW5vbmljYWxLZXksCgkJCQljb21wYWN0ZWQ6IGZhbHNlLAoJCQkJa2Vw
dDogbGluZXMubGVuZ3RoCgkJCX0sIHZvaWQgMCk7CgkJCXJldHVybjsKCQl9CgkJY29uc3QgYXJj
aGl2ZWQgPSBhcmNoaXZlRmlsZU9uRGlzayhmaWxlUGF0aCwgImJhayIpOwoJCWNvbnN0IGtlcHRM
aW5lcyA9IGxpbmVzLnNsaWNlKC1tYXhMaW5lcyk7CgkJZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0
aCwgYCR7a2VwdExpbmVzLmpvaW4oIlxuIil9XG5gLCAidXRmLTgiKTsKCQlhd2FpdCB1cGRhdGVT
ZXNzaW9uU3RvcmUoc3RvcmVQYXRoLCAoc3RvcmUpID0+IHsKCQkJY29uc3QgZW50cnlUb1VwZGF0
ZSA9IHN0b3JlW2NvbXBhY3RUYXJnZXQucHJpbWFyeUtleV07CgkJCWlmICghZW50cnlUb1VwZGF0
ZSkgcmV0dXJuOwoJCQlkZWxldGUgZW50cnlUb1VwZGF0ZS5pbnB1dFRva2VuczsKCQkJZGVsZXRl
IGVudHJ5VG9VcGRhdGUub3V0cHV0VG9rZW5zOwoJCQlkZWxldGUgZW50cnlUb1VwZGF0ZS50b3Rh
bFRva2VuczsKCQkJZGVsZXRlIGVudHJ5VG9VcGRhdGUudG90YWxUb2tlbnNGcmVzaDsKCQkJZW50
cnlUb1VwZGF0ZS51cGRhdGVkQXQgPSBEYXRlLm5vdygpOwoJCX0pOwoJCXJlc3BvbmQodHJ1ZSwg
ewoJCQlvazogdHJ1ZSwKCQkJa2V5OiB0YXJnZXQuY2Fub25pY2FsS2V5LAoJCQljb21wYWN0ZWQ6
IHRydWUsCgkJCWFyY2hpdmVkLAoJCQlrZXB0OiBrZXB0TGluZXMubGVuZ3RoCgkJfSwgdm9pZCAw
KTsKCX0KfTsKLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvZ2F0ZXdheS9zZXJ2ZXItbWV0aG9k
cy9za2lsbHMudHMKZnVuY3Rpb24gY29sbGVjdFNraWxsQmlucyhlbnRyaWVzKSB7Cgljb25zdCBi
aW5zID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKCWZvciAoY29uc3QgZW50cnkgb2YgZW50
cmllcykgewoJCWNvbnN0IHJlcXVpcmVkID0gZW50cnkubWV0YWRhdGE/LnJlcXVpcmVzPy5iaW5z
ID8/IFtdOwoJCWNvbnN0IGFueUJpbnMgPSBlbnRyeS5tZXRhZGF0YT8ucmVxdWlyZXM/LmFueUJp
bnMgPz8gW107CgkJY29uc3QgaW5zdGFsbCA9IGVudHJ5Lm1ldGFkYXRhPy5pbnN0YWxsID8/IFtd
OwoJCWZvciAoY29uc3QgYmluIG9mIHJlcXVpcmVkKSB7CgkJCWNvbnN0IHRyaW1tZWQgPSBiaW4u
dHJpbSgpOwoJCQlpZiAodHJpbW1lZCkgYmlucy5hZGQodHJpbW1lZCk7CgkJfQoJCWZvciAoY29u
c3QgYmluIG9mIGFueUJpbnMpIHsKCQkJY29uc3QgdHJpbW1lZCA9IGJpbi50cmltKCk7CgkJCWlm
ICh0cmltbWVkKSBiaW5zLmFkZCh0cmltbWVkKTsKCQl9CgkJZm9yIChjb25zdCBzcGVjIG9mIGlu
c3RhbGwpIHsKCQkJY29uc3Qgc3BlY0JpbnMgPSBzcGVjPy5iaW5zID8/IFtdOwoJCQlmb3IgKGNv
bnN0IGJpbiBvZiBzcGVjQmlucykgewoJCQkJY29uc3QgdHJpbW1lZCA9IFN0cmluZyhiaW4pLnRy
aW0oKTsKCQkJCWlmICh0cmltbWVkKSBiaW5zLmFkZCh0cmltbWVkKTsKCQkJfQoJCX0KCX0KCXJl
dHVybiBbLi4uYmluc10udG9Tb3J0ZWQoKTsKfQpjb25zdCBza2lsbHNIYW5kbGVycyA9IHsKCSJz
a2lsbHMuc3RhdHVzIjogKHsgcGFyYW1zLCByZXNwb25kIH0pID0+IHsKCQlpZiAoIXZhbGlkYXRl
U2tpbGxzU3RhdHVzUGFyYW1zKHBhcmFtcykpIHsKCQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBl
cnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCBgaW52YWxpZCBza2lsbHMuc3Rh
dHVzIHBhcmFtczogJHtmb3JtYXRWYWxpZGF0aW9uRXJyb3JzKHZhbGlkYXRlU2tpbGxzU3RhdHVz
UGFyYW1zLmVycm9ycyl9YCkpOwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0IGNmZyA9IGxvYWRDb25m
aWcoKTsKCQljb25zdCBhZ2VudElkUmF3ID0gdHlwZW9mIHBhcmFtcz8uYWdlbnRJZCA9PT0gInN0
cmluZyIgPyBwYXJhbXMuYWdlbnRJZC50cmltKCkgOiAiIjsKCQljb25zdCBhZ2VudElkID0gYWdl
bnRJZFJhdyA/IG5vcm1hbGl6ZUFnZW50SWQoYWdlbnRJZFJhdykgOiByZXNvbHZlRGVmYXVsdEFn
ZW50SWQoY2ZnKTsKCQlpZiAoYWdlbnRJZFJhdykgewoJCQlpZiAoIWxpc3RBZ2VudElkcyhjZmcp
LmluY2x1ZGVzKGFnZW50SWQpKSB7CgkJCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hh
cGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsIGB1bmtub3duIGFnZW50IGlkICIke2FnZW50
SWRSYXd9ImApKTsKCQkJCXJldHVybjsKCQkJfQoJCX0KCQlyZXNwb25kKHRydWUsIGJ1aWxkV29y
a3NwYWNlU2tpbGxTdGF0dXMocmVzb2x2ZUFnZW50V29ya3NwYWNlRGlyKGNmZywgYWdlbnRJZCks
IHsKCQkJY29uZmlnOiBjZmcsCgkJCWVsaWdpYmlsaXR5OiB7IHJlbW90ZTogZ2V0UmVtb3RlU2tp
bGxFbGlnaWJpbGl0eSgpIH0KCQl9KSwgdm9pZCAwKTsKCX0sCgkic2tpbGxzLmJpbnMiOiAoeyBw
YXJhbXMsIHJlc3BvbmQgfSkgPT4gewoJCWlmICghdmFsaWRhdGVTa2lsbHNCaW5zUGFyYW1zKHBh
cmFtcykpIHsKCQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMu
SU5WQUxJRF9SRVFVRVNULCBgaW52YWxpZCBza2lsbHMuYmlucyBwYXJhbXM6ICR7Zm9ybWF0VmFs
aWRhdGlvbkVycm9ycyh2YWxpZGF0ZVNraWxsc0JpbnNQYXJhbXMuZXJyb3JzKX1gKSk7CgkJCXJl
dHVybjsKCQl9CgkJY29uc3QgY2ZnID0gbG9hZENvbmZpZygpOwoJCWNvbnN0IHdvcmtzcGFjZURp
cnMgPSBsaXN0QWdlbnRXb3Jrc3BhY2VEaXJzKGNmZyk7CgkJY29uc3QgYmlucyA9IC8qIEBfX1BV
UkVfXyAqLyBuZXcgU2V0KCk7CgkJZm9yIChjb25zdCB3b3Jrc3BhY2VEaXIgb2Ygd29ya3NwYWNl
RGlycykgewoJCQljb25zdCBlbnRyaWVzID0gbG9hZFdvcmtzcGFjZVNraWxsRW50cmllcyh3b3Jr
c3BhY2VEaXIsIHsgY29uZmlnOiBjZmcgfSk7CgkJCWZvciAoY29uc3QgYmluIG9mIGNvbGxlY3RT
a2lsbEJpbnMoZW50cmllcykpIGJpbnMuYWRkKGJpbik7CgkJfQoJCXJlc3BvbmQodHJ1ZSwgeyBi
aW5zOiBbLi4uYmluc10udG9Tb3J0ZWQoKSB9LCB2b2lkIDApOwoJfSwKCSJza2lsbHMuaW5zdGFs
bCI6IGFzeW5jICh7IHBhcmFtcywgcmVzcG9uZCB9KSA9PiB7CgkJaWYgKCF2YWxpZGF0ZVNraWxs
c0luc3RhbGxQYXJhbXMocGFyYW1zKSkgewoJCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9y
U2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsIGBpbnZhbGlkIHNraWxscy5pbnN0YWxs
IHBhcmFtczogJHtmb3JtYXRWYWxpZGF0aW9uRXJyb3JzKHZhbGlkYXRlU2tpbGxzSW5zdGFsbFBh
cmFtcy5lcnJvcnMpfWApKTsKCQkJcmV0dXJuOwoJCX0KCQljb25zdCBwID0gcGFyYW1zOwoJCWNv
bnN0IGNmZyA9IGxvYWRDb25maWcoKTsKCQljb25zdCByZXN1bHQgPSBhd2FpdCBpbnN0YWxsU2tp
bGwoewoJCQl3b3Jrc3BhY2VEaXI6IHJlc29sdmVBZ2VudFdvcmtzcGFjZURpcihjZmcsIHJlc29s
dmVEZWZhdWx0QWdlbnRJZChjZmcpKSwKCQkJc2tpbGxOYW1lOiBwLm5hbWUsCgkJCWluc3RhbGxJ
ZDogcC5pbnN0YWxsSWQsCgkJCXRpbWVvdXRNczogcC50aW1lb3V0TXMsCgkJCWNvbmZpZzogY2Zn
CgkJfSk7CgkJcmVzcG9uZChyZXN1bHQub2ssIHJlc3VsdCwgcmVzdWx0Lm9rID8gdm9pZCAwIDog
ZXJyb3JTaGFwZShFcnJvckNvZGVzLlVOQVZBSUxBQkxFLCByZXN1bHQubWVzc2FnZSkpOwoJfSwK
CSJza2lsbHMudXBkYXRlIjogYXN5bmMgKHsgcGFyYW1zLCByZXNwb25kIH0pID0+IHsKCQlpZiAo
IXZhbGlkYXRlU2tpbGxzVXBkYXRlUGFyYW1zKHBhcmFtcykpIHsKCQkJcmVzcG9uZChmYWxzZSwg
dm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCBgaW52YWxpZCBz
a2lsbHMudXBkYXRlIHBhcmFtczogJHtmb3JtYXRWYWxpZGF0aW9uRXJyb3JzKHZhbGlkYXRlU2tp
bGxzVXBkYXRlUGFyYW1zLmVycm9ycyl9YCkpOwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0IHAgPSBw
YXJhbXM7CgkJY29uc3QgY2ZnID0gbG9hZENvbmZpZygpOwoJCWNvbnN0IHNraWxscyA9IGNmZy5z
a2lsbHMgPyB7IC4uLmNmZy5za2lsbHMgfSA6IHt9OwoJCWNvbnN0IGVudHJpZXMgPSBza2lsbHMu
ZW50cmllcyA/IHsgLi4uc2tpbGxzLmVudHJpZXMgfSA6IHt9OwoJCWNvbnN0IGN1cnJlbnQgPSBl
bnRyaWVzW3Auc2tpbGxLZXldID8geyAuLi5lbnRyaWVzW3Auc2tpbGxLZXldIH0gOiB7fTsKCQlp
ZiAodHlwZW9mIHAuZW5hYmxlZCA9PT0gImJvb2xlYW4iKSBjdXJyZW50LmVuYWJsZWQgPSBwLmVu
YWJsZWQ7CgkJaWYgKHR5cGVvZiBwLmFwaUtleSA9PT0gInN0cmluZyIpIHsKCQkJY29uc3QgdHJp
bW1lZCA9IG5vcm1hbGl6ZVNlY3JldElucHV0KHAuYXBpS2V5KTsKCQkJaWYgKHRyaW1tZWQpIGN1
cnJlbnQuYXBpS2V5ID0gdHJpbW1lZDsKCQkJZWxzZSBkZWxldGUgY3VycmVudC5hcGlLZXk7CgkJ
fQoJCWlmIChwLmVudiAmJiB0eXBlb2YgcC5lbnYgPT09ICJvYmplY3QiKSB7CgkJCWNvbnN0IG5l
eHRFbnYgPSBjdXJyZW50LmVudiA/IHsgLi4uY3VycmVudC5lbnYgfSA6IHt9OwoJCQlmb3IgKGNv
bnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwLmVudikpIHsKCQkJCWNvbnN0IHRy
aW1tZWRLZXkgPSBrZXkudHJpbSgpOwoJCQkJaWYgKCF0cmltbWVkS2V5KSBjb250aW51ZTsKCQkJ
CWNvbnN0IHRyaW1tZWRWYWwgPSB2YWx1ZS50cmltKCk7CgkJCQlpZiAoIXRyaW1tZWRWYWwpIGRl
bGV0ZSBuZXh0RW52W3RyaW1tZWRLZXldOwoJCQkJZWxzZSBuZXh0RW52W3RyaW1tZWRLZXldID0g
dHJpbW1lZFZhbDsKCQkJfQoJCQljdXJyZW50LmVudiA9IG5leHRFbnY7CgkJfQoJCWVudHJpZXNb
cC5za2lsbEtleV0gPSBjdXJyZW50OwoJCXNraWxscy5lbnRyaWVzID0gZW50cmllczsKCQlhd2Fp
dCB3cml0ZUNvbmZpZ0ZpbGUoewoJCQkuLi5jZmcsCgkJCXNraWxscwoJCX0pOwoJCXJlc3BvbmQo
dHJ1ZSwgewoJCQlvazogdHJ1ZSwKCQkJc2tpbGxLZXk6IHAuc2tpbGxLZXksCgkJCWNvbmZpZzog
Y3VycmVudAoJCX0sIHZvaWQgMCk7Cgl9Cn07Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dh
dGV3YXkvc2VydmVyL3ByZXNlbmNlLWV2ZW50cy50cwpmdW5jdGlvbiBicm9hZGNhc3RQcmVzZW5j
ZVNuYXBzaG90KHBhcmFtcykgewoJY29uc3QgcHJlc2VuY2VWZXJzaW9uID0gcGFyYW1zLmluY3Jl
bWVudFByZXNlbmNlVmVyc2lvbigpOwoJcGFyYW1zLmJyb2FkY2FzdCgicHJlc2VuY2UiLCB7IHBy
ZXNlbmNlOiBsaXN0U3lzdGVtUHJlc2VuY2UoKSB9LCB7CgkJZHJvcElmU2xvdzogdHJ1ZSwKCQlz
dGF0ZVZlcnNpb246IHsKCQkJcHJlc2VuY2U6IHByZXNlbmNlVmVyc2lvbiwKCQkJaGVhbHRoOiBw
YXJhbXMuZ2V0SGVhbHRoVmVyc2lvbigpCgkJfQoJfSk7CglyZXR1cm4gcHJlc2VuY2VWZXJzaW9u
Owp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dhdGV3YXkvc2VydmVyLW1ldGhvZHMvc3lz
dGVtLnRzCmNvbnN0IHN5c3RlbUhhbmRsZXJzID0gewoJImdhdGV3YXkuaWRlbnRpdHkuZ2V0Ijog
KHsgcmVzcG9uZCB9KSA9PiB7CgkJY29uc3QgaWRlbnRpdHkgPSBsb2FkT3JDcmVhdGVEZXZpY2VJ
ZGVudGl0eSgpOwoJCXJlc3BvbmQodHJ1ZSwgewoJCQlkZXZpY2VJZDogaWRlbnRpdHkuZGV2aWNl
SWQsCgkJCXB1YmxpY0tleTogcHVibGljS2V5UmF3QmFzZTY0VXJsRnJvbVBlbShpZGVudGl0eS5w
dWJsaWNLZXlQZW0pCgkJfSwgdm9pZCAwKTsKCX0sCgkibGFzdC1oZWFydGJlYXQiOiAoeyByZXNw
b25kIH0pID0+IHsKCQlyZXNwb25kKHRydWUsIGdldExhc3RIZWFydGJlYXRFdmVudCgpLCB2b2lk
IDApOwoJfSwKCSJzZXQtaGVhcnRiZWF0cyI6ICh7IHBhcmFtcywgcmVzcG9uZCB9KSA9PiB7CgkJ
Y29uc3QgZW5hYmxlZCA9IHBhcmFtcy5lbmFibGVkOwoJCWlmICh0eXBlb2YgZW5hYmxlZCAhPT0g
ImJvb2xlYW4iKSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNv
ZGVzLklOVkFMSURfUkVRVUVTVCwgImludmFsaWQgc2V0LWhlYXJ0YmVhdHMgcGFyYW1zOiBlbmFi
bGVkIChib29sZWFuKSByZXF1aXJlZCIpKTsKCQkJcmV0dXJuOwoJCX0KCQlzZXRIZWFydGJlYXRz
RW5hYmxlZChlbmFibGVkKTsKCQlyZXNwb25kKHRydWUsIHsKCQkJb2s6IHRydWUsCgkJCWVuYWJs
ZWQKCQl9LCB2b2lkIDApOwoJfSwKCSJzeXN0ZW0tcHJlc2VuY2UiOiAoeyByZXNwb25kIH0pID0+
IHsKCQlyZXNwb25kKHRydWUsIGxpc3RTeXN0ZW1QcmVzZW5jZSgpLCB2b2lkIDApOwoJfSwKCSJz
eXN0ZW0tZXZlbnQiOiAoeyBwYXJhbXMsIHJlc3BvbmQsIGNvbnRleHQgfSkgPT4gewoJCWNvbnN0
IHRleHQgPSB0eXBlb2YgcGFyYW1zLnRleHQgPT09ICJzdHJpbmciID8gcGFyYW1zLnRleHQudHJp
bSgpIDogIiI7CgkJaWYgKCF0ZXh0KSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JT
aGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgInRleHQgcmVxdWlyZWQiKSk7CgkJCXJl
dHVybjsKCQl9CgkJY29uc3Qgc2Vzc2lvbktleSA9IHJlc29sdmVNYWluU2Vzc2lvbktleUZyb21D
b25maWcoKTsKCQljb25zdCBkZXZpY2VJZCA9IHR5cGVvZiBwYXJhbXMuZGV2aWNlSWQgPT09ICJz
dHJpbmciID8gcGFyYW1zLmRldmljZUlkIDogdm9pZCAwOwoJCWNvbnN0IGluc3RhbmNlSWQgPSB0
eXBlb2YgcGFyYW1zLmluc3RhbmNlSWQgPT09ICJzdHJpbmciID8gcGFyYW1zLmluc3RhbmNlSWQg
OiB2b2lkIDA7CgkJY29uc3QgaG9zdCA9IHR5cGVvZiBwYXJhbXMuaG9zdCA9PT0gInN0cmluZyIg
PyBwYXJhbXMuaG9zdCA6IHZvaWQgMDsKCQljb25zdCBpcCA9IHR5cGVvZiBwYXJhbXMuaXAgPT09
ICJzdHJpbmciID8gcGFyYW1zLmlwIDogdm9pZCAwOwoJCWNvbnN0IG1vZGUgPSB0eXBlb2YgcGFy
YW1zLm1vZGUgPT09ICJzdHJpbmciID8gcGFyYW1zLm1vZGUgOiB2b2lkIDA7CgkJY29uc3QgdmVy
c2lvbiA9IHR5cGVvZiBwYXJhbXMudmVyc2lvbiA9PT0gInN0cmluZyIgPyBwYXJhbXMudmVyc2lv
biA6IHZvaWQgMDsKCQljb25zdCBwbGF0Zm9ybSA9IHR5cGVvZiBwYXJhbXMucGxhdGZvcm0gPT09
ICJzdHJpbmciID8gcGFyYW1zLnBsYXRmb3JtIDogdm9pZCAwOwoJCWNvbnN0IGRldmljZUZhbWls
eSA9IHR5cGVvZiBwYXJhbXMuZGV2aWNlRmFtaWx5ID09PSAic3RyaW5nIiA/IHBhcmFtcy5kZXZp
Y2VGYW1pbHkgOiB2b2lkIDA7CgkJY29uc3QgbW9kZWxJZGVudGlmaWVyID0gdHlwZW9mIHBhcmFt
cy5tb2RlbElkZW50aWZpZXIgPT09ICJzdHJpbmciID8gcGFyYW1zLm1vZGVsSWRlbnRpZmllciA6
IHZvaWQgMDsKCQljb25zdCBsYXN0SW5wdXRTZWNvbmRzID0gdHlwZW9mIHBhcmFtcy5sYXN0SW5w
dXRTZWNvbmRzID09PSAibnVtYmVyIiAmJiBOdW1iZXIuaXNGaW5pdGUocGFyYW1zLmxhc3RJbnB1
dFNlY29uZHMpID8gcGFyYW1zLmxhc3RJbnB1dFNlY29uZHMgOiB2b2lkIDA7CgkJY29uc3QgcmVh
c29uID0gdHlwZW9mIHBhcmFtcy5yZWFzb24gPT09ICJzdHJpbmciID8gcGFyYW1zLnJlYXNvbiA6
IHZvaWQgMDsKCQljb25zdCBwcmVzZW5jZVVwZGF0ZSA9IHVwZGF0ZVN5c3RlbVByZXNlbmNlKHsK
CQkJdGV4dCwKCQkJZGV2aWNlSWQsCgkJCWluc3RhbmNlSWQsCgkJCWhvc3QsCgkJCWlwLAoJCQlt
b2RlLAoJCQl2ZXJzaW9uLAoJCQlwbGF0Zm9ybSwKCQkJZGV2aWNlRmFtaWx5LAoJCQltb2RlbElk
ZW50aWZpZXIsCgkJCWxhc3RJbnB1dFNlY29uZHMsCgkJCXJlYXNvbiwKCQkJcm9sZXM6IEFycmF5
LmlzQXJyYXkocGFyYW1zLnJvbGVzKSAmJiBwYXJhbXMucm9sZXMuZXZlcnkoKHQpID0+IHR5cGVv
ZiB0ID09PSAic3RyaW5nIikgPyBwYXJhbXMucm9sZXMgOiB2b2lkIDAsCgkJCXNjb3BlczogQXJy
YXkuaXNBcnJheShwYXJhbXMuc2NvcGVzKSAmJiBwYXJhbXMuc2NvcGVzLmV2ZXJ5KCh0KSA9PiB0
eXBlb2YgdCA9PT0gInN0cmluZyIpID8gcGFyYW1zLnNjb3BlcyA6IHZvaWQgMCwKCQkJdGFnczog
QXJyYXkuaXNBcnJheShwYXJhbXMudGFncykgJiYgcGFyYW1zLnRhZ3MuZXZlcnkoKHQpID0+IHR5
cGVvZiB0ID09PSAic3RyaW5nIikgPyBwYXJhbXMudGFncyA6IHZvaWQgMAoJCX0pOwoJCWlmICh0
ZXh0LnN0YXJ0c1dpdGgoIk5vZGU6IikpIHsKCQkJY29uc3QgbmV4dCA9IHByZXNlbmNlVXBkYXRl
Lm5leHQ7CgkJCWNvbnN0IGNoYW5nZWQgPSBuZXcgU2V0KHByZXNlbmNlVXBkYXRlLmNoYW5nZWRL
ZXlzKTsKCQkJY29uc3QgcmVhc29uVmFsdWUgPSBuZXh0LnJlYXNvbiA/PyByZWFzb247CgkJCWNv
bnN0IG5vcm1hbGl6ZWRSZWFzb24gPSAocmVhc29uVmFsdWUgPz8gIiIpLnRvTG93ZXJDYXNlKCk7
CgkJCWNvbnN0IGlnbm9yZVJlYXNvbiA9IG5vcm1hbGl6ZWRSZWFzb24uc3RhcnRzV2l0aCgicGVy
aW9kaWMiKSB8fCBub3JtYWxpemVkUmVhc29uID09PSAiaGVhcnRiZWF0IjsKCQkJY29uc3QgaG9z
dENoYW5nZWQgPSBjaGFuZ2VkLmhhcygiaG9zdCIpOwoJCQljb25zdCBpcENoYW5nZWQgPSBjaGFu
Z2VkLmhhcygiaXAiKTsKCQkJY29uc3QgdmVyc2lvbkNoYW5nZWQgPSBjaGFuZ2VkLmhhcygidmVy
c2lvbiIpOwoJCQljb25zdCBtb2RlQ2hhbmdlZCA9IGNoYW5nZWQuaGFzKCJtb2RlIik7CgkJCWNv
bnN0IHJlYXNvbkNoYW5nZWQgPSBjaGFuZ2VkLmhhcygicmVhc29uIikgJiYgIWlnbm9yZVJlYXNv
bjsKCQkJaWYgKGhvc3RDaGFuZ2VkIHx8IGlwQ2hhbmdlZCB8fCB2ZXJzaW9uQ2hhbmdlZCB8fCBt
b2RlQ2hhbmdlZCB8fCByZWFzb25DaGFuZ2VkKSB7CgkJCQljb25zdCBjb250ZXh0Q2hhbmdlZCA9
IGlzU3lzdGVtRXZlbnRDb250ZXh0Q2hhbmdlZChzZXNzaW9uS2V5LCBwcmVzZW5jZVVwZGF0ZS5r
ZXkpOwoJCQkJY29uc3QgcGFydHMgPSBbXTsKCQkJCWlmIChjb250ZXh0Q2hhbmdlZCB8fCBob3N0
Q2hhbmdlZCB8fCBpcENoYW5nZWQpIHsKCQkJCQljb25zdCBob3N0TGFiZWwgPSBuZXh0Lmhvc3Q/
LnRyaW0oKSB8fCAiVW5rbm93biI7CgkJCQkJY29uc3QgaXBMYWJlbCA9IG5leHQuaXA/LnRyaW0o
KTsKCQkJCQlwYXJ0cy5wdXNoKGBOb2RlOiAke2hvc3RMYWJlbH0ke2lwTGFiZWwgPyBgICgke2lw
TGFiZWx9KWAgOiAiIn1gKTsKCQkJCX0KCQkJCWlmICh2ZXJzaW9uQ2hhbmdlZCkgcGFydHMucHVz
aChgYXBwICR7bmV4dC52ZXJzaW9uPy50cmltKCkgfHwgInVua25vd24ifWApOwoJCQkJaWYgKG1v
ZGVDaGFuZ2VkKSBwYXJ0cy5wdXNoKGBtb2RlICR7bmV4dC5tb2RlPy50cmltKCkgfHwgInVua25v
d24ifWApOwoJCQkJaWYgKHJlYXNvbkNoYW5nZWQpIHBhcnRzLnB1c2goYHJlYXNvbiAke3JlYXNv
blZhbHVlPy50cmltKCkgfHwgImV2ZW50In1gKTsKCQkJCWNvbnN0IGRlbHRhVGV4dCA9IHBhcnRz
LmpvaW4oIiDCtyAiKTsKCQkJCWlmIChkZWx0YVRleHQpIGVucXVldWVTeXN0ZW1FdmVudChkZWx0
YVRleHQsIHsKCQkJCQlzZXNzaW9uS2V5LAoJCQkJCWNvbnRleHRLZXk6IHByZXNlbmNlVXBkYXRl
LmtleQoJCQkJfSk7CgkJCX0KCQl9IGVsc2UgZW5xdWV1ZVN5c3RlbUV2ZW50KHRleHQsIHsgc2Vz
c2lvbktleSB9KTsKCQlicm9hZGNhc3RQcmVzZW5jZVNuYXBzaG90KHsKCQkJYnJvYWRjYXN0OiBj
b250ZXh0LmJyb2FkY2FzdCwKCQkJaW5jcmVtZW50UHJlc2VuY2VWZXJzaW9uOiBjb250ZXh0Lmlu
Y3JlbWVudFByZXNlbmNlVmVyc2lvbiwKCQkJZ2V0SGVhbHRoVmVyc2lvbjogY29udGV4dC5nZXRI
ZWFsdGhWZXJzaW9uCgkJfSk7CgkJcmVzcG9uZCh0cnVlLCB7IG9rOiB0cnVlIH0sIHZvaWQgMCk7
Cgl9Cn07Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dhdGV3YXkvc2VydmVyLW1ldGhvZHMv
dGFsay50cwpjb25zdCBBRE1JTl9TQ09QRSQxID0gIm9wZXJhdG9yLmFkbWluIjsKY29uc3QgVEFM
S19TRUNSRVRTX1NDT1BFID0gIm9wZXJhdG9yLnRhbGsuc2VjcmV0cyI7CmZ1bmN0aW9uIGNhblJl
YWRUYWxrU2VjcmV0cyhjbGllbnQpIHsKCWNvbnN0IHNjb3BlcyA9IEFycmF5LmlzQXJyYXkoY2xp
ZW50Py5jb25uZWN0Py5zY29wZXMpID8gY2xpZW50LmNvbm5lY3Quc2NvcGVzIDogW107CglyZXR1
cm4gc2NvcGVzLmluY2x1ZGVzKEFETUlOX1NDT1BFJDEpIHx8IHNjb3Blcy5pbmNsdWRlcyhUQUxL
X1NFQ1JFVFNfU0NPUEUpOwp9CmNvbnN0IHRhbGtIYW5kbGVycyA9IHsKCSJ0YWxrLmNvbmZpZyI6
IGFzeW5jICh7IHBhcmFtcywgcmVzcG9uZCwgY2xpZW50IH0pID0+IHsKCQlpZiAoIXZhbGlkYXRl
VGFsa0NvbmZpZ1BhcmFtcyhwYXJhbXMpKSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJy
b3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgYGludmFsaWQgdGFsay5jb25maWcg
cGFyYW1zOiAke2Zvcm1hdFZhbGlkYXRpb25FcnJvcnModmFsaWRhdGVUYWxrQ29uZmlnUGFyYW1z
LmVycm9ycyl9YCkpOwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0IGluY2x1ZGVTZWNyZXRzID0gQm9v
bGVhbihwYXJhbXMuaW5jbHVkZVNlY3JldHMpOwoJCWlmIChpbmNsdWRlU2VjcmV0cyAmJiAhY2Fu
UmVhZFRhbGtTZWNyZXRzKGNsaWVudCkpIHsKCQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJv
clNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCBgbWlzc2luZyBzY29wZTogJHtUQUxL
X1NFQ1JFVFNfU0NPUEV9YCkpOwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0IHNuYXBzaG90ID0gYXdh
aXQgcmVhZENvbmZpZ0ZpbGVTbmFwc2hvdCgpOwoJCWNvbnN0IGNvbmZpZ1BheWxvYWQgPSB7fTsK
CQljb25zdCB0YWxrID0gYnVpbGRUYWxrQ29uZmlnUmVzcG9uc2UoaW5jbHVkZVNlY3JldHMgPyBz
bmFwc2hvdC5jb25maWcudGFsayA6IHJlZGFjdENvbmZpZ09iamVjdChzbmFwc2hvdC5jb25maWcu
dGFsaykpOwoJCWlmICh0YWxrKSBjb25maWdQYXlsb2FkLnRhbGsgPSB0YWxrOwoJCWNvbnN0IHNl
c3Npb25NYWluS2V5ID0gc25hcHNob3QuY29uZmlnLnNlc3Npb24/Lm1haW5LZXk7CgkJaWYgKHR5
cGVvZiBzZXNzaW9uTWFpbktleSA9PT0gInN0cmluZyIpIGNvbmZpZ1BheWxvYWQuc2Vzc2lvbiA9
IHsgbWFpbktleTogc2Vzc2lvbk1haW5LZXkgfTsKCQljb25zdCBzZWFtQ29sb3IgPSBzbmFwc2hv
dC5jb25maWcudWk/LnNlYW1Db2xvcjsKCQlpZiAodHlwZW9mIHNlYW1Db2xvciA9PT0gInN0cmlu
ZyIpIGNvbmZpZ1BheWxvYWQudWkgPSB7IHNlYW1Db2xvciB9OwoJCXJlc3BvbmQodHJ1ZSwgeyBj
b25maWc6IGNvbmZpZ1BheWxvYWQgfSwgdm9pZCAwKTsKCX0sCgkidGFsay5tb2RlIjogKHsgcGFy
YW1zLCByZXNwb25kLCBjb250ZXh0LCBjbGllbnQsIGlzV2ViY2hhdENvbm5lY3QgfSkgPT4gewoJ
CWlmIChjbGllbnQgJiYgaXNXZWJjaGF0Q29ubmVjdChjbGllbnQuY29ubmVjdCkgJiYgIWNvbnRl
eHQuaGFzQ29ubmVjdGVkTW9iaWxlTm9kZSgpKSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwg
ZXJyb3JTaGFwZShFcnJvckNvZGVzLlVOQVZBSUxBQkxFLCAidGFsayBkaXNhYmxlZDogbm8gY29u
bmVjdGVkIGlPUy9BbmRyb2lkIG5vZGVzIikpOwoJCQlyZXR1cm47CgkJfQoJCWlmICghdmFsaWRh
dGVUYWxrTW9kZVBhcmFtcyhwYXJhbXMpKSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJy
b3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgYGludmFsaWQgdGFsay5tb2RlIHBh
cmFtczogJHtmb3JtYXRWYWxpZGF0aW9uRXJyb3JzKHZhbGlkYXRlVGFsa01vZGVQYXJhbXMuZXJy
b3JzKX1gKSk7CgkJCXJldHVybjsKCQl9CgkJY29uc3QgcGF5bG9hZCA9IHsKCQkJZW5hYmxlZDog
cGFyYW1zLmVuYWJsZWQsCgkJCXBoYXNlOiBwYXJhbXMucGhhc2UgPz8gbnVsbCwKCQkJdHM6IERh
dGUubm93KCkKCQl9OwoJCWNvbnRleHQuYnJvYWRjYXN0KCJ0YWxrLm1vZGUiLCBwYXlsb2FkLCB7
IGRyb3BJZlNsb3c6IHRydWUgfSk7CgkJcmVzcG9uZCh0cnVlLCBwYXlsb2FkLCB2b2lkIDApOwoJ
fQp9OwovLyNlbmRyZWdpb24KLy8jcmVnaW9uIHNyYy9nYXRld2F5L3NlcnZlci1tZXRob2RzL3Rv
b2xzLWNhdGFsb2cudHMKZnVuY3Rpb24gcmVzb2x2ZUFnZW50SWRPclJlc3BvbmRFcnJvcihyYXdB
Z2VudElkLCByZXNwb25kKSB7Cgljb25zdCBjZmcgPSBsb2FkQ29uZmlnKCk7Cgljb25zdCBrbm93
bkFnZW50cyA9IGxpc3RBZ2VudElkcyhjZmcpOwoJY29uc3QgcmVxdWVzdGVkQWdlbnRJZCA9IHR5
cGVvZiByYXdBZ2VudElkID09PSAic3RyaW5nIiA/IHJhd0FnZW50SWQudHJpbSgpIDogIiI7Cglj
b25zdCBhZ2VudElkID0gcmVxdWVzdGVkQWdlbnRJZCB8fCByZXNvbHZlRGVmYXVsdEFnZW50SWQo
Y2ZnKTsKCWlmIChyZXF1ZXN0ZWRBZ2VudElkICYmICFrbm93bkFnZW50cy5pbmNsdWRlcyhhZ2Vu
dElkKSkgewoJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLklO
VkFMSURfUkVRVUVTVCwgYHVua25vd24gYWdlbnQgaWQgIiR7cmVxdWVzdGVkQWdlbnRJZH0iYCkp
OwoJCXJldHVybiBudWxsOwoJfQoJcmV0dXJuIHsKCQljZmcsCgkJYWdlbnRJZAoJfTsKfQpmdW5j
dGlvbiBidWlsZENvcmVHcm91cHMoKSB7CglyZXR1cm4gbGlzdENvcmVUb29sU2VjdGlvbnMoKS5t
YXAoKHNlY3Rpb24pID0+ICh7CgkJaWQ6IHNlY3Rpb24uaWQsCgkJbGFiZWw6IHNlY3Rpb24ubGFi
ZWwsCgkJc291cmNlOiAiY29yZSIsCgkJdG9vbHM6IHNlY3Rpb24udG9vbHMubWFwKCh0b29sKSA9
PiAoewoJCQlpZDogdG9vbC5pZCwKCQkJbGFiZWw6IHRvb2wubGFiZWwsCgkJCWRlc2NyaXB0aW9u
OiB0b29sLmRlc2NyaXB0aW9uLAoJCQlzb3VyY2U6ICJjb3JlIiwKCQkJZGVmYXVsdFByb2ZpbGVz
OiByZXNvbHZlQ29yZVRvb2xQcm9maWxlcyh0b29sLmlkKQoJCX0pKQoJfSkpOwp9CmZ1bmN0aW9u
IGJ1aWxkUGx1Z2luR3JvdXBzKHBhcmFtcykgewoJY29uc3Qgd29ya3NwYWNlRGlyID0gcmVzb2x2
ZUFnZW50V29ya3NwYWNlRGlyKHBhcmFtcy5jZmcsIHBhcmFtcy5hZ2VudElkKTsKCWNvbnN0IGFn
ZW50RGlyID0gcmVzb2x2ZUFnZW50RGlyKHBhcmFtcy5jZmcsIHBhcmFtcy5hZ2VudElkKTsKCWNv
bnN0IHBsdWdpblRvb2xzID0gcmVzb2x2ZVBsdWdpblRvb2xzKHsKCQljb250ZXh0OiB7CgkJCWNv
bmZpZzogcGFyYW1zLmNmZywKCQkJd29ya3NwYWNlRGlyLAoJCQlhZ2VudERpciwKCQkJYWdlbnRJ
ZDogcGFyYW1zLmFnZW50SWQKCQl9LAoJCWV4aXN0aW5nVG9vbE5hbWVzOiBwYXJhbXMuZXhpc3Rp
bmdUb29sTmFtZXMsCgkJdG9vbEFsbG93bGlzdDogWyJncm91cDpwbHVnaW5zIl0sCgkJc3VwcHJl
c3NOYW1lQ29uZmxpY3RzOiB0cnVlCgl9KTsKCWNvbnN0IGdyb3VwcyA9IC8qIEBfX1BVUkVfXyAq
LyBuZXcgTWFwKCk7Cglmb3IgKGNvbnN0IHRvb2wgb2YgcGx1Z2luVG9vbHMpIHsKCQljb25zdCBt
ZXRhID0gZ2V0UGx1Z2luVG9vbE1ldGEodG9vbCk7CgkJY29uc3QgcGx1Z2luSWQgPSBtZXRhPy5w
bHVnaW5JZCA/PyAicGx1Z2luIjsKCQljb25zdCBncm91cElkID0gYHBsdWdpbjoke3BsdWdpbklk
fWA7CgkJY29uc3QgZXhpc3RpbmcgPSBncm91cHMuZ2V0KGdyb3VwSWQpID8/IHsKCQkJaWQ6IGdy
b3VwSWQsCgkJCWxhYmVsOiBwbHVnaW5JZCwKCQkJc291cmNlOiAicGx1Z2luIiwKCQkJcGx1Z2lu
SWQsCgkJCXRvb2xzOiBbXQoJCX07CgkJZXhpc3RpbmcudG9vbHMucHVzaCh7CgkJCWlkOiB0b29s
Lm5hbWUsCgkJCWxhYmVsOiB0eXBlb2YgdG9vbC5sYWJlbCA9PT0gInN0cmluZyIgJiYgdG9vbC5s
YWJlbC50cmltKCkgPyB0b29sLmxhYmVsLnRyaW0oKSA6IHRvb2wubmFtZSwKCQkJZGVzY3JpcHRp
b246IHR5cGVvZiB0b29sLmRlc2NyaXB0aW9uID09PSAic3RyaW5nIiAmJiB0b29sLmRlc2NyaXB0
aW9uLnRyaW0oKSA/IHRvb2wuZGVzY3JpcHRpb24udHJpbSgpIDogIlBsdWdpbiB0b29sIiwKCQkJ
c291cmNlOiAicGx1Z2luIiwKCQkJcGx1Z2luSWQsCgkJCW9wdGlvbmFsOiBtZXRhPy5vcHRpb25h
bCwKCQkJZGVmYXVsdFByb2ZpbGVzOiBbXQoJCX0pOwoJCWdyb3Vwcy5zZXQoZ3JvdXBJZCwgZXhp
c3RpbmcpOwoJfQoJcmV0dXJuIFsuLi5ncm91cHMudmFsdWVzKCldLm1hcCgoZ3JvdXApID0+ICh7
CgkJLi4uZ3JvdXAsCgkJdG9vbHM6IGdyb3VwLnRvb2xzLnRvU29ydGVkKChhLCBiKSA9PiBhLmlk
LmxvY2FsZUNvbXBhcmUoYi5pZCkpCgl9KSkudG9Tb3J0ZWQoKGEsIGIpID0+IGEubGFiZWwubG9j
YWxlQ29tcGFyZShiLmxhYmVsKSk7Cn0KY29uc3QgdG9vbHNDYXRhbG9nSGFuZGxlcnMgPSB7ICJ0
b29scy5jYXRhbG9nIjogKHsgcGFyYW1zLCByZXNwb25kIH0pID0+IHsKCWlmICghdmFsaWRhdGVU
b29sc0NhdGFsb2dQYXJhbXMocGFyYW1zKSkgewoJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJy
b3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgYGludmFsaWQgdG9vbHMuY2F0YWxv
ZyBwYXJhbXM6ICR7Zm9ybWF0VmFsaWRhdGlvbkVycm9ycyh2YWxpZGF0ZVRvb2xzQ2F0YWxvZ1Bh
cmFtcy5lcnJvcnMpfWApKTsKCQlyZXR1cm47Cgl9Cgljb25zdCByZXNvbHZlZCA9IHJlc29sdmVB
Z2VudElkT3JSZXNwb25kRXJyb3IocGFyYW1zLmFnZW50SWQsIHJlc3BvbmQpOwoJaWYgKCFyZXNv
bHZlZCkgcmV0dXJuOwoJY29uc3QgaW5jbHVkZVBsdWdpbnMgPSBwYXJhbXMuaW5jbHVkZVBsdWdp
bnMgIT09IGZhbHNlOwoJY29uc3QgZ3JvdXBzID0gYnVpbGRDb3JlR3JvdXBzKCk7CglpZiAoaW5j
bHVkZVBsdWdpbnMpIHsKCQljb25zdCBleGlzdGluZ1Rvb2xOYW1lcyA9IG5ldyBTZXQoZ3JvdXBz
LmZsYXRNYXAoKGdyb3VwKSA9PiBncm91cC50b29scy5tYXAoKHRvb2wpID0+IHRvb2wuaWQpKSk7
CgkJZ3JvdXBzLnB1c2goLi4uYnVpbGRQbHVnaW5Hcm91cHMoewoJCQljZmc6IHJlc29sdmVkLmNm
ZywKCQkJYWdlbnRJZDogcmVzb2x2ZWQuYWdlbnRJZCwKCQkJZXhpc3RpbmdUb29sTmFtZXMKCQl9
KSk7Cgl9CglyZXNwb25kKHRydWUsIHsKCQlhZ2VudElkOiByZXNvbHZlZC5hZ2VudElkLAoJCXBy
b2ZpbGVzOiBQUk9GSUxFX09QVElPTlMubWFwKChwcm9maWxlKSA9PiAoewoJCQlpZDogcHJvZmls
ZS5pZCwKCQkJbGFiZWw6IHByb2ZpbGUubGFiZWwKCQl9KSksCgkJZ3JvdXBzCgl9LCB2b2lkIDAp
Owp9IH07Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dhdGV3YXkvc2VydmVyLW1ldGhvZHMv
dHRzLnRzCmNvbnN0IHR0c0hhbmRsZXJzID0gewoJInR0cy5zdGF0dXMiOiBhc3luYyAoeyByZXNw
b25kIH0pID0+IHsKCQl0cnkgewoJCQljb25zdCBjb25maWcgPSByZXNvbHZlVHRzQ29uZmlnKGxv
YWRDb25maWcoKSk7CgkJCWNvbnN0IHByZWZzUGF0aCA9IHJlc29sdmVUdHNQcmVmc1BhdGgoY29u
ZmlnKTsKCQkJY29uc3QgcHJvdmlkZXIgPSBnZXRUdHNQcm92aWRlcihjb25maWcsIHByZWZzUGF0
aCk7CgkJCWNvbnN0IGF1dG9Nb2RlID0gcmVzb2x2ZVR0c0F1dG9Nb2RlKHsKCQkJCWNvbmZpZywK
CQkJCXByZWZzUGF0aAoJCQl9KTsKCQkJY29uc3QgZmFsbGJhY2tQcm92aWRlcnMgPSByZXNvbHZl
VHRzUHJvdmlkZXJPcmRlcihwcm92aWRlcikuc2xpY2UoMSkuZmlsdGVyKChjYW5kaWRhdGUpID0+
IGlzVHRzUHJvdmlkZXJDb25maWd1cmVkKGNvbmZpZywgY2FuZGlkYXRlKSk7CgkJCXJlc3BvbmQo
dHJ1ZSwgewoJCQkJZW5hYmxlZDogaXNUdHNFbmFibGVkKGNvbmZpZywgcHJlZnNQYXRoKSwKCQkJ
CWF1dG86IGF1dG9Nb2RlLAoJCQkJcHJvdmlkZXIsCgkJCQlmYWxsYmFja1Byb3ZpZGVyOiBmYWxs
YmFja1Byb3ZpZGVyc1swXSA/PyBudWxsLAoJCQkJZmFsbGJhY2tQcm92aWRlcnMsCgkJCQlwcmVm
c1BhdGgsCgkJCQloYXNPcGVuQUlLZXk6IEJvb2xlYW4ocmVzb2x2ZVR0c0FwaUtleShjb25maWcs
ICJvcGVuYWkiKSksCgkJCQloYXNFbGV2ZW5MYWJzS2V5OiBCb29sZWFuKHJlc29sdmVUdHNBcGlL
ZXkoY29uZmlnLCAiZWxldmVubGFicyIpKSwKCQkJCWVkZ2VFbmFibGVkOiBpc1R0c1Byb3ZpZGVy
Q29uZmlndXJlZChjb25maWcsICJlZGdlIikKCQkJfSk7CgkJfSBjYXRjaCAoZXJyKSB7CgkJCXJl
c3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLlVOQVZBSUxBQkxFLCBm
b3JtYXRGb3JMb2coZXJyKSkpOwoJCX0KCX0sCgkidHRzLmVuYWJsZSI6IGFzeW5jICh7IHJlc3Bv
bmQgfSkgPT4gewoJCXRyeSB7CgkJCXNldFR0c0VuYWJsZWQocmVzb2x2ZVR0c1ByZWZzUGF0aChy
ZXNvbHZlVHRzQ29uZmlnKGxvYWRDb25maWcoKSkpLCB0cnVlKTsKCQkJcmVzcG9uZCh0cnVlLCB7
IGVuYWJsZWQ6IHRydWUgfSk7CgkJfSBjYXRjaCAoZXJyKSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZv
aWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLlVOQVZBSUxBQkxFLCBmb3JtYXRGb3JMb2coZXJy
KSkpOwoJCX0KCX0sCgkidHRzLmRpc2FibGUiOiBhc3luYyAoeyByZXNwb25kIH0pID0+IHsKCQl0
cnkgewoJCQlzZXRUdHNFbmFibGVkKHJlc29sdmVUdHNQcmVmc1BhdGgocmVzb2x2ZVR0c0NvbmZp
Zyhsb2FkQ29uZmlnKCkpKSwgZmFsc2UpOwoJCQlyZXNwb25kKHRydWUsIHsgZW5hYmxlZDogZmFs
c2UgfSk7CgkJfSBjYXRjaCAoZXJyKSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JT
aGFwZShFcnJvckNvZGVzLlVOQVZBSUxBQkxFLCBmb3JtYXRGb3JMb2coZXJyKSkpOwoJCX0KCX0s
CgkidHRzLmNvbnZlcnQiOiBhc3luYyAoeyBwYXJhbXMsIHJlc3BvbmQgfSkgPT4gewoJCWNvbnN0
IHRleHQgPSB0eXBlb2YgcGFyYW1zLnRleHQgPT09ICJzdHJpbmciID8gcGFyYW1zLnRleHQudHJp
bSgpIDogIiI7CgkJaWYgKCF0ZXh0KSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JT
aGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgInR0cy5jb252ZXJ0IHJlcXVpcmVzIHRl
eHQiKSk7CgkJCXJldHVybjsKCQl9CgkJdHJ5IHsKCQkJY29uc3QgcmVzdWx0ID0gYXdhaXQgdGV4
dFRvU3BlZWNoKHsKCQkJCXRleHQsCgkJCQljZmc6IGxvYWRDb25maWcoKSwKCQkJCWNoYW5uZWw6
IHR5cGVvZiBwYXJhbXMuY2hhbm5lbCA9PT0gInN0cmluZyIgPyBwYXJhbXMuY2hhbm5lbC50cmlt
KCkgOiB2b2lkIDAKCQkJfSk7CgkJCWlmIChyZXN1bHQuc3VjY2VzcyAmJiByZXN1bHQuYXVkaW9Q
YXRoKSB7CgkJCQlyZXNwb25kKHRydWUsIHsKCQkJCQlhdWRpb1BhdGg6IHJlc3VsdC5hdWRpb1Bh
dGgsCgkJCQkJcHJvdmlkZXI6IHJlc3VsdC5wcm92aWRlciwKCQkJCQlvdXRwdXRGb3JtYXQ6IHJl
c3VsdC5vdXRwdXRGb3JtYXQsCgkJCQkJdm9pY2VDb21wYXRpYmxlOiByZXN1bHQudm9pY2VDb21w
YXRpYmxlCgkJCQl9KTsKCQkJCXJldHVybjsKCQkJfQoJCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAs
IGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5VTkFWQUlMQUJMRSwgcmVzdWx0LmVycm9yID8/ICJUVFMg
Y29udmVyc2lvbiBmYWlsZWQiKSk7CgkJfSBjYXRjaCAoZXJyKSB7CgkJCXJlc3BvbmQoZmFsc2Us
IHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLlVOQVZBSUxBQkxFLCBmb3JtYXRGb3JMb2co
ZXJyKSkpOwoJCX0KCX0sCgkidHRzLnNldFByb3ZpZGVyIjogYXN5bmMgKHsgcGFyYW1zLCByZXNw
b25kIH0pID0+IHsKCQljb25zdCBwcm92aWRlciA9IHR5cGVvZiBwYXJhbXMucHJvdmlkZXIgPT09
ICJzdHJpbmciID8gcGFyYW1zLnByb3ZpZGVyLnRyaW0oKSA6ICIiOwoJCWlmIChwcm92aWRlciAh
PT0gIm9wZW5haSIgJiYgcHJvdmlkZXIgIT09ICJlbGV2ZW5sYWJzIiAmJiBwcm92aWRlciAhPT0g
ImVkZ2UiKSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVz
LklOVkFMSURfUkVRVUVTVCwgIkludmFsaWQgcHJvdmlkZXIuIFVzZSBvcGVuYWksIGVsZXZlbmxh
YnMsIG9yIGVkZ2UuIikpOwoJCQlyZXR1cm47CgkJfQoJCXRyeSB7CgkJCXNldFR0c1Byb3ZpZGVy
KHJlc29sdmVUdHNQcmVmc1BhdGgocmVzb2x2ZVR0c0NvbmZpZyhsb2FkQ29uZmlnKCkpKSwgcHJv
dmlkZXIpOwoJCQlyZXNwb25kKHRydWUsIHsgcHJvdmlkZXIgfSk7CgkJfSBjYXRjaCAoZXJyKSB7
CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLlVOQVZBSUxB
QkxFLCBmb3JtYXRGb3JMb2coZXJyKSkpOwoJCX0KCX0sCgkidHRzLnByb3ZpZGVycyI6IGFzeW5j
ICh7IHJlc3BvbmQgfSkgPT4gewoJCXRyeSB7CgkJCWNvbnN0IGNvbmZpZyA9IHJlc29sdmVUdHND
b25maWcobG9hZENvbmZpZygpKTsKCQkJY29uc3QgcHJlZnNQYXRoID0gcmVzb2x2ZVR0c1ByZWZz
UGF0aChjb25maWcpOwoJCQlyZXNwb25kKHRydWUsIHsKCQkJCXByb3ZpZGVyczogWwoJCQkJCXsK
CQkJCQkJaWQ6ICJvcGVuYWkiLAoJCQkJCQluYW1lOiAiT3BlbkFJIiwKCQkJCQkJY29uZmlndXJl
ZDogQm9vbGVhbihyZXNvbHZlVHRzQXBpS2V5KGNvbmZpZywgIm9wZW5haSIpKSwKCQkJCQkJbW9k
ZWxzOiBbLi4uT1BFTkFJX1RUU19NT0RFTFNdLAoJCQkJCQl2b2ljZXM6IFsuLi5PUEVOQUlfVFRT
X1ZPSUNFU10KCQkJCQl9LAoJCQkJCXsKCQkJCQkJaWQ6ICJlbGV2ZW5sYWJzIiwKCQkJCQkJbmFt
ZTogIkVsZXZlbkxhYnMiLAoJCQkJCQljb25maWd1cmVkOiBCb29sZWFuKHJlc29sdmVUdHNBcGlL
ZXkoY29uZmlnLCAiZWxldmVubGFicyIpKSwKCQkJCQkJbW9kZWxzOiBbCgkJCQkJCQkiZWxldmVu
X211bHRpbGluZ3VhbF92MiIsCgkJCQkJCQkiZWxldmVuX3R1cmJvX3YyXzUiLAoJCQkJCQkJImVs
ZXZlbl9tb25vbGluZ3VhbF92MSIKCQkJCQkJXQoJCQkJCX0sCgkJCQkJewoJCQkJCQlpZDogImVk
Z2UiLAoJCQkJCQluYW1lOiAiRWRnZSBUVFMiLAoJCQkJCQljb25maWd1cmVkOiBpc1R0c1Byb3Zp
ZGVyQ29uZmlndXJlZChjb25maWcsICJlZGdlIiksCgkJCQkJCW1vZGVsczogW10KCQkJCQl9CgkJ
CQldLAoJCQkJYWN0aXZlOiBnZXRUdHNQcm92aWRlcihjb25maWcsIHByZWZzUGF0aCkKCQkJfSk7
CgkJfSBjYXRjaCAoZXJyKSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShF
cnJvckNvZGVzLlVOQVZBSUxBQkxFLCBmb3JtYXRGb3JMb2coZXJyKSkpOwoJCX0KCX0KfTsKLy8j
ZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvZ2F0ZXdheS9zZXJ2ZXItbWV0aG9kcy91cGRhdGUudHMK
Y29uc3QgdXBkYXRlSGFuZGxlcnMgPSB7ICJ1cGRhdGUucnVuIjogYXN5bmMgKHsgcGFyYW1zLCBy
ZXNwb25kLCBjbGllbnQsIGNvbnRleHQgfSkgPT4gewoJaWYgKCFhc3NlcnRWYWxpZFBhcmFtcyhw
YXJhbXMsIHZhbGlkYXRlVXBkYXRlUnVuUGFyYW1zLCAidXBkYXRlLnJ1biIsIHJlc3BvbmQpKSBy
ZXR1cm47Cgljb25zdCBhY3RvciA9IHJlc29sdmVDb250cm9sUGxhbmVBY3RvcihjbGllbnQpOwoJ
Y29uc3QgeyBzZXNzaW9uS2V5LCBub3RlLCByZXN0YXJ0RGVsYXlNcyB9ID0gcGFyc2VSZXN0YXJ0
UmVxdWVzdFBhcmFtcyhwYXJhbXMpOwoJY29uc3QgeyBkZWxpdmVyeUNvbnRleHQsIHRocmVhZElk
IH0gPSBleHRyYWN0RGVsaXZlcnlJbmZvKHNlc3Npb25LZXkpOwoJY29uc3QgdGltZW91dE1zUmF3
ID0gcGFyYW1zLnRpbWVvdXRNczsKCWNvbnN0IHRpbWVvdXRNcyA9IHR5cGVvZiB0aW1lb3V0TXNS
YXcgPT09ICJudW1iZXIiICYmIE51bWJlci5pc0Zpbml0ZSh0aW1lb3V0TXNSYXcpID8gTWF0aC5t
YXgoMWUzLCBNYXRoLmZsb29yKHRpbWVvdXRNc1JhdykpIDogdm9pZCAwOwoJbGV0IHJlc3VsdDsK
CXRyeSB7CgkJY29uc3QgY29uZmlnQ2hhbm5lbCA9IG5vcm1hbGl6ZVVwZGF0ZUNoYW5uZWwobG9h
ZENvbmZpZygpLnVwZGF0ZT8uY2hhbm5lbCk7CgkJcmVzdWx0ID0gYXdhaXQgcnVuR2F0ZXdheVVw
ZGF0ZSh7CgkJCXRpbWVvdXRNcywKCQkJY3dkOiBhd2FpdCByZXNvbHZlT3BlbkNsYXdQYWNrYWdl
Um9vdCh7CgkJCQltb2R1bGVVcmw6IGltcG9ydC5tZXRhLnVybCwKCQkJCWFyZ3YxOiBwcm9jZXNz
LmFyZ3ZbMV0sCgkJCQljd2Q6IHByb2Nlc3MuY3dkKCkKCQkJfSkgPz8gcHJvY2Vzcy5jd2QoKSwK
CQkJYXJndjE6IHByb2Nlc3MuYXJndlsxXSwKCQkJY2hhbm5lbDogY29uZmlnQ2hhbm5lbCA/PyB2
b2lkIDAKCQl9KTsKCX0gY2F0Y2ggKGVycikgewoJCXJlc3VsdCA9IHsKCQkJc3RhdHVzOiAiZXJy
b3IiLAoJCQltb2RlOiAidW5rbm93biIsCgkJCXJlYXNvbjogU3RyaW5nKGVyciksCgkJCXN0ZXBz
OiBbXSwKCQkJZHVyYXRpb25NczogMAoJCX07Cgl9Cgljb25zdCBwYXlsb2FkID0gewoJCWtpbmQ6
ICJ1cGRhdGUiLAoJCXN0YXR1czogcmVzdWx0LnN0YXR1cywKCQl0czogRGF0ZS5ub3coKSwKCQlz
ZXNzaW9uS2V5LAoJCWRlbGl2ZXJ5Q29udGV4dCwKCQl0aHJlYWRJZCwKCQltZXNzYWdlOiBub3Rl
ID8/IG51bGwsCgkJZG9jdG9ySGludDogZm9ybWF0RG9jdG9yTm9uSW50ZXJhY3RpdmVIaW50KCks
CgkJc3RhdHM6IHsKCQkJbW9kZTogcmVzdWx0Lm1vZGUsCgkJCXJvb3Q6IHJlc3VsdC5yb290ID8/
IHZvaWQgMCwKCQkJYmVmb3JlOiByZXN1bHQuYmVmb3JlID8/IG51bGwsCgkJCWFmdGVyOiByZXN1
bHQuYWZ0ZXIgPz8gbnVsbCwKCQkJc3RlcHM6IHJlc3VsdC5zdGVwcy5tYXAoKHN0ZXApID0+ICh7
CgkJCQluYW1lOiBzdGVwLm5hbWUsCgkJCQljb21tYW5kOiBzdGVwLmNvbW1hbmQsCgkJCQljd2Q6
IHN0ZXAuY3dkLAoJCQkJZHVyYXRpb25Nczogc3RlcC5kdXJhdGlvbk1zLAoJCQkJbG9nOiB7CgkJ
CQkJc3Rkb3V0VGFpbDogc3RlcC5zdGRvdXRUYWlsID8/IG51bGwsCgkJCQkJc3RkZXJyVGFpbDog
c3RlcC5zdGRlcnJUYWlsID8/IG51bGwsCgkJCQkJZXhpdENvZGU6IHN0ZXAuZXhpdENvZGUgPz8g
bnVsbAoJCQkJfQoJCQl9KSksCgkJCXJlYXNvbjogcmVzdWx0LnJlYXNvbiA/PyBudWxsLAoJCQlk
dXJhdGlvbk1zOiByZXN1bHQuZHVyYXRpb25NcwoJCX0KCX07CglsZXQgc2VudGluZWxQYXRoID0g
bnVsbDsKCXRyeSB7CgkJc2VudGluZWxQYXRoID0gYXdhaXQgd3JpdGVSZXN0YXJ0U2VudGluZWwo
cGF5bG9hZCk7Cgl9IGNhdGNoIHsKCQlzZW50aW5lbFBhdGggPSBudWxsOwoJfQoJY29uc3QgcmVz
dGFydCA9IHJlc3VsdC5zdGF0dXMgPT09ICJvayIgPyBzY2hlZHVsZUdhdGV3YXlTaWd1c3IxUmVz
dGFydCh7CgkJZGVsYXlNczogcmVzdGFydERlbGF5TXMsCgkJcmVhc29uOiAidXBkYXRlLnJ1biIs
CgkJYXVkaXQ6IHsKCQkJYWN0b3I6IGFjdG9yLmFjdG9yLAoJCQlkZXZpY2VJZDogYWN0b3IuZGV2
aWNlSWQsCgkJCWNsaWVudElwOiBhY3Rvci5jbGllbnRJcCwKCQkJY2hhbmdlZFBhdGhzOiBbXQoJ
CX0KCX0pIDogbnVsbDsKCWNvbnRleHQ/LmxvZ0dhdGV3YXk/LmluZm8oYHVwZGF0ZS5ydW4gY29t
cGxldGVkICR7Zm9ybWF0Q29udHJvbFBsYW5lQWN0b3IoYWN0b3IpfSBjaGFuZ2VkUGF0aHM9PG4v
YT4gcmVzdGFydFJlYXNvbj11cGRhdGUucnVuIHN0YXR1cz0ke3Jlc3VsdC5zdGF0dXN9YCk7Cglp
ZiAocmVzdGFydD8uY29hbGVzY2VkKSBjb250ZXh0Py5sb2dHYXRld2F5Py53YXJuKGB1cGRhdGUu
cnVuIHJlc3RhcnQgY29hbGVzY2VkICR7Zm9ybWF0Q29udHJvbFBsYW5lQWN0b3IoYWN0b3IpfSBk
ZWxheU1zPSR7cmVzdGFydC5kZWxheU1zfWApOwoJcmVzcG9uZCh0cnVlLCB7CgkJb2s6IHJlc3Vs
dC5zdGF0dXMgIT09ICJlcnJvciIsCgkJcmVzdWx0LAoJCXJlc3RhcnQsCgkJc2VudGluZWw6IHsK
CQkJcGF0aDogc2VudGluZWxQYXRoLAoJCQlwYXlsb2FkCgkJfQoJfSwgdm9pZCAwKTsKfSB9Owov
LyNlbmRyZWdpb24KLy8jcmVnaW9uIHNyYy9zaGFyZWQvdXNhZ2UtYWdncmVnYXRlcy50cwpmdW5j
dGlvbiBtZXJnZVVzYWdlTGF0ZW5jeSh0b3RhbHMsIGxhdGVuY3kpIHsKCWlmICghbGF0ZW5jeSB8
fCBsYXRlbmN5LmNvdW50IDw9IDApIHJldHVybjsKCXRvdGFscy5jb3VudCArPSBsYXRlbmN5LmNv
dW50OwoJdG90YWxzLnN1bSArPSBsYXRlbmN5LmF2Z01zICogbGF0ZW5jeS5jb3VudDsKCXRvdGFs
cy5taW4gPSBNYXRoLm1pbih0b3RhbHMubWluLCBsYXRlbmN5Lm1pbk1zKTsKCXRvdGFscy5tYXgg
PSBNYXRoLm1heCh0b3RhbHMubWF4LCBsYXRlbmN5Lm1heE1zKTsKCXRvdGFscy5wOTVNYXggPSBN
YXRoLm1heCh0b3RhbHMucDk1TWF4LCBsYXRlbmN5LnA5NU1zKTsKfQpmdW5jdGlvbiBtZXJnZVVz
YWdlRGFpbHlMYXRlbmN5KGRhaWx5TGF0ZW5jeU1hcCwgZGFpbHlMYXRlbmN5KSB7Cglmb3IgKGNv
bnN0IGRheSBvZiBkYWlseUxhdGVuY3kgPz8gW10pIHsKCQljb25zdCBleGlzdGluZyA9IGRhaWx5
TGF0ZW5jeU1hcC5nZXQoZGF5LmRhdGUpID8/IHsKCQkJZGF0ZTogZGF5LmRhdGUsCgkJCWNvdW50
OiAwLAoJCQlzdW06IDAsCgkJCW1pbjogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLAoJCQltYXg6
IDAsCgkJCXA5NU1heDogMAoJCX07CgkJZXhpc3RpbmcuY291bnQgKz0gZGF5LmNvdW50OwoJCWV4
aXN0aW5nLnN1bSArPSBkYXkuYXZnTXMgKiBkYXkuY291bnQ7CgkJZXhpc3RpbmcubWluID0gTWF0
aC5taW4oZXhpc3RpbmcubWluLCBkYXkubWluTXMpOwoJCWV4aXN0aW5nLm1heCA9IE1hdGgubWF4
KGV4aXN0aW5nLm1heCwgZGF5Lm1heE1zKTsKCQlleGlzdGluZy5wOTVNYXggPSBNYXRoLm1heChl
eGlzdGluZy5wOTVNYXgsIGRheS5wOTVNcyk7CgkJZGFpbHlMYXRlbmN5TWFwLnNldChkYXkuZGF0
ZSwgZXhpc3RpbmcpOwoJfQp9CmZ1bmN0aW9uIGJ1aWxkVXNhZ2VBZ2dyZWdhdGVUYWlsKHBhcmFt
cykgewoJcmV0dXJuIHsKCQlieUNoYW5uZWw6IEFycmF5LmZyb20ocGFyYW1zLmJ5Q2hhbm5lbE1h
cC5lbnRyaWVzKCkpLm1hcCgoW2NoYW5uZWwsIHRvdGFsc10pID0+ICh7CgkJCWNoYW5uZWwsCgkJ
CXRvdGFscwoJCX0pKS50b1NvcnRlZCgoYSwgYikgPT4gYi50b3RhbHMudG90YWxDb3N0IC0gYS50
b3RhbHMudG90YWxDb3N0KSwKCQlsYXRlbmN5OiBwYXJhbXMubGF0ZW5jeVRvdGFscy5jb3VudCA+
IDAgPyB7CgkJCWNvdW50OiBwYXJhbXMubGF0ZW5jeVRvdGFscy5jb3VudCwKCQkJYXZnTXM6IHBh
cmFtcy5sYXRlbmN5VG90YWxzLnN1bSAvIHBhcmFtcy5sYXRlbmN5VG90YWxzLmNvdW50LAoJCQlt
aW5NczogcGFyYW1zLmxhdGVuY3lUb3RhbHMubWluID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5J
VFkgPyAwIDogcGFyYW1zLmxhdGVuY3lUb3RhbHMubWluLAoJCQltYXhNczogcGFyYW1zLmxhdGVu
Y3lUb3RhbHMubWF4LAoJCQlwOTVNczogcGFyYW1zLmxhdGVuY3lUb3RhbHMucDk1TWF4CgkJfSA6
IHZvaWQgMCwKCQlkYWlseUxhdGVuY3k6IEFycmF5LmZyb20ocGFyYW1zLmRhaWx5TGF0ZW5jeU1h
cC52YWx1ZXMoKSkubWFwKChlbnRyeSkgPT4gKHsKCQkJZGF0ZTogZW50cnkuZGF0ZSwKCQkJY291
bnQ6IGVudHJ5LmNvdW50LAoJCQlhdmdNczogZW50cnkuY291bnQgPyBlbnRyeS5zdW0gLyBlbnRy
eS5jb3VudCA6IDAsCgkJCW1pbk1zOiBlbnRyeS5taW4gPT09IE51bWJlci5QT1NJVElWRV9JTkZJ
TklUWSA/IDAgOiBlbnRyeS5taW4sCgkJCW1heE1zOiBlbnRyeS5tYXgsCgkJCXA5NU1zOiBlbnRy
eS5wOTVNYXgKCQl9KSkudG9Tb3J0ZWQoKGEsIGIpID0+IGEuZGF0ZS5sb2NhbGVDb21wYXJlKGIu
ZGF0ZSkpLAoJCW1vZGVsRGFpbHk6IEFycmF5LmZyb20ocGFyYW1zLm1vZGVsRGFpbHlNYXAudmFs
dWVzKCkpLnRvU29ydGVkKChhLCBiKSA9PiBhLmRhdGUubG9jYWxlQ29tcGFyZShiLmRhdGUpIHx8
IGIuY29zdCAtIGEuY29zdCksCgkJZGFpbHk6IEFycmF5LmZyb20ocGFyYW1zLmRhaWx5TWFwLnZh
bHVlcygpKS50b1NvcnRlZCgoYSwgYikgPT4gYS5kYXRlLmxvY2FsZUNvbXBhcmUoYi5kYXRlKSkK
CX07Cn0KLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvZ2F0ZXdheS9zZXJ2ZXItbWV0aG9kcy91
c2FnZS50cwpjb25zdCBDT1NUX1VTQUdFX0NBQ0hFX1RUTF9NUyA9IDNlNDsKY29uc3QgREFZX01T
ID0gMTQ0MCAqIDYwICogMWUzOwpjb25zdCBjb3N0VXNhZ2VDYWNoZSA9IC8qIEBfX1BVUkVfXyAq
LyBuZXcgTWFwKCk7CmZ1bmN0aW9uIHJlc29sdmVTZXNzaW9uVXNhZ2VGaWxlT3JSZXNwb25kKGtl
eSwgcmVzcG9uZCkgewoJY29uc3QgY29uZmlnID0gbG9hZENvbmZpZygpOwoJY29uc3QgeyBlbnRy
eSwgc3RvcmVQYXRoIH0gPSBsb2FkU2Vzc2lvbkVudHJ5KGtleSk7Cgljb25zdCBwYXJzZWQgPSBw
YXJzZUFnZW50U2Vzc2lvbktleShrZXkpOwoJY29uc3QgYWdlbnRJZCA9IHBhcnNlZD8uYWdlbnRJ
ZDsKCWNvbnN0IHJhd1Nlc3Npb25JZCA9IHBhcnNlZD8ucmVzdCA/PyBrZXk7Cgljb25zdCBzZXNz
aW9uSWQgPSBlbnRyeT8uc2Vzc2lvbklkID8/IHJhd1Nlc3Npb25JZDsKCWxldCBzZXNzaW9uRmls
ZTsKCXRyeSB7CgkJc2Vzc2lvbkZpbGUgPSByZXNvbHZlU2Vzc2lvbkZpbGVQYXRoKHNlc3Npb25J
ZCwgZW50cnksIHJlc29sdmVTZXNzaW9uRmlsZVBhdGhPcHRpb25zKHsKCQkJc3RvcmVQYXRoLAoJ
CQlhZ2VudElkCgkJfSkpOwoJfSBjYXRjaCB7CgkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJv
clNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCBgSW52YWxpZCBzZXNzaW9uIGtleTog
JHtrZXl9YCkpOwoJCXJldHVybiBudWxsOwoJfQoJcmV0dXJuIHsKCQljb25maWcsCgkJZW50cnks
CgkJYWdlbnRJZCwKCQlzZXNzaW9uSWQsCgkJc2Vzc2lvbkZpbGUKCX07Cn0KY29uc3QgcGFyc2VE
YXRlUGFydHMgPSAocmF3KSA9PiB7CglpZiAodHlwZW9mIHJhdyAhPT0gInN0cmluZyIgfHwgIXJh
dy50cmltKCkpIHJldHVybjsKCWNvbnN0IG1hdGNoID0gL14oXGR7NH0pLShcZHsyfSktKFxkezJ9
KSQvLmV4ZWMocmF3LnRyaW0oKSk7CglpZiAoIW1hdGNoKSByZXR1cm47Cgljb25zdCBbLCB5ZWFy
U3RyLCBtb250aFN0ciwgZGF5U3RyXSA9IG1hdGNoOwoJY29uc3QgeWVhciA9IE51bWJlcih5ZWFy
U3RyKTsKCWNvbnN0IG1vbnRoSW5kZXggPSBOdW1iZXIobW9udGhTdHIpIC0gMTsKCWNvbnN0IGRh
eSA9IE51bWJlcihkYXlTdHIpOwoJaWYgKCFOdW1iZXIuaXNGaW5pdGUoeWVhcikgfHwgIU51bWJl
ci5pc0Zpbml0ZShtb250aEluZGV4KSB8fCAhTnVtYmVyLmlzRmluaXRlKGRheSkpIHJldHVybjsK
CXJldHVybiB7CgkJeWVhciwKCQltb250aEluZGV4LAoJCWRheQoJfTsKfTsKLyoqCiogUGFyc2Ug
YSBVVEMgb2Zmc2V0IHN0cmluZyBpbiB0aGUgZm9ybWF0IFVUQytILCBVVEMtSCwgVVRDK0hILCBV
VEMtSEgsIFVUQytIOk1NLCBVVEMtSEg6TU0uCiogUmV0dXJucyB0aGUgVVRDIG9mZnNldCBpbiBt
aW51dGVzIChlYXN0LXBvc2l0aXZlKSwgb3IgdW5kZWZpbmVkIGlmIGludmFsaWQuCiovCmNvbnN0
IHBhcnNlVXRjT2Zmc2V0VG9NaW51dGVzID0gKHJhdykgPT4gewoJaWYgKHR5cGVvZiByYXcgIT09
ICJzdHJpbmciIHx8ICFyYXcudHJpbSgpKSByZXR1cm47Cgljb25zdCBtYXRjaCA9IC9eVVRDKFsr
LV0pKFxkezEsMn0pKD86OihbMC01XVxkKSk/JC8uZXhlYyhyYXcudHJpbSgpKTsKCWlmICghbWF0
Y2gpIHJldHVybjsKCWNvbnN0IHNpZ24gPSBtYXRjaFsxXSA9PT0gIisiID8gMSA6IC0xOwoJY29u
c3QgaG91cnMgPSBOdW1iZXIobWF0Y2hbMl0pOwoJY29uc3QgbWludXRlcyA9IE51bWJlcihtYXRj
aFszXSA/PyAiMCIpOwoJaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGhvdXJzKSB8fCAhTnVtYmVyLmlz
SW50ZWdlcihtaW51dGVzKSkgcmV0dXJuOwoJaWYgKGhvdXJzID4gMTQgfHwgaG91cnMgPT09IDE0
ICYmIG1pbnV0ZXMgIT09IDApIHJldHVybjsKCWNvbnN0IHRvdGFsTWludXRlcyA9IHNpZ24gKiAo
aG91cnMgKiA2MCArIG1pbnV0ZXMpOwoJaWYgKHRvdGFsTWludXRlcyA8IC03MjAgfHwgdG90YWxN
aW51dGVzID4gODQwKSByZXR1cm47CglyZXR1cm4gdG90YWxNaW51dGVzOwp9Owpjb25zdCByZXNv
bHZlRGF0ZUludGVycHJldGF0aW9uID0gKHBhcmFtcykgPT4gewoJaWYgKHBhcmFtcy5tb2RlID09
PSAiZ2F0ZXdheSIpIHJldHVybiB7IG1vZGU6ICJnYXRld2F5IiB9OwoJaWYgKHBhcmFtcy5tb2Rl
ID09PSAic3BlY2lmaWMiKSB7CgkJY29uc3QgdXRjT2Zmc2V0TWludXRlcyA9IHBhcnNlVXRjT2Zm
c2V0VG9NaW51dGVzKHBhcmFtcy51dGNPZmZzZXQpOwoJCWlmICh1dGNPZmZzZXRNaW51dGVzICE9
PSB2b2lkIDApIHJldHVybiB7CgkJCW1vZGU6ICJzcGVjaWZpYyIsCgkJCXV0Y09mZnNldE1pbnV0
ZXMKCQl9OwoJfQoJcmV0dXJuIHsgbW9kZTogInV0YyIgfTsKfTsKLyoqCiogUGFyc2UgYSBkYXRl
IHN0cmluZyAoWVlZWS1NTS1ERCkgdG8gc3RhcnQtb2YtZGF5IHRpbWVzdGFtcCBiYXNlZCBvbiBp
bnRlcnByZXRhdGlvbiBtb2RlLgoqIFJldHVybnMgdW5kZWZpbmVkIGlmIGludmFsaWQuCiovCmNv
bnN0IHBhcnNlRGF0ZVRvTXMgPSAocmF3LCBpbnRlcnByZXRhdGlvbiA9IHsgbW9kZTogInV0YyIg
fSkgPT4gewoJY29uc3QgcGFydHMgPSBwYXJzZURhdGVQYXJ0cyhyYXcpOwoJaWYgKCFwYXJ0cykg
cmV0dXJuOwoJY29uc3QgeyB5ZWFyLCBtb250aEluZGV4LCBkYXkgfSA9IHBhcnRzOwoJaWYgKGlu
dGVycHJldGF0aW9uLm1vZGUgPT09ICJnYXRld2F5IikgewoJCWNvbnN0IG1zID0gbmV3IERhdGUo
eWVhciwgbW9udGhJbmRleCwgZGF5KS5nZXRUaW1lKCk7CgkJcmV0dXJuIE51bWJlci5pc05hTiht
cykgPyB2b2lkIDAgOiBtczsKCX0KCWlmIChpbnRlcnByZXRhdGlvbi5tb2RlID09PSAic3BlY2lm
aWMiKSB7CgkJY29uc3QgbXMgPSBEYXRlLlVUQyh5ZWFyLCBtb250aEluZGV4LCBkYXkpIC0gaW50
ZXJwcmV0YXRpb24udXRjT2Zmc2V0TWludXRlcyAqIDYwICogMWUzOwoJCXJldHVybiBOdW1iZXIu
aXNOYU4obXMpID8gdm9pZCAwIDogbXM7Cgl9Cgljb25zdCBtcyA9IERhdGUuVVRDKHllYXIsIG1v
bnRoSW5kZXgsIGRheSk7CglyZXR1cm4gTnVtYmVyLmlzTmFOKG1zKSA/IHZvaWQgMCA6IG1zOwp9
Owpjb25zdCBnZXRUb2RheVN0YXJ0TXMgPSAobm93LCBpbnRlcnByZXRhdGlvbikgPT4gewoJaWYg
KGludGVycHJldGF0aW9uLm1vZGUgPT09ICJnYXRld2F5IikgcmV0dXJuIG5ldyBEYXRlKG5vdy5n
ZXRGdWxsWWVhcigpLCBub3cuZ2V0TW9udGgoKSwgbm93LmdldERhdGUoKSkuZ2V0VGltZSgpOwoJ
aWYgKGludGVycHJldGF0aW9uLm1vZGUgPT09ICJzcGVjaWZpYyIpIHsKCQljb25zdCBzaGlmdGVk
ID0gbmV3IERhdGUobm93LmdldFRpbWUoKSArIGludGVycHJldGF0aW9uLnV0Y09mZnNldE1pbnV0
ZXMgKiA2MCAqIDFlMyk7CgkJcmV0dXJuIERhdGUuVVRDKHNoaWZ0ZWQuZ2V0VVRDRnVsbFllYXIo
KSwgc2hpZnRlZC5nZXRVVENNb250aCgpLCBzaGlmdGVkLmdldFVUQ0RhdGUoKSkgLSBpbnRlcnBy
ZXRhdGlvbi51dGNPZmZzZXRNaW51dGVzICogNjAgKiAxZTM7Cgl9CglyZXR1cm4gRGF0ZS5VVEMo
bm93LmdldFVUQ0Z1bGxZZWFyKCksIG5vdy5nZXRVVENNb250aCgpLCBub3cuZ2V0VVRDRGF0ZSgp
KTsKfTsKY29uc3QgcGFyc2VEYXlzID0gKHJhdykgPT4gewoJaWYgKHR5cGVvZiByYXcgPT09ICJu
dW1iZXIiICYmIE51bWJlci5pc0Zpbml0ZShyYXcpKSByZXR1cm4gTWF0aC5mbG9vcihyYXcpOwoJ
aWYgKHR5cGVvZiByYXcgPT09ICJzdHJpbmciICYmIHJhdy50cmltKCkgIT09ICIiKSB7CgkJY29u
c3QgcGFyc2VkID0gTnVtYmVyKHJhdyk7CgkJaWYgKE51bWJlci5pc0Zpbml0ZShwYXJzZWQpKSBy
ZXR1cm4gTWF0aC5mbG9vcihwYXJzZWQpOwoJfQp9OwovKioKKiBHZXQgZGF0ZSByYW5nZSBmcm9t
IHBhcmFtcyAoc3RhcnREYXRlL2VuZERhdGUgb3IgZGF5cykuCiogRmFsbHMgYmFjayB0byBsYXN0
IDMwIGRheXMgaWYgbm90IHByb3ZpZGVkLgoqLwpjb25zdCBwYXJzZURhdGVSYW5nZSA9IChwYXJh
bXMpID0+IHsKCWNvbnN0IG5vdyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpOwoJY29uc3Qg
aW50ZXJwcmV0YXRpb24gPSByZXNvbHZlRGF0ZUludGVycHJldGF0aW9uKHBhcmFtcyk7Cgljb25z
dCB0b2RheVN0YXJ0TXMgPSBnZXRUb2RheVN0YXJ0TXMobm93LCBpbnRlcnByZXRhdGlvbik7Cglj
b25zdCB0b2RheUVuZE1zID0gdG9kYXlTdGFydE1zICsgREFZX01TIC0gMTsKCWNvbnN0IHN0YXJ0
TXMgPSBwYXJzZURhdGVUb01zKHBhcmFtcy5zdGFydERhdGUsIGludGVycHJldGF0aW9uKTsKCWNv
bnN0IGVuZE1zID0gcGFyc2VEYXRlVG9NcyhwYXJhbXMuZW5kRGF0ZSwgaW50ZXJwcmV0YXRpb24p
OwoJaWYgKHN0YXJ0TXMgIT09IHZvaWQgMCAmJiBlbmRNcyAhPT0gdm9pZCAwKSByZXR1cm4gewoJ
CXN0YXJ0TXMsCgkJZW5kTXM6IGVuZE1zICsgREFZX01TIC0gMQoJfTsKCWNvbnN0IGRheXMgPSBw
YXJzZURheXMocGFyYW1zLmRheXMpOwoJaWYgKGRheXMgIT09IHZvaWQgMCkgcmV0dXJuIHsKCQlz
dGFydE1zOiB0b2RheVN0YXJ0TXMgLSAoTWF0aC5tYXgoMSwgZGF5cykgLSAxKSAqIERBWV9NUywK
CQllbmRNczogdG9kYXlFbmRNcwoJfTsKCXJldHVybiB7CgkJc3RhcnRNczogdG9kYXlTdGFydE1z
IC0gMjkgKiBEQVlfTVMsCgkJZW5kTXM6IHRvZGF5RW5kTXMKCX07Cn07CmZ1bmN0aW9uIGJ1aWxk
U3RvcmVCeVNlc3Npb25JZChzdG9yZSkgewoJY29uc3Qgc3RvcmVCeVNlc3Npb25JZCA9IC8qIEBf
X1BVUkVfXyAqLyBuZXcgTWFwKCk7Cglmb3IgKGNvbnN0IFtrZXksIGVudHJ5XSBvZiBPYmplY3Qu
ZW50cmllcyhzdG9yZSkpIGlmIChlbnRyeT8uc2Vzc2lvbklkKSBzdG9yZUJ5U2Vzc2lvbklkLnNl
dChlbnRyeS5zZXNzaW9uSWQsIHsKCQlrZXksCgkJZW50cnkKCX0pOwoJcmV0dXJuIHN0b3JlQnlT
ZXNzaW9uSWQ7Cn0KYXN5bmMgZnVuY3Rpb24gZGlzY292ZXJBbGxTZXNzaW9uc0ZvclVzYWdlKHBh
cmFtcykgewoJY29uc3QgYWdlbnRzID0gbGlzdEFnZW50c0ZvckdhdGV3YXkocGFyYW1zLmNvbmZp
ZykuYWdlbnRzOwoJcmV0dXJuIChhd2FpdCBQcm9taXNlLmFsbChhZ2VudHMubWFwKGFzeW5jIChh
Z2VudCkgPT4gewoJCXJldHVybiAoYXdhaXQgZGlzY292ZXJBbGxTZXNzaW9ucyh7CgkJCWFnZW50
SWQ6IGFnZW50LmlkLAoJCQlzdGFydE1zOiBwYXJhbXMuc3RhcnRNcywKCQkJZW5kTXM6IHBhcmFt
cy5lbmRNcwoJCX0pKS5tYXAoKHNlc3Npb24pID0+ICh7CgkJCS4uLnNlc3Npb24sCgkJCWFnZW50
SWQ6IGFnZW50LmlkCgkJfSkpOwoJfSkpKS5mbGF0KCkudG9Tb3J0ZWQoKGEsIGIpID0+IGIubXRp
bWUgLSBhLm10aW1lKTsKfQphc3luYyBmdW5jdGlvbiBsb2FkQ29zdFVzYWdlU3VtbWFyeUNhY2hl
ZChwYXJhbXMpIHsKCWNvbnN0IGNhY2hlS2V5ID0gYCR7cGFyYW1zLnN0YXJ0TXN9LSR7cGFyYW1z
LmVuZE1zfWA7Cgljb25zdCBub3cgPSBEYXRlLm5vdygpOwoJY29uc3QgY2FjaGVkID0gY29zdFVz
YWdlQ2FjaGUuZ2V0KGNhY2hlS2V5KTsKCWlmIChjYWNoZWQ/LnN1bW1hcnkgJiYgY2FjaGVkLnVw
ZGF0ZWRBdCAmJiBub3cgLSBjYWNoZWQudXBkYXRlZEF0IDwgQ09TVF9VU0FHRV9DQUNIRV9UVExf
TVMpIHJldHVybiBjYWNoZWQuc3VtbWFyeTsKCWlmIChjYWNoZWQ/LmluRmxpZ2h0KSB7CgkJaWYg
KGNhY2hlZC5zdW1tYXJ5KSByZXR1cm4gY2FjaGVkLnN1bW1hcnk7CgkJcmV0dXJuIGF3YWl0IGNh
Y2hlZC5pbkZsaWdodDsKCX0KCWNvbnN0IGVudHJ5ID0gY2FjaGVkID8/IHt9OwoJY29uc3QgaW5G
bGlnaHQgPSBsb2FkQ29zdFVzYWdlU3VtbWFyeSh7CgkJc3RhcnRNczogcGFyYW1zLnN0YXJ0TXMs
CgkJZW5kTXM6IHBhcmFtcy5lbmRNcywKCQljb25maWc6IHBhcmFtcy5jb25maWcKCX0pLnRoZW4o
KHN1bW1hcnkpID0+IHsKCQljb3N0VXNhZ2VDYWNoZS5zZXQoY2FjaGVLZXksIHsKCQkJc3VtbWFy
eSwKCQkJdXBkYXRlZEF0OiBEYXRlLm5vdygpCgkJfSk7CgkJcmV0dXJuIHN1bW1hcnk7Cgl9KS5j
YXRjaCgoZXJyKSA9PiB7CgkJaWYgKGVudHJ5LnN1bW1hcnkpIHJldHVybiBlbnRyeS5zdW1tYXJ5
OwoJCXRocm93IGVycjsKCX0pLmZpbmFsbHkoKCkgPT4gewoJCWNvbnN0IGN1cnJlbnQgPSBjb3N0
VXNhZ2VDYWNoZS5nZXQoY2FjaGVLZXkpOwoJCWlmIChjdXJyZW50Py5pbkZsaWdodCA9PT0gaW5G
bGlnaHQpIHsKCQkJY3VycmVudC5pbkZsaWdodCA9IHZvaWQgMDsKCQkJY29zdFVzYWdlQ2FjaGUu
c2V0KGNhY2hlS2V5LCBjdXJyZW50KTsKCQl9Cgl9KTsKCWVudHJ5LmluRmxpZ2h0ID0gaW5GbGln
aHQ7Cgljb3N0VXNhZ2VDYWNoZS5zZXQoY2FjaGVLZXksIGVudHJ5KTsKCWlmIChlbnRyeS5zdW1t
YXJ5KSByZXR1cm4gZW50cnkuc3VtbWFyeTsKCXJldHVybiBhd2FpdCBpbkZsaWdodDsKfQpjb25z
dCB1c2FnZUhhbmRsZXJzID0gewoJInVzYWdlLnN0YXR1cyI6IGFzeW5jICh7IHJlc3BvbmQgfSkg
PT4gewoJCXJlc3BvbmQodHJ1ZSwgYXdhaXQgbG9hZFByb3ZpZGVyVXNhZ2VTdW1tYXJ5KCksIHZv
aWQgMCk7Cgl9LAoJInVzYWdlLmNvc3QiOiBhc3luYyAoeyByZXNwb25kLCBwYXJhbXMgfSkgPT4g
ewoJCWNvbnN0IGNvbmZpZyA9IGxvYWRDb25maWcoKTsKCQljb25zdCB7IHN0YXJ0TXMsIGVuZE1z
IH0gPSBwYXJzZURhdGVSYW5nZSh7CgkJCXN0YXJ0RGF0ZTogcGFyYW1zPy5zdGFydERhdGUsCgkJ
CWVuZERhdGU6IHBhcmFtcz8uZW5kRGF0ZSwKCQkJZGF5czogcGFyYW1zPy5kYXlzLAoJCQltb2Rl
OiBwYXJhbXM/Lm1vZGUsCgkJCXV0Y09mZnNldDogcGFyYW1zPy51dGNPZmZzZXQKCQl9KTsKCQly
ZXNwb25kKHRydWUsIGF3YWl0IGxvYWRDb3N0VXNhZ2VTdW1tYXJ5Q2FjaGVkKHsKCQkJc3RhcnRN
cywKCQkJZW5kTXMsCgkJCWNvbmZpZwoJCX0pLCB2b2lkIDApOwoJfSwKCSJzZXNzaW9ucy51c2Fn
ZSI6IGFzeW5jICh7IHJlc3BvbmQsIHBhcmFtcyB9KSA9PiB7CgkJaWYgKCF2YWxpZGF0ZVNlc3Np
b25zVXNhZ2VQYXJhbXMocGFyYW1zKSkgewoJCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9y
U2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsIGBpbnZhbGlkIHNlc3Npb25zLnVzYWdl
IHBhcmFtczogJHtmb3JtYXRWYWxpZGF0aW9uRXJyb3JzKHZhbGlkYXRlU2Vzc2lvbnNVc2FnZVBh
cmFtcy5lcnJvcnMpfWApKTsKCQkJcmV0dXJuOwoJCX0KCQljb25zdCBwID0gcGFyYW1zOwoJCWNv
bnN0IGNvbmZpZyA9IGxvYWRDb25maWcoKTsKCQljb25zdCB7IHN0YXJ0TXMsIGVuZE1zIH0gPSBw
YXJzZURhdGVSYW5nZSh7CgkJCXN0YXJ0RGF0ZTogcC5zdGFydERhdGUsCgkJCWVuZERhdGU6IHAu
ZW5kRGF0ZSwKCQkJbW9kZTogcC5tb2RlLAoJCQl1dGNPZmZzZXQ6IHAudXRjT2Zmc2V0CgkJfSk7
CgkJY29uc3QgbGltaXQgPSB0eXBlb2YgcC5saW1pdCA9PT0gIm51bWJlciIgJiYgTnVtYmVyLmlz
RmluaXRlKHAubGltaXQpID8gcC5saW1pdCA6IDUwOwoJCWNvbnN0IGluY2x1ZGVDb250ZXh0V2Vp
Z2h0ID0gcC5pbmNsdWRlQ29udGV4dFdlaWdodCA/PyBmYWxzZTsKCQljb25zdCBzcGVjaWZpY0tl
eSA9IHR5cGVvZiBwLmtleSA9PT0gInN0cmluZyIgPyBwLmtleS50cmltKCkgOiBudWxsOwoJCWNv
bnN0IHsgc3RvcmVQYXRoLCBzdG9yZSB9ID0gbG9hZENvbWJpbmVkU2Vzc2lvblN0b3JlRm9yR2F0
ZXdheShjb25maWcpOwoJCWNvbnN0IG5vdyA9IERhdGUubm93KCk7CgkJY29uc3QgbWVyZ2VkRW50
cmllcyA9IFtdOwoJCWlmIChzcGVjaWZpY0tleSkgewoJCQljb25zdCBwYXJzZWQgPSBwYXJzZUFn
ZW50U2Vzc2lvbktleShzcGVjaWZpY0tleSk7CgkJCWNvbnN0IGFnZW50SWRGcm9tS2V5ID0gcGFy
c2VkPy5hZ2VudElkOwoJCQljb25zdCBrZXlSZXN0ID0gcGFyc2VkPy5yZXN0ID8/IHNwZWNpZmlj
S2V5OwoJCQljb25zdCBzdG9yZUJ5U2Vzc2lvbklkID0gYnVpbGRTdG9yZUJ5U2Vzc2lvbklkKHN0
b3JlKTsKCQkJY29uc3Qgc3RvcmVNYXRjaCA9IHN0b3JlW3NwZWNpZmljS2V5XSA/IHsKCQkJCWtl
eTogc3BlY2lmaWNLZXksCgkJCQllbnRyeTogc3RvcmVbc3BlY2lmaWNLZXldCgkJCX0gOiBudWxs
OwoJCQljb25zdCBzdG9yZUJ5SWRNYXRjaCA9IHN0b3JlQnlTZXNzaW9uSWQuZ2V0KGtleVJlc3Qp
ID8/IG51bGw7CgkJCWNvbnN0IHJlc29sdmVkU3RvcmVLZXkgPSBzdG9yZU1hdGNoPy5rZXkgPz8g
c3RvcmVCeUlkTWF0Y2g/LmtleSA/PyBzcGVjaWZpY0tleTsKCQkJY29uc3Qgc3RvcmVFbnRyeSA9
IHN0b3JlTWF0Y2g/LmVudHJ5ID8/IHN0b3JlQnlJZE1hdGNoPy5lbnRyeTsKCQkJY29uc3Qgc2Vz
c2lvbklkID0gc3RvcmVFbnRyeT8uc2Vzc2lvbklkID8/IGtleVJlc3Q7CgkJCWxldCBzZXNzaW9u
RmlsZTsKCQkJdHJ5IHsKCQkJCXNlc3Npb25GaWxlID0gcmVzb2x2ZVNlc3Npb25GaWxlUGF0aChz
ZXNzaW9uSWQsIHN0b3JlRW50cnksIHJlc29sdmVTZXNzaW9uRmlsZVBhdGhPcHRpb25zKHsKCQkJ
CQlzdG9yZVBhdGg6IHN0b3JlUGF0aCAhPT0gIihtdWx0aXBsZSkiID8gc3RvcmVQYXRoIDogdm9p
ZCAwLAoJCQkJCWFnZW50SWQ6IGFnZW50SWRGcm9tS2V5CgkJCQl9KSk7CgkJCX0gY2F0Y2ggewoJ
CQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9S
RVFVRVNULCBgSW52YWxpZCBzZXNzaW9uIHJlZmVyZW5jZTogJHtzcGVjaWZpY0tleX1gKSk7CgkJ
CQlyZXR1cm47CgkJCX0KCQkJdHJ5IHsKCQkJCWNvbnN0IHN0YXRzID0gZnMuc3RhdFN5bmMoc2Vz
c2lvbkZpbGUpOwoJCQkJaWYgKHN0YXRzLmlzRmlsZSgpKSBtZXJnZWRFbnRyaWVzLnB1c2goewoJ
CQkJCWtleTogcmVzb2x2ZWRTdG9yZUtleSwKCQkJCQlzZXNzaW9uSWQsCgkJCQkJc2Vzc2lvbkZp
bGUsCgkJCQkJbGFiZWw6IHN0b3JlRW50cnk/LmxhYmVsLAoJCQkJCXVwZGF0ZWRBdDogc3RvcmVF
bnRyeT8udXBkYXRlZEF0ID8/IHN0YXRzLm10aW1lTXMsCgkJCQkJc3RvcmVFbnRyeQoJCQkJfSk7
CgkJCX0gY2F0Y2gge30KCQl9IGVsc2UgewoJCQljb25zdCBkaXNjb3ZlcmVkU2Vzc2lvbnMgPSBh
d2FpdCBkaXNjb3ZlckFsbFNlc3Npb25zRm9yVXNhZ2UoewoJCQkJY29uZmlnLAoJCQkJc3RhcnRN
cywKCQkJCWVuZE1zCgkJCX0pOwoJCQljb25zdCBzdG9yZUJ5U2Vzc2lvbklkID0gYnVpbGRTdG9y
ZUJ5U2Vzc2lvbklkKHN0b3JlKTsKCQkJZm9yIChjb25zdCBkaXNjb3ZlcmVkIG9mIGRpc2NvdmVy
ZWRTZXNzaW9ucykgewoJCQkJY29uc3Qgc3RvcmVNYXRjaCA9IHN0b3JlQnlTZXNzaW9uSWQuZ2V0
KGRpc2NvdmVyZWQuc2Vzc2lvbklkKTsKCQkJCWlmIChzdG9yZU1hdGNoKSBtZXJnZWRFbnRyaWVz
LnB1c2goewoJCQkJCWtleTogc3RvcmVNYXRjaC5rZXksCgkJCQkJc2Vzc2lvbklkOiBkaXNjb3Zl
cmVkLnNlc3Npb25JZCwKCQkJCQlzZXNzaW9uRmlsZTogZGlzY292ZXJlZC5zZXNzaW9uRmlsZSwK
CQkJCQlsYWJlbDogc3RvcmVNYXRjaC5lbnRyeS5sYWJlbCwKCQkJCQl1cGRhdGVkQXQ6IHN0b3Jl
TWF0Y2guZW50cnkudXBkYXRlZEF0ID8/IGRpc2NvdmVyZWQubXRpbWUsCgkJCQkJc3RvcmVFbnRy
eTogc3RvcmVNYXRjaC5lbnRyeQoJCQkJfSk7CgkJCQllbHNlIG1lcmdlZEVudHJpZXMucHVzaCh7
CgkJCQkJa2V5OiBgYWdlbnQ6JHtkaXNjb3ZlcmVkLmFnZW50SWR9OiR7ZGlzY292ZXJlZC5zZXNz
aW9uSWR9YCwKCQkJCQlzZXNzaW9uSWQ6IGRpc2NvdmVyZWQuc2Vzc2lvbklkLAoJCQkJCXNlc3Np
b25GaWxlOiBkaXNjb3ZlcmVkLnNlc3Npb25GaWxlLAoJCQkJCWxhYmVsOiB2b2lkIDAsCgkJCQkJ
dXBkYXRlZEF0OiBkaXNjb3ZlcmVkLm10aW1lCgkJCQl9KTsKCQkJfQoJCX0KCQltZXJnZWRFbnRy
aWVzLnNvcnQoKGEsIGIpID0+IGIudXBkYXRlZEF0IC0gYS51cGRhdGVkQXQpOwoJCWNvbnN0IGxp
bWl0ZWRFbnRyaWVzID0gbWVyZ2VkRW50cmllcy5zbGljZSgwLCBsaW1pdCk7CgkJY29uc3Qgc2Vz
c2lvbnMgPSBbXTsKCQljb25zdCBhZ2dyZWdhdGVUb3RhbHMgPSB7CgkJCWlucHV0OiAwLAoJCQlv
dXRwdXQ6IDAsCgkJCWNhY2hlUmVhZDogMCwKCQkJY2FjaGVXcml0ZTogMCwKCQkJdG90YWxUb2tl
bnM6IDAsCgkJCXRvdGFsQ29zdDogMCwKCQkJaW5wdXRDb3N0OiAwLAoJCQlvdXRwdXRDb3N0OiAw
LAoJCQljYWNoZVJlYWRDb3N0OiAwLAoJCQljYWNoZVdyaXRlQ29zdDogMCwKCQkJbWlzc2luZ0Nv
c3RFbnRyaWVzOiAwCgkJfTsKCQljb25zdCBhZ2dyZWdhdGVNZXNzYWdlcyA9IHsKCQkJdG90YWw6
IDAsCgkJCXVzZXI6IDAsCgkJCWFzc2lzdGFudDogMCwKCQkJdG9vbENhbGxzOiAwLAoJCQl0b29s
UmVzdWx0czogMCwKCQkJZXJyb3JzOiAwCgkJfTsKCQljb25zdCB0b29sQWdncmVnYXRlTWFwID0g
LyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKCQljb25zdCBieU1vZGVsTWFwID0gLyogQF9fUFVS
RV9fICovIG5ldyBNYXAoKTsKCQljb25zdCBieVByb3ZpZGVyTWFwID0gLyogQF9fUFVSRV9fICov
IG5ldyBNYXAoKTsKCQljb25zdCBieUFnZW50TWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAo
KTsKCQljb25zdCBieUNoYW5uZWxNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwoJCWNv
bnN0IGRhaWx5QWdncmVnYXRlTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKCQljb25z
dCBsYXRlbmN5VG90YWxzID0gewoJCQljb3VudDogMCwKCQkJc3VtOiAwLAoJCQltaW46IE51bWJl
ci5QT1NJVElWRV9JTkZJTklUWSwKCQkJbWF4OiAwLAoJCQlwOTVNYXg6IDAKCQl9OwoJCWNvbnN0
IGRhaWx5TGF0ZW5jeU1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CgkJY29uc3QgbW9k
ZWxEYWlseU1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CgkJY29uc3QgZW1wdHlUb3Rh
bHMgPSAoKSA9PiAoewoJCQlpbnB1dDogMCwKCQkJb3V0cHV0OiAwLAoJCQljYWNoZVJlYWQ6IDAs
CgkJCWNhY2hlV3JpdGU6IDAsCgkJCXRvdGFsVG9rZW5zOiAwLAoJCQl0b3RhbENvc3Q6IDAsCgkJ
CWlucHV0Q29zdDogMCwKCQkJb3V0cHV0Q29zdDogMCwKCQkJY2FjaGVSZWFkQ29zdDogMCwKCQkJ
Y2FjaGVXcml0ZUNvc3Q6IDAsCgkJCW1pc3NpbmdDb3N0RW50cmllczogMAoJCX0pOwoJCWNvbnN0
IG1lcmdlVG90YWxzID0gKHRhcmdldCwgc291cmNlKSA9PiB7CgkJCXRhcmdldC5pbnB1dCArPSBz
b3VyY2UuaW5wdXQ7CgkJCXRhcmdldC5vdXRwdXQgKz0gc291cmNlLm91dHB1dDsKCQkJdGFyZ2V0
LmNhY2hlUmVhZCArPSBzb3VyY2UuY2FjaGVSZWFkOwoJCQl0YXJnZXQuY2FjaGVXcml0ZSArPSBz
b3VyY2UuY2FjaGVXcml0ZTsKCQkJdGFyZ2V0LnRvdGFsVG9rZW5zICs9IHNvdXJjZS50b3RhbFRv
a2VuczsKCQkJdGFyZ2V0LnRvdGFsQ29zdCArPSBzb3VyY2UudG90YWxDb3N0OwoJCQl0YXJnZXQu
aW5wdXRDb3N0ICs9IHNvdXJjZS5pbnB1dENvc3Q7CgkJCXRhcmdldC5vdXRwdXRDb3N0ICs9IHNv
dXJjZS5vdXRwdXRDb3N0OwoJCQl0YXJnZXQuY2FjaGVSZWFkQ29zdCArPSBzb3VyY2UuY2FjaGVS
ZWFkQ29zdDsKCQkJdGFyZ2V0LmNhY2hlV3JpdGVDb3N0ICs9IHNvdXJjZS5jYWNoZVdyaXRlQ29z
dDsKCQkJdGFyZ2V0Lm1pc3NpbmdDb3N0RW50cmllcyArPSBzb3VyY2UubWlzc2luZ0Nvc3RFbnRy
aWVzOwoJCX07CgkJZm9yIChjb25zdCBtZXJnZWQgb2YgbGltaXRlZEVudHJpZXMpIHsKCQkJY29u
c3QgYWdlbnRJZCA9IHBhcnNlQWdlbnRTZXNzaW9uS2V5KG1lcmdlZC5rZXkpPy5hZ2VudElkOwoJ
CQljb25zdCB1c2FnZSA9IGF3YWl0IGxvYWRTZXNzaW9uQ29zdFN1bW1hcnkoewoJCQkJc2Vzc2lv
bklkOiBtZXJnZWQuc2Vzc2lvbklkLAoJCQkJc2Vzc2lvbkVudHJ5OiBtZXJnZWQuc3RvcmVFbnRy
eSwKCQkJCXNlc3Npb25GaWxlOiBtZXJnZWQuc2Vzc2lvbkZpbGUsCgkJCQljb25maWcsCgkJCQlh
Z2VudElkLAoJCQkJc3RhcnRNcywKCQkJCWVuZE1zCgkJCX0pOwoJCQlpZiAodXNhZ2UpIHsKCQkJ
CWFnZ3JlZ2F0ZVRvdGFscy5pbnB1dCArPSB1c2FnZS5pbnB1dDsKCQkJCWFnZ3JlZ2F0ZVRvdGFs
cy5vdXRwdXQgKz0gdXNhZ2Uub3V0cHV0OwoJCQkJYWdncmVnYXRlVG90YWxzLmNhY2hlUmVhZCAr
PSB1c2FnZS5jYWNoZVJlYWQ7CgkJCQlhZ2dyZWdhdGVUb3RhbHMuY2FjaGVXcml0ZSArPSB1c2Fn
ZS5jYWNoZVdyaXRlOwoJCQkJYWdncmVnYXRlVG90YWxzLnRvdGFsVG9rZW5zICs9IHVzYWdlLnRv
dGFsVG9rZW5zOwoJCQkJYWdncmVnYXRlVG90YWxzLnRvdGFsQ29zdCArPSB1c2FnZS50b3RhbENv
c3Q7CgkJCQlhZ2dyZWdhdGVUb3RhbHMuaW5wdXRDb3N0ICs9IHVzYWdlLmlucHV0Q29zdDsKCQkJ
CWFnZ3JlZ2F0ZVRvdGFscy5vdXRwdXRDb3N0ICs9IHVzYWdlLm91dHB1dENvc3Q7CgkJCQlhZ2dy
ZWdhdGVUb3RhbHMuY2FjaGVSZWFkQ29zdCArPSB1c2FnZS5jYWNoZVJlYWRDb3N0OwoJCQkJYWdn
cmVnYXRlVG90YWxzLmNhY2hlV3JpdGVDb3N0ICs9IHVzYWdlLmNhY2hlV3JpdGVDb3N0OwoJCQkJ
YWdncmVnYXRlVG90YWxzLm1pc3NpbmdDb3N0RW50cmllcyArPSB1c2FnZS5taXNzaW5nQ29zdEVu
dHJpZXM7CgkJCX0KCQkJY29uc3QgY2hhbm5lbCA9IG1lcmdlZC5zdG9yZUVudHJ5Py5jaGFubmVs
ID8/IG1lcmdlZC5zdG9yZUVudHJ5Py5vcmlnaW4/LnByb3ZpZGVyOwoJCQljb25zdCBjaGF0VHlw
ZSA9IG1lcmdlZC5zdG9yZUVudHJ5Py5jaGF0VHlwZSA/PyBtZXJnZWQuc3RvcmVFbnRyeT8ub3Jp
Z2luPy5jaGF0VHlwZTsKCQkJaWYgKHVzYWdlKSB7CgkJCQlpZiAodXNhZ2UubWVzc2FnZUNvdW50
cykgewoJCQkJCWFnZ3JlZ2F0ZU1lc3NhZ2VzLnRvdGFsICs9IHVzYWdlLm1lc3NhZ2VDb3VudHMu
dG90YWw7CgkJCQkJYWdncmVnYXRlTWVzc2FnZXMudXNlciArPSB1c2FnZS5tZXNzYWdlQ291bnRz
LnVzZXI7CgkJCQkJYWdncmVnYXRlTWVzc2FnZXMuYXNzaXN0YW50ICs9IHVzYWdlLm1lc3NhZ2VD
b3VudHMuYXNzaXN0YW50OwoJCQkJCWFnZ3JlZ2F0ZU1lc3NhZ2VzLnRvb2xDYWxscyArPSB1c2Fn
ZS5tZXNzYWdlQ291bnRzLnRvb2xDYWxsczsKCQkJCQlhZ2dyZWdhdGVNZXNzYWdlcy50b29sUmVz
dWx0cyArPSB1c2FnZS5tZXNzYWdlQ291bnRzLnRvb2xSZXN1bHRzOwoJCQkJCWFnZ3JlZ2F0ZU1l
c3NhZ2VzLmVycm9ycyArPSB1c2FnZS5tZXNzYWdlQ291bnRzLmVycm9yczsKCQkJCX0KCQkJCWlm
ICh1c2FnZS50b29sVXNhZ2UpIGZvciAoY29uc3QgdG9vbCBvZiB1c2FnZS50b29sVXNhZ2UudG9v
bHMpIHRvb2xBZ2dyZWdhdGVNYXAuc2V0KHRvb2wubmFtZSwgKHRvb2xBZ2dyZWdhdGVNYXAuZ2V0
KHRvb2wubmFtZSkgPz8gMCkgKyB0b29sLmNvdW50KTsKCQkJCWlmICh1c2FnZS5tb2RlbFVzYWdl
KSBmb3IgKGNvbnN0IGVudHJ5IG9mIHVzYWdlLm1vZGVsVXNhZ2UpIHsKCQkJCQljb25zdCBtb2Rl
bEtleSA9IGAke2VudHJ5LnByb3ZpZGVyID8/ICJ1bmtub3duIn06OiR7ZW50cnkubW9kZWwgPz8g
InVua25vd24ifWA7CgkJCQkJY29uc3QgbW9kZWxFeGlzdGluZyA9IGJ5TW9kZWxNYXAuZ2V0KG1v
ZGVsS2V5KSA/PyB7CgkJCQkJCXByb3ZpZGVyOiBlbnRyeS5wcm92aWRlciwKCQkJCQkJbW9kZWw6
IGVudHJ5Lm1vZGVsLAoJCQkJCQljb3VudDogMCwKCQkJCQkJdG90YWxzOiBlbXB0eVRvdGFscygp
CgkJCQkJfTsKCQkJCQltb2RlbEV4aXN0aW5nLmNvdW50ICs9IGVudHJ5LmNvdW50OwoJCQkJCW1l
cmdlVG90YWxzKG1vZGVsRXhpc3RpbmcudG90YWxzLCBlbnRyeS50b3RhbHMpOwoJCQkJCWJ5TW9k
ZWxNYXAuc2V0KG1vZGVsS2V5LCBtb2RlbEV4aXN0aW5nKTsKCQkJCQljb25zdCBwcm92aWRlcktl
eSA9IGVudHJ5LnByb3ZpZGVyID8/ICJ1bmtub3duIjsKCQkJCQljb25zdCBwcm92aWRlckV4aXN0
aW5nID0gYnlQcm92aWRlck1hcC5nZXQocHJvdmlkZXJLZXkpID8/IHsKCQkJCQkJcHJvdmlkZXI6
IGVudHJ5LnByb3ZpZGVyLAoJCQkJCQltb2RlbDogdm9pZCAwLAoJCQkJCQljb3VudDogMCwKCQkJ
CQkJdG90YWxzOiBlbXB0eVRvdGFscygpCgkJCQkJfTsKCQkJCQlwcm92aWRlckV4aXN0aW5nLmNv
dW50ICs9IGVudHJ5LmNvdW50OwoJCQkJCW1lcmdlVG90YWxzKHByb3ZpZGVyRXhpc3RpbmcudG90
YWxzLCBlbnRyeS50b3RhbHMpOwoJCQkJCWJ5UHJvdmlkZXJNYXAuc2V0KHByb3ZpZGVyS2V5LCBw
cm92aWRlckV4aXN0aW5nKTsKCQkJCX0KCQkJCW1lcmdlVXNhZ2VMYXRlbmN5KGxhdGVuY3lUb3Rh
bHMsIHVzYWdlLmxhdGVuY3kpOwoJCQkJbWVyZ2VVc2FnZURhaWx5TGF0ZW5jeShkYWlseUxhdGVu
Y3lNYXAsIHVzYWdlLmRhaWx5TGF0ZW5jeSk7CgkJCQlpZiAodXNhZ2UuZGFpbHlNb2RlbFVzYWdl
KSBmb3IgKGNvbnN0IGVudHJ5IG9mIHVzYWdlLmRhaWx5TW9kZWxVc2FnZSkgewoJCQkJCWNvbnN0
IGtleSA9IGAke2VudHJ5LmRhdGV9Ojoke2VudHJ5LnByb3ZpZGVyID8/ICJ1bmtub3duIn06OiR7
ZW50cnkubW9kZWwgPz8gInVua25vd24ifWA7CgkJCQkJY29uc3QgZXhpc3RpbmcgPSBtb2RlbERh
aWx5TWFwLmdldChrZXkpID8/IHsKCQkJCQkJZGF0ZTogZW50cnkuZGF0ZSwKCQkJCQkJcHJvdmlk
ZXI6IGVudHJ5LnByb3ZpZGVyLAoJCQkJCQltb2RlbDogZW50cnkubW9kZWwsCgkJCQkJCXRva2Vu
czogMCwKCQkJCQkJY29zdDogMCwKCQkJCQkJY291bnQ6IDAKCQkJCQl9OwoJCQkJCWV4aXN0aW5n
LnRva2VucyArPSBlbnRyeS50b2tlbnM7CgkJCQkJZXhpc3RpbmcuY29zdCArPSBlbnRyeS5jb3N0
OwoJCQkJCWV4aXN0aW5nLmNvdW50ICs9IGVudHJ5LmNvdW50OwoJCQkJCW1vZGVsRGFpbHlNYXAu
c2V0KGtleSwgZXhpc3RpbmcpOwoJCQkJfQoJCQkJaWYgKGFnZW50SWQpIHsKCQkJCQljb25zdCBh
Z2VudFRvdGFscyA9IGJ5QWdlbnRNYXAuZ2V0KGFnZW50SWQpID8/IGVtcHR5VG90YWxzKCk7CgkJ
CQkJbWVyZ2VUb3RhbHMoYWdlbnRUb3RhbHMsIHVzYWdlKTsKCQkJCQlieUFnZW50TWFwLnNldChh
Z2VudElkLCBhZ2VudFRvdGFscyk7CgkJCQl9CgkJCQlpZiAoY2hhbm5lbCkgewoJCQkJCWNvbnN0
IGNoYW5uZWxUb3RhbHMgPSBieUNoYW5uZWxNYXAuZ2V0KGNoYW5uZWwpID8/IGVtcHR5VG90YWxz
KCk7CgkJCQkJbWVyZ2VUb3RhbHMoY2hhbm5lbFRvdGFscywgdXNhZ2UpOwoJCQkJCWJ5Q2hhbm5l
bE1hcC5zZXQoY2hhbm5lbCwgY2hhbm5lbFRvdGFscyk7CgkJCQl9CgkJCQlpZiAodXNhZ2UuZGFp
bHlCcmVha2Rvd24pIGZvciAoY29uc3QgZGF5IG9mIHVzYWdlLmRhaWx5QnJlYWtkb3duKSB7CgkJ
CQkJY29uc3QgZGFpbHkgPSBkYWlseUFnZ3JlZ2F0ZU1hcC5nZXQoZGF5LmRhdGUpID8/IHsKCQkJ
CQkJZGF0ZTogZGF5LmRhdGUsCgkJCQkJCXRva2VuczogMCwKCQkJCQkJY29zdDogMCwKCQkJCQkJ
bWVzc2FnZXM6IDAsCgkJCQkJCXRvb2xDYWxsczogMCwKCQkJCQkJZXJyb3JzOiAwCgkJCQkJfTsK
CQkJCQlkYWlseS50b2tlbnMgKz0gZGF5LnRva2VuczsKCQkJCQlkYWlseS5jb3N0ICs9IGRheS5j
b3N0OwoJCQkJCWRhaWx5QWdncmVnYXRlTWFwLnNldChkYXkuZGF0ZSwgZGFpbHkpOwoJCQkJfQoJ
CQkJaWYgKHVzYWdlLmRhaWx5TWVzc2FnZUNvdW50cykgZm9yIChjb25zdCBkYXkgb2YgdXNhZ2Uu
ZGFpbHlNZXNzYWdlQ291bnRzKSB7CgkJCQkJY29uc3QgZGFpbHkgPSBkYWlseUFnZ3JlZ2F0ZU1h
cC5nZXQoZGF5LmRhdGUpID8/IHsKCQkJCQkJZGF0ZTogZGF5LmRhdGUsCgkJCQkJCXRva2Vuczog
MCwKCQkJCQkJY29zdDogMCwKCQkJCQkJbWVzc2FnZXM6IDAsCgkJCQkJCXRvb2xDYWxsczogMCwK
CQkJCQkJZXJyb3JzOiAwCgkJCQkJfTsKCQkJCQlkYWlseS5tZXNzYWdlcyArPSBkYXkudG90YWw7
CgkJCQkJZGFpbHkudG9vbENhbGxzICs9IGRheS50b29sQ2FsbHM7CgkJCQkJZGFpbHkuZXJyb3Jz
ICs9IGRheS5lcnJvcnM7CgkJCQkJZGFpbHlBZ2dyZWdhdGVNYXAuc2V0KGRheS5kYXRlLCBkYWls
eSk7CgkJCQl9CgkJCX0KCQkJc2Vzc2lvbnMucHVzaCh7CgkJCQlrZXk6IG1lcmdlZC5rZXksCgkJ
CQlsYWJlbDogbWVyZ2VkLmxhYmVsLAoJCQkJc2Vzc2lvbklkOiBtZXJnZWQuc2Vzc2lvbklkLAoJ
CQkJdXBkYXRlZEF0OiBtZXJnZWQudXBkYXRlZEF0LAoJCQkJYWdlbnRJZCwKCQkJCWNoYW5uZWws
CgkJCQljaGF0VHlwZSwKCQkJCW9yaWdpbjogbWVyZ2VkLnN0b3JlRW50cnk/Lm9yaWdpbiwKCQkJ
CW1vZGVsT3ZlcnJpZGU6IG1lcmdlZC5zdG9yZUVudHJ5Py5tb2RlbE92ZXJyaWRlLAoJCQkJcHJv
dmlkZXJPdmVycmlkZTogbWVyZ2VkLnN0b3JlRW50cnk/LnByb3ZpZGVyT3ZlcnJpZGUsCgkJCQlt
b2RlbFByb3ZpZGVyOiBtZXJnZWQuc3RvcmVFbnRyeT8ubW9kZWxQcm92aWRlciwKCQkJCW1vZGVs
OiBtZXJnZWQuc3RvcmVFbnRyeT8ubW9kZWwsCgkJCQl1c2FnZSwKCQkJCWNvbnRleHRXZWlnaHQ6
IGluY2x1ZGVDb250ZXh0V2VpZ2h0ID8gbWVyZ2VkLnN0b3JlRW50cnk/LnN5c3RlbVByb21wdFJl
cG9ydCA/PyBudWxsIDogdm9pZCAwCgkJCX0pOwoJCX0KCQljb25zdCBmb3JtYXREYXRlU3RyID0g
KG1zKSA9PiB7CgkJCWNvbnN0IGQgPSBuZXcgRGF0ZShtcyk7CgkJCXJldHVybiBgJHtkLmdldFVU
Q0Z1bGxZZWFyKCl9LSR7U3RyaW5nKGQuZ2V0VVRDTW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICIw
Iil9LSR7U3RyaW5nKGQuZ2V0VVRDRGF0ZSgpKS5wYWRTdGFydCgyLCAiMCIpfWA7CgkJfTsKCQlj
b25zdCB0YWlsID0gYnVpbGRVc2FnZUFnZ3JlZ2F0ZVRhaWwoewoJCQlieUNoYW5uZWxNYXAsCgkJ
CWxhdGVuY3lUb3RhbHMsCgkJCWRhaWx5TGF0ZW5jeU1hcCwKCQkJbW9kZWxEYWlseU1hcCwKCQkJ
ZGFpbHlNYXA6IGRhaWx5QWdncmVnYXRlTWFwCgkJfSk7CgkJY29uc3QgYWdncmVnYXRlcyA9IHsK
CQkJbWVzc2FnZXM6IGFnZ3JlZ2F0ZU1lc3NhZ2VzLAoJCQl0b29sczogewoJCQkJdG90YWxDYWxs
czogQXJyYXkuZnJvbSh0b29sQWdncmVnYXRlTWFwLnZhbHVlcygpKS5yZWR1Y2UoKHN1bSwgY291
bnQpID0+IHN1bSArIGNvdW50LCAwKSwKCQkJCXVuaXF1ZVRvb2xzOiB0b29sQWdncmVnYXRlTWFw
LnNpemUsCgkJCQl0b29sczogQXJyYXkuZnJvbSh0b29sQWdncmVnYXRlTWFwLmVudHJpZXMoKSku
bWFwKChbbmFtZSwgY291bnRdKSA9PiAoewoJCQkJCW5hbWUsCgkJCQkJY291bnQKCQkJCX0pKS50
b1NvcnRlZCgoYSwgYikgPT4gYi5jb3VudCAtIGEuY291bnQpCgkJCX0sCgkJCWJ5TW9kZWw6IEFy
cmF5LmZyb20oYnlNb2RlbE1hcC52YWx1ZXMoKSkudG9Tb3J0ZWQoKGEsIGIpID0+IHsKCQkJCWNv
bnN0IGNvc3REaWZmID0gYi50b3RhbHMudG90YWxDb3N0IC0gYS50b3RhbHMudG90YWxDb3N0OwoJ
CQkJaWYgKGNvc3REaWZmICE9PSAwKSByZXR1cm4gY29zdERpZmY7CgkJCQlyZXR1cm4gYi50b3Rh
bHMudG90YWxUb2tlbnMgLSBhLnRvdGFscy50b3RhbFRva2VuczsKCQkJfSksCgkJCWJ5UHJvdmlk
ZXI6IEFycmF5LmZyb20oYnlQcm92aWRlck1hcC52YWx1ZXMoKSkudG9Tb3J0ZWQoKGEsIGIpID0+
IHsKCQkJCWNvbnN0IGNvc3REaWZmID0gYi50b3RhbHMudG90YWxDb3N0IC0gYS50b3RhbHMudG90
YWxDb3N0OwoJCQkJaWYgKGNvc3REaWZmICE9PSAwKSByZXR1cm4gY29zdERpZmY7CgkJCQlyZXR1
cm4gYi50b3RhbHMudG90YWxUb2tlbnMgLSBhLnRvdGFscy50b3RhbFRva2VuczsKCQkJfSksCgkJ
CWJ5QWdlbnQ6IEFycmF5LmZyb20oYnlBZ2VudE1hcC5lbnRyaWVzKCkpLm1hcCgoW2lkLCB0b3Rh
bHNdKSA9PiAoewoJCQkJYWdlbnRJZDogaWQsCgkJCQl0b3RhbHMKCQkJfSkpLnRvU29ydGVkKChh
LCBiKSA9PiBiLnRvdGFscy50b3RhbENvc3QgLSBhLnRvdGFscy50b3RhbENvc3QpLAoJCQkuLi50
YWlsCgkJfTsKCQlyZXNwb25kKHRydWUsIHsKCQkJdXBkYXRlZEF0OiBub3csCgkJCXN0YXJ0RGF0
ZTogZm9ybWF0RGF0ZVN0cihzdGFydE1zKSwKCQkJZW5kRGF0ZTogZm9ybWF0RGF0ZVN0cihlbmRN
cyksCgkJCXNlc3Npb25zLAoJCQl0b3RhbHM6IGFnZ3JlZ2F0ZVRvdGFscywKCQkJYWdncmVnYXRl
cwoJCX0sIHZvaWQgMCk7Cgl9LAoJInNlc3Npb25zLnVzYWdlLnRpbWVzZXJpZXMiOiBhc3luYyAo
eyByZXNwb25kLCBwYXJhbXMgfSkgPT4gewoJCWNvbnN0IGtleSA9IHR5cGVvZiBwYXJhbXM/Lmtl
eSA9PT0gInN0cmluZyIgPyBwYXJhbXMua2V5LnRyaW0oKSA6IG51bGw7CgkJaWYgKCFrZXkpIHsK
CQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9S
RVFVRVNULCAia2V5IGlzIHJlcXVpcmVkIGZvciB0aW1lc2VyaWVzIikpOwoJCQlyZXR1cm47CgkJ
fQoJCWNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZVNlc3Npb25Vc2FnZUZpbGVPclJlc3BvbmQoa2V5
LCByZXNwb25kKTsKCQlpZiAoIXJlc29sdmVkKSByZXR1cm47CgkJY29uc3QgeyBjb25maWcsIGVu
dHJ5LCBhZ2VudElkLCBzZXNzaW9uSWQsIHNlc3Npb25GaWxlIH0gPSByZXNvbHZlZDsKCQljb25z
dCB0aW1lc2VyaWVzID0gYXdhaXQgbG9hZFNlc3Npb25Vc2FnZVRpbWVTZXJpZXMoewoJCQlzZXNz
aW9uSWQsCgkJCXNlc3Npb25FbnRyeTogZW50cnksCgkJCXNlc3Npb25GaWxlLAoJCQljb25maWcs
CgkJCWFnZW50SWQsCgkJCW1heFBvaW50czogMjAwCgkJfSk7CgkJaWYgKCF0aW1lc2VyaWVzKSB7
CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURf
UkVRVUVTVCwgYE5vIHRyYW5zY3JpcHQgZm91bmQgZm9yIHNlc3Npb246ICR7a2V5fWApKTsKCQkJ
cmV0dXJuOwoJCX0KCQlyZXNwb25kKHRydWUsIHRpbWVzZXJpZXMsIHZvaWQgMCk7Cgl9LAoJInNl
c3Npb25zLnVzYWdlLmxvZ3MiOiBhc3luYyAoeyByZXNwb25kLCBwYXJhbXMgfSkgPT4gewoJCWNv
bnN0IGtleSA9IHR5cGVvZiBwYXJhbXM/LmtleSA9PT0gInN0cmluZyIgPyBwYXJhbXMua2V5LnRy
aW0oKSA6IG51bGw7CgkJaWYgKCFrZXkpIHsKCQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJv
clNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCAia2V5IGlzIHJlcXVpcmVkIGZvciBs
b2dzIikpOwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0IGxpbWl0ID0gdHlwZW9mIHBhcmFtcz8ubGlt
aXQgPT09ICJudW1iZXIiICYmIE51bWJlci5pc0Zpbml0ZShwYXJhbXMubGltaXQpID8gTWF0aC5t
aW4ocGFyYW1zLmxpbWl0LCAxZTMpIDogMjAwOwoJCWNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZVNl
c3Npb25Vc2FnZUZpbGVPclJlc3BvbmQoa2V5LCByZXNwb25kKTsKCQlpZiAoIXJlc29sdmVkKSBy
ZXR1cm47CgkJY29uc3QgeyBjb25maWcsIGVudHJ5LCBhZ2VudElkLCBzZXNzaW9uSWQsIHNlc3Np
b25GaWxlIH0gPSByZXNvbHZlZDsKCQljb25zdCB7IGxvYWRTZXNzaW9uTG9ncyB9ID0gYXdhaXQg
aW1wb3J0KCIuL3Nlc3Npb24tY29zdC11c2FnZS1CN1lTc2xvXy5qcyIpLnRoZW4oKG4pID0+IG4u
YSk7CgkJcmVzcG9uZCh0cnVlLCB7IGxvZ3M6IGF3YWl0IGxvYWRTZXNzaW9uTG9ncyh7CgkJCXNl
c3Npb25JZCwKCQkJc2Vzc2lvbkVudHJ5OiBlbnRyeSwKCQkJc2Vzc2lvbkZpbGUsCgkJCWNvbmZp
ZywKCQkJYWdlbnRJZCwKCQkJbGltaXQKCQl9KSA/PyBbXSB9LCB2b2lkIDApOwoJfQp9OwovLyNl
bmRyZWdpb24KLy8jcmVnaW9uIHNyYy9nYXRld2F5L3NlcnZlci1tZXRob2RzL3ZvaWNld2FrZS50
cwpjb25zdCB2b2ljZXdha2VIYW5kbGVycyA9IHsKCSJ2b2ljZXdha2UuZ2V0IjogYXN5bmMgKHsg
cmVzcG9uZCB9KSA9PiB7CgkJdHJ5IHsKCQkJcmVzcG9uZCh0cnVlLCB7IHRyaWdnZXJzOiAoYXdh
aXQgbG9hZFZvaWNlV2FrZUNvbmZpZygpKS50cmlnZ2VycyB9KTsKCQl9IGNhdGNoIChlcnIpIHsK
CQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuVU5BVkFJTEFC
TEUsIGZvcm1hdEZvckxvZyhlcnIpKSk7CgkJfQoJfSwKCSJ2b2ljZXdha2Uuc2V0IjogYXN5bmMg
KHsgcGFyYW1zLCByZXNwb25kLCBjb250ZXh0IH0pID0+IHsKCQlpZiAoIUFycmF5LmlzQXJyYXko
cGFyYW1zLnRyaWdnZXJzKSkgewoJCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUo
RXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsICJ2b2ljZXdha2Uuc2V0IHJlcXVpcmVzIHRyaWdn
ZXJzOiBzdHJpbmdbXSIpKTsKCQkJcmV0dXJuOwoJCX0KCQl0cnkgewoJCQljb25zdCBjZmcgPSBh
d2FpdCBzZXRWb2ljZVdha2VUcmlnZ2Vycyhub3JtYWxpemVWb2ljZVdha2VUcmlnZ2VycyhwYXJh
bXMudHJpZ2dlcnMpKTsKCQkJY29udGV4dC5icm9hZGNhc3RWb2ljZVdha2VDaGFuZ2VkKGNmZy50
cmlnZ2Vycyk7CgkJCXJlc3BvbmQodHJ1ZSwgeyB0cmlnZ2VyczogY2ZnLnRyaWdnZXJzIH0pOwoJ
CX0gY2F0Y2ggKGVycikgewoJCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJy
b3JDb2Rlcy5VTkFWQUlMQUJMRSwgZm9ybWF0Rm9yTG9nKGVycikpKTsKCQl9Cgl9Cn07Ci8vI2Vu
ZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dhdGV3YXkvc2VydmVyLW1ldGhvZHMvd2ViLnRzCmNvbnN0
IFdFQl9MT0dJTl9NRVRIT0RTID0gbmV3IFNldChbIndlYi5sb2dpbi5zdGFydCIsICJ3ZWIubG9n
aW4ud2FpdCJdKTsKY29uc3QgcmVzb2x2ZVdlYkxvZ2luUHJvdmlkZXIgPSAoKSA9PiBsaXN0Q2hh
bm5lbFBsdWdpbnMoKS5maW5kKChwbHVnaW4pID0+IChwbHVnaW4uZ2F0ZXdheU1ldGhvZHMgPz8g
W10pLnNvbWUoKG1ldGhvZCkgPT4gV0VCX0xPR0lOX01FVEhPRFMuaGFzKG1ldGhvZCkpKSA/PyBu
dWxsOwpmdW5jdGlvbiByZXNvbHZlQWNjb3VudElkKHBhcmFtcykgewoJcmV0dXJuIHR5cGVvZiBw
YXJhbXMuYWNjb3VudElkID09PSAic3RyaW5nIiA/IHBhcmFtcy5hY2NvdW50SWQgOiB2b2lkIDA7
Cn0KZnVuY3Rpb24gcmVzcG9uZFByb3ZpZGVyVW5hdmFpbGFibGUocmVzcG9uZCkgewoJcmVzcG9u
ZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCAi
d2ViIGxvZ2luIHByb3ZpZGVyIGlzIG5vdCBhdmFpbGFibGUiKSk7Cn0KZnVuY3Rpb24gcmVzcG9u
ZFByb3ZpZGVyVW5zdXBwb3J0ZWQocmVzcG9uZCwgcHJvdmlkZXJJZCkgewoJcmVzcG9uZChmYWxz
ZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCBgd2ViIGxv
Z2luIGlzIG5vdCBzdXBwb3J0ZWQgYnkgcHJvdmlkZXIgJHtwcm92aWRlcklkfWApKTsKfQpjb25z
dCB3ZWJIYW5kbGVycyA9IHsKCSJ3ZWIubG9naW4uc3RhcnQiOiBhc3luYyAoeyBwYXJhbXMsIHJl
c3BvbmQsIGNvbnRleHQgfSkgPT4gewoJCWlmICghdmFsaWRhdGVXZWJMb2dpblN0YXJ0UGFyYW1z
KHBhcmFtcykpIHsKCQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29k
ZXMuSU5WQUxJRF9SRVFVRVNULCBgaW52YWxpZCB3ZWIubG9naW4uc3RhcnQgcGFyYW1zOiAke2Zv
cm1hdFZhbGlkYXRpb25FcnJvcnModmFsaWRhdGVXZWJMb2dpblN0YXJ0UGFyYW1zLmVycm9ycyl9
YCkpOwoJCQlyZXR1cm47CgkJfQoJCXRyeSB7CgkJCWNvbnN0IGFjY291bnRJZCA9IHJlc29sdmVB
Y2NvdW50SWQocGFyYW1zKTsKCQkJY29uc3QgcHJvdmlkZXIgPSByZXNvbHZlV2ViTG9naW5Qcm92
aWRlcigpOwoJCQlpZiAoIXByb3ZpZGVyKSB7CgkJCQlyZXNwb25kUHJvdmlkZXJVbmF2YWlsYWJs
ZShyZXNwb25kKTsKCQkJCXJldHVybjsKCQkJfQoJCQlhd2FpdCBjb250ZXh0LnN0b3BDaGFubmVs
KHByb3ZpZGVyLmlkLCBhY2NvdW50SWQpOwoJCQlpZiAoIXByb3ZpZGVyLmdhdGV3YXk/LmxvZ2lu
V2l0aFFyU3RhcnQpIHsKCQkJCXJlc3BvbmRQcm92aWRlclVuc3VwcG9ydGVkKHJlc3BvbmQsIHBy
b3ZpZGVyLmlkKTsKCQkJCXJldHVybjsKCQkJfQoJCQlyZXNwb25kKHRydWUsIGF3YWl0IHByb3Zp
ZGVyLmdhdGV3YXkubG9naW5XaXRoUXJTdGFydCh7CgkJCQlmb3JjZTogQm9vbGVhbihwYXJhbXMu
Zm9yY2UpLAoJCQkJdGltZW91dE1zOiB0eXBlb2YgcGFyYW1zLnRpbWVvdXRNcyA9PT0gIm51bWJl
ciIgPyBwYXJhbXMudGltZW91dE1zIDogdm9pZCAwLAoJCQkJdmVyYm9zZTogQm9vbGVhbihwYXJh
bXMudmVyYm9zZSksCgkJCQlhY2NvdW50SWQKCQkJfSksIHZvaWQgMCk7CgkJfSBjYXRjaCAoZXJy
KSB7CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLlVOQVZB
SUxBQkxFLCBmb3JtYXRGb3JMb2coZXJyKSkpOwoJCX0KCX0sCgkid2ViLmxvZ2luLndhaXQiOiBh
c3luYyAoeyBwYXJhbXMsIHJlc3BvbmQsIGNvbnRleHQgfSkgPT4gewoJCWlmICghdmFsaWRhdGVX
ZWJMb2dpbldhaXRQYXJhbXMocGFyYW1zKSkgewoJCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVy
cm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsIGBpbnZhbGlkIHdlYi5sb2dpbi53
YWl0IHBhcmFtczogJHtmb3JtYXRWYWxpZGF0aW9uRXJyb3JzKHZhbGlkYXRlV2ViTG9naW5XYWl0
UGFyYW1zLmVycm9ycyl9YCkpOwoJCQlyZXR1cm47CgkJfQoJCXRyeSB7CgkJCWNvbnN0IGFjY291
bnRJZCA9IHJlc29sdmVBY2NvdW50SWQocGFyYW1zKTsKCQkJY29uc3QgcHJvdmlkZXIgPSByZXNv
bHZlV2ViTG9naW5Qcm92aWRlcigpOwoJCQlpZiAoIXByb3ZpZGVyKSB7CgkJCQlyZXNwb25kUHJv
dmlkZXJVbmF2YWlsYWJsZShyZXNwb25kKTsKCQkJCXJldHVybjsKCQkJfQoJCQlpZiAoIXByb3Zp
ZGVyLmdhdGV3YXk/LmxvZ2luV2l0aFFyV2FpdCkgewoJCQkJcmVzcG9uZFByb3ZpZGVyVW5zdXBw
b3J0ZWQocmVzcG9uZCwgcHJvdmlkZXIuaWQpOwoJCQkJcmV0dXJuOwoJCQl9CgkJCWNvbnN0IHJl
c3VsdCA9IGF3YWl0IHByb3ZpZGVyLmdhdGV3YXkubG9naW5XaXRoUXJXYWl0KHsKCQkJCXRpbWVv
dXRNczogdHlwZW9mIHBhcmFtcy50aW1lb3V0TXMgPT09ICJudW1iZXIiID8gcGFyYW1zLnRpbWVv
dXRNcyA6IHZvaWQgMCwKCQkJCWFjY291bnRJZAoJCQl9KTsKCQkJaWYgKHJlc3VsdC5jb25uZWN0
ZWQpIGF3YWl0IGNvbnRleHQuc3RhcnRDaGFubmVsKHByb3ZpZGVyLmlkLCBhY2NvdW50SWQpOwoJ
CQlyZXNwb25kKHRydWUsIHJlc3VsdCwgdm9pZCAwKTsKCQl9IGNhdGNoIChlcnIpIHsKCQkJcmVz
cG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuVU5BVkFJTEFCTEUsIGZv
cm1hdEZvckxvZyhlcnIpKSk7CgkJfQoJfQp9OwovLyNlbmRyZWdpb24KLy8jcmVnaW9uIHNyYy93
aXphcmQvc2Vzc2lvbi50cwpmdW5jdGlvbiBjcmVhdGVEZWZlcnJlZCgpIHsKCWxldCByZXNvbHZl
OwoJbGV0IHJlamVjdDsKCXJldHVybiB7CgkJcHJvbWlzZTogbmV3IFByb21pc2UoKHJlcywgcmVq
KSA9PiB7CgkJCXJlc29sdmUgPSByZXM7CgkJCXJlamVjdCA9IHJlajsKCQl9KSwKCQlyZXNvbHZl
LAoJCXJlamVjdAoJfTsKfQp2YXIgV2l6YXJkU2Vzc2lvblByb21wdGVyID0gY2xhc3MgewoJY29u
c3RydWN0b3Ioc2Vzc2lvbikgewoJCXRoaXMuc2Vzc2lvbiA9IHNlc3Npb247Cgl9Cglhc3luYyBp
bnRybyh0aXRsZSkgewoJCWF3YWl0IHRoaXMucHJvbXB0KHsKCQkJdHlwZTogIm5vdGUiLAoJCQl0
aXRsZSwKCQkJbWVzc2FnZTogIiIsCgkJCWV4ZWN1dG9yOiAiY2xpZW50IgoJCX0pOwoJfQoJYXN5
bmMgb3V0cm8obWVzc2FnZSkgewoJCWF3YWl0IHRoaXMucHJvbXB0KHsKCQkJdHlwZTogIm5vdGUi
LAoJCQl0aXRsZTogIkRvbmUiLAoJCQltZXNzYWdlLAoJCQlleGVjdXRvcjogImNsaWVudCIKCQl9
KTsKCX0KCWFzeW5jIG5vdGUobWVzc2FnZSwgdGl0bGUpIHsKCQlhd2FpdCB0aGlzLnByb21wdCh7
CgkJCXR5cGU6ICJub3RlIiwKCQkJdGl0bGUsCgkJCW1lc3NhZ2UsCgkJCWV4ZWN1dG9yOiAiY2xp
ZW50IgoJCX0pOwoJfQoJYXN5bmMgc2VsZWN0KHBhcmFtcykgewoJCXJldHVybiBhd2FpdCB0aGlz
LnByb21wdCh7CgkJCXR5cGU6ICJzZWxlY3QiLAoJCQltZXNzYWdlOiBwYXJhbXMubWVzc2FnZSwK
CQkJb3B0aW9uczogcGFyYW1zLm9wdGlvbnMubWFwKChvcHQpID0+ICh7CgkJCQl2YWx1ZTogb3B0
LnZhbHVlLAoJCQkJbGFiZWw6IG9wdC5sYWJlbCwKCQkJCWhpbnQ6IG9wdC5oaW50CgkJCX0pKSwK
CQkJaW5pdGlhbFZhbHVlOiBwYXJhbXMuaW5pdGlhbFZhbHVlLAoJCQlleGVjdXRvcjogImNsaWVu
dCIKCQl9KTsKCX0KCWFzeW5jIG11bHRpc2VsZWN0KHBhcmFtcykgewoJCWNvbnN0IHJlcyA9IGF3
YWl0IHRoaXMucHJvbXB0KHsKCQkJdHlwZTogIm11bHRpc2VsZWN0IiwKCQkJbWVzc2FnZTogcGFy
YW1zLm1lc3NhZ2UsCgkJCW9wdGlvbnM6IHBhcmFtcy5vcHRpb25zLm1hcCgob3B0KSA9PiAoewoJ
CQkJdmFsdWU6IG9wdC52YWx1ZSwKCQkJCWxhYmVsOiBvcHQubGFiZWwsCgkJCQloaW50OiBvcHQu
aGludAoJCQl9KSksCgkJCWluaXRpYWxWYWx1ZTogcGFyYW1zLmluaXRpYWxWYWx1ZXMsCgkJCWV4
ZWN1dG9yOiAiY2xpZW50IgoJCX0pOwoJCXJldHVybiBBcnJheS5pc0FycmF5KHJlcykgPyByZXMg
OiBbXTsKCX0KCWFzeW5jIHRleHQocGFyYW1zKSB7CgkJY29uc3QgcmVzID0gYXdhaXQgdGhpcy5w
cm9tcHQoewoJCQl0eXBlOiAidGV4dCIsCgkJCW1lc3NhZ2U6IHBhcmFtcy5tZXNzYWdlLAoJCQlp
bml0aWFsVmFsdWU6IHBhcmFtcy5pbml0aWFsVmFsdWUsCgkJCXBsYWNlaG9sZGVyOiBwYXJhbXMu
cGxhY2Vob2xkZXIsCgkJCWV4ZWN1dG9yOiAiY2xpZW50IgoJCX0pOwoJCWNvbnN0IHZhbHVlID0g
cmVzID09PSBudWxsIHx8IHJlcyA9PT0gdm9pZCAwID8gIiIgOiB0eXBlb2YgcmVzID09PSAic3Ry
aW5nIiA/IHJlcyA6IHR5cGVvZiByZXMgPT09ICJudW1iZXIiIHx8IHR5cGVvZiByZXMgPT09ICJi
b29sZWFuIiB8fCB0eXBlb2YgcmVzID09PSAiYmlnaW50IiA/IFN0cmluZyhyZXMpIDogIiI7CgkJ
Y29uc3QgZXJyb3IgPSBwYXJhbXMudmFsaWRhdGU/Lih2YWx1ZSk7CgkJaWYgKGVycm9yKSB0aHJv
dyBuZXcgRXJyb3IoZXJyb3IpOwoJCXJldHVybiB2YWx1ZTsKCX0KCWFzeW5jIGNvbmZpcm0ocGFy
YW1zKSB7CgkJY29uc3QgcmVzID0gYXdhaXQgdGhpcy5wcm9tcHQoewoJCQl0eXBlOiAiY29uZmly
bSIsCgkJCW1lc3NhZ2U6IHBhcmFtcy5tZXNzYWdlLAoJCQlpbml0aWFsVmFsdWU6IHBhcmFtcy5p
bml0aWFsVmFsdWUsCgkJCWV4ZWN1dG9yOiAiY2xpZW50IgoJCX0pOwoJCXJldHVybiBCb29sZWFu
KHJlcyk7Cgl9Cglwcm9ncmVzcyhfbGFiZWwpIHsKCQlyZXR1cm4gewoJCQl1cGRhdGU6IChfbWVz
c2FnZSkgPT4ge30sCgkJCXN0b3A6IChfbWVzc2FnZSkgPT4ge30KCQl9OwoJfQoJYXN5bmMgcHJv
bXB0KHN0ZXApIHsKCQlyZXR1cm4gYXdhaXQgdGhpcy5zZXNzaW9uLmF3YWl0QW5zd2VyKHsKCQkJ
Li4uc3RlcCwKCQkJaWQ6IHJhbmRvbVVVSUQoKQoJCX0pOwoJfQp9Owp2YXIgV2l6YXJkU2Vzc2lv
biA9IGNsYXNzIHsKCWNvbnN0cnVjdG9yKHJ1bm5lcikgewoJCXRoaXMucnVubmVyID0gcnVubmVy
OwoJCXRoaXMuY3VycmVudFN0ZXAgPSBudWxsOwoJCXRoaXMuc3RlcERlZmVycmVkID0gbnVsbDsK
CQl0aGlzLmFuc3dlckRlZmVycmVkID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKCQl0aGlz
LnN0YXR1cyA9ICJydW5uaW5nIjsKCQljb25zdCBwcm9tcHRlciA9IG5ldyBXaXphcmRTZXNzaW9u
UHJvbXB0ZXIodGhpcyk7CgkJdGhpcy5ydW4ocHJvbXB0ZXIpOwoJfQoJYXN5bmMgbmV4dCgpIHsK
CQlpZiAodGhpcy5jdXJyZW50U3RlcCkgcmV0dXJuIHsKCQkJZG9uZTogZmFsc2UsCgkJCXN0ZXA6
IHRoaXMuY3VycmVudFN0ZXAsCgkJCXN0YXR1czogdGhpcy5zdGF0dXMKCQl9OwoJCWlmICh0aGlz
LnN0YXR1cyAhPT0gInJ1bm5pbmciKSByZXR1cm4gewoJCQlkb25lOiB0cnVlLAoJCQlzdGF0dXM6
IHRoaXMuc3RhdHVzLAoJCQllcnJvcjogdGhpcy5lcnJvcgoJCX07CgkJaWYgKCF0aGlzLnN0ZXBE
ZWZlcnJlZCkgdGhpcy5zdGVwRGVmZXJyZWQgPSBjcmVhdGVEZWZlcnJlZCgpOwoJCWNvbnN0IHN0
ZXAgPSBhd2FpdCB0aGlzLnN0ZXBEZWZlcnJlZC5wcm9taXNlOwoJCWlmIChzdGVwKSByZXR1cm4g
ewoJCQlkb25lOiBmYWxzZSwKCQkJc3RlcCwKCQkJc3RhdHVzOiB0aGlzLnN0YXR1cwoJCX07CgkJ
cmV0dXJuIHsKCQkJZG9uZTogdHJ1ZSwKCQkJc3RhdHVzOiB0aGlzLnN0YXR1cywKCQkJZXJyb3I6
IHRoaXMuZXJyb3IKCQl9OwoJfQoJYXN5bmMgYW5zd2VyKHN0ZXBJZCwgdmFsdWUpIHsKCQljb25z
dCBkZWZlcnJlZCA9IHRoaXMuYW5zd2VyRGVmZXJyZWQuZ2V0KHN0ZXBJZCk7CgkJaWYgKCFkZWZl
cnJlZCkgdGhyb3cgbmV3IEVycm9yKCJ3aXphcmQ6IG5vIHBlbmRpbmcgc3RlcCIpOwoJCXRoaXMu
YW5zd2VyRGVmZXJyZWQuZGVsZXRlKHN0ZXBJZCk7CgkJdGhpcy5jdXJyZW50U3RlcCA9IG51bGw7
CgkJZGVmZXJyZWQucmVzb2x2ZSh2YWx1ZSk7Cgl9CgljYW5jZWwoKSB7CgkJaWYgKHRoaXMuc3Rh
dHVzICE9PSAicnVubmluZyIpIHJldHVybjsKCQl0aGlzLnN0YXR1cyA9ICJjYW5jZWxsZWQiOwoJ
CXRoaXMuZXJyb3IgPSAiY2FuY2VsbGVkIjsKCQl0aGlzLmN1cnJlbnRTdGVwID0gbnVsbDsKCQlm
b3IgKGNvbnN0IFssIGRlZmVycmVkXSBvZiB0aGlzLmFuc3dlckRlZmVycmVkKSBkZWZlcnJlZC5y
ZWplY3QobmV3IFdpemFyZENhbmNlbGxlZEVycm9yKCkpOwoJCXRoaXMuYW5zd2VyRGVmZXJyZWQu
Y2xlYXIoKTsKCQl0aGlzLnJlc29sdmVTdGVwKG51bGwpOwoJfQoJcHVzaFN0ZXAoc3RlcCkgewoJ
CXRoaXMuY3VycmVudFN0ZXAgPSBzdGVwOwoJCXRoaXMucmVzb2x2ZVN0ZXAoc3RlcCk7Cgl9Cglh
c3luYyBydW4ocHJvbXB0ZXIpIHsKCQl0cnkgewoJCQlhd2FpdCB0aGlzLnJ1bm5lcihwcm9tcHRl
cik7CgkJCXRoaXMuc3RhdHVzID0gImRvbmUiOwoJCX0gY2F0Y2ggKGVycikgewoJCQlpZiAoZXJy
IGluc3RhbmNlb2YgV2l6YXJkQ2FuY2VsbGVkRXJyb3IpIHsKCQkJCXRoaXMuc3RhdHVzID0gImNh
bmNlbGxlZCI7CgkJCQl0aGlzLmVycm9yID0gZXJyLm1lc3NhZ2U7CgkJCX0gZWxzZSB7CgkJCQl0
aGlzLnN0YXR1cyA9ICJlcnJvciI7CgkJCQl0aGlzLmVycm9yID0gU3RyaW5nKGVycik7CgkJCX0K
CQl9IGZpbmFsbHkgewoJCQl0aGlzLnJlc29sdmVTdGVwKG51bGwpOwoJCX0KCX0KCWFzeW5jIGF3
YWl0QW5zd2VyKHN0ZXApIHsKCQlpZiAodGhpcy5zdGF0dXMgIT09ICJydW5uaW5nIikgdGhyb3cg
bmV3IEVycm9yKCJ3aXphcmQ6IHNlc3Npb24gbm90IHJ1bm5pbmciKTsKCQl0aGlzLnB1c2hTdGVw
KHN0ZXApOwoJCWNvbnN0IGRlZmVycmVkID0gY3JlYXRlRGVmZXJyZWQoKTsKCQl0aGlzLmFuc3dl
ckRlZmVycmVkLnNldChzdGVwLmlkLCBkZWZlcnJlZCk7CgkJcmV0dXJuIGF3YWl0IGRlZmVycmVk
LnByb21pc2U7Cgl9CglyZXNvbHZlU3RlcChzdGVwKSB7CgkJaWYgKCF0aGlzLnN0ZXBEZWZlcnJl
ZCkgcmV0dXJuOwoJCWNvbnN0IGRlZmVycmVkID0gdGhpcy5zdGVwRGVmZXJyZWQ7CgkJdGhpcy5z
dGVwRGVmZXJyZWQgPSBudWxsOwoJCWRlZmVycmVkLnJlc29sdmUoc3RlcCk7Cgl9CglnZXRTdGF0
dXMoKSB7CgkJcmV0dXJuIHRoaXMuc3RhdHVzOwoJfQoJZ2V0RXJyb3IoKSB7CgkJcmV0dXJuIHRo
aXMuZXJyb3I7Cgl9Cn07Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dhdGV3YXkvc2VydmVy
LW1ldGhvZHMvd2l6YXJkLnRzCmZ1bmN0aW9uIHJlYWRXaXphcmRTdGF0dXMoc2Vzc2lvbikgewoJ
cmV0dXJuIHsKCQlzdGF0dXM6IHNlc3Npb24uZ2V0U3RhdHVzKCksCgkJZXJyb3I6IHNlc3Npb24u
Z2V0RXJyb3IoKQoJfTsKfQpmdW5jdGlvbiBmaW5kV2l6YXJkU2Vzc2lvbk9yUmVzcG9uZChwYXJh
bXMpIHsKCWNvbnN0IHNlc3Npb24gPSBwYXJhbXMuY29udGV4dC53aXphcmRTZXNzaW9ucy5nZXQo
cGFyYW1zLnNlc3Npb25JZCk7CglpZiAoIXNlc3Npb24pIHsKCQlwYXJhbXMucmVzcG9uZChmYWxz
ZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCAid2l6YXJk
IG5vdCBmb3VuZCIpKTsKCQlyZXR1cm4gbnVsbDsKCX0KCXJldHVybiBzZXNzaW9uOwp9CmNvbnN0
IHdpemFyZEhhbmRsZXJzID0gewoJIndpemFyZC5zdGFydCI6IGFzeW5jICh7IHBhcmFtcywgcmVz
cG9uZCwgY29udGV4dCB9KSA9PiB7CgkJaWYgKCFhc3NlcnRWYWxpZFBhcmFtcyhwYXJhbXMsIHZh
bGlkYXRlV2l6YXJkU3RhcnRQYXJhbXMsICJ3aXphcmQuc3RhcnQiLCByZXNwb25kKSkgcmV0dXJu
OwoJCWlmIChjb250ZXh0LmZpbmRSdW5uaW5nV2l6YXJkKCkpIHsKCQkJcmVzcG9uZChmYWxzZSwg
dm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuVU5BVkFJTEFCTEUsICJ3aXphcmQgYWxyZWFk
eSBydW5uaW5nIikpOwoJCQlyZXR1cm47CgkJfQoJCWNvbnN0IHNlc3Npb25JZCA9IHJhbmRvbVVV
SUQoKTsKCQljb25zdCBvcHRzID0gewoJCQltb2RlOiBwYXJhbXMubW9kZSwKCQkJd29ya3NwYWNl
OiB0eXBlb2YgcGFyYW1zLndvcmtzcGFjZSA9PT0gInN0cmluZyIgPyBwYXJhbXMud29ya3NwYWNl
IDogdm9pZCAwCgkJfTsKCQljb25zdCBzZXNzaW9uID0gbmV3IFdpemFyZFNlc3Npb24oKHByb21w
dGVyKSA9PiBjb250ZXh0LndpemFyZFJ1bm5lcihvcHRzLCBkZWZhdWx0UnVudGltZSwgcHJvbXB0
ZXIpKTsKCQljb250ZXh0LndpemFyZFNlc3Npb25zLnNldChzZXNzaW9uSWQsIHNlc3Npb24pOwoJ
CWNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlc3Npb24ubmV4dCgpOwoJCWlmIChyZXN1bHQuZG9uZSkg
Y29udGV4dC5wdXJnZVdpemFyZFNlc3Npb24oc2Vzc2lvbklkKTsKCQlyZXNwb25kKHRydWUsIHsK
CQkJc2Vzc2lvbklkLAoJCQkuLi5yZXN1bHQKCQl9LCB2b2lkIDApOwoJfSwKCSJ3aXphcmQubmV4
dCI6IGFzeW5jICh7IHBhcmFtcywgcmVzcG9uZCwgY29udGV4dCB9KSA9PiB7CgkJaWYgKCFhc3Nl
cnRWYWxpZFBhcmFtcyhwYXJhbXMsIHZhbGlkYXRlV2l6YXJkTmV4dFBhcmFtcywgIndpemFyZC5u
ZXh0IiwgcmVzcG9uZCkpIHJldHVybjsKCQljb25zdCBzZXNzaW9uSWQgPSBwYXJhbXMuc2Vzc2lv
bklkOwoJCWNvbnN0IHNlc3Npb24gPSBmaW5kV2l6YXJkU2Vzc2lvbk9yUmVzcG9uZCh7CgkJCWNv
bnRleHQsCgkJCXJlc3BvbmQsCgkJCXNlc3Npb25JZAoJCX0pOwoJCWlmICghc2Vzc2lvbikgcmV0
dXJuOwoJCWNvbnN0IGFuc3dlciA9IHBhcmFtcy5hbnN3ZXI7CgkJaWYgKGFuc3dlcikgewoJCQlp
ZiAoc2Vzc2lvbi5nZXRTdGF0dXMoKSAhPT0gInJ1bm5pbmciKSB7CgkJCQlyZXNwb25kKGZhbHNl
LCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsICJ3aXphcmQg
bm90IHJ1bm5pbmciKSk7CgkJCQlyZXR1cm47CgkJCX0KCQkJdHJ5IHsKCQkJCWF3YWl0IHNlc3Np
b24uYW5zd2VyKFN0cmluZyhhbnN3ZXIuc3RlcElkID8/ICIiKSwgYW5zd2VyLnZhbHVlKTsKCQkJ
fSBjYXRjaCAoZXJyKSB7CgkJCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJy
b3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsIGZvcm1hdEZvckxvZyhlcnIpKSk7CgkJCQlyZXR1cm47
CgkJCX0KCQl9CgkJY29uc3QgcmVzdWx0ID0gYXdhaXQgc2Vzc2lvbi5uZXh0KCk7CgkJaWYgKHJl
c3VsdC5kb25lKSBjb250ZXh0LnB1cmdlV2l6YXJkU2Vzc2lvbihzZXNzaW9uSWQpOwoJCXJlc3Bv
bmQodHJ1ZSwgcmVzdWx0LCB2b2lkIDApOwoJfSwKCSJ3aXphcmQuY2FuY2VsIjogKHsgcGFyYW1z
LCByZXNwb25kLCBjb250ZXh0IH0pID0+IHsKCQlpZiAoIWFzc2VydFZhbGlkUGFyYW1zKHBhcmFt
cywgdmFsaWRhdGVXaXphcmRDYW5jZWxQYXJhbXMsICJ3aXphcmQuY2FuY2VsIiwgcmVzcG9uZCkp
IHJldHVybjsKCQljb25zdCBzZXNzaW9uSWQgPSBwYXJhbXMuc2Vzc2lvbklkOwoJCWNvbnN0IHNl
c3Npb24gPSBmaW5kV2l6YXJkU2Vzc2lvbk9yUmVzcG9uZCh7CgkJCWNvbnRleHQsCgkJCXJlc3Bv
bmQsCgkJCXNlc3Npb25JZAoJCX0pOwoJCWlmICghc2Vzc2lvbikgcmV0dXJuOwoJCXNlc3Npb24u
Y2FuY2VsKCk7CgkJY29uc3Qgc3RhdHVzID0gcmVhZFdpemFyZFN0YXR1cyhzZXNzaW9uKTsKCQlj
b250ZXh0LndpemFyZFNlc3Npb25zLmRlbGV0ZShzZXNzaW9uSWQpOwoJCXJlc3BvbmQodHJ1ZSwg
c3RhdHVzLCB2b2lkIDApOwoJfSwKCSJ3aXphcmQuc3RhdHVzIjogKHsgcGFyYW1zLCByZXNwb25k
LCBjb250ZXh0IH0pID0+IHsKCQlpZiAoIWFzc2VydFZhbGlkUGFyYW1zKHBhcmFtcywgdmFsaWRh
dGVXaXphcmRTdGF0dXNQYXJhbXMsICJ3aXphcmQuc3RhdHVzIiwgcmVzcG9uZCkpIHJldHVybjsK
CQljb25zdCBzZXNzaW9uSWQgPSBwYXJhbXMuc2Vzc2lvbklkOwoJCWNvbnN0IHNlc3Npb24gPSBm
aW5kV2l6YXJkU2Vzc2lvbk9yUmVzcG9uZCh7CgkJCWNvbnRleHQsCgkJCXJlc3BvbmQsCgkJCXNl
c3Npb25JZAoJCX0pOwoJCWlmICghc2Vzc2lvbikgcmV0dXJuOwoJCWNvbnN0IHN0YXR1cyA9IHJl
YWRXaXphcmRTdGF0dXMoc2Vzc2lvbik7CgkJaWYgKHN0YXR1cy5zdGF0dXMgIT09ICJydW5uaW5n
IikgY29udGV4dC53aXphcmRTZXNzaW9ucy5kZWxldGUoc2Vzc2lvbklkKTsKCQlyZXNwb25kKHRy
dWUsIHN0YXR1cywgdm9pZCAwKTsKCX0KfTsKLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvZ2F0
ZXdheS9zZXJ2ZXItbWV0aG9kcy50cwpjb25zdCBDT05UUk9MX1BMQU5FX1dSSVRFX01FVEhPRFMg
PSBuZXcgU2V0KFsKCSJjb25maWcuYXBwbHkiLAoJImNvbmZpZy5wYXRjaCIsCgkidXBkYXRlLnJ1
biIKXSk7CmZ1bmN0aW9uIGF1dGhvcml6ZUdhdGV3YXlNZXRob2QobWV0aG9kLCBjbGllbnQpIHsK
CWlmICghY2xpZW50Py5jb25uZWN0KSByZXR1cm4gbnVsbDsKCWlmIChtZXRob2QgPT09ICJoZWFs
dGgiKSByZXR1cm4gbnVsbDsKCWNvbnN0IHJvbGVSYXcgPSBjbGllbnQuY29ubmVjdC5yb2xlID8/
ICJvcGVyYXRvciI7Cgljb25zdCByb2xlID0gcGFyc2VHYXRld2F5Um9sZShyb2xlUmF3KTsKCWlm
ICghcm9sZSkgcmV0dXJuIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsIGB1
bmF1dGhvcml6ZWQgcm9sZTogJHtyb2xlUmF3fWApOwoJY29uc3Qgc2NvcGVzID0gY2xpZW50LmNv
bm5lY3Quc2NvcGVzID8/IFtdOwoJaWYgKCFpc1JvbGVBdXRob3JpemVkRm9yTWV0aG9kKHJvbGUs
IG1ldGhvZCkpIHJldHVybiBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCBg
dW5hdXRob3JpemVkIHJvbGU6ICR7cm9sZX1gKTsKCWlmIChyb2xlID09PSAibm9kZSIpIHJldHVy
biBudWxsOwoJaWYgKHNjb3Blcy5pbmNsdWRlcygib3BlcmF0b3IuYWRtaW4iKSkgcmV0dXJuIG51
bGw7Cgljb25zdCBzY29wZUF1dGggPSBhdXRob3JpemVPcGVyYXRvclNjb3Blc0Zvck1ldGhvZCht
ZXRob2QsIHNjb3Blcyk7CglpZiAoIXNjb3BlQXV0aC5hbGxvd2VkKSByZXR1cm4gZXJyb3JTaGFw
ZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgYG1pc3Npbmcgc2NvcGU6ICR7c2NvcGVBdXRo
Lm1pc3NpbmdTY29wZX1gKTsKCXJldHVybiBudWxsOwp9CmNvbnN0IGNvcmVHYXRld2F5SGFuZGxl
cnMgPSB7CgkuLi5jb25uZWN0SGFuZGxlcnMsCgkuLi5sb2dzSGFuZGxlcnMsCgkuLi52b2ljZXdh
a2VIYW5kbGVycywKCS4uLmhlYWx0aEhhbmRsZXJzLAoJLi4uY2hhbm5lbHNIYW5kbGVycywKCS4u
LmNoYXRIYW5kbGVycywKCS4uLmNyb25IYW5kbGVycywKCS4uLmRldmljZUhhbmRsZXJzLAoJLi4u
ZG9jdG9ySGFuZGxlcnMsCgkuLi5leGVjQXBwcm92YWxzSGFuZGxlcnMsCgkuLi53ZWJIYW5kbGVy
cywKCS4uLm1vZGVsc0hhbmRsZXJzLAoJLi4uY29uZmlnSGFuZGxlcnMsCgkuLi53aXphcmRIYW5k
bGVycywKCS4uLnRhbGtIYW5kbGVycywKCS4uLnRvb2xzQ2F0YWxvZ0hhbmRsZXJzLAoJLi4udHRz
SGFuZGxlcnMsCgkuLi5za2lsbHNIYW5kbGVycywKCS4uLnNlc3Npb25zSGFuZGxlcnMsCgkuLi5z
eXN0ZW1IYW5kbGVycywKCS4uLnVwZGF0ZUhhbmRsZXJzLAoJLi4ubm9kZUhhbmRsZXJzLAoJLi4u
bm9kZVBlbmRpbmdIYW5kbGVycywKCS4uLnB1c2hIYW5kbGVycywKCS4uLnNlbmRIYW5kbGVycywK
CS4uLnVzYWdlSGFuZGxlcnMsCgkuLi5hZ2VudEhhbmRsZXJzLAoJLi4uYWdlbnRzSGFuZGxlcnMs
CgkuLi5icm93c2VySGFuZGxlcnMKfTsKYXN5bmMgZnVuY3Rpb24gaGFuZGxlR2F0ZXdheVJlcXVl
c3Qob3B0cykgewoJY29uc3QgeyByZXEsIHJlc3BvbmQsIGNsaWVudCwgaXNXZWJjaGF0Q29ubmVj
dCwgY29udGV4dCB9ID0gb3B0czsKCWNvbnN0IGF1dGhFcnJvciA9IGF1dGhvcml6ZUdhdGV3YXlN
ZXRob2QocmVxLm1ldGhvZCwgY2xpZW50KTsKCWlmIChhdXRoRXJyb3IpIHsKCQlyZXNwb25kKGZh
bHNlLCB2b2lkIDAsIGF1dGhFcnJvcik7CgkJcmV0dXJuOwoJfQoJaWYgKENPTlRST0xfUExBTkVf
V1JJVEVfTUVUSE9EUy5oYXMocmVxLm1ldGhvZCkpIHsKCQljb25zdCBidWRnZXQgPSBjb25zdW1l
Q29udHJvbFBsYW5lV3JpdGVCdWRnZXQoeyBjbGllbnQgfSk7CgkJaWYgKCFidWRnZXQuYWxsb3dl
ZCkgewoJCQljb25zdCBhY3RvciA9IHJlc29sdmVDb250cm9sUGxhbmVBY3RvcihjbGllbnQpOwoJ
CQljb250ZXh0LmxvZ0dhdGV3YXkud2FybihgY29udHJvbC1wbGFuZSB3cml0ZSByYXRlLWxpbWl0
ZWQgbWV0aG9kPSR7cmVxLm1ldGhvZH0gJHtmb3JtYXRDb250cm9sUGxhbmVBY3RvcihhY3Rvcil9
IHJldHJ5QWZ0ZXJNcz0ke2J1ZGdldC5yZXRyeUFmdGVyTXN9IGtleT0ke2J1ZGdldC5rZXl9YCk7
CgkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLlVOQVZBSUxB
QkxFLCBgcmF0ZSBsaW1pdCBleGNlZWRlZCBmb3IgJHtyZXEubWV0aG9kfTsgcmV0cnkgYWZ0ZXIg
JHtNYXRoLmNlaWwoYnVkZ2V0LnJldHJ5QWZ0ZXJNcyAvIDFlMyl9c2AsIHsKCQkJCXJldHJ5YWJs
ZTogdHJ1ZSwKCQkJCXJldHJ5QWZ0ZXJNczogYnVkZ2V0LnJldHJ5QWZ0ZXJNcywKCQkJCWRldGFp
bHM6IHsKCQkJCQltZXRob2Q6IHJlcS5tZXRob2QsCgkJCQkJbGltaXQ6ICIzIHBlciA2MHMiCgkJ
CQl9CgkJCX0pKTsKCQkJcmV0dXJuOwoJCX0KCX0KCWNvbnN0IGhhbmRsZXIgPSBvcHRzLmV4dHJh
SGFuZGxlcnM/LltyZXEubWV0aG9kXSA/PyBjb3JlR2F0ZXdheUhhbmRsZXJzW3JlcS5tZXRob2Rd
OwoJaWYgKCFoYW5kbGVyKSB7CgkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVy
cm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCBgdW5rbm93biBtZXRob2Q6ICR7cmVxLm1ldGhvZH1g
KSk7CgkJcmV0dXJuOwoJfQoJY29uc3QgaW52b2tlSGFuZGxlciA9ICgpID0+IGhhbmRsZXIoewoJ
CXJlcSwKCQlwYXJhbXM6IHJlcS5wYXJhbXMgPz8ge30sCgkJY2xpZW50LAoJCWlzV2ViY2hhdENv
bm5lY3QsCgkJcmVzcG9uZCwKCQljb250ZXh0Cgl9KTsKCWF3YWl0IHdpdGhQbHVnaW5SdW50aW1l
R2F0ZXdheVJlcXVlc3RTY29wZSh7CgkJY29udGV4dCwKCQljbGllbnQsCgkJaXNXZWJjaGF0Q29u
bmVjdAoJfSwgaW52b2tlSGFuZGxlcik7Cn0KLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvZ2F0
ZXdheS9zZXJ2ZXItbWV0aG9kcy9leGVjLWFwcHJvdmFsLnRzCmZ1bmN0aW9uIGNyZWF0ZUV4ZWNB
cHByb3ZhbEhhbmRsZXJzKG1hbmFnZXIsIG9wdHMpIHsKCXJldHVybiB7CgkJImV4ZWMuYXBwcm92
YWwucmVxdWVzdCI6IGFzeW5jICh7IHBhcmFtcywgcmVzcG9uZCwgY29udGV4dCwgY2xpZW50IH0p
ID0+IHsKCQkJaWYgKCF2YWxpZGF0ZUV4ZWNBcHByb3ZhbFJlcXVlc3RQYXJhbXMocGFyYW1zKSkg
ewoJCQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJ
RF9SRVFVRVNULCBgaW52YWxpZCBleGVjLmFwcHJvdmFsLnJlcXVlc3QgcGFyYW1zOiAke2Zvcm1h
dFZhbGlkYXRpb25FcnJvcnModmFsaWRhdGVFeGVjQXBwcm92YWxSZXF1ZXN0UGFyYW1zLmVycm9y
cyl9YCkpOwoJCQkJcmV0dXJuOwoJCQl9CgkJCWNvbnN0IHAgPSBwYXJhbXM7CgkJCWNvbnN0IHR3
b1BoYXNlID0gcC50d29QaGFzZSA9PT0gdHJ1ZTsKCQkJY29uc3QgdGltZW91dE1zID0gdHlwZW9m
IHAudGltZW91dE1zID09PSAibnVtYmVyIiA/IHAudGltZW91dE1zIDogREVGQVVMVF9FWEVDX0FQ
UFJPVkFMX1RJTUVPVVRfTVM7CgkJCWNvbnN0IGV4cGxpY2l0SWQgPSB0eXBlb2YgcC5pZCA9PT0g
InN0cmluZyIgJiYgcC5pZC50cmltKCkubGVuZ3RoID4gMCA/IHAuaWQudHJpbSgpIDogbnVsbDsK
CQkJY29uc3QgaG9zdCA9IHR5cGVvZiBwLmhvc3QgPT09ICJzdHJpbmciID8gcC5ob3N0LnRyaW0o
KSA6ICIiOwoJCQljb25zdCBub2RlSWQgPSB0eXBlb2YgcC5ub2RlSWQgPT09ICJzdHJpbmciID8g
cC5ub2RlSWQudHJpbSgpIDogIiI7CgkJCWNvbnN0IGFwcHJvdmFsQ29udGV4dCA9IHJlc29sdmVT
eXN0ZW1SdW5BcHByb3ZhbFJlcXVlc3RDb250ZXh0KHsKCQkJCWhvc3QsCgkJCQljb21tYW5kOiBw
LmNvbW1hbmQsCgkJCQljb21tYW5kQXJndjogcC5jb21tYW5kQXJndiwKCQkJCXN5c3RlbVJ1blBs
YW46IHAuc3lzdGVtUnVuUGxhbiwKCQkJCWN3ZDogcC5jd2QsCgkJCQlhZ2VudElkOiBwLmFnZW50
SWQsCgkJCQlzZXNzaW9uS2V5OiBwLnNlc3Npb25LZXkKCQkJfSk7CgkJCWNvbnN0IGVmZmVjdGl2
ZUNvbW1hbmRBcmd2ID0gYXBwcm92YWxDb250ZXh0LmNvbW1hbmRBcmd2OwoJCQljb25zdCBlZmZl
Y3RpdmVDd2QgPSBhcHByb3ZhbENvbnRleHQuY3dkOwoJCQljb25zdCBlZmZlY3RpdmVBZ2VudElk
ID0gYXBwcm92YWxDb250ZXh0LmFnZW50SWQ7CgkJCWNvbnN0IGVmZmVjdGl2ZVNlc3Npb25LZXkg
PSBhcHByb3ZhbENvbnRleHQuc2Vzc2lvbktleTsKCQkJY29uc3QgZWZmZWN0aXZlQ29tbWFuZFRl
eHQgPSBhcHByb3ZhbENvbnRleHQuY29tbWFuZFRleHQ7CgkJCWlmIChob3N0ID09PSAibm9kZSIg
JiYgIW5vZGVJZCkgewoJCQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9y
Q29kZXMuSU5WQUxJRF9SRVFVRVNULCAibm9kZUlkIGlzIHJlcXVpcmVkIGZvciBob3N0PW5vZGUi
KSk7CgkJCQlyZXR1cm47CgkJCX0KCQkJaWYgKGhvc3QgPT09ICJub2RlIiAmJiAhYXBwcm92YWxD
b250ZXh0LnBsYW4pIHsKCQkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJv
ckNvZGVzLklOVkFMSURfUkVRVUVTVCwgInN5c3RlbVJ1blBsYW4gaXMgcmVxdWlyZWQgZm9yIGhv
c3Q9bm9kZSIpKTsKCQkJCXJldHVybjsKCQkJfQoJCQlpZiAoIWVmZmVjdGl2ZUNvbW1hbmRUZXh0
KSB7CgkJCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZB
TElEX1JFUVVFU1QsICJjb21tYW5kIGlzIHJlcXVpcmVkIikpOwoJCQkJcmV0dXJuOwoJCQl9CgkJ
CWlmIChob3N0ID09PSAibm9kZSIgJiYgKCFBcnJheS5pc0FycmF5KGVmZmVjdGl2ZUNvbW1hbmRB
cmd2KSB8fCBlZmZlY3RpdmVDb21tYW5kQXJndi5sZW5ndGggPT09IDApKSB7CgkJCQlyZXNwb25k
KGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsICJj
b21tYW5kQXJndiBpcyByZXF1aXJlZCBmb3IgaG9zdD1ub2RlIikpOwoJCQkJcmV0dXJuOwoJCQl9
CgkJCWNvbnN0IHN5c3RlbVJ1bkJpbmRpbmcgPSBob3N0ID09PSAibm9kZSIgPyBidWlsZFN5c3Rl
bVJ1bkFwcHJvdmFsQmluZGluZyh7CgkJCQlhcmd2OiBlZmZlY3RpdmVDb21tYW5kQXJndiwKCQkJ
CWN3ZDogZWZmZWN0aXZlQ3dkLAoJCQkJYWdlbnRJZDogZWZmZWN0aXZlQWdlbnRJZCwKCQkJCXNl
c3Npb25LZXk6IGVmZmVjdGl2ZVNlc3Npb25LZXksCgkJCQllbnY6IHAuZW52CgkJCX0pIDogbnVs
bDsKCQkJaWYgKGV4cGxpY2l0SWQgJiYgbWFuYWdlci5nZXRTbmFwc2hvdChleHBsaWNpdElkKSkg
ewoJCQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJ
RF9SRVFVRVNULCAiYXBwcm92YWwgaWQgYWxyZWFkeSBwZW5kaW5nIikpOwoJCQkJcmV0dXJuOwoJ
CQl9CgkJCWNvbnN0IHJlcXVlc3QgPSB7CgkJCQljb21tYW5kOiBzYW5pdGl6ZUV4ZWNBcHByb3Zh
bERpc3BsYXlUZXh0KGVmZmVjdGl2ZUNvbW1hbmRUZXh0KSwKCQkJCWNvbW1hbmRQcmV2aWV3OiBo
b3N0ID09PSAibm9kZSIgfHwgIWFwcHJvdmFsQ29udGV4dC5jb21tYW5kUHJldmlldyA/IHZvaWQg
MCA6IHNhbml0aXplRXhlY0FwcHJvdmFsRGlzcGxheVRleHQoYXBwcm92YWxDb250ZXh0LmNvbW1h
bmRQcmV2aWV3KSwKCQkJCWNvbW1hbmRBcmd2OiBob3N0ID09PSAibm9kZSIgPyB2b2lkIDAgOiBl
ZmZlY3RpdmVDb21tYW5kQXJndiwKCQkJCWVudktleXM6IHN5c3RlbVJ1bkJpbmRpbmc/LmVudktl
eXM/Lmxlbmd0aCA/IHN5c3RlbVJ1bkJpbmRpbmcuZW52S2V5cyA6IHZvaWQgMCwKCQkJCXN5c3Rl
bVJ1bkJpbmRpbmc6IHN5c3RlbVJ1bkJpbmRpbmc/LmJpbmRpbmcgPz8gbnVsbCwKCQkJCXN5c3Rl
bVJ1blBsYW46IGFwcHJvdmFsQ29udGV4dC5wbGFuLAoJCQkJY3dkOiBlZmZlY3RpdmVDd2QgPz8g
bnVsbCwKCQkJCW5vZGVJZDogaG9zdCA9PT0gIm5vZGUiID8gbm9kZUlkIDogbnVsbCwKCQkJCWhv
c3Q6IGhvc3QgfHwgbnVsbCwKCQkJCXNlY3VyaXR5OiBwLnNlY3VyaXR5ID8/IG51bGwsCgkJCQlh
c2s6IHAuYXNrID8/IG51bGwsCgkJCQlhZ2VudElkOiBlZmZlY3RpdmVBZ2VudElkID8/IG51bGws
CgkJCQlyZXNvbHZlZFBhdGg6IHAucmVzb2x2ZWRQYXRoID8/IG51bGwsCgkJCQlzZXNzaW9uS2V5
OiBlZmZlY3RpdmVTZXNzaW9uS2V5ID8/IG51bGwsCgkJCQl0dXJuU291cmNlQ2hhbm5lbDogdHlw
ZW9mIHAudHVyblNvdXJjZUNoYW5uZWwgPT09ICJzdHJpbmciID8gcC50dXJuU291cmNlQ2hhbm5l
bC50cmltKCkgfHwgbnVsbCA6IG51bGwsCgkJCQl0dXJuU291cmNlVG86IHR5cGVvZiBwLnR1cm5T
b3VyY2VUbyA9PT0gInN0cmluZyIgPyBwLnR1cm5Tb3VyY2VUby50cmltKCkgfHwgbnVsbCA6IG51
bGwsCgkJCQl0dXJuU291cmNlQWNjb3VudElkOiB0eXBlb2YgcC50dXJuU291cmNlQWNjb3VudElk
ID09PSAic3RyaW5nIiA/IHAudHVyblNvdXJjZUFjY291bnRJZC50cmltKCkgfHwgbnVsbCA6IG51
bGwsCgkJCQl0dXJuU291cmNlVGhyZWFkSWQ6IHAudHVyblNvdXJjZVRocmVhZElkID8/IG51bGwK
CQkJfTsKCQkJY29uc3QgcmVjb3JkID0gbWFuYWdlci5jcmVhdGUocmVxdWVzdCwgdGltZW91dE1z
LCBleHBsaWNpdElkKTsKCQkJcmVjb3JkLnJlcXVlc3RlZEJ5Q29ubklkID0gY2xpZW50Py5jb25u
SWQgPz8gbnVsbDsKCQkJcmVjb3JkLnJlcXVlc3RlZEJ5RGV2aWNlSWQgPSBjbGllbnQ/LmNvbm5l
Y3Q/LmRldmljZT8uaWQgPz8gbnVsbDsKCQkJcmVjb3JkLnJlcXVlc3RlZEJ5Q2xpZW50SWQgPSBj
bGllbnQ/LmNvbm5lY3Q/LmNsaWVudD8uaWQgPz8gbnVsbDsKCQkJbGV0IGRlY2lzaW9uUHJvbWlz
ZTsKCQkJdHJ5IHsKCQkJCWRlY2lzaW9uUHJvbWlzZSA9IG1hbmFnZXIucmVnaXN0ZXIocmVjb3Jk
LCB0aW1lb3V0TXMpOwoJCQl9IGNhdGNoIChlcnIpIHsKCQkJCXJlc3BvbmQoZmFsc2UsIHZvaWQg
MCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgYHJlZ2lzdHJhdGlvbiBm
YWlsZWQ6ICR7U3RyaW5nKGVycil9YCkpOwoJCQkJcmV0dXJuOwoJCQl9CgkJCWNvbnRleHQuYnJv
YWRjYXN0KCJleGVjLmFwcHJvdmFsLnJlcXVlc3RlZCIsIHsKCQkJCWlkOiByZWNvcmQuaWQsCgkJ
CQlyZXF1ZXN0OiByZWNvcmQucmVxdWVzdCwKCQkJCWNyZWF0ZWRBdE1zOiByZWNvcmQuY3JlYXRl
ZEF0TXMsCgkJCQlleHBpcmVzQXRNczogcmVjb3JkLmV4cGlyZXNBdE1zCgkJCX0sIHsgZHJvcElm
U2xvdzogdHJ1ZSB9KTsKCQkJY29uc3QgaGFzRXhlY0FwcHJvdmFsQ2xpZW50cyA9IGNvbnRleHQu
aGFzRXhlY0FwcHJvdmFsQ2xpZW50cz8uKCkgPz8gZmFsc2U7CgkJCWxldCBmb3J3YXJkZWQgPSBm
YWxzZTsKCQkJaWYgKG9wdHM/LmZvcndhcmRlcikgdHJ5IHsKCQkJCWZvcndhcmRlZCA9IGF3YWl0
IG9wdHMuZm9yd2FyZGVyLmhhbmRsZVJlcXVlc3RlZCh7CgkJCQkJaWQ6IHJlY29yZC5pZCwKCQkJ
CQlyZXF1ZXN0OiByZWNvcmQucmVxdWVzdCwKCQkJCQljcmVhdGVkQXRNczogcmVjb3JkLmNyZWF0
ZWRBdE1zLAoJCQkJCWV4cGlyZXNBdE1zOiByZWNvcmQuZXhwaXJlc0F0TXMKCQkJCX0pOwoJCQl9
IGNhdGNoIChlcnIpIHsKCQkJCWNvbnRleHQubG9nR2F0ZXdheT8uZXJyb3I/LihgZXhlYyBhcHBy
b3ZhbHM6IGZvcndhcmQgcmVxdWVzdCBmYWlsZWQ6ICR7U3RyaW5nKGVycil9YCk7CgkJCX0KCQkJ
aWYgKCFoYXNFeGVjQXBwcm92YWxDbGllbnRzICYmICFmb3J3YXJkZWQpIHsKCQkJCW1hbmFnZXIu
ZXhwaXJlKHJlY29yZC5pZCwgIm5vLWFwcHJvdmFsLXJvdXRlIik7CgkJCQlyZXNwb25kKHRydWUs
IHsKCQkJCQlpZDogcmVjb3JkLmlkLAoJCQkJCWRlY2lzaW9uOiBudWxsLAoJCQkJCWNyZWF0ZWRB
dE1zOiByZWNvcmQuY3JlYXRlZEF0TXMsCgkJCQkJZXhwaXJlc0F0TXM6IHJlY29yZC5leHBpcmVz
QXRNcwoJCQkJfSwgdm9pZCAwKTsKCQkJCXJldHVybjsKCQkJfQoJCQlpZiAodHdvUGhhc2UpIHJl
c3BvbmQodHJ1ZSwgewoJCQkJc3RhdHVzOiAiYWNjZXB0ZWQiLAoJCQkJaWQ6IHJlY29yZC5pZCwK
CQkJCWNyZWF0ZWRBdE1zOiByZWNvcmQuY3JlYXRlZEF0TXMsCgkJCQlleHBpcmVzQXRNczogcmVj
b3JkLmV4cGlyZXNBdE1zCgkJCX0sIHZvaWQgMCk7CgkJCWNvbnN0IGRlY2lzaW9uID0gYXdhaXQg
ZGVjaXNpb25Qcm9taXNlOwoJCQlyZXNwb25kKHRydWUsIHsKCQkJCWlkOiByZWNvcmQuaWQsCgkJ
CQlkZWNpc2lvbiwKCQkJCWNyZWF0ZWRBdE1zOiByZWNvcmQuY3JlYXRlZEF0TXMsCgkJCQlleHBp
cmVzQXRNczogcmVjb3JkLmV4cGlyZXNBdE1zCgkJCX0sIHZvaWQgMCk7CgkJfSwKCQkiZXhlYy5h
cHByb3ZhbC53YWl0RGVjaXNpb24iOiBhc3luYyAoeyBwYXJhbXMsIHJlc3BvbmQgfSkgPT4gewoJ
CQljb25zdCBwID0gcGFyYW1zOwoJCQljb25zdCBpZCA9IHR5cGVvZiBwLmlkID09PSAic3RyaW5n
IiA/IHAuaWQudHJpbSgpIDogIiI7CgkJCWlmICghaWQpIHsKCQkJCXJlc3BvbmQoZmFsc2UsIHZv
aWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgImlkIGlzIHJlcXVp
cmVkIikpOwoJCQkJcmV0dXJuOwoJCQl9CgkJCWNvbnN0IGRlY2lzaW9uUHJvbWlzZSA9IG1hbmFn
ZXIuYXdhaXREZWNpc2lvbihpZCk7CgkJCWlmICghZGVjaXNpb25Qcm9taXNlKSB7CgkJCQlyZXNw
b25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1Qs
ICJhcHByb3ZhbCBleHBpcmVkIG9yIG5vdCBmb3VuZCIpKTsKCQkJCXJldHVybjsKCQkJfQoJCQlj
b25zdCBzbmFwc2hvdCA9IG1hbmFnZXIuZ2V0U25hcHNob3QoaWQpOwoJCQlyZXNwb25kKHRydWUs
IHsKCQkJCWlkLAoJCQkJZGVjaXNpb246IGF3YWl0IGRlY2lzaW9uUHJvbWlzZSwKCQkJCWNyZWF0
ZWRBdE1zOiBzbmFwc2hvdD8uY3JlYXRlZEF0TXMsCgkJCQlleHBpcmVzQXRNczogc25hcHNob3Q/
LmV4cGlyZXNBdE1zCgkJCX0sIHZvaWQgMCk7CgkJfSwKCQkiZXhlYy5hcHByb3ZhbC5yZXNvbHZl
IjogYXN5bmMgKHsgcGFyYW1zLCByZXNwb25kLCBjbGllbnQsIGNvbnRleHQgfSkgPT4gewoJCQlp
ZiAoIXZhbGlkYXRlRXhlY0FwcHJvdmFsUmVzb2x2ZVBhcmFtcyhwYXJhbXMpKSB7CgkJCQlyZXNw
b25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1Qs
IGBpbnZhbGlkIGV4ZWMuYXBwcm92YWwucmVzb2x2ZSBwYXJhbXM6ICR7Zm9ybWF0VmFsaWRhdGlv
bkVycm9ycyh2YWxpZGF0ZUV4ZWNBcHByb3ZhbFJlc29sdmVQYXJhbXMuZXJyb3JzKX1gKSk7CgkJ
CQlyZXR1cm47CgkJCX0KCQkJY29uc3QgcCA9IHBhcmFtczsKCQkJY29uc3QgZGVjaXNpb24gPSBw
LmRlY2lzaW9uOwoJCQlpZiAoZGVjaXNpb24gIT09ICJhbGxvdy1vbmNlIiAmJiBkZWNpc2lvbiAh
PT0gImFsbG93LWFsd2F5cyIgJiYgZGVjaXNpb24gIT09ICJkZW55IikgewoJCQkJcmVzcG9uZChm
YWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCAiaW52
YWxpZCBkZWNpc2lvbiIpKTsKCQkJCXJldHVybjsKCQkJfQoJCQljb25zdCByZXNvbHZlZElkID0g
bWFuYWdlci5sb29rdXBQZW5kaW5nSWQocC5pZCk7CgkJCWlmIChyZXNvbHZlZElkLmtpbmQgPT09
ICJub25lIikgewoJCQkJcmVzcG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29k
ZXMuSU5WQUxJRF9SRVFVRVNULCAidW5rbm93biBvciBleHBpcmVkIGFwcHJvdmFsIGlkIikpOwoJ
CQkJcmV0dXJuOwoJCQl9CgkJCWlmIChyZXNvbHZlZElkLmtpbmQgPT09ICJhbWJpZ3VvdXMiKSB7
CgkJCQljb25zdCBjYW5kaWRhdGVzID0gcmVzb2x2ZWRJZC5pZHMuc2xpY2UoMCwgMykuam9pbigi
LCAiKTsKCQkJCWNvbnN0IHJlbWFpbmRlciA9IHJlc29sdmVkSWQuaWRzLmxlbmd0aCA+IDMgPyBg
ICgrJHtyZXNvbHZlZElkLmlkcy5sZW5ndGggLSAzfSBtb3JlKWAgOiAiIjsKCQkJCXJlc3BvbmQo
ZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgYGFt
YmlndW91cyBhcHByb3ZhbCBpZCBwcmVmaXg7IG1hdGNoZXM6ICR7Y2FuZGlkYXRlc30ke3JlbWFp
bmRlcn0uIFVzZSB0aGUgZnVsbCBpZC5gKSk7CgkJCQlyZXR1cm47CgkJCX0KCQkJY29uc3QgYXBw
cm92YWxJZCA9IHJlc29sdmVkSWQuaWQ7CgkJCWNvbnN0IHNuYXBzaG90ID0gbWFuYWdlci5nZXRT
bmFwc2hvdChhcHByb3ZhbElkKTsKCQkJY29uc3QgcmVzb2x2ZWRCeSA9IGNsaWVudD8uY29ubmVj
dD8uY2xpZW50Py5kaXNwbGF5TmFtZSA/PyBjbGllbnQ/LmNvbm5lY3Q/LmNsaWVudD8uaWQ7CgkJ
CWlmICghbWFuYWdlci5yZXNvbHZlKGFwcHJvdmFsSWQsIGRlY2lzaW9uLCByZXNvbHZlZEJ5ID8/
IG51bGwpKSB7CgkJCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rl
cy5JTlZBTElEX1JFUVVFU1QsICJ1bmtub3duIG9yIGV4cGlyZWQgYXBwcm92YWwgaWQiKSk7CgkJ
CQlyZXR1cm47CgkJCX0KCQkJY29udGV4dC5icm9hZGNhc3QoImV4ZWMuYXBwcm92YWwucmVzb2x2
ZWQiLCB7CgkJCQlpZDogYXBwcm92YWxJZCwKCQkJCWRlY2lzaW9uLAoJCQkJcmVzb2x2ZWRCeSwK
CQkJCXRzOiBEYXRlLm5vdygpLAoJCQkJcmVxdWVzdDogc25hcHNob3Q/LnJlcXVlc3QKCQkJfSwg
eyBkcm9wSWZTbG93OiB0cnVlIH0pOwoJCQlvcHRzPy5mb3J3YXJkZXI/LmhhbmRsZVJlc29sdmVk
KHsKCQkJCWlkOiBhcHByb3ZhbElkLAoJCQkJZGVjaXNpb24sCgkJCQlyZXNvbHZlZEJ5LAoJCQkJ
dHM6IERhdGUubm93KCksCgkJCQlyZXF1ZXN0OiBzbmFwc2hvdD8ucmVxdWVzdAoJCQl9KS5jYXRj
aCgoZXJyKSA9PiB7CgkJCQljb250ZXh0LmxvZ0dhdGV3YXk/LmVycm9yPy4oYGV4ZWMgYXBwcm92
YWxzOiBmb3J3YXJkIHJlc29sdmUgZmFpbGVkOiAke1N0cmluZyhlcnIpfWApOwoJCQl9KTsKCQkJ
cmVzcG9uZCh0cnVlLCB7IG9rOiB0cnVlIH0sIHZvaWQgMCk7CgkJfQoJfTsKfQovLyNlbmRyZWdp
b24KLy8jcmVnaW9uIHNyYy9nYXRld2F5L3NlcnZlci1tZXRob2RzL3NlY3JldHMudHMKZnVuY3Rp
b24gaW52YWxpZFNlY3JldHNSZXNvbHZlRmllbGQoZXJyb3JzKSB7Cglmb3IgKGNvbnN0IGlzc3Vl
IG9mIGVycm9ycyA/PyBbXSkgaWYgKGlzc3VlLmluc3RhbmNlUGF0aCA9PT0gIi9jb21tYW5kTmFt
ZSIgfHwgaXNzdWUuaW5zdGFuY2VQYXRoID09PSAiIiAmJiBTdHJpbmcoaXNzdWUucGFyYW1zPy5t
aXNzaW5nUHJvcGVydHkpID09PSAiY29tbWFuZE5hbWUiKSByZXR1cm4gImNvbW1hbmROYW1lIjsK
CXJldHVybiAidGFyZ2V0SWRzIjsKfQpmdW5jdGlvbiBjcmVhdGVTZWNyZXRzSGFuZGxlcnMocGFy
YW1zKSB7CglyZXR1cm4gewoJCSJzZWNyZXRzLnJlbG9hZCI6IGFzeW5jICh7IHJlc3BvbmQgfSkg
PT4gewoJCQl0cnkgewoJCQkJcmVzcG9uZCh0cnVlLCB7CgkJCQkJb2s6IHRydWUsCgkJCQkJd2Fy
bmluZ0NvdW50OiAoYXdhaXQgcGFyYW1zLnJlbG9hZFNlY3JldHMoKSkud2FybmluZ0NvdW50CgkJ
CQl9KTsKCQkJfSBjYXRjaCAoZXJyKSB7CgkJCQlyZXNwb25kKGZhbHNlLCB2b2lkIDAsIGVycm9y
U2hhcGUoRXJyb3JDb2Rlcy5VTkFWQUlMQUJMRSwgU3RyaW5nKGVycikpKTsKCQkJfQoJCX0sCgkJ
InNlY3JldHMucmVzb2x2ZSI6IGFzeW5jICh7IHBhcmFtczogcmVxdWVzdFBhcmFtcywgcmVzcG9u
ZCB9KSA9PiB7CgkJCWlmICghdmFsaWRhdGVTZWNyZXRzUmVzb2x2ZVBhcmFtcyhyZXF1ZXN0UGFy
YW1zKSkgewoJCQkJY29uc3QgZmllbGQgPSBpbnZhbGlkU2VjcmV0c1Jlc29sdmVGaWVsZCh2YWxp
ZGF0ZVNlY3JldHNSZXNvbHZlUGFyYW1zLmVycm9ycyk7CgkJCQlyZXNwb25kKGZhbHNlLCB2b2lk
IDAsIGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsIGBpbnZhbGlkIHNlY3Jl
dHMucmVzb2x2ZSBwYXJhbXM6ICR7ZmllbGR9YCkpOwoJCQkJcmV0dXJuOwoJCQl9CgkJCWNvbnN0
IGNvbW1hbmROYW1lID0gcmVxdWVzdFBhcmFtcy5jb21tYW5kTmFtZS50cmltKCk7CgkJCWlmICgh
Y29tbWFuZE5hbWUpIHsKCQkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJv
ckNvZGVzLklOVkFMSURfUkVRVUVTVCwgImludmFsaWQgc2VjcmV0cy5yZXNvbHZlIHBhcmFtczog
Y29tbWFuZE5hbWUiKSk7CgkJCQlyZXR1cm47CgkJCX0KCQkJY29uc3QgdGFyZ2V0SWRzID0gcmVx
dWVzdFBhcmFtcy50YXJnZXRJZHMubWFwKChlbnRyeSkgPT4gZW50cnkudHJpbSgpKS5maWx0ZXIo
KGVudHJ5KSA9PiBlbnRyeS5sZW5ndGggPiAwKTsKCQkJZm9yIChjb25zdCB0YXJnZXRJZCBvZiB0
YXJnZXRJZHMpIGlmICghaXNLbm93blNlY3JldFRhcmdldElkKHRhcmdldElkKSkgewoJCQkJcmVz
cG9uZChmYWxzZSwgdm9pZCAwLCBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNU
LCBgaW52YWxpZCBzZWNyZXRzLnJlc29sdmUgcGFyYW1zOiB1bmtub3duIHRhcmdldCBpZCAiJHtT
dHJpbmcodGFyZ2V0SWQpfSJgKSk7CgkJCQlyZXR1cm47CgkJCX0KCQkJdHJ5IHsKCQkJCWNvbnN0
IHJlc3VsdCA9IGF3YWl0IHBhcmFtcy5yZXNvbHZlU2VjcmV0cyh7CgkJCQkJY29tbWFuZE5hbWUs
CgkJCQkJdGFyZ2V0SWRzCgkJCQl9KTsKCQkJCWNvbnN0IHBheWxvYWQgPSB7CgkJCQkJb2s6IHRy
dWUsCgkJCQkJYXNzaWdubWVudHM6IHJlc3VsdC5hc3NpZ25tZW50cywKCQkJCQlkaWFnbm9zdGlj
czogcmVzdWx0LmRpYWdub3N0aWNzLAoJCQkJCWluYWN0aXZlUmVmUGF0aHM6IHJlc3VsdC5pbmFj
dGl2ZVJlZlBhdGhzCgkJCQl9OwoJCQkJaWYgKCF2YWxpZGF0ZVNlY3JldHNSZXNvbHZlUmVzdWx0
KHBheWxvYWQpKSB0aHJvdyBuZXcgRXJyb3IoInNlY3JldHMucmVzb2x2ZSByZXR1cm5lZCBpbnZh
bGlkIHBheWxvYWQuIik7CgkJCQlyZXNwb25kKHRydWUsIHBheWxvYWQpOwoJCQl9IGNhdGNoIChl
cnIpIHsKCQkJCXJlc3BvbmQoZmFsc2UsIHZvaWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLlVO
QVZBSUxBQkxFLCBTdHJpbmcoZXJyKSkpOwoJCQl9CgkJfQoJfTsKfQovLyNlbmRyZWdpb24KLy8j
cmVnaW9uIHNyYy9nYXRld2F5L3NlcnZlci1tb2JpbGUtbm9kZXMudHMKY29uc3QgaXNNb2JpbGVQ
bGF0Zm9ybSA9IChwbGF0Zm9ybSkgPT4gewoJY29uc3QgcCA9IHR5cGVvZiBwbGF0Zm9ybSA9PT0g
InN0cmluZyIgPyBwbGF0Zm9ybS50cmltKCkudG9Mb3dlckNhc2UoKSA6ICIiOwoJaWYgKCFwKSBy
ZXR1cm4gZmFsc2U7CglyZXR1cm4gcC5zdGFydHNXaXRoKCJpb3MiKSB8fCBwLnN0YXJ0c1dpdGgo
ImlwYWRvcyIpIHx8IHAuc3RhcnRzV2l0aCgiYW5kcm9pZCIpOwp9OwpmdW5jdGlvbiBoYXNDb25u
ZWN0ZWRNb2JpbGVOb2RlKHJlZ2lzdHJ5KSB7CglyZXR1cm4gcmVnaXN0cnkubGlzdENvbm5lY3Rl
ZCgpLnNvbWUoKG4pID0+IGlzTW9iaWxlUGxhdGZvcm0obi5wbGF0Zm9ybSkpOwp9Ci8vI2VuZHJl
Z2lvbgovLyNyZWdpb24gc3JjL2dhdGV3YXkvc2VydmVyLW1vZGVsLWNhdGFsb2cudHMKYXN5bmMg
ZnVuY3Rpb24gbG9hZEdhdGV3YXlNb2RlbENhdGFsb2coKSB7CglyZXR1cm4gYXdhaXQgbG9hZE1v
ZGVsQ2F0YWxvZyh7IGNvbmZpZzogbG9hZENvbmZpZygpIH0pOwp9Ci8vI2VuZHJlZ2lvbgovLyNy
ZWdpb24gc3JjL2dhdGV3YXkvc2VydmVyLW5vZGUtc3Vic2NyaXB0aW9ucy50cwpmdW5jdGlvbiBj
cmVhdGVOb2RlU3Vic2NyaXB0aW9uTWFuYWdlcigpIHsKCWNvbnN0IG5vZGVTdWJzY3JpcHRpb25z
ID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKCWNvbnN0IHNlc3Npb25TdWJzY3JpYmVycyA9
IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7Cgljb25zdCB0b1BheWxvYWRKU09OID0gKHBheWxv
YWQpID0+IHBheWxvYWQgPyBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSA6IG51bGw7Cgljb25zdCBz
dWJzY3JpYmUgPSAobm9kZUlkLCBzZXNzaW9uS2V5KSA9PiB7CgkJY29uc3Qgbm9ybWFsaXplZE5v
ZGVJZCA9IG5vZGVJZC50cmltKCk7CgkJY29uc3Qgbm9ybWFsaXplZFNlc3Npb25LZXkgPSBzZXNz
aW9uS2V5LnRyaW0oKTsKCQlpZiAoIW5vcm1hbGl6ZWROb2RlSWQgfHwgIW5vcm1hbGl6ZWRTZXNz
aW9uS2V5KSByZXR1cm47CgkJbGV0IG5vZGVTZXQgPSBub2RlU3Vic2NyaXB0aW9ucy5nZXQobm9y
bWFsaXplZE5vZGVJZCk7CgkJaWYgKCFub2RlU2V0KSB7CgkJCW5vZGVTZXQgPSAvKiBAX19QVVJF
X18gKi8gbmV3IFNldCgpOwoJCQlub2RlU3Vic2NyaXB0aW9ucy5zZXQobm9ybWFsaXplZE5vZGVJ
ZCwgbm9kZVNldCk7CgkJfQoJCWlmIChub2RlU2V0Lmhhcyhub3JtYWxpemVkU2Vzc2lvbktleSkp
IHJldHVybjsKCQlub2RlU2V0LmFkZChub3JtYWxpemVkU2Vzc2lvbktleSk7CgkJbGV0IHNlc3Np
b25TZXQgPSBzZXNzaW9uU3Vic2NyaWJlcnMuZ2V0KG5vcm1hbGl6ZWRTZXNzaW9uS2V5KTsKCQlp
ZiAoIXNlc3Npb25TZXQpIHsKCQkJc2Vzc2lvblNldCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0
KCk7CgkJCXNlc3Npb25TdWJzY3JpYmVycy5zZXQobm9ybWFsaXplZFNlc3Npb25LZXksIHNlc3Np
b25TZXQpOwoJCX0KCQlzZXNzaW9uU2V0LmFkZChub3JtYWxpemVkTm9kZUlkKTsKCX07Cgljb25z
dCB1bnN1YnNjcmliZSA9IChub2RlSWQsIHNlc3Npb25LZXkpID0+IHsKCQljb25zdCBub3JtYWxp
emVkTm9kZUlkID0gbm9kZUlkLnRyaW0oKTsKCQljb25zdCBub3JtYWxpemVkU2Vzc2lvbktleSA9
IHNlc3Npb25LZXkudHJpbSgpOwoJCWlmICghbm9ybWFsaXplZE5vZGVJZCB8fCAhbm9ybWFsaXpl
ZFNlc3Npb25LZXkpIHJldHVybjsKCQljb25zdCBub2RlU2V0ID0gbm9kZVN1YnNjcmlwdGlvbnMu
Z2V0KG5vcm1hbGl6ZWROb2RlSWQpOwoJCW5vZGVTZXQ/LmRlbGV0ZShub3JtYWxpemVkU2Vzc2lv
bktleSk7CgkJaWYgKG5vZGVTZXQ/LnNpemUgPT09IDApIG5vZGVTdWJzY3JpcHRpb25zLmRlbGV0
ZShub3JtYWxpemVkTm9kZUlkKTsKCQljb25zdCBzZXNzaW9uU2V0ID0gc2Vzc2lvblN1YnNjcmli
ZXJzLmdldChub3JtYWxpemVkU2Vzc2lvbktleSk7CgkJc2Vzc2lvblNldD8uZGVsZXRlKG5vcm1h
bGl6ZWROb2RlSWQpOwoJCWlmIChzZXNzaW9uU2V0Py5zaXplID09PSAwKSBzZXNzaW9uU3Vic2Ny
aWJlcnMuZGVsZXRlKG5vcm1hbGl6ZWRTZXNzaW9uS2V5KTsKCX07Cgljb25zdCB1bnN1YnNjcmli
ZUFsbCA9IChub2RlSWQpID0+IHsKCQljb25zdCBub3JtYWxpemVkTm9kZUlkID0gbm9kZUlkLnRy
aW0oKTsKCQljb25zdCBub2RlU2V0ID0gbm9kZVN1YnNjcmlwdGlvbnMuZ2V0KG5vcm1hbGl6ZWRO
b2RlSWQpOwoJCWlmICghbm9kZVNldCkgcmV0dXJuOwoJCWZvciAoY29uc3Qgc2Vzc2lvbktleSBv
ZiBub2RlU2V0KSB7CgkJCWNvbnN0IHNlc3Npb25TZXQgPSBzZXNzaW9uU3Vic2NyaWJlcnMuZ2V0
KHNlc3Npb25LZXkpOwoJCQlzZXNzaW9uU2V0Py5kZWxldGUobm9ybWFsaXplZE5vZGVJZCk7CgkJ
CWlmIChzZXNzaW9uU2V0Py5zaXplID09PSAwKSBzZXNzaW9uU3Vic2NyaWJlcnMuZGVsZXRlKHNl
c3Npb25LZXkpOwoJCX0KCQlub2RlU3Vic2NyaXB0aW9ucy5kZWxldGUobm9ybWFsaXplZE5vZGVJ
ZCk7Cgl9OwoJY29uc3Qgc2VuZFRvU2Vzc2lvbiA9IChzZXNzaW9uS2V5LCBldmVudCwgcGF5bG9h
ZCwgc2VuZEV2ZW50KSA9PiB7CgkJY29uc3Qgbm9ybWFsaXplZFNlc3Npb25LZXkgPSBzZXNzaW9u
S2V5LnRyaW0oKTsKCQlpZiAoIW5vcm1hbGl6ZWRTZXNzaW9uS2V5IHx8ICFzZW5kRXZlbnQpIHJl
dHVybjsKCQljb25zdCBzdWJzID0gc2Vzc2lvblN1YnNjcmliZXJzLmdldChub3JtYWxpemVkU2Vz
c2lvbktleSk7CgkJaWYgKCFzdWJzIHx8IHN1YnMuc2l6ZSA9PT0gMCkgcmV0dXJuOwoJCWNvbnN0
IHBheWxvYWRKU09OID0gdG9QYXlsb2FkSlNPTihwYXlsb2FkKTsKCQlmb3IgKGNvbnN0IG5vZGVJ
ZCBvZiBzdWJzKSBzZW5kRXZlbnQoewoJCQlub2RlSWQsCgkJCWV2ZW50LAoJCQlwYXlsb2FkSlNP
TgoJCX0pOwoJfTsKCWNvbnN0IHNlbmRUb0FsbFN1YnNjcmliZWQgPSAoZXZlbnQsIHBheWxvYWQs
IHNlbmRFdmVudCkgPT4gewoJCWlmICghc2VuZEV2ZW50KSByZXR1cm47CgkJY29uc3QgcGF5bG9h
ZEpTT04gPSB0b1BheWxvYWRKU09OKHBheWxvYWQpOwoJCWZvciAoY29uc3Qgbm9kZUlkIG9mIG5v
ZGVTdWJzY3JpcHRpb25zLmtleXMoKSkgc2VuZEV2ZW50KHsKCQkJbm9kZUlkLAoJCQlldmVudCwK
CQkJcGF5bG9hZEpTT04KCQl9KTsKCX07Cgljb25zdCBzZW5kVG9BbGxDb25uZWN0ZWQgPSAoZXZl
bnQsIHBheWxvYWQsIGxpc3RDb25uZWN0ZWQsIHNlbmRFdmVudCkgPT4gewoJCWlmICghc2VuZEV2
ZW50IHx8ICFsaXN0Q29ubmVjdGVkKSByZXR1cm47CgkJY29uc3QgcGF5bG9hZEpTT04gPSB0b1Bh
eWxvYWRKU09OKHBheWxvYWQpOwoJCWZvciAoY29uc3Qgbm9kZSBvZiBsaXN0Q29ubmVjdGVkKCkp
IHNlbmRFdmVudCh7CgkJCW5vZGVJZDogbm9kZS5ub2RlSWQsCgkJCWV2ZW50LAoJCQlwYXlsb2Fk
SlNPTgoJCX0pOwoJfTsKCWNvbnN0IGNsZWFyID0gKCkgPT4gewoJCW5vZGVTdWJzY3JpcHRpb25z
LmNsZWFyKCk7CgkJc2Vzc2lvblN1YnNjcmliZXJzLmNsZWFyKCk7Cgl9OwoJcmV0dXJuIHsKCQlz
dWJzY3JpYmUsCgkJdW5zdWJzY3JpYmUsCgkJdW5zdWJzY3JpYmVBbGwsCgkJc2VuZFRvU2Vzc2lv
biwKCQlzZW5kVG9BbGxTdWJzY3JpYmVkLAoJCXNlbmRUb0FsbENvbm5lY3RlZCwKCQljbGVhcgoJ
fTsKfQovLyNlbmRyZWdpb24KLy8jcmVnaW9uIHNyYy9nYXRld2F5L3NlcnZlci1wbHVnaW5zLnRz
CmNvbnN0IEZBTExCQUNLX0dBVEVXQVlfQ09OVEVYVF9TVEFURV9LRVkgPSBTeW1ib2wuZm9yKCJv
cGVuY2xhdy5mYWxsYmFja0dhdGV3YXlDb250ZXh0U3RhdGUiKTsKY29uc3QgZmFsbGJhY2tHYXRl
d2F5Q29udGV4dFN0YXRlID0gKCgpID0+IHsKCWNvbnN0IGdsb2JhbFN0YXRlID0gZ2xvYmFsVGhp
czsKCWNvbnN0IGV4aXN0aW5nID0gZ2xvYmFsU3RhdGVbRkFMTEJBQ0tfR0FURVdBWV9DT05URVhU
X1NUQVRFX0tFWV07CglpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZzsKCWNvbnN0IGNyZWF0
ZWQgPSB7IGNvbnRleHQ6IHZvaWQgMCB9OwoJZ2xvYmFsU3RhdGVbRkFMTEJBQ0tfR0FURVdBWV9D
T05URVhUX1NUQVRFX0tFWV0gPSBjcmVhdGVkOwoJcmV0dXJuIGNyZWF0ZWQ7Cn0pKCk7CmZ1bmN0
aW9uIHNldEZhbGxiYWNrR2F0ZXdheUNvbnRleHQoY3R4KSB7CglmYWxsYmFja0dhdGV3YXlDb250
ZXh0U3RhdGUuY29udGV4dCA9IGN0eDsKfQpmdW5jdGlvbiBjcmVhdGVTeW50aGV0aWNPcGVyYXRv
ckNsaWVudCgpIHsKCXJldHVybiB7IGNvbm5lY3Q6IHsKCQltaW5Qcm90b2NvbDogMywKCQltYXhQ
cm90b2NvbDogMywKCQljbGllbnQ6IHsKCQkJaWQ6IEdBVEVXQVlfQ0xJRU5UX0lEUy5HQVRFV0FZ
X0NMSUVOVCwKCQkJdmVyc2lvbjogImludGVybmFsIiwKCQkJcGxhdGZvcm06ICJub2RlIiwKCQkJ
bW9kZTogR0FURVdBWV9DTElFTlRfTU9ERVMuQkFDS0VORAoJCX0sCgkJcm9sZTogIm9wZXJhdG9y
IiwKCQlzY29wZXM6IFsKCQkJIm9wZXJhdG9yLmFkbWluIiwKCQkJIm9wZXJhdG9yLmFwcHJvdmFs
cyIsCgkJCSJvcGVyYXRvci5wYWlyaW5nIgoJCV0KCX0gfTsKfQphc3luYyBmdW5jdGlvbiBkaXNw
YXRjaEdhdGV3YXlNZXRob2QobWV0aG9kLCBwYXJhbXMpIHsKCWNvbnN0IHNjb3BlID0gZ2V0UGx1
Z2luUnVudGltZUdhdGV3YXlSZXF1ZXN0U2NvcGUoKTsKCWNvbnN0IGNvbnRleHQgPSBzY29wZT8u
Y29udGV4dCA/PyBmYWxsYmFja0dhdGV3YXlDb250ZXh0U3RhdGUuY29udGV4dDsKCWNvbnN0IGlz
V2ViY2hhdENvbm5lY3QgPSBzY29wZT8uaXNXZWJjaGF0Q29ubmVjdCA/PyAoKCkgPT4gZmFsc2Up
OwoJaWYgKCFjb250ZXh0KSB0aHJvdyBuZXcgRXJyb3IoYFBsdWdpbiBzdWJhZ2VudCBkaXNwYXRj
aCByZXF1aXJlcyBhIGdhdGV3YXkgcmVxdWVzdCBzY29wZSAobWV0aG9kOiAke21ldGhvZH0pLiBO
byBzY29wZSBzZXQgYW5kIG5vIGZhbGxiYWNrIGNvbnRleHQgYXZhaWxhYmxlLmApOwoJbGV0IHJl
c3VsdDsKCWF3YWl0IGhhbmRsZUdhdGV3YXlSZXF1ZXN0KHsKCQlyZXE6IHsKCQkJdHlwZTogInJl
cSIsCgkJCWlkOiBgcGx1Z2luLXN1YmFnZW50LSR7cmFuZG9tVVVJRCgpfWAsCgkJCW1ldGhvZCwK
CQkJcGFyYW1zCgkJfSwKCQljbGllbnQ6IHNjb3BlPy5jbGllbnQgPz8gY3JlYXRlU3ludGhldGlj
T3BlcmF0b3JDbGllbnQoKSwKCQlpc1dlYmNoYXRDb25uZWN0LAoJCXJlc3BvbmQ6IChvaywgcGF5
bG9hZCwgZXJyb3IpID0+IHsKCQkJaWYgKCFyZXN1bHQpIHJlc3VsdCA9IHsKCQkJCW9rLAoJCQkJ
cGF5bG9hZCwKCQkJCWVycm9yCgkJCX07CgkJfSwKCQljb250ZXh0Cgl9KTsKCWlmICghcmVzdWx0
KSB0aHJvdyBuZXcgRXJyb3IoYEdhdGV3YXkgbWV0aG9kICIke21ldGhvZH0iIGNvbXBsZXRlZCB3
aXRob3V0IGEgcmVzcG9uc2UuYCk7CglpZiAoIXJlc3VsdC5vaykgdGhyb3cgbmV3IEVycm9yKHJl
c3VsdC5lcnJvcj8ubWVzc2FnZSA/PyBgR2F0ZXdheSBtZXRob2QgIiR7bWV0aG9kfSIgZmFpbGVk
LmApOwoJcmV0dXJuIHJlc3VsdC5wYXlsb2FkOwp9CmZ1bmN0aW9uIGNyZWF0ZUdhdGV3YXlTdWJh
Z2VudFJ1bnRpbWUoKSB7Cgljb25zdCBnZXRTZXNzaW9uTWVzc2FnZXMgPSBhc3luYyAocGFyYW1z
KSA9PiB7CgkJY29uc3QgcGF5bG9hZCA9IGF3YWl0IGRpc3BhdGNoR2F0ZXdheU1ldGhvZCgic2Vz
c2lvbnMuZ2V0IiwgewoJCQlrZXk6IHBhcmFtcy5zZXNzaW9uS2V5LAoJCQkuLi5wYXJhbXMubGlt
aXQgIT0gbnVsbCAmJiB7IGxpbWl0OiBwYXJhbXMubGltaXQgfQoJCX0pOwoJCXJldHVybiB7IG1l
c3NhZ2VzOiBBcnJheS5pc0FycmF5KHBheWxvYWQ/Lm1lc3NhZ2VzKSA/IHBheWxvYWQubWVzc2Fn
ZXMgOiBbXSB9OwoJfTsKCXJldHVybiB7CgkJYXN5bmMgcnVuKHBhcmFtcykgewoJCQljb25zdCBy
dW5JZCA9IChhd2FpdCBkaXNwYXRjaEdhdGV3YXlNZXRob2QoImFnZW50IiwgewoJCQkJc2Vzc2lv
bktleTogcGFyYW1zLnNlc3Npb25LZXksCgkJCQltZXNzYWdlOiBwYXJhbXMubWVzc2FnZSwKCQkJ
CWRlbGl2ZXI6IHBhcmFtcy5kZWxpdmVyID8/IGZhbHNlLAoJCQkJLi4ucGFyYW1zLmV4dHJhU3lz
dGVtUHJvbXB0ICYmIHsgZXh0cmFTeXN0ZW1Qcm9tcHQ6IHBhcmFtcy5leHRyYVN5c3RlbVByb21w
dCB9LAoJCQkJLi4ucGFyYW1zLmxhbmUgJiYgeyBsYW5lOiBwYXJhbXMubGFuZSB9LAoJCQkJLi4u
cGFyYW1zLmlkZW1wb3RlbmN5S2V5ICYmIHsgaWRlbXBvdGVuY3lLZXk6IHBhcmFtcy5pZGVtcG90
ZW5jeUtleSB9CgkJCX0pKT8ucnVuSWQ7CgkJCWlmICh0eXBlb2YgcnVuSWQgIT09ICJzdHJpbmci
IHx8ICFydW5JZCkgdGhyb3cgbmV3IEVycm9yKCJHYXRld2F5IGFnZW50IG1ldGhvZCByZXR1cm5l
ZCBhbiBpbnZhbGlkIHJ1bklkLiIpOwoJCQlyZXR1cm4geyBydW5JZCB9OwoJCX0sCgkJYXN5bmMg
d2FpdEZvclJ1bihwYXJhbXMpIHsKCQkJY29uc3QgcGF5bG9hZCA9IGF3YWl0IGRpc3BhdGNoR2F0
ZXdheU1ldGhvZCgiYWdlbnQud2FpdCIsIHsKCQkJCXJ1bklkOiBwYXJhbXMucnVuSWQsCgkJCQku
Li5wYXJhbXMudGltZW91dE1zICE9IG51bGwgJiYgeyB0aW1lb3V0TXM6IHBhcmFtcy50aW1lb3V0
TXMgfQoJCQl9KTsKCQkJY29uc3Qgc3RhdHVzID0gcGF5bG9hZD8uc3RhdHVzOwoJCQlpZiAoc3Rh
dHVzICE9PSAib2siICYmIHN0YXR1cyAhPT0gImVycm9yIiAmJiBzdGF0dXMgIT09ICJ0aW1lb3V0
IikgdGhyb3cgbmV3IEVycm9yKGBHYXRld2F5IGFnZW50LndhaXQgcmV0dXJuZWQgdW5leHBlY3Rl
ZCBzdGF0dXM6ICR7c3RhdHVzfWApOwoJCQlyZXR1cm4gewoJCQkJc3RhdHVzLAoJCQkJLi4udHlw
ZW9mIHBheWxvYWQ/LmVycm9yID09PSAic3RyaW5nIiAmJiBwYXlsb2FkLmVycm9yICYmIHsgZXJy
b3I6IHBheWxvYWQuZXJyb3IgfQoJCQl9OwoJCX0sCgkJZ2V0U2Vzc2lvbk1lc3NhZ2VzLAoJCWFz
eW5jIGdldFNlc3Npb24ocGFyYW1zKSB7CgkJCXJldHVybiBnZXRTZXNzaW9uTWVzc2FnZXMocGFy
YW1zKTsKCQl9LAoJCWFzeW5jIGRlbGV0ZVNlc3Npb24ocGFyYW1zKSB7CgkJCWF3YWl0IGRpc3Bh
dGNoR2F0ZXdheU1ldGhvZCgic2Vzc2lvbnMuZGVsZXRlIiwgewoJCQkJa2V5OiBwYXJhbXMuc2Vz
c2lvbktleSwKCQkJCWRlbGV0ZVRyYW5zY3JpcHQ6IHBhcmFtcy5kZWxldGVUcmFuc2NyaXB0ID8/
IHRydWUKCQkJfSk7CgkJfQoJfTsKfQpmdW5jdGlvbiBsb2FkR2F0ZXdheVBsdWdpbnMocGFyYW1z
KSB7Cgljb25zdCBwbHVnaW5SZWdpc3RyeSA9IGxvYWRPcGVuQ2xhd1BsdWdpbnMoewoJCWNvbmZp
ZzogcGFyYW1zLmNmZywKCQl3b3Jrc3BhY2VEaXI6IHBhcmFtcy53b3Jrc3BhY2VEaXIsCgkJbG9n
Z2VyOiB7CgkJCWluZm86IChtc2cpID0+IHBhcmFtcy5sb2cuaW5mbyhtc2cpLAoJCQl3YXJuOiAo
bXNnKSA9PiBwYXJhbXMubG9nLndhcm4obXNnKSwKCQkJZXJyb3I6IChtc2cpID0+IHBhcmFtcy5s
b2cuZXJyb3IobXNnKSwKCQkJZGVidWc6IChtc2cpID0+IHBhcmFtcy5sb2cuZGVidWcobXNnKQoJ
CX0sCgkJY29yZUdhdGV3YXlIYW5kbGVyczogcGFyYW1zLmNvcmVHYXRld2F5SGFuZGxlcnMsCgkJ
cnVudGltZU9wdGlvbnM6IHsgc3ViYWdlbnQ6IGNyZWF0ZUdhdGV3YXlTdWJhZ2VudFJ1bnRpbWUo
KSB9Cgl9KTsKCWNvbnN0IHBsdWdpbk1ldGhvZHMgPSBPYmplY3Qua2V5cyhwbHVnaW5SZWdpc3Ry
eS5nYXRld2F5SGFuZGxlcnMpOwoJY29uc3QgZ2F0ZXdheU1ldGhvZHMgPSBBcnJheS5mcm9tKG5l
dyBTZXQoWy4uLnBhcmFtcy5iYXNlTWV0aG9kcywgLi4ucGx1Z2luTWV0aG9kc10pKTsKCWlmIChw
bHVnaW5SZWdpc3RyeS5kaWFnbm9zdGljcy5sZW5ndGggPiAwKSBmb3IgKGNvbnN0IGRpYWcgb2Yg
cGx1Z2luUmVnaXN0cnkuZGlhZ25vc3RpY3MpIHsKCQljb25zdCBkZXRhaWxzID0gW2RpYWcucGx1
Z2luSWQgPyBgcGx1Z2luPSR7ZGlhZy5wbHVnaW5JZH1gIDogbnVsbCwgZGlhZy5zb3VyY2UgPyBg
c291cmNlPSR7ZGlhZy5zb3VyY2V9YCA6IG51bGxdLmZpbHRlcigoZW50cnkpID0+IEJvb2xlYW4o
ZW50cnkpKS5qb2luKCIsICIpOwoJCWNvbnN0IG1lc3NhZ2UgPSBkZXRhaWxzID8gYFtwbHVnaW5z
XSAke2RpYWcubWVzc2FnZX0gKCR7ZGV0YWlsc30pYCA6IGBbcGx1Z2luc10gJHtkaWFnLm1lc3Nh
Z2V9YDsKCQlpZiAoZGlhZy5sZXZlbCA9PT0gImVycm9yIikgcGFyYW1zLmxvZy5lcnJvcihtZXNz
YWdlKTsKCQllbHNlIHBhcmFtcy5sb2cuaW5mbyhtZXNzYWdlKTsKCX0KCXJldHVybiB7CgkJcGx1
Z2luUmVnaXN0cnksCgkJZ2F0ZXdheU1ldGhvZHMKCX07Cn0KLy8jZW5kcmVnaW9uCi8vI3JlZ2lv
biBzcmMvaG9va3MvZ21haWwtd2F0Y2hlci1saWZlY3ljbGUudHMKYXN5bmMgZnVuY3Rpb24gc3Rh
cnRHbWFpbFdhdGNoZXJXaXRoTG9ncyhwYXJhbXMpIHsKCWlmIChpc1RydXRoeUVudlZhbHVlKHBy
b2Nlc3MuZW52Lk9QRU5DTEFXX1NLSVBfR01BSUxfV0FUQ0hFUikpIHsKCQlwYXJhbXMub25Ta2lw
cGVkPy4oKTsKCQlyZXR1cm47Cgl9Cgl0cnkgewoJCWNvbnN0IGdtYWlsUmVzdWx0ID0gYXdhaXQg
c3RhcnRHbWFpbFdhdGNoZXIocGFyYW1zLmNmZyk7CgkJaWYgKGdtYWlsUmVzdWx0LnN0YXJ0ZWQp
IHsKCQkJcGFyYW1zLmxvZy5pbmZvKCJnbWFpbCB3YXRjaGVyIHN0YXJ0ZWQiKTsKCQkJcmV0dXJu
OwoJCX0KCQlpZiAoZ21haWxSZXN1bHQucmVhc29uICYmIGdtYWlsUmVzdWx0LnJlYXNvbiAhPT0g
Imhvb2tzIG5vdCBlbmFibGVkIiAmJiBnbWFpbFJlc3VsdC5yZWFzb24gIT09ICJubyBnbWFpbCBh
Y2NvdW50IGNvbmZpZ3VyZWQiKSBwYXJhbXMubG9nLndhcm4oYGdtYWlsIHdhdGNoZXIgbm90IHN0
YXJ0ZWQ6ICR7Z21haWxSZXN1bHQucmVhc29ufWApOwoJfSBjYXRjaCAoZXJyKSB7CgkJcGFyYW1z
LmxvZy5lcnJvcihgZ21haWwgd2F0Y2hlciBmYWlsZWQgdG8gc3RhcnQ6ICR7U3RyaW5nKGVycil9
YCk7Cgl9Cn0KLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvZ2F0ZXdheS9zZXJ2ZXItYnJvd3Nl
ci50cwphc3luYyBmdW5jdGlvbiBzdGFydEJyb3dzZXJDb250cm9sU2VydmVySWZFbmFibGVkKCkg
ewoJaWYgKGlzVHJ1dGh5RW52VmFsdWUocHJvY2Vzcy5lbnYuT1BFTkNMQVdfU0tJUF9CUk9XU0VS
X0NPTlRST0xfU0VSVkVSKSkgcmV0dXJuIG51bGw7Cgljb25zdCBvdmVycmlkZSA9IHByb2Nlc3Mu
ZW52Lk9QRU5DTEFXX0JST1dTRVJfQ09OVFJPTF9NT0RVTEU/LnRyaW0oKTsKCWNvbnN0IG1vZCA9
IG92ZXJyaWRlID8gYXdhaXQgaW1wb3J0KG92ZXJyaWRlKSA6IGF3YWl0IGltcG9ydCgiLi9zZXJ2
ZXItSG1rdS1mMzguanMiKTsKCWNvbnN0IHN0YXJ0ID0gdHlwZW9mIG1vZC5zdGFydEJyb3dzZXJD
b250cm9sU2VydmljZUZyb21Db25maWcgPT09ICJmdW5jdGlvbiIgPyBtb2Quc3RhcnRCcm93c2Vy
Q29udHJvbFNlcnZpY2VGcm9tQ29uZmlnIDogbW9kLnN0YXJ0QnJvd3NlckNvbnRyb2xTZXJ2ZXJG
cm9tQ29uZmlnOwoJY29uc3Qgc3RvcCA9IHR5cGVvZiBtb2Quc3RvcEJyb3dzZXJDb250cm9sU2Vy
dmljZSA9PT0gImZ1bmN0aW9uIiA/IG1vZC5zdG9wQnJvd3NlckNvbnRyb2xTZXJ2aWNlIDogbW9k
LnN0b3BCcm93c2VyQ29udHJvbFNlcnZlcjsKCWlmICghc3RhcnQpIHJldHVybiBudWxsOwoJYXdh
aXQgc3RhcnQoKTsKCXJldHVybiB7IHN0b3A6IHN0b3AgPz8gKGFzeW5jICgpID0+IHt9KSB9Owp9
Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2NhbnZhcy1ob3N0L2ZpbGUtcmVzb2x2ZXIudHMK
ZnVuY3Rpb24gbm9ybWFsaXplVXJsUGF0aChyYXdQYXRoKSB7Cgljb25zdCBkZWNvZGVkID0gZGVj
b2RlVVJJQ29tcG9uZW50KHJhd1BhdGggfHwgIi8iKTsKCWNvbnN0IG5vcm1hbGl6ZWQgPSBwYXRo
LnBvc2l4Lm5vcm1hbGl6ZShkZWNvZGVkKTsKCXJldHVybiBub3JtYWxpemVkLnN0YXJ0c1dpdGgo
Ii8iKSA/IG5vcm1hbGl6ZWQgOiBgLyR7bm9ybWFsaXplZH1gOwp9CmFzeW5jIGZ1bmN0aW9uIHJl
c29sdmVGaWxlV2l0aGluUm9vdChyb290UmVhbCwgdXJsUGF0aCkgewoJY29uc3Qgbm9ybWFsaXpl
ZCA9IG5vcm1hbGl6ZVVybFBhdGgodXJsUGF0aCk7Cgljb25zdCByZWwgPSBub3JtYWxpemVkLnJl
cGxhY2UoL15cLysvLCAiIik7CglpZiAocmVsLnNwbGl0KCIvIikuc29tZSgocCkgPT4gcCA9PT0g
Ii4uIikpIHJldHVybiBudWxsOwoJY29uc3QgdHJ5T3BlbiA9IGFzeW5jIChyZWxhdGl2ZSkgPT4g
ewoJCXRyeSB7CgkJCXJldHVybiBhd2FpdCBvcGVuRmlsZVdpdGhpblJvb3QoewoJCQkJcm9vdERp
cjogcm9vdFJlYWwsCgkJCQlyZWxhdGl2ZVBhdGg6IHJlbGF0aXZlCgkJCX0pOwoJCX0gY2F0Y2gg
KGVycikgewoJCQlpZiAoZXJyIGluc3RhbmNlb2YgU2FmZU9wZW5FcnJvcikgcmV0dXJuIG51bGw7
CgkJCXRocm93IGVycjsKCQl9Cgl9OwoJaWYgKG5vcm1hbGl6ZWQuZW5kc1dpdGgoIi8iKSkgcmV0
dXJuIGF3YWl0IHRyeU9wZW4ocGF0aC5wb3NpeC5qb2luKHJlbCwgImluZGV4Lmh0bWwiKSk7Cglj
b25zdCBjYW5kaWRhdGUgPSBwYXRoLmpvaW4ocm9vdFJlYWwsIHJlbCk7Cgl0cnkgewoJCWNvbnN0
IHN0ID0gYXdhaXQgZnMkMS5sc3RhdChjYW5kaWRhdGUpOwoJCWlmIChzdC5pc1N5bWJvbGljTGlu
aygpKSByZXR1cm4gbnVsbDsKCQlpZiAoc3QuaXNEaXJlY3RvcnkoKSkgcmV0dXJuIGF3YWl0IHRy
eU9wZW4ocGF0aC5wb3NpeC5qb2luKHJlbCwgImluZGV4Lmh0bWwiKSk7Cgl9IGNhdGNoIHt9Cgly
ZXR1cm4gYXdhaXQgdHJ5T3BlbihyZWwpOwp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2Nh
bnZhcy1ob3N0L2EydWkudHMKY29uc3QgQTJVSV9QQVRIID0gIi9fX29wZW5jbGF3X18vYTJ1aSI7
CmNvbnN0IENBTlZBU19IT1NUX1BBVEggPSAiL19fb3BlbmNsYXdfXy9jYW52YXMiOwpjb25zdCBD
QU5WQVNfV1NfUEFUSCA9ICIvX19vcGVuY2xhd19fL3dzIjsKbGV0IGNhY2hlZEEydWlSb290UmVh
bDsKbGV0IHJlc29sdmluZ0EydWlSb290ID0gbnVsbDsKbGV0IGNhY2hlZEEydWlSZXNvbHZlZEF0
TXMgPSAwOwpjb25zdCBBMlVJX1JPT1RfUkVUUllfTlVMTF9BRlRFUl9NUyA9IDFlNDsKYXN5bmMg
ZnVuY3Rpb24gcmVzb2x2ZUEydWlSb290KCkgewoJY29uc3QgaGVyZSA9IHBhdGguZGlybmFtZShm
aWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpOwoJY29uc3QgZW50cnlEaXIgPSBwcm9jZXNz
LmFyZ3ZbMV0gPyBwYXRoLmRpcm5hbWUocGF0aC5yZXNvbHZlKHByb2Nlc3MuYXJndlsxXSkpIDog
bnVsbDsKCWNvbnN0IGNhbmRpZGF0ZXMgPSBbCgkJcGF0aC5yZXNvbHZlKGhlcmUsICJhMnVpIiks
CgkJcGF0aC5yZXNvbHZlKGhlcmUsICJjYW52YXMtaG9zdC9hMnVpIiksCgkJcGF0aC5yZXNvbHZl
KGhlcmUsICIuLi9jYW52YXMtaG9zdC9hMnVpIiksCgkJLi4uZW50cnlEaXIgPyBbCgkJCXBhdGgu
cmVzb2x2ZShlbnRyeURpciwgImEydWkiKSwKCQkJcGF0aC5yZXNvbHZlKGVudHJ5RGlyLCAiY2Fu
dmFzLWhvc3QvYTJ1aSIpLAoJCQlwYXRoLnJlc29sdmUoZW50cnlEaXIsICIuLi9jYW52YXMtaG9z
dC9hMnVpIikKCQldIDogW10sCgkJcGF0aC5yZXNvbHZlKGhlcmUsICIuLi8uLi9zcmMvY2FudmFz
LWhvc3QvYTJ1aSIpLAoJCXBhdGgucmVzb2x2ZShoZXJlLCAiLi4vc3JjL2NhbnZhcy1ob3N0L2Ey
dWkiKSwKCQlwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgInNyYy9jYW52YXMtaG9zdC9hMnVp
IiksCgkJcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksICJkaXN0L2NhbnZhcy1ob3N0L2EydWki
KQoJXTsKCWlmIChwcm9jZXNzLmV4ZWNQYXRoKSBjYW5kaWRhdGVzLnVuc2hpZnQocGF0aC5yZXNv
bHZlKHBhdGguZGlybmFtZShwcm9jZXNzLmV4ZWNQYXRoKSwgImEydWkiKSk7Cglmb3IgKGNvbnN0
IGRpciBvZiBjYW5kaWRhdGVzKSB0cnkgewoJCWNvbnN0IGluZGV4UGF0aCA9IHBhdGguam9pbihk
aXIsICJpbmRleC5odG1sIik7CgkJY29uc3QgYnVuZGxlUGF0aCA9IHBhdGguam9pbihkaXIsICJh
MnVpLmJ1bmRsZS5qcyIpOwoJCWF3YWl0IGZzJDEuc3RhdChpbmRleFBhdGgpOwoJCWF3YWl0IGZz
JDEuc3RhdChidW5kbGVQYXRoKTsKCQlyZXR1cm4gZGlyOwoJfSBjYXRjaCB7fQoJcmV0dXJuIG51
bGw7Cn0KYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUEydWlSb290UmVhbCgpIHsKCWlmIChjYWNoZWRB
MnVpUm9vdFJlYWwgIT09IHZvaWQgMCAmJiAoY2FjaGVkQTJ1aVJvb3RSZWFsICE9PSBudWxsIHx8
IERhdGUubm93KCkgLSBjYWNoZWRBMnVpUmVzb2x2ZWRBdE1zIDwgQTJVSV9ST09UX1JFVFJZX05V
TExfQUZURVJfTVMpKSByZXR1cm4gY2FjaGVkQTJ1aVJvb3RSZWFsOwoJaWYgKCFyZXNvbHZpbmdB
MnVpUm9vdCkgcmVzb2x2aW5nQTJ1aVJvb3QgPSAoYXN5bmMgKCkgPT4gewoJCWNvbnN0IHJvb3Qg
PSBhd2FpdCByZXNvbHZlQTJ1aVJvb3QoKTsKCQljYWNoZWRBMnVpUm9vdFJlYWwgPSByb290ID8g
YXdhaXQgZnMkMS5yZWFscGF0aChyb290KSA6IG51bGw7CgkJY2FjaGVkQTJ1aVJlc29sdmVkQXRN
cyA9IERhdGUubm93KCk7CgkJcmVzb2x2aW5nQTJ1aVJvb3QgPSBudWxsOwoJCXJldHVybiBjYWNo
ZWRBMnVpUm9vdFJlYWw7Cgl9KSgpOwoJcmV0dXJuIHJlc29sdmluZ0EydWlSb290Owp9CmZ1bmN0
aW9uIGluamVjdENhbnZhc0xpdmVSZWxvYWQoaHRtbCkgewoJY29uc3Qgc25pcHBldCA9IGAKPHNj
cmlwdD4KKCgpID0+IHsKICAvLyBDcm9zcy1wbGF0Zm9ybSBhY3Rpb24gYnJpZGdlIGhlbHBlci4K
ICAvLyBXb3JrcyBvbjoKICAvLyAtIGlPUzogd2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMu
b3BlbmNsYXdDYW52YXNBMlVJQWN0aW9uLnBvc3RNZXNzYWdlKC4uLikKICAvLyAtIEFuZHJvaWQ6
IHdpbmRvdy5vcGVuY2xhd0NhbnZhc0EyVUlBY3Rpb24ucG9zdE1lc3NhZ2UoLi4uKQogIGNvbnN0
IGhhbmRsZXJOYW1lcyA9IFsib3BlbmNsYXdDYW52YXNBMlVJQWN0aW9uIl07CiAgZnVuY3Rpb24g
cG9zdFRvTm9kZShwYXlsb2FkKSB7CiAgICB0cnkgewogICAgICBjb25zdCByYXcgPSB0eXBlb2Yg
cGF5bG9hZCA9PT0gInN0cmluZyIgPyBwYXlsb2FkIDogSlNPTi5zdHJpbmdpZnkocGF5bG9hZCk7
CiAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBoYW5kbGVyTmFtZXMpIHsKICAgICAgICBjb25zdCBp
b3NIYW5kbGVyID0gZ2xvYmFsVGhpcy53ZWJraXQ/Lm1lc3NhZ2VIYW5kbGVycz8uW25hbWVdOwog
ICAgICAgIGlmIChpb3NIYW5kbGVyICYmIHR5cGVvZiBpb3NIYW5kbGVyLnBvc3RNZXNzYWdlID09
PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICBpb3NIYW5kbGVyLnBvc3RNZXNzYWdlKHJhdyk7CiAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgY29uc3QgYW5kcm9pZEhhbmRs
ZXIgPSBnbG9iYWxUaGlzW25hbWVdOwogICAgICAgIGlmIChhbmRyb2lkSGFuZGxlciAmJiB0eXBl
b2YgYW5kcm9pZEhhbmRsZXIucG9zdE1lc3NhZ2UgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAg
IC8vIEltcG9ydGFudDogY2FsbCBhcyBhIG1ldGhvZCBvbiB0aGUgaW50ZXJmYWNlIG9iamVjdCAo
YmluZGluZyBtYXR0ZXJzIG9uIEFuZHJvaWQgV2ViVmlldykuCiAgICAgICAgICBhbmRyb2lkSGFu
ZGxlci5wb3N0TWVzc2FnZShyYXcpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQog
ICAgICB9CiAgICB9IGNhdGNoIHt9CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGZ1bmN0aW9uIHNl
bmRVc2VyQWN0aW9uKHVzZXJBY3Rpb24pIHsKICAgIGNvbnN0IGlkID0KICAgICAgKHVzZXJBY3Rp
b24gJiYgdHlwZW9mIHVzZXJBY3Rpb24uaWQgPT09ICJzdHJpbmciICYmIHVzZXJBY3Rpb24uaWQu
dHJpbSgpKSB8fAogICAgICAoZ2xvYmFsVGhpcy5jcnlwdG8/LnJhbmRvbVVVSUQ/LigpID8/IFN0
cmluZyhEYXRlLm5vdygpKSk7CiAgICBjb25zdCBhY3Rpb24gPSB7IC4uLnVzZXJBY3Rpb24sIGlk
IH07CiAgICByZXR1cm4gcG9zdFRvTm9kZSh7IHVzZXJBY3Rpb246IGFjdGlvbiB9KTsKICB9CiAg
Z2xvYmFsVGhpcy5PcGVuQ2xhdyA9IGdsb2JhbFRoaXMuT3BlbkNsYXcgPz8ge307CiAgZ2xvYmFs
VGhpcy5PcGVuQ2xhdy5wb3N0TWVzc2FnZSA9IHBvc3RUb05vZGU7CiAgZ2xvYmFsVGhpcy5PcGVu
Q2xhdy5zZW5kVXNlckFjdGlvbiA9IHNlbmRVc2VyQWN0aW9uOwogIGdsb2JhbFRoaXMub3BlbmNs
YXdQb3N0TWVzc2FnZSA9IHBvc3RUb05vZGU7CiAgZ2xvYmFsVGhpcy5vcGVuY2xhd1NlbmRVc2Vy
QWN0aW9uID0gc2VuZFVzZXJBY3Rpb247CgogIHRyeSB7CiAgICBjb25zdCBjYXAgPSBuZXcgVVJM
U2VhcmNoUGFyYW1zKGxvY2F0aW9uLnNlYXJjaCkuZ2V0KCJvY19jYXAiKTsKICAgIGNvbnN0IHBy
b3RvID0gbG9jYXRpb24ucHJvdG9jb2wgPT09ICJodHRwczoiID8gIndzcyIgOiAid3MiOwogICAg
Y29uc3QgY2FwUXVlcnkgPSBjYXAgPyAiP29jX2NhcD0iICsgZW5jb2RlVVJJQ29tcG9uZW50KGNh
cCkgOiAiIjsKICAgIGNvbnN0IHdzID0gbmV3IFdlYlNvY2tldChwcm90byArICI6Ly8iICsgbG9j
YXRpb24uaG9zdCArICR7SlNPTi5zdHJpbmdpZnkoQ0FOVkFTX1dTX1BBVEgpfSArIGNhcFF1ZXJ5
KTsKICAgIHdzLm9ubWVzc2FnZSA9IChldikgPT4gewogICAgICBpZiAoU3RyaW5nKGV2LmRhdGEg
fHwgIiIpID09PSAicmVsb2FkIikgbG9jYXRpb24ucmVsb2FkKCk7CiAgICB9OwogIH0gY2F0Y2gg
e30KfSkoKTsKPFwvc2NyaXB0PgpgLnRyaW0oKTsKCWNvbnN0IGlkeCA9IGh0bWwudG9Mb3dlckNh
c2UoKS5sYXN0SW5kZXhPZigiPC9ib2R5PiIpOwoJaWYgKGlkeCA+PSAwKSByZXR1cm4gYCR7aHRt
bC5zbGljZSgwLCBpZHgpfVxuJHtzbmlwcGV0fVxuJHtodG1sLnNsaWNlKGlkeCl9YDsKCXJldHVy
biBgJHtodG1sfVxuJHtzbmlwcGV0fVxuYDsKfQphc3luYyBmdW5jdGlvbiBoYW5kbGVBMnVpSHR0
cFJlcXVlc3QocmVxLCByZXMpIHsKCWNvbnN0IHVybFJhdyA9IHJlcS51cmw7CglpZiAoIXVybFJh
dykgcmV0dXJuIGZhbHNlOwoJY29uc3QgdXJsID0gbmV3IFVSTCh1cmxSYXcsICJodHRwOi8vbG9j
YWxob3N0Iik7Cgljb25zdCBiYXNlUGF0aCA9IHVybC5wYXRobmFtZSA9PT0gIi9fX29wZW5jbGF3
X18vYTJ1aSIgfHwgdXJsLnBhdGhuYW1lLnN0YXJ0c1dpdGgoYC9fX29wZW5jbGF3X18vYTJ1aS9g
KSA/IEEyVUlfUEFUSCA6IHZvaWQgMDsKCWlmICghYmFzZVBhdGgpIHJldHVybiBmYWxzZTsKCWlm
IChyZXEubWV0aG9kICE9PSAiR0VUIiAmJiByZXEubWV0aG9kICE9PSAiSEVBRCIpIHsKCQlyZXMu
c3RhdHVzQ29kZSA9IDQwNTsKCQlyZXMuc2V0SGVhZGVyKCJDb250ZW50LVR5cGUiLCAidGV4dC9w
bGFpbjsgY2hhcnNldD11dGYtOCIpOwoJCXJlcy5lbmQoIk1ldGhvZCBOb3QgQWxsb3dlZCIpOwoJ
CXJldHVybiB0cnVlOwoJfQoJY29uc3QgYTJ1aVJvb3RSZWFsID0gYXdhaXQgcmVzb2x2ZUEydWlS
b290UmVhbCgpOwoJaWYgKCFhMnVpUm9vdFJlYWwpIHsKCQlyZXMuc3RhdHVzQ29kZSA9IDUwMzsK
CQlyZXMuc2V0SGVhZGVyKCJDb250ZW50LVR5cGUiLCAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYt
OCIpOwoJCXJlcy5lbmQoIkEyVUkgYXNzZXRzIG5vdCBmb3VuZCIpOwoJCXJldHVybiB0cnVlOwoJ
fQoJY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzb2x2ZUZpbGVXaXRoaW5Sb290KGEydWlSb290UmVh
bCwgdXJsLnBhdGhuYW1lLnNsaWNlKGJhc2VQYXRoLmxlbmd0aCkgfHwgIi8iKTsKCWlmICghcmVz
dWx0KSB7CgkJcmVzLnN0YXR1c0NvZGUgPSA0MDQ7CgkJcmVzLnNldEhlYWRlcigiQ29udGVudC1U
eXBlIiwgInRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiKTsKCQlyZXMuZW5kKCJub3QgZm91bmQi
KTsKCQlyZXR1cm4gdHJ1ZTsKCX0KCXRyeSB7CgkJY29uc3QgbG93ZXIgPSByZXN1bHQucmVhbFBh
dGgudG9Mb3dlckNhc2UoKTsKCQljb25zdCBtaW1lID0gbG93ZXIuZW5kc1dpdGgoIi5odG1sIikg
fHwgbG93ZXIuZW5kc1dpdGgoIi5odG0iKSA/ICJ0ZXh0L2h0bWwiIDogYXdhaXQgZGV0ZWN0TWlt
ZSh7IGZpbGVQYXRoOiByZXN1bHQucmVhbFBhdGggfSkgPz8gImFwcGxpY2F0aW9uL29jdGV0LXN0
cmVhbSI7CgkJcmVzLnNldEhlYWRlcigiQ2FjaGUtQ29udHJvbCIsICJuby1zdG9yZSIpOwoJCWlm
IChyZXEubWV0aG9kID09PSAiSEVBRCIpIHsKCQkJcmVzLnNldEhlYWRlcigiQ29udGVudC1UeXBl
IiwgbWltZSA9PT0gInRleHQvaHRtbCIgPyAidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiA6IG1p
bWUpOwoJCQlyZXMuZW5kKCk7CgkJCXJldHVybiB0cnVlOwoJCX0KCQlpZiAobWltZSA9PT0gInRl
eHQvaHRtbCIpIHsKCQkJY29uc3QgYnVmID0gYXdhaXQgcmVzdWx0LmhhbmRsZS5yZWFkRmlsZSh7
IGVuY29kaW5nOiAidXRmOCIgfSk7CgkJCXJlcy5zZXRIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJ0
ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiKTsKCQkJcmVzLmVuZChpbmplY3RDYW52YXNMaXZlUmVs
b2FkKGJ1ZikpOwoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgkJcmVzLnNldEhlYWRlcigiQ29udGVudC1U
eXBlIiwgbWltZSk7CgkJcmVzLmVuZChhd2FpdCByZXN1bHQuaGFuZGxlLnJlYWRGaWxlKCkpOwoJ
CXJldHVybiB0cnVlOwoJfSBmaW5hbGx5IHsKCQlhd2FpdCByZXN1bHQuaGFuZGxlLmNsb3NlKCku
Y2F0Y2goKCkgPT4ge30pOwoJfQp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dhdGV3YXkv
Y29udHJvbC11aS1jc3AudHMKZnVuY3Rpb24gYnVpbGRDb250cm9sVWlDc3BIZWFkZXIoKSB7Cgly
ZXR1cm4gWwoJCSJkZWZhdWx0LXNyYyAnc2VsZiciLAoJCSJiYXNlLXVyaSAnbm9uZSciLAoJCSJv
YmplY3Qtc3JjICdub25lJyIsCgkJImZyYW1lLWFuY2VzdG9ycyAnbm9uZSciLAoJCSJzY3JpcHQt
c3JjICdzZWxmJyIsCgkJInN0eWxlLXNyYyAnc2VsZicgJ3Vuc2FmZS1pbmxpbmUnIGh0dHBzOi8v
Zm9udHMuZ29vZ2xlYXBpcy5jb20iLAoJCSJpbWctc3JjICdzZWxmJyBkYXRhOiBodHRwczoiLAoJ
CSJmb250LXNyYyAnc2VsZicgaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbSIsCgkJImNvbm5lY3Qt
c3JjICdzZWxmJyB3czogd3NzOiIKCV0uam9pbigiOyAiKTsKfQovLyNlbmRyZWdpb24KLy8jcmVn
aW9uIHNyYy9nYXRld2F5L2NvbnRyb2wtdWktaHR0cC11dGlscy50cwpmdW5jdGlvbiBpc1JlYWRI
dHRwTWV0aG9kKG1ldGhvZCkgewoJcmV0dXJuIG1ldGhvZCA9PT0gIkdFVCIgfHwgbWV0aG9kID09
PSAiSEVBRCI7Cn0KZnVuY3Rpb24gcmVzcG9uZFBsYWluVGV4dChyZXMsIHN0YXR1c0NvZGUsIGJv
ZHkpIHsKCXJlcy5zdGF0dXNDb2RlID0gc3RhdHVzQ29kZTsKCXJlcy5zZXRIZWFkZXIoIkNvbnRl
bnQtVHlwZSIsICJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iik7CglyZXMuZW5kKGJvZHkpOwp9
CmZ1bmN0aW9uIHJlc3BvbmROb3RGb3VuZChyZXMpIHsKCXJlc3BvbmRQbGFpblRleHQocmVzLCA0
MDQsICJOb3QgRm91bmQiKTsKfQovLyNlbmRyZWdpb24KLy8jcmVnaW9uIHNyYy9nYXRld2F5L2Nv
bnRyb2wtdWktcm91dGluZy50cwpjb25zdCBST09UX01PVU5URURfR0FURVdBWV9QUk9CRV9QQVRI
UyA9IG5ldyBTZXQoWwoJIi9oZWFsdGgiLAoJIi9oZWFsdGh6IiwKCSIvcmVhZHkiLAoJIi9yZWFk
eXoiCl0pOwpmdW5jdGlvbiBjbGFzc2lmeUNvbnRyb2xVaVJlcXVlc3QocGFyYW1zKSB7Cgljb25z
dCB7IGJhc2VQYXRoLCBwYXRobmFtZSwgc2VhcmNoLCBtZXRob2QgfSA9IHBhcmFtczsKCWlmICgh
YmFzZVBhdGgpIHsKCQlpZiAocGF0aG5hbWUgPT09ICIvdWkiIHx8IHBhdGhuYW1lLnN0YXJ0c1dp
dGgoIi91aS8iKSkgcmV0dXJuIHsga2luZDogIm5vdC1mb3VuZCIgfTsKCQlpZiAoUk9PVF9NT1VO
VEVEX0dBVEVXQVlfUFJPQkVfUEFUSFMuaGFzKHBhdGhuYW1lKSkgcmV0dXJuIHsga2luZDogIm5v
dC1jb250cm9sLXVpIiB9OwoJCWlmIChwYXRobmFtZSA9PT0gIi9wbHVnaW5zIiB8fCBwYXRobmFt
ZS5zdGFydHNXaXRoKCIvcGx1Z2lucy8iKSkgcmV0dXJuIHsga2luZDogIm5vdC1jb250cm9sLXVp
IiB9OwoJCWlmIChwYXRobmFtZSA9PT0gIi9hcGkiIHx8IHBhdGhuYW1lLnN0YXJ0c1dpdGgoIi9h
cGkvIikpIHJldHVybiB7IGtpbmQ6ICJub3QtY29udHJvbC11aSIgfTsKCQlpZiAoIWlzUmVhZEh0
dHBNZXRob2QobWV0aG9kKSkgcmV0dXJuIHsga2luZDogIm5vdC1jb250cm9sLXVpIiB9OwoJCXJl
dHVybiB7IGtpbmQ6ICJzZXJ2ZSIgfTsKCX0KCWlmICghcGF0aG5hbWUuc3RhcnRzV2l0aChgJHti
YXNlUGF0aH0vYCkgJiYgcGF0aG5hbWUgIT09IGJhc2VQYXRoKSByZXR1cm4geyBraW5kOiAibm90
LWNvbnRyb2wtdWkiIH07CglpZiAoIWlzUmVhZEh0dHBNZXRob2QobWV0aG9kKSkgcmV0dXJuIHsg
a2luZDogIm5vdC1jb250cm9sLXVpIiB9OwoJaWYgKHBhdGhuYW1lID09PSBiYXNlUGF0aCkgcmV0
dXJuIHsKCQlraW5kOiAicmVkaXJlY3QiLAoJCWxvY2F0aW9uOiBgJHtiYXNlUGF0aH0vJHtzZWFy
Y2h9YAoJfTsKCXJldHVybiB7IGtpbmQ6ICJzZXJ2ZSIgfTsKfQovLyNlbmRyZWdpb24KLy8jcmVn
aW9uIHNyYy9nYXRld2F5L2NvbnRyb2wtdWkudHMKY29uc3QgUk9PVF9QUkVGSVggPSAiLyI7CmNv
bnN0IENPTlRST0xfVUlfQVNTRVRTX01JU1NJTkdfTUVTU0FHRSA9ICJDb250cm9sIFVJIGFzc2V0
cyBub3QgZm91bmQuIEJ1aWxkIHRoZW0gd2l0aCBgcG5wbSB1aTpidWlsZGAgKGF1dG8taW5zdGFs
bHMgVUkgZGVwcyksIG9yIHJ1biBgcG5wbSB1aTpkZXZgIGR1cmluZyBkZXZlbG9wbWVudC4iOwpm
dW5jdGlvbiBjb250ZW50VHlwZUZvckV4dChleHQpIHsKCXN3aXRjaCAoZXh0KSB7CgkJY2FzZSAi
Lmh0bWwiOiByZXR1cm4gInRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI7CgkJY2FzZSAiLmpzIjog
cmV0dXJuICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0OyBjaGFyc2V0PXV0Zi04IjsKCQljYXNlICIu
Y3NzIjogcmV0dXJuICJ0ZXh0L2NzczsgY2hhcnNldD11dGYtOCI7CgkJY2FzZSAiLmpzb24iOgoJ
CWNhc2UgIi5tYXAiOiByZXR1cm4gImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgiOwoJ
CWNhc2UgIi5zdmciOiByZXR1cm4gImltYWdlL3N2Zyt4bWwiOwoJCWNhc2UgIi5wbmciOiByZXR1
cm4gImltYWdlL3BuZyI7CgkJY2FzZSAiLmpwZyI6CgkJY2FzZSAiLmpwZWciOiByZXR1cm4gImlt
YWdlL2pwZWciOwoJCWNhc2UgIi5naWYiOiByZXR1cm4gImltYWdlL2dpZiI7CgkJY2FzZSAiLndl
YnAiOiByZXR1cm4gImltYWdlL3dlYnAiOwoJCWNhc2UgIi5pY28iOiByZXR1cm4gImltYWdlL3gt
aWNvbiI7CgkJY2FzZSAiLnR4dCI6IHJldHVybiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCI7
CgkJZGVmYXVsdDogcmV0dXJuICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iOwoJfQp9Ci8qKgoq
IEV4dGVuc2lvbnMgcmVjb2duaXNlZCBhcyBzdGF0aWMgYXNzZXRzLiAgTWlzc2luZyBmaWxlcyB3
aXRoIHRoZXNlIGV4dGVuc2lvbnMKKiByZXR1cm4gNDA0IGluc3RlYWQgb2YgdGhlIFNQQSBpbmRl
eC5odG1sIGZhbGxiYWNrLiAgYC5odG1sYCBpcyBpbnRlbnRpb25hbGx5CiogZXhjbHVkZWQg4oCU
IGFjdHVhbCBIVE1MIGZpbGVzIG9uIGRpc2sgYXJlIHNlcnZlZCBlYXJsaWVyLCBhbmQgbWlzc2lu
ZyBgLmh0bWxgCiogcGF0aHMgc2hvdWxkIGZhbGwgdGhyb3VnaCB0byB0aGUgU1BBIHJvdXRlciAo
Y2xpZW50LXNpZGUgcm91dGVycyBtYXkgdXNlCiogYC5odG1sYC1zdWZmaXhlZCByb3V0ZXMpLgoq
Lwpjb25zdCBTVEFUSUNfQVNTRVRfRVhURU5TSU9OUyA9IG5ldyBTZXQoWwoJIi5qcyIsCgkiLmNz
cyIsCgkiLmpzb24iLAoJIi5tYXAiLAoJIi5zdmciLAoJIi5wbmciLAoJIi5qcGciLAoJIi5qcGVn
IiwKCSIuZ2lmIiwKCSIud2VicCIsCgkiLmljbyIsCgkiLnR4dCIKXSk7CmZ1bmN0aW9uIGFwcGx5
Q29udHJvbFVpU2VjdXJpdHlIZWFkZXJzKHJlcykgewoJcmVzLnNldEhlYWRlcigiWC1GcmFtZS1P
cHRpb25zIiwgIkRFTlkiKTsKCXJlcy5zZXRIZWFkZXIoIkNvbnRlbnQtU2VjdXJpdHktUG9saWN5
IiwgYnVpbGRDb250cm9sVWlDc3BIZWFkZXIoKSk7CglyZXMuc2V0SGVhZGVyKCJYLUNvbnRlbnQt
VHlwZS1PcHRpb25zIiwgIm5vc25pZmYiKTsKCXJlcy5zZXRIZWFkZXIoIlJlZmVycmVyLVBvbGlj
eSIsICJuby1yZWZlcnJlciIpOwp9CmZ1bmN0aW9uIHNlbmRKc29uJDIocmVzLCBzdGF0dXMsIGJv
ZHkpIHsKCXJlcy5zdGF0dXNDb2RlID0gc3RhdHVzOwoJcmVzLnNldEhlYWRlcigiQ29udGVudC1U
eXBlIiwgImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgiKTsKCXJlcy5zZXRIZWFkZXIo
IkNhY2hlLUNvbnRyb2wiLCAibm8tY2FjaGUiKTsKCXJlcy5lbmQoSlNPTi5zdHJpbmdpZnkoYm9k
eSkpOwp9CmZ1bmN0aW9uIHJlc3BvbmRDb250cm9sVWlBc3NldHNVbmF2YWlsYWJsZShyZXMsIG9w
dGlvbnMpIHsKCWlmIChvcHRpb25zPy5jb25maWd1cmVkUm9vdFBhdGgpIHsKCQlyZXNwb25kUGxh
aW5UZXh0KHJlcywgNTAzLCBgQ29udHJvbCBVSSBhc3NldHMgbm90IGZvdW5kIGF0ICR7b3B0aW9u
cy5jb25maWd1cmVkUm9vdFBhdGh9LiBCdWlsZCB0aGVtIHdpdGggXGBwbnBtIHVpOmJ1aWxkXGAg
KGF1dG8taW5zdGFsbHMgVUkgZGVwcyksIG9yIHVwZGF0ZSBnYXRld2F5LmNvbnRyb2xVaS5yb290
LmApOwoJCXJldHVybjsKCX0KCXJlc3BvbmRQbGFpblRleHQocmVzLCA1MDMsIENPTlRST0xfVUlf
QVNTRVRTX01JU1NJTkdfTUVTU0FHRSk7Cn0KZnVuY3Rpb24gcmVzcG9uZEhlYWRGb3JGaWxlKHJl
cSwgcmVzLCBmaWxlUGF0aCkgewoJaWYgKHJlcS5tZXRob2QgIT09ICJIRUFEIikgcmV0dXJuIGZh
bHNlOwoJcmVzLnN0YXR1c0NvZGUgPSAyMDA7CglzZXRTdGF0aWNGaWxlSGVhZGVycyhyZXMsIGZp
bGVQYXRoKTsKCXJlcy5lbmQoKTsKCXJldHVybiB0cnVlOwp9CmZ1bmN0aW9uIGlzVmFsaWRBZ2Vu
dElkKGFnZW50SWQpIHsKCXJldHVybiAvXlthLXowLTldW2EtejAtOV8tXXswLDYzfSQvaS50ZXN0
KGFnZW50SWQpOwp9CmZ1bmN0aW9uIGhhbmRsZUNvbnRyb2xVaUF2YXRhclJlcXVlc3QocmVxLCBy
ZXMsIG9wdHMpIHsKCWNvbnN0IHVybFJhdyA9IHJlcS51cmw7CglpZiAoIXVybFJhdykgcmV0dXJu
IGZhbHNlOwoJaWYgKCFpc1JlYWRIdHRwTWV0aG9kKHJlcS5tZXRob2QpKSByZXR1cm4gZmFsc2U7
Cgljb25zdCB1cmwgPSBuZXcgVVJMKHVybFJhdywgImh0dHA6Ly9sb2NhbGhvc3QiKTsKCWNvbnN0
IGJhc2VQYXRoID0gbm9ybWFsaXplQ29udHJvbFVpQmFzZVBhdGgob3B0cy5iYXNlUGF0aCk7Cglj
b25zdCBwYXRobmFtZSA9IHVybC5wYXRobmFtZTsKCWNvbnN0IHBhdGhXaXRoQmFzZSA9IGJhc2VQ
YXRoID8gYCR7YmFzZVBhdGh9JHtDT05UUk9MX1VJX0FWQVRBUl9QUkVGSVh9L2AgOiBgJHtDT05U
Uk9MX1VJX0FWQVRBUl9QUkVGSVh9L2A7CglpZiAoIXBhdGhuYW1lLnN0YXJ0c1dpdGgocGF0aFdp
dGhCYXNlKSkgcmV0dXJuIGZhbHNlOwoJYXBwbHlDb250cm9sVWlTZWN1cml0eUhlYWRlcnMocmVz
KTsKCWNvbnN0IGFnZW50SWRQYXJ0cyA9IHBhdGhuYW1lLnNsaWNlKHBhdGhXaXRoQmFzZS5sZW5n
dGgpLnNwbGl0KCIvIikuZmlsdGVyKEJvb2xlYW4pOwoJY29uc3QgYWdlbnRJZCA9IGFnZW50SWRQ
YXJ0c1swXSA/PyAiIjsKCWlmIChhZ2VudElkUGFydHMubGVuZ3RoICE9PSAxIHx8ICFhZ2VudElk
IHx8ICFpc1ZhbGlkQWdlbnRJZChhZ2VudElkKSkgewoJCXJlc3BvbmROb3RGb3VuZChyZXMpOwoJ
CXJldHVybiB0cnVlOwoJfQoJaWYgKHVybC5zZWFyY2hQYXJhbXMuZ2V0KCJtZXRhIikgPT09ICIx
IikgewoJCWNvbnN0IHJlc29sdmVkID0gb3B0cy5yZXNvbHZlQXZhdGFyKGFnZW50SWQpOwoJCXNl
bmRKc29uJDIocmVzLCAyMDAsIHsgYXZhdGFyVXJsOiByZXNvbHZlZC5raW5kID09PSAibG9jYWwi
ID8gYnVpbGRDb250cm9sVWlBdmF0YXJVcmwoYmFzZVBhdGgsIGFnZW50SWQpIDogcmVzb2x2ZWQu
a2luZCA9PT0gInJlbW90ZSIgfHwgcmVzb2x2ZWQua2luZCA9PT0gImRhdGEiID8gcmVzb2x2ZWQu
dXJsIDogbnVsbCB9KTsKCQlyZXR1cm4gdHJ1ZTsKCX0KCWNvbnN0IHJlc29sdmVkID0gb3B0cy5y
ZXNvbHZlQXZhdGFyKGFnZW50SWQpOwoJaWYgKHJlc29sdmVkLmtpbmQgIT09ICJsb2NhbCIpIHsK
CQlyZXNwb25kTm90Rm91bmQocmVzKTsKCQlyZXR1cm4gdHJ1ZTsKCX0KCWNvbnN0IHNhZmVBdmF0
YXIgPSByZXNvbHZlU2FmZUF2YXRhckZpbGUocmVzb2x2ZWQuZmlsZVBhdGgpOwoJaWYgKCFzYWZl
QXZhdGFyKSB7CgkJcmVzcG9uZE5vdEZvdW5kKHJlcyk7CgkJcmV0dXJuIHRydWU7Cgl9Cgl0cnkg
ewoJCWlmIChyZXNwb25kSGVhZEZvckZpbGUocmVxLCByZXMsIHNhZmVBdmF0YXIucGF0aCkpIHJl
dHVybiB0cnVlOwoJCXNlcnZlUmVzb2x2ZWRGaWxlKHJlcywgc2FmZUF2YXRhci5wYXRoLCBmcy5y
ZWFkRmlsZVN5bmMoc2FmZUF2YXRhci5mZCkpOwoJCXJldHVybiB0cnVlOwoJfSBmaW5hbGx5IHsK
CQlmcy5jbG9zZVN5bmMoc2FmZUF2YXRhci5mZCk7Cgl9Cn0KZnVuY3Rpb24gc2V0U3RhdGljRmls
ZUhlYWRlcnMocmVzLCBmaWxlUGF0aCkgewoJY29uc3QgZXh0ID0gcGF0aC5leHRuYW1lKGZpbGVQ
YXRoKS50b0xvd2VyQ2FzZSgpOwoJcmVzLnNldEhlYWRlcigiQ29udGVudC1UeXBlIiwgY29udGVu
dFR5cGVGb3JFeHQoZXh0KSk7CglyZXMuc2V0SGVhZGVyKCJDYWNoZS1Db250cm9sIiwgIm5vLWNh
Y2hlIik7Cn0KZnVuY3Rpb24gc2VydmVSZXNvbHZlZEZpbGUocmVzLCBmaWxlUGF0aCwgYm9keSkg
ewoJc2V0U3RhdGljRmlsZUhlYWRlcnMocmVzLCBmaWxlUGF0aCk7CglyZXMuZW5kKGJvZHkpOwp9
CmZ1bmN0aW9uIHNlcnZlUmVzb2x2ZWRJbmRleEh0bWwocmVzLCBib2R5KSB7CglyZXMuc2V0SGVh
ZGVyKCJDb250ZW50LVR5cGUiLCAidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Iik7CglyZXMuc2V0
SGVhZGVyKCJDYWNoZS1Db250cm9sIiwgIm5vLWNhY2hlIik7CglyZXMuZW5kKGJvZHkpOwp9CmZ1
bmN0aW9uIGlzRXhwZWN0ZWRTYWZlUGF0aEVycm9yKGVycm9yKSB7Cgljb25zdCBjb2RlID0gdHlw
ZW9mIGVycm9yID09PSAib2JqZWN0IiAmJiBlcnJvciAhPT0gbnVsbCAmJiAiY29kZSIgaW4gZXJy
b3IgPyBTdHJpbmcoZXJyb3IuY29kZSkgOiAiIjsKCXJldHVybiBjb2RlID09PSAiRU5PRU5UIiB8
fCBjb2RlID09PSAiRU5PVERJUiIgfHwgY29kZSA9PT0gIkVMT09QIjsKfQpmdW5jdGlvbiByZXNv
bHZlU2FmZUF2YXRhckZpbGUoZmlsZVBhdGgpIHsKCWNvbnN0IG9wZW5lZCA9IG9wZW5WZXJpZmll
ZEZpbGVTeW5jKHsKCQlmaWxlUGF0aCwKCQlyZWplY3RQYXRoU3ltbGluazogdHJ1ZSwKCQltYXhC
eXRlczogQVZBVEFSX01BWF9CWVRFUwoJfSk7CglpZiAoIW9wZW5lZC5vaykgcmV0dXJuIG51bGw7
CglyZXR1cm4gewoJCXBhdGg6IG9wZW5lZC5wYXRoLAoJCWZkOiBvcGVuZWQuZmQKCX07Cn0KZnVu
Y3Rpb24gcmVzb2x2ZVNhZmVDb250cm9sVWlGaWxlKHJvb3RSZWFsLCBmaWxlUGF0aCwgcmVqZWN0
SGFyZGxpbmtzKSB7Cgljb25zdCBvcGVuZWQgPSBvcGVuQm91bmRhcnlGaWxlU3luYyh7CgkJYWJz
b2x1dGVQYXRoOiBmaWxlUGF0aCwKCQlyb290UGF0aDogcm9vdFJlYWwsCgkJcm9vdFJlYWxQYXRo
OiByb290UmVhbCwKCQlib3VuZGFyeUxhYmVsOiAiY29udHJvbCB1aSByb290IiwKCQlza2lwTGV4
aWNhbFJvb3RDaGVjazogdHJ1ZSwKCQlyZWplY3RIYXJkbGlua3MKCX0pOwoJaWYgKCFvcGVuZWQu
b2spIHsKCQlpZiAob3BlbmVkLnJlYXNvbiA9PT0gImlvIikgdGhyb3cgb3BlbmVkLmVycm9yOwoJ
CXJldHVybiBudWxsOwoJfQoJcmV0dXJuIHsKCQlwYXRoOiBvcGVuZWQucGF0aCwKCQlmZDogb3Bl
bmVkLmZkCgl9Owp9CmZ1bmN0aW9uIGlzU2FmZVJlbGF0aXZlUGF0aChyZWxQYXRoKSB7CglpZiAo
IXJlbFBhdGgpIHJldHVybiBmYWxzZTsKCWNvbnN0IG5vcm1hbGl6ZWQgPSBwYXRoLnBvc2l4Lm5v
cm1hbGl6ZShyZWxQYXRoKTsKCWlmIChwYXRoLnBvc2l4LmlzQWJzb2x1dGUobm9ybWFsaXplZCkg
fHwgcGF0aC53aW4zMi5pc0Fic29sdXRlKG5vcm1hbGl6ZWQpKSByZXR1cm4gZmFsc2U7CglpZiAo
bm9ybWFsaXplZC5zdGFydHNXaXRoKCIuLi8iKSB8fCBub3JtYWxpemVkID09PSAiLi4iKSByZXR1
cm4gZmFsc2U7CglpZiAobm9ybWFsaXplZC5pbmNsdWRlcygiXDAiKSkgcmV0dXJuIGZhbHNlOwoJ
cmV0dXJuIHRydWU7Cn0KZnVuY3Rpb24gaGFuZGxlQ29udHJvbFVpSHR0cFJlcXVlc3QocmVxLCBy
ZXMsIG9wdHMpIHsKCWNvbnN0IHVybFJhdyA9IHJlcS51cmw7CglpZiAoIXVybFJhdykgcmV0dXJu
IGZhbHNlOwoJY29uc3QgdXJsID0gbmV3IFVSTCh1cmxSYXcsICJodHRwOi8vbG9jYWxob3N0Iik7
Cgljb25zdCBiYXNlUGF0aCA9IG5vcm1hbGl6ZUNvbnRyb2xVaUJhc2VQYXRoKG9wdHM/LmJhc2VQ
YXRoKTsKCWNvbnN0IHBhdGhuYW1lID0gdXJsLnBhdGhuYW1lOwoJY29uc3Qgcm91dGUgPSBjbGFz
c2lmeUNvbnRyb2xVaVJlcXVlc3QoewoJCWJhc2VQYXRoLAoJCXBhdGhuYW1lLAoJCXNlYXJjaDog
dXJsLnNlYXJjaCwKCQltZXRob2Q6IHJlcS5tZXRob2QKCX0pOwoJaWYgKHJvdXRlLmtpbmQgPT09
ICJub3QtY29udHJvbC11aSIpIHJldHVybiBmYWxzZTsKCWlmIChyb3V0ZS5raW5kID09PSAibm90
LWZvdW5kIikgewoJCWFwcGx5Q29udHJvbFVpU2VjdXJpdHlIZWFkZXJzKHJlcyk7CgkJcmVzcG9u
ZE5vdEZvdW5kKHJlcyk7CgkJcmV0dXJuIHRydWU7Cgl9CglpZiAocm91dGUua2luZCA9PT0gInJl
ZGlyZWN0IikgewoJCWFwcGx5Q29udHJvbFVpU2VjdXJpdHlIZWFkZXJzKHJlcyk7CgkJcmVzLnN0
YXR1c0NvZGUgPSAzMDI7CgkJcmVzLnNldEhlYWRlcigiTG9jYXRpb24iLCByb3V0ZS5sb2NhdGlv
bik7CgkJcmVzLmVuZCgpOwoJCXJldHVybiB0cnVlOwoJfQoJYXBwbHlDb250cm9sVWlTZWN1cml0
eUhlYWRlcnMocmVzKTsKCWlmIChwYXRobmFtZSA9PT0gKGJhc2VQYXRoID8gYCR7YmFzZVBhdGh9
L19fb3BlbmNsYXcvY29udHJvbC11aS1jb25maWcuanNvbmAgOiAiL19fb3BlbmNsYXcvY29udHJv
bC11aS1jb25maWcuanNvbiIpKSB7CgkJY29uc3QgY29uZmlnID0gb3B0cz8uY29uZmlnOwoJCWNv
bnN0IGlkZW50aXR5ID0gY29uZmlnID8gcmVzb2x2ZUFzc2lzdGFudElkZW50aXR5KHsKCQkJY2Zn
OiBjb25maWcsCgkJCWFnZW50SWQ6IG9wdHM/LmFnZW50SWQKCQl9KSA6IERFRkFVTFRfQVNTSVNU
QU5UX0lERU5USVRZOwoJCWNvbnN0IGF2YXRhclZhbHVlID0gcmVzb2x2ZUFzc2lzdGFudEF2YXRh
clVybCh7CgkJCWF2YXRhcjogaWRlbnRpdHkuYXZhdGFyLAoJCQlhZ2VudElkOiBpZGVudGl0eS5h
Z2VudElkLAoJCQliYXNlUGF0aAoJCX0pOwoJCWlmIChyZXEubWV0aG9kID09PSAiSEVBRCIpIHsK
CQkJcmVzLnN0YXR1c0NvZGUgPSAyMDA7CgkJCXJlcy5zZXRIZWFkZXIoIkNvbnRlbnQtVHlwZSIs
ICJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04Iik7CgkJCXJlcy5zZXRIZWFkZXIoIkNh
Y2hlLUNvbnRyb2wiLCAibm8tY2FjaGUiKTsKCQkJcmVzLmVuZCgpOwoJCQlyZXR1cm4gdHJ1ZTsK
CQl9CgkJc2VuZEpzb24kMihyZXMsIDIwMCwgewoJCQliYXNlUGF0aCwKCQkJYXNzaXN0YW50TmFt
ZTogaWRlbnRpdHkubmFtZSwKCQkJYXNzaXN0YW50QXZhdGFyOiBhdmF0YXJWYWx1ZSA/PyBpZGVu
dGl0eS5hdmF0YXIsCgkJCWFzc2lzdGFudEFnZW50SWQ6IGlkZW50aXR5LmFnZW50SWQsCgkJCXNl
cnZlclZlcnNpb246IHJlc29sdmVSdW50aW1lU2VydmljZVZlcnNpb24ocHJvY2Vzcy5lbnYpCgkJ
fSk7CgkJcmV0dXJuIHRydWU7Cgl9Cgljb25zdCByb290U3RhdGUgPSBvcHRzPy5yb290OwoJaWYg
KHJvb3RTdGF0ZT8ua2luZCA9PT0gImludmFsaWQiKSB7CgkJcmVzcG9uZENvbnRyb2xVaUFzc2V0
c1VuYXZhaWxhYmxlKHJlcywgeyBjb25maWd1cmVkUm9vdFBhdGg6IHJvb3RTdGF0ZS5wYXRoIH0p
OwoJCXJldHVybiB0cnVlOwoJfQoJaWYgKHJvb3RTdGF0ZT8ua2luZCA9PT0gIm1pc3NpbmciKSB7
CgkJcmVzcG9uZENvbnRyb2xVaUFzc2V0c1VuYXZhaWxhYmxlKHJlcyk7CgkJcmV0dXJuIHRydWU7
Cgl9Cgljb25zdCByb290ID0gcm9vdFN0YXRlPy5raW5kID09PSAicmVzb2x2ZWQiIHx8IHJvb3RT
dGF0ZT8ua2luZCA9PT0gImJ1bmRsZWQiID8gcm9vdFN0YXRlLnBhdGggOiByZXNvbHZlQ29udHJv
bFVpUm9vdFN5bmMoewoJCW1vZHVsZVVybDogaW1wb3J0Lm1ldGEudXJsLAoJCWFyZ3YxOiBwcm9j
ZXNzLmFyZ3ZbMV0sCgkJY3dkOiBwcm9jZXNzLmN3ZCgpCgl9KTsKCWlmICghcm9vdCkgewoJCXJl
c3BvbmRDb250cm9sVWlBc3NldHNVbmF2YWlsYWJsZShyZXMpOwoJCXJldHVybiB0cnVlOwoJfQoJ
Y29uc3Qgcm9vdFJlYWwgPSAoKCkgPT4gewoJCXRyeSB7CgkJCXJldHVybiBmcy5yZWFscGF0aFN5
bmMocm9vdCk7CgkJfSBjYXRjaCAoZXJyb3IpIHsKCQkJaWYgKGlzRXhwZWN0ZWRTYWZlUGF0aEVy
cm9yKGVycm9yKSkgcmV0dXJuIG51bGw7CgkJCXRocm93IGVycm9yOwoJCX0KCX0pKCk7CglpZiAo
IXJvb3RSZWFsKSB7CgkJcmVzcG9uZENvbnRyb2xVaUFzc2V0c1VuYXZhaWxhYmxlKHJlcyk7CgkJ
cmV0dXJuIHRydWU7Cgl9Cgljb25zdCB1aVBhdGggPSBiYXNlUGF0aCAmJiBwYXRobmFtZS5zdGFy
dHNXaXRoKGAke2Jhc2VQYXRofS9gKSA/IHBhdGhuYW1lLnNsaWNlKGJhc2VQYXRoLmxlbmd0aCkg
OiBwYXRobmFtZTsKCWNvbnN0IHJlbCA9ICgoKSA9PiB7CgkJaWYgKHVpUGF0aCA9PT0gUk9PVF9Q
UkVGSVgpIHJldHVybiAiIjsKCQljb25zdCBhc3NldHNJbmRleCA9IHVpUGF0aC5pbmRleE9mKCIv
YXNzZXRzLyIpOwoJCWlmIChhc3NldHNJbmRleCA+PSAwKSByZXR1cm4gdWlQYXRoLnNsaWNlKGFz
c2V0c0luZGV4ICsgMSk7CgkJcmV0dXJuIHVpUGF0aC5zbGljZSgxKTsKCX0pKCk7Cgljb25zdCBm
aWxlUmVsID0gKHJlbCAmJiAhcmVsLmVuZHNXaXRoKCIvIikgPyByZWwgOiBgJHtyZWx9aW5kZXgu
aHRtbGApIHx8ICJpbmRleC5odG1sIjsKCWlmICghaXNTYWZlUmVsYXRpdmVQYXRoKGZpbGVSZWwp
KSB7CgkJcmVzcG9uZE5vdEZvdW5kKHJlcyk7CgkJcmV0dXJuIHRydWU7Cgl9Cgljb25zdCBmaWxl
UGF0aCA9IHBhdGgucmVzb2x2ZShyb290LCBmaWxlUmVsKTsKCWlmICghaXNXaXRoaW5EaXIocm9v
dCwgZmlsZVBhdGgpKSB7CgkJcmVzcG9uZE5vdEZvdW5kKHJlcyk7CgkJcmV0dXJuIHRydWU7Cgl9
Cgljb25zdCByZWplY3RIYXJkbGlua3MgPSAhKHJvb3RTdGF0ZT8ua2luZCA9PT0gImJ1bmRsZWQi
IHx8IHJvb3RTdGF0ZSA9PT0gdm9pZCAwICYmIGlzUGFja2FnZVByb3ZlbkNvbnRyb2xVaVJvb3RT
eW5jKHJvb3QsIHsKCQltb2R1bGVVcmw6IGltcG9ydC5tZXRhLnVybCwKCQlhcmd2MTogcHJvY2Vz
cy5hcmd2WzFdLAoJCWN3ZDogcHJvY2Vzcy5jd2QoKQoJfSkpOwoJY29uc3Qgc2FmZUZpbGUgPSBy
ZXNvbHZlU2FmZUNvbnRyb2xVaUZpbGUocm9vdFJlYWwsIGZpbGVQYXRoLCByZWplY3RIYXJkbGlu
a3MpOwoJaWYgKHNhZmVGaWxlKSB0cnkgewoJCWlmIChyZXNwb25kSGVhZEZvckZpbGUocmVxLCBy
ZXMsIHNhZmVGaWxlLnBhdGgpKSByZXR1cm4gdHJ1ZTsKCQlpZiAocGF0aC5iYXNlbmFtZShzYWZl
RmlsZS5wYXRoKSA9PT0gImluZGV4Lmh0bWwiKSB7CgkJCXNlcnZlUmVzb2x2ZWRJbmRleEh0bWwo
cmVzLCBmcy5yZWFkRmlsZVN5bmMoc2FmZUZpbGUuZmQsICJ1dGY4IikpOwoJCQlyZXR1cm4gdHJ1
ZTsKCQl9CgkJc2VydmVSZXNvbHZlZEZpbGUocmVzLCBzYWZlRmlsZS5wYXRoLCBmcy5yZWFkRmls
ZVN5bmMoc2FmZUZpbGUuZmQpKTsKCQlyZXR1cm4gdHJ1ZTsKCX0gZmluYWxseSB7CgkJZnMuY2xv
c2VTeW5jKHNhZmVGaWxlLmZkKTsKCX0KCWlmIChTVEFUSUNfQVNTRVRfRVhURU5TSU9OUy5oYXMo
cGF0aC5leHRuYW1lKGZpbGVSZWwpLnRvTG93ZXJDYXNlKCkpKSB7CgkJcmVzcG9uZE5vdEZvdW5k
KHJlcyk7CgkJcmV0dXJuIHRydWU7Cgl9Cgljb25zdCBzYWZlSW5kZXggPSByZXNvbHZlU2FmZUNv
bnRyb2xVaUZpbGUocm9vdFJlYWwsIHBhdGguam9pbihyb290LCAiaW5kZXguaHRtbCIpLCByZWpl
Y3RIYXJkbGlua3MpOwoJaWYgKHNhZmVJbmRleCkgdHJ5IHsKCQlpZiAocmVzcG9uZEhlYWRGb3JG
aWxlKHJlcSwgcmVzLCBzYWZlSW5kZXgucGF0aCkpIHJldHVybiB0cnVlOwoJCXNlcnZlUmVzb2x2
ZWRJbmRleEh0bWwocmVzLCBmcy5yZWFkRmlsZVN5bmMoc2FmZUluZGV4LmZkLCAidXRmOCIpKTsK
CQlyZXR1cm4gdHJ1ZTsKCX0gZmluYWxseSB7CgkJZnMuY2xvc2VTeW5jKHNhZmVJbmRleC5mZCk7
Cgl9CglyZXNwb25kTm90Rm91bmQocmVzKTsKCXJldHVybiB0cnVlOwp9Ci8vI2VuZHJlZ2lvbgov
LyNyZWdpb24gc3JjL2dhdGV3YXkvaHR0cC1jb21tb24udHMKLyoqCiogQXBwbHkgYmFzZWxpbmUg
c2VjdXJpdHkgaGVhZGVycyB0aGF0IGFyZSBzYWZlIGZvciBhbGwgcmVzcG9uc2UgdHlwZXMgKEFQ
SSBKU09OLAoqIEhUTUwgcGFnZXMsIHN0YXRpYyBhc3NldHMsIFNTRSBzdHJlYW1zKS4gSGVhZGVy
cyB0aGF0IHJlc3RyaWN0IGZyYW1pbmcgb3Igc2V0IGEKKiBDb250ZW50LVNlY3VyaXR5LVBvbGlj
eSBhcmUgaW50ZW50aW9uYWxseSBvbWl0dGVkIGhlcmUgYmVjYXVzZSBzb21lIGhhbmRsZXJzCiog
KGNhbnZhcyBob3N0LCBBMlVJKSBzZXJ2ZSBjb250ZW50IHRoYXQgbWF5IGJlIGxvYWRlZCBpbnNp
ZGUgZnJhbWVzLgoqLwpmdW5jdGlvbiBzZXREZWZhdWx0U2VjdXJpdHlIZWFkZXJzKHJlcywgb3B0
cykgewoJcmVzLnNldEhlYWRlcigiWC1Db250ZW50LVR5cGUtT3B0aW9ucyIsICJub3NuaWZmIik7
CglyZXMuc2V0SGVhZGVyKCJSZWZlcnJlci1Qb2xpY3kiLCAibm8tcmVmZXJyZXIiKTsKCXJlcy5z
ZXRIZWFkZXIoIlBlcm1pc3Npb25zLVBvbGljeSIsICJjYW1lcmE9KCksIG1pY3JvcGhvbmU9KCks
IGdlb2xvY2F0aW9uPSgpIik7Cgljb25zdCBzdHJpY3RUcmFuc3BvcnRTZWN1cml0eSA9IG9wdHM/
LnN0cmljdFRyYW5zcG9ydFNlY3VyaXR5OwoJaWYgKHR5cGVvZiBzdHJpY3RUcmFuc3BvcnRTZWN1
cml0eSA9PT0gInN0cmluZyIgJiYgc3RyaWN0VHJhbnNwb3J0U2VjdXJpdHkubGVuZ3RoID4gMCkg
cmVzLnNldEhlYWRlcigiU3RyaWN0LVRyYW5zcG9ydC1TZWN1cml0eSIsIHN0cmljdFRyYW5zcG9y
dFNlY3VyaXR5KTsKfQpmdW5jdGlvbiBzZW5kSnNvbiQxKHJlcywgc3RhdHVzLCBib2R5KSB7Cgly
ZXMuc3RhdHVzQ29kZSA9IHN0YXR1czsKCXJlcy5zZXRIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJh
cHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04Iik7CglyZXMuZW5kKEpTT04uc3RyaW5naWZ5
KGJvZHkpKTsKfQpmdW5jdGlvbiBzZW5kVGV4dChyZXMsIHN0YXR1cywgYm9keSkgewoJcmVzLnN0
YXR1c0NvZGUgPSBzdGF0dXM7CglyZXMuc2V0SGVhZGVyKCJDb250ZW50LVR5cGUiLCAidGV4dC9w
bGFpbjsgY2hhcnNldD11dGYtOCIpOwoJcmVzLmVuZChib2R5KTsKfQpmdW5jdGlvbiBzZW5kTWV0
aG9kTm90QWxsb3dlZChyZXMsIGFsbG93ID0gIlBPU1QiKSB7CglyZXMuc2V0SGVhZGVyKCJBbGxv
dyIsIGFsbG93KTsKCXNlbmRUZXh0KHJlcywgNDA1LCAiTWV0aG9kIE5vdCBBbGxvd2VkIik7Cn0K
ZnVuY3Rpb24gc2VuZFVuYXV0aG9yaXplZChyZXMpIHsKCXNlbmRKc29uJDEocmVzLCA0MDEsIHsg
ZXJyb3I6IHsKCQltZXNzYWdlOiAiVW5hdXRob3JpemVkIiwKCQl0eXBlOiAidW5hdXRob3JpemVk
IgoJfSB9KTsKfQpmdW5jdGlvbiBzZW5kUmF0ZUxpbWl0ZWQocmVzLCByZXRyeUFmdGVyTXMpIHsK
CWlmIChyZXRyeUFmdGVyTXMgJiYgcmV0cnlBZnRlck1zID4gMCkgcmVzLnNldEhlYWRlcigiUmV0
cnktQWZ0ZXIiLCBTdHJpbmcoTWF0aC5jZWlsKHJldHJ5QWZ0ZXJNcyAvIDFlMykpKTsKCXNlbmRK
c29uJDEocmVzLCA0MjksIHsgZXJyb3I6IHsKCQltZXNzYWdlOiAiVG9vIG1hbnkgZmFpbGVkIGF1
dGhlbnRpY2F0aW9uIGF0dGVtcHRzLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLiIsCgkJdHlwZTog
InJhdGVfbGltaXRlZCIKCX0gfSk7Cn0KZnVuY3Rpb24gc2VuZEdhdGV3YXlBdXRoRmFpbHVyZShy
ZXMsIGF1dGhSZXN1bHQpIHsKCWlmIChhdXRoUmVzdWx0LnJhdGVMaW1pdGVkKSB7CgkJc2VuZFJh
dGVMaW1pdGVkKHJlcywgYXV0aFJlc3VsdC5yZXRyeUFmdGVyTXMpOwoJCXJldHVybjsKCX0KCXNl
bmRVbmF1dGhvcml6ZWQocmVzKTsKfQpmdW5jdGlvbiBzZW5kSW52YWxpZFJlcXVlc3QocmVzLCBt
ZXNzYWdlKSB7CglzZW5kSnNvbiQxKHJlcywgNDAwLCB7IGVycm9yOiB7CgkJbWVzc2FnZSwKCQl0
eXBlOiAiaW52YWxpZF9yZXF1ZXN0X2Vycm9yIgoJfSB9KTsKfQphc3luYyBmdW5jdGlvbiByZWFk
SnNvbkJvZHlPckVycm9yKHJlcSwgcmVzLCBtYXhCeXRlcykgewoJY29uc3QgYm9keSA9IGF3YWl0
IHJlYWRKc29uQm9keShyZXEsIG1heEJ5dGVzKTsKCWlmICghYm9keS5vaykgewoJCWlmIChib2R5
LmVycm9yID09PSAicGF5bG9hZCB0b28gbGFyZ2UiKSB7CgkJCXNlbmRKc29uJDEocmVzLCA0MTMs
IHsgZXJyb3I6IHsKCQkJCW1lc3NhZ2U6ICJQYXlsb2FkIHRvbyBsYXJnZSIsCgkJCQl0eXBlOiAi
aW52YWxpZF9yZXF1ZXN0X2Vycm9yIgoJCQl9IH0pOwoJCQlyZXR1cm47CgkJfQoJCWlmIChib2R5
LmVycm9yID09PSAicmVxdWVzdCBib2R5IHRpbWVvdXQiKSB7CgkJCXNlbmRKc29uJDEocmVzLCA0
MDgsIHsgZXJyb3I6IHsKCQkJCW1lc3NhZ2U6ICJSZXF1ZXN0IGJvZHkgdGltZW91dCIsCgkJCQl0
eXBlOiAiaW52YWxpZF9yZXF1ZXN0X2Vycm9yIgoJCQl9IH0pOwoJCQlyZXR1cm47CgkJfQoJCXNl
bmRJbnZhbGlkUmVxdWVzdChyZXMsIGJvZHkuZXJyb3IpOwoJCXJldHVybjsKCX0KCXJldHVybiBi
b2R5LnZhbHVlOwp9CmZ1bmN0aW9uIHdyaXRlRG9uZShyZXMpIHsKCXJlcy53cml0ZSgiZGF0YTog
W0RPTkVdXG5cbiIpOwp9CmZ1bmN0aW9uIHNldFNzZUhlYWRlcnMocmVzKSB7CglyZXMuc3RhdHVz
Q29kZSA9IDIwMDsKCXJlcy5zZXRIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJ0ZXh0L2V2ZW50LXN0
cmVhbTsgY2hhcnNldD11dGYtOCIpOwoJcmVzLnNldEhlYWRlcigiQ2FjaGUtQ29udHJvbCIsICJu
by1jYWNoZSIpOwoJcmVzLnNldEhlYWRlcigiQ29ubmVjdGlvbiIsICJrZWVwLWFsaXZlIik7Cgly
ZXMuZmx1c2hIZWFkZXJzPy4oKTsKfQovLyNlbmRyZWdpb24KLy8jcmVnaW9uIHNyYy9nYXRld2F5
L2h0dHAtdXRpbHMudHMKZnVuY3Rpb24gZ2V0SGVhZGVyKHJlcSwgbmFtZSkgewoJY29uc3QgcmF3
ID0gcmVxLmhlYWRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXTsKCWlmICh0eXBlb2YgcmF3ID09PSAi
c3RyaW5nIikgcmV0dXJuIHJhdzsKCWlmIChBcnJheS5pc0FycmF5KHJhdykpIHJldHVybiByYXdb
MF07Cn0KZnVuY3Rpb24gZ2V0QmVhcmVyVG9rZW4ocmVxKSB7Cgljb25zdCByYXcgPSBnZXRIZWFk
ZXIocmVxLCAiYXV0aG9yaXphdGlvbiIpPy50cmltKCkgPz8gIiI7CglpZiAoIXJhdy50b0xvd2Vy
Q2FzZSgpLnN0YXJ0c1dpdGgoImJlYXJlciAiKSkgcmV0dXJuOwoJcmV0dXJuIHJhdy5zbGljZSg3
KS50cmltKCkgfHwgdm9pZCAwOwp9CmZ1bmN0aW9uIHJlc29sdmVBZ2VudElkRnJvbUhlYWRlcihy
ZXEpIHsKCWNvbnN0IHJhdyA9IGdldEhlYWRlcihyZXEsICJ4LW9wZW5jbGF3LWFnZW50LWlkIik/
LnRyaW0oKSB8fCBnZXRIZWFkZXIocmVxLCAieC1vcGVuY2xhdy1hZ2VudCIpPy50cmltKCkgfHwg
IiI7CglpZiAoIXJhdykgcmV0dXJuOwoJcmV0dXJuIG5vcm1hbGl6ZUFnZW50SWQocmF3KTsKfQpm
dW5jdGlvbiByZXNvbHZlQWdlbnRJZEZyb21Nb2RlbChtb2RlbCkgewoJY29uc3QgcmF3ID0gbW9k
ZWw/LnRyaW0oKTsKCWlmICghcmF3KSByZXR1cm47Cgljb25zdCBhZ2VudElkID0gKHJhdy5tYXRj
aCgvXm9wZW5jbGF3WzovXSg/PGFnZW50SWQ+W2EtejAtOV1bYS16MC05Xy1dezAsNjN9KSQvaSkg
Pz8gcmF3Lm1hdGNoKC9eYWdlbnQ6KD88YWdlbnRJZD5bYS16MC05XVthLXowLTlfLV17MCw2M30p
JC9pKSk/Lmdyb3Vwcz8uYWdlbnRJZDsKCWlmICghYWdlbnRJZCkgcmV0dXJuOwoJcmV0dXJuIG5v
cm1hbGl6ZUFnZW50SWQoYWdlbnRJZCk7Cn0KZnVuY3Rpb24gcmVzb2x2ZUFnZW50SWRGb3JSZXF1
ZXN0KHBhcmFtcykgewoJY29uc3QgZnJvbUhlYWRlciA9IHJlc29sdmVBZ2VudElkRnJvbUhlYWRl
cihwYXJhbXMucmVxKTsKCWlmIChmcm9tSGVhZGVyKSByZXR1cm4gZnJvbUhlYWRlcjsKCXJldHVy
biByZXNvbHZlQWdlbnRJZEZyb21Nb2RlbChwYXJhbXMubW9kZWwpID8/ICJtYWluIjsKfQpmdW5j
dGlvbiByZXNvbHZlU2Vzc2lvbktleShwYXJhbXMpIHsKCWNvbnN0IGV4cGxpY2l0ID0gZ2V0SGVh
ZGVyKHBhcmFtcy5yZXEsICJ4LW9wZW5jbGF3LXNlc3Npb24ta2V5Iik/LnRyaW0oKTsKCWlmIChl
eHBsaWNpdCkgcmV0dXJuIGV4cGxpY2l0OwoJY29uc3QgdXNlciA9IHBhcmFtcy51c2VyPy50cmlt
KCk7Cgljb25zdCBtYWluS2V5ID0gdXNlciA/IGAke3BhcmFtcy5wcmVmaXh9LXVzZXI6JHt1c2Vy
fWAgOiBgJHtwYXJhbXMucHJlZml4fToke3JhbmRvbVVVSUQoKX1gOwoJcmV0dXJuIGJ1aWxkQWdl
bnRNYWluU2Vzc2lvbktleSh7CgkJYWdlbnRJZDogcGFyYW1zLmFnZW50SWQsCgkJbWFpbktleQoJ
fSk7Cn0KZnVuY3Rpb24gcmVzb2x2ZUdhdGV3YXlSZXF1ZXN0Q29udGV4dChwYXJhbXMpIHsKCWNv
bnN0IGFnZW50SWQgPSByZXNvbHZlQWdlbnRJZEZvclJlcXVlc3QoewoJCXJlcTogcGFyYW1zLnJl
cSwKCQltb2RlbDogcGFyYW1zLm1vZGVsCgl9KTsKCXJldHVybiB7CgkJYWdlbnRJZCwKCQlzZXNz
aW9uS2V5OiByZXNvbHZlU2Vzc2lvbktleSh7CgkJCXJlcTogcGFyYW1zLnJlcSwKCQkJYWdlbnRJ
ZCwKCQkJdXNlcjogcGFyYW1zLnVzZXIsCgkJCXByZWZpeDogcGFyYW1zLnNlc3Npb25QcmVmaXgK
CQl9KSwKCQltZXNzYWdlQ2hhbm5lbDogcGFyYW1zLnVzZU1lc3NhZ2VDaGFubmVsSGVhZGVyID8g
bm9ybWFsaXplTWVzc2FnZUNoYW5uZWwoZ2V0SGVhZGVyKHBhcmFtcy5yZXEsICJ4LW9wZW5jbGF3
LW1lc3NhZ2UtY2hhbm5lbCIpKSA/PyBwYXJhbXMuZGVmYXVsdE1lc3NhZ2VDaGFubmVsIDogcGFy
YW1zLmRlZmF1bHRNZXNzYWdlQ2hhbm5lbAoJfTsKfQovLyNlbmRyZWdpb24KLy8jcmVnaW9uIHNy
Yy9nYXRld2F5L2FnZW50LWV2ZW50LWFzc2lzdGFudC10ZXh0LnRzCmZ1bmN0aW9uIHJlc29sdmVB
c3Npc3RhbnRTdHJlYW1EZWx0YVRleHQoZXZ0KSB7Cgljb25zdCBkZWx0YSA9IGV2dC5kYXRhLmRl
bHRhOwoJY29uc3QgdGV4dCA9IGV2dC5kYXRhLnRleHQ7CglyZXR1cm4gdHlwZW9mIGRlbHRhID09
PSAic3RyaW5nIiA/IGRlbHRhIDogdHlwZW9mIHRleHQgPT09ICJzdHJpbmciID8gdGV4dCA6ICIi
Owp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dhdGV3YXkvYWdlbnQtcHJvbXB0LnRzCi8q
KgoqIENvZXJjZSBib2R5IHRvIHN0cmluZy4gSGFuZGxlcyBjYXNlcyB3aGVyZSBib2R5IGlzIGEg
Y29udGVudCBhcnJheQoqIChlLmcuIFt7dHlwZToidGV4dCIsIHRleHQ6ImhlbGxvIn1dKSB0aGF0
IHdvdWxkIHNlcmlhbGl6ZSBhcwoqIFtvYmplY3QgT2JqZWN0XSBpZiB1c2VkIGRpcmVjdGx5IGlu
IGEgdGVtcGxhdGUgbGl0ZXJhbC4KKi8KZnVuY3Rpb24gc2FmZUJvZHkoYm9keSkgewoJaWYgKHR5
cGVvZiBib2R5ID09PSAic3RyaW5nIikgcmV0dXJuIGJvZHk7CglyZXR1cm4gZXh0cmFjdFRleHRG
cm9tQ2hhdENvbnRlbnQoYm9keSkgPz8gIiI7Cn0KZnVuY3Rpb24gYnVpbGRBZ2VudE1lc3NhZ2VG
cm9tQ29udmVyc2F0aW9uRW50cmllcyhlbnRyaWVzKSB7CglpZiAoZW50cmllcy5sZW5ndGggPT09
IDApIHJldHVybiAiIjsKCWxldCBjdXJyZW50SW5kZXggPSAtMTsKCWZvciAobGV0IGkgPSBlbnRy
aWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaSAtPSAxKSB7CgkJY29uc3Qgcm9sZSA9IGVudHJpZXNb
aV0/LnJvbGU7CgkJaWYgKHJvbGUgPT09ICJ1c2VyIiB8fCByb2xlID09PSAidG9vbCIpIHsKCQkJ
Y3VycmVudEluZGV4ID0gaTsKCQkJYnJlYWs7CgkJfQoJfQoJaWYgKGN1cnJlbnRJbmRleCA8IDAp
IGN1cnJlbnRJbmRleCA9IGVudHJpZXMubGVuZ3RoIC0gMTsKCWNvbnN0IGN1cnJlbnRFbnRyeSA9
IGVudHJpZXNbY3VycmVudEluZGV4XT8uZW50cnk7CglpZiAoIWN1cnJlbnRFbnRyeSkgcmV0dXJu
ICIiOwoJY29uc3QgaGlzdG9yeUVudHJpZXMgPSBlbnRyaWVzLnNsaWNlKDAsIGN1cnJlbnRJbmRl
eCkubWFwKChlKSA9PiBlLmVudHJ5KTsKCWlmIChoaXN0b3J5RW50cmllcy5sZW5ndGggPT09IDAp
IHJldHVybiBzYWZlQm9keShjdXJyZW50RW50cnkuYm9keSk7Cgljb25zdCBmb3JtYXRFbnRyeSA9
IChlbnRyeSkgPT4gYCR7ZW50cnkuc2VuZGVyfTogJHtzYWZlQm9keShlbnRyeS5ib2R5KX1gOwoJ
cmV0dXJuIGJ1aWxkSGlzdG9yeUNvbnRleHRGcm9tRW50cmllcyh7CgkJZW50cmllczogWy4uLmhp
c3RvcnlFbnRyaWVzLCBjdXJyZW50RW50cnldLAoJCWN1cnJlbnRNZXNzYWdlOiBmb3JtYXRFbnRy
eShjdXJyZW50RW50cnkpLAoJCWZvcm1hdEVudHJ5Cgl9KTsKfQovLyNlbmRyZWdpb24KLy8jcmVn
aW9uIHNyYy9nYXRld2F5L2h0dHAtYXV0aC1oZWxwZXJzLnRzCmFzeW5jIGZ1bmN0aW9uIGF1dGhv
cml6ZUdhdGV3YXlCZWFyZXJSZXF1ZXN0T3JSZXBseShwYXJhbXMpIHsKCWNvbnN0IHRva2VuID0g
Z2V0QmVhcmVyVG9rZW4ocGFyYW1zLnJlcSk7Cgljb25zdCBhdXRoUmVzdWx0ID0gYXdhaXQgYXV0
aG9yaXplSHR0cEdhdGV3YXlDb25uZWN0KHsKCQlhdXRoOiBwYXJhbXMuYXV0aCwKCQljb25uZWN0
QXV0aDogdG9rZW4gPyB7CgkJCXRva2VuLAoJCQlwYXNzd29yZDogdG9rZW4KCQl9IDogbnVsbCwK
CQlyZXE6IHBhcmFtcy5yZXEsCgkJdHJ1c3RlZFByb3hpZXM6IHBhcmFtcy50cnVzdGVkUHJveGll
cywKCQlhbGxvd1JlYWxJcEZhbGxiYWNrOiBwYXJhbXMuYWxsb3dSZWFsSXBGYWxsYmFjaywKCQly
YXRlTGltaXRlcjogcGFyYW1zLnJhdGVMaW1pdGVyCgl9KTsKCWlmICghYXV0aFJlc3VsdC5vaykg
ewoJCXNlbmRHYXRld2F5QXV0aEZhaWx1cmUocGFyYW1zLnJlcywgYXV0aFJlc3VsdCk7CgkJcmV0
dXJuIGZhbHNlOwoJfQoJcmV0dXJuIHRydWU7Cn0KLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMv
Z2F0ZXdheS9odHRwLWVuZHBvaW50LWhlbHBlcnMudHMKYXN5bmMgZnVuY3Rpb24gaGFuZGxlR2F0
ZXdheVBvc3RKc29uRW5kcG9pbnQocmVxLCByZXMsIG9wdHMpIHsKCWlmIChuZXcgVVJMKHJlcS51
cmwgPz8gIi8iLCBgaHR0cDovLyR7cmVxLmhlYWRlcnMuaG9zdCB8fCAibG9jYWxob3N0In1gKS5w
YXRobmFtZSAhPT0gb3B0cy5wYXRobmFtZSkgcmV0dXJuIGZhbHNlOwoJaWYgKHJlcS5tZXRob2Qg
IT09ICJQT1NUIikgewoJCXNlbmRNZXRob2ROb3RBbGxvd2VkKHJlcyk7CgkJcmV0dXJuOwoJfQoJ
aWYgKCFhd2FpdCBhdXRob3JpemVHYXRld2F5QmVhcmVyUmVxdWVzdE9yUmVwbHkoewoJCXJlcSwK
CQlyZXMsCgkJYXV0aDogb3B0cy5hdXRoLAoJCXRydXN0ZWRQcm94aWVzOiBvcHRzLnRydXN0ZWRQ
cm94aWVzLAoJCWFsbG93UmVhbElwRmFsbGJhY2s6IG9wdHMuYWxsb3dSZWFsSXBGYWxsYmFjaywK
CQlyYXRlTGltaXRlcjogb3B0cy5yYXRlTGltaXRlcgoJfSkpIHJldHVybjsKCWNvbnN0IGJvZHkg
PSBhd2FpdCByZWFkSnNvbkJvZHlPckVycm9yKHJlcSwgcmVzLCBvcHRzLm1heEJvZHlCeXRlcyk7
CglpZiAoYm9keSA9PT0gdm9pZCAwKSByZXR1cm47CglyZXR1cm4geyBib2R5IH07Cn0KLy8jZW5k
cmVnaW9uCi8vI3JlZ2lvbiBzcmMvZ2F0ZXdheS9pbnB1dC1hbGxvd2xpc3QudHMKZnVuY3Rpb24g
bm9ybWFsaXplSW5wdXRIb3N0bmFtZUFsbG93bGlzdCh2YWx1ZXMpIHsKCWlmICghdmFsdWVzIHx8
IHZhbHVlcy5sZW5ndGggPT09IDApIHJldHVybjsKCWNvbnN0IG5vcm1hbGl6ZWQgPSB2YWx1ZXMu
bWFwKCh2YWx1ZSkgPT4gdmFsdWUudHJpbSgpKS5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZS5sZW5n
dGggPiAwKTsKCXJldHVybiBub3JtYWxpemVkLmxlbmd0aCA+IDAgPyBub3JtYWxpemVkIDogdm9p
ZCAwOwp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dhdGV3YXkvb3BlbmFpLWh0dHAudHMK
Y29uc3QgREVGQVVMVF9PUEVOQUlfQ0hBVF9DT01QTEVUSU9OU19CT0RZX0JZVEVTID0gMjAgKiAx
MDI0ICogMTAyNDsKY29uc3QgSU1BR0VfT05MWV9VU0VSX01FU1NBR0UgPSAiVXNlciBzZW50IGlt
YWdlKHMpIHdpdGggbm8gdGV4dC4iOwpjb25zdCBERUZBVUxUX09QRU5BSV9NQVhfSU1BR0VfUEFS
VFMgPSA4Owpjb25zdCBERUZBVUxUX09QRU5BSV9NQVhfVE9UQUxfSU1BR0VfQllURVMgPSAyMCAq
IDEwMjQgKiAxMDI0Owpjb25zdCBERUZBVUxUX09QRU5BSV9JTUFHRV9MSU1JVFMgPSB7CglhbGxv
d1VybDogZmFsc2UsCglhbGxvd2VkTWltZXM6IG5ldyBTZXQoREVGQVVMVF9JTlBVVF9JTUFHRV9N
SU1FUyksCgltYXhCeXRlczogREVGQVVMVF9JTlBVVF9JTUFHRV9NQVhfQllURVMsCgltYXhSZWRp
cmVjdHM6IDMsCgl0aW1lb3V0TXM6IERFRkFVTFRfSU5QVVRfVElNRU9VVF9NUwp9OwpmdW5jdGlv
biByZXNvbHZlT3BlbkFpQ2hhdENvbXBsZXRpb25zTGltaXRzKGNvbmZpZykgewoJY29uc3QgaW1h
Z2VDb25maWcgPSBjb25maWc/LmltYWdlczsKCXJldHVybiB7CgkJbWF4Qm9keUJ5dGVzOiBjb25m
aWc/Lm1heEJvZHlCeXRlcyA/PyBERUZBVUxUX09QRU5BSV9DSEFUX0NPTVBMRVRJT05TX0JPRFlf
QllURVMsCgkJbWF4SW1hZ2VQYXJ0czogdHlwZW9mIGNvbmZpZz8ubWF4SW1hZ2VQYXJ0cyA9PT0g
Im51bWJlciIgPyBNYXRoLm1heCgwLCBNYXRoLmZsb29yKGNvbmZpZy5tYXhJbWFnZVBhcnRzKSkg
OiBERUZBVUxUX09QRU5BSV9NQVhfSU1BR0VfUEFSVFMsCgkJbWF4VG90YWxJbWFnZUJ5dGVzOiB0
eXBlb2YgY29uZmlnPy5tYXhUb3RhbEltYWdlQnl0ZXMgPT09ICJudW1iZXIiID8gTWF0aC5tYXgo
MSwgTWF0aC5mbG9vcihjb25maWcubWF4VG90YWxJbWFnZUJ5dGVzKSkgOiBERUZBVUxUX09QRU5B
SV9NQVhfVE9UQUxfSU1BR0VfQllURVMsCgkJaW1hZ2VzOiB7CgkJCWFsbG93VXJsOiBpbWFnZUNv
bmZpZz8uYWxsb3dVcmwgPz8gREVGQVVMVF9PUEVOQUlfSU1BR0VfTElNSVRTLmFsbG93VXJsLAoJ
CQl1cmxBbGxvd2xpc3Q6IG5vcm1hbGl6ZUlucHV0SG9zdG5hbWVBbGxvd2xpc3QoaW1hZ2VDb25m
aWc/LnVybEFsbG93bGlzdCksCgkJCWFsbG93ZWRNaW1lczogbm9ybWFsaXplTWltZUxpc3QoaW1h
Z2VDb25maWc/LmFsbG93ZWRNaW1lcywgREVGQVVMVF9JTlBVVF9JTUFHRV9NSU1FUyksCgkJCW1h
eEJ5dGVzOiBpbWFnZUNvbmZpZz8ubWF4Qnl0ZXMgPz8gMTA0ODU3NjAsCgkJCW1heFJlZGlyZWN0
czogaW1hZ2VDb25maWc/Lm1heFJlZGlyZWN0cyA/PyAzLAoJCQl0aW1lb3V0TXM6IGltYWdlQ29u
ZmlnPy50aW1lb3V0TXMgPz8gMWU0CgkJfQoJfTsKfQpmdW5jdGlvbiB3cml0ZVNzZShyZXMsIGRh
dGEpIHsKCXJlcy53cml0ZShgZGF0YTogJHtKU09OLnN0cmluZ2lmeShkYXRhKX1cblxuYCk7Cn0K
ZnVuY3Rpb24gYnVpbGRBZ2VudENvbW1hbmRJbnB1dChwYXJhbXMpIHsKCXJldHVybiB7CgkJbWVz
c2FnZTogcGFyYW1zLnByb21wdC5tZXNzYWdlLAoJCWV4dHJhU3lzdGVtUHJvbXB0OiBwYXJhbXMu
cHJvbXB0LmV4dHJhU3lzdGVtUHJvbXB0LAoJCWltYWdlczogcGFyYW1zLnByb21wdC5pbWFnZXMs
CgkJc2Vzc2lvbktleTogcGFyYW1zLnNlc3Npb25LZXksCgkJcnVuSWQ6IHBhcmFtcy5ydW5JZCwK
CQlkZWxpdmVyOiBmYWxzZSwKCQltZXNzYWdlQ2hhbm5lbDogcGFyYW1zLm1lc3NhZ2VDaGFubmVs
LAoJCWJlc3RFZmZvcnREZWxpdmVyOiBmYWxzZSwKCQlzZW5kZXJJc093bmVyOiB0cnVlCgl9Owp9
CmZ1bmN0aW9uIHdyaXRlQXNzaXN0YW50Um9sZUNodW5rKHJlcywgcGFyYW1zKSB7Cgl3cml0ZVNz
ZShyZXMsIHsKCQlpZDogcGFyYW1zLnJ1bklkLAoJCW9iamVjdDogImNoYXQuY29tcGxldGlvbi5j
aHVuayIsCgkJY3JlYXRlZDogTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMWUzKSwKCQltb2RlbDog
cGFyYW1zLm1vZGVsLAoJCWNob2ljZXM6IFt7CgkJCWluZGV4OiAwLAoJCQlkZWx0YTogeyByb2xl
OiAiYXNzaXN0YW50IiB9CgkJfV0KCX0pOwp9CmZ1bmN0aW9uIHdyaXRlQXNzaXN0YW50Q29udGVu
dENodW5rKHJlcywgcGFyYW1zKSB7Cgl3cml0ZVNzZShyZXMsIHsKCQlpZDogcGFyYW1zLnJ1bklk
LAoJCW9iamVjdDogImNoYXQuY29tcGxldGlvbi5jaHVuayIsCgkJY3JlYXRlZDogTWF0aC5mbG9v
cihEYXRlLm5vdygpIC8gMWUzKSwKCQltb2RlbDogcGFyYW1zLm1vZGVsLAoJCWNob2ljZXM6IFt7
CgkJCWluZGV4OiAwLAoJCQlkZWx0YTogeyBjb250ZW50OiBwYXJhbXMuY29udGVudCB9LAoJCQlm
aW5pc2hfcmVhc29uOiBwYXJhbXMuZmluaXNoUmVhc29uCgkJfV0KCX0pOwp9CmZ1bmN0aW9uIGFz
TWVzc2FnZXModmFsKSB7CglyZXR1cm4gQXJyYXkuaXNBcnJheSh2YWwpID8gdmFsIDogW107Cn0K
ZnVuY3Rpb24gZXh0cmFjdFRleHRDb250ZW50JDEoY29udGVudCkgewoJaWYgKHR5cGVvZiBjb250
ZW50ID09PSAic3RyaW5nIikgcmV0dXJuIGNvbnRlbnQ7CglpZiAoQXJyYXkuaXNBcnJheShjb250
ZW50KSkgcmV0dXJuIGNvbnRlbnQubWFwKChwYXJ0KSA9PiB7CgkJaWYgKCFwYXJ0IHx8IHR5cGVv
ZiBwYXJ0ICE9PSAib2JqZWN0IikgcmV0dXJuICIiOwoJCWNvbnN0IHR5cGUgPSBwYXJ0LnR5cGU7
CgkJY29uc3QgdGV4dCA9IHBhcnQudGV4dDsKCQljb25zdCBpbnB1dFRleHQgPSBwYXJ0LmlucHV0
X3RleHQ7CgkJaWYgKHR5cGUgPT09ICJ0ZXh0IiAmJiB0eXBlb2YgdGV4dCA9PT0gInN0cmluZyIp
IHJldHVybiB0ZXh0OwoJCWlmICh0eXBlID09PSAiaW5wdXRfdGV4dCIgJiYgdHlwZW9mIHRleHQg
PT09ICJzdHJpbmciKSByZXR1cm4gdGV4dDsKCQlpZiAodHlwZW9mIGlucHV0VGV4dCA9PT0gInN0
cmluZyIpIHJldHVybiBpbnB1dFRleHQ7CgkJcmV0dXJuICIiOwoJfSkuZmlsdGVyKEJvb2xlYW4p
LmpvaW4oIlxuIik7CglyZXR1cm4gIiI7Cn0KZnVuY3Rpb24gcmVzb2x2ZUltYWdlVXJsUGFydChw
YXJ0KSB7CglpZiAoIXBhcnQgfHwgdHlwZW9mIHBhcnQgIT09ICJvYmplY3QiKSByZXR1cm47Cglj
b25zdCBpbWFnZVVybCA9IHBhcnQuaW1hZ2VfdXJsOwoJaWYgKHR5cGVvZiBpbWFnZVVybCA9PT0g
InN0cmluZyIpIHsKCQljb25zdCB0cmltbWVkID0gaW1hZ2VVcmwudHJpbSgpOwoJCXJldHVybiB0
cmltbWVkLmxlbmd0aCA+IDAgPyB0cmltbWVkIDogdm9pZCAwOwoJfQoJaWYgKCFpbWFnZVVybCB8
fCB0eXBlb2YgaW1hZ2VVcmwgIT09ICJvYmplY3QiKSByZXR1cm47Cgljb25zdCByYXdVcmwgPSBp
bWFnZVVybC51cmw7CglpZiAodHlwZW9mIHJhd1VybCAhPT0gInN0cmluZyIpIHJldHVybjsKCWNv
bnN0IHRyaW1tZWQgPSByYXdVcmwudHJpbSgpOwoJcmV0dXJuIHRyaW1tZWQubGVuZ3RoID4gMCA/
IHRyaW1tZWQgOiB2b2lkIDA7Cn0KZnVuY3Rpb24gZXh0cmFjdEltYWdlVXJscyhjb250ZW50KSB7
CglpZiAoIUFycmF5LmlzQXJyYXkoY29udGVudCkpIHJldHVybiBbXTsKCWNvbnN0IHVybHMgPSBb
XTsKCWZvciAoY29uc3QgcGFydCBvZiBjb250ZW50KSB7CgkJaWYgKCFwYXJ0IHx8IHR5cGVvZiBw
YXJ0ICE9PSAib2JqZWN0IikgY29udGludWU7CgkJaWYgKHBhcnQudHlwZSAhPT0gImltYWdlX3Vy
bCIpIGNvbnRpbnVlOwoJCWNvbnN0IHVybCA9IHJlc29sdmVJbWFnZVVybFBhcnQocGFydCk7CgkJ
aWYgKHVybCkgdXJscy5wdXNoKHVybCk7Cgl9CglyZXR1cm4gdXJsczsKfQpmdW5jdGlvbiBwYXJz
ZUltYWdlVXJsVG9Tb3VyY2UodXJsKSB7Cgljb25zdCBkYXRhVXJpTWF0Y2ggPSAvXmRhdGE6KFte
LF0qPyksKC4qKSQvaXMuZXhlYyh1cmwpOwoJaWYgKGRhdGFVcmlNYXRjaCkgewoJCWNvbnN0IG1l
dGFkYXRhID0gZGF0YVVyaU1hdGNoWzFdPy50cmltKCkgPz8gIiI7CgkJY29uc3QgZGF0YSA9IGRh
dGFVcmlNYXRjaFsyXSA/PyAiIjsKCQljb25zdCBtZXRhZGF0YVBhcnRzID0gbWV0YWRhdGEuc3Bs
aXQoIjsiKS5tYXAoKHBhcnQpID0+IHBhcnQudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik7CgkJaWYg
KCFtZXRhZGF0YVBhcnRzLnNvbWUoKHBhcnQpID0+IHBhcnQudG9Mb3dlckNhc2UoKSA9PT0gImJh
c2U2NCIpKSB0aHJvdyBuZXcgRXJyb3IoImltYWdlX3VybCBkYXRhIFVSSSBtdXN0IGJlIGJhc2U2
NCBlbmNvZGVkIik7CgkJaWYgKCFkYXRhLnRyaW0oKSkgdGhyb3cgbmV3IEVycm9yKCJpbWFnZV91
cmwgZGF0YSBVUkkgaXMgbWlzc2luZyBwYXlsb2FkIGRhdGEiKTsKCQlyZXR1cm4gewoJCQl0eXBl
OiAiYmFzZTY0IiwKCQkJbWVkaWFUeXBlOiBtZXRhZGF0YVBhcnRzLmZpbmQoKHBhcnQpID0+IHBh
cnQuaW5jbHVkZXMoIi8iKSksCgkJCWRhdGEKCQl9OwoJfQoJcmV0dXJuIHsKCQl0eXBlOiAidXJs
IiwKCQl1cmwKCX07Cn0KZnVuY3Rpb24gcmVzb2x2ZUFjdGl2ZVR1cm5Db250ZXh0KG1lc3NhZ2Vz
VW5rbm93bikgewoJY29uc3QgbWVzc2FnZXMgPSBhc01lc3NhZ2VzKG1lc3NhZ2VzVW5rbm93bik7
Cglmb3IgKGxldCBpID0gbWVzc2FnZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpIC09IDEpIHsKCQlj
b25zdCBtc2cgPSBtZXNzYWdlc1tpXTsKCQlpZiAoIW1zZyB8fCB0eXBlb2YgbXNnICE9PSAib2Jq
ZWN0IikgY29udGludWU7CgkJY29uc3Qgcm9sZSA9IHR5cGVvZiBtc2cucm9sZSA9PT0gInN0cmlu
ZyIgPyBtc2cucm9sZS50cmltKCkgOiAiIjsKCQljb25zdCBub3JtYWxpemVkUm9sZSA9IHJvbGUg
PT09ICJmdW5jdGlvbiIgPyAidG9vbCIgOiByb2xlOwoJCWlmIChub3JtYWxpemVkUm9sZSAhPT0g
InVzZXIiICYmIG5vcm1hbGl6ZWRSb2xlICE9PSAidG9vbCIpIGNvbnRpbnVlOwoJCXJldHVybiB7
CgkJCWFjdGl2ZVR1cm5JbmRleDogaSwKCQkJYWN0aXZlVXNlck1lc3NhZ2VJbmRleDogbm9ybWFs
aXplZFJvbGUgPT09ICJ1c2VyIiA/IGkgOiAtMSwKCQkJdXJsczogbm9ybWFsaXplZFJvbGUgPT09
ICJ1c2VyIiA/IGV4dHJhY3RJbWFnZVVybHMobXNnLmNvbnRlbnQpIDogW10KCQl9OwoJfQoJcmV0
dXJuIHsKCQlhY3RpdmVUdXJuSW5kZXg6IC0xLAoJCWFjdGl2ZVVzZXJNZXNzYWdlSW5kZXg6IC0x
LAoJCXVybHM6IFtdCgl9Owp9CmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVJbWFnZXNGb3JSZXF1ZXN0
KGFjdGl2ZVR1cm5Db250ZXh0LCBsaW1pdHMpIHsKCWNvbnN0IHVybHMgPSBhY3RpdmVUdXJuQ29u
dGV4dC51cmxzOwoJaWYgKHVybHMubGVuZ3RoID09PSAwKSByZXR1cm4gW107CglpZiAodXJscy5s
ZW5ndGggPiBsaW1pdHMubWF4SW1hZ2VQYXJ0cykgdGhyb3cgbmV3IEVycm9yKGBUb28gbWFueSBp
bWFnZV91cmwgcGFydHMgKCR7dXJscy5sZW5ndGh9OyBsaW1pdCAke2xpbWl0cy5tYXhJbWFnZVBh
cnRzfSlgKTsKCWNvbnN0IGltYWdlcyA9IFtdOwoJbGV0IHRvdGFsQnl0ZXMgPSAwOwoJZm9yIChj
b25zdCB1cmwgb2YgdXJscykgewoJCWNvbnN0IHNvdXJjZSA9IHBhcnNlSW1hZ2VVcmxUb1NvdXJj
ZSh1cmwpOwoJCWlmIChzb3VyY2UudHlwZSA9PT0gImJhc2U2NCIpIHsKCQkJY29uc3Qgc291cmNl
Qnl0ZXMgPSBlc3RpbWF0ZUJhc2U2NERlY29kZWRCeXRlcyhzb3VyY2UuZGF0YSk7CgkJCWlmICh0
b3RhbEJ5dGVzICsgc291cmNlQnl0ZXMgPiBsaW1pdHMubWF4VG90YWxJbWFnZUJ5dGVzKSB0aHJv
dyBuZXcgRXJyb3IoYFRvdGFsIGltYWdlIHBheWxvYWQgdG9vIGxhcmdlICgke3RvdGFsQnl0ZXMg
KyBzb3VyY2VCeXRlc307IGxpbWl0ICR7bGltaXRzLm1heFRvdGFsSW1hZ2VCeXRlc30pYCk7CgkJ
fQoJCWNvbnN0IGltYWdlID0gYXdhaXQgZXh0cmFjdEltYWdlQ29udGVudEZyb21Tb3VyY2Uoc291
cmNlLCBsaW1pdHMuaW1hZ2VzKTsKCQl0b3RhbEJ5dGVzICs9IGVzdGltYXRlQmFzZTY0RGVjb2Rl
ZEJ5dGVzKGltYWdlLmRhdGEpOwoJCWlmICh0b3RhbEJ5dGVzID4gbGltaXRzLm1heFRvdGFsSW1h
Z2VCeXRlcykgdGhyb3cgbmV3IEVycm9yKGBUb3RhbCBpbWFnZSBwYXlsb2FkIHRvbyBsYXJnZSAo
JHt0b3RhbEJ5dGVzfTsgbGltaXQgJHtsaW1pdHMubWF4VG90YWxJbWFnZUJ5dGVzfSlgKTsKCQlp
bWFnZXMucHVzaChpbWFnZSk7Cgl9CglyZXR1cm4gaW1hZ2VzOwp9CmZ1bmN0aW9uIGJ1aWxkQWdl
bnRQcm9tcHQkMShtZXNzYWdlc1Vua25vd24sIGFjdGl2ZVVzZXJNZXNzYWdlSW5kZXgpIHsKCWNv
bnN0IG1lc3NhZ2VzID0gYXNNZXNzYWdlcyhtZXNzYWdlc1Vua25vd24pOwoJY29uc3Qgc3lzdGVt
UGFydHMgPSBbXTsKCWNvbnN0IGNvbnZlcnNhdGlvbkVudHJpZXMgPSBbXTsKCWZvciAoY29uc3Qg
W2ksIG1zZ10gb2YgbWVzc2FnZXMuZW50cmllcygpKSB7CgkJaWYgKCFtc2cgfHwgdHlwZW9mIG1z
ZyAhPT0gIm9iamVjdCIpIGNvbnRpbnVlOwoJCWNvbnN0IHJvbGUgPSB0eXBlb2YgbXNnLnJvbGUg
PT09ICJzdHJpbmciID8gbXNnLnJvbGUudHJpbSgpIDogIiI7CgkJY29uc3QgY29udGVudCA9IGV4
dHJhY3RUZXh0Q29udGVudCQxKG1zZy5jb250ZW50KS50cmltKCk7CgkJY29uc3QgaGFzSW1hZ2Ug
PSBleHRyYWN0SW1hZ2VVcmxzKG1zZy5jb250ZW50KS5sZW5ndGggPiAwOwoJCWlmICghcm9sZSkg
Y29udGludWU7CgkJaWYgKHJvbGUgPT09ICJzeXN0ZW0iIHx8IHJvbGUgPT09ICJkZXZlbG9wZXIi
KSB7CgkJCWlmIChjb250ZW50KSBzeXN0ZW1QYXJ0cy5wdXNoKGNvbnRlbnQpOwoJCQljb250aW51
ZTsKCQl9CgkJY29uc3Qgbm9ybWFsaXplZFJvbGUgPSByb2xlID09PSAiZnVuY3Rpb24iID8gInRv
b2wiIDogcm9sZTsKCQlpZiAobm9ybWFsaXplZFJvbGUgIT09ICJ1c2VyIiAmJiBub3JtYWxpemVk
Um9sZSAhPT0gImFzc2lzdGFudCIgJiYgbm9ybWFsaXplZFJvbGUgIT09ICJ0b29sIikgY29udGlu
dWU7CgkJY29uc3QgbWVzc2FnZUNvbnRlbnQgPSBub3JtYWxpemVkUm9sZSA9PT0gInVzZXIiICYm
ICFjb250ZW50ICYmIGhhc0ltYWdlICYmIGkgPT09IGFjdGl2ZVVzZXJNZXNzYWdlSW5kZXggPyBJ
TUFHRV9PTkxZX1VTRVJfTUVTU0FHRSA6IGNvbnRlbnQ7CgkJaWYgKCFtZXNzYWdlQ29udGVudCkg
Y29udGludWU7CgkJY29uc3QgbmFtZSA9IHR5cGVvZiBtc2cubmFtZSA9PT0gInN0cmluZyIgPyBt
c2cubmFtZS50cmltKCkgOiAiIjsKCQljb25zdCBzZW5kZXIgPSBub3JtYWxpemVkUm9sZSA9PT0g
ImFzc2lzdGFudCIgPyAiQXNzaXN0YW50IiA6IG5vcm1hbGl6ZWRSb2xlID09PSAidXNlciIgPyAi
VXNlciIgOiBuYW1lID8gYFRvb2w6JHtuYW1lfWAgOiAiVG9vbCI7CgkJY29udmVyc2F0aW9uRW50
cmllcy5wdXNoKHsKCQkJcm9sZTogbm9ybWFsaXplZFJvbGUsCgkJCWVudHJ5OiB7CgkJCQlzZW5k
ZXIsCgkJCQlib2R5OiBtZXNzYWdlQ29udGVudAoJCQl9CgkJfSk7Cgl9CglyZXR1cm4gewoJCW1l
c3NhZ2U6IGJ1aWxkQWdlbnRNZXNzYWdlRnJvbUNvbnZlcnNhdGlvbkVudHJpZXMoY29udmVyc2F0
aW9uRW50cmllcyksCgkJZXh0cmFTeXN0ZW1Qcm9tcHQ6IHN5c3RlbVBhcnRzLmxlbmd0aCA+IDAg
PyBzeXN0ZW1QYXJ0cy5qb2luKCJcblxuIikgOiB2b2lkIDAKCX07Cn0KZnVuY3Rpb24gY29lcmNl
UmVxdWVzdCh2YWwpIHsKCWlmICghdmFsIHx8IHR5cGVvZiB2YWwgIT09ICJvYmplY3QiKSByZXR1
cm4ge307CglyZXR1cm4gdmFsOwp9CmZ1bmN0aW9uIHJlc29sdmVBZ2VudFJlc3BvbnNlVGV4dChy
ZXN1bHQpIHsKCWNvbnN0IHBheWxvYWRzID0gcmVzdWx0Py5wYXlsb2FkczsKCWlmICghQXJyYXku
aXNBcnJheShwYXlsb2FkcykgfHwgcGF5bG9hZHMubGVuZ3RoID09PSAwKSByZXR1cm4gIk5vIHJl
c3BvbnNlIGZyb20gT3BlbkNsYXcuIjsKCXJldHVybiBwYXlsb2Fkcy5tYXAoKHApID0+IHR5cGVv
ZiBwLnRleHQgPT09ICJzdHJpbmciID8gcC50ZXh0IDogIiIpLmZpbHRlcihCb29sZWFuKS5qb2lu
KCJcblxuIikgfHwgIk5vIHJlc3BvbnNlIGZyb20gT3BlbkNsYXcuIjsKfQphc3luYyBmdW5jdGlv
biBoYW5kbGVPcGVuQWlIdHRwUmVxdWVzdChyZXEsIHJlcywgb3B0cykgewoJY29uc3QgbGltaXRz
ID0gcmVzb2x2ZU9wZW5BaUNoYXRDb21wbGV0aW9uc0xpbWl0cyhvcHRzLmNvbmZpZyk7Cgljb25z
dCBoYW5kbGVkID0gYXdhaXQgaGFuZGxlR2F0ZXdheVBvc3RKc29uRW5kcG9pbnQocmVxLCByZXMs
IHsKCQlwYXRobmFtZTogIi92MS9jaGF0L2NvbXBsZXRpb25zIiwKCQlhdXRoOiBvcHRzLmF1dGgs
CgkJdHJ1c3RlZFByb3hpZXM6IG9wdHMudHJ1c3RlZFByb3hpZXMsCgkJYWxsb3dSZWFsSXBGYWxs
YmFjazogb3B0cy5hbGxvd1JlYWxJcEZhbGxiYWNrLAoJCXJhdGVMaW1pdGVyOiBvcHRzLnJhdGVM
aW1pdGVyLAoJCW1heEJvZHlCeXRlczogb3B0cy5tYXhCb2R5Qnl0ZXMgPz8gbGltaXRzLm1heEJv
ZHlCeXRlcwoJfSk7CglpZiAoaGFuZGxlZCA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTsKCWlmICgh
aGFuZGxlZCkgcmV0dXJuIHRydWU7Cgljb25zdCBwYXlsb2FkID0gY29lcmNlUmVxdWVzdChoYW5k
bGVkLmJvZHkpOwoJY29uc3Qgc3RyZWFtID0gQm9vbGVhbihwYXlsb2FkLnN0cmVhbSk7Cgljb25z
dCBtb2RlbCA9IHR5cGVvZiBwYXlsb2FkLm1vZGVsID09PSAic3RyaW5nIiA/IHBheWxvYWQubW9k
ZWwgOiAib3BlbmNsYXciOwoJY29uc3QgeyBzZXNzaW9uS2V5LCBtZXNzYWdlQ2hhbm5lbCB9ID0g
cmVzb2x2ZUdhdGV3YXlSZXF1ZXN0Q29udGV4dCh7CgkJcmVxLAoJCW1vZGVsLAoJCXVzZXI6IHR5
cGVvZiBwYXlsb2FkLnVzZXIgPT09ICJzdHJpbmciID8gcGF5bG9hZC51c2VyIDogdm9pZCAwLAoJ
CXNlc3Npb25QcmVmaXg6ICJvcGVuYWkiLAoJCWRlZmF1bHRNZXNzYWdlQ2hhbm5lbDogIndlYmNo
YXQiLAoJCXVzZU1lc3NhZ2VDaGFubmVsSGVhZGVyOiB0cnVlCgl9KTsKCWNvbnN0IGFjdGl2ZVR1
cm5Db250ZXh0ID0gcmVzb2x2ZUFjdGl2ZVR1cm5Db250ZXh0KHBheWxvYWQubWVzc2FnZXMpOwoJ
Y29uc3QgcHJvbXB0ID0gYnVpbGRBZ2VudFByb21wdCQxKHBheWxvYWQubWVzc2FnZXMsIGFjdGl2
ZVR1cm5Db250ZXh0LmFjdGl2ZVVzZXJNZXNzYWdlSW5kZXgpOwoJbGV0IGltYWdlcyA9IFtdOwoJ
dHJ5IHsKCQlpbWFnZXMgPSBhd2FpdCByZXNvbHZlSW1hZ2VzRm9yUmVxdWVzdChhY3RpdmVUdXJu
Q29udGV4dCwgbGltaXRzKTsKCX0gY2F0Y2ggKGVycikgewoJCWxvZ1dhcm4oYG9wZW5haS1jb21w
YXQ6IGludmFsaWQgaW1hZ2VfdXJsIGNvbnRlbnQ6ICR7U3RyaW5nKGVycil9YCk7CgkJc2VuZEpz
b24kMShyZXMsIDQwMCwgeyBlcnJvcjogewoJCQltZXNzYWdlOiAiSW52YWxpZCBpbWFnZV91cmwg
Y29udGVudCBpbiBgbWVzc2FnZXNgLiIsCgkJCXR5cGU6ICJpbnZhbGlkX3JlcXVlc3RfZXJyb3Ii
CgkJfSB9KTsKCQlyZXR1cm4gdHJ1ZTsKCX0KCWlmICghcHJvbXB0Lm1lc3NhZ2UgJiYgaW1hZ2Vz
Lmxlbmd0aCA9PT0gMCkgewoJCXNlbmRKc29uJDEocmVzLCA0MDAsIHsgZXJyb3I6IHsKCQkJbWVz
c2FnZTogIk1pc3NpbmcgdXNlciBtZXNzYWdlIGluIGBtZXNzYWdlc2AuIiwKCQkJdHlwZTogImlu
dmFsaWRfcmVxdWVzdF9lcnJvciIKCQl9IH0pOwoJCXJldHVybiB0cnVlOwoJfQoJY29uc3QgcnVu
SWQgPSBgY2hhdGNtcGxfJHtyYW5kb21VVUlEKCl9YDsKCWNvbnN0IGRlcHMgPSBjcmVhdGVEZWZh
dWx0RGVwcygpOwoJY29uc3QgY29tbWFuZElucHV0ID0gYnVpbGRBZ2VudENvbW1hbmRJbnB1dCh7
CgkJcHJvbXB0OiB7CgkJCW1lc3NhZ2U6IHByb21wdC5tZXNzYWdlLAoJCQlleHRyYVN5c3RlbVBy
b21wdDogcHJvbXB0LmV4dHJhU3lzdGVtUHJvbXB0LAoJCQlpbWFnZXM6IGltYWdlcy5sZW5ndGgg
PiAwID8gaW1hZ2VzIDogdm9pZCAwCgkJfSwKCQlzZXNzaW9uS2V5LAoJCXJ1bklkLAoJCW1lc3Nh
Z2VDaGFubmVsCgl9KTsKCWlmICghc3RyZWFtKSB7CgkJdHJ5IHsKCQkJY29uc3QgY29udGVudCA9
IHJlc29sdmVBZ2VudFJlc3BvbnNlVGV4dChhd2FpdCBhZ2VudENvbW1hbmRGcm9tSW5ncmVzcyhj
b21tYW5kSW5wdXQsIGRlZmF1bHRSdW50aW1lLCBkZXBzKSk7CgkJCXNlbmRKc29uJDEocmVzLCAy
MDAsIHsKCQkJCWlkOiBydW5JZCwKCQkJCW9iamVjdDogImNoYXQuY29tcGxldGlvbiIsCgkJCQlj
cmVhdGVkOiBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxZTMpLAoJCQkJbW9kZWwsCgkJCQljaG9p
Y2VzOiBbewoJCQkJCWluZGV4OiAwLAoJCQkJCW1lc3NhZ2U6IHsKCQkJCQkJcm9sZTogImFzc2lz
dGFudCIsCgkJCQkJCWNvbnRlbnQKCQkJCQl9LAoJCQkJCWZpbmlzaF9yZWFzb246ICJzdG9wIgoJ
CQkJfV0sCgkJCQl1c2FnZTogewoJCQkJCXByb21wdF90b2tlbnM6IDAsCgkJCQkJY29tcGxldGlv
bl90b2tlbnM6IDAsCgkJCQkJdG90YWxfdG9rZW5zOiAwCgkJCQl9CgkJCX0pOwoJCX0gY2F0Y2gg
KGVycikgewoJCQlsb2dXYXJuKGBvcGVuYWktY29tcGF0OiBjaGF0IGNvbXBsZXRpb24gZmFpbGVk
OiAke1N0cmluZyhlcnIpfWApOwoJCQlzZW5kSnNvbiQxKHJlcywgNTAwLCB7IGVycm9yOiB7CgkJ
CQltZXNzYWdlOiAiaW50ZXJuYWwgZXJyb3IiLAoJCQkJdHlwZTogImFwaV9lcnJvciIKCQkJfSB9
KTsKCQl9CgkJcmV0dXJuIHRydWU7Cgl9CglzZXRTc2VIZWFkZXJzKHJlcyk7CglsZXQgd3JvdGVS
b2xlID0gZmFsc2U7CglsZXQgc2F3QXNzaXN0YW50RGVsdGEgPSBmYWxzZTsKCWxldCBjbG9zZWQg
PSBmYWxzZTsKCWNvbnN0IHVuc3Vic2NyaWJlID0gb25BZ2VudEV2ZW50KChldnQpID0+IHsKCQlp
ZiAoZXZ0LnJ1bklkICE9PSBydW5JZCkgcmV0dXJuOwoJCWlmIChjbG9zZWQpIHJldHVybjsKCQlp
ZiAoZXZ0LnN0cmVhbSA9PT0gImFzc2lzdGFudCIpIHsKCQkJY29uc3QgY29udGVudCA9IHJlc29s
dmVBc3Npc3RhbnRTdHJlYW1EZWx0YVRleHQoZXZ0KSA/PyAiIjsKCQkJaWYgKCFjb250ZW50KSBy
ZXR1cm47CgkJCWlmICghd3JvdGVSb2xlKSB7CgkJCQl3cm90ZVJvbGUgPSB0cnVlOwoJCQkJd3Jp
dGVBc3Npc3RhbnRSb2xlQ2h1bmsocmVzLCB7CgkJCQkJcnVuSWQsCgkJCQkJbW9kZWwKCQkJCX0p
OwoJCQl9CgkJCXNhd0Fzc2lzdGFudERlbHRhID0gdHJ1ZTsKCQkJd3JpdGVBc3Npc3RhbnRDb250
ZW50Q2h1bmsocmVzLCB7CgkJCQlydW5JZCwKCQkJCW1vZGVsLAoJCQkJY29udGVudCwKCQkJCWZp
bmlzaFJlYXNvbjogbnVsbAoJCQl9KTsKCQkJcmV0dXJuOwoJCX0KCQlpZiAoZXZ0LnN0cmVhbSA9
PT0gImxpZmVjeWNsZSIpIHsKCQkJY29uc3QgcGhhc2UgPSBldnQuZGF0YT8ucGhhc2U7CgkJCWlm
IChwaGFzZSA9PT0gImVuZCIgfHwgcGhhc2UgPT09ICJlcnJvciIpIHsKCQkJCWNsb3NlZCA9IHRy
dWU7CgkJCQl1bnN1YnNjcmliZSgpOwoJCQkJd3JpdGVEb25lKHJlcyk7CgkJCQlyZXMuZW5kKCk7
CgkJCX0KCQl9Cgl9KTsKCXJlcS5vbigiY2xvc2UiLCAoKSA9PiB7CgkJY2xvc2VkID0gdHJ1ZTsK
CQl1bnN1YnNjcmliZSgpOwoJfSk7CgkoYXN5bmMgKCkgPT4gewoJCXRyeSB7CgkJCWNvbnN0IHJl
c3VsdCA9IGF3YWl0IGFnZW50Q29tbWFuZEZyb21JbmdyZXNzKGNvbW1hbmRJbnB1dCwgZGVmYXVs
dFJ1bnRpbWUsIGRlcHMpOwoJCQlpZiAoY2xvc2VkKSByZXR1cm47CgkJCWlmICghc2F3QXNzaXN0
YW50RGVsdGEpIHsKCQkJCWlmICghd3JvdGVSb2xlKSB7CgkJCQkJd3JvdGVSb2xlID0gdHJ1ZTsK
CQkJCQl3cml0ZUFzc2lzdGFudFJvbGVDaHVuayhyZXMsIHsKCQkJCQkJcnVuSWQsCgkJCQkJCW1v
ZGVsCgkJCQkJfSk7CgkJCQl9CgkJCQljb25zdCBjb250ZW50ID0gcmVzb2x2ZUFnZW50UmVzcG9u
c2VUZXh0KHJlc3VsdCk7CgkJCQlzYXdBc3Npc3RhbnREZWx0YSA9IHRydWU7CgkJCQl3cml0ZUFz
c2lzdGFudENvbnRlbnRDaHVuayhyZXMsIHsKCQkJCQlydW5JZCwKCQkJCQltb2RlbCwKCQkJCQlj
b250ZW50LAoJCQkJCWZpbmlzaFJlYXNvbjogbnVsbAoJCQkJfSk7CgkJCX0KCQl9IGNhdGNoIChl
cnIpIHsKCQkJbG9nV2Fybihgb3BlbmFpLWNvbXBhdDogc3RyZWFtaW5nIGNoYXQgY29tcGxldGlv
biBmYWlsZWQ6ICR7U3RyaW5nKGVycil9YCk7CgkJCWlmIChjbG9zZWQpIHJldHVybjsKCQkJd3Jp
dGVBc3Npc3RhbnRDb250ZW50Q2h1bmsocmVzLCB7CgkJCQlydW5JZCwKCQkJCW1vZGVsLAoJCQkJ
Y29udGVudDogIkVycm9yOiBpbnRlcm5hbCBlcnJvciIsCgkJCQlmaW5pc2hSZWFzb246ICJzdG9w
IgoJCQl9KTsKCQkJZW1pdEFnZW50RXZlbnQoewoJCQkJcnVuSWQsCgkJCQlzdHJlYW06ICJsaWZl
Y3ljbGUiLAoJCQkJZGF0YTogeyBwaGFzZTogImVycm9yIiB9CgkJCX0pOwoJCX0gZmluYWxseSB7
CgkJCWlmICghY2xvc2VkKSB7CgkJCQljbG9zZWQgPSB0cnVlOwoJCQkJdW5zdWJzY3JpYmUoKTsK
CQkJCXdyaXRlRG9uZShyZXMpOwoJCQkJcmVzLmVuZCgpOwoJCQl9CgkJfQoJfSkoKTsKCXJldHVy
biB0cnVlOwp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dhdGV3YXkvb3Blbi1yZXNwb25z
ZXMuc2NoZW1hLnRzCi8qKgoqIE9wZW5SZXNwb25zZXMgQVBJIFpvZCBTY2hlbWFzCioKKiBab2Qg
c2NoZW1hcyBmb3IgdGhlIE9wZW5SZXNwb25zZXMgYC92MS9yZXNwb25zZXNgIGVuZHBvaW50Lgoq
IFRoaXMgbW9kdWxlIGlzIGlzb2xhdGVkIGZyb20gZ2F0ZXdheSBpbXBvcnRzIHRvIGVuYWJsZSBm
dXR1cmUgY29kZWdlbiBhbmQgcHJldmVudCBkcmlmdC4KKgoqIEBzZWUgaHR0cHM6Ly93d3cub3Bl
bi1yZXNwb25zZXMuY29tLwoqLwpjb25zdCBJbnB1dFRleHRDb250ZW50UGFydFNjaGVtYSA9IHou
b2JqZWN0KHsKCXR5cGU6IHoubGl0ZXJhbCgiaW5wdXRfdGV4dCIpLAoJdGV4dDogei5zdHJpbmco
KQp9KS5zdHJpY3QoKTsKY29uc3QgT3V0cHV0VGV4dENvbnRlbnRQYXJ0U2NoZW1hID0gei5vYmpl
Y3QoewoJdHlwZTogei5saXRlcmFsKCJvdXRwdXRfdGV4dCIpLAoJdGV4dDogei5zdHJpbmcoKQp9
KS5zdHJpY3QoKTsKY29uc3QgSW5wdXRJbWFnZVNvdXJjZVNjaGVtYSA9IHouZGlzY3JpbWluYXRl
ZFVuaW9uKCJ0eXBlIiwgW3oub2JqZWN0KHsKCXR5cGU6IHoubGl0ZXJhbCgidXJsIiksCgl1cmw6
IHouc3RyaW5nKCkudXJsKCkKfSksIHoub2JqZWN0KHsKCXR5cGU6IHoubGl0ZXJhbCgiYmFzZTY0
IiksCgltZWRpYV90eXBlOiB6LmVudW0oWwoJCSJpbWFnZS9qcGVnIiwKCQkiaW1hZ2UvcG5nIiwK
CQkiaW1hZ2UvZ2lmIiwKCQkiaW1hZ2Uvd2VicCIsCgkJImltYWdlL2hlaWMiLAoJCSJpbWFnZS9o
ZWlmIgoJXSksCglkYXRhOiB6LnN0cmluZygpLm1pbigxKQp9KV0pOwpjb25zdCBJbnB1dEltYWdl
Q29udGVudFBhcnRTY2hlbWEgPSB6Lm9iamVjdCh7Cgl0eXBlOiB6LmxpdGVyYWwoImlucHV0X2lt
YWdlIiksCglzb3VyY2U6IElucHV0SW1hZ2VTb3VyY2VTY2hlbWEKfSkuc3RyaWN0KCk7CmNvbnN0
IElucHV0RmlsZVNvdXJjZVNjaGVtYSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKCJ0eXBlIiwgW3ou
b2JqZWN0KHsKCXR5cGU6IHoubGl0ZXJhbCgidXJsIiksCgl1cmw6IHouc3RyaW5nKCkudXJsKCkK
fSksIHoub2JqZWN0KHsKCXR5cGU6IHoubGl0ZXJhbCgiYmFzZTY0IiksCgltZWRpYV90eXBlOiB6
LnN0cmluZygpLm1pbigxKSwKCWRhdGE6IHouc3RyaW5nKCkubWluKDEpLAoJZmlsZW5hbWU6IHou
c3RyaW5nKCkub3B0aW9uYWwoKQp9KV0pOwpjb25zdCBJbnB1dEZpbGVDb250ZW50UGFydFNjaGVt
YSA9IHoub2JqZWN0KHsKCXR5cGU6IHoubGl0ZXJhbCgiaW5wdXRfZmlsZSIpLAoJc291cmNlOiBJ
bnB1dEZpbGVTb3VyY2VTY2hlbWEKfSkuc3RyaWN0KCk7CmNvbnN0IENvbnRlbnRQYXJ0U2NoZW1h
ID0gei5kaXNjcmltaW5hdGVkVW5pb24oInR5cGUiLCBbCglJbnB1dFRleHRDb250ZW50UGFydFNj
aGVtYSwKCU91dHB1dFRleHRDb250ZW50UGFydFNjaGVtYSwKCUlucHV0SW1hZ2VDb250ZW50UGFy
dFNjaGVtYSwKCUlucHV0RmlsZUNvbnRlbnRQYXJ0U2NoZW1hCl0pOwpjb25zdCBNZXNzYWdlSXRl
bVJvbGVTY2hlbWEgPSB6LmVudW0oWwoJInN5c3RlbSIsCgkiZGV2ZWxvcGVyIiwKCSJ1c2VyIiwK
CSJhc3Npc3RhbnQiCl0pOwpjb25zdCBNZXNzYWdlSXRlbVNjaGVtYSA9IHoub2JqZWN0KHsKCXR5
cGU6IHoubGl0ZXJhbCgibWVzc2FnZSIpLAoJcm9sZTogTWVzc2FnZUl0ZW1Sb2xlU2NoZW1hLAoJ
Y29udGVudDogei51bmlvbihbei5zdHJpbmcoKSwgei5hcnJheShDb250ZW50UGFydFNjaGVtYSld
KQp9KS5zdHJpY3QoKTsKY29uc3QgRnVuY3Rpb25DYWxsSXRlbVNjaGVtYSA9IHoub2JqZWN0KHsK
CXR5cGU6IHoubGl0ZXJhbCgiZnVuY3Rpb25fY2FsbCIpLAoJaWQ6IHouc3RyaW5nKCkub3B0aW9u
YWwoKSwKCWNhbGxfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSwKCW5hbWU6IHouc3RyaW5nKCks
Cglhcmd1bWVudHM6IHouc3RyaW5nKCkKfSkuc3RyaWN0KCk7CmNvbnN0IEZ1bmN0aW9uQ2FsbE91
dHB1dEl0ZW1TY2hlbWEgPSB6Lm9iamVjdCh7Cgl0eXBlOiB6LmxpdGVyYWwoImZ1bmN0aW9uX2Nh
bGxfb3V0cHV0IiksCgljYWxsX2lkOiB6LnN0cmluZygpLAoJb3V0cHV0OiB6LnN0cmluZygpCn0p
LnN0cmljdCgpOwpjb25zdCBSZWFzb25pbmdJdGVtU2NoZW1hID0gei5vYmplY3QoewoJdHlwZTog
ei5saXRlcmFsKCJyZWFzb25pbmciKSwKCWNvbnRlbnQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSwK
CWVuY3J5cHRlZF9jb250ZW50OiB6LnN0cmluZygpLm9wdGlvbmFsKCksCglzdW1tYXJ5OiB6LnN0
cmluZygpLm9wdGlvbmFsKCkKfSkuc3RyaWN0KCk7CmNvbnN0IEl0ZW1SZWZlcmVuY2VJdGVtU2No
ZW1hID0gei5vYmplY3QoewoJdHlwZTogei5saXRlcmFsKCJpdGVtX3JlZmVyZW5jZSIpLAoJaWQ6
IHouc3RyaW5nKCkKfSkuc3RyaWN0KCk7CmNvbnN0IEl0ZW1QYXJhbVNjaGVtYSA9IHouZGlzY3Jp
bWluYXRlZFVuaW9uKCJ0eXBlIiwgWwoJTWVzc2FnZUl0ZW1TY2hlbWEsCglGdW5jdGlvbkNhbGxJ
dGVtU2NoZW1hLAoJRnVuY3Rpb25DYWxsT3V0cHV0SXRlbVNjaGVtYSwKCVJlYXNvbmluZ0l0ZW1T
Y2hlbWEsCglJdGVtUmVmZXJlbmNlSXRlbVNjaGVtYQpdKTsKY29uc3QgVG9vbERlZmluaXRpb25T
Y2hlbWEgPSB6Lm9iamVjdCh7Cgl0eXBlOiB6LmxpdGVyYWwoImZ1bmN0aW9uIiksCglmdW5jdGlv
bjogei5vYmplY3QoewoJCW5hbWU6IHouc3RyaW5nKCkubWluKDEsICJUb29sIG5hbWUgY2Fubm90
IGJlIGVtcHR5IiksCgkJZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSwKCQlwYXJh
bWV0ZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkub3B0aW9uYWwoKQoJfSkK
fSkuc3RyaWN0KCk7CmNvbnN0IFRvb2xDaG9pY2VTY2hlbWEgPSB6LnVuaW9uKFsKCXoubGl0ZXJh
bCgiYXV0byIpLAoJei5saXRlcmFsKCJub25lIiksCgl6LmxpdGVyYWwoInJlcXVpcmVkIiksCgl6
Lm9iamVjdCh7CgkJdHlwZTogei5saXRlcmFsKCJmdW5jdGlvbiIpLAoJCWZ1bmN0aW9uOiB6Lm9i
amVjdCh7IG5hbWU6IHouc3RyaW5nKCkgfSkKCX0pCl0pOwpjb25zdCBDcmVhdGVSZXNwb25zZUJv
ZHlTY2hlbWEgPSB6Lm9iamVjdCh7Cgltb2RlbDogei5zdHJpbmcoKSwKCWlucHV0OiB6LnVuaW9u
KFt6LnN0cmluZygpLCB6LmFycmF5KEl0ZW1QYXJhbVNjaGVtYSldKSwKCWluc3RydWN0aW9uczog
ei5zdHJpbmcoKS5vcHRpb25hbCgpLAoJdG9vbHM6IHouYXJyYXkoVG9vbERlZmluaXRpb25TY2hl
bWEpLm9wdGlvbmFsKCksCgl0b29sX2Nob2ljZTogVG9vbENob2ljZVNjaGVtYS5vcHRpb25hbCgp
LAoJc3RyZWFtOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLAoJbWF4X291dHB1dF90b2tlbnM6IHou
bnVtYmVyKCkuaW50KCkucG9zaXRpdmUoKS5vcHRpb25hbCgpLAoJbWF4X3Rvb2xfY2FsbHM6IHou
bnVtYmVyKCkuaW50KCkucG9zaXRpdmUoKS5vcHRpb25hbCgpLAoJdXNlcjogei5zdHJpbmcoKS5v
cHRpb25hbCgpLAoJdGVtcGVyYXR1cmU6IHoubnVtYmVyKCkub3B0aW9uYWwoKSwKCXRvcF9wOiB6
Lm51bWJlcigpLm9wdGlvbmFsKCksCgltZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5z
dHJpbmcoKSkub3B0aW9uYWwoKSwKCXN0b3JlOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLAoJcHJl
dmlvdXNfcmVzcG9uc2VfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSwKCXJlYXNvbmluZzogei5v
YmplY3QoewoJCWVmZm9ydDogei5lbnVtKFsKCQkJImxvdyIsCgkJCSJtZWRpdW0iLAoJCQkiaGln
aCIKCQldKS5vcHRpb25hbCgpLAoJCXN1bW1hcnk6IHouZW51bShbCgkJCSJhdXRvIiwKCQkJImNv
bmNpc2UiLAoJCQkiZGV0YWlsZWQiCgkJXSkub3B0aW9uYWwoKQoJfSkub3B0aW9uYWwoKSwKCXRy
dW5jYXRpb246IHouZW51bShbImF1dG8iLCAiZGlzYWJsZWQiXSkub3B0aW9uYWwoKQp9KS5zdHJp
Y3QoKTsKY29uc3QgUmVzcG9uc2VTdGF0dXNTY2hlbWEgPSB6LmVudW0oWwoJImluX3Byb2dyZXNz
IiwKCSJjb21wbGV0ZWQiLAoJImZhaWxlZCIsCgkiY2FuY2VsbGVkIiwKCSJpbmNvbXBsZXRlIgpd
KTsKY29uc3QgT3V0cHV0SXRlbVNjaGVtYSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKCJ0eXBlIiwg
WwoJei5vYmplY3QoewoJCXR5cGU6IHoubGl0ZXJhbCgibWVzc2FnZSIpLAoJCWlkOiB6LnN0cmlu
ZygpLAoJCXJvbGU6IHoubGl0ZXJhbCgiYXNzaXN0YW50IiksCgkJY29udGVudDogei5hcnJheShP
dXRwdXRUZXh0Q29udGVudFBhcnRTY2hlbWEpLAoJCXN0YXR1czogei5lbnVtKFsiaW5fcHJvZ3Jl
c3MiLCAiY29tcGxldGVkIl0pLm9wdGlvbmFsKCkKCX0pLnN0cmljdCgpLAoJei5vYmplY3QoewoJ
CXR5cGU6IHoubGl0ZXJhbCgiZnVuY3Rpb25fY2FsbCIpLAoJCWlkOiB6LnN0cmluZygpLAoJCWNh
bGxfaWQ6IHouc3RyaW5nKCksCgkJbmFtZTogei5zdHJpbmcoKSwKCQlhcmd1bWVudHM6IHouc3Ry
aW5nKCksCgkJc3RhdHVzOiB6LmVudW0oWyJpbl9wcm9ncmVzcyIsICJjb21wbGV0ZWQiXSkub3B0
aW9uYWwoKQoJfSkuc3RyaWN0KCksCgl6Lm9iamVjdCh7CgkJdHlwZTogei5saXRlcmFsKCJyZWFz
b25pbmciKSwKCQlpZDogei5zdHJpbmcoKSwKCQljb250ZW50OiB6LnN0cmluZygpLm9wdGlvbmFs
KCksCgkJc3VtbWFyeTogei5zdHJpbmcoKS5vcHRpb25hbCgpCgl9KS5zdHJpY3QoKQpdKTsKY29u
c3QgVXNhZ2VTY2hlbWEgPSB6Lm9iamVjdCh7CglpbnB1dF90b2tlbnM6IHoubnVtYmVyKCkuaW50
KCkubm9ubmVnYXRpdmUoKSwKCW91dHB1dF90b2tlbnM6IHoubnVtYmVyKCkuaW50KCkubm9ubmVn
YXRpdmUoKSwKCXRvdGFsX3Rva2Vuczogei5udW1iZXIoKS5pbnQoKS5ub25uZWdhdGl2ZSgpCn0p
Owpjb25zdCBSZXNwb25zZVJlc291cmNlU2NoZW1hID0gei5vYmplY3QoewoJaWQ6IHouc3RyaW5n
KCksCglvYmplY3Q6IHoubGl0ZXJhbCgicmVzcG9uc2UiKSwKCWNyZWF0ZWRfYXQ6IHoubnVtYmVy
KCkuaW50KCksCglzdGF0dXM6IFJlc3BvbnNlU3RhdHVzU2NoZW1hLAoJbW9kZWw6IHouc3RyaW5n
KCksCglvdXRwdXQ6IHouYXJyYXkoT3V0cHV0SXRlbVNjaGVtYSksCgl1c2FnZTogVXNhZ2VTY2hl
bWEsCgllcnJvcjogei5vYmplY3QoewoJCWNvZGU6IHouc3RyaW5nKCksCgkJbWVzc2FnZTogei5z
dHJpbmcoKQoJfSkub3B0aW9uYWwoKQp9KTsKei5vYmplY3QoewoJdHlwZTogei5saXRlcmFsKCJy
ZXNwb25zZS5jcmVhdGVkIiksCglyZXNwb25zZTogUmVzcG9uc2VSZXNvdXJjZVNjaGVtYQp9KTsK
ei5vYmplY3QoewoJdHlwZTogei5saXRlcmFsKCJyZXNwb25zZS5pbl9wcm9ncmVzcyIpLAoJcmVz
cG9uc2U6IFJlc3BvbnNlUmVzb3VyY2VTY2hlbWEKfSk7Cnoub2JqZWN0KHsKCXR5cGU6IHoubGl0
ZXJhbCgicmVzcG9uc2UuY29tcGxldGVkIiksCglyZXNwb25zZTogUmVzcG9uc2VSZXNvdXJjZVNj
aGVtYQp9KTsKei5vYmplY3QoewoJdHlwZTogei5saXRlcmFsKCJyZXNwb25zZS5mYWlsZWQiKSwK
CXJlc3BvbnNlOiBSZXNwb25zZVJlc291cmNlU2NoZW1hCn0pOwp6Lm9iamVjdCh7Cgl0eXBlOiB6
LmxpdGVyYWwoInJlc3BvbnNlLm91dHB1dF9pdGVtLmFkZGVkIiksCglvdXRwdXRfaW5kZXg6IHou
bnVtYmVyKCkuaW50KCkubm9ubmVnYXRpdmUoKSwKCWl0ZW06IE91dHB1dEl0ZW1TY2hlbWEKfSk7
Cnoub2JqZWN0KHsKCXR5cGU6IHoubGl0ZXJhbCgicmVzcG9uc2Uub3V0cHV0X2l0ZW0uZG9uZSIp
LAoJb3V0cHV0X2luZGV4OiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCksCglpdGVtOiBP
dXRwdXRJdGVtU2NoZW1hCn0pOwp6Lm9iamVjdCh7Cgl0eXBlOiB6LmxpdGVyYWwoInJlc3BvbnNl
LmNvbnRlbnRfcGFydC5hZGRlZCIpLAoJaXRlbV9pZDogei5zdHJpbmcoKSwKCW91dHB1dF9pbmRl
eDogei5udW1iZXIoKS5pbnQoKS5ub25uZWdhdGl2ZSgpLAoJY29udGVudF9pbmRleDogei5udW1i
ZXIoKS5pbnQoKS5ub25uZWdhdGl2ZSgpLAoJcGFydDogT3V0cHV0VGV4dENvbnRlbnRQYXJ0U2No
ZW1hCn0pOwp6Lm9iamVjdCh7Cgl0eXBlOiB6LmxpdGVyYWwoInJlc3BvbnNlLmNvbnRlbnRfcGFy
dC5kb25lIiksCglpdGVtX2lkOiB6LnN0cmluZygpLAoJb3V0cHV0X2luZGV4OiB6Lm51bWJlcigp
LmludCgpLm5vbm5lZ2F0aXZlKCksCgljb250ZW50X2luZGV4OiB6Lm51bWJlcigpLmludCgpLm5v
bm5lZ2F0aXZlKCksCglwYXJ0OiBPdXRwdXRUZXh0Q29udGVudFBhcnRTY2hlbWEKfSk7Cnoub2Jq
ZWN0KHsKCXR5cGU6IHoubGl0ZXJhbCgicmVzcG9uc2Uub3V0cHV0X3RleHQuZGVsdGEiKSwKCWl0
ZW1faWQ6IHouc3RyaW5nKCksCglvdXRwdXRfaW5kZXg6IHoubnVtYmVyKCkuaW50KCkubm9ubmVn
YXRpdmUoKSwKCWNvbnRlbnRfaW5kZXg6IHoubnVtYmVyKCkuaW50KCkubm9ubmVnYXRpdmUoKSwK
CWRlbHRhOiB6LnN0cmluZygpCn0pOwp6Lm9iamVjdCh7Cgl0eXBlOiB6LmxpdGVyYWwoInJlc3Bv
bnNlLm91dHB1dF90ZXh0LmRvbmUiKSwKCWl0ZW1faWQ6IHouc3RyaW5nKCksCglvdXRwdXRfaW5k
ZXg6IHoubnVtYmVyKCkuaW50KCkubm9ubmVnYXRpdmUoKSwKCWNvbnRlbnRfaW5kZXg6IHoubnVt
YmVyKCkuaW50KCkubm9ubmVnYXRpdmUoKSwKCXRleHQ6IHouc3RyaW5nKCkKfSk7Ci8vI2VuZHJl
Z2lvbgovLyNyZWdpb24gc3JjL2dhdGV3YXkvb3BlbnJlc3BvbnNlcy1wcm9tcHQudHMKZnVuY3Rp
b24gZXh0cmFjdFRleHRDb250ZW50KGNvbnRlbnQpIHsKCWlmICh0eXBlb2YgY29udGVudCA9PT0g
InN0cmluZyIpIHJldHVybiBjb250ZW50OwoJcmV0dXJuIGNvbnRlbnQubWFwKChwYXJ0KSA9PiB7
CgkJaWYgKHBhcnQudHlwZSA9PT0gImlucHV0X3RleHQiKSByZXR1cm4gcGFydC50ZXh0OwoJCWlm
IChwYXJ0LnR5cGUgPT09ICJvdXRwdXRfdGV4dCIpIHJldHVybiBwYXJ0LnRleHQ7CgkJcmV0dXJu
ICIiOwoJfSkuZmlsdGVyKEJvb2xlYW4pLmpvaW4oIlxuIik7Cn0KZnVuY3Rpb24gYnVpbGRBZ2Vu
dFByb21wdChpbnB1dCkgewoJaWYgKHR5cGVvZiBpbnB1dCA9PT0gInN0cmluZyIpIHJldHVybiB7
IG1lc3NhZ2U6IGlucHV0IH07Cgljb25zdCBzeXN0ZW1QYXJ0cyA9IFtdOwoJY29uc3QgY29udmVy
c2F0aW9uRW50cmllcyA9IFtdOwoJZm9yIChjb25zdCBpdGVtIG9mIGlucHV0KSBpZiAoaXRlbS50
eXBlID09PSAibWVzc2FnZSIpIHsKCQljb25zdCBjb250ZW50ID0gZXh0cmFjdFRleHRDb250ZW50
KGl0ZW0uY29udGVudCkudHJpbSgpOwoJCWlmICghY29udGVudCkgY29udGludWU7CgkJaWYgKGl0
ZW0ucm9sZSA9PT0gInN5c3RlbSIgfHwgaXRlbS5yb2xlID09PSAiZGV2ZWxvcGVyIikgewoJCQlz
eXN0ZW1QYXJ0cy5wdXNoKGNvbnRlbnQpOwoJCQljb250aW51ZTsKCQl9CgkJY29uc3Qgbm9ybWFs
aXplZFJvbGUgPSBpdGVtLnJvbGUgPT09ICJhc3Npc3RhbnQiID8gImFzc2lzdGFudCIgOiAidXNl
ciI7CgkJY29uc3Qgc2VuZGVyID0gbm9ybWFsaXplZFJvbGUgPT09ICJhc3Npc3RhbnQiID8gIkFz
c2lzdGFudCIgOiAiVXNlciI7CgkJY29udmVyc2F0aW9uRW50cmllcy5wdXNoKHsKCQkJcm9sZTog
bm9ybWFsaXplZFJvbGUsCgkJCWVudHJ5OiB7CgkJCQlzZW5kZXIsCgkJCQlib2R5OiBjb250ZW50
CgkJCX0KCQl9KTsKCX0gZWxzZSBpZiAoaXRlbS50eXBlID09PSAiZnVuY3Rpb25fY2FsbF9vdXRw
dXQiKSBjb252ZXJzYXRpb25FbnRyaWVzLnB1c2goewoJCXJvbGU6ICJ0b29sIiwKCQllbnRyeTog
ewoJCQlzZW5kZXI6IGBUb29sOiR7aXRlbS5jYWxsX2lkfWAsCgkJCWJvZHk6IGl0ZW0ub3V0cHV0
CgkJfQoJfSk7CglyZXR1cm4gewoJCW1lc3NhZ2U6IGJ1aWxkQWdlbnRNZXNzYWdlRnJvbUNvbnZl
cnNhdGlvbkVudHJpZXMoY29udmVyc2F0aW9uRW50cmllcyksCgkJZXh0cmFTeXN0ZW1Qcm9tcHQ6
IHN5c3RlbVBhcnRzLmxlbmd0aCA+IDAgPyBzeXN0ZW1QYXJ0cy5qb2luKCJcblxuIikgOiB2b2lk
IDAKCX07Cn0KLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvZ2F0ZXdheS9vcGVucmVzcG9uc2Vz
LWh0dHAudHMKLyoqCiogT3BlblJlc3BvbnNlcyBIVFRQIEhhbmRsZXIKKgoqIEltcGxlbWVudHMg
dGhlIE9wZW5SZXNwb25zZXMgYC92MS9yZXNwb25zZXNgIGVuZHBvaW50IGZvciBPcGVuQ2xhdyBH
YXRld2F5LgoqCiogQHNlZSBodHRwczovL3d3dy5vcGVuLXJlc3BvbnNlcy5jb20vCiovCmNvbnN0
IERFRkFVTFRfQk9EWV9CWVRFUyQxID0gMjAgKiAxMDI0ICogMTAyNDsKY29uc3QgREVGQVVMVF9N
QVhfVVJMX1BBUlRTID0gODsKZnVuY3Rpb24gd3JpdGVTc2VFdmVudChyZXMsIGV2ZW50KSB7Cgly
ZXMud3JpdGUoYGV2ZW50OiAke2V2ZW50LnR5cGV9XG5gKTsKCXJlcy53cml0ZShgZGF0YTogJHtK
U09OLnN0cmluZ2lmeShldmVudCl9XG5cbmApOwp9CmZ1bmN0aW9uIHJlc29sdmVSZXNwb25zZXNM
aW1pdHMoY29uZmlnKSB7Cgljb25zdCBmaWxlcyA9IGNvbmZpZz8uZmlsZXM7Cgljb25zdCBpbWFn
ZXMgPSBjb25maWc/LmltYWdlczsKCWNvbnN0IGZpbGVMaW1pdHMgPSByZXNvbHZlSW5wdXRGaWxl
TGltaXRzKGZpbGVzKTsKCXJldHVybiB7CgkJbWF4Qm9keUJ5dGVzOiBjb25maWc/Lm1heEJvZHlC
eXRlcyA/PyBERUZBVUxUX0JPRFlfQllURVMkMSwKCQltYXhVcmxQYXJ0czogdHlwZW9mIGNvbmZp
Zz8ubWF4VXJsUGFydHMgPT09ICJudW1iZXIiID8gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcihjb25m
aWcubWF4VXJsUGFydHMpKSA6IERFRkFVTFRfTUFYX1VSTF9QQVJUUywKCQlmaWxlczogewoJCQku
Li5maWxlTGltaXRzLAoJCQl1cmxBbGxvd2xpc3Q6IG5vcm1hbGl6ZUlucHV0SG9zdG5hbWVBbGxv
d2xpc3QoZmlsZXM/LnVybEFsbG93bGlzdCkKCQl9LAoJCWltYWdlczogewoJCQlhbGxvd1VybDog
aW1hZ2VzPy5hbGxvd1VybCA/PyB0cnVlLAoJCQl1cmxBbGxvd2xpc3Q6IG5vcm1hbGl6ZUlucHV0
SG9zdG5hbWVBbGxvd2xpc3QoaW1hZ2VzPy51cmxBbGxvd2xpc3QpLAoJCQlhbGxvd2VkTWltZXM6
IG5vcm1hbGl6ZU1pbWVMaXN0KGltYWdlcz8uYWxsb3dlZE1pbWVzLCBERUZBVUxUX0lOUFVUX0lN
QUdFX01JTUVTKSwKCQkJbWF4Qnl0ZXM6IGltYWdlcz8ubWF4Qnl0ZXMgPz8gMTA0ODU3NjAsCgkJ
CW1heFJlZGlyZWN0czogaW1hZ2VzPy5tYXhSZWRpcmVjdHMgPz8gMywKCQkJdGltZW91dE1zOiBp
bWFnZXM/LnRpbWVvdXRNcyA/PyAxZTQKCQl9Cgl9Owp9CmZ1bmN0aW9uIGV4dHJhY3RDbGllbnRU
b29scyhib2R5KSB7CglyZXR1cm4gYm9keS50b29scyA/PyBbXTsKfQpmdW5jdGlvbiBhcHBseVRv
b2xDaG9pY2UocGFyYW1zKSB7Cgljb25zdCB7IHRvb2xzLCB0b29sQ2hvaWNlIH0gPSBwYXJhbXM7
CglpZiAoIXRvb2xDaG9pY2UpIHJldHVybiB7IHRvb2xzIH07CglpZiAodG9vbENob2ljZSA9PT0g
Im5vbmUiKSByZXR1cm4geyB0b29sczogW10gfTsKCWlmICh0b29sQ2hvaWNlID09PSAicmVxdWly
ZWQiKSB7CgkJaWYgKHRvb2xzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKCJ0b29sX2No
b2ljZT1yZXF1aXJlZCBidXQgbm8gdG9vbHMgd2VyZSBwcm92aWRlZCIpOwoJCXJldHVybiB7CgkJ
CXRvb2xzLAoJCQlleHRyYVN5c3RlbVByb21wdDogIllvdSBtdXN0IGNhbGwgb25lIG9mIHRoZSBh
dmFpbGFibGUgdG9vbHMgYmVmb3JlIHJlc3BvbmRpbmcuIgoJCX07Cgl9CglpZiAodHlwZW9mIHRv
b2xDaG9pY2UgPT09ICJvYmplY3QiICYmIHRvb2xDaG9pY2UudHlwZSA9PT0gImZ1bmN0aW9uIikg
ewoJCWNvbnN0IHRhcmdldE5hbWUgPSB0b29sQ2hvaWNlLmZ1bmN0aW9uPy5uYW1lPy50cmltKCk7
CgkJaWYgKCF0YXJnZXROYW1lKSB0aHJvdyBuZXcgRXJyb3IoInRvb2xfY2hvaWNlLmZ1bmN0aW9u
Lm5hbWUgaXMgcmVxdWlyZWQiKTsKCQljb25zdCBtYXRjaGVkID0gdG9vbHMuZmlsdGVyKCh0b29s
KSA9PiB0b29sLmZ1bmN0aW9uPy5uYW1lID09PSB0YXJnZXROYW1lKTsKCQlpZiAobWF0Y2hlZC5s
ZW5ndGggPT09IDApIHRocm93IG5ldyBFcnJvcihgdG9vbF9jaG9pY2UgcmVxdWVzdGVkIHVua25v
d24gdG9vbDogJHt0YXJnZXROYW1lfWApOwoJCXJldHVybiB7CgkJCXRvb2xzOiBtYXRjaGVkLAoJ
CQlleHRyYVN5c3RlbVByb21wdDogYFlvdSBtdXN0IGNhbGwgdGhlICR7dGFyZ2V0TmFtZX0gdG9v
bCBiZWZvcmUgcmVzcG9uZGluZy5gCgkJfTsKCX0KCXJldHVybiB7IHRvb2xzIH07Cn0KZnVuY3Rp
b24gY3JlYXRlRW1wdHlVc2FnZSgpIHsKCXJldHVybiB7CgkJaW5wdXRfdG9rZW5zOiAwLAoJCW91
dHB1dF90b2tlbnM6IDAsCgkJdG90YWxfdG9rZW5zOiAwCgl9Owp9CmZ1bmN0aW9uIHRvVXNhZ2Uo
dmFsdWUpIHsKCWlmICghdmFsdWUpIHJldHVybiBjcmVhdGVFbXB0eVVzYWdlKCk7Cgljb25zdCBp
bnB1dCA9IHZhbHVlLmlucHV0ID8/IDA7Cgljb25zdCBvdXRwdXQgPSB2YWx1ZS5vdXRwdXQgPz8g
MDsKCWNvbnN0IGNhY2hlUmVhZCA9IHZhbHVlLmNhY2hlUmVhZCA/PyAwOwoJY29uc3QgY2FjaGVX
cml0ZSA9IHZhbHVlLmNhY2hlV3JpdGUgPz8gMDsKCWNvbnN0IHRvdGFsID0gdmFsdWUudG90YWwg
Pz8gaW5wdXQgKyBvdXRwdXQgKyBjYWNoZVJlYWQgKyBjYWNoZVdyaXRlOwoJcmV0dXJuIHsKCQlp
bnB1dF90b2tlbnM6IE1hdGgubWF4KDAsIGlucHV0KSwKCQlvdXRwdXRfdG9rZW5zOiBNYXRoLm1h
eCgwLCBvdXRwdXQpLAoJCXRvdGFsX3Rva2VuczogTWF0aC5tYXgoMCwgdG90YWwpCgl9Owp9CmZ1
bmN0aW9uIGV4dHJhY3RVc2FnZUZyb21SZXN1bHQocmVzdWx0KSB7Cgljb25zdCBtZXRhID0gcmVz
dWx0Py5tZXRhOwoJcmV0dXJuIHRvVXNhZ2UobWV0YSAmJiB0eXBlb2YgbWV0YSA9PT0gIm9iamVj
dCIgPyBtZXRhLmFnZW50TWV0YT8udXNhZ2UgOiB2b2lkIDApOwp9CmZ1bmN0aW9uIHJlc29sdmVT
dG9wUmVhc29uQW5kUGVuZGluZ1Rvb2xDYWxscyhtZXRhKSB7CglpZiAoIW1ldGEgfHwgdHlwZW9m
IG1ldGEgIT09ICJvYmplY3QiKSByZXR1cm4gewoJCXN0b3BSZWFzb246IHZvaWQgMCwKCQlwZW5k
aW5nVG9vbENhbGxzOiB2b2lkIDAKCX07Cgljb25zdCByZWNvcmQgPSBtZXRhOwoJcmV0dXJuIHsK
CQlzdG9wUmVhc29uOiByZWNvcmQuc3RvcFJlYXNvbiwKCQlwZW5kaW5nVG9vbENhbGxzOiByZWNv
cmQucGVuZGluZ1Rvb2xDYWxscwoJfTsKfQpmdW5jdGlvbiBjcmVhdGVSZXNwb25zZVJlc291cmNl
KHBhcmFtcykgewoJcmV0dXJuIHsKCQlpZDogcGFyYW1zLmlkLAoJCW9iamVjdDogInJlc3BvbnNl
IiwKCQljcmVhdGVkX2F0OiBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxZTMpLAoJCXN0YXR1czog
cGFyYW1zLnN0YXR1cywKCQltb2RlbDogcGFyYW1zLm1vZGVsLAoJCW91dHB1dDogcGFyYW1zLm91
dHB1dCwKCQl1c2FnZTogcGFyYW1zLnVzYWdlID8/IGNyZWF0ZUVtcHR5VXNhZ2UoKSwKCQllcnJv
cjogcGFyYW1zLmVycm9yCgl9Owp9CmZ1bmN0aW9uIGNyZWF0ZUFzc2lzdGFudE91dHB1dEl0ZW0o
cGFyYW1zKSB7CglyZXR1cm4gewoJCXR5cGU6ICJtZXNzYWdlIiwKCQlpZDogcGFyYW1zLmlkLAoJ
CXJvbGU6ICJhc3Npc3RhbnQiLAoJCWNvbnRlbnQ6IFt7CgkJCXR5cGU6ICJvdXRwdXRfdGV4dCIs
CgkJCXRleHQ6IHBhcmFtcy50ZXh0CgkJfV0sCgkJc3RhdHVzOiBwYXJhbXMuc3RhdHVzCgl9Owp9
CmFzeW5jIGZ1bmN0aW9uIHJ1blJlc3BvbnNlc0FnZW50Q29tbWFuZChwYXJhbXMpIHsKCXJldHVy
biBhZ2VudENvbW1hbmRGcm9tSW5ncmVzcyh7CgkJbWVzc2FnZTogcGFyYW1zLm1lc3NhZ2UsCgkJ
aW1hZ2VzOiBwYXJhbXMuaW1hZ2VzLmxlbmd0aCA+IDAgPyBwYXJhbXMuaW1hZ2VzIDogdm9pZCAw
LAoJCWNsaWVudFRvb2xzOiBwYXJhbXMuY2xpZW50VG9vbHMubGVuZ3RoID4gMCA/IHBhcmFtcy5j
bGllbnRUb29scyA6IHZvaWQgMCwKCQlleHRyYVN5c3RlbVByb21wdDogcGFyYW1zLmV4dHJhU3lz
dGVtUHJvbXB0IHx8IHZvaWQgMCwKCQlzdHJlYW1QYXJhbXM6IHBhcmFtcy5zdHJlYW1QYXJhbXMg
Pz8gdm9pZCAwLAoJCXNlc3Npb25LZXk6IHBhcmFtcy5zZXNzaW9uS2V5LAoJCXJ1bklkOiBwYXJh
bXMucnVuSWQsCgkJZGVsaXZlcjogZmFsc2UsCgkJbWVzc2FnZUNoYW5uZWw6IHBhcmFtcy5tZXNz
YWdlQ2hhbm5lbCwKCQliZXN0RWZmb3J0RGVsaXZlcjogZmFsc2UsCgkJc2VuZGVySXNPd25lcjog
dHJ1ZQoJfSwgZGVmYXVsdFJ1bnRpbWUsIHBhcmFtcy5kZXBzKTsKfQphc3luYyBmdW5jdGlvbiBo
YW5kbGVPcGVuUmVzcG9uc2VzSHR0cFJlcXVlc3QocmVxLCByZXMsIG9wdHMpIHsKCWNvbnN0IGxp
bWl0cyA9IHJlc29sdmVSZXNwb25zZXNMaW1pdHMob3B0cy5jb25maWcpOwoJY29uc3QgbWF4Qm9k
eUJ5dGVzID0gb3B0cy5tYXhCb2R5Qnl0ZXMgPz8gKG9wdHMuY29uZmlnPy5tYXhCb2R5Qnl0ZXMg
PyBsaW1pdHMubWF4Qm9keUJ5dGVzIDogTWF0aC5tYXgobGltaXRzLm1heEJvZHlCeXRlcywgbGlt
aXRzLmZpbGVzLm1heEJ5dGVzICogMiwgbGltaXRzLmltYWdlcy5tYXhCeXRlcyAqIDIpKTsKCWNv
bnN0IGhhbmRsZWQgPSBhd2FpdCBoYW5kbGVHYXRld2F5UG9zdEpzb25FbmRwb2ludChyZXEsIHJl
cywgewoJCXBhdGhuYW1lOiAiL3YxL3Jlc3BvbnNlcyIsCgkJYXV0aDogb3B0cy5hdXRoLAoJCXRy
dXN0ZWRQcm94aWVzOiBvcHRzLnRydXN0ZWRQcm94aWVzLAoJCWFsbG93UmVhbElwRmFsbGJhY2s6
IG9wdHMuYWxsb3dSZWFsSXBGYWxsYmFjaywKCQlyYXRlTGltaXRlcjogb3B0cy5yYXRlTGltaXRl
ciwKCQltYXhCb2R5Qnl0ZXMKCX0pOwoJaWYgKGhhbmRsZWQgPT09IGZhbHNlKSByZXR1cm4gZmFs
c2U7CglpZiAoIWhhbmRsZWQpIHJldHVybiB0cnVlOwoJY29uc3QgcGFyc2VSZXN1bHQgPSBDcmVh
dGVSZXNwb25zZUJvZHlTY2hlbWEuc2FmZVBhcnNlKGhhbmRsZWQuYm9keSk7CglpZiAoIXBhcnNl
UmVzdWx0LnN1Y2Nlc3MpIHsKCQljb25zdCBpc3N1ZSA9IHBhcnNlUmVzdWx0LmVycm9yLmlzc3Vl
c1swXTsKCQlzZW5kSnNvbiQxKHJlcywgNDAwLCB7IGVycm9yOiB7CgkJCW1lc3NhZ2U6IGlzc3Vl
ID8gYCR7aXNzdWUucGF0aC5qb2luKCIuIil9OiAke2lzc3VlLm1lc3NhZ2V9YCA6ICJJbnZhbGlk
IHJlcXVlc3QgYm9keSIsCgkJCXR5cGU6ICJpbnZhbGlkX3JlcXVlc3RfZXJyb3IiCgkJfSB9KTsK
CQlyZXR1cm4gdHJ1ZTsKCX0KCWNvbnN0IHBheWxvYWQgPSBwYXJzZVJlc3VsdC5kYXRhOwoJY29u
c3Qgc3RyZWFtID0gQm9vbGVhbihwYXlsb2FkLnN0cmVhbSk7Cgljb25zdCBtb2RlbCA9IHBheWxv
YWQubW9kZWw7Cgljb25zdCB1c2VyID0gcGF5bG9hZC51c2VyOwoJbGV0IGltYWdlcyA9IFtdOwoJ
bGV0IGZpbGVDb250ZXh0cyA9IFtdOwoJbGV0IHVybFBhcnRzID0gMDsKCWNvbnN0IG1hcmtVcmxQ
YXJ0ID0gKCkgPT4gewoJCXVybFBhcnRzICs9IDE7CgkJaWYgKHVybFBhcnRzID4gbGltaXRzLm1h
eFVybFBhcnRzKSB0aHJvdyBuZXcgRXJyb3IoYFRvbyBtYW55IFVSTC1iYXNlZCBpbnB1dCBzb3Vy
Y2VzOiAke3VybFBhcnRzfSAobGltaXQ6ICR7bGltaXRzLm1heFVybFBhcnRzfSlgKTsKCX07Cgl0
cnkgewoJCWlmIChBcnJheS5pc0FycmF5KHBheWxvYWQuaW5wdXQpKSB7CgkJCWZvciAoY29uc3Qg
aXRlbSBvZiBwYXlsb2FkLmlucHV0KSBpZiAoaXRlbS50eXBlID09PSAibWVzc2FnZSIgJiYgdHlw
ZW9mIGl0ZW0uY29udGVudCAhPT0gInN0cmluZyIpIGZvciAoY29uc3QgcGFydCBvZiBpdGVtLmNv
bnRlbnQpIHsKCQkJCWlmIChwYXJ0LnR5cGUgPT09ICJpbnB1dF9pbWFnZSIpIHsKCQkJCQljb25z
dCBzb3VyY2UgPSBwYXJ0LnNvdXJjZTsKCQkJCQljb25zdCBzb3VyY2VUeXBlID0gc291cmNlLnR5
cGUgPT09ICJiYXNlNjQiIHx8IHNvdXJjZS50eXBlID09PSAidXJsIiA/IHNvdXJjZS50eXBlIDog
dm9pZCAwOwoJCQkJCWlmICghc291cmNlVHlwZSkgdGhyb3cgbmV3IEVycm9yKCJpbnB1dF9pbWFn
ZSBtdXN0IGhhdmUgJ3NvdXJjZS51cmwnIG9yICdzb3VyY2UuZGF0YSciKTsKCQkJCQlpZiAoc291
cmNlVHlwZSA9PT0gInVybCIpIG1hcmtVcmxQYXJ0KCk7CgkJCQkJY29uc3QgaW1hZ2UgPSBhd2Fp
dCBleHRyYWN0SW1hZ2VDb250ZW50RnJvbVNvdXJjZShzb3VyY2VUeXBlID09PSAidXJsIiA/IHsK
CQkJCQkJdHlwZTogInVybCIsCgkJCQkJCXVybDogc291cmNlLnVybCA/PyAiIiwKCQkJCQkJbWVk
aWFUeXBlOiBzb3VyY2UubWVkaWFfdHlwZQoJCQkJCX0gOiB7CgkJCQkJCXR5cGU6ICJiYXNlNjQi
LAoJCQkJCQlkYXRhOiBzb3VyY2UuZGF0YSA/PyAiIiwKCQkJCQkJbWVkaWFUeXBlOiBzb3VyY2Uu
bWVkaWFfdHlwZQoJCQkJCX0sIGxpbWl0cy5pbWFnZXMpOwoJCQkJCWltYWdlcy5wdXNoKGltYWdl
KTsKCQkJCQljb250aW51ZTsKCQkJCX0KCQkJCWlmIChwYXJ0LnR5cGUgPT09ICJpbnB1dF9maWxl
IikgewoJCQkJCWNvbnN0IHNvdXJjZSA9IHBhcnQuc291cmNlOwoJCQkJCWNvbnN0IHNvdXJjZVR5
cGUgPSBzb3VyY2UudHlwZSA9PT0gImJhc2U2NCIgfHwgc291cmNlLnR5cGUgPT09ICJ1cmwiID8g
c291cmNlLnR5cGUgOiB2b2lkIDA7CgkJCQkJaWYgKCFzb3VyY2VUeXBlKSB0aHJvdyBuZXcgRXJy
b3IoImlucHV0X2ZpbGUgbXVzdCBoYXZlICdzb3VyY2UudXJsJyBvciAnc291cmNlLmRhdGEnIik7
CgkJCQkJaWYgKHNvdXJjZVR5cGUgPT09ICJ1cmwiKSBtYXJrVXJsUGFydCgpOwoJCQkJCWNvbnN0
IGZpbGUgPSBhd2FpdCBleHRyYWN0RmlsZUNvbnRlbnRGcm9tU291cmNlKHsKCQkJCQkJc291cmNl
OiBzb3VyY2VUeXBlID09PSAidXJsIiA/IHsKCQkJCQkJCXR5cGU6ICJ1cmwiLAoJCQkJCQkJdXJs
OiBzb3VyY2UudXJsID8/ICIiLAoJCQkJCQkJbWVkaWFUeXBlOiBzb3VyY2UubWVkaWFfdHlwZSwK
CQkJCQkJCWZpbGVuYW1lOiBzb3VyY2UuZmlsZW5hbWUKCQkJCQkJfSA6IHsKCQkJCQkJCXR5cGU6
ICJiYXNlNjQiLAoJCQkJCQkJZGF0YTogc291cmNlLmRhdGEgPz8gIiIsCgkJCQkJCQltZWRpYVR5
cGU6IHNvdXJjZS5tZWRpYV90eXBlLAoJCQkJCQkJZmlsZW5hbWU6IHNvdXJjZS5maWxlbmFtZQoJ
CQkJCQl9LAoJCQkJCQlsaW1pdHM6IGxpbWl0cy5maWxlcwoJCQkJCX0pOwoJCQkJCWlmIChmaWxl
LnRleHQ/LnRyaW0oKSkgZmlsZUNvbnRleHRzLnB1c2goYDxmaWxlIG5hbWU9IiR7ZmlsZS5maWxl
bmFtZX0iPlxuJHtmaWxlLnRleHR9XG48L2ZpbGU+YCk7CgkJCQkJZWxzZSBpZiAoZmlsZS5pbWFn
ZXMgJiYgZmlsZS5pbWFnZXMubGVuZ3RoID4gMCkgZmlsZUNvbnRleHRzLnB1c2goYDxmaWxlIG5h
bWU9IiR7ZmlsZS5maWxlbmFtZX0iPltQREYgY29udGVudCByZW5kZXJlZCB0byBpbWFnZXNdPC9m
aWxlPmApOwoJCQkJCWlmIChmaWxlLmltYWdlcyAmJiBmaWxlLmltYWdlcy5sZW5ndGggPiAwKSBp
bWFnZXMgPSBpbWFnZXMuY29uY2F0KGZpbGUuaW1hZ2VzKTsKCQkJCX0KCQkJfQoJCX0KCX0gY2F0
Y2ggKGVycikgewoJCWxvZ1dhcm4oYG9wZW5yZXNwb25zZXM6IHJlcXVlc3QgcGFyc2luZyBmYWls
ZWQ6ICR7U3RyaW5nKGVycil9YCk7CgkJc2VuZEpzb24kMShyZXMsIDQwMCwgeyBlcnJvcjogewoJ
CQltZXNzYWdlOiAiaW52YWxpZCByZXF1ZXN0IiwKCQkJdHlwZTogImludmFsaWRfcmVxdWVzdF9l
cnJvciIKCQl9IH0pOwoJCXJldHVybiB0cnVlOwoJfQoJY29uc3QgY2xpZW50VG9vbHMgPSBleHRy
YWN0Q2xpZW50VG9vbHMocGF5bG9hZCk7CglsZXQgdG9vbENob2ljZVByb21wdDsKCWxldCByZXNv
bHZlZENsaWVudFRvb2xzID0gY2xpZW50VG9vbHM7Cgl0cnkgewoJCWNvbnN0IHRvb2xDaG9pY2VS
ZXN1bHQgPSBhcHBseVRvb2xDaG9pY2UoewoJCQl0b29sczogY2xpZW50VG9vbHMsCgkJCXRvb2xD
aG9pY2U6IHBheWxvYWQudG9vbF9jaG9pY2UKCQl9KTsKCQlyZXNvbHZlZENsaWVudFRvb2xzID0g
dG9vbENob2ljZVJlc3VsdC50b29sczsKCQl0b29sQ2hvaWNlUHJvbXB0ID0gdG9vbENob2ljZVJl
c3VsdC5leHRyYVN5c3RlbVByb21wdDsKCX0gY2F0Y2ggKGVycikgewoJCWxvZ1dhcm4oYG9wZW5y
ZXNwb25zZXM6IHRvb2wgY29uZmlndXJhdGlvbiBmYWlsZWQ6ICR7U3RyaW5nKGVycil9YCk7CgkJ
c2VuZEpzb24kMShyZXMsIDQwMCwgeyBlcnJvcjogewoJCQltZXNzYWdlOiAiaW52YWxpZCB0b29s
IGNvbmZpZ3VyYXRpb24iLAoJCQl0eXBlOiAiaW52YWxpZF9yZXF1ZXN0X2Vycm9yIgoJCX0gfSk7
CgkJcmV0dXJuIHRydWU7Cgl9Cgljb25zdCB7IHNlc3Npb25LZXksIG1lc3NhZ2VDaGFubmVsIH0g
PSByZXNvbHZlR2F0ZXdheVJlcXVlc3RDb250ZXh0KHsKCQlyZXEsCgkJbW9kZWwsCgkJdXNlciwK
CQlzZXNzaW9uUHJlZml4OiAib3BlbnJlc3BvbnNlcyIsCgkJZGVmYXVsdE1lc3NhZ2VDaGFubmVs
OiAid2ViY2hhdCIsCgkJdXNlTWVzc2FnZUNoYW5uZWxIZWFkZXI6IGZhbHNlCgl9KTsKCWNvbnN0
IHByb21wdCA9IGJ1aWxkQWdlbnRQcm9tcHQocGF5bG9hZC5pbnB1dCk7Cgljb25zdCBmaWxlQ29u
dGV4dCA9IGZpbGVDb250ZXh0cy5sZW5ndGggPiAwID8gZmlsZUNvbnRleHRzLmpvaW4oIlxuXG4i
KSA6IHZvaWQgMDsKCWNvbnN0IHRvb2xDaG9pY2VDb250ZXh0ID0gdG9vbENob2ljZVByb21wdD8u
dHJpbSgpOwoJY29uc3QgZXh0cmFTeXN0ZW1Qcm9tcHQgPSBbCgkJcGF5bG9hZC5pbnN0cnVjdGlv
bnMsCgkJcHJvbXB0LmV4dHJhU3lzdGVtUHJvbXB0LAoJCXRvb2xDaG9pY2VDb250ZXh0LAoJCWZp
bGVDb250ZXh0CgldLmZpbHRlcihCb29sZWFuKS5qb2luKCJcblxuIik7CglpZiAoIXByb21wdC5t
ZXNzYWdlKSB7CgkJc2VuZEpzb24kMShyZXMsIDQwMCwgeyBlcnJvcjogewoJCQltZXNzYWdlOiAi
TWlzc2luZyB1c2VyIG1lc3NhZ2UgaW4gYGlucHV0YC4iLAoJCQl0eXBlOiAiaW52YWxpZF9yZXF1
ZXN0X2Vycm9yIgoJCX0gfSk7CgkJcmV0dXJuIHRydWU7Cgl9Cgljb25zdCByZXNwb25zZUlkID0g
YHJlc3BfJHtyYW5kb21VVUlEKCl9YDsKCWNvbnN0IG91dHB1dEl0ZW1JZCA9IGBtc2dfJHtyYW5k
b21VVUlEKCl9YDsKCWNvbnN0IGRlcHMgPSBjcmVhdGVEZWZhdWx0RGVwcygpOwoJY29uc3Qgc3Ry
ZWFtUGFyYW1zID0gdHlwZW9mIHBheWxvYWQubWF4X291dHB1dF90b2tlbnMgPT09ICJudW1iZXIi
ID8geyBtYXhUb2tlbnM6IHBheWxvYWQubWF4X291dHB1dF90b2tlbnMgfSA6IHZvaWQgMDsKCWlm
ICghc3RyZWFtKSB7CgkJdHJ5IHsKCQkJY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuUmVzcG9uc2Vz
QWdlbnRDb21tYW5kKHsKCQkJCW1lc3NhZ2U6IHByb21wdC5tZXNzYWdlLAoJCQkJaW1hZ2VzLAoJ
CQkJY2xpZW50VG9vbHM6IHJlc29sdmVkQ2xpZW50VG9vbHMsCgkJCQlleHRyYVN5c3RlbVByb21w
dCwKCQkJCXN0cmVhbVBhcmFtcywKCQkJCXNlc3Npb25LZXksCgkJCQlydW5JZDogcmVzcG9uc2VJ
ZCwKCQkJCW1lc3NhZ2VDaGFubmVsLAoJCQkJZGVwcwoJCQl9KTsKCQkJY29uc3QgcGF5bG9hZHMg
PSByZXN1bHQ/LnBheWxvYWRzOwoJCQljb25zdCB1c2FnZSA9IGV4dHJhY3RVc2FnZUZyb21SZXN1
bHQocmVzdWx0KTsKCQkJY29uc3QgbWV0YSA9IHJlc3VsdD8ubWV0YTsKCQkJY29uc3QgeyBzdG9w
UmVhc29uLCBwZW5kaW5nVG9vbENhbGxzIH0gPSByZXNvbHZlU3RvcFJlYXNvbkFuZFBlbmRpbmdU
b29sQ2FsbHMobWV0YSk7CgkJCWlmIChzdG9wUmVhc29uID09PSAidG9vbF9jYWxscyIgJiYgcGVu
ZGluZ1Rvb2xDYWxscyAmJiBwZW5kaW5nVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCWNvbnN0
IGZ1bmN0aW9uQ2FsbCA9IHBlbmRpbmdUb29sQ2FsbHNbMF07CgkJCQlzZW5kSnNvbiQxKHJlcywg
MjAwLCBjcmVhdGVSZXNwb25zZVJlc291cmNlKHsKCQkJCQlpZDogcmVzcG9uc2VJZCwKCQkJCQlt
b2RlbCwKCQkJCQlzdGF0dXM6ICJpbmNvbXBsZXRlIiwKCQkJCQlvdXRwdXQ6IFt7CgkJCQkJCXR5
cGU6ICJmdW5jdGlvbl9jYWxsIiwKCQkJCQkJaWQ6IGBjYWxsXyR7cmFuZG9tVVVJRCgpfWAsCgkJ
CQkJCWNhbGxfaWQ6IGZ1bmN0aW9uQ2FsbC5pZCwKCQkJCQkJbmFtZTogZnVuY3Rpb25DYWxsLm5h
bWUsCgkJCQkJCWFyZ3VtZW50czogZnVuY3Rpb25DYWxsLmFyZ3VtZW50cwoJCQkJCX1dLAoJCQkJ
CXVzYWdlCgkJCQl9KSk7CgkJCQlyZXR1cm4gdHJ1ZTsKCQkJfQoJCQlzZW5kSnNvbiQxKHJlcywg
MjAwLCBjcmVhdGVSZXNwb25zZVJlc291cmNlKHsKCQkJCWlkOiByZXNwb25zZUlkLAoJCQkJbW9k
ZWwsCgkJCQlzdGF0dXM6ICJjb21wbGV0ZWQiLAoJCQkJb3V0cHV0OiBbY3JlYXRlQXNzaXN0YW50
T3V0cHV0SXRlbSh7CgkJCQkJaWQ6IG91dHB1dEl0ZW1JZCwKCQkJCQl0ZXh0OiBBcnJheS5pc0Fy
cmF5KHBheWxvYWRzKSAmJiBwYXlsb2Fkcy5sZW5ndGggPiAwID8gcGF5bG9hZHMubWFwKChwKSA9
PiB0eXBlb2YgcC50ZXh0ID09PSAic3RyaW5nIiA/IHAudGV4dCA6ICIiKS5maWx0ZXIoQm9vbGVh
bikuam9pbigiXG5cbiIpIDogIk5vIHJlc3BvbnNlIGZyb20gT3BlbkNsYXcuIiwKCQkJCQlzdGF0
dXM6ICJjb21wbGV0ZWQiCgkJCQl9KV0sCgkJCQl1c2FnZQoJCQl9KSk7CgkJfSBjYXRjaCAoZXJy
KSB7CgkJCWxvZ1dhcm4oYG9wZW5yZXNwb25zZXM6IG5vbi1zdHJlYW0gcmVzcG9uc2UgZmFpbGVk
OiAke1N0cmluZyhlcnIpfWApOwoJCQlzZW5kSnNvbiQxKHJlcywgNTAwLCBjcmVhdGVSZXNwb25z
ZVJlc291cmNlKHsKCQkJCWlkOiByZXNwb25zZUlkLAoJCQkJbW9kZWwsCgkJCQlzdGF0dXM6ICJm
YWlsZWQiLAoJCQkJb3V0cHV0OiBbXSwKCQkJCWVycm9yOiB7CgkJCQkJY29kZTogImFwaV9lcnJv
ciIsCgkJCQkJbWVzc2FnZTogImludGVybmFsIGVycm9yIgoJCQkJfQoJCQl9KSk7CgkJfQoJCXJl
dHVybiB0cnVlOwoJfQoJc2V0U3NlSGVhZGVycyhyZXMpOwoJbGV0IGFjY3VtdWxhdGVkVGV4dCA9
ICIiOwoJbGV0IHNhd0Fzc2lzdGFudERlbHRhID0gZmFsc2U7CglsZXQgY2xvc2VkID0gZmFsc2U7
CglsZXQgdW5zdWJzY3JpYmUgPSAoKSA9PiB7fTsKCWxldCBmaW5hbFVzYWdlOwoJbGV0IGZpbmFs
aXplUmVxdWVzdGVkID0gbnVsbDsKCWNvbnN0IG1heWJlRmluYWxpemUgPSAoKSA9PiB7CgkJaWYg
KGNsb3NlZCkgcmV0dXJuOwoJCWlmICghZmluYWxpemVSZXF1ZXN0ZWQpIHJldHVybjsKCQlpZiAo
IWZpbmFsVXNhZ2UpIHJldHVybjsKCQljb25zdCB1c2FnZSA9IGZpbmFsVXNhZ2U7CgkJY2xvc2Vk
ID0gdHJ1ZTsKCQl1bnN1YnNjcmliZSgpOwoJCXdyaXRlU3NlRXZlbnQocmVzLCB7CgkJCXR5cGU6
ICJyZXNwb25zZS5vdXRwdXRfdGV4dC5kb25lIiwKCQkJaXRlbV9pZDogb3V0cHV0SXRlbUlkLAoJ
CQlvdXRwdXRfaW5kZXg6IDAsCgkJCWNvbnRlbnRfaW5kZXg6IDAsCgkJCXRleHQ6IGZpbmFsaXpl
UmVxdWVzdGVkLnRleHQKCQl9KTsKCQl3cml0ZVNzZUV2ZW50KHJlcywgewoJCQl0eXBlOiAicmVz
cG9uc2UuY29udGVudF9wYXJ0LmRvbmUiLAoJCQlpdGVtX2lkOiBvdXRwdXRJdGVtSWQsCgkJCW91
dHB1dF9pbmRleDogMCwKCQkJY29udGVudF9pbmRleDogMCwKCQkJcGFydDogewoJCQkJdHlwZTog
Im91dHB1dF90ZXh0IiwKCQkJCXRleHQ6IGZpbmFsaXplUmVxdWVzdGVkLnRleHQKCQkJfQoJCX0p
OwoJCWNvbnN0IGNvbXBsZXRlZEl0ZW0gPSBjcmVhdGVBc3Npc3RhbnRPdXRwdXRJdGVtKHsKCQkJ
aWQ6IG91dHB1dEl0ZW1JZCwKCQkJdGV4dDogZmluYWxpemVSZXF1ZXN0ZWQudGV4dCwKCQkJc3Rh
dHVzOiAiY29tcGxldGVkIgoJCX0pOwoJCXdyaXRlU3NlRXZlbnQocmVzLCB7CgkJCXR5cGU6ICJy
ZXNwb25zZS5vdXRwdXRfaXRlbS5kb25lIiwKCQkJb3V0cHV0X2luZGV4OiAwLAoJCQlpdGVtOiBj
b21wbGV0ZWRJdGVtCgkJfSk7CgkJd3JpdGVTc2VFdmVudChyZXMsIHsKCQkJdHlwZTogInJlc3Bv
bnNlLmNvbXBsZXRlZCIsCgkJCXJlc3BvbnNlOiBjcmVhdGVSZXNwb25zZVJlc291cmNlKHsKCQkJ
CWlkOiByZXNwb25zZUlkLAoJCQkJbW9kZWwsCgkJCQlzdGF0dXM6IGZpbmFsaXplUmVxdWVzdGVk
LnN0YXR1cywKCQkJCW91dHB1dDogW2NvbXBsZXRlZEl0ZW1dLAoJCQkJdXNhZ2UKCQkJfSkKCQl9
KTsKCQl3cml0ZURvbmUocmVzKTsKCQlyZXMuZW5kKCk7Cgl9OwoJY29uc3QgcmVxdWVzdEZpbmFs
aXplID0gKHN0YXR1cywgdGV4dCkgPT4gewoJCWlmIChmaW5hbGl6ZVJlcXVlc3RlZCkgcmV0dXJu
OwoJCWZpbmFsaXplUmVxdWVzdGVkID0gewoJCQlzdGF0dXMsCgkJCXRleHQKCQl9OwoJCW1heWJl
RmluYWxpemUoKTsKCX07Cgljb25zdCBpbml0aWFsUmVzcG9uc2UgPSBjcmVhdGVSZXNwb25zZVJl
c291cmNlKHsKCQlpZDogcmVzcG9uc2VJZCwKCQltb2RlbCwKCQlzdGF0dXM6ICJpbl9wcm9ncmVz
cyIsCgkJb3V0cHV0OiBbXQoJfSk7Cgl3cml0ZVNzZUV2ZW50KHJlcywgewoJCXR5cGU6ICJyZXNw
b25zZS5jcmVhdGVkIiwKCQlyZXNwb25zZTogaW5pdGlhbFJlc3BvbnNlCgl9KTsKCXdyaXRlU3Nl
RXZlbnQocmVzLCB7CgkJdHlwZTogInJlc3BvbnNlLmluX3Byb2dyZXNzIiwKCQlyZXNwb25zZTog
aW5pdGlhbFJlc3BvbnNlCgl9KTsKCXdyaXRlU3NlRXZlbnQocmVzLCB7CgkJdHlwZTogInJlc3Bv
bnNlLm91dHB1dF9pdGVtLmFkZGVkIiwKCQlvdXRwdXRfaW5kZXg6IDAsCgkJaXRlbTogY3JlYXRl
QXNzaXN0YW50T3V0cHV0SXRlbSh7CgkJCWlkOiBvdXRwdXRJdGVtSWQsCgkJCXRleHQ6ICIiLAoJ
CQlzdGF0dXM6ICJpbl9wcm9ncmVzcyIKCQl9KQoJfSk7Cgl3cml0ZVNzZUV2ZW50KHJlcywgewoJ
CXR5cGU6ICJyZXNwb25zZS5jb250ZW50X3BhcnQuYWRkZWQiLAoJCWl0ZW1faWQ6IG91dHB1dEl0
ZW1JZCwKCQlvdXRwdXRfaW5kZXg6IDAsCgkJY29udGVudF9pbmRleDogMCwKCQlwYXJ0OiB7CgkJ
CXR5cGU6ICJvdXRwdXRfdGV4dCIsCgkJCXRleHQ6ICIiCgkJfQoJfSk7Cgl1bnN1YnNjcmliZSA9
IG9uQWdlbnRFdmVudCgoZXZ0KSA9PiB7CgkJaWYgKGV2dC5ydW5JZCAhPT0gcmVzcG9uc2VJZCkg
cmV0dXJuOwoJCWlmIChjbG9zZWQpIHJldHVybjsKCQlpZiAoZXZ0LnN0cmVhbSA9PT0gImFzc2lz
dGFudCIpIHsKCQkJY29uc3QgY29udGVudCA9IHJlc29sdmVBc3Npc3RhbnRTdHJlYW1EZWx0YVRl
eHQoZXZ0KTsKCQkJaWYgKCFjb250ZW50KSByZXR1cm47CgkJCXNhd0Fzc2lzdGFudERlbHRhID0g
dHJ1ZTsKCQkJYWNjdW11bGF0ZWRUZXh0ICs9IGNvbnRlbnQ7CgkJCXdyaXRlU3NlRXZlbnQocmVz
LCB7CgkJCQl0eXBlOiAicmVzcG9uc2Uub3V0cHV0X3RleHQuZGVsdGEiLAoJCQkJaXRlbV9pZDog
b3V0cHV0SXRlbUlkLAoJCQkJb3V0cHV0X2luZGV4OiAwLAoJCQkJY29udGVudF9pbmRleDogMCwK
CQkJCWRlbHRhOiBjb250ZW50CgkJCX0pOwoJCQlyZXR1cm47CgkJfQoJCWlmIChldnQuc3RyZWFt
ID09PSAibGlmZWN5Y2xlIikgewoJCQljb25zdCBwaGFzZSA9IGV2dC5kYXRhPy5waGFzZTsKCQkJ
aWYgKHBoYXNlID09PSAiZW5kIiB8fCBwaGFzZSA9PT0gImVycm9yIikgcmVxdWVzdEZpbmFsaXpl
KHBoYXNlID09PSAiZXJyb3IiID8gImZhaWxlZCIgOiAiY29tcGxldGVkIiwgYWNjdW11bGF0ZWRU
ZXh0IHx8ICJObyByZXNwb25zZSBmcm9tIE9wZW5DbGF3LiIpOwoJCX0KCX0pOwoJcmVxLm9uKCJj
bG9zZSIsICgpID0+IHsKCQljbG9zZWQgPSB0cnVlOwoJCXVuc3Vic2NyaWJlKCk7Cgl9KTsKCShh
c3luYyAoKSA9PiB7CgkJdHJ5IHsKCQkJY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuUmVzcG9uc2Vz
QWdlbnRDb21tYW5kKHsKCQkJCW1lc3NhZ2U6IHByb21wdC5tZXNzYWdlLAoJCQkJaW1hZ2VzLAoJ
CQkJY2xpZW50VG9vbHM6IHJlc29sdmVkQ2xpZW50VG9vbHMsCgkJCQlleHRyYVN5c3RlbVByb21w
dCwKCQkJCXN0cmVhbVBhcmFtcywKCQkJCXNlc3Npb25LZXksCgkJCQlydW5JZDogcmVzcG9uc2VJ
ZCwKCQkJCW1lc3NhZ2VDaGFubmVsLAoJCQkJZGVwcwoJCQl9KTsKCQkJZmluYWxVc2FnZSA9IGV4
dHJhY3RVc2FnZUZyb21SZXN1bHQocmVzdWx0KTsKCQkJbWF5YmVGaW5hbGl6ZSgpOwoJCQlpZiAo
Y2xvc2VkKSByZXR1cm47CgkJCWlmICghc2F3QXNzaXN0YW50RGVsdGEpIHsKCQkJCWNvbnN0IHJl
c3VsdEFueSA9IHJlc3VsdDsKCQkJCWNvbnN0IHBheWxvYWRzID0gcmVzdWx0QW55LnBheWxvYWRz
OwoJCQkJY29uc3QgbWV0YSA9IHJlc3VsdEFueS5tZXRhOwoJCQkJY29uc3QgeyBzdG9wUmVhc29u
LCBwZW5kaW5nVG9vbENhbGxzIH0gPSByZXNvbHZlU3RvcFJlYXNvbkFuZFBlbmRpbmdUb29sQ2Fs
bHMobWV0YSk7CgkJCQlpZiAoc3RvcFJlYXNvbiA9PT0gInRvb2xfY2FsbHMiICYmIHBlbmRpbmdU
b29sQ2FsbHMgJiYgcGVuZGluZ1Rvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJY29uc3QgZnVu
Y3Rpb25DYWxsID0gcGVuZGluZ1Rvb2xDYWxsc1swXTsKCQkJCQljb25zdCB1c2FnZSA9IGZpbmFs
VXNhZ2UgPz8gY3JlYXRlRW1wdHlVc2FnZSgpOwoJCQkJCXdyaXRlU3NlRXZlbnQocmVzLCB7CgkJ
CQkJCXR5cGU6ICJyZXNwb25zZS5vdXRwdXRfdGV4dC5kb25lIiwKCQkJCQkJaXRlbV9pZDogb3V0
cHV0SXRlbUlkLAoJCQkJCQlvdXRwdXRfaW5kZXg6IDAsCgkJCQkJCWNvbnRlbnRfaW5kZXg6IDAs
CgkJCQkJCXRleHQ6ICIiCgkJCQkJfSk7CgkJCQkJd3JpdGVTc2VFdmVudChyZXMsIHsKCQkJCQkJ
dHlwZTogInJlc3BvbnNlLmNvbnRlbnRfcGFydC5kb25lIiwKCQkJCQkJaXRlbV9pZDogb3V0cHV0
SXRlbUlkLAoJCQkJCQlvdXRwdXRfaW5kZXg6IDAsCgkJCQkJCWNvbnRlbnRfaW5kZXg6IDAsCgkJ
CQkJCXBhcnQ6IHsKCQkJCQkJCXR5cGU6ICJvdXRwdXRfdGV4dCIsCgkJCQkJCQl0ZXh0OiAiIgoJ
CQkJCQl9CgkJCQkJfSk7CgkJCQkJY29uc3QgY29tcGxldGVkSXRlbSA9IGNyZWF0ZUFzc2lzdGFu
dE91dHB1dEl0ZW0oewoJCQkJCQlpZDogb3V0cHV0SXRlbUlkLAoJCQkJCQl0ZXh0OiAiIiwKCQkJ
CQkJc3RhdHVzOiAiY29tcGxldGVkIgoJCQkJCX0pOwoJCQkJCXdyaXRlU3NlRXZlbnQocmVzLCB7
CgkJCQkJCXR5cGU6ICJyZXNwb25zZS5vdXRwdXRfaXRlbS5kb25lIiwKCQkJCQkJb3V0cHV0X2lu
ZGV4OiAwLAoJCQkJCQlpdGVtOiBjb21wbGV0ZWRJdGVtCgkJCQkJfSk7CgkJCQkJY29uc3QgZnVu
Y3Rpb25DYWxsSXRlbSA9IHsKCQkJCQkJdHlwZTogImZ1bmN0aW9uX2NhbGwiLAoJCQkJCQlpZDog
YGNhbGxfJHtyYW5kb21VVUlEKCl9YCwKCQkJCQkJY2FsbF9pZDogZnVuY3Rpb25DYWxsLmlkLAoJ
CQkJCQluYW1lOiBmdW5jdGlvbkNhbGwubmFtZSwKCQkJCQkJYXJndW1lbnRzOiBmdW5jdGlvbkNh
bGwuYXJndW1lbnRzCgkJCQkJfTsKCQkJCQl3cml0ZVNzZUV2ZW50KHJlcywgewoJCQkJCQl0eXBl
OiAicmVzcG9uc2Uub3V0cHV0X2l0ZW0uYWRkZWQiLAoJCQkJCQlvdXRwdXRfaW5kZXg6IDEsCgkJ
CQkJCWl0ZW06IGZ1bmN0aW9uQ2FsbEl0ZW0KCQkJCQl9KTsKCQkJCQl3cml0ZVNzZUV2ZW50KHJl
cywgewoJCQkJCQl0eXBlOiAicmVzcG9uc2Uub3V0cHV0X2l0ZW0uZG9uZSIsCgkJCQkJCW91dHB1
dF9pbmRleDogMSwKCQkJCQkJaXRlbTogewoJCQkJCQkJLi4uZnVuY3Rpb25DYWxsSXRlbSwKCQkJ
CQkJCXN0YXR1czogImNvbXBsZXRlZCIKCQkJCQkJfQoJCQkJCX0pOwoJCQkJCWNvbnN0IGluY29t
cGxldGVSZXNwb25zZSA9IGNyZWF0ZVJlc3BvbnNlUmVzb3VyY2UoewoJCQkJCQlpZDogcmVzcG9u
c2VJZCwKCQkJCQkJbW9kZWwsCgkJCQkJCXN0YXR1czogImluY29tcGxldGUiLAoJCQkJCQlvdXRw
dXQ6IFtjb21wbGV0ZWRJdGVtLCBmdW5jdGlvbkNhbGxJdGVtXSwKCQkJCQkJdXNhZ2UKCQkJCQl9
KTsKCQkJCQljbG9zZWQgPSB0cnVlOwoJCQkJCXVuc3Vic2NyaWJlKCk7CgkJCQkJd3JpdGVTc2VF
dmVudChyZXMsIHsKCQkJCQkJdHlwZTogInJlc3BvbnNlLmNvbXBsZXRlZCIsCgkJCQkJCXJlc3Bv
bnNlOiBpbmNvbXBsZXRlUmVzcG9uc2UKCQkJCQl9KTsKCQkJCQl3cml0ZURvbmUocmVzKTsKCQkJ
CQlyZXMuZW5kKCk7CgkJCQkJcmV0dXJuOwoJCQkJfQoJCQkJY29uc3QgY29udGVudCA9IEFycmF5
LmlzQXJyYXkocGF5bG9hZHMpICYmIHBheWxvYWRzLmxlbmd0aCA+IDAgPyBwYXlsb2Fkcy5tYXAo
KHApID0+IHR5cGVvZiBwLnRleHQgPT09ICJzdHJpbmciID8gcC50ZXh0IDogIiIpLmZpbHRlcihC
b29sZWFuKS5qb2luKCJcblxuIikgOiAiTm8gcmVzcG9uc2UgZnJvbSBPcGVuQ2xhdy4iOwoJCQkJ
YWNjdW11bGF0ZWRUZXh0ID0gY29udGVudDsKCQkJCXNhd0Fzc2lzdGFudERlbHRhID0gdHJ1ZTsK
CQkJCXdyaXRlU3NlRXZlbnQocmVzLCB7CgkJCQkJdHlwZTogInJlc3BvbnNlLm91dHB1dF90ZXh0
LmRlbHRhIiwKCQkJCQlpdGVtX2lkOiBvdXRwdXRJdGVtSWQsCgkJCQkJb3V0cHV0X2luZGV4OiAw
LAoJCQkJCWNvbnRlbnRfaW5kZXg6IDAsCgkJCQkJZGVsdGE6IGNvbnRlbnQKCQkJCX0pOwoJCQl9
CgkJfSBjYXRjaCAoZXJyKSB7CgkJCWxvZ1dhcm4oYG9wZW5yZXNwb25zZXM6IHN0cmVhbWluZyBy
ZXNwb25zZSBmYWlsZWQ6ICR7U3RyaW5nKGVycil9YCk7CgkJCWlmIChjbG9zZWQpIHJldHVybjsK
CQkJZmluYWxVc2FnZSA9IGZpbmFsVXNhZ2UgPz8gY3JlYXRlRW1wdHlVc2FnZSgpOwoJCQl3cml0
ZVNzZUV2ZW50KHJlcywgewoJCQkJdHlwZTogInJlc3BvbnNlLmZhaWxlZCIsCgkJCQlyZXNwb25z
ZTogY3JlYXRlUmVzcG9uc2VSZXNvdXJjZSh7CgkJCQkJaWQ6IHJlc3BvbnNlSWQsCgkJCQkJbW9k
ZWwsCgkJCQkJc3RhdHVzOiAiZmFpbGVkIiwKCQkJCQlvdXRwdXQ6IFtdLAoJCQkJCWVycm9yOiB7
CgkJCQkJCWNvZGU6ICJhcGlfZXJyb3IiLAoJCQkJCQltZXNzYWdlOiAiaW50ZXJuYWwgZXJyb3Ii
CgkJCQkJfSwKCQkJCQl1c2FnZTogZmluYWxVc2FnZQoJCQkJfSkKCQkJfSk7CgkJCWVtaXRBZ2Vu
dEV2ZW50KHsKCQkJCXJ1bklkOiByZXNwb25zZUlkLAoJCQkJc3RyZWFtOiAibGlmZWN5Y2xlIiwK
CQkJCWRhdGE6IHsgcGhhc2U6ICJlcnJvciIgfQoJCQl9KTsKCQl9IGZpbmFsbHkgewoJCQlpZiAo
IWNsb3NlZCkgZW1pdEFnZW50RXZlbnQoewoJCQkJcnVuSWQ6IHJlc3BvbnNlSWQsCgkJCQlzdHJl
YW06ICJsaWZlY3ljbGUiLAoJCQkJZGF0YTogeyBwaGFzZTogImVuZCIgfQoJCQl9KTsKCQl9Cgl9
KSgpOwoJcmV0dXJuIHRydWU7Cn0KLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvZ2F0ZXdheS9z
ZXJ2ZXIvaHR0cC1hdXRoLnRzCmZ1bmN0aW9uIGlzQ2FudmFzUGF0aChwYXRobmFtZSkgewoJcmV0
dXJuIHBhdGhuYW1lID09PSAiL19fb3BlbmNsYXdfXy9hMnVpIiB8fCBwYXRobmFtZS5zdGFydHNX
aXRoKGAvX19vcGVuY2xhd19fL2EydWkvYCkgfHwgcGF0aG5hbWUgPT09ICIvX19vcGVuY2xhd19f
L2NhbnZhcyIgfHwgcGF0aG5hbWUuc3RhcnRzV2l0aChgL19fb3BlbmNsYXdfXy9jYW52YXMvYCkg
fHwgcGF0aG5hbWUgPT09ICIvX19vcGVuY2xhd19fL3dzIjsKfQpmdW5jdGlvbiBpc05vZGVXc0Ns
aWVudChjbGllbnQpIHsKCWlmIChjbGllbnQuY29ubmVjdC5yb2xlID09PSAibm9kZSIpIHJldHVy
biB0cnVlOwoJcmV0dXJuIG5vcm1hbGl6ZUdhdGV3YXlDbGllbnRNb2RlKGNsaWVudC5jb25uZWN0
LmNsaWVudC5tb2RlKSA9PT0gR0FURVdBWV9DTElFTlRfTU9ERVMuTk9ERTsKfQpmdW5jdGlvbiBo
YXNBdXRob3JpemVkTm9kZVdzQ2xpZW50Rm9yQ2FudmFzQ2FwYWJpbGl0eShjbGllbnRzLCBjYXBh
YmlsaXR5KSB7Cgljb25zdCBub3dNcyA9IERhdGUubm93KCk7Cglmb3IgKGNvbnN0IGNsaWVudCBv
ZiBjbGllbnRzKSB7CgkJaWYgKCFpc05vZGVXc0NsaWVudChjbGllbnQpKSBjb250aW51ZTsKCQlp
ZiAoIWNsaWVudC5jYW52YXNDYXBhYmlsaXR5IHx8ICFjbGllbnQuY2FudmFzQ2FwYWJpbGl0eUV4
cGlyZXNBdE1zKSBjb250aW51ZTsKCQlpZiAoY2xpZW50LmNhbnZhc0NhcGFiaWxpdHlFeHBpcmVz
QXRNcyA8PSBub3dNcykgY29udGludWU7CgkJaWYgKHNhZmVFcXVhbFNlY3JldChjbGllbnQuY2Fu
dmFzQ2FwYWJpbGl0eSwgY2FwYWJpbGl0eSkpIHsKCQkJY2xpZW50LmNhbnZhc0NhcGFiaWxpdHlF
eHBpcmVzQXRNcyA9IG5vd01zICsgQ0FOVkFTX0NBUEFCSUxJVFlfVFRMX01TOwoJCQlyZXR1cm4g
dHJ1ZTsKCQl9Cgl9CglyZXR1cm4gZmFsc2U7Cn0KYXN5bmMgZnVuY3Rpb24gYXV0aG9yaXplQ2Fu
dmFzUmVxdWVzdChwYXJhbXMpIHsKCWNvbnN0IHsgcmVxLCBhdXRoLCB0cnVzdGVkUHJveGllcywg
YWxsb3dSZWFsSXBGYWxsYmFjaywgY2xpZW50cywgY2FudmFzQ2FwYWJpbGl0eSwgbWFsZm9ybWVk
U2NvcGVkUGF0aCwgcmF0ZUxpbWl0ZXIgfSA9IHBhcmFtczsKCWlmIChtYWxmb3JtZWRTY29wZWRQ
YXRoKSByZXR1cm4gewoJCW9rOiBmYWxzZSwKCQlyZWFzb246ICJ1bmF1dGhvcml6ZWQiCgl9OwoJ
aWYgKGlzTG9jYWxEaXJlY3RSZXF1ZXN0KHJlcSwgdHJ1c3RlZFByb3hpZXMsIGFsbG93UmVhbElw
RmFsbGJhY2spKSByZXR1cm4geyBvazogdHJ1ZSB9OwoJbGV0IGxhc3RBdXRoRmFpbHVyZSA9IG51
bGw7Cgljb25zdCB0b2tlbiA9IGdldEJlYXJlclRva2VuKHJlcSk7CglpZiAodG9rZW4pIHsKCQlj
b25zdCBhdXRoUmVzdWx0ID0gYXdhaXQgYXV0aG9yaXplSHR0cEdhdGV3YXlDb25uZWN0KHsKCQkJ
YXV0aDogewoJCQkJLi4uYXV0aCwKCQkJCWFsbG93VGFpbHNjYWxlOiBmYWxzZQoJCQl9LAoJCQlj
b25uZWN0QXV0aDogewoJCQkJdG9rZW4sCgkJCQlwYXNzd29yZDogdG9rZW4KCQkJfSwKCQkJcmVx
LAoJCQl0cnVzdGVkUHJveGllcywKCQkJYWxsb3dSZWFsSXBGYWxsYmFjaywKCQkJcmF0ZUxpbWl0
ZXIKCQl9KTsKCQlpZiAoYXV0aFJlc3VsdC5vaykgcmV0dXJuIGF1dGhSZXN1bHQ7CgkJbGFzdEF1
dGhGYWlsdXJlID0gYXV0aFJlc3VsdDsKCX0KCWlmIChjYW52YXNDYXBhYmlsaXR5ICYmIGhhc0F1
dGhvcml6ZWROb2RlV3NDbGllbnRGb3JDYW52YXNDYXBhYmlsaXR5KGNsaWVudHMsIGNhbnZhc0Nh
cGFiaWxpdHkpKSByZXR1cm4geyBvazogdHJ1ZSB9OwoJcmV0dXJuIGxhc3RBdXRoRmFpbHVyZSA/
PyB7CgkJb2s6IGZhbHNlLAoJCXJlYXNvbjogInVuYXV0aG9yaXplZCIKCX07Cn0KYXN5bmMgZnVu
Y3Rpb24gZW5mb3JjZVBsdWdpblJvdXRlR2F0ZXdheUF1dGgocGFyYW1zKSB7CglyZXR1cm4gYXdh
aXQgYXV0aG9yaXplR2F0ZXdheUJlYXJlclJlcXVlc3RPclJlcGx5KHBhcmFtcyk7Cn0KLy8jZW5k
cmVnaW9uCi8vI3JlZ2lvbiBzcmMvZ2F0ZXdheS9zZXJ2ZXIvcGx1Z2lucy1odHRwL3BhdGgtY29u
dGV4dC50cwpmdW5jdGlvbiBub3JtYWxpemVQcm90ZWN0ZWRQcmVmaXgocHJlZml4KSB7Cgljb25z
dCBjb2xsYXBzZWQgPSBwcmVmaXgudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cL3syLH0vZywgIi8i
KTsKCWlmIChjb2xsYXBzZWQubGVuZ3RoIDw9IDEpIHJldHVybiBjb2xsYXBzZWQgfHwgIi8iOwoJ
cmV0dXJuIGNvbGxhcHNlZC5yZXBsYWNlKC9cLyskLywgIiIpOwp9CmZ1bmN0aW9uIHByZWZpeE1h
dGNoUGF0aChwYXRobmFtZSwgcHJlZml4KSB7CglyZXR1cm4gcGF0aG5hbWUgPT09IHByZWZpeCB8
fCBwYXRobmFtZS5zdGFydHNXaXRoKGAke3ByZWZpeH0vYCkgfHwgcGF0aG5hbWUuc3RhcnRzV2l0
aChgJHtwcmVmaXh9JWApOwp9CmNvbnN0IE5PUk1BTElaRURfUFJPVEVDVEVEX1BMVUdJTl9ST1VU
RV9QUkVGSVhFUyA9IFBST1RFQ1RFRF9QTFVHSU5fUk9VVEVfUFJFRklYRVMubWFwKG5vcm1hbGl6
ZVByb3RlY3RlZFByZWZpeCk7CmZ1bmN0aW9uIGlzUHJvdGVjdGVkUGx1Z2luUm91dGVQYXRoRnJv
bUNvbnRleHQoY29udGV4dCkgewoJaWYgKGNvbnRleHQuY2FuZGlkYXRlcy5zb21lKChjYW5kaWRh
dGUpID0+IE5PUk1BTElaRURfUFJPVEVDVEVEX1BMVUdJTl9ST1VURV9QUkVGSVhFUy5zb21lKChw
cmVmaXgpID0+IHByZWZpeE1hdGNoUGF0aChjYW5kaWRhdGUsIHByZWZpeCkpKSkgcmV0dXJuIHRy
dWU7CglpZiAoIWNvbnRleHQubWFsZm9ybWVkRW5jb2RpbmcpIHJldHVybiBmYWxzZTsKCXJldHVy
biBOT1JNQUxJWkVEX1BST1RFQ1RFRF9QTFVHSU5fUk9VVEVfUFJFRklYRVMuc29tZSgocHJlZml4
KSA9PiBwcmVmaXhNYXRjaFBhdGgoY29udGV4dC5yYXdOb3JtYWxpemVkUGF0aCwgcHJlZml4KSk7
Cn0KZnVuY3Rpb24gcmVzb2x2ZVBsdWdpblJvdXRlUGF0aENvbnRleHQocGF0aG5hbWUpIHsKCWNv
bnN0IGNhbm9uaWNhbCA9IGNhbm9uaWNhbGl6ZVBhdGhGb3JTZWN1cml0eShwYXRobmFtZSk7Cgly
ZXR1cm4gewoJCXBhdGhuYW1lLAoJCWNhbm9uaWNhbFBhdGg6IGNhbm9uaWNhbC5jYW5vbmljYWxQ
YXRoLAoJCWNhbmRpZGF0ZXM6IGNhbm9uaWNhbC5jYW5kaWRhdGVzLAoJCW1hbGZvcm1lZEVuY29k
aW5nOiBjYW5vbmljYWwubWFsZm9ybWVkRW5jb2RpbmcsCgkJZGVjb2RlUGFzc0xpbWl0UmVhY2hl
ZDogY2Fub25pY2FsLmRlY29kZVBhc3NMaW1pdFJlYWNoZWQsCgkJcmF3Tm9ybWFsaXplZFBhdGg6
IGNhbm9uaWNhbC5yYXdOb3JtYWxpemVkUGF0aAoJfTsKfQovLyNlbmRyZWdpb24KLy8jcmVnaW9u
IHNyYy9nYXRld2F5L3NlcnZlci9wbHVnaW5zLWh0dHAvcm91dGUtbWF0Y2gudHMKZnVuY3Rpb24g
ZG9lc1BsdWdpblJvdXRlTWF0Y2hQYXRoKHJvdXRlLCBjb250ZXh0KSB7Cgljb25zdCByb3V0ZUNh
bm9uaWNhbFBhdGggPSBjYW5vbmljYWxpemVQYXRoVmFyaWFudChyb3V0ZS5wYXRoKTsKCWlmIChy
b3V0ZS5tYXRjaCA9PT0gInByZWZpeCIpIHJldHVybiBjb250ZXh0LmNhbmRpZGF0ZXMuc29tZSgo
Y2FuZGlkYXRlKSA9PiBwcmVmaXhNYXRjaFBhdGgoY2FuZGlkYXRlLCByb3V0ZUNhbm9uaWNhbFBh
dGgpKTsKCXJldHVybiBjb250ZXh0LmNhbmRpZGF0ZXMuc29tZSgoY2FuZGlkYXRlKSA9PiBjYW5k
aWRhdGUgPT09IHJvdXRlQ2Fub25pY2FsUGF0aCk7Cn0KZnVuY3Rpb24gZmluZE1hdGNoaW5nUGx1
Z2luSHR0cFJvdXRlcyhyZWdpc3RyeSwgY29udGV4dCkgewoJY29uc3Qgcm91dGVzID0gcmVnaXN0
cnkuaHR0cFJvdXRlcyA/PyBbXTsKCWlmIChyb3V0ZXMubGVuZ3RoID09PSAwKSByZXR1cm4gW107
Cgljb25zdCBleGFjdE1hdGNoZXMgPSBbXTsKCWNvbnN0IHByZWZpeE1hdGNoZXMgPSBbXTsKCWZv
ciAoY29uc3Qgcm91dGUgb2Ygcm91dGVzKSB7CgkJaWYgKCFkb2VzUGx1Z2luUm91dGVNYXRjaFBh
dGgocm91dGUsIGNvbnRleHQpKSBjb250aW51ZTsKCQlpZiAocm91dGUubWF0Y2ggPT09ICJwcmVm
aXgiKSBwcmVmaXhNYXRjaGVzLnB1c2gocm91dGUpOwoJCWVsc2UgZXhhY3RNYXRjaGVzLnB1c2go
cm91dGUpOwoJfQoJZXhhY3RNYXRjaGVzLnNvcnQoKGEsIGIpID0+IGIucGF0aC5sZW5ndGggLSBh
LnBhdGgubGVuZ3RoKTsKCXByZWZpeE1hdGNoZXMuc29ydCgoYSwgYikgPT4gYi5wYXRoLmxlbmd0
aCAtIGEucGF0aC5sZW5ndGgpOwoJcmV0dXJuIFsuLi5leGFjdE1hdGNoZXMsIC4uLnByZWZpeE1h
dGNoZXNdOwp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dhdGV3YXkvc2VydmVyL3BsdWdp
bnMtaHR0cC9yb3V0ZS1hdXRoLnRzCmZ1bmN0aW9uIG1hdGNoZWRQbHVnaW5Sb3V0ZXNSZXF1aXJl
R2F0ZXdheUF1dGgocm91dGVzKSB7CglyZXR1cm4gcm91dGVzLnNvbWUoKHJvdXRlKSA9PiByb3V0
ZS5hdXRoID09PSAiZ2F0ZXdheSIpOwp9CmZ1bmN0aW9uIHNob3VsZEVuZm9yY2VHYXRld2F5QXV0
aEZvclBsdWdpblBhdGgocmVnaXN0cnksIHBhdGhuYW1lT3JDb250ZXh0KSB7Cgljb25zdCBwYXRo
Q29udGV4dCA9IHR5cGVvZiBwYXRobmFtZU9yQ29udGV4dCA9PT0gInN0cmluZyIgPyByZXNvbHZl
UGx1Z2luUm91dGVQYXRoQ29udGV4dChwYXRobmFtZU9yQ29udGV4dCkgOiBwYXRobmFtZU9yQ29u
dGV4dDsKCWlmIChwYXRoQ29udGV4dC5tYWxmb3JtZWRFbmNvZGluZyB8fCBwYXRoQ29udGV4dC5k
ZWNvZGVQYXNzTGltaXRSZWFjaGVkKSByZXR1cm4gdHJ1ZTsKCWlmIChpc1Byb3RlY3RlZFBsdWdp
blJvdXRlUGF0aEZyb21Db250ZXh0KHBhdGhDb250ZXh0KSkgcmV0dXJuIHRydWU7CglyZXR1cm4g
bWF0Y2hlZFBsdWdpblJvdXRlc1JlcXVpcmVHYXRld2F5QXV0aChmaW5kTWF0Y2hpbmdQbHVnaW5I
dHRwUm91dGVzKHJlZ2lzdHJ5LCBwYXRoQ29udGV4dCkpOwp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdp
b24gc3JjL2dhdGV3YXkvc2VydmVyL3BsdWdpbnMtaHR0cC50cwpmdW5jdGlvbiBjcmVhdGVQbHVn
aW5Sb3V0ZVJ1bnRpbWVDbGllbnQocGFyYW1zKSB7Cgljb25zdCBzY29wZXMgPSBwYXJhbXMucmVx
dWlyZXNHYXRld2F5QXV0aCAmJiBwYXJhbXMuZ2F0ZXdheUF1dGhTYXRpc2ZpZWQgIT09IGZhbHNl
ID8gWwoJCUFETUlOX1NDT1BFJDMsCgkJQVBQUk9WQUxTX1NDT1BFJDEsCgkJUEFJUklOR19TQ09Q
RSQxCgldIDogW1dSSVRFX1NDT1BFXTsKCXJldHVybiB7IGNvbm5lY3Q6IHsKCQltaW5Qcm90b2Nv
bDogMywKCQltYXhQcm90b2NvbDogMywKCQljbGllbnQ6IHsKCQkJaWQ6IEdBVEVXQVlfQ0xJRU5U
X0lEUy5HQVRFV0FZX0NMSUVOVCwKCQkJdmVyc2lvbjogImludGVybmFsIiwKCQkJcGxhdGZvcm06
ICJub2RlIiwKCQkJbW9kZTogR0FURVdBWV9DTElFTlRfTU9ERVMuQkFDS0VORAoJCX0sCgkJcm9s
ZTogIm9wZXJhdG9yIiwKCQlzY29wZXMKCX0gfTsKfQpmdW5jdGlvbiBjcmVhdGVHYXRld2F5UGx1
Z2luUmVxdWVzdEhhbmRsZXIocGFyYW1zKSB7Cgljb25zdCB7IHJlZ2lzdHJ5LCBsb2cgfSA9IHBh
cmFtczsKCXJldHVybiBhc3luYyAocmVxLCByZXMsIHByb3ZpZGVkUGF0aENvbnRleHQsIGRpc3Bh
dGNoQ29udGV4dCkgPT4gewoJCWlmICgocmVnaXN0cnkuaHR0cFJvdXRlcyA/PyBbXSkubGVuZ3Ro
ID09PSAwKSByZXR1cm4gZmFsc2U7CgkJY29uc3QgcGF0aENvbnRleHQgPSBwcm92aWRlZFBhdGhD
b250ZXh0ID8/IHJlc29sdmVQbHVnaW5Sb3V0ZVBhdGhDb250ZXh0KG5ldyBVUkwocmVxLnVybCA/
PyAiLyIsICJodHRwOi8vbG9jYWxob3N0IikucGF0aG5hbWUpOwoJCWNvbnN0IG1hdGNoZWRSb3V0
ZXMgPSBmaW5kTWF0Y2hpbmdQbHVnaW5IdHRwUm91dGVzKHJlZ2lzdHJ5LCBwYXRoQ29udGV4dCk7
CgkJaWYgKG1hdGNoZWRSb3V0ZXMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7CgkJY29uc3Qg
cmVxdWlyZXNHYXRld2F5QXV0aCA9IG1hdGNoZWRQbHVnaW5Sb3V0ZXNSZXF1aXJlR2F0ZXdheUF1
dGgobWF0Y2hlZFJvdXRlcyk7CgkJaWYgKHJlcXVpcmVzR2F0ZXdheUF1dGggJiYgZGlzcGF0Y2hD
b250ZXh0Py5nYXRld2F5QXV0aFNhdGlzZmllZCA9PT0gZmFsc2UpIHsKCQkJbG9nLndhcm4oYHBs
dWdpbiBodHRwIHJvdXRlIGJsb2NrZWQgd2l0aG91dCBnYXRld2F5IGF1dGggKCR7cGF0aENvbnRl
eHQuY2Fub25pY2FsUGF0aH0pYCk7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJcmV0dXJuIGF3YWl0
IHdpdGhQbHVnaW5SdW50aW1lR2F0ZXdheVJlcXVlc3RTY29wZSh7CgkJCWNsaWVudDogY3JlYXRl
UGx1Z2luUm91dGVSdW50aW1lQ2xpZW50KHsKCQkJCXJlcXVpcmVzR2F0ZXdheUF1dGgsCgkJCQln
YXRld2F5QXV0aFNhdGlzZmllZDogZGlzcGF0Y2hDb250ZXh0Py5nYXRld2F5QXV0aFNhdGlzZmll
ZAoJCQl9KSwKCQkJaXNXZWJjaGF0Q29ubmVjdDogKCkgPT4gZmFsc2UKCQl9LCBhc3luYyAoKSA9
PiB7CgkJCWZvciAoY29uc3Qgcm91dGUgb2YgbWF0Y2hlZFJvdXRlcykgdHJ5IHsKCQkJCWlmIChh
d2FpdCByb3V0ZS5oYW5kbGVyKHJlcSwgcmVzKSAhPT0gZmFsc2UpIHJldHVybiB0cnVlOwoJCQl9
IGNhdGNoIChlcnIpIHsKCQkJCWxvZy53YXJuKGBwbHVnaW4gaHR0cCByb3V0ZSBmYWlsZWQgKCR7
cm91dGUucGx1Z2luSWQgPz8gInVua25vd24ifSk6ICR7U3RyaW5nKGVycil9YCk7CgkJCQlpZiAo
IXJlcy5oZWFkZXJzU2VudCkgewoJCQkJCXJlcy5zdGF0dXNDb2RlID0gNTAwOwoJCQkJCXJlcy5z
ZXRIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iik7CgkJ
CQkJcmVzLmVuZCgiSW50ZXJuYWwgU2VydmVyIEVycm9yIik7CgkJCQl9CgkJCQlyZXR1cm4gdHJ1
ZTsKCQkJfQoJCQlyZXR1cm4gZmFsc2U7CgkJfSk7Cgl9Owp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdp
b24gc3JjL2dhdGV3YXkvdG9vbHMtaW52b2tlLWh0dHAudHMKY29uc3QgREVGQVVMVF9CT0RZX0JZ
VEVTID0gMiAqIDEwMjQgKiAxMDI0Owpjb25zdCBNRU1PUllfVE9PTF9OQU1FUyA9IG5ldyBTZXQo
WyJtZW1vcnlfc2VhcmNoIiwgIm1lbW9yeV9nZXQiXSk7CmZ1bmN0aW9uIHJlc29sdmVTZXNzaW9u
S2V5RnJvbUJvZHkoYm9keSkgewoJaWYgKHR5cGVvZiBib2R5LnNlc3Npb25LZXkgPT09ICJzdHJp
bmciICYmIGJvZHkuc2Vzc2lvbktleS50cmltKCkpIHJldHVybiBib2R5LnNlc3Npb25LZXkudHJp
bSgpOwp9CmZ1bmN0aW9uIHJlc29sdmVNZW1vcnlUb29sRGlzYWJsZVJlYXNvbnMoY2ZnKSB7Cglp
ZiAoIXByb2Nlc3MuZW52LlZJVEVTVCkgcmV0dXJuIFtdOwoJY29uc3QgcmVhc29ucyA9IFtdOwoJ
Y29uc3QgcGx1Z2lucyA9IGNmZy5wbHVnaW5zOwoJY29uc3Qgc2xvdFJhdyA9IHBsdWdpbnM/LnNs
b3RzPy5tZW1vcnk7Cgljb25zdCBzbG90RGlzYWJsZWQgPSBzbG90UmF3ID09PSBudWxsIHx8IHR5
cGVvZiBzbG90UmF3ID09PSAic3RyaW5nIiAmJiBzbG90UmF3LnRyaW0oKS50b0xvd2VyQ2FzZSgp
ID09PSAibm9uZSI7Cgljb25zdCBwbHVnaW5zRGlzYWJsZWQgPSBwbHVnaW5zPy5lbmFibGVkID09
PSBmYWxzZTsKCWNvbnN0IGRlZmF1bHREaXNhYmxlZCA9IGlzVGVzdERlZmF1bHRNZW1vcnlTbG90
RGlzYWJsZWQoY2ZnKTsKCWlmIChwbHVnaW5zRGlzYWJsZWQpIHJlYXNvbnMucHVzaCgicGx1Z2lu
cy5lbmFibGVkPWZhbHNlIik7CglpZiAoc2xvdERpc2FibGVkKSByZWFzb25zLnB1c2goc2xvdFJh
dyA9PT0gbnVsbCA/ICJwbHVnaW5zLnNsb3RzLm1lbW9yeT1udWxsIiA6ICJwbHVnaW5zLnNsb3Rz
Lm1lbW9yeT1cIm5vbmVcIiIpOwoJaWYgKCFwbHVnaW5zRGlzYWJsZWQgJiYgIXNsb3REaXNhYmxl
ZCAmJiBkZWZhdWx0RGlzYWJsZWQpIHJlYXNvbnMucHVzaCgibWVtb3J5IHBsdWdpbiBkaXNhYmxl
ZCBieSB0ZXN0IGRlZmF1bHQiKTsKCXJldHVybiByZWFzb25zOwp9CmZ1bmN0aW9uIG1lcmdlQWN0
aW9uSW50b0FyZ3NJZlN1cHBvcnRlZChwYXJhbXMpIHsKCWNvbnN0IHsgdG9vbFNjaGVtYSwgYWN0
aW9uLCBhcmdzIH0gPSBwYXJhbXM7CglpZiAoIWFjdGlvbikgcmV0dXJuIGFyZ3M7CglpZiAoYXJn
cy5hY3Rpb24gIT09IHZvaWQgMCkgcmV0dXJuIGFyZ3M7Cgljb25zdCBzY2hlbWFPYmogPSB0b29s
U2NoZW1hOwoJaWYgKCFCb29sZWFuKHNjaGVtYU9iaiAmJiB0eXBlb2Ygc2NoZW1hT2JqID09PSAi
b2JqZWN0IiAmJiBzY2hlbWFPYmoucHJvcGVydGllcyAmJiAiYWN0aW9uIiBpbiBzY2hlbWFPYmou
cHJvcGVydGllcykpIHJldHVybiBhcmdzOwoJcmV0dXJuIHsKCQkuLi5hcmdzLAoJCWFjdGlvbgoJ
fTsKfQpmdW5jdGlvbiBnZXRFcnJvck1lc3NhZ2UoZXJyKSB7CglpZiAoZXJyIGluc3RhbmNlb2Yg
RXJyb3IpIHJldHVybiBlcnIubWVzc2FnZSB8fCBTdHJpbmcoZXJyKTsKCWlmICh0eXBlb2YgZXJy
ID09PSAic3RyaW5nIikgcmV0dXJuIGVycjsKCXJldHVybiBTdHJpbmcoZXJyKTsKfQpmdW5jdGlv
biByZXNvbHZlVG9vbElucHV0RXJyb3JTdGF0dXMoZXJyKSB7CglpZiAoZXJyIGluc3RhbmNlb2Yg
VG9vbElucHV0RXJyb3IpIHsKCQljb25zdCBzdGF0dXMgPSBlcnIuc3RhdHVzOwoJCXJldHVybiB0
eXBlb2Ygc3RhdHVzID09PSAibnVtYmVyIiA/IHN0YXR1cyA6IDQwMDsKCX0KCWlmICh0eXBlb2Yg
ZXJyICE9PSAib2JqZWN0IiB8fCBlcnIgPT09IG51bGwgfHwgISgibmFtZSIgaW4gZXJyKSkgcmV0
dXJuIG51bGw7Cgljb25zdCBuYW1lID0gZXJyLm5hbWU7CglpZiAobmFtZSAhPT0gIlRvb2xJbnB1
dEVycm9yIiAmJiBuYW1lICE9PSAiVG9vbEF1dGhvcml6YXRpb25FcnJvciIpIHJldHVybiBudWxs
OwoJY29uc3Qgc3RhdHVzID0gZXJyLnN0YXR1czsKCWlmICh0eXBlb2Ygc3RhdHVzID09PSAibnVt
YmVyIikgcmV0dXJuIHN0YXR1czsKCXJldHVybiBuYW1lID09PSAiVG9vbEF1dGhvcml6YXRpb25F
cnJvciIgPyA0MDMgOiA0MDA7Cn0KYXN5bmMgZnVuY3Rpb24gaGFuZGxlVG9vbHNJbnZva2VIdHRw
UmVxdWVzdChyZXEsIHJlcywgb3B0cykgewoJaWYgKG5ldyBVUkwocmVxLnVybCA/PyAiLyIsIGBo
dHRwOi8vJHtyZXEuaGVhZGVycy5ob3N0ID8/ICJsb2NhbGhvc3QifWApLnBhdGhuYW1lICE9PSAi
L3Rvb2xzL2ludm9rZSIpIHJldHVybiBmYWxzZTsKCWlmIChyZXEubWV0aG9kICE9PSAiUE9TVCIp
IHsKCQlzZW5kTWV0aG9kTm90QWxsb3dlZChyZXMsICJQT1NUIik7CgkJcmV0dXJuIHRydWU7Cgl9
Cgljb25zdCBjZmcgPSBsb2FkQ29uZmlnKCk7Cgljb25zdCB0b2tlbiA9IGdldEJlYXJlclRva2Vu
KHJlcSk7Cgljb25zdCBhdXRoUmVzdWx0ID0gYXdhaXQgYXV0aG9yaXplSHR0cEdhdGV3YXlDb25u
ZWN0KHsKCQlhdXRoOiBvcHRzLmF1dGgsCgkJY29ubmVjdEF1dGg6IHRva2VuID8gewoJCQl0b2tl
biwKCQkJcGFzc3dvcmQ6IHRva2VuCgkJfSA6IG51bGwsCgkJcmVxLAoJCXRydXN0ZWRQcm94aWVz
OiBvcHRzLnRydXN0ZWRQcm94aWVzID8/IGNmZy5nYXRld2F5Py50cnVzdGVkUHJveGllcywKCQlh
bGxvd1JlYWxJcEZhbGxiYWNrOiBvcHRzLmFsbG93UmVhbElwRmFsbGJhY2sgPz8gY2ZnLmdhdGV3
YXk/LmFsbG93UmVhbElwRmFsbGJhY2ssCgkJcmF0ZUxpbWl0ZXI6IG9wdHMucmF0ZUxpbWl0ZXIK
CX0pOwoJaWYgKCFhdXRoUmVzdWx0Lm9rKSB7CgkJc2VuZEdhdGV3YXlBdXRoRmFpbHVyZShyZXMs
IGF1dGhSZXN1bHQpOwoJCXJldHVybiB0cnVlOwoJfQoJY29uc3QgYm9keVVua25vd24gPSBhd2Fp
dCByZWFkSnNvbkJvZHlPckVycm9yKHJlcSwgcmVzLCBvcHRzLm1heEJvZHlCeXRlcyA/PyBERUZB
VUxUX0JPRFlfQllURVMpOwoJaWYgKGJvZHlVbmtub3duID09PSB2b2lkIDApIHJldHVybiB0cnVl
OwoJY29uc3QgYm9keSA9IGJvZHlVbmtub3duID8/IHt9OwoJY29uc3QgdG9vbE5hbWUgPSB0eXBl
b2YgYm9keS50b29sID09PSAic3RyaW5nIiA/IGJvZHkudG9vbC50cmltKCkgOiAiIjsKCWlmICgh
dG9vbE5hbWUpIHsKCQlzZW5kSW52YWxpZFJlcXVlc3QocmVzLCAidG9vbHMuaW52b2tlIHJlcXVp
cmVzIGJvZHkudG9vbCIpOwoJCXJldHVybiB0cnVlOwoJfQoJaWYgKHByb2Nlc3MuZW52LlZJVEVT
VCAmJiBNRU1PUllfVE9PTF9OQU1FUy5oYXModG9vbE5hbWUpKSB7CgkJY29uc3QgcmVhc29ucyA9
IHJlc29sdmVNZW1vcnlUb29sRGlzYWJsZVJlYXNvbnMoY2ZnKTsKCQlpZiAocmVhc29ucy5sZW5n
dGggPiAwKSB7CgkJCXNlbmRKc29uJDEocmVzLCA0MDAsIHsKCQkJCW9rOiBmYWxzZSwKCQkJCWVy
cm9yOiB7CgkJCQkJdHlwZTogImludmFsaWRfcmVxdWVzdCIsCgkJCQkJbWVzc2FnZTogYG1lbW9y
eSB0b29scyBhcmUgZGlzYWJsZWQgaW4gdGVzdHMke3JlYXNvbnMubGVuZ3RoID4gMCA/IGAgKCR7
cmVhc29ucy5qb2luKCIsICIpfSlgIDogIiJ9LiBFbmFibGUgYnkgc2V0dGluZyBwbHVnaW5zLnNs
b3RzLm1lbW9yeT0ibWVtb3J5LWNvcmUiIChhbmQgZW5zdXJlIHBsdWdpbnMuZW5hYmxlZCBpcyBu
b3QgZmFsc2UpLmAKCQkJCX0KCQkJfSk7CgkJCXJldHVybiB0cnVlOwoJCX0KCX0KCWNvbnN0IGFj
dGlvbiA9IHR5cGVvZiBib2R5LmFjdGlvbiA9PT0gInN0cmluZyIgPyBib2R5LmFjdGlvbi50cmlt
KCkgOiB2b2lkIDA7Cgljb25zdCBhcmdzUmF3ID0gYm9keS5hcmdzOwoJY29uc3QgYXJncyA9IGFy
Z3NSYXcgJiYgdHlwZW9mIGFyZ3NSYXcgPT09ICJvYmplY3QiICYmICFBcnJheS5pc0FycmF5KGFy
Z3NSYXcpID8gYXJnc1JhdyA6IHt9OwoJY29uc3QgcmF3U2Vzc2lvbktleSA9IHJlc29sdmVTZXNz
aW9uS2V5RnJvbUJvZHkoYm9keSk7Cgljb25zdCBzZXNzaW9uS2V5ID0gIXJhd1Nlc3Npb25LZXkg
fHwgcmF3U2Vzc2lvbktleSA9PT0gIm1haW4iID8gcmVzb2x2ZU1haW5TZXNzaW9uS2V5KGNmZykg
OiByYXdTZXNzaW9uS2V5OwoJY29uc3QgbWVzc2FnZUNoYW5uZWwgPSBub3JtYWxpemVNZXNzYWdl
Q2hhbm5lbChnZXRIZWFkZXIocmVxLCAieC1vcGVuY2xhdy1tZXNzYWdlLWNoYW5uZWwiKSA/PyAi
Iik7Cgljb25zdCBhY2NvdW50SWQgPSBnZXRIZWFkZXIocmVxLCAieC1vcGVuY2xhdy1hY2NvdW50
LWlkIik/LnRyaW0oKSB8fCB2b2lkIDA7Cgljb25zdCBhZ2VudFRvID0gZ2V0SGVhZGVyKHJlcSwg
Ingtb3BlbmNsYXctbWVzc2FnZS10byIpPy50cmltKCkgfHwgdm9pZCAwOwoJY29uc3QgYWdlbnRU
aHJlYWRJZCA9IGdldEhlYWRlcihyZXEsICJ4LW9wZW5jbGF3LXRocmVhZC1pZCIpPy50cmltKCkg
fHwgdm9pZCAwOwoJY29uc3QgeyBhZ2VudElkLCBnbG9iYWxQb2xpY3ksIGdsb2JhbFByb3ZpZGVy
UG9saWN5LCBhZ2VudFBvbGljeSwgYWdlbnRQcm92aWRlclBvbGljeSwgcHJvZmlsZSwgcHJvdmlk
ZXJQcm9maWxlLCBwcm9maWxlQWxzb0FsbG93LCBwcm92aWRlclByb2ZpbGVBbHNvQWxsb3cgfSA9
IHJlc29sdmVFZmZlY3RpdmVUb29sUG9saWN5KHsKCQljb25maWc6IGNmZywKCQlzZXNzaW9uS2V5
Cgl9KTsKCWNvbnN0IHByb2ZpbGVQb2xpY3kgPSByZXNvbHZlVG9vbFByb2ZpbGVQb2xpY3kocHJv
ZmlsZSk7Cgljb25zdCBwcm92aWRlclByb2ZpbGVQb2xpY3kgPSByZXNvbHZlVG9vbFByb2ZpbGVQ
b2xpY3kocHJvdmlkZXJQcm9maWxlKTsKCWNvbnN0IHByb2ZpbGVQb2xpY3lXaXRoQWxzb0FsbG93
ID0gbWVyZ2VBbHNvQWxsb3dQb2xpY3kocHJvZmlsZVBvbGljeSwgcHJvZmlsZUFsc29BbGxvdyk7
Cgljb25zdCBwcm92aWRlclByb2ZpbGVQb2xpY3lXaXRoQWxzb0FsbG93ID0gbWVyZ2VBbHNvQWxs
b3dQb2xpY3kocHJvdmlkZXJQcm9maWxlUG9saWN5LCBwcm92aWRlclByb2ZpbGVBbHNvQWxsb3cp
OwoJY29uc3QgZ3JvdXBQb2xpY3kgPSByZXNvbHZlR3JvdXBUb29sUG9saWN5KHsKCQljb25maWc6
IGNmZywKCQlzZXNzaW9uS2V5LAoJCW1lc3NhZ2VQcm92aWRlcjogbWVzc2FnZUNoYW5uZWwgPz8g
dm9pZCAwLAoJCWFjY291bnRJZDogYWNjb3VudElkID8/IG51bGwKCX0pOwoJY29uc3Qgc3ViYWdl
bnRQb2xpY3kgPSBpc1N1YmFnZW50U2Vzc2lvbktleShzZXNzaW9uS2V5KSA/IHJlc29sdmVTdWJh
Z2VudFRvb2xQb2xpY3koY2ZnKSA6IHZvaWQgMDsKCWNvbnN0IHN1YmFnZW50RmlsdGVyZWQgPSBh
cHBseVRvb2xQb2xpY3lQaXBlbGluZSh7CgkJdG9vbHM6IGNyZWF0ZU9wZW5DbGF3VG9vbHMoewoJ
CQlhZ2VudFNlc3Npb25LZXk6IHNlc3Npb25LZXksCgkJCWFnZW50Q2hhbm5lbDogbWVzc2FnZUNo
YW5uZWwgPz8gdm9pZCAwLAoJCQlhZ2VudEFjY291bnRJZDogYWNjb3VudElkLAoJCQlhZ2VudFRv
LAoJCQlhZ2VudFRocmVhZElkLAoJCQlhbGxvd01lZGlhSW52b2tlQ29tbWFuZHM6IHRydWUsCgkJ
CWNvbmZpZzogY2ZnLAoJCQlwbHVnaW5Ub29sQWxsb3dsaXN0OiBjb2xsZWN0RXhwbGljaXRBbGxv
d2xpc3QoWwoJCQkJcHJvZmlsZVBvbGljeSwKCQkJCXByb3ZpZGVyUHJvZmlsZVBvbGljeSwKCQkJ
CWdsb2JhbFBvbGljeSwKCQkJCWdsb2JhbFByb3ZpZGVyUG9saWN5LAoJCQkJYWdlbnRQb2xpY3ks
CgkJCQlhZ2VudFByb3ZpZGVyUG9saWN5LAoJCQkJZ3JvdXBQb2xpY3ksCgkJCQlzdWJhZ2VudFBv
bGljeQoJCQldKQoJCX0pLAoJCXRvb2xNZXRhOiAodG9vbCkgPT4gZ2V0UGx1Z2luVG9vbE1ldGEo
dG9vbCksCgkJd2FybjogbG9nV2FybiwKCQlzdGVwczogWy4uLmJ1aWxkRGVmYXVsdFRvb2xQb2xp
Y3lQaXBlbGluZVN0ZXBzKHsKCQkJcHJvZmlsZVBvbGljeTogcHJvZmlsZVBvbGljeVdpdGhBbHNv
QWxsb3csCgkJCXByb2ZpbGUsCgkJCXByb3ZpZGVyUHJvZmlsZVBvbGljeTogcHJvdmlkZXJQcm9m
aWxlUG9saWN5V2l0aEFsc29BbGxvdywKCQkJcHJvdmlkZXJQcm9maWxlLAoJCQlnbG9iYWxQb2xp
Y3ksCgkJCWdsb2JhbFByb3ZpZGVyUG9saWN5LAoJCQlhZ2VudFBvbGljeSwKCQkJYWdlbnRQcm92
aWRlclBvbGljeSwKCQkJZ3JvdXBQb2xpY3ksCgkJCWFnZW50SWQKCQl9KSwgewoJCQlwb2xpY3k6
IHN1YmFnZW50UG9saWN5LAoJCQlsYWJlbDogInN1YmFnZW50IHRvb2xzLmFsbG93IgoJCX1dCgl9
KTsKCWNvbnN0IGdhdGV3YXlUb29sc0NmZyA9IGNmZy5nYXRld2F5Py50b29sczsKCWNvbnN0IGdh
dGV3YXlEZW55TmFtZXMgPSBERUZBVUxUX0dBVEVXQVlfSFRUUF9UT09MX0RFTlkuZmlsdGVyKChu
YW1lKSA9PiAhZ2F0ZXdheVRvb2xzQ2ZnPy5hbGxvdz8uaW5jbHVkZXMobmFtZSkpLmNvbmNhdChB
cnJheS5pc0FycmF5KGdhdGV3YXlUb29sc0NmZz8uZGVueSkgPyBnYXRld2F5VG9vbHNDZmcuZGVu
eSA6IFtdKTsKCWNvbnN0IGdhdGV3YXlEZW55U2V0ID0gbmV3IFNldChnYXRld2F5RGVueU5hbWVz
KTsKCWNvbnN0IHRvb2wgPSBzdWJhZ2VudEZpbHRlcmVkLmZpbHRlcigodCkgPT4gIWdhdGV3YXlE
ZW55U2V0Lmhhcyh0Lm5hbWUpKS5maW5kKCh0KSA9PiB0Lm5hbWUgPT09IHRvb2xOYW1lKTsKCWlm
ICghdG9vbCkgewoJCXNlbmRKc29uJDEocmVzLCA0MDQsIHsKCQkJb2s6IGZhbHNlLAoJCQllcnJv
cjogewoJCQkJdHlwZTogIm5vdF9mb3VuZCIsCgkJCQltZXNzYWdlOiBgVG9vbCBub3QgYXZhaWxh
YmxlOiAke3Rvb2xOYW1lfWAKCQkJfQoJCX0pOwoJCXJldHVybiB0cnVlOwoJfQoJdHJ5IHsKCQlj
b25zdCB0b29sQ2FsbElkID0gYGh0dHAtJHtEYXRlLm5vdygpfWA7CgkJY29uc3QgaG9va1Jlc3Vs
dCA9IGF3YWl0IHJ1bkJlZm9yZVRvb2xDYWxsSG9vayh7CgkJCXRvb2xOYW1lLAoJCQlwYXJhbXM6
IG1lcmdlQWN0aW9uSW50b0FyZ3NJZlN1cHBvcnRlZCh7CgkJCQl0b29sU2NoZW1hOiB0b29sLnBh
cmFtZXRlcnMsCgkJCQlhY3Rpb24sCgkJCQlhcmdzCgkJCX0pLAoJCQl0b29sQ2FsbElkLAoJCQlj
dHg6IHsKCQkJCWFnZW50SWQsCgkJCQlzZXNzaW9uS2V5LAoJCQkJbG9vcERldGVjdGlvbjogcmVz
b2x2ZVRvb2xMb29wRGV0ZWN0aW9uQ29uZmlnKHsKCQkJCQljZmcsCgkJCQkJYWdlbnRJZAoJCQkJ
fSkKCQkJfQoJCX0pOwoJCWlmIChob29rUmVzdWx0LmJsb2NrZWQpIHsKCQkJc2VuZEpzb24kMShy
ZXMsIDQwMywgewoJCQkJb2s6IGZhbHNlLAoJCQkJZXJyb3I6IHsKCQkJCQl0eXBlOiAidG9vbF9j
YWxsX2Jsb2NrZWQiLAoJCQkJCW1lc3NhZ2U6IGhvb2tSZXN1bHQucmVhc29uCgkJCQl9CgkJCX0p
OwoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgkJc2VuZEpzb24kMShyZXMsIDIwMCwgewoJCQlvazogdHJ1
ZSwKCQkJcmVzdWx0OiBhd2FpdCB0b29sLmV4ZWN1dGU/Lih0b29sQ2FsbElkLCBob29rUmVzdWx0
LnBhcmFtcykKCQl9KTsKCX0gY2F0Y2ggKGVycikgewoJCWNvbnN0IGlucHV0U3RhdHVzID0gcmVz
b2x2ZVRvb2xJbnB1dEVycm9yU3RhdHVzKGVycik7CgkJaWYgKGlucHV0U3RhdHVzICE9PSBudWxs
KSB7CgkJCXNlbmRKc29uJDEocmVzLCBpbnB1dFN0YXR1cywgewoJCQkJb2s6IGZhbHNlLAoJCQkJ
ZXJyb3I6IHsKCQkJCQl0eXBlOiAidG9vbF9lcnJvciIsCgkJCQkJbWVzc2FnZTogZ2V0RXJyb3JN
ZXNzYWdlKGVycikgfHwgImludmFsaWQgdG9vbCBhcmd1bWVudHMiCgkJCQl9CgkJCX0pOwoJCQly
ZXR1cm4gdHJ1ZTsKCQl9CgkJbG9nV2FybihgdG9vbHMtaW52b2tlOiB0b29sIGV4ZWN1dGlvbiBm
YWlsZWQ6ICR7U3RyaW5nKGVycil9YCk7CgkJc2VuZEpzb24kMShyZXMsIDUwMCwgewoJCQlvazog
ZmFsc2UsCgkJCWVycm9yOiB7CgkJCQl0eXBlOiAidG9vbF9lcnJvciIsCgkJCQltZXNzYWdlOiAi
dG9vbCBleGVjdXRpb24gZmFpbGVkIgoJCQl9CgkJfSk7Cgl9CglyZXR1cm4gdHJ1ZTsKfQovLyNl
bmRyZWdpb24KLy8jcmVnaW9uIHNyYy9nYXRld2F5L3NlcnZlci1odHRwLnRzCmNvbnN0IEhPT0tf
QVVUSF9GQUlMVVJFX0xJTUlUID0gMjA7CmNvbnN0IEhPT0tfQVVUSF9GQUlMVVJFX1dJTkRPV19N
UyA9IDZlNDsKZnVuY3Rpb24gc2VuZEpzb24ocmVzLCBzdGF0dXMsIGJvZHkpIHsKCXJlcy5zdGF0
dXNDb2RlID0gc3RhdHVzOwoJcmVzLnNldEhlYWRlcigiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0
aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgiKTsKCXJlcy5lbmQoSlNPTi5zdHJpbmdpZnkoYm9keSkp
Owp9CmNvbnN0IEdBVEVXQVlfUFJPQkVfU1RBVFVTX0JZX1BBVEggPSBuZXcgTWFwKFsKCVsiL2hl
YWx0aCIsICJsaXZlIl0sCglbIi9oZWFsdGh6IiwgImxpdmUiXSwKCVsiL3JlYWR5IiwgInJlYWR5
Il0sCglbIi9yZWFkeXoiLCAicmVhZHkiXQpdKTsKY29uc3QgTUFUVEVSTU9TVF9TTEFTSF9DQUxM
QkFDS19QQVRIID0gIi9hcGkvY2hhbm5lbHMvbWF0dGVybW9zdC9jb21tYW5kIjsKZnVuY3Rpb24g
cmVzb2x2ZU1hdHRlcm1vc3RTbGFzaENhbGxiYWNrUGF0aHMoY29uZmlnU25hcHNob3QpIHsKCWNv
bnN0IGNhbGxiYWNrUGF0aHMgPSBuZXcgU2V0KFtNQVRURVJNT1NUX1NMQVNIX0NBTExCQUNLX1BB
VEhdKTsKCWNvbnN0IGlzTWF0dGVybW9zdENvbW1hbmRDYWxsYmFja1BhdGggPSAocGF0aCkgPT4g
cGF0aCA9PT0gTUFUVEVSTU9TVF9TTEFTSF9DQUxMQkFDS19QQVRIIHx8IHBhdGguc3RhcnRzV2l0
aCgiL2FwaS9jaGFubmVscy9tYXR0ZXJtb3N0LyIpOwoJY29uc3Qgbm9ybWFsaXplQ2FsbGJhY2tQ
YXRoID0gKHZhbHVlKSA9PiB7CgkJY29uc3QgdHJpbW1lZCA9IHR5cGVvZiB2YWx1ZSA9PT0gInN0
cmluZyIgPyB2YWx1ZS50cmltKCkgOiAiIjsKCQlpZiAoIXRyaW1tZWQpIHJldHVybiBNQVRURVJN
T1NUX1NMQVNIX0NBTExCQUNLX1BBVEg7CgkJcmV0dXJuIHRyaW1tZWQuc3RhcnRzV2l0aCgiLyIp
ID8gdHJpbW1lZCA6IGAvJHt0cmltbWVkfWA7Cgl9OwoJY29uc3QgdHJ5QWRkQ2FsbGJhY2tVcmxQ
YXRoID0gKHJhd1VybCkgPT4gewoJCWlmICh0eXBlb2YgcmF3VXJsICE9PSAic3RyaW5nIikgcmV0
dXJuOwoJCWNvbnN0IHRyaW1tZWQgPSByYXdVcmwudHJpbSgpOwoJCWlmICghdHJpbW1lZCkgcmV0
dXJuOwoJCXRyeSB7CgkJCWNvbnN0IHBhdGhuYW1lID0gbmV3IFVSTCh0cmltbWVkKS5wYXRobmFt
ZTsKCQkJaWYgKHBhdGhuYW1lICYmIGlzTWF0dGVybW9zdENvbW1hbmRDYWxsYmFja1BhdGgocGF0
aG5hbWUpKSBjYWxsYmFja1BhdGhzLmFkZChwYXRobmFtZSk7CgkJfSBjYXRjaCB7fQoJfTsKCWNv
bnN0IG1tUmF3ID0gY29uZmlnU25hcHNob3QuY2hhbm5lbHM/Lm1hdHRlcm1vc3Q7Cgljb25zdCBh
ZGRNbUNvbW1hbmRzID0gKHJhdykgPT4gewoJCWlmIChyYXcgPT0gbnVsbCB8fCB0eXBlb2YgcmF3
ICE9PSAib2JqZWN0IikgcmV0dXJuOwoJCWNvbnN0IGNvbW1hbmRzID0gcmF3OwoJCWNvbnN0IGNh
bGxiYWNrUGF0aCA9IG5vcm1hbGl6ZUNhbGxiYWNrUGF0aChjb21tYW5kcy5jYWxsYmFja1BhdGgp
OwoJCWlmIChpc01hdHRlcm1vc3RDb21tYW5kQ2FsbGJhY2tQYXRoKGNhbGxiYWNrUGF0aCkpIGNh
bGxiYWNrUGF0aHMuYWRkKGNhbGxiYWNrUGF0aCk7CgkJdHJ5QWRkQ2FsbGJhY2tVcmxQYXRoKGNv
bW1hbmRzLmNhbGxiYWNrVXJsKTsKCX07CglhZGRNbUNvbW1hbmRzKG1tUmF3Py5jb21tYW5kcyk7
Cgljb25zdCBhY2NvdW50c1JhdyA9IG1tUmF3Py5hY2NvdW50cyA/PyB7fTsKCWZvciAoY29uc3Qg
YWNjb3VudElkIG9mIE9iamVjdC5rZXlzKGFjY291bnRzUmF3KSkgewoJCWNvbnN0IGFjY291bnRD
ZmcgPSBhY2NvdW50c1Jhd1thY2NvdW50SWRdOwoJCWFkZE1tQ29tbWFuZHMoYWNjb3VudENmZz8u
Y29tbWFuZHMpOwoJfQoJcmV0dXJuIGNhbGxiYWNrUGF0aHM7Cn0KZnVuY3Rpb24gc2hvdWxkRW5m
b3JjZURlZmF1bHRQbHVnaW5HYXRld2F5QXV0aChwYXRoQ29udGV4dCkgewoJcmV0dXJuIHBhdGhD
b250ZXh0Lm1hbGZvcm1lZEVuY29kaW5nIHx8IHBhdGhDb250ZXh0LmRlY29kZVBhc3NMaW1pdFJl
YWNoZWQgfHwgaXNQcm90ZWN0ZWRQbHVnaW5Sb3V0ZVBhdGhGcm9tQ29udGV4dChwYXRoQ29udGV4
dCk7Cn0KYXN5bmMgZnVuY3Rpb24gY2FuUmV2ZWFsUmVhZGluZXNzRGV0YWlscyhwYXJhbXMpIHsK
CWlmIChpc0xvY2FsRGlyZWN0UmVxdWVzdChwYXJhbXMucmVxLCBwYXJhbXMudHJ1c3RlZFByb3hp
ZXMsIHBhcmFtcy5hbGxvd1JlYWxJcEZhbGxiYWNrKSkgcmV0dXJuIHRydWU7CglpZiAocGFyYW1z
LnJlc29sdmVkQXV0aC5tb2RlID09PSAibm9uZSIpIHJldHVybiBmYWxzZTsKCWNvbnN0IGJlYXJl
clRva2VuID0gZ2V0QmVhcmVyVG9rZW4ocGFyYW1zLnJlcSk7CglyZXR1cm4gKGF3YWl0IGF1dGhv
cml6ZUh0dHBHYXRld2F5Q29ubmVjdCh7CgkJYXV0aDogcGFyYW1zLnJlc29sdmVkQXV0aCwKCQlj
b25uZWN0QXV0aDogYmVhcmVyVG9rZW4gPyB7CgkJCXRva2VuOiBiZWFyZXJUb2tlbiwKCQkJcGFz
c3dvcmQ6IGJlYXJlclRva2VuCgkJfSA6IG51bGwsCgkJcmVxOiBwYXJhbXMucmVxLAoJCXRydXN0
ZWRQcm94aWVzOiBwYXJhbXMudHJ1c3RlZFByb3hpZXMsCgkJYWxsb3dSZWFsSXBGYWxsYmFjazog
cGFyYW1zLmFsbG93UmVhbElwRmFsbGJhY2sKCX0pKS5vazsKfQphc3luYyBmdW5jdGlvbiBoYW5k
bGVHYXRld2F5UHJvYmVSZXF1ZXN0KHJlcSwgcmVzLCByZXF1ZXN0UGF0aCwgcmVzb2x2ZWRBdXRo
LCB0cnVzdGVkUHJveGllcywgYWxsb3dSZWFsSXBGYWxsYmFjaywgZ2V0UmVhZGluZXNzKSB7Cglj
b25zdCBzdGF0dXMgPSBHQVRFV0FZX1BST0JFX1NUQVRVU19CWV9QQVRILmdldChyZXF1ZXN0UGF0
aCk7CglpZiAoIXN0YXR1cykgcmV0dXJuIGZhbHNlOwoJY29uc3QgbWV0aG9kID0gKHJlcS5tZXRo
b2QgPz8gIkdFVCIpLnRvVXBwZXJDYXNlKCk7CglpZiAobWV0aG9kICE9PSAiR0VUIiAmJiBtZXRo
b2QgIT09ICJIRUFEIikgewoJCXJlcy5zdGF0dXNDb2RlID0gNDA1OwoJCXJlcy5zZXRIZWFkZXIo
IkFsbG93IiwgIkdFVCwgSEVBRCIpOwoJCXJlcy5zZXRIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJ0
ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iik7CgkJcmVzLmVuZCgiTWV0aG9kIE5vdCBBbGxvd2Vk
Iik7CgkJcmV0dXJuIHRydWU7Cgl9CglyZXMuc2V0SGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBw
bGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCIpOwoJcmVzLnNldEhlYWRlcigiQ2FjaGUtQ29u
dHJvbCIsICJuby1zdG9yZSIpOwoJbGV0IHN0YXR1c0NvZGU7CglsZXQgYm9keTsKCWlmIChzdGF0
dXMgPT09ICJyZWFkeSIgJiYgZ2V0UmVhZGluZXNzKSB7CgkJY29uc3QgaW5jbHVkZURldGFpbHMg
PSBhd2FpdCBjYW5SZXZlYWxSZWFkaW5lc3NEZXRhaWxzKHsKCQkJcmVxLAoJCQlyZXNvbHZlZEF1
dGgsCgkJCXRydXN0ZWRQcm94aWVzLAoJCQlhbGxvd1JlYWxJcEZhbGxiYWNrCgkJfSk7CgkJdHJ5
IHsKCQkJY29uc3QgcmVzdWx0ID0gZ2V0UmVhZGluZXNzKCk7CgkJCXN0YXR1c0NvZGUgPSByZXN1
bHQucmVhZHkgPyAyMDAgOiA1MDM7CgkJCWJvZHkgPSBKU09OLnN0cmluZ2lmeShpbmNsdWRlRGV0
YWlscyA/IHJlc3VsdCA6IHsgcmVhZHk6IHJlc3VsdC5yZWFkeSB9KTsKCQl9IGNhdGNoIHsKCQkJ
c3RhdHVzQ29kZSA9IDUwMzsKCQkJYm9keSA9IEpTT04uc3RyaW5naWZ5KGluY2x1ZGVEZXRhaWxz
ID8gewoJCQkJcmVhZHk6IGZhbHNlLAoJCQkJZmFpbGluZzogWyJpbnRlcm5hbCJdLAoJCQkJdXB0
aW1lTXM6IDAKCQkJfSA6IHsgcmVhZHk6IGZhbHNlIH0pOwoJCX0KCX0gZWxzZSB7CgkJc3RhdHVz
Q29kZSA9IDIwMDsKCQlib2R5ID0gSlNPTi5zdHJpbmdpZnkoewoJCQlvazogdHJ1ZSwKCQkJc3Rh
dHVzCgkJfSk7Cgl9CglyZXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGU7CglyZXMuZW5kKG1ldGhv
ZCA9PT0gIkhFQUQiID8gdm9pZCAwIDogYm9keSk7CglyZXR1cm4gdHJ1ZTsKfQpmdW5jdGlvbiB3
cml0ZVVwZ3JhZGVBdXRoRmFpbHVyZShzb2NrZXQsIGF1dGgpIHsKCWlmIChhdXRoLnJhdGVMaW1p
dGVkKSB7CgkJY29uc3QgcmV0cnlBZnRlclNlY29uZHMgPSBhdXRoLnJldHJ5QWZ0ZXJNcyAmJiBh
dXRoLnJldHJ5QWZ0ZXJNcyA+IDAgPyBNYXRoLmNlaWwoYXV0aC5yZXRyeUFmdGVyTXMgLyAxZTMp
IDogdm9pZCAwOwoJCXNvY2tldC53cml0ZShbCgkJCSJIVFRQLzEuMSA0MjkgVG9vIE1hbnkgUmVx
dWVzdHMiLAoJCQlyZXRyeUFmdGVyU2Vjb25kcyA/IGBSZXRyeS1BZnRlcjogJHtyZXRyeUFmdGVy
U2Vjb25kc31gIDogdm9pZCAwLAoJCQkiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uOyBj
aGFyc2V0PXV0Zi04IiwKCQkJIkNvbm5lY3Rpb246IGNsb3NlIiwKCQkJIiIsCgkJCUpTT04uc3Ry
aW5naWZ5KHsgZXJyb3I6IHsKCQkJCW1lc3NhZ2U6ICJUb28gbWFueSBmYWlsZWQgYXV0aGVudGlj
YXRpb24gYXR0ZW1wdHMuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuIiwKCQkJCXR5cGU6ICJyYXRl
X2xpbWl0ZWQiCgkJCX0gfSkKCQldLmZpbHRlcihCb29sZWFuKS5qb2luKCJcclxuIikpOwoJCXJl
dHVybjsKCX0KCXNvY2tldC53cml0ZSgiSFRUUC8xLjEgNDAxIFVuYXV0aG9yaXplZFxyXG5Db25u
ZWN0aW9uOiBjbG9zZVxyXG5cclxuIik7Cn0KYXN5bmMgZnVuY3Rpb24gcnVuR2F0ZXdheUh0dHBS
ZXF1ZXN0U3RhZ2VzKHN0YWdlcykgewoJZm9yIChjb25zdCBzdGFnZSBvZiBzdGFnZXMpIGlmIChh
d2FpdCBzdGFnZS5ydW4oKSkgcmV0dXJuIHRydWU7CglyZXR1cm4gZmFsc2U7Cn0KZnVuY3Rpb24g
YnVpbGRQbHVnaW5SZXF1ZXN0U3RhZ2VzKHBhcmFtcykgewoJaWYgKCFwYXJhbXMuaGFuZGxlUGx1
Z2luUmVxdWVzdCkgcmV0dXJuIFtdOwoJbGV0IHBsdWdpbkdhdGV3YXlBdXRoU2F0aXNmaWVkID0g
ZmFsc2U7CglyZXR1cm4gW3sKCQluYW1lOiAicGx1Z2luLWF1dGgiLAoJCXJ1bjogYXN5bmMgKCkg
PT4gewoJCQlpZiAocGFyYW1zLm1hdHRlcm1vc3RTbGFzaENhbGxiYWNrUGF0aHMuaGFzKHBhcmFt
cy5yZXF1ZXN0UGF0aCkpIHJldHVybiBmYWxzZTsKCQkJY29uc3QgcGF0aENvbnRleHQgPSBwYXJh
bXMucGx1Z2luUGF0aENvbnRleHQgPz8gcmVzb2x2ZVBsdWdpblJvdXRlUGF0aENvbnRleHQocGFy
YW1zLnJlcXVlc3RQYXRoKTsKCQkJaWYgKCEocGFyYW1zLnNob3VsZEVuZm9yY2VQbHVnaW5HYXRl
d2F5QXV0aCA/PyBzaG91bGRFbmZvcmNlRGVmYXVsdFBsdWdpbkdhdGV3YXlBdXRoKShwYXRoQ29u
dGV4dCkpIHJldHVybiBmYWxzZTsKCQkJaWYgKCFhd2FpdCBlbmZvcmNlUGx1Z2luUm91dGVHYXRl
d2F5QXV0aCh7CgkJCQlyZXE6IHBhcmFtcy5yZXEsCgkJCQlyZXM6IHBhcmFtcy5yZXMsCgkJCQlh
dXRoOiBwYXJhbXMucmVzb2x2ZWRBdXRoLAoJCQkJdHJ1c3RlZFByb3hpZXM6IHBhcmFtcy50cnVz
dGVkUHJveGllcywKCQkJCWFsbG93UmVhbElwRmFsbGJhY2s6IHBhcmFtcy5hbGxvd1JlYWxJcEZh
bGxiYWNrLAoJCQkJcmF0ZUxpbWl0ZXI6IHBhcmFtcy5yYXRlTGltaXRlcgoJCQl9KSkgcmV0dXJu
IHRydWU7CgkJCXBsdWdpbkdhdGV3YXlBdXRoU2F0aXNmaWVkID0gdHJ1ZTsKCQkJcmV0dXJuIGZh
bHNlOwoJCX0KCX0sIHsKCQluYW1lOiAicGx1Z2luLWh0dHAiLAoJCXJ1bjogKCkgPT4gewoJCQlj
b25zdCBwYXRoQ29udGV4dCA9IHBhcmFtcy5wbHVnaW5QYXRoQ29udGV4dCA/PyByZXNvbHZlUGx1
Z2luUm91dGVQYXRoQ29udGV4dChwYXJhbXMucmVxdWVzdFBhdGgpOwoJCQlyZXR1cm4gcGFyYW1z
LmhhbmRsZVBsdWdpblJlcXVlc3Q/LihwYXJhbXMucmVxLCBwYXJhbXMucmVzLCBwYXRoQ29udGV4
dCwgeyBnYXRld2F5QXV0aFNhdGlzZmllZDogcGx1Z2luR2F0ZXdheUF1dGhTYXRpc2ZpZWQgfSkg
Pz8gZmFsc2U7CgkJfQoJfV07Cn0KZnVuY3Rpb24gY3JlYXRlSG9va3NSZXF1ZXN0SGFuZGxlcihv
cHRzKSB7Cgljb25zdCB7IGdldEhvb2tzQ29uZmlnLCBsb2dIb29rcywgZGlzcGF0Y2hBZ2VudEhv
b2ssIGRpc3BhdGNoV2FrZUhvb2ssIGdldENsaWVudElwQ29uZmlnIH0gPSBvcHRzOwoJY29uc3Qg
aG9va1JlcGxheUNhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKCWNvbnN0IGhvb2tB
dXRoTGltaXRlciA9IGNyZWF0ZUF1dGhSYXRlTGltaXRlcih7CgkJbWF4QXR0ZW1wdHM6IEhPT0tf
QVVUSF9GQUlMVVJFX0xJTUlULAoJCXdpbmRvd01zOiBIT09LX0FVVEhfRkFJTFVSRV9XSU5ET1df
TVMsCgkJbG9ja291dE1zOiBIT09LX0FVVEhfRkFJTFVSRV9XSU5ET1dfTVMsCgkJZXhlbXB0TG9v
cGJhY2s6IGZhbHNlLAoJCXBydW5lSW50ZXJ2YWxNczogMAoJfSk7Cgljb25zdCByZXNvbHZlSG9v
a0NsaWVudEtleSA9IChyZXEpID0+IHsKCQljb25zdCBjbGllbnRJcENvbmZpZyA9IGdldENsaWVu
dElwQ29uZmlnPy4oKTsKCQlyZXR1cm4gbm9ybWFsaXplUmF0ZUxpbWl0Q2xpZW50SXAocmVzb2x2
ZVJlcXVlc3RDbGllbnRJcChyZXEsIGNsaWVudElwQ29uZmlnPy50cnVzdGVkUHJveGllcywgY2xp
ZW50SXBDb25maWc/LmFsbG93UmVhbElwRmFsbGJhY2sgPT09IHRydWUpID8/IHJlcS5zb2NrZXQ/
LnJlbW90ZUFkZHJlc3MpOwoJfTsKCWNvbnN0IHBydW5lSG9va1JlcGxheUNhY2hlID0gKG5vdykg
PT4gewoJCWNvbnN0IGN1dG9mZiA9IG5vdyAtIERFRFVQRV9UVExfTVM7CgkJZm9yIChjb25zdCBb
a2V5LCBlbnRyeV0gb2YgaG9va1JlcGxheUNhY2hlKSBpZiAoZW50cnkudHMgPCBjdXRvZmYpIGhv
b2tSZXBsYXlDYWNoZS5kZWxldGUoa2V5KTsKCQl3aGlsZSAoaG9va1JlcGxheUNhY2hlLnNpemUg
PiBERURVUEVfTUFYKSB7CgkJCWNvbnN0IG9sZGVzdEtleSA9IGhvb2tSZXBsYXlDYWNoZS5rZXlz
KCkubmV4dCgpLnZhbHVlOwoJCQlpZiAoIW9sZGVzdEtleSkgYnJlYWs7CgkJCWhvb2tSZXBsYXlD
YWNoZS5kZWxldGUob2xkZXN0S2V5KTsKCQl9Cgl9OwoJY29uc3QgYnVpbGRIb29rUmVwbGF5Q2Fj
aGVLZXkgPSAocGFyYW1zKSA9PiB7CgkJY29uc3QgaWRlbSA9IHBhcmFtcy5pZGVtcG90ZW5jeUtl
eT8udHJpbSgpOwoJCWlmICghaWRlbSkgcmV0dXJuOwoJCWNvbnN0IHRva2VuRmluZ2VycHJpbnQg
PSBjcmVhdGVIYXNoKCJzaGEyNTYiKS51cGRhdGUocGFyYW1zLnRva2VuID8/ICIiLCAidXRmOCIp
LmRpZ2VzdCgiaGV4Iik7CgkJY29uc3QgaWRlbXBvdGVuY3lGaW5nZXJwcmludCA9IGNyZWF0ZUhh
c2goInNoYTI1NiIpLnVwZGF0ZShpZGVtLCAidXRmOCIpLmRpZ2VzdCgiaGV4Iik7CgkJcmV0dXJu
IGAke3Rva2VuRmluZ2VycHJpbnR9OiR7Y3JlYXRlSGFzaCgic2hhMjU2IikudXBkYXRlKEpTT04u
c3RyaW5naWZ5KHsKCQkJcGF0aEtleTogcGFyYW1zLnBhdGhLZXksCgkJCWRpc3BhdGNoU2NvcGU6
IHBhcmFtcy5kaXNwYXRjaFNjb3BlCgkJfSksICJ1dGY4IikuZGlnZXN0KCJoZXgiKX06JHtpZGVt
cG90ZW5jeUZpbmdlcnByaW50fWA7Cgl9OwoJY29uc3QgcmVzb2x2ZUNhY2hlZEhvb2tSdW5JZCA9
IChrZXksIG5vdykgPT4gewoJCWlmICgha2V5KSByZXR1cm47CgkJcHJ1bmVIb29rUmVwbGF5Q2Fj
aGUobm93KTsKCQljb25zdCBjYWNoZWQgPSBob29rUmVwbGF5Q2FjaGUuZ2V0KGtleSk7CgkJaWYg
KCFjYWNoZWQpIHJldHVybjsKCQlob29rUmVwbGF5Q2FjaGUuZGVsZXRlKGtleSk7CgkJaG9va1Jl
cGxheUNhY2hlLnNldChrZXksIGNhY2hlZCk7CgkJcmV0dXJuIGNhY2hlZC5ydW5JZDsKCX07Cglj
b25zdCByZW1lbWJlckhvb2tSdW5JZCA9IChrZXksIHJ1bklkLCBub3cpID0+IHsKCQlpZiAoIWtl
eSkgcmV0dXJuOwoJCWhvb2tSZXBsYXlDYWNoZS5kZWxldGUoa2V5KTsKCQlob29rUmVwbGF5Q2Fj
aGUuc2V0KGtleSwgewoJCQl0czogbm93LAoJCQlydW5JZAoJCX0pOwoJCXBydW5lSG9va1JlcGxh
eUNhY2hlKG5vdyk7Cgl9OwoJcmV0dXJuIGFzeW5jIChyZXEsIHJlcykgPT4gewoJCWNvbnN0IGhv
b2tzQ29uZmlnID0gZ2V0SG9va3NDb25maWcoKTsKCQlpZiAoIWhvb2tzQ29uZmlnKSByZXR1cm4g
ZmFsc2U7CgkJY29uc3QgdXJsID0gbmV3IFVSTChyZXEudXJsID8/ICIvIiwgImh0dHA6Ly9sb2Nh
bGhvc3QiKTsKCQljb25zdCBiYXNlUGF0aCA9IGhvb2tzQ29uZmlnLmJhc2VQYXRoOwoJCWlmICh1
cmwucGF0aG5hbWUgIT09IGJhc2VQYXRoICYmICF1cmwucGF0aG5hbWUuc3RhcnRzV2l0aChgJHti
YXNlUGF0aH0vYCkpIHJldHVybiBmYWxzZTsKCQlpZiAodXJsLnNlYXJjaFBhcmFtcy5oYXMoInRv
a2VuIikpIHsKCQkJcmVzLnN0YXR1c0NvZGUgPSA0MDA7CgkJCXJlcy5zZXRIZWFkZXIoIkNvbnRl
bnQtVHlwZSIsICJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iik7CgkJCXJlcy5lbmQoIkhvb2sg
dG9rZW4gbXVzdCBiZSBwcm92aWRlZCB2aWEgQXV0aG9yaXphdGlvbjogQmVhcmVyIDx0b2tlbj4g
b3IgWC1PcGVuQ2xhdy1Ub2tlbiBoZWFkZXIgKHF1ZXJ5IHBhcmFtZXRlcnMgYXJlIG5vdCBhbGxv
d2VkKS4iKTsKCQkJcmV0dXJuIHRydWU7CgkJfQoJCWlmIChyZXEubWV0aG9kICE9PSAiUE9TVCIp
IHsKCQkJcmVzLnN0YXR1c0NvZGUgPSA0MDU7CgkJCXJlcy5zZXRIZWFkZXIoIkFsbG93IiwgIlBP
U1QiKTsKCQkJcmVzLnNldEhlYWRlcigiQ29udGVudC1UeXBlIiwgInRleHQvcGxhaW47IGNoYXJz
ZXQ9dXRmLTgiKTsKCQkJcmVzLmVuZCgiTWV0aG9kIE5vdCBBbGxvd2VkIik7CgkJCXJldHVybiB0
cnVlOwoJCX0KCQljb25zdCB0b2tlbiA9IGV4dHJhY3RIb29rVG9rZW4ocmVxKTsKCQljb25zdCBj
bGllbnRLZXkgPSByZXNvbHZlSG9va0NsaWVudEtleShyZXEpOwoJCWlmICghc2FmZUVxdWFsU2Vj
cmV0KHRva2VuLCBob29rc0NvbmZpZy50b2tlbikpIHsKCQkJY29uc3QgdGhyb3R0bGUgPSBob29r
QXV0aExpbWl0ZXIuY2hlY2soY2xpZW50S2V5LCBBVVRIX1JBVEVfTElNSVRfU0NPUEVfSE9PS19B
VVRIKTsKCQkJaWYgKCF0aHJvdHRsZS5hbGxvd2VkKSB7CgkJCQljb25zdCByZXRyeUFmdGVyID0g
dGhyb3R0bGUucmV0cnlBZnRlck1zID4gMCA/IE1hdGguY2VpbCh0aHJvdHRsZS5yZXRyeUFmdGVy
TXMgLyAxZTMpIDogMTsKCQkJCXJlcy5zdGF0dXNDb2RlID0gNDI5OwoJCQkJcmVzLnNldEhlYWRl
cigiUmV0cnktQWZ0ZXIiLCBTdHJpbmcocmV0cnlBZnRlcikpOwoJCQkJcmVzLnNldEhlYWRlcigi
Q29udGVudC1UeXBlIiwgInRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiKTsKCQkJCXJlcy5lbmQo
IlRvbyBNYW55IFJlcXVlc3RzIik7CgkJCQlsb2dIb29rcy53YXJuKGBob29rIGF1dGggdGhyb3R0
bGVkIGZvciAke2NsaWVudEtleX07IHJldHJ5LWFmdGVyPSR7cmV0cnlBZnRlcn1zYCk7CgkJCQly
ZXR1cm4gdHJ1ZTsKCQkJfQoJCQlob29rQXV0aExpbWl0ZXIucmVjb3JkRmFpbHVyZShjbGllbnRL
ZXksIEFVVEhfUkFURV9MSU1JVF9TQ09QRV9IT09LX0FVVEgpOwoJCQlyZXMuc3RhdHVzQ29kZSA9
IDQwMTsKCQkJcmVzLnNldEhlYWRlcigiQ29udGVudC1UeXBlIiwgInRleHQvcGxhaW47IGNoYXJz
ZXQ9dXRmLTgiKTsKCQkJcmVzLmVuZCgiVW5hdXRob3JpemVkIik7CgkJCXJldHVybiB0cnVlOwoJ
CX0KCQlob29rQXV0aExpbWl0ZXIucmVzZXQoY2xpZW50S2V5LCBBVVRIX1JBVEVfTElNSVRfU0NP
UEVfSE9PS19BVVRIKTsKCQljb25zdCBzdWJQYXRoID0gdXJsLnBhdGhuYW1lLnNsaWNlKGJhc2VQ
YXRoLmxlbmd0aCkucmVwbGFjZSgvXlwvKy8sICIiKTsKCQlpZiAoIXN1YlBhdGgpIHsKCQkJcmVz
LnN0YXR1c0NvZGUgPSA0MDQ7CgkJCXJlcy5zZXRIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJ0ZXh0
L3BsYWluOyBjaGFyc2V0PXV0Zi04Iik7CgkJCXJlcy5lbmQoIk5vdCBGb3VuZCIpOwoJCQlyZXR1
cm4gdHJ1ZTsKCQl9CgkJY29uc3QgYm9keSA9IGF3YWl0IHJlYWRKc29uQm9keShyZXEsIGhvb2tz
Q29uZmlnLm1heEJvZHlCeXRlcyk7CgkJaWYgKCFib2R5Lm9rKSB7CgkJCXNlbmRKc29uKHJlcywg
Ym9keS5lcnJvciA9PT0gInBheWxvYWQgdG9vIGxhcmdlIiA/IDQxMyA6IGJvZHkuZXJyb3IgPT09
ICJyZXF1ZXN0IGJvZHkgdGltZW91dCIgPyA0MDggOiA0MDAsIHsKCQkJCW9rOiBmYWxzZSwKCQkJ
CWVycm9yOiBib2R5LmVycm9yCgkJCX0pOwoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgkJY29uc3QgcGF5
bG9hZCA9IHR5cGVvZiBib2R5LnZhbHVlID09PSAib2JqZWN0IiAmJiBib2R5LnZhbHVlICE9PSBu
dWxsID8gYm9keS52YWx1ZSA6IHt9OwoJCWNvbnN0IGhlYWRlcnMgPSBub3JtYWxpemVIb29rSGVh
ZGVycyhyZXEpOwoJCWNvbnN0IGlkZW1wb3RlbmN5S2V5ID0gcmVzb2x2ZUhvb2tJZGVtcG90ZW5j
eUtleSh7CgkJCXBheWxvYWQsCgkJCWhlYWRlcnMKCQl9KTsKCQljb25zdCBub3cgPSBEYXRlLm5v
dygpOwoJCWlmIChzdWJQYXRoID09PSAid2FrZSIpIHsKCQkJY29uc3Qgbm9ybWFsaXplZCA9IG5v
cm1hbGl6ZVdha2VQYXlsb2FkKHBheWxvYWQpOwoJCQlpZiAoIW5vcm1hbGl6ZWQub2spIHsKCQkJ
CXNlbmRKc29uKHJlcywgNDAwLCB7CgkJCQkJb2s6IGZhbHNlLAoJCQkJCWVycm9yOiBub3JtYWxp
emVkLmVycm9yCgkJCQl9KTsKCQkJCXJldHVybiB0cnVlOwoJCQl9CgkJCWRpc3BhdGNoV2FrZUhv
b2sobm9ybWFsaXplZC52YWx1ZSk7CgkJCXNlbmRKc29uKHJlcywgMjAwLCB7CgkJCQlvazogdHJ1
ZSwKCQkJCW1vZGU6IG5vcm1hbGl6ZWQudmFsdWUubW9kZQoJCQl9KTsKCQkJcmV0dXJuIHRydWU7
CgkJfQoJCWlmIChzdWJQYXRoID09PSAiYWdlbnQiKSB7CgkJCWNvbnN0IG5vcm1hbGl6ZWQgPSBu
b3JtYWxpemVBZ2VudFBheWxvYWQocGF5bG9hZCk7CgkJCWlmICghbm9ybWFsaXplZC5vaykgewoJ
CQkJc2VuZEpzb24ocmVzLCA0MDAsIHsKCQkJCQlvazogZmFsc2UsCgkJCQkJZXJyb3I6IG5vcm1h
bGl6ZWQuZXJyb3IKCQkJCX0pOwoJCQkJcmV0dXJuIHRydWU7CgkJCX0KCQkJaWYgKCFpc0hvb2tB
Z2VudEFsbG93ZWQoaG9va3NDb25maWcsIG5vcm1hbGl6ZWQudmFsdWUuYWdlbnRJZCkpIHsKCQkJ
CXNlbmRKc29uKHJlcywgNDAwLCB7CgkJCQkJb2s6IGZhbHNlLAoJCQkJCWVycm9yOiBnZXRIb29r
QWdlbnRQb2xpY3lFcnJvcigpCgkJCQl9KTsKCQkJCXJldHVybiB0cnVlOwoJCQl9CgkJCWNvbnN0
IHNlc3Npb25LZXkgPSByZXNvbHZlSG9va1Nlc3Npb25LZXkoewoJCQkJaG9va3NDb25maWcsCgkJ
CQlzb3VyY2U6ICJyZXF1ZXN0IiwKCQkJCXNlc3Npb25LZXk6IG5vcm1hbGl6ZWQudmFsdWUuc2Vz
c2lvbktleQoJCQl9KTsKCQkJaWYgKCFzZXNzaW9uS2V5Lm9rKSB7CgkJCQlzZW5kSnNvbihyZXMs
IDQwMCwgewoJCQkJCW9rOiBmYWxzZSwKCQkJCQllcnJvcjogc2Vzc2lvbktleS5lcnJvcgoJCQkJ
fSk7CgkJCQlyZXR1cm4gdHJ1ZTsKCQkJfQoJCQljb25zdCB0YXJnZXRBZ2VudElkID0gcmVzb2x2
ZUhvb2tUYXJnZXRBZ2VudElkKGhvb2tzQ29uZmlnLCBub3JtYWxpemVkLnZhbHVlLmFnZW50SWQp
OwoJCQljb25zdCByZXBsYXlLZXkgPSBidWlsZEhvb2tSZXBsYXlDYWNoZUtleSh7CgkJCQlwYXRo
S2V5OiAiYWdlbnQiLAoJCQkJdG9rZW4sCgkJCQlpZGVtcG90ZW5jeUtleSwKCQkJCWRpc3BhdGNo
U2NvcGU6IHsKCQkJCQlhZ2VudElkOiB0YXJnZXRBZ2VudElkID8/IG51bGwsCgkJCQkJc2Vzc2lv
bktleTogbm9ybWFsaXplZC52YWx1ZS5zZXNzaW9uS2V5ID8/IGhvb2tzQ29uZmlnLnNlc3Npb25Q
b2xpY3kuZGVmYXVsdFNlc3Npb25LZXkgPz8gbnVsbCwKCQkJCQltZXNzYWdlOiBub3JtYWxpemVk
LnZhbHVlLm1lc3NhZ2UsCgkJCQkJbmFtZTogbm9ybWFsaXplZC52YWx1ZS5uYW1lLAoJCQkJCXdh
a2VNb2RlOiBub3JtYWxpemVkLnZhbHVlLndha2VNb2RlLAoJCQkJCWRlbGl2ZXI6IG5vcm1hbGl6
ZWQudmFsdWUuZGVsaXZlciwKCQkJCQljaGFubmVsOiBub3JtYWxpemVkLnZhbHVlLmNoYW5uZWws
CgkJCQkJdG86IG5vcm1hbGl6ZWQudmFsdWUudG8gPz8gbnVsbCwKCQkJCQltb2RlbDogbm9ybWFs
aXplZC52YWx1ZS5tb2RlbCA/PyBudWxsLAoJCQkJCXRoaW5raW5nOiBub3JtYWxpemVkLnZhbHVl
LnRoaW5raW5nID8/IG51bGwsCgkJCQkJdGltZW91dFNlY29uZHM6IG5vcm1hbGl6ZWQudmFsdWUu
dGltZW91dFNlY29uZHMgPz8gbnVsbAoJCQkJfQoJCQl9KTsKCQkJY29uc3QgY2FjaGVkUnVuSWQg
PSByZXNvbHZlQ2FjaGVkSG9va1J1bklkKHJlcGxheUtleSwgbm93KTsKCQkJaWYgKGNhY2hlZFJ1
bklkKSB7CgkJCQlzZW5kSnNvbihyZXMsIDIwMCwgewoJCQkJCW9rOiB0cnVlLAoJCQkJCXJ1bklk
OiBjYWNoZWRSdW5JZAoJCQkJfSk7CgkJCQlyZXR1cm4gdHJ1ZTsKCQkJfQoJCQljb25zdCBub3Jt
YWxpemVkRGlzcGF0Y2hTZXNzaW9uS2V5ID0gbm9ybWFsaXplSG9va0Rpc3BhdGNoU2Vzc2lvbktl
eSh7CgkJCQlzZXNzaW9uS2V5OiBzZXNzaW9uS2V5LnZhbHVlLAoJCQkJdGFyZ2V0QWdlbnRJZAoJ
CQl9KTsKCQkJY29uc3QgcnVuSWQgPSBkaXNwYXRjaEFnZW50SG9vayh7CgkJCQkuLi5ub3JtYWxp
emVkLnZhbHVlLAoJCQkJaWRlbXBvdGVuY3lLZXksCgkJCQlzZXNzaW9uS2V5OiBub3JtYWxpemVk
RGlzcGF0Y2hTZXNzaW9uS2V5LAoJCQkJYWdlbnRJZDogdGFyZ2V0QWdlbnRJZAoJCQl9KTsKCQkJ
cmVtZW1iZXJIb29rUnVuSWQocmVwbGF5S2V5LCBydW5JZCwgbm93KTsKCQkJc2VuZEpzb24ocmVz
LCAyMDAsIHsKCQkJCW9rOiB0cnVlLAoJCQkJcnVuSWQKCQkJfSk7CgkJCXJldHVybiB0cnVlOwoJ
CX0KCQlpZiAoaG9va3NDb25maWcubWFwcGluZ3MubGVuZ3RoID4gMCkgdHJ5IHsKCQkJY29uc3Qg
bWFwcGVkID0gYXdhaXQgYXBwbHlIb29rTWFwcGluZ3MoaG9va3NDb25maWcubWFwcGluZ3MsIHsK
CQkJCXBheWxvYWQsCgkJCQloZWFkZXJzLAoJCQkJdXJsLAoJCQkJcGF0aDogc3ViUGF0aAoJCQl9
KTsKCQkJaWYgKG1hcHBlZCkgewoJCQkJaWYgKCFtYXBwZWQub2spIHsKCQkJCQlzZW5kSnNvbihy
ZXMsIDQwMCwgewoJCQkJCQlvazogZmFsc2UsCgkJCQkJCWVycm9yOiBtYXBwZWQuZXJyb3IKCQkJ
CQl9KTsKCQkJCQlyZXR1cm4gdHJ1ZTsKCQkJCX0KCQkJCWlmIChtYXBwZWQuYWN0aW9uID09PSBu
dWxsKSB7CgkJCQkJcmVzLnN0YXR1c0NvZGUgPSAyMDQ7CgkJCQkJcmVzLmVuZCgpOwoJCQkJCXJl
dHVybiB0cnVlOwoJCQkJfQoJCQkJaWYgKG1hcHBlZC5hY3Rpb24ua2luZCA9PT0gIndha2UiKSB7
CgkJCQkJZGlzcGF0Y2hXYWtlSG9vayh7CgkJCQkJCXRleHQ6IG1hcHBlZC5hY3Rpb24udGV4dCwK
CQkJCQkJbW9kZTogbWFwcGVkLmFjdGlvbi5tb2RlCgkJCQkJfSk7CgkJCQkJc2VuZEpzb24ocmVz
LCAyMDAsIHsKCQkJCQkJb2s6IHRydWUsCgkJCQkJCW1vZGU6IG1hcHBlZC5hY3Rpb24ubW9kZQoJ
CQkJCX0pOwoJCQkJCXJldHVybiB0cnVlOwoJCQkJfQoJCQkJY29uc3QgY2hhbm5lbCA9IHJlc29s
dmVIb29rQ2hhbm5lbChtYXBwZWQuYWN0aW9uLmNoYW5uZWwpOwoJCQkJaWYgKCFjaGFubmVsKSB7
CgkJCQkJc2VuZEpzb24ocmVzLCA0MDAsIHsKCQkJCQkJb2s6IGZhbHNlLAoJCQkJCQllcnJvcjog
Z2V0SG9va0NoYW5uZWxFcnJvcigpCgkJCQkJfSk7CgkJCQkJcmV0dXJuIHRydWU7CgkJCQl9CgkJ
CQlpZiAoIWlzSG9va0FnZW50QWxsb3dlZChob29rc0NvbmZpZywgbWFwcGVkLmFjdGlvbi5hZ2Vu
dElkKSkgewoJCQkJCXNlbmRKc29uKHJlcywgNDAwLCB7CgkJCQkJCW9rOiBmYWxzZSwKCQkJCQkJ
ZXJyb3I6IGdldEhvb2tBZ2VudFBvbGljeUVycm9yKCkKCQkJCQl9KTsKCQkJCQlyZXR1cm4gdHJ1
ZTsKCQkJCX0KCQkJCWNvbnN0IHNlc3Npb25LZXkgPSByZXNvbHZlSG9va1Nlc3Npb25LZXkoewoJ
CQkJCWhvb2tzQ29uZmlnLAoJCQkJCXNvdXJjZTogIm1hcHBpbmciLAoJCQkJCXNlc3Npb25LZXk6
IG1hcHBlZC5hY3Rpb24uc2Vzc2lvbktleQoJCQkJfSk7CgkJCQlpZiAoIXNlc3Npb25LZXkub2sp
IHsKCQkJCQlzZW5kSnNvbihyZXMsIDQwMCwgewoJCQkJCQlvazogZmFsc2UsCgkJCQkJCWVycm9y
OiBzZXNzaW9uS2V5LmVycm9yCgkJCQkJfSk7CgkJCQkJcmV0dXJuIHRydWU7CgkJCQl9CgkJCQlj
b25zdCB0YXJnZXRBZ2VudElkID0gcmVzb2x2ZUhvb2tUYXJnZXRBZ2VudElkKGhvb2tzQ29uZmln
LCBtYXBwZWQuYWN0aW9uLmFnZW50SWQpOwoJCQkJY29uc3Qgbm9ybWFsaXplZERpc3BhdGNoU2Vz
c2lvbktleSA9IG5vcm1hbGl6ZUhvb2tEaXNwYXRjaFNlc3Npb25LZXkoewoJCQkJCXNlc3Npb25L
ZXk6IHNlc3Npb25LZXkudmFsdWUsCgkJCQkJdGFyZ2V0QWdlbnRJZAoJCQkJfSk7CgkJCQljb25z
dCByZXBsYXlLZXkgPSBidWlsZEhvb2tSZXBsYXlDYWNoZUtleSh7CgkJCQkJcGF0aEtleTogc3Vi
UGF0aCB8fCAibWFwcGluZyIsCgkJCQkJdG9rZW4sCgkJCQkJaWRlbXBvdGVuY3lLZXksCgkJCQkJ
ZGlzcGF0Y2hTY29wZTogewoJCQkJCQlhZ2VudElkOiB0YXJnZXRBZ2VudElkID8/IG51bGwsCgkJ
CQkJCXNlc3Npb25LZXk6IG1hcHBlZC5hY3Rpb24uc2Vzc2lvbktleSA/PyBob29rc0NvbmZpZy5z
ZXNzaW9uUG9saWN5LmRlZmF1bHRTZXNzaW9uS2V5ID8/IG51bGwsCgkJCQkJCW1lc3NhZ2U6IG1h
cHBlZC5hY3Rpb24ubWVzc2FnZSwKCQkJCQkJbmFtZTogbWFwcGVkLmFjdGlvbi5uYW1lID8/ICJI
b29rIiwKCQkJCQkJd2FrZU1vZGU6IG1hcHBlZC5hY3Rpb24ud2FrZU1vZGUsCgkJCQkJCWRlbGl2
ZXI6IHJlc29sdmVIb29rRGVsaXZlcihtYXBwZWQuYWN0aW9uLmRlbGl2ZXIpLAoJCQkJCQljaGFu
bmVsLAoJCQkJCQl0bzogbWFwcGVkLmFjdGlvbi50byA/PyBudWxsLAoJCQkJCQltb2RlbDogbWFw
cGVkLmFjdGlvbi5tb2RlbCA/PyBudWxsLAoJCQkJCQl0aGlua2luZzogbWFwcGVkLmFjdGlvbi50
aGlua2luZyA/PyBudWxsLAoJCQkJCQl0aW1lb3V0U2Vjb25kczogbWFwcGVkLmFjdGlvbi50aW1l
b3V0U2Vjb25kcyA/PyBudWxsCgkJCQkJfQoJCQkJfSk7CgkJCQljb25zdCBjYWNoZWRSdW5JZCA9
IHJlc29sdmVDYWNoZWRIb29rUnVuSWQocmVwbGF5S2V5LCBub3cpOwoJCQkJaWYgKGNhY2hlZFJ1
bklkKSB7CgkJCQkJc2VuZEpzb24ocmVzLCAyMDAsIHsKCQkJCQkJb2s6IHRydWUsCgkJCQkJCXJ1
bklkOiBjYWNoZWRSdW5JZAoJCQkJCX0pOwoJCQkJCXJldHVybiB0cnVlOwoJCQkJfQoJCQkJY29u
c3QgcnVuSWQgPSBkaXNwYXRjaEFnZW50SG9vayh7CgkJCQkJbWVzc2FnZTogbWFwcGVkLmFjdGlv
bi5tZXNzYWdlLAoJCQkJCW5hbWU6IG1hcHBlZC5hY3Rpb24ubmFtZSA/PyAiSG9vayIsCgkJCQkJ
aWRlbXBvdGVuY3lLZXksCgkJCQkJYWdlbnRJZDogdGFyZ2V0QWdlbnRJZCwKCQkJCQl3YWtlTW9k
ZTogbWFwcGVkLmFjdGlvbi53YWtlTW9kZSwKCQkJCQlzZXNzaW9uS2V5OiBub3JtYWxpemVkRGlz
cGF0Y2hTZXNzaW9uS2V5LAoJCQkJCWRlbGl2ZXI6IHJlc29sdmVIb29rRGVsaXZlcihtYXBwZWQu
YWN0aW9uLmRlbGl2ZXIpLAoJCQkJCWNoYW5uZWwsCgkJCQkJdG86IG1hcHBlZC5hY3Rpb24udG8s
CgkJCQkJbW9kZWw6IG1hcHBlZC5hY3Rpb24ubW9kZWwsCgkJCQkJdGhpbmtpbmc6IG1hcHBlZC5h
Y3Rpb24udGhpbmtpbmcsCgkJCQkJdGltZW91dFNlY29uZHM6IG1hcHBlZC5hY3Rpb24udGltZW91
dFNlY29uZHMsCgkJCQkJYWxsb3dVbnNhZmVFeHRlcm5hbENvbnRlbnQ6IG1hcHBlZC5hY3Rpb24u
YWxsb3dVbnNhZmVFeHRlcm5hbENvbnRlbnQKCQkJCX0pOwoJCQkJcmVtZW1iZXJIb29rUnVuSWQo
cmVwbGF5S2V5LCBydW5JZCwgbm93KTsKCQkJCXNlbmRKc29uKHJlcywgMjAwLCB7CgkJCQkJb2s6
IHRydWUsCgkJCQkJcnVuSWQKCQkJCX0pOwoJCQkJcmV0dXJuIHRydWU7CgkJCX0KCQl9IGNhdGNo
IChlcnIpIHsKCQkJbG9nSG9va3Mud2FybihgaG9vayBtYXBwaW5nIGZhaWxlZDogJHtTdHJpbmco
ZXJyKX1gKTsKCQkJc2VuZEpzb24ocmVzLCA1MDAsIHsKCQkJCW9rOiBmYWxzZSwKCQkJCWVycm9y
OiAiaG9vayBtYXBwaW5nIGZhaWxlZCIKCQkJfSk7CgkJCXJldHVybiB0cnVlOwoJCX0KCQlyZXMu
c3RhdHVzQ29kZSA9IDQwNDsKCQlyZXMuc2V0SGVhZGVyKCJDb250ZW50LVR5cGUiLCAidGV4dC9w
bGFpbjsgY2hhcnNldD11dGYtOCIpOwoJCXJlcy5lbmQoIk5vdCBGb3VuZCIpOwoJCXJldHVybiB0
cnVlOwoJfTsKfQpmdW5jdGlvbiBjcmVhdGVHYXRld2F5SHR0cFNlcnZlcihvcHRzKSB7Cgljb25z
dCB7IGNhbnZhc0hvc3QsIGNsaWVudHMsIGNvbnRyb2xVaUVuYWJsZWQsIGNvbnRyb2xVaUJhc2VQ
YXRoLCBjb250cm9sVWlSb290LCBvcGVuQWlDaGF0Q29tcGxldGlvbnNFbmFibGVkLCBvcGVuQWlD
aGF0Q29tcGxldGlvbnNDb25maWcsIG9wZW5SZXNwb25zZXNFbmFibGVkLCBvcGVuUmVzcG9uc2Vz
Q29uZmlnLCBzdHJpY3RUcmFuc3BvcnRTZWN1cml0eUhlYWRlciwgaGFuZGxlSG9va3NSZXF1ZXN0
LCBoYW5kbGVQbHVnaW5SZXF1ZXN0LCBzaG91bGRFbmZvcmNlUGx1Z2luR2F0ZXdheUF1dGgsIHJl
c29sdmVkQXV0aCwgcmF0ZUxpbWl0ZXIsIGdldFJlYWRpbmVzcyB9ID0gb3B0czsKCWNvbnN0IGh0
dHBTZXJ2ZXIgPSBvcHRzLnRsc09wdGlvbnMgPyBjcmVhdGVTZXJ2ZXIkMihvcHRzLnRsc09wdGlv
bnMsIChyZXEsIHJlcykgPT4gewoJCWhhbmRsZVJlcXVlc3QocmVxLCByZXMpOwoJfSkgOiBjcmVh
dGVTZXJ2ZXIkMSgocmVxLCByZXMpID0+IHsKCQloYW5kbGVSZXF1ZXN0KHJlcSwgcmVzKTsKCX0p
OwoJYXN5bmMgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdChyZXEsIHJlcykgewoJCXNldERlZmF1bHRT
ZWN1cml0eUhlYWRlcnMocmVzLCB7IHN0cmljdFRyYW5zcG9ydFNlY3VyaXR5OiBzdHJpY3RUcmFu
c3BvcnRTZWN1cml0eUhlYWRlciB9KTsKCQlpZiAoU3RyaW5nKHJlcS5oZWFkZXJzLnVwZ3JhZGUg
Pz8gIiIpLnRvTG93ZXJDYXNlKCkgPT09ICJ3ZWJzb2NrZXQiKSByZXR1cm47CgkJdHJ5IHsKCQkJ
Y29uc3QgY29uZmlnU25hcHNob3QgPSBsb2FkQ29uZmlnKCk7CgkJCWNvbnN0IHRydXN0ZWRQcm94
aWVzID0gY29uZmlnU25hcHNob3QuZ2F0ZXdheT8udHJ1c3RlZFByb3hpZXMgPz8gW107CgkJCWNv
bnN0IGFsbG93UmVhbElwRmFsbGJhY2sgPSBjb25maWdTbmFwc2hvdC5nYXRld2F5Py5hbGxvd1Jl
YWxJcEZhbGxiYWNrID09PSB0cnVlOwoJCQljb25zdCBzY29wZWRDYW52YXMgPSBub3JtYWxpemVD
YW52YXNTY29wZWRVcmwocmVxLnVybCA/PyAiLyIpOwoJCQlpZiAoc2NvcGVkQ2FudmFzLm1hbGZv
cm1lZFNjb3BlZFBhdGgpIHsKCQkJCXNlbmRHYXRld2F5QXV0aEZhaWx1cmUocmVzLCB7CgkJCQkJ
b2s6IGZhbHNlLAoJCQkJCXJlYXNvbjogInVuYXV0aG9yaXplZCIKCQkJCX0pOwoJCQkJcmV0dXJu
OwoJCQl9CgkJCWlmIChzY29wZWRDYW52YXMucmV3cml0dGVuVXJsKSByZXEudXJsID0gc2NvcGVk
Q2FudmFzLnJld3JpdHRlblVybDsKCQkJY29uc3QgcmVxdWVzdFBhdGggPSBuZXcgVVJMKHJlcS51
cmwgPz8gIi8iLCAiaHR0cDovL2xvY2FsaG9zdCIpLnBhdGhuYW1lOwoJCQljb25zdCBtYXR0ZXJt
b3N0U2xhc2hDYWxsYmFja1BhdGhzID0gcmVzb2x2ZU1hdHRlcm1vc3RTbGFzaENhbGxiYWNrUGF0
aHMoY29uZmlnU25hcHNob3QpOwoJCQljb25zdCBwbHVnaW5QYXRoQ29udGV4dCA9IGhhbmRsZVBs
dWdpblJlcXVlc3QgPyByZXNvbHZlUGx1Z2luUm91dGVQYXRoQ29udGV4dChyZXF1ZXN0UGF0aCkg
OiBudWxsOwoJCQljb25zdCByZXF1ZXN0U3RhZ2VzID0gWwoJCQkJewoJCQkJCW5hbWU6ICJob29r
cyIsCgkJCQkJcnVuOiAoKSA9PiBoYW5kbGVIb29rc1JlcXVlc3QocmVxLCByZXMpCgkJCQl9LAoJ
CQkJewoJCQkJCW5hbWU6ICJ0b29scy1pbnZva2UiLAoJCQkJCXJ1bjogKCkgPT4gaGFuZGxlVG9v
bHNJbnZva2VIdHRwUmVxdWVzdChyZXEsIHJlcywgewoJCQkJCQlhdXRoOiByZXNvbHZlZEF1dGgs
CgkJCQkJCXRydXN0ZWRQcm94aWVzLAoJCQkJCQlhbGxvd1JlYWxJcEZhbGxiYWNrLAoJCQkJCQly
YXRlTGltaXRlcgoJCQkJCX0pCgkJCQl9LAoJCQkJewoJCQkJCW5hbWU6ICJzbGFjayIsCgkJCQkJ
cnVuOiAoKSA9PiBoYW5kbGVTbGFja0h0dHBSZXF1ZXN0KHJlcSwgcmVzKQoJCQkJfQoJCQldOwoJ
CQlpZiAob3BlblJlc3BvbnNlc0VuYWJsZWQpIHJlcXVlc3RTdGFnZXMucHVzaCh7CgkJCQluYW1l
OiAib3BlbnJlc3BvbnNlcyIsCgkJCQlydW46ICgpID0+IGhhbmRsZU9wZW5SZXNwb25zZXNIdHRw
UmVxdWVzdChyZXEsIHJlcywgewoJCQkJCWF1dGg6IHJlc29sdmVkQXV0aCwKCQkJCQljb25maWc6
IG9wZW5SZXNwb25zZXNDb25maWcsCgkJCQkJdHJ1c3RlZFByb3hpZXMsCgkJCQkJYWxsb3dSZWFs
SXBGYWxsYmFjaywKCQkJCQlyYXRlTGltaXRlcgoJCQkJfSkKCQkJfSk7CgkJCWlmIChvcGVuQWlD
aGF0Q29tcGxldGlvbnNFbmFibGVkKSByZXF1ZXN0U3RhZ2VzLnB1c2goewoJCQkJbmFtZTogIm9w
ZW5haSIsCgkJCQlydW46ICgpID0+IGhhbmRsZU9wZW5BaUh0dHBSZXF1ZXN0KHJlcSwgcmVzLCB7
CgkJCQkJYXV0aDogcmVzb2x2ZWRBdXRoLAoJCQkJCWNvbmZpZzogb3BlbkFpQ2hhdENvbXBsZXRp
b25zQ29uZmlnLAoJCQkJCXRydXN0ZWRQcm94aWVzLAoJCQkJCWFsbG93UmVhbElwRmFsbGJhY2ss
CgkJCQkJcmF0ZUxpbWl0ZXIKCQkJCX0pCgkJCX0pOwoJCQlpZiAoY2FudmFzSG9zdCkgewoJCQkJ
cmVxdWVzdFN0YWdlcy5wdXNoKHsKCQkJCQluYW1lOiAiY2FudmFzLWF1dGgiLAoJCQkJCXJ1bjog
YXN5bmMgKCkgPT4gewoJCQkJCQlpZiAoIWlzQ2FudmFzUGF0aChyZXF1ZXN0UGF0aCkpIHJldHVy
biBmYWxzZTsKCQkJCQkJY29uc3Qgb2sgPSBhd2FpdCBhdXRob3JpemVDYW52YXNSZXF1ZXN0KHsK
CQkJCQkJCXJlcSwKCQkJCQkJCWF1dGg6IHJlc29sdmVkQXV0aCwKCQkJCQkJCXRydXN0ZWRQcm94
aWVzLAoJCQkJCQkJYWxsb3dSZWFsSXBGYWxsYmFjaywKCQkJCQkJCWNsaWVudHMsCgkJCQkJCQlj
YW52YXNDYXBhYmlsaXR5OiBzY29wZWRDYW52YXMuY2FwYWJpbGl0eSwKCQkJCQkJCW1hbGZvcm1l
ZFNjb3BlZFBhdGg6IHNjb3BlZENhbnZhcy5tYWxmb3JtZWRTY29wZWRQYXRoLAoJCQkJCQkJcmF0
ZUxpbWl0ZXIKCQkJCQkJfSk7CgkJCQkJCWlmICghb2sub2spIHsKCQkJCQkJCXNlbmRHYXRld2F5
QXV0aEZhaWx1cmUocmVzLCBvayk7CgkJCQkJCQlyZXR1cm4gdHJ1ZTsKCQkJCQkJfQoJCQkJCQly
ZXR1cm4gZmFsc2U7CgkJCQkJfQoJCQkJfSk7CgkJCQlyZXF1ZXN0U3RhZ2VzLnB1c2goewoJCQkJ
CW5hbWU6ICJhMnVpIiwKCQkJCQlydW46ICgpID0+IGhhbmRsZUEydWlIdHRwUmVxdWVzdChyZXEs
IHJlcykKCQkJCX0pOwoJCQkJcmVxdWVzdFN0YWdlcy5wdXNoKHsKCQkJCQluYW1lOiAiY2FudmFz
LWh0dHAiLAoJCQkJCXJ1bjogKCkgPT4gY2FudmFzSG9zdC5oYW5kbGVIdHRwUmVxdWVzdChyZXEs
IHJlcykKCQkJCX0pOwoJCQl9CgkJCXJlcXVlc3RTdGFnZXMucHVzaCguLi5idWlsZFBsdWdpblJl
cXVlc3RTdGFnZXMoewoJCQkJcmVxLAoJCQkJcmVzLAoJCQkJcmVxdWVzdFBhdGgsCgkJCQltYXR0
ZXJtb3N0U2xhc2hDYWxsYmFja1BhdGhzLAoJCQkJcGx1Z2luUGF0aENvbnRleHQsCgkJCQloYW5k
bGVQbHVnaW5SZXF1ZXN0LAoJCQkJc2hvdWxkRW5mb3JjZVBsdWdpbkdhdGV3YXlBdXRoLAoJCQkJ
cmVzb2x2ZWRBdXRoLAoJCQkJdHJ1c3RlZFByb3hpZXMsCgkJCQlhbGxvd1JlYWxJcEZhbGxiYWNr
LAoJCQkJcmF0ZUxpbWl0ZXIKCQkJfSkpOwoJCQlpZiAoY29udHJvbFVpRW5hYmxlZCkgewoJCQkJ
cmVxdWVzdFN0YWdlcy5wdXNoKHsKCQkJCQluYW1lOiAiY29udHJvbC11aS1hdmF0YXIiLAoJCQkJ
CXJ1bjogKCkgPT4gaGFuZGxlQ29udHJvbFVpQXZhdGFyUmVxdWVzdChyZXEsIHJlcywgewoJCQkJ
CQliYXNlUGF0aDogY29udHJvbFVpQmFzZVBhdGgsCgkJCQkJCXJlc29sdmVBdmF0YXI6IChhZ2Vu
dElkKSA9PiByZXNvbHZlQWdlbnRBdmF0YXIoY29uZmlnU25hcHNob3QsIGFnZW50SWQpCgkJCQkJ
fSkKCQkJCX0pOwoJCQkJcmVxdWVzdFN0YWdlcy5wdXNoKHsKCQkJCQluYW1lOiAiY29udHJvbC11
aS1odHRwIiwKCQkJCQlydW46ICgpID0+IGhhbmRsZUNvbnRyb2xVaUh0dHBSZXF1ZXN0KHJlcSwg
cmVzLCB7CgkJCQkJCWJhc2VQYXRoOiBjb250cm9sVWlCYXNlUGF0aCwKCQkJCQkJY29uZmlnOiBj
b25maWdTbmFwc2hvdCwKCQkJCQkJcm9vdDogY29udHJvbFVpUm9vdAoJCQkJCX0pCgkJCQl9KTsK
CQkJfQoJCQlyZXF1ZXN0U3RhZ2VzLnB1c2goewoJCQkJbmFtZTogImdhdGV3YXktcHJvYmVzIiwK
CQkJCXJ1bjogKCkgPT4gaGFuZGxlR2F0ZXdheVByb2JlUmVxdWVzdChyZXEsIHJlcywgcmVxdWVz
dFBhdGgsIHJlc29sdmVkQXV0aCwgdHJ1c3RlZFByb3hpZXMsIGFsbG93UmVhbElwRmFsbGJhY2ss
IGdldFJlYWRpbmVzcykKCQkJfSk7CgkJCWlmIChhd2FpdCBydW5HYXRld2F5SHR0cFJlcXVlc3RT
dGFnZXMocmVxdWVzdFN0YWdlcykpIHJldHVybjsKCQkJcmVzLnN0YXR1c0NvZGUgPSA0MDQ7CgkJ
CXJlcy5zZXRIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04
Iik7CgkJCXJlcy5lbmQoIk5vdCBGb3VuZCIpOwoJCX0gY2F0Y2ggewoJCQlyZXMuc3RhdHVzQ29k
ZSA9IDUwMDsKCQkJcmVzLnNldEhlYWRlcigiQ29udGVudC1UeXBlIiwgInRleHQvcGxhaW47IGNo
YXJzZXQ9dXRmLTgiKTsKCQkJcmVzLmVuZCgiSW50ZXJuYWwgU2VydmVyIEVycm9yIik7CgkJfQoJ
fQoJcmV0dXJuIGh0dHBTZXJ2ZXI7Cn0KZnVuY3Rpb24gYXR0YWNoR2F0ZXdheVVwZ3JhZGVIYW5k
bGVyKG9wdHMpIHsKCWNvbnN0IHsgaHR0cFNlcnZlciwgd3NzLCBjYW52YXNIb3N0LCBjbGllbnRz
LCByZXNvbHZlZEF1dGgsIHJhdGVMaW1pdGVyIH0gPSBvcHRzOwoJaHR0cFNlcnZlci5vbigidXBn
cmFkZSIsIChyZXEsIHNvY2tldCwgaGVhZCkgPT4gewoJCShhc3luYyAoKSA9PiB7CgkJCWNvbnN0
IHNjb3BlZENhbnZhcyA9IG5vcm1hbGl6ZUNhbnZhc1Njb3BlZFVybChyZXEudXJsID8/ICIvIik7
CgkJCWlmIChzY29wZWRDYW52YXMubWFsZm9ybWVkU2NvcGVkUGF0aCkgewoJCQkJd3JpdGVVcGdy
YWRlQXV0aEZhaWx1cmUoc29ja2V0LCB7CgkJCQkJb2s6IGZhbHNlLAoJCQkJCXJlYXNvbjogInVu
YXV0aG9yaXplZCIKCQkJCX0pOwoJCQkJc29ja2V0LmRlc3Ryb3koKTsKCQkJCXJldHVybjsKCQkJ
fQoJCQlpZiAoc2NvcGVkQ2FudmFzLnJld3JpdHRlblVybCkgcmVxLnVybCA9IHNjb3BlZENhbnZh
cy5yZXdyaXR0ZW5Vcmw7CgkJCWlmIChjYW52YXNIb3N0KSB7CgkJCQlpZiAobmV3IFVSTChyZXEu
dXJsID8/ICIvIiwgImh0dHA6Ly9sb2NhbGhvc3QiKS5wYXRobmFtZSA9PT0gIi9fX29wZW5jbGF3
X18vd3MiKSB7CgkJCQkJY29uc3QgY29uZmlnU25hcHNob3QgPSBsb2FkQ29uZmlnKCk7CgkJCQkJ
Y29uc3Qgb2sgPSBhd2FpdCBhdXRob3JpemVDYW52YXNSZXF1ZXN0KHsKCQkJCQkJcmVxLAoJCQkJ
CQlhdXRoOiByZXNvbHZlZEF1dGgsCgkJCQkJCXRydXN0ZWRQcm94aWVzOiBjb25maWdTbmFwc2hv
dC5nYXRld2F5Py50cnVzdGVkUHJveGllcyA/PyBbXSwKCQkJCQkJYWxsb3dSZWFsSXBGYWxsYmFj
azogY29uZmlnU25hcHNob3QuZ2F0ZXdheT8uYWxsb3dSZWFsSXBGYWxsYmFjayA9PT0gdHJ1ZSwK
CQkJCQkJY2xpZW50cywKCQkJCQkJY2FudmFzQ2FwYWJpbGl0eTogc2NvcGVkQ2FudmFzLmNhcGFi
aWxpdHksCgkJCQkJCW1hbGZvcm1lZFNjb3BlZFBhdGg6IHNjb3BlZENhbnZhcy5tYWxmb3JtZWRT
Y29wZWRQYXRoLAoJCQkJCQlyYXRlTGltaXRlcgoJCQkJCX0pOwoJCQkJCWlmICghb2sub2spIHsK
CQkJCQkJd3JpdGVVcGdyYWRlQXV0aEZhaWx1cmUoc29ja2V0LCBvayk7CgkJCQkJCXNvY2tldC5k
ZXN0cm95KCk7CgkJCQkJCXJldHVybjsKCQkJCQl9CgkJCQl9CgkJCQlpZiAoY2FudmFzSG9zdC5o
YW5kbGVVcGdyYWRlKHJlcSwgc29ja2V0LCBoZWFkKSkgcmV0dXJuOwoJCQl9CgkJCXdzcy5oYW5k
bGVVcGdyYWRlKHJlcSwgc29ja2V0LCBoZWFkLCAod3MpID0+IHsKCQkJCXdzcy5lbWl0KCJjb25u
ZWN0aW9uIiwgd3MsIHJlcSk7CgkJCX0pOwoJCX0pKCkuY2F0Y2goKCkgPT4gewoJCQlzb2NrZXQu
ZGVzdHJveSgpOwoJCX0pOwoJfSk7Cn0KLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvZ2F0ZXdh
eS9zZXJ2ZXIvaG9va3MudHMKZnVuY3Rpb24gcmVzb2x2ZUhvb2tDbGllbnRJcENvbmZpZyhjZmcp
IHsKCXJldHVybiB7CgkJdHJ1c3RlZFByb3hpZXM6IGNmZy5nYXRld2F5Py50cnVzdGVkUHJveGll
cywKCQlhbGxvd1JlYWxJcEZhbGxiYWNrOiBjZmcuZ2F0ZXdheT8uYWxsb3dSZWFsSXBGYWxsYmFj
ayA9PT0gdHJ1ZQoJfTsKfQpmdW5jdGlvbiBjcmVhdGVHYXRld2F5SG9va3NSZXF1ZXN0SGFuZGxl
cihwYXJhbXMpIHsKCWNvbnN0IHsgZGVwcywgZ2V0SG9va3NDb25maWcsIGdldENsaWVudElwQ29u
ZmlnLCBiaW5kSG9zdCwgcG9ydCwgbG9nSG9va3MgfSA9IHBhcmFtczsKCWNvbnN0IGRpc3BhdGNo
V2FrZUhvb2sgPSAodmFsdWUpID0+IHsKCQljb25zdCBzZXNzaW9uS2V5ID0gcmVzb2x2ZU1haW5T
ZXNzaW9uS2V5RnJvbUNvbmZpZygpOwoJCWVucXVldWVTeXN0ZW1FdmVudCh2YWx1ZS50ZXh0LCB7
IHNlc3Npb25LZXkgfSk7CgkJaWYgKHZhbHVlLm1vZGUgPT09ICJub3ciKSByZXF1ZXN0SGVhcnRi
ZWF0Tm93KHsgcmVhc29uOiAiaG9vazp3YWtlIiB9KTsKCX07Cgljb25zdCBkaXNwYXRjaEFnZW50
SG9vayA9ICh2YWx1ZSkgPT4gewoJCWNvbnN0IHNlc3Npb25LZXkgPSBub3JtYWxpemVIb29rRGlz
cGF0Y2hTZXNzaW9uS2V5KHsKCQkJc2Vzc2lvbktleTogdmFsdWUuc2Vzc2lvbktleSwKCQkJdGFy
Z2V0QWdlbnRJZDogdmFsdWUuYWdlbnRJZAoJCX0pOwoJCWNvbnN0IG1haW5TZXNzaW9uS2V5ID0g
cmVzb2x2ZU1haW5TZXNzaW9uS2V5RnJvbUNvbmZpZygpOwoJCWNvbnN0IGpvYklkID0gcmFuZG9t
VVVJRCgpOwoJCWNvbnN0IG5vdyA9IERhdGUubm93KCk7CgkJY29uc3Qgam9iID0gewoJCQlpZDog
am9iSWQsCgkJCWFnZW50SWQ6IHZhbHVlLmFnZW50SWQsCgkJCW5hbWU6IHZhbHVlLm5hbWUsCgkJ
CWVuYWJsZWQ6IHRydWUsCgkJCWNyZWF0ZWRBdE1zOiBub3csCgkJCXVwZGF0ZWRBdE1zOiBub3cs
CgkJCXNjaGVkdWxlOiB7CgkJCQlraW5kOiAiYXQiLAoJCQkJYXQ6IG5ldyBEYXRlKG5vdykudG9J
U09TdHJpbmcoKQoJCQl9LAoJCQlzZXNzaW9uVGFyZ2V0OiAiaXNvbGF0ZWQiLAoJCQl3YWtlTW9k
ZTogdmFsdWUud2FrZU1vZGUsCgkJCXBheWxvYWQ6IHsKCQkJCWtpbmQ6ICJhZ2VudFR1cm4iLAoJ
CQkJbWVzc2FnZTogdmFsdWUubWVzc2FnZSwKCQkJCW1vZGVsOiB2YWx1ZS5tb2RlbCwKCQkJCXRo
aW5raW5nOiB2YWx1ZS50aGlua2luZywKCQkJCXRpbWVvdXRTZWNvbmRzOiB2YWx1ZS50aW1lb3V0
U2Vjb25kcywKCQkJCWRlbGl2ZXI6IHZhbHVlLmRlbGl2ZXIsCgkJCQljaGFubmVsOiB2YWx1ZS5j
aGFubmVsLAoJCQkJdG86IHZhbHVlLnRvLAoJCQkJYWxsb3dVbnNhZmVFeHRlcm5hbENvbnRlbnQ6
IHZhbHVlLmFsbG93VW5zYWZlRXh0ZXJuYWxDb250ZW50CgkJCX0sCgkJCXN0YXRlOiB7IG5leHRS
dW5BdE1zOiBub3cgfQoJCX07CgkJY29uc3QgcnVuSWQgPSByYW5kb21VVUlEKCk7CgkJKGFzeW5j
ICgpID0+IHsKCQkJdHJ5IHsKCQkJCWNvbnN0IHJlc3VsdCA9IGF3YWl0IHJ1bkNyb25Jc29sYXRl
ZEFnZW50VHVybih7CgkJCQkJY2ZnOiBsb2FkQ29uZmlnKCksCgkJCQkJZGVwcywKCQkJCQlqb2Is
CgkJCQkJbWVzc2FnZTogdmFsdWUubWVzc2FnZSwKCQkJCQlzZXNzaW9uS2V5LAoJCQkJCWxhbmU6
ICJjcm9uIiwKCQkJCQlkZWxpdmVyeUNvbnRyYWN0OiAic2hhcmVkIgoJCQkJfSk7CgkJCQljb25z
dCBzdW1tYXJ5ID0gcmVzdWx0LnN1bW1hcnk/LnRyaW0oKSB8fCByZXN1bHQuZXJyb3I/LnRyaW0o
KSB8fCByZXN1bHQuc3RhdHVzOwoJCQkJY29uc3QgcHJlZml4ID0gcmVzdWx0LnN0YXR1cyA9PT0g
Im9rIiA/IGBIb29rICR7dmFsdWUubmFtZX1gIDogYEhvb2sgJHt2YWx1ZS5uYW1lfSAoJHtyZXN1
bHQuc3RhdHVzfSlgOwoJCQkJaWYgKCFyZXN1bHQuZGVsaXZlcmVkKSB7CgkJCQkJZW5xdWV1ZVN5
c3RlbUV2ZW50KGAke3ByZWZpeH06ICR7c3VtbWFyeX1gLnRyaW0oKSwgeyBzZXNzaW9uS2V5OiBt
YWluU2Vzc2lvbktleSB9KTsKCQkJCQlpZiAodmFsdWUud2FrZU1vZGUgPT09ICJub3ciKSByZXF1
ZXN0SGVhcnRiZWF0Tm93KHsgcmVhc29uOiBgaG9vazoke2pvYklkfWAgfSk7CgkJCQl9CgkJCX0g
Y2F0Y2ggKGVycikgewoJCQkJbG9nSG9va3Mud2FybihgaG9vayBhZ2VudCBmYWlsZWQ6ICR7U3Ry
aW5nKGVycil9YCk7CgkJCQllbnF1ZXVlU3lzdGVtRXZlbnQoYEhvb2sgJHt2YWx1ZS5uYW1lfSAo
ZXJyb3IpOiAke1N0cmluZyhlcnIpfWAsIHsgc2Vzc2lvbktleTogbWFpblNlc3Npb25LZXkgfSk7
CgkJCQlpZiAodmFsdWUud2FrZU1vZGUgPT09ICJub3ciKSByZXF1ZXN0SGVhcnRiZWF0Tm93KHsg
cmVhc29uOiBgaG9vazoke2pvYklkfTplcnJvcmAgfSk7CgkJCX0KCQl9KSgpOwoJCXJldHVybiBy
dW5JZDsKCX07CglyZXR1cm4gY3JlYXRlSG9va3NSZXF1ZXN0SGFuZGxlcih7CgkJZ2V0SG9va3ND
b25maWcsCgkJYmluZEhvc3QsCgkJcG9ydCwKCQlsb2dIb29rcywKCQlnZXRDbGllbnRJcENvbmZp
ZywKCQlkaXNwYXRjaEFnZW50SG9vaywKCQlkaXNwYXRjaFdha2VIb29rCgl9KTsKfQovLyNlbmRy
ZWdpb24KLy8jcmVnaW9uIHNyYy9nYXRld2F5L3NlcnZlci1yZWxvYWQtaGFuZGxlcnMudHMKZnVu
Y3Rpb24gY3JlYXRlR2F0ZXdheVJlbG9hZEhhbmRsZXJzKHBhcmFtcykgewoJY29uc3QgYXBwbHlI
b3RSZWxvYWQgPSBhc3luYyAocGxhbiwgbmV4dENvbmZpZykgPT4gewoJCXNldEdhdGV3YXlTaWd1
c3IxUmVzdGFydFBvbGljeSh7IGFsbG93RXh0ZXJuYWw6IGlzUmVzdGFydEVuYWJsZWQobmV4dENv
bmZpZykgfSk7CgkJY29uc3Qgc3RhdGUgPSBwYXJhbXMuZ2V0U3RhdGUoKTsKCQljb25zdCBuZXh0
U3RhdGUgPSB7IC4uLnN0YXRlIH07CgkJaWYgKHBsYW4ucmVsb2FkSG9va3MpIHRyeSB7CgkJCW5l
eHRTdGF0ZS5ob29rc0NvbmZpZyA9IHJlc29sdmVIb29rc0NvbmZpZyhuZXh0Q29uZmlnKTsKCQl9
IGNhdGNoIChlcnIpIHsKCQkJcGFyYW1zLmxvZ0hvb2tzLndhcm4oYGhvb2tzIGNvbmZpZyByZWxv
YWQgZmFpbGVkOiAke1N0cmluZyhlcnIpfWApOwoJCX0KCQluZXh0U3RhdGUuaG9va0NsaWVudElw
Q29uZmlnID0gcmVzb2x2ZUhvb2tDbGllbnRJcENvbmZpZyhuZXh0Q29uZmlnKTsKCQlpZiAocGxh
bi5yZXN0YXJ0SGVhcnRiZWF0KSBuZXh0U3RhdGUuaGVhcnRiZWF0UnVubmVyLnVwZGF0ZUNvbmZp
ZyhuZXh0Q29uZmlnKTsKCQlyZXNldERpcmVjdG9yeUNhY2hlKCk7CgkJaWYgKHBsYW4ucmVzdGFy
dENyb24pIHsKCQkJc3RhdGUuY3JvblN0YXRlLmNyb24uc3RvcCgpOwoJCQluZXh0U3RhdGUuY3Jv
blN0YXRlID0gYnVpbGRHYXRld2F5Q3JvblNlcnZpY2UoewoJCQkJY2ZnOiBuZXh0Q29uZmlnLAoJ
CQkJZGVwczogcGFyYW1zLmRlcHMsCgkJCQlicm9hZGNhc3Q6IHBhcmFtcy5icm9hZGNhc3QKCQkJ
fSk7CgkJCW5leHRTdGF0ZS5jcm9uU3RhdGUuY3Jvbi5zdGFydCgpLmNhdGNoKChlcnIpID0+IHBh
cmFtcy5sb2dDcm9uLmVycm9yKGBmYWlsZWQgdG8gc3RhcnQ6ICR7U3RyaW5nKGVycil9YCkpOwoJ
CX0KCQlpZiAocGxhbi5yZXN0YXJ0QnJvd3NlckNvbnRyb2wpIHsKCQkJaWYgKHN0YXRlLmJyb3dz
ZXJDb250cm9sKSBhd2FpdCBzdGF0ZS5icm93c2VyQ29udHJvbC5zdG9wKCkuY2F0Y2goKCkgPT4g
e30pOwoJCQl0cnkgewoJCQkJbmV4dFN0YXRlLmJyb3dzZXJDb250cm9sID0gYXdhaXQgc3RhcnRC
cm93c2VyQ29udHJvbFNlcnZlcklmRW5hYmxlZCgpOwoJCQl9IGNhdGNoIChlcnIpIHsKCQkJCXBh
cmFtcy5sb2dCcm93c2VyLmVycm9yKGBzZXJ2ZXIgZmFpbGVkIHRvIHN0YXJ0OiAke1N0cmluZyhl
cnIpfWApOwoJCQl9CgkJfQoJCWlmIChwbGFuLnJlc3RhcnRIZWFsdGhNb25pdG9yKSB7CgkJCXN0
YXRlLmNoYW5uZWxIZWFsdGhNb25pdG9yPy5zdG9wKCk7CgkJCWNvbnN0IG1pbnV0ZXMgPSBuZXh0
Q29uZmlnLmdhdGV3YXk/LmNoYW5uZWxIZWFsdGhDaGVja01pbnV0ZXM7CgkJCW5leHRTdGF0ZS5j
aGFubmVsSGVhbHRoTW9uaXRvciA9IG1pbnV0ZXMgPT09IDAgPyBudWxsIDogcGFyYW1zLmNyZWF0
ZUhlYWx0aE1vbml0b3IoKG1pbnV0ZXMgPz8gNSkgKiA2ZTQpOwoJCX0KCQlpZiAocGxhbi5yZXN0
YXJ0R21haWxXYXRjaGVyKSB7CgkJCWF3YWl0IHN0b3BHbWFpbFdhdGNoZXIoKS5jYXRjaCgoKSA9
PiB7fSk7CgkJCWF3YWl0IHN0YXJ0R21haWxXYXRjaGVyV2l0aExvZ3MoewoJCQkJY2ZnOiBuZXh0
Q29uZmlnLAoJCQkJbG9nOiBwYXJhbXMubG9nSG9va3MsCgkJCQlvblNraXBwZWQ6ICgpID0+IHBh
cmFtcy5sb2dIb29rcy5pbmZvKCJza2lwcGluZyBnbWFpbCB3YXRjaGVyIHJlc3RhcnQgKE9QRU5D
TEFXX1NLSVBfR01BSUxfV0FUQ0hFUj0xKSIpCgkJCX0pOwoJCX0KCQlpZiAocGxhbi5yZXN0YXJ0
Q2hhbm5lbHMuc2l6ZSA+IDApIGlmIChpc1RydXRoeUVudlZhbHVlKHByb2Nlc3MuZW52Lk9QRU5D
TEFXX1NLSVBfQ0hBTk5FTFMpIHx8IGlzVHJ1dGh5RW52VmFsdWUocHJvY2Vzcy5lbnYuT1BFTkNM
QVdfU0tJUF9QUk9WSURFUlMpKSBwYXJhbXMubG9nQ2hhbm5lbHMuaW5mbygic2tpcHBpbmcgY2hh
bm5lbCByZWxvYWQgKE9QRU5DTEFXX1NLSVBfQ0hBTk5FTFM9MSBvciBPUEVOQ0xBV19TS0lQX1BS
T1ZJREVSUz0xKSIpOwoJCWVsc2UgewoJCQljb25zdCByZXN0YXJ0Q2hhbm5lbCA9IGFzeW5jIChu
YW1lKSA9PiB7CgkJCQlwYXJhbXMubG9nQ2hhbm5lbHMuaW5mbyhgcmVzdGFydGluZyAke25hbWV9
IGNoYW5uZWxgKTsKCQkJCWF3YWl0IHBhcmFtcy5zdG9wQ2hhbm5lbChuYW1lKTsKCQkJCWF3YWl0
IHBhcmFtcy5zdGFydENoYW5uZWwobmFtZSk7CgkJCX07CgkJCWZvciAoY29uc3QgY2hhbm5lbCBv
ZiBwbGFuLnJlc3RhcnRDaGFubmVscykgYXdhaXQgcmVzdGFydENoYW5uZWwoY2hhbm5lbCk7CgkJ
fQoJCXNldENvbW1hbmRMYW5lQ29uY3VycmVuY3koQ29tbWFuZExhbmUuQ3JvbiwgbmV4dENvbmZp
Zy5jcm9uPy5tYXhDb25jdXJyZW50UnVucyA/PyAxKTsKCQlzZXRDb21tYW5kTGFuZUNvbmN1cnJl
bmN5KENvbW1hbmRMYW5lLk1haW4sIHJlc29sdmVBZ2VudE1heENvbmN1cnJlbnQobmV4dENvbmZp
ZykpOwoJCXNldENvbW1hbmRMYW5lQ29uY3VycmVuY3koQ29tbWFuZExhbmUuU3ViYWdlbnQsIHJl
c29sdmVTdWJhZ2VudE1heENvbmN1cnJlbnQobmV4dENvbmZpZykpOwoJCWlmIChwbGFuLmhvdFJl
YXNvbnMubGVuZ3RoID4gMCkgcGFyYW1zLmxvZ1JlbG9hZC5pbmZvKGBjb25maWcgaG90IHJlbG9h
ZCBhcHBsaWVkICgke3BsYW4uaG90UmVhc29ucy5qb2luKCIsICIpfSlgKTsKCQllbHNlIGlmIChw
bGFuLm5vb3BQYXRocy5sZW5ndGggPiAwKSBwYXJhbXMubG9nUmVsb2FkLmluZm8oYGNvbmZpZyBj
aGFuZ2UgYXBwbGllZCAoZHluYW1pYyByZWFkczogJHtwbGFuLm5vb3BQYXRocy5qb2luKCIsICIp
fSlgKTsKCQlwYXJhbXMuc2V0U3RhdGUobmV4dFN0YXRlKTsKCX07CglsZXQgcmVzdGFydFBlbmRp
bmcgPSBmYWxzZTsKCWNvbnN0IHJlcXVlc3RHYXRld2F5UmVzdGFydCA9IChwbGFuLCBuZXh0Q29u
ZmlnKSA9PiB7CgkJc2V0R2F0ZXdheVNpZ3VzcjFSZXN0YXJ0UG9saWN5KHsgYWxsb3dFeHRlcm5h
bDogaXNSZXN0YXJ0RW5hYmxlZChuZXh0Q29uZmlnKSB9KTsKCQljb25zdCByZWFzb25zID0gcGxh
bi5yZXN0YXJ0UmVhc29ucy5sZW5ndGggPyBwbGFuLnJlc3RhcnRSZWFzb25zLmpvaW4oIiwgIikg
OiBwbGFuLmNoYW5nZWRQYXRocy5qb2luKCIsICIpOwoJCWlmIChwcm9jZXNzLmxpc3RlbmVyQ291
bnQoIlNJR1VTUjEiKSA9PT0gMCkgewoJCQlwYXJhbXMubG9nUmVsb2FkLndhcm4oIm5vIFNJR1VT
UjEgbGlzdGVuZXIgZm91bmQ7IHJlc3RhcnQgc2tpcHBlZCIpOwoJCQlyZXR1cm47CgkJfQoJCWNv
bnN0IGdldEFjdGl2ZUNvdW50cyA9ICgpID0+IHsKCQkJY29uc3QgcXVldWVTaXplID0gZ2V0VG90
YWxRdWV1ZVNpemUoKTsKCQkJY29uc3QgcGVuZGluZ1JlcGxpZXMgPSBnZXRUb3RhbFBlbmRpbmdS
ZXBsaWVzKCk7CgkJCWNvbnN0IGVtYmVkZGVkUnVucyA9IGdldEFjdGl2ZUVtYmVkZGVkUnVuQ291
bnQoKTsKCQkJcmV0dXJuIHsKCQkJCXF1ZXVlU2l6ZSwKCQkJCXBlbmRpbmdSZXBsaWVzLAoJCQkJ
ZW1iZWRkZWRSdW5zLAoJCQkJdG90YWxBY3RpdmU6IHF1ZXVlU2l6ZSArIHBlbmRpbmdSZXBsaWVz
ICsgZW1iZWRkZWRSdW5zCgkJCX07CgkJfTsKCQljb25zdCBmb3JtYXRBY3RpdmVEZXRhaWxzID0g
KGNvdW50cykgPT4gewoJCQljb25zdCBkZXRhaWxzID0gW107CgkJCWlmIChjb3VudHMucXVldWVT
aXplID4gMCkgZGV0YWlscy5wdXNoKGAke2NvdW50cy5xdWV1ZVNpemV9IG9wZXJhdGlvbihzKWAp
OwoJCQlpZiAoY291bnRzLnBlbmRpbmdSZXBsaWVzID4gMCkgZGV0YWlscy5wdXNoKGAke2NvdW50
cy5wZW5kaW5nUmVwbGllc30gcmVwbHkoaWVzKWApOwoJCQlpZiAoY291bnRzLmVtYmVkZGVkUnVu
cyA+IDApIGRldGFpbHMucHVzaChgJHtjb3VudHMuZW1iZWRkZWRSdW5zfSBlbWJlZGRlZCBydW4o
cylgKTsKCQkJcmV0dXJuIGRldGFpbHM7CgkJfTsKCQljb25zdCBhY3RpdmUgPSBnZXRBY3RpdmVD
b3VudHMoKTsKCQlpZiAoYWN0aXZlLnRvdGFsQWN0aXZlID4gMCkgewoJCQlpZiAocmVzdGFydFBl
bmRpbmcpIHsKCQkJCXBhcmFtcy5sb2dSZWxvYWQuaW5mbyhgY29uZmlnIGNoYW5nZSByZXF1aXJl
cyBnYXRld2F5IHJlc3RhcnQgKCR7cmVhc29uc30pIOKAlCBhbHJlYWR5IHdhaXRpbmcgZm9yIG9w
ZXJhdGlvbnMgdG8gY29tcGxldGVgKTsKCQkJCXJldHVybjsKCQkJfQoJCQlyZXN0YXJ0UGVuZGlu
ZyA9IHRydWU7CgkJCWNvbnN0IGluaXRpYWxEZXRhaWxzID0gZm9ybWF0QWN0aXZlRGV0YWlscyhh
Y3RpdmUpOwoJCQlwYXJhbXMubG9nUmVsb2FkLndhcm4oYGNvbmZpZyBjaGFuZ2UgcmVxdWlyZXMg
Z2F0ZXdheSByZXN0YXJ0ICgke3JlYXNvbnN9KSDigJQgZGVmZXJyaW5nIHVudGlsICR7aW5pdGlh
bERldGFpbHMuam9pbigiLCAiKX0gY29tcGxldGVgKTsKCQkJZGVmZXJHYXRld2F5UmVzdGFydFVu
dGlsSWRsZSh7CgkJCQlnZXRQZW5kaW5nQ291bnQ6ICgpID0+IGdldEFjdGl2ZUNvdW50cygpLnRv
dGFsQWN0aXZlLAoJCQkJaG9va3M6IHsKCQkJCQlvblJlYWR5OiAoKSA9PiB7CgkJCQkJCXJlc3Rh
cnRQZW5kaW5nID0gZmFsc2U7CgkJCQkJCXBhcmFtcy5sb2dSZWxvYWQuaW5mbygiYWxsIG9wZXJh
dGlvbnMgYW5kIHJlcGxpZXMgY29tcGxldGVkOyByZXN0YXJ0aW5nIGdhdGV3YXkgbm93Iik7CgkJ
CQkJfSwKCQkJCQlvblRpbWVvdXQ6IChfcGVuZGluZywgZWxhcHNlZE1zKSA9PiB7CgkJCQkJCWNv
bnN0IHJlbWFpbmluZyA9IGZvcm1hdEFjdGl2ZURldGFpbHMoZ2V0QWN0aXZlQ291bnRzKCkpOwoJ
CQkJCQlyZXN0YXJ0UGVuZGluZyA9IGZhbHNlOwoJCQkJCQlwYXJhbXMubG9nUmVsb2FkLndhcm4o
YHJlc3RhcnQgdGltZW91dCBhZnRlciAke2VsYXBzZWRNc31tcyB3aXRoICR7cmVtYWluaW5nLmpv
aW4oIiwgIil9IHN0aWxsIGFjdGl2ZTsgcmVzdGFydGluZyBhbnl3YXlgKTsKCQkJCQl9LAoJCQkJ
CW9uQ2hlY2tFcnJvcjogKGVycikgPT4gewoJCQkJCQlyZXN0YXJ0UGVuZGluZyA9IGZhbHNlOwoJ
CQkJCQlwYXJhbXMubG9nUmVsb2FkLndhcm4oYHJlc3RhcnQgZGVmZXJyYWwgY2hlY2sgZmFpbGVk
ICgke1N0cmluZyhlcnIpfSk7IHJlc3RhcnRpbmcgZ2F0ZXdheSBub3dgKTsKCQkJCQl9CgkJCQl9
CgkJCX0pOwoJCX0gZWxzZSB7CgkJCXBhcmFtcy5sb2dSZWxvYWQud2FybihgY29uZmlnIGNoYW5n
ZSByZXF1aXJlcyBnYXRld2F5IHJlc3RhcnQgKCR7cmVhc29uc30pYCk7CgkJCWlmICghZW1pdEdh
dGV3YXlSZXN0YXJ0KCkpIHBhcmFtcy5sb2dSZWxvYWQuaW5mbygiZ2F0ZXdheSByZXN0YXJ0IGFs
cmVhZHkgc2NoZWR1bGVkOyBza2lwcGluZyBkdXBsaWNhdGUgc2lnbmFsIik7CgkJfQoJfTsKCXJl
dHVybiB7CgkJYXBwbHlIb3RSZWxvYWQsCgkJcmVxdWVzdEdhdGV3YXlSZXN0YXJ0Cgl9Owp9Ci8v
I2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dhdGV3YXkvc2VydmVyLXJ1bnRpbWUtY29uZmlnLnRz
CmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVHYXRld2F5UnVudGltZUNvbmZpZyhwYXJhbXMpIHsKCWNv
bnN0IGJpbmRNb2RlID0gcGFyYW1zLmJpbmQgPz8gcGFyYW1zLmNmZy5nYXRld2F5Py5iaW5kID8/
ICJsb29wYmFjayI7Cgljb25zdCBjdXN0b21CaW5kSG9zdCA9IHBhcmFtcy5jZmcuZ2F0ZXdheT8u
Y3VzdG9tQmluZEhvc3Q7Cgljb25zdCBiaW5kSG9zdCA9IHBhcmFtcy5ob3N0ID8/IGF3YWl0IHJl
c29sdmVHYXRld2F5QmluZEhvc3QoYmluZE1vZGUsIGN1c3RvbUJpbmRIb3N0KTsKCWlmIChiaW5k
TW9kZSA9PT0gImxvb3BiYWNrIiAmJiAhaXNMb29wYmFja0hvc3QoYmluZEhvc3QpKSB0aHJvdyBu
ZXcgRXJyb3IoYGdhdGV3YXkgYmluZD1sb29wYmFjayByZXNvbHZlZCB0byBub24tbG9vcGJhY2sg
aG9zdCAke2JpbmRIb3N0fTsgcmVmdXNpbmcgZmFsbGJhY2sgdG8gYSBuZXR3b3JrIGJpbmRgKTsK
CWlmIChiaW5kTW9kZSA9PT0gImN1c3RvbSIpIHsKCQljb25zdCBjb25maWd1cmVkQ3VzdG9tQmlu
ZEhvc3QgPSBjdXN0b21CaW5kSG9zdD8udHJpbSgpOwoJCWlmICghY29uZmlndXJlZEN1c3RvbUJp
bmRIb3N0KSB0aHJvdyBuZXcgRXJyb3IoImdhdGV3YXkuYmluZD1jdXN0b20gcmVxdWlyZXMgZ2F0
ZXdheS5jdXN0b21CaW5kSG9zdCIpOwoJCWlmICghaXNWYWxpZElQdjQoY29uZmlndXJlZEN1c3Rv
bUJpbmRIb3N0KSkgdGhyb3cgbmV3IEVycm9yKGBnYXRld2F5LmJpbmQ9Y3VzdG9tIHJlcXVpcmVz
IGEgdmFsaWQgSVB2NCBjdXN0b21CaW5kSG9zdCAoZ290ICR7Y29uZmlndXJlZEN1c3RvbUJpbmRI
b3N0fSlgKTsKCQlpZiAoYmluZEhvc3QgIT09IGNvbmZpZ3VyZWRDdXN0b21CaW5kSG9zdCkgdGhy
b3cgbmV3IEVycm9yKGBnYXRld2F5IGJpbmQ9Y3VzdG9tIHJlcXVlc3RlZCAke2NvbmZpZ3VyZWRD
dXN0b21CaW5kSG9zdH0gYnV0IHJlc29sdmVkICR7YmluZEhvc3R9OyByZWZ1c2luZyBmYWxsYmFj
a2ApOwoJfQoJY29uc3QgY29udHJvbFVpRW5hYmxlZCA9IHBhcmFtcy5jb250cm9sVWlFbmFibGVk
ID8/IHBhcmFtcy5jZmcuZ2F0ZXdheT8uY29udHJvbFVpPy5lbmFibGVkID8/IHRydWU7Cgljb25z
dCBvcGVuQWlDaGF0Q29tcGxldGlvbnNDb25maWcgPSBwYXJhbXMuY2ZnLmdhdGV3YXk/Lmh0dHA/
LmVuZHBvaW50cz8uY2hhdENvbXBsZXRpb25zOwoJY29uc3Qgb3BlbkFpQ2hhdENvbXBsZXRpb25z
RW5hYmxlZCA9IHBhcmFtcy5vcGVuQWlDaGF0Q29tcGxldGlvbnNFbmFibGVkID8/IG9wZW5BaUNo
YXRDb21wbGV0aW9uc0NvbmZpZz8uZW5hYmxlZCA/PyBmYWxzZTsKCWNvbnN0IG9wZW5SZXNwb25z
ZXNDb25maWcgPSBwYXJhbXMuY2ZnLmdhdGV3YXk/Lmh0dHA/LmVuZHBvaW50cz8ucmVzcG9uc2Vz
OwoJY29uc3Qgb3BlblJlc3BvbnNlc0VuYWJsZWQgPSBwYXJhbXMub3BlblJlc3BvbnNlc0VuYWJs
ZWQgPz8gb3BlblJlc3BvbnNlc0NvbmZpZz8uZW5hYmxlZCA/PyBmYWxzZTsKCWNvbnN0IHN0cmlj
dFRyYW5zcG9ydFNlY3VyaXR5Q29uZmlnID0gcGFyYW1zLmNmZy5nYXRld2F5Py5odHRwPy5zZWN1
cml0eUhlYWRlcnM/LnN0cmljdFRyYW5zcG9ydFNlY3VyaXR5OwoJY29uc3Qgc3RyaWN0VHJhbnNw
b3J0U2VjdXJpdHlIZWFkZXIgPSBzdHJpY3RUcmFuc3BvcnRTZWN1cml0eUNvbmZpZyA9PT0gZmFs
c2UgPyB2b2lkIDAgOiB0eXBlb2Ygc3RyaWN0VHJhbnNwb3J0U2VjdXJpdHlDb25maWcgPT09ICJz
dHJpbmciICYmIHN0cmljdFRyYW5zcG9ydFNlY3VyaXR5Q29uZmlnLnRyaW0oKS5sZW5ndGggPiAw
ID8gc3RyaWN0VHJhbnNwb3J0U2VjdXJpdHlDb25maWcudHJpbSgpIDogdm9pZCAwOwoJY29uc3Qg
Y29udHJvbFVpQmFzZVBhdGggPSBub3JtYWxpemVDb250cm9sVWlCYXNlUGF0aChwYXJhbXMuY2Zn
LmdhdGV3YXk/LmNvbnRyb2xVaT8uYmFzZVBhdGgpOwoJY29uc3QgY29udHJvbFVpUm9vdFJhdyA9
IHBhcmFtcy5jZmcuZ2F0ZXdheT8uY29udHJvbFVpPy5yb290OwoJY29uc3QgY29udHJvbFVpUm9v
dCA9IHR5cGVvZiBjb250cm9sVWlSb290UmF3ID09PSAic3RyaW5nIiAmJiBjb250cm9sVWlSb290
UmF3LnRyaW0oKS5sZW5ndGggPiAwID8gY29udHJvbFVpUm9vdFJhdy50cmltKCkgOiB2b2lkIDA7
Cgljb25zdCB0YWlsc2NhbGVDb25maWcgPSBtZXJnZUdhdGV3YXlUYWlsc2NhbGVDb25maWcocGFy
YW1zLmNmZy5nYXRld2F5Py50YWlsc2NhbGUgPz8ge30sIHBhcmFtcy50YWlsc2NhbGUgPz8ge30p
OwoJY29uc3QgdGFpbHNjYWxlTW9kZSA9IHRhaWxzY2FsZUNvbmZpZy5tb2RlID8/ICJvZmYiOwoJ
Y29uc3QgcmVzb2x2ZWRBdXRoID0gcmVzb2x2ZUdhdGV3YXlBdXRoKHsKCQlhdXRoQ29uZmlnOiBw
YXJhbXMuY2ZnLmdhdGV3YXk/LmF1dGgsCgkJYXV0aE92ZXJyaWRlOiBwYXJhbXMuYXV0aCwKCQll
bnY6IHByb2Nlc3MuZW52LAoJCXRhaWxzY2FsZU1vZGUKCX0pOwoJY29uc3QgYXV0aE1vZGUgPSBy
ZXNvbHZlZEF1dGgubW9kZTsKCWNvbnN0IGhhc1Rva2VuID0gdHlwZW9mIHJlc29sdmVkQXV0aC50
b2tlbiA9PT0gInN0cmluZyIgJiYgcmVzb2x2ZWRBdXRoLnRva2VuLnRyaW0oKS5sZW5ndGggPiAw
OwoJY29uc3QgaGFzUGFzc3dvcmQgPSB0eXBlb2YgcmVzb2x2ZWRBdXRoLnBhc3N3b3JkID09PSAi
c3RyaW5nIiAmJiByZXNvbHZlZEF1dGgucGFzc3dvcmQudHJpbSgpLmxlbmd0aCA+IDA7Cgljb25z
dCBoYXNTaGFyZWRTZWNyZXQgPSBhdXRoTW9kZSA9PT0gInRva2VuIiAmJiBoYXNUb2tlbiB8fCBh
dXRoTW9kZSA9PT0gInBhc3N3b3JkIiAmJiBoYXNQYXNzd29yZDsKCWNvbnN0IGhvb2tzQ29uZmln
ID0gcmVzb2x2ZUhvb2tzQ29uZmlnKHBhcmFtcy5jZmcpOwoJY29uc3QgY2FudmFzSG9zdEVuYWJs
ZWQgPSBwcm9jZXNzLmVudi5PUEVOQ0xBV19TS0lQX0NBTlZBU19IT1NUICE9PSAiMSIgJiYgcGFy
YW1zLmNmZy5jYW52YXNIb3N0Py5lbmFibGVkICE9PSBmYWxzZTsKCWNvbnN0IHRydXN0ZWRQcm94
aWVzID0gcGFyYW1zLmNmZy5nYXRld2F5Py50cnVzdGVkUHJveGllcyA/PyBbXTsKCWNvbnN0IGNv
bnRyb2xVaUFsbG93ZWRPcmlnaW5zID0gKHBhcmFtcy5jZmcuZ2F0ZXdheT8uY29udHJvbFVpPy5h
bGxvd2VkT3JpZ2lucyA/PyBbXSkubWFwKCh2YWx1ZSkgPT4gdmFsdWUudHJpbSgpKS5maWx0ZXIo
Qm9vbGVhbik7Cgljb25zdCBkYW5nZXJvdXNseUFsbG93SG9zdEhlYWRlck9yaWdpbkZhbGxiYWNr
ID0gcGFyYW1zLmNmZy5nYXRld2F5Py5jb250cm9sVWk/LmRhbmdlcm91c2x5QWxsb3dIb3N0SGVh
ZGVyT3JpZ2luRmFsbGJhY2sgPT09IHRydWU7Cglhc3NlcnRHYXRld2F5QXV0aENvbmZpZ3VyZWQo
cmVzb2x2ZWRBdXRoLCBwYXJhbXMuY2ZnLmdhdGV3YXk/LmF1dGgpOwoJaWYgKHRhaWxzY2FsZU1v
ZGUgPT09ICJmdW5uZWwiICYmIGF1dGhNb2RlICE9PSAicGFzc3dvcmQiKSB0aHJvdyBuZXcgRXJy
b3IoInRhaWxzY2FsZSBmdW5uZWwgcmVxdWlyZXMgZ2F0ZXdheSBhdXRoIG1vZGU9cGFzc3dvcmQg
KHNldCBnYXRld2F5LmF1dGgucGFzc3dvcmQgb3IgT1BFTkNMQVdfR0FURVdBWV9QQVNTV09SRCki
KTsKCWlmICh0YWlsc2NhbGVNb2RlICE9PSAib2ZmIiAmJiAhaXNMb29wYmFja0hvc3QoYmluZEhv
c3QpKSB0aHJvdyBuZXcgRXJyb3IoInRhaWxzY2FsZSBzZXJ2ZS9mdW5uZWwgcmVxdWlyZXMgZ2F0
ZXdheSBiaW5kPWxvb3BiYWNrICgxMjcuMC4wLjEpIik7CglpZiAoIWlzTG9vcGJhY2tIb3N0KGJp
bmRIb3N0KSAmJiAhaGFzU2hhcmVkU2VjcmV0ICYmIGF1dGhNb2RlICE9PSAidHJ1c3RlZC1wcm94
eSIpIHRocm93IG5ldyBFcnJvcihgcmVmdXNpbmcgdG8gYmluZCBnYXRld2F5IHRvICR7YmluZEhv
c3R9OiR7cGFyYW1zLnBvcnR9IHdpdGhvdXQgYXV0aCAoc2V0IGdhdGV3YXkuYXV0aC50b2tlbi9w
YXNzd29yZCwgb3Igc2V0IE9QRU5DTEFXX0dBVEVXQVlfVE9LRU4vT1BFTkNMQVdfR0FURVdBWV9Q
QVNTV09SRClgKTsKCWlmIChjb250cm9sVWlFbmFibGVkICYmICFpc0xvb3BiYWNrSG9zdChiaW5k
SG9zdCkgJiYgY29udHJvbFVpQWxsb3dlZE9yaWdpbnMubGVuZ3RoID09PSAwICYmICFkYW5nZXJv
dXNseUFsbG93SG9zdEhlYWRlck9yaWdpbkZhbGxiYWNrKSB0aHJvdyBuZXcgRXJyb3IoIm5vbi1s
b29wYmFjayBDb250cm9sIFVJIHJlcXVpcmVzIGdhdGV3YXkuY29udHJvbFVpLmFsbG93ZWRPcmln
aW5zIChzZXQgZXhwbGljaXQgb3JpZ2lucyksIG9yIHNldCBnYXRld2F5LmNvbnRyb2xVaS5kYW5n
ZXJvdXNseUFsbG93SG9zdEhlYWRlck9yaWdpbkZhbGxiYWNrPXRydWUgdG8gdXNlIEhvc3QtaGVh
ZGVyIG9yaWdpbiBmYWxsYmFjayBtb2RlIik7CglpZiAoYXV0aE1vZGUgPT09ICJ0cnVzdGVkLXBy
b3h5IikgewoJCWlmICh0cnVzdGVkUHJveGllcy5sZW5ndGggPT09IDApIHRocm93IG5ldyBFcnJv
cigiZ2F0ZXdheSBhdXRoIG1vZGU9dHJ1c3RlZC1wcm94eSByZXF1aXJlcyBnYXRld2F5LnRydXN0
ZWRQcm94aWVzIHRvIGJlIGNvbmZpZ3VyZWQgd2l0aCBhdCBsZWFzdCBvbmUgcHJveHkgSVAiKTsK
CQlpZiAoaXNMb29wYmFja0hvc3QoYmluZEhvc3QpKSB7CgkJCWlmICghKGlzVHJ1c3RlZFByb3h5
QWRkcmVzcygiMTI3LjAuMC4xIiwgdHJ1c3RlZFByb3hpZXMpIHx8IGlzVHJ1c3RlZFByb3h5QWRk
cmVzcygiOjoxIiwgdHJ1c3RlZFByb3hpZXMpKSkgdGhyb3cgbmV3IEVycm9yKCJnYXRld2F5IGF1
dGggbW9kZT10cnVzdGVkLXByb3h5IHdpdGggYmluZD1sb29wYmFjayByZXF1aXJlcyBnYXRld2F5
LnRydXN0ZWRQcm94aWVzIHRvIGluY2x1ZGUgMTI3LjAuMC4xLCA6OjEsIG9yIGEgbG9vcGJhY2sg
Q0lEUiIpOwoJCX0KCX0KCXJldHVybiB7CgkJYmluZEhvc3QsCgkJY29udHJvbFVpRW5hYmxlZCwK
CQlvcGVuQWlDaGF0Q29tcGxldGlvbnNFbmFibGVkLAoJCW9wZW5BaUNoYXRDb21wbGV0aW9uc0Nv
bmZpZzogb3BlbkFpQ2hhdENvbXBsZXRpb25zQ29uZmlnID8gewoJCQkuLi5vcGVuQWlDaGF0Q29t
cGxldGlvbnNDb25maWcsCgkJCWVuYWJsZWQ6IG9wZW5BaUNoYXRDb21wbGV0aW9uc0VuYWJsZWQK
CQl9IDogdm9pZCAwLAoJCW9wZW5SZXNwb25zZXNFbmFibGVkLAoJCW9wZW5SZXNwb25zZXNDb25m
aWc6IG9wZW5SZXNwb25zZXNDb25maWcgPyB7CgkJCS4uLm9wZW5SZXNwb25zZXNDb25maWcsCgkJ
CWVuYWJsZWQ6IG9wZW5SZXNwb25zZXNFbmFibGVkCgkJfSA6IHZvaWQgMCwKCQlzdHJpY3RUcmFu
c3BvcnRTZWN1cml0eUhlYWRlciwKCQljb250cm9sVWlCYXNlUGF0aCwKCQljb250cm9sVWlSb290
LAoJCXJlc29sdmVkQXV0aCwKCQlhdXRoTW9kZSwKCQl0YWlsc2NhbGVDb25maWcsCgkJdGFpbHNj
YWxlTW9kZSwKCQlob29rc0NvbmZpZywKCQljYW52YXNIb3N0RW5hYmxlZAoJfTsKfQovLyNlbmRy
ZWdpb24KLy8jcmVnaW9uIHNyYy9jYW52YXMtaG9zdC9zZXJ2ZXIudHMKZnVuY3Rpb24gZGVmYXVs
dEluZGV4SFRNTCgpIHsKCXJldHVybiBgPCFkb2N0eXBlIGh0bWw+CjxtZXRhIGNoYXJzZXQ9InV0
Zi04IiAvPgo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRo
LCBpbml0aWFsLXNjYWxlPTEiIC8+Cjx0aXRsZT5PcGVuQ2xhdyBDYW52YXM8L3RpdGxlPgo8c3R5
bGU+CiAgaHRtbCwgYm9keSB7IGhlaWdodDogMTAwJTsgbWFyZ2luOiAwOyBiYWNrZ3JvdW5kOiAj
MDAwOyBjb2xvcjogI2ZmZjsgZm9udDogMTZweC8xLjQgLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNT
eXN0ZW1Gb250LCBzeXN0ZW0tdWksIFNlZ29lIFVJLCBSb2JvdG8sIEhlbHZldGljYSwgQXJpYWws
IHNhbnMtc2VyaWY7IH0KICAud3JhcCB7IG1pbi1oZWlnaHQ6IDEwMCU7IGRpc3BsYXk6IGdyaWQ7
IHBsYWNlLWl0ZW1zOiBjZW50ZXI7IHBhZGRpbmc6IDI0cHg7IH0KICAuY2FyZCB7IHdpZHRoOiBt
aW4oNzIwcHgsIDEwMCUpOyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDYpOyBib3Jk
ZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTApOyBib3JkZXItcmFkaXVzOiAxNnB4
OyBwYWRkaW5nOiAxOHB4IDE4cHggMTRweDsgfQogIC50aXRsZSB7IGRpc3BsYXk6IGZsZXg7IGFs
aWduLWl0ZW1zOiBiYXNlbGluZTsgZ2FwOiAxMHB4OyB9CiAgaDEgeyBtYXJnaW46IDA7IGZvbnQt
c2l6ZTogMjJweDsgbGV0dGVyLXNwYWNpbmc6IDAuMnB4OyB9CiAgLnN1YiB7IG9wYWNpdHk6IDAu
NzU7IGZvbnQtc2l6ZTogMTNweDsgfQogIC5yb3cgeyBkaXNwbGF5OiBmbGV4OyBnYXA6IDEwcHg7
IGZsZXgtd3JhcDogd3JhcDsgbWFyZ2luLXRvcDogMTRweDsgfQogIGJ1dHRvbiB7IGFwcGVhcmFu
Y2U6IG5vbmU7IGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xNCk7IGJhY2tn
cm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4xMCk7IGNvbG9yOiAjZmZmOyBwYWRkaW5nOiAxMHB4
IDEycHg7IGJvcmRlci1yYWRpdXM6IDEycHg7IGZvbnQtd2VpZ2h0OiA2MDA7IGN1cnNvcjogcG9p
bnRlcjsgfQogIGJ1dHRvbjphY3RpdmUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMXB4KTsgfQog
IC5vayB7IGNvbG9yOiAjMjRlMDhhOyB9CiAgLmJhZCB7IGNvbG9yOiAjZmY1YzVjOyB9CiAgLmxv
ZyB7IG1hcmdpbi10b3A6IDE0cHg7IG9wYWNpdHk6IDAuODU7IGZvbnQ6IDEycHgvMS40IHVpLW1v
bm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCAiTGliZXJh
dGlvbiBNb25vIiwgbW9ub3NwYWNlOyB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7IGJhY2tncm91bmQ6
IHJnYmEoMCwwLDAsMC4zNSk7IGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4w
OCk7IHBhZGRpbmc6IDEwcHg7IGJvcmRlci1yYWRpdXM6IDEycHg7IH0KPC9zdHlsZT4KPGRpdiBj
bGFzcz0id3JhcCI+CiAgPGRpdiBjbGFzcz0iY2FyZCI+CiAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+
CiAgICAgIDxoMT5PcGVuQ2xhdyBDYW52YXM8L2gxPgogICAgICA8ZGl2IGNsYXNzPSJzdWIiPklu
dGVyYWN0aXZlIHRlc3QgcGFnZSAoYXV0by1yZWxvYWQgZW5hYmxlZCk8L2Rpdj4KICAgIDwvZGl2
PgoKICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgIDxidXR0b24gaWQ9ImJ0bi1oZWxsbyI+SGVs
bG88L2J1dHRvbj4KICAgICAgPGJ1dHRvbiBpZD0iYnRuLXRpbWUiPlRpbWU8L2J1dHRvbj4KICAg
ICAgPGJ1dHRvbiBpZD0iYnRuLXBob3RvIj5QaG90bzwvYnV0dG9uPgogICAgICA8YnV0dG9uIGlk
PSJidG4tZGFsZWsiPkRhbGVrPC9idXR0b24+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJzdGF0
dXMiIGNsYXNzPSJzdWIiIHN0eWxlPSJtYXJnaW4tdG9wOiAxMHB4OyI+PC9kaXY+CiAgICA8ZGl2
IGlkPSJsb2ciIGNsYXNzPSJsb2ciPlJlYWR5LjwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KPHNjcmlw
dD4KKCgpID0+IHsKICBjb25zdCBsb2dFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2ci
KTsKICBjb25zdCBzdGF0dXNFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdGF0dXMiKTsK
ICBjb25zdCBsb2cgPSAobXNnKSA9PiB7IGxvZ0VsLnRleHRDb250ZW50ID0gU3RyaW5nKG1zZyk7
IH07CgogIGNvbnN0IGhhc0lPUyA9ICgpID0+CiAgICAhISgKICAgICAgd2luZG93LndlYmtpdCAm
JgogICAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycyAmJgogICAgICB3aW5kb3cud2Vi
a2l0Lm1lc3NhZ2VIYW5kbGVycy5vcGVuY2xhd0NhbnZhc0EyVUlBY3Rpb24KICAgICk7CiAgY29u
c3QgaGFzQW5kcm9pZCA9ICgpID0+CiAgICAhISgKICAgICAgKHdpbmRvdy5vcGVuY2xhd0NhbnZh
c0EyVUlBY3Rpb24gJiYKICAgICAgICB0eXBlb2Ygd2luZG93Lm9wZW5jbGF3Q2FudmFzQTJVSUFj
dGlvbi5wb3N0TWVzc2FnZSA9PT0gImZ1bmN0aW9uIikKICAgICk7CiAgY29uc3QgaGFzSGVscGVy
ID0gKCkgPT4gdHlwZW9mIHdpbmRvdy5vcGVuY2xhd1NlbmRVc2VyQWN0aW9uID09PSAiZnVuY3Rp
b24iOwogIHN0YXR1c0VsLmlubmVySFRNTCA9CiAgICAiQnJpZGdlOiAiICsKICAgIChoYXNIZWxw
ZXIoKSA/ICI8c3BhbiBjbGFzcz0nb2snPnJlYWR5PC9zcGFuPiIgOiAiPHNwYW4gY2xhc3M9J2Jh
ZCc+bWlzc2luZzwvc3Bhbj4iKSArCiAgICAiIMK3IGlPUz0iICsgKGhhc0lPUygpID8gInllcyIg
OiAibm8iKSArCiAgICAiIMK3IEFuZHJvaWQ9IiArIChoYXNBbmRyb2lkKCkgPyAieWVzIiA6ICJu
byIpOwoKICBjb25zdCBvblN0YXR1cyA9IChldikgPT4gewogICAgY29uc3QgZCA9IGV2ICYmIGV2
LmRldGFpbCB8fCB7fTsKICAgIGxvZygiQWN0aW9uIHN0YXR1czogaWQ9IiArIChkLmlkIHx8ICI/
IikgKyAiIG9rPSIgKyBTdHJpbmcoISFkLm9rKSArIChkLmVycm9yID8gKCIgZXJyb3I9IiArIGQu
ZXJyb3IpIDogIiIpKTsKICB9OwogIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJvcGVuY2xhdzph
MnVpLWFjdGlvbi1zdGF0dXMiLCBvblN0YXR1cyk7CgogIGZ1bmN0aW9uIHNlbmQobmFtZSwgc291
cmNlQ29tcG9uZW50SWQpIHsKICAgIGlmICghaGFzSGVscGVyKCkpIHsKICAgICAgbG9nKCJObyBh
Y3Rpb24gYnJpZGdlIGZvdW5kLiBFbnN1cmUgeW91J3JlIHZpZXdpbmcgdGhpcyBvbiBhbiBpT1Mv
QW5kcm9pZCBPcGVuQ2xhdyBub2RlIGNhbnZhcy4iKTsKICAgICAgcmV0dXJuOwogICAgfQogICAg
Y29uc3Qgc2VuZFVzZXJBY3Rpb24gPQogICAgICB0eXBlb2Ygd2luZG93Lm9wZW5jbGF3U2VuZFVz
ZXJBY3Rpb24gPT09ICJmdW5jdGlvbiIKICAgICAgICA/IHdpbmRvdy5vcGVuY2xhd1NlbmRVc2Vy
QWN0aW9uCiAgICAgICAgOiB1bmRlZmluZWQ7CiAgICBjb25zdCBvayA9IHNlbmRVc2VyQWN0aW9u
KHsKICAgICAgbmFtZSwKICAgICAgc3VyZmFjZUlkOiAibWFpbiIsCiAgICAgIHNvdXJjZUNvbXBv
bmVudElkLAogICAgICBjb250ZXh0OiB7IHQ6IERhdGUubm93KCkgfSwKICAgIH0pOwogICAgbG9n
KG9rID8gKCJTZW50IGFjdGlvbjogIiArIG5hbWUpIDogKCJGYWlsZWQgdG8gc2VuZCBhY3Rpb246
ICIgKyBuYW1lKSk7CiAgfQoKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnRuLWhlbGxvIiku
b25jbGljayA9ICgpID0+IHNlbmQoImhlbGxvIiwgImRlbW8uaGVsbG8iKTsKICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiYnRuLXRpbWUiKS5vbmNsaWNrID0gKCkgPT4gc2VuZCgidGltZSIsICJk
ZW1vLnRpbWUiKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnRuLXBob3RvIikub25jbGlj
ayA9ICgpID0+IHNlbmQoInBob3RvIiwgImRlbW8ucGhvdG8iKTsKICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiYnRuLWRhbGVrIikub25jbGljayA9ICgpID0+IHNlbmQoImRhbGVrIiwgImRlbW8u
ZGFsZWsiKTsKfSkoKTsKPFwvc2NyaXB0PgpgOwp9CmZ1bmN0aW9uIGlzRGlzYWJsZWRCeUVudigp
IHsKCWlmIChpc1RydXRoeUVudlZhbHVlKHByb2Nlc3MuZW52Lk9QRU5DTEFXX1NLSVBfQ0FOVkFT
X0hPU1QpKSByZXR1cm4gdHJ1ZTsKCWlmIChpc1RydXRoeUVudlZhbHVlKHByb2Nlc3MuZW52Lk9Q
RU5DTEFXX1NLSVBfQ0FOVkFTX0hPU1QpKSByZXR1cm4gdHJ1ZTsKCWlmIChwcm9jZXNzLmVudi5W
SVRFU1QpIHJldHVybiB0cnVlOwoJcmV0dXJuIGZhbHNlOwp9CmZ1bmN0aW9uIG5vcm1hbGl6ZUJh
c2VQYXRoKHJhd1BhdGgpIHsKCWNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVVcmxQYXRoKChy
YXdQYXRoID8/ICIvX19vcGVuY2xhd19fL2NhbnZhcyIpLnRyaW0oKSB8fCAiL19fb3BlbmNsYXdf
Xy9jYW52YXMiKTsKCWlmIChub3JtYWxpemVkID09PSAiLyIpIHJldHVybiAiLyI7CglyZXR1cm4g
bm9ybWFsaXplZC5yZXBsYWNlKC9cLyskLywgIiIpOwp9CmFzeW5jIGZ1bmN0aW9uIHByZXBhcmVD
YW52YXNSb290KHJvb3REaXIpIHsKCWF3YWl0IGVuc3VyZURpcihyb290RGlyKTsKCWNvbnN0IHJv
b3RSZWFsID0gYXdhaXQgZnMkMS5yZWFscGF0aChyb290RGlyKTsKCXRyeSB7CgkJY29uc3QgaW5k
ZXhQYXRoID0gcGF0aC5qb2luKHJvb3RSZWFsLCAiaW5kZXguaHRtbCIpOwoJCWF3YWl0IGZzJDEu
c3RhdChpbmRleFBhdGgpOwoJfSBjYXRjaCB7CgkJdHJ5IHsKCQkJYXdhaXQgZnMkMS53cml0ZUZp
bGUocGF0aC5qb2luKHJvb3RSZWFsLCAiaW5kZXguaHRtbCIpLCBkZWZhdWx0SW5kZXhIVE1MKCks
ICJ1dGY4Iik7CgkJfSBjYXRjaCB7fQoJfQoJcmV0dXJuIHJvb3RSZWFsOwp9CmZ1bmN0aW9uIHJl
c29sdmVEZWZhdWx0Q2FudmFzUm9vdCgpIHsKCWNvbnN0IGNhbmRpZGF0ZXMgPSBbcGF0aC5qb2lu
KHJlc29sdmVTdGF0ZURpcigpLCAiY2FudmFzIildOwoJcmV0dXJuIGNhbmRpZGF0ZXMuZmluZCgo
ZGlyKSA9PiB7CgkJdHJ5IHsKCQkJcmV0dXJuIGZzU3luYy5zdGF0U3luYyhkaXIpLmlzRGlyZWN0
b3J5KCk7CgkJfSBjYXRjaCB7CgkJCXJldHVybiBmYWxzZTsKCQl9Cgl9KSA/PyBjYW5kaWRhdGVz
WzBdOwp9CmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUNhbnZhc0hvc3RIYW5kbGVyKG9wdHMpIHsKCWNv
bnN0IGJhc2VQYXRoID0gbm9ybWFsaXplQmFzZVBhdGgob3B0cy5iYXNlUGF0aCk7CglpZiAoaXNE
aXNhYmxlZEJ5RW52KCkgJiYgb3B0cy5hbGxvd0luVGVzdHMgIT09IHRydWUpIHJldHVybiB7CgkJ
cm9vdERpcjogIiIsCgkJYmFzZVBhdGgsCgkJaGFuZGxlSHR0cFJlcXVlc3Q6IGFzeW5jICgpID0+
IGZhbHNlLAoJCWhhbmRsZVVwZ3JhZGU6ICgpID0+IGZhbHNlLAoJCWNsb3NlOiBhc3luYyAoKSA9
PiB7fQoJfTsKCWNvbnN0IHJvb3REaXIgPSByZXNvbHZlVXNlclBhdGgob3B0cy5yb290RGlyID8/
IHJlc29sdmVEZWZhdWx0Q2FudmFzUm9vdCgpKTsKCWNvbnN0IHJvb3RSZWFsID0gYXdhaXQgcHJl
cGFyZUNhbnZhc1Jvb3Qocm9vdERpcik7Cgljb25zdCBsaXZlUmVsb2FkID0gb3B0cy5saXZlUmVs
b2FkICE9PSBmYWxzZTsKCWNvbnN0IHRlc3RNb2RlID0gb3B0cy5hbGxvd0luVGVzdHMgPT09IHRy
dWU7Cgljb25zdCByZWxvYWREZWJvdW5jZU1zID0gdGVzdE1vZGUgPyAxMiA6IDc1OwoJY29uc3Qg
d3JpdGVTdGFiaWxpdHlUaHJlc2hvbGRNcyA9IHRlc3RNb2RlID8gMTIgOiA3NTsKCWNvbnN0IHdy
aXRlUG9sbEludGVydmFsTXMgPSB0ZXN0TW9kZSA/IDUgOiAxMDsKCWNvbnN0IHdzcyA9IGxpdmVS
ZWxvYWQgPyBuZXcgV2ViU29ja2V0U2VydmVyKHsgbm9TZXJ2ZXI6IHRydWUgfSkgOiBudWxsOwoJ
Y29uc3Qgc29ja2V0cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7CglpZiAod3NzKSB3c3Mu
b24oImNvbm5lY3Rpb24iLCAod3MpID0+IHsKCQlzb2NrZXRzLmFkZCh3cyk7CgkJd3Mub24oImNs
b3NlIiwgKCkgPT4gc29ja2V0cy5kZWxldGUod3MpKTsKCX0pOwoJbGV0IGRlYm91bmNlID0gbnVs
bDsKCWNvbnN0IGJyb2FkY2FzdFJlbG9hZCA9ICgpID0+IHsKCQlpZiAoIWxpdmVSZWxvYWQpIHJl
dHVybjsKCQlmb3IgKGNvbnN0IHdzIG9mIHNvY2tldHMpIHRyeSB7CgkJCXdzLnNlbmQoInJlbG9h
ZCIpOwoJCX0gY2F0Y2gge30KCX07Cgljb25zdCBzY2hlZHVsZVJlbG9hZCA9ICgpID0+IHsKCQlp
ZiAoZGVib3VuY2UpIGNsZWFyVGltZW91dChkZWJvdW5jZSk7CgkJZGVib3VuY2UgPSBzZXRUaW1l
b3V0KCgpID0+IHsKCQkJZGVib3VuY2UgPSBudWxsOwoJCQlicm9hZGNhc3RSZWxvYWQoKTsKCQl9
LCByZWxvYWREZWJvdW5jZU1zKTsKCQlkZWJvdW5jZS51bnJlZj8uKCk7Cgl9OwoJbGV0IHdhdGNo
ZXJDbG9zZWQgPSBmYWxzZTsKCWNvbnN0IHdhdGNoZXIgPSBsaXZlUmVsb2FkID8gY2hva2lkYXIu
d2F0Y2gocm9vdFJlYWwsIHsKCQlpZ25vcmVJbml0aWFsOiB0cnVlLAoJCWF3YWl0V3JpdGVGaW5p
c2g6IHsKCQkJc3RhYmlsaXR5VGhyZXNob2xkOiB3cml0ZVN0YWJpbGl0eVRocmVzaG9sZE1zLAoJ
CQlwb2xsSW50ZXJ2YWw6IHdyaXRlUG9sbEludGVydmFsTXMKCQl9LAoJCXVzZVBvbGxpbmc6IHRl
c3RNb2RlLAoJCWlnbm9yZWQ6IFsvKF58W1xcL10pXC4uLywgLyhefFtcXC9dKW5vZGVfbW9kdWxl
cyhbXFwvXXwkKS9dCgl9KSA6IG51bGw7Cgl3YXRjaGVyPy5vbigiYWxsIiwgKCkgPT4gc2NoZWR1
bGVSZWxvYWQoKSk7Cgl3YXRjaGVyPy5vbigiZXJyb3IiLCAoZXJyKSA9PiB7CgkJaWYgKHdhdGNo
ZXJDbG9zZWQpIHJldHVybjsKCQl3YXRjaGVyQ2xvc2VkID0gdHJ1ZTsKCQlvcHRzLnJ1bnRpbWUu
ZXJyb3IoYGNhbnZhc0hvc3Qgd2F0Y2hlciBlcnJvcjogJHtTdHJpbmcoZXJyKX0gKGxpdmUgcmVs
b2FkIGRpc2FibGVkOyBjb25zaWRlciBjYW52YXNIb3N0LmxpdmVSZWxvYWQ9ZmFsc2Ugb3IgYSBz
bWFsbGVyIGNhbnZhc0hvc3Qucm9vdClgKTsKCQl3YXRjaGVyLmNsb3NlKCkuY2F0Y2goKCkgPT4g
e30pOwoJfSk7Cgljb25zdCBoYW5kbGVVcGdyYWRlID0gKHJlcSwgc29ja2V0LCBoZWFkKSA9PiB7
CgkJaWYgKCF3c3MpIHJldHVybiBmYWxzZTsKCQlpZiAobmV3IFVSTChyZXEudXJsID8/ICIvIiwg
Imh0dHA6Ly9sb2NhbGhvc3QiKS5wYXRobmFtZSAhPT0gIi9fX29wZW5jbGF3X18vd3MiKSByZXR1
cm4gZmFsc2U7CgkJd3NzLmhhbmRsZVVwZ3JhZGUocmVxLCBzb2NrZXQsIGhlYWQsICh3cykgPT4g
ewoJCQl3c3MuZW1pdCgiY29ubmVjdGlvbiIsIHdzLCByZXEpOwoJCX0pOwoJCXJldHVybiB0cnVl
OwoJfTsKCWNvbnN0IGhhbmRsZUh0dHBSZXF1ZXN0ID0gYXN5bmMgKHJlcSwgcmVzKSA9PiB7CgkJ
Y29uc3QgdXJsUmF3ID0gcmVxLnVybDsKCQlpZiAoIXVybFJhdykgcmV0dXJuIGZhbHNlOwoJCXRy
eSB7CgkJCWNvbnN0IHVybCA9IG5ldyBVUkwodXJsUmF3LCAiaHR0cDovL2xvY2FsaG9zdCIpOwoJ
CQlpZiAodXJsLnBhdGhuYW1lID09PSAiL19fb3BlbmNsYXdfXy93cyIpIHsKCQkJCXJlcy5zdGF0
dXNDb2RlID0gbGl2ZVJlbG9hZCA/IDQyNiA6IDQwNDsKCQkJCXJlcy5zZXRIZWFkZXIoIkNvbnRl
bnQtVHlwZSIsICJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iik7CgkJCQlyZXMuZW5kKGxpdmVS
ZWxvYWQgPyAidXBncmFkZSByZXF1aXJlZCIgOiAibm90IGZvdW5kIik7CgkJCQlyZXR1cm4gdHJ1
ZTsKCQkJfQoJCQlsZXQgdXJsUGF0aCA9IHVybC5wYXRobmFtZTsKCQkJaWYgKGJhc2VQYXRoICE9
PSAiLyIpIHsKCQkJCWlmICh1cmxQYXRoICE9PSBiYXNlUGF0aCAmJiAhdXJsUGF0aC5zdGFydHNX
aXRoKGAke2Jhc2VQYXRofS9gKSkgcmV0dXJuIGZhbHNlOwoJCQkJdXJsUGF0aCA9IHVybFBhdGgg
PT09IGJhc2VQYXRoID8gIi8iIDogdXJsUGF0aC5zbGljZShiYXNlUGF0aC5sZW5ndGgpIHx8ICIv
IjsKCQkJfQoJCQlpZiAocmVxLm1ldGhvZCAhPT0gIkdFVCIgJiYgcmVxLm1ldGhvZCAhPT0gIkhF
QUQiKSB7CgkJCQlyZXMuc3RhdHVzQ29kZSA9IDQwNTsKCQkJCXJlcy5zZXRIZWFkZXIoIkNvbnRl
bnQtVHlwZSIsICJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iik7CgkJCQlyZXMuZW5kKCJNZXRo
b2QgTm90IEFsbG93ZWQiKTsKCQkJCXJldHVybiB0cnVlOwoJCQl9CgkJCWNvbnN0IG9wZW5lZCA9
IGF3YWl0IHJlc29sdmVGaWxlV2l0aGluUm9vdChyb290UmVhbCwgdXJsUGF0aCk7CgkJCWlmICgh
b3BlbmVkKSB7CgkJCQlpZiAodXJsUGF0aCA9PT0gIi8iIHx8IHVybFBhdGguZW5kc1dpdGgoIi8i
KSkgewoJCQkJCXJlcy5zdGF0dXNDb2RlID0gNDA0OwoJCQkJCXJlcy5zZXRIZWFkZXIoIkNvbnRl
bnQtVHlwZSIsICJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiKTsKCQkJCQlyZXMuZW5kKGA8IWRv
Y3R5cGUgaHRtbD48bWV0YSBjaGFyc2V0PSJ1dGYtOCIgLz48dGl0bGU+T3BlbkNsYXcgQ2FudmFz
PC90aXRsZT48cHJlPk1pc3NpbmcgZmlsZS5cbkNyZWF0ZSAke3Jvb3REaXJ9L2luZGV4Lmh0bWw8
L3ByZT5gKTsKCQkJCQlyZXR1cm4gdHJ1ZTsKCQkJCX0KCQkJCXJlcy5zdGF0dXNDb2RlID0gNDA0
OwoJCQkJcmVzLnNldEhlYWRlcigiQ29udGVudC1UeXBlIiwgInRleHQvcGxhaW47IGNoYXJzZXQ9
dXRmLTgiKTsKCQkJCXJlcy5lbmQoIm5vdCBmb3VuZCIpOwoJCQkJcmV0dXJuIHRydWU7CgkJCX0K
CQkJY29uc3QgeyBoYW5kbGUsIHJlYWxQYXRoIH0gPSBvcGVuZWQ7CgkJCWxldCBkYXRhOwoJCQl0
cnkgewoJCQkJZGF0YSA9IGF3YWl0IGhhbmRsZS5yZWFkRmlsZSgpOwoJCQl9IGZpbmFsbHkgewoJ
CQkJYXdhaXQgaGFuZGxlLmNsb3NlKCkuY2F0Y2goKCkgPT4ge30pOwoJCQl9CgkJCWNvbnN0IGxv
d2VyID0gcmVhbFBhdGgudG9Mb3dlckNhc2UoKTsKCQkJY29uc3QgbWltZSA9IGxvd2VyLmVuZHNX
aXRoKCIuaHRtbCIpIHx8IGxvd2VyLmVuZHNXaXRoKCIuaHRtIikgPyAidGV4dC9odG1sIiA6IGF3
YWl0IGRldGVjdE1pbWUoeyBmaWxlUGF0aDogcmVhbFBhdGggfSkgPz8gImFwcGxpY2F0aW9uL29j
dGV0LXN0cmVhbSI7CgkJCXJlcy5zZXRIZWFkZXIoIkNhY2hlLUNvbnRyb2wiLCAibm8tc3RvcmUi
KTsKCQkJaWYgKG1pbWUgPT09ICJ0ZXh0L2h0bWwiKSB7CgkJCQljb25zdCBodG1sID0gZGF0YS50
b1N0cmluZygidXRmOCIpOwoJCQkJcmVzLnNldEhlYWRlcigiQ29udGVudC1UeXBlIiwgInRleHQv
aHRtbDsgY2hhcnNldD11dGYtOCIpOwoJCQkJcmVzLmVuZChsaXZlUmVsb2FkID8gaW5qZWN0Q2Fu
dmFzTGl2ZVJlbG9hZChodG1sKSA6IGh0bWwpOwoJCQkJcmV0dXJuIHRydWU7CgkJCX0KCQkJcmVz
LnNldEhlYWRlcigiQ29udGVudC1UeXBlIiwgbWltZSk7CgkJCXJlcy5lbmQoZGF0YSk7CgkJCXJl
dHVybiB0cnVlOwoJCX0gY2F0Y2ggKGVycikgewoJCQlvcHRzLnJ1bnRpbWUuZXJyb3IoYGNhbnZh
c0hvc3QgcmVxdWVzdCBmYWlsZWQ6ICR7U3RyaW5nKGVycil9YCk7CgkJCXJlcy5zdGF0dXNDb2Rl
ID0gNTAwOwoJCQlyZXMuc2V0SGVhZGVyKCJDb250ZW50LVR5cGUiLCAidGV4dC9wbGFpbjsgY2hh
cnNldD11dGYtOCIpOwoJCQlyZXMuZW5kKCJlcnJvciIpOwoJCQlyZXR1cm4gdHJ1ZTsKCQl9Cgl9
OwoJcmV0dXJuIHsKCQlyb290RGlyLAoJCWJhc2VQYXRoLAoJCWhhbmRsZUh0dHBSZXF1ZXN0LAoJ
CWhhbmRsZVVwZ3JhZGUsCgkJY2xvc2U6IGFzeW5jICgpID0+IHsKCQkJaWYgKGRlYm91bmNlKSBj
bGVhclRpbWVvdXQoZGVib3VuY2UpOwoJCQl3YXRjaGVyQ2xvc2VkID0gdHJ1ZTsKCQkJYXdhaXQg
d2F0Y2hlcj8uY2xvc2UoKS5jYXRjaCgoKSA9PiB7fSk7CgkJCWlmICh3c3MpIGF3YWl0IG5ldyBQ
cm9taXNlKChyZXNvbHZlKSA9PiB3c3MuY2xvc2UoKCkgPT4gcmVzb2x2ZSgpKSk7CgkJfQoJfTsK
fQovLyNlbmRyZWdpb24KLy8jcmVnaW9uIHNyYy9nYXRld2F5L3NlcnZlci1icm9hZGNhc3QudHMK
Y29uc3QgQURNSU5fU0NPUEUgPSAib3BlcmF0b3IuYWRtaW4iOwpjb25zdCBBUFBST1ZBTFNfU0NP
UEUgPSAib3BlcmF0b3IuYXBwcm92YWxzIjsKY29uc3QgUEFJUklOR19TQ09QRSA9ICJvcGVyYXRv
ci5wYWlyaW5nIjsKY29uc3QgRVZFTlRfU0NPUEVfR1VBUkRTID0gewoJImV4ZWMuYXBwcm92YWwu
cmVxdWVzdGVkIjogW0FQUFJPVkFMU19TQ09QRV0sCgkiZXhlYy5hcHByb3ZhbC5yZXNvbHZlZCI6
IFtBUFBST1ZBTFNfU0NPUEVdLAoJImRldmljZS5wYWlyLnJlcXVlc3RlZCI6IFtQQUlSSU5HX1ND
T1BFXSwKCSJkZXZpY2UucGFpci5yZXNvbHZlZCI6IFtQQUlSSU5HX1NDT1BFXSwKCSJub2RlLnBh
aXIucmVxdWVzdGVkIjogW1BBSVJJTkdfU0NPUEVdLAoJIm5vZGUucGFpci5yZXNvbHZlZCI6IFtQ
QUlSSU5HX1NDT1BFXQp9OwpmdW5jdGlvbiBoYXNFdmVudFNjb3BlKGNsaWVudCwgZXZlbnQpIHsK
CWNvbnN0IHJlcXVpcmVkID0gRVZFTlRfU0NPUEVfR1VBUkRTW2V2ZW50XTsKCWlmICghcmVxdWly
ZWQpIHJldHVybiB0cnVlOwoJaWYgKChjbGllbnQuY29ubmVjdC5yb2xlID8/ICJvcGVyYXRvciIp
ICE9PSAib3BlcmF0b3IiKSByZXR1cm4gZmFsc2U7Cgljb25zdCBzY29wZXMgPSBBcnJheS5pc0Fy
cmF5KGNsaWVudC5jb25uZWN0LnNjb3BlcykgPyBjbGllbnQuY29ubmVjdC5zY29wZXMgOiBbXTsK
CWlmIChzY29wZXMuaW5jbHVkZXMoQURNSU5fU0NPUEUpKSByZXR1cm4gdHJ1ZTsKCXJldHVybiBy
ZXF1aXJlZC5zb21lKChzY29wZSkgPT4gc2NvcGVzLmluY2x1ZGVzKHNjb3BlKSk7Cn0KZnVuY3Rp
b24gY3JlYXRlR2F0ZXdheUJyb2FkY2FzdGVyKHBhcmFtcykgewoJbGV0IHNlcSA9IDA7Cgljb25z
dCBicm9hZGNhc3RJbnRlcm5hbCA9IChldmVudCwgcGF5bG9hZCwgb3B0cywgdGFyZ2V0Q29ubklk
cykgPT4gewoJCWlmIChwYXJhbXMuY2xpZW50cy5zaXplID09PSAwKSByZXR1cm47CgkJY29uc3Qg
ZXZlbnRTZXEgPSBCb29sZWFuKHRhcmdldENvbm5JZHMpID8gdm9pZCAwIDogKytzZXE7CgkJY29u
c3QgZnJhbWUgPSBKU09OLnN0cmluZ2lmeSh7CgkJCXR5cGU6ICJldmVudCIsCgkJCWV2ZW50LAoJ
CQlwYXlsb2FkLAoJCQlzZXE6IGV2ZW50U2VxLAoJCQlzdGF0ZVZlcnNpb246IG9wdHM/LnN0YXRl
VmVyc2lvbgoJCX0pOwoJCWlmIChzaG91bGRMb2dXcygpKSB7CgkJCWNvbnN0IGxvZ01ldGEgPSB7
CgkJCQlldmVudCwKCQkJCXNlcTogZXZlbnRTZXEgPz8gInRhcmdldGVkIiwKCQkJCWNsaWVudHM6
IHBhcmFtcy5jbGllbnRzLnNpemUsCgkJCQl0YXJnZXRzOiB0YXJnZXRDb25uSWRzID8gdGFyZ2V0
Q29ubklkcy5zaXplIDogdm9pZCAwLAoJCQkJZHJvcElmU2xvdzogb3B0cz8uZHJvcElmU2xvdywK
CQkJCXByZXNlbmNlVmVyc2lvbjogb3B0cz8uc3RhdGVWZXJzaW9uPy5wcmVzZW5jZSwKCQkJCWhl
YWx0aFZlcnNpb246IG9wdHM/LnN0YXRlVmVyc2lvbj8uaGVhbHRoCgkJCX07CgkJCWlmIChldmVu
dCA9PT0gImFnZW50IikgT2JqZWN0LmFzc2lnbihsb2dNZXRhLCBzdW1tYXJpemVBZ2VudEV2ZW50
Rm9yV3NMb2cocGF5bG9hZCkpOwoJCQlsb2dXcygib3V0IiwgImV2ZW50IiwgbG9nTWV0YSk7CgkJ
fQoJCWZvciAoY29uc3QgYyBvZiBwYXJhbXMuY2xpZW50cykgewoJCQlpZiAodGFyZ2V0Q29ubklk
cyAmJiAhdGFyZ2V0Q29ubklkcy5oYXMoYy5jb25uSWQpKSBjb250aW51ZTsKCQkJaWYgKCFoYXNF
dmVudFNjb3BlKGMsIGV2ZW50KSkgY29udGludWU7CgkJCWNvbnN0IHNsb3cgPSBjLnNvY2tldC5i
dWZmZXJlZEFtb3VudCA+IE1BWF9CVUZGRVJFRF9CWVRFUzsKCQkJaWYgKHNsb3cgJiYgb3B0cz8u
ZHJvcElmU2xvdykgY29udGludWU7CgkJCWlmIChzbG93KSB7CgkJCQl0cnkgewoJCQkJCWMuc29j
a2V0LmNsb3NlKDEwMDgsICJzbG93IGNvbnN1bWVyIik7CgkJCQl9IGNhdGNoIHt9CgkJCQljb250
aW51ZTsKCQkJfQoJCQl0cnkgewoJCQkJYy5zb2NrZXQuc2VuZChmcmFtZSk7CgkJCX0gY2F0Y2gg
e30KCQl9Cgl9OwoJY29uc3QgYnJvYWRjYXN0ID0gKGV2ZW50LCBwYXlsb2FkLCBvcHRzKSA9PiBi
cm9hZGNhc3RJbnRlcm5hbChldmVudCwgcGF5bG9hZCwgb3B0cyk7Cgljb25zdCBicm9hZGNhc3RU
b0Nvbm5JZHMgPSAoZXZlbnQsIHBheWxvYWQsIGNvbm5JZHMsIG9wdHMpID0+IHsKCQlpZiAoY29u
bklkcy5zaXplID09PSAwKSByZXR1cm47CgkJYnJvYWRjYXN0SW50ZXJuYWwoZXZlbnQsIHBheWxv
YWQsIG9wdHMsIGNvbm5JZHMpOwoJfTsKCXJldHVybiB7CgkJYnJvYWRjYXN0LAoJCWJyb2FkY2Fz
dFRvQ29ubklkcwoJfTsKfQovLyNlbmRyZWdpb24KLy8jcmVnaW9uIHNyYy9pbmZyYS9nYXRld2F5
LWxvY2sudHMKY29uc3QgREVGQVVMVF9USU1FT1VUX01TID0gNWUzOwpjb25zdCBERUZBVUxUX1BP
TExfSU5URVJWQUxfTVMgPSAxMDA7CmNvbnN0IERFRkFVTFRfU1RBTEVfTVMgPSAzZTQ7CmNvbnN0
IERFRkFVTFRfUE9SVF9QUk9CRV9USU1FT1VUX01TID0gMWUzOwp2YXIgR2F0ZXdheUxvY2tFcnJv
ciA9IGNsYXNzIGV4dGVuZHMgRXJyb3IgewoJY29uc3RydWN0b3IobWVzc2FnZSwgY2F1c2UpIHsK
CQlzdXBlcihtZXNzYWdlKTsKCQl0aGlzLmNhdXNlID0gY2F1c2U7CgkJdGhpcy5uYW1lID0gIkdh
dGV3YXlMb2NrRXJyb3IiOwoJfQp9OwpmdW5jdGlvbiByZWFkTGludXhDbWRsaW5lKHBpZCkgewoJ
dHJ5IHsKCQlyZXR1cm4gcGFyc2VQcm9jQ21kbGluZShmcy5yZWFkRmlsZVN5bmMoYC9wcm9jLyR7
cGlkfS9jbWRsaW5lYCwgInV0ZjgiKSk7Cgl9IGNhdGNoIHsKCQlyZXR1cm4gbnVsbDsKCX0KfQpm
dW5jdGlvbiByZWFkTGludXhTdGFydFRpbWUocGlkKSB7Cgl0cnkgewoJCWNvbnN0IHJhdyA9IGZz
LnJlYWRGaWxlU3luYyhgL3Byb2MvJHtwaWR9L3N0YXRgLCAidXRmOCIpLnRyaW0oKTsKCQljb25z
dCBjbG9zZVBhcmVuID0gcmF3Lmxhc3RJbmRleE9mKCIpIik7CgkJaWYgKGNsb3NlUGFyZW4gPCAw
KSByZXR1cm4gbnVsbDsKCQljb25zdCBmaWVsZHMgPSByYXcuc2xpY2UoY2xvc2VQYXJlbiArIDEp
LnRyaW0oKS5zcGxpdCgvXHMrLyk7CgkJY29uc3Qgc3RhcnRUaW1lID0gTnVtYmVyLnBhcnNlSW50
KGZpZWxkc1sxOV0gPz8gIiIsIDEwKTsKCQlyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHN0YXJ0VGlt
ZSkgPyBzdGFydFRpbWUgOiBudWxsOwoJfSBjYXRjaCB7CgkJcmV0dXJuIG51bGw7Cgl9Cn0KYXN5
bmMgZnVuY3Rpb24gY2hlY2tQb3J0RnJlZShwb3J0LCBob3N0ID0gIjEyNy4wLjAuMSIpIHsKCXJl
dHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewoJCWNvbnN0IHNvY2tldCA9IG5l
dC5jcmVhdGVDb25uZWN0aW9uKHsKCQkJcG9ydCwKCQkJaG9zdAoJCX0pOwoJCWxldCBzZXR0bGVk
ID0gZmFsc2U7CgkJY29uc3QgZmluaXNoID0gKHJlc3VsdCkgPT4gewoJCQlpZiAoc2V0dGxlZCkg
cmV0dXJuOwoJCQlzZXR0bGVkID0gdHJ1ZTsKCQkJY2xlYXJUaW1lb3V0KHRpbWVyKTsKCQkJc29j
a2V0LnJlbW92ZUFsbExpc3RlbmVycygpOwoJCQlzb2NrZXQuZGVzdHJveSgpOwoJCQlyZXNvbHZl
KHJlc3VsdCk7CgkJfTsKCQljb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gewoJCQlmaW5p
c2godHJ1ZSk7CgkJfSwgREVGQVVMVF9QT1JUX1BST0JFX1RJTUVPVVRfTVMpOwoJCXNvY2tldC5v
bmNlKCJjb25uZWN0IiwgKCkgPT4gewoJCQlmaW5pc2goZmFsc2UpOwoJCX0pOwoJCXNvY2tldC5v
bmNlKCJlcnJvciIsICgpID0+IHsKCQkJZmluaXNoKHRydWUpOwoJCX0pOwoJfSk7Cn0KYXN5bmMg
ZnVuY3Rpb24gcmVzb2x2ZUdhdGV3YXlPd25lclN0YXR1cyhwaWQsIHBheWxvYWQsIHBsYXRmb3Jt
LCBwb3J0KSB7CglpZiAocG9ydCAhPSBudWxsKSB7CgkJaWYgKGF3YWl0IGNoZWNrUG9ydEZyZWUo
cG9ydCkpIHJldHVybiAiZGVhZCI7Cgl9CglpZiAoIWlzUGlkQWxpdmUocGlkKSkgcmV0dXJuICJk
ZWFkIjsKCWlmIChwbGF0Zm9ybSAhPT0gImxpbnV4IikgcmV0dXJuICJhbGl2ZSI7Cgljb25zdCBw
YXlsb2FkU3RhcnRUaW1lID0gcGF5bG9hZD8uc3RhcnRUaW1lOwoJaWYgKE51bWJlci5pc0Zpbml0
ZShwYXlsb2FkU3RhcnRUaW1lKSkgewoJCWNvbnN0IGN1cnJlbnRTdGFydFRpbWUgPSByZWFkTGlu
dXhTdGFydFRpbWUocGlkKTsKCQlpZiAoY3VycmVudFN0YXJ0VGltZSA9PSBudWxsKSByZXR1cm4g
InVua25vd24iOwoJCXJldHVybiBjdXJyZW50U3RhcnRUaW1lID09PSBwYXlsb2FkU3RhcnRUaW1l
ID8gImFsaXZlIiA6ICJkZWFkIjsKCX0KCWNvbnN0IGFyZ3MgPSByZWFkTGludXhDbWRsaW5lKHBp
ZCk7CglpZiAoIWFyZ3MpIHJldHVybiAidW5rbm93biI7CglyZXR1cm4gaXNHYXRld2F5QXJndihh
cmdzKSA/ICJhbGl2ZSIgOiAiZGVhZCI7Cn0KYXN5bmMgZnVuY3Rpb24gcmVhZExvY2tQYXlsb2Fk
KGxvY2tQYXRoKSB7Cgl0cnkgewoJCWNvbnN0IHJhdyA9IGF3YWl0IGZzJDEucmVhZEZpbGUobG9j
a1BhdGgsICJ1dGY4Iik7CgkJY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyYXcpOwoJCWlmICh0
eXBlb2YgcGFyc2VkLnBpZCAhPT0gIm51bWJlciIpIHJldHVybiBudWxsOwoJCWlmICh0eXBlb2Yg
cGFyc2VkLmNyZWF0ZWRBdCAhPT0gInN0cmluZyIpIHJldHVybiBudWxsOwoJCWlmICh0eXBlb2Yg
cGFyc2VkLmNvbmZpZ1BhdGggIT09ICJzdHJpbmciKSByZXR1cm4gbnVsbDsKCQljb25zdCBzdGFy
dFRpbWUgPSB0eXBlb2YgcGFyc2VkLnN0YXJ0VGltZSA9PT0gIm51bWJlciIgPyBwYXJzZWQuc3Rh
cnRUaW1lIDogdm9pZCAwOwoJCXJldHVybiB7CgkJCXBpZDogcGFyc2VkLnBpZCwKCQkJY3JlYXRl
ZEF0OiBwYXJzZWQuY3JlYXRlZEF0LAoJCQljb25maWdQYXRoOiBwYXJzZWQuY29uZmlnUGF0aCwK
CQkJc3RhcnRUaW1lCgkJfTsKCX0gY2F0Y2ggewoJCXJldHVybiBudWxsOwoJfQp9CmZ1bmN0aW9u
IHJlc29sdmVHYXRld2F5TG9ja1BhdGgoZW52KSB7Cgljb25zdCBjb25maWdQYXRoID0gcmVzb2x2
ZUNvbmZpZ1BhdGgoZW52LCByZXNvbHZlU3RhdGVEaXIoZW52KSk7Cgljb25zdCBoYXNoID0gY3Jl
YXRlSGFzaCgic2hhMjU2IikudXBkYXRlKGNvbmZpZ1BhdGgpLmRpZ2VzdCgiaGV4Iikuc2xpY2Uo
MCwgOCk7Cgljb25zdCBsb2NrRGlyID0gcmVzb2x2ZUdhdGV3YXlMb2NrRGlyKCk7CglyZXR1cm4g
ewoJCWxvY2tQYXRoOiBwYXRoLmpvaW4obG9ja0RpciwgYGdhdGV3YXkuJHtoYXNofS5sb2NrYCks
CgkJY29uZmlnUGF0aAoJfTsKfQphc3luYyBmdW5jdGlvbiBhY3F1aXJlR2F0ZXdheUxvY2sob3B0
cyA9IHt9KSB7Cgljb25zdCBlbnYgPSBvcHRzLmVudiA/PyBwcm9jZXNzLmVudjsKCWNvbnN0IGFs
bG93SW5UZXN0cyA9IG9wdHMuYWxsb3dJblRlc3RzID09PSB0cnVlOwoJaWYgKGVudi5PUEVOQ0xB
V19BTExPV19NVUxUSV9HQVRFV0FZID09PSAiMSIgfHwgIWFsbG93SW5UZXN0cyAmJiAoZW52LlZJ
VEVTVCB8fCBlbnYuTk9ERV9FTlYgPT09ICJ0ZXN0IikpIHJldHVybiBudWxsOwoJY29uc3QgdGlt
ZW91dE1zID0gb3B0cy50aW1lb3V0TXMgPz8gREVGQVVMVF9USU1FT1VUX01TOwoJY29uc3QgcG9s
bEludGVydmFsTXMgPSBvcHRzLnBvbGxJbnRlcnZhbE1zID8/IERFRkFVTFRfUE9MTF9JTlRFUlZB
TF9NUzsKCWNvbnN0IHN0YWxlTXMgPSBvcHRzLnN0YWxlTXMgPz8gREVGQVVMVF9TVEFMRV9NUzsK
CWNvbnN0IHBsYXRmb3JtID0gb3B0cy5wbGF0Zm9ybSA/PyBwcm9jZXNzLnBsYXRmb3JtOwoJY29u
c3QgcG9ydCA9IG9wdHMucG9ydDsKCWNvbnN0IHsgbG9ja1BhdGgsIGNvbmZpZ1BhdGggfSA9IHJl
c29sdmVHYXRld2F5TG9ja1BhdGgoZW52KTsKCWF3YWl0IGZzJDEubWtkaXIocGF0aC5kaXJuYW1l
KGxvY2tQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7Cgljb25zdCBzdGFydGVkQXQgPSBEYXRl
Lm5vdygpOwoJbGV0IGxhc3RQYXlsb2FkID0gbnVsbDsKCXdoaWxlIChEYXRlLm5vdygpIC0gc3Rh
cnRlZEF0IDwgdGltZW91dE1zKSB0cnkgewoJCWNvbnN0IGhhbmRsZSA9IGF3YWl0IGZzJDEub3Bl
bihsb2NrUGF0aCwgInd4Iik7CgkJY29uc3Qgc3RhcnRUaW1lID0gcGxhdGZvcm0gPT09ICJsaW51
eCIgPyByZWFkTGludXhTdGFydFRpbWUocHJvY2Vzcy5waWQpIDogbnVsbDsKCQljb25zdCBwYXls
b2FkID0gewoJCQlwaWQ6IHByb2Nlc3MucGlkLAoJCQljcmVhdGVkQXQ6ICgvKiBAX19QVVJFX18g
Ki8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSwKCQkJY29uZmlnUGF0aAoJCX07CgkJaWYgKHR5
cGVvZiBzdGFydFRpbWUgPT09ICJudW1iZXIiICYmIE51bWJlci5pc0Zpbml0ZShzdGFydFRpbWUp
KSBwYXlsb2FkLnN0YXJ0VGltZSA9IHN0YXJ0VGltZTsKCQlhd2FpdCBoYW5kbGUud3JpdGVGaWxl
KEpTT04uc3RyaW5naWZ5KHBheWxvYWQpLCAidXRmOCIpOwoJCXJldHVybiB7CgkJCWxvY2tQYXRo
LAoJCQljb25maWdQYXRoLAoJCQlyZWxlYXNlOiBhc3luYyAoKSA9PiB7CgkJCQlhd2FpdCBoYW5k
bGUuY2xvc2UoKS5jYXRjaCgoKSA9PiB2b2lkIDApOwoJCQkJYXdhaXQgZnMkMS5ybShsb2NrUGF0
aCwgeyBmb3JjZTogdHJ1ZSB9KTsKCQkJfQoJCX07Cgl9IGNhdGNoIChlcnIpIHsKCQlpZiAoZXJy
LmNvZGUgIT09ICJFRVhJU1QiKSB0aHJvdyBuZXcgR2F0ZXdheUxvY2tFcnJvcihgZmFpbGVkIHRv
IGFjcXVpcmUgZ2F0ZXdheSBsb2NrIGF0ICR7bG9ja1BhdGh9YCwgZXJyKTsKCQlsYXN0UGF5bG9h
ZCA9IGF3YWl0IHJlYWRMb2NrUGF5bG9hZChsb2NrUGF0aCk7CgkJY29uc3Qgb3duZXJQaWQgPSBs
YXN0UGF5bG9hZD8ucGlkOwoJCWNvbnN0IG93bmVyU3RhdHVzID0gb3duZXJQaWQgPyBhd2FpdCBy
ZXNvbHZlR2F0ZXdheU93bmVyU3RhdHVzKG93bmVyUGlkLCBsYXN0UGF5bG9hZCwgcGxhdGZvcm0s
IHBvcnQpIDogInVua25vd24iOwoJCWlmIChvd25lclN0YXR1cyA9PT0gImRlYWQiICYmIG93bmVy
UGlkKSB7CgkJCWF3YWl0IGZzJDEucm0obG9ja1BhdGgsIHsgZm9yY2U6IHRydWUgfSk7CgkJCWNv
bnRpbnVlOwoJCX0KCQlpZiAob3duZXJTdGF0dXMgIT09ICJhbGl2ZSIpIHsKCQkJbGV0IHN0YWxl
ID0gZmFsc2U7CgkJCWlmIChsYXN0UGF5bG9hZD8uY3JlYXRlZEF0KSB7CgkJCQljb25zdCBjcmVh
dGVkQXQgPSBEYXRlLnBhcnNlKGxhc3RQYXlsb2FkLmNyZWF0ZWRBdCk7CgkJCQlzdGFsZSA9IE51
bWJlci5pc0Zpbml0ZShjcmVhdGVkQXQpID8gRGF0ZS5ub3coKSAtIGNyZWF0ZWRBdCA+IHN0YWxl
TXMgOiBmYWxzZTsKCQkJfQoJCQlpZiAoIXN0YWxlKSB0cnkgewoJCQkJY29uc3Qgc3QgPSBhd2Fp
dCBmcyQxLnN0YXQobG9ja1BhdGgpOwoJCQkJc3RhbGUgPSBEYXRlLm5vdygpIC0gc3QubXRpbWVN
cyA+IHN0YWxlTXM7CgkJCX0gY2F0Y2ggewoJCQkJc3RhbGUgPSBmYWxzZTsKCQkJfQoJCQlpZiAo
c3RhbGUpIHsKCQkJCWF3YWl0IGZzJDEucm0obG9ja1BhdGgsIHsgZm9yY2U6IHRydWUgfSk7CgkJ
CQljb250aW51ZTsKCQkJfQoJCX0KCQlhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91
dChyLCBwb2xsSW50ZXJ2YWxNcykpOwoJfQoJdGhyb3cgbmV3IEdhdGV3YXlMb2NrRXJyb3IoYGdh
dGV3YXkgYWxyZWFkeSBydW5uaW5nJHtsYXN0UGF5bG9hZD8ucGlkID8gYCAocGlkICR7bGFzdFBh
eWxvYWQucGlkfSlgIDogIiJ9OyBsb2NrIHRpbWVvdXQgYWZ0ZXIgJHt0aW1lb3V0TXN9bXNgKTsK
fQovLyNlbmRyZWdpb24KLy8jcmVnaW9uIHNyYy9nYXRld2F5L3NlcnZlci9odHRwLWxpc3Rlbi50
cwpjb25zdCBFQUREUklOVVNFX01BWF9SRVRSSUVTID0gNDsKY29uc3QgRUFERFJJTlVTRV9SRVRS
WV9JTlRFUlZBTF9NUyA9IDUwMDsKYXN5bmMgZnVuY3Rpb24gY2xvc2VTZXJ2ZXJRdWlldGx5KGh0
dHBTZXJ2ZXIpIHsKCWF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CgkJdHJ5IHsKCQkJ
aHR0cFNlcnZlci5jbG9zZSgoKSA9PiByZXNvbHZlKCkpOwoJCX0gY2F0Y2ggewoJCQlyZXNvbHZl
KCk7CgkJfQoJfSk7Cn0KYXN5bmMgZnVuY3Rpb24gbGlzdGVuR2F0ZXdheUh0dHBTZXJ2ZXIocGFy
YW1zKSB7Cgljb25zdCB7IGh0dHBTZXJ2ZXIsIGJpbmRIb3N0LCBwb3J0IH0gPSBwYXJhbXM7Cglm
b3IgKGxldCBhdHRlbXB0ID0gMDs7IGF0dGVtcHQrKykgdHJ5IHsKCQlhd2FpdCBuZXcgUHJvbWlz
ZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CgkJCWNvbnN0IG9uRXJyb3IgPSAoZXJyKSA9PiB7CgkJ
CQlodHRwU2VydmVyLm9mZigibGlzdGVuaW5nIiwgb25MaXN0ZW5pbmcpOwoJCQkJcmVqZWN0KGVy
cik7CgkJCX07CgkJCWNvbnN0IG9uTGlzdGVuaW5nID0gKCkgPT4gewoJCQkJaHR0cFNlcnZlci5v
ZmYoImVycm9yIiwgb25FcnJvcik7CgkJCQlyZXNvbHZlKCk7CgkJCX07CgkJCWh0dHBTZXJ2ZXIu
b25jZSgiZXJyb3IiLCBvbkVycm9yKTsKCQkJaHR0cFNlcnZlci5vbmNlKCJsaXN0ZW5pbmciLCBv
bkxpc3RlbmluZyk7CgkJCWh0dHBTZXJ2ZXIubGlzdGVuKHBvcnQsIGJpbmRIb3N0KTsKCQl9KTsK
CQlyZXR1cm47Cgl9IGNhdGNoIChlcnIpIHsKCQljb25zdCBjb2RlID0gZXJyLmNvZGU7CgkJaWYg
KGNvZGUgPT09ICJFQUREUklOVVNFIiAmJiBhdHRlbXB0IDwgRUFERFJJTlVTRV9NQVhfUkVUUklF
UykgewoJCQlhd2FpdCBjbG9zZVNlcnZlclF1aWV0bHkoaHR0cFNlcnZlcik7CgkJCWF3YWl0IHNs
ZWVwKEVBRERSSU5VU0VfUkVUUllfSU5URVJWQUxfTVMpOwoJCQljb250aW51ZTsKCQl9CgkJaWYg
KGNvZGUgPT09ICJFQUREUklOVVNFIikgdGhyb3cgbmV3IEdhdGV3YXlMb2NrRXJyb3IoYGFub3Ro
ZXIgZ2F0ZXdheSBpbnN0YW5jZSBpcyBhbHJlYWR5IGxpc3RlbmluZyBvbiB3czovLyR7YmluZEhv
c3R9OiR7cG9ydH1gLCBlcnIpOwoJCXRocm93IG5ldyBHYXRld2F5TG9ja0Vycm9yKGBmYWlsZWQg
dG8gYmluZCBnYXRld2F5IHNvY2tldCBvbiB3czovLyR7YmluZEhvc3R9OiR7cG9ydH06ICR7U3Ry
aW5nKGVycil9YCwgZXJyKTsKCX0KfQovLyNlbmRyZWdpb24KLy8jcmVnaW9uIHNyYy9nYXRld2F5
L3NlcnZlci1ydW50aW1lLXN0YXRlLnRzCmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUdhdGV3YXlSdW50
aW1lU3RhdGUocGFyYW1zKSB7CglsZXQgY2FudmFzSG9zdCA9IG51bGw7CglpZiAocGFyYW1zLmNh
bnZhc0hvc3RFbmFibGVkKSB0cnkgewoJCWNvbnN0IGhhbmRsZXIgPSBhd2FpdCBjcmVhdGVDYW52
YXNIb3N0SGFuZGxlcih7CgkJCXJ1bnRpbWU6IHBhcmFtcy5jYW52YXNSdW50aW1lLAoJCQlyb290
RGlyOiBwYXJhbXMuY2ZnLmNhbnZhc0hvc3Q/LnJvb3QsCgkJCWJhc2VQYXRoOiBDQU5WQVNfSE9T
VF9QQVRILAoJCQlhbGxvd0luVGVzdHM6IHBhcmFtcy5hbGxvd0NhbnZhc0hvc3RJblRlc3RzLAoJ
CQlsaXZlUmVsb2FkOiBwYXJhbXMuY2ZnLmNhbnZhc0hvc3Q/LmxpdmVSZWxvYWQKCQl9KTsKCQlp
ZiAoaGFuZGxlci5yb290RGlyKSB7CgkJCWNhbnZhc0hvc3QgPSBoYW5kbGVyOwoJCQlwYXJhbXMu
bG9nQ2FudmFzLmluZm8oYGNhbnZhcyBob3N0IG1vdW50ZWQgYXQgaHR0cDovLyR7cGFyYW1zLmJp
bmRIb3N0fToke3BhcmFtcy5wb3J0fSR7Q0FOVkFTX0hPU1RfUEFUSH0vIChyb290ICR7aGFuZGxl
ci5yb290RGlyfSlgKTsKCQl9Cgl9IGNhdGNoIChlcnIpIHsKCQlwYXJhbXMubG9nQ2FudmFzLndh
cm4oYGNhbnZhcyBob3N0IGZhaWxlZCB0byBzdGFydDogJHtTdHJpbmcoZXJyKX1gKTsKCX0KCWNv
bnN0IGNsaWVudHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwoJY29uc3QgeyBicm9hZGNh
c3QsIGJyb2FkY2FzdFRvQ29ubklkcyB9ID0gY3JlYXRlR2F0ZXdheUJyb2FkY2FzdGVyKHsgY2xp
ZW50cyB9KTsKCWNvbnN0IGhhbmRsZUhvb2tzUmVxdWVzdCA9IGNyZWF0ZUdhdGV3YXlIb29rc1Jl
cXVlc3RIYW5kbGVyKHsKCQlkZXBzOiBwYXJhbXMuZGVwcywKCQlnZXRIb29rc0NvbmZpZzogcGFy
YW1zLmhvb2tzQ29uZmlnLAoJCWdldENsaWVudElwQ29uZmlnOiBwYXJhbXMuZ2V0SG9va0NsaWVu
dElwQ29uZmlnLAoJCWJpbmRIb3N0OiBwYXJhbXMuYmluZEhvc3QsCgkJcG9ydDogcGFyYW1zLnBv
cnQsCgkJbG9nSG9va3M6IHBhcmFtcy5sb2dIb29rcwoJfSk7Cgljb25zdCBoYW5kbGVQbHVnaW5S
ZXF1ZXN0ID0gY3JlYXRlR2F0ZXdheVBsdWdpblJlcXVlc3RIYW5kbGVyKHsKCQlyZWdpc3RyeTog
cGFyYW1zLnBsdWdpblJlZ2lzdHJ5LAoJCWxvZzogcGFyYW1zLmxvZ1BsdWdpbnMKCX0pOwoJY29u
c3Qgc2hvdWxkRW5mb3JjZVBsdWdpbkdhdGV3YXlBdXRoID0gKHBhdGhDb250ZXh0KSA9PiB7CgkJ
cmV0dXJuIHNob3VsZEVuZm9yY2VHYXRld2F5QXV0aEZvclBsdWdpblBhdGgocGFyYW1zLnBsdWdp
blJlZ2lzdHJ5LCBwYXRoQ29udGV4dCk7Cgl9OwoJY29uc3QgYmluZEhvc3RzID0gYXdhaXQgcmVz
b2x2ZUdhdGV3YXlMaXN0ZW5Ib3N0cyhwYXJhbXMuYmluZEhvc3QpOwoJaWYgKCFpc0xvb3BiYWNr
SG9zdChwYXJhbXMuYmluZEhvc3QpKSBwYXJhbXMubG9nLndhcm4oIuKaoO+4jyAgR2F0ZXdheSBp
cyBiaW5kaW5nIHRvIGEgbm9uLWxvb3BiYWNrIGFkZHJlc3MuIEVuc3VyZSBhdXRoZW50aWNhdGlv
biBpcyBjb25maWd1cmVkIGJlZm9yZSBleHBvc2luZyB0byBwdWJsaWMgbmV0d29ya3MuIik7Cglp
ZiAocGFyYW1zLmNmZy5nYXRld2F5Py5jb250cm9sVWk/LmRhbmdlcm91c2x5QWxsb3dIb3N0SGVh
ZGVyT3JpZ2luRmFsbGJhY2sgPT09IHRydWUpIHBhcmFtcy5sb2cud2Fybigi4pqg77iPICBnYXRl
d2F5LmNvbnRyb2xVaS5kYW5nZXJvdXNseUFsbG93SG9zdEhlYWRlck9yaWdpbkZhbGxiYWNrPXRy
dWUgaXMgZW5hYmxlZC4gSG9zdC1oZWFkZXIgb3JpZ2luIGZhbGxiYWNrIHdlYWtlbnMgb3JpZ2lu
IGNoZWNrcyBhbmQgc2hvdWxkIG9ubHkgYmUgdXNlZCBhcyBicmVhay1nbGFzcy4iKTsKCWNvbnN0
IGh0dHBTZXJ2ZXJzID0gW107Cgljb25zdCBodHRwQmluZEhvc3RzID0gW107Cglmb3IgKGNvbnN0
IGhvc3Qgb2YgYmluZEhvc3RzKSB7CgkJY29uc3QgaHR0cFNlcnZlciA9IGNyZWF0ZUdhdGV3YXlI
dHRwU2VydmVyKHsKCQkJY2FudmFzSG9zdCwKCQkJY2xpZW50cywKCQkJY29udHJvbFVpRW5hYmxl
ZDogcGFyYW1zLmNvbnRyb2xVaUVuYWJsZWQsCgkJCWNvbnRyb2xVaUJhc2VQYXRoOiBwYXJhbXMu
Y29udHJvbFVpQmFzZVBhdGgsCgkJCWNvbnRyb2xVaVJvb3Q6IHBhcmFtcy5jb250cm9sVWlSb290
LAoJCQlvcGVuQWlDaGF0Q29tcGxldGlvbnNFbmFibGVkOiBwYXJhbXMub3BlbkFpQ2hhdENvbXBs
ZXRpb25zRW5hYmxlZCwKCQkJb3BlbkFpQ2hhdENvbXBsZXRpb25zQ29uZmlnOiBwYXJhbXMub3Bl
bkFpQ2hhdENvbXBsZXRpb25zQ29uZmlnLAoJCQlvcGVuUmVzcG9uc2VzRW5hYmxlZDogcGFyYW1z
Lm9wZW5SZXNwb25zZXNFbmFibGVkLAoJCQlvcGVuUmVzcG9uc2VzQ29uZmlnOiBwYXJhbXMub3Bl
blJlc3BvbnNlc0NvbmZpZywKCQkJc3RyaWN0VHJhbnNwb3J0U2VjdXJpdHlIZWFkZXI6IHBhcmFt
cy5zdHJpY3RUcmFuc3BvcnRTZWN1cml0eUhlYWRlciwKCQkJaGFuZGxlSG9va3NSZXF1ZXN0LAoJ
CQloYW5kbGVQbHVnaW5SZXF1ZXN0LAoJCQlzaG91bGRFbmZvcmNlUGx1Z2luR2F0ZXdheUF1dGgs
CgkJCXJlc29sdmVkQXV0aDogcGFyYW1zLnJlc29sdmVkQXV0aCwKCQkJcmF0ZUxpbWl0ZXI6IHBh
cmFtcy5yYXRlTGltaXRlciwKCQkJZ2V0UmVhZGluZXNzOiBwYXJhbXMuZ2V0UmVhZGluZXNzLAoJ
CQl0bHNPcHRpb25zOiBwYXJhbXMuZ2F0ZXdheVRscz8uZW5hYmxlZCA/IHBhcmFtcy5nYXRld2F5
VGxzLnRsc09wdGlvbnMgOiB2b2lkIDAKCQl9KTsKCQl0cnkgewoJCQlhd2FpdCBsaXN0ZW5HYXRl
d2F5SHR0cFNlcnZlcih7CgkJCQlodHRwU2VydmVyLAoJCQkJYmluZEhvc3Q6IGhvc3QsCgkJCQlw
b3J0OiBwYXJhbXMucG9ydAoJCQl9KTsKCQkJaHR0cFNlcnZlcnMucHVzaChodHRwU2VydmVyKTsK
CQkJaHR0cEJpbmRIb3N0cy5wdXNoKGhvc3QpOwoJCX0gY2F0Y2ggKGVycikgewoJCQlpZiAoaG9z
dCA9PT0gYmluZEhvc3RzWzBdKSB0aHJvdyBlcnI7CgkJCXBhcmFtcy5sb2cud2FybihgZ2F0ZXdh
eTogZmFpbGVkIHRvIGJpbmQgbG9vcGJhY2sgYWxpYXMgJHtob3N0fToke3BhcmFtcy5wb3J0fSAo
JHtTdHJpbmcoZXJyKX0pYCk7CgkJfQoJfQoJY29uc3QgaHR0cFNlcnZlciA9IGh0dHBTZXJ2ZXJz
WzBdOwoJaWYgKCFodHRwU2VydmVyKSB0aHJvdyBuZXcgRXJyb3IoIkdhdGV3YXkgSFRUUCBzZXJ2
ZXIgZmFpbGVkIHRvIHN0YXJ0Iik7Cgljb25zdCB3c3MgPSBuZXcgV2ViU29ja2V0U2VydmVyKHsK
CQlub1NlcnZlcjogdHJ1ZSwKCQltYXhQYXlsb2FkOiBNQVhfUFJFQVVUSF9QQVlMT0FEX0JZVEVT
Cgl9KTsKCWZvciAoY29uc3Qgc2VydmVyIG9mIGh0dHBTZXJ2ZXJzKSBhdHRhY2hHYXRld2F5VXBn
cmFkZUhhbmRsZXIoewoJCWh0dHBTZXJ2ZXI6IHNlcnZlciwKCQl3c3MsCgkJY2FudmFzSG9zdCwK
CQljbGllbnRzLAoJCXJlc29sdmVkQXV0aDogcGFyYW1zLnJlc29sdmVkQXV0aCwKCQlyYXRlTGlt
aXRlcjogcGFyYW1zLnJhdGVMaW1pdGVyCgl9KTsKCWNvbnN0IGFnZW50UnVuU2VxID0gLyogQF9f
UFVSRV9fICovIG5ldyBNYXAoKTsKCWNvbnN0IGRlZHVwZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcg
TWFwKCk7Cgljb25zdCBjaGF0UnVuU3RhdGUgPSBjcmVhdGVDaGF0UnVuU3RhdGUoKTsKCWNvbnN0
IGNoYXRSdW5SZWdpc3RyeSA9IGNoYXRSdW5TdGF0ZS5yZWdpc3RyeTsKCWNvbnN0IGNoYXRSdW5C
dWZmZXJzID0gY2hhdFJ1blN0YXRlLmJ1ZmZlcnM7Cgljb25zdCBjaGF0RGVsdGFTZW50QXQgPSBj
aGF0UnVuU3RhdGUuZGVsdGFTZW50QXQ7Cgljb25zdCBhZGRDaGF0UnVuID0gY2hhdFJ1blJlZ2lz
dHJ5LmFkZDsKCWNvbnN0IHJlbW92ZUNoYXRSdW4gPSBjaGF0UnVuUmVnaXN0cnkucmVtb3ZlOwoJ
Y29uc3QgY2hhdEFib3J0Q29udHJvbGxlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwoJ
Y29uc3QgdG9vbEV2ZW50UmVjaXBpZW50cyA9IGNyZWF0ZVRvb2xFdmVudFJlY2lwaWVudFJlZ2lz
dHJ5KCk7CglyZXR1cm4gewoJCWNhbnZhc0hvc3QsCgkJaHR0cFNlcnZlciwKCQlodHRwU2VydmVy
cywKCQlodHRwQmluZEhvc3RzLAoJCXdzcywKCQljbGllbnRzLAoJCWJyb2FkY2FzdCwKCQlicm9h
ZGNhc3RUb0Nvbm5JZHMsCgkJYWdlbnRSdW5TZXEsCgkJZGVkdXBlLAoJCWNoYXRSdW5TdGF0ZSwK
CQljaGF0UnVuQnVmZmVycywKCQljaGF0RGVsdGFTZW50QXQsCgkJYWRkQ2hhdFJ1biwKCQlyZW1v
dmVDaGF0UnVuLAoJCWNoYXRBYm9ydENvbnRyb2xsZXJzLAoJCXRvb2xFdmVudFJlY2lwaWVudHMK
CX07Cn0KLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvZ2F0ZXdheS9zZXJ2ZXItc2Vzc2lvbi1r
ZXkudHMKY29uc3QgUlVOX0xPT0tVUF9DQUNIRV9MSU1JVCA9IDI1NjsKY29uc3QgUlVOX0xPT0tV
UF9NSVNTX1RUTF9NUyA9IDFlMzsKY29uc3QgcmVzb2x2ZWRTZXNzaW9uS2V5QnlSdW5JZCA9IC8q
IEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CmZ1bmN0aW9uIHNldFJlc29sdmVkU2Vzc2lvbktleUNh
Y2hlKHJ1bklkLCBzZXNzaW9uS2V5KSB7CglpZiAoIXJ1bklkKSByZXR1cm47CglpZiAoIXJlc29s
dmVkU2Vzc2lvbktleUJ5UnVuSWQuaGFzKHJ1bklkKSAmJiByZXNvbHZlZFNlc3Npb25LZXlCeVJ1
bklkLnNpemUgPj0gUlVOX0xPT0tVUF9DQUNIRV9MSU1JVCkgewoJCWNvbnN0IG9sZGVzdCA9IHJl
c29sdmVkU2Vzc2lvbktleUJ5UnVuSWQua2V5cygpLm5leHQoKS52YWx1ZTsKCQlpZiAob2xkZXN0
KSByZXNvbHZlZFNlc3Npb25LZXlCeVJ1bklkLmRlbGV0ZShvbGRlc3QpOwoJfQoJcmVzb2x2ZWRT
ZXNzaW9uS2V5QnlSdW5JZC5zZXQocnVuSWQsIHsKCQlzZXNzaW9uS2V5LAoJCWV4cGlyZXNBdDog
c2Vzc2lvbktleSA9PT0gbnVsbCA/IERhdGUubm93KCkgKyBSVU5fTE9PS1VQX01JU1NfVFRMX01T
IDogbnVsbAoJfSk7Cn0KZnVuY3Rpb24gcmVzb2x2ZVNlc3Npb25LZXlGb3JSdW4ocnVuSWQpIHsK
CWNvbnN0IGNhY2hlZCA9IGdldEFnZW50UnVuQ29udGV4dChydW5JZCk/LnNlc3Npb25LZXk7Cglp
ZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkOwoJY29uc3QgY2FjaGVkTG9va3VwID0gcmVzb2x2ZWRT
ZXNzaW9uS2V5QnlSdW5JZC5nZXQocnVuSWQpOwoJaWYgKGNhY2hlZExvb2t1cCAhPT0gdm9pZCAw
KSB7CgkJaWYgKGNhY2hlZExvb2t1cC5zZXNzaW9uS2V5ICE9PSBudWxsKSByZXR1cm4gY2FjaGVk
TG9va3VwLnNlc3Npb25LZXk7CgkJaWYgKChjYWNoZWRMb29rdXAuZXhwaXJlc0F0ID8/IDApID4g
RGF0ZS5ub3coKSkgcmV0dXJuOwoJCXJlc29sdmVkU2Vzc2lvbktleUJ5UnVuSWQuZGVsZXRlKHJ1
bklkKTsKCX0KCWNvbnN0IHsgc3RvcmUgfSA9IGxvYWRDb21iaW5lZFNlc3Npb25TdG9yZUZvckdh
dGV3YXkobG9hZENvbmZpZygpKTsKCWNvbnN0IHN0b3JlS2V5ID0gcmVzb2x2ZVByZWZlcnJlZFNl
c3Npb25LZXlGb3JTZXNzaW9uSWRNYXRjaGVzKE9iamVjdC5lbnRyaWVzKHN0b3JlKS5maWx0ZXIo
KGVudHJ5KSA9PiBlbnRyeVsxXT8uc2Vzc2lvbklkID09PSBydW5JZCksIHJ1bklkKTsKCWlmIChz
dG9yZUtleSkgewoJCWNvbnN0IHNlc3Npb25LZXkgPSB0b0FnZW50UmVxdWVzdFNlc3Npb25LZXko
c3RvcmVLZXkpID8/IHN0b3JlS2V5OwoJCXJlZ2lzdGVyQWdlbnRSdW5Db250ZXh0KHJ1bklkLCB7
IHNlc3Npb25LZXkgfSk7CgkJc2V0UmVzb2x2ZWRTZXNzaW9uS2V5Q2FjaGUocnVuSWQsIHNlc3Np
b25LZXkpOwoJCXJldHVybiBzZXNzaW9uS2V5OwoJfQoJc2V0UmVzb2x2ZWRTZXNzaW9uS2V5Q2Fj
aGUocnVuSWQsIG51bGwpOwp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dhdGV3YXkvc2Vy
dmVyLXN0YXJ0dXAtbG9nLnRzCmZ1bmN0aW9uIGxvZ0dhdGV3YXlTdGFydHVwKHBhcmFtcykgewoJ
Y29uc3QgeyBwcm92aWRlcjogYWdlbnRQcm92aWRlciwgbW9kZWw6IGFnZW50TW9kZWwgfSA9IHJl
c29sdmVDb25maWd1cmVkTW9kZWxSZWYoewoJCWNmZzogcGFyYW1zLmNmZywKCQlkZWZhdWx0UHJv
dmlkZXI6IERFRkFVTFRfUFJPVklERVIsCgkJZGVmYXVsdE1vZGVsOiBERUZBVUxUX01PREVMCgl9
KTsKCWNvbnN0IG1vZGVsUmVmID0gYCR7YWdlbnRQcm92aWRlcn0vJHthZ2VudE1vZGVsfWA7Cglw
YXJhbXMubG9nLmluZm8oYGFnZW50IG1vZGVsOiAke21vZGVsUmVmfWAsIHsgY29uc29sZU1lc3Nh
Z2U6IGBhZ2VudCBtb2RlbDogJHtjaGFsay53aGl0ZUJyaWdodChtb2RlbFJlZil9YCB9KTsKCWNv
bnN0IHNjaGVtZSA9IHBhcmFtcy50bHNFbmFibGVkID8gIndzcyIgOiAid3MiOwoJY29uc3QgZm9y
bWF0SG9zdCA9IChob3N0KSA9PiBob3N0LmluY2x1ZGVzKCI6IikgPyBgWyR7aG9zdH1dYCA6IGhv
c3Q7Cgljb25zdCBsaXN0ZW5FbmRwb2ludHMgPSAocGFyYW1zLmJpbmRIb3N0cyAmJiBwYXJhbXMu
YmluZEhvc3RzLmxlbmd0aCA+IDAgPyBwYXJhbXMuYmluZEhvc3RzIDogW3BhcmFtcy5iaW5kSG9z
dF0pLm1hcCgoaG9zdCkgPT4gYCR7c2NoZW1lfTovLyR7Zm9ybWF0SG9zdChob3N0KX06JHtwYXJh
bXMucG9ydH1gKTsKCXBhcmFtcy5sb2cuaW5mbyhgbGlzdGVuaW5nIG9uICR7bGlzdGVuRW5kcG9p
bnRzLmpvaW4oIiwgIil9IChQSUQgJHtwcm9jZXNzLnBpZH0pYCk7CglwYXJhbXMubG9nLmluZm8o
YGxvZyBmaWxlOiAke2dldFJlc29sdmVkTG9nZ2VyU2V0dGluZ3MoKS5maWxlfWApOwoJaWYgKHBh
cmFtcy5pc05peE1vZGUpIHBhcmFtcy5sb2cuaW5mbygiZ2F0ZXdheTogcnVubmluZyBpbiBOaXgg
bW9kZSAoY29uZmlnIG1hbmFnZWQgZXh0ZXJuYWxseSkiKTsKCWNvbnN0IGVuYWJsZWREYW5nZXJv
dXNGbGFncyA9IGNvbGxlY3RFbmFibGVkSW5zZWN1cmVPckRhbmdlcm91c0ZsYWdzKHBhcmFtcy5j
ZmcpOwoJaWYgKGVuYWJsZWREYW5nZXJvdXNGbGFncy5sZW5ndGggPiAwKSB7CgkJY29uc3Qgd2Fy
bmluZyA9IGBzZWN1cml0eSB3YXJuaW5nOiBkYW5nZXJvdXMgY29uZmlnIGZsYWdzIGVuYWJsZWQ6
ICR7ZW5hYmxlZERhbmdlcm91c0ZsYWdzLmpvaW4oIiwgIil9LiBSdW4gXGBvcGVuY2xhdyBzZWN1
cml0eSBhdWRpdFxgLmA7CgkJcGFyYW1zLmxvZy53YXJuKHdhcm5pbmcpOwoJfQp9Ci8vI2VuZHJl
Z2lvbgovLyNyZWdpb24gc3JjL2hvb2tzL2ltcG9ydC11cmwudHMKLyoqCiogQnVpbGQgYW4gaW1w
b3J0IFVSTCBmb3IgYSBob29rIGhhbmRsZXIgbW9kdWxlLgoqCiogQnVuZGxlZCBob29rcyAoc2hp
cHBlZCBpbiBkaXN0LykgYXJlIGltbXV0YWJsZSBiZXR3ZWVuIGluc3RhbGxzLCBzbyB0aGV5Ciog
Y2FuIGJlIGltcG9ydGVkIHdpdGhvdXQgYSBjYWNoZS1idXN0aW5nIHN1ZmZpeCDigJQgbGV0dGlu
ZyBWOCByZXVzZSBpdHMKKiBtb2R1bGUgY2FjaGUgYWNyb3NzIGdhdGV3YXkgcmVzdGFydHMuCioK
KiBXb3Jrc3BhY2UsIG1hbmFnZWQsIGFuZCBwbHVnaW4gaG9va3MgbWF5IGJlIGVkaXRlZCBieSB0
aGUgdXNlciBiZXR3ZWVuCiogcmVzdGFydHMuIEZvciB0aG9zZSB3ZSBhcHBlbmQgYD90PTxtdGlt
ZT4mcz08c2l6ZT5gIHNvIHRoZSBtb2R1bGUga2V5CiogcmVmbGVjdHMgb24tZGlzayBjaGFuZ2Vz
IHdoaWxlIHN0YXlpbmcgc3RhYmxlIGZvciB1bmNoYW5nZWQgZmlsZXMuCiovCi8qKgoqIFNvdXJj
ZXMgd2hvc2UgaGFuZGxlciBmaWxlcyBuZXZlciBjaGFuZ2UgYmV0d2VlbiBgbnBtIGluc3RhbGxg
IHJ1bnMuCiogSW1wb3J0cyBmcm9tIHRoZXNlIHNvdXJjZXMgc2tpcCBjYWNoZSBidXN0aW5nIGVu
dGlyZWx5LgoqLwpjb25zdCBJTU1VVEFCTEVfU09VUkNFUyA9IG5ldyBTZXQoWyJvcGVuY2xhdy1i
dW5kbGVkIl0pOwpmdW5jdGlvbiBidWlsZEltcG9ydFVybChoYW5kbGVyUGF0aCwgc291cmNlKSB7
Cgljb25zdCBiYXNlID0gcGF0aFRvRmlsZVVSTChoYW5kbGVyUGF0aCkuaHJlZjsKCWlmIChJTU1V
VEFCTEVfU09VUkNFUy5oYXMoc291cmNlKSkgcmV0dXJuIGJhc2U7Cgl0cnkgewoJCWNvbnN0IHsg
bXRpbWVNcywgc2l6ZSB9ID0gZnMuc3RhdFN5bmMoaGFuZGxlclBhdGgpOwoJCXJldHVybiBgJHti
YXNlfT90PSR7bXRpbWVNc30mcz0ke3NpemV9YDsKCX0gY2F0Y2ggewoJCXJldHVybiBgJHtiYXNl
fT90PSR7RGF0ZS5ub3coKX1gOwoJfQp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2hvb2tz
L2xvYWRlci50cwovKioKKiBEeW5hbWljIGxvYWRlciBmb3IgaG9vayBoYW5kbGVycwoqCiogTG9h
ZHMgaG9vayBoYW5kbGVycyBmcm9tIGV4dGVybmFsIG1vZHVsZXMgYmFzZWQgb24gY29uZmlndXJh
dGlvbgoqIGFuZCBmcm9tIGRpcmVjdG9yeS1iYXNlZCBkaXNjb3ZlcnkgKGJ1bmRsZWQsIG1hbmFn
ZWQsIHdvcmtzcGFjZSkKKi8KY29uc3QgbG9nJDIgPSBjcmVhdGVTdWJzeXN0ZW1Mb2dnZXIoImhv
b2tzOmxvYWRlciIpOwpmdW5jdGlvbiBzYWZlTG9nVmFsdWUodmFsdWUpIHsKCXJldHVybiBzYW5p
dGl6ZUZvckxvZyh2YWx1ZSk7Cn0KZnVuY3Rpb24gbWF5YmVXYXJuVHJ1c3RlZEhvb2tTb3VyY2Uo
c291cmNlKSB7CglpZiAoc291cmNlID09PSAib3BlbmNsYXctd29ya3NwYWNlIikgewoJCWxvZyQy
Lndhcm4oIkxvYWRpbmcgd29ya3NwYWNlIGhvb2sgY29kZSBpbnRvIHRoZSBnYXRld2F5IHByb2Nl
c3MuIFdvcmtzcGFjZSBob29rcyBhcmUgdHJ1c3RlZCBsb2NhbCBjb2RlLiIpOwoJCXJldHVybjsK
CX0KCWlmIChzb3VyY2UgPT09ICJvcGVuY2xhdy1tYW5hZ2VkIikgbG9nJDIud2FybigiTG9hZGlu
ZyBtYW5hZ2VkIGhvb2sgY29kZSBpbnRvIHRoZSBnYXRld2F5IHByb2Nlc3MuIE1hbmFnZWQgaG9v
a3MgYXJlIHRydXN0ZWQgbG9jYWwgY29kZS4iKTsKfQovKioKKiBMb2FkIGFuZCByZWdpc3RlciBh
bGwgaG9vayBoYW5kbGVycwoqCiogTG9hZHMgaG9va3MgZnJvbSBib3RoOgoqIDEuIERpcmVjdG9y
eS1iYXNlZCBkaXNjb3ZlcnkgKGJ1bmRsZWQsIG1hbmFnZWQsIHdvcmtzcGFjZSkKKiAyLiBMZWdh
Y3kgY29uZmlnIGhhbmRsZXJzIChiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSkKKgoqIEBwYXJhbSBj
ZmcgLSBPcGVuQ2xhdyBjb25maWd1cmF0aW9uCiogQHBhcmFtIHdvcmtzcGFjZURpciAtIFdvcmtz
cGFjZSBkaXJlY3RvcnkgZm9yIGhvb2sgZGlzY292ZXJ5CiogQHJldHVybnMgTnVtYmVyIG9mIGhh
bmRsZXJzIHN1Y2Nlc3NmdWxseSBsb2FkZWQKKgoqIEBleGFtcGxlCiogYGBgdHMKKiBjb25zdCBj
b25maWcgPSBhd2FpdCBsb2FkQ29uZmlnKCk7CiogY29uc3Qgd29ya3NwYWNlRGlyID0gcmVzb2x2
ZUFnZW50V29ya3NwYWNlRGlyKGNvbmZpZywgYWdlbnRJZCk7CiogY29uc3QgY291bnQgPSBhd2Fp
dCBsb2FkSW50ZXJuYWxIb29rcyhjb25maWcsIHdvcmtzcGFjZURpcik7CiogY29uc29sZS5sb2co
YExvYWRlZCAke2NvdW50fSBob29rIGhhbmRsZXJzYCk7CiogYGBgCiovCmFzeW5jIGZ1bmN0aW9u
IGxvYWRJbnRlcm5hbEhvb2tzKGNmZywgd29ya3NwYWNlRGlyLCBvcHRzKSB7CglpZiAoIWNmZy5o
b29rcz8uaW50ZXJuYWw/LmVuYWJsZWQpIHJldHVybiAwOwoJbGV0IGxvYWRlZENvdW50ID0gMDsK
CXRyeSB7CgkJY29uc3QgZWxpZ2libGUgPSBsb2FkV29ya3NwYWNlSG9va0VudHJpZXMod29ya3Nw
YWNlRGlyLCB7CgkJCWNvbmZpZzogY2ZnLAoJCQltYW5hZ2VkSG9va3NEaXI6IG9wdHM/Lm1hbmFn
ZWRIb29rc0RpciwKCQkJYnVuZGxlZEhvb2tzRGlyOiBvcHRzPy5idW5kbGVkSG9va3NEaXIKCQl9
KS5maWx0ZXIoKGVudHJ5KSA9PiBzaG91bGRJbmNsdWRlSG9vayh7CgkJCWVudHJ5LAoJCQljb25m
aWc6IGNmZwoJCX0pKTsKCQlmb3IgKGNvbnN0IGVudHJ5IG9mIGVsaWdpYmxlKSB7CgkJCWlmIChy
ZXNvbHZlSG9va0NvbmZpZyhjZmcsIGVudHJ5Lmhvb2submFtZSk/LmVuYWJsZWQgPT09IGZhbHNl
KSBjb250aW51ZTsKCQkJdHJ5IHsKCQkJCWNvbnN0IGhvb2tCYXNlRGlyID0gcmVzb2x2ZUV4aXN0
aW5nUmVhbHBhdGgoZW50cnkuaG9vay5iYXNlRGlyKTsKCQkJCWlmICghaG9va0Jhc2VEaXIpIHsK
CQkJCQlsb2ckMi5lcnJvcihgSG9vayAnJHtzYWZlTG9nVmFsdWUoZW50cnkuaG9vay5uYW1lKX0n
IGJhc2UgZGlyZWN0b3J5IGlzIG5vIGxvbmdlciByZWFkYWJsZTogJHtzYWZlTG9nVmFsdWUoZW50
cnkuaG9vay5iYXNlRGlyKX1gKTsKCQkJCQljb250aW51ZTsKCQkJCX0KCQkJCWNvbnN0IG9wZW5l
ZCA9IGF3YWl0IG9wZW5Cb3VuZGFyeUZpbGUoewoJCQkJCWFic29sdXRlUGF0aDogZW50cnkuaG9v
ay5oYW5kbGVyUGF0aCwKCQkJCQlyb290UGF0aDogaG9va0Jhc2VEaXIsCgkJCQkJYm91bmRhcnlM
YWJlbDogImhvb2sgZGlyZWN0b3J5IgoJCQkJfSk7CgkJCQlpZiAoIW9wZW5lZC5vaykgewoJCQkJ
CWxvZyQyLmVycm9yKGBIb29rICcke3NhZmVMb2dWYWx1ZShlbnRyeS5ob29rLm5hbWUpfScgaGFu
ZGxlciBwYXRoIGZhaWxzIGJvdW5kYXJ5IGNoZWNrczogJHtzYWZlTG9nVmFsdWUoZW50cnkuaG9v
ay5oYW5kbGVyUGF0aCl9YCk7CgkJCQkJY29udGludWU7CgkJCQl9CgkJCQljb25zdCBzYWZlSGFu
ZGxlclBhdGggPSBvcGVuZWQucGF0aDsKCQkJCWZzLmNsb3NlU3luYyhvcGVuZWQuZmQpOwoJCQkJ
bWF5YmVXYXJuVHJ1c3RlZEhvb2tTb3VyY2UoZW50cnkuaG9vay5zb3VyY2UpOwoJCQkJY29uc3Qg
bW9kID0gYXdhaXQgaW1wb3J0KGJ1aWxkSW1wb3J0VXJsKHNhZmVIYW5kbGVyUGF0aCwgZW50cnku
aG9vay5zb3VyY2UpKTsKCQkJCWNvbnN0IGV4cG9ydE5hbWUgPSBlbnRyeS5tZXRhZGF0YT8uZXhw
b3J0ID8/ICJkZWZhdWx0IjsKCQkJCWNvbnN0IGhhbmRsZXIgPSByZXNvbHZlRnVuY3Rpb25Nb2R1
bGVFeHBvcnQoewoJCQkJCW1vZCwKCQkJCQlleHBvcnROYW1lCgkJCQl9KTsKCQkJCWlmICghaGFu
ZGxlcikgewoJCQkJCWxvZyQyLmVycm9yKGBIYW5kbGVyICcke3NhZmVMb2dWYWx1ZShleHBvcnRO
YW1lKX0nIGZyb20gJHtzYWZlTG9nVmFsdWUoZW50cnkuaG9vay5uYW1lKX0gaXMgbm90IGEgZnVu
Y3Rpb25gKTsKCQkJCQljb250aW51ZTsKCQkJCX0KCQkJCWNvbnN0IGV2ZW50cyA9IGVudHJ5Lm1l
dGFkYXRhPy5ldmVudHMgPz8gW107CgkJCQlpZiAoZXZlbnRzLmxlbmd0aCA9PT0gMCkgewoJCQkJ
CWxvZyQyLndhcm4oYEhvb2sgJyR7c2FmZUxvZ1ZhbHVlKGVudHJ5Lmhvb2submFtZSl9JyBoYXMg
bm8gZXZlbnRzIGRlZmluZWQgaW4gbWV0YWRhdGFgKTsKCQkJCQljb250aW51ZTsKCQkJCX0KCQkJ
CWZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzKSByZWdpc3RlckludGVybmFsSG9vayhldmVudCwg
aGFuZGxlcik7CgkJCQlsb2ckMi5pbmZvKGBSZWdpc3RlcmVkIGhvb2s6ICR7c2FmZUxvZ1ZhbHVl
KGVudHJ5Lmhvb2submFtZSl9IC0+ICR7ZXZlbnRzLm1hcCgoZXZlbnQpID0+IHNhZmVMb2dWYWx1
ZShldmVudCkpLmpvaW4oIiwgIil9JHtleHBvcnROYW1lICE9PSAiZGVmYXVsdCIgPyBgIChleHBv
cnQ6ICR7c2FmZUxvZ1ZhbHVlKGV4cG9ydE5hbWUpfSlgIDogIiJ9YCk7CgkJCQlsb2FkZWRDb3Vu
dCsrOwoJCQl9IGNhdGNoIChlcnIpIHsKCQkJCWxvZyQyLmVycm9yKGBGYWlsZWQgdG8gbG9hZCBo
b29rICR7c2FmZUxvZ1ZhbHVlKGVudHJ5Lmhvb2submFtZSl9OiAke3NhZmVMb2dWYWx1ZShlcnIg
aW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycikpfWApOwoJCQl9CgkJ
fQoJfSBjYXRjaCAoZXJyKSB7CgkJbG9nJDIuZXJyb3IoYEZhaWxlZCB0byBsb2FkIGRpcmVjdG9y
eS1iYXNlZCBob29rczogJHtzYWZlTG9nVmFsdWUoZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIu
bWVzc2FnZSA6IFN0cmluZyhlcnIpKX1gKTsKCX0KCWNvbnN0IGhhbmRsZXJzID0gY2ZnLmhvb2tz
LmludGVybmFsLmhhbmRsZXJzID8/IFtdOwoJZm9yIChjb25zdCBoYW5kbGVyQ29uZmlnIG9mIGhh
bmRsZXJzKSB0cnkgewoJCWNvbnN0IHJhd01vZHVsZSA9IGhhbmRsZXJDb25maWcubW9kdWxlLnRy
aW0oKTsKCQlpZiAoIXJhd01vZHVsZSkgewoJCQlsb2ckMi5lcnJvcigiSGFuZGxlciBtb2R1bGUg
cGF0aCBpcyBlbXB0eSIpOwoJCQljb250aW51ZTsKCQl9CgkJaWYgKHBhdGguaXNBYnNvbHV0ZShy
YXdNb2R1bGUpKSB7CgkJCWxvZyQyLmVycm9yKGBIYW5kbGVyIG1vZHVsZSBwYXRoIG11c3QgYmUg
d29ya3NwYWNlLXJlbGF0aXZlIChnb3QgYWJzb2x1dGUgcGF0aCk6ICR7c2FmZUxvZ1ZhbHVlKHJh
d01vZHVsZSl9YCk7CgkJCWNvbnRpbnVlOwoJCX0KCQljb25zdCBiYXNlRGlyID0gcGF0aC5yZXNv
bHZlKHdvcmtzcGFjZURpcik7CgkJY29uc3QgbW9kdWxlUGF0aCA9IHBhdGgucmVzb2x2ZShiYXNl
RGlyLCByYXdNb2R1bGUpOwoJCWNvbnN0IGJhc2VEaXJSZWFsID0gcmVzb2x2ZUV4aXN0aW5nUmVh
bHBhdGgoYmFzZURpcik7CgkJaWYgKCFiYXNlRGlyUmVhbCkgewoJCQlsb2ckMi5lcnJvcihgV29y
a3NwYWNlIGRpcmVjdG9yeSBpcyBubyBsb25nZXIgcmVhZGFibGUgd2hpbGUgbG9hZGluZyBob29r
czogJHtzYWZlTG9nVmFsdWUoYmFzZURpcil9YCk7CgkJCWNvbnRpbnVlOwoJCX0KCQljb25zdCBt
b2R1bGVQYXRoU2FmZSA9IHJlc29sdmVFeGlzdGluZ1JlYWxwYXRoKG1vZHVsZVBhdGgpOwoJCWlm
ICghbW9kdWxlUGF0aFNhZmUpIHsKCQkJbG9nJDIuZXJyb3IoYEhhbmRsZXIgbW9kdWxlIHBhdGgg
Y291bGQgbm90IGJlIHJlc29sdmVkIHdpdGggcmVhbHBhdGg6ICR7c2FmZUxvZ1ZhbHVlKHJhd01v
ZHVsZSl9YCk7CgkJCWNvbnRpbnVlOwoJCX0KCQljb25zdCByZWwgPSBwYXRoLnJlbGF0aXZlKGJh
c2VEaXJSZWFsLCBtb2R1bGVQYXRoU2FmZSk7CgkJaWYgKCFyZWwgfHwgcmVsLnN0YXJ0c1dpdGgo
Ii4uIikgfHwgcGF0aC5pc0Fic29sdXRlKHJlbCkpIHsKCQkJbG9nJDIuZXJyb3IoYEhhbmRsZXIg
bW9kdWxlIHBhdGggbXVzdCBzdGF5IHdpdGhpbiB3b3Jrc3BhY2VEaXI6ICR7c2FmZUxvZ1ZhbHVl
KHJhd01vZHVsZSl9YCk7CgkJCWNvbnRpbnVlOwoJCX0KCQljb25zdCBvcGVuZWQgPSBhd2FpdCBv
cGVuQm91bmRhcnlGaWxlKHsKCQkJYWJzb2x1dGVQYXRoOiBtb2R1bGVQYXRoU2FmZSwKCQkJcm9v
dFBhdGg6IGJhc2VEaXJSZWFsLAoJCQlib3VuZGFyeUxhYmVsOiAid29ya3NwYWNlIGRpcmVjdG9y
eSIKCQl9KTsKCQlpZiAoIW9wZW5lZC5vaykgewoJCQlsb2ckMi5lcnJvcihgSGFuZGxlciBtb2R1
bGUgcGF0aCBmYWlscyBib3VuZGFyeSBjaGVja3MgdW5kZXIgd29ya3NwYWNlRGlyOiAke3NhZmVM
b2dWYWx1ZShyYXdNb2R1bGUpfWApOwoJCQljb250aW51ZTsKCQl9CgkJY29uc3Qgc2FmZU1vZHVs
ZVBhdGggPSBvcGVuZWQucGF0aDsKCQlmcy5jbG9zZVN5bmMob3BlbmVkLmZkKTsKCQlsb2ckMi53
YXJuKGBMb2FkaW5nIGxlZ2FjeSBpbnRlcm5hbCBob29rIG1vZHVsZSBmcm9tIHdvcmtzcGFjZSBw
YXRoICR7c2FmZUxvZ1ZhbHVlKHJhd01vZHVsZSl9LiBMZWdhY3kgaG9vayBtb2R1bGVzIGFyZSB0
cnVzdGVkIGxvY2FsIGNvZGUuYCk7CgkJY29uc3QgbW9kID0gYXdhaXQgaW1wb3J0KGJ1aWxkSW1w
b3J0VXJsKHNhZmVNb2R1bGVQYXRoLCAib3BlbmNsYXctd29ya3NwYWNlIikpOwoJCWNvbnN0IGV4
cG9ydE5hbWUgPSBoYW5kbGVyQ29uZmlnLmV4cG9ydCA/PyAiZGVmYXVsdCI7CgkJY29uc3QgaGFu
ZGxlciA9IHJlc29sdmVGdW5jdGlvbk1vZHVsZUV4cG9ydCh7CgkJCW1vZCwKCQkJZXhwb3J0TmFt
ZQoJCX0pOwoJCWlmICghaGFuZGxlcikgewoJCQlsb2ckMi5lcnJvcihgSGFuZGxlciAnJHtzYWZl
TG9nVmFsdWUoZXhwb3J0TmFtZSl9JyBmcm9tICR7c2FmZUxvZ1ZhbHVlKG1vZHVsZVBhdGgpfSBp
cyBub3QgYSBmdW5jdGlvbmApOwoJCQljb250aW51ZTsKCQl9CgkJcmVnaXN0ZXJJbnRlcm5hbEhv
b2soaGFuZGxlckNvbmZpZy5ldmVudCwgaGFuZGxlcik7CgkJbG9nJDIuaW5mbyhgUmVnaXN0ZXJl
ZCBob29rIChsZWdhY3kpOiAke3NhZmVMb2dWYWx1ZShoYW5kbGVyQ29uZmlnLmV2ZW50KX0gLT4g
JHtzYWZlTG9nVmFsdWUobW9kdWxlUGF0aCl9JHtleHBvcnROYW1lICE9PSAiZGVmYXVsdCIgPyBg
IyR7c2FmZUxvZ1ZhbHVlKGV4cG9ydE5hbWUpfWAgOiAiIn1gKTsKCQlsb2FkZWRDb3VudCsrOwoJ
fSBjYXRjaCAoZXJyKSB7CgkJbG9nJDIuZXJyb3IoYEZhaWxlZCB0byBsb2FkIGhvb2sgaGFuZGxl
ciBmcm9tICR7c2FmZUxvZ1ZhbHVlKGhhbmRsZXJDb25maWcubW9kdWxlKX06ICR7c2FmZUxvZ1Zh
bHVlKGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSl9YCk7
Cgl9CglyZXR1cm4gbG9hZGVkQ291bnQ7Cn0KZnVuY3Rpb24gcmVzb2x2ZUV4aXN0aW5nUmVhbHBh
dGgodmFsdWUpIHsKCXRyeSB7CgkJcmV0dXJuIGZzLnJlYWxwYXRoU3luYyh2YWx1ZSk7Cgl9IGNh
dGNoIHsKCQlyZXR1cm4gbnVsbDsKCX0KfQovLyNlbmRyZWdpb24KLy8jcmVnaW9uIHNyYy9wbHVn
aW5zL3NlcnZpY2VzLnRzCmNvbnN0IGxvZyQxID0gY3JlYXRlU3Vic3lzdGVtTG9nZ2VyKCJwbHVn
aW5zIik7CmZ1bmN0aW9uIGNyZWF0ZVBsdWdpbkxvZ2dlcigpIHsKCXJldHVybiB7CgkJaW5mbzog
KG1zZykgPT4gbG9nJDEuaW5mbyhtc2cpLAoJCXdhcm46IChtc2cpID0+IGxvZyQxLndhcm4obXNn
KSwKCQllcnJvcjogKG1zZykgPT4gbG9nJDEuZXJyb3IobXNnKSwKCQlkZWJ1ZzogKG1zZykgPT4g
bG9nJDEuZGVidWcobXNnKQoJfTsKfQpmdW5jdGlvbiBjcmVhdGVTZXJ2aWNlQ29udGV4dChwYXJh
bXMpIHsKCXJldHVybiB7CgkJY29uZmlnOiBwYXJhbXMuY29uZmlnLAoJCXdvcmtzcGFjZURpcjog
cGFyYW1zLndvcmtzcGFjZURpciwKCQlzdGF0ZURpcjogU1RBVEVfRElSLAoJCWxvZ2dlcjogY3Jl
YXRlUGx1Z2luTG9nZ2VyKCkKCX07Cn0KYXN5bmMgZnVuY3Rpb24gc3RhcnRQbHVnaW5TZXJ2aWNl
cyhwYXJhbXMpIHsKCWNvbnN0IHJ1bm5pbmcgPSBbXTsKCWNvbnN0IHNlcnZpY2VDb250ZXh0ID0g
Y3JlYXRlU2VydmljZUNvbnRleHQoewoJCWNvbmZpZzogcGFyYW1zLmNvbmZpZywKCQl3b3Jrc3Bh
Y2VEaXI6IHBhcmFtcy53b3Jrc3BhY2VEaXIKCX0pOwoJZm9yIChjb25zdCBlbnRyeSBvZiBwYXJh
bXMucmVnaXN0cnkuc2VydmljZXMpIHsKCQljb25zdCBzZXJ2aWNlID0gZW50cnkuc2VydmljZTsK
CQl0cnkgewoJCQlhd2FpdCBzZXJ2aWNlLnN0YXJ0KHNlcnZpY2VDb250ZXh0KTsKCQkJcnVubmlu
Zy5wdXNoKHsKCQkJCWlkOiBzZXJ2aWNlLmlkLAoJCQkJc3RvcDogc2VydmljZS5zdG9wID8gKCkg
PT4gc2VydmljZS5zdG9wPy4oc2VydmljZUNvbnRleHQpIDogdm9pZCAwCgkJCX0pOwoJCX0gY2F0
Y2ggKGVycikgewoJCQlsb2ckMS5lcnJvcihgcGx1Z2luIHNlcnZpY2UgZmFpbGVkICgke3NlcnZp
Y2UuaWR9KTogJHtTdHJpbmcoZXJyKX1gKTsKCQl9Cgl9CglyZXR1cm4geyBzdG9wOiBhc3luYyAo
KSA9PiB7CgkJZm9yIChjb25zdCBlbnRyeSBvZiBydW5uaW5nLnRvUmV2ZXJzZWQoKSkgewoJCQlp
ZiAoIWVudHJ5LnN0b3ApIGNvbnRpbnVlOwoJCQl0cnkgewoJCQkJYXdhaXQgZW50cnkuc3RvcCgp
OwoJCQl9IGNhdGNoIChlcnIpIHsKCQkJCWxvZyQxLndhcm4oYHBsdWdpbiBzZXJ2aWNlIHN0b3Ag
ZmFpbGVkICgke2VudHJ5LmlkfSk6ICR7U3RyaW5nKGVycil9YCk7CgkJCX0KCQl9Cgl9IH07Cn0K
Ly8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvZ2F0ZXdheS9zZXJ2ZXItcmVzdGFydC1zZW50aW5l
bC50cwphc3luYyBmdW5jdGlvbiBzY2hlZHVsZVJlc3RhcnRTZW50aW5lbFdha2UoX3BhcmFtcykg
ewoJY29uc3Qgc2VudGluZWwgPSBhd2FpdCBjb25zdW1lUmVzdGFydFNlbnRpbmVsKCk7CglpZiAo
IXNlbnRpbmVsKSByZXR1cm47Cgljb25zdCBwYXlsb2FkID0gc2VudGluZWwucGF5bG9hZDsKCWNv
bnN0IHNlc3Npb25LZXkgPSBwYXlsb2FkLnNlc3Npb25LZXk/LnRyaW0oKTsKCWNvbnN0IG1lc3Nh
Z2UgPSBmb3JtYXRSZXN0YXJ0U2VudGluZWxNZXNzYWdlKHBheWxvYWQpOwoJY29uc3Qgc3VtbWFy
eSA9IHN1bW1hcml6ZVJlc3RhcnRTZW50aW5lbChwYXlsb2FkKTsKCWlmICghc2Vzc2lvbktleSkg
ewoJCWVucXVldWVTeXN0ZW1FdmVudChtZXNzYWdlLCB7IHNlc3Npb25LZXk6IHJlc29sdmVNYWlu
U2Vzc2lvbktleUZyb21Db25maWcoKSB9KTsKCQlyZXR1cm47Cgl9Cgljb25zdCB7IGJhc2VTZXNz
aW9uS2V5LCB0aHJlYWRJZDogc2Vzc2lvblRocmVhZElkIH0gPSBwYXJzZVNlc3Npb25UaHJlYWRJ
bmZvKHNlc3Npb25LZXkpOwoJY29uc3QgeyBjZmcsIGVudHJ5IH0gPSBsb2FkU2Vzc2lvbkVudHJ5
KHNlc3Npb25LZXkpOwoJY29uc3QgcGFyc2VkVGFyZ2V0ID0gcmVzb2x2ZUFubm91bmNlVGFyZ2V0
RnJvbUtleShiYXNlU2Vzc2lvbktleSA/PyBzZXNzaW9uS2V5KTsKCWNvbnN0IHNlbnRpbmVsQ29u
dGV4dCA9IHBheWxvYWQuZGVsaXZlcnlDb250ZXh0OwoJbGV0IHNlc3Npb25EZWxpdmVyeUNvbnRl
eHQgPSBkZWxpdmVyeUNvbnRleHRGcm9tU2Vzc2lvbihlbnRyeSk7CglpZiAoIXNlc3Npb25EZWxp
dmVyeUNvbnRleHQgJiYgYmFzZVNlc3Npb25LZXkgJiYgYmFzZVNlc3Npb25LZXkgIT09IHNlc3Np
b25LZXkpIHsKCQljb25zdCB7IGVudHJ5OiBiYXNlRW50cnkgfSA9IGxvYWRTZXNzaW9uRW50cnko
YmFzZVNlc3Npb25LZXkpOwoJCXNlc3Npb25EZWxpdmVyeUNvbnRleHQgPSBkZWxpdmVyeUNvbnRl
eHRGcm9tU2Vzc2lvbihiYXNlRW50cnkpOwoJfQoJY29uc3Qgb3JpZ2luID0gbWVyZ2VEZWxpdmVy
eUNvbnRleHQoc2VudGluZWxDb250ZXh0LCBtZXJnZURlbGl2ZXJ5Q29udGV4dChzZXNzaW9uRGVs
aXZlcnlDb250ZXh0LCBwYXJzZWRUYXJnZXQgPz8gdm9pZCAwKSk7Cgljb25zdCBjaGFubmVsUmF3
ID0gb3JpZ2luPy5jaGFubmVsOwoJY29uc3QgY2hhbm5lbCA9IGNoYW5uZWxSYXcgPyBub3JtYWxp
emVDaGFubmVsSWQoY2hhbm5lbFJhdykgOiBudWxsOwoJY29uc3QgdG8gPSBvcmlnaW4/LnRvOwoJ
aWYgKCFjaGFubmVsIHx8ICF0bykgewoJCWVucXVldWVTeXN0ZW1FdmVudChtZXNzYWdlLCB7IHNl
c3Npb25LZXkgfSk7CgkJcmV0dXJuOwoJfQoJY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlT3V0Ym91
bmRUYXJnZXQoewoJCWNoYW5uZWwsCgkJdG8sCgkJY2ZnLAoJCWFjY291bnRJZDogb3JpZ2luPy5h
Y2NvdW50SWQsCgkJbW9kZTogImltcGxpY2l0IgoJfSk7CglpZiAoIXJlc29sdmVkLm9rKSB7CgkJ
ZW5xdWV1ZVN5c3RlbUV2ZW50KG1lc3NhZ2UsIHsgc2Vzc2lvbktleSB9KTsKCQlyZXR1cm47Cgl9
Cgljb25zdCB0aHJlYWRJZCA9IHBheWxvYWQudGhyZWFkSWQgPz8gcGFyc2VkVGFyZ2V0Py50aHJl
YWRJZCA/PyBzZXNzaW9uVGhyZWFkSWQgPz8gKG9yaWdpbj8udGhyZWFkSWQgIT0gbnVsbCA/IFN0
cmluZyhvcmlnaW4udGhyZWFkSWQpIDogdm9pZCAwKTsKCWNvbnN0IGlzU2xhY2sgPSBjaGFubmVs
ID09PSAic2xhY2siOwoJY29uc3QgcmVwbHlUb0lkID0gaXNTbGFjayAmJiB0aHJlYWRJZCAhPSBu
dWxsICYmIHRocmVhZElkICE9PSAiIiA/IFN0cmluZyh0aHJlYWRJZCkgOiB2b2lkIDA7Cgljb25z
dCByZXNvbHZlZFRocmVhZElkID0gaXNTbGFjayA/IHZvaWQgMCA6IHRocmVhZElkOwoJY29uc3Qg
b3V0Ym91bmRTZXNzaW9uID0gYnVpbGRPdXRib3VuZFNlc3Npb25Db250ZXh0KHsKCQljZmcsCgkJ
c2Vzc2lvbktleQoJfSk7Cgl0cnkgewoJCXRyeSB7IGxvZ1RvUHl0aG9uKCJvdXRib3VuZCIsIHsg
bWVzc2FnZSwgY2hhbm5lbCwgdGFyZ2V0OiBkZWxpdmVyeVRhcmdldCB9KTsgfSBjYXRjaCB7fQph
d2FpdCBkZWxpdmVyT3V0Ym91bmRQYXlsb2Fkcyh7CgkJCWNmZywKCQkJY2hhbm5lbCwKCQkJdG86
IHJlc29sdmVkLnRvLAoJCQlhY2NvdW50SWQ6IG9yaWdpbj8uYWNjb3VudElkLAoJCQlyZXBseVRv
SWQsCgkJCXRocmVhZElkOiByZXNvbHZlZFRocmVhZElkLAoJCQlwYXlsb2FkczogW3sgdGV4dDog
bWVzc2FnZSB9XSwKCQkJc2Vzc2lvbjogb3V0Ym91bmRTZXNzaW9uLAoJCQliZXN0RWZmb3J0OiB0
cnVlCgkJfSk7Cgl9IGNhdGNoIChlcnIpIHsKCQllbnF1ZXVlU3lzdGVtRXZlbnQoYCR7c3VtbWFy
eX1cbiR7U3RyaW5nKGVycil9YCwgeyBzZXNzaW9uS2V5IH0pOwoJfQp9CmZ1bmN0aW9uIHNob3Vs
ZFdha2VGcm9tUmVzdGFydFNlbnRpbmVsKCkgewoJcmV0dXJuICFwcm9jZXNzLmVudi5WSVRFU1Qg
JiYgdHJ1ZTsKfQovLyNlbmRyZWdpb24KLy8jcmVnaW9uIHNyYy9nYXRld2F5L3NlcnZlci1zdGFy
dHVwLW1lbW9yeS50cwphc3luYyBmdW5jdGlvbiBzdGFydEdhdGV3YXlNZW1vcnlCYWNrZW5kKHBh
cmFtcykgewoJY29uc3QgYWdlbnRJZHMgPSBsaXN0QWdlbnRJZHMocGFyYW1zLmNmZyk7Cglmb3Ig
KGNvbnN0IGFnZW50SWQgb2YgYWdlbnRJZHMpIHsKCQlpZiAoIXJlc29sdmVNZW1vcnlTZWFyY2hD
b25maWcocGFyYW1zLmNmZywgYWdlbnRJZCkpIGNvbnRpbnVlOwoJCWNvbnN0IHJlc29sdmVkID0g
cmVzb2x2ZU1lbW9yeUJhY2tlbmRDb25maWcoewoJCQljZmc6IHBhcmFtcy5jZmcsCgkJCWFnZW50
SWQKCQl9KTsKCQlpZiAocmVzb2x2ZWQuYmFja2VuZCAhPT0gInFtZCIgfHwgIXJlc29sdmVkLnFt
ZCkgY29udGludWU7CgkJY29uc3QgeyBtYW5hZ2VyLCBlcnJvciB9ID0gYXdhaXQgZ2V0TWVtb3J5
U2VhcmNoTWFuYWdlcih7CgkJCWNmZzogcGFyYW1zLmNmZywKCQkJYWdlbnRJZAoJCX0pOwoJCWlm
ICghbWFuYWdlcikgewoJCQlwYXJhbXMubG9nLndhcm4oYHFtZCBtZW1vcnkgc3RhcnR1cCBpbml0
aWFsaXphdGlvbiBmYWlsZWQgZm9yIGFnZW50ICIke2FnZW50SWR9IjogJHtlcnJvciA/PyAidW5r
bm93biBlcnJvciJ9YCk7CgkJCWNvbnRpbnVlOwoJCX0KCQlwYXJhbXMubG9nLmluZm8/LihgcW1k
IG1lbW9yeSBzdGFydHVwIGluaXRpYWxpemF0aW9uIGFybWVkIGZvciBhZ2VudCAiJHthZ2VudElk
fSJgKTsKCX0KfQovLyNlbmRyZWdpb24KLy8jcmVnaW9uIHNyYy9nYXRld2F5L3NlcnZlci1zdGFy
dHVwLnRzCmNvbnN0IFNFU1NJT05fTE9DS19TVEFMRV9NUyA9IDE4MDAgKiAxZTM7CmFzeW5jIGZ1
bmN0aW9uIHN0YXJ0R2F0ZXdheVNpZGVjYXJzKHBhcmFtcykgewoJdHJ5IHsKCQljb25zdCBzZXNz
aW9uRGlycyA9IGF3YWl0IHJlc29sdmVBZ2VudFNlc3Npb25EaXJzKHJlc29sdmVTdGF0ZURpcihw
cm9jZXNzLmVudikpOwoJCWZvciAoY29uc3Qgc2Vzc2lvbnNEaXIgb2Ygc2Vzc2lvbkRpcnMpIGF3
YWl0IGNsZWFuU3RhbGVMb2NrRmlsZXMoewoJCQlzZXNzaW9uc0RpciwKCQkJc3RhbGVNczogU0VT
U0lPTl9MT0NLX1NUQUxFX01TLAoJCQlyZW1vdmVTdGFsZTogdHJ1ZSwKCQkJbG9nOiB7IHdhcm46
IChtZXNzYWdlKSA9PiBwYXJhbXMubG9nLndhcm4obWVzc2FnZSkgfQoJCX0pOwoJfSBjYXRjaCAo
ZXJyKSB7CgkJcGFyYW1zLmxvZy53YXJuKGBzZXNzaW9uIGxvY2sgY2xlYW51cCBmYWlsZWQgb24g
c3RhcnR1cDogJHtTdHJpbmcoZXJyKX1gKTsKCX0KCWxldCBicm93c2VyQ29udHJvbCA9IG51bGw7
Cgl0cnkgewoJCWJyb3dzZXJDb250cm9sID0gYXdhaXQgc3RhcnRCcm93c2VyQ29udHJvbFNlcnZl
cklmRW5hYmxlZCgpOwoJfSBjYXRjaCAoZXJyKSB7CgkJcGFyYW1zLmxvZ0Jyb3dzZXIuZXJyb3Io
YHNlcnZlciBmYWlsZWQgdG8gc3RhcnQ6ICR7U3RyaW5nKGVycil9YCk7Cgl9Cglhd2FpdCBzdGFy
dEdtYWlsV2F0Y2hlcldpdGhMb2dzKHsKCQljZmc6IHBhcmFtcy5jZmcsCgkJbG9nOiBwYXJhbXMu
bG9nSG9va3MKCX0pOwoJaWYgKHBhcmFtcy5jZmcuaG9va3M/LmdtYWlsPy5tb2RlbCkgewoJCWNv
bnN0IGhvb2tzTW9kZWxSZWYgPSByZXNvbHZlSG9va3NHbWFpbE1vZGVsKHsKCQkJY2ZnOiBwYXJh
bXMuY2ZnLAoJCQlkZWZhdWx0UHJvdmlkZXI6IERFRkFVTFRfUFJPVklERVIKCQl9KTsKCQlpZiAo
aG9va3NNb2RlbFJlZikgewoJCQljb25zdCB7IHByb3ZpZGVyOiBkZWZhdWx0UHJvdmlkZXIsIG1v
ZGVsOiBkZWZhdWx0TW9kZWwgfSA9IHJlc29sdmVDb25maWd1cmVkTW9kZWxSZWYoewoJCQkJY2Zn
OiBwYXJhbXMuY2ZnLAoJCQkJZGVmYXVsdFByb3ZpZGVyOiBERUZBVUxUX1BST1ZJREVSLAoJCQkJ
ZGVmYXVsdE1vZGVsOiBERUZBVUxUX01PREVMCgkJCX0pOwoJCQljb25zdCBjYXRhbG9nID0gYXdh
aXQgbG9hZE1vZGVsQ2F0YWxvZyh7IGNvbmZpZzogcGFyYW1zLmNmZyB9KTsKCQkJY29uc3Qgc3Rh
dHVzID0gZ2V0TW9kZWxSZWZTdGF0dXMoewoJCQkJY2ZnOiBwYXJhbXMuY2ZnLAoJCQkJY2F0YWxv
ZywKCQkJCXJlZjogaG9va3NNb2RlbFJlZiwKCQkJCWRlZmF1bHRQcm92aWRlciwKCQkJCWRlZmF1
bHRNb2RlbAoJCQl9KTsKCQkJaWYgKCFzdGF0dXMuYWxsb3dlZCkgcGFyYW1zLmxvZ0hvb2tzLndh
cm4oYGhvb2tzLmdtYWlsLm1vZGVsICIke3N0YXR1cy5rZXl9IiBub3QgaW4gYWdlbnRzLmRlZmF1
bHRzLm1vZGVscyBhbGxvd2xpc3QgKHdpbGwgdXNlIHByaW1hcnkgaW5zdGVhZClgKTsKCQkJaWYg
KCFzdGF0dXMuaW5DYXRhbG9nKSBwYXJhbXMubG9nSG9va3Mud2FybihgaG9va3MuZ21haWwubW9k
ZWwgIiR7c3RhdHVzLmtleX0iIG5vdCBpbiB0aGUgbW9kZWwgY2F0YWxvZyAobWF5IGZhaWwgYXQg
cnVudGltZSlgKTsKCQl9Cgl9Cgl0cnkgewoJCWNsZWFySW50ZXJuYWxIb29rcygpOwoJCWNvbnN0
IGxvYWRlZENvdW50ID0gYXdhaXQgbG9hZEludGVybmFsSG9va3MocGFyYW1zLmNmZywgcGFyYW1z
LmRlZmF1bHRXb3Jrc3BhY2VEaXIpOwoJCWlmIChsb2FkZWRDb3VudCA+IDApIHBhcmFtcy5sb2dI
b29rcy5pbmZvKGBsb2FkZWQgJHtsb2FkZWRDb3VudH0gaW50ZXJuYWwgaG9vayBoYW5kbGVyJHts
b2FkZWRDb3VudCA+IDEgPyAicyIgOiAiIn1gKTsKCX0gY2F0Y2ggKGVycikgewoJCXBhcmFtcy5s
b2dIb29rcy5lcnJvcihgZmFpbGVkIHRvIGxvYWQgaG9va3M6ICR7U3RyaW5nKGVycil9YCk7Cgl9
CglpZiAoIShpc1RydXRoeUVudlZhbHVlKHByb2Nlc3MuZW52Lk9QRU5DTEFXX1NLSVBfQ0hBTk5F
TFMpIHx8IGlzVHJ1dGh5RW52VmFsdWUocHJvY2Vzcy5lbnYuT1BFTkNMQVdfU0tJUF9QUk9WSURF
UlMpKSkgdHJ5IHsKCQlhd2FpdCBwYXJhbXMuc3RhcnRDaGFubmVscygpOwoJfSBjYXRjaCAoZXJy
KSB7CgkJcGFyYW1zLmxvZ0NoYW5uZWxzLmVycm9yKGBjaGFubmVsIHN0YXJ0dXAgZmFpbGVkOiAk
e1N0cmluZyhlcnIpfWApOwoJfQoJZWxzZSBwYXJhbXMubG9nQ2hhbm5lbHMuaW5mbygic2tpcHBp
bmcgY2hhbm5lbCBzdGFydCAoT1BFTkNMQVdfU0tJUF9DSEFOTkVMUz0xIG9yIE9QRU5DTEFXX1NL
SVBfUFJPVklERVJTPTEpIik7CglpZiAocGFyYW1zLmNmZy5ob29rcz8uaW50ZXJuYWw/LmVuYWJs
ZWQpIHNldFRpbWVvdXQoKCkgPT4gewoJCXRyaWdnZXJJbnRlcm5hbEhvb2soY3JlYXRlSW50ZXJu
YWxIb29rRXZlbnQoImdhdGV3YXkiLCAic3RhcnR1cCIsICJnYXRld2F5OnN0YXJ0dXAiLCB7CgkJ
CWNmZzogcGFyYW1zLmNmZywKCQkJZGVwczogcGFyYW1zLmRlcHMsCgkJCXdvcmtzcGFjZURpcjog
cGFyYW1zLmRlZmF1bHRXb3Jrc3BhY2VEaXIKCQl9KSk7Cgl9LCAyNTApOwoJbGV0IHBsdWdpblNl
cnZpY2VzID0gbnVsbDsKCXRyeSB7CgkJcGx1Z2luU2VydmljZXMgPSBhd2FpdCBzdGFydFBsdWdp
blNlcnZpY2VzKHsKCQkJcmVnaXN0cnk6IHBhcmFtcy5wbHVnaW5SZWdpc3RyeSwKCQkJY29uZmln
OiBwYXJhbXMuY2ZnLAoJCQl3b3Jrc3BhY2VEaXI6IHBhcmFtcy5kZWZhdWx0V29ya3NwYWNlRGly
CgkJfSk7Cgl9IGNhdGNoIChlcnIpIHsKCQlwYXJhbXMubG9nLndhcm4oYHBsdWdpbiBzZXJ2aWNl
cyBmYWlsZWQgdG8gc3RhcnQ6ICR7U3RyaW5nKGVycil9YCk7Cgl9CglpZiAocGFyYW1zLmNmZy5h
Y3A/LmVuYWJsZWQpIGdldEFjcFNlc3Npb25NYW5hZ2VyKCkucmVjb25jaWxlUGVuZGluZ1Nlc3Np
b25JZGVudGl0aWVzKHsgY2ZnOiBwYXJhbXMuY2ZnIH0pLnRoZW4oKHJlc3VsdCkgPT4gewoJCWlm
IChyZXN1bHQuY2hlY2tlZCA9PT0gMCkgcmV0dXJuOwoJCXBhcmFtcy5sb2cud2FybihgYWNwIHN0
YXJ0dXAgaWRlbnRpdHkgcmVjb25jaWxlIChyZW5kZXJlcj12MSk6IGNoZWNrZWQ9JHtyZXN1bHQu
Y2hlY2tlZH0gcmVzb2x2ZWQ9JHtyZXN1bHQucmVzb2x2ZWR9IGZhaWxlZD0ke3Jlc3VsdC5mYWls
ZWR9YCk7Cgl9KS5jYXRjaCgoZXJyKSA9PiB7CgkJcGFyYW1zLmxvZy53YXJuKGBhY3Agc3RhcnR1
cCBpZGVudGl0eSByZWNvbmNpbGUgZmFpbGVkOiAke1N0cmluZyhlcnIpfWApOwoJfSk7CglzdGFy
dEdhdGV3YXlNZW1vcnlCYWNrZW5kKHsKCQljZmc6IHBhcmFtcy5jZmcsCgkJbG9nOiBwYXJhbXMu
bG9nCgl9KS5jYXRjaCgoZXJyKSA9PiB7CgkJcGFyYW1zLmxvZy53YXJuKGBxbWQgbWVtb3J5IHN0
YXJ0dXAgaW5pdGlhbGl6YXRpb24gZmFpbGVkOiAke1N0cmluZyhlcnIpfWApOwoJfSk7CglpZiAo
c2hvdWxkV2FrZUZyb21SZXN0YXJ0U2VudGluZWwoKSkgc2V0VGltZW91dCgoKSA9PiB7CgkJc2No
ZWR1bGVSZXN0YXJ0U2VudGluZWxXYWtlKHsgZGVwczogcGFyYW1zLmRlcHMgfSk7Cgl9LCA3NTAp
OwoJcmV0dXJuIHsKCQlicm93c2VyQ29udHJvbCwKCQlwbHVnaW5TZXJ2aWNlcwoJfTsKfQovLyNl
bmRyZWdpb24KLy8jcmVnaW9uIHNyYy9nYXRld2F5L3NlcnZlci10YWlsc2NhbGUudHMKYXN5bmMg
ZnVuY3Rpb24gc3RhcnRHYXRld2F5VGFpbHNjYWxlRXhwb3N1cmUocGFyYW1zKSB7CglpZiAocGFy
YW1zLnRhaWxzY2FsZU1vZGUgPT09ICJvZmYiKSByZXR1cm4gbnVsbDsKCXRyeSB7CgkJaWYgKHBh
cmFtcy50YWlsc2NhbGVNb2RlID09PSAic2VydmUiKSBhd2FpdCBlbmFibGVUYWlsc2NhbGVTZXJ2
ZShwYXJhbXMucG9ydCk7CgkJZWxzZSBhd2FpdCBlbmFibGVUYWlsc2NhbGVGdW5uZWwocGFyYW1z
LnBvcnQpOwoJCWNvbnN0IGhvc3QgPSBhd2FpdCBnZXRUYWlsbmV0SG9zdG5hbWUoKS5jYXRjaCgo
KSA9PiBudWxsKTsKCQlpZiAoaG9zdCkgewoJCQljb25zdCB1aVBhdGggPSBwYXJhbXMuY29udHJv
bFVpQmFzZVBhdGggPyBgJHtwYXJhbXMuY29udHJvbFVpQmFzZVBhdGh9L2AgOiAiLyI7CgkJCXBh
cmFtcy5sb2dUYWlsc2NhbGUuaW5mbyhgJHtwYXJhbXMudGFpbHNjYWxlTW9kZX0gZW5hYmxlZDog
aHR0cHM6Ly8ke2hvc3R9JHt1aVBhdGh9IChXUyB2aWEgd3NzOi8vJHtob3N0fSlgKTsKCQl9IGVs
c2UgcGFyYW1zLmxvZ1RhaWxzY2FsZS5pbmZvKGAke3BhcmFtcy50YWlsc2NhbGVNb2RlfSBlbmFi
bGVkYCk7Cgl9IGNhdGNoIChlcnIpIHsKCQlwYXJhbXMubG9nVGFpbHNjYWxlLndhcm4oYCR7cGFy
YW1zLnRhaWxzY2FsZU1vZGV9IGZhaWxlZDogJHtlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5t
ZXNzYWdlIDogU3RyaW5nKGVycil9YCk7Cgl9CglpZiAoIXBhcmFtcy5yZXNldE9uRXhpdCkgcmV0
dXJuIG51bGw7CglyZXR1cm4gYXN5bmMgKCkgPT4gewoJCXRyeSB7CgkJCWlmIChwYXJhbXMudGFp
bHNjYWxlTW9kZSA9PT0gInNlcnZlIikgYXdhaXQgZGlzYWJsZVRhaWxzY2FsZVNlcnZlKCk7CgkJ
CWVsc2UgYXdhaXQgZGlzYWJsZVRhaWxzY2FsZUZ1bm5lbCgpOwoJCX0gY2F0Y2ggKGVycikgewoJ
CQlwYXJhbXMubG9nVGFpbHNjYWxlLndhcm4oYCR7cGFyYW1zLnRhaWxzY2FsZU1vZGV9IGNsZWFu
dXAgZmFpbGVkOiAke2VyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmco
ZXJyKX1gKTsKCQl9Cgl9Owp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dhdGV3YXkvc2Vy
dmVyLXdpemFyZC1zZXNzaW9ucy50cwpmdW5jdGlvbiBjcmVhdGVXaXphcmRTZXNzaW9uVHJhY2tl
cigpIHsKCWNvbnN0IHdpemFyZFNlc3Npb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsK
CWNvbnN0IGZpbmRSdW5uaW5nV2l6YXJkID0gKCkgPT4gewoJCWZvciAoY29uc3QgW2lkLCBzZXNz
aW9uXSBvZiB3aXphcmRTZXNzaW9ucykgaWYgKHNlc3Npb24uZ2V0U3RhdHVzKCkgPT09ICJydW5u
aW5nIikgcmV0dXJuIGlkOwoJCXJldHVybiBudWxsOwoJfTsKCWNvbnN0IHB1cmdlV2l6YXJkU2Vz
c2lvbiA9IChpZCkgPT4gewoJCWNvbnN0IHNlc3Npb24gPSB3aXphcmRTZXNzaW9ucy5nZXQoaWQp
OwoJCWlmICghc2Vzc2lvbikgcmV0dXJuOwoJCWlmIChzZXNzaW9uLmdldFN0YXR1cygpID09PSAi
cnVubmluZyIpIHJldHVybjsKCQl3aXphcmRTZXNzaW9ucy5kZWxldGUoaWQpOwoJfTsKCXJldHVy
biB7CgkJd2l6YXJkU2Vzc2lvbnMsCgkJZmluZFJ1bm5pbmdXaXphcmQsCgkJcHVyZ2VXaXphcmRT
ZXNzaW9uCgl9Owp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2luZnJhL2NhbnZhcy1ob3N0
LXVybC50cwpjb25zdCBub3JtYWxpemVIb3N0ID0gKHZhbHVlLCByZWplY3RMb29wYmFjaykgPT4g
ewoJaWYgKCF2YWx1ZSkgcmV0dXJuICIiOwoJY29uc3QgdHJpbW1lZCA9IHZhbHVlLnRyaW0oKTsK
CWlmICghdHJpbW1lZCkgcmV0dXJuICIiOwoJaWYgKHJlamVjdExvb3BiYWNrICYmIGlzTG9vcGJh
Y2tIb3N0KHRyaW1tZWQpKSByZXR1cm4gIiI7CglyZXR1cm4gdHJpbW1lZDsKfTsKY29uc3QgcGFy
c2VIb3N0SGVhZGVyID0gKHZhbHVlKSA9PiB7CglpZiAoIXZhbHVlKSByZXR1cm4geyBob3N0OiAi
IiB9OwoJdHJ5IHsKCQljb25zdCBwYXJzZWQgPSBuZXcgVVJMKGBodHRwOi8vJHtTdHJpbmcodmFs
dWUpLnRyaW0oKX1gKTsKCQljb25zdCBwb3J0UmF3ID0gcGFyc2VkLnBvcnQudHJpbSgpOwoJCWNv
bnN0IHBvcnQgPSBwb3J0UmF3ID8gTnVtYmVyLnBhcnNlSW50KHBvcnRSYXcsIDEwKSA6IHZvaWQg
MDsKCQlyZXR1cm4gewoJCQlob3N0OiBwYXJzZWQuaG9zdG5hbWUsCgkJCXBvcnQ6IE51bWJlci5p
c0Zpbml0ZShwb3J0KSA/IHBvcnQgOiB2b2lkIDAKCQl9OwoJfSBjYXRjaCB7CgkJcmV0dXJuIHsg
aG9zdDogIiIgfTsKCX0KfTsKY29uc3QgcGFyc2VGb3J3YXJkZWRQcm90byA9ICh2YWx1ZSkgPT4g
ewoJaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWVbMF07CglyZXR1cm4gdmFs
dWU7Cn07CmZ1bmN0aW9uIHJlc29sdmVDYW52YXNIb3N0VXJsKHBhcmFtcykgewoJY29uc3QgcG9y
dCA9IHBhcmFtcy5jYW52YXNQb3J0OwoJaWYgKCFwb3J0KSByZXR1cm47Cgljb25zdCBzY2hlbWUg
PSBwYXJhbXMuc2NoZW1lID8/IChwYXJzZUZvcndhcmRlZFByb3RvKHBhcmFtcy5mb3J3YXJkZWRQ
cm90byk/LnRyaW0oKSA9PT0gImh0dHBzIiA/ICJodHRwcyIgOiAiaHR0cCIpOwoJY29uc3Qgb3Zl
cnJpZGUgPSBub3JtYWxpemVIb3N0KHBhcmFtcy5ob3N0T3ZlcnJpZGUsIHRydWUpOwoJY29uc3Qg
cGFyc2VkUmVxdWVzdEhvc3QgPSBwYXJzZUhvc3RIZWFkZXIocGFyYW1zLnJlcXVlc3RIb3N0KTsK
CWNvbnN0IHJlcXVlc3RIb3N0ID0gbm9ybWFsaXplSG9zdChwYXJzZWRSZXF1ZXN0SG9zdC5ob3N0
LCAhIW92ZXJyaWRlKTsKCWNvbnN0IGxvY2FsQWRkcmVzcyA9IG5vcm1hbGl6ZUhvc3QocGFyYW1z
LmxvY2FsQWRkcmVzcywgQm9vbGVhbihvdmVycmlkZSB8fCByZXF1ZXN0SG9zdCkpOwoJY29uc3Qg
aG9zdCA9IG92ZXJyaWRlIHx8IHJlcXVlc3RIb3N0IHx8IGxvY2FsQWRkcmVzczsKCWlmICghaG9z
dCkgcmV0dXJuOwoJbGV0IGV4cG9zZWRQb3J0ID0gcG9ydDsKCWlmICghb3ZlcnJpZGUgJiYgcmVx
dWVzdEhvc3QgJiYgcG9ydCA9PT0gMTg3ODkpIHsKCQlpZiAocGFyc2VkUmVxdWVzdEhvc3QucG9y
dCAmJiBwYXJzZWRSZXF1ZXN0SG9zdC5wb3J0ID4gMCkgZXhwb3NlZFBvcnQgPSBwYXJzZWRSZXF1
ZXN0SG9zdC5wb3J0OwoJCWVsc2UgaWYgKHNjaGVtZSA9PT0gImh0dHBzIikgZXhwb3NlZFBvcnQg
PSA0NDM7CgkJZWxzZSBpZiAoc2NoZW1lID09PSAiaHR0cCIpIGV4cG9zZWRQb3J0ID0gODA7Cgl9
CglyZXR1cm4gYCR7c2NoZW1lfTovLyR7aG9zdC5pbmNsdWRlcygiOiIpID8gYFske2hvc3R9XWAg
OiBob3N0fToke2V4cG9zZWRQb3J0fWA7Cn0KLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvZ2F0
ZXdheS9vcmlnaW4tY2hlY2sudHMKZnVuY3Rpb24gcGFyc2VPcmlnaW4ob3JpZ2luUmF3KSB7Cglj
b25zdCB0cmltbWVkID0gKG9yaWdpblJhdyA/PyAiIikudHJpbSgpOwoJaWYgKCF0cmltbWVkIHx8
IHRyaW1tZWQgPT09ICJudWxsIikgcmV0dXJuIG51bGw7Cgl0cnkgewoJCWNvbnN0IHVybCA9IG5l
dyBVUkwodHJpbW1lZCk7CgkJcmV0dXJuIHsKCQkJb3JpZ2luOiB1cmwub3JpZ2luLnRvTG93ZXJD
YXNlKCksCgkJCWhvc3Q6IHVybC5ob3N0LnRvTG93ZXJDYXNlKCksCgkJCWhvc3RuYW1lOiB1cmwu
aG9zdG5hbWUudG9Mb3dlckNhc2UoKQoJCX07Cgl9IGNhdGNoIHsKCQlyZXR1cm4gbnVsbDsKCX0K
fQpmdW5jdGlvbiBjaGVja0Jyb3dzZXJPcmlnaW4ocGFyYW1zKSB7Cgljb25zdCBwYXJzZWRPcmln
aW4gPSBwYXJzZU9yaWdpbihwYXJhbXMub3JpZ2luKTsKCWlmICghcGFyc2VkT3JpZ2luKSByZXR1
cm4gewoJCW9rOiBmYWxzZSwKCQlyZWFzb246ICJvcmlnaW4gbWlzc2luZyBvciBpbnZhbGlkIgoJ
fTsKCWNvbnN0IGFsbG93bGlzdCA9IG5ldyBTZXQoKHBhcmFtcy5hbGxvd2VkT3JpZ2lucyA/PyBb
XSkubWFwKCh2YWx1ZSkgPT4gdmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCkpLmZpbHRlcihCb29s
ZWFuKSk7CglpZiAoYWxsb3dsaXN0LmhhcygiKiIpIHx8IGFsbG93bGlzdC5oYXMocGFyc2VkT3Jp
Z2luLm9yaWdpbikpIHJldHVybiB7CgkJb2s6IHRydWUsCgkJbWF0Y2hlZEJ5OiAiYWxsb3dsaXN0
IgoJfTsKCWNvbnN0IHJlcXVlc3RIb3N0ID0gbm9ybWFsaXplSG9zdEhlYWRlcihwYXJhbXMucmVx
dWVzdEhvc3QpOwoJaWYgKHBhcmFtcy5hbGxvd0hvc3RIZWFkZXJPcmlnaW5GYWxsYmFjayA9PT0g
dHJ1ZSAmJiByZXF1ZXN0SG9zdCAmJiBwYXJzZWRPcmlnaW4uaG9zdCA9PT0gcmVxdWVzdEhvc3Qp
IHJldHVybiB7CgkJb2s6IHRydWUsCgkJbWF0Y2hlZEJ5OiAiaG9zdC1oZWFkZXItZmFsbGJhY2si
Cgl9OwoJaWYgKHBhcmFtcy5pc0xvY2FsQ2xpZW50ICYmIGlzTG9vcGJhY2tIb3N0KHBhcnNlZE9y
aWdpbi5ob3N0bmFtZSkpIHJldHVybiB7CgkJb2s6IHRydWUsCgkJbWF0Y2hlZEJ5OiAibG9jYWwt
bG9vcGJhY2siCgl9OwoJcmV0dXJuIHsKCQlvazogZmFsc2UsCgkJcmVhc29uOiAib3JpZ2luIG5v
dCBhbGxvd2VkIgoJfTsKfQovLyNlbmRyZWdpb24KLy8jcmVnaW9uIHNyYy9nYXRld2F5L3NlcnZl
ci93cy1jb25uZWN0aW9uL2F1dGgtY29udGV4dC50cwpmdW5jdGlvbiB0cmltVG9VbmRlZmluZWQo
dmFsdWUpIHsKCWlmICghdmFsdWUpIHJldHVybjsKCWNvbnN0IHRyaW1tZWQgPSB2YWx1ZS50cmlt
KCk7CglyZXR1cm4gdHJpbW1lZC5sZW5ndGggPiAwID8gdHJpbW1lZCA6IHZvaWQgMDsKfQpmdW5j
dGlvbiByZXNvbHZlU2hhcmVkQ29ubmVjdEF1dGgoY29ubmVjdEF1dGgpIHsKCWNvbnN0IHRva2Vu
ID0gdHJpbVRvVW5kZWZpbmVkKGNvbm5lY3RBdXRoPy50b2tlbik7Cgljb25zdCBwYXNzd29yZCA9
IHRyaW1Ub1VuZGVmaW5lZChjb25uZWN0QXV0aD8ucGFzc3dvcmQpOwoJaWYgKCF0b2tlbiAmJiAh
cGFzc3dvcmQpIHJldHVybjsKCXJldHVybiB7CgkJdG9rZW4sCgkJcGFzc3dvcmQKCX07Cn0KZnVu
Y3Rpb24gcmVzb2x2ZURldmljZVRva2VuQ2FuZGlkYXRlKGNvbm5lY3RBdXRoKSB7Cgljb25zdCBl
eHBsaWNpdERldmljZVRva2VuID0gdHJpbVRvVW5kZWZpbmVkKGNvbm5lY3RBdXRoPy5kZXZpY2VU
b2tlbik7CglpZiAoZXhwbGljaXREZXZpY2VUb2tlbikgcmV0dXJuIHsKCQl0b2tlbjogZXhwbGlj
aXREZXZpY2VUb2tlbiwKCQlzb3VyY2U6ICJleHBsaWNpdC1kZXZpY2UtdG9rZW4iCgl9OwoJY29u
c3QgZmFsbGJhY2tUb2tlbiA9IHRyaW1Ub1VuZGVmaW5lZChjb25uZWN0QXV0aD8udG9rZW4pOwoJ
aWYgKCFmYWxsYmFja1Rva2VuKSByZXR1cm4ge307CglyZXR1cm4gewoJCXRva2VuOiBmYWxsYmFj
a1Rva2VuLAoJCXNvdXJjZTogInNoYXJlZC10b2tlbi1mYWxsYmFjayIKCX07Cn0KZnVuY3Rpb24g
cmVzb2x2ZUJvb3RzdHJhcFRva2VuQ2FuZGlkYXRlKGNvbm5lY3RBdXRoKSB7CglyZXR1cm4gdHJp
bVRvVW5kZWZpbmVkKGNvbm5lY3RBdXRoPy5ib290c3RyYXBUb2tlbik7Cn0KYXN5bmMgZnVuY3Rp
b24gcmVzb2x2ZUNvbm5lY3RBdXRoU3RhdGUocGFyYW1zKSB7Cgljb25zdCBzaGFyZWRDb25uZWN0
QXV0aCA9IHJlc29sdmVTaGFyZWRDb25uZWN0QXV0aChwYXJhbXMuY29ubmVjdEF1dGgpOwoJY29u
c3Qgc2hhcmVkQXV0aFByb3ZpZGVkID0gQm9vbGVhbihzaGFyZWRDb25uZWN0QXV0aCk7Cgljb25z
dCBib290c3RyYXBUb2tlbkNhbmRpZGF0ZSA9IHBhcmFtcy5oYXNEZXZpY2VJZGVudGl0eSA/IHJl
c29sdmVCb290c3RyYXBUb2tlbkNhbmRpZGF0ZShwYXJhbXMuY29ubmVjdEF1dGgpIDogdm9pZCAw
OwoJY29uc3QgeyB0b2tlbjogZGV2aWNlVG9rZW5DYW5kaWRhdGUsIHNvdXJjZTogZGV2aWNlVG9r
ZW5DYW5kaWRhdGVTb3VyY2UgfSA9IHBhcmFtcy5oYXNEZXZpY2VJZGVudGl0eSA/IHJlc29sdmVE
ZXZpY2VUb2tlbkNhbmRpZGF0ZShwYXJhbXMuY29ubmVjdEF1dGgpIDoge307Cgljb25zdCBoYXNE
ZXZpY2VUb2tlbkNhbmRpZGF0ZSA9IEJvb2xlYW4oZGV2aWNlVG9rZW5DYW5kaWRhdGUpOwoJbGV0
IGF1dGhSZXN1bHQgPSBhd2FpdCBhdXRob3JpemVXc0NvbnRyb2xVaUdhdGV3YXlDb25uZWN0KHsK
CQlhdXRoOiBwYXJhbXMucmVzb2x2ZWRBdXRoLAoJCWNvbm5lY3RBdXRoOiBzaGFyZWRDb25uZWN0
QXV0aCwKCQlyZXE6IHBhcmFtcy5yZXEsCgkJdHJ1c3RlZFByb3hpZXM6IHBhcmFtcy50cnVzdGVk
UHJveGllcywKCQlhbGxvd1JlYWxJcEZhbGxiYWNrOiBwYXJhbXMuYWxsb3dSZWFsSXBGYWxsYmFj
aywKCQlyYXRlTGltaXRlcjogaGFzRGV2aWNlVG9rZW5DYW5kaWRhdGUgPyB2b2lkIDAgOiBwYXJh
bXMucmF0ZUxpbWl0ZXIsCgkJY2xpZW50SXA6IHBhcmFtcy5jbGllbnRJcCwKCQlyYXRlTGltaXRT
Y29wZTogQVVUSF9SQVRFX0xJTUlUX1NDT1BFX1NIQVJFRF9TRUNSRVQKCX0pOwoJaWYgKGhhc0Rl
dmljZVRva2VuQ2FuZGlkYXRlICYmIGF1dGhSZXN1bHQub2sgJiYgcGFyYW1zLnJhdGVMaW1pdGVy
ICYmIChhdXRoUmVzdWx0Lm1ldGhvZCA9PT0gInRva2VuIiB8fCBhdXRoUmVzdWx0Lm1ldGhvZCA9
PT0gInBhc3N3b3JkIikpIHsKCQljb25zdCBzaGFyZWRSYXRlQ2hlY2sgPSBwYXJhbXMucmF0ZUxp
bWl0ZXIuY2hlY2socGFyYW1zLmNsaWVudElwLCBBVVRIX1JBVEVfTElNSVRfU0NPUEVfU0hBUkVE
X1NFQ1JFVCk7CgkJaWYgKCFzaGFyZWRSYXRlQ2hlY2suYWxsb3dlZCkgYXV0aFJlc3VsdCA9IHsK
CQkJb2s6IGZhbHNlLAoJCQlyZWFzb246ICJyYXRlX2xpbWl0ZWQiLAoJCQlyYXRlTGltaXRlZDog
dHJ1ZSwKCQkJcmV0cnlBZnRlck1zOiBzaGFyZWRSYXRlQ2hlY2sucmV0cnlBZnRlck1zCgkJfTsK
CQllbHNlIHBhcmFtcy5yYXRlTGltaXRlci5yZXNldChwYXJhbXMuY2xpZW50SXAsIEFVVEhfUkFU
RV9MSU1JVF9TQ09QRV9TSEFSRURfU0VDUkVUKTsKCX0KCWNvbnN0IHNoYXJlZEF1dGhSZXN1bHQg
PSBzaGFyZWRDb25uZWN0QXV0aCAmJiBhd2FpdCBhdXRob3JpemVIdHRwR2F0ZXdheUNvbm5lY3Qo
ewoJCWF1dGg6IHsKCQkJLi4ucGFyYW1zLnJlc29sdmVkQXV0aCwKCQkJYWxsb3dUYWlsc2NhbGU6
IGZhbHNlCgkJfSwKCQljb25uZWN0QXV0aDogc2hhcmVkQ29ubmVjdEF1dGgsCgkJcmVxOiBwYXJh
bXMucmVxLAoJCXRydXN0ZWRQcm94aWVzOiBwYXJhbXMudHJ1c3RlZFByb3hpZXMsCgkJYWxsb3dS
ZWFsSXBGYWxsYmFjazogcGFyYW1zLmFsbG93UmVhbElwRmFsbGJhY2ssCgkJcmF0ZUxpbWl0U2Nv
cGU6ICJzaGFyZWQtc2VjcmV0IgoJfSk7Cgljb25zdCBzaGFyZWRBdXRoT2sgPSBzaGFyZWRBdXRo
UmVzdWx0Py5vayA9PT0gdHJ1ZSAmJiAoc2hhcmVkQXV0aFJlc3VsdC5tZXRob2QgPT09ICJ0b2tl
biIgfHwgc2hhcmVkQXV0aFJlc3VsdC5tZXRob2QgPT09ICJwYXNzd29yZCIpIHx8IGF1dGhSZXN1
bHQub2sgJiYgYXV0aFJlc3VsdC5tZXRob2QgPT09ICJ0cnVzdGVkLXByb3h5IjsKCXJldHVybiB7
CgkJYXV0aFJlc3VsdCwKCQlhdXRoT2s6IGF1dGhSZXN1bHQub2ssCgkJYXV0aE1ldGhvZDogYXV0
aFJlc3VsdC5tZXRob2QgPz8gKHBhcmFtcy5yZXNvbHZlZEF1dGgubW9kZSA9PT0gInBhc3N3b3Jk
IiA/ICJwYXNzd29yZCIgOiAidG9rZW4iKSwKCQlzaGFyZWRBdXRoT2ssCgkJc2hhcmVkQXV0aFBy
b3ZpZGVkLAoJCWJvb3RzdHJhcFRva2VuQ2FuZGlkYXRlLAoJCWRldmljZVRva2VuQ2FuZGlkYXRl
LAoJCWRldmljZVRva2VuQ2FuZGlkYXRlU291cmNlCgl9Owp9CmFzeW5jIGZ1bmN0aW9uIHJlc29s
dmVDb25uZWN0QXV0aERlY2lzaW9uKHBhcmFtcykgewoJbGV0IGF1dGhSZXN1bHQgPSBwYXJhbXMu
c3RhdGUuYXV0aFJlc3VsdDsKCWxldCBhdXRoT2sgPSBwYXJhbXMuc3RhdGUuYXV0aE9rOwoJbGV0
IGF1dGhNZXRob2QgPSBwYXJhbXMuc3RhdGUuYXV0aE1ldGhvZDsKCWNvbnN0IGJvb3RzdHJhcFRv
a2VuQ2FuZGlkYXRlID0gcGFyYW1zLnN0YXRlLmJvb3RzdHJhcFRva2VuQ2FuZGlkYXRlOwoJaWYg
KHBhcmFtcy5oYXNEZXZpY2VJZGVudGl0eSAmJiBwYXJhbXMuZGV2aWNlSWQgJiYgcGFyYW1zLnB1
YmxpY0tleSAmJiAhYXV0aE9rICYmIGJvb3RzdHJhcFRva2VuQ2FuZGlkYXRlKSB7CgkJY29uc3Qg
dG9rZW5DaGVjayA9IGF3YWl0IHBhcmFtcy52ZXJpZnlCb290c3RyYXBUb2tlbih7CgkJCWRldmlj
ZUlkOiBwYXJhbXMuZGV2aWNlSWQsCgkJCXB1YmxpY0tleTogcGFyYW1zLnB1YmxpY0tleSwKCQkJ
dG9rZW46IGJvb3RzdHJhcFRva2VuQ2FuZGlkYXRlLAoJCQlyb2xlOiBwYXJhbXMucm9sZSwKCQkJ
c2NvcGVzOiBwYXJhbXMuc2NvcGVzCgkJfSk7CgkJaWYgKHRva2VuQ2hlY2sub2spIHsKCQkJYXV0
aE9rID0gdHJ1ZTsKCQkJYXV0aE1ldGhvZCA9ICJib290c3RyYXAtdG9rZW4iOwoJCX0gZWxzZSBh
dXRoUmVzdWx0ID0gewoJCQlvazogZmFsc2UsCgkJCXJlYXNvbjogdG9rZW5DaGVjay5yZWFzb24g
Pz8gImJvb3RzdHJhcF90b2tlbl9pbnZhbGlkIgoJCX07Cgl9Cgljb25zdCBkZXZpY2VUb2tlbkNh
bmRpZGF0ZSA9IHBhcmFtcy5zdGF0ZS5kZXZpY2VUb2tlbkNhbmRpZGF0ZTsKCWlmICghcGFyYW1z
Lmhhc0RldmljZUlkZW50aXR5IHx8ICFwYXJhbXMuZGV2aWNlSWQgfHwgYXV0aE9rIHx8ICFkZXZp
Y2VUb2tlbkNhbmRpZGF0ZSkgcmV0dXJuIHsKCQlhdXRoUmVzdWx0LAoJCWF1dGhPaywKCQlhdXRo
TWV0aG9kCgl9OwoJaWYgKHBhcmFtcy5yYXRlTGltaXRlcikgewoJCWNvbnN0IGRldmljZVJhdGVD
aGVjayA9IHBhcmFtcy5yYXRlTGltaXRlci5jaGVjayhwYXJhbXMuY2xpZW50SXAsIEFVVEhfUkFU
RV9MSU1JVF9TQ09QRV9ERVZJQ0VfVE9LRU4pOwoJCWlmICghZGV2aWNlUmF0ZUNoZWNrLmFsbG93
ZWQpIGF1dGhSZXN1bHQgPSB7CgkJCW9rOiBmYWxzZSwKCQkJcmVhc29uOiAicmF0ZV9saW1pdGVk
IiwKCQkJcmF0ZUxpbWl0ZWQ6IHRydWUsCgkJCXJldHJ5QWZ0ZXJNczogZGV2aWNlUmF0ZUNoZWNr
LnJldHJ5QWZ0ZXJNcwoJCX07Cgl9CglpZiAoIWF1dGhSZXN1bHQucmF0ZUxpbWl0ZWQpIGlmICgo
YXdhaXQgcGFyYW1zLnZlcmlmeURldmljZVRva2VuKHsKCQlkZXZpY2VJZDogcGFyYW1zLmRldmlj
ZUlkLAoJCXRva2VuOiBkZXZpY2VUb2tlbkNhbmRpZGF0ZSwKCQlyb2xlOiBwYXJhbXMucm9sZSwK
CQlzY29wZXM6IHBhcmFtcy5zY29wZXMKCX0pKS5vaykgewoJCWF1dGhPayA9IHRydWU7CgkJYXV0
aE1ldGhvZCA9ICJkZXZpY2UtdG9rZW4iOwoJCXBhcmFtcy5yYXRlTGltaXRlcj8ucmVzZXQocGFy
YW1zLmNsaWVudElwLCBBVVRIX1JBVEVfTElNSVRfU0NPUEVfREVWSUNFX1RPS0VOKTsKCX0gZWxz
ZSB7CgkJYXV0aFJlc3VsdCA9IHsKCQkJb2s6IGZhbHNlLAoJCQlyZWFzb246IHBhcmFtcy5zdGF0
ZS5kZXZpY2VUb2tlbkNhbmRpZGF0ZVNvdXJjZSA9PT0gImV4cGxpY2l0LWRldmljZS10b2tlbiIg
PyAiZGV2aWNlX3Rva2VuX21pc21hdGNoIiA6IGF1dGhSZXN1bHQucmVhc29uID8/ICJkZXZpY2Vf
dG9rZW5fbWlzbWF0Y2giCgkJfTsKCQlwYXJhbXMucmF0ZUxpbWl0ZXI/LnJlY29yZEZhaWx1cmUo
cGFyYW1zLmNsaWVudElwLCBBVVRIX1JBVEVfTElNSVRfU0NPUEVfREVWSUNFX1RPS0VOKTsKCX0K
CXJldHVybiB7CgkJYXV0aFJlc3VsdCwKCQlhdXRoT2ssCgkJYXV0aE1ldGhvZAoJfTsKfQovLyNl
bmRyZWdpb24KLy8jcmVnaW9uIHNyYy9nYXRld2F5L3NlcnZlci93cy1jb25uZWN0aW9uL2F1dGgt
bWVzc2FnZXMudHMKZnVuY3Rpb24gZm9ybWF0R2F0ZXdheUF1dGhGYWlsdXJlTWVzc2FnZShwYXJh
bXMpIHsKCWNvbnN0IHsgYXV0aE1vZGUsIGF1dGhQcm92aWRlZCwgcmVhc29uLCBjbGllbnQgfSA9
IHBhcmFtczsKCWNvbnN0IGlzQ2xpID0gaXNHYXRld2F5Q2xpQ2xpZW50KGNsaWVudCk7Cgljb25z
dCBpc0NvbnRyb2xVaSA9IGNsaWVudD8uaWQgPT09IEdBVEVXQVlfQ0xJRU5UX0lEUy5DT05UUk9M
X1VJOwoJY29uc3QgaXNXZWJjaGF0ID0gaXNXZWJjaGF0Q2xpZW50KGNsaWVudCk7Cgljb25zdCB0
b2tlbkhpbnQgPSBpc0NsaSA/ICJzZXQgZ2F0ZXdheS5yZW1vdGUudG9rZW4gdG8gbWF0Y2ggZ2F0
ZXdheS5hdXRoLnRva2VuIiA6IGlzQ29udHJvbFVpIHx8IGlzV2ViY2hhdCA/ICJvcGVuIHRoZSBk
YXNoYm9hcmQgVVJMIGFuZCBwYXN0ZSB0aGUgdG9rZW4gaW4gQ29udHJvbCBVSSBzZXR0aW5ncyIg
OiAicHJvdmlkZSBnYXRld2F5IGF1dGggdG9rZW4iOwoJY29uc3QgcGFzc3dvcmRIaW50ID0gaXND
bGkgPyAic2V0IGdhdGV3YXkucmVtb3RlLnBhc3N3b3JkIHRvIG1hdGNoIGdhdGV3YXkuYXV0aC5w
YXNzd29yZCIgOiBpc0NvbnRyb2xVaSB8fCBpc1dlYmNoYXQgPyAiZW50ZXIgdGhlIHBhc3N3b3Jk
IGluIENvbnRyb2wgVUkgc2V0dGluZ3MiIDogInByb3ZpZGUgZ2F0ZXdheSBhdXRoIHBhc3N3b3Jk
IjsKCXN3aXRjaCAocmVhc29uKSB7CgkJY2FzZSAidG9rZW5fbWlzc2luZyI6IHJldHVybiBgdW5h
dXRob3JpemVkOiBnYXRld2F5IHRva2VuIG1pc3NpbmcgKCR7dG9rZW5IaW50fSlgOwoJCWNhc2Ug
InRva2VuX21pc21hdGNoIjogcmV0dXJuIGB1bmF1dGhvcml6ZWQ6IGdhdGV3YXkgdG9rZW4gbWlz
bWF0Y2ggKCR7dG9rZW5IaW50fSlgOwoJCWNhc2UgInRva2VuX21pc3NpbmdfY29uZmlnIjogcmV0
dXJuICJ1bmF1dGhvcml6ZWQ6IGdhdGV3YXkgdG9rZW4gbm90IGNvbmZpZ3VyZWQgb24gZ2F0ZXdh
eSAoc2V0IGdhdGV3YXkuYXV0aC50b2tlbikiOwoJCWNhc2UgInBhc3N3b3JkX21pc3NpbmciOiBy
ZXR1cm4gYHVuYXV0aG9yaXplZDogZ2F0ZXdheSBwYXNzd29yZCBtaXNzaW5nICgke3Bhc3N3b3Jk
SGludH0pYDsKCQljYXNlICJwYXNzd29yZF9taXNtYXRjaCI6IHJldHVybiBgdW5hdXRob3JpemVk
OiBnYXRld2F5IHBhc3N3b3JkIG1pc21hdGNoICgke3Bhc3N3b3JkSGludH0pYDsKCQljYXNlICJw
YXNzd29yZF9taXNzaW5nX2NvbmZpZyI6IHJldHVybiAidW5hdXRob3JpemVkOiBnYXRld2F5IHBh
c3N3b3JkIG5vdCBjb25maWd1cmVkIG9uIGdhdGV3YXkgKHNldCBnYXRld2F5LmF1dGgucGFzc3dv
cmQpIjsKCQljYXNlICJib290c3RyYXBfdG9rZW5faW52YWxpZCI6IHJldHVybiAidW5hdXRob3Jp
emVkOiBib290c3RyYXAgdG9rZW4gaW52YWxpZCBvciBleHBpcmVkIChzY2FuIGEgZnJlc2ggc2V0
dXAgY29kZSkiOwoJCWNhc2UgInRhaWxzY2FsZV91c2VyX21pc3NpbmciOiByZXR1cm4gInVuYXV0
aG9yaXplZDogdGFpbHNjYWxlIGlkZW50aXR5IG1pc3NpbmcgKHVzZSBUYWlsc2NhbGUgU2VydmUg
YXV0aCBvciBnYXRld2F5IHRva2VuL3Bhc3N3b3JkKSI7CgkJY2FzZSAidGFpbHNjYWxlX3Byb3h5
X21pc3NpbmciOiByZXR1cm4gInVuYXV0aG9yaXplZDogdGFpbHNjYWxlIHByb3h5IGhlYWRlcnMg
bWlzc2luZyAodXNlIFRhaWxzY2FsZSBTZXJ2ZSBvciBnYXRld2F5IHRva2VuL3Bhc3N3b3JkKSI7
CgkJY2FzZSAidGFpbHNjYWxlX3dob2lzX2ZhaWxlZCI6IHJldHVybiAidW5hdXRob3JpemVkOiB0
YWlsc2NhbGUgaWRlbnRpdHkgY2hlY2sgZmFpbGVkICh1c2UgVGFpbHNjYWxlIFNlcnZlIGF1dGgg
b3IgZ2F0ZXdheSB0b2tlbi9wYXNzd29yZCkiOwoJCWNhc2UgInRhaWxzY2FsZV91c2VyX21pc21h
dGNoIjogcmV0dXJuICJ1bmF1dGhvcml6ZWQ6IHRhaWxzY2FsZSBpZGVudGl0eSBtaXNtYXRjaCAo
dXNlIFRhaWxzY2FsZSBTZXJ2ZSBhdXRoIG9yIGdhdGV3YXkgdG9rZW4vcGFzc3dvcmQpIjsKCQlj
YXNlICJyYXRlX2xpbWl0ZWQiOiByZXR1cm4gInVuYXV0aG9yaXplZDogdG9vIG1hbnkgZmFpbGVk
IGF1dGhlbnRpY2F0aW9uIGF0dGVtcHRzIChyZXRyeSBsYXRlcikiOwoJCWNhc2UgImRldmljZV90
b2tlbl9taXNtYXRjaCI6IHJldHVybiAidW5hdXRob3JpemVkOiBkZXZpY2UgdG9rZW4gbWlzbWF0
Y2ggKHJvdGF0ZS9yZWlzc3VlIGRldmljZSB0b2tlbikiOwoJCWRlZmF1bHQ6IGJyZWFrOwoJfQoJ
aWYgKGF1dGhNb2RlID09PSAidG9rZW4iICYmIGF1dGhQcm92aWRlZCA9PT0gIm5vbmUiKSByZXR1
cm4gYHVuYXV0aG9yaXplZDogZ2F0ZXdheSB0b2tlbiBtaXNzaW5nICgke3Rva2VuSGludH0pYDsK
CWlmIChhdXRoTW9kZSA9PT0gInRva2VuIiAmJiBhdXRoUHJvdmlkZWQgPT09ICJkZXZpY2UtdG9r
ZW4iKSByZXR1cm4gInVuYXV0aG9yaXplZDogZGV2aWNlIHRva2VuIHJlamVjdGVkIChwYWlyL3Jl
cGFpciB0aGlzIGRldmljZSwgb3IgcHJvdmlkZSBnYXRld2F5IHRva2VuKSI7CglpZiAoYXV0aFBy
b3ZpZGVkID09PSAiYm9vdHN0cmFwLXRva2VuIikgcmV0dXJuICJ1bmF1dGhvcml6ZWQ6IGJvb3Rz
dHJhcCB0b2tlbiBpbnZhbGlkIG9yIGV4cGlyZWQgKHNjYW4gYSBmcmVzaCBzZXR1cCBjb2RlKSI7
CglpZiAoYXV0aE1vZGUgPT09ICJwYXNzd29yZCIgJiYgYXV0aFByb3ZpZGVkID09PSAibm9uZSIp
IHJldHVybiBgdW5hdXRob3JpemVkOiBnYXRld2F5IHBhc3N3b3JkIG1pc3NpbmcgKCR7cGFzc3dv
cmRIaW50fSlgOwoJcmV0dXJuICJ1bmF1dGhvcml6ZWQiOwp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdp
b24gc3JjL2dhdGV3YXkvc2VydmVyL3dzLWNvbm5lY3Rpb24vY29ubmVjdC1wb2xpY3kudHMKZnVu
Y3Rpb24gcmVzb2x2ZUNvbnRyb2xVaUF1dGhQb2xpY3kocGFyYW1zKSB7Cgljb25zdCBhbGxvd0lu
c2VjdXJlQXV0aENvbmZpZ3VyZWQgPSBwYXJhbXMuaXNDb250cm9sVWkgJiYgcGFyYW1zLmNvbnRy
b2xVaUNvbmZpZz8uYWxsb3dJbnNlY3VyZUF1dGggPT09IHRydWU7Cgljb25zdCBkYW5nZXJvdXNs
eURpc2FibGVEZXZpY2VBdXRoID0gcGFyYW1zLmlzQ29udHJvbFVpICYmIHBhcmFtcy5jb250cm9s
VWlDb25maWc/LmRhbmdlcm91c2x5RGlzYWJsZURldmljZUF1dGggPT09IHRydWU7CglyZXR1cm4g
ewoJCWFsbG93SW5zZWN1cmVBdXRoQ29uZmlndXJlZCwKCQlkYW5nZXJvdXNseURpc2FibGVEZXZp
Y2VBdXRoLAoJCWFsbG93QnlwYXNzOiBkYW5nZXJvdXNseURpc2FibGVEZXZpY2VBdXRoLAoJCWRl
dmljZTogZGFuZ2Vyb3VzbHlEaXNhYmxlRGV2aWNlQXV0aCA/IG51bGwgOiBwYXJhbXMuZGV2aWNl
UmF3Cgl9Owp9CmZ1bmN0aW9uIHNob3VsZFNraXBDb250cm9sVWlQYWlyaW5nKHBvbGljeSwgcm9s
ZSwgdHJ1c3RlZFByb3h5QXV0aE9rID0gZmFsc2UpIHsKCWlmICh0cnVzdGVkUHJveHlBdXRoT2sp
IHJldHVybiB0cnVlOwoJcmV0dXJuIHJvbGUgPT09ICJvcGVyYXRvciIgJiYgcG9saWN5LmFsbG93
QnlwYXNzOwp9CmZ1bmN0aW9uIGlzVHJ1c3RlZFByb3h5Q29udHJvbFVpT3BlcmF0b3JBdXRoKHBh
cmFtcykgewoJcmV0dXJuIHBhcmFtcy5pc0NvbnRyb2xVaSAmJiBwYXJhbXMucm9sZSA9PT0gIm9w
ZXJhdG9yIiAmJiBwYXJhbXMuYXV0aE1vZGUgPT09ICJ0cnVzdGVkLXByb3h5IiAmJiBwYXJhbXMu
YXV0aE9rICYmIHBhcmFtcy5hdXRoTWV0aG9kID09PSAidHJ1c3RlZC1wcm94eSI7Cn0KZnVuY3Rp
b24gZXZhbHVhdGVNaXNzaW5nRGV2aWNlSWRlbnRpdHkocGFyYW1zKSB7CglpZiAocGFyYW1zLmhh
c0RldmljZUlkZW50aXR5KSByZXR1cm4geyBraW5kOiAiYWxsb3ciIH07CglpZiAocGFyYW1zLmlz
Q29udHJvbFVpICYmIHBhcmFtcy50cnVzdGVkUHJveHlBdXRoT2spIHJldHVybiB7IGtpbmQ6ICJh
bGxvdyIgfTsKCWlmIChwYXJhbXMuaXNDb250cm9sVWkgJiYgcGFyYW1zLmNvbnRyb2xVaUF1dGhQ
b2xpY3kuYWxsb3dCeXBhc3MgJiYgcGFyYW1zLnJvbGUgPT09ICJvcGVyYXRvciIpIHJldHVybiB7
IGtpbmQ6ICJhbGxvdyIgfTsKCWlmIChwYXJhbXMuaXNDb250cm9sVWkgJiYgIXBhcmFtcy5jb250
cm9sVWlBdXRoUG9saWN5LmFsbG93QnlwYXNzKSB7CgkJaWYgKCFwYXJhbXMuY29udHJvbFVpQXV0
aFBvbGljeS5hbGxvd0luc2VjdXJlQXV0aENvbmZpZ3VyZWQgfHwgIXBhcmFtcy5pc0xvY2FsQ2xp
ZW50KSByZXR1cm4geyBraW5kOiAicmVqZWN0LWNvbnRyb2wtdWktaW5zZWN1cmUtYXV0aCIgfTsK
CX0KCWlmIChyb2xlQ2FuU2tpcERldmljZUlkZW50aXR5KHBhcmFtcy5yb2xlLCBwYXJhbXMuc2hh
cmVkQXV0aE9rKSkgcmV0dXJuIHsga2luZDogImFsbG93IiB9OwoJaWYgKCFwYXJhbXMuYXV0aE9r
ICYmIHBhcmFtcy5oYXNTaGFyZWRBdXRoKSByZXR1cm4geyBraW5kOiAicmVqZWN0LXVuYXV0aG9y
aXplZCIgfTsKCXJldHVybiB7IGtpbmQ6ICJyZWplY3QtZGV2aWNlLXJlcXVpcmVkIiB9Owp9Ci8v
I2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dhdGV3YXkvc2VydmVyL3dzLWNvbm5lY3Rpb24vaGFu
ZHNoYWtlLWF1dGgtaGVscGVycy50cwpjb25zdCBCUk9XU0VSX09SSUdJTl9MT09QQkFDS19SQVRF
X0xJTUlUX0lQID0gIjE5OC4xOC4wLjEiOwpmdW5jdGlvbiByZXNvbHZlSGFuZHNoYWtlQnJvd3Nl
clNlY3VyaXR5Q29udGV4dChwYXJhbXMpIHsKCWNvbnN0IGhhc0Jyb3dzZXJPcmlnaW5IZWFkZXIg
PSBCb29sZWFuKHBhcmFtcy5yZXF1ZXN0T3JpZ2luICYmIHBhcmFtcy5yZXF1ZXN0T3JpZ2luLnRy
aW0oKSAhPT0gIiIpOwoJcmV0dXJuIHsKCQloYXNCcm93c2VyT3JpZ2luSGVhZGVyLAoJCWVuZm9y
Y2VPcmlnaW5DaGVja0ZvckFueUNsaWVudDogaGFzQnJvd3Nlck9yaWdpbkhlYWRlciwKCQlyYXRl
TGltaXRDbGllbnRJcDogaGFzQnJvd3Nlck9yaWdpbkhlYWRlciAmJiBpc0xvb3BiYWNrQWRkcmVz
cyhwYXJhbXMuY2xpZW50SXApID8gQlJPV1NFUl9PUklHSU5fTE9PUEJBQ0tfUkFURV9MSU1JVF9J
UCA6IHBhcmFtcy5jbGllbnRJcCwKCQlhdXRoUmF0ZUxpbWl0ZXI6IGhhc0Jyb3dzZXJPcmlnaW5I
ZWFkZXIgJiYgcGFyYW1zLmJyb3dzZXJSYXRlTGltaXRlciA/IHBhcmFtcy5icm93c2VyUmF0ZUxp
bWl0ZXIgOiBwYXJhbXMucmF0ZUxpbWl0ZXIKCX07Cn0KZnVuY3Rpb24gc2hvdWxkQWxsb3dTaWxl
bnRMb2NhbFBhaXJpbmcocGFyYW1zKSB7CglyZXR1cm4gcGFyYW1zLmlzTG9jYWxDbGllbnQgJiYg
KCFwYXJhbXMuaGFzQnJvd3Nlck9yaWdpbkhlYWRlciB8fCBwYXJhbXMuaXNDb250cm9sVWkgfHwg
cGFyYW1zLmlzV2ViY2hhdCkgJiYgKHBhcmFtcy5yZWFzb24gPT09ICJub3QtcGFpcmVkIiB8fCBw
YXJhbXMucmVhc29uID09PSAic2NvcGUtdXBncmFkZSIpOwp9CmZ1bmN0aW9uIHNob3VsZFNraXBC
YWNrZW5kU2VsZlBhaXJpbmcocGFyYW1zKSB7CglpZiAoIShwYXJhbXMuY29ubmVjdFBhcmFtcy5j
bGllbnQuaWQgPT09IEdBVEVXQVlfQ0xJRU5UX0lEUy5HQVRFV0FZX0NMSUVOVCAmJiBwYXJhbXMu
Y29ubmVjdFBhcmFtcy5jbGllbnQubW9kZSA9PT0gR0FURVdBWV9DTElFTlRfTU9ERVMuQkFDS0VO
RCkpIHJldHVybiBmYWxzZTsKCWNvbnN0IHVzZXNTaGFyZWRTZWNyZXRBdXRoID0gcGFyYW1zLmF1
dGhNZXRob2QgPT09ICJ0b2tlbiIgfHwgcGFyYW1zLmF1dGhNZXRob2QgPT09ICJwYXNzd29yZCI7
CglyZXR1cm4gcGFyYW1zLmlzTG9jYWxDbGllbnQgJiYgIXBhcmFtcy5oYXNCcm93c2VyT3JpZ2lu
SGVhZGVyICYmIHBhcmFtcy5zaGFyZWRBdXRoT2sgJiYgdXNlc1NoYXJlZFNlY3JldEF1dGg7Cn0K
ZnVuY3Rpb24gcmVzb2x2ZVNpZ25hdHVyZVRva2VuKGNvbm5lY3RQYXJhbXMpIHsKCXJldHVybiBj
b25uZWN0UGFyYW1zLmF1dGg/LnRva2VuID8/IGNvbm5lY3RQYXJhbXMuYXV0aD8uZGV2aWNlVG9r
ZW4gPz8gY29ubmVjdFBhcmFtcy5hdXRoPy5ib290c3RyYXBUb2tlbiA/PyBudWxsOwp9CmZ1bmN0
aW9uIGJ1aWxkVW5hdXRob3JpemVkSGFuZHNoYWtlQ29udGV4dChwYXJhbXMpIHsKCXJldHVybiB7
CgkJYXV0aFByb3ZpZGVkOiBwYXJhbXMuYXV0aFByb3ZpZGVkLAoJCWNhblJldHJ5V2l0aERldmlj
ZVRva2VuOiBwYXJhbXMuY2FuUmV0cnlXaXRoRGV2aWNlVG9rZW4sCgkJcmVjb21tZW5kZWROZXh0
U3RlcDogcGFyYW1zLnJlY29tbWVuZGVkTmV4dFN0ZXAKCX07Cn0KZnVuY3Rpb24gcmVzb2x2ZURl
dmljZVNpZ25hdHVyZVBheWxvYWRWZXJzaW9uKHBhcmFtcykgewoJY29uc3Qgc2lnbmF0dXJlVG9r
ZW4gPSByZXNvbHZlU2lnbmF0dXJlVG9rZW4ocGFyYW1zLmNvbm5lY3RQYXJhbXMpOwoJY29uc3Qg
YmFzZVBheWxvYWQgPSB7CgkJZGV2aWNlSWQ6IHBhcmFtcy5kZXZpY2UuaWQsCgkJY2xpZW50SWQ6
IHBhcmFtcy5jb25uZWN0UGFyYW1zLmNsaWVudC5pZCwKCQljbGllbnRNb2RlOiBwYXJhbXMuY29u
bmVjdFBhcmFtcy5jbGllbnQubW9kZSwKCQlyb2xlOiBwYXJhbXMucm9sZSwKCQlzY29wZXM6IHBh
cmFtcy5zY29wZXMsCgkJc2lnbmVkQXRNczogcGFyYW1zLnNpZ25lZEF0TXMsCgkJdG9rZW46IHNp
Z25hdHVyZVRva2VuLAoJCW5vbmNlOiBwYXJhbXMubm9uY2UKCX07Cgljb25zdCBwYXlsb2FkVjMg
PSBidWlsZERldmljZUF1dGhQYXlsb2FkVjMoewoJCS4uLmJhc2VQYXlsb2FkLAoJCXBsYXRmb3Jt
OiBwYXJhbXMuY29ubmVjdFBhcmFtcy5jbGllbnQucGxhdGZvcm0sCgkJZGV2aWNlRmFtaWx5OiBw
YXJhbXMuY29ubmVjdFBhcmFtcy5jbGllbnQuZGV2aWNlRmFtaWx5Cgl9KTsKCWlmICh2ZXJpZnlE
ZXZpY2VTaWduYXR1cmUocGFyYW1zLmRldmljZS5wdWJsaWNLZXksIHBheWxvYWRWMywgcGFyYW1z
LmRldmljZS5zaWduYXR1cmUpKSByZXR1cm4gInYzIjsKCWNvbnN0IHBheWxvYWRWMiA9IGJ1aWxk
RGV2aWNlQXV0aFBheWxvYWQoYmFzZVBheWxvYWQpOwoJaWYgKHZlcmlmeURldmljZVNpZ25hdHVy
ZShwYXJhbXMuZGV2aWNlLnB1YmxpY0tleSwgcGF5bG9hZFYyLCBwYXJhbXMuZGV2aWNlLnNpZ25h
dHVyZSkpIHJldHVybiAidjIiOwoJcmV0dXJuIG51bGw7Cn0KZnVuY3Rpb24gcmVzb2x2ZUF1dGhQ
cm92aWRlZEtpbmQoY29ubmVjdEF1dGgpIHsKCXJldHVybiBjb25uZWN0QXV0aD8ucGFzc3dvcmQg
PyAicGFzc3dvcmQiIDogY29ubmVjdEF1dGg/LnRva2VuID8gInRva2VuIiA6IGNvbm5lY3RBdXRo
Py5ib290c3RyYXBUb2tlbiA/ICJib290c3RyYXAtdG9rZW4iIDogY29ubmVjdEF1dGg/LmRldmlj
ZVRva2VuID8gImRldmljZS10b2tlbiIgOiAibm9uZSI7Cn0KZnVuY3Rpb24gcmVzb2x2ZVVuYXV0
aG9yaXplZEhhbmRzaGFrZUNvbnRleHQocGFyYW1zKSB7Cgljb25zdCBhdXRoUHJvdmlkZWQgPSBy
ZXNvbHZlQXV0aFByb3ZpZGVkS2luZChwYXJhbXMuY29ubmVjdEF1dGgpOwoJY29uc3QgY2FuUmV0
cnlXaXRoRGV2aWNlVG9rZW4gPSBwYXJhbXMuZmFpbGVkQXV0aC5yZWFzb24gPT09ICJ0b2tlbl9t
aXNtYXRjaCIgJiYgcGFyYW1zLmhhc0RldmljZUlkZW50aXR5ICYmIGF1dGhQcm92aWRlZCA9PT0g
InRva2VuIiAmJiAhcGFyYW1zLmNvbm5lY3RBdXRoPy5kZXZpY2VUb2tlbjsKCWlmIChjYW5SZXRy
eVdpdGhEZXZpY2VUb2tlbikgcmV0dXJuIGJ1aWxkVW5hdXRob3JpemVkSGFuZHNoYWtlQ29udGV4
dCh7CgkJYXV0aFByb3ZpZGVkLAoJCWNhblJldHJ5V2l0aERldmljZVRva2VuLAoJCXJlY29tbWVu
ZGVkTmV4dFN0ZXA6ICJyZXRyeV93aXRoX2RldmljZV90b2tlbiIKCX0pOwoJc3dpdGNoIChwYXJh
bXMuZmFpbGVkQXV0aC5yZWFzb24pIHsKCQljYXNlICJ0b2tlbl9taXNzaW5nIjoKCQljYXNlICJ0
b2tlbl9taXNzaW5nX2NvbmZpZyI6CgkJY2FzZSAicGFzc3dvcmRfbWlzc2luZyI6CgkJY2FzZSAi
cGFzc3dvcmRfbWlzc2luZ19jb25maWciOiByZXR1cm4gYnVpbGRVbmF1dGhvcml6ZWRIYW5kc2hh
a2VDb250ZXh0KHsKCQkJYXV0aFByb3ZpZGVkLAoJCQljYW5SZXRyeVdpdGhEZXZpY2VUb2tlbiwK
CQkJcmVjb21tZW5kZWROZXh0U3RlcDogInVwZGF0ZV9hdXRoX2NvbmZpZ3VyYXRpb24iCgkJfSk7
CgkJY2FzZSAidG9rZW5fbWlzbWF0Y2giOgoJCWNhc2UgInBhc3N3b3JkX21pc21hdGNoIjoKCQlj
YXNlICJkZXZpY2VfdG9rZW5fbWlzbWF0Y2giOiByZXR1cm4gYnVpbGRVbmF1dGhvcml6ZWRIYW5k
c2hha2VDb250ZXh0KHsKCQkJYXV0aFByb3ZpZGVkLAoJCQljYW5SZXRyeVdpdGhEZXZpY2VUb2tl
biwKCQkJcmVjb21tZW5kZWROZXh0U3RlcDogInVwZGF0ZV9hdXRoX2NyZWRlbnRpYWxzIgoJCX0p
OwoJCWNhc2UgInJhdGVfbGltaXRlZCI6IHJldHVybiBidWlsZFVuYXV0aG9yaXplZEhhbmRzaGFr
ZUNvbnRleHQoewoJCQlhdXRoUHJvdmlkZWQsCgkJCWNhblJldHJ5V2l0aERldmljZVRva2VuLAoJ
CQlyZWNvbW1lbmRlZE5leHRTdGVwOiAid2FpdF90aGVuX3JldHJ5IgoJCX0pOwoJCWRlZmF1bHQ6
IHJldHVybiBidWlsZFVuYXV0aG9yaXplZEhhbmRzaGFrZUNvbnRleHQoewoJCQlhdXRoUHJvdmlk
ZWQsCgkJCWNhblJldHJ5V2l0aERldmljZVRva2VuLAoJCQlyZWNvbW1lbmRlZE5leHRTdGVwOiAi
cmV2aWV3X2F1dGhfY29uZmlndXJhdGlvbiIKCQl9KTsKCX0KfQovLyNlbmRyZWdpb24KLy8jcmVn
aW9uIHNyYy9nYXRld2F5L3NlcnZlci93cy1jb25uZWN0aW9uL3VuYXV0aG9yaXplZC1mbG9vZC1n
dWFyZC50cwpjb25zdCBERUZBVUxUX0NMT1NFX0FGVEVSID0gMTA7CmNvbnN0IERFRkFVTFRfTE9H
X0VWRVJZID0gMTAwOwp2YXIgVW5hdXRob3JpemVkRmxvb2RHdWFyZCA9IGNsYXNzIHsKCWNvbnN0
cnVjdG9yKG9wdGlvbnMpIHsKCQl0aGlzLmNvdW50ID0gMDsKCQl0aGlzLnN1cHByZXNzZWRTaW5j
ZUxhc3RMb2cgPSAwOwoJCXRoaXMuY2xvc2VBZnRlciA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3Io
b3B0aW9ucz8uY2xvc2VBZnRlciA/PyBERUZBVUxUX0NMT1NFX0FGVEVSKSk7CgkJdGhpcy5sb2dF
dmVyeSA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3Iob3B0aW9ucz8ubG9nRXZlcnkgPz8gREVGQVVM
VF9MT0dfRVZFUlkpKTsKCX0KCXJlZ2lzdGVyVW5hdXRob3JpemVkKCkgewoJCXRoaXMuY291bnQg
Kz0gMTsKCQljb25zdCBzaG91bGRDbG9zZSA9IHRoaXMuY291bnQgPiB0aGlzLmNsb3NlQWZ0ZXI7
CgkJaWYgKCEodGhpcy5jb3VudCA9PT0gMSB8fCB0aGlzLmNvdW50ICUgdGhpcy5sb2dFdmVyeSA9
PT0gMCB8fCBzaG91bGRDbG9zZSkpIHsKCQkJdGhpcy5zdXBwcmVzc2VkU2luY2VMYXN0TG9nICs9
IDE7CgkJCXJldHVybiB7CgkJCQlzaG91bGRDbG9zZSwKCQkJCXNob3VsZExvZzogZmFsc2UsCgkJ
CQljb3VudDogdGhpcy5jb3VudCwKCQkJCXN1cHByZXNzZWRTaW5jZUxhc3RMb2c6IDAKCQkJfTsK
CQl9CgkJY29uc3Qgc3VwcHJlc3NlZFNpbmNlTGFzdExvZyA9IHRoaXMuc3VwcHJlc3NlZFNpbmNl
TGFzdExvZzsKCQl0aGlzLnN1cHByZXNzZWRTaW5jZUxhc3RMb2cgPSAwOwoJCXJldHVybiB7CgkJ
CXNob3VsZENsb3NlLAoJCQlzaG91bGRMb2c6IHRydWUsCgkJCWNvdW50OiB0aGlzLmNvdW50LAoJ
CQlzdXBwcmVzc2VkU2luY2VMYXN0TG9nCgkJfTsKCX0KCXJlc2V0KCkgewoJCXRoaXMuY291bnQg
PSAwOwoJCXRoaXMuc3VwcHJlc3NlZFNpbmNlTGFzdExvZyA9IDA7Cgl9Cn07CmZ1bmN0aW9uIGlz
VW5hdXRob3JpemVkUm9sZUVycm9yKGVycm9yKSB7CglpZiAoIWVycm9yKSByZXR1cm4gZmFsc2U7
CglyZXR1cm4gZXJyb3IuY29kZSA9PT0gRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QgJiYgdHlw
ZW9mIGVycm9yLm1lc3NhZ2UgPT09ICJzdHJpbmciICYmIGVycm9yLm1lc3NhZ2Uuc3RhcnRzV2l0
aCgidW5hdXRob3JpemVkIHJvbGU6Iik7Cn0KLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvZ2F0
ZXdheS9zZXJ2ZXIvd3MtY29ubmVjdGlvbi9tZXNzYWdlLWhhbmRsZXIudHMKY29uc3QgREVWSUNF
X1NJR05BVFVSRV9TS0VXX01TID0gMTIwICogMWUzOwpmdW5jdGlvbiByZXNvbHZlUGlubmVkQ2xp
ZW50TWV0YWRhdGEocGFyYW1zKSB7Cgljb25zdCBjbGFpbWVkUGxhdGZvcm0gPSBub3JtYWxpemVE
ZXZpY2VNZXRhZGF0YUZvckF1dGgocGFyYW1zLmNsYWltZWRQbGF0Zm9ybSk7Cgljb25zdCBjbGFp
bWVkRGV2aWNlRmFtaWx5ID0gbm9ybWFsaXplRGV2aWNlTWV0YWRhdGFGb3JBdXRoKHBhcmFtcy5j
bGFpbWVkRGV2aWNlRmFtaWx5KTsKCWNvbnN0IHBhaXJlZFBsYXRmb3JtID0gbm9ybWFsaXplRGV2
aWNlTWV0YWRhdGFGb3JBdXRoKHBhcmFtcy5wYWlyZWRQbGF0Zm9ybSk7Cgljb25zdCBwYWlyZWRE
ZXZpY2VGYW1pbHkgPSBub3JtYWxpemVEZXZpY2VNZXRhZGF0YUZvckF1dGgocGFyYW1zLnBhaXJl
ZERldmljZUZhbWlseSk7Cgljb25zdCBoYXNQaW5uZWRQbGF0Zm9ybSA9IHBhaXJlZFBsYXRmb3Jt
ICE9PSAiIjsKCWNvbnN0IGhhc1Bpbm5lZERldmljZUZhbWlseSA9IHBhaXJlZERldmljZUZhbWls
eSAhPT0gIiI7CglyZXR1cm4gewoJCXBsYXRmb3JtTWlzbWF0Y2g6IGhhc1Bpbm5lZFBsYXRmb3Jt
ICYmIGNsYWltZWRQbGF0Zm9ybSAhPT0gcGFpcmVkUGxhdGZvcm0sCgkJZGV2aWNlRmFtaWx5TWlz
bWF0Y2g6IGhhc1Bpbm5lZERldmljZUZhbWlseSAmJiBjbGFpbWVkRGV2aWNlRmFtaWx5ICE9PSBw
YWlyZWREZXZpY2VGYW1pbHksCgkJcGlubmVkUGxhdGZvcm06IGhhc1Bpbm5lZFBsYXRmb3JtID8g
cGFyYW1zLnBhaXJlZFBsYXRmb3JtIDogdm9pZCAwLAoJCXBpbm5lZERldmljZUZhbWlseTogaGFz
UGlubmVkRGV2aWNlRmFtaWx5ID8gcGFyYW1zLnBhaXJlZERldmljZUZhbWlseSA6IHZvaWQgMAoJ
fTsKfQpmdW5jdGlvbiBhdHRhY2hHYXRld2F5V3NNZXNzYWdlSGFuZGxlcihwYXJhbXMpIHsKCWNv
bnN0IHsgc29ja2V0LCB1cGdyYWRlUmVxLCBjb25uSWQsIHJlbW90ZUFkZHIsIGZvcndhcmRlZEZv
ciwgcmVhbElwLCByZXF1ZXN0SG9zdCwgcmVxdWVzdE9yaWdpbiwgcmVxdWVzdFVzZXJBZ2VudCwg
Y2FudmFzSG9zdFVybCwgY29ubmVjdE5vbmNlLCByZXNvbHZlZEF1dGgsIHJhdGVMaW1pdGVyLCBi
cm93c2VyUmF0ZUxpbWl0ZXIsIGdhdGV3YXlNZXRob2RzLCBldmVudHMsIGV4dHJhSGFuZGxlcnMs
IGJ1aWxkUmVxdWVzdENvbnRleHQsIHNlbmQsIGNsb3NlLCBpc0Nsb3NlZCwgY2xlYXJIYW5kc2hh
a2VUaW1lciwgZ2V0Q2xpZW50LCBzZXRDbGllbnQsIHNldEhhbmRzaGFrZVN0YXRlLCBzZXRDbG9z
ZUNhdXNlLCBzZXRMYXN0RnJhbWVNZXRhLCBvcmlnaW5DaGVja01ldHJpY3MsIGxvZ0dhdGV3YXks
IGxvZ0hlYWx0aCwgbG9nV3NDb250cm9sIH0gPSBwYXJhbXM7Cgljb25zdCBjb25maWdTbmFwc2hv
dCA9IGxvYWRDb25maWcoKTsKCWNvbnN0IHRydXN0ZWRQcm94aWVzID0gY29uZmlnU25hcHNob3Qu
Z2F0ZXdheT8udHJ1c3RlZFByb3hpZXMgPz8gW107Cgljb25zdCBhbGxvd1JlYWxJcEZhbGxiYWNr
ID0gY29uZmlnU25hcHNob3QuZ2F0ZXdheT8uYWxsb3dSZWFsSXBGYWxsYmFjayA9PT0gdHJ1ZTsK
CWNvbnN0IGNsaWVudElwID0gcmVzb2x2ZUNsaWVudElwKHsKCQlyZW1vdGVBZGRyLAoJCWZvcndh
cmRlZEZvciwKCQlyZWFsSXAsCgkJdHJ1c3RlZFByb3hpZXMsCgkJYWxsb3dSZWFsSXBGYWxsYmFj
awoJfSk7Cgljb25zdCBoYXNQcm94eUhlYWRlcnMgPSBCb29sZWFuKGZvcndhcmRlZEZvciB8fCBy
ZWFsSXApOwoJY29uc3QgcmVtb3RlSXNUcnVzdGVkUHJveHkgPSBpc1RydXN0ZWRQcm94eUFkZHJl
c3MocmVtb3RlQWRkciwgdHJ1c3RlZFByb3hpZXMpOwoJY29uc3QgaGFzVW50cnVzdGVkUHJveHlI
ZWFkZXJzID0gaGFzUHJveHlIZWFkZXJzICYmICFyZW1vdGVJc1RydXN0ZWRQcm94eTsKCWNvbnN0
IGhvc3RJc0xvY2FsaXNoID0gaXNMb2NhbGlzaEhvc3QocmVxdWVzdEhvc3QpOwoJY29uc3QgaXNM
b2NhbENsaWVudCA9IGlzTG9jYWxEaXJlY3RSZXF1ZXN0KHVwZ3JhZGVSZXEsIHRydXN0ZWRQcm94
aWVzLCBhbGxvd1JlYWxJcEZhbGxiYWNrKTsKCWNvbnN0IHJlcG9ydGVkQ2xpZW50SXAgPSBpc0xv
Y2FsQ2xpZW50IHx8IGhhc1VudHJ1c3RlZFByb3h5SGVhZGVycyA/IHZvaWQgMCA6IGNsaWVudElw
ICYmICFpc0xvb3BiYWNrQWRkcmVzcyhjbGllbnRJcCkgPyBjbGllbnRJcCA6IHZvaWQgMDsKCWlm
IChoYXNVbnRydXN0ZWRQcm94eUhlYWRlcnMpIGxvZ1dzQ29udHJvbC53YXJuKCJQcm94eSBoZWFk
ZXJzIGRldGVjdGVkIGZyb20gdW50cnVzdGVkIGFkZHJlc3MuIENvbm5lY3Rpb24gd2lsbCBub3Qg
YmUgdHJlYXRlZCBhcyBsb2NhbC4gQ29uZmlndXJlIGdhdGV3YXkudHJ1c3RlZFByb3hpZXMgdG8g
cmVzdG9yZSBsb2NhbCBjbGllbnQgZGV0ZWN0aW9uIGJlaGluZCB5b3VyIHByb3h5LiIpOwoJaWYg
KCFob3N0SXNMb2NhbGlzaCAmJiBpc0xvb3BiYWNrQWRkcmVzcyhyZW1vdGVBZGRyKSAmJiAhaGFz
UHJveHlIZWFkZXJzKSBsb2dXc0NvbnRyb2wud2FybigiTG9vcGJhY2sgY29ubmVjdGlvbiB3aXRo
IG5vbi1sb2NhbCBIb3N0IGhlYWRlci4gVHJlYXRpbmcgaXQgYXMgcmVtb3RlLiBJZiB5b3UncmUg
YmVoaW5kIGEgcmV2ZXJzZSBwcm94eSwgc2V0IGdhdGV3YXkudHJ1c3RlZFByb3hpZXMgYW5kIGZv
cndhcmQgWC1Gb3J3YXJkZWQtRm9yL1gtUmVhbC1JUC4iKTsKCWNvbnN0IGlzV2ViY2hhdENvbm5l
Y3QgPSAocCkgPT4gaXNXZWJjaGF0Q2xpZW50KHA/LmNsaWVudCk7Cgljb25zdCB1bmF1dGhvcml6
ZWRGbG9vZEd1YXJkID0gbmV3IFVuYXV0aG9yaXplZEZsb29kR3VhcmQoKTsKCWNvbnN0IHsgaGFz
QnJvd3Nlck9yaWdpbkhlYWRlciwgZW5mb3JjZU9yaWdpbkNoZWNrRm9yQW55Q2xpZW50LCByYXRl
TGltaXRDbGllbnRJcDogYnJvd3NlclJhdGVMaW1pdENsaWVudElwLCBhdXRoUmF0ZUxpbWl0ZXIg
fSA9IHJlc29sdmVIYW5kc2hha2VCcm93c2VyU2VjdXJpdHlDb250ZXh0KHsKCQlyZXF1ZXN0T3Jp
Z2luLAoJCWNsaWVudElwLAoJCXJhdGVMaW1pdGVyLAoJCWJyb3dzZXJSYXRlTGltaXRlcgoJfSk7
Cglzb2NrZXQub24oIm1lc3NhZ2UiLCBhc3luYyAoZGF0YSkgPT4gewoJCWlmIChpc0Nsb3NlZCgp
KSByZXR1cm47CgkJY29uc3QgcHJlYXV0aFBheWxvYWRCeXRlcyA9ICFnZXRDbGllbnQoKSA/IGdl
dFJhd0RhdGFCeXRlTGVuZ3RoKGRhdGEpIDogdm9pZCAwOwoJCWlmIChwcmVhdXRoUGF5bG9hZEJ5
dGVzICE9PSB2b2lkIDAgJiYgcHJlYXV0aFBheWxvYWRCeXRlcyA+IDY1NTM2KSB7CgkJCXNldEhh
bmRzaGFrZVN0YXRlKCJmYWlsZWQiKTsKCQkJc2V0Q2xvc2VDYXVzZSgicHJlYXV0aC1wYXlsb2Fk
LXRvby1sYXJnZSIsIHsKCQkJCXBheWxvYWRCeXRlczogcHJlYXV0aFBheWxvYWRCeXRlcywKCQkJ
CWxpbWl0Qnl0ZXM6IE1BWF9QUkVBVVRIX1BBWUxPQURfQllURVMKCQkJfSk7CgkJCWNsb3NlKDEw
MDksICJwcmVhdXRoIHBheWxvYWQgdG9vIGxhcmdlIik7CgkJCXJldHVybjsKCQl9CgkJY29uc3Qg
dGV4dCA9IHJhd0RhdGFUb1N0cmluZyhkYXRhKTsKCQl0cnkgewoJCQljb25zdCBwYXJzZWQgPSBK
U09OLnBhcnNlKHRleHQpOwoJCQljb25zdCBmcmFtZVR5cGUgPSBwYXJzZWQgJiYgdHlwZW9mIHBh
cnNlZCA9PT0gIm9iamVjdCIgJiYgInR5cGUiIGluIHBhcnNlZCA/IHR5cGVvZiBwYXJzZWQudHlw
ZSA9PT0gInN0cmluZyIgPyBTdHJpbmcocGFyc2VkLnR5cGUpIDogdm9pZCAwIDogdm9pZCAwOwoJ
CQljb25zdCBmcmFtZU1ldGhvZCA9IHBhcnNlZCAmJiB0eXBlb2YgcGFyc2VkID09PSAib2JqZWN0
IiAmJiAibWV0aG9kIiBpbiBwYXJzZWQgPyB0eXBlb2YgcGFyc2VkLm1ldGhvZCA9PT0gInN0cmlu
ZyIgPyBTdHJpbmcocGFyc2VkLm1ldGhvZCkgOiB2b2lkIDAgOiB2b2lkIDA7CgkJCWNvbnN0IGZy
YW1lSWQgPSBwYXJzZWQgJiYgdHlwZW9mIHBhcnNlZCA9PT0gIm9iamVjdCIgJiYgImlkIiBpbiBw
YXJzZWQgPyB0eXBlb2YgcGFyc2VkLmlkID09PSAic3RyaW5nIiA/IFN0cmluZyhwYXJzZWQuaWQp
IDogdm9pZCAwIDogdm9pZCAwOwoJCQlpZiAoZnJhbWVUeXBlIHx8IGZyYW1lTWV0aG9kIHx8IGZy
YW1lSWQpIHNldExhc3RGcmFtZU1ldGEoewoJCQkJdHlwZTogZnJhbWVUeXBlLAoJCQkJbWV0aG9k
OiBmcmFtZU1ldGhvZCwKCQkJCWlkOiBmcmFtZUlkCgkJCX0pOwoJCQljb25zdCBjbGllbnQgPSBn
ZXRDbGllbnQoKTsKCQkJaWYgKCFjbGllbnQpIHsKCQkJCWNvbnN0IGlzUmVxdWVzdEZyYW1lID0g
dmFsaWRhdGVSZXF1ZXN0RnJhbWUocGFyc2VkKTsKCQkJCWlmICghaXNSZXF1ZXN0RnJhbWUgfHwg
cGFyc2VkLm1ldGhvZCAhPT0gImNvbm5lY3QiIHx8ICF2YWxpZGF0ZUNvbm5lY3RQYXJhbXMocGFy
c2VkLnBhcmFtcykpIHsKCQkJCQljb25zdCBoYW5kc2hha2VFcnJvciA9IGlzUmVxdWVzdEZyYW1l
ID8gcGFyc2VkLm1ldGhvZCA9PT0gImNvbm5lY3QiID8gYGludmFsaWQgY29ubmVjdCBwYXJhbXM6
ICR7Zm9ybWF0VmFsaWRhdGlvbkVycm9ycyh2YWxpZGF0ZUNvbm5lY3RQYXJhbXMuZXJyb3JzKX1g
IDogImludmFsaWQgaGFuZHNoYWtlOiBmaXJzdCByZXF1ZXN0IG11c3QgYmUgY29ubmVjdCIgOiAi
aW52YWxpZCByZXF1ZXN0IGZyYW1lIjsKCQkJCQlzZXRIYW5kc2hha2VTdGF0ZSgiZmFpbGVkIik7
CgkJCQkJc2V0Q2xvc2VDYXVzZSgiaW52YWxpZC1oYW5kc2hha2UiLCB7CgkJCQkJCWZyYW1lVHlw
ZSwKCQkJCQkJZnJhbWVNZXRob2QsCgkJCQkJCWZyYW1lSWQsCgkJCQkJCWhhbmRzaGFrZUVycm9y
CgkJCQkJfSk7CgkJCQkJaWYgKGlzUmVxdWVzdEZyYW1lKSBzZW5kKHsKCQkJCQkJdHlwZTogInJl
cyIsCgkJCQkJCWlkOiBwYXJzZWQuaWQsCgkJCQkJCW9rOiBmYWxzZSwKCQkJCQkJZXJyb3I6IGVy
cm9yU2hhcGUoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsIGhhbmRzaGFrZUVycm9yKQoJCQkJ
CX0pOwoJCQkJCWVsc2UgbG9nV3NDb250cm9sLndhcm4oYGludmFsaWQgaGFuZHNoYWtlIGNvbm49
JHtjb25uSWR9IHJlbW90ZT0ke3JlbW90ZUFkZHIgPz8gIj8ifSBmd2Q9JHtmb3J3YXJkZWRGb3Ig
Pz8gIm4vYSJ9IG9yaWdpbj0ke3JlcXVlc3RPcmlnaW4gPz8gIm4vYSJ9IGhvc3Q9JHtyZXF1ZXN0
SG9zdCA/PyAibi9hIn0gdWE9JHtyZXF1ZXN0VXNlckFnZW50ID8/ICJuL2EifWApOwoJCQkJCWNv
bnN0IGNsb3NlUmVhc29uID0gdHJ1bmNhdGVDbG9zZVJlYXNvbihoYW5kc2hha2VFcnJvciB8fCAi
aW52YWxpZCBoYW5kc2hha2UiKTsKCQkJCQlpZiAoaXNSZXF1ZXN0RnJhbWUpIHF1ZXVlTWljcm90
YXNrKCgpID0+IGNsb3NlKDEwMDgsIGNsb3NlUmVhc29uKSk7CgkJCQkJZWxzZSBjbG9zZSgxMDA4
LCBjbG9zZVJlYXNvbik7CgkJCQkJcmV0dXJuOwoJCQkJfQoJCQkJY29uc3QgZnJhbWUgPSBwYXJz
ZWQ7CgkJCQljb25zdCBjb25uZWN0UGFyYW1zID0gZnJhbWUucGFyYW1zOwoJCQkJY29uc3QgY2xp
ZW50TGFiZWwgPSBjb25uZWN0UGFyYW1zLmNsaWVudC5kaXNwbGF5TmFtZSA/PyBjb25uZWN0UGFy
YW1zLmNsaWVudC5pZDsKCQkJCWNvbnN0IGNsaWVudE1ldGEgPSB7CgkJCQkJY2xpZW50OiBjb25u
ZWN0UGFyYW1zLmNsaWVudC5pZCwKCQkJCQljbGllbnREaXNwbGF5TmFtZTogY29ubmVjdFBhcmFt
cy5jbGllbnQuZGlzcGxheU5hbWUsCgkJCQkJbW9kZTogY29ubmVjdFBhcmFtcy5jbGllbnQubW9k
ZSwKCQkJCQl2ZXJzaW9uOiBjb25uZWN0UGFyYW1zLmNsaWVudC52ZXJzaW9uCgkJCQl9OwoJCQkJ
Y29uc3QgbWFya0hhbmRzaGFrZUZhaWx1cmUgPSAoY2F1c2UsIG1ldGEpID0+IHsKCQkJCQlzZXRI
YW5kc2hha2VTdGF0ZSgiZmFpbGVkIik7CgkJCQkJc2V0Q2xvc2VDYXVzZShjYXVzZSwgewoJCQkJ
CQkuLi5tZXRhLAoJCQkJCQkuLi5jbGllbnRNZXRhCgkJCQkJfSk7CgkJCQl9OwoJCQkJY29uc3Qg
c2VuZEhhbmRzaGFrZUVycm9yUmVzcG9uc2UgPSAoY29kZSwgbWVzc2FnZSwgb3B0aW9ucykgPT4g
ewoJCQkJCXNlbmQoewoJCQkJCQl0eXBlOiAicmVzIiwKCQkJCQkJaWQ6IGZyYW1lLmlkLAoJCQkJ
CQlvazogZmFsc2UsCgkJCQkJCWVycm9yOiBlcnJvclNoYXBlKGNvZGUsIG1lc3NhZ2UsIG9wdGlv
bnMpCgkJCQkJfSk7CgkJCQl9OwoJCQkJY29uc3QgeyBtaW5Qcm90b2NvbCwgbWF4UHJvdG9jb2wg
fSA9IGNvbm5lY3RQYXJhbXM7CgkJCQlpZiAobWF4UHJvdG9jb2wgPCAzIHx8IG1pblByb3RvY29s
ID4gMykgewoJCQkJCW1hcmtIYW5kc2hha2VGYWlsdXJlKCJwcm90b2NvbC1taXNtYXRjaCIsIHsK
CQkJCQkJbWluUHJvdG9jb2wsCgkJCQkJCW1heFByb3RvY29sLAoJCQkJCQlleHBlY3RlZFByb3Rv
Y29sOiAzCgkJCQkJfSk7CgkJCQkJbG9nV3NDb250cm9sLndhcm4oYHByb3RvY29sIG1pc21hdGNo
IGNvbm49JHtjb25uSWR9IHJlbW90ZT0ke3JlbW90ZUFkZHIgPz8gIj8ifSBjbGllbnQ9JHtjbGll
bnRMYWJlbH0gJHtjb25uZWN0UGFyYW1zLmNsaWVudC5tb2RlfSB2JHtjb25uZWN0UGFyYW1zLmNs
aWVudC52ZXJzaW9ufWApOwoJCQkJCXNlbmRIYW5kc2hha2VFcnJvclJlc3BvbnNlKEVycm9yQ29k
ZXMuSU5WQUxJRF9SRVFVRVNULCAicHJvdG9jb2wgbWlzbWF0Y2giLCB7IGRldGFpbHM6IHsgZXhw
ZWN0ZWRQcm90b2NvbDogMyB9IH0pOwoJCQkJCWNsb3NlKDEwMDIsICJwcm90b2NvbCBtaXNtYXRj
aCIpOwoJCQkJCXJldHVybjsKCQkJCX0KCQkJCWNvbnN0IHJvbGVSYXcgPSBjb25uZWN0UGFyYW1z
LnJvbGUgPz8gIm9wZXJhdG9yIjsKCQkJCWNvbnN0IHJvbGUgPSBwYXJzZUdhdGV3YXlSb2xlKHJv
bGVSYXcpOwoJCQkJaWYgKCFyb2xlKSB7CgkJCQkJbWFya0hhbmRzaGFrZUZhaWx1cmUoImludmFs
aWQtcm9sZSIsIHsgcm9sZTogcm9sZVJhdyB9KTsKCQkJCQlzZW5kSGFuZHNoYWtlRXJyb3JSZXNw
b25zZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgImludmFsaWQgcm9sZSIpOwoJCQkJCWNs
b3NlKDEwMDgsICJpbnZhbGlkIHJvbGUiKTsKCQkJCQlyZXR1cm47CgkJCQl9CgkJCQlsZXQgc2Nv
cGVzID0gQXJyYXkuaXNBcnJheShjb25uZWN0UGFyYW1zLnNjb3BlcykgPyBjb25uZWN0UGFyYW1z
LnNjb3BlcyA6IFtdOwoJCQkJY29ubmVjdFBhcmFtcy5yb2xlID0gcm9sZTsKCQkJCWNvbm5lY3RQ
YXJhbXMuc2NvcGVzID0gc2NvcGVzOwoJCQkJY29uc3QgaXNDb250cm9sVWkgPSBjb25uZWN0UGFy
YW1zLmNsaWVudC5pZCA9PT0gR0FURVdBWV9DTElFTlRfSURTLkNPTlRST0xfVUk7CgkJCQljb25z
dCBpc1dlYmNoYXQgPSBpc1dlYmNoYXRDb25uZWN0KGNvbm5lY3RQYXJhbXMpOwoJCQkJaWYgKGVu
Zm9yY2VPcmlnaW5DaGVja0ZvckFueUNsaWVudCB8fCBpc0NvbnRyb2xVaSB8fCBpc1dlYmNoYXQp
IHsKCQkJCQljb25zdCBob3N0SGVhZGVyT3JpZ2luRmFsbGJhY2tFbmFibGVkID0gY29uZmlnU25h
cHNob3QuZ2F0ZXdheT8uY29udHJvbFVpPy5kYW5nZXJvdXNseUFsbG93SG9zdEhlYWRlck9yaWdp
bkZhbGxiYWNrID09PSB0cnVlOwoJCQkJCWNvbnN0IG9yaWdpbkNoZWNrID0gY2hlY2tCcm93c2Vy
T3JpZ2luKHsKCQkJCQkJcmVxdWVzdEhvc3QsCgkJCQkJCW9yaWdpbjogcmVxdWVzdE9yaWdpbiwK
CQkJCQkJYWxsb3dlZE9yaWdpbnM6IGNvbmZpZ1NuYXBzaG90LmdhdGV3YXk/LmNvbnRyb2xVaT8u
YWxsb3dlZE9yaWdpbnMsCgkJCQkJCWFsbG93SG9zdEhlYWRlck9yaWdpbkZhbGxiYWNrOiBob3N0
SGVhZGVyT3JpZ2luRmFsbGJhY2tFbmFibGVkLAoJCQkJCQlpc0xvY2FsQ2xpZW50CgkJCQkJfSk7
CgkJCQkJaWYgKCFvcmlnaW5DaGVjay5vaykgewoJCQkJCQljb25zdCBlcnJvck1lc3NhZ2UgPSAi
b3JpZ2luIG5vdCBhbGxvd2VkIChvcGVuIHRoZSBDb250cm9sIFVJIGZyb20gdGhlIGdhdGV3YXkg
aG9zdCBvciBhbGxvdyBpdCBpbiBnYXRld2F5LmNvbnRyb2xVaS5hbGxvd2VkT3JpZ2lucykiOwoJ
CQkJCQltYXJrSGFuZHNoYWtlRmFpbHVyZSgib3JpZ2luLW1pc21hdGNoIiwgewoJCQkJCQkJb3Jp
Z2luOiByZXF1ZXN0T3JpZ2luID8/ICJuL2EiLAoJCQkJCQkJaG9zdDogcmVxdWVzdEhvc3QgPz8g
Im4vYSIsCgkJCQkJCQlyZWFzb246IG9yaWdpbkNoZWNrLnJlYXNvbgoJCQkJCQl9KTsKCQkJCQkJ
c2VuZEhhbmRzaGFrZUVycm9yUmVzcG9uc2UoRXJyb3JDb2Rlcy5JTlZBTElEX1JFUVVFU1QsIGVy
cm9yTWVzc2FnZSwgeyBkZXRhaWxzOiB7CgkJCQkJCQljb2RlOiBDb25uZWN0RXJyb3JEZXRhaWxD
b2Rlcy5DT05UUk9MX1VJX09SSUdJTl9OT1RfQUxMT1dFRCwKCQkJCQkJCXJlYXNvbjogb3JpZ2lu
Q2hlY2sucmVhc29uCgkJCQkJCX0gfSk7CgkJCQkJCWNsb3NlKDEwMDgsIHRydW5jYXRlQ2xvc2VS
ZWFzb24oZXJyb3JNZXNzYWdlKSk7CgkJCQkJCXJldHVybjsKCQkJCQl9CgkJCQkJaWYgKG9yaWdp
bkNoZWNrLm1hdGNoZWRCeSA9PT0gImhvc3QtaGVhZGVyLWZhbGxiYWNrIikgewoJCQkJCQlvcmln
aW5DaGVja01ldHJpY3MuaG9zdEhlYWRlckZhbGxiYWNrQWNjZXB0ZWQgKz0gMTsKCQkJCQkJbG9n
V3NDb250cm9sLndhcm4oYHNlY3VyaXR5IHdhcm5pbmc6IHdlYnNvY2tldCBvcmlnaW4gYWNjZXB0
ZWQgdmlhIEhvc3QtaGVhZGVyIGZhbGxiYWNrIGNvbm49JHtjb25uSWR9IGNvdW50PSR7b3JpZ2lu
Q2hlY2tNZXRyaWNzLmhvc3RIZWFkZXJGYWxsYmFja0FjY2VwdGVkfSBob3N0PSR7cmVxdWVzdEhv
c3QgPz8gIm4vYSJ9IG9yaWdpbj0ke3JlcXVlc3RPcmlnaW4gPz8gIm4vYSJ9YCk7CgkJCQkJCWlm
IChob3N0SGVhZGVyT3JpZ2luRmFsbGJhY2tFbmFibGVkKSBsb2dHYXRld2F5Lndhcm4oInNlY3Vy
aXR5IG1ldHJpYzogZ2F0ZXdheS5jb250cm9sVWkuZGFuZ2Vyb3VzbHlBbGxvd0hvc3RIZWFkZXJP
cmlnaW5GYWxsYmFjayBhY2NlcHRlZCBhIHdlYnNvY2tldCBjb25uZWN0IHJlcXVlc3QiKTsKCQkJ
CQl9CgkJCQl9CgkJCQljb25zdCBkZXZpY2VSYXcgPSBjb25uZWN0UGFyYW1zLmRldmljZTsKCQkJ
CWxldCBkZXZpY2VQdWJsaWNLZXkgPSBudWxsOwoJCQkJbGV0IGRldmljZUF1dGhQYXlsb2FkVmVy
c2lvbiA9IG51bGw7CgkJCQljb25zdCBoYXNUb2tlbkF1dGggPSBCb29sZWFuKGNvbm5lY3RQYXJh
bXMuYXV0aD8udG9rZW4pOwoJCQkJY29uc3QgaGFzUGFzc3dvcmRBdXRoID0gQm9vbGVhbihjb25u
ZWN0UGFyYW1zLmF1dGg/LnBhc3N3b3JkKTsKCQkJCWNvbnN0IGhhc1NoYXJlZEF1dGggPSBoYXNU
b2tlbkF1dGggfHwgaGFzUGFzc3dvcmRBdXRoOwoJCQkJY29uc3QgY29udHJvbFVpQXV0aFBvbGlj
eSA9IHJlc29sdmVDb250cm9sVWlBdXRoUG9saWN5KHsKCQkJCQlpc0NvbnRyb2xVaSwKCQkJCQlj
b250cm9sVWlDb25maWc6IGNvbmZpZ1NuYXBzaG90LmdhdGV3YXk/LmNvbnRyb2xVaSwKCQkJCQlk
ZXZpY2VSYXcKCQkJCX0pOwoJCQkJY29uc3QgZGV2aWNlID0gY29udHJvbFVpQXV0aFBvbGljeS5k
ZXZpY2U7CgkJCQlsZXQgeyBhdXRoUmVzdWx0LCBhdXRoT2ssIGF1dGhNZXRob2QsIHNoYXJlZEF1
dGhPaywgYm9vdHN0cmFwVG9rZW5DYW5kaWRhdGUsIGRldmljZVRva2VuQ2FuZGlkYXRlLCBkZXZp
Y2VUb2tlbkNhbmRpZGF0ZVNvdXJjZSB9ID0gYXdhaXQgcmVzb2x2ZUNvbm5lY3RBdXRoU3RhdGUo
ewoJCQkJCXJlc29sdmVkQXV0aCwKCQkJCQljb25uZWN0QXV0aDogY29ubmVjdFBhcmFtcy5hdXRo
LAoJCQkJCWhhc0RldmljZUlkZW50aXR5OiBCb29sZWFuKGRldmljZSksCgkJCQkJcmVxOiB1cGdy
YWRlUmVxLAoJCQkJCXRydXN0ZWRQcm94aWVzLAoJCQkJCWFsbG93UmVhbElwRmFsbGJhY2ssCgkJ
CQkJcmF0ZUxpbWl0ZXI6IGF1dGhSYXRlTGltaXRlciwKCQkJCQljbGllbnRJcDogYnJvd3NlclJh
dGVMaW1pdENsaWVudElwCgkJCQl9KTsKCQkJCWNvbnN0IHJlamVjdFVuYXV0aG9yaXplZCA9IChm
YWlsZWRBdXRoKSA9PiB7CgkJCQkJY29uc3QgeyBhdXRoUHJvdmlkZWQsIGNhblJldHJ5V2l0aERl
dmljZVRva2VuLCByZWNvbW1lbmRlZE5leHRTdGVwIH0gPSByZXNvbHZlVW5hdXRob3JpemVkSGFu
ZHNoYWtlQ29udGV4dCh7CgkJCQkJCWNvbm5lY3RBdXRoOiBjb25uZWN0UGFyYW1zLmF1dGgsCgkJ
CQkJCWZhaWxlZEF1dGgsCgkJCQkJCWhhc0RldmljZUlkZW50aXR5OiBCb29sZWFuKGRldmljZSkK
CQkJCQl9KTsKCQkJCQltYXJrSGFuZHNoYWtlRmFpbHVyZSgidW5hdXRob3JpemVkIiwgewoJCQkJ
CQlhdXRoTW9kZTogcmVzb2x2ZWRBdXRoLm1vZGUsCgkJCQkJCWF1dGhQcm92aWRlZCwKCQkJCQkJ
YXV0aFJlYXNvbjogZmFpbGVkQXV0aC5yZWFzb24sCgkJCQkJCWFsbG93VGFpbHNjYWxlOiByZXNv
bHZlZEF1dGguYWxsb3dUYWlsc2NhbGUKCQkJCQl9KTsKCQkJCQlsb2dXc0NvbnRyb2wud2Fybihg
dW5hdXRob3JpemVkIGNvbm49JHtjb25uSWR9IHJlbW90ZT0ke3JlbW90ZUFkZHIgPz8gIj8ifSBj
bGllbnQ9JHtjbGllbnRMYWJlbH0gJHtjb25uZWN0UGFyYW1zLmNsaWVudC5tb2RlfSB2JHtjb25u
ZWN0UGFyYW1zLmNsaWVudC52ZXJzaW9ufSByZWFzb249JHtmYWlsZWRBdXRoLnJlYXNvbiA/PyAi
dW5rbm93biJ9YCk7CgkJCQkJY29uc3QgYXV0aE1lc3NhZ2UgPSBmb3JtYXRHYXRld2F5QXV0aEZh
aWx1cmVNZXNzYWdlKHsKCQkJCQkJYXV0aE1vZGU6IHJlc29sdmVkQXV0aC5tb2RlLAoJCQkJCQlh
dXRoUHJvdmlkZWQsCgkJCQkJCXJlYXNvbjogZmFpbGVkQXV0aC5yZWFzb24sCgkJCQkJCWNsaWVu
dDogY29ubmVjdFBhcmFtcy5jbGllbnQKCQkJCQl9KTsKCQkJCQlzZW5kSGFuZHNoYWtlRXJyb3JS
ZXNwb25zZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgYXV0aE1lc3NhZ2UsIHsgZGV0YWls
czogewoJCQkJCQljb2RlOiByZXNvbHZlQXV0aENvbm5lY3RFcnJvckRldGFpbENvZGUoZmFpbGVk
QXV0aC5yZWFzb24pLAoJCQkJCQlhdXRoUmVhc29uOiBmYWlsZWRBdXRoLnJlYXNvbiwKCQkJCQkJ
Y2FuUmV0cnlXaXRoRGV2aWNlVG9rZW4sCgkJCQkJCXJlY29tbWVuZGVkTmV4dFN0ZXAKCQkJCQl9
IH0pOwoJCQkJCWNsb3NlKDEwMDgsIHRydW5jYXRlQ2xvc2VSZWFzb24oYXV0aE1lc3NhZ2UpKTsK
CQkJCX07CgkJCQljb25zdCBjbGVhclVuYm91bmRTY29wZXMgPSAoKSA9PiB7CgkJCQkJaWYgKHNj
b3Blcy5sZW5ndGggPiAwKSB7CgkJCQkJCXNjb3BlcyA9IFtdOwoJCQkJCQljb25uZWN0UGFyYW1z
LnNjb3BlcyA9IHNjb3BlczsKCQkJCQl9CgkJCQl9OwoJCQkJY29uc3QgaGFuZGxlTWlzc2luZ0Rl
dmljZUlkZW50aXR5ID0gKCkgPT4gewoJCQkJCWNvbnN0IHRydXN0ZWRQcm94eUF1dGhPayA9IGlz
VHJ1c3RlZFByb3h5Q29udHJvbFVpT3BlcmF0b3JBdXRoKHsKCQkJCQkJaXNDb250cm9sVWksCgkJ
CQkJCXJvbGUsCgkJCQkJCWF1dGhNb2RlOiByZXNvbHZlZEF1dGgubW9kZSwKCQkJCQkJYXV0aE9r
LAoJCQkJCQlhdXRoTWV0aG9kCgkJCQkJfSk7CgkJCQkJY29uc3QgZGVjaXNpb24gPSBldmFsdWF0
ZU1pc3NpbmdEZXZpY2VJZGVudGl0eSh7CgkJCQkJCWhhc0RldmljZUlkZW50aXR5OiBCb29sZWFu
KGRldmljZSksCgkJCQkJCXJvbGUsCgkJCQkJCWlzQ29udHJvbFVpLAoJCQkJCQljb250cm9sVWlB
dXRoUG9saWN5LAoJCQkJCQl0cnVzdGVkUHJveHlBdXRoT2ssCgkJCQkJCXNoYXJlZEF1dGhPaywK
CQkJCQkJYXV0aE9rLAoJCQkJCQloYXNTaGFyZWRBdXRoLAoJCQkJCQlpc0xvY2FsQ2xpZW50CgkJ
CQkJfSk7CgkJCQkJaWYgKCFkZXZpY2UgJiYgKCFpc0NvbnRyb2xVaSB8fCBkZWNpc2lvbi5raW5k
ICE9PSAiYWxsb3ciKSkgY2xlYXJVbmJvdW5kU2NvcGVzKCk7CgkJCQkJaWYgKGRlY2lzaW9uLmtp
bmQgPT09ICJhbGxvdyIpIHJldHVybiB0cnVlOwoJCQkJCWlmIChkZWNpc2lvbi5raW5kID09PSAi
cmVqZWN0LWNvbnRyb2wtdWktaW5zZWN1cmUtYXV0aCIpIHsKCQkJCQkJY29uc3QgZXJyb3JNZXNz
YWdlID0gImNvbnRyb2wgdWkgcmVxdWlyZXMgZGV2aWNlIGlkZW50aXR5ICh1c2UgSFRUUFMgb3Ig
bG9jYWxob3N0IHNlY3VyZSBjb250ZXh0KSI7CgkJCQkJCW1hcmtIYW5kc2hha2VGYWlsdXJlKCJj
b250cm9sLXVpLWluc2VjdXJlLWF1dGgiLCB7IGluc2VjdXJlQXV0aENvbmZpZ3VyZWQ6IGNvbnRy
b2xVaUF1dGhQb2xpY3kuYWxsb3dJbnNlY3VyZUF1dGhDb25maWd1cmVkIH0pOwoJCQkJCQlzZW5k
SGFuZHNoYWtlRXJyb3JSZXNwb25zZShFcnJvckNvZGVzLklOVkFMSURfUkVRVUVTVCwgZXJyb3JN
ZXNzYWdlLCB7IGRldGFpbHM6IHsgY29kZTogQ29ubmVjdEVycm9yRGV0YWlsQ29kZXMuQ09OVFJP
TF9VSV9ERVZJQ0VfSURFTlRJVFlfUkVRVUlSRUQgfSB9KTsKCQkJCQkJY2xvc2UoMTAwOCwgZXJy
b3JNZXNzYWdlKTsKCQkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJCX0KCQkJCQlpZiAoZGVjaXNpb24u
a2luZCA9PT0gInJlamVjdC11bmF1dGhvcml6ZWQiKSB7CgkJCQkJCXJlamVjdFVuYXV0aG9yaXpl
ZChhdXRoUmVzdWx0KTsKCQkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJCX0KCQkJCQltYXJrSGFuZHNo
YWtlRmFpbHVyZSgiZGV2aWNlLXJlcXVpcmVkIik7CgkJCQkJc2VuZEhhbmRzaGFrZUVycm9yUmVz
cG9uc2UoRXJyb3JDb2Rlcy5OT1RfUEFJUkVELCAiZGV2aWNlIGlkZW50aXR5IHJlcXVpcmVkIiwg
eyBkZXRhaWxzOiB7IGNvZGU6IENvbm5lY3RFcnJvckRldGFpbENvZGVzLkRFVklDRV9JREVOVElU
WV9SRVFVSVJFRCB9IH0pOwoJCQkJCWNsb3NlKDEwMDgsICJkZXZpY2UgaWRlbnRpdHkgcmVxdWly
ZWQiKTsKCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQl9OwoJCQkJaWYgKCFoYW5kbGVNaXNzaW5nRGV2
aWNlSWRlbnRpdHkoKSkgcmV0dXJuOwoJCQkJaWYgKGRldmljZSkgewoJCQkJCWNvbnN0IHJlamVj
dERldmljZUF1dGhJbnZhbGlkID0gKHJlYXNvbiwgbWVzc2FnZSkgPT4gewoJCQkJCQlzZXRIYW5k
c2hha2VTdGF0ZSgiZmFpbGVkIik7CgkJCQkJCXNldENsb3NlQ2F1c2UoImRldmljZS1hdXRoLWlu
dmFsaWQiLCB7CgkJCQkJCQlyZWFzb24sCgkJCQkJCQljbGllbnQ6IGNvbm5lY3RQYXJhbXMuY2xp
ZW50LmlkLAoJCQkJCQkJZGV2aWNlSWQ6IGRldmljZS5pZAoJCQkJCQl9KTsKCQkJCQkJc2VuZCh7
CgkJCQkJCQl0eXBlOiAicmVzIiwKCQkJCQkJCWlkOiBmcmFtZS5pZCwKCQkJCQkJCW9rOiBmYWxz
ZSwKCQkJCQkJCWVycm9yOiBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCBt
ZXNzYWdlLCB7IGRldGFpbHM6IHsKCQkJCQkJCQljb2RlOiByZXNvbHZlRGV2aWNlQXV0aENvbm5l
Y3RFcnJvckRldGFpbENvZGUocmVhc29uKSwKCQkJCQkJCQlyZWFzb24KCQkJCQkJCX0gfSkKCQkJ
CQkJfSk7CgkJCQkJCWNsb3NlKDEwMDgsIG1lc3NhZ2UpOwoJCQkJCX07CgkJCQkJY29uc3QgZGVy
aXZlZElkID0gZGVyaXZlRGV2aWNlSWRGcm9tUHVibGljS2V5KGRldmljZS5wdWJsaWNLZXkpOwoJ
CQkJCWlmICghZGVyaXZlZElkIHx8IGRlcml2ZWRJZCAhPT0gZGV2aWNlLmlkKSB7CgkJCQkJCXJl
amVjdERldmljZUF1dGhJbnZhbGlkKCJkZXZpY2UtaWQtbWlzbWF0Y2giLCAiZGV2aWNlIGlkZW50
aXR5IG1pc21hdGNoIik7CgkJCQkJCXJldHVybjsKCQkJCQl9CgkJCQkJY29uc3Qgc2lnbmVkQXQg
PSBkZXZpY2Uuc2lnbmVkQXQ7CgkJCQkJaWYgKHR5cGVvZiBzaWduZWRBdCAhPT0gIm51bWJlciIg
fHwgTWF0aC5hYnMoRGF0ZS5ub3coKSAtIHNpZ25lZEF0KSA+IERFVklDRV9TSUdOQVRVUkVfU0tF
V19NUykgewoJCQkJCQlyZWplY3REZXZpY2VBdXRoSW52YWxpZCgiZGV2aWNlLXNpZ25hdHVyZS1z
dGFsZSIsICJkZXZpY2Ugc2lnbmF0dXJlIGV4cGlyZWQiKTsKCQkJCQkJcmV0dXJuOwoJCQkJCX0K
CQkJCQljb25zdCBwcm92aWRlZE5vbmNlID0gdHlwZW9mIGRldmljZS5ub25jZSA9PT0gInN0cmlu
ZyIgPyBkZXZpY2Uubm9uY2UudHJpbSgpIDogIiI7CgkJCQkJaWYgKCFwcm92aWRlZE5vbmNlKSB7
CgkJCQkJCXJlamVjdERldmljZUF1dGhJbnZhbGlkKCJkZXZpY2Utbm9uY2UtbWlzc2luZyIsICJk
ZXZpY2Ugbm9uY2UgcmVxdWlyZWQiKTsKCQkJCQkJcmV0dXJuOwoJCQkJCX0KCQkJCQlpZiAocHJv
dmlkZWROb25jZSAhPT0gY29ubmVjdE5vbmNlKSB7CgkJCQkJCXJlamVjdERldmljZUF1dGhJbnZh
bGlkKCJkZXZpY2Utbm9uY2UtbWlzbWF0Y2giLCAiZGV2aWNlIG5vbmNlIG1pc21hdGNoIik7CgkJ
CQkJCXJldHVybjsKCQkJCQl9CgkJCQkJY29uc3QgcmVqZWN0RGV2aWNlU2lnbmF0dXJlSW52YWxp
ZCA9ICgpID0+IHJlamVjdERldmljZUF1dGhJbnZhbGlkKCJkZXZpY2Utc2lnbmF0dXJlIiwgImRl
dmljZSBzaWduYXR1cmUgaW52YWxpZCIpOwoJCQkJCWNvbnN0IHBheWxvYWRWZXJzaW9uID0gcmVz
b2x2ZURldmljZVNpZ25hdHVyZVBheWxvYWRWZXJzaW9uKHsKCQkJCQkJZGV2aWNlLAoJCQkJCQlj
b25uZWN0UGFyYW1zLAoJCQkJCQlyb2xlLAoJCQkJCQlzY29wZXMsCgkJCQkJCXNpZ25lZEF0TXM6
IHNpZ25lZEF0LAoJCQkJCQlub25jZTogcHJvdmlkZWROb25jZQoJCQkJCX0pOwoJCQkJCWlmICgh
cGF5bG9hZFZlcnNpb24pIHsKCQkJCQkJcmVqZWN0RGV2aWNlU2lnbmF0dXJlSW52YWxpZCgpOwoJ
CQkJCQlyZXR1cm47CgkJCQkJfQoJCQkJCWRldmljZUF1dGhQYXlsb2FkVmVyc2lvbiA9IHBheWxv
YWRWZXJzaW9uOwoJCQkJCWRldmljZVB1YmxpY0tleSA9IG5vcm1hbGl6ZURldmljZVB1YmxpY0tl
eUJhc2U2NFVybChkZXZpY2UucHVibGljS2V5KTsKCQkJCQlpZiAoIWRldmljZVB1YmxpY0tleSkg
ewoJCQkJCQlyZWplY3REZXZpY2VBdXRoSW52YWxpZCgiZGV2aWNlLXB1YmxpYy1rZXkiLCAiZGV2
aWNlIHB1YmxpYyBrZXkgaW52YWxpZCIpOwoJCQkJCQlyZXR1cm47CgkJCQkJfQoJCQkJfQoJCQkJ
KHthdXRoUmVzdWx0LCBhdXRoT2ssIGF1dGhNZXRob2R9ID0gYXdhaXQgcmVzb2x2ZUNvbm5lY3RB
dXRoRGVjaXNpb24oewoJCQkJCXN0YXRlOiB7CgkJCQkJCWF1dGhSZXN1bHQsCgkJCQkJCWF1dGhP
aywKCQkJCQkJYXV0aE1ldGhvZCwKCQkJCQkJc2hhcmVkQXV0aE9rLAoJCQkJCQlzaGFyZWRBdXRo
UHJvdmlkZWQ6IGhhc1NoYXJlZEF1dGgsCgkJCQkJCWJvb3RzdHJhcFRva2VuQ2FuZGlkYXRlLAoJ
CQkJCQlkZXZpY2VUb2tlbkNhbmRpZGF0ZSwKCQkJCQkJZGV2aWNlVG9rZW5DYW5kaWRhdGVTb3Vy
Y2UKCQkJCQl9LAoJCQkJCWhhc0RldmljZUlkZW50aXR5OiBCb29sZWFuKGRldmljZSksCgkJCQkJ
ZGV2aWNlSWQ6IGRldmljZT8uaWQsCgkJCQkJcHVibGljS2V5OiBkZXZpY2U/LnB1YmxpY0tleSwK
CQkJCQlyb2xlLAoJCQkJCXNjb3BlcywKCQkJCQlyYXRlTGltaXRlcjogYXV0aFJhdGVMaW1pdGVy
LAoJCQkJCWNsaWVudElwOiBicm93c2VyUmF0ZUxpbWl0Q2xpZW50SXAsCgkJCQkJdmVyaWZ5Qm9v
dHN0cmFwVG9rZW46IGFzeW5jICh7IGRldmljZUlkLCBwdWJsaWNLZXksIHRva2VuLCByb2xlLCBz
Y29wZXMgfSkgPT4gYXdhaXQgdmVyaWZ5RGV2aWNlQm9vdHN0cmFwVG9rZW4oewoJCQkJCQlkZXZp
Y2VJZCwKCQkJCQkJcHVibGljS2V5LAoJCQkJCQl0b2tlbiwKCQkJCQkJcm9sZSwKCQkJCQkJc2Nv
cGVzCgkJCQkJfSksCgkJCQkJdmVyaWZ5RGV2aWNlVG9rZW4KCQkJCX0pKTsKCQkJCWlmICghYXV0
aE9rKSB7CgkJCQkJcmVqZWN0VW5hdXRob3JpemVkKGF1dGhSZXN1bHQpOwoJCQkJCXJldHVybjsK
CQkJCX0KCQkJCWNvbnN0IHRydXN0ZWRQcm94eUF1dGhPayA9IGlzVHJ1c3RlZFByb3h5Q29udHJv
bFVpT3BlcmF0b3JBdXRoKHsKCQkJCQlpc0NvbnRyb2xVaSwKCQkJCQlyb2xlLAoJCQkJCWF1dGhN
b2RlOiByZXNvbHZlZEF1dGgubW9kZSwKCQkJCQlhdXRoT2ssCgkJCQkJYXV0aE1ldGhvZAoJCQkJ
fSk7CgkJCQljb25zdCBza2lwUGFpcmluZyA9IHNob3VsZFNraXBCYWNrZW5kU2VsZlBhaXJpbmco
ewoJCQkJCWNvbm5lY3RQYXJhbXMsCgkJCQkJaXNMb2NhbENsaWVudCwKCQkJCQloYXNCcm93c2Vy
T3JpZ2luSGVhZGVyLAoJCQkJCXNoYXJlZEF1dGhPaywKCQkJCQlhdXRoTWV0aG9kCgkJCQl9KSB8
fCBzaG91bGRTa2lwQ29udHJvbFVpUGFpcmluZyhjb250cm9sVWlBdXRoUG9saWN5LCByb2xlLCB0
cnVzdGVkUHJveHlBdXRoT2spOwoJCQkJaWYgKGRldmljZSAmJiBkZXZpY2VQdWJsaWNLZXkgJiYg
IXNraXBQYWlyaW5nKSB7CgkJCQkJY29uc3QgZm9ybWF0QXVkaXRMaXN0ID0gKGl0ZW1zKSA9PiB7
CgkJCQkJCWlmICghaXRlbXMgfHwgaXRlbXMubGVuZ3RoID09PSAwKSByZXR1cm4gIjxub25lPiI7
CgkJCQkJCWNvbnN0IG91dCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7CgkJCQkJCWZvciAo
Y29uc3QgaXRlbSBvZiBpdGVtcykgewoJCQkJCQkJY29uc3QgdHJpbW1lZCA9IGl0ZW0udHJpbSgp
OwoJCQkJCQkJaWYgKHRyaW1tZWQpIG91dC5hZGQodHJpbW1lZCk7CgkJCQkJCX0KCQkJCQkJaWYg
KG91dC5zaXplID09PSAwKSByZXR1cm4gIjxub25lPiI7CgkJCQkJCXJldHVybiBbLi4ub3V0XS50
b1NvcnRlZCgpLmpvaW4oIiwiKTsKCQkJCQl9OwoJCQkJCWNvbnN0IGxvZ1VwZ3JhZGVBdWRpdCA9
IChyZWFzb24sIGN1cnJlbnRSb2xlcywgY3VycmVudFNjb3BlcykgPT4gewoJCQkJCQlsb2dHYXRl
d2F5Lndhcm4oYHNlY3VyaXR5IGF1ZGl0OiBkZXZpY2UgYWNjZXNzIHVwZ3JhZGUgcmVxdWVzdGVk
IHJlYXNvbj0ke3JlYXNvbn0gZGV2aWNlPSR7ZGV2aWNlLmlkfSBpcD0ke3JlcG9ydGVkQ2xpZW50
SXAgPz8gInVua25vd24taXAifSBhdXRoPSR7YXV0aE1ldGhvZH0gcm9sZUZyb209JHtmb3JtYXRB
dWRpdExpc3QoY3VycmVudFJvbGVzKX0gcm9sZVRvPSR7cm9sZX0gc2NvcGVzRnJvbT0ke2Zvcm1h
dEF1ZGl0TGlzdChjdXJyZW50U2NvcGVzKX0gc2NvcGVzVG89JHtmb3JtYXRBdWRpdExpc3Qoc2Nv
cGVzKX0gY2xpZW50PSR7Y29ubmVjdFBhcmFtcy5jbGllbnQuaWR9IGNvbm49JHtjb25uSWR9YCk7
CgkJCQkJfTsKCQkJCQljb25zdCBjbGllbnRQYWlyaW5nTWV0YWRhdGEgPSB7CgkJCQkJCWRpc3Bs
YXlOYW1lOiBjb25uZWN0UGFyYW1zLmNsaWVudC5kaXNwbGF5TmFtZSwKCQkJCQkJcGxhdGZvcm06
IGNvbm5lY3RQYXJhbXMuY2xpZW50LnBsYXRmb3JtLAoJCQkJCQlkZXZpY2VGYW1pbHk6IGNvbm5l
Y3RQYXJhbXMuY2xpZW50LmRldmljZUZhbWlseSwKCQkJCQkJY2xpZW50SWQ6IGNvbm5lY3RQYXJh
bXMuY2xpZW50LmlkLAoJCQkJCQljbGllbnRNb2RlOiBjb25uZWN0UGFyYW1zLmNsaWVudC5tb2Rl
LAoJCQkJCQlyb2xlLAoJCQkJCQlzY29wZXMsCgkJCQkJCXJlbW90ZUlwOiByZXBvcnRlZENsaWVu
dElwCgkJCQkJfTsKCQkJCQljb25zdCBjbGllbnRBY2Nlc3NNZXRhZGF0YSA9IHsKCQkJCQkJZGlz
cGxheU5hbWU6IGNvbm5lY3RQYXJhbXMuY2xpZW50LmRpc3BsYXlOYW1lLAoJCQkJCQljbGllbnRJ
ZDogY29ubmVjdFBhcmFtcy5jbGllbnQuaWQsCgkJCQkJCWNsaWVudE1vZGU6IGNvbm5lY3RQYXJh
bXMuY2xpZW50Lm1vZGUsCgkJCQkJCXJvbGUsCgkJCQkJCXNjb3BlcywKCQkJCQkJcmVtb3RlSXA6
IHJlcG9ydGVkQ2xpZW50SXAKCQkJCQl9OwoJCQkJCWNvbnN0IHJlcXVpcmVQYWlyaW5nID0gYXN5
bmMgKHJlYXNvbikgPT4gewoJCQkJCQljb25zdCBhbGxvd1NpbGVudExvY2FsUGFpcmluZyA9IHNo
b3VsZEFsbG93U2lsZW50TG9jYWxQYWlyaW5nKHsKCQkJCQkJCWlzTG9jYWxDbGllbnQsCgkJCQkJ
CQloYXNCcm93c2VyT3JpZ2luSGVhZGVyLAoJCQkJCQkJaXNDb250cm9sVWksCgkJCQkJCQlpc1dl
YmNoYXQsCgkJCQkJCQlyZWFzb24KCQkJCQkJfSk7CgkJCQkJCWNvbnN0IHBhaXJpbmcgPSBhd2Fp
dCByZXF1ZXN0RGV2aWNlUGFpcmluZyh7CgkJCQkJCQlkZXZpY2VJZDogZGV2aWNlLmlkLAoJCQkJ
CQkJcHVibGljS2V5OiBkZXZpY2VQdWJsaWNLZXksCgkJCQkJCQkuLi5jbGllbnRQYWlyaW5nTWV0
YWRhdGEsCgkJCQkJCQlzaWxlbnQ6IGFsbG93U2lsZW50TG9jYWxQYWlyaW5nCgkJCQkJCX0pOwoJ
CQkJCQljb25zdCBjb250ZXh0ID0gYnVpbGRSZXF1ZXN0Q29udGV4dCgpOwoJCQkJCQlpZiAocGFp
cmluZy5yZXF1ZXN0LnNpbGVudCA9PT0gdHJ1ZSkgewoJCQkJCQkJY29uc3QgYXBwcm92ZWQgPSBh
d2FpdCBhcHByb3ZlRGV2aWNlUGFpcmluZyhwYWlyaW5nLnJlcXVlc3QucmVxdWVzdElkKTsKCQkJ
CQkJCWlmIChhcHByb3ZlZCkgewoJCQkJCQkJCWxvZ0dhdGV3YXkuaW5mbyhgZGV2aWNlIHBhaXJp
bmcgYXV0by1hcHByb3ZlZCBkZXZpY2U9JHthcHByb3ZlZC5kZXZpY2UuZGV2aWNlSWR9IHJvbGU9
JHthcHByb3ZlZC5kZXZpY2Uucm9sZSA/PyAidW5rbm93biJ9YCk7CgkJCQkJCQkJY29udGV4dC5i
cm9hZGNhc3QoImRldmljZS5wYWlyLnJlc29sdmVkIiwgewoJCQkJCQkJCQlyZXF1ZXN0SWQ6IHBh
aXJpbmcucmVxdWVzdC5yZXF1ZXN0SWQsCgkJCQkJCQkJCWRldmljZUlkOiBhcHByb3ZlZC5kZXZp
Y2UuZGV2aWNlSWQsCgkJCQkJCQkJCWRlY2lzaW9uOiAiYXBwcm92ZWQiLAoJCQkJCQkJCQl0czog
RGF0ZS5ub3coKQoJCQkJCQkJCX0sIHsgZHJvcElmU2xvdzogdHJ1ZSB9KTsKCQkJCQkJCX0KCQkJ
CQkJfSBlbHNlIGlmIChwYWlyaW5nLmNyZWF0ZWQpIGNvbnRleHQuYnJvYWRjYXN0KCJkZXZpY2Uu
cGFpci5yZXF1ZXN0ZWQiLCBwYWlyaW5nLnJlcXVlc3QsIHsgZHJvcElmU2xvdzogdHJ1ZSB9KTsK
CQkJCQkJaWYgKHBhaXJpbmcucmVxdWVzdC5zaWxlbnQgIT09IHRydWUpIHsKCQkJCQkJCXNldEhh
bmRzaGFrZVN0YXRlKCJmYWlsZWQiKTsKCQkJCQkJCXNldENsb3NlQ2F1c2UoInBhaXJpbmctcmVx
dWlyZWQiLCB7CgkJCQkJCQkJZGV2aWNlSWQ6IGRldmljZS5pZCwKCQkJCQkJCQlyZXF1ZXN0SWQ6
IHBhaXJpbmcucmVxdWVzdC5yZXF1ZXN0SWQsCgkJCQkJCQkJcmVhc29uCgkJCQkJCQl9KTsKCQkJ
CQkJCXNlbmQoewoJCQkJCQkJCXR5cGU6ICJyZXMiLAoJCQkJCQkJCWlkOiBmcmFtZS5pZCwKCQkJ
CQkJCQlvazogZmFsc2UsCgkJCQkJCQkJZXJyb3I6IGVycm9yU2hhcGUoRXJyb3JDb2Rlcy5OT1Rf
UEFJUkVELCAicGFpcmluZyByZXF1aXJlZCIsIHsgZGV0YWlsczogewoJCQkJCQkJCQljb2RlOiBD
b25uZWN0RXJyb3JEZXRhaWxDb2Rlcy5QQUlSSU5HX1JFUVVJUkVELAoJCQkJCQkJCQlyZXF1ZXN0
SWQ6IHBhaXJpbmcucmVxdWVzdC5yZXF1ZXN0SWQsCgkJCQkJCQkJCXJlYXNvbgoJCQkJCQkJCX0g
fSkKCQkJCQkJCX0pOwoJCQkJCQkJY2xvc2UoMTAwOCwgInBhaXJpbmcgcmVxdWlyZWQiKTsKCQkJ
CQkJCXJldHVybiBmYWxzZTsKCQkJCQkJfQoJCQkJCQlyZXR1cm4gdHJ1ZTsKCQkJCQl9OwoJCQkJ
CWNvbnN0IHBhaXJlZCA9IGF3YWl0IGdldFBhaXJlZERldmljZShkZXZpY2UuaWQpOwoJCQkJCWlm
ICghKHBhaXJlZD8ucHVibGljS2V5ID09PSBkZXZpY2VQdWJsaWNLZXkpKSB7CgkJCQkJCWlmICgh
YXdhaXQgcmVxdWlyZVBhaXJpbmcoIm5vdC1wYWlyZWQiKSkgcmV0dXJuOwoJCQkJCX0gZWxzZSB7
CgkJCQkJCWNvbnN0IGNsYWltZWRQbGF0Zm9ybSA9IGNvbm5lY3RQYXJhbXMuY2xpZW50LnBsYXRm
b3JtOwoJCQkJCQljb25zdCBwYWlyZWRQbGF0Zm9ybSA9IHBhaXJlZC5wbGF0Zm9ybTsKCQkJCQkJ
Y29uc3QgY2xhaW1lZERldmljZUZhbWlseSA9IGNvbm5lY3RQYXJhbXMuY2xpZW50LmRldmljZUZh
bWlseTsKCQkJCQkJY29uc3QgcGFpcmVkRGV2aWNlRmFtaWx5ID0gcGFpcmVkLmRldmljZUZhbWls
eTsKCQkJCQkJY29uc3QgbWV0YWRhdGFQaW5uaW5nID0gcmVzb2x2ZVBpbm5lZENsaWVudE1ldGFk
YXRhKHsKCQkJCQkJCWNsYWltZWRQbGF0Zm9ybSwKCQkJCQkJCWNsYWltZWREZXZpY2VGYW1pbHks
CgkJCQkJCQlwYWlyZWRQbGF0Zm9ybSwKCQkJCQkJCXBhaXJlZERldmljZUZhbWlseQoJCQkJCQl9
KTsKCQkJCQkJY29uc3QgeyBwbGF0Zm9ybU1pc21hdGNoLCBkZXZpY2VGYW1pbHlNaXNtYXRjaCB9
ID0gbWV0YWRhdGFQaW5uaW5nOwoJCQkJCQlpZiAocGxhdGZvcm1NaXNtYXRjaCB8fCBkZXZpY2VG
YW1pbHlNaXNtYXRjaCkgewoJCQkJCQkJbG9nR2F0ZXdheS53YXJuKGBzZWN1cml0eSBhdWRpdDog
ZGV2aWNlIG1ldGFkYXRhIHVwZ3JhZGUgcmVxdWVzdGVkIHJlYXNvbj1tZXRhZGF0YS11cGdyYWRl
IGRldmljZT0ke2RldmljZS5pZH0gaXA9JHtyZXBvcnRlZENsaWVudElwID8/ICJ1bmtub3duLWlw
In0gYXV0aD0ke2F1dGhNZXRob2R9IHBheWxvYWQ9JHtkZXZpY2VBdXRoUGF5bG9hZFZlcnNpb24g
Pz8gInVua25vd24ifSBjbGFpbWVkUGxhdGZvcm09JHtjbGFpbWVkUGxhdGZvcm0gPz8gIjxub25l
PiJ9IHBpbm5lZFBsYXRmb3JtPSR7cGFpcmVkUGxhdGZvcm0gPz8gIjxub25lPiJ9IGNsYWltZWRE
ZXZpY2VGYW1pbHk9JHtjbGFpbWVkRGV2aWNlRmFtaWx5ID8/ICI8bm9uZT4ifSBwaW5uZWREZXZp
Y2VGYW1pbHk9JHtwYWlyZWREZXZpY2VGYW1pbHkgPz8gIjxub25lPiJ9IGNsaWVudD0ke2Nvbm5l
Y3RQYXJhbXMuY2xpZW50LmlkfSBjb25uPSR7Y29ubklkfWApOwoJCQkJCQkJaWYgKCFhd2FpdCBy
ZXF1aXJlUGFpcmluZygibWV0YWRhdGEtdXBncmFkZSIpKSByZXR1cm47CgkJCQkJCX0gZWxzZSB7
CgkJCQkJCQlpZiAobWV0YWRhdGFQaW5uaW5nLnBpbm5lZFBsYXRmb3JtKSBjb25uZWN0UGFyYW1z
LmNsaWVudC5wbGF0Zm9ybSA9IG1ldGFkYXRhUGlubmluZy5waW5uZWRQbGF0Zm9ybTsKCQkJCQkJ
CWlmIChtZXRhZGF0YVBpbm5pbmcucGlubmVkRGV2aWNlRmFtaWx5KSBjb25uZWN0UGFyYW1zLmNs
aWVudC5kZXZpY2VGYW1pbHkgPSBtZXRhZGF0YVBpbm5pbmcucGlubmVkRGV2aWNlRmFtaWx5OwoJ
CQkJCQl9CgkJCQkJCWNvbnN0IHBhaXJlZFJvbGVzID0gQXJyYXkuaXNBcnJheShwYWlyZWQucm9s
ZXMpID8gcGFpcmVkLnJvbGVzIDogcGFpcmVkLnJvbGUgPyBbcGFpcmVkLnJvbGVdIDogW107CgkJ
CQkJCWNvbnN0IHBhaXJlZFNjb3BlcyA9IEFycmF5LmlzQXJyYXkocGFpcmVkLnNjb3BlcykgPyBw
YWlyZWQuc2NvcGVzIDogQXJyYXkuaXNBcnJheShwYWlyZWQuYXBwcm92ZWRTY29wZXMpID8gcGFp
cmVkLmFwcHJvdmVkU2NvcGVzIDogW107CgkJCQkJCWNvbnN0IGFsbG93ZWRSb2xlcyA9IG5ldyBT
ZXQocGFpcmVkUm9sZXMpOwoJCQkJCQlpZiAoYWxsb3dlZFJvbGVzLnNpemUgPT09IDApIHsKCQkJ
CQkJCWxvZ1VwZ3JhZGVBdWRpdCgicm9sZS11cGdyYWRlIiwgcGFpcmVkUm9sZXMsIHBhaXJlZFNj
b3Blcyk7CgkJCQkJCQlpZiAoIWF3YWl0IHJlcXVpcmVQYWlyaW5nKCJyb2xlLXVwZ3JhZGUiKSkg
cmV0dXJuOwoJCQkJCQl9IGVsc2UgaWYgKCFhbGxvd2VkUm9sZXMuaGFzKHJvbGUpKSB7CgkJCQkJ
CQlsb2dVcGdyYWRlQXVkaXQoInJvbGUtdXBncmFkZSIsIHBhaXJlZFJvbGVzLCBwYWlyZWRTY29w
ZXMpOwoJCQkJCQkJaWYgKCFhd2FpdCByZXF1aXJlUGFpcmluZygicm9sZS11cGdyYWRlIikpIHJl
dHVybjsKCQkJCQkJfQoJCQkJCQlpZiAoc2NvcGVzLmxlbmd0aCA+IDApIHsKCQkJCQkJCWlmIChw
YWlyZWRTY29wZXMubGVuZ3RoID09PSAwKSB7CgkJCQkJCQkJbG9nVXBncmFkZUF1ZGl0KCJzY29w
ZS11cGdyYWRlIiwgcGFpcmVkUm9sZXMsIHBhaXJlZFNjb3Blcyk7CgkJCQkJCQkJaWYgKCFhd2Fp
dCByZXF1aXJlUGFpcmluZygic2NvcGUtdXBncmFkZSIpKSByZXR1cm47CgkJCQkJCQl9IGVsc2Ug
aWYgKCFyb2xlU2NvcGVzQWxsb3coewoJCQkJCQkJCXJvbGUsCgkJCQkJCQkJcmVxdWVzdGVkU2Nv
cGVzOiBzY29wZXMsCgkJCQkJCQkJYWxsb3dlZFNjb3BlczogcGFpcmVkU2NvcGVzCgkJCQkJCQl9
KSkgewoJCQkJCQkJCWxvZ1VwZ3JhZGVBdWRpdCgic2NvcGUtdXBncmFkZSIsIHBhaXJlZFJvbGVz
LCBwYWlyZWRTY29wZXMpOwoJCQkJCQkJCWlmICghYXdhaXQgcmVxdWlyZVBhaXJpbmcoInNjb3Bl
LXVwZ3JhZGUiKSkgcmV0dXJuOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCWF3YWl0IHVwZGF0ZVBh
aXJlZERldmljZU1ldGFkYXRhKGRldmljZS5pZCwgY2xpZW50QWNjZXNzTWV0YWRhdGEpOwoJCQkJ
CX0KCQkJCX0KCQkJCWNvbnN0IGRldmljZVRva2VuID0gZGV2aWNlID8gYXdhaXQgZW5zdXJlRGV2
aWNlVG9rZW4oewoJCQkJCWRldmljZUlkOiBkZXZpY2UuaWQsCgkJCQkJcm9sZSwKCQkJCQlzY29w
ZXMKCQkJCX0pIDogbnVsbDsKCQkJCWlmIChyb2xlID09PSAibm9kZSIpIHsKCQkJCQljb25zdCBh
bGxvd2xpc3QgPSByZXNvbHZlTm9kZUNvbW1hbmRBbGxvd2xpc3QobG9hZENvbmZpZygpLCB7CgkJ
CQkJCXBsYXRmb3JtOiBjb25uZWN0UGFyYW1zLmNsaWVudC5wbGF0Zm9ybSwKCQkJCQkJZGV2aWNl
RmFtaWx5OiBjb25uZWN0UGFyYW1zLmNsaWVudC5kZXZpY2VGYW1pbHkKCQkJCQl9KTsKCQkJCQlj
b25uZWN0UGFyYW1zLmNvbW1hbmRzID0gKEFycmF5LmlzQXJyYXkoY29ubmVjdFBhcmFtcy5jb21t
YW5kcykgPyBjb25uZWN0UGFyYW1zLmNvbW1hbmRzIDogW10pLm1hcCgoY21kKSA9PiBjbWQudHJp
bSgpKS5maWx0ZXIoKGNtZCkgPT4gY21kLmxlbmd0aCA+IDAgJiYgYWxsb3dsaXN0LmhhcyhjbWQp
KTsKCQkJCX0KCQkJCWNvbnN0IHNob3VsZFRyYWNrUHJlc2VuY2UgPSAhaXNHYXRld2F5Q2xpQ2xp
ZW50KGNvbm5lY3RQYXJhbXMuY2xpZW50KTsKCQkJCWNvbnN0IGNsaWVudElkID0gY29ubmVjdFBh
cmFtcy5jbGllbnQuaWQ7CgkJCQljb25zdCBpbnN0YW5jZUlkID0gY29ubmVjdFBhcmFtcy5jbGll
bnQuaW5zdGFuY2VJZDsKCQkJCWNvbnN0IHByZXNlbmNlS2V5ID0gc2hvdWxkVHJhY2tQcmVzZW5j
ZSA/IGRldmljZT8uaWQgPz8gaW5zdGFuY2VJZCA/PyBjb25uSWQgOiB2b2lkIDA7CgkJCQlsb2dX
cygiaW4iLCAiY29ubmVjdCIsIHsKCQkJCQljb25uSWQsCgkJCQkJY2xpZW50OiBjb25uZWN0UGFy
YW1zLmNsaWVudC5pZCwKCQkJCQljbGllbnREaXNwbGF5TmFtZTogY29ubmVjdFBhcmFtcy5jbGll
bnQuZGlzcGxheU5hbWUsCgkJCQkJdmVyc2lvbjogY29ubmVjdFBhcmFtcy5jbGllbnQudmVyc2lv
biwKCQkJCQltb2RlOiBjb25uZWN0UGFyYW1zLmNsaWVudC5tb2RlLAoJCQkJCWNsaWVudElkLAoJ
CQkJCXBsYXRmb3JtOiBjb25uZWN0UGFyYW1zLmNsaWVudC5wbGF0Zm9ybSwKCQkJCQlhdXRoOiBh
dXRoTWV0aG9kCgkJCQl9KTsKCQkJCWlmIChpc1dlYmNoYXRDb25uZWN0KGNvbm5lY3RQYXJhbXMp
KSBsb2dXc0NvbnRyb2wuaW5mbyhgd2ViY2hhdCBjb25uZWN0ZWQgY29ubj0ke2Nvbm5JZH0gcmVt
b3RlPSR7cmVtb3RlQWRkciA/PyAiPyJ9IGNsaWVudD0ke2NsaWVudExhYmVsfSAke2Nvbm5lY3RQ
YXJhbXMuY2xpZW50Lm1vZGV9IHYke2Nvbm5lY3RQYXJhbXMuY2xpZW50LnZlcnNpb259YCk7CgkJ
CQlpZiAocHJlc2VuY2VLZXkpIHsKCQkJCQl1cHNlcnRQcmVzZW5jZShwcmVzZW5jZUtleSwgewoJ
CQkJCQlob3N0OiBjb25uZWN0UGFyYW1zLmNsaWVudC5kaXNwbGF5TmFtZSA/PyBjb25uZWN0UGFy
YW1zLmNsaWVudC5pZCA/PyBvcy5ob3N0bmFtZSgpLAoJCQkJCQlpcDogaXNMb2NhbENsaWVudCA/
IHZvaWQgMCA6IHJlcG9ydGVkQ2xpZW50SXAsCgkJCQkJCXZlcnNpb246IGNvbm5lY3RQYXJhbXMu
Y2xpZW50LnZlcnNpb24sCgkJCQkJCXBsYXRmb3JtOiBjb25uZWN0UGFyYW1zLmNsaWVudC5wbGF0
Zm9ybSwKCQkJCQkJZGV2aWNlRmFtaWx5OiBjb25uZWN0UGFyYW1zLmNsaWVudC5kZXZpY2VGYW1p
bHksCgkJCQkJCW1vZGVsSWRlbnRpZmllcjogY29ubmVjdFBhcmFtcy5jbGllbnQubW9kZWxJZGVu
dGlmaWVyLAoJCQkJCQltb2RlOiBjb25uZWN0UGFyYW1zLmNsaWVudC5tb2RlLAoJCQkJCQlkZXZp
Y2VJZDogZGV2aWNlPy5pZCwKCQkJCQkJcm9sZXM6IFtyb2xlXSwKCQkJCQkJc2NvcGVzLAoJCQkJ
CQlpbnN0YW5jZUlkOiBkZXZpY2U/LmlkID8/IGluc3RhbmNlSWQsCgkJCQkJCXJlYXNvbjogImNv
bm5lY3QiCgkJCQkJfSk7CgkJCQkJaW5jcmVtZW50UHJlc2VuY2VWZXJzaW9uKCk7CgkJCQl9CgkJ
CQljb25zdCBzbmFwc2hvdCA9IGJ1aWxkR2F0ZXdheVNuYXBzaG90KCk7CgkJCQljb25zdCBjYWNo
ZWRIZWFsdGggPSBnZXRIZWFsdGhDYWNoZSgpOwoJCQkJaWYgKGNhY2hlZEhlYWx0aCkgewoJCQkJ
CXNuYXBzaG90LmhlYWx0aCA9IGNhY2hlZEhlYWx0aDsKCQkJCQlzbmFwc2hvdC5zdGF0ZVZlcnNp
b24uaGVhbHRoID0gZ2V0SGVhbHRoVmVyc2lvbigpOwoJCQkJfQoJCQkJY29uc3QgY2FudmFzQ2Fw
YWJpbGl0eSA9IHJvbGUgPT09ICJub2RlIiAmJiBjYW52YXNIb3N0VXJsID8gbWludENhbnZhc0Nh
cGFiaWxpdHlUb2tlbigpIDogdm9pZCAwOwoJCQkJY29uc3QgY2FudmFzQ2FwYWJpbGl0eUV4cGly
ZXNBdE1zID0gY2FudmFzQ2FwYWJpbGl0eSA/IERhdGUubm93KCkgKyBDQU5WQVNfQ0FQQUJJTElU
WV9UVExfTVMgOiB2b2lkIDA7CgkJCQljb25zdCBzY29wZWRDYW52YXNIb3N0VXJsID0gY2FudmFz
SG9zdFVybCAmJiBjYW52YXNDYXBhYmlsaXR5ID8gYnVpbGRDYW52YXNTY29wZWRIb3N0VXJsKGNh
bnZhc0hvc3RVcmwsIGNhbnZhc0NhcGFiaWxpdHkpID8/IGNhbnZhc0hvc3RVcmwgOiBjYW52YXNI
b3N0VXJsOwoJCQkJY29uc3QgaGVsbG9PayA9IHsKCQkJCQl0eXBlOiAiaGVsbG8tb2siLAoJCQkJ
CXByb3RvY29sOiAzLAoJCQkJCXNlcnZlcjogewoJCQkJCQl2ZXJzaW9uOiByZXNvbHZlUnVudGlt
ZVNlcnZpY2VWZXJzaW9uKHByb2Nlc3MuZW52KSwKCQkJCQkJY29ubklkCgkJCQkJfSwKCQkJCQlm
ZWF0dXJlczogewoJCQkJCQltZXRob2RzOiBnYXRld2F5TWV0aG9kcywKCQkJCQkJZXZlbnRzCgkJ
CQkJfSwKCQkJCQlzbmFwc2hvdCwKCQkJCQljYW52YXNIb3N0VXJsOiBzY29wZWRDYW52YXNIb3N0
VXJsLAoJCQkJCWF1dGg6IGRldmljZVRva2VuID8gewoJCQkJCQlkZXZpY2VUb2tlbjogZGV2aWNl
VG9rZW4udG9rZW4sCgkJCQkJCXJvbGU6IGRldmljZVRva2VuLnJvbGUsCgkJCQkJCXNjb3Blczog
ZGV2aWNlVG9rZW4uc2NvcGVzLAoJCQkJCQlpc3N1ZWRBdE1zOiBkZXZpY2VUb2tlbi5yb3RhdGVk
QXRNcyA/PyBkZXZpY2VUb2tlbi5jcmVhdGVkQXRNcwoJCQkJCX0gOiB2b2lkIDAsCgkJCQkJcG9s
aWN5OiB7CgkJCQkJCW1heFBheWxvYWQ6IE1BWF9QQVlMT0FEX0JZVEVTLAoJCQkJCQltYXhCdWZm
ZXJlZEJ5dGVzOiBNQVhfQlVGRkVSRURfQllURVMsCgkJCQkJCXRpY2tJbnRlcnZhbE1zOiBUSUNL
X0lOVEVSVkFMX01TCgkJCQkJfQoJCQkJfTsKCQkJCWNsZWFySGFuZHNoYWtlVGltZXIoKTsKCQkJ
CWNvbnN0IG5leHRDbGllbnQgPSB7CgkJCQkJc29ja2V0LAoJCQkJCWNvbm5lY3Q6IGNvbm5lY3RQ
YXJhbXMsCgkJCQkJY29ubklkLAoJCQkJCXByZXNlbmNlS2V5LAoJCQkJCWNsaWVudElwOiByZXBv
cnRlZENsaWVudElwLAoJCQkJCWNhbnZhc0hvc3RVcmwsCgkJCQkJY2FudmFzQ2FwYWJpbGl0eSwK
CQkJCQljYW52YXNDYXBhYmlsaXR5RXhwaXJlc0F0TXMKCQkJCX07CgkJCQlzZXRTb2NrZXRNYXhQ
YXlsb2FkKHNvY2tldCwgTUFYX1BBWUxPQURfQllURVMpOwoJCQkJc2V0Q2xpZW50KG5leHRDbGll
bnQpOwoJCQkJc2V0SGFuZHNoYWtlU3RhdGUoImNvbm5lY3RlZCIpOwoJCQkJaWYgKHJvbGUgPT09
ICJub2RlIikgewoJCQkJCWNvbnN0IGNvbnRleHQgPSBidWlsZFJlcXVlc3RDb250ZXh0KCk7CgkJ
CQkJY29uc3Qgbm9kZVNlc3Npb24gPSBjb250ZXh0Lm5vZGVSZWdpc3RyeS5yZWdpc3RlcihuZXh0
Q2xpZW50LCB7IHJlbW90ZUlwOiByZXBvcnRlZENsaWVudElwIH0pOwoJCQkJCWNvbnN0IGluc3Rh
bmNlSWRSYXcgPSBjb25uZWN0UGFyYW1zLmNsaWVudC5pbnN0YW5jZUlkOwoJCQkJCWNvbnN0IGlu
c3RhbmNlSWQgPSB0eXBlb2YgaW5zdGFuY2VJZFJhdyA9PT0gInN0cmluZyIgPyBpbnN0YW5jZUlk
UmF3LnRyaW0oKSA6ICIiOwoJCQkJCWNvbnN0IG5vZGVJZHNGb3JQYWlyaW5nID0gbmV3IFNldChb
bm9kZVNlc3Npb24ubm9kZUlkXSk7CgkJCQkJaWYgKGluc3RhbmNlSWQpIG5vZGVJZHNGb3JQYWly
aW5nLmFkZChpbnN0YW5jZUlkKTsKCQkJCQlmb3IgKGNvbnN0IG5vZGVJZCBvZiBub2RlSWRzRm9y
UGFpcmluZykgdXBkYXRlUGFpcmVkTm9kZU1ldGFkYXRhKG5vZGVJZCwgeyBsYXN0Q29ubmVjdGVk
QXRNczogbm9kZVNlc3Npb24uY29ubmVjdGVkQXRNcyB9KS5jYXRjaCgoZXJyKSA9PiBsb2dHYXRl
d2F5Lndhcm4oYGZhaWxlZCB0byByZWNvcmQgbGFzdCBjb25uZWN0IGZvciAke25vZGVJZH06ICR7
Zm9ybWF0Rm9yTG9nKGVycil9YCkpOwoJCQkJCXJlY29yZFJlbW90ZU5vZGVJbmZvKHsKCQkJCQkJ
bm9kZUlkOiBub2RlU2Vzc2lvbi5ub2RlSWQsCgkJCQkJCWRpc3BsYXlOYW1lOiBub2RlU2Vzc2lv
bi5kaXNwbGF5TmFtZSwKCQkJCQkJcGxhdGZvcm06IG5vZGVTZXNzaW9uLnBsYXRmb3JtLAoJCQkJ
CQlkZXZpY2VGYW1pbHk6IG5vZGVTZXNzaW9uLmRldmljZUZhbWlseSwKCQkJCQkJY29tbWFuZHM6
IG5vZGVTZXNzaW9uLmNvbW1hbmRzLAoJCQkJCQlyZW1vdGVJcDogbm9kZVNlc3Npb24ucmVtb3Rl
SXAKCQkJCQl9KTsKCQkJCQlyZWZyZXNoUmVtb3RlTm9kZUJpbnMoewoJCQkJCQlub2RlSWQ6IG5v
ZGVTZXNzaW9uLm5vZGVJZCwKCQkJCQkJcGxhdGZvcm06IG5vZGVTZXNzaW9uLnBsYXRmb3JtLAoJ
CQkJCQlkZXZpY2VGYW1pbHk6IG5vZGVTZXNzaW9uLmRldmljZUZhbWlseSwKCQkJCQkJY29tbWFu
ZHM6IG5vZGVTZXNzaW9uLmNvbW1hbmRzLAoJCQkJCQljZmc6IGxvYWRDb25maWcoKQoJCQkJCX0p
LmNhdGNoKChlcnIpID0+IGxvZ0dhdGV3YXkud2FybihgcmVtb3RlIGJpbiBwcm9iZSBmYWlsZWQg
Zm9yICR7bm9kZVNlc3Npb24ubm9kZUlkfTogJHtmb3JtYXRGb3JMb2coZXJyKX1gKSk7CgkJCQkJ
bG9hZFZvaWNlV2FrZUNvbmZpZygpLnRoZW4oKGNmZykgPT4gewoJCQkJCQljb250ZXh0Lm5vZGVS
ZWdpc3RyeS5zZW5kRXZlbnQobm9kZVNlc3Npb24ubm9kZUlkLCAidm9pY2V3YWtlLmNoYW5nZWQi
LCB7IHRyaWdnZXJzOiBjZmcudHJpZ2dlcnMgfSk7CgkJCQkJfSkuY2F0Y2goKGVycikgPT4gbG9n
R2F0ZXdheS53YXJuKGB2b2ljZXdha2Ugc25hcHNob3QgZmFpbGVkIGZvciAke25vZGVTZXNzaW9u
Lm5vZGVJZH06ICR7Zm9ybWF0Rm9yTG9nKGVycil9YCkpOwoJCQkJfQoJCQkJbG9nV3MoIm91dCIs
ICJoZWxsby1vayIsIHsKCQkJCQljb25uSWQsCgkJCQkJbWV0aG9kczogZ2F0ZXdheU1ldGhvZHMu
bGVuZ3RoLAoJCQkJCWV2ZW50czogZXZlbnRzLmxlbmd0aCwKCQkJCQlwcmVzZW5jZTogc25hcHNo
b3QucHJlc2VuY2UubGVuZ3RoLAoJCQkJCXN0YXRlVmVyc2lvbjogc25hcHNob3Quc3RhdGVWZXJz
aW9uLnByZXNlbmNlCgkJCQl9KTsKCQkJCXNlbmQoewoJCQkJCXR5cGU6ICJyZXMiLAoJCQkJCWlk
OiBmcmFtZS5pZCwKCQkJCQlvazogdHJ1ZSwKCQkJCQlwYXlsb2FkOiBoZWxsb09rCgkJCQl9KTsK
CQkJCXJlZnJlc2hHYXRld2F5SGVhbHRoU25hcHNob3QoeyBwcm9iZTogdHJ1ZSB9KS5jYXRjaCgo
ZXJyKSA9PiBsb2dIZWFsdGguZXJyb3IoYHBvc3QtY29ubmVjdCBoZWFsdGggcmVmcmVzaCBmYWls
ZWQ6ICR7Zm9ybWF0RXJyb3IoZXJyKX1gKSk7CgkJCQlyZXR1cm47CgkJCX0KCQkJaWYgKCF2YWxp
ZGF0ZVJlcXVlc3RGcmFtZShwYXJzZWQpKSB7CgkJCQlzZW5kKHsKCQkJCQl0eXBlOiAicmVzIiwK
CQkJCQlpZDogcGFyc2VkPy5pZCA/PyAiaW52YWxpZCIsCgkJCQkJb2s6IGZhbHNlLAoJCQkJCWVy
cm9yOiBlcnJvclNoYXBlKEVycm9yQ29kZXMuSU5WQUxJRF9SRVFVRVNULCBgaW52YWxpZCByZXF1
ZXN0IGZyYW1lOiAke2Zvcm1hdFZhbGlkYXRpb25FcnJvcnModmFsaWRhdGVSZXF1ZXN0RnJhbWUu
ZXJyb3JzKX1gKQoJCQkJfSk7CgkJCQlyZXR1cm47CgkJCX0KCQkJY29uc3QgcmVxID0gcGFyc2Vk
OwoJCQlsb2dXcygiaW4iLCAicmVxIiwgewoJCQkJY29ubklkLAoJCQkJaWQ6IHJlcS5pZCwKCQkJ
CW1ldGhvZDogcmVxLm1ldGhvZAoJCQl9KTsKCQkJY29uc3QgcmVzcG9uZCA9IChvaywgcGF5bG9h
ZCwgZXJyb3IsIG1ldGEpID0+IHsKCQkJCXNlbmQoewoJCQkJCXR5cGU6ICJyZXMiLAoJCQkJCWlk
OiByZXEuaWQsCgkJCQkJb2ssCgkJCQkJcGF5bG9hZCwKCQkJCQllcnJvcgoJCQkJfSk7CgkJCQlj
b25zdCB1bmF1dGhvcml6ZWRSb2xlRXJyb3IgPSBpc1VuYXV0aG9yaXplZFJvbGVFcnJvcihlcnJv
cik7CgkJCQlsZXQgbG9nTWV0YSA9IG1ldGE7CgkJCQlpZiAodW5hdXRob3JpemVkUm9sZUVycm9y
KSB7CgkJCQkJY29uc3QgdW5hdXRob3JpemVkRGVjaXNpb24gPSB1bmF1dGhvcml6ZWRGbG9vZEd1
YXJkLnJlZ2lzdGVyVW5hdXRob3JpemVkKCk7CgkJCQkJaWYgKHVuYXV0aG9yaXplZERlY2lzaW9u
LnN1cHByZXNzZWRTaW5jZUxhc3RMb2cgPiAwKSBsb2dNZXRhID0gewoJCQkJCQkuLi5sb2dNZXRh
LAoJCQkJCQlzdXBwcmVzc2VkVW5hdXRob3JpemVkUmVzcG9uc2VzOiB1bmF1dGhvcml6ZWREZWNp
c2lvbi5zdXBwcmVzc2VkU2luY2VMYXN0TG9nCgkJCQkJfTsKCQkJCQlpZiAoIXVuYXV0aG9yaXpl
ZERlY2lzaW9uLnNob3VsZExvZykgcmV0dXJuOwoJCQkJCWlmICh1bmF1dGhvcml6ZWREZWNpc2lv
bi5zaG91bGRDbG9zZSkgewoJCQkJCQlzZXRDbG9zZUNhdXNlKCJyZXBlYXRlZC11bmF1dGhvcml6
ZWQtcmVxdWVzdHMiLCB7CgkJCQkJCQl1bmF1dGhvcml6ZWRDb3VudDogdW5hdXRob3JpemVkRGVj
aXNpb24uY291bnQsCgkJCQkJCQltZXRob2Q6IHJlcS5tZXRob2QKCQkJCQkJfSk7CgkJCQkJCXF1
ZXVlTWljcm90YXNrKCgpID0+IGNsb3NlKDEwMDgsICJyZXBlYXRlZCB1bmF1dGhvcml6ZWQgY2Fs
bHMiKSk7CgkJCQkJfQoJCQkJCWxvZ01ldGEgPSB7CgkJCQkJCS4uLmxvZ01ldGEsCgkJCQkJCXVu
YXV0aG9yaXplZENvdW50OiB1bmF1dGhvcml6ZWREZWNpc2lvbi5jb3VudAoJCQkJCX07CgkJCQl9
IGVsc2UgdW5hdXRob3JpemVkRmxvb2RHdWFyZC5yZXNldCgpOwoJCQkJbG9nV3MoIm91dCIsICJy
ZXMiLCB7CgkJCQkJY29ubklkLAoJCQkJCWlkOiByZXEuaWQsCgkJCQkJb2ssCgkJCQkJbWV0aG9k
OiByZXEubWV0aG9kLAoJCQkJCWVycm9yQ29kZTogZXJyb3I/LmNvZGUsCgkJCQkJZXJyb3JNZXNz
YWdlOiBlcnJvcj8ubWVzc2FnZSwKCQkJCQkuLi5sb2dNZXRhCgkJCQl9KTsKCQkJfTsKCQkJKGFz
eW5jICgpID0+IHsKCQkJCWF3YWl0IGhhbmRsZUdhdGV3YXlSZXF1ZXN0KHsKCQkJCQlyZXEsCgkJ
CQkJcmVzcG9uZCwKCQkJCQljbGllbnQsCgkJCQkJaXNXZWJjaGF0Q29ubmVjdCwKCQkJCQlleHRy
YUhhbmRsZXJzLAoJCQkJCWNvbnRleHQ6IGJ1aWxkUmVxdWVzdENvbnRleHQoKQoJCQkJfSk7CgkJ
CX0pKCkuY2F0Y2goKGVycikgPT4gewoJCQkJbG9nR2F0ZXdheS5lcnJvcihgcmVxdWVzdCBoYW5k
bGVyIGZhaWxlZDogJHtmb3JtYXRGb3JMb2coZXJyKX1gKTsKCQkJCXJlc3BvbmQoZmFsc2UsIHZv
aWQgMCwgZXJyb3JTaGFwZShFcnJvckNvZGVzLlVOQVZBSUxBQkxFLCBmb3JtYXRGb3JMb2coZXJy
KSkpOwoJCQl9KTsKCQl9IGNhdGNoIChlcnIpIHsKCQkJbG9nR2F0ZXdheS5lcnJvcihgcGFyc2Uv
aGFuZGxlIGVycm9yOiAke1N0cmluZyhlcnIpfWApOwoJCQlsb2dXcygib3V0IiwgInBhcnNlLWVy
cm9yIiwgewoJCQkJY29ubklkLAoJCQkJZXJyb3I6IGZvcm1hdEZvckxvZyhlcnIpCgkJCX0pOwoJ
CQlpZiAoIWdldENsaWVudCgpKSBjbG9zZSgpOwoJCX0KCX0pOwp9CmZ1bmN0aW9uIGdldFJhd0Rh
dGFCeXRlTGVuZ3RoKGRhdGEpIHsKCWlmIChCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIHJldHVybiBk
YXRhLmJ5dGVMZW5ndGg7CglpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkgcmV0dXJuIGRhdGEucmVk
dWNlKCh0b3RhbCwgY2h1bmspID0+IHRvdGFsICsgY2h1bmsuYnl0ZUxlbmd0aCwgMCk7CglpZiAo
ZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSByZXR1cm4gZGF0YS5ieXRlTGVuZ3RoOwoJcmV0
dXJuIEJ1ZmZlci5ieXRlTGVuZ3RoKFN0cmluZyhkYXRhKSk7Cn0KZnVuY3Rpb24gc2V0U29ja2V0
TWF4UGF5bG9hZChzb2NrZXQsIG1heFBheWxvYWQpIHsKCWNvbnN0IHJlY2VpdmVyID0gc29ja2V0
Ll9yZWNlaXZlcjsKCWlmIChyZWNlaXZlcikgcmVjZWl2ZXIuX21heFBheWxvYWQgPSBtYXhQYXls
b2FkOwp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2dhdGV3YXkvc2VydmVyL3dzLWNvbm5l
Y3Rpb24udHMKY29uc3QgTE9HX0hFQURFUl9NQVhfTEVOID0gMzAwOwpjb25zdCBMT0dfSEVBREVS
X0ZPUk1BVF9SRUdFWCA9IC9ccHtDZn0vZ3U7CmZ1bmN0aW9uIHJlcGxhY2VDb250cm9sQ2hhcnMo
dmFsdWUpIHsKCWxldCBjbGVhbmVkID0gIiI7Cglmb3IgKGNvbnN0IGNoYXIgb2YgdmFsdWUpIHsK
CQljb25zdCBjb2RlUG9pbnQgPSBjaGFyLmNvZGVQb2ludEF0KDApOwoJCWlmIChjb2RlUG9pbnQg
IT09IHZvaWQgMCAmJiAoY29kZVBvaW50IDw9IDMxIHx8IGNvZGVQb2ludCA+PSAxMjcgJiYgY29k
ZVBvaW50IDw9IDE1OSkpIHsKCQkJY2xlYW5lZCArPSAiICI7CgkJCWNvbnRpbnVlOwoJCX0KCQlj
bGVhbmVkICs9IGNoYXI7Cgl9CglyZXR1cm4gY2xlYW5lZDsKfQpjb25zdCBzYW5pdGl6ZUxvZ1Zh
bHVlID0gKHZhbHVlKSA9PiB7CglpZiAoIXZhbHVlKSByZXR1cm47Cgljb25zdCBjbGVhbmVkID0g
cmVwbGFjZUNvbnRyb2xDaGFycyh2YWx1ZSkucmVwbGFjZShMT0dfSEVBREVSX0ZPUk1BVF9SRUdF
WCwgIiAiKS5yZXBsYWNlKC9ccysvZywgIiAiKS50cmltKCk7CglpZiAoIWNsZWFuZWQpIHJldHVy
bjsKCWlmIChjbGVhbmVkLmxlbmd0aCA8PSBMT0dfSEVBREVSX01BWF9MRU4pIHJldHVybiBjbGVh
bmVkOwoJcmV0dXJuIHRydW5jYXRlVXRmMTZTYWZlKGNsZWFuZWQsIExPR19IRUFERVJfTUFYX0xF
Tik7Cn07CmZ1bmN0aW9uIGF0dGFjaEdhdGV3YXlXc0Nvbm5lY3Rpb25IYW5kbGVyKHBhcmFtcykg
ewoJY29uc3QgeyB3c3MsIGNsaWVudHMsIHBvcnQsIGdhdGV3YXlIb3N0LCBjYW52YXNIb3N0RW5h
YmxlZCwgY2FudmFzSG9zdFNlcnZlclBvcnQsIHJlc29sdmVkQXV0aCwgcmF0ZUxpbWl0ZXIsIGJy
b3dzZXJSYXRlTGltaXRlciwgZ2F0ZXdheU1ldGhvZHMsIGV2ZW50cywgbG9nR2F0ZXdheSwgbG9n
SGVhbHRoLCBsb2dXc0NvbnRyb2wsIGV4dHJhSGFuZGxlcnMsIGJyb2FkY2FzdCwgYnVpbGRSZXF1
ZXN0Q29udGV4dCB9ID0gcGFyYW1zOwoJY29uc3Qgb3JpZ2luQ2hlY2tNZXRyaWNzID0geyBob3N0
SGVhZGVyRmFsbGJhY2tBY2NlcHRlZDogMCB9OwoJd3NzLm9uKCJjb25uZWN0aW9uIiwgKHNvY2tl
dCwgdXBncmFkZVJlcSkgPT4gewoJCWxldCBjbGllbnQgPSBudWxsOwoJCWxldCBjbG9zZWQgPSBm
YWxzZTsKCQljb25zdCBvcGVuZWRBdCA9IERhdGUubm93KCk7CgkJY29uc3QgY29ubklkID0gcmFu
ZG9tVVVJRCgpOwoJCWNvbnN0IHJlbW90ZUFkZHIgPSBzb2NrZXQuX3NvY2tldD8ucmVtb3RlQWRk
cmVzczsKCQljb25zdCBoZWFkZXJWYWx1ZSA9ICh2YWx1ZSkgPT4gQXJyYXkuaXNBcnJheSh2YWx1
ZSkgPyB2YWx1ZVswXSA6IHZhbHVlOwoJCWNvbnN0IHJlcXVlc3RIb3N0ID0gaGVhZGVyVmFsdWUo
dXBncmFkZVJlcS5oZWFkZXJzLmhvc3QpOwoJCWNvbnN0IHJlcXVlc3RPcmlnaW4gPSBoZWFkZXJW
YWx1ZSh1cGdyYWRlUmVxLmhlYWRlcnMub3JpZ2luKTsKCQljb25zdCByZXF1ZXN0VXNlckFnZW50
ID0gaGVhZGVyVmFsdWUodXBncmFkZVJlcS5oZWFkZXJzWyJ1c2VyLWFnZW50Il0pOwoJCWNvbnN0
IGZvcndhcmRlZEZvciA9IGhlYWRlclZhbHVlKHVwZ3JhZGVSZXEuaGVhZGVyc1sieC1mb3J3YXJk
ZWQtZm9yIl0pOwoJCWNvbnN0IHJlYWxJcCA9IGhlYWRlclZhbHVlKHVwZ3JhZGVSZXEuaGVhZGVy
c1sieC1yZWFsLWlwIl0pOwoJCWNvbnN0IGNhbnZhc0hvc3RVcmwgPSByZXNvbHZlQ2FudmFzSG9z
dFVybCh7CgkJCWNhbnZhc1BvcnQ6IGNhbnZhc0hvc3RTZXJ2ZXJQb3J0ID8/IChjYW52YXNIb3N0
RW5hYmxlZCA/IHBvcnQgOiB2b2lkIDApLAoJCQlob3N0T3ZlcnJpZGU6IGNhbnZhc0hvc3RTZXJ2
ZXJQb3J0ID8gZ2F0ZXdheUhvc3QgJiYgZ2F0ZXdheUhvc3QgIT09ICIwLjAuMC4wIiAmJiBnYXRl
d2F5SG9zdCAhPT0gIjo6IiA/IGdhdGV3YXlIb3N0IDogdm9pZCAwIDogdm9pZCAwLAoJCQlyZXF1
ZXN0SG9zdDogdXBncmFkZVJlcS5oZWFkZXJzLmhvc3QsCgkJCWZvcndhcmRlZFByb3RvOiB1cGdy
YWRlUmVxLmhlYWRlcnNbIngtZm9yd2FyZGVkLXByb3RvIl0sCgkJCWxvY2FsQWRkcmVzczogdXBn
cmFkZVJlcS5zb2NrZXQ/LmxvY2FsQWRkcmVzcwoJCX0pOwoJCWxvZ1dzKCJpbiIsICJvcGVuIiwg
ewoJCQljb25uSWQsCgkJCXJlbW90ZUFkZHIKCQl9KTsKCQlsZXQgaGFuZHNoYWtlU3RhdGUgPSAi
cGVuZGluZyI7CgkJbGV0IGNsb3NlQ2F1c2U7CgkJbGV0IGNsb3NlTWV0YSA9IHt9OwoJCWxldCBs
YXN0RnJhbWVUeXBlOwoJCWxldCBsYXN0RnJhbWVNZXRob2Q7CgkJbGV0IGxhc3RGcmFtZUlkOwoJ
CWNvbnN0IHNldENsb3NlQ2F1c2UgPSAoY2F1c2UsIG1ldGEpID0+IHsKCQkJaWYgKCFjbG9zZUNh
dXNlKSBjbG9zZUNhdXNlID0gY2F1c2U7CgkJCWlmIChtZXRhICYmIE9iamVjdC5rZXlzKG1ldGEp
Lmxlbmd0aCA+IDApIGNsb3NlTWV0YSA9IHsKCQkJCS4uLmNsb3NlTWV0YSwKCQkJCS4uLm1ldGEK
CQkJfTsKCQl9OwoJCWNvbnN0IHNldExhc3RGcmFtZU1ldGEgPSAobWV0YSkgPT4gewoJCQlpZiAo
bWV0YS50eXBlIHx8IG1ldGEubWV0aG9kIHx8IG1ldGEuaWQpIHsKCQkJCWxhc3RGcmFtZVR5cGUg
PSBtZXRhLnR5cGUgPz8gbGFzdEZyYW1lVHlwZTsKCQkJCWxhc3RGcmFtZU1ldGhvZCA9IG1ldGEu
bWV0aG9kID8/IGxhc3RGcmFtZU1ldGhvZDsKCQkJCWxhc3RGcmFtZUlkID0gbWV0YS5pZCA/PyBs
YXN0RnJhbWVJZDsKCQkJfQoJCX07CgkJY29uc3Qgc2VuZCA9IChvYmopID0+IHsKCQkJdHJ5IHsK
CQkJCXNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KG9iaikpOwoJCQl9IGNhdGNoIHt9CgkJfTsK
CQljb25zdCBjb25uZWN0Tm9uY2UgPSByYW5kb21VVUlEKCk7CgkJc2VuZCh7CgkJCXR5cGU6ICJl
dmVudCIsCgkJCWV2ZW50OiAiY29ubmVjdC5jaGFsbGVuZ2UiLAoJCQlwYXlsb2FkOiB7CgkJCQlu
b25jZTogY29ubmVjdE5vbmNlLAoJCQkJdHM6IERhdGUubm93KCkKCQkJfQoJCX0pOwoJCWNvbnN0
IGNsb3NlID0gKGNvZGUgPSAxZTMsIHJlYXNvbikgPT4gewoJCQlpZiAoY2xvc2VkKSByZXR1cm47
CgkJCWNsb3NlZCA9IHRydWU7CgkJCWNsZWFyVGltZW91dChoYW5kc2hha2VUaW1lcik7CgkJCWlm
IChjbGllbnQpIGNsaWVudHMuZGVsZXRlKGNsaWVudCk7CgkJCXRyeSB7CgkJCQlzb2NrZXQuY2xv
c2UoY29kZSwgcmVhc29uKTsKCQkJfSBjYXRjaCB7fQoJCX07CgkJc29ja2V0Lm9uY2UoImVycm9y
IiwgKGVycikgPT4gewoJCQlsb2dXc0NvbnRyb2wud2FybihgZXJyb3IgY29ubj0ke2Nvbm5JZH0g
cmVtb3RlPSR7cmVtb3RlQWRkciA/PyAiPyJ9OiAke2Zvcm1hdEVycm9yKGVycil9YCk7CgkJCWNs
b3NlKCk7CgkJfSk7CgkJY29uc3QgaXNOb2lzeVN3aWZ0UG1IZWxwZXJDbG9zZSA9ICh1c2VyQWdl
bnQsIHJlbW90ZSkgPT4gQm9vbGVhbih1c2VyQWdlbnQ/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMo
InN3aWZ0cG0tdGVzdGluZy1oZWxwZXIiKSAmJiBpc0xvb3BiYWNrQWRkcmVzcyhyZW1vdGUpKTsK
CQlzb2NrZXQub25jZSgiY2xvc2UiLCAoY29kZSwgcmVhc29uKSA9PiB7CgkJCWNvbnN0IGR1cmF0
aW9uTXMgPSBEYXRlLm5vdygpIC0gb3BlbmVkQXQ7CgkJCWNvbnN0IGxvZ0ZvcndhcmRlZEZvciA9
IHNhbml0aXplTG9nVmFsdWUoZm9yd2FyZGVkRm9yKTsKCQkJY29uc3QgbG9nT3JpZ2luID0gc2Fu
aXRpemVMb2dWYWx1ZShyZXF1ZXN0T3JpZ2luKTsKCQkJY29uc3QgbG9nSG9zdCA9IHNhbml0aXpl
TG9nVmFsdWUocmVxdWVzdEhvc3QpOwoJCQljb25zdCBsb2dVc2VyQWdlbnQgPSBzYW5pdGl6ZUxv
Z1ZhbHVlKHJlcXVlc3RVc2VyQWdlbnQpOwoJCQljb25zdCBsb2dSZWFzb24gPSBzYW5pdGl6ZUxv
Z1ZhbHVlKHJlYXNvbj8udG9TdHJpbmcoKSk7CgkJCWNvbnN0IGNsb3NlQ29udGV4dCA9IHsKCQkJ
CWNhdXNlOiBjbG9zZUNhdXNlLAoJCQkJaGFuZHNoYWtlOiBoYW5kc2hha2VTdGF0ZSwKCQkJCWR1
cmF0aW9uTXMsCgkJCQlsYXN0RnJhbWVUeXBlLAoJCQkJbGFzdEZyYW1lTWV0aG9kLAoJCQkJbGFz
dEZyYW1lSWQsCgkJCQlob3N0OiBsb2dIb3N0LAoJCQkJb3JpZ2luOiBsb2dPcmlnaW4sCgkJCQl1
c2VyQWdlbnQ6IGxvZ1VzZXJBZ2VudCwKCQkJCWZvcndhcmRlZEZvcjogbG9nRm9yd2FyZGVkRm9y
LAoJCQkJLi4uY2xvc2VNZXRhCgkJCX07CgkJCWlmICghY2xpZW50KSAoaXNOb2lzeVN3aWZ0UG1I
ZWxwZXJDbG9zZShyZXF1ZXN0VXNlckFnZW50LCByZW1vdGVBZGRyKSA/IGxvZ1dzQ29udHJvbC5k
ZWJ1ZyA6IGxvZ1dzQ29udHJvbC53YXJuKShgY2xvc2VkIGJlZm9yZSBjb25uZWN0IGNvbm49JHtj
b25uSWR9IHJlbW90ZT0ke3JlbW90ZUFkZHIgPz8gIj8ifSBmd2Q9JHtsb2dGb3J3YXJkZWRGb3Ig
fHwgIm4vYSJ9IG9yaWdpbj0ke2xvZ09yaWdpbiB8fCAibi9hIn0gaG9zdD0ke2xvZ0hvc3QgfHwg
Im4vYSJ9IHVhPSR7bG9nVXNlckFnZW50IHx8ICJuL2EifSBjb2RlPSR7Y29kZSA/PyAibi9hIn0g
cmVhc29uPSR7bG9nUmVhc29uIHx8ICJuL2EifWAsIGNsb3NlQ29udGV4dCk7CgkJCWlmIChjbGll
bnQgJiYgaXNXZWJjaGF0Q2xpZW50KGNsaWVudC5jb25uZWN0LmNsaWVudCkpIGxvZ1dzQ29udHJv
bC5pbmZvKGB3ZWJjaGF0IGRpc2Nvbm5lY3RlZCBjb2RlPSR7Y29kZX0gcmVhc29uPSR7bG9nUmVh
c29uIHx8ICJuL2EifSBjb25uPSR7Y29ubklkfWApOwoJCQlpZiAoY2xpZW50Py5wcmVzZW5jZUtl
eSkgewoJCQkJdXBzZXJ0UHJlc2VuY2UoY2xpZW50LnByZXNlbmNlS2V5LCB7IHJlYXNvbjogImRp
c2Nvbm5lY3QiIH0pOwoJCQkJYnJvYWRjYXN0UHJlc2VuY2VTbmFwc2hvdCh7CgkJCQkJYnJvYWRj
YXN0LAoJCQkJCWluY3JlbWVudFByZXNlbmNlVmVyc2lvbiwKCQkJCQlnZXRIZWFsdGhWZXJzaW9u
CgkJCQl9KTsKCQkJfQoJCQlpZiAoY2xpZW50Py5jb25uZWN0Py5yb2xlID09PSAibm9kZSIpIHsK
CQkJCWNvbnN0IGNvbnRleHQgPSBidWlsZFJlcXVlc3RDb250ZXh0KCk7CgkJCQljb25zdCBub2Rl
SWQgPSBjb250ZXh0Lm5vZGVSZWdpc3RyeS51bnJlZ2lzdGVyKGNvbm5JZCk7CgkJCQlpZiAobm9k
ZUlkKSB7CgkJCQkJcmVtb3ZlUmVtb3RlTm9kZUluZm8obm9kZUlkKTsKCQkJCQljb250ZXh0Lm5v
ZGVVbnN1YnNjcmliZUFsbChub2RlSWQpOwoJCQkJfQoJCQl9CgkJCWxvZ1dzKCJvdXQiLCAiY2xv
c2UiLCB7CgkJCQljb25uSWQsCgkJCQljb2RlLAoJCQkJcmVhc29uOiBsb2dSZWFzb24sCgkJCQlk
dXJhdGlvbk1zLAoJCQkJY2F1c2U6IGNsb3NlQ2F1c2UsCgkJCQloYW5kc2hha2U6IGhhbmRzaGFr
ZVN0YXRlLAoJCQkJbGFzdEZyYW1lVHlwZSwKCQkJCWxhc3RGcmFtZU1ldGhvZCwKCQkJCWxhc3RG
cmFtZUlkCgkJCX0pOwoJCQljbG9zZSgpOwoJCX0pOwoJCWNvbnN0IGhhbmRzaGFrZVRpbWVvdXRN
cyA9IGdldEhhbmRzaGFrZVRpbWVvdXRNcygpOwoJCWNvbnN0IGhhbmRzaGFrZVRpbWVyID0gc2V0
VGltZW91dCgoKSA9PiB7CgkJCWlmICghY2xpZW50KSB7CgkJCQloYW5kc2hha2VTdGF0ZSA9ICJm
YWlsZWQiOwoJCQkJc2V0Q2xvc2VDYXVzZSgiaGFuZHNoYWtlLXRpbWVvdXQiLCB7IGhhbmRzaGFr
ZU1zOiBEYXRlLm5vdygpIC0gb3BlbmVkQXQgfSk7CgkJCQlsb2dXc0NvbnRyb2wud2FybihgaGFu
ZHNoYWtlIHRpbWVvdXQgY29ubj0ke2Nvbm5JZH0gcmVtb3RlPSR7cmVtb3RlQWRkciA/PyAiPyJ9
YCk7CgkJCQljbG9zZSgpOwoJCQl9CgkJfSwgaGFuZHNoYWtlVGltZW91dE1zKTsKCQlhdHRhY2hH
YXRld2F5V3NNZXNzYWdlSGFuZGxlcih7CgkJCXNvY2tldCwKCQkJdXBncmFkZVJlcSwKCQkJY29u
bklkLAoJCQlyZW1vdGVBZGRyLAoJCQlmb3J3YXJkZWRGb3IsCgkJCXJlYWxJcCwKCQkJcmVxdWVz
dEhvc3QsCgkJCXJlcXVlc3RPcmlnaW4sCgkJCXJlcXVlc3RVc2VyQWdlbnQsCgkJCWNhbnZhc0hv
c3RVcmwsCgkJCWNvbm5lY3ROb25jZSwKCQkJcmVzb2x2ZWRBdXRoLAoJCQlyYXRlTGltaXRlciwK
CQkJYnJvd3NlclJhdGVMaW1pdGVyLAoJCQlnYXRld2F5TWV0aG9kcywKCQkJZXZlbnRzLAoJCQll
eHRyYUhhbmRsZXJzLAoJCQlidWlsZFJlcXVlc3RDb250ZXh0LAoJCQlzZW5kLAoJCQljbG9zZSwK
CQkJaXNDbG9zZWQ6ICgpID0+IGNsb3NlZCwKCQkJY2xlYXJIYW5kc2hha2VUaW1lcjogKCkgPT4g
Y2xlYXJUaW1lb3V0KGhhbmRzaGFrZVRpbWVyKSwKCQkJZ2V0Q2xpZW50OiAoKSA9PiBjbGllbnQs
CgkJCXNldENsaWVudDogKG5leHQpID0+IHsKCQkJCWNsaWVudCA9IG5leHQ7CgkJCQljbGllbnRz
LmFkZChuZXh0KTsKCQkJfSwKCQkJc2V0SGFuZHNoYWtlU3RhdGU6IChuZXh0KSA9PiB7CgkJCQlo
YW5kc2hha2VTdGF0ZSA9IG5leHQ7CgkJCX0sCgkJCXNldENsb3NlQ2F1c2UsCgkJCXNldExhc3RG
cmFtZU1ldGEsCgkJCW9yaWdpbkNoZWNrTWV0cmljcywKCQkJbG9nR2F0ZXdheSwKCQkJbG9nSGVh
bHRoLAoJCQlsb2dXc0NvbnRyb2wKCQl9KTsKCX0pOwp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24g
c3JjL2dhdGV3YXkvc2VydmVyLXdzLXJ1bnRpbWUudHMKZnVuY3Rpb24gYXR0YWNoR2F0ZXdheVdz
SGFuZGxlcnMocGFyYW1zKSB7CglhdHRhY2hHYXRld2F5V3NDb25uZWN0aW9uSGFuZGxlcih7CgkJ
d3NzOiBwYXJhbXMud3NzLAoJCWNsaWVudHM6IHBhcmFtcy5jbGllbnRzLAoJCXBvcnQ6IHBhcmFt
cy5wb3J0LAoJCWdhdGV3YXlIb3N0OiBwYXJhbXMuZ2F0ZXdheUhvc3QsCgkJY2FudmFzSG9zdEVu
YWJsZWQ6IHBhcmFtcy5jYW52YXNIb3N0RW5hYmxlZCwKCQljYW52YXNIb3N0U2VydmVyUG9ydDog
cGFyYW1zLmNhbnZhc0hvc3RTZXJ2ZXJQb3J0LAoJCXJlc29sdmVkQXV0aDogcGFyYW1zLnJlc29s
dmVkQXV0aCwKCQlyYXRlTGltaXRlcjogcGFyYW1zLnJhdGVMaW1pdGVyLAoJCWJyb3dzZXJSYXRl
TGltaXRlcjogcGFyYW1zLmJyb3dzZXJSYXRlTGltaXRlciwKCQlnYXRld2F5TWV0aG9kczogcGFy
YW1zLmdhdGV3YXlNZXRob2RzLAoJCWV2ZW50czogcGFyYW1zLmV2ZW50cywKCQlsb2dHYXRld2F5
OiBwYXJhbXMubG9nR2F0ZXdheSwKCQlsb2dIZWFsdGg6IHBhcmFtcy5sb2dIZWFsdGgsCgkJbG9n
V3NDb250cm9sOiBwYXJhbXMubG9nV3NDb250cm9sLAoJCWV4dHJhSGFuZGxlcnM6IHBhcmFtcy5l
eHRyYUhhbmRsZXJzLAoJCWJyb2FkY2FzdDogcGFyYW1zLmJyb2FkY2FzdCwKCQlidWlsZFJlcXVl
c3RDb250ZXh0OiAoKSA9PiBwYXJhbXMuY29udGV4dAoJfSk7Cn0KLy8jZW5kcmVnaW9uCi8vI3Jl
Z2lvbiBzcmMvZ2F0ZXdheS9zZXJ2ZXIvcmVhZGluZXNzLnRzCmNvbnN0IERFRkFVTFRfUkVBRElO
RVNTX0NBQ0hFX1RUTF9NUyA9IDFlMzsKZnVuY3Rpb24gc2hvdWxkSWdub3JlUmVhZGluZXNzRmFp
bHVyZShhY2NvdW50U25hcHNob3QsIGhlYWx0aCkgewoJaWYgKGhlYWx0aC5yZWFzb24gPT09ICJ1
bm1hbmFnZWQiIHx8IGhlYWx0aC5yZWFzb24gPT09ICJzdGFsZS1zb2NrZXQiKSByZXR1cm4gdHJ1
ZTsKCXJldHVybiBoZWFsdGgucmVhc29uID09PSAibm90LXJ1bm5pbmciICYmIGFjY291bnRTbmFw
c2hvdC5yZXN0YXJ0UGVuZGluZyA9PT0gdHJ1ZTsKfQpmdW5jdGlvbiBjcmVhdGVSZWFkaW5lc3ND
aGVja2VyKGRlcHMpIHsKCWNvbnN0IHsgY2hhbm5lbE1hbmFnZXIsIHN0YXJ0ZWRBdCB9ID0gZGVw
czsKCWNvbnN0IGNhY2hlVHRsTXMgPSBNYXRoLm1heCgwLCBkZXBzLmNhY2hlVHRsTXMgPz8gREVG
QVVMVF9SRUFESU5FU1NfQ0FDSEVfVFRMX01TKTsKCWxldCBjYWNoZWRBdCA9IDA7CglsZXQgY2Fj
aGVkU3RhdGUgPSBudWxsOwoJcmV0dXJuICgpID0+IHsKCQljb25zdCBub3cgPSBEYXRlLm5vdygp
OwoJCWNvbnN0IHVwdGltZU1zID0gbm93IC0gc3RhcnRlZEF0OwoJCWlmIChjYWNoZWRTdGF0ZSAm
JiBub3cgLSBjYWNoZWRBdCA8IGNhY2hlVHRsTXMpIHJldHVybiB7CgkJCS4uLmNhY2hlZFN0YXRl
LAoJCQl1cHRpbWVNcwoJCX07CgkJY29uc3Qgc25hcHNob3QgPSBjaGFubmVsTWFuYWdlci5nZXRS
dW50aW1lU25hcHNob3QoKTsKCQljb25zdCBmYWlsaW5nID0gW107CgkJZm9yIChjb25zdCBbY2hh
bm5lbElkLCBhY2NvdW50c10gb2YgT2JqZWN0LmVudHJpZXMoc25hcHNob3QuY2hhbm5lbEFjY291
bnRzKSkgewoJCQlpZiAoIWFjY291bnRzKSBjb250aW51ZTsKCQkJZm9yIChjb25zdCBhY2NvdW50
U25hcHNob3Qgb2YgT2JqZWN0LnZhbHVlcyhhY2NvdW50cykpIHsKCQkJCWlmICghYWNjb3VudFNu
YXBzaG90KSBjb250aW51ZTsKCQkJCWNvbnN0IGhlYWx0aCA9IGV2YWx1YXRlQ2hhbm5lbEhlYWx0
aChhY2NvdW50U25hcHNob3QsIHsKCQkJCQlub3csCgkJCQkJc3RhbGVFdmVudFRocmVzaG9sZE1z
OiBERUZBVUxUX0NIQU5ORUxfU1RBTEVfRVZFTlRfVEhSRVNIT0xEX01TLAoJCQkJCWNoYW5uZWxD
b25uZWN0R3JhY2VNczogREVGQVVMVF9DSEFOTkVMX0NPTk5FQ1RfR1JBQ0VfTVMsCgkJCQkJY2hh
bm5lbElkCgkJCQl9KTsKCQkJCWlmICghaGVhbHRoLmhlYWx0aHkgJiYgIXNob3VsZElnbm9yZVJl
YWRpbmVzc0ZhaWx1cmUoYWNjb3VudFNuYXBzaG90LCBoZWFsdGgpKSB7CgkJCQkJZmFpbGluZy5w
dXNoKGNoYW5uZWxJZCk7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQl9CgkJY2FjaGVkQXQgPSBu
b3c7CgkJY2FjaGVkU3RhdGUgPSB7CgkJCXJlYWR5OiBmYWlsaW5nLmxlbmd0aCA9PT0gMCwKCQkJ
ZmFpbGluZwoJCX07CgkJcmV0dXJuIHsKCQkJLi4uY2FjaGVkU3RhdGUsCgkJCXVwdGltZU1zCgkJ
fTsKCX07Cn0KLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvZ2F0ZXdheS9zZXJ2ZXIvdGxzLnRz
CmFzeW5jIGZ1bmN0aW9uIGxvYWRHYXRld2F5VGxzUnVudGltZShjZmcsIGxvZykgewoJcmV0dXJu
IGF3YWl0IGxvYWRHYXRld2F5VGxzUnVudGltZSQxKGNmZywgbG9nKTsKfQovLyNlbmRyZWdpb24K
Ly8jcmVnaW9uIHNyYy9nYXRld2F5L3N0YXJ0dXAtY29udHJvbC11aS1vcmlnaW5zLnRzCmFzeW5j
IGZ1bmN0aW9uIG1heWJlU2VlZENvbnRyb2xVaUFsbG93ZWRPcmlnaW5zQXRTdGFydHVwKHBhcmFt
cykgewoJY29uc3Qgc2VlZGVkID0gZW5zdXJlQ29udHJvbFVpQWxsb3dlZE9yaWdpbnNGb3JOb25M
b29wYmFja0JpbmQocGFyYW1zLmNvbmZpZyk7CglpZiAoIXNlZWRlZC5zZWVkZWRPcmlnaW5zIHx8
ICFzZWVkZWQuYmluZCkgcmV0dXJuIHBhcmFtcy5jb25maWc7Cgl0cnkgewoJCWF3YWl0IHBhcmFt
cy53cml0ZUNvbmZpZyhzZWVkZWQuY29uZmlnKTsKCQlwYXJhbXMubG9nLmluZm8oYnVpbGRTZWVk
ZWRPcmlnaW5zSW5mb0xvZyhzZWVkZWQuc2VlZGVkT3JpZ2lucywgc2VlZGVkLmJpbmQpKTsKCX0g
Y2F0Y2ggKGVycikgewoJCXBhcmFtcy5sb2cud2FybihgZ2F0ZXdheTogZmFpbGVkIHRvIHBlcnNp
c3QgZ2F0ZXdheS5jb250cm9sVWkuYWxsb3dlZE9yaWdpbnMgc2VlZDogJHtTdHJpbmcoZXJyKX0u
IFRoZSBnYXRld2F5IHdpbGwgc3RhcnQgd2l0aCB0aGUgaW4tbWVtb3J5IHZhbHVlIGJ1dCBjb25m
aWcgd2FzIG5vdCBzYXZlZC5gKTsKCX0KCXJldHVybiBzZWVkZWQuY29uZmlnOwp9CmZ1bmN0aW9u
IGJ1aWxkU2VlZGVkT3JpZ2luc0luZm9Mb2cob3JpZ2lucywgYmluZCkgewoJcmV0dXJuIGBnYXRl
d2F5OiBzZWVkZWQgZ2F0ZXdheS5jb250cm9sVWkuYWxsb3dlZE9yaWdpbnMgJHtKU09OLnN0cmlu
Z2lmeShvcmlnaW5zKX0gZm9yIGJpbmQ9JHtiaW5kfSAocmVxdWlyZWQgc2luY2UgdjIwMjYuMi4y
Njsgc2VlIGlzc3VlICMyOTM4NSkuIEFkZCBvdGhlciBvcmlnaW5zIHRvIGdhdGV3YXkuY29udHJv
bFVpLmFsbG93ZWRPcmlnaW5zIGlmIG5lZWRlZC5gOwp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24g
c3JjL2dhdGV3YXkvc2VydmVyLmltcGwudHMKZW5zdXJlT3BlbkNsYXdDbGlPblBhdGgoKTsKY29u
c3QgTUFYX01FRElBX1RUTF9IT1VSUyA9IDE2ODsKZnVuY3Rpb24gcmVzb2x2ZU1lZGlhQ2xlYW51
cFR0bE1zKHR0bEhvdXJzUmF3KSB7Cgljb25zdCB0dGxNcyA9IE1hdGgubWluKE1hdGgubWF4KHR0
bEhvdXJzUmF3LCAxKSwgTUFYX01FRElBX1RUTF9IT1VSUykgKiA2MCAqIDZlNDsKCWlmICghTnVt
YmVyLmlzRmluaXRlKHR0bE1zKSB8fCAhTnVtYmVyLmlzU2FmZUludGVnZXIodHRsTXMpKSB0aHJv
dyBuZXcgRXJyb3IoYEludmFsaWQgbWVkaWEudHRsSG91cnM6ICR7U3RyaW5nKHR0bEhvdXJzUmF3
KX1gKTsKCXJldHVybiB0dGxNczsKfQpjb25zdCBsb2cgPSBjcmVhdGVTdWJzeXN0ZW1Mb2dnZXIo
ImdhdGV3YXkiKTsKY29uc3QgbG9nQ2FudmFzID0gbG9nLmNoaWxkKCJjYW52YXMiKTsKY29uc3Qg
bG9nRGlzY292ZXJ5ID0gbG9nLmNoaWxkKCJkaXNjb3ZlcnkiKTsKY29uc3QgbG9nVGFpbHNjYWxl
ID0gbG9nLmNoaWxkKCJ0YWlsc2NhbGUiKTsKY29uc3QgbG9nQ2hhbm5lbHMgPSBsb2cuY2hpbGQo
ImNoYW5uZWxzIik7CmNvbnN0IGxvZ0Jyb3dzZXIgPSBsb2cuY2hpbGQoImJyb3dzZXIiKTsKY29u
c3QgbG9nSGVhbHRoID0gbG9nLmNoaWxkKCJoZWFsdGgiKTsKY29uc3QgbG9nQ3JvbiA9IGxvZy5j
aGlsZCgiY3JvbiIpOwpjb25zdCBsb2dSZWxvYWQgPSBsb2cuY2hpbGQoInJlbG9hZCIpOwpjb25z
dCBsb2dIb29rcyA9IGxvZy5jaGlsZCgiaG9va3MiKTsKY29uc3QgbG9nUGx1Z2lucyA9IGxvZy5j
aGlsZCgicGx1Z2lucyIpOwpjb25zdCBsb2dXc0NvbnRyb2wgPSBsb2cuY2hpbGQoIndzIik7CmNv
bnN0IGxvZ1NlY3JldHMgPSBsb2cuY2hpbGQoInNlY3JldHMiKTsKY29uc3QgZ2F0ZXdheVJ1bnRp
bWUgPSBydW50aW1lRm9yTG9nZ2VyKGxvZyk7CmNvbnN0IGNhbnZhc1J1bnRpbWUgPSBydW50aW1l
Rm9yTG9nZ2VyKGxvZ0NhbnZhcyk7CmZ1bmN0aW9uIGNyZWF0ZUdhdGV3YXlBdXRoUmF0ZUxpbWl0
ZXJzKHJhdGVMaW1pdENvbmZpZykgewoJcmV0dXJuIHsKCQlyYXRlTGltaXRlcjogcmF0ZUxpbWl0
Q29uZmlnID8gY3JlYXRlQXV0aFJhdGVMaW1pdGVyKHJhdGVMaW1pdENvbmZpZykgOiB2b2lkIDAs
CgkJYnJvd3NlclJhdGVMaW1pdGVyOiBjcmVhdGVBdXRoUmF0ZUxpbWl0ZXIoewoJCQkuLi5yYXRl
TGltaXRDb25maWcsCgkJCWV4ZW1wdExvb3BiYWNrOiBmYWxzZQoJCX0pCgl9Owp9CmZ1bmN0aW9u
IGxvZ0dhdGV3YXlBdXRoU3VyZmFjZURpYWdub3N0aWNzKHByZXBhcmVkKSB7Cgljb25zdCBzdGF0
ZXMgPSBldmFsdWF0ZUdhdGV3YXlBdXRoU3VyZmFjZVN0YXRlcyh7CgkJY29uZmlnOiBwcmVwYXJl
ZC5zb3VyY2VDb25maWcsCgkJZGVmYXVsdHM6IHByZXBhcmVkLnNvdXJjZUNvbmZpZy5zZWNyZXRz
Py5kZWZhdWx0cywKCQllbnY6IHByb2Nlc3MuZW52Cgl9KTsKCWNvbnN0IGluYWN0aXZlV2Fybmlu
Z3MgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwoJZm9yIChjb25zdCB3YXJuaW5nIG9mIHBy
ZXBhcmVkLndhcm5pbmdzKSB7CgkJaWYgKHdhcm5pbmcuY29kZSAhPT0gIlNFQ1JFVFNfUkVGX0lH
Tk9SRURfSU5BQ1RJVkVfU1VSRkFDRSIpIGNvbnRpbnVlOwoJCWluYWN0aXZlV2FybmluZ3Muc2V0
KHdhcm5pbmcucGF0aCwgd2FybmluZy5tZXNzYWdlKTsKCX0KCWZvciAoY29uc3QgcGF0aCBvZiBH
QVRFV0FZX0FVVEhfU1VSRkFDRV9QQVRIUykgewoJCWNvbnN0IHN0YXRlID0gc3RhdGVzW3BhdGhd
OwoJCWlmICghc3RhdGUuaGFzU2VjcmV0UmVmKSBjb250aW51ZTsKCQljb25zdCBzdGF0ZUxhYmVs
ID0gc3RhdGUuYWN0aXZlID8gImFjdGl2ZSIgOiAiaW5hY3RpdmUiOwoJCWNvbnN0IGRldGFpbHMg
PSAoIXN0YXRlLmFjdGl2ZSAmJiBpbmFjdGl2ZVdhcm5pbmdzLmdldChwYXRoKSA/IGluYWN0aXZl
V2FybmluZ3MuZ2V0KHBhdGgpIDogdm9pZCAwKSA/PyBzdGF0ZS5yZWFzb247CgkJbG9nU2VjcmV0
cy5pbmZvKGBbU0VDUkVUU19HQVRFV0FZX0FVVEhfU1VSRkFDRV0gJHtwYXRofSBpcyAke3N0YXRl
TGFiZWx9LiAke2RldGFpbHN9YCk7Cgl9Cn0KZnVuY3Rpb24gYXBwbHlHYXRld2F5QXV0aE92ZXJy
aWRlc0ZvclN0YXJ0dXBQcmVmbGlnaHQoY29uZmlnLCBvdmVycmlkZXMpIHsKCWlmICghb3ZlcnJp
ZGVzLmF1dGggJiYgIW92ZXJyaWRlcy50YWlsc2NhbGUpIHJldHVybiBjb25maWc7CglyZXR1cm4g
ewoJCS4uLmNvbmZpZywKCQlnYXRld2F5OiB7CgkJCS4uLmNvbmZpZy5nYXRld2F5LAoJCQlhdXRo
OiBtZXJnZUdhdGV3YXlBdXRoQ29uZmlnKGNvbmZpZy5nYXRld2F5Py5hdXRoLCBvdmVycmlkZXMu
YXV0aCksCgkJCXRhaWxzY2FsZTogbWVyZ2VHYXRld2F5VGFpbHNjYWxlQ29uZmlnKGNvbmZpZy5n
YXRld2F5Py50YWlsc2NhbGUsIG92ZXJyaWRlcy50YWlsc2NhbGUpCgkJfQoJfTsKfQphc3luYyBm
dW5jdGlvbiBzdGFydEdhdGV3YXlTZXJ2ZXIocG9ydCA9IDE4Nzg5LCBvcHRzID0ge30pIHsKCWNv
bnN0IG1pbmltYWxUZXN0R2F0ZXdheSA9IHByb2Nlc3MuZW52LlZJVEVTVCA9PT0gIjEiICYmIHBy
b2Nlc3MuZW52Lk9QRU5DTEFXX1RFU1RfTUlOSU1BTF9HQVRFV0FZID09PSAiMSI7Cglwcm9jZXNz
LmVudi5PUEVOQ0xBV19HQVRFV0FZX1BPUlQgPSBTdHJpbmcocG9ydCk7Cglsb2dBY2NlcHRlZEVu
dk9wdGlvbih7CgkJa2V5OiAiT1BFTkNMQVdfUkFXX1NUUkVBTSIsCgkJZGVzY3JpcHRpb246ICJy
YXcgc3RyZWFtIGxvZ2dpbmcgZW5hYmxlZCIKCX0pOwoJbG9nQWNjZXB0ZWRFbnZPcHRpb24oewoJ
CWtleTogIk9QRU5DTEFXX1JBV19TVFJFQU1fUEFUSCIsCgkJZGVzY3JpcHRpb246ICJyYXcgc3Ry
ZWFtIGxvZyBwYXRoIG92ZXJyaWRlIgoJfSk7CglsZXQgY29uZmlnU25hcHNob3QgPSBhd2FpdCBy
ZWFkQ29uZmlnRmlsZVNuYXBzaG90KCk7CglpZiAoY29uZmlnU25hcHNob3QubGVnYWN5SXNzdWVz
Lmxlbmd0aCA+IDApIHsKCQlpZiAoaXNOaXhNb2RlKSB0aHJvdyBuZXcgRXJyb3IoIkxlZ2FjeSBj
b25maWcgZW50cmllcyBkZXRlY3RlZCB3aGlsZSBydW5uaW5nIGluIE5peCBtb2RlLiBVcGRhdGUg
eW91ciBOaXggY29uZmlnIHRvIHRoZSBsYXRlc3Qgc2NoZW1hIGFuZCByZXN0YXJ0LiIpOwoJCWNv
bnN0IHsgY29uZmlnOiBtaWdyYXRlZCwgY2hhbmdlcyB9ID0gbWlncmF0ZUxlZ2FjeUNvbmZpZyhj
b25maWdTbmFwc2hvdC5wYXJzZWQpOwoJCWlmICghbWlncmF0ZWQpIGxvZy53YXJuKCJnYXRld2F5
OiBsZWdhY3kgY29uZmlnIGVudHJpZXMgZGV0ZWN0ZWQgYnV0IG5vIGF1dG8tbWlncmF0aW9uIGNo
YW5nZXMgd2VyZSBwcm9kdWNlZDsgY29udGludWluZyB3aXRoIHZhbGlkYXRpb24uIik7CgkJZWxz
ZSB7CgkJCWF3YWl0IHdyaXRlQ29uZmlnRmlsZShtaWdyYXRlZCk7CgkJCWlmIChjaGFuZ2VzLmxl
bmd0aCA+IDApIGxvZy5pbmZvKGBnYXRld2F5OiBtaWdyYXRlZCBsZWdhY3kgY29uZmlnIGVudHJp
ZXM6XG4ke2NoYW5nZXMubWFwKChlbnRyeSkgPT4gYC0gJHtlbnRyeX1gKS5qb2luKCJcbiIpfWAp
OwoJCX0KCX0KCWNvbmZpZ1NuYXBzaG90ID0gYXdhaXQgcmVhZENvbmZpZ0ZpbGVTbmFwc2hvdCgp
OwoJaWYgKGNvbmZpZ1NuYXBzaG90LmV4aXN0cyAmJiAhY29uZmlnU25hcHNob3QudmFsaWQpIHsK
CQljb25zdCBpc3N1ZXMgPSBjb25maWdTbmFwc2hvdC5pc3N1ZXMubGVuZ3RoID4gMCA/IGZvcm1h
dENvbmZpZ0lzc3VlTGluZXMoY29uZmlnU25hcHNob3QuaXNzdWVzLCAiIiwgeyBub3JtYWxpemVS
b290OiB0cnVlIH0pLmpvaW4oIlxuIikgOiAiVW5rbm93biB2YWxpZGF0aW9uIGlzc3VlLiI7CgkJ
dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNvbmZpZyBhdCAke2NvbmZpZ1NuYXBzaG90LnBhdGh9
LlxuJHtpc3N1ZXN9XG5SdW4gIiR7Zm9ybWF0Q2xpQ29tbWFuZCgib3BlbmNsYXcgZG9jdG9yIil9
IiB0byByZXBhaXIsIHRoZW4gcmV0cnkuYCk7Cgl9Cgljb25zdCBhdXRvRW5hYmxlID0gYXBwbHlQ
bHVnaW5BdXRvRW5hYmxlKHsKCQljb25maWc6IGNvbmZpZ1NuYXBzaG90LmNvbmZpZywKCQllbnY6
IHByb2Nlc3MuZW52Cgl9KTsKCWlmIChhdXRvRW5hYmxlLmNoYW5nZXMubGVuZ3RoID4gMCkgdHJ5
IHsKCQlhd2FpdCB3cml0ZUNvbmZpZ0ZpbGUoYXV0b0VuYWJsZS5jb25maWcpOwoJCWxvZy5pbmZv
KGBnYXRld2F5OiBhdXRvLWVuYWJsZWQgcGx1Z2luczpcbiR7YXV0b0VuYWJsZS5jaGFuZ2VzLm1h
cCgoZW50cnkpID0+IGAtICR7ZW50cnl9YCkuam9pbigiXG4iKX1gKTsKCX0gY2F0Y2ggKGVycikg
ewoJCWxvZy53YXJuKGBnYXRld2F5OiBmYWlsZWQgdG8gcGVyc2lzdCBwbHVnaW4gYXV0by1lbmFi
bGUgY2hhbmdlczogJHtTdHJpbmcoZXJyKX1gKTsKCX0KCWxldCBzZWNyZXRzRGVncmFkZWQgPSBm
YWxzZTsKCWNvbnN0IGVtaXRTZWNyZXRzU3RhdGVFdmVudCA9IChjb2RlLCBtZXNzYWdlLCBjZmcp
ID0+IHsKCQllbnF1ZXVlU3lzdGVtRXZlbnQoYFske2NvZGV9XSAke21lc3NhZ2V9YCwgewoJCQlz
ZXNzaW9uS2V5OiByZXNvbHZlTWFpblNlc3Npb25LZXkoY2ZnKSwKCQkJY29udGV4dEtleTogY29k
ZQoJCX0pOwoJfTsKCWxldCBzZWNyZXRzQWN0aXZhdGlvblRhaWwgPSBQcm9taXNlLnJlc29sdmUo
KTsKCWNvbnN0IHJ1bldpdGhTZWNyZXRzQWN0aXZhdGlvbkxvY2sgPSBhc3luYyAob3BlcmF0aW9u
KSA9PiB7CgkJY29uc3QgcnVuID0gc2VjcmV0c0FjdGl2YXRpb25UYWlsLnRoZW4ob3BlcmF0aW9u
LCBvcGVyYXRpb24pOwoJCXNlY3JldHNBY3RpdmF0aW9uVGFpbCA9IHJ1bi50aGVuKCgpID0+IHZv
aWQgMCwgKCkgPT4gdm9pZCAwKTsKCQlyZXR1cm4gYXdhaXQgcnVuOwoJfTsKCWNvbnN0IGFjdGl2
YXRlUnVudGltZVNlY3JldHMgPSBhc3luYyAoY29uZmlnLCBwYXJhbXMpID0+IGF3YWl0IHJ1bldp
dGhTZWNyZXRzQWN0aXZhdGlvbkxvY2soYXN5bmMgKCkgPT4gewoJCXRyeSB7CgkJCWNvbnN0IHBy
ZXBhcmVkID0gYXdhaXQgcHJlcGFyZVNlY3JldHNSdW50aW1lU25hcHNob3QoeyBjb25maWcgfSk7
CgkJCWlmIChwYXJhbXMuYWN0aXZhdGUpIHsKCQkJCWFjdGl2YXRlU2VjcmV0c1J1bnRpbWVTbmFw
c2hvdChwcmVwYXJlZCk7CgkJCQlsb2dHYXRld2F5QXV0aFN1cmZhY2VEaWFnbm9zdGljcyhwcmVw
YXJlZCk7CgkJCX0KCQkJZm9yIChjb25zdCB3YXJuaW5nIG9mIHByZXBhcmVkLndhcm5pbmdzKSBs
b2dTZWNyZXRzLndhcm4oYFske3dhcm5pbmcuY29kZX1dICR7d2FybmluZy5tZXNzYWdlfWApOwoJ
CQlpZiAoc2VjcmV0c0RlZ3JhZGVkKSB7CgkJCQljb25zdCByZWNvdmVyZWRNZXNzYWdlID0gIlNl
Y3JldCByZXNvbHV0aW9uIHJlY292ZXJlZDsgcnVudGltZSByZW1haW5lZCBvbiBsYXN0LWtub3du
LWdvb2QgZHVyaW5nIHRoZSBvdXRhZ2UuIjsKCQkJCWxvZ1NlY3JldHMuaW5mbyhgW1NFQ1JFVFNf
UkVMT0FERVJfUkVDT1ZFUkVEXSAke3JlY292ZXJlZE1lc3NhZ2V9YCk7CgkJCQllbWl0U2VjcmV0
c1N0YXRlRXZlbnQoIlNFQ1JFVFNfUkVMT0FERVJfUkVDT1ZFUkVEIiwgcmVjb3ZlcmVkTWVzc2Fn
ZSwgcHJlcGFyZWQuY29uZmlnKTsKCQkJfQoJCQlzZWNyZXRzRGVncmFkZWQgPSBmYWxzZTsKCQkJ
cmV0dXJuIHByZXBhcmVkOwoJCX0gY2F0Y2ggKGVycikgewoJCQljb25zdCBkZXRhaWxzID0gU3Ry
aW5nKGVycik7CgkJCWlmICghc2VjcmV0c0RlZ3JhZGVkKSB7CgkJCQlsb2dTZWNyZXRzLmVycm9y
KGBbU0VDUkVUU19SRUxPQURFUl9ERUdSQURFRF0gJHtkZXRhaWxzfWApOwoJCQkJaWYgKHBhcmFt
cy5yZWFzb24gIT09ICJzdGFydHVwIikgZW1pdFNlY3JldHNTdGF0ZUV2ZW50KCJTRUNSRVRTX1JF
TE9BREVSX0RFR1JBREVEIiwgYFNlY3JldCByZXNvbHV0aW9uIGZhaWxlZDsgcnVudGltZSByZW1h
aW5zIG9uIGxhc3Qta25vd24tZ29vZCBzbmFwc2hvdC4gJHtkZXRhaWxzfWAsIGNvbmZpZyk7CgkJ
CX0gZWxzZSBsb2dTZWNyZXRzLndhcm4oYFtTRUNSRVRTX1JFTE9BREVSX0RFR1JBREVEXSAke2Rl
dGFpbHN9YCk7CgkJCXNlY3JldHNEZWdyYWRlZCA9IHRydWU7CgkJCWlmIChwYXJhbXMucmVhc29u
ID09PSAic3RhcnR1cCIpIHRocm93IG5ldyBFcnJvcihgU3RhcnR1cCBmYWlsZWQ6IHJlcXVpcmVk
IHNlY3JldHMgYXJlIHVuYXZhaWxhYmxlLiAke2RldGFpbHN9YCwgeyBjYXVzZTogZXJyIH0pOwoJ
CQl0aHJvdyBlcnI7CgkJfQoJfSk7CglsZXQgY2ZnQXRTdGFydDsKCXsKCQljb25zdCBmcmVzaFNu
YXBzaG90ID0gYXdhaXQgcmVhZENvbmZpZ0ZpbGVTbmFwc2hvdCgpOwoJCWlmICghZnJlc2hTbmFw
c2hvdC52YWxpZCkgewoJCQljb25zdCBpc3N1ZXMgPSBmcmVzaFNuYXBzaG90Lmlzc3Vlcy5sZW5n
dGggPiAwID8gZm9ybWF0Q29uZmlnSXNzdWVMaW5lcyhmcmVzaFNuYXBzaG90Lmlzc3VlcywgIiIs
IHsgbm9ybWFsaXplUm9vdDogdHJ1ZSB9KS5qb2luKCJcbiIpIDogIlVua25vd24gdmFsaWRhdGlv
biBpc3N1ZS4iOwoJCQl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY29uZmlnIGF0ICR7ZnJlc2hT
bmFwc2hvdC5wYXRofS5cbiR7aXNzdWVzfWApOwoJCX0KCQlhd2FpdCBhY3RpdmF0ZVJ1bnRpbWVT
ZWNyZXRzKGFwcGx5R2F0ZXdheUF1dGhPdmVycmlkZXNGb3JTdGFydHVwUHJlZmxpZ2h0KGZyZXNo
U25hcHNob3QuY29uZmlnLCB7CgkJCWF1dGg6IG9wdHMuYXV0aCwKCQkJdGFpbHNjYWxlOiBvcHRz
LnRhaWxzY2FsZQoJCX0pLCB7CgkJCXJlYXNvbjogInN0YXJ0dXAiLAoJCQlhY3RpdmF0ZTogZmFs
c2UKCQl9KTsKCX0KCWNmZ0F0U3RhcnQgPSBsb2FkQ29uZmlnKCk7Cgljb25zdCBhdXRoQm9vdHN0
cmFwID0gYXdhaXQgZW5zdXJlR2F0ZXdheVN0YXJ0dXBBdXRoKHsKCQljZmc6IGNmZ0F0U3RhcnQs
CgkJZW52OiBwcm9jZXNzLmVudiwKCQlhdXRoT3ZlcnJpZGU6IG9wdHMuYXV0aCwKCQl0YWlsc2Nh
bGVPdmVycmlkZTogb3B0cy50YWlsc2NhbGUsCgkJcGVyc2lzdDogdHJ1ZQoJfSk7CgljZmdBdFN0
YXJ0ID0gYXV0aEJvb3RzdHJhcC5jZmc7CglpZiAoYXV0aEJvb3RzdHJhcC5nZW5lcmF0ZWRUb2tl
bikgaWYgKGF1dGhCb290c3RyYXAucGVyc2lzdGVkR2VuZXJhdGVkVG9rZW4pIGxvZy5pbmZvKCJH
YXRld2F5IGF1dGggdG9rZW4gd2FzIG1pc3NpbmcuIEdlbmVyYXRlZCBhIG5ldyB0b2tlbiBhbmQg
c2F2ZWQgaXQgdG8gY29uZmlnIChnYXRld2F5LmF1dGgudG9rZW4pLiIpOwoJZWxzZSBsb2cud2Fy
bigiR2F0ZXdheSBhdXRoIHRva2VuIHdhcyBtaXNzaW5nLiBHZW5lcmF0ZWQgYSBydW50aW1lIHRv
a2VuIGZvciB0aGlzIHN0YXJ0dXAgd2l0aG91dCBjaGFuZ2luZyBjb25maWc7IHJlc3RhcnQgd2ls
bCBnZW5lcmF0ZSBhIGRpZmZlcmVudCB0b2tlbi4gUGVyc2lzdCBvbmUgd2l0aCBgb3BlbmNsYXcg
Y29uZmlnIHNldCBnYXRld2F5LmF1dGgubW9kZSB0b2tlbmAgYW5kIGBvcGVuY2xhdyBjb25maWcg
c2V0IGdhdGV3YXkuYXV0aC50b2tlbiA8dG9rZW4+YC4iKTsKCWNmZ0F0U3RhcnQgPSAoYXdhaXQg
YWN0aXZhdGVSdW50aW1lU2VjcmV0cyhjZmdBdFN0YXJ0LCB7CgkJcmVhc29uOiAic3RhcnR1cCIs
CgkJYWN0aXZhdGU6IHRydWUKCX0pKS5jb25maWc7Cgljb25zdCBkaWFnbm9zdGljc0VuYWJsZWQg
PSBpc0RpYWdub3N0aWNzRW5hYmxlZChjZmdBdFN0YXJ0KTsKCWlmIChkaWFnbm9zdGljc0VuYWJs
ZWQpIHN0YXJ0RGlhZ25vc3RpY0hlYXJ0YmVhdCgpOwoJc2V0R2F0ZXdheVNpZ3VzcjFSZXN0YXJ0
UG9saWN5KHsgYWxsb3dFeHRlcm5hbDogaXNSZXN0YXJ0RW5hYmxlZChjZmdBdFN0YXJ0KSB9KTsK
CXNldFByZVJlc3RhcnREZWZlcnJhbENoZWNrKCgpID0+IGdldFRvdGFsUXVldWVTaXplKCkgKyBn
ZXRUb3RhbFBlbmRpbmdSZXBsaWVzKCkgKyBnZXRBY3RpdmVFbWJlZGRlZFJ1bkNvdW50KCkpOwoJ
Y2ZnQXRTdGFydCA9IGF3YWl0IG1heWJlU2VlZENvbnRyb2xVaUFsbG93ZWRPcmlnaW5zQXRTdGFy
dHVwKHsKCQljb25maWc6IGNmZ0F0U3RhcnQsCgkJd3JpdGVDb25maWc6IHdyaXRlQ29uZmlnRmls
ZSwKCQlsb2cKCX0pOwoJaW5pdFN1YmFnZW50UmVnaXN0cnkoKTsKCWNvbnN0IGRlZmF1bHRBZ2Vu
dElkID0gcmVzb2x2ZURlZmF1bHRBZ2VudElkKGNmZ0F0U3RhcnQpOwoJY29uc3QgZGVmYXVsdFdv
cmtzcGFjZURpciA9IHJlc29sdmVBZ2VudFdvcmtzcGFjZURpcihjZmdBdFN0YXJ0LCBkZWZhdWx0
QWdlbnRJZCk7Cgljb25zdCBiYXNlTWV0aG9kcyA9IGxpc3RHYXRld2F5TWV0aG9kcygpOwoJY29u
c3QgZW1wdHlQbHVnaW5SZWdpc3RyeSA9IGNyZWF0ZUVtcHR5UGx1Z2luUmVnaXN0cnkoKTsKCWNv
bnN0IHsgcGx1Z2luUmVnaXN0cnksIGdhdGV3YXlNZXRob2RzOiBiYXNlR2F0ZXdheU1ldGhvZHMg
fSA9IG1pbmltYWxUZXN0R2F0ZXdheSA/IHsKCQlwbHVnaW5SZWdpc3RyeTogZW1wdHlQbHVnaW5S
ZWdpc3RyeSwKCQlnYXRld2F5TWV0aG9kczogYmFzZU1ldGhvZHMKCX0gOiBsb2FkR2F0ZXdheVBs
dWdpbnMoewoJCWNmZzogY2ZnQXRTdGFydCwKCQl3b3Jrc3BhY2VEaXI6IGRlZmF1bHRXb3Jrc3Bh
Y2VEaXIsCgkJbG9nLAoJCWNvcmVHYXRld2F5SGFuZGxlcnMsCgkJYmFzZU1ldGhvZHMKCX0pOwoJ
Y29uc3QgY2hhbm5lbExvZ3MgPSBPYmplY3QuZnJvbUVudHJpZXMobGlzdENoYW5uZWxQbHVnaW5z
KCkubWFwKChwbHVnaW4pID0+IFtwbHVnaW4uaWQsIGxvZ0NoYW5uZWxzLmNoaWxkKHBsdWdpbi5p
ZCldKSk7Cgljb25zdCBjaGFubmVsUnVudGltZUVudnMgPSBPYmplY3QuZnJvbUVudHJpZXMoT2Jq
ZWN0LmVudHJpZXMoY2hhbm5lbExvZ3MpLm1hcCgoW2lkLCBsb2dnZXJdKSA9PiBbaWQsIHJ1bnRp
bWVGb3JMb2dnZXIobG9nZ2VyKV0pKTsKCWNvbnN0IGNoYW5uZWxNZXRob2RzID0gbGlzdENoYW5u
ZWxQbHVnaW5zKCkuZmxhdE1hcCgocGx1Z2luKSA9PiBwbHVnaW4uZ2F0ZXdheU1ldGhvZHMgPz8g
W10pOwoJY29uc3QgZ2F0ZXdheU1ldGhvZHMgPSBBcnJheS5mcm9tKG5ldyBTZXQoWy4uLmJhc2VH
YXRld2F5TWV0aG9kcywgLi4uY2hhbm5lbE1ldGhvZHNdKSk7CglsZXQgcGx1Z2luU2VydmljZXMg
PSBudWxsOwoJY29uc3QgcnVudGltZUNvbmZpZyA9IGF3YWl0IHJlc29sdmVHYXRld2F5UnVudGlt
ZUNvbmZpZyh7CgkJY2ZnOiBjZmdBdFN0YXJ0LAoJCXBvcnQsCgkJYmluZDogb3B0cy5iaW5kLAoJ
CWhvc3Q6IG9wdHMuaG9zdCwKCQljb250cm9sVWlFbmFibGVkOiBvcHRzLmNvbnRyb2xVaUVuYWJs
ZWQsCgkJb3BlbkFpQ2hhdENvbXBsZXRpb25zRW5hYmxlZDogb3B0cy5vcGVuQWlDaGF0Q29tcGxl
dGlvbnNFbmFibGVkLAoJCW9wZW5SZXNwb25zZXNFbmFibGVkOiBvcHRzLm9wZW5SZXNwb25zZXNF
bmFibGVkLAoJCWF1dGg6IG9wdHMuYXV0aCwKCQl0YWlsc2NhbGU6IG9wdHMudGFpbHNjYWxlCgl9
KTsKCWNvbnN0IHsgYmluZEhvc3QsIGNvbnRyb2xVaUVuYWJsZWQsIG9wZW5BaUNoYXRDb21wbGV0
aW9uc0VuYWJsZWQsIG9wZW5BaUNoYXRDb21wbGV0aW9uc0NvbmZpZywgb3BlblJlc3BvbnNlc0Vu
YWJsZWQsIG9wZW5SZXNwb25zZXNDb25maWcsIHN0cmljdFRyYW5zcG9ydFNlY3VyaXR5SGVhZGVy
LCBjb250cm9sVWlCYXNlUGF0aCwgY29udHJvbFVpUm9vdDogY29udHJvbFVpUm9vdE92ZXJyaWRl
LCByZXNvbHZlZEF1dGgsIHRhaWxzY2FsZUNvbmZpZywgdGFpbHNjYWxlTW9kZSB9ID0gcnVudGlt
ZUNvbmZpZzsKCWxldCBob29rc0NvbmZpZyA9IHJ1bnRpbWVDb25maWcuaG9va3NDb25maWc7Cgls
ZXQgaG9va0NsaWVudElwQ29uZmlnID0gcmVzb2x2ZUhvb2tDbGllbnRJcENvbmZpZyhjZmdBdFN0
YXJ0KTsKCWNvbnN0IGNhbnZhc0hvc3RFbmFibGVkID0gcnVudGltZUNvbmZpZy5jYW52YXNIb3N0
RW5hYmxlZDsKCWNvbnN0IHJhdGVMaW1pdENvbmZpZyA9IGNmZ0F0U3RhcnQuZ2F0ZXdheT8uYXV0
aD8ucmF0ZUxpbWl0OwoJY29uc3QgeyByYXRlTGltaXRlcjogYXV0aFJhdGVMaW1pdGVyLCBicm93
c2VyUmF0ZUxpbWl0ZXI6IGJyb3dzZXJBdXRoUmF0ZUxpbWl0ZXIgfSA9IGNyZWF0ZUdhdGV3YXlB
dXRoUmF0ZUxpbWl0ZXJzKHJhdGVMaW1pdENvbmZpZyk7CglsZXQgY29udHJvbFVpUm9vdFN0YXRl
OwoJaWYgKGNvbnRyb2xVaVJvb3RPdmVycmlkZSkgewoJCWNvbnN0IHJlc29sdmVkT3ZlcnJpZGUg
PSByZXNvbHZlQ29udHJvbFVpUm9vdE92ZXJyaWRlU3luYyhjb250cm9sVWlSb290T3ZlcnJpZGUp
OwoJCWNvbnN0IHJlc29sdmVkT3ZlcnJpZGVQYXRoID0gcGF0aC5yZXNvbHZlKGNvbnRyb2xVaVJv
b3RPdmVycmlkZSk7CgkJY29udHJvbFVpUm9vdFN0YXRlID0gcmVzb2x2ZWRPdmVycmlkZSA/IHsK
CQkJa2luZDogInJlc29sdmVkIiwKCQkJcGF0aDogcmVzb2x2ZWRPdmVycmlkZQoJCX0gOiB7CgkJ
CWtpbmQ6ICJpbnZhbGlkIiwKCQkJcGF0aDogcmVzb2x2ZWRPdmVycmlkZVBhdGgKCQl9OwoJCWlm
ICghcmVzb2x2ZWRPdmVycmlkZSkgbG9nLndhcm4oYGdhdGV3YXk6IGNvbnRyb2xVaS5yb290IG5v
dCBmb3VuZCBhdCAke3Jlc29sdmVkT3ZlcnJpZGVQYXRofWApOwoJfSBlbHNlIGlmIChjb250cm9s
VWlFbmFibGVkKSB7CgkJbGV0IHJlc29sdmVkUm9vdCA9IHJlc29sdmVDb250cm9sVWlSb290U3lu
Yyh7CgkJCW1vZHVsZVVybDogaW1wb3J0Lm1ldGEudXJsLAoJCQlhcmd2MTogcHJvY2Vzcy5hcmd2
WzFdLAoJCQljd2Q6IHByb2Nlc3MuY3dkKCkKCQl9KTsKCQlpZiAoIXJlc29sdmVkUm9vdCkgewoJ
CQljb25zdCBlbnN1cmVSZXN1bHQgPSBhd2FpdCBlbnN1cmVDb250cm9sVWlBc3NldHNCdWlsdChn
YXRld2F5UnVudGltZSk7CgkJCWlmICghZW5zdXJlUmVzdWx0Lm9rICYmIGVuc3VyZVJlc3VsdC5t
ZXNzYWdlKSBsb2cud2FybihgZ2F0ZXdheTogJHtlbnN1cmVSZXN1bHQubWVzc2FnZX1gKTsKCQkJ
cmVzb2x2ZWRSb290ID0gcmVzb2x2ZUNvbnRyb2xVaVJvb3RTeW5jKHsKCQkJCW1vZHVsZVVybDog
aW1wb3J0Lm1ldGEudXJsLAoJCQkJYXJndjE6IHByb2Nlc3MuYXJndlsxXSwKCQkJCWN3ZDogcHJv
Y2Vzcy5jd2QoKQoJCQl9KTsKCQl9CgkJY29udHJvbFVpUm9vdFN0YXRlID0gcmVzb2x2ZWRSb290
ID8gewoJCQlraW5kOiBpc1BhY2thZ2VQcm92ZW5Db250cm9sVWlSb290U3luYyhyZXNvbHZlZFJv
b3QsIHsKCQkJCW1vZHVsZVVybDogaW1wb3J0Lm1ldGEudXJsLAoJCQkJYXJndjE6IHByb2Nlc3Mu
YXJndlsxXSwKCQkJCWN3ZDogcHJvY2Vzcy5jd2QoKQoJCQl9KSA/ICJidW5kbGVkIiA6ICJyZXNv
bHZlZCIsCgkJCXBhdGg6IHJlc29sdmVkUm9vdAoJCX0gOiB7IGtpbmQ6ICJtaXNzaW5nIiB9OwoJ
fQoJY29uc3Qgd2l6YXJkUnVubmVyID0gb3B0cy53aXphcmRSdW5uZXIgPz8gcnVuT25ib2FyZGlu
Z1dpemFyZDsKCWNvbnN0IHsgd2l6YXJkU2Vzc2lvbnMsIGZpbmRSdW5uaW5nV2l6YXJkLCBwdXJn
ZVdpemFyZFNlc3Npb24gfSA9IGNyZWF0ZVdpemFyZFNlc3Npb25UcmFja2VyKCk7Cgljb25zdCBk
ZXBzID0gY3JlYXRlRGVmYXVsdERlcHMoKTsKCWxldCBjYW52YXNIb3N0U2VydmVyID0gbnVsbDsK
CWNvbnN0IGdhdGV3YXlUbHMgPSBhd2FpdCBsb2FkR2F0ZXdheVRsc1J1bnRpbWUoY2ZnQXRTdGFy
dC5nYXRld2F5Py50bHMsIGxvZy5jaGlsZCgidGxzIikpOwoJaWYgKGNmZ0F0U3RhcnQuZ2F0ZXdh
eT8udGxzPy5lbmFibGVkICYmICFnYXRld2F5VGxzLmVuYWJsZWQpIHRocm93IG5ldyBFcnJvcihn
YXRld2F5VGxzLmVycm9yID8/ICJnYXRld2F5IHRsczogZmFpbGVkIHRvIGVuYWJsZSIpOwoJY29u
c3Qgc2VydmVyU3RhcnRlZEF0ID0gRGF0ZS5ub3coKTsKCWNvbnN0IGNoYW5uZWxNYW5hZ2VyID0g
Y3JlYXRlQ2hhbm5lbE1hbmFnZXIoewoJCWxvYWRDb25maWcsCgkJY2hhbm5lbExvZ3MsCgkJY2hh
bm5lbFJ1bnRpbWVFbnZzLAoJCWNoYW5uZWxSdW50aW1lOiBjcmVhdGVQbHVnaW5SdW50aW1lKCku
Y2hhbm5lbAoJfSk7Cgljb25zdCBnZXRSZWFkaW5lc3MgPSBjcmVhdGVSZWFkaW5lc3NDaGVja2Vy
KHsKCQljaGFubmVsTWFuYWdlciwKCQlzdGFydGVkQXQ6IHNlcnZlclN0YXJ0ZWRBdAoJfSk7Cglj
b25zdCB7IGNhbnZhc0hvc3QsIGh0dHBTZXJ2ZXIsIGh0dHBTZXJ2ZXJzLCBodHRwQmluZEhvc3Rz
LCB3c3MsIGNsaWVudHMsIGJyb2FkY2FzdCwgYnJvYWRjYXN0VG9Db25uSWRzLCBhZ2VudFJ1blNl
cSwgZGVkdXBlLCBjaGF0UnVuU3RhdGUsIGNoYXRSdW5CdWZmZXJzLCBjaGF0RGVsdGFTZW50QXQs
IGFkZENoYXRSdW4sIHJlbW92ZUNoYXRSdW4sIGNoYXRBYm9ydENvbnRyb2xsZXJzLCB0b29sRXZl
bnRSZWNpcGllbnRzIH0gPSBhd2FpdCBjcmVhdGVHYXRld2F5UnVudGltZVN0YXRlKHsKCQljZmc6
IGNmZ0F0U3RhcnQsCgkJYmluZEhvc3QsCgkJcG9ydCwKCQljb250cm9sVWlFbmFibGVkLAoJCWNv
bnRyb2xVaUJhc2VQYXRoLAoJCWNvbnRyb2xVaVJvb3Q6IGNvbnRyb2xVaVJvb3RTdGF0ZSwKCQlv
cGVuQWlDaGF0Q29tcGxldGlvbnNFbmFibGVkLAoJCW9wZW5BaUNoYXRDb21wbGV0aW9uc0NvbmZp
ZywKCQlvcGVuUmVzcG9uc2VzRW5hYmxlZCwKCQlvcGVuUmVzcG9uc2VzQ29uZmlnLAoJCXN0cmlj
dFRyYW5zcG9ydFNlY3VyaXR5SGVhZGVyLAoJCXJlc29sdmVkQXV0aCwKCQlyYXRlTGltaXRlcjog
YXV0aFJhdGVMaW1pdGVyLAoJCWdhdGV3YXlUbHMsCgkJaG9va3NDb25maWc6ICgpID0+IGhvb2tz
Q29uZmlnLAoJCWdldEhvb2tDbGllbnRJcENvbmZpZzogKCkgPT4gaG9va0NsaWVudElwQ29uZmln
LAoJCXBsdWdpblJlZ2lzdHJ5LAoJCWRlcHMsCgkJY2FudmFzUnVudGltZSwKCQljYW52YXNIb3N0
RW5hYmxlZCwKCQlhbGxvd0NhbnZhc0hvc3RJblRlc3RzOiBvcHRzLmFsbG93Q2FudmFzSG9zdElu
VGVzdHMsCgkJbG9nQ2FudmFzLAoJCWxvZywKCQlsb2dIb29rcywKCQlsb2dQbHVnaW5zLAoJCWdl
dFJlYWRpbmVzcwoJfSk7CglsZXQgYm9uam91clN0b3AgPSBudWxsOwoJY29uc3Qgbm9kZVJlZ2lz
dHJ5ID0gbmV3IE5vZGVSZWdpc3RyeSgpOwoJY29uc3Qgbm9kZVByZXNlbmNlVGltZXJzID0gLyog
QF9fUFVSRV9fICovIG5ldyBNYXAoKTsKCWNvbnN0IG5vZGVTdWJzY3JpcHRpb25zID0gY3JlYXRl
Tm9kZVN1YnNjcmlwdGlvbk1hbmFnZXIoKTsKCWNvbnN0IG5vZGVTZW5kRXZlbnQgPSAob3B0cykg
PT4gewoJCWNvbnN0IHBheWxvYWQgPSBzYWZlUGFyc2VKc29uKG9wdHMucGF5bG9hZEpTT04gPz8g
bnVsbCk7CgkJbm9kZVJlZ2lzdHJ5LnNlbmRFdmVudChvcHRzLm5vZGVJZCwgb3B0cy5ldmVudCwg
cGF5bG9hZCk7Cgl9OwoJY29uc3Qgbm9kZVNlbmRUb1Nlc3Npb24gPSAoc2Vzc2lvbktleSwgZXZl
bnQsIHBheWxvYWQpID0+IG5vZGVTdWJzY3JpcHRpb25zLnNlbmRUb1Nlc3Npb24oc2Vzc2lvbktl
eSwgZXZlbnQsIHBheWxvYWQsIG5vZGVTZW5kRXZlbnQpOwoJY29uc3Qgbm9kZVNlbmRUb0FsbFN1
YnNjcmliZWQgPSAoZXZlbnQsIHBheWxvYWQpID0+IG5vZGVTdWJzY3JpcHRpb25zLnNlbmRUb0Fs
bFN1YnNjcmliZWQoZXZlbnQsIHBheWxvYWQsIG5vZGVTZW5kRXZlbnQpOwoJY29uc3Qgbm9kZVN1
YnNjcmliZSA9IG5vZGVTdWJzY3JpcHRpb25zLnN1YnNjcmliZTsKCWNvbnN0IG5vZGVVbnN1YnNj
cmliZSA9IG5vZGVTdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlOwoJY29uc3Qgbm9kZVVuc3Vic2Ny
aWJlQWxsID0gbm9kZVN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmVBbGw7Cgljb25zdCBicm9hZGNh
c3RWb2ljZVdha2VDaGFuZ2VkID0gKHRyaWdnZXJzKSA9PiB7CgkJYnJvYWRjYXN0KCJ2b2ljZXdh
a2UuY2hhbmdlZCIsIHsgdHJpZ2dlcnMgfSwgeyBkcm9wSWZTbG93OiB0cnVlIH0pOwoJfTsKCWNv
bnN0IGhhc01vYmlsZU5vZGVDb25uZWN0ZWQgPSAoKSA9PiBoYXNDb25uZWN0ZWRNb2JpbGVOb2Rl
KG5vZGVSZWdpc3RyeSk7CglhcHBseUdhdGV3YXlMYW5lQ29uY3VycmVuY3koY2ZnQXRTdGFydCk7
CglsZXQgY3JvblN0YXRlID0gYnVpbGRHYXRld2F5Q3JvblNlcnZpY2UoewoJCWNmZzogY2ZnQXRT
dGFydCwKCQlkZXBzLAoJCWJyb2FkY2FzdAoJfSk7CglsZXQgeyBjcm9uLCBzdG9yZVBhdGg6IGNy
b25TdG9yZVBhdGggfSA9IGNyb25TdGF0ZTsKCWNvbnN0IHsgZ2V0UnVudGltZVNuYXBzaG90LCBz
dGFydENoYW5uZWxzLCBzdGFydENoYW5uZWwsIHN0b3BDaGFubmVsLCBtYXJrQ2hhbm5lbExvZ2dl
ZE91dCB9ID0gY2hhbm5lbE1hbmFnZXI7CglpZiAoIW1pbmltYWxUZXN0R2F0ZXdheSkgYm9uam91
clN0b3AgPSAoYXdhaXQgc3RhcnRHYXRld2F5RGlzY292ZXJ5KHsKCQltYWNoaW5lRGlzcGxheU5h
bWU6IGF3YWl0IGdldE1hY2hpbmVEaXNwbGF5TmFtZSgpLAoJCXBvcnQsCgkJZ2F0ZXdheVRsczog
Z2F0ZXdheVRscy5lbmFibGVkID8gewoJCQllbmFibGVkOiB0cnVlLAoJCQlmaW5nZXJwcmludFNo
YTI1NjogZ2F0ZXdheVRscy5maW5nZXJwcmludFNoYTI1NgoJCX0gOiB2b2lkIDAsCgkJd2lkZUFy
ZWFEaXNjb3ZlcnlFbmFibGVkOiBjZmdBdFN0YXJ0LmRpc2NvdmVyeT8ud2lkZUFyZWE/LmVuYWJs
ZWQgPT09IHRydWUsCgkJd2lkZUFyZWFEaXNjb3ZlcnlEb21haW46IGNmZ0F0U3RhcnQuZGlzY292
ZXJ5Py53aWRlQXJlYT8uZG9tYWluLAoJCXRhaWxzY2FsZU1vZGUsCgkJbWRuc01vZGU6IGNmZ0F0
U3RhcnQuZGlzY292ZXJ5Py5tZG5zPy5tb2RlLAoJCWxvZ0Rpc2NvdmVyeQoJfSkpLmJvbmpvdXJT
dG9wOwoJaWYgKCFtaW5pbWFsVGVzdEdhdGV3YXkpIHsKCQlzZXRTa2lsbHNSZW1vdGVSZWdpc3Ry
eShub2RlUmVnaXN0cnkpOwoJCXByaW1lUmVtb3RlU2tpbGxzQ2FjaGUoKTsKCX0KCWxldCBza2ls
bHNSZWZyZXNoVGltZXIgPSBudWxsOwoJY29uc3Qgc2tpbGxzUmVmcmVzaERlbGF5TXMgPSAzZTQ7
Cgljb25zdCBza2lsbHNDaGFuZ2VVbnN1YiA9IG1pbmltYWxUZXN0R2F0ZXdheSA/ICgpID0+IHt9
IDogcmVnaXN0ZXJTa2lsbHNDaGFuZ2VMaXN0ZW5lcigoZXZlbnQpID0+IHsKCQlpZiAoZXZlbnQu
cmVhc29uID09PSAicmVtb3RlLW5vZGUiKSByZXR1cm47CgkJaWYgKHNraWxsc1JlZnJlc2hUaW1l
cikgY2xlYXJUaW1lb3V0KHNraWxsc1JlZnJlc2hUaW1lcik7CgkJc2tpbGxzUmVmcmVzaFRpbWVy
ID0gc2V0VGltZW91dCgoKSA9PiB7CgkJCXNraWxsc1JlZnJlc2hUaW1lciA9IG51bGw7CgkJCXJl
ZnJlc2hSZW1vdGVCaW5zRm9yQ29ubmVjdGVkTm9kZXMobG9hZENvbmZpZygpKTsKCQl9LCBza2ls
bHNSZWZyZXNoRGVsYXlNcyk7Cgl9KTsKCWNvbnN0IG5vb3BJbnRlcnZhbCA9ICgpID0+IHNldElu
dGVydmFsKCgpID0+IHt9LCAxIDw8IDMwKTsKCWxldCB0aWNrSW50ZXJ2YWwgPSBub29wSW50ZXJ2
YWwoKTsKCWxldCBoZWFsdGhJbnRlcnZhbCA9IG5vb3BJbnRlcnZhbCgpOwoJbGV0IGRlZHVwZUNs
ZWFudXAgPSBub29wSW50ZXJ2YWwoKTsKCWxldCBtZWRpYUNsZWFudXAgPSBudWxsOwoJaWYgKCFt
aW5pbWFsVGVzdEdhdGV3YXkpICh7dGlja0ludGVydmFsLCBoZWFsdGhJbnRlcnZhbCwgZGVkdXBl
Q2xlYW51cCwgbWVkaWFDbGVhbnVwfSA9IHN0YXJ0R2F0ZXdheU1haW50ZW5hbmNlVGltZXJzKHsK
CQlicm9hZGNhc3QsCgkJbm9kZVNlbmRUb0FsbFN1YnNjcmliZWQsCgkJZ2V0UHJlc2VuY2VWZXJz
aW9uLAoJCWdldEhlYWx0aFZlcnNpb24sCgkJcmVmcmVzaEdhdGV3YXlIZWFsdGhTbmFwc2hvdCwK
CQlsb2dIZWFsdGgsCgkJZGVkdXBlLAoJCWNoYXRBYm9ydENvbnRyb2xsZXJzLAoJCWNoYXRSdW5T
dGF0ZSwKCQljaGF0UnVuQnVmZmVycywKCQljaGF0RGVsdGFTZW50QXQsCgkJcmVtb3ZlQ2hhdFJ1
biwKCQlhZ2VudFJ1blNlcSwKCQlub2RlU2VuZFRvU2Vzc2lvbiwKCQkuLi50eXBlb2YgY2ZnQXRT
dGFydC5tZWRpYT8udHRsSG91cnMgPT09ICJudW1iZXIiID8geyBtZWRpYUNsZWFudXBUdGxNczog
cmVzb2x2ZU1lZGlhQ2xlYW51cFR0bE1zKGNmZ0F0U3RhcnQubWVkaWEudHRsSG91cnMpIH0gOiB7
fQoJfSkpOwoJY29uc3QgYWdlbnRVbnN1YiA9IG1pbmltYWxUZXN0R2F0ZXdheSA/IG51bGwgOiBv
bkFnZW50RXZlbnQoY3JlYXRlQWdlbnRFdmVudEhhbmRsZXIoewoJCWJyb2FkY2FzdCwKCQlicm9h
ZGNhc3RUb0Nvbm5JZHMsCgkJbm9kZVNlbmRUb1Nlc3Npb24sCgkJYWdlbnRSdW5TZXEsCgkJY2hh
dFJ1blN0YXRlLAoJCXJlc29sdmVTZXNzaW9uS2V5Rm9yUnVuLAoJCWNsZWFyQWdlbnRSdW5Db250
ZXh0LAoJCXRvb2xFdmVudFJlY2lwaWVudHMKCX0pKTsKCWNvbnN0IGhlYXJ0YmVhdFVuc3ViID0g
bWluaW1hbFRlc3RHYXRld2F5ID8gbnVsbCA6IG9uSGVhcnRiZWF0RXZlbnQoKGV2dCkgPT4gewoJ
CWJyb2FkY2FzdCgiaGVhcnRiZWF0IiwgZXZ0LCB7IGRyb3BJZlNsb3c6IHRydWUgfSk7Cgl9KTsK
CWxldCBoZWFydGJlYXRSdW5uZXIgPSBtaW5pbWFsVGVzdEdhdGV3YXkgPyB7CgkJc3RvcDogKCkg
PT4ge30sCgkJdXBkYXRlQ29uZmlnOiAoKSA9PiB7fQoJfSA6IHN0YXJ0SGVhcnRiZWF0UnVubmVy
KHsgY2ZnOiBjZmdBdFN0YXJ0IH0pOwoJY29uc3QgaGVhbHRoQ2hlY2tNaW51dGVzID0gY2ZnQXRT
dGFydC5nYXRld2F5Py5jaGFubmVsSGVhbHRoQ2hlY2tNaW51dGVzOwoJbGV0IGNoYW5uZWxIZWFs
dGhNb25pdG9yID0gaGVhbHRoQ2hlY2tNaW51dGVzID09PSAwID8gbnVsbCA6IHN0YXJ0Q2hhbm5l
bEhlYWx0aE1vbml0b3IoewoJCWNoYW5uZWxNYW5hZ2VyLAoJCWNoZWNrSW50ZXJ2YWxNczogKGhl
YWx0aENoZWNrTWludXRlcyA/PyA1KSAqIDZlNAoJfSk7CglpZiAoIW1pbmltYWxUZXN0R2F0ZXdh
eSkgY3Jvbi5zdGFydCgpLmNhdGNoKChlcnIpID0+IGxvZ0Nyb24uZXJyb3IoYGZhaWxlZCB0byBz
dGFydDogJHtTdHJpbmcoZXJyKX1gKSk7CglpZiAoIW1pbmltYWxUZXN0R2F0ZXdheSkgKGFzeW5j
ICgpID0+IHsKCQljb25zdCB7IHJlY292ZXJQZW5kaW5nRGVsaXZlcmllcyB9ID0gYXdhaXQgaW1w
b3J0KCIuL2RlbGl2ZXJ5LXF1ZXVlLXVvdGZ3UkgzLmpzIikudGhlbigobikgPT4gbi5uKTsKCQlj
b25zdCB7IGRlbGl2ZXJPdXRib3VuZFBheWxvYWRzIH0gPSBhd2FpdCBpbXBvcnQoIi4vYXV0aC1w
cm9maWxlcy1EUmpxS0UzRy5qcyIpLnRoZW4oKG4pID0+IG4uV2EpOwoJCWF3YWl0IHJlY292ZXJQ
ZW5kaW5nRGVsaXZlcmllcyh7CgkJCWRlbGl2ZXI6IGRlbGl2ZXJPdXRib3VuZFBheWxvYWRzLAoJ
CQlsb2c6IGxvZy5jaGlsZCgiZGVsaXZlcnktcmVjb3ZlcnkiKSwKCQkJY2ZnOiBjZmdBdFN0YXJ0
CgkJfSk7Cgl9KSgpLmNhdGNoKChlcnIpID0+IGxvZy5lcnJvcihgRGVsaXZlcnkgcmVjb3Zlcnkg
ZmFpbGVkOiAke1N0cmluZyhlcnIpfWApKTsKCWNvbnN0IGV4ZWNBcHByb3ZhbE1hbmFnZXIgPSBu
ZXcgRXhlY0FwcHJvdmFsTWFuYWdlcigpOwoJY29uc3QgZXhlY0FwcHJvdmFsSGFuZGxlcnMgPSBj
cmVhdGVFeGVjQXBwcm92YWxIYW5kbGVycyhleGVjQXBwcm92YWxNYW5hZ2VyLCB7IGZvcndhcmRl
cjogY3JlYXRlRXhlY0FwcHJvdmFsRm9yd2FyZGVyKCkgfSk7Cgljb25zdCBzZWNyZXRzSGFuZGxl
cnMgPSBjcmVhdGVTZWNyZXRzSGFuZGxlcnMoewoJCXJlbG9hZFNlY3JldHM6IGFzeW5jICgpID0+
IHsKCQkJY29uc3QgYWN0aXZlID0gZ2V0QWN0aXZlU2VjcmV0c1J1bnRpbWVTbmFwc2hvdCgpOwoJ
CQlpZiAoIWFjdGl2ZSkgdGhyb3cgbmV3IEVycm9yKCJTZWNyZXRzIHJ1bnRpbWUgc25hcHNob3Qg
aXMgbm90IGFjdGl2ZS4iKTsKCQkJcmV0dXJuIHsgd2FybmluZ0NvdW50OiAoYXdhaXQgYWN0aXZh
dGVSdW50aW1lU2VjcmV0cyhhY3RpdmUuc291cmNlQ29uZmlnLCB7CgkJCQlyZWFzb246ICJyZWxv
YWQiLAoJCQkJYWN0aXZhdGU6IHRydWUKCQkJfSkpLndhcm5pbmdzLmxlbmd0aCB9OwoJCX0sCgkJ
cmVzb2x2ZVNlY3JldHM6IGFzeW5jICh7IGNvbW1hbmROYW1lLCB0YXJnZXRJZHMgfSkgPT4gewoJ
CQljb25zdCB7IGFzc2lnbm1lbnRzLCBkaWFnbm9zdGljcywgaW5hY3RpdmVSZWZQYXRocyB9ID0g
cmVzb2x2ZUNvbW1hbmRTZWNyZXRzRnJvbUFjdGl2ZVJ1bnRpbWVTbmFwc2hvdCh7CgkJCQljb21t
YW5kTmFtZSwKCQkJCXRhcmdldElkczogbmV3IFNldCh0YXJnZXRJZHMpCgkJCX0pOwoJCQlpZiAo
YXNzaWdubWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gewoJCQkJYXNzaWdubWVudHM6IFtdLAoJ
CQkJZGlhZ25vc3RpY3MsCgkJCQlpbmFjdGl2ZVJlZlBhdGhzCgkJCX07CgkJCXJldHVybiB7CgkJ
CQlhc3NpZ25tZW50cywKCQkJCWRpYWdub3N0aWNzLAoJCQkJaW5hY3RpdmVSZWZQYXRocwoJCQl9
OwoJCX0KCX0pOwoJY29uc3QgY2FudmFzSG9zdFNlcnZlclBvcnQgPSBjYW52YXNIb3N0U2VydmVy
Py5wb3J0OwoJY29uc3QgZ2F0ZXdheVJlcXVlc3RDb250ZXh0ID0gewoJCWRlcHMsCgkJY3JvbiwK
CQljcm9uU3RvcmVQYXRoLAoJCWV4ZWNBcHByb3ZhbE1hbmFnZXIsCgkJbG9hZEdhdGV3YXlNb2Rl
bENhdGFsb2csCgkJZ2V0SGVhbHRoQ2FjaGUsCgkJcmVmcmVzaEhlYWx0aFNuYXBzaG90OiByZWZy
ZXNoR2F0ZXdheUhlYWx0aFNuYXBzaG90LAoJCWxvZ0hlYWx0aCwKCQlsb2dHYXRld2F5OiBsb2cs
CgkJaW5jcmVtZW50UHJlc2VuY2VWZXJzaW9uLAoJCWdldEhlYWx0aFZlcnNpb24sCgkJYnJvYWRj
YXN0LAoJCWJyb2FkY2FzdFRvQ29ubklkcywKCQlub2RlU2VuZFRvU2Vzc2lvbiwKCQlub2RlU2Vu
ZFRvQWxsU3Vic2NyaWJlZCwKCQlub2RlU3Vic2NyaWJlLAoJCW5vZGVVbnN1YnNjcmliZSwKCQlu
b2RlVW5zdWJzY3JpYmVBbGwsCgkJaGFzQ29ubmVjdGVkTW9iaWxlTm9kZTogaGFzTW9iaWxlTm9k
ZUNvbm5lY3RlZCwKCQloYXNFeGVjQXBwcm92YWxDbGllbnRzOiAoKSA9PiB7CgkJCWZvciAoY29u
c3QgZ2F0ZXdheUNsaWVudCBvZiBjbGllbnRzKSB7CgkJCQljb25zdCBzY29wZXMgPSBBcnJheS5p
c0FycmF5KGdhdGV3YXlDbGllbnQuY29ubmVjdC5zY29wZXMpID8gZ2F0ZXdheUNsaWVudC5jb25u
ZWN0LnNjb3BlcyA6IFtdOwoJCQkJaWYgKHNjb3Blcy5pbmNsdWRlcygib3BlcmF0b3IuYWRtaW4i
KSB8fCBzY29wZXMuaW5jbHVkZXMoIm9wZXJhdG9yLmFwcHJvdmFscyIpKSByZXR1cm4gdHJ1ZTsK
CQkJfQoJCQlyZXR1cm4gZmFsc2U7CgkJfSwKCQlub2RlUmVnaXN0cnksCgkJYWdlbnRSdW5TZXEs
CgkJY2hhdEFib3J0Q29udHJvbGxlcnMsCgkJY2hhdEFib3J0ZWRSdW5zOiBjaGF0UnVuU3RhdGUu
YWJvcnRlZFJ1bnMsCgkJY2hhdFJ1bkJ1ZmZlcnM6IGNoYXRSdW5TdGF0ZS5idWZmZXJzLAoJCWNo
YXREZWx0YVNlbnRBdDogY2hhdFJ1blN0YXRlLmRlbHRhU2VudEF0LAoJCWFkZENoYXRSdW4sCgkJ
cmVtb3ZlQ2hhdFJ1biwKCQlyZWdpc3RlclRvb2xFdmVudFJlY2lwaWVudDogdG9vbEV2ZW50UmVj
aXBpZW50cy5hZGQsCgkJZGVkdXBlLAoJCXdpemFyZFNlc3Npb25zLAoJCWZpbmRSdW5uaW5nV2l6
YXJkLAoJCXB1cmdlV2l6YXJkU2Vzc2lvbiwKCQlnZXRSdW50aW1lU25hcHNob3QsCgkJc3RhcnRD
aGFubmVsLAoJCXN0b3BDaGFubmVsLAoJCW1hcmtDaGFubmVsTG9nZ2VkT3V0LAoJCXdpemFyZFJ1
bm5lciwKCQlicm9hZGNhc3RWb2ljZVdha2VDaGFuZ2VkCgl9OwoJc2V0RmFsbGJhY2tHYXRld2F5
Q29udGV4dChnYXRld2F5UmVxdWVzdENvbnRleHQpOwoJYXR0YWNoR2F0ZXdheVdzSGFuZGxlcnMo
ewoJCXdzcywKCQljbGllbnRzLAoJCXBvcnQsCgkJZ2F0ZXdheUhvc3Q6IGJpbmRIb3N0ID8/IHZv
aWQgMCwKCQljYW52YXNIb3N0RW5hYmxlZDogQm9vbGVhbihjYW52YXNIb3N0KSwKCQljYW52YXNI
b3N0U2VydmVyUG9ydCwKCQlyZXNvbHZlZEF1dGgsCgkJcmF0ZUxpbWl0ZXI6IGF1dGhSYXRlTGlt
aXRlciwKCQlicm93c2VyUmF0ZUxpbWl0ZXI6IGJyb3dzZXJBdXRoUmF0ZUxpbWl0ZXIsCgkJZ2F0
ZXdheU1ldGhvZHMsCgkJZXZlbnRzOiBHQVRFV0FZX0VWRU5UUywKCQlsb2dHYXRld2F5OiBsb2cs
CgkJbG9nSGVhbHRoLAoJCWxvZ1dzQ29udHJvbCwKCQlleHRyYUhhbmRsZXJzOiB7CgkJCS4uLnBs
dWdpblJlZ2lzdHJ5LmdhdGV3YXlIYW5kbGVycywKCQkJLi4uZXhlY0FwcHJvdmFsSGFuZGxlcnMs
CgkJCS4uLnNlY3JldHNIYW5kbGVycwoJCX0sCgkJYnJvYWRjYXN0LAoJCWNvbnRleHQ6IGdhdGV3
YXlSZXF1ZXN0Q29udGV4dAoJfSk7Cglsb2dHYXRld2F5U3RhcnR1cCh7CgkJY2ZnOiBjZmdBdFN0
YXJ0LAoJCWJpbmRIb3N0LAoJCWJpbmRIb3N0czogaHR0cEJpbmRIb3N0cywKCQlwb3J0LAoJCXRs
c0VuYWJsZWQ6IGdhdGV3YXlUbHMuZW5hYmxlZCwKCQlsb2csCgkJaXNOaXhNb2RlCgl9KTsKCWNv
bnN0IHN0b3BHYXRld2F5VXBkYXRlQ2hlY2sgPSBtaW5pbWFsVGVzdEdhdGV3YXkgPyAoKSA9PiB7
fSA6IHNjaGVkdWxlR2F0ZXdheVVwZGF0ZUNoZWNrKHsKCQljZmc6IGNmZ0F0U3RhcnQsCgkJbG9n
LAoJCWlzTml4TW9kZSwKCQlvblVwZGF0ZUF2YWlsYWJsZUNoYW5nZTogKHVwZGF0ZUF2YWlsYWJs
ZSkgPT4gewoJCQlicm9hZGNhc3QoR0FURVdBWV9FVkVOVF9VUERBVEVfQVZBSUxBQkxFLCB7IHVw
ZGF0ZUF2YWlsYWJsZSB9LCB7IGRyb3BJZlNsb3c6IHRydWUgfSk7CgkJfQoJfSk7Cgljb25zdCB0
YWlsc2NhbGVDbGVhbnVwID0gbWluaW1hbFRlc3RHYXRld2F5ID8gbnVsbCA6IGF3YWl0IHN0YXJ0
R2F0ZXdheVRhaWxzY2FsZUV4cG9zdXJlKHsKCQl0YWlsc2NhbGVNb2RlLAoJCXJlc2V0T25FeGl0
OiB0YWlsc2NhbGVDb25maWcucmVzZXRPbkV4aXQsCgkJcG9ydCwKCQljb250cm9sVWlCYXNlUGF0
aCwKCQlsb2dUYWlsc2NhbGUKCX0pOwoJbGV0IGJyb3dzZXJDb250cm9sID0gbnVsbDsKCWlmICgh
bWluaW1hbFRlc3RHYXRld2F5KSAoe2Jyb3dzZXJDb250cm9sLCBwbHVnaW5TZXJ2aWNlc30gPSBh
d2FpdCBzdGFydEdhdGV3YXlTaWRlY2Fycyh7CgkJY2ZnOiBjZmdBdFN0YXJ0LAoJCXBsdWdpblJl
Z2lzdHJ5LAoJCWRlZmF1bHRXb3Jrc3BhY2VEaXIsCgkJZGVwcywKCQlzdGFydENoYW5uZWxzLAoJ
CWxvZywKCQlsb2dIb29rcywKCQlsb2dDaGFubmVscywKCQlsb2dCcm93c2VyCgl9KSk7CglpZiAo
IW1pbmltYWxUZXN0R2F0ZXdheSkgewoJCWNvbnN0IGhvb2tSdW5uZXIgPSBnZXRHbG9iYWxIb29r
UnVubmVyKCk7CgkJaWYgKGhvb2tSdW5uZXI/Lmhhc0hvb2tzKCJnYXRld2F5X3N0YXJ0IikpIGhv
b2tSdW5uZXIucnVuR2F0ZXdheVN0YXJ0KHsgcG9ydCB9LCB7IHBvcnQgfSkuY2F0Y2goKGVycikg
PT4gewoJCQlsb2cud2FybihgZ2F0ZXdheV9zdGFydCBob29rIGZhaWxlZDogJHtTdHJpbmcoZXJy
KX1gKTsKCQl9KTsKCX0KCWNvbnN0IGNvbmZpZ1JlbG9hZGVyID0gbWluaW1hbFRlc3RHYXRld2F5
ID8geyBzdG9wOiBhc3luYyAoKSA9PiB7fSB9IDogKCgpID0+IHsKCQljb25zdCB7IGFwcGx5SG90
UmVsb2FkLCByZXF1ZXN0R2F0ZXdheVJlc3RhcnQgfSA9IGNyZWF0ZUdhdGV3YXlSZWxvYWRIYW5k
bGVycyh7CgkJCWRlcHMsCgkJCWJyb2FkY2FzdCwKCQkJZ2V0U3RhdGU6ICgpID0+ICh7CgkJCQlo
b29rc0NvbmZpZywKCQkJCWhvb2tDbGllbnRJcENvbmZpZywKCQkJCWhlYXJ0YmVhdFJ1bm5lciwK
CQkJCWNyb25TdGF0ZSwKCQkJCWJyb3dzZXJDb250cm9sLAoJCQkJY2hhbm5lbEhlYWx0aE1vbml0
b3IKCQkJfSksCgkJCXNldFN0YXRlOiAobmV4dFN0YXRlKSA9PiB7CgkJCQlob29rc0NvbmZpZyA9
IG5leHRTdGF0ZS5ob29rc0NvbmZpZzsKCQkJCWhvb2tDbGllbnRJcENvbmZpZyA9IG5leHRTdGF0
ZS5ob29rQ2xpZW50SXBDb25maWc7CgkJCQloZWFydGJlYXRSdW5uZXIgPSBuZXh0U3RhdGUuaGVh
cnRiZWF0UnVubmVyOwoJCQkJY3JvblN0YXRlID0gbmV4dFN0YXRlLmNyb25TdGF0ZTsKCQkJCWNy
b24gPSBjcm9uU3RhdGUuY3JvbjsKCQkJCWNyb25TdG9yZVBhdGggPSBjcm9uU3RhdGUuc3RvcmVQ
YXRoOwoJCQkJYnJvd3NlckNvbnRyb2wgPSBuZXh0U3RhdGUuYnJvd3NlckNvbnRyb2w7CgkJCQlj
aGFubmVsSGVhbHRoTW9uaXRvciA9IG5leHRTdGF0ZS5jaGFubmVsSGVhbHRoTW9uaXRvcjsKCQkJ
fSwKCQkJc3RhcnRDaGFubmVsLAoJCQlzdG9wQ2hhbm5lbCwKCQkJbG9nSG9va3MsCgkJCWxvZ0Jy
b3dzZXIsCgkJCWxvZ0NoYW5uZWxzLAoJCQlsb2dDcm9uLAoJCQlsb2dSZWxvYWQsCgkJCWNyZWF0
ZUhlYWx0aE1vbml0b3I6IChjaGVja0ludGVydmFsTXMpID0+IHN0YXJ0Q2hhbm5lbEhlYWx0aE1v
bml0b3IoewoJCQkJY2hhbm5lbE1hbmFnZXIsCgkJCQljaGVja0ludGVydmFsTXMKCQkJfSkKCQl9
KTsKCQlyZXR1cm4gc3RhcnRHYXRld2F5Q29uZmlnUmVsb2FkZXIoewoJCQlpbml0aWFsQ29uZmln
OiBjZmdBdFN0YXJ0LAoJCQlyZWFkU25hcHNob3Q6IHJlYWRDb25maWdGaWxlU25hcHNob3QsCgkJ
CW9uSG90UmVsb2FkOiBhc3luYyAocGxhbiwgbmV4dENvbmZpZykgPT4gewoJCQkJY29uc3QgcHJl
dmlvdXNTbmFwc2hvdCA9IGdldEFjdGl2ZVNlY3JldHNSdW50aW1lU25hcHNob3QoKTsKCQkJCWNv
bnN0IHByZXBhcmVkID0gYXdhaXQgYWN0aXZhdGVSdW50aW1lU2VjcmV0cyhuZXh0Q29uZmlnLCB7
CgkJCQkJcmVhc29uOiAicmVsb2FkIiwKCQkJCQlhY3RpdmF0ZTogdHJ1ZQoJCQkJfSk7CgkJCQl0
cnkgewoJCQkJCWF3YWl0IGFwcGx5SG90UmVsb2FkKHBsYW4sIHByZXBhcmVkLmNvbmZpZyk7CgkJ
CQl9IGNhdGNoIChlcnIpIHsKCQkJCQlpZiAocHJldmlvdXNTbmFwc2hvdCkgYWN0aXZhdGVTZWNy
ZXRzUnVudGltZVNuYXBzaG90KHByZXZpb3VzU25hcHNob3QpOwoJCQkJCWVsc2UgY2xlYXJTZWNy
ZXRzUnVudGltZVNuYXBzaG90KCk7CgkJCQkJdGhyb3cgZXJyOwoJCQkJfQoJCQl9LAoJCQlvblJl
c3RhcnQ6IGFzeW5jIChwbGFuLCBuZXh0Q29uZmlnKSA9PiB7CgkJCQlhd2FpdCBhY3RpdmF0ZVJ1
bnRpbWVTZWNyZXRzKG5leHRDb25maWcsIHsKCQkJCQlyZWFzb246ICJyZXN0YXJ0LWNoZWNrIiwK
CQkJCQlhY3RpdmF0ZTogZmFsc2UKCQkJCX0pOwoJCQkJcmVxdWVzdEdhdGV3YXlSZXN0YXJ0KHBs
YW4sIG5leHRDb25maWcpOwoJCQl9LAoJCQlsb2c6IHsKCQkJCWluZm86IChtc2cpID0+IGxvZ1Jl
bG9hZC5pbmZvKG1zZyksCgkJCQl3YXJuOiAobXNnKSA9PiBsb2dSZWxvYWQud2Fybihtc2cpLAoJ
CQkJZXJyb3I6IChtc2cpID0+IGxvZ1JlbG9hZC5lcnJvcihtc2cpCgkJCX0sCgkJCXdhdGNoUGF0
aDogQ09ORklHX1BBVEgKCQl9KTsKCX0pKCk7Cgljb25zdCBjbG9zZSA9IGNyZWF0ZUdhdGV3YXlD
bG9zZUhhbmRsZXIoewoJCWJvbmpvdXJTdG9wLAoJCXRhaWxzY2FsZUNsZWFudXAsCgkJY2FudmFz
SG9zdCwKCQljYW52YXNIb3N0U2VydmVyLAoJCXN0b3BDaGFubmVsLAoJCXBsdWdpblNlcnZpY2Vz
LAoJCWNyb24sCgkJaGVhcnRiZWF0UnVubmVyLAoJCXVwZGF0ZUNoZWNrU3RvcDogc3RvcEdhdGV3
YXlVcGRhdGVDaGVjaywKCQlub2RlUHJlc2VuY2VUaW1lcnMsCgkJYnJvYWRjYXN0LAoJCXRpY2tJ
bnRlcnZhbCwKCQloZWFsdGhJbnRlcnZhbCwKCQlkZWR1cGVDbGVhbnVwLAoJCW1lZGlhQ2xlYW51
cCwKCQlhZ2VudFVuc3ViLAoJCWhlYXJ0YmVhdFVuc3ViLAoJCWNoYXRSdW5TdGF0ZSwKCQljbGll
bnRzLAoJCWNvbmZpZ1JlbG9hZGVyLAoJCWJyb3dzZXJDb250cm9sLAoJCXdzcywKCQlodHRwU2Vy
dmVyLAoJCWh0dHBTZXJ2ZXJzCgl9KTsKCXJldHVybiB7IGNsb3NlOiBhc3luYyAob3B0cykgPT4g
ewoJCWF3YWl0IHJ1bkdsb2JhbEdhdGV3YXlTdG9wU2FmZWx5KHsKCQkJZXZlbnQ6IHsgcmVhc29u
OiBvcHRzPy5yZWFzb24gPz8gImdhdGV3YXkgc3RvcHBpbmciIH0sCgkJCWN0eDogeyBwb3J0IH0s
CgkJCW9uRXJyb3I6IChlcnIpID0+IGxvZy53YXJuKGBnYXRld2F5X3N0b3AgaG9vayBmYWlsZWQ6
ICR7U3RyaW5nKGVycil9YCkKCQl9KTsKCQlpZiAoZGlhZ25vc3RpY3NFbmFibGVkKSBzdG9wRGlh
Z25vc3RpY0hlYXJ0YmVhdCgpOwoJCWlmIChza2lsbHNSZWZyZXNoVGltZXIpIHsKCQkJY2xlYXJU
aW1lb3V0KHNraWxsc1JlZnJlc2hUaW1lcik7CgkJCXNraWxsc1JlZnJlc2hUaW1lciA9IG51bGw7
CgkJfQoJCXNraWxsc0NoYW5nZVVuc3ViKCk7CgkJYXV0aFJhdGVMaW1pdGVyPy5kaXNwb3NlKCk7
CgkJYnJvd3NlckF1dGhSYXRlTGltaXRlci5kaXNwb3NlKCk7CgkJY2hhbm5lbEhlYWx0aE1vbml0
b3I/LnN0b3AoKTsKCQljbGVhclNlY3JldHNSdW50aW1lU25hcHNob3QoKTsKCQlhd2FpdCBjbG9z
ZShvcHRzKTsKCX0gfTsKfQovLyNlbmRyZWdpb24KLy8jcmVnaW9uIHNyYy9jbGkvZ2F0ZXdheS1j
bGkvZGV2LnRzCmNvbnN0IERFVl9JREVOVElUWV9OQU1FID0gIkMzLVBPIjsKY29uc3QgREVWX0lE
RU5USVRZX1RIRU1FID0gInByb3RvY29sIGRyb2lkIjsKY29uc3QgREVWX0lERU5USVRZX0VNT0pJ
ID0gIvCfpJYiOwpjb25zdCBERVZfQUdFTlRfV09SS1NQQUNFX1NVRkZJWCA9ICJkZXYiOwphc3lu
YyBmdW5jdGlvbiBsb2FkRGV2VGVtcGxhdGUobmFtZSwgZmFsbGJhY2spIHsKCXRyeSB7CgkJY29u
c3QgdGVtcGxhdGVEaXIgPSBhd2FpdCByZXNvbHZlV29ya3NwYWNlVGVtcGxhdGVEaXIoKTsKCQlj
b25zdCByYXcgPSBhd2FpdCBmcy5wcm9taXNlcy5yZWFkRmlsZShwYXRoLmpvaW4odGVtcGxhdGVE
aXIsIG5hbWUpLCAidXRmLTgiKTsKCQlpZiAoIXJhdy5zdGFydHNXaXRoKCItLS0iKSkgcmV0dXJu
IHJhdzsKCQljb25zdCBlbmRJbmRleCA9IHJhdy5pbmRleE9mKCJcbi0tLSIsIDMpOwoJCWlmIChl
bmRJbmRleCA9PT0gLTEpIHJldHVybiByYXc7CgkJcmV0dXJuIHJhdy5zbGljZShlbmRJbmRleCAr
IDQpLnJlcGxhY2UoL15ccysvLCAiIik7Cgl9IGNhdGNoIHsKCQlyZXR1cm4gZmFsbGJhY2s7Cgl9
Cn0KY29uc3QgcmVzb2x2ZURldldvcmtzcGFjZURpciA9IChlbnYgPSBwcm9jZXNzLmVudikgPT4g
ewoJY29uc3QgYmFzZURpciA9IHJlc29sdmVEZWZhdWx0QWdlbnRXb3Jrc3BhY2VEaXIoZW52LCBv
cy5ob21lZGlyKTsKCWlmIChlbnYuT1BFTkNMQVdfUFJPRklMRT8udHJpbSgpLnRvTG93ZXJDYXNl
KCkgPT09ICJkZXYiKSByZXR1cm4gYmFzZURpcjsKCXJldHVybiBgJHtiYXNlRGlyfS0ke0RFVl9B
R0VOVF9XT1JLU1BBQ0VfU1VGRklYfWA7Cn07CmFzeW5jIGZ1bmN0aW9uIHdyaXRlRmlsZUlmTWlz
c2luZyhmaWxlUGF0aCwgY29udGVudCkgewoJdHJ5IHsKCQlhd2FpdCBmcy5wcm9taXNlcy53cml0
ZUZpbGUoZmlsZVBhdGgsIGNvbnRlbnQsIHsKCQkJZW5jb2Rpbmc6ICJ1dGYtOCIsCgkJCWZsYWc6
ICJ3eCIKCQl9KTsKCX0gY2F0Y2ggKGVycikgewoJCWlmIChlcnIuY29kZSAhPT0gIkVFWElTVCIp
IHRocm93IGVycjsKCX0KfQphc3luYyBmdW5jdGlvbiBlbnN1cmVEZXZXb3Jrc3BhY2UoZGlyKSB7
Cgljb25zdCByZXNvbHZlZERpciA9IHJlc29sdmVVc2VyUGF0aChkaXIpOwoJYXdhaXQgZnMucHJv
bWlzZXMubWtkaXIocmVzb2x2ZWREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pOwoJY29uc3QgW2Fn
ZW50cywgc291bCwgdG9vbHMsIGlkZW50aXR5LCB1c2VyXSA9IGF3YWl0IFByb21pc2UuYWxsKFsK
CQlsb2FkRGV2VGVtcGxhdGUoIkFHRU5UUy5kZXYubWQiLCBgIyBBR0VOVFMubWQgLSBPcGVuQ2xh
dyBEZXYgV29ya3NwYWNlXG5cbkRlZmF1bHQgZGV2IHdvcmtzcGFjZSBmb3Igb3BlbmNsYXcgZ2F0
ZXdheSAtLWRldi5cbmApLAoJCWxvYWREZXZUZW1wbGF0ZSgiU09VTC5kZXYubWQiLCBgIyBTT1VM
Lm1kIC0gRGV2IFBlcnNvbmFcblxuUHJvdG9jb2wgZHJvaWQgZm9yIGRlYnVnZ2luZyBhbmQgb3Bl
cmF0aW9ucy5cbmApLAoJCWxvYWREZXZUZW1wbGF0ZSgiVE9PTFMuZGV2Lm1kIiwgYCMgVE9PTFMu
bWQgLSBVc2VyIFRvb2wgTm90ZXMgKGVkaXRhYmxlKVxuXG5BZGQgeW91ciBsb2NhbCB0b29sIG5v
dGVzIGhlcmUuXG5gKSwKCQlsb2FkRGV2VGVtcGxhdGUoIklERU5USVRZLmRldi5tZCIsIGAjIElE
RU5USVRZLm1kIC0gQWdlbnQgSWRlbnRpdHlcblxuLSBOYW1lOiAke0RFVl9JREVOVElUWV9OQU1F
fVxuLSBDcmVhdHVyZTogcHJvdG9jb2wgZHJvaWRcbi0gVmliZTogJHtERVZfSURFTlRJVFlfVEhF
TUV9XG4tIEVtb2ppOiAke0RFVl9JREVOVElUWV9FTU9KSX1cbmApLAoJCWxvYWREZXZUZW1wbGF0
ZSgiVVNFUi5kZXYubWQiLCBgIyBVU0VSLm1kIC0gVXNlciBQcm9maWxlXG5cbi0gTmFtZTpcbi0g
UHJlZmVycmVkIGFkZHJlc3M6XG4tIE5vdGVzOlxuYCkKCV0pOwoJYXdhaXQgd3JpdGVGaWxlSWZN
aXNzaW5nKHBhdGguam9pbihyZXNvbHZlZERpciwgIkFHRU5UUy5tZCIpLCBhZ2VudHMpOwoJYXdh
aXQgd3JpdGVGaWxlSWZNaXNzaW5nKHBhdGguam9pbihyZXNvbHZlZERpciwgIlNPVUwubWQiKSwg
c291bCk7Cglhd2FpdCB3cml0ZUZpbGVJZk1pc3NpbmcocGF0aC5qb2luKHJlc29sdmVkRGlyLCAi
VE9PTFMubWQiKSwgdG9vbHMpOwoJYXdhaXQgd3JpdGVGaWxlSWZNaXNzaW5nKHBhdGguam9pbihy
ZXNvbHZlZERpciwgIklERU5USVRZLm1kIiksIGlkZW50aXR5KTsKCWF3YWl0IHdyaXRlRmlsZUlm
TWlzc2luZyhwYXRoLmpvaW4ocmVzb2x2ZWREaXIsICJVU0VSLm1kIiksIHVzZXIpOwp9CmFzeW5j
IGZ1bmN0aW9uIGVuc3VyZURldkdhdGV3YXlDb25maWcob3B0cykgewoJY29uc3Qgd29ya3NwYWNl
ID0gcmVzb2x2ZURldldvcmtzcGFjZURpcigpOwoJaWYgKG9wdHMucmVzZXQpIGF3YWl0IGhhbmRs
ZVJlc2V0KCJmdWxsIiwgd29ya3NwYWNlLCBkZWZhdWx0UnVudGltZSk7Cgljb25zdCBjb25maWdQ
YXRoID0gY3JlYXRlQ29uZmlnSU8oKS5jb25maWdQYXRoOwoJY29uc3QgY29uZmlnRXhpc3RzID0g
ZnMuZXhpc3RzU3luYyhjb25maWdQYXRoKTsKCWlmICghb3B0cy5yZXNldCAmJiBjb25maWdFeGlz
dHMpIHJldHVybjsKCWF3YWl0IHdyaXRlQ29uZmlnRmlsZSh7CgkJZ2F0ZXdheTogewoJCQltb2Rl
OiAibG9jYWwiLAoJCQliaW5kOiAibG9vcGJhY2siCgkJfSwKCQlhZ2VudHM6IHsKCQkJZGVmYXVs
dHM6IHsKCQkJCXdvcmtzcGFjZSwKCQkJCXNraXBCb290c3RyYXA6IHRydWUKCQkJfSwKCQkJbGlz
dDogW3sKCQkJCWlkOiAiZGV2IiwKCQkJCWRlZmF1bHQ6IHRydWUsCgkJCQl3b3Jrc3BhY2UsCgkJ
CQlpZGVudGl0eTogewoJCQkJCW5hbWU6IERFVl9JREVOVElUWV9OQU1FLAoJCQkJCXRoZW1lOiBE
RVZfSURFTlRJVFlfVEhFTUUsCgkJCQkJZW1vamk6IERFVl9JREVOVElUWV9FTU9KSQoJCQkJfQoJ
CQl9XQoJCX0KCX0pOwoJYXdhaXQgZW5zdXJlRGV2V29ya3NwYWNlKHdvcmtzcGFjZSk7CglkZWZh
dWx0UnVudGltZS5sb2coYERldiBjb25maWcgcmVhZHk6ICR7c2hvcnRlbkhvbWVQYXRoKGNvbmZp
Z1BhdGgpfWApOwoJZGVmYXVsdFJ1bnRpbWUubG9nKGBEZXYgd29ya3NwYWNlIHJlYWR5OiAke3No
b3J0ZW5Ib21lUGF0aChyZXNvbHZlVXNlclBhdGgod29ya3NwYWNlKSl9YCk7Cn0KLy8jZW5kcmVn
aW9uCi8vI3JlZ2lvbiBzcmMvaW5mcmEvc3VwZXJ2aXNvci1tYXJrZXJzLnRzCmNvbnN0IFNVUEVS
VklTT1JfSElOVFMgPSB7CglsYXVuY2hkOiBbCgkJIkxBVU5DSF9KT0JfTEFCRUwiLAoJCSJMQVVO
Q0hfSk9CX05BTUUiLAoJCSJYUENfU0VSVklDRV9OQU1FIiwKCQkiT1BFTkNMQVdfTEFVTkNIRF9M
QUJFTCIKCV0sCglzeXN0ZW1kOiBbCgkJIk9QRU5DTEFXX1NZU1RFTURfVU5JVCIsCgkJIklOVk9D
QVRJT05fSUQiLAoJCSJTWVNURU1EX0VYRUNfUElEIiwKCQkiSk9VUk5BTF9TVFJFQU0iCgldLAoJ
c2NodGFza3M6IFsiT1BFTkNMQVdfV0lORE9XU19UQVNLX05BTUUiXQp9OwpbCgkuLi5TVVBFUlZJ
U09SX0hJTlRTLmxhdW5jaGQsCgkuLi5TVVBFUlZJU09SX0hJTlRTLnN5c3RlbWQsCgkuLi5TVVBF
UlZJU09SX0hJTlRTLnNjaHRhc2tzCl07CmZ1bmN0aW9uIGhhc0FueUhpbnQoZW52LCBrZXlzKSB7
CglyZXR1cm4ga2V5cy5zb21lKChrZXkpID0+IHsKCQljb25zdCB2YWx1ZSA9IGVudltrZXldOwoJ
CXJldHVybiB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciICYmIHZhbHVlLnRyaW0oKS5sZW5ndGgg
PiAwOwoJfSk7Cn0KZnVuY3Rpb24gZGV0ZWN0UmVzcGF3blN1cGVydmlzb3IoZW52ID0gcHJvY2Vz
cy5lbnYsIHBsYXRmb3JtID0gcHJvY2Vzcy5wbGF0Zm9ybSkgewoJaWYgKHBsYXRmb3JtID09PSAi
ZGFyd2luIikgcmV0dXJuIGhhc0FueUhpbnQoZW52LCBTVVBFUlZJU09SX0hJTlRTLmxhdW5jaGQp
ID8gImxhdW5jaGQiIDogbnVsbDsKCWlmIChwbGF0Zm9ybSA9PT0gImxpbnV4IikgcmV0dXJuIGhh
c0FueUhpbnQoZW52LCBTVVBFUlZJU09SX0hJTlRTLnN5c3RlbWQpID8gInN5c3RlbWQiIDogbnVs
bDsKCWlmIChwbGF0Zm9ybSA9PT0gIndpbjMyIikgewoJCWlmIChoYXNBbnlIaW50KGVudiwgU1VQ
RVJWSVNPUl9ISU5UUy5zY2h0YXNrcykpIHJldHVybiAic2NodGFza3MiOwoJCWNvbnN0IG1hcmtl
ciA9IGVudi5PUEVOQ0xBV19TRVJWSUNFX01BUktFUj8udHJpbSgpOwoJCWNvbnN0IHNlcnZpY2VL
aW5kID0gZW52Lk9QRU5DTEFXX1NFUlZJQ0VfS0lORD8udHJpbSgpOwoJCXJldHVybiBtYXJrZXIg
JiYgc2VydmljZUtpbmQgPT09ICJnYXRld2F5IiA/ICJzY2h0YXNrcyIgOiBudWxsOwoJfQoJcmV0
dXJuIG51bGw7Cn0KLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvaW5mcmEvcHJvY2Vzcy1yZXNw
YXduLnRzCmZ1bmN0aW9uIGlzVHJ1dGh5KHZhbHVlKSB7CglpZiAoIXZhbHVlKSByZXR1cm4gZmFs
c2U7Cgljb25zdCBub3JtYWxpemVkID0gdmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7CglyZXR1
cm4gbm9ybWFsaXplZCA9PT0gIjEiIHx8IG5vcm1hbGl6ZWQgPT09ICJ0cnVlIiB8fCBub3JtYWxp
emVkID09PSAieWVzIiB8fCBub3JtYWxpemVkID09PSAib24iOwp9Ci8qKgoqIEF0dGVtcHQgdG8g
cmVzdGFydCB0aGlzIHByb2Nlc3Mgd2l0aCBhIGZyZXNoIFBJRC4KKiAtIHN1cGVydmlzZWQgZW52
aXJvbm1lbnRzIChsYXVuY2hkL3N5c3RlbWQvc2NodGFza3MpOiBjYWxsZXIgc2hvdWxkIGV4aXQg
YW5kIGxldCBzdXBlcnZpc29yIHJlc3RhcnQKKiAtIE9QRU5DTEFXX05PX1JFU1BBV049MTogY2Fs
bGVyIHNob3VsZCBrZWVwIGluLXByb2Nlc3MgcmVzdGFydCBiZWhhdmlvciAodGVzdHMvZGV2KQoq
IC0gb3RoZXJ3aXNlOiBzcGF3biBkZXRhY2hlZCBjaGlsZCB3aXRoIGN1cnJlbnQgYXJndi9leGVj
QXJndiwgdGhlbiBjYWxsZXIgZXhpdHMKKi8KZnVuY3Rpb24gcmVzdGFydEdhdGV3YXlQcm9jZXNz
V2l0aEZyZXNoUGlkKCkgewoJaWYgKGlzVHJ1dGh5KHByb2Nlc3MuZW52Lk9QRU5DTEFXX05PX1JF
U1BBV04pKSByZXR1cm4geyBtb2RlOiAiZGlzYWJsZWQiIH07Cgljb25zdCBzdXBlcnZpc29yID0g
ZGV0ZWN0UmVzcGF3blN1cGVydmlzb3IocHJvY2Vzcy5lbnYpOwoJaWYgKHN1cGVydmlzb3IpIHsK
CQlpZiAoc3VwZXJ2aXNvciA9PT0gImxhdW5jaGQiKSB7CgkJCWNvbnN0IGhhbmRvZmYgPSBzY2hl
ZHVsZURldGFjaGVkTGF1bmNoZFJlc3RhcnRIYW5kb2ZmKHsKCQkJCWVudjogcHJvY2Vzcy5lbnYs
CgkJCQltb2RlOiAic3RhcnQtYWZ0ZXItZXhpdCIsCgkJCQl3YWl0Rm9yUGlkOiBwcm9jZXNzLnBp
ZAoJCQl9KTsKCQkJaWYgKCFoYW5kb2ZmLm9rKSByZXR1cm4gewoJCQkJbW9kZTogInN1cGVydmlz
ZWQiLAoJCQkJZGV0YWlsOiBgbGF1bmNoZCBleGl0IGZhbGxiYWNrICgke2hhbmRvZmYuZGV0YWls
ID8/ICJyZXN0YXJ0IGhhbmRvZmYgZmFpbGVkIn0pYAoJCQl9OwoJCQlyZXR1cm4gewoJCQkJbW9k
ZTogInN1cGVydmlzZWQiLAoJCQkJZGV0YWlsOiBgbGF1bmNoZCByZXN0YXJ0IGhhbmRvZmYgcGlk
ICR7aGFuZG9mZi5waWQgPz8gInVua25vd24ifWAKCQkJfTsKCQl9CgkJaWYgKHN1cGVydmlzb3Ig
PT09ICJzY2h0YXNrcyIpIHsKCQkJY29uc3QgcmVzdGFydCA9IHRyaWdnZXJPcGVuQ2xhd1Jlc3Rh
cnQoKTsKCQkJaWYgKCFyZXN0YXJ0Lm9rKSByZXR1cm4gewoJCQkJbW9kZTogImZhaWxlZCIsCgkJ
CQlkZXRhaWw6IHJlc3RhcnQuZGV0YWlsID8/IGAke3Jlc3RhcnQubWV0aG9kfSByZXN0YXJ0IGZh
aWxlZGAKCQkJfTsKCQl9CgkJcmV0dXJuIHsgbW9kZTogInN1cGVydmlzZWQiIH07Cgl9CglpZiAo
cHJvY2Vzcy5wbGF0Zm9ybSA9PT0gIndpbjMyIikgcmV0dXJuIHsKCQltb2RlOiAiZGlzYWJsZWQi
LAoJCWRldGFpbDogIndpbjMyOiBkZXRhY2hlZCByZXNwYXduIHVuc3VwcG9ydGVkIHdpdGhvdXQg
U2NoZWR1bGVkIFRhc2sgbWFya2VycyIKCX07Cgl0cnkgewoJCWNvbnN0IGFyZ3MgPSBbLi4ucHJv
Y2Vzcy5leGVjQXJndiwgLi4ucHJvY2Vzcy5hcmd2LnNsaWNlKDEpXTsKCQljb25zdCBjaGlsZCA9
IHNwYXduKHByb2Nlc3MuZXhlY1BhdGgsIGFyZ3MsIHsKCQkJZW52OiBwcm9jZXNzLmVudiwKCQkJ
ZGV0YWNoZWQ6IHRydWUsCgkJCXN0ZGlvOiAiaW5oZXJpdCIKCQl9KTsKCQljaGlsZC51bnJlZigp
OwoJCXJldHVybiB7CgkJCW1vZGU6ICJzcGF3bmVkIiwKCQkJcGlkOiBjaGlsZC5waWQgPz8gdm9p
ZCAwCgkJfTsKCX0gY2F0Y2ggKGVycikgewoJCXJldHVybiB7CgkJCW1vZGU6ICJmYWlsZWQiLAoJ
CQlkZXRhaWw6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJy
KQoJCX07Cgl9Cn0KLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvcHJvY2Vzcy9yZXN0YXJ0LXJl
Y292ZXJ5LnRzCi8qKgoqIFJldHVybnMgYW4gaXRlcmF0aW9uIGhvb2sgZm9yIGluLXByb2Nlc3Mg
cmVzdGFydCBsb29wcy4KKiBUaGUgZmlyc3QgY2FsbCBpcyBjb25zaWRlcmVkIGluaXRpYWwgc3Rh
cnR1cCBhbmQgZG9lcyBub3RoaW5nLgoqIEVhY2ggc3Vic2VxdWVudCBjYWxsIHJlcHJlc2VudHMg
YSByZXN0YXJ0IGl0ZXJhdGlvbiBhbmQgaW52b2tlcyBgb25SZXN0YXJ0YC4KKi8KZnVuY3Rpb24g
Y3JlYXRlUmVzdGFydEl0ZXJhdGlvbkhvb2sob25SZXN0YXJ0KSB7CglsZXQgaXNGaXJzdEl0ZXJh
dGlvbiA9IHRydWU7CglyZXR1cm4gKCkgPT4gewoJCWlmIChpc0ZpcnN0SXRlcmF0aW9uKSB7CgkJ
CWlzRmlyc3RJdGVyYXRpb24gPSBmYWxzZTsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQlvblJlc3Rh
cnQoKTsKCQlyZXR1cm4gdHJ1ZTsKCX07Cn0KLy8jZW5kcmVnaW9uCi8vI3JlZ2lvbiBzcmMvY2xp
L2dhdGV3YXktY2xpL3J1bi1sb29wLnRzCmNvbnN0IGdhdGV3YXlMb2ckMSA9IGNyZWF0ZVN1YnN5
c3RlbUxvZ2dlcigiZ2F0ZXdheSIpOwphc3luYyBmdW5jdGlvbiBydW5HYXRld2F5TG9vcChwYXJh
bXMpIHsKCWxldCBsb2NrID0gYXdhaXQgYWNxdWlyZUdhdGV3YXlMb2NrKHsgcG9ydDogcGFyYW1z
LmxvY2tQb3J0IH0pOwoJbGV0IHNlcnZlciA9IG51bGw7CglsZXQgc2h1dHRpbmdEb3duID0gZmFs
c2U7CglsZXQgcmVzdGFydFJlc29sdmVyID0gbnVsbDsKCWNvbnN0IGNsZWFudXBTaWduYWxzID0g
KCkgPT4gewoJCXByb2Nlc3MucmVtb3ZlTGlzdGVuZXIoIlNJR1RFUk0iLCBvblNpZ3Rlcm0pOwoJ
CXByb2Nlc3MucmVtb3ZlTGlzdGVuZXIoIlNJR0lOVCIsIG9uU2lnaW50KTsKCQlwcm9jZXNzLnJl
bW92ZUxpc3RlbmVyKCJTSUdVU1IxIiwgb25TaWd1c3IxKTsKCX07Cgljb25zdCBleGl0UHJvY2Vz
cyA9IChjb2RlKSA9PiB7CgkJY2xlYW51cFNpZ25hbHMoKTsKCQlwYXJhbXMucnVudGltZS5leGl0
KGNvZGUpOwoJfTsKCWNvbnN0IHJlbGVhc2VMb2NrSWZIZWxkID0gYXN5bmMgKCkgPT4gewoJCWlm
ICghbG9jaykgcmV0dXJuIGZhbHNlOwoJCWF3YWl0IGxvY2sucmVsZWFzZSgpOwoJCWxvY2sgPSBu
dWxsOwoJCXJldHVybiB0cnVlOwoJfTsKCWNvbnN0IHJlYWNxdWlyZUxvY2tGb3JJblByb2Nlc3NS
ZXN0YXJ0ID0gYXN5bmMgKCkgPT4gewoJCXRyeSB7CgkJCWxvY2sgPSBhd2FpdCBhY3F1aXJlR2F0
ZXdheUxvY2soeyBwb3J0OiBwYXJhbXMubG9ja1BvcnQgfSk7CgkJCXJldHVybiB0cnVlOwoJCX0g
Y2F0Y2ggKGVycikgewoJCQlnYXRld2F5TG9nJDEuZXJyb3IoYGZhaWxlZCB0byByZWFjcXVpcmUg
Z2F0ZXdheSBsb2NrIGZvciBpbi1wcm9jZXNzIHJlc3RhcnQ6ICR7U3RyaW5nKGVycil9YCk7CgkJ
CWV4aXRQcm9jZXNzKDEpOwoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJfTsKCWNvbnN0IGhhbmRsZVJl
c3RhcnRBZnRlclNlcnZlckNsb3NlID0gYXN5bmMgKCkgPT4gewoJCWNvbnN0IGhhZExvY2sgPSBh
d2FpdCByZWxlYXNlTG9ja0lmSGVsZCgpOwoJCWNvbnN0IHJlc3Bhd24gPSByZXN0YXJ0R2F0ZXdh
eVByb2Nlc3NXaXRoRnJlc2hQaWQoKTsKCQlpZiAocmVzcGF3bi5tb2RlID09PSAic3Bhd25lZCIg
fHwgcmVzcGF3bi5tb2RlID09PSAic3VwZXJ2aXNlZCIpIHsKCQkJY29uc3QgbW9kZUxhYmVsID0g
cmVzcGF3bi5tb2RlID09PSAic3Bhd25lZCIgPyBgc3Bhd25lZCBwaWQgJHtyZXNwYXduLnBpZCA/
PyAidW5rbm93biJ9YCA6ICJzdXBlcnZpc29yIHJlc3RhcnQiOwoJCQlnYXRld2F5TG9nJDEuaW5m
byhgcmVzdGFydCBtb2RlOiBmdWxsIHByb2Nlc3MgcmVzdGFydCAoJHttb2RlTGFiZWx9KWApOwoJ
CQlleGl0UHJvY2VzcygwKTsKCQkJcmV0dXJuOwoJCX0KCQlpZiAocmVzcGF3bi5tb2RlID09PSAi
ZmFpbGVkIikgZ2F0ZXdheUxvZyQxLndhcm4oYGZ1bGwgcHJvY2VzcyByZXN0YXJ0IGZhaWxlZCAo
JHtyZXNwYXduLmRldGFpbCA/PyAidW5rbm93biBlcnJvciJ9KTsgZmFsbGluZyBiYWNrIHRvIGlu
LXByb2Nlc3MgcmVzdGFydGApOwoJCWVsc2UgZ2F0ZXdheUxvZyQxLmluZm8oYHJlc3RhcnQgbW9k
ZTogaW4tcHJvY2VzcyByZXN0YXJ0ICgke3Jlc3Bhd24uZGV0YWlsID8/ICJPUEVOQ0xBV19OT19S
RVNQQVdOIn0pYCk7CgkJaWYgKGhhZExvY2sgJiYgIWF3YWl0IHJlYWNxdWlyZUxvY2tGb3JJblBy
b2Nlc3NSZXN0YXJ0KCkpIHJldHVybjsKCQlzaHV0dGluZ0Rvd24gPSBmYWxzZTsKCQlyZXN0YXJ0
UmVzb2x2ZXI/LigpOwoJfTsKCWNvbnN0IGhhbmRsZVN0b3BBZnRlclNlcnZlckNsb3NlID0gYXN5
bmMgKCkgPT4gewoJCWF3YWl0IHJlbGVhc2VMb2NrSWZIZWxkKCk7CgkJZXhpdFByb2Nlc3MoMCk7
Cgl9OwoJY29uc3QgRFJBSU5fVElNRU9VVF9NUyA9IDllNDsKCWNvbnN0IFNIVVRET1dOX1RJTUVP
VVRfTVMgPSA1ZTM7Cgljb25zdCByZXF1ZXN0ID0gKGFjdGlvbiwgc2lnbmFsKSA9PiB7CgkJaWYg
KHNodXR0aW5nRG93bikgewoJCQlnYXRld2F5TG9nJDEuaW5mbyhgcmVjZWl2ZWQgJHtzaWduYWx9
IGR1cmluZyBzaHV0ZG93bjsgaWdub3JpbmdgKTsKCQkJcmV0dXJuOwoJCX0KCQlzaHV0dGluZ0Rv
d24gPSB0cnVlOwoJCWNvbnN0IGlzUmVzdGFydCA9IGFjdGlvbiA9PT0gInJlc3RhcnQiOwoJCWdh
dGV3YXlMb2ckMS5pbmZvKGByZWNlaXZlZCAke3NpZ25hbH07ICR7aXNSZXN0YXJ0ID8gInJlc3Rh
cnRpbmciIDogInNodXR0aW5nIGRvd24ifWApOwoJCWNvbnN0IGZvcmNlRXhpdE1zID0gaXNSZXN0
YXJ0ID8gRFJBSU5fVElNRU9VVF9NUyArIFNIVVRET1dOX1RJTUVPVVRfTVMgOiBTSFVURE9XTl9U
SU1FT1VUX01TOwoJCWNvbnN0IGZvcmNlRXhpdFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7CgkJ
CWdhdGV3YXlMb2ckMS5lcnJvcigic2h1dGRvd24gdGltZWQgb3V0OyBleGl0aW5nIHdpdGhvdXQg
ZnVsbCBjbGVhbnVwIik7CgkJCWV4aXRQcm9jZXNzKGlzUmVzdGFydCA/IDEgOiAwKTsKCQl9LCBm
b3JjZUV4aXRNcyk7CgkJKGFzeW5jICgpID0+IHsKCQkJdHJ5IHsKCQkJCWlmIChpc1Jlc3RhcnQp
IHsKCQkJCQltYXJrR2F0ZXdheURyYWluaW5nKCk7CgkJCQkJY29uc3QgYWN0aXZlVGFza3MgPSBn
ZXRBY3RpdmVUYXNrQ291bnQoKTsKCQkJCQljb25zdCBhY3RpdmVSdW5zID0gZ2V0QWN0aXZlRW1i
ZWRkZWRSdW5Db3VudCgpOwoJCQkJCWlmIChhY3RpdmVSdW5zID4gMCkgYWJvcnRFbWJlZGRlZFBp
UnVuKHZvaWQgMCwgeyBtb2RlOiAiY29tcGFjdGluZyIgfSk7CgkJCQkJaWYgKGFjdGl2ZVRhc2tz
ID4gMCB8fCBhY3RpdmVSdW5zID4gMCkgewoJCQkJCQlnYXRld2F5TG9nJDEuaW5mbyhgZHJhaW5p
bmcgJHthY3RpdmVUYXNrc30gYWN0aXZlIHRhc2socykgYW5kICR7YWN0aXZlUnVuc30gYWN0aXZl
IGVtYmVkZGVkIHJ1bihzKSBiZWZvcmUgcmVzdGFydCAodGltZW91dCAke0RSQUlOX1RJTUVPVVRf
TVN9bXMpYCk7CgkJCQkJCWNvbnN0IFt0YXNrc0RyYWluLCBydW5zRHJhaW5dID0gYXdhaXQgUHJv
bWlzZS5hbGwoW2FjdGl2ZVRhc2tzID4gMCA/IHdhaXRGb3JBY3RpdmVUYXNrcyhEUkFJTl9USU1F
T1VUX01TKSA6IFByb21pc2UucmVzb2x2ZSh7IGRyYWluZWQ6IHRydWUgfSksIGFjdGl2ZVJ1bnMg
PiAwID8gd2FpdEZvckFjdGl2ZUVtYmVkZGVkUnVucyhEUkFJTl9USU1FT1VUX01TKSA6IFByb21p
c2UucmVzb2x2ZSh7IGRyYWluZWQ6IHRydWUgfSldKTsKCQkJCQkJaWYgKHRhc2tzRHJhaW4uZHJh
aW5lZCAmJiBydW5zRHJhaW4uZHJhaW5lZCkgZ2F0ZXdheUxvZyQxLmluZm8oImFsbCBhY3RpdmUg
d29yayBkcmFpbmVkIik7CgkJCQkJCWVsc2UgewoJCQkJCQkJZ2F0ZXdheUxvZyQxLndhcm4oImRy
YWluIHRpbWVvdXQgcmVhY2hlZDsgcHJvY2VlZGluZyB3aXRoIHJlc3RhcnQiKTsKCQkJCQkJCWFi
b3J0RW1iZWRkZWRQaVJ1bih2b2lkIDAsIHsgbW9kZTogImFsbCIgfSk7CgkJCQkJCX0KCQkJCQl9
CgkJCQl9CgkJCQlhd2FpdCBzZXJ2ZXI/LmNsb3NlKHsKCQkJCQlyZWFzb246IGlzUmVzdGFydCA/
ICJnYXRld2F5IHJlc3RhcnRpbmciIDogImdhdGV3YXkgc3RvcHBpbmciLAoJCQkJCXJlc3RhcnRF
eHBlY3RlZE1zOiBpc1Jlc3RhcnQgPyAxNTAwIDogbnVsbAoJCQkJfSk7CgkJCX0gY2F0Y2ggKGVy
cikgewoJCQkJZ2F0ZXdheUxvZyQxLmVycm9yKGBzaHV0ZG93biBlcnJvcjogJHtTdHJpbmcoZXJy
KX1gKTsKCQkJfSBmaW5hbGx5IHsKCQkJCWNsZWFyVGltZW91dChmb3JjZUV4aXRUaW1lcik7CgkJ
CQlzZXJ2ZXIgPSBudWxsOwoJCQkJaWYgKGlzUmVzdGFydCkgYXdhaXQgaGFuZGxlUmVzdGFydEFm
dGVyU2VydmVyQ2xvc2UoKTsKCQkJCWVsc2UgYXdhaXQgaGFuZGxlU3RvcEFmdGVyU2VydmVyQ2xv
c2UoKTsKCQkJfQoJCX0pKCk7Cgl9OwoJY29uc3Qgb25TaWd0ZXJtID0gKCkgPT4gewoJCWdhdGV3
YXlMb2ckMS5pbmZvKCJzaWduYWwgU0lHVEVSTSByZWNlaXZlZCIpOwoJCXJlcXVlc3QoInN0b3Ai
LCAiU0lHVEVSTSIpOwoJfTsKCWNvbnN0IG9uU2lnaW50ID0gKCkgPT4gewoJCWdhdGV3YXlMb2ck
MS5pbmZvKCJzaWduYWwgU0lHSU5UIHJlY2VpdmVkIik7CgkJcmVxdWVzdCgic3RvcCIsICJTSUdJ
TlQiKTsKCX07Cgljb25zdCBvblNpZ3VzcjEgPSAoKSA9PiB7CgkJZ2F0ZXdheUxvZyQxLmluZm8o
InNpZ25hbCBTSUdVU1IxIHJlY2VpdmVkIik7CgkJaWYgKCFjb25zdW1lR2F0ZXdheVNpZ3VzcjFS
ZXN0YXJ0QXV0aG9yaXphdGlvbigpICYmICFpc0dhdGV3YXlTaWd1c3IxUmVzdGFydEV4dGVybmFs
bHlBbGxvd2VkKCkpIHsKCQkJZ2F0ZXdheUxvZyQxLndhcm4oIlNJR1VTUjEgcmVzdGFydCBpZ25v
cmVkIChub3QgYXV0aG9yaXplZDsgY29tbWFuZHMucmVzdGFydD1mYWxzZSBvciB1c2UgZ2F0ZXdh
eSB0b29sKS4iKTsKCQkJcmV0dXJuOwoJCX0KCQltYXJrR2F0ZXdheVNpZ3VzcjFSZXN0YXJ0SGFu
ZGxlZCgpOwoJCXJlcXVlc3QoInJlc3RhcnQiLCAiU0lHVVNSMSIpOwoJfTsKCXByb2Nlc3Mub24o
IlNJR1RFUk0iLCBvblNpZ3Rlcm0pOwoJcHJvY2Vzcy5vbigiU0lHSU5UIiwgb25TaWdpbnQpOwoJ
cHJvY2Vzcy5vbigiU0lHVVNSMSIsIG9uU2lndXNyMSk7Cgl0cnkgewoJCWNvbnN0IG9uSXRlcmF0
aW9uID0gY3JlYXRlUmVzdGFydEl0ZXJhdGlvbkhvb2soKCkgPT4gewoJCQlyZXNldEFsbExhbmVz
KCk7CgkJfSk7CgkJbGV0IGlzRmlyc3RTdGFydCA9IHRydWU7CgkJd2hpbGUgKHRydWUpIHsKCQkJ
b25JdGVyYXRpb24oKTsKCQkJdHJ5IHsKCQkJCXNlcnZlciA9IGF3YWl0IHBhcmFtcy5zdGFydCgp
OwoJCQkJaXNGaXJzdFN0YXJ0ID0gZmFsc2U7CgkJCX0gY2F0Y2ggKGVycikgewoJCQkJaWYgKGlz
Rmlyc3RTdGFydCkgdGhyb3cgZXJyOwoJCQkJc2VydmVyID0gbnVsbDsKCQkJCWF3YWl0IHJlbGVh
c2VMb2NrSWZIZWxkKCk7CgkJCQljb25zdCBlcnJNc2cgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/
IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7CgkJCQljb25zdCBlcnJTdGFjayA9IGVyciBpbnN0
YW5jZW9mIEVycm9yICYmIGVyci5zdGFjayA/IGBcbiR7ZXJyLnN0YWNrfWAgOiAiIjsKCQkJCWdh
dGV3YXlMb2ckMS5lcnJvcihgZ2F0ZXdheSBzdGFydHVwIGZhaWxlZDogJHtlcnJNc2d9LiBQcm9j
ZXNzIHdpbGwgc3RheSBhbGl2ZTsgZml4IHRoZSBpc3N1ZSBhbmQgcmVzdGFydC4ke2VyclN0YWNr
fWApOwoJCQl9CgkJCWF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CgkJCQlyZXN0YXJ0
UmVzb2x2ZXIgPSByZXNvbHZlOwoJCQl9KTsKCQl9Cgl9IGZpbmFsbHkgewoJCWF3YWl0IHJlbGVh
c2VMb2NrSWZIZWxkKCk7CgkJY2xlYW51cFNpZ25hbHMoKTsKCX0KfQovLyNlbmRyZWdpb24KLy8j
cmVnaW9uIHNyYy9jbGkvZ2F0ZXdheS1jbGkvcnVuLnRzCmNvbnN0IGdhdGV3YXlMb2cgPSBjcmVh
dGVTdWJzeXN0ZW1Mb2dnZXIoImdhdGV3YXkiKTsKY29uc3QgR0FURVdBWV9SVU5fVkFMVUVfS0VZ
UyA9IFsKCSJwb3J0IiwKCSJiaW5kIiwKCSJ0b2tlbiIsCgkiYXV0aCIsCgkicGFzc3dvcmQiLAoJ
InBhc3N3b3JkRmlsZSIsCgkidGFpbHNjYWxlIiwKCSJ3c0xvZyIsCgkicmF3U3RyZWFtUGF0aCIK
XTsKY29uc3QgR0FURVdBWV9SVU5fQk9PTEVBTl9LRVlTID0gWwoJInRhaWxzY2FsZVJlc2V0T25F
eGl0IiwKCSJhbGxvd1VuY29uZmlndXJlZCIsCgkiZGV2IiwKCSJyZXNldCIsCgkiZm9yY2UiLAoJ
InZlcmJvc2UiLAoJImNsYXVkZUNsaUxvZ3MiLAoJImNvbXBhY3QiLAoJInJhd1N0cmVhbSIKXTsK
Y29uc3QgR0FURVdBWV9BVVRIX01PREVTID0gWwoJIm5vbmUiLAoJInRva2VuIiwKCSJwYXNzd29y
ZCIsCgkidHJ1c3RlZC1wcm94eSIKXTsKY29uc3QgR0FURVdBWV9UQUlMU0NBTEVfTU9ERVMgPSBb
Cgkib2ZmIiwKCSJzZXJ2ZSIsCgkiZnVubmVsIgpdOwpmdW5jdGlvbiB3YXJuSW5saW5lUGFzc3dv
cmRGbGFnKCkgewoJZGVmYXVsdFJ1bnRpbWUuZXJyb3IoIldhcm5pbmc6IC0tcGFzc3dvcmQgY2Fu
IGJlIGV4cG9zZWQgdmlhIHByb2Nlc3MgbGlzdGluZ3MuIFByZWZlciAtLXBhc3N3b3JkLWZpbGUg
b3IgT1BFTkNMQVdfR0FURVdBWV9QQVNTV09SRC4iKTsKfQpmdW5jdGlvbiByZXNvbHZlR2F0ZXdh
eVBhc3N3b3JkT3B0aW9uKG9wdHMpIHsKCWNvbnN0IGRpcmVjdCA9IHRvT3B0aW9uU3RyaW5nKG9w
dHMucGFzc3dvcmQpOwoJY29uc3QgZmlsZSA9IHRvT3B0aW9uU3RyaW5nKG9wdHMucGFzc3dvcmRG
aWxlKTsKCWlmIChkaXJlY3QgJiYgZmlsZSkgdGhyb3cgbmV3IEVycm9yKCJVc2UgZWl0aGVyIC0t
cGFzc3dvcmQgb3IgLS1wYXNzd29yZC1maWxlLiIpOwoJaWYgKGZpbGUpIHJldHVybiByZWFkU2Vj
cmV0RnJvbUZpbGUoZmlsZSwgIkdhdGV3YXkgcGFzc3dvcmQiKTsKCXJldHVybiBkaXJlY3Q7Cn0K
ZnVuY3Rpb24gcGFyc2VFbnVtT3B0aW9uKHJhdywgYWxsb3dlZCkgewoJaWYgKCFyYXcpIHJldHVy
biBudWxsOwoJcmV0dXJuIGFsbG93ZWQuaW5jbHVkZXMocmF3KSA/IHJhdyA6IG51bGw7Cn0KZnVu
Y3Rpb24gZm9ybWF0TW9kZUNob2ljZXMobW9kZXMpIHsKCXJldHVybiBtb2Rlcy5tYXAoKG1vZGUp
ID0+IGAiJHttb2RlfSJgKS5qb2luKCJ8Iik7Cn0KZnVuY3Rpb24gZm9ybWF0TW9kZUVycm9yTGlz
dChtb2RlcykgewoJY29uc3QgcXVvdGVkID0gbW9kZXMubWFwKChtb2RlKSA9PiBgIiR7bW9kZX0i
YCk7CglpZiAocXVvdGVkLmxlbmd0aCA9PT0gMCkgcmV0dXJuICIiOwoJaWYgKHF1b3RlZC5sZW5n
dGggPT09IDEpIHJldHVybiBxdW90ZWRbMF07CglpZiAocXVvdGVkLmxlbmd0aCA9PT0gMikgcmV0
dXJuIGAke3F1b3RlZFswXX0gb3IgJHtxdW90ZWRbMV19YDsKCXJldHVybiBgJHtxdW90ZWQuc2xp
Y2UoMCwgLTEpLmpvaW4oIiwgIil9LCBvciAke3F1b3RlZFtxdW90ZWQubGVuZ3RoIC0gMV19YDsK
fQpmdW5jdGlvbiByZXNvbHZlR2F0ZXdheVJ1bk9wdGlvbnMob3B0cywgY29tbWFuZCkgewoJY29u
c3QgcmVzb2x2ZWQgPSB7IC4uLm9wdHMgfTsKCWZvciAoY29uc3Qga2V5IG9mIEdBVEVXQVlfUlVO
X1ZBTFVFX0tFWVMpIHsKCQljb25zdCBpbmhlcml0ZWQgPSBpbmhlcml0T3B0aW9uRnJvbVBhcmVu
dChjb21tYW5kLCBrZXkpOwoJCWlmIChrZXkgPT09ICJ3c0xvZyIpIHsKCQkJcmVzb2x2ZWRba2V5
XSA9IGluaGVyaXRlZCA/PyByZXNvbHZlZFtrZXldOwoJCQljb250aW51ZTsKCQl9CgkJcmVzb2x2
ZWRba2V5XSA9IHJlc29sdmVkW2tleV0gPz8gaW5oZXJpdGVkOwoJfQoJZm9yIChjb25zdCBrZXkg
b2YgR0FURVdBWV9SVU5fQk9PTEVBTl9LRVlTKSB7CgkJY29uc3QgaW5oZXJpdGVkID0gaW5oZXJp
dE9wdGlvbkZyb21QYXJlbnQoY29tbWFuZCwga2V5KTsKCQlyZXNvbHZlZFtrZXldID0gQm9vbGVh
bihyZXNvbHZlZFtrZXldIHx8IGluaGVyaXRlZCk7Cgl9CglyZXR1cm4gcmVzb2x2ZWQ7Cn0KYXN5
bmMgZnVuY3Rpb24gcnVuR2F0ZXdheUNvbW1hbmQkMShvcHRzKSB7Cgljb25zdCBpc0RldlByb2Zp
bGUgPSBwcm9jZXNzLmVudi5PUEVOQ0xBV19QUk9GSUxFPy50cmltKCkudG9Mb3dlckNhc2UoKSA9
PT0gImRldiI7Cgljb25zdCBkZXZNb2RlID0gQm9vbGVhbihvcHRzLmRldikgfHwgaXNEZXZQcm9m
aWxlOwoJaWYgKG9wdHMucmVzZXQgJiYgIWRldk1vZGUpIHsKCQlkZWZhdWx0UnVudGltZS5lcnJv
cigiVXNlIC0tcmVzZXQgd2l0aCAtLWRldi4iKTsKCQlkZWZhdWx0UnVudGltZS5leGl0KDEpOwoJ
CXJldHVybjsKCX0KCXNldENvbnNvbGVUaW1lc3RhbXBQcmVmaXgodHJ1ZSk7CglzZXRWZXJib3Nl
KEJvb2xlYW4ob3B0cy52ZXJib3NlKSk7CglpZiAob3B0cy5jbGF1ZGVDbGlMb2dzKSB7CgkJc2V0
Q29uc29sZVN1YnN5c3RlbUZpbHRlcihbImFnZW50L2NsYXVkZS1jbGkiXSk7CgkJcHJvY2Vzcy5l
bnYuT1BFTkNMQVdfQ0xBVURFX0NMSV9MT0dfT1VUUFVUID0gIjEiOwoJfQoJY29uc3Qgd3NMb2dS
YXcgPSBvcHRzLmNvbXBhY3QgPyAiY29tcGFjdCIgOiBvcHRzLndzTG9nOwoJY29uc3Qgd3NMb2dT
dHlsZSA9IHdzTG9nUmF3ID09PSAiY29tcGFjdCIgPyAiY29tcGFjdCIgOiB3c0xvZ1JhdyA9PT0g
ImZ1bGwiID8gImZ1bGwiIDogImF1dG8iOwoJaWYgKHdzTG9nUmF3ICE9PSB2b2lkIDAgJiYgd3NM
b2dSYXcgIT09ICJhdXRvIiAmJiB3c0xvZ1JhdyAhPT0gImNvbXBhY3QiICYmIHdzTG9nUmF3ICE9
PSAiZnVsbCIpIHsKCQlkZWZhdWx0UnVudGltZS5lcnJvcigiSW52YWxpZCAtLXdzLWxvZyAodXNl
IFwiYXV0b1wiLCBcImZ1bGxcIiwgXCJjb21wYWN0XCIpIik7CgkJZGVmYXVsdFJ1bnRpbWUuZXhp
dCgxKTsKCX0KCXNldEdhdGV3YXlXc0xvZ1N0eWxlKHdzTG9nU3R5bGUpOwoJaWYgKG9wdHMucmF3
U3RyZWFtKSBwcm9jZXNzLmVudi5PUEVOQ0xBV19SQVdfU1RSRUFNID0gIjEiOwoJY29uc3QgcmF3
U3RyZWFtUGF0aCA9IHRvT3B0aW9uU3RyaW5nKG9wdHMucmF3U3RyZWFtUGF0aCk7CglpZiAocmF3
U3RyZWFtUGF0aCkgcHJvY2Vzcy5lbnYuT1BFTkNMQVdfUkFXX1NUUkVBTV9QQVRIID0gcmF3U3Ry
ZWFtUGF0aDsKCWlmIChkZXZNb2RlKSBhd2FpdCBlbnN1cmVEZXZHYXRld2F5Q29uZmlnKHsgcmVz
ZXQ6IEJvb2xlYW4ob3B0cy5yZXNldCkgfSk7Cgljb25zdCBjZmcgPSBsb2FkQ29uZmlnKCk7Cglj
b25zdCBwb3J0T3ZlcnJpZGUgPSBwYXJzZVBvcnQkMShvcHRzLnBvcnQpOwoJaWYgKG9wdHMucG9y
dCAhPT0gdm9pZCAwICYmIHBvcnRPdmVycmlkZSA9PT0gbnVsbCkgewoJCWRlZmF1bHRSdW50aW1l
LmVycm9yKCJJbnZhbGlkIHBvcnQiKTsKCQlkZWZhdWx0UnVudGltZS5leGl0KDEpOwoJfQoJY29u
c3QgcG9ydCA9IHBvcnRPdmVycmlkZSA/PyByZXNvbHZlR2F0ZXdheVBvcnQoY2ZnKTsKCWlmICgh
TnVtYmVyLmlzRmluaXRlKHBvcnQpIHx8IHBvcnQgPD0gMCkgewoJCWRlZmF1bHRSdW50aW1lLmVy
cm9yKCJJbnZhbGlkIHBvcnQiKTsKCQlkZWZhdWx0UnVudGltZS5leGl0KDEpOwoJfQoJY29uc3Qg
YmluZFJhdyA9IHRvT3B0aW9uU3RyaW5nKG9wdHMuYmluZCkgPz8gY2ZnLmdhdGV3YXk/LmJpbmQg
Pz8gImxvb3BiYWNrIjsKCWNvbnN0IGJpbmQgPSBiaW5kUmF3ID09PSAibG9vcGJhY2siIHx8IGJp
bmRSYXcgPT09ICJsYW4iIHx8IGJpbmRSYXcgPT09ICJhdXRvIiB8fCBiaW5kUmF3ID09PSAiY3Vz
dG9tIiB8fCBiaW5kUmF3ID09PSAidGFpbG5ldCIgPyBiaW5kUmF3IDogbnVsbDsKCWlmICghYmlu
ZCkgewoJCWRlZmF1bHRSdW50aW1lLmVycm9yKCJJbnZhbGlkIC0tYmluZCAodXNlIFwibG9vcGJh
Y2tcIiwgXCJsYW5cIiwgXCJ0YWlsbmV0XCIsIFwiYXV0b1wiLCBvciBcImN1c3RvbVwiKSIpOwoJ
CWRlZmF1bHRSdW50aW1lLmV4aXQoMSk7CgkJcmV0dXJuOwoJfQoJaWYgKHByb2Nlc3MuZW52Lk9Q
RU5DTEFXX1NFUlZJQ0VfTUFSS0VSPy50cmltKCkpIHsKCQljb25zdCBzdGFsZSA9IGNsZWFuU3Rh
bGVHYXRld2F5UHJvY2Vzc2VzU3luYyhwb3J0KTsKCQlpZiAoc3RhbGUubGVuZ3RoID4gMCkgZ2F0
ZXdheUxvZy5pbmZvKGBzZXJ2aWNlLW1vZGU6IGNsZWFyZWQgJHtzdGFsZS5sZW5ndGh9IHN0YWxl
IGdhdGV3YXkgcGlkKHMpIGJlZm9yZSBiaW5kIG9uIHBvcnQgJHtwb3J0fWApOwoJfQoJaWYgKG9w
dHMuZm9yY2UpIHRyeSB7CgkJY29uc3QgeyBraWxsZWQsIHdhaXRlZE1zLCBlc2NhbGF0ZWRUb1Np
Z2tpbGwgfSA9IGF3YWl0IGZvcmNlRnJlZVBvcnRBbmRXYWl0KHBvcnQsIHsKCQkJdGltZW91dE1z
OiAyZTMsCgkJCWludGVydmFsTXM6IDEwMCwKCQkJc2lndGVybVRpbWVvdXRNczogNzAwCgkJfSk7
CgkJaWYgKGtpbGxlZC5sZW5ndGggPT09IDApIGdhdGV3YXlMb2cuaW5mbyhgZm9yY2U6IG5vIGxp
c3RlbmVycyBvbiBwb3J0ICR7cG9ydH1gKTsKCQllbHNlIHsKCQkJZm9yIChjb25zdCBwcm9jIG9m
IGtpbGxlZCkgZ2F0ZXdheUxvZy5pbmZvKGBmb3JjZToga2lsbGVkIHBpZCAke3Byb2MucGlkfSR7
cHJvYy5jb21tYW5kID8gYCAoJHtwcm9jLmNvbW1hbmR9KWAgOiAiIn0gb24gcG9ydCAke3BvcnR9
YCk7CgkJCWlmIChlc2NhbGF0ZWRUb1NpZ2tpbGwpIGdhdGV3YXlMb2cuaW5mbyhgZm9yY2U6IGVz
Y2FsYXRlZCB0byBTSUdLSUxMIHdoaWxlIGZyZWVpbmcgcG9ydCAke3BvcnR9YCk7CgkJCWlmICh3
YWl0ZWRNcyA+IDApIGdhdGV3YXlMb2cuaW5mbyhgZm9yY2U6IHdhaXRlZCAke3dhaXRlZE1zfW1z
IGZvciBwb3J0ICR7cG9ydH0gdG8gZnJlZWApOwoJCX0KCQljb25zdCBiaW5kV2FpdE1zID0gYXdh
aXQgd2FpdEZvclBvcnRCaW5kYWJsZShwb3J0LCB7CgkJCXRpbWVvdXRNczogM2UzLAoJCQlpbnRl
cnZhbE1zOiAxNTAsCgkJCWhvc3Q6IGJpbmQgPT09ICJsb29wYmFjayIgPyAiMTI3LjAuMC4xIiA6
IGJpbmQgPT09ICJsYW4iID8gIjAuMC4wLjAiIDogYmluZCA9PT0gImN1c3RvbSIgPyB0b09wdGlv
blN0cmluZyhjZmcuZ2F0ZXdheT8uY3VzdG9tQmluZEhvc3QpIDogdm9pZCAwCgkJfSk7CgkJaWYg
KGJpbmRXYWl0TXMgPiAwKSBnYXRld2F5TG9nLmluZm8oYGZvcmNlOiB3YWl0ZWQgJHtiaW5kV2Fp
dE1zfW1zIGZvciBwb3J0ICR7cG9ydH0gdG8gYmVjb21lIGJpbmRhYmxlYCk7Cgl9IGNhdGNoIChl
cnIpIHsKCQlkZWZhdWx0UnVudGltZS5lcnJvcihgRm9yY2U6ICR7U3RyaW5nKGVycil9YCk7CgkJ
ZGVmYXVsdFJ1bnRpbWUuZXhpdCgxKTsKCQlyZXR1cm47Cgl9CglpZiAob3B0cy50b2tlbikgewoJ
CWNvbnN0IHRva2VuID0gdG9PcHRpb25TdHJpbmcob3B0cy50b2tlbik7CgkJaWYgKHRva2VuKSBw
cm9jZXNzLmVudi5PUEVOQ0xBV19HQVRFV0FZX1RPS0VOID0gdG9rZW47Cgl9Cgljb25zdCBhdXRo
TW9kZVJhdyA9IHRvT3B0aW9uU3RyaW5nKG9wdHMuYXV0aCk7Cgljb25zdCBhdXRoTW9kZSA9IHBh
cnNlRW51bU9wdGlvbihhdXRoTW9kZVJhdywgR0FURVdBWV9BVVRIX01PREVTKTsKCWlmIChhdXRo
TW9kZVJhdyAmJiAhYXV0aE1vZGUpIHsKCQlkZWZhdWx0UnVudGltZS5lcnJvcihgSW52YWxpZCAt
LWF1dGggKHVzZSAke2Zvcm1hdE1vZGVFcnJvckxpc3QoR0FURVdBWV9BVVRIX01PREVTKX0pYCk7
CgkJZGVmYXVsdFJ1bnRpbWUuZXhpdCgxKTsKCQlyZXR1cm47Cgl9Cgljb25zdCB0YWlsc2NhbGVS
YXcgPSB0b09wdGlvblN0cmluZyhvcHRzLnRhaWxzY2FsZSk7Cgljb25zdCB0YWlsc2NhbGVNb2Rl
ID0gcGFyc2VFbnVtT3B0aW9uKHRhaWxzY2FsZVJhdywgR0FURVdBWV9UQUlMU0NBTEVfTU9ERVMp
OwoJaWYgKHRhaWxzY2FsZVJhdyAmJiAhdGFpbHNjYWxlTW9kZSkgewoJCWRlZmF1bHRSdW50aW1l
LmVycm9yKGBJbnZhbGlkIC0tdGFpbHNjYWxlICh1c2UgJHtmb3JtYXRNb2RlRXJyb3JMaXN0KEdB
VEVXQVlfVEFJTFNDQUxFX01PREVTKX0pYCk7CgkJZGVmYXVsdFJ1bnRpbWUuZXhpdCgxKTsKCQly
ZXR1cm47Cgl9CglsZXQgcGFzc3dvcmRSYXc7Cgl0cnkgewoJCXBhc3N3b3JkUmF3ID0gcmVzb2x2
ZUdhdGV3YXlQYXNzd29yZE9wdGlvbihvcHRzKTsKCX0gY2F0Y2ggKGVycikgewoJCWRlZmF1bHRS
dW50aW1lLmVycm9yKGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmco
ZXJyKSk7CgkJZGVmYXVsdFJ1bnRpbWUuZXhpdCgxKTsKCQlyZXR1cm47Cgl9CglpZiAodG9PcHRp
b25TdHJpbmcob3B0cy5wYXNzd29yZCkpIHdhcm5JbmxpbmVQYXNzd29yZEZsYWcoKTsKCWNvbnN0
IHRva2VuUmF3ID0gdG9PcHRpb25TdHJpbmcob3B0cy50b2tlbik7Cgljb25zdCBzbmFwc2hvdCA9
IGF3YWl0IHJlYWRDb25maWdGaWxlU25hcHNob3QoKS5jYXRjaCgoKSA9PiBudWxsKTsKCWNvbnN0
IGNvbmZpZ0V4aXN0cyA9IHNuYXBzaG90Py5leGlzdHMgPz8gZnMuZXhpc3RzU3luYyhDT05GSUdf
UEFUSCk7Cgljb25zdCBjb25maWdBdWRpdFBhdGggPSBwYXRoLmpvaW4ocmVzb2x2ZVN0YXRlRGly
KHByb2Nlc3MuZW52KSwgImxvZ3MiLCAiY29uZmlnLWF1ZGl0Lmpzb25sIik7Cgljb25zdCBtb2Rl
ID0gY2ZnLmdhdGV3YXk/Lm1vZGU7CglpZiAoIW9wdHMuYWxsb3dVbmNvbmZpZ3VyZWQgJiYgbW9k
ZSAhPT0gImxvY2FsIikgewoJCWlmICghY29uZmlnRXhpc3RzKSBkZWZhdWx0UnVudGltZS5lcnJv
cihgTWlzc2luZyBjb25maWcuIFJ1biBcYCR7Zm9ybWF0Q2xpQ29tbWFuZCgib3BlbmNsYXcgc2V0
dXAiKX1cYCBvciBzZXQgZ2F0ZXdheS5tb2RlPWxvY2FsIChvciBwYXNzIC0tYWxsb3ctdW5jb25m
aWd1cmVkKS5gKTsKCQllbHNlIHsKCQkJZGVmYXVsdFJ1bnRpbWUuZXJyb3IoYEdhdGV3YXkgc3Rh
cnQgYmxvY2tlZDogc2V0IGdhdGV3YXkubW9kZT1sb2NhbCAoY3VycmVudDogJHttb2RlID8/ICJ1
bnNldCJ9KSBvciBwYXNzIC0tYWxsb3ctdW5jb25maWd1cmVkLmApOwoJCQlkZWZhdWx0UnVudGlt
ZS5lcnJvcihgQ29uZmlnIHdyaXRlIGF1ZGl0OiAke2NvbmZpZ0F1ZGl0UGF0aH1gKTsKCQl9CgkJ
ZGVmYXVsdFJ1bnRpbWUuZXhpdCgxKTsKCQlyZXR1cm47Cgl9Cgljb25zdCBtaXNrZXlzID0gZXh0
cmFjdEdhdGV3YXlNaXNrZXlzKHNuYXBzaG90Py5wYXJzZWQpOwoJY29uc3QgYXV0aE92ZXJyaWRl
ID0gYXV0aE1vZGUgfHwgcGFzc3dvcmRSYXcgfHwgdG9rZW5SYXcgfHwgYXV0aE1vZGVSYXcgPyB7
CgkJLi4uYXV0aE1vZGUgPyB7IG1vZGU6IGF1dGhNb2RlIH0gOiB7fSwKCQkuLi50b2tlblJhdyA/
IHsgdG9rZW46IHRva2VuUmF3IH0gOiB7fSwKCQkuLi5wYXNzd29yZFJhdyA/IHsgcGFzc3dvcmQ6
IHBhc3N3b3JkUmF3IH0gOiB7fQoJfSA6IHZvaWQgMDsKCWNvbnN0IHJlc29sdmVkQXV0aCA9IHJl
c29sdmVHYXRld2F5QXV0aCh7CgkJYXV0aENvbmZpZzogY2ZnLmdhdGV3YXk/LmF1dGgsCgkJYXV0
aE92ZXJyaWRlLAoJCWVudjogcHJvY2Vzcy5lbnYsCgkJdGFpbHNjYWxlTW9kZTogdGFpbHNjYWxl
TW9kZSA/PyBjZmcuZ2F0ZXdheT8udGFpbHNjYWxlPy5tb2RlID8/ICJvZmYiCgl9KTsKCWNvbnN0
IHJlc29sdmVkQXV0aE1vZGUgPSByZXNvbHZlZEF1dGgubW9kZTsKCWNvbnN0IHRva2VuVmFsdWUg
PSByZXNvbHZlZEF1dGgudG9rZW47Cgljb25zdCBwYXNzd29yZFZhbHVlID0gcmVzb2x2ZWRBdXRo
LnBhc3N3b3JkOwoJY29uc3QgaGFzVG9rZW4gPSB0eXBlb2YgdG9rZW5WYWx1ZSA9PT0gInN0cmlu
ZyIgJiYgdG9rZW5WYWx1ZS50cmltKCkubGVuZ3RoID4gMDsKCWNvbnN0IGhhc1Bhc3N3b3JkID0g
dHlwZW9mIHBhc3N3b3JkVmFsdWUgPT09ICJzdHJpbmciICYmIHBhc3N3b3JkVmFsdWUudHJpbSgp
Lmxlbmd0aCA+IDA7Cgljb25zdCB0b2tlbkNvbmZpZ3VyZWQgPSBoYXNUb2tlbiB8fCBoYXNDb25m
aWd1cmVkU2VjcmV0SW5wdXQoYXV0aE92ZXJyaWRlPy50b2tlbiA/PyBjZmcuZ2F0ZXdheT8uYXV0
aD8udG9rZW4sIGNmZy5zZWNyZXRzPy5kZWZhdWx0cyk7Cgljb25zdCBwYXNzd29yZENvbmZpZ3Vy
ZWQgPSBoYXNQYXNzd29yZCB8fCBoYXNDb25maWd1cmVkU2VjcmV0SW5wdXQoYXV0aE92ZXJyaWRl
Py5wYXNzd29yZCA/PyBjZmcuZ2F0ZXdheT8uYXV0aD8ucGFzc3dvcmQsIGNmZy5zZWNyZXRzPy5k
ZWZhdWx0cyk7Cgljb25zdCBoYXNTaGFyZWRTZWNyZXQgPSByZXNvbHZlZEF1dGhNb2RlID09PSAi
dG9rZW4iICYmIHRva2VuQ29uZmlndXJlZCB8fCByZXNvbHZlZEF1dGhNb2RlID09PSAicGFzc3dv
cmQiICYmIHBhc3N3b3JkQ29uZmlndXJlZDsKCWNvbnN0IGNhbkJvb3RzdHJhcFRva2VuID0gcmVz
b2x2ZWRBdXRoTW9kZSA9PT0gInRva2VuIiAmJiAhdG9rZW5Db25maWd1cmVkOwoJY29uc3QgYXV0
aEhpbnRzID0gW107CglpZiAobWlza2V5cy5oYXNHYXRld2F5VG9rZW4pIGF1dGhIaW50cy5wdXNo
KCJGb3VuZCBcImdhdGV3YXkudG9rZW5cIiBpbiBjb25maWcuIFVzZSBcImdhdGV3YXkuYXV0aC50
b2tlblwiIGluc3RlYWQuIik7CglpZiAobWlza2V5cy5oYXNSZW1vdGVUb2tlbikgYXV0aEhpbnRz
LnB1c2goIlwiZ2F0ZXdheS5yZW1vdGUudG9rZW5cIiBpcyBmb3IgcmVtb3RlIENMSSBjYWxsczsg
aXQgZG9lcyBub3QgZW5hYmxlIGxvY2FsIGdhdGV3YXkgYXV0aC4iKTsKCWlmIChyZXNvbHZlZEF1
dGhNb2RlID09PSAicGFzc3dvcmQiICYmICFwYXNzd29yZENvbmZpZ3VyZWQpIHsKCQlkZWZhdWx0
UnVudGltZS5lcnJvcihbCgkJCSJHYXRld2F5IGF1dGggaXMgc2V0IHRvIHBhc3N3b3JkLCBidXQg
bm8gcGFzc3dvcmQgaXMgY29uZmlndXJlZC4iLAoJCQkiU2V0IGdhdGV3YXkuYXV0aC5wYXNzd29y
ZCAob3IgT1BFTkNMQVdfR0FURVdBWV9QQVNTV09SRCksIG9yIHBhc3MgLS1wYXNzd29yZC4iLAoJ
CQkuLi5hdXRoSGludHMKCQldLmZpbHRlcihCb29sZWFuKS5qb2luKCJcbiIpKTsKCQlkZWZhdWx0
UnVudGltZS5leGl0KDEpOwoJCXJldHVybjsKCX0KCWlmIChyZXNvbHZlZEF1dGhNb2RlID09PSAi
bm9uZSIpIGdhdGV3YXlMb2cud2FybigiR2F0ZXdheSBhdXRoIG1vZGU9bm9uZSBleHBsaWNpdGx5
IGNvbmZpZ3VyZWQ7IGFsbCBnYXRld2F5IGNvbm5lY3Rpb25zIGFyZSB1bmF1dGhlbnRpY2F0ZWQu
Iik7CglpZiAoYmluZCAhPT0gImxvb3BiYWNrIiAmJiAhaGFzU2hhcmVkU2VjcmV0ICYmICFjYW5C
b290c3RyYXBUb2tlbiAmJiByZXNvbHZlZEF1dGhNb2RlICE9PSAidHJ1c3RlZC1wcm94eSIpIHsK
CQlkZWZhdWx0UnVudGltZS5lcnJvcihbCgkJCWBSZWZ1c2luZyB0byBiaW5kIGdhdGV3YXkgdG8g
JHtiaW5kfSB3aXRob3V0IGF1dGguYCwKCQkJIlNldCBnYXRld2F5LmF1dGgudG9rZW4vcGFzc3dv
cmQgKG9yIE9QRU5DTEFXX0dBVEVXQVlfVE9LRU4vT1BFTkNMQVdfR0FURVdBWV9QQVNTV09SRCkg
b3IgcGFzcyAtLXRva2VuLy0tcGFzc3dvcmQuIiwKCQkJLi4uYXV0aEhpbnRzCgkJXS5maWx0ZXIo
Qm9vbGVhbikuam9pbigiXG4iKSk7CgkJZGVmYXVsdFJ1bnRpbWUuZXhpdCgxKTsKCQlyZXR1cm47
Cgl9Cgljb25zdCB0YWlsc2NhbGVPdmVycmlkZSA9IHRhaWxzY2FsZU1vZGUgfHwgb3B0cy50YWls
c2NhbGVSZXNldE9uRXhpdCA/IHsKCQkuLi50YWlsc2NhbGVNb2RlID8geyBtb2RlOiB0YWlsc2Nh
bGVNb2RlIH0gOiB7fSwKCQkuLi5vcHRzLnRhaWxzY2FsZVJlc2V0T25FeGl0ID8geyByZXNldE9u
RXhpdDogdHJ1ZSB9IDoge30KCX0gOiB2b2lkIDA7Cgl0cnkgewoJCWF3YWl0IHJ1bkdhdGV3YXlM
b29wKHsKCQkJcnVudGltZTogZGVmYXVsdFJ1bnRpbWUsCgkJCWxvY2tQb3J0OiBwb3J0LAoJCQlz
dGFydDogYXN5bmMgKCkgPT4gYXdhaXQgc3RhcnRHYXRld2F5U2VydmVyKHBvcnQsIHsKCQkJCWJp
bmQsCgkJCQlhdXRoOiBhdXRoT3ZlcnJpZGUsCgkJCQl0YWlsc2NhbGU6IHRhaWxzY2FsZU92ZXJy
aWRlCgkJCX0pCgkJfSk7Cgl9IGNhdGNoIChlcnIpIHsKCQlpZiAoZXJyIGluc3RhbmNlb2YgR2F0
ZXdheUxvY2tFcnJvciB8fCBlcnIgJiYgdHlwZW9mIGVyciA9PT0gIm9iamVjdCIgJiYgZXJyLm5h
bWUgPT09ICJHYXRld2F5TG9ja0Vycm9yIikgewoJCQljb25zdCBlcnJNZXNzYWdlID0gZGVzY3Jp
YmVVbmtub3duRXJyb3IoZXJyKTsKCQkJZGVmYXVsdFJ1bnRpbWUuZXJyb3IoYEdhdGV3YXkgZmFp
bGVkIHRvIHN0YXJ0OiAke2Vyck1lc3NhZ2V9XG5JZiB0aGUgZ2F0ZXdheSBpcyBzdXBlcnZpc2Vk
LCBzdG9wIGl0IHdpdGg6ICR7Zm9ybWF0Q2xpQ29tbWFuZCgib3BlbmNsYXcgZ2F0ZXdheSBzdG9w
Iil9YCk7CgkJCXRyeSB7CgkJCQljb25zdCBkaWFnbm9zdGljcyA9IGF3YWl0IGluc3BlY3RQb3J0
VXNhZ2UocG9ydCk7CgkJCQlpZiAoZGlhZ25vc3RpY3Muc3RhdHVzID09PSAiYnVzeSIpIGZvciAo
Y29uc3QgbGluZSBvZiBmb3JtYXRQb3J0RGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpKSBkZWZhdWx0
UnVudGltZS5lcnJvcihsaW5lKTsKCQkJfSBjYXRjaCB7fQoJCQlhd2FpdCBtYXliZUV4cGxhaW5H
YXRld2F5U2VydmljZVN0b3AoKTsKCQkJZGVmYXVsdFJ1bnRpbWUuZXhpdCgxKTsKCQkJcmV0dXJu
OwoJCX0KCQlkZWZhdWx0UnVudGltZS5lcnJvcihgR2F0ZXdheSBmYWlsZWQgdG8gc3RhcnQ6ICR7
U3RyaW5nKGVycil9YCk7CgkJZGVmYXVsdFJ1bnRpbWUuZXhpdCgxKTsKCX0KfQpmdW5jdGlvbiBh
ZGRHYXRld2F5UnVuQ29tbWFuZChjbWQpIHsKCXJldHVybiBjbWQub3B0aW9uKCItLXBvcnQgPHBv
cnQ+IiwgIlBvcnQgZm9yIHRoZSBnYXRld2F5IFdlYlNvY2tldCIpLm9wdGlvbigiLS1iaW5kIDxt
b2RlPiIsICJCaW5kIG1vZGUgKFwibG9vcGJhY2tcInxcImxhblwifFwidGFpbG5ldFwifFwiYXV0
b1wifFwiY3VzdG9tXCIpLiBEZWZhdWx0cyB0byBjb25maWcgZ2F0ZXdheS5iaW5kIChvciBsb29w
YmFjaykuIikub3B0aW9uKCItLXRva2VuIDx0b2tlbj4iLCAiU2hhcmVkIHRva2VuIHJlcXVpcmVk
IGluIGNvbm5lY3QucGFyYW1zLmF1dGgudG9rZW4gKGRlZmF1bHQ6IE9QRU5DTEFXX0dBVEVXQVlf
VE9LRU4gZW52IGlmIHNldCkiKS5vcHRpb24oIi0tYXV0aCA8bW9kZT4iLCBgR2F0ZXdheSBhdXRo
IG1vZGUgKCR7Zm9ybWF0TW9kZUNob2ljZXMoR0FURVdBWV9BVVRIX01PREVTKX0pYCkub3B0aW9u
KCItLXBhc3N3b3JkIDxwYXNzd29yZD4iLCAiUGFzc3dvcmQgZm9yIGF1dGggbW9kZT1wYXNzd29y
ZCIpLm9wdGlvbigiLS1wYXNzd29yZC1maWxlIDxwYXRoPiIsICJSZWFkIGdhdGV3YXkgcGFzc3dv
cmQgZnJvbSBmaWxlIikub3B0aW9uKCItLXRhaWxzY2FsZSA8bW9kZT4iLCBgVGFpbHNjYWxlIGV4
cG9zdXJlIG1vZGUgKCR7Zm9ybWF0TW9kZUNob2ljZXMoR0FURVdBWV9UQUlMU0NBTEVfTU9ERVMp
fSlgKS5vcHRpb24oIi0tdGFpbHNjYWxlLXJlc2V0LW9uLWV4aXQiLCAiUmVzZXQgVGFpbHNjYWxl
IHNlcnZlL2Z1bm5lbCBjb25maWd1cmF0aW9uIG9uIHNodXRkb3duIiwgZmFsc2UpLm9wdGlvbigi
LS1hbGxvdy11bmNvbmZpZ3VyZWQiLCAiQWxsb3cgZ2F0ZXdheSBzdGFydCB3aXRob3V0IGdhdGV3
YXkubW9kZT1sb2NhbCBpbiBjb25maWciLCBmYWxzZSkub3B0aW9uKCItLWRldiIsICJDcmVhdGUg
YSBkZXYgY29uZmlnICsgd29ya3NwYWNlIGlmIG1pc3NpbmcgKG5vIEJPT1RTVFJBUC5tZCkiLCBm
YWxzZSkub3B0aW9uKCItLXJlc2V0IiwgIlJlc2V0IGRldiBjb25maWcgKyBjcmVkZW50aWFscyAr
IHNlc3Npb25zICsgd29ya3NwYWNlIChyZXF1aXJlcyAtLWRldikiLCBmYWxzZSkub3B0aW9uKCIt
LWZvcmNlIiwgIktpbGwgYW55IGV4aXN0aW5nIGxpc3RlbmVyIG9uIHRoZSB0YXJnZXQgcG9ydCBi
ZWZvcmUgc3RhcnRpbmciLCBmYWxzZSkub3B0aW9uKCItLXZlcmJvc2UiLCAiVmVyYm9zZSBsb2dn
aW5nIHRvIHN0ZG91dC9zdGRlcnIiLCBmYWxzZSkub3B0aW9uKCItLWNsYXVkZS1jbGktbG9ncyIs
ICJPbmx5IHNob3cgY2xhdWRlLWNsaSBsb2dzIGluIHRoZSBjb25zb2xlIChpbmNsdWRlcyBzdGRv
dXQvc3RkZXJyKSIsIGZhbHNlKS5vcHRpb24oIi0td3MtbG9nIDxzdHlsZT4iLCAiV2ViU29ja2V0
IGxvZyBzdHlsZSAoXCJhdXRvXCJ8XCJmdWxsXCJ8XCJjb21wYWN0XCIpIiwgImF1dG8iKS5vcHRp
b24oIi0tY29tcGFjdCIsICJBbGlhcyBmb3IgXCItLXdzLWxvZyBjb21wYWN0XCIiLCBmYWxzZSku
b3B0aW9uKCItLXJhdy1zdHJlYW0iLCAiTG9nIHJhdyBtb2RlbCBzdHJlYW0gZXZlbnRzIHRvIGpz
b25sIiwgZmFsc2UpLm9wdGlvbigiLS1yYXctc3RyZWFtLXBhdGggPHBhdGg+IiwgIlJhdyBzdHJl
YW0ganNvbmwgcGF0aCIpLmFjdGlvbihhc3luYyAob3B0cywgY29tbWFuZCkgPT4gewoJCWF3YWl0
IHJ1bkdhdGV3YXlDb21tYW5kJDEocmVzb2x2ZUdhdGV3YXlSdW5PcHRpb25zKG9wdHMsIGNvbW1h
bmQpKTsKCX0pOwp9Ci8vI2VuZHJlZ2lvbgovLyNyZWdpb24gc3JjL2NsaS9nYXRld2F5LWNsaS9y
ZWdpc3Rlci50cwpmdW5jdGlvbiBydW5HYXRld2F5Q29tbWFuZChhY3Rpb24sIGxhYmVsKSB7Cgly
ZXR1cm4gcnVuQ29tbWFuZFdpdGhSdW50aW1lKGRlZmF1bHRSdW50aW1lLCBhY3Rpb24sIChlcnIp
ID0+IHsKCQljb25zdCBtZXNzYWdlID0gU3RyaW5nKGVycik7CgkJZGVmYXVsdFJ1bnRpbWUuZXJy
b3IobGFiZWwgPyBgJHtsYWJlbH06ICR7bWVzc2FnZX1gIDogbWVzc2FnZSk7CgkJZGVmYXVsdFJ1
bnRpbWUuZXhpdCgxKTsKCX0pOwp9CmZ1bmN0aW9uIHBhcnNlRGF5c09wdGlvbihyYXcsIGZhbGxi
YWNrID0gMzApIHsKCWlmICh0eXBlb2YgcmF3ID09PSAibnVtYmVyIiAmJiBOdW1iZXIuaXNGaW5p
dGUocmF3KSkgcmV0dXJuIE1hdGgubWF4KDEsIE1hdGguZmxvb3IocmF3KSk7CglpZiAodHlwZW9m
IHJhdyA9PT0gInN0cmluZyIgJiYgcmF3LnRyaW0oKSAhPT0gIiIpIHsKCQljb25zdCBwYXJzZWQg
PSBOdW1iZXIocmF3KTsKCQlpZiAoTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkpIHJldHVybiBNYXRo
Lm1heCgxLCBNYXRoLmZsb29yKHBhcnNlZCkpOwoJfQoJcmV0dXJuIGZhbGxiYWNrOwp9CmZ1bmN0
aW9uIHJlc29sdmVHYXRld2F5UnBjT3B0aW9ucyhvcHRzLCBjb21tYW5kKSB7Cgljb25zdCBwYXJl
bnRUb2tlbiA9IGluaGVyaXRPcHRpb25Gcm9tUGFyZW50KGNvbW1hbmQsICJ0b2tlbiIpOwoJY29u
c3QgcGFyZW50UGFzc3dvcmQgPSBpbmhlcml0T3B0aW9uRnJvbVBhcmVudChjb21tYW5kLCAicGFz
c3dvcmQiKTsKCXJldHVybiB7CgkJLi4ub3B0cywKCQl0b2tlbjogb3B0cy50b2tlbiA/PyBwYXJl
bnRUb2tlbiwKCQlwYXNzd29yZDogb3B0cy5wYXNzd29yZCA/PyBwYXJlbnRQYXNzd29yZAoJfTsK
fQpmdW5jdGlvbiByZW5kZXJDb3N0VXNhZ2VTdW1tYXJ5KHN1bW1hcnksIGRheXMsIHJpY2gpIHsK
CWNvbnN0IHRvdGFsQ29zdCA9IGZvcm1hdFVzZChzdW1tYXJ5LnRvdGFscy50b3RhbENvc3QpID8/
ICIkMC4wMCI7Cgljb25zdCB0b3RhbFRva2VucyA9IGZvcm1hdFRva2VuQ291bnQoc3VtbWFyeS50
b3RhbHMudG90YWxUb2tlbnMpID8/ICIwIjsKCWNvbnN0IGxpbmVzID0gW2NvbG9yaXplKHJpY2gs
IHRoZW1lLmhlYWRpbmcsIGBVc2FnZSBjb3N0ICgke2RheXN9IGRheXMpYCksIGAke2NvbG9yaXpl
KHJpY2gsIHRoZW1lLm11dGVkLCAiVG90YWw6Iil9ICR7dG90YWxDb3N0fSDCtyAke3RvdGFsVG9r
ZW5zfSB0b2tlbnNgXTsKCWlmIChzdW1tYXJ5LnRvdGFscy5taXNzaW5nQ29zdEVudHJpZXMgPiAw
KSBsaW5lcy5wdXNoKGAke2NvbG9yaXplKHJpY2gsIHRoZW1lLm11dGVkLCAiTWlzc2luZyBlbnRy
aWVzOiIpfSAke3N1bW1hcnkudG90YWxzLm1pc3NpbmdDb3N0RW50cmllc31gKTsKCWNvbnN0IGxh
dGVzdCA9IHN1bW1hcnkuZGFpbHkuYXQoLTEpOwoJaWYgKGxhdGVzdCkgewoJCWNvbnN0IGxhdGVz
dENvc3QgPSBmb3JtYXRVc2QobGF0ZXN0LnRvdGFsQ29zdCkgPz8gIiQwLjAwIjsKCQljb25zdCBs
YXRlc3RUb2tlbnMgPSBmb3JtYXRUb2tlbkNvdW50KGxhdGVzdC50b3RhbFRva2VucykgPz8gIjAi
OwoJCWxpbmVzLnB1c2goYCR7Y29sb3JpemUocmljaCwgdGhlbWUubXV0ZWQsICJMYXRlc3QgZGF5
OiIpfSAke2xhdGVzdC5kYXRlfSDCtyAke2xhdGVzdENvc3R9IMK3ICR7bGF0ZXN0VG9rZW5zfSB0
b2tlbnNgKTsKCX0KCXJldHVybiBsaW5lczsKfQpmdW5jdGlvbiByZWdpc3RlckdhdGV3YXlDbGko
cHJvZ3JhbSkgewoJY29uc3QgZ2F0ZXdheSA9IGFkZEdhdGV3YXlSdW5Db21tYW5kKHByb2dyYW0u
Y29tbWFuZCgiZ2F0ZXdheSIpLmRlc2NyaXB0aW9uKCJSdW4sIGluc3BlY3QsIGFuZCBxdWVyeSB0
aGUgV2ViU29ja2V0IEdhdGV3YXkiKS5hZGRIZWxwVGV4dCgiYWZ0ZXIiLCAoKSA9PiBgXG4ke3Ro
ZW1lLmhlYWRpbmcoIkV4YW1wbGVzOiIpfVxuJHtmb3JtYXRIZWxwRXhhbXBsZXMoWwoJCVsib3Bl
bmNsYXcgZ2F0ZXdheSBydW4iLCAiUnVuIHRoZSBnYXRld2F5IGluIHRoZSBmb3JlZ3JvdW5kLiJd
LAoJCVsib3BlbmNsYXcgZ2F0ZXdheSBzdGF0dXMiLCAiU2hvdyBzZXJ2aWNlIHN0YXR1cyBhbmQg
cHJvYmUgcmVhY2hhYmlsaXR5LiJdLAoJCVsib3BlbmNsYXcgZ2F0ZXdheSBkaXNjb3ZlciIsICJG
aW5kIGxvY2FsIGFuZCB3aWRlLWFyZWEgZ2F0ZXdheSBiZWFjb25zLiJdLAoJCVsib3BlbmNsYXcg
Z2F0ZXdheSBjYWxsIGhlYWx0aCIsICJDYWxsIGEgZ2F0ZXdheSBSUEMgbWV0aG9kIGRpcmVjdGx5
LiJdCgldKX1cblxuJHt0aGVtZS5tdXRlZCgiRG9jczoiKX0gJHtmb3JtYXREb2NzTGluaygiL2Ns
aS9nYXRld2F5IiwgImRvY3Mub3BlbmNsYXcuYWkvY2xpL2dhdGV3YXkiKX1cbmApKTsKCWFkZEdh
dGV3YXlSdW5Db21tYW5kKGdhdGV3YXkuY29tbWFuZCgicnVuIikuZGVzY3JpcHRpb24oIlJ1biB0
aGUgV2ViU29ja2V0IEdhdGV3YXkgKGZvcmVncm91bmQpIikpOwoJYWRkR2F0ZXdheVNlcnZpY2VD
b21tYW5kcyhnYXRld2F5LCB7IHN0YXR1c0Rlc2NyaXB0aW9uOiAiU2hvdyBnYXRld2F5IHNlcnZp
Y2Ugc3RhdHVzICsgcHJvYmUgdGhlIEdhdGV3YXkiIH0pOwoJZ2F0ZXdheUNhbGxPcHRzKGdhdGV3
YXkuY29tbWFuZCgiY2FsbCIpLmRlc2NyaXB0aW9uKCJDYWxsIGEgR2F0ZXdheSBtZXRob2QiKS5h
cmd1bWVudCgiPG1ldGhvZD4iLCAiTWV0aG9kIG5hbWUgKGhlYWx0aC9zdGF0dXMvc3lzdGVtLXBy
ZXNlbmNlL2Nyb24uKikiKS5vcHRpb24oIi0tcGFyYW1zIDxqc29uPiIsICJKU09OIG9iamVjdCBz
dHJpbmcgZm9yIHBhcmFtcyIsICJ7fSIpLmFjdGlvbihhc3luYyAobWV0aG9kLCBvcHRzLCBjb21t
YW5kKSA9PiB7CgkJYXdhaXQgcnVuR2F0ZXdheUNvbW1hbmQoYXN5bmMgKCkgPT4gewoJCQljb25z
dCBycGNPcHRzID0gcmVzb2x2ZUdhdGV3YXlScGNPcHRpb25zKG9wdHMsIGNvbW1hbmQpOwoJCQlj
b25zdCBjb25maWcgPSBhd2FpdCByZWFkQmVzdEVmZm9ydENvbmZpZygpOwoJCQljb25zdCBwYXJh
bXMgPSBKU09OLnBhcnNlKFN0cmluZyhvcHRzLnBhcmFtcyA/PyAie30iKSk7CgkJCWNvbnN0IHJl
c3VsdCA9IGF3YWl0IGNhbGxHYXRld2F5Q2xpKG1ldGhvZCwgewoJCQkJLi4ucnBjT3B0cywKCQkJ
CWNvbmZpZwoJCQl9LCBwYXJhbXMpOwoJCQlpZiAocnBjT3B0cy5qc29uKSB7CgkJCQlkZWZhdWx0
UnVudGltZS5sb2coSlNPTi5zdHJpbmdpZnkocmVzdWx0LCBudWxsLCAyKSk7CgkJCQlyZXR1cm47
CgkJCX0KCQkJY29uc3QgcmljaCA9IGlzUmljaCgpOwoJCQlkZWZhdWx0UnVudGltZS5sb2coYCR7
Y29sb3JpemUocmljaCwgdGhlbWUuaGVhZGluZywgIkdhdGV3YXkgY2FsbCIpfTogJHtjb2xvcml6
ZShyaWNoLCB0aGVtZS5tdXRlZCwgU3RyaW5nKG1ldGhvZCkpfWApOwoJCQlkZWZhdWx0UnVudGlt
ZS5sb2coSlNPTi5zdHJpbmdpZnkocmVzdWx0LCBudWxsLCAyKSk7CgkJfSwgIkdhdGV3YXkgY2Fs
bCBmYWlsZWQiKTsKCX0pKTsKCWdhdGV3YXlDYWxsT3B0cyhnYXRld2F5LmNvbW1hbmQoInVzYWdl
LWNvc3QiKS5kZXNjcmlwdGlvbigiRmV0Y2ggdXNhZ2UgY29zdCBzdW1tYXJ5IGZyb20gc2Vzc2lv
biBsb2dzIikub3B0aW9uKCItLWRheXMgPGRheXM+IiwgIk51bWJlciBvZiBkYXlzIHRvIGluY2x1
ZGUiLCAiMzAiKS5hY3Rpb24oYXN5bmMgKG9wdHMsIGNvbW1hbmQpID0+IHsKCQlhd2FpdCBydW5H
YXRld2F5Q29tbWFuZChhc3luYyAoKSA9PiB7CgkJCWNvbnN0IHJwY09wdHMgPSByZXNvbHZlR2F0
ZXdheVJwY09wdGlvbnMob3B0cywgY29tbWFuZCk7CgkJCWNvbnN0IGRheXMgPSBwYXJzZURheXNP
cHRpb24ob3B0cy5kYXlzKTsKCQkJY29uc3QgY29uZmlnID0gYXdhaXQgcmVhZEJlc3RFZmZvcnRD
b25maWcoKTsKCQkJY29uc3QgcmVzdWx0ID0gYXdhaXQgY2FsbEdhdGV3YXlDbGkoInVzYWdlLmNv
c3QiLCB7CgkJCQkuLi5ycGNPcHRzLAoJCQkJY29uZmlnCgkJCX0sIHsgZGF5cyB9KTsKCQkJaWYg
KHJwY09wdHMuanNvbikgewoJCQkJZGVmYXVsdFJ1bnRpbWUubG9nKEpTT04uc3RyaW5naWZ5KHJl
c3VsdCwgbnVsbCwgMikpOwoJCQkJcmV0dXJuOwoJCQl9CgkJCWNvbnN0IHJpY2ggPSBpc1JpY2go
KTsKCQkJY29uc3Qgc3VtbWFyeSA9IHJlc3VsdDsKCQkJZm9yIChjb25zdCBsaW5lIG9mIHJlbmRl
ckNvc3RVc2FnZVN1bW1hcnkoc3VtbWFyeSwgZGF5cywgcmljaCkpIGRlZmF1bHRSdW50aW1lLmxv
ZyhsaW5lKTsKCQl9LCAiR2F0ZXdheSB1c2FnZSBjb3N0IGZhaWxlZCIpOwoJfSkpOwoJZ2F0ZXdh
eUNhbGxPcHRzKGdhdGV3YXkuY29tbWFuZCgiaGVhbHRoIikuZGVzY3JpcHRpb24oIkZldGNoIEdh
dGV3YXkgaGVhbHRoIikuYWN0aW9uKGFzeW5jIChvcHRzLCBjb21tYW5kKSA9PiB7CgkJYXdhaXQg
cnVuR2F0ZXdheUNvbW1hbmQoYXN5bmMgKCkgPT4gewoJCQljb25zdCBycGNPcHRzID0gcmVzb2x2
ZUdhdGV3YXlScGNPcHRpb25zKG9wdHMsIGNvbW1hbmQpOwoJCQljb25zdCBjb25maWcgPSBhd2Fp
dCByZWFkQmVzdEVmZm9ydENvbmZpZygpOwoJCQljb25zdCByZXN1bHQgPSBhd2FpdCBjYWxsR2F0
ZXdheUNsaSgiaGVhbHRoIiwgewoJCQkJLi4ucnBjT3B0cywKCQkJCWNvbmZpZwoJCQl9KTsKCQkJ
aWYgKHJwY09wdHMuanNvbikgewoJCQkJZGVmYXVsdFJ1bnRpbWUubG9nKEpTT04uc3RyaW5naWZ5
KHJlc3VsdCwgbnVsbCwgMikpOwoJCQkJcmV0dXJuOwoJCQl9CgkJCWNvbnN0IHJpY2ggPSBpc1Jp
Y2goKTsKCQkJY29uc3Qgb2JqID0gcmVzdWx0ICYmIHR5cGVvZiByZXN1bHQgPT09ICJvYmplY3Qi
ID8gcmVzdWx0IDoge307CgkJCWNvbnN0IGR1cmF0aW9uTXMgPSB0eXBlb2Ygb2JqLmR1cmF0aW9u
TXMgPT09ICJudW1iZXIiID8gb2JqLmR1cmF0aW9uTXMgOiBudWxsOwoJCQlkZWZhdWx0UnVudGlt
ZS5sb2coY29sb3JpemUocmljaCwgdGhlbWUuaGVhZGluZywgIkdhdGV3YXkgSGVhbHRoIikpOwoJ
CQlkZWZhdWx0UnVudGltZS5sb2coYCR7Y29sb3JpemUocmljaCwgdGhlbWUuc3VjY2VzcywgIk9L
Iil9JHtkdXJhdGlvbk1zICE9IG51bGwgPyBgICgke2R1cmF0aW9uTXN9bXMpYCA6ICIifWApOwoJ
CQlpZiAob2JqLmNoYW5uZWxzICYmIHR5cGVvZiBvYmouY2hhbm5lbHMgPT09ICJvYmplY3QiKSBm
b3IgKGNvbnN0IGxpbmUgb2YgZm9ybWF0SGVhbHRoQ2hhbm5lbExpbmVzKG9iaikpIGRlZmF1bHRS
dW50aW1lLmxvZyhzdHlsZUhlYWx0aENoYW5uZWxMaW5lKGxpbmUsIHJpY2gpKTsKCQl9KTsKCX0p
KTsKCWdhdGV3YXkuY29tbWFuZCgicHJvYmUiKS5kZXNjcmlwdGlvbigiU2hvdyBnYXRld2F5IHJl
YWNoYWJpbGl0eSArIGRpc2NvdmVyeSArIGhlYWx0aCArIHN0YXR1cyBzdW1tYXJ5IChsb2NhbCAr
IHJlbW90ZSkiKS5vcHRpb24oIi0tdXJsIDx1cmw+IiwgIkV4cGxpY2l0IEdhdGV3YXkgV2ViU29j
a2V0IFVSTCAoc3RpbGwgcHJvYmVzIGxvY2FsaG9zdCkiKS5vcHRpb24oIi0tc3NoIDx0YXJnZXQ+
IiwgIlNTSCB0YXJnZXQgZm9yIHJlbW90ZSBnYXRld2F5IHR1bm5lbCAodXNlckBob3N0IG9yIHVz
ZXJAaG9zdDpwb3J0KSIpLm9wdGlvbigiLS1zc2gtaWRlbnRpdHkgPHBhdGg+IiwgIlNTSCBpZGVu
dGl0eSBmaWxlIHBhdGgiKS5vcHRpb24oIi0tc3NoLWF1dG8iLCAiVHJ5IHRvIGRlcml2ZSBhbiBT
U0ggdGFyZ2V0IGZyb20gQm9uam91ciBkaXNjb3ZlcnkiLCBmYWxzZSkub3B0aW9uKCItLXRva2Vu
IDx0b2tlbj4iLCAiR2F0ZXdheSB0b2tlbiAoYXBwbGllcyB0byBhbGwgcHJvYmVzKSIpLm9wdGlv
bigiLS1wYXNzd29yZCA8cGFzc3dvcmQ+IiwgIkdhdGV3YXkgcGFzc3dvcmQgKGFwcGxpZXMgdG8g
YWxsIHByb2JlcykiKS5vcHRpb24oIi0tdGltZW91dCA8bXM+IiwgIk92ZXJhbGwgcHJvYmUgYnVk
Z2V0IGluIG1zIiwgIjMwMDAiKS5vcHRpb24oIi0tanNvbiIsICJPdXRwdXQgSlNPTiIsIGZhbHNl
KS5hY3Rpb24oYXN5bmMgKG9wdHMsIGNvbW1hbmQpID0+IHsKCQlhd2FpdCBydW5HYXRld2F5Q29t
bWFuZChhc3luYyAoKSA9PiB7CgkJCWF3YWl0IGdhdGV3YXlTdGF0dXNDb21tYW5kKHJlc29sdmVH
YXRld2F5UnBjT3B0aW9ucyhvcHRzLCBjb21tYW5kKSwgZGVmYXVsdFJ1bnRpbWUpOwoJCX0pOwoJ
fSk7CglnYXRld2F5LmNvbW1hbmQoImRpc2NvdmVyIikuZGVzY3JpcHRpb24oIkRpc2NvdmVyIGdh
dGV3YXlzIHZpYSBCb25qb3VyIChsb2NhbCArIHdpZGUtYXJlYSBpZiBjb25maWd1cmVkKSIpLm9w
dGlvbigiLS10aW1lb3V0IDxtcz4iLCAiUGVyLWNvbW1hbmQgdGltZW91dCBpbiBtcyIsICIyMDAw
Iikub3B0aW9uKCItLWpzb24iLCAiT3V0cHV0IEpTT04iLCBmYWxzZSkuYWN0aW9uKGFzeW5jIChv
cHRzKSA9PiB7CgkJYXdhaXQgcnVuR2F0ZXdheUNvbW1hbmQoYXN5bmMgKCkgPT4gewoJCQljb25z
dCB3aWRlQXJlYURvbWFpbiA9IHJlc29sdmVXaWRlQXJlYURpc2NvdmVyeURvbWFpbih7IGNvbmZp
Z0RvbWFpbjogKGF3YWl0IHJlYWRCZXN0RWZmb3J0Q29uZmlnKCkpLmRpc2NvdmVyeT8ud2lkZUFy
ZWE/LmRvbWFpbiB9KTsKCQkJY29uc3QgdGltZW91dE1zID0gcGFyc2VEaXNjb3ZlclRpbWVvdXRN
cyhvcHRzLnRpbWVvdXQsIDJlMyk7CgkJCWNvbnN0IGRvbWFpbnMgPSBbImxvY2FsLiIsIC4uLndp
ZGVBcmVhRG9tYWluID8gW3dpZGVBcmVhRG9tYWluXSA6IFtdXTsKCQkJY29uc3QgZGVkdXBlZCA9
IGRlZHVwZUJlYWNvbnMoYXdhaXQgd2l0aFByb2dyZXNzKHsKCQkJCWxhYmVsOiAiU2Nhbm5pbmcg
Zm9yIGdhdGV3YXlz4oCmIiwKCQkJCWluZGV0ZXJtaW5hdGU6IHRydWUsCgkJCQllbmFibGVkOiBv
cHRzLmpzb24gIT09IHRydWUsCgkJCQlkZWxheU1zOiAwCgkJCX0sIGFzeW5jICgpID0+IGF3YWl0
IGRpc2NvdmVyR2F0ZXdheUJlYWNvbnMoewoJCQkJdGltZW91dE1zLAoJCQkJd2lkZUFyZWFEb21h
aW4KCQkJfSkpKS50b1NvcnRlZCgoYSwgYikgPT4gU3RyaW5nKGEuZGlzcGxheU5hbWUgfHwgYS5p
bnN0YW5jZU5hbWUpLmxvY2FsZUNvbXBhcmUoU3RyaW5nKGIuZGlzcGxheU5hbWUgfHwgYi5pbnN0
YW5jZU5hbWUpKSk7CgkJCWlmIChvcHRzLmpzb24pIHsKCQkJCWNvbnN0IGVucmljaGVkID0gZGVk
dXBlZC5tYXAoKGIpID0+IHsKCQkJCQljb25zdCBob3N0ID0gcGlja0JlYWNvbkhvc3QoYik7CgkJ
CQkJY29uc3QgcG9ydCA9IHBpY2tHYXRld2F5UG9ydChiKTsKCQkJCQlyZXR1cm4gewoJCQkJCQku
Li5iLAoJCQkJCQl3c1VybDogaG9zdCA/IGB3czovLyR7aG9zdH06JHtwb3J0fWAgOiBudWxsCgkJ
CQkJfTsKCQkJCX0pOwoJCQkJZGVmYXVsdFJ1bnRpbWUubG9nKEpTT04uc3RyaW5naWZ5KHsKCQkJ
CQl0aW1lb3V0TXMsCgkJCQkJZG9tYWlucywKCQkJCQljb3VudDogZW5yaWNoZWQubGVuZ3RoLAoJ
CQkJCWJlYWNvbnM6IGVucmljaGVkCgkJCQl9LCBudWxsLCAyKSk7CgkJCQlyZXR1cm47CgkJCX0K
CQkJY29uc3QgcmljaCA9IGlzUmljaCgpOwoJCQlkZWZhdWx0UnVudGltZS5sb2coY29sb3JpemUo
cmljaCwgdGhlbWUuaGVhZGluZywgIkdhdGV3YXkgRGlzY292ZXJ5IikpOwoJCQlkZWZhdWx0UnVu
dGltZS5sb2coY29sb3JpemUocmljaCwgdGhlbWUubXV0ZWQsIGBGb3VuZCAke2RlZHVwZWQubGVu
Z3RofSBnYXRld2F5KHMpIMK3IGRvbWFpbnM6ICR7ZG9tYWlucy5qb2luKCIsICIpfWApKTsKCQkJ
aWYgKGRlZHVwZWQubGVuZ3RoID09PSAwKSByZXR1cm47CgkJCWZvciAoY29uc3QgYmVhY29uIG9m
IGRlZHVwZWQpIGZvciAoY29uc3QgbGluZSBvZiByZW5kZXJCZWFjb25MaW5lcyhiZWFjb24sIHJp
Y2gpKSBkZWZhdWx0UnVudGltZS5sb2cobGluZSk7CgkJfSwgImdhdGV3YXkgZGlzY292ZXIgZmFp
bGVkIik7Cgl9KTsKfQovLyNlbmRyZWdpb24KZXhwb3J0IHsgcmVnaXN0ZXJHYXRld2F5Q2xpIH07
Cg==

--_004_PH7PR17MB59294F382DE65EA44D2C3642AF4FAPH7PR17MB5929namp_--
