From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from EUR02-DB5-obe.outbound.protection.outlook.com (EUR02-DB5-obe.outbound.protection.outlook.com [40.107.249.61]) by mx.groups.io with SMTP id smtpd.web09.3418.1668502196391114771 for ; Tue, 15 Nov 2022 00:49:58 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@armh.onmicrosoft.com header.s=selector2-armh-onmicrosoft-com header.b=qjDFpnul; spf=pass (domain: arm.com, ip: 40.107.249.61, mailfrom: sami.mujawar@arm.com) ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=fwBCAqsCAIpGpD98gg1nfYrHSNgKc6/gteVGpnOI4g6V7w8i5US5VxzC2HeNzvtIS+Fw4/NfCC1zt1N/zYE6MvD7lqjwoABuct5mUaZg8PLGzvQLLv6iMEfYHI9VtxMNYVIoeYWhR2cziZHk4e+IJEJtY2bxAL+efoWvwrEyd5Q3NitfGElRxGNdfiPFZ25bFilAh7Bnr5dZUY9cWp29V1KSPN03UdNlHtcAhihpEkK46nq++MDCUC08tw/oYRjpmB0sZ+4oAyxfbGltlJGpAc7I1QHipBUeEXWYcG6JlYenNEuVOsXLYCayJZ+7TZMIM60Ad9eLoYw8X0A+48Dj5Q== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=vjZhF8YG2BK1L1UiyNr7r6nw/bqCo9eOryeNKxXIZ1M=; b=Pm9vPZ3NnuRfywzpp6EBtfh+xld4pvvO70NkLWswGzf6+biDzzB2N1JjJyKmqlEQ6EDE9j0PsH0XoVptaJLYv+i/dxLKNHBGX2lkmR4S78levt8wka35pLj4UBBX8JJKHaunMAGJxXLpnheiVn1YZhwqiZ5vyyayPiKZJNgyHTvzSueZn/MGtu8XoLO+ebE74LT1BKbT816nu0FztF/hHAi48b51fmmGfGuG362cE0x8tZLeZmcUsUgCHTi0GPMIdI3G/j0ZjtkIdGcMCIH9Azf6snPvN521WRsTGv0hLPr2+jALKx20ZbbNliQNNbsbiIZTheXxuUjLvlVNF1XPIw== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) smtp.rcpttodomain=edk2.groups.io smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vjZhF8YG2BK1L1UiyNr7r6nw/bqCo9eOryeNKxXIZ1M=; b=qjDFpnuldfB/0037rmfS0qmL+iAyDhN2edGuiJU3u5Z07IxoTXQynwbzG0Gf1Tq4e44dCzzlicFBxbd++bimYO5MvPbWCeg37jh5WQ0As1Cc6nHsugTdJY2TyKTBBicgzUNdPlRNiAjmYZMXEnR7gVoxxs/Fcw14WLBos9gp8wI= Received: from DB9PR05CA0022.eurprd05.prod.outlook.com (2603:10a6:10:1da::27) by PAWPR08MB9733.eurprd08.prod.outlook.com (2603:10a6:102:2e6::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5834.7; Tue, 15 Nov 2022 08:49:39 +0000 Received: from DBAEUR03FT012.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:1da:cafe::98) by DB9PR05CA0022.outlook.office365.com (2603:10a6:10:1da::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.12 via Frontend Transport; Tue, 15 Nov 2022 08:49:39 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by DBAEUR03FT012.mail.protection.outlook.com (100.127.142.126) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.12 via Frontend Transport; Tue, 15 Nov 2022 08:49:39 +0000 Received: ("Tessian outbound 6c699027a257:v130"); Tue, 15 Nov 2022 08:49:39 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 6061936d7470be65 X-CR-MTA-TID: 64aa7808 Received: from 140a43b82f51.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id F3619D29-C747-4C67-B3C8-C163F778E0D8.1; Tue, 15 Nov 2022 08:49:31 +0000 Received: from EUR02-DB5-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 140a43b82f51.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 15 Nov 2022 08:49:31 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=N61fDKJtNkib7+bNHuqKcFN3MhtFwmwiSyXbxG0hOHIHQJfP0Rw9JPFGGlTdWwJX2sCpOm+FIVVt6Lvy8odx40n//KYe3H71smeMx5zipUyPhlNFPkfkXdJ99MAyYuo9kpk2Op8CBVIxwMR+vNq8mJzkTh+Oyic7n8M0W5OGjY7+mTfge0Felezil4Hubo2JZnJPkgNJyQ40r2QmDsOlqWtJcaAz5uRZ3j/wkf0gs+I1hwMtzrmS2g28b38BE8wkxWyTP7lEeV82ABGUrH5vNTpf+wqCOl/A4brLP6IQVO/jE4ViQpkIkNUUxh9XmCyHXyley+X52E2axxIyR1Dfkw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=vjZhF8YG2BK1L1UiyNr7r6nw/bqCo9eOryeNKxXIZ1M=; b=aYnSC/nHn5yhL342zmsyfltyHULmp07Y9/4lyQgKFYU4gf2RPy5IeNQNh4/FsjLdgoL9+Wjf46Q+VUoyX9MFzi9vbQvpI599B5Jg+YGuxhn/CiEekKKos7x+tvwRZ3B8H8y7/lBG7Szi2JnitUH6+Okwe0CdajYr45sNF9lTJkiceBVpuJdXGQ4bexjXpopXkh1Aq0ryUk5zE3ojB0+LAKM9Jy13fu91rolO/Jfp13Z/SFbZvgKXL05rwxPgp1mkuRpnbnMIA17H8LRvjxCVIDkaWnKBiYv0fzKSxv+cNFh6rxyuVxsdMaAAQXw9bXJwCOTItOzNPUdsYw6XkxM3ng== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vjZhF8YG2BK1L1UiyNr7r6nw/bqCo9eOryeNKxXIZ1M=; b=qjDFpnuldfB/0037rmfS0qmL+iAyDhN2edGuiJU3u5Z07IxoTXQynwbzG0Gf1Tq4e44dCzzlicFBxbd++bimYO5MvPbWCeg37jh5WQ0As1Cc6nHsugTdJY2TyKTBBicgzUNdPlRNiAjmYZMXEnR7gVoxxs/Fcw14WLBos9gp8wI= Received: from AS8PR08MB6806.eurprd08.prod.outlook.com (2603:10a6:20b:39b::12) by DB9PR08MB8457.eurprd08.prod.outlook.com (2603:10a6:10:3d7::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.11; Tue, 15 Nov 2022 08:49:16 +0000 Received: from AS8PR08MB6806.eurprd08.prod.outlook.com ([fe80::eca2:349c:4dbf:7f10]) by AS8PR08MB6806.eurprd08.prod.outlook.com ([fe80::eca2:349c:4dbf:7f10%8]) with mapi id 15.20.5834.007; Tue, 15 Nov 2022 08:49:15 +0000 From: "Sami Mujawar" To: "devel@edk2.groups.io" , "judah.vang@intel.com" , "Wang, Jian J" CC: "Gao, Liming" , "Wu, Hao A" , "Mistry, Nishant C" , nd Subject: Re: [edk2-devel] [PATCH v5 08/19] MdeModulePkg: Add support for Protected Variables Thread-Topic: [edk2-devel] [PATCH v5 08/19] MdeModulePkg: Add support for Protected Variables Thread-Index: AQHY8bNSk5SreiQ1pkqThm2o+Jpv5K4+Dg4AgACo+gCAAQPWgA== Date: Tue, 15 Nov 2022 08:49:14 +0000 Message-ID: <852C10C4-B88F-422F-9220-9FBDBB7DBE20@arm.com> References: <20221106073509.3071-1-judah.vang@intel.com> <20221106073509.3071-9-judah.vang@intel.com> In-Reply-To: Accept-Language: en-GB, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Microsoft-MacOutlook/16.65.22091101 Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: AS8PR08MB6806:EE_|DB9PR08MB8457:EE_|DBAEUR03FT012:EE_|PAWPR08MB9733:EE_ X-MS-Office365-Filtering-Correlation-Id: 07f31927-30ba-4829-66d7-08dac6e654c6 x-checkrecipientrouted: true nodisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: QDjyyAQFcIp5k247t5v5io0BphGDm5y6ZwqCCpLLl6udcK9n1b83QoSnf922u+MIXyPfxj2a+aVWIZjjAa6ptwSz1QBI8BvqSAK+T4MAEHYg7dmyhzqqlb5+KW8cR7qQ4KL1jPlJHJCt0p9KJt/MqgSwk4MKTGGLDKtHrhesLhhSPG0gEfZFovlFoA+fl2fwG2K1cy9N0suWwntoDV3KCdLwf4tRSB0q9KAQrlfakP96BHQ9gkYyugOdMVkAOOL8vJ0V+9UrtRaELCDCLjK5jQ8FQDGM9MPVvSvnuZW+C2FllXj/3JojrRDIvpg0m9Fku62ifYnNWnRzgLKPDq/JnDGeW3RZvHJUhYGdbunnOBRwbc77wlBdBCq3/l2UdPHEuphn+Ow7rE2H8OTIeaIKfTJbef3LUUcPkr2S3Ibp543FO4SeUpHzimk2diTXZIEEucW/az3x3RCdqkpRt+vrfSKexfpDnGOvj0bmG1V6boQH56pJDIJEjGgj1skB5clYokQBvRF0SfMT3ogGKXlS6FwA0E99XcxaC22q960kDl3Vt+e0Ro5O8RMHzHg5+Xc2+k00mbM0rjo62eY4vvHRTbCboo3R2EbYiqjvbbxT8K+cyudjECaQAmOczvdfE4eGnzA5ZeHSP5Xfd93YB8uPMMX9Tn0fq6jqU81DlAFF0J78zRwtDKKjoHDGjtR6YAfGqSR06ESW6dA+GZPfYqrr2NLXf5gylfIJrx3DNQRfKO+oIyjisTv3tmOhT37acTggxXep/JaOUdWAGdhIrFghcHdbtEPiDbqasqfybymsmSU0aYuaxrPgG8T79qvyj4M7oExRJefn0Rvf7PaILi2PLru7ZweUzf2kvjYhvFYFZaH3LeuGYnt8qNpvNMP2iZr/ X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS8PR08MB6806.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(136003)(39860400002)(396003)(366004)(376002)(346002)(451199015)(36756003)(66899015)(110136005)(66476007)(122000001)(966005)(8676002)(8936002)(5660300002)(38100700002)(66946007)(66556008)(76116006)(64756008)(71200400001)(30864003)(54906003)(316002)(6506007)(33656002)(45080400002)(91956017)(2906002)(4326008)(41300700001)(19627235002)(38070700005)(6486002)(83380400001)(66446008)(2616005)(186003)(6512007)(53546011)(26005)(86362001)(478600001)(45980500001)(559001)(579004)(44824005);DIR:OUT;SFP:1101; MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB8457 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Return-Path: Sami.Mujawar@arm.com X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DBAEUR03FT012.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: a8f4e22d-ba0d-409f-e293-08dac6e6461e X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: S7pfCAyjaltfuQhTNDLXP0hcxM4heJLMIbDct/mWpYu8vlcxBhOTwodzN6gHv12o4Y4+xE/oSriR/HX2K9ju1sVjkgLeOKQKmjMkmbVcj5+a6eqxE6PE/1BLBPXs+U/TLUKbFO6jo7sqpWOiIOYATTaurdKch9/a+cDHtWoE6K/PSTBhjSDw6BE1zVHtRL4DF2RqbzS08nW+eEWqaUR+pqjrzAllfs10KnvwAaVGKeJMDUOuGjxrfQd9DrZqMhW+D+ljzmP8/3GbPgJ11EaTDrvoSsf8E1sF53+ngcvy0AjpWnh6neywmhPefiSyi4G2LWHUeAO8HM9Bp0PlJPusClz2FUeO7VYYXa3x4JE8k9ZUdAOd7A/TRxyhjvmbzCSxFs7DaYCKGZBoPN9eWXq0bj0VVFrk5hN7rbUxS5sUsTSbXKjNZisIYkY5ZzRTe4EHTaf58n2BvrDC/+37T9RwSplDaMh7ALmtD39Gar/zM1QRenYzgUEKqMt8/SIH4cEyWoiZ7CcaPA2Eh8IIf5+zrpLRRFASpkPjCp27XA87EoOlE5CwBUno2x8EQJDybdGX2CMf9w9vZYszUDVs49x58hOn/BE+8r/WeT9EPe6K1Q7Dc2ZJaFw8TTYDnnSSBiiIPJ2c4Wy1YWt7HIiwpTEDq9lPIyvTleMsmu6EwDO0Py5TbJvqI0aRPubBBb5me1SDMAs7GSi12Kgsl/AFMl5GesCCXz85k6DKsDiD38dUwLXcshxKfSJ48DTKMGCShNrWmXekSmIjPwRCGG1RBE0hthe8AfxzhcnZkrh0J4CfuPWJD3CjxgH97wepVKai6UgTy2TijUKzYUEH4pqWmDlaCmfnlvnye2Y6xtsvRKAChVo= X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(13230022)(4636009)(136003)(396003)(346002)(376002)(39860400002)(451199015)(36840700001)(40470700004)(46966006)(8936002)(30864003)(70586007)(70206006)(8676002)(26005)(6512007)(4326008)(5660300002)(81166007)(66899015)(41300700001)(6506007)(33656002)(54906003)(110136005)(316002)(336012)(186003)(36860700001)(36756003)(40460700003)(45080400002)(19627235002)(966005)(86362001)(40480700001)(53546011)(356005)(82740400003)(83380400001)(6486002)(2906002)(478600001)(47076005)(2616005)(82310400005)(559001)(579004)(44824005);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Nov 2022 08:49:39.3412 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 07f31927-30ba-4829-66d7-08dac6e654c6 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: DBAEUR03FT012.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAWPR08MB9733 Content-Language: en-GB Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 SGkgQWxsLA0KDQpJIGJlbGlldmUgdGhlIEVES0lJIENJIGlzIGZvbGxvd2luZyB0aGUgZWRrMi1D b2Rpbmcgc3RhbmRhcmQgcnVsZSA1LjMuNSB3aGljaCBmb3JiaWRzIHByZWZpeGluZyBmaWxlIGlu Y2x1ZGUgZ3VhcmQgbWFjcm8gbmFtZXMgd2l0aCAnXycsIHNlZSBodHRwczovL2VkazItZG9jcy5n aXRib29rLmlvL2Vkay1paS1jLWNvZGluZy1zdGFuZGFyZHMtc3BlY2lmaWNhdGlvbi92L3JlbGVh c2UtMi4yMC81X3NvdXJjZV9maWxlcy81M19pbmNsdWRlX2ZpbGVzIzUuMy41LWFsbC1pbmNsdWRl LWZpbGUtY29udGVudHMtbXVzdC1iZS1wcm90ZWN0ZWQtYnktYS1pbmNsdWRlLWd1YXJkDQoNCklm IEkgdW5kZXJzdGFuZCBjb3JyZWN0bHkgdGhlIGVkazIgQ0kgcnVucyB1bmNydXN0aWZ5IG9uIHRo ZSBwYXRjaCBkaWZmLiBUaGVyZWZvcmUsIHVubGVzcyB5b3UgdG91Y2ggdGhlIG1hY3JvIGluIGFu IGV4aXN0aW5nIGZpbGUsIGl0IHdvdWxkIG5vdCBjb21wbGFpbi4gDQoNClJlZ2FyZHMsDQoNClNh bWkgTXVqYXdhcg0KDQrvu79PbiAxNC8xMS8yMDIyLCAxNzoyMCwgImRldmVsQGVkazIuZ3JvdXBz LmlvIG9uIGJlaGFsZiBvZiBKdWRhaCBWYW5nIHZpYSBncm91cHMuaW8iIDxkZXZlbEBlZGsyLmdy b3Vwcy5pbyBvbiBiZWhhbGYgb2YganVkYWgudmFuZz1pbnRlbC5jb21AZ3JvdXBzLmlvPiB3cm90 ZToNCg0KICAgIEppYW4sDQoNCiAgICBUaGF0J3Mgbm90IHRoZSByZWFzb24gd2h5IEkgcmVtb3Zl ZCB0aGUgbGVhZGluZyAnXycgdW5kZXJzY29yZS4NCiAgICBXaGVuIEkgZG9uJ3QgcmVtb3ZlIGl0 LCB0aGUgRURLMiBDSSBpcyBnaXZpbmcgbWUgYSBmYWlsIGFuZCB0ZWxsaW5nIG1lIGl0IG5lZWRz IHRvIGJlIHJlbW92ZWQuDQogICAgSSBkb24ndCBrbm93IHdoeSB0aGlzIGlzIHRoZSBjYXNlIGJ1 dCBpdCBzZWVtcyB0byBvbmx5IGhhcHBlbiBmb3IgbmV3IGZpbGVzLg0KDQogICAgSnVkYWgNCg0K ICAgIC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQogICAgRnJvbTogV2FuZywgSmlhbiBKIDxq aWFuLmoud2FuZ0BpbnRlbC5jb20+IA0KICAgIFNlbnQ6IFN1bmRheSwgTm92ZW1iZXIgMTMsIDIw MjIgMTE6MTQgUE0NCiAgICBUbzogVmFuZywgSnVkYWggPGp1ZGFoLnZhbmdAaW50ZWwuY29tPjsg ZGV2ZWxAZWRrMi5ncm91cHMuaW8NCiAgICBDYzogR2FvLCBMaW1pbmcgPGdhb2xpbWluZ0BieW9z b2Z0LmNvbS5jbj47IFd1LCBIYW8gQSA8aGFvLmEud3VAaW50ZWwuY29tPjsgTWlzdHJ5LCBOaXNo YW50IEMgPG5pc2hhbnQuYy5taXN0cnlAaW50ZWwuY29tPg0KICAgIFN1YmplY3Q6IFJFOiBbUEFU Q0ggdjUgMDgvMTldIE1kZU1vZHVsZVBrZzogQWRkIHN1cHBvcnQgZm9yIFByb3RlY3RlZCBWYXJp YWJsZXMNCg0KICAgIEhpIEp1ZGFoLA0KDQogICAgSnVzdCBvbmUgY29tbWVudDoNCg0KICAgIEZv ciBhbGwgaGVhZGVyIGZpbGVzLCBubyBuZWVkIHRvIHJlbW92ZSB0aGUgb3BlbmluZyAnXycgb2Yg aW5jbHVkZSBndWFyZCBtYWNyby4NCiAgICBQcm90ZWN0ZWQgdmFyaWFibGUgY29kZSBhcmUgbm93 IGluIGRpZmZlcmVudCBmb2xkZXIgdGhhbiBvcmlnaW5hbCB2YXJpYWJsZSBkcml2ZXIuDQogICAg VGhleSB3b24ndCByZWZlcmVuY2UgY29kZSBmcm9tIGVhY2ggb3RoZXIuIFBsZWFzZSBhZGQgdGhl IG9wZW5pbmcgJ18nIGZvciB0aG9zZQ0KICAgIG1hY3JvcyB0byBjb25maXJtIHRvIGVkazIgY29k aW5nIGNvbnZlbnRpb24uDQoNCiAgICBSZWdhcmRzLA0KICAgIEppYW4NCg0KICAgID4gLS0tLS1P cmlnaW5hbCBNZXNzYWdlLS0tLS0NCiAgICA+IEZyb206IFZhbmcsIEp1ZGFoIDxqdWRhaC52YW5n QGludGVsLmNvbT4NCiAgICA+IFNlbnQ6IFN1bmRheSwgTm92ZW1iZXIgMDYsIDIwMjIgMzozNSBQ TQ0KICAgID4gVG86IGRldmVsQGVkazIuZ3JvdXBzLmlvDQogICAgPiBDYzogV2FuZywgSmlhbiBK IDxqaWFuLmoud2FuZ0BpbnRlbC5jb20+OyBHYW8sIExpbWluZw0KICAgID4gPGdhb2xpbWluZ0Bi eW9zb2Z0LmNvbS5jbj47IFd1LCBIYW8gQSA8aGFvLmEud3VAaW50ZWwuY29tPjsgTWlzdHJ5LA0K ICAgID4gTmlzaGFudCBDIDxuaXNoYW50LmMubWlzdHJ5QGludGVsLmNvbT4NCiAgICA+IFN1Ympl Y3Q6IFtQQVRDSCB2NSAwOC8xOV0gTWRlTW9kdWxlUGtnOiBBZGQgc3VwcG9ydCBmb3IgUHJvdGVj dGVkIFZhcmlhYmxlcw0KICAgID4gDQogICAgPiBSRUY6IGh0dHBzOi8vYnVnemlsbGEudGlhbm9j b3JlLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU5NA0KICAgID4gDQogICAgPiBWNTogQWRkIFJ1bnRp bWVEeGUgVmFyaWFibGUgUHJvdGVjdGlvbiBpbnRvIGEgbmV3IGRpcmVjdG9yeSBhbmQNCiAgICA+ IGtlZXAgZXhpc3RpbmcgVmFyaWFibGUgZm9yIFJ1bnRpbWVEeGUgdW5jaGFuZ2VkLg0KICAgID4g DQogICAgPiB2NDogQXBwbGllZCBjb2RlIHJldmlldyAtIHJlbW92ZSB1bnJlZmVyZW5jZWQgbGli cmFyeSBmcm9tIC5pbmYuDQogICAgPiBVcGRhdGVkIHNvbWUgZnVuY3Rpb24gZGVzY3JpcHRpb24g YW5kIHBhcmFtZXRlcnMuDQogICAgPiANCiAgICA+IFYzOiBGaXggJ05leHRWYXJpYWJsZVN0b3Jl JyBwYXJhbWV0ZXIgZm9yIENvcHlNZW0uICBJdCB3YXMgY2F1c2luZw0KICAgID4gYW4gZXhjZXB0 aW9uLiBOZWVkIHRvIGNvcnJlY3RseSBjYXN0ICdOZXh0VmFyaWFibGVTdG9yZScgc28gYWxsDQog ICAgPiBwbGF0Zm9ybXMgYnVpbGQuICBBZGQgY29kZSB0byBpbml0aWFsaXplICdDb250ZXh0SW4n IHN0cnVjdHVyZSBpbg0KICAgID4gU21tVmFyaWFibGVSZWF5KCkgdG8gZml4IGlzc3VlIHdpdGgg TlVMTCBmdW5jdGlvbiBwb2ludGVyLg0KICAgID4gDQogICAgPiBWMTogQWRkIHN1cHBvcnQgZm9y IFByb3RlY3RlZCBWYXJpYWJsZXMuDQogICAgPiBBZGQgbmV3IEFQSSB0byByZXRyaWV2ZSBWYXJp YWJsZSBJbmZvbWF0aW9uIGFuZCBkYXRhLg0KICAgID4gQWRkIG5ldyBBUEkgdG8gdXBkYXRlIHZh cmlhYmxlIGluIG5vbi12b2xhdGlsZSBzdG9yYWdlIG9yDQogICAgPiBjYWNoZWQgY29weS4NCiAg ICA+IA0KICAgID4gQ2M6IEppYW4gSiBXYW5nIDxqaWFuLmoud2FuZ0BpbnRlbC5jb20+DQogICAg PiBDYzogTGltaW5nIEdhbyA8Z2FvbGltaW5nQGJ5b3NvZnQuY29tLmNuPg0KICAgID4gQ2M6IEhh byBBIFd1IDxoYW8uYS53dUBpbnRlbC5jb20+DQogICAgPiBDYzogTmlzaGFudCBDIE1pc3RyeSA8 bmlzaGFudC5jLm1pc3RyeUBpbnRlbC5jb20+DQogICAgPiBTaWduZWQtb2ZmLWJ5OiBKaWFuIEog V2FuZyA8amlhbi5qLndhbmdAaW50ZWwuY29tPg0KICAgID4gU2lnbmVkLW9mZi1ieTogTmlzaGFu dCBDIE1pc3RyeSA8bmlzaGFudC5jLm1pc3RyeUBpbnRlbC5jb20+DQogICAgPiBTaWduZWQtb2Zm LWJ5OiBKdWRhaCBWYW5nIDxqdWRhaC52YW5nQGludGVsLmNvbT4NCiAgICA+IC0tLQ0KICAgID4g DQogICAgPiBNZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1l RHhlL1J1bnRpbWVEeGVVbml0VGVzDQogICAgPiB0L1ZhcmlhYmxlTG9ja1JlcXVlc3RUb0xvY2tV bml0VGVzdC5pbmYgfCAgIDM2ICsNCiAgICA+IA0KICAgID4gTWRlTW9kdWxlUGtnL1VuaXZlcnNh bC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZVJ1bnRpbWVEeGUNCiAgICA+ IC5pbmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE1MSArDQogICAgPiAg TWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJp YWJsZVNtbS5pbmYNCiAgICA+IHwgIDE1MyArDQogICAgPiANCiAgICA+IE1kZU1vZHVsZVBrZy9V bml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVTbW1SdW50aW0N CiAgICA+IGVEeGUuaW5mICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMTkgKw0K ICAgID4gDQogICAgPiBNZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9S dW50aW1lRHhlL1ZhcmlhYmxlU3RhbmRhbG9uZQ0KICAgID4gTW0uaW5mICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgMTQzICsNCiAgICA+IA0KICAgID4gTWRlTW9kdWxlUGtnL1Vu aXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9Qcml2aWxlZ2VQb2x5bW9ycGhp DQogICAgPiBjLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE1OCArDQog ICAgPiAgTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4 ZS9WYXJpYWJsZS5oDQogICAgPiB8ICA5NDggKysrKysNCiAgICA+IA0KICAgID4gTWRlTW9kdWxl UGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZU5vblZv bGF0aWxlDQogICAgPiAuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA2 NyArDQogICAgPiAgTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVu dGltZUR4ZS9WYXJpYWJsZVBhcnNpbmcuaA0KICAgID4gfCAgNDI0ICsrDQogICAgPiANCiAgICA+ IE1kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFy aWFibGVSdW50aW1lQ2FjDQogICAgPiBoZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAgNTEgKw0KICAgID4gIE1kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJv dGVjdGVkL1J1bnRpbWVEeGUvTWVhc3VyZW1lbnQuYw0KICAgID4gfCAgMzQzICsrDQogICAgPiAg TWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9SZWNs YWltLmMNCiAgICA+IHwgIDUwNCArKysNCiAgICA+IA0KICAgID4gTWRlTW9kdWxlUGtnL1VuaXZl cnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9SdW50aW1lRHhlVW5pdFRlcw0KICAg ID4gdC9WYXJpYWJsZUxvY2tSZXF1ZXN0VG9Mb2NrVW5pdFRlc3QuYyAgIHwgIDYwNyArKysNCiAg ICA+IA0KICAgID4gTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVu dGltZUR4ZS9TcGVjdWxhdGlvbkJhcnJpZXJEDQogICAgPiB4ZS5jICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgICAyNyArDQogICAgPiANCiAgICA+IE1kZU1vZHVsZVBrZy9Vbml2 ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvU3BlY3VsYXRpb25CYXJyaWVyUw0K ICAgID4gbW0uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjYgKw0KICAg ID4gIE1kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUv VGNnTW9yTG9ja0R4ZS5jDQogICAgPiB8ICAxNTMgKw0KICAgID4gIE1kZU1vZHVsZVBrZy9Vbml2 ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVGNnTW9yTG9ja1NtbS5jDQogICAg PiB8ICA1NjkgKysrDQogICAgPiAgTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90 ZWN0ZWQvUnVudGltZUR4ZS9WYXJDaGVjay5jDQogICAgPiB8ICAxMDEgKw0KICAgID4gIE1kZU1v ZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGUu Yw0KICAgID4gfCA0MDM3ICsrKysrKysrKysrKysrKysrKysrDQogICAgPiAgTWRlTW9kdWxlUGtn L1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZUR4ZS5jDQog ICAgPiB8ICA2NzAgKysrKw0KICAgID4gIE1kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUv UHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVFeExpYi5jDQogICAgPiB8ICA0MTcgKysNCiAg ICA+IA0KICAgID4gTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVu dGltZUR4ZS9WYXJpYWJsZUxvY2tSZXF1ZXMNCiAgICA+IHRUb0xvY2suYyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgICA5NiArDQogICAgPiANCiAgICA+IE1kZU1vZHVsZVBrZy9Vbml2 ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVOb25Wb2xhdGlsZQ0K ICAgID4gLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1MzcgKysrDQog ICAgPiAgTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4 ZS9WYXJpYWJsZVBhcnNpbmcuYw0KICAgID4gfCAxMTEwICsrKysrKw0KICAgID4gDQogICAgPiBN ZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1Zhcmlh YmxlUG9saWN5U21tDQogICAgPiBEeGUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgNTc1ICsrKw0KICAgID4gDQogICAgPiBNZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1Zhcmlh YmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlUnVudGltZUNhYw0KICAgID4gaGUuYyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTU4ICsNCiAgICA+ICBNZGVNb2R1 bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlU21t LmMNCiAgICA+IHwgMTI2OCArKysrKysNCiAgICA+IA0KICAgID4gTWRlTW9kdWxlUGtnL1VuaXZl cnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZVNtbVJ1bnRpbQ0KICAg ID4gZUR4ZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTg5NSArKysrKysr KysNCiAgICA+IA0KICAgID4gTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0 ZWQvUnVudGltZUR4ZS9WYXJpYWJsZVN0YW5kYWxvbmUNCiAgICA+IE1tLmMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICA4OSArDQogICAgPiANCiAgICA+IE1kZU1vZHVsZVBr Zy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVUcmFkaXRp b25hbA0KICAgID4gTW0uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMzAg Kw0KICAgID4gDQogICAgPiBNZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3Rl ZC9SdW50aW1lRHhlL1ZhcmlhYmxlUnVudGltZUR4ZQ0KICAgID4gLnVuaSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgIDIyICsNCiAgICA+IA0KICAgID4gTWRlTW9kdWxlUGtn L1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZVJ1bnRpbWVE eGUNCiAgICA+IEV4dHJhLnVuaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNCAr DQogICAgPiAgTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGlt ZUR4ZS9WYXJpYWJsZVNtbS51bmkNCiAgICA+IHwgICAyNyArDQogICAgPiANCiAgICA+IE1kZU1v ZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVT bW1FeHRyYS51DQogICAgPiBuaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAgMTQgKw0KICAgID4gDQogICAgPiBNZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1By b3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlU21tUnVudGltDQogICAgPiBlRHhlLnVuaSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIzICsNCiAgICA+IA0KICAgID4gTWRlTW9k dWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZVNt bVJ1bnRpbQ0KICAgID4gZUR4ZUV4dHJhLnVuaSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg ICAxNCArDQogICAgPiAgMzYgZmlsZXMgY2hhbmdlZCwgMTU2NzYgaW5zZXJ0aW9ucygrKQ0KICAg ID4gDQogICAgPiBkaWZmIC0tZ2l0DQogICAgPiBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFy aWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvUnVudGltZUR4ZVVuaXRUDQogICAgPiBlc3QvVmFy aWFibGVMb2NrUmVxdWVzdFRvTG9ja1VuaXRUZXN0LmluZg0KICAgID4gYi9NZGVNb2R1bGVQa2cv VW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1J1bnRpbWVEeGVVbml0VA0K ICAgID4gZXN0L1ZhcmlhYmxlTG9ja1JlcXVlc3RUb0xvY2tVbml0VGVzdC5pbmYNCiAgICA+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgPiBpbmRleCAwMDAwMDAwMDAwMDAuLjU4NmQ4NzdmY2E5 MA0KICAgID4gLS0tIC9kZXYvbnVsbA0KICAgID4gKysrDQogICAgPiBiL01kZU1vZHVsZVBrZy9V bml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvUnVudGltZUR4ZVVuaXRUDQog ICAgPiBlc3QvVmFyaWFibGVMb2NrUmVxdWVzdFRvTG9ja1VuaXRUZXN0LmluZg0KICAgID4gQEAg LTAsMCArMSwzNiBAQA0KICAgID4gKyMjIEBmaWxlDQogICAgPiArIyBUaGlzIGlzIGEgaG9zdC1i YXNlZCB1bml0IHRlc3QgZm9yIHRoZSBWYXJpYWJsZUxvY2tSZXF1ZXN0VG9Mb2NrIHNoaW0uDQog ICAgPiArIw0KICAgID4gKyMgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uDQog ICAgPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KICAg ID4gKyMjDQogICAgPiArDQogICAgPiArW0RlZmluZXNdDQogICAgPiArICBJTkZfVkVSU0lPTiAg ICAgICAgID0gMHgwMDAxMDAxNw0KICAgID4gKyAgQkFTRV9OQU1FICAgICAgICAgICA9IFZhcmlh YmxlTG9ja1JlcXVlc3RUb0xvY2tVbml0VGVzdA0KICAgID4gKyAgRklMRV9HVUlEICAgICAgICAg ICA9IEE2NTdGQ0Q4LTRBMEQtNDZCNC04REM5LUYwODk2MjYzODNBRA0KICAgID4gKyAgVkVSU0lP Tl9TVFJJTkcgICAgICA9IDEuMA0KICAgID4gKyAgTU9EVUxFX1RZUEUgICAgICAgICA9IEhPU1Rf QVBQTElDQVRJT04NCiAgICA+ICsNCiAgICA+ICsjDQogICAgPiArIyBUaGUgZm9sbG93aW5nIGlu Zm9ybWF0aW9uIGlzIGZvciByZWZlcmVuY2Ugb25seSBhbmQgbm90IHJlcXVpcmVkIGJ5IHRoZSBi dWlsZA0KICAgID4gdG9vbHMuDQogICAgPiArIw0KICAgID4gKyMgIFZBTElEX0FSQ0hJVEVDVFVS RVMgICAgICAgICAgID0gSUEzMiBYNjQgQVJNIEFBUkNINjQNCiAgICA+ICsjDQogICAgPiArDQog ICAgPiArW1NvdXJjZXNdDQogICAgPiArICBWYXJpYWJsZUxvY2tSZXF1ZXN0VG9Mb2NrVW5pdFRl c3QuYw0KICAgID4gKyAgLi4vVmFyaWFibGVMb2NrUmVxdWVzdFRvTG9jay5jDQogICAgPiArDQog ICAgPiArW1BhY2thZ2VzXQ0KICAgID4gKyAgTWRlUGtnL01kZVBrZy5kZWMNCiAgICA+ICsgIE1k ZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVjDQogICAgPiArICBVbml0VGVzdEZyYW1ld29ya1Br Zy9Vbml0VGVzdEZyYW1ld29ya1BrZy5kZWMNCiAgICA+ICsNCiAgICA+ICtbTGlicmFyeUNsYXNz ZXNdDQogICAgPiArICBVbml0VGVzdExpYg0KICAgID4gKyAgRGVidWdMaWINCiAgICA+ICsgIFZh cmlhYmxlUG9saWN5TGliDQogICAgPiArICBWYXJpYWJsZVBvbGljeUhlbHBlckxpYg0KICAgID4g KyAgQmFzZU1lbW9yeUxpYg0KICAgID4gKyAgTWVtb3J5QWxsb2NhdGlvbkxpYg0KICAgID4gZGlm ZiAtLWdpdA0KICAgID4gYS9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3Rl ZC9SdW50aW1lRHhlL1ZhcmlhYmxlUnVudGltZUQNCiAgICA+IHhlLmluZg0KICAgID4gYi9NZGVN b2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxl UnVudGltZUQNCiAgICA+IHhlLmluZg0KICAgID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICA+ IGluZGV4IDAwMDAwMDAwMDAwMC4uNmFkYzJjNjM2ZTg0DQogICAgPiAtLS0gL2Rldi9udWxsDQog ICAgPiArKysNCiAgICA+IGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0 ZWQvUnVudGltZUR4ZS9WYXJpYWJsZVJ1bnRpbWVEDQogICAgPiB4ZS5pbmYNCiAgICA+IEBAIC0w LDAgKzEsMTUxIEBADQogICAgPiArIyMgQGZpbGUNCiAgICA+ICsjICBQcm92aWRlcyB2YXJpYWJs ZSBzZXJ2aWNlLg0KICAgID4gKyMNCiAgICA+ICsjICBUaGlzIG1vZHVsZSBpbnN0YWxscyB2YXJp YWJsZSBhcmNoIHByb3RvY29sIGFuZCB2YXJpYWJsZSB3cml0ZSBhcmNoIHByb3RvY29sDQogICAg PiB0byBwcm92aWRlDQogICAgPiArIyAgdmFyaWFibGUgc2VydmljZXM6IFNldFZhcmlhYmxlLCBH ZXRWYXJpYWJsZSwgR2V0TmV4dFZhcmlhYmxlTmFtZSBhbmQNCiAgICA+IFF1ZXJ5VmFyaWFibGVJ bmZvLg0KICAgID4gKyMNCiAgICA+ICsjICBDYXV0aW9uOiBUaGlzIG1vZHVsZSByZXF1aXJlcyBh ZGRpdGlvbmFsIHJldmlldyB3aGVuIG1vZGlmaWVkLg0KICAgID4gKyMgIFRoaXMgZHJpdmVyIHdp bGwgaGF2ZSBleHRlcm5hbCBpbnB1dCAtIHZhcmlhYmxlIGRhdGEuDQogICAgPiArIyAgVGhpcyBl eHRlcm5hbCBpbnB1dCBtdXN0IGJlIHZhbGlkYXRlZCBjYXJlZnVsbHkgdG8gYXZvaWQgc2VjdXJp dHkgaXNzdWVzIHN1Y2gNCiAgICA+IGFzDQogICAgPiArIyAgYnVmZmVyIG92ZXJmbG93IG9yIGlu dGVnZXIgb3ZlcmZsb3cuDQogICAgPiArIw0KICAgID4gKyMgQ29weXJpZ2h0IChjKSAyMDA2IC0g MjAyMiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KICAgID4g KyMgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uDQogICAgPiArIyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KICAgID4gKyMNCiAgICA+ICsj Iw0KICAgID4gKw0KICAgID4gK1tEZWZpbmVzXQ0KICAgID4gKyAgSU5GX1ZFUlNJT04gICAgICAg ICAgICAgICAgICAgID0gMHgwMDAxMDAwNQ0KICAgID4gKyAgQkFTRV9OQU1FICAgICAgICAgICAg ICAgICAgICAgID0gVmFyaWFibGVSdW50aW1lRHhlDQogICAgPiArICBNT0RVTEVfVU5JX0ZJTEUg ICAgICAgICAgICAgICAgPSBWYXJpYWJsZVJ1bnRpbWVEeGUudW5pDQogICAgPiArICBGSUxFX0dV SUQgICAgICAgICAgICAgICAgICAgICAgPSAxNDZGNDQ0OC01NkJGLTQwNUMtQThDNC1CNzdGRkQy NEJFMDANCiAgICA+ICsgIE1PRFVMRV9UWVBFICAgICAgICAgICAgICAgICAgICA9IERYRV9SVU5U SU1FX0RSSVZFUg0KICAgID4gKyAgVkVSU0lPTl9TVFJJTkcgICAgICAgICAgICAgICAgID0gMS4w DQogICAgPiArICBFTlRSWV9QT0lOVCAgICAgICAgICAgICAgICAgICAgPSBWYXJpYWJsZVNlcnZp Y2VJbml0aWFsaXplDQogICAgPiArDQogICAgPiArIw0KICAgID4gKyMgVGhlIGZvbGxvd2luZyBp bmZvcm1hdGlvbiBpcyBmb3IgcmVmZXJlbmNlIG9ubHkgYW5kIG5vdCByZXF1aXJlZCBieSB0aGUg YnVpbGQNCiAgICA+IHRvb2xzLg0KICAgID4gKyMNCiAgICA+ICsjICBWQUxJRF9BUkNISVRFQ1RV UkVTICAgICAgICAgICA9IElBMzIgWDY0IEVCQw0KICAgID4gKyMNCiAgICA+ICsjICBWSVJUVUFM X0FERFJFU1NfTUFQX0NBTExCQUNLICA9ICBWYXJpYWJsZUNsYXNzQWRkcmVzc0NoYW5nZUV2ZW50 DQogICAgPiArIw0KICAgID4gKw0KICAgID4gK1tTb3VyY2VzXQ0KICAgID4gKyAgUmVjbGFpbS5j DQogICAgPiArICBWYXJpYWJsZS5jDQogICAgPiArICBWYXJpYWJsZUR4ZS5jDQogICAgPiArICBW YXJpYWJsZS5oDQogICAgPiArICBWYXJpYWJsZU5vblZvbGF0aWxlLmMNCiAgICA+ICsgIFZhcmlh YmxlTm9uVm9sYXRpbGUuaA0KICAgID4gKyAgVmFyaWFibGVQYXJzaW5nLmMNCiAgICA+ICsgIFZh cmlhYmxlUGFyc2luZy5oDQogICAgPiArICBWYXJpYWJsZVJ1bnRpbWVDYWNoZS5jDQogICAgPiAr ICBWYXJpYWJsZVJ1bnRpbWVDYWNoZS5oDQogICAgPiArICBQcml2aWxlZ2VQb2x5bW9ycGhpYy5o DQogICAgPiArICBNZWFzdXJlbWVudC5jDQogICAgPiArICBUY2dNb3JMb2NrRHhlLmMNCiAgICA+ ICsgIFZhckNoZWNrLmMNCiAgICA+ICsgIFZhcmlhYmxlRXhMaWIuYw0KICAgID4gKyAgU3BlY3Vs YXRpb25CYXJyaWVyRHhlLmMNCiAgICA+ICsgIFZhcmlhYmxlTG9ja1JlcXVlc3RUb0xvY2suYw0K ICAgID4gKw0KICAgID4gK1tQYWNrYWdlc10NCiAgICA+ICsgIE1kZVBrZy9NZGVQa2cuZGVjDQog ICAgPiArICBNZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KICAgID4gKw0KICAgID4gK1tM aWJyYXJ5Q2xhc3Nlc10NCiAgICA+ICsgIE1lbW9yeUFsbG9jYXRpb25MaWINCiAgICA+ICsgIEJh c2VMaWINCiAgICA+ICsgIFN5bmNocm9uaXphdGlvbkxpYg0KICAgID4gKyAgVWVmaUxpYg0KICAg ID4gKyAgVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliDQogICAgPiArICBCYXNlTWVtb3J5TGliDQog ICAgPiArICBEZWJ1Z0xpYg0KICAgID4gKyAgVWVmaVJ1bnRpbWVMaWINCiAgICA+ICsgIER4ZVNl cnZpY2VzVGFibGVMaWINCiAgICA+ICsgIFVlZmlEcml2ZXJFbnRyeVBvaW50DQogICAgPiArICBQ Y2RMaWINCiAgICA+ICsgIEhvYkxpYg0KICAgID4gKyAgVHBtTWVhc3VyZW1lbnRMaWINCiAgICA+ ICsgIEF1dGhWYXJpYWJsZUxpYg0KICAgID4gKyAgVmFyQ2hlY2tMaWINCiAgICA+ICsgIFZhcmlh YmxlRmxhc2hJbmZvTGliDQogICAgPiArICBWYXJpYWJsZVBvbGljeUxpYg0KICAgID4gKyAgVmFy aWFibGVQb2xpY3lIZWxwZXJMaWINCiAgICA+ICsgIFNhZmVJbnRMaWINCiAgICA+ICsgIFByb3Rl Y3RlZFZhcmlhYmxlTGliDQogICAgPiArDQogICAgPiArW1Byb3RvY29sc10NCiAgICA+ICsgIGdF ZmlGaXJtd2FyZVZvbHVtZUJsb2NrUHJvdG9jb2xHdWlkICAgICAgICAgICAjIyBDT05TVU1FUw0K ICAgID4gKyAgIyMgQ09OU1VNRVMNCiAgICA+ICsgICMjIE5PVElGWQ0KICAgID4gKyAgZ0VmaUZh dWx0VG9sZXJhbnRXcml0ZVByb3RvY29sR3VpZA0KICAgID4gKyAgZ0VmaVZhcmlhYmxlV3JpdGVB cmNoUHJvdG9jb2xHdWlkICAgICAgICAgICAgICMjIFBST0RVQ0VTDQogICAgPiArICBnRWZpVmFy aWFibGVBcmNoUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICAgIyMgUFJPRFVDRVMNCiAgICA+ ICsgIGdFZGtpaVZhcmlhYmxlTG9ja1Byb3RvY29sR3VpZCAgICAgICAgICAgICAgICAjIyBQUk9E VUNFUw0KICAgID4gKyAgZ0Vka2lpVmFyaWFibGVQb2xpY3lQcm90b2NvbEd1aWQgICAgICAgICAg ICAgICMjIENPTlNVTUVTDQogICAgPiArICBnRWRraWlWYXJDaGVja1Byb3RvY29sR3VpZCAgICAg ICAgICAgICAgICAgICAgIyMgUFJPRFVDRVMNCiAgICA+ICsNCiAgICA+ICtbR3VpZHNdDQogICAg PiArICAjIyBTT01FVElNRVNfQ09OU1VNRVMgICAjIyBHVUlEICMgU2lnbmF0dXJlIG9mIFZhcmlh YmxlIHN0b3JlIGhlYWRlcg0KICAgID4gKyAgIyMgU09NRVRJTUVTX1BST0RVQ0VTICAgIyMgR1VJ RCAjIFNpZ25hdHVyZSBvZiBWYXJpYWJsZSBzdG9yZSBoZWFkZXINCiAgICA+ICsgICMjIFNPTUVU SU1FU19DT05TVU1FUyAgICMjIEhPQg0KICAgID4gKyAgIyMgU09NRVRJTUVTX1BST0RVQ0VTICAg IyMgU3lzdGVtVGFibGUNCiAgICA+ICsgIGdFZmlBdXRoZW50aWNhdGVkVmFyaWFibGVHdWlkDQog ICAgPiArDQogICAgPiArICAjIyBTT01FVElNRVNfQ09OU1VNRVMgICAjIyBHVUlEICMgU2lnbmF0 dXJlIG9mIFZhcmlhYmxlIHN0b3JlIGhlYWRlcg0KICAgID4gKyAgIyMgU09NRVRJTUVTX1BST0RV Q0VTICAgIyMgR1VJRCAjIFNpZ25hdHVyZSBvZiBWYXJpYWJsZSBzdG9yZSBoZWFkZXINCiAgICA+ ICsgICMjIFNPTUVUSU1FU19DT05TVU1FUyAgICMjIEhPQg0KICAgID4gKyAgIyMgU09NRVRJTUVT X1BST0RVQ0VTICAgIyMgU3lzdGVtVGFibGUNCiAgICA+ICsgIGdFZmlWYXJpYWJsZUd1aWQNCiAg ICA+ICsNCiAgICA+ICsgICMjIFNPTUVUSU1FU19DT05TVU1FUyAgICMjIFZhcmlhYmxlOkwiUGxh dGZvcm1MYW5nIg0KICAgID4gKyAgIyMgU09NRVRJTUVTX1BST0RVQ0VTICAgIyMgVmFyaWFibGU6 TCJQbGF0Zm9ybUxhbmciDQogICAgPiArICAjIyBTT01FVElNRVNfQ09OU1VNRVMgICAjIyBWYXJp YWJsZTpMIkxhbmciDQogICAgPiArICAjIyBTT01FVElNRVNfUFJPRFVDRVMgICAjIyBWYXJpYWJs ZTpMIkxhbmciDQogICAgPiArICAjIyBTT01FVElNRVNfQ09OU1VNRVMgICAjIyBWYXJpYWJsZTpM IlBLIg0KICAgID4gKyAgIyMgU09NRVRJTUVTX0NPTlNVTUVTICAgIyMgVmFyaWFibGU6TCJLRUsi DQogICAgPiArICAjIyBTT01FVElNRVNfQ09OU1VNRVMgICAjIyBWYXJpYWJsZTpMIlNlY3VyZUJv b3QiDQogICAgPiArICBnRWZpR2xvYmFsVmFyaWFibGVHdWlkDQogICAgPiArDQogICAgPiArICBn RWZpTWVtb3J5T3ZlcndyaXRlQ29udHJvbERhdGFHdWlkICAgICAgICAgICAgIyMgU09NRVRJTUVT X0NPTlNVTUVTICAgIyMNCiAgICA+IFZhcmlhYmxlOkwiTWVtb3J5T3ZlcndyaXRlUmVxdWVzdENv bnRyb2wiDQogICAgPiArICBnRWZpTWVtb3J5T3ZlcndyaXRlUmVxdWVzdENvbnRyb2xMb2NrR3Vp ZCAgICAgIyMgU09NRVRJTUVTX1BST0RVQ0VTDQogICAgPiAjIyBWYXJpYWJsZTpMIk1lbW9yeU92 ZXJ3cml0ZVJlcXVlc3RDb250cm9sTG9jayINCiAgICA+ICsNCiAgICA+ICsgIGdFZmlFdmVudFZp cnR1YWxBZGRyZXNzQ2hhbmdlR3VpZCAgICAgICAgICAgICAjIyBDT05TVU1FUyAgICAgICAgICAg ICAjIyBFdmVudA0KICAgID4gKyAgZ0VmaVN5c3RlbU52RGF0YUZ2R3VpZCAgICAgICAgICAgICAg ICAgICAgICAgICMjIENPTlNVTUVTICAgICAgICAgICAgICMjIEdVSUQNCiAgICA+ICsgIGdFZmlF bmRPZkR4ZUV2ZW50R3JvdXBHdWlkICAgICAgICAgICAgICAgICAgICAjIyBDT05TVU1FUyAgICAg ICAgICAgICAjIyBFdmVudA0KICAgID4gKyAgZ0Vka2lpRmF1bHRUb2xlcmFudFdyaXRlR3VpZCAg ICAgICAgICAgICAgICAgICMjIFNPTUVUSU1FU19DT05TVU1FUyAgICMjIEhPQg0KICAgID4gKw0K ICAgID4gKyAgIyMgU09NRVRJTUVTX0NPTlNVTUVTICAgIyMgVmFyaWFibGU6TCJWYXJFcnJvckZs YWciDQogICAgPiArICAjIyBTT01FVElNRVNfUFJPRFVDRVMgICAjIyBWYXJpYWJsZTpMIlZhckVy cm9yRmxhZyINCiAgICA+ICsgIGdFZGtpaVZhckVycm9yRmxhZ0d1aWQNCiAgICA+ICsNCiAgICA+ ICsgICMjIFNPTUVUSU1FU19DT05TVU1FUyAgICMjIFZhcmlhYmxlOkwiZGIiDQogICAgPiArICAj IyBTT01FVElNRVNfQ09OU1VNRVMgICAjIyBWYXJpYWJsZTpMImRieCINCiAgICA+ICsgICMjIFNP TUVUSU1FU19DT05TVU1FUyAgICMjIFZhcmlhYmxlOkwiZGJ0Ig0KICAgID4gKyAgZ0VmaUltYWdl U2VjdXJpdHlEYXRhYmFzZUd1aWQNCiAgICA+ICsNCiAgICA+ICtbUGNkXQ0KICAgID4gKyAgZ0Vm aU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZE1heFZhcmlhYmxlU2l6ZSAgICAgICAgICAg ICAgICAgIyMNCiAgICA+IENPTlNVTUVTDQogICAgPiArICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5T cGFjZUd1aWQuUGNkTWF4QXV0aFZhcmlhYmxlU2l6ZSAgICAgICAgICAgICAjIw0KICAgID4gQ09O U1VNRVMNCiAgICA+ICsgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RNYXhWb2xh dGlsZVZhcmlhYmxlU2l6ZSAgICAgICAgICMjDQogICAgPiBDT05TVU1FUw0KICAgID4gKyAgZ0Vm aU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZE1heEhhcmR3YXJlRXJyb3JWYXJpYWJsZVNp emUgICAgIyMNCiAgICA+IENPTlNVTUVTDQogICAgPiArICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5T cGFjZUd1aWQuUGNkVmFyaWFibGVTdG9yZVNpemUgICAgICAgICAgICAgICAjIw0KICAgID4gQ09O U1VNRVMNCiAgICA+ICsgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RId0VyclN0 b3JhZ2VTaXplICAgICAgICAgICAgICAgICMjDQogICAgPiBDT05TVU1FUw0KICAgID4gKyAgZ0Vm aU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZE1heFVzZXJOdlZhcmlhYmxlU3BhY2VTaXpl DQogICAgPiAjIyBDT05TVU1FUw0KICAgID4gKw0KICAgID4gZ0VmaU1kZU1vZHVsZVBrZ1Rva2Vu U3BhY2VHdWlkLlBjZEJvb3R0aW1lUmVzZXJ2ZWROdlZhcmlhYmxlU3BhY2VTaXplDQogICAgPiAj IyBDT05TVU1FUw0KICAgID4gKyAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFJl Y2xhaW1WYXJpYWJsZVNwYWNlQXRFbmRPZkR4ZSAgIyMNCiAgICA+IENPTlNVTUVTDQogICAgPiAr ICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkRW11VmFyaWFibGVOdk1vZGVFbmFi bGUgICAgICAgICAjIw0KICAgID4gU09NRVRJTUVTX0NPTlNVTUVTDQogICAgPiArICBnRWZpTWRl TW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkRW11VmFyaWFibGVOdlN0b3JlUmVzZXJ2ZWQgICAg ICAjIw0KICAgID4gU09NRVRJTUVTX0NPTlNVTUVTDQogICAgPiArDQogICAgPiArW0ZlYXR1cmVQ Y2RdDQogICAgPiArICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkVmFyaWFibGVD b2xsZWN0U3RhdGlzdGljcyAgIyMNCiAgICA+IENPTlNVTUVTICMgc3RhdGlzdGljIHRoZSBpbmZv cm1hdGlvbiBvZiB2YXJpYWJsZS4NCiAgICA+ICsgIGdFZmlNZGVQa2dUb2tlblNwYWNlR3VpZC5Q Y2RVZWZpVmFyaWFibGVEZWZhdWx0TGFuZ0RlcHJlY2F0ZSAjIw0KICAgID4gQ09OU1VNRVMgIyBB dXRvIHVwZGF0ZSBQbGF0Zm9ybUxhbmcvTGFuZw0KICAgID4gKw0KICAgID4gK1tEZXBleF0NCiAg ICA+ICsgIFRSVUUNCiAgICA+ICsNCiAgICA+ICtbVXNlckV4dGVuc2lvbnMuVGlhbm9Db3JlLiJF eHRyYUZpbGVzIl0NCiAgICA+ICsgIFZhcmlhYmxlUnVudGltZUR4ZUV4dHJhLnVuaQ0KICAgID4g ZGlmZiAtLWdpdA0KICAgID4gYS9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3Rl Y3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlU21tLmluZg0KICAgID4gYi9NZGVNb2R1bGVQa2cvVW5p dmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlU21tLmluZg0KICAg ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICA+IGluZGV4IDAwMDAwMDAwMDAwMC4uMjY1MWVj NTE0ZGYzDQogICAgPiAtLS0gL2Rldi9udWxsDQogICAgPiArKysNCiAgICA+IGIvTWRlTW9kdWxl UGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZVNtbS5p bmYNCiAgICA+IEBAIC0wLDAgKzEsMTUzIEBADQogICAgPiArIyMgQGZpbGUNCiAgICA+ICsjICBQ cm92aWRlcyBTTU0gdmFyaWFibGUgc2VydmljZS4NCiAgICA+ICsjDQogICAgPiArIyAgVGhpcyBt b2R1bGUgaW5zdGFsbHMgU01NIHZhcmlhYmxlIHByb3RvY29sIGludG8gU01NIHByb3RvY29sIGRh dGFiYXNlLA0KICAgID4gKyMgIHdoaWNoIGNhbiBiZSB1c2VkIGJ5IFNNTSBkcml2ZXIsIGFuZCBp bnN0YWxscyBTTU0gdmFyaWFibGUgcHJvdG9jb2wNCiAgICA+ICsjICBpbnRvIEJTIHByb3RvY29s IGRhdGFiYXNlLCB3aGljaCBjYW4gYmUgdXNlZCB0byBub3RpZnkgdGhlIFNNTSBSdW50aW1lDQog ICAgPiArIyAgRHhlIGRyaXZlciB0aGF0IHRoZSBTTU0gdmFyaWFibGUgc2VydmljZSBpcyByZWFk eS4NCiAgICA+ICsjICBUaGlzIG1vZHVsZSBzaG91bGQgYmUgdXNlZCB3aXRoIFNNTSBSdW50aW1l IERYRSBtb2R1bGUgdG9nZXRoZXIuIFRoZQ0KICAgID4gKyMgIFNNTSBSdW50aW1lIERYRSBtb2R1 bGUgd291bGQgaW5zdGFsbCB2YXJpYWJsZSBhcmNoIHByb3RvY29sIGFuZCB2YXJpYWJsZQ0KICAg ID4gKyMgIHdyaXRlIGFyY2ggcHJvdG9jb2wgYmFzZWQgb24gU01NIHZhcmlhYmxlIG1vZHVsZS4N CiAgICA+ICsjDQogICAgPiArIyAgQ2F1dGlvbjogVGhpcyBtb2R1bGUgcmVxdWlyZXMgYWRkaXRp b25hbCByZXZpZXcgd2hlbiBtb2RpZmllZC4NCiAgICA+ICsjICBUaGlzIGRyaXZlciB3aWxsIGhh dmUgZXh0ZXJuYWwgaW5wdXQgLSB2YXJpYWJsZSBkYXRhIGFuZCBjb21tdW5pY2F0ZSBidWZmZXIg aW4NCiAgICA+IFNNTSBtb2RlLg0KICAgID4gKyMgIFRoaXMgZXh0ZXJuYWwgaW5wdXQgbXVzdCBi ZSB2YWxpZGF0ZWQgY2FyZWZ1bGx5IHRvIGF2b2lkIHNlY3VyaXR5IGlzc3VlcyBzdWNoDQogICAg PiBhcw0KICAgID4gKyMgIGJ1ZmZlciBvdmVyZmxvdyBvciBpbnRlZ2VyIG92ZXJmbG93Lg0KICAg ID4gKyMgICAgVGhlIHdob2xlIFNNTSBhdXRoZW50aWNhdGlvbiB2YXJpYWJsZSBkZXNpZ24gcmVs aWVzIG9uIHRoZSBpbnRlZ3JpdHkgb2YNCiAgICA+IGZsYXNoIHBhcnQgYW5kIFNNTS4NCiAgICA+ ICsjICB3aGljaCBpcyBhc3N1bWVkIHRvIGJlIHByb3RlY3RlZCBieSBwbGF0Zm9ybS4gIEFsbCB2 YXJpYWJsZSBjb2RlIGFuZA0KICAgID4gbWV0YWRhdGEgaW4gZmxhc2gvU01NIE1lbW9yeQ0KICAg ID4gKyMgIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCBhdXRob3JpemF0aW9uLiBJZiBwbGF0 Zm9ybSBmYWlscyB0byBwcm90ZWN0IHRoZXNlDQogICAgPiByZXNvdXJjZXMsDQogICAgPiArIyAg dGhlIGF1dGhlbnRpY2F0aW9uIHNlcnZpY2UgcHJvdmlkZWQgaW4gdGhpcyBkcml2ZXIgd2lsbCBi ZSBicm9rZW4sIGFuZCB0aGUNCiAgICA+IGJlaGF2aW9yIGlzIHVuZGVmaW5lZC4NCiAgICA+ICsj DQogICAgPiArIyBDb3B5cmlnaHQgKGMpIDIwMTAgLSAyMDIyLCBJbnRlbCBDb3Jwb3JhdGlvbi4g QWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQogICAgPiArIyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29m dCBDb3Jwb3JhdGlvbi4NCiAgICA+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1D bGF1c2UtUGF0ZW50DQogICAgPiArIw0KICAgID4gKyMjDQogICAgPiArDQogICAgPiArW0RlZmlu ZXNdDQogICAgPiArICBJTkZfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgPSAweDAwMDEwMDA1 DQogICAgPiArICBCQVNFX05BTUUgICAgICAgICAgICAgICAgICAgICAgPSBWYXJpYWJsZVNtbQ0K ICAgID4gKyAgTU9EVUxFX1VOSV9GSUxFICAgICAgICAgICAgICAgID0gVmFyaWFibGVTbW0udW5p DQogICAgPiArICBGSUxFX0dVSUQgICAgICAgICAgICAgICAgICAgICAgPSAxQzMyRkRERi03RkYx LTRFRTUtQkRBMC1FRDlBQUM2MjNEM0MNCiAgICA+ICsgIE1PRFVMRV9UWVBFICAgICAgICAgICAg ICAgICAgICA9IERYRV9TTU1fRFJJVkVSDQogICAgPiArICBWRVJTSU9OX1NUUklORyAgICAgICAg ICAgICAgICAgPSAxLjANCiAgICA+ICsgIFBJX1NQRUNJRklDQVRJT05fVkVSU0lPTiAgICAgICA9 IDB4MDAwMTAwMEENCiAgICA+ICsgIEVOVFJZX1BPSU5UICAgICAgICAgICAgICAgICAgICA9IFZh cmlhYmxlU2VydmljZUluaXRpYWxpemUNCiAgICA+ICsNCiAgICA+ICsjDQogICAgPiArIyBUaGUg Zm9sbG93aW5nIGluZm9ybWF0aW9uIGlzIGZvciByZWZlcmVuY2Ugb25seSBhbmQgbm90IHJlcXVp cmVkIGJ5IHRoZSBidWlsZA0KICAgID4gdG9vbHMuDQogICAgPiArIw0KICAgID4gKyMgIFZBTElE X0FSQ0hJVEVDVFVSRVMgICAgICAgICAgID0gSUEzMiBYNjQNCiAgICA+ICsjDQogICAgPiArDQog ICAgPiArDQogICAgPiArW1NvdXJjZXNdDQogICAgPiArICBSZWNsYWltLmMNCiAgICA+ICsgIFZh cmlhYmxlLmMNCiAgICA+ICsgIFZhcmlhYmxlVHJhZGl0aW9uYWxNbS5jDQogICAgPiArICBWYXJp YWJsZVNtbS5jDQogICAgPiArICBWYXJpYWJsZU5vblZvbGF0aWxlLmMNCiAgICA+ICsgIFZhcmlh YmxlTm9uVm9sYXRpbGUuaA0KICAgID4gKyAgVmFyaWFibGVQYXJzaW5nLmMNCiAgICA+ICsgIFZh cmlhYmxlUGFyc2luZy5oDQogICAgPiArICBWYXJpYWJsZVJ1bnRpbWVDYWNoZS5jDQogICAgPiAr ICBWYXJpYWJsZVJ1bnRpbWVDYWNoZS5oDQogICAgPiArICBWYXJDaGVjay5jDQogICAgPiArICBW YXJpYWJsZS5oDQogICAgPiArICBQcml2aWxlZ2VQb2x5bW9ycGhpYy5oDQogICAgPiArICBWYXJp YWJsZUV4TGliLmMNCiAgICA+ICsgIFRjZ01vckxvY2tTbW0uYw0KICAgID4gKyAgU3BlY3VsYXRp b25CYXJyaWVyU21tLmMNCiAgICA+ICsgIFZhcmlhYmxlTG9ja1JlcXVlc3RUb0xvY2suYw0KICAg ID4gKw0KICAgID4gK1tQYWNrYWdlc10NCiAgICA+ICsgIE1kZVBrZy9NZGVQa2cuZGVjDQogICAg PiArICBNZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KICAgID4gKw0KICAgID4gK1tMaWJy YXJ5Q2xhc3Nlc10NCiAgICA+ICsgIFVlZmlEcml2ZXJFbnRyeVBvaW50DQogICAgPiArICBNZW1v cnlBbGxvY2F0aW9uTGliDQogICAgPiArICBCYXNlTGliDQogICAgPiArICBTeW5jaHJvbml6YXRp b25MaWINCiAgICA+ICsgIFVlZmlMaWINCiAgICA+ICsgIE1tU2VydmljZXNUYWJsZUxpYg0KICAg ID4gKyAgQmFzZU1lbW9yeUxpYg0KICAgID4gKyAgRGVidWdMaWINCiAgICA+ICsgIER4ZVNlcnZp Y2VzVGFibGVMaWINCiAgICA+ICsgIEhvYkxpYg0KICAgID4gKyAgUGNkTGliDQogICAgPiArICBT bW1NZW1MaWINCiAgICA+ICsgIEF1dGhWYXJpYWJsZUxpYg0KICAgID4gKyAgVmFyQ2hlY2tMaWIN CiAgICA+ICsgIFVlZmlCb290U2VydmljZXNUYWJsZUxpYg0KICAgID4gKyAgVmFyaWFibGVGbGFz aEluZm9MaWINCiAgICA+ICsgIFZhcmlhYmxlUG9saWN5TGliDQogICAgPiArICBWYXJpYWJsZVBv bGljeUhlbHBlckxpYg0KICAgID4gKyAgU2FmZUludExpYg0KICAgID4gKyAgUHJvdGVjdGVkVmFy aWFibGVMaWINCiAgICA+ICsNCiAgICA+ICtbUHJvdG9jb2xzXQ0KICAgID4gKyAgZ0VmaVNtbUZp cm13YXJlVm9sdW1lQmxvY2tQcm90b2NvbEd1aWQgICAgICAgICMjIENPTlNVTUVTDQogICAgPiAr ICAjIyBDT05TVU1FUw0KICAgID4gKyAgIyMgTk9USUZZDQogICAgPiArICBnRWZpU21tRmF1bHRU b2xlcmFudFdyaXRlUHJvdG9jb2xHdWlkDQogICAgPiArICAjIyBQUk9EVUNFUw0KICAgID4gKyAg IyMgVU5ERUZJTkVEICMgU21pSGFuZGxlclJlZ2lzdGVyDQogICAgPiArICBnRWZpU21tVmFyaWFi bGVQcm90b2NvbEd1aWQNCiAgICA+ICsgIGdFZmlNbUVuZE9mRHhlUHJvdG9jb2xHdWlkICAgICAg ICAgICAgICAgICAgICAjIyBOT1RJRlkNCiAgICA+ICsgIGdFZGtpaVNtbVZhckNoZWNrUHJvdG9j b2xHdWlkICAgICAgICAgICAgICAgICAjIyBQUk9EVUNFUw0KICAgID4gKyAgZ0VmaVRjZ1Byb3Rv Y29sR3VpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIFNPTUVUSU1FU19DT05TVU1FUw0K ICAgID4gKyAgZ0VmaVRjZzJQcm90b2NvbEd1aWQgICAgICAgICAgICAgICAgICAgICAgICAgICMj IFNPTUVUSU1FU19DT05TVU1FUw0KICAgID4gKw0KICAgID4gK1tHdWlkc10NCiAgICA+ICsgICMj IFNPTUVUSU1FU19DT05TVU1FUyAgICMjIEdVSUQgIyBTaWduYXR1cmUgb2YgVmFyaWFibGUgc3Rv cmUgaGVhZGVyDQogICAgPiArICAjIyBTT01FVElNRVNfUFJPRFVDRVMgICAjIyBHVUlEICMgU2ln bmF0dXJlIG9mIFZhcmlhYmxlIHN0b3JlIGhlYWRlcg0KICAgID4gKyAgIyMgU09NRVRJTUVTX0NP TlNVTUVTICAgIyMgSE9CDQogICAgPiArICAjIyBTT01FVElNRVNfUFJPRFVDRVMgICAjIyBTeXN0 ZW1UYWJsZQ0KICAgID4gKyAgZ0VmaUF1dGhlbnRpY2F0ZWRWYXJpYWJsZUd1aWQNCiAgICA+ICsN CiAgICA+ICsgICMjIFNPTUVUSU1FU19DT05TVU1FUyAgICMjIEdVSUQgIyBTaWduYXR1cmUgb2Yg VmFyaWFibGUgc3RvcmUgaGVhZGVyDQogICAgPiArICAjIyBTT01FVElNRVNfUFJPRFVDRVMgICAj IyBHVUlEICMgU2lnbmF0dXJlIG9mIFZhcmlhYmxlIHN0b3JlIGhlYWRlcg0KICAgID4gKyAgIyMg U09NRVRJTUVTX0NPTlNVTUVTICAgIyMgSE9CDQogICAgPiArICAjIyBTT01FVElNRVNfUFJPRFVD RVMgICAjIyBTeXN0ZW1UYWJsZQ0KICAgID4gKyAgZ0VmaVZhcmlhYmxlR3VpZA0KICAgID4gKw0K ICAgID4gKyAgIyMgU09NRVRJTUVTX0NPTlNVTUVTICAgIyMgVmFyaWFibGU6TCJQbGF0Zm9ybUxh bmciDQogICAgPiArICAjIyBTT01FVElNRVNfUFJPRFVDRVMgICAjIyBWYXJpYWJsZTpMIlBsYXRm b3JtTGFuZyINCiAgICA+ICsgICMjIFNPTUVUSU1FU19DT05TVU1FUyAgICMjIFZhcmlhYmxlOkwi TGFuZyINCiAgICA+ICsgICMjIFNPTUVUSU1FU19QUk9EVUNFUyAgICMjIFZhcmlhYmxlOkwiTGFu ZyINCiAgICA+ICsgIGdFZmlHbG9iYWxWYXJpYWJsZUd1aWQNCiAgICA+ICsNCiAgICA+ICsgIGdF ZmlNZW1vcnlPdmVyd3JpdGVDb250cm9sRGF0YUd1aWQgICAgICAgICAgICAjIyBTT01FVElNRVNf Q09OU1VNRVMgICAjIw0KICAgID4gVmFyaWFibGU6TCJNZW1vcnlPdmVyd3JpdGVSZXF1ZXN0Q29u dHJvbCINCiAgICA+ICsgIGdFZmlNZW1vcnlPdmVyd3JpdGVSZXF1ZXN0Q29udHJvbExvY2tHdWlk ICAgICAjIyBTT01FVElNRVNfUFJPRFVDRVMNCiAgICA+ICMjIFZhcmlhYmxlOkwiTWVtb3J5T3Zl cndyaXRlUmVxdWVzdENvbnRyb2xMb2NrIg0KICAgID4gKw0KICAgID4gKyAgZ1NtbVZhcmlhYmxl V3JpdGVHdWlkICAgICAgICAgICAgICAgICAgICAgICAgICMjIFBST0RVQ0VTICAgICAgICAgICAg ICMjIEdVSUQgIyBJbnN0YWxsDQogICAgPiBwcm90b2NvbA0KICAgID4gKyAgZ0VmaVN5c3RlbU52 RGF0YUZ2R3VpZCAgICAgICAgICAgICAgICAgICAgICAgICMjIENPTlNVTUVTICAgICAgICAgICAg ICMjIEdVSUQNCiAgICA+ICsgIGdFZGtpaUZhdWx0VG9sZXJhbnRXcml0ZUd1aWQgICAgICAgICAg ICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMgICAjIyBIT0INCiAgICA+ICsNCiAgICA+ICsg ICMjIFNPTUVUSU1FU19DT05TVU1FUyAgICMjIFZhcmlhYmxlOkwiVmFyRXJyb3JGbGFnIg0KICAg ID4gKyAgIyMgU09NRVRJTUVTX1BST0RVQ0VTICAgIyMgVmFyaWFibGU6TCJWYXJFcnJvckZsYWci DQogICAgPiArICBnRWRraWlWYXJFcnJvckZsYWdHdWlkDQogICAgPiArDQogICAgPiArW1BjZF0N CiAgICA+ICsgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RNYXhWYXJpYWJsZVNp emUgICAgICAgICAgICAgICAgICAjIw0KICAgID4gQ09OU1VNRVMNCiAgICA+ICsgIGdFZmlNZGVN b2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RNYXhBdXRoVmFyaWFibGVTaXplICAgICAgICAgICAg ICAjIw0KICAgID4gQ09OU1VNRVMNCiAgICA+ICsgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNl R3VpZC5QY2RNYXhWb2xhdGlsZVZhcmlhYmxlU2l6ZSAgICAgICAgICAjIw0KICAgID4gQ09OU1VN RVMNCiAgICA+ICsgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RNYXhIYXJkd2Fy ZUVycm9yVmFyaWFibGVTaXplICAgICAjIw0KICAgID4gQ09OU1VNRVMNCiAgICA+ICsgIGdFZmlN ZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RWYXJpYWJsZVN0b3JlU2l6ZSAgICAgICAgICAg ICAgICAjIw0KICAgID4gQ09OU1VNRVMNCiAgICA+ICsgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNw YWNlR3VpZC5QY2RId0VyclN0b3JhZ2VTaXplICAgICAgICAgICAgICAgICAjIw0KICAgID4gQ09O U1VNRVMNCiAgICA+ICsgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RNYXhVc2Vy TnZWYXJpYWJsZVNwYWNlU2l6ZQ0KICAgID4gIyMgQ09OU1VNRVMNCiAgICA+ICsNCiAgICA+IGdF ZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RCb290dGltZVJlc2VydmVkTnZWYXJpYWJs ZVNwYWNlU2l6ZQ0KICAgID4gIyMgQ09OU1VNRVMNCiAgICA+ICsgIGdFZmlNZGVNb2R1bGVQa2dU b2tlblNwYWNlR3VpZC5QY2RSZWNsYWltVmFyaWFibGVTcGFjZUF0RW5kT2ZEeGUNCiAgICA+ICMj IENPTlNVTUVTDQogICAgPiArICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkRW11 VmFyaWFibGVOdk1vZGVFbmFibGUgICAgICAgICAgIyMNCiAgICA+IFNPTUVUSU1FU19DT05TVU1F Uw0KICAgID4gKyAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEVtdVZhcmlhYmxl TnZTdG9yZVJlc2VydmVkICAgICAgICMjDQogICAgPiBTT01FVElNRVNfQ09OU1VNRVMNCiAgICA+ ICsNCiAgICA+ICtbRmVhdHVyZVBjZF0NCiAgICA+ICsgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNw YWNlR3VpZC5QY2RWYXJpYWJsZUNvbGxlY3RTdGF0aXN0aWNzICAgICAgICAjIw0KICAgID4gQ09O U1VNRVMgICMgc3RhdGlzdGljIHRoZSBpbmZvcm1hdGlvbiBvZiB2YXJpYWJsZS4NCiAgICA+ICsg IGdFZmlNZGVQa2dUb2tlblNwYWNlR3VpZC5QY2RVZWZpVmFyaWFibGVEZWZhdWx0TGFuZ0RlcHJl Y2F0ZSAgICAgICAjIw0KICAgID4gQ09OU1VNRVMgICMgQXV0byB1cGRhdGUgUGxhdGZvcm1MYW5n L0xhbmcNCiAgICA+ICsNCiAgICA+ICtbRGVwZXhdDQogICAgPiArICBUUlVFDQogICAgPiArDQog ICAgPiArW1VzZXJFeHRlbnNpb25zLlRpYW5vQ29yZS4iRXh0cmFGaWxlcyJdDQogICAgPiArICBW YXJpYWJsZVNtbUV4dHJhLnVuaQ0KICAgID4gZGlmZiAtLWdpdA0KICAgID4gYS9NZGVNb2R1bGVQ a2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlU21tUnVu dA0KICAgID4gaW1lRHhlLmluZg0KICAgID4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1Zhcmlh YmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlU21tUnVudA0KICAgID4gaW1lRHhlLmlu Zg0KICAgID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICA+IGluZGV4IDAwMDAwMDAwMDAwMC4u MGQxNjk5MTNjOWM5DQogICAgPiAtLS0gL2Rldi9udWxsDQogICAgPiArKysNCiAgICA+IGIvTWRl TW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJs ZVNtbVJ1bnQNCiAgICA+IGltZUR4ZS5pbmYNCiAgICA+IEBAIC0wLDAgKzEsMTE5IEBADQogICAg PiArIyMgQGZpbGUNCiAgICA+ICsjICBSdW50aW1lIERYRSBwYXJ0IGNvcnJlc3BvbmRpbmcgdG8g U01NIGF1dGhlbnRpY2F0ZWQgdmFyaWFibGUgbW9kdWxlLg0KICAgID4gKyMNCiAgICA+ICsjICBU aGlzIG1vZHVsZSBpbnN0YWxscyB2YXJpYWJsZSBhcmNoIHByb3RvY29sIGFuZCB2YXJpYWJsZSB3 cml0ZSBhcmNoIHByb3RvY29sDQogICAgPiB0byBwcm92aWRlDQogICAgPiArIyAgdmFyaWFibGUg c2VydmljZS4gVGhpcyBtb2R1bGUgbmVlZCB3b3JrIHRvZ2V0aGVyIHdpdGggU01NIGF1dGhlbnRp Y2F0ZWQNCiAgICA+IHZhcmlhYmxlIG1vZHVsZS4NCiAgICA+ICsjDQogICAgPiArIyAgQ2F1dGlv bjogVGhpcyBtb2R1bGUgcmVxdWlyZXMgYWRkaXRpb25hbCByZXZpZXcgd2hlbiBtb2RpZmllZC4N CiAgICA+ICsjICBUaGlzIGRyaXZlciB3aWxsIGhhdmUgZXh0ZXJuYWwgaW5wdXQgLSB2YXJpYWJs ZSBkYXRhLg0KICAgID4gKyMgIFRoaXMgZXh0ZXJuYWwgaW5wdXQgbXVzdCBiZSB2YWxpZGF0ZWQg Y2FyZWZ1bGx5IHRvIGF2b2lkIHNlY3VyaXR5IGlzc3VlcyBzdWNoDQogICAgPiBhcw0KICAgID4g KyMgIGJ1ZmZlciBvdmVyZmxvdyBvciBpbnRlZ2VyIG92ZXJmbG93Lg0KICAgID4gKyMgICAgVGhl IHdob2xlIFNNTSBhdXRoZW50aWNhdGlvbiB2YXJpYWJsZSBkZXNpZ24gcmVsaWVzIG9uIHRoZSBp bnRlZ3JpdHkgb2YNCiAgICA+IGZsYXNoIHBhcnQgYW5kIFNNTS4NCiAgICA+ICsjICB3aGljaCBp cyBhc3N1bWVkIHRvIGJlIHByb3RlY3RlZCBieSBwbGF0Zm9ybS4gIEFsbCB2YXJpYWJsZSBjb2Rl IGFuZA0KICAgID4gbWV0YWRhdGEgaW4gZmxhc2gvU01NIE1lbW9yeQ0KICAgID4gKyMgIG1heSBu b3QgYmUgbW9kaWZpZWQgd2l0aG91dCBhdXRob3JpemF0aW9uLiBJZiBwbGF0Zm9ybSBmYWlscyB0 byBwcm90ZWN0IHRoZXNlDQogICAgPiByZXNvdXJjZXMsDQogICAgPiArIyAgdGhlIGF1dGhlbnRp Y2F0aW9uIHNlcnZpY2UgcHJvdmlkZWQgaW4gdGhpcyBkcml2ZXIgd2lsbCBiZSBicm9rZW4sIGFu ZCB0aGUNCiAgICA+IGJlaGF2aW9yIGlzIHVuZGVmaW5lZC4NCiAgICA+ICsjDQogICAgPiArIyBD b3B5cmlnaHQgKGMpIDIwMTAgLSAyMDIyLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC48QlI+DQogICAgPiArIyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlv bi48QlI+DQogICAgPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBh dGVudA0KICAgID4gKyMNCiAgICA+ICsjIw0KICAgID4gKw0KICAgID4gK1tEZWZpbmVzXQ0KICAg ID4gKyAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgID0gMHgwMDAxMDAwNQ0KICAgID4g KyAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAgICAgID0gVmFyaWFibGVTbW1SdW50aW1lRHhl DQogICAgPiArICBNT0RVTEVfVU5JX0ZJTEUgICAgICAgICAgICAgICAgPSBWYXJpYWJsZVNtbVJ1 bnRpbWVEeGUudW5pDQogICAgPiArICBGSUxFX0dVSUQgICAgICAgICAgICAgICAgICAgICAgPSAz QzlERjRCMy01NTlGLTRBRTQtQUVBMy1FNEIwQzNEOUQzRUUNCiAgICA+ICsgIE1PRFVMRV9UWVBF ICAgICAgICAgICAgICAgICAgICA9IERYRV9SVU5USU1FX0RSSVZFUg0KICAgID4gKyAgVkVSU0lP Tl9TVFJJTkcgICAgICAgICAgICAgICAgID0gMS4wDQogICAgPiArICBFTlRSWV9QT0lOVCAgICAg ICAgICAgICAgICAgICAgPSBWYXJpYWJsZVNtbVJ1bnRpbWVJbml0aWFsaXplDQogICAgPiArDQog ICAgPiArIw0KICAgID4gKyMgVGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpcyBmb3IgcmVmZXJl bmNlIG9ubHkgYW5kIG5vdCByZXF1aXJlZCBieSB0aGUgYnVpbGQNCiAgICA+IHRvb2xzLg0KICAg ID4gKyMNCiAgICA+ICsjICBWQUxJRF9BUkNISVRFQ1RVUkVTICAgICAgICAgICA9IElBMzIgWDY0 DQogICAgPiArIw0KICAgID4gKyMgIFZJUlRVQUxfQUREUkVTU19NQVBfQ0FMTEJBQ0sgID0gIFZh cmlhYmxlQWRkcmVzc0NoYW5nZUV2ZW50DQogICAgPiArIw0KICAgID4gKw0KICAgID4gK1tTb3Vy Y2VzXQ0KICAgID4gKyAgVmFyaWFibGVTbW1SdW50aW1lRHhlLmMNCiAgICA+ICsgIFByaXZpbGVn ZVBvbHltb3JwaGljLmgNCiAgICA+ICsgIE1lYXN1cmVtZW50LmMNCiAgICA+ICsgIFZhcmlhYmxl UGFyc2luZy5jDQogICAgPiArICBWYXJpYWJsZVBhcnNpbmcuaA0KICAgID4gKyAgVmFyaWFibGUu aA0KICAgID4gKyAgVmFyaWFibGVQb2xpY3lTbW1EeGUuYw0KICAgID4gKw0KICAgID4gK1tQYWNr YWdlc10NCiAgICA+ICsgIE1kZVBrZy9NZGVQa2cuZGVjDQogICAgPiArICBNZGVNb2R1bGVQa2cv TWRlTW9kdWxlUGtnLmRlYw0KICAgID4gKw0KICAgID4gK1tMaWJyYXJ5Q2xhc3Nlc10NCiAgICA+ ICsgIE1lbW9yeUFsbG9jYXRpb25MaWINCiAgICA+ICsgIEJhc2VMaWINCiAgICA+ICsgIFVlZmlC b290U2VydmljZXNUYWJsZUxpYg0KICAgID4gKyAgRGVidWdMaWINCiAgICA+ICsgIFVlZmlSdW50 aW1lTGliDQogICAgPiArICBEeGVTZXJ2aWNlc1RhYmxlTGliDQogICAgPiArICBVZWZpRHJpdmVy RW50cnlQb2ludA0KICAgID4gKyAgVHBtTWVhc3VyZW1lbnRMaWINCiAgICA+ICsgIFNhZmVJbnRM aWINCiAgICA+ICsgIFBjZExpYg0KICAgID4gKyAgTW1VbmJsb2NrTWVtb3J5TGliDQogICAgPiAr ICBQcm90ZWN0ZWRWYXJpYWJsZUxpYg0KICAgID4gKw0KICAgID4gK1tQcm90b2NvbHNdDQogICAg PiArICBnRWZpVmFyaWFibGVXcml0ZUFyY2hQcm90b2NvbEd1aWQgICAgICAgICAgICAgIyMgUFJP RFVDRVMNCiAgICA+ICsgIGdFZmlWYXJpYWJsZUFyY2hQcm90b2NvbEd1aWQgICAgICAgICAgICAg ICAgICAjIyBQUk9EVUNFUw0KICAgID4gKyAgZ0VmaU1tQ29tbXVuaWNhdGlvbjJQcm90b2NvbEd1 aWQgICAgICAgICAgICAgICMjIENPTlNVTUVTDQogICAgPiArICAjIyBDT05TVU1FUw0KICAgID4g KyAgIyMgTk9USUZZDQogICAgPiArICAjIyBVTkRFRklORUQgIyBVc2VkIHRvIGRvIHNtbSBjb21t dW5pY2F0aW9uDQogICAgPiArICBnRWZpU21tVmFyaWFibGVQcm90b2NvbEd1aWQNCiAgICA+ICsg IGdFZGtpaVZhcmlhYmxlTG9ja1Byb3RvY29sR3VpZCAgICAgICAgICAgICAgICAjIyBQUk9EVUNF Uw0KICAgID4gKyAgZ0Vka2lpVmFyQ2hlY2tQcm90b2NvbEd1aWQgICAgICAgICAgICAgICAgICAg ICMjIFBST0RVQ0VTDQogICAgPiArICBnRWRraWlWYXJpYWJsZVBvbGljeVByb3RvY29sR3VpZCAg ICAgICAgICAgICAgIyMgUFJPRFVDRVMNCiAgICA+ICsNCiAgICA+ICtbRmVhdHVyZVBjZF0NCiAg ICA+ICsgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RFbmFibGVWYXJpYWJsZVJ1 bnRpbWVDYWNoZQ0KICAgID4gIyMgQ09OU1VNRVMNCiAgICA+ICsgIGdFZmlNZGVNb2R1bGVQa2dU b2tlblNwYWNlR3VpZC5QY2RWYXJpYWJsZUNvbGxlY3RTdGF0aXN0aWNzICAgICAgICAgICAgIyMN CiAgICA+IENPTlNVTUVTDQogICAgPiArDQogICAgPiArW1BjZF0NCiAgICA+ICsNCiAgICA+IGdF ZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RBbGxvd1ZhcmlhYmxlUG9saWN5RW5mb3Jj ZW1lbnREaXNhYmxlDQogICAgPiAjIyBDT05TVU1FUw0KICAgID4gKw0KICAgID4gK1tHdWlkc10N CiAgICA+ICsgICMjIFBST0RVQ0VTICAgICAgICAgICAgICMjIEdVSUQgIyBTaWduYXR1cmUgb2Yg VmFyaWFibGUgc3RvcmUgaGVhZGVyDQogICAgPiArICAjIyBDT05TVU1FUyAgICAgICAgICAgICAj IyBHVUlEICMgU2lnbmF0dXJlIG9mIFZhcmlhYmxlIHN0b3JlIGhlYWRlcg0KICAgID4gKyAgIyMg U09NRVRJTUVTX1BST0RVQ0VTICAgIyMgU3lzdGVtVGFibGUNCiAgICA+ICsgIGdFZmlBdXRoZW50 aWNhdGVkVmFyaWFibGVHdWlkDQogICAgPiArDQogICAgPiArICAjIyBQUk9EVUNFUyAgICAgICAg ICAgICAjIyBHVUlEICMgU2lnbmF0dXJlIG9mIFZhcmlhYmxlIHN0b3JlIGhlYWRlcg0KICAgID4g KyAgIyMgQ09OU1VNRVMgICAgICAgICAgICAgIyMgR1VJRCAjIFNpZ25hdHVyZSBvZiBWYXJpYWJs ZSBzdG9yZSBoZWFkZXINCiAgICA+ICsgICMjIFNPTUVUSU1FU19QUk9EVUNFUyAgICMjIFN5c3Rl bVRhYmxlDQogICAgPiArICBnRWZpVmFyaWFibGVHdWlkDQogICAgPiArDQogICAgPiArICBnRWZp RXZlbnRWaXJ0dWFsQWRkcmVzc0NoYW5nZUd1aWQgICAgICAgICAgICAgIyMgQ09OU1VNRVMgIyMg RXZlbnQNCiAgICA+ICsgIGdFZmlFdmVudEV4aXRCb290U2VydmljZXNHdWlkICAgICAgICAgICAg ICAgICAjIyBDT05TVU1FUyAjIyBFdmVudA0KICAgID4gKyAgIyMgQ09OU1VNRVMgIyMgR1VJRCAj IExvY2F0ZSBwcm90b2NvbA0KICAgID4gKyAgIyMgQ09OU1VNRVMgIyMgR1VJRCAjIFByb3RvY29s IG5vdGlmeQ0KICAgID4gKyAgZ1NtbVZhcmlhYmxlV3JpdGVHdWlkDQogICAgPiArDQogICAgPiAr ICAjIyBTT01FVElNRVNfQ09OU1VNRVMgICAjIyBWYXJpYWJsZTpMIlBLIg0KICAgID4gKyAgIyMg U09NRVRJTUVTX0NPTlNVTUVTICAgIyMgVmFyaWFibGU6TCJLRUsiDQogICAgPiArICAjIyBTT01F VElNRVNfQ09OU1VNRVMgICAjIyBWYXJpYWJsZTpMIlNlY3VyZUJvb3QiDQogICAgPiArICBnRWZp R2xvYmFsVmFyaWFibGVHdWlkDQogICAgPiArDQogICAgPiArICAjIyBTT01FVElNRVNfQ09OU1VN RVMgICAjIyBWYXJpYWJsZTpMImRiIg0KICAgID4gKyAgIyMgU09NRVRJTUVTX0NPTlNVTUVTICAg IyMgVmFyaWFibGU6TCJkYngiDQogICAgPiArICAjIyBTT01FVElNRVNfQ09OU1VNRVMgICAjIyBW YXJpYWJsZTpMImRidCINCiAgICA+ICsgIGdFZmlJbWFnZVNlY3VyaXR5RGF0YWJhc2VHdWlkDQog ICAgPiArDQogICAgPiArICBnVmFyQ2hlY2tQb2xpY3lMaWJNbWlIYW5kbGVyR3VpZA0KICAgID4g KyAgZ0VmaUVuZE9mRHhlRXZlbnRHcm91cEd1aWQNCiAgICA+ICsNCiAgICA+ICtbRGVwZXhdDQog ICAgPiArICBnRWZpTW1Db21tdW5pY2F0aW9uMlByb3RvY29sR3VpZA0KICAgID4gKw0KICAgID4g K1tVc2VyRXh0ZW5zaW9ucy5UaWFub0NvcmUuIkV4dHJhRmlsZXMiXQ0KICAgID4gKyAgVmFyaWFi bGVTbW1SdW50aW1lRHhlRXh0cmEudW5pDQogICAgPiBkaWZmIC0tZ2l0DQogICAgPiBhL01kZU1v ZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVT dGFuZGFsb24NCiAgICA+IGVNbS5pbmYNCiAgICA+IGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9W YXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZVN0YW5kYWxvbg0KICAgID4gZU1t LmluZg0KICAgID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICA+IGluZGV4IDAwMDAwMDAwMDAw MC4uZmI1YTZjOTQ3ODkwDQogICAgPiAtLS0gL2Rldi9udWxsDQogICAgPiArKysNCiAgICA+IGIv TWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJp YWJsZVN0YW5kYWxvbg0KICAgID4gZU1tLmluZg0KICAgID4gQEAgLTAsMCArMSwxNDMgQEANCiAg ICA+ICsjIyBAZmlsZQ0KICAgID4gKyMgIFByb3ZpZGVzIFNNTSB2YXJpYWJsZSBzZXJ2aWNlLg0K ICAgID4gKyMNCiAgICA+ICsjICBUaGlzIG1vZHVsZSBpbnN0YWxscyBTTU0gdmFyaWFibGUgcHJv dG9jb2wgaW50byBTTU0gcHJvdG9jb2wgZGF0YWJhc2UsDQogICAgPiArIyAgd2hpY2ggY2FuIGJl IHVzZWQgYnkgU01NIGRyaXZlciwgYW5kIGluc3RhbGxzIFNNTSB2YXJpYWJsZSBwcm90b2NvbA0K ICAgID4gKyMgIGludG8gQlMgcHJvdG9jb2wgZGF0YWJhc2UsIHdoaWNoIGNhbiBiZSB1c2VkIHRv IG5vdGlmeSB0aGUgU01NIFJ1bnRpbWUNCiAgICA+ICsjICBEeGUgZHJpdmVyIHRoYXQgdGhlIFNN TSB2YXJpYWJsZSBzZXJ2aWNlIGlzIHJlYWR5Lg0KICAgID4gKyMgIFRoaXMgbW9kdWxlIHNob3Vs ZCBiZSB1c2VkIHdpdGggU01NIFJ1bnRpbWUgRFhFIG1vZHVsZSB0b2dldGhlci4gVGhlDQogICAg PiArIyAgU01NIFJ1bnRpbWUgRFhFIG1vZHVsZSB3b3VsZCBpbnN0YWxsIHZhcmlhYmxlIGFyY2gg cHJvdG9jb2wgYW5kIHZhcmlhYmxlDQogICAgPiArIyAgd3JpdGUgYXJjaCBwcm90b2NvbCBiYXNl ZCBvbiBTTU0gdmFyaWFibGUgbW9kdWxlLg0KICAgID4gKyMNCiAgICA+ICsjICBDYXV0aW9uOiBU aGlzIG1vZHVsZSByZXF1aXJlcyBhZGRpdGlvbmFsIHJldmlldyB3aGVuIG1vZGlmaWVkLg0KICAg ID4gKyMgIFRoaXMgZHJpdmVyIHdpbGwgaGF2ZSBleHRlcm5hbCBpbnB1dCAtIHZhcmlhYmxlIGRh dGEgYW5kIGNvbW11bmljYXRlIGJ1ZmZlciBpbg0KICAgID4gU01NIG1vZGUuDQogICAgPiArIyAg VGhpcyBleHRlcm5hbCBpbnB1dCBtdXN0IGJlIHZhbGlkYXRlZCBjYXJlZnVsbHkgdG8gYXZvaWQg c2VjdXJpdHkgaXNzdWVzIHN1Y2gNCiAgICA+IGFzDQogICAgPiArIyAgYnVmZmVyIG92ZXJmbG93 IG9yIGludGVnZXIgb3ZlcmZsb3cuDQogICAgPiArIyAgICBUaGUgd2hvbGUgU01NIGF1dGhlbnRp Y2F0aW9uIHZhcmlhYmxlIGRlc2lnbiByZWxpZXMgb24gdGhlIGludGVncml0eSBvZg0KICAgID4g Zmxhc2ggcGFydCBhbmQgU01NLg0KICAgID4gKyMgIHdoaWNoIGlzIGFzc3VtZWQgdG8gYmUgcHJv dGVjdGVkIGJ5IHBsYXRmb3JtLiAgQWxsIHZhcmlhYmxlIGNvZGUgYW5kDQogICAgPiBtZXRhZGF0 YSBpbiBmbGFzaC9TTU0gTWVtb3J5DQogICAgPiArIyAgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRo b3V0IGF1dGhvcml6YXRpb24uIElmIHBsYXRmb3JtIGZhaWxzIHRvIHByb3RlY3QgdGhlc2UNCiAg ICA+IHJlc291cmNlcywNCiAgICA+ICsjICB0aGUgYXV0aGVudGljYXRpb24gc2VydmljZSBwcm92 aWRlZCBpbiB0aGlzIGRyaXZlciB3aWxsIGJlIGJyb2tlbiwgYW5kIHRoZQ0KICAgID4gYmVoYXZp b3IgaXMgdW5kZWZpbmVkLg0KICAgID4gKyMNCiAgICA+ICsjIENvcHlyaWdodCAoYykgMjAxMCAt IDIwMjIsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCiAgICA+ ICsjIENvcHlyaWdodCAoYykgMjAxOCwgTGluYXJvLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu PEJSPg0KICAgID4gKyMgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uDQogICAg PiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KICAgID4g KyMNCiAgICA+ICsjIw0KICAgID4gKw0KICAgID4gK1tEZWZpbmVzXQ0KICAgID4gKyAgSU5GX1ZF UlNJT04gICAgICAgICAgICAgICAgICAgID0gMHgwMDAxMDAxQg0KICAgID4gKyAgQkFTRV9OQU1F ICAgICAgICAgICAgICAgICAgICAgID0gVmFyaWFibGVTdGFuZGFsb25lTW0NCiAgICA+ICsgIEZJ TEVfR1VJRCAgICAgICAgICAgICAgICAgICAgICA9IDQxN0U2MTkyLTc2NzgtNEE3NS1CNjM4LTMw NUE4NkQ4MjkzNg0KICAgID4gKyAgTU9EVUxFX1RZUEUgICAgICAgICAgICAgICAgICAgID0gTU1f U1RBTkRBTE9ORQ0KICAgID4gKyAgVkVSU0lPTl9TVFJJTkcgICAgICAgICAgICAgICAgID0gMS4w DQogICAgPiArICBQSV9TUEVDSUZJQ0FUSU9OX1ZFUlNJT04gICAgICAgPSAweDAwMDEwMDMyDQog ICAgPiArICBFTlRSWV9QT0lOVCAgICAgICAgICAgICAgICAgICAgPSBWYXJpYWJsZVNlcnZpY2VJ bml0aWFsaXplDQogICAgPiArDQogICAgPiArIw0KICAgID4gKyMgVGhlIGZvbGxvd2luZyBpbmZv cm1hdGlvbiBpcyBmb3IgcmVmZXJlbmNlIG9ubHkgYW5kIG5vdCByZXF1aXJlZCBieSB0aGUgYnVp bGQNCiAgICA+IHRvb2xzLg0KICAgID4gKyMNCiAgICA+ICsjICBWQUxJRF9BUkNISVRFQ1RVUkVT ICAgICAgICAgICA9IElBMzIgWDY0IEFSTSBBQVJDSDY0DQogICAgPiArIw0KICAgID4gKw0KICAg ID4gKw0KICAgID4gK1tTb3VyY2VzXQ0KICAgID4gKyAgUmVjbGFpbS5jDQogICAgPiArICBWYXJp YWJsZS5jDQogICAgPiArICBWYXJpYWJsZVNtbS5jDQogICAgPiArICBWYXJpYWJsZVN0YW5kYWxv bmVNbS5jDQogICAgPiArICBWYXJpYWJsZU5vblZvbGF0aWxlLmMNCiAgICA+ICsgIFZhcmlhYmxl Tm9uVm9sYXRpbGUuaA0KICAgID4gKyAgVmFyaWFibGVQYXJzaW5nLmMNCiAgICA+ICsgIFZhcmlh YmxlUGFyc2luZy5oDQogICAgPiArICBWYXJpYWJsZVJ1bnRpbWVDYWNoZS5jDQogICAgPiArICBW YXJpYWJsZVJ1bnRpbWVDYWNoZS5oDQogICAgPiArICBWYXJDaGVjay5jDQogICAgPiArICBWYXJp YWJsZS5oDQogICAgPiArICBQcml2aWxlZ2VQb2x5bW9ycGhpYy5oDQogICAgPiArICBWYXJpYWJs ZUV4TGliLmMNCiAgICA+ICsgIFRjZ01vckxvY2tTbW0uYw0KICAgID4gKyAgU3BlY3VsYXRpb25C YXJyaWVyU21tLmMNCiAgICA+ICsgIFZhcmlhYmxlTG9ja1JlcXVlc3RUb0xvY2suYw0KICAgID4g Kw0KICAgID4gK1tQYWNrYWdlc10NCiAgICA+ICsgIE1kZVBrZy9NZGVQa2cuZGVjDQogICAgPiAr ICBNZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KICAgID4gKyAgU3RhbmRhbG9uZU1tUGtn L1N0YW5kYWxvbmVNbVBrZy5kZWMNCiAgICA+ICsNCiAgICA+ICtbTGlicmFyeUNsYXNzZXNdDQog ICAgPiArICBBdXRoVmFyaWFibGVMaWINCiAgICA+ICsgIEJhc2VMaWINCiAgICA+ICsgIEJhc2VN ZW1vcnlMaWINCiAgICA+ICsgIERlYnVnTGliDQogICAgPiArICBIb2JMaWINCiAgICA+ICsgIE1l bW9yeUFsbG9jYXRpb25MaWINCiAgICA+ICsgIE1tU2VydmljZXNUYWJsZUxpYg0KICAgID4gKyAg U2FmZUludExpYg0KICAgID4gKyAgU3RhbmRhbG9uZU1tRHJpdmVyRW50cnlQb2ludA0KICAgID4g KyAgU3luY2hyb25pemF0aW9uTGliDQogICAgPiArICBWYXJDaGVja0xpYg0KICAgID4gKyAgVmFy aWFibGVGbGFzaEluZm9MaWINCiAgICA+ICsgIFZhcmlhYmxlUG9saWN5TGliDQogICAgPiArICBW YXJpYWJsZVBvbGljeUhlbHBlckxpYg0KICAgID4gKyAgUHJvdGVjdGVkVmFyaWFibGVMaWINCiAg ICA+ICsNCiAgICA+ICtbUHJvdG9jb2xzXQ0KICAgID4gKyAgZ0VmaVNtbUZpcm13YXJlVm9sdW1l QmxvY2tQcm90b2NvbEd1aWQgICAgICAgICMjIENPTlNVTUVTDQogICAgPiArICAjIyBDT05TVU1F Uw0KICAgID4gKyAgIyMgTk9USUZZDQogICAgPiArICBnRWZpU21tRmF1bHRUb2xlcmFudFdyaXRl UHJvdG9jb2xHdWlkDQogICAgPiArICAjIyBQUk9EVUNFUw0KICAgID4gKyAgIyMgVU5ERUZJTkVE ICMgU21pSGFuZGxlclJlZ2lzdGVyDQogICAgPiArICBnRWZpU21tVmFyaWFibGVQcm90b2NvbEd1 aWQNCiAgICA+ICsgIGdFZmlNbUVuZE9mRHhlUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICAg ICMjIE5PVElGWQ0KICAgID4gKyAgZ0Vka2lpU21tVmFyQ2hlY2tQcm90b2NvbEd1aWQgICAgICAg ICAgICAgICAgIyMgUFJPRFVDRVMNCiAgICA+ICsNCiAgICA+ICtbR3VpZHNdDQogICAgPiArICAj IyBTT01FVElNRVNfQ09OU1VNRVMgICAjIyBHVUlEICMgU2lnbmF0dXJlIG9mIFZhcmlhYmxlIHN0 b3JlIGhlYWRlcg0KICAgID4gKyAgIyMgU09NRVRJTUVTX1BST0RVQ0VTICAgIyMgR1VJRCAjIFNp Z25hdHVyZSBvZiBWYXJpYWJsZSBzdG9yZSBoZWFkZXINCiAgICA+ICsgICMjIFNPTUVUSU1FU19D T05TVU1FUyAgICMjIEhPQg0KICAgID4gKyAgIyMgU09NRVRJTUVTX1BST0RVQ0VTICAgIyMgU3lz dGVtVGFibGUNCiAgICA+ICsgIGdFZmlBdXRoZW50aWNhdGVkVmFyaWFibGVHdWlkDQogICAgPiAr DQogICAgPiArICAjIyBTT01FVElNRVNfQ09OU1VNRVMgICAjIyBHVUlEICMgU2lnbmF0dXJlIG9m IFZhcmlhYmxlIHN0b3JlIGhlYWRlcg0KICAgID4gKyAgIyMgU09NRVRJTUVTX1BST0RVQ0VTICAg IyMgR1VJRCAjIFNpZ25hdHVyZSBvZiBWYXJpYWJsZSBzdG9yZSBoZWFkZXINCiAgICA+ICsgICMj IFNPTUVUSU1FU19DT05TVU1FUyAgICMjIEhPQg0KICAgID4gKyAgIyMgU09NRVRJTUVTX1BST0RV Q0VTICAgIyMgU3lzdGVtVGFibGUNCiAgICA+ICsgIGdFZmlWYXJpYWJsZUd1aWQNCiAgICA+ICsN CiAgICA+ICsgICMjIFNPTUVUSU1FU19DT05TVU1FUyAgICMjIFZhcmlhYmxlOkwiUGxhdGZvcm1M YW5nIg0KICAgID4gKyAgIyMgU09NRVRJTUVTX1BST0RVQ0VTICAgIyMgVmFyaWFibGU6TCJQbGF0 Zm9ybUxhbmciDQogICAgPiArICAjIyBTT01FVElNRVNfQ09OU1VNRVMgICAjIyBWYXJpYWJsZTpM IkxhbmciDQogICAgPiArICAjIyBTT01FVElNRVNfUFJPRFVDRVMgICAjIyBWYXJpYWJsZTpMIkxh bmciDQogICAgPiArICBnRWZpR2xvYmFsVmFyaWFibGVHdWlkDQogICAgPiArDQogICAgPiArICBn RWZpTWVtb3J5T3ZlcndyaXRlQ29udHJvbERhdGFHdWlkICAgICAgICAgICAgIyMgU09NRVRJTUVT X0NPTlNVTUVTICAgIyMNCiAgICA+IFZhcmlhYmxlOkwiTWVtb3J5T3ZlcndyaXRlUmVxdWVzdENv bnRyb2wiDQogICAgPiArICBnRWZpTWVtb3J5T3ZlcndyaXRlUmVxdWVzdENvbnRyb2xMb2NrR3Vp ZCAgICAgIyMgU09NRVRJTUVTX1BST0RVQ0VTDQogICAgPiAjIyBWYXJpYWJsZTpMIk1lbW9yeU92 ZXJ3cml0ZVJlcXVlc3RDb250cm9sTG9jayINCiAgICA+ICsNCiAgICA+ICsgIGdFZmlTeXN0ZW1O dkRhdGFGdkd1aWQgICAgICAgICAgICAgICAgICAgICAgICAjIyBDT05TVU1FUyAgICAgICAgICAg ICAjIyBHVUlEDQogICAgPiArICBnRWRraWlGYXVsdFRvbGVyYW50V3JpdGVHdWlkICAgICAgICAg ICAgICAgICAgIyMgU09NRVRJTUVTX0NPTlNVTUVTICAgIyMgSE9CDQogICAgPiArDQogICAgPiAr ICAjIyBTT01FVElNRVNfQ09OU1VNRVMgICAjIyBWYXJpYWJsZTpMIlZhckVycm9yRmxhZyINCiAg ICA+ICsgICMjIFNPTUVUSU1FU19QUk9EVUNFUyAgICMjIFZhcmlhYmxlOkwiVmFyRXJyb3JGbGFn Ig0KICAgID4gKyAgZ0Vka2lpVmFyRXJyb3JGbGFnR3VpZA0KICAgID4gKw0KICAgID4gK1tQY2Rd DQogICAgPiArICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkTWF4VmFyaWFibGVT aXplICAgICAgICAgICAgICAgICAgIyMNCiAgICA+IENPTlNVTUVTDQogICAgPiArICBnRWZpTWRl TW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkTWF4QXV0aFZhcmlhYmxlU2l6ZSAgICAgICAgICAg ICAgIyMNCiAgICA+IENPTlNVTUVTDQogICAgPiArICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFj ZUd1aWQuUGNkTWF4Vm9sYXRpbGVWYXJpYWJsZVNpemUgICAgICAgICAgIyMNCiAgICA+IENPTlNV TUVTDQogICAgPiArICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkTWF4SGFyZHdh cmVFcnJvclZhcmlhYmxlU2l6ZSAgICAgIyMNCiAgICA+IENPTlNVTUVTDQogICAgPiArICBnRWZp TWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkVmFyaWFibGVTdG9yZVNpemUgICAgICAgICAg ICAgICAgIyMNCiAgICA+IENPTlNVTUVTDQogICAgPiArICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5T cGFjZUd1aWQuUGNkSHdFcnJTdG9yYWdlU2l6ZSAgICAgICAgICAgICAgICAgIyMNCiAgICA+IENP TlNVTUVTDQogICAgPiArICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkTWF4VXNl ck52VmFyaWFibGVTcGFjZVNpemUNCiAgICA+ICMjIENPTlNVTUVTDQogICAgPiArDQogICAgPiBn RWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkQm9vdHRpbWVSZXNlcnZlZE52VmFyaWFi bGVTcGFjZVNpemUNCiAgICA+ICMjIENPTlNVTUVTDQogICAgPiArICBnRWZpTWRlTW9kdWxlUGtn VG9rZW5TcGFjZUd1aWQuUGNkUmVjbGFpbVZhcmlhYmxlU3BhY2VBdEVuZE9mRHhlDQogICAgPiAj IyBDT05TVU1FUw0KICAgID4gKyAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEVt dVZhcmlhYmxlTnZNb2RlRW5hYmxlICAgICAgICAgICMjDQogICAgPiBTT01FVElNRVNfQ09OU1VN RVMNCiAgICA+ICsgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RFbXVWYXJpYWJs ZU52U3RvcmVSZXNlcnZlZCAgICAgICAjIw0KICAgID4gU09NRVRJTUVTX0NPTlNVTUVTDQogICAg PiArDQogICAgPiArW0ZlYXR1cmVQY2RdDQogICAgPiArICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5T cGFjZUd1aWQuUGNkVmFyaWFibGVDb2xsZWN0U3RhdGlzdGljcyAgICAgICAgIyMNCiAgICA+IENP TlNVTUVTICAjIHN0YXRpc3RpYyB0aGUgaW5mb3JtYXRpb24gb2YgdmFyaWFibGUuDQogICAgPiAr ICBnRWZpTWRlUGtnVG9rZW5TcGFjZUd1aWQuUGNkVWVmaVZhcmlhYmxlRGVmYXVsdExhbmdEZXBy ZWNhdGUgICAgICAgIyMNCiAgICA+IENPTlNVTUVTICAjIEF1dG8gdXBkYXRlIFBsYXRmb3JtTGFu Zy9MYW5nDQogICAgPiArDQogICAgPiArW0RlcGV4XQ0KICAgID4gKyAgVFJVRQ0KICAgID4gZGlm ZiAtLWdpdA0KICAgID4gYS9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3Rl ZC9SdW50aW1lRHhlL1ByaXZpbGVnZVBvbHltb3JwDQogICAgPiBoaWMuaA0KICAgID4gYi9NZGVN b2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ByaXZpbGVn ZVBvbHltb3JwDQogICAgPiBoaWMuaA0KICAgID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICA+ IGluZGV4IDAwMDAwMDAwMDAwMC4uN2YxNDUxNWI2OTRmDQogICAgPiAtLS0gL2Rldi9udWxsDQog ICAgPiArKysNCiAgICA+IGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0 ZWQvUnVudGltZUR4ZS9Qcml2aWxlZ2VQb2x5bW9ycA0KICAgID4gaGljLmgNCiAgICA+IEBAIC0w LDAgKzEsMTU4IEBADQogICAgPiArLyoqIEBmaWxlDQogICAgPiArICBQb2x5bW9ycGhpYyBmdW5j dGlvbnMgdGhhdCBhcmUgY2FsbGVkIGZyb20gYm90aCB0aGUgcHJpdmlsZWdlZCBkcml2ZXIgKGku ZS4sDQogICAgPiArICB0aGUgRFhFX1NNTSB2YXJpYWJsZSBtb2R1bGUpIGFuZCB0aGUgbm9uLXBy aXZpbGVnZWQgZHJpdmVycyAoaS5lLiwgb25lIG9yDQogICAgPiArICBib3RoIG9mIHRoZSBEWEVf UlVOVElNRSB2YXJpYWJsZSBtb2R1bGVzKS4NCiAgICA+ICsNCiAgICA+ICsgIEVhY2ggb2YgdGhl c2UgZnVuY3Rpb25zIGhhcyB0d28gaW1wbGVtZW50YXRpb25zLCBhcHByb3ByaWF0ZSBmb3IgcHJp dmlsZWdlZA0KICAgID4gKyAgdnMuIG5vbi1wcml2aWxlZ2VkIGRyaXZlciBjb2RlLg0KICAgID4g Kw0KICAgID4gKyAgQ29weXJpZ2h0IChjKSAyMDE3LCBSZWQgSGF0LCBJbmMuPEJSPg0KICAgID4g KyAgQ29weXJpZ2h0IChjKSAyMDEwIC0gMjAyMiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuPEJSPg0KICAgID4gKw0KICAgID4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCiAgICA+ICsqKi8NCiAgICA+ICsNCiAgICA+ICsjaWZu ZGVmIFBSSVZJTEVHRV9QT0xZTU9SUEhJQ19IXw0KICAgID4gKyNkZWZpbmUgUFJJVklMRUdFX1BP TFlNT1JQSElDX0hfDQogICAgPiArDQogICAgPiArI2luY2x1ZGUgPFVlZmkvVWVmaUJhc2VUeXBl Lmg+DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBTZWN1cmVCb290IEhvb2sgZm9yIGF1 dGggdmFyaWFibGUgdXBkYXRlLg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtW2luXSBWYXJpYWJs ZU5hbWUgICAgICAgICAgICAgICAgIE5hbWUgb2YgVmFyaWFibGUgdG8gYmUgZm91bmQuDQogICAg PiArICBAcGFyYW1baW5dIFZlbmRvckd1aWQgICAgICAgICAgICAgICAgICAgVmFyaWFibGUgdmVu ZG9yIEdVSUQuDQogICAgPiArKiovDQogICAgPiArVk9JRA0KICAgID4gK0VGSUFQSQ0KICAgID4g K1NlY3VyZUJvb3RIb29rICgNCiAgICA+ICsgIElOIENIQVIxNiAgICAqVmFyaWFibGVOYW1lLA0K ICAgID4gKyAgSU4gRUZJX0dVSUQgICpWZW5kb3JHdWlkDQogICAgPiArICApOw0KICAgID4gKw0K ICAgID4gKy8qKg0KICAgID4gKyAgSW5pdGlhbGl6YXRpb24gZm9yIE1PUiBDb250cm9sIExvY2su DQogICAgPiArDQogICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICBNb3JMb2NrIGluaXRp YWxpemF0aW9uIHN1Y2Nlc3MuDQogICAgPiArICBAcmV0dXJuIE90aGVycyAgICAgICAgICBTb21l IGVycm9yIG9jY3Vycy4NCiAgICA+ICsqKi8NCiAgICA+ICtFRklfU1RBVFVTDQogICAgPiArTW9y TG9ja0luaXQgKA0KICAgID4gKyAgVk9JRA0KICAgID4gKyAgKTsNCiAgICA+ICsNCiAgICA+ICsv KioNCiAgICA+ICsgIERlbGF5ZWQgaW5pdGlhbGl6YXRpb24gZm9yIE1PUiBDb250cm9sIExvY2sg YXQgRW5kT2ZEeGUuDQogICAgPiArDQogICAgPiArICBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGFu eSBvcGVyYXRpb25zIHF1ZXVlZCBieSBNb3JMb2NrSW5pdCgpLg0KICAgID4gKyoqLw0KICAgID4g K1ZPSUQNCiAgICA+ICtNb3JMb2NrSW5pdEF0RW5kT2ZEeGUgKA0KICAgID4gKyAgVk9JRA0KICAg ID4gKyAgKTsNCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIFRoaXMgc2VydmljZSBpcyBh biBNT1IvTW9yTG9jayBjaGVja2VyIGhhbmRsZXIgZm9yIHRoZSBTZXRWYXJpYWJsZSgpLg0KICAg ID4gKw0KICAgID4gKyAgQHBhcmFtW2luXSAgVmFyaWFibGVOYW1lIHRoZSBuYW1lIG9mIHRoZSB2 ZW5kb3IncyB2YXJpYWJsZSwgYXMgYQ0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg IE51bGwtVGVybWluYXRlZCBVbmljb2RlIFN0cmluZw0KICAgID4gKyAgQHBhcmFtW2luXSAgVmVu ZG9yR3VpZCAgIFVuaWZ5IGlkZW50aWZpZXIgZm9yIHZlbmRvci4NCiAgICA+ICsgIEBwYXJhbVtp bl0gIEF0dHJpYnV0ZXMgICBBdHRyaWJ1dGVzIGJpdG1hc2sgdG8gc2V0IGZvciB0aGUgdmFyaWFi bGUuDQogICAgPiArICBAcGFyYW1baW5dICBEYXRhU2l6ZSAgICAgVGhlIHNpemUgaW4gYnl0ZXMg b2YgRGF0YS1CdWZmZXIuDQogICAgPiArICBAcGFyYW1baW5dICBEYXRhICAgICAgICAgUG9pbnQg dG8gdGhlIGNvbnRlbnQgb2YgdGhlIHZhcmlhYmxlLg0KICAgID4gKw0KICAgID4gKyAgQHJldHZh bCAgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgTU9SL01vckxvY2sgY2hlY2sgcGFzcywgYW5k IFZhcmlhYmxlDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZl ciBjYW4gc3RvcmUgdGhlIHZhcmlhYmxlIGRhdGEuDQogICAgPiArICBAcmV0dmFsICBFRklfSU5W QUxJRF9QQVJBTUVURVIgIFRoZSBNT1IvTW9yTG9jayBkYXRhIG9yIGRhdGEgc2l6ZSBvcg0KICAg ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzIGlzIG5vdCBh bGxvd2VkIGZvciBNT1IgdmFyaWFibGUuDQogICAgPiArICBAcmV0dmFsICBFRklfQUNDRVNTX0RF TklFRCAgICAgIFRoZSBNT1IvTW9yTG9jayBpcyBsb2NrZWQuDQogICAgPiArICBAcmV0dmFsICBF RklfQUxSRUFEWV9TVEFSVEVEICAgIFRoZSBNb3JMb2NrIHZhcmlhYmxlIGlzIGhhbmRsZWQgaW5z aWRlIHRoaXMNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rp b24uIFZhcmlhYmxlIGRyaXZlciBjYW4ganVzdCByZXR1cm4NCiAgICA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRUZJX1NVQ0NFU1MuDQogICAgPiArKiovDQogICAgPiArRUZJ X1NUQVRVUw0KICAgID4gK1NldFZhcmlhYmxlQ2hlY2tIYW5kbGVyTW9yICgNCiAgICA+ICsgIElO IENIQVIxNiAgICAqVmFyaWFibGVOYW1lLA0KICAgID4gKyAgSU4gRUZJX0dVSUQgICpWZW5kb3JH dWlkLA0KICAgID4gKyAgSU4gVUlOVDMyICAgIEF0dHJpYnV0ZXMsDQogICAgPiArICBJTiBVSU5U TiAgICAgRGF0YVNpemUsDQogICAgPiArICBJTiBWT0lEICAgICAgKkRhdGENCiAgICA+ICsgICk7 DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBUaGlzIHNlcnZpY2UgaXMgY29uc3VtZWQg YnkgdGhlIHZhcmlhYmxlIG1vZHVsZXMgdG8gcGxhY2UgYSBiYXJyaWVyIHRvIHN0b3ANCiAgICA+ ICsgIHNwZWN1bGF0aXZlIGV4ZWN1dGlvbi4NCiAgICA+ICsNCiAgICA+ICsgIEVuc3VyZXMgdGhh dCBubyBsYXRlciBpbnN0cnVjdGlvbiB3aWxsIGV4ZWN1dGUgc3BlY3VsYXRpdmVseSwgdW50aWwg YWxsIHByaW9yDQogICAgPiArICBpbnN0cnVjdGlvbnMgaGF2ZSBjb21wbGV0ZWQuDQogICAgPiAr DQogICAgPiArKiovDQogICAgPiArVk9JRA0KICAgID4gK1ZhcmlhYmxlU3BlY3VsYXRpb25CYXJy aWVyICgNCiAgICA+ICsgIFZPSUQNCiAgICA+ICsgICk7DQogICAgPiArDQogICAgPiArLyoqDQog ICAgPiArICBOb3RpZnkgdGhlIHN5c3RlbSB0aGF0IHRoZSBTTU0gdmFyaWFibGUgZHJpdmVyIGlz IHJlYWR5Lg0KICAgID4gKyoqLw0KICAgID4gK1ZPSUQNCiAgICA+ICtWYXJpYWJsZU5vdGlmeVNt bVJlYWR5ICgNCiAgICA+ICsgIFZPSUQNCiAgICA+ICsgICk7DQogICAgPiArDQogICAgPiArLyoq DQogICAgPiArICBOb3RpZnkgdGhlIHN5c3RlbSB0aGF0IHRoZSBTTU0gdmFyaWFibGUgd3JpdGUg ZHJpdmVyIGlzIHJlYWR5Lg0KICAgID4gKyoqLw0KICAgID4gK1ZPSUQNCiAgICA+ICtWYXJpYWJs ZU5vdGlmeVNtbVdyaXRlUmVhZHkgKA0KICAgID4gKyAgVk9JRA0KICAgID4gKyAgKTsNCiAgICA+ ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIFZhcmlhYmxlIERyaXZlciBtYWluIGVudHJ5IHBvaW50 LiBUaGUgVmFyaWFibGUgZHJpdmVyIHBsYWNlcyB0aGUgNCBFRkkNCiAgICA+ICsgIHJ1bnRpbWUg c2VydmljZXMgaW4gdGhlIEVGSSBTeXN0ZW0gVGFibGUgYW5kIGluc3RhbGxzIGFyY2ggcHJvdG9j b2xzDQogICAgPiArICBmb3IgdmFyaWFibGUgcmVhZCBhbmQgd3JpdGUgc2VydmljZXMgYmVpbmcg YXZhaWxhYmxlLiBJdCBhbHNvIHJlZ2lzdGVycw0KICAgID4gKyAgYSBub3RpZmljYXRpb24gZnVu Y3Rpb24gZm9yIGFuIEVWVF9TSUdOQUxfVklSVFVBTF9BRERSRVNTX0NIQU5HRQ0KICAgID4gZXZl bnQuDQogICAgPiArDQogICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIFZhcmlhYmxl IHNlcnZpY2Ugc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkLg0KICAgID4gKyoqLw0KICAgID4gK0VG SV9TVEFUVVMNCiAgICA+ICtFRklBUEkNCiAgICA+ICtNbVZhcmlhYmxlU2VydmljZUluaXRpYWxp emUgKA0KICAgID4gKyAgVk9JRA0KICAgID4gKyAgKTsNCiAgICA+ICsNCiAgICA+ICsvKioNCiAg ICA+ICsgIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBidWZmZXIgaXMgdmFsaWQgcGVyIHBy b2Nlc3NvciBhcmNoaXRlY3R1cmUgYW5kDQogICAgPiArICBkb2VzIG5vdCBvdmVybGFwIHdpdGgg U01SQU0uDQogICAgPiArDQogICAgPiArICBAcGFyYW0gQnVmZmVyIFRoZSBidWZmZXIgc3RhcnQg YWRkcmVzcyB0byBiZSBjaGVja2VkLg0KICAgID4gKyAgQHBhcmFtIExlbmd0aCBUaGUgYnVmZmVy IGxlbmd0aCB0byBiZSBjaGVja2VkLg0KICAgID4gKw0KICAgID4gKyAgQHJldHZhbCBUUlVFICBU aGlzIGJ1ZmZlciBpcyB2YWxpZCBwZXIgcHJvY2Vzc29yIGFyY2hpdGVjdHVyZSBhbmQgZG9lcyBu b3QNCiAgICA+ICsgICAgICAgICAgICAgICAgb3ZlcmxhcCB3aXRoIFNNUkFNLg0KICAgID4gKyAg QHJldHZhbCBGQUxTRSBUaGlzIGJ1ZmZlciBpcyBub3QgdmFsaWQgcGVyIHByb2Nlc3NvciBhcmNo aXRlY3R1cmUgb3Igb3ZlcmxhcHMNCiAgICA+ICsgICAgICAgICAgICAgICAgd2l0aCBTTVJBTS4N CiAgICA+ICsqKi8NCiAgICA+ICtCT09MRUFODQogICAgPiArVmFyaWFibGVTbW1Jc0J1ZmZlck91 dHNpZGVTbW1WYWxpZCAoDQogICAgPiArICBJTiBFRklfUEhZU0lDQUxfQUREUkVTUyAgQnVmZmVy LA0KICAgID4gKyAgSU4gVUlOVDY0ICAgICAgICAgICAgICAgIExlbmd0aA0KICAgID4gKyAgKTsN CiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIFdoZXRoZXIgdGhlIFRDRyBvciBUQ0cyIHBy b3RvY29scyBhcmUgaW5zdGFsbGVkIGluIHRoZSBVRUZJIHByb3RvY29sDQogICAgPiBkYXRhYmFz ZS4NCiAgICA+ICsgIFRoaXMgaW5mb3JtYXRpb24gaXMgdXNlZCBieSB0aGUgTW9yTG9jayBjb2Rl IHRvIGluZmVyIHdoZXRoZXIgYW4gZXhpc3RpbmcNCiAgICA+ICsgIE1PUiB2YXJpYWJsZSBpcyBs ZWdpdGltYXRlIG9yIG5vdC4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwgVFJVRSAgRWl0aGVy IHRoZSBUQ0cgb3IgVENHMiBwcm90b2NvbCBpcyBpbnN0YWxsZWQgaW4gdGhlIFVFRkkNCiAgICA+ ICsgICAgICAgICAgICAgICAgcHJvdG9jb2wgZGF0YWJhc2UNCiAgICA+ICsgIEByZXR2YWwgRkFM U0UgTmVpdGhlciB0aGUgVENHIG5vciB0aGUgVENHMiBwcm90b2NvbCBpcyBpbnN0YWxsZWQgaW4g dGhlIFVFRkkNCiAgICA+ICsgICAgICAgICAgICAgICAgcHJvdG9jb2wgZGF0YWJhc2UNCiAgICA+ ICsqKi8NCiAgICA+ICtCT09MRUFODQogICAgPiArVmFyaWFibGVIYXZlVGNnUHJvdG9jb2xzICgN CiAgICA+ICsgIFZPSUQNCiAgICA+ICsgICk7DQogICAgPiArDQogICAgPiArI2VuZGlmDQogICAg PiBkaWZmIC0tZ2l0DQogICAgPiBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJv dGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGUuaA0KICAgID4gYi9NZGVNb2R1bGVQa2cvVW5pdmVy c2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlLmgNCiAgICA+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQogICAgPiBpbmRleCAwMDAwMDAwMDAwMDAuLmM2NzllNTI0MDQzZg0K ICAgID4gLS0tIC9kZXYvbnVsbA0KICAgID4gKysrIGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9W YXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZS5oDQogICAgPiBAQCAtMCwwICsx LDk0OCBAQA0KICAgID4gKy8qKiBAZmlsZQ0KICAgID4gKyAgVGhlIGludGVybmFsIGhlYWRlciBm aWxlIGluY2x1ZGVzIHRoZSBjb21tb24gaGVhZGVyIGZpbGVzLCBkZWZpbmVzDQogICAgPiArICBp bnRlcm5hbCBzdHJ1Y3R1cmUgYW5kIGZ1bmN0aW9ucyB1c2VkIGJ5IFZhcmlhYmxlIG1vZHVsZXMu DQogICAgPiArDQogICAgPiArQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAyMiwgSW50ZWwgQ29ycG9y YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KICAgID4gK1NQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQogICAgPiArDQogICAgPiArKiovDQogICAgPiAr DQogICAgPiArI2lmbmRlZiBWQVJJQUJMRV9IXw0KICAgID4gKyNkZWZpbmUgVkFSSUFCTEVfSF8N CiAgICA+ICsNCiAgICA+ICsjaW5jbHVkZSA8UGlEeGUuaD4NCiAgICA+ICsjaW5jbHVkZSA8UHJv dG9jb2wvVmFyaWFibGVXcml0ZS5oPg0KICAgID4gKyNpbmNsdWRlIDxQcm90b2NvbC9GYXVsdFRv bGVyYW50V3JpdGUuaD4NCiAgICA+ICsjaW5jbHVkZSA8UHJvdG9jb2wvRmlybXdhcmVWb2x1bWVC bG9jay5oPg0KICAgID4gKyNpbmNsdWRlIDxQcm90b2NvbC9WYXJpYWJsZS5oPg0KICAgID4gKyNp bmNsdWRlIDxQcm90b2NvbC9WYXJpYWJsZUxvY2suaD4NCiAgICA+ICsjaW5jbHVkZSA8UHJvdG9j b2wvVmFyQ2hlY2suaD4NCiAgICA+ICsjaW5jbHVkZSA8TGlicmFyeS9QY2RMaWIuaD4NCiAgICA+ ICsjaW5jbHVkZSA8TGlicmFyeS9Ib2JMaWIuaD4NCiAgICA+ICsjaW5jbHVkZSA8TGlicmFyeS9V ZWZpRHJpdmVyRW50cnlQb2ludC5oPg0KICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0R4ZVNlcnZp Y2VzVGFibGVMaWIuaD4NCiAgICA+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpUnVudGltZUxpYi5o Pg0KICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQogICAgPiArI2luY2x1ZGUg PExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlC b290U2VydmljZXNUYWJsZUxpYi5oPg0KICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlMaWIu aD4NCiAgICA+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlTGliLmg+DQogICAgPiArI2luY2x1ZGUg PExpYnJhcnkvU3luY2hyb25pemF0aW9uTGliLmg+DQogICAgPiArI2luY2x1ZGUgPExpYnJhcnkv TWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0KICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0F1dGhWYXJp YWJsZUxpYi5oPg0KICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1ZhckNoZWNrTGliLmg+DQogICAg PiArI2luY2x1ZGUgPExpYnJhcnkvVmFyaWFibGVGbGFzaEluZm9MaWIuaD4NCiAgICA+ICsjaW5j bHVkZSA8TGlicmFyeS9TYWZlSW50TGliLmg+DQogICAgPiArI2luY2x1ZGUgPExpYnJhcnkvUHJv dGVjdGVkVmFyaWFibGVMaWIuaD4NCiAgICA+ICsjaW5jbHVkZSA8R3VpZC9HbG9iYWxWYXJpYWJs ZS5oPg0KICAgID4gKyNpbmNsdWRlIDxHdWlkL0V2ZW50R3JvdXAuaD4NCiAgICA+ICsjaW5jbHVk ZSA8R3VpZC9WYXJpYWJsZUZvcm1hdC5oPg0KICAgID4gKyNpbmNsdWRlIDxHdWlkL1N5c3RlbU52 RGF0YUd1aWQuaD4NCiAgICA+ICsjaW5jbHVkZSA8R3VpZC9GYXVsdFRvbGVyYW50V3JpdGUuaD4N CiAgICA+ICsjaW5jbHVkZSA8R3VpZC9WYXJFcnJvckZsYWcuaD4NCiAgICA+ICsNCiAgICA+ICsj aW5jbHVkZSAiUHJpdmlsZWdlUG9seW1vcnBoaWMuaCINCiAgICA+ICsNCiAgICA+ICsjZGVmaW5l IEVGSV9WQVJJQUJMRV9BVFRSSUJVVEVTX01BU0sgIChFRklfVkFSSUFCTEVfTk9OX1ZPTEFUSUxF IHxcDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFRklfVkFS SUFCTEVfQk9PVFNFUlZJQ0VfQUNDRVNTIHwgXA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRUZJX1ZBUklBQkxFX1JVTlRJTUVfQUNDRVNTIHwgXA0KICAgID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX1ZBUklBQkxFX0hBUkRX QVJFX0VSUk9SX1JFQ09SRCB8IFwNCiAgICA+ICsNCiAgICA+IEVGSV9WQVJJQUJMRV9USU1FX0JB U0VEX0FVVEhFTlRJQ0FURURfV1JJVEVfQUNDRVNTIHwgXA0KICAgID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRUZJX1ZBUklBQkxFX0FQUEVORF9XUklURSkNCiAgICA+ ICsNCiAgICA+ICsvLy8NCiAgICA+ICsvLy8gVGhlIHNpemUgb2YgYSAzIGNoYXJhY3RlciBJU082 MzkgbGFuZ3VhZ2UgY29kZS4NCiAgICA+ICsvLy8NCiAgICA+ICsjZGVmaW5lIElTT182MzlfMl9F TlRSWV9TSVpFICAzDQogICAgPiArDQogICAgPiArdHlwZWRlZiBlbnVtIHsNCiAgICA+ICsgIFZh cmlhYmxlU3RvcmVUeXBlVm9sYXRpbGUsDQogICAgPiArICBWYXJpYWJsZVN0b3JlVHlwZUhvYiwN CiAgICA+ICsgIFZhcmlhYmxlU3RvcmVUeXBlTnYsDQogICAgPiArICBWYXJpYWJsZVN0b3JlVHlw ZU1heA0KICAgID4gK30gVkFSSUFCTEVfU1RPUkVfVFlQRTsNCiAgICA+ICsNCiAgICA+ICt0eXBl ZGVmIHN0cnVjdCB7DQogICAgPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgUGVuZGluZ1Vw ZGF0ZU9mZnNldDsNCiAgICA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICBQZW5kaW5nVXBk YXRlTGVuZ3RoOw0KICAgID4gKyAgVkFSSUFCTEVfU1RPUkVfSEVBREVSICAgICpTdG9yZTsNCiAg ICA+ICt9IFZBUklBQkxFX1JVTlRJTUVfQ0FDSEU7DQogICAgPiArDQogICAgPiArdHlwZWRlZiBz dHJ1Y3Qgew0KICAgID4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAqUmVhZExvY2s7DQog ICAgPiArICBCT09MRUFOICAgICAgICAgICAgICAgICAgICpQZW5kaW5nVXBkYXRlOw0KICAgID4g KyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAqSG9iRmx1c2hDb21wbGV0ZTsNCiAgICA+ICsg IFZBUklBQkxFX1JVTlRJTUVfQ0FDSEUgICAgVmFyaWFibGVSdW50aW1lSG9iQ2FjaGU7DQogICAg PiArICBWQVJJQUJMRV9SVU5USU1FX0NBQ0hFICAgIFZhcmlhYmxlUnVudGltZU52Q2FjaGU7DQog ICAgPiArICBWQVJJQUJMRV9SVU5USU1FX0NBQ0hFICAgIFZhcmlhYmxlUnVudGltZVZvbGF0aWxl Q2FjaGU7DQogICAgPiArfSBWQVJJQUJMRV9SVU5USU1FX0NBQ0hFX0NPTlRFWFQ7DQogICAgPiAr DQogICAgPiArdHlwZWRlZiBzdHJ1Y3Qgew0KICAgID4gKyAgVkFSSUFCTEVfSEVBREVSICAgICpD dXJyUHRyOw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIElmIGJvdGggQURERUQgYW5kIElOX0RF TEVURURfVFJBTlNJVElPTiB2YXJpYWJsZSBhcmUgcHJlc2VudCwNCiAgICA+ICsgIC8vIEluRGVs ZXRlZFRyYW5zaXRpb25QdHIgd2lsbCBwb2ludCB0byB0aGUgSU5fREVMRVRFRF9UUkFOU0lUSU9O IG9uZS4NCiAgICA+ICsgIC8vIE90aGVyd2lzZSwgQ3VyclB0ciB3aWxsIHBvaW50IHRvIHRoZSBB RERFRCBvciBJTl9ERUxFVEVEX1RSQU5TSVRJT04NCiAgICA+IG9uZSwNCiAgICA+ICsgIC8vIGFu ZCBJbkRlbGV0ZWRUcmFuc2l0aW9uUHRyIHdpbGwgYmUgTlVMTCBhdCB0aGUgc2FtZSB0aW1lLg0K ICAgID4gKyAgLy8NCiAgICA+ICsgIFZBUklBQkxFX0hFQURFUiAgICAqSW5EZWxldGVkVHJhbnNp dGlvblB0cjsNCiAgICA+ICsgIFZBUklBQkxFX0hFQURFUiAgICAqRW5kUHRyOw0KICAgID4gKyAg VkFSSUFCTEVfSEVBREVSICAgICpTdGFydFB0cjsNCiAgICA+ICsgIEJPT0xFQU4gICAgICAgICAg ICBWb2xhdGlsZTsNCiAgICA+ICt9IFZBUklBQkxFX1BPSU5URVJfVFJBQ0s7DQogICAgPiArDQog ICAgPiArdHlwZWRlZiBzdHJ1Y3Qgew0KICAgID4gKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAg ICAgICAgICAgIEhvYlZhcmlhYmxlQmFzZTsNCiAgICA+ICsgIEVGSV9QSFlTSUNBTF9BRERSRVNT ICAgICAgICAgICAgICBWb2xhdGlsZVZhcmlhYmxlQmFzZTsNCiAgICA+ICsgIEVGSV9QSFlTSUNB TF9BRERSRVNTICAgICAgICAgICAgICBOb25Wb2xhdGlsZVZhcmlhYmxlQmFzZTsNCiAgICA+ICsg IFZBUklBQkxFX1JVTlRJTUVfQ0FDSEVfQ09OVEVYVCAgICBWYXJpYWJsZVJ1bnRpbWVDYWNoZUNv bnRleHQ7DQogICAgPiArICBFRklfTE9DSyAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFi bGVTZXJ2aWNlc0xvY2s7DQogICAgPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUmVlbnRyYW50U3RhdGU7DQogICAgPiArICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgQXV0aEZvcm1hdDsNCiAgICA+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICBBdXRoU3VwcG9ydDsNCiAgICA+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICBFbXVOdk1vZGU7DQogICAgPiArfSBWQVJJQUJMRV9HTE9CQUw7DQogICAgPiArDQogICAg PiArdHlwZWRlZiBzdHJ1Y3Qgew0KICAgID4gKyAgVkFSSUFCTEVfR0xPQkFMICAgICAgICAgICAg ICAgICAgICAgICBWYXJpYWJsZUdsb2JhbDsNCiAgICA+ICsgIFVJTlROICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVm9sYXRpbGVMYXN0VmFyaWFibGVPZmZzZXQ7DQogICAgPiArICBV SU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vblZvbGF0aWxlTGFzdFZhcmlh YmxlT2Zmc2V0Ow0KICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBDb21tb25WYXJpYWJsZVNwYWNlOw0KICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBDb21tb25NYXhVc2VyVmFyaWFibGVTcGFjZTsNCiAgICA+ICsgIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbW9uUnVudGltZVZhcmlhYmxlU3Bh Y2U7DQogICAgPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1v blZhcmlhYmxlVG90YWxTaXplOw0KICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBDb21tb25Vc2VyVmFyaWFibGVUb3RhbFNpemU7DQogICAgPiArICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEh3RXJyVmFyaWFibGVUb3RhbFNpemU7DQog ICAgPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heFZhcmlhYmxl U2l6ZTsNCiAgICA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4 QXV0aFZhcmlhYmxlU2l6ZTsNCiAgICA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTWF4Vm9sYXRpbGVWYXJpYWJsZVNpemU7DQogICAgPiArICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFNjcmF0Y2hCdWZmZXJTaXplOw0KICAgID4gKyAgQ0hB UjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqUGxhdGZvcm1MYW5nQ29kZXM7DQog ICAgPiArICBDSEFSOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpMYW5nQ29kZXM7 DQogICAgPiArICBDSEFSOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpQbGF0Zm9y bUxhbmc7DQogICAgPiArICBDSEFSOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExh bmdbSVNPXzYzOV8yX0VOVFJZX1NJWkUgKyAxXTsNCiAgICA+ICsgIEVGSV9GSVJNV0FSRV9WT0xV TUVfQkxPQ0tfUFJPVE9DT0wgICAgKkZ2Ykluc3RhbmNlOw0KICAgID4gK30gVkFSSUFCTEVfTU9E VUxFX0dMT0JBTDsNCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIEZsdXNoIHRoZSBIT0Ig dmFyaWFibGUgdG8gZmxhc2guDQogICAgPiArDQogICAgPiArICBAcGFyYW1baW5dIFZhcmlhYmxl TmFtZSAgICAgICBOYW1lIG9mIHZhcmlhYmxlIGhhcyBiZWVuIHVwZGF0ZWQgb3IgZGVsZXRlZC4N CiAgICA+ICsgIEBwYXJhbVtpbl0gVmVuZG9yR3VpZCAgICAgICAgIEd1aWQgb2YgdmFyaWFibGUg aGFzIGJlZW4gdXBkYXRlZCBvciBkZWxldGVkLg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4g K1ZPSUQNCiAgICA+ICtGbHVzaEhvYlZhcmlhYmxlVG9GbGFzaCAoDQogICAgPiArICBJTiBDSEFS MTYgICAgKlZhcmlhYmxlTmFtZSwNCiAgICA+ICsgIElOIEVGSV9HVUlEICAqVmVuZG9yR3VpZA0K ICAgID4gKyAgKTsNCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIFdyaXRlcyBhIGJ1ZmZl ciB0byB2YXJpYWJsZSBzdG9yYWdlIHNwYWNlLCBpbiB0aGUgd29ya2luZyBibG9jay4NCiAgICA+ ICsNCiAgICA+ICsgIFRoaXMgZnVuY3Rpb24gd3JpdGVzIGEgYnVmZmVyIHRvIHZhcmlhYmxlIHN0 b3JhZ2Ugc3BhY2UgaW50byBhIGZpcm13YXJlDQogICAgPiArICB2b2x1bWUgYmxvY2sgZGV2aWNl LiBUaGUgZGVzdGluYXRpb24gaXMgc3BlY2lmaWVkIGJ5IHRoZSBwYXJhbWV0ZXINCiAgICA+ICsg IFZhcmlhYmxlQmFzZS4gRmF1bHQgVG9sZXJhbnQgV3JpdGUgcHJvdG9jb2wgaXMgdXNlZCBmb3Ig d3JpdGluZy4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbSAgVmFyaWFibGVCYXNlICAgQmFzZSBh ZGRyZXNzIG9mIHRoZSB2YXJpYWJsZSB0byB3cml0ZS4NCiAgICA+ICsgIEBwYXJhbSAgVmFyaWFi bGVCdWZmZXIgUG9pbnQgdG8gdGhlIHZhcmlhYmxlIGRhdGEgYnVmZmVyLg0KICAgID4gKw0KICAg ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICBUaGUgZnVuY3Rpb24gY29tcGxldGVkIHN1Y2Nl c3NmdWxseS4NCiAgICA+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgRmFpbCB0byBsb2NhdGUg RmF1bHQgVG9sZXJhbnQgV3JpdGUgcHJvdG9jb2wuDQogICAgPiArICBAcmV0dmFsIEVGSV9BQk9S VEVEICAgIFRoZSBmdW5jdGlvbiBjb3VsZCBub3QgY29tcGxldGUgc3VjY2Vzc2Z1bGx5Lg0KICAg ID4gKw0KICAgID4gKyoqLw0KICAgID4gK0VGSV9TVEFUVVMNCiAgICA+ICtGdHdWYXJpYWJsZVNw YWNlICgNCiAgICA+ICsgIElOIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgVmFyaWFibGVCYXNlLA0K ICAgID4gKyAgSU4gVkFSSUFCTEVfU1RPUkVfSEVBREVSICAqVmFyaWFibGVCdWZmZXINCiAgICA+ ICsgICk7DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBGaW5kcyB2YXJpYWJsZSBpbiBz dG9yYWdlIGJsb2NrcyBvZiB2b2xhdGlsZSBhbmQgbm9uLXZvbGF0aWxlIHN0b3JhZ2UgYXJlYXMu DQogICAgPiArDQogICAgPiArICBUaGlzIGNvZGUgZmluZHMgdmFyaWFibGUgaW4gc3RvcmFnZSBi bG9ja3Mgb2Ygdm9sYXRpbGUgYW5kIG5vbi12b2xhdGlsZSBzdG9yYWdlDQogICAgPiBhcmVhcy4N CiAgICA+ICsgIElmIFZhcmlhYmxlTmFtZSBpcyBhbiBlbXB0eSBzdHJpbmcsIHRoZW4gd2UganVz dCByZXR1cm4gdGhlIGZpcnN0DQogICAgPiArICBxdWFsaWZpZWQgdmFyaWFibGUgd2l0aG91dCBj b21wYXJpbmcgVmFyaWFibGVOYW1lIGFuZCBWZW5kb3JHdWlkLg0KICAgID4gKyAgSWYgSWdub3Jl UnRDaGVjayBpcyBUUlVFLCB0aGVuIHdlIGlnbm9yZSB0aGUNCiAgICA+IEVGSV9WQVJJQUJMRV9S VU5USU1FX0FDQ0VTUyBhdHRyaWJ1dGUgY2hlY2sNCiAgICA+ICsgIGF0IHJ1bnRpbWUgd2hlbiBz ZWFyY2hpbmcgZXhpc3RpbmcgdmFyaWFibGUsIG9ubHkgVmFyaWFibGVOYW1lIGFuZA0KICAgID4g VmVuZG9yR3VpZCBhcmUgY29tcGFyZWQuDQogICAgPiArICBPdGhlcndpc2UsIHZhcmlhYmxlcyB3 aXRob3V0IEVGSV9WQVJJQUJMRV9SVU5USU1FX0FDQ0VTUyBhcmUgbm90IHZpc2libGUNCiAgICA+ IGF0IHJ1bnRpbWUuDQogICAgPiArDQogICAgPiArICBAcGFyYW1baW5dICAgVmFyaWFibGVOYW1l ICAgICAgICAgICBOYW1lIG9mIHRoZSB2YXJpYWJsZSB0byBiZSBmb3VuZC4NCiAgICA+ICsgIEBw YXJhbVtpbl0gICBWZW5kb3JHdWlkICAgICAgICAgICAgIFZlbmRvciBHVUlEIHRvIGJlIGZvdW5k Lg0KICAgID4gKyAgQHBhcmFtW291dF0gIFB0clRyYWNrICAgICAgICAgICAgICAgVkFSSUFCTEVf UE9JTlRFUl9UUkFDSyBzdHJ1Y3R1cmUgZm9yDQogICAgPiBvdXRwdXQsDQogICAgPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgdGhlIHJhbmdlIHNlYXJj aGVkIGFuZCB0aGUgdGFyZ2V0IHBvc2l0aW9uLg0KICAgID4gKyAgQHBhcmFtW2luXSAgIEdsb2Jh bCAgICAgICAgICAgICAgICAgUG9pbnRlciB0byBWQVJJQUJMRV9HTE9CQUwgc3RydWN0dXJlLA0K ICAgID4gaW5jbHVkaW5nDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBiYXNlIG9mIHZvbGF0aWxlIHZhcmlhYmxlIHN0b3JhZ2UgYXJlYSwgYmFzZSBvZg0KICAg ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlYgdmFyaWFibGUgc3Rv cmFnZSBhcmVhLCBhbmQgYSBsb2NrLg0KICAgID4gKyAgQHBhcmFtW2luXSAgIElnbm9yZVJ0Q2hl Y2sgICAgICAgICAgSWdub3JlIEVGSV9WQVJJQUJMRV9SVU5USU1FX0FDQ0VTUw0KICAgID4gYXR0 cmlidXRlDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVj ayBhdCBydW50aW1lIHdoZW4gc2VhcmNoaW5nIHZhcmlhYmxlLg0KICAgID4gKw0KICAgID4gKyAg QHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICAgICAgSWYgVmFyaWFibGVOYW1lIGlzIG5v dCBhbiBlbXB0eSBzdHJpbmcsDQogICAgPiB3aGlsZQ0KICAgID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVmVuZG9yR3VpZCBpcyBOVUxMLg0KICAgID4gKyAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICAgVmFyaWFibGUgc3VjY2Vzc2Z1bGx5IGZvdW5k Lg0KICAgID4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgICAgICAgVmFyaWFibGUg bm90IGZvdW5kDQogICAgPiArDQogICAgPiArKiovDQogICAgPiArRUZJX1NUQVRVUw0KICAgID4g K0ZpbmRWYXJpYWJsZSAoDQogICAgPiArICBJTiAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgKlZh cmlhYmxlTmFtZSwNCiAgICA+ICsgIElOICBFRklfR1VJRCAgICAgICAgICAgICAgICAqVmVuZG9y R3VpZCwNCiAgICA+ICsgIE9VVCBWQVJJQUJMRV9QT0lOVEVSX1RSQUNLICAqUHRyVHJhY2ssDQog ICAgPiArICBJTiAgVkFSSUFCTEVfR0xPQkFMICAgICAgICAgKkdsb2JhbCwNCiAgICA+ICsgIElO ICBCT09MRUFOICAgICAgICAgICAgICAgICBJZ25vcmVSdENoZWNrDQogICAgPiArICApOw0KICAg ID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgVGhpcyBmdW5jdGlvbiBpcyB0byBjaGVjayBpZiB0 aGUgcmVtYWluaW5nIHZhcmlhYmxlIHNwYWNlIGlzIGVub3VnaCB0byBzZXQNCiAgICA+ICsgIGFs bCBWYXJpYWJsZXMgZnJvbSBhcmd1bWVudCBsaXN0IHN1Y2Nlc3NmdWxseS4gVGhlIHB1cnBvc2Ug b2YgdGhlIGNoZWNrDQogICAgPiArICBpcyB0byBrZWVwIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUg VmFyaWFibGVzIHRvIGJlIGluIHZhcmlhYmxlIHN0b3JhZ2UuDQogICAgPiArDQogICAgPiArICBO b3RlOiBWYXJpYWJsZXMgYXJlIGFzc3VtZWQgdG8gYmUgaW4gc2FtZSBzdG9yYWdlLg0KICAgID4g KyAgVGhlIHNldCBzZXF1ZW5jZSBvZiBWYXJpYWJsZXMgd2lsbCBiZSBzYW1lIHdpdGggdGhlIHNl cXVlbmNlIG9mIFZhcmlhYmxlRW50cnkNCiAgICA+IGZyb20gYXJndW1lbnQgbGlzdCwNCiAgICA+ ICsgIHNvIGZvbGxvdyB0aGUgYXJndW1lbnQgc2VxdWVuY2UgdG8gY2hlY2sgdGhlIFZhcmlhYmxl cy4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbVtpbl0gQXR0cmlidXRlcyAgICAgICAgIFZhcmlh YmxlIGF0dHJpYnV0ZXMgZm9yIFZhcmlhYmxlIGVudHJpZXMuDQogICAgPiArICBAcGFyYW1baW5d IE1hcmtlciAgICAgICAgICAgICBWQV9MSVNUIHN0eWxlIHZhcmlhYmxlIGFyZ3VtZW50IGxpc3Qu DQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgYXJn dW1lbnQgbGlzdCB3aXRoIHR5cGUNCiAgICA+IFZBUklBQkxFX0VOVFJZX0NPTlNJU1RFTkNZICou DQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIE5VTEwgdGVybWluYXRl cyB0aGUgbGlzdC4gVGhlIFZhcmlhYmxlU2l6ZSBvZg0KICAgID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVkFSSUFCTEVfRU5UUllfQ09OU0lTVEVOQ1kgaXMgdGhlIHZhcmlhYmxl IGRhdGEgc2l6ZSBhcw0KICAgID4gaW5wdXQuDQogICAgPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBJdCB3aWxsIGJlIGNoYW5nZWQgdG8gdmFyaWFibGUgdG90YWwgc2l6ZSBhcyBv dXRwdXQuDQogICAgPiArDQogICAgPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgICAgICAgICBI YXZlIGVub3VnaCB2YXJpYWJsZSBzcGFjZSB0byBzZXQgdGhlIFZhcmlhYmxlcw0KICAgID4gc3Vj Y2Vzc2Z1bGx5Lg0KICAgID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgICAgICAgICAgTm8gZW5v dWdoIHZhcmlhYmxlIHNwYWNlIHRvIHNldCB0aGUgVmFyaWFibGVzDQogICAgPiBzdWNjZXNzZnVs bHkuDQogICAgPiArDQogICAgPiArKiovDQogICAgPiArQk9PTEVBTg0KICAgID4gK0VGSUFQSQ0K ICAgID4gK0NoZWNrUmVtYWluaW5nU3BhY2VGb3JDb25zaXN0ZW5jeUludGVybmFsICgNCiAgICA+ ICsgIElOIFVJTlQzMiAgIEF0dHJpYnV0ZXMsDQogICAgPiArICBJTiBWQV9MSVNUICBNYXJrZXIN CiAgICA+ICsgICk7DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBVcGRhdGUgdGhlIHZh cmlhYmxlIHJlZ2lvbiB3aXRoIFZhcmlhYmxlIGluZm9ybWF0aW9uLiBJZg0KICAgID4gRUZJX1ZB UklBQkxFX0FVVEhFTlRJQ0FURURfV1JJVEVfQUNDRVNTIGlzIHNldCwNCiAgICA+ICsgIGluZGV4 IG9mIGFzc29jaWF0ZWQgcHVibGljIGtleSBpcyBuZWVkZWQuDQogICAgPiArDQogICAgPiArICBA cGFyYW1baW5dIFZhcmlhYmxlTmFtZSAgICAgICBOYW1lIG9mIHZhcmlhYmxlLg0KICAgID4gKyAg QHBhcmFtW2luXSBWZW5kb3JHdWlkICAgICAgICAgR3VpZCBvZiB2YXJpYWJsZS4NCiAgICA+ICsg IEBwYXJhbVtpbl0gRGF0YSAgICAgICAgICAgICAgIFZhcmlhYmxlIGRhdGEuDQogICAgPiArICBA cGFyYW1baW5dIERhdGFTaXplICAgICAgICAgICBTaXplIG9mIGRhdGEuIDAgbWVhbnMgZGVsZXRl Lg0KICAgID4gKyAgQHBhcmFtW2luXSBBdHRyaWJ1dGVzICAgICAgICAgQXR0cmlidXRlcyBvZiB0 aGUgdmFyaWFibGUuDQogICAgPiArICBAcGFyYW1baW5dIEtleUluZGV4ICAgICAgICAgICBJbmRl eCBvZiBhc3NvY2lhdGVkIHB1YmxpYyBrZXkuDQogICAgPiArICBAcGFyYW1baW5dIE1vbm90b25p Y0NvdW50ICAgICBWYWx1ZSBvZiBhc3NvY2lhdGVkIG1vbm90b25pYyBjb3VudC4NCiAgICA+ICsg IEBwYXJhbVtpbiwgb3V0XSBWYXJpYWJsZSAgICAgIFRoZSB2YXJpYWJsZSBpbmZvcm1hdGlvbiB0 aGF0IGlzIHVzZWQgdG8ga2VlcA0KICAgID4gdHJhY2sgb2YgdmFyaWFibGUgdXNhZ2UuDQogICAg PiArDQogICAgPiArICBAcGFyYW1baW5dIFRpbWVTdGFtcCAgICAgICAgICBWYWx1ZSBvZiBhc3Nv Y2lhdGVkIFRpbWVTdGFtcC4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgIFRoZSB1cGRhdGUgb3BlcmF0aW9uIGlzIHN1Y2Nlc3MuDQogICAgPiArICBAcmV0 dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBWYXJpYWJsZSByZWdpb24gaXMgZnVsbCwgY2Fubm90 IHdyaXRlIG90aGVyDQogICAgPiBkYXRhIGludG8gdGhpcyByZWdpb24uDQogICAgPiArDQogICAg PiArKiovDQogICAgPiArRUZJX1NUQVRVUw0KICAgID4gK1VwZGF0ZVZhcmlhYmxlICgNCiAgICA+ ICsgIElOICAgICAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgKlZhcmlhYmxlTmFtZSwNCiAgICA+ ICsgIElOICAgICAgRUZJX0dVSUQgICAgICAgICAgICAgICAgKlZlbmRvckd1aWQsDQogICAgPiAr ICBJTiAgICAgIFZPSUQgICAgICAgICAgICAgICAgICAgICpEYXRhLA0KICAgID4gKyAgSU4gICAg ICBVSU5UTiAgICAgICAgICAgICAgICAgICBEYXRhU2l6ZSwNCiAgICA+ICsgIElOICAgICAgVUlO VDMyICAgICAgICAgICAgICAgICAgQXR0cmlidXRlcyBPUFRJT05BTCwNCiAgICA+ICsgIElOICAg ICAgVUlOVDMyICAgICAgICAgICAgICAgICAgS2V5SW5kZXggIE9QVElPTkFMLA0KICAgID4gKyAg SU4gICAgICBVSU5UNjQgICAgICAgICAgICAgICAgICBNb25vdG9uaWNDb3VudCAgT1BUSU9OQUws DQogICAgPiArICBJTiBPVVQgIFZBUklBQkxFX1BPSU5URVJfVFJBQ0sgICpWYXJpYWJsZSwNCiAg ICA+ICsgIElOICAgICAgRUZJX1RJTUUgICAgICAgICAgICAgICAgKlRpbWVTdGFtcCAgT1BUSU9O QUwNCiAgICA+ICsgICk7DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBSZXR1cm4gVFJV RSBpZiBFeGl0Qm9vdFNlcnZpY2VzICgpIGhhcyBiZWVuIGNhbGxlZC4NCiAgICA+ICsNCiAgICA+ ICsgIEByZXR2YWwgVFJVRSBJZiBFeGl0Qm9vdFNlcnZpY2VzICgpIGhhcyBiZWVuIGNhbGxlZC4N CiAgICA+ICsqKi8NCiAgICA+ICtCT09MRUFODQogICAgPiArQXRSdW50aW1lICgNCiAgICA+ICsg IFZPSUQNCiAgICA+ICsgICk7DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBJbml0aWFs aXplcyBhIGJhc2ljIG11dHVhbCBleGNsdXNpb24gbG9jay4NCiAgICA+ICsNCiAgICA+ICsgIFRo aXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYSBiYXNpYyBtdXR1YWwgZXhjbHVzaW9uIGxvY2sgdG8g dGhlIHJlbGVhc2VkIHN0YXRlDQogICAgPiArICBhbmQgcmV0dXJucyB0aGUgbG9jay4gIEVhY2gg bG9jayBwcm92aWRlcyBtdXR1YWwgZXhjbHVzaW9uIGFjY2VzcyBhdCBpdHMgdGFzaw0KICAgID4g KyAgcHJpb3JpdHkgbGV2ZWwuICBTaW5jZSB0aGVyZSBpcyBubyBwcmVlbXB0aW9uIG9yIG11bHRp cHJvY2Vzc29yIHN1cHBvcnQgaW4gRUZJLA0KICAgID4gKyAgYWNxdWlyaW5nIHRoZSBsb2NrIG9u bHkgY29uc2lzdHMgb2YgcmFpc2luZyB0byB0aGUgbG9ja3MgVFBMLg0KICAgID4gKyAgSWYgTG9j ayBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KICAgID4gKyAgSWYgUHJpb3JpdHkgaXMgbm90IGEg dmFsaWQgVFBMIHZhbHVlLCB0aGVuIEFTU0VSVCgpLg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFt ICBMb2NrICAgICAgIEEgcG9pbnRlciB0byB0aGUgbG9jayBkYXRhIHN0cnVjdHVyZSB0byBpbml0 aWFsaXplLg0KICAgID4gKyAgQHBhcmFtICBQcmlvcml0eSAgIEVGSSBUUEwgaXMgYXNzb2NpYXRl ZCB3aXRoIHRoZSBsb2NrLg0KICAgID4gKw0KICAgID4gKyAgQHJldHVybiBUaGUgbG9jay4NCiAg ICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtFRklfTE9DSyAqDQogICAgPiArSW5pdGlhbGl6ZUxv Y2sgKA0KICAgID4gKyAgSU4gT1VUIEVGSV9MT0NLICAqTG9jaywNCiAgICA+ICsgIElOIEVGSV9U UEwgICAgICAgUHJpb3JpdHkNCiAgICA+ICsgICk7DQogICAgPiArDQogICAgPiArLyoqDQogICAg PiArICBBY3F1aXJlcyBsb2NrIG9ubHkgYXQgYm9vdCB0aW1lLiBTaW1wbHkgcmV0dXJucyBhdCBy dW50aW1lLg0KICAgID4gKw0KICAgID4gKyAgVGhpcyBpcyBhIHRlbXBlcmFyeSBmdW5jdGlvbiB0 aGF0IHdpbGwgYmUgcmVtb3ZlZCB3aGVuDQogICAgPiArICBFZmlBY3F1aXJlTG9jaygpIGluIFVl ZmlMaWIgY2FuIGhhbmRsZSB0aGUgY2FsbCBpbiBVRUZJDQogICAgPiArICBSdW50aW1lciBkcml2 ZXIgaW4gUlQgcGhhc2UuDQogICAgPiArICBJdCBjYWxscyBFZmlBY3F1aXJlTG9jaygpIGF0IGJv b3QgdGltZSwgYW5kIHNpbXBseSByZXR1cm5zDQogICAgPiArICBhdCBydW50aW1lLg0KICAgID4g Kw0KICAgID4gKyAgQHBhcmFtICBMb2NrICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBsb2NrIHRv IGFjcXVpcmUuDQogICAgPiArDQogICAgPiArKiovDQogICAgPiArVk9JRA0KICAgID4gK0FjcXVp cmVMb2NrT25seUF0Qm9vdFRpbWUgKA0KICAgID4gKyAgSU4gRUZJX0xPQ0sgICpMb2NrDQogICAg PiArICApOw0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgUmVsZWFzZXMgbG9jayBvbmx5 IGF0IGJvb3QgdGltZS4gU2ltcGx5IHJldHVybnMgYXQgcnVudGltZS4NCiAgICA+ICsNCiAgICA+ ICsgIFRoaXMgaXMgYSB0ZW1wZXJhcnkgZnVuY3Rpb24gd2hpY2ggd2lsbCBiZSByZW1vdmVkIHdo ZW4NCiAgICA+ICsgIEVmaVJlbGVhc2VMb2NrKCkgaW4gVWVmaUxpYiBjYW4gaGFuZGxlIHRoZSBj YWxsIGluIFVFRkkNCiAgICA+ICsgIFJ1bnRpbWVyIGRyaXZlciBpbiBSVCBwaGFzZS4NCiAgICA+ ICsgIEl0IGNhbGxzIEVmaVJlbGVhc2VMb2NrKCkgYXQgYm9vdCB0aW1lIGFuZCBzaW1wbHkgcmV0 dXJucw0KICAgID4gKyAgYXQgcnVudGltZS4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbSAgTG9j ayAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgbG9jayB0byByZWxlYXNlLg0KICAgID4gKw0KICAg ID4gKyoqLw0KICAgID4gK1ZPSUQNCiAgICA+ICtSZWxlYXNlTG9ja09ubHlBdEJvb3RUaW1lICgN CiAgICA+ICsgIElOIEVGSV9MT0NLICAqTG9jaw0KICAgID4gKyAgKTsNCiAgICA+ICsNCiAgICA+ ICsvKioNCiAgICA+ICsgIFJldHJpZXZlIHRoZSBGVkIgcHJvdG9jb2wgaW50ZXJmYWNlIGJ5IEhB TkRMRS4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbVtpbl0gIEZ2QmxvY2tIYW5kbGUgICAgIFRo ZSBoYW5kbGUgb2YgRlZCIHByb3RvY29sIHRoYXQgcHJvdmlkZXMNCiAgICA+IHNlcnZpY2VzIGZv cg0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGluZywgd3JpdGlu ZywgYW5kIGVyYXNpbmcgdGhlIHRhcmdldCBibG9jay4NCiAgICA+ICsgIEBwYXJhbVtvdXRdIEZ2 QmxvY2sgICAgICAgICAgIFRoZSBpbnRlcmZhY2Ugb2YgRlZCIHByb3RvY29sDQogICAgPiArDQog ICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgaW50ZXJmYWNlIGluZm9y bWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkDQogICAgPiBwcm90b2NvbCB3YXMgcmV0dXJuZWQuDQog ICAgPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBUaGUgZGV2aWNlIGRvZXMgbm90 IHN1cHBvcnQgdGhlIEZWQiBwcm90b2NvbC4NCiAgICA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURf UEFSQU1FVEVSIEZ2QmxvY2tIYW5kbGUgaXMgbm90IGEgdmFsaWQgRUZJX0hBTkRMRQ0KICAgID4g b3IgRnZCbG9jayBpcyBOVUxMLg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK0VGSV9TVEFU VVMNCiAgICA+ICtHZXRGdmJCeUhhbmRsZSAoDQogICAgPiArICBJTiAgRUZJX0hBTkRMRSAgICAg ICAgICAgICAgICAgICAgICAgICAgRnZCbG9ja0hhbmRsZSwNCiAgICA+ICsgIE9VVCBFRklfRklS TVdBUkVfVk9MVU1FX0JMT0NLX1BST1RPQ09MICAqKkZ2QmxvY2sNCiAgICA+ICsgICk7DQogICAg PiArDQogICAgPiArLyoqDQogICAgPiArICBGdW5jdGlvbiByZXR1cm5zIGFuIGFycmF5IG9mIGhh bmRsZXMgdGhhdCBzdXBwb3J0IHRoZSBGVkIgcHJvdG9jb2wNCiAgICA+ICsgIGluIGEgYnVmZmVy IGFsbG9jYXRlZCBmcm9tIHBvb2wuDQogICAgPiArDQogICAgPiArICBAcGFyYW1bb3V0XSAgTnVt YmVySGFuZGxlcyAgICBUaGUgbnVtYmVyIG9mIGhhbmRsZXMgcmV0dXJuZWQgaW4gQnVmZmVyLg0K ICAgID4gKyAgQHBhcmFtW291dF0gIEJ1ZmZlciAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBi dWZmZXIgdG8gcmV0dXJuIHRoZSByZXF1ZXN0ZWQNCiAgICA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFycmF5IG9mICBoYW5kbGVzIHRoYXQgc3VwcG9ydCBGVkIgcHJvdG9jb2wu DQogICAgPiArDQogICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgYXJy YXkgb2YgaGFuZGxlcyB3YXMgcmV0dXJuZWQgaW4gQnVmZmVyLCBhbmQNCiAgICA+IHRoZSBudW1i ZXIgb2YNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXMgaW4g QnVmZmVyIHdhcyByZXR1cm5lZCBpbiBOdW1iZXJIYW5kbGVzLg0KICAgID4gKyAgQHJldHZhbCBF RklfTk9UX0ZPVU5EICAgICAgICAgTm8gRlZCIGhhbmRsZSB3YXMgZm91bmQuDQogICAgPiArICBA cmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBUaGVyZSBpcyBub3QgZW5vdWdoIHBvb2wgbWVt b3J5IHRvIHN0b3JlDQogICAgPiB0aGUgbWF0Y2hpbmcgcmVzdWx0cy4NCiAgICA+ICsgIEByZXR2 YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE51bWJlckhhbmRsZXMgaXMgTlVMTCBvciBCdWZmZXIg aXMgTlVMTC4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtFRklfU1RBVFVTDQogICAgPiAr R2V0RnZiQ291bnRBbmRCdWZmZXIgKA0KICAgID4gKyAgT1VUIFVJTlROICAgICAgICpOdW1iZXJI YW5kbGVzLA0KICAgID4gKyAgT1VUIEVGSV9IQU5ETEUgICoqQnVmZmVyDQogICAgPiArICApOw0K ICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgSW5pdGlhbGl6ZXMgdmFyaWFibGUgc3RvcmUg YXJlYSBmb3Igbm9uLXZvbGF0aWxlIGFuZCB2b2xhdGlsZSB2YXJpYWJsZS4NCiAgICA+ICsNCiAg ICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIEZ1bmN0aW9uIHN1Y2Nlc3NmdWxs eSBleGVjdXRlZC4NCiAgICA+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgIEZhaWwg dG8gYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSByZXNvdXJjZS4NCiAgICA+ICsNCiAgICA+ICsqKi8N CiAgICA+ICtFRklfU1RBVFVTDQogICAgPiArVmFyaWFibGVDb21tb25Jbml0aWFsaXplICgNCiAg ICA+ICsgIFZPSUQNCiAgICA+ICsgICk7DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBU aGlzIGZ1bmN0aW9uIHJlY2xhaW1zIHZhcmlhYmxlIHN0b3JhZ2UgaWYgZnJlZSBzaXplIGlzIGJl bG93IHRoZSB0aHJlc2hvbGQuDQogICAgPiArDQogICAgPiArKiovDQogICAgPiArVk9JRA0KICAg ID4gK1JlY2xhaW1Gb3JPUyAoDQogICAgPiArICBWT0lEDQogICAgPiArICApOw0KICAgID4gKw0K ICAgID4gKy8qKg0KICAgID4gKyAgR2V0IG1heGltdW0gdmFyaWFibGUgc2l6ZSwgY292ZXJpbmcg Ym90aCBub24tdm9sYXRpbGUgYW5kIHZvbGF0aWxlIHZhcmlhYmxlcy4NCiAgICA+ICsNCiAgICA+ ICsgIEByZXR1cm4gTWF4aW11bSB2YXJpYWJsZSBzaXplLg0KICAgID4gKw0KICAgID4gKyoqLw0K ICAgID4gK1VJTlRODQogICAgPiArR2V0TWF4VmFyaWFibGVTaXplICgNCiAgICA+ICsgIFZPSUQN CiAgICA+ICsgICk7DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBJbml0aWFsaXplcyB2 YXJpYWJsZSB3cml0ZSBzZXJ2aWNlLg0KICAgID4gKw0KICAgID4gKyAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgICBGdW5jdGlvbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuDQogICAgPiArICBA cmV0dmFsIE90aGVycyAgICAgICAgICAgICAgIEZhaWwgdG8gaW5pdGlhbGl6ZSB0aGUgdmFyaWFi bGUgc2VydmljZS4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtFRklfU1RBVFVTDQogICAg PiArVmFyaWFibGVXcml0ZVNlcnZpY2VJbml0aWFsaXplICgNCiAgICA+ICsgIFZPSUQNCiAgICA+ ICsgICk7DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBSZXRyaWV2ZSB0aGUgU01NIEZh dWx0IFRvbGVyZW50IFdyaXRlIHByb3RvY29sIGludGVyZmFjZS4NCiAgICA+ICsNCiAgICA+ICsg IEBwYXJhbVtvdXRdIEZ0d1Byb3RvY29sICAgICAgIFRoZSBpbnRlcmZhY2Ugb2YgU01NIEZ0dyBw cm90b2NvbA0KICAgID4gKw0KICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAg VGhlIFNNTSBTQVIgcHJvdG9jb2wgaW5zdGFuY2Ugd2FzIGZvdW5kIGFuZA0KICAgID4gcmV0dXJu ZWQgaW4gU2FyUHJvdG9jb2wuDQogICAgPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAg ICBUaGUgU01NIFNBUiBwcm90b2NvbCBpbnN0YW5jZSB3YXMgbm90IGZvdW5kLg0KICAgID4gKyAg QHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgU2FyUHJvdG9jb2wgaXMgTlVMTC4NCiAgICA+ ICsNCiAgICA+ICsqKi8NCiAgICA+ICtFRklfU1RBVFVTDQogICAgPiArR2V0RnR3UHJvdG9jb2wg KA0KICAgID4gKyAgT1VUIFZPSUQgICoqRnR3UHJvdG9jb2wNCiAgICA+ICsgICk7DQogICAgPiAr DQogICAgPiArLyoqDQogICAgPiArICBHZXQgdGhlIHByb3BlciBmdmIgaGFuZGxlIGFuZC9vciBm dmIgcHJvdG9jb2wgYnkgdGhlIGdpdmVuIEZsYXNoIGFkZHJlc3MuDQogICAgPiArDQogICAgPiAr ICBAcGFyYW1baW5dIEFkZHJlc3MgICAgICAgIFRoZSBGbGFzaCBhZGRyZXNzLg0KICAgID4gKyAg QHBhcmFtW291dF0gRnZiSGFuZGxlICAgICBJbiBvdXRwdXQsIGlmIGl0IGlzIG5vdCBOVUxMLCBp dCBwb2ludHMgdG8gdGhlIHByb3Blcg0KICAgID4gRlZCIGhhbmRsZS4NCiAgICA+ICsgIEBwYXJh bVtvdXRdIEZ2YlByb3RvY29sICAgSW4gb3V0cHV0LCBpZiBpdCBpcyBub3QgTlVMTCwgaXQgcG9p bnRzIHRvIHRoZSBwcm9wZXINCiAgICA+IEZWQiBwcm90b2NvbC4NCiAgICA+ICsNCiAgICA+ICsq Ki8NCiAgICA+ICtFRklfU1RBVFVTDQogICAgPiArR2V0RnZiSW5mb0J5QWRkcmVzcyAoDQogICAg PiArICBJTiAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAgICAgICAgICAgQWRkcmVzcywNCiAg ICA+ICsgIE9VVCBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICAgICAgICAqRnZiSGFuZGxl IE9QVElPTkFMLA0KICAgID4gKyAgT1VUIEVGSV9GSVJNV0FSRV9WT0xVTUVfQkxPQ0tfUFJPVE9D T0wgICoqRnZiUHJvdG9jb2wgT1BUSU9OQUwNCiAgICA+ICsgICk7DQogICAgPiArDQogICAgPiAr LyoqDQogICAgPiArDQogICAgPiArICBUaGlzIGNvZGUgZmluZHMgdmFyaWFibGUgaW4gc3RvcmFn ZSBibG9ja3MgKFZvbGF0aWxlIG9yIE5vbi1Wb2xhdGlsZSkuDQogICAgPiArDQogICAgPiArICBD YXV0aW9uOiBUaGlzIGZ1bmN0aW9uIG1heSByZWNlaXZlIHVudHJ1c3RlZCBpbnB1dC4NCiAgICA+ ICsgIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGludm9rZWQgaW4gU01NIG1vZGUsIGFuZCBkYXRhc2l6 ZSBhbmQgZGF0YSBhcmUNCiAgICA+IGV4dGVybmFsIGlucHV0Lg0KICAgID4gKyAgVGhpcyBmdW5j dGlvbiB3aWxsIGRvIGJhc2ljIHZhbGlkYXRpb24sIGJlZm9yZSBwYXJzZSB0aGUgZGF0YS4NCiAg ICA+ICsNCiAgICA+ICsgIEBwYXJhbSBWYXJpYWJsZU5hbWUgICAgICAgICAgICAgICBOYW1lIG9m IFZhcmlhYmxlIHRvIGJlIGZvdW5kLg0KICAgID4gKyAgQHBhcmFtIFZlbmRvckd1aWQgICAgICAg ICAgICAgICAgIFZhcmlhYmxlIHZlbmRvciBHVUlELg0KICAgID4gKyAgQHBhcmFtIEF0dHJpYnV0 ZXMgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgZm91bmQu DQogICAgPiArICBAcGFyYW0gRGF0YVNpemUgICAgICAgICAgICAgICAgICAgU2l6ZSBvZiBEYXRh IGZvdW5kLiBJZiBzaXplIGlzIGxlc3MgdGhhbiB0aGUNCiAgICA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkYXRhLCB0aGlzIHZhbHVlIGNvbnRhaW5zIHRoZSByZXF1aXJl ZCBzaXplLg0KICAgID4gKyAgQHBhcmFtIERhdGEgICAgICAgICAgICAgICAgICAgICAgIFRoZSBi dWZmZXIgdG8gcmV0dXJuIHRoZSBjb250ZW50cyBvZiB0aGUgdmFyaWFibGUuDQogICAgPiBNYXkg YmUgTlVMTA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGgg YSB6ZXJvIERhdGFTaXplIGluIG9yZGVyIHRvIGRldGVybWluZSB0aGUgc2l6ZSBidWZmZXINCiAg ICA+IG5lZWRlZC4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1F VEVSICAgICBJbnZhbGlkIHBhcmFtZXRlci4NCiAgICA+ICsgIEByZXR1cm4gRUZJX1NVQ0NFU1Mg ICAgICAgICAgICAgICBGaW5kIHRoZSBzcGVjaWZpZWQgdmFyaWFibGUuDQogICAgPiArICBAcmV0 dXJuIEVGSV9OT1RfRk9VTkQgICAgICAgICAgICAgTm90IGZvdW5kLg0KICAgID4gKyAgQHJldHVy biBFRklfQlVGRkVSX1RPX1NNQUxMICAgICAgIERhdGFTaXplIGlzIHRvbyBzbWFsbCBmb3IgdGhl IHJlc3VsdC4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtFRklfU1RBVFVTDQogICAgPiAr RUZJQVBJDQogICAgPiArVmFyaWFibGVTZXJ2aWNlR2V0VmFyaWFibGUgKA0KICAgID4gKyAgSU4g ICAgICBDSEFSMTYgICAgKlZhcmlhYmxlTmFtZSwNCiAgICA+ICsgIElOICAgICAgRUZJX0dVSUQg ICpWZW5kb3JHdWlkLA0KICAgID4gKyAgT1VUICAgICBVSU5UMzIgICAgKkF0dHJpYnV0ZXMgT1BU SU9OQUwsDQogICAgPiArICBJTiBPVVQgIFVJTlROICAgICAqRGF0YVNpemUsDQogICAgPiArICBP VVQgICAgIFZPSUQgICAgICAqRGF0YSBPUFRJT05BTA0KICAgID4gKyAgKTsNCiAgICA+ICsNCiAg ICA+ICsvKioNCiAgICA+ICsNCiAgICA+ICsgIFRoaXMgY29kZSBGaW5kcyB0aGUgTmV4dCBhdmFp bGFibGUgdmFyaWFibGUuDQogICAgPiArDQogICAgPiArICBDYXV0aW9uOiBUaGlzIGZ1bmN0aW9u IG1heSByZWNlaXZlIHVudHJ1c3RlZCBpbnB1dC4NCiAgICA+ICsgIFRoaXMgZnVuY3Rpb24gbWF5 IGJlIGludm9rZWQgaW4gU01NIG1vZGUuIFRoaXMgZnVuY3Rpb24gd2lsbCBkbyBiYXNpYw0KICAg ID4gdmFsaWRhdGlvbiwgYmVmb3JlIHBhcnNlIHRoZSBkYXRhLg0KICAgID4gKw0KICAgID4gKyAg QHBhcmFtIFZhcmlhYmxlTmFtZVNpemUgICAgICAgICAgIFRoZSBzaXplIG9mIHRoZSBWYXJpYWJs ZU5hbWUgYnVmZmVyLiBUaGUNCiAgICA+IHNpemUgbXVzdCBiZSBsYXJnZQ0KICAgID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVub3VnaCB0byBmaXQgaW5wdXQgc3RyaW5n IHN1cHBsaWVkIGluIFZhcmlhYmxlTmFtZSBidWZmZXIuDQogICAgPiArICBAcGFyYW0gVmFyaWFi bGVOYW1lICAgICAgICAgICAgICAgUG9pbnRlciB0byB2YXJpYWJsZSBuYW1lLg0KICAgID4gKyAg QHBhcmFtIFZlbmRvckd1aWQgICAgICAgICAgICAgICAgIFZhcmlhYmxlIFZlbmRvciBHdWlkLg0K ICAgID4gKw0KICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgIFRoZSBm dW5jdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Lg0KICAgID4gKyAgQHJldHZhbCBFRklfTk9U X0ZPVU5EICAgICAgICAgICAgIFRoZSBuZXh0IHZhcmlhYmxlIHdhcyBub3QgZm91bmQuDQogICAg PiArICBAcmV0dmFsIEVGSV9CVUZGRVJfVE9PX1NNQUxMICAgICAgVGhlIFZhcmlhYmxlTmFtZVNp emUgaXMgdG9vIHNtYWxsIGZvcg0KICAgID4gdGhlIHJlc3VsdC4NCiAgICA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZU5hbWVTaXplIGhhcyBiZWVuIHVwZGF0 ZWQgd2l0aCB0aGUgc2l6ZSBuZWVkZWQNCiAgICA+IHRvIGNvbXBsZXRlIHRoZSByZXF1ZXN0Lg0K ICAgID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICAgIFZhcmlhYmxlTmFtZVNp emUgaXMgTlVMTC4NCiAgICA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgICBW YXJpYWJsZU5hbWUgaXMgTlVMTC4NCiAgICA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1F VEVSICAgICBWZW5kb3JHdWlkIGlzIE5VTEwuDQogICAgPiArICBAcmV0dmFsIEVGSV9JTlZBTElE X1BBUkFNRVRFUiAgICAgVGhlIGlucHV0IHZhbHVlcyBvZiBWYXJpYWJsZU5hbWUgYW5kDQogICAg PiBWZW5kb3JHdWlkIGFyZSBub3QgYSBuYW1lIGFuZA0KICAgID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEdVSUQgb2YgYW4gZXhpc3RpbmcgdmFyaWFibGUuDQogICAgPiAr ICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgICAgTnVsbC10ZXJtaW5hdG9yIGlzIG5v dCBmb3VuZCBpbiB0aGUgZmlyc3QNCiAgICA+IFZhcmlhYmxlTmFtZVNpemUgYnl0ZXMgb2YNCiAg ICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5wdXQgVmFyaWFi bGVOYW1lIGJ1ZmZlci4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtFRklfU1RBVFVTDQog ICAgPiArRUZJQVBJDQogICAgPiArVmFyaWFibGVTZXJ2aWNlR2V0TmV4dFZhcmlhYmxlTmFtZSAo DQogICAgPiArICBJTiBPVVQgIFVJTlROICAgICAqVmFyaWFibGVOYW1lU2l6ZSwNCiAgICA+ICsg IElOIE9VVCAgQ0hBUjE2ICAgICpWYXJpYWJsZU5hbWUsDQogICAgPiArICBJTiBPVVQgIEVGSV9H VUlEICAqVmVuZG9yR3VpZA0KICAgID4gKyAgKTsNCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ ICsNCiAgICA+ICsgIFRoaXMgY29kZSBzZXRzIHZhcmlhYmxlIGluIHN0b3JhZ2UgYmxvY2tzIChW b2xhdGlsZSBvciBOb24tVm9sYXRpbGUpLg0KICAgID4gKw0KICAgID4gKyAgQ2F1dGlvbjogVGhp cyBmdW5jdGlvbiBtYXkgcmVjZWl2ZSB1bnRydXN0ZWQgaW5wdXQuDQogICAgPiArICBUaGlzIGZ1 bmN0aW9uIG1heSBiZSBpbnZva2VkIGluIFNNTSBtb2RlLCBhbmQgZGF0YXNpemUgYW5kIGRhdGEg YXJlDQogICAgPiBleHRlcm5hbCBpbnB1dC4NCiAgICA+ICsgIFRoaXMgZnVuY3Rpb24gd2lsbCBk byBiYXNpYyB2YWxpZGF0aW9uLCBiZWZvcmUgcGFyc2UgdGhlIGRhdGEuDQogICAgPiArICBUaGlz IGZ1bmN0aW9uIHdpbGwgcGFyc2UgdGhlIGF1dGhlbnRpY2F0aW9uIGNhcmVmdWxseSB0byBhdm9p ZCBzZWN1cml0eSBpc3N1ZXMsDQogICAgPiBsaWtlDQogICAgPiArICBidWZmZXIgb3ZlcmZsb3cs IGludGVnZXIgb3ZlcmZsb3cuDQogICAgPiArICBUaGlzIGZ1bmN0aW9uIHdpbGwgY2hlY2sgYXR0 cmlidXRlIGNhcmVmdWxseSB0byBhdm9pZCBhdXRoZW50aWNhdGlvbiBieXBhc3MuDQogICAgPiAr DQogICAgPiArICBAcGFyYW0gVmFyaWFibGVOYW1lICAgICAgICAgICAgICAgICAgICAgTmFtZSBv ZiBWYXJpYWJsZSB0byBiZSBmb3VuZC4NCiAgICA+ICsgIEBwYXJhbSBWZW5kb3JHdWlkICAgICAg ICAgICAgICAgICAgICAgICBWYXJpYWJsZSB2ZW5kb3IgR1VJRC4NCiAgICA+ICsgIEBwYXJhbSBB dHRyaWJ1dGVzICAgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGUgdmFsdWUgb2YgdGhlIHZh cmlhYmxlIGZvdW5kDQogICAgPiArICBAcGFyYW0gRGF0YVNpemUgICAgICAgICAgICAgICAgICAg ICAgICAgU2l6ZSBvZiBEYXRhIGZvdW5kLiBJZiBzaXplIGlzIGxlc3MgdGhhbiB0aGUNCiAgICA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLCB0aGlzIHZh bHVlIGNvbnRhaW5zIHRoZSByZXF1aXJlZCBzaXplLg0KICAgID4gKyAgQHBhcmFtIERhdGEgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgcG9pbnRlci4NCiAgICA+ICsNCiAgICA+ICsg IEByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgICAgICAgICBJbnZhbGlkIHBhcmFtZXRl ci4NCiAgICA+ICsgIEByZXR1cm4gRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICBTZXQg c3VjY2Vzc2Z1bGx5Lg0KICAgID4gKyAgQHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUyAgICAg ICAgICAgIFJlc291cmNlIG5vdCBlbm91Z2ggdG8gc2V0IHZhcmlhYmxlLg0KICAgID4gKyAgQHJl dHVybiBFRklfTk9UX0ZPVU5EICAgICAgICAgICAgICAgICAgIE5vdCBmb3VuZC4NCiAgICA+ICsg IEByZXR1cm4gRUZJX1dSSVRFX1BST1RFQ1RFRCAgICAgICAgICAgICBWYXJpYWJsZSBpcyByZWFk LW9ubHkuDQogICAgPiArDQogICAgPiArKiovDQogICAgPiArRUZJX1NUQVRVUw0KICAgID4gK0VG SUFQSQ0KICAgID4gK1ZhcmlhYmxlU2VydmljZVNldFZhcmlhYmxlICgNCiAgICA+ICsgIElOIENI QVIxNiAgICAqVmFyaWFibGVOYW1lLA0KICAgID4gKyAgSU4gRUZJX0dVSUQgICpWZW5kb3JHdWlk LA0KICAgID4gKyAgSU4gVUlOVDMyICAgIEF0dHJpYnV0ZXMsDQogICAgPiArICBJTiBVSU5UTiAg ICAgRGF0YVNpemUsDQogICAgPiArICBJTiBWT0lEICAgICAgKkRhdGENCiAgICA+ICsgICk7DQog ICAgPiArDQogICAgPiArLyoqDQogICAgPiArDQogICAgPiArICBUaGlzIGNvZGUgcmV0dXJucyBp bmZvcm1hdGlvbiBhYm91dCB0aGUgRUZJIHZhcmlhYmxlcy4NCiAgICA+ICsNCiAgICA+ICsgIENh dXRpb246IFRoaXMgZnVuY3Rpb24gbWF5IHJlY2VpdmUgdW50cnVzdGVkIGlucHV0Lg0KICAgID4g KyAgVGhpcyBmdW5jdGlvbiBtYXkgYmUgaW52b2tlZCBpbiBTTU0gbW9kZS4gVGhpcyBmdW5jdGlv biB3aWxsIGRvIGJhc2ljDQogICAgPiB2YWxpZGF0aW9uLCBiZWZvcmUgcGFyc2UgdGhlIGRhdGEu DQogICAgPiArDQogICAgPiArICBAcGFyYW0gQXR0cmlidXRlcyAgICAgICAgICAgICAgICAgICAg IEF0dHJpYnV0ZXMgYml0bWFzayB0byBzcGVjaWZ5IHRoZSB0eXBlIG9mDQogICAgPiB2YXJpYWJs ZXMNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gd2hp Y2ggdG8gcmV0dXJuIGluZm9ybWF0aW9uLg0KICAgID4gKyAgQHBhcmFtIE1heGltdW1WYXJpYWJs ZVN0b3JhZ2VTaXplICAgICBQb2ludGVyIHRvIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlDQogICAg PiBzdG9yYWdlIHNwYWNlIGF2YWlsYWJsZQ0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBmb3IgdGhlIEVGSSB2YXJpYWJsZXMgYXNzb2NpYXRlZCB3aXRoIHRo ZSBhdHRyaWJ1dGVzDQogICAgPiBzcGVjaWZpZWQuDQogICAgPiArICBAcGFyYW0gUmVtYWluaW5n VmFyaWFibGVTdG9yYWdlU2l6ZSAgIFBvaW50ZXIgdG8gdGhlIHJlbWFpbmluZyBzaXplIG9mIHRo ZQ0KICAgID4gc3RvcmFnZSBzcGFjZSBhdmFpbGFibGUNCiAgICA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIEVGSSB2YXJpYWJsZXMgYXNzb2NpYXRlZCB3aXRo IHRoZSBhdHRyaWJ1dGVzIHNwZWNpZmllZC4NCiAgICA+ICsgIEBwYXJhbSBNYXhpbXVtVmFyaWFi bGVTaXplICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgbWF4aW11bSBzaXplIG9mIGFuDQogICAg PiBpbmRpdmlkdWFsIEVGSSB2YXJpYWJsZXMNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBhdHRyaWJ1dGVzIHNwZWNpZmll ZC4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR1cm4gRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAg ICAgUXVlcnkgc3VjY2Vzc2Z1bGx5Lg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK0VGSV9T VEFUVVMNCiAgICA+ICtFRklBUEkNCiAgICA+ICtWYXJpYWJsZVNlcnZpY2VRdWVyeVZhcmlhYmxl SW5mb0ludGVybmFsICgNCiAgICA+ICsgIElOICBVSU5UMzIgIEF0dHJpYnV0ZXMsDQogICAgPiAr ICBPVVQgVUlOVDY0ICAqTWF4aW11bVZhcmlhYmxlU3RvcmFnZVNpemUsDQogICAgPiArICBPVVQg VUlOVDY0ICAqUmVtYWluaW5nVmFyaWFibGVTdG9yYWdlU2l6ZSwNCiAgICA+ICsgIE9VVCBVSU5U NjQgICpNYXhpbXVtVmFyaWFibGVTaXplDQogICAgPiArICApOw0KICAgID4gKw0KICAgID4gKy8q Kg0KICAgID4gKw0KICAgID4gKyAgVGhpcyBjb2RlIHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQg dGhlIEVGSSB2YXJpYWJsZXMuDQogICAgPiArDQogICAgPiArICBDYXV0aW9uOiBUaGlzIGZ1bmN0 aW9uIG1heSByZWNlaXZlIHVudHJ1c3RlZCBpbnB1dC4NCiAgICA+ICsgIFRoaXMgZnVuY3Rpb24g bWF5IGJlIGludm9rZWQgaW4gU01NIG1vZGUuIFRoaXMgZnVuY3Rpb24gd2lsbCBkbyBiYXNpYw0K ICAgID4gdmFsaWRhdGlvbiwgYmVmb3JlIHBhcnNlIHRoZSBkYXRhLg0KICAgID4gKw0KICAgID4g KyAgQHBhcmFtIEF0dHJpYnV0ZXMgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVzIGJpdG1h c2sgdG8gc3BlY2lmeSB0aGUgdHlwZSBvZg0KICAgID4gdmFyaWFibGVzDQogICAgPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHdoaWNoIHRvIHJldHVybiBpbmZv cm1hdGlvbi4NCiAgICA+ICsgIEBwYXJhbSBNYXhpbXVtVmFyaWFibGVTdG9yYWdlU2l6ZSAgICAg UG9pbnRlciB0byB0aGUgbWF4aW11bSBzaXplIG9mIHRoZQ0KICAgID4gc3RvcmFnZSBzcGFjZSBh dmFpbGFibGUNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Zm9yIHRoZSBFRkkgdmFyaWFibGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXR0cmlidXRlcw0KICAg ID4gc3BlY2lmaWVkLg0KICAgID4gKyAgQHBhcmFtIFJlbWFpbmluZ1ZhcmlhYmxlU3RvcmFnZVNp emUgICBQb2ludGVyIHRvIHRoZSByZW1haW5pbmcgc2l6ZSBvZiB0aGUNCiAgICA+IHN0b3JhZ2Ug c3BhY2UgYXZhaWxhYmxlDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGZvciBFRkkgdmFyaWFibGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXR0cmlidXRlcyBz cGVjaWZpZWQuDQogICAgPiArICBAcGFyYW0gTWF4aW11bVZhcmlhYmxlU2l6ZSAgICAgICAgICAg IFBvaW50ZXIgdG8gdGhlIG1heGltdW0gc2l6ZSBvZiBhbg0KICAgID4gaW5kaXZpZHVhbCBFRkkg dmFyaWFibGVzDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGFzc29jaWF0ZWQgd2l0aCB0aGUgYXR0cmlidXRlcyBzcGVjaWZpZWQuDQogICAgPiArDQogICAg PiArICBAcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgICAgICAgIEFuIGludmFsaWQgY29t YmluYXRpb24gb2YgYXR0cmlidXRlDQogICAgPiBiaXRzIHdhcyBzdXBwbGllZC4NCiAgICA+ICsg IEByZXR1cm4gRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgUXVlcnkgc3VjY2Vzc2Z1bGx5 Lg0KICAgID4gKyAgQHJldHVybiBFRklfVU5TVVBQT1JURUQgICAgICAgICAgICAgICBUaGUgYXR0 cmlidXRlIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcw0KICAgID4gcGxhdGZvcm0uDQogICAgPiAr DQogICAgPiArKiovDQogICAgPiArRUZJX1NUQVRVUw0KICAgID4gK0VGSUFQSQ0KICAgID4gK1Zh cmlhYmxlU2VydmljZVF1ZXJ5VmFyaWFibGVJbmZvICgNCiAgICA+ICsgIElOICBVSU5UMzIgIEF0 dHJpYnV0ZXMsDQogICAgPiArICBPVVQgVUlOVDY0ICAqTWF4aW11bVZhcmlhYmxlU3RvcmFnZVNp emUsDQogICAgPiArICBPVVQgVUlOVDY0ICAqUmVtYWluaW5nVmFyaWFibGVTdG9yYWdlU2l6ZSwN CiAgICA+ICsgIE9VVCBVSU5UNjQgICpNYXhpbXVtVmFyaWFibGVTaXplDQogICAgPiArICApOw0K ICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgTWFyayBhIHZhcmlhYmxlIHRoYXQgd2lsbCBi ZWNvbWUgcmVhZC1vbmx5IGFmdGVyIGxlYXZpbmcgdGhlIERYRSBwaGFzZSBvZg0KICAgID4gZXhl Y3V0aW9uLg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtW2luXSBUaGlzICAgICAgICAgIFRoZSBW QVJJQUJMRV9MT0NLX1BST1RPQ09MIGluc3RhbmNlLg0KICAgID4gKyAgQHBhcmFtW2luXSBWYXJp YWJsZU5hbWUgIEEgcG9pbnRlciB0byB0aGUgdmFyaWFibGUgbmFtZSB0aGF0IHdpbGwgYmUgbWFk ZQ0KICAgID4gcmVhZC1vbmx5IHN1YnNlcXVlbnRseS4NCiAgICA+ICsgIEBwYXJhbVtpbl0gVmVu ZG9yR3VpZCAgICBBIHBvaW50ZXIgdG8gdGhlIHZlbmRvciBHVUlEIHRoYXQgd2lsbCBiZSBtYWRl DQogICAgPiByZWFkLW9ubHkgc3Vic2VxdWVudGx5Lg0KICAgID4gKw0KICAgID4gKyAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHZhcmlhYmxlIHNwZWNpZmllZCBieSB0aGUgVmFy aWFibGVOYW1lIGFuZA0KICAgID4gdGhlIFZlbmRvckd1aWQgd2FzIG1hcmtlZA0KICAgID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgcGVuZGluZyB0byBiZSByZWFkLW9ubHku DQogICAgPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBWYXJpYWJsZU5hbWUgb3Ig VmVuZG9yR3VpZCBpcyBOVUxMLg0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3IgVmFyaWFibGVOYW1lIGlzIGFuIGVtcHR5IHN0cmluZy4NCiAgICA+ICsgIEByZXR2YWwg RUZJX0FDQ0VTU19ERU5JRUQgICAgIEVGSV9FTkRfT0ZfRFhFX0VWRU5UX0dST1VQX0dVSUQgb3IN CiAgICA+IEVGSV9FVkVOVF9HUk9VUF9SRUFEWV9UT19CT09UIGhhcw0KICAgID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeSBiZWVuIHNpZ25hbGVkLg0KICAgID4gKyAg QHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgVGhlcmUgaXMgbm90IGVub3VnaCByZXNvdXJj ZSB0byBob2xkIHRoZQ0KICAgID4gbG9jayByZXF1ZXN0Lg0KICAgID4gKyoqLw0KICAgID4gK0VG SV9TVEFUVVMNCiAgICA+ICtFRklBUEkNCiAgICA+ICtWYXJpYWJsZUxvY2tSZXF1ZXN0VG9Mb2Nr ICgNCiAgICA+ICsgIElOIENPTlNUIEVES0lJX1ZBUklBQkxFX0xPQ0tfUFJPVE9DT0wgICpUaGlz LA0KICAgID4gKyAgSU4gICAgICAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgKlZhcmlh YmxlTmFtZSwNCiAgICA+ICsgIElOICAgICAgIEVGSV9HVUlEICAgICAgICAgICAgICAgICAgICAg ICpWZW5kb3JHdWlkDQogICAgPiArICApOw0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAg UmVnaXN0ZXIgU2V0VmFyaWFibGUgY2hlY2sgaGFuZGxlci4NCiAgICA+ICsNCiAgICA+ICsgIEBw YXJhbVtpbl0gSGFuZGxlciAgICAgICAgICAgIFBvaW50ZXIgdG8gY2hlY2sgaGFuZGxlci4NCiAg ICA+ICsNCiAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBTZXRWYXJp YWJsZSBjaGVjayBoYW5kbGVyIHdhcyByZWdpc3RlcmVkDQogICAgPiBzdWNjZXNzZnVsbHkuDQog ICAgPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBIYW5kbGVyIGlzIE5VTEwuDQog ICAgPiArICBAcmV0dmFsIEVGSV9BQ0NFU1NfREVOSUVEICAgICBFRklfRU5EX09GX0RYRV9FVkVO VF9HUk9VUF9HVUlEIG9yDQogICAgPiBFRklfRVZFTlRfR1JPVVBfUkVBRFlfVE9fQk9PVCBoYXMN CiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgYmVlbiBzaWdu YWxlZC4NCiAgICA+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgIFRoZXJlIGlzIG5v dCBlbm91Z2ggcmVzb3VyY2UgZm9yIHRoZQ0KICAgID4gU2V0VmFyaWFibGUgY2hlY2sgaGFuZGxl ciByZWdpc3RlciByZXF1ZXN0Lg0KICAgID4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAg ICAgVGhpcyBpbnRlcmZhY2UgaXMgbm90IGltcGxlbWVudGVkLg0KICAgID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGl0IGlzIHVuc3VwcG9ydGVkIGluIFZh ckNoZWNrIHByb3RvY29sIGlmIGJvdGgNCiAgICA+IFZhckNoZWNrIGFuZCBTbW1WYXJDaGVjayBw cm90b2NvbHMgYXJlIHByZXNlbnQuDQogICAgPiArDQogICAgPiArKiovDQogICAgPiArRUZJX1NU QVRVUw0KICAgID4gK0VGSUFQSQ0KICAgID4gK1ZhckNoZWNrUmVnaXN0ZXJTZXRWYXJpYWJsZUNo ZWNrSGFuZGxlciAoDQogICAgPiArICBJTiBWQVJfQ0hFQ0tfU0VUX1ZBUklBQkxFX0NIRUNLX0hB TkRMRVIgIEhhbmRsZXINCiAgICA+ICsgICk7DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiAr ICBWYXJpYWJsZSBwcm9wZXJ0eSBzZXQuDQogICAgPiArDQogICAgPiArICBAcGFyYW1baW5dIE5h bWUgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSB2YXJpYWJsZSBuYW1lLg0KICAgID4gKyAg QHBhcmFtW2luXSBHdWlkICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgdmVuZG9yIEdVSUQu DQogICAgPiArICBAcGFyYW1baW5dIFZhcmlhYmxlUHJvcGVydHkgICBQb2ludGVyIHRvIHRoZSBp bnB1dCB2YXJpYWJsZSBwcm9wZXJ0eS4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgICAgIFRoZSBwcm9wZXJ0eSBvZiB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgdGhl IE5hbWUNCiAgICA+IGFuZCBHdWlkIHdhcyBzZXQgc3VjY2Vzc2Z1bGx5Lg0KICAgID4gKyAgQHJl dHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgTmFtZSwgR3VpZCBvciBWYXJpYWJsZVByb3BlcnR5 IGlzIE5VTEwsDQogICAgPiBvciBOYW1lIGlzIGFuIGVtcHR5IHN0cmluZywNCiAgICA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHRoZSBmaWVsZHMgb2YgVmFyaWFibGVQcm9w ZXJ0eSBhcmUgbm90IHZhbGlkLg0KICAgID4gKyAgQHJldHZhbCBFRklfQUNDRVNTX0RFTklFRCAg ICAgRUZJX0VORF9PRl9EWEVfRVZFTlRfR1JPVVBfR1VJRCBvcg0KICAgID4gRUZJX0VWRU5UX0dS T1VQX1JFQURZX1RPX0JPT1QgaGFzDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBhbHJlYWR5IGJlZW4gc2lnbmFsZWQuDQogICAgPiArICBAcmV0dmFsIEVGSV9PVVRfT0Zf UkVTT1VSQ0VTICBUaGVyZSBpcyBub3QgZW5vdWdoIHJlc291cmNlIGZvciB0aGUNCiAgICA+IHZh cmlhYmxlIHByb3BlcnR5IHNldCByZXF1ZXN0Lg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4g K0VGSV9TVEFUVVMNCiAgICA+ICtFRklBUEkNCiAgICA+ICtWYXJDaGVja1ZhcmlhYmxlUHJvcGVy dHlTZXQgKA0KICAgID4gKyAgSU4gQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAqTmFtZSwN CiAgICA+ICsgIElOIEVGSV9HVUlEICAgICAgICAgICAgICAgICAgICAgKkd1aWQsDQogICAgPiAr ICBJTiBWQVJfQ0hFQ0tfVkFSSUFCTEVfUFJPUEVSVFkgICpWYXJpYWJsZVByb3BlcnR5DQogICAg PiArICApOw0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgVmFyaWFibGUgcHJvcGVydHkg Z2V0Lg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtW2luXSAgTmFtZSAgICAgICAgICAgICAgUG9p bnRlciB0byB0aGUgdmFyaWFibGUgbmFtZS4NCiAgICA+ICsgIEBwYXJhbVtpbl0gIEd1aWQgICAg ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIHZlbmRvciBHVUlELg0KICAgID4gKyAgQHBhcmFtW291 dF0gVmFyaWFibGVQcm9wZXJ0eSAgUG9pbnRlciB0byB0aGUgb3V0cHV0IHZhcmlhYmxlIHByb3Bl cnR5Lg0KICAgID4gKw0KICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhl IHByb3BlcnR5IG9mIHZhcmlhYmxlIHNwZWNpZmllZCBieSB0aGUgTmFtZQ0KICAgID4gYW5kIEd1 aWQgd2FzIGdvdCBzdWNjZXNzZnVsbHkuDQogICAgPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BB UkFNRVRFUiBOYW1lLCBHdWlkIG9yIFZhcmlhYmxlUHJvcGVydHkgaXMgTlVMTCwNCiAgICA+IG9y IE5hbWUgaXMgYW4gZW1wdHkgc3RyaW5nLg0KICAgID4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5E ICAgICAgICAgVGhlIHByb3BlcnR5IG9mIHZhcmlhYmxlIHNwZWNpZmllZCBieSB0aGUgTmFtZQ0K ICAgID4gYW5kIEd1aWQgd2FzIG5vdCBmb3VuZC4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ ICtFRklfU1RBVFVTDQogICAgPiArRUZJQVBJDQogICAgPiArVmFyQ2hlY2tWYXJpYWJsZVByb3Bl cnR5R2V0ICgNCiAgICA+ICsgIElOIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICpOYW1l LA0KICAgID4gKyAgSU4gRUZJX0dVSUQgICAgICAgICAgICAgICAgICAgICAgKkd1aWQsDQogICAg PiArICBPVVQgVkFSX0NIRUNLX1ZBUklBQkxFX1BST1BFUlRZICAqVmFyaWFibGVQcm9wZXJ0eQ0K ICAgID4gKyAgKTsNCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIEluaXRpYWxpemUgdmFy aWFibGUgcXVvdGEuDQogICAgPiArDQogICAgPiArKiovDQogICAgPiArVk9JRA0KICAgID4gK0lu aXRpYWxpemVWYXJpYWJsZVF1b3RhICgNCiAgICA+ICsgIFZPSUQNCiAgICA+ICsgICk7DQogICAg PiArDQogICAgPiArZXh0ZXJuIFZBUklBQkxFX01PRFVMRV9HTE9CQUwgICAgICAqbVZhcmlhYmxl TW9kdWxlR2xvYmFsOw0KICAgID4gK2V4dGVybiBFRklfRklSTVdBUkVfVk9MVU1FX0hFQURFUiAg Km1OdkZ2SGVhZGVyQ2FjaGU7DQogICAgPiArZXh0ZXJuIFZBUklBQkxFX1NUT1JFX0hFQURFUiAg ICAgICAqbU52VmFyaWFibGVDYWNoZTsNCiAgICA+ICtleHRlcm4gVkFSSUFCTEVfSU5GT19FTlRS WSAgICAgICAgICpnVmFyaWFibGVJbmZvOw0KICAgID4gK2V4dGVybiBCT09MRUFOICAgICAgICAg ICAgICAgICAgICAgbUVuZE9mRHhlOw0KICAgID4gK2V4dGVybiBWQVJfQ0hFQ0tfUkVRVUVTVF9T T1VSQ0UgICAgbVJlcXVlc3RTb3VyY2U7DQogICAgPiArDQogICAgPiArZXh0ZXJuIEFVVEhfVkFS X0xJQl9DT05URVhUX09VVCAgbUF1dGhDb250ZXh0T3V0Ow0KICAgID4gKw0KICAgID4gKy8qKg0K ICAgID4gKyAgRmluZHMgdmFyaWFibGUgaW4gc3RvcmFnZSBibG9ja3Mgb2Ygdm9sYXRpbGUgYW5k IG5vbi12b2xhdGlsZSBzdG9yYWdlIGFyZWFzLg0KICAgID4gKw0KICAgID4gKyAgVGhpcyBjb2Rl IGZpbmRzIHZhcmlhYmxlIGluIHN0b3JhZ2UgYmxvY2tzIG9mIHZvbGF0aWxlIGFuZCBub24tdm9s YXRpbGUgc3RvcmFnZQ0KICAgID4gYXJlYXMuDQogICAgPiArICBJZiBWYXJpYWJsZU5hbWUgaXMg YW4gZW1wdHkgc3RyaW5nLCB0aGVuIHdlIGp1c3QgcmV0dXJuIHRoZSBmaXJzdA0KICAgID4gKyAg cXVhbGlmaWVkIHZhcmlhYmxlIHdpdGhvdXQgY29tcGFyaW5nIFZhcmlhYmxlTmFtZSBhbmQgVmVu ZG9yR3VpZC4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbVtpbl0gIFZhcmlhYmxlTmFtZSAgICAg ICAgICBOYW1lIG9mIHRoZSB2YXJpYWJsZSB0byBiZSBmb3VuZC4NCiAgICA+ICsgIEBwYXJhbVtp bl0gIFZlbmRvckd1aWQgICAgICAgICAgICBWYXJpYWJsZSB2ZW5kb3IgR1VJRCB0byBiZSBmb3Vu ZC4NCiAgICA+ICsgIEBwYXJhbVtvdXRdIEF1dGhWYXJpYWJsZUluZm8gICAgICBQb2ludGVyIHRv IEFVVEhfVkFSSUFCTEVfSU5GTyBzdHJ1Y3R1cmUNCiAgICA+IGZvcg0KICAgID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBvZiB0aGUgdmFyaWFibGUgZm91bmQu DQogICAgPiArDQogICAgPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgICAgSWYg VmFyaWFibGVOYW1lIGlzIG5vdCBhbiBlbXB0eSBzdHJpbmcsDQogICAgPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgVmVuZG9yR3VpZCBpcyBOVUxMLg0KICAgID4g KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgIFZhcmlhYmxlIHN1Y2Nlc3NmdWxs eSBmb3VuZC4NCiAgICA+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICAgICBWYXJp YWJsZSBub3QgZm91bmQNCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtFRklfU1RBVFVTDQog ICAgPiArRUZJQVBJDQogICAgPiArVmFyaWFibGVFeExpYkZpbmRWYXJpYWJsZSAoDQogICAgPiAr ICBJTiAgQ0hBUjE2ICAgICAgICAgICAgICAqVmFyaWFibGVOYW1lLA0KICAgID4gKyAgSU4gIEVG SV9HVUlEICAgICAgICAgICAgKlZlbmRvckd1aWQsDQogICAgPiArICBPVVQgQVVUSF9WQVJJQUJM RV9JTkZPICAqQXV0aFZhcmlhYmxlSW5mbw0KICAgID4gKyAgKTsNCiAgICA+ICsNCiAgICA+ICsv KioNCiAgICA+ICsgIEZpbmRzIG5leHQgdmFyaWFibGUgaW4gc3RvcmFnZSBibG9ja3Mgb2Ygdm9s YXRpbGUgYW5kIG5vbi12b2xhdGlsZSBzdG9yYWdlIGFyZWFzLg0KICAgID4gKw0KICAgID4gKyAg VGhpcyBjb2RlIGZpbmRzIG5leHQgdmFyaWFibGUgaW4gc3RvcmFnZSBibG9ja3Mgb2Ygdm9sYXRp bGUgYW5kIG5vbi12b2xhdGlsZQ0KICAgID4gc3RvcmFnZSBhcmVhcy4NCiAgICA+ICsgIElmIFZh cmlhYmxlTmFtZSBpcyBhbiBlbXB0eSBzdHJpbmcsIHRoZW4gd2UganVzdCByZXR1cm4gdGhlIGZp cnN0DQogICAgPiArICBxdWFsaWZpZWQgdmFyaWFibGUgd2l0aG91dCBjb21wYXJpbmcgVmFyaWFi bGVOYW1lIGFuZCBWZW5kb3JHdWlkLg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtW2luXSAgVmFy aWFibGVOYW1lICAgICAgICAgIE5hbWUgb2YgdGhlIHZhcmlhYmxlIHRvIGJlIGZvdW5kLg0KICAg ID4gKyAgQHBhcmFtW2luXSAgVmVuZG9yR3VpZCAgICAgICAgICAgIFZhcmlhYmxlIHZlbmRvciBH VUlEIHRvIGJlIGZvdW5kLg0KICAgID4gKyAgQHBhcmFtW291dF0gQXV0aFZhcmlhYmxlSW5mbyAg ICAgIFBvaW50ZXIgdG8gQVVUSF9WQVJJQUJMRV9JTkZPIHN0cnVjdHVyZQ0KICAgID4gZm9yDQog ICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IG9mIHRoZSBu ZXh0IHZhcmlhYmxlLg0KICAgID4gKw0KICAgID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJB TUVURVIgICAgIElmIFZhcmlhYmxlTmFtZSBpcyBub3QgYW4gZW1wdHkgc3RyaW5nLA0KICAgID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIFZlbmRvckd1aWQgaXMg TlVMTC4NCiAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICBWYXJpYWJs ZSBzdWNjZXNzZnVsbHkgZm91bmQuDQogICAgPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAg ICAgICAgICAgVmFyaWFibGUgbm90IGZvdW5kDQogICAgPiArDQogICAgPiArKiovDQogICAgPiAr RUZJX1NUQVRVUw0KICAgID4gK0VGSUFQSQ0KICAgID4gK1ZhcmlhYmxlRXhMaWJGaW5kTmV4dFZh cmlhYmxlICgNCiAgICA+ICsgIElOICBDSEFSMTYgICAgICAgICAgICAgICpWYXJpYWJsZU5hbWUs DQogICAgPiArICBJTiAgRUZJX0dVSUQgICAgICAgICAgICAqVmVuZG9yR3VpZCwNCiAgICA+ICsg IE9VVCBBVVRIX1ZBUklBQkxFX0lORk8gICpBdXRoVmFyaWFibGVJbmZvDQogICAgPiArICApOw0K ICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgVXBkYXRlIHRoZSB2YXJpYWJsZSByZWdpb24g d2l0aCBWYXJpYWJsZSBpbmZvcm1hdGlvbi4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbVtpbl0g QXV0aFZhcmlhYmxlSW5mbyAgICAgICBQb2ludGVyIEFVVEhfVkFSSUFCTEVfSU5GTyBzdHJ1Y3R1 cmUgZm9yDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQg b2YgdGhlIHZhcmlhYmxlLg0KICAgID4gKw0KICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgICAgIFRoZSB1cGRhdGUgb3BlcmF0aW9uIGlzIHN1Y2Nlc3MuDQogICAgPiArICBA cmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgICAgSW52YWxpZCBwYXJhbWV0ZXIuDQogICAg PiArICBAcmV0dmFsIEVGSV9XUklURV9QUk9URUNURUQgICAgICAgVmFyaWFibGUgaXMgd3JpdGUt cHJvdGVjdGVkLg0KICAgID4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgICAgIFRo ZXJlIGlzIG5vdCBlbm91Z2ggcmVzb3VyY2UuDQogICAgPiArDQogICAgPiArKiovDQogICAgPiAr RUZJX1NUQVRVUw0KICAgID4gK0VGSUFQSQ0KICAgID4gK1ZhcmlhYmxlRXhMaWJVcGRhdGVWYXJp YWJsZSAoDQogICAgPiArICBJTiBBVVRIX1ZBUklBQkxFX0lORk8gICpBdXRoVmFyaWFibGVJbmZv DQogICAgPiArICApOw0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgR2V0IHNjcmF0Y2gg YnVmZmVyLg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtW2luLCBvdXRdIFNjcmF0Y2hCdWZmZXJT aXplIFNjcmF0Y2ggYnVmZmVyIHNpemUuIElmIGlucHV0IHNpemUgaXMgZ3JlYXRlcg0KICAgID4g dGhhbg0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYXhp bXVtIHN1cHBvcnRlZCBidWZmZXIgc2l6ZSwgdGhpcyB2YWx1ZSBjb250YWlucw0KICAgID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBi dWZmZXIgc2l6ZSBhcyBvdXRwdXQuDQogICAgPiArICBAcGFyYW1bb3V0XSAgICAgU2NyYXRjaEJ1 ZmZlciAgICAgUG9pbnRlciB0byBzY3JhdGNoIGJ1ZmZlciBhZGRyZXNzLg0KICAgID4gKw0KICAg ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICBHZXQgc2NyYXRjaCBidWZmZXIgc3VjY2Vz c2Z1bGx5Lg0KICAgID4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICBJZiBpbnB1dCBzaXpl IGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bQ0KICAgID4gc3VwcG9ydGVkIGJ1ZmZlciBzaXpl Lg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK0VGSV9TVEFUVVMNCiAgICA+ICtFRklBUEkN CiAgICA+ICtWYXJpYWJsZUV4TGliR2V0U2NyYXRjaEJ1ZmZlciAoDQogICAgPiArICBJTiBPVVQg VUlOVE4gICpTY3JhdGNoQnVmZmVyU2l6ZSwNCiAgICA+ICsgIE9VVCAgICBWT0lEICAgKipTY3Jh dGNoQnVmZmVyDQogICAgPiArICApOw0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgVGhp cyBmdW5jdGlvbiBpcyB0byBjaGVjayBpZiB0aGUgcmVtYWluaW5nIHZhcmlhYmxlIHNwYWNlIGlz IGVub3VnaCB0byBzZXQNCiAgICA+ICsgIGFsbCBWYXJpYWJsZXMgZnJvbSBhcmd1bWVudCBsaXN0 IHN1Y2Nlc3NmdWxseS4gVGhlIHB1cnBvc2Ugb2YgdGhlIGNoZWNrDQogICAgPiArICBpcyB0byBr ZWVwIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgVmFyaWFibGVzIHRvIGJlIGluIHZhcmlhYmxlIHN0 b3JhZ2UuDQogICAgPiArDQogICAgPiArICBOb3RlOiBWYXJpYWJsZXMgYXJlIGFzc3VtZWQgdG8g YmUgaW4gc2FtZSBzdG9yYWdlLg0KICAgID4gKyAgVGhlIHNldCBzZXF1ZW5jZSBvZiBWYXJpYWJs ZXMgd2lsbCBiZSBzYW1lIHdpdGggdGhlIHNlcXVlbmNlIG9mIFZhcmlhYmxlRW50cnkNCiAgICA+ IGZyb20gYXJndW1lbnQgbGlzdCwNCiAgICA+ICsgIHNvIGZvbGxvdyB0aGUgYXJndW1lbnQgc2Vx dWVuY2UgdG8gY2hlY2sgdGhlIFZhcmlhYmxlcy4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbVtp bl0gQXR0cmlidXRlcyAgICAgICAgIFZhcmlhYmxlIGF0dHJpYnV0ZXMgZm9yIFZhcmlhYmxlIGVu dHJpZXMuDQogICAgPiArICBAcGFyYW0gLi4uICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFi bGUgYXJndW1lbnQgbGlzdCB3aXRoIHR5cGUNCiAgICA+IFZBUklBQkxFX0VOVFJZX0NPTlNJU1RF TkNZICouDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIE5VTEwgdGVy bWluYXRlcyB0aGUgbGlzdC4gVGhlIFZhcmlhYmxlU2l6ZSBvZg0KICAgID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVkFSSUFCTEVfRU5UUllfQ09OU0lTVEVOQ1kgaXMgdGhlIHZh cmlhYmxlIGRhdGEgc2l6ZSBhcw0KICAgID4gaW5wdXQuDQogICAgPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBJdCB3aWxsIGJlIGNoYW5nZWQgdG8gdmFyaWFibGUgdG90YWwgc2l6 ZSBhcyBvdXRwdXQuDQogICAgPiArDQogICAgPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgICAg ICAgICBIYXZlIGVub3VnaCB2YXJpYWJsZSBzcGFjZSB0byBzZXQgdGhlIFZhcmlhYmxlcw0KICAg ID4gc3VjY2Vzc2Z1bGx5Lg0KICAgID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgICAgICAgICAg Tm8gZW5vdWdoIHZhcmlhYmxlIHNwYWNlIHRvIHNldCB0aGUgVmFyaWFibGVzDQogICAgPiBzdWNj ZXNzZnVsbHkuDQogICAgPiArDQogICAgPiArKiovDQogICAgPiArQk9PTEVBTg0KICAgID4gK0VG SUFQSQ0KICAgID4gK1ZhcmlhYmxlRXhMaWJDaGVja1JlbWFpbmluZ1NwYWNlRm9yQ29uc2lzdGVu Y3kgKA0KICAgID4gKyAgSU4gVUlOVDMyICBBdHRyaWJ1dGVzLA0KICAgID4gKyAgLi4uDQogICAg PiArICApOw0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgUmV0dXJuIFRSVUUgaWYgYXQg T1MgcnVudGltZS4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwgVFJVRSBJZiBhdCBPUyBydW50 aW1lLg0KICAgID4gKyAgQHJldHZhbCBGQUxTRSBJZiBhdCBib290IHRpbWUuDQogICAgPiArDQog ICAgPiArKiovDQogICAgPiArQk9PTEVBTg0KICAgID4gK0VGSUFQSQ0KICAgID4gK1ZhcmlhYmxl RXhMaWJBdFJ1bnRpbWUgKA0KICAgID4gKyAgVk9JRA0KICAgID4gKyAgKTsNCiAgICA+ICsNCiAg ICA+ICsvKioNCiAgICA+ICsgIElzIHVzZXIgdmFyaWFibGU/DQogICAgPiArDQogICAgPiArICBA cGFyYW1baW5dIFZhcmlhYmxlICAgUG9pbnRlciB0byB2YXJpYWJsZSBoZWFkZXIuDQogICAgPiAr DQogICAgPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgVXNlciB2YXJpYWJsZS4NCiAgICA+ICsg IEByZXR2YWwgRkFMU0UgICAgICAgICBTeXN0ZW0gdmFyaWFibGUuDQogICAgPiArDQogICAgPiAr KiovDQogICAgPiArQk9PTEVBTg0KICAgID4gK0lzVXNlclZhcmlhYmxlICgNCiAgICA+ICsgIElO IFZBUklBQkxFX0hFQURFUiAgKlZhcmlhYmxlDQogICAgPiArICApOw0KICAgID4gKw0KICAgID4g Ky8qKg0KICAgID4gKw0KICAgID4gKyAgVmFyaWFibGUgc3RvcmUgZ2FyYmFnZSBjb2xsZWN0aW9u IGFuZCByZWNsYWltIG9wZXJhdGlvbi4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbVtpbl0gICAg ICBWYXJpYWJsZUJhc2UgICAgICAgICAgICBCYXNlIGFkZHJlc3Mgb2YgdmFyaWFibGUgc3RvcmUu DQogICAgPiArICBAcGFyYW1bb3V0XSAgICAgTGFzdFZhcmlhYmxlT2Zmc2V0ICAgICAgT2Zmc2V0 IG9mIGxhc3QgdmFyaWFibGUuDQogICAgPiArICBAcGFyYW1baW5dICAgICAgSXNWb2xhdGlsZSAg ICAgICAgICAgICAgVGhlIHZhcmlhYmxlIHN0b3JlIGlzIHZvbGF0aWxlIG9yIG5vdDsNCiAgICA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpdCBpcyBub24t dm9sYXRpbGUsIG5lZWQgRlRXLg0KICAgID4gKyAgQHBhcmFtW2luLCBvdXRdIFVwZGF0aW5nUHRy VHJhY2sgICAgICAgIFBvaW50ZXIgdG8gdXBkYXRpbmcgdmFyaWFibGUgcG9pbnRlcg0KICAgID4g dHJhY2sgc3RydWN0dXJlLg0KICAgID4gKyAgQHBhcmFtW2luXSAgICAgIE5ld1ZhcmlhYmxlICAg ICAgICAgICAgIFBvaW50ZXIgdG8gbmV3IHZhcmlhYmxlLg0KICAgID4gKyAgQHBhcmFtW2luXSAg ICAgIE5ld1ZhcmlhYmxlU2l6ZSAgICAgICAgIE5ldyB2YXJpYWJsZSBzaXplLg0KICAgID4gKw0K ICAgID4gKyAgQHJldHVybiBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICAgIFJlY2xhaW0gb3Bl cmF0aW9uIGhhcyBmaW5pc2hlZCBzdWNjZXNzZnVsbHkuDQogICAgPiArICBAcmV0dXJuIEVGSV9P VVRfT0ZfUkVTT1VSQ0VTICAgICAgICAgTm8gZW5vdWdoIG1lbW9yeSByZXNvdXJjZXMgb3INCiAg ICA+IHZhcmlhYmxlIHNwYWNlLg0KICAgID4gKyAgQHJldHVybiBPdGhlcnMgICAgICAgICAgICAg ICAgICAgICAgIFVuZXhwZWN0IGVycm9yIGhhcHBlbmVkIGR1cmluZyByZWNsYWltDQogICAgPiBv cGVyYXRpb24uDQogICAgPiArDQogICAgPiArKiovDQogICAgPiArRUZJX1NUQVRVUw0KICAgID4g K1JlY2xhaW0gKA0KICAgID4gKyAgSU4gICAgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgIFZhcmlh YmxlQmFzZSwNCiAgICA+ICsgIE9VVCAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAqTGFzdFZh cmlhYmxlT2Zmc2V0LA0KICAgID4gKyAgSU4gICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgIElz Vm9sYXRpbGUsDQogICAgPiArICBJTiBPVVQgVkFSSUFCTEVfUE9JTlRFUl9UUkFDSyAgKlVwZGF0 aW5nUHRyVHJhY2ssDQogICAgPiArICBJTiAgICAgVkFSSUFCTEVfSEVBREVSICAgICAgICAgKk5l d1ZhcmlhYmxlLA0KICAgID4gKyAgSU4gICAgIFVJTlROICAgICAgICAgICAgICAgICAgIE5ld1Zh cmlhYmxlU2l6ZQ0KICAgID4gKyAgKTsNCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsNCiAg ICA+ICsgIFRoaXMgZnVuY3Rpb24gd3JpdGVzIGRhdGEgdG8gdGhlIEZXSCBhdCB0aGUgY29ycmVj dCBMQkEgZXZlbiBpZiB0aGUgTEJBcw0KICAgID4gKyAgYXJlIGZyYWdtZW50ZWQuDQogICAgPiAr DQogICAgPiArICBAcGFyYW0gR2xvYmFsICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byBWQVJJ QUJMRV9HTE9CQUwgc3RydWN0dXJlLg0KICAgID4gKyAgQHBhcmFtIFZvbGF0aWxlICAgICAgICAg ICAgICAgIFBvaW50IG91dCB0aGUgVmFyaWFibGUgaXMgVm9sYXRpbGUgb3IgTm9uLVZvbGF0aWxl Lg0KICAgID4gKyAgQHBhcmFtIFNldEJ5SW5kZXggICAgICAgICAgICAgIFRSVUUgaWYgdGFyZ2V0 IHBvaW50ZXIgaXMgZ2l2ZW4gYXMgaW5kZXguDQogICAgPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRkFMU0UgaWYgdGFyZ2V0IHBvaW50ZXIgaXMgYWJzb2x1dGUuDQogICAgPiAr ICBAcGFyYW0gRnZiICAgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgd3JpdGFibGUg RlZCIHByb3RvY29sLg0KICAgID4gKyAgQHBhcmFtIERhdGFQdHJJbmRleCAgICAgICAgICAgIFBv aW50ZXIgdG8gdGhlIERhdGEgZnJvbSB0aGUgZW5kIG9mDQogICAgPiBWQVJJQUJMRV9TVE9SRV9I RUFERVINCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUu DQogICAgPiArICBAcGFyYW0gRGF0YVNpemUgICAgICAgICAgICAgICAgU2l6ZSBvZiBkYXRhIHRv IGJlIHdyaXR0ZW4uDQogICAgPiArICBAcGFyYW0gQnVmZmVyICAgICAgICAgICAgICAgICAgUG9p bnRlciB0byB0aGUgYnVmZmVyIGZyb20gd2hpY2ggZGF0YSBpcyB3cml0dGVuLg0KICAgID4gKw0K ICAgID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIFBhcmFtZXRlcnMgbm90IHZh bGlkLg0KICAgID4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgIEZ2YiBpcyBhIE5V TEwgZm9yIE5vbi1Wb2xhdGlsZSB2YXJpYWJsZQ0KICAgID4gdXBkYXRlLg0KICAgID4gKyAgQHJl dHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgIFRoZSByZW1haW5pbmcgc2l6ZSBpcyBub3QgZW5v dWdoLg0KICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFZhcmlhYmxlIHN0 b3JlIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK0VG SV9TVEFUVVMNCiAgICA+ICtVcGRhdGVWYXJpYWJsZVN0b3JlICgNCiAgICA+ICsgIElOIFZBUklB QkxFX0dMT0JBTCAgICAgICAgICAgICAgICAgICAgICpHbG9iYWwsDQogICAgPiArICBJTiBCT09M RUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWb2xhdGlsZSwNCiAgICA+ICsgIElOIEJP T0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldEJ5SW5kZXgsDQogICAgPiArICBJ TiBFRklfRklSTVdBUkVfVk9MVU1FX0JMT0NLX1BST1RPQ09MICAqRnZiLA0KICAgID4gKyAgSU4g VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YVB0ckluZGV4LA0KICAgID4g KyAgSU4gVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YVNpemUsDQogICAg PiArICBJTiBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQnVmZmVyDQogICAg PiArICApOw0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgVXBkYXRlIHBhcnRpYWwgZGF0 YSBvZiBhIHZhcmlhYmxlIG9uIE5WIHN0b3JhZ2UgYW5kL29yIGNhY2hlZCBjb3B5Lg0KICAgID4g Kw0KICAgID4gKyAgQHBhcmFtW2luXSAgVmFyaWFibGVJbmZvICBQb2ludGVyIHRvIGEgdmFyaWFi bGUgd2l0aCBkZXRhaWxlZCBpbmZvcm1hdGlvbi4NCiAgICA+ICsgIEBwYXJhbVtpbl0gIE9mZnNl dCAgICAgICAgT2Zmc2V0IHRvIHdyaXRlIGZyb20uDQogICAgPiArICBAcGFyYW1baW5dICBTaXpl ICAgICAgICAgIFNpemUgb2YgZGF0YSBCdWZmZXIgdG8gdXBkYXRlLg0KICAgID4gKyAgQHBhcmFt W2luXSAgQnVmZmVyICAgICAgICBQb2ludGVyIHRvIGRhdGEgYnVmZmVyIHRvIHVwZGF0ZS4NCiAg ICA+ICsNCiAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgVGhlIHZhcmlh YmxlIGRhdGEgd2FzIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5Lg0KICAgID4gKyAgQHJldHZhbCBFRklf VU5TVVBQT1JURUQgICAgICAgICBJZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkaXJlY3RseSBp biBydW50aW1lLg0KICAgID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICBJZiBW YXJpYWJsZUluZm8sIEJ1ZmZlciBvciBTaXplIGFyZSBub3QNCiAgICA+IHZhbGlkLg0KICAgID4g KyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAgICAgICBGYWlsZWQgdG8gdXBkYXRlIE5WIHN0 b3JhZ2Ugb3IgdmFyaWFibGUgY2FjaGUuDQogICAgPiArDQogICAgPiArKiovDQogICAgPiArRUZJ X1NUQVRVUw0KICAgID4gK0VGSUFQSQ0KICAgID4gK1ZhcmlhYmxlRXhMaWJVcGRhdGVOdlZhcmlh YmxlICgNCiAgICA+ICsgIElOICBQUk9URUNURURfVkFSSUFCTEVfSU5GTyAgKlZhcmlhYmxlSW5m bywNCiAgICA+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgT2Zmc2V0LA0KICAgID4g KyAgSU4gIFVJTlQzMiAgICAgICAgICAgICAgICAgICBTaXplLA0KICAgID4gKyAgSU4gIFVJTlQ4 ICAgICAgICAgICAgICAgICAgICAqQnVmZmVyDQogICAgPiArICApOw0KICAgID4gKw0KICAgID4g Ky8qKg0KICAgID4gKyAgRmluZHMgdGhlIGdpdmVuIHZhcmlhYmxlIGluIGEgdmFyaWFibGUgc3Rv cmUgaW4gU01NLg0KICAgID4gKw0KICAgID4gKyAgQ2F1dGlvbjogVGhpcyBmdW5jdGlvbiBtYXkg cmVjZWl2ZSB1bnRydXN0ZWQgaW5wdXQuDQogICAgPiArICBUaGUgZGF0YSBzaXplIGlzIGV4dGVy bmFsIGlucHV0LCBzbyB0aGlzIGZ1bmN0aW9uIHdpbGwgdmFsaWRhdGUgaXQgY2FyZWZ1bGx5IHRv DQogICAgPiBhdm9pZCBidWZmZXIgb3ZlcmZsb3cuDQoNCiAgICBbSmlhbkpXXSBUb28gbG9uZyBs aW5lLiBXcmFwIGl0IHRvIHdpdGhpbiA4MCBjaGFyYWN0ZXJzIGZvciBlYWNoIGxpbmUuDQoNCiAg ICA+ICsNCiAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBWYXJpYWJsZU5hbWUgICAgICAgTmFtZSBv ZiBWYXJpYWJsZSB0byBiZSBmb3VuZC4NCiAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBWZW5kb3JH dWlkICAgICAgICAgVmFyaWFibGUgdmVuZG9yIEdVSUQuDQogICAgPiArICBAcGFyYW1bb3V0XSAg ICAgQXR0cmlidXRlcyAgICAgICAgIEF0dHJpYnV0ZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgZm91 bmQuDQogICAgPiArICBAcGFyYW1baW4sIG91dF0gRGF0YVNpemUgICAgICAgICAgIFNpemUgb2Yg RGF0YSBmb3VuZC4gSWYgc2l6ZSBpcyBsZXNzIHRoYW4gdGhlDQogICAgPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIHRoaXMgdmFsdWUgY29udGFpbnMgdGhlIHJl cXVpcmVkIHNpemUuDQogICAgPiArICBAcGFyYW1bb3V0XSAgICAgRGF0YSAgICAgICAgICAgICAg IERhdGEgcG9pbnRlci4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgICAgICAgRm91bmQgdGhlIHNwZWNpZmllZCB2YXJpYWJsZS4NCiAgICA+ICsgIEByZXR2 YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgICAgSW52YWxpZCBwYXJhbWV0ZXIuDQogICAgPiAr ICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgICAgIFRoZSBzcGVjaWZpZWQgdmFyaWFi bGUgY291bGQgbm90IGJlIGZvdW5kLg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK0VGSV9T VEFUVVMNCiAgICA+ICtFRklBUEkNCiAgICA+ICtGaW5kVmFyaWFibGVJblNtbSAoDQogICAgPiAr ICBJTiAgICAgIENIQVIxNiAgICAqVmFyaWFibGVOYW1lLA0KICAgID4gKyAgSU4gICAgICBFRklf R1VJRCAgKlZlbmRvckd1aWQsDQogICAgPiArICBPVVQgICAgIFVJTlQzMiAgICAqQXR0cmlidXRl cyBPUFRJT05BTCwNCiAgICA+ICsgIElOIE9VVCAgVUlOVE4gICAgICpEYXRhU2l6ZSwNCiAgICA+ ICsgIE9VVCAgICAgVk9JRCAgICAgICpEYXRhIE9QVElPTkFMDQogICAgPiArICApOw0KICAgID4g Kw0KICAgID4gKyNlbmRpZg0KICAgID4gZGlmZiAtLWdpdA0KICAgID4gYS9NZGVNb2R1bGVQa2cv VW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlTm9uVm9sYXQN CiAgICA+IGlsZS5oDQogICAgPiBiL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJv dGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVOb25Wb2xhdA0KICAgID4gaWxlLmgNCiAgICA+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgPiBpbmRleCAwMDAwMDAwMDAwMDAuLmE4NGRiNDg3N2Mx Mw0KICAgID4gLS0tIC9kZXYvbnVsbA0KICAgID4gKysrDQogICAgPiBiL01kZU1vZHVsZVBrZy9V bml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVOb25Wb2xhdA0K ICAgID4gaWxlLmgNCiAgICA+IEBAIC0wLDAgKzEsNjcgQEANCiAgICA+ICsvKiogQGZpbGUNCiAg ICA+ICsgIENvbW1vbiB2YXJpYWJsZSBub24tdm9sYXRpbGUgc3RvcmUgcm91dGluZXMuDQogICAg PiArDQogICAgPiArQ29weXJpZ2h0IChjKSAyMDE5LTIwMjIsIEludGVsIENvcnBvcmF0aW9uLiBB bGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCiAgICA+ICtTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog QlNELTItQ2xhdXNlLVBhdGVudA0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gKw0KICAgID4g KyNpZm5kZWYgVkFSSUFCTEVfTk9OX1ZPTEFUSUxFX0hfDQogICAgPiArI2RlZmluZSBWQVJJQUJM RV9OT05fVk9MQVRJTEVfSF8NCiAgICA+ICsNCiAgICA+ICsjaW5jbHVkZSAiVmFyaWFibGUuaCIN CiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIEdldCBub24tdm9sYXRpbGUgbWF4aW11bSB2 YXJpYWJsZSBzaXplLg0KICAgID4gKw0KICAgID4gKyAgQHJldHVybiBOb24tdm9sYXRpbGUgbWF4 aW11bSB2YXJpYWJsZSBzaXplLg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK1VJTlRODQog ICAgPiArR2V0Tm9uVm9sYXRpbGVNYXhWYXJpYWJsZVNpemUgKA0KICAgID4gKyAgVk9JRA0KICAg ID4gKyAgKTsNCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIEluaXQgZW11bGF0ZWQgbm9u LXZvbGF0aWxlIHZhcmlhYmxlIHN0b3JlLg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtW291dF0g VmFyaWFibGVTdG9yZUJhc2UgT3V0cHV0IHBvaW50ZXIgdG8gZW11bGF0ZWQgbm9uLXZvbGF0aWxl DQogICAgPiB2YXJpYWJsZSBzdG9yZSBiYXNlLg0KICAgID4gKw0KICAgID4gKyAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgICAgICAgRnVuY3Rpb24gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLg0KICAg ID4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgRmFpbCB0byBhbGxvY2F0ZSBlbm91 Z2ggbWVtb3J5IHJlc291cmNlLg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK0VGSV9TVEFU VVMNCiAgICA+ICtJbml0RW11Tm9uVm9sYXRpbGVWYXJpYWJsZVN0b3JlICgNCiAgICA+ICsgIEVG SV9QSFlTSUNBTF9BRERSRVNTICAqVmFyaWFibGVTdG9yZUJhc2UNCiAgICA+ICsgICk7DQogICAg PiArDQogICAgPiArLyoqDQogICAgPiArICBJbml0IHJlYWwgbm9uLXZvbGF0aWxlIHZhcmlhYmxl IHN0b3JlLg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtW291dF0gVmFyaWFibGVTdG9yZUJhc2Ug T3V0cHV0IHBvaW50ZXIgdG8gcmVhbCBub24tdm9sYXRpbGUgdmFyaWFibGUNCiAgICA+IHN0b3Jl IGJhc2UuDQogICAgPiArDQogICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBG dW5jdGlvbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuDQogICAgPiArICBAcmV0dmFsIEVGSV9PVVRf T0ZfUkVTT1VSQ0VTICBGYWlsIHRvIGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgcmVzb3VyY2UuDQog ICAgPiArICBAcmV0dmFsIEVGSV9WT0xVTUVfQ09SUlVQVEVEICBWYXJpYWJsZSBTdG9yZSBvciBG aXJtd2FyZSBWb2x1bWUgZm9yDQogICAgPiBWYXJpYWJsZSBTdG9yZSBpcyBjb3JydXB0ZWQuDQog ICAgPiArDQogICAgPiArKiovDQogICAgPiArRUZJX1NUQVRVUw0KICAgID4gK0luaXRSZWFsTm9u Vm9sYXRpbGVWYXJpYWJsZVN0b3JlICgNCiAgICA+ICsgIE9VVCBFRklfUEhZU0lDQUxfQUREUkVT UyAgKlZhcmlhYmxlU3RvcmVCYXNlDQogICAgPiArICApOw0KICAgID4gKw0KICAgID4gKy8qKg0K ICAgID4gKyAgSW5pdCBub24tdm9sYXRpbGUgdmFyaWFibGUgc3RvcmUuDQogICAgPiArDQogICAg PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBGdW5jdGlvbiBzdWNjZXNzZnVsbHkg ZXhlY3V0ZWQuDQogICAgPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBGYWlsIHRv IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgcmVzb3VyY2UuDQogICAgPiArICBAcmV0dmFsIEVGSV9W T0xVTUVfQ09SUlVQVEVEICBWYXJpYWJsZSBTdG9yZSBvciBGaXJtd2FyZSBWb2x1bWUgZm9yDQog ICAgPiBWYXJpYWJsZSBTdG9yZSBpcyBjb3JydXB0ZWQuDQogICAgPiArDQogICAgPiArKiovDQog ICAgPiArRUZJX1NUQVRVUw0KICAgID4gK0luaXROb25Wb2xhdGlsZVZhcmlhYmxlU3RvcmUgKA0K ICAgID4gKyAgVk9JRA0KICAgID4gKyAgKTsNCiAgICA+ICsNCiAgICA+ICsjZW5kaWYNCiAgICA+ IGRpZmYgLS1naXQNCiAgICA+IGEvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90 ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZVBhcnNpbmcuaA0KICAgID4gYi9NZGVNb2R1bGVQa2cv VW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlUGFyc2luZy5o DQogICAgPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgID4gaW5kZXggMDAwMDAwMDAwMDAwLi41 YjA0MGUwMDk4MmYNCiAgICA+IC0tLSAvZGV2L251bGwNCiAgICA+ICsrKw0KICAgID4gYi9NZGVN b2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxl UGFyc2luZy5oDQogICAgPiBAQCAtMCwwICsxLDQyNCBAQA0KICAgID4gKy8qKiBAZmlsZQ0KICAg ID4gKyAgRnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlIGFyZSBhc3NvY2lhdGVkIHdpdGggdmFyaWFi bGUgcGFyc2luZyBvcGVyYXRpb25zIGFuZA0KICAgID4gKyAgYXJlIGludGVuZGVkIHRvIGJlIHVz YWJsZSBhY3Jvc3MgdmFyaWFibGUgZHJpdmVyIHNvdXJjZSBmaWxlcy4NCiAgICA+ICsNCiAgICA+ ICtDb3B5cmlnaHQgKGMpIDIwMTkgLSAyMDIyLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0 cyByZXNlcnZlZC48QlI+DQogICAgPiArU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNs YXVzZS1QYXRlbnQNCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICsNCiAgICA+ICsjaWZuZGVm IFZBUklBQkxFX1BBUlNJTkdfSF8NCiAgICA+ICsjZGVmaW5lIFZBUklBQkxFX1BBUlNJTkdfSF8N CiAgICA+ICsNCiAgICA+ICsjaW5jbHVkZSA8R3VpZC9JbWFnZUF1dGhlbnRpY2F0aW9uLmg+DQog ICAgPiArI2luY2x1ZGUgIlZhcmlhYmxlLmgiDQogICAgPiArDQogICAgPiArLyoqDQogICAgPiAr DQogICAgPiArICBUaGlzIGNvZGUgY2hlY2tzIGlmIHZhcmlhYmxlIGhlYWRlciBpcyB2YWxpZCBv ciBub3QuDQogICAgPiArDQogICAgPiArICBAcGFyYW1baW5dIFZhcmlhYmxlICAgICAgICAgICBQ b2ludGVyIHRvIHRoZSBWYXJpYWJsZSBIZWFkZXIuDQogICAgPiArICBAcGFyYW1baW5dIFZhcmlh YmxlU3RvcmVFbmQgICBQb2ludGVyIHRvIHRoZSBWYXJpYWJsZSBTdG9yZSBFbmQuDQogICAgPiAr ICBAcGFyYW1baW5dIEF1dGhGb3JtYXQgICAgICAgICBBdXRoLXZhcmlhYmxlIGluZGljYXRvci4N CiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICAgICAgVmFyaWFibGUgaGVh ZGVyIGlzIHZhbGlkLg0KICAgID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgICAgICBWYXJpYWJs ZSBoZWFkZXIgaXMgbm90IHZhbGlkLg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK0JPT0xF QU4NCiAgICA+ICtJc1ZhbGlkVmFyaWFibGVIZWFkZXIgKA0KICAgID4gKyAgSU4gIFZBUklBQkxF X0hFQURFUiAgKlZhcmlhYmxlLA0KICAgID4gKyAgSU4gIFZBUklBQkxFX0hFQURFUiAgKlZhcmlh YmxlU3RvcmVFbmQsDQogICAgPiArICBJTiAgQk9PTEVBTiAgICAgICAgICBBdXRoRm9ybWF0DQog ICAgPiArICApOw0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKw0KICAgID4gKyAgVGhpcyBj b2RlIGdldHMgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIFZhcmlhYmxlIFN0b3JlLg0KICAgID4gKw0K ICAgID4gKyAgQHBhcmFtW2luXSBWYXJTdG9yZUhlYWRlciAgUG9pbnRlciB0byB0aGUgVmFyaWFi bGUgU3RvcmUgSGVhZGVyLg0KICAgID4gKw0KICAgID4gKyAgQHJldHZhbCBFZmlSYXcgICAgICAg ICBWYXJpYWJsZSBzdG9yZSBzdGF0dXMgaXMgcmF3Lg0KICAgID4gKyAgQHJldHZhbCBFZmlWYWxp ZCAgICAgICBWYXJpYWJsZSBzdG9yZSBzdGF0dXMgaXMgdmFsaWQuDQogICAgPiArICBAcmV0dmFs IEVmaUludmFsaWQgICAgIFZhcmlhYmxlIHN0b3JlIHN0YXR1cyBpcyBpbnZhbGlkLg0KICAgID4g Kw0KICAgID4gKyoqLw0KICAgID4gK1ZBUklBQkxFX1NUT1JFX1NUQVRVUw0KICAgID4gK0dldFZh cmlhYmxlU3RvcmVTdGF0dXMgKA0KICAgID4gKyAgSU4gVkFSSUFCTEVfU1RPUkVfSEVBREVSICAq VmFyU3RvcmVIZWFkZXINCiAgICA+ICsgICk7DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiAr ICBUaGlzIGNvZGUgZ2V0cyB0aGUgc2l6ZSBvZiB2YXJpYWJsZSBoZWFkZXIuDQogICAgPiArDQog ICAgPiArICBAcGFyYW1baW5dICBBdXRoRm9ybWF0ICAgIFRSVUUgaW5kaWNhdGVzIGF1dGhlbnRp Y2F0ZWQgdmFyaWFibGVzIGFyZSB1c2VkLg0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGQUxTRSBpbmRpY2F0ZXMgYXV0aGVudGljYXRlZCB2YXJpYWJsZXMgYXJlIG5vdCB1c2Vk Lg0KICAgID4gKw0KICAgID4gKyAgQHJldHVybiBTaXplIG9mIHZhcmlhYmxlIGhlYWRlciBpbiBi eXRlcyBpbiB0eXBlIFVJTlROLg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK1VJTlRODQog ICAgPiArR2V0VmFyaWFibGVIZWFkZXJTaXplICgNCiAgICA+ICsgIElOICBCT09MRUFOICBBdXRo Rm9ybWF0DQogICAgPiArICApOw0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKw0KICAgID4g KyAgVGhpcyBjb2RlIGdldHMgdGhlIHNpemUgb2YgbmFtZSBvZiB2YXJpYWJsZS4NCiAgICA+ICsN CiAgICA+ICsgIEBwYXJhbVtpbl0gIFZhcmlhYmxlICAgICAgUG9pbnRlciB0byB0aGUgdmFyaWFi bGUgaGVhZGVyLg0KICAgID4gKyAgQHBhcmFtW2luXSAgQXV0aEZvcm1hdCAgICBUUlVFIGluZGlj YXRlcyBhdXRoZW50aWNhdGVkIHZhcmlhYmxlcyBhcmUgdXNlZC4NCiAgICA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRkFMU0UgaW5kaWNhdGVzIGF1dGhlbnRpY2F0ZWQgdmFyaWFibGVz IGFyZSBub3QgdXNlZC4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR1cm4gVUlOVE4gICAgICAgICAg U2l6ZSBvZiB2YXJpYWJsZSBpbiBieXRlcy4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtV SU5UTg0KICAgID4gK05hbWVTaXplT2ZWYXJpYWJsZSAoDQogICAgPiArICBJTiAgVkFSSUFCTEVf SEVBREVSICAqVmFyaWFibGUsDQogICAgPiArICBJTiAgQk9PTEVBTiAgICAgICAgICBBdXRoRm9y bWF0DQogICAgPiArICApOw0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgVGhpcyBjb2Rl IHNldHMgdGhlIHNpemUgb2YgbmFtZSBvZiB2YXJpYWJsZS4NCiAgICA+ICsNCiAgICA+ICsgIEBw YXJhbVtpbl0gIFZhcmlhYmxlICAgICAgUG9pbnRlciB0byB0aGUgVmFyaWFibGUgSGVhZGVyLg0K ICAgID4gKyAgQHBhcmFtW2luXSAgTmFtZVNpemUgICAgICBOYW1lIHNpemUgdG8gc2V0Lg0KICAg ID4gKyAgQHBhcmFtW2luXSAgQXV0aEZvcm1hdCAgICBUUlVFIGluZGljYXRlcyBhdXRoZW50aWNh dGVkIHZhcmlhYmxlcyBhcmUgdXNlZC4NCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRkFMU0UgaW5kaWNhdGVzIGF1dGhlbnRpY2F0ZWQgdmFyaWFibGVzIGFyZSBub3QgdXNlZC4N CiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtWT0lEDQogICAgPiArU2V0TmFtZVNpemVPZlZh cmlhYmxlICgNCiAgICA+ICsgIElOIFZBUklBQkxFX0hFQURFUiAgKlZhcmlhYmxlLA0KICAgID4g KyAgSU4gVUlOVE4gICAgICAgICAgICBOYW1lU2l6ZSwNCiAgICA+ICsgIElOIEJPT0xFQU4gICAg ICAgICAgQXV0aEZvcm1hdA0KICAgID4gKyAgKTsNCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ ICsNCiAgICA+ICsgIFRoaXMgY29kZSBnZXRzIHRoZSBzaXplIG9mIHZhcmlhYmxlIGRhdGEuDQog ICAgPiArDQogICAgPiArICBAcGFyYW1baW5dICBWYXJpYWJsZSAgICAgIFBvaW50ZXIgdG8gdGhl IFZhcmlhYmxlIEhlYWRlci4NCiAgICA+ICsgIEBwYXJhbVtpbl0gIEF1dGhGb3JtYXQgICAgVFJV RSBpbmRpY2F0ZXMgYXV0aGVudGljYXRlZCB2YXJpYWJsZXMgYXJlIHVzZWQuDQogICAgPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFIGluZGljYXRlcyBhdXRoZW50aWNhdGVkIHZh cmlhYmxlcyBhcmUgbm90IHVzZWQuDQogICAgPiArDQogICAgPiArICBAcmV0dXJuIFNpemUgb2Yg dmFyaWFibGUgaW4gYnl0ZXMuDQogICAgPiArDQogICAgPiArKiovDQogICAgPiArVUlOVE4NCiAg ICA+ICtEYXRhU2l6ZU9mVmFyaWFibGUgKA0KICAgID4gKyAgSU4gIFZBUklBQkxFX0hFQURFUiAg KlZhcmlhYmxlLA0KICAgID4gKyAgSU4gIEJPT0xFQU4gICAgICAgICAgQXV0aEZvcm1hdA0KICAg ID4gKyAgKTsNCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIFRoaXMgY29kZSBzZXRzIHRo ZSBzaXplIG9mIHZhcmlhYmxlIGRhdGEuDQogICAgPiArDQogICAgPiArICBAcGFyYW1baW5dIFZh cmlhYmxlICAgUG9pbnRlciB0byB0aGUgVmFyaWFibGUgSGVhZGVyLg0KICAgID4gKyAgQHBhcmFt W2luXSBEYXRhU2l6ZSAgIERhdGEgc2l6ZSB0byBzZXQuDQogICAgPiArICBAcGFyYW1baW5dIEF1 dGhGb3JtYXQgVFJVRSBpbmRpY2F0ZXMgYXV0aGVudGljYXRlZCB2YXJpYWJsZXMgYXJlIHVzZWQu DQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UgaW5kaWNhdGVzIGF1dGhlbnRp Y2F0ZWQgdmFyaWFibGVzIGFyZSBub3QgdXNlZC4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ ICtWT0lEDQogICAgPiArU2V0RGF0YVNpemVPZlZhcmlhYmxlICgNCiAgICA+ICsgIElOICBWQVJJ QUJMRV9IRUFERVIgICpWYXJpYWJsZSwNCiAgICA+ICsgIElOICBVSU5UTiAgICAgICAgICAgIERh dGFTaXplLA0KICAgID4gKyAgSU4gIEJPT0xFQU4gICAgICAgICAgQXV0aEZvcm1hdA0KICAgID4g KyAgKTsNCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsNCiAgICA+ICsgIFRoaXMgY29kZSBn ZXRzIHRoZSBwb2ludGVyIHRvIHRoZSB2YXJpYWJsZSBuYW1lLg0KICAgID4gKw0KICAgID4gKyAg QHBhcmFtW2luXSBWYXJpYWJsZSAgICAgUG9pbnRlciB0byB0aGUgVmFyaWFibGUgSGVhZGVyLg0K ICAgID4gKyAgQHBhcmFtW2luXSBBdXRoRm9ybWF0ICAgVFJVRSBpbmRpY2F0ZXMgYXV0aGVudGlj YXRlZCB2YXJpYWJsZXMgYXJlIHVzZWQuDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAg ICBGQUxTRSBpbmRpY2F0ZXMgYXV0aGVudGljYXRlZCB2YXJpYWJsZXMgYXJlIG5vdCB1c2VkLg0K ICAgID4gKw0KICAgID4gKyAgQHJldHVybiBQb2ludGVyIHRvIFZhcmlhYmxlIE5hbWUgd2hpY2gg aXMgVW5pY29kZSBlbmNvZGluZy4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtDSEFSMTYg Kg0KICAgID4gK0dldFZhcmlhYmxlTmFtZVB0ciAoDQogICAgPiArICBJTiAgVkFSSUFCTEVfSEVB REVSICAqVmFyaWFibGUsDQogICAgPiArICBJTiAgQk9PTEVBTiAgICAgICAgICBBdXRoRm9ybWF0 DQogICAgPiArICApOw0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgVGhpcyBjb2RlIGdl dHMgdGhlIHBvaW50ZXIgdG8gdGhlIHZhcmlhYmxlIGd1aWQuDQogICAgPiArDQogICAgPiArICBA cGFyYW1baW5dIFZhcmlhYmxlICAgICBQb2ludGVyIHRvIHRoZSBWYXJpYWJsZSBIZWFkZXIuDQog ICAgPiArICBAcGFyYW1baW5dIEF1dGhGb3JtYXQgICBUUlVFIGluZGljYXRlcyBhdXRoZW50aWNh dGVkIHZhcmlhYmxlcyBhcmUgdXNlZC4NCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg IEZBTFNFIGluZGljYXRlcyBhdXRoZW50aWNhdGVkIHZhcmlhYmxlcyBhcmUgbm90IHVzZWQuDQog ICAgPiArDQogICAgPiArICBAcmV0dXJuIEEgRUZJX0dVSUQqIHBvaW50ZXIgdG8gVmVuZG9yIEd1 aWQuDQogICAgPiArDQogICAgPiArKiovDQogICAgPiArRUZJX0dVSUQgKg0KICAgID4gK0dldFZl bmRvckd1aWRQdHIgKA0KICAgID4gKyAgSU4gIFZBUklBQkxFX0hFQURFUiAgKlZhcmlhYmxlLA0K ICAgID4gKyAgSU4gIEJPT0xFQU4gICAgICAgICAgQXV0aEZvcm1hdA0KICAgID4gKyAgKTsNCiAg ICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsNCiAgICA+ICsgIFRoaXMgY29kZSBnZXRzIHRoZSBw b2ludGVyIHRvIHRoZSB2YXJpYWJsZSBkYXRhLg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtW2lu XSBWYXJpYWJsZSAgICAgUG9pbnRlciB0byB0aGUgVmFyaWFibGUgSGVhZGVyLg0KICAgID4gKyAg QHBhcmFtW2luXSBBdXRoRm9ybWF0ICAgVFJVRSBpbmRpY2F0ZXMgYXV0aGVudGljYXRlZCB2YXJp YWJsZXMgYXJlIHVzZWQuDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSBp bmRpY2F0ZXMgYXV0aGVudGljYXRlZCB2YXJpYWJsZXMgYXJlIG5vdCB1c2VkLg0KICAgID4gKw0K ICAgID4gKyAgQHJldHVybiBQb2ludGVyIHRvIFZhcmlhYmxlIERhdGEuDQogICAgPiArDQogICAg PiArKiovDQogICAgPiArVUlOVDggKg0KICAgID4gK0dldFZhcmlhYmxlRGF0YVB0ciAoDQogICAg PiArICBJTiAgVkFSSUFCTEVfSEVBREVSICAqVmFyaWFibGUsDQogICAgPiArICBJTiAgQk9PTEVB TiAgICAgICAgICBBdXRoRm9ybWF0DQogICAgPiArICApOw0KICAgID4gKw0KICAgID4gKy8qKg0K ICAgID4gKyAgVGhpcyBjb2RlIGdldHMgdGhlIHZhcmlhYmxlIGRhdGEgb2Zmc2V0IHJlbGF0ZWQg dG8gdmFyaWFibGUgaGVhZGVyLg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtW2luXSBWYXJpYWJs ZSAgICAgUG9pbnRlciB0byB0aGUgVmFyaWFibGUgSGVhZGVyLg0KICAgID4gKyAgQHBhcmFtW2lu XSBBdXRoRm9ybWF0ICAgVFJVRSBpbmRpY2F0ZXMgYXV0aGVudGljYXRlZCB2YXJpYWJsZXMgYXJl IHVzZWQuDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSBpbmRpY2F0ZXMg YXV0aGVudGljYXRlZCB2YXJpYWJsZXMgYXJlIG5vdCB1c2VkLg0KICAgID4gKw0KICAgID4gKyAg QHJldHVybiBWYXJpYWJsZSBEYXRhIG9mZnNldC4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ ICtVSU5UTg0KICAgID4gK0dldFZhcmlhYmxlRGF0YU9mZnNldCAoDQogICAgPiArICBJTiAgVkFS SUFCTEVfSEVBREVSICAqVmFyaWFibGUsDQogICAgPiArICBJTiAgQk9PTEVBTiAgICAgICAgICBB dXRoRm9ybWF0DQogICAgPiArICApOw0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgR2V0 IHZhcmlhYmxlIGRhdGEgcGF5bG9hZC4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbVtpbl0gICAg ICBWYXJpYWJsZSAgICAgUG9pbnRlciB0byB0aGUgVmFyaWFibGUgSGVhZGVyLg0KICAgID4gKyAg QHBhcmFtW291dF0gICAgIERhdGEgICAgICAgICBQb2ludGVyIHRvIGJ1ZmZlciB1c2VkIHRvIHN0 b3JlIHRoZSB2YXJpYWJsZSBkYXRhLg0KICAgID4gKyAgQHBhcmFtW2luXSAgICAgIERhdGFTaXpl ICAgICBTaXplIG9mIGJ1ZmZlciBwYXNzZWQgYnkgRGF0YS4NCiAgICA+ICsgIEBwYXJhbVtvdXRd ICAgICBEYXRhU2l6ZSAgICAgU2l6ZSBvZiBkYXRhIGNvcGllZCBpbnRvIERhdGEgYnVmZmVyLg0K ICAgID4gKyAgQHBhcmFtW2luXSAgICAgIEF1dGhGbGFnICAgICBBdXRoLXZhcmlhYmxlIGluZGlj YXRvci4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR1cm4gRUZJX1NVQ0NFU1MgICAgICAgICAgICAg RGF0YSB3YXMgZmV0Y2hlZC4NCiAgICA+ICsgIEByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVS ICAgRGF0YVNpemUgaXMgTlVMTC4NCiAgICA+ICsgIEByZXR1cm4gRUZJX0JVRkZFUl9UT09fU01B TEwgICAgRGF0YVNpemUgaXMgc21hbGxlciB0aGFuIHNpemUgb2YgdmFyaWFibGUNCiAgICA+IGRh dGEuDQogICAgPiArDQogICAgPiArKiovDQogICAgPiArRUZJX1NUQVRVUw0KICAgID4gK0dldFZh cmlhYmxlRGF0YSAoDQogICAgPiArICBJTiAgICAgIFZBUklBQkxFX0hFQURFUiAgKlZhcmlhYmxl LA0KICAgID4gKyAgSU4gIE9VVCBWT0lEICAgICAgICAgICAgICpEYXRhLA0KICAgID4gKyAgSU4g IE9VVCBVSU5UMzIgICAgICAgICAgICpEYXRhU2l6ZSwNCiAgICA+ICsgIElOICAgICAgQk9PTEVB TiAgICAgICAgICBBdXRoRmxhZw0KICAgID4gKyAgKTsNCiAgICA+ICsNCiAgICA+ICsvKioNCiAg ICA+ICsNCiAgICA+ICsgIFRoaXMgY29kZSBnZXRzIHRoZSBwb2ludGVyIHRvIHRoZSBuZXh0IHZh cmlhYmxlIGhlYWRlci4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbVtpbl0gVmFyaWFibGUgICAg IFBvaW50ZXIgdG8gdGhlIFZhcmlhYmxlIEhlYWRlci4NCiAgICA+ICsgIEBwYXJhbVtpbl0gQXV0 aEZvcm1hdCAgIFRSVUUgaW5kaWNhdGVzIGF1dGhlbnRpY2F0ZWQgdmFyaWFibGVzIGFyZSB1c2Vk Lg0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UgaW5kaWNhdGVzIGF1dGhl bnRpY2F0ZWQgdmFyaWFibGVzIGFyZSBub3QgdXNlZC4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR1 cm4gUG9pbnRlciB0byBuZXh0IHZhcmlhYmxlIGhlYWRlci4NCiAgICA+ICsNCiAgICA+ICsqKi8N CiAgICA+ICtWQVJJQUJMRV9IRUFERVIgKg0KICAgID4gK0dldE5leHRWYXJpYWJsZVB0ciAoDQog ICAgPiArICBJTiAgVkFSSUFCTEVfSEVBREVSICAqVmFyaWFibGUsDQogICAgPiArICBJTiAgQk9P TEVBTiAgICAgICAgICBBdXRoRm9ybWF0DQogICAgPiArICApOw0KICAgID4gKw0KICAgID4gKy8q Kg0KICAgID4gKw0KICAgID4gKyAgR2V0cyB0aGUgcG9pbnRlciB0byB0aGUgZmlyc3QgdmFyaWFi bGUgaGVhZGVyIGluIGdpdmVuIHZhcmlhYmxlIHN0b3JlIGFyZWEuDQogICAgPiArDQogICAgPiAr ICBAcGFyYW1baW5dIFZhclN0b3JlSGVhZGVyICBQb2ludGVyIHRvIHRoZSBWYXJpYWJsZSBTdG9y ZSBIZWFkZXIuDQogICAgPiArDQogICAgPiArICBAcmV0dXJuIFBvaW50ZXIgdG8gdGhlIGZpcnN0 IHZhcmlhYmxlIGhlYWRlci4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtWQVJJQUJMRV9I RUFERVIgKg0KICAgID4gK0dldFN0YXJ0UG9pbnRlciAoDQogICAgPiArICBJTiBWQVJJQUJMRV9T VE9SRV9IRUFERVIgICpWYXJTdG9yZUhlYWRlcg0KICAgID4gKyAgKTsNCiAgICA+ICsNCiAgICA+ ICsvKioNCiAgICA+ICsNCiAgICA+ICsgIEdldHMgdGhlIHBvaW50ZXIgdG8gdGhlIGVuZCBvZiB0 aGUgdmFyaWFibGUgc3RvcmFnZSBhcmVhLg0KICAgID4gKw0KICAgID4gKyAgVGhpcyBmdW5jdGlv biBnZXRzIHBvaW50ZXIgdG8gdGhlIGVuZCBvZiB0aGUgdmFyaWFibGUgc3RvcmFnZQ0KICAgID4g KyAgYXJlYSwgYWNjb3JkaW5nIHRvIHRoZSBpbnB1dCB2YXJpYWJsZSBzdG9yZSBoZWFkZXIuDQog ICAgPiArDQogICAgPiArICBAcGFyYW1baW5dIFZhclN0b3JlSGVhZGVyICBQb2ludGVyIHRvIHRo ZSBWYXJpYWJsZSBTdG9yZSBIZWFkZXIuDQogICAgPiArDQogICAgPiArICBAcmV0dXJuIFBvaW50 ZXIgdG8gdGhlIGVuZCBvZiB0aGUgdmFyaWFibGUgc3RvcmFnZSBhcmVhLg0KICAgID4gKw0KICAg ID4gKyoqLw0KICAgID4gK1ZBUklBQkxFX0hFQURFUiAqDQogICAgPiArR2V0RW5kUG9pbnRlciAo DQogICAgPiArICBJTiBWQVJJQUJMRV9TVE9SRV9IRUFERVIgICpWYXJTdG9yZUhlYWRlcg0KICAg ID4gKyAgKTsNCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIENvbXBhcmUgdHdvIEVGSV9U SU1FIGRhdGEuDQogICAgPiArDQogICAgPiArDQogICAgPiArICBAcGFyYW1baW5dIEZpcnN0VGlt ZSAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGZpcnN0IEVGSV9USU1FIGRhdGEuDQogICAgPiArICBA cGFyYW1baW5dIFNlY29uZFRpbWUgICAgICBBIHBvaW50ZXIgdG8gdGhlIHNlY29uZCBFRklfVElN RSBkYXRhLg0KICAgID4gKw0KICAgID4gKyAgQHJldHZhbCAgVFJVRSAgICAgICAgICAgICAgVGhl IEZpcnN0VGltZSBpcyBub3QgbGF0ZXIgdGhhbiB0aGUgU2Vjb25kVGltZS4NCiAgICA+ICsgIEBy ZXR2YWwgIEZBTFNFICAgICAgICAgICAgIFRoZSBGaXJzdFRpbWUgaXMgbGF0ZXIgdGhhbiB0aGUg U2Vjb25kVGltZS4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtCT09MRUFODQogICAgPiAr VmFyaWFibGVDb21wYXJlVGltZVN0YW1wSW50ZXJuYWwgKA0KICAgID4gKyAgSU4gRUZJX1RJTUUg ICpGaXJzdFRpbWUsDQogICAgPiArICBJTiBFRklfVElNRSAgKlNlY29uZFRpbWUNCiAgICA+ICsg ICk7DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBGaW5kIHRoZSB2YXJpYWJsZSBpbiB0 aGUgc3BlY2lmaWVkIHZhcmlhYmxlIHN0b3JlLg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtW2lu XSAgICAgICBWYXJpYWJsZU5hbWUgICAgICAgIE5hbWUgb2YgdGhlIHZhcmlhYmxlIHRvIGJlIGZv dW5kDQogICAgPiArICBAcGFyYW1baW5dICAgICAgIFZlbmRvckd1aWQgICAgICAgICAgVmVuZG9y IEdVSUQgdG8gYmUgZm91bmQuDQogICAgPiArICBAcGFyYW1baW5dICAgICAgIElnbm9yZVJ0Q2hl Y2sgICAgICAgSWdub3JlIEVGSV9WQVJJQUJMRV9SVU5USU1FX0FDQ0VTUw0KICAgID4gYXR0cmli dXRlDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sg YXQgcnVudGltZSB3aGVuIHNlYXJjaGluZyB2YXJpYWJsZS4NCiAgICA+ICsgIEBwYXJhbVtpbiwg b3V0XSAgUHRyVHJhY2sgICAgICAgICAgICBWYXJpYWJsZSBUcmFjayBQb2ludGVyIHN0cnVjdHVy ZSB0aGF0IGNvbnRhaW5zDQogICAgPiBWYXJpYWJsZSBJbmZvcm1hdGlvbi4NCiAgICA+ICsgIEBw YXJhbVtpbl0gICAgICAgQXV0aEZvcm1hdCAgICAgICAgICBUUlVFIGluZGljYXRlcyBhdXRoZW50 aWNhdGVkIHZhcmlhYmxlcyBhcmUNCiAgICA+IHVzZWQuDQogICAgPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UgaW5kaWNhdGVzIGF1dGhlbnRpY2F0ZWQgdmFy aWFibGVzIGFyZSBub3QgdXNlZC4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwgICAgICAgICAg RUZJX1NVQ0NFU1MgICAgICAgICBWYXJpYWJsZSBmb3VuZCBzdWNjZXNzZnVsbHkNCiAgICA+ICsg IEByZXR2YWwgICAgICAgICAgRUZJX05PVF9GT1VORCAgICAgICBWYXJpYWJsZSBub3QgZm91bmQN CiAgICA+ICsqKi8NCiAgICA+ICtFRklfU1RBVFVTDQogICAgPiArRmluZFZhcmlhYmxlRXggKA0K ICAgID4gKyAgSU4gICAgIENIQVIxNiAgICAgICAgICAgICAgICAgICpWYXJpYWJsZU5hbWUsDQog ICAgPiArICBJTiAgICAgRUZJX0dVSUQgICAgICAgICAgICAgICAgKlZlbmRvckd1aWQsDQogICAg PiArICBJTiAgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgSWdub3JlUnRDaGVjaywNCiAgICA+ ICsgIElOIE9VVCBWQVJJQUJMRV9QT0lOVEVSX1RSQUNLICAqUHRyVHJhY2ssDQogICAgPiArICBJ TiAgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgQXV0aEZvcm1hdA0KICAgID4gKyAgKTsNCiAg ICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIFRoaXMgY29kZSBmaW5kcyB0aGUgbmV4dCBhdmFp bGFibGUgdmFyaWFibGUuDQogICAgPiArDQogICAgPiArICBDYXV0aW9uOiBUaGlzIGZ1bmN0aW9u IG1heSByZWNlaXZlIHVudHJ1c3RlZCBpbnB1dC4NCiAgICA+ICsgIFRoaXMgZnVuY3Rpb24gbWF5 IGJlIGludm9rZWQgaW4gU01NIG1vZGUuIFRoaXMgZnVuY3Rpb24gd2lsbCBkbyBiYXNpYw0KICAg ID4gdmFsaWRhdGlvbiwgYmVmb3JlIHBhcnNlIHRoZSBkYXRhLg0KICAgID4gKw0KICAgID4gKyAg QHBhcmFtW2luXSAgVmFyaWFibGVOYW1lICAgICAgUG9pbnRlciB0byB2YXJpYWJsZSBuYW1lLg0K ICAgID4gKyAgQHBhcmFtW2luXSAgVmVuZG9yR3VpZCAgICAgICAgVmFyaWFibGUgVmVuZG9yIEd1 aWQuDQogICAgPiArICBAcGFyYW1baW5dICBWYXJpYWJsZVN0b3JlTGlzdCBBIGxpc3Qgb2YgdmFy aWFibGUgc3RvcmVzIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8NCiAgICA+IGdldCB0aGUgbmV4dCB2 YXJpYWJsZS4NCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXhp bXVtIG51bWJlciBvZiBlbnRyaWVzIGlzIHRoZSBtYXggdmFsdWUgb2YNCiAgICA+IFZBUklBQkxF X1NUT1JFX1RZUEUuDQogICAgPiArICBAcGFyYW1bb3V0XSBWYXJpYWJsZVB0ciAgICAgICBQb2lu dGVyIHRvIHZhcmlhYmxlIGhlYWRlciBhZGRyZXNzLg0KICAgID4gKyAgQHBhcmFtW2luXSAgQXV0 aEZvcm1hdCAgICAgICAgVFJVRSBpbmRpY2F0ZXMgYXV0aGVudGljYXRlZCB2YXJpYWJsZXMgYXJl IHVzZWQuDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSBpbmRp Y2F0ZXMgYXV0aGVudGljYXRlZCB2YXJpYWJsZXMgYXJlIG5vdCB1c2VkLg0KICAgID4gKw0KICAg ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIGZ1bmN0aW9uIGNvbXBsZXRl ZCBzdWNjZXNzZnVsbHkuDQogICAgPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICBU aGUgbmV4dCB2YXJpYWJsZSB3YXMgbm90IGZvdW5kLg0KICAgID4gKyAgQHJldHZhbCBFRklfSU5W QUxJRF9QQVJBTUVURVIgSWYgVmFyaWFibGVOYW1lIGlzIG5vdCBhbiBlbXB0eSBzdHJpbmcsDQog ICAgPiB3aGlsZSBWZW5kb3JHdWlkIGlzIE5VTEwuDQogICAgPiArICBAcmV0dmFsIEVGSV9JTlZB TElEX1BBUkFNRVRFUiBUaGUgaW5wdXQgdmFsdWVzIG9mIFZhcmlhYmxlTmFtZSBhbmQNCiAgICA+ IFZlbmRvckd1aWQgYXJlIG5vdCBhIG5hbWUgYW5kDQogICAgPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBHVUlEIG9mIGFuIGV4aXN0aW5nIHZhcmlhYmxlLg0KICAgID4gKw0KICAg ID4gKyoqLw0KICAgID4gK0VGSV9TVEFUVVMNCiAgICA+ICtFRklBUEkNCiAgICA+ICtWYXJpYWJs ZVNlcnZpY2VHZXROZXh0VmFyaWFibGVJbnRlcm5hbCAoDQogICAgPiArICBJTiAgQ0hBUjE2ICAg ICAgICAgICAgICAgICAqVmFyaWFibGVOYW1lLA0KICAgID4gKyAgSU4gIEVGSV9HVUlEICAgICAg ICAgICAgICAgKlZlbmRvckd1aWQsDQogICAgPiArICBJTiAgVkFSSUFCTEVfU1RPUkVfSEVBREVS ICAqKlZhcmlhYmxlU3RvcmVMaXN0LA0KICAgID4gKyAgT1VUIFZBUklBQkxFX0hFQURFUiAgICAg ICAgKipWYXJpYWJsZVB0ciwNCiAgICA+ICsgIElOICBCT09MRUFOICAgICAgICAgICAgICAgIEF1 dGhGb3JtYXQNCiAgICA+ICsgICk7DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBSb3V0 aW5lIHVzZWQgdG8gdHJhY2sgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24gYWJvdXQgdmFyaWFibGUg dXNhZ2UuDQogICAgPiArICBUaGUgZGF0YSBpcyBzdG9yZWQgaW4gdGhlIEVGSSBzeXN0ZW0gdGFi bGUgc28gaXQgY2FuIGJlIGFjY2Vzc2VkIGxhdGVyLg0KICAgID4gKyAgVmFyaWFibGVJbmZvLmVm aSBjYW4gZHVtcCBvdXQgdGhlIHRhYmxlLiBPbmx5IEJvb3QgU2VydmljZXMgdmFyaWFibGUNCiAg ICA+ICsgIGFjY2Vzc2VzIGFyZSB0cmFja2VkIGJ5IHRoaXMgY29kZS4gVGhlIFBjZFZhcmlhYmxl Q29sbGVjdFN0YXRpc3RpY3MNCiAgICA+ICsgIGJ1aWxkIGZsYWcgY29udHJvbHMgaWYgdGhpcyBm ZWF0dXJlIGlzIGVuYWJsZWQuDQogICAgPiArDQogICAgPiArICBBIHJlYWQgdGhhdCBoaXRzIGlu IHRoZSBjYWNoZSB3aWxsIGhhdmUgUmVhZCBhbmQgQ2FjaGUgdHJ1ZSBmb3INCiAgICA+ICsgIHRo ZSB0cmFuc2FjdGlvbi4gRGF0YSBpcyBhbGxvY2F0ZWQgYnkgdGhpcyByb3V0aW5lLCBidXQgbmV2 ZXINCiAgICA+ICsgIGZyZWVkLg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtW2luXSAgICAgIFZh cmlhYmxlTmFtZSAgIE5hbWUgb2YgdGhlIFZhcmlhYmxlIHRvIHRyYWNrLg0KICAgID4gKyAgQHBh cmFtW2luXSAgICAgIFZlbmRvckd1aWQgICAgIEd1aWQgb2YgdGhlIFZhcmlhYmxlIHRvIHRyYWNr Lg0KICAgID4gKyAgQHBhcmFtW2luXSAgICAgIFZvbGF0aWxlICAgICAgIFRSVUUgaWYgdm9sYXRp bGUgRkFMU0UgaWYgbm9uLXZvbGF0aWxlLg0KICAgID4gKyAgQHBhcmFtW2luXSAgICAgIFJlYWQg ICAgICAgICAgIFRSVUUgaWYgR2V0VmFyaWFibGUoKSB3YXMgY2FsbGVkLg0KICAgID4gKyAgQHBh cmFtW2luXSAgICAgIFdyaXRlICAgICAgICAgIFRSVUUgaWYgU2V0VmFyaWFibGUoKSB3YXMgY2Fs bGVkLg0KICAgID4gKyAgQHBhcmFtW2luXSAgICAgIERlbGV0ZSAgICAgICAgIFRSVUUgaWYgZGVs ZXRlZCB2aWEgU2V0VmFyaWFibGUoKS4NCiAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBDYWNoZSAg ICAgICAgICBUUlVFIGZvciBhIGNhY2hlIGhpdC4NCiAgICA+ICsgIEBwYXJhbVtpbixvdXRdICBW YXJpYWJsZUluZm8gICBQb2ludGVyIHRvIGEgcG9pbnRlciBvZiBWQVJJQUJMRV9JTkZPX0VOVFJZ DQogICAgPiBzdHJ1Y3R1cmVzLg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK1ZPSUQNCiAg ICA+ICtVcGRhdGVWYXJpYWJsZUluZm8gKA0KICAgID4gKyAgSU4gIENIQVIxNiAgICAgICAgICAg ICAgICAgICpWYXJpYWJsZU5hbWUsDQogICAgPiArICBJTiAgRUZJX0dVSUQgICAgICAgICAgICAg ICAgKlZlbmRvckd1aWQsDQogICAgPiArICBJTiAgQk9PTEVBTiAgICAgICAgICAgICAgICAgVm9s YXRpbGUsDQogICAgPiArICBJTiAgQk9PTEVBTiAgICAgICAgICAgICAgICAgUmVhZCwNCiAgICA+ ICsgIElOICBCT09MRUFOICAgICAgICAgICAgICAgICBXcml0ZSwNCiAgICA+ICsgIElOICBCT09M RUFOICAgICAgICAgICAgICAgICBEZWxldGUsDQogICAgPiArICBJTiAgQk9PTEVBTiAgICAgICAg ICAgICAgICAgQ2FjaGUsDQogICAgPiArICBJTiBPVVQgVkFSSUFCTEVfSU5GT19FTlRSWSAgKipW YXJpYWJsZUluZm8NCiAgICA+ICsgICk7DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArDQog ICAgPiArICBSZXRyaWV2ZSBkZXRhaWxzIG9mIHRoZSB2YXJpYWJsZSBuZXh0IHRvIGdpdmVuIHZh cmlhYmxlIHdpdGhpbiBWYXJpYWJsZVN0b3JlLg0KICAgID4gKw0KICAgID4gKyAgSWYgVmFyaWFi bGVJbmZvLT5TdG9yZUluZGV4IGlzIGludmFsaWQsIHRoZSBmaXJzdCBvbmUgaW4gVmFyaWFibGVT dG9yZSBpcyByZXR1cm5lZC4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbVtpbixvdXRdIFZhcmlh YmxlSW5mbyAgICAgICAgICAgICBQb2ludGVyIHRvIHZhcmlhYmxlIGluZm9ybWF0aW9uLg0KICAg ID4gKw0KICAgID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIFZhcmlhYmxlSW5m byBvciBWYXJpYWJsZVN0b3JlIGlzIE5VTEwuDQogICAgPiArICBAcmV0dmFsIEVGSV9OT1RfRk9V TkQgICAgICAgICAgSWYgdGhlIGVuZCBvZiBWYXJpYWJsZVN0b3JlIGlzIHJlYWNoZWQuDQogICAg PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIG5leHQgdmFyaWFibGUgaXMg cmV0cmlldmVkIHN1Y2Nlc3NmdWxseS4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtFRklf U1RBVFVTDQogICAgPiArRUZJQVBJDQogICAgPiArR2V0TmV4dFZhcmlhYmxlSW5mbyAoDQogICAg PiArICBJTiBPVVQgIFBST1RFQ1RFRF9WQVJJQUJMRV9JTkZPICAqVmFyaWFibGVJbmZvDQogICAg PiArICApOw0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKw0KICAgID4gKyAgUmV0cmlldmUg ZGV0YWlscyBhYm91dCBhIHZhcmlhYmxlIGFuZCByZXR1cm4gdGhlbSBpbiBWYXJpYWJsZUluZm8t PkhlYWRlci4NCiAgICA+ICsNCiAgICA+ICsgIElmIFZhcmlhYmxlSW5mby0+QnVmZmVyIGlzIGdp dmVuLCB0aGlzIGZ1bmN0aW9uIHdpbGwgY2FsY3VsYXRlIGl0cyBvZmZzZXQNCiAgICA+ICsgIHJl bGF0aXZlIHRvIGdpdmVuIHZhcmlhYmxlIHN0b3JhZ2UgdmlhIFZhcmlhYmxlU3RvcmU7IE90aGVy d2lzZSwgaXQgd2lsbCB0cnkNCiAgICA+ICsgIG90aGVyIGludGVybmFsIHZhcmlhYmxlIHN0b3Jh Z2VzIG9yIGNhY2hlZCBjb3BpZXMuIEl0J3MgYXNzdW1lZCB0aGF0LCBmb3IgYWxsDQogICAgPiAr ICBjb3BpZXMgb2YgTlYgdmFyaWFibGUgc3RvcmFnZSwgYWxsIHZhcmlhYmxlcyBhcmUgc3RvcmVk IGluIHRoZSBzYW1lIHJlbGF0aXZlDQogICAgPiArICBwb3NpdGlvbi4gSWYgVmFyaWFibGVJbmZv LT5CdWZmZXIgaXMgZm91bmQgaW4gdGhlIHJhbmdlIG9mIGFueSBzdG9yYWdlIGNvcGllcywNCiAg ICA+ICsgIGl0cyBvZmZzZXQgcmVsYXRpdmUgdG8gdGhhdCBzdG9yYWdlIHNob3VsZCBiZSB0aGUg c2FtZSBpbiBvdGhlciBjb3BpZXMuDQogICAgPiArDQogICAgPiArICBJZiBWYXJpYWJsZUluZm8t Pk9mZnNldCBpcyBnaXZlbiAobm9uLXplcm8pIGJ1dCBub3QgVmFyaWFibGVJbmZvLT5CdWZmZXIs DQogICAgPiArICB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSB2YXJpYWJsZSBtZW1vcnkg YWRkcmVzcyBpbnNpZGUgVmFyaWFibGVTdG9yZSwNCiAgICA+ICsgIGlmIGdpdmVuLCB2aWEgVmFy aWFibGVJbmZvLT5BZGRyZXNzOyBPdGhlcndpc2UsIHRoZSBhZGRyZXNzIG9mIG90aGVyIHN0b3Jh Z2UNCiAgICA+ICsgIGNvcGllcyB3aWxsIGJlIHJldHVybmVkLCBpZiBhbnkuDQogICAgPiArDQog ICAgPiArICBGb3IgYSBuZXcgdmFyaWFibGUgd2hvc2Ugb2Zmc2V0IGhhcyBub3QgYmVlbiBkZXRl cm1pbmVkLCBhIHZhbHVlIG9mIC0xIGFzDQogICAgPiArICBWYXJpYWJsZUluZm8tPk9mZnNldCBz aG91bGQgYmUgcGFzc2VkIHRvIHNraXAgdGhlIG9mZnNldCBjYWxjdWxhdGlvbi4NCiAgICA+ICsN CiAgICA+ICsgIEBwYXJhbSBWYXJpYWJsZUluZm8gICAgICAgICAgICAgUG9pbnRlciB0byB2YXJp YWJsZSBpbmZvcm1hdGlvbi4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURf UEFSQU1FVEVSICBWYXJpYWJsZUluZm8gaXMgTlVMTCBvciBib3RoIFZhcmlhYmxlSW5mby0NCiAg ICA+ID5BZGRyZXNzDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5k IFZhcmlhYmxlSW5mby0+T2Zmc2V0IGFyZSBOVUxMICgwKS4NCiAgICA+ICsgIEByZXR2YWwgRUZJ X05PVF9GT1VORCAgICAgICAgICBJZiBnaXZlbiBBZGRyZXNzIG9yIE9mZnNldCBpcyBvdXQgb2Yg cmFuZ2Ugb2YNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnkgZ2l2 ZW4gb3IgaW50ZXJuYWwgc3RvcmFnZSBjb3BpZXMuDQogICAgPiArICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgICAgICAgVmFyaWFibGUgZGV0YWlscyBhcmUgcmV0cmlldmVkIHN1Y2Nlc3NmdWxs eS4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtFRklfU1RBVFVTDQogICAgPiArRUZJQVBJ DQogICAgPiArR2V0VmFyaWFibGVJbmZvICgNCiAgICA+ICsgIElOIE9VVCAgUFJPVEVDVEVEX1ZB UklBQkxFX0lORk8gICpWYXJpYWJsZUluZm8NCiAgICA+ICsgICk7DQogICAgPiArDQogICAgPiAr I2VuZGlmDQogICAgPiBkaWZmIC0tZ2l0DQogICAgPiBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwv VmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVSdW50aW1lQw0KICAgID4gYWNo ZS5oDQogICAgPiBiL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1 bnRpbWVEeGUvVmFyaWFibGVSdW50aW1lQw0KICAgID4gYWNoZS5oDQogICAgPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KICAgID4gaW5kZXggMDAwMDAwMDAwMDAwLi43N2RiY2UwZjkwN2MNCiAgICA+ IC0tLSAvZGV2L251bGwNCiAgICA+ICsrKw0KICAgID4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2Fs L1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlUnVudGltZUMNCiAgICA+IGFj aGUuaA0KICAgID4gQEAgLTAsMCArMSw1MSBAQA0KICAgID4gKy8qKiBAZmlsZQ0KICAgID4gKyAg VGhlIGNvbW1vbiB2YXJpYWJsZSB2b2xhdGlsZSBzdG9yZSByb3V0aW5lcyBzaGFyZWQgYnkgdGhl IERYRV9SVU5USU1FDQogICAgPiB2YXJpYWJsZQ0KICAgID4gKyAgbW9kdWxlIGFuZCB0aGUgRFhF X1NNTSB2YXJpYWJsZSBtb2R1bGUuDQogICAgPiArDQogICAgPiArQ29weXJpZ2h0IChjKSAyMDE5 LTIwMjIsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCiAgICA+ ICtTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KICAgID4gKw0K ICAgID4gKyoqLw0KICAgID4gKw0KICAgID4gKyNpZm5kZWYgVkFSSUFCTEVfUlVOVElNRV9DQUNI RV9IXw0KICAgID4gKyNkZWZpbmUgVkFSSUFCTEVfUlVOVElNRV9DQUNIRV9IXw0KICAgID4gKw0K ICAgID4gKyNpbmNsdWRlICJWYXJpYWJsZS5oIg0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4g KyAgQ29waWVzIGFueSBwZW5kaW5nIHVwZGF0ZXMgdG8gcnVudGltZSB2YXJpYWJsZSBjYWNoZXMu DQogICAgPiArDQogICAgPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgIFRoZSB2 b2xhdGlsZSBzdG9yZSB0byBiZSB1cGRhdGVkIGlzIG5vdA0KICAgID4gaW5pdGlhbGl6ZWQgcHJv cGVybHkuDQogICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIFRoZSB2b2xh dGlsZSBzdG9yZSB3YXMgdXBkYXRlZCBzdWNjZXNzZnVsbHkuDQogICAgPiArDQogICAgPiArKiov DQogICAgPiArRUZJX1NUQVRVUw0KICAgID4gK0ZsdXNoUGVuZGluZ1J1bnRpbWVWYXJpYWJsZUNh Y2hlVXBkYXRlcyAoDQogICAgPiArICBWT0lEDQogICAgPiArICApOw0KICAgID4gKw0KICAgID4g Ky8qKg0KICAgID4gKyAgU3luY2hyb25pemVzIHRoZSBydW50aW1lIHZhcmlhYmxlIGNhY2hlcyB3 aXRoIGFsbCBwZW5kaW5nIHVwZGF0ZXMgb3V0c2lkZQ0KICAgID4gcnVudGltZS4NCiAgICA+ICsN CiAgICA+ICsgIEVuc3VyZXMgYWxsIGNvbmRpdGlvbnMgYXJlIG1ldCB0byBtYWludGFpbiBjb2hl cmVuY3kgZm9yIHJ1bnRpbWUgY2FjaGUNCiAgICA+IHVwZGF0ZXMuIFRoaXMgZnVuY3Rpb24gd2ls bCBhdHRlbXB0DQogICAgPiArICB0byB3cml0ZSB0aGUgZ2l2ZW4gdXBkYXRlIChhbmQgYW55IG90 aGVyIHBlbmRpbmcgdXBkYXRlcykgaWYgdGhlIFJlYWRMb2NrIGlzDQogICAgPiBhdmFpbGFibGUu IE90aGVyd2lzZSwgdGhlDQogICAgPiArICB1cGRhdGUgaXMgYWRkZWQgYXMgYSBwZW5kaW5nIHVw ZGF0ZSBmb3IgdGhlIGdpdmVuIHZhcmlhYmxlIHN0b3JlIGFuZCBpdCB3aWxsIGJlDQogICAgPiBm bHVzaGVkIHRvIHRoZSBydW50aW1lIGNhY2hlDQogICAgPiArICBhdCB0aGUgbmV4dCBvcHBvcnR1 bml0eSB0aGUgUmVhZExvY2sgaXMgYXZhaWxhYmxlLg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFt W2luXSBWYXJpYWJsZVJ1bnRpbWVDYWNoZSBWYXJpYWJsZSBydW50aW1lIGNhY2hlIHN0cnVjdHVy ZSBmb3IgdGhlDQogICAgPiBydW50aW1lIGNhY2hlIGJlaW5nIHN5bmNocm9uaXplZC4NCiAgICA+ ICsgIEBwYXJhbVtpbl0gT2Zmc2V0ICAgICAgICAgICAgICAgT2Zmc2V0IGluIGJ5dGVzIHRvIGFw cGx5IHRoZSB1cGRhdGUuDQogICAgPiArICBAcGFyYW1baW5dIExlbmd0aCAgICAgICAgICAgICAg IExlbmd0aCBvZiBkYXRhIGluIGJ5dGVzIG9mIHRoZSB1cGRhdGUuDQogICAgPiArDQogICAgPiAr ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIFRoZSB1cGRhdGUgd2FzIGFkZGVkIGFz IGEgcGVuZGluZyB1cGRhdGUNCiAgICA+IHN1Y2Nlc3NmdWxseS4gSWYgdGhlIHZhcmlhYmxlIHJ1 bnRpbWUNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUgUmVh ZExvY2sgd2FzIGF2YWlsYWJsZSwgdGhlIHJ1bnRpbWUgY2FjaGUgd2FzDQogICAgPiB1cGRhdGVk IHN1Y2Nlc3NmdWxseS4NCiAgICA+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICAg VGhlIHZvbGF0aWxlIHN0b3JlIHRvIGJlIHVwZGF0ZWQgaXMgbm90DQogICAgPiBpbml0aWFsaXpl ZCBwcm9wZXJseS4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtFRklfU1RBVFVTDQogICAg PiArU3luY2hyb25pemVSdW50aW1lVmFyaWFibGVDYWNoZSAoDQogICAgPiArICBJTiAgVkFSSUFC TEVfUlVOVElNRV9DQUNIRSAgKlZhcmlhYmxlUnVudGltZUNhY2hlLA0KICAgID4gKyAgSU4gIFVJ TlROICAgICAgICAgICAgICAgICAgIE9mZnNldCwNCiAgICA+ICsgIElOICBVSU5UTiAgICAgICAg ICAgICAgICAgICBMZW5ndGgNCiAgICA+ICsgICk7DQogICAgPiArDQogICAgPiArI2VuZGlmDQog ICAgPiBkaWZmIC0tZ2l0DQogICAgPiBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUv UHJvdGVjdGVkL1J1bnRpbWVEeGUvTWVhc3VyZW1lbnQuYw0KICAgID4gYi9NZGVNb2R1bGVQa2cv VW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL01lYXN1cmVtZW50LmMNCiAg ICA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgPiBpbmRleCAwMDAwMDAwMDAwMDAuLmMxNWNj ZTk3MTY1ZA0KICAgID4gLS0tIC9kZXYvbnVsbA0KICAgID4gKysrDQogICAgPiBiL01kZU1vZHVs ZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvTWVhc3VyZW1lbnQu Yw0KICAgID4gQEAgLTAsMCArMSwzNDMgQEANCiAgICA+ICsvKiogQGZpbGUNCiAgICA+ICsgIE1l YXN1cmUgVENHIHJlcXVpcmVkIHZhcmlhYmxlLg0KICAgID4gKw0KICAgID4gK0NvcHlyaWdodCAo YykgMjAxMyAtIDIwMTcsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxC Uj4NCiAgICA+ICtTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0K ICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gKw0KICAgID4gKyNpbmNsdWRlIDxQaUR4ZS5oPg0K ICAgID4gKyNpbmNsdWRlIDxHdWlkL0ltYWdlQXV0aGVudGljYXRpb24uaD4NCiAgICA+ICsjaW5j bHVkZSA8SW5kdXN0cnlTdGFuZGFyZC9VZWZpVGNnUGxhdGZvcm0uaD4NCiAgICA+ICsNCiAgICA+ ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9vdFNlcnZpY2VzVGFibGVMaWIuaD4NCiAgICA+ICsj aW5jbHVkZSA8TGlicmFyeS9VZWZpUnVudGltZVNlcnZpY2VzVGFibGVMaWIuaD4NCiAgICA+ICsj aW5jbHVkZSA8TGlicmFyeS9NZW1vcnlBbGxvY2F0aW9uTGliLmg+DQogICAgPiArI2luY2x1ZGUg PExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVn TGliLmg+DQogICAgPiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZUxpYi5oPg0KICAgID4gKyNpbmNs dWRlIDxMaWJyYXJ5L1RwbU1lYXN1cmVtZW50TGliLmg+DQogICAgPiArDQogICAgPiArI2luY2x1 ZGUgIlByaXZpbGVnZVBvbHltb3JwaGljLmgiDQogICAgPiArDQogICAgPiArdHlwZWRlZiBzdHJ1 Y3Qgew0KICAgID4gKyAgQ0hBUjE2ICAgICAgKlZhcmlhYmxlTmFtZTsNCiAgICA+ICsgIEVGSV9H VUlEICAgICpWZW5kb3JHdWlkOw0KICAgID4gK30gVkFSSUFCTEVfVFlQRTsNCiAgICA+ICsNCiAg ICA+ICtWQVJJQUJMRV9UWVBFICBtVmFyaWFibGVUeXBlW10gPSB7DQogICAgPiArICB7IEVGSV9T RUNVUkVfQk9PVF9NT0RFX05BTUUsICAgICZnRWZpR2xvYmFsVmFyaWFibGVHdWlkICAgICAgICB9 LA0KICAgID4gKyAgeyBFRklfUExBVEZPUk1fS0VZX05BTUUsICAgICAgICAmZ0VmaUdsb2JhbFZh cmlhYmxlR3VpZCAgICAgICAgfSwNCiAgICA+ICsgIHsgRUZJX0tFWV9FWENIQU5HRV9LRVlfTkFN RSwgICAgJmdFZmlHbG9iYWxWYXJpYWJsZUd1aWQgICAgICAgIH0sDQogICAgPiArICB7IEVGSV9J TUFHRV9TRUNVUklUWV9EQVRBQkFTRSwgICZnRWZpSW1hZ2VTZWN1cml0eURhdGFiYXNlR3VpZCB9 LA0KICAgID4gKyAgeyBFRklfSU1BR0VfU0VDVVJJVFlfREFUQUJBU0UxLCAmZ0VmaUltYWdlU2Vj dXJpdHlEYXRhYmFzZUd1aWQgfSwNCiAgICA+ICsgIHsgRUZJX0lNQUdFX1NFQ1VSSVRZX0RBVEFC QVNFMiwgJmdFZmlJbWFnZVNlY3VyaXR5RGF0YWJhc2VHdWlkIH0sDQogICAgPiArfTsNCiAgICA+ ICsNCiAgICA+ICsvLw0KICAgID4gKy8vICJTZWN1cmVCb290IiBtYXkgdXBkYXRlIGZvbGxvd2lu ZyBQSyBEZWwvQWRkDQogICAgPiArLy8gIENhY2hlIGl0cyB2YWx1ZSB0byBkZXRlY3QgdmFsdWUg dXBkYXRlDQogICAgPiArLy8NCiAgICA+ICtVSU5UOCAgKm1TZWN1cmVCb290VmFyRGF0YSAgICA9 IE5VTEw7DQogICAgPiArVUlOVE4gIG1TZWN1cmVCb290VmFyRGF0YVNpemUgPSAwOw0KICAgID4g Kw0KICAgID4gKy8qKg0KICAgID4gKyAgVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBpZiB0aGlz IHZhcmlhYmxlIGlzIFNlY3VyZUJvb3RQb2xpY3kgVmFyaWFibGUuDQogICAgPiArDQogICAgPiAr ICBAcGFyYW1baW5dICBWYXJpYWJsZU5hbWUgICAgICBBIE51bGwtdGVybWluYXRlZCBzdHJpbmcg dGhhdCBpcyB0aGUgbmFtZSBvZiB0aGUNCiAgICA+IHZlbmRvcidzIHZhcmlhYmxlLg0KICAgID4g KyAgQHBhcmFtW2luXSAgVmVuZG9yR3VpZCAgICAgICAgQSB1bmlxdWUgaWRlbnRpZmllciBmb3Ig dGhlIHZlbmRvci4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwgVFJVRSAgVGhpcyBpcyBTZWN1 cmVCb290UG9saWN5IFZhcmlhYmxlDQogICAgPiArICBAcmV0dmFsIEZBTFNFIFRoaXMgaXMgbm90 IFNlY3VyZUJvb3RQb2xpY3kgVmFyaWFibGUNCiAgICA+ICsqKi8NCiAgICA+ICtCT09MRUFODQog ICAgPiArSXNTZWN1cmVCb290UG9saWN5VmFyaWFibGUgKA0KICAgID4gKyAgSU4gQ0hBUjE2ICAg ICpWYXJpYWJsZU5hbWUsDQogICAgPiArICBJTiBFRklfR1VJRCAgKlZlbmRvckd1aWQNCiAgICA+ ICsgICkNCiAgICA+ICt7DQogICAgPiArICBVSU5UTiAgSW5kZXg7DQogICAgPiArDQogICAgPiAr ICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBzaXplb2YgKG1WYXJpYWJsZVR5cGUpL3NpemVvZiAo bVZhcmlhYmxlVHlwZVswXSk7DQogICAgPiBJbmRleCsrKSB7DQogICAgPiArICAgIGlmICgoU3Ry Q21wIChWYXJpYWJsZU5hbWUsIG1WYXJpYWJsZVR5cGVbSW5kZXhdLlZhcmlhYmxlTmFtZSkgPT0g MCkgJiYNCiAgICA+ICsgICAgICAgIChDb21wYXJlR3VpZCAoVmVuZG9yR3VpZCwgbVZhcmlhYmxl VHlwZVtJbmRleF0uVmVuZG9yR3VpZCkpKQ0KICAgID4gKyAgICB7DQogICAgPiArICAgICAgcmV0 dXJuIFRSVUU7DQogICAgPiArICAgIH0NCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIHJl dHVybiBGQUxTRTsNCiAgICA+ICt9DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBNZWFz dXJlIGFuZCBsb2cgYW4gRUZJIHZhcmlhYmxlLCBhbmQgZXh0ZW5kIHRoZSBtZWFzdXJlbWVudCBy ZXN1bHQgaW50byBhDQogICAgPiBzcGVjaWZpYyBQQ1IuDQogICAgPiArDQogICAgPiArICBAcGFy YW1baW5dICBWYXJOYW1lICAgICAgICAgICBBIE51bGwtdGVybWluYXRlZCBzdHJpbmcgdGhhdCBp cyB0aGUgbmFtZSBvZiB0aGUNCiAgICA+IHZlbmRvcidzIHZhcmlhYmxlLg0KICAgID4gKyAgQHBh cmFtW2luXSAgVmVuZG9yR3VpZCAgICAgICAgQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHZl bmRvci4NCiAgICA+ICsgIEBwYXJhbVtpbl0gIFZhckRhdGEgICAgICAgICAgIFRoZSBjb250ZW50 IG9mIHRoZSB2YXJpYWJsZSBkYXRhLg0KICAgID4gKyAgQHBhcmFtW2luXSAgVmFyU2l6ZSAgICAg ICAgICAgVGhlIHNpemUgb2YgdGhlIHZhcmlhYmxlIGRhdGEuDQogICAgPiArDQogICAgPiArICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBPcGVyYXRpb24gY29tcGxldGVkIHN1Y2Nlc3Nm dWxseS4NCiAgICA+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgIE91dCBvZiBtZW1v cnkuDQogICAgPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgb3BlcmF0aW9u IHdhcyB1bnN1Y2Nlc3NmdWwuDQogICAgPiArDQogICAgPiArKiovDQogICAgPiArRUZJX1NUQVRV Uw0KICAgID4gK0VGSUFQSQ0KICAgID4gK01lYXN1cmVWYXJpYWJsZSAoDQogICAgPiArICBJTiAg ICAgIENIQVIxNiAgICAqVmFyTmFtZSwNCiAgICA+ICsgIElOICAgICAgRUZJX0dVSUQgICpWZW5k b3JHdWlkLA0KICAgID4gKyAgSU4gICAgICBWT0lEICAgICAgKlZhckRhdGEsDQogICAgPiArICBJ TiAgICAgIFVJTlROICAgICBWYXJTaXplDQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAg RUZJX1NUQVRVUyAgICAgICAgICBTdGF0dXM7DQogICAgPiArICBVSU5UTiAgICAgICAgICAgICAg IFZhck5hbWVMZW5ndGg7DQogICAgPiArICBVRUZJX1ZBUklBQkxFX0RBVEEgICpWYXJMb2c7DQog ICAgPiArICBVSU5UMzIgICAgICAgICAgICAgIFZhckxvZ1NpemU7DQogICAgPiArDQogICAgPiAr ICBBU1NFUlQgKChWYXJTaXplID09IDAgJiYgVmFyRGF0YSA9PSBOVUxMKSB8fCAoVmFyU2l6ZSAh PSAwICYmIFZhckRhdGEgIT0NCiAgICA+IE5VTEwpKTsNCiAgICA+ICsNCiAgICA+ICsgIFZhck5h bWVMZW5ndGggPSBTdHJMZW4gKFZhck5hbWUpOw0KICAgID4gKyAgVmFyTG9nU2l6ZSAgICA9IChV SU5UMzIpKHNpemVvZiAoKlZhckxvZykgKyBWYXJOYW1lTGVuZ3RoICogc2l6ZW9mDQogICAgPiAo KlZhck5hbWUpICsgVmFyU2l6ZQ0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0g c2l6ZW9mIChWYXJMb2ctPlVuaWNvZGVOYW1lKSAtIHNpemVvZiAoVmFyTG9nLQ0KICAgID4gPlZh cmlhYmxlRGF0YSkpOw0KICAgID4gKw0KICAgID4gKyAgVmFyTG9nID0gKFVFRklfVkFSSUFCTEVf REFUQSAqKUFsbG9jYXRlWmVyb1Bvb2wgKFZhckxvZ1NpemUpOw0KICAgID4gKyAgaWYgKFZhckxv ZyA9PSBOVUxMKSB7DQogICAgPiArICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCiAg ICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIENvcHlNZW0gKCZWYXJMb2ctPlZhcmlhYmxlTmFt ZSwgVmVuZG9yR3VpZCwgc2l6ZW9mIChWYXJMb2ctDQogICAgPiA+VmFyaWFibGVOYW1lKSk7DQog ICAgPiArICBWYXJMb2ctPlVuaWNvZGVOYW1lTGVuZ3RoICA9IFZhck5hbWVMZW5ndGg7DQogICAg PiArICBWYXJMb2ctPlZhcmlhYmxlRGF0YUxlbmd0aCA9IFZhclNpemU7DQogICAgPiArICBDb3B5 TWVtICgNCiAgICA+ICsgICAgVmFyTG9nLT5Vbmljb2RlTmFtZSwNCiAgICA+ICsgICAgVmFyTmFt ZSwNCiAgICA+ICsgICAgVmFyTmFtZUxlbmd0aCAqIHNpemVvZiAoKlZhck5hbWUpDQogICAgPiAr ICAgICk7DQogICAgPiArICBpZiAoVmFyU2l6ZSAhPSAwKSB7DQogICAgPiArICAgIENvcHlNZW0g KA0KICAgID4gKyAgICAgIChDSEFSMTYgKilWYXJMb2ctPlVuaWNvZGVOYW1lICsgVmFyTmFtZUxl bmd0aCwNCiAgICA+ICsgICAgICBWYXJEYXRhLA0KICAgID4gKyAgICAgIFZhclNpemUNCiAgICA+ ICsgICAgICApOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgREVCVUcgKChERUJVR19J TkZPLCAiVmFyaWFibGVEeGU6IE1lYXN1cmVWYXJpYWJsZSAoUGNyIC0gJXgsIEV2ZW50VHlwZSAt DQogICAgPiAgJXgsICIsIChVSU5UTik3LCAoVUlOVE4pRVZfRUZJX1ZBUklBQkxFX0RSSVZFUl9D T05GSUcpKTsNCiAgICA+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlZhcmlhYmxlTmFtZSAtICVz LCBWZW5kb3JHdWlkIC0gJWcpXG4iLCBWYXJOYW1lLA0KICAgID4gVmVuZG9yR3VpZCkpOw0KICAg ID4gKw0KICAgID4gKyAgU3RhdHVzID0gVHBtTWVhc3VyZUFuZExvZ0RhdGEgKA0KICAgID4gKyAg ICAgICAgICAgICA3LA0KICAgID4gKyAgICAgICAgICAgICBFVl9FRklfVkFSSUFCTEVfRFJJVkVS X0NPTkZJRywNCiAgICA+ICsgICAgICAgICAgICAgVmFyTG9nLA0KICAgID4gKyAgICAgICAgICAg ICBWYXJMb2dTaXplLA0KICAgID4gKyAgICAgICAgICAgICBWYXJMb2csDQogICAgPiArICAgICAg ICAgICAgIFZhckxvZ1NpemUNCiAgICA+ICsgICAgICAgICAgICAgKTsNCiAgICA+ICsgIEZyZWVQ b29sIChWYXJMb2cpOw0KICAgID4gKyAgcmV0dXJuIFN0YXR1czsNCiAgICA+ICt9DQogICAgPiAr DQogICAgPiArLyoqDQogICAgPiArICBSZXR1cm5zIHRoZSBzdGF0dXMgd2hldGhlciBnZXQgdGhl IHZhcmlhYmxlIHN1Y2Nlc3MuIFRoZSBmdW5jdGlvbiByZXRyaWV2ZXMNCiAgICA+ICsgIHZhcmlh YmxlICB0aHJvdWdoIHRoZSBVRUZJIFJ1bnRpbWUgU2VydmljZSBHZXRWYXJpYWJsZSgpLiAgVGhl DQogICAgPiArICByZXR1cm5lZCBidWZmZXIgaXMgYWxsb2NhdGVkIHVzaW5nIEFsbG9jYXRlUG9v bCgpLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZQ0KICAgID4gKyAgZm9yIGZyZWVpbmcgdGhp cyBidWZmZXIgd2l0aCBGcmVlUG9vbCgpLg0KICAgID4gKw0KICAgID4gKyAgVGhpcyBBUEkgaXMg b25seSBpbnZva2VkIGluIGJvb3QgdGltZS4gSXQgbWF5IE5PVCBiZSBpbnZva2VkIGF0IHJ1bnRp bWUuDQogICAgPiArDQogICAgPiArICBAcGFyYW1baW5dICBOYW1lICBUaGUgcG9pbnRlciB0byBh IE51bGwtdGVybWluYXRlZCBVbmljb2RlIHN0cmluZy4NCiAgICA+ICsgIEBwYXJhbVtpbl0gIEd1 aWQgIFRoZSBwb2ludGVyIHRvIGFuIEVGSV9HVUlEIHN0cnVjdHVyZQ0KICAgID4gKyAgQHBhcmFt W291dF0gVmFsdWUgVGhlIGJ1ZmZlciBwb2ludCBzYXZlZCB0aGUgdmFyaWFibGUgaW5mby4NCiAg ICA+ICsgIEBwYXJhbVtvdXRdIFNpemUgIFRoZSBidWZmZXIgc2l6ZSBvZiB0aGUgdmFyaWFibGUu DQogICAgPiArDQogICAgPiArICBAcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgICAgQWxs b2NhdGUgYnVmZmVyIGZhaWxlZC4NCiAgICA+ICsgIEByZXR1cm4gRUZJX1NVQ0NFU1MgICAgICAg ICAgICAgICBGaW5kIHRoZSBzcGVjaWZpZWQgdmFyaWFibGUuDQogICAgPiArICBAcmV0dXJuIE90 aGVycyBFcnJvcnMgICAgICAgICAgICAgUmV0dXJuIGVycm9ycyBmcm9tIGNhbGwgdG8gZ1JULT5H ZXRWYXJpYWJsZS4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtFRklfU1RBVFVTDQogICAg PiArSW50ZXJuYWxHZXRWYXJpYWJsZSAoDQogICAgPiArICBJTiBDT05TVCBDSEFSMTYgICAgKk5h bWUsDQogICAgPiArICBJTiBDT05TVCBFRklfR1VJRCAgKkd1aWQsDQogICAgPiArICBPVVQgVk9J RCAgICAgICAgICAgKipWYWx1ZSwNCiAgICA+ICsgIE9VVCBVSU5UTiAgICAgICAgICAqU2l6ZQ0K ICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCiAgICA+ ICsgIFVJTlROICAgICAgIEJ1ZmZlclNpemU7DQogICAgPiArDQogICAgPiArICAvLw0KICAgID4g KyAgLy8gVHJ5IHRvIGdldCB0aGUgdmFyaWFibGUgc2l6ZS4NCiAgICA+ICsgIC8vDQogICAgPiAr ICBCdWZmZXJTaXplID0gMDsNCiAgICA+ICsgICpWYWx1ZSAgICAgPSBOVUxMOw0KICAgID4gKyAg aWYgKFNpemUgIT0gTlVMTCkgew0KICAgID4gKyAgICAqU2l6ZSA9IDA7DQogICAgPiArICB9DQog ICAgPiArDQogICAgPiArICBTdGF0dXMgPSBnUlQtPkdldFZhcmlhYmxlICgoQ0hBUjE2ICopTmFt ZSwgKEVGSV9HVUlEICopR3VpZCwgTlVMTCwNCiAgICA+ICZCdWZmZXJTaXplLCAqVmFsdWUpOw0K ICAgID4gKyAgaWYgKFN0YXR1cyAhPSBFRklfQlVGRkVSX1RPT19TTUFMTCkgew0KICAgID4gKyAg ICByZXR1cm4gU3RhdHVzOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ ICsgIC8vIEFsbG9jYXRlIGJ1ZmZlciB0byBnZXQgdGhlIHZhcmlhYmxlLg0KICAgID4gKyAgLy8N CiAgICA+ICsgICpWYWx1ZSA9IEFsbG9jYXRlUG9vbCAoQnVmZmVyU2l6ZSk7DQogICAgPiArICBB U1NFUlQgKCpWYWx1ZSAhPSBOVUxMKTsNCiAgICA+ICsgIGlmICgqVmFsdWUgPT0gTlVMTCkgew0K ICAgID4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQogICAgPiArICB9DQogICAg PiArDQogICAgPiArICAvLw0KICAgID4gKyAgLy8gR2V0IHRoZSB2YXJpYWJsZSBkYXRhLg0KICAg ID4gKyAgLy8NCiAgICA+ICsgIFN0YXR1cyA9IGdSVC0+R2V0VmFyaWFibGUgKChDSEFSMTYgKilO YW1lLCAoRUZJX0dVSUQgKilHdWlkLCBOVUxMLA0KICAgID4gJkJ1ZmZlclNpemUsICpWYWx1ZSk7 DQogICAgPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAgPiArICAgIEZyZWVQb29s ICgqVmFsdWUpOw0KICAgID4gKyAgICAqVmFsdWUgPSBOVUxMOw0KICAgID4gKyAgfQ0KICAgID4g Kw0KICAgID4gKyAgaWYgKFNpemUgIT0gTlVMTCkgew0KICAgID4gKyAgICAqU2l6ZSA9IEJ1ZmZl clNpemU7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICByZXR1cm4gU3RhdHVzOw0KICAg ID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIFNlY3VyZUJvb3QgSG9vayBmb3Ig U2V0VmFyaWFibGUuDQogICAgPiArDQogICAgPiArICBAcGFyYW1baW5dIFZhcmlhYmxlTmFtZSAg ICAgICAgICAgICAgICAgTmFtZSBvZiBWYXJpYWJsZSB0byBiZSBmb3VuZC4NCiAgICA+ICsgIEBw YXJhbVtpbl0gVmVuZG9yR3VpZCAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSB2ZW5kb3IgR1VJ RC4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtWT0lEDQogICAgPiArRUZJQVBJDQogICAg PiArU2VjdXJlQm9vdEhvb2sgKA0KICAgID4gKyAgSU4gQ0hBUjE2ICAgICpWYXJpYWJsZU5hbWUs DQogICAgPiArICBJTiBFRklfR1VJRCAgKlZlbmRvckd1aWQNCiAgICA+ICsgICkNCiAgICA+ICt7 DQogICAgPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQogICAgPiArICBVSU5UTiAgICAgICBWYXJp YWJsZURhdGFTaXplOw0KICAgID4gKyAgVk9JRCAgICAgICAgKlZhcmlhYmxlRGF0YTsNCiAgICA+ ICsNCiAgICA+ICsgIGlmICghSXNTZWN1cmVCb290UG9saWN5VmFyaWFibGUgKFZhcmlhYmxlTmFt ZSwgVmVuZG9yR3VpZCkpIHsNCiAgICA+ICsgICAgcmV0dXJuOw0KICAgID4gKyAgfQ0KICAgID4g Kw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIFdlIHNob3VsZCBOT1QgdXNlIERhdGEgYW5kIERh dGFTaXplIGhlcmUsYmVjYXVzZSBpdCBtYXkgaW5jbHVkZQ0KICAgID4gc2lnbmF0dXJlLA0KICAg ID4gKyAgLy8gb3IgaXMganVzdCBwYXJ0aWFsIHdpdGggYXBwZW5kIGF0dHJpYnV0ZXMsIG9yIGlz IGRlbGV0ZWQuDQogICAgPiArICAvLyBXZSBzaG91bGQgR2V0VmFyaWFibGUgYWdhaW4sIHRvIGdl dCBmdWxsIHZhcmlhYmxlIGNvbnRlbnQuDQogICAgPiArICAvLw0KICAgID4gKyAgU3RhdHVzID0g SW50ZXJuYWxHZXRWYXJpYWJsZSAoDQogICAgPiArICAgICAgICAgICAgIFZhcmlhYmxlTmFtZSwN CiAgICA+ICsgICAgICAgICAgICAgVmVuZG9yR3VpZCwNCiAgICA+ICsgICAgICAgICAgICAgJlZh cmlhYmxlRGF0YSwNCiAgICA+ICsgICAgICAgICAgICAgJlZhcmlhYmxlRGF0YVNpemUNCiAgICA+ ICsgICAgICAgICAgICAgKTsNCiAgICA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCiAg ICA+ICsgICAgLy8NCiAgICA+ICsgICAgLy8gTWVhc3VyZSBEQlQgb25seSBpZiBwcmVzZW50IGFu ZCBub3QgZW1wdHkNCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgaWYgKChTdHJDbXAgKFZhcmlh YmxlTmFtZSwgRUZJX0lNQUdFX1NFQ1VSSVRZX0RBVEFCQVNFMikgPT0gMCkgJiYNCiAgICA+ICsg ICAgICAgIENvbXBhcmVHdWlkIChWZW5kb3JHdWlkLCAmZ0VmaUltYWdlU2VjdXJpdHlEYXRhYmFz ZUd1aWQpKQ0KICAgID4gKyAgICB7DQogICAgPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAi U2tpcCBtZWFzdXJpbmcgdmFyaWFibGUgJXMgc2luY2UgaXQncyBkZWxldGVkXG4iLA0KICAgID4g RUZJX0lNQUdFX1NFQ1VSSVRZX0RBVEFCQVNFMikpOw0KICAgID4gKyAgICAgIHJldHVybjsNCiAg ICA+ICsgICAgfSBlbHNlIHsNCiAgICA+ICsgICAgICBWYXJpYWJsZURhdGEgICAgID0gTlVMTDsN CiAgICA+ICsgICAgICBWYXJpYWJsZURhdGFTaXplID0gMDsNCiAgICA+ICsgICAgfQ0KICAgID4g KyAgfQ0KICAgID4gKw0KICAgID4gKyAgU3RhdHVzID0gTWVhc3VyZVZhcmlhYmxlICgNCiAgICA+ ICsgICAgICAgICAgICAgVmFyaWFibGVOYW1lLA0KICAgID4gKyAgICAgICAgICAgICBWZW5kb3JH dWlkLA0KICAgID4gKyAgICAgICAgICAgICBWYXJpYWJsZURhdGEsDQogICAgPiArICAgICAgICAg ICAgIFZhcmlhYmxlRGF0YVNpemUNCiAgICA+ICsgICAgICAgICAgICAgKTsNCiAgICA+ICsgIERF QlVHICgoREVCVUdfSU5GTywgIk1lYXN1cmVCb290UG9saWN5VmFyaWFibGUgLSAlclxuIiwgU3Rh dHVzKSk7DQogICAgPiArDQogICAgPiArICBpZiAoVmFyaWFibGVEYXRhICE9IE5VTEwpIHsNCiAg ICA+ICsgICAgRnJlZVBvb2wgKFZhcmlhYmxlRGF0YSk7DQogICAgPiArICB9DQogICAgPiArDQog ICAgPiArICAvLw0KICAgID4gKyAgLy8gIlNlY3VyZUJvb3QiIGlzIDhiaXQgJiByZWFkLW9ubHku IEl0IGNhbiBvbmx5IGJlIGNoYW5nZWQgYWNjb3JkaW5nIHRvIFBLDQogICAgPiB1cGRhdGUNCiAg ICA+ICsgIC8vDQogICAgPiArICBpZiAoKFN0ckNtcCAoVmFyaWFibGVOYW1lLCBFRklfUExBVEZP Uk1fS0VZX05BTUUpID09IDApICYmDQogICAgPiArICAgICAgQ29tcGFyZUd1aWQgKFZlbmRvckd1 aWQsICZnRWZpR2xvYmFsVmFyaWFibGVHdWlkKSkNCiAgICA+ICsgIHsNCiAgICA+ICsgICAgU3Rh dHVzID0gSW50ZXJuYWxHZXRWYXJpYWJsZSAoDQogICAgPiArICAgICAgICAgICAgICAgRUZJX1NF Q1VSRV9CT09UX01PREVfTkFNRSwNCiAgICA+ICsgICAgICAgICAgICAgICAmZ0VmaUdsb2JhbFZh cmlhYmxlR3VpZCwNCiAgICA+ICsgICAgICAgICAgICAgICAmVmFyaWFibGVEYXRhLA0KICAgID4g KyAgICAgICAgICAgICAgICZWYXJpYWJsZURhdGFTaXplDQogICAgPiArICAgICAgICAgICAgICAg KTsNCiAgICA+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgID4gKyAgICAgIHJl dHVybjsNCiAgICA+ICsgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICAv LyBJZiBQSyB1cGRhdGUgaXMgc3VjY2Vzc2Z1bC4gIlNlY3VyZUJvb3QiIHNoYWxsIGFsd2F5cyBl eGlzdCBldmVyIHNpbmNlDQogICAgPiB2YXJpYWJsZSB3cml0ZSBzZXJ2aWNlIGlzIHJlYWR5DQog ICAgPiArICAgIC8vDQogICAgPiArICAgIEFTU0VSVCAobVNlY3VyZUJvb3RWYXJEYXRhICE9IE5V TEwpOw0KICAgID4gKw0KICAgID4gKyAgICBpZiAoQ29tcGFyZU1lbSAobVNlY3VyZUJvb3RWYXJE YXRhLCBWYXJpYWJsZURhdGEsIFZhcmlhYmxlRGF0YVNpemUpICE9DQogICAgPiAwKSB7DQogICAg PiArICAgICAgRnJlZVBvb2wgKG1TZWN1cmVCb290VmFyRGF0YSk7DQogICAgPiArICAgICAgbVNl Y3VyZUJvb3RWYXJEYXRhICAgICA9IFZhcmlhYmxlRGF0YTsNCiAgICA+ICsgICAgICBtU2VjdXJl Qm9vdFZhckRhdGFTaXplID0gVmFyaWFibGVEYXRhU2l6ZTsNCiAgICA+ICsNCiAgICA+ICsgICAg ICBERUJVRyAoKERFQlVHX0lORk8sICIlcyB2YXJpYWJsZSB1cGRhdGVkIGFjY29yZGluZyB0byBQ SyBjaGFuZ2UuDQogICAgPiBSZW1lYXN1cmUgdGhlIHZhbHVlIVxuIiwgRUZJX1NFQ1VSRV9CT09U X01PREVfTkFNRSkpOw0KICAgID4gKyAgICAgIFN0YXR1cyA9IE1lYXN1cmVWYXJpYWJsZSAoDQog ICAgPiArICAgICAgICAgICAgICAgICBFRklfU0VDVVJFX0JPT1RfTU9ERV9OQU1FLA0KICAgID4g KyAgICAgICAgICAgICAgICAgJmdFZmlHbG9iYWxWYXJpYWJsZUd1aWQsDQogICAgPiArICAgICAg ICAgICAgICAgICBtU2VjdXJlQm9vdFZhckRhdGEsDQogICAgPiArICAgICAgICAgICAgICAgICBt U2VjdXJlQm9vdFZhckRhdGFTaXplDQogICAgPiArICAgICAgICAgICAgICAgICApOw0KICAgID4g KyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIk1lYXN1cmVCb290UG9saWN5VmFyaWFibGUgLSAl clxuIiwgU3RhdHVzKSk7DQogICAgPiArICAgIH0gZWxzZSB7DQogICAgPiArICAgICAgLy8NCiAg ICA+ICsgICAgICAvLyAiU2VjdXJlQm9vdCIgdmFyaWFibGUgaXMgbm90IGNoYW5nZWQNCiAgICA+ ICsgICAgICAvLw0KICAgID4gKyAgICAgIEZyZWVQb29sIChWYXJpYWJsZURhdGEpOw0KICAgID4g KyAgICB9DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICByZXR1cm47DQogICAgPiArfQ0K ICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgU29tZSBTZWN1cmUgQm9vdCBQb2xpY3kgVmFy aWFibGUgbWF5IHVwZGF0ZSBmb2xsb3dpbmcgb3RoZXIgdmFyaWFibGUNCiAgICA+IGNoYW5nZXMo U2VjdXJlQm9vdCBmb2xsb3dzIFBLIGNoYW5nZSwgZXRjKS4NCiAgICA+ICsgIFJlY29yZCB0aGVp ciBpbml0aWFsIFN0YXRlIHdoZW4gdmFyaWFibGUgd3JpdGUgc2VydmljZSBpcyByZWFkeS4NCiAg ICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtWT0lEDQogICAgPiArRUZJQVBJDQogICAgPiArUmVj b3JkU2VjdXJlQm9vdFBvbGljeVZhckRhdGEgKA0KICAgID4gKyAgVk9JRA0KICAgID4gKyAgKQ0K ICAgID4gK3sNCiAgICA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCiAgICA+ICsNCiAgICA+ICsg IC8vDQogICAgPiArICAvLyBSZWNvcmQgaW5pdGlhbCAiU2VjdXJlQm9vdCIgdmFyaWFibGUgdmFs dWUuDQogICAgPiArICAvLyBJdCBpcyB1c2VkIHRvIGRldGVjdCBTZWN1cmVCb290IHZhcmlhYmxl IGNoYW5nZSBpbiBTZWN1cmVCb290SG9vay4NCiAgICA+ICsgIC8vDQogICAgPiArICBTdGF0dXMg PSBJbnRlcm5hbEdldFZhcmlhYmxlICgNCiAgICA+ICsgICAgICAgICAgICAgRUZJX1NFQ1VSRV9C T09UX01PREVfTkFNRSwNCiAgICA+ICsgICAgICAgICAgICAgJmdFZmlHbG9iYWxWYXJpYWJsZUd1 aWQsDQogICAgPiArICAgICAgICAgICAgIChWT0lEICoqKSZtU2VjdXJlQm9vdFZhckRhdGEsDQog ICAgPiArICAgICAgICAgICAgICZtU2VjdXJlQm9vdFZhckRhdGFTaXplDQogICAgPiArICAgICAg ICAgICAgICk7DQogICAgPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAgPiArICAg IC8vDQogICAgPiArICAgIC8vIFJlYWQgY291bGQgZmFpbCB3aGVuIEF1dGggVmFyaWFibGUgc29s dXRpb24gaXMgbm90IHN1cHBvcnRlZA0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICBERUJVRyAo KERFQlVHX0lORk8sICJSZWNvcmRTZWN1cmVCb290UG9saWN5VmFyRGF0YSBHZXRWYXJpYWJsZSAl cw0KICAgID4gU3RhdHVzICV4XG4iLCBFRklfU0VDVVJFX0JPT1RfTU9ERV9OQU1FLCBTdGF0dXMp KTsNCiAgICA+ICsgIH0NCiAgICA+ICt9DQogICAgPiBkaWZmIC0tZ2l0DQogICAgPiBhL01kZU1v ZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvUmVjbGFpbS5j DQogICAgPiBiL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRp bWVEeGUvUmVjbGFpbS5jDQogICAgPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgID4gaW5kZXgg MDAwMDAwMDAwMDAwLi5hNWI3ZjhhMWZiZTINCiAgICA+IC0tLSAvZGV2L251bGwNCiAgICA+ICsr KyBiL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUv UmVjbGFpbS5jDQogICAgPiBAQCAtMCwwICsxLDUwNCBAQA0KICAgID4gKy8qKiBAZmlsZQ0KICAg ID4gKyAgSGFuZGxlcyBub24tdm9sYXRpbGUgdmFyaWFibGUgc3RvcmUgZ2FyYmFnZSBjb2xsZWN0 aW9uLCB1c2luZyBGVFcNCiAgICA+ICsgIChGYXVsdCBUb2xlcmFudCBXcml0ZSkgcHJvdG9jb2wu DQogICAgPiArDQogICAgPiArQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAyMiwgSW50ZWwgQ29ycG9y YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KICAgID4gK1NQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQogICAgPiArDQogICAgPiArKiovDQogICAgPiAr DQogICAgPiArI2luY2x1ZGUgIlZhcmlhYmxlLmgiDQogICAgPiArI2luY2x1ZGUgIlZhcmlhYmxl Tm9uVm9sYXRpbGUuaCINCiAgICA+ICsjaW5jbHVkZSAiVmFyaWFibGVQYXJzaW5nLmgiDQogICAg PiArI2luY2x1ZGUgIlZhcmlhYmxlUnVudGltZUNhY2hlLmgiDQogICAgPiArDQogICAgPiArLyoq DQogICAgPiArICBHZXRzIExCQSBvZiBibG9jayBhbmQgb2Zmc2V0IGJ5IGdpdmVuIGFkZHJlc3Mu DQogICAgPiArDQogICAgPiArICBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIExvZ2ljYWwgQmxvY2sg QWRkcmVzcyAoTEJBKSBvZiBhIGZpcm13YXJlDQogICAgPiArICB2b2x1bWUgYmxvY2sgY29udGFp bmluZyB0aGUgZ2l2ZW4gYWRkcmVzcywgYW5kIHRoZSBvZmZzZXQgb2YgdGhlDQogICAgPiArICBh ZGRyZXNzIG9uIHRoZSBibG9jay4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbSAgQWRkcmVzcyAg ICAgICAgQWRkcmVzcyB3aGljaCBzaG91bGQgYmUgY29udGFpbmVkDQogICAgPiArICAgICAgICAg ICAgICAgICAgICAgICAgIGJ5IHJldHVybmVkIEZWQiBoYW5kbGUuDQogICAgPiArICBAcGFyYW0g IExiYSAgICAgICAgICAgIFBvaW50ZXIgdG8gTEJBIGZvciBvdXRwdXQuDQogICAgPiArICBAcGFy YW0gIE9mZnNldCAgICAgICAgIFBvaW50ZXIgdG8gb2Zmc2V0IGZvciBvdXRwdXQuDQogICAgPiAr DQogICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgIExCQSBhbmQgb2Zmc2V0IHN1Y2Nlc3Nm dWxseSByZXR1cm5lZC4NCiAgICA+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgRmFpbCB0byBm aW5kIEZWQiBoYW5kbGUgYnkgYWRkcmVzcy4NCiAgICA+ICsgIEByZXR2YWwgRUZJX0FCT1JURUQg ICAgRmFpbCB0byBmaW5kIHZhbGlkIExCQSBhbmQgb2Zmc2V0Lg0KICAgID4gKw0KICAgID4gKyoq Lw0KICAgID4gK0VGSV9TVEFUVVMNCiAgICA+ICtHZXRMYmFBbmRPZmZzZXRCeUFkZHJlc3MgKA0K ICAgID4gKyAgSU4gIEVGSV9QSFlTSUNBTF9BRERSRVNTICBBZGRyZXNzLA0KICAgID4gKyAgT1VU IEVGSV9MQkEgICAgICAgICAgICAgICAqTGJhLA0KICAgID4gKyAgT1VUIFVJTlROICAgICAgICAg ICAgICAgICAqT2Zmc2V0DQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgRUZJX1NUQVRV UyAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KICAgID4gKyAgRUZJX1BIWVNJQ0FM X0FERFJFU1MgICAgICAgICAgICAgICAgRnZiQmFzZUFkZHJlc3M7DQogICAgPiArICBFRklfRklS TVdBUkVfVk9MVU1FX0JMT0NLX1BST1RPQ09MICAqRnZiOw0KICAgID4gKyAgRUZJX0ZJUk1XQVJF X1ZPTFVNRV9IRUFERVIgICAgICAgICAgKkZ3Vm9sSGVhZGVyOw0KICAgID4gKyAgRUZJX0ZWX0JM T0NLX01BUF9FTlRSWSAgICAgICAgICAgICAgKkZ2Yk1hcEVudHJ5Ow0KICAgID4gKyAgVUlOVDMy ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGJhSW5kZXg7DQogICAgPiArDQogICAgPiAr ICBGdmIgICAgID0gTlVMTDsNCiAgICA+ICsgICpMYmEgICAgPSAoRUZJX0xCQSkoLTEpOw0KICAg ID4gKyAgKk9mZnNldCA9IDA7DQogICAgPiArDQogICAgPiArICAvLw0KICAgID4gKyAgLy8gR2V0 IHRoZSBwcm9wZXIgRlZCIHByb3RvY29sLg0KICAgID4gKyAgLy8NCiAgICA+ICsgIFN0YXR1cyA9 IEdldEZ2YkluZm9CeUFkZHJlc3MgKEFkZHJlc3MsIE5VTEwsICZGdmIpOw0KICAgID4gKyAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgID4gKyAgICByZXR1cm4gU3RhdHVzOw0KICAgID4g KyAgfQ0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIEdldCB0aGUgQmFzZSBBZGRy ZXNzIG9mIEZWLg0KICAgID4gKyAgLy8NCiAgICA+ICsgIFN0YXR1cyA9IEZ2Yi0+R2V0UGh5c2lj YWxBZGRyZXNzIChGdmIsICZGdmJCYXNlQWRkcmVzcyk7DQogICAgPiArICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQogICAgPiArICAgIHJldHVybiBTdGF0dXM7DQogICAgPiArICB9DQogICAg PiArDQogICAgPiArICBGd1ZvbEhlYWRlciA9IChFRklfRklSTVdBUkVfVk9MVU1FX0hFQURFUg0K ICAgID4gKikoKFVJTlROKUZ2YkJhc2VBZGRyZXNzKTsNCiAgICA+ICsNCiAgICA+ICsgIC8vDQog ICAgPiArICAvLyBHZXQgdGhlIChMQkEsIE9mZnNldCkgb2YgQWRkcmVzcy4NCiAgICA+ICsgIC8v DQogICAgPiArICBpZiAoKEZ3Vm9sSGVhZGVyLT5Gdkxlbmd0aCkgPiAoRndWb2xIZWFkZXItPkhl YWRlckxlbmd0aCkpIHsNCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgLy8gQlVHQlVHOiBBc3N1 bWUgb25lIEZWIGhhcyBvbmUgdHlwZSBvZiBCbG9ja0xlbmd0aC4NCiAgICA+ICsgICAgLy8NCiAg ICA+ICsgICAgRnZiTWFwRW50cnkgPSAmRndWb2xIZWFkZXItPkJsb2NrTWFwWzBdOw0KICAgID4g KyAgICBmb3IgKExiYUluZGV4ID0gMTsgTGJhSW5kZXggPD0gRnZiTWFwRW50cnktPk51bUJsb2Nr czsgTGJhSW5kZXggKz0gMSkgew0KICAgID4gKyAgICAgIGlmIChBZGRyZXNzIDwgKEZ2YkJhc2VB ZGRyZXNzICsgRnZiTWFwRW50cnktPkxlbmd0aCAqIExiYUluZGV4KSkgew0KICAgID4gKyAgICAg ICAgLy8NCiAgICA+ICsgICAgICAgIC8vIEZvdW5kIHRoZSAoTGJhLCBPZmZzZXQpLg0KICAgID4g KyAgICAgICAgLy8NCiAgICA+ICsgICAgICAgICpMYmEgICAgPSBMYmFJbmRleCAtIDE7DQogICAg PiArICAgICAgICAqT2Zmc2V0ID0gKFVJTlROKShBZGRyZXNzIC0gKEZ2YkJhc2VBZGRyZXNzICsg RnZiTWFwRW50cnktPkxlbmd0aCAqDQogICAgPiAoTGJhSW5kZXggLSAxKSkpOw0KICAgID4gKyAg ICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KICAgID4gKyAgICAgIH0NCiAgICA+ICsgICAgfQ0K ICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgcmV0dXJuIEVGSV9BQk9SVEVEOw0KICAgID4g K30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIFdyaXRlcyBhIGJ1ZmZlciB0byB2YXJp YWJsZSBzdG9yYWdlIHNwYWNlLCBpbiB0aGUgd29ya2luZyBibG9jay4NCiAgICA+ICsNCiAgICA+ ICsgIFRoaXMgZnVuY3Rpb24gd3JpdGVzIGEgYnVmZmVyIHRvIHZhcmlhYmxlIHN0b3JhZ2Ugc3Bh Y2UgaW50byBhIGZpcm13YXJlDQogICAgPiArICB2b2x1bWUgYmxvY2sgZGV2aWNlLiBUaGUgZGVz dGluYXRpb24gaXMgc3BlY2lmaWVkIGJ5IHBhcmFtZXRlcg0KICAgID4gKyAgVmFyaWFibGVCYXNl LiBGYXVsdCBUb2xlcmFudCBXcml0ZSBwcm90b2NvbCBpcyB1c2VkIGZvciB3cml0aW5nLg0KICAg ID4gKw0KICAgID4gKyAgQHBhcmFtICBWYXJpYWJsZUJhc2UgICBCYXNlIGFkZHJlc3Mgb2YgdmFy aWFibGUgdG8gd3JpdGUNCiAgICA+ICsgIEBwYXJhbSAgVmFyaWFibGVCdWZmZXIgUG9pbnQgdG8g dGhlIHZhcmlhYmxlIGRhdGEgYnVmZmVyLg0KICAgID4gKw0KICAgID4gKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICBUaGUgZnVuY3Rpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4NCiAgICA+ICsg IEByZXR2YWwgRUZJX05PVF9GT1VORCAgRmFpbCB0byBsb2NhdGUgRmF1bHQgVG9sZXJhbnQgV3Jp dGUgcHJvdG9jb2wuDQogICAgPiArICBAcmV0dmFsIEVGSV9BQk9SVEVEICAgIFRoZSBmdW5jdGlv biBjb3VsZCBub3QgY29tcGxldGUgc3VjY2Vzc2Z1bGx5Lg0KICAgID4gKw0KICAgID4gKyoqLw0K ICAgID4gK0VGSV9TVEFUVVMNCiAgICA+ICtGdHdWYXJpYWJsZVNwYWNlICgNCiAgICA+ICsgIElO IEVGSV9QSFlTSUNBTF9BRERSRVNTICAgVmFyaWFibGVCYXNlLA0KICAgID4gKyAgSU4gVkFSSUFC TEVfU1RPUkVfSEVBREVSICAqVmFyaWFibGVCdWZmZXINCiAgICA+ICsgICkNCiAgICA+ICt7DQog ICAgPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCiAgICA+ ICsgIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAgRnZiSGFuZGxlOw0KICAgID4g KyAgRUZJX0xCQSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJMYmE7DQogICAgPiArICBV SU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhck9mZnNldDsNCiAgICA+ICsgIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnR3QnVmZmVyU2l6ZTsNCiAgICA+ICsg IEVGSV9GQVVMVF9UT0xFUkFOVF9XUklURV9QUk9UT0NPTCAgKkZ0d1Byb3RvY29sOw0KICAgID4g Kw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIExvY2F0ZSBmYXVsdCB0b2xlcmFudCB3cml0ZSBw cm90b2NvbC4NCiAgICA+ICsgIC8vDQogICAgPiArICBTdGF0dXMgPSBHZXRGdHdQcm90b2NvbCAo KFZPSUQgKiopJkZ0d1Byb3RvY29sKTsNCiAgICA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCiAgICA+ICsgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQogICAgPiArICB9DQogICAgPiAr DQogICAgPiArICAvLw0KICAgID4gKyAgLy8gTG9jYXRlIEZ2YiBoYW5kbGUgYnkgYWRkcmVzcy4N CiAgICA+ICsgIC8vDQogICAgPiArICBTdGF0dXMgPSBHZXRGdmJJbmZvQnlBZGRyZXNzIChWYXJp YWJsZUJhc2UsICZGdmJIYW5kbGUsIE5VTEwpOw0KICAgID4gKyAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KICAgID4gKyAgICByZXR1cm4gU3RhdHVzOw0KICAgID4gKyAgfQ0KICAgID4gKw0K ICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIEdldCBMQkEgYW5kIE9mZnNldCBieSBhZGRyZXNzLg0K ICAgID4gKyAgLy8NCiAgICA+ICsgIFN0YXR1cyA9IEdldExiYUFuZE9mZnNldEJ5QWRkcmVzcyAo VmFyaWFibGVCYXNlLCAmVmFyTGJhLCAmVmFyT2Zmc2V0KTsNCiAgICA+ICsgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCiAgICA+ICsgICAgcmV0dXJuIEVGSV9BQk9SVEVEOw0KICAgID4gKyAg fQ0KICAgID4gKw0KICAgID4gKyAgRnR3QnVmZmVyU2l6ZSA9ICgoVkFSSUFCTEVfU1RPUkVfSEVB REVSICopKChVSU5UTilWYXJpYWJsZUJhc2UpKS0+U2l6ZTsNCiAgICA+ICsgIEFTU0VSVCAoRnR3 QnVmZmVyU2l6ZSA9PSBWYXJpYWJsZUJ1ZmZlci0+U2l6ZSk7DQogICAgPiArDQogICAgPiArICAv Lw0KICAgID4gKyAgLy8gRlRXIHdyaXRlIHJlY29yZC4NCiAgICA+ICsgIC8vDQogICAgPiArICBT dGF0dXMgPSBGdHdQcm90b2NvbC0+V3JpdGUgKA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgRnR3UHJvdG9jb2wsDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJM YmEsICAgICAgICAgICAgICAgIC8vIExCQQ0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgVmFyT2Zmc2V0LCAgICAgICAgICAgICAvLyBPZmZzZXQNCiAgICA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgIEZ0d0J1ZmZlclNpemUsICAgICAgICAgLy8gTnVtQnl0ZXMNCiAgICA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgLy8gUHJpdmF0 ZURhdGEgTlVMTA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgRnZiSGFuZGxlLCAg ICAgICAgICAgICAvLyBGdmIgSGFuZGxlDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAoVk9JRCAqKVZhcmlhYmxlQnVmZmVyIC8vIHdyaXRlIGJ1ZmZlcg0KICAgID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsNCiAgICA+ICsNCiAgICA+ICsgIHJldHVybiBTdGF0dXM7DQog ICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKw0KICAgID4gKyAgVmFyaWFibGUg c3RvcmUgZ2FyYmFnZSBjb2xsZWN0aW9uIGFuZCByZWNsYWltIG9wZXJhdGlvbi4NCiAgICA+ICsN CiAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBWYXJpYWJsZUJhc2UgICAgICAgICAgICBCYXNlIGFk ZHJlc3Mgb2YgdmFyaWFibGUgc3RvcmUuDQogICAgPiArICBAcGFyYW1bb3V0XSAgICAgTGFzdFZh cmlhYmxlT2Zmc2V0ICAgICAgT2Zmc2V0IG9mIGxhc3QgdmFyaWFibGUuDQogICAgPiArICBAcGFy YW1baW5dICAgICAgSXNWb2xhdGlsZSAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIHN0b3JlIGlz IHZvbGF0aWxlIG9yIG5vdDsNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpZiBpdCBpcyBub24tdm9sYXRpbGUsIG5lZWQgRlRXLg0KICAgID4gKyAgQHBh cmFtW2luLCBvdXRdIFVwZGF0aW5nUHRyVHJhY2sgICAgICAgIFBvaW50ZXIgdG8gdXBkYXRpbmcg dmFyaWFibGUgcG9pbnRlcg0KICAgID4gdHJhY2sgc3RydWN0dXJlLg0KICAgID4gKyAgQHBhcmFt W2luXSAgICAgIE5ld1ZhcmlhYmxlICAgICAgICAgICAgIFBvaW50ZXIgdG8gbmV3IHZhcmlhYmxl Lg0KICAgID4gKyAgQHBhcmFtW2luXSAgICAgIE5ld1ZhcmlhYmxlU2l6ZSAgICAgICAgIE5ldyB2 YXJpYWJsZSBzaXplLg0KICAgID4gKw0KICAgID4gKyAgQHJldHVybiBFRklfU1VDQ0VTUyAgICAg ICAgICAgICAgICAgIFJlY2xhaW0gb3BlcmF0aW9uIGhhcyBmaW5pc2hlZCBzdWNjZXNzZnVsbHku DQogICAgPiArICBAcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgICAgICAgTm8gZW5vdWdo IG1lbW9yeSByZXNvdXJjZXMgb3INCiAgICA+IHZhcmlhYmxlIHNwYWNlLg0KICAgID4gKyAgQHJl dHVybiBPdGhlcnMgICAgICAgICAgICAgICAgICAgICAgIFVuZXhwZWN0IGVycm9yIGhhcHBlbmVk IGR1cmluZyByZWNsYWltDQogICAgPiBvcGVyYXRpb24uDQogICAgPiArDQogICAgPiArKiovDQog ICAgPiArRUZJX1NUQVRVUw0KICAgID4gK1JlY2xhaW0gKA0KICAgID4gKyAgSU4gICAgIEVGSV9Q SFlTSUNBTF9BRERSRVNTICAgIFZhcmlhYmxlQmFzZSwNCiAgICA+ICsgIE9VVCAgICBVSU5UTiAg ICAgICAgICAgICAgICAgICAqTGFzdFZhcmlhYmxlT2Zmc2V0LA0KICAgID4gKyAgSU4gICAgIEJP T0xFQU4gICAgICAgICAgICAgICAgIElzVm9sYXRpbGUsDQogICAgPiArICBJTiBPVVQgVkFSSUFC TEVfUE9JTlRFUl9UUkFDSyAgKlVwZGF0aW5nUHRyVHJhY2ssDQogICAgPiArICBJTiAgICAgVkFS SUFCTEVfSEVBREVSICAgICAgICAgKk5ld1ZhcmlhYmxlLA0KICAgID4gKyAgSU4gICAgIFVJTlRO ICAgICAgICAgICAgICAgICAgIE5ld1ZhcmlhYmxlU2l6ZQ0KICAgID4gKyAgKQ0KICAgID4gK3sN CiAgICA+ICsgIFZBUklBQkxFX0hFQURFUiAgICAgICAgKlZhcmlhYmxlOw0KICAgID4gKyAgVkFS SUFCTEVfSEVBREVSICAgICAgICAqQWRkZWRWYXJpYWJsZTsNCiAgICA+ICsgIFZBUklBQkxFX0hF QURFUiAgICAgICAgKk5leHRWYXJpYWJsZTsNCiAgICA+ICsgIFZBUklBQkxFX0hFQURFUiAgICAg ICAgKk5leHRBZGRlZFZhcmlhYmxlOw0KICAgID4gKyAgVkFSSUFCTEVfU1RPUkVfSEVBREVSICAq VmFyaWFibGVTdG9yZUhlYWRlcjsNCiAgICA+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgKlZh bGlkQnVmZmVyOw0KICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICBNYXhpbXVtQnVmZmVy U2l6ZTsNCiAgICA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgVmFyaWFibGVTaXplOw0KICAg ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICBOYW1lU2l6ZTsNCiAgICA+ICsgIFVJTlQ4ICAg ICAgICAgICAgICAgICAgKkN1cnJQdHI7DQogICAgPiArICBWT0lEICAgICAgICAgICAgICAgICAg ICpQb2ludDA7DQogICAgPiArICBWT0lEICAgICAgICAgICAgICAgICAgICpQb2ludDE7DQogICAg PiArICBCT09MRUFOICAgICAgICAgICAgICAgIEZvdW5kQWRkZWQ7DQogICAgPiArICBFRklfU1RB VFVTICAgICAgICAgICAgIFN0YXR1czsNCiAgICA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAg RG9uZVN0YXR1czsNCiAgICA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgQ29tbW9uVmFyaWFi bGVUb3RhbFNpemU7DQogICAgPiArICBVSU5UTiAgICAgICAgICAgICAgICAgIENvbW1vblVzZXJW YXJpYWJsZVRvdGFsU2l6ZTsNCiAgICA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgSHdFcnJW YXJpYWJsZVRvdGFsU2l6ZTsNCiAgICA+ICsgIFZBUklBQkxFX0hFQURFUiAgICAgICAgKlVwZGF0 aW5nVmFyaWFibGU7DQogICAgPiArICBWQVJJQUJMRV9IRUFERVIgICAgICAgICpVcGRhdGluZ0lu RGVsZXRlZFRyYW5zaXRpb247DQogICAgPiArICBCT09MRUFOICAgICAgICAgICAgICAgIEF1dGhG b3JtYXQ7DQogICAgPiArDQogICAgPiArICBBdXRoRm9ybWF0ICAgICAgICAgICAgICAgICAgPSBt VmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLkF1dGhGb3JtYXQ7DQogICAgPiAr ICBVcGRhdGluZ1ZhcmlhYmxlICAgICAgICAgICAgPSBOVUxMOw0KICAgID4gKyAgVXBkYXRpbmdJ bkRlbGV0ZWRUcmFuc2l0aW9uID0gTlVMTDsNCiAgICA+ICsgIGlmIChVcGRhdGluZ1B0clRyYWNr ICE9IE5VTEwpIHsNCiAgICA+ICsgICAgVXBkYXRpbmdWYXJpYWJsZSAgICAgICAgICAgID0gVXBk YXRpbmdQdHJUcmFjay0+Q3VyclB0cjsNCiAgICA+ICsgICAgVXBkYXRpbmdJbkRlbGV0ZWRUcmFu c2l0aW9uID0gVXBkYXRpbmdQdHJUcmFjay0+SW5EZWxldGVkVHJhbnNpdGlvblB0cjsNCiAgICA+ ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIFZhcmlhYmxlU3RvcmVIZWFkZXIgPSAoVkFSSUFCTEVf U1RPUkVfSEVBREVSICopKChVSU5UTilWYXJpYWJsZUJhc2UpOw0KICAgID4gKw0KICAgID4gKyAg Q29tbW9uVmFyaWFibGVUb3RhbFNpemUgICAgID0gMDsNCiAgICA+ICsgIENvbW1vblVzZXJWYXJp YWJsZVRvdGFsU2l6ZSA9IDA7DQogICAgPiArICBId0VyclZhcmlhYmxlVG90YWxTaXplICAgICAg PSAwOw0KICAgID4gKw0KICAgID4gKyAgaWYgKElzVm9sYXRpbGUgfHwgbVZhcmlhYmxlTW9kdWxl R2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5FbXVOdk1vZGUpIHsNCiAgICA+ICsgICAgLy8NCiAgICA+ ICsgICAgLy8gU3RhcnQgUG9pbnRlcnMgZm9yIHRoZSB2YXJpYWJsZS4NCiAgICA+ICsgICAgLy8N CiAgICA+ICsgICAgVmFyaWFibGUgICAgICAgICAgPSBHZXRTdGFydFBvaW50ZXIgKFZhcmlhYmxl U3RvcmVIZWFkZXIpOw0KICAgID4gKyAgICBNYXhpbXVtQnVmZmVyU2l6ZSA9IHNpemVvZiAoVkFS SUFCTEVfU1RPUkVfSEVBREVSKTsNCiAgICA+ICsNCiAgICA+ICsgICAgd2hpbGUgKElzVmFsaWRW YXJpYWJsZUhlYWRlciAoVmFyaWFibGUsIEdldEVuZFBvaW50ZXIgKFZhcmlhYmxlU3RvcmVIZWFk ZXIpLA0KICAgID4gQXV0aEZvcm1hdCkpIHsNCiAgICA+ICsgICAgICBOZXh0VmFyaWFibGUgPSBH ZXROZXh0VmFyaWFibGVQdHIgKFZhcmlhYmxlLCBBdXRoRm9ybWF0KTsNCiAgICA+ICsgICAgICBp ZiAoKChWYXJpYWJsZS0+U3RhdGUgPT0gVkFSX0FEREVEKSB8fCAoVmFyaWFibGUtPlN0YXRlID09 DQogICAgPiAoVkFSX0lOX0RFTEVURURfVFJBTlNJVElPTiAmIFZBUl9BRERFRCkpKSAmJg0KICAg ID4gKyAgICAgICAgICAoVmFyaWFibGUgIT0gVXBkYXRpbmdWYXJpYWJsZSkgJiYNCiAgICA+ICsg ICAgICAgICAgKFZhcmlhYmxlICE9IFVwZGF0aW5nSW5EZWxldGVkVHJhbnNpdGlvbikNCiAgICA+ ICsgICAgICAgICAgKQ0KICAgID4gKyAgICAgIHsNCiAgICA+ICsgICAgICAgIFZhcmlhYmxlU2l6 ZSAgICAgICA9IChVSU5UTilOZXh0VmFyaWFibGUgLSAoVUlOVE4pVmFyaWFibGU7DQogICAgPiAr ICAgICAgICBNYXhpbXVtQnVmZmVyU2l6ZSArPSBWYXJpYWJsZVNpemU7DQogICAgPiArICAgICAg fQ0KICAgID4gKw0KICAgID4gKyAgICAgIFZhcmlhYmxlID0gTmV4dFZhcmlhYmxlOw0KICAgID4g KyAgICB9DQogICAgPiArDQogICAgPiArICAgIGlmIChOZXdWYXJpYWJsZSAhPSBOVUxMKSB7DQog ICAgPiArICAgICAgLy8NCiAgICA+ICsgICAgICAvLyBBZGQgdGhlIG5ldyB2YXJpYWJsZSBzaXpl Lg0KICAgID4gKyAgICAgIC8vDQogICAgPiArICAgICAgTWF4aW11bUJ1ZmZlclNpemUgKz0gTmV3 VmFyaWFibGVTaXplOw0KICAgID4gKyAgICB9DQogICAgPiArDQogICAgPiArICAgIC8vDQogICAg PiArICAgIC8vIFJlc2VydmUgdGhlIDEgQnl0ZXMgd2l0aCBPeGZmIHRvIGlkZW50aWZ5IHRoZQ0K ICAgID4gKyAgICAvLyBlbmQgb2YgdGhlIHZhcmlhYmxlIGJ1ZmZlci4NCiAgICA+ICsgICAgLy8N CiAgICA+ICsgICAgTWF4aW11bUJ1ZmZlclNpemUgKz0gMTsNCiAgICA+ICsgICAgVmFsaWRCdWZm ZXIgICAgICAgID0gQWxsb2NhdGVQb29sIChNYXhpbXVtQnVmZmVyU2l6ZSk7DQogICAgPiArICAg IGlmIChWYWxpZEJ1ZmZlciA9PSBOVUxMKSB7DQogICAgPiArICAgICAgcmV0dXJuIEVGSV9PVVRf T0ZfUkVTT1VSQ0VTOw0KICAgID4gKyAgICB9DQogICAgPiArICB9IGVsc2Ugew0KICAgID4gKyAg ICAvLw0KICAgID4gKyAgICAvLyBGb3IgTlYgdmFyaWFibGUgcmVjbGFpbSwgZG9uJ3QgYWxsb2Nh dGUgcG9vbCBoZXJlIGFuZCBqdXN0IHVzZQ0KICAgID4gbU52VmFyaWFibGVDYWNoZQ0KICAgID4g KyAgICAvLyBhcyB0aGUgYnVmZmVyIHRvIHJlZHVjZSBTTVJBTSBjb25zdW1wdGlvbiBmb3IgU01N IHZhcmlhYmxlIGRyaXZlci4NCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgTWF4aW11bUJ1ZmZl clNpemUgPSBtTnZWYXJpYWJsZUNhY2hlLT5TaXplOw0KICAgID4gKyAgICBWYWxpZEJ1ZmZlciAg ICAgICA9IChVSU5UOCAqKW1OdlZhcmlhYmxlQ2FjaGU7DQogICAgPiArICB9DQogICAgPiArDQog ICAgPiArICBTZXRNZW0gKFZhbGlkQnVmZmVyLCBNYXhpbXVtQnVmZmVyU2l6ZSwgMHhmZik7DQog ICAgPiArDQogICAgPiArICAvLw0KICAgID4gKyAgLy8gQ29weSB2YXJpYWJsZSBzdG9yZSBoZWFk ZXIuDQogICAgPiArICAvLw0KICAgID4gKyAgQ29weU1lbSAoVmFsaWRCdWZmZXIsIFZhcmlhYmxl U3RvcmVIZWFkZXIsIHNpemVvZg0KICAgID4gKFZBUklBQkxFX1NUT1JFX0hFQURFUikpOw0KICAg ID4gKyAgQ3VyclB0ciA9IChVSU5UOCAqKUdldFN0YXJ0UG9pbnRlciAoKFZBUklBQkxFX1NUT1JF X0hFQURFUiAqKVZhbGlkQnVmZmVyKTsNCiAgICA+ICsNCiAgICA+ICsgIC8vDQogICAgPiArICAv LyBSZWluc3RhbGwgYWxsIEFEREVEIHZhcmlhYmxlcyBhcyBsb25nIGFzIHRoZXkgYXJlIG5vdCBp ZGVudGljYWwgdG8gVXBkYXRpbmcNCiAgICA+IFZhcmlhYmxlLg0KICAgID4gKyAgLy8NCiAgICA+ ICsgIFZhcmlhYmxlID0gR2V0U3RhcnRQb2ludGVyIChWYXJpYWJsZVN0b3JlSGVhZGVyKTsNCiAg ICA+ICsgIHdoaWxlIChJc1ZhbGlkVmFyaWFibGVIZWFkZXIgKFZhcmlhYmxlLCBHZXRFbmRQb2lu dGVyIChWYXJpYWJsZVN0b3JlSGVhZGVyKSwNCiAgICA+IEF1dGhGb3JtYXQpKSB7DQogICAgPiAr ICAgIE5leHRWYXJpYWJsZSA9IEdldE5leHRWYXJpYWJsZVB0ciAoVmFyaWFibGUsIEF1dGhGb3Jt YXQpOw0KICAgID4gKyAgICBpZiAoKFZhcmlhYmxlICE9IFVwZGF0aW5nVmFyaWFibGUpICYmIChW YXJpYWJsZS0+U3RhdGUgPT0gVkFSX0FEREVEKSkgew0KICAgID4gKyAgICAgIFZhcmlhYmxlU2l6 ZSA9IChVSU5UTilOZXh0VmFyaWFibGUgLSAoVUlOVE4pVmFyaWFibGU7DQogICAgPiArICAgICAg Q29weU1lbSAoQ3VyclB0ciwgKFVJTlQ4ICopVmFyaWFibGUsIFZhcmlhYmxlU2l6ZSk7DQogICAg PiArICAgICAgaWYgKCFJc1ZvbGF0aWxlKSB7DQogICAgPiArICAgICAgICAoVk9JRClQcm90ZWN0 ZWRWYXJpYWJsZUxpYlJlZnJlc2ggKA0KICAgID4gKyAgICAgICAgICAgICAgICAoVkFSSUFCTEVf SEVBREVSICopQ3VyclB0ciwNCiAgICA+ICsgICAgICAgICAgICAgICAgVmFyaWFibGVTaXplLA0K ICAgID4gKyAgICAgICAgICAgICAgICAoVUlOVE4pQ3VyclB0ciAtIChVSU5UTilWYWxpZEJ1ZmZl ciwNCiAgICA+ICsgICAgICAgICAgICAgICAgRkFMU0UNCiAgICA+ICsgICAgICAgICAgICAgICAg KTsNCiAgICA+ICsNCiAgICA+ICsgICAgICAgIGlmICgoVmFyaWFibGUtPkF0dHJpYnV0ZXMgJiBF RklfVkFSSUFCTEVfSEFSRFdBUkVfRVJST1JfUkVDT1JEKQ0KICAgID4gKyAgICAgICAgICAgID09 IEVGSV9WQVJJQUJMRV9IQVJEV0FSRV9FUlJPUl9SRUNPUkQpDQogICAgPiArICAgICAgICB7DQog ICAgPiArICAgICAgICAgIEh3RXJyVmFyaWFibGVUb3RhbFNpemUgKz0gVmFyaWFibGVTaXplOw0K ICAgID4gKyAgICAgICAgfSBlbHNlIHsNCiAgICA+ICsgICAgICAgICAgQ29tbW9uVmFyaWFibGVU b3RhbFNpemUgKz0gVmFyaWFibGVTaXplOw0KICAgID4gKyAgICAgICAgICBpZiAoSXNVc2VyVmFy aWFibGUgKFZhcmlhYmxlKSkgew0KICAgID4gKyAgICAgICAgICAgIENvbW1vblVzZXJWYXJpYWJs ZVRvdGFsU2l6ZSArPSBWYXJpYWJsZVNpemU7DQogICAgPiArICAgICAgICAgIH0NCiAgICA+ICsg ICAgICAgIH0NCiAgICA+ICsgICAgICB9DQogICAgPiArDQogICAgPiArICAgICAgQ3VyclB0ciAr PSBWYXJpYWJsZVNpemU7DQogICAgPiArICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgVmFyaWFi bGUgPSBOZXh0VmFyaWFibGU7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICAvLw0KICAg ID4gKyAgLy8gUmVpbnN0YWxsIGFsbCBpbiBkZWxldGUgdHJhbnNpdGlvbiB2YXJpYWJsZXMuDQog ICAgPiArICAvLw0KICAgID4gKyAgVmFyaWFibGUgPSBHZXRTdGFydFBvaW50ZXIgKFZhcmlhYmxl U3RvcmVIZWFkZXIpOw0KICAgID4gKyAgd2hpbGUgKElzVmFsaWRWYXJpYWJsZUhlYWRlciAoVmFy aWFibGUsIEdldEVuZFBvaW50ZXIgKFZhcmlhYmxlU3RvcmVIZWFkZXIpLA0KICAgID4gQXV0aEZv cm1hdCkpIHsNCiAgICA+ICsgICAgTmV4dFZhcmlhYmxlID0gR2V0TmV4dFZhcmlhYmxlUHRyIChW YXJpYWJsZSwgQXV0aEZvcm1hdCk7DQogICAgPiArICAgIGlmICgoVmFyaWFibGUgIT0gVXBkYXRp bmdWYXJpYWJsZSkgJiYgKFZhcmlhYmxlICE9DQogICAgPiBVcGRhdGluZ0luRGVsZXRlZFRyYW5z aXRpb24pICYmIChWYXJpYWJsZS0+U3RhdGUgPT0NCiAgICA+IChWQVJfSU5fREVMRVRFRF9UUkFO U0lUSU9OICYgVkFSX0FEREVEKSkgJiYNCiAgICA+ICsgICAgICAgIChQcm90ZWN0ZWRWYXJpYWJs ZUxpYklzSG1hYyAoR2V0VmFyaWFibGVOYW1lUHRyIChWYXJpYWJsZSwgQXV0aEZvcm1hdCkpDQog ICAgPiA9PSBGQUxTRSkpDQogICAgPiArICAgIHsNCiAgICA+ICsgICAgICBGb3VuZEFkZGVkICAg ID0gRkFMU0U7DQogICAgPiArICAgICAgQWRkZWRWYXJpYWJsZSA9IEdldFN0YXJ0UG9pbnRlciAo KFZBUklBQkxFX1NUT1JFX0hFQURFUiAqKVZhbGlkQnVmZmVyKTsNCiAgICA+ICsgICAgICB3aGls ZSAoSXNWYWxpZFZhcmlhYmxlSGVhZGVyIChBZGRlZFZhcmlhYmxlLCBHZXRFbmRQb2ludGVyDQog ICAgPiAoKFZBUklBQkxFX1NUT1JFX0hFQURFUiAqKVZhbGlkQnVmZmVyKSwgQXV0aEZvcm1hdCkp IHsNCiAgICA+ICsgICAgICAgIE5leHRBZGRlZFZhcmlhYmxlID0gR2V0TmV4dFZhcmlhYmxlUHRy IChBZGRlZFZhcmlhYmxlLCBBdXRoRm9ybWF0KTsNCiAgICA+ICsgICAgICAgIE5hbWVTaXplICAg ICAgICAgID0gTmFtZVNpemVPZlZhcmlhYmxlIChBZGRlZFZhcmlhYmxlLCBBdXRoRm9ybWF0KTsN CiAgICA+ICsgICAgICAgIGlmIChDb21wYXJlR3VpZCAoDQogICAgPiArICAgICAgICAgICAgICBH ZXRWZW5kb3JHdWlkUHRyIChBZGRlZFZhcmlhYmxlLCBBdXRoRm9ybWF0KSwNCiAgICA+ICsgICAg ICAgICAgICAgIEdldFZlbmRvckd1aWRQdHIgKFZhcmlhYmxlLCBBdXRoRm9ybWF0KQ0KICAgID4g KyAgICAgICAgICAgICAgKSAmJiAoTmFtZVNpemUgPT0gTmFtZVNpemVPZlZhcmlhYmxlIChWYXJp YWJsZSwgQXV0aEZvcm1hdCkpKQ0KICAgID4gKyAgICAgICAgew0KICAgID4gKyAgICAgICAgICBQ b2ludDAgPSAoVk9JRCAqKUdldFZhcmlhYmxlTmFtZVB0ciAoQWRkZWRWYXJpYWJsZSwgQXV0aEZv cm1hdCk7DQogICAgPiArICAgICAgICAgIFBvaW50MSA9IChWT0lEICopR2V0VmFyaWFibGVOYW1l UHRyIChWYXJpYWJsZSwgQXV0aEZvcm1hdCk7DQogICAgPiArICAgICAgICAgIGlmIChDb21wYXJl TWVtIChQb2ludDAsIFBvaW50MSwgTmFtZVNpemUpID09IDApIHsNCiAgICA+ICsgICAgICAgICAg ICBGb3VuZEFkZGVkID0gVFJVRTsNCiAgICA+ICsgICAgICAgICAgICBicmVhazsNCiAgICA+ICsg ICAgICAgICAgfQ0KICAgID4gKyAgICAgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICAgICAgQWRk ZWRWYXJpYWJsZSA9IE5leHRBZGRlZFZhcmlhYmxlOw0KICAgID4gKyAgICAgIH0NCiAgICA+ICsN CiAgICA+ICsgICAgICBpZiAoIUZvdW5kQWRkZWQpIHsNCiAgICA+ICsgICAgICAgIC8vDQogICAg PiArICAgICAgICAvLyBQcm9tb3RlIFZBUl9JTl9ERUxFVEVEX1RSQU5TSVRJT04gdG8gVkFSX0FE REVELg0KICAgID4gKyAgICAgICAgLy8NCiAgICA+ICsgICAgICAgIFZhcmlhYmxlU2l6ZSA9IChV SU5UTilOZXh0VmFyaWFibGUgLSAoVUlOVE4pVmFyaWFibGU7DQogICAgPiArICAgICAgICBDb3B5 TWVtIChDdXJyUHRyLCAoVUlOVDggKilWYXJpYWJsZSwgVmFyaWFibGVTaXplKTsNCiAgICA+ICsg ICAgICAgICgoVkFSSUFCTEVfSEVBREVSICopQ3VyclB0ciktPlN0YXRlID0gVkFSX0FEREVEOw0K ICAgID4gKyAgICAgICAgaWYgKCFJc1ZvbGF0aWxlKSB7DQogICAgPiArICAgICAgICAgIChWT0lE KVByb3RlY3RlZFZhcmlhYmxlTGliUmVmcmVzaCAoDQogICAgPiArICAgICAgICAgICAgICAgICAg KFZBUklBQkxFX0hFQURFUiAqKUN1cnJQdHIsDQogICAgPiArICAgICAgICAgICAgICAgICAgVmFy aWFibGVTaXplLA0KICAgID4gKyAgICAgICAgICAgICAgICAgIChVSU5UTilDdXJyUHRyIC0gKFVJ TlROKVZhbGlkQnVmZmVyLA0KICAgID4gKyAgICAgICAgICAgICAgICAgIEZBTFNFDQogICAgPiAr ICAgICAgICAgICAgICAgICAgKTsNCiAgICA+ICsNCiAgICA+ICsgICAgICAgICAgaWYgKChWYXJp YWJsZS0+QXR0cmlidXRlcyAmIEVGSV9WQVJJQUJMRV9IQVJEV0FSRV9FUlJPUl9SRUNPUkQpDQog ICAgPiArICAgICAgICAgICAgICA9PSBFRklfVkFSSUFCTEVfSEFSRFdBUkVfRVJST1JfUkVDT1JE KQ0KICAgID4gKyAgICAgICAgICB7DQogICAgPiArICAgICAgICAgICAgSHdFcnJWYXJpYWJsZVRv dGFsU2l6ZSArPSBWYXJpYWJsZVNpemU7DQogICAgPiArICAgICAgICAgIH0gZWxzZSB7DQogICAg PiArICAgICAgICAgICAgQ29tbW9uVmFyaWFibGVUb3RhbFNpemUgKz0gVmFyaWFibGVTaXplOw0K ICAgID4gKyAgICAgICAgICAgIGlmIChJc1VzZXJWYXJpYWJsZSAoVmFyaWFibGUpKSB7DQogICAg PiArICAgICAgICAgICAgICBDb21tb25Vc2VyVmFyaWFibGVUb3RhbFNpemUgKz0gVmFyaWFibGVT aXplOw0KICAgID4gKyAgICAgICAgICAgIH0NCiAgICA+ICsgICAgICAgICAgfQ0KICAgID4gKyAg ICAgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICAgICAgQ3VyclB0ciArPSBWYXJpYWJsZVNpemU7 DQogICAgPiArICAgICAgfQ0KICAgID4gKyAgICB9DQogICAgPiArDQogICAgPiArICAgIFZhcmlh YmxlID0gTmV4dFZhcmlhYmxlOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgLy8NCiAg ICA+ICsgIC8vIEluc3RhbGwgdGhlIG5ldyB2YXJpYWJsZSBpZiBpdCBpcyBub3QgTlVMTC4NCiAg ICA+ICsgIC8vDQogICAgPiArICBpZiAoTmV3VmFyaWFibGUgIT0gTlVMTCkgew0KICAgID4gKyAg ICBpZiAoKChVSU5UTilDdXJyUHRyIC0gKFVJTlROKVZhbGlkQnVmZmVyKSArIE5ld1ZhcmlhYmxl U2l6ZSA+DQogICAgPiBWYXJpYWJsZVN0b3JlSGVhZGVyLT5TaXplKSB7DQogICAgPiArICAgICAg Ly8NCiAgICA+ICsgICAgICAvLyBObyBlbm91Z2ggc3BhY2UgdG8gc3RvcmUgdGhlIG5ldyB2YXJp YWJsZS4NCiAgICA+ICsgICAgICAvLw0KICAgID4gKyAgICAgIFN0YXR1cyA9IEVGSV9PVVRfT0Zf UkVTT1VSQ0VTOw0KICAgID4gKyAgICAgIGdvdG8gRG9uZTsNCiAgICA+ICsgICAgfQ0KICAgID4g Kw0KICAgID4gKyAgICBpZiAoIUlzVm9sYXRpbGUpIHsNCiAgICA+ICsgICAgICBpZiAoKE5ld1Zh cmlhYmxlLT5BdHRyaWJ1dGVzICYgRUZJX1ZBUklBQkxFX0hBUkRXQVJFX0VSUk9SX1JFQ09SRCkN CiAgICA+ID09IEVGSV9WQVJJQUJMRV9IQVJEV0FSRV9FUlJPUl9SRUNPUkQpIHsNCiAgICA+ICsg ICAgICAgIEh3RXJyVmFyaWFibGVUb3RhbFNpemUgKz0gTmV3VmFyaWFibGVTaXplOw0KICAgID4g KyAgICAgIH0gZWxzZSBpZiAoKE5ld1ZhcmlhYmxlLT5BdHRyaWJ1dGVzICYNCiAgICA+IEVGSV9W QVJJQUJMRV9IQVJEV0FSRV9FUlJPUl9SRUNPUkQpICE9DQogICAgPiBFRklfVkFSSUFCTEVfSEFS RFdBUkVfRVJST1JfUkVDT1JEKSB7DQogICAgPiArICAgICAgICBDb21tb25WYXJpYWJsZVRvdGFs U2l6ZSArPSBOZXdWYXJpYWJsZVNpemU7DQogICAgPiArICAgICAgICBpZiAoSXNVc2VyVmFyaWFi bGUgKE5ld1ZhcmlhYmxlKSkgew0KICAgID4gKyAgICAgICAgICBDb21tb25Vc2VyVmFyaWFibGVU b3RhbFNpemUgKz0gTmV3VmFyaWFibGVTaXplOw0KICAgID4gKyAgICAgICAgfQ0KICAgID4gKyAg ICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgICBpZiAoKEh3RXJyVmFyaWFibGVUb3RhbFNpemUg PiBQY2RHZXQzMiAoUGNkSHdFcnJTdG9yYWdlU2l6ZSkpIHx8DQogICAgPiArICAgICAgICAgIChD b21tb25WYXJpYWJsZVRvdGFsU2l6ZSA+IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCiAgICA+ID5D b21tb25WYXJpYWJsZVNwYWNlKSB8fA0KICAgID4gKyAgICAgICAgICAoQ29tbW9uVXNlclZhcmlh YmxlVG90YWxTaXplID4gbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KICAgID4gPkNvbW1vbk1heFVz ZXJWYXJpYWJsZVNwYWNlKSkNCiAgICA+ICsgICAgICB7DQogICAgPiArICAgICAgICAvLw0KICAg ID4gKyAgICAgICAgLy8gTm8gZW5vdWdoIHNwYWNlIHRvIHN0b3JlIHRoZSBuZXcgdmFyaWFibGUg YnkgTlYgb3IgTlYrSFIgYXR0cmlidXRlLg0KICAgID4gKyAgICAgICAgLy8NCiAgICA+ICsgICAg ICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KICAgID4gKyAgICAgICAgZ290byBE b25lOw0KICAgID4gKyAgICAgIH0NCiAgICA+ICsgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICBD b3B5TWVtIChDdXJyUHRyLCAoVUlOVDggKilOZXdWYXJpYWJsZSwgTmV3VmFyaWFibGVTaXplKTsN CiAgICA+ICsgICAgKChWQVJJQUJMRV9IRUFERVIgKilDdXJyUHRyKS0+U3RhdGUgPSBWQVJfQURE RUQ7DQogICAgPiArICAgIGlmIChVcGRhdGluZ1ZhcmlhYmxlICE9IE5VTEwpIHsNCiAgICA+ICsg ICAgICBVcGRhdGluZ1B0clRyYWNrLT5DdXJyUHRyICAgICAgICAgICAgICAgID0gKFZBUklBQkxF X0hFQURFUg0KICAgID4gKikoKFVJTlROKVVwZGF0aW5nUHRyVHJhY2stPlN0YXJ0UHRyICsgKChV SU5UTilDdXJyUHRyIC0NCiAgICA+IChVSU5UTilHZXRTdGFydFBvaW50ZXIgKChWQVJJQUJMRV9T VE9SRV9IRUFERVIgKilWYWxpZEJ1ZmZlcikpKTsNCiAgICA+ICsgICAgICBVcGRhdGluZ1B0clRy YWNrLT5JbkRlbGV0ZWRUcmFuc2l0aW9uUHRyID0gTlVMTDsNCiAgICA+ICsgICAgfQ0KICAgID4g Kw0KICAgID4gKyAgICBDdXJyUHRyICs9IE5ld1ZhcmlhYmxlU2l6ZTsNCiAgICA+ICsgIH0NCiAg ICA+ICsNCiAgICA+ICsgIGlmIChJc1ZvbGF0aWxlIHx8IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+ VmFyaWFibGVHbG9iYWwuRW11TnZNb2RlKSB7DQogICAgPiArICAgIC8vDQogICAgPiArICAgIC8v IElmIHZvbGF0aWxlL2VtdWxhdGVkIG5vbi12b2xhdGlsZSB2YXJpYWJsZSBzdG9yZSwganVzdCBj b3B5IHZhbGlkIGJ1ZmZlci4NCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgU2V0TWVtICgoVUlO VDggKikoVUlOVE4pVmFyaWFibGVCYXNlLCBWYXJpYWJsZVN0b3JlSGVhZGVyLT5TaXplLCAweGZm KTsNCiAgICA+ICsgICAgQ29weU1lbSAoKFVJTlQ4ICopKFVJTlROKVZhcmlhYmxlQmFzZSwgVmFs aWRCdWZmZXIsIChVSU5UTilDdXJyUHRyIC0NCiAgICA+IChVSU5UTilWYWxpZEJ1ZmZlcik7DQog ICAgPiArICAgICpMYXN0VmFyaWFibGVPZmZzZXQgPSAoVUlOVE4pQ3VyclB0ciAtIChVSU5UTilW YWxpZEJ1ZmZlcjsNCiAgICA+ICsgICAgaWYgKCFJc1ZvbGF0aWxlKSB7DQogICAgPiArICAgICAg Ly8NCiAgICA+ICsgICAgICAvLyBFbXVsYXRlZCBub24tdm9sYXRpbGUgdmFyaWFibGUgbW9kZS4N CiAgICA+ICsgICAgICAvLw0KICAgID4gKyAgICAgIG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+SHdF cnJWYXJpYWJsZVRvdGFsU2l6ZSAgICAgID0NCiAgICA+IEh3RXJyVmFyaWFibGVUb3RhbFNpemU7 DQogICAgPiArICAgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5Db21tb25WYXJpYWJsZVRvdGFs U2l6ZSAgICAgPQ0KICAgID4gQ29tbW9uVmFyaWFibGVUb3RhbFNpemU7DQogICAgPiArICAgICAg bVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5Db21tb25Vc2VyVmFyaWFibGVUb3RhbFNpemUgPQ0KICAg ID4gQ29tbW9uVXNlclZhcmlhYmxlVG90YWxTaXplOw0KICAgID4gKyAgICB9DQogICAgPiArDQog ICAgPiArICAgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KICAgID4gKyAgfSBlbHNlIHsNCiAgICA+ ICsgICAgLy8NCiAgICA+ICsgICAgLy8gSWYgbm9uLXZvbGF0aWxlIHZhcmlhYmxlIHN0b3JlLCBw ZXJmb3JtIEZUVyBoZXJlLg0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICBTdGF0dXMgPSBGdHdW YXJpYWJsZVNwYWNlICgNCiAgICA+ICsgICAgICAgICAgICAgICBWYXJpYWJsZUJhc2UsDQogICAg PiArICAgICAgICAgICAgICAgKFZBUklBQkxFX1NUT1JFX0hFQURFUiAqKVZhbGlkQnVmZmVyDQog ICAgPiArICAgICAgICAgICAgICAgKTsNCiAgICA+ICsgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1 cykpIHsNCiAgICA+ICsgICAgICAqTGFzdFZhcmlhYmxlT2Zmc2V0ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA9IChVSU5UTilDdXJyUHRyIC0gKFVJTlROKVZhbGlkQnVmZmVyOw0KICAg ID4gKyAgICAgIG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+SHdFcnJWYXJpYWJsZVRvdGFsU2l6ZSAg ICAgID0NCiAgICA+IEh3RXJyVmFyaWFibGVUb3RhbFNpemU7DQogICAgPiArICAgICAgbVZhcmlh YmxlTW9kdWxlR2xvYmFsLT5Db21tb25WYXJpYWJsZVRvdGFsU2l6ZSAgICAgPQ0KICAgID4gQ29t bW9uVmFyaWFibGVUb3RhbFNpemU7DQogICAgPiArICAgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFs LT5Db21tb25Vc2VyVmFyaWFibGVUb3RhbFNpemUgPQ0KICAgID4gQ29tbW9uVXNlclZhcmlhYmxl VG90YWxTaXplOw0KICAgID4gKyAgICB9IGVsc2Ugew0KICAgID4gKyAgICAgIG1WYXJpYWJsZU1v ZHVsZUdsb2JhbC0+SHdFcnJWYXJpYWJsZVRvdGFsU2l6ZSAgICAgID0gMDsNCiAgICA+ICsgICAg ICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPkNvbW1vblZhcmlhYmxlVG90YWxTaXplICAgICA9IDA7 DQogICAgPiArICAgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5Db21tb25Vc2VyVmFyaWFibGVU b3RhbFNpemUgPSAwOw0KICAgID4gKyAgICAgIFZhcmlhYmxlICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgID0gR2V0U3RhcnRQb2ludGVyDQogICAgPiAoKFZBUklBQkxF X1NUT1JFX0hFQURFUiAqKShVSU5UTilWYXJpYWJsZUJhc2UpOw0KICAgID4gKyAgICAgIHdoaWxl IChJc1ZhbGlkVmFyaWFibGVIZWFkZXIgKFZhcmlhYmxlLCBHZXRFbmRQb2ludGVyDQogICAgPiAo KFZBUklBQkxFX1NUT1JFX0hFQURFUiAqKShVSU5UTilWYXJpYWJsZUJhc2UpLCBBdXRoRm9ybWF0 KSkgew0KICAgID4gKyAgICAgICAgTmV4dFZhcmlhYmxlID0gR2V0TmV4dFZhcmlhYmxlUHRyIChW YXJpYWJsZSwgQXV0aEZvcm1hdCk7DQogICAgPiArICAgICAgICBWYXJpYWJsZVNpemUgPSAoVUlO VE4pTmV4dFZhcmlhYmxlIC0gKFVJTlROKVZhcmlhYmxlOw0KICAgID4gKyAgICAgICAgaWYgKChW YXJpYWJsZS0+QXR0cmlidXRlcyAmIEVGSV9WQVJJQUJMRV9IQVJEV0FSRV9FUlJPUl9SRUNPUkQp DQogICAgPiA9PSBFRklfVkFSSUFCTEVfSEFSRFdBUkVfRVJST1JfUkVDT1JEKSB7DQogICAgPiAr ICAgICAgICAgIG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+SHdFcnJWYXJpYWJsZVRvdGFsU2l6ZSAr PSBWYXJpYWJsZVNpemU7DQogICAgPiArICAgICAgICB9IGVsc2UgaWYgKChWYXJpYWJsZS0+QXR0 cmlidXRlcyAmDQogICAgPiBFRklfVkFSSUFCTEVfSEFSRFdBUkVfRVJST1JfUkVDT1JEKSAhPQ0K ICAgID4gRUZJX1ZBUklBQkxFX0hBUkRXQVJFX0VSUk9SX1JFQ09SRCkgew0KICAgID4gKyAgICAg ICAgICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPkNvbW1vblZhcmlhYmxlVG90YWxTaXplICs9IFZh cmlhYmxlU2l6ZTsNCiAgICA+ICsgICAgICAgICAgaWYgKElzVXNlclZhcmlhYmxlIChWYXJpYWJs ZSkpIHsNCiAgICA+ICsgICAgICAgICAgICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPkNvbW1vblVz ZXJWYXJpYWJsZVRvdGFsU2l6ZSArPQ0KICAgID4gVmFyaWFibGVTaXplOw0KICAgID4gKyAgICAg ICAgICB9DQogICAgPiArICAgICAgICB9DQogICAgPiArDQogICAgPiArICAgICAgICBWYXJpYWJs ZSA9IE5leHRWYXJpYWJsZTsNCiAgICA+ICsgICAgICB9DQogICAgPiArDQogICAgPiArICAgICAg Kkxhc3RWYXJpYWJsZU9mZnNldCA9IChVSU5UTilWYXJpYWJsZSAtIChVSU5UTilWYXJpYWJsZUJh c2U7DQogICAgPiArICAgIH0NCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICtEb25lOg0KICAg ID4gKyAgRG9uZVN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KICAgID4gKyAgaWYgKElzVm9sYXRpbGUg fHwgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5FbXVOdk1vZGUpIHsNCiAg ICA+ICsgICAgRG9uZVN0YXR1cyA9IFN5bmNocm9uaXplUnVudGltZVZhcmlhYmxlQ2FjaGUgKA0K ICAgID4gKyAgICAgICAgICAgICAgICAgICAmbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KICAgID4g PlZhcmlhYmxlR2xvYmFsLlZhcmlhYmxlUnVudGltZUNhY2hlQ29udGV4dC5WYXJpYWJsZVJ1bnRp bWVWb2xhdGlsZUNhY2hlLA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAwLA0KICAgID4gKyAg ICAgICAgICAgICAgICAgICBWYXJpYWJsZVN0b3JlSGVhZGVyLT5TaXplDQogICAgPiArICAgICAg ICAgICAgICAgICAgICk7DQogICAgPiArICAgIEFTU0VSVF9FRklfRVJST1IgKERvbmVTdGF0dXMp Ow0KICAgID4gKyAgICBGcmVlUG9vbCAoVmFsaWRCdWZmZXIpOw0KICAgID4gKyAgfSBlbHNlIHsN CiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgLy8gRm9yIE5WIHZhcmlhYmxlIHJlY2xhaW0sIHdl IHVzZSBtTnZWYXJpYWJsZUNhY2hlIGFzIHRoZSBidWZmZXIsIHNvIGNvcHkNCiAgICA+IHRoZSBk YXRhIGJhY2suDQogICAgPiArICAgIC8vDQogICAgPiArICAgIENvcHlNZW0gKG1OdlZhcmlhYmxl Q2FjaGUsIChVSU5UOCAqKShVSU5UTilWYXJpYWJsZUJhc2UsDQogICAgPiBWYXJpYWJsZVN0b3Jl SGVhZGVyLT5TaXplKTsNCiAgICA+ICsgICAgRG9uZVN0YXR1cyA9IFN5bmNocm9uaXplUnVudGlt ZVZhcmlhYmxlQ2FjaGUgKA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAmbVZhcmlhYmxlTW9k dWxlR2xvYmFsLQ0KICAgID4gPlZhcmlhYmxlR2xvYmFsLlZhcmlhYmxlUnVudGltZUNhY2hlQ29u dGV4dC5WYXJpYWJsZVJ1bnRpbWVOdkNhY2hlLA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAw LA0KICAgID4gKyAgICAgICAgICAgICAgICAgICBWYXJpYWJsZVN0b3JlSGVhZGVyLT5TaXplDQog ICAgPiArICAgICAgICAgICAgICAgICAgICk7DQogICAgPiArICAgIEFTU0VSVF9FRklfRVJST1Ig KERvbmVTdGF0dXMpOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgaWYgKCFFRklfRVJS T1IgKFN0YXR1cykgJiYgRUZJX0VSUk9SIChEb25lU3RhdHVzKSkgew0KICAgID4gKyAgICBTdGF0 dXMgPSBEb25lU3RhdHVzOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgcmV0dXJuIFN0 YXR1czsNCiAgICA+ICt9DQogICAgPiBkaWZmIC0tZ2l0DQogICAgPiBhL01kZU1vZHVsZVBrZy9V bml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvUnVudGltZUR4ZVVuaXRUDQog ICAgPiBlc3QvVmFyaWFibGVMb2NrUmVxdWVzdFRvTG9ja1VuaXRUZXN0LmMNCiAgICA+IGIvTWRl TW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9SdW50aW1l RHhlVW5pdFQNCiAgICA+IGVzdC9WYXJpYWJsZUxvY2tSZXF1ZXN0VG9Mb2NrVW5pdFRlc3QuYw0K ICAgID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICA+IGluZGV4IDAwMDAwMDAwMDAwMC4uYjJi Y2I5NzkzMmJhDQogICAgPiAtLS0gL2Rldi9udWxsDQogICAgPiArKysNCiAgICA+IGIvTWRlTW9k dWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9SdW50aW1lRHhl VW5pdFQNCiAgICA+IGVzdC9WYXJpYWJsZUxvY2tSZXF1ZXN0VG9Mb2NrVW5pdFRlc3QuYw0KICAg ID4gQEAgLTAsMCArMSw2MDcgQEANCiAgICA+ICsvKiogQGZpbGUNCiAgICA+ICsgIFRoaXMgaXMg YSBob3N0LWJhc2VkIHVuaXQgdGVzdCBmb3IgdGhlIFZhcmlhYmxlTG9ja1JlcXVlc3RUb0xvY2sg c2hpbS4NCiAgICA+ICsNCiAgICA+ICsgIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0 aW9uLg0KICAgID4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRl bnQNCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICsNCiAgICA+ICsjaW5jbHVkZSA8c3RkaW8u aD4NCiAgICA+ICsjaW5jbHVkZSA8c3RyaW5nLmg+DQogICAgPiArI2luY2x1ZGUgPHN0ZGFyZy5o Pg0KICAgID4gKyNpbmNsdWRlIDxzdGRkZWYuaD4NCiAgICA+ICsjaW5jbHVkZSA8c2V0am1wLmg+ DQogICAgPiArI2luY2x1ZGUgPGNtb2NrYS5oPg0KICAgID4gKw0KICAgID4gKyNpbmNsdWRlIDxV ZWZpLmg+DQogICAgPiArI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCiAgICA+ICsjaW5j bHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+DQogICAgPiArI2luY2x1ZGUgPExpYnJhcnkv TWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0KICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VuaXRUZXN0 TGliLmg+DQogICAgPiArI2luY2x1ZGUgPExpYnJhcnkvVmFyaWFibGVQb2xpY3lMaWIuaD4NCiAg ICA+ICsjaW5jbHVkZSA8TGlicmFyeS9WYXJpYWJsZVBvbGljeUhlbHBlckxpYi5oPg0KICAgID4g Kw0KICAgID4gKyNpbmNsdWRlIDxQcm90b2NvbC9WYXJpYWJsZUxvY2suaD4NCiAgICA+ICsNCiAg ICA+ICsjZGVmaW5lIFVOSVRfVEVTVF9OQU1FICAgICAiVmFyUG9sL1ZhckxvY2sgU2hpbSBVbml0 IFRlc3QiDQogICAgPiArI2RlZmluZSBVTklUX1RFU1RfVkVSU0lPTiAgIjEuMCINCiAgICA+ICsN CiAgICA+ICsvLy8gPT09IENPREUgVU5ERVIgVEVTVA0KICAgID4gPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgICA+ID09 PT09PT09PT0NCiAgICA+ICsNCiAgICA+ICtFRklfU1RBVFVTDQogICAgPiArRUZJQVBJDQogICAg PiArVmFyaWFibGVMb2NrUmVxdWVzdFRvTG9jayAoDQogICAgPiArICBJTiBDT05TVCBFREtJSV9W QVJJQUJMRV9MT0NLX1BST1RPQ09MICAqVGhpcywNCiAgICA+ICsgIElOICAgICAgIENIQVIxNiAg ICAgICAgICAgICAgICAgICAgICAgICpWYXJpYWJsZU5hbWUsDQogICAgPiArICBJTiAgICAgICBF RklfR1VJRCAgICAgICAgICAgICAgICAgICAgICAqVmVuZG9yR3VpZA0KICAgID4gKyAgKTsNCiAg ICA+ICsNCiAgICA+ICsvLy8gPT09IFRFU1QgREFUQQ0KICAgID4gPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgICA+ID09 PT09PT09PT09PT09PT09DQogICAgPiArDQogICAgPiArLy8NCiAgICA+ICsvLyBUZXN0IEdVSUQg MSB7Rjk1NUJBMkQtNEEyQy00ODBDLUJGRDEtM0NDNTIyNjEwNTkyfQ0KICAgID4gKy8vDQogICAg PiArRUZJX0dVSUQgIG1UZXN0R3VpZDEgPSB7DQogICAgPiArICAweGY5NTViYTJkLCAweDRhMmMs IDB4NDgwYywgeyAweGJmLCAweGQxLCAweDNjLCAweGM1LCAweDIyLCAweDYxLCAweDUsIDB4OTIg fQ0KICAgID4gK307DQogICAgPiArDQogICAgPiArLy8NCiAgICA+ICsvLyBUZXN0IEdVSUQgMiB7 MkRFQTc5OUUtNUU3My00M0I5LTg3MEUtQzk0NUNFODJBRjNBfQ0KICAgID4gKy8vDQogICAgPiAr RUZJX0dVSUQgIG1UZXN0R3VpZDIgPSB7DQogICAgPiArICAweDJkZWE3OTllLCAweDVlNzMsIDB4 NDNiOSwgeyAweDg3LCAweGUsIDB4YzksIDB4NDUsIDB4Y2UsIDB4ODIsIDB4YWYsIDB4M2EgfQ0K ICAgID4gK307DQogICAgPiArDQogICAgPiArLy8NCiAgICA+ICsvLyBUZXN0IEdVSUQgMyB7Njk4 QTJCRkQtQTYxNi00ODJELUI4OEMtNzEwMEJENjY4MkE5fQ0KICAgID4gKy8vDQogICAgPiArRUZJ X0dVSUQgIG1UZXN0R3VpZDMgPSB7DQogICAgPiArICAweDY5OGEyYmZkLCAweGE2MTYsIDB4NDgy ZCwgeyAweGI4LCAweDhjLCAweDcxLCAweDAsIDB4YmQsIDB4NjYsIDB4ODIsIDB4YTkgfQ0KICAg ID4gK307DQogICAgPiArDQogICAgPiArI2RlZmluZSBURVNUX1ZBUl8xX05BTUUgIEwiVGVzdFZh cjEiDQogICAgPiArI2RlZmluZSBURVNUX1ZBUl8yX05BTUUgIEwiVGVzdFZhcjIiDQogICAgPiAr I2RlZmluZSBURVNUX1ZBUl8zX05BTUUgIEwiVGVzdFZhcjMiDQogICAgPiArDQogICAgPiArI2Rl ZmluZSBURVNUX1BPTElDWV9BVFRSSUJVVEVTX05VTEwgIDANCiAgICA+ICsjZGVmaW5lIFRFU1Rf UE9MSUNZX01JTl9TSVpFX05VTEwgICAgMA0KICAgID4gKyNkZWZpbmUgVEVTVF9QT0xJQ1lfTUFY X1NJWkVfTlVMTCAgICBNQVhfVUlOVDMyDQogICAgPiArDQogICAgPiArI2RlZmluZSBURVNUX1BP TElDWV9NSU5fU0laRV8xMCAgIDEwDQogICAgPiArI2RlZmluZSBURVNUX1BPTElDWV9NQVhfU0la RV8yMDAgIDIwMA0KICAgID4gKw0KICAgID4gKy8vLyA9PT0gSEVMUEVSIEZVTkNUSU9OUw0KICAg ID4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0NCiAgICA+ID09PT09PT09PT0NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ ICsgIE1vY2tlZCB2ZXJzaW9uIG9mIEdldFZhcmlhYmxlLCBmb3IgdGVzdGluZy4NCiAgICA+ICsN CiAgICA+ICsgIEBwYXJhbSAgVmFyaWFibGVOYW1lDQogICAgPiArICBAcGFyYW0gIFZlbmRvckd1 aWQNCiAgICA+ICsgIEBwYXJhbSAgQXR0cmlidXRlcw0KICAgID4gKyAgQHBhcmFtICBEYXRhU2l6 ZQ0KICAgID4gKyAgQHBhcmFtICBEYXRhDQogICAgPiArKiovDQogICAgPiArRUZJX1NUQVRVUw0K ICAgID4gK0VGSUFQSQ0KICAgID4gK1N0dWJHZXRWYXJpYWJsZU51bGwgKA0KICAgID4gKyAgSU4g ICAgIENIQVIxNiAgICAqVmFyaWFibGVOYW1lLA0KICAgID4gKyAgSU4gICAgIEVGSV9HVUlEICAq VmVuZG9yR3VpZCwNCiAgICA+ICsgIE9VVCAgICBVSU5UMzIgICAgKkF0dHJpYnV0ZXMgICBPUFRJ T05BTCwNCiAgICA+ICsgIElOIE9VVCBVSU5UTiAgICAgKkRhdGFTaXplLA0KICAgID4gKyAgT1VU ICAgIFZPSUQgICAgICAqRGF0YSAgICAgICAgIE9QVElPTkFMDQogICAgPiArICApDQogICAgPiAr ew0KICAgID4gKyAgVUlOVDMyICAgICAgTW9ja2VkQXR0cjsNCiAgICA+ICsgIFVJTlROICAgICAg IE1vY2tlZERhdGFTaXplOw0KICAgID4gKyAgVk9JRCAgICAgICAgKk1vY2tlZERhdGE7DQogICAg PiArICBFRklfU1RBVFVTICBNb2NrZWRSZXR1cm47DQogICAgPiArDQogICAgPiArICBjaGVja19l eHBlY3RlZF9wdHIgKFZhcmlhYmxlTmFtZSk7DQogICAgPiArICBjaGVja19leHBlY3RlZF9wdHIg KFZlbmRvckd1aWQpOw0KICAgID4gKyAgY2hlY2tfZXhwZWN0ZWRfcHRyIChEYXRhU2l6ZSk7DQog ICAgPiArDQogICAgPiArICBNb2NrZWRBdHRyICAgICA9IChVSU5UMzIpbW9jayAoKTsNCiAgICA+ ICsgIE1vY2tlZERhdGFTaXplID0gKFVJTlROKW1vY2sgKCk7DQogICAgPiArICBNb2NrZWREYXRh ICAgICA9IChWT0lEICopKFVJTlROKW1vY2sgKCk7DQogICAgPiArICBNb2NrZWRSZXR1cm4gICA9 IChFRklfU1RBVFVTKW1vY2sgKCk7DQogICAgPiArDQogICAgPiArICBpZiAoQXR0cmlidXRlcyAh PSBOVUxMKSB7DQogICAgPiArICAgICpBdHRyaWJ1dGVzID0gTW9ja2VkQXR0cjsNCiAgICA+ICsg IH0NCiAgICA+ICsNCiAgICA+ICsgIGlmICgoRGF0YSAhPSBOVUxMKSAmJiAhRUZJX0VSUk9SIChN b2NrZWRSZXR1cm4pKSB7DQogICAgPiArICAgIENvcHlNZW0gKERhdGEsIE1vY2tlZERhdGEsIE1v Y2tlZERhdGFTaXplKTsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgICpEYXRhU2l6ZSA9 IE1vY2tlZERhdGFTaXplOw0KICAgID4gKw0KICAgID4gKyAgcmV0dXJuIE1vY2tlZFJldHVybjsN CiAgICA+ICt9DQogICAgPiArDQogICAgPiArLy8NCiAgICA+ICsvLyBBbnl0aGluZyB5b3UgdGhp bmsgbWlnaHQgYmUgaGVscGZ1bCB0aGF0IGlzbid0IGEgdGVzdCBpdHNlbGYuDQogICAgPiArLy8N CiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIFRoaXMgaXMgYSBjb21tb24gc2V0dXAgZnVu Y3Rpb24gdGhhdCB3aWxsIGVuc3VyZSB0aGUgbGlicmFyeSBpcyBhbHdheXMNCiAgICA+ICsgIGlu aXRpYWxpemVkIHdpdGggdGhlIHN0dWJiZWQgR2V0VmFyaWFibGUuDQogICAgPiArDQogICAgPiAr ICBOb3QgdXNlZCBieSBhbGwgdGVzdCBjYXNlcywgYnV0IGJ5IG1vc3QuDQogICAgPiArDQogICAg PiArICBAcGFyYW1baW5dICBDb250ZXh0ICBVbml0IHRlc3QgY2FzZSBjb250ZXh0DQogICAgPiAr KiovDQogICAgPiArU1RBVElDDQogICAgPiArVU5JVF9URVNUX1NUQVRVUw0KICAgID4gK0VGSUFQ SQ0KICAgID4gK0xpYkluaXRNb2NrZWQgKA0KICAgID4gKyAgSU4gVU5JVF9URVNUX0NPTlRFWFQg IENvbnRleHQNCiAgICA+ICsgICkNCiAgICA+ICt7DQogICAgPiArICByZXR1cm4gRUZJX0VSUk9S IChJbml0VmFyaWFibGVQb2xpY3lMaWIgKFN0dWJHZXRWYXJpYWJsZU51bGwpKSA/DQogICAgPiBV TklUX1RFU1RfRVJST1JfUFJFUkVRVUlTSVRFX05PVF9NRVQgOiBVTklUX1RFU1RfUEFTU0VEOw0K ICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIENvbW1vbiBjbGVhbnVwIGZ1 bmN0aW9uIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBsaWJyYXJ5IGlzIGFsd2F5cyBkZS1pbml0aWFs aXplZA0KICAgID4gKyAgcHJpb3IgdG8gdGhlIG5leHQgdGVzdCBjYXNlLg0KICAgID4gKw0KICAg ID4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAgVW5pdCB0ZXN0IGNhc2UgY29udGV4dA0KICAgID4g KyoqLw0KICAgID4gK1NUQVRJQw0KICAgID4gK1ZPSUQNCiAgICA+ICtFRklBUEkNCiAgICA+ICtM aWJDbGVhbnVwICgNCiAgICA+ICsgIElOIFVOSVRfVEVTVF9DT05URVhUICBDb250ZXh0DQogICAg PiArICApDQogICAgPiArew0KICAgID4gKyAgRGVpbml0VmFyaWFibGVQb2xpY3lMaWIgKCk7DQog ICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8vLyA9PT0gVEVTVCBDQVNFUw0KICAgID4gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0NCiAgICA+ID09PT09PT09PT09PT09PT0NCiAgICA+ICsNCiAgICA+ICsvLy8gPT09PT0gU0hJ TSBTVUlURQ0KICAgID4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIFRlc3QgQ2Fz ZSB0aGF0IGxvY2tzIGEgc2luZ2xlIHZhcmlhYmxlIHVzaW5nIHRoZSBWYXJpYWJsZSBMb2NrIFBy b3RvY29sLg0KICAgID4gKyAgVGhlIGNhbGwgaXMgZXhwZWN0ZWQgdG8gc3VjY2VlZC4NCiAgICA+ ICsNCiAgICA+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgIFVuaXQgdGVzdCBjYXNlIGNvbnRleHQN CiAgICA+ICsqKi8NCiAgICA+ICtVTklUX1RFU1RfU1RBVFVTDQogICAgPiArRUZJQVBJDQogICAg PiArTG9ja2luZ1dpdGhvdXRBbnlQb2xpY2llc1Nob3VsZFN1Y2NlZWQgKA0KICAgID4gKyAgSU4g VU5JVF9URVNUX0NPTlRFWFQgIENvbnRleHQNCiAgICA+ICsgICkNCiAgICA+ICt7DQogICAgPiAr ICBFRklfU1RBVFVTICBTdGF0dXM7DQogICAgPiArDQogICAgPiArICBTdGF0dXMgPSBWYXJpYWJs ZUxvY2tSZXF1ZXN0VG9Mb2NrIChOVUxMLCBURVNUX1ZBUl8xX05BTUUsDQogICAgPiAmbVRlc3RH dWlkMSk7DQogICAgPiArICBVVF9BU1NFUlRfTk9UX0VGSV9FUlJPUiAoU3RhdHVzKTsNCiAgICA+ ICsNCiAgICA+ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KICAgID4gK30NCiAgICA+ICsN CiAgICA+ICsvKioNCiAgICA+ICsgIFRlc3QgQ2FzZSB0aGF0IGxvY2tzIHRoZSBzYW1lIHZhcmlh YmxlIHR3aWNlIHVzaW5nIHRoZSBWYXJpYWJsZSBMb2NrIFByb3RvY29sLg0KICAgID4gKyAgQm90 aCBjYWxscyBhcmUgZXhwZWN0ZWQgdG8gc3VjY2VlZC4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJh bVtpbl0gIENvbnRleHQgIFVuaXQgdGVzdCBjYXNlIGNvbnRleHQNCiAgICA+ICsgICoqLw0KICAg ID4gK1VOSVRfVEVTVF9TVEFUVVMNCiAgICA+ICtFRklBUEkNCiAgICA+ICtMb2NraW5nVHdpY2VT aG91bGRTdWNjZWVkICgNCiAgICA+ICsgIElOIFVOSVRfVEVTVF9DT05URVhUICBDb250ZXh0DQog ICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KICAgID4g Kw0KICAgID4gKyAgU3RhdHVzID0gVmFyaWFibGVMb2NrUmVxdWVzdFRvTG9jayAoTlVMTCwgVEVT VF9WQVJfMV9OQU1FLA0KICAgID4gJm1UZXN0R3VpZDEpOw0KICAgID4gKyAgVVRfQVNTRVJUX05P VF9FRklfRVJST1IgKFN0YXR1cyk7DQogICAgPiArDQogICAgPiArICBTdGF0dXMgPSBWYXJpYWJs ZUxvY2tSZXF1ZXN0VG9Mb2NrIChOVUxMLCBURVNUX1ZBUl8xX05BTUUsDQogICAgPiAmbVRlc3RH dWlkMSk7DQogICAgPiArICBVVF9BU1NFUlRfTk9UX0VGSV9FUlJPUiAoU3RhdHVzKTsNCiAgICA+ ICsNCiAgICA+ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KICAgID4gK30NCiAgICA+ICsN CiAgICA+ICsvKioNCiAgICA+ICsgIFRlc3QgQ2FzZSB0aGF0IGxvY2tzIGEgdmFyaWFibGUgdXNp bmcgdGhlIFZhcmlhYmxlIFBvbGljeSBQcm90b2NvbCB0aGVuIGxvY2tzDQogICAgPiArICB0aGUg c2FtZSB2YXJpYWJsZSB1c2luZyB0aGUgVmFyaWFibGUgTG9jayBQcm90b2NvbC4NCiAgICA+ICsg IEJvdGggY2FsbHMgYXJlIGV4cGVjdGVkIHRvIHN1Y2NlZWQuDQogICAgPiArDQogICAgPiArICBA cGFyYW1baW5dICBDb250ZXh0ICBVbml0IHRlc3QgY2FzZSBjb250ZXh0DQogICAgPiArICAqKi8N CiAgICA+ICtVTklUX1RFU1RfU1RBVFVTDQogICAgPiArRUZJQVBJDQogICAgPiArTG9ja2luZ0FM b2NrZWRWYXJpYWJsZVNob3VsZFN1Y2NlZWQgKA0KICAgID4gKyAgSU4gVU5JVF9URVNUX0NPTlRF WFQgIENvbnRleHQNCiAgICA+ICsgICkNCiAgICA+ICt7DQogICAgPiArICBFRklfU1RBVFVTICAg ICAgICAgICAgIFN0YXR1czsNCiAgICA+ICsgIFZBUklBQkxFX1BPTElDWV9FTlRSWSAgKk5ld0Vu dHJ5Ow0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIENyZWF0ZSBhIHZhcmlhYmxl IHBvbGljeSB0aGF0IGxvY2tzIHRoZSB2YXJpYWJsZS4NCiAgICA+ICsgIC8vDQogICAgPiArICBT dGF0dXMgPSBDcmVhdGVCYXNpY1ZhcmlhYmxlUG9saWN5ICgNCiAgICA+ICsgICAgICAgICAgICAg Jm1UZXN0R3VpZDEsDQogICAgPiArICAgICAgICAgICAgIFRFU1RfVkFSXzFfTkFNRSwNCiAgICA+ ICsgICAgICAgICAgICAgVEVTVF9QT0xJQ1lfTUlOX1NJWkVfTlVMTCwNCiAgICA+ICsgICAgICAg ICAgICAgVEVTVF9QT0xJQ1lfTUFYX1NJWkVfMjAwLA0KICAgID4gKyAgICAgICAgICAgICBURVNU X1BPTElDWV9BVFRSSUJVVEVTX05VTEwsDQogICAgPiArICAgICAgICAgICAgIFRFU1RfUE9MSUNZ X0FUVFJJQlVURVNfTlVMTCwNCiAgICA+ICsgICAgICAgICAgICAgVkFSSUFCTEVfUE9MSUNZX1RZ UEVfTE9DS19OT1csDQogICAgPiArICAgICAgICAgICAgICZOZXdFbnRyeQ0KICAgID4gKyAgICAg ICAgICAgICApOw0KICAgID4gKyAgVVRfQVNTRVJUX05PVF9FRklfRVJST1IgKFN0YXR1cyk7DQog ICAgPiArDQogICAgPiArICAvLw0KICAgID4gKyAgLy8gUmVnaXN0ZXIgdGhlIG5ldyBwb2xpY3ku DQogICAgPiArICAvLw0KICAgID4gKyAgU3RhdHVzID0gUmVnaXN0ZXJWYXJpYWJsZVBvbGljeSAo TmV3RW50cnkpOw0KICAgID4gKw0KICAgID4gKyAgU3RhdHVzID0gVmFyaWFibGVMb2NrUmVxdWVz dFRvTG9jayAoTlVMTCwgVEVTVF9WQVJfMV9OQU1FLA0KICAgID4gJm1UZXN0R3VpZDEpOw0KICAg ID4gKyAgVVRfQVNTRVJUX05PVF9FRklfRVJST1IgKFN0YXR1cyk7DQogICAgPiArDQogICAgPiAr ICBGcmVlUG9vbCAoTmV3RW50cnkpOw0KICAgID4gKw0KICAgID4gKyAgcmV0dXJuIFVOSVRfVEVT VF9QQVNTRUQ7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgVGVzdCBD YXNlIHRoYXQgbG9ja3MgYSB2YXJpYWJsZSB1c2luZyB0aGUgVmFyaWFibGUgUG9saWN5IFByb3Rv Y29sIHdpdGggYQ0KICAgID4gKyAgcG9saWN5IG90aGVyIHRoYW4gTE9DS19OT1cgdGhlbiBhdHRl bXB0cyB0byBsb2NrIHRoZSBzYW1lIHZhcmlhYmxlIHVzaW5nDQogICAgPiB0aGUNCiAgICA+ICsg IFZhcmlhYmxlIExvY2sgUHJvdG9jb2wuICBUaGUgY2FsbCB0byBWYXJpYWJsZSBQb2xpY3kgaXMg ZXhwZWN0ZWQgdG8gc3VjY2VlZA0KICAgID4gKyAgYW5kIHRoZSBjYWxsIHRvIFZhcmlhYmxlIExv Y2sgaXMgZXhwZWN0ZWQgdG8gZmFpbC4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbVtpbl0gIENv bnRleHQgIFVuaXQgdGVzdCBjYXNlIGNvbnRleHQNCiAgICA+ICsgICoqLw0KICAgID4gK1VOSVRf VEVTVF9TVEFUVVMNCiAgICA+ICtFRklBUEkNCiAgICA+ICtMb2NraW5nQW5VbmxvY2tlZFZhcmlh YmxlU2hvdWxkRmFpbCAoDQogICAgPiArICBJTiBVTklUX1RFU1RfQ09OVEVYVCAgQ29udGV4dA0K ICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgU3Rh dHVzOw0KICAgID4gKyAgVkFSSUFCTEVfUE9MSUNZX0VOVFJZICAqTmV3RW50cnk7DQogICAgPiAr DQogICAgPiArICAvLyBDcmVhdGUgYSB2YXJpYWJsZSBwb2xpY3kgdGhhdCBsb2NrcyB0aGUgdmFy aWFibGUuDQogICAgPiArICBTdGF0dXMgPSBDcmVhdGVWYXJTdGF0ZVZhcmlhYmxlUG9saWN5ICgN CiAgICA+ICsgICAgICAgICAgICAgJm1UZXN0R3VpZDEsDQogICAgPiArICAgICAgICAgICAgIFRF U1RfVkFSXzFfTkFNRSwNCiAgICA+ICsgICAgICAgICAgICAgVEVTVF9QT0xJQ1lfTUlOX1NJWkVf TlVMTCwNCiAgICA+ICsgICAgICAgICAgICAgVEVTVF9QT0xJQ1lfTUFYX1NJWkVfMjAwLA0KICAg ID4gKyAgICAgICAgICAgICBURVNUX1BPTElDWV9BVFRSSUJVVEVTX05VTEwsDQogICAgPiArICAg ICAgICAgICAgIFRFU1RfUE9MSUNZX0FUVFJJQlVURVNfTlVMTCwNCiAgICA+ICsgICAgICAgICAg ICAgJm1UZXN0R3VpZDIsDQogICAgPiArICAgICAgICAgICAgIDEsDQogICAgPiArICAgICAgICAg ICAgIFRFU1RfVkFSXzJfTkFNRSwNCiAgICA+ICsgICAgICAgICAgICAgJk5ld0VudHJ5DQogICAg PiArICAgICAgICAgICAgICk7DQogICAgPiArICBVVF9BU1NFUlRfTk9UX0VGSV9FUlJPUiAoU3Rh dHVzKTsNCiAgICA+ICsNCiAgICA+ICsgIC8vIFJlZ2lzdGVyIHRoZSBuZXcgcG9saWN5Lg0KICAg ID4gKyAgU3RhdHVzID0gUmVnaXN0ZXJWYXJpYWJsZVBvbGljeSAoTmV3RW50cnkpOw0KICAgID4g Kw0KICAgID4gKyAgLy8gQ29uZmlndXJlIHRoZSBzdHViIHRvIG5vdCBjYXJlIGFib3V0IHBhcmFt ZXRlcnMuIFdlJ3JlIHRlc3RpbmcgZXJyb3JzLg0KICAgID4gKyAgZXhwZWN0X2FueV9hbHdheXMg KFN0dWJHZXRWYXJpYWJsZU51bGwsIFZhcmlhYmxlTmFtZSk7DQogICAgPiArICBleHBlY3RfYW55 X2Fsd2F5cyAoU3R1YkdldFZhcmlhYmxlTnVsbCwgVmVuZG9yR3VpZCk7DQogICAgPiArICBleHBl Y3RfYW55X2Fsd2F5cyAoU3R1YkdldFZhcmlhYmxlTnVsbCwgRGF0YVNpemUpOw0KICAgID4gKw0K ICAgID4gKyAgLy8gV2l0aCBhIHBvbGljeSwgbWFrZSBzdXJlIHRoYXQgd3JpdGVzIHN0aWxsIHdv cmssIHNpbmNlIHRoZSB2YXJpYWJsZSBkb2Vzbid0DQogICAgPiBleGlzdC4NCiAgICA+ICsgIHdp bGxfcmV0dXJuIChTdHViR2V0VmFyaWFibGVOdWxsLCBURVNUX1BPTElDWV9BVFRSSUJVVEVTX05V TEwpOyAgICAgLy8NCiAgICA+IEF0dHJpYnV0ZXMNCiAgICA+ICsgIHdpbGxfcmV0dXJuIChTdHVi R2V0VmFyaWFibGVOdWxsLCAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2l6 ZQ0KICAgID4gKyAgd2lsbF9yZXR1cm4gKFN0dWJHZXRWYXJpYWJsZU51bGwsIChVSU5UTilOVUxM KTsgICAgICAgICAgICAgICAgICAgICAvLyBEYXRhUHRyDQogICAgPiArICB3aWxsX3JldHVybiAo U3R1YkdldFZhcmlhYmxlTnVsbCwgRUZJX05PVF9GT1VORCk7ICAgICAgICAgICAgICAgICAgIC8v IFN0YXR1cw0KICAgID4gKw0KICAgID4gKyAgU3RhdHVzID0gVmFyaWFibGVMb2NrUmVxdWVzdFRv TG9jayAoTlVMTCwgVEVTVF9WQVJfMV9OQU1FLA0KICAgID4gJm1UZXN0R3VpZDEpOw0KICAgID4g KyAgVVRfQVNTRVJUX1RSVUUgKEVGSV9FUlJPUiAoU3RhdHVzKSk7DQogICAgPiArDQogICAgPiAr ICBGcmVlUG9vbCAoTmV3RW50cnkpOw0KICAgID4gKw0KICAgID4gKyAgcmV0dXJuIFVOSVRfVEVT VF9QQVNTRUQ7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgVGVzdCBD YXNlIHRoYXQgbG9ja3MgYSB2YXJpYWJsZSB1c2luZyB0aGUgVmFyaWFibGUgUG9saWN5IFByb3Rv Y29sIHdpdGggYQ0KICAgID4gKyAgcG9saWN5IG90aGVyIHRoYW4gTE9DS19OT1csIGJ1dCBpcyBj dXJyZW50bHkgbG9ja2VkLiAgVGhlbiBhdHRlbXB0cyB0byBsb2NrDQogICAgPiArICB0aGUgc2Ft ZSB2YXJpYWJsZSB1c2luZyB0aGUgVmFyaWFibGUgTG9jayBQcm90b2NvbC4gIFRoZSBjYWxsIHRv IFZhcmlhYmxlDQogICAgPiArICBQb2xpY3kgaXMgZXhwZWN0ZWQgdG8gc3VjY2VlZCBhbmQgdGhl IGNhbGwgdG8gVmFyaWFibGUgTG9jayBhbHNvIGV4cGVjdGVkIHRvDQogICAgPiArICBzdWNjZWVk Lg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAgVW5pdCB0ZXN0IGNhc2Ug Y29udGV4dA0KICAgID4gKyAgKiovDQogICAgPiArVU5JVF9URVNUX1NUQVRVUw0KICAgID4gK0VG SUFQSQ0KICAgID4gK0xvY2tpbmdBTG9ja2VkVmFyaWFibGVXaXRoTWF0Y2hpbmdEYXRhU2hvdWxk U3VjY2VlZCAoDQogICAgPiArICBJTiBVTklUX1RFU1RfQ09OVEVYVCAgQ29udGV4dA0KICAgID4g KyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgU3RhdHVzOw0K ICAgID4gKyAgVkFSSUFCTEVfUE9MSUNZX0VOVFJZICAqTmV3RW50cnk7DQogICAgPiArICBVSU5U OCAgICAgICAgICAgICAgICAgIERhdGE7DQogICAgPiArDQogICAgPiArICAvLyBDcmVhdGUgYSB2 YXJpYWJsZSBwb2xpY3kgdGhhdCBsb2NrcyB0aGUgdmFyaWFibGUuDQogICAgPiArICBTdGF0dXMg PSBDcmVhdGVWYXJTdGF0ZVZhcmlhYmxlUG9saWN5ICgNCiAgICA+ICsgICAgICAgICAgICAgJm1U ZXN0R3VpZDEsDQogICAgPiArICAgICAgICAgICAgIFRFU1RfVkFSXzFfTkFNRSwNCiAgICA+ICsg ICAgICAgICAgICAgVEVTVF9QT0xJQ1lfTUlOX1NJWkVfTlVMTCwNCiAgICA+ICsgICAgICAgICAg ICAgVEVTVF9QT0xJQ1lfTUFYX1NJWkVfMjAwLA0KICAgID4gKyAgICAgICAgICAgICBURVNUX1BP TElDWV9BVFRSSUJVVEVTX05VTEwsDQogICAgPiArICAgICAgICAgICAgIFRFU1RfUE9MSUNZX0FU VFJJQlVURVNfTlVMTCwNCiAgICA+ICsgICAgICAgICAgICAgJm1UZXN0R3VpZDIsDQogICAgPiAr ICAgICAgICAgICAgIDEsDQogICAgPiArICAgICAgICAgICAgIFRFU1RfVkFSXzJfTkFNRSwNCiAg ICA+ICsgICAgICAgICAgICAgJk5ld0VudHJ5DQogICAgPiArICAgICAgICAgICAgICk7DQogICAg PiArICBVVF9BU1NFUlRfTk9UX0VGSV9FUlJPUiAoU3RhdHVzKTsNCiAgICA+ICsNCiAgICA+ICsg IC8vIFJlZ2lzdGVyIHRoZSBuZXcgcG9saWN5Lg0KICAgID4gKyAgU3RhdHVzID0gUmVnaXN0ZXJW YXJpYWJsZVBvbGljeSAoTmV3RW50cnkpOw0KICAgID4gKw0KICAgID4gKyAgLy8gQ29uZmlndXJl IHRoZSBzdHViIHRvIG5vdCBjYXJlIGFib3V0IHBhcmFtZXRlcnMuIFdlJ3JlIHRlc3RpbmcgZXJy b3JzLg0KICAgID4gKyAgZXhwZWN0X2FueV9hbHdheXMgKFN0dWJHZXRWYXJpYWJsZU51bGwsIFZh cmlhYmxlTmFtZSk7DQogICAgPiArICBleHBlY3RfYW55X2Fsd2F5cyAoU3R1YkdldFZhcmlhYmxl TnVsbCwgVmVuZG9yR3VpZCk7DQogICAgPiArICBleHBlY3RfYW55X2Fsd2F5cyAoU3R1YkdldFZh cmlhYmxlTnVsbCwgRGF0YVNpemUpOw0KICAgID4gKw0KICAgID4gKyAgLy8gV2l0aCBhIHBvbGlj eSwgbWFrZSBzdXJlIHRoYXQgd3JpdGVzIHN0aWxsIHdvcmssIHNpbmNlIHRoZSB2YXJpYWJsZSBk b2Vzbid0DQogICAgPiBleGlzdC4NCiAgICA+ICsgIERhdGEgPSAxOw0KICAgID4gKyAgd2lsbF9y ZXR1cm4gKFN0dWJHZXRWYXJpYWJsZU51bGwsIFRFU1RfUE9MSUNZX0FUVFJJQlVURVNfTlVMTCk7 ICAgICAvLw0KICAgID4gQXR0cmlidXRlcw0KICAgID4gKyAgd2lsbF9yZXR1cm4gKFN0dWJHZXRW YXJpYWJsZU51bGwsIHNpemVvZiAoRGF0YSkpOyAgICAgICAgICAgICAgICAgICAvLyBTaXplDQog ICAgPiArICB3aWxsX3JldHVybiAoU3R1YkdldFZhcmlhYmxlTnVsbCwgKFVJTlROKSZEYXRhKTsg ICAgICAgICAgICAgICAgICAgIC8vIERhdGFQdHINCiAgICA+ICsgIHdpbGxfcmV0dXJuIChTdHVi R2V0VmFyaWFibGVOdWxsLCBFRklfU1VDQ0VTUyk7ICAgICAgICAgICAgICAgICAgICAgLy8gU3Rh dHVzDQogICAgPiArDQogICAgPiArICBTdGF0dXMgPSBWYXJpYWJsZUxvY2tSZXF1ZXN0VG9Mb2Nr IChOVUxMLCBURVNUX1ZBUl8xX05BTUUsDQogICAgPiAmbVRlc3RHdWlkMSk7DQogICAgPiArICBV VF9BU1NFUlRfVFJVRSAoIUVGSV9FUlJPUiAoU3RhdHVzKSk7DQogICAgPiArDQogICAgPiArICBG cmVlUG9vbCAoTmV3RW50cnkpOw0KICAgID4gKw0KICAgID4gKyAgcmV0dXJuIFVOSVRfVEVTVF9Q QVNTRUQ7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgVGVzdCBDYXNl IHRoYXQgbG9ja3MgYSB2YXJpYWJsZSB1c2luZyB0aGUgVmFyaWFibGUgUG9saWN5IFByb3RvY29s IHdpdGggYQ0KICAgID4gKyAgcG9saWN5IG90aGVyIHRoYW4gTE9DS19OT1csIGJ1dCB2YXJpYWJs ZSBkYXRhIGRvZXMgbm90IG1hdGNoLiAgVGhlbg0KICAgID4gYXR0ZW1wdHMNCiAgICA+ICsgIHRv IGxvY2sgdGhlIHNhbWUgdmFyaWFibGUgdXNpbmcgdGhlIFZhcmlhYmxlIExvY2sgUHJvdG9jb2wu ICBUaGUgY2FsbCB0bw0KICAgID4gKyAgVmFyaWFibGUgUG9saWN5IGlzIGV4cGVjdGVkIHRvIHN1 Y2NlZWQgYW5kIHRoZSBjYWxsIHRvIFZhcmlhYmxlIExvY2sgaXMNCiAgICA+ICsgIGV4cGVjdGVk IHRvIGZhaWwuDQogICAgPiArDQogICAgPiArICBAcGFyYW1baW5dICBDb250ZXh0ICBVbml0IHRl c3QgY2FzZSBjb250ZXh0DQogICAgPiArICAqKi8NCiAgICA+ICtVTklUX1RFU1RfU1RBVFVTDQog ICAgPiArRUZJQVBJDQogICAgPiArTG9ja2luZ0FMb2NrZWRWYXJpYWJsZVdpdGhOb25NYXRjaGlu Z0RhdGFTaG91bGRGYWlsICgNCiAgICA+ICsgIElOIFVOSVRfVEVTVF9DT05URVhUICBDb250ZXh0 DQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICBT dGF0dXM7DQogICAgPiArICBWQVJJQUJMRV9QT0xJQ1lfRU5UUlkgICpOZXdFbnRyeTsNCiAgICA+ ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgRGF0YTsNCiAgICA+ICsNCiAgICA+ICsgIC8vIENy ZWF0ZSBhIHZhcmlhYmxlIHBvbGljeSB0aGF0IGxvY2tzIHRoZSB2YXJpYWJsZS4NCiAgICA+ICsg IFN0YXR1cyA9IENyZWF0ZVZhclN0YXRlVmFyaWFibGVQb2xpY3kgKA0KICAgID4gKyAgICAgICAg ICAgICAmbVRlc3RHdWlkMSwNCiAgICA+ICsgICAgICAgICAgICAgVEVTVF9WQVJfMV9OQU1FLA0K ICAgID4gKyAgICAgICAgICAgICBURVNUX1BPTElDWV9NSU5fU0laRV9OVUxMLA0KICAgID4gKyAg ICAgICAgICAgICBURVNUX1BPTElDWV9NQVhfU0laRV8yMDAsDQogICAgPiArICAgICAgICAgICAg IFRFU1RfUE9MSUNZX0FUVFJJQlVURVNfTlVMTCwNCiAgICA+ICsgICAgICAgICAgICAgVEVTVF9Q T0xJQ1lfQVRUUklCVVRFU19OVUxMLA0KICAgID4gKyAgICAgICAgICAgICAmbVRlc3RHdWlkMiwN CiAgICA+ICsgICAgICAgICAgICAgMSwNCiAgICA+ICsgICAgICAgICAgICAgVEVTVF9WQVJfMl9O QU1FLA0KICAgID4gKyAgICAgICAgICAgICAmTmV3RW50cnkNCiAgICA+ICsgICAgICAgICAgICAg KTsNCiAgICA+ICsgIFVUX0FTU0VSVF9OT1RfRUZJX0VSUk9SIChTdGF0dXMpOw0KICAgID4gKw0K ICAgID4gKyAgLy8gUmVnaXN0ZXIgdGhlIG5ldyBwb2xpY3kuDQogICAgPiArICBTdGF0dXMgPSBS ZWdpc3RlclZhcmlhYmxlUG9saWN5IChOZXdFbnRyeSk7DQogICAgPiArDQogICAgPiArICAvLyBD b25maWd1cmUgdGhlIHN0dWIgdG8gbm90IGNhcmUgYWJvdXQgcGFyYW1ldGVycy4gV2UncmUgdGVz dGluZyBlcnJvcnMuDQogICAgPiArICBleHBlY3RfYW55X2Fsd2F5cyAoU3R1YkdldFZhcmlhYmxl TnVsbCwgVmFyaWFibGVOYW1lKTsNCiAgICA+ICsgIGV4cGVjdF9hbnlfYWx3YXlzIChTdHViR2V0 VmFyaWFibGVOdWxsLCBWZW5kb3JHdWlkKTsNCiAgICA+ICsgIGV4cGVjdF9hbnlfYWx3YXlzIChT dHViR2V0VmFyaWFibGVOdWxsLCBEYXRhU2l6ZSk7DQogICAgPiArDQogICAgPiArICAvLyBXaXRo IGEgcG9saWN5LCBtYWtlIHN1cmUgdGhhdCB3cml0ZXMgc3RpbGwgd29yaywgc2luY2UgdGhlIHZh cmlhYmxlIGRvZXNuJ3QNCiAgICA+IGV4aXN0Lg0KICAgID4gKyAgRGF0YSA9IDI7DQogICAgPiAr ICB3aWxsX3JldHVybiAoU3R1YkdldFZhcmlhYmxlTnVsbCwgVEVTVF9QT0xJQ1lfQVRUUklCVVRF U19OVUxMKTsgICAgIC8vDQogICAgPiBBdHRyaWJ1dGVzDQogICAgPiArICB3aWxsX3JldHVybiAo U3R1YkdldFZhcmlhYmxlTnVsbCwgc2l6ZW9mIChEYXRhKSk7ICAgICAgICAgICAgICAgICAgIC8v IFNpemUNCiAgICA+ICsgIHdpbGxfcmV0dXJuIChTdHViR2V0VmFyaWFibGVOdWxsLCAoVUlOVE4p JkRhdGEpOyAgICAgICAgICAgICAgICAgICAgLy8gRGF0YVB0cg0KICAgID4gKyAgd2lsbF9yZXR1 cm4gKFN0dWJHZXRWYXJpYWJsZU51bGwsIEVGSV9TVUNDRVNTKTsgICAgICAgICAgICAgICAgICAg ICAvLyBTdGF0dXMNCiAgICA+ICsNCiAgICA+ICsgIFN0YXR1cyA9IFZhcmlhYmxlTG9ja1JlcXVl c3RUb0xvY2sgKE5VTEwsIFRFU1RfVkFSXzFfTkFNRSwNCiAgICA+ICZtVGVzdEd1aWQxKTsNCiAg ICA+ICsgIFVUX0FTU0VSVF9UUlVFIChFRklfRVJST1IgKFN0YXR1cykpOw0KICAgID4gKw0KICAg ID4gKyAgRnJlZVBvb2wgKE5ld0VudHJ5KTsNCiAgICA+ICsNCiAgICA+ICsgIHJldHVybiBVTklU X1RFU1RfUEFTU0VEOw0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIFRl c3QgQ2FzZSB0aGF0IGxvY2tzIGEgdmFyaWFibGUgdXNpbmcgVmFyaWFibGUgTG9jayBQcm90b2Nv bCBQb2xpY3kgUHJvdG9jb2wNCiAgICA+ICsgIHRoZW4gYW5kIHRoZW4gYXR0ZW1wdHMgdG8gbG9j ayB0aGUgc2FtZSB2YXJpYWJsZSB1c2luZyB0aGUgVmFyaWFibGUgUG9saWN5DQogICAgPiArICBQ cm90b2NvbC4gIFRoZSBjYWxsIHRvIFZhcmlhYmxlIExvY2sgaXMgZXhwZWN0ZWQgdG8gc3VjY2Vl ZCBhbmQgdGhlIGNhbGwgdG8NCiAgICA+ICsgIFZhcmlhYmxlIFBvbGljeSBpcyBleHBlY3RlZCB0 byBmYWlsLg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAgVW5pdCB0ZXN0 IGNhc2UgY29udGV4dA0KICAgID4gKyAgKiovDQogICAgPiArVU5JVF9URVNUX1NUQVRVUw0KICAg ID4gK0VGSUFQSQ0KICAgID4gK1NldHRpbmdQb2xpY3lGb3JBTG9ja2VkVmFyaWFibGVTaG91bGRG YWlsICgNCiAgICA+ICsgIElOIFVOSVRfVEVTVF9DT05URVhUICBDb250ZXh0DQogICAgPiArICAp DQogICAgPiArew0KICAgID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICBTdGF0dXM7DQogICAg PiArICBWQVJJQUJMRV9QT0xJQ1lfRU5UUlkgICpOZXdFbnRyeTsNCiAgICA+ICsNCiAgICA+ICsg IC8vIExvY2sgdGhlIHZhcmlhYmxlLg0KICAgID4gKyAgU3RhdHVzID0gVmFyaWFibGVMb2NrUmVx dWVzdFRvTG9jayAoTlVMTCwgVEVTVF9WQVJfMV9OQU1FLA0KICAgID4gJm1UZXN0R3VpZDEpOw0K ICAgID4gKyAgVVRfQVNTRVJUX05PVF9FRklfRVJST1IgKFN0YXR1cyk7DQogICAgPiArDQogICAg PiArICAvLyBDcmVhdGUgYSB2YXJpYWJsZSBwb2xpY3kgdGhhdCBsb2NrcyB0aGUgdmFyaWFibGUu DQogICAgPiArICBTdGF0dXMgPSBDcmVhdGVWYXJTdGF0ZVZhcmlhYmxlUG9saWN5ICgNCiAgICA+ ICsgICAgICAgICAgICAgJm1UZXN0R3VpZDEsDQogICAgPiArICAgICAgICAgICAgIFRFU1RfVkFS XzFfTkFNRSwNCiAgICA+ICsgICAgICAgICAgICAgVEVTVF9QT0xJQ1lfTUlOX1NJWkVfTlVMTCwN CiAgICA+ICsgICAgICAgICAgICAgVEVTVF9QT0xJQ1lfTUFYX1NJWkVfMjAwLA0KICAgID4gKyAg ICAgICAgICAgICBURVNUX1BPTElDWV9BVFRSSUJVVEVTX05VTEwsDQogICAgPiArICAgICAgICAg ICAgIFRFU1RfUE9MSUNZX0FUVFJJQlVURVNfTlVMTCwNCiAgICA+ICsgICAgICAgICAgICAgJm1U ZXN0R3VpZDIsDQogICAgPiArICAgICAgICAgICAgIDEsDQogICAgPiArICAgICAgICAgICAgIFRF U1RfVkFSXzJfTkFNRSwNCiAgICA+ICsgICAgICAgICAgICAgJk5ld0VudHJ5DQogICAgPiArICAg ICAgICAgICAgICk7DQogICAgPiArICBVVF9BU1NFUlRfTk9UX0VGSV9FUlJPUiAoU3RhdHVzKTsN CiAgICA+ICsNCiAgICA+ICsgIC8vIFJlZ2lzdGVyIHRoZSBuZXcgcG9saWN5Lg0KICAgID4gKyAg U3RhdHVzID0gUmVnaXN0ZXJWYXJpYWJsZVBvbGljeSAoTmV3RW50cnkpOw0KICAgID4gKyAgVVRf QVNTRVJUX1RSVUUgKEVGSV9FUlJPUiAoU3RhdHVzKSk7DQogICAgPiArDQogICAgPiArICBGcmVl UG9vbCAoTmV3RW50cnkpOw0KICAgID4gKw0KICAgID4gKyAgcmV0dXJuIFVOSVRfVEVTVF9QQVNT RUQ7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgTWFpbiBlbnRyeSBw b2ludCB0byB0aGlzIHVuaXQgdGVzdCBhcHBsaWNhdGlvbi4NCiAgICA+ICsNCiAgICA+ICsgIFNl dHMgdXAgYW5kIHJ1bnMgdGhlIHRlc3Qgc3VpdGVzLg0KICAgID4gKyoqLw0KICAgID4gK1ZPSUQN CiAgICA+ICtFRklBUEkNCiAgICA+ICtVbml0VGVzdE1haW4gKA0KICAgID4gKyAgVk9JRA0KICAg ID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICBT dGF0dXM7DQogICAgPiArICBVTklUX1RFU1RfRlJBTUVXT1JLX0hBTkRMRSAgRnJhbWV3b3JrOw0K ICAgID4gKyAgVU5JVF9URVNUX1NVSVRFX0hBTkRMRSAgICAgIFNoaW1UZXN0czsNCiAgICA+ICsN CiAgICA+ICsgIEZyYW1ld29yayA9IE5VTEw7DQogICAgPiArDQogICAgPiArICBERUJVRyAoKERF QlVHX0lORk8sICIlYSB2JWFcbiIsIFVOSVRfVEVTVF9OQU1FLA0KICAgID4gVU5JVF9URVNUX1ZF UlNJT04pKTsNCiAgICA+ICsNCiAgICA+ICsgIC8vDQogICAgPiArICAvLyBTdGFydCBzZXR0aW5n IHVwIHRoZSB0ZXN0IGZyYW1ld29yayBmb3IgcnVubmluZyB0aGUgdGVzdHMuDQogICAgPiArICAv Lw0KICAgID4gKyAgU3RhdHVzID0gSW5pdFVuaXRUZXN0RnJhbWV3b3JrICgmRnJhbWV3b3JrLCBV TklUX1RFU1RfTkFNRSwNCiAgICA+IGdFZmlDYWxsZXJCYXNlTmFtZSwgVU5JVF9URVNUX1ZFUlNJ T04pOw0KICAgID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgID4gKyAgICBERUJV RyAoKERFQlVHX0VSUk9SLCAiRmFpbGVkIGluIEluaXRVbml0VGVzdEZyYW1ld29yay4gU3RhdHVz ID0gJXJcbiIsDQogICAgPiBTdGF0dXMpKTsNCiAgICA+ICsgICAgZ290byBFWElUOw0KICAgID4g KyAgfQ0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIEFkZCBhbGwgdGVzdCBzdWl0 ZXMgYW5kIHRlc3RzLg0KICAgID4gKyAgLy8NCiAgICA+ICsgIFN0YXR1cyA9IENyZWF0ZVVuaXRU ZXN0U3VpdGUgKA0KICAgID4gKyAgICAgICAgICAgICAmU2hpbVRlc3RzLA0KICAgID4gKyAgICAg ICAgICAgICBGcmFtZXdvcmssDQogICAgPiArICAgICAgICAgICAgICJWYXJpYWJsZSBMb2NrIFNo aW0gVGVzdHMiLA0KICAgID4gKyAgICAgICAgICAgICAiVmFyUG9saWN5LlZhckxvY2tTaGltIiwN CiAgICA+ICsgICAgICAgICAgICAgTlVMTCwNCiAgICA+ICsgICAgICAgICAgICAgTlVMTA0KICAg ID4gKyAgICAgICAgICAgICApOw0KICAgID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K ICAgID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiRmFpbGVkIGluIENyZWF0ZVVuaXRUZXN0 U3VpdGUgZm9yIFNoaW1UZXN0c1xuIikpOw0KICAgID4gKyAgICBTdGF0dXMgPSBFRklfT1VUX09G X1JFU09VUkNFUzsNCiAgICA+ICsgICAgZ290byBFWElUOw0KICAgID4gKyAgfQ0KICAgID4gKw0K ICAgID4gKyAgQWRkVGVzdENhc2UgKA0KICAgID4gKyAgICBTaGltVGVzdHMsDQogICAgPiArICAg ICJMb2NraW5nIGEgdmFyaWFibGUgd2l0aCBubyBtYXRjaGluZyBwb2xpY2llcyBzaG91bGQgYWx3 YXlzIHdvcmsiLA0KICAgID4gKyAgICAiRW1wdHlQb2xpY2llcyIsDQogICAgPiArICAgIExvY2tp bmdXaXRob3V0QW55UG9saWNpZXNTaG91bGRTdWNjZWVkLA0KICAgID4gKyAgICBMaWJJbml0TW9j a2VkLA0KICAgID4gKyAgICBMaWJDbGVhbnVwLA0KICAgID4gKyAgICBOVUxMDQogICAgPiArICAg ICk7DQogICAgPiArICBBZGRUZXN0Q2FzZSAoDQogICAgPiArICAgIFNoaW1UZXN0cywNCiAgICA+ ICsgICAgIkxvY2tpbmcgYSB2YXJpYWJsZSB0d2ljZSBzaG91bGQgYWx3YXlzIHdvcmsiLA0KICAg ID4gKyAgICAiRG91YmxlTG9jayIsDQogICAgPiArICAgIExvY2tpbmdUd2ljZVNob3VsZFN1Y2Nl ZWQsDQogICAgPiArICAgIExpYkluaXRNb2NrZWQsDQogICAgPiArICAgIExpYkNsZWFudXAsDQog ICAgPiArICAgIE5VTEwNCiAgICA+ICsgICAgKTsNCiAgICA+ICsgIEFkZFRlc3RDYXNlICgNCiAg ICA+ICsgICAgU2hpbVRlc3RzLA0KICAgID4gKyAgICAiTG9ja2luZyBhIHZhcmlhYmxlIHRoYXQn cyBhbHJlYWR5IGxvY2tlZCBieSBhbm90aGVyIHBvbGljeSBzaG91bGQgd29yayIsDQogICAgPiAr ICAgICJMb2NrQWZ0ZXJQb2xpY3kiLA0KICAgID4gKyAgICBMb2NraW5nQUxvY2tlZFZhcmlhYmxl U2hvdWxkU3VjY2VlZCwNCiAgICA+ICsgICAgTGliSW5pdE1vY2tlZCwNCiAgICA+ICsgICAgTGli Q2xlYW51cCwNCiAgICA+ICsgICAgTlVMTA0KICAgID4gKyAgICApOw0KICAgID4gKyAgQWRkVGVz dENhc2UgKA0KICAgID4gKyAgICBTaGltVGVzdHMsDQogICAgPiArICAgICJMb2NraW5nIGEgdmFy aWFibGUgdGhhdCBhbHJlYWR5IGhhcyBhbiB1bmxvY2tlZCBwb2xpY3kgc2hvdWxkIGZhaWwiLA0K ICAgID4gKyAgICAiTG9ja0FmdGVyVW5sb2NrZWRQb2xpY3kiLA0KICAgID4gKyAgICBMb2NraW5n QW5VbmxvY2tlZFZhcmlhYmxlU2hvdWxkRmFpbCwNCiAgICA+ICsgICAgTGliSW5pdE1vY2tlZCwN CiAgICA+ICsgICAgTGliQ2xlYW51cCwNCiAgICA+ICsgICAgTlVMTA0KICAgID4gKyAgICApOw0K ICAgID4gKyAgQWRkVGVzdENhc2UgKA0KICAgID4gKyAgICBTaGltVGVzdHMsDQogICAgPiArICAg ICJMb2NraW5nIGEgdmFyaWFibGUgdGhhdCBhbHJlYWR5IGhhcyBhbiBsb2NrZWQgcG9saWN5IHNo b3VsZCBzdWNjZWVkIiwNCiAgICA+ICsgICAgIkxvY2tBZnRlckxvY2tlZFBvbGljeU1hdGNoaW5n RGF0YSIsDQogICAgPiArICAgIExvY2tpbmdBTG9ja2VkVmFyaWFibGVXaXRoTWF0Y2hpbmdEYXRh U2hvdWxkU3VjY2VlZCwNCiAgICA+ICsgICAgTGliSW5pdE1vY2tlZCwNCiAgICA+ICsgICAgTGli Q2xlYW51cCwNCiAgICA+ICsgICAgTlVMTA0KICAgID4gKyAgICApOw0KICAgID4gKyAgQWRkVGVz dENhc2UgKA0KICAgID4gKyAgICBTaGltVGVzdHMsDQogICAgPiArICAgICJMb2NraW5nIGEgdmFy aWFibGUgdGhhdCBhbHJlYWR5IGhhcyBhbiBsb2NrZWQgcG9saWN5IHdpdGggbWF0Y2hpbmcgZGF0 YQ0KICAgID4gc2hvdWxkIHN1Y2NlZWQiLA0KICAgID4gKyAgICAiTG9ja0FmdGVyTG9ja2VkUG9s aWN5Tm9uTWF0Y2hpbmdEYXRhIiwNCiAgICA+ICsgICAgTG9ja2luZ0FMb2NrZWRWYXJpYWJsZVdp dGhOb25NYXRjaGluZ0RhdGFTaG91bGRGYWlsLA0KICAgID4gKyAgICBMaWJJbml0TW9ja2VkLA0K ICAgID4gKyAgICBMaWJDbGVhbnVwLA0KICAgID4gKyAgICBOVUxMDQogICAgPiArICAgICk7DQog ICAgPiArICBBZGRUZXN0Q2FzZSAoDQogICAgPiArICAgIFNoaW1UZXN0cywNCiAgICA+ICsgICAg IkFkZGluZyBhIHBvbGljeSBmb3IgYSB2YXJpYWJsZSB0aGF0IGhhcyBwcmV2aW91c2x5IGJlZW4g bG9ja2VkIHNob3VsZCBhbHdheXMNCiAgICA+IGZhaWwiLA0KICAgID4gKyAgICAiU2V0UG9saWN5 QWZ0ZXJMb2NrIiwNCiAgICA+ICsgICAgU2V0dGluZ1BvbGljeUZvckFMb2NrZWRWYXJpYWJsZVNo b3VsZEZhaWwsDQogICAgPiArICAgIExpYkluaXRNb2NrZWQsDQogICAgPiArICAgIExpYkNsZWFu dXAsDQogICAgPiArICAgIE5VTEwNCiAgICA+ICsgICAgKTsNCiAgICA+ICsNCiAgICA+ICsgIC8v DQogICAgPiArICAvLyBFeGVjdXRlIHRoZSB0ZXN0cy4NCiAgICA+ICsgIC8vDQogICAgPiArICBT dGF0dXMgPSBSdW5BbGxUZXN0U3VpdGVzIChGcmFtZXdvcmspOw0KICAgID4gKw0KICAgID4gK0VY SVQ6DQogICAgPiArICBpZiAoRnJhbWV3b3JrICE9IE5VTEwpIHsNCiAgICA+ICsgICAgRnJlZVVu aXRUZXN0RnJhbWV3b3JrIChGcmFtZXdvcmspOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4g KyAgcmV0dXJuOw0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsvLy8NCiAgICA+ICsvLy8gQXZv aWQgRUNDIGVycm9yIGZvciBmdW5jdGlvbiBuYW1lIHRoYXQgc3RhcnRzIHdpdGggbG93ZXIgY2Fz ZSBsZXR0ZXINCiAgICA+ICsvLy8NCiAgICA+ICsjZGVmaW5lIE1haW4gIG1haW4NCiAgICA+ICsN CiAgICA+ICsvKioNCiAgICA+ICsgIFN0YW5kYXJkIFBPU0lYIEMgZW50cnkgcG9pbnQgZm9yIGhv c3QgYmFzZWQgdW5pdCB0ZXN0IGV4ZWN1dGlvbi4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbVtp bl0gQXJnYyAgTnVtYmVyIG9mIGFyZ3VtZW50cw0KICAgID4gKyAgQHBhcmFtW2luXSBBcmd2ICBB cnJheSBvZiBwb2ludGVycyB0byBhcmd1bWVudHMNCiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwg MCAgICAgIFN1Y2Nlc3MNCiAgICA+ICsgIEByZXR2YWwgb3RoZXIgIEVycm9yDQogICAgPiArKiov DQogICAgPiArSU5UMzINCiAgICA+ICtNYWluICgNCiAgICA+ICsgIElOIElOVDMyICBBcmdjLA0K ICAgID4gKyAgSU4gQ0hBUjggICpBcmd2W10NCiAgICA+ICsgICkNCiAgICA+ICt7DQogICAgPiAr ICBVbml0VGVzdE1haW4gKCk7DQogICAgPiArICByZXR1cm4gMDsNCiAgICA+ICt9DQogICAgPiBk aWZmIC0tZ2l0DQogICAgPiBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVj dGVkL1J1bnRpbWVEeGUvU3BlY3VsYXRpb25CYXJyaWUNCiAgICA+IHJEeGUuYw0KICAgID4gYi9N ZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1NwZWN1 bGF0aW9uQmFycmllDQogICAgPiByRHhlLmMNCiAgICA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQog ICAgPiBpbmRleCAwMDAwMDAwMDAwMDAuLmIyMTllYTllYzA3NA0KICAgID4gLS0tIC9kZXYvbnVs bA0KICAgID4gKysrDQogICAgPiBiL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJv dGVjdGVkL1J1bnRpbWVEeGUvU3BlY3VsYXRpb25CYXJyaWUNCiAgICA+IHJEeGUuYw0KICAgID4g QEAgLTAsMCArMSwyNyBAQA0KICAgID4gKy8qKiBAZmlsZQ0KICAgID4gKyAgQmFycmllciB0byBz dG9wIHNwZWN1bGF0aXZlIGV4ZWN1dGlvbiAoRFhFIHZlcnNpb24pLg0KICAgID4gKw0KICAgID4g K0NvcHlyaWdodCAoYykgMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2 ZWQuPEJSPg0KICAgID4gK1NQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0 ZW50DQogICAgPiArDQogICAgPiArKiovDQogICAgPiArDQogICAgPiArI2luY2x1ZGUgIlZhcmlh YmxlLmgiDQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBUaGlzIHNlcnZpY2UgaXMgY29u c3VtZWQgYnkgdGhlIHZhcmlhYmxlIG1vZHVsZXMgdG8gcGxhY2UgYSBiYXJyaWVyIHRvIHN0b3AN CiAgICA+ICsgIHNwZWN1bGF0aXZlIGV4ZWN1dGlvbi4NCiAgICA+ICsNCiAgICA+ICsgIEVuc3Vy ZXMgdGhhdCBubyBsYXRlciBpbnN0cnVjdGlvbiB3aWxsIGV4ZWN1dGUgc3BlY3VsYXRpdmVseSwg dW50aWwgYWxsIHByaW9yDQogICAgPiArICBpbnN0cnVjdGlvbnMgaGF2ZSBjb21wbGV0ZWQuDQog ICAgPiArDQogICAgPiArKiovDQogICAgPiArVk9JRA0KICAgID4gK1ZhcmlhYmxlU3BlY3VsYXRp b25CYXJyaWVyICgNCiAgICA+ICsgIFZPSUQNCiAgICA+ICsgICkNCiAgICA+ICt7DQogICAgPiAr ICAvLw0KICAgID4gKyAgLy8gRG8gbm90aGluZy4NCiAgICA+ICsgIC8vDQogICAgPiArfQ0KICAg ID4gZGlmZiAtLWdpdA0KICAgID4gYS9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1By b3RlY3RlZC9SdW50aW1lRHhlL1NwZWN1bGF0aW9uQmFycmllDQogICAgPiByU21tLmMNCiAgICA+ IGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9T cGVjdWxhdGlvbkJhcnJpZQ0KICAgID4gclNtbS5jDQogICAgPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KICAgID4gaW5kZXggMDAwMDAwMDAwMDAwLi43MTA3YzA0MjkyOGUNCiAgICA+IC0tLSAvZGV2 L251bGwNCiAgICA+ICsrKw0KICAgID4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxl L1Byb3RlY3RlZC9SdW50aW1lRHhlL1NwZWN1bGF0aW9uQmFycmllDQogICAgPiByU21tLmMNCiAg ICA+IEBAIC0wLDAgKzEsMjYgQEANCiAgICA+ICsvKiogQGZpbGUNCiAgICA+ICsgIEJhcnJpZXIg dG8gc3RvcCBzcGVjdWxhdGl2ZSBleGVjdXRpb24gKFNNTSB2ZXJzaW9uKS4NCiAgICA+ICsNCiAg ICA+ICtDb3B5cmlnaHQgKGMpIDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl c2VydmVkLjxCUj4NCiAgICA+ICtTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNl LVBhdGVudA0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gKw0KICAgID4gKyNpbmNsdWRlIDxM aWJyYXJ5L0Jhc2VMaWIuaD4NCiAgICA+ICsjaW5jbHVkZSAiVmFyaWFibGUuaCINCiAgICA+ICsN CiAgICA+ICsvKioNCiAgICA+ICsgIFRoaXMgc2VydmljZSBpcyBjb25zdW1lZCBieSB0aGUgdmFy aWFibGUgbW9kdWxlcyB0byBwbGFjZSBhIGJhcnJpZXIgdG8gc3RvcA0KICAgID4gKyAgc3BlY3Vs YXRpdmUgZXhlY3V0aW9uLg0KICAgID4gKw0KICAgID4gKyAgRW5zdXJlcyB0aGF0IG5vIGxhdGVy IGluc3RydWN0aW9uIHdpbGwgZXhlY3V0ZSBzcGVjdWxhdGl2ZWx5LCB1bnRpbCBhbGwgcHJpb3IN CiAgICA+ICsgIGluc3RydWN0aW9ucyBoYXZlIGNvbXBsZXRlZC4NCiAgICA+ICsNCiAgICA+ICsq Ki8NCiAgICA+ICtWT0lEDQogICAgPiArVmFyaWFibGVTcGVjdWxhdGlvbkJhcnJpZXIgKA0KICAg ID4gKyAgVk9JRA0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIFNwZWN1bGF0aW9uQmFy cmllciAoKTsNCiAgICA+ICt9DQogICAgPiBkaWZmIC0tZ2l0DQogICAgPiBhL01kZU1vZHVsZVBr Zy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVGNnTW9yTG9ja0R4ZS5j DQogICAgPiBiL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRp bWVEeGUvVGNnTW9yTG9ja0R4ZS5jDQogICAgPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgID4g aW5kZXggMDAwMDAwMDAwMDAwLi44ODk4NGMzMWFiNGYNCiAgICA+IC0tLSAvZGV2L251bGwNCiAg ICA+ICsrKw0KICAgID4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3Rl ZC9SdW50aW1lRHhlL1RjZ01vckxvY2tEeGUuYw0KICAgID4gQEAgLTAsMCArMSwxNTMgQEANCiAg ICA+ICsvKiogQGZpbGUNCiAgICA+ICsgIFRDRyBNT1IgKE1lbW9yeSBPdmVyd3JpdGUgUmVxdWVz dCkgTG9jayBDb250cm9sIHN1cHBvcnQgKERYRSB2ZXJzaW9uKS4NCiAgICA+ICsNCiAgICA+ICsg IFRoaXMgbW9kdWxlIGNsZWFycyBNZW1vcnlPdmVyd3JpdGVSZXF1ZXN0Q29udHJvbExvY2sgdmFy aWFibGUgdG8gaW5kaWNhdGUNCiAgICA+ICsgIE1PUiBsb2NrIGNvbnRyb2wgdW5zdXBwb3J0ZWQu DQogICAgPiArDQogICAgPiArQ29weXJpZ2h0IChjKSAyMDE2LCBJbnRlbCBDb3Jwb3JhdGlvbi4g QWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQogICAgPiArQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQg Q29ycG9yYXRpb24uDQogICAgPiArU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVz ZS1QYXRlbnQNCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICsNCiAgICA+ICsjaW5jbHVkZSA8 UGlEeGUuaD4NCiAgICA+ICsjaW5jbHVkZSA8R3VpZC9NZW1vcnlPdmVyd3JpdGVDb250cm9sLmg+ DQogICAgPiArI2luY2x1ZGUgPEluZHVzdHJ5U3RhbmRhcmQvTWVtb3J5T3ZlcndyaXRlUmVxdWVz dENvbnRyb2xMb2NrLmg+DQogICAgPiArI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCiAg ICA+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlTGliLmg+DQogICAgPiArI2luY2x1ZGUgPExpYnJh cnkvQmFzZU1lbW9yeUxpYi5oPg0KICAgID4gKyNpbmNsdWRlICJWYXJpYWJsZS5oIg0KICAgID4g Kw0KICAgID4gKyNpbmNsdWRlIDxQcm90b2NvbC9WYXJpYWJsZVBvbGljeS5oPg0KICAgID4gKyNp bmNsdWRlIDxMaWJyYXJ5L1ZhcmlhYmxlUG9saWN5SGVscGVyTGliLmg+DQogICAgPiArDQogICAg PiArLyoqDQogICAgPiArICBUaGlzIHNlcnZpY2UgaXMgYW4gTU9SL01vckxvY2sgY2hlY2tlciBo YW5kbGVyIGZvciB0aGUgU2V0VmFyaWFibGUoKS4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbVtp bl0gIFZhcmlhYmxlTmFtZSB0aGUgbmFtZSBvZiB0aGUgdmVuZG9yJ3MgdmFyaWFibGUsIGFzIGEN CiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBOdWxsLVRlcm1pbmF0ZWQgVW5pY29k ZSBTdHJpbmcNCiAgICA+ICsgIEBwYXJhbVtpbl0gIFZlbmRvckd1aWQgICBVbmlmeSBpZGVudGlm aWVyIGZvciB2ZW5kb3IuDQogICAgPiArICBAcGFyYW1baW5dICBBdHRyaWJ1dGVzICAgQXR0cmli dXRlcyBiaXRtYXNrIHRvIHNldCBmb3IgdGhlIHZhcmlhYmxlLg0KICAgID4gKyAgQHBhcmFtW2lu XSAgRGF0YVNpemUgICAgIFRoZSBzaXplIGluIGJ5dGVzIG9mIERhdGEtQnVmZmVyLg0KICAgID4g KyAgQHBhcmFtW2luXSAgRGF0YSAgICAgICAgIFBvaW50IHRvIHRoZSBjb250ZW50IG9mIHRoZSB2 YXJpYWJsZS4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwgIEVGSV9TVUNDRVNTICAgICAgICAg ICAgVGhlIE1PUi9Nb3JMb2NrIGNoZWNrIHBhc3MsIGFuZCBWYXJpYWJsZQ0KICAgID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXIgY2FuIHN0b3JlIHRoZSB2YXJpYWJs ZSBkYXRhLg0KICAgID4gKyAgQHJldHZhbCAgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBUaGUgTU9S L01vckxvY2sgZGF0YSBvciBkYXRhIHNpemUgb3INCiAgICA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYXR0cmlidXRlcyBpcyBub3QgYWxsb3dlZCBmb3IgTU9SIHZhcmlhYmxl Lg0KICAgID4gKyAgQHJldHZhbCAgRUZJX0FDQ0VTU19ERU5JRUQgICAgICBUaGUgTU9SL01vckxv Y2sgaXMgbG9ja2VkLg0KICAgID4gKyAgQHJldHZhbCAgRUZJX0FMUkVBRFlfU1RBUlRFRCAgICBU aGUgTW9yTG9jayB2YXJpYWJsZSBpcyBoYW5kbGVkIGluc2lkZSB0aGlzDQogICAgPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLiBWYXJpYWJsZSBkcml2ZXIgY2Fu IGp1c3QgcmV0dXJuDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVG SV9TVUNDRVNTLg0KICAgID4gKyoqLw0KICAgID4gK0VGSV9TVEFUVVMNCiAgICA+ICtTZXRWYXJp YWJsZUNoZWNrSGFuZGxlck1vciAoDQogICAgPiArICBJTiBDSEFSMTYgICAgKlZhcmlhYmxlTmFt ZSwNCiAgICA+ICsgIElOIEVGSV9HVUlEICAqVmVuZG9yR3VpZCwNCiAgICA+ICsgIElOIFVJTlQz MiAgICBBdHRyaWJ1dGVzLA0KICAgID4gKyAgSU4gVUlOVE4gICAgIERhdGFTaXplLA0KICAgID4g KyAgSU4gVk9JRCAgICAgICpEYXRhDQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgLy8N CiAgICA+ICsgIC8vIEp1c3QgbGV0IGl0IHBhc3MuIE5vIG5lZWQgcHJvdmlkZSBwcm90ZWN0aW9u IGZvciBEWEUgdmVyc2lvbi4NCiAgICA+ICsgIC8vDQogICAgPiArICByZXR1cm4gRUZJX1NVQ0NF U1M7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgSW5pdGlhbGl6YXRp b24gZm9yIE1PUiBDb250cm9sIExvY2suDQogICAgPiArDQogICAgPiArICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICBNb3JMb2NrIGluaXRpYWxpemF0aW9uIHN1Y2Nlc3MuDQogICAgPiArICBAcmV0 dXJuIE90aGVycyAgICAgICAgICBTb21lIGVycm9yIG9jY3Vycy4NCiAgICA+ICsqKi8NCiAgICA+ ICtFRklfU1RBVFVTDQogICAgPiArTW9yTG9ja0luaXQgKA0KICAgID4gKyAgVk9JRA0KICAgID4g KyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIC8vDQogICAgPiArICAvLyBBbHdheXMgY2xlYXIgdmFy aWFibGUgdG8gcmVwb3J0IHVuc3VwcG9ydGVkIHRvIE9TLg0KICAgID4gKyAgLy8gVGhlIHJlYXNv biBpcyB0aGF0IHRoZSBEWEUgdmVyc2lvbiBpcyBub3QgcHJvcGVyIHRvIHByb3ZpZGUgKnByb3Rl Y3Rpb24qLg0KICAgID4gKyAgLy8gQklPUyBzaG91bGQgdXNlIFNNTSB2ZXJzaW9uIHZhcmlhYmxl IGRyaXZlciB0byBwcm92aWRlIHN1Y2ggY2FwYWJpbGl0eS4NCiAgICA+ICsgIC8vDQogICAgPiAr ICBWYXJpYWJsZVNlcnZpY2VTZXRWYXJpYWJsZSAoDQogICAgPiArICAgIE1FTU9SWV9PVkVSV1JJ VEVfUkVRVUVTVF9DT05UUk9MX0xPQ0tfTkFNRSwNCiAgICA+ICsgICAgJmdFZmlNZW1vcnlPdmVy d3JpdGVSZXF1ZXN0Q29udHJvbExvY2tHdWlkLA0KICAgID4gKyAgICAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0dHJpYnV0ZXMNCiAgICA+ICsgICAgMCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEYXRhU2l6ZQ0KICAg ID4gKyAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERh dGENCiAgICA+ICsgICAgKTsNCiAgICA+ICsNCiAgICA+ICsgIC8vDQogICAgPiArICAvLyBUaGUg TU9SIHZhcmlhYmxlIGNhbiBlZmZlY3RpdmVseSBpbXByb3ZlIHBsYXRmb3JtIHNlY3VyaXR5IG9u bHkgd2hlbiB0aGUNCiAgICA+ICsgIC8vIE1vckxvY2sgdmFyaWFibGUgcHJvdGVjdHMgdGhlIE1P UiB2YXJpYWJsZS4gSW4gdHVybiBNb3JMb2NrIGNhbm5vdCBiZQ0KICAgID4gbWFkZQ0KICAgID4g KyAgLy8gc2VjdXJlIHdpdGhvdXQgU01NIHN1cHBvcnQgaW4gdGhlIHBsYXRmb3JtIGZpcm13YXJl IChzZWUgYWJvdmUpLg0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIFRodXMsIGRlbGV0ZSB0aGUg TU9SIHZhcmlhYmxlLCBzaG91bGQgaXQgZXhpc3QgZm9yIGFueSByZWFzb24gKHNvbWUgT1Nlcw0K ICAgID4gKyAgLy8gYXJlIGtub3duIHRvIGNyZWF0ZSBNT1IgdW5pbnRlbnRpb25hbGx5LCBpbiBh biBhdHRlbXB0IHRvIHNldCBpdCksIHRoZW4NCiAgICA+ICsgIC8vIGFsc28gbG9jayB0aGUgTU9S IHZhcmlhYmxlLCBpbiBvcmRlciB0byBwcmV2ZW50IG90aGVyIG1vZHVsZXMgZnJvbQ0KICAgID4g KyAgLy8gY3JlYXRpbmcgaXQuDQogICAgPiArICAvLw0KICAgID4gKyAgVmFyaWFibGVTZXJ2aWNl U2V0VmFyaWFibGUgKA0KICAgID4gKyAgICBNRU1PUllfT1ZFUldSSVRFX1JFUVVFU1RfVkFSSUFC TEVfTkFNRSwNCiAgICA+ICsgICAgJmdFZmlNZW1vcnlPdmVyd3JpdGVDb250cm9sRGF0YUd1aWQs DQogICAgPiArICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBB dHRyaWJ1dGVzDQogICAgPiArICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvLyBEYXRhU2l6ZQ0KICAgID4gKyAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLy8gRGF0YQ0KICAgID4gKyAgICApOw0KICAgID4gKw0KICAgID4gKyAgcmV0 dXJuIEVGSV9TVUNDRVNTOw0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsg IERlbGF5ZWQgaW5pdGlhbGl6YXRpb24gZm9yIE1PUiBDb250cm9sIExvY2sgYXQgRW5kT2ZEeGUu DQogICAgPiArDQogICAgPiArICBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGFueSBvcGVyYXRpb25z IHF1ZXVlZCBieSBNb3JMb2NrSW5pdCgpLg0KICAgID4gKyoqLw0KICAgID4gK1ZPSUQNCiAgICA+ ICtNb3JMb2NrSW5pdEF0RW5kT2ZEeGUgKA0KICAgID4gKyAgVk9JRA0KICAgID4gKyAgKQ0KICAg ID4gK3sNCiAgICA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0K ICAgID4gKyAgRURLSUlfVkFSSUFCTEVfUE9MSUNZX1BST1RPQ09MICAqVmFyaWFibGVQb2xpY3k7 DQogICAgPiArDQogICAgPiArICAvLyBGaXJzdCwgd2Ugb2J2aW91c2x5IG5lZWQgdG8gbG9jYXRl IHRoZSBWYXJpYWJsZVBvbGljeSBwcm90b2NvbC4NCiAgICA+ICsgIFN0YXR1cyA9IGdCUy0+TG9j YXRlUHJvdG9jb2wgKCZnRWRraWlWYXJpYWJsZVBvbGljeVByb3RvY29sR3VpZCwgTlVMTCwNCiAg ICA+IChWT0lEICoqKSZWYXJpYWJsZVBvbGljeSk7DQogICAgPiArICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQogICAgPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYSAtIENvdWxkIG5v dCBsb2NhdGUgVmFyaWFibGVQb2xpY3kNCiAgICA+IHByb3RvY29sISAlclxuIiwgX19GVU5DVElP Tl9fLCBTdGF0dXMpKTsNCiAgICA+ICsgICAgcmV0dXJuOw0KICAgID4gKyAgfQ0KICAgID4gKw0K ICAgID4gKyAgLy8gSWYgd2UncmUgc3VjY2Vzc2Z1bCwgZ28gYWhlYWQgYW5kIHNldCB0aGUgcG9s aWNpZXMgdG8gcHJvdGVjdCB0aGUgdGFyZ2V0DQogICAgPiB2YXJpYWJsZXMuDQogICAgPiArICBT dGF0dXMgPSBSZWdpc3RlckJhc2ljVmFyaWFibGVQb2xpY3kgKA0KICAgID4gKyAgICAgICAgICAg ICBWYXJpYWJsZVBvbGljeSwNCiAgICA+ICsgICAgICAgICAgICAgJmdFZmlNZW1vcnlPdmVyd3Jp dGVSZXF1ZXN0Q29udHJvbExvY2tHdWlkLA0KICAgID4gKyAgICAgICAgICAgICBNRU1PUllfT1ZF UldSSVRFX1JFUVVFU1RfQ09OVFJPTF9MT0NLX05BTUUsDQogICAgPiArICAgICAgICAgICAgIFZB UklBQkxFX1BPTElDWV9OT19NSU5fU0laRSwNCiAgICA+ICsgICAgICAgICAgICAgVkFSSUFCTEVf UE9MSUNZX05PX01BWF9TSVpFLA0KICAgID4gKyAgICAgICAgICAgICBWQVJJQUJMRV9QT0xJQ1lf Tk9fTVVTVF9BVFRSLA0KICAgID4gKyAgICAgICAgICAgICBWQVJJQUJMRV9QT0xJQ1lfTk9fQ0FO VF9BVFRSLA0KICAgID4gKyAgICAgICAgICAgICBWQVJJQUJMRV9QT0xJQ1lfVFlQRV9MT0NLX05P Vw0KICAgID4gKyAgICAgICAgICAgICApOw0KICAgID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KICAgID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWEgLSBDb3VsZCBub3QgbG9j ayB2YXJpYWJsZSAlcyEgJXJcbiIsDQogICAgPiBfX0ZVTkNUSU9OX18sIE1FTU9SWV9PVkVSV1JJ VEVfUkVRVUVTVF9DT05UUk9MX0xPQ0tfTkFNRSwNCiAgICA+IFN0YXR1cykpOw0KICAgID4gKyAg fQ0KICAgID4gKw0KICAgID4gKyAgU3RhdHVzID0gUmVnaXN0ZXJCYXNpY1ZhcmlhYmxlUG9saWN5 ICgNCiAgICA+ICsgICAgICAgICAgICAgVmFyaWFibGVQb2xpY3ksDQogICAgPiArICAgICAgICAg ICAgICZnRWZpTWVtb3J5T3ZlcndyaXRlQ29udHJvbERhdGFHdWlkLA0KICAgID4gKyAgICAgICAg ICAgICBNRU1PUllfT1ZFUldSSVRFX1JFUVVFU1RfVkFSSUFCTEVfTkFNRSwNCiAgICA+ICsgICAg ICAgICAgICAgVkFSSUFCTEVfUE9MSUNZX05PX01JTl9TSVpFLA0KICAgID4gKyAgICAgICAgICAg ICBWQVJJQUJMRV9QT0xJQ1lfTk9fTUFYX1NJWkUsDQogICAgPiArICAgICAgICAgICAgIFZBUklB QkxFX1BPTElDWV9OT19NVVNUX0FUVFIsDQogICAgPiArICAgICAgICAgICAgIFZBUklBQkxFX1BP TElDWV9OT19DQU5UX0FUVFIsDQogICAgPiArICAgICAgICAgICAgIFZBUklBQkxFX1BPTElDWV9U WVBFX0xPQ0tfTk9XDQogICAgPiArICAgICAgICAgICAgICk7DQogICAgPiArICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQogICAgPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYSAtIENv dWxkIG5vdCBsb2NrIHZhcmlhYmxlICVzISAlclxuIiwNCiAgICA+IF9fRlVOQ1RJT05fXywgTUVN T1JZX09WRVJXUklURV9SRVFVRVNUX1ZBUklBQkxFX05BTUUsIFN0YXR1cykpOw0KICAgID4gKyAg fQ0KICAgID4gKw0KICAgID4gKyAgcmV0dXJuOw0KICAgID4gK30NCiAgICA+IGRpZmYgLS1naXQN CiAgICA+IGEvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGlt ZUR4ZS9UY2dNb3JMb2NrU21tLg0KICAgID4gYw0KICAgID4gYi9NZGVNb2R1bGVQa2cvVW5pdmVy c2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1RjZ01vckxvY2tTbW0uDQogICAgPiBj DQogICAgPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgID4gaW5kZXggMDAwMDAwMDAwMDAwLi4y OTZhZmQyZWM0MTQNCiAgICA+IC0tLSAvZGV2L251bGwNCiAgICA+ICsrKw0KICAgID4gYi9NZGVN b2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1RjZ01vckxv Y2tTbW0uDQogICAgPiBjDQogICAgPiBAQCAtMCwwICsxLDU2OSBAQA0KICAgID4gKy8qKiBAZmls ZQ0KICAgID4gKyAgVENHIE1PUiAoTWVtb3J5IE92ZXJ3cml0ZSBSZXF1ZXN0KSBMb2NrIENvbnRy b2wgc3VwcG9ydCAoU01NIHZlcnNpb24pLg0KICAgID4gKw0KICAgID4gKyAgVGhpcyBtb2R1bGUg aW5pdGlsaXplcyBNZW1vcnlPdmVyd3JpdGVSZXF1ZXN0Q29udHJvbExvY2sgdmFyaWFibGUuDQog ICAgPiArICBUaGlzIG1vZHVsZSBhZGRzIFZhcmlhYmxlIEhvb2sgYW5kIGNoZWNrDQogICAgPiBN ZW1vcnlPdmVyd3JpdGVSZXF1ZXN0Q29udHJvbExvY2suDQogICAgPiArDQogICAgPiArQ29weXJp Z2h0IChjKSAyMDE2IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2 ZWQuPEJSPg0KICAgID4gK0NvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLg0KICAg ID4gK1NQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQogICAgPiAr DQogICAgPiArKiovDQogICAgPiArDQogICAgPiArI2luY2x1ZGUgPFBpRHhlLmg+DQogICAgPiAr I2luY2x1ZGUgPEd1aWQvTWVtb3J5T3ZlcndyaXRlQ29udHJvbC5oPg0KICAgID4gKyNpbmNsdWRl IDxJbmR1c3RyeVN0YW5kYXJkL01lbW9yeU92ZXJ3cml0ZVJlcXVlc3RDb250cm9sTG9jay5oPg0K ICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQogICAgPiArI2luY2x1ZGUgPExp YnJhcnkvQmFzZUxpYi5oPg0KICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIu aD4NCiAgICA+ICsjaW5jbHVkZSAiVmFyaWFibGUuaCINCiAgICA+ICsNCiAgICA+ICsjaW5jbHVk ZSA8UHJvdG9jb2wvVmFyaWFibGVQb2xpY3kuaD4NCiAgICA+ICsjaW5jbHVkZSA8TGlicmFyeS9W YXJpYWJsZVBvbGljeUhlbHBlckxpYi5oPg0KICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1Zhcmlh YmxlUG9saWN5TGliLmg+DQogICAgPiArDQogICAgPiArdHlwZWRlZiBzdHJ1Y3Qgew0KICAgID4g KyAgQ0hBUjE2ICAgICAgKlZhcmlhYmxlTmFtZTsNCiAgICA+ICsgIEVGSV9HVUlEICAgICpWZW5k b3JHdWlkOw0KICAgID4gK30gVkFSSUFCTEVfVFlQRTsNCiAgICA+ICsNCiAgICA+ICtWQVJJQUJM RV9UWVBFICBtTW9yVmFyaWFibGVUeXBlW10gPSB7DQogICAgPiArICB7IE1FTU9SWV9PVkVSV1JJ VEVfUkVRVUVTVF9WQVJJQUJMRV9OQU1FLA0KICAgID4gJmdFZmlNZW1vcnlPdmVyd3JpdGVDb250 cm9sRGF0YUd1aWQgICAgICAgIH0sDQogICAgPiArICB7IE1FTU9SWV9PVkVSV1JJVEVfUkVRVUVT VF9DT05UUk9MX0xPQ0tfTkFNRSwNCiAgICA+ICZnRWZpTWVtb3J5T3ZlcndyaXRlUmVxdWVzdENv bnRyb2xMb2NrR3VpZCB9LA0KICAgID4gK307DQogICAgPiArDQogICAgPiArQk9PTEVBTiAgbU1v clBhc3NUaHJ1ID0gRkFMU0U7DQogICAgPiArDQogICAgPiArI2RlZmluZSBNT1JfTE9DS19EQVRB X1VOTE9DS0VEICAgICAgICAgICAgMHgwDQogICAgPiArI2RlZmluZSBNT1JfTE9DS19EQVRBX0xP Q0tFRF9XSVRIT1VUX0tFWSAgMHgxDQogICAgPiArI2RlZmluZSBNT1JfTE9DS19EQVRBX0xPQ0tF RF9XSVRIX0tFWSAgICAgMHgyDQogICAgPiArDQogICAgPiArI2RlZmluZSBNT1JfTE9DS19WMV9T SVpFICAgICAgMQ0KICAgID4gKyNkZWZpbmUgTU9SX0xPQ0tfVjJfS0VZX1NJWkUgIDgNCiAgICA+ ICsNCiAgICA+ICt0eXBlZGVmIGVudW0gew0KICAgID4gKyAgTW9yTG9ja1N0YXRlVW5sb2NrZWQg PSAwLA0KICAgID4gKyAgTW9yTG9ja1N0YXRlTG9ja2VkICAgPSAxLA0KICAgID4gK30gTU9SX0xP Q0tfU1RBVEU7DQogICAgPiArDQogICAgPiArQk9PTEVBTiAgICAgICAgIG1Nb3JMb2NrSW5pdGlh bGl6YXRpb25SZXF1aXJlZCA9IEZBTFNFOw0KICAgID4gK1VJTlQ4ICAgICAgICAgICBtTW9yTG9j a0tleVtNT1JfTE9DS19WMl9LRVlfU0laRV07DQogICAgPiArQk9PTEVBTiAgICAgICAgIG1Nb3JM b2NrS2V5RW1wdHkgPSBUUlVFOw0KICAgID4gK0JPT0xFQU4gICAgICAgICBtTW9yTG9ja1Bhc3NU aHJ1ID0gRkFMU0U7DQogICAgPiArTU9SX0xPQ0tfU1RBVEUgIG1Nb3JMb2NrU3RhdGUgICAgPSBN b3JMb2NrU3RhdGVVbmxvY2tlZDsNCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIFJldHVy bnMgaWYgdGhpcyBpcyBNT1IgcmVsYXRlZCB2YXJpYWJsZS4NCiAgICA+ICsNCiAgICA+ICsgIEBw YXJhbSAgVmFyaWFibGVOYW1lIHRoZSBuYW1lIG9mIHRoZSB2ZW5kb3IncyB2YXJpYWJsZSwgaXQn cyBhIE51bGwtDQogICAgPiBUZXJtaW5hdGVkIFVuaWNvZGUgU3RyaW5nDQogICAgPiArICBAcGFy YW0gIFZlbmRvckd1aWQgICBVbmlmeSBpZGVudGlmaWVyIGZvciB2ZW5kb3IuDQogICAgPiArDQog ICAgPiArICBAcmV0dmFsICBUUlVFICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGlzIE1PUiByZWxh dGVkLg0KICAgID4gKyAgQHJldHZhbCAgRkFMU0UgICAgICAgICAgIFRoZSB2YXJpYWJsZSBpcyBO T1QgTU9SIHJlbGF0ZWQuDQogICAgPiArKiovDQogICAgPiArQk9PTEVBTg0KICAgID4gK0lzQW55 TW9yVmFyaWFibGUgKA0KICAgID4gKyAgSU4gQ0hBUjE2ICAgICpWYXJpYWJsZU5hbWUsDQogICAg PiArICBJTiBFRklfR1VJRCAgKlZlbmRvckd1aWQNCiAgICA+ICsgICkNCiAgICA+ICt7DQogICAg PiArICBVSU5UTiAgSW5kZXg7DQogICAgPiArDQogICAgPiArICBmb3IgKEluZGV4ID0gMDsgSW5k ZXggPCBzaXplb2YgKG1Nb3JWYXJpYWJsZVR5cGUpL3NpemVvZg0KICAgID4gKG1Nb3JWYXJpYWJs ZVR5cGVbMF0pOyBJbmRleCsrKSB7DQogICAgPiArICAgIGlmICgoU3RyQ21wIChWYXJpYWJsZU5h bWUsIG1Nb3JWYXJpYWJsZVR5cGVbSW5kZXhdLlZhcmlhYmxlTmFtZSkgPT0gMCkNCiAgICA+ICYm DQogICAgPiArICAgICAgICAoQ29tcGFyZUd1aWQgKFZlbmRvckd1aWQsIG1Nb3JWYXJpYWJsZVR5 cGVbSW5kZXhdLlZlbmRvckd1aWQpKSkNCiAgICA+ICsgICAgew0KICAgID4gKyAgICAgIHJldHVy biBUUlVFOw0KICAgID4gKyAgICB9DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICByZXR1 cm4gRkFMU0U7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgUmV0dXJu cyBpZiB0aGlzIGlzIE1PUiBsb2NrIHZhcmlhYmxlLg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFt ICBWYXJpYWJsZU5hbWUgdGhlIG5hbWUgb2YgdGhlIHZlbmRvcidzIHZhcmlhYmxlLCBpdCdzIGEg TnVsbC0NCiAgICA+IFRlcm1pbmF0ZWQgVW5pY29kZSBTdHJpbmcNCiAgICA+ICsgIEBwYXJhbSAg VmVuZG9yR3VpZCAgIFVuaWZ5IGlkZW50aWZpZXIgZm9yIHZlbmRvci4NCiAgICA+ICsNCiAgICA+ ICsgIEByZXR2YWwgIFRSVUUgICAgICAgICAgICBUaGUgdmFyaWFibGUgaXMgTU9SIGxvY2sgdmFy aWFibGUuDQogICAgPiArICBAcmV0dmFsICBGQUxTRSAgICAgICAgICAgVGhlIHZhcmlhYmxlIGlz IE5PVCBNT1IgbG9jayB2YXJpYWJsZS4NCiAgICA+ICsqKi8NCiAgICA+ICtCT09MRUFODQogICAg PiArSXNNb3JMb2NrVmFyaWFibGUgKA0KICAgID4gKyAgSU4gQ0hBUjE2ICAgICpWYXJpYWJsZU5h bWUsDQogICAgPiArICBJTiBFRklfR1VJRCAgKlZlbmRvckd1aWQNCiAgICA+ICsgICkNCiAgICA+ ICt7DQogICAgPiArICBpZiAoKFN0ckNtcCAoVmFyaWFibGVOYW1lLA0KICAgID4gTUVNT1JZX09W RVJXUklURV9SRVFVRVNUX0NPTlRST0xfTE9DS19OQU1FKSA9PSAwKSAmJg0KICAgID4gKyAgICAg IChDb21wYXJlR3VpZCAoVmVuZG9yR3VpZCwNCiAgICA+ICZnRWZpTWVtb3J5T3ZlcndyaXRlUmVx dWVzdENvbnRyb2xMb2NrR3VpZCkpKQ0KICAgID4gKyAgew0KICAgID4gKyAgICByZXR1cm4gVFJV RTsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIHJldHVybiBGQUxTRTsNCiAgICA+ICt9 DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBTZXQgTU9SIGxvY2sgdmFyaWFibGUuDQog ICAgPiArDQogICAgPiArICBAcGFyYW0gIERhdGEgICAgICAgICBNT1IgTG9jayB2YXJpYWJsZSBk YXRhLg0KICAgID4gKw0KICAgID4gKyAgQHJldHZhbCAgRUZJX1NVQ0NFU1MgICAgICAgICAgICBU aGUgZmlybXdhcmUgaGFzIHN1Y2Nlc3NmdWxseSBzdG9yZWQgdGhlIHZhcmlhYmxlDQogICAgPiBh bmQgaXRzIGRhdGEgYXMNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZGVmaW5lZCBieSB0aGUgQXR0cmlidXRlcy4NCiAgICA+ICsgIEByZXR2YWwgIEVGSV9JTlZBTElE X1BBUkFNRVRFUiAgQW4gaW52YWxpZCBjb21iaW5hdGlvbiBvZiBhdHRyaWJ1dGUgYml0cw0KICAg ID4gd2FzIHN1cHBsaWVkLCBvciB0aGUNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRGF0YVNpemUgZXhjZWVkcyB0aGUgbWF4aW11bSBhbGxvd2VkLg0KICAgID4gKyAg QHJldHZhbCAgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBWYXJpYWJsZU5hbWUgaXMgYW4gZW1wdHkg VW5pY29kZSBzdHJpbmcuDQogICAgPiArICBAcmV0dmFsICBFRklfT1VUX09GX1JFU09VUkNFUyAg IE5vdCBlbm91Z2ggc3RvcmFnZSBpcyBhdmFpbGFibGUgdG8gaG9sZA0KICAgID4gdGhlIHZhcmlh YmxlIGFuZCBpdHMgZGF0YS4NCiAgICA+ICsgIEByZXR2YWwgIEVGSV9ERVZJQ0VfRVJST1IgICAg ICAgVGhlIHZhcmlhYmxlIGNvdWxkIG5vdCBiZSBzYXZlZCBkdWUgdG8gYQ0KICAgID4gaGFyZHdh cmUgZmFpbHVyZS4NCiAgICA+ICsgIEByZXR2YWwgIEVGSV9XUklURV9QUk9URUNURUQgICAgVGhl IHZhcmlhYmxlIGluIHF1ZXN0aW9uIGlzIHJlYWQtb25seS4NCiAgICA+ICsgIEByZXR2YWwgIEVG SV9XUklURV9QUk9URUNURUQgICAgVGhlIHZhcmlhYmxlIGluIHF1ZXN0aW9uIGNhbm5vdCBiZSBk ZWxldGVkLg0KICAgID4gKyAgQHJldHZhbCAgRUZJX1NFQ1VSSVRZX1ZJT0xBVElPTiBUaGUgdmFy aWFibGUgY291bGQgbm90IGJlIHdyaXR0ZW4gZHVlIHRvDQogICAgPiBFRklfVkFSSUFCTEVfVElN RV9CQVNFRF9BVVRIRU5USUNBVEVEX1dSSVRFX0FDQ0VTUw0KICAgID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzZXQgYnV0IHRoZSBBdXRoSW5mbyBkb2VzIE5PVCBwYXNzIHRo ZSB2YWxpZGF0aW9uIGNoZWNrDQogICAgPiBjYXJyaWVkDQogICAgPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG91dCBieSB0aGUgZmlybXdhcmUuDQogICAgPiArICBAcmV0dmFs ICBFRklfTk9UX0ZPVU5EICAgICAgICAgIFRoZSB2YXJpYWJsZSB0cnlpbmcgdG8gYmUgdXBkYXRl ZCBvciBkZWxldGVkDQogICAgPiB3YXMgbm90IGZvdW5kLg0KICAgID4gKyoqLw0KICAgID4gK0VG SV9TVEFUVVMNCiAgICA+ICtTZXRNb3JMb2NrVmFyaWFibGUgKA0KICAgID4gKyAgSU4gVUlOVDgg IERhdGENCiAgICA+ICsgICkNCiAgICA+ICt7DQogICAgPiArICBFRklfU1RBVFVTICBTdGF0dXM7 DQogICAgPiArDQogICAgPiArICBtTW9yTG9ja1Bhc3NUaHJ1ID0gVFJVRTsNCiAgICA+ICsgIFN0 YXR1cyAgICAgICAgICAgPSBWYXJpYWJsZVNlcnZpY2VTZXRWYXJpYWJsZSAoDQogICAgPiArICAg ICAgICAgICAgICAgICAgICAgICBNRU1PUllfT1ZFUldSSVRFX1JFUVVFU1RfQ09OVFJPTF9MT0NL X05BTUUsDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAmZ0VmaU1lbW9yeU92ZXJ3cml0 ZVJlcXVlc3RDb250cm9sTG9ja0d1aWQsDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICBF RklfVkFSSUFCTEVfTk9OX1ZPTEFUSUxFIHwNCiAgICA+IEVGSV9WQVJJQUJMRV9CT09UU0VSVklD RV9BQ0NFU1MgfCBFRklfVkFSSUFCTEVfUlVOVElNRV9BQ0NFU1MsDQogICAgPiArICAgICAgICAg ICAgICAgICAgICAgICBzaXplb2YgKERhdGEpLA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAg ICAgJkRhdGENCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgPiArICBtTW9y TG9ja1Bhc3NUaHJ1ID0gRkFMU0U7DQogICAgPiArICByZXR1cm4gU3RhdHVzOw0KICAgID4gK30N CiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIFRoaXMgc2VydmljZSBpcyBhbiBNb3JMb2Nr IGNoZWNrZXIgaGFuZGxlciBmb3IgdGhlIFNldFZhcmlhYmxlKCkuDQogICAgPiArDQogICAgPiAr ICBAcGFyYW0gIFZhcmlhYmxlTmFtZSB0aGUgbmFtZSBvZiB0aGUgdmVuZG9yJ3MgdmFyaWFibGUs IGFzIGENCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgIE51bGwtVGVybWluYXRlZCBVbmlj b2RlIFN0cmluZw0KICAgID4gKyAgQHBhcmFtICBWZW5kb3JHdWlkICAgVW5pZnkgaWRlbnRpZmll ciBmb3IgdmVuZG9yLg0KICAgID4gKyAgQHBhcmFtICBBdHRyaWJ1dGVzICAgUG9pbnQgdG8gbWVt b3J5IGxvY2F0aW9uIHRvIHJldHVybiB0aGUgYXR0cmlidXRlcyBvZg0KICAgID4gdmFyaWFibGUu IElmIHRoZSBwb2ludA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgaXMgTlVMTCwgdGhl IHBhcmFtZXRlciB3b3VsZCBiZSBpZ25vcmVkLg0KICAgID4gKyAgQHBhcmFtICBEYXRhU2l6ZSAg ICAgVGhlIHNpemUgaW4gYnl0ZXMgb2YgRGF0YS1CdWZmZXIuDQogICAgPiArICBAcGFyYW0gIERh dGEgICAgICAgICBQb2ludCB0byB0aGUgY29udGVudCBvZiB0aGUgdmFyaWFibGUuDQogICAgPiAr DQogICAgPiArICBAcmV0dmFsICBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBNb3JMb2NrIGNo ZWNrIHBhc3MsIGFuZCBWYXJpYWJsZSBkcml2ZXIgY2FuDQogICAgPiBzdG9yZSB0aGUgdmFyaWFi bGUgZGF0YS4NCiAgICA+ICsgIEByZXR2YWwgIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgVGhlIE1v ckxvY2sgZGF0YSBvciBkYXRhIHNpemUgb3INCiAgICA+IGF0dHJpYnV0ZXMgaXMgbm90IGFsbG93 ZWQuDQogICAgPiArICBAcmV0dmFsICBFRklfQUNDRVNTX0RFTklFRCAgICAgIFRoZSBNb3JMb2Nr IGlzIGxvY2tlZC4NCiAgICA+ICsgIEByZXR2YWwgIEVGSV9XUklURV9QUk9URUNURUQgICAgVGhl IE1vckxvY2sgZGVsZXRpb24gaXMgbm90IGFsbG93ZWQuDQogICAgPiArICBAcmV0dmFsICBFRklf QUxSRUFEWV9TVEFSVEVEICAgIFRoZSBNb3JMb2NrIHZhcmlhYmxlIGlzIGhhbmRsZWQgaW5zaWRl IHRoaXMNCiAgICA+IGZ1bmN0aW9uLg0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBWYXJpYWJsZSBkcml2ZXIgY2FuIGp1c3QgcmV0dXJuIEVGSV9TVUNDRVNTLg0KICAg ID4gKyoqLw0KICAgID4gK0VGSV9TVEFUVVMNCiAgICA+ICtTZXRWYXJpYWJsZUNoZWNrSGFuZGxl ck1vckxvY2sgKA0KICAgID4gKyAgSU4gQ0hBUjE2ICAgICpWYXJpYWJsZU5hbWUsDQogICAgPiAr ICBJTiBFRklfR1VJRCAgKlZlbmRvckd1aWQsDQogICAgPiArICBJTiBVSU5UMzIgICAgQXR0cmli dXRlcywNCiAgICA+ICsgIElOIFVJTlROICAgICBEYXRhU2l6ZSwNCiAgICA+ICsgIElOIFZPSUQg ICAgICAqRGF0YQ0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIEVGSV9TVEFUVVMgIFN0 YXR1czsNCiAgICA+ICsNCiAgICA+ICsgIC8vDQogICAgPiArICAvLyBCYXNpYyBDaGVjaw0KICAg ID4gKyAgLy8NCiAgICA+ICsgIGlmICgoQXR0cmlidXRlcyA9PSAwKSB8fCAoRGF0YVNpemUgPT0g MCkgfHwgKERhdGEgPT0gTlVMTCkpIHsNCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgLy8gUGVy bWl0IGRlbGV0aW9uIGZvciBwYXNzdGhydSByZXF1ZXN0LCBkZW55IGl0IG90aGVyd2lzZS4NCiAg ICA+ICsgICAgLy8NCiAgICA+ICsgICAgcmV0dXJuIG1Nb3JMb2NrUGFzc1RocnUgPyBFRklfU1VD Q0VTUyA6IEVGSV9XUklURV9QUk9URUNURUQ7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiAr ICBpZiAoKEF0dHJpYnV0ZXMgIT0gKEVGSV9WQVJJQUJMRV9OT05fVk9MQVRJTEUgfA0KICAgID4g RUZJX1ZBUklBQkxFX0JPT1RTRVJWSUNFX0FDQ0VTUyB8IEVGSV9WQVJJQUJMRV9SVU5USU1FX0FD Q0VTUykpIHx8DQogICAgPiArICAgICAgKChEYXRhU2l6ZSAhPSBNT1JfTE9DS19WMV9TSVpFKSAm JiAoRGF0YVNpemUgIT0NCiAgICA+IE1PUl9MT0NLX1YyX0tFWV9TSVpFKSkpDQogICAgPiArICB7 DQogICAgPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQogICAgPiArICB9DQog ICAgPiArDQogICAgPiArICAvLw0KICAgID4gKyAgLy8gRG8gbm90IGNoZWNrIGlmIHRoZSByZXF1 ZXN0IGlzIHBhc3N0aHJ1Lg0KICAgID4gKyAgLy8NCiAgICA+ICsgIGlmIChtTW9yTG9ja1Bhc3NU aHJ1KSB7DQogICAgPiArICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCiAgICA+ICsgIH0NCiAgICA+ ICsNCiAgICA+ICsgIGlmIChtTW9yTG9ja1N0YXRlID09IE1vckxvY2tTdGF0ZVVubG9ja2VkKSB7 DQogICAgPiArICAgIC8vDQogICAgPiArICAgIC8vIEluIFVubG9ja2VkIFN0YXRlDQogICAgPiAr ICAgIC8vDQogICAgPiArICAgIGlmIChEYXRhU2l6ZSA9PSBNT1JfTE9DS19WMV9TSVpFKSB7DQog ICAgPiArICAgICAgLy8NCiAgICA+ICsgICAgICAvLyBWMSAtIGxvY2sgcGVybWFuZW50bHkNCiAg ICA+ICsgICAgICAvLw0KICAgID4gKyAgICAgIGlmICgqKFVJTlQ4ICopRGF0YSA9PSBNT1JfTE9D S19EQVRBX1VOTE9DS0VEKSB7DQogICAgPiArICAgICAgICAvLw0KICAgID4gKyAgICAgICAgLy8g VW5sb2NrDQogICAgPiArICAgICAgICAvLw0KICAgID4gKyAgICAgICAgU3RhdHVzID0gU2V0TW9y TG9ja1ZhcmlhYmxlIChNT1JfTE9DS19EQVRBX1VOTE9DS0VEKTsNCiAgICA+ICsgICAgICAgIGlm ICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAgPiArICAgICAgICAgIC8vDQogICAgPiArICAg ICAgICAgIC8vIHJldHVybiBFRklfQUxSRUFEWV9TVEFSVEVEIHRvIHNraXAgdmFyaWFibGUgc2V0 Lg0KICAgID4gKyAgICAgICAgICAvLw0KICAgID4gKyAgICAgICAgICByZXR1cm4gRUZJX0FMUkVB RFlfU1RBUlRFRDsNCiAgICA+ICsgICAgICAgIH0gZWxzZSB7DQogICAgPiArICAgICAgICAgIC8v DQogICAgPiArICAgICAgICAgIC8vIFNldFZhciBmYWlsDQogICAgPiArICAgICAgICAgIC8vDQog ICAgPiArICAgICAgICAgIHJldHVybiBTdGF0dXM7DQogICAgPiArICAgICAgICB9DQogICAgPiAr ICAgICAgfSBlbHNlIGlmICgqKFVJTlQ4ICopRGF0YSA9PSBNT1JfTE9DS19EQVRBX0xPQ0tFRF9X SVRIT1VUX0tFWSkgew0KICAgID4gKyAgICAgICAgLy8NCiAgICA+ICsgICAgICAgIC8vIExvY2sg d2l0aG91dCBrZXkNCiAgICA+ICsgICAgICAgIC8vDQogICAgPiArICAgICAgICBTdGF0dXMgPSBT ZXRNb3JMb2NrVmFyaWFibGUgKE1PUl9MT0NLX0RBVEFfTE9DS0VEX1dJVEhPVVRfS0VZKTsNCiAg ICA+ICsgICAgICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAgPiArICAgICAgICAg IC8vDQogICAgPiArICAgICAgICAgIC8vIExvY2sgc3VjY2Vzcw0KICAgID4gKyAgICAgICAgICAv Lw0KICAgID4gKyAgICAgICAgICBtTW9yTG9ja1N0YXRlID0gTW9yTG9ja1N0YXRlTG9ja2VkOw0K ICAgID4gKyAgICAgICAgICAvLw0KICAgID4gKyAgICAgICAgICAvLyByZXR1cm4gRUZJX0FMUkVB RFlfU1RBUlRFRCB0byBza2lwIHZhcmlhYmxlIHNldC4NCiAgICA+ICsgICAgICAgICAgLy8NCiAg ICA+ICsgICAgICAgICAgcmV0dXJuIEVGSV9BTFJFQURZX1NUQVJURUQ7DQogICAgPiArICAgICAg ICB9IGVsc2Ugew0KICAgID4gKyAgICAgICAgICAvLw0KICAgID4gKyAgICAgICAgICAvLyBTZXRW YXIgZmFpbA0KICAgID4gKyAgICAgICAgICAvLw0KICAgID4gKyAgICAgICAgICByZXR1cm4gU3Rh dHVzOw0KICAgID4gKyAgICAgICAgfQ0KICAgID4gKyAgICAgIH0gZWxzZSB7DQogICAgPiArICAg ICAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KICAgID4gKyAgICAgIH0NCiAgICA+ ICsgICAgfSBlbHNlIGlmIChEYXRhU2l6ZSA9PSBNT1JfTE9DS19WMl9LRVlfU0laRSkgew0KICAg ID4gKyAgICAgIC8vDQogICAgPiArICAgICAgLy8gVjIgbG9jayBhbmQgcHJvdmlzaW9uIHRoZSBr ZXkNCiAgICA+ICsgICAgICAvLw0KICAgID4gKw0KICAgID4gKyAgICAgIC8vDQogICAgPiArICAg ICAgLy8gTmVlZCBzZXQgaGVyZSBiZWNhdXNlIHRoZSBkYXRhIHZhbHVlIG9uIGZsYXNoIGlzIGRp ZmZlcmVudA0KICAgID4gKyAgICAgIC8vDQogICAgPiArICAgICAgU3RhdHVzID0gU2V0TW9yTG9j a1ZhcmlhYmxlIChNT1JfTE9DS19EQVRBX0xPQ0tFRF9XSVRIX0tFWSk7DQogICAgPiArICAgICAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgID4gKyAgICAgICAgLy8NCiAgICA+ICsgICAg ICAgIC8vIFNldFZhciBmYWlsLCBkbyBub3QgcHJvdmlzaW9uIHRoZSBrZXkNCiAgICA+ICsgICAg ICAgIC8vDQogICAgPiArICAgICAgICByZXR1cm4gU3RhdHVzOw0KICAgID4gKyAgICAgIH0gZWxz ZSB7DQogICAgPiArICAgICAgICAvLw0KICAgID4gKyAgICAgICAgLy8gTG9jayBzdWNjZXNzLCBw cm92aXNpb24gdGhlIGtleQ0KICAgID4gKyAgICAgICAgLy8NCiAgICA+ICsgICAgICAgIG1Nb3JM b2NrS2V5RW1wdHkgPSBGQUxTRTsNCiAgICA+ICsgICAgICAgIENvcHlNZW0gKG1Nb3JMb2NrS2V5 LCBEYXRhLCBNT1JfTE9DS19WMl9LRVlfU0laRSk7DQogICAgPiArICAgICAgICBtTW9yTG9ja1N0 YXRlID0gTW9yTG9ja1N0YXRlTG9ja2VkOw0KICAgID4gKyAgICAgICAgLy8NCiAgICA+ICsgICAg ICAgIC8vIHJldHVybiBFRklfQUxSRUFEWV9TVEFSVEVEIHRvIHNraXAgdmFyaWFibGUgc2V0Lg0K ICAgID4gKyAgICAgICAgLy8NCiAgICA+ICsgICAgICAgIHJldHVybiBFRklfQUxSRUFEWV9TVEFS VEVEOw0KICAgID4gKyAgICAgIH0NCiAgICA+ICsgICAgfSBlbHNlIHsNCiAgICA+ICsgICAgICBB U1NFUlQgKEZBTFNFKTsNCiAgICA+ICsgICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7 DQogICAgPiArICAgIH0NCiAgICA+ICsgIH0gZWxzZSB7DQogICAgPiArICAgIC8vDQogICAgPiAr ICAgIC8vIEluIExvY2tlZCBTdGF0ZQ0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICBpZiAobU1v ckxvY2tLZXlFbXB0eSB8fCAoRGF0YVNpemUgIT0gTU9SX0xPQ0tfVjJfS0VZX1NJWkUpKSB7DQog ICAgPiArICAgICAgcmV0dXJuIEVGSV9BQ0NFU1NfREVOSUVEOw0KICAgID4gKyAgICB9DQogICAg PiArDQogICAgPiArICAgIGlmICgoQ29tcGFyZU1lbSAoRGF0YSwgbU1vckxvY2tLZXksIE1PUl9M T0NLX1YyX0tFWV9TSVpFKSA9PSAwKSkgew0KICAgID4gKyAgICAgIC8vDQogICAgPiArICAgICAg Ly8gS2V5IG1hdGNoIC0gdW5sb2NrDQogICAgPiArICAgICAgLy8NCiAgICA+ICsNCiAgICA+ICsg ICAgICAvLw0KICAgID4gKyAgICAgIC8vIE5lZWQgc2V0IGhlcmUgYmVjYXVzZSB0aGUgZGF0YSB2 YWx1ZSBvbiBmbGFzaCBpcyBkaWZmZXJlbnQNCiAgICA+ICsgICAgICAvLw0KICAgID4gKyAgICAg IFN0YXR1cyA9IFNldE1vckxvY2tWYXJpYWJsZSAoTU9SX0xPQ0tfREFUQV9VTkxPQ0tFRCk7DQog ICAgPiArICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgID4gKyAgICAgICAgLy8N CiAgICA+ICsgICAgICAgIC8vIFNldFZhciBmYWlsDQogICAgPiArICAgICAgICAvLw0KICAgID4g KyAgICAgICAgcmV0dXJuIFN0YXR1czsNCiAgICA+ICsgICAgICB9IGVsc2Ugew0KICAgID4gKyAg ICAgICAgLy8NCiAgICA+ICsgICAgICAgIC8vIFVubG9jayBTdWNjZXNzDQogICAgPiArICAgICAg ICAvLw0KICAgID4gKyAgICAgICAgbU1vckxvY2tTdGF0ZSAgICA9IE1vckxvY2tTdGF0ZVVubG9j a2VkOw0KICAgID4gKyAgICAgICAgbU1vckxvY2tLZXlFbXB0eSA9IFRSVUU7DQogICAgPiArICAg ICAgICBaZXJvTWVtIChtTW9yTG9ja0tleSwgc2l6ZW9mIChtTW9yTG9ja0tleSkpOw0KICAgID4g KyAgICAgICAgLy8NCiAgICA+ICsgICAgICAgIC8vIHJldHVybiBFRklfQUxSRUFEWV9TVEFSVEVE IHRvIHNraXAgdmFyaWFibGUgc2V0Lg0KICAgID4gKyAgICAgICAgLy8NCiAgICA+ICsgICAgICAg IHJldHVybiBFRklfQUxSRUFEWV9TVEFSVEVEOw0KICAgID4gKyAgICAgIH0NCiAgICA+ICsgICAg fSBlbHNlIHsNCiAgICA+ICsgICAgICAvLw0KICAgID4gKyAgICAgIC8vIEtleSBtaXNtYXRjaCAt IFByZXZlbnQgRGljdGlvbmFyeSBBdHRhY2sNCiAgICA+ICsgICAgICAvLw0KICAgID4gKyAgICAg IG1Nb3JMb2NrU3RhdGUgICAgPSBNb3JMb2NrU3RhdGVMb2NrZWQ7DQogICAgPiArICAgICAgbU1v ckxvY2tLZXlFbXB0eSA9IFRSVUU7DQogICAgPiArICAgICAgWmVyb01lbSAobU1vckxvY2tLZXks IHNpemVvZiAobU1vckxvY2tLZXkpKTsNCiAgICA+ICsgICAgICByZXR1cm4gRUZJX0FDQ0VTU19E RU5JRUQ7DQogICAgPiArICAgIH0NCiAgICA+ICsgIH0NCiAgICA+ICt9DQogICAgPiArDQogICAg PiArLyoqDQogICAgPiArICBUaGlzIHNlcnZpY2UgaXMgYW4gTU9SL01vckxvY2sgY2hlY2tlciBo YW5kbGVyIGZvciB0aGUgU2V0VmFyaWFibGUoKS4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbVtp bl0gIFZhcmlhYmxlTmFtZSB0aGUgbmFtZSBvZiB0aGUgdmVuZG9yJ3MgdmFyaWFibGUsIGFzIGEN CiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBOdWxsLVRlcm1pbmF0ZWQgVW5pY29k ZSBTdHJpbmcNCiAgICA+ICsgIEBwYXJhbVtpbl0gIFZlbmRvckd1aWQgICBVbmlmeSBpZGVudGlm aWVyIGZvciB2ZW5kb3IuDQogICAgPiArICBAcGFyYW1baW5dICBBdHRyaWJ1dGVzICAgQXR0cmli dXRlcyBiaXRtYXNrIHRvIHNldCBmb3IgdGhlIHZhcmlhYmxlLg0KICAgID4gKyAgQHBhcmFtW2lu XSAgRGF0YVNpemUgICAgIFRoZSBzaXplIGluIGJ5dGVzIG9mIERhdGEtQnVmZmVyLg0KICAgID4g KyAgQHBhcmFtW2luXSAgRGF0YSAgICAgICAgIFBvaW50IHRvIHRoZSBjb250ZW50IG9mIHRoZSB2 YXJpYWJsZS4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwgIEVGSV9TVUNDRVNTICAgICAgICAg ICAgVGhlIE1PUi9Nb3JMb2NrIGNoZWNrIHBhc3MsIGFuZCBWYXJpYWJsZQ0KICAgID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXIgY2FuIHN0b3JlIHRoZSB2YXJpYWJs ZSBkYXRhLg0KICAgID4gKyAgQHJldHZhbCAgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBUaGUgTU9S L01vckxvY2sgZGF0YSBvciBkYXRhIHNpemUgb3INCiAgICA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYXR0cmlidXRlcyBpcyBub3QgYWxsb3dlZCBmb3IgTU9SIHZhcmlhYmxl Lg0KICAgID4gKyAgQHJldHZhbCAgRUZJX0FDQ0VTU19ERU5JRUQgICAgICBUaGUgTU9SL01vckxv Y2sgaXMgbG9ja2VkLg0KICAgID4gKyAgQHJldHZhbCAgRUZJX0FMUkVBRFlfU1RBUlRFRCAgICBU aGUgTW9yTG9jayB2YXJpYWJsZSBpcyBoYW5kbGVkIGluc2lkZSB0aGlzDQogICAgPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLiBWYXJpYWJsZSBkcml2ZXIgY2Fu IGp1c3QgcmV0dXJuDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVG SV9TVUNDRVNTLg0KICAgID4gKyoqLw0KICAgID4gK0VGSV9TVEFUVVMNCiAgICA+ICtTZXRWYXJp YWJsZUNoZWNrSGFuZGxlck1vciAoDQogICAgPiArICBJTiBDSEFSMTYgICAgKlZhcmlhYmxlTmFt ZSwNCiAgICA+ICsgIElOIEVGSV9HVUlEICAqVmVuZG9yR3VpZCwNCiAgICA+ICsgIElOIFVJTlQz MiAgICBBdHRyaWJ1dGVzLA0KICAgID4gKyAgSU4gVUlOVE4gICAgIERhdGFTaXplLA0KICAgID4g KyAgSU4gVk9JRCAgICAgICpEYXRhDQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgLy8N CiAgICA+ICsgIC8vIGRvIG5vdCBoYW5kbGUgbm9uLU1PUiB2YXJpYWJsZQ0KICAgID4gKyAgLy8N CiAgICA+ICsgIGlmICghSXNBbnlNb3JWYXJpYWJsZSAoVmFyaWFibGVOYW1lLCBWZW5kb3JHdWlk KSkgew0KICAgID4gKyAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQogICAgPiArICB9DQogICAgPiAr DQogICAgPiArICAvLyBQZXJtaXQgZGVsZXRpb24gd2hlbiBwb2xpY3kgaXMgZGlzYWJsZWQuDQog ICAgPiArICBpZiAoIUlzVmFyaWFibGVQb2xpY3lFbmFibGVkICgpICYmICgoQXR0cmlidXRlcyA9 PSAwKSB8fCAoRGF0YVNpemUgPT0gMCkpKSB7DQogICAgPiArICAgIHJldHVybiBFRklfU1VDQ0VT UzsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIC8vDQogICAgPiArICAvLyBNb3JMb2Nr IHZhcmlhYmxlDQogICAgPiArICAvLw0KICAgID4gKyAgaWYgKElzTW9yTG9ja1ZhcmlhYmxlIChW YXJpYWJsZU5hbWUsIFZlbmRvckd1aWQpKSB7DQogICAgPiArICAgIHJldHVybiBTZXRWYXJpYWJs ZUNoZWNrSGFuZGxlck1vckxvY2sgKA0KICAgID4gKyAgICAgICAgICAgICBWYXJpYWJsZU5hbWUs DQogICAgPiArICAgICAgICAgICAgIFZlbmRvckd1aWQsDQogICAgPiArICAgICAgICAgICAgIEF0 dHJpYnV0ZXMsDQogICAgPiArICAgICAgICAgICAgIERhdGFTaXplLA0KICAgID4gKyAgICAgICAg ICAgICBEYXRhDQogICAgPiArICAgICAgICAgICAgICk7DQogICAgPiArICB9DQogICAgPiArDQog ICAgPiArICAvLw0KICAgID4gKyAgLy8gTW9yIFZhcmlhYmxlDQogICAgPiArICAvLw0KICAgID4g Kw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIFBlcm1pdCBkZWxldGlvbiBmb3IgcGFzc3RocnUg cmVxdWVzdC4NCiAgICA+ICsgIC8vDQogICAgPiArICBpZiAoKChBdHRyaWJ1dGVzID09IDApIHx8 IChEYXRhU2l6ZSA9PSAwKSkgJiYgbU1vclBhc3NUaHJ1KSB7DQogICAgPiArICAgIHJldHVybiBF RklfU1VDQ0VTUzsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIC8vDQogICAgPiArICAv LyBCYXNpYyBDaGVjaw0KICAgID4gKyAgLy8NCiAgICA+ICsgIGlmICgoQXR0cmlidXRlcyAhPSAo RUZJX1ZBUklBQkxFX05PTl9WT0xBVElMRSB8DQogICAgPiBFRklfVkFSSUFCTEVfQk9PVFNFUlZJ Q0VfQUNDRVNTIHwgRUZJX1ZBUklBQkxFX1JVTlRJTUVfQUNDRVNTKSkgfHwNCiAgICA+ICsgICAg ICAoRGF0YVNpemUgIT0gc2l6ZW9mIChVSU5UOCkpIHx8DQogICAgPiArICAgICAgKERhdGEgPT0g TlVMTCkpDQogICAgPiArICB7DQogICAgPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVU RVI7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICBpZiAobU1vckxvY2tTdGF0ZSA9PSBN b3JMb2NrU3RhdGVMb2NrZWQpIHsNCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgLy8gSWYgbG9j aywgZGVueSBhY2Nlc3MNCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgcmV0dXJuIEVGSV9BQ0NF U1NfREVOSUVEOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8v IGdyYW50IGFjY2Vzcw0KICAgID4gKyAgLy8NCiAgICA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsN CiAgICA+ICt9DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBJbml0aWFsaXphdGlvbiBm b3IgTU9SIENvbnRyb2wgTG9jay4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgIE1vckxvY2sgaW5pdGlhbGl6YXRpb24gc3VjY2Vzcy4NCiAgICA+ICsgIEByZXR1cm4g T3RoZXJzICAgICAgICAgIFNvbWUgZXJyb3Igb2NjdXJzLg0KICAgID4gKyoqLw0KICAgID4gK0VG SV9TVEFUVVMNCiAgICA+ICtNb3JMb2NrSW5pdCAoDQogICAgPiArICBWT0lEDQogICAgPiArICAp DQogICAgPiArew0KICAgID4gKyAgbU1vckxvY2tJbml0aWFsaXphdGlvblJlcXVpcmVkID0gVFJV RTsNCiAgICA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCiAgICA+ICt9DQogICAgPiArDQogICAg PiArLyoqDQogICAgPiArICBEZWxheWVkIGluaXRpYWxpemF0aW9uIGZvciBNT1IgQ29udHJvbCBM b2NrIGF0IEVuZE9mRHhlLg0KICAgID4gKw0KICAgID4gKyAgVGhpcyBmdW5jdGlvbiBwZXJmb3Jt cyBhbnkgb3BlcmF0aW9ucyBxdWV1ZWQgYnkgTW9yTG9ja0luaXQoKS4NCiAgICA+ICsqKi8NCiAg ICA+ICtWT0lEDQogICAgPiArTW9yTG9ja0luaXRBdEVuZE9mRHhlICgNCiAgICA+ICsgIFZPSUQN CiAgICA+ICsgICkNCiAgICA+ICt7DQogICAgPiArICBVSU5UTiAgICAgICAgICAgICAgICAgIE1v clNpemU7DQogICAgPiArICBFRklfU1RBVFVTICAgICAgICAgICAgIE1vclN0YXR1czsNCiAgICA+ ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgU3RhdHVzOw0KICAgID4gKyAgVkFSSUFCTEVfUE9M SUNZX0VOVFJZICAqTmV3UG9saWN5Ow0KICAgID4gKw0KICAgID4gKyAgaWYgKCFtTW9yTG9ja0lu aXRpYWxpemF0aW9uUmVxdWlyZWQpIHsNCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgLy8gVGhl IEVGSV9TTU1fRkFVTFRfVE9MRVJBTlRfV1JJVEVfUFJPVE9DT0wgaGFzIG5ldmVyIGJlZW4NCiAg ICA+IGluc3RhbGxlZCwgdGh1cw0KICAgID4gKyAgICAvLyB0aGUgdmFyaWFibGUgd3JpdGUgc2Vy dmljZSBpcyB1bmF2YWlsYWJsZS4gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLg0KICAgID4gKyAg ICAvLw0KICAgID4gKyAgICBBU1NFUlQgKEZBTFNFKTsNCiAgICA+ICsgICAgcmV0dXJuOw0KICAg ID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIENoZWNrIGlmIHRoZSBN T1IgdmFyaWFibGUgZXhpc3RzLg0KICAgID4gKyAgLy8NCiAgICA+ICsgIE1vclNpemUgICA9IDA7 DQogICAgPiArICBNb3JTdGF0dXMgPSBWYXJpYWJsZVNlcnZpY2VHZXRWYXJpYWJsZSAoDQogICAg PiArICAgICAgICAgICAgICAgIE1FTU9SWV9PVkVSV1JJVEVfUkVRVUVTVF9WQVJJQUJMRV9OQU1F LA0KICAgID4gKyAgICAgICAgICAgICAgICAmZ0VmaU1lbW9yeU92ZXJ3cml0ZUNvbnRyb2xEYXRh R3VpZCwNCiAgICA+ICsgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8vIEF0dHJpYnV0ZXMNCiAgICA+ICsgICAgICAgICAgICAgICAgJk1vclNp emUsDQogICAgPiArICAgICAgICAgICAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvLyBEYXRhDQogICAgPiArICAgICAgICAgICAgICAgICk7DQogICAgPiArICAv Lw0KICAgID4gKyAgLy8gV2UgcHJvdmlkZWQgYSB6ZXJvLXNpemVkIGJ1ZmZlciwgc28gdGhlIGFi b3ZlIGNhbGwgY2FuIG5ldmVyIHN1Y2NlZWQuDQogICAgPiArICAvLw0KICAgID4gKyAgQVNTRVJU IChFRklfRVJST1IgKE1vclN0YXR1cykpOw0KICAgID4gKw0KICAgID4gKyAgaWYgKE1vclN0YXR1 cyA9PSBFRklfQlVGRkVSX1RPT19TTUFMTCkgew0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICAv LyBUaGUgTU9SIHZhcmlhYmxlIGV4aXN0cy4NCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgLy8g U29tZSBPU2VzIGRvbid0IGZvbGxvdyB0aGUgVENHJ3MgUGxhdGZvcm0gUmVzZXQgQXR0YWNrIE1p dGlnYXRpb24gc3BlYw0KICAgID4gKyAgICAvLyBpbiB0aGF0IHRoZSBPUyBzaG91bGQgbmV2ZXIg Y3JlYXRlIHRoZSBNT1IgdmFyaWFibGUsIG9ubHkgcmVhZCBhbmQgd3JpdGUNCiAgICA+ICsgICAg Ly8gaXQgLS0gdGhlc2UgT1NlcyAodW5pbnRlbnRpb25hbGx5KSBjcmVhdGUgTU9SIGlmIHRoZSBw bGF0Zm9ybSBmaXJtd2FyZQ0KICAgID4gKyAgICAvLyBkb2VzIG5vdCBwcm9kdWNlIGl0LiBXaGV0 aGVyIHRoaXMgaXMgdGhlIGNhc2UgKGZyb20gdGhlIGxhc3QgT1MgYm9vdCkNCiAgICA+ICsgICAg Ly8gY2FuIGJlIGRlZHVjZWQgZnJvbSB0aGUgYWJzZW5jZSBvZiB0aGUgVENHIC8gVENHMiBwcm90 b2NvbHMsIGFzIGVkazIncw0KICAgID4gKyAgICAvLyBNT1IgaW1wbGVtZW50YXRpb24gZGVwZW5k cyBvbiAob25lIG9mKSB0aG9zZSBwcm90b2NvbHMuDQogICAgPiArICAgIC8vDQogICAgPiArICAg IGlmIChWYXJpYWJsZUhhdmVUY2dQcm90b2NvbHMgKCkpIHsNCiAgICA+ICsgICAgICAvLw0KICAg ID4gKyAgICAgIC8vIFRoZSBNT1IgdmFyaWFibGUgb3JpZ2luYXRlcyBmcm9tIHRoZSBwbGF0Zm9y bSBmaXJtd2FyZTsgc2V0IHRoZSBNT1INCiAgICA+ICsgICAgICAvLyBDb250cm9sIExvY2sgdmFy aWFibGUgdG8gcmVwb3J0IHRoZSBsb2NraW5nIGNhcGFiaWxpdHkgdG8gdGhlIE9TLg0KICAgID4g KyAgICAgIC8vDQogICAgPiArICAgICAgU2V0TW9yTG9ja1ZhcmlhYmxlICgwKTsNCiAgICA+ICsg ICAgICByZXR1cm47DQogICAgPiArICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgLy8NCiAgICA+ ICsgICAgLy8gVGhlIE1PUiB2YXJpYWJsZSdzIG9yaWdpbiBpcyBpbmV4cGxpY2FibGU7IGRlbGV0 ZSBpdC4NCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgREVCVUcgKCgNCiAgICA+ICsgICAgICBE RUJVR19XQVJOLA0KICAgID4gKyAgICAgICIlYTogZGVsZXRpbmcgdW5leHBlY3RlZCAvIHVuc3Vw cG9ydGVkIHZhcmlhYmxlICVnOiVzXG4iLA0KICAgID4gKyAgICAgIF9fRlVOQ1RJT05fXywNCiAg ICA+ICsgICAgICAmZ0VmaU1lbW9yeU92ZXJ3cml0ZUNvbnRyb2xEYXRhR3VpZCwNCiAgICA+ICsg ICAgICBNRU1PUllfT1ZFUldSSVRFX1JFUVVFU1RfVkFSSUFCTEVfTkFNRQ0KICAgID4gKyAgICAg ICkpOw0KICAgID4gKw0KICAgID4gKyAgICBtTW9yUGFzc1RocnUgPSBUUlVFOw0KICAgID4gKyAg ICBWYXJpYWJsZVNlcnZpY2VTZXRWYXJpYWJsZSAoDQogICAgPiArICAgICAgTUVNT1JZX09WRVJX UklURV9SRVFVRVNUX1ZBUklBQkxFX05BTUUsDQogICAgPiArICAgICAgJmdFZmlNZW1vcnlPdmVy d3JpdGVDb250cm9sRGF0YUd1aWQsDQogICAgPiArICAgICAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8vIEF0dHJpYnV0ZXMNCiAgICA+ICsgICAgICAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YVNpemUNCiAgICA+ICsgICAgICBO VUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YQ0KICAgID4gKyAg ICAgICk7DQogICAgPiArICAgIG1Nb3JQYXNzVGhydSA9IEZBTFNFOw0KICAgID4gKyAgfQ0KICAg ID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIFRoZSBNT1IgdmFyaWFibGUgaXMgYWJzZW50 OyB0aGUgcGxhdGZvcm0gZmlybXdhcmUgZG9lcyBub3Qgc3VwcG9ydCBpdC4NCiAgICA+ICsgIC8v IExvY2sgdGhlIHZhcmlhYmxlIHNvIHRoYXQgbm8gb3RoZXIgbW9kdWxlIG1heSBjcmVhdGUgaXQu DQogICAgPiArICAvLw0KICAgID4gKyAgTmV3UG9saWN5ID0gTlVMTDsNCiAgICA+ICsgIFN0YXR1 cyAgICA9IENyZWF0ZUJhc2ljVmFyaWFibGVQb2xpY3kgKA0KICAgID4gKyAgICAgICAgICAgICAg ICAmZ0VmaU1lbW9yeU92ZXJ3cml0ZUNvbnRyb2xEYXRhR3VpZCwNCiAgICA+ICsgICAgICAgICAg ICAgICAgTUVNT1JZX09WRVJXUklURV9SRVFVRVNUX1ZBUklBQkxFX05BTUUsDQogICAgPiArICAg ICAgICAgICAgICAgIFZBUklBQkxFX1BPTElDWV9OT19NSU5fU0laRSwNCiAgICA+ICsgICAgICAg ICAgICAgICAgVkFSSUFCTEVfUE9MSUNZX05PX01BWF9TSVpFLA0KICAgID4gKyAgICAgICAgICAg ICAgICBWQVJJQUJMRV9QT0xJQ1lfTk9fTVVTVF9BVFRSLA0KICAgID4gKyAgICAgICAgICAgICAg ICBWQVJJQUJMRV9QT0xJQ1lfTk9fQ0FOVF9BVFRSLA0KICAgID4gKyAgICAgICAgICAgICAgICBW QVJJQUJMRV9QT0xJQ1lfVFlQRV9MT0NLX05PVywNCiAgICA+ICsgICAgICAgICAgICAgICAgJk5l d1BvbGljeQ0KICAgID4gKyAgICAgICAgICAgICAgICApOw0KICAgID4gKyAgaWYgKCFFRklfRVJS T1IgKFN0YXR1cykpIHsNCiAgICA+ICsgICAgU3RhdHVzID0gUmVnaXN0ZXJWYXJpYWJsZVBvbGlj eSAoTmV3UG9saWN5KTsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCiAgICA+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhIC0gRmFp bGVkIHRvIGxvY2sgdmFyaWFibGUgJXMhICVyXG4iLA0KICAgID4gX19GVU5DVElPTl9fLCBNRU1P UllfT1ZFUldSSVRFX1JFUVVFU1RfVkFSSUFCTEVfTkFNRSwgU3RhdHVzKSk7DQogICAgPiArICAg IEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiAr ICBpZiAoTmV3UG9saWN5ICE9IE5VTEwpIHsNCiAgICA+ICsgICAgRnJlZVBvb2wgKE5ld1BvbGlj eSk7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICAvLw0KICAgID4gKyAgLy8gRGVsZXRl IHRoZSBNT1IgQ29udHJvbCBMb2NrIHZhcmlhYmxlIHRvbyAoc2hvdWxkIGl0IGV4aXN0cyBmb3Ig c29tZQ0KICAgID4gKyAgLy8gcmVhc29uKSBhbmQgcHJldmVudCBvdGhlciBtb2R1bGVzIGZyb20g Y3JlYXRpbmcgaXQuDQogICAgPiArICAvLw0KICAgID4gKyAgbU1vckxvY2tQYXNzVGhydSA9IFRS VUU7DQogICAgPiArICBWYXJpYWJsZVNlcnZpY2VTZXRWYXJpYWJsZSAoDQogICAgPiArICAgIE1F TU9SWV9PVkVSV1JJVEVfUkVRVUVTVF9DT05UUk9MX0xPQ0tfTkFNRSwNCiAgICA+ICsgICAgJmdF ZmlNZW1vcnlPdmVyd3JpdGVSZXF1ZXN0Q29udHJvbExvY2tHdWlkLA0KICAgID4gKyAgICAwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0dHJpYnV0ZXMNCiAg ICA+ICsgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBE YXRhU2l6ZQ0KICAgID4gKyAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8vIERhdGENCiAgICA+ICsgICAgKTsNCiAgICA+ICsgIG1Nb3JMb2NrUGFzc1RocnUg PSBGQUxTRTsNCiAgICA+ICsNCiAgICA+ICsgIE5ld1BvbGljeSA9IE5VTEw7DQogICAgPiArICBT dGF0dXMgICAgPSBDcmVhdGVCYXNpY1ZhcmlhYmxlUG9saWN5ICgNCiAgICA+ICsgICAgICAgICAg ICAgICAgJmdFZmlNZW1vcnlPdmVyd3JpdGVSZXF1ZXN0Q29udHJvbExvY2tHdWlkLA0KICAgID4g KyAgICAgICAgICAgICAgICBNRU1PUllfT1ZFUldSSVRFX1JFUVVFU1RfQ09OVFJPTF9MT0NLX05B TUUsDQogICAgPiArICAgICAgICAgICAgICAgIFZBUklBQkxFX1BPTElDWV9OT19NSU5fU0laRSwN CiAgICA+ICsgICAgICAgICAgICAgICAgVkFSSUFCTEVfUE9MSUNZX05PX01BWF9TSVpFLA0KICAg ID4gKyAgICAgICAgICAgICAgICBWQVJJQUJMRV9QT0xJQ1lfTk9fTVVTVF9BVFRSLA0KICAgID4g KyAgICAgICAgICAgICAgICBWQVJJQUJMRV9QT0xJQ1lfTk9fQ0FOVF9BVFRSLA0KICAgID4gKyAg ICAgICAgICAgICAgICBWQVJJQUJMRV9QT0xJQ1lfVFlQRV9MT0NLX05PVywNCiAgICA+ICsgICAg ICAgICAgICAgICAgJk5ld1BvbGljeQ0KICAgID4gKyAgICAgICAgICAgICAgICApOw0KICAgID4g KyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCiAgICA+ICsgICAgU3RhdHVzID0gUmVnaXN0 ZXJWYXJpYWJsZVBvbGljeSAoTmV3UG9saWN5KTsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCiAgICA+ICsgICAgREVCVUcgKChERUJVR19F UlJPUiwgIiVhIC0gRmFpbGVkIHRvIGxvY2sgdmFyaWFibGUgJXMhICVyXG4iLA0KICAgID4gX19G VU5DVElPTl9fLCBNRU1PUllfT1ZFUldSSVRFX1JFUVVFU1RfQ09OVFJPTF9MT0NLX05BTUUsDQog ICAgPiBTdGF0dXMpKTsNCiAgICA+ICsgICAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCiAg ICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIGlmIChOZXdQb2xpY3kgIT0gTlVMTCkgew0KICAg ID4gKyAgICBGcmVlUG9vbCAoTmV3UG9saWN5KTsNCiAgICA+ICsgIH0NCiAgICA+ICt9DQogICAg PiBkaWZmIC0tZ2l0DQogICAgPiBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJv dGVjdGVkL1J1bnRpbWVEeGUvVmFyQ2hlY2suYw0KICAgID4gYi9NZGVNb2R1bGVQa2cvVW5pdmVy c2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhckNoZWNrLmMNCiAgICA+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQogICAgPiBpbmRleCAwMDAwMDAwMDAwMDAuLmE5NGIwYjAyZWMxNQ0K ICAgID4gLS0tIC9kZXYvbnVsbA0KICAgID4gKysrIGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9W YXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJDaGVjay5jDQogICAgPiBAQCAtMCwwICsx LDEwMSBAQA0KICAgID4gKy8qKiBAZmlsZQ0KICAgID4gKyAgSW1wbGVtZW50YXRpb24gZnVuY3Rp b25zIGFuZCBzdHJ1Y3R1cmVzIGZvciB2YXIgY2hlY2sgcHJvdG9jb2wNCiAgICA+ICsgIGFuZCB2 YXJpYWJsZSBsb2NrIHByb3RvY29sIGJhc2VkIG9uIFZhckNoZWNrTGliLg0KICAgID4gKw0KICAg ID4gK0NvcHlyaWdodCAoYykgMjAxNSwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVz ZXJ2ZWQuPEJSPg0KICAgID4gK0NvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLg0K ICAgID4gK1NQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQogICAg PiArDQogICAgPiArKiovDQogICAgPiArDQogICAgPiArI2luY2x1ZGUgIlZhcmlhYmxlLmgiDQog ICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBSZWdpc3RlciBTZXRWYXJpYWJsZSBjaGVjayBo YW5kbGVyLg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtW2luXSBIYW5kbGVyICAgICAgICAgICAg UG9pbnRlciB0byBjaGVjayBoYW5kbGVyLg0KICAgID4gKw0KICAgID4gKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICAgVGhlIFNldFZhcmlhYmxlIGNoZWNrIGhhbmRsZXIgd2FzIHJlZ2lz dGVyZWQNCiAgICA+IHN1Y2Nlc3NmdWxseS4NCiAgICA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURf UEFSQU1FVEVSIEhhbmRsZXIgaXMgTlVMTC4NCiAgICA+ICsgIEByZXR2YWwgRUZJX0FDQ0VTU19E RU5JRUQgICAgIEVGSV9FTkRfT0ZfRFhFX0VWRU5UX0dST1VQX0dVSUQgb3INCiAgICA+IEVGSV9F VkVOVF9HUk9VUF9SRUFEWV9UT19CT09UIGhhcw0KICAgID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYWxyZWFkeSBiZWVuIHNpZ25hbGVkLg0KICAgID4gKyAgQHJldHZhbCBFRklf T1VUX09GX1JFU09VUkNFUyAgVGhlcmUgaXMgbm90IGVub3VnaCByZXNvdXJjZSBmb3IgdGhlDQog ICAgPiBTZXRWYXJpYWJsZSBjaGVjayBoYW5kbGVyIHJlZ2lzdGVyIHJlcXVlc3QuDQogICAgPiAr ICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBUaGlzIGludGVyZmFjZSBpcyBub3QgaW1w bGVtZW50ZWQuDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhh bXBsZSwgaXQgaXMgdW5zdXBwb3J0ZWQgaW4gVmFyQ2hlY2sgcHJvdG9jb2wgaWYgYm90aA0KICAg ID4gVmFyQ2hlY2sgYW5kIFNtbVZhckNoZWNrIHByb3RvY29scyBhcmUgcHJlc2VudC4NCiAgICA+ ICsNCiAgICA+ICsqKi8NCiAgICA+ICtFRklfU1RBVFVTDQogICAgPiArRUZJQVBJDQogICAgPiAr VmFyQ2hlY2tSZWdpc3RlclNldFZhcmlhYmxlQ2hlY2tIYW5kbGVyICgNCiAgICA+ICsgIElOIFZB Ul9DSEVDS19TRVRfVkFSSUFCTEVfQ0hFQ0tfSEFORExFUiAgSGFuZGxlcg0KICAgID4gKyAgKQ0K ICAgID4gK3sNCiAgICA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCiAgICA+ICsNCiAgICA+ICsg IEFjcXVpcmVMb2NrT25seUF0Qm9vdFRpbWUgKCZtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQogICAg PiA+VmFyaWFibGVHbG9iYWwuVmFyaWFibGVTZXJ2aWNlc0xvY2spOw0KICAgID4gKyAgU3RhdHVz ID0gVmFyQ2hlY2tMaWJSZWdpc3RlclNldFZhcmlhYmxlQ2hlY2tIYW5kbGVyIChIYW5kbGVyKTsN CiAgICA+ICsgIFJlbGVhc2VMb2NrT25seUF0Qm9vdFRpbWUgKCZtVmFyaWFibGVNb2R1bGVHbG9i YWwtDQogICAgPiA+VmFyaWFibGVHbG9iYWwuVmFyaWFibGVTZXJ2aWNlc0xvY2spOw0KICAgID4g Kw0KICAgID4gKyAgcmV0dXJuIFN0YXR1czsNCiAgICA+ICt9DQogICAgPiArDQogICAgPiArLyoq DQogICAgPiArICBWYXJpYWJsZSBwcm9wZXJ0eSBzZXQuDQogICAgPiArDQogICAgPiArICBAcGFy YW1baW5dIE5hbWUgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSB2YXJpYWJsZSBuYW1lLg0K ICAgID4gKyAgQHBhcmFtW2luXSBHdWlkICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgdmVu ZG9yIEdVSUQuDQogICAgPiArICBAcGFyYW1baW5dIFZhcmlhYmxlUHJvcGVydHkgICBQb2ludGVy IHRvIHRoZSBpbnB1dCB2YXJpYWJsZSBwcm9wZXJ0eS4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2 YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBwcm9wZXJ0eSBvZiB2YXJpYWJsZSBzcGVjaWZp ZWQgYnkgdGhlIE5hbWUNCiAgICA+IGFuZCBHdWlkIHdhcyBzZXQgc3VjY2Vzc2Z1bGx5Lg0KICAg ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgTmFtZSwgR3VpZCBvciBWYXJpYWJs ZVByb3BlcnR5IGlzIE5VTEwsDQogICAgPiBvciBOYW1lIGlzIGFuIGVtcHR5IHN0cmluZywNCiAg ICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHRoZSBmaWVsZHMgb2YgVmFy aWFibGVQcm9wZXJ0eSBhcmUgbm90IHZhbGlkLg0KICAgID4gKyAgQHJldHZhbCBFRklfQUNDRVNT X0RFTklFRCAgICAgRUZJX0VORF9PRl9EWEVfRVZFTlRfR1JPVVBfR1VJRCBvcg0KICAgID4gRUZJ X0VWRU5UX0dST1VQX1JFQURZX1RPX0JPT1QgaGFzDQogICAgPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhbHJlYWR5IGJlZW4gc2lnbmFsZWQuDQogICAgPiArICBAcmV0dmFsIEVG SV9PVVRfT0ZfUkVTT1VSQ0VTICBUaGVyZSBpcyBub3QgZW5vdWdoIHJlc291cmNlIGZvciB0aGUN CiAgICA+IHZhcmlhYmxlIHByb3BlcnR5IHNldCByZXF1ZXN0Lg0KICAgID4gKw0KICAgID4gKyoq Lw0KICAgID4gK0VGSV9TVEFUVVMNCiAgICA+ICtFRklBUEkNCiAgICA+ICtWYXJDaGVja1Zhcmlh YmxlUHJvcGVydHlTZXQgKA0KICAgID4gKyAgSU4gQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAg ICAqTmFtZSwNCiAgICA+ICsgIElOIEVGSV9HVUlEICAgICAgICAgICAgICAgICAgICAgKkd1aWQs DQogICAgPiArICBJTiBWQVJfQ0hFQ0tfVkFSSUFCTEVfUFJPUEVSVFkgICpWYXJpYWJsZVByb3Bl cnR5DQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0K ICAgID4gKw0KICAgID4gKyAgQWNxdWlyZUxvY2tPbmx5QXRCb290VGltZSAoJm1WYXJpYWJsZU1v ZHVsZUdsb2JhbC0NCiAgICA+ID5WYXJpYWJsZUdsb2JhbC5WYXJpYWJsZVNlcnZpY2VzTG9jayk7 DQogICAgPiArICBTdGF0dXMgPSBWYXJDaGVja0xpYlZhcmlhYmxlUHJvcGVydHlTZXQgKE5hbWUs IEd1aWQsIFZhcmlhYmxlUHJvcGVydHkpOw0KICAgID4gKyAgUmVsZWFzZUxvY2tPbmx5QXRCb290 VGltZSAoJm1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCiAgICA+ID5WYXJpYWJsZUdsb2JhbC5WYXJp YWJsZVNlcnZpY2VzTG9jayk7DQogICAgPiArDQogICAgPiArICByZXR1cm4gU3RhdHVzOw0KICAg ID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIFZhcmlhYmxlIHByb3BlcnR5IGdl dC4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbVtpbl0gIE5hbWUgICAgICAgICAgICAgIFBvaW50 ZXIgdG8gdGhlIHZhcmlhYmxlIG5hbWUuDQogICAgPiArICBAcGFyYW1baW5dICBHdWlkICAgICAg ICAgICAgICBQb2ludGVyIHRvIHRoZSB2ZW5kb3IgR1VJRC4NCiAgICA+ICsgIEBwYXJhbVtvdXRd IFZhcmlhYmxlUHJvcGVydHkgIFBvaW50ZXIgdG8gdGhlIG91dHB1dCB2YXJpYWJsZSBwcm9wZXJ0 eS4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBw cm9wZXJ0eSBvZiB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgdGhlIE5hbWUNCiAgICA+IGFuZCBHdWlk IHdhcyBnb3Qgc3VjY2Vzc2Z1bGx5Lg0KICAgID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJB TUVURVIgTmFtZSwgR3VpZCBvciBWYXJpYWJsZVByb3BlcnR5IGlzIE5VTEwsDQogICAgPiBvciBO YW1lIGlzIGFuIGVtcHR5IHN0cmluZy4NCiAgICA+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAg ICAgICAgIFRoZSBwcm9wZXJ0eSBvZiB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgdGhlIE5hbWUNCiAg ICA+IGFuZCBHdWlkIHdhcyBub3QgZm91bmQuDQogICAgPiArDQogICAgPiArKiovDQogICAgPiAr RUZJX1NUQVRVUw0KICAgID4gK0VGSUFQSQ0KICAgID4gK1ZhckNoZWNrVmFyaWFibGVQcm9wZXJ0 eUdldCAoDQogICAgPiArICBJTiBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAqTmFtZSwN CiAgICA+ICsgIElOIEVGSV9HVUlEICAgICAgICAgICAgICAgICAgICAgICpHdWlkLA0KICAgID4g KyAgT1VUIFZBUl9DSEVDS19WQVJJQUJMRV9QUk9QRVJUWSAgKlZhcmlhYmxlUHJvcGVydHkNCiAg ICA+ICsgICkNCiAgICA+ICt7DQogICAgPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQogICAgPiAr DQogICAgPiArICBBY3F1aXJlTG9ja09ubHlBdEJvb3RUaW1lICgmbVZhcmlhYmxlTW9kdWxlR2xv YmFsLQ0KICAgID4gPlZhcmlhYmxlR2xvYmFsLlZhcmlhYmxlU2VydmljZXNMb2NrKTsNCiAgICA+ ICsgIFN0YXR1cyA9IFZhckNoZWNrTGliVmFyaWFibGVQcm9wZXJ0eUdldCAoTmFtZSwgR3VpZCwg VmFyaWFibGVQcm9wZXJ0eSk7DQogICAgPiArICBSZWxlYXNlTG9ja09ubHlBdEJvb3RUaW1lICgm bVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KICAgID4gPlZhcmlhYmxlR2xvYmFsLlZhcmlhYmxlU2Vy dmljZXNMb2NrKTsNCiAgICA+ICsNCiAgICA+ICsgIHJldHVybiBTdGF0dXM7DQogICAgPiArfQ0K ICAgID4gZGlmZiAtLWdpdA0KICAgID4gYS9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxl L1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlLmMNCiAgICA+IGIvTWRlTW9kdWxlUGtnL1Vu aXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZS5jDQogICAgPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgID4gaW5kZXggMDAwMDAwMDAwMDAwLi4xOWI0MzJiNzcy ZDcNCiAgICA+IC0tLSAvZGV2L251bGwNCiAgICA+ICsrKyBiL01kZU1vZHVsZVBrZy9Vbml2ZXJz YWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGUuYw0KICAgID4gQEAgLTAs MCArMSw0MDM3IEBADQogICAgPiArLyoqIEBmaWxlDQogICAgPiArICBUaGUgY29tbW9uIHZhcmlh YmxlIG9wZXJhdGlvbiByb3V0aW5lcyBzaGFyZWQgYnkgRFhFX1JVTlRJTUUgdmFyaWFibGUNCiAg ICA+ICsgIG1vZHVsZSBhbmQgRFhFX1NNTSB2YXJpYWJsZSBtb2R1bGUuDQogICAgPiArDQogICAg PiArICBDYXV0aW9uOiBUaGlzIG1vZHVsZSByZXF1aXJlcyBhZGRpdGlvbmFsIHJldmlldyB3aGVu IG1vZGlmaWVkLg0KICAgID4gKyAgVGhpcyBkcml2ZXIgd2lsbCBoYXZlIGV4dGVybmFsIGlucHV0 IC0gdmFyaWFibGUgZGF0YS4gVGhleSBtYXkgYmUgaW5wdXQgaW4gU01NDQogICAgPiBtb2RlLg0K ICAgID4gKyAgVGhpcyBleHRlcm5hbCBpbnB1dCBtdXN0IGJlIHZhbGlkYXRlZCBjYXJlZnVsbHkg dG8gYXZvaWQgc2VjdXJpdHkgaXNzdWUgbGlrZQ0KICAgID4gKyAgYnVmZmVyIG92ZXJmbG93LCBp bnRlZ2VyIG92ZXJmbG93Lg0KICAgID4gKw0KICAgID4gKyAgVmFyaWFibGVTZXJ2aWNlR2V0TmV4 dFZhcmlhYmxlTmFtZSAoKSBhbmQNCiAgICA+IFZhcmlhYmxlU2VydmljZVF1ZXJ5VmFyaWFibGVJ bmZvKCkgYXJlIGV4dGVybmFsIEFQSS4NCiAgICA+ICsgIFRoZXkgbmVlZCBjaGVjayBpbnB1dCBw YXJhbWV0ZXIuDQogICAgPiArDQogICAgPiArICBWYXJpYWJsZVNlcnZpY2VHZXRWYXJpYWJsZSgp IGFuZCBWYXJpYWJsZVNlcnZpY2VTZXRWYXJpYWJsZSgpIGFyZSBleHRlcm5hbCBBUEkNCiAgICA+ ICsgIHRvIHJlY2VpdmUgZGF0YXNpemUgYW5kIGRhdGEgYnVmZmVyLiBUaGUgc2l6ZSBzaG91bGQg YmUgY2hlY2tlZCBjYXJlZnVsbHkuDQogICAgPiArDQogICAgPiArICBWYXJpYWJsZVNlcnZpY2VT ZXRWYXJpYWJsZSgpIHNob3VsZCBhbHNvIGNoZWNrIGF1dGhlbnRpY2F0ZSBkYXRhIHRvIGF2b2lk DQogICAgPiBidWZmZXIgb3ZlcmZsb3csDQogICAgPiArICBpbnRlZ2VyIG92ZXJmbG93LiBJdCBz aG91bGQgYWxzbyBjaGVjayBhdHRyaWJ1dGUgdG8gYXZvaWQgYXV0aGVudGljYXRpb24gYnlwYXNz Lg0KICAgID4gKw0KICAgID4gK0NvcHlyaWdodCAoYykgMjAwNiAtIDIwMjIsIEludGVsIENvcnBv cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCiAgICA+ICsoQykgQ29weXJpZ2h0IDIw MTUtMjAxOCBIZXdsZXR0IFBhY2thcmQgRW50ZXJwcmlzZSBEZXZlbG9wbWVudCBMUDxCUj4NCiAg ICA+ICtDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi48QlI+DQogICAgPiArQ29w eXJpZ2h0IChjKSAyMDIyLCBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQog ICAgPiArDQogICAgPiArU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRl bnQNCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICsNCiAgICA+ICsjaW5jbHVkZSAiVmFyaWFi bGUuaCINCiAgICA+ICsjaW5jbHVkZSAiVmFyaWFibGVOb25Wb2xhdGlsZS5oIg0KICAgID4gKyNp bmNsdWRlICJWYXJpYWJsZVBhcnNpbmcuaCINCiAgICA+ICsjaW5jbHVkZSAiVmFyaWFibGVSdW50 aW1lQ2FjaGUuaCINCiAgICA+ICsNCiAgICA+ICtWQVJJQUJMRV9NT0RVTEVfR0xPQkFMICAqbVZh cmlhYmxlTW9kdWxlR2xvYmFsID0gTlVMTDsNCiAgICA+ICsNCiAgICA+ICsvLy8NCiAgICA+ICsv Ly8gRGVmaW5lIGEgbWVtb3J5IGNhY2hlIHRoYXQgaW1wcm92ZXMgdGhlIHNlYXJjaCBwZXJmb3Jt YW5jZSBmb3IgYQ0KICAgID4gdmFyaWFibGUuDQogICAgPiArLy8vIEZvciBFbXVOdk1vZGUgPT0g VFJVRSwgaXQgd2lsbCBiZSBlcXVhbCB0byBOb25Wb2xhdGlsZVZhcmlhYmxlQmFzZS4NCiAgICA+ ICsvLy8NCiAgICA+ICtWQVJJQUJMRV9TVE9SRV9IRUFERVIgICptTnZWYXJpYWJsZUNhY2hlID0g TlVMTDsNCiAgICA+ICsNCiAgICA+ICsvLy8NCiAgICA+ICsvLy8gTWVtb3J5IGNhY2hlIG9mIEZ2 IEhlYWRlci4NCiAgICA+ICsvLy8NCiAgICA+ICtFRklfRklSTVdBUkVfVk9MVU1FX0hFQURFUiAg Km1OdkZ2SGVhZGVyQ2FjaGUgPSBOVUxMOw0KICAgID4gKw0KICAgID4gKy8vLw0KICAgID4gKy8v LyBUaGUgbWVtb3J5IGVudHJ5IHVzZWQgZm9yIHZhcmlhYmxlIHN0YXRpc3RpY3MgZGF0YS4NCiAg ICA+ICsvLy8NCiAgICA+ICtWQVJJQUJMRV9JTkZPX0VOVFJZICAqZ1ZhcmlhYmxlSW5mbyA9IE5V TEw7DQogICAgPiArDQogICAgPiArLy8vDQogICAgPiArLy8vIFRoZSBmbGFnIHRvIGluZGljYXRl IHdoZXRoZXIgdGhlIHBsYXRmb3JtIGhhcyBsZWZ0IHRoZSBEWEUgcGhhc2Ugb2YNCiAgICA+IGV4 ZWN1dGlvbi4NCiAgICA+ICsvLy8NCiAgICA+ICtCT09MRUFOICBtRW5kT2ZEeGUgPSBGQUxTRTsN CiAgICA+ICsNCiAgICA+ICsvLy8NCiAgICA+ICsvLy8gSXQgaW5kaWNhdGVzIHRoZSB2YXIgY2hl Y2sgcmVxdWVzdCBzb3VyY2UuDQogICAgPiArLy8vIEluIHRoZSBpbXBsZW1lbnRhdGlvbiwgRFhF IGlzIHJlZ2FyZGVkIGFzIHVudHJ1c3RlZCwgYW5kIFNNTSBpcyB0cnVzdGVkLg0KICAgID4gKy8v Lw0KICAgID4gK1ZBUl9DSEVDS19SRVFVRVNUX1NPVVJDRSAgbVJlcXVlc3RTb3VyY2UgPSBWYXJD aGVja0Zyb21VbnRydXN0ZWQ7DQogICAgPiArDQogICAgPiArLy8NCiAgICA+ICsvLyBJdCB3aWxs IHJlY29yZCB0aGUgY3VycmVudCBib290IGVycm9yIGZsYWcgYmVmb3JlIEVuZE9mRHhlLg0KICAg ID4gKy8vDQogICAgPiArVkFSX0VSUk9SX0ZMQUcgIG1DdXJyZW50Qm9vdFZhckVyckZsYWcgPSBW QVJfRVJST1JfRkxBR19OT19FUlJPUjsNCiAgICA+ICsNCiAgICA+ICtWQVJJQUJMRV9FTlRSWV9Q Uk9QRVJUWSAgbVZhcmlhYmxlRW50cnlQcm9wZXJ0eVtdID0gew0KICAgID4gKyAgew0KICAgID4g KyAgICAmZ0Vka2lpVmFyRXJyb3JGbGFnR3VpZCwNCiAgICA+ICsgICAgVkFSX0VSUk9SX0ZMQUdf TkFNRSwNCiAgICA+ICsgICAgew0KICAgID4gKyAgICAgIFZBUl9DSEVDS19WQVJJQUJMRV9QUk9Q RVJUWV9SRVZJU0lPTiwNCiAgICA+ICsgICAgICBWQVJfQ0hFQ0tfVkFSSUFCTEVfUFJPUEVSVFlf UkVBRF9PTkxZLA0KICAgID4gKyAgICAgIFZBUklBQkxFX0FUVFJJQlVURV9OVl9CU19SVCwNCiAg ICA+ICsgICAgICBzaXplb2YgKFZBUl9FUlJPUl9GTEFHKSwNCiAgICA+ICsgICAgICBzaXplb2Yg KFZBUl9FUlJPUl9GTEFHKQ0KICAgID4gKyAgICB9DQogICAgPiArICB9LA0KICAgID4gK307DQog ICAgPiArDQogICAgPiArQVVUSF9WQVJfTElCX0NPTlRFWFRfSU4gIG1BdXRoQ29udGV4dEluID0g ew0KICAgID4gKyAgQVVUSF9WQVJfTElCX0NPTlRFWFRfSU5fU1RSVUNUX1ZFUlNJT04sDQogICAg PiArICAvLw0KICAgID4gKyAgLy8gU3RydWN0U2l6ZSwgVE8gQkUgRklMTEVEDQogICAgPiArICAv Lw0KICAgID4gKyAgMCwNCiAgICA+ICsgIC8vDQogICAgPiArICAvLyBNYXhBdXRoVmFyaWFibGVT aXplLCBUTyBCRSBGSUxMRUQNCiAgICA+ICsgIC8vDQogICAgPiArICAwLA0KICAgID4gKyAgVmFy aWFibGVFeExpYkZpbmRWYXJpYWJsZSwNCiAgICA+ICsgIFZhcmlhYmxlRXhMaWJGaW5kTmV4dFZh cmlhYmxlLA0KICAgID4gKyAgVmFyaWFibGVFeExpYlVwZGF0ZVZhcmlhYmxlLA0KICAgID4gKyAg VmFyaWFibGVFeExpYkdldFNjcmF0Y2hCdWZmZXIsDQogICAgPiArICBWYXJpYWJsZUV4TGliQ2hl Y2tSZW1haW5pbmdTcGFjZUZvckNvbnNpc3RlbmN5LA0KICAgID4gKyAgVmFyaWFibGVFeExpYkF0 UnVudGltZSwNCiAgICA+ICt9Ow0KICAgID4gKw0KICAgID4gK0FVVEhfVkFSX0xJQl9DT05URVhU X09VVCAgbUF1dGhDb250ZXh0T3V0Ow0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKw0KICAg ID4gKyAgVGhpcyBmdW5jdGlvbiB3cml0ZXMgZGF0YSB0byB0aGUgRldIIGF0IHRoZSBjb3JyZWN0 IExCQSBldmVuIGlmIHRoZSBMQkFzDQogICAgPiArICBhcmUgZnJhZ21lbnRlZC4NCiAgICA+ICsN CiAgICA+ICsgIEBwYXJhbSBHbG9iYWwgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIFZBUkFJ QkxFX0dMT0JBTCBzdHJ1Y3R1cmUuDQogICAgPiArICBAcGFyYW0gVm9sYXRpbGUgICAgICAgICAg ICAgICAgUG9pbnQgb3V0IHRoZSBWYXJpYWJsZSBpcyBWb2xhdGlsZSBvciBOb24tVm9sYXRpbGUu DQogICAgPiArICBAcGFyYW0gU2V0QnlJbmRleCAgICAgICAgICAgICAgVFJVRSBpZiB0YXJnZXQg cG9pbnRlciBpcyBnaXZlbiBhcyBpbmRleC4NCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGQUxTRSBpZiB0YXJnZXQgcG9pbnRlciBpcyBhYnNvbHV0ZS4NCiAgICA+ICsg IEBwYXJhbSBGdmIgICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSB3cml0YWJsZSBG VkIgcHJvdG9jb2wuDQogICAgPiArICBAcGFyYW0gRGF0YVB0ckluZGV4ICAgICAgICAgICAgUG9p bnRlciB0byB0aGUgRGF0YSBmcm9tIHRoZSBlbmQgb2YNCiAgICA+IFZBUklBQkxFX1NUT1JFX0hF QURFUg0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS4N CiAgICA+ICsgIEBwYXJhbSBEYXRhU2l6ZSAgICAgICAgICAgICAgICBTaXplIG9mIGRhdGEgdG8g YmUgd3JpdHRlbi4NCiAgICA+ICsgIEBwYXJhbSBCdWZmZXIgICAgICAgICAgICAgICAgICBQb2lu dGVyIHRvIHRoZSBidWZmZXIgZnJvbSB3aGljaCBkYXRhIGlzIHdyaXR0ZW4uDQogICAgPiArDQog ICAgPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgUGFyYW1ldGVycyBub3QgdmFs aWQuDQogICAgPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgRnZiIGlzIGEgTlVM TCBmb3IgTm9uLVZvbGF0aWxlIHZhcmlhYmxlDQogICAgPiB1cGRhdGUuDQogICAgPiArICBAcmV0 dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgVGhlIHJlbWFpbmluZyBzaXplIGlzIG5vdCBlbm91 Z2guDQogICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVmFyaWFibGUgc3Rv cmUgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQuDQogICAgPiArDQogICAgPiArKiovDQogICAgPiArRUZJ X1NUQVRVUw0KICAgID4gK1VwZGF0ZVZhcmlhYmxlU3RvcmUgKA0KICAgID4gKyAgSU4gIFZBUklB QkxFX0dMT0JBTCAgICAgICAgICAgICAgICAgICAgICpHbG9iYWwsDQogICAgPiArICBJTiAgQk9P TEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVm9sYXRpbGUsDQogICAgPiArICBJTiAg Qk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0QnlJbmRleCwNCiAgICA+ICsg IElOICBFRklfRklSTVdBUkVfVk9MVU1FX0JMT0NLX1BST1RPQ09MICAqRnZiLA0KICAgID4gKyAg SU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFQdHJJbmRleCwNCiAg ICA+ICsgIElOICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhU2l6ZSwN CiAgICA+ICsgIElOICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQnVmZmVy DQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgRUZJX0ZWX0JMT0NLX01BUF9FTlRSWSAg KlB0ckJsb2NrTWFwRW50cnk7DQogICAgPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICBCbG9j a0luZGV4MjsNCiAgICA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgIExpbmVhck9mZnNldDsN CiAgICA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgIEN1cnJXcml0ZVNpemU7DQogICAgPiAr ICBVSU5UTiAgICAgICAgICAgICAgICAgICBDdXJyV3JpdGVQdHI7DQogICAgPiArICBVSU5UOCAg ICAgICAgICAgICAgICAgICAqQ3VyckJ1ZmZlcjsNCiAgICA+ICsgIEVGSV9MQkEgICAgICAgICAg ICAgICAgIExiYU51bWJlcjsNCiAgICA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgIFNpemU7 DQogICAgPiArICBWQVJJQUJMRV9TVE9SRV9IRUFERVIgICAqVm9sYXRpbGVCYXNlOw0KICAgID4g KyAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgRnZWb2xIZHI7DQogICAgPiArICBFRklfUEhZU0lD QUxfQUREUkVTUyAgICBEYXRhUHRyOw0KICAgID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAg U3RhdHVzOw0KICAgID4gKw0KICAgID4gKyAgRnZWb2xIZHIgPSAwOw0KICAgID4gKyAgRGF0YVB0 ciAgPSBEYXRhUHRySW5kZXg7DQogICAgPiArDQogICAgPiArICAvLw0KICAgID4gKyAgLy8gQ2hl Y2sgaWYgdGhlIERhdGEgaXMgVm9sYXRpbGUuDQogICAgPiArICAvLw0KICAgID4gKyAgaWYgKCFW b2xhdGlsZSAmJiAhbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5FbXVOdk1v ZGUpIHsNCiAgICA+ICsgICAgaWYgKEZ2YiA9PSBOVUxMKSB7DQogICAgPiArICAgICAgcmV0dXJu IEVGSV9VTlNVUFBPUlRFRDsNCiAgICA+ICsgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICBTdGF0 dXMgPSBGdmItPkdldFBoeXNpY2FsQWRkcmVzcyAoRnZiLCAmRnZWb2xIZHIpOw0KICAgID4gKyAg ICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KICAgID4gKw0KICAgID4gKyAgICAvLw0KICAg ID4gKyAgICAvLyBEYXRhIFBvaW50ZXIgc2hvdWxkIHBvaW50IHRvIHRoZSBhY3R1YWwgQWRkcmVz cyB3aGVyZSBkYXRhIGlzIHRvIGJlDQogICAgPiArICAgIC8vIHdyaXR0ZW4uDQogICAgPiArICAg IC8vDQogICAgPiArICAgIGlmIChTZXRCeUluZGV4KSB7DQogICAgPiArICAgICAgRGF0YVB0ciAr PSBtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQogICAgPiA+VmFyaWFibGVHbG9iYWwuTm9uVm9sYXRp bGVWYXJpYWJsZUJhc2U7DQogICAgPiArICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgaWYgKChE YXRhUHRyICsgRGF0YVNpemUpID4gKEZ2Vm9sSGRyICsgbU52RnZIZWFkZXJDYWNoZS0+RnZMZW5n dGgpKSB7DQogICAgPiArICAgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KICAgID4g KyAgICB9DQogICAgPiArICB9IGVsc2Ugew0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICAvLyBE YXRhIFBvaW50ZXIgc2hvdWxkIHBvaW50IHRvIHRoZSBhY3R1YWwgQWRkcmVzcyB3aGVyZSBkYXRh IGlzIHRvIGJlDQogICAgPiArICAgIC8vIHdyaXR0ZW4uDQogICAgPiArICAgIC8vDQogICAgPiAr ICAgIGlmIChWb2xhdGlsZSkgew0KICAgID4gKyAgICAgIFZvbGF0aWxlQmFzZSA9IChWQVJJQUJM RV9TVE9SRV9IRUFERVINCiAgICA+ICopKChVSU5UTiltVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZh cmlhYmxlR2xvYmFsLlZvbGF0aWxlVmFyaWFibGVCYXNlKTsNCiAgICA+ICsgICAgICBpZiAoU2V0 QnlJbmRleCkgew0KICAgID4gKyAgICAgICAgRGF0YVB0ciArPSBtVmFyaWFibGVNb2R1bGVHbG9i YWwtPlZhcmlhYmxlR2xvYmFsLlZvbGF0aWxlVmFyaWFibGVCYXNlOw0KICAgID4gKyAgICAgIH0N CiAgICA+ICsNCiAgICA+ICsgICAgICBpZiAoKERhdGFQdHIgKyBEYXRhU2l6ZSkgPiAoKFVJTlRO KVZvbGF0aWxlQmFzZSArIFZvbGF0aWxlQmFzZS0+U2l6ZSkpIHsNCiAgICA+ICsgICAgICAgIHJl dHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCiAgICA+ICsgICAgICB9DQogICAgPiArICAgIH0g ZWxzZSB7DQogICAgPiArICAgICAgLy8NCiAgICA+ICsgICAgICAvLyBFbXVsYXRlZCBub24tdm9s YXRpbGUgdmFyaWFibGUgbW9kZS4NCiAgICA+ICsgICAgICAvLw0KICAgID4gKyAgICAgIGlmIChT ZXRCeUluZGV4KSB7DQogICAgPiArICAgICAgICBEYXRhUHRyICs9IChVSU5UTiltTnZWYXJpYWJs ZUNhY2hlOw0KICAgID4gKyAgICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgICBpZiAoKERhdGFQ dHIgKyBEYXRhU2l6ZSkgPiAoKFVJTlROKW1OdlZhcmlhYmxlQ2FjaGUgKyBtTnZWYXJpYWJsZUNh Y2hlLQ0KICAgID4gPlNpemUpKSB7DQogICAgPiArICAgICAgICByZXR1cm4gRUZJX09VVF9PRl9S RVNPVVJDRVM7DQogICAgPiArICAgICAgfQ0KICAgID4gKyAgICB9DQogICAgPiArDQogICAgPiAr ICAgIC8vDQogICAgPiArICAgIC8vIElmIFZvbGF0aWxlL0VtdWxhdGVkIE5vbi12b2xhdGlsZSBW YXJpYWJsZSBqdXN0IGRvIGEgc2ltcGxlIG1lbSBjb3B5Lg0KICAgID4gKyAgICAvLw0KICAgID4g KyAgICBDb3B5TWVtICgoVUlOVDggKikoVUlOVE4pRGF0YVB0ciwgQnVmZmVyLCBEYXRhU2l6ZSk7 DQogICAgPiArICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAg ICA+ICsgIC8vDQogICAgPiArICAvLyBJZiB3ZSBhcmUgaGVyZSB3ZSBhcmUgZGVhbGluZyB3aXRo IE5vbi1Wb2xhdGlsZSBWYXJpYWJsZXMuDQogICAgPiArICAvLw0KICAgID4gKyAgTGluZWFyT2Zm c2V0ICA9IChVSU5UTilGdlZvbEhkcjsNCiAgICA+ICsgIEN1cnJXcml0ZVB0ciAgPSAoVUlOVE4p RGF0YVB0cjsNCiAgICA+ICsgIEN1cnJXcml0ZVNpemUgPSBEYXRhU2l6ZTsNCiAgICA+ICsgIEN1 cnJCdWZmZXIgICAgPSBCdWZmZXI7DQogICAgPiArICBMYmFOdW1iZXIgICAgID0gMDsNCiAgICA+ ICsNCiAgICA+ICsgIGlmIChDdXJyV3JpdGVQdHIgPCBMaW5lYXJPZmZzZXQpIHsNCiAgICA+ICsg ICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAg ICA+ICsgIGZvciAoUHRyQmxvY2tNYXBFbnRyeSA9IG1OdkZ2SGVhZGVyQ2FjaGUtPkJsb2NrTWFw OyBQdHJCbG9ja01hcEVudHJ5LQ0KICAgID4gPk51bUJsb2NrcyAhPSAwOyBQdHJCbG9ja01hcEVu dHJ5KyspIHsNCiAgICA+ICsgICAgZm9yIChCbG9ja0luZGV4MiA9IDA7IEJsb2NrSW5kZXgyIDwg UHRyQmxvY2tNYXBFbnRyeS0+TnVtQmxvY2tzOw0KICAgID4gQmxvY2tJbmRleDIrKykgew0KICAg ID4gKyAgICAgIC8vDQogICAgPiArICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBWYXJpYWJs ZSBXcml0ZXMgYXJlIHNwYW5uaW5nIHRocm91Z2ggbXVsdGlwbGUNCiAgICA+ICsgICAgICAvLyBi bG9ja3MuDQogICAgPiArICAgICAgLy8NCiAgICA+ICsgICAgICBpZiAoKEN1cnJXcml0ZVB0ciA+ PSBMaW5lYXJPZmZzZXQpICYmIChDdXJyV3JpdGVQdHIgPCBMaW5lYXJPZmZzZXQgKw0KICAgID4g UHRyQmxvY2tNYXBFbnRyeS0+TGVuZ3RoKSkgew0KICAgID4gKyAgICAgICAgaWYgKChDdXJyV3Jp dGVQdHIgKyBDdXJyV3JpdGVTaXplKSA8PSAoTGluZWFyT2Zmc2V0ICsgUHRyQmxvY2tNYXBFbnRy eS0NCiAgICA+ID5MZW5ndGgpKSB7DQogICAgPiArICAgICAgICAgIFN0YXR1cyA9IEZ2Yi0+V3Jp dGUgKA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgRnZiLA0KICAgID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgTGJhTnVtYmVyLA0KICAgID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgKFVJTlROKShDdXJyV3JpdGVQdHIgLSBMaW5lYXJPZmZzZXQpLA0KICAgID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgJkN1cnJXcml0ZVNpemUsDQogICAgPiArICAgICAgICAg ICAgICAgICAgICAgICAgICBDdXJyQnVmZmVyDQogICAgPiArICAgICAgICAgICAgICAgICAgICAg ICAgICApOw0KICAgID4gKyAgICAgICAgICByZXR1cm4gU3RhdHVzOw0KICAgID4gKyAgICAgICAg fSBlbHNlIHsNCiAgICA+ICsgICAgICAgICAgU2l6ZSAgID0gKFVJTlQzMikoTGluZWFyT2Zmc2V0 ICsgUHRyQmxvY2tNYXBFbnRyeS0+TGVuZ3RoIC0NCiAgICA+IEN1cnJXcml0ZVB0cik7DQogICAg PiArICAgICAgICAgIFN0YXR1cyA9IEZ2Yi0+V3JpdGUgKA0KICAgID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgRnZiLA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgTGJhTnVt YmVyLA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgKFVJTlROKShDdXJyV3JpdGVQ dHIgLSBMaW5lYXJPZmZzZXQpLA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgJlNp emUsDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJyQnVmZmVyDQogICAgPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgID4gKyAgICAgICAgICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQogICAgPiArICAgICAgICAgICAgcmV0dXJuIFN0YXR1czsNCiAgICA+ ICsgICAgICAgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICAgICAgICBDdXJyV3JpdGVQdHIgID0g TGluZWFyT2Zmc2V0ICsgUHRyQmxvY2tNYXBFbnRyeS0+TGVuZ3RoOw0KICAgID4gKyAgICAgICAg ICBDdXJyQnVmZmVyICAgID0gQ3VyckJ1ZmZlciArIFNpemU7DQogICAgPiArICAgICAgICAgIEN1 cnJXcml0ZVNpemUgPSBDdXJyV3JpdGVTaXplIC0gU2l6ZTsNCiAgICA+ICsgICAgICAgIH0NCiAg ICA+ICsgICAgICB9DQogICAgPiArDQogICAgPiArICAgICAgTGluZWFyT2Zmc2V0ICs9IFB0ckJs b2NrTWFwRW50cnktPkxlbmd0aDsNCiAgICA+ICsgICAgICBMYmFOdW1iZXIrKzsNCiAgICA+ICsg ICAgfQ0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0K ICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIFJlY29yZCB2YXJpYWJsZSBl cnJvciBmbGFnLg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtW2luXSBGbGFnICAgICAgICAgICAg ICAgVmFyaWFibGUgZXJyb3IgZmxhZyB0byByZWNvcmQuDQogICAgPiArICBAcGFyYW1baW5dIFZh cmlhYmxlTmFtZSAgICAgICBOYW1lIG9mIHZhcmlhYmxlLg0KICAgID4gKyAgQHBhcmFtW2luXSBW ZW5kb3JHdWlkICAgICAgICAgR3VpZCBvZiB2YXJpYWJsZS4NCiAgICA+ICsgIEBwYXJhbVtpbl0g QXR0cmlidXRlcyAgICAgICAgIEF0dHJpYnV0ZXMgb2YgdGhlIHZhcmlhYmxlLg0KICAgID4gKyAg QHBhcmFtW2luXSBWYXJpYWJsZVNpemUgICAgICAgU2l6ZSBvZiB0aGUgdmFyaWFibGUuDQogICAg PiArDQogICAgPiArKiovDQogICAgPiArVk9JRA0KICAgID4gK1JlY29yZFZhckVycm9yRmxhZyAo DQogICAgPiArICBJTiBWQVJfRVJST1JfRkxBRyAgRmxhZywNCiAgICA+ICsgIElOIENIQVIxNiAg ICAgICAgICAqVmFyaWFibGVOYW1lLA0KICAgID4gKyAgSU4gRUZJX0dVSUQgICAgICAgICpWZW5k b3JHdWlkLA0KICAgID4gKyAgSU4gVUlOVDMyICAgICAgICAgIEF0dHJpYnV0ZXMsDQogICAgPiAr ICBJTiBVSU5UTiAgICAgICAgICAgVmFyaWFibGVTaXplDQogICAgPiArICApDQogICAgPiArew0K ICAgID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgU3RhdHVzOw0KICAgID4gKyAgVkFSSUFC TEVfUE9JTlRFUl9UUkFDSyAgVmFyaWFibGU7DQogICAgPiArICBWQVJfRVJST1JfRkxBRyAgICAg ICAgICAqVmFyRXJyRmxhZzsNCiAgICA+ICsgIFZBUl9FUlJPUl9GTEFHICAgICAgICAgIFRlbXBG bGFnOw0KICAgID4gKw0KICAgID4gKyAgREVCVUdfQ09ERV9CRUdJTiAoKTsNCiAgICA+ICsgIERF QlVHICgoREVCVUdfRVJST1IsICJSZWNvcmRWYXJFcnJvckZsYWcgKDB4JTAyeCkgJXM6JWcgLSAw eCUwOHggLQ0KICAgID4gMHgleFxuIiwgRmxhZywgVmFyaWFibGVOYW1lLCBWZW5kb3JHdWlkLCBB dHRyaWJ1dGVzLCBWYXJpYWJsZVNpemUpKTsNCiAgICA+ICsgIGlmIChGbGFnID09IFZBUl9FUlJP Ul9GTEFHX1NZU1RFTV9FUlJPUikgew0KICAgID4gKyAgICBpZiAoQXRSdW50aW1lICgpKSB7DQog ICAgPiArICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkNvbW1vblJ1bnRpbWVWYXJpYWJsZVNw YWNlID0gMHgleCAtDQogICAgPiBDb21tb25WYXJpYWJsZVRvdGFsU2l6ZSA9IDB4JXhcbiIsIG1W YXJpYWJsZU1vZHVsZUdsb2JhbC0NCiAgICA+ID5Db21tb25SdW50aW1lVmFyaWFibGVTcGFjZSwg bVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KICAgID4gPkNvbW1vblZhcmlhYmxlVG90YWxTaXplKSk7 DQogICAgPiArICAgIH0gZWxzZSB7DQogICAgPiArICAgICAgREVCVUcgKChERUJVR19FUlJPUiwg IkNvbW1vblZhcmlhYmxlU3BhY2UgPSAweCV4IC0NCiAgICA+IENvbW1vblZhcmlhYmxlVG90YWxT aXplID0gMHgleFxuIiwgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KICAgID4gPkNvbW1vblZhcmlh YmxlU3BhY2UsIG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+Q29tbW9uVmFyaWFibGVUb3RhbFNpemUp KTsNCiAgICA+ICsgICAgfQ0KICAgID4gKyAgfSBlbHNlIHsNCiAgICA+ICsgICAgREVCVUcgKChE RUJVR19FUlJPUiwgIkNvbW1vbk1heFVzZXJWYXJpYWJsZVNwYWNlID0gMHgleCAtDQogICAgPiBD b21tb25Vc2VyVmFyaWFibGVUb3RhbFNpemUgPSAweCV4XG4iLCBtVmFyaWFibGVNb2R1bGVHbG9i YWwtDQogICAgPiA+Q29tbW9uTWF4VXNlclZhcmlhYmxlU3BhY2UsIG1WYXJpYWJsZU1vZHVsZUds b2JhbC0NCiAgICA+ID5Db21tb25Vc2VyVmFyaWFibGVUb3RhbFNpemUpKTsNCiAgICA+ICsgIH0N CiAgICA+ICsNCiAgICA+ICsgIERFQlVHX0NPREVfRU5EICgpOw0KICAgID4gKw0KICAgID4gKyAg aWYgKCFtRW5kT2ZEeGUpIHsNCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgLy8gQmVmb3JlIEVu ZE9mRHhlLCBqdXN0IHJlY29yZCB0aGUgY3VycmVudCBib290IHZhcmlhYmxlIGVycm9yIGZsYWcg dG8gbG9jYWwNCiAgICA+IHZhcmlhYmxlLA0KICAgID4gKyAgICAvLyBhbmQgbGVhdmUgdGhlIHZh cmlhYmxlIGVycm9yIGZsYWcgaW4gTlYgZmxhc2ggYXMgdGhlIGxhc3QgYm9vdCB2YXJpYWJsZSBl cnJvcg0KICAgID4gZmxhZy4NCiAgICA+ICsgICAgLy8gQWZ0ZXIgRW5kT2ZEeGUgaW4gSW5pdGlh bGl6ZVZhckVycm9yRmxhZyAoKSwgdGhlIHZhcmlhYmxlIGVycm9yIGZsYWcgaW4gTlYNCiAgICA+ IGZsYXNoDQogICAgPiArICAgIC8vIHdpbGwgYmUgaW5pdGlhbGl6ZWQgdG8gdGhpcyBsb2NhbCBj dXJyZW50IGJvb3QgdmFyaWFibGUgZXJyb3IgZmxhZy4NCiAgICA+ICsgICAgLy8NCiAgICA+ICsg ICAgbUN1cnJlbnRCb290VmFyRXJyRmxhZyAmPSBGbGFnOw0KICAgID4gKyAgICByZXR1cm47DQog ICAgPiArICB9DQogICAgPiArDQogICAgPiArICAvLw0KICAgID4gKyAgLy8gUmVjb3JkIGVycm9y IGZsYWcgKGl0IHNob3VsZCBoYXZlIGJlIGluaXRpYWxpemVkKS4NCiAgICA+ICsgIC8vDQogICAg PiArICBTdGF0dXMgPSBGaW5kVmFyaWFibGUgKA0KICAgID4gKyAgICAgICAgICAgICBWQVJfRVJS T1JfRkxBR19OQU1FLA0KICAgID4gKyAgICAgICAgICAgICAmZ0Vka2lpVmFyRXJyb3JGbGFnR3Vp ZCwNCiAgICA+ICsgICAgICAgICAgICAgJlZhcmlhYmxlLA0KICAgID4gKyAgICAgICAgICAgICAm bVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbCwNCiAgICA+ICsgICAgICAgICAg ICAgRkFMU0UNCiAgICA+ICsgICAgICAgICAgICAgKTsNCiAgICA+ICsgIGlmICghRUZJX0VSUk9S IChTdGF0dXMpKSB7DQogICAgPiArICAgIFZhckVyckZsYWcgPSAoVkFSX0VSUk9SX0ZMQUcgKilH ZXRWYXJpYWJsZURhdGFQdHIgKFZhcmlhYmxlLkN1cnJQdHIsDQogICAgPiBtVmFyaWFibGVNb2R1 bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLkF1dGhGb3JtYXQpOw0KICAgID4gKyAgICBUZW1wRmxh ZyAgID0gKlZhckVyckZsYWc7DQogICAgPiArICAgIFRlbXBGbGFnICAmPSBGbGFnOw0KICAgID4g KyAgICBpZiAoVGVtcEZsYWcgPT0gKlZhckVyckZsYWcpIHsNCiAgICA+ICsgICAgICByZXR1cm47 DQogICAgPiArICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgU3RhdHVzID0gVXBkYXRlVmFyaWFi bGVTdG9yZSAoDQogICAgPiArICAgICAgICAgICAgICAgJm1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+ VmFyaWFibGVHbG9iYWwsDQogICAgPiArICAgICAgICAgICAgICAgRkFMU0UsDQogICAgPiArICAg ICAgICAgICAgICAgRkFMU0UsDQogICAgPiArICAgICAgICAgICAgICAgbVZhcmlhYmxlTW9kdWxl R2xvYmFsLT5GdmJJbnN0YW5jZSwNCiAgICA+ICsgICAgICAgICAgICAgICAoVUlOVE4pVmFyRXJy RmxhZyAtIChVSU5UTiltTnZWYXJpYWJsZUNhY2hlICsNCiAgICA+IChVSU5UTiltVmFyaWFibGVN b2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLk5vblZvbGF0aWxlVmFyaWFibGVCYXNlLA0KICAg ID4gKyAgICAgICAgICAgICAgIHNpemVvZiAoVGVtcEZsYWcpLA0KICAgID4gKyAgICAgICAgICAg ICAgICZUZW1wRmxhZw0KICAgID4gKyAgICAgICAgICAgICAgICk7DQogICAgPiArICAgIGlmICgh RUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAgPiArICAgICAgLy8NCiAgICA+ICsgICAgICAvLyBV cGRhdGUgdGhlIGRhdGEgaW4gTlYgY2FjaGUuDQogICAgPiArICAgICAgLy8NCiAgICA+ICsgICAg ICAqVmFyRXJyRmxhZyA9IFRlbXBGbGFnOw0KICAgID4gKyAgICAgIFN0YXR1cyAgICAgID0gIFN5 bmNocm9uaXplUnVudGltZVZhcmlhYmxlQ2FjaGUgKA0KICAgID4gKyAgICAgICAgICAgICAgICAg ICAgICAgJm1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCiAgICA+ID5WYXJpYWJsZUdsb2JhbC5WYXJp YWJsZVJ1bnRpbWVDYWNoZUNvbnRleHQuVmFyaWFibGVSdW50aW1lTnZDYWNoZSwNCiAgICA+ICsg ICAgICAgICAgICAgICAgICAgICAgIDAsDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICBt TnZWYXJpYWJsZUNhY2hlLT5TaXplDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICApOw0K ICAgID4gKyAgICAgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQogICAgPiArICAgIH0NCiAg ICA+ICsgIH0NCiAgICA+ICt9DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBJbml0aWFs aXplIHZhcmlhYmxlIGVycm9yIGZsYWcuDQogICAgPiArDQogICAgPiArICBCZWZvcmUgRW5kT2ZE eGUsIHRoZSB2YXJpYWJsZSBpbmRpY2F0ZXMgdGhlIGxhc3QgYm9vdCB2YXJpYWJsZSBlcnJvciBm bGFnLA0KICAgID4gKyAgdGhlbiBpdCBtZWFucyB0aGUgbGFzdCBib290IHZhcmlhYmxlIGVycm9y IGZsYWcgbXVzdCBiZSBnb3QgYmVmb3JlIEVuZE9mRHhlLg0KICAgID4gKyAgQWZ0ZXIgRW5kT2ZE eGUsIHRoZSB2YXJpYWJsZSBpbmRpY2F0ZXMgdGhlIGN1cnJlbnQgYm9vdCB2YXJpYWJsZSBlcnJv ciBmbGFnLA0KICAgID4gKyAgdGhlbiBpdCBtZWFucyB0aGUgY3VycmVudCBib290IHZhcmlhYmxl IGVycm9yIGZsYWcgbXVzdCBiZSBnb3QgYWZ0ZXIgRW5kT2ZEeGUuDQogICAgPiArDQogICAgPiAr KiovDQogICAgPiArVk9JRA0KICAgID4gK0luaXRpYWxpemVWYXJFcnJvckZsYWcgKA0KICAgID4g KyAgVk9JRA0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIEVGSV9TVEFUVVMgICAgICAg ICAgICAgIFN0YXR1czsNCiAgICA+ICsgIFZBUklBQkxFX1BPSU5URVJfVFJBQ0sgIFZhcmlhYmxl Ow0KICAgID4gKyAgVkFSX0VSUk9SX0ZMQUcgICAgICAgICAgRmxhZzsNCiAgICA+ICsgIFZBUl9F UlJPUl9GTEFHICAgICAgICAgIFZhckVyckZsYWc7DQogICAgPiArDQogICAgPiArICBpZiAoIW1F bmRPZkR4ZSkgew0KICAgID4gKyAgICByZXR1cm47DQogICAgPiArICB9DQogICAgPiArDQogICAg PiArICBGbGFnID0gbUN1cnJlbnRCb290VmFyRXJyRmxhZzsNCiAgICA+ICsgIERFQlVHICgoREVC VUdfSU5GTywgIkluaXRpYWxpemUgdmFyaWFibGUgZXJyb3IgZmxhZyAoJTAyeClcbiIsIEZsYWcp KTsNCiAgICA+ICsNCiAgICA+ICsgIFN0YXR1cyA9IEZpbmRWYXJpYWJsZSAoDQogICAgPiArICAg ICAgICAgICAgIFZBUl9FUlJPUl9GTEFHX05BTUUsDQogICAgPiArICAgICAgICAgICAgICZnRWRr aWlWYXJFcnJvckZsYWdHdWlkLA0KICAgID4gKyAgICAgICAgICAgICAmVmFyaWFibGUsDQogICAg PiArICAgICAgICAgICAgICZtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLA0K ICAgID4gKyAgICAgICAgICAgICBGQUxTRQ0KICAgID4gKyAgICAgICAgICAgICApOw0KICAgID4g KyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCiAgICA+ICsgICAgVmFyRXJyRmxhZyA9ICoo KFZBUl9FUlJPUl9GTEFHICopR2V0VmFyaWFibGVEYXRhUHRyIChWYXJpYWJsZS5DdXJyUHRyLA0K ICAgID4gbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0KSk7 DQogICAgPiArICAgIGlmIChWYXJFcnJGbGFnID09IEZsYWcpIHsNCiAgICA+ICsgICAgICByZXR1 cm47DQogICAgPiArICAgIH0NCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIFVwZGF0ZVZh cmlhYmxlICgNCiAgICA+ICsgICAgVkFSX0VSUk9SX0ZMQUdfTkFNRSwNCiAgICA+ICsgICAgJmdF ZGtpaVZhckVycm9yRmxhZ0d1aWQsDQogICAgPiArICAgICZGbGFnLA0KICAgID4gKyAgICBzaXpl b2YgKEZsYWcpLA0KICAgID4gKyAgICBWQVJJQUJMRV9BVFRSSUJVVEVfTlZfQlNfUlQsDQogICAg PiArICAgIDAsDQogICAgPiArICAgIDAsDQogICAgPiArICAgICZWYXJpYWJsZSwNCiAgICA+ICsg ICAgTlVMTA0KICAgID4gKyAgICApOw0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAg ICA+ICsgIElzIHVzZXIgdmFyaWFibGU/DQogICAgPiArDQogICAgPiArICBAcGFyYW1baW5dIFZh cmlhYmxlICAgUG9pbnRlciB0byB2YXJpYWJsZSBoZWFkZXIuDQogICAgPiArDQogICAgPiArICBA cmV0dmFsIFRSVUUgICAgICAgICAgVXNlciB2YXJpYWJsZS4NCiAgICA+ICsgIEByZXR2YWwgRkFM U0UgICAgICAgICBTeXN0ZW0gdmFyaWFibGUuDQogICAgPiArDQogICAgPiArKiovDQogICAgPiAr Qk9PTEVBTg0KICAgID4gK0lzVXNlclZhcmlhYmxlICgNCiAgICA+ICsgIElOIFZBUklBQkxFX0hF QURFUiAgKlZhcmlhYmxlDQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgVkFSX0NIRUNL X1ZBUklBQkxFX1BST1BFUlRZICBQcm9wZXJ0eTsNCiAgICA+ICsNCiAgICA+ICsgIC8vDQogICAg PiArICAvLyBPbmx5IGFmdGVyIEVuZCBPZiBEeGUsIHRoZSB2YXJpYWJsZXMgYmVsb25nIHRvIHN5 c3RlbSB2YXJpYWJsZSBhcmUgZml4ZWQuDQogICAgPiArICAvLyBJZiBQY2RNYXhVc2VyTnZTdG9y YWdlVmFyaWFibGVTaXplIGlzIDAsIGl0IG1lYW5zIHVzZXIgdmFyaWFibGUgc2hhcmUgdGhlDQog ICAgPiBzYW1lIE5WIHN0b3JhZ2Ugd2l0aCBzeXN0ZW0gdmFyaWFibGUsDQogICAgPiArICAvLyB0 aGVuIG5vIG5lZWQgdG8gY2hlY2sgaWYgdGhlIHZhcmlhYmxlIGlzIHVzZXIgdmFyaWFibGUgb3Ig bm90IHNwZWNpYWxseS4NCiAgICA+ICsgIC8vDQogICAgPiArICBpZiAobUVuZE9mRHhlICYmICht VmFyaWFibGVNb2R1bGVHbG9iYWwtDQogICAgPiA+Q29tbW9uTWF4VXNlclZhcmlhYmxlU3BhY2Ug IT0gbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KICAgID4gPkNvbW1vblZhcmlhYmxlU3BhY2UpKSB7 DQogICAgPiArICAgIGlmIChWYXJDaGVja0xpYlZhcmlhYmxlUHJvcGVydHlHZXQgKA0KICAgID4g KyAgICAgICAgICBHZXRWYXJpYWJsZU5hbWVQdHIgKFZhcmlhYmxlLCBtVmFyaWFibGVNb2R1bGVH bG9iYWwtDQogICAgPiA+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdCksDQogICAgPiArICAgICAg ICAgIEdldFZlbmRvckd1aWRQdHIgKFZhcmlhYmxlLCBtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQog ICAgPiA+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdCksDQogICAgPiArICAgICAgICAgICZQcm9w ZXJ0eQ0KICAgID4gKyAgICAgICAgICApID09IEVGSV9OT1RfRk9VTkQpDQogICAgPiArICAgIHsN CiAgICA+ICsgICAgICByZXR1cm4gVFJVRTsNCiAgICA+ICsgICAgfQ0KICAgID4gKyAgfQ0KICAg ID4gKw0KICAgID4gKyAgcmV0dXJuIEZBTFNFOw0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsv KioNCiAgICA+ICsgIENhbGN1bGF0ZSBjb21tb24gdXNlciB2YXJpYWJsZSB0b3RhbCBzaXplLg0K ICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK1ZPSUQNCiAgICA+ICtDYWxjdWxhdGVDb21tb25V c2VyVmFyaWFibGVUb3RhbFNpemUgKA0KICAgID4gKyAgVk9JRA0KICAgID4gKyAgKQ0KICAgID4g K3sNCiAgICA+ICsgIFZBUklBQkxFX0hFQURFUiAgICAgICAgICAgICAgKlZhcmlhYmxlOw0KICAg ID4gKyAgVkFSSUFCTEVfSEVBREVSICAgICAgICAgICAgICAqTmV4dFZhcmlhYmxlOw0KICAgID4g KyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZVNpemU7DQogICAgPiArICBW QVJfQ0hFQ0tfVkFSSUFCTEVfUFJPUEVSVFkgIFByb3BlcnR5Ow0KICAgID4gKw0KICAgID4gKyAg Ly8NCiAgICA+ICsgIC8vIE9ubHkgYWZ0ZXIgRW5kIE9mIER4ZSwgdGhlIHZhcmlhYmxlcyBiZWxv bmcgdG8gc3lzdGVtIHZhcmlhYmxlIGFyZSBmaXhlZC4NCiAgICA+ICsgIC8vIElmIFBjZE1heFVz ZXJOdlN0b3JhZ2VWYXJpYWJsZVNpemUgaXMgMCwgaXQgbWVhbnMgdXNlciB2YXJpYWJsZSBzaGFy ZSB0aGUNCiAgICA+IHNhbWUgTlYgc3RvcmFnZSB3aXRoIHN5c3RlbSB2YXJpYWJsZSwNCiAgICA+ ICsgIC8vIHRoZW4gbm8gbmVlZCB0byBjYWxjdWxhdGUgdGhlIGNvbW1vbiB1c2VyIHZhcmlhYmxl IHRvdGFsIHNpemUgc3BlY2lhbGx5Lg0KICAgID4gKyAgLy8NCiAgICA+ICsgIGlmIChtRW5kT2ZE eGUgJiYgKG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCiAgICA+ID5Db21tb25NYXhVc2VyVmFyaWFi bGVTcGFjZSAhPSBtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQogICAgPiA+Q29tbW9uVmFyaWFibGVT cGFjZSkpIHsNCiAgICA+ICsgICAgVmFyaWFibGUgPSBHZXRTdGFydFBvaW50ZXIgKG1OdlZhcmlh YmxlQ2FjaGUpOw0KICAgID4gKyAgICB3aGlsZSAoSXNWYWxpZFZhcmlhYmxlSGVhZGVyIChWYXJp YWJsZSwgR2V0RW5kUG9pbnRlciAobU52VmFyaWFibGVDYWNoZSksDQogICAgPiBtVmFyaWFibGVN b2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLkF1dGhGb3JtYXQpKSB7DQogICAgPiArICAgICAg TmV4dFZhcmlhYmxlID0gR2V0TmV4dFZhcmlhYmxlUHRyIChWYXJpYWJsZSwgbVZhcmlhYmxlTW9k dWxlR2xvYmFsLQ0KICAgID4gPlZhcmlhYmxlR2xvYmFsLkF1dGhGb3JtYXQpOw0KICAgID4gKyAg ICAgIFZhcmlhYmxlU2l6ZSA9IChVSU5UTilOZXh0VmFyaWFibGUgLSAoVUlOVE4pVmFyaWFibGU7 DQogICAgPiArICAgICAgaWYgKChWYXJpYWJsZS0+QXR0cmlidXRlcyAmIEVGSV9WQVJJQUJMRV9I QVJEV0FSRV9FUlJPUl9SRUNPUkQpICE9DQogICAgPiBFRklfVkFSSUFCTEVfSEFSRFdBUkVfRVJS T1JfUkVDT1JEKSB7DQogICAgPiArICAgICAgICBpZiAoVmFyQ2hlY2tMaWJWYXJpYWJsZVByb3Bl cnR5R2V0ICgNCiAgICA+ICsgICAgICAgICAgICAgIEdldFZhcmlhYmxlTmFtZVB0ciAoVmFyaWFi bGUsIG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCiAgICA+ID5WYXJpYWJsZUdsb2JhbC5BdXRoRm9y bWF0KSwNCiAgICA+ICsgICAgICAgICAgICAgIEdldFZlbmRvckd1aWRQdHIgKFZhcmlhYmxlLCBt VmFyaWFibGVNb2R1bGVHbG9iYWwtDQogICAgPiA+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdCks DQogICAgPiArICAgICAgICAgICAgICAmUHJvcGVydHkNCiAgICA+ICsgICAgICAgICAgICAgICkg PT0gRUZJX05PVF9GT1VORCkNCiAgICA+ICsgICAgICAgIHsNCiAgICA+ICsgICAgICAgICAgLy8N CiAgICA+ICsgICAgICAgICAgLy8gTm8gcHJvcGVydHksIGl0IGlzIHVzZXIgdmFyaWFibGUuDQog ICAgPiArICAgICAgICAgIC8vDQogICAgPiArICAgICAgICAgIG1WYXJpYWJsZU1vZHVsZUdsb2Jh bC0+Q29tbW9uVXNlclZhcmlhYmxlVG90YWxTaXplICs9IFZhcmlhYmxlU2l6ZTsNCiAgICA+ICsg ICAgICAgIH0NCiAgICA+ICsgICAgICB9DQogICAgPiArDQogICAgPiArICAgICAgVmFyaWFibGUg PSBOZXh0VmFyaWFibGU7DQogICAgPiArICAgIH0NCiAgICA+ICsgIH0NCiAgICA+ICt9DQogICAg PiArDQogICAgPiArLyoqDQogICAgPiArICBJbml0aWFsaXplIHZhcmlhYmxlIHF1b3RhLg0KICAg ID4gKw0KICAgID4gKyoqLw0KICAgID4gK1ZPSUQNCiAgICA+ICtJbml0aWFsaXplVmFyaWFibGVR dW90YSAoDQogICAgPiArICBWT0lEDQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgaWYg KCFtRW5kT2ZEeGUpIHsNCiAgICA+ICsgICAgcmV0dXJuOw0KICAgID4gKyAgfQ0KICAgID4gKw0K ICAgID4gKyAgSW5pdGlhbGl6ZVZhckVycm9yRmxhZyAoKTsNCiAgICA+ICsgIENhbGN1bGF0ZUNv bW1vblVzZXJWYXJpYWJsZVRvdGFsU2l6ZSAoKTsNCiAgICA+ICt9DQogICAgPiArDQogICAgPiAr LyoqDQogICAgPiArICBGaW5kcyB2YXJpYWJsZSBpbiBzdG9yYWdlIGJsb2NrcyBvZiB2b2xhdGls ZSBhbmQgbm9uLXZvbGF0aWxlIHN0b3JhZ2UgYXJlYXMuDQogICAgPiArDQogICAgPiArICBUaGlz IGNvZGUgZmluZHMgdmFyaWFibGUgaW4gc3RvcmFnZSBibG9ja3Mgb2Ygdm9sYXRpbGUgYW5kIG5v bi12b2xhdGlsZSBzdG9yYWdlDQogICAgPiBhcmVhcy4NCiAgICA+ICsgIElmIFZhcmlhYmxlTmFt ZSBpcyBhbiBlbXB0eSBzdHJpbmcsIHRoZW4gd2UganVzdCByZXR1cm4gdGhlIGZpcnN0DQogICAg PiArICBxdWFsaWZpZWQgdmFyaWFibGUgd2l0aG91dCBjb21wYXJpbmcgVmFyaWFibGVOYW1lIGFu ZCBWZW5kb3JHdWlkLg0KICAgID4gKyAgSWYgSWdub3JlUnRDaGVjayBpcyBUUlVFLCB0aGVuIHdl IGlnbm9yZSB0aGUNCiAgICA+IEVGSV9WQVJJQUJMRV9SVU5USU1FX0FDQ0VTUyBhdHRyaWJ1dGUg Y2hlY2sNCiAgICA+ICsgIGF0IHJ1bnRpbWUgd2hlbiBzZWFyY2hpbmcgZXhpc3RpbmcgdmFyaWFi bGUsIG9ubHkgVmFyaWFibGVOYW1lIGFuZA0KICAgID4gVmVuZG9yR3VpZCBhcmUgY29tcGFyZWQu DQogICAgPiArICBPdGhlcndpc2UsIHZhcmlhYmxlcyB3aXRob3V0IEVGSV9WQVJJQUJMRV9SVU5U SU1FX0FDQ0VTUyBhcmUgbm90IHZpc2libGUNCiAgICA+IGF0IHJ1bnRpbWUuDQogICAgPiArDQog ICAgPiArICBAcGFyYW1baW5dICAgVmFyaWFibGVOYW1lICAgICAgICAgICBOYW1lIG9mIHRoZSB2 YXJpYWJsZSB0byBiZSBmb3VuZC4NCiAgICA+ICsgIEBwYXJhbVtpbl0gICBWZW5kb3JHdWlkICAg ICAgICAgICAgIFZlbmRvciBHVUlEIHRvIGJlIGZvdW5kLg0KICAgID4gKyAgQHBhcmFtW291dF0g IFB0clRyYWNrICAgICAgICAgICAgICAgVkFSSUFCTEVfUE9JTlRFUl9UUkFDSyBzdHJ1Y3R1cmUg Zm9yDQogICAgPiBvdXRwdXQsDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbmNsdWRpbmcgdGhlIHJhbmdlIHNlYXJjaGVkIGFuZCB0aGUgdGFyZ2V0IHBvc2l0 aW9uLg0KICAgID4gKyAgQHBhcmFtW2luXSAgIEdsb2JhbCAgICAgICAgICAgICAgICAgUG9pbnRl ciB0byBWQVJJQUJMRV9HTE9CQUwgc3RydWN0dXJlLA0KICAgID4gaW5jbHVkaW5nDQogICAgPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlIG9mIHZvbGF0aWxlIHZh cmlhYmxlIHN0b3JhZ2UgYXJlYSwgYmFzZSBvZg0KICAgID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTlYgdmFyaWFibGUgc3RvcmFnZSBhcmVhLCBhbmQgYSBsb2NrLg0K ICAgID4gKyAgQHBhcmFtW2luXSAgIElnbm9yZVJ0Q2hlY2sgICAgICAgICAgSWdub3JlIEVGSV9W QVJJQUJMRV9SVU5USU1FX0FDQ0VTUw0KICAgID4gYXR0cmlidXRlDQogICAgPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjayBhdCBydW50aW1lIHdoZW4gc2VhcmNo aW5nIHZhcmlhYmxlLg0KICAgID4gKw0KICAgID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJB TUVURVIgICAgICAgSWYgVmFyaWFibGVOYW1lIGlzIG5vdCBhbiBlbXB0eSBzdHJpbmcsDQogICAg PiB3aGlsZQ0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVu ZG9yR3VpZCBpcyBOVUxMLg0KICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAg ICAgICAgVmFyaWFibGUgc3VjY2Vzc2Z1bGx5IGZvdW5kLg0KICAgID4gKyAgQHJldHZhbCBFRklf Tk9UX0ZPVU5EICAgICAgICAgICAgICAgVmFyaWFibGUgbm90IGZvdW5kDQogICAgPiArDQogICAg PiArKiovDQogICAgPiArRUZJX1NUQVRVUw0KICAgID4gK0ZpbmRWYXJpYWJsZSAoDQogICAgPiAr ICBJTiAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgKlZhcmlhYmxlTmFtZSwNCiAgICA+ICsgIElO ICBFRklfR1VJRCAgICAgICAgICAgICAgICAqVmVuZG9yR3VpZCwNCiAgICA+ICsgIE9VVCBWQVJJ QUJMRV9QT0lOVEVSX1RSQUNLICAqUHRyVHJhY2ssDQogICAgPiArICBJTiAgVkFSSUFCTEVfR0xP QkFMICAgICAgICAgKkdsb2JhbCwNCiAgICA+ICsgIElOICBCT09MRUFOICAgICAgICAgICAgICAg ICBJZ25vcmVSdENoZWNrDQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgRUZJX1NUQVRV UyAgICAgICAgICAgICBTdGF0dXM7DQogICAgPiArICBWQVJJQUJMRV9TVE9SRV9IRUFERVIgICpW YXJpYWJsZVN0b3JlSGVhZGVyW1ZhcmlhYmxlU3RvcmVUeXBlTWF4XTsNCiAgICA+ICsgIFZBUklB QkxFX1NUT1JFX1RZUEUgICAgVHlwZTsNCiAgICA+ICsNCiAgICA+ICsgIGlmICgoVmFyaWFibGVO YW1lWzBdICE9IDApICYmIChWZW5kb3JHdWlkID09IE5VTEwpKSB7DQogICAgPiArICAgIHJldHVy biBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICAv Lw0KICAgID4gKyAgLy8gMDogVm9sYXRpbGUsIDE6IEhPQiwgMjogTm9uLVZvbGF0aWxlLg0KICAg ID4gKyAgLy8gVGhlIGluZGV4IGFuZCBhdHRyaWJ1dGVzIG1hcHBpbmcgbXVzdCBiZSBrZXB0IGlu IHRoaXMgb3JkZXIgYXMNCiAgICA+IFJ1bnRpbWVTZXJ2aWNlR2V0TmV4dFZhcmlhYmxlTmFtZQ0K ICAgID4gKyAgLy8gbWFrZSB1c2Ugb2YgdGhpcyBtYXBwaW5nIHRvIGltcGxlbWVudCBzZWFyY2gg YWxnb3JpdGhtLg0KICAgID4gKyAgLy8NCiAgICA+ICsgIFZhcmlhYmxlU3RvcmVIZWFkZXJbVmFy aWFibGVTdG9yZVR5cGVWb2xhdGlsZV0gPQ0KICAgID4gKFZBUklBQkxFX1NUT1JFX0hFQURFUiAq KShVSU5UTilHbG9iYWwtPlZvbGF0aWxlVmFyaWFibGVCYXNlOw0KICAgID4gKyAgVmFyaWFibGVT dG9yZUhlYWRlcltWYXJpYWJsZVN0b3JlVHlwZUhvYl0gICAgICA9IChWQVJJQUJMRV9TVE9SRV9I RUFERVINCiAgICA+ICopKFVJTlROKUdsb2JhbC0+SG9iVmFyaWFibGVCYXNlOw0KICAgID4gKyAg VmFyaWFibGVTdG9yZUhlYWRlcltWYXJpYWJsZVN0b3JlVHlwZU52XSAgICAgICA9IG1OdlZhcmlh YmxlQ2FjaGU7DQogICAgPiArDQogICAgPiArICAvLw0KICAgID4gKyAgLy8gRmluZCB0aGUgdmFy aWFibGUgYnkgd2FsayB0aHJvdWdoIEhPQiwgdm9sYXRpbGUgYW5kIG5vbi12b2xhdGlsZSB2YXJp YWJsZQ0KICAgID4gc3RvcmUuDQogICAgPiArICAvLw0KICAgID4gKyAgZm9yIChUeXBlID0gKFZB UklBQkxFX1NUT1JFX1RZUEUpMDsgVHlwZSA8IFZhcmlhYmxlU3RvcmVUeXBlTWF4OyBUeXBlKysp DQogICAgPiB7DQogICAgPiArICAgIGlmIChWYXJpYWJsZVN0b3JlSGVhZGVyW1R5cGVdID09IE5V TEwpIHsNCiAgICA+ICsgICAgICBjb250aW51ZTsNCiAgICA+ICsgICAgfQ0KICAgID4gKw0KICAg ID4gKyAgICBQdHJUcmFjay0+U3RhcnRQdHIgPSBHZXRTdGFydFBvaW50ZXIgKFZhcmlhYmxlU3Rv cmVIZWFkZXJbVHlwZV0pOw0KICAgID4gKyAgICBQdHJUcmFjay0+RW5kUHRyICAgPSBHZXRFbmRQ b2ludGVyIChWYXJpYWJsZVN0b3JlSGVhZGVyW1R5cGVdKTsNCiAgICA+ICsgICAgUHRyVHJhY2st PlZvbGF0aWxlID0gKEJPT0xFQU4pKFR5cGUgPT0gVmFyaWFibGVTdG9yZVR5cGVWb2xhdGlsZSk7 DQogICAgPiArDQogICAgPiArICAgIFN0YXR1cyA9ICBGaW5kVmFyaWFibGVFeCAoDQogICAgPiAr ICAgICAgICAgICAgICAgIFZhcmlhYmxlTmFtZSwNCiAgICA+ICsgICAgICAgICAgICAgICAgVmVu ZG9yR3VpZCwNCiAgICA+ICsgICAgICAgICAgICAgICAgSWdub3JlUnRDaGVjaywNCiAgICA+ICsg ICAgICAgICAgICAgICAgUHRyVHJhY2ssDQogICAgPiArICAgICAgICAgICAgICAgIG1WYXJpYWJs ZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdA0KICAgID4gKyAgICAgICAg ICAgICAgICApOw0KICAgID4gKyAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgID4g KyAgICAgIHJldHVybiBTdGF0dXM7DQogICAgPiArICAgIH0NCiAgICA+ICsgIH0NCiAgICA+ICsN CiAgICA+ICsgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ ICsvKioNCiAgICA+ICsgIEdldCBpbmRleCBmcm9tIHN1cHBvcnRlZCBsYW5ndWFnZSBjb2RlcyBh Y2NvcmRpbmcgdG8gbGFuZ3VhZ2Ugc3RyaW5nLg0KICAgID4gKw0KICAgID4gKyAgVGhpcyBjb2Rl IGlzIHVzZWQgdG8gZ2V0IGNvcnJlc3BvbmRpbmcgaW5kZXggaW4gc3VwcG9ydGVkIGxhbmd1YWdl IGNvZGVzLiBJdA0KICAgID4gY2FuIGhhbmRsZQ0KICAgID4gKyAgUkZDNDY0NiBhbmQgSVNPNjM5 IGxhbmd1YWdlIHRhZ3MuDQogICAgPiArICBJbiBJU082MzkgbGFuZ3VhZ2UgdGFncywgdGFrZSAz LWNoYXJhY3RlcnMgYXMgYSBkZWxpbWl0YXRpb24gdG8gZmluZCBtYXRjaGVkDQogICAgPiBzdHJp bmcgYW5kIGNhbGN1bGF0ZSB0aGUgaW5kZXguDQogICAgPiArICBJbiBSRkM0NjQ2IGxhbmd1YWdl IHRhZ3MsIHRha2Ugc2VtaWNvbG9uIGFzIGEgZGVsaW1pdGF0aW9uIHRvIGZpbmQgbWF0Y2hlZA0K ICAgID4gc3RyaW5nIGFuZCBjYWxjdWxhdGUgdGhlIGluZGV4Lg0KICAgID4gKw0KICAgID4gKyAg Rm9yIGV4YW1wbGU6DQogICAgPiArICAgIFN1cHBvcnRlZExhbmcgID0gImVuZ2ZyYWVuZ2ZyYSIN CiAgICA+ICsgICAgTGFuZyAgICAgICAgICAgPSAiZW5nIg0KICAgID4gKyAgICBJc282MzlMYW5n dWFnZSA9IFRSVUUNCiAgICA+ICsgIFRoZSByZXR1cm4gdmFsdWUgaXMgIjAiLg0KICAgID4gKyAg QW5vdGhlciBleGFtcGxlOg0KICAgID4gKyAgICBTdXBwb3J0ZWRMYW5nICA9ICJlbjtmcjtlbi1V Uztmci1GUiINCiAgICA+ICsgICAgTGFuZyAgICAgICAgICAgPSAiZnItRlIiDQogICAgPiArICAg IElzbzYzOUxhbmd1YWdlID0gRkFMU0UNCiAgICA+ICsgIFRoZSByZXR1cm4gdmFsdWUgaXMgIjMi Lg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtICBTdXBwb3J0ZWRMYW5nICAgICAgICAgICAgICAg UGxhdGZvcm0gc3VwcG9ydGVkIGxhbmd1YWdlIGNvZGVzLg0KICAgID4gKyAgQHBhcmFtICBMYW5n ICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJlZCBsYW5ndWFnZS4NCiAgICA+ICsgIEBw YXJhbSAgSXNvNjM5TGFuZ3VhZ2UgICAgICAgICAgICAgIEEgYm9vbCB2YWx1ZSB0byBzaWduaWZ5 IGlmIHRoZSBoYW5kbGVyIGlzDQogICAgPiBvcGVyYXRlZCBvbiBJU082Mzkgb3IgUkZDNDY0Ni4N CiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwgVGhlIGluZGV4IG9mIGxhbmd1YWdlIGluIHRoZSBs YW5ndWFnZSBjb2Rlcy4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtVSU5UTg0KICAgID4g K0dldEluZGV4RnJvbVN1cHBvcnRlZExhbmdDb2RlcyAoDQogICAgPiArICBJTiAgQ0hBUjggICAg KlN1cHBvcnRlZExhbmcsDQogICAgPiArICBJTiAgQ0hBUjggICAgKkxhbmcsDQogICAgPiArICBJ TiAgQk9PTEVBTiAgSXNvNjM5TGFuZ3VhZ2UNCiAgICA+ICsgICkNCiAgICA+ICt7DQogICAgPiAr ICBVSU5UTiAgSW5kZXg7DQogICAgPiArICBVSU5UTiAgQ29tcGFyZUxlbmd0aDsNCiAgICA+ICsg IFVJTlROICBMYW5ndWFnZUxlbmd0aDsNCiAgICA+ICsNCiAgICA+ICsgIGlmIChJc282MzlMYW5n dWFnZSkgew0KICAgID4gKyAgICBDb21wYXJlTGVuZ3RoID0gSVNPXzYzOV8yX0VOVFJZX1NJWkU7 DQogICAgPiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IEFzY2lpU3RyTGVuIChTdXBwb3J0 ZWRMYW5nKTsgSW5kZXggKz0gQ29tcGFyZUxlbmd0aCkNCiAgICA+IHsNCiAgICA+ICsgICAgICBp ZiAoQXNjaWlTdHJuQ21wIChMYW5nLCBTdXBwb3J0ZWRMYW5nICsgSW5kZXgsIENvbXBhcmVMZW5n dGgpID09IDApIHsNCiAgICA+ICsgICAgICAgIC8vDQogICAgPiArICAgICAgICAvLyBTdWNjZXNz ZnVsbHkgZmluZCB0aGUgaW5kZXggb2YgTGFuZyBzdHJpbmcgaW4gU3VwcG9ydGVkTGFuZyBzdHJp bmcuDQogICAgPiArICAgICAgICAvLw0KICAgID4gKyAgICAgICAgSW5kZXggPSBJbmRleCAvIENv bXBhcmVMZW5ndGg7DQogICAgPiArICAgICAgICByZXR1cm4gSW5kZXg7DQogICAgPiArICAgICAg fQ0KICAgID4gKyAgICB9DQogICAgPiArDQogICAgPiArICAgIEFTU0VSVCAoRkFMU0UpOw0KICAg ID4gKyAgICByZXR1cm4gMDsNCiAgICA+ICsgIH0gZWxzZSB7DQogICAgPiArICAgIC8vDQogICAg PiArICAgIC8vIENvbXBhcmUgUkZDNDY0NiBsYW5ndWFnZSBjb2RlDQogICAgPiArICAgIC8vDQog ICAgPiArICAgIEluZGV4ID0gMDsNCiAgICA+ICsgICAgZm9yIChMYW5ndWFnZUxlbmd0aCA9IDA7 IExhbmdbTGFuZ3VhZ2VMZW5ndGhdICE9ICdcMCc7IExhbmd1YWdlTGVuZ3RoKyspDQogICAgPiB7 DQogICAgPiArICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgZm9yIChJbmRleCA9IDA7ICpTdXBw b3J0ZWRMYW5nICE9ICdcMCc7IEluZGV4KyssIFN1cHBvcnRlZExhbmcgKz0NCiAgICA+IENvbXBh cmVMZW5ndGgpIHsNCiAgICA+ICsgICAgICAvLw0KICAgID4gKyAgICAgIC8vIFNraXAgJzsnIGNo YXJhY3RlcnMgaW4gU3VwcG9ydGVkTGFuZw0KICAgID4gKyAgICAgIC8vDQogICAgPiArICAgICAg Zm9yICggOyAqU3VwcG9ydGVkTGFuZyAhPSAnXDAnICYmICpTdXBwb3J0ZWRMYW5nID09ICc7Jzsg U3VwcG9ydGVkTGFuZysrKSB7DQogICAgPiArICAgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICAg IC8vDQogICAgPiArICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBsZW5ndGggb2YgdGhlIG5leHQgbGFu Z3VhZ2UgY29kZSBpbiBTdXBwb3J0ZWRMYW5nDQogICAgPiArICAgICAgLy8NCiAgICA+ICsgICAg ICBmb3IgKENvbXBhcmVMZW5ndGggPSAwOyBTdXBwb3J0ZWRMYW5nW0NvbXBhcmVMZW5ndGhdICE9 ICdcMCcgJiYNCiAgICA+IFN1cHBvcnRlZExhbmdbQ29tcGFyZUxlbmd0aF0gIT0gJzsnOyBDb21w YXJlTGVuZ3RoKyspIHsNCiAgICA+ICsgICAgICB9DQogICAgPiArDQogICAgPiArICAgICAgaWYg KChDb21wYXJlTGVuZ3RoID09IExhbmd1YWdlTGVuZ3RoKSAmJg0KICAgID4gKyAgICAgICAgICAo QXNjaWlTdHJuQ21wIChMYW5nLCBTdXBwb3J0ZWRMYW5nLCBDb21wYXJlTGVuZ3RoKSA9PSAwKSkN CiAgICA+ICsgICAgICB7DQogICAgPiArICAgICAgICAvLw0KICAgID4gKyAgICAgICAgLy8gU3Vj Y2Vzc2Z1bGx5IGZpbmQgdGhlIGluZGV4IG9mIExhbmcgc3RyaW5nIGluIFN1cHBvcnRlZExhbmcg c3RyaW5nLg0KICAgID4gKyAgICAgICAgLy8NCiAgICA+ICsgICAgICAgIHJldHVybiBJbmRleDsN CiAgICA+ICsgICAgICB9DQogICAgPiArICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgQVNTRVJU IChGQUxTRSk7DQogICAgPiArICAgIHJldHVybiAwOw0KICAgID4gKyAgfQ0KICAgID4gK30NCiAg ICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIEdldCBsYW5ndWFnZSBzdHJpbmcgZnJvbSBzdXBw b3J0ZWQgbGFuZ3VhZ2UgY29kZXMgYWNjb3JkaW5nIHRvIGluZGV4Lg0KICAgID4gKw0KICAgID4g KyAgVGhpcyBjb2RlIGlzIHVzZWQgdG8gZ2V0IGNvcnJlc3BvbmRpbmcgbGFuZ3VhZ2Ugc3RyaW5n cyBpbiBzdXBwb3J0ZWQgbGFuZ3VhZ2UNCiAgICA+IGNvZGVzLiBJdCBjYW4gaGFuZGxlDQogICAg PiArICBSRkM0NjQ2IGFuZCBJU082MzkgbGFuZ3VhZ2UgdGFncy4NCiAgICA+ICsgIEluIElTTzYz OSBsYW5ndWFnZSB0YWdzLCB0YWtlIDMtY2hhcmFjdGVycyBhcyBhIGRlbGltaXRhdGlvbi4gRmlu ZCBsYW5ndWFnZQ0KICAgID4gc3RyaW5nIGFjY29yZGluZyB0byB0aGUgaW5kZXguDQogICAgPiAr ICBJbiBSRkM0NjQ2IGxhbmd1YWdlIHRhZ3MsIHRha2Ugc2VtaWNvbG9uIGFzIGEgZGVsaW1pdGF0 aW9uLiBGaW5kIGxhbmd1YWdlDQogICAgPiBzdHJpbmcgYWNjb3JkaW5nIHRvIHRoZSBpbmRleC4N CiAgICA+ICsNCiAgICA+ICsgIEZvciBleGFtcGxlOg0KICAgID4gKyAgICBTdXBwb3J0ZWRMYW5n ICA9ICJlbmdmcmFlbmdmcmEiDQogICAgPiArICAgIEluZGV4ICAgICAgICAgID0gIjEiDQogICAg PiArICAgIElzbzYzOUxhbmd1YWdlID0gVFJVRQ0KICAgID4gKyAgVGhlIHJldHVybiB2YWx1ZSBp cyAiZnJhIi4NCiAgICA+ICsgIEFub3RoZXIgZXhhbXBsZToNCiAgICA+ICsgICAgU3VwcG9ydGVk TGFuZyAgPSAiZW47ZnI7ZW4tVVM7ZnItRlIiDQogICAgPiArICAgIEluZGV4ICAgICAgICAgID0g IjEiDQogICAgPiArICAgIElzbzYzOUxhbmd1YWdlID0gRkFMU0UNCiAgICA+ICsgIFRoZSByZXR1 cm4gdmFsdWUgaXMgImZyIi4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbSAgU3VwcG9ydGVkTGFu ZyAgICAgICAgICAgICAgIFBsYXRmb3JtIHN1cHBvcnRlZCBsYW5ndWFnZSBjb2Rlcy4NCiAgICA+ ICsgIEBwYXJhbSAgSW5kZXggICAgICAgICAgICAgICAgICAgICAgIFRoZSBpbmRleCBpbiBzdXBw b3J0ZWQgbGFuZ3VhZ2UgY29kZXMuDQogICAgPiArICBAcGFyYW0gIElzbzYzOUxhbmd1YWdlICAg ICAgICAgICAgICBBIGJvb2wgdmFsdWUgdG8gc2lnbmlmeSBpZiB0aGUgaGFuZGxlciBpcw0KICAg ID4gb3BlcmF0ZWQgb24gSVNPNjM5IG9yIFJGQzQ2NDYuDQogICAgPiArDQogICAgPiArICBAcmV0 dmFsIFRoZSBsYW5ndWFnZSBzdHJpbmcgaW4gdGhlIGxhbmd1YWdlIGNvZGVzLg0KICAgID4gKw0K ICAgID4gKyoqLw0KICAgID4gK0NIQVI4ICoNCiAgICA+ICtHZXRMYW5nRnJvbVN1cHBvcnRlZExh bmdDb2RlcyAoDQogICAgPiArICBJTiAgQ0hBUjggICAgKlN1cHBvcnRlZExhbmcsDQogICAgPiAr ICBJTiAgVUlOVE4gICAgSW5kZXgsDQogICAgPiArICBJTiAgQk9PTEVBTiAgSXNvNjM5TGFuZ3Vh Z2UNCiAgICA+ICsgICkNCiAgICA+ICt7DQogICAgPiArICBVSU5UTiAgU3ViSW5kZXg7DQogICAg PiArICBVSU5UTiAgQ29tcGFyZUxlbmd0aDsNCiAgICA+ICsgIENIQVI4ICAqU3VwcG9ydGVkOw0K ICAgID4gKw0KICAgID4gKyAgU3ViSW5kZXggID0gMDsNCiAgICA+ICsgIFN1cHBvcnRlZCA9IFN1 cHBvcnRlZExhbmc7DQogICAgPiArICBpZiAoSXNvNjM5TGFuZ3VhZ2UpIHsNCiAgICA+ICsgICAg Ly8NCiAgICA+ICsgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBpbmRleCBvZiBMYW5nIHN0cmluZyBp biBTdXBwb3J0ZWRMYW5nIHN0cmluZyB0byBnZXQgdGhlDQogICAgPiBsYW5ndWFnZS4NCiAgICA+ ICsgICAgLy8gVGhpcyBjb2RlIHdpbGwgYmUgaW52b2tlZCBpbiBSVU5USU1FLCB0aGVyZWZvcmUg dGhlcmUgaXMgbm90IGEgbWVtb3J5DQogICAgPiBhbGxvY2F0ZS9mcmVlIG9wZXJhdGlvbi4NCiAg ICA+ICsgICAgLy8gSW4gZHJpdmVyIGVudHJ5LCBpdCBwcmUtYWxsb2NhdGVzIGEgcnVudGltZSBh dHRyaWJ1dGUgbWVtb3J5IHRvDQogICAgPiBhY2NvbW1vZGF0ZSB0aGlzIHN0cmluZy4NCiAgICA+ ICsgICAgLy8NCiAgICA+ICsgICAgQ29tcGFyZUxlbmd0aCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgID0gSVNPXzYzOV8yX0VOVFJZX1NJWkU7DQogICAgPiArICAgIG1WYXJpYWJsZU1vZHVs ZUdsb2JhbC0+TGFuZ1tDb21wYXJlTGVuZ3RoXSA9ICdcMCc7DQogICAgPiArICAgIHJldHVybiBD b3B5TWVtIChtVmFyaWFibGVNb2R1bGVHbG9iYWwtPkxhbmcsIFN1cHBvcnRlZExhbmcgKyBJbmRl eCAqDQogICAgPiBDb21wYXJlTGVuZ3RoLCBDb21wYXJlTGVuZ3RoKTsNCiAgICA+ICsgIH0gZWxz ZSB7DQogICAgPiArICAgIHdoaWxlIChUUlVFKSB7DQogICAgPiArICAgICAgLy8NCiAgICA+ICsg ICAgICAvLyBUYWtlIHNlbWljb2xvbiBhcyBkZWxpbWl0YXRpb24sIHNlcXVlbnRpYWxseSB0cmF2 ZXJzZSBzdXBwb3J0ZWQgbGFuZ3VhZ2UNCiAgICA+IGNvZGVzLg0KICAgID4gKyAgICAgIC8vDQog ICAgPiArICAgICAgZm9yIChDb21wYXJlTGVuZ3RoID0gMDsgKlN1cHBvcnRlZCAhPSAnOycgJiYg KlN1cHBvcnRlZCAhPSAnXDAnOw0KICAgID4gQ29tcGFyZUxlbmd0aCsrKSB7DQogICAgPiArICAg ICAgICBTdXBwb3J0ZWQrKzsNCiAgICA+ICsgICAgICB9DQogICAgPiArDQogICAgPiArICAgICAg aWYgKCgqU3VwcG9ydGVkID09ICdcMCcpICYmIChTdWJJbmRleCAhPSBJbmRleCkpIHsNCiAgICA+ ICsgICAgICAgIC8vDQogICAgPiArICAgICAgICAvLyBIYXZlIGNvbXBsZXRlZCB0aGUgdHJhdmVy c2UsIGJ1dCBub3QgZmluZCBjb3Jyc3BvbmRpbmcgc3RyaW5nLg0KICAgID4gKyAgICAgICAgLy8g VGhpcyBjYXNlIGlzIG5vdCBhbGxvd2VkIHRvIGhhcHBlbi4NCiAgICA+ICsgICAgICAgIC8vDQog ICAgPiArICAgICAgICBBU1NFUlQgKEZBTFNFKTsNCiAgICA+ICsgICAgICAgIHJldHVybiBOVUxM Ow0KICAgID4gKyAgICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgICBpZiAoU3ViSW5kZXggPT0g SW5kZXgpIHsNCiAgICA+ICsgICAgICAgIC8vDQogICAgPiArICAgICAgICAvLyBBY2NvcmRpbmcg dG8gdGhlIGluZGV4IG9mIExhbmcgc3RyaW5nIGluIFN1cHBvcnRlZExhbmcgc3RyaW5nIHRvIGdl dCB0aGUNCiAgICA+IGxhbmd1YWdlLg0KICAgID4gKyAgICAgICAgLy8gQXMgdGhpcyBjb2RlIHdp bGwgYmUgaW52b2tlZCBpbiBSVU5USU1FLCB0aGVyZWZvcmUgdGhlcmUgaXMgbm90IG1lbW9yeQ0K ICAgID4gYWxsb2NhdGUvZnJlZSBvcGVyYXRpb24uDQogICAgPiArICAgICAgICAvLyBJbiBkcml2 ZXIgZW50cnksIGl0IHByZS1hbGxvY2F0ZXMgYSBydW50aW1lIGF0dHJpYnV0ZSBtZW1vcnkgdG8N CiAgICA+IGFjY29tbW9kYXRlIHRoaXMgc3RyaW5nLg0KICAgID4gKyAgICAgICAgLy8NCiAgICA+ ICsgICAgICAgIG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+UGxhdGZvcm1MYW5nW0NvbXBhcmVMZW5n dGhdID0gJ1wwJzsNCiAgICA+ICsgICAgICAgIHJldHVybiBDb3B5TWVtIChtVmFyaWFibGVNb2R1 bGVHbG9iYWwtPlBsYXRmb3JtTGFuZywgU3VwcG9ydGVkIC0NCiAgICA+IENvbXBhcmVMZW5ndGgs IENvbXBhcmVMZW5ndGgpOw0KICAgID4gKyAgICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgICBT dWJJbmRleCsrOw0KICAgID4gKw0KICAgID4gKyAgICAgIC8vDQogICAgPiArICAgICAgLy8gU2tp cCAnOycgY2hhcmFjdGVycyBpbiBTdXBwb3J0ZWQNCiAgICA+ICsgICAgICAvLw0KICAgID4gKyAg ICAgIGZvciAoIDsgKlN1cHBvcnRlZCAhPSAnXDAnICYmICpTdXBwb3J0ZWQgPT0gJzsnOyBTdXBw b3J0ZWQrKykgew0KICAgID4gKyAgICAgIH0NCiAgICA+ICsgICAgfQ0KICAgID4gKyAgfQ0KICAg ID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIFJldHVybnMgYSBwb2ludGVyIHRv IGFuIGFsbG9jYXRlZCBidWZmZXIgdGhhdCBjb250YWlucyB0aGUgYmVzdCBtYXRjaGluZw0KICAg ID4gbGFuZ3VhZ2UNCiAgICA+ICsgIGZyb20gYSBzZXQgb2Ygc3VwcG9ydGVkIGxhbmd1YWdlcy4N CiAgICA+ICsNCiAgICA+ICsgIFRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgYm90aCBJU08gNjM5LTIg YW5kIFJGQyA0NjQ2IGxhbmd1YWdlIGNvZGVzLCBidXQNCiAgICA+IGxhbmd1YWdlDQogICAgPiAr ICBjb2RlIHR5cGVzIG1heSBub3QgYmUgbWl4ZWQgaW4gYSBzaW5nbGUgY2FsbCB0byB0aGlzIGZ1 bmN0aW9uLiBUaGlzIGZ1bmN0aW9uDQogICAgPiArICBzdXBwb3J0cyBhIHZhcmlhYmxlIGFyZ3Vt ZW50IGxpc3QgdGhhdCBhbGxvd3MgdGhlIGNhbGxlciB0byBwYXNzIGluIGEgcHJpb3JpdGl6ZWQN CiAgICA+ICsgIGxpc3Qgb2YgbGFuZ3VhZ2UgY29kZXMgdG8gdGVzdCBhZ2FpbnN0IGFsbCB0aGUg bGFuZ3VhZ2UgY29kZXMgaW4NCiAgICA+IFN1cHBvcnRlZExhbmd1YWdlcy4NCiAgICA+ICsNCiAg ICA+ICsgIElmIFN1cHBvcnRlZExhbmd1YWdlcyBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KICAg ID4gKw0KICAgID4gKyAgQHBhcmFtW2luXSAgU3VwcG9ydGVkTGFuZ3VhZ2VzICBBIHBvaW50ZXIg dG8gYSBOdWxsLXRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nDQogICAgPiB0aGF0DQogICAgPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zIGEgc2V0IG9mIGxhbmd1YWdl IGNvZGVzIGluIHRoZSBmb3JtYXQNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3BlY2lmaWVkIGJ5IElzbzYzOUxhbmd1YWdlLg0KICAgID4gKyAgQHBhcmFtW2luXSAg SXNvNjM5TGFuZ3VhZ2UgICAgICBJZiBub3QgemVybywgdGhlbiBhbGwgbGFuZ3VhZ2UgY29kZXMg YXJlDQogICAgPiBhc3N1bWVkIHRvIGJlDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGluIElTTyA2MzktMiBmb3JtYXQuICBJZiB6ZXJvLCB0aGVuIGFsbCBsYW5ndWFn ZQ0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlcyBhcmUgYXNz dW1lZCB0byBiZSBpbiBSRkMgNDY0NiBsYW5ndWFnZSBmb3JtYXQNCiAgICA+ICsgIEBwYXJhbVtp bl0gIC4uLiAgICAgICAgICAgICAgICAgQSB2YXJpYWJsZSBhcmd1bWVudCBsaXN0IHRoYXQgY29u dGFpbnMgcG9pbnRlcnMgdG8NCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTnVsbC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZ3MgdGhhdCBjb250YWluIG9uZSBvciBtb3Jl DQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlIGNvZGVz IGluIHRoZSBmb3JtYXQgc3BlY2lmaWVkIGJ5IElzbzYzOUxhbmd1YWdlLg0KICAgID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgbGFuZ3VhZ2UgY29kZSBmcm9t IGVhY2ggb2YgdGhlc2UgbGFuZ3VhZ2UNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29kZSBsaXN0cyBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBpdCBpcyBhbiBleGFj dCBvcg0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZSBtYXRj aCB0byBhbnkgb2YgdGhlIGxhbmd1YWdlIGNvZGVzIGluDQogICAgPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFN1cHBvcnRlZExhbmd1YWdlcy4gIENsb3NlIG1hdGNoZXMgb25s eSBhcHBseSB0byBSRkMgNDY0Ng0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsYW5ndWFnZSBjb2RlcywgYW5kIHRoZSBtYXRjaGluZyBhbGdvcml0aG0gZnJvbSBSRkMg NDY0Nw0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyB1c2VkIHRv IGRldGVybWluZSBpZiBhIGNsb3NlIG1hdGNoIGlzIHByZXNlbnQuICBJZg0KICAgID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBleGFjdCBvciBjbG9zZSBtYXRjaCBpcyBm b3VuZCwgdGhlbiB0aGUgbWF0Y2hpbmcNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGFuZ3VhZ2UgY29kZSBmcm9tIFN1cHBvcnRlZExhbmd1YWdlcyBpcyByZXR1cm5l ZC4gIElmDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vIG1hdGNo ZXMgYXJlIGZvdW5kLCB0aGVuIHRoZSBuZXh0IHZhcmlhYmxlIGFyZ3VtZW50DQogICAgPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciBpcyBldmFsdWF0ZWQuICBU aGUgdmFyaWFibGUgYXJndW1lbnQgbGlzdA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpcyB0ZXJtaW5hdGVkIGJ5IGEgTlVMTC4NCiAgICA+ICsNCiAgICA+ICsgIEBy ZXR2YWwgTlVMTCAgIFRoZSBiZXN0IG1hdGNoaW5nIGxhbmd1YWdlIGNvdWxkIG5vdCBiZSBmb3Vu ZCBpbg0KICAgID4gU3VwcG9ydGVkTGFuZ3VhZ2VzLg0KICAgID4gKyAgQHJldHZhbCBOVUxMICAg VGhlcmUgYXJlIG5vdCBlbm91Z2ggcmVzb3VyY2VzIGF2YWlsYWJsZSB0byByZXR1cm4gdGhlIGJl c3QNCiAgICA+IG1hdGNoaW5nDQogICAgPiArICAgICAgICAgICAgICAgICBsYW5ndWFnZS4NCiAg ICA+ICsgIEByZXR2YWwgT3RoZXIgIEEgcG9pbnRlciB0byBhIE51bGwtdGVybWluYXRlZCBBU0NJ SSBzdHJpbmcgdGhhdCBpcyB0aGUgYmVzdA0KICAgID4gbWF0Y2hpbmcNCiAgICA+ICsgICAgICAg ICAgICAgICAgIGxhbmd1YWdlIGluIFN1cHBvcnRlZExhbmd1YWdlcy4NCiAgICA+ICsNCiAgICA+ ICsqKi8NCiAgICA+ICtDSEFSOCAqDQogICAgPiArRUZJQVBJDQogICAgPiArVmFyaWFibGVHZXRC ZXN0TGFuZ3VhZ2UgKA0KICAgID4gKyAgSU4gQ09OU1QgQ0hBUjggICpTdXBwb3J0ZWRMYW5ndWFn ZXMsDQogICAgPiArICBJTiBVSU5UTiAgICAgICAgSXNvNjM5TGFuZ3VhZ2UsDQogICAgPiArICAu Li4NCiAgICA+ICsgICkNCiAgICA+ICt7DQogICAgPiArICBWQV9MSVNUICAgICAgQXJnczsNCiAg ICA+ICsgIENIQVI4ICAgICAgICAqTGFuZ3VhZ2U7DQogICAgPiArICBVSU5UTiAgICAgICAgQ29t cGFyZUxlbmd0aDsNCiAgICA+ICsgIFVJTlROICAgICAgICBMYW5ndWFnZUxlbmd0aDsNCiAgICA+ ICsgIENPTlNUIENIQVI4ICAqU3VwcG9ydGVkOw0KICAgID4gKyAgQ0hBUjggICAgICAgICpCdWZm ZXI7DQogICAgPiArDQogICAgPiArICBpZiAoU3VwcG9ydGVkTGFuZ3VhZ2VzID09IE5VTEwpIHsN CiAgICA+ICsgICAgcmV0dXJuIE5VTEw7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICBW QV9TVEFSVCAoQXJncywgSXNvNjM5TGFuZ3VhZ2UpOw0KICAgID4gKyAgd2hpbGUgKChMYW5ndWFn ZSA9IFZBX0FSRyAoQXJncywgQ0hBUjggKikpICE9IE5VTEwpIHsNCiAgICA+ICsgICAgLy8NCiAg ICA+ICsgICAgLy8gRGVmYXVsdCB0byBJU08gNjM5LTIgbW9kZQ0KICAgID4gKyAgICAvLw0KICAg ID4gKyAgICBDb21wYXJlTGVuZ3RoICA9IDM7DQogICAgPiArICAgIExhbmd1YWdlTGVuZ3RoID0g TUlOICgzLCBBc2NpaVN0ckxlbiAoTGFuZ3VhZ2UpKTsNCiAgICA+ICsNCiAgICA+ICsgICAgLy8N CiAgICA+ICsgICAgLy8gSWYgaW4gUkZDIDQ2NDYgbW9kZSwgdGhlbiBkZXRlcm1pbmUgdGhlIGxl bmd0aCBvZiB0aGUgZmlyc3QgUkZDIDQ2NDYNCiAgICA+IGxhbmd1YWdlIGNvZGUgaW4gTGFuZ3Vh Z2UNCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgaWYgKElzbzYzOUxhbmd1YWdlID09IDApIHsN CiAgICA+ICsgICAgICBmb3IgKExhbmd1YWdlTGVuZ3RoID0gMDsgTGFuZ3VhZ2VbTGFuZ3VhZ2VM ZW5ndGhdICE9IDAgJiYNCiAgICA+IExhbmd1YWdlW0xhbmd1YWdlTGVuZ3RoXSAhPSAnOyc7IExh bmd1YWdlTGVuZ3RoKyspIHsNCiAgICA+ICsgICAgICB9DQogICAgPiArICAgIH0NCiAgICA+ICsN CiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgLy8gVHJpbSBiYWNrIHRoZSBsZW5ndGggb2YgTGFu Z3VhZ2UgdXNlZCB1bnRpbCBpdCBpcyBlbXB0eQ0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICB3 aGlsZSAoTGFuZ3VhZ2VMZW5ndGggPiAwKSB7DQogICAgPiArICAgICAgLy8NCiAgICA+ICsgICAg ICAvLyBMb29wIHRocm91Z2ggYWxsIGxhbmd1YWdlIGNvZGVzIGluIFN1cHBvcnRlZExhbmd1YWdl cw0KICAgID4gKyAgICAgIC8vDQogICAgPiArICAgICAgZm9yIChTdXBwb3J0ZWQgPSBTdXBwb3J0 ZWRMYW5ndWFnZXM7ICpTdXBwb3J0ZWQgIT0gJ1wwJzsgU3VwcG9ydGVkICs9DQogICAgPiBDb21w YXJlTGVuZ3RoKSB7DQogICAgPiArICAgICAgICAvLw0KICAgID4gKyAgICAgICAgLy8gSW4gUkZD IDQ2NDYgbW9kZSwgdGhlbiBMb29wIHRocm91Z2ggYWxsIGxhbmd1YWdlIGNvZGVzIGluDQogICAg PiBTdXBwb3J0ZWRMYW5ndWFnZXMNCiAgICA+ICsgICAgICAgIC8vDQogICAgPiArICAgICAgICBp ZiAoSXNvNjM5TGFuZ3VhZ2UgPT0gMCkgew0KICAgID4gKyAgICAgICAgICAvLw0KICAgID4gKyAg ICAgICAgICAvLyBTa2lwICc7JyBjaGFyYWN0ZXJzIGluIFN1cHBvcnRlZA0KICAgID4gKyAgICAg ICAgICAvLw0KICAgID4gKyAgICAgICAgICBmb3IgKCA7ICpTdXBwb3J0ZWQgIT0gJ1wwJyAmJiAq U3VwcG9ydGVkID09ICc7JzsgU3VwcG9ydGVkKyspIHsNCiAgICA+ICsgICAgICAgICAgfQ0KICAg ID4gKw0KICAgID4gKyAgICAgICAgICAvLw0KICAgID4gKyAgICAgICAgICAvLyBEZXRlcm1pbmUg dGhlIGxlbmd0aCBvZiB0aGUgbmV4dCBsYW5ndWFnZSBjb2RlIGluIFN1cHBvcnRlZA0KICAgID4g KyAgICAgICAgICAvLw0KICAgID4gKyAgICAgICAgICBmb3IgKENvbXBhcmVMZW5ndGggPSAwOyBT dXBwb3J0ZWRbQ29tcGFyZUxlbmd0aF0gIT0gMCAmJg0KICAgID4gU3VwcG9ydGVkW0NvbXBhcmVM ZW5ndGhdICE9ICc7JzsgQ29tcGFyZUxlbmd0aCsrKSB7DQogICAgPiArICAgICAgICAgIH0NCiAg ICA+ICsNCiAgICA+ICsgICAgICAgICAgLy8NCiAgICA+ICsgICAgICAgICAgLy8gSWYgTGFuZ3Vh Z2UgaXMgbG9uZ2VyIHRoYW4gdGhlIFN1cHBvcnRlZCwgdGhlbiBza2lwIHRvIHRoZSBuZXh0DQog ICAgPiBsYW5ndWFnZQ0KICAgID4gKyAgICAgICAgICAvLw0KICAgID4gKyAgICAgICAgICBpZiAo TGFuZ3VhZ2VMZW5ndGggPiBDb21wYXJlTGVuZ3RoKSB7DQogICAgPiArICAgICAgICAgICAgY29u dGludWU7DQogICAgPiArICAgICAgICAgIH0NCiAgICA+ICsgICAgICAgIH0NCiAgICA+ICsNCiAg ICA+ICsgICAgICAgIC8vDQogICAgPiArICAgICAgICAvLyBTZWUgaWYgdGhlIGZpcnN0IExhbmd1 YWdlTGVuZ3RoIGNoYXJhY3RlcnMgaW4gU3VwcG9ydGVkIG1hdGNoIExhbmd1YWdlDQogICAgPiAr ICAgICAgICAvLw0KICAgID4gKyAgICAgICAgaWYgKEFzY2lpU3RybkNtcCAoU3VwcG9ydGVkLCBM YW5ndWFnZSwgTGFuZ3VhZ2VMZW5ndGgpID09IDApIHsNCiAgICA+ICsgICAgICAgICAgVkFfRU5E IChBcmdzKTsNCiAgICA+ICsNCiAgICA+ICsgICAgICAgICAgQnVmZmVyICAgICAgICAgICAgICAg ID0gKElzbzYzOUxhbmd1YWdlICE9IDApID8gbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5MYW5nIDoN CiAgICA+IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+UGxhdGZvcm1MYW5nOw0KICAgID4gKyAgICAg ICAgICBCdWZmZXJbQ29tcGFyZUxlbmd0aF0gPSAnXDAnOw0KICAgID4gKyAgICAgICAgICByZXR1 cm4gQ29weU1lbSAoQnVmZmVyLCBTdXBwb3J0ZWQsIENvbXBhcmVMZW5ndGgpOw0KICAgID4gKyAg ICAgICAgfQ0KICAgID4gKyAgICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgICBpZiAoSXNvNjM5 TGFuZ3VhZ2UgIT0gMCkgew0KICAgID4gKyAgICAgICAgLy8NCiAgICA+ICsgICAgICAgIC8vIElm IElTTyA2MzkgbW9kZSwgdGhlbiBlYWNoIGxhbmd1YWdlIGNhbiBvbmx5IGJlIHRlc3RlZCBvbmNl DQogICAgPiArICAgICAgICAvLw0KICAgID4gKyAgICAgICAgTGFuZ3VhZ2VMZW5ndGggPSAwOw0K ICAgID4gKyAgICAgIH0gZWxzZSB7DQogICAgPiArICAgICAgICAvLw0KICAgID4gKyAgICAgICAg Ly8gSWYgUkZDIDQ2NDYgbW9kZSwgdGhlbiB0cmltIExhbmd1YWdlIGZyb20gdGhlIHJpZ2h0IHRv IHRoZSBuZXh0ICctJw0KICAgID4gY2hhcmFjdGVyDQogICAgPiArICAgICAgICAvLw0KICAgID4g KyAgICAgICAgZm9yIChMYW5ndWFnZUxlbmd0aC0tOyBMYW5ndWFnZUxlbmd0aCA+IDAgJiYNCiAg ICA+IExhbmd1YWdlW0xhbmd1YWdlTGVuZ3RoXSAhPSAnLSc7IExhbmd1YWdlTGVuZ3RoLS0pIHsN CiAgICA+ICsgICAgICAgIH0NCiAgICA+ICsgICAgICB9DQogICAgPiArICAgIH0NCiAgICA+ICsg IH0NCiAgICA+ICsNCiAgICA+ICsgIFZBX0VORCAoQXJncyk7DQogICAgPiArDQogICAgPiArICAv Lw0KICAgID4gKyAgLy8gTm8gbWF0Y2hlcyB3ZXJlIGZvdW5kDQogICAgPiArICAvLw0KICAgID4g KyAgcmV0dXJuIE5VTEw7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAg VGhpcyBmdW5jdGlvbiBpcyB0byBjaGVjayBpZiB0aGUgcmVtYWluaW5nIHZhcmlhYmxlIHNwYWNl IGlzIGVub3VnaCB0byBzZXQNCiAgICA+ICsgIGFsbCBWYXJpYWJsZXMgZnJvbSBhcmd1bWVudCBs aXN0IHN1Y2Nlc3NmdWxseS4gVGhlIHB1cnBvc2Ugb2YgdGhlIGNoZWNrDQogICAgPiArICBpcyB0 byBrZWVwIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgVmFyaWFibGVzIHRvIGJlIGluIHZhcmlhYmxl IHN0b3JhZ2UuDQogICAgPiArDQogICAgPiArICBOb3RlOiBWYXJpYWJsZXMgYXJlIGFzc3VtZWQg dG8gYmUgaW4gc2FtZSBzdG9yYWdlLg0KICAgID4gKyAgVGhlIHNldCBzZXF1ZW5jZSBvZiBWYXJp YWJsZXMgd2lsbCBiZSBzYW1lIHdpdGggdGhlIHNlcXVlbmNlIG9mIFZhcmlhYmxlRW50cnkNCiAg ICA+IGZyb20gYXJndW1lbnQgbGlzdCwNCiAgICA+ICsgIHNvIGZvbGxvdyB0aGUgYXJndW1lbnQg c2VxdWVuY2UgdG8gY2hlY2sgdGhlIFZhcmlhYmxlcy4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJh bVtpbl0gQXR0cmlidXRlcyAgICAgICAgIFZhcmlhYmxlIGF0dHJpYnV0ZXMgZm9yIFZhcmlhYmxl IGVudHJpZXMuDQogICAgPiArICBAcGFyYW1baW5dIE1hcmtlciAgICAgICAgICAgICBWQV9MSVNU IHN0eWxlIHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QuDQogICAgPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgYXJndW1lbnQgbGlzdCB3aXRoIHR5cGUNCiAgICA+ IFZBUklBQkxFX0VOVFJZX0NPTlNJU1RFTkNZICouDQogICAgPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBBIE5VTEwgdGVybWluYXRlcyB0aGUgbGlzdC4gVGhlIFZhcmlhYmxlU2l6 ZSBvZg0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFSSUFCTEVfRU5U UllfQ09OU0lTVEVOQ1kgaXMgdGhlIHZhcmlhYmxlIGRhdGEgc2l6ZSBhcw0KICAgID4gaW5wdXQu DQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCB3aWxsIGJlIGNoYW5n ZWQgdG8gdmFyaWFibGUgdG90YWwgc2l6ZSBhcyBvdXRwdXQuDQogICAgPiArDQogICAgPiArICBA cmV0dmFsIFRSVUUgICAgICAgICAgICAgICAgICBIYXZlIGVub3VnaCB2YXJpYWJsZSBzcGFjZSB0 byBzZXQgdGhlIFZhcmlhYmxlcw0KICAgID4gc3VjY2Vzc2Z1bGx5Lg0KICAgID4gKyAgQHJldHZh bCBGQUxTRSAgICAgICAgICAgICAgICAgTm8gZW5vdWdoIHZhcmlhYmxlIHNwYWNlIHRvIHNldCB0 aGUgVmFyaWFibGVzDQogICAgPiBzdWNjZXNzZnVsbHkuDQogICAgPiArDQogICAgPiArKiovDQog ICAgPiArQk9PTEVBTg0KICAgID4gK0VGSUFQSQ0KICAgID4gK0NoZWNrUmVtYWluaW5nU3BhY2VG b3JDb25zaXN0ZW5jeUludGVybmFsICgNCiAgICA+ICsgIElOIFVJTlQzMiAgIEF0dHJpYnV0ZXMs DQogICAgPiArICBJTiBWQV9MSVNUICBNYXJrZXINCiAgICA+ICsgICkNCiAgICA+ICt7DQogICAg PiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KICAgID4gKyAgVkFfTElT VCAgICAgICAgICAgICAgICAgICAgIEFyZ3M7DQogICAgPiArICBWQVJJQUJMRV9FTlRSWV9DT05T SVNURU5DWSAgKlZhcmlhYmxlRW50cnk7DQogICAgPiArICBVSU5UNjQgICAgICAgICAgICAgICAg ICAgICAgTWF4aW11bVZhcmlhYmxlU3RvcmFnZVNpemU7DQogICAgPiArICBVSU5UNjQgICAgICAg ICAgICAgICAgICAgICAgUmVtYWluaW5nVmFyaWFibGVTdG9yYWdlU2l6ZTsNCiAgICA+ICsgIFVJ TlQ2NCAgICAgICAgICAgICAgICAgICAgICBNYXhpbXVtVmFyaWFibGVTaXplOw0KICAgID4gKyAg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgIFRvdGFsTmVlZGVkU2l6ZTsNCiAgICA+ICsgIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICBPcmlnaW5hbFZhclNpemU7DQogICAgPiArICBWQVJJ QUJMRV9TVE9SRV9IRUFERVIgICAgICAgKlZhcmlhYmxlU3RvcmVIZWFkZXI7DQogICAgPiArICBW QVJJQUJMRV9QT0lOVEVSX1RSQUNLICAgICAgVmFyaWFibGVQdHJUcmFjazsNCiAgICA+ICsgIFZB UklBQkxFX0hFQURFUiAgICAgICAgICAgICAqTmV4dFZhcmlhYmxlOw0KICAgID4gKyAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgIFZhck5hbWVTaXplOw0KICAgID4gKyAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgIFZhckRhdGFTaXplOw0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ ICsgIC8vIE5vbi1Wb2xhdGlsZSByZWxhdGVkLg0KICAgID4gKyAgLy8NCiAgICA+ICsgIFZhcmlh YmxlU3RvcmVIZWFkZXIgPSBtTnZWYXJpYWJsZUNhY2hlOw0KICAgID4gKw0KICAgID4gKyAgU3Rh dHVzID0gVmFyaWFibGVTZXJ2aWNlUXVlcnlWYXJpYWJsZUluZm9JbnRlcm5hbCAoDQogICAgPiAr ICAgICAgICAgICAgIEF0dHJpYnV0ZXMsDQogICAgPiArICAgICAgICAgICAgICZNYXhpbXVtVmFy aWFibGVTdG9yYWdlU2l6ZSwNCiAgICA+ICsgICAgICAgICAgICAgJlJlbWFpbmluZ1ZhcmlhYmxl U3RvcmFnZVNpemUsDQogICAgPiArICAgICAgICAgICAgICZNYXhpbXVtVmFyaWFibGVTaXplDQog ICAgPiArICAgICAgICAgICAgICk7DQogICAgPiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMp Ow0KICAgID4gKw0KICAgID4gKyAgVG90YWxOZWVkZWRTaXplID0gMDsNCiAgICA+ICsgIFZBX0NP UFkgKEFyZ3MsIE1hcmtlcik7DQogICAgPiArICBWYXJpYWJsZUVudHJ5ID0gVkFfQVJHIChBcmdz LCBWQVJJQUJMRV9FTlRSWV9DT05TSVNURU5DWSAqKTsNCiAgICA+ICsgIHdoaWxlIChWYXJpYWJs ZUVudHJ5ICE9IE5VTEwpIHsNCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgLy8gQ2FsY3VsYXRl IHZhcmlhYmxlIHRvdGFsIHNpemUuDQogICAgPiArICAgIC8vDQogICAgPiArICAgIFZhck5hbWVT aXplICAgICAgICAgICAgICAgICA9IFN0clNpemUgKFZhcmlhYmxlRW50cnktPk5hbWUpOw0KICAg ID4gKyAgICBWYXJOYW1lU2l6ZSAgICAgICAgICAgICAgICArPSBHRVRfUEFEX1NJWkUgKFZhck5h bWVTaXplKTsNCiAgICA+ICsgICAgVmFyRGF0YVNpemUgICAgICAgICAgICAgICAgID0gVmFyaWFi bGVFbnRyeS0+VmFyaWFibGVTaXplOw0KICAgID4gKyAgICBWYXJEYXRhU2l6ZSAgICAgICAgICAg ICAgICArPSBHRVRfUEFEX1NJWkUgKFZhckRhdGFTaXplKTsNCiAgICA+ICsgICAgVmFyaWFibGVF bnRyeS0+VmFyaWFibGVTaXplID0gSEVBREVSX0FMSUdOICgNCiAgICA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBHZXRWYXJpYWJsZUhlYWRlclNpemUgKA0KICAgID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFs LT5WYXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0DQogICAgPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApICsgVmFyTmFtZVNpemUgKyBWYXJEYXRhU2l6ZQ0KICAgID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgPiArDQogICAgPiArICAg IFRvdGFsTmVlZGVkU2l6ZSArPSBWYXJpYWJsZUVudHJ5LT5WYXJpYWJsZVNpemU7DQogICAgPiAr ICAgIFZhcmlhYmxlRW50cnkgICAgPSBWQV9BUkcgKEFyZ3MsIFZBUklBQkxFX0VOVFJZX0NPTlNJ U1RFTkNZICopOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgVkFfRU5EIChBcmdzKTsN CiAgICA+ICsNCiAgICA+ICsgIGlmIChSZW1haW5pbmdWYXJpYWJsZVN0b3JhZ2VTaXplID49IFRv dGFsTmVlZGVkU2l6ZSkgew0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICAvLyBBbHJlYWR5IGhh dmUgZW5vdWdoIHNwYWNlLg0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICByZXR1cm4gVFJVRTsN CiAgICA+ICsgIH0gZWxzZSBpZiAoQXRSdW50aW1lICgpKSB7DQogICAgPiArICAgIC8vDQogICAg PiArICAgIC8vIEF0IHJ1bnRpbWUsIG5vIHJlY2xhaW0uDQogICAgPiArICAgIC8vIFRoZSBvcmln aW5hbCB2YXJpYWJsZSBzcGFjZSBvZiBWYXJpYWJsZXMgY2FuJ3QgYmUgcmV1c2VkLg0KICAgID4g KyAgICAvLw0KICAgID4gKyAgICByZXR1cm4gRkFMU0U7DQogICAgPiArICB9DQogICAgPiArDQog ICAgPiArICBWQV9DT1BZIChBcmdzLCBNYXJrZXIpOw0KICAgID4gKyAgVmFyaWFibGVFbnRyeSA9 IFZBX0FSRyAoQXJncywgVkFSSUFCTEVfRU5UUllfQ09OU0lTVEVOQ1kgKik7DQogICAgPiArICB3 aGlsZSAoVmFyaWFibGVFbnRyeSAhPSBOVUxMKSB7DQogICAgPiArICAgIC8vDQogICAgPiArICAg IC8vIENoZWNrIGlmIFZhcmlhYmxlW0luZGV4XSBoYXMgYmVlbiBwcmVzZW50IGFuZCBnZXQgaXRz IHNpemUuDQogICAgPiArICAgIC8vDQogICAgPiArICAgIE9yaWdpbmFsVmFyU2l6ZSAgICAgICAg ICAgPSAwOw0KICAgID4gKyAgICBWYXJpYWJsZVB0clRyYWNrLlN0YXJ0UHRyID0gR2V0U3RhcnRQ b2ludGVyIChWYXJpYWJsZVN0b3JlSGVhZGVyKTsNCiAgICA+ICsgICAgVmFyaWFibGVQdHJUcmFj ay5FbmRQdHIgICA9IEdldEVuZFBvaW50ZXIgKFZhcmlhYmxlU3RvcmVIZWFkZXIpOw0KICAgID4g KyAgICBTdGF0dXMgICAgICAgICAgICAgICAgICAgID0gRmluZFZhcmlhYmxlRXggKA0KICAgID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUVudHJ5LT5OYW1lLA0K ICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUVudHJ5LT5H dWlkLA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwNCiAg ICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlZhcmlhYmxlUHRyVHJhY2ss DQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1WYXJpYWJsZU1vZHVs ZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdA0KICAgID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOw0KICAgID4gKyAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVz KSkgew0KICAgID4gKyAgICAgIC8vDQogICAgPiArICAgICAgLy8gR2V0IHNpemUgb2YgVmFyaWFi bGVbSW5kZXhdLg0KICAgID4gKyAgICAgIC8vDQogICAgPiArICAgICAgTmV4dFZhcmlhYmxlICAg ID0gR2V0TmV4dFZhcmlhYmxlUHRyIChWYXJpYWJsZVB0clRyYWNrLkN1cnJQdHIsDQogICAgPiBt VmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLkF1dGhGb3JtYXQpOw0KICAgID4g KyAgICAgIE9yaWdpbmFsVmFyU2l6ZSA9IChVSU5UTilOZXh0VmFyaWFibGUgLSAoVUlOVE4pVmFy aWFibGVQdHJUcmFjay5DdXJyUHRyOw0KICAgID4gKyAgICAgIC8vDQogICAgPiArICAgICAgLy8g QWRkIHRoZSBvcmlnaW5hbCBzaXplIG9mIFZhcmlhYmxlW0luZGV4XSB0byByZW1haW5pbmcgdmFy aWFibGUgc3RvcmFnZSBzaXplLg0KICAgID4gKyAgICAgIC8vDQogICAgPiArICAgICAgUmVtYWlu aW5nVmFyaWFibGVTdG9yYWdlU2l6ZSArPSBPcmlnaW5hbFZhclNpemU7DQogICAgPiArICAgIH0N CiAgICA+ICsNCiAgICA+ICsgICAgaWYgKFZhcmlhYmxlRW50cnktPlZhcmlhYmxlU2l6ZSA+IFJl bWFpbmluZ1ZhcmlhYmxlU3RvcmFnZVNpemUpIHsNCiAgICA+ICsgICAgICAvLw0KICAgID4gKyAg ICAgIC8vIE5vIGVub3VnaCBzcGFjZSBmb3IgVmFyaWFibGVbSW5kZXhdLg0KICAgID4gKyAgICAg IC8vDQogICAgPiArICAgICAgVkFfRU5EIChBcmdzKTsNCiAgICA+ICsgICAgICByZXR1cm4gRkFM U0U7DQogICAgPiArICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgLy8g U3ViIHRoZSAobmV3KSBzaXplIG9mIFZhcmlhYmxlW0luZGV4XSBmcm9tIHJlbWFpbmluZyB2YXJp YWJsZSBzdG9yYWdlIHNpemUuDQogICAgPiArICAgIC8vDQogICAgPiArICAgIFJlbWFpbmluZ1Zh cmlhYmxlU3RvcmFnZVNpemUgLT0gVmFyaWFibGVFbnRyeS0+VmFyaWFibGVTaXplOw0KICAgID4g KyAgICBWYXJpYWJsZUVudHJ5ICAgICAgICAgICAgICAgICA9IFZBX0FSRyAoQXJncywgVkFSSUFC TEVfRU5UUllfQ09OU0lTVEVOQ1kgKik7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICBW QV9FTkQgKEFyZ3MpOw0KICAgID4gKw0KICAgID4gKyAgcmV0dXJuIFRSVUU7DQogICAgPiArfQ0K ICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgVGhpcyBmdW5jdGlvbiBpcyB0byBjaGVjayBp ZiB0aGUgcmVtYWluaW5nIHZhcmlhYmxlIHNwYWNlIGlzIGVub3VnaCB0byBzZXQNCiAgICA+ICsg IGFsbCBWYXJpYWJsZXMgZnJvbSBhcmd1bWVudCBsaXN0IHN1Y2Nlc3NmdWxseS4gVGhlIHB1cnBv c2Ugb2YgdGhlIGNoZWNrDQogICAgPiArICBpcyB0byBrZWVwIHRoZSBjb25zaXN0ZW5jeSBvZiB0 aGUgVmFyaWFibGVzIHRvIGJlIGluIHZhcmlhYmxlIHN0b3JhZ2UuDQogICAgPiArDQogICAgPiAr ICBOb3RlOiBWYXJpYWJsZXMgYXJlIGFzc3VtZWQgdG8gYmUgaW4gc2FtZSBzdG9yYWdlLg0KICAg ID4gKyAgVGhlIHNldCBzZXF1ZW5jZSBvZiBWYXJpYWJsZXMgd2lsbCBiZSBzYW1lIHdpdGggdGhl IHNlcXVlbmNlIG9mIFZhcmlhYmxlRW50cnkNCiAgICA+IGZyb20gYXJndW1lbnQgbGlzdCwNCiAg ICA+ICsgIHNvIGZvbGxvdyB0aGUgYXJndW1lbnQgc2VxdWVuY2UgdG8gY2hlY2sgdGhlIFZhcmlh Ymxlcy4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbVtpbl0gQXR0cmlidXRlcyAgICAgICAgIFZh cmlhYmxlIGF0dHJpYnV0ZXMgZm9yIFZhcmlhYmxlIGVudHJpZXMuDQogICAgPiArICBAcGFyYW0g Li4uICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgYXJndW1lbnQgbGlzdCB3aXRoIHR5 cGUNCiAgICA+IFZBUklBQkxFX0VOVFJZX0NPTlNJU1RFTkNZICouDQogICAgPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBBIE5VTEwgdGVybWluYXRlcyB0aGUgbGlzdC4gVGhlIFZh cmlhYmxlU2l6ZSBvZg0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFS SUFCTEVfRU5UUllfQ09OU0lTVEVOQ1kgaXMgdGhlIHZhcmlhYmxlIGRhdGEgc2l6ZSBhcw0KICAg ID4gaW5wdXQuDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCB3aWxs IGJlIGNoYW5nZWQgdG8gdmFyaWFibGUgdG90YWwgc2l6ZSBhcyBvdXRwdXQuDQogICAgPiArDQog ICAgPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgICAgICAgICBIYXZlIGVub3VnaCB2YXJpYWJs ZSBzcGFjZSB0byBzZXQgdGhlIFZhcmlhYmxlcw0KICAgID4gc3VjY2Vzc2Z1bGx5Lg0KICAgID4g KyAgQHJldHZhbCBGQUxTRSAgICAgICAgICAgICAgICAgTm8gZW5vdWdoIHZhcmlhYmxlIHNwYWNl IHRvIHNldCB0aGUgVmFyaWFibGVzDQogICAgPiBzdWNjZXNzZnVsbHkuDQogICAgPiArDQogICAg PiArKiovDQogICAgPiArQk9PTEVBTg0KICAgID4gK0VGSUFQSQ0KICAgID4gK0NoZWNrUmVtYWlu aW5nU3BhY2VGb3JDb25zaXN0ZW5jeSAoDQogICAgPiArICBJTiBVSU5UMzIgIEF0dHJpYnV0ZXMs DQogICAgPiArICAuLi4NCiAgICA+ICsgICkNCiAgICA+ICt7DQogICAgPiArICBWQV9MSVNUICBN YXJrZXI7DQogICAgPiArICBCT09MRUFOICBSZXR1cm47DQogICAgPiArDQogICAgPiArICBWQV9T VEFSVCAoTWFya2VyLCBBdHRyaWJ1dGVzKTsNCiAgICA+ICsNCiAgICA+ICsgIFJldHVybiA9IENo ZWNrUmVtYWluaW5nU3BhY2VGb3JDb25zaXN0ZW5jeUludGVybmFsIChBdHRyaWJ1dGVzLCBNYXJr ZXIpOw0KICAgID4gKw0KICAgID4gKyAgVkFfRU5EIChNYXJrZXIpOw0KICAgID4gKw0KICAgID4g KyAgcmV0dXJuIFJldHVybjsNCiAgICA+ICt9DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiAr ICBIb29rIHRoZSBvcGVyYXRpb25zIGluIFBsYXRmb3JtTGFuZ0NvZGVzLCBMYW5nQ29kZXMsIFBs YXRmb3JtTGFuZyBhbmQNCiAgICA+IExhbmcuDQogICAgPiArDQogICAgPiArICBXaGVuIHNldHRp bmcgTGFuZy9MYW5nQ29kZXMsIHNpbXVsdGFuZW91c2x5IHVwZGF0ZQ0KICAgID4gUGxhdGZvcm1M YW5nL1BsYXRmb3JtTGFuZ0NvZGVzLg0KICAgID4gKw0KICAgID4gKyAgQWNjb3JkaW5nIHRvIFVF Rkkgc3BlYywgUGxhdGZvcm1MYW5nQ29kZXMvTGFuZ0NvZGVzIGFyZSBvbmx5IHNldCBvbmNlIGlu DQogICAgPiBmaXJtd2FyZSBpbml0aWFsaXphdGlvbiwNCiAgICA+ICsgIGFuZCBhcmUgcmVhZC1v bmx5LiBUaGVyZWZvcmUsIGluIHZhcmlhYmxlIGRyaXZlciwgb25seSBzdG9yZSB0aGUgb3JpZ2lu YWwgdmFsdWUNCiAgICA+IGZvciBvdGhlciB1c2UuDQogICAgPiArDQogICAgPiArICBAcGFyYW1b aW5dIFZhcmlhYmxlTmFtZSAgICAgICBOYW1lIG9mIHZhcmlhYmxlLg0KICAgID4gKw0KICAgID4g KyAgQHBhcmFtW2luXSBEYXRhICAgICAgICAgICAgICAgVmFyaWFibGUgZGF0YS4NCiAgICA+ICsN CiAgICA+ICsgIEBwYXJhbVtpbl0gRGF0YVNpemUgICAgICAgICAgIFNpemUgb2YgZGF0YS4gMCBt ZWFucyBkZWxldGUuDQogICAgPiArDQogICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgICBUaGUgdXBkYXRlIG9wZXJhdGlvbiBpcyBzdWNjZXNzZnVsIG9yIGlnbm9yZWQuDQogICAg PiArICBAcmV0dmFsIEVGSV9XUklURV9QUk9URUNURUQgICBVcGRhdGUgUGxhdGZvcm1MYW5nQ29k ZXMvTGFuZ0NvZGVzIGF0DQogICAgPiBydW50aW1lLg0KICAgID4gKyAgQHJldHZhbCBFRklfT1VU X09GX1JFU09VUkNFUyAgTm8gZW5vdWdoIHZhcmlhYmxlIHNwYWNlIHRvIGRvIHRoZQ0KICAgID4g dXBkYXRlIG9wZXJhdGlvbi4NCiAgICA+ICsgIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgICAg IE90aGVyIGVycm9ycyBoYXBwZW5lZCBkdXJpbmcgdGhlIHVwZGF0ZSBvcGVyYXRpb24uDQogICAg PiArDQogICAgPiArKiovDQogICAgPiArRUZJX1NUQVRVUw0KICAgID4gK0F1dG9VcGRhdGVMYW5n VmFyaWFibGUgKA0KICAgID4gKyAgSU4gIENIQVIxNiAgKlZhcmlhYmxlTmFtZSwNCiAgICA+ICsg IElOICBWT0lEICAgICpEYXRhLA0KICAgID4gKyAgSU4gIFVJTlROICAgRGF0YVNpemUNCiAgICA+ ICsgICkNCiAgICA+ICt7DQogICAgPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgU3Rh dHVzOw0KICAgID4gKyAgQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICpCZXN0UGxhdGZvcm1M YW5nOw0KICAgID4gKyAgQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICpCZXN0TGFuZzsNCiAg ICA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCiAgICA+ICsgIFVJTlQz MiAgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVzOw0KICAgID4gKyAgVkFSSUFCTEVfUE9J TlRFUl9UUkFDSyAgICAgIFZhcmlhYmxlOw0KICAgID4gKyAgQk9PTEVBTiAgICAgICAgICAgICAg ICAgICAgIFNldExhbmd1YWdlQ29kZXM7DQogICAgPiArICBWQVJJQUJMRV9FTlRSWV9DT05TSVNU RU5DWSAgVmFyaWFibGVFbnRyeVsyXTsNCiAgICA+ICsNCiAgICA+ICsgIC8vDQogICAgPiArICAv LyBEb24ndCBkbyB1cGRhdGVzIGZvciBkZWxldGUgb3BlcmF0aW9uDQogICAgPiArICAvLw0KICAg ID4gKyAgaWYgKERhdGFTaXplID09IDApIHsNCiAgICA+ICsgICAgcmV0dXJuIEVGSV9TVUNDRVNT Ow0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgU2V0TGFuZ3VhZ2VDb2RlcyA9IEZBTFNF Ow0KICAgID4gKw0KICAgID4gKyAgaWYgKFN0ckNtcCAoVmFyaWFibGVOYW1lLCBFRklfUExBVEZP Uk1fTEFOR19DT0RFU19WQVJJQUJMRV9OQU1FKQ0KICAgID4gPT0gMCkgew0KICAgID4gKyAgICAv Lw0KICAgID4gKyAgICAvLyBQbGF0Zm9ybUxhbmdDb2RlcyBpcyBhIHZvbGF0aWxlIHZhcmlhYmxl LCBzbyBpdCBjYW4gbm90IGJlIHVwZGF0ZWQgYXQNCiAgICA+IHJ1bnRpbWUuDQogICAgPiArICAg IC8vDQogICAgPiArICAgIGlmIChBdFJ1bnRpbWUgKCkpIHsNCiAgICA+ICsgICAgICByZXR1cm4g RUZJX1dSSVRFX1BST1RFQ1RFRDsNCiAgICA+ICsgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICBT ZXRMYW5ndWFnZUNvZGVzID0gVFJVRTsNCiAgICA+ICsNCiAgICA+ICsgICAgLy8NCiAgICA+ICsg ICAgLy8gQWNjb3JkaW5nIHRvIFVFRkkgc3BlYywgUGxhdGZvcm1MYW5nQ29kZXMgaXMgb25seSBz ZXQgb25jZSBpbiBmaXJtd2FyZQ0KICAgID4gaW5pdGlhbGl6YXRpb24sIGFuZCBpcyByZWFkLW9u bHkNCiAgICA+ICsgICAgLy8gVGhlcmVmb3JlLCBpbiB2YXJpYWJsZSBkcml2ZXIsIG9ubHkgc3Rv cmUgdGhlIG9yaWdpbmFsIHZhbHVlIGZvciBvdGhlciB1c2UuDQogICAgPiArICAgIC8vDQogICAg PiArICAgIGlmIChtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlBsYXRmb3JtTGFuZ0NvZGVzICE9IE5V TEwpIHsNCiAgICA+ICsgICAgICBGcmVlUG9vbCAobVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5QbGF0 Zm9ybUxhbmdDb2Rlcyk7DQogICAgPiArICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgbVZhcmlh YmxlTW9kdWxlR2xvYmFsLT5QbGF0Zm9ybUxhbmdDb2RlcyA9IEFsbG9jYXRlUnVudGltZUNvcHlQ b29sDQogICAgPiAoRGF0YVNpemUsIERhdGEpOw0KICAgID4gKyAgICBBU1NFUlQgKG1WYXJpYWJs ZU1vZHVsZUdsb2JhbC0+UGxhdGZvcm1MYW5nQ29kZXMgIT0gTlVMTCk7DQogICAgPiArDQogICAg PiArICAgIC8vDQogICAgPiArICAgIC8vIFBsYXRmb3JtTGFuZyBob2xkcyBhIHNpbmdsZSBsYW5n dWFnZSBmcm9tIFBsYXRmb3JtTGFuZ0NvZGVzLA0KICAgID4gKyAgICAvLyBzbyB0aGUgc2l6ZSBv ZiBQbGF0Zm9ybUxhbmdDb2RlcyBpcyBlbm91Z2ggZm9yIHRoZSBQbGF0Zm9ybUxhbmcuDQogICAg PiArICAgIC8vDQogICAgPiArICAgIGlmIChtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlBsYXRmb3Jt TGFuZyAhPSBOVUxMKSB7DQogICAgPiArICAgICAgRnJlZVBvb2wgKG1WYXJpYWJsZU1vZHVsZUds b2JhbC0+UGxhdGZvcm1MYW5nKTsNCiAgICA+ICsgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICBt VmFyaWFibGVNb2R1bGVHbG9iYWwtPlBsYXRmb3JtTGFuZyA9IEFsbG9jYXRlUnVudGltZVBvb2wg KERhdGFTaXplKTsNCiAgICA+ICsgICAgQVNTRVJUIChtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlBs YXRmb3JtTGFuZyAhPSBOVUxMKTsNCiAgICA+ICsgIH0gZWxzZSBpZiAoU3RyQ21wIChWYXJpYWJs ZU5hbWUsIEVGSV9MQU5HX0NPREVTX1ZBUklBQkxFX05BTUUpID09IDApIHsNCiAgICA+ICsgICAg Ly8NCiAgICA+ICsgICAgLy8gTGFuZ0NvZGVzIGlzIGEgdm9sYXRpbGUgdmFyaWFibGUsIHNvIGl0 IGNhbiBub3QgYmUgdXBkYXRlZCBhdCBydW50aW1lLg0KICAgID4gKyAgICAvLw0KICAgID4gKyAg ICBpZiAoQXRSdW50aW1lICgpKSB7DQogICAgPiArICAgICAgcmV0dXJuIEVGSV9XUklURV9QUk9U RUNURUQ7DQogICAgPiArICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgU2V0TGFuZ3VhZ2VDb2Rl cyA9IFRSVUU7DQogICAgPiArDQogICAgPiArICAgIC8vDQogICAgPiArICAgIC8vIEFjY29yZGlu ZyB0byBVRUZJIHNwZWMsIExhbmdDb2RlcyBpcyBvbmx5IHNldCBvbmNlIGluIGZpcm13YXJlDQog ICAgPiBpbml0aWFsaXphdGlvbiwgYW5kIGlzIHJlYWQtb25seQ0KICAgID4gKyAgICAvLyBUaGVy ZWZvcmUsIGluIHZhcmlhYmxlIGRyaXZlciwgb25seSBzdG9yZSB0aGUgb3JpZ2luYWwgdmFsdWUg Zm9yIG90aGVyIHVzZS4NCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgaWYgKG1WYXJpYWJsZU1v ZHVsZUdsb2JhbC0+TGFuZ0NvZGVzICE9IE5VTEwpIHsNCiAgICA+ICsgICAgICBGcmVlUG9vbCAo bVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5MYW5nQ29kZXMpOw0KICAgID4gKyAgICB9DQogICAgPiAr DQogICAgPiArICAgIG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+TGFuZ0NvZGVzID0gQWxsb2NhdGVS dW50aW1lQ29weVBvb2wgKERhdGFTaXplLA0KICAgID4gRGF0YSk7DQogICAgPiArICAgIEFTU0VS VCAobVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5MYW5nQ29kZXMgIT0gTlVMTCk7DQogICAgPiArICB9 DQogICAgPiArDQogICAgPiArICBpZiAoICBTZXRMYW5ndWFnZUNvZGVzDQogICAgPiArICAgICAm JiAobVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5QbGF0Zm9ybUxhbmdDb2RlcyAhPSBOVUxMKQ0KICAg ID4gKyAgICAgJiYgKG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+TGFuZ0NvZGVzICE9IE5VTEwpKQ0K ICAgID4gKyAgew0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICAvLyBVcGRhdGUgTGFuZyBpZiBQ bGF0Zm9ybUxhbmcgaXMgYWxyZWFkeSBzZXQNCiAgICA+ICsgICAgLy8gVXBkYXRlIFBsYXRmb3Jt TGFuZyBpZiBMYW5nIGlzIGFscmVhZHkgc2V0DQogICAgPiArICAgIC8vDQogICAgPiArICAgIFN0 YXR1cyA9IEZpbmRWYXJpYWJsZSAoRUZJX1BMQVRGT1JNX0xBTkdfVkFSSUFCTEVfTkFNRSwNCiAg ICA+ICZnRWZpR2xvYmFsVmFyaWFibGVHdWlkLCAmVmFyaWFibGUsICZtVmFyaWFibGVNb2R1bGVH bG9iYWwtPlZhcmlhYmxlR2xvYmFsLA0KICAgID4gRkFMU0UpOw0KICAgID4gKyAgICBpZiAoIUVG SV9FUlJPUiAoU3RhdHVzKSkgew0KICAgID4gKyAgICAgIC8vDQogICAgPiArICAgICAgLy8gVXBk YXRlIExhbmcNCiAgICA+ICsgICAgICAvLw0KICAgID4gKyAgICAgIFZhcmlhYmxlTmFtZSA9IEVG SV9QTEFURk9STV9MQU5HX1ZBUklBQkxFX05BTUU7DQogICAgPiArICAgICAgRGF0YSAgICAgICAg ID0gR2V0VmFyaWFibGVEYXRhUHRyIChWYXJpYWJsZS5DdXJyUHRyLCBtVmFyaWFibGVNb2R1bGVH bG9iYWwtDQogICAgPiA+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdCk7DQogICAgPiArICAgICAg RGF0YVNpemUgICAgID0gRGF0YVNpemVPZlZhcmlhYmxlIChWYXJpYWJsZS5DdXJyUHRyLCBtVmFy aWFibGVNb2R1bGVHbG9iYWwtDQogICAgPiA+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdCk7DQog ICAgPiArICAgIH0gZWxzZSB7DQogICAgPiArICAgICAgU3RhdHVzID0gRmluZFZhcmlhYmxlIChF RklfTEFOR19WQVJJQUJMRV9OQU1FLA0KICAgID4gJmdFZmlHbG9iYWxWYXJpYWJsZUd1aWQsICZW YXJpYWJsZSwgJm1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwsDQogICAgPiBG QUxTRSk7DQogICAgPiArICAgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCiAgICA+ICsg ICAgICAgIC8vDQogICAgPiArICAgICAgICAvLyBVcGRhdGUgUGxhdGZvcm1MYW5nDQogICAgPiAr ICAgICAgICAvLw0KICAgID4gKyAgICAgICAgVmFyaWFibGVOYW1lID0gRUZJX0xBTkdfVkFSSUFC TEVfTkFNRTsNCiAgICA+ICsgICAgICAgIERhdGEgICAgICAgICA9IEdldFZhcmlhYmxlRGF0YVB0 ciAoVmFyaWFibGUuQ3VyclB0ciwgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KICAgID4gPlZhcmlh YmxlR2xvYmFsLkF1dGhGb3JtYXQpOw0KICAgID4gKyAgICAgICAgRGF0YVNpemUgICAgID0gRGF0 YVNpemVPZlZhcmlhYmxlIChWYXJpYWJsZS5DdXJyUHRyLA0KICAgID4gbVZhcmlhYmxlTW9kdWxl R2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0KTsNCiAgICA+ICsgICAgICB9IGVsc2Ug ew0KICAgID4gKyAgICAgICAgLy8NCiAgICA+ICsgICAgICAgIC8vIE5laXRoZXIgUGxhdGZvcm1M YW5nIG5vciBMYW5nIGlzIHNldCwgZGlyZWN0bHkgcmV0dXJuDQogICAgPiArICAgICAgICAvLw0K ICAgID4gKyAgICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KICAgID4gKyAgICAgIH0NCiAgICA+ ICsgICAgfQ0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgU3RhdHVzID0gRUZJX1NVQ0NF U1M7DQogICAgPiArDQogICAgPiArICAvLw0KICAgID4gKyAgLy8gQWNjb3JkaW5nIHRvIFVFRkkg c3BlYywgIkxhbmciIGFuZCAiUGxhdGZvcm1MYW5nIiBpcyBOVnxCU3xSVA0KICAgID4gYXR0cmli dXRpb25zLg0KICAgID4gKyAgLy8NCiAgICA+ICsgIEF0dHJpYnV0ZXMgPSBFRklfVkFSSUFCTEVf Tk9OX1ZPTEFUSUxFIHwNCiAgICA+IEVGSV9WQVJJQUJMRV9CT09UU0VSVklDRV9BQ0NFU1MgfCBF RklfVkFSSUFCTEVfUlVOVElNRV9BQ0NFU1M7DQogICAgPiArDQogICAgPiArICBpZiAoU3RyQ21w IChWYXJpYWJsZU5hbWUsIEVGSV9QTEFURk9STV9MQU5HX1ZBUklBQkxFX05BTUUpID09IDApIHsN CiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgLy8gVXBkYXRlIExhbmcgd2hlbiBQbGF0Zm9ybUxh bmdDb2Rlcy9MYW5nQ29kZXMgd2VyZSBzZXQuDQogICAgPiArICAgIC8vDQogICAgPiArICAgIGlm ICgobVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5QbGF0Zm9ybUxhbmdDb2RlcyAhPSBOVUxMKSAmJg0K ICAgID4gKG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+TGFuZ0NvZGVzICE9IE5VTEwpKSB7DQogICAg PiArICAgICAgLy8NCiAgICA+ICsgICAgICAvLyBXaGVuIHNldHRpbmcgUGxhdGZvcm1MYW5nLCBm aXJzdGx5IGdldCBtb3N0IG1hdGNoZWQgbGFuZ3VhZ2Ugc3RyaW5nDQogICAgPiBmcm9tIHN1cHBv cnRlZCBsYW5ndWFnZSBjb2Rlcy4NCiAgICA+ICsgICAgICAvLw0KICAgID4gKyAgICAgIEJlc3RQ bGF0Zm9ybUxhbmcgPSBWYXJpYWJsZUdldEJlc3RMYW5ndWFnZSAobVZhcmlhYmxlTW9kdWxlR2xv YmFsLQ0KICAgID4gPlBsYXRmb3JtTGFuZ0NvZGVzLCBGQUxTRSwgRGF0YSwgTlVMTCk7DQogICAg PiArICAgICAgaWYgKEJlc3RQbGF0Zm9ybUxhbmcgIT0gTlVMTCkgew0KICAgID4gKyAgICAgICAg Ly8NCiAgICA+ICsgICAgICAgIC8vIEdldCB0aGUgY29ycmVzcG9uZGluZyBpbmRleCBpbiBsYW5n dWFnZSBjb2Rlcy4NCiAgICA+ICsgICAgICAgIC8vDQogICAgPiArICAgICAgICBJbmRleCA9IEdl dEluZGV4RnJvbVN1cHBvcnRlZExhbmdDb2RlcyAobVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KICAg ID4gPlBsYXRmb3JtTGFuZ0NvZGVzLCBCZXN0UGxhdGZvcm1MYW5nLCBGQUxTRSk7DQogICAgPiAr DQogICAgPiArICAgICAgICAvLw0KICAgID4gKyAgICAgICAgLy8gR2V0IHRoZSBjb3JyZXNwb25k aW5nIElTTzYzOSBsYW5ndWFnZSB0YWcgYWNjb3JkaW5nIHRvIFJGQzQ2NDYNCiAgICA+IGxhbmd1 YWdlIHRhZy4NCiAgICA+ICsgICAgICAgIC8vDQogICAgPiArICAgICAgICBCZXN0TGFuZyA9IEdl dExhbmdGcm9tU3VwcG9ydGVkTGFuZ0NvZGVzIChtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQogICAg PiA+TGFuZ0NvZGVzLCBJbmRleCwgVFJVRSk7DQogICAgPiArDQogICAgPiArICAgICAgICAvLw0K ICAgID4gKyAgICAgICAgLy8gQ2hlY2sgdGhlIHZhcmlhYmxlIHNwYWNlIGZvciBib3RoIExhbmcg YW5kIFBsYXRmb3JtTGFuZyB2YXJpYWJsZS4NCiAgICA+ICsgICAgICAgIC8vDQogICAgPiArICAg ICAgICBWYXJpYWJsZUVudHJ5WzBdLlZhcmlhYmxlU2l6ZSA9IElTT182MzlfMl9FTlRSWV9TSVpF ICsgMTsNCiAgICA+ICsgICAgICAgIFZhcmlhYmxlRW50cnlbMF0uR3VpZCAgICAgICAgID0gJmdF ZmlHbG9iYWxWYXJpYWJsZUd1aWQ7DQogICAgPiArICAgICAgICBWYXJpYWJsZUVudHJ5WzBdLk5h bWUgICAgICAgICA9IEVGSV9MQU5HX1ZBUklBQkxFX05BTUU7DQogICAgPiArDQogICAgPiArICAg ICAgICBWYXJpYWJsZUVudHJ5WzFdLlZhcmlhYmxlU2l6ZSA9IEFzY2lpU3RyU2l6ZSAoQmVzdFBs YXRmb3JtTGFuZyk7DQogICAgPiArICAgICAgICBWYXJpYWJsZUVudHJ5WzFdLkd1aWQgICAgICAg ICA9ICZnRWZpR2xvYmFsVmFyaWFibGVHdWlkOw0KICAgID4gKyAgICAgICAgVmFyaWFibGVFbnRy eVsxXS5OYW1lICAgICAgICAgPSBFRklfUExBVEZPUk1fTEFOR19WQVJJQUJMRV9OQU1FOw0KICAg ID4gKyAgICAgICAgaWYgKCFDaGVja1JlbWFpbmluZ1NwYWNlRm9yQ29uc2lzdGVuY3kNCiAgICA+ IChWQVJJQUJMRV9BVFRSSUJVVEVfTlZfQlNfUlQsICZWYXJpYWJsZUVudHJ5WzBdLCAmVmFyaWFi bGVFbnRyeVsxXSwNCiAgICA+IE5VTEwpKSB7DQogICAgPiArICAgICAgICAgIC8vDQogICAgPiAr ICAgICAgICAgIC8vIE5vIGVub3VnaCB2YXJpYWJsZSBzcGFjZSB0byBzZXQgYm90aCBMYW5nIGFu ZCBQbGF0Zm9ybUxhbmcNCiAgICA+IHN1Y2Nlc3NmdWxseS4NCiAgICA+ICsgICAgICAgICAgLy8N CiAgICA+ICsgICAgICAgICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQogICAgPiAr ICAgICAgICB9IGVsc2Ugew0KICAgID4gKyAgICAgICAgICAvLw0KICAgID4gKyAgICAgICAgICAv LyBTdWNjZXNzZnVsbHkgY29udmVydCBQbGF0Zm9ybUxhbmcgdG8gTGFuZywgYW5kIHNldCB0aGUg QmVzdExhbmcgdmFsdWUNCiAgICA+IGludG8gTGFuZyB2YXJpYWJsZSBzaW11bHRhbmVvdXNseS4N CiAgICA+ICsgICAgICAgICAgLy8NCiAgICA+ICsgICAgICAgICAgRmluZFZhcmlhYmxlIChFRklf TEFOR19WQVJJQUJMRV9OQU1FLCAmZ0VmaUdsb2JhbFZhcmlhYmxlR3VpZCwNCiAgICA+ICZWYXJp YWJsZSwgJm1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwsIEZBTFNFKTsNCiAg ICA+ICsNCiAgICA+ICsgICAgICAgICAgU3RhdHVzID0gVXBkYXRlVmFyaWFibGUgKA0KICAgID4g KyAgICAgICAgICAgICAgICAgICAgIEVGSV9MQU5HX1ZBUklBQkxFX05BTUUsDQogICAgPiArICAg ICAgICAgICAgICAgICAgICAgJmdFZmlHbG9iYWxWYXJpYWJsZUd1aWQsDQogICAgPiArICAgICAg ICAgICAgICAgICAgICAgQmVzdExhbmcsDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgSVNP XzYzOV8yX0VOVFJZX1NJWkUgKyAxLA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgIEF0dHJp YnV0ZXMsDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgMCwNCiAgICA+ICsgICAgICAgICAg ICAgICAgICAgICAwLA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICZWYXJpYWJsZSwNCiAg ICA+ICsgICAgICAgICAgICAgICAgICAgICBOVUxMDQogICAgPiArICAgICAgICAgICAgICAgICAg ICAgKTsNCiAgICA+ICsgICAgICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgICAgIERFQlVHICgo REVCVUdfSU5GTywgIlZhcmlhYmxlIERyaXZlciBBdXRvIFVwZGF0ZSBQbGF0Zm9ybUxhbmcsDQog ICAgPiBQbGF0Zm9ybUxhbmc6JWEsIExhbmc6JWEgU3RhdHVzOiAlclxuIiwgQmVzdFBsYXRmb3Jt TGFuZywgQmVzdExhbmcsIFN0YXR1cykpOw0KICAgID4gKyAgICAgIH0NCiAgICA+ICsgICAgfQ0K ICAgID4gKyAgfSBlbHNlIGlmIChTdHJDbXAgKFZhcmlhYmxlTmFtZSwgRUZJX0xBTkdfVkFSSUFC TEVfTkFNRSkgPT0gMCkgew0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICAvLyBVcGRhdGUgUGxh dGZvcm1MYW5nIHdoZW4gUGxhdGZvcm1MYW5nQ29kZXMvTGFuZ0NvZGVzIHdlcmUgc2V0Lg0KICAg ID4gKyAgICAvLw0KICAgID4gKyAgICBpZiAoKG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+UGxhdGZv cm1MYW5nQ29kZXMgIT0gTlVMTCkgJiYNCiAgICA+IChtVmFyaWFibGVNb2R1bGVHbG9iYWwtPkxh bmdDb2RlcyAhPSBOVUxMKSkgew0KICAgID4gKyAgICAgIC8vDQogICAgPiArICAgICAgLy8gV2hl biBzZXR0aW5nIExhbmcsIGZpcnN0bHkgZ2V0IG1vc3QgbWF0Y2hlZCBsYW5ndWFnZSBzdHJpbmcg ZnJvbQ0KICAgID4gc3VwcG9ydGVkIGxhbmd1YWdlIGNvZGVzLg0KICAgID4gKyAgICAgIC8vDQog ICAgPiArICAgICAgQmVzdExhbmcgPSBWYXJpYWJsZUdldEJlc3RMYW5ndWFnZSAobVZhcmlhYmxl TW9kdWxlR2xvYmFsLT5MYW5nQ29kZXMsDQogICAgPiBUUlVFLCBEYXRhLCBOVUxMKTsNCiAgICA+ ICsgICAgICBpZiAoQmVzdExhbmcgIT0gTlVMTCkgew0KICAgID4gKyAgICAgICAgLy8NCiAgICA+ ICsgICAgICAgIC8vIEdldCB0aGUgY29ycmVzcG9uZGluZyBpbmRleCBpbiBsYW5ndWFnZSBjb2Rl cy4NCiAgICA+ICsgICAgICAgIC8vDQogICAgPiArICAgICAgICBJbmRleCA9IEdldEluZGV4RnJv bVN1cHBvcnRlZExhbmdDb2RlcyAobVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KICAgID4gPkxhbmdD b2RlcywgQmVzdExhbmcsIFRSVUUpOw0KICAgID4gKw0KICAgID4gKyAgICAgICAgLy8NCiAgICA+ ICsgICAgICAgIC8vIEdldCB0aGUgY29ycmVzcG9uZGluZyBSRkM0NjQ2IGxhbmd1YWdlIHRhZyBh Y2NvcmRpbmcgdG8gSVNPNjM5DQogICAgPiBsYW5ndWFnZSB0YWcuDQogICAgPiArICAgICAgICAv Lw0KICAgID4gKyAgICAgICAgQmVzdFBsYXRmb3JtTGFuZyA9IEdldExhbmdGcm9tU3VwcG9ydGVk TGFuZ0NvZGVzDQogICAgPiAobVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5QbGF0Zm9ybUxhbmdDb2Rl cywgSW5kZXgsIEZBTFNFKTsNCiAgICA+ICsNCiAgICA+ICsgICAgICAgIC8vDQogICAgPiArICAg ICAgICAvLyBDaGVjayB0aGUgdmFyaWFibGUgc3BhY2UgZm9yIGJvdGggUGxhdGZvcm1MYW5nIGFu ZCBMYW5nIHZhcmlhYmxlLg0KICAgID4gKyAgICAgICAgLy8NCiAgICA+ICsgICAgICAgIFZhcmlh YmxlRW50cnlbMF0uVmFyaWFibGVTaXplID0gQXNjaWlTdHJTaXplIChCZXN0UGxhdGZvcm1MYW5n KTsNCiAgICA+ICsgICAgICAgIFZhcmlhYmxlRW50cnlbMF0uR3VpZCAgICAgICAgID0gJmdFZmlH bG9iYWxWYXJpYWJsZUd1aWQ7DQogICAgPiArICAgICAgICBWYXJpYWJsZUVudHJ5WzBdLk5hbWUg ICAgICAgICA9IEVGSV9QTEFURk9STV9MQU5HX1ZBUklBQkxFX05BTUU7DQogICAgPiArDQogICAg PiArICAgICAgICBWYXJpYWJsZUVudHJ5WzFdLlZhcmlhYmxlU2l6ZSA9IElTT182MzlfMl9FTlRS WV9TSVpFICsgMTsNCiAgICA+ICsgICAgICAgIFZhcmlhYmxlRW50cnlbMV0uR3VpZCAgICAgICAg ID0gJmdFZmlHbG9iYWxWYXJpYWJsZUd1aWQ7DQogICAgPiArICAgICAgICBWYXJpYWJsZUVudHJ5 WzFdLk5hbWUgICAgICAgICA9IEVGSV9MQU5HX1ZBUklBQkxFX05BTUU7DQogICAgPiArICAgICAg ICBpZiAoIUNoZWNrUmVtYWluaW5nU3BhY2VGb3JDb25zaXN0ZW5jeQ0KICAgID4gKFZBUklBQkxF X0FUVFJJQlVURV9OVl9CU19SVCwgJlZhcmlhYmxlRW50cnlbMF0sICZWYXJpYWJsZUVudHJ5WzFd LA0KICAgID4gTlVMTCkpIHsNCiAgICA+ICsgICAgICAgICAgLy8NCiAgICA+ICsgICAgICAgICAg Ly8gTm8gZW5vdWdoIHZhcmlhYmxlIHNwYWNlIHRvIHNldCBib3RoIFBsYXRmb3JtTGFuZyBhbmQg TGFuZw0KICAgID4gc3VjY2Vzc2Z1bGx5Lg0KICAgID4gKyAgICAgICAgICAvLw0KICAgID4gKyAg ICAgICAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCiAgICA+ICsgICAgICAgIH0g ZWxzZSB7DQogICAgPiArICAgICAgICAgIC8vDQogICAgPiArICAgICAgICAgIC8vIFN1Y2Nlc3Nm dWxseSBjb252ZXJ0IExhbmcgdG8gUGxhdGZvcm1MYW5nLCBhbmQgc2V0IHRoZQ0KICAgID4gQmVz dFBsYXRmb3JtTGFuZyB2YWx1ZSBpbnRvIFBsYXRmb3JtTGFuZyB2YXJpYWJsZSBzaW11bHRhbmVv dXNseS4NCiAgICA+ICsgICAgICAgICAgLy8NCiAgICA+ICsgICAgICAgICAgRmluZFZhcmlhYmxl IChFRklfUExBVEZPUk1fTEFOR19WQVJJQUJMRV9OQU1FLA0KICAgID4gJmdFZmlHbG9iYWxWYXJp YWJsZUd1aWQsICZWYXJpYWJsZSwgJm1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9i YWwsDQogICAgPiBGQUxTRSk7DQogICAgPiArDQogICAgPiArICAgICAgICAgIFN0YXR1cyA9IFVw ZGF0ZVZhcmlhYmxlICgNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICBFRklfUExBVEZPUk1f TEFOR19WQVJJQUJMRV9OQU1FLA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICZnRWZpR2xv YmFsVmFyaWFibGVHdWlkLA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgIEJlc3RQbGF0Zm9y bUxhbmcsDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgQXNjaWlTdHJTaXplIChCZXN0UGxh dGZvcm1MYW5nKSwNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVzLA0KICAg ID4gKyAgICAgICAgICAgICAgICAgICAgIDAsDQogICAgPiArICAgICAgICAgICAgICAgICAgICAg MCwNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAmVmFyaWFibGUsDQogICAgPiArICAgICAg ICAgICAgICAgICAgICAgTlVMTA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICk7DQogICAg PiArICAgICAgICB9DQogICAgPiArDQogICAgPiArICAgICAgICBERUJVRyAoKERFQlVHX0lORk8s ICJWYXJpYWJsZSBEcml2ZXIgQXV0byBVcGRhdGUgTGFuZywgTGFuZzolYSwNCiAgICA+IFBsYXRm b3JtTGFuZzolYSBTdGF0dXM6ICVyXG4iLCBCZXN0TGFuZywgQmVzdFBsYXRmb3JtTGFuZywgU3Rh dHVzKSk7DQogICAgPiArICAgICAgfQ0KICAgID4gKyAgICB9DQogICAgPiArICB9DQogICAgPiAr DQogICAgPiArICBpZiAoU2V0TGFuZ3VhZ2VDb2Rlcykgew0KICAgID4gKyAgICAvLw0KICAgID4g KyAgICAvLyBDb250aW51ZSB0byBzZXQgUGxhdGZvcm1MYW5nQ29kZXMgb3IgTGFuZ0NvZGVzLg0K ICAgID4gKyAgICAvLw0KICAgID4gKyAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQogICAgPiArICB9 IGVsc2Ugew0KICAgID4gKyAgICByZXR1cm4gU3RhdHVzOw0KICAgID4gKyAgfQ0KICAgID4gK30N CiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIENoZWNrIGlmIHRoZXJlJ3MgZW5vdWdoIGZy ZWUgc3BhY2UgaW4gc3RvcmFnZSB0byB3cml0ZSB0aGUgbmV3IHZhcmlhYmxlLg0KICAgID4gKw0K ICAgID4gKyAgQHBhcmFtW2luXSBOZXdWYXJpYWJsZSAgICAgICAgUG9pbnRlciB0byBidWZmZXIg b2YgbmV3IHZhcmlhYmxlLg0KICAgID4gKyAgQHBhcmFtW2luXSBWYXJpYWJsZVNpemUgICAgICAg U2l6ZSBvZiBuZXcgdmFyaWFibGUuDQogICAgPiArICBAcGFyYW1baW5dIFZhcmlhYmxlTmFtZSAg ICAgICBOYW1lIG9mIHZhcmlhYmxlLg0KICAgID4gKyAgQHBhcmFtW2luXSBWZW5kb3JHdWlkICAg ICAgICAgR3VpZCBvZiB2YXJpYWJsZS4NCiAgICA+ICsgIEBwYXJhbVtpbl0gQXR0cmlidXRlcyAg ICAgICAgIEF0dHJpYnV0ZXMgb2YgdGhlIHZhcmlhYmxlLg0KICAgID4gKyAgQHBhcmFtW2luXSBW b2xhdGlsZUZsYWcgICAgICAgVm9sYXRpbGUvbm9uLXZvbGF0aWxlIHZhcmlhYmxlIGluZGljYXRv ci4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIEVub3Vn aCBmcmVlIHNwYWNlIG9uIHZhcmlhYmxlIHN0b3JhZ2UuDQogICAgPiArICBAcmV0dmFsIEVGSV9C VUZGRVJfVE9PX1NNQUxMICBUaGVyZSdzIG5vdCBlbm91Z2ggY29udGludW91cyBmcmVlIHNwYWNl Lg0KICAgID4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgVGhlcmUncyBub3QgZW5v dWdoIGZyZWUgc3BhY2UgaW4gdG90YWwuDQogICAgPiArKiovDQogICAgPiArRUZJX1NUQVRVUw0K ICAgID4gK0NoZWNrVmFyaWFibGVTdG9yZVNwYWNlICgNCiAgICA+ICsgIElOICBWQVJJQUJMRV9I RUFERVIgICpOZXdWYXJpYWJsZSwNCiAgICA+ICsgIElOICBVSU5UTiAgICAgICAgICAgIFZhcmlh YmxlU2l6ZSwNCiAgICA+ICsgIElOICBDSEFSMTYgICAgICAgICAgICpWYXJpYWJsZU5hbWUsDQog ICAgPiArICBJTiAgRUZJX0dVSUQgICAgICAgICAqVmVuZG9yR3VpZCwNCiAgICA+ICsgIElOICBV SU5UMzIgICAgICAgICAgIEF0dHJpYnV0ZXMsDQogICAgPiArICBJTiAgQk9PTEVBTiAgICAgICAg ICBWb2xhdGlsZUZsYWcNCiAgICA+ICsgICkNCiAgICA+ICt7DQogICAgPiArICBCT09MRUFOICAg ICAgICAgICAgICAgIElzQ29tbW9uVmFyaWFibGU7DQogICAgPiArICBCT09MRUFOICAgICAgICAg ICAgICAgIElzQ29tbW9uVXNlclZhcmlhYmxlOw0KICAgID4gKyAgVUlOVE4gICAgICAgICAgICAg ICAgICBDb21tb25WYXJpYWJsZVRvdGFsU2l6ZTsNCiAgICA+ICsgIFVJTlROICAgICAgICAgICAg ICAgICAgQ29tbW9uVXNlclZhcmlhYmxlVG90YWxTaXplOw0KICAgID4gKyAgVUlOVE4gICAgICAg ICAgICAgICAgICBId0VyclZhcmlhYmxlVG90YWxTaXplOw0KICAgID4gKyAgVkFSSUFCTEVfU1RP UkVfSEVBREVSICAqVmFyU3RvcmU7DQogICAgPiArDQogICAgPiArICBpZiAoKE5ld1ZhcmlhYmxl ID09IE5VTEwpIHx8IChWYXJpYWJsZVNpemUgPT0gMCkpIHsNCiAgICA+ICsgICAgcmV0dXJuIEVG SV9TVUNDRVNTOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgaWYgKFZvbGF0aWxlRmxh Zykgew0KICAgID4gKyAgICBWYXJTdG9yZSA9IChWQVJJQUJMRV9TVE9SRV9IRUFERVIgKikoVUlO VE4pDQogICAgPiArICAgICAgICAgICAgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJs ZUdsb2JhbC5Wb2xhdGlsZVZhcmlhYmxlQmFzZTsNCiAgICA+ICsgICAgaWYgKChVSU5UMzIpKFZh cmlhYmxlU2l6ZSArIG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCiAgICA+ID5Wb2xhdGlsZUxhc3RW YXJpYWJsZU9mZnNldCkNCiAgICA+ICsgICAgICAgID4gVmFyU3RvcmUtPlNpemUpDQogICAgPiAr ICAgIHsNCiAgICA+ICsgICAgICByZXR1cm4gRUZJX0JVRkZFUl9UT09fU01BTEw7DQogICAgPiAr ICAgIH0NCiAgICA+ICsgIH0gZWxzZSB7DQogICAgPiArICAgIGlmICgoQXR0cmlidXRlcyAmIEVG SV9WQVJJQUJMRV9IQVJEV0FSRV9FUlJPUl9SRUNPUkQpID09IDApIHsNCiAgICA+ICsgICAgICBJ c0NvbW1vblZhcmlhYmxlICAgICA9IFRSVUU7DQogICAgPiArICAgICAgSXNDb21tb25Vc2VyVmFy aWFibGUgPSBJc1VzZXJWYXJpYWJsZSAoTmV3VmFyaWFibGUpOw0KICAgID4gKyAgICB9IGVsc2Ug ew0KICAgID4gKyAgICAgIElzQ29tbW9uVmFyaWFibGUgICAgID0gRkFMU0U7DQogICAgPiArICAg ICAgSXNDb21tb25Vc2VyVmFyaWFibGUgPSBGQUxTRTsNCiAgICA+ICsgICAgfQ0KICAgID4gKw0K ICAgID4gKyAgICBDb21tb25WYXJpYWJsZVRvdGFsU2l6ZSAgICAgPSBtVmFyaWFibGVNb2R1bGVH bG9iYWwtDQogICAgPiA+Q29tbW9uVmFyaWFibGVUb3RhbFNpemUgKyBWYXJpYWJsZVNpemU7DQog ICAgPiArICAgIENvbW1vblVzZXJWYXJpYWJsZVRvdGFsU2l6ZSA9IG1WYXJpYWJsZU1vZHVsZUds b2JhbC0NCiAgICA+ID5Db21tb25Vc2VyVmFyaWFibGVUb3RhbFNpemUgKyBWYXJpYWJsZVNpemU7 DQogICAgPiArICAgIEh3RXJyVmFyaWFibGVUb3RhbFNpemUgICAgICA9IG1WYXJpYWJsZU1vZHVs ZUdsb2JhbC0NCiAgICA+ID5Id0VyclZhcmlhYmxlVG90YWxTaXplICsgVmFyaWFibGVTaXplOw0K ICAgID4gKw0KICAgID4gKyAgICBpZiAoICAoKChBdHRyaWJ1dGVzICYgRUZJX1ZBUklBQkxFX0hB UkRXQVJFX0VSUk9SX1JFQ09SRCkgIT0gMCkgJiYNCiAgICA+ICsgICAgICAgICAgIChId0VyclZh cmlhYmxlVG90YWxTaXplID4gUGNkR2V0MzIgKFBjZEh3RXJyU3RvcmFnZVNpemUpKSkNCiAgICA+ ICsgICAgICAgfHwgKElzQ29tbW9uVmFyaWFibGUgJiYgKENvbW1vblZhcmlhYmxlVG90YWxTaXpl ID4NCiAgICA+IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+Q29tbW9uVmFyaWFibGVTcGFjZSkpDQog ICAgPiArICAgICAgIHx8IChJc0NvbW1vblZhcmlhYmxlICYmDQogICAgPiArICAgICAgICAgICBB dFJ1bnRpbWUgKCkgJiYNCiAgICA+ICsgICAgICAgICAgIChDb21tb25WYXJpYWJsZVRvdGFsU2l6 ZSA+IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCiAgICA+ID5Db21tb25SdW50aW1lVmFyaWFibGVT cGFjZSkpDQogICAgPiArICAgICAgIHx8IChJc0NvbW1vblVzZXJWYXJpYWJsZSAmJg0KICAgID4g KyAgICAgICAgICAgKENvbW1vblVzZXJWYXJpYWJsZVRvdGFsU2l6ZSA+IG1WYXJpYWJsZU1vZHVs ZUdsb2JhbC0NCiAgICA+ID5Db21tb25NYXhVc2VyVmFyaWFibGVTcGFjZSkpKQ0KICAgID4gKyAg ICB7DQogICAgPiArICAgICAgaWYgKEF0UnVudGltZSAoKSkgew0KICAgID4gKyAgICAgICAgaWYg KElzQ29tbW9uVXNlclZhcmlhYmxlICYmDQogICAgPiArICAgICAgICAgICAgKChWYXJpYWJsZVNp emUgKyBtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQogICAgPiA+Q29tbW9uVXNlclZhcmlhYmxlVG90 YWxTaXplKQ0KICAgID4gKyAgICAgICAgICAgICA+IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+Q29t bW9uTWF4VXNlclZhcmlhYmxlU3BhY2UpKQ0KICAgID4gKyAgICAgICAgew0KICAgID4gKyAgICAg ICAgICBSZWNvcmRWYXJFcnJvckZsYWcgKA0KICAgID4gKyAgICAgICAgICAgIFZBUl9FUlJPUl9G TEFHX1VTRVJfRVJST1IsDQogICAgPiArICAgICAgICAgICAgVmFyaWFibGVOYW1lLA0KICAgID4g KyAgICAgICAgICAgIFZlbmRvckd1aWQsDQogICAgPiArICAgICAgICAgICAgQXR0cmlidXRlcywN CiAgICA+ICsgICAgICAgICAgICBWYXJpYWJsZVNpemUNCiAgICA+ICsgICAgICAgICAgICApOw0K ICAgID4gKyAgICAgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICAgICAgaWYgKElzQ29tbW9uVmFy aWFibGUgJiYNCiAgICA+ICsgICAgICAgICAgICAoKFZhcmlhYmxlU2l6ZSArIG1WYXJpYWJsZU1v ZHVsZUdsb2JhbC0+Q29tbW9uVmFyaWFibGVUb3RhbFNpemUpDQogICAgPiArICAgICAgICAgICAg ID4gbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5Db21tb25SdW50aW1lVmFyaWFibGVTcGFjZSkpDQog ICAgPiArICAgICAgICB7DQogICAgPiArICAgICAgICAgIFJlY29yZFZhckVycm9yRmxhZyAoDQog ICAgPiArICAgICAgICAgICAgVkFSX0VSUk9SX0ZMQUdfU1lTVEVNX0VSUk9SLA0KICAgID4gKyAg ICAgICAgICAgIFZhcmlhYmxlTmFtZSwNCiAgICA+ICsgICAgICAgICAgICBWZW5kb3JHdWlkLA0K ICAgID4gKyAgICAgICAgICAgIEF0dHJpYnV0ZXMsDQogICAgPiArICAgICAgICAgICAgVmFyaWFi bGVTaXplDQogICAgPiArICAgICAgICAgICAgKTsNCiAgICA+ICsgICAgICAgIH0NCiAgICA+ICsN CiAgICA+ICsgICAgICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCiAgICA+ICsgICAg ICB9DQogICAgPiArDQogICAgPiArICAgICAgcmV0dXJuIEVGSV9CVUZGRVJfVE9PX1NNQUxMOw0K ICAgID4gKyAgICB9DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICByZXR1cm4gRUZJX1NV Q0NFU1M7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgRmlsbCBzcGVj aWZpYyBkYXRhIG9mIGF1dGgtdmFyaWFibGUgaW4gYnVmZmVyLg0KICAgID4gKw0KICAgID4gKyAg QHBhcmFtW2luLG91dF0gIE5ld1ZhcmlhYmxlICAgICAgICBQb2ludGVyIHRvIGJ1ZmZlciBvZiBu ZXcgdmFyaWFibGUuDQogICAgPiArICBAcGFyYW1baW5dICAgICAgT2xkVmFyaWFibGUgICAgICAg IFBvaW50ZXIgdG8gYnVmZmVyIG9mIG9sZCBjb3B5IG9mIHRoZSB2YXJpYWJsZS4NCiAgICA+ICsg IEBwYXJhbVtpbl0gICAgICBBdHRyaWJ1dGVzICAgICAgICAgQXR0cmlidXRlcyBvZiB0aGUgdmFy aWFibGUuDQogICAgPiArICBAcGFyYW1baW5dICAgICAgS2V5SW5kZXggICAgICAgICAgIEluZGV4 IG9mIGFzc29jaWF0ZWQgcHVibGljIGtleS4NCiAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBNb25v dG9uaWNDb3VudCAgICAgVmFsdWUgb2YgYXNzb2NpYXRlZCBtb25vdG9uaWMgY291bnQuDQogICAg PiArICBAcGFyYW1baW5dICAgICAgVGltZVN0YW1wICAgICAgICAgIFZhbHVlIG9mIGFzc29jaWF0 ZWQgVGltZVN0YW1wLg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK1ZPSUQNCiAgICA+ICtT ZXRWYXJpYWJsZUF1dGhEYXRhICgNCiAgICA+ICsgIElOICBPVVQgQVVUSEVOVElDQVRFRF9WQVJJ QUJMRV9IRUFERVIgICpOZXdWYXJpYWJsZSwNCiAgICA+ICsgIElOICAgICAgQVVUSEVOVElDQVRF RF9WQVJJQUJMRV9IRUFERVIgICpPbGRWYXJpYWJsZSwNCiAgICA+ICsgIElOICAgICAgVUlOVDMy ICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZXMsDQogICAgPiArICBJTiAgICAgIFVJ TlQzMiAgICAgICAgICAgICAgICAgICAgICAgICBLZXlJbmRleCwNCiAgICA+ICsgIElOICAgICAg VUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgIE1vbm90b25pY0NvdW50LA0KICAgID4gKyAg SU4gICAgICBFRklfVElNRSAgICAgICAgICAgICAgICAgICAgICAgKlRpbWVTdGFtcA0KICAgID4g KyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIE5ld1ZhcmlhYmxlLT5QdWJLZXlJbmRleCAgICA9IEtl eUluZGV4Ow0KICAgID4gKyAgTmV3VmFyaWFibGUtPk1vbm90b25pY0NvdW50ID0gTW9ub3Rvbmlj Q291bnQ7DQogICAgPiArDQogICAgPiArICBpZiAoKFRpbWVTdGFtcCAhPSBOVUxMKSAmJg0KICAg ID4gKyAgICAgICgoQXR0cmlidXRlcyAmDQogICAgPiBFRklfVkFSSUFCTEVfVElNRV9CQVNFRF9B VVRIRU5USUNBVEVEX1dSSVRFX0FDQ0VTUykgIT0gMCkpDQogICAgPiArICB7DQogICAgPiArICAg IC8vDQogICAgPiArICAgIC8vIEluIHRoZSBjYXNlIHdoZW4gdGhlIEVGSV9WQVJJQUJMRV9BUFBF TkRfV1JJVEUgYXR0cmlidXRlIGlzIHNldCwgb25seQ0KICAgID4gKyAgICAvLyB3aGVuIHRoZSBu ZXcgVGltZVN0YW1wIHZhbHVlIGlzIGxhdGVyIHRoYW4gdGhlIGN1cnJlbnQgdGltZXN0YW1wDQog ICAgPiBhc3NvY2lhdGVkDQogICAgPiArICAgIC8vIHdpdGggdGhlIHZhcmlhYmxlLCB3ZSBuZWVk IGFzc29jaWF0ZSB0aGUgbmV3IHRpbWVzdGFtcCB3aXRoIHRoZSB1cGRhdGVkDQogICAgPiB2YWx1 ZS4NCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgaWYgKCgoQXR0cmlidXRlcyAmIEVGSV9WQVJJ QUJMRV9BUFBFTkRfV1JJVEUpICE9IDApICYmDQogICAgPiArICAgICAgICAoT2xkVmFyaWFibGUg IT0gTlVMTCkgJiYNCiAgICA+ICsgICAgICAgICFWYXJpYWJsZUNvbXBhcmVUaW1lU3RhbXBJbnRl cm5hbCAoJk9sZFZhcmlhYmxlLT5UaW1lU3RhbXAsDQogICAgPiBUaW1lU3RhbXApKQ0KICAgID4g KyAgICB7DQogICAgPiArICAgICAgVGltZVN0YW1wID0gJk9sZFZhcmlhYmxlLT5UaW1lU3RhbXA7 DQogICAgPiArICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgQ29weU1lbSAoJk5ld1ZhcmlhYmxl LT5UaW1lU3RhbXAsIFRpbWVTdGFtcCwgc2l6ZW9mIChFRklfVElNRSkpOw0KICAgID4gKyAgfSBl bHNlIHsNCiAgICA+ICsgICAgWmVyb01lbSAoJk5ld1ZhcmlhYmxlLT5UaW1lU3RhbXAsIHNpemVv ZiAoRUZJX1RJTUUpKTsNCiAgICA+ICsgIH0NCiAgICA+ICt9DQogICAgPiArDQogICAgPiArLyoq DQogICAgPiArICBGaWxsIHRoZSB2YXJpYWJsZSBkYXRhIGJ1ZmZlciBhY2NvcmRpbmcgdG8gdmFy aWFibGUgZm9ybWF0IG9uIHN0b3JhZ2UuDQogICAgPiArDQogICAgPiArICBAcGFyYW1baW4sb3V0 XSAgTmV3VmFyaWFibGUgICAgICAgIFBvaW50ZXIgdG8gYnVmZmVyIG9mIG5ldyB2YXJpYWJsZS4N CiAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBPbGRWYXJpYWJsZSAgICAgICAgUG9pbnRlciB0byBi dWZmZXIgb2Ygb2xkIGNvcHkgb2YgdGhlIHZhcmlhYmxlLg0KICAgID4gKyAgQHBhcmFtW2luXSAg ICAgIFZhcmlhYmxlTmFtZSAgICAgICBOYW1lIG9mIHZhcmlhYmxlLg0KICAgID4gKyAgQHBhcmFt W2luXSAgICAgIFZlbmRvckd1aWQgICAgICAgICBHdWlkIG9mIHZhcmlhYmxlLg0KICAgID4gKyAg QHBhcmFtW2luXSAgICAgIERhdGEgICAgICAgICAgICAgICBWYXJpYWJsZSBkYXRhLg0KICAgID4g KyAgQHBhcmFtW2luXSAgICAgIERhdGFTaXplICAgICAgICAgICBTaXplIG9mIGRhdGEuIDAgbWVh bnMgZGVsZXRlLg0KICAgID4gKyAgQHBhcmFtW2luXSAgICAgIEF0dHJpYnV0ZXMgICAgICAgICBB dHRyaWJ1dGVzIG9mIHRoZSB2YXJpYWJsZS4NCiAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBLZXlJ bmRleCAgICAgICAgICAgSW5kZXggb2YgYXNzb2NpYXRlZCBwdWJsaWMga2V5Lg0KICAgID4gKyAg QHBhcmFtW2luXSAgICAgIE1vbm90b25pY0NvdW50ICAgICBWYWx1ZSBvZiBhc3NvY2lhdGVkIG1v bm90b25pYyBjb3VudC4NCiAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBUaW1lU3RhbXAgICAgICAg ICAgVmFsdWUgb2YgYXNzb2NpYXRlZCBUaW1lU3RhbXAuDQogICAgPiArDQogICAgPiArICBAcmV0 dmFsIFNpemUgb2YgdGhlIG5ldyB2YXJpYWJsZS4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ ICtVSU5UTg0KICAgID4gK1NldFZhcmlhYmxlRGF0YSAoDQogICAgPiArICBJTiAgT1VUIFZBUklB QkxFX0hFQURFUiAgKk5ld1ZhcmlhYmxlLA0KICAgID4gKyAgSU4gICAgICBWQVJJQUJMRV9IRUFE RVIgICpPbGRWYXJpYWJsZSwNCiAgICA+ICsgIElOICAgICAgQ0hBUjE2ICAgICAgICAgICAqVmFy aWFibGVOYW1lLA0KICAgID4gKyAgSU4gICAgICBFRklfR1VJRCAgICAgICAgICpWZW5kb3JHdWlk LA0KICAgID4gKyAgSU4gICAgICBWT0lEICAgICAgICAgICAgICpEYXRhLA0KICAgID4gKyAgSU4g ICAgICBVSU5UTiAgICAgICAgICAgIERhdGFTaXplLA0KICAgID4gKyAgSU4gICAgICBVSU5UMzIg ICAgICAgICAgIEF0dHJpYnV0ZXMsDQogICAgPiArICBJTiAgICAgIFVJTlQzMiAgICAgICAgICAg S2V5SW5kZXgsDQogICAgPiArICBJTiAgICAgIFVJTlQ2NCAgICAgICAgICAgTW9ub3RvbmljQ291 bnQsDQogICAgPiArICBJTiAgICAgIEVGSV9USU1FICAgICAgICAgKlRpbWVTdGFtcA0KICAgID4g KyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCiAgICA+ICsgIEJP T0xFQU4gICAgIEF1dGhGb3JtYXQ7DQogICAgPiArICBVSU5UOCAgICAgICAqRGF0YVB0cjsNCiAg ICA+ICsgIFVJTlROICAgICAgIE5hbWVTaXplOw0KICAgID4gKyAgVUlOVE4gICAgICAgT2xkRGF0 YVNpemU7DQogICAgPiArDQogICAgPiArICBBdXRoRm9ybWF0ID0gbVZhcmlhYmxlTW9kdWxlR2xv YmFsLT5WYXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0Ow0KICAgID4gKw0KICAgID4gKyAgaWYgKEF1 dGhGb3JtYXQpIHsNCiAgICA+ICsgICAgU2V0VmFyaWFibGVBdXRoRGF0YSAoDQogICAgPiArICAg ICAgKEFVVEhFTlRJQ0FURURfVkFSSUFCTEVfSEVBREVSICopTmV3VmFyaWFibGUsDQogICAgPiAr ICAgICAgKEFVVEhFTlRJQ0FURURfVkFSSUFCTEVfSEVBREVSICopT2xkVmFyaWFibGUsDQogICAg PiArICAgICAgQXR0cmlidXRlcywNCiAgICA+ICsgICAgICBLZXlJbmRleCwNCiAgICA+ICsgICAg ICBNb25vdG9uaWNDb3VudCwNCiAgICA+ICsgICAgICBUaW1lU3RhbXANCiAgICA+ICsgICAgICAp Ow0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgTmV3VmFyaWFibGUtPlN0YXJ0SWQgICAg PSBWQVJJQUJMRV9EQVRBOw0KICAgID4gKyAgTmV3VmFyaWFibGUtPlN0YXRlICAgICAgPSBWQVJf QURERUQ7DQogICAgPiArICBOZXdWYXJpYWJsZS0+UmVzZXJ2ZWQgICA9IDA7DQogICAgPiArICBO ZXdWYXJpYWJsZS0+QXR0cmlidXRlcyA9IEF0dHJpYnV0ZXMgJiAofkVGSV9WQVJJQUJMRV9BUFBF TkRfV1JJVEUpOw0KICAgID4gKw0KICAgID4gKyAgQ29weU1lbSAoDQogICAgPiArICAgIEdldFZl bmRvckd1aWRQdHIgKE5ld1ZhcmlhYmxlLCBBdXRoRm9ybWF0KSwNCiAgICA+ICsgICAgVmVuZG9y R3VpZCwNCiAgICA+ICsgICAgc2l6ZW9mIChFRklfR1VJRCkNCiAgICA+ICsgICAgKTsNCiAgICA+ ICsNCiAgICA+ICsgIE5hbWVTaXplID0gU3RyU2l6ZSAoVmFyaWFibGVOYW1lKTsNCiAgICA+ICsg IFNldE5hbWVTaXplT2ZWYXJpYWJsZSAoTmV3VmFyaWFibGUsIE5hbWVTaXplLCBBdXRoRm9ybWF0 KTsNCiAgICA+ICsgIENvcHlNZW0gKA0KICAgID4gKyAgICAoVUlOVDggKilHZXRWYXJpYWJsZU5h bWVQdHIgKE5ld1ZhcmlhYmxlLCBBdXRoRm9ybWF0KSwNCiAgICA+ICsgICAgVmFyaWFibGVOYW1l LA0KICAgID4gKyAgICBOYW1lU2l6ZQ0KICAgID4gKyAgICApOw0KICAgID4gKw0KICAgID4gKyAg Ly8NCiAgICA+ICsgIC8vIFNldCBkYXRhIHNpemUgZmlyc3Qgb3RoZXJ3aXNlIHdlIGNhbid0IGdl dCBjb3JyZWN0IGRhdGEgcG9pbnRlciBpbiB0aGUNCiAgICA+ICsgIC8vIGJ1ZmZlciBvZiBuZXcg dmFyaWFibGUuDQogICAgPiArICAvLw0KICAgID4gKyAgU2V0RGF0YVNpemVPZlZhcmlhYmxlIChO ZXdWYXJpYWJsZSwgRGF0YVNpemUsIEF1dGhGb3JtYXQpOw0KICAgID4gKyAgRGF0YVB0ciA9IEdl dFZhcmlhYmxlRGF0YVB0ciAoTmV3VmFyaWFibGUsIEF1dGhGb3JtYXQpOw0KICAgID4gKyAgaWYg KCgoQXR0cmlidXRlcyAmIEVGSV9WQVJJQUJMRV9BUFBFTkRfV1JJVEUpICE9IDApICYmDQogICAg PiArICAgICAgKE9sZFZhcmlhYmxlICE9IE5VTEwpICYmDQogICAgPiArICAgICAgKChPbGRWYXJp YWJsZS0+U3RhdGUgPT0gVkFSX0FEREVEKSB8fA0KICAgID4gKyAgICAgICAoT2xkVmFyaWFibGUt PlN0YXRlID09IChWQVJfQURERUQgJiBWQVJfSU5fREVMRVRFRF9UUkFOU0lUSU9OKSkpKQ0KICAg ID4gKyAgew0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICAvLyBHZXQgb2xkIGRhdGEsIHdoaWNo IG1pZ2h0IGJlIGVuY3J5cHRlZC4NCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgT2xkRGF0YVNp emUgPSBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlNjcmF0Y2hCdWZmZXJTaXplDQogICAgPiArICAg ICAgICAgICAgICAgICAgLSAoKFVJTlROKURhdGFQdHIgLSAoVUlOVE4pTmV3VmFyaWFibGUpOw0K ICAgID4gKyAgICBTdGF0dXMgPSBQcm90ZWN0ZWRWYXJpYWJsZUxpYkdldEJ5QnVmZmVyICgNCiAg ICA+ICsgICAgICAgICAgICAgICBPbGRWYXJpYWJsZSwNCiAgICA+ICsgICAgICAgICAgICAgICBE YXRhUHRyLA0KICAgID4gKyAgICAgICAgICAgICAgIChVSU5UMzIgKikmT2xkRGF0YVNpemUsDQog ICAgPiArICAgICAgICAgICAgICAgQXV0aEZvcm1hdA0KICAgID4gKyAgICAgICAgICAgICAgICk7 DQogICAgPiArICAgIGlmIChTdGF0dXMgPT0gRUZJX1VOU1VQUE9SVEVEKSB7DQogICAgPiArICAg ICAgT2xkRGF0YVNpemUgPSBEYXRhU2l6ZU9mVmFyaWFibGUgKE9sZFZhcmlhYmxlLCBBdXRoRm9y bWF0KTsNCiAgICA+ICsgICAgICBDb3B5TWVtIChEYXRhUHRyLCBHZXRWYXJpYWJsZURhdGFQdHIg KE9sZFZhcmlhYmxlLCBBdXRoRm9ybWF0KSwNCiAgICA+IE9sZERhdGFTaXplKTsNCiAgICA+ICsg ICAgfSBlbHNlIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCiAgICA+ICsgICAgICBBU1NFUlRf RUZJX0VSUk9SIChTdGF0dXMpOw0KICAgID4gKyAgICAgIHJldHVybiAwOw0KICAgID4gKyAgICB9 DQogICAgPiArDQogICAgPiArICAgIERhdGFQdHIgKz0gT2xkRGF0YVNpemU7DQogICAgPiArICAg IC8vDQogICAgPiArICAgIC8vIFVwZGF0ZSBkYXRhIHNpemUuDQogICAgPiArICAgIC8vDQogICAg PiArICAgIFNldERhdGFTaXplT2ZWYXJpYWJsZSAoTmV3VmFyaWFibGUsIERhdGFTaXplICsgT2xk RGF0YVNpemUsIEF1dGhGb3JtYXQpOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgQ29w eU1lbSAoRGF0YVB0ciwgRGF0YSwgRGF0YVNpemUpOw0KICAgID4gKw0KICAgID4gKyAgLy8NCiAg ICA+ICsgIC8vIFRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgdmFyaWFibGUgc3RvcmVkIGluIHN0b3Jh Z2Ugc2hvdWxkIGluY2x1ZGUgcGFkZGluZy4NCiAgICA+ICsgIC8vDQogICAgPiArICByZXR1cm4g KChVSU5UTilHZXROZXh0VmFyaWFibGVQdHIgKE5ld1ZhcmlhYmxlLCBBdXRoRm9ybWF0KSAtDQog ICAgPiAoVUlOVE4pTmV3VmFyaWFibGUpOw0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioN CiAgICA+ICsgIFVwZGF0ZSBzdGF0ZSBvZiBnaXZlbiB2YXJpYWJsZSBhcyB3ZWxsIGFzIGl0cyBj YWNoZWQgY29weS4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbVtpbixvdXRdICBWYXJpYWJsZSAg ICAgICAgUG9pbnRlciB0byB0aGUgYnVmZmVyIG9mIHRoZSB2YXJpYWJsZS4NCiAgICA+ICsgIEBw YXJhbVtpbixvdXRdICBDYWNoZVZhcmlhYmxlICAgQ2FjaGUgY29weSBvZiB0aGUgdmFyaWFibGUu DQogICAgPiArICBAcGFyYW1baW5dICAgICAgTmV3U3RhdGUgICAgICAgIE5ldyBzdGF0ZSB2YWx1 ZS4NCiAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBWb2xhdGlsZSAgICAgICAgVm9sYXRpbGUvbm9u LXZvbGF0aWxlIHZhcmlhYmxlIGluZGljYXRvci4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgIFZhcmlhYmxlIHN0YXRlIHdhcyB1cGRhdGVkIHN1Y2Nlc3NmdWxseS4N CiAgICA+ICsgIEByZXR2YWwgT3RoZXJzICAgICAgICAgIEZhaWxlZCB0byB1cGRhdGUgdGhlIHZh cmlhYmxlIHN0YXRlLg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK0VGSV9TVEFUVVMNCiAg ICA+ICtVcGRhdGVWYXJpYWJsZVN0YXRlICgNCiAgICA+ICsgIElOICBPVVQgVkFSSUFCTEVfSEVB REVSICAqVmFyaWFibGUsDQogICAgPiArICBJTiAgT1VUIFZBUklBQkxFX0hFQURFUiAgKkNhY2hl VmFyaWFibGUsDQogICAgPiArICBJTiAgICAgIFVJTlQ4ICAgICAgICAgICAgTmV3U3RhdGUsDQog ICAgPiArICBJTiAgICAgIEJPT0xFQU4gICAgICAgICAgVm9sYXRpbGUNCiAgICA+ICsgICkNCiAg ICA+ICt7DQogICAgPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQogICAgPiArDQogICAgPiArICBT dGF0dXMgPSBVcGRhdGVWYXJpYWJsZVN0b3JlICgNCiAgICA+ICsgICAgICAgICAgICAgJm1WYXJp YWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwsDQogICAgPiArICAgICAgICAgICAgIFZv bGF0aWxlLA0KICAgID4gKyAgICAgICAgICAgICBGQUxTRSwNCiAgICA+ICsgICAgICAgICAgICAg bVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5GdmJJbnN0YW5jZSwNCiAgICA+ICsgICAgICAgICAgICAg KFVJTlROKSZWYXJpYWJsZS0+U3RhdGUsDQogICAgPiArICAgICAgICAgICAgIHNpemVvZiAoTmV3 U3RhdGUpLA0KICAgID4gKyAgICAgICAgICAgICAmTmV3U3RhdGUNCiAgICA+ICsgICAgICAgICAg ICAgKTsNCiAgICA+ICsgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpICYmIChDYWNoZVZhcmlhYmxl ICE9IE5VTEwpKSB7DQogICAgPiArICAgIENhY2hlVmFyaWFibGUtPlN0YXRlID0gTmV3U3RhdGU7 DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICByZXR1cm4gU3RhdHVzOw0KICAgID4gK30N CiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIEZsdXNoIHZhcmlhYmxlIGRhdGEgdG8gdmFy aWFibGUgc3RvcmFnZS4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBWYXJTdG9y ZUJhc2UgICAgQmFzZSBhZGRyZXNzIG9mIHZhcmlhYmxlIHN0b3JhZ2UuDQogICAgPiArICBAcGFy YW1baW4sb3V0XSAgT2Zmc2V0ICAgICAgICAgIE9mZnNldCB0byB3cml0ZSB0aGUgdmFyaWFibGUg ZnJvbS4NCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2Zmc2V0IGZy b20gd2hlcmUgbmV4dCB2YXJpYWJsZSBjYW4gYmUgd3JpdHRlbi4NCiAgICA+ICsgIEBwYXJhbVtp bixvdXRdICBOZXdWYXJpYWJsZSAgICAgUG9pbnRlciB0byB0aGUgYnVmZmVyIG9mIG5ldyB2YXJp YWJsZS4NCiAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBWYXJpYWJsZVNpemUgICAgU2l6ZSBvZiBu ZXcgdmFyaWFibGUuDQogICAgPiArICBAcGFyYW1baW5dICAgICAgVm9sYXRpbGUgICAgICAgIFZv bGF0aWxlL25vbi12b2xhdGlsZSB2YXJpYWJsZSBpbmRpY2F0b3IuDQogICAgPiArICBAcGFyYW1b aW5dICAgICAgQXV0aEZvcm1hdCAgICAgIEF1dGgtdmFyaWFibGUgaW5kaWNhdG9yLg0KICAgID4g Kw0KICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgVmFyaWFibGUocykgd2VyZSB3cml0 dGVuIHN1Y2Nlc3NmdWxseS4NCiAgICA+ICsgIEByZXR2YWwgT3RoZXJzICAgICAgICAgIEZhaWxl ZCB0byB3cml0ZSB0aGUgdmFyaWFibGUgZGF0YS4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ ICtFRklfU1RBVFVTDQogICAgPiArV3JpdGVWYXJpYWJsZSAoDQogICAgPiArICBJTiAgRUZJX1BI WVNJQ0FMX0FERFJFU1MgIFZhclN0b3JlQmFzZSwNCiAgICA+ICsgIElOICBPVVQgVUlOVE4gICAg ICAgICAgICAgKk9mZnNldCwNCiAgICA+ICsgIElOICBPVVQgVkFSSUFCTEVfSEVBREVSICAgKipO ZXdWYXJpYWJsZSwNCiAgICA+ICsgIElOICAgICAgVUlOVDMyICAgICAgICAgICAgVmFyaWFibGVT aXplLA0KICAgID4gKyAgSU4gICAgICBCT09MRUFOICAgICAgICAgICBWb2xhdGlsZSwNCiAgICA+ ICsgIElOICAgICAgQk9PTEVBTiAgICAgICAgICAgQXV0aEZvcm1hdA0KICAgID4gKyAgKQ0KICAg ID4gK3sNCiAgICA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCiAgICA+ICsNCiAgICA+ICsgIHN0 cnVjdCB7DQogICAgPiArICAgIFVJTlROICAgICBPZmZzZXQ7DQogICAgPiArICAgIFVJTlQ4ICAg ICAqQnVmZmVyOw0KICAgID4gKyAgICBVSU5UMzIgICAgU2l6ZTsNCiAgICA+ICsgICAgVUlOVDgg ICAgIFN0YXRlOw0KICAgID4gKyAgfSAgICAgICAgICAgICAgICAgICBXcml0ZVN0ZXBzWzRdOw0K ICAgID4gKyAgVUlOVE4gICAgICAgICAgICBJbmRleDsNCiAgICA+ICsgIFVJTlROICAgICAgICAg ICAgU3RlcHM7DQogICAgPiArICBWQVJJQUJMRV9IRUFERVIgICpWYXJpYWJsZTsNCiAgICA+ICsN CiAgICA+ICsgIFZhcmlhYmxlID0gKk5ld1ZhcmlhYmxlOw0KICAgID4gKyAgaWYgKFZvbGF0aWxl KSB7DQogICAgPiArICAgIC8vDQogICAgPiArICAgIC8vIEZvciBub24tdm9sYXRpbGUgdmFyaWFi bGUsIG9uZSBzdGVwIG9ubHkgOg0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICBXcml0ZVN0ZXBz WzBdLk9mZnNldCA9ICpPZmZzZXQ7DQogICAgPiArICAgIFdyaXRlU3RlcHNbMF0uQnVmZmVyID0g KFVJTlQ4ICopVmFyaWFibGU7DQogICAgPiArICAgIFdyaXRlU3RlcHNbMF0uU2l6ZSAgID0gVmFy aWFibGVTaXplOw0KICAgID4gKw0KICAgID4gKyAgICBTdGVwcyA9IDE7DQogICAgPiArICB9IGVs c2Ugew0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICAvLyBGb3VyIHN0ZXBzIGZvciBub24tdm9s YXRpbGUgdmFyaWFibGU6DQogICAgPiArICAgIC8vDQogICAgPiArICAgIC8vIDEuIFdyaXRlIHZh cmlhYmxlIGhlYWRlcg0KICAgID4gKyAgICAvLyAyLiBTZXQgdmFyaWFibGUgc3RhdGUgdG8gaGVh ZGVyIHZhbGlkDQogICAgPiArICAgIC8vIDMuIFdyaXRlIHZhcmlhYmxlIG5hbWUgYW5kIGRhdGEN CiAgICA+ICsgICAgLy8gNC4gU2V0IHZhcmlhYmxlIHN0YXRlIHRvIHZhbGlkDQogICAgPiArICAg IC8vDQogICAgPiArICAgIFZhcmlhYmxlLT5TdGF0ZSAgICAgID0gMHhmZjsNCiAgICA+ICsgICAg V3JpdGVTdGVwc1swXS5PZmZzZXQgPSAqT2Zmc2V0Ow0KICAgID4gKyAgICBXcml0ZVN0ZXBzWzBd LkJ1ZmZlciA9IChVSU5UOCAqKVZhcmlhYmxlOw0KICAgID4gKyAgICBXcml0ZVN0ZXBzWzBdLlNp emUgICA9IChVSU5UMzIpR2V0VmFyaWFibGVIZWFkZXJTaXplIChBdXRoRm9ybWF0KTsNCiAgICA+ ICsNCiAgICA+ICsgICAgV3JpdGVTdGVwc1sxXS5TdGF0ZSAgPSBWQVJfSEVBREVSX1ZBTElEX09O TFk7DQogICAgPiArICAgIFdyaXRlU3RlcHNbMV0uT2Zmc2V0ID0gKk9mZnNldCArIE9GRlNFVF9P RiAoVkFSSUFCTEVfSEVBREVSLCBTdGF0ZSk7DQogICAgPiArICAgIFdyaXRlU3RlcHNbMV0uQnVm ZmVyID0gJldyaXRlU3RlcHNbMV0uU3RhdGU7DQogICAgPiArICAgIFdyaXRlU3RlcHNbMV0uU2l6 ZSAgID0gc2l6ZW9mIChWYXJpYWJsZS0+U3RhdGUpOw0KICAgID4gKw0KICAgID4gKyAgICBXcml0 ZVN0ZXBzWzJdLk9mZnNldCA9ICpPZmZzZXQgKyBHZXRWYXJpYWJsZUhlYWRlclNpemUgKEF1dGhG b3JtYXQpOw0KICAgID4gKyAgICBXcml0ZVN0ZXBzWzJdLkJ1ZmZlciA9IChVSU5UOCAqKVZhcmlh YmxlICsgR2V0VmFyaWFibGVIZWFkZXJTaXplDQogICAgPiAoQXV0aEZvcm1hdCk7DQogICAgPiAr ICAgIFdyaXRlU3RlcHNbMl0uU2l6ZSAgID0gVmFyaWFibGVTaXplIC0gKFVJTlQzMilHZXRWYXJp YWJsZUhlYWRlclNpemUNCiAgICA+IChBdXRoRm9ybWF0KTsNCiAgICA+ICsNCiAgICA+ICsgICAg V3JpdGVTdGVwc1szXS5TdGF0ZSAgPSBWQVJfQURERUQ7DQogICAgPiArICAgIFdyaXRlU3RlcHNb M10uT2Zmc2V0ID0gKk9mZnNldCArIE9GRlNFVF9PRiAoVkFSSUFCTEVfSEVBREVSLCBTdGF0ZSk7 DQogICAgPiArICAgIFdyaXRlU3RlcHNbM10uQnVmZmVyID0gJldyaXRlU3RlcHNbM10uU3RhdGU7 DQogICAgPiArICAgIFdyaXRlU3RlcHNbM10uU2l6ZSAgID0gc2l6ZW9mIChWYXJpYWJsZS0+U3Rh dGUpOw0KICAgID4gKw0KICAgID4gKyAgICBTdGVwcyA9IEFSUkFZX1NJWkUgKFdyaXRlU3RlcHMp Ow0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwg U3RlcHM7ICsrSW5kZXgpIHsNCiAgICA+ICsgICAgU3RhdHVzID0gVXBkYXRlVmFyaWFibGVTdG9y ZSAoDQogICAgPiArICAgICAgICAgICAgICAgJm1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFi bGVHbG9iYWwsDQogICAgPiArICAgICAgICAgICAgICAgVm9sYXRpbGUsDQogICAgPiArICAgICAg ICAgICAgICAgVFJVRSwNCiAgICA+ICsgICAgICAgICAgICAgICBtVmFyaWFibGVNb2R1bGVHbG9i YWwtPkZ2Ykluc3RhbmNlLA0KICAgID4gKyAgICAgICAgICAgICAgIFdyaXRlU3RlcHNbSW5kZXhd Lk9mZnNldCwNCiAgICA+ICsgICAgICAgICAgICAgICBXcml0ZVN0ZXBzW0luZGV4XS5TaXplLA0K ICAgID4gKyAgICAgICAgICAgICAgIFdyaXRlU3RlcHNbSW5kZXhdLkJ1ZmZlcg0KICAgID4gKyAg ICAgICAgICAgICAgICk7DQogICAgPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCiAg ICA+ICsgICAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KICAgID4gKyAgICAgIHJldHVy biBTdGF0dXM7DQogICAgPiArICAgIH0NCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIFZh cmlhYmxlLT5TdGF0ZSA9IFZBUl9BRERFRDsNCiAgICA+ICsgIGlmICghVm9sYXRpbGUpIHsNCiAg ICA+ICsgICAgQ29weU1lbSAoKFVJTlQ4ICopbU52VmFyaWFibGVDYWNoZSArICpPZmZzZXQsIFZh cmlhYmxlLCBWYXJpYWJsZVNpemUpOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgKk5l d1ZhcmlhYmxlID0gKFZBUklBQkxFX0hFQURFUiAqKSgoVUlOVE4pVmFyU3RvcmVCYXNlICsgKk9m ZnNldCk7DQogICAgPiArICAqT2Zmc2V0ICAgICArPSBIRUFERVJfQUxJR04gKFZhcmlhYmxlU2l6 ZSk7DQogICAgPiArDQogICAgPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQogICAgPiArfQ0KICAg ID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgUmViYXNlIHRoZSBnaXZlbiB2YXJpYWJsZSBwb2lu dGVyKHMpIHRvIHRoZSBlcXVpdmFsZW50IG9uZSBpbiBnaXZlbiB2YXJpYWJsZQ0KICAgID4gKyAg c3RvcmFnZSB2aWEgVmFyU3RvcmUuDQogICAgPiArDQogICAgPiArICBAcGFyYW1baW5dICAgICAg SW5WYXJUcmFja1B0ciAgICAgUG9pbnRlciB0byBjdXJyZW50IHZhcmlhYmxlIGluIGNhY2hlLg0K ICAgID4gKyAgQHBhcmFtW291dF0gICAgIE91dFZhclRyYWNrUHRyICAgIFBvaW50ZXIgdG8gcmVi YXNlZCB2YXJpYWJsZSBhZ2FpbnN0IFZhclN0b3JlLg0KICAgID4gKyAgQHBhcmFtW2luXSAgICAg IFZhclN0b3JlICAgICAgICAgIFN0YXJ0IG9mIHZhcmlhYmxlIHN0b3JhZ2UgdG8gcmViYXNlIGFn YWluc3QuDQogICAgPiArICBAcGFyYW1baW5dICAgICAgVmFyaWFibGVOYW1lICAgICAgTmFtZSBv ZiB2YXJpYWJsZS4NCiAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBWZW5kb3JHdWlkICAgICAgICBH dWlkIG9mIHZhcmlhYmxlLg0KICAgID4gKyAgQHBhcmFtW2luXSAgICAgIEJ5T2Zmc2V0ICAgICAg ICAgIElmIFRSVUUsIGRvbid0IGRvIHZhcmlhYmxlIHNlYXJjaCBpbiBWYXJTdG9yZS4NCiAgICA+ ICsNCiAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFZhcmlhYmxlKHMpIHdl cmUgZGVsZXRlZCBzdWNjZXNzZnVsbHkuDQogICAgPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BB UkFNRVRFUiBJbnZhbGlkIHBhcmFtZXRlcnMgcGFzc2VkLg0KICAgID4gKyAgQHJldHZhbCBFRklf Tk9UX0ZPVU5EICAgICAgICAgR2l2ZW4gdmFyaWFibGUgKFZhcmlhYmxlTmFtZSAmIFZlbmRvckd1 aWQpDQogICAgPiB3YXMNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v dCBmb3VuZCBpbiBWYXJTdG9yZSwgaWYgQnlPZmZzZXQgaXMgRkFMU0UuDQogICAgPiArDQogICAg PiArKiovDQogICAgPiArRUZJX1NUQVRVUw0KICAgID4gK1JlYmFzZVZhcmlhYmxlUHRyICgNCiAg ICA+ICsgIElOICAgICAgVkFSSUFCTEVfUE9JTlRFUl9UUkFDSyAgKkluVmFyVHJhY2tQdHIsDQog ICAgPiArICBPVVQgVkFSSUFCTEVfUE9JTlRFUl9UUkFDSyAgICAgICpPdXRWYXJUcmFja1B0ciwN CiAgICA+ICsgIElOICAgICAgVkFSSUFCTEVfU1RPUkVfSEVBREVSICAgKlZhclN0b3JlLA0KICAg ID4gKyAgSU4gICAgICBDSEFSMTYgICAgICAgICAgICAgICAgICAqVmFyaWFibGVOYW1lLA0KICAg ID4gKyAgSU4gICAgICBFRklfR1VJRCAgICAgICAgICAgICAgICAqVmVuZG9yR3VpZCwNCiAgICA+ ICsgIElOICAgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgQnlPZmZzZXQNCiAgICA+ICsgICkN CiAgICA+ICt7DQogICAgPiArICBFRklfU1RBVFVTICAgICAgIFN0YXR1czsNCiAgICA+ICsgIEJP T0xFQU4gICAgICAgICAgQXV0aEZvcm1hdDsNCiAgICA+ICsgIFZBUklBQkxFX0hFQURFUiAgKk5l d1N0YXJ0Ow0KICAgID4gKw0KICAgID4gKyAgaWYgKChJblZhclRyYWNrUHRyID09IE5VTEwpIHx8 IChPdXRWYXJUcmFja1B0ciA9PSBOVUxMKSB8fCAoVmFyU3RvcmUgPT0NCiAgICA+IE5VTEwpKSB7 DQogICAgPiArICAgIEFTU0VSVCAoSW5WYXJUcmFja1B0ciAhPSBOVUxMKTsNCiAgICA+ICsgICAg QVNTRVJUIChPdXRWYXJUcmFja1B0ciAhPSBOVUxMKTsNCiAgICA+ICsgICAgQVNTRVJUIChWYXJT dG9yZSAhPSBOVUxMKTsNCiAgICA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsN CiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIEF1dGhGb3JtYXQgPSBtVmFyaWFibGVNb2R1 bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLkF1dGhGb3JtYXQ7DQogICAgPiArDQogICAgPiArICBp ZiAoICAoSW5WYXJUcmFja1B0ci0+Q3VyclB0ciA9PSBOVUxMKQ0KICAgID4gKyAgICAgfHwgKElu VmFyVHJhY2tQdHItPlN0YXJ0UHRyID09IEdldFN0YXJ0UG9pbnRlciAoVmFyU3RvcmUpKSkNCiAg ICA+ICsgIHsNCiAgICA+ICsgICAgQ29weU1lbSAoT3V0VmFyVHJhY2tQdHIsIEluVmFyVHJhY2tQ dHIsIHNpemVvZg0KICAgID4gKFZBUklBQkxFX1BPSU5URVJfVFJBQ0spKTsNCiAgICA+ICsgICAg cmV0dXJuIEVGSV9TVUNDRVNTOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgTmV3U3Rh cnQgPSBHZXRTdGFydFBvaW50ZXIgKFZhclN0b3JlKTsNCiAgICA+ICsgIGlmIChCeU9mZnNldCkg ew0KICAgID4gKyAgICBPdXRWYXJUcmFja1B0ci0+Q3VyclB0ciA9IChWQVJJQUJMRV9IRUFERVIg KikNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFVJTlROKU5ld1N0YXJ0 ICsgKChVSU5UTilJblZhclRyYWNrUHRyLT5DdXJyUHRyIC0NCiAgICA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVSU5UTilJblZhclRyYWNrUHRy LT5TdGFydFB0cikpOw0KICAgID4gKw0KICAgID4gKyAgICBpZiAoSW5WYXJUcmFja1B0ci0+SW5E ZWxldGVkVHJhbnNpdGlvblB0ciAhPSBOVUxMKSB7DQogICAgPiArICAgICAgT3V0VmFyVHJhY2tQ dHItPkluRGVsZXRlZFRyYW5zaXRpb25QdHIgPQ0KICAgID4gKyAgICAgICAgKFZBUklBQkxFX0hF QURFUiAqKSgoVUlOVE4pTmV3U3RhcnQgKw0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoKFVJTlROKUluVmFyVHJhY2tQdHItPkluRGVsZXRlZFRyYW5zaXRpb25QdHIgLQ0KICAg ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFVJTlROKUluVmFyVHJhY2tQdHItPlN0 YXJ0UHRyKSk7DQogICAgPiArICAgIH0gZWxzZSB7DQogICAgPiArICAgICAgT3V0VmFyVHJhY2tQ dHItPkluRGVsZXRlZFRyYW5zaXRpb25QdHIgPSBOVUxMOw0KICAgID4gKyAgICB9DQogICAgPiAr DQogICAgPiArICAgIE91dFZhclRyYWNrUHRyLT5TdGFydFB0ciA9IE5ld1N0YXJ0Ow0KICAgID4g KyAgICBPdXRWYXJUcmFja1B0ci0+RW5kUHRyICAgPSBHZXRFbmRQb2ludGVyIChWYXJTdG9yZSk7 DQogICAgPiArICB9IGVsc2Ugew0KICAgID4gKyAgICBPdXRWYXJUcmFja1B0ci0+U3RhcnRQdHIg PSBOZXdTdGFydDsNCiAgICA+ICsgICAgT3V0VmFyVHJhY2tQdHItPkVuZFB0ciAgID0gR2V0RW5k UG9pbnRlciAoVmFyU3RvcmUpOw0KICAgID4gKw0KICAgID4gKyAgICBTdGF0dXMgPSBGaW5kVmFy aWFibGVFeCAoVmFyaWFibGVOYW1lLCBWZW5kb3JHdWlkLCBGQUxTRSwgT3V0VmFyVHJhY2tQdHIs DQogICAgPiBBdXRoRm9ybWF0KTsNCiAgICA+ICsgICAgaWYgKChPdXRWYXJUcmFja1B0ci0+Q3Vy clB0ciA9PSBOVUxMKSB8fCBFRklfRVJST1IgKFN0YXR1cykpIHsNCiAgICA+ICsgICAgICByZXR1 cm4gRUZJX05PVF9GT1VORDsNCiAgICA+ICsgICAgfQ0KICAgID4gKyAgfQ0KICAgID4gKw0KICAg ID4gKyAgaWYgKCAgKFZhclN0b3JlID09IG1OdlZhcmlhYmxlQ2FjaGUpDQogICAgPiArICAgICB8 fCAoKFVJTlROKVZhclN0b3JlID09IChVSU5UTiltVmFyaWFibGVNb2R1bGVHbG9iYWwtDQogICAg PiA+VmFyaWFibGVHbG9iYWwuTm9uVm9sYXRpbGVWYXJpYWJsZUJhc2UpKQ0KICAgID4gKyAgew0K ICAgID4gKyAgICBPdXRWYXJUcmFja1B0ci0+Vm9sYXRpbGUgPSBGQUxTRTsNCiAgICA+ICsgIH0N CiAgICA+ICsNCiAgICA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCiAgICA+ICt9DQogICAgPiAr DQogICAgPiArLyoqDQogICAgPiArICBDaGVjayBpZiB0aGUgZ2l2ZW4gdmFyaWFibGUgaXMgZnJv bSBIT0IuDQogICAgPiArDQogICAgPiArICBAcGFyYW1baW5dIENhY2hlVmFyaWFibGUgICAgICBQ b2ludGVyIHRvIGN1cnJlbnQgdmFyaWFibGUgaW4gY2FjaGUuDQogICAgPiArDQogICAgPiArICBA cmV0dmFsIFRSVUUgICAgVGhlIHZhcmlhYmxlIGlzIGZyb20gSE9CLg0KICAgID4gKyAgQHJldHZh bCBGQUxTRSAgIFRoZSB2YXJpYWJsZSBpcyBOT1QgZnJvbSBIT0IuDQogICAgPiArDQogICAgPiAr KiovDQogICAgPiArQk9PTEVBTg0KICAgID4gK0lzSG9iVmFyaWFibGUgKA0KICAgID4gKyAgSU4g VkFSSUFCTEVfUE9JTlRFUl9UUkFDSyAgKkNhY2hlVmFyaWFibGUNCiAgICA+ICsgICkNCiAgICA+ ICt7DQogICAgPiArICBWQVJJQUJMRV9TVE9SRV9IRUFERVIgICpIb2JWYXJTdG9yZTsNCiAgICA+ ICsNCiAgICA+ICsgIEhvYlZhclN0b3JlID0gKFZBUklBQkxFX1NUT1JFX0hFQURFUiAqKShVSU5U TikNCiAgICA+ICsgICAgICAgICAgICAgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJs ZUdsb2JhbC5Ib2JWYXJpYWJsZUJhc2U7DQogICAgPiArICByZXR1cm4gKENhY2hlVmFyaWFibGUt PkN1cnJQdHIgIT0gTlVMTCAmJg0KICAgID4gKyAgICAgICAgICBIb2JWYXJTdG9yZSAhPSBOVUxM ICYmDQogICAgPiArICAgICAgICAgIENhY2hlVmFyaWFibGUtPlN0YXJ0UHRyID09IEdldFN0YXJ0 UG9pbnRlciAoSG9iVmFyU3RvcmUpKTsNCiAgICA+ICt9DQogICAgPiArDQogICAgPiArLyoqDQog ICAgPiArICBHZXQgdGVtcG9yYXJ5IGJ1ZmZlciBmb3IgYSBuZXcgdmFyaWFibGUgZGF0YS4NCiAg ICA+ICsNCiAgICA+ICsgIEByZXR2YWwgUG9pbnRlciB0byB0aGUgYnVmZmVyIGFkZHJlc3MuDQog ICAgPiArDQogICAgPiArKiovDQogICAgPiArVkFSSUFCTEVfSEVBREVSICoNCiAgICA+ICtHZXRO ZXdWYXJpYWJsZUJ1ZmZlciAoDQogICAgPiArICBWT0lEDQogICAgPiArICApDQogICAgPiArew0K ICAgID4gKyAgVkFSSUFCTEVfSEVBREVSICAgICAgICAqTmV3VmFyaWFibGU7DQogICAgPiArICBW QVJJQUJMRV9TVE9SRV9IRUFERVIgICpWYXJTdG9yZTsNCiAgICA+ICsNCiAgICA+ICsgIC8vDQog ICAgPiArICAvLyBUcmlja3kgcGFydDogVXNlIHNjcmF0Y2ggZGF0YSBhcmVhIGF0IHRoZSBlbmQg b2Ygdm9sYXRpbGUgdmFyaWFibGUgc3RvcmUNCiAgICA+ICsgIC8vIGFzIGEgdGVtcG9yYXJ5IHN0 b3JhZ2UuDQogICAgPiArICAvLw0KICAgID4gKyAgVmFyU3RvcmUgPSAoVkFSSUFCTEVfU1RPUkVf SEVBREVSICopKFVJTlROKQ0KICAgID4gKyAgICAgICAgICAgICBtVmFyaWFibGVNb2R1bGVHbG9i YWwtPlZhcmlhYmxlR2xvYmFsLlZvbGF0aWxlVmFyaWFibGVCYXNlOw0KICAgID4gKyAgTmV3VmFy aWFibGUgPSBHZXRFbmRQb2ludGVyIChWYXJTdG9yZSk7DQogICAgPiArDQogICAgPiArICBTZXRN ZW0gKE5ld1ZhcmlhYmxlLCBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlNjcmF0Y2hCdWZmZXJTaXpl LCAweGZmKTsNCiAgICA+ICsNCiAgICA+ICsgIHJldHVybiBOZXdWYXJpYWJsZTsNCiAgICA+ICt9 DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBEZWxldGUgb2xkIGNvcGllcyBvZiB2YXJp YWJsZSBjb21wbGV0ZWx5Lg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtW2luXSAgICAgIFZhcmlh YmxlTmFtZSAgICAgICBOYW1lIG9mIHZhcmlhYmxlLg0KICAgID4gKyAgQHBhcmFtW2luXSAgICAg IFZlbmRvckd1aWQgICAgICAgICBHdWlkIG9mIHZhcmlhYmxlLg0KICAgID4gKyAgQHBhcmFtW2lu XSAgICAgIFZhcmlhYmxlICAgICAgICAgICBQb2ludGVyIHRvIGN1cnJlbnQgdmFyaWFibGUgb24g c3RvcmFnZS4NCiAgICA+ICsgIEBwYXJhbVtpbixvdXRdICBDYWNoZVZhcmlhYmxlICAgICAgUG9p bnRlciB0byBjdXJyZW50IHZhcmlhYmxlIGluIGNhY2hlLg0KICAgID4gKyAgQHBhcmFtW2luXSAg ICAgIFZvbGF0aWxlRmxhZyAgICAgICBBdXRoLXZhcmlhYmxlIGluZGljYXRvci4NCiAgICA+ICsN CiAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFZhcmlhYmxlKHMpIHdlcmUg ZGVsZXRlZCBzdWNjZXNzZnVsbHkuDQogICAgPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAg ICAgICBGYWlsZWQgdG8gdXBkYXRlIHZhcmlhYmxlIHN0YXRlLg0KICAgID4gKw0KICAgID4gKyoq Lw0KICAgID4gK0VGSV9TVEFUVVMNCiAgICA+ICtEZWxldGVWYXJpYWJsZSAoDQogICAgPiArICBJ TiAgICAgIENIQVIxNiAgICAgICAgICAgICAgICAgICpWYXJpYWJsZU5hbWUsDQogICAgPiArICBJ TiAgICAgIEVGSV9HVUlEICAgICAgICAgICAgICAgICpWZW5kb3JHdWlkLA0KICAgID4gKyAgSU4g ICAgICBWQVJJQUJMRV9QT0lOVEVSX1RSQUNLICAqVmFyaWFibGUsDQogICAgPiArICBJTiAgT1VU IFZBUklBQkxFX1BPSU5URVJfVFJBQ0sgICpDYWNoZVZhcmlhYmxlLA0KICAgID4gKyAgSU4gICAg ICBCT09MRUFOICAgICAgICAgICAgICAgICBWb2xhdGlsZUZsYWcNCiAgICA+ICsgICkNCiAgICA+ ICt7DQogICAgPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQogICAgPiArDQogICAgPiArICBpZiAo VmFyaWFibGUtPkluRGVsZXRlZFRyYW5zaXRpb25QdHIgIT0gTlVMTCkgew0KICAgID4gKyAgICBB U1NFUlQgKENhY2hlVmFyaWFibGUtPkluRGVsZXRlZFRyYW5zaXRpb25QdHIgIT0gTlVMTCk7DQog ICAgPiArICAgIC8vDQogICAgPiArICAgIC8vIEJvdGggQURERUQgYW5kIElOX0RFTEVURURfVFJB TlNJVElPTiB2YXJpYWJsZSBhcmUgcHJlc2VudCwNCiAgICA+ICsgICAgLy8gc2V0IElOX0RFTEVU RURfVFJBTlNJVElPTiBvbmUgdG8gREVMRVRFRCBzdGF0ZSBmaXJzdC4NCiAgICA+ICsgICAgLy8N CiAgICA+ICsgICAgU3RhdHVzID0gVXBkYXRlVmFyaWFibGVTdGF0ZSAoDQogICAgPiArICAgICAg ICAgICAgICAgVmFyaWFibGUtPkluRGVsZXRlZFRyYW5zaXRpb25QdHIsDQogICAgPiArICAgICAg ICAgICAgICAgQ2FjaGVWYXJpYWJsZS0+SW5EZWxldGVkVHJhbnNpdGlvblB0ciwNCiAgICA+ICsg ICAgICAgICAgICAgICBDYWNoZVZhcmlhYmxlLT5JbkRlbGV0ZWRUcmFuc2l0aW9uUHRyLT5TdGF0 ZSAmIFZBUl9ERUxFVEVELA0KICAgID4gKyAgICAgICAgICAgICAgIFZvbGF0aWxlRmxhZw0KICAg ID4gKyAgICAgICAgICAgICAgICk7DQogICAgPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCiAgICA+ICsgICAgICByZXR1cm4gU3RhdHVzOw0KICAgID4gKyAgICB9DQogICAgPiArICB9 DQogICAgPiArDQogICAgPiArICBBU1NFUlQgKENhY2hlVmFyaWFibGUtPkN1cnJQdHIgIT0gTlVM TCk7DQogICAgPiArICBTdGF0dXMgPSBVcGRhdGVWYXJpYWJsZVN0YXRlICgNCiAgICA+ICsgICAg ICAgICAgICAgVmFyaWFibGUtPkN1cnJQdHIsDQogICAgPiArICAgICAgICAgICAgIENhY2hlVmFy aWFibGUtPkN1cnJQdHIsDQogICAgPiArICAgICAgICAgICAgIENhY2hlVmFyaWFibGUtPkN1cnJQ dHItPlN0YXRlICYgVkFSX0RFTEVURUQsDQogICAgPiArICAgICAgICAgICAgIFZvbGF0aWxlRmxh Zw0KICAgID4gKyAgICAgICAgICAgICApOw0KICAgID4gKw0KICAgID4gKyAgaWYgKCFFRklfRVJS T1IgKFN0YXR1cykpIHsNCiAgICA+ICsgICAgVXBkYXRlVmFyaWFibGVJbmZvICgNCiAgICA+ICsg ICAgICBWYXJpYWJsZU5hbWUsDQogICAgPiArICAgICAgVmVuZG9yR3VpZCwNCiAgICA+ICsgICAg ICBWYXJpYWJsZS0+Vm9sYXRpbGUsDQogICAgPiArICAgICAgRkFMU0UsDQogICAgPiArICAgICAg RkFMU0UsDQogICAgPiArICAgICAgVFJVRSwNCiAgICA+ICsgICAgICBGQUxTRSwNCiAgICA+ICsg ICAgICAmZ1ZhcmlhYmxlSW5mbw0KICAgID4gKyAgICAgICk7DQogICAgPiArICAgIGlmICghVmFy aWFibGUtPlZvbGF0aWxlKSB7DQogICAgPiArICAgICAgRmx1c2hIb2JWYXJpYWJsZVRvRmxhc2gg KFZhcmlhYmxlTmFtZSwgVmVuZG9yR3VpZCk7DQogICAgPiArICAgIH0NCiAgICA+ICsgIH0NCiAg ICA+ICsNCiAgICA+ICsgIHJldHVybiBTdGF0dXM7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4g Ky8qKg0KICAgID4gKyAgQ2hlY2sgaWYgaXQncyB0aGUgcmlnaHQgdGltZSB0byB1cGRhdGUgYSB2 YXJpYWJsZS4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbVtpbl0gQXR0cmlidXRlcyAgICAgICAg IEF0dHJpYnV0ZXMgb2YgYSB2YXJpYWJsZS4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwgVFJV RSAgICBJdCdzIHJlYWR5IGZvciB2YXJpYWJsZSB1cGRhdGUuDQogICAgPiArICBAcmV0dmFsIEZB TFNFICAgSXQncyBOT1QgcmVhZHkgZm9yIHZhcmlhYmxlIHVwZGF0ZS4NCiAgICA+ICsNCiAgICA+ ICsqKi8NCiAgICA+ICtCT09MRUFODQogICAgPiArUmVhZHlGb3JVcGRhdGUgKA0KICAgID4gKyAg SU4gVUlOVDMyICBBdHRyaWJ1dGVzDQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgaWYg KChtVmFyaWFibGVNb2R1bGVHbG9iYWwtPkZ2Ykluc3RhbmNlID09IE5VTEwpICYmDQogICAgPiAr ICAgICAgIW1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuRW11TnZNb2RlKQ0K ICAgID4gKyAgew0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICAvLyBUaGUgRlZCIHByb3RvY29s IGlzIG5vdCByZWFkeSwgc28gdGhlDQogICAgPiBFRklfVkFSSUFCTEVfV1JJVEVfQVJDSF9QUk9U T0NPTA0KICAgID4gKyAgICAvLyBpcyBub3QgaW5zdGFsbGVkLg0KICAgID4gKyAgICAvLw0KICAg ID4gKyAgICBpZiAoKEF0dHJpYnV0ZXMgJiBFRklfVkFSSUFCTEVfTk9OX1ZPTEFUSUxFKSAhPSAw KSB7DQogICAgPiArICAgICAgLy8NCiAgICA+ICsgICAgICAvLyBUcnlpbmcgdG8gdXBkYXRlIE5W IHZhcmlhYmxlIHByaW9yIHRvIHRoZSBpbnN0YWxsYXRpb24gb2YNCiAgICA+ICsgICAgICAvLyBF RklfVkFSSUFCTEVfV1JJVEVfQVJDSF9QUk9UT0NPTA0KICAgID4gKyAgICAgIC8vDQogICAgPiAr ICAgICAgREVCVUcgKCgNCiAgICA+ICsgICAgICAgIERFQlVHX0VSUk9SLA0KICAgID4gKyAgICAg ICAgIlVwZGF0ZSBOViB2YXJpYWJsZSBiZWZvcmUgRUZJX1ZBUklBQkxFX1dSSVRFX0FSQ0hfUFJP VE9DT0wNCiAgICA+IHJlYWR5IC0gJXJcbiIsDQogICAgPiArICAgICAgICBFRklfTk9UX0FWQUlM QUJMRV9ZRVQNCiAgICA+ICsgICAgICAgICkpOw0KICAgID4gKyAgICAgIHJldHVybiBGQUxTRTsN CiAgICA+ICsgICAgfSBlbHNlIGlmICgoQXR0cmlidXRlcyAmIFZBUklBQkxFX0FUVFJJQlVURV9B VF9BVykgIT0gMCkgew0KICAgID4gKyAgICAgIC8vDQogICAgPiArICAgICAgLy8gVHJ5aW5nIHRv IHVwZGF0ZSB2b2xhdGlsZSBhdXRoZW50aWNhdGVkIHZhcmlhYmxlIHByaW9yIHRvIHRoZQ0KICAg ID4gKyAgICAgIC8vIGluc3RhbGxhdGlvbiBvZiBFRklfVkFSSUFCTEVfV1JJVEVfQVJDSF9QUk9U T0NPTC4gVGhlDQogICAgPiBhdXRoZW50aWNhdGVkDQogICAgPiArICAgICAgLy8gdmFyaWFibGUg cGVyaGFwcyBpcyBub3QgaW5pdGlhbGl6ZWQsIGp1c3QgcmV0dXJuIGhlcmUuDQogICAgPiArICAg ICAgLy8NCiAgICA+ICsgICAgICBERUJVRyAoKA0KICAgID4gKyAgICAgICAgREVCVUdfRVJST1Is DQogICAgPiArICAgICAgICAiVXBkYXRlIEFVVEggdmFyaWFibGUgYmVmb3JlIEVGSV9WQVJJQUJM RV9XUklURV9BUkNIX1BST1RPQ09MDQogICAgPiByZWFkeSAtICVyXG4iLA0KICAgID4gKyAgICAg ICAgRUZJX05PVF9BVkFJTEFCTEVfWUVUDQogICAgPiArICAgICAgICApKTsNCiAgICA+ICsgICAg ICByZXR1cm4gRkFMU0U7DQogICAgPiArICAgIH0NCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ ICsgIHJldHVybiBUUlVFOw0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsg IENoZWNrIHBhcmFtZXRlcnMgYXNzb2NpYXRlZCB3aXRoIHRoZSB2YXJpYWJsZSB0byB1cGRhdGUu DQogICAgPiArDQogICAgPiArICBAcGFyYW1baW5dIFZhcmlhYmxlICAgICAgICAgICBQb2ludGVy IHRvIGN1cnJlbnQgdmFyaWFibGUgb24gc3RvcmFnZS4NCiAgICA+ICsgIEBwYXJhbVtpbl0gQ2Fj aGVWYXJpYWJsZSAgICAgIFBvaW50ZXIgdG8gY3VycmVudCB2YXJpYWJsZSBpbiBjYWNoZS4NCiAg ICA+ICsgIEBwYXJhbVtpbl0gVmFyaWFibGVOYW1lICAgICAgIE5hbWUgb2YgdmFyaWFibGUuDQog ICAgPiArICBAcGFyYW1baW5dIFZlbmRvckd1aWQgICAgICAgICBHdWlkIG9mIHZhcmlhYmxlLg0K ICAgID4gKyAgQHBhcmFtW2luXSBEYXRhICAgICAgICAgICAgICAgVmFyaWFibGUgZGF0YS4NCiAg ICA+ICsgIEBwYXJhbVtpbl0gRGF0YVNpemUgICAgICAgICAgIFNpemUgb2YgZGF0YS4gMCBtZWFu cyBkZWxldGUuDQogICAgPiArICBAcGFyYW1baW5dIEF0dHJpYnV0ZXMgICAgICAgICBBdHRyaWJ1 dGVzIG9mIHRoZSB2YXJpYWJsZS4NCiAgICA+ICsgIEBwYXJhbVtpbl0gS2V5SW5kZXggICAgICAg ICAgIEluZGV4IG9mIGFzc29jaWF0ZWQgcHVibGljIGtleS4NCiAgICA+ICsgIEBwYXJhbVtpbl0g TW9ub3RvbmljQ291bnQgICAgIFZhbHVlIG9mIGFzc29jaWF0ZWQgbW9ub3RvbmljIGNvdW50Lg0K ICAgID4gKyAgQHBhcmFtW2luXSBUaW1lU3RhbXAgICAgICAgICAgVmFsdWUgb2YgYXNzb2NpYXRl ZCBUaW1lU3RhbXAuDQogICAgPiArDQogICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgICBUaGUgdmFyaWFibGUgaXMgb2sgdG8gYmUgdXBkYXRlZC4NCiAgICA+ICsgIEByZXR2YWwg RUZJX0FMUkVBRFlfU1RBUlRFRCAgIE5vIG5lZWQgdG8gdXBkYXRlIHRoZSB2YXJpYWJsZS4NCiAg ICA+ICsgIEByZXR2YWwgRUZJX1dSSVRFX1BST1RFQ1RFRCAgIFRoZSB2YXJpYWJsZSBjYW5ub3Qg YmUgdXBkYXRlZC4NCiAgICA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIFRoZSB2 YXJpYWJsZSBhdHRyaWJ1dGVzIGFyZSBub3QgdmFsaWQuDQogICAgPiArICBAcmV0dmFsIEVGSV9O T1RfRk9VTkQgICAgICAgICBUcnlpbmcgdG8gZGVsZXRlIG5vbi1leGlzdGluZyB2YXJpYWJsZS4N CiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtFRklfU1RBVFVTDQogICAgPiArVmFsaWRhdGVW YXJpYWJsZVBhcmFtZXRlcnMgKA0KICAgID4gKyAgSU4gVkFSSUFCTEVfUE9JTlRFUl9UUkFDSyAg KlZhcmlhYmxlLA0KICAgID4gKyAgSU4gVkFSSUFCTEVfUE9JTlRFUl9UUkFDSyAgKkNhY2hlVmFy aWFibGUsDQogICAgPiArICBJTiBDSEFSMTYgICAgICAgICAgICAgICAgICAqVmFyaWFibGVOYW1l LA0KICAgID4gKyAgSU4gRUZJX0dVSUQgICAgICAgICAgICAgICAgKlZlbmRvckd1aWQsDQogICAg PiArICBJTiBWT0lEICAgICAgICAgICAgICAgICAgICAqRGF0YSwNCiAgICA+ICsgIElOIFVJTlRO ICAgICAgICAgICAgICAgICAgIERhdGFTaXplLA0KICAgID4gKyAgSU4gVUlOVDMyICAgICAgICAg ICAgICAgICAgQXR0cmlidXRlcywNCiAgICA+ICsgIElOIFVJTlQzMiAgICAgICAgICAgICAgICAg IEtleUluZGV4LA0KICAgID4gKyAgSU4gVUlOVDY0ICAgICAgICAgICAgICAgICAgTW9ub3Rvbmlj Q291bnQsDQogICAgPiArICBJTiBFRklfVElNRSAgICAgICAgICAgICAgICAqVGltZVN0YW1wDQog ICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgQk9PTEVBTiAgQXV0aEZsYWc7DQogICAgPiAr DQogICAgPiArICBBdXRoRmxhZyA9IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9i YWwuQXV0aEZvcm1hdDsNCiAgICA+ICsNCiAgICA+ICsgIGlmICgoRGF0YVNpemUgPT0gMCkgJiYg KChBdHRyaWJ1dGVzICYgRUZJX1ZBUklBQkxFX0FQUEVORF9XUklURSkgIT0gMCkpIHsNCiAgICA+ ICsgICAgcmV0dXJuIEVGSV9BTFJFQURZX1NUQVJURUQ7DQogICAgPiArICB9DQogICAgPiArDQog ICAgPiArICBpZiAoVmFyaWFibGUtPkN1cnJQdHIgIT0gTlVMTCkgew0KICAgID4gKyAgICAvLw0K ICAgID4gKyAgICAvLyBVcGRhdGUvRGVsZXRlIGV4aXN0aW5nIHZhcmlhYmxlLg0KICAgID4gKyAg ICAvLw0KICAgID4gKyAgICBpZiAoQXRSdW50aW1lICgpKSB7DQogICAgPiArICAgICAgLy8NCiAg ICA+ICsgICAgICAvLyBJZiBBdFJ1bnRpbWUgYW5kIHRoZSB2YXJpYWJsZSBpcyBWb2xhdGlsZSBh bmQgUnVudGltZSBBY2Nlc3MsDQogICAgPiArICAgICAgLy8gdGhlIHZvbGF0aWxlIGlzIFJlYWRP bmx5LCBhbmQgU2V0VmFyaWFibGUgc2hvdWxkIGJlIGFib3J0ZWQgYW5kDQogICAgPiArICAgICAg Ly8gcmV0dXJuIEVGSV9XUklURV9QUk9URUNURUQuDQogICAgPiArICAgICAgLy8NCiAgICA+ICsg ICAgICBpZiAoVmFyaWFibGUtPlZvbGF0aWxlKSB7DQogICAgPiArICAgICAgICByZXR1cm4gRUZJ X1dSSVRFX1BST1RFQ1RFRDsNCiAgICA+ICsgICAgICB9DQogICAgPiArDQogICAgPiArICAgICAg Ly8NCiAgICA+ICsgICAgICAvLyBPbmx5IHZhcmlhYmxlIHRoYXQgaGF2ZSBOViBhdHRyaWJ1dGVz IGNhbiBiZSB1cGRhdGVkL2RlbGV0ZWQgaW4gUnVudGltZS4NCiAgICA+ICsgICAgICAvLw0KICAg ID4gKyAgICAgIGlmICgoQ2FjaGVWYXJpYWJsZS0+Q3VyclB0ci0+QXR0cmlidXRlcyAmIEVGSV9W QVJJQUJMRV9OT05fVk9MQVRJTEUpDQogICAgPiA9PSAwKSB7DQogICAgPiArICAgICAgICByZXR1 cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KICAgID4gKyAgICAgIH0NCiAgICA+ICsNCiAgICA+ ICsgICAgICAvLw0KICAgID4gKyAgICAgIC8vIE9ubHkgdmFyaWFibGUgdGhhdCBoYXZlIFJUIGF0 dHJpYnV0ZXMgY2FuIGJlIHVwZGF0ZWQvZGVsZXRlZCBpbiBSdW50aW1lLg0KICAgID4gKyAgICAg IC8vDQogICAgPiArICAgICAgaWYgKChDYWNoZVZhcmlhYmxlLT5DdXJyUHRyLT5BdHRyaWJ1dGVz ICYgRUZJX1ZBUklBQkxFX1JVTlRJTUVfQUNDRVNTKQ0KICAgID4gPT0gMCkgew0KICAgID4gKyAg ICAgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCiAgICA+ICsgICAgICB9DQogICAg PiArICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgLy8gVmFyaWFibGUg Y29udGVudCB1bmNoYW5nZWQgYW5kIG5vIG5lZWQgdG8gdXBkYXRlIHRpbWVzdGFtcCwganVzdCBy ZXR1cm4uDQogICAgPiArICAgIC8vDQogICAgPiArICAgIGlmICggICgoQXR0cmlidXRlcyAmIEVG SV9WQVJJQUJMRV9BUFBFTkRfV1JJVEUpID09IDApDQogICAgPiArICAgICAgICYmIChUaW1lU3Rh bXAgPT0gTlVMTCkNCiAgICA+ICsgICAgICAgJiYgKERhdGFTaXplT2ZWYXJpYWJsZSAoQ2FjaGVW YXJpYWJsZS0+Q3VyclB0ciwgQXV0aEZsYWcpID09IERhdGFTaXplKQ0KICAgID4gKyAgICAgICAm JiAoQ29tcGFyZU1lbSAoRGF0YSwgR2V0VmFyaWFibGVEYXRhUHRyIChDYWNoZVZhcmlhYmxlLT5D dXJyUHRyLA0KICAgID4gQXV0aEZsYWcpLCBEYXRhU2l6ZSkgPT0gMCkpDQogICAgPiArICAgIHsN CiAgICA+ICsgICAgICBVcGRhdGVWYXJpYWJsZUluZm8gKA0KICAgID4gKyAgICAgICAgVmFyaWFi bGVOYW1lLA0KICAgID4gKyAgICAgICAgVmVuZG9yR3VpZCwNCiAgICA+ICsgICAgICAgIFZhcmlh YmxlLT5Wb2xhdGlsZSwNCiAgICA+ICsgICAgICAgIEZBTFNFLA0KICAgID4gKyAgICAgICAgVFJV RSwNCiAgICA+ICsgICAgICAgIEZBTFNFLA0KICAgID4gKyAgICAgICAgRkFMU0UsDQogICAgPiAr ICAgICAgICAmZ1ZhcmlhYmxlSW5mbw0KICAgID4gKyAgICAgICAgKTsNCiAgICA+ICsgICAgICBy ZXR1cm4gRUZJX0FMUkVBRFlfU1RBUlRFRDsNCiAgICA+ICsgICAgfQ0KICAgID4gKyAgfSBlbHNl IHsNCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgLy8gQ3JlYXRlIGEgbmV3IHZhcmlhYmxlLg0K ICAgID4gKyAgICAvLw0KICAgID4gKw0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICAvLyBNYWtl IHN1cmUgd2UgYXJlIHRyeWluZyB0byBjcmVhdGUgYSBuZXcgdmFyaWFibGUuIFlvdSBjYW5ub3Qg ZGVsZXRlIGENCiAgICA+IG5ldw0KICAgID4gKyAgICAvLyB2YXJpYWJsZS4NCiAgICA+ICsgICAg Ly8NCiAgICA+ICsgICAgaWYgKChEYXRhU2l6ZSA9PSAwKSB8fA0KICAgID4gKyAgICAgICAgKChB dHRyaWJ1dGVzICYNCiAgICA+IChFRklfVkFSSUFCTEVfUlVOVElNRV9BQ0NFU1N8RUZJX1ZBUklB QkxFX0JPT1RTRVJWSUNFX0FDQ0VTUykpID09DQogICAgPiAwKSkNCiAgICA+ICsgICAgew0KICAg ID4gKyAgICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KICAgID4gKyAgICB9DQogICAgPiArDQog ICAgPiArICAgIC8vDQogICAgPiArICAgIC8vIE9ubHkgdmFyaWFibGUgaGF2ZSBOVnxSVCBhdHRy aWJ1dGUgY2FuIGJlIGNyZWF0ZWQgaW4gUnVudGltZS4NCiAgICA+ICsgICAgLy8NCiAgICA+ICsg ICAgaWYgKCAgQXRSdW50aW1lICgpDQogICAgPiArICAgICAgICYmICggICgoQXR0cmlidXRlcyAm IEVGSV9WQVJJQUJMRV9SVU5USU1FX0FDQ0VTUykgPT0gMCkNCiAgICA+ICsgICAgICAgICAgfHwg KChBdHRyaWJ1dGVzICYgRUZJX1ZBUklBQkxFX05PTl9WT0xBVElMRSkgPT0gMCkpKQ0KICAgID4g KyAgICB7DQogICAgPiArICAgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCiAgICA+ ICsgICAgfQ0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNT Ow0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIFVwZGF0ZSB0aGUgdmFy aWFibGUgcmVnaW9uIHdpdGggVmFyaWFibGUgaW5mb3JtYXRpb24uIElmDQogICAgPiBFRklfVkFS SUFCTEVfQVVUSEVOVElDQVRFRF9XUklURV9BQ0NFU1MgaXMgc2V0LA0KICAgID4gKyAgaW5kZXgg b2YgYXNzb2NpYXRlZCBwdWJsaWMga2V5IGlzIG5lZWRlZC4NCiAgICA+ICsNCiAgICA+ICsgIEBw YXJhbVtpbl0gICAgICBWYXJpYWJsZU5hbWUgICAgICAgTmFtZSBvZiB2YXJpYWJsZS4NCiAgICA+ ICsgIEBwYXJhbVtpbl0gICAgICBWZW5kb3JHdWlkICAgICAgICAgR3VpZCBvZiB2YXJpYWJsZS4N CiAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBEYXRhICAgICAgICAgICAgICAgVmFyaWFibGUgZGF0 YS4NCiAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBEYXRhU2l6ZSAgICAgICAgICAgU2l6ZSBvZiBk YXRhLiAwIG1lYW5zIGRlbGV0ZS4NCiAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBBdHRyaWJ1dGVz ICAgICAgICAgQXR0cmlidXRlcyBvZiB0aGUgdmFyaWFibGUuDQogICAgPiArICBAcGFyYW1baW5d ICAgICAgS2V5SW5kZXggICAgICAgICAgIEluZGV4IG9mIGFzc29jaWF0ZWQgcHVibGljIGtleS4N CiAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBNb25vdG9uaWNDb3VudCAgICAgVmFsdWUgb2YgYXNz b2NpYXRlZCBtb25vdG9uaWMgY291bnQuDQogICAgPiArICBAcGFyYW1baW4sb3V0XSAgQ2FjaGVW YXJpYWJsZSAgICAgIFRoZSB2YXJpYWJsZSBpbmZvcm1hdGlvbiB3aGljaCBpcyB1c2VkDQogICAg PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGtlZXAgdHJhY2sgb2Yg dmFyaWFibGUgdXNhZ2UuDQogICAgPiArICBAcGFyYW1baW5dICAgICAgVGltZVN0YW1wICAgICAg ICAgIFZhbHVlIG9mIGFzc29jaWF0ZWQgVGltZVN0YW1wLg0KICAgID4gKw0KICAgID4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHVwZGF0ZSBvcGVyYXRpb24gaXMgc3VjY2Vz cy4NCiAgICA+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgIFZhcmlhYmxlIHJlZ2lv biBpcyBmdWxsLCBjYW4gbm90IHdyaXRlIG90aGVyDQogICAgPiBkYXRhIGludG8gdGhpcyByZWdp b24uDQogICAgPiArDQogICAgPiArKiovDQogICAgPiArRUZJX1NUQVRVUw0KICAgID4gK1VwZGF0 ZVZhcmlhYmxlICgNCiAgICA+ICsgIElOICAgICAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgKlZh cmlhYmxlTmFtZSwNCiAgICA+ICsgIElOICAgICAgRUZJX0dVSUQgICAgICAgICAgICAgICAgKlZl bmRvckd1aWQsDQogICAgPiArICBJTiAgICAgIFZPSUQgICAgICAgICAgICAgICAgICAgICpEYXRh LA0KICAgID4gKyAgSU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICBEYXRhU2l6ZSwNCiAg ICA+ICsgIElOICAgICAgVUlOVDMyICAgICAgICAgICAgICAgICAgQXR0cmlidXRlcyAgICAgIE9Q VElPTkFMLA0KICAgID4gKyAgSU4gICAgICBVSU5UMzIgICAgICAgICAgICAgICAgICBLZXlJbmRl eCAgICAgICAgT1BUSU9OQUwsDQogICAgPiArICBJTiAgICAgIFVJTlQ2NCAgICAgICAgICAgICAg ICAgIE1vbm90b25pY0NvdW50ICBPUFRJT05BTCwNCiAgICA+ICsgIElOIE9VVCAgVkFSSUFCTEVf UE9JTlRFUl9UUkFDSyAgKkNhY2hlVmFyaWFibGUsDQogICAgPiArICBJTiAgICAgIEVGSV9USU1F ICAgICAgICAgICAgICAgICpUaW1lU3RhbXAgICAgICBPUFRJT05BTA0KICAgID4gKyAgKQ0KICAg ID4gK3sNCiAgICA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgIFN0YXR1czsNCiAgICA+ICsg IFZBUklBQkxFX0dMT0JBTCAgICAgICAgICpWYXJHbG9iYWw7DQogICAgPiArICBWQVJJQUJMRV9I RUFERVIgICAgICAgICAqTmV3VmFyaWFibGU7DQogICAgPiArICBWQVJJQUJMRV9IRUFERVIgICAg ICAgICAqTmV4dFZhcmlhYmxlOw0KICAgID4gKyAgVkFSSUFCTEVfSEVBREVSICAgICAgICAgKlVw ZGF0aW5nVmFyaWFibGU7DQogICAgPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICBWYXJTaXpl Ow0KICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgVXBkYXRlU2l6ZTsNCiAgICA+ICsg IFVJTlROICAgICAgICAgICAgICAgICAgIE9mZnNldDsNCiAgICA+ICsgIFZBUklBQkxFX1BPSU5U RVJfVFJBQ0sgICpWYXJpYWJsZTsNCiAgICA+ICsgIFZBUklBQkxFX1BPSU5URVJfVFJBQ0sgIE52 VmFyaWFibGU7DQogICAgPiArICBWQVJJQUJMRV9TVE9SRV9IRUFERVIgICAqVmFyaWFibGVTdG9y ZUhlYWRlcjsNCiAgICA+ICsgIFZBUklBQkxFX1JVTlRJTUVfQ0FDSEUgICpWb2xhdGlsZUNhY2hl SW5zdGFuY2U7DQogICAgPiArICBCT09MRUFOICAgICAgICAgICAgICAgICBJc0NvbW1vblZhcmlh YmxlOw0KICAgID4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgSXNDb21tb25Vc2VyVmFyaWFi bGU7DQogICAgPiArICBCT09MRUFOICAgICAgICAgICAgICAgICBEZWxldGVGbGFnOw0KICAgID4g KyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgVm9sYXRpbGVGbGFnOw0KICAgID4gKyAgQk9PTEVB TiAgICAgICAgICAgICAgICAgSG9iVmFyT25seUZsYWc7DQogICAgPiArICBFRklfUEhZU0lDQUxf QUREUkVTUyAgICBWYXJTdG9yZUJhc2U7DQogICAgPiArICBVSU5UTiAgICAgICAgICAgICAgICAg ICAqTGFzdFZhcmlhYmxlT2Zmc2V0Ow0KICAgID4gKw0KICAgID4gKyAgaWYgKCFSZWFkeUZvclVw ZGF0ZSAoQXR0cmlidXRlcykpIHsNCiAgICA+ICsgICAgcmV0dXJuIEVGSV9OT1RfQVZBSUxBQkxF X1lFVDsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIFZhckdsb2JhbCA9ICZtVmFyaWFi bGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsOw0KICAgID4gKw0KICAgID4gKyAgaWYgKCAg KCgoQXR0cmlidXRlcyAmIEVGSV9WQVJJQUJMRV9BUFBFTkRfV1JJVEUpID09IDApICYmIChEYXRh U2l6ZSA9PSAwKSkNCiAgICA+ICsgICAgIHx8IChBdHRyaWJ1dGVzID09IDApDQogICAgPiArICAg ICB8fCAoQXRSdW50aW1lICgpICYmICgoQXR0cmlidXRlcyAmIChFRklfVkFSSUFCTEVfUlVOVElN RV9BQ0NFU1MNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHxFRklfVkFSSUFCTEVfQk9PVFNFUlZJQ0VfQUNDRVNTKSkgPT0gMCkpKQ0KICAgID4gKyAgew0K ICAgID4gKyAgICBEZWxldGVGbGFnID0gVFJVRTsNCiAgICA+ICsgIH0gZWxzZSB7DQogICAgPiAr ICAgIERlbGV0ZUZsYWcgPSBGQUxTRTsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIGlm ICggICgoQXR0cmlidXRlcyAmIEVGSV9WQVJJQUJMRV9OT05fVk9MQVRJTEUpICE9IDApDQogICAg PiArICAgICB8fCAoKENhY2hlVmFyaWFibGUtPkN1cnJQdHIgIT0gTlVMTCkgJiYNCiAgICA+ICsg ICAgICAgICAoKENhY2hlVmFyaWFibGUtPkN1cnJQdHItPkF0dHJpYnV0ZXMgJiBFRklfVkFSSUFC TEVfTk9OX1ZPTEFUSUxFKSAhPQ0KICAgID4gMCkpKQ0KICAgID4gKyAgew0KICAgID4gKyAgICBW b2xhdGlsZUZsYWcgPSBGQUxTRTsNCiAgICA+ICsgIH0gZWxzZSB7DQogICAgPiArICAgIFZvbGF0 aWxlRmxhZyA9IFRSVUU7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICAvLw0KICAgID4g KyAgLy8gQ2hlY2sgaWYgQ2FjaGVWYXJpYWJsZSBwb2ludHMgdG8gdGhlIHZhcmlhYmxlIGluIHZh cmlhYmxlIEhPQi4NCiAgICA+ICsgIC8vIElmIHllcywgbGV0IENhY2hlVmFyaWFibGUgcG9pbnRz IHRvIHRoZSB2YXJpYWJsZSBpbiBOViB2YXJpYWJsZSBjYWNoZS4NCiAgICA+ICsgIC8vDQogICAg PiArICBIb2JWYXJPbmx5RmxhZyA9IEZBTFNFOw0KICAgID4gKyAgaWYgKElzSG9iVmFyaWFibGUg KENhY2hlVmFyaWFibGUpKSB7DQogICAgPiArICAgIFN0YXR1cyA9IFJlYmFzZVZhcmlhYmxlUHRy ICgNCiAgICA+ICsgICAgICAgICAgICAgICBDYWNoZVZhcmlhYmxlLA0KICAgID4gKyAgICAgICAg ICAgICAgIENhY2hlVmFyaWFibGUsDQogICAgPiArICAgICAgICAgICAgICAgbU52VmFyaWFibGVD YWNoZSwNCiAgICA+ICsgICAgICAgICAgICAgICBWYXJpYWJsZU5hbWUsDQogICAgPiArICAgICAg ICAgICAgICAgVmVuZG9yR3VpZCwNCiAgICA+ICsgICAgICAgICAgICAgICBGQUxTRQ0KICAgID4g KyAgICAgICAgICAgICAgICk7DQogICAgPiArICAgIGlmICgoQ2FjaGVWYXJpYWJsZS0+Q3VyclB0 ciA9PSBOVUxMKSB8fCBFRklfRVJST1IgKFN0YXR1cykpIHsNCiAgICA+ICsgICAgICAvLw0KICAg ID4gKyAgICAgIC8vIFRoZXJlIGlzIG5vIG1hdGNoZWQgdmFyaWFibGUgaW4gTlYgdmFyaWFibGUg Y2FjaGUuDQogICAgPiArICAgICAgLy8NCiAgICA+ICsgICAgICBpZiAoRGVsZXRlRmxhZykgew0K ICAgID4gKyAgICAgICAgLy8NCiAgICA+ICsgICAgICAgIC8vIExlYXZlIHRoZSBkZWxldGlvbiB0 byBGbHVzaEhvYlZhcmlhYmxlVG9GbGFzaCgpIGJlZm9yZSByZXR1cm4uDQogICAgPiArICAgICAg ICAvLw0KICAgID4gKyAgICAgICAgSG9iVmFyT25seUZsYWcgPSBUUlVFOw0KICAgID4gKyAgICAg ICAgU3RhdHVzICAgICAgICAgPSBFRklfU1VDQ0VTUzsNCiAgICA+ICsgICAgICAgIGdvdG8gRG9u ZTsNCiAgICA+ICsgICAgICB9DQogICAgPiArICAgIH0NCiAgICA+ICsgIH0NCiAgICA+ICsNCiAg ICA+ICsgIC8vDQogICAgPiArICAvLyBEZXRlcm1pbmUgdGhlIHBoeXNpY2FsIHBvc2l0aW9uIG9m IHZhcmlhYmxlIHN0b3JlIHRvIHVwZGF0ZSwgZHVlIHRvIGNhY2hlDQogICAgPiArICAvLyBtZWNo YW5pbXMgb2YgdmFyaWFibGUgc2VydmljZS4NCiAgICA+ICsgIC8vDQogICAgPiArICBpZiAoKENh Y2hlVmFyaWFibGUtPkN1cnJQdHIgPT0gTlVMTCkgfHwgQ2FjaGVWYXJpYWJsZS0+Vm9sYXRpbGUp IHsNCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgLy8gLSBBZGQgbmV3IHZhcmlhYmxlICh2b2xh dGlsZSBvciBub24tdm9sYXRpbGUpOyBPcg0KICAgID4gKyAgICAvLyAtIFVwZGF0ZS9kZWxldGUg dm9sYXRpbGUgdmFyaWFibGUgaW4gcGxhY2UuDQogICAgPiArICAgIC8vDQogICAgPiArICAgIFZh cmlhYmxlID0gQ2FjaGVWYXJpYWJsZTsNCiAgICA+ICsgIH0gZWxzZSB7DQogICAgPiArICAgIC8v DQogICAgPiArICAgIC8vIC0gVXBkYXRlL0RlbGV0ZSBleGlzdGluZyBOViB2YXJpYWJsZS4NCiAg ICA+ICsgICAgLy8gICAgQ2FjaGVWYXJpYWJsZSBwb2ludHMgdG8gdGhlIHZhcmlhYmxlIGluIHRo ZSBtZW1vcnkgY29weSBvZiBGbGFzaCBhcmVhLg0KICAgID4gKyAgICAvLyAgICBOb3cgbGV0IFZh cmlhYmxlIHBvaW50cyB0byB0aGUgc2FtZSB2YXJpYWJsZSBpbiBGbGFzaCBhcmVhLg0KICAgID4g KyAgICAvLw0KICAgID4gKyAgICBWYXJpYWJsZVN0b3JlSGVhZGVyID0gKFZBUklBQkxFX1NUT1JF X0hFQURFUiAqKShVSU5UTikNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIFZhckds b2JhbC0+Tm9uVm9sYXRpbGVWYXJpYWJsZUJhc2U7DQogICAgPiArICAgIFZhcmlhYmxlID0gJk52 VmFyaWFibGU7DQogICAgPiArICAgIFN0YXR1cyAgID0gUmViYXNlVmFyaWFibGVQdHIgKA0KICAg ID4gKyAgICAgICAgICAgICAgICAgQ2FjaGVWYXJpYWJsZSwNCiAgICA+ICsgICAgICAgICAgICAg ICAgIFZhcmlhYmxlLA0KICAgID4gKyAgICAgICAgICAgICAgICAgVmFyaWFibGVTdG9yZUhlYWRl ciwNCiAgICA+ICsgICAgICAgICAgICAgICAgIFZhcmlhYmxlTmFtZSwNCiAgICA+ICsgICAgICAg ICAgICAgICAgIFZlbmRvckd1aWQsDQogICAgPiArICAgICAgICAgICAgICAgICBUUlVFDQogICAg PiArICAgICAgICAgICAgICAgICApOw0KICAgID4gKyAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0 dXMpOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIFZhbGlk YXRlIHZhcmlhYmxlIHBhcmFtZXRlcnMuDQogICAgPiArICAvLw0KICAgID4gKyAgU3RhdHVzID0g VmFsaWRhdGVWYXJpYWJsZVBhcmFtZXRlcnMgKA0KICAgID4gKyAgICAgICAgICAgICBWYXJpYWJs ZSwNCiAgICA+ICsgICAgICAgICAgICAgQ2FjaGVWYXJpYWJsZSwNCiAgICA+ICsgICAgICAgICAg ICAgVmFyaWFibGVOYW1lLA0KICAgID4gKyAgICAgICAgICAgICBWZW5kb3JHdWlkLA0KICAgID4g KyAgICAgICAgICAgICBEYXRhLA0KICAgID4gKyAgICAgICAgICAgICBEYXRhU2l6ZSwNCiAgICA+ ICsgICAgICAgICAgICAgQXR0cmlidXRlcywNCiAgICA+ICsgICAgICAgICAgICAgS2V5SW5kZXgs DQogICAgPiArICAgICAgICAgICAgIE1vbm90b25pY0NvdW50LA0KICAgID4gKyAgICAgICAgICAg ICBUaW1lU3RhbXANCiAgICA+ICsgICAgICAgICAgICAgKTsNCiAgICA+ICsgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCiAgICA+ICsgICAgZ290byBEb25lOw0KICAgID4gKyAgfQ0KICAgID4g Kw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIEFkZCBvciB1cGRhdGUgYSB2YXJpYWJsZS4gQWxs b2NhdGUgYSBidWZmZXIgdG8gaG9sZCBpdCB0ZW1wb3JhcmlseS4NCiAgICA+ICsgIC8vDQogICAg PiArICBOZXdWYXJpYWJsZSA9IEdldE5ld1ZhcmlhYmxlQnVmZmVyICgpOw0KICAgID4gKw0KICAg ID4gKyAgLy8NCiAgICA+ICsgIC8vIEZpbGwtdXAgdmFyaWFibGUgZGF0YSBmaXJzdCwgaWYgbmVj ZXNzYXJ5Lg0KICAgID4gKyAgLy8NCiAgICA+ICsgIElzQ29tbW9uVmFyaWFibGUgICAgID0gRkFM U0U7DQogICAgPiArICBJc0NvbW1vblVzZXJWYXJpYWJsZSA9IEZBTFNFOw0KICAgID4gKyAgaWYg KERlbGV0ZUZsYWcpIHsNCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgLy8gTm8gbmVlZCB0byBm aWxsIHVwIHZhcmlhYmxlIGJ1ZmZlciB3aGVuIGRlbGV0aW5nIGEgdmFyaWFibGUuIEJ1dCB0aGUN CiAgICA+ICsgICAgLy8gYnVmZmVyIGlzIHN0aWxsIG5lZWRlZCBpZiB2YXJpYWJsZSBwcm90ZWN0 aW9uIGlzIGVtcGxveWVkLg0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICBWYXJTaXplID0gMDsN CiAgICA+ICsgIH0gZWxzZSB7DQogICAgPiArICAgIFZhclNpemUgPSBTZXRWYXJpYWJsZURhdGEg KA0KICAgID4gKyAgICAgICAgICAgICAgICBOZXdWYXJpYWJsZSwNCiAgICA+ICsgICAgICAgICAg ICAgICAgQ2FjaGVWYXJpYWJsZS0+Q3VyclB0ciwNCiAgICA+ICsgICAgICAgICAgICAgICAgVmFy aWFibGVOYW1lLA0KICAgID4gKyAgICAgICAgICAgICAgICBWZW5kb3JHdWlkLA0KICAgID4gKyAg ICAgICAgICAgICAgICBEYXRhLA0KICAgID4gKyAgICAgICAgICAgICAgICBEYXRhU2l6ZSwNCiAg ICA+ICsgICAgICAgICAgICAgICAgQXR0cmlidXRlcywNCiAgICA+ICsgICAgICAgICAgICAgICAg S2V5SW5kZXgsDQogICAgPiArICAgICAgICAgICAgICAgIE1vbm90b25pY0NvdW50LA0KICAgID4g KyAgICAgICAgICAgICAgICBUaW1lU3RhbXANCiAgICA+ICsgICAgICAgICAgICAgICAgKTsNCiAg ICA+ICsNCiAgICA+ICsgICAgaWYgKChBdHRyaWJ1dGVzICYgRUZJX1ZBUklBQkxFX0hBUkRXQVJF X0VSUk9SX1JFQ09SRCkgPT0gMCkgew0KICAgID4gKyAgICAgIElzQ29tbW9uVmFyaWFibGUgICAg ID0gVFJVRTsNCiAgICA+ICsgICAgICBJc0NvbW1vblVzZXJWYXJpYWJsZSA9IElzVXNlclZhcmlh YmxlIChOZXdWYXJpYWJsZSk7DQogICAgPiArICAgIH0NCiAgICA+ICsgIH0NCiAgICA+ICsNCiAg ICA+ICsgIC8vDQogICAgPiArICAvLyBXZSBtaWdodCBuZWVkIHRvIGRvIHByb3RlY3Rpb24gZm9y IG5vbi12b2xhdGlsZSB2YXJpYWJsZSBiZWZvcmUgZmx1c2hpbmcNCiAgICA+ICsgIC8vIHRoZSBk YXRhIHRvIHN0b3JhZ2UuIEEgbnVsbCB2ZXJzaW9uIChtZWFuaW5nIG5vIHByb3RlY3Rpb24pIG9m IGZvbGxvd2luZw0KICAgID4gKyAgLy8gQVBJcyBzaG91bGQgc2ltcGx5IHJldHVybiBFRklfU1VD Q0VTUyBvciBFRklfVU5TVVBQT1JURUQgd2l0aG91dCBhbnkNCiAgICA+ICsgIC8vIGNoYW5nZXMg dG8gb3JpZ2luYWwgZGF0YS4NCiAgICA+ICsgIC8vDQogICAgPiArICBpZiAoIVZvbGF0aWxlRmxh Zykgew0KICAgID4gKyAgICBTdGF0dXMgPSBQcm90ZWN0ZWRWYXJpYWJsZUxpYlVwZGF0ZSAoDQog ICAgPiArICAgICAgICAgICAgICAgVmFyaWFibGUtPkN1cnJQdHIsDQogICAgPiArICAgICAgICAg ICAgICAgVmFyaWFibGUtPkluRGVsZXRlZFRyYW5zaXRpb25QdHIsDQogICAgPiArICAgICAgICAg ICAgICAgTmV3VmFyaWFibGUsDQogICAgPiArICAgICAgICAgICAgICAgJlZhclNpemUNCiAgICA+ ICsgICAgICAgICAgICAgICApOw0KICAgID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpICYm IChTdGF0dXMgIT0gRUZJX1VOU1VQUE9SVEVEKSkgew0KICAgID4gKyAgICAgIHJldHVybiBTdGF0 dXM7DQogICAgPiArICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgU3RhdHVzID0gRUZJX1NVQ0NF U1M7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICAvLw0KICAgID4gKyAgLy8gTWFyayB0 aGUgb2xkIHZhcmlhYmxlIGFzIGluIGRlbGV0ZSB0cmFuc2l0aW9uIGZpcnN0LiBUaGVyZSdzIG5v IHN1Y2ggbmVlZA0KICAgID4gKyAgLy8gZm9yIGRlbGV0aW5nIGEgdmFyaWFibGUsIGV2ZW4gaWYg dmFyaWFibGUgcHJvdGVjdGlvbiBpcyBlbXBsb3llZC4NCiAgICA+ICsgIC8vDQogICAgPiArICBp ZiAoICAhRGVsZXRlRmxhZw0KICAgID4gKyAgICAgJiYgKENhY2hlVmFyaWFibGUtPkN1cnJQdHIg IT0gTlVMTCkNCiAgICA+ICsgICAgICYmICggIChDYWNoZVZhcmlhYmxlLT5DdXJyUHRyLT5TdGF0 ZSA9PSBWQVJfQURERUQpDQogICAgPiArICAgICAgICB8fCAoQ2FjaGVWYXJpYWJsZS0+Q3VyclB0 ci0+U3RhdGUgPT0gKFZBUl9BRERFRCAmDQogICAgPiBWQVJfSU5fREVMRVRFRF9UUkFOU0lUSU9O KSkpKQ0KICAgID4gKyAgew0KICAgID4gKyAgICBTdGF0dXMgPSBVcGRhdGVWYXJpYWJsZVN0YXRl ICgNCiAgICA+ICsgICAgICAgICAgICAgICBWYXJpYWJsZS0+Q3VyclB0ciwNCiAgICA+ICsgICAg ICAgICAgICAgICBDYWNoZVZhcmlhYmxlLT5DdXJyUHRyLA0KICAgID4gKyAgICAgICAgICAgICAg IENhY2hlVmFyaWFibGUtPkN1cnJQdHItPlN0YXRlICYgVkFSX0lOX0RFTEVURURfVFJBTlNJVElP TiwNCiAgICA+ICsgICAgICAgICAgICAgICBWYXJpYWJsZS0+Vm9sYXRpbGUNCiAgICA+ICsgICAg ICAgICAgICAgICApOw0KICAgID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAg PiArICAgICAgZ290byBEb25lOw0KICAgID4gKyAgICB9DQogICAgPiArICB9DQogICAgPiArDQog ICAgPiArICAvLw0KICAgID4gKyAgLy8gSGF2ZSBlbm91Z2ggc3BhY2UgdG8gc3RvcmUgdGhlIHZh cmlhYmxlPw0KICAgID4gKyAgLy8NCiAgICA+ICsgIFN0YXR1cyA9IENoZWNrVmFyaWFibGVTdG9y ZVNwYWNlICgNCiAgICA+ICsgICAgICAgICAgICAgTmV3VmFyaWFibGUsDQogICAgPiArICAgICAg ICAgICAgIFZhclNpemUsDQogICAgPiArICAgICAgICAgICAgIFZhcmlhYmxlTmFtZSwNCiAgICA+ ICsgICAgICAgICAgICAgVmVuZG9yR3VpZCwNCiAgICA+ICsgICAgICAgICAgICAgQXR0cmlidXRl cywNCiAgICA+ICsgICAgICAgICAgICAgVm9sYXRpbGVGbGFnDQogICAgPiArICAgICAgICAgICAg ICk7DQogICAgPiArICBpZiAoU3RhdHVzID09IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTKSB7DQogICAg PiArICAgIC8vDQogICAgPiArICAgIC8vIE5vdCBhIGNoYW5jZS4NCiAgICA+ICsgICAgLy8NCiAg ICA+ICsgICAgZ290byBEb25lOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgLy8NCiAg ICA+ICsgIC8vIE1heWJlIG5vdC4uLg0KICAgID4gKyAgLy8NCiAgICA+ICsgIFZhclN0b3JlQmFz ZSA9IChWb2xhdGlsZUZsYWcpID8gVmFyR2xvYmFsLT5Wb2xhdGlsZVZhcmlhYmxlQmFzZQ0KICAg ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBWYXJHbG9iYWwtPk5vblZvbGF0 aWxlVmFyaWFibGVCYXNlOw0KICAgID4gKyAgTGFzdFZhcmlhYmxlT2Zmc2V0ID0gKFZvbGF0aWxl RmxhZykNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICA/ICZtVmFyaWFibGVNb2R1bGVH bG9iYWwtPlZvbGF0aWxlTGFzdFZhcmlhYmxlT2Zmc2V0DQogICAgPiArICAgICAgICAgICAgICAg ICAgICAgICAgOiAmbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5Ob25Wb2xhdGlsZUxhc3RWYXJpYWJs ZU9mZnNldDsNCiAgICA+ICsgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAgPiArICAg IC8vDQogICAgPiArICAgIC8vIFRoZXJlJ3MgZW5vdWdoIGZyZWUgc3BhY2UgYXQgdGhlIHRhaWwg b2YgdmFyaWFibGUgc3RvcmFnZS4NCiAgICA+ICsgICAgLy8NCiAgICA+ICsNCiAgICA+ICsgICAg Ly8NCiAgICA+ICsgICAgLy8gSWYgbm9uLXZvbGF0aWxlIHZhcmlhYmxlIGlzIHByb3RlY3RlZCwg YSBzZXBhcmF0ZSB2YXJpYWJsZQ0KICAgID4gKE1ldGFEYXRhSG1hY1ZhcikNCiAgICA+ICsgICAg Ly8gaXMgYWx3YXlzIHVwZGF0ZWQgYWxvbmcgd2l0aCBjdXJyZW50IHVwZGF0aW5nIHZhcmlhYmxl LiBUaGUgYnVmZmVyIHBvaW50ZWQNCiAgICA+ICsgICAgLy8gYnkgTmV3VmFyaWFibGUgbXVzdCBo YXZlIHR3byB2YXJpYWJsZXMuIFRoZXkgc2hvdWxkIGJlIHdyaXR0ZW4gYXQgdGhpcw0KICAgID4g KyAgICAvLyB0aW1lIG9yZGVybHkuDQogICAgPiArICAgIC8vDQogICAgPiArICAgIE5leHRWYXJp YWJsZSAgICAgPSBOZXdWYXJpYWJsZTsNCiAgICA+ICsgICAgVXBkYXRpbmdWYXJpYWJsZSA9IE5V TEw7DQogICAgPiArICAgIFVwZGF0ZVNpemUgICAgICAgPSAwOw0KICAgID4gKyAgICB3aGlsZSAo ICAhRUZJX0VSUk9SIChTdGF0dXMpDQogICAgPiArICAgICAgICAgICYmICgoVUlOVE4pTmV4dFZh cmlhYmxlIC0gKFVJTlROKU5ld1ZhcmlhYmxlKSA8IFZhclNpemUpDQogICAgPiArICAgIHsNCiAg ICA+ICsgICAgICBVcGRhdGluZ1ZhcmlhYmxlID0gTmV4dFZhcmlhYmxlOw0KICAgID4gKyAgICAg IE5leHRWYXJpYWJsZSAgICAgPSBHZXROZXh0VmFyaWFibGVQdHIgKFVwZGF0aW5nVmFyaWFibGUs IFZhckdsb2JhbC0NCiAgICA+ID5BdXRoRm9ybWF0KTsNCiAgICA+ICsgICAgICBVcGRhdGVTaXpl ICAgICAgID0gKFVJTlROKU5leHRWYXJpYWJsZSAtIChVSU5UTilVcGRhdGluZ1ZhcmlhYmxlOw0K ICAgID4gKw0KICAgID4gKyAgICAgIFN0YXR1cyA9IFdyaXRlVmFyaWFibGUgKA0KICAgID4gKyAg ICAgICAgICAgICAgICAgVmFyU3RvcmVCYXNlLA0KICAgID4gKyAgICAgICAgICAgICAgICAgTGFz dFZhcmlhYmxlT2Zmc2V0LA0KICAgID4gKyAgICAgICAgICAgICAgICAgJlVwZGF0aW5nVmFyaWFi bGUsDQogICAgPiArICAgICAgICAgICAgICAgICAoVUlOVDMyKVVwZGF0ZVNpemUsDQogICAgPiAr ICAgICAgICAgICAgICAgICBWb2xhdGlsZUZsYWcsDQogICAgPiArICAgICAgICAgICAgICAgICBW YXJHbG9iYWwtPkF1dGhGb3JtYXQNCiAgICA+ICsgICAgICAgICAgICAgICAgICk7DQogICAgPiAr ICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgLy8gVXBkYXRpbmdWYXJp YWJsZSBtdXN0IHBvaW50IHRvIHRoZSBsYXN0IHdyaXR0ZW4gdmFyaWFibGUuIFJlc3RvcmUgaXQg dG8NCiAgICA+ICsgICAgLy8gdGhlIGZpcnN0IG9uZSBzbyB0aGF0IHdlIGNhbiBjYWxjdWxhdGUg dGhlIG9mZnNldCBpbiB2YXJpYWJsZSBzdG9yYWdlLg0KICAgID4gKyAgICAvLw0KICAgID4gKyAg ICBVcGRhdGluZ1ZhcmlhYmxlID0gKFZBUklBQkxFX0hFQURFUiAqKSgoVUlOVE4pVXBkYXRpbmdW YXJpYWJsZSArDQogICAgPiBVcGRhdGVTaXplDQogICAgPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0gVmFyU2l6ZSk7DQogICAgPiArICAgIGlmICgoQXR0cmli dXRlcyAmIEVGSV9WQVJJQUJMRV9IQVJEV0FSRV9FUlJPUl9SRUNPUkQpICE9IDApIHsNCiAgICA+ ICsgICAgICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPkh3RXJyVmFyaWFibGVUb3RhbFNpemUgKz0g VmFyU2l6ZTsNCiAgICA+ICsgICAgfSBlbHNlIHsNCiAgICA+ICsgICAgICBtVmFyaWFibGVNb2R1 bGVHbG9iYWwtPkNvbW1vblZhcmlhYmxlVG90YWxTaXplICs9IFZhclNpemU7DQogICAgPiArICAg ICAgaWYgKElzQ29tbW9uVXNlclZhcmlhYmxlKSB7DQogICAgPiArICAgICAgICBtVmFyaWFibGVN b2R1bGVHbG9iYWwtPkNvbW1vblVzZXJWYXJpYWJsZVRvdGFsU2l6ZSArPSBWYXJTaXplOw0KICAg ID4gKyAgICAgIH0NCiAgICA+ICsgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICAvLw0KICAgID4g KyAgICAvLyBNYXJrIHRoZSBvbGQgdmFyaWFibGUocykgYXMgZGVsZXRlZC4NCiAgICA+ICsgICAg Ly8NCiAgICA+ICsgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykgJiYgKFZhcmlhYmxlLT5DdXJy UHRyICE9IE5VTEwpKSB7DQogICAgPiArICAgICAgU3RhdHVzID0gRGVsZXRlVmFyaWFibGUgKA0K ICAgID4gKyAgICAgICAgICAgICAgICAgVmFyaWFibGVOYW1lLA0KICAgID4gKyAgICAgICAgICAg ICAgICAgVmVuZG9yR3VpZCwNCiAgICA+ICsgICAgICAgICAgICAgICAgIFZhcmlhYmxlLA0KICAg ID4gKyAgICAgICAgICAgICAgICAgQ2FjaGVWYXJpYWJsZSwNCiAgICA+ICsgICAgICAgICAgICAg ICAgIFZvbGF0aWxlRmxhZw0KICAgID4gKyAgICAgICAgICAgICAgICAgKTsNCiAgICA+ICsgICAg fQ0KICAgID4gKyAgfSBlbHNlIHsNCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgLy8gVGhlcmUn cyBub3QgZW5vdWdoIHNwYWNlIGF0IHRoZSB0YWlsIG9mIHZhcmlhYmxlIHN0b3JhZ2UgYnV0IHRo ZXJlJ3MNCiAgICA+ICsgICAgLy8gZW5vdWdoIGZyZWUgc3BhY2UgaG9sZXMgaW4gdGhlIHdob2xl IHN0b3JhZ2UuIFBlcmZvcm0gZ2FyYmFnZSBjb2xsZWN0aW9uDQogICAgPiArICAgIC8vICYgcmVj bGFpbSBvcGVyYXRpb24sIGFuZCBpbnRlZ3JhdGUgdGhlIG5ldyB2YXJpYWJsZSBhdCB0aGUgc2Ft ZSB0aW1lLg0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICBTdGF0dXMgPSBSZWNsYWltICgNCiAg ICA+ICsgICAgICAgICAgICAgICBWYXJTdG9yZUJhc2UsDQogICAgPiArICAgICAgICAgICAgICAg TGFzdFZhcmlhYmxlT2Zmc2V0LA0KICAgID4gKyAgICAgICAgICAgICAgIFZvbGF0aWxlRmxhZywN CiAgICA+ICsgICAgICAgICAgICAgICBWYXJpYWJsZSwNCiAgICA+ICsgICAgICAgICAgICAgICBO ZXdWYXJpYWJsZSwNCiAgICA+ICsgICAgICAgICAgICAgICBWYXJTaXplDQogICAgPiArICAgICAg ICAgICAgICAgKTsNCiAgICA+ICsNCiAgICA+ICsgICAgaWYgKFZhcmlhYmxlLT5DdXJyUHRyICE9 IE5VTEwpIHsNCiAgICA+ICsgICAgICBVcGRhdGluZ1ZhcmlhYmxlID0gVmFyaWFibGUtPkN1cnJQ dHI7DQogICAgPiArICAgIH0gZWxzZSB7DQogICAgPiArICAgICAgVXBkYXRpbmdWYXJpYWJsZSA9 IChWQVJJQUJMRV9IRUFERVIgKikoKChVSU5UTilWYXJTdG9yZUJhc2UgKw0KICAgID4gKkxhc3RW YXJpYWJsZU9mZnNldCkgLSBWYXJTaXplKTsNCiAgICA+ICsgICAgfQ0KICAgID4gKw0KICAgID4g KyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpICYmDQogICAgPiArICAgICAgICAoKEF0dHJpYnV0 ZXMgJiBFRklfVkFSSUFCTEVfSEFSRFdBUkVfRVJST1JfUkVDT1JEKSA9PSAwKSkNCiAgICA+ICsg ICAgew0KICAgID4gKyAgICAgIC8vDQogICAgPiArICAgICAgLy8gT3V0IG9mIHNwYWNlLg0KICAg ID4gKyAgICAgIC8vDQogICAgPiArICAgICAgSXNDb21tb25Vc2VyVmFyaWFibGUgPSBJc1VzZXJW YXJpYWJsZSAoTmV3VmFyaWFibGUpOw0KICAgID4gKyAgICAgIElzQ29tbW9uVmFyaWFibGUgICAg ID0gVFJVRTsNCiAgICA+ICsNCiAgICA+ICsgICAgICBpZiAoSXNDb21tb25Vc2VyVmFyaWFibGUg JiYNCiAgICA+ICsgICAgICAgICAgKChWYXJTaXplICsgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5D b21tb25Vc2VyVmFyaWFibGVUb3RhbFNpemUpDQogICAgPiArICAgICAgICAgICA+IG1WYXJpYWJs ZU1vZHVsZUdsb2JhbC0+Q29tbW9uTWF4VXNlclZhcmlhYmxlU3BhY2UpKQ0KICAgID4gKyAgICAg IHsNCiAgICA+ICsgICAgICAgIFJlY29yZFZhckVycm9yRmxhZyAoDQogICAgPiArICAgICAgICAg IFZBUl9FUlJPUl9GTEFHX1VTRVJfRVJST1IsDQogICAgPiArICAgICAgICAgIFZhcmlhYmxlTmFt ZSwNCiAgICA+ICsgICAgICAgICAgVmVuZG9yR3VpZCwNCiAgICA+ICsgICAgICAgICAgQXR0cmli dXRlcywNCiAgICA+ICsgICAgICAgICAgVmFyU2l6ZQ0KICAgID4gKyAgICAgICAgICApOw0KICAg ID4gKyAgICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgICBpZiAoSXNDb21tb25WYXJpYWJsZSAm Jg0KICAgID4gKyAgICAgICAgICAoKFZhclNpemUgKyBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPkNv bW1vblZhcmlhYmxlVG90YWxTaXplKQ0KICAgID4gKyAgICAgICAgICAgPiBtVmFyaWFibGVNb2R1 bGVHbG9iYWwtPkNvbW1vblZhcmlhYmxlU3BhY2UpKQ0KICAgID4gKyAgICAgIHsNCiAgICA+ICsg ICAgICAgIFJlY29yZFZhckVycm9yRmxhZyAoDQogICAgPiArICAgICAgICAgIFZBUl9FUlJPUl9G TEFHX1NZU1RFTV9FUlJPUiwNCiAgICA+ICsgICAgICAgICAgVmFyaWFibGVOYW1lLA0KICAgID4g KyAgICAgICAgICBWZW5kb3JHdWlkLA0KICAgID4gKyAgICAgICAgICBBdHRyaWJ1dGVzLA0KICAg ID4gKyAgICAgICAgICBWYXJTaXplDQogICAgPiArICAgICAgICAgICk7DQogICAgPiArICAgICAg fQ0KICAgID4gKyAgICB9DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArRG9uZToNCiAgICA+ ICsgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAgPiArICAgIGlmICghVm9sYXRpbGVG bGFnKSB7DQogICAgPiArICAgICAgT2Zmc2V0ID0gKFVwZGF0aW5nVmFyaWFibGUgIT0gTlVMTCkg PyAoVUlOVE4pVXBkYXRpbmdWYXJpYWJsZSAtDQogICAgPiAoVUlOVE4pVmFyU3RvcmVCYXNlDQog ICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwOw0KICAg ID4gKyAgICAgIFN0YXR1cyA9IFByb3RlY3RlZFZhcmlhYmxlTGliV3JpdGVGaW5hbCAoDQogICAg PiArICAgICAgICAgICAgICAgICBOZXdWYXJpYWJsZSwNCiAgICA+ICsgICAgICAgICAgICAgICAg IFZhclNpemUsDQogICAgPiArICAgICAgICAgICAgICAgICBPZmZzZXQNCiAgICA+ICsgICAgICAg ICAgICAgICAgICk7DQogICAgPiArICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSAmJiAoU3Rh dHVzICE9IEVGSV9VTlNVUFBPUlRFRCkpIHsNCiAgICA+ICsgICAgICAgIHJldHVybiBTdGF0dXM7 DQogICAgPiArICAgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICAgIFN0YXR1cyA9IEVGSV9TVUND RVNTOw0KICAgID4gKyAgICB9DQogICAgPiArDQogICAgPiArICAgIFVwZGF0ZVZhcmlhYmxlSW5m byAoDQogICAgPiArICAgICAgVmFyaWFibGVOYW1lLA0KICAgID4gKyAgICAgIFZlbmRvckd1aWQs DQogICAgPiArICAgICAgVm9sYXRpbGVGbGFnLA0KICAgID4gKyAgICAgIEZBTFNFLA0KICAgID4g KyAgICAgIFRSVUUsDQogICAgPiArICAgICAgRkFMU0UsDQogICAgPiArICAgICAgRkFMU0UsDQog ICAgPiArICAgICAgJmdWYXJpYWJsZUluZm8NCiAgICA+ICsgICAgICApOw0KICAgID4gKyAgICAv Lw0KICAgID4gKyAgICAvLyBIT0IgY29weSBvZiB0aGUgc2FtZSB2YXJpYWJsZSBpcyBubyBsb25n ZXIgbmVlZGVkLCBubyBtYXR0ZXIgaXQgaGFzDQogICAgPiArICAgIC8vIGJlZW4gZGVsZXRlZCwg dXBkYXRlZCBvciBhZGRlZCBmcm9tL3RvIHJlYWwgdmFyaWFibGUgc3RvcmFnZS4NCiAgICA+ICsg ICAgLy8NCiAgICA+ICsgICAgaWYgKEhvYlZhck9ubHlGbGFnIHx8ICFWb2xhdGlsZUZsYWcpIHsN CiAgICA+ICsgICAgICBGbHVzaEhvYlZhcmlhYmxlVG9GbGFzaCAoVmFyaWFibGVOYW1lLCBWZW5k b3JHdWlkKTsNCiAgICA+ICsgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICBpZiAoIVZvbGF0aWxl RmxhZykgew0KICAgID4gKyAgICAgIFZvbGF0aWxlQ2FjaGVJbnN0YW5jZSA9ICYoVmFyR2xvYmFs LQ0KICAgID4gPlZhcmlhYmxlUnVudGltZUNhY2hlQ29udGV4dC5WYXJpYWJsZVJ1bnRpbWVOdkNh Y2hlKTsNCiAgICA+ICsgICAgfSBlbHNlIHsNCiAgICA+ICsgICAgICBWb2xhdGlsZUNhY2hlSW5z dGFuY2UgPSAmKFZhckdsb2JhbC0NCiAgICA+ID5WYXJpYWJsZVJ1bnRpbWVDYWNoZUNvbnRleHQu VmFyaWFibGVSdW50aW1lVm9sYXRpbGVDYWNoZSk7DQogICAgPiArICAgIH0NCiAgICA+ICsNCiAg ICA+ICsgICAgaWYgKFZvbGF0aWxlQ2FjaGVJbnN0YW5jZS0+U3RvcmUgIT0gTlVMTCkgew0KICAg ID4gKyAgICAgIFN0YXR1cyA9ICBTeW5jaHJvbml6ZVJ1bnRpbWVWYXJpYWJsZUNhY2hlICgNCiAg ICA+ICsgICAgICAgICAgICAgICAgICBWb2xhdGlsZUNhY2hlSW5zdGFuY2UsDQogICAgPiArICAg ICAgICAgICAgICAgICAgMCwNCiAgICA+ICsgICAgICAgICAgICAgICAgICBWb2xhdGlsZUNhY2hl SW5zdGFuY2UtPlN0b3JlLT5TaXplDQogICAgPiArICAgICAgICAgICAgICAgICAgKTsNCiAgICA+ ICsgICAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KICAgID4gKyAgICB9DQogICAgPiAr ICB9IGVsc2UgaWYgKFN0YXR1cyA9PSBFRklfQUxSRUFEWV9TVEFSVEVEKSB7DQogICAgPiArICAg IC8vDQogICAgPiArICAgIC8vIE1lYW5pbmcgbm90aGluZyBuZWVkcyB0byBiZSBkb25lLiBKdXN0 IHJldHVybiBzdWNjZXNzLg0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICBTdGF0dXMgPSBFRklf U1VDQ0VTUzsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIHJldHVybiBTdGF0dXM7DQog ICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKw0KICAgID4gKyAgVGhpcyBjb2Rl IGZpbmRzIHZhcmlhYmxlIGluIHN0b3JhZ2UgYmxvY2tzIChWb2xhdGlsZSBvciBOb24tVm9sYXRp bGUpLg0KICAgID4gKw0KICAgID4gKyAgQ2F1dGlvbjogVGhpcyBmdW5jdGlvbiBtYXkgcmVjZWl2 ZSB1bnRydXN0ZWQgaW5wdXQuDQogICAgPiArICBUaGlzIGZ1bmN0aW9uIG1heSBiZSBpbnZva2Vk IGluIFNNTSBtb2RlLCBhbmQgZGF0YXNpemUgaXMgZXh0ZXJuYWwgaW5wdXQuDQogICAgPiArICBU aGlzIGZ1bmN0aW9uIHdpbGwgZG8gYmFzaWMgdmFsaWRhdGlvbiwgYmVmb3JlIHBhcnNlIHRoZSBk YXRhLg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtIFZhcmlhYmxlTmFtZSAgICAgICAgICAgICAg IE5hbWUgb2YgVmFyaWFibGUgdG8gYmUgZm91bmQuDQogICAgPiArICBAcGFyYW0gVmVuZG9yR3Vp ZCAgICAgICAgICAgICAgICAgVmFyaWFibGUgdmVuZG9yIEdVSUQuDQogICAgPiArICBAcGFyYW0g QXR0cmlidXRlcyAgICAgICAgICAgICAgICAgQXR0cmlidXRlIHZhbHVlIG9mIHRoZSB2YXJpYWJs ZSBmb3VuZC4NCiAgICA+ICsgIEBwYXJhbSBEYXRhU2l6ZSAgICAgICAgICAgICAgICAgICBTaXpl IG9mIERhdGEgZm91bmQuIElmIHNpemUgaXMgbGVzcyB0aGFuIHRoZQ0KICAgID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIHRoaXMgdmFsdWUgY29udGFpbnMgdGhl IHJlcXVpcmVkIHNpemUuDQogICAgPiArICBAcGFyYW0gRGF0YSAgICAgICAgICAgICAgICAgICAg ICAgVGhlIGJ1ZmZlciB0byByZXR1cm4gdGhlIGNvbnRlbnRzIG9mIHRoZSB2YXJpYWJsZS4NCiAg ICA+IE1heSBiZSBOVUxMDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgd2l0aCBhIHplcm8gRGF0YVNpemUgaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIHRoZSBzaXplIGJ1 ZmZlcg0KICAgID4gbmVlZGVkLg0KICAgID4gKw0KICAgID4gKyAgQHJldHVybiBFRklfSU5WQUxJ RF9QQVJBTUVURVIgICAgIEludmFsaWQgcGFyYW1ldGVyLg0KICAgID4gKyAgQHJldHVybiBFRklf U1VDQ0VTUyAgICAgICAgICAgICAgIEZpbmQgdGhlIHNwZWNpZmllZCB2YXJpYWJsZS4NCiAgICA+ ICsgIEByZXR1cm4gRUZJX05PVF9GT1VORCAgICAgICAgICAgICBOb3QgZm91bmQuDQogICAgPiAr ICBAcmV0dXJuIEVGSV9CVUZGRVJfVE9fU01BTEwgICAgICAgRGF0YVNpemUgaXMgdG9vIHNtYWxs IGZvciB0aGUgcmVzdWx0Lg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK0VGSV9TVEFUVVMN CiAgICA+ICtFRklBUEkNCiAgICA+ICtWYXJpYWJsZVNlcnZpY2VHZXRWYXJpYWJsZSAoDQogICAg PiArICBJTiAgICAgIENIQVIxNiAgICAqVmFyaWFibGVOYW1lLA0KICAgID4gKyAgSU4gICAgICBF RklfR1VJRCAgKlZlbmRvckd1aWQsDQogICAgPiArICBPVVQgICAgIFVJTlQzMiAgICAqQXR0cmli dXRlcyBPUFRJT05BTCwNCiAgICA+ICsgIElOIE9VVCAgVUlOVE4gICAgICpEYXRhU2l6ZSwNCiAg ICA+ICsgIE9VVCAgICAgVk9JRCAgICAgICpEYXRhIE9QVElPTkFMDQogICAgPiArICApDQogICAg PiArew0KICAgID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgU3RhdHVzOw0KICAgID4gKyAg VkFSSUFCTEVfUE9JTlRFUl9UUkFDSyAgVmFyaWFibGU7DQogICAgPiArDQogICAgPiArICBpZiAo KFZhcmlhYmxlTmFtZSA9PSBOVUxMKSB8fCAoVmVuZG9yR3VpZCA9PSBOVUxMKSB8fCAoRGF0YVNp emUgPT0gTlVMTCkpIHsNCiAgICA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsN CiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIGlmIChWYXJpYWJsZU5hbWVbMF0gPT0gMCkg ew0KICAgID4gKyAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCiAgICA+ICsgIH0NCiAgICA+ICsN CiAgICA+ICsgIEFjcXVpcmVMb2NrT25seUF0Qm9vdFRpbWUgKCZtVmFyaWFibGVNb2R1bGVHbG9i YWwtDQogICAgPiA+VmFyaWFibGVHbG9iYWwuVmFyaWFibGVTZXJ2aWNlc0xvY2spOw0KICAgID4g Kw0KICAgID4gKyAgU3RhdHVzID0gRmluZFZhcmlhYmxlIChWYXJpYWJsZU5hbWUsIFZlbmRvckd1 aWQsICZWYXJpYWJsZSwNCiAgICA+ICZtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xv YmFsLCBGQUxTRSk7DQogICAgPiArICBpZiAoKFZhcmlhYmxlLkN1cnJQdHIgPT0gTlVMTCkgfHwg RUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAgPiArICAgIGdvdG8gRG9uZTsNCiAgICA+ICsgIH0N CiAgICA+ICsNCiAgICA+ICsgIC8vDQogICAgPiArICAvLyBHZXQgZGF0YSBhbmQgaXRzIHNpemUN CiAgICA+ICsgIC8vDQogICAgPiArICBpZiAoIVZhcmlhYmxlLlZvbGF0aWxlKSB7DQogICAgPiAr ICAgIC8vDQogICAgPiArICAgIC8vIEN1cnJlbnRseSBvbmx5IG5vbi12b2xhdGlsZSB2YXJpYWJs ZSBuZWVkcyBwcm90ZWN0aW9uLg0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICBTdGF0dXMgPSBQ cm90ZWN0ZWRWYXJpYWJsZUxpYkdldEJ5QnVmZmVyICgNCiAgICA+ICsgICAgICAgICAgICAgICBW YXJpYWJsZS5DdXJyUHRyLA0KICAgID4gKyAgICAgICAgICAgICAgIERhdGEsDQogICAgPiArICAg ICAgICAgICAgICAgKFVJTlQzMiAqKURhdGFTaXplLA0KICAgID4gKyAgICAgICAgICAgICAgIG1W YXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdA0KICAgID4gKyAg ICAgICAgICAgICAgICk7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICBpZiAoVmFyaWFi bGUuVm9sYXRpbGUgfHwgKFN0YXR1cyA9PSBFRklfVU5TVVBQT1JURUQpKSB7DQogICAgPiArICAg IFN0YXR1cyA9IEdldFZhcmlhYmxlRGF0YSAoVmFyaWFibGUuQ3VyclB0ciwgRGF0YSwgKFVJTlQz MiAqKURhdGFTaXplLA0KICAgID4gbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2Jh bC5BdXRoRm9ybWF0KTsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIGlmICghRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQogICAgPiArICAgIFVwZGF0ZVZhcmlhYmxlSW5mbyAoVmFyaWFibGVO YW1lLCBWZW5kb3JHdWlkLCBWYXJpYWJsZS5Wb2xhdGlsZSwgVFJVRSwNCiAgICA+IEZBTFNFLCBG QUxTRSwgRkFMU0UsICZnVmFyaWFibGVJbmZvKTsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ ICtEb25lOg0KICAgID4gKyAgaWYgKChTdGF0dXMgPT0gRUZJX1NVQ0NFU1MpIHx8IChTdGF0dXMg PT0gRUZJX0JVRkZFUl9UT09fU01BTEwpKSB7DQogICAgPiArICAgIGlmICgoQXR0cmlidXRlcyAh PSBOVUxMKSAmJiAoVmFyaWFibGUuQ3VyclB0ciAhPSBOVUxMKSkgew0KICAgID4gKyAgICAgICpB dHRyaWJ1dGVzID0gVmFyaWFibGUuQ3VyclB0ci0+QXR0cmlidXRlczsNCiAgICA+ICsgICAgfQ0K ICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgUmVsZWFzZUxvY2tPbmx5QXRCb290VGltZSAo Jm1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCiAgICA+ID5WYXJpYWJsZUdsb2JhbC5WYXJpYWJsZVNl cnZpY2VzTG9jayk7DQogICAgPiArICByZXR1cm4gU3RhdHVzOw0KICAgID4gK30NCiAgICA+ICsN CiAgICA+ICsvKioNCiAgICA+ICsNCiAgICA+ICsgIFRoaXMgY29kZSBGaW5kcyB0aGUgTmV4dCBh dmFpbGFibGUgdmFyaWFibGUuDQogICAgPiArDQogICAgPiArICBDYXV0aW9uOiBUaGlzIGZ1bmN0 aW9uIG1heSByZWNlaXZlIHVudHJ1c3RlZCBpbnB1dC4NCiAgICA+ICsgIFRoaXMgZnVuY3Rpb24g bWF5IGJlIGludm9rZWQgaW4gU01NIG1vZGUuIFRoaXMgZnVuY3Rpb24gd2lsbCBkbyBiYXNpYw0K ICAgID4gdmFsaWRhdGlvbiwgYmVmb3JlIHBhcnNlIHRoZSBkYXRhLg0KICAgID4gKw0KICAgID4g KyAgQHBhcmFtIFZhcmlhYmxlTmFtZVNpemUgICAgICAgICAgIFRoZSBzaXplIG9mIHRoZSBWYXJp YWJsZU5hbWUgYnVmZmVyLiBUaGUNCiAgICA+IHNpemUgbXVzdCBiZSBsYXJnZQ0KICAgID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVub3VnaCB0byBmaXQgaW5wdXQgc3Ry aW5nIHN1cHBsaWVkIGluIFZhcmlhYmxlTmFtZSBidWZmZXIuDQogICAgPiArICBAcGFyYW0gVmFy aWFibGVOYW1lICAgICAgICAgICAgICAgUG9pbnRlciB0byB2YXJpYWJsZSBuYW1lLg0KICAgID4g KyAgQHBhcmFtIFZlbmRvckd1aWQgICAgICAgICAgICAgICAgIFZhcmlhYmxlIFZlbmRvciBHdWlk Lg0KICAgID4gKw0KICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgIFRo ZSBmdW5jdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Lg0KICAgID4gKyAgQHJldHZhbCBFRklf Tk9UX0ZPVU5EICAgICAgICAgICAgIFRoZSBuZXh0IHZhcmlhYmxlIHdhcyBub3QgZm91bmQuDQog ICAgPiArICBAcmV0dmFsIEVGSV9CVUZGRVJfVE9PX1NNQUxMICAgICAgVGhlIFZhcmlhYmxlTmFt ZVNpemUgaXMgdG9vIHNtYWxsIGZvcg0KICAgID4gdGhlIHJlc3VsdC4NCiAgICA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZU5hbWVTaXplIGhhcyBiZWVuIHVw ZGF0ZWQgd2l0aCB0aGUgc2l6ZSBuZWVkZWQNCiAgICA+IHRvIGNvbXBsZXRlIHRoZSByZXF1ZXN0 Lg0KICAgID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICAgIFZhcmlhYmxlTmFt ZVNpemUgaXMgTlVMTC4NCiAgICA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICAg ICBWYXJpYWJsZU5hbWUgaXMgTlVMTC4NCiAgICA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFS QU1FVEVSICAgICBWZW5kb3JHdWlkIGlzIE5VTEwuDQogICAgPiArICBAcmV0dmFsIEVGSV9JTlZB TElEX1BBUkFNRVRFUiAgICAgVGhlIGlucHV0IHZhbHVlcyBvZiBWYXJpYWJsZU5hbWUgYW5kDQog ICAgPiBWZW5kb3JHdWlkIGFyZSBub3QgYSBuYW1lIGFuZA0KICAgID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdVSUQgb2YgYW4gZXhpc3RpbmcgdmFyaWFibGUuDQogICAg PiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgICAgTnVsbC10ZXJtaW5hdG9yIGlz IG5vdCBmb3VuZCBpbiB0aGUgZmlyc3QNCiAgICA+IFZhcmlhYmxlTmFtZVNpemUgYnl0ZXMgb2YN CiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5wdXQgVmFy aWFibGVOYW1lIGJ1ZmZlci4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtFRklfU1RBVFVT DQogICAgPiArRUZJQVBJDQogICAgPiArVmFyaWFibGVTZXJ2aWNlR2V0TmV4dFZhcmlhYmxlTmFt ZSAoDQogICAgPiArICBJTiBPVVQgIFVJTlROICAgICAqVmFyaWFibGVOYW1lU2l6ZSwNCiAgICA+ ICsgIElOIE9VVCAgQ0hBUjE2ICAgICpWYXJpYWJsZU5hbWUsDQogICAgPiArICBJTiBPVVQgIEVG SV9HVUlEICAqVmVuZG9yR3VpZA0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIEVGSV9T VEFUVVMgICAgICAgICAgICAgU3RhdHVzOw0KICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAg ICBNYXhMZW47DQogICAgPiArICBVSU5UTiAgICAgICAgICAgICAgICAgIFZhck5hbWVTaXplOw0K ICAgID4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICBBdXRoRm9ybWF0Ow0KICAgID4gKyAgVkFS SUFCTEVfSEVBREVSICAgICAgICAqVmFyaWFibGVQdHI7DQogICAgPiArICBWQVJJQUJMRV9TVE9S RV9IRUFERVIgICpWYXJpYWJsZVN0b3JlSGVhZGVyW1ZhcmlhYmxlU3RvcmVUeXBlTWF4XTsNCiAg ICA+ICsNCiAgICA+ICsgIGlmICgoVmFyaWFibGVOYW1lU2l6ZSA9PSBOVUxMKSB8fCAoVmFyaWFi bGVOYW1lID09IE5VTEwpIHx8IChWZW5kb3JHdWlkID09DQogICAgPiBOVUxMKSkgew0KICAgID4g KyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KICAgID4gKyAgfQ0KICAgID4gKw0K ICAgID4gKyAgQXV0aEZvcm1hdCA9IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9i YWwuQXV0aEZvcm1hdDsNCiAgICA+ICsNCiAgICA+ICsgIC8vDQogICAgPiArICAvLyBDYWxjdWxh dGUgdGhlIHBvc3NpYmxlIG1heGltdW0gbGVuZ3RoIG9mIG5hbWUgc3RyaW5nLCBpbmNsdWRpbmcg dGhlIE51bGwNCiAgICA+IHRlcm1pbmF0b3IuDQogICAgPiArICAvLw0KICAgID4gKyAgTWF4TGVu ID0gKlZhcmlhYmxlTmFtZVNpemUgLyBzaXplb2YgKENIQVIxNik7DQogICAgPiArICBpZiAoKE1h eExlbiA9PSAwKSB8fCAoU3RybkxlblMgKFZhcmlhYmxlTmFtZSwgTWF4TGVuKSA9PSBNYXhMZW4p KSB7DQogICAgPiArICAgIC8vDQogICAgPiArICAgIC8vIE51bGwtdGVybWluYXRvciBpcyBub3Qg Zm91bmQgaW4gdGhlIGZpcnN0IFZhcmlhYmxlTmFtZVNpemUgYnl0ZXMgb2YgdGhlDQogICAgPiBp bnB1dCBWYXJpYWJsZU5hbWUgYnVmZmVyLA0KICAgID4gKyAgICAvLyBmb2xsb3cgc3BlYyB0byBy ZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSLg0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICBy ZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4g KyAgQWNxdWlyZUxvY2tPbmx5QXRCb290VGltZSAoJm1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCiAg ICA+ID5WYXJpYWJsZUdsb2JhbC5WYXJpYWJsZVNlcnZpY2VzTG9jayk7DQogICAgPiArDQogICAg PiArICAvLw0KICAgID4gKyAgLy8gMDogVm9sYXRpbGUsIDE6IEhPQiwgMjogTm9uLVZvbGF0aWxl Lg0KICAgID4gKyAgLy8gVGhlIGluZGV4IGFuZCBhdHRyaWJ1dGVzIG1hcHBpbmcgbXVzdCBiZSBr ZXB0IGluIHRoaXMgb3JkZXIgYXMgRmluZFZhcmlhYmxlDQogICAgPiArICAvLyBtYWtlcyB1c2Ug b2YgdGhpcyBtYXBwaW5nIHRvIGltcGxlbWVudCBzZWFyY2ggYWxnb3JpdGhtLg0KICAgID4gKyAg Ly8NCiAgICA+ICsgIFZhcmlhYmxlU3RvcmVIZWFkZXJbVmFyaWFibGVTdG9yZVR5cGVWb2xhdGls ZV0gPQ0KICAgID4gKFZBUklBQkxFX1NUT1JFX0hFQURFUiAqKShVSU5UTiltVmFyaWFibGVNb2R1 bGVHbG9iYWwtDQogICAgPiA+VmFyaWFibGVHbG9iYWwuVm9sYXRpbGVWYXJpYWJsZUJhc2U7DQog ICAgPiArICBWYXJpYWJsZVN0b3JlSGVhZGVyW1ZhcmlhYmxlU3RvcmVUeXBlSG9iXSAgICAgID0g KFZBUklBQkxFX1NUT1JFX0hFQURFUg0KICAgID4gKikoVUlOVE4pbVZhcmlhYmxlTW9kdWxlR2xv YmFsLT5WYXJpYWJsZUdsb2JhbC5Ib2JWYXJpYWJsZUJhc2U7DQogICAgPiArICBWYXJpYWJsZVN0 b3JlSGVhZGVyW1ZhcmlhYmxlU3RvcmVUeXBlTnZdICAgICAgID0gbU52VmFyaWFibGVDYWNoZTsN CiAgICA+ICsNCiAgICA+ICsgIFN0YXR1cyA9ICBWYXJpYWJsZVNlcnZpY2VHZXROZXh0VmFyaWFi bGVJbnRlcm5hbCAoDQogICAgPiArICAgICAgICAgICAgICBWYXJpYWJsZU5hbWUsDQogICAgPiAr ICAgICAgICAgICAgICBWZW5kb3JHdWlkLA0KICAgID4gKyAgICAgICAgICAgICAgVmFyaWFibGVT dG9yZUhlYWRlciwNCiAgICA+ICsgICAgICAgICAgICAgICZWYXJpYWJsZVB0ciwNCiAgICA+ICsg ICAgICAgICAgICAgIEF1dGhGb3JtYXQNCiAgICA+ICsgICAgICAgICAgICAgICk7DQogICAgPiAr ICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgID4gKyAgICBWYXJOYW1lU2l6ZSA9IE5h bWVTaXplT2ZWYXJpYWJsZSAoVmFyaWFibGVQdHIsIEF1dGhGb3JtYXQpOw0KICAgID4gKyAgICBB U1NFUlQgKFZhck5hbWVTaXplICE9IDApOw0KICAgID4gKyAgICBpZiAoVmFyTmFtZVNpemUgPD0g KlZhcmlhYmxlTmFtZVNpemUpIHsNCiAgICA+ICsgICAgICBDb3B5TWVtICgNCiAgICA+ICsgICAg ICAgIFZhcmlhYmxlTmFtZSwNCiAgICA+ICsgICAgICAgIEdldFZhcmlhYmxlTmFtZVB0ciAoVmFy aWFibGVQdHIsIEF1dGhGb3JtYXQpLA0KICAgID4gKyAgICAgICAgVmFyTmFtZVNpemUNCiAgICA+ ICsgICAgICAgICk7DQogICAgPiArICAgICAgQ29weU1lbSAoDQogICAgPiArICAgICAgICBWZW5k b3JHdWlkLA0KICAgID4gKyAgICAgICAgR2V0VmVuZG9yR3VpZFB0ciAoVmFyaWFibGVQdHIsIEF1 dGhGb3JtYXQpLA0KICAgID4gKyAgICAgICAgc2l6ZW9mIChFRklfR1VJRCkNCiAgICA+ICsgICAg ICAgICk7DQogICAgPiArICAgICAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQogICAgPiArICAgIH0g ZWxzZSB7DQogICAgPiArICAgICAgU3RhdHVzID0gRUZJX0JVRkZFUl9UT09fU01BTEw7DQogICAg PiArICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgKlZhcmlhYmxlTmFtZVNpemUgPSBWYXJOYW1l U2l6ZTsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIFJlbGVhc2VMb2NrT25seUF0Qm9v dFRpbWUgKCZtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQogICAgPiA+VmFyaWFibGVHbG9iYWwuVmFy aWFibGVTZXJ2aWNlc0xvY2spOw0KICAgID4gKyAgcmV0dXJuIFN0YXR1czsNCiAgICA+ICt9DQog ICAgPiArDQogICAgPiArLyoqDQogICAgPiArDQogICAgPiArICBUaGlzIGNvZGUgc2V0cyB2YXJp YWJsZSBpbiBzdG9yYWdlIGJsb2NrcyAoVm9sYXRpbGUgb3IgTm9uLVZvbGF0aWxlKS4NCiAgICA+ ICsNCiAgICA+ICsgIENhdXRpb246IFRoaXMgZnVuY3Rpb24gbWF5IHJlY2VpdmUgdW50cnVzdGVk IGlucHV0Lg0KICAgID4gKyAgVGhpcyBmdW5jdGlvbiBtYXkgYmUgaW52b2tlZCBpbiBTTU0gbW9k ZSwgYW5kIGRhdGFzaXplIGFuZCBkYXRhIGFyZQ0KICAgID4gZXh0ZXJuYWwgaW5wdXQuDQogICAg PiArICBUaGlzIGZ1bmN0aW9uIHdpbGwgZG8gYmFzaWMgdmFsaWRhdGlvbiwgYmVmb3JlIHBhcnNl IHRoZSBkYXRhLg0KICAgID4gKyAgVGhpcyBmdW5jdGlvbiB3aWxsIHBhcnNlIHRoZSBhdXRoZW50 aWNhdGlvbiBjYXJlZnVsbHkgdG8gYXZvaWQgc2VjdXJpdHkgaXNzdWVzLA0KICAgID4gbGlrZQ0K ICAgID4gKyAgYnVmZmVyIG92ZXJmbG93LCBpbnRlZ2VyIG92ZXJmbG93Lg0KICAgID4gKyAgVGhp cyBmdW5jdGlvbiB3aWxsIGNoZWNrIGF0dHJpYnV0ZSBjYXJlZnVsbHkgdG8gYXZvaWQgYXV0aGVu dGljYXRpb24gYnlwYXNzLg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtIFZhcmlhYmxlTmFtZSAg ICAgICAgICAgICAgICAgICAgIE5hbWUgb2YgVmFyaWFibGUgdG8gYmUgZm91bmQuDQogICAgPiAr ICBAcGFyYW0gVmVuZG9yR3VpZCAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUgdmVuZG9y IEdVSUQuDQogICAgPiArICBAcGFyYW0gQXR0cmlidXRlcyAgICAgICAgICAgICAgICAgICAgICAg QXR0cmlidXRlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBmb3VuZA0KICAgID4gKyAgQHBhcmFtIERh dGFTaXplICAgICAgICAgICAgICAgICAgICAgICAgIFNpemUgb2YgRGF0YSBmb3VuZC4gSWYgc2l6 ZSBpcyBsZXNzIHRoYW4gdGhlDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGF0YSwgdGhpcyB2YWx1ZSBjb250YWlucyB0aGUgcmVxdWlyZWQgc2l6ZS4N CiAgICA+ICsgIEBwYXJhbSBEYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIHBv aW50ZXIuDQogICAgPiArDQogICAgPiArICBAcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAg ICAgICAgICAgSW52YWxpZCBwYXJhbWV0ZXIuDQogICAgPiArICBAcmV0dXJuIEVGSV9TVUNDRVNT ICAgICAgICAgICAgICAgICAgICAgU2V0IHN1Y2Nlc3NmdWxseS4NCiAgICA+ICsgIEByZXR1cm4g RUZJX09VVF9PRl9SRVNPVVJDRVMgICAgICAgICAgICBSZXNvdXJjZSBub3QgZW5vdWdoIHRvIHNl dCB2YXJpYWJsZS4NCiAgICA+ICsgIEByZXR1cm4gRUZJX05PVF9GT1VORCAgICAgICAgICAgICAg ICAgICBOb3QgZm91bmQuDQogICAgPiArICBAcmV0dXJuIEVGSV9XUklURV9QUk9URUNURUQgICAg ICAgICAgICAgVmFyaWFibGUgaXMgcmVhZC1vbmx5Lg0KICAgID4gKw0KICAgID4gKyoqLw0KICAg ID4gK0VGSV9TVEFUVVMNCiAgICA+ICtFRklBUEkNCiAgICA+ICtWYXJpYWJsZVNlcnZpY2VTZXRW YXJpYWJsZSAoDQogICAgPiArICBJTiBDSEFSMTYgICAgKlZhcmlhYmxlTmFtZSwNCiAgICA+ICsg IElOIEVGSV9HVUlEICAqVmVuZG9yR3VpZCwNCiAgICA+ICsgIElOIFVJTlQzMiAgICBBdHRyaWJ1 dGVzLA0KICAgID4gKyAgSU4gVUlOVE4gICAgIERhdGFTaXplLA0KICAgID4gKyAgSU4gVk9JRCAg ICAgICpEYXRhDQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgVkFSSUFCTEVfUE9JTlRF Ul9UUkFDSyAgVmFyaWFibGU7DQogICAgPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICBTdGF0 dXM7DQogICAgPiArICBWQVJJQUJMRV9IRUFERVIgICAgICAgICAqTmV4dFZhcmlhYmxlOw0KICAg ID4gKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgUG9pbnQ7DQogICAgPiArICBVSU5UTiAgICAg ICAgICAgICAgICAgICBQYXlsb2FkU2l6ZTsNCiAgICA+ICsgIEJPT0xFQU4gICAgICAgICAgICAg ICAgIEF1dGhGb3JtYXQ7DQogICAgPiArDQogICAgPiArICBBdXRoRm9ybWF0ID0gbVZhcmlhYmxl TW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0Ow0KICAgID4gKw0KICAgID4g KyAgLy8NCiAgICA+ICsgIC8vIENoZWNrIGlucHV0IHBhcmFtZXRlcnMuDQogICAgPiArICAvLw0K ICAgID4gKyAgaWYgKChWYXJpYWJsZU5hbWUgPT0gTlVMTCkgfHwgKFZhcmlhYmxlTmFtZVswXSA9 PSAwKSB8fCAoVmVuZG9yR3VpZCA9PQ0KICAgID4gTlVMTCkpIHsNCiAgICA+ICsgICAgcmV0dXJu IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIGlm ICgoRGF0YVNpemUgIT0gMCkgJiYgKERhdGEgPT0gTlVMTCkpIHsNCiAgICA+ICsgICAgcmV0dXJu IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIC8v DQogICAgPiArICAvLyBDaGVjayBmb3IgcmVzZXJ2ZXJkIGJpdCBpbiB2YXJpYWJsZSBhdHRyaWJ1 dGUuDQogICAgPiArICAvLyBFRklfVkFSSUFCTEVfQVVUSEVOVElDQVRFRF9XUklURV9BQ0NFU1Mg aXMgZGVwcmVjYXRlZCBidXQgd2Ugc3RpbGwNCiAgICA+IGFsbG93DQogICAgPiArICAvLyB0aGUg ZGVsZXRlIG9wZXJhdGlvbiBvZiBjb21tb24gYXV0aGVudGljYXRlZCB2YXJpYWJsZSBhdCB1c2Vy IHBoeXNpY2FsDQogICAgPiBwcmVzZW5jZS4NCiAgICA+ICsgIC8vIFNvIGxlYXZlIEVGSV9WQVJJ QUJMRV9BVVRIRU5USUNBVEVEX1dSSVRFX0FDQ0VTUyBhdHRyaWJ1dGUgY2hlY2sNCiAgICA+IHRv IEF1dGhWYXJpYWJsZUxpYg0KICAgID4gKyAgLy8NCiAgICA+ICsgIGlmICgoQXR0cmlidXRlcyAm ICh+KEVGSV9WQVJJQUJMRV9BVFRSSUJVVEVTX01BU0sgfA0KICAgID4gRUZJX1ZBUklBQkxFX0FV VEhFTlRJQ0FURURfV1JJVEVfQUNDRVNTKSkpICE9IDApIHsNCiAgICA+ICsgICAgcmV0dXJuIEVG SV9JTlZBTElEX1BBUkFNRVRFUjsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIC8vDQog ICAgPiArICAvLyBDaGVjayBpZiB0aGUgY29tYmluYXRpb24gb2YgYXR0cmlidXRlIGJpdHMgaXMg dmFsaWQuDQogICAgPiArICAvLw0KICAgID4gKyAgaWYgKChBdHRyaWJ1dGVzICYgKEVGSV9WQVJJ QUJMRV9SVU5USU1FX0FDQ0VTUyB8DQogICAgPiBFRklfVkFSSUFCTEVfQk9PVFNFUlZJQ0VfQUND RVNTKSkgPT0gRUZJX1ZBUklBQkxFX1JVTlRJTUVfQUNDRVNTKSB7DQogICAgPiArICAgIC8vDQog ICAgPiArICAgIC8vIE1ha2Ugc3VyZSBpZiBydW50aW1lIGJpdCBpcyBzZXQsIGJvb3Qgc2Vydmlj ZSBiaXQgaXMgc2V0IGFsc28uDQogICAgPiArICAgIC8vDQogICAgPiArICAgIGlmICgoQXR0cmli dXRlcyAmIEVGSV9WQVJJQUJMRV9BVVRIRU5USUNBVEVEX1dSSVRFX0FDQ0VTUykgIT0gMCkgew0K ICAgID4gKyAgICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQogICAgPiArICAgIH0gZWxzZSB7 DQogICAgPiArICAgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCiAgICA+ICsgICAg fQ0KICAgID4gKyAgfSBlbHNlIGlmICgoQXR0cmlidXRlcyAmIEVGSV9WQVJJQUJMRV9BVFRSSUJV VEVTX01BU0spID09DQogICAgPiBFRklfVkFSSUFCTEVfTk9OX1ZPTEFUSUxFKSB7DQogICAgPiAr ICAgIC8vDQogICAgPiArICAgIC8vIE9ubHkgRUZJX1ZBUklBQkxFX05PTl9WT0xBVElMRSBhdHRy aWJ1dGUgaXMgaW52YWxpZA0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICByZXR1cm4gRUZJX0lO VkFMSURfUEFSQU1FVEVSOw0KICAgID4gKyAgfSBlbHNlIGlmICgoQXR0cmlidXRlcyAmIFZBUklB QkxFX0FUVFJJQlVURV9BVF9BVykgIT0gMCkgew0KICAgID4gKyAgICBpZiAoIW1WYXJpYWJsZU1v ZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuQXV0aFN1cHBvcnQpIHsNCiAgICA+ICsgICAgICAv Lw0KICAgID4gKyAgICAgIC8vIE5vdCBzdXBwb3J0IGF1dGhlbnRpY2F0ZWQgdmFyaWFibGUgd3Jp dGUuDQogICAgPiArICAgICAgLy8NCiAgICA+ICsgICAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFS QU1FVEVSOw0KICAgID4gKyAgICB9DQogICAgPiArICB9IGVsc2UgaWYgKChBdHRyaWJ1dGVzICYg RUZJX1ZBUklBQkxFX0hBUkRXQVJFX0VSUk9SX1JFQ09SRCkgIT0gMCkgew0KICAgID4gKyAgICBp ZiAoUGNkR2V0MzIgKFBjZEh3RXJyU3RvcmFnZVNpemUpID09IDApIHsNCiAgICA+ICsgICAgICAv Lw0KICAgID4gKyAgICAgIC8vIE5vdCBzdXBwb3J0IGhhcndhcmUgZXJyb3IgcmVjb3JkIHZhcmlh YmxlIHZhcmlhYmxlLg0KICAgID4gKyAgICAgIC8vDQogICAgPiArICAgICAgcmV0dXJuIEVGSV9J TlZBTElEX1BBUkFNRVRFUjsNCiAgICA+ICsgICAgfQ0KICAgID4gKyAgfQ0KICAgID4gKw0KICAg ID4gKyAgLy8NCiAgICA+ICsgIC8vIEVGSV9WQVJJQUJMRV9BVVRIRU5USUNBVEVEX1dSSVRFX0FD Q0VTUyBhbmQNCiAgICA+IEVGSV9WQVJJQUJMRV9USU1FX0JBU0VEX0FVVEhFTlRJQ0FURURfV1JJ VEVfQUNDRVNTIGF0dHJpYnV0ZQ0KICAgID4gKyAgLy8gY2Fubm90IGJlIHNldCBib3RoLg0KICAg ID4gKyAgLy8NCiAgICA+ICsgIGlmICggICgoQXR0cmlidXRlcyAmIEVGSV9WQVJJQUJMRV9BVVRI RU5USUNBVEVEX1dSSVRFX0FDQ0VTUykgPT0NCiAgICA+IEVGSV9WQVJJQUJMRV9BVVRIRU5USUNB VEVEX1dSSVRFX0FDQ0VTUykNCiAgICA+ICsgICAgICYmICgoQXR0cmlidXRlcyAmDQogICAgPiBF RklfVkFSSUFCTEVfVElNRV9CQVNFRF9BVVRIRU5USUNBVEVEX1dSSVRFX0FDQ0VTUykgPT0NCiAg ICA+IEVGSV9WQVJJQUJMRV9USU1FX0JBU0VEX0FVVEhFTlRJQ0FURURfV1JJVEVfQUNDRVNTKSkN CiAgICA+ICsgIHsNCiAgICA+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCiAgICA+ICsg IH0NCiAgICA+ICsNCiAgICA+ICsgIGlmICgoQXR0cmlidXRlcyAmIEVGSV9WQVJJQUJMRV9BVVRI RU5USUNBVEVEX1dSSVRFX0FDQ0VTUykgPT0NCiAgICA+IEVGSV9WQVJJQUJMRV9BVVRIRU5USUNB VEVEX1dSSVRFX0FDQ0VTUykgew0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICAvLyAgSWYgRGF0 YVNpemUgPT0gQVVUSElORk9fU0laRSBhbmQgdGhlbiBQYXlsb2FkU2l6ZSBpcyAwLg0KICAgID4g KyAgICAvLyAgTWF5YmUgaXQncyB0aGUgZGVsZXRlIG9wZXJhdGlvbiBvZiBjb21tb24gYXV0aGVu dGljYXRlZCB2YXJpYWJsZSBhdCB1c2VyDQogICAgPiBwaHlzaWNhbCBwcmVzZW5jZS4NCiAgICA+ ICsgICAgLy8NCiAgICA+ICsgICAgaWYgKERhdGFTaXplICE9IEFVVEhJTkZPX1NJWkUpIHsNCiAg ICA+ICsgICAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KICAgID4gKyAgICB9DQogICAgPiAr DQogICAgPiArICAgIFBheWxvYWRTaXplID0gRGF0YVNpemUgLSBBVVRISU5GT19TSVpFOw0KICAg ID4gKyAgfSBlbHNlIGlmICgoQXR0cmlidXRlcyAmDQogICAgPiBFRklfVkFSSUFCTEVfVElNRV9C QVNFRF9BVVRIRU5USUNBVEVEX1dSSVRFX0FDQ0VTUykgPT0NCiAgICA+IEVGSV9WQVJJQUJMRV9U SU1FX0JBU0VEX0FVVEhFTlRJQ0FURURfV1JJVEVfQUNDRVNTKSB7DQogICAgPiArICAgIC8vDQog ICAgPiArICAgIC8vIFNhbml0eSBjaGVjayBmb3IgRUZJX1ZBUklBQkxFX0FVVEhFTlRJQ0FUSU9O XzIgZGVzY3JpcHRvci4NCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgaWYgKChEYXRhU2l6ZSA8 IE9GRlNFVF9PRl9BVVRISU5GTzJfQ0VSVF9EQVRBKSB8fA0KICAgID4gKyAgICAgICAgKCgoRUZJ X1ZBUklBQkxFX0FVVEhFTlRJQ0FUSU9OXzIgKilEYXRhKS0+QXV0aEluZm8uSGRyLmR3TGVuZ3Ro ID4NCiAgICA+IERhdGFTaXplIC0gKE9GRlNFVF9PRiAoRUZJX1ZBUklBQkxFX0FVVEhFTlRJQ0FU SU9OXzIsIEF1dGhJbmZvKSkpIHx8DQogICAgPiArICAgICAgICAoKChFRklfVkFSSUFCTEVfQVVU SEVOVElDQVRJT05fMiAqKURhdGEpLT5BdXRoSW5mby5IZHIuZHdMZW5ndGggPA0KICAgID4gT0ZG U0VUX09GIChXSU5fQ0VSVElGSUNBVEVfVUVGSV9HVUlELCBDZXJ0RGF0YSkpKQ0KICAgID4gKyAg ICB7DQogICAgPiArICAgICAgcmV0dXJuIEVGSV9TRUNVUklUWV9WSU9MQVRJT047DQogICAgPiAr ICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgLy8gVGhlIFZhcmlhYmxl U3BlY3VsYXRpb25CYXJyaWVyKCkgY2FsbCBoZXJlIGlzIHRvIGVuc3VyZSB0aGUgYWJvdmUgc2Fu aXR5DQogICAgPiArICAgIC8vIGNoZWNrIGZvciB0aGUgRUZJX1ZBUklBQkxFX0FVVEhFTlRJQ0FU SU9OXzIgZGVzY3JpcHRvciBoYXMgYmVlbg0KICAgID4gY29tcGxldGVkDQogICAgPiArICAgIC8v IGJlZm9yZSB0aGUgZXhlY3V0aW9uIG9mIHN1YnNlcXVlbnQgY29kZXMuDQogICAgPiArICAgIC8v DQogICAgPiArICAgIFZhcmlhYmxlU3BlY3VsYXRpb25CYXJyaWVyICgpOw0KICAgID4gKyAgICBQ YXlsb2FkU2l6ZSA9IERhdGFTaXplIC0gQVVUSElORk8yX1NJWkUgKERhdGEpOw0KICAgID4gKyAg fSBlbHNlIHsNCiAgICA+ICsgICAgUGF5bG9hZFNpemUgPSBEYXRhU2l6ZTsNCiAgICA+ICsgIH0N CiAgICA+ICsNCiAgICA+ICsgIGlmICgoVUlOVE4pKH4wKSAtIFBheWxvYWRTaXplIDwgU3RyU2l6 ZSAoVmFyaWFibGVOYW1lKSkgew0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICAvLyBQcmV2ZW50 IHdob2xlIHZhcmlhYmxlIHNpemUgb3ZlcmZsb3cNCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAg cmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ ICsgIC8vDQogICAgPiArICAvLyAgVGhlIHNpemUgb2YgdGhlIFZhcmlhYmxlTmFtZSwgaW5jbHVk aW5nIHRoZSBVbmljb2RlIE51bGwgaW4gYnl0ZXMgcGx1cw0KICAgID4gKyAgLy8gIHRoZSBEYXRh U2l6ZSBpcyBsaW1pdGVkIHRvIG1heGltdW0gc2l6ZSBvZiBQY2RHZXQzMg0KICAgID4gKFBjZE1h eEhhcmR3YXJlRXJyb3JWYXJpYWJsZVNpemUpDQogICAgPiArICAvLyAgYnl0ZXMgZm9yIEh3RXJy UmVjIyMjIyB2YXJpYWJsZS4NCiAgICA+ICsgIC8vDQogICAgPiArICBpZiAoKEF0dHJpYnV0ZXMg JiBFRklfVkFSSUFCTEVfSEFSRFdBUkVfRVJST1JfUkVDT1JEKSA9PQ0KICAgID4gRUZJX1ZBUklB QkxFX0hBUkRXQVJFX0VSUk9SX1JFQ09SRCkgew0KICAgID4gKyAgICBpZiAoU3RyU2l6ZSAoVmFy aWFibGVOYW1lKSArIFBheWxvYWRTaXplID4NCiAgICA+ICsgICAgICAgIFBjZEdldDMyIChQY2RN YXhIYXJkd2FyZUVycm9yVmFyaWFibGVTaXplKSAtIEdldFZhcmlhYmxlSGVhZGVyU2l6ZQ0KICAg ID4gKEF1dGhGb3JtYXQpKQ0KICAgID4gKyAgICB7DQogICAgPiArICAgICAgcmV0dXJuIEVGSV9J TlZBTElEX1BBUkFNRVRFUjsNCiAgICA+ICsgICAgfQ0KICAgID4gKyAgfSBlbHNlIHsNCiAgICA+ ICsgICAgLy8NCiAgICA+ICsgICAgLy8gIFRoZSBzaXplIG9mIHRoZSBWYXJpYWJsZU5hbWUsIGlu Y2x1ZGluZyB0aGUgVW5pY29kZSBOdWxsIGluIGJ5dGVzIHBsdXMNCiAgICA+ICsgICAgLy8gIHRo ZSBEYXRhU2l6ZSBpcyBsaW1pdGVkIHRvIG1heGltdW0gc2l6ZSBvZiBNYXgoQXV0aHxWb2xhdGls ZSlWYXJpYWJsZVNpemUNCiAgICA+IGJ5dGVzLg0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICBp ZiAoKEF0dHJpYnV0ZXMgJiBWQVJJQUJMRV9BVFRSSUJVVEVfQVRfQVcpICE9IDApIHsNCiAgICA+ ICsgICAgICBpZiAoU3RyU2l6ZSAoVmFyaWFibGVOYW1lKSArIFBheWxvYWRTaXplID4NCiAgICA+ ICsgICAgICAgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5NYXhBdXRoVmFyaWFibGVTaXplIC0N CiAgICA+ICsgICAgICAgICAgR2V0VmFyaWFibGVIZWFkZXJTaXplIChBdXRoRm9ybWF0KSkNCiAg ICA+ICsgICAgICB7DQogICAgPiArICAgICAgICBERUJVRyAoKA0KICAgID4gKyAgICAgICAgICBE RUJVR19FUlJPUiwNCiAgICA+ICsgICAgICAgICAgIiVhOiBGYWlsZWQgdG8gc2V0IHZhcmlhYmxl ICclcycgd2l0aCBHdWlkICVnXG4iLA0KICAgID4gKyAgICAgICAgICBfX0ZVTkNUSU9OX18sDQog ICAgPiArICAgICAgICAgIFZhcmlhYmxlTmFtZSwNCiAgICA+ICsgICAgICAgICAgVmVuZG9yR3Vp ZA0KICAgID4gKyAgICAgICAgICApKTsNCiAgICA+ICsgICAgICAgIERFQlVHICgoDQogICAgPiAr ICAgICAgICAgIERFQlVHX0VSUk9SLA0KICAgID4gKyAgICAgICAgICAiTmFtZVNpemUoMHgleCkg KyBQYXlsb2FkU2l6ZSgweCV4KSA+ICINCiAgICA+ICsgICAgICAgICAgIk1heEF1dGhWYXJpYWJs ZVNpemUoMHgleCkgLSBIZWFkZXJTaXplKDB4JXgpXG4iLA0KICAgID4gKyAgICAgICAgICBTdHJT aXplIChWYXJpYWJsZU5hbWUpLA0KICAgID4gKyAgICAgICAgICBQYXlsb2FkU2l6ZSwNCiAgICA+ ICsgICAgICAgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5NYXhBdXRoVmFyaWFibGVTaXplLA0K ICAgID4gKyAgICAgICAgICBHZXRWYXJpYWJsZUhlYWRlclNpemUgKEF1dGhGb3JtYXQpDQogICAg PiArICAgICAgICAgICkpOw0KICAgID4gKyAgICAgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFN RVRFUjsNCiAgICA+ICsgICAgICB9DQogICAgPiArICAgIH0gZWxzZSBpZiAoKEF0dHJpYnV0ZXMg JiBFRklfVkFSSUFCTEVfTk9OX1ZPTEFUSUxFKSAhPSAwKSB7DQogICAgPiArICAgICAgaWYgKFN0 clNpemUgKFZhcmlhYmxlTmFtZSkgKyBQYXlsb2FkU2l6ZSA+DQogICAgPiArICAgICAgICAgIG1W YXJpYWJsZU1vZHVsZUdsb2JhbC0+TWF4VmFyaWFibGVTaXplIC0gR2V0VmFyaWFibGVIZWFkZXJT aXplDQogICAgPiAoQXV0aEZvcm1hdCkpDQogICAgPiArICAgICAgew0KICAgID4gKyAgICAgICAg REVCVUcgKCgNCiAgICA+ICsgICAgICAgICAgREVCVUdfRVJST1IsDQogICAgPiArICAgICAgICAg ICIlYTogRmFpbGVkIHRvIHNldCB2YXJpYWJsZSAnJXMnIHdpdGggR3VpZCAlZ1xuIiwNCiAgICA+ ICsgICAgICAgICAgX19GVU5DVElPTl9fLA0KICAgID4gKyAgICAgICAgICBWYXJpYWJsZU5hbWUs DQogICAgPiArICAgICAgICAgIFZlbmRvckd1aWQNCiAgICA+ICsgICAgICAgICAgKSk7DQogICAg PiArICAgICAgICBERUJVRyAoKA0KICAgID4gKyAgICAgICAgICBERUJVR19FUlJPUiwNCiAgICA+ ICsgICAgICAgICAgIk5hbWVTaXplKDB4JXgpICsgUGF5bG9hZFNpemUoMHgleCkgPiAiDQogICAg PiArICAgICAgICAgICJNYXhWYXJpYWJsZVNpemUoMHgleCkgLSBIZWFkZXJTaXplKDB4JXgpXG4i LA0KICAgID4gKyAgICAgICAgICBTdHJTaXplIChWYXJpYWJsZU5hbWUpLA0KICAgID4gKyAgICAg ICAgICBQYXlsb2FkU2l6ZSwNCiAgICA+ICsgICAgICAgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFs LT5NYXhWYXJpYWJsZVNpemUsDQogICAgPiArICAgICAgICAgIEdldFZhcmlhYmxlSGVhZGVyU2l6 ZSAoQXV0aEZvcm1hdCkNCiAgICA+ICsgICAgICAgICAgKSk7DQogICAgPiArICAgICAgICByZXR1 cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KICAgID4gKyAgICAgIH0NCiAgICA+ICsgICAgfSBl bHNlIHsNCiAgICA+ICsgICAgICBpZiAoU3RyU2l6ZSAoVmFyaWFibGVOYW1lKSArIFBheWxvYWRT aXplID4NCiAgICA+ICsgICAgICAgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5NYXhWb2xhdGls ZVZhcmlhYmxlU2l6ZSAtDQogICAgPiBHZXRWYXJpYWJsZUhlYWRlclNpemUgKEF1dGhGb3JtYXQp KQ0KICAgID4gKyAgICAgIHsNCiAgICA+ICsgICAgICAgIERFQlVHICgoDQogICAgPiArICAgICAg ICAgIERFQlVHX0VSUk9SLA0KICAgID4gKyAgICAgICAgICAiJWE6IEZhaWxlZCB0byBzZXQgdmFy aWFibGUgJyVzJyB3aXRoIEd1aWQgJWdcbiIsDQogICAgPiArICAgICAgICAgIF9fRlVOQ1RJT05f XywNCiAgICA+ICsgICAgICAgICAgVmFyaWFibGVOYW1lLA0KICAgID4gKyAgICAgICAgICBWZW5k b3JHdWlkDQogICAgPiArICAgICAgICAgICkpOw0KICAgID4gKyAgICAgICAgREVCVUcgKCgNCiAg ICA+ICsgICAgICAgICAgREVCVUdfRVJST1IsDQogICAgPiArICAgICAgICAgICJOYW1lU2l6ZSgw eCV4KSArIFBheWxvYWRTaXplKDB4JXgpID4gIg0KICAgID4gKyAgICAgICAgICAiTWF4Vm9sYXRp bGVWYXJpYWJsZVNpemUoMHgleCkgLSBIZWFkZXJTaXplKDB4JXgpXG4iLA0KICAgID4gKyAgICAg ICAgICBTdHJTaXplIChWYXJpYWJsZU5hbWUpLA0KICAgID4gKyAgICAgICAgICBQYXlsb2FkU2l6 ZSwNCiAgICA+ICsgICAgICAgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5NYXhWb2xhdGlsZVZh cmlhYmxlU2l6ZSwNCiAgICA+ICsgICAgICAgICAgR2V0VmFyaWFibGVIZWFkZXJTaXplIChBdXRo Rm9ybWF0KQ0KICAgID4gKyAgICAgICAgICApKTsNCiAgICA+ICsgICAgICAgIHJldHVybiBFRklf SU5WQUxJRF9QQVJBTUVURVI7DQogICAgPiArICAgICAgfQ0KICAgID4gKyAgICB9DQogICAgPiAr ICB9DQogICAgPiArDQogICAgPiArICAvLw0KICAgID4gKyAgLy8gU3BlY2lhbCBIYW5kbGluZyBm b3IgTU9SIExvY2sgdmFyaWFibGUuDQogICAgPiArICAvLw0KICAgID4gKyAgU3RhdHVzID0gU2V0 VmFyaWFibGVDaGVja0hhbmRsZXJNb3IgKFZhcmlhYmxlTmFtZSwgVmVuZG9yR3VpZCwgQXR0cmli dXRlcywNCiAgICA+IFBheWxvYWRTaXplLCAoVk9JRCAqKSgoVUlOVE4pRGF0YSArIERhdGFTaXpl IC0gUGF5bG9hZFNpemUpKTsNCiAgICA+ICsgIGlmIChTdGF0dXMgPT0gRUZJX0FMUkVBRFlfU1RB UlRFRCkgew0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICAvLyBFRklfQUxSRUFEWV9TVEFSVEVE IG1lYW5zIHRoZSBTZXRWYXJpYWJsZSgpIGFjdGlvbiBpcyBoYW5kbGVkIGluc2lkZSBvZg0KICAg ID4gU2V0VmFyaWFibGVDaGVja0hhbmRsZXJNb3IoKS4NCiAgICA+ICsgICAgLy8gVmFyaWFibGUg ZHJpdmVyIGNhbiBqdXN0IHJldHVybiBTVUNDRVNTLg0KICAgID4gKyAgICAvLw0KICAgID4gKyAg ICByZXR1cm4gRUZJX1NVQ0NFU1M7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAgPiArICAgIHJldHVybiBTdGF0dXM7DQogICAgPiAr ICB9DQogICAgPiArDQogICAgPiArICBTdGF0dXMgPSBWYXJDaGVja0xpYlNldFZhcmlhYmxlQ2hl Y2sgKFZhcmlhYmxlTmFtZSwgVmVuZG9yR3VpZCwgQXR0cmlidXRlcywNCiAgICA+IFBheWxvYWRT aXplLCAoVk9JRCAqKSgoVUlOVE4pRGF0YSArIERhdGFTaXplIC0gUGF5bG9hZFNpemUpLCBtUmVx dWVzdFNvdXJjZSk7DQogICAgPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAgPiAr ICAgIHJldHVybiBTdGF0dXM7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICBBY3F1aXJl TG9ja09ubHlBdEJvb3RUaW1lICgmbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KICAgID4gPlZhcmlh YmxlR2xvYmFsLlZhcmlhYmxlU2VydmljZXNMb2NrKTsNCiAgICA+ICsNCiAgICA+ICsgIC8vDQog ICAgPiArICAvLyBDb25zaWRlciByZWVudHJhbnQgaW4gTUNBL0lOSVQvTk1JLiBJdCBuZWVkcyBi ZSByZXVwZGF0ZWQuDQogICAgPiArICAvLw0KICAgID4gKyAgaWYgKDEgPCBJbnRlcmxvY2tlZElu Y3JlbWVudCAoJm1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCiAgICA+ID5WYXJpYWJsZUdsb2JhbC5S ZWVudHJhbnRTdGF0ZSkpIHsNCiAgICA+ICsgICAgUG9pbnQgPSBtVmFyaWFibGVNb2R1bGVHbG9i YWwtPlZhcmlhYmxlR2xvYmFsLk5vblZvbGF0aWxlVmFyaWFibGVCYXNlOw0KICAgID4gKyAgICAv Lw0KICAgID4gKyAgICAvLyBQYXJzZSBub24tdm9sYXRpbGUgdmFyaWFibGUgZGF0YSBhbmQgZ2V0 IGxhc3QgdmFyaWFibGUgb2Zmc2V0Lg0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICBOZXh0VmFy aWFibGUgPSBHZXRTdGFydFBvaW50ZXIgKChWQVJJQUJMRV9TVE9SRV9IRUFERVIgKikoVUlOVE4p UG9pbnQpOw0KICAgID4gKyAgICB3aGlsZSAoSXNWYWxpZFZhcmlhYmxlSGVhZGVyIChOZXh0VmFy aWFibGUsIEdldEVuZFBvaW50ZXINCiAgICA+ICgoVkFSSUFCTEVfU1RPUkVfSEVBREVSICopKFVJ TlROKVBvaW50KSwgQXV0aEZvcm1hdCkpIHsNCiAgICA+ICsgICAgICBOZXh0VmFyaWFibGUgPSBH ZXROZXh0VmFyaWFibGVQdHIgKE5leHRWYXJpYWJsZSwgQXV0aEZvcm1hdCk7DQogICAgPiArICAg IH0NCiAgICA+ICsNCiAgICA+ICsgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5Ob25Wb2xhdGls ZUxhc3RWYXJpYWJsZU9mZnNldCA9DQogICAgPiAoVUlOVE4pTmV4dFZhcmlhYmxlIC0gKFVJTlRO KVBvaW50Ow0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIENo ZWNrIHdoZXRoZXIgdGhlIGlucHV0IHZhcmlhYmxlIGlzIGFscmVhZHkgZXhpc3RlZC4NCiAgICA+ ICsgIC8vDQogICAgPiArICBTdGF0dXMgPSBGaW5kVmFyaWFibGUgKFZhcmlhYmxlTmFtZSwgVmVu ZG9yR3VpZCwgJlZhcmlhYmxlLA0KICAgID4gJm1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFi bGVHbG9iYWwsIFRSVUUpOw0KICAgID4gKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCiAg ICA+ICsgICAgaWYgKCgoVmFyaWFibGUuQ3VyclB0ci0+QXR0cmlidXRlcyAmIEVGSV9WQVJJQUJM RV9SVU5USU1FX0FDQ0VTUykgPT0gMCkNCiAgICA+ICYmIEF0UnVudGltZSAoKSkgew0KICAgID4g KyAgICAgIFN0YXR1cyA9IEVGSV9XUklURV9QUk9URUNURUQ7DQogICAgPiArICAgICAgZ290byBE b25lOw0KICAgID4gKyAgICB9DQogICAgPiArDQogICAgPiArICAgIGlmICgoQXR0cmlidXRlcyAh PSAwKSAmJiAoKEF0dHJpYnV0ZXMgJiAofkVGSV9WQVJJQUJMRV9BUFBFTkRfV1JJVEUpKSAhPQ0K ICAgID4gVmFyaWFibGUuQ3VyclB0ci0+QXR0cmlidXRlcykpIHsNCiAgICA+ICsgICAgICAvLw0K ICAgID4gKyAgICAgIC8vIElmIGEgcHJlZXhpc3RpbmcgdmFyaWFibGUgaXMgcmV3cml0dGVuIHdp dGggZGlmZmVyZW50IGF0dHJpYnV0ZXMsIFNldFZhcmlhYmxlKCkNCiAgICA+IHNoYWxsIG5vdA0K ICAgID4gKyAgICAgIC8vIG1vZGlmeSB0aGUgdmFyaWFibGUgYW5kIHNoYWxsIHJldHVybiBFRklf SU5WQUxJRF9QQVJBTUVURVIuIFR3bw0KICAgID4gZXhjZXB0aW9ucyB0byB0aGlzIHJ1bGU6DQog ICAgPiArICAgICAgLy8gMS4gTm8gYWNjZXNzIGF0dHJpYnV0ZXMgc3BlY2lmaWVkDQogICAgPiAr ICAgICAgLy8gMi4gVGhlIG9ubHkgYXR0cmlidXRlIGRpZmZlcmluZyBpcyBFRklfVkFSSUFCTEVf QVBQRU5EX1dSSVRFDQogICAgPiArICAgICAgLy8NCiAgICA+ICsgICAgICBTdGF0dXMgPSBFRklf SU5WQUxJRF9QQVJBTUVURVI7DQogICAgPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiW1Zh cmlhYmxlXTogUmV3cml0dGVuIGEgcHJlZXhpc3RpbmcgdmFyaWFibGUoMHglMDh4KQ0KICAgID4g d2l0aCBkaWZmZXJlbnQgYXR0cmlidXRlcygweCUwOHgpIC0gJWc6JXNcbiIsIFZhcmlhYmxlLkN1 cnJQdHItPkF0dHJpYnV0ZXMsDQogICAgPiBBdHRyaWJ1dGVzLCBWZW5kb3JHdWlkLCBWYXJpYWJs ZU5hbWUpKTsNCiAgICA+ICsgICAgICBnb3RvIERvbmU7DQogICAgPiArICAgIH0NCiAgICA+ICsg IH0NCiAgICA+ICsNCiAgICA+ICsgIGlmICghRmVhdHVyZVBjZEdldCAoUGNkVWVmaVZhcmlhYmxl RGVmYXVsdExhbmdEZXByZWNhdGUpKSB7DQogICAgPiArICAgIC8vDQogICAgPiArICAgIC8vIEhv b2sgdGhlIG9wZXJhdGlvbiBvZiBzZXR0aW5nIFBsYXRmb3JtTGFuZ0NvZGVzL1BsYXRmb3JtTGFu ZyBhbmQNCiAgICA+IExhbmdDb2Rlcy9MYW5nLg0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICBT dGF0dXMgPSBBdXRvVXBkYXRlTGFuZ1ZhcmlhYmxlIChWYXJpYWJsZU5hbWUsIERhdGEsIERhdGFT aXplKTsNCiAgICA+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgID4gKyAgICAg IC8vDQogICAgPiArICAgICAgLy8gVGhlIGF1dG8gdXBkYXRlIG9wZXJhdGlvbiBmYWlsZWQsIGRp cmVjdGx5IHJldHVybiB0byBhdm9pZCBpbmNvbnNpc3RlbmN5DQogICAgPiBiZXR3ZWVuIFBsYXRm b3JtTGFuZyBhbmQgTGFuZy4NCiAgICA+ICsgICAgICAvLw0KICAgID4gKyAgICAgIGdvdG8gRG9u ZTsNCiAgICA+ICsgICAgfQ0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgaWYgKG1WYXJp YWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuQXV0aFN1cHBvcnQpIHsNCiAgICA+ICsg ICAgU3RhdHVzID0gQXV0aFZhcmlhYmxlTGliUHJvY2Vzc1ZhcmlhYmxlIChWYXJpYWJsZU5hbWUs IFZlbmRvckd1aWQsIERhdGEsDQogICAgPiBEYXRhU2l6ZSwgQXR0cmlidXRlcyk7DQogICAgPiAr ICB9IGVsc2Ugew0KICAgID4gKyAgICBTdGF0dXMgPSBVcGRhdGVWYXJpYWJsZSAoVmFyaWFibGVO YW1lLCBWZW5kb3JHdWlkLCBEYXRhLCBEYXRhU2l6ZSwNCiAgICA+IEF0dHJpYnV0ZXMsIDAsIDAs ICZWYXJpYWJsZSwgTlVMTCk7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArRG9uZToNCiAg ICA+ICsgIEludGVybG9ja2VkRGVjcmVtZW50ICgmbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KICAg ID4gPlZhcmlhYmxlR2xvYmFsLlJlZW50cmFudFN0YXRlKTsNCiAgICA+ICsgIFJlbGVhc2VMb2Nr T25seUF0Qm9vdFRpbWUgKCZtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQogICAgPiA+VmFyaWFibGVH bG9iYWwuVmFyaWFibGVTZXJ2aWNlc0xvY2spOw0KICAgID4gKw0KICAgID4gKyAgaWYgKCFBdFJ1 bnRpbWUgKCkpIHsNCiAgICA+ICsgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCiAgICA+ ICsgICAgICBTZWN1cmVCb290SG9vayAoDQogICAgPiArICAgICAgICBWYXJpYWJsZU5hbWUsDQog ICAgPiArICAgICAgICBWZW5kb3JHdWlkDQogICAgPiArICAgICAgICApOw0KICAgID4gKyAgICB9 DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICByZXR1cm4gU3RhdHVzOw0KICAgID4gK30N CiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsNCiAgICA+ICsgIFRoaXMgY29kZSByZXR1cm5z IGluZm9ybWF0aW9uIGFib3V0IHRoZSBFRkkgdmFyaWFibGVzLg0KICAgID4gKw0KICAgID4gKyAg Q2F1dGlvbjogVGhpcyBmdW5jdGlvbiBtYXkgcmVjZWl2ZSB1bnRydXN0ZWQgaW5wdXQuDQogICAg PiArICBUaGlzIGZ1bmN0aW9uIG1heSBiZSBpbnZva2VkIGluIFNNTSBtb2RlLiBUaGlzIGZ1bmN0 aW9uIHdpbGwgZG8gYmFzaWMNCiAgICA+IHZhbGlkYXRpb24sIGJlZm9yZSBwYXJzZSB0aGUgZGF0 YS4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbSBBdHRyaWJ1dGVzICAgICAgICAgICAgICAgICAg ICAgQXR0cmlidXRlcyBiaXRtYXNrIHRvIHNwZWNpZnkgdGhlIHR5cGUgb2YNCiAgICA+IHZhcmlh Ymxlcw0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB3 aGljaCB0byByZXR1cm4gaW5mb3JtYXRpb24uDQogICAgPiArICBAcGFyYW0gTWF4aW11bVZhcmlh YmxlU3RvcmFnZVNpemUgICAgIFBvaW50ZXIgdG8gdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUNCiAg ICA+IHN0b3JhZ2Ugc3BhY2UgYXZhaWxhYmxlDQogICAgPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZvciB0aGUgRUZJIHZhcmlhYmxlcyBhc3NvY2lhdGVkIHdpdGgg dGhlIGF0dHJpYnV0ZXMNCiAgICA+IHNwZWNpZmllZC4NCiAgICA+ICsgIEBwYXJhbSBSZW1haW5p bmdWYXJpYWJsZVN0b3JhZ2VTaXplICAgUG9pbnRlciB0byB0aGUgcmVtYWluaW5nIHNpemUgb2Yg dGhlDQogICAgPiBzdG9yYWdlIHNwYWNlIGF2YWlsYWJsZQ0KICAgID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgRUZJIHZhcmlhYmxlcyBhc3NvY2lhdGVkIHdp dGggdGhlIGF0dHJpYnV0ZXMgc3BlY2lmaWVkLg0KICAgID4gKyAgQHBhcmFtIE1heGltdW1WYXJp YWJsZVNpemUgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBtYXhpbXVtIHNpemUgb2YgYW4NCiAg ICA+IGluZGl2aWR1YWwgRUZJIHZhcmlhYmxlcw0KICAgID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBhc3NvY2lhdGVkIHdpdGggdGhlIGF0dHJpYnV0ZXMgc3BlY2lm aWVkLg0KICAgID4gKw0KICAgID4gKyAgQHJldHVybiBFRklfU1VDQ0VTUyAgICAgICAgICAgICAg ICAgICBRdWVyeSBzdWNjZXNzZnVsbHkuDQogICAgPiArDQogICAgPiArKiovDQogICAgPiArRUZJ X1NUQVRVUw0KICAgID4gK0VGSUFQSQ0KICAgID4gK1ZhcmlhYmxlU2VydmljZVF1ZXJ5VmFyaWFi bGVJbmZvSW50ZXJuYWwgKA0KICAgID4gKyAgSU4gIFVJTlQzMiAgQXR0cmlidXRlcywNCiAgICA+ ICsgIE9VVCBVSU5UNjQgICpNYXhpbXVtVmFyaWFibGVTdG9yYWdlU2l6ZSwNCiAgICA+ICsgIE9V VCBVSU5UNjQgICpSZW1haW5pbmdWYXJpYWJsZVN0b3JhZ2VTaXplLA0KICAgID4gKyAgT1VUIFVJ TlQ2NCAgKk1heGltdW1WYXJpYWJsZVNpemUNCiAgICA+ICsgICkNCiAgICA+ICt7DQogICAgPiAr ICBWQVJJQUJMRV9IRUFERVIgICAgICAgICAqVmFyaWFibGU7DQogICAgPiArICBWQVJJQUJMRV9I RUFERVIgICAgICAgICAqTmV4dFZhcmlhYmxlOw0KICAgID4gKyAgVUlOVDY0ICAgICAgICAgICAg ICAgICAgVmFyaWFibGVTaXplOw0KICAgID4gKyAgVkFSSUFCTEVfU1RPUkVfSEVBREVSICAgKlZh cmlhYmxlU3RvcmVIZWFkZXI7DQogICAgPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICBDb21t b25WYXJpYWJsZVRvdGFsU2l6ZTsNCiAgICA+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgIEh3 RXJyVmFyaWFibGVUb3RhbFNpemU7DQogICAgPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICBT dGF0dXM7DQogICAgPiArICBWQVJJQUJMRV9QT0lOVEVSX1RSQUNLICBWYXJpYWJsZVB0clRyYWNr Ow0KICAgID4gKw0KICAgID4gKyAgQ29tbW9uVmFyaWFibGVUb3RhbFNpemUgPSAwOw0KICAgID4g KyAgSHdFcnJWYXJpYWJsZVRvdGFsU2l6ZSAgPSAwOw0KICAgID4gKw0KICAgID4gKyAgaWYgKChB dHRyaWJ1dGVzICYgRUZJX1ZBUklBQkxFX05PTl9WT0xBVElMRSkgPT0gMCkgew0KICAgID4gKyAg ICAvLw0KICAgID4gKyAgICAvLyBRdWVyeSBpcyBWb2xhdGlsZSByZWxhdGVkLg0KICAgID4gKyAg ICAvLw0KICAgID4gKyAgICBWYXJpYWJsZVN0b3JlSGVhZGVyID0gKFZBUklBQkxFX1NUT1JFX0hF QURFUg0KICAgID4gKikoKFVJTlROKW1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9i YWwuVm9sYXRpbGVWYXJpYWJsZUJhc2UpOw0KICAgID4gKyAgfSBlbHNlIHsNCiAgICA+ICsgICAg Ly8NCiAgICA+ICsgICAgLy8gUXVlcnkgaXMgTm9uLVZvbGF0aWxlIHJlbGF0ZWQuDQogICAgPiAr ICAgIC8vDQogICAgPiArICAgIFZhcmlhYmxlU3RvcmVIZWFkZXIgPSBtTnZWYXJpYWJsZUNhY2hl Ow0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIE5vdyBsZXQn cyBmaWxsICpNYXhpbXVtVmFyaWFibGVTdG9yYWdlU2l6ZQ0KICAgID4gKlJlbWFpbmluZ1Zhcmlh YmxlU3RvcmFnZVNpemUNCiAgICA+ICsgIC8vIHdpdGggdGhlIHN0b3JhZ2Ugc2l6ZSAoZXhjbHVk aW5nIHRoZSBzdG9yYWdlIGhlYWRlciBzaXplKS4NCiAgICA+ICsgIC8vDQogICAgPiArICAqTWF4 aW11bVZhcmlhYmxlU3RvcmFnZVNpemUgPSBWYXJpYWJsZVN0b3JlSGVhZGVyLT5TaXplIC0gc2l6 ZW9mDQogICAgPiAoVkFSSUFCTEVfU1RPUkVfSEVBREVSKTsNCiAgICA+ICsNCiAgICA+ICsgIC8v DQogICAgPiArICAvLyBIYXJ3YXJlIGVycm9yIHJlY29yZCB2YXJpYWJsZSBuZWVkcyBsYXJnZXIg c2l6ZS4NCiAgICA+ICsgIC8vDQogICAgPiArICBpZiAoKEF0dHJpYnV0ZXMgJiAoRUZJX1ZBUklB QkxFX05PTl9WT0xBVElMRSB8DQogICAgPiBFRklfVkFSSUFCTEVfSEFSRFdBUkVfRVJST1JfUkVD T1JEKSkgPT0NCiAgICA+IChFRklfVkFSSUFCTEVfTk9OX1ZPTEFUSUxFIHwgRUZJX1ZBUklBQkxF X0hBUkRXQVJFX0VSUk9SX1JFQ09SRCkpDQogICAgPiB7DQogICAgPiArICAgICpNYXhpbXVtVmFy aWFibGVTdG9yYWdlU2l6ZSA9IFBjZEdldDMyIChQY2RId0VyclN0b3JhZ2VTaXplKTsNCiAgICA+ ICsgICAgKk1heGltdW1WYXJpYWJsZVNpemUgICAgICAgID0gIFBjZEdldDMyIChQY2RNYXhIYXJk d2FyZUVycm9yVmFyaWFibGVTaXplKQ0KICAgID4gLQ0KICAgID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBHZXRWYXJpYWJsZUhlYWRlclNpemUgKG1WYXJpYWJsZU1vZHVsZUds b2JhbC0NCiAgICA+ID5WYXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0KTsNCiAgICA+ICsgIH0gZWxz ZSB7DQogICAgPiArICAgIGlmICgoQXR0cmlidXRlcyAmIEVGSV9WQVJJQUJMRV9OT05fVk9MQVRJ TEUpICE9IDApIHsNCiAgICA+ICsgICAgICBpZiAoQXRSdW50aW1lICgpKSB7DQogICAgPiArICAg ICAgICAqTWF4aW11bVZhcmlhYmxlU3RvcmFnZVNpemUgPSBtVmFyaWFibGVNb2R1bGVHbG9iYWwt DQogICAgPiA+Q29tbW9uUnVudGltZVZhcmlhYmxlU3BhY2U7DQogICAgPiArICAgICAgfSBlbHNl IHsNCiAgICA+ICsgICAgICAgICpNYXhpbXVtVmFyaWFibGVTdG9yYWdlU2l6ZSA9IG1WYXJpYWJs ZU1vZHVsZUdsb2JhbC0NCiAgICA+ID5Db21tb25WYXJpYWJsZVNwYWNlOw0KICAgID4gKyAgICAg IH0NCiAgICA+ICsgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICAvLyBM ZXQgKk1heGltdW1WYXJpYWJsZVNpemUgYmUgTWF4KEF1dGh8Vm9sYXRpbGUpVmFyaWFibGVTaXpl IHdpdGggdGhlDQogICAgPiBleGNlcHRpb24gb2YgdGhlIHZhcmlhYmxlIGhlYWRlciBzaXplLg0K ICAgID4gKyAgICAvLw0KICAgID4gKyAgICBpZiAoKEF0dHJpYnV0ZXMgJiBWQVJJQUJMRV9BVFRS SUJVVEVfQVRfQVcpICE9IDApIHsNCiAgICA+ICsgICAgICAqTWF4aW11bVZhcmlhYmxlU2l6ZSA9 ICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPk1heEF1dGhWYXJpYWJsZVNpemUgLQ0KICAgID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0VmFyaWFibGVIZWFkZXJTaXplIChtVmFyaWFi bGVNb2R1bGVHbG9iYWwtDQogICAgPiA+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdCk7DQogICAg PiArICAgIH0gZWxzZSBpZiAoKEF0dHJpYnV0ZXMgJiBFRklfVkFSSUFCTEVfTk9OX1ZPTEFUSUxF KSAhPSAwKSB7DQogICAgPiArICAgICAgKk1heGltdW1WYXJpYWJsZVNpemUgPSAgbVZhcmlhYmxl TW9kdWxlR2xvYmFsLT5NYXhWYXJpYWJsZVNpemUgLQ0KICAgID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgR2V0VmFyaWFibGVIZWFkZXJTaXplIChtVmFyaWFibGVNb2R1bGVHbG9iYWwt DQogICAgPiA+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdCk7DQogICAgPiArICAgIH0gZWxzZSB7 DQogICAgPiArICAgICAgKk1heGltdW1WYXJpYWJsZVNpemUgPSAgIG1WYXJpYWJsZU1vZHVsZUds b2JhbC0NCiAgICA+ID5NYXhWb2xhdGlsZVZhcmlhYmxlU2l6ZSAtDQogICAgPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBHZXRWYXJpYWJsZUhlYWRlclNpemUgKG1WYXJpYWJsZU1vZHVs ZUdsb2JhbC0NCiAgICA+ID5WYXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0KTsNCiAgICA+ICsgICAg fQ0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIFBvaW50IHRv IHRoZSBzdGFydGluZyBhZGRyZXNzIG9mIHRoZSB2YXJpYWJsZXMuDQogICAgPiArICAvLw0KICAg ID4gKyAgVmFyaWFibGUgPSBHZXRTdGFydFBvaW50ZXIgKFZhcmlhYmxlU3RvcmVIZWFkZXIpOw0K ICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIE5vdyB3YWxrIHRocm91Z2ggdGhlIHJl bGF0ZWQgdmFyaWFibGUgc3RvcmUuDQogICAgPiArICAvLw0KICAgID4gKyAgd2hpbGUgKElzVmFs aWRWYXJpYWJsZUhlYWRlciAoDQogICAgPiArICAgICAgICAgICBWYXJpYWJsZSwNCiAgICA+ICsg ICAgICAgICAgIEdldEVuZFBvaW50ZXIgKFZhcmlhYmxlU3RvcmVIZWFkZXIpLA0KICAgID4gKyAg ICAgICAgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0 DQogICAgPiArICAgICAgICAgICApKQ0KICAgID4gKyAgew0KICAgID4gKyAgICBOZXh0VmFyaWFi bGUgPSBHZXROZXh0VmFyaWFibGVQdHIgKFZhcmlhYmxlLCBtVmFyaWFibGVNb2R1bGVHbG9iYWwt DQogICAgPiA+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdCk7DQogICAgPiArICAgIFZhcmlhYmxl U2l6ZSA9IChVSU5UNjQpKFVJTlROKU5leHRWYXJpYWJsZSAtIChVSU5UNjQpKFVJTlROKVZhcmlh YmxlOw0KICAgID4gKw0KICAgID4gKyAgICBpZiAoQXRSdW50aW1lICgpKSB7DQogICAgPiArICAg ICAgLy8NCiAgICA+ICsgICAgICAvLyBXZSBkb24ndCB0YWtlIHRoZSBzdGF0ZSBvZiB0aGUgdmFy aWFibGVzIGluIG1pbmQNCiAgICA+ICsgICAgICAvLyB3aGVuIGNhbGN1bGF0aW5nIFJlbWFpbmlu Z1ZhcmlhYmxlU3RvcmFnZVNpemUsDQogICAgPiArICAgICAgLy8gc2luY2UgdGhlIHNwYWNlIG9j Y3VwaWVkIGJ5IHZhcmlhYmxlcyBub3QgbWFya2VkIHdpdGgNCiAgICA+ICsgICAgICAvLyBWQVJf QURERUQgaXMgbm90IGFsbG93ZWQgdG8gYmUgcmVjbGFpbWVkIGluIFJ1bnRpbWUuDQogICAgPiAr ICAgICAgLy8NCiAgICA+ICsgICAgICBpZiAoKFZhcmlhYmxlLT5BdHRyaWJ1dGVzICYgRUZJX1ZB UklBQkxFX0hBUkRXQVJFX0VSUk9SX1JFQ09SRCkgPT0NCiAgICA+IEVGSV9WQVJJQUJMRV9IQVJE V0FSRV9FUlJPUl9SRUNPUkQpIHsNCiAgICA+ICsgICAgICAgIEh3RXJyVmFyaWFibGVUb3RhbFNp emUgKz0gVmFyaWFibGVTaXplOw0KICAgID4gKyAgICAgIH0gZWxzZSB7DQogICAgPiArICAgICAg ICBDb21tb25WYXJpYWJsZVRvdGFsU2l6ZSArPSBWYXJpYWJsZVNpemU7DQogICAgPiArICAgICAg fQ0KICAgID4gKyAgICB9IGVsc2Ugew0KICAgID4gKyAgICAgIC8vDQogICAgPiArICAgICAgLy8g T25seSBjYXJlIGFib3V0IFZhcmlhYmxlcyB3aXRoIFN0YXRlIFZBUl9BRERFRCwgYmVjYXVzZQ0K ICAgID4gKyAgICAgIC8vIHRoZSBzcGFjZSBub3QgbWFya2VkIGFzIFZBUl9BRERFRCBpcyByZWNs YWltYWJsZSBub3cuDQogICAgPiArICAgICAgLy8NCiAgICA+ICsgICAgICBpZiAoVmFyaWFibGUt PlN0YXRlID09IFZBUl9BRERFRCkgew0KICAgID4gKyAgICAgICAgaWYgKChWYXJpYWJsZS0+QXR0 cmlidXRlcyAmIEVGSV9WQVJJQUJMRV9IQVJEV0FSRV9FUlJPUl9SRUNPUkQpDQogICAgPiA9PSBF RklfVkFSSUFCTEVfSEFSRFdBUkVfRVJST1JfUkVDT1JEKSB7DQogICAgPiArICAgICAgICAgIEh3 RXJyVmFyaWFibGVUb3RhbFNpemUgKz0gVmFyaWFibGVTaXplOw0KICAgID4gKyAgICAgICAgfSBl bHNlIHsNCiAgICA+ICsgICAgICAgICAgQ29tbW9uVmFyaWFibGVUb3RhbFNpemUgKz0gVmFyaWFi bGVTaXplOw0KICAgID4gKyAgICAgICAgfQ0KICAgID4gKyAgICAgIH0gZWxzZSBpZiAoVmFyaWFi bGUtPlN0YXRlID09IChWQVJfSU5fREVMRVRFRF9UUkFOU0lUSU9OICYgVkFSX0FEREVEKSkNCiAg ICA+IHsNCiAgICA+ICsgICAgICAgIC8vDQogICAgPiArICAgICAgICAvLyBJZiBpdCBpcyBhIElO X0RFTEVURURfVFJBTlNJVElPTiB2YXJpYWJsZSwNCiAgICA+ICsgICAgICAgIC8vIGFuZCB0aGVy ZSBpcyBub3QgYWxzbyBhIHNhbWUgQURERUQgb25lIGF0IHRoZSBzYW1lIHRpbWUsDQogICAgPiAr ICAgICAgICAvLyB0aGlzIElOX0RFTEVURURfVFJBTlNJVElPTiB2YXJpYWJsZSBpcyB2YWxpZC4N CiAgICA+ICsgICAgICAgIC8vDQogICAgPiArICAgICAgICBWYXJpYWJsZVB0clRyYWNrLlN0YXJ0 UHRyID0gR2V0U3RhcnRQb2ludGVyIChWYXJpYWJsZVN0b3JlSGVhZGVyKTsNCiAgICA+ICsgICAg ICAgIFZhcmlhYmxlUHRyVHJhY2suRW5kUHRyICAgPSBHZXRFbmRQb2ludGVyIChWYXJpYWJsZVN0 b3JlSGVhZGVyKTsNCiAgICA+ICsgICAgICAgIFN0YXR1cyAgICAgICAgICAgICAgICAgICAgPSBG aW5kVmFyaWFibGVFeCAoDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBHZXRWYXJpYWJsZU5hbWVQdHIgKFZhcmlhYmxlLCBtVmFyaWFibGVNb2R1bGVHbG9iYWwt DQogICAgPiA+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdCksDQogICAgPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRWZW5kb3JHdWlkUHRyIChWYXJpYWJsZSwgbVZh cmlhYmxlTW9kdWxlR2xvYmFsLQ0KICAgID4gPlZhcmlhYmxlR2xvYmFsLkF1dGhGb3JtYXQpLA0K ICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsDQogICAg PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmVmFyaWFibGVQdHJUcmFj aywNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1WYXJpYWJs ZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdA0KICAgID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICA+ICsgICAgICAgIGlmICghRUZJ X0VSUk9SIChTdGF0dXMpICYmIChWYXJpYWJsZVB0clRyYWNrLkN1cnJQdHItPlN0YXRlICE9DQog ICAgPiBWQVJfQURERUQpKSB7DQogICAgPiArICAgICAgICAgIGlmICgoVmFyaWFibGUtPkF0dHJp YnV0ZXMgJiBFRklfVkFSSUFCTEVfSEFSRFdBUkVfRVJST1JfUkVDT1JEKQ0KICAgID4gPT0gRUZJ X1ZBUklBQkxFX0hBUkRXQVJFX0VSUk9SX1JFQ09SRCkgew0KICAgID4gKyAgICAgICAgICAgIEh3 RXJyVmFyaWFibGVUb3RhbFNpemUgKz0gVmFyaWFibGVTaXplOw0KICAgID4gKyAgICAgICAgICB9 IGVsc2Ugew0KICAgID4gKyAgICAgICAgICAgIENvbW1vblZhcmlhYmxlVG90YWxTaXplICs9IFZh cmlhYmxlU2l6ZTsNCiAgICA+ICsgICAgICAgICAgfQ0KICAgID4gKyAgICAgICAgfQ0KICAgID4g KyAgICAgIH0NCiAgICA+ICsgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICAvLw0KICAgID4gKyAg ICAvLyBHbyB0byB0aGUgbmV4dCBvbmUuDQogICAgPiArICAgIC8vDQogICAgPiArICAgIFZhcmlh YmxlID0gTmV4dFZhcmlhYmxlOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgaWYgKChB dHRyaWJ1dGVzICAmIEVGSV9WQVJJQUJMRV9IQVJEV0FSRV9FUlJPUl9SRUNPUkQpID09DQogICAg PiBFRklfVkFSSUFCTEVfSEFSRFdBUkVfRVJST1JfUkVDT1JEKSB7DQogICAgPiArICAgICpSZW1h aW5pbmdWYXJpYWJsZVN0b3JhZ2VTaXplID0gKk1heGltdW1WYXJpYWJsZVN0b3JhZ2VTaXplIC0N CiAgICA+IEh3RXJyVmFyaWFibGVUb3RhbFNpemU7DQogICAgPiArICB9IGVsc2Ugew0KICAgID4g KyAgICBpZiAoKk1heGltdW1WYXJpYWJsZVN0b3JhZ2VTaXplIDwgQ29tbW9uVmFyaWFibGVUb3Rh bFNpemUpIHsNCiAgICA+ICsgICAgICAqUmVtYWluaW5nVmFyaWFibGVTdG9yYWdlU2l6ZSA9IDA7 DQogICAgPiArICAgIH0gZWxzZSB7DQogICAgPiArICAgICAgKlJlbWFpbmluZ1ZhcmlhYmxlU3Rv cmFnZVNpemUgPSAqTWF4aW11bVZhcmlhYmxlU3RvcmFnZVNpemUgLQ0KICAgID4gQ29tbW9uVmFy aWFibGVUb3RhbFNpemU7DQogICAgPiArICAgIH0NCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ ICsgIGlmICgqUmVtYWluaW5nVmFyaWFibGVTdG9yYWdlU2l6ZSA8IEdldFZhcmlhYmxlSGVhZGVy U2l6ZQ0KICAgID4gKG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuQXV0aEZv cm1hdCkpIHsNCiAgICA+ICsgICAgKk1heGltdW1WYXJpYWJsZVNpemUgPSAwOw0KICAgID4gKyAg fSBlbHNlIGlmICgoKlJlbWFpbmluZ1ZhcmlhYmxlU3RvcmFnZVNpemUgLSBHZXRWYXJpYWJsZUhl YWRlclNpemUNCiAgICA+IChtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLkF1 dGhGb3JtYXQpKSA8DQogICAgPiArICAgICAgICAgICAgICpNYXhpbXVtVmFyaWFibGVTaXplDQog ICAgPiArICAgICAgICAgICAgICkNCiAgICA+ICsgIHsNCiAgICA+ICsgICAgKk1heGltdW1WYXJp YWJsZVNpemUgPSAqUmVtYWluaW5nVmFyaWFibGVTdG9yYWdlU2l6ZSAtDQogICAgPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgR2V0VmFyaWFibGVIZWFkZXJTaXplIChtVmFyaWFibGVNb2R1 bGVHbG9iYWwtDQogICAgPiA+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdCk7DQogICAgPiArICB9 DQogICAgPiArDQogICAgPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQogICAgPiArfQ0KICAgID4g Kw0KICAgID4gKy8qKg0KICAgID4gKw0KICAgID4gKyAgVGhpcyBjb2RlIHJldHVybnMgaW5mb3Jt YXRpb24gYWJvdXQgdGhlIEVGSSB2YXJpYWJsZXMuDQogICAgPiArDQogICAgPiArICBDYXV0aW9u OiBUaGlzIGZ1bmN0aW9uIG1heSByZWNlaXZlIHVudHJ1c3RlZCBpbnB1dC4NCiAgICA+ICsgIFRo aXMgZnVuY3Rpb24gbWF5IGJlIGludm9rZWQgaW4gU01NIG1vZGUuIFRoaXMgZnVuY3Rpb24gd2ls bCBkbyBiYXNpYw0KICAgID4gdmFsaWRhdGlvbiwgYmVmb3JlIHBhcnNlIHRoZSBkYXRhLg0KICAg ID4gKw0KICAgID4gKyAgQHBhcmFtIEF0dHJpYnV0ZXMgICAgICAgICAgICAgICAgICAgICBBdHRy aWJ1dGVzIGJpdG1hc2sgdG8gc3BlY2lmeSB0aGUgdHlwZSBvZg0KICAgID4gdmFyaWFibGVzDQog ICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHdoaWNoIHRv IHJldHVybiBpbmZvcm1hdGlvbi4NCiAgICA+ICsgIEBwYXJhbSBNYXhpbXVtVmFyaWFibGVTdG9y YWdlU2l6ZSAgICAgUG9pbnRlciB0byB0aGUgbWF4aW11bSBzaXplIG9mIHRoZQ0KICAgID4gc3Rv cmFnZSBzcGFjZSBhdmFpbGFibGUNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZm9yIHRoZSBFRkkgdmFyaWFibGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXR0 cmlidXRlcw0KICAgID4gc3BlY2lmaWVkLg0KICAgID4gKyAgQHBhcmFtIFJlbWFpbmluZ1Zhcmlh YmxlU3RvcmFnZVNpemUgICBQb2ludGVyIHRvIHRoZSByZW1haW5pbmcgc2l6ZSBvZiB0aGUNCiAg ICA+IHN0b3JhZ2Ugc3BhY2UgYXZhaWxhYmxlDQogICAgPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZvciBFRkkgdmFyaWFibGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUg YXR0cmlidXRlcyBzcGVjaWZpZWQuDQogICAgPiArICBAcGFyYW0gTWF4aW11bVZhcmlhYmxlU2l6 ZSAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIG1heGltdW0gc2l6ZSBvZiBhbg0KICAgID4gaW5k aXZpZHVhbCBFRkkgdmFyaWFibGVzDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXR0cmlidXRlcyBzcGVjaWZpZWQuDQog ICAgPiArDQogICAgPiArICBAcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgICAgICAgIEFu IGludmFsaWQgY29tYmluYXRpb24gb2YgYXR0cmlidXRlDQogICAgPiBiaXRzIHdhcyBzdXBwbGll ZC4NCiAgICA+ICsgIEByZXR1cm4gRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgUXVlcnkg c3VjY2Vzc2Z1bGx5Lg0KICAgID4gKyAgQHJldHVybiBFRklfVU5TVVBQT1JURUQgICAgICAgICAg ICAgICBUaGUgYXR0cmlidXRlIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcw0KICAgID4gcGxhdGZv cm0uDQogICAgPiArDQogICAgPiArKiovDQogICAgPiArRUZJX1NUQVRVUw0KICAgID4gK0VGSUFQ SQ0KICAgID4gK1ZhcmlhYmxlU2VydmljZVF1ZXJ5VmFyaWFibGVJbmZvICgNCiAgICA+ICsgIElO ICBVSU5UMzIgIEF0dHJpYnV0ZXMsDQogICAgPiArICBPVVQgVUlOVDY0ICAqTWF4aW11bVZhcmlh YmxlU3RvcmFnZVNpemUsDQogICAgPiArICBPVVQgVUlOVDY0ICAqUmVtYWluaW5nVmFyaWFibGVT dG9yYWdlU2l6ZSwNCiAgICA+ICsgIE9VVCBVSU5UNjQgICpNYXhpbXVtVmFyaWFibGVTaXplDQog ICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KICAgID4g Kw0KICAgID4gKyAgaWYgKChNYXhpbXVtVmFyaWFibGVTdG9yYWdlU2l6ZSA9PSBOVUxMKSB8fCAo UmVtYWluaW5nVmFyaWFibGVTdG9yYWdlU2l6ZQ0KICAgID4gPT0gTlVMTCkgfHwgKE1heGltdW1W YXJpYWJsZVNpemUgPT0gTlVMTCkgfHwgKEF0dHJpYnV0ZXMgPT0gMCkpIHsNCiAgICA+ICsgICAg cmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ ICsgIGlmICgoQXR0cmlidXRlcyAmIEVGSV9WQVJJQUJMRV9BVVRIRU5USUNBVEVEX1dSSVRFX0FD Q0VTUykgIT0gMCkgew0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICAvLyAgRGVwcmVjYXRlZCBh dHRyaWJ1dGUsIG1ha2UgdGhpcyBjaGVjayBhcyBoaWdoZXN0IHByaW9yaXR5Lg0KICAgID4gKyAg ICAvLw0KICAgID4gKyAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KICAgID4gKyAgfQ0KICAg ID4gKw0KICAgID4gKyAgaWYgKChBdHRyaWJ1dGVzICYgRUZJX1ZBUklBQkxFX0FUVFJJQlVURVNf TUFTSykgPT0gMCkgew0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICAvLyBNYWtlIHN1cmUgdGhl IEF0dHJpYnV0ZXMgY29tYmluYXRpb24gaXMgc3VwcG9ydGVkIGJ5IHRoZSBwbGF0Zm9ybS4NCiAg ICA+ICsgICAgLy8NCiAgICA+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCiAgICA+ICsg IH0gZWxzZSBpZiAoKEF0dHJpYnV0ZXMgJiBFRklfVkFSSUFCTEVfQVRUUklCVVRFU19NQVNLKSA9 PQ0KICAgID4gRUZJX1ZBUklBQkxFX05PTl9WT0xBVElMRSkgew0KICAgID4gKyAgICAvLw0KICAg ID4gKyAgICAvLyBPbmx5IEVGSV9WQVJJQUJMRV9OT05fVk9MQVRJTEUgYXR0cmlidXRlIGlzIGlu dmFsaWQNCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFN RVRFUjsNCiAgICA+ICsgIH0gZWxzZSBpZiAoKEF0dHJpYnV0ZXMgJiAoRUZJX1ZBUklBQkxFX1JV TlRJTUVfQUNDRVNTIHwNCiAgICA+IEVGSV9WQVJJQUJMRV9CT09UU0VSVklDRV9BQ0NFU1MpKSA9 PSBFRklfVkFSSUFCTEVfUlVOVElNRV9BQ0NFU1MpIHsNCiAgICA+ICsgICAgLy8NCiAgICA+ICsg ICAgLy8gTWFrZSBzdXJlIGlmIHJ1bnRpbWUgYml0IGlzIHNldCwgYm9vdCBzZXJ2aWNlIGJpdCBp cyBzZXQgYWxzby4NCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElE X1BBUkFNRVRFUjsNCiAgICA+ICsgIH0gZWxzZSBpZiAoQXRSdW50aW1lICgpICYmICgoQXR0cmli dXRlcyAmIEVGSV9WQVJJQUJMRV9SVU5USU1FX0FDQ0VTUykgPT0NCiAgICA+IDApKSB7DQogICAg PiArICAgIC8vDQogICAgPiArICAgIC8vIE1ha2Ugc3VyZSBSVCBBdHRyaWJ1dGUgaXMgc2V0IGlm IHdlIGFyZSBpbiBSdW50aW1lIHBoYXNlLg0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICByZXR1 cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KICAgID4gKyAgfSBlbHNlIGlmICgoQXR0cmlidXRl cyAmIChFRklfVkFSSUFCTEVfTk9OX1ZPTEFUSUxFIHwNCiAgICA+IEVGSV9WQVJJQUJMRV9IQVJE V0FSRV9FUlJPUl9SRUNPUkQpKSA9PQ0KICAgID4gRUZJX1ZBUklBQkxFX0hBUkRXQVJFX0VSUk9S X1JFQ09SRCkgew0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICAvLyBNYWtlIHN1cmUgSHcgQXR0 cmlidXRlIGlzIHNldCB3aXRoIE5WLg0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICByZXR1cm4g RUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KICAgID4gKyAgfSBlbHNlIGlmICgoQXR0cmlidXRlcyAm IFZBUklBQkxFX0FUVFJJQlVURV9BVF9BVykgIT0gMCkgew0KICAgID4gKyAgICBpZiAoIW1WYXJp YWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuQXV0aFN1cHBvcnQpIHsNCiAgICA+ICsg ICAgICAvLw0KICAgID4gKyAgICAgIC8vIE5vdCBzdXBwb3J0IGF1dGhlbnRpY2F0ZWQgdmFyaWFi bGUgd3JpdGUuDQogICAgPiArICAgICAgLy8NCiAgICA+ICsgICAgICByZXR1cm4gRUZJX1VOU1VQ UE9SVEVEOw0KICAgID4gKyAgICB9DQogICAgPiArICB9IGVsc2UgaWYgKChBdHRyaWJ1dGVzICYg RUZJX1ZBUklBQkxFX0hBUkRXQVJFX0VSUk9SX1JFQ09SRCkgIT0gMCkgew0KICAgID4gKyAgICBp ZiAoUGNkR2V0MzIgKFBjZEh3RXJyU3RvcmFnZVNpemUpID09IDApIHsNCiAgICA+ICsgICAgICAv Lw0KICAgID4gKyAgICAgIC8vIE5vdCBzdXBwb3J0IGhhcndhcmUgZXJyb3IgcmVjb3JkIHZhcmlh YmxlIHZhcmlhYmxlLg0KICAgID4gKyAgICAgIC8vDQogICAgPiArICAgICAgcmV0dXJuIEVGSV9V TlNVUFBPUlRFRDsNCiAgICA+ICsgICAgfQ0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAg QWNxdWlyZUxvY2tPbmx5QXRCb290VGltZSAoJm1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCiAgICA+ ID5WYXJpYWJsZUdsb2JhbC5WYXJpYWJsZVNlcnZpY2VzTG9jayk7DQogICAgPiArDQogICAgPiAr ICBTdGF0dXMgPSBWYXJpYWJsZVNlcnZpY2VRdWVyeVZhcmlhYmxlSW5mb0ludGVybmFsICgNCiAg ICA+ICsgICAgICAgICAgICAgQXR0cmlidXRlcywNCiAgICA+ICsgICAgICAgICAgICAgTWF4aW11 bVZhcmlhYmxlU3RvcmFnZVNpemUsDQogICAgPiArICAgICAgICAgICAgIFJlbWFpbmluZ1Zhcmlh YmxlU3RvcmFnZVNpemUsDQogICAgPiArICAgICAgICAgICAgIE1heGltdW1WYXJpYWJsZVNpemUN CiAgICA+ICsgICAgICAgICAgICAgKTsNCiAgICA+ICsNCiAgICA+ICsgIFJlbGVhc2VMb2NrT25s eUF0Qm9vdFRpbWUgKCZtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQogICAgPiA+VmFyaWFibGVHbG9i YWwuVmFyaWFibGVTZXJ2aWNlc0xvY2spOw0KICAgID4gKyAgcmV0dXJuIFN0YXR1czsNCiAgICA+ ICt9DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBUaGlzIGZ1bmN0aW9uIHJlY2xhaW1z IHZhcmlhYmxlIHN0b3JhZ2UgaWYgZnJlZSBzaXplIGlzIGJlbG93IHRoZSB0aHJlc2hvbGQuDQog ICAgPiArDQogICAgPiArICBDYXV0aW9uOiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBpbnZva2VkIGF0 IFNNTSBtb2RlLg0KICAgID4gKyAgQ2FyZSBtdXN0IGJlIHRha2VuIHRvIG1ha2Ugc3VyZSBub3Qg c2VjdXJpdHkgaXNzdWUuDQogICAgPiArDQogICAgPiArKiovDQogICAgPiArVk9JRA0KICAgID4g K1JlY2xhaW1Gb3JPUyAoDQogICAgPiArICBWT0lEDQogICAgPiArICApDQogICAgPiArew0KICAg ID4gKyAgRUZJX1NUQVRVUyAgICAgIFN0YXR1czsNCiAgICA+ICsgIFVJTlROICAgICAgICAgICBS ZW1haW5pbmdDb21tb25SdW50aW1lVmFyaWFibGVTcGFjZTsNCiAgICA+ICsgIFVJTlROICAgICAg ICAgICBSZW1haW5pbmdId0VyclZhcmlhYmxlU3BhY2U7DQogICAgPiArICBTVEFUSUMgQk9PTEVB TiAgUmVjbGFpbWVkOw0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIFRoaXMgZnVu Y3Rpb24gd2lsbCBiZSBjYWxsZWQgb25seSBvbmNlIGF0IEVuZE9mRHhlIG9yIFJlYWR5VG9Cb290 IGV2ZW50Lg0KICAgID4gKyAgLy8NCiAgICA+ICsgIGlmIChSZWNsYWltZWQpIHsNCiAgICA+ICsg ICAgcmV0dXJuOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgUmVjbGFpbWVkID0gVFJV RTsNCiAgICA+ICsNCiAgICA+ICsgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KICAgID4gKw0KICAg ID4gKyAgaWYgKG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+Q29tbW9uUnVudGltZVZhcmlhYmxlU3Bh Y2UgPA0KICAgID4gbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5Db21tb25WYXJpYWJsZVRvdGFsU2l6 ZSkgew0KICAgID4gKyAgICBSZW1haW5pbmdDb21tb25SdW50aW1lVmFyaWFibGVTcGFjZSA9IDA7 DQogICAgPiArICB9IGVsc2Ugew0KICAgID4gKyAgICBSZW1haW5pbmdDb21tb25SdW50aW1lVmFy aWFibGVTcGFjZSA9IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCiAgICA+ID5Db21tb25SdW50aW1l VmFyaWFibGVTcGFjZSAtIG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCiAgICA+ID5Db21tb25WYXJp YWJsZVRvdGFsU2l6ZTsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIFJlbWFpbmluZ0h3 RXJyVmFyaWFibGVTcGFjZSA9IFBjZEdldDMyIChQY2RId0VyclN0b3JhZ2VTaXplKSAtDQogICAg PiBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPkh3RXJyVmFyaWFibGVUb3RhbFNpemU7DQogICAgPiAr DQogICAgPiArICAvLw0KICAgID4gKyAgLy8gQ2hlY2sgaWYgdGhlIGZyZWUgYXJlYSBpcyBiZWxv dyBhIHRocmVzaG9sZC4NCiAgICA+ICsgIC8vDQogICAgPiArICBpZiAoKChSZW1haW5pbmdDb21t b25SdW50aW1lVmFyaWFibGVTcGFjZSA8IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCiAgICA+ID5N YXhWYXJpYWJsZVNpemUpIHx8DQogICAgPiArICAgICAgIChSZW1haW5pbmdDb21tb25SdW50aW1l VmFyaWFibGVTcGFjZSA8IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCiAgICA+ID5NYXhBdXRoVmFy aWFibGVTaXplKSkgfHwNCiAgICA+ICsgICAgICAoKFBjZEdldDMyIChQY2RId0VyclN0b3JhZ2VT aXplKSAhPSAwKSAmJg0KICAgID4gKyAgICAgICAoUmVtYWluaW5nSHdFcnJWYXJpYWJsZVNwYWNl IDwgUGNkR2V0MzINCiAgICA+IChQY2RNYXhIYXJkd2FyZUVycm9yVmFyaWFibGVTaXplKSkpKQ0K ICAgID4gKyAgew0KICAgID4gKyAgICBTdGF0dXMgPSBSZWNsYWltICgNCiAgICA+ICsgICAgICAg ICAgICAgICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLk5vblZvbGF0aWxl VmFyaWFibGVCYXNlLA0KICAgID4gKyAgICAgICAgICAgICAgICZtVmFyaWFibGVNb2R1bGVHbG9i YWwtPk5vblZvbGF0aWxlTGFzdFZhcmlhYmxlT2Zmc2V0LA0KICAgID4gKyAgICAgICAgICAgICAg IEZBTFNFLA0KICAgID4gKyAgICAgICAgICAgICAgIE5VTEwsDQogICAgPiArICAgICAgICAgICAg ICAgTlVMTCwNCiAgICA+ICsgICAgICAgICAgICAgICAwDQogICAgPiArICAgICAgICAgICAgICAg KTsNCiAgICA+ICsgICAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCiAgICA+ICsgIH0NCiAg ICA+ICt9DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBHZXQgbWF4aW11bSB2YXJpYWJs ZSBzaXplLCBjb3ZlcmluZyBib3RoIG5vbi12b2xhdGlsZSBhbmQgdm9sYXRpbGUgdmFyaWFibGVz Lg0KICAgID4gKw0KICAgID4gKyAgQHJldHVybiBNYXhpbXVtIHZhcmlhYmxlIHNpemUuDQogICAg PiArDQogICAgPiArKiovDQogICAgPiArVUlOVE4NCiAgICA+ICtHZXRNYXhWYXJpYWJsZVNpemUg KA0KICAgID4gKyAgVk9JRA0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIFVJTlROICBN YXhWYXJpYWJsZVNpemU7DQogICAgPiArDQogICAgPiArICBNYXhWYXJpYWJsZVNpemUgPSBHZXRO b25Wb2xhdGlsZU1heFZhcmlhYmxlU2l6ZSAoKTsNCiAgICA+ICsgIC8vDQogICAgPiArICAvLyBU aGUgY29uZGl0aW9uIGJlbG93IGZhaWxzIGltcGxpY2l0bHkgaWYgUGNkTWF4Vm9sYXRpbGVWYXJp YWJsZVNpemUgZXF1YWxzDQogICAgPiArICAvLyB0aGUgZGVmYXVsdCB6ZXJvIHZhbHVlLg0KICAg ID4gKyAgLy8NCiAgICA+ICsgIGlmIChNYXhWYXJpYWJsZVNpemUgPCBQY2RHZXQzMiAoUGNkTWF4 Vm9sYXRpbGVWYXJpYWJsZVNpemUpKSB7DQogICAgPiArICAgIE1heFZhcmlhYmxlU2l6ZSA9IFBj ZEdldDMyIChQY2RNYXhWb2xhdGlsZVZhcmlhYmxlU2l6ZSk7DQogICAgPiArICB9DQogICAgPiAr DQogICAgPiArICByZXR1cm4gTWF4VmFyaWFibGVTaXplOw0KICAgID4gK30NCiAgICA+ICsNCiAg ICA+ICsvKioNCiAgICA+ICsgIEZsdXNoIHRoZSBIT0IgdmFyaWFibGUgdG8gZmxhc2guDQogICAg PiArDQogICAgPiArICBAcGFyYW1baW5dIFZhcmlhYmxlTmFtZSAgICAgICBOYW1lIG9mIHZhcmlh YmxlIGhhcyBiZWVuIHVwZGF0ZWQgb3IgZGVsZXRlZC4NCiAgICA+ICsgIEBwYXJhbVtpbl0gVmVu ZG9yR3VpZCAgICAgICAgIEd1aWQgb2YgdmFyaWFibGUgaGFzIGJlZW4gdXBkYXRlZCBvciBkZWxl dGVkLg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK1ZPSUQNCiAgICA+ICtGbHVzaEhvYlZh cmlhYmxlVG9GbGFzaCAoDQogICAgPiArICBJTiBDSEFSMTYgICAgKlZhcmlhYmxlTmFtZSwNCiAg ICA+ICsgIElOIEVGSV9HVUlEICAqVmVuZG9yR3VpZA0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAg ICA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgIFN0YXR1czsNCiAgICA+ICsgIFZBUklBQkxF X1NUT1JFX0hFQURFUiAgICpWYXJpYWJsZVN0b3JlSGVhZGVyOw0KICAgID4gKyAgVkFSSUFCTEVf SEVBREVSICAgICAgICAgKlZhcmlhYmxlOw0KICAgID4gKyAgVk9JRCAgICAgICAgICAgICAgICAg ICAgKlZhcmlhYmxlRGF0YTsNCiAgICA+ICsgIFZBUklBQkxFX1BPSU5URVJfVFJBQ0sgIFZhcmlh YmxlUHRyVHJhY2s7DQogICAgPiArICBCT09MRUFOICAgICAgICAgICAgICAgICBFcnJvckZsYWc7 DQogICAgPiArICBCT09MRUFOICAgICAgICAgICAgICAgICBBdXRoRm9ybWF0Ow0KICAgID4gKw0K ICAgID4gKyAgRXJyb3JGbGFnICA9IEZBTFNFOw0KICAgID4gKyAgQXV0aEZvcm1hdCA9IG1WYXJp YWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdDsNCiAgICA+ICsNCiAg ICA+ICsgIC8vDQogICAgPiArICAvLyBGbHVzaCB0aGUgSE9CIHZhcmlhYmxlIHRvIGZsYXNoLg0K ICAgID4gKyAgLy8NCiAgICA+ICsgIGlmIChtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxl R2xvYmFsLkhvYlZhcmlhYmxlQmFzZSAhPSAwKSB7DQogICAgPiArICAgIFZhcmlhYmxlU3RvcmVI ZWFkZXIgPSAoVkFSSUFCTEVfU1RPUkVfSEVBREVSDQogICAgPiAqKShVSU5UTiltVmFyaWFibGVN b2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLkhvYlZhcmlhYmxlQmFzZTsNCiAgICA+ICsgICAg Ly8NCiAgICA+ICsgICAgLy8gU2V0IEhvYlZhcmlhYmxlQmFzZSB0byAwLCBpdCBjYW4gYXZvaWQg U2V0VmFyaWFibGUgdG8gY2FsbCBiYWNrLg0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICBtVmFy aWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLkhvYlZhcmlhYmxlQmFzZSA9IDA7DQog ICAgPiArICAgIGZvciAoIFZhcmlhYmxlID0gR2V0U3RhcnRQb2ludGVyIChWYXJpYWJsZVN0b3Jl SGVhZGVyKQ0KICAgID4gKyAgICAgICAgICA7IElzVmFsaWRWYXJpYWJsZUhlYWRlciAoVmFyaWFi bGUsIEdldEVuZFBvaW50ZXIgKFZhcmlhYmxlU3RvcmVIZWFkZXIpLA0KICAgID4gQXV0aEZvcm1h dCkNCiAgICA+ICsgICAgICAgICAgOyBWYXJpYWJsZSA9IEdldE5leHRWYXJpYWJsZVB0ciAoVmFy aWFibGUsIEF1dGhGb3JtYXQpDQogICAgPiArICAgICAgICAgICkNCiAgICA+ICsgICAgew0KICAg ID4gKyAgICAgIGlmIChWYXJpYWJsZS0+U3RhdGUgIT0gVkFSX0FEREVEKSB7DQogICAgPiArICAg ICAgICAvLw0KICAgID4gKyAgICAgICAgLy8gVGhlIEhPQiB2YXJpYWJsZSBoYXMgYmVlbiBzZXQg dG8gREVMRVRFRCBzdGF0ZSBpbiBsb2NhbC4NCiAgICA+ICsgICAgICAgIC8vDQogICAgPiArICAg ICAgICBjb250aW51ZTsNCiAgICA+ICsgICAgICB9DQogICAgPiArDQogICAgPiArICAgICAgQVNT RVJUICgoVmFyaWFibGUtPkF0dHJpYnV0ZXMgJiBFRklfVkFSSUFCTEVfTk9OX1ZPTEFUSUxFKSAh PSAwKTsNCiAgICA+ICsgICAgICBpZiAoKFZlbmRvckd1aWQgPT0gTlVMTCkgfHwgKFZhcmlhYmxl TmFtZSA9PSBOVUxMKSB8fA0KICAgID4gKyAgICAgICAgICAhQ29tcGFyZUd1aWQgKFZlbmRvckd1 aWQsIEdldFZlbmRvckd1aWRQdHIgKFZhcmlhYmxlLCBBdXRoRm9ybWF0KSkgfHwNCiAgICA+ICsg ICAgICAgICAgKFN0ckNtcCAoVmFyaWFibGVOYW1lLCBHZXRWYXJpYWJsZU5hbWVQdHIgKFZhcmlh YmxlLCBBdXRoRm9ybWF0KSkgIT0NCiAgICA+IDApKQ0KICAgID4gKyAgICAgIHsNCiAgICA+ICsg ICAgICAgIFZhcmlhYmxlRGF0YSA9IEdldFZhcmlhYmxlRGF0YVB0ciAoVmFyaWFibGUsIEF1dGhG b3JtYXQpOw0KICAgID4gKyAgICAgICAgRmluZFZhcmlhYmxlICgNCiAgICA+ICsgICAgICAgICAg R2V0VmFyaWFibGVOYW1lUHRyIChWYXJpYWJsZSwgQXV0aEZvcm1hdCksDQogICAgPiArICAgICAg ICAgIEdldFZlbmRvckd1aWRQdHIgKFZhcmlhYmxlLCBBdXRoRm9ybWF0KSwNCiAgICA+ICsgICAg ICAgICAgJlZhcmlhYmxlUHRyVHJhY2ssDQogICAgPiArICAgICAgICAgICZtVmFyaWFibGVNb2R1 bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLA0KICAgID4gKyAgICAgICAgICBGQUxTRQ0KICAgID4g KyAgICAgICAgICApOw0KICAgID4gKyAgICAgICAgU3RhdHVzID0gVXBkYXRlVmFyaWFibGUgKA0K ICAgID4gKyAgICAgICAgICAgICAgICAgICBHZXRWYXJpYWJsZU5hbWVQdHIgKFZhcmlhYmxlLCBB dXRoRm9ybWF0KSwNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgR2V0VmVuZG9yR3VpZFB0ciAo VmFyaWFibGUsIEF1dGhGb3JtYXQpLA0KICAgID4gKyAgICAgICAgICAgICAgICAgICBWYXJpYWJs ZURhdGEsDQogICAgPiArICAgICAgICAgICAgICAgICAgIERhdGFTaXplT2ZWYXJpYWJsZSAoVmFy aWFibGUsIEF1dGhGb3JtYXQpLA0KICAgID4gKyAgICAgICAgICAgICAgICAgICBWYXJpYWJsZS0+ QXR0cmlidXRlcywNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgMCwNCiAgICA+ICsgICAgICAg ICAgICAgICAgICAgMCwNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgJlZhcmlhYmxlUHRyVHJh Y2ssDQogICAgPiArICAgICAgICAgICAgICAgICAgIE5VTEwNCiAgICA+ICsgICAgICAgICAgICAg ICAgICAgKTsNCiAgICA+ICsgICAgICAgIERFQlVHICgoDQogICAgPiArICAgICAgICAgIERFQlVH X0lORk8sDQogICAgPiArICAgICAgICAgICJWYXJpYWJsZSBkcml2ZXIgZmx1c2ggdGhlIEhPQiB2 YXJpYWJsZSB0byBmbGFzaDogJWcgJXMgJXJcbiIsDQogICAgPiArICAgICAgICAgIEdldFZlbmRv ckd1aWRQdHIgKFZhcmlhYmxlLCBBdXRoRm9ybWF0KSwNCiAgICA+ICsgICAgICAgICAgR2V0VmFy aWFibGVOYW1lUHRyIChWYXJpYWJsZSwgQXV0aEZvcm1hdCksDQogICAgPiArICAgICAgICAgIFN0 YXR1cw0KICAgID4gKyAgICAgICAgICApKTsNCiAgICA+ICsgICAgICB9IGVsc2Ugew0KICAgID4g KyAgICAgICAgLy8NCiAgICA+ICsgICAgICAgIC8vIFRoZSB1cGRhdGVkIG9yIGRlbGV0ZWQgdmFy aWFibGUgaXMgbWF0Y2hlZCB3aXRoIHRoaXMgSE9CIHZhcmlhYmxlLg0KICAgID4gKyAgICAgICAg Ly8gRG9uJ3QgYnJlYWsgaGVyZSBiZWNhdXNlIHdlIHdpbGwgdHJ5IHRvIHNldCBvdGhlciBIT0Ig dmFyaWFibGVzDQogICAgPiArICAgICAgICAvLyBzaW5jZSB0aGlzIHZhcmlhYmxlIGNvdWxkIGJl IHNldCBzdWNjZXNzZnVsbHkuDQogICAgPiArICAgICAgICAvLw0KICAgID4gKyAgICAgICAgU3Rh dHVzID0gRUZJX1NVQ0NFU1M7DQogICAgPiArICAgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICAg IGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAgPiArICAgICAgICAvLw0KICAgID4gKyAg ICAgICAgLy8gSWYgc2V0IHZhcmlhYmxlIHN1Y2Nlc3NmdWwsIG9yIHRoZSB1cGRhdGVkIG9yIGRl bGV0ZWQgdmFyaWFibGUgaXMgbWF0Y2hlZA0KICAgID4gd2l0aCB0aGUgSE9CIHZhcmlhYmxlLA0K ICAgID4gKyAgICAgICAgLy8gc2V0IHRoZSBIT0IgdmFyaWFibGUgdG8gREVMRVRFRCBzdGF0ZSBp biBsb2NhbC4NCiAgICA+ICsgICAgICAgIC8vDQogICAgPiArICAgICAgICBERUJVRyAoKA0KICAg ID4gKyAgICAgICAgICBERUJVR19JTkZPLA0KICAgID4gKyAgICAgICAgICAiVmFyaWFibGUgZHJp dmVyIHNldCB0aGUgSE9CIHZhcmlhYmxlIHRvIERFTEVURUQgc3RhdGUgaW4gbG9jYWw6ICVnICVz XG4iLA0KICAgID4gKyAgICAgICAgICBHZXRWZW5kb3JHdWlkUHRyIChWYXJpYWJsZSwgQXV0aEZv cm1hdCksDQogICAgPiArICAgICAgICAgIEdldFZhcmlhYmxlTmFtZVB0ciAoVmFyaWFibGUsIEF1 dGhGb3JtYXQpDQogICAgPiArICAgICAgICAgICkpOw0KICAgID4gKyAgICAgICAgVmFyaWFibGUt PlN0YXRlICY9IFZBUl9ERUxFVEVEOw0KICAgID4gKyAgICAgIH0gZWxzZSB7DQogICAgPiArICAg ICAgICBFcnJvckZsYWcgPSBUUlVFOw0KICAgID4gKyAgICAgIH0NCiAgICA+ICsgICAgfQ0KICAg ID4gKw0KICAgID4gKyAgICBpZiAobVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KICAgID4gPlZhcmlh YmxlR2xvYmFsLlZhcmlhYmxlUnVudGltZUNhY2hlQ29udGV4dC5WYXJpYWJsZVJ1bnRpbWVIb2JD YWNoZS5TdG9yDQogICAgPiBlICE9IE5VTEwpIHsNCiAgICA+ICsgICAgICBTdGF0dXMgPSAgU3lu Y2hyb25pemVSdW50aW1lVmFyaWFibGVDYWNoZSAoDQogICAgPiArICAgICAgICAgICAgICAgICAg Jm1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCiAgICA+ID5WYXJpYWJsZUdsb2JhbC5WYXJpYWJsZVJ1 bnRpbWVDYWNoZUNvbnRleHQuVmFyaWFibGVSdW50aW1lSG9iQ2FjaGUsDQogICAgPiArICAgICAg ICAgICAgICAgICAgMCwNCiAgICA+ICsgICAgICAgICAgICAgICAgICBtVmFyaWFibGVNb2R1bGVH bG9iYWwtDQogICAgPiA+VmFyaWFibGVHbG9iYWwuVmFyaWFibGVSdW50aW1lQ2FjaGVDb250ZXh0 LlZhcmlhYmxlUnVudGltZUhvYkNhY2hlLlN0b3INCiAgICA+IGUtPlNpemUNCiAgICA+ICsgICAg ICAgICAgICAgICAgICApOw0KICAgID4gKyAgICAgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7 DQogICAgPiArICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgaWYgKEVycm9yRmxhZykgew0KICAg ID4gKyAgICAgIC8vDQogICAgPiArICAgICAgLy8gV2Ugc3RpbGwgaGF2ZSBIT0IgdmFyaWFibGUo cykgbm90IGZsdXNoZWQgaW4gZmxhc2guDQogICAgPiArICAgICAgLy8NCiAgICA+ICsgICAgICBt VmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLkhvYlZhcmlhYmxlQmFzZSA9DQog ICAgPiAoRUZJX1BIWVNJQ0FMX0FERFJFU1MpKFVJTlROKVZhcmlhYmxlU3RvcmVIZWFkZXI7DQog ICAgPiArICAgIH0gZWxzZSB7DQogICAgPiArICAgICAgLy8NCiAgICA+ICsgICAgICAvLyBBbGwg SE9CIHZhcmlhYmxlcyBoYXZlIGJlZW4gZmx1c2hlZCBpbiBmbGFzaC4NCiAgICA+ICsgICAgICAv Lw0KICAgID4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlZhcmlhYmxlIGRyaXZlcjogYWxs IEhPQiB2YXJpYWJsZXMgaGF2ZSBiZWVuDQogICAgPiBmbHVzaGVkIGluIGZsYXNoLlxuIikpOw0K ICAgID4gKyAgICAgIGlmIChtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQogICAgPiA+VmFyaWFibGVH bG9iYWwuVmFyaWFibGVSdW50aW1lQ2FjaGVDb250ZXh0LkhvYkZsdXNoQ29tcGxldGUgIT0gTlVM TCkgew0KICAgID4gKyAgICAgICAgKihtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQogICAgPiA+VmFy aWFibGVHbG9iYWwuVmFyaWFibGVSdW50aW1lQ2FjaGVDb250ZXh0LkhvYkZsdXNoQ29tcGxldGUp ID0gVFJVRTsNCiAgICA+ICsgICAgICB9DQogICAgPiArDQogICAgPiArICAgICAgaWYgKCFBdFJ1 bnRpbWUgKCkpIHsNCiAgICA+ICsgICAgICAgIEZyZWVQb29sICgoVk9JRCAqKVZhcmlhYmxlU3Rv cmVIZWFkZXIpOw0KICAgID4gKyAgICAgIH0NCiAgICA+ICsgICAgfQ0KICAgID4gKyAgfQ0KICAg ID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIEluaXRpYWxpemVzIHZhcmlhYmxl IHdyaXRlIHNlcnZpY2UuDQogICAgPiArDQogICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgIEZ1bmN0aW9uIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4NCiAgICA+ICsgIEByZXR2YWwg T3RoZXJzICAgICAgICAgICAgICAgRmFpbCB0byBpbml0aWFsaXplIHRoZSB2YXJpYWJsZSBzZXJ2 aWNlLg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK0VGSV9TVEFUVVMNCiAgICA+ICtWYXJp YWJsZVdyaXRlU2VydmljZUluaXRpYWxpemUgKA0KICAgID4gKyAgVk9JRA0KICAgID4gKyAgKQ0K ICAgID4gK3sNCiAgICA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICBTdGF0dXM7DQogICAg PiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQogICAgPiArICBVSU5UOCAgICAg ICAgICAgICAgICAgICAgRGF0YTsNCiAgICA+ICsgIFZBUklBQkxFX0VOVFJZX1BST1BFUlRZICAq VmFyaWFibGVFbnRyeTsNCiAgICA+ICsNCiAgICA+ICsgIEFjcXVpcmVMb2NrT25seUF0Qm9vdFRp bWUgKCZtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQogICAgPiA+VmFyaWFibGVHbG9iYWwuVmFyaWFi bGVTZXJ2aWNlc0xvY2spOw0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIENoZWNr IGlmIHRoZSBmcmVlIGFyZWEgaXMgcmVhbGx5IGZyZWUuDQogICAgPiArICAvLw0KICAgID4gKyAg Zm9yIChJbmRleCA9IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+Tm9uVm9sYXRpbGVMYXN0VmFyaWFi bGVPZmZzZXQ7IEluZGV4IDwNCiAgICA+IG1OdlZhcmlhYmxlQ2FjaGUtPlNpemU7IEluZGV4Kysp IHsNCiAgICA+ICsgICAgRGF0YSA9ICgoVUlOVDggKiltTnZWYXJpYWJsZUNhY2hlKVtJbmRleF07 DQogICAgPiArICAgIGlmIChEYXRhICE9IDB4ZmYpIHsNCiAgICA+ICsgICAgICAvLw0KICAgID4g KyAgICAgIC8vIFRoZXJlIG11c3QgYmUgc29tZXRoaW5nIHdyb25nIGluIHZhcmlhYmxlIHN0b3Jl LCBkbyByZWNsYWltIG9wZXJhdGlvbi4NCiAgICA+ICsgICAgICAvLw0KICAgID4gKyAgICAgIFN0 YXR1cyA9IFJlY2xhaW0gKA0KICAgID4gKyAgICAgICAgICAgICAgICAgbVZhcmlhYmxlTW9kdWxl R2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5Ob25Wb2xhdGlsZVZhcmlhYmxlQmFzZSwNCiAgICA+ICsg ICAgICAgICAgICAgICAgICZtVmFyaWFibGVNb2R1bGVHbG9iYWwtPk5vblZvbGF0aWxlTGFzdFZh cmlhYmxlT2Zmc2V0LA0KICAgID4gKyAgICAgICAgICAgICAgICAgRkFMU0UsDQogICAgPiArICAg ICAgICAgICAgICAgICBOVUxMLA0KICAgID4gKyAgICAgICAgICAgICAgICAgTlVMTCwNCiAgICA+ ICsgICAgICAgICAgICAgICAgIDANCiAgICA+ICsgICAgICAgICAgICAgICAgICk7DQogICAgPiAr ICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgID4gKyAgICAgICAgUmVsZWFzZUxv Y2tPbmx5QXRCb290VGltZSAoJm1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCiAgICA+ID5WYXJpYWJs ZUdsb2JhbC5WYXJpYWJsZVNlcnZpY2VzTG9jayk7DQogICAgPiArICAgICAgICByZXR1cm4gU3Rh dHVzOw0KICAgID4gKyAgICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgICBicmVhazsNCiAgICA+ ICsgICAgfQ0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgRmx1c2hIb2JWYXJpYWJsZVRv Rmxhc2ggKE5VTEwsIE5VTEwpOw0KICAgID4gKw0KICAgID4gKyAgU3RhdHVzID0gRUZJX1NVQ0NF U1M7DQogICAgPiArICBaZXJvTWVtICgmbUF1dGhDb250ZXh0T3V0LCBzaXplb2YgKG1BdXRoQ29u dGV4dE91dCkpOw0KICAgID4gKyAgaWYgKG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVH bG9iYWwuQXV0aEZvcm1hdCkgew0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICAvLyBBdXRoZW50 aWNhdGVkIHZhcmlhYmxlIGluaXRpYWxpemUuDQogICAgPiArICAgIC8vDQogICAgPiArICAgIG1B dXRoQ29udGV4dEluLlN0cnVjdFNpemUgICAgICAgICAgPSBzaXplb2YgKEFVVEhfVkFSX0xJQl9D T05URVhUX0lOKTsNCiAgICA+ICsgICAgbUF1dGhDb250ZXh0SW4uTWF4QXV0aFZhcmlhYmxlU2l6 ZSA9ICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQogICAgPiA+TWF4QXV0aFZhcmlhYmxlU2l6ZSAt DQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRWYXJp YWJsZUhlYWRlclNpemUgKG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCiAgICA+ID5WYXJpYWJsZUds b2JhbC5BdXRoRm9ybWF0KTsNCiAgICA+ICsgICAgU3RhdHVzID0gQXV0aFZhcmlhYmxlTGliSW5p dGlhbGl6ZSAoJm1BdXRoQ29udGV4dEluLCAmbUF1dGhDb250ZXh0T3V0KTsNCiAgICA+ICsgICAg aWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCiAgICA+ICsgICAgICBERUJVRyAoKERFQlVHX0lO Rk8sICJWYXJpYWJsZSBkcml2ZXIgd2lsbCB3b3JrIHdpdGggYXV0aCB2YXJpYWJsZQ0KICAgID4g c3VwcG9ydCFcbiIpKTsNCiAgICA+ICsgICAgICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlh YmxlR2xvYmFsLkF1dGhTdXBwb3J0ID0gVFJVRTsNCiAgICA+ICsgICAgICBpZiAobUF1dGhDb250 ZXh0T3V0LkF1dGhWYXJFbnRyeSAhPSBOVUxMKSB7DQogICAgPiArICAgICAgICBmb3IgKEluZGV4 ID0gMDsgSW5kZXggPCBtQXV0aENvbnRleHRPdXQuQXV0aFZhckVudHJ5Q291bnQ7IEluZGV4Kysp IHsNCiAgICA+ICsgICAgICAgICAgVmFyaWFibGVFbnRyeSA9ICZtQXV0aENvbnRleHRPdXQuQXV0 aFZhckVudHJ5W0luZGV4XTsNCiAgICA+ICsgICAgICAgICAgU3RhdHVzICAgICAgICA9IFZhckNo ZWNrTGliVmFyaWFibGVQcm9wZXJ0eVNldCAoDQogICAgPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFZhcmlhYmxlRW50cnktPk5hbWUsDQogICAgPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFZhcmlhYmxlRW50cnktPkd1aWQsDQogICAgPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZWYXJpYWJsZUVudHJ5LT5WYXJpYWJsZVByb3BlcnR5DQogICAgPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7DQogICAgPiArICAgICAgICAgIEFTU0VSVF9FRklfRVJST1Ig KFN0YXR1cyk7DQogICAgPiArICAgICAgICB9DQogICAgPiArICAgICAgfQ0KICAgID4gKyAgICB9 IGVsc2UgaWYgKFN0YXR1cyA9PSBFRklfVU5TVVBQT1JURUQpIHsNCiAgICA+ICsgICAgICBERUJV RyAoKERFQlVHX0lORk8sICJOT1RJQ0UgLSBBdXRoVmFyaWFibGVMaWJJbml0aWFsaXplKCkgcmV0 dXJucyAlciFcbiIsDQogICAgPiBTdGF0dXMpKTsNCiAgICA+ICsgICAgICBERUJVRyAoKERFQlVH X0lORk8sICJWYXJpYWJsZSBkcml2ZXIgd2lsbCBjb250aW51ZSB0byB3b3JrIHdpdGhvdXQgYXV0 aA0KICAgID4gdmFyaWFibGUgc3VwcG9ydCFcbiIpKTsNCiAgICA+ICsgICAgICBtVmFyaWFibGVN b2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLkF1dGhTdXBwb3J0ID0gRkFMU0U7DQogICAgPiAr ICAgICAgU3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9 IEVGSV9TVUNDRVNTOw0KICAgID4gKyAgICB9DQogICAgPiArICB9DQogICAgPiArDQogICAgPiAr ICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgID4gKyAgICBmb3IgKEluZGV4ID0gMDsg SW5kZXggPCBBUlJBWV9TSVpFIChtVmFyaWFibGVFbnRyeVByb3BlcnR5KTsgSW5kZXgrKykgew0K ICAgID4gKyAgICAgIFZhcmlhYmxlRW50cnkgPSAmbVZhcmlhYmxlRW50cnlQcm9wZXJ0eVtJbmRl eF07DQogICAgPiArICAgICAgU3RhdHVzICAgICAgICA9IFZhckNoZWNrTGliVmFyaWFibGVQcm9w ZXJ0eVNldCAoVmFyaWFibGVFbnRyeS0+TmFtZSwNCiAgICA+IFZhcmlhYmxlRW50cnktPkd1aWQs ICZWYXJpYWJsZUVudHJ5LT5WYXJpYWJsZVByb3BlcnR5KTsNCiAgICA+ICsgICAgICBBU1NFUlRf RUZJX0VSUk9SIChTdGF0dXMpOw0KICAgID4gKyAgICB9DQogICAgPiArICB9DQogICAgPiArDQog ICAgPiArICBSZWxlYXNlTG9ja09ubHlBdEJvb3RUaW1lICgmbVZhcmlhYmxlTW9kdWxlR2xvYmFs LQ0KICAgID4gPlZhcmlhYmxlR2xvYmFsLlZhcmlhYmxlU2VydmljZXNMb2NrKTsNCiAgICA+ICsN CiAgICA+ICsgIC8vDQogICAgPiArICAvLyBJbml0aWFsaXplIE1PUiBMb2NrIHZhcmlhYmxlLg0K ICAgID4gKyAgLy8NCiAgICA+ICsgIE1vckxvY2tJbml0ICgpOw0KICAgID4gKw0KICAgID4gKyAg cmV0dXJuIFN0YXR1czsNCiAgICA+ICt9DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBD b252ZXJ0IG5vcm1hbCB2YXJpYWJsZSBzdG9yYWdlIHRvIHRoZSBhbGxvY2F0ZWQgYXV0aCB2YXJp YWJsZSBzdG9yYWdlLg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtW2luXSAgTm9ybWFsVmFyU3Rv cmFnZSAgUG9pbnRlciB0byB0aGUgbm9ybWFsIHZhcmlhYmxlIHN0b3JhZ2UNCiAgICA+IGhlYWRl cg0KICAgID4gKw0KICAgID4gKyAgQHJldHZhbCB0aGUgYWxsb2NhdGVkIGF1dGggdmFyaWFibGUg c3RvcmFnZQ0KICAgID4gKyoqLw0KICAgID4gK1ZPSUQgKg0KICAgID4gK0NvbnZlcnROb3JtYWxW YXJTdG9yYWdlVG9BdXRoVmFyU3RvcmFnZSAoDQogICAgPiArICBWQVJJQUJMRV9TVE9SRV9IRUFE RVIgICpOb3JtYWxWYXJTdG9yYWdlDQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgVkFS SUFCTEVfSEVBREVSICAgICAgICAgICAgICAgICpTdGFydFB0cjsNCiAgICA+ICsgIFVJTlQ4ICAg ICAgICAgICAgICAgICAgICAgICAgICAqTmV4dFB0cjsNCiAgICA+ICsgIFZBUklBQkxFX0hFQURF UiAgICAgICAgICAgICAgICAqRW5kUHRyOw0KICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAg ICAgICAgICAgIEF1dGhWYXJTdG9yYWdlU2l6ZTsNCiAgICA+ICsgIEFVVEhFTlRJQ0FURURfVkFS SUFCTEVfSEVBREVSICAqQXV0aFN0YXJ0UHRyOw0KICAgID4gKyAgVkFSSUFCTEVfU1RPUkVfSEVB REVSICAgICAgICAgICpBdXRoVmFyU3RvcmFnZTsNCiAgICA+ICsNCiAgICA+ICsgIEF1dGhWYXJT dG9yYWdlU2l6ZSA9IHNpemVvZiAoVkFSSUFCTEVfU1RPUkVfSEVBREVSKTsNCiAgICA+ICsgIC8v DQogICAgPiArICAvLyBTZXQgQXV0aEZvcm1hdCBhcyBGQUxTRSBmb3Igbm9ybWFsIHZhcmlhYmxl IHN0b3JhZ2UNCiAgICA+ICsgIC8vDQogICAgPiArICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZh cmlhYmxlR2xvYmFsLkF1dGhGb3JtYXQgPSBGQUxTRTsNCiAgICA+ICsNCiAgICA+ICsgIC8vDQog ICAgPiArICAvLyBDYWxjdWxhdGUgQXV0aCBWYXJpYWJsZSBTdG9yYWdlIFNpemUNCiAgICA+ICsg IC8vDQogICAgPiArICBTdGFydFB0ciA9IEdldFN0YXJ0UG9pbnRlciAoTm9ybWFsVmFyU3RvcmFn ZSk7DQogICAgPiArICBFbmRQdHIgICA9IEdldEVuZFBvaW50ZXIgKE5vcm1hbFZhclN0b3JhZ2Up Ow0KICAgID4gKyAgd2hpbGUgKFN0YXJ0UHRyIDwgRW5kUHRyKSB7DQogICAgPiArICAgIGlmIChT dGFydFB0ci0+U3RhdGUgPT0gVkFSX0FEREVEKSB7DQogICAgPiArICAgICAgQXV0aFZhclN0b3Jh Z2VTaXplICA9IEhFQURFUl9BTElHTiAoQXV0aFZhclN0b3JhZ2VTaXplKTsNCiAgICA+ICsgICAg ICBBdXRoVmFyU3RvcmFnZVNpemUgKz0gc2l6ZW9mIChBVVRIRU5USUNBVEVEX1ZBUklBQkxFX0hF QURFUik7DQogICAgPiArICAgICAgQXV0aFZhclN0b3JhZ2VTaXplICs9IFN0YXJ0UHRyLT5OYW1l U2l6ZSArIEdFVF9QQURfU0laRSAoU3RhcnRQdHItDQogICAgPiA+TmFtZVNpemUpOw0KICAgID4g KyAgICAgIEF1dGhWYXJTdG9yYWdlU2l6ZSArPSBTdGFydFB0ci0+RGF0YVNpemUgKyBHRVRfUEFE X1NJWkUgKFN0YXJ0UHRyLQ0KICAgID4gPkRhdGFTaXplKTsNCiAgICA+ICsgICAgfQ0KICAgID4g Kw0KICAgID4gKyAgICBTdGFydFB0ciA9IEdldE5leHRWYXJpYWJsZVB0ciAoU3RhcnRQdHIsIG1W YXJpYWJsZU1vZHVsZUdsb2JhbC0NCiAgICA+ID5WYXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0KTsN CiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIC8vDQogICAgPiArICAvLyBBbGxvY2F0ZSBS dW50aW1lIG1lbW9yeSBmb3IgQXV0aCBWYXJpYWJsZSBTdG9yYWdlDQogICAgPiArICAvLw0KICAg ID4gKyAgQXV0aFZhclN0b3JhZ2UgPSBBbGxvY2F0ZVJ1bnRpbWVaZXJvUG9vbCAoQXV0aFZhclN0 b3JhZ2VTaXplKTsNCiAgICA+ICsgIEFTU0VSVCAoQXV0aFZhclN0b3JhZ2UgIT0gTlVMTCk7DQog ICAgPiArICBpZiAoQXV0aFZhclN0b3JhZ2UgPT0gTlVMTCkgew0KICAgID4gKyAgICByZXR1cm4g TlVMTDsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIC8vDQogICAgPiArICAvLyBDb3B5 IFZhcmlhYmxlIGZyb20gTm9ybWFsIHN0b3JhZ2UgdG8gQXV0aCBzdG9yYWdlDQogICAgPiArICAv Lw0KICAgID4gKyAgU3RhcnRQdHIgICAgID0gR2V0U3RhcnRQb2ludGVyIChOb3JtYWxWYXJTdG9y YWdlKTsNCiAgICA+ICsgIEVuZFB0ciAgICAgICA9IEdldEVuZFBvaW50ZXIgKE5vcm1hbFZhclN0 b3JhZ2UpOw0KICAgID4gKyAgQXV0aFN0YXJ0UHRyID0gKEFVVEhFTlRJQ0FURURfVkFSSUFCTEVf SEVBREVSICopR2V0U3RhcnRQb2ludGVyDQogICAgPiAoQXV0aFZhclN0b3JhZ2UpOw0KICAgID4g KyAgd2hpbGUgKFN0YXJ0UHRyIDwgRW5kUHRyKSB7DQogICAgPiArICAgIGlmIChTdGFydFB0ci0+ U3RhdGUgPT0gVkFSX0FEREVEKSB7DQogICAgPiArICAgICAgQXV0aFN0YXJ0UHRyID0gKEFVVEhF TlRJQ0FURURfVkFSSUFCTEVfSEVBREVSICopSEVBREVSX0FMSUdODQogICAgPiAoQXV0aFN0YXJ0 UHRyKTsNCiAgICA+ICsgICAgICAvLw0KICAgID4gKyAgICAgIC8vIENvcHkgVmFyaWFibGUgSGVh ZGVyDQogICAgPiArICAgICAgLy8NCiAgICA+ICsgICAgICBBdXRoU3RhcnRQdHItPlN0YXJ0SWQg ICAgPSBTdGFydFB0ci0+U3RhcnRJZDsNCiAgICA+ICsgICAgICBBdXRoU3RhcnRQdHItPlN0YXRl ICAgICAgPSBTdGFydFB0ci0+U3RhdGU7DQogICAgPiArICAgICAgQXV0aFN0YXJ0UHRyLT5BdHRy aWJ1dGVzID0gU3RhcnRQdHItPkF0dHJpYnV0ZXM7DQogICAgPiArICAgICAgQXV0aFN0YXJ0UHRy LT5OYW1lU2l6ZSAgID0gU3RhcnRQdHItPk5hbWVTaXplOw0KICAgID4gKyAgICAgIEF1dGhTdGFy dFB0ci0+RGF0YVNpemUgICA9IFN0YXJ0UHRyLT5EYXRhU2l6ZTsNCiAgICA+ICsgICAgICBDb3B5 R3VpZCAoJkF1dGhTdGFydFB0ci0+VmVuZG9yR3VpZCwgJlN0YXJ0UHRyLT5WZW5kb3JHdWlkKTsN CiAgICA+ICsgICAgICAvLw0KICAgID4gKyAgICAgIC8vIENvcHkgVmFyaWFibGUgTmFtZQ0KICAg ID4gKyAgICAgIC8vDQogICAgPiArICAgICAgTmV4dFB0ciA9IChVSU5UOCAqKShBdXRoU3RhcnRQ dHIgKyAxKTsNCiAgICA+ICsgICAgICBDb3B5TWVtICgNCiAgICA+ICsgICAgICAgIE5leHRQdHIs DQogICAgPiArICAgICAgICBHZXRWYXJpYWJsZU5hbWVQdHIgKFN0YXJ0UHRyLCBtVmFyaWFibGVN b2R1bGVHbG9iYWwtDQogICAgPiA+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdCksDQogICAgPiAr ICAgICAgICBBdXRoU3RhcnRQdHItPk5hbWVTaXplDQogICAgPiArICAgICAgICApOw0KICAgID4g KyAgICAgIC8vDQogICAgPiArICAgICAgLy8gQ29weSBWYXJpYWJsZSBEYXRhDQogICAgPiArICAg ICAgLy8NCiAgICA+ICsgICAgICBOZXh0UHRyID0gTmV4dFB0ciArIEF1dGhTdGFydFB0ci0+TmFt ZVNpemUgKyBHRVRfUEFEX1NJWkUgKEF1dGhTdGFydFB0ci0NCiAgICA+ID5OYW1lU2l6ZSk7DQog ICAgPiArICAgICAgQ29weU1lbSAoTmV4dFB0ciwgR2V0VmFyaWFibGVEYXRhUHRyIChTdGFydFB0 ciwgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KICAgID4gPlZhcmlhYmxlR2xvYmFsLkF1dGhGb3Jt YXQpLCBBdXRoU3RhcnRQdHItPkRhdGFTaXplKTsNCiAgICA+ICsgICAgICAvLw0KICAgID4gKyAg ICAgIC8vIEdvIHRvIG5leHQgdmFyaWFibGUNCiAgICA+ICsgICAgICAvLw0KICAgID4gKyAgICAg IEF1dGhTdGFydFB0ciA9IChBVVRIRU5USUNBVEVEX1ZBUklBQkxFX0hFQURFUiAqKShOZXh0UHRy ICsNCiAgICA+IEF1dGhTdGFydFB0ci0+RGF0YVNpemUgKyBHRVRfUEFEX1NJWkUgKEF1dGhTdGFy dFB0ci0+RGF0YVNpemUpKTsNCiAgICA+ICsgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICBTdGFy dFB0ciA9IEdldE5leHRWYXJpYWJsZVB0ciAoU3RhcnRQdHIsIG1WYXJpYWJsZU1vZHVsZUdsb2Jh bC0NCiAgICA+ID5WYXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0KTsNCiAgICA+ICsgIH0NCiAgICA+ ICsNCiAgICA+ICsgIC8vDQogICAgPiArICAvLyBVcGRhdGUgQXV0aCBTdG9yYWdlIEhlYWRlcg0K ICAgID4gKyAgLy8NCiAgICA+ICsgIEF1dGhWYXJTdG9yYWdlLT5Gb3JtYXQgPSBOb3JtYWxWYXJT dG9yYWdlLT5Gb3JtYXQ7DQogICAgPiArICBBdXRoVmFyU3RvcmFnZS0+U3RhdGUgID0gTm9ybWFs VmFyU3RvcmFnZS0+U3RhdGU7DQogICAgPiArICBBdXRoVmFyU3RvcmFnZS0+U2l6ZSAgID0gKFVJ TlQzMikoKFVJTlROKUF1dGhTdGFydFB0ciAtDQogICAgPiAoVUlOVE4pQXV0aFZhclN0b3JhZ2Up Ow0KICAgID4gKyAgQ29weUd1aWQgKCZBdXRoVmFyU3RvcmFnZS0+U2lnbmF0dXJlLCAmZ0VmaUF1 dGhlbnRpY2F0ZWRWYXJpYWJsZUd1aWQpOw0KICAgID4gKyAgQVNTRVJUIChBdXRoVmFyU3RvcmFn ZS0+U2l6ZSA8PSBBdXRoVmFyU3RvcmFnZVNpemUpOw0KICAgID4gKw0KICAgID4gKyAgLy8NCiAg ICA+ICsgIC8vIFJlc3RvcmUgQXV0aEZvcm1hdA0KICAgID4gKyAgLy8NCiAgICA+ICsgIG1WYXJp YWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdCA9IFRSVUU7DQogICAg PiArICByZXR1cm4gQXV0aFZhclN0b3JhZ2U7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8q Kg0KICAgID4gKyAgR2V0IEhPQiB2YXJpYWJsZSBzdG9yZS4NCiAgICA+ICsNCiAgICA+ICsgIEBw YXJhbVtpbl0gVmFyaWFibGVHdWlkICAgICAgIE5WIHZhcmlhYmxlIHN0b3JlIHNpZ25hdHVyZS4N CiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIEZ1bmN0aW9u IHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4NCiAgICA+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNP VVJDRVMgIEZhaWwgdG8gYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSByZXNvdXJjZS4NCiAgICA+ICsN CiAgICA+ICsqKi8NCiAgICA+ICtFRklfU1RBVFVTDQogICAgPiArR2V0SG9iVmFyaWFibGVTdG9y ZSAoDQogICAgPiArICBJTiBFRklfR1VJRCAgKlZhcmlhYmxlR3VpZA0KICAgID4gKyAgKQ0KICAg ID4gK3sNCiAgICA+ICsgIFZBUklBQkxFX1NUT1JFX0hFQURFUiAgKlZhcmlhYmxlU3RvcmVIZWFk ZXI7DQogICAgPiArICBVSU5UNjQgICAgICAgICAgICAgICAgIFZhcmlhYmxlU3RvcmVMZW5ndGg7 DQogICAgPiArICBFRklfSE9CX0dVSURfVFlQRSAgICAgICpHdWlkSG9iOw0KICAgID4gKyAgQk9P TEVBTiAgICAgICAgICAgICAgICBOZWVkQ29udmVydE5vcm1hbFRvQXV0aDsNCiAgICA+ICsNCiAg ICA+ICsgIC8vDQogICAgPiArICAvLyBNYWtlIHN1cmUgdGhlcmUgaXMgbm8gbW9yZSB0aGFuIG9u ZSBWYXJpYWJsZSBIT0IuDQogICAgPiArICAvLw0KICAgID4gKyAgREVCVUdfQ09ERV9CRUdJTiAo KTsNCiAgICA+ICsgIEd1aWRIb2IgPSBHZXRGaXJzdEd1aWRIb2IgKCZnRWZpQXV0aGVudGljYXRl ZFZhcmlhYmxlR3VpZCk7DQogICAgPiArICBpZiAoR3VpZEhvYiAhPSBOVUxMKSB7DQogICAgPiAr ICAgIGlmICgoR2V0TmV4dEd1aWRIb2IgKCZnRWZpQXV0aGVudGljYXRlZFZhcmlhYmxlR3VpZCwg R0VUX05FWFRfSE9CDQogICAgPiAoR3VpZEhvYikpICE9IE5VTEwpKSB7DQogICAgPiArICAgICAg REVCVUcgKChERUJVR19FUlJPUiwgIkVSUk9SOiBGb3VuZCB0d28gQXV0aCBWYXJpYWJsZSBIT0Jz XG4iKSk7DQogICAgPiArICAgICAgQVNTRVJUIChGQUxTRSk7DQogICAgPiArICAgIH0gZWxzZSBp ZiAoR2V0Rmlyc3RHdWlkSG9iICgmZ0VmaVZhcmlhYmxlR3VpZCkgIT0gTlVMTCkgew0KICAgID4g KyAgICAgIERFQlVHICgoREVCVUdfRVJST1IsICJFUlJPUjogRm91bmQgb25lIEF1dGggKyBvbmUg Tm9ybWFsIFZhcmlhYmxlDQogICAgPiBIT0JzXG4iKSk7DQogICAgPiArICAgICAgQVNTRVJUIChG QUxTRSk7DQogICAgPiArICAgIH0NCiAgICA+ICsgIH0gZWxzZSB7DQogICAgPiArICAgIEd1aWRI b2IgPSBHZXRGaXJzdEd1aWRIb2IgKCZnRWZpVmFyaWFibGVHdWlkKTsNCiAgICA+ICsgICAgaWYg KEd1aWRIb2IgIT0gTlVMTCkgew0KICAgID4gKyAgICAgIGlmICgoR2V0TmV4dEd1aWRIb2IgKCZn RWZpVmFyaWFibGVHdWlkLCBHRVRfTkVYVF9IT0IgKEd1aWRIb2IpKSAhPQ0KICAgID4gTlVMTCkp IHsNCiAgICA+ICsgICAgICAgIERFQlVHICgoREVCVUdfRVJST1IsICJFUlJPUjogRm91bmQgdHdv IE5vcm1hbCBWYXJpYWJsZSBIT0JzXG4iKSk7DQogICAgPiArICAgICAgICBBU1NFUlQgKEZBTFNF KTsNCiAgICA+ICsgICAgICB9DQogICAgPiArICAgIH0NCiAgICA+ICsgIH0NCiAgICA+ICsNCiAg ICA+ICsgIERFQlVHX0NPREVfRU5EICgpOw0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsg IC8vIENvbWJpbmF0aW9ucyBzdXBwb3J0ZWQ6DQogICAgPiArICAvLyAxLiBOb3JtYWwgTlYgdmFy aWFibGUgc3RvcmUgKw0KICAgID4gKyAgLy8gICAgTm9ybWFsIEhPQiB2YXJpYWJsZSBzdG9yZQ0K ICAgID4gKyAgLy8gMi4gQXV0aCBOViB2YXJpYWJsZSBzdG9yZSArDQogICAgPiArICAvLyAgICBB dXRoIEhPQiB2YXJpYWJsZSBzdG9yZQ0KICAgID4gKyAgLy8gMy4gQXV0aCBOViB2YXJpYWJsZSBz dG9yZSArDQogICAgPiArICAvLyAgICBOb3JtYWwgSE9CIHZhcmlhYmxlIHN0b3JlIChjb2RlIHdp bGwgY29udmVydCBpdCB0byBBdXRoIEZvcm1hdCkNCiAgICA+ICsgIC8vDQogICAgPiArICBOZWVk Q29udmVydE5vcm1hbFRvQXV0aCA9IEZBTFNFOw0KICAgID4gKyAgR3VpZEhvYiAgICAgICAgICAg ICAgICAgPSBHZXRGaXJzdEd1aWRIb2IgKFZhcmlhYmxlR3VpZCk7DQogICAgPiArICBpZiAoKEd1 aWRIb2IgPT0gTlVMTCkgJiYgKFZhcmlhYmxlR3VpZCA9PSAmZ0VmaUF1dGhlbnRpY2F0ZWRWYXJp YWJsZUd1aWQpKSB7DQogICAgPiArICAgIC8vDQogICAgPiArICAgIC8vIFRyeSBnZXR0aW5nIGl0 IGZyb20gbm9ybWFsIHZhcmlhYmxlIEhPQg0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICBHdWlk SG9iICAgICAgICAgICAgICAgICA9IEdldEZpcnN0R3VpZEhvYiAoJmdFZmlWYXJpYWJsZUd1aWQp Ow0KICAgID4gKyAgICBOZWVkQ29udmVydE5vcm1hbFRvQXV0aCA9IFRSVUU7DQogICAgPiArICB9 DQogICAgPiArDQogICAgPiArICBpZiAoR3VpZEhvYiAhPSBOVUxMKSB7DQogICAgPiArICAgIFZh cmlhYmxlU3RvcmVIZWFkZXIgPSBHRVRfR1VJRF9IT0JfREFUQSAoR3VpZEhvYik7DQogICAgPiAr ICAgIFZhcmlhYmxlU3RvcmVMZW5ndGggPSBHdWlkSG9iLT5IZWFkZXIuSG9iTGVuZ3RoIC0gc2l6 ZW9mDQogICAgPiAoRUZJX0hPQl9HVUlEX1RZUEUpOw0KICAgID4gKyAgICBpZiAoR2V0VmFyaWFi bGVTdG9yZVN0YXR1cyAoVmFyaWFibGVTdG9yZUhlYWRlcikgPT0gRWZpVmFsaWQpIHsNCiAgICA+ ICsgICAgICBpZiAoIU5lZWRDb252ZXJ0Tm9ybWFsVG9BdXRoKSB7DQogICAgPiArICAgICAgICBt VmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLkhvYlZhcmlhYmxlQmFzZSA9DQog ICAgPiAoRUZJX1BIWVNJQ0FMX0FERFJFU1MpKFVJTlROKUFsbG9jYXRlUnVudGltZUNvcHlQb29s DQogICAgPiAoKFVJTlROKVZhcmlhYmxlU3RvcmVMZW5ndGgsIChWT0lEICopVmFyaWFibGVTdG9y ZUhlYWRlcik7DQogICAgPiArICAgICAgfSBlbHNlIHsNCiAgICA+ICsgICAgICAgIG1WYXJpYWJs ZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuSG9iVmFyaWFibGVCYXNlID0NCiAgICA+IChF RklfUEhZU0lDQUxfQUREUkVTUykoVUlOVE4pQ29udmVydE5vcm1hbFZhclN0b3JhZ2VUb0F1dGhW YXJTdG9yYWdlDQogICAgPiAoKFZPSUQgKilWYXJpYWJsZVN0b3JlSGVhZGVyKTsNCiAgICA+ICsg ICAgICB9DQogICAgPiArDQogICAgPiArICAgICAgaWYgKG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+ VmFyaWFibGVHbG9iYWwuSG9iVmFyaWFibGVCYXNlID09IDApIHsNCiAgICA+ICsgICAgICAgIHJl dHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCiAgICA+ICsgICAgICB9DQogICAgPiArICAgIH0g ZWxzZSB7DQogICAgPiArICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkhPQiBWYXJpYWJsZSBT dG9yZSBoZWFkZXIgaXMgY29ycnVwdGVkIVxuIikpOw0KICAgID4gKyAgICB9DQogICAgPiArICB9 DQogICAgPiArDQogICAgPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQogICAgPiArfQ0KICAgID4g Kw0KICAgID4gKy8qKg0KICAgID4gKyAgSW5pdGlhbGl6ZXMgdmFyaWFibGUgc3RvcmUgYXJlYSBm b3Igbm9uLXZvbGF0aWxlIGFuZCB2b2xhdGlsZSB2YXJpYWJsZS4NCiAgICA+ICsNCiAgICA+ICsg IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIEZ1bmN0aW9uIHN1Y2Nlc3NmdWxseSBleGVj dXRlZC4NCiAgICA+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgIEZhaWwgdG8gYWxs b2NhdGUgZW5vdWdoIG1lbW9yeSByZXNvdXJjZS4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ ICtFRklfU1RBVFVTDQogICAgPiArVmFyaWFibGVDb21tb25Jbml0aWFsaXplICgNCiAgICA+ICsg IFZPSUQNCiAgICA+ICsgICkNCiAgICA+ICt7DQogICAgPiArICBFRklfU1RBVFVTICAgICAgICAg ICAgIFN0YXR1czsNCiAgICA+ICsgIFZBUklBQkxFX1NUT1JFX0hFQURFUiAgKlZvbGF0aWxlVmFy aWFibGVTdG9yZTsNCiAgICA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgU2NyYXRjaFNpemU7 DQogICAgPiArICBFRklfR1VJRCAgICAgICAgICAgICAgICpWYXJpYWJsZUd1aWQ7DQogICAgPiAr DQogICAgPiArICAvLw0KICAgID4gKyAgLy8gQWxsb2NhdGUgcnVudGltZSBtZW1vcnkgZm9yIHZh cmlhYmxlIGRyaXZlciBnbG9iYWwgc3RydWN0dXJlLg0KICAgID4gKyAgLy8NCiAgICA+ICsgIG1W YXJpYWJsZU1vZHVsZUdsb2JhbCA9IEFsbG9jYXRlUnVudGltZVplcm9Qb29sIChzaXplb2YNCiAg ICA+IChWQVJJQUJMRV9NT0RVTEVfR0xPQkFMKSk7DQogICAgPiArICBpZiAobVZhcmlhYmxlTW9k dWxlR2xvYmFsID09IE5VTEwpIHsNCiAgICA+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VS Q0VTOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgSW5pdGlhbGl6ZUxvY2sgKCZtVmFy aWFibGVNb2R1bGVHbG9iYWwtDQogICAgPiA+VmFyaWFibGVHbG9iYWwuVmFyaWFibGVTZXJ2aWNl c0xvY2ssIFRQTF9OT1RJRlkpOw0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIElu aXQgbm9uLXZvbGF0aWxlIHZhcmlhYmxlIHN0b3JlLg0KICAgID4gKyAgLy8NCiAgICA+ICsgIFN0 YXR1cyA9IEluaXROb25Wb2xhdGlsZVZhcmlhYmxlU3RvcmUgKCk7DQogICAgPiArICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQogICAgPiArICAgIEZyZWVQb29sIChtVmFyaWFibGVNb2R1bGVH bG9iYWwpOw0KICAgID4gKyAgICByZXR1cm4gU3RhdHVzOw0KICAgID4gKyAgfQ0KICAgID4gKw0K ICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVH bG9iYWwuQXV0aEZvcm1hdA0KICAgID4gKyAgLy8gaGFzIGJlZW4gaW5pdGlhbGl6ZWQgaW4gSW5p dE5vblZvbGF0aWxlVmFyaWFibGVTdG9yZSgpLg0KICAgID4gKyAgLy8NCiAgICA+ICsgIGlmICht VmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLkF1dGhGb3JtYXQpIHsNCiAgICA+ ICsgICAgREVCVUcgKChERUJVR19JTkZPLCAiVmFyaWFibGUgZHJpdmVyIHdpbGwgd29yayB3aXRo IGF1dGggdmFyaWFibGUNCiAgICA+IGZvcm1hdCFcbiIpKTsNCiAgICA+ICsgICAgLy8NCiAgICA+ ICsgICAgLy8gU2V0IEF1dGhTdXBwb3J0IHRvIEZBTFNFIGZpcnN0LCBWYXJpYWJsZVdyaXRlU2Vy dmljZUluaXRpYWxpemUoKSB3aWxsIGluaXRpYWxpemUNCiAgICA+IGl0Lg0KICAgID4gKyAgICAv Lw0KICAgID4gKyAgICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLkF1dGhT dXBwb3J0ID0gRkFMU0U7DQogICAgPiArICAgIFZhcmlhYmxlR3VpZCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgPSAmZ0VmaUF1dGhlbnRpY2F0ZWRWYXJpYWJsZUd1aWQ7DQog ICAgPiArICB9IGVsc2Ugew0KICAgID4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJWYXJpYWJs ZSBkcml2ZXIgd2lsbCB3b3JrIHdpdGhvdXQgYXV0aCB2YXJpYWJsZQ0KICAgID4gc3VwcG9ydCFc biIpKTsNCiAgICA+ICsgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5B dXRoU3VwcG9ydCA9IEZBTFNFOw0KICAgID4gKyAgICBWYXJpYWJsZUd1aWQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgID0gJmdFZmlWYXJpYWJsZUd1aWQ7DQogICAgPiArICB9 DQogICAgPiArDQogICAgPiArICAvLw0KICAgID4gKyAgLy8gR2V0IEhPQiB2YXJpYWJsZSBzdG9y ZS4NCiAgICA+ICsgIC8vDQogICAgPiArICBTdGF0dXMgPSBHZXRIb2JWYXJpYWJsZVN0b3JlIChW YXJpYWJsZUd1aWQpOw0KICAgID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgID4g KyAgICBpZiAobU52RnZIZWFkZXJDYWNoZSAhPSBOVUxMKSB7DQogICAgPiArICAgICAgRnJlZVBv b2wgKG1OdkZ2SGVhZGVyQ2FjaGUpOw0KICAgID4gKyAgICB9DQogICAgPiArDQogICAgPiArICAg IEZyZWVQb29sIChtVmFyaWFibGVNb2R1bGVHbG9iYWwpOw0KICAgID4gKyAgICByZXR1cm4gU3Rh dHVzOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgbVZhcmlhYmxlTW9kdWxlR2xvYmFs LT5NYXhWb2xhdGlsZVZhcmlhYmxlU2l6ZSA9ICgoUGNkR2V0MzINCiAgICA+IChQY2RNYXhWb2xh dGlsZVZhcmlhYmxlU2l6ZSkgIT0gMCkgPw0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQY2RHZXQzMiAoUGNkTWF4Vm9sYXRpbGVWYXJp YWJsZVNpemUpIDoNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5NYXhWYXJpYWJsZVNpemUNCiAg ICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsNCiAgICA+ICsgIC8vDQogICAgPiArICAvLyBBbGxvY2F0ZSBtZW1vcnkgZm9yIHZvbGF0aWxl IHZhcmlhYmxlIHN0b3JlLCBub3RlIHRoYXQgdGhlcmUgaXMgYSBzY3JhdGNoDQogICAgPiBzcGFj ZSB0byBzdG9yZSBzY3JhdGNoIGRhdGEuDQogICAgPiArICAvLw0KICAgID4gKyAgU2NyYXRjaFNp emUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IEdldE1heFZhcmlhYmxlU2l6ZSAoKSAq IDI7DQogICAgPiArICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlNjcmF0Y2hCdWZmZXJTaXplID0g U2NyYXRjaFNpemU7DQogICAgPiArICBWb2xhdGlsZVZhcmlhYmxlU3RvcmUgICAgICAgICAgICAg ICAgICAgID0gQWxsb2NhdGVSdW50aW1lUG9vbCAoUGNkR2V0MzINCiAgICA+IChQY2RWYXJpYWJs ZVN0b3JlU2l6ZSkgKyBTY3JhdGNoU2l6ZSk7DQogICAgPiArICBpZiAoVm9sYXRpbGVWYXJpYWJs ZVN0b3JlID09IE5VTEwpIHsNCiAgICA+ICsgICAgaWYgKG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+ VmFyaWFibGVHbG9iYWwuSG9iVmFyaWFibGVCYXNlICE9IDApIHsNCiAgICA+ICsgICAgICBGcmVl UG9vbCAoKFZPSUQgKikoVUlOVE4pbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KICAgID4gPlZhcmlh YmxlR2xvYmFsLkhvYlZhcmlhYmxlQmFzZSk7DQogICAgPiArICAgIH0NCiAgICA+ICsNCiAgICA+ ICsgICAgaWYgKG1OdkZ2SGVhZGVyQ2FjaGUgIT0gTlVMTCkgew0KICAgID4gKyAgICAgIEZyZWVQ b29sIChtTnZGdkhlYWRlckNhY2hlKTsNCiAgICA+ICsgICAgfQ0KICAgID4gKw0KICAgID4gKyAg ICBGcmVlUG9vbCAobVZhcmlhYmxlTW9kdWxlR2xvYmFsKTsNCiAgICA+ICsgICAgcmV0dXJuIEVG SV9PVVRfT0ZfUkVTT1VSQ0VTOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgU2V0TWVt IChWb2xhdGlsZVZhcmlhYmxlU3RvcmUsIFBjZEdldDMyIChQY2RWYXJpYWJsZVN0b3JlU2l6ZSkg KyBTY3JhdGNoU2l6ZSwNCiAgICA+IDB4ZmYpOw0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ ICsgIC8vIEluaXRpYWxpemUgVmFyaWFibGUgU3BlY2lmaWMgRGF0YS4NCiAgICA+ICsgIC8vDQog ICAgPiArICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLlZvbGF0aWxlVmFy aWFibGVCYXNlID0NCiAgICA+IChFRklfUEhZU0lDQUxfQUREUkVTUykoVUlOVE4pVm9sYXRpbGVW YXJpYWJsZVN0b3JlOw0KICAgID4gKyAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5Wb2xhdGlsZUxh c3RWYXJpYWJsZU9mZnNldCAgICAgICAgICA9DQogICAgPiAoVUlOVE4pR2V0U3RhcnRQb2ludGVy IChWb2xhdGlsZVZhcmlhYmxlU3RvcmUpIC0gKFVJTlROKVZvbGF0aWxlVmFyaWFibGVTdG9yZTsN CiAgICA+ICsNCiAgICA+ICsgIENvcHlHdWlkICgmVm9sYXRpbGVWYXJpYWJsZVN0b3JlLT5TaWdu YXR1cmUsIFZhcmlhYmxlR3VpZCk7DQogICAgPiArICBWb2xhdGlsZVZhcmlhYmxlU3RvcmUtPlNp emUgICAgICA9IFBjZEdldDMyIChQY2RWYXJpYWJsZVN0b3JlU2l6ZSk7DQogICAgPiArICBWb2xh dGlsZVZhcmlhYmxlU3RvcmUtPkZvcm1hdCAgICA9IFZBUklBQkxFX1NUT1JFX0ZPUk1BVFRFRDsN CiAgICA+ICsgIFZvbGF0aWxlVmFyaWFibGVTdG9yZS0+U3RhdGUgICAgID0gVkFSSUFCTEVfU1RP UkVfSEVBTFRIWTsNCiAgICA+ICsgIFZvbGF0aWxlVmFyaWFibGVTdG9yZS0+UmVzZXJ2ZWQgID0g MDsNCiAgICA+ICsgIFZvbGF0aWxlVmFyaWFibGVTdG9yZS0+UmVzZXJ2ZWQxID0gMDsNCiAgICA+ ICsNCiAgICA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCiAgICA+ICt9DQogICAgPiArDQogICAg PiArLyoqDQogICAgPiArICBHZXQgdGhlIHByb3BlciBmdmIgaGFuZGxlIGFuZC9vciBmdmIgcHJv dG9jb2wgYnkgdGhlIGdpdmVuIEZsYXNoIGFkZHJlc3MuDQogICAgPiArDQogICAgPiArICBAcGFy YW1baW5dICBBZGRyZXNzICAgICAgIFRoZSBGbGFzaCBhZGRyZXNzLg0KICAgID4gKyAgQHBhcmFt W291dF0gRnZiSGFuZGxlICAgICBJbiBvdXRwdXQsIGlmIGl0IGlzIG5vdCBOVUxMLCBpdCBwb2lu dHMgdG8gdGhlIHByb3Blcg0KICAgID4gRlZCIGhhbmRsZS4NCiAgICA+ICsgIEBwYXJhbVtvdXRd IEZ2YlByb3RvY29sICAgSW4gb3V0cHV0LCBpZiBpdCBpcyBub3QgTlVMTCwgaXQgcG9pbnRzIHRv IHRoZSBwcm9wZXINCiAgICA+IEZWQiBwcm90b2NvbC4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAg ICA+ICtFRklfU1RBVFVTDQogICAgPiArR2V0RnZiSW5mb0J5QWRkcmVzcyAoDQogICAgPiArICBJ TiAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAgICAgICAgICAgQWRkcmVzcywNCiAgICA+ICsg IE9VVCBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICAgICAgICAqRnZiSGFuZGxlIE9QVElP TkFMLA0KICAgID4gKyAgT1VUIEVGSV9GSVJNV0FSRV9WT0xVTUVfQkxPQ0tfUFJPVE9DT0wgICoq RnZiUHJvdG9jb2wgT1BUSU9OQUwNCiAgICA+ICsgICkNCiAgICA+ICt7DQogICAgPiArICBFRklf U1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQogICAgPiArICBFRklfSEFO RExFICAgICAgICAgICAgICAgICAgICAgICAgICAqSGFuZGxlQnVmZmVyOw0KICAgID4gKyAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlQ291bnQ7DQogICAgPiArICBV SU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCiAgICA+ICsgIEVGSV9Q SFlTSUNBTF9BRERSRVNTICAgICAgICAgICAgICAgIEZ2YkJhc2VBZGRyZXNzOw0KICAgID4gKyAg RUZJX0ZJUk1XQVJFX1ZPTFVNRV9CTE9DS19QUk9UT0NPTCAgKkZ2YjsNCiAgICA+ICsgIEVGSV9G VkJfQVRUUklCVVRFU18yICAgICAgICAgICAgICAgIEF0dHJpYnV0ZXM7DQogICAgPiArICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja1NpemU7DQogICAgPiArICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZkJsb2NrczsNCiAgICA+ICsN CiAgICA+ICsgIEhhbmRsZUJ1ZmZlciA9IE5VTEw7DQogICAgPiArICAvLw0KICAgID4gKyAgLy8g R2V0IGFsbCBGVkIgaGFuZGxlcy4NCiAgICA+ICsgIC8vDQogICAgPiArICBTdGF0dXMgPSBHZXRG dmJDb3VudEFuZEJ1ZmZlciAoJkhhbmRsZUNvdW50LCAmSGFuZGxlQnVmZmVyKTsNCiAgICA+ICsg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCiAgICA+ICsgICAgcmV0dXJuIEVGSV9OT1RfRk9V TkQ7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICAvLw0KICAgID4gKyAgLy8gR2V0IHRo ZSBGVkIgdG8gYWNjZXNzIHZhcmlhYmxlIHN0b3JlLg0KICAgID4gKyAgLy8NCiAgICA+ICsgIEZ2 YiA9IE5VTEw7DQogICAgPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBIYW5kbGVDb3VudDsg SW5kZXggKz0gMSwgU3RhdHVzID0gRUZJX05PVF9GT1VORCwNCiAgICA+IEZ2YiA9IE5VTEwpIHsN CiAgICA+ICsgICAgU3RhdHVzID0gR2V0RnZiQnlIYW5kbGUgKEhhbmRsZUJ1ZmZlcltJbmRleF0s ICZGdmIpOw0KICAgID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAgPiArICAg ICAgU3RhdHVzID0gRUZJX05PVF9GT1VORDsNCiAgICA+ICsgICAgICBicmVhazsNCiAgICA+ICsg ICAgfQ0KICAgID4gKw0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICAvLyBFbnN1cmUgdGhpcyBG VkIgcHJvdG9jb2wgc3VwcG9ydGVkIFdyaXRlIG9wZXJhdGlvbi4NCiAgICA+ICsgICAgLy8NCiAg ICA+ICsgICAgU3RhdHVzID0gRnZiLT5HZXRBdHRyaWJ1dGVzIChGdmIsICZBdHRyaWJ1dGVzKTsN CiAgICA+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSB8fCAoKEF0dHJpYnV0ZXMgJiBFRklf RlZCMl9XUklURV9TVEFUVVMpID09IDApKSB7DQogICAgPiArICAgICAgY29udGludWU7DQogICAg PiArICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgLy8gQ29tcGFyZSB0 aGUgYWRkcmVzcyBhbmQgc2VsZWN0IHRoZSByaWdodCBvbmUuDQogICAgPiArICAgIC8vDQogICAg PiArICAgIFN0YXR1cyA9IEZ2Yi0+R2V0UGh5c2ljYWxBZGRyZXNzIChGdmIsICZGdmJCYXNlQWRk cmVzcyk7DQogICAgPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCiAgICA+ICsgICAg ICBjb250aW51ZTsNCiAgICA+ICsgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICAvLw0KICAgID4g KyAgICAvLyBBc3N1bWUgb25lIEZWQiBoYXMgb25lIHR5cGUgb2YgQmxvY2tTaXplLg0KICAgID4g KyAgICAvLw0KICAgID4gKyAgICBTdGF0dXMgPSBGdmItPkdldEJsb2NrU2l6ZSAoRnZiLCAwLCAm QmxvY2tTaXplLCAmTnVtYmVyT2ZCbG9ja3MpOw0KICAgID4gKyAgICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQogICAgPiArICAgICAgY29udGludWU7DQogICAgPiArICAgIH0NCiAgICA+ICsN CiAgICA+ICsgICAgaWYgKChBZGRyZXNzID49IEZ2YkJhc2VBZGRyZXNzKSAmJiAoQWRkcmVzcyA8 IChGdmJCYXNlQWRkcmVzcyArIEJsb2NrU2l6ZSAqDQogICAgPiBOdW1iZXJPZkJsb2NrcykpKSB7 DQogICAgPiArICAgICAgaWYgKEZ2YkhhbmRsZSAhPSBOVUxMKSB7DQogICAgPiArICAgICAgICAq RnZiSGFuZGxlID0gSGFuZGxlQnVmZmVyW0luZGV4XTsNCiAgICA+ICsgICAgICB9DQogICAgPiAr DQogICAgPiArICAgICAgaWYgKEZ2YlByb3RvY29sICE9IE5VTEwpIHsNCiAgICA+ICsgICAgICAg ICpGdmJQcm90b2NvbCA9IEZ2YjsNCiAgICA+ICsgICAgICB9DQogICAgPiArDQogICAgPiArICAg ICAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQogICAgPiArICAgICAgYnJlYWs7DQogICAgPiArICAg IH0NCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIEZyZWVQb29sIChIYW5kbGVCdWZmZXIp Ow0KICAgID4gKw0KICAgID4gKyAgaWYgKEZ2YiA9PSBOVUxMKSB7DQogICAgPiArICAgIFN0YXR1 cyA9IEVGSV9OT1RfRk9VTkQ7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICByZXR1cm4g U3RhdHVzOw0KICAgID4gK30NCiAgICA+IGRpZmYgLS1naXQNCiAgICA+IGEvTWRlTW9kdWxlUGtn L1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZUR4ZS5jDQog ICAgPiBiL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVE eGUvVmFyaWFibGVEeGUuYw0KICAgID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICA+IGluZGV4 IDAwMDAwMDAwMDAwMC4uNDU5NWJmOGM5ZDAyDQogICAgPiAtLS0gL2Rldi9udWxsDQogICAgPiAr KysgYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhl L1ZhcmlhYmxlRHhlLmMNCiAgICA+IEBAIC0wLDAgKzEsNjcwIEBADQogICAgPiArLyoqIEBmaWxl DQogICAgPiArICBJbXBsZW1lbnQgYWxsIGZvdXIgVUVGSSBSdW50aW1lIFZhcmlhYmxlIHNlcnZp Y2VzIGZvciB0aGUgbm9udm9sYXRpbGUNCiAgICA+ICsgIGFuZCB2b2xhdGlsZSBzdG9yYWdlIHNw YWNlIGFuZCBpbnN0YWxsIHZhcmlhYmxlIGFyY2hpdGVjdHVyZSBwcm90b2NvbC4NCiAgICA+ICsN CiAgICA+ICtDb3B5cmlnaHQgKEMpIDIwMTMsIFJlZCBIYXQsIEluYy4NCiAgICA+ICtDb3B5cmln aHQgKGMpIDIwMDYgLSAyMDIyLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl ZC48QlI+DQogICAgPiArKEMpIENvcHlyaWdodCAyMDE1IEhld2xldHQgUGFja2FyZCBFbnRlcnBy aXNlIERldmVsb3BtZW50IExQPEJSPg0KICAgID4gK0NvcHlyaWdodCAoYykgTWljcm9zb2Z0IENv cnBvcmF0aW9uLg0KICAgID4gK1NQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2Ut UGF0ZW50DQogICAgPiArDQogICAgPiArKiovDQogICAgPiArDQogICAgPiArI2luY2x1ZGUgIlZh cmlhYmxlLmgiDQogICAgPiArDQogICAgPiArI2luY2x1ZGUgPFByb3RvY29sL1ZhcmlhYmxlUG9s aWN5Lmg+DQogICAgPiArI2luY2x1ZGUgPExpYnJhcnkvVmFyaWFibGVQb2xpY3lMaWIuaD4NCiAg ICA+ICsjaW5jbHVkZSAiVmFyaWFibGVQYXJzaW5nLmgiDQogICAgPiArDQogICAgPiArRUZJX1NU QVRVUw0KICAgID4gK0VGSUFQSQ0KICAgID4gK1Byb3RvY29sSXNWYXJpYWJsZVBvbGljeUVuYWJs ZWQgKA0KICAgID4gKyAgT1VUIEJPT0xFQU4gICpTdGF0ZQ0KICAgID4gKyAgKTsNCiAgICA+ICsN CiAgICA+ICtFRklfSEFORExFICAgICAgICAgICAgICAgICAgICAgIG1IYW5kbGUgICAgICAgICAg ICAgICAgICAgICAgPSBOVUxMOw0KICAgID4gK0VGSV9FVkVOVCAgICAgICAgICAgICAgICAgICAg ICAgbVZpcnR1YWxBZGRyZXNzQ2hhbmdlRXZlbnQgICA9IE5VTEw7DQogICAgPiArVk9JRCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqbUZ0d1JlZ2lzdHJhdGlvbiAgICAgICAgICAgID0gTlVM TDsNCiAgICA+ICtWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKm1WYXJDaGVja0Fk ZHJlc3NQb2ludGVyICAgPSBOVUxMOw0KICAgID4gK1VJTlROICAgICAgICAgICAgICAgICAgICAg ICAgICAgbVZhckNoZWNrQWRkcmVzc1BvaW50ZXJDb3VudCA9IDA7DQogICAgPiArRURLSUlfVkFS SUFCTEVfTE9DS19QUk9UT0NPTCAgICBtVmFyaWFibGVMb2NrICAgICAgICAgICAgICAgID0NCiAg ICA+IHsgVmFyaWFibGVMb2NrUmVxdWVzdFRvTG9jayB9Ow0KICAgID4gK0VES0lJX1ZBUklBQkxF X1BPTElDWV9QUk9UT0NPTCAgbVZhcmlhYmxlUG9saWN5UHJvdG9jb2wgICAgICA9IHsNCiAgICA+ ICsgIEVES0lJX1ZBUklBQkxFX1BPTElDWV9QUk9UT0NPTF9SRVZJU0lPTiwNCiAgICA+ICsgIERp c2FibGVWYXJpYWJsZVBvbGljeSwNCiAgICA+ICsgIFByb3RvY29sSXNWYXJpYWJsZVBvbGljeUVu YWJsZWQsDQogICAgPiArICBSZWdpc3RlclZhcmlhYmxlUG9saWN5LA0KICAgID4gKyAgRHVtcFZh cmlhYmxlUG9saWN5LA0KICAgID4gKyAgTG9ja1ZhcmlhYmxlUG9saWN5DQogICAgPiArfTsNCiAg ICA+ICtFREtJSV9WQVJfQ0hFQ0tfUFJPVE9DT0wgICAgICAgIG1WYXJDaGVjayA9IHsNCiAgICA+ ICsgIFZhckNoZWNrUmVnaXN0ZXJTZXRWYXJpYWJsZUNoZWNrSGFuZGxlciwNCiAgICA+ICsgIFZh ckNoZWNrVmFyaWFibGVQcm9wZXJ0eVNldCwNCiAgICA+ICsgIFZhckNoZWNrVmFyaWFibGVQcm9w ZXJ0eUdldA0KICAgID4gK307DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBTb21lIFNl Y3VyZSBCb290IFBvbGljeSBWYXJpYWJsZSBtYXkgdXBkYXRlIGZvbGxvd2luZyBvdGhlciB2YXJp YWJsZQ0KICAgID4gY2hhbmdlcyhTZWN1cmVCb290IGZvbGxvd3MgUEsgY2hhbmdlLCBldGMpLg0K ICAgID4gKyAgUmVjb3JkIHRoZWlyIGluaXRpYWwgU3RhdGUgd2hlbiB2YXJpYWJsZSB3cml0ZSBz ZXJ2aWNlIGlzIHJlYWR5Lg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK1ZPSUQNCiAgICA+ ICtFRklBUEkNCiAgICA+ICtSZWNvcmRTZWN1cmVCb290UG9saWN5VmFyRGF0YSAoDQogICAgPiAr ICBWT0lEDQogICAgPiArICApOw0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgUmV0dXJu IFRSVUUgaWYgRXhpdEJvb3RTZXJ2aWNlcyAoKSBoYXMgYmVlbiBjYWxsZWQuDQogICAgPiArDQog ICAgPiArICBAcmV0dmFsIFRSVUUgSWYgRXhpdEJvb3RTZXJ2aWNlcyAoKSBoYXMgYmVlbiBjYWxs ZWQuDQogICAgPiArKiovDQogICAgPiArQk9PTEVBTg0KICAgID4gK0F0UnVudGltZSAoDQogICAg PiArICBWT0lEDQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgcmV0dXJuIEVmaUF0UnVu dGltZSAoKTsNCiAgICA+ICt9DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBJbml0aWFs aXplcyBhIGJhc2ljIG11dHVhbCBleGNsdXNpb24gbG9jay4NCiAgICA+ICsNCiAgICA+ICsgIFRo aXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYSBiYXNpYyBtdXR1YWwgZXhjbHVzaW9uIGxvY2sgdG8g dGhlIHJlbGVhc2VkIHN0YXRlDQogICAgPiArICBhbmQgcmV0dXJucyB0aGUgbG9jay4gIEVhY2gg bG9jayBwcm92aWRlcyBtdXR1YWwgZXhjbHVzaW9uIGFjY2VzcyBhdCBpdHMgdGFzaw0KICAgID4g KyAgcHJpb3JpdHkgbGV2ZWwuICBTaW5jZSB0aGVyZSBpcyBubyBwcmVlbXB0aW9uIG9yIG11bHRp cHJvY2Vzc29yIHN1cHBvcnQgaW4gRUZJLA0KICAgID4gKyAgYWNxdWlyaW5nIHRoZSBsb2NrIG9u bHkgY29uc2lzdHMgb2YgcmFpc2luZyB0byB0aGUgbG9ja3MgVFBMLg0KICAgID4gKyAgSWYgTG9j ayBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KICAgID4gKyAgSWYgUHJpb3JpdHkgaXMgbm90IGEg dmFsaWQgVFBMIHZhbHVlLCB0aGVuIEFTU0VSVCgpLg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFt ICBMb2NrICAgICAgIEEgcG9pbnRlciB0byB0aGUgbG9jayBkYXRhIHN0cnVjdHVyZSB0byBpbml0 aWFsaXplLg0KICAgID4gKyAgQHBhcmFtICBQcmlvcml0eSAgIEVGSSBUUEwgaXMgYXNzb2NpYXRl ZCB3aXRoIHRoZSBsb2NrLg0KICAgID4gKw0KICAgID4gKyAgQHJldHVybiBUaGUgbG9jay4NCiAg ICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtFRklfTE9DSyAqDQogICAgPiArSW5pdGlhbGl6ZUxv Y2sgKA0KICAgID4gKyAgSU4gT1VUIEVGSV9MT0NLICAqTG9jaywNCiAgICA+ICsgIElOICAgICBF RklfVFBMICAgUHJpb3JpdHkNCiAgICA+ICsgICkNCiAgICA+ICt7DQogICAgPiArICByZXR1cm4g RWZpSW5pdGlhbGl6ZUxvY2sgKExvY2ssIFByaW9yaXR5KTsNCiAgICA+ICt9DQogICAgPiArDQog ICAgPiArLyoqDQogICAgPiArICBBY3F1aXJlcyBsb2NrIG9ubHkgYXQgYm9vdCB0aW1lLiBTaW1w bHkgcmV0dXJucyBhdCBydW50aW1lLg0KICAgID4gKw0KICAgID4gKyAgVGhpcyBpcyBhIHRlbXBl cmFyeSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgcmVtb3ZlZCB3aGVuDQogICAgPiArICBFZmlBY3F1 aXJlTG9jaygpIGluIFVlZmlMaWIgY2FuIGhhbmRsZSB0aGUgY2FsbCBpbiBVRUZJDQogICAgPiAr ICBSdW50aW1lciBkcml2ZXIgaW4gUlQgcGhhc2UuDQogICAgPiArICBJdCBjYWxscyBFZmlBY3F1 aXJlTG9jaygpIGF0IGJvb3QgdGltZSwgYW5kIHNpbXBseSByZXR1cm5zDQogICAgPiArICBhdCBy dW50aW1lLg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtICBMb2NrICAgICAgICAgQSBwb2ludGVy IHRvIHRoZSBsb2NrIHRvIGFjcXVpcmUuDQogICAgPiArDQogICAgPiArKiovDQogICAgPiArVk9J RA0KICAgID4gK0FjcXVpcmVMb2NrT25seUF0Qm9vdFRpbWUgKA0KICAgID4gKyAgSU4gRUZJX0xP Q0sgICpMb2NrDQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgaWYgKCFBdFJ1bnRpbWUg KCkpIHsNCiAgICA+ICsgICAgRWZpQWNxdWlyZUxvY2sgKExvY2spOw0KICAgID4gKyAgfQ0KICAg ID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIFJlbGVhc2VzIGxvY2sgb25seSBh dCBib290IHRpbWUuIFNpbXBseSByZXR1cm5zIGF0IHJ1bnRpbWUuDQogICAgPiArDQogICAgPiAr ICBUaGlzIGlzIGEgdGVtcGVyYXJ5IGZ1bmN0aW9uIHdoaWNoIHdpbGwgYmUgcmVtb3ZlZCB3aGVu DQogICAgPiArICBFZmlSZWxlYXNlTG9jaygpIGluIFVlZmlMaWIgY2FuIGhhbmRsZSB0aGUgY2Fs bCBpbiBVRUZJDQogICAgPiArICBSdW50aW1lciBkcml2ZXIgaW4gUlQgcGhhc2UuDQogICAgPiAr ICBJdCBjYWxscyBFZmlSZWxlYXNlTG9jaygpIGF0IGJvb3QgdGltZSBhbmQgc2ltcGx5IHJldHVy bnMNCiAgICA+ICsgIGF0IHJ1bnRpbWUuDQogICAgPiArDQogICAgPiArICBAcGFyYW0gIExvY2sg ICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGxvY2sgdG8gcmVsZWFzZS4NCiAgICA+ICsNCiAgICA+ ICsqKi8NCiAgICA+ICtWT0lEDQogICAgPiArUmVsZWFzZUxvY2tPbmx5QXRCb290VGltZSAoDQog ICAgPiArICBJTiBFRklfTE9DSyAgKkxvY2sNCiAgICA+ICsgICkNCiAgICA+ICt7DQogICAgPiAr ICBpZiAoIUF0UnVudGltZSAoKSkgew0KICAgID4gKyAgICBFZmlSZWxlYXNlTG9jayAoTG9jayk7 DQogICAgPiArICB9DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgUmV0 cmlldmUgdGhlIEZhdWx0IFRvbGVyZW50IFdyaXRlIHByb3RvY29sIGludGVyZmFjZS4NCiAgICA+ ICsNCiAgICA+ICsgIEBwYXJhbVtvdXRdIEZ0d1Byb3RvY29sICAgICAgIFRoZSBpbnRlcmZhY2Ug b2YgRnR3IHByb3RvY29sDQogICAgPiArDQogICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICBUaGUgRlRXIHByb3RvY29sIGluc3RhbmNlIHdhcyBmb3VuZCBhbmQNCiAgICA+IHJl dHVybmVkIGluIEZ0d1Byb3RvY29sLg0KICAgID4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAg ICAgICAgVGhlIEZUVyBwcm90b2NvbCBpbnN0YW5jZSB3YXMgbm90IGZvdW5kLg0KICAgID4gKyAg QHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgU2FyUHJvdG9jb2wgaXMgTlVMTC4NCiAgICA+ ICsNCiAgICA+ICsqKi8NCiAgICA+ICtFRklfU1RBVFVTDQogICAgPiArR2V0RnR3UHJvdG9jb2wg KA0KICAgID4gKyAgT1VUIFZPSUQgICoqRnR3UHJvdG9jb2wNCiAgICA+ICsgICkNCiAgICA+ICt7 DQogICAgPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQogICAgPiArDQogICAgPiArICAvLw0KICAg ID4gKyAgLy8gTG9jYXRlIEZhdWx0IFRvbGVyZW50IFdyaXRlIHByb3RvY29sDQogICAgPiArICAv Lw0KICAgID4gKyAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVQcm90b2NvbCAoDQogICAgPiArICAgICAg ICAgICAgICAgICAgJmdFZmlGYXVsdFRvbGVyYW50V3JpdGVQcm90b2NvbEd1aWQsDQogICAgPiAr ICAgICAgICAgICAgICAgICAgTlVMTCwNCiAgICA+ICsgICAgICAgICAgICAgICAgICBGdHdQcm90 b2NvbA0KICAgID4gKyAgICAgICAgICAgICAgICAgICk7DQogICAgPiArICByZXR1cm4gU3RhdHVz Ow0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIFJldHJpZXZlIHRoZSBG VkIgcHJvdG9jb2wgaW50ZXJmYWNlIGJ5IEhBTkRMRS4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJh bVtpbl0gIEZ2QmxvY2tIYW5kbGUgICAgIFRoZSBoYW5kbGUgb2YgRlZCIHByb3RvY29sIHRoYXQg cHJvdmlkZXMNCiAgICA+IHNlcnZpY2VzIGZvcg0KICAgID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmVhZGluZywgd3JpdGluZywgYW5kIGVyYXNpbmcgdGhlIHRhcmdldCBibG9j ay4NCiAgICA+ICsgIEBwYXJhbVtvdXRdIEZ2QmxvY2sgICAgICAgICAgIFRoZSBpbnRlcmZhY2Ug b2YgRlZCIHByb3RvY29sDQogICAgPiArDQogICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICBUaGUgaW50ZXJmYWNlIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkDQogICAg PiBwcm90b2NvbCB3YXMgcmV0dXJuZWQuDQogICAgPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRF RCAgICAgICBUaGUgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhlIEZWQiBwcm90b2NvbC4NCiAg ICA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIEZ2QmxvY2tIYW5kbGUgaXMgbm90 IGEgdmFsaWQgRUZJX0hBTkRMRQ0KICAgID4gb3IgRnZCbG9jayBpcyBOVUxMLg0KICAgID4gKw0K ICAgID4gKyoqLw0KICAgID4gK0VGSV9TVEFUVVMNCiAgICA+ICtHZXRGdmJCeUhhbmRsZSAoDQog ICAgPiArICBJTiAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAgICAgRnZCbG9ja0hh bmRsZSwNCiAgICA+ICsgIE9VVCBFRklfRklSTVdBUkVfVk9MVU1FX0JMT0NLX1BST1RPQ09MICAq KkZ2QmxvY2sNCiAgICA+ICsgICkNCiAgICA+ICt7DQogICAgPiArICAvLw0KICAgID4gKyAgLy8g VG8gZ2V0IHRoZSBGVkIgcHJvdG9jb2wgaW50ZXJmYWNlIG9uIHRoZSBoYW5kbGUNCiAgICA+ICsg IC8vDQogICAgPiArICByZXR1cm4gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQogICAgPiArICAgICAg ICAgICAgICAgIEZ2QmxvY2tIYW5kbGUsDQogICAgPiArICAgICAgICAgICAgICAgICZnRWZpRmly bXdhcmVWb2x1bWVCbG9ja1Byb3RvY29sR3VpZCwNCiAgICA+ICsgICAgICAgICAgICAgICAgKFZP SUQgKiopRnZCbG9jaw0KICAgID4gKyAgICAgICAgICAgICAgICApOw0KICAgID4gK30NCiAgICA+ ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIEZ1bmN0aW9uIHJldHVybnMgYW4gYXJyYXkgb2YgaGFu ZGxlcyB0aGF0IHN1cHBvcnQgdGhlIEZWQiBwcm90b2NvbA0KICAgID4gKyAgaW4gYSBidWZmZXIg YWxsb2NhdGVkIGZyb20gcG9vbC4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbVtvdXRdICBOdW1i ZXJIYW5kbGVzICAgIFRoZSBudW1iZXIgb2YgaGFuZGxlcyByZXR1cm5lZCBpbiBCdWZmZXIuDQog ICAgPiArICBAcGFyYW1bb3V0XSAgQnVmZmVyICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1 ZmZlciB0byByZXR1cm4gdGhlIHJlcXVlc3RlZA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYXJyYXkgb2YgIGhhbmRsZXMgdGhhdCBzdXBwb3J0IEZWQiBwcm90b2NvbC4N CiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBhcnJh eSBvZiBoYW5kbGVzIHdhcyByZXR1cm5lZCBpbiBCdWZmZXIsIGFuZA0KICAgID4gdGhlIG51bWJl ciBvZg0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcyBpbiBC dWZmZXIgd2FzIHJldHVybmVkIGluIE51bWJlckhhbmRsZXMuDQogICAgPiArICBAcmV0dmFsIEVG SV9OT1RfRk9VTkQgICAgICAgICBObyBGVkIgaGFuZGxlIHdhcyBmb3VuZC4NCiAgICA+ICsgIEBy ZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgIFRoZXJlIGlzIG5vdCBlbm91Z2ggcG9vbCBtZW1v cnkgdG8gc3RvcmUNCiAgICA+IHRoZSBtYXRjaGluZyByZXN1bHRzLg0KICAgID4gKyAgQHJldHZh bCBFRklfSU5WQUxJRF9QQVJBTUVURVIgTnVtYmVySGFuZGxlcyBpcyBOVUxMIG9yIEJ1ZmZlciBp cyBOVUxMLg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK0VGSV9TVEFUVVMNCiAgICA+ICtH ZXRGdmJDb3VudEFuZEJ1ZmZlciAoDQogICAgPiArICBPVVQgVUlOVE4gICAgICAgKk51bWJlckhh bmRsZXMsDQogICAgPiArICBPVVQgRUZJX0hBTkRMRSAgKipCdWZmZXINCiAgICA+ICsgICkNCiAg ICA+ICt7DQogICAgPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQogICAgPiArDQogICAgPiArICAv Lw0KICAgID4gKyAgLy8gTG9jYXRlIGFsbCBoYW5kbGVzIG9mIEZ2YiBwcm90b2NvbA0KICAgID4g KyAgLy8NCiAgICA+ICsgIFN0YXR1cyA9IGdCUy0+TG9jYXRlSGFuZGxlQnVmZmVyICgNCiAgICA+ ICsgICAgICAgICAgICAgICAgICBCeVByb3RvY29sLA0KICAgID4gKyAgICAgICAgICAgICAgICAg ICZnRWZpRmlybXdhcmVWb2x1bWVCbG9ja1Byb3RvY29sR3VpZCwNCiAgICA+ICsgICAgICAgICAg ICAgICAgICBOVUxMLA0KICAgID4gKyAgICAgICAgICAgICAgICAgIE51bWJlckhhbmRsZXMsDQog ICAgPiArICAgICAgICAgICAgICAgICAgQnVmZmVyDQogICAgPiArICAgICAgICAgICAgICAgICAg KTsNCiAgICA+ICsgIHJldHVybiBTdGF0dXM7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8q Kg0KICAgID4gKyAgTm90aWZpY2F0aW9uIGZ1bmN0aW9uIG9mIEVWVF9TSUdOQUxfVklSVFVBTF9B RERSRVNTX0NIQU5HRS4NCiAgICA+ICsNCiAgICA+ICsgIFRoaXMgaXMgYSBub3RpZmljYXRpb24g ZnVuY3Rpb24gcmVnaXN0ZXJlZCBvbg0KICAgID4gRVZUX1NJR05BTF9WSVJUVUFMX0FERFJFU1Nf Q0hBTkdFIGV2ZW50Lg0KICAgID4gKyAgSXQgY29udmVycyBwb2ludGVyIHRvIG5ldyB2aXJ0dWFs IGFkZHJlc3MuDQogICAgPiArDQogICAgPiArICBAcGFyYW0gIEV2ZW50ICAgICAgICBFdmVudCB3 aG9zZSBub3RpZmljYXRpb24gZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZC4NCiAgICA+ICsgIEBw YXJhbSAgQ29udGV4dCAgICAgIFBvaW50ZXIgdG8gdGhlIG5vdGlmaWNhdGlvbiBmdW5jdGlvbidz IGNvbnRleHQuDQogICAgPiArDQogICAgPiArKiovDQogICAgPiArVk9JRA0KICAgID4gK0VGSUFQ SQ0KICAgID4gK1ZhcmlhYmxlQ2xhc3NBZGRyZXNzQ2hhbmdlRXZlbnQgKA0KICAgID4gKyAgSU4g RUZJX0VWRU5UICBFdmVudCwNCiAgICA+ICsgIElOIFZPSUQgICAgICAgKkNvbnRleHQNCiAgICA+ ICsgICkNCiAgICA+ICt7DQogICAgPiArICBVSU5UTiAgSW5kZXg7DQogICAgPiArDQogICAgPiAr ICBpZiAobVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5GdmJJbnN0YW5jZSAhPSBOVUxMKSB7DQogICAg PiArICAgIEVmaUNvbnZlcnRQb2ludGVyICgweDAsIChWT0lEICoqKSZtVmFyaWFibGVNb2R1bGVH bG9iYWwtPkZ2Ykluc3RhbmNlLQ0KICAgID4gPkdldEJsb2NrU2l6ZSk7DQogICAgPiArICAgIEVm aUNvbnZlcnRQb2ludGVyICgweDAsIChWT0lEICoqKSZtVmFyaWFibGVNb2R1bGVHbG9iYWwtPkZ2 Ykluc3RhbmNlLQ0KICAgID4gPkdldFBoeXNpY2FsQWRkcmVzcyk7DQogICAgPiArICAgIEVmaUNv bnZlcnRQb2ludGVyICgweDAsIChWT0lEICoqKSZtVmFyaWFibGVNb2R1bGVHbG9iYWwtPkZ2Yklu c3RhbmNlLQ0KICAgID4gPkdldEF0dHJpYnV0ZXMpOw0KICAgID4gKyAgICBFZmlDb252ZXJ0UG9p bnRlciAoMHgwLCAoVk9JRCAqKikmbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5GdmJJbnN0YW5jZS0N CiAgICA+ID5TZXRBdHRyaWJ1dGVzKTsNCiAgICA+ICsgICAgRWZpQ29udmVydFBvaW50ZXIgKDB4 MCwgKFZPSUQgKiopJm1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+RnZiSW5zdGFuY2UtDQogICAgPiA+ UmVhZCk7DQogICAgPiArICAgIEVmaUNvbnZlcnRQb2ludGVyICgweDAsIChWT0lEICoqKSZtVmFy aWFibGVNb2R1bGVHbG9iYWwtPkZ2Ykluc3RhbmNlLQ0KICAgID4gPldyaXRlKTsNCiAgICA+ICsg ICAgRWZpQ29udmVydFBvaW50ZXIgKDB4MCwgKFZPSUQgKiopJm1WYXJpYWJsZU1vZHVsZUdsb2Jh bC0+RnZiSW5zdGFuY2UtDQogICAgPiA+RXJhc2VCbG9ja3MpOw0KICAgID4gKyAgICBFZmlDb252 ZXJ0UG9pbnRlciAoMHgwLCAoVk9JRCAqKikmbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5GdmJJbnN0 YW5jZSk7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICBFZmlDb252ZXJ0UG9pbnRlciAo MHgwLCAoVk9JRCAqKikmbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KICAgID4gPlBsYXRmb3JtTGFu Z0NvZGVzKTsNCiAgICA+ICsgIEVmaUNvbnZlcnRQb2ludGVyICgweDAsIChWT0lEICoqKSZtVmFy aWFibGVNb2R1bGVHbG9iYWwtPkxhbmdDb2Rlcyk7DQogICAgPiArICBFZmlDb252ZXJ0UG9pbnRl ciAoMHgwLCAoVk9JRCAqKikmbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5QbGF0Zm9ybUxhbmcpOw0K ICAgID4gKyAgRWZpQ29udmVydFBvaW50ZXIgKDB4MCwgKFZPSUQgKiopJm1WYXJpYWJsZU1vZHVs ZUdsb2JhbC0NCiAgICA+ID5WYXJpYWJsZUdsb2JhbC5Ob25Wb2xhdGlsZVZhcmlhYmxlQmFzZSk7 DQogICAgPiArICBFZmlDb252ZXJ0UG9pbnRlciAoMHgwLCAoVk9JRCAqKikmbVZhcmlhYmxlTW9k dWxlR2xvYmFsLQ0KICAgID4gPlZhcmlhYmxlR2xvYmFsLlZvbGF0aWxlVmFyaWFibGVCYXNlKTsN CiAgICA+ICsgIEVmaUNvbnZlcnRQb2ludGVyICgweDAsIChWT0lEICoqKSZtVmFyaWFibGVNb2R1 bGVHbG9iYWwtDQogICAgPiA+VmFyaWFibGVHbG9iYWwuSG9iVmFyaWFibGVCYXNlKTsNCiAgICA+ ICsgIEVmaUNvbnZlcnRQb2ludGVyICgweDAsIChWT0lEICoqKSZtVmFyaWFibGVNb2R1bGVHbG9i YWwpOw0KICAgID4gKyAgRWZpQ29udmVydFBvaW50ZXIgKDB4MCwgKFZPSUQgKiopJm1OdlZhcmlh YmxlQ2FjaGUpOw0KICAgID4gKyAgRWZpQ29udmVydFBvaW50ZXIgKDB4MCwgKFZPSUQgKiopJm1O dkZ2SGVhZGVyQ2FjaGUpOw0KICAgID4gKw0KICAgID4gKyAgaWYgKG1BdXRoQ29udGV4dE91dC5B ZGRyZXNzUG9pbnRlciAhPSBOVUxMKSB7DQogICAgPiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRl eCA8IG1BdXRoQ29udGV4dE91dC5BZGRyZXNzUG9pbnRlckNvdW50OyBJbmRleCsrKSB7DQogICAg PiArICAgICAgRWZpQ29udmVydFBvaW50ZXIgKDB4MCwgKFZPSUQgKiopbUF1dGhDb250ZXh0T3V0 LkFkZHJlc3NQb2ludGVyW0luZGV4XSk7DQogICAgPiArICAgIH0NCiAgICA+ICsgIH0NCiAgICA+ ICsNCiAgICA+ICsgIGlmIChtVmFyQ2hlY2tBZGRyZXNzUG9pbnRlciAhPSBOVUxMKSB7DQogICAg PiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IG1WYXJDaGVja0FkZHJlc3NQb2ludGVyQ291 bnQ7IEluZGV4KyspIHsNCiAgICA+ICsgICAgICBFZmlDb252ZXJ0UG9pbnRlciAoMHgwLCAoVk9J RCAqKiltVmFyQ2hlY2tBZGRyZXNzUG9pbnRlcltJbmRleF0pOw0KICAgID4gKyAgICB9DQogICAg PiArICB9DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgTm90aWZpY2F0 aW9uIGZ1bmN0aW9uIG9mIEVWVF9HUk9VUF9SRUFEWV9UT19CT09UIGV2ZW50IGdyb3VwLg0KICAg ID4gKw0KICAgID4gKyAgVGhpcyBpcyBhIG5vdGlmaWNhdGlvbiBmdW5jdGlvbiByZWdpc3RlcmVk IG9uIEVWVF9HUk9VUF9SRUFEWV9UT19CT09UDQogICAgPiBldmVudCBncm91cC4NCiAgICA+ICsg IFdoZW4gdGhlIEJvb3QgTWFuYWdlciBpcyBhYm91dCB0byBsb2FkIGFuZCBleGVjdXRlIGEgYm9v dCBvcHRpb24sIGl0DQogICAgPiByZWNsYWltcyB2YXJpYWJsZQ0KICAgID4gKyAgc3RvcmFnZSBp ZiBmcmVlIHNpemUgaXMgYmVsb3cgdGhlIHRocmVzaG9sZC4NCiAgICA+ICsNCiAgICA+ICsgIEBw YXJhbSAgRXZlbnQgICAgICAgIEV2ZW50IHdob3NlIG5vdGlmaWNhdGlvbiBmdW5jdGlvbiBpcyBi ZWluZyBpbnZva2VkLg0KICAgID4gKyAgQHBhcmFtICBDb250ZXh0ICAgICAgUG9pbnRlciB0byB0 aGUgbm90aWZpY2F0aW9uIGZ1bmN0aW9uJ3MgY29udGV4dC4NCiAgICA+ICsNCiAgICA+ICsqKi8N CiAgICA+ICtWT0lEDQogICAgPiArRUZJQVBJDQogICAgPiArT25SZWFkeVRvQm9vdCAoDQogICAg PiArICBFRklfRVZFTlQgIEV2ZW50LA0KICAgID4gKyAgVk9JRCAgICAgICAqQ29udGV4dA0KICAg ID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCiAgICA+ICsN CiAgICA+ICsgIGlmICghbUVuZE9mRHhlKSB7DQogICAgPiArICAgIE1vckxvY2tJbml0QXRFbmRP ZkR4ZSAoKTsNCiAgICA+ICsNCiAgICA+ICsgICAgU3RhdHVzID0gTG9ja1ZhcmlhYmxlUG9saWN5 ICgpOw0KICAgID4gKyAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KICAgID4gKyAgICAv Lw0KICAgID4gKyAgICAvLyBTZXQgdGhlIEVuZCBPZiBEWEUgYml0IGluIGNhc2UgdGhlIEVGSV9F TkRfT0ZfRFhFX0VWRU5UX0dST1VQX0dVSUQNCiAgICA+IGV2ZW50IGlzIG5vdCBzaWduYWxlZC4N CiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgbUVuZE9mRHhlICAgICAgICAgICAgICAgPSBUUlVF Ow0KICAgID4gKyAgICBtVmFyQ2hlY2tBZGRyZXNzUG9pbnRlciA9IFZhckNoZWNrTGliSW5pdGlh bGl6ZUF0RW5kT2ZEeGUNCiAgICA+ICgmbVZhckNoZWNrQWRkcmVzc1BvaW50ZXJDb3VudCk7DQog ICAgPiArICAgIC8vDQogICAgPiArICAgIC8vIFRoZSBpbml0aWFsaXphdGlvbiBmb3IgdmFyaWFi bGUgcXVvdGEuDQogICAgPiArICAgIC8vDQogICAgPiArICAgIEluaXRpYWxpemVWYXJpYWJsZVF1 b3RhICgpOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgUmVjbGFpbUZvck9TICgpOw0K ICAgID4gKyAgaWYgKEZlYXR1cmVQY2RHZXQgKFBjZFZhcmlhYmxlQ29sbGVjdFN0YXRpc3RpY3Mp KSB7DQogICAgPiArICAgIGlmIChtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFs LkF1dGhGb3JtYXQpIHsNCiAgICA+ICsgICAgICBnQlMtPkluc3RhbGxDb25maWd1cmF0aW9uVGFi bGUgKCZnRWZpQXV0aGVudGljYXRlZFZhcmlhYmxlR3VpZCwNCiAgICA+IGdWYXJpYWJsZUluZm8p Ow0KICAgID4gKyAgICB9IGVsc2Ugew0KICAgID4gKyAgICAgIGdCUy0+SW5zdGFsbENvbmZpZ3Vy YXRpb25UYWJsZSAoJmdFZmlWYXJpYWJsZUd1aWQsIGdWYXJpYWJsZUluZm8pOw0KICAgID4gKyAg ICB9DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICBnQlMtPkNsb3NlRXZlbnQgKEV2ZW50 KTsNCiAgICA+ICt9DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBOb3RpZmljYXRpb24g ZnVuY3Rpb24gb2YgRUZJX0VORF9PRl9EWEVfRVZFTlRfR1JPVVBfR1VJRCBldmVudCBncm91cC4N CiAgICA+ICsNCiAgICA+ICsgIFRoaXMgaXMgYSBub3RpZmljYXRpb24gZnVuY3Rpb24gcmVnaXN0 ZXJlZCBvbg0KICAgID4gRUZJX0VORF9PRl9EWEVfRVZFTlRfR1JPVVBfR1VJRCBldmVudCBncm91 cC4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbSAgRXZlbnQgICAgICAgIEV2ZW50IHdob3NlIG5v dGlmaWNhdGlvbiBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkLg0KICAgID4gKyAgQHBhcmFtICBD b250ZXh0ICAgICAgUG9pbnRlciB0byB0aGUgbm90aWZpY2F0aW9uIGZ1bmN0aW9uJ3MgY29udGV4 dC4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtWT0lEDQogICAgPiArRUZJQVBJDQogICAg PiArT25FbmRPZkR4ZSAoDQogICAgPiArICBFRklfRVZFTlQgIEV2ZW50LA0KICAgID4gKyAgVk9J RCAgICAgICAqQ29udGV4dA0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIEVGSV9TVEFU VVMgIFN0YXR1czsNCiAgICA+ICsNCiAgICA+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIltWYXJp YWJsZV1FTkRfT0ZfRFhFIGlzIHNpZ25hbGVkXG4iKSk7DQogICAgPiArICBNb3JMb2NrSW5pdEF0 RW5kT2ZEeGUgKCk7DQogICAgPiArICBTdGF0dXMgPSBMb2NrVmFyaWFibGVQb2xpY3kgKCk7DQog ICAgPiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KICAgID4gKyAgbUVuZE9mRHhlICAg ICAgICAgICAgICAgPSBUUlVFOw0KICAgID4gKyAgbVZhckNoZWNrQWRkcmVzc1BvaW50ZXIgPSBW YXJDaGVja0xpYkluaXRpYWxpemVBdEVuZE9mRHhlDQogICAgPiAoJm1WYXJDaGVja0FkZHJlc3NQ b2ludGVyQ291bnQpOw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIFRoZSBpbml0aWFsaXphdGlv biBmb3IgdmFyaWFibGUgcXVvdGEuDQogICAgPiArICAvLw0KICAgID4gKyAgSW5pdGlhbGl6ZVZh cmlhYmxlUXVvdGEgKCk7DQogICAgPiArICBpZiAoUGNkR2V0Qm9vbCAoUGNkUmVjbGFpbVZhcmlh YmxlU3BhY2VBdEVuZE9mRHhlKSkgew0KICAgID4gKyAgICBSZWNsYWltRm9yT1MgKCk7DQogICAg PiArICB9DQogICAgPiArDQogICAgPiArICBnQlMtPkNsb3NlRXZlbnQgKEV2ZW50KTsNCiAgICA+ ICt9DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBJbml0aWFsaXplcyB2YXJpYWJsZSB3 cml0ZSBzZXJ2aWNlIGZvciBEWEUuDQogICAgPiArDQogICAgPiArKiovDQogICAgPiArVk9JRA0K ICAgID4gK1ZhcmlhYmxlV3JpdGVTZXJ2aWNlSW5pdGlhbGl6ZUR4ZSAoDQogICAgPiArICBWT0lE DQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KICAg ID4gKw0KICAgID4gKyAgU3RhdHVzID0gVmFyaWFibGVXcml0ZVNlcnZpY2VJbml0aWFsaXplICgp Ow0KICAgID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgID4gKyAgICBERUJVRyAo KERFQlVHX0VSUk9SLCAiVmFyaWFibGUgd3JpdGUgc2VydmljZSBpbml0aWFsaXphdGlvbiBmYWls ZWQuIFN0YXR1cw0KICAgID4gPSAlclxuIiwgU3RhdHVzKSk7DQogICAgPiArICB9DQogICAgPiAr DQogICAgPiArICAvLw0KICAgID4gKyAgLy8gU29tZSBTZWN1cmUgQm9vdCBQb2xpY3kgVmFyIChT ZWN1cmVCb290LCBldGMpIHVwZGF0ZXMgZm9sbG93aW5nIG90aGVyDQogICAgPiArICAvLyBTZWN1 cmUgQm9vdCBQb2xpY3kgVmFyaWFibGUgY2hhbmdlLiBSZWNvcmQgdGhlaXIgaW5pdGlhbCB2YWx1 ZS4NCiAgICA+ICsgIC8vDQogICAgPiArICBSZWNvcmRTZWN1cmVCb290UG9saWN5VmFyRGF0YSAo KTsNCiAgICA+ICsNCiAgICA+ICsgIC8vDQogICAgPiArICAvLyBJbnN0YWxsIHRoZSBWYXJpYWJs ZSBXcml0ZSBBcmNoaXRlY3R1cmFsIHByb3RvY29sLg0KICAgID4gKyAgLy8NCiAgICA+ICsgIFN0 YXR1cyA9IGdCUy0+SW5zdGFsbFByb3RvY29sSW50ZXJmYWNlICgNCiAgICA+ICsgICAgICAgICAg ICAgICAgICAmbUhhbmRsZSwNCiAgICA+ICsgICAgICAgICAgICAgICAgICAmZ0VmaVZhcmlhYmxl V3JpdGVBcmNoUHJvdG9jb2xHdWlkLA0KICAgID4gKyAgICAgICAgICAgICAgICAgIEVGSV9OQVRJ VkVfSU5URVJGQUNFLA0KICAgID4gKyAgICAgICAgICAgICAgICAgIE5VTEwNCiAgICA+ICsgICAg ICAgICAgICAgICAgICApOw0KICAgID4gKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCiAg ICA+ICt9DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBGYXVsdCBUb2xlcmFudCBXcml0 ZSBwcm90b2NvbCBub3RpZmljYXRpb24gZXZlbnQgaGFuZGxlci4NCiAgICA+ICsNCiAgICA+ICsg IE5vbi1Wb2xhdGlsZSB2YXJpYWJsZSB3cml0ZSBtYXkgbmVlZHMgRlRXIHByb3RvY29sIHRvIHJl Y2xhaW0gd2hlbg0KICAgID4gKyAgd3JpdHRpbmcgdmFyaWFibGUuDQogICAgPiArDQogICAgPiAr ICBAcGFyYW1baW5dIEV2ZW50ICAgIEV2ZW50IHdob3NlIG5vdGlmaWNhdGlvbiBmdW5jdGlvbiBp cyBiZWluZyBpbnZva2VkLg0KICAgID4gKyAgQHBhcmFtW2luXSBDb250ZXh0ICBQb2ludGVyIHRv IHRoZSBub3RpZmljYXRpb24gZnVuY3Rpb24ncyBjb250ZXh0Lg0KICAgID4gKw0KICAgID4gKyoq Lw0KICAgID4gK1ZPSUQNCiAgICA+ICtFRklBUEkNCiAgICA+ICtGdHdOb3RpZmljYXRpb25FdmVu dCAoDQogICAgPiArICBJTiAgRUZJX0VWRU5UICBFdmVudCwNCiAgICA+ICsgIElOICBWT0lEICAg ICAgICpDb250ZXh0DQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgRUZJX1NUQVRVUyAg ICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KICAgID4gKyAgRUZJX0ZJUk1XQVJFX1ZP TFVNRV9CTE9DS19QUk9UT0NPTCAgKkZ2YlByb3RvY29sOw0KICAgID4gKyAgRUZJX0ZBVUxUX1RP TEVSQU5UX1dSSVRFX1BST1RPQ09MICAgKkZ0d1Byb3RvY29sOw0KICAgID4gKyAgRUZJX1BIWVNJ Q0FMX0FERFJFU1MgICAgICAgICAgICAgICAgTnZTdG9yYWdlVmFyaWFibGVCYXNlOw0KICAgID4g KyAgRUZJX0dDRF9NRU1PUllfU1BBQ0VfREVTQ1JJUFRPUiAgICAgR2NkRGVzY3JpcHRvcjsNCiAg ICA+ICsgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgICAgICAgICAgIEJhc2VBZGRyZXNzOw0K ICAgID4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoOw0KICAg ID4gKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAgICAgICAgICAgVmFyaWFibGVTdG9yZUJh c2U7DQogICAgPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJs ZVN0b3JlTGVuZ3RoOw0KICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRnR3TWF4QmxvY2tTaXplOw0KICAgID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTnZTdG9yYWdlVmFyaWFibGVTaXplOw0KICAgID4gKyAgVUlOVDY0ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTnZTdG9yYWdlVmFyaWFibGVTaXplNjQ7DQogICAgPiArDQog ICAgPiArICAvLw0KICAgID4gKyAgLy8gRW5zdXJlIEZUVyBwcm90b2NvbCBpcyBpbnN0YWxsZWQu DQogICAgPiArICAvLw0KICAgID4gKyAgU3RhdHVzID0gR2V0RnR3UHJvdG9jb2wgKChWT0lEICoq KSZGdHdQcm90b2NvbCk7DQogICAgPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAg PiArICAgIHJldHVybjsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIFN0YXR1cyA9IEdl dFZhcmlhYmxlRmxhc2hOdlN0b3JhZ2VJbmZvICgmTnZTdG9yYWdlVmFyaWFibGVCYXNlLA0KICAg ID4gJk52U3RvcmFnZVZhcmlhYmxlU2l6ZTY0KTsNCiAgICA+ICsgIEFTU0VSVF9FRklfRVJST1Ig KFN0YXR1cyk7DQogICAgPiArDQogICAgPiArICBTdGF0dXMgPSBTYWZlVWludDY0VG9VaW50MzIg KE52U3RvcmFnZVZhcmlhYmxlU2l6ZTY0LA0KICAgID4gJk52U3RvcmFnZVZhcmlhYmxlU2l6ZSk7 DQogICAgPiArICAvLyBUaGlzIGRyaXZlciBjdXJyZW50bHkgYXNzdW1lcyB0aGUgc2l6ZSB3aWxs IGJlIFVJTlQzMiBzbyBhc3NlcnQgdGhlIHZhbHVlIGlzDQogICAgPiBzYWZlIGZvciBub3cuDQog ICAgPiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KICAgID4gKw0KICAgID4gKyAgVmFy aWFibGVTdG9yZUJhc2UgPSBOdlN0b3JhZ2VWYXJpYWJsZUJhc2UgKyBtTnZGdkhlYWRlckNhY2hl LQ0KICAgID4gPkhlYWRlckxlbmd0aDsNCiAgICA+ICsNCiAgICA+ICsgIFN0YXR1cyA9IEZ0d1By b3RvY29sLT5HZXRNYXhCbG9ja1NpemUgKEZ0d1Byb3RvY29sLCAmRnR3TWF4QmxvY2tTaXplKTsN CiAgICA+ICsgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAgPiArICAgIEFTU0VSVCAo TnZTdG9yYWdlVmFyaWFibGVTaXplIDw9IEZ0d01heEJsb2NrU2l6ZSk7DQogICAgPiArICB9DQog ICAgPiArDQogICAgPiArICAvLw0KICAgID4gKyAgLy8gTGV0IE5vblZvbGF0aWxlVmFyaWFibGVC YXNlIHBvaW50IHRvIGZsYXNoIHZhcmlhYmxlIHN0b3JlIGJhc2UgZGlyZWN0bHkgYWZ0ZXINCiAg ICA+IEZUVyByZWFkeS4NCiAgICA+ICsgIC8vDQogICAgPiArICBtVmFyaWFibGVNb2R1bGVHbG9i YWwtPlZhcmlhYmxlR2xvYmFsLk5vblZvbGF0aWxlVmFyaWFibGVCYXNlID0NCiAgICA+IFZhcmlh YmxlU3RvcmVCYXNlOw0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIEZpbmQgdGhl IHByb3BlciBGVkIgcHJvdG9jb2wgZm9yIHZhcmlhYmxlLg0KICAgID4gKyAgLy8NCiAgICA+ICsg IFN0YXR1cyA9IEdldEZ2YkluZm9CeUFkZHJlc3MgKE52U3RvcmFnZVZhcmlhYmxlQmFzZSwgTlVM TCwgJkZ2YlByb3RvY29sKTsNCiAgICA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCiAg ICA+ICsgICAgcmV0dXJuOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgbVZhcmlhYmxl TW9kdWxlR2xvYmFsLT5GdmJJbnN0YW5jZSA9IEZ2YlByb3RvY29sOw0KICAgID4gKw0KICAgID4g KyAgLy8NCiAgICA+ICsgIC8vIE1hcmsgdGhlIHZhcmlhYmxlIHN0b3JhZ2UgcmVnaW9uIG9mIHRo ZSBGTEFTSCBhcyBSVU5USU1FLg0KICAgID4gKyAgLy8NCiAgICA+ICsgIFZhcmlhYmxlU3RvcmVM ZW5ndGggPSBtTnZWYXJpYWJsZUNhY2hlLT5TaXplOw0KICAgID4gKyAgQmFzZUFkZHJlc3MgICAg ICAgICA9IFZhcmlhYmxlU3RvcmVCYXNlICYgKH5FRklfUEFHRV9NQVNLKTsNCiAgICA+ICsgIExl bmd0aCAgICAgICAgICAgICAgPSBWYXJpYWJsZVN0b3JlTGVuZ3RoICsgKFZhcmlhYmxlU3RvcmVC YXNlIC0gQmFzZUFkZHJlc3MpOw0KICAgID4gKyAgTGVuZ3RoICAgICAgICAgICAgICA9IChMZW5n dGggKyBFRklfUEFHRV9TSVpFIC0gMSkgJiAofkVGSV9QQUdFX01BU0spOw0KICAgID4gKw0KICAg ID4gKyAgU3RhdHVzID0gZ0RTLT5HZXRNZW1vcnlTcGFjZURlc2NyaXB0b3IgKEJhc2VBZGRyZXNz LCAmR2NkRGVzY3JpcHRvcik7DQogICAgPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQog ICAgPiArICAgIERFQlVHICgoREVCVUdfV0FSTiwgIlZhcmlhYmxlIGRyaXZlciBmYWlsZWQgdG8g Z2V0IGZsYXNoIG1lbW9yeQ0KICAgID4gYXR0cmlidXRlLlxuIikpOw0KICAgID4gKyAgfSBlbHNl IHsNCiAgICA+ICsgICAgaWYgKChHY2REZXNjcmlwdG9yLkF0dHJpYnV0ZXMgJiBFRklfTUVNT1JZ X1JVTlRJTUUpID09IDApIHsNCiAgICA+ICsgICAgICBTdGF0dXMgPSBnRFMtPlNldE1lbW9yeVNw YWNlQXR0cmlidXRlcyAoDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgIEJhc2VBZGRyZXNz LA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgsDQogICAgPiArICAgICAgICAg ICAgICAgICAgICAgIEdjZERlc2NyaXB0b3IuQXR0cmlidXRlcyB8IEVGSV9NRU1PUllfUlVOVElN RQ0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICApOw0KICAgID4gKyAgICAgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCiAgICA+ICsgICAgICAgIERFQlVHICgoREVCVUdfV0FSTiwgIlZh cmlhYmxlIGRyaXZlciBmYWlsZWQgdG8gYWRkDQogICAgPiBFRklfTUVNT1JZX1JVTlRJTUUgYXR0 cmlidXRlIHRvIEZsYXNoLlxuIikpOw0KICAgID4gKyAgICAgIH0NCiAgICA+ICsgICAgfQ0KICAg ID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIEluaXRpYWxpemVzIHZh cmlhYmxlIHdyaXRlIHNlcnZpY2UgYWZ0ZXIgRlRXIHdhcyByZWFkeS4NCiAgICA+ICsgIC8vDQog ICAgPiArICBWYXJpYWJsZVdyaXRlU2VydmljZUluaXRpYWxpemVEeGUgKCk7DQogICAgPiArDQog ICAgPiArICAvLw0KICAgID4gKyAgLy8gQ2xvc2UgdGhlIG5vdGlmeSBldmVudCB0byBhdm9pZCBp bnN0YWxsIGdFZmlWYXJpYWJsZVdyaXRlQXJjaFByb3RvY29sR3VpZA0KICAgID4gYWdhaW4uDQog ICAgPiArICAvLw0KICAgID4gKyAgZ0JTLT5DbG9zZUV2ZW50IChFdmVudCk7DQogICAgPiArfQ0K ICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgVGhpcyBBUEkgZnVuY3Rpb24gcmV0dXJucyB3 aGV0aGVyIG9yIG5vdCB0aGUgcG9saWN5IGVuZ2luZSBpcw0KICAgID4gKyAgY3VycmVudGx5IGJl aW5nIGVuZm9yY2VkLg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtW291dF0gICBTdGF0ZSAgICAg ICBQb2ludGVyIHRvIGEgcmV0dXJuIHZhbHVlIGZvciB3aGV0aGVyIHRoZSBwb2xpY3kNCiAgICA+ IGVuZm9yY2VtZW50DQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGN1cnJl bnRseSBlbmFibGVkLg0KICAgID4gKw0KICAgID4gKyAgQHJldHZhbCAgICAgRUZJX1NVQ0NFU1MN CiAgICA+ICsgIEByZXR2YWwgICAgIE90aGVycyAgICAgICAgQW4gZXJyb3IgaGFzIHByZXZlbnRl ZCB0aGlzIGNvbW1hbmQgZnJvbSBjb21wbGV0aW5nLg0KICAgID4gKw0KICAgID4gKyoqLw0KICAg ID4gK0VGSV9TVEFUVVMNCiAgICA+ICtFRklBUEkNCiAgICA+ICtQcm90b2NvbElzVmFyaWFibGVQ b2xpY3lFbmFibGVkICgNCiAgICA+ICsgIE9VVCBCT09MRUFOICAqU3RhdGUNCiAgICA+ICsgICkN CiAgICA+ICt7DQogICAgPiArICAqU3RhdGUgPSBJc1ZhcmlhYmxlUG9saWN5RW5hYmxlZCAoKTsN CiAgICA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCiAgICA+ICt9DQogICAgPiArDQogICAgPiAr LyoqDQogICAgPiArICBWYXJpYWJsZSBEcml2ZXIgbWFpbiBlbnRyeSBwb2ludC4gVGhlIFZhcmlh YmxlIGRyaXZlciBwbGFjZXMgdGhlIDQgRUZJDQogICAgPiArICBydW50aW1lIHNlcnZpY2VzIGlu IHRoZSBFRkkgU3lzdGVtIFRhYmxlIGFuZCBpbnN0YWxscyBhcmNoIHByb3RvY29scw0KICAgID4g KyAgZm9yIHZhcmlhYmxlIHJlYWQgYW5kIHdyaXRlIHNlcnZpY2VzIGJlaW5nIGF2YWlsYWJsZS4g SXQgYWxzbyByZWdpc3RlcnMNCiAgICA+ICsgIGEgbm90aWZpY2F0aW9uIGZ1bmN0aW9uIGZvciBh biBFVlRfU0lHTkFMX1ZJUlRVQUxfQUREUkVTU19DSEFOR0UNCiAgICA+IGV2ZW50Lg0KICAgID4g Kw0KICAgID4gKyAgQHBhcmFtW2luXSBJbWFnZUhhbmRsZSAgICBUaGUgZmlybXdhcmUgYWxsb2Nh dGVkIGhhbmRsZSBmb3IgdGhlIEVGSSBpbWFnZS4NCiAgICA+ICsgIEBwYXJhbVtpbl0gU3lzdGVt VGFibGUgICAgQSBwb2ludGVyIHRvIHRoZSBFRkkgU3lzdGVtIFRhYmxlLg0KICAgID4gKw0KICAg ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICBWYXJpYWJsZSBzZXJ2aWNlIHN1Y2Nlc3Nm dWxseSBpbml0aWFsaXplZC4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtFRklfU1RBVFVT DQogICAgPiArRUZJQVBJDQogICAgPiArVmFyaWFibGVTZXJ2aWNlSW5pdGlhbGl6ZSAoDQogICAg PiArICBJTiBFRklfSEFORExFICAgICAgICBJbWFnZUhhbmRsZSwNCiAgICA+ICsgIElOIEVGSV9T WVNURU1fVEFCTEUgICpTeXN0ZW1UYWJsZQ0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsg IEVGSV9TVEFUVVMgIFN0YXR1czsNCiAgICA+ICsgIEVGSV9FVkVOVCAgIFJlYWR5VG9Cb290RXZl bnQ7DQogICAgPiArICBFRklfRVZFTlQgICBFbmRPZkR4ZUV2ZW50Ow0KICAgID4gKw0KICAgID4g KyAgUFJPVEVDVEVEX1ZBUklBQkxFX0NPTlRFWFRfSU4gIENvbnRleHRJbjsNCiAgICA+ICsNCiAg ICA+ICsgIC8vDQogICAgPiArICAvLyBJbml0aWFsemUgcHJvdGVjdGVkIHZhcmlhYmxlIHNlcnZp Y2UsIGlmIGVuYWJsZWQuDQogICAgPiArICAvLw0KICAgID4gKyAgQ29udGV4dEluLlN0cnVjdFNp emUgICAgPSBzaXplb2YgKENvbnRleHRJbik7DQogICAgPiArICBDb250ZXh0SW4uU3RydWN0VmVy c2lvbiA9DQogICAgPiBQUk9URUNURURfVkFSSUFCTEVfQ09OVEVYVF9JTl9TVFJVQ1RfVkVSU0lP TjsNCiAgICA+ICsNCiAgICA+ICsgIENvbnRleHRJbi5GaW5kVmFyaWFibGVTbW0gICAgID0gTlVM TDsNCiAgICA+ICsgIENvbnRleHRJbi5HZXRWYXJpYWJsZUluZm8gICAgID0gR2V0VmFyaWFibGVJ bmZvOw0KICAgID4gKyAgQ29udGV4dEluLkdldE5leHRWYXJpYWJsZUluZm8gPSBHZXROZXh0VmFy aWFibGVJbmZvOw0KICAgID4gKyAgQ29udGV4dEluLlVwZGF0ZVZhcmlhYmxlU3RvcmUgPSBWYXJp YWJsZUV4TGliVXBkYXRlTnZWYXJpYWJsZTsNCiAgICA+ICsgIENvbnRleHRJbi5VcGRhdGVWYXJp YWJsZSAgICAgID0gVmFyaWFibGVFeExpYlVwZGF0ZVZhcmlhYmxlOw0KICAgID4gKw0KICAgID4g KyAgQ29udGV4dEluLk1heFZhcmlhYmxlU2l6ZSAgICAgPSAoVUlOVDMyKUdldE1heFZhcmlhYmxl U2l6ZSAoKTsNCiAgICA+ICsgIENvbnRleHRJbi5WYXJpYWJsZVNlcnZpY2VVc2VyID0gRnJvbVNt bU1vZHVsZTsNCiAgICA+ICsNCiAgICA+ICsgIFN0YXR1cyA9IFByb3RlY3RlZFZhcmlhYmxlTGli SW5pdGlhbGl6ZSAoJkNvbnRleHRJbik7DQogICAgPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp ICYmIChTdGF0dXMgIT0gRUZJX1VOU1VQUE9SVEVEKSkgew0KICAgID4gKyAgICBBU1NFUlRfRUZJ X0VSUk9SIChTdGF0dXMpOw0KICAgID4gKyAgICByZXR1cm4gU3RhdHVzOw0KICAgID4gKyAgfQ0K ICAgID4gKw0KICAgID4gKyAgU3RhdHVzID0gVmFyaWFibGVDb21tb25Jbml0aWFsaXplICgpOw0K ICAgID4gKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCiAgICA+ICsNCiAgICA+ICsgIFN0 YXR1cyA9IGdCUy0+SW5zdGFsbE11bHRpcGxlUHJvdG9jb2xJbnRlcmZhY2VzICgNCiAgICA+ICsg ICAgICAgICAgICAgICAgICAmbUhhbmRsZSwNCiAgICA+ICsgICAgICAgICAgICAgICAgICAmZ0Vk a2lpVmFyaWFibGVMb2NrUHJvdG9jb2xHdWlkLA0KICAgID4gKyAgICAgICAgICAgICAgICAgICZt VmFyaWFibGVMb2NrLA0KICAgID4gKyAgICAgICAgICAgICAgICAgIE5VTEwNCiAgICA+ICsgICAg ICAgICAgICAgICAgICApOw0KICAgID4gKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCiAg ICA+ICsNCiAgICA+ICsgIFN0YXR1cyA9IGdCUy0+SW5zdGFsbE11bHRpcGxlUHJvdG9jb2xJbnRl cmZhY2VzICgNCiAgICA+ICsgICAgICAgICAgICAgICAgICAmbUhhbmRsZSwNCiAgICA+ICsgICAg ICAgICAgICAgICAgICAmZ0Vka2lpVmFyQ2hlY2tQcm90b2NvbEd1aWQsDQogICAgPiArICAgICAg ICAgICAgICAgICAgJm1WYXJDaGVjaywNCiAgICA+ICsgICAgICAgICAgICAgICAgICBOVUxMDQog ICAgPiArICAgICAgICAgICAgICAgICAgKTsNCiAgICA+ICsgIEFTU0VSVF9FRklfRVJST1IgKFN0 YXR1cyk7DQogICAgPiArDQogICAgPiArICBTeXN0ZW1UYWJsZS0+UnVudGltZVNlcnZpY2VzLT5H ZXRWYXJpYWJsZSAgICAgICAgID0NCiAgICA+IFZhcmlhYmxlU2VydmljZUdldFZhcmlhYmxlOw0K ICAgID4gKyAgU3lzdGVtVGFibGUtPlJ1bnRpbWVTZXJ2aWNlcy0+R2V0TmV4dFZhcmlhYmxlTmFt ZSA9DQogICAgPiBWYXJpYWJsZVNlcnZpY2VHZXROZXh0VmFyaWFibGVOYW1lOw0KICAgID4gKyAg U3lzdGVtVGFibGUtPlJ1bnRpbWVTZXJ2aWNlcy0+U2V0VmFyaWFibGUgICAgICAgICA9IFZhcmlh YmxlU2VydmljZVNldFZhcmlhYmxlOw0KICAgID4gKyAgU3lzdGVtVGFibGUtPlJ1bnRpbWVTZXJ2 aWNlcy0+UXVlcnlWYXJpYWJsZUluZm8gICA9DQogICAgPiBWYXJpYWJsZVNlcnZpY2VRdWVyeVZh cmlhYmxlSW5mbzsNCiAgICA+ICsNCiAgICA+ICsgIC8vDQogICAgPiArICAvLyBOb3cgaW5zdGFs bCB0aGUgVmFyaWFibGUgUnVudGltZSBBcmNoaXRlY3R1cmFsIHByb3RvY29sIG9uIGEgbmV3IGhh bmRsZS4NCiAgICA+ICsgIC8vDQogICAgPiArICBTdGF0dXMgPSBnQlMtPkluc3RhbGxQcm90b2Nv bEludGVyZmFjZSAoDQogICAgPiArICAgICAgICAgICAgICAgICAgJm1IYW5kbGUsDQogICAgPiAr ICAgICAgICAgICAgICAgICAgJmdFZmlWYXJpYWJsZUFyY2hQcm90b2NvbEd1aWQsDQogICAgPiAr ICAgICAgICAgICAgICAgICAgRUZJX05BVElWRV9JTlRFUkZBQ0UsDQogICAgPiArICAgICAgICAg ICAgICAgICAgTlVMTA0KICAgID4gKyAgICAgICAgICAgICAgICAgICk7DQogICAgPiArICBBU1NF UlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KICAgID4gKw0KICAgID4gKyAgaWYgKCFQY2RHZXRCb29s IChQY2RFbXVWYXJpYWJsZU52TW9kZUVuYWJsZSkpIHsNCiAgICA+ICsgICAgLy8NCiAgICA+ICsg ICAgLy8gUmVnaXN0ZXIgRnR3Tm90aWZpY2F0aW9uRXZlbnQgKCkgbm90aWZ5IGZ1bmN0aW9uLg0K ICAgID4gKyAgICAvLw0KICAgID4gKyAgICBFZmlDcmVhdGVQcm90b2NvbE5vdGlmeUV2ZW50ICgN CiAgICA+ICsgICAgICAmZ0VmaUZhdWx0VG9sZXJhbnRXcml0ZVByb3RvY29sR3VpZCwNCiAgICA+ ICsgICAgICBUUExfQ0FMTEJBQ0ssDQogICAgPiArICAgICAgRnR3Tm90aWZpY2F0aW9uRXZlbnQs DQogICAgPiArICAgICAgKFZPSUQgKilTeXN0ZW1UYWJsZSwNCiAgICA+ICsgICAgICAmbUZ0d1Jl Z2lzdHJhdGlvbg0KICAgID4gKyAgICAgICk7DQogICAgPiArICB9IGVsc2Ugew0KICAgID4gKyAg ICAvLw0KICAgID4gKyAgICAvLyBFbXVsYXRlZCBub24tdm9sYXRpbGUgdmFyaWFibGUgbW9kZSBk b2VzIG5vdCBkZXBlbmQgb24gRlZCIGFuZCBGVFcuDQogICAgPiArICAgIC8vDQogICAgPiArICAg IFZhcmlhYmxlV3JpdGVTZXJ2aWNlSW5pdGlhbGl6ZUR4ZSAoKTsNCiAgICA+ICsgIH0NCiAgICA+ ICsNCiAgICA+ICsgIFN0YXR1cyA9IGdCUy0+Q3JlYXRlRXZlbnRFeCAoDQogICAgPiArICAgICAg ICAgICAgICAgICAgRVZUX05PVElGWV9TSUdOQUwsDQogICAgPiArICAgICAgICAgICAgICAgICAg VFBMX05PVElGWSwNCiAgICA+ICsgICAgICAgICAgICAgICAgICBWYXJpYWJsZUNsYXNzQWRkcmVz c0NoYW5nZUV2ZW50LA0KICAgID4gKyAgICAgICAgICAgICAgICAgIE5VTEwsDQogICAgPiArICAg ICAgICAgICAgICAgICAgJmdFZmlFdmVudFZpcnR1YWxBZGRyZXNzQ2hhbmdlR3VpZCwNCiAgICA+ ICsgICAgICAgICAgICAgICAgICAmbVZpcnR1YWxBZGRyZXNzQ2hhbmdlRXZlbnQNCiAgICA+ICsg ICAgICAgICAgICAgICAgICApOw0KICAgID4gKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsN CiAgICA+ICsNCiAgICA+ICsgIC8vDQogICAgPiArICAvLyBSZWdpc3RlciB0aGUgZXZlbnQgaGFu ZGxpbmcgZnVuY3Rpb24gdG8gcmVjbGFpbSB2YXJpYWJsZSBmb3IgT1MgdXNhZ2UuDQogICAgPiAr ICAvLw0KICAgID4gKyAgU3RhdHVzID0gRWZpQ3JlYXRlRXZlbnRSZWFkeVRvQm9vdEV4ICgNCiAg ICA+ICsgICAgICAgICAgICAgVFBMX05PVElGWSwNCiAgICA+ICsgICAgICAgICAgICAgT25SZWFk eVRvQm9vdCwNCiAgICA+ICsgICAgICAgICAgICAgTlVMTCwNCiAgICA+ICsgICAgICAgICAgICAg JlJlYWR5VG9Cb290RXZlbnQNCiAgICA+ICsgICAgICAgICAgICAgKTsNCiAgICA+ICsgIEFTU0VS VF9FRklfRVJST1IgKFN0YXR1cyk7DQogICAgPiArDQogICAgPiArICAvLw0KICAgID4gKyAgLy8g UmVnaXN0ZXIgdGhlIGV2ZW50IGhhbmRsaW5nIGZ1bmN0aW9uIHRvIHNldCB0aGUgRW5kIE9mIERY RSBmbGFnLg0KICAgID4gKyAgLy8NCiAgICA+ICsgIFN0YXR1cyA9IGdCUy0+Q3JlYXRlRXZlbnRF eCAoDQogICAgPiArICAgICAgICAgICAgICAgICAgRVZUX05PVElGWV9TSUdOQUwsDQogICAgPiAr ICAgICAgICAgICAgICAgICAgVFBMX0NBTExCQUNLLA0KICAgID4gKyAgICAgICAgICAgICAgICAg IE9uRW5kT2ZEeGUsDQogICAgPiArICAgICAgICAgICAgICAgICAgTlVMTCwNCiAgICA+ICsgICAg ICAgICAgICAgICAgICAmZ0VmaUVuZE9mRHhlRXZlbnRHcm91cEd1aWQsDQogICAgPiArICAgICAg ICAgICAgICAgICAgJkVuZE9mRHhlRXZlbnQNCiAgICA+ICsgICAgICAgICAgICAgICAgICApOw0K ICAgID4gKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCiAgICA+ICsNCiAgICA+ICsgIC8v IFJlZ2lzdGVyIGFuZCBpbml0aWFsaXplIHRoZSBWYXJpYWJsZVBvbGljeSBlbmdpbmUuDQogICAg PiArICBTdGF0dXMgPSBJbml0VmFyaWFibGVQb2xpY3lMaWIgKFZhcmlhYmxlU2VydmljZUdldFZh cmlhYmxlKTsNCiAgICA+ICsgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQogICAgPiArICBT dGF0dXMgPSBWYXJDaGVja1JlZ2lzdGVyU2V0VmFyaWFibGVDaGVja0hhbmRsZXIgKFZhbGlkYXRl U2V0VmFyaWFibGUpOw0KICAgID4gKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCiAgICA+ ICsgIFN0YXR1cyA9IGdCUy0+SW5zdGFsbE11bHRpcGxlUHJvdG9jb2xJbnRlcmZhY2VzICgNCiAg ICA+ICsgICAgICAgICAgICAgICAgICAmbUhhbmRsZSwNCiAgICA+ICsgICAgICAgICAgICAgICAg ICAmZ0Vka2lpVmFyaWFibGVQb2xpY3lQcm90b2NvbEd1aWQsDQogICAgPiArICAgICAgICAgICAg ICAgICAgJm1WYXJpYWJsZVBvbGljeVByb3RvY29sLA0KICAgID4gKyAgICAgICAgICAgICAgICAg IE5VTEwNCiAgICA+ICsgICAgICAgICAgICAgICAgICApOw0KICAgID4gKyAgQVNTRVJUX0VGSV9F UlJPUiAoU3RhdHVzKTsNCiAgICA+ICsNCiAgICA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCiAg ICA+ICt9DQogICAgPiBkaWZmIC0tZ2l0DQogICAgPiBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwv VmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVFeExpYi5jDQogICAgPiBiL01k ZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFi bGVFeExpYi5jDQogICAgPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgID4gaW5kZXggMDAwMDAw MDAwMDAwLi41OTA0YmNiZmY3OGENCiAgICA+IC0tLSAvZGV2L251bGwNCiAgICA+ICsrKw0KICAg ID4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhl L1ZhcmlhYmxlRXhMaWIuYw0KICAgID4gQEAgLTAsMCArMSw0MTcgQEANCiAgICA+ICsvKiogQGZp bGUNCiAgICA+ICsgIFByb3ZpZGVzIHZhcmlhYmxlIGRyaXZlciBleHRlbmRlZCBzZXJ2aWNlcy4N CiAgICA+ICsNCiAgICA+ICtDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDIyLCBJbnRlbCBDb3Jwb3Jh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQogICAgPiArU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICsN CiAgICA+ICsjaW5jbHVkZSAiVmFyaWFibGUuaCINCiAgICA+ICsjaW5jbHVkZSAiVmFyaWFibGVQ YXJzaW5nLmgiDQogICAgPiArI2luY2x1ZGUgIlZhcmlhYmxlUnVudGltZUNhY2hlLmgiDQogICAg PiArDQogICAgPiArLyoqDQogICAgPiArICBGaW5kcyB2YXJpYWJsZSBpbiBzdG9yYWdlIGJsb2Nr cyBvZiB2b2xhdGlsZSBhbmQgbm9uLXZvbGF0aWxlIHN0b3JhZ2UgYXJlYXMuDQogICAgPiArDQog ICAgPiArICBUaGlzIGNvZGUgZmluZHMgdmFyaWFibGUgaW4gc3RvcmFnZSBibG9ja3Mgb2Ygdm9s YXRpbGUgYW5kIG5vbi12b2xhdGlsZSBzdG9yYWdlDQogICAgPiBhcmVhcy4NCiAgICA+ICsgIElm IFZhcmlhYmxlTmFtZSBpcyBhbiBlbXB0eSBzdHJpbmcsIHRoZW4gd2UganVzdCByZXR1cm4gdGhl IGZpcnN0DQogICAgPiArICBxdWFsaWZpZWQgdmFyaWFibGUgd2l0aG91dCBjb21wYXJpbmcgVmFy aWFibGVOYW1lIGFuZCBWZW5kb3JHdWlkLg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtW2luXSAg VmFyaWFibGVOYW1lICAgICAgICAgIE5hbWUgb2YgdGhlIHZhcmlhYmxlIHRvIGJlIGZvdW5kLg0K ICAgID4gKyAgQHBhcmFtW2luXSAgVmVuZG9yR3VpZCAgICAgICAgICAgIFZhcmlhYmxlIHZlbmRv ciBHVUlEIHRvIGJlIGZvdW5kLg0KICAgID4gKyAgQHBhcmFtW291dF0gQXV0aFZhcmlhYmxlSW5m byAgICAgIFBvaW50ZXIgdG8gQVVUSF9WQVJJQUJMRV9JTkZPIHN0cnVjdHVyZQ0KICAgID4gZm9y DQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IG9mIHRo ZSB2YXJpYWJsZSBmb3VuZC4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURf UEFSQU1FVEVSICAgICBJZiBWYXJpYWJsZU5hbWUgaXMgbm90IGFuIGVtcHR5IHN0cmluZywNCiAg ICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSBWZW5kb3JHdWlk IGlzIE5VTEwuDQogICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgVmFy aWFibGUgc3VjY2Vzc2Z1bGx5IGZvdW5kLg0KICAgID4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5E ICAgICAgICAgICAgIFZhcmlhYmxlIG5vdCBmb3VuZA0KICAgID4gKw0KICAgID4gKyoqLw0KICAg ID4gK0VGSV9TVEFUVVMNCiAgICA+ICtFRklBUEkNCiAgICA+ICtWYXJpYWJsZUV4TGliRmluZFZh cmlhYmxlICgNCiAgICA+ICsgIElOICBDSEFSMTYgICAgICAgICAgICAgICpWYXJpYWJsZU5hbWUs DQogICAgPiArICBJTiAgRUZJX0dVSUQgICAgICAgICAgICAqVmVuZG9yR3VpZCwNCiAgICA+ICsg IE9VVCBBVVRIX1ZBUklBQkxFX0lORk8gICpBdXRoVmFyaWFibGVJbmZvDQogICAgPiArICApDQog ICAgPiArew0KICAgID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsN CiAgICA+ICsgIFZBUklBQkxFX1BPSU5URVJfVFJBQ0sgICAgICAgICBWYXJpYWJsZTsNCiAgICA+ ICsgIEFVVEhFTlRJQ0FURURfVkFSSUFCTEVfSEVBREVSICAqQXV0aFZhcmlhYmxlOw0KICAgID4g KyAgUFJPVEVDVEVEX1ZBUklBQkxFX0lORk8gICAgICAgIFZhckluZm87DQogICAgPiArDQogICAg PiArICBTdGF0dXMgPSBGaW5kVmFyaWFibGUgKA0KICAgID4gKyAgICAgICAgICAgICBWYXJpYWJs ZU5hbWUsDQogICAgPiArICAgICAgICAgICAgIFZlbmRvckd1aWQsDQogICAgPiArICAgICAgICAg ICAgICZWYXJpYWJsZSwNCiAgICA+ICsgICAgICAgICAgICAgJm1WYXJpYWJsZU1vZHVsZUdsb2Jh bC0+VmFyaWFibGVHbG9iYWwsDQogICAgPiArICAgICAgICAgICAgIEZBTFNFDQogICAgPiArICAg ICAgICAgICAgICk7DQogICAgPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAgPiAr ICAgIEF1dGhWYXJpYWJsZUluZm8tPkRhdGEgICAgICAgICAgID0gTlVMTDsNCiAgICA+ICsgICAg QXV0aFZhcmlhYmxlSW5mby0+RGF0YVNpemUgICAgICAgPSAwOw0KICAgID4gKyAgICBBdXRoVmFy aWFibGVJbmZvLT5BdHRyaWJ1dGVzICAgICA9IDA7DQogICAgPiArICAgIEF1dGhWYXJpYWJsZUlu Zm8tPlB1YktleUluZGV4ICAgID0gMDsNCiAgICA+ICsgICAgQXV0aFZhcmlhYmxlSW5mby0+TW9u b3RvbmljQ291bnQgPSAwOw0KICAgID4gKyAgICBBdXRoVmFyaWFibGVJbmZvLT5UaW1lU3RhbXAg ICAgICA9IE5VTEw7DQogICAgPiArICAgIHJldHVybiBTdGF0dXM7DQogICAgPiArICB9DQogICAg PiArDQogICAgPiArICBBdXRoVmFyaWFibGVJbmZvLT5OYW1lU2l6ZSAgICAgPSBOYW1lU2l6ZU9m VmFyaWFibGUgKFZhcmlhYmxlLkN1cnJQdHIsDQogICAgPiBtVmFyaWFibGVNb2R1bGVHbG9iYWwt PlZhcmlhYmxlR2xvYmFsLkF1dGhGb3JtYXQpOw0KICAgID4gKyAgQXV0aFZhcmlhYmxlSW5mby0+ VmFyaWFibGVOYW1lID0gR2V0VmFyaWFibGVOYW1lUHRyIChWYXJpYWJsZS5DdXJyUHRyLA0KICAg ID4gbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0KTsNCiAg ICA+ICsgIEF1dGhWYXJpYWJsZUluZm8tPlZlbmRvckd1aWQgICA9IEdldFZlbmRvckd1aWRQdHIg KFZhcmlhYmxlLkN1cnJQdHIsDQogICAgPiBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxl R2xvYmFsLkF1dGhGb3JtYXQpOw0KICAgID4gKyAgQXV0aFZhcmlhYmxlSW5mby0+RGF0YVNpemUg ICAgID0gRGF0YVNpemVPZlZhcmlhYmxlIChWYXJpYWJsZS5DdXJyUHRyLA0KICAgID4gbVZhcmlh YmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0KTsNCiAgICA+ICsgIEF1 dGhWYXJpYWJsZUluZm8tPkRhdGEgICAgICAgICA9IEdldFZhcmlhYmxlRGF0YVB0ciAoVmFyaWFi bGUuQ3VyclB0ciwNCiAgICA+IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwu QXV0aEZvcm1hdCk7DQogICAgPiArICBBdXRoVmFyaWFibGVJbmZvLT5BdHRyaWJ1dGVzICAgPSBW YXJpYWJsZS5DdXJyUHRyLT5BdHRyaWJ1dGVzOw0KICAgID4gKyAgaWYgKG1WYXJpYWJsZU1vZHVs ZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdCkgew0KICAgID4gKyAgICBBdXRoVmFy aWFibGUgICAgICAgICAgICAgICAgICAgICA9IChBVVRIRU5USUNBVEVEX1ZBUklBQkxFX0hFQURF Ug0KICAgID4gKilWYXJpYWJsZS5DdXJyUHRyOw0KICAgID4gKyAgICBBdXRoVmFyaWFibGVJbmZv LT5QdWJLZXlJbmRleCAgICA9IEF1dGhWYXJpYWJsZS0+UHViS2V5SW5kZXg7DQogICAgPiArICAg IEF1dGhWYXJpYWJsZUluZm8tPk1vbm90b25pY0NvdW50ID0gUmVhZFVuYWxpZ25lZDY0ICgmKEF1 dGhWYXJpYWJsZS0NCiAgICA+ID5Nb25vdG9uaWNDb3VudCkpOw0KICAgID4gKyAgICBBdXRoVmFy aWFibGVJbmZvLT5UaW1lU3RhbXAgICAgICA9ICZBdXRoVmFyaWFibGUtPlRpbWVTdGFtcDsNCiAg ICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIENvcHlNZW0gKCZWYXJJbmZvLkhlYWRlciwgQXV0 aFZhcmlhYmxlSW5mbywgc2l6ZW9mIChWYXJJbmZvLkhlYWRlcikpOw0KICAgID4gKw0KICAgID4g KyAgVmFySW5mby5CdWZmZXIgICAgICAgID0gVmFyaWFibGUuQ3VyclB0cjsNCiAgICA+ICsgIFZh ckluZm8uUGxhaW5EYXRhICAgICA9IE5VTEw7DQogICAgPiArICBWYXJJbmZvLlBsYWluRGF0YVNp emUgPSAwOw0KICAgID4gKyAgVmFySW5mby5GbGFncy5BdXRoICAgID0gbVZhcmlhYmxlTW9kdWxl R2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0Ow0KICAgID4gKw0KICAgID4gKyAgLy8N CiAgICA+ICsgIC8vIEluIGNhc2UgdGhlIHZhcmlhYmxlIGlzIGVuY3J5cHRlZC4NCiAgICA+ICsg IC8vDQogICAgPiArICBTdGF0dXMgPSBQcm90ZWN0ZWRWYXJpYWJsZUxpYkdldEJ5SW5mbyAoJlZh ckluZm8pOw0KICAgID4gKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCiAgICA+ICsgICAg aWYgKFZhckluZm8uUGxhaW5EYXRhICE9IE5VTEwpIHsNCiAgICA+ICsgICAgICBBdXRoVmFyaWFi bGVJbmZvLT5EYXRhICAgICA9IFZhckluZm8uUGxhaW5EYXRhOw0KICAgID4gKyAgICAgIEF1dGhW YXJpYWJsZUluZm8tPkRhdGFTaXplID0gVmFySW5mby5QbGFpbkRhdGFTaXplOw0KICAgID4gKyAg ICB9DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQog ICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgRmluZHMgbmV4dCB2YXJpYWJs ZSBpbiBzdG9yYWdlIGJsb2NrcyBvZiB2b2xhdGlsZSBhbmQgbm9uLXZvbGF0aWxlIHN0b3JhZ2Ug YXJlYXMuDQogICAgPiArDQogICAgPiArICBUaGlzIGNvZGUgZmluZHMgbmV4dCB2YXJpYWJsZSBp biBzdG9yYWdlIGJsb2NrcyBvZiB2b2xhdGlsZSBhbmQgbm9uLXZvbGF0aWxlDQogICAgPiBzdG9y YWdlIGFyZWFzLg0KICAgID4gKyAgSWYgVmFyaWFibGVOYW1lIGlzIGFuIGVtcHR5IHN0cmluZywg dGhlbiB3ZSBqdXN0IHJldHVybiB0aGUgZmlyc3QNCiAgICA+ICsgIHF1YWxpZmllZCB2YXJpYWJs ZSB3aXRob3V0IGNvbXBhcmluZyBWYXJpYWJsZU5hbWUgYW5kIFZlbmRvckd1aWQuDQogICAgPiAr DQogICAgPiArICBAcGFyYW1baW5dICBWYXJpYWJsZU5hbWUgICAgICAgICAgTmFtZSBvZiB0aGUg dmFyaWFibGUgdG8gYmUgZm91bmQuDQogICAgPiArICBAcGFyYW1baW5dICBWZW5kb3JHdWlkICAg ICAgICAgICAgVmFyaWFibGUgdmVuZG9yIEdVSUQgdG8gYmUgZm91bmQuDQogICAgPiArICBAcGFy YW1bb3V0XSBBdXRoVmFyaWFibGVJbmZvICAgICAgUG9pbnRlciB0byBBVVRIX1ZBUklBQkxFX0lO Rk8gc3RydWN0dXJlDQogICAgPiBmb3INCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBvdXRwdXQgb2YgdGhlIG5leHQgdmFyaWFibGUuDQogICAgPiArDQogICAgPiAr ICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgICAgSWYgVmFyaWFibGVOYW1lIGlzIG5v dCBhbiBlbXB0eSBzdHJpbmcsDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgd2hpbGUgVmVuZG9yR3VpZCBpcyBOVUxMLg0KICAgID4gKyAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgICAgICAgIFZhcmlhYmxlIHN1Y2Nlc3NmdWxseSBmb3VuZC4NCiAgICA+ICsg IEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICAgICBWYXJpYWJsZSBub3QgZm91bmQNCiAg ICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtFRklfU1RBVFVTDQogICAgPiArRUZJQVBJDQogICAg PiArVmFyaWFibGVFeExpYkZpbmROZXh0VmFyaWFibGUgKA0KICAgID4gKyAgSU4gIENIQVIxNiAg ICAgICAgICAgICAgKlZhcmlhYmxlTmFtZSwNCiAgICA+ICsgIElOICBFRklfR1VJRCAgICAgICAg ICAgICpWZW5kb3JHdWlkLA0KICAgID4gKyAgT1VUIEFVVEhfVkFSSUFCTEVfSU5GTyAgKkF1dGhW YXJpYWJsZUluZm8NCiAgICA+ICsgICkNCiAgICA+ICt7DQogICAgPiArICBFRklfU1RBVFVTICAg ICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KICAgID4gKyAgVkFSSUFCTEVfSEVBREVSICAgICAg ICAgICAgICAgICpWYXJpYWJsZVB0cjsNCiAgICA+ICsgIEFVVEhFTlRJQ0FURURfVkFSSUFCTEVf SEVBREVSICAqQXV0aFZhcmlhYmxlUHRyOw0KICAgID4gKyAgVkFSSUFCTEVfU1RPUkVfSEVBREVS DQogICAgPiAqVmFyaWFibGVTdG9yZUhlYWRlcltWYXJpYWJsZVN0b3JlVHlwZU1heF07DQogICAg PiArICBQUk9URUNURURfVkFSSUFCTEVfSU5GTyAgICAgICAgVmFySW5mbzsNCiAgICA+ICsNCiAg ICA+ICsgIFZhcmlhYmxlU3RvcmVIZWFkZXJbVmFyaWFibGVTdG9yZVR5cGVWb2xhdGlsZV0gPQ0K ICAgID4gKFZBUklBQkxFX1NUT1JFX0hFQURFUiAqKShVSU5UTiltVmFyaWFibGVNb2R1bGVHbG9i YWwtDQogICAgPiA+VmFyaWFibGVHbG9iYWwuVm9sYXRpbGVWYXJpYWJsZUJhc2U7DQogICAgPiAr ICBWYXJpYWJsZVN0b3JlSGVhZGVyW1ZhcmlhYmxlU3RvcmVUeXBlSG9iXSAgICAgID0gKFZBUklB QkxFX1NUT1JFX0hFQURFUg0KICAgID4gKikoVUlOVE4pbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5W YXJpYWJsZUdsb2JhbC5Ib2JWYXJpYWJsZUJhc2U7DQogICAgPiArICBWYXJpYWJsZVN0b3JlSGVh ZGVyW1ZhcmlhYmxlU3RvcmVUeXBlTnZdICAgICAgID0gbU52VmFyaWFibGVDYWNoZTsNCiAgICA+ ICsNCiAgICA+ICsgIFN0YXR1cyA9IFZhcmlhYmxlU2VydmljZUdldE5leHRWYXJpYWJsZUludGVy bmFsICgNCiAgICA+ICsgICAgICAgICAgICAgVmFyaWFibGVOYW1lLA0KICAgID4gKyAgICAgICAg ICAgICBWZW5kb3JHdWlkLA0KICAgID4gKyAgICAgICAgICAgICBWYXJpYWJsZVN0b3JlSGVhZGVy LA0KICAgID4gKyAgICAgICAgICAgICAmVmFyaWFibGVQdHIsDQogICAgPiArICAgICAgICAgICAg IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdA0KICAgID4g KyAgICAgICAgICAgICApOw0KICAgID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAg ID4gKyAgICBBdXRoVmFyaWFibGVJbmZvLT5WYXJpYWJsZU5hbWUgICA9IE5VTEw7DQogICAgPiAr ICAgIEF1dGhWYXJpYWJsZUluZm8tPlZlbmRvckd1aWQgICAgID0gTlVMTDsNCiAgICA+ICsgICAg QXV0aFZhcmlhYmxlSW5mby0+RGF0YSAgICAgICAgICAgPSBOVUxMOw0KICAgID4gKyAgICBBdXRo VmFyaWFibGVJbmZvLT5EYXRhU2l6ZSAgICAgICA9IDA7DQogICAgPiArICAgIEF1dGhWYXJpYWJs ZUluZm8tPkF0dHJpYnV0ZXMgICAgID0gMDsNCiAgICA+ICsgICAgQXV0aFZhcmlhYmxlSW5mby0+ UHViS2V5SW5kZXggICAgPSAwOw0KICAgID4gKyAgICBBdXRoVmFyaWFibGVJbmZvLT5Nb25vdG9u aWNDb3VudCA9IDA7DQogICAgPiArICAgIEF1dGhWYXJpYWJsZUluZm8tPlRpbWVTdGFtcCAgICAg ID0gTlVMTDsNCiAgICA+ICsgICAgcmV0dXJuIFN0YXR1czsNCiAgICA+ICsgIH0NCiAgICA+ICsN CiAgICA+ICsgIEF1dGhWYXJpYWJsZUluZm8tPk5hbWVTaXplICAgICA9IE5hbWVTaXplT2ZWYXJp YWJsZSAoVmFyaWFibGVQdHIsDQogICAgPiBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxl R2xvYmFsLkF1dGhGb3JtYXQpOw0KICAgID4gKyAgQXV0aFZhcmlhYmxlSW5mby0+VmFyaWFibGVO YW1lID0gR2V0VmFyaWFibGVOYW1lUHRyIChWYXJpYWJsZVB0ciwNCiAgICA+IG1WYXJpYWJsZU1v ZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdCk7DQogICAgPiArICBBdXRoVmFy aWFibGVJbmZvLT5WZW5kb3JHdWlkICAgPSBHZXRWZW5kb3JHdWlkUHRyIChWYXJpYWJsZVB0ciwN CiAgICA+IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdCk7 DQogICAgPiArICBBdXRoVmFyaWFibGVJbmZvLT5EYXRhU2l6ZSAgICAgPSBEYXRhU2l6ZU9mVmFy aWFibGUgKFZhcmlhYmxlUHRyLA0KICAgID4gbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJs ZUdsb2JhbC5BdXRoRm9ybWF0KTsNCiAgICA+ICsgIEF1dGhWYXJpYWJsZUluZm8tPkRhdGEgICAg ICAgICA9IEdldFZhcmlhYmxlRGF0YVB0ciAoVmFyaWFibGVQdHIsDQogICAgPiBtVmFyaWFibGVN b2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLkF1dGhGb3JtYXQpOw0KICAgID4gKyAgQXV0aFZh cmlhYmxlSW5mby0+QXR0cmlidXRlcyAgID0gVmFyaWFibGVQdHItPkF0dHJpYnV0ZXM7DQogICAg PiArICBpZiAobVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0 KSB7DQogICAgPiArICAgIEF1dGhWYXJpYWJsZVB0ciAgICAgICAgICAgICAgICAgID0gKEFVVEhF TlRJQ0FURURfVkFSSUFCTEVfSEVBREVSDQogICAgPiAqKVZhcmlhYmxlUHRyOw0KICAgID4gKyAg ICBBdXRoVmFyaWFibGVJbmZvLT5QdWJLZXlJbmRleCAgICA9IEF1dGhWYXJpYWJsZVB0ci0+UHVi S2V5SW5kZXg7DQogICAgPiArICAgIEF1dGhWYXJpYWJsZUluZm8tPk1vbm90b25pY0NvdW50ID0g UmVhZFVuYWxpZ25lZDY0ICgmKEF1dGhWYXJpYWJsZVB0ci0NCiAgICA+ID5Nb25vdG9uaWNDb3Vu dCkpOw0KICAgID4gKyAgICBBdXRoVmFyaWFibGVJbmZvLT5UaW1lU3RhbXAgICAgICA9ICZBdXRo VmFyaWFibGVQdHItPlRpbWVTdGFtcDsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIENv cHlNZW0gKCZWYXJJbmZvLkhlYWRlciwgQXV0aFZhcmlhYmxlSW5mbywgc2l6ZW9mIChWYXJJbmZv LkhlYWRlcikpOw0KICAgID4gKw0KICAgID4gKyAgVmFySW5mby5CdWZmZXIgICAgICAgID0gVmFy aWFibGVQdHI7DQogICAgPiArICBWYXJJbmZvLlBsYWluRGF0YSAgICAgPSBOVUxMOw0KICAgID4g KyAgVmFySW5mby5QbGFpbkRhdGFTaXplID0gMDsNCiAgICA+ICsNCiAgICA+ICsgIFN0YXR1cyA9 IFByb3RlY3RlZFZhcmlhYmxlTGliR2V0QnlJbmZvICgmVmFySW5mbyk7DQogICAgPiArICBpZiAo IUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgID4gKyAgICBpZiAoVmFySW5mby5QbGFpbkRhdGEg IT0gTlVMTCkgew0KICAgID4gKyAgICAgIEF1dGhWYXJpYWJsZUluZm8tPkRhdGEgICAgID0gVmFy SW5mby5QbGFpbkRhdGE7DQogICAgPiArICAgICAgQXV0aFZhcmlhYmxlSW5mby0+RGF0YVNpemUg PSBWYXJJbmZvLlBsYWluRGF0YVNpemU7DQogICAgPiArICAgIH0NCiAgICA+ICsgIH0NCiAgICA+ ICsNCiAgICA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCiAgICA+ICt9DQogICAgPiArDQogICAg PiArLyoqDQogICAgPiArICBVcGRhdGUgdGhlIHZhcmlhYmxlIHJlZ2lvbiB3aXRoIFZhcmlhYmxl IGluZm9ybWF0aW9uLg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtW2luXSBBdXRoVmFyaWFibGVJ bmZvICAgICAgIFBvaW50ZXIgQVVUSF9WQVJJQUJMRV9JTkZPIHN0cnVjdHVyZSBmb3INCiAgICA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCBvZiB0aGUgdmFyaWFi bGUuDQogICAgPiArDQogICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAg VGhlIHVwZGF0ZSBvcGVyYXRpb24gaXMgc3VjY2Vzcy4NCiAgICA+ICsgIEByZXR2YWwgRUZJX0lO VkFMSURfUEFSQU1FVEVSICAgICBJbnZhbGlkIHBhcmFtZXRlci4NCiAgICA+ICsgIEByZXR2YWwg RUZJX1dSSVRFX1BST1RFQ1RFRCAgICAgICBWYXJpYWJsZSBpcyB3cml0ZS1wcm90ZWN0ZWQuDQog ICAgPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgICAgVGhlcmUgaXMgbm90IGVu b3VnaCByZXNvdXJjZS4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtFRklfU1RBVFVTDQog ICAgPiArRUZJQVBJDQogICAgPiArVmFyaWFibGVFeExpYlVwZGF0ZVZhcmlhYmxlICgNCiAgICA+ ICsgIElOIEFVVEhfVkFSSUFCTEVfSU5GTyAgKkF1dGhWYXJpYWJsZUluZm8NCiAgICA+ICsgICkN CiAgICA+ICt7DQogICAgPiArICBWQVJJQUJMRV9QT0lOVEVSX1RSQUNLICBWYXJpYWJsZTsNCiAg ICA+ICsNCiAgICA+ICsgIEZpbmRWYXJpYWJsZSAoQXV0aFZhcmlhYmxlSW5mby0+VmFyaWFibGVO YW1lLCBBdXRoVmFyaWFibGVJbmZvLQ0KICAgID4gPlZlbmRvckd1aWQsICZWYXJpYWJsZSwgJm1W YXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwsIEZBTFNFKTsNCiAgICA+ICsgIHJl dHVybiBVcGRhdGVWYXJpYWJsZSAoDQogICAgPiArICAgICAgICAgICBBdXRoVmFyaWFibGVJbmZv LT5WYXJpYWJsZU5hbWUsDQogICAgPiArICAgICAgICAgICBBdXRoVmFyaWFibGVJbmZvLT5WZW5k b3JHdWlkLA0KICAgID4gKyAgICAgICAgICAgQXV0aFZhcmlhYmxlSW5mby0+RGF0YSwNCiAgICA+ ICsgICAgICAgICAgIEF1dGhWYXJpYWJsZUluZm8tPkRhdGFTaXplLA0KICAgID4gKyAgICAgICAg ICAgQXV0aFZhcmlhYmxlSW5mby0+QXR0cmlidXRlcywNCiAgICA+ICsgICAgICAgICAgIEF1dGhW YXJpYWJsZUluZm8tPlB1YktleUluZGV4LA0KICAgID4gKyAgICAgICAgICAgQXV0aFZhcmlhYmxl SW5mby0+TW9ub3RvbmljQ291bnQsDQogICAgPiArICAgICAgICAgICAmVmFyaWFibGUsDQogICAg PiArICAgICAgICAgICBBdXRoVmFyaWFibGVJbmZvLT5UaW1lU3RhbXANCiAgICA+ICsgICAgICAg ICAgICk7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgR2V0IHNjcmF0 Y2ggYnVmZmVyLg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtW2luLCBvdXRdIFNjcmF0Y2hCdWZm ZXJTaXplIFNjcmF0Y2ggYnVmZmVyIHNpemUuIElmIGlucHV0IHNpemUgaXMgZ3JlYXRlcg0KICAg ID4gdGhhbg0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBt YXhpbXVtIHN1cHBvcnRlZCBidWZmZXIgc2l6ZSwgdGhpcyB2YWx1ZSBjb250YWlucw0KICAgID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYXhpbXVtIHN1cHBvcnRl ZCBidWZmZXIgc2l6ZSBhcyBvdXRwdXQuDQogICAgPiArICBAcGFyYW1bb3V0XSAgICAgU2NyYXRj aEJ1ZmZlciAgICAgUG9pbnRlciB0byBzY3JhdGNoIGJ1ZmZlciBhZGRyZXNzLg0KICAgID4gKw0K ICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICBHZXQgc2NyYXRjaCBidWZmZXIgc3Vj Y2Vzc2Z1bGx5Lg0KICAgID4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICBJZiBpbnB1dCBz aXplIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bQ0KICAgID4gc3VwcG9ydGVkIGJ1ZmZlciBz aXplLg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK0VGSV9TVEFUVVMNCiAgICA+ICtFRklB UEkNCiAgICA+ICtWYXJpYWJsZUV4TGliR2V0U2NyYXRjaEJ1ZmZlciAoDQogICAgPiArICBJTiBP VVQgVUlOVE4gICpTY3JhdGNoQnVmZmVyU2l6ZSwNCiAgICA+ICsgIE9VVCAgICBWT0lEICAgKipT Y3JhdGNoQnVmZmVyDQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgVUlOVE4gIE1heEJ1 ZmZlclNpemU7DQogICAgPiArDQogICAgPiArICBNYXhCdWZmZXJTaXplID0gbVZhcmlhYmxlTW9k dWxlR2xvYmFsLT5TY3JhdGNoQnVmZmVyU2l6ZTsNCiAgICA+ICsgIGlmICgqU2NyYXRjaEJ1ZmZl clNpemUgPiBNYXhCdWZmZXJTaXplKSB7DQogICAgPiArICAgICpTY3JhdGNoQnVmZmVyU2l6ZSA9 IE1heEJ1ZmZlclNpemU7DQogICAgPiArICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQogICAg PiArICB9DQogICAgPiArDQogICAgPiArICAqU2NyYXRjaEJ1ZmZlciA9IEdldEVuZFBvaW50ZXIg KChWQVJJQUJMRV9TVE9SRV9IRUFERVINCiAgICA+ICopKChVSU5UTiltVmFyaWFibGVNb2R1bGVH bG9iYWwtPlZhcmlhYmxlR2xvYmFsLlZvbGF0aWxlVmFyaWFibGVCYXNlKSk7DQogICAgPiArICBy ZXR1cm4gRUZJX1NVQ0NFU1M7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4g KyAgVGhpcyBmdW5jdGlvbiBpcyB0byBjaGVjayBpZiB0aGUgcmVtYWluaW5nIHZhcmlhYmxlIHNw YWNlIGlzIGVub3VnaCB0byBzZXQNCiAgICA+ICsgIGFsbCBWYXJpYWJsZXMgZnJvbSBhcmd1bWVu dCBsaXN0IHN1Y2Nlc3NmdWxseS4gVGhlIHB1cnBvc2Ugb2YgdGhlIGNoZWNrDQogICAgPiArICBp cyB0byBrZWVwIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgVmFyaWFibGVzIHRvIGJlIGluIHZhcmlh YmxlIHN0b3JhZ2UuDQogICAgPiArDQogICAgPiArICBOb3RlOiBWYXJpYWJsZXMgYXJlIGFzc3Vt ZWQgdG8gYmUgaW4gc2FtZSBzdG9yYWdlLg0KICAgID4gKyAgVGhlIHNldCBzZXF1ZW5jZSBvZiBW YXJpYWJsZXMgd2lsbCBiZSBzYW1lIHdpdGggdGhlIHNlcXVlbmNlIG9mIFZhcmlhYmxlRW50cnkN CiAgICA+IGZyb20gYXJndW1lbnQgbGlzdCwNCiAgICA+ICsgIHNvIGZvbGxvdyB0aGUgYXJndW1l bnQgc2VxdWVuY2UgdG8gY2hlY2sgdGhlIFZhcmlhYmxlcy4NCiAgICA+ICsNCiAgICA+ICsgIEBw YXJhbVtpbl0gQXR0cmlidXRlcyAgICAgICAgIFZhcmlhYmxlIGF0dHJpYnV0ZXMgZm9yIFZhcmlh YmxlIGVudHJpZXMuDQogICAgPiArICBAcGFyYW0gLi4uICAgICAgICAgICAgICAgICAgICBUaGUg dmFyaWFibGUgYXJndW1lbnQgbGlzdCB3aXRoIHR5cGUNCiAgICA+IFZBUklBQkxFX0VOVFJZX0NP TlNJU1RFTkNZICouDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIE5V TEwgdGVybWluYXRlcyB0aGUgbGlzdC4gVGhlIFZhcmlhYmxlU2l6ZSBvZg0KICAgID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFSSUFCTEVfRU5UUllfQ09OU0lTVEVOQ1kgaXMg dGhlIHZhcmlhYmxlIGRhdGEgc2l6ZSBhcw0KICAgID4gaW5wdXQuDQogICAgPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBJdCB3aWxsIGJlIGNoYW5nZWQgdG8gdmFyaWFibGUgdG90 YWwgc2l6ZSBhcyBvdXRwdXQuDQogICAgPiArDQogICAgPiArICBAcmV0dmFsIFRSVUUgICAgICAg ICAgICAgICAgICBIYXZlIGVub3VnaCB2YXJpYWJsZSBzcGFjZSB0byBzZXQgdGhlIFZhcmlhYmxl cw0KICAgID4gc3VjY2Vzc2Z1bGx5Lg0KICAgID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgICAg ICAgICAgTm8gZW5vdWdoIHZhcmlhYmxlIHNwYWNlIHRvIHNldCB0aGUgVmFyaWFibGVzDQogICAg PiBzdWNjZXNzZnVsbHkuDQogICAgPiArDQogICAgPiArKiovDQogICAgPiArQk9PTEVBTg0KICAg ID4gK0VGSUFQSQ0KICAgID4gK1ZhcmlhYmxlRXhMaWJDaGVja1JlbWFpbmluZ1NwYWNlRm9yQ29u c2lzdGVuY3kgKA0KICAgID4gKyAgSU4gVUlOVDMyICBBdHRyaWJ1dGVzLA0KICAgID4gKyAgLi4u DQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgVkFfTElTVCAgTWFya2VyOw0KICAgID4g KyAgQk9PTEVBTiAgUmV0dXJuOw0KICAgID4gKw0KICAgID4gKyAgVkFfU1RBUlQgKE1hcmtlciwg QXR0cmlidXRlcyk7DQogICAgPiArDQogICAgPiArICBSZXR1cm4gPSBDaGVja1JlbWFpbmluZ1Nw YWNlRm9yQ29uc2lzdGVuY3lJbnRlcm5hbCAoQXR0cmlidXRlcywgTWFya2VyKTsNCiAgICA+ICsN CiAgICA+ICsgIFZBX0VORCAoTWFya2VyKTsNCiAgICA+ICsNCiAgICA+ICsgIHJldHVybiBSZXR1 cm47DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgUmV0dXJuIFRSVUUg aWYgYXQgT1MgcnVudGltZS4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwgVFJVRSBJZiBhdCBP UyBydW50aW1lLg0KICAgID4gKyAgQHJldHZhbCBGQUxTRSBJZiBhdCBib290IHRpbWUuDQogICAg PiArDQogICAgPiArKiovDQogICAgPiArQk9PTEVBTg0KICAgID4gK0VGSUFQSQ0KICAgID4gK1Zh cmlhYmxlRXhMaWJBdFJ1bnRpbWUgKA0KICAgID4gKyAgVk9JRA0KICAgID4gKyAgKQ0KICAgID4g K3sNCiAgICA+ICsgIHJldHVybiBBdFJ1bnRpbWUgKCk7DQogICAgPiArfQ0KICAgID4gKw0KICAg ID4gKy8qKg0KICAgID4gKyAgVXBkYXRlIHBhcnRpYWwgZGF0YSBvZiBhIHZhcmlhYmxlIG9uIE5W IHN0b3JhZ2UgYW5kL29yIGNhY2hlZCBjb3B5Lg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtW2lu XSAgVmFyaWFibGVJbmZvICBQb2ludGVyIHRvIGEgdmFyaWFibGUgd2l0aCBkZXRhaWxlZCBpbmZv cm1hdGlvbi4NCiAgICA+ICsgIEBwYXJhbVtpbl0gIE9mZnNldCAgICAgICAgT2Zmc2V0IHRvIHdy aXRlIGZyb20uDQogICAgPiArICBAcGFyYW1baW5dICBTaXplICAgICAgICAgIFNpemUgb2YgZGF0 YSBCdWZmZXIgdG8gdXBkYXRlLg0KICAgID4gKyAgQHBhcmFtW2luXSAgQnVmZmVyICAgICAgICBQ b2ludGVyIHRvIGRhdGEgYnVmZmVyIHRvIHVwZGF0ZS4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2 YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGRhdGEgd2FzIHVwZGF0ZWQg c3VjY2Vzc2Z1bGx5Lg0KICAgID4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgICBJ ZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkaXJlY3RseSBpbiBydW50aW1lLg0KICAgID4gKyAg QHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICBJZiBWYXJpYWJsZUluZm8sIEJ1ZmZlciBv ciBTaXplIGFyZSBub3QNCiAgICA+IHZhbGlkLg0KICAgID4gKyAgQHJldHZhbCBPdGhlcnMgICAg ICAgICAgICAgICAgICBGYWlsZWQgdG8gdXBkYXRlIE5WIHN0b3JhZ2Ugb3IgdmFyaWFibGUgY2Fj aGUuDQogICAgPiArDQogICAgPiArKiovDQogICAgPiArRUZJX1NUQVRVUw0KICAgID4gK0VGSUFQ SQ0KICAgID4gK1ZhcmlhYmxlRXhMaWJVcGRhdGVOdlZhcmlhYmxlICgNCiAgICA+ICsgIElOICBQ Uk9URUNURURfVkFSSUFCTEVfSU5GTyAgKlZhcmlhYmxlSW5mbywNCiAgICA+ICsgIElOICBVSU5U TiAgICAgICAgICAgICAgICAgICAgT2Zmc2V0LA0KICAgID4gKyAgSU4gIFVJTlQzMiAgICAgICAg ICAgICAgICAgICBTaXplLA0KICAgID4gKyAgSU4gIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAq QnVmZmVyDQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgRUZJX1NUQVRVUyAgICAgICAg ICAgICAgU3RhdHVzOw0KICAgID4gKyAgVkFSSUFCTEVfR0xPQkFMICAgICAgICAgKkdsb2JhbDsN CiAgICA+ICsgIFZBUklBQkxFX1JVTlRJTUVfQ0FDSEUgICpDYWNoZUluc3RhbmNlOw0KICAgID4g KyAgVkFSSUFCTEVfSEVBREVSICAgICAgICAgKlZhcmlhYmxlQ2FjaGU7DQogICAgPiArDQogICAg PiArICBpZiAoKG1WYXJpYWJsZU1vZHVsZUdsb2JhbCA9PSBOVUxMKSB8fCAobU52VmFyaWFibGVD YWNoZSA9PSBOVUxMKSkgew0KICAgID4gKyAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KICAg ID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIEZsdXNoIHRoZSBjYWNo ZSB0byBzdG9yZS4NCiAgICA+ICsgIC8vDQogICAgPiArICBpZiAoU2l6ZSA9PSAoVUlOVDMyKS0x KSB7DQogICAgPiArICAgIFN0YXR1cyA9IEZ0d1ZhcmlhYmxlU3BhY2UgKA0KICAgID4gKyAgICAg ICAgICAgICAgIG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuTm9uVm9sYXRp bGVWYXJpYWJsZUJhc2UsDQogICAgPiArICAgICAgICAgICAgICAgbU52VmFyaWFibGVDYWNoZQ0K ICAgID4gKyAgICAgICAgICAgICAgICk7DQogICAgPiArICAgIGlmICggICFFRklfRVJST1IgKFN0 YXR1cykNCiAgICA+ICsgICAgICAgJiYgKG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVH bG9iYWwuSG9iVmFyaWFibGVCYXNlICE9IDApKQ0KICAgID4gKyAgICB7DQogICAgPiArICAgICAg Rmx1c2hIb2JWYXJpYWJsZVRvRmxhc2ggKE5VTEwsIE5VTEwpOw0KICAgID4gKyAgICAgIGlmICht VmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLkhvYlZhcmlhYmxlQmFzZSAhPSAw KSB7DQogICAgPiArICAgICAgICBGcmVlUG9vbCAoKFZPSUQgKikoVUlOVE4pbVZhcmlhYmxlTW9k dWxlR2xvYmFsLQ0KICAgID4gPlZhcmlhYmxlR2xvYmFsLkhvYlZhcmlhYmxlQmFzZSk7DQogICAg PiArICAgICAgICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLkhvYlZhcmlh YmxlQmFzZSA9IDA7DQogICAgPiArICAgICAgfQ0KICAgID4gKyAgICB9DQogICAgPiArDQogICAg PiArICAgIHJldHVybiBTdGF0dXM7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICBpZiAo ICAoVmFyaWFibGVJbmZvID09IE5VTEwpDQogICAgPiArICAgICB8fCAoVmFyaWFibGVJbmZvLT5T dG9yZUluZGV4ID09IFZBUl9JTkRFWF9JTlZBTElEKQ0KICAgID4gKyAgICAgfHwgKEJ1ZmZlciA9 PSBOVUxMKQ0KICAgID4gKyAgICAgfHwgKFNpemUgPT0gMCkpDQogICAgPiArICB7DQogICAgPiAr ICAgIEFTU0VSVCAoVmFyaWFibGVJbmZvICE9IE5VTEwpOw0KICAgID4gKyAgICBBU1NFUlQgKFZh cmlhYmxlSW5mby0+U3RvcmVJbmRleCAhPSBWQVJfSU5ERVhfSU5WQUxJRCk7DQogICAgPiArICAg IEFTU0VSVCAoQnVmZmVyICE9IE5VTEwpOw0KICAgID4gKyAgICBBU1NFUlQgKFNpemUgIT0gMCk7 DQogICAgPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQogICAgPiArICB9DQog ICAgPiArDQogICAgPiArICBHbG9iYWwgPSAmbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJs ZUdsb2JhbDsNCiAgICA+ICsNCiAgICA+ICsgIFZhcmlhYmxlQ2FjaGUgPSAoVkFSSUFCTEVfSEVB REVSICopKChVSU5UTiltTnZWYXJpYWJsZUNhY2hlICsNCiAgICA+IChVSU5UTilWYXJpYWJsZUlu Zm8tPlN0b3JlSW5kZXgpOw0KICAgID4gKw0KICAgID4gKyAgQVNTRVJUICgNCiAgICA+ICsgICAg U3RyQ21wICgNCiAgICA+ICsgICAgICBWYXJpYWJsZUluZm8tPkhlYWRlci5WYXJpYWJsZU5hbWUs DQogICAgPiArICAgICAgR2V0VmFyaWFibGVOYW1lUHRyIChWYXJpYWJsZUNhY2hlLCBHbG9iYWwt PkF1dGhGb3JtYXQpDQogICAgPiArICAgICAgKSA9PSAwDQogICAgPiArICAgICk7DQogICAgPiAr ICBBU1NFUlQgKA0KICAgID4gKyAgICBDb21wYXJlR3VpZCAoDQogICAgPiArICAgICAgVmFyaWFi bGVJbmZvLT5IZWFkZXIuVmVuZG9yR3VpZCwNCiAgICA+ICsgICAgICBHZXRWZW5kb3JHdWlkUHRy IChWYXJpYWJsZUNhY2hlLCBHbG9iYWwtPkF1dGhGb3JtYXQpDQogICAgPiArICAgICAgKQ0KICAg ID4gKyAgICApOw0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIEZvcmNpYmx5IHVw ZGF0ZSBwYXJ0IGRhdGEgb2YgZmxhc2ggY29weSBvZiB0aGUgdmFyaWFibGUgLi4uDQogICAgPiAr ICAvLw0KICAgID4gKyAgU3RhdHVzID0gIFVwZGF0ZVZhcmlhYmxlU3RvcmUgKA0KICAgID4gKyAg ICAgICAgICAgICAgR2xvYmFsLA0KICAgID4gKyAgICAgICAgICAgICAgRkFMU0UsDQogICAgPiAr ICAgICAgICAgICAgICBGQUxTRSwNCiAgICA+ICsgICAgICAgICAgICAgIG1WYXJpYWJsZU1vZHVs ZUdsb2JhbC0+RnZiSW5zdGFuY2UsDQogICAgPiArICAgICAgICAgICAgICAoVUlOVE4pKEdsb2Jh bC0+Tm9uVm9sYXRpbGVWYXJpYWJsZUJhc2UgKyBWYXJpYWJsZUluZm8tPlN0b3JlSW5kZXggKw0K ICAgID4gT2Zmc2V0KSwNCiAgICA+ICsgICAgICAgICAgICAgIFNpemUsDQogICAgPiArICAgICAg ICAgICAgICBCdWZmZXINCiAgICA+ICsgICAgICAgICAgICAgICk7DQogICAgPiArICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQogICAgPiArICAgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7 DQogICAgPiArICAgIHJldHVybiBTdGF0dXM7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiAr ICAvLw0KICAgID4gKyAgLy8gLi4uIGFzIHdlbGwgYXMgdGhlIGxvY2FsIGNhY2hlZCBjb3B5Lg0K ICAgID4gKyAgLy8NCiAgICA+ICsgIENvcHlNZW0gKChWT0lEICopKChVSU5UTilWYXJpYWJsZUNh Y2hlICsgT2Zmc2V0KSwgQnVmZmVyLCBTaXplKTsNCiAgICA+ICsNCiAgICA+ICsgIC8vDQogICAg PiArICAvLyBTeW5jIHJlbW90ZSBjYWNoZWQgY29weS4NCiAgICA+ICsgIC8vDQogICAgPiArICBD YWNoZUluc3RhbmNlID0gJkdsb2JhbC0NCiAgICA+ID5WYXJpYWJsZVJ1bnRpbWVDYWNoZUNvbnRl eHQuVmFyaWFibGVSdW50aW1lTnZDYWNoZTsNCiAgICA+ICsgIGlmIChDYWNoZUluc3RhbmNlLT5T dG9yZSAhPSBOVUxMKSB7DQogICAgPiArICAgIFN0YXR1cyA9ICBTeW5jaHJvbml6ZVJ1bnRpbWVW YXJpYWJsZUNhY2hlICgNCiAgICA+ICsgICAgICAgICAgICAgICAgQ2FjaGVJbnN0YW5jZSwNCiAg ICA+ICsgICAgICAgICAgICAgICAgKFVJTlROKVZhcmlhYmxlSW5mby0+U3RvcmVJbmRleCArIE9m ZnNldCwNCiAgICA+ICsgICAgICAgICAgICAgICAgU2l6ZQ0KICAgID4gKyAgICAgICAgICAgICAg ICApOw0KICAgID4gKyAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KICAgID4gKyAgfQ0K ICAgID4gKw0KICAgID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KICAgID4gK30NCiAgICA+IGRp ZmYgLS1naXQNCiAgICA+IGEvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0 ZWQvUnVudGltZUR4ZS9WYXJpYWJsZUxvY2tSZXF1DQogICAgPiBlc3RUb0xvY2suYw0KICAgID4g Yi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1Zh cmlhYmxlTG9ja1JlcXUNCiAgICA+IGVzdFRvTG9jay5jDQogICAgPiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KICAgID4gaW5kZXggMDAwMDAwMDAwMDAwLi5kODQ5ZWU5Y2UyOTINCiAgICA+IC0tLSAv ZGV2L251bGwNCiAgICA+ICsrKw0KICAgID4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1Zhcmlh YmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlTG9ja1JlcXUNCiAgICA+IGVzdFRvTG9j ay5jDQogICAgPiBAQCAtMCwwICsxLDk2IEBADQogICAgPiArLyoqIEBmaWxlDQogICAgPiArICBU ZW1wb3JhcnkgbG9jYXRpb24gb2YgdGhlIFJlcXVlc3RUb0xvY2sgc2hpbSBjb2RlIHdoaWxlIHBy b2plY3RzDQogICAgPiArICBhcmUgbW92ZWQgdG8gVmFyaWFibGVQb2xpY3kuIFNob3VsZCBiZSBy ZW1vdmVkIHdoZW4gZGVwcmVjYXRlZC4NCiAgICA+ICsNCiAgICA+ICsgIENvcHlyaWdodCAoYykg TWljcm9zb2Z0IENvcnBvcmF0aW9uLg0KICAgID4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEJTRC0yLUNsYXVzZS1QYXRlbnQNCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICsNCiAgICA+ ICsjaW5jbHVkZSA8VWVmaS5oPg0KICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+ DQogICAgPiArI2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0KICAgID4g KyNpbmNsdWRlIDxMaWJyYXJ5L1ZhcmlhYmxlUG9saWN5TGliLmg+DQogICAgPiArI2luY2x1ZGUg PExpYnJhcnkvVmFyaWFibGVQb2xpY3lIZWxwZXJMaWIuaD4NCiAgICA+ICsjaW5jbHVkZSA8UHJv dG9jb2wvVmFyaWFibGVMb2NrLmg+DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBERVBS RUNBVEVELiBUSElTIElTIE9OTFkgSEVSRSBBUyBBIENPTlZFTklFTkNFIFdISUxFIFBPUlRJTkcu DQogICAgPiArICBNYXJrIGEgdmFyaWFibGUgdGhhdCB3aWxsIGJlY29tZSByZWFkLW9ubHkgYWZ0 ZXIgbGVhdmluZyB0aGUgRFhFIHBoYXNlIG9mDQogICAgPiArICBleGVjdXRpb24uIFdyaXRlIHJl cXVlc3QgY29taW5nIGZyb20gU01NIGVudmlyb25tZW50IHRocm91Z2gNCiAgICA+ICsgIEVGSV9T TU1fVkFSSUFCTEVfUFJPVE9DT0wgaXMgYWxsb3dlZC4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJh bVtpbl0gVGhpcyAgICAgICAgICBUaGUgVkFSSUFCTEVfTE9DS19QUk9UT0NPTCBpbnN0YW5jZS4N CiAgICA+ICsgIEBwYXJhbVtpbl0gVmFyaWFibGVOYW1lICBBIHBvaW50ZXIgdG8gdGhlIHZhcmlh YmxlIG5hbWUgdGhhdCB3aWxsIGJlIG1hZGUNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICByZWFkLW9ubHkgc3Vic2VxdWVudGx5Lg0KICAgID4gKyAgQHBhcmFtW2luXSBWZW5kb3JH dWlkICAgIEEgcG9pbnRlciB0byB0aGUgdmVuZG9yIEdVSUQgdGhhdCB3aWxsIGJlIG1hZGUNCiAg ICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkLW9ubHkgc3Vic2VxdWVudGx5Lg0K ICAgID4gKw0KICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHZhcmlh YmxlIHNwZWNpZmllZCBieSB0aGUgVmFyaWFibGVOYW1lIGFuZA0KICAgID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGhlIFZlbmRvckd1aWQgd2FzIG1hcmtlZCBhcyBwZW5kaW5n IHRvIGJlDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkLW9ubHku DQogICAgPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBWYXJpYWJsZU5hbWUgb3Ig VmVuZG9yR3VpZCBpcyBOVUxMLg0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3IgVmFyaWFibGVOYW1lIGlzIGFuIGVtcHR5IHN0cmluZy4NCiAgICA+ICsgIEByZXR2YWwg RUZJX0FDQ0VTU19ERU5JRUQgICAgIEVGSV9FTkRfT0ZfRFhFX0VWRU5UX0dST1VQX0dVSUQgb3IN CiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9FVkVOVF9HUk9VUF9S RUFEWV9UT19CT09UIGhhcyBhbHJlYWR5IGJlZW4NCiAgICA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpZ25hbGVkLg0KICAgID4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09V UkNFUyAgVGhlcmUgaXMgbm90IGVub3VnaCByZXNvdXJjZSB0byBob2xkIHRoZQ0KICAgID4gbG9j aw0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC4NCiAgICA+ ICsqKi8NCiAgICA+ICtFRklfU1RBVFVTDQogICAgPiArRUZJQVBJDQogICAgPiArVmFyaWFibGVM b2NrUmVxdWVzdFRvTG9jayAoDQogICAgPiArICBJTiBDT05TVCBFREtJSV9WQVJJQUJMRV9MT0NL X1BST1RPQ09MICAqVGhpcywNCiAgICA+ICsgIElOIENIQVIxNiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICpWYXJpYWJsZU5hbWUsDQogICAgPiArICBJTiBFRklfR1VJRCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqVmVuZG9yR3VpZA0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgU3RhdHVzOw0KICAgID4gKyAgVkFSSUFCTEVfUE9M SUNZX0VOVFJZICAqTmV3UG9saWN5Ow0KICAgID4gKw0KICAgID4gKyAgREVCVUcgKChERUJVR19X QVJOLCAiISEhIERFUFJFQ0FURUQgSU5URVJGQUNFICEhISAlYSgpIHdpbGwgZ28gYXdheQ0KICAg ID4gc29vbiFcbiIsIF9fRlVOQ1RJT05fXykpOw0KICAgID4gKyAgREVCVUcgKChERUJVR19XQVJO LCAiISEhIERFUFJFQ0FURUQgSU5URVJGQUNFICEhISBQbGVhc2UgbW92ZSB0byB1c2UNCiAgICA+ IFZhcmlhYmxlIFBvbGljeSFcbiIpKTsNCiAgICA+ICsgIERFQlVHICgoREVCVUdfV0FSTiwgIiEh ISBERVBSRUNBVEVEIElOVEVSRkFDRSAhISEgVmFyaWFibGU6ICVnICVzXG4iLA0KICAgID4gVmVu ZG9yR3VpZCwgVmFyaWFibGVOYW1lKSk7DQogICAgPiArDQogICAgPiArICBOZXdQb2xpY3kgPSBO VUxMOw0KICAgID4gKyAgU3RhdHVzICAgID0gQ3JlYXRlQmFzaWNWYXJpYWJsZVBvbGljeSAoDQog ICAgPiArICAgICAgICAgICAgICAgIFZlbmRvckd1aWQsDQogICAgPiArICAgICAgICAgICAgICAg IFZhcmlhYmxlTmFtZSwNCiAgICA+ICsgICAgICAgICAgICAgICAgVkFSSUFCTEVfUE9MSUNZX05P X01JTl9TSVpFLA0KICAgID4gKyAgICAgICAgICAgICAgICBWQVJJQUJMRV9QT0xJQ1lfTk9fTUFY X1NJWkUsDQogICAgPiArICAgICAgICAgICAgICAgIFZBUklBQkxFX1BPTElDWV9OT19NVVNUX0FU VFIsDQogICAgPiArICAgICAgICAgICAgICAgIFZBUklBQkxFX1BPTElDWV9OT19DQU5UX0FUVFIs DQogICAgPiArICAgICAgICAgICAgICAgIFZBUklBQkxFX1BPTElDWV9UWVBFX0xPQ0tfTk9XLA0K ICAgID4gKyAgICAgICAgICAgICAgICAmTmV3UG9saWN5DQogICAgPiArICAgICAgICAgICAgICAg ICk7DQogICAgPiArICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgID4gKyAgICBTdGF0 dXMgPSBSZWdpc3RlclZhcmlhYmxlUG9saWN5IChOZXdQb2xpY3kpOw0KICAgID4gKw0KICAgID4g KyAgICAvLw0KICAgID4gKyAgICAvLyBJZiB0aGUgZXJyb3IgcmV0dXJuZWQgaXMgRUZJX0FMUkVB RFlfU1RBUlRFRCwgd2UgbmVlZCB0byBjaGVjayB0aGUNCiAgICA+ICsgICAgLy8gY3VycmVudCBk YXRhYmFzZSBmb3IgdGhlIHZhcmlhYmxlIGFuZCBzZWUgd2hldGhlciBpdCdzIGxvY2tlZC4gSWYg aXQncw0KICAgID4gKyAgICAvLyBsb2NrZWQsIHdlJ3JlIHN0aWxsIGZpbmUsIGJ1dCBhbHNvIGdl bmVyYXRlIGEgREVCVUdfV0FSTiBtZXNzYWdlIHNvIHRoZQ0KICAgID4gKyAgICAvLyBkdXBsaWNh dGUgbG9jayBjYW4gYmUgcmVtb3ZlZC4NCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgaWYgKFN0 YXR1cyA9PSBFRklfQUxSRUFEWV9TVEFSVEVEKSB7DQogICAgPiArICAgICAgU3RhdHVzID0gVmFs aWRhdGVTZXRWYXJpYWJsZSAoVmFyaWFibGVOYW1lLCBWZW5kb3JHdWlkLCAwLCAwLCBOVUxMKTsN CiAgICA+ICsgICAgICBpZiAoU3RhdHVzID09IEVGSV9XUklURV9QUk9URUNURUQpIHsNCiAgICA+ ICsgICAgICAgIERFQlVHICgoREVCVUdfV0FSTiwgIiAgVmFyaWFibGU6ICVnICVzIGlzIGFscmVh ZHkgbG9ja2VkIVxuIiwNCiAgICA+IFZlbmRvckd1aWQsIFZhcmlhYmxlTmFtZSkpOw0KICAgID4g KyAgICAgICAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQogICAgPiArICAgICAgfSBlbHNlIHsNCiAg ICA+ICsgICAgICAgIERFQlVHICgoREVCVUdfRVJST1IsICIgIFZhcmlhYmxlOiAlZyAlcyBjYW4g bm90IGJlIGxvY2tlZCFcbiIsDQogICAgPiBWZW5kb3JHdWlkLCBWYXJpYWJsZU5hbWUpKTsNCiAg ICA+ICsgICAgICAgIFN0YXR1cyA9IEVGSV9BQ0NFU1NfREVOSUVEOw0KICAgID4gKyAgICAgIH0N CiAgICA+ICsgICAgfQ0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KICAgID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWEgLSBGYWls ZWQgdG8gbG9jayB2YXJpYWJsZSAlcyEgJXJcbiIsDQogICAgPiBfX0ZVTkNUSU9OX18sIFZhcmlh YmxlTmFtZSwgU3RhdHVzKSk7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICBpZiAoTmV3 UG9saWN5ICE9IE5VTEwpIHsNCiAgICA+ICsgICAgRnJlZVBvb2wgKE5ld1BvbGljeSk7DQogICAg PiArICB9DQogICAgPiArDQogICAgPiArICByZXR1cm4gU3RhdHVzOw0KICAgID4gK30NCiAgICA+ IGRpZmYgLS1naXQNCiAgICA+IGEvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90 ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZU5vblZvbGF0DQogICAgPiBpbGUuYw0KICAgID4gYi9N ZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1Zhcmlh YmxlTm9uVm9sYXQNCiAgICA+IGlsZS5jDQogICAgPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAg ID4gaW5kZXggMDAwMDAwMDAwMDAwLi4zMmRkOTkwMWIyNjANCiAgICA+IC0tLSAvZGV2L251bGwN CiAgICA+ICsrKw0KICAgID4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3Rl Y3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlTm9uVm9sYXQNCiAgICA+IGlsZS5jDQogICAgPiBAQCAt MCwwICsxLDUzNyBAQA0KICAgID4gKy8qKiBAZmlsZQ0KICAgID4gKyAgQ29tbW9uIHZhcmlhYmxl IG5vbi12b2xhdGlsZSBzdG9yZSByb3V0aW5lcy4NCiAgICA+ICsNCiAgICA+ICtDb3B5cmlnaHQg KGMpIDIwMTkgLSAyMDIyLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48 QlI+DQogICAgPiArU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQN CiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICsNCiAgICA+ICsjaW5jbHVkZSAiVmFyaWFibGVO b25Wb2xhdGlsZS5oIg0KICAgID4gKyNpbmNsdWRlICJWYXJpYWJsZVBhcnNpbmcuaCINCiAgICA+ ICsNCiAgICA+ICtleHRlcm4gVkFSSUFCTEVfTU9EVUxFX0dMT0JBTCAgKm1WYXJpYWJsZU1vZHVs ZUdsb2JhbDsNCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIEdldCBub24tdm9sYXRpbGUg bWF4aW11bSB2YXJpYWJsZSBzaXplLg0KICAgID4gKw0KICAgID4gKyAgQHJldHVybiBOb24tdm9s YXRpbGUgbWF4aW11bSB2YXJpYWJsZSBzaXplLg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4g K1VJTlRODQogICAgPiArR2V0Tm9uVm9sYXRpbGVNYXhWYXJpYWJsZVNpemUgKA0KICAgID4gKyAg Vk9JRA0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIGlmIChQY2RHZXQzMiAoUGNkSHdF cnJTdG9yYWdlU2l6ZSkgIT0gMCkgew0KICAgID4gKyAgICByZXR1cm4gTUFYICgNCiAgICA+ICsg ICAgICAgICAgICAgTUFYIChQY2RHZXQzMiAoUGNkTWF4VmFyaWFibGVTaXplKSwgUGNkR2V0MzIN CiAgICA+IChQY2RNYXhBdXRoVmFyaWFibGVTaXplKSksDQogICAgPiArICAgICAgICAgICAgIFBj ZEdldDMyIChQY2RNYXhIYXJkd2FyZUVycm9yVmFyaWFibGVTaXplKQ0KICAgID4gKyAgICAgICAg ICAgICApOw0KICAgID4gKyAgfSBlbHNlIHsNCiAgICA+ICsgICAgcmV0dXJuIE1BWCAoUGNkR2V0 MzIgKFBjZE1heFZhcmlhYmxlU2l6ZSksIFBjZEdldDMyDQogICAgPiAoUGNkTWF4QXV0aFZhcmlh YmxlU2l6ZSkpOw0KICAgID4gKyAgfQ0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAg ICA+ICsgIEluaXQgZW11bGF0ZWQgbm9uLXZvbGF0aWxlIHZhcmlhYmxlIHN0b3JlLg0KICAgID4g Kw0KICAgID4gKyAgQHBhcmFtW291dF0gVmFyaWFibGVTdG9yZUJhc2UgT3V0cHV0IHBvaW50ZXIg dG8gZW11bGF0ZWQgbm9uLXZvbGF0aWxlDQogICAgPiB2YXJpYWJsZSBzdG9yZSBiYXNlLg0KICAg ID4gKw0KICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgRnVuY3Rpb24gc3Vj Y2Vzc2Z1bGx5IGV4ZWN1dGVkLg0KICAgID4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNF UyAgRmFpbCB0byBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IHJlc291cmNlLg0KICAgID4gKw0KICAg ID4gKyoqLw0KICAgID4gK0VGSV9TVEFUVVMNCiAgICA+ICtJbml0RW11Tm9uVm9sYXRpbGVWYXJp YWJsZVN0b3JlICgNCiAgICA+ICsgIE9VVCBFRklfUEhZU0lDQUxfQUREUkVTUyAgKlZhcmlhYmxl U3RvcmVCYXNlDQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgVkFSSUFCTEVfU1RPUkVf SEVBREVSICAqVmFyaWFibGVTdG9yZTsNCiAgICA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAg VmFyaWFibGVTdG9yZUxlbmd0aDsNCiAgICA+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgRnVs bHlJbml0aWFsaXplU3RvcmU7DQogICAgPiArICBVSU5UMzIgICAgICAgICAgICAgICAgIEh3RXJy U3RvcmFnZVNpemU7DQogICAgPiArDQogICAgPiArICBGdWxseUluaXRpYWxpemVTdG9yZSA9IFRS VUU7DQogICAgPiArDQogICAgPiArICBWYXJpYWJsZVN0b3JlTGVuZ3RoID0gUGNkR2V0MzIgKFBj ZFZhcmlhYmxlU3RvcmVTaXplKTsNCiAgICA+ICsgIEFTU0VSVCAoc2l6ZW9mIChWQVJJQUJMRV9T VE9SRV9IRUFERVIpIDw9IFZhcmlhYmxlU3RvcmVMZW5ndGgpOw0KICAgID4gKw0KICAgID4gKyAg Ly8NCiAgICA+ICsgIC8vIEFsbG9jYXRlIG1lbW9yeSBmb3IgdmFyaWFibGUgc3RvcmUuDQogICAg PiArICAvLw0KICAgID4gKyAgaWYgKFBjZEdldDY0IChQY2RFbXVWYXJpYWJsZU52U3RvcmVSZXNl cnZlZCkgPT0gMCkgew0KICAgID4gKyAgICBWYXJpYWJsZVN0b3JlID0gKFZBUklBQkxFX1NUT1JF X0hFQURFUiAqKUFsbG9jYXRlUnVudGltZVBvb2wNCiAgICA+IChWYXJpYWJsZVN0b3JlTGVuZ3Ro KTsNCiAgICA+ICsgICAgaWYgKFZhcmlhYmxlU3RvcmUgPT0gTlVMTCkgew0KICAgID4gKyAgICAg IHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCiAgICA+ICsgICAgfQ0KICAgID4gKyAgfSBl bHNlIHsNCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgLy8gQSBtZW1vcnkgbG9jYXRpb24gaGFz IGJlZW4gcmVzZXJ2ZWQgZm9yIHRoZSBOViB2YXJpYWJsZSBzdG9yZS4gIENlcnRhaW4NCiAgICA+ ICsgICAgLy8gcGxhdGZvcm1zIG1heSBiZSBhYmxlIHRvIHByZXNlcnZlIGEgbWVtb3J5IHJhbmdl IGFjcm9zcyBzeXN0ZW0gcmVzZXRzLA0KICAgID4gKyAgICAvLyB0aGVyZWJ5IHByb3ZpZGluZyBi ZXR0ZXIgTlYgdmFyaWFibGUgZW11bGF0aW9uLg0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICBW YXJpYWJsZVN0b3JlID0NCiAgICA+ICsgICAgICAoVkFSSUFCTEVfU1RPUkVfSEVBREVSICopKFZP SUQgKikoVUlOVE4pDQogICAgPiArICAgICAgUGNkR2V0NjQgKFBjZEVtdVZhcmlhYmxlTnZTdG9y ZVJlc2VydmVkKTsNCiAgICA+ICsgICAgaWYgKChWYXJpYWJsZVN0b3JlLT5TaXplID09IFZhcmlh YmxlU3RvcmVMZW5ndGgpICYmDQogICAgPiArICAgICAgICAoQ29tcGFyZUd1aWQgKCZWYXJpYWJs ZVN0b3JlLT5TaWduYXR1cmUsDQogICAgPiAmZ0VmaUF1dGhlbnRpY2F0ZWRWYXJpYWJsZUd1aWQp IHx8DQogICAgPiArICAgICAgICAgQ29tcGFyZUd1aWQgKCZWYXJpYWJsZVN0b3JlLT5TaWduYXR1 cmUsICZnRWZpVmFyaWFibGVHdWlkKSkgJiYNCiAgICA+ICsgICAgICAgIChWYXJpYWJsZVN0b3Jl LT5Gb3JtYXQgPT0gVkFSSUFCTEVfU1RPUkVfRk9STUFUVEVEKSAmJg0KICAgID4gKyAgICAgICAg KFZhcmlhYmxlU3RvcmUtPlN0YXRlID09IFZBUklBQkxFX1NUT1JFX0hFQUxUSFkpKQ0KICAgID4g KyAgICB7DQogICAgPiArICAgICAgREVCVUcgKCgNCiAgICA+ICsgICAgICAgIERFQlVHX0lORk8s DQogICAgPiArICAgICAgICAiVmFyaWFibGUgU3RvcmUgcmVzZXJ2ZWQgYXQgJXAgYXBwZWFycyB0 byBiZSB2YWxpZFxuIiwNCiAgICA+ICsgICAgICAgIFZhcmlhYmxlU3RvcmUNCiAgICA+ICsgICAg ICAgICkpOw0KICAgID4gKyAgICAgIEZ1bGx5SW5pdGlhbGl6ZVN0b3JlID0gRkFMU0U7DQogICAg PiArICAgIH0NCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIGlmIChGdWxseUluaXRpYWxp emVTdG9yZSkgew0KICAgID4gKyAgICBTZXRNZW0gKFZhcmlhYmxlU3RvcmUsIFZhcmlhYmxlU3Rv cmVMZW5ndGgsIDB4ZmYpOw0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICAvLyBVc2UgZ0VmaUF1 dGhlbnRpY2F0ZWRWYXJpYWJsZUd1aWQgZm9yIHBvdGVudGlhbCBhdXRoIHZhcmlhYmxlIHN1cHBv cnQuDQogICAgPiArICAgIC8vDQogICAgPiArICAgIENvcHlHdWlkICgmVmFyaWFibGVTdG9yZS0+ U2lnbmF0dXJlLCAmZ0VmaUF1dGhlbnRpY2F0ZWRWYXJpYWJsZUd1aWQpOw0KICAgID4gKyAgICBW YXJpYWJsZVN0b3JlLT5TaXplICAgICAgPSBWYXJpYWJsZVN0b3JlTGVuZ3RoOw0KICAgID4gKyAg ICBWYXJpYWJsZVN0b3JlLT5Gb3JtYXQgICAgPSBWQVJJQUJMRV9TVE9SRV9GT1JNQVRURUQ7DQog ICAgPiArICAgIFZhcmlhYmxlU3RvcmUtPlN0YXRlICAgICA9IFZBUklBQkxFX1NUT1JFX0hFQUxU SFk7DQogICAgPiArICAgIFZhcmlhYmxlU3RvcmUtPlJlc2VydmVkICA9IDA7DQogICAgPiArICAg IFZhcmlhYmxlU3RvcmUtPlJlc2VydmVkMSA9IDA7DQogICAgPiArICB9DQogICAgPiArDQogICAg PiArICAqVmFyaWFibGVTdG9yZUJhc2UgPSAoRUZJX1BIWVNJQ0FMX0FERFJFU1MpKFVJTlROKVZh cmlhYmxlU3RvcmU7DQogICAgPiArDQogICAgPiArICBId0VyclN0b3JhZ2VTaXplID0gUGNkR2V0 MzIgKFBjZEh3RXJyU3RvcmFnZVNpemUpOw0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsg IC8vIE5vdGUgdGhhdCBpbiBFZGtJSSB2YXJpYWJsZSBkcml2ZXIgaW1wbGVtZW50YXRpb24sIEhh cmR3YXJlIEVycm9yIFJlY29yZA0KICAgID4gdHlwZSB2YXJpYWJsZQ0KICAgID4gKyAgLy8gaXMg c3RvcmVkIHdpdGggY29tbW9uIHZhcmlhYmxlIGluIHRoZSBzYW1lIE5WIHJlZ2lvbi4gU28gdGhl IHBsYXRmb3JtDQogICAgPiBpbnRlZ3JhdG9yIHNob3VsZA0KICAgID4gKyAgLy8gZW5zdXJlIHRo YXQgdGhlIHZhbHVlIG9mIFBjZEh3RXJyU3RvcmFnZVNpemUgaXMgbGVzcyB0aGFuIHRoZSB2YWx1 ZSBvZg0KICAgID4gKyAgLy8gKFZhcmlhYmxlU3RvcmVMZW5ndGggLSBzaXplb2YgKFZBUklBQkxF X1NUT1JFX0hFQURFUikpLg0KICAgID4gKyAgLy8NCiAgICA+ICsgIEFTU0VSVCAoSHdFcnJTdG9y YWdlU2l6ZSA8IChWYXJpYWJsZVN0b3JlTGVuZ3RoIC0gc2l6ZW9mDQogICAgPiAoVkFSSUFCTEVf U1RPUkVfSEVBREVSKSkpOw0KICAgID4gKw0KICAgID4gKyAgbVZhcmlhYmxlTW9kdWxlR2xvYmFs LT5Db21tb25WYXJpYWJsZVNwYWNlICAgICAgICA9DQogICAgPiAoKFVJTlROKVZhcmlhYmxlU3Rv cmVMZW5ndGggLSBzaXplb2YgKFZBUklBQkxFX1NUT1JFX0hFQURFUikgLQ0KICAgID4gSHdFcnJT dG9yYWdlU2l6ZSk7DQogICAgPiArICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPkNvbW1vbk1heFVz ZXJWYXJpYWJsZVNwYWNlID0NCiAgICA+IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+Q29tbW9uVmFy aWFibGVTcGFjZTsNCiAgICA+ICsgIG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+Q29tbW9uUnVudGlt ZVZhcmlhYmxlU3BhY2UgPQ0KICAgID4gbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5Db21tb25WYXJp YWJsZVNwYWNlOw0KICAgID4gKw0KICAgID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KICAgID4g K30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsNCiAgICA+ICsgIENyZWF0ZSBhIGR1bW15 IHZhcmlhYmxlIHVzZWQgdG8gZmlsbCB0aGUgZ2FwIGluIE5WIHZhcmlhYmxlIHN0b3JhZ2UgY2F1 c2VkIGJ5DQogICAgPiArICB0aGUgaW52YWxpZCB2YXJpYWJsZXMgZm91bmQgaW4gSE1BQyB2ZXJp ZmljYXRpb24gcGhhc2UuDQogICAgPiArDQogICAgPiArICBAcGFyYW1bb3V0XSBWYXJpYWJsZSAg ICBWYXJpYWJsZSBidWZmZXIuDQogICAgPiArICBAcGFyYW1baW5dICBOYW1lICAgICAgICBWYXJp YWJsZSBOYW1lLg0KICAgID4gKyAgQHBhcmFtW2luXSAgR3VpZCAgICAgICAgVmVuZG9yIEdVSUQg b2YgdGhlIHZhcmlhYmxlLg0KICAgID4gKyAgQHBhcmFtW2luXSAgU2l6ZSAgICAgICAgV2hvbGUg c2l6ZSBvZiB0aGUgdmFyaWFibGUgcmVxdWVzdGVkLg0KICAgID4gKyAgQHBhcmFtW2luXSAgQXV0 aEZsYWcgICAgVmFyaWFibGUgZm9ybWF0IGZsYWcuDQogICAgPiArDQogICAgPiArKiovDQogICAg PiArU1RBVElDDQogICAgPiArVk9JRA0KICAgID4gK0NyZWF0ZUR1bW15VmFyaWFibGUgKA0KICAg ID4gKyAgT1VUIFZBUklBQkxFX0hFQURFUiAgKlZhcmlhYmxlLA0KICAgID4gKyAgSU4gIENIQVIx NiAgICAgICAgICAgKk5hbWUsDQogICAgPiArICBJTiAgRUZJX0dVSUQgICAgICAgICAqR3VpZCwN CiAgICA+ICsgIElOICBVSU5UMzIgICAgICAgICAgIFNpemUsDQogICAgPiArICBJTiAgQk9PTEVB TiAgICAgICAgICBBdXRoRmxhZw0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIEFVVEhF TlRJQ0FURURfVkFSSUFCTEVfSEVBREVSICAqQXV0aFZhcmlhYmxlOw0KICAgID4gKw0KICAgID4g KyAgQVNTRVJUIChWYXJpYWJsZSAhPSBOVUxMKTsNCiAgICA+ICsNCiAgICA+ICsgIGlmIChOYW1l ID09IE5VTEwpIHsNCiAgICA+ICsgICAgTmFtZSA9IEwiRHVtbXkiOw0KICAgID4gKyAgfQ0KICAg ID4gKw0KICAgID4gKyAgaWYgKEF1dGhGbGFnKSB7DQogICAgPiArICAgIEF1dGhWYXJpYWJsZSA9 IChBVVRIRU5USUNBVEVEX1ZBUklBQkxFX0hFQURFUiAqKVZhcmlhYmxlOw0KICAgID4gKw0KICAg ID4gKyAgICBBdXRoVmFyaWFibGUtPlN0YXJ0SWQgICAgPSBWQVJJQUJMRV9EQVRBOw0KICAgID4g KyAgICBBdXRoVmFyaWFibGUtPlN0YXRlICAgICAgPSBWQVJfQURERUQgJiBWQVJfREVMRVRFRDsN CiAgICA+ICsgICAgQXV0aFZhcmlhYmxlLT5BdHRyaWJ1dGVzID0gRUZJX1ZBUklBQkxFX05PTl9W T0xBVElMRTsNCiAgICA+ICsgICAgQXV0aFZhcmlhYmxlLT5OYW1lU2l6ZSAgID0gKFVJTlQzMilT dHJTaXplIChOYW1lKTsNCiAgICA+ICsgICAgQXV0aFZhcmlhYmxlLT5EYXRhU2l6ZSAgID0gU2l6 ZSAtIHNpemVvZg0KICAgID4gKEFVVEhFTlRJQ0FURURfVkFSSUFCTEVfSEVBREVSKQ0KICAgID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEF1dGhWYXJpYWJsZS0+TmFtZVNpemU7 DQogICAgPiArICAgIGlmIChHdWlkICE9IE5VTEwpIHsNCiAgICA+ICsgICAgICBDb3B5TWVtICgo Vk9JRCAqKSZBdXRoVmFyaWFibGUtPlZlbmRvckd1aWQsIChWT0lEICopR3VpZCwgc2l6ZW9mDQog ICAgPiAoRUZJX0dVSUQpKTsNCiAgICA+ICsgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICBDb3B5 TWVtIChHZXRWYXJpYWJsZU5hbWVQdHIgKFZhcmlhYmxlLCBBdXRoRmxhZyksIChWT0lEICopTmFt ZSwNCiAgICA+IEF1dGhWYXJpYWJsZS0+TmFtZVNpemUpOw0KICAgID4gKyAgfSBlbHNlIHsNCiAg ICA+ICsgICAgVmFyaWFibGUtPlN0YXJ0SWQgICAgPSBWQVJJQUJMRV9EQVRBOw0KICAgID4gKyAg ICBWYXJpYWJsZS0+U3RhdGUgICAgICA9IFZBUl9BRERFRCAmIFZBUl9ERUxFVEVEOw0KICAgID4g KyAgICBWYXJpYWJsZS0+QXR0cmlidXRlcyA9IEVGSV9WQVJJQUJMRV9OT05fVk9MQVRJTEU7DQog ICAgPiArICAgIFZhcmlhYmxlLT5OYW1lU2l6ZSAgID0gKFVJTlQzMilTdHJTaXplIChOYW1lKTsN CiAgICA+ICsgICAgVmFyaWFibGUtPkRhdGFTaXplICAgPSBTaXplIC0gc2l6ZW9mIChWQVJJQUJM RV9IRUFERVIpIC0gVmFyaWFibGUtDQogICAgPiA+TmFtZVNpemU7DQogICAgPiArICAgIGlmIChH dWlkICE9IE5VTEwpIHsNCiAgICA+ICsgICAgICBDb3B5TWVtICgoVk9JRCAqKSZWYXJpYWJsZS0+ VmVuZG9yR3VpZCwgKFZPSUQgKilHdWlkLCBzaXplb2YNCiAgICA+IChFRklfR1VJRCkpOw0KICAg ID4gKyAgICB9DQogICAgPiArDQogICAgPiArICAgIENvcHlNZW0gKEdldFZhcmlhYmxlTmFtZVB0 ciAoVmFyaWFibGUsIEF1dGhGbGFnKSwgKFZPSUQgKilOYW1lLA0KICAgID4gVmFyaWFibGUtPk5h bWVTaXplKTsNCiAgICA+ICsgIH0NCiAgICA+ICt9DQogICAgPiArDQogICAgPiArLyoqDQogICAg PiArDQogICAgPiArICBJbml0IHByb3RlY3RlZCB2YXJpYWJsZSBzdG9yZS4NCiAgICA+ICsNCiAg ICA+ICsgIEBwYXJhbVtpbiwgb3V0XSAgVmFyaWFibGVTdG9yZSAgUG9pbnRlciB0byByZWFsIHBy b3RlY3RlZCB2YXJpYWJsZSBzdG9yZSBiYXNlLg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4g K0VGSV9TVEFUVVMNCiAgICA+ICtJbml0UHJvdGVjdGVkVmFyaWFibGVTdG9yZSAoDQogICAgPiAr ICBJTiAgT1VUIFZBUklBQkxFX1NUT1JFX0hFQURFUiAgKlZhcmlhYmxlU3RvcmUNCiAgICA+ICsg ICkNCiAgICA+ICt7DQogICAgPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgU3RhdHVzOw0K ICAgID4gKyAgUFJPVEVDVEVEX1ZBUklBQkxFX0lORk8gIFZhckluZm87DQogICAgPiArICBVSU5U TiAgICAgICAgICAgICAgICAgICAgU2l6ZTsNCiAgICA+ICsgIFVJTlROICAgICAgICAgICAgICAg ICAgICBJbmRleDsNCiAgICA+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgICBBdXRoRmxhZzsN CiAgICA+ICsgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICBOZXh0VmFyaWFibGVTdG9yZTsNCiAg ICA+ICsgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAqVmFyTGlzdDsNCiAgICA+ICsgIFVJTlRO ICAgICAgICAgICAgICAgICAgICBOdW1WYXJzOw0KICAgID4gKyAgVUlOVE4gICAgICAgICAgICAg ICAgICAgIEN1cnJWYXI7DQogICAgPiArDQogICAgPiArICBTZXRNZW0gKA0KICAgID4gKyAgICAo VUlOVDggKilWYXJpYWJsZVN0b3JlICsgc2l6ZW9mIChWQVJJQUJMRV9TVE9SRV9IRUFERVIpLA0K ICAgID4gKyAgICBWYXJpYWJsZVN0b3JlLT5TaXplIC0gc2l6ZW9mIChWQVJJQUJMRV9TVE9SRV9I RUFERVIpLA0KICAgID4gKyAgICAweEZGDQogICAgPiArICAgICk7DQogICAgPiArICBJbmRleCA9 IHNpemVvZiAoVkFSSUFCTEVfU1RPUkVfSEVBREVSKTsNCiAgICA+ICsNCiAgICA+ICsgIFZhckxp c3QgPSBOVUxMOw0KICAgID4gKyAgTnVtVmFycyA9IDA7DQogICAgPiArICBQcm90ZWN0ZWRWYXJp YWJsZUxpYkdldFNvcnRlZExpc3QgKCZWYXJMaXN0LCAmTnVtVmFycyk7DQogICAgPiArDQogICAg PiArICAvLw0KICAgID4gKyAgLy8gU2VhcmNoIHZhcmlhYmxlIGluIHRoZSBvcmRlciBvZiBTdG9y ZUluZGV4DQogICAgPiArICAvLw0KICAgID4gKyAgWmVyb01lbSAoJlZhckluZm8sIHNpemVvZiAo VmFySW5mbykpOw0KICAgID4gKw0KICAgID4gKyAgZm9yIChDdXJyVmFyID0gMDsgQ3VyclZhciA8 IE51bVZhcnM7IEN1cnJWYXIrKykgew0KICAgID4gKyAgICBWYXJJbmZvLkJ1ZmZlciAgICAgPSBO VUxMOw0KICAgID4gKyAgICBWYXJJbmZvLlN0b3JlSW5kZXggPSBWYXJMaXN0W0N1cnJWYXJdOw0K ICAgID4gKyAgICBpZiAoVmFySW5mby5TdG9yZUluZGV4ID09IFZBUl9JTkRFWF9JTlZBTElEKSB7 DQogICAgPiArICAgICAgYnJlYWs7DQogICAgPiArICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAg U3RhdHVzID0gUHJvdGVjdGVkVmFyaWFibGVMaWJGaW5kICgmVmFySW5mbyk7DQogICAgPiArICAg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCiAgICA+ICsgICAgICBicmVhazsNCiAgICA+ICsg ICAgfQ0KICAgID4gKw0KICAgID4gKyAgICBBU1NFUlQgKFZhckluZm8uQnVmZmVyICE9IE5VTEwp Ow0KICAgID4gKw0KICAgID4gKyAgICBBdXRoRmxhZyA9IFZhckluZm8uRmxhZ3MuQXV0aDsNCiAg ICA+ICsgICAgaWYgKFZhckluZm8uU3RvcmVJbmRleCA9PSBWQVJfSU5ERVhfSU5WQUxJRCkgew0K ICAgID4gKyAgICAgIGNvbnRpbnVlOw0KICAgID4gKyAgICB9IGVsc2Ugew0KICAgID4gKyAgICAg IEFTU0VSVCAoVmFySW5mby5TdG9yZUluZGV4ID09IEhFQURFUl9BTElHTiAoVmFySW5mby5TdG9y ZUluZGV4KSk7DQogICAgPiArICAgICAgQVNTRVJUIChWYXJJbmZvLlN0b3JlSW5kZXggPCAoVmFy aWFibGVTdG9yZS0+U2l6ZSAtIHNpemVvZg0KICAgID4gKFZBUklBQkxFX1NUT1JFX0hFQURFUikp KTsNCiAgICA+ICsgICAgICBBU1NFUlQgKChWYXJpYWJsZVN0b3JlLT5TaXplIC0gVmFySW5mby5T dG9yZUluZGV4KSA+IEdldFZhcmlhYmxlSGVhZGVyU2l6ZQ0KICAgID4gKEF1dGhGbGFnKSk7DQog ICAgPiArICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgLy8gRmlsbCBn YXAgY2F1c2VkIGJ5IGludmFsaWQgdmFyaWFibGUuDQogICAgPiArICAgIC8vDQogICAgPiArICAg IGlmIChWYXJJbmZvLlN0b3JlSW5kZXggPiBJbmRleCkgew0KICAgID4gKyAgICAgIFNpemUgPSAo VUlOVE4pVmFySW5mby5TdG9yZUluZGV4IC0gSW5kZXg7DQogICAgPiArICAgICAgQ3JlYXRlRHVt bXlWYXJpYWJsZSAoDQogICAgPiArICAgICAgICAoVkFSSUFCTEVfSEVBREVSICopKChVSU5UOCAq KVZhcmlhYmxlU3RvcmUgKyBJbmRleCksDQogICAgPiArICAgICAgICBOVUxMLA0KICAgID4gKyAg ICAgICAgTlVMTCwNCiAgICA+ICsgICAgICAgIChVSU5UMzIpU2l6ZSwNCiAgICA+ICsgICAgICAg IEF1dGhGbGFnDQogICAgPiArICAgICAgICApOw0KICAgID4gKyAgICAgIEluZGV4ICs9IFNpemU7 DQogICAgPiArICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgU2l6ZSA9IChVSU5UTilHZXROZXh0 VmFyaWFibGVQdHIgKFZhckluZm8uQnVmZmVyLCBBdXRoRmxhZykNCiAgICA+ICsgICAgICAgICAg IC0gKFVJTlROKVZhckluZm8uQnVmZmVyOw0KICAgID4gKyAgICBDb3B5TWVtICgoVUlOVDggKilW YXJpYWJsZVN0b3JlICsgVmFySW5mby5TdG9yZUluZGV4LCBWYXJJbmZvLkJ1ZmZlciwNCiAgICA+ IFNpemUpOw0KICAgID4gKw0KICAgID4gKyAgICBJbmRleCArPSBTaXplOw0KICAgID4gKyAgICBJ bmRleCAgPSBIRUFERVJfQUxJR04gKEluZGV4KTsNCiAgICA+ICsNCiAgICA+ICsgICAgTmV4dFZh cmlhYmxlU3RvcmUgPSAoRUZJX1BIWVNJQ0FMX0FERFJFU1MpKChVSU5UTilWYXJpYWJsZVN0b3Jl ICsNCiAgICA+IFZhckluZm8uU3RvcmVJbmRleCArIFNpemUpOw0KICAgID4gKyAgfQ0KICAgID4g Kw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIFNlYXJjaCB2YXJpYWJsZSBpbiB0aGUgb3JkZXIg b2YgU3RvcmVJbmRleA0KICAgID4gKyAgLy8NCiAgICA+ICsgIFplcm9NZW0gKCZWYXJJbmZvLCBz aXplb2YgKFZhckluZm8pKTsNCiAgICA+ICsgIGZvciAoIDsgQ3VyclZhciA8IE51bVZhcnM7IEN1 cnJWYXIrKykgew0KICAgID4gKyAgICBWYXJJbmZvLkJ1ZmZlciAgICAgPSBOVUxMOw0KICAgID4g KyAgICBWYXJJbmZvLlN0b3JlSW5kZXggPSBWYXJMaXN0W0N1cnJWYXJdOw0KICAgID4gKyAgICBT dGF0dXMgICAgICAgICAgICAgPSBQcm90ZWN0ZWRWYXJpYWJsZUxpYkZpbmQgKCZWYXJJbmZvKTsN CiAgICA+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgID4gKyAgICAgIGJyZWFr Ow0KICAgID4gKyAgICB9DQogICAgPiArDQogICAgPiArICAgIEFTU0VSVCAoVmFySW5mby5CdWZm ZXIgIT0gTlVMTCk7DQogICAgPiArDQogICAgPiArICAgIEF1dGhGbGFnID0gVmFySW5mby5GbGFn cy5BdXRoOw0KICAgID4gKyAgICBpZiAoVmFySW5mby5TdG9yZUluZGV4ID09IFZBUl9JTkRFWF9J TlZBTElEKSB7DQogICAgPiArICAgICAgU2l6ZSA9IChVSU5UTilHZXROZXh0VmFyaWFibGVQdHIg KFZhckluZm8uQnVmZmVyLCBBdXRoRmxhZykNCiAgICA+ICsgICAgICAgICAgICAgLSAoVUlOVE4p VmFySW5mby5CdWZmZXI7DQogICAgPiArICAgICAgQ29weU1lbSAoKFZPSUQgKikoVUlOVE4pTmV4 dFZhcmlhYmxlU3RvcmUsIFZhckluZm8uQnVmZmVyLCBTaXplKTsNCiAgICA+ICsgICAgICBTdGF0 dXMgICAgICAgICAgICA9IFByb3RlY3RlZFZhcmlhYmxlTGliUmVmcmVzaCAoVmFySW5mby5CdWZm ZXIsIDAsDQogICAgPiBOZXh0VmFyaWFibGVTdG9yZSAtIChVSU5UTilWYXJpYWJsZVN0b3JlLCBG QUxTRSk7DQogICAgPiArICAgICAgTmV4dFZhcmlhYmxlU3RvcmUgPSBOZXh0VmFyaWFibGVTdG9y ZSArIFNpemU7DQogICAgPiArICAgIH0NCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIGlm IChTdGF0dXMgPT0gRUZJX1VOU1VQUE9SVEVEKSB7DQogICAgPiArICAgIHJldHVybiBTdGF0dXM7 DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQogICAg PiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgSW5pdCByZWFsIG5vbi12b2xhdGls ZSB2YXJpYWJsZSBzdG9yZS4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbVtvdXRdIFZhcmlhYmxl U3RvcmVCYXNlIE91dHB1dCBwb2ludGVyIHRvIHJlYWwgbm9uLXZvbGF0aWxlIHZhcmlhYmxlDQog ICAgPiBzdG9yZSBiYXNlLg0KICAgID4gKw0KICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgRnVuY3Rpb24gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLg0KICAgID4gKyAgQHJldHZh bCBFRklfT1VUX09GX1JFU09VUkNFUyAgRmFpbCB0byBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IHJl c291cmNlLg0KICAgID4gKyAgQHJldHZhbCBFRklfVk9MVU1FX0NPUlJVUFRFRCAgVmFyaWFibGUg U3RvcmUgb3IgRmlybXdhcmUgVm9sdW1lIGZvcg0KICAgID4gVmFyaWFibGUgU3RvcmUgaXMgY29y cnVwdGVkLg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK0VGSV9TVEFUVVMNCiAgICA+ICtJ bml0UmVhbE5vblZvbGF0aWxlVmFyaWFibGVTdG9yZSAoDQogICAgPiArICBPVVQgRUZJX1BIWVNJ Q0FMX0FERFJFU1MgICpWYXJpYWJsZVN0b3JlQmFzZQ0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAg ICA+ICsgIEVGSV9GSVJNV0FSRV9WT0xVTUVfSEVBREVSICAgICAgICAgICAgKkZ2SGVhZGVyOw0K ICAgID4gKyAgVkFSSUFCTEVfU1RPUkVfSEVBREVSICAgICAgICAgICAgICAgICAqVmFyaWFibGVT dG9yZTsNCiAgICA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFy aWFibGVTdG9yZUxlbmd0aDsNCiAgICA+ICsgIEVGSV9IT0JfR1VJRF9UWVBFICAgICAgICAgICAg ICAgICAgICAgKkd1aWRIb2I7DQogICAgPiArICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgICAg ICAgICAgICAgIE52U3RvcmFnZUJhc2U7DQogICAgPiArICBVSU5UOCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICpOdlN0b3JhZ2VEYXRhOw0KICAgID4gKyAgVUlOVDMyICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBOdlN0b3JhZ2VTaXplOw0KICAgID4gKyAgVUlOVDY0ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdlN0b3JhZ2VTaXplNjQ7DQogICAgPiArICBG QVVMVF9UT0xFUkFOVF9XUklURV9MQVNUX1dSSVRFX0RBVEEgICpGdHdMYXN0V3JpdGVEYXRhOw0K ICAgID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWNrVXBPZmZz ZXQ7DQogICAgPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhY2tV cFNpemU7DQogICAgPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEh3 RXJyU3RvcmFnZVNpemU7DQogICAgPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE1heFVzZXJOdlZhcmlhYmxlU3BhY2VTaXplOw0KICAgID4gKyAgVUlOVDMyICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBCb290dGltZVJlc2VydmVkTnZWYXJpYWJsZVNwYWNl U2l6ZTsNCiAgICA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3Rh dHVzOw0KICAgID4gKyAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqRnR3 UHJvdG9jb2w7DQogICAgPiArDQogICAgPiArICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPkZ2Yklu c3RhbmNlID0gTlVMTDsNCiAgICA+ICsNCiAgICA+ICsgIFN0YXR1cyA9IEdldFZhcmlhYmxlRmxh c2hOdlN0b3JhZ2VJbmZvICgmTnZTdG9yYWdlQmFzZSwNCiAgICA+ICZOdlN0b3JhZ2VTaXplNjQp Ow0KICAgID4gKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCiAgICA+ICsNCiAgICA+ICsg IFN0YXR1cyA9IFNhZmVVaW50NjRUb1VpbnQzMiAoTnZTdG9yYWdlU2l6ZTY0LCAmTnZTdG9yYWdl U2l6ZSk7DQogICAgPiArICAvLyBUaGlzIGRyaXZlciBjdXJyZW50bHkgYXNzdW1lcyB0aGUgc2l6 ZSB3aWxsIGJlIFVJTlQzMiBzbyBhc3NlcnQgdGhlIHZhbHVlIGlzDQogICAgPiBzYWZlIGZvciBu b3cuDQogICAgPiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KICAgID4gKw0KICAgID4g KyAgQVNTRVJUIChOdlN0b3JhZ2VCYXNlICE9IDApOw0KICAgID4gKw0KICAgID4gKyAgLy8NCiAg ICA+ICsgIC8vIEFsbG9jYXRlIHJ1bnRpbWUgbWVtb3J5IHVzZWQgZm9yIGEgbWVtb3J5IGNvcHkg b2YgdGhlIEZMQVNIIHJlZ2lvbi4NCiAgICA+ICsgIC8vIEtlZXAgdGhlIG1lbW9yeSBhbmQgdGhl IEZMQVNIIGluIHN5bmMgYXMgdXBkYXRlcyBvY2N1ci4NCiAgICA+ICsgIC8vDQogICAgPiArICBO dlN0b3JhZ2VEYXRhID0gQWxsb2NhdGVSdW50aW1lWmVyb1Bvb2wgKE52U3RvcmFnZVNpemUpOw0K ICAgID4gKyAgaWYgKE52U3RvcmFnZURhdGEgPT0gTlVMTCkgew0KICAgID4gKyAgICByZXR1cm4g RUZJX09VVF9PRl9SRVNPVVJDRVM7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICAvLw0K ICAgID4gKyAgLy8gQ29weSBOViBzdG9yYWdlIGRhdGEgdG8gdGhlIG1lbW9yeSBidWZmZXIuDQog ICAgPiArICAvLw0KICAgID4gKyAgQ29weU1lbSAoTnZTdG9yYWdlRGF0YSwgKFVJTlQ4ICopKFVJ TlROKU52U3RvcmFnZUJhc2UsIE52U3RvcmFnZVNpemUpOw0KICAgID4gKw0KICAgID4gKyAgU3Rh dHVzID0gR2V0RnR3UHJvdG9jb2wgKChWT0lEICoqKSZGdHdQcm90b2NvbCk7DQogICAgPiArICAv Lw0KICAgID4gKyAgLy8gSWYgRlRXIHByb3RvY29sIGhhcyBiZWVuIGluc3RhbGxlZCwgbm8gbmVl ZCB0byBjaGVjayBGVFcgbGFzdCB3cml0ZSBkYXRhDQogICAgPiBob2IuDQogICAgPiArICAvLw0K ICAgID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgID4gKyAgICAvLw0KICAgID4g KyAgICAvLyBDaGVjayB0aGUgRlRXIGxhc3Qgd3JpdGUgZGF0YSBob2IuDQogICAgPiArICAgIC8v DQogICAgPiArICAgIEd1aWRIb2IgPSBHZXRGaXJzdEd1aWRIb2IgKCZnRWRraWlGYXVsdFRvbGVy YW50V3JpdGVHdWlkKTsNCiAgICA+ICsgICAgaWYgKEd1aWRIb2IgIT0gTlVMTCkgew0KICAgID4g KyAgICAgIEZ0d0xhc3RXcml0ZURhdGEgPSAoRkFVTFRfVE9MRVJBTlRfV1JJVEVfTEFTVF9XUklU RV9EQVRBDQogICAgPiAqKUdFVF9HVUlEX0hPQl9EQVRBIChHdWlkSG9iKTsNCiAgICA+ICsgICAg ICBpZiAoRnR3TGFzdFdyaXRlRGF0YS0+VGFyZ2V0QWRkcmVzcyA9PSBOdlN0b3JhZ2VCYXNlKSB7 DQogICAgPiArICAgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJWYXJpYWJsZTogTlYgc3RvcmFn ZSBpcyBiYWNrZWQgdXAgaW4gc3BhcmUgYmxvY2s6DQogICAgPiAweCV4XG4iLCAoVUlOVE4pRnR3 TGFzdFdyaXRlRGF0YS0+U3BhcmVBZGRyZXNzKSk7DQogICAgPiArICAgICAgICAvLw0KICAgID4g KyAgICAgICAgLy8gQ29weSB0aGUgYmFja2VkIHVwIE5WIHN0b3JhZ2UgZGF0YSB0byB0aGUgbWVt b3J5IGJ1ZmZlciBmcm9tIHNwYXJlDQogICAgPiBibG9jay4NCiAgICA+ICsgICAgICAgIC8vDQog ICAgPiArICAgICAgICBDb3B5TWVtIChOdlN0b3JhZ2VEYXRhLCAoVUlOVDggKikoVUlOVE4pKEZ0 d0xhc3RXcml0ZURhdGEtDQogICAgPiA+U3BhcmVBZGRyZXNzKSwgTnZTdG9yYWdlU2l6ZSk7DQog ICAgPiArICAgICAgfSBlbHNlIGlmICgoRnR3TGFzdFdyaXRlRGF0YS0+VGFyZ2V0QWRkcmVzcyA+ IE52U3RvcmFnZUJhc2UpICYmDQogICAgPiArICAgICAgICAgICAgICAgICAoRnR3TGFzdFdyaXRl RGF0YS0+VGFyZ2V0QWRkcmVzcyA8IChOdlN0b3JhZ2VCYXNlICsNCiAgICA+IE52U3RvcmFnZVNp emUpKSkNCiAgICA+ICsgICAgICB7DQogICAgPiArICAgICAgICAvLw0KICAgID4gKyAgICAgICAg Ly8gRmxhc2ggTlYgc3RvcmFnZSBmcm9tIHRoZSBPZmZzZXQgaXMgYmFja2VkIHVwIGluIHNwYXJl IGJsb2NrLg0KICAgID4gKyAgICAgICAgLy8NCiAgICA+ICsgICAgICAgIEJhY2tVcE9mZnNldCA9 IChVSU5UMzIpKEZ0d0xhc3RXcml0ZURhdGEtPlRhcmdldEFkZHJlc3MgLQ0KICAgID4gTnZTdG9y YWdlQmFzZSk7DQogICAgPiArICAgICAgICBCYWNrVXBTaXplICAgPSBOdlN0b3JhZ2VTaXplIC0g QmFja1VwT2Zmc2V0Ow0KICAgID4gKyAgICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiVmFyaWFi bGU6IEhpZ2ggcGFydGlhbCBOViBzdG9yYWdlIGZyb20gb2Zmc2V0OiAleA0KICAgID4gaXMgYmFj a2VkIHVwIGluIHNwYXJlIGJsb2NrOiAweCV4XG4iLCBCYWNrVXBPZmZzZXQsIChVSU5UTilGdHdM YXN0V3JpdGVEYXRhLQ0KICAgID4gPlNwYXJlQWRkcmVzcykpOw0KICAgID4gKyAgICAgICAgLy8N CiAgICA+ICsgICAgICAgIC8vIENvcHkgdGhlIHBhcnRpYWwgYmFja2VkIHVwIE5WIHN0b3JhZ2Ug ZGF0YSB0byB0aGUgbWVtb3J5IGJ1ZmZlciBmcm9tDQogICAgPiBzcGFyZSBibG9jay4NCiAgICA+ ICsgICAgICAgIC8vDQogICAgPiArICAgICAgICBDb3B5TWVtIChOdlN0b3JhZ2VEYXRhICsgQmFj a1VwT2Zmc2V0LCAoVUlOVDgNCiAgICA+ICopKFVJTlROKUZ0d0xhc3RXcml0ZURhdGEtPlNwYXJl QWRkcmVzcywgQmFja1VwU2l6ZSk7DQogICAgPiArICAgICAgfQ0KICAgID4gKyAgICB9DQogICAg PiArICB9DQogICAgPiArDQogICAgPiArICBGdkhlYWRlciA9IChFRklfRklSTVdBUkVfVk9MVU1F X0hFQURFUiAqKU52U3RvcmFnZURhdGE7DQogICAgPiArDQogICAgPiArICAvLw0KICAgID4gKyAg Ly8gQ2hlY2sgaWYgdGhlIEZpcm13YXJlIFZvbHVtZSBpcyBub3QgY29ycnVwdGVkDQogICAgPiAr ICAvLw0KICAgID4gKyAgaWYgKChGdkhlYWRlci0+U2lnbmF0dXJlICE9IEVGSV9GVkhfU0lHTkFU VVJFKSB8fCAoIUNvbXBhcmVHdWlkDQogICAgPiAoJmdFZmlTeXN0ZW1OdkRhdGFGdkd1aWQsICZG dkhlYWRlci0+RmlsZVN5c3RlbUd1aWQpKSkgew0KICAgID4gKyAgICBGcmVlUG9vbCAoTnZTdG9y YWdlRGF0YSk7DQogICAgPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICJGaXJtd2FyZSBWb2x1 bWUgZm9yIFZhcmlhYmxlIFN0b3JlIGlzDQogICAgPiBjb3JydXB0ZWRcbiIpKTsNCiAgICA+ICsg ICAgcmV0dXJuIEVGSV9WT0xVTUVfQ09SUlVQVEVEOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAg ID4gKyAgVmFyaWFibGVTdG9yZSAgICAgICA9IChWQVJJQUJMRV9TVE9SRV9IRUFERVIgKikoKFVJ TlROKUZ2SGVhZGVyICsNCiAgICA+IEZ2SGVhZGVyLT5IZWFkZXJMZW5ndGgpOw0KICAgID4gKyAg VmFyaWFibGVTdG9yZUxlbmd0aCA9IE52U3RvcmFnZVNpemUgLSBGdkhlYWRlci0+SGVhZGVyTGVu Z3RoOw0KICAgID4gKyAgQVNTRVJUIChzaXplb2YgKFZBUklBQkxFX1NUT1JFX0hFQURFUikgPD0g VmFyaWFibGVTdG9yZUxlbmd0aCk7DQogICAgPiArICBBU1NFUlQgKFZhcmlhYmxlU3RvcmUtPlNp emUgPT0gVmFyaWFibGVTdG9yZUxlbmd0aCk7DQogICAgPiArDQogICAgPiArICAvLw0KICAgID4g KyAgLy8gQ2hlY2sgaWYgdGhlIFZhcmlhYmxlIFN0b3JlIGhlYWRlciBpcyBub3QgY29ycnVwdGVk DQogICAgPiArICAvLw0KICAgID4gKyAgaWYgKEdldFZhcmlhYmxlU3RvcmVTdGF0dXMgKFZhcmlh YmxlU3RvcmUpICE9IEVmaVZhbGlkKSB7DQogICAgPiArICAgIEZyZWVQb29sIChOdlN0b3JhZ2VE YXRhKTsNCiAgICA+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIlZhcmlhYmxlIFN0b3JlIGhl YWRlciBpcyBjb3JydXB0ZWRcbiIpKTsNCiAgICA+ICsgICAgcmV0dXJuIEVGSV9WT0xVTUVfQ09S UlVQVEVEOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIE92 ZXJ3cml0ZSB0aGUgc3RvcmUgd2l0aCB2ZXJpZmllZCBjb3B5IG9mIHByb3RlY3RlZCB2YXJpYWJs ZXMsIGlmIGVuYWJsZWQuDQogICAgPiArICAvLw0KICAgID4gKyAgU3RhdHVzID0gSW5pdFByb3Rl Y3RlZFZhcmlhYmxlU3RvcmUgKFZhcmlhYmxlU3RvcmUpOw0KICAgID4gKyAgaWYgKChTdGF0dXMg IT0gRUZJX1NVQ0NFU1MpICYmIChTdGF0dXMgIT0gRUZJX1VOU1VQUE9SVEVEKSkgew0KICAgID4g KyAgICBGcmVlUG9vbCAoTnZTdG9yYWdlRGF0YSk7DQogICAgPiArICAgIERFQlVHICgoREVCVUdf RVJST1IsICJWYXJpYWJsZSBpbnRlZ3JpdHkgbWlnaHQgaGF2ZSBiZWVuDQogICAgPiBjb21wcm9t aXNlZFxuIikpOw0KICAgID4gKyAgICByZXR1cm4gU3RhdHVzOw0KICAgID4gKyAgfQ0KICAgID4g Kw0KICAgID4gKyAgbU52RnZIZWFkZXJDYWNoZSA9IEZ2SGVhZGVyOw0KICAgID4gKw0KICAgID4g KyAgKlZhcmlhYmxlU3RvcmVCYXNlID0gKEVGSV9QSFlTSUNBTF9BRERSRVNTKShVSU5UTilWYXJp YWJsZVN0b3JlOw0KICAgID4gKw0KICAgID4gKyAgSHdFcnJTdG9yYWdlU2l6ZSAgICAgICAgICAg ICAgICAgICAgPSBQY2RHZXQzMiAoUGNkSHdFcnJTdG9yYWdlU2l6ZSk7DQogICAgPiArICBNYXhV c2VyTnZWYXJpYWJsZVNwYWNlU2l6ZSAgICAgICAgICA9IFBjZEdldDMyDQogICAgPiAoUGNkTWF4 VXNlck52VmFyaWFibGVTcGFjZVNpemUpOw0KICAgID4gKyAgQm9vdHRpbWVSZXNlcnZlZE52VmFy aWFibGVTcGFjZVNpemUgPSBQY2RHZXQzMg0KICAgID4gKFBjZEJvb3R0aW1lUmVzZXJ2ZWROdlZh cmlhYmxlU3BhY2VTaXplKTsNCiAgICA+ICsNCiAgICA+ICsgIC8vDQogICAgPiArICAvLyBOb3Rl IHRoYXQgaW4gRWRrSUkgdmFyaWFibGUgZHJpdmVyIGltcGxlbWVudGF0aW9uLCBIYXJkd2FyZSBF cnJvciBSZWNvcmQNCiAgICA+IHR5cGUgdmFyaWFibGUNCiAgICA+ICsgIC8vIGlzIHN0b3JlZCB3 aXRoIGNvbW1vbiB2YXJpYWJsZSBpbiB0aGUgc2FtZSBOViByZWdpb24uIFNvIHRoZSBwbGF0Zm9y bQ0KICAgID4gaW50ZWdyYXRvciBzaG91bGQNCiAgICA+ICsgIC8vIGVuc3VyZSB0aGF0IHRoZSB2 YWx1ZSBvZiBQY2RId0VyclN0b3JhZ2VTaXplIGlzIGxlc3MgdGhhbiB0aGUgdmFsdWUgb2YNCiAg ICA+ICsgIC8vIChWYXJpYWJsZVN0b3JlTGVuZ3RoIC0gc2l6ZW9mIChWQVJJQUJMRV9TVE9SRV9I RUFERVIpKS4NCiAgICA+ICsgIC8vDQogICAgPiArICBBU1NFUlQgKEh3RXJyU3RvcmFnZVNpemUg PCAoVmFyaWFibGVTdG9yZUxlbmd0aCAtIHNpemVvZg0KICAgID4gKFZBUklBQkxFX1NUT1JFX0hF QURFUikpKTsNCiAgICA+ICsgIC8vDQogICAgPiArICAvLyBFbnN1cmUgdGhhdCB0aGUgdmFsdWUg b2YgUGNkTWF4VXNlck52VmFyaWFibGVTcGFjZVNpemUgaXMgbGVzcyB0aGFuIHRoZQ0KICAgID4g dmFsdWUgb2YNCiAgICA+ICsgIC8vIChWYXJpYWJsZVN0b3JlTGVuZ3RoIC0gc2l6ZW9mIChWQVJJ QUJMRV9TVE9SRV9IRUFERVIpKSAtIFBjZEdldDMyDQogICAgPiAoUGNkSHdFcnJTdG9yYWdlU2l6 ZSkuDQogICAgPiArICAvLw0KICAgID4gKyAgQVNTRVJUIChNYXhVc2VyTnZWYXJpYWJsZVNwYWNl U2l6ZSA8IChWYXJpYWJsZVN0b3JlTGVuZ3RoIC0gc2l6ZW9mDQogICAgPiAoVkFSSUFCTEVfU1RP UkVfSEVBREVSKSAtIEh3RXJyU3RvcmFnZVNpemUpKTsNCiAgICA+ICsgIC8vDQogICAgPiArICAv LyBFbnN1cmUgdGhhdCB0aGUgdmFsdWUgb2YgUGNkQm9vdHRpbWVSZXNlcnZlZE52VmFyaWFibGVT cGFjZVNpemUgaXMgbGVzcw0KICAgID4gdGhhbiB0aGUgdmFsdWUgb2YNCiAgICA+ICsgIC8vIChW YXJpYWJsZVN0b3JlTGVuZ3RoIC0gc2l6ZW9mIChWQVJJQUJMRV9TVE9SRV9IRUFERVIpKSAtIFBj ZEdldDMyDQogICAgPiAoUGNkSHdFcnJTdG9yYWdlU2l6ZSkuDQogICAgPiArICAvLw0KICAgID4g KyAgQVNTRVJUIChCb290dGltZVJlc2VydmVkTnZWYXJpYWJsZVNwYWNlU2l6ZSA8IChWYXJpYWJs ZVN0b3JlTGVuZ3RoIC0NCiAgICA+IHNpemVvZiAoVkFSSUFCTEVfU1RPUkVfSEVBREVSKSAtIEh3 RXJyU3RvcmFnZVNpemUpKTsNCiAgICA+ICsNCiAgICA+ICsgIG1WYXJpYWJsZU1vZHVsZUdsb2Jh bC0+Q29tbW9uVmFyaWFibGVTcGFjZSAgICAgICAgPQ0KICAgID4gKChVSU5UTilWYXJpYWJsZVN0 b3JlTGVuZ3RoIC0gc2l6ZW9mIChWQVJJQUJMRV9TVE9SRV9IRUFERVIpIC0NCiAgICA+IEh3RXJy U3RvcmFnZVNpemUpOw0KICAgID4gKyAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5Db21tb25NYXhV c2VyVmFyaWFibGVTcGFjZSA9DQogICAgPiAoKE1heFVzZXJOdlZhcmlhYmxlU3BhY2VTaXplICE9 IDApID8gTWF4VXNlck52VmFyaWFibGVTcGFjZVNpemUgOg0KICAgID4gbVZhcmlhYmxlTW9kdWxl R2xvYmFsLT5Db21tb25WYXJpYWJsZVNwYWNlKTsNCiAgICA+ICsgIG1WYXJpYWJsZU1vZHVsZUds b2JhbC0+Q29tbW9uUnVudGltZVZhcmlhYmxlU3BhY2UgPQ0KICAgID4gbVZhcmlhYmxlTW9kdWxl R2xvYmFsLT5Db21tb25WYXJpYWJsZVNwYWNlIC0NCiAgICA+IEJvb3R0aW1lUmVzZXJ2ZWROdlZh cmlhYmxlU3BhY2VTaXplOw0KICAgID4gKw0KICAgID4gKyAgREVCVUcgKCgNCiAgICA+ICsgICAg REVCVUdfSU5GTywNCiAgICA+ICsgICAgIlZhcmlhYmxlIGRyaXZlciBjb21tb24gc3BhY2U6IDB4 JXggMHgleCAweCV4XG4iLA0KICAgID4gKyAgICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPkNvbW1v blZhcmlhYmxlU3BhY2UsDQogICAgPiArICAgIG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+Q29tbW9u TWF4VXNlclZhcmlhYmxlU3BhY2UsDQogICAgPiArICAgIG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+ Q29tbW9uUnVudGltZVZhcmlhYmxlU3BhY2UNCiAgICA+ICsgICAgKSk7DQogICAgPiArDQogICAg PiArICAvLw0KICAgID4gKyAgLy8gVGhlIG1heCBOViB2YXJpYWJsZSBzaXplIHNob3VsZCBiZSA8 IChWYXJpYWJsZVN0b3JlTGVuZ3RoIC0gc2l6ZW9mDQogICAgPiAoVkFSSUFCTEVfU1RPUkVfSEVB REVSKSkuDQogICAgPiArICAvLw0KICAgID4gKyAgQVNTRVJUIChHZXROb25Wb2xhdGlsZU1heFZh cmlhYmxlU2l6ZSAoKSA8IChWYXJpYWJsZVN0b3JlTGVuZ3RoIC0gc2l6ZW9mDQogICAgPiAoVkFS SUFCTEVfU1RPUkVfSEVBREVSKSkpOw0KICAgID4gKw0KICAgID4gKyAgcmV0dXJuIEVGSV9TVUND RVNTOw0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIEluaXQgbm9uLXZv bGF0aWxlIHZhcmlhYmxlIHN0b3JlLg0KICAgID4gKw0KICAgID4gKyAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgICAgRnVuY3Rpb24gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLg0KICAgID4gKyAg QHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgRmFpbCB0byBhbGxvY2F0ZSBlbm91Z2ggbWVt b3J5IHJlc291cmNlLg0KICAgID4gKyAgQHJldHZhbCBFRklfVk9MVU1FX0NPUlJVUFRFRCAgVmFy aWFibGUgU3RvcmUgb3IgRmlybXdhcmUgVm9sdW1lIGZvcg0KICAgID4gVmFyaWFibGUgU3RvcmUg aXMgY29ycnVwdGVkLg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK0VGSV9TVEFUVVMNCiAg ICA+ICtJbml0Tm9uVm9sYXRpbGVWYXJpYWJsZVN0b3JlICgNCiAgICA+ICsgIFZPSUQNCiAgICA+ ICsgICkNCiAgICA+ICt7DQogICAgPiArICBWQVJJQUJMRV9IRUFERVIgICAgICAgKlZhcmlhYmxl Ow0KICAgID4gKyAgVkFSSUFCTEVfSEVBREVSICAgICAgICpOZXh0VmFyaWFibGU7DQogICAgPiAr ICBFRklfUEhZU0lDQUxfQUREUkVTUyAgVmFyaWFibGVTdG9yZUJhc2U7DQogICAgPiArICBVSU5U TiAgICAgICAgICAgICAgICAgVmFyaWFibGVTaXplOw0KICAgID4gKyAgRUZJX1NUQVRVUyAgICAg ICAgICAgIFN0YXR1czsNCiAgICA+ICsNCiAgICA+ICsgIGlmIChQY2RHZXRCb29sIChQY2RFbXVW YXJpYWJsZU52TW9kZUVuYWJsZSkpIHsNCiAgICA+ICsgICAgU3RhdHVzID0gSW5pdEVtdU5vblZv bGF0aWxlVmFyaWFibGVTdG9yZSAoJlZhcmlhYmxlU3RvcmVCYXNlKTsNCiAgICA+ICsgICAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgID4gKyAgICAgIHJldHVybiBTdGF0dXM7DQogICAg PiArICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJp YWJsZUdsb2JhbC5FbXVOdk1vZGUgPSBUUlVFOw0KICAgID4gKyAgICBERUJVRyAoKERFQlVHX0lO Rk8sICJWYXJpYWJsZSBkcml2ZXIgd2lsbCB3b3JrIGF0IGVtdWxhdGVkIG5vbi12b2xhdGlsZQ0K ICAgID4gdmFyaWFibGUgbW9kZSFcbiIpKTsNCiAgICA+ICsgIH0gZWxzZSB7DQogICAgPiArICAg IFN0YXR1cyA9IEluaXRSZWFsTm9uVm9sYXRpbGVWYXJpYWJsZVN0b3JlICgmVmFyaWFibGVTdG9y ZUJhc2UpOw0KICAgID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAgPiArICAg ICAgcmV0dXJuIFN0YXR1czsNCiAgICA+ICsgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICBtVmFy aWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLkVtdU52TW9kZSA9IEZBTFNFOw0KICAg ID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJs ZUdsb2JhbC5Ob25Wb2xhdGlsZVZhcmlhYmxlQmFzZSA9DQogICAgPiBWYXJpYWJsZVN0b3JlQmFz ZTsNCiAgICA+ICsgIG1OdlZhcmlhYmxlQ2FjaGUgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgPSAoVkFSSUFCTEVfU1RPUkVfSEVBREVSDQogICAgPiAqKShVSU5U TilWYXJpYWJsZVN0b3JlQmFzZTsNCiAgICA+ICsgIG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFy aWFibGVHbG9iYWwuQXV0aEZvcm1hdCAgICAgICAgICAgICAgPQ0KICAgID4gKEJPT0xFQU4pKENv bXBhcmVHdWlkICgmbU52VmFyaWFibGVDYWNoZS0+U2lnbmF0dXJlLA0KICAgID4gJmdFZmlBdXRo ZW50aWNhdGVkVmFyaWFibGVHdWlkKSk7DQogICAgPiArDQogICAgPiArICBtVmFyaWFibGVNb2R1 bGVHbG9iYWwtPk1heFZhcmlhYmxlU2l6ZSAgICAgPSBQY2RHZXQzMg0KICAgID4gKFBjZE1heFZh cmlhYmxlU2l6ZSk7DQogICAgPiArICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPk1heEF1dGhWYXJp YWJsZVNpemUgPSAoKFBjZEdldDMyDQogICAgPiAoUGNkTWF4QXV0aFZhcmlhYmxlU2l6ZSkgIT0g MCkgPyBQY2RHZXQzMiAoUGNkTWF4QXV0aFZhcmlhYmxlU2l6ZSkgOg0KICAgID4gbVZhcmlhYmxl TW9kdWxlR2xvYmFsLT5NYXhWYXJpYWJsZVNpemUpOw0KICAgID4gKw0KICAgID4gKyAgLy8NCiAg ICA+ICsgIC8vIFBhcnNlIG5vbi12b2xhdGlsZSB2YXJpYWJsZSBkYXRhIGFuZCBnZXQgbGFzdCB2 YXJpYWJsZSBvZmZzZXQuDQogICAgPiArICAvLw0KICAgID4gKyAgVmFyaWFibGUgPSBHZXRTdGFy dFBvaW50ZXIgKG1OdlZhcmlhYmxlQ2FjaGUpOw0KICAgID4gKyAgd2hpbGUgKElzVmFsaWRWYXJp YWJsZUhlYWRlciAoDQogICAgPiArICAgICAgICAgICBWYXJpYWJsZSwNCiAgICA+ICsgICAgICAg ICAgIEdldEVuZFBvaW50ZXIgKG1OdlZhcmlhYmxlQ2FjaGUpLA0KICAgID4gKyAgICAgICAgICAg bVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0DQogICAgPiAr ICAgICAgICAgICApKQ0KICAgID4gKyAgew0KICAgID4gKyAgICBOZXh0VmFyaWFibGUgPSBHZXRO ZXh0VmFyaWFibGVQdHIgKFZhcmlhYmxlLCBtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQogICAgPiA+ VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdCk7DQogICAgPiArICAgIFZhcmlhYmxlU2l6ZSA9IChV SU5UTilOZXh0VmFyaWFibGUgLSAoVUlOVE4pVmFyaWFibGU7DQogICAgPiArICAgIGlmICgoVmFy aWFibGUtPkF0dHJpYnV0ZXMgJiAoRUZJX1ZBUklBQkxFX05PTl9WT0xBVElMRSB8DQogICAgPiBF RklfVkFSSUFCTEVfSEFSRFdBUkVfRVJST1JfUkVDT1JEKSkgPT0NCiAgICA+IChFRklfVkFSSUFC TEVfTk9OX1ZPTEFUSUxFIHwgRUZJX1ZBUklBQkxFX0hBUkRXQVJFX0VSUk9SX1JFQ09SRCkpDQog ICAgPiB7DQogICAgPiArICAgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5Id0VyclZhcmlhYmxl VG90YWxTaXplICs9IFZhcmlhYmxlU2l6ZTsNCiAgICA+ICsgICAgfSBlbHNlIHsNCiAgICA+ICsg ICAgICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPkNvbW1vblZhcmlhYmxlVG90YWxTaXplICs9IFZh cmlhYmxlU2l6ZTsNCiAgICA+ICsgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICBWYXJpYWJsZSA9 IE5leHRWYXJpYWJsZTsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIG1WYXJpYWJsZU1v ZHVsZUdsb2JhbC0+Tm9uVm9sYXRpbGVMYXN0VmFyaWFibGVPZmZzZXQgPSAoVUlOVE4pVmFyaWFi bGUgLQ0KICAgID4gKFVJTlROKW1OdlZhcmlhYmxlQ2FjaGU7DQogICAgPiArDQogICAgPiArICBy ZXR1cm4gRUZJX1NVQ0NFU1M7DQogICAgPiArfQ0KICAgID4gZGlmZiAtLWdpdA0KICAgID4gYS9N ZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1Zhcmlh YmxlUGFyc2luZy5jDQogICAgPiBiL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJv dGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVQYXJzaW5nLmMNCiAgICA+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0DQogICAgPiBpbmRleCAwMDAwMDAwMDAwMDAuLmJlM2Y1OTM0MWMxZQ0KICAgID4gLS0t IC9kZXYvbnVsbA0KICAgID4gKysrDQogICAgPiBiL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFy aWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVQYXJzaW5nLmMNCiAgICA+IEBAIC0w LDAgKzEsMTExMCBAQA0KICAgID4gKy8qKiBAZmlsZQ0KICAgID4gKyAgRnVuY3Rpb25zIGluIHRo aXMgbW9kdWxlIGFyZSBhc3NvY2lhdGVkIHdpdGggdmFyaWFibGUgcGFyc2luZyBvcGVyYXRpb25z IGFuZA0KICAgID4gKyAgYXJlIGludGVuZGVkIHRvIGJlIHVzYWJsZSBhY3Jvc3MgdmFyaWFibGUg ZHJpdmVyIHNvdXJjZSBmaWxlcy4NCiAgICA+ICsNCiAgICA+ICtDb3B5cmlnaHQgKGMpIDIwMTkg LSAyMDIyLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQogICAg PiArU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCiAgICA+ICsN CiAgICA+ICsqKi8NCiAgICA+ICsNCiAgICA+ICsjaW5jbHVkZSAiVmFyaWFibGUuaCINCiAgICA+ ICsjaW5jbHVkZSAiVmFyaWFibGVQYXJzaW5nLmgiDQogICAgPiArDQogICAgPiArLyoqDQogICAg PiArDQogICAgPiArICBUaGlzIGNvZGUgY2hlY2tzIGlmIHZhcmlhYmxlIGhlYWRlciBpcyB2YWxp ZCBvciBub3QuDQogICAgPiArDQogICAgPiArICBAcGFyYW1baW5dIFZhcmlhYmxlICAgICAgICAg ICBQb2ludGVyIHRvIHRoZSBWYXJpYWJsZSBIZWFkZXIuDQogICAgPiArICBAcGFyYW1baW5dIFZh cmlhYmxlU3RvcmVFbmQgICBQb2ludGVyIHRvIHRoZSBWYXJpYWJsZSBTdG9yZSBFbmQuDQogICAg PiArICBAcGFyYW1baW5dIEF1dGhGb3JtYXQgICAgICAgICBUUlVFIGluZGljYXRlcyBhdXRoZW50 aWNhdGVkIHZhcmlhYmxlcyBhcmUgdXNlZC4NCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZBTFNFIGluZGljYXRlcyBhdXRoZW50aWNhdGVkIHZhcmlhYmxlcyBhcmUgbm90 IHVzZWQuDQogICAgPiArDQogICAgPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgICAgIFZhcmlh YmxlIGhlYWRlciBpcyB2YWxpZC4NCiAgICA+ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICAgICAg VmFyaWFibGUgaGVhZGVyIGlzIG5vdCB2YWxpZC4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ ICtCT09MRUFODQogICAgPiArSXNWYWxpZFZhcmlhYmxlSGVhZGVyICgNCiAgICA+ICsgIElOICBW QVJJQUJMRV9IRUFERVIgICpWYXJpYWJsZSwNCiAgICA+ICsgIElOICBWQVJJQUJMRV9IRUFERVIg ICpWYXJpYWJsZVN0b3JlRW5kLA0KICAgID4gKyAgSU4gIEJPT0xFQU4gICAgICAgICAgQXV0aEZv cm1hdA0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIGlmICggIChWYXJpYWJsZSA9PSBO VUxMKQ0KICAgID4gKyAgICAgfHwgKCgoVUlOVE4pVmFyaWFibGUgKyBHZXRWYXJpYWJsZUhlYWRl clNpemUgKEF1dGhGb3JtYXQpKSA+PQ0KICAgID4gKFVJTlROKVZhcmlhYmxlU3RvcmVFbmQpDQog ICAgPiArICAgICB8fCAoVmFyaWFibGUtPlN0YXJ0SWQgIT0gVkFSSUFCTEVfREFUQSkpDQogICAg PiArICB7DQogICAgPiArICAgIC8vDQogICAgPiArICAgIC8vIFZhcmlhYmxlIGlzIE5VTEwgb3Ig aGFzIHJlYWNoZWQgdGhlIGVuZCBvZiB2YXJpYWJsZSBzdG9yZSwNCiAgICA+ICsgICAgLy8gb3Ig dGhlIFN0YXJ0SWQgaXMgbm90IGNvcnJlY3QuDQogICAgPiArICAgIC8vDQogICAgPiArICAgIHJl dHVybiBGQUxTRTsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIHJldHVybiBUUlVFOw0K ICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsNCiAgICA+ICsgIFRoaXMgY29k ZSBnZXRzIHRoZSBjdXJyZW50IHN0YXR1cyBvZiBWYXJpYWJsZSBTdG9yZS4NCiAgICA+ICsNCiAg ICA+ICsgIEBwYXJhbVtpbl0gVmFyU3RvcmVIZWFkZXIgIFBvaW50ZXIgdG8gdGhlIFZhcmlhYmxl IFN0b3JlIEhlYWRlci4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwgRWZpUmF3ICAgICAgICAg VmFyaWFibGUgc3RvcmUgc3RhdHVzIGlzIHJhdy4NCiAgICA+ICsgIEByZXR2YWwgRWZpVmFsaWQg ICAgICAgVmFyaWFibGUgc3RvcmUgc3RhdHVzIGlzIHZhbGlkLg0KICAgID4gKyAgQHJldHZhbCBF ZmlJbnZhbGlkICAgICBWYXJpYWJsZSBzdG9yZSBzdGF0dXMgaXMgaW52YWxpZC4NCiAgICA+ICsN CiAgICA+ICsqKi8NCiAgICA+ICtWQVJJQUJMRV9TVE9SRV9TVEFUVVMNCiAgICA+ICtHZXRWYXJp YWJsZVN0b3JlU3RhdHVzICgNCiAgICA+ICsgIElOIFZBUklBQkxFX1NUT1JFX0hFQURFUiAgKlZh clN0b3JlSGVhZGVyDQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgaWYgKChDb21wYXJl R3VpZCAoJlZhclN0b3JlSGVhZGVyLT5TaWduYXR1cmUsDQogICAgPiAmZ0VmaUF1dGhlbnRpY2F0 ZWRWYXJpYWJsZUd1aWQpIHx8DQogICAgPiArICAgICAgIENvbXBhcmVHdWlkICgmVmFyU3RvcmVI ZWFkZXItPlNpZ25hdHVyZSwgJmdFZmlWYXJpYWJsZUd1aWQpKSAmJg0KICAgID4gKyAgICAgIChW YXJTdG9yZUhlYWRlci0+Rm9ybWF0ID09IFZBUklBQkxFX1NUT1JFX0ZPUk1BVFRFRCkgJiYNCiAg ICA+ICsgICAgICAoVmFyU3RvcmVIZWFkZXItPlN0YXRlID09IFZBUklBQkxFX1NUT1JFX0hFQUxU SFkpDQogICAgPiArICAgICAgKQ0KICAgID4gKyAgew0KICAgID4gKyAgICByZXR1cm4gRWZpVmFs aWQ7DQogICAgPiArICB9IGVsc2UgaWYgKCgoKFVJTlQzMiAqKSgmVmFyU3RvcmVIZWFkZXItPlNp Z25hdHVyZSkpWzBdID09IDB4ZmZmZmZmZmYpICYmDQogICAgPiArICAgICAgICAgICAgICgoKFVJ TlQzMiAqKSgmVmFyU3RvcmVIZWFkZXItPlNpZ25hdHVyZSkpWzFdID09IDB4ZmZmZmZmZmYpICYm DQogICAgPiArICAgICAgICAgICAgICgoKFVJTlQzMiAqKSgmVmFyU3RvcmVIZWFkZXItPlNpZ25h dHVyZSkpWzJdID09IDB4ZmZmZmZmZmYpICYmDQogICAgPiArICAgICAgICAgICAgICgoKFVJTlQz MiAqKSgmVmFyU3RvcmVIZWFkZXItPlNpZ25hdHVyZSkpWzNdID09IDB4ZmZmZmZmZmYpICYmDQog ICAgPiArICAgICAgICAgICAgIChWYXJTdG9yZUhlYWRlci0+U2l6ZSA9PSAweGZmZmZmZmZmKSAm Jg0KICAgID4gKyAgICAgICAgICAgICAoVmFyU3RvcmVIZWFkZXItPkZvcm1hdCA9PSAweGZmKSAm Jg0KICAgID4gKyAgICAgICAgICAgICAoVmFyU3RvcmVIZWFkZXItPlN0YXRlID09IDB4ZmYpDQog ICAgPiArICAgICAgICAgICAgICkNCiAgICA+ICsgIHsNCiAgICA+ICsgICAgcmV0dXJuIEVmaVJh dzsNCiAgICA+ICsgIH0gZWxzZSB7DQogICAgPiArICAgIHJldHVybiBFZmlJbnZhbGlkOw0KICAg ID4gKyAgfQ0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIFRoaXMgY29k ZSBnZXRzIHRoZSBzaXplIG9mIHZhcmlhYmxlIGhlYWRlci4NCiAgICA+ICsNCiAgICA+ICsgIEBw YXJhbVtpbl0gIEF1dGhGb3JtYXQgICAgVFJVRSBpbmRpY2F0ZXMgYXV0aGVudGljYXRlZCB2YXJp YWJsZXMgYXJlIHVzZWQuDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNF IGluZGljYXRlcyBhdXRoZW50aWNhdGVkIHZhcmlhYmxlcyBhcmUgbm90IHVzZWQuDQogICAgPiAr DQogICAgPiArICBAcmV0dXJuIFNpemUgb2YgdmFyaWFibGUgaGVhZGVyIGluIGJ5dGVzIGluIHR5 cGUgVUlOVE4uDQogICAgPiArDQogICAgPiArKiovDQogICAgPiArVUlOVE4NCiAgICA+ICtHZXRW YXJpYWJsZUhlYWRlclNpemUgKA0KICAgID4gKyAgSU4gIEJPT0xFQU4gIEF1dGhGb3JtYXQNCiAg ICA+ICsgICkNCiAgICA+ICt7DQogICAgPiArICBVSU5UTiAgVmFsdWU7DQogICAgPiArDQogICAg PiArICBpZiAoQXV0aEZvcm1hdCkgew0KICAgID4gKyAgICBWYWx1ZSA9IHNpemVvZiAoQVVUSEVO VElDQVRFRF9WQVJJQUJMRV9IRUFERVIpOw0KICAgID4gKyAgfSBlbHNlIHsNCiAgICA+ICsgICAg VmFsdWUgPSBzaXplb2YgKFZBUklBQkxFX0hFQURFUik7DQogICAgPiArICB9DQogICAgPiArDQog ICAgPiArICByZXR1cm4gVmFsdWU7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAg ID4gKw0KICAgID4gKyAgVGhpcyBjb2RlIGdldHMgdGhlIHNpemUgb2YgbmFtZSBvZiB2YXJpYWJs ZS4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbVtpbl0gIFZhcmlhYmxlICAgICAgUG9pbnRlciB0 byB0aGUgdmFyaWFibGUgaGVhZGVyLg0KICAgID4gKyAgQHBhcmFtW2luXSAgQXV0aEZvcm1hdCAg ICBUUlVFIGluZGljYXRlcyBhdXRoZW50aWNhdGVkIHZhcmlhYmxlcyBhcmUgdXNlZC4NCiAgICA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UgaW5kaWNhdGVzIGF1dGhlbnRpY2F0 ZWQgdmFyaWFibGVzIGFyZSBub3QgdXNlZC4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR1cm4gVUlO VE4gICAgICAgICAgU2l6ZSBvZiB2YXJpYWJsZSBpbiBieXRlcy4NCiAgICA+ICsNCiAgICA+ICsq Ki8NCiAgICA+ICtVSU5UTg0KICAgID4gK05hbWVTaXplT2ZWYXJpYWJsZSAoDQogICAgPiArICBJ TiAgVkFSSUFCTEVfSEVBREVSICAqVmFyaWFibGUsDQogICAgPiArICBJTiAgQk9PTEVBTiAgICAg ICAgICBBdXRoRm9ybWF0DQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgQVVUSEVOVElD QVRFRF9WQVJJQUJMRV9IRUFERVIgICpBdXRoVmFyaWFibGU7DQogICAgPiArDQogICAgPiArICBB dXRoVmFyaWFibGUgPSAoQVVUSEVOVElDQVRFRF9WQVJJQUJMRV9IRUFERVIgKilWYXJpYWJsZTsN CiAgICA+ICsgIGlmIChBdXRoRm9ybWF0KSB7DQogICAgPiArICAgIGlmICgoQXV0aFZhcmlhYmxl LT5TdGF0ZSA9PSAoVUlOVDgpKC0xKSkgfHwNCiAgICA+ICsgICAgICAgIChBdXRoVmFyaWFibGUt PkRhdGFTaXplID09IChVSU5UMzIpKC0xKSkgfHwNCiAgICA+ICsgICAgICAgIChBdXRoVmFyaWFi bGUtPk5hbWVTaXplID09IChVSU5UMzIpKC0xKSkgfHwNCiAgICA+ICsgICAgICAgIChBdXRoVmFy aWFibGUtPkF0dHJpYnV0ZXMgPT0gKFVJTlQzMikoLTEpKSkNCiAgICA+ICsgICAgew0KICAgID4g KyAgICAgIHJldHVybiAwOw0KICAgID4gKyAgICB9DQogICAgPiArDQogICAgPiArICAgIHJldHVy biAoVUlOVE4pQXV0aFZhcmlhYmxlLT5OYW1lU2l6ZTsNCiAgICA+ICsgIH0gZWxzZSB7DQogICAg PiArICAgIGlmICgoVmFyaWFibGUtPlN0YXRlID09IChVSU5UOCkoLTEpKSB8fA0KICAgID4gKyAg ICAgICAgKFZhcmlhYmxlLT5EYXRhU2l6ZSA9PSAoVUlOVDMyKSgtMSkpIHx8DQogICAgPiArICAg ICAgICAoVmFyaWFibGUtPk5hbWVTaXplID09IChVSU5UMzIpKC0xKSkgfHwNCiAgICA+ICsgICAg ICAgIChWYXJpYWJsZS0+QXR0cmlidXRlcyA9PSAoVUlOVDMyKSgtMSkpKQ0KICAgID4gKyAgICB7 DQogICAgPiArICAgICAgcmV0dXJuIDA7DQogICAgPiArICAgIH0NCiAgICA+ICsNCiAgICA+ICsg ICAgcmV0dXJuIChVSU5UTilWYXJpYWJsZS0+TmFtZVNpemU7DQogICAgPiArICB9DQogICAgPiAr fQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgVGhpcyBjb2RlIHNldHMgdGhlIHNpemUg b2YgbmFtZSBvZiB2YXJpYWJsZS4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbVtpbl0gIFZhcmlh YmxlICAgICAgUG9pbnRlciB0byB0aGUgVmFyaWFibGUgSGVhZGVyLg0KICAgID4gKyAgQHBhcmFt W2luXSAgTmFtZVNpemUgICAgICBOYW1lIHNpemUgdG8gc2V0Lg0KICAgID4gKyAgQHBhcmFtW2lu XSAgQXV0aEZvcm1hdCAgICBUUlVFIGluZGljYXRlcyBhdXRoZW50aWNhdGVkIHZhcmlhYmxlcyBh cmUgdXNlZC4NCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UgaW5kaWNh dGVzIGF1dGhlbnRpY2F0ZWQgdmFyaWFibGVzIGFyZSBub3QgdXNlZC4NCiAgICA+ICsNCiAgICA+ ICsqKi8NCiAgICA+ICtWT0lEDQogICAgPiArU2V0TmFtZVNpemVPZlZhcmlhYmxlICgNCiAgICA+ ICsgIElOIFZBUklBQkxFX0hFQURFUiAgKlZhcmlhYmxlLA0KICAgID4gKyAgSU4gVUlOVE4gICAg ICAgICAgICBOYW1lU2l6ZSwNCiAgICA+ICsgIElOIEJPT0xFQU4gICAgICAgICAgQXV0aEZvcm1h dA0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIEFVVEhFTlRJQ0FURURfVkFSSUFCTEVf SEVBREVSICAqQXV0aFZhcmlhYmxlOw0KICAgID4gKw0KICAgID4gKyAgQXV0aFZhcmlhYmxlID0g KEFVVEhFTlRJQ0FURURfVkFSSUFCTEVfSEVBREVSICopVmFyaWFibGU7DQogICAgPiArICBpZiAo QXV0aEZvcm1hdCkgew0KICAgID4gKyAgICBBdXRoVmFyaWFibGUtPk5hbWVTaXplID0gKFVJTlQz MilOYW1lU2l6ZTsNCiAgICA+ICsgIH0gZWxzZSB7DQogICAgPiArICAgIFZhcmlhYmxlLT5OYW1l U2l6ZSA9IChVSU5UMzIpTmFtZVNpemU7DQogICAgPiArICB9DQogICAgPiArfQ0KICAgID4gKw0K ICAgID4gKy8qKg0KICAgID4gKw0KICAgID4gKyAgVGhpcyBjb2RlIGdldHMgdGhlIHNpemUgb2Yg dmFyaWFibGUgZGF0YS4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbVtpbl0gIFZhcmlhYmxlICAg ICAgUG9pbnRlciB0byB0aGUgVmFyaWFibGUgSGVhZGVyLg0KICAgID4gKyAgQHBhcmFtW2luXSAg QXV0aEZvcm1hdCAgICBUUlVFIGluZGljYXRlcyBhdXRoZW50aWNhdGVkIHZhcmlhYmxlcyBhcmUg dXNlZC4NCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UgaW5kaWNhdGVz IGF1dGhlbnRpY2F0ZWQgdmFyaWFibGVzIGFyZSBub3QgdXNlZC4NCiAgICA+ICsNCiAgICA+ICsg IEByZXR1cm4gU2l6ZSBvZiB2YXJpYWJsZSBpbiBieXRlcy4NCiAgICA+ICsNCiAgICA+ICsqKi8N CiAgICA+ICtVSU5UTg0KICAgID4gK0RhdGFTaXplT2ZWYXJpYWJsZSAoDQogICAgPiArICBJTiAg VkFSSUFCTEVfSEVBREVSICAqVmFyaWFibGUsDQogICAgPiArICBJTiAgQk9PTEVBTiAgICAgICAg ICBBdXRoRm9ybWF0DQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgQVVUSEVOVElDQVRF RF9WQVJJQUJMRV9IRUFERVIgICpBdXRoVmFyaWFibGU7DQogICAgPiArDQogICAgPiArICBBdXRo VmFyaWFibGUgPSAoQVVUSEVOVElDQVRFRF9WQVJJQUJMRV9IRUFERVIgKilWYXJpYWJsZTsNCiAg ICA+ICsgIGlmIChBdXRoRm9ybWF0KSB7DQogICAgPiArICAgIGlmICgoQXV0aFZhcmlhYmxlLT5T dGF0ZSA9PSAoVUlOVDgpKC0xKSkgfHwNCiAgICA+ICsgICAgICAgIChBdXRoVmFyaWFibGUtPkRh dGFTaXplID09IChVSU5UMzIpKC0xKSkgfHwNCiAgICA+ICsgICAgICAgIChBdXRoVmFyaWFibGUt Pk5hbWVTaXplID09IChVSU5UMzIpKC0xKSkgfHwNCiAgICA+ICsgICAgICAgIChBdXRoVmFyaWFi bGUtPkF0dHJpYnV0ZXMgPT0gKFVJTlQzMikoLTEpKSkNCiAgICA+ICsgICAgew0KICAgID4gKyAg ICAgIHJldHVybiAwOw0KICAgID4gKyAgICB9DQogICAgPiArDQogICAgPiArICAgIHJldHVybiAo VUlOVE4pQXV0aFZhcmlhYmxlLT5EYXRhU2l6ZTsNCiAgICA+ICsgIH0gZWxzZSB7DQogICAgPiAr ICAgIGlmICgoVmFyaWFibGUtPlN0YXRlID09IChVSU5UOCkoLTEpKSB8fA0KICAgID4gKyAgICAg ICAgKFZhcmlhYmxlLT5EYXRhU2l6ZSA9PSAoVUlOVDMyKSgtMSkpIHx8DQogICAgPiArICAgICAg ICAoVmFyaWFibGUtPk5hbWVTaXplID09IChVSU5UMzIpKC0xKSkgfHwNCiAgICA+ICsgICAgICAg IChWYXJpYWJsZS0+QXR0cmlidXRlcyA9PSAoVUlOVDMyKSgtMSkpKQ0KICAgID4gKyAgICB7DQog ICAgPiArICAgICAgcmV0dXJuIDA7DQogICAgPiArICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAg cmV0dXJuIChVSU5UTilWYXJpYWJsZS0+RGF0YVNpemU7DQogICAgPiArICB9DQogICAgPiArfQ0K ICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgVGhpcyBjb2RlIHNldHMgdGhlIHNpemUgb2Yg dmFyaWFibGUgZGF0YS4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbVtpbl0gVmFyaWFibGUgICBQ b2ludGVyIHRvIHRoZSBWYXJpYWJsZSBIZWFkZXIuDQogICAgPiArICBAcGFyYW1baW5dIERhdGFT aXplICAgRGF0YSBzaXplIHRvIHNldC4NCiAgICA+ICsgIEBwYXJhbVtpbl0gQXV0aEZvcm1hdCBU UlVFIGluZGljYXRlcyBhdXRoZW50aWNhdGVkIHZhcmlhYmxlcyBhcmUgdXNlZC4NCiAgICA+ICsg ICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSBpbmRpY2F0ZXMgYXV0aGVudGljYXRlZCB2YXJp YWJsZXMgYXJlIG5vdCB1c2VkLg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK1ZPSUQNCiAg ICA+ICtTZXREYXRhU2l6ZU9mVmFyaWFibGUgKA0KICAgID4gKyAgSU4gIFZBUklBQkxFX0hFQURF UiAgKlZhcmlhYmxlLA0KICAgID4gKyAgSU4gIFVJTlROICAgICAgICAgICAgRGF0YVNpemUsDQog ICAgPiArICBJTiAgQk9PTEVBTiAgICAgICAgICBBdXRoRm9ybWF0DQogICAgPiArICApDQogICAg PiArew0KICAgID4gKyAgQVVUSEVOVElDQVRFRF9WQVJJQUJMRV9IRUFERVIgICpBdXRoVmFyaWFi bGU7DQogICAgPiArDQogICAgPiArICBBdXRoVmFyaWFibGUgPSAoQVVUSEVOVElDQVRFRF9WQVJJ QUJMRV9IRUFERVIgKilWYXJpYWJsZTsNCiAgICA+ICsgIGlmIChBdXRoRm9ybWF0KSB7DQogICAg PiArICAgIEF1dGhWYXJpYWJsZS0+RGF0YVNpemUgPSAoVUlOVDMyKURhdGFTaXplOw0KICAgID4g KyAgfSBlbHNlIHsNCiAgICA+ICsgICAgVmFyaWFibGUtPkRhdGFTaXplID0gKFVJTlQzMilEYXRh U2l6ZTsNCiAgICA+ICsgIH0NCiAgICA+ICt9DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiAr DQogICAgPiArICBUaGlzIGNvZGUgZ2V0cyB0aGUgcG9pbnRlciB0byB0aGUgdmFyaWFibGUgbmFt ZS4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbVtpbl0gVmFyaWFibGUgICAgIFBvaW50ZXIgdG8g dGhlIFZhcmlhYmxlIEhlYWRlci4NCiAgICA+ICsgIEBwYXJhbVtpbl0gQXV0aEZvcm1hdCAgIFRS VUUgaW5kaWNhdGVzIGF1dGhlbnRpY2F0ZWQgdmFyaWFibGVzIGFyZSB1c2VkLg0KICAgID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UgaW5kaWNhdGVzIGF1dGhlbnRpY2F0ZWQgdmFy aWFibGVzIGFyZSBub3QgdXNlZC4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR1cm4gUG9pbnRlciB0 byBWYXJpYWJsZSBOYW1lIHdoaWNoIGlzIFVuaWNvZGUgZW5jb2RpbmcuDQogICAgPiArDQogICAg PiArKiovDQogICAgPiArQ0hBUjE2ICoNCiAgICA+ICtHZXRWYXJpYWJsZU5hbWVQdHIgKA0KICAg ID4gKyAgSU4gIFZBUklBQkxFX0hFQURFUiAgKlZhcmlhYmxlLA0KICAgID4gKyAgSU4gIEJPT0xF QU4gICAgICAgICAgQXV0aEZvcm1hdA0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIHJl dHVybiAoQ0hBUjE2ICopKChVSU5UTilWYXJpYWJsZSArIEdldFZhcmlhYmxlSGVhZGVyU2l6ZSAo QXV0aEZvcm1hdCkpOw0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIFRo aXMgY29kZSBnZXRzIHRoZSBwb2ludGVyIHRvIHRoZSB2YXJpYWJsZSBndWlkLg0KICAgID4gKw0K ICAgID4gKyAgQHBhcmFtW2luXSBWYXJpYWJsZSAgICAgUG9pbnRlciB0byB0aGUgVmFyaWFibGUg SGVhZGVyLg0KICAgID4gKyAgQHBhcmFtW2luXSBBdXRoRm9ybWF0ICAgVFJVRSBpbmRpY2F0ZXMg YXV0aGVudGljYXRlZCB2YXJpYWJsZXMgYXJlIHVzZWQuDQogICAgPiArICAgICAgICAgICAgICAg ICAgICAgICAgICBGQUxTRSBpbmRpY2F0ZXMgYXV0aGVudGljYXRlZCB2YXJpYWJsZXMgYXJlIG5v dCB1c2VkLg0KICAgID4gKw0KICAgID4gKyAgQHJldHVybiBBIEVGSV9HVUlEKiBwb2ludGVyIHRv IFZlbmRvciBHdWlkLg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK0VGSV9HVUlEICoNCiAg ICA+ICtHZXRWZW5kb3JHdWlkUHRyICgNCiAgICA+ICsgIElOICBWQVJJQUJMRV9IRUFERVIgICpW YXJpYWJsZSwNCiAgICA+ICsgIElOICBCT09MRUFOICAgICAgICAgIEF1dGhGb3JtYXQNCiAgICA+ ICsgICkNCiAgICA+ICt7DQogICAgPiArICBBVVRIRU5USUNBVEVEX1ZBUklBQkxFX0hFQURFUiAg KkF1dGhWYXJpYWJsZTsNCiAgICA+ICsNCiAgICA+ICsgIEF1dGhWYXJpYWJsZSA9IChBVVRIRU5U SUNBVEVEX1ZBUklBQkxFX0hFQURFUiAqKVZhcmlhYmxlOw0KICAgID4gKyAgaWYgKEF1dGhGb3Jt YXQpIHsNCiAgICA+ICsgICAgcmV0dXJuICZBdXRoVmFyaWFibGUtPlZlbmRvckd1aWQ7DQogICAg PiArICB9IGVsc2Ugew0KICAgID4gKyAgICByZXR1cm4gJlZhcmlhYmxlLT5WZW5kb3JHdWlkOw0K ICAgID4gKyAgfQ0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsNCiAgICA+ ICsgIFRoaXMgY29kZSBnZXRzIHRoZSBwb2ludGVyIHRvIHRoZSB2YXJpYWJsZSBkYXRhLg0KICAg ID4gKw0KICAgID4gKyAgQHBhcmFtW2luXSBWYXJpYWJsZSAgICAgUG9pbnRlciB0byB0aGUgVmFy aWFibGUgSGVhZGVyLg0KICAgID4gKyAgQHBhcmFtW2luXSBBdXRoRm9ybWF0ICAgVFJVRSBpbmRp Y2F0ZXMgYXV0aGVudGljYXRlZCB2YXJpYWJsZXMgYXJlIHVzZWQuDQogICAgPiArICAgICAgICAg ICAgICAgICAgICAgICAgICBGQUxTRSBpbmRpY2F0ZXMgYXV0aGVudGljYXRlZCB2YXJpYWJsZXMg YXJlIG5vdCB1c2VkLg0KICAgID4gKw0KICAgID4gKyAgQHJldHVybiBQb2ludGVyIHRvIFZhcmlh YmxlIERhdGEuDQogICAgPiArDQogICAgPiArKiovDQogICAgPiArVUlOVDggKg0KICAgID4gK0dl dFZhcmlhYmxlRGF0YVB0ciAoDQogICAgPiArICBJTiAgVkFSSUFCTEVfSEVBREVSICAqVmFyaWFi bGUsDQogICAgPiArICBJTiAgQk9PTEVBTiAgICAgICAgICBBdXRoRm9ybWF0DQogICAgPiArICAp DQogICAgPiArew0KICAgID4gKyAgVUlOVE4gIFZhbHVlOw0KICAgID4gKw0KICAgID4gKyAgLy8N CiAgICA+ICsgIC8vIEJlIGNhcmVmdWwgYWJvdXQgcGFkIHNpemUgZm9yIGFsaWdubWVudC4NCiAg ICA+ICsgIC8vDQogICAgPiArICBWYWx1ZSAgPSAgKFVJTlROKUdldFZhcmlhYmxlTmFtZVB0ciAo VmFyaWFibGUsIEF1dGhGb3JtYXQpOw0KICAgID4gKyAgVmFsdWUgKz0gTmFtZVNpemVPZlZhcmlh YmxlIChWYXJpYWJsZSwgQXV0aEZvcm1hdCk7DQogICAgPiArICBWYWx1ZSArPSBHRVRfUEFEX1NJ WkUgKE5hbWVTaXplT2ZWYXJpYWJsZSAoVmFyaWFibGUsIEF1dGhGb3JtYXQpKTsNCiAgICA+ICsN CiAgICA+ICsgIHJldHVybiAoVUlOVDggKilWYWx1ZTsNCiAgICA+ICt9DQogICAgPiArDQogICAg PiArLyoqDQogICAgPiArICBUaGlzIGNvZGUgZ2V0cyB0aGUgdmFyaWFibGUgZGF0YSBvZmZzZXQg cmVsYXRlZCB0byB2YXJpYWJsZSBoZWFkZXIuDQogICAgPiArDQogICAgPiArICBAcGFyYW1baW5d IFZhcmlhYmxlICAgICBQb2ludGVyIHRvIHRoZSBWYXJpYWJsZSBIZWFkZXIuDQogICAgPiArICBA cGFyYW1baW5dIEF1dGhGb3JtYXQgICBUUlVFIGluZGljYXRlcyBhdXRoZW50aWNhdGVkIHZhcmlh YmxlcyBhcmUgdXNlZC4NCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFIGlu ZGljYXRlcyBhdXRoZW50aWNhdGVkIHZhcmlhYmxlcyBhcmUgbm90IHVzZWQuDQogICAgPiArDQog ICAgPiArICBAcmV0dXJuIFZhcmlhYmxlIERhdGEgb2Zmc2V0Lg0KICAgID4gKw0KICAgID4gKyoq Lw0KICAgID4gK1VJTlRODQogICAgPiArR2V0VmFyaWFibGVEYXRhT2Zmc2V0ICgNCiAgICA+ICsg IElOICBWQVJJQUJMRV9IRUFERVIgICpWYXJpYWJsZSwNCiAgICA+ICsgIElOICBCT09MRUFOICAg ICAgICAgIEF1dGhGb3JtYXQNCiAgICA+ICsgICkNCiAgICA+ICt7DQogICAgPiArICBVSU5UTiAg VmFsdWU7DQogICAgPiArDQogICAgPiArICAvLw0KICAgID4gKyAgLy8gQmUgY2FyZWZ1bCBhYm91 dCBwYWQgc2l6ZSBmb3IgYWxpZ25tZW50DQogICAgPiArICAvLw0KICAgID4gKyAgVmFsdWUgID0g R2V0VmFyaWFibGVIZWFkZXJTaXplIChBdXRoRm9ybWF0KTsNCiAgICA+ICsgIFZhbHVlICs9IE5h bWVTaXplT2ZWYXJpYWJsZSAoVmFyaWFibGUsIEF1dGhGb3JtYXQpOw0KICAgID4gKyAgVmFsdWUg Kz0gR0VUX1BBRF9TSVpFIChOYW1lU2l6ZU9mVmFyaWFibGUgKFZhcmlhYmxlLCBBdXRoRm9ybWF0 KSk7DQogICAgPiArDQogICAgPiArICByZXR1cm4gVmFsdWU7DQogICAgPiArfQ0KICAgID4gKw0K ICAgID4gKy8qKg0KICAgID4gKyAgR2V0IHZhcmlhYmxlIGRhdGEgcGF5bG9hZC4NCiAgICA+ICsN CiAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBWYXJpYWJsZSAgICAgUG9pbnRlciB0byB0aGUgVmFy aWFibGUgSGVhZGVyLg0KICAgID4gKyAgQHBhcmFtW2luLG91dF0gIERhdGEgICAgICAgICBQb2lu dGVyIHRvIGJ1ZmZlciB1c2VkIHRvIHN0b3JlIHRoZSB2YXJpYWJsZSBkYXRhLg0KICAgID4gKyAg QHBhcmFtW2luLG91dF0gIERhdGFTaXplICAgICBTaXplIG9mIGJ1ZmZlciBwYXNzZWQgYnkgRGF0 YS4NCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2l6ZSBvZiBkYXRhIGNv cGllZCBpbnRvIERhdGEgYnVmZmVyLg0KICAgID4gKyAgQHBhcmFtW2luXSAgICAgIEF1dGhGbGFn ICAgICBBdXRoLXZhcmlhYmxlIGluZGljYXRvci4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR1cm4g RUZJX1NVQ0NFU1MgICAgICAgICAgICAgRGF0YSB3YXMgZmV0Y2hlZC4NCiAgICA+ICsgIEByZXR1 cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgRGF0YVNpemUgaXMgTlVMTC4NCiAgICA+ICsgIEBy ZXR1cm4gRUZJX0JVRkZFUl9UT09fU01BTEwgICAgRGF0YVNpemUgaXMgc21hbGxlciB0aGFuIHNp emUgb2YgdmFyaWFibGUNCiAgICA+IGRhdGEuDQogICAgPiArDQogICAgPiArKiovDQogICAgPiAr RUZJX1NUQVRVUw0KICAgID4gK0dldFZhcmlhYmxlRGF0YSAoDQogICAgPiArICBJTiAgICAgIFZB UklBQkxFX0hFQURFUiAgKlZhcmlhYmxlLA0KICAgID4gKyAgSU4gIE9VVCBWT0lEICAgICAgICAg ICAgICpEYXRhLA0KICAgID4gKyAgSU4gIE9VVCBVSU5UMzIgICAgICAgICAgICpEYXRhU2l6ZSwN CiAgICA+ICsgIElOICAgICAgQk9PTEVBTiAgICAgICAgICBBdXRoRmxhZw0KICAgID4gKyAgKQ0K ICAgID4gK3sNCiAgICA+ICsgIFVJTlQzMiAgU2l6ZTsNCiAgICA+ICsNCiAgICA+ICsgIGlmIChE YXRhU2l6ZSA9PSBOVUxMKSB7DQogICAgPiArICAgIEFTU0VSVCAoRGF0YVNpemUgIT0gTlVMTCk7 DQogICAgPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQogICAgPiArICB9DQog ICAgPiArDQogICAgPiArICBTaXplID0gKFVJTlQzMilEYXRhU2l6ZU9mVmFyaWFibGUgKFZhcmlh YmxlLCBBdXRoRmxhZyk7DQogICAgPiArICBpZiAoKkRhdGFTaXplIDwgU2l6ZSkgew0KICAgID4g KyAgICAqRGF0YVNpemUgPSBTaXplOw0KICAgID4gKyAgICByZXR1cm4gRUZJX0JVRkZFUl9UT09f U01BTEw7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICBpZiAoRGF0YSA9PSBOVUxMKSB7 DQogICAgPiArICAgIEFTU0VSVCAoRGF0YSAhPSBOVUxMKTsNCiAgICA+ICsgICAgcmV0dXJuIEVG SV9JTlZBTElEX1BBUkFNRVRFUjsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIENvcHlN ZW0gKERhdGEsIEdldFZhcmlhYmxlRGF0YVB0ciAoVmFyaWFibGUsIEF1dGhGbGFnKSwgU2l6ZSk7 DQogICAgPiArICAqRGF0YVNpemUgPSBTaXplOw0KICAgID4gKw0KICAgID4gKyAgcmV0dXJuIEVG SV9TVUNDRVNTOw0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsNCiAgICA+ ICsgIFRoaXMgY29kZSBnZXRzIHRoZSBwb2ludGVyIHRvIHRoZSBuZXh0IHZhcmlhYmxlIGhlYWRl ci4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbVtpbl0gVmFyaWFibGUgICAgIFBvaW50ZXIgdG8g dGhlIFZhcmlhYmxlIEhlYWRlci4NCiAgICA+ICsgIEBwYXJhbVtpbl0gQXV0aEZvcm1hdCAgIFRS VUUgaW5kaWNhdGVzIGF1dGhlbnRpY2F0ZWQgdmFyaWFibGVzIGFyZSB1c2VkLg0KICAgID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UgaW5kaWNhdGVzIGF1dGhlbnRpY2F0ZWQgdmFy aWFibGVzIGFyZSBub3QgdXNlZC4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR1cm4gUG9pbnRlciB0 byBuZXh0IHZhcmlhYmxlIGhlYWRlci4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtWQVJJ QUJMRV9IRUFERVIgKg0KICAgID4gK0dldE5leHRWYXJpYWJsZVB0ciAoDQogICAgPiArICBJTiAg VkFSSUFCTEVfSEVBREVSICAqVmFyaWFibGUsDQogICAgPiArICBJTiAgQk9PTEVBTiAgICAgICAg ICBBdXRoRm9ybWF0DQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgVUlOVE4gIFZhbHVl Ow0KICAgID4gKw0KICAgID4gKyAgVmFsdWUgID0gIChVSU5UTilHZXRWYXJpYWJsZURhdGFQdHIg KFZhcmlhYmxlLCBBdXRoRm9ybWF0KTsNCiAgICA+ICsgIFZhbHVlICs9IERhdGFTaXplT2ZWYXJp YWJsZSAoVmFyaWFibGUsIEF1dGhGb3JtYXQpOw0KICAgID4gKyAgVmFsdWUgKz0gR0VUX1BBRF9T SVpFIChEYXRhU2l6ZU9mVmFyaWFibGUgKFZhcmlhYmxlLCBBdXRoRm9ybWF0KSk7DQogICAgPiAr DQogICAgPiArICAvLw0KICAgID4gKyAgLy8gQmUgY2FyZWZ1bCBhYm91dCBwYWQgc2l6ZSBmb3Ig YWxpZ25tZW50Lg0KICAgID4gKyAgLy8NCiAgICA+ICsgIHJldHVybiAoVkFSSUFCTEVfSEVBREVS ICopSEVBREVSX0FMSUdOIChWYWx1ZSk7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0K ICAgID4gKw0KICAgID4gKyAgR2V0cyB0aGUgcG9pbnRlciB0byB0aGUgZmlyc3QgdmFyaWFibGUg aGVhZGVyIGluIGdpdmVuIHZhcmlhYmxlIHN0b3JlIGFyZWEuDQogICAgPiArDQogICAgPiArICBA cGFyYW1baW5dIFZhclN0b3JlSGVhZGVyICBQb2ludGVyIHRvIHRoZSBWYXJpYWJsZSBTdG9yZSBI ZWFkZXIuDQogICAgPiArDQogICAgPiArICBAcmV0dXJuIFBvaW50ZXIgdG8gdGhlIGZpcnN0IHZh cmlhYmxlIGhlYWRlci4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtWQVJJQUJMRV9IRUFE RVIgKg0KICAgID4gK0dldFN0YXJ0UG9pbnRlciAoDQogICAgPiArICBJTiBWQVJJQUJMRV9TVE9S RV9IRUFERVIgICpWYXJTdG9yZUhlYWRlcg0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsg IC8vDQogICAgPiArICAvLyBUaGUgc3RhcnQgb2YgdmFyaWFibGUgc3RvcmUuDQogICAgPiArICAv Lw0KICAgID4gKyAgcmV0dXJuIChWQVJJQUJMRV9IRUFERVIgKilIRUFERVJfQUxJR04gKFZhclN0 b3JlSGVhZGVyICsgMSk7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKw0K ICAgID4gKyAgR2V0cyB0aGUgcG9pbnRlciB0byB0aGUgZW5kIG9mIHRoZSB2YXJpYWJsZSBzdG9y YWdlIGFyZWEuDQogICAgPiArDQogICAgPiArICBUaGlzIGZ1bmN0aW9uIGdldHMgcG9pbnRlciB0 byB0aGUgZW5kIG9mIHRoZSB2YXJpYWJsZSBzdG9yYWdlDQogICAgPiArICBhcmVhLCBhY2NvcmRp bmcgdG8gdGhlIGlucHV0IHZhcmlhYmxlIHN0b3JlIGhlYWRlci4NCiAgICA+ICsNCiAgICA+ICsg IEBwYXJhbVtpbl0gVmFyU3RvcmVIZWFkZXIgIFBvaW50ZXIgdG8gdGhlIFZhcmlhYmxlIFN0b3Jl IEhlYWRlci4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR1cm4gUG9pbnRlciB0byB0aGUgZW5kIG9m IHRoZSB2YXJpYWJsZSBzdG9yYWdlIGFyZWEuDQogICAgPiArDQogICAgPiArKiovDQogICAgPiAr VkFSSUFCTEVfSEVBREVSICoNCiAgICA+ICtHZXRFbmRQb2ludGVyICgNCiAgICA+ICsgIElOIFZB UklBQkxFX1NUT1JFX0hFQURFUiAgKlZhclN0b3JlSGVhZGVyDQogICAgPiArICApDQogICAgPiAr ew0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIFRoZSBlbmQgb2YgdmFyaWFibGUgc3RvcmUNCiAg ICA+ICsgIC8vDQogICAgPiArICByZXR1cm4gKFZBUklBQkxFX0hFQURFUiAqKUhFQURFUl9BTElH TiAoKFVJTlROKVZhclN0b3JlSGVhZGVyICsNCiAgICA+IFZhclN0b3JlSGVhZGVyLT5TaXplKTsN CiAgICA+ICt9DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBDb21wYXJlIHR3byBFRklf VElNRSBkYXRhLg0KICAgID4gKw0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtW2luXSBGaXJzdFRp bWUgICAgICAgQSBwb2ludGVyIHRvIHRoZSBmaXJzdCBFRklfVElNRSBkYXRhLg0KICAgID4gKyAg QHBhcmFtW2luXSBTZWNvbmRUaW1lICAgICAgQSBwb2ludGVyIHRvIHRoZSBzZWNvbmQgRUZJX1RJ TUUgZGF0YS4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwgIFRSVUUgICAgICAgICAgICAgIFRo ZSBGaXJzdFRpbWUgaXMgbm90IGxhdGVyIHRoYW4gdGhlIFNlY29uZFRpbWUuDQogICAgPiArICBA cmV0dmFsICBGQUxTRSAgICAgICAgICAgICBUaGUgRmlyc3RUaW1lIGlzIGxhdGVyIHRoYW4gdGhl IFNlY29uZFRpbWUuDQogICAgPiArDQogICAgPiArKiovDQogICAgPiArQk9PTEVBTg0KICAgID4g K1ZhcmlhYmxlQ29tcGFyZVRpbWVTdGFtcEludGVybmFsICgNCiAgICA+ICsgIElOIEVGSV9USU1F ICAqRmlyc3RUaW1lLA0KICAgID4gKyAgSU4gRUZJX1RJTUUgICpTZWNvbmRUaW1lDQogICAgPiAr ICApDQogICAgPiArew0KICAgID4gKyAgaWYgKEZpcnN0VGltZS0+WWVhciAhPSBTZWNvbmRUaW1l LT5ZZWFyKSB7DQogICAgPiArICAgIHJldHVybiAoQk9PTEVBTikoRmlyc3RUaW1lLT5ZZWFyIDwg U2Vjb25kVGltZS0+WWVhcik7DQogICAgPiArICB9IGVsc2UgaWYgKEZpcnN0VGltZS0+TW9udGgg IT0gU2Vjb25kVGltZS0+TW9udGgpIHsNCiAgICA+ICsgICAgcmV0dXJuIChCT09MRUFOKShGaXJz dFRpbWUtPk1vbnRoIDwgU2Vjb25kVGltZS0+TW9udGgpOw0KICAgID4gKyAgfSBlbHNlIGlmIChG aXJzdFRpbWUtPkRheSAhPSBTZWNvbmRUaW1lLT5EYXkpIHsNCiAgICA+ICsgICAgcmV0dXJuIChC T09MRUFOKShGaXJzdFRpbWUtPkRheSA8IFNlY29uZFRpbWUtPkRheSk7DQogICAgPiArICB9IGVs c2UgaWYgKEZpcnN0VGltZS0+SG91ciAhPSBTZWNvbmRUaW1lLT5Ib3VyKSB7DQogICAgPiArICAg IHJldHVybiAoQk9PTEVBTikoRmlyc3RUaW1lLT5Ib3VyIDwgU2Vjb25kVGltZS0+SG91cik7DQog ICAgPiArICB9IGVsc2UgaWYgKEZpcnN0VGltZS0+TWludXRlICE9IFNlY29uZFRpbWUtPk1pbnV0 ZSkgew0KICAgID4gKyAgICByZXR1cm4gKEJPT0xFQU4pKEZpcnN0VGltZS0+TWludXRlIDwgU2Vj b25kVGltZS0+TWludXRlKTsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIHJldHVybiAo Qk9PTEVBTikoRmlyc3RUaW1lLT5TZWNvbmQgPD0gU2Vjb25kVGltZS0+U2Vjb25kKTsNCiAgICA+ ICt9DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBGaW5kIHRoZSB2YXJpYWJsZSBpbiB0 aGUgc3BlY2lmaWVkIHZhcmlhYmxlIHN0b3JlLg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtW2lu XSAgICAgICBWYXJpYWJsZU5hbWUgICAgICAgIE5hbWUgb2YgdGhlIHZhcmlhYmxlIHRvIGJlIGZv dW5kDQogICAgPiArICBAcGFyYW1baW5dICAgICAgIFZlbmRvckd1aWQgICAgICAgICAgVmVuZG9y IEdVSUQgdG8gYmUgZm91bmQuDQogICAgPiArICBAcGFyYW1baW5dICAgICAgIElnbm9yZVJ0Q2hl Y2sgICAgICAgSWdub3JlIEVGSV9WQVJJQUJMRV9SVU5USU1FX0FDQ0VTUw0KICAgID4gYXR0cmli dXRlDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sg YXQgcnVudGltZSB3aGVuIHNlYXJjaGluZyB2YXJpYWJsZS4NCiAgICA+ICsgIEBwYXJhbVtpbiwg b3V0XSAgUHRyVHJhY2sgICAgICAgICAgICBWYXJpYWJsZSBUcmFjayBQb2ludGVyIHN0cnVjdHVy ZSB0aGF0IGNvbnRhaW5zDQogICAgPiBWYXJpYWJsZSBJbmZvcm1hdGlvbi4NCiAgICA+ICsgIEBw YXJhbVtpbl0gICAgICAgQXV0aEZvcm1hdCAgICAgICAgICBUUlVFIGluZGljYXRlcyBhdXRoZW50 aWNhdGVkIHZhcmlhYmxlcyBhcmUNCiAgICA+IHVzZWQuDQogICAgPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UgaW5kaWNhdGVzIGF1dGhlbnRpY2F0ZWQgdmFy aWFibGVzIGFyZSBub3QgdXNlZC4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwgICAgICAgICAg RUZJX1NVQ0NFU1MgICAgICAgICBWYXJpYWJsZSBmb3VuZCBzdWNjZXNzZnVsbHkNCiAgICA+ICsg IEByZXR2YWwgICAgICAgICAgRUZJX05PVF9GT1VORCAgICAgICBWYXJpYWJsZSBub3QgZm91bmQN CiAgICA+ICsqKi8NCiAgICA+ICtFRklfU1RBVFVTDQogICAgPiArRmluZFZhcmlhYmxlRXggKA0K ICAgID4gKyAgSU4gICAgIENIQVIxNiAgICAgICAgICAgICAgICAgICpWYXJpYWJsZU5hbWUsDQog ICAgPiArICBJTiAgICAgRUZJX0dVSUQgICAgICAgICAgICAgICAgKlZlbmRvckd1aWQsDQogICAg PiArICBJTiAgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgSWdub3JlUnRDaGVjaywNCiAgICA+ ICsgIElOIE9VVCBWQVJJQUJMRV9QT0lOVEVSX1RSQUNLICAqUHRyVHJhY2ssDQogICAgPiArICBJ TiAgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgQXV0aEZvcm1hdA0KICAgID4gKyAgKQ0KICAg ID4gK3sNCiAgICA+ICsgIFZBUklBQkxFX0hFQURFUiAgKkluRGVsZXRlZFZhcmlhYmxlOw0KICAg ID4gKyAgVk9JRCAgICAgICAgICAgICAqUG9pbnQ7DQogICAgPiArDQogICAgPiArICBQdHJUcmFj ay0+SW5EZWxldGVkVHJhbnNpdGlvblB0ciA9IE5VTEw7DQogICAgPiArDQogICAgPiArICAvLw0K ICAgID4gKyAgLy8gRmluZCB0aGUgdmFyaWFibGUgYnkgd2FsayB0aHJvdWdoIEhPQiwgdm9sYXRp bGUgYW5kIG5vbi12b2xhdGlsZSB2YXJpYWJsZQ0KICAgID4gc3RvcmUuDQogICAgPiArICAvLw0K ICAgID4gKyAgSW5EZWxldGVkVmFyaWFibGUgPSBOVUxMOw0KICAgID4gKw0KICAgID4gKyAgZm9y ICggUHRyVHJhY2stPkN1cnJQdHIgPSBQdHJUcmFjay0+U3RhcnRQdHINCiAgICA+ICsgICAgICAg IDsgSXNWYWxpZFZhcmlhYmxlSGVhZGVyIChQdHJUcmFjay0+Q3VyclB0ciwgUHRyVHJhY2stPkVu ZFB0ciwgQXV0aEZvcm1hdCkNCiAgICA+ICsgICAgICAgIDsgUHRyVHJhY2stPkN1cnJQdHIgPSBH ZXROZXh0VmFyaWFibGVQdHIgKFB0clRyYWNrLT5DdXJyUHRyLCBBdXRoRm9ybWF0KQ0KICAgID4g KyAgICAgICAgKQ0KICAgID4gKyAgew0KICAgID4gKyAgICBpZiAoKFB0clRyYWNrLT5DdXJyUHRy LT5TdGF0ZSA9PSBWQVJfQURERUQpIHx8DQogICAgPiArICAgICAgICAoUHRyVHJhY2stPkN1cnJQ dHItPlN0YXRlID09IChWQVJfSU5fREVMRVRFRF9UUkFOU0lUSU9OICYNCiAgICA+IFZBUl9BRERF RCkpDQogICAgPiArICAgICAgICApDQogICAgPiArICAgIHsNCiAgICA+ICsgICAgICBpZiAoSWdu b3JlUnRDaGVjayB8fCAhQXRSdW50aW1lICgpIHx8ICgoUHRyVHJhY2stPkN1cnJQdHItPkF0dHJp YnV0ZXMgJg0KICAgID4gRUZJX1ZBUklBQkxFX1JVTlRJTUVfQUNDRVNTKSAhPSAwKSkgew0KICAg ID4gKyAgICAgICAgaWYgKFZhcmlhYmxlTmFtZVswXSA9PSAwKSB7DQogICAgPiArICAgICAgICAg IGlmIChQdHJUcmFjay0+Q3VyclB0ci0+U3RhdGUgPT0gKFZBUl9JTl9ERUxFVEVEX1RSQU5TSVRJ T04gJg0KICAgID4gVkFSX0FEREVEKSkgew0KICAgID4gKyAgICAgICAgICAgIEluRGVsZXRlZFZh cmlhYmxlID0gUHRyVHJhY2stPkN1cnJQdHI7DQogICAgPiArICAgICAgICAgIH0gZWxzZSB7DQog ICAgPiArICAgICAgICAgICAgUHRyVHJhY2stPkluRGVsZXRlZFRyYW5zaXRpb25QdHIgPSBJbkRl bGV0ZWRWYXJpYWJsZTsNCiAgICA+ICsgICAgICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQog ICAgPiArICAgICAgICAgIH0NCiAgICA+ICsgICAgICAgIH0gZWxzZSB7DQogICAgPiArICAgICAg ICAgIGlmIChDb21wYXJlR3VpZCAoVmVuZG9yR3VpZCwgR2V0VmVuZG9yR3VpZFB0ciAoUHRyVHJh Y2stPkN1cnJQdHIsDQogICAgPiBBdXRoRm9ybWF0KSkpIHsNCiAgICA+ICsgICAgICAgICAgICBQ b2ludCA9IChWT0lEICopR2V0VmFyaWFibGVOYW1lUHRyIChQdHJUcmFjay0+Q3VyclB0ciwgQXV0 aEZvcm1hdCk7DQogICAgPiArDQogICAgPiArICAgICAgICAgICAgQVNTRVJUIChOYW1lU2l6ZU9m VmFyaWFibGUgKFB0clRyYWNrLT5DdXJyUHRyLCBBdXRoRm9ybWF0KSAhPSAwKTsNCiAgICA+ICsg ICAgICAgICAgICBpZiAoQ29tcGFyZU1lbSAoVmFyaWFibGVOYW1lLCBQb2ludCwgTmFtZVNpemVP ZlZhcmlhYmxlIChQdHJUcmFjay0NCiAgICA+ID5DdXJyUHRyLCBBdXRoRm9ybWF0KSkgPT0gMCkg ew0KICAgID4gKyAgICAgICAgICAgICAgaWYgKFB0clRyYWNrLT5DdXJyUHRyLT5TdGF0ZSA9PSAo VkFSX0lOX0RFTEVURURfVFJBTlNJVElPTiAmDQogICAgPiBWQVJfQURERUQpKSB7DQogICAgPiAr ICAgICAgICAgICAgICAgIEluRGVsZXRlZFZhcmlhYmxlID0gUHRyVHJhY2stPkN1cnJQdHI7DQog ICAgPiArICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgID4gKyAgICAgICAgICAgICAgICBQdHJU cmFjay0+SW5EZWxldGVkVHJhbnNpdGlvblB0ciA9IEluRGVsZXRlZFZhcmlhYmxlOw0KICAgID4g KyAgICAgICAgICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQogICAgPiArICAgICAgICAgICAg ICB9DQogICAgPiArICAgICAgICAgICAgfQ0KICAgID4gKyAgICAgICAgICB9DQogICAgPiArICAg ICAgICB9DQogICAgPiArICAgICAgfQ0KICAgID4gKyAgICB9DQogICAgPiArICB9DQogICAgPiAr DQogICAgPiArICBQdHJUcmFjay0+Q3VyclB0ciA9IEluRGVsZXRlZFZhcmlhYmxlOw0KICAgID4g KyAgcmV0dXJuIChQdHJUcmFjay0+Q3VyclB0ciAgPT0gTlVMTCkgPyBFRklfTk9UX0ZPVU5EIDog RUZJX1NVQ0NFU1M7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgVGhp cyBjb2RlIGZpbmRzIHRoZSBuZXh0IGF2YWlsYWJsZSB2YXJpYWJsZS4NCiAgICA+ICsNCiAgICA+ ICsgIENhdXRpb246IFRoaXMgZnVuY3Rpb24gbWF5IHJlY2VpdmUgdW50cnVzdGVkIGlucHV0Lg0K ICAgID4gKyAgVGhpcyBmdW5jdGlvbiBtYXkgYmUgaW52b2tlZCBpbiBTTU0gbW9kZS4gVGhpcyBm dW5jdGlvbiB3aWxsIGRvIGJhc2ljDQogICAgPiB2YWxpZGF0aW9uLCBiZWZvcmUgcGFyc2UgdGhl IGRhdGEuDQogICAgPiArDQogICAgPiArICBAcGFyYW1baW5dICBWYXJpYWJsZU5hbWUgICAgICBQ b2ludGVyIHRvIHZhcmlhYmxlIG5hbWUuDQogICAgPiArICBAcGFyYW1baW5dICBWZW5kb3JHdWlk ICAgICAgICBWYXJpYWJsZSBWZW5kb3IgR3VpZC4NCiAgICA+ICsgIEBwYXJhbVtpbl0gIFZhcmlh YmxlU3RvcmVMaXN0IEEgbGlzdCBvZiB2YXJpYWJsZSBzdG9yZXMgdGhhdCBzaG91bGQgYmUgdXNl ZCB0bw0KICAgID4gZ2V0IHRoZSBuZXh0IHZhcmlhYmxlLg0KICAgID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgaXMgdGhlIG1h eCB2YWx1ZSBvZg0KICAgID4gVkFSSUFCTEVfU1RPUkVfVFlQRS4NCiAgICA+ICsgIEBwYXJhbVtv dXRdIFZhcmlhYmxlUHRyICAgICAgIFBvaW50ZXIgdG8gdmFyaWFibGUgaGVhZGVyIGFkZHJlc3Mu DQogICAgPiArICBAcGFyYW1baW5dICBBdXRoRm9ybWF0ICAgICAgICBUUlVFIGluZGljYXRlcyBh dXRoZW50aWNhdGVkIHZhcmlhYmxlcyBhcmUgdXNlZC4NCiAgICA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZBTFNFIGluZGljYXRlcyBhdXRoZW50aWNhdGVkIHZhcmlhYmxlcyBh cmUgbm90IHVzZWQuDQogICAgPiArDQogICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgICBUaGUgZnVuY3Rpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4NCiAgICA+ICsgIEByZXR2 YWwgRUZJX05PVF9GT1VORCAgICAgICAgIFRoZSBuZXh0IHZhcmlhYmxlIHdhcyBub3QgZm91bmQu DQogICAgPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBJZiBWYXJpYWJsZU5hbWUg aXMgbm90IGFuIGVtcHR5IHN0cmluZywNCiAgICA+IHdoaWxlIFZlbmRvckd1aWQgaXMgTlVMTC4N CiAgICA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIFRoZSBpbnB1dCB2YWx1ZXMg b2YgVmFyaWFibGVOYW1lIGFuZA0KICAgID4gVmVuZG9yR3VpZCBhcmUgbm90IGEgbmFtZSBhbmQN CiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdVSUQgb2YgYW4gZXhpc3Rp bmcgdmFyaWFibGUuDQogICAgPiArDQogICAgPiArKiovDQogICAgPiArRUZJX1NUQVRVUw0KICAg ID4gK0VGSUFQSQ0KICAgID4gK1ZhcmlhYmxlU2VydmljZUdldE5leHRWYXJpYWJsZUludGVybmFs ICgNCiAgICA+ICsgIElOICBDSEFSMTYgICAgICAgICAgICAgICAgICpWYXJpYWJsZU5hbWUsDQog ICAgPiArICBJTiAgRUZJX0dVSUQgICAgICAgICAgICAgICAqVmVuZG9yR3VpZCwNCiAgICA+ICsg IElOICBWQVJJQUJMRV9TVE9SRV9IRUFERVIgICoqVmFyaWFibGVTdG9yZUxpc3QsDQogICAgPiAr ICBPVVQgVkFSSUFCTEVfSEVBREVSICAgICAgICAqKlZhcmlhYmxlUHRyLA0KICAgID4gKyAgSU4g IEJPT0xFQU4gICAgICAgICAgICAgICAgQXV0aEZvcm1hdA0KICAgID4gKyAgKQ0KICAgID4gK3sN CiAgICA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgIFN0YXR1czsNCiAgICA+ICsgIFZBUklB QkxFX1NUT1JFX1RZUEUgICAgIFN0b3JlVHlwZTsNCiAgICA+ICsgIFZBUklBQkxFX1BPSU5URVJf VFJBQ0sgIFZhcmlhYmxlOw0KICAgID4gKyAgVkFSSUFCTEVfUE9JTlRFUl9UUkFDSyAgVmFyaWFi bGVJbkhvYjsNCiAgICA+ICsgIFZBUklBQkxFX1BPSU5URVJfVFJBQ0sgIFZhcmlhYmxlUHRyVHJh Y2s7DQogICAgPiArDQogICAgPiArICBTdGF0dXMgPSBFRklfTk9UX0ZPVU5EOw0KICAgID4gKw0K ICAgID4gKyAgaWYgKFZhcmlhYmxlU3RvcmVMaXN0ID09IE5VTEwpIHsNCiAgICA+ICsgICAgcmV0 dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsg IFplcm9NZW0gKCZWYXJpYWJsZSwgc2l6ZW9mIChWYXJpYWJsZSkpOw0KICAgID4gKw0KICAgID4g KyAgLy8gQ2hlY2sgaWYgdGhlIHZhcmlhYmxlIGV4aXN0cyBpbiB0aGUgZ2l2ZW4gdmFyaWFibGUg c3RvcmUgbGlzdA0KICAgID4gKyAgZm9yIChTdG9yZVR5cGUgPSAoVkFSSUFCTEVfU1RPUkVfVFlQ RSkwOyBTdG9yZVR5cGUgPA0KICAgID4gVmFyaWFibGVTdG9yZVR5cGVNYXg7IFN0b3JlVHlwZSsr KSB7DQogICAgPiArICAgIGlmIChWYXJpYWJsZVN0b3JlTGlzdFtTdG9yZVR5cGVdID09IE5VTEwp IHsNCiAgICA+ICsgICAgICBjb250aW51ZTsNCiAgICA+ICsgICAgfQ0KICAgID4gKw0KICAgID4g KyAgICBWYXJpYWJsZS5TdGFydFB0ciA9IEdldFN0YXJ0UG9pbnRlciAoVmFyaWFibGVTdG9yZUxp c3RbU3RvcmVUeXBlXSk7DQogICAgPiArICAgIFZhcmlhYmxlLkVuZFB0ciAgID0gR2V0RW5kUG9p bnRlciAoVmFyaWFibGVTdG9yZUxpc3RbU3RvcmVUeXBlXSk7DQogICAgPiArICAgIFZhcmlhYmxl LlZvbGF0aWxlID0gKEJPT0xFQU4pKFN0b3JlVHlwZSA9PSBWYXJpYWJsZVN0b3JlVHlwZVZvbGF0 aWxlKTsNCiAgICA+ICsNCiAgICA+ICsgICAgU3RhdHVzID0gRmluZFZhcmlhYmxlRXggKFZhcmlh YmxlTmFtZSwgVmVuZG9yR3VpZCwgRkFMU0UsICZWYXJpYWJsZSwNCiAgICA+IEF1dGhGb3JtYXQp Ow0KICAgID4gKyAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgID4gKyAgICAgIGJy ZWFrOw0KICAgID4gKyAgICB9DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICBpZiAoKFZh cmlhYmxlLkN1cnJQdHIgPT0gTlVMTCkgfHwgRUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAgPiAr ICAgIC8vDQogICAgPiArICAgIC8vIEZvciBWYXJpYWJsZU5hbWUgaXMgYW4gZW1wdHkgc3RyaW5n LCBGaW5kVmFyaWFibGVFeCgpIHdpbGwgdHJ5IHRvIGZpbmQgYW5kDQogICAgPiByZXR1cm4NCiAg ICA+ICsgICAgLy8gdGhlIGZpcnN0IHF1YWxpZmllZCB2YXJpYWJsZSwgYW5kIGlmIEZpbmRWYXJp YWJsZUV4KCkgcmV0dXJucyBlcnJvcg0KICAgID4gKEVGSV9OT1RfRk9VTkQpDQogICAgPiArICAg IC8vIGFzIG5vIGFueSB2YXJpYWJsZSBpcyBmb3VuZCwgc3RpbGwgZ28gdG8gcmV0dXJuIHRoZSBl cnJvciAoRUZJX05PVF9GT1VORCkuDQogICAgPiArICAgIC8vDQogICAgPiArICAgIGlmIChWYXJp YWJsZU5hbWVbMF0gIT0gMCkgew0KICAgID4gKyAgICAgIC8vDQogICAgPiArICAgICAgLy8gRm9y IFZhcmlhYmxlTmFtZSBpcyBub3QgYW4gZW1wdHkgc3RyaW5nLCBhbmQgRmluZFZhcmlhYmxlRXgo KSByZXR1cm5zDQogICAgPiBlcnJvciBhcw0KICAgID4gKyAgICAgIC8vIFZhcmlhYmxlTmFtZSBh bmQgVmVuZG9yR3VpZCBhcmUgbm90IGEgbmFtZSBhbmQgR1VJRCBvZiBhbiBleGlzdGluZw0KICAg ID4gdmFyaWFibGUsDQogICAgPiArICAgICAgLy8gdGhlcmUgaXMgbm8gd2F5IHRvIGdldCBuZXh0 IHZhcmlhYmxlLCBmb2xsb3cgc3BlYyB0byByZXR1cm4NCiAgICA+IEVGSV9JTlZBTElEX1BBUkFN RVRFUi4NCiAgICA+ICsgICAgICAvLw0KICAgID4gKyAgICAgIFN0YXR1cyA9IEVGSV9JTlZBTElE X1BBUkFNRVRFUjsNCiAgICA+ICsgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICBnb3RvIERvbmU7 DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICBpZiAoVmFyaWFibGVOYW1lWzBdICE9IDAp IHsNCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgLy8gSWYgdmFyaWFibGUgbmFtZSBpcyBub3Qg ZW1wdHksIGdldCBuZXh0IHZhcmlhYmxlLg0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICBWYXJp YWJsZS5DdXJyUHRyID0gR2V0TmV4dFZhcmlhYmxlUHRyIChWYXJpYWJsZS5DdXJyUHRyLCBBdXRo Rm9ybWF0KTsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIHdoaWxlIChUUlVFKSB7DQog ICAgPiArICAgIC8vDQogICAgPiArICAgIC8vIFN3aXRjaCB0byB0aGUgbmV4dCB2YXJpYWJsZSBz dG9yZSBpZiBuZWVkZWQNCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgd2hpbGUgKCFJc1ZhbGlk VmFyaWFibGVIZWFkZXIgKFZhcmlhYmxlLkN1cnJQdHIsIFZhcmlhYmxlLkVuZFB0ciwNCiAgICA+ IEF1dGhGb3JtYXQpKSB7DQogICAgPiArICAgICAgLy8NCiAgICA+ICsgICAgICAvLyBGaW5kIGN1 cnJlbnQgc3RvcmFnZSBpbmRleA0KICAgID4gKyAgICAgIC8vDQogICAgPiArICAgICAgZm9yIChT dG9yZVR5cGUgPSAoVkFSSUFCTEVfU1RPUkVfVFlQRSkwOyBTdG9yZVR5cGUgPA0KICAgID4gVmFy aWFibGVTdG9yZVR5cGVNYXg7IFN0b3JlVHlwZSsrKSB7DQogICAgPiArICAgICAgICBpZiAoKFZh cmlhYmxlU3RvcmVMaXN0W1N0b3JlVHlwZV0gIT0gTlVMTCkgJiYgKFZhcmlhYmxlLlN0YXJ0UHRy ID09DQogICAgPiBHZXRTdGFydFBvaW50ZXIgKFZhcmlhYmxlU3RvcmVMaXN0W1N0b3JlVHlwZV0p KSkgew0KICAgID4gKyAgICAgICAgICBicmVhazsNCiAgICA+ICsgICAgICAgIH0NCiAgICA+ICsg ICAgICB9DQogICAgPiArDQogICAgPiArICAgICAgQVNTRVJUIChTdG9yZVR5cGUgPCBWYXJpYWJs ZVN0b3JlVHlwZU1heCk7DQogICAgPiArICAgICAgLy8NCiAgICA+ICsgICAgICAvLyBTd2l0Y2gg dG8gbmV4dCBzdG9yYWdlDQogICAgPiArICAgICAgLy8NCiAgICA+ICsgICAgICBmb3IgKFN0b3Jl VHlwZSsrOyBTdG9yZVR5cGUgPCBWYXJpYWJsZVN0b3JlVHlwZU1heDsgU3RvcmVUeXBlKyspIHsN CiAgICA+ICsgICAgICAgIGlmIChWYXJpYWJsZVN0b3JlTGlzdFtTdG9yZVR5cGVdICE9IE5VTEwp IHsNCiAgICA+ICsgICAgICAgICAgYnJlYWs7DQogICAgPiArICAgICAgICB9DQogICAgPiArICAg ICAgfQ0KICAgID4gKw0KICAgID4gKyAgICAgIC8vDQogICAgPiArICAgICAgLy8gQ2FwdHVyZSB0 aGUgY2FzZSB0aGF0DQogICAgPiArICAgICAgLy8gMS4gY3VycmVudCBzdG9yYWdlIGlzIHRoZSBs YXN0IG9uZSwgb3INCiAgICA+ICsgICAgICAvLyAyLiBubyBmdXJ0aGVyIHN0b3JhZ2UNCiAgICA+ ICsgICAgICAvLw0KICAgID4gKyAgICAgIGlmIChTdG9yZVR5cGUgPT0gVmFyaWFibGVTdG9yZVR5 cGVNYXgpIHsNCiAgICA+ICsgICAgICAgIFN0YXR1cyA9IEVGSV9OT1RfRk9VTkQ7DQogICAgPiAr ICAgICAgICBnb3RvIERvbmU7DQogICAgPiArICAgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICAg IFZhcmlhYmxlLlN0YXJ0UHRyID0gR2V0U3RhcnRQb2ludGVyIChWYXJpYWJsZVN0b3JlTGlzdFtT dG9yZVR5cGVdKTsNCiAgICA+ICsgICAgICBWYXJpYWJsZS5FbmRQdHIgICA9IEdldEVuZFBvaW50 ZXIgKFZhcmlhYmxlU3RvcmVMaXN0W1N0b3JlVHlwZV0pOw0KICAgID4gKyAgICAgIFZhcmlhYmxl LkN1cnJQdHIgID0gVmFyaWFibGUuU3RhcnRQdHI7DQogICAgPiArICAgIH0NCiAgICA+ICsNCiAg ICA+ICsgICAgLy8NCiAgICA+ICsgICAgLy8gVmFyaWFibGUgaXMgZm91bmQNCiAgICA+ICsgICAg Ly8NCiAgICA+ICsgICAgaWYgKChWYXJpYWJsZS5DdXJyUHRyLT5TdGF0ZSA9PSBWQVJfQURERUQp IHx8IChWYXJpYWJsZS5DdXJyUHRyLT5TdGF0ZSA9PQ0KICAgID4gKFZBUl9JTl9ERUxFVEVEX1RS QU5TSVRJT04gJiBWQVJfQURERUQpKSkgew0KICAgID4gKyAgICAgIGlmICghQXRSdW50aW1lICgp IHx8ICgoVmFyaWFibGUuQ3VyclB0ci0+QXR0cmlidXRlcyAmDQogICAgPiBFRklfVkFSSUFCTEVf UlVOVElNRV9BQ0NFU1MpICE9IDApKSB7DQogICAgPiArICAgICAgICBpZiAoVmFyaWFibGUuQ3Vy clB0ci0+U3RhdGUgPT0gKFZBUl9JTl9ERUxFVEVEX1RSQU5TSVRJT04gJg0KICAgID4gVkFSX0FE REVEKSkgew0KICAgID4gKyAgICAgICAgICAvLw0KICAgID4gKyAgICAgICAgICAvLyBJZiBpdCBp cyBhIElOX0RFTEVURURfVFJBTlNJVElPTiB2YXJpYWJsZSwNCiAgICA+ICsgICAgICAgICAgLy8g YW5kIHRoZXJlIGlzIGFsc28gYSBzYW1lIEFEREVEIG9uZSBhdCB0aGUgc2FtZSB0aW1lLA0KICAg ID4gKyAgICAgICAgICAvLyBkb24ndCByZXR1cm4gaXQuDQogICAgPiArICAgICAgICAgIC8vDQog ICAgPiArICAgICAgICAgIFZhcmlhYmxlUHRyVHJhY2suU3RhcnRQdHIgPSBWYXJpYWJsZS5TdGFy dFB0cjsNCiAgICA+ICsgICAgICAgICAgVmFyaWFibGVQdHJUcmFjay5FbmRQdHIgICA9IFZhcmlh YmxlLkVuZFB0cjsNCiAgICA+ICsgICAgICAgICAgU3RhdHVzICAgICAgICAgICAgICAgICAgICA9 IEZpbmRWYXJpYWJsZUV4ICgNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgR2V0VmFyaWFibGVOYW1lUHRyIChWYXJpYWJsZS5DdXJyUHRyLCBBdXRoRm9ybWF0 KSwNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0VmVu ZG9yR3VpZFB0ciAoVmFyaWFibGUuQ3VyclB0ciwgQXV0aEZvcm1hdCksDQogICAgPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLA0KICAgID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmVmFyaWFibGVQdHJUcmFjaywNCiAgICA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXV0aEZvcm1hdA0KICAg ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgID4gKyAg ICAgICAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSAmJiAoVmFyaWFibGVQdHJUcmFjay5DdXJy UHRyLT5TdGF0ZSA9PQ0KICAgID4gVkFSX0FEREVEKSkgew0KICAgID4gKyAgICAgICAgICAgIFZh cmlhYmxlLkN1cnJQdHIgPSBHZXROZXh0VmFyaWFibGVQdHIgKFZhcmlhYmxlLkN1cnJQdHIsIEF1 dGhGb3JtYXQpOw0KICAgID4gKyAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgID4gKyAgICAgICAg ICB9DQogICAgPiArICAgICAgICB9DQogICAgPiArDQogICAgPiArICAgICAgICAvLw0KICAgID4g KyAgICAgICAgLy8gRG9uJ3QgcmV0dXJuIE5WIHZhcmlhYmxlIHdoZW4gSE9CIG92ZXJyaWRlcyBp dA0KICAgID4gKyAgICAgICAgLy8NCiAgICA+ICsgICAgICAgIGlmICgoVmFyaWFibGVTdG9yZUxp c3RbVmFyaWFibGVTdG9yZVR5cGVIb2JdICE9IE5VTEwpICYmDQogICAgPiAoVmFyaWFibGVTdG9y ZUxpc3RbVmFyaWFibGVTdG9yZVR5cGVOdl0gIT0gTlVMTCkgJiYNCiAgICA+ICsgICAgICAgICAg ICAoVmFyaWFibGUuU3RhcnRQdHIgPT0gR2V0U3RhcnRQb2ludGVyDQogICAgPiAoVmFyaWFibGVT dG9yZUxpc3RbVmFyaWFibGVTdG9yZVR5cGVOdl0pKQ0KICAgID4gKyAgICAgICAgICAgICkNCiAg ICA+ICsgICAgICAgIHsNCiAgICA+ICsgICAgICAgICAgVmFyaWFibGVJbkhvYi5TdGFydFB0ciA9 IEdldFN0YXJ0UG9pbnRlcg0KICAgID4gKFZhcmlhYmxlU3RvcmVMaXN0W1ZhcmlhYmxlU3RvcmVU eXBlSG9iXSk7DQogICAgPiArICAgICAgICAgIFZhcmlhYmxlSW5Ib2IuRW5kUHRyICAgPSBHZXRF bmRQb2ludGVyDQogICAgPiAoVmFyaWFibGVTdG9yZUxpc3RbVmFyaWFibGVTdG9yZVR5cGVIb2Jd KTsNCiAgICA+ICsgICAgICAgICAgU3RhdHVzICAgICAgICAgICAgICAgICA9IEZpbmRWYXJpYWJs ZUV4ICgNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0VmFy aWFibGVOYW1lUHRyIChWYXJpYWJsZS5DdXJyUHRyLCBBdXRoRm9ybWF0KSwNCiAgICA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0VmVuZG9yR3VpZFB0ciAoVmFyaWFi bGUuQ3VyclB0ciwgQXV0aEZvcm1hdCksDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZBTFNFLA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmVmFyaWFibGVJbkhvYiwNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQXV0aEZvcm1hdA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOw0KICAgID4gKyAgICAgICAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KICAgID4gKyAgICAgICAgICAgIFZhcmlhYmxlLkN1cnJQdHIgPSBHZXROZXh0VmFyaWFibGVQ dHIgKFZhcmlhYmxlLkN1cnJQdHIsIEF1dGhGb3JtYXQpOw0KICAgID4gKyAgICAgICAgICAgIGNv bnRpbnVlOw0KICAgID4gKyAgICAgICAgICB9DQogICAgPiArICAgICAgICB9DQogICAgPiArDQog ICAgPiArICAgICAgICAqVmFyaWFibGVQdHIgPSBWYXJpYWJsZS5DdXJyUHRyOw0KICAgID4gKyAg ICAgICAgU3RhdHVzICAgICAgID0gRUZJX1NVQ0NFU1M7DQogICAgPiArICAgICAgICBnb3RvIERv bmU7DQogICAgPiArICAgICAgfQ0KICAgID4gKyAgICB9DQogICAgPiArDQogICAgPiArICAgIFZh cmlhYmxlLkN1cnJQdHIgPSBHZXROZXh0VmFyaWFibGVQdHIgKFZhcmlhYmxlLkN1cnJQdHIsIEF1 dGhGb3JtYXQpOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gK0RvbmU6DQogICAgPiArICBy ZXR1cm4gU3RhdHVzOw0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIFJv dXRpbmUgdXNlZCB0byB0cmFjayBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbiBhYm91dCB2YXJpYWJs ZSB1c2FnZS4NCiAgICA+ICsgIFRoZSBkYXRhIGlzIHN0b3JlZCBpbiB0aGUgRUZJIHN5c3RlbSB0 YWJsZSBzbyBpdCBjYW4gYmUgYWNjZXNzZWQgbGF0ZXIuDQogICAgPiArICBWYXJpYWJsZUluZm8u ZWZpIGNhbiBkdW1wIG91dCB0aGUgdGFibGUuIE9ubHkgQm9vdCBTZXJ2aWNlcyB2YXJpYWJsZQ0K ICAgID4gKyAgYWNjZXNzZXMgYXJlIHRyYWNrZWQgYnkgdGhpcyBjb2RlLiBUaGUgUGNkVmFyaWFi bGVDb2xsZWN0U3RhdGlzdGljcw0KICAgID4gKyAgYnVpbGQgZmxhZyBjb250cm9scyBpZiB0aGlz IGZlYXR1cmUgaXMgZW5hYmxlZC4NCiAgICA+ICsNCiAgICA+ICsgIEEgcmVhZCB0aGF0IGhpdHMg aW4gdGhlIGNhY2hlIHdpbGwgaGF2ZSBSZWFkIGFuZCBDYWNoZSB0cnVlIGZvcg0KICAgID4gKyAg dGhlIHRyYW5zYWN0aW9uLiBEYXRhIGlzIGFsbG9jYXRlZCBieSB0aGlzIHJvdXRpbmUsIGJ1dCBu ZXZlcg0KICAgID4gKyAgZnJlZWQuDQogICAgPiArDQogICAgPiArICBAcGFyYW1baW5dICAgICAg VmFyaWFibGVOYW1lICAgTmFtZSBvZiB0aGUgVmFyaWFibGUgdG8gdHJhY2suDQogICAgPiArICBA cGFyYW1baW5dICAgICAgVmVuZG9yR3VpZCAgICAgR3VpZCBvZiB0aGUgVmFyaWFibGUgdG8gdHJh Y2suDQogICAgPiArICBAcGFyYW1baW5dICAgICAgVm9sYXRpbGUgICAgICAgVFJVRSBpZiB2b2xh dGlsZSBGQUxTRSBpZiBub24tdm9sYXRpbGUuDQogICAgPiArICBAcGFyYW1baW5dICAgICAgUmVh ZCAgICAgICAgICAgVFJVRSBpZiBHZXRWYXJpYWJsZSgpIHdhcyBjYWxsZWQuDQogICAgPiArICBA cGFyYW1baW5dICAgICAgV3JpdGUgICAgICAgICAgVFJVRSBpZiBTZXRWYXJpYWJsZSgpIHdhcyBj YWxsZWQuDQogICAgPiArICBAcGFyYW1baW5dICAgICAgRGVsZXRlICAgICAgICAgVFJVRSBpZiBk ZWxldGVkIHZpYSBTZXRWYXJpYWJsZSgpLg0KICAgID4gKyAgQHBhcmFtW2luXSAgICAgIENhY2hl ICAgICAgICAgIFRSVUUgZm9yIGEgY2FjaGUgaGl0Lg0KICAgID4gKyAgQHBhcmFtW2luLG91dF0g IFZhcmlhYmxlSW5mbyAgIFBvaW50ZXIgdG8gYSBwb2ludGVyIG9mIFZBUklBQkxFX0lORk9fRU5U UlkNCiAgICA+IHN0cnVjdHVyZXMuDQogICAgPiArDQogICAgPiArKiovDQogICAgPiArVk9JRA0K ICAgID4gK1VwZGF0ZVZhcmlhYmxlSW5mbyAoDQogICAgPiArICBJTiAgQ0hBUjE2ICAgICAgICAg ICAgICAgICAgKlZhcmlhYmxlTmFtZSwNCiAgICA+ICsgIElOICBFRklfR1VJRCAgICAgICAgICAg ICAgICAqVmVuZG9yR3VpZCwNCiAgICA+ICsgIElOICBCT09MRUFOICAgICAgICAgICAgICAgICBW b2xhdGlsZSwNCiAgICA+ICsgIElOICBCT09MRUFOICAgICAgICAgICAgICAgICBSZWFkLA0KICAg ID4gKyAgSU4gIEJPT0xFQU4gICAgICAgICAgICAgICAgIFdyaXRlLA0KICAgID4gKyAgSU4gIEJP T0xFQU4gICAgICAgICAgICAgICAgIERlbGV0ZSwNCiAgICA+ICsgIElOICBCT09MRUFOICAgICAg ICAgICAgICAgICBDYWNoZSwNCiAgICA+ICsgIElOIE9VVCBWQVJJQUJMRV9JTkZPX0VOVFJZICAq KlZhcmlhYmxlSW5mbw0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIFZBUklBQkxFX0lO Rk9fRU5UUlkgICpFbnRyeTsNCiAgICA+ICsNCiAgICA+ICsgIGlmIChGZWF0dXJlUGNkR2V0IChQ Y2RWYXJpYWJsZUNvbGxlY3RTdGF0aXN0aWNzKSkgew0KICAgID4gKyAgICBpZiAoKFZhcmlhYmxl TmFtZSA9PSBOVUxMKSB8fCAoVmVuZG9yR3VpZCA9PSBOVUxMKSB8fCAoVmFyaWFibGVJbmZvID09 DQogICAgPiBOVUxMKSkgew0KICAgID4gKyAgICAgIHJldHVybjsNCiAgICA+ICsgICAgfQ0KICAg ID4gKw0KICAgID4gKyAgICBpZiAoQXRSdW50aW1lICgpKSB7DQogICAgPiArICAgICAgLy8gRG9u J3QgY29sbGVjdCBzdGF0aXN0aWNzIGF0IHJ1bnRpbWUuDQogICAgPiArICAgICAgcmV0dXJuOw0K ICAgID4gKyAgICB9DQogICAgPiArDQogICAgPiArICAgIGlmICgqVmFyaWFibGVJbmZvID09IE5V TEwpIHsNCiAgICA+ICsgICAgICAvLw0KICAgID4gKyAgICAgIC8vIE9uIHRoZSBmaXJzdCBjYWxs IGFsbG9jYXRlIGEgZW50cnkgYW5kIHBsYWNlIGEgcG9pbnRlciB0byBpdCBpbg0KICAgID4gKyAg ICAgIC8vIHRoZSBFRkkgU3lzdGVtIFRhYmxlLg0KICAgID4gKyAgICAgIC8vDQogICAgPiArICAg ICAgKlZhcmlhYmxlSW5mbyA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAoVkFSSUFCTEVfSU5G T19FTlRSWSkpOw0KICAgID4gKyAgICAgIEFTU0VSVCAoKlZhcmlhYmxlSW5mbyAhPSBOVUxMKTsN CiAgICA+ICsNCiAgICA+ICsgICAgICBDb3B5R3VpZCAoJigqVmFyaWFibGVJbmZvKS0+VmVuZG9y R3VpZCwgVmVuZG9yR3VpZCk7DQogICAgPiArICAgICAgKCpWYXJpYWJsZUluZm8pLT5OYW1lID0g QWxsb2NhdGVaZXJvUG9vbCAoU3RyU2l6ZSAoVmFyaWFibGVOYW1lKSk7DQogICAgPiArICAgICAg QVNTRVJUICgoKlZhcmlhYmxlSW5mbyktPk5hbWUgIT0gTlVMTCk7DQogICAgPiArICAgICAgU3Ry Q3B5UyAoKCpWYXJpYWJsZUluZm8pLT5OYW1lLCBTdHJTaXplIChWYXJpYWJsZU5hbWUpL3NpemVv ZiAoQ0hBUjE2KSwNCiAgICA+IFZhcmlhYmxlTmFtZSk7DQogICAgPiArICAgICAgKCpWYXJpYWJs ZUluZm8pLT5Wb2xhdGlsZSA9IFZvbGF0aWxlOw0KICAgID4gKyAgICB9DQogICAgPiArDQogICAg PiArICAgIGZvciAoRW50cnkgPSAoKlZhcmlhYmxlSW5mbyk7IEVudHJ5ICE9IE5VTEw7IEVudHJ5 ID0gRW50cnktPk5leHQpIHsNCiAgICA+ICsgICAgICBpZiAoQ29tcGFyZUd1aWQgKFZlbmRvckd1 aWQsICZFbnRyeS0+VmVuZG9yR3VpZCkpIHsNCiAgICA+ICsgICAgICAgIGlmIChTdHJDbXAgKFZh cmlhYmxlTmFtZSwgRW50cnktPk5hbWUpID09IDApIHsNCiAgICA+ICsgICAgICAgICAgaWYgKFJl YWQpIHsNCiAgICA+ICsgICAgICAgICAgICBFbnRyeS0+UmVhZENvdW50Kys7DQogICAgPiArICAg ICAgICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgICAgICAgaWYgKFdyaXRlKSB7DQogICAgPiAr ICAgICAgICAgICAgRW50cnktPldyaXRlQ291bnQrKzsNCiAgICA+ICsgICAgICAgICAgfQ0KICAg ID4gKw0KICAgID4gKyAgICAgICAgICBpZiAoRGVsZXRlKSB7DQogICAgPiArICAgICAgICAgICAg RW50cnktPkRlbGV0ZUNvdW50Kys7DQogICAgPiArICAgICAgICAgIH0NCiAgICA+ICsNCiAgICA+ ICsgICAgICAgICAgaWYgKENhY2hlKSB7DQogICAgPiArICAgICAgICAgICAgRW50cnktPkNhY2hl Q291bnQrKzsNCiAgICA+ICsgICAgICAgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICAgICAgICBy ZXR1cm47DQogICAgPiArICAgICAgICB9DQogICAgPiArICAgICAgfQ0KICAgID4gKw0KICAgID4g KyAgICAgIGlmIChFbnRyeS0+TmV4dCA9PSBOVUxMKSB7DQogICAgPiArICAgICAgICAvLw0KICAg ID4gKyAgICAgICAgLy8gSWYgdGhlIGVudHJ5IGlzIG5vdCBpbiB0aGUgdGFibGUgYWRkIGl0Lg0K ICAgID4gKyAgICAgICAgLy8gTmV4dCBpdGVyYXRpb24gb2YgdGhlIGxvb3Agd2lsbCBmaWxsIGlu IHRoZSBkYXRhLg0KICAgID4gKyAgICAgICAgLy8NCiAgICA+ICsgICAgICAgIEVudHJ5LT5OZXh0 ID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChWQVJJQUJMRV9JTkZPX0VOVFJZKSk7DQogICAg PiArICAgICAgICBBU1NFUlQgKEVudHJ5LT5OZXh0ICE9IE5VTEwpOw0KICAgID4gKw0KICAgID4g KyAgICAgICAgQ29weUd1aWQgKCZFbnRyeS0+TmV4dC0+VmVuZG9yR3VpZCwgVmVuZG9yR3VpZCk7 DQogICAgPiArICAgICAgICBFbnRyeS0+TmV4dC0+TmFtZSA9IEFsbG9jYXRlWmVyb1Bvb2wgKFN0 clNpemUgKFZhcmlhYmxlTmFtZSkpOw0KICAgID4gKyAgICAgICAgQVNTRVJUIChFbnRyeS0+TmV4 dC0+TmFtZSAhPSBOVUxMKTsNCiAgICA+ICsgICAgICAgIFN0ckNweVMgKEVudHJ5LT5OZXh0LT5O YW1lLCBTdHJTaXplIChWYXJpYWJsZU5hbWUpL3NpemVvZiAoQ0hBUjE2KSwNCiAgICA+IFZhcmlh YmxlTmFtZSk7DQogICAgPiArICAgICAgICBFbnRyeS0+TmV4dC0+Vm9sYXRpbGUgPSBWb2xhdGls ZTsNCiAgICA+ICsgICAgICB9DQogICAgPiArICAgIH0NCiAgICA+ICsgIH0NCiAgICA+ICt9DQog ICAgPiArDQogICAgPiArLyoqDQogICAgPiArDQogICAgPiArICBSZXRyaWV2ZSBkZXRhaWxzIGFi b3V0IGEgdmFyaWFibGUgYW5kIHJldHVybiB0aGVtIGluIFZhcmlhYmxlSW5mby0+SGVhZGVyLg0K ICAgID4gKw0KICAgID4gKyAgSWYgVmFyaWFibGVJbmZvLT5CdWZmZXIgaXMgZ2l2ZW4sIHRoaXMg ZnVuY3Rpb24gd2lsbCBjYWxjdWxhdGUgaXRzIG9mZnNldA0KICAgID4gKyAgcmVsYXRpdmUgdG8g Z2l2ZW4gdmFyaWFibGUgc3RvcmFnZSB2aWEgVmFyaWFibGVTdG9yZTsgT3RoZXJ3aXNlLCBpdCB3 aWxsIHRyeQ0KICAgID4gKyAgb3RoZXIgaW50ZXJuYWwgdmFyaWFibGUgc3RvcmFnZXMgb3IgY2Fj aGVkIGNvcGllcy4gSXQncyBhc3N1bWVkIHRoYXQsIGZvciBhbGwNCiAgICA+ICsgIGNvcGllcyBv ZiBOViB2YXJpYWJsZSBzdG9yYWdlLCBhbGwgdmFyaWFibGVzIGFyZSBzdG9yZWQgaW4gdGhlIHNh bWUgcmVsYXRpdmUNCiAgICA+ICsgIHBvc2l0aW9uLiBJZiBWYXJpYWJsZUluZm8tPkJ1ZmZlciBp cyBmb3VuZCBpbiB0aGUgcmFuZ2Ugb2YgYW55IHN0b3JhZ2UgY29waWVzLA0KICAgID4gKyAgaXRz IG9mZnNldCByZWxhdGl2ZSB0byB0aGF0IHN0b3JhZ2Ugc2hvdWxkIGJlIHRoZSBzYW1lIGluIG90 aGVyIGNvcGllcy4NCiAgICA+ICsNCiAgICA+ICsgIElmIFZhcmlhYmxlSW5mby0+T2Zmc2V0IGlz IGdpdmVuIChub24temVybykgYnV0IG5vdCBWYXJpYWJsZUluZm8tPkJ1ZmZlciwNCiAgICA+ICsg IHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIHZhcmlhYmxlIG1lbW9yeSBhZGRyZXNzIGlu c2lkZSBWYXJpYWJsZVN0b3JlLA0KICAgID4gKyAgaWYgZ2l2ZW4sIHZpYSBWYXJpYWJsZUluZm8t PkFkZHJlc3M7IE90aGVyd2lzZSwgdGhlIGFkZHJlc3Mgb2Ygb3RoZXIgc3RvcmFnZQ0KICAgID4g KyAgY29waWVzIHdpbGwgYmUgcmV0dXJuZWQsIGlmIGFueS4NCiAgICA+ICsNCiAgICA+ICsgIEZv ciBhIG5ldyB2YXJpYWJsZSB3aG9zZSBvZmZzZXQgaGFzIG5vdCBiZWVuIGRldGVybWluZWQsIGEg dmFsdWUgb2YgLTEgYXMNCiAgICA+ICsgIFZhcmlhYmxlSW5mby0+T2Zmc2V0IHNob3VsZCBiZSBw YXNzZWQgdG8gc2tpcCB0aGUgb2Zmc2V0IGNhbGN1bGF0aW9uLg0KICAgID4gKw0KICAgID4gKyAg QHBhcmFtW2luLG91dF0gVmFyaWFibGVJbmZvICAgICAgICAgICAgIFBvaW50ZXIgdG8gdmFyaWFi bGUgaW5mb3JtYXRpb24uDQogICAgPiArDQogICAgPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BB UkFNRVRFUiAgVmFyaWFibGVJbmZvIGlzIE5VTEwgb3IgYm90aCBWYXJpYWJsZUluZm8tDQogICAg PiA+QWRkcmVzcw0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBW YXJpYWJsZUluZm8tPk9mZnNldCBhcmUgTlVMTCAoMCkuDQogICAgPiArICBAcmV0dmFsIEVGSV9O T1RfRk9VTkQgICAgICAgICAgSWYgZ2l2ZW4gQWRkcmVzcyBvciBPZmZzZXQgaXMgb3V0IG9mIHJh bmdlIG9mDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55IGdpdmVu IG9yIGludGVybmFsIHN0b3JhZ2UgY29waWVzLg0KICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICAgICAgIFZhcmlhYmxlIGRldGFpbHMgYXJlIHJldHJpZXZlZCBzdWNjZXNzZnVsbHku DQogICAgPiArDQogICAgPiArKiovDQogICAgPiArRUZJX1NUQVRVUw0KICAgID4gK0VGSUFQSQ0K ICAgID4gK0dldFZhcmlhYmxlSW5mbyAoDQogICAgPiArICBJTiBPVVQgIFBST1RFQ1RFRF9WQVJJ QUJMRV9JTkZPICAqVmFyaWFibGVJbmZvDQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAg VkFSSUFCTEVfU1RPUkVfSEVBREVSICAgICAgICAgICpTdG9yZXNbMl07DQogICAgPiArICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQogICAgPiArICBWQVJJQUJMRV9IRUFE RVIgICAgICAgICAgICAgICAgKlZhcmlhYmxlUHRyOw0KICAgID4gKyAgVkFSSUFCTEVfSEVBREVS ICAgICAgICAgICAgICAgICpWYXJpYWJsZUJ1ZmZlcjsNCiAgICA+ICsgIEFVVEhFTlRJQ0FURURf VkFSSUFCTEVfSEVBREVSICAqQXV0aFZhcmlhYmxlUHRyOw0KICAgID4gKyAgQk9PTEVBTiAgICAg ICAgICAgICAgICAgICAgICAgIEF1dGhGbGFnOw0KICAgID4gKyAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICAgIE5hbWVTaXplOw0KICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAg ICAgICAgIERhdGFTaXplOw0KICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAg IFZhcmlhYmxlU2l6ZTsNCiAgICA+ICsNCiAgICA+ICsgIGlmICgoVmFyaWFibGVJbmZvID09IE5V TEwpIHx8ICggIChWYXJpYWJsZUluZm8tPkJ1ZmZlciA9PSBOVUxMKQ0KICAgID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJiYgKFZhcmlhYmxlSW5mby0+U3RvcmVJbmRleCA9PSBW QVJfSU5ERVhfSU5WQUxJRCkpKQ0KICAgID4gKyAgew0KICAgID4gKyAgICBBU1NFUlQgKFZhcmlh YmxlSW5mbyAhPSBOVUxMKTsNCiAgICA+ICsgICAgQVNTRVJUIChWYXJpYWJsZUluZm8tPkJ1ZmZl ciAhPSBOVUxMIHx8IFZhcmlhYmxlSW5mby0+U3RvcmVJbmRleCAhPQ0KICAgID4gVkFSX0lOREVY X0lOVkFMSUQpOw0KICAgID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KICAg ID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgU3RvcmVzWzBdID0gbU52VmFyaWFibGVDYWNoZTsN CiAgICA+ICsgIFN0b3Jlc1sxXSA9IChtVmFyaWFibGVNb2R1bGVHbG9iYWwgIT0gTlVMTCkNCiAg ICA+ICsgICAgICAgICAgICAgID8gKFZBUklBQkxFX1NUT1JFX0hFQURFUiAqKShVSU5UTiltVmFy aWFibGVNb2R1bGVHbG9iYWwtDQogICAgPiA+VmFyaWFibGVHbG9iYWwuTm9uVm9sYXRpbGVWYXJp YWJsZUJhc2UNCiAgICA+ICsgICAgICAgICAgICAgIDogTlVMTDsNCiAgICA+ICsNCiAgICA+ICsg IFZhcmlhYmxlQnVmZmVyID0gVmFyaWFibGVJbmZvLT5CdWZmZXI7DQogICAgPiArICBWYXJpYWJs ZVB0ciAgICA9IE5VTEw7DQogICAgPiArICBpZiAoVmFyaWFibGVJbmZvLT5TdG9yZUluZGV4ICE9 IFZBUl9JTkRFWF9JTlZBTElEKSB7DQogICAgPiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8 IEFSUkFZX1NJWkUgKFN0b3Jlcyk7ICsrSW5kZXgpIHsNCiAgICA+ICsgICAgICBpZiAoU3RvcmVz W0luZGV4XSA9PSBOVUxMKSB7DQogICAgPiArICAgICAgICBjb250aW51ZTsNCiAgICA+ICsgICAg ICB9DQogICAgPiArDQogICAgPiArICAgICAgaWYgKChVSU5UTilWYXJpYWJsZUluZm8tPlN0b3Jl SW5kZXgNCiAgICA+ICsgICAgICAgICAgPCAoKFVJTlROKUdldEVuZFBvaW50ZXIgKFN0b3Jlc1tJ bmRleF0pIC0gKFVJTlROKVN0b3Jlc1tJbmRleF0pKQ0KICAgID4gKyAgICAgIHsNCiAgICA+ICsg ICAgICAgIFZhcmlhYmxlUHRyICAgICAgICAgID0gKFZBUklBQkxFX0hFQURFUiAqKSgoVUlOVE4p U3RvcmVzW0luZGV4XSArDQogICAgPiAoVUlOVE4pVmFyaWFibGVJbmZvLT5TdG9yZUluZGV4KTsN CiAgICA+ICsgICAgICAgIFZhcmlhYmxlSW5mby0+QnVmZmVyID0gVmFyaWFibGVQdHI7DQogICAg PiArICAgICAgICBicmVhazsNCiAgICA+ICsgICAgICB9DQogICAgPiArICAgIH0NCiAgICA+ICsg IH0gZWxzZSB7DQogICAgPiArICAgIFZhcmlhYmxlUHRyID0gVmFyaWFibGVJbmZvLT5CdWZmZXI7 DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICBpZiAoVmFyaWFibGVQdHIgPT0gTlVMTCkg ew0KICAgID4gKyAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCiAgICA+ICsgIH0NCiAgICA+ICsN CiAgICA+ICsgIEF1dGhGbGFnID0gVmFyaWFibGVJbmZvLT5GbGFncy5BdXRoOw0KICAgID4gKyAg QVNTRVJUIChBdXRoRmxhZyA9PSBUUlVFIHx8IEF1dGhGbGFnID09IEZBTFNFKTsNCiAgICA+ICsN CiAgICA+ICsgIC8vDQogICAgPiArICAvLyBNYWtlIGEgY29weSBvZiB0aGUgd2hvbGUgdmFyaWFi bGUgaWYgYSBidWZmZXIgaXMgcGFzc2VkIGluLg0KICAgID4gKyAgLy8NCiAgICA+ICsgIGlmICgo VmFyaWFibGVCdWZmZXIgIT0gTlVMTCkgJiYgKFZhcmlhYmxlQnVmZmVyICE9IFZhcmlhYmxlUHRy KSkgew0KICAgID4gKyAgICBWYXJpYWJsZVNpemUgPSAoVUlOVE4pR2V0TmV4dFZhcmlhYmxlUHRy IChWYXJpYWJsZVB0ciwgQXV0aEZsYWcpDQogICAgPiArICAgICAgICAgICAgICAgICAgIC0gKFVJ TlROKVZhcmlhYmxlUHRyOw0KICAgID4gKyAgICBDb3B5TWVtIChWYXJpYWJsZUJ1ZmZlciwgVmFy aWFibGVQdHIsIFZhcmlhYmxlU2l6ZSk7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICAv Lw0KICAgID4gKyAgLy8gQXV0aFZhcmlhYmxlIGhlYWRlcg0KICAgID4gKyAgLy8NCiAgICA+ICsg IGlmIChBdXRoRmxhZykgew0KICAgID4gKyAgICBBdXRoVmFyaWFibGVQdHIgPSAoQVVUSEVOVElD QVRFRF9WQVJJQUJMRV9IRUFERVIgKilWYXJpYWJsZVB0cjsNCiAgICA+ICsNCiAgICA+ICsgICAg VmFyaWFibGVJbmZvLT5IZWFkZXIuU3RhdGUgICAgICAgICAgPSBBdXRoVmFyaWFibGVQdHItPlN0 YXRlOw0KICAgID4gKyAgICBWYXJpYWJsZUluZm8tPkhlYWRlci5BdHRyaWJ1dGVzICAgICA9IEF1 dGhWYXJpYWJsZVB0ci0+QXR0cmlidXRlczsNCiAgICA+ICsgICAgVmFyaWFibGVJbmZvLT5IZWFk ZXIuUHViS2V5SW5kZXggICAgPSBBdXRoVmFyaWFibGVQdHItPlB1YktleUluZGV4Ow0KICAgID4g KyAgICBWYXJpYWJsZUluZm8tPkhlYWRlci5Nb25vdG9uaWNDb3VudCA9IFJlYWRVbmFsaWduZWQ2 NCAoDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm KEF1dGhWYXJpYWJsZVB0ci0+TW9ub3RvbmljQ291bnQpDQogICAgPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgID4gKyAgICBpZiAoVmFyaWFibGVJ bmZvLT5IZWFkZXIuVGltZVN0YW1wICE9IE5VTEwpIHsNCiAgICA+ICsgICAgICBDb3B5TWVtICgN CiAgICA+ICsgICAgICAgIFZhcmlhYmxlSW5mby0+SGVhZGVyLlRpbWVTdGFtcCwNCiAgICA+ICsg ICAgICAgICZBdXRoVmFyaWFibGVQdHItPlRpbWVTdGFtcCwNCiAgICA+ICsgICAgICAgIHNpemVv ZiAoRUZJX1RJTUUpDQogICAgPiArICAgICAgICApOw0KICAgID4gKyAgICB9IGVsc2UgaWYgKFZh cmlhYmxlQnVmZmVyICE9IE5VTEwpIHsNCiAgICA+ICsgICAgICBBdXRoVmFyaWFibGVQdHIgICAg ICAgICAgICAgICAgPSAoQVVUSEVOVElDQVRFRF9WQVJJQUJMRV9IRUFERVINCiAgICA+ICopVmFy aWFibGVCdWZmZXI7DQogICAgPiArICAgICAgVmFyaWFibGVJbmZvLT5IZWFkZXIuVGltZVN0YW1w ID0gJkF1dGhWYXJpYWJsZVB0ci0+VGltZVN0YW1wOw0KICAgID4gKyAgICB9DQogICAgPiArICB9 IGVsc2Ugew0KICAgID4gKyAgICBWYXJpYWJsZUluZm8tPkhlYWRlci5TdGF0ZSAgICAgICAgICA9 IFZhcmlhYmxlUHRyLT5TdGF0ZTsNCiAgICA+ICsgICAgVmFyaWFibGVJbmZvLT5IZWFkZXIuQXR0 cmlidXRlcyAgICAgPSBWYXJpYWJsZVB0ci0+QXR0cmlidXRlczsNCiAgICA+ICsgICAgVmFyaWFi bGVJbmZvLT5IZWFkZXIuUHViS2V5SW5kZXggICAgPSAwOw0KICAgID4gKyAgICBWYXJpYWJsZUlu Zm8tPkhlYWRlci5Nb25vdG9uaWNDb3VudCA9IDA7DQogICAgPiArICAgIFZhcmlhYmxlSW5mby0+ SGVhZGVyLlRpbWVTdGFtcCAgICAgID0gTlVMTDsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ ICsgIC8vDQogICAgPiArICAvLyBWZW5kb3JHdWlkDQogICAgPiArICAvLw0KICAgID4gKyAgaWYg KFZhcmlhYmxlSW5mby0+SGVhZGVyLlZlbmRvckd1aWQgIT0gTlVMTCkgew0KICAgID4gKyAgICBD b3B5R3VpZCAoDQogICAgPiArICAgICAgVmFyaWFibGVJbmZvLT5IZWFkZXIuVmVuZG9yR3VpZCwN CiAgICA+ICsgICAgICBHZXRWZW5kb3JHdWlkUHRyIChWYXJpYWJsZVB0ciwgQXV0aEZsYWcpDQog ICAgPiArICAgICAgKTsNCiAgICA+ICsgIH0gZWxzZSB7DQogICAgPiArICAgIFZhcmlhYmxlSW5m by0+SGVhZGVyLlZlbmRvckd1aWQgPSBHZXRWZW5kb3JHdWlkUHRyIChWYXJpYWJsZVB0ciwNCiAg ICA+IEF1dGhGbGFnKTsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIC8vDQogICAgPiAr ICAvLyBWYXJpYWJsZU5hbWUNCiAgICA+ICsgIC8vDQogICAgPiArICBOYW1lU2l6ZSA9IE5hbWVT aXplT2ZWYXJpYWJsZSAoVmFyaWFibGVQdHIsIEF1dGhGbGFnKTsNCiAgICA+ICsgIGlmICggIChW YXJpYWJsZUluZm8tPkhlYWRlci5WYXJpYWJsZU5hbWUgIT0gTlVMTCkNCiAgICA+ICsgICAgICYm IChWYXJpYWJsZUluZm8tPkhlYWRlci5OYW1lU2l6ZSA+PSBOYW1lU2l6ZSkpDQogICAgPiArICB7 DQogICAgPiArICAgIENvcHlNZW0gKA0KICAgID4gKyAgICAgIFZhcmlhYmxlSW5mby0+SGVhZGVy LlZhcmlhYmxlTmFtZSwNCiAgICA+ICsgICAgICBHZXRWYXJpYWJsZU5hbWVQdHIgKFZhcmlhYmxl UHRyLCBBdXRoRmxhZyksDQogICAgPiArICAgICAgTmFtZVNpemUNCiAgICA+ICsgICAgICApOw0K ICAgID4gKyAgfSBlbHNlIGlmIChWYXJpYWJsZUluZm8tPkhlYWRlci5WYXJpYWJsZU5hbWUgIT0g TlVMTCkgew0KICAgID4gKyAgICByZXR1cm4gRUZJX0JVRkZFUl9UT09fU01BTEw7DQogICAgPiAr ICB9IGVsc2Ugew0KICAgID4gKyAgICBWYXJpYWJsZUluZm8tPkhlYWRlci5WYXJpYWJsZU5hbWUg PSBHZXRWYXJpYWJsZU5hbWVQdHIgKFZhcmlhYmxlUHRyLA0KICAgID4gQXV0aEZsYWcpOw0KICAg ID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIERhdGENCiAgICA+ICsg IC8vDQogICAgPiArICBEYXRhU2l6ZSA9IERhdGFTaXplT2ZWYXJpYWJsZSAoVmFyaWFibGVQdHIs IEF1dGhGbGFnKTsNCiAgICA+ICsgIGlmICggIChWYXJpYWJsZUluZm8tPkhlYWRlci5EYXRhICE9 IE5VTEwpDQogICAgPiArICAgICAmJiAoVmFyaWFibGVJbmZvLT5IZWFkZXIuRGF0YVNpemUgPj0g RGF0YVNpemUpKQ0KICAgID4gKyAgew0KICAgID4gKyAgICBDb3B5TWVtICgNCiAgICA+ICsgICAg ICBWYXJpYWJsZUluZm8tPkhlYWRlci5EYXRhLA0KICAgID4gKyAgICAgIEdldFZhcmlhYmxlRGF0 YVB0ciAoVmFyaWFibGVQdHIsIEF1dGhGbGFnKSwNCiAgICA+ICsgICAgICBOYW1lU2l6ZQ0KICAg ID4gKyAgICAgICk7DQogICAgPiArICB9IGVsc2UgaWYgKFZhcmlhYmxlSW5mby0+SGVhZGVyLkRh dGEgIT0gTlVMTCkgew0KICAgID4gKyAgICByZXR1cm4gRUZJX0JVRkZFUl9UT09fU01BTEw7DQog ICAgPiArICB9IGVsc2Ugew0KICAgID4gKyAgICBWYXJpYWJsZUluZm8tPkhlYWRlci5EYXRhID0g R2V0VmFyaWFibGVEYXRhUHRyIChWYXJpYWJsZVB0ciwgQXV0aEZsYWcpOw0KICAgID4gKyAgfQ0K ICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIFVwZGF0ZSBzaXplIGluZm9ybWF0aW9u IGFib3V0IG5hbWUgJiBkYXRhLg0KICAgID4gKyAgLy8NCiAgICA+ICsgIFZhcmlhYmxlSW5mby0+ SGVhZGVyLk5hbWVTaXplID0gTmFtZVNpemU7DQogICAgPiArICBWYXJpYWJsZUluZm8tPkhlYWRl ci5EYXRhU2l6ZSA9IERhdGFTaXplOw0KICAgID4gKw0KICAgID4gKyAgcmV0dXJuIEVGSV9TVUND RVNTOw0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsNCiAgICA+ICsgIFJl dHJpZXZlIGRldGFpbHMgb2YgdGhlIHZhcmlhYmxlIG5leHQgdG8gZ2l2ZW4gdmFyaWFibGUgd2l0 aGluIFZhcmlhYmxlU3RvcmUuDQogICAgPiArDQogICAgPiArICBJZiBWYXJpYWJsZUluZm8tPlN0 b3JlSW5kZXggaXMgaW52YWxpZCwgdGhlIGZpcnN0IG9uZSBpbiBWYXJpYWJsZVN0b3JlIGlzIHJl dHVybmVkLg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtW2luLG91dF0gVmFyaWFibGVJbmZvICAg ICAgICAgICAgIFBvaW50ZXIgdG8gdmFyaWFibGUgaW5mb3JtYXRpb24uDQogICAgPiArDQogICAg PiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgVmFyaWFibGVJbmZvIG9yIFZhcmlh YmxlU3RvcmUgaXMgTlVMTC4NCiAgICA+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAg ICBJZiB0aGUgZW5kIG9mIFZhcmlhYmxlU3RvcmUgaXMgcmVhY2hlZC4NCiAgICA+ICsgIEByZXR2 YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgbmV4dCB2YXJpYWJsZSBpcyByZXRyaWV2ZWQg c3VjY2Vzc2Z1bGx5Lg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK0VGSV9TVEFUVVMNCiAg ICA+ICtFRklBUEkNCiAgICA+ICtHZXROZXh0VmFyaWFibGVJbmZvICgNCiAgICA+ICsgIElOIE9V VCAgUFJPVEVDVEVEX1ZBUklBQkxFX0lORk8gICpWYXJpYWJsZUluZm8NCiAgICA+ICsgICkNCiAg ICA+ICt7DQogICAgPiArICBWQVJJQUJMRV9TVE9SRV9IRUFERVIgICpWYXJTdG9yZTsNCiAgICA+ ICsgIFZBUklBQkxFX0hFQURFUiAgICAgICAgKlZhcmlhYmxlUHRyOw0KICAgID4gKyAgVkFSSUFC TEVfSEVBREVSICAgICAgICAqVmFyaWFibGVTdGFydDsNCiAgICA+ICsgIFZBUklBQkxFX0hFQURF UiAgICAgICAgKlZhcmlhYmxlRW5kOw0KICAgID4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICBB dXRoRmxhZzsNCiAgICA+ICsNCiAgICA+ICsgIGlmIChWYXJpYWJsZUluZm8gPT0gTlVMTCkgew0K ICAgID4gKyAgICBBU1NFUlQgKFZhcmlhYmxlSW5mbyAhPSBOVUxMKTsNCiAgICA+ICsgICAgcmV0 dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsg IGlmIChtTnZWYXJpYWJsZUNhY2hlICE9IE5VTEwpIHsNCiAgICA+ICsgICAgVmFyU3RvcmUgPSBt TnZWYXJpYWJsZUNhY2hlOw0KICAgID4gKyAgfSBlbHNlIGlmIChtVmFyaWFibGVNb2R1bGVHbG9i YWwgIT0gTlVMTCkgew0KICAgID4gKyAgICBWYXJTdG9yZSA9IChWQVJJQUJMRV9TVE9SRV9IRUFE RVIgKikoVUlOVE4pDQogICAgPiArICAgICAgICAgICAgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFs LT5WYXJpYWJsZUdsb2JhbC5Ob25Wb2xhdGlsZVZhcmlhYmxlQmFzZTsNCiAgICA+ICsgIH0gZWxz ZSB7DQogICAgPiArICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KICAgID4gKyAgfQ0KICAgID4g Kw0KICAgID4gKyAgVmFyaWFibGVTdGFydCA9IEdldFN0YXJ0UG9pbnRlciAoVmFyU3RvcmUpOw0K ICAgID4gKyAgVmFyaWFibGVFbmQgICA9IEdldEVuZFBvaW50ZXIgKFZhclN0b3JlKTsNCiAgICA+ ICsNCiAgICA+ICsgIGlmICgoVmFyaWFibGVJbmZvLT5GbGFncy5BdXRoICE9IFRSVUUpICYmIChW YXJpYWJsZUluZm8tPkZsYWdzLkF1dGggIT0gRkFMU0UpKQ0KICAgID4gew0KICAgID4gKyAgICBW YXJpYWJsZUluZm8tPkZsYWdzLkF1dGggPSBDb21wYXJlR3VpZCAoDQogICAgPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJlZhclN0b3JlLT5TaWduYXR1cmUsDQogICAgPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdFZmlBdXRoZW50aWNhdGVkVmFyaWFibGVH dWlkDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICA+ICsg IH0NCiAgICA+ICsNCiAgICA+ICsgIEF1dGhGbGFnID0gVmFyaWFibGVJbmZvLT5GbGFncy5BdXRo Ow0KICAgID4gKw0KICAgID4gKyAgaWYgKFZhcmlhYmxlSW5mby0+U3RvcmVJbmRleCA9PSBWQVJf SU5ERVhfSU5WQUxJRCkgew0KICAgID4gKyAgICBWYXJpYWJsZVB0ciA9IFZhcmlhYmxlU3RhcnQ7 DQogICAgPiArICB9IGVsc2Ugew0KICAgID4gKyAgICBWYXJpYWJsZVB0ciA9IChWQVJJQUJMRV9I RUFERVIgKikNCiAgICA+ICsgICAgICAgICAgICAgICAgICAoKFVJTlROKVZhclN0b3JlICsgKFVJ TlROKVZhcmlhYmxlSW5mby0+U3RvcmVJbmRleCk7DQogICAgPiArICAgIGlmIChWYXJpYWJsZVB0 ciA+PSBWYXJpYWJsZUVuZCkgew0KICAgID4gKyAgICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0K ICAgID4gKyAgICB9DQogICAgPiArDQogICAgPiArICAgIFZhcmlhYmxlUHRyID0gR2V0TmV4dFZh cmlhYmxlUHRyIChWYXJpYWJsZVB0ciwgQXV0aEZsYWcpOw0KICAgID4gKyAgfQ0KICAgID4gKw0K ICAgID4gKyAgaWYgKCFJc1ZhbGlkVmFyaWFibGVIZWFkZXIgKFZhcmlhYmxlUHRyLCBWYXJpYWJs ZUVuZCwgQXV0aEZsYWcpKSB7DQogICAgPiArICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KICAg ID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgVmFyaWFibGVJbmZvLT5TdG9yZUluZGV4ID0gKFVJ TlROKVZhcmlhYmxlUHRyIC0gKFVJTlROKVZhclN0b3JlOw0KICAgID4gKyAgcmV0dXJuIEdldFZh cmlhYmxlSW5mbyAoVmFyaWFibGVJbmZvKTsNCiAgICA+ICt9DQogICAgPiBkaWZmIC0tZ2l0DQog ICAgPiBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVE eGUvVmFyaWFibGVQb2xpY3lTbQ0KICAgID4gbUR4ZS5jDQogICAgPiBiL01kZU1vZHVsZVBrZy9V bml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVQb2xpY3lTbQ0K ICAgID4gbUR4ZS5jDQogICAgPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgID4gaW5kZXggMDAw MDAwMDAwMDAwLi5iMjA5NGZiY2Q2ZWENCiAgICA+IC0tLSAvZGV2L251bGwNCiAgICA+ICsrKw0K ICAgID4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1l RHhlL1ZhcmlhYmxlUG9saWN5U20NCiAgICA+IG1EeGUuYw0KICAgID4gQEAgLTAsMCArMSw1NzUg QEANCiAgICA+ICsvKiogQGZpbGUgLS0gVmFyaWFibGVQb2xpY3lTbW1EeGUuYw0KICAgID4gK1Ro aXMgcHJvdG9jb2wgYWxsb3dzIGNvbW11bmljYXRpb24gd2l0aCBWYXJpYWJsZSBQb2xpY3kgRW5n aW5lLg0KICAgID4gKw0KICAgID4gK0NvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9u Lg0KICAgID4gK1NQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQog ICAgPiArDQogICAgPiArKiovDQogICAgPiArDQogICAgPiArI2luY2x1ZGUgPExpYnJhcnkvQmFz ZUxpYi5oPg0KICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlMaWIuaD4NCiAgICA+ICsjaW5j bHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1NhZmVJ bnRMaWIuaD4NCiAgICA+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9vdFNlcnZpY2VzVGFibGVM aWIuaD4NCiAgICA+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+DQogICAgPiAr I2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0KICAgID4gKw0KICAgID4g KyNpbmNsdWRlIDxQcm90b2NvbC9WYXJpYWJsZVBvbGljeS5oPg0KICAgID4gKyNpbmNsdWRlIDxQ cm90b2NvbC9NbUNvbW11bmljYXRpb24yLmg+DQogICAgPiArDQogICAgPiArI2luY2x1ZGUgPEd1 aWQvVmFyQ2hlY2tQb2xpY3lNbWkuaD4NCiAgICA+ICsNCiAgICA+ICsjaW5jbHVkZSAiVmFyaWFi bGUuaCINCiAgICA+ICsNCiAgICA+ICtFREtJSV9WQVJJQUJMRV9QT0xJQ1lfUFJPVE9DT0wgIG1W YXJpYWJsZVBvbGljeVByb3RvY29sOw0KICAgID4gK0VGSV9NTV9DT01NVU5JQ0FUSU9OMl9QUk9U T0NPTCAgKm1NbUNvbW11bmljYXRpb247DQogICAgPiArDQogICAgPiArVk9JRCAgICAgICptTW1D b21tdW5pY2F0aW9uQnVmZmVyOw0KICAgID4gK1VJTlROICAgICBtTW1Db21tdW5pY2F0aW9uQnVm ZmVyU2l6ZTsNCiAgICA+ICtFRklfTE9DSyAgbU1tQ29tbXVuaWNhdGlvbkxvY2s7DQogICAgPiAr DQogICAgPiArLyoqDQogICAgPiArICBJbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gdG8gY29uc29s aWRhdGUgY29tbXVuaWNhdGlvbiBtZXRob2QuDQogICAgPiArDQogICAgPiArICBAcGFyYW1baW4s b3V0XSAgQ29tbUJ1ZmZlcg0KICAgID4gKyAgQHBhcmFtW2luLG91dF0gIENvbW1TaXplICAgIFNp emUgb2YgdGhlIENvbW1CdWZmZXIuDQogICAgPiArDQogICAgPiArICBAcmV0dmFsICAgRUZJX1NU QVRVUyAgICBSZXN1bHQgZnJvbSBjb21tdW5pY2F0aW9uIG1ldGhvZC4NCiAgICA+ICsNCiAgICA+ ICsqKi8NCiAgICA+ICtTVEFUSUMNCiAgICA+ICtFRklfU1RBVFVTDQogICAgPiArSW50ZXJuYWxN bUNvbW11bmljYXRlICgNCiAgICA+ICsgIElOIE9VVCBWT0lEICAgKkNvbW1CdWZmZXIsDQogICAg PiArICBJTiBPVVQgVUlOVE4gICpDb21tU2l6ZQ0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCiAgICA+ICsNCiAgICA+ICsgIGlmICgoQ29tbUJ1ZmZl ciA9PSBOVUxMKSB8fCAoQ29tbVNpemUgPT0gTlVMTCkpIHsNCiAgICA+ICsgICAgcmV0dXJuIEVG SV9JTlZBTElEX1BBUkFNRVRFUjsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIFN0YXR1 cyA9IG1NbUNvbW11bmljYXRpb24tPkNvbW11bmljYXRlIChtTW1Db21tdW5pY2F0aW9uLA0KICAg ID4gQ29tbUJ1ZmZlciwgQ29tbUJ1ZmZlciwgQ29tbVNpemUpOw0KICAgID4gKyAgcmV0dXJuIFN0 YXR1czsNCiAgICA+ICt9DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBUaGlzIEFQSSBm dW5jdGlvbiBkaXNhYmxlcyB0aGUgdmFyaWFibGUgcG9saWN5IGVuZm9yY2VtZW50LiBJZiBpdCdz DQogICAgPiArICBhbHJlYWR5IGJlZW4gY2FsbGVkIG9uY2UsIHdpbGwgcmV0dXJuIEVGSV9BTFJF QURZX1NUQVJURUQuDQogICAgPiArDQogICAgPiArICBAcmV0dmFsICAgICBFRklfU1VDQ0VTUw0K ICAgID4gKyAgQHJldHZhbCAgICAgRUZJX0FMUkVBRFlfU1RBUlRFRCAgIEhhcyBhbHJlYWR5IGJl ZW4gY2FsbGVkIG9uY2UgdGhpcyBib290Lg0KICAgID4gKyAgQHJldHZhbCAgICAgRUZJX1dSSVRF X1BST1RFQ1RFRCAgIEludGVyZmFjZSBoYXMgYmVlbiBsb2NrZWQgdW50aWwgcmVib290Lg0KICAg ID4gKyAgQHJldHZhbCAgICAgRUZJX1dSSVRFX1BST1RFQ1RFRCAgIEludGVyZmFjZSBvcHRpb24g aXMgZGlzYWJsZWQgYnkgcGxhdGZvcm0NCiAgICA+IFBDRC4NCiAgICA+ICsNCiAgICA+ICsqKi8N CiAgICA+ICtTVEFUSUMNCiAgICA+ICtFRklfU1RBVFVTDQogICAgPiArRUZJQVBJDQogICAgPiAr UHJvdG9jb2xEaXNhYmxlVmFyaWFibGVQb2xpY3kgKA0KICAgID4gKyAgVk9JRA0KICAgID4gKyAg KQ0KICAgID4gK3sNCiAgICA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIFN0YXR1 czsNCiAgICA+ICsgIEVGSV9NTV9DT01NVU5JQ0FURV9IRUFERVIgICAgICpDb21tSGVhZGVyOw0K ICAgID4gKyAgVkFSX0NIRUNLX1BPTElDWV9DT01NX0hFQURFUiAgKlBvbGljeUhlYWRlcjsNCiAg ICA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlclNpemU7DQogICAgPiAr DQogICAgPiArICAvLyBDaGVjayB0aGUgUENEIGZvciBjb252ZW5pZW5jZS4NCiAgICA+ICsgIC8v IFRoaXMgd291bGQgYWxzbyBiZSByZWplY3RlZCBieSB0aGUgbGliLCBidXQgd2h5IGdvIHRvIE1N IGlmIHdlIGRvbid0IGhhdmUgdG8/DQogICAgPiArICBpZiAoIVBjZEdldEJvb2wgKFBjZEFsbG93 VmFyaWFibGVQb2xpY3lFbmZvcmNlbWVudERpc2FibGUpKSB7DQogICAgPiArICAgIHJldHVybiBF RklfV1JJVEVfUFJPVEVDVEVEOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgQWNxdWly ZUxvY2tPbmx5QXRCb290VGltZSAoJm1NbUNvbW11bmljYXRpb25Mb2NrKTsNCiAgICA+ICsNCiAg ICA+ICsgIC8vIFNldCB1cCB0aGUgTU0gY29tbXVuaWNhdGlvbi4NCiAgICA+ICsgIEJ1ZmZlclNp emUgICA9IG1NbUNvbW11bmljYXRpb25CdWZmZXJTaXplOw0KICAgID4gKyAgQ29tbUhlYWRlciAg ID0gbU1tQ29tbXVuaWNhdGlvbkJ1ZmZlcjsNCiAgICA+ICsgIFBvbGljeUhlYWRlciA9IChWQVJf Q0hFQ0tfUE9MSUNZX0NPTU1fSEVBREVSICopJkNvbW1IZWFkZXItDQogICAgPiA+RGF0YTsNCiAg ICA+ICsgIENvcHlHdWlkICgmQ29tbUhlYWRlci0+SGVhZGVyR3VpZCwNCiAgICA+ICZnVmFyQ2hl Y2tQb2xpY3lMaWJNbWlIYW5kbGVyR3VpZCk7DQogICAgPiArICBDb21tSGVhZGVyLT5NZXNzYWdl TGVuZ3RoID0gQnVmZmVyU2l6ZSAtIE9GRlNFVF9PRg0KICAgID4gKEVGSV9NTV9DT01NVU5JQ0FU RV9IRUFERVIsIERhdGEpOw0KICAgID4gKyAgUG9saWN5SGVhZGVyLT5TaWduYXR1cmUgICA9IFZB Ul9DSEVDS19QT0xJQ1lfQ09NTV9TSUc7DQogICAgPiArICBQb2xpY3lIZWFkZXItPlJldmlzaW9u ICAgID0gVkFSX0NIRUNLX1BPTElDWV9DT01NX1JFVklTSU9OOw0KICAgID4gKyAgUG9saWN5SGVh ZGVyLT5Db21tYW5kICAgICA9IFZBUl9DSEVDS19QT0xJQ1lfQ09NTUFORF9ESVNBQkxFOw0KICAg ID4gKw0KICAgID4gKyAgU3RhdHVzID0gSW50ZXJuYWxNbUNvbW11bmljYXRlIChDb21tSGVhZGVy LCAmQnVmZmVyU2l6ZSk7DQogICAgPiArICBERUJVRyAoKERFQlVHX1ZFUkJPU0UsICIlYSAtIE1t Q29tbXVuaWNhdGlvbiByZXR1cm5lZCAlci5cbiIsDQogICAgPiBfX0ZVTkNUSU9OX18sIFN0YXR1 cykpOw0KICAgID4gKw0KICAgID4gKyAgUmVsZWFzZUxvY2tPbmx5QXRCb290VGltZSAoJm1NbUNv bW11bmljYXRpb25Mb2NrKTsNCiAgICA+ICsNCiAgICA+ICsgIHJldHVybiAoRUZJX0VSUk9SIChT dGF0dXMpKSA/IFN0YXR1cyA6IFBvbGljeUhlYWRlci0+UmVzdWx0Ow0KICAgID4gK30NCiAgICA+ ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIFRoaXMgQVBJIGZ1bmN0aW9uIHJldHVybnMgd2hldGhl ciBvciBub3QgdGhlIHBvbGljeSBlbmdpbmUgaXMNCiAgICA+ICsgIGN1cnJlbnRseSBiZWluZyBl bmZvcmNlZC4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbVtvdXRdICAgU3RhdGUgICAgICAgUG9p bnRlciB0byBhIHJldHVybiB2YWx1ZSBmb3Igd2hldGhlciB0aGUgcG9saWN5DQogICAgPiBlbmZv cmNlbWVudA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBjdXJyZW50bHkg ZW5hYmxlZC4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwgICAgIEVGSV9TVUNDRVNTDQogICAg PiArICBAcmV0dmFsICAgICBPdGhlcnMgICAgICAgIEFuIGVycm9yIGhhcyBwcmV2ZW50ZWQgdGhp cyBjb21tYW5kIGZyb20gY29tcGxldGluZy4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtT VEFUSUMNCiAgICA+ICtFRklfU1RBVFVTDQogICAgPiArRUZJQVBJDQogICAgPiArUHJvdG9jb2xJ c1ZhcmlhYmxlUG9saWN5RW5hYmxlZCAoDQogICAgPiArICBPVVQgQk9PTEVBTiAgKlN0YXRlDQog ICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBTdGF0dXM7DQogICAgPiArICBFRklfTU1fQ09NTVVOSUNBVEVfSEVBREVS ICAgICAgICAgICAgICAgICpDb21tSGVhZGVyOw0KICAgID4gKyAgVkFSX0NIRUNLX1BPTElDWV9D T01NX0hFQURFUiAgICAgICAgICAgICAqUG9saWN5SGVhZGVyOw0KICAgID4gKyAgVkFSX0NIRUNL X1BPTElDWV9DT01NX0lTX0VOQUJMRURfUEFSQU1TICAqQ29tbWFuZFBhcmFtczsNCiAgICA+ICsg IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyU2l6ZTsNCiAg ICA+ICsNCiAgICA+ICsgIGlmIChTdGF0ZSA9PSBOVUxMKSB7DQogICAgPiArICAgIHJldHVybiBF RklfSU5WQUxJRF9QQVJBTUVURVI7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICBBY3F1 aXJlTG9ja09ubHlBdEJvb3RUaW1lICgmbU1tQ29tbXVuaWNhdGlvbkxvY2spOw0KICAgID4gKw0K ICAgID4gKyAgLy8gU2V0IHVwIHRoZSBNTSBjb21tdW5pY2F0aW9uLg0KICAgID4gKyAgQnVmZmVy U2l6ZSAgICA9IG1NbUNvbW11bmljYXRpb25CdWZmZXJTaXplOw0KICAgID4gKyAgQ29tbUhlYWRl ciAgICA9IG1NbUNvbW11bmljYXRpb25CdWZmZXI7DQogICAgPiArICBQb2xpY3lIZWFkZXIgID0g KFZBUl9DSEVDS19QT0xJQ1lfQ09NTV9IRUFERVIgKikmQ29tbUhlYWRlci0NCiAgICA+ID5EYXRh Ow0KICAgID4gKyAgQ29tbWFuZFBhcmFtcyA9IChWQVJfQ0hFQ0tfUE9MSUNZX0NPTU1fSVNfRU5B QkxFRF9QQVJBTVMNCiAgICA+ICopKFBvbGljeUhlYWRlciArIDEpOw0KICAgID4gKyAgQ29weUd1 aWQgKCZDb21tSGVhZGVyLT5IZWFkZXJHdWlkLA0KICAgID4gJmdWYXJDaGVja1BvbGljeUxpYk1t aUhhbmRsZXJHdWlkKTsNCiAgICA+ICsgIENvbW1IZWFkZXItPk1lc3NhZ2VMZW5ndGggPSBCdWZm ZXJTaXplIC0gT0ZGU0VUX09GDQogICAgPiAoRUZJX01NX0NPTU1VTklDQVRFX0hFQURFUiwgRGF0 YSk7DQogICAgPiArICBQb2xpY3lIZWFkZXItPlNpZ25hdHVyZSAgID0gVkFSX0NIRUNLX1BPTElD WV9DT01NX1NJRzsNCiAgICA+ICsgIFBvbGljeUhlYWRlci0+UmV2aXNpb24gICAgPSBWQVJfQ0hF Q0tfUE9MSUNZX0NPTU1fUkVWSVNJT047DQogICAgPiArICBQb2xpY3lIZWFkZXItPkNvbW1hbmQg ICAgID0gVkFSX0NIRUNLX1BPTElDWV9DT01NQU5EX0lTX0VOQUJMRUQ7DQogICAgPiArDQogICAg PiArICBTdGF0dXMgPSBJbnRlcm5hbE1tQ29tbXVuaWNhdGUgKENvbW1IZWFkZXIsICZCdWZmZXJT aXplKTsNCiAgICA+ICsgIERFQlVHICgoREVCVUdfVkVSQk9TRSwgIiVhIC0gTW1Db21tdW5pY2F0 aW9uIHJldHVybmVkICVyLlxuIiwNCiAgICA+IF9fRlVOQ1RJT05fXywgU3RhdHVzKSk7DQogICAg PiArDQogICAgPiArICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgID4gKyAgICBTdGF0 dXMgPSBQb2xpY3lIZWFkZXItPlJlc3VsdDsNCiAgICA+ICsgICAgKlN0YXRlID0gQ29tbWFuZFBh cmFtcy0+U3RhdGU7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICBSZWxlYXNlTG9ja09u bHlBdEJvb3RUaW1lICgmbU1tQ29tbXVuaWNhdGlvbkxvY2spOw0KICAgID4gKw0KICAgID4gKyAg cmV0dXJuIFN0YXR1czsNCiAgICA+ICt9DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBU aGlzIEFQSSBmdW5jdGlvbiB2YWxpZGF0ZXMgYW5kIHJlZ2lzdGVycyBhIG5ldyBwb2xpY3kgd2l0 aA0KICAgID4gKyAgdGhlIHBvbGljeSBlbmZvcmNlbWVudCBlbmdpbmUuDQogICAgPiArDQogICAg PiArICBAcGFyYW1baW5dICBOZXdQb2xpY3kgICAgIFBvaW50ZXIgdG8gdGhlIGluY29taW5nIHBv bGljeSBzdHJ1Y3R1cmUuDQogICAgPiArDQogICAgPiArICBAcmV0dmFsICAgICBFRklfU1VDQ0VT Uw0KICAgID4gKyAgQHJldHZhbCAgICAgRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgTmV3UG9saWN5 IGlzIE5VTEwgb3IgaXMgaW50ZXJuYWxseQ0KICAgID4gaW5jb25zaXN0ZW50Lg0KICAgID4gKyAg QHJldHZhbCAgICAgRUZJX0FMUkVBRFlfU1RBUlRFRCAgICAgQW4gaWRlbnRpY2FsIG1hdGNoaW5n IHBvbGljeSBhbHJlYWR5DQogICAgPiBleGlzdHMuDQogICAgPiArICBAcmV0dmFsICAgICBFRklf V1JJVEVfUFJPVEVDVEVEICAgICBUaGUgaW50ZXJmYWNlIGhhcyBiZWVuIGxvY2tlZCB1bnRpbCB0 aGUNCiAgICA+IG5leHQgcmVib290Lg0KICAgID4gKyAgQHJldHZhbCAgICAgRUZJX1VOU1VQUE9S VEVEICAgICAgICAgUG9saWN5IGVuZm9yY2VtZW50IGhhcyBiZWVuIGRpc2FibGVkLiBObw0KICAg ID4gcmVhc29uIHRvIGFkZCBtb3JlIHBvbGljaWVzLg0KICAgID4gKyAgQHJldHZhbCAgICAgRUZJ X0FCT1JURUQgICAgICAgICAgICAgQSBjYWxjdWxhdGlvbiBlcnJvciBoYXMgcHJldmVudGVkIHRo aXMgZnVuY3Rpb24NCiAgICA+IGZyb20gY29tcGxldGluZy4NCiAgICA+ICsgIEByZXR2YWwgICAg IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgIENhbm5vdCBncm93IHRoZSB0YWJsZSB0byBob2xkIGFu eQ0KICAgID4gbW9yZSBwb2xpY2llcy4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtTVEFU SUMNCiAgICA+ICtFRklfU1RBVFVTDQogICAgPiArRUZJQVBJDQogICAgPiArUHJvdG9jb2xSZWdp c3RlclZhcmlhYmxlUG9saWN5ICgNCiAgICA+ICsgIElOIENPTlNUIFZBUklBQkxFX1BPTElDWV9F TlRSWSAgKk5ld1BvbGljeQ0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIEVGSV9TVEFU VVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCiAgICA+ICsgIEVGSV9NTV9DT01NVU5JQ0FU RV9IRUFERVIgICAgICpDb21tSGVhZGVyOw0KICAgID4gKyAgVkFSX0NIRUNLX1BPTElDWV9DT01N X0hFQURFUiAgKlBvbGljeUhlYWRlcjsNCiAgICA+ICsgIFZPSUQgICAgICAgICAgICAgICAgICAg ICAgICAgICpQb2xpY3lCdWZmZXI7DQogICAgPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAg ICAgICBCdWZmZXJTaXplOw0KICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAg UmVxdWlyZWRTaXplOw0KICAgID4gKw0KICAgID4gKyAgaWYgKE5ld1BvbGljeSA9PSBOVUxMKSB7 DQogICAgPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQogICAgPiArICB9DQog ICAgPiArDQogICAgPiArICAvLyBGaXJzdCwgbWFrZSBzdXJlIHRoYXQgdGhlIHJlcXVpcmVkIHNp emUgZG9lcyBub3QgZXhjZWVkIHRoZSBjYXBhYmlsaXRpZXMNCiAgICA+ICsgIC8vIG9mIHRoZSBN bUNvbW11bmljYXRpb24gYnVmZmVyLg0KICAgID4gKyAgUmVxdWlyZWRTaXplID0gT0ZGU0VUX09G IChFRklfTU1fQ09NTVVOSUNBVEVfSEVBREVSLCBEYXRhKSArIHNpemVvZg0KICAgID4gKFZBUl9D SEVDS19QT0xJQ1lfQ09NTV9IRUFERVIpOw0KICAgID4gKyAgU3RhdHVzICAgICAgID0gU2FmZVVp bnRuQWRkIChSZXF1aXJlZFNpemUsIE5ld1BvbGljeS0+U2l6ZSwgJlJlcXVpcmVkU2l6ZSk7DQog ICAgPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpIHx8IChSZXF1aXJlZFNpemUgPiBtTW1Db21t dW5pY2F0aW9uQnVmZmVyU2l6ZSkpIHsNCiAgICA+ICsgICAgREVCVUcgKCgNCiAgICA+ICsgICAg ICBERUJVR19FUlJPUiwNCiAgICA+ICsgICAgICAiJWEgLSBQb2xpY3kgdG9vIGxhcmdlIGZvciBi dWZmZXIhICVyLCAlZCA+ICVkIFxuIiwNCiAgICA+ICsgICAgICBfX0ZVTkNUSU9OX18sDQogICAg PiArICAgICAgU3RhdHVzLA0KICAgID4gKyAgICAgIFJlcXVpcmVkU2l6ZSwNCiAgICA+ICsgICAg ICBtTW1Db21tdW5pY2F0aW9uQnVmZmVyU2l6ZQ0KICAgID4gKyAgICAgICkpOw0KICAgID4gKyAg ICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQogICAgPiArICB9DQogICAgPiArDQogICAg PiArICBBY3F1aXJlTG9ja09ubHlBdEJvb3RUaW1lICgmbU1tQ29tbXVuaWNhdGlvbkxvY2spOw0K ICAgID4gKw0KICAgID4gKyAgLy8gU2V0IHVwIHRoZSBNTSBjb21tdW5pY2F0aW9uLg0KICAgID4g KyAgQnVmZmVyU2l6ZSAgID0gbU1tQ29tbXVuaWNhdGlvbkJ1ZmZlclNpemU7DQogICAgPiArICBD b21tSGVhZGVyICAgPSBtTW1Db21tdW5pY2F0aW9uQnVmZmVyOw0KICAgID4gKyAgUG9saWN5SGVh ZGVyID0gKFZBUl9DSEVDS19QT0xJQ1lfQ09NTV9IRUFERVIgKikmQ29tbUhlYWRlci0NCiAgICA+ ID5EYXRhOw0KICAgID4gKyAgUG9saWN5QnVmZmVyID0gKFZPSUQgKikoUG9saWN5SGVhZGVyICsg MSk7DQogICAgPiArICBDb3B5R3VpZCAoJkNvbW1IZWFkZXItPkhlYWRlckd1aWQsDQogICAgPiAm Z1ZhckNoZWNrUG9saWN5TGliTW1pSGFuZGxlckd1aWQpOw0KICAgID4gKyAgQ29tbUhlYWRlci0+ TWVzc2FnZUxlbmd0aCA9IEJ1ZmZlclNpemUgLSBPRkZTRVRfT0YNCiAgICA+IChFRklfTU1fQ09N TVVOSUNBVEVfSEVBREVSLCBEYXRhKTsNCiAgICA+ICsgIFBvbGljeUhlYWRlci0+U2lnbmF0dXJl ICAgPSBWQVJfQ0hFQ0tfUE9MSUNZX0NPTU1fU0lHOw0KICAgID4gKyAgUG9saWN5SGVhZGVyLT5S ZXZpc2lvbiAgICA9IFZBUl9DSEVDS19QT0xJQ1lfQ09NTV9SRVZJU0lPTjsNCiAgICA+ICsgIFBv bGljeUhlYWRlci0+Q29tbWFuZCAgICAgPSBWQVJfQ0hFQ0tfUE9MSUNZX0NPTU1BTkRfUkVHSVNU RVI7DQogICAgPiArDQogICAgPiArICAvLyBDb3B5IHRoZSBwb2xpY3kgaW50byBwbGFjZS4gVGhp cyBjb3B5IGlzIHNhZmUgYmVjYXVzZSB3ZSd2ZSBhbHJlYWR5IHRlc3RlZA0KICAgID4gYWJvdmUu DQogICAgPiArICBDb3B5TWVtIChQb2xpY3lCdWZmZXIsIE5ld1BvbGljeSwgTmV3UG9saWN5LT5T aXplKTsNCiAgICA+ICsNCiAgICA+ICsgIFN0YXR1cyA9IEludGVybmFsTW1Db21tdW5pY2F0ZSAo Q29tbUhlYWRlciwgJkJ1ZmZlclNpemUpOw0KICAgID4gKyAgREVCVUcgKChERUJVR19WRVJCT1NF LCAiJWEgLSBNbUNvbW11bmljYXRpb24gcmV0dXJuZWQgJXIuXG4iLA0KICAgID4gX19GVU5DVElP Tl9fLCBTdGF0dXMpKTsNCiAgICA+ICsNCiAgICA+ICsgIFJlbGVhc2VMb2NrT25seUF0Qm9vdFRp bWUgKCZtTW1Db21tdW5pY2F0aW9uTG9jayk7DQogICAgPiArDQogICAgPiArICByZXR1cm4gKEVG SV9FUlJPUiAoU3RhdHVzKSkgPyBTdGF0dXMgOiBQb2xpY3lIZWFkZXItPlJlc3VsdDsNCiAgICA+ ICt9DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBUaGlzIGhlbHBlciBmdW5jdGlvbiB0 YWtlcyBjYXJlIG9mIHRoZSBvdmVyaGVhZCBvZiBmb3JtYXR0aW5nLCBzZW5kaW5nLCBhbmQNCiAg ICA+IGludGVycHJldGluZw0KICAgID4gKyAgdGhlIHJlc3VsdHMgZm9yIGEgc2luZ2xlIER1bXBW YXJpYWJsZVBvbGljeSByZXF1ZXN0Lg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtW2luXSAgICAg IFBhZ2VSZXF1ZXN0ZWQgICBUaGUgcGFnZSBvZiB0aGUgcGFnaW5hdGVkIHJlc3VsdHMgZnJvbSBN TS4NCiAgICA+IDAgZm9yIG1ldGFkYXRhLg0KICAgID4gKyAgQHBhcmFtW291dF0gICAgIFRvdGFs U2l6ZSAgICAgICBUaGUgdG90YWwgc2l6ZSBvZiB0aGUgZW50aXJlIGJ1ZmZlci4gUmV0dXJuZWQg YXMNCiAgICA+IHBhcnQgb2YgbWV0YWRhdGEuDQogICAgPiArICBAcGFyYW1bb3V0XSAgICAgUGFn ZVNpemUgICAgICAgIFRoZSBzaXplIG9mIHRoZSBjdXJyZW50IHBhZ2UgYmVpbmcgcmV0dXJuZWQu IE5vdA0KICAgID4gdmFsaWQgYXMgcGFydCBvZiBtZXRhZGF0YS4NCiAgICA+ICsgIEBwYXJhbVtv dXRdICAgICBIYXNNb3JlICAgICAgICAgQSBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGVyZSBh cmUgbW9yZSBwYWdlcw0KICAgID4gYWZ0ZXIgdGhpcyBvbmUuDQogICAgPiArICBAcGFyYW1bb3V0 XSAgICAgQnVmZmVyICAgICAgICAgIFRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBwYWdlIGZyb20g TU0uDQogICAgPiArDQogICAgPiArICBAcmV0dmFsICAgICBFRklfU1VDQ0VTUyAgICAgICAgICAg ICBPdXRwdXQgcGFyYW1zIGhhdmUgYmVlbiB1cGRhdGVkIChlaXRoZXINCiAgICA+IG1ldGFkYXRh IG9yIGR1bXAgcGFnZSkuDQogICAgPiArICBAcmV0dmFsICAgICBFRklfSU5WQUxJRF9QQVJBTUVU RVIgICBPbmUgb2YgdGhlIG91dHB1dCBwYXJhbXMgaXMgTlVMTC4NCiAgICA+ICsgIEByZXR2YWwg ICAgIE90aGVycyAgICAgICAgICAgICAgICAgIFJlc3BvbnNlIGZyb20gTU0gaGFuZGxlci4NCiAg ICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtTVEFUSUMNCiAgICA+ICtFRklfU1RBVFVTDQogICAg PiArRHVtcFZhcmlhYmxlUG9saWN5SGVscGVyICgNCiAgICA+ICsgIElOICBVSU5UMzIgICBQYWdl UmVxdWVzdGVkLA0KICAgID4gKyAgT1VUIFVJTlQzMiAgICpUb3RhbFNpemUsDQogICAgPiArICBP VVQgVUlOVDMyICAgKlBhZ2VTaXplLA0KICAgID4gKyAgT1VUIEJPT0xFQU4gICpIYXNNb3JlLA0K ICAgID4gKyAgT1VUIFVJTlQ4ICAgICoqQnVmZmVyDQogICAgPiArICApDQogICAgPiArew0KICAg ID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQogICAgPiAr ICBFRklfTU1fQ09NTVVOSUNBVEVfSEVBREVSICAgICAgICAgICpDb21tSGVhZGVyOw0KICAgID4g KyAgVkFSX0NIRUNLX1BPTElDWV9DT01NX0hFQURFUiAgICAgICAqUG9saWN5SGVhZGVyOw0KICAg ID4gKyAgVkFSX0NIRUNLX1BPTElDWV9DT01NX0RVTVBfUEFSQU1TICAqQ29tbWFuZFBhcmFtczsN CiAgICA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyU2l6ZTsN CiAgICA+ICsNCiAgICA+ICsgIGlmICgoVG90YWxTaXplID09IE5VTEwpIHx8IChQYWdlU2l6ZSA9 PSBOVUxMKSB8fCAoSGFzTW9yZSA9PSBOVUxMKSB8fCAoQnVmZmVyDQogICAgPiA9PSBOVUxMKSkg ew0KICAgID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KICAgID4gKyAgfQ0K ICAgID4gKw0KICAgID4gKyAgLy8gU2V0IHVwIHRoZSBNTSBjb21tdW5pY2F0aW9uLg0KICAgID4g KyAgQnVmZmVyU2l6ZSAgICA9IG1NbUNvbW11bmljYXRpb25CdWZmZXJTaXplOw0KICAgID4gKyAg Q29tbUhlYWRlciAgICA9IG1NbUNvbW11bmljYXRpb25CdWZmZXI7DQogICAgPiArICBQb2xpY3lI ZWFkZXIgID0gKFZBUl9DSEVDS19QT0xJQ1lfQ09NTV9IRUFERVIgKikmQ29tbUhlYWRlci0NCiAg ICA+ID5EYXRhOw0KICAgID4gKyAgQ29tbWFuZFBhcmFtcyA9IChWQVJfQ0hFQ0tfUE9MSUNZX0NP TU1fRFVNUF9QQVJBTVMNCiAgICA+ICopKFBvbGljeUhlYWRlciArIDEpOw0KICAgID4gKyAgQ29w eUd1aWQgKCZDb21tSGVhZGVyLT5IZWFkZXJHdWlkLA0KICAgID4gJmdWYXJDaGVja1BvbGljeUxp Yk1taUhhbmRsZXJHdWlkKTsNCiAgICA+ICsgIENvbW1IZWFkZXItPk1lc3NhZ2VMZW5ndGggPSBC dWZmZXJTaXplIC0gT0ZGU0VUX09GDQogICAgPiAoRUZJX01NX0NPTU1VTklDQVRFX0hFQURFUiwg RGF0YSk7DQogICAgPiArICBQb2xpY3lIZWFkZXItPlNpZ25hdHVyZSAgID0gVkFSX0NIRUNLX1BP TElDWV9DT01NX1NJRzsNCiAgICA+ICsgIFBvbGljeUhlYWRlci0+UmV2aXNpb24gICAgPSBWQVJf Q0hFQ0tfUE9MSUNZX0NPTU1fUkVWSVNJT047DQogICAgPiArICBQb2xpY3lIZWFkZXItPkNvbW1h bmQgICAgID0gVkFSX0NIRUNLX1BPTElDWV9DT01NQU5EX0RVTVA7DQogICAgPiArDQogICAgPiAr ICBDb21tYW5kUGFyYW1zLT5QYWdlUmVxdWVzdGVkID0gUGFnZVJlcXVlc3RlZDsNCiAgICA+ICsN CiAgICA+ICsgIFN0YXR1cyA9IEludGVybmFsTW1Db21tdW5pY2F0ZSAoQ29tbUhlYWRlciwgJkJ1 ZmZlclNpemUpOw0KICAgID4gKyAgREVCVUcgKChERUJVR19WRVJCT1NFLCAiJWEgLSBNbUNvbW11 bmljYXRpb24gcmV0dXJuZWQgJXIuXG4iLA0KICAgID4gX19GVU5DVElPTl9fLCBTdGF0dXMpKTsN CiAgICA+ICsNCiAgICA+ICsgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAgPiArICAg IFN0YXR1cyAgICAgPSBQb2xpY3lIZWFkZXItPlJlc3VsdDsNCiAgICA+ICsgICAgKlRvdGFsU2l6 ZSA9IENvbW1hbmRQYXJhbXMtPlRvdGFsU2l6ZTsNCiAgICA+ICsgICAgKlBhZ2VTaXplICA9IENv bW1hbmRQYXJhbXMtPlBhZ2VTaXplOw0KICAgID4gKyAgICAqSGFzTW9yZSAgID0gQ29tbWFuZFBh cmFtcy0+SGFzTW9yZTsNCiAgICA+ICsgICAgKkJ1ZmZlciAgICA9IChVSU5UOCAqKShDb21tYW5k UGFyYW1zICsgMSk7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICByZXR1cm4gU3RhdHVz Ow0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIFRoaXMgQVBJIGZ1bmN0 aW9uIHdpbGwgZHVtcCB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSB2YXJpYWJsZSBwb2xpY3kg dGFibGUuDQogICAgPiArDQogICAgPiArICBTaW1pbGFyIHRvIEdldFZhcmlhYmxlLCB0aGUgZmly c3QgY2FsbCBjYW4gYmUgbWFkZSB3aXRoIGEgMCBzaXplIGFuZCBpdCB3aWxsIHJldHVybg0KICAg ID4gKyAgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciByZXF1aXJlZCB0byBob2xkIHRoZSBlbnRpcmUg dGFibGUuDQogICAgPiArDQogICAgPiArICBAcGFyYW1bb3V0XSAgICAgUG9saWN5ICBQb2ludGVy IHRvIHRoZSBwb2xpY3kgYnVmZmVyLiBDYW4gYmUgTlVMTCBpZiBTaXplIGlzIDAuDQogICAgPiAr ICBAcGFyYW1baW4sb3V0XSAgU2l6ZSAgICBPbiBpbnB1dCwgdGhlIHNpemUgb2YgdGhlIG91dHB1 dCBidWZmZXIuIE9uIG91dHB1dCwgdGhlDQogICAgPiBzaXplDQogICAgPiArICAgICAgICAgICAg ICAgICAgICAgICAgICBvZiB0aGUgZGF0YSByZXR1cm5lZC4NCiAgICA+ICsNCiAgICA+ICsgIEBy ZXR2YWwgICAgIEVGSV9TVUNDRVNTICAgICAgICAgICAgIFBvbGljeSBkYXRhIGlzIGluIHRoZSBv dXRwdXQgYnVmZmVyIGFuZCBTaXplIGhhcw0KICAgID4gYmVlbiB1cGRhdGVkLg0KICAgID4gKyAg QHJldHZhbCAgICAgRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgU2l6ZSBpcyBOVUxMLCBvciBTaXpl IGlzIG5vbi16ZXJvIGFuZA0KICAgID4gUG9saWN5IGlzIE5VTEwuDQogICAgPiArICBAcmV0dmFs ICAgICBFRklfQlVGRkVSX1RPT19TTUFMTCAgICBTaXplIGlzIGluc3VmZmljaWVudCB0byBob2xk IHBvbGljeS4gU2l6ZQ0KICAgID4gdXBkYXRlZCB3aXRoIHJlcXVpcmVkIHNpemUuDQogICAgPiAr DQogICAgPiArKiovDQogICAgPiArU1RBVElDDQogICAgPiArRUZJX1NUQVRVUw0KICAgID4gK0VG SUFQSQ0KICAgID4gK1Byb3RvY29sRHVtcFZhcmlhYmxlUG9saWN5ICgNCiAgICA+ICsgIE9VVCBV SU5UOCAgICAgICpQb2xpY3kgT1BUSU9OQUwsDQogICAgPiArICBJTiBPVVQgVUlOVDMyICAqU2l6 ZQ0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCiAg ICA+ICsgIFVJTlQ4ICAgICAgICpTb3VyY2U7DQogICAgPiArICBVSU5UOCAgICAgICAqRGVzdGlu YXRpb247DQogICAgPiArICBVSU5UMzIgICAgICBQb2xpY3lTaXplOw0KICAgID4gKyAgVUlOVDMy ICAgICAgUGFnZVNpemU7DQogICAgPiArICBCT09MRUFOICAgICBIYXNNb3JlOw0KICAgID4gKyAg VUlOVDMyICAgICAgUGFnZUluZGV4Ow0KICAgID4gKw0KICAgID4gKyAgaWYgKChTaXplID09IE5V TEwpIHx8ICgoKlNpemUgPiAwKSAmJiAoUG9saWN5ID09IE5VTEwpKSkgew0KICAgID4gKyAgICBy ZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4g KyAgQWNxdWlyZUxvY2tPbmx5QXRCb290VGltZSAoJm1NbUNvbW11bmljYXRpb25Mb2NrKTsNCiAg ICA+ICsNCiAgICA+ICsgIC8vIFJlcGVhdCB0aGlzIHdob2xlIHByb2Nlc3MgdW50aWwgd2UgZWl0 aGVyIGhhdmUgYSBmYWlsdXJlIGNhc2Ugb3IgZ2V0IHRoZQ0KICAgID4gZW50aXJlIGJ1ZmZlci4N CiAgICA+ICsgIGRvIHsNCiAgICA+ICsgICAgLy8gRmlyc3QsIHdlIG11c3QgY2hlY2sgdGhlIHpl cm8gcGFnZSB0byBkZXRlcm1pbmUgdGhlIGJ1ZmZlciBzaXplIGFuZA0KICAgID4gKyAgICAvLyBy ZXNldCB0aGUgaW50ZXJuYWwgc3RhdGUuDQogICAgPiArICAgIFBvbGljeVNpemUgPSAwOw0KICAg ID4gKyAgICBQYWdlU2l6ZSAgID0gMDsNCiAgICA+ICsgICAgSGFzTW9yZSAgICA9IEZBTFNFOw0K ICAgID4gKyAgICBTdGF0dXMgICAgID0gRHVtcFZhcmlhYmxlUG9saWN5SGVscGVyICgwLCAmUG9s aWN5U2l6ZSwgJlBhZ2VTaXplLCAmSGFzTW9yZSwNCiAgICA+ICZTb3VyY2UpOw0KICAgID4gKyAg ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAgPiArICAgICAgYnJlYWs7DQogICAgPiAr ICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgLy8gSWYgd2UncmUgZ29vZCwgd2UgY2FuIGF0IGxl YXN0IGNoZWNrIHRoZSByZXF1aXJlZCBzaXplIG5vdy4NCiAgICA+ICsgICAgaWYgKCpTaXplIDwg UG9saWN5U2l6ZSkgew0KICAgID4gKyAgICAgICpTaXplICA9IFBvbGljeVNpemU7DQogICAgPiAr ICAgICAgU3RhdHVzID0gRUZJX0JVRkZFUl9UT09fU01BTEw7DQogICAgPiArICAgICAgYnJlYWs7 DQogICAgPiArICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgLy8gT24gZnVydGhlciB0aG91Z2h0 LCBsZXQncyB1cGRhdGUgdGhlIHNpemUgZWl0aGVyIHdheS4NCiAgICA+ICsgICAgKlNpemUgPSBQ b2xpY3lTaXplOw0KICAgID4gKyAgICAvLyBBbmQgZ2V0IHJlYWR5IHRvIFJPQ0suDQogICAgPiAr ICAgIERlc3RpbmF0aW9uID0gUG9saWN5Ow0KICAgID4gKw0KICAgID4gKyAgICAvLyBLZWVwIGxv b3BpbmcgYW5kIGNvcHlpbmcgdW50aWwgd2UncmUgZWl0aGVyIGRvbmUgb3IgZnJlYWsgb3V0Lg0K ICAgID4gKyAgICBmb3IgKFBhZ2VJbmRleCA9IDE7ICFFRklfRVJST1IgKFN0YXR1cykgJiYgSGFz TW9yZSAmJiBQYWdlSW5kZXggPA0KICAgID4gTUFYX1VJTlQzMjsgUGFnZUluZGV4KyspIHsNCiAg ICA+ICsgICAgICBTdGF0dXMgPSBEdW1wVmFyaWFibGVQb2xpY3lIZWxwZXIgKFBhZ2VJbmRleCwg JlBvbGljeVNpemUsICZQYWdlU2l6ZSwNCiAgICA+ICZIYXNNb3JlLCAmU291cmNlKTsNCiAgICA+ ICsgICAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgID4gKyAgICAgICAgQ29weU1l bSAoRGVzdGluYXRpb24sIFNvdXJjZSwgUGFnZVNpemUpOw0KICAgID4gKyAgICAgICAgRGVzdGlu YXRpb24gKz0gUGFnZVNpemU7DQogICAgPiArICAgICAgfQ0KICAgID4gKyAgICB9DQogICAgPiAr DQogICAgPiArICAgIC8vIE5leHQsIHdlIGNoZWNrIHRvIHNlZSB3aGV0aGVyDQogICAgPiArICB9 IHdoaWxlIChTdGF0dXMgPT0gRUZJX1RJTUVPVVQpOw0KICAgID4gKw0KICAgID4gKyAgUmVsZWFz ZUxvY2tPbmx5QXRCb290VGltZSAoJm1NbUNvbW11bmljYXRpb25Mb2NrKTsNCiAgICA+ICsNCiAg ICA+ICsgIC8vIFRoZXJlJ3MgY3VycmVudGx5IG5vIHVzZSBmb3IgdGhpcywgYnV0IGl0IHNob3Vs ZG4ndCBiZSBoYXJkIHRvIGltcGxlbWVudC4NCiAgICA+ICsgIHJldHVybiBTdGF0dXM7DQogICAg PiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgVGhpcyBBUEkgZnVuY3Rpb24gbG9j a3MgdGhlIGludGVyZmFjZSBzbyB0aGF0IG5vIG1vcmUgcG9saWN5IHVwZGF0ZXMNCiAgICA+ICsg IGNhbiBiZSBwZXJmb3JtZWQgb3IgY2hhbmdlcyBtYWRlIHRvIHRoZSBlbmZvcmNlbWVudCB1bnRp bCB0aGUgbmV4dCBib290Lg0KICAgID4gKw0KICAgID4gKyAgQHJldHZhbCAgICAgRUZJX1NVQ0NF U1MNCiAgICA+ICsgIEByZXR2YWwgICAgIE90aGVycyAgICAgICAgQW4gZXJyb3IgaGFzIHByZXZl bnRlZCB0aGlzIGNvbW1hbmQgZnJvbSBjb21wbGV0aW5nLg0KICAgID4gKw0KICAgID4gKyoqLw0K ICAgID4gK1NUQVRJQw0KICAgID4gK0VGSV9TVEFUVVMNCiAgICA+ICtFRklBUEkNCiAgICA+ICtQ cm90b2NvbExvY2tWYXJpYWJsZVBvbGljeSAoDQogICAgPiArICBWT0lEDQogICAgPiArICApDQog ICAgPiArew0KICAgID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0K ICAgID4gKyAgRUZJX01NX0NPTU1VTklDQVRFX0hFQURFUiAgICAgKkNvbW1IZWFkZXI7DQogICAg PiArICBWQVJfQ0hFQ0tfUE9MSUNZX0NPTU1fSEVBREVSICAqUG9saWN5SGVhZGVyOw0KICAgID4g KyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyU2l6ZTsNCiAgICA+ICsNCiAg ICA+ICsgIEFjcXVpcmVMb2NrT25seUF0Qm9vdFRpbWUgKCZtTW1Db21tdW5pY2F0aW9uTG9jayk7 DQogICAgPiArDQogICAgPiArICAvLyBTZXQgdXAgdGhlIE1NIGNvbW11bmljYXRpb24uDQogICAg PiArICBCdWZmZXJTaXplICAgPSBtTW1Db21tdW5pY2F0aW9uQnVmZmVyU2l6ZTsNCiAgICA+ICsg IENvbW1IZWFkZXIgICA9IG1NbUNvbW11bmljYXRpb25CdWZmZXI7DQogICAgPiArICBQb2xpY3lI ZWFkZXIgPSAoVkFSX0NIRUNLX1BPTElDWV9DT01NX0hFQURFUiAqKSZDb21tSGVhZGVyLQ0KICAg ID4gPkRhdGE7DQogICAgPiArICBDb3B5R3VpZCAoJkNvbW1IZWFkZXItPkhlYWRlckd1aWQsDQog ICAgPiAmZ1ZhckNoZWNrUG9saWN5TGliTW1pSGFuZGxlckd1aWQpOw0KICAgID4gKyAgQ29tbUhl YWRlci0+TWVzc2FnZUxlbmd0aCA9IEJ1ZmZlclNpemUgLSBPRkZTRVRfT0YNCiAgICA+IChFRklf TU1fQ09NTVVOSUNBVEVfSEVBREVSLCBEYXRhKTsNCiAgICA+ICsgIFBvbGljeUhlYWRlci0+U2ln bmF0dXJlICAgPSBWQVJfQ0hFQ0tfUE9MSUNZX0NPTU1fU0lHOw0KICAgID4gKyAgUG9saWN5SGVh ZGVyLT5SZXZpc2lvbiAgICA9IFZBUl9DSEVDS19QT0xJQ1lfQ09NTV9SRVZJU0lPTjsNCiAgICA+ ICsgIFBvbGljeUhlYWRlci0+Q29tbWFuZCAgICAgPSBWQVJfQ0hFQ0tfUE9MSUNZX0NPTU1BTkRf TE9DSzsNCiAgICA+ICsNCiAgICA+ICsgIFN0YXR1cyA9IEludGVybmFsTW1Db21tdW5pY2F0ZSAo Q29tbUhlYWRlciwgJkJ1ZmZlclNpemUpOw0KICAgID4gKyAgREVCVUcgKChERUJVR19WRVJCT1NF LCAiJWEgLSBNbUNvbW11bmljYXRpb24gcmV0dXJuZWQgJXIuXG4iLA0KICAgID4gX19GVU5DVElP Tl9fLCBTdGF0dXMpKTsNCiAgICA+ICsNCiAgICA+ICsgIFJlbGVhc2VMb2NrT25seUF0Qm9vdFRp bWUgKCZtTW1Db21tdW5pY2F0aW9uTG9jayk7DQogICAgPiArDQogICAgPiArICByZXR1cm4gKEVG SV9FUlJPUiAoU3RhdHVzKSkgPyBTdGF0dXMgOiBQb2xpY3lIZWFkZXItPlJlc3VsdDsNCiAgICA+ ICt9DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBUaGlzIGhlbHBlciBmdW5jdGlvbiBs b2NhdGVzIHRoZSBzaGFyZWQgY29tbSBidWZmZXIgYW5kIGFzc2lnbnMgaXQgdG8gaW5wdXQNCiAg ICA+IHBvaW50ZXJzLg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtW2luLG91dF0gIEJ1ZmZlclNp emUgICAgICBPbiBpbnB1dCwgdGhlIG1pbmltdW0gYnVmZmVyIHNpemUgcmVxdWlyZWQNCiAgICA+ IElOQ0xVRElORyB0aGUgTU0gY29tbXVuaWNhdGUgaGVhZGVyLg0KICAgID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBPbiBvdXRwdXQsIHRoZSBzaXplIG9mIHRoZSBtYXRjaGlu ZyBidWZmZXIgZm91bmQuDQogICAgPiArICBAcGFyYW1bb3V0XSAgICAgTG9jYXRlZEJ1ZmZlciAg IEEgcG9pbnRlciB0byB0aGUgbWF0Y2hpbmcgYnVmZmVyLg0KICAgID4gKw0KICAgID4gKyAgQHJl dHZhbCAgICAgRUZJX1NVQ0NFU1MNCiAgICA+ICsgIEByZXR2YWwgICAgIEVGSV9JTlZBTElEX1BB UkFNRVRFUiAgIE9uZSBvZiB0aGUgb3V0cHV0IHBvaW50ZXJzIHdhcyBOVUxMLg0KICAgID4gKyAg QHJldHZhbCAgICAgRUZJX09VVF9PRl9SRVNPVVJDRVMgICAgTm90IGVub3VnaCBtZW1vcnkgdG8g YWxsb2NhdGUgYQ0KICAgID4gY29tbSBidWZmZXIuDQogICAgPiArDQogICAgPiArKiovDQogICAg PiArU1RBVElDDQogICAgPiArRUZJX1NUQVRVUw0KICAgID4gK0luaXRNbUNvbW1vbkNvbW1CdWZm ZXIgKA0KICAgID4gKyAgSU4gT1VUICBVSU5UTiAgKkJ1ZmZlclNpemUsDQogICAgPiArICBPVVQg ICAgIFZPSUQgICAqKkxvY2F0ZWRCdWZmZXINCiAgICA+ICsgICkNCiAgICA+ICt7DQogICAgPiAr ICBFRklfU1RBVFVTICBTdGF0dXM7DQogICAgPiArDQogICAgPiArICBTdGF0dXMgPSBFRklfU1VD Q0VTUzsNCiAgICA+ICsNCiAgICA+ICsgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcg d2l0aCBnb29kIHBvaW50ZXJzLg0KICAgID4gKyAgaWYgKChCdWZmZXJTaXplID09IE5VTEwpIHx8 IChMb2NhdGVkQnVmZmVyID09IE5VTEwpKSB7DQogICAgPiArICAgIHJldHVybiBFRklfSU5WQUxJ RF9QQVJBTUVURVI7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICAvLyBBbGxvY2F0ZSB0 aGUgcnVudGltZSBtZW1vcnkgZm9yIHRoZSBjb21tIGJ1ZmZlci4NCiAgICA+ICsgICpMb2NhdGVk QnVmZmVyID0gQWxsb2NhdGVSdW50aW1lUG9vbCAoKkJ1ZmZlclNpemUpOw0KICAgID4gKyAgaWYg KCpMb2NhdGVkQnVmZmVyID09IE5VTEwpIHsNCiAgICA+ICsgICAgU3RhdHVzICAgICAgPSBFRklf T1VUX09GX1JFU09VUkNFUzsNCiAgICA+ICsgICAgKkJ1ZmZlclNpemUgPSAwOw0KICAgID4gKyAg fQ0KICAgID4gKw0KICAgID4gKyAgRWZpSW5pdGlhbGl6ZUxvY2sgKCZtTW1Db21tdW5pY2F0aW9u TG9jaywgVFBMX05PVElGWSk7DQogICAgPiArDQogICAgPiArICByZXR1cm4gU3RhdHVzOw0KICAg ID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIENvbnZlcnQgaW50ZXJuYWwgcG9p bnRlciBhZGRyZXNzZXMgdG8gdmlydHVhbCBhZGRyZXNzZXMuDQogICAgPiArDQogICAgPiArICBA cGFyYW1baW5dIEV2ZW50ICAgICAgRXZlbnQgd2hvc2Ugbm90aWZpY2F0aW9uIGZ1bmN0aW9uIGlz IGJlaW5nIGludm9rZWQuDQogICAgPiArICBAcGFyYW1baW5dIENvbnRleHQgICAgVGhlIHBvaW50 ZXIgdG8gdGhlIG5vdGlmaWNhdGlvbiBmdW5jdGlvbidzIGNvbnRleHQsDQogICAgPiB3aGljaA0K ICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIGltcGxlbWVudGF0aW9uLWRlcGVuZGVu dC4NCiAgICA+ICsqKi8NCiAgICA+ICtTVEFUSUMNCiAgICA+ICtWT0lEDQogICAgPiArRUZJQVBJ DQogICAgPiArVmFyaWFibGVQb2xpY3lWaXJ0dWFsQWRkcmVzc0NhbGxiYWNrICgNCiAgICA+ICsg IElOICBFRklfRVZFTlQgIEV2ZW50LA0KICAgID4gKyAgSU4gIFZPSUQgICAgICAgKkNvbnRleHQN CiAgICA+ICsgICkNCiAgICA+ICt7DQogICAgPiArICBFZmlDb252ZXJ0UG9pbnRlciAoMCwgKFZP SUQgKiopJm1NbUNvbW11bmljYXRpb24pOw0KICAgID4gKyAgRWZpQ29udmVydFBvaW50ZXIgKDAs IChWT0lEICoqKSZtTW1Db21tdW5pY2F0aW9uQnVmZmVyKTsNCiAgICA+ICt9DQogICAgPiArDQog ICAgPiArLyoqDQogICAgPiArICBUaGUgZHJpdmVyJ3MgZW50cnkgcG9pbnQuDQogICAgPiArDQog ICAgPiArICBAcGFyYW1baW5dIEltYWdlSGFuZGxlICBUaGUgZmlybXdhcmUgYWxsb2NhdGVkIGhh bmRsZSBmb3IgdGhlIEVGSSBpbWFnZS4NCiAgICA+ICsgIEBwYXJhbVtpbl0gU3lzdGVtVGFibGUg IEEgcG9pbnRlciB0byB0aGUgRUZJIFN5c3RlbSBUYWJsZS4NCiAgICA+ICsNCiAgICA+ICsgIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgIFRoZSBlbnRyeSBwb2ludCBleGVjdXRlZCBzdWNjZXNzZnVs bHkuDQogICAgPiArICBAcmV0dmFsIG90aGVyICAgICAgICAgICBTb21lIGVycm9yIG9jY3VyZWQg d2hlbiBleGVjdXRpbmcgdGhpcyBlbnRyeSBwb2ludC4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAg ICA+ICtFRklfU1RBVFVTDQogICAgPiArRUZJQVBJDQogICAgPiArVmFyaWFibGVQb2xpY3lTbW1E eGVNYWluICgNCiAgICA+ICsgIElOICAgIEVGSV9IQU5ETEUgICAgICAgIEltYWdlSGFuZGxlLA0K ICAgID4gKyAgSU4gICAgRUZJX1NZU1RFTV9UQUJMRSAgKlN5c3RlbVRhYmxlDQogICAgPiArICAp DQogICAgPiArew0KICAgID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KICAgID4gKyAgQk9PTEVB TiAgICAgUHJvdG9jb2xJbnN0YWxsZWQ7DQogICAgPiArICBCT09MRUFOICAgICBWaXJ0dWFsQWRk cmVzc0NoYW5nZVJlZ2lzdGVyZWQ7DQogICAgPiArICBFRklfRVZFTlQgICBWaXJ0dWFsQWRkcmVz c0NoYW5nZUV2ZW50Ow0KICAgID4gKw0KICAgID4gKyAgU3RhdHVzICAgICAgICAgICAgICAgICAg ICAgICAgID0gRUZJX1NVQ0NFU1M7DQogICAgPiArICBQcm90b2NvbEluc3RhbGxlZCAgICAgICAg ICAgICAgPSBGQUxTRTsNCiAgICA+ICsgIFZpcnR1YWxBZGRyZXNzQ2hhbmdlUmVnaXN0ZXJlZCA9 IEZBTFNFOw0KICAgID4gKw0KICAgID4gKyAgLy8gVXBkYXRlIHRoZSBtaW5pbXVtIGJ1ZmZlciBz aXplLg0KICAgID4gKyAgbU1tQ29tbXVuaWNhdGlvbkJ1ZmZlclNpemUgPQ0KICAgID4gVkFSX0NI RUNLX1BPTElDWV9NTV9DT01NX0JVRkZFUl9TSVpFOw0KICAgID4gKyAgLy8gTG9jYXRlIHRoZSBz aGFyZWQgY29tbSBidWZmZXIgdG8gdXNlIGZvciBzZW5kaW5nIE1NIGNvbW1hbmRzLg0KICAgID4g KyAgU3RhdHVzID0gSW5pdE1tQ29tbW9uQ29tbUJ1ZmZlciAoJm1NbUNvbW11bmljYXRpb25CdWZm ZXJTaXplLA0KICAgID4gJm1NbUNvbW11bmljYXRpb25CdWZmZXIpOw0KICAgID4gKyAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KICAgID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWEg LSBGYWlsZWQgdG8gbG9jYXRlIGEgdmlhYmxlIE1NIGNvbW0NCiAgICA+IGJ1ZmZlciEgJXJcbiIs IF9fRlVOQ1RJT05fXywgU3RhdHVzKSk7DQogICAgPiArICAgIEFTU0VSVF9FRklfRVJST1IgKFN0 YXR1cyk7DQogICAgPiArICAgIHJldHVybiBTdGF0dXM7DQogICAgPiArICB9DQogICAgPiArDQog ICAgPiArICAvLyBMb2NhdGUgdGhlIE1tQ29tbXVuaWNhdGlvbiBwcm90b2NvbC4NCiAgICA+ICsg IFN0YXR1cyA9IGdCUy0+TG9jYXRlUHJvdG9jb2wgKCZnRWZpTW1Db21tdW5pY2F0aW9uMlByb3Rv Y29sR3VpZCwgTlVMTCwNCiAgICA+IChWT0lEICoqKSZtTW1Db21tdW5pY2F0aW9uKTsNCiAgICA+ ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCiAgICA+ICsgICAgREVCVUcgKChERUJVR19F UlJPUiwgIiVhIC0gRmFpbGVkIHRvIGxvY2F0ZSBNbUNvbW11bmljYXRpb24NCiAgICA+IHByb3Rv Y29sISAlclxuIiwgX19GVU5DVElPTl9fLCBTdGF0dXMpKTsNCiAgICA+ICsgICAgQVNTRVJUX0VG SV9FUlJPUiAoU3RhdHVzKTsNCiAgICA+ICsgICAgcmV0dXJuIFN0YXR1czsNCiAgICA+ICsgIH0N CiAgICA+ICsNCiAgICA+ICsgIC8vIENvbmZpZ3VyZSB0aGUgVmFyaWFibGVQb2xpY3kgcHJvdG9j b2wgc3RydWN0dXJlLg0KICAgID4gKyAgbVZhcmlhYmxlUG9saWN5UHJvdG9jb2wuUmV2aXNpb24g ICAgICAgICAgICAgICAgPQ0KICAgID4gRURLSUlfVkFSSUFCTEVfUE9MSUNZX1BST1RPQ09MX1JF VklTSU9OOw0KICAgID4gKyAgbVZhcmlhYmxlUG9saWN5UHJvdG9jb2wuRGlzYWJsZVZhcmlhYmxl UG9saWN5ICAgPQ0KICAgID4gUHJvdG9jb2xEaXNhYmxlVmFyaWFibGVQb2xpY3k7DQogICAgPiAr ICBtVmFyaWFibGVQb2xpY3lQcm90b2NvbC5Jc1ZhcmlhYmxlUG9saWN5RW5hYmxlZCA9DQogICAg PiBQcm90b2NvbElzVmFyaWFibGVQb2xpY3lFbmFibGVkOw0KICAgID4gKyAgbVZhcmlhYmxlUG9s aWN5UHJvdG9jb2wuUmVnaXN0ZXJWYXJpYWJsZVBvbGljeSAgPQ0KICAgID4gUHJvdG9jb2xSZWdp c3RlclZhcmlhYmxlUG9saWN5Ow0KICAgID4gKyAgbVZhcmlhYmxlUG9saWN5UHJvdG9jb2wuRHVt cFZhcmlhYmxlUG9saWN5ICAgICAgPQ0KICAgID4gUHJvdG9jb2xEdW1wVmFyaWFibGVQb2xpY3k7 DQogICAgPiArICBtVmFyaWFibGVQb2xpY3lQcm90b2NvbC5Mb2NrVmFyaWFibGVQb2xpY3kgICAg ICA9IFByb3RvY29sTG9ja1ZhcmlhYmxlUG9saWN5Ow0KICAgID4gKw0KICAgID4gKyAgLy8gUmVn aXN0ZXIgYWxsIHRoZSBwcm90b2NvbHMgYW5kIHJldHVybiB0aGUgc3RhdHVzLg0KICAgID4gKyAg U3RhdHVzID0gZ0JTLT5JbnN0YWxsTXVsdGlwbGVQcm90b2NvbEludGVyZmFjZXMgKA0KICAgID4g KyAgICAgICAgICAgICAgICAgICZJbWFnZUhhbmRsZSwNCiAgICA+ICsgICAgICAgICAgICAgICAg ICAmZ0Vka2lpVmFyaWFibGVQb2xpY3lQcm90b2NvbEd1aWQsDQogICAgPiArICAgICAgICAgICAg ICAgICAgJm1WYXJpYWJsZVBvbGljeVByb3RvY29sLA0KICAgID4gKyAgICAgICAgICAgICAgICAg IE5VTEwNCiAgICA+ICsgICAgICAgICAgICAgICAgICApOw0KICAgID4gKyAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KICAgID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWEgLSBGYWls ZWQgdG8gaW5zdGFsbCBwcm90b2NvbCEgJXJcbiIsDQogICAgPiBfX0ZVTkNUSU9OX18sIFN0YXR1 cykpOw0KICAgID4gKyAgICBnb3RvIEV4aXQ7DQogICAgPiArICB9IGVsc2Ugew0KICAgID4gKyAg ICBQcm90b2NvbEluc3RhbGxlZCA9IFRSVUU7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiAr ICAvLyBOb3JtYWxseSwgd2UgbWlnaHQgd2FudCB0byByZWdpc3RlciBhIGNhbGxiYWNrDQogICAg PiArICAvLyB0byBsb2NrIHRoZSBpbnRlcmZhY2UsIGJ1dCB0aGlzIGlzIGludGVncmF0ZWQNCiAg ICA+ICsgIC8vIGludG8gdGhlIGV4aXN0aW5nIGNhbGxiYWNrcyBpbiBWYXJhaWFibGVTbW0uYw0K ICAgID4gKyAgLy8gYW5kIFZhcmlhYmxlRHhlLmMuDQogICAgPiArDQogICAgPiArICAvLw0KICAg ID4gKyAgLy8gUmVnaXN0ZXIgYSBWaXJ0dWFsQWRkcmVzc0NoYW5nZSBjYWxsYmFjayBmb3IgdGhl IE1tQ29tbSBwcm90b2NvbCBhbmQNCiAgICA+IENvbW0gYnVmZmVyLg0KICAgID4gKyAgU3RhdHVz ID0gZ0JTLT5DcmVhdGVFdmVudEV4ICgNCiAgICA+ICsgICAgICAgICAgICAgICAgICBFVlRfTk9U SUZZX1NJR05BTCwNCiAgICA+ICsgICAgICAgICAgICAgICAgICBUUExfTk9USUZZLA0KICAgID4g KyAgICAgICAgICAgICAgICAgIFZhcmlhYmxlUG9saWN5VmlydHVhbEFkZHJlc3NDYWxsYmFjaywN CiAgICA+ICsgICAgICAgICAgICAgICAgICBOVUxMLA0KICAgID4gKyAgICAgICAgICAgICAgICAg ICZnRWZpRXZlbnRWaXJ0dWFsQWRkcmVzc0NoYW5nZUd1aWQsDQogICAgPiArICAgICAgICAgICAg ICAgICAgJlZpcnR1YWxBZGRyZXNzQ2hhbmdlRXZlbnQNCiAgICA+ICsgICAgICAgICAgICAgICAg ICApOw0KICAgID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgID4gKyAgICBERUJV RyAoKERFQlVHX0VSUk9SLCAiJWEgLSBGYWlsZWQgdG8gY3JlYXRlIFZpcnR1YWxBZGRyZXNzQ2hh bmdlDQogICAgPiBldmVudCEgJXJcbiIsIF9fRlVOQ1RJT05fXywgU3RhdHVzKSk7DQogICAgPiAr ICAgIGdvdG8gRXhpdDsNCiAgICA+ICsgIH0gZWxzZSB7DQogICAgPiArICAgIFZpcnR1YWxBZGRy ZXNzQ2hhbmdlUmVnaXN0ZXJlZCA9IFRSVUU7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiAr RXhpdDoNCiAgICA+ICsgIC8vDQogICAgPiArICAvLyBJZiB3ZSdyZSBhYm91dCB0byByZXR1cm4g YSBmYWlsZWQgc3RhdHVzIChhbmQgdW5sb2FkIHRoaXMgZHJpdmVyKSwgd2UgbXVzdCBmaXJzdA0K ICAgID4gdW5kbyBhbnl0aGluZyB0aGF0DQogICAgPiArICAvLyBoYXMgYmVlbiBzdWNjZXNzZnVs bHkgZG9uZS4NCiAgICA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCiAgICA+ICsgICAg aWYgKFByb3RvY29sSW5zdGFsbGVkKSB7DQogICAgPiArICAgICAgZ0JTLT5Vbmluc3RhbGxQcm90 b2NvbEludGVyZmFjZSAoJkltYWdlSGFuZGxlLA0KICAgID4gJmdFZGtpaVZhcmlhYmxlUG9saWN5 UHJvdG9jb2xHdWlkLCAmbVZhcmlhYmxlUG9saWN5UHJvdG9jb2wpOw0KICAgID4gKyAgICB9DQog ICAgPiArDQogICAgPiArICAgIGlmIChWaXJ0dWFsQWRkcmVzc0NoYW5nZVJlZ2lzdGVyZWQpIHsN CiAgICA+ICsgICAgICBnQlMtPkNsb3NlRXZlbnQgKFZpcnR1YWxBZGRyZXNzQ2hhbmdlRXZlbnQp Ow0KICAgID4gKyAgICB9DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICByZXR1cm4gU3Rh dHVzOw0KICAgID4gK30NCiAgICA+IGRpZmYgLS1naXQNCiAgICA+IGEvTWRlTW9kdWxlUGtnL1Vu aXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZVJ1bnRpbWVDDQog ICAgPiBhY2hlLmMNCiAgICA+IGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90 ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZVJ1bnRpbWVDDQogICAgPiBhY2hlLmMNCiAgICA+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgPiBpbmRleCAwMDAwMDAwMDAwMDAuLjliYjMwYmMxZTgw NA0KICAgID4gLS0tIC9kZXYvbnVsbA0KICAgID4gKysrDQogICAgPiBiL01kZU1vZHVsZVBrZy9V bml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVSdW50aW1lQw0K ICAgID4gYWNoZS5jDQogICAgPiBAQCAtMCwwICsxLDE1OCBAQA0KICAgID4gKy8qKiBAZmlsZQ0K ICAgID4gKyAgRnVuY3Rpb25zIHJlbGF0ZWQgdG8gbWFuYWdpbmcgdGhlIFVFRkkgdmFyaWFibGUg cnVudGltZSBjYWNoZS4gVGhpcyBmaWxlDQogICAgPiBzaG91bGQgb25seSBpbmNsdWRlIGZ1bmN0 aW9ucw0KICAgID4gKyAgdXNlZCBieSB0aGUgU01NIFVFRkkgdmFyaWFibGUgZHJpdmVyLg0KICAg ID4gKw0KICAgID4gKyAgQ2F1dGlvbjogVGhpcyBtb2R1bGUgcmVxdWlyZXMgYWRkaXRpb25hbCBy ZXZpZXcgd2hlbiBtb2RpZmllZC4NCiAgICA+ICsgIFRoaXMgZHJpdmVyIHdpbGwgaGF2ZSBleHRl cm5hbCBpbnB1dCAtIHZhcmlhYmxlIGRhdGEuIFRoZXkgbWF5IGJlIGlucHV0IGluIFNNTQ0KICAg ID4gbW9kZS4NCiAgICA+ICsgIFRoaXMgZXh0ZXJuYWwgaW5wdXQgbXVzdCBiZSB2YWxpZGF0ZWQg Y2FyZWZ1bGx5IHRvIGF2b2lkIHNlY3VyaXR5IGlzc3VlIGxpa2UNCiAgICA+ICsgIGJ1ZmZlciBv dmVyZmxvdywgaW50ZWdlciBvdmVyZmxvdy4NCiAgICA+ICsNCiAgICA+ICtDb3B5cmlnaHQgKGMp IDIwMTksIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCiAgICA+ ICtTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KICAgID4gKw0K ICAgID4gKyoqLw0KICAgID4gKw0KICAgID4gKyNpbmNsdWRlICJWYXJpYWJsZVBhcnNpbmcuaCIN CiAgICA+ICsjaW5jbHVkZSAiVmFyaWFibGVSdW50aW1lQ2FjaGUuaCINCiAgICA+ICsNCiAgICA+ ICtleHRlcm4gVkFSSUFCTEVfTU9EVUxFX0dMT0JBTCAgKm1WYXJpYWJsZU1vZHVsZUdsb2JhbDsN CiAgICA+ICtleHRlcm4gVkFSSUFCTEVfU1RPUkVfSEVBREVSICAgKm1OdlZhcmlhYmxlQ2FjaGU7 DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBDb3BpZXMgYW55IHBlbmRpbmcgdXBkYXRl cyB0byBydW50aW1lIHZhcmlhYmxlIGNhY2hlcy4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwg RUZJX1VOU1VQUE9SVEVEICAgICAgICAgVGhlIHZvbGF0aWxlIHN0b3JlIHRvIGJlIHVwZGF0ZWQg aXMgbm90DQogICAgPiBpbml0aWFsaXplZCBwcm9wZXJseS4NCiAgICA+ICsgIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgICAgVGhlIHZvbGF0aWxlIHN0b3JlIHdhcyB1cGRhdGVkIHN1Y2Nl c3NmdWxseS4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtFRklfU1RBVFVTDQogICAgPiAr Rmx1c2hQZW5kaW5nUnVudGltZVZhcmlhYmxlQ2FjaGVVcGRhdGVzICgNCiAgICA+ICsgIFZPSUQN CiAgICA+ICsgICkNCiAgICA+ICt7DQogICAgPiArICBWQVJJQUJMRV9SVU5USU1FX0NBQ0hFX0NP TlRFWFQgICpWYXJpYWJsZVJ1bnRpbWVDYWNoZUNvbnRleHQ7DQogICAgPiArDQogICAgPiArICBW YXJpYWJsZVJ1bnRpbWVDYWNoZUNvbnRleHQgPSAmbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KICAg ID4gPlZhcmlhYmxlR2xvYmFsLlZhcmlhYmxlUnVudGltZUNhY2hlQ29udGV4dDsNCiAgICA+ICsN CiAgICA+ICsgIGlmICgoVmFyaWFibGVSdW50aW1lQ2FjaGVDb250ZXh0LT5WYXJpYWJsZVJ1bnRp bWVOdkNhY2hlLlN0b3JlID09IE5VTEwpDQogICAgPiB8fA0KICAgID4gKyAgICAgIChWYXJpYWJs ZVJ1bnRpbWVDYWNoZUNvbnRleHQtPlZhcmlhYmxlUnVudGltZVZvbGF0aWxlQ2FjaGUuU3RvcmUg PT0NCiAgICA+IE5VTEwpIHx8DQogICAgPiArICAgICAgKFZhcmlhYmxlUnVudGltZUNhY2hlQ29u dGV4dC0+UGVuZGluZ1VwZGF0ZSA9PSBOVUxMKSkNCiAgICA+ICsgIHsNCiAgICA+ICsgICAgcmV0 dXJuIEVGSV9VTlNVUFBPUlRFRDsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIGlmICgq KFZhcmlhYmxlUnVudGltZUNhY2hlQ29udGV4dC0+UGVuZGluZ1VwZGF0ZSkpIHsNCiAgICA+ICsg ICAgaWYgKChWYXJpYWJsZVJ1bnRpbWVDYWNoZUNvbnRleHQtPlZhcmlhYmxlUnVudGltZUhvYkNh Y2hlLlN0b3JlICE9DQogICAgPiBOVUxMKSAmJg0KICAgID4gKyAgICAgICAgKG1WYXJpYWJsZU1v ZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuSG9iVmFyaWFibGVCYXNlID4gMCkpDQogICAgPiAr ICAgIHsNCiAgICA+ICsgICAgICBDb3B5TWVtICgNCiAgICA+ICsgICAgICAgIChWT0lEICopKA0K ICAgID4gKyAgICAgICAgICAgICAgICAgKChVSU5UOCAqKShVSU5UTilWYXJpYWJsZVJ1bnRpbWVD YWNoZUNvbnRleHQtDQogICAgPiA+VmFyaWFibGVSdW50aW1lSG9iQ2FjaGUuU3RvcmUpICsNCiAg ICA+ICsgICAgICAgICAgICAgICAgIFZhcmlhYmxlUnVudGltZUNhY2hlQ29udGV4dC0NCiAgICA+ ID5WYXJpYWJsZVJ1bnRpbWVIb2JDYWNoZS5QZW5kaW5nVXBkYXRlT2Zmc2V0DQogICAgPiArICAg ICAgICAgICAgICAgICApLA0KICAgID4gKyAgICAgICAgKFZPSUQgKikoDQogICAgPiArICAgICAg ICAgICAgICAgICAoKFVJTlQ4ICopKFVJTlROKW1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCiAgICA+ ID5WYXJpYWJsZUdsb2JhbC5Ib2JWYXJpYWJsZUJhc2UpICsNCiAgICA+ICsgICAgICAgICAgICAg ICAgIFZhcmlhYmxlUnVudGltZUNhY2hlQ29udGV4dC0NCiAgICA+ID5WYXJpYWJsZVJ1bnRpbWVI b2JDYWNoZS5QZW5kaW5nVXBkYXRlT2Zmc2V0DQogICAgPiArICAgICAgICAgICAgICAgICApLA0K ICAgID4gKyAgICAgICAgVmFyaWFibGVSdW50aW1lQ2FjaGVDb250ZXh0LQ0KICAgID4gPlZhcmlh YmxlUnVudGltZUhvYkNhY2hlLlBlbmRpbmdVcGRhdGVMZW5ndGgNCiAgICA+ICsgICAgICAgICk7 DQogICAgPiArICAgICAgVmFyaWFibGVSdW50aW1lQ2FjaGVDb250ZXh0LQ0KICAgID4gPlZhcmlh YmxlUnVudGltZUhvYkNhY2hlLlBlbmRpbmdVcGRhdGVMZW5ndGggPSAwOw0KICAgID4gKyAgICAg IFZhcmlhYmxlUnVudGltZUNhY2hlQ29udGV4dC0NCiAgICA+ID5WYXJpYWJsZVJ1bnRpbWVIb2JD YWNoZS5QZW5kaW5nVXBkYXRlT2Zmc2V0ID0gMDsNCiAgICA+ICsgICAgfQ0KICAgID4gKw0KICAg ID4gKyAgICBDb3B5TWVtICgNCiAgICA+ICsgICAgICAoVk9JRCAqKSgNCiAgICA+ICsgICAgICAg ICAgICAgICAoKFVJTlQ4ICopKFVJTlROKVZhcmlhYmxlUnVudGltZUNhY2hlQ29udGV4dC0NCiAg ICA+ID5WYXJpYWJsZVJ1bnRpbWVOdkNhY2hlLlN0b3JlKSArDQogICAgPiArICAgICAgICAgICAg ICAgVmFyaWFibGVSdW50aW1lQ2FjaGVDb250ZXh0LQ0KICAgID4gPlZhcmlhYmxlUnVudGltZU52 Q2FjaGUuUGVuZGluZ1VwZGF0ZU9mZnNldA0KICAgID4gKyAgICAgICAgICAgICAgICksDQogICAg PiArICAgICAgKFZPSUQgKikoDQogICAgPiArICAgICAgICAgICAgICAgKChVSU5UOCAqKShVSU5U TiltTnZWYXJpYWJsZUNhY2hlKSArDQogICAgPiArICAgICAgICAgICAgICAgVmFyaWFibGVSdW50 aW1lQ2FjaGVDb250ZXh0LQ0KICAgID4gPlZhcmlhYmxlUnVudGltZU52Q2FjaGUuUGVuZGluZ1Vw ZGF0ZU9mZnNldA0KICAgID4gKyAgICAgICAgICAgICAgICksDQogICAgPiArICAgICAgVmFyaWFi bGVSdW50aW1lQ2FjaGVDb250ZXh0LQ0KICAgID4gPlZhcmlhYmxlUnVudGltZU52Q2FjaGUuUGVu ZGluZ1VwZGF0ZUxlbmd0aA0KICAgID4gKyAgICAgICk7DQogICAgPiArICAgIFZhcmlhYmxlUnVu dGltZUNhY2hlQ29udGV4dC0NCiAgICA+ID5WYXJpYWJsZVJ1bnRpbWVOdkNhY2hlLlBlbmRpbmdV cGRhdGVMZW5ndGggPSAwOw0KICAgID4gKyAgICBWYXJpYWJsZVJ1bnRpbWVDYWNoZUNvbnRleHQt DQogICAgPiA+VmFyaWFibGVSdW50aW1lTnZDYWNoZS5QZW5kaW5nVXBkYXRlT2Zmc2V0ID0gMDsN CiAgICA+ICsNCiAgICA+ICsgICAgQ29weU1lbSAoDQogICAgPiArICAgICAgKFZPSUQgKikoDQog ICAgPiArICAgICAgICAgICAgICAgKChVSU5UOCAqKShVSU5UTilWYXJpYWJsZVJ1bnRpbWVDYWNo ZUNvbnRleHQtDQogICAgPiA+VmFyaWFibGVSdW50aW1lVm9sYXRpbGVDYWNoZS5TdG9yZSkgKw0K ICAgID4gKyAgICAgICAgICAgICAgIFZhcmlhYmxlUnVudGltZUNhY2hlQ29udGV4dC0NCiAgICA+ ID5WYXJpYWJsZVJ1bnRpbWVWb2xhdGlsZUNhY2hlLlBlbmRpbmdVcGRhdGVPZmZzZXQNCiAgICA+ ICsgICAgICAgICAgICAgICApLA0KICAgID4gKyAgICAgIChWT0lEICopKA0KICAgID4gKyAgICAg ICAgICAgICAgICgoVUlOVDggKikoVUlOVE4pbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KICAgID4g PlZhcmlhYmxlR2xvYmFsLlZvbGF0aWxlVmFyaWFibGVCYXNlKSArDQogICAgPiArICAgICAgICAg ICAgICAgVmFyaWFibGVSdW50aW1lQ2FjaGVDb250ZXh0LQ0KICAgID4gPlZhcmlhYmxlUnVudGlt ZVZvbGF0aWxlQ2FjaGUuUGVuZGluZ1VwZGF0ZU9mZnNldA0KICAgID4gKyAgICAgICAgICAgICAg ICksDQogICAgPiArICAgICAgVmFyaWFibGVSdW50aW1lQ2FjaGVDb250ZXh0LQ0KICAgID4gPlZh cmlhYmxlUnVudGltZVZvbGF0aWxlQ2FjaGUuUGVuZGluZ1VwZGF0ZUxlbmd0aA0KICAgID4gKyAg ICAgICk7DQogICAgPiArICAgIFZhcmlhYmxlUnVudGltZUNhY2hlQ29udGV4dC0NCiAgICA+ID5W YXJpYWJsZVJ1bnRpbWVWb2xhdGlsZUNhY2hlLlBlbmRpbmdVcGRhdGVMZW5ndGggPSAwOw0KICAg ID4gKyAgICBWYXJpYWJsZVJ1bnRpbWVDYWNoZUNvbnRleHQtDQogICAgPiA+VmFyaWFibGVSdW50 aW1lVm9sYXRpbGVDYWNoZS5QZW5kaW5nVXBkYXRlT2Zmc2V0ID0gMDsNCiAgICA+ICsgICAgKihW YXJpYWJsZVJ1bnRpbWVDYWNoZUNvbnRleHQtPlBlbmRpbmdVcGRhdGUpICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgPSBGQUxTRTsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsg IHJldHVybiBFRklfU1VDQ0VTUzsNCiAgICA+ICt9DQogICAgPiArDQogICAgPiArLyoqDQogICAg PiArICBTeW5jaHJvbml6ZXMgdGhlIHJ1bnRpbWUgdmFyaWFibGUgY2FjaGVzIHdpdGggYWxsIHBl bmRpbmcgdXBkYXRlcyBvdXRzaWRlDQogICAgPiBydW50aW1lLg0KICAgID4gKw0KICAgID4gKyAg RW5zdXJlcyBhbGwgY29uZGl0aW9ucyBhcmUgbWV0IHRvIG1haW50YWluIGNvaGVyZW5jeSBmb3Ig cnVudGltZSBjYWNoZQ0KICAgID4gdXBkYXRlcy4gVGhpcyBmdW5jdGlvbiB3aWxsIGF0dGVtcHQN CiAgICA+ICsgIHRvIHdyaXRlIHRoZSBnaXZlbiB1cGRhdGUgKGFuZCBhbnkgb3RoZXIgcGVuZGlu ZyB1cGRhdGVzKSBpZiB0aGUgUmVhZExvY2sgaXMNCiAgICA+IGF2YWlsYWJsZS4gT3RoZXJ3aXNl LCB0aGUNCiAgICA+ICsgIHVwZGF0ZSBpcyBhZGRlZCBhcyBhIHBlbmRpbmcgdXBkYXRlIGZvciB0 aGUgZ2l2ZW4gdmFyaWFibGUgc3RvcmUgYW5kIGl0IHdpbGwgYmUNCiAgICA+IGZsdXNoZWQgdG8g dGhlIHJ1bnRpbWUgY2FjaGUNCiAgICA+ICsgIGF0IHRoZSBuZXh0IG9wcG9ydHVuaXR5IHRoZSBS ZWFkTG9jayBpcyBhdmFpbGFibGUuDQogICAgPiArDQogICAgPiArICBAcGFyYW1baW5dIFZhcmlh YmxlUnVudGltZUNhY2hlIFZhcmlhYmxlIHJ1bnRpbWUgY2FjaGUgc3RydWN0dXJlIGZvciB0aGUN CiAgICA+IHJ1bnRpbWUgY2FjaGUgYmVpbmcgc3luY2hyb25pemVkLg0KICAgID4gKyAgQHBhcmFt W2luXSBPZmZzZXQgICAgICAgICAgICAgICBPZmZzZXQgaW4gYnl0ZXMgdG8gYXBwbHkgdGhlIHVw ZGF0ZS4NCiAgICA+ICsgIEBwYXJhbVtpbl0gTGVuZ3RoICAgICAgICAgICAgICAgTGVuZ3RoIG9m IGRhdGEgaW4gYnl0ZXMgb2YgdGhlIHVwZGF0ZS4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgICAgVGhlIHVwZGF0ZSB3YXMgYWRkZWQgYXMgYSBwZW5kaW5n IHVwZGF0ZQ0KICAgID4gc3VjY2Vzc2Z1bGx5LiBJZiB0aGUgdmFyaWFibGUgcnVudGltZQ0KICAg ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZSBSZWFkTG9jayB3YXMg YXZhaWxhYmxlLCB0aGUgcnVudGltZSBjYWNoZSB3YXMNCiAgICA+IHVwZGF0ZWQgc3VjY2Vzc2Z1 bGx5Lg0KICAgID4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgICBUaGUgdm9sYXRp bGUgc3RvcmUgdG8gYmUgdXBkYXRlZCBpcyBub3QNCiAgICA+IGluaXRpYWxpemVkIHByb3Blcmx5 Lg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK0VGSV9TVEFUVVMNCiAgICA+ICtTeW5jaHJv bml6ZVJ1bnRpbWVWYXJpYWJsZUNhY2hlICgNCiAgICA+ICsgIElOICBWQVJJQUJMRV9SVU5USU1F X0NBQ0hFICAqVmFyaWFibGVSdW50aW1lQ2FjaGUsDQogICAgPiArICBJTiAgVUlOVE4gICAgICAg ICAgICAgICAgICAgT2Zmc2V0LA0KICAgID4gKyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAg IExlbmd0aA0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIGlmIChWYXJpYWJsZVJ1bnRp bWVDYWNoZSA9PSBOVUxMKSB7DQogICAgPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVU RVI7DQogICAgPiArICB9IGVsc2UgaWYgKFZhcmlhYmxlUnVudGltZUNhY2hlLT5TdG9yZSA9PSBO VUxMKSB7DQogICAgPiArICAgIC8vIFRoZSBydW50aW1lIGNhY2hlIG1heSBub3QgYmUgYWN0aXZl IG9yIGFsbG9jYXRlZCB5ZXQuDQogICAgPiArICAgIC8vIEluIGVpdGhlciBjYXNlLCByZXR1cm4g RUZJX1NVQ0NFU1MgaW5zdGVhZCBvZiBFRklfTk9UX0FWQUlMQUJMRV9ZRVQuDQogICAgPiArICAg IHJldHVybiBFRklfU1VDQ0VTUzsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIGlmICgo bVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KICAgID4gPlZhcmlhYmxlR2xvYmFsLlZhcmlhYmxlUnVu dGltZUNhY2hlQ29udGV4dC5QZW5kaW5nVXBkYXRlID09IE5VTEwpIHx8DQogICAgPiArICAgICAg KG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCiAgICA+ID5WYXJpYWJsZUdsb2JhbC5WYXJpYWJsZVJ1 bnRpbWVDYWNoZUNvbnRleHQuUmVhZExvY2sgPT0gTlVMTCkpDQogICAgPiArICB7DQogICAgPiAr ICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiAr ICBpZiAoKihtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQogICAgPiA+VmFyaWFibGVHbG9iYWwuVmFy aWFibGVSdW50aW1lQ2FjaGVDb250ZXh0LlBlbmRpbmdVcGRhdGUpICYmDQogICAgPiArICAgICAg KFZhcmlhYmxlUnVudGltZUNhY2hlLT5QZW5kaW5nVXBkYXRlTGVuZ3RoID4gMCkpDQogICAgPiAr ICB7DQogICAgPiArICAgIFZhcmlhYmxlUnVudGltZUNhY2hlLT5QZW5kaW5nVXBkYXRlTGVuZ3Ro ID0NCiAgICA+ICsgICAgICAoVUlOVDMyKSgNCiAgICA+ICsgICAgICAgICAgICAgICBNQVggKA0K ICAgID4gKyAgICAgICAgICAgICAgICAgKFVJTlROKShWYXJpYWJsZVJ1bnRpbWVDYWNoZS0+UGVu ZGluZ1VwZGF0ZU9mZnNldCArDQogICAgPiBWYXJpYWJsZVJ1bnRpbWVDYWNoZS0+UGVuZGluZ1Vw ZGF0ZUxlbmd0aCksDQogICAgPiArICAgICAgICAgICAgICAgICBPZmZzZXQgKyBMZW5ndGgNCiAg ICA+ICsgICAgICAgICAgICAgICAgICkgLSBNSU4gKChVSU5UTilWYXJpYWJsZVJ1bnRpbWVDYWNo ZS0+UGVuZGluZ1VwZGF0ZU9mZnNldCwNCiAgICA+IE9mZnNldCkNCiAgICA+ICsgICAgICAgICAg ICAgICApOw0KICAgID4gKyAgICBWYXJpYWJsZVJ1bnRpbWVDYWNoZS0+UGVuZGluZ1VwZGF0ZU9m ZnNldCA9DQogICAgPiArICAgICAgKFVJTlQzMilNSU4gKChVSU5UTilWYXJpYWJsZVJ1bnRpbWVD YWNoZS0+UGVuZGluZ1VwZGF0ZU9mZnNldCwNCiAgICA+IE9mZnNldCk7DQogICAgPiArICB9IGVs c2Ugew0KICAgID4gKyAgICBWYXJpYWJsZVJ1bnRpbWVDYWNoZS0+UGVuZGluZ1VwZGF0ZUxlbmd0 aCA9IChVSU5UMzIpTGVuZ3RoOw0KICAgID4gKyAgICBWYXJpYWJsZVJ1bnRpbWVDYWNoZS0+UGVu ZGluZ1VwZGF0ZU9mZnNldCA9IChVSU5UMzIpT2Zmc2V0Ow0KICAgID4gKyAgfQ0KICAgID4gKw0K ICAgID4gKyAgKihtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQogICAgPiA+VmFyaWFibGVHbG9iYWwu VmFyaWFibGVSdW50aW1lQ2FjaGVDb250ZXh0LlBlbmRpbmdVcGRhdGUpID0gVFJVRTsNCiAgICA+ ICsNCiAgICA+ICsgIGlmICgqKG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCiAgICA+ID5WYXJpYWJs ZUdsb2JhbC5WYXJpYWJsZVJ1bnRpbWVDYWNoZUNvbnRleHQuUmVhZExvY2spID09IEZBTFNFKSB7 DQogICAgPiArICAgIHJldHVybiBGbHVzaFBlbmRpbmdSdW50aW1lVmFyaWFibGVDYWNoZVVwZGF0 ZXMgKCk7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7 DQogICAgPiArfQ0KICAgID4gZGlmZiAtLWdpdA0KICAgID4gYS9NZGVNb2R1bGVQa2cvVW5pdmVy c2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlU21tLmMNCiAgICA+IGIv TWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJp YWJsZVNtbS5jDQogICAgPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgID4gaW5kZXggMDAwMDAw MDAwMDAwLi5mN2JhYzAyMjc1NzcNCiAgICA+IC0tLSAvZGV2L251bGwNCiAgICA+ICsrKw0KICAg ID4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhl L1ZhcmlhYmxlU21tLmMNCiAgICA+IEBAIC0wLDAgKzEsMTI2OCBAQA0KICAgID4gKy8qKiBAZmls ZQ0KICAgID4gKyAgVGhlIHNhbXBsZSBpbXBsZW1lbnRhdGlvbiBmb3IgU01NIHZhcmlhYmxlIHBy b3RvY29sLiBBbmQgdGhpcyBkcml2ZXINCiAgICA+ICsgIGltcGxlbWVudHMgYW4gU01JIGhhbmRs ZXIgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgRFhFIHJ1bnRpbWUgZHJpdmVyDQogICAgPiArICB0 byBwcm92aWRlIHZhcmlhYmxlIHNlcnZpY2VzLg0KICAgID4gKw0KICAgID4gKyAgQ2F1dGlvbjog VGhpcyBtb2R1bGUgcmVxdWlyZXMgYWRkaXRpb25hbCByZXZpZXcgd2hlbiBtb2RpZmllZC4NCiAg ICA+ICsgIFRoaXMgZHJpdmVyIHdpbGwgaGF2ZSBleHRlcm5hbCBpbnB1dCAtIHZhcmlhYmxlIGRh dGEgYW5kIGNvbW11bmljYXRlIGJ1ZmZlciBpbg0KICAgID4gU01NIG1vZGUuDQogICAgPiArICBU aGlzIGV4dGVybmFsIGlucHV0IG11c3QgYmUgdmFsaWRhdGVkIGNhcmVmdWxseSB0byBhdm9pZCBz ZWN1cml0eSBpc3N1ZSBsaWtlDQogICAgPiArICBidWZmZXIgb3ZlcmZsb3csIGludGVnZXIgb3Zl cmZsb3cuDQogICAgPiArDQogICAgPiArICBTbW1WYXJpYWJsZUhhbmRsZXIoKSB3aWxsIHJlY2Vp dmUgdW50cnVzdGVkIGlucHV0IGFuZCBkbyBiYXNpYyB2YWxpZGF0aW9uLg0KICAgID4gKw0KICAg ID4gKyAgRWFjaCBzdWIgZnVuY3Rpb24gVmFyaWFibGVTZXJ2aWNlR2V0VmFyaWFibGUoKSwNCiAg ICA+IFZhcmlhYmxlU2VydmljZUdldE5leHRWYXJpYWJsZU5hbWUoKSwNCiAgICA+ICsgIFZhcmlh YmxlU2VydmljZVNldFZhcmlhYmxlKCksIFZhcmlhYmxlU2VydmljZVF1ZXJ5VmFyaWFibGVJbmZv KCksDQogICAgPiBSZWNsYWltRm9yT1MoKSwNCiAgICA+ICsgIFNtbVZhcmlhYmxlR2V0U3RhdGlz dGljcygpIHNob3VsZCBhbHNvIGRvIHZhbGlkYXRpb24gYmFzZWQgb24gaXRzIG93bg0KICAgID4g a25vd2xlZGdlLg0KICAgID4gKw0KICAgID4gK0NvcHlyaWdodCAoYykgMjAxMCAtIDIwMjIsIElu dGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCiAgICA+ICtDb3B5cmln aHQgKGMpIDIwMTgsIExpbmFybywgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCiAgICA+ ICtTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KICAgID4gKw0K ICAgID4gKyoqLw0KICAgID4gKw0KICAgID4gKyNpbmNsdWRlIDxQcm90b2NvbC9TbW1WYXJpYWJs ZS5oPg0KICAgID4gKyNpbmNsdWRlIDxQcm90b2NvbC9TbW1GaXJtd2FyZVZvbHVtZUJsb2NrLmg+ DQogICAgPiArI2luY2x1ZGUgPFByb3RvY29sL1NtbUZhdWx0VG9sZXJhbnRXcml0ZS5oPg0KICAg ID4gKyNpbmNsdWRlIDxQcm90b2NvbC9NbUVuZE9mRHhlLmg+DQogICAgPiArI2luY2x1ZGUgPFBy b3RvY29sL1NtbVZhckNoZWNrLmg+DQogICAgPiArDQogICAgPiArI2luY2x1ZGUgPExpYnJhcnkv TW1TZXJ2aWNlc1RhYmxlTGliLmg+DQogICAgPiArI2luY2x1ZGUgPExpYnJhcnkvVmFyaWFibGVQ b2xpY3lMaWIuaD4NCiAgICA+ICsNCiAgICA+ICsjaW5jbHVkZSA8R3VpZC9TbW1WYXJpYWJsZUNv bW1vbi5oPg0KICAgID4gKyNpbmNsdWRlICJWYXJpYWJsZS5oIg0KICAgID4gKyNpbmNsdWRlICJW YXJpYWJsZVBhcnNpbmcuaCINCiAgICA+ICsjaW5jbHVkZSAiVmFyaWFibGVSdW50aW1lQ2FjaGUu aCINCiAgICA+ICsNCiAgICA+ICtleHRlcm4gVkFSSUFCTEVfU1RPUkVfSEVBREVSICAqbU52VmFy aWFibGVDYWNoZTsNCiAgICA+ICsNCiAgICA+ICtCT09MRUFOICBtQXRSdW50aW1lICAgICAgICAg ICAgICA9IEZBTFNFOw0KICAgID4gK1VJTlQ4ICAgICptVmFyaWFibGVCdWZmZXJQYXlsb2FkID0g TlVMTDsNCiAgICA+ICtVSU5UTiAgICBtVmFyaWFibGVCdWZmZXJQYXlsb2FkU2l6ZTsNCiAgICA+ ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIFNlY3VyZUJvb3QgSG9vayBmb3IgU2V0VmFyaWFibGUu DQogICAgPiArDQogICAgPiArICBAcGFyYW1baW5dIFZhcmlhYmxlTmFtZSAgICAgICAgICAgICAg ICAgTmFtZSBvZiBWYXJpYWJsZSB0byBiZSBmb3VuZC4NCiAgICA+ICsgIEBwYXJhbVtpbl0gVmVu ZG9yR3VpZCAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSB2ZW5kb3IgR1VJRC4NCiAgICA+ICsN CiAgICA+ICsqKi8NCiAgICA+ICtWT0lEDQogICAgPiArRUZJQVBJDQogICAgPiArU2VjdXJlQm9v dEhvb2sgKA0KICAgID4gKyAgSU4gQ0hBUjE2ICAgICpWYXJpYWJsZU5hbWUsDQogICAgPiArICBJ TiBFRklfR1VJRCAgKlZlbmRvckd1aWQNCiAgICA+ICsgICkNCiAgICA+ICt7DQogICAgPiArICBy ZXR1cm47DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKw0KICAgID4gKyAg VGhpcyBjb2RlIHNldHMgdmFyaWFibGUgaW4gc3RvcmFnZSBibG9ja3MgKFZvbGF0aWxlIG9yIE5v bi1Wb2xhdGlsZSkuDQogICAgPiArDQogICAgPiArICBAcGFyYW0gVmFyaWFibGVOYW1lICAgICAg ICAgICAgICAgICAgICAgTmFtZSBvZiBWYXJpYWJsZSB0byBiZSBmb3VuZC4NCiAgICA+ICsgIEBw YXJhbSBWZW5kb3JHdWlkICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSB2ZW5kb3IgR1VJ RC4NCiAgICA+ICsgIEBwYXJhbSBBdHRyaWJ1dGVzICAgICAgICAgICAgICAgICAgICAgICBBdHRy aWJ1dGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIGZvdW5kDQogICAgPiArICBAcGFyYW0gRGF0YVNp emUgICAgICAgICAgICAgICAgICAgICAgICAgU2l6ZSBvZiBEYXRhIGZvdW5kLiBJZiBzaXplIGlz IGxlc3MgdGhhbiB0aGUNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkYXRhLCB0aGlzIHZhbHVlIGNvbnRhaW5zIHRoZSByZXF1aXJlZCBzaXplLg0KICAg ID4gKyAgQHBhcmFtIERhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgcG9pbnRl ci4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgICAg ICAgICBJbnZhbGlkIHBhcmFtZXRlci4NCiAgICA+ICsgIEByZXR1cm4gRUZJX1NVQ0NFU1MgICAg ICAgICAgICAgICAgICAgICBTZXQgc3VjY2Vzc2Z1bGx5Lg0KICAgID4gKyAgQHJldHVybiBFRklf T1VUX09GX1JFU09VUkNFUyAgICAgICAgICAgIFJlc291cmNlIG5vdCBlbm91Z2ggdG8gc2V0IHZh cmlhYmxlLg0KICAgID4gKyAgQHJldHVybiBFRklfTk9UX0ZPVU5EICAgICAgICAgICAgICAgICAg IE5vdCBmb3VuZC4NCiAgICA+ICsgIEByZXR1cm4gRUZJX1dSSVRFX1BST1RFQ1RFRCAgICAgICAg ICAgICBWYXJpYWJsZSBpcyByZWFkLW9ubHkuDQogICAgPiArDQogICAgPiArKiovDQogICAgPiAr RUZJX1NUQVRVUw0KICAgID4gK0VGSUFQSQ0KICAgID4gK1NtbVZhcmlhYmxlU2V0VmFyaWFibGUg KA0KICAgID4gKyAgSU4gQ0hBUjE2ICAgICpWYXJpYWJsZU5hbWUsDQogICAgPiArICBJTiBFRklf R1VJRCAgKlZlbmRvckd1aWQsDQogICAgPiArICBJTiBVSU5UMzIgICAgQXR0cmlidXRlcywNCiAg ICA+ICsgIElOIFVJTlROICAgICBEYXRhU2l6ZSwNCiAgICA+ICsgIElOIFZPSUQgICAgICAqRGF0 YQ0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCiAg ICA+ICsNCiAgICA+ICsgIC8vDQogICAgPiArICAvLyBEaXNhYmxlIHdyaXRlIHByb3RlY3Rpb24g d2hlbiB0aGUgY2FsbGluZyBTZXRWYXJpYWJsZSgpIHRocm91Z2gNCiAgICA+IEVGSV9TTU1fVkFS SUFCTEVfUFJPVE9DT0wuDQogICAgPiArICAvLw0KICAgID4gKyAgbVJlcXVlc3RTb3VyY2UgPSBW YXJDaGVja0Zyb21UcnVzdGVkOw0KICAgID4gKyAgU3RhdHVzICAgICAgICAgPSBWYXJpYWJsZVNl cnZpY2VTZXRWYXJpYWJsZSAoDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVO YW1lLA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgIFZlbmRvckd1aWQsDQogICAgPiArICAg ICAgICAgICAgICAgICAgICAgQXR0cmlidXRlcywNCiAgICA+ICsgICAgICAgICAgICAgICAgICAg ICBEYXRhU2l6ZSwNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICBEYXRhDQogICAgPiArICAg ICAgICAgICAgICAgICAgICAgKTsNCiAgICA+ICsgIG1SZXF1ZXN0U291cmNlID0gVmFyQ2hlY2tG cm9tVW50cnVzdGVkOw0KICAgID4gKyAgcmV0dXJuIFN0YXR1czsNCiAgICA+ICt9DQogICAgPiAr DQogICAgPiArRUZJX1NNTV9WQVJJQUJMRV9QUk9UT0NPTCAgZ1NtbVZhcmlhYmxlID0gew0KICAg ID4gKyAgVmFyaWFibGVTZXJ2aWNlR2V0VmFyaWFibGUsDQogICAgPiArICBWYXJpYWJsZVNlcnZp Y2VHZXROZXh0VmFyaWFibGVOYW1lLA0KICAgID4gKyAgU21tVmFyaWFibGVTZXRWYXJpYWJsZSwN CiAgICA+ICsgIFZhcmlhYmxlU2VydmljZVF1ZXJ5VmFyaWFibGVJbmZvDQogICAgPiArfTsNCiAg ICA+ICsNCiAgICA+ICtFREtJSV9TTU1fVkFSX0NIRUNLX1BST1RPQ09MICBtU21tVmFyQ2hlY2sg PSB7DQogICAgPiArICBWYXJDaGVja1JlZ2lzdGVyU2V0VmFyaWFibGVDaGVja0hhbmRsZXIsDQog ICAgPiArICBWYXJDaGVja1ZhcmlhYmxlUHJvcGVydHlTZXQsDQogICAgPiArICBWYXJDaGVja1Zh cmlhYmxlUHJvcGVydHlHZXQNCiAgICA+ICt9Ow0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4g KyAgUmV0dXJuIFRSVUUgaWYgRXhpdEJvb3RTZXJ2aWNlcyAoKSBoYXMgYmVlbiBjYWxsZWQuDQog ICAgPiArDQogICAgPiArICBAcmV0dmFsIFRSVUUgSWYgRXhpdEJvb3RTZXJ2aWNlcyAoKSBoYXMg YmVlbiBjYWxsZWQuDQogICAgPiArKiovDQogICAgPiArQk9PTEVBTg0KICAgID4gK0F0UnVudGlt ZSAoDQogICAgPiArICBWT0lEDQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgcmV0dXJu IG1BdFJ1bnRpbWU7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgSW5p dGlhbGl6ZXMgYSBiYXNpYyBtdXR1YWwgZXhjbHVzaW9uIGxvY2suDQogICAgPiArDQogICAgPiAr ICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIGEgYmFzaWMgbXV0dWFsIGV4Y2x1c2lvbiBsb2Nr IHRvIHRoZSByZWxlYXNlZCBzdGF0ZQ0KICAgID4gKyAgYW5kIHJldHVybnMgdGhlIGxvY2suICBF YWNoIGxvY2sgcHJvdmlkZXMgbXV0dWFsIGV4Y2x1c2lvbiBhY2Nlc3MgYXQgaXRzIHRhc2sNCiAg ICA+ICsgIHByaW9yaXR5IGxldmVsLiAgU2luY2UgdGhlcmUgaXMgbm8gcHJlZW1wdGlvbiBvciBt dWx0aXByb2Nlc3NvciBzdXBwb3J0IGluIEVGSSwNCiAgICA+ICsgIGFjcXVpcmluZyB0aGUgbG9j ayBvbmx5IGNvbnNpc3RzIG9mIHJhaXNpbmcgdG8gdGhlIGxvY2tzIFRQTC4NCiAgICA+ICsgIElm IExvY2sgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCiAgICA+ICsgIElmIFByaW9yaXR5IGlzIG5v dCBhIHZhbGlkIFRQTCB2YWx1ZSwgdGhlbiBBU1NFUlQoKS4NCiAgICA+ICsNCiAgICA+ICsgIEBw YXJhbSAgTG9jayAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGxvY2sgZGF0YSBzdHJ1Y3R1cmUgdG8g aW5pdGlhbGl6ZS4NCiAgICA+ICsgIEBwYXJhbSAgUHJpb3JpdHkgICBFRkkgVFBMIGlzIGFzc29j aWF0ZWQgd2l0aCB0aGUgbG9jay4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR1cm4gVGhlIGxvY2su DQogICAgPiArDQogICAgPiArKiovDQogICAgPiArRUZJX0xPQ0sgKg0KICAgID4gK0luaXRpYWxp emVMb2NrICgNCiAgICA+ICsgIElOIE9VVCBFRklfTE9DSyAgKkxvY2ssDQogICAgPiArICBJTiBF RklfVFBMICAgICAgIFByaW9yaXR5DQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgcmV0 dXJuIExvY2s7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgQWNxdWly ZXMgbG9jayBvbmx5IGF0IGJvb3QgdGltZS4gU2ltcGx5IHJldHVybnMgYXQgcnVudGltZS4NCiAg ICA+ICsNCiAgICA+ICsgIFRoaXMgaXMgYSB0ZW1wZXJhcnkgZnVuY3Rpb24gdGhhdCB3aWxsIGJl IHJlbW92ZWQgd2hlbg0KICAgID4gKyAgRWZpQWNxdWlyZUxvY2soKSBpbiBVZWZpTGliIGNhbiBo YW5kbGUgdGhlIGNhbGwgaW4gVUVGSQ0KICAgID4gKyAgUnVudGltZXIgZHJpdmVyIGluIFJUIHBo YXNlLg0KICAgID4gKyAgSXQgY2FsbHMgRWZpQWNxdWlyZUxvY2soKSBhdCBib290IHRpbWUsIGFu ZCBzaW1wbHkgcmV0dXJucw0KICAgID4gKyAgYXQgcnVudGltZS4NCiAgICA+ICsNCiAgICA+ICsg IEBwYXJhbSAgTG9jayAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgbG9jayB0byBhY3F1aXJlLg0K ICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK1ZPSUQNCiAgICA+ICtBY3F1aXJlTG9ja09ubHlB dEJvb3RUaW1lICgNCiAgICA+ICsgIElOIEVGSV9MT0NLICAqTG9jaw0KICAgID4gKyAgKQ0KICAg ID4gK3sNCiAgICA+ICt9DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBSZWxlYXNlcyBs b2NrIG9ubHkgYXQgYm9vdCB0aW1lLiBTaW1wbHkgcmV0dXJucyBhdCBydW50aW1lLg0KICAgID4g Kw0KICAgID4gKyAgVGhpcyBpcyBhIHRlbXBlcmFyeSBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIHJl bW92ZWQgd2hlbg0KICAgID4gKyAgRWZpUmVsZWFzZUxvY2soKSBpbiBVZWZpTGliIGNhbiBoYW5k bGUgdGhlIGNhbGwgaW4gVUVGSQ0KICAgID4gKyAgUnVudGltZXIgZHJpdmVyIGluIFJUIHBoYXNl Lg0KICAgID4gKyAgSXQgY2FsbHMgRWZpUmVsZWFzZUxvY2soKSBhdCBib290IHRpbWUgYW5kIHNp bXBseSByZXR1cm5zDQogICAgPiArICBhdCBydW50aW1lLg0KICAgID4gKw0KICAgID4gKyAgQHBh cmFtICBMb2NrICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBsb2NrIHRvIHJlbGVhc2UuDQogICAg PiArDQogICAgPiArKiovDQogICAgPiArVk9JRA0KICAgID4gK1JlbGVhc2VMb2NrT25seUF0Qm9v dFRpbWUgKA0KICAgID4gKyAgSU4gRUZJX0xPQ0sgICpMb2NrDQogICAgPiArICApDQogICAgPiAr ew0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIFJldHJpZXZlIHRoZSBT TU0gRmF1bHQgVG9sZXJlbnQgV3JpdGUgcHJvdG9jb2wgaW50ZXJmYWNlLg0KICAgID4gKw0KICAg ID4gKyAgQHBhcmFtW291dF0gRnR3UHJvdG9jb2wgICAgICAgVGhlIGludGVyZmFjZSBvZiBTTU0g RnR3IHByb3RvY29sDQogICAgPiArDQogICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgICBUaGUgU01NIEZUVyBwcm90b2NvbCBpbnN0YW5jZSB3YXMgZm91bmQgYW5kDQogICAgPiBy ZXR1cm5lZCBpbiBGdHdQcm90b2NvbC4NCiAgICA+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAg ICAgICAgIFRoZSBTTU0gRlRXIHByb3RvY29sIGluc3RhbmNlIHdhcyBub3QNCiAgICA+IGZvdW5k Lg0KICAgID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgU2FyUHJvdG9jb2wgaXMg TlVMTC4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtFRklfU1RBVFVTDQogICAgPiArR2V0 RnR3UHJvdG9jb2wgKA0KICAgID4gKyAgT1VUIFZPSUQgICoqRnR3UHJvdG9jb2wNCiAgICA+ICsg ICkNCiAgICA+ICt7DQogICAgPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQogICAgPiArDQogICAg PiArICAvLw0KICAgID4gKyAgLy8gTG9jYXRlIFNtbSBGYXVsdCBUb2xlcmVudCBXcml0ZSBwcm90 b2NvbA0KICAgID4gKyAgLy8NCiAgICA+ICsgIFN0YXR1cyA9IGdNbXN0LT5NbUxvY2F0ZVByb3Rv Y29sICgNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICZnRWZpU21tRmF1bHRUb2xlcmFudFdy aXRlUHJvdG9jb2xHdWlkLA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgTlVMTCwNCiAgICA+ ICsgICAgICAgICAgICAgICAgICAgIEZ0d1Byb3RvY29sDQogICAgPiArICAgICAgICAgICAgICAg ICAgICApOw0KICAgID4gKyAgcmV0dXJuIFN0YXR1czsNCiAgICA+ICt9DQogICAgPiArDQogICAg PiArLyoqDQogICAgPiArICBSZXRyaWV2ZSB0aGUgU01NIEZWQiBwcm90b2NvbCBpbnRlcmZhY2Ug YnkgSEFORExFLg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtW2luXSAgRnZCbG9ja0hhbmRsZSAg ICAgVGhlIGhhbmRsZSBvZiBTTU0gRlZCIHByb3RvY29sIHRoYXQgcHJvdmlkZXMNCiAgICA+IHNl cnZpY2VzIGZvcg0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGlu Zywgd3JpdGluZywgYW5kIGVyYXNpbmcgdGhlIHRhcmdldCBibG9jay4NCiAgICA+ICsgIEBwYXJh bVtvdXRdIEZ2QmxvY2sgICAgICAgICAgIFRoZSBpbnRlcmZhY2Ugb2YgU01NIEZWQiBwcm90b2Nv bA0KICAgID4gKw0KICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIGlu dGVyZmFjZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZA0KICAgID4gcHJvdG9jb2wgd2Fz IHJldHVybmVkLg0KICAgID4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgVGhlIGRl dmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBTTU0gRlZCDQogICAgPiBwcm90b2NvbC4NCiAgICA+ ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIEZ2QmxvY2tIYW5kbGUgaXMgbm90IGEg dmFsaWQgRUZJX0hBTkRMRQ0KICAgID4gb3IgRnZCbG9jayBpcyBOVUxMLg0KICAgID4gKw0KICAg ID4gKyoqLw0KICAgID4gK0VGSV9TVEFUVVMNCiAgICA+ICtHZXRGdmJCeUhhbmRsZSAoDQogICAg PiArICBJTiAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAgICAgRnZCbG9ja0hhbmRs ZSwNCiAgICA+ICsgIE9VVCBFRklfRklSTVdBUkVfVk9MVU1FX0JMT0NLX1BST1RPQ09MICAqKkZ2 QmxvY2sNCiAgICA+ICsgICkNCiAgICA+ICt7DQogICAgPiArICAvLw0KICAgID4gKyAgLy8gVG8g Z2V0IHRoZSBTTU0gRlZCIHByb3RvY29sIGludGVyZmFjZSBvbiB0aGUgaGFuZGxlDQogICAgPiAr ICAvLw0KICAgID4gKyAgcmV0dXJuIGdNbXN0LT5NbUhhbmRsZVByb3RvY29sICgNCiAgICA+ICsg ICAgICAgICAgICAgICAgICBGdkJsb2NrSGFuZGxlLA0KICAgID4gKyAgICAgICAgICAgICAgICAg ICZnRWZpU21tRmlybXdhcmVWb2x1bWVCbG9ja1Byb3RvY29sR3VpZCwNCiAgICA+ICsgICAgICAg ICAgICAgICAgICAoVk9JRCAqKilGdkJsb2NrDQogICAgPiArICAgICAgICAgICAgICAgICAgKTsN CiAgICA+ICt9DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBGdW5jdGlvbiByZXR1cm5z IGFuIGFycmF5IG9mIGhhbmRsZXMgdGhhdCBzdXBwb3J0IHRoZSBTTU0gRlZCIHByb3RvY29sDQog ICAgPiArICBpbiBhIGJ1ZmZlciBhbGxvY2F0ZWQgZnJvbSBwb29sLg0KICAgID4gKw0KICAgID4g KyAgQHBhcmFtW291dF0gIE51bWJlckhhbmRsZXMgICAgVGhlIG51bWJlciBvZiBoYW5kbGVzIHJl dHVybmVkIGluIEJ1ZmZlci4NCiAgICA+ICsgIEBwYXJhbVtvdXRdICBCdWZmZXIgICAgICAgICAg IEEgcG9pbnRlciB0byB0aGUgYnVmZmVyIHRvIHJldHVybiB0aGUgcmVxdWVzdGVkDQogICAgPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSBvZiAgaGFuZGxlcyB0aGF0IHN1 cHBvcnQgU01NIEZWQiBwcm90b2NvbC4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgICAgIFRoZSBhcnJheSBvZiBoYW5kbGVzIHdhcyByZXR1cm5lZCBpbiBCdWZm ZXIsIGFuZA0KICAgID4gdGhlIG51bWJlciBvZg0KICAgID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaGFuZGxlcyBpbiBCdWZmZXIgd2FzIHJldHVybmVkIGluIE51bWJlckhhbmRs ZXMuDQogICAgPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICBObyBTTU0gRlZCIGhh bmRsZSB3YXMgZm91bmQuDQogICAgPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBU aGVyZSBpcyBub3QgZW5vdWdoIHBvb2wgbWVtb3J5IHRvIHN0b3JlDQogICAgPiB0aGUgbWF0Y2hp bmcgcmVzdWx0cy4NCiAgICA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE51bWJl ckhhbmRsZXMgaXMgTlVMTCBvciBCdWZmZXIgaXMgTlVMTC4NCiAgICA+ICsNCiAgICA+ICsqKi8N CiAgICA+ICtFRklfU1RBVFVTDQogICAgPiArR2V0RnZiQ291bnRBbmRCdWZmZXIgKA0KICAgID4g KyAgT1VUIFVJTlROICAgICAgICpOdW1iZXJIYW5kbGVzLA0KICAgID4gKyAgT1VUIEVGSV9IQU5E TEUgICoqQnVmZmVyDQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgRUZJX1NUQVRVUyAg U3RhdHVzOw0KICAgID4gKyAgVUlOVE4gICAgICAgQnVmZmVyU2l6ZTsNCiAgICA+ICsNCiAgICA+ ICsgIGlmICgoTnVtYmVySGFuZGxlcyA9PSBOVUxMKSB8fCAoQnVmZmVyID09IE5VTEwpKSB7DQog ICAgPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQogICAgPiArICB9DQogICAg PiArDQogICAgPiArICBCdWZmZXJTaXplICAgICA9IDA7DQogICAgPiArICAqTnVtYmVySGFuZGxl cyA9IDA7DQogICAgPiArICAqQnVmZmVyICAgICAgICA9IE5VTEw7DQogICAgPiArICBTdGF0dXMg ICAgICAgICA9IGdNbXN0LT5NbUxvY2F0ZUhhbmRsZSAoDQogICAgPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEJ5UHJvdG9jb2wsDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZnRWZpU21tRmlybXdhcmVWb2x1bWVCbG9ja1Byb3RvY29sR3VpZCwNCiAgICA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwNCiAgICA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJkJ1ZmZlclNpemUsDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICpCdWZmZXINCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICA+ICsg IGlmIChFRklfRVJST1IgKFN0YXR1cykgJiYgKFN0YXR1cyAhPSBFRklfQlVGRkVSX1RPT19TTUFM TCkpIHsNCiAgICA+ICsgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQogICAgPiArICB9DQogICAg PiArDQogICAgPiArICAqQnVmZmVyID0gQWxsb2NhdGVQb29sIChCdWZmZXJTaXplKTsNCiAgICA+ ICsgIGlmICgqQnVmZmVyID09IE5VTEwpIHsNCiAgICA+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0Zf UkVTT1VSQ0VTOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgU3RhdHVzID0gZ01tc3Qt Pk1tTG9jYXRlSGFuZGxlICgNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgIEJ5UHJvdG9jb2ws DQogICAgPiArICAgICAgICAgICAgICAgICAgICAmZ0VmaVNtbUZpcm13YXJlVm9sdW1lQmxvY2tQ cm90b2NvbEd1aWQsDQogICAgPiArICAgICAgICAgICAgICAgICAgICBOVUxMLA0KICAgID4gKyAg ICAgICAgICAgICAgICAgICAgJkJ1ZmZlclNpemUsDQogICAgPiArICAgICAgICAgICAgICAgICAg ICAqQnVmZmVyDQogICAgPiArICAgICAgICAgICAgICAgICAgICApOw0KICAgID4gKw0KICAgID4g KyAgKk51bWJlckhhbmRsZXMgPSBCdWZmZXJTaXplIC8gc2l6ZW9mIChFRklfSEFORExFKTsNCiAg ICA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCiAgICA+ICsgICAgKk51bWJlckhhbmRs ZXMgPSAwOw0KICAgID4gKyAgICBGcmVlUG9vbCAoKkJ1ZmZlcik7DQogICAgPiArICAgICpCdWZm ZXIgPSBOVUxMOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgcmV0dXJuIFN0YXR1czsN CiAgICA+ICt9DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBHZXQgdGhlIHZhcmlhYmxl IHN0YXRpc3RpY3MgaW5mb3JtYXRpb24gZnJvbSB0aGUgaW5mb3JtYXRpb24gYnVmZmVyIHBvaW50 ZWQgYnkNCiAgICA+IGdWYXJpYWJsZUluZm8uDQogICAgPiArDQogICAgPiArICBDYXV0aW9uOiBU aGlzIGZ1bmN0aW9uIG1heSBiZSBpbnZva2VkIGF0IFNNTSBydW50aW1lLg0KICAgID4gKyAgSW5m b0VudHJ5IGFuZCBJbmZvU2l6ZSBhcmUgZXh0ZXJuYWwgaW5wdXQuIENhcmUgbXVzdCBiZSB0YWtl biB0byBtYWtlIHN1cmUNCiAgICA+IG5vdCBzZWN1cml0eSBpc3N1ZSBhdCBydW50aW1lLg0KICAg ID4gKw0KICAgID4gKyAgQHBhcmFtW2luLCBvdXRdICBJbmZvRW50cnkgICAgQSBwb2ludGVyIHRv IHRoZSBidWZmZXIgb2YgdmFyaWFibGUgaW5mb3JtYXRpb24NCiAgICA+IGVudHJ5Lg0KICAgID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gaW5wdXQsIHBvaW50IHRvIHRoZSB2 YXJpYWJsZSBpbmZvcm1hdGlvbiByZXR1cm5lZCBsYXN0IHRpbWUuDQogICAgPiBpZg0KICAgID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5mb0VudHJ5LT5WZW5kb3JHdWlkIGlz IHplcm8sIHJldHVybiB0aGUgZmlyc3QgaW5mb3JtYXRpb24uDQogICAgPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPbiBvdXRwdXQsIHBvaW50IHRvIHRoZSBuZXh0IHZhcmlhYmxl IGluZm9ybWF0aW9uLg0KICAgID4gKyAgQHBhcmFtW2luLCBvdXRdICBJbmZvU2l6ZSAgICAgT24g aW5wdXQsIHRoZSBzaXplIG9mIHRoZSB2YXJpYWJsZSBpbmZvcm1hdGlvbg0KICAgID4gYnVmZmVy Lg0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gb3V0cHV0LCB0aGUg cmV0dXJuZWQgdmFyaWFibGUgaW5mb3JtYXRpb24gc2l6ZS4NCiAgICA+ICsNCiAgICA+ICsgIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSB2YXJpYWJsZSBpbmZvcm1hdGlvbiBpcyBm b3VuZCBhbmQgcmV0dXJuZWQNCiAgICA+IHN1Y2Nlc3NmdWxseS4NCiAgICA+ICsgIEByZXR2YWwg RUZJX1VOU1VQUE9SVEVEICAgICAgIE5vIHZhcmlhYmxlIGlub2Zvcm1hdGlvbiBleGlzdHMgaW4g dmFyaWFibGUNCiAgICA+IGRyaXZlci4gVGhlDQogICAgPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQY2RWYXJpYWJsZUNvbGxlY3RTdGF0aXN0aWNzIHNob3VsZCBiZSBzZXQgVFJV RSB0byBzdXBwb3J0IGl0Lg0KICAgID4gKyAgQHJldHZhbCBFRklfQlVGRkVSX1RPT19TTUFMTCAg VGhlIGJ1ZmZlciBpcyB0b28gc21hbGwgdG8gaG9sZCB0aGUgbmV4dA0KICAgID4gdmFyaWFibGUg aW5mb3JtYXRpb24uDQogICAgPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBJbnB1 dCBwYXJhbWV0ZXIgaXMgaW52YWxpZC4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtFRklf U1RBVFVTDQogICAgPiArU21tVmFyaWFibGVHZXRTdGF0aXN0aWNzICgNCiAgICA+ICsgIElOIE9V VCBWQVJJQUJMRV9JTkZPX0VOVFJZICAqSW5mb0VudHJ5LA0KICAgID4gKyAgSU4gT1VUIFVJTlRO ICAgICAgICAgICAgICAgICpJbmZvU2l6ZQ0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsg IFZBUklBQkxFX0lORk9fRU5UUlkgICpWYXJpYWJsZUluZm87DQogICAgPiArICBVSU5UTiAgICAg ICAgICAgICAgICBOYW1lU2l6ZTsNCiAgICA+ICsgIFVJTlROICAgICAgICAgICAgICAgIFN0YXRp c3RpY3NJbmZvU2l6ZTsNCiAgICA+ICsgIENIQVIxNiAgICAgICAgICAgICAgICpJbmZvTmFtZTsN CiAgICA+ICsgIFVJTlROICAgICAgICAgICAgICAgIEluZm9OYW1lTWF4U2l6ZTsNCiAgICA+ICsg IEVGSV9HVUlEICAgICAgICAgICAgIFZlbmRvckd1aWQ7DQogICAgPiArDQogICAgPiArICBpZiAo SW5mb0VudHJ5ID09IE5VTEwpIHsNCiAgICA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFN RVRFUjsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIFZhcmlhYmxlSW5mbyA9IGdWYXJp YWJsZUluZm87DQogICAgPiArICBpZiAoVmFyaWFibGVJbmZvID09IE5VTEwpIHsNCiAgICA+ICsg ICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsg IFN0YXRpc3RpY3NJbmZvU2l6ZSA9IHNpemVvZiAoVkFSSUFCTEVfSU5GT19FTlRSWSk7DQogICAg PiArICBpZiAoKkluZm9TaXplIDwgU3RhdGlzdGljc0luZm9TaXplKSB7DQogICAgPiArICAgICpJ bmZvU2l6ZSA9IFN0YXRpc3RpY3NJbmZvU2l6ZTsNCiAgICA+ICsgICAgcmV0dXJuIEVGSV9CVUZG RVJfVE9PX1NNQUxMOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgSW5mb05hbWUgICAg ICAgID0gKENIQVIxNiAqKShJbmZvRW50cnkgKyAxKTsNCiAgICA+ICsgIEluZm9OYW1lTWF4U2l6 ZSA9ICgqSW5mb1NpemUgLSBzaXplb2YgKFZBUklBQkxFX0lORk9fRU5UUlkpKTsNCiAgICA+ICsN CiAgICA+ICsgIENvcHlHdWlkICgmVmVuZG9yR3VpZCwgJkluZm9FbnRyeS0+VmVuZG9yR3VpZCk7 DQogICAgPiArDQogICAgPiArICBpZiAoSXNaZXJvR3VpZCAoJlZlbmRvckd1aWQpKSB7DQogICAg PiArICAgIC8vDQogICAgPiArICAgIC8vIFJldHVybiB0aGUgZmlyc3QgdmFyaWFibGUgaW5mbw0K ICAgID4gKyAgICAvLw0KICAgID4gKyAgICBOYW1lU2l6ZSAgICAgICAgICAgPSBTdHJTaXplIChW YXJpYWJsZUluZm8tPk5hbWUpOw0KICAgID4gKyAgICBTdGF0aXN0aWNzSW5mb1NpemUgPSBzaXpl b2YgKFZBUklBQkxFX0lORk9fRU5UUlkpICsgTmFtZVNpemU7DQogICAgPiArICAgIGlmICgqSW5m b1NpemUgPCBTdGF0aXN0aWNzSW5mb1NpemUpIHsNCiAgICA+ICsgICAgICAqSW5mb1NpemUgPSBT dGF0aXN0aWNzSW5mb1NpemU7DQogICAgPiArICAgICAgcmV0dXJuIEVGSV9CVUZGRVJfVE9PX1NN QUxMOw0KICAgID4gKyAgICB9DQogICAgPiArDQogICAgPiArICAgIENvcHlNZW0gKEluZm9FbnRy eSwgVmFyaWFibGVJbmZvLCBzaXplb2YgKFZBUklBQkxFX0lORk9fRU5UUlkpKTsNCiAgICA+ICsg ICAgQ29weU1lbSAoSW5mb05hbWUsIFZhcmlhYmxlSW5mby0+TmFtZSwgTmFtZVNpemUpOw0KICAg ID4gKyAgICAqSW5mb1NpemUgPSBTdGF0aXN0aWNzSW5mb1NpemU7DQogICAgPiArICAgIHJldHVy biBFRklfU1VDQ0VTUzsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIC8vDQogICAgPiAr ICAvLyBHZXQgdGhlIG5leHQgdmFyaWFibGUgaW5mbw0KICAgID4gKyAgLy8NCiAgICA+ICsgIHdo aWxlIChWYXJpYWJsZUluZm8gIT0gTlVMTCkgew0KICAgID4gKyAgICBpZiAoQ29tcGFyZUd1aWQg KCZWYXJpYWJsZUluZm8tPlZlbmRvckd1aWQsICZWZW5kb3JHdWlkKSkgew0KICAgID4gKyAgICAg IE5hbWVTaXplID0gU3RyU2l6ZSAoVmFyaWFibGVJbmZvLT5OYW1lKTsNCiAgICA+ICsgICAgICBp ZiAoTmFtZVNpemUgPD0gSW5mb05hbWVNYXhTaXplKSB7DQogICAgPiArICAgICAgICBpZiAoQ29t cGFyZU1lbSAoVmFyaWFibGVJbmZvLT5OYW1lLCBJbmZvTmFtZSwgTmFtZVNpemUpID09IDApIHsN CiAgICA+ICsgICAgICAgICAgLy8NCiAgICA+ICsgICAgICAgICAgLy8gRmluZCB0aGUgbWF0Y2gg b25lDQogICAgPiArICAgICAgICAgIC8vDQogICAgPiArICAgICAgICAgIFZhcmlhYmxlSW5mbyA9 IFZhcmlhYmxlSW5mby0+TmV4dDsNCiAgICA+ICsgICAgICAgICAgYnJlYWs7DQogICAgPiArICAg ICAgICB9DQogICAgPiArICAgICAgfQ0KICAgID4gKyAgICB9DQogICAgPiArDQogICAgPiArICAg IFZhcmlhYmxlSW5mbyA9IFZhcmlhYmxlSW5mby0+TmV4dDsNCiAgICA+ICsgIH0NCiAgICA+ICsN CiAgICA+ICsgIGlmIChWYXJpYWJsZUluZm8gPT0gTlVMTCkgew0KICAgID4gKyAgICAqSW5mb1Np emUgPSAwOw0KICAgID4gKyAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQogICAgPiArICB9DQogICAg PiArDQogICAgPiArICAvLw0KICAgID4gKyAgLy8gT3V0cHV0IHRoZSBuZXcgdmFyaWFibGUgaW5m bw0KICAgID4gKyAgLy8NCiAgICA+ICsgIE5hbWVTaXplICAgICAgICAgICA9IFN0clNpemUgKFZh cmlhYmxlSW5mby0+TmFtZSk7DQogICAgPiArICBTdGF0aXN0aWNzSW5mb1NpemUgPSBzaXplb2Yg KFZBUklBQkxFX0lORk9fRU5UUlkpICsgTmFtZVNpemU7DQogICAgPiArICBpZiAoKkluZm9TaXpl IDwgU3RhdGlzdGljc0luZm9TaXplKSB7DQogICAgPiArICAgICpJbmZvU2l6ZSA9IFN0YXRpc3Rp Y3NJbmZvU2l6ZTsNCiAgICA+ICsgICAgcmV0dXJuIEVGSV9CVUZGRVJfVE9PX1NNQUxMOw0KICAg ID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgQ29weU1lbSAoSW5mb0VudHJ5LCBWYXJpYWJsZUlu Zm8sIHNpemVvZiAoVkFSSUFCTEVfSU5GT19FTlRSWSkpOw0KICAgID4gKyAgQ29weU1lbSAoSW5m b05hbWUsIFZhcmlhYmxlSW5mby0+TmFtZSwgTmFtZVNpemUpOw0KICAgID4gKyAgKkluZm9TaXpl ID0gU3RhdGlzdGljc0luZm9TaXplOw0KICAgID4gKw0KICAgID4gKyAgcmV0dXJuIEVGSV9TVUND RVNTOw0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIENvbW11bmljYXRp b24gc2VydmljZSBTTUkgSGFuZGxlciBlbnRyeS4NCiAgICA+ICsNCiAgICA+ICsgIFRoaXMgU01J IGhhbmRsZXIgcHJvdmlkZXMgc2VydmljZXMgZm9yIHRoZSB2YXJpYWJsZSB3cmFwcGVyIGRyaXZl ci4NCiAgICA+ICsNCiAgICA+ICsgIENhdXRpb246IFRoaXMgZnVuY3Rpb24gbWF5IHJlY2VpdmUg dW50cnVzdGVkIGlucHV0Lg0KICAgID4gKyAgVGhpcyB2YXJpYWJsZSBkYXRhIGFuZCBjb21tdW5p Y2F0ZSBidWZmZXIgYXJlIGV4dGVybmFsIGlucHV0LCBzbyB0aGlzIGZ1bmN0aW9uDQogICAgPiB3 aWxsIGRvIGJhc2ljIHZhbGlkYXRpb24uDQogICAgPiArICBFYWNoIHN1YiBmdW5jdGlvbiBWYXJp YWJsZVNlcnZpY2VHZXRWYXJpYWJsZSgpLA0KICAgID4gVmFyaWFibGVTZXJ2aWNlR2V0TmV4dFZh cmlhYmxlTmFtZSgpLA0KICAgID4gKyAgVmFyaWFibGVTZXJ2aWNlU2V0VmFyaWFibGUoKSwgVmFy aWFibGVTZXJ2aWNlUXVlcnlWYXJpYWJsZUluZm8oKSwNCiAgICA+IFJlY2xhaW1Gb3JPUygpLA0K ICAgID4gKyAgU21tVmFyaWFibGVHZXRTdGF0aXN0aWNzKCkgc2hvdWxkIGFsc28gZG8gdmFsaWRh dGlvbiBiYXNlZCBvbiBpdHMgb3duDQogICAgPiBrbm93bGVkZ2UuDQogICAgPiArDQogICAgPiAr ICBAcGFyYW1baW5dICAgICBEaXNwYXRjaEhhbmRsZSAgVGhlIHVuaXF1ZSBoYW5kbGUgYXNzaWdu ZWQgdG8gdGhpcyBoYW5kbGVyIGJ5DQogICAgPiBTbWlIYW5kbGVyUmVnaXN0ZXIoKS4NCiAgICA+ ICsgIEBwYXJhbVtpbl0gICAgIFJlZ2lzdGVyQ29udGV4dCBQb2ludHMgdG8gYW4gb3B0aW9uYWwg aGFuZGxlciBjb250ZXh0IHdoaWNoDQogICAgPiB3YXMgc3BlY2lmaWVkIHdoZW4gdGhlDQogICAg PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlciB3YXMgcmVnaXN0ZXJl ZC4NCiAgICA+ICsgIEBwYXJhbVtpbiwgb3V0XSBDb21tQnVmZmVyICAgICBBIHBvaW50ZXIgdG8g YSBjb2xsZWN0aW9uIG9mIGRhdGEgaW4gbWVtb3J5DQogICAgPiB0aGF0IHdpbGwNCiAgICA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBjb252ZXllZCBmcm9tIGEgbm9uLVNN TSBlbnZpcm9ubWVudCBpbnRvIGFuIFNNTQ0KICAgID4gZW52aXJvbm1lbnQuDQogICAgPiArICBA cGFyYW1baW4sIG91dF0gQ29tbUJ1ZmZlclNpemUgVGhlIHNpemUgb2YgdGhlIENvbW1CdWZmZXIu DQogICAgPiArDQogICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgICAg ICAgICAgIFRoZSBpbnRlcnJ1cHQgd2FzIGhhbmRsZWQgYW5kIHF1aWVzY2VkLg0KICAgID4gTm8g b3RoZXIgaGFuZGxlcnMNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2hvdWxkIHN0aWxsIGJlIGNhbGxlZC4NCiAgICA+ICsgIEByZXR2YWwgRUZJ X1dBUk5fSU5URVJSVVBUX1NPVVJDRV9RVUlFU0NFRCAgVGhlIGludGVycnVwdCBoYXMgYmVlbg0K ICAgID4gcXVpZXNjZWQgYnV0IG90aGVyIGhhbmRsZXJzIHNob3VsZA0KICAgID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGlsbCBiZSBjYWxsZWQuDQog ICAgPiArICBAcmV0dmFsIEVGSV9XQVJOX0lOVEVSUlVQVF9TT1VSQ0VfUEVORElORyAgIFRoZSBp bnRlcnJ1cHQgaXMgc3RpbGwNCiAgICA+IHBlbmRpbmcgYW5kIG90aGVyIGhhbmRsZXJzIHNob3Vs ZCBzdGlsbA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBiZSBjYWxsZWQuDQogICAgPiArICBAcmV0dmFsIEVGSV9JTlRFUlJVUFRfUEVORElORyAg ICAgICAgICAgICAgIFRoZSBpbnRlcnJ1cHQgY291bGQgbm90IGJlDQogICAgPiBxdWllc2NlZC4N CiAgICA+ICsqKi8NCiAgICA+ICtFRklfU1RBVFVTDQogICAgPiArRUZJQVBJDQogICAgPiArU21t VmFyaWFibGVIYW5kbGVyICgNCiAgICA+ICsgIElOICAgICBFRklfSEFORExFICBEaXNwYXRjaEhh bmRsZSwNCiAgICA+ICsgIElOICAgICBDT05TVCBWT0lEICAqUmVnaXN0ZXJDb250ZXh0LA0KICAg ID4gKyAgSU4gT1VUIFZPSUQgICAgICAgICpDb21tQnVmZmVyLA0KICAgID4gKyAgSU4gT1VUIFVJ TlROICAgICAgICpDb21tQnVmZmVyU2l6ZQ0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsg IEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFN0YXR1czsNCiAgICA+ICsgIFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9IRUFERVINCiAgICA+ ICpTbW1WYXJpYWJsZUZ1bmN0aW9uSGVhZGVyOw0KICAgID4gKyAgU01NX1ZBUklBQkxFX0NPTU1V TklDQVRFX0FDQ0VTU19WQVJJQUJMRQ0KICAgID4gKlNtbVZhcmlhYmxlSGVhZGVyOw0KICAgID4g KyAgU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0dFVF9ORVhUX1ZBUklBQkxFX05BTUUNCiAgICA+ ICpHZXROZXh0VmFyaWFibGVOYW1lOw0KICAgID4gKyAgU01NX1ZBUklBQkxFX0NPTU1VTklDQVRF X1FVRVJZX1ZBUklBQkxFX0lORk8NCiAgICA+ICpRdWVyeVZhcmlhYmxlSW5mbzsNCiAgICA+ICsg IFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9HRVRfUEFZTE9BRF9TSVpFDQogICAgPiAqR2V0UGF5 bG9hZFNpemU7DQogICAgPiArICBTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfUlVOVElNRV9WQVJJ QUJMRV9DQUNIRV9DT05URVhUDQogICAgPiAqUnVudGltZVZhcmlhYmxlQ2FjaGVDb250ZXh0Ow0K ICAgID4gKyAgU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0dFVF9SVU5USU1FX0NBQ0hFX0lORk8N CiAgICA+ICpHZXRSdW50aW1lQ2FjaGVJbmZvOw0KICAgID4gKyAgU01NX1ZBUklBQkxFX0NPTU1V TklDQVRFX0xPQ0tfVkFSSUFCTEUNCiAgICA+ICpWYXJpYWJsZVRvTG9jazsNCiAgICA+ICsgIFNN TV9WQVJJQUJMRV9DT01NVU5JQ0FURV9WQVJfQ0hFQ0tfVkFSSUFCTEVfUFJPUEVSVFkNCiAgICA+ ICpDb21tVmFyaWFibGVQcm9wZXJ0eTsNCiAgICA+ICsgIFZBUklBQkxFX0lORk9fRU5UUlkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpWYXJpYWJsZUluZm87DQogICAgPiAr ICBWQVJJQUJMRV9SVU5USU1FX0NBQ0hFX0NPTlRFWFQgICAgICAgICAgICAgICAgICAgICAgICAg ICAqVmFyaWFibGVDYWNoZUNvbnRleHQ7DQogICAgPiArICBWQVJJQUJMRV9TVE9SRV9IRUFERVIg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqVmFyaWFibGVDYWNoZTsNCiAgICA+ ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEluZm9TaXplOw0KICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTmFtZUJ1ZmZlclNpemU7DQogICAgPiArICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tQnVm ZmVyUGF5bG9hZFNpemU7DQogICAgPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBUZW1wQ29tbUJ1ZmZlclNpemU7DQogICAgPiArDQog ICAgPiArICAvLw0KICAgID4gKyAgLy8gSWYgaW5wdXQgaXMgaW52YWxpZCwgc3RvcCBwcm9jZXNz aW5nIHRoaXMgU01JDQogICAgPiArICAvLw0KICAgID4gKyAgaWYgKChDb21tQnVmZmVyID09IE5V TEwpIHx8IChDb21tQnVmZmVyU2l6ZSA9PSBOVUxMKSkgew0KICAgID4gKyAgICByZXR1cm4gRUZJ X1NVQ0NFU1M7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICBUZW1wQ29tbUJ1ZmZlclNp emUgPSAqQ29tbUJ1ZmZlclNpemU7DQogICAgPiArDQogICAgPiArICBpZiAoVGVtcENvbW1CdWZm ZXJTaXplIDwgU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0hFQURFUl9TSVpFKSB7DQogICAgPiAr ICAgIERFQlVHICgoREVCVUdfRVJST1IsICJTbW1WYXJpYWJsZUhhbmRsZXI6IFNNTSBjb21tdW5p Y2F0aW9uIGJ1ZmZlcg0KICAgID4gc2l6ZSBpbnZhbGlkIVxuIikpOw0KICAgID4gKyAgICByZXR1 cm4gRUZJX1NVQ0NFU1M7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICBDb21tQnVmZmVy UGF5bG9hZFNpemUgPSBUZW1wQ29tbUJ1ZmZlclNpemUgLQ0KICAgID4gU01NX1ZBUklBQkxFX0NP TU1VTklDQVRFX0hFQURFUl9TSVpFOw0KICAgID4gKyAgaWYgKENvbW1CdWZmZXJQYXlsb2FkU2l6 ZSA+IG1WYXJpYWJsZUJ1ZmZlclBheWxvYWRTaXplKSB7DQogICAgPiArICAgIERFQlVHICgoREVC VUdfRVJST1IsICJTbW1WYXJpYWJsZUhhbmRsZXI6IFNNTSBjb21tdW5pY2F0aW9uIGJ1ZmZlcg0K ICAgID4gcGF5bG9hZCBzaXplIGludmFsaWQhXG4iKSk7DQogICAgPiArICAgIHJldHVybiBFRklf U1VDQ0VTUzsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIGlmICghVmFyaWFibGVTbW1J c0J1ZmZlck91dHNpZGVTbW1WYWxpZCAoKFVJTlROKUNvbW1CdWZmZXIsDQogICAgPiBUZW1wQ29t bUJ1ZmZlclNpemUpKSB7DQogICAgPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICJTbW1WYXJp YWJsZUhhbmRsZXI6IFNNTSBjb21tdW5pY2F0aW9uIGJ1ZmZlcg0KICAgID4gaW4gU01SQU0gb3Ig b3ZlcmZsb3chXG4iKSk7DQogICAgPiArICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCiAgICA+ICsg IH0NCiAgICA+ICsNCiAgICA+ICsgIFNtbVZhcmlhYmxlRnVuY3Rpb25IZWFkZXIgPSAoU01NX1ZB UklBQkxFX0NPTU1VTklDQVRFX0hFQURFUg0KICAgID4gKilDb21tQnVmZmVyOw0KICAgID4gKyAg c3dpdGNoIChTbW1WYXJpYWJsZUZ1bmN0aW9uSGVhZGVyLT5GdW5jdGlvbikgew0KICAgID4gKyAg ICBjYXNlIFNNTV9WQVJJQUJMRV9GVU5DVElPTl9HRVRfVkFSSUFCTEU6DQogICAgPiArICAgICAg aWYgKENvbW1CdWZmZXJQYXlsb2FkU2l6ZSA8IE9GRlNFVF9PRg0KICAgID4gKFNNTV9WQVJJQUJM RV9DT01NVU5JQ0FURV9BQ0NFU1NfVkFSSUFCTEUsIE5hbWUpKSB7DQogICAgPiArICAgICAgICBE RUJVRyAoKERFQlVHX0VSUk9SLCAiR2V0VmFyaWFibGU6IFNNTSBjb21tdW5pY2F0aW9uIGJ1ZmZl ciBzaXplDQogICAgPiBpbnZhbGlkIVxuIikpOw0KICAgID4gKyAgICAgICAgcmV0dXJuIEVGSV9T VUNDRVNTOw0KICAgID4gKyAgICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgICAvLw0KICAgID4g KyAgICAgIC8vIENvcHkgdGhlIGlucHV0IGNvbW11bmljYXRlIGJ1ZmZlciBwYXlsb2FkIHRvIHBy ZS1hbGxvY2F0ZWQgU01NDQogICAgPiB2YXJpYWJsZSBidWZmZXIgcGF5bG9hZC4NCiAgICA+ICsg ICAgICAvLw0KICAgID4gKyAgICAgIENvcHlNZW0gKG1WYXJpYWJsZUJ1ZmZlclBheWxvYWQsIFNt bVZhcmlhYmxlRnVuY3Rpb25IZWFkZXItPkRhdGEsDQogICAgPiBDb21tQnVmZmVyUGF5bG9hZFNp emUpOw0KICAgID4gKyAgICAgIFNtbVZhcmlhYmxlSGVhZGVyID0NCiAgICA+IChTTU1fVkFSSUFC TEVfQ09NTVVOSUNBVEVfQUNDRVNTX1ZBUklBQkxFDQogICAgPiAqKW1WYXJpYWJsZUJ1ZmZlclBh eWxvYWQ7DQogICAgPiArICAgICAgaWYgKCgoVUlOVE4pKH4wKSAtIFNtbVZhcmlhYmxlSGVhZGVy LT5EYXRhU2l6ZSA8IE9GRlNFVF9PRg0KICAgID4gKFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9B Q0NFU1NfVkFSSUFCTEUsIE5hbWUpKSB8fA0KICAgID4gKyAgICAgICAgICAoKFVJTlROKSh+MCkg LSBTbW1WYXJpYWJsZUhlYWRlci0+TmFtZVNpemUgPCBPRkZTRVRfT0YNCiAgICA+IChTTU1fVkFS SUFCTEVfQ09NTVVOSUNBVEVfQUNDRVNTX1ZBUklBQkxFLCBOYW1lKSArDQogICAgPiBTbW1WYXJp YWJsZUhlYWRlci0+RGF0YVNpemUpKQ0KICAgID4gKyAgICAgIHsNCiAgICA+ICsgICAgICAgIC8v DQogICAgPiArICAgICAgICAvLyBQcmV2ZW50IEluZm9TaXplIG92ZXJmbG93IGhhcHBlbg0KICAg ID4gKyAgICAgICAgLy8NCiAgICA+ICsgICAgICAgIFN0YXR1cyA9IEVGSV9BQ0NFU1NfREVOSUVE Ow0KICAgID4gKyAgICAgICAgZ290byBFWElUOw0KICAgID4gKyAgICAgIH0NCiAgICA+ICsNCiAg ICA+ICsgICAgICBJbmZvU2l6ZSA9IE9GRlNFVF9PRg0KICAgID4gKFNNTV9WQVJJQUJMRV9DT01N VU5JQ0FURV9BQ0NFU1NfVkFSSUFCTEUsIE5hbWUpDQogICAgPiArICAgICAgICAgICAgICAgICAr IFNtbVZhcmlhYmxlSGVhZGVyLT5EYXRhU2l6ZSArIFNtbVZhcmlhYmxlSGVhZGVyLT5OYW1lU2l6 ZTsNCiAgICA+ICsNCiAgICA+ICsgICAgICAvLw0KICAgID4gKyAgICAgIC8vIFNNUkFNIHJhbmdl IGNoZWNrIGFscmVhZHkgY292ZXJlZCBiZWZvcmUNCiAgICA+ICsgICAgICAvLw0KICAgID4gKyAg ICAgIGlmIChJbmZvU2l6ZSA+IENvbW1CdWZmZXJQYXlsb2FkU2l6ZSkgew0KICAgID4gKyAgICAg ICAgREVCVUcgKChERUJVR19FUlJPUiwgIkdldFZhcmlhYmxlOiBEYXRhIHNpemUgZXhjZWVkIGNv bW11bmljYXRpb24NCiAgICA+IGJ1ZmZlciBzaXplIGxpbWl0IVxuIikpOw0KICAgID4gKyAgICAg ICAgU3RhdHVzID0gRUZJX0FDQ0VTU19ERU5JRUQ7DQogICAgPiArICAgICAgICBnb3RvIEVYSVQ7 DQogICAgPiArICAgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICAgIC8vDQogICAgPiArICAgICAg Ly8gVGhlIFZhcmlhYmxlU3BlY3VsYXRpb25CYXJyaWVyKCkgY2FsbCBoZXJlIGlzIHRvIGVuc3Vy ZSB0aGUgcHJldmlvdXMNCiAgICA+ICsgICAgICAvLyByYW5nZS9jb250ZW50IGNoZWNrcyBmb3Ig dGhlIENvbW1CdWZmZXIgaGF2ZSBiZWVuIGNvbXBsZXRlZCBiZWZvcmUNCiAgICA+IHRoZQ0KICAg ID4gKyAgICAgIC8vIHN1YnNlcXVlbnQgY29uc3VtcHRpb24gb2YgdGhlIENvbW1CdWZmZXIgY29u dGVudC4NCiAgICA+ICsgICAgICAvLw0KICAgID4gKyAgICAgIFZhcmlhYmxlU3BlY3VsYXRpb25C YXJyaWVyICgpOw0KICAgID4gKyAgICAgIGlmICgoU21tVmFyaWFibGVIZWFkZXItPk5hbWVTaXpl IDwgc2l6ZW9mIChDSEFSMTYpKSB8fA0KICAgID4gKFNtbVZhcmlhYmxlSGVhZGVyLT5OYW1lW1Nt bVZhcmlhYmxlSGVhZGVyLT5OYW1lU2l6ZS9zaXplb2YgKENIQVIxNikgLQ0KICAgID4gMV0gIT0g TCdcMCcpKSB7DQogICAgPiArICAgICAgICAvLw0KICAgID4gKyAgICAgICAgLy8gTWFrZSBzdXJl IFZhcmlhYmxlTmFtZSBpcyBBIE51bGwtdGVybWluYXRlZCBzdHJpbmcuDQogICAgPiArICAgICAg ICAvLw0KICAgID4gKyAgICAgICAgU3RhdHVzID0gRUZJX0FDQ0VTU19ERU5JRUQ7DQogICAgPiAr ICAgICAgICBnb3RvIEVYSVQ7DQogICAgPiArICAgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICAg IFN0YXR1cyA9IFZhcmlhYmxlU2VydmljZUdldFZhcmlhYmxlICgNCiAgICA+ICsgICAgICAgICAg ICAgICAgIFNtbVZhcmlhYmxlSGVhZGVyLT5OYW1lLA0KICAgID4gKyAgICAgICAgICAgICAgICAg JlNtbVZhcmlhYmxlSGVhZGVyLT5HdWlkLA0KICAgID4gKyAgICAgICAgICAgICAgICAgJlNtbVZh cmlhYmxlSGVhZGVyLT5BdHRyaWJ1dGVzLA0KICAgID4gKyAgICAgICAgICAgICAgICAgJlNtbVZh cmlhYmxlSGVhZGVyLT5EYXRhU2l6ZSwNCiAgICA+ICsgICAgICAgICAgICAgICAgIChVSU5UOCAq KVNtbVZhcmlhYmxlSGVhZGVyLT5OYW1lICsgU21tVmFyaWFibGVIZWFkZXItDQogICAgPiA+TmFt ZVNpemUNCiAgICA+ICsgICAgICAgICAgICAgICAgICk7DQogICAgPiArICAgICAgQ29weU1lbSAo U21tVmFyaWFibGVGdW5jdGlvbkhlYWRlci0+RGF0YSwgbVZhcmlhYmxlQnVmZmVyUGF5bG9hZCwN CiAgICA+IENvbW1CdWZmZXJQYXlsb2FkU2l6ZSk7DQogICAgPiArICAgICAgYnJlYWs7DQogICAg PiArDQogICAgPiArICAgIGNhc2UgU01NX1ZBUklBQkxFX0ZVTkNUSU9OX0dFVF9ORVhUX1ZBUklB QkxFX05BTUU6DQogICAgPiArICAgICAgaWYgKENvbW1CdWZmZXJQYXlsb2FkU2l6ZSA8IE9GRlNF VF9PRg0KICAgID4gKFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9HRVRfTkVYVF9WQVJJQUJMRV9O QU1FLCBOYW1lKSkgew0KICAgID4gKyAgICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkdldE5l eHRWYXJpYWJsZU5hbWU6IFNNTSBjb21tdW5pY2F0aW9uDQogICAgPiBidWZmZXIgc2l6ZSBpbnZh bGlkIVxuIikpOw0KICAgID4gKyAgICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KICAgID4gKyAg ICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgICAvLw0KICAgID4gKyAgICAgIC8vIENvcHkgdGhl IGlucHV0IGNvbW11bmljYXRlIGJ1ZmZlciBwYXlsb2FkIHRvIHByZS1hbGxvY2F0ZWQgU01NDQog ICAgPiB2YXJpYWJsZSBidWZmZXIgcGF5bG9hZC4NCiAgICA+ICsgICAgICAvLw0KICAgID4gKyAg ICAgIENvcHlNZW0gKG1WYXJpYWJsZUJ1ZmZlclBheWxvYWQsIFNtbVZhcmlhYmxlRnVuY3Rpb25I ZWFkZXItPkRhdGEsDQogICAgPiBDb21tQnVmZmVyUGF5bG9hZFNpemUpOw0KICAgID4gKyAgICAg IEdldE5leHRWYXJpYWJsZU5hbWUgPQ0KICAgID4gKFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9H RVRfTkVYVF9WQVJJQUJMRV9OQU1FDQogICAgPiAqKW1WYXJpYWJsZUJ1ZmZlclBheWxvYWQ7DQog ICAgPiArICAgICAgaWYgKChVSU5UTikofjApIC0gR2V0TmV4dFZhcmlhYmxlTmFtZS0+TmFtZVNp emUgPCBPRkZTRVRfT0YNCiAgICA+IChTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfR0VUX05FWFRf VkFSSUFCTEVfTkFNRSwgTmFtZSkpIHsNCiAgICA+ICsgICAgICAgIC8vDQogICAgPiArICAgICAg ICAvLyBQcmV2ZW50IEluZm9TaXplIG92ZXJmbG93IGhhcHBlbg0KICAgID4gKyAgICAgICAgLy8N CiAgICA+ICsgICAgICAgIFN0YXR1cyA9IEVGSV9BQ0NFU1NfREVOSUVEOw0KICAgID4gKyAgICAg ICAgZ290byBFWElUOw0KICAgID4gKyAgICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgICBJbmZv U2l6ZSA9IE9GRlNFVF9PRg0KICAgID4gKFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9HRVRfTkVY VF9WQVJJQUJMRV9OQU1FLCBOYW1lKSArDQogICAgPiBHZXROZXh0VmFyaWFibGVOYW1lLT5OYW1l U2l6ZTsNCiAgICA+ICsNCiAgICA+ICsgICAgICAvLw0KICAgID4gKyAgICAgIC8vIFNNUkFNIHJh bmdlIGNoZWNrIGFscmVhZHkgY292ZXJlZCBiZWZvcmUNCiAgICA+ICsgICAgICAvLw0KICAgID4g KyAgICAgIGlmIChJbmZvU2l6ZSA+IENvbW1CdWZmZXJQYXlsb2FkU2l6ZSkgew0KICAgID4gKyAg ICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkdldE5leHRWYXJpYWJsZU5hbWU6IERhdGEgc2l6 ZSBleGNlZWQNCiAgICA+IGNvbW11bmljYXRpb24gYnVmZmVyIHNpemUgbGltaXQhXG4iKSk7DQog ICAgPiArICAgICAgICBTdGF0dXMgPSBFRklfQUNDRVNTX0RFTklFRDsNCiAgICA+ICsgICAgICAg IGdvdG8gRVhJVDsNCiAgICA+ICsgICAgICB9DQogICAgPiArDQogICAgPiArICAgICAgTmFtZUJ1 ZmZlclNpemUgPSBDb21tQnVmZmVyUGF5bG9hZFNpemUgLSBPRkZTRVRfT0YNCiAgICA+IChTTU1f VkFSSUFCTEVfQ09NTVVOSUNBVEVfR0VUX05FWFRfVkFSSUFCTEVfTkFNRSwgTmFtZSk7DQogICAg PiArICAgICAgaWYgKChOYW1lQnVmZmVyU2l6ZSA8IHNpemVvZiAoQ0hBUjE2KSkgfHwgKEdldE5l eHRWYXJpYWJsZU5hbWUtDQogICAgPiA+TmFtZVtOYW1lQnVmZmVyU2l6ZS9zaXplb2YgKENIQVIx NikgLSAxXSAhPSBMJ1wwJykpIHsNCiAgICA+ICsgICAgICAgIC8vDQogICAgPiArICAgICAgICAv LyBNYWtlIHN1cmUgaW5wdXQgVmFyaWFibGVOYW1lIGlzIEEgTnVsbC10ZXJtaW5hdGVkIHN0cmlu Zy4NCiAgICA+ICsgICAgICAgIC8vDQogICAgPiArICAgICAgICBTdGF0dXMgPSBFRklfQUNDRVNT X0RFTklFRDsNCiAgICA+ICsgICAgICAgIGdvdG8gRVhJVDsNCiAgICA+ICsgICAgICB9DQogICAg PiArDQogICAgPiArICAgICAgU3RhdHVzID0gVmFyaWFibGVTZXJ2aWNlR2V0TmV4dFZhcmlhYmxl TmFtZSAoDQogICAgPiArICAgICAgICAgICAgICAgICAmR2V0TmV4dFZhcmlhYmxlTmFtZS0+TmFt ZVNpemUsDQogICAgPiArICAgICAgICAgICAgICAgICBHZXROZXh0VmFyaWFibGVOYW1lLT5OYW1l LA0KICAgID4gKyAgICAgICAgICAgICAgICAgJkdldE5leHRWYXJpYWJsZU5hbWUtPkd1aWQNCiAg ICA+ICsgICAgICAgICAgICAgICAgICk7DQogICAgPiArICAgICAgQ29weU1lbSAoU21tVmFyaWFi bGVGdW5jdGlvbkhlYWRlci0+RGF0YSwgbVZhcmlhYmxlQnVmZmVyUGF5bG9hZCwNCiAgICA+IENv bW1CdWZmZXJQYXlsb2FkU2l6ZSk7DQogICAgPiArICAgICAgYnJlYWs7DQogICAgPiArDQogICAg PiArICAgIGNhc2UgU01NX1ZBUklBQkxFX0ZVTkNUSU9OX1NFVF9WQVJJQUJMRToNCiAgICA+ICsg ICAgICBpZiAoQ29tbUJ1ZmZlclBheWxvYWRTaXplIDwgT0ZGU0VUX09GDQogICAgPiAoU01NX1ZB UklBQkxFX0NPTU1VTklDQVRFX0FDQ0VTU19WQVJJQUJMRSwgTmFtZSkpIHsNCiAgICA+ICsgICAg ICAgIERFQlVHICgoREVCVUdfRVJST1IsICJTZXRWYXJpYWJsZTogU01NIGNvbW11bmljYXRpb24g YnVmZmVyIHNpemUNCiAgICA+IGludmFsaWQhXG4iKSk7DQogICAgPiArICAgICAgICByZXR1cm4g RUZJX1NVQ0NFU1M7DQogICAgPiArICAgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICAgIC8vDQog ICAgPiArICAgICAgLy8gQ29weSB0aGUgaW5wdXQgY29tbXVuaWNhdGUgYnVmZmVyIHBheWxvYWQg dG8gcHJlLWFsbG9jYXRlZCBTTU0NCiAgICA+IHZhcmlhYmxlIGJ1ZmZlciBwYXlsb2FkLg0KICAg ID4gKyAgICAgIC8vDQogICAgPiArICAgICAgQ29weU1lbSAobVZhcmlhYmxlQnVmZmVyUGF5bG9h ZCwgU21tVmFyaWFibGVGdW5jdGlvbkhlYWRlci0+RGF0YSwNCiAgICA+IENvbW1CdWZmZXJQYXls b2FkU2l6ZSk7DQogICAgPiArICAgICAgU21tVmFyaWFibGVIZWFkZXIgPQ0KICAgID4gKFNNTV9W QVJJQUJMRV9DT01NVU5JQ0FURV9BQ0NFU1NfVkFSSUFCTEUNCiAgICA+ICopbVZhcmlhYmxlQnVm ZmVyUGF5bG9hZDsNCiAgICA+ICsgICAgICBpZiAoKChVSU5UTikofjApIC0gU21tVmFyaWFibGVI ZWFkZXItPkRhdGFTaXplIDwgT0ZGU0VUX09GDQogICAgPiAoU01NX1ZBUklBQkxFX0NPTU1VTklD QVRFX0FDQ0VTU19WQVJJQUJMRSwgTmFtZSkpIHx8DQogICAgPiArICAgICAgICAgICgoVUlOVE4p KH4wKSAtIFNtbVZhcmlhYmxlSGVhZGVyLT5OYW1lU2l6ZSA8IE9GRlNFVF9PRg0KICAgID4gKFNN TV9WQVJJQUJMRV9DT01NVU5JQ0FURV9BQ0NFU1NfVkFSSUFCTEUsIE5hbWUpICsNCiAgICA+IFNt bVZhcmlhYmxlSGVhZGVyLT5EYXRhU2l6ZSkpDQogICAgPiArICAgICAgew0KICAgID4gKyAgICAg ICAgLy8NCiAgICA+ICsgICAgICAgIC8vIFByZXZlbnQgSW5mb1NpemUgb3ZlcmZsb3cgaGFwcGVu DQogICAgPiArICAgICAgICAvLw0KICAgID4gKyAgICAgICAgU3RhdHVzID0gRUZJX0FDQ0VTU19E RU5JRUQ7DQogICAgPiArICAgICAgICBnb3RvIEVYSVQ7DQogICAgPiArICAgICAgfQ0KICAgID4g Kw0KICAgID4gKyAgICAgIEluZm9TaXplID0gT0ZGU0VUX09GDQogICAgPiAoU01NX1ZBUklBQkxF X0NPTU1VTklDQVRFX0FDQ0VTU19WQVJJQUJMRSwgTmFtZSkNCiAgICA+ICsgICAgICAgICAgICAg ICAgICsgU21tVmFyaWFibGVIZWFkZXItPkRhdGFTaXplICsgU21tVmFyaWFibGVIZWFkZXItPk5h bWVTaXplOw0KICAgID4gKw0KICAgID4gKyAgICAgIC8vDQogICAgPiArICAgICAgLy8gU01SQU0g cmFuZ2UgY2hlY2sgYWxyZWFkeSBjb3ZlcmVkIGJlZm9yZQ0KICAgID4gKyAgICAgIC8vIERhdGEg YnVmZmVyIHNob3VsZCBub3QgY29udGFpbiBTTU0gcmFuZ2UNCiAgICA+ICsgICAgICAvLw0KICAg ID4gKyAgICAgIGlmIChJbmZvU2l6ZSA+IENvbW1CdWZmZXJQYXlsb2FkU2l6ZSkgew0KICAgID4g KyAgICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIlNldFZhcmlhYmxlOiBEYXRhIHNpemUgZXhj ZWVkIGNvbW11bmljYXRpb24NCiAgICA+IGJ1ZmZlciBzaXplIGxpbWl0IVxuIikpOw0KICAgID4g KyAgICAgICAgU3RhdHVzID0gRUZJX0FDQ0VTU19ERU5JRUQ7DQogICAgPiArICAgICAgICBnb3Rv IEVYSVQ7DQogICAgPiArICAgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICAgIC8vDQogICAgPiAr ICAgICAgLy8gVGhlIFZhcmlhYmxlU3BlY3VsYXRpb25CYXJyaWVyKCkgY2FsbCBoZXJlIGlzIHRv IGVuc3VyZSB0aGUgcHJldmlvdXMNCiAgICA+ICsgICAgICAvLyByYW5nZS9jb250ZW50IGNoZWNr cyBmb3IgdGhlIENvbW1CdWZmZXIgaGF2ZSBiZWVuIGNvbXBsZXRlZCBiZWZvcmUNCiAgICA+IHRo ZQ0KICAgID4gKyAgICAgIC8vIHN1YnNlcXVlbnQgY29uc3VtcHRpb24gb2YgdGhlIENvbW1CdWZm ZXIgY29udGVudC4NCiAgICA+ICsgICAgICAvLw0KICAgID4gKyAgICAgIFZhcmlhYmxlU3BlY3Vs YXRpb25CYXJyaWVyICgpOw0KICAgID4gKyAgICAgIGlmICgoU21tVmFyaWFibGVIZWFkZXItPk5h bWVTaXplIDwgc2l6ZW9mIChDSEFSMTYpKSB8fA0KICAgID4gKFNtbVZhcmlhYmxlSGVhZGVyLT5O YW1lW1NtbVZhcmlhYmxlSGVhZGVyLT5OYW1lU2l6ZS9zaXplb2YgKENIQVIxNikgLQ0KICAgID4g MV0gIT0gTCdcMCcpKSB7DQogICAgPiArICAgICAgICAvLw0KICAgID4gKyAgICAgICAgLy8gTWFr ZSBzdXJlIFZhcmlhYmxlTmFtZSBpcyBBIE51bGwtdGVybWluYXRlZCBzdHJpbmcuDQogICAgPiAr ICAgICAgICAvLw0KICAgID4gKyAgICAgICAgU3RhdHVzID0gRUZJX0FDQ0VTU19ERU5JRUQ7DQog ICAgPiArICAgICAgICBnb3RvIEVYSVQ7DQogICAgPiArICAgICAgfQ0KICAgID4gKw0KICAgID4g KyAgICAgIFN0YXR1cyA9IFZhcmlhYmxlU2VydmljZVNldFZhcmlhYmxlICgNCiAgICA+ICsgICAg ICAgICAgICAgICAgIFNtbVZhcmlhYmxlSGVhZGVyLT5OYW1lLA0KICAgID4gKyAgICAgICAgICAg ICAgICAgJlNtbVZhcmlhYmxlSGVhZGVyLT5HdWlkLA0KICAgID4gKyAgICAgICAgICAgICAgICAg U21tVmFyaWFibGVIZWFkZXItPkF0dHJpYnV0ZXMsDQogICAgPiArICAgICAgICAgICAgICAgICBT bW1WYXJpYWJsZUhlYWRlci0+RGF0YVNpemUsDQogICAgPiArICAgICAgICAgICAgICAgICAoVUlO VDggKilTbW1WYXJpYWJsZUhlYWRlci0+TmFtZSArIFNtbVZhcmlhYmxlSGVhZGVyLQ0KICAgID4g Pk5hbWVTaXplDQogICAgPiArICAgICAgICAgICAgICAgICApOw0KICAgID4gKyAgICAgIGJyZWFr Ow0KICAgID4gKw0KICAgID4gKyAgICBjYXNlIFNNTV9WQVJJQUJMRV9GVU5DVElPTl9RVUVSWV9W QVJJQUJMRV9JTkZPOg0KICAgID4gKyAgICAgIGlmIChDb21tQnVmZmVyUGF5bG9hZFNpemUgPCBz aXplb2YNCiAgICA+IChTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfUVVFUllfVkFSSUFCTEVfSU5G TykpIHsNCiAgICA+ICsgICAgICAgIERFQlVHICgoREVCVUdfRVJST1IsICJRdWVyeVZhcmlhYmxl SW5mbzogU01NIGNvbW11bmljYXRpb24gYnVmZmVyDQogICAgPiBzaXplIGludmFsaWQhXG4iKSk7 DQogICAgPiArICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQogICAgPiArICAgICAgfQ0KICAg ID4gKw0KICAgID4gKyAgICAgIFF1ZXJ5VmFyaWFibGVJbmZvID0NCiAgICA+IChTTU1fVkFSSUFC TEVfQ09NTVVOSUNBVEVfUVVFUllfVkFSSUFCTEVfSU5GTw0KICAgID4gKilTbW1WYXJpYWJsZUZ1 bmN0aW9uSGVhZGVyLT5EYXRhOw0KICAgID4gKw0KICAgID4gKyAgICAgIFN0YXR1cyA9IFZhcmlh YmxlU2VydmljZVF1ZXJ5VmFyaWFibGVJbmZvICgNCiAgICA+ICsgICAgICAgICAgICAgICAgIFF1 ZXJ5VmFyaWFibGVJbmZvLT5BdHRyaWJ1dGVzLA0KICAgID4gKyAgICAgICAgICAgICAgICAgJlF1 ZXJ5VmFyaWFibGVJbmZvLT5NYXhpbXVtVmFyaWFibGVTdG9yYWdlU2l6ZSwNCiAgICA+ICsgICAg ICAgICAgICAgICAgICZRdWVyeVZhcmlhYmxlSW5mby0+UmVtYWluaW5nVmFyaWFibGVTdG9yYWdl U2l6ZSwNCiAgICA+ICsgICAgICAgICAgICAgICAgICZRdWVyeVZhcmlhYmxlSW5mby0+TWF4aW11 bVZhcmlhYmxlU2l6ZQ0KICAgID4gKyAgICAgICAgICAgICAgICAgKTsNCiAgICA+ICsgICAgICBi cmVhazsNCiAgICA+ICsNCiAgICA+ICsgICAgY2FzZSBTTU1fVkFSSUFCTEVfRlVOQ1RJT05fR0VU X1BBWUxPQURfU0laRToNCiAgICA+ICsgICAgICBpZiAoQ29tbUJ1ZmZlclBheWxvYWRTaXplIDwg c2l6ZW9mDQogICAgPiAoU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0dFVF9QQVlMT0FEX1NJWkUp KSB7DQogICAgPiArICAgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiR2V0UGF5bG9hZFNpemU6 IFNNTSBjb21tdW5pY2F0aW9uIGJ1ZmZlcg0KICAgID4gc2l6ZSBpbnZhbGlkIVxuIikpOw0KICAg ID4gKyAgICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KICAgID4gKyAgICAgIH0NCiAgICA+ICsN CiAgICA+ICsgICAgICBHZXRQYXlsb2FkU2l6ZSAgICAgICAgICAgICAgICAgICAgICA9DQogICAg PiAoU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0dFVF9QQVlMT0FEX1NJWkUNCiAgICA+ICopU21t VmFyaWFibGVGdW5jdGlvbkhlYWRlci0+RGF0YTsNCiAgICA+ICsgICAgICBHZXRQYXlsb2FkU2l6 ZS0+VmFyaWFibGVQYXlsb2FkU2l6ZSA9IG1WYXJpYWJsZUJ1ZmZlclBheWxvYWRTaXplOw0KICAg ID4gKyAgICAgIFN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gRUZJX1NVQ0NF U1M7DQogICAgPiArICAgICAgYnJlYWs7DQogICAgPiArDQogICAgPiArICAgIGNhc2UgU01NX1ZB UklBQkxFX0ZVTkNUSU9OX1JFQURZX1RPX0JPT1Q6DQogICAgPiArICAgICAgaWYgKEF0UnVudGlt ZSAoKSkgew0KICAgID4gKyAgICAgICAgU3RhdHVzID0gRUZJX1VOU1VQUE9SVEVEOw0KICAgID4g KyAgICAgICAgYnJlYWs7DQogICAgPiArICAgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICAgIGlm ICghbUVuZE9mRHhlKSB7DQogICAgPiArICAgICAgICBNb3JMb2NrSW5pdEF0RW5kT2ZEeGUgKCk7 DQogICAgPiArICAgICAgICBTdGF0dXMgPSBMb2NrVmFyaWFibGVQb2xpY3kgKCk7DQogICAgPiAr ICAgICAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KICAgID4gKyAgICAgICAgbUVuZE9m RHhlID0gVFJVRTsNCiAgICA+ICsgICAgICAgIFZhckNoZWNrTGliSW5pdGlhbGl6ZUF0RW5kT2ZE eGUgKE5VTEwpOw0KICAgID4gKyAgICAgICAgLy8NCiAgICA+ICsgICAgICAgIC8vIFRoZSBpbml0 aWFsaXphdGlvbiBmb3IgdmFyaWFibGUgcXVvdGEuDQogICAgPiArICAgICAgICAvLw0KICAgID4g KyAgICAgICAgSW5pdGlhbGl6ZVZhcmlhYmxlUXVvdGEgKCk7DQogICAgPiArICAgICAgfQ0KICAg ID4gKw0KICAgID4gKyAgICAgIFJlY2xhaW1Gb3JPUyAoKTsNCiAgICA+ICsgICAgICBTdGF0dXMg PSBFRklfU1VDQ0VTUzsNCiAgICA+ICsgICAgICBicmVhazsNCiAgICA+ICsNCiAgICA+ICsgICAg Y2FzZSBTTU1fVkFSSUFCTEVfRlVOQ1RJT05fRVhJVF9CT09UX1NFUlZJQ0U6DQogICAgPiArICAg ICAgbUF0UnVudGltZSA9IFRSVUU7DQogICAgPiArICAgICAgU3RhdHVzICAgICA9IEVGSV9TVUND RVNTOw0KICAgID4gKyAgICAgIGJyZWFrOw0KICAgID4gKw0KICAgID4gKyAgICBjYXNlIFNNTV9W QVJJQUJMRV9GVU5DVElPTl9HRVRfU1RBVElTVElDUzoNCiAgICA+ICsgICAgICBWYXJpYWJsZUlu Zm8gPSAoVkFSSUFCTEVfSU5GT19FTlRSWSAqKVNtbVZhcmlhYmxlRnVuY3Rpb25IZWFkZXItDQog ICAgPiA+RGF0YTsNCiAgICA+ICsgICAgICBJbmZvU2l6ZSAgICAgPSBUZW1wQ29tbUJ1ZmZlclNp emUgLQ0KICAgID4gU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0hFQURFUl9TSVpFOw0KICAgID4g Kw0KICAgID4gKyAgICAgIC8vDQogICAgPiArICAgICAgLy8gRG8gbm90IG5lZWQgdG8gY2hlY2sg U21tVmFyaWFibGVGdW5jdGlvbkhlYWRlci0+RGF0YSBpbiBTTVJBTQ0KICAgID4gaGVyZS4NCiAg ICA+ICsgICAgICAvLyBJdCBpcyBjb3ZlcmVkIGJ5IHByZXZpb3VzIENvbW1CdWZmZXIgY2hlY2sN CiAgICA+ICsgICAgICAvLw0KICAgID4gKw0KICAgID4gKyAgICAgIC8vDQogICAgPiArICAgICAg Ly8gRG8gbm90IG5lZWQgdG8gY2hlY2sgQ29tbUJ1ZmZlclNpemUgYnVmZmVyIGFzIGl0IHNob3Vs ZCBwb2ludCB0bw0KICAgID4gU01SQU0NCiAgICA+ICsgICAgICAvLyB0aGF0IHdhcyB1c2VkIGJ5 IFNNTSBjb3JlIHRvIGNhY2hlIENvbW1TaXplIGZyb20NCiAgICA+IFNtbUNvbW11bmljYXRpb24g cHJvdG9jb2wuDQogICAgPiArICAgICAgLy8NCiAgICA+ICsNCiAgICA+ICsgICAgICBTdGF0dXMg ICAgICAgICAgPSBTbW1WYXJpYWJsZUdldFN0YXRpc3RpY3MgKFZhcmlhYmxlSW5mbywgJkluZm9T aXplKTsNCiAgICA+ICsgICAgICAqQ29tbUJ1ZmZlclNpemUgPSBJbmZvU2l6ZSArDQogICAgPiBT TU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfSEVBREVSX1NJWkU7DQogICAgPiArICAgICAgYnJlYWs7 DQogICAgPiArDQogICAgPiArICAgIGNhc2UgU01NX1ZBUklBQkxFX0ZVTkNUSU9OX0xPQ0tfVkFS SUFCTEU6DQogICAgPiArICAgICAgaWYgKG1FbmRPZkR4ZSkgew0KICAgID4gKyAgICAgICAgU3Rh dHVzID0gRUZJX0FDQ0VTU19ERU5JRUQ7DQogICAgPiArICAgICAgfSBlbHNlIHsNCiAgICA+ICsg ICAgICAgIFZhcmlhYmxlVG9Mb2NrID0gKFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9MT0NLX1ZB UklBQkxFDQogICAgPiAqKVNtbVZhcmlhYmxlRnVuY3Rpb25IZWFkZXItPkRhdGE7DQogICAgPiAr ICAgICAgICBTdGF0dXMgICAgICAgICA9IFZhcmlhYmxlTG9ja1JlcXVlc3RUb0xvY2sgKA0KICAg ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQogICAgPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgVmFyaWFibGVUb0xvY2stPk5hbWUsDQogICAgPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgJlZhcmlhYmxlVG9Mb2NrLT5HdWlkDQogICAgPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsNCiAgICA+ICsgICAgICB9DQogICAgPiArDQogICAgPiArICAgICAg YnJlYWs7DQogICAgPiArICAgIGNhc2UgU01NX1ZBUklBQkxFX0ZVTkNUSU9OX1ZBUl9DSEVDS19W QVJJQUJMRV9QUk9QRVJUWV9TRVQ6DQogICAgPiArICAgICAgaWYgKG1FbmRPZkR4ZSkgew0KICAg ID4gKyAgICAgICAgU3RhdHVzID0gRUZJX0FDQ0VTU19ERU5JRUQ7DQogICAgPiArICAgICAgfSBl bHNlIHsNCiAgICA+ICsgICAgICAgIENvbW1WYXJpYWJsZVByb3BlcnR5ID0NCiAgICA+IChTTU1f VkFSSUFCTEVfQ09NTVVOSUNBVEVfVkFSX0NIRUNLX1ZBUklBQkxFX1BST1BFUlRZDQogICAgPiAq KVNtbVZhcmlhYmxlRnVuY3Rpb25IZWFkZXItPkRhdGE7DQogICAgPiArICAgICAgICBTdGF0dXMg ICAgICAgICAgICAgICA9IFZhckNoZWNrVmFyaWFibGVQcm9wZXJ0eVNldCAoDQogICAgPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbVZhcmlhYmxlUHJvcGVydHktPk5hbWUs DQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkNvbW1WYXJpYWJsZVBy b3BlcnR5LT5HdWlkLA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZD b21tVmFyaWFibGVQcm9wZXJ0eS0+VmFyaWFibGVQcm9wZXJ0eQ0KICAgID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgPiArICAgICAgfQ0KICAgID4gKw0KICAgID4g KyAgICAgIGJyZWFrOw0KICAgID4gKyAgICBjYXNlIFNNTV9WQVJJQUJMRV9GVU5DVElPTl9WQVJf Q0hFQ0tfVkFSSUFCTEVfUFJPUEVSVFlfR0VUOg0KICAgID4gKyAgICAgIGlmIChDb21tQnVmZmVy UGF5bG9hZFNpemUgPCBPRkZTRVRfT0YNCiAgICA+IChTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVf VkFSX0NIRUNLX1ZBUklBQkxFX1BST1BFUlRZLCBOYW1lKSkNCiAgICA+IHsNCiAgICA+ICsgICAg ICAgIERFQlVHICgoREVCVUdfRVJST1IsICJWYXJDaGVja1ZhcmlhYmxlUHJvcGVydHlHZXQ6IFNN TQ0KICAgID4gY29tbXVuaWNhdGlvbiBidWZmZXIgc2l6ZSBpbnZhbGlkIVxuIikpOw0KICAgID4g KyAgICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KICAgID4gKyAgICAgIH0NCiAgICA+ICsNCiAg ICA+ICsgICAgICAvLw0KICAgID4gKyAgICAgIC8vIENvcHkgdGhlIGlucHV0IGNvbW11bmljYXRl IGJ1ZmZlciBwYXlsb2FkIHRvIHByZS1hbGxvY2F0ZWQgU01NDQogICAgPiB2YXJpYWJsZSBidWZm ZXIgcGF5bG9hZC4NCiAgICA+ICsgICAgICAvLw0KICAgID4gKyAgICAgIENvcHlNZW0gKG1WYXJp YWJsZUJ1ZmZlclBheWxvYWQsIFNtbVZhcmlhYmxlRnVuY3Rpb25IZWFkZXItPkRhdGEsDQogICAg PiBDb21tQnVmZmVyUGF5bG9hZFNpemUpOw0KICAgID4gKyAgICAgIENvbW1WYXJpYWJsZVByb3Bl cnR5ID0NCiAgICA+IChTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfVkFSX0NIRUNLX1ZBUklBQkxF X1BST1BFUlRZDQogICAgPiAqKW1WYXJpYWJsZUJ1ZmZlclBheWxvYWQ7DQogICAgPiArICAgICAg aWYgKChVSU5UTikofjApIC0gQ29tbVZhcmlhYmxlUHJvcGVydHktPk5hbWVTaXplIDwgT0ZGU0VU X09GDQogICAgPiAoU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX1ZBUl9DSEVDS19WQVJJQUJMRV9Q Uk9QRVJUWSwgTmFtZSkpDQogICAgPiB7DQogICAgPiArICAgICAgICAvLw0KICAgID4gKyAgICAg ICAgLy8gUHJldmVudCBJbmZvU2l6ZSBvdmVyZmxvdyBoYXBwZW4NCiAgICA+ICsgICAgICAgIC8v DQogICAgPiArICAgICAgICBTdGF0dXMgPSBFRklfQUNDRVNTX0RFTklFRDsNCiAgICA+ICsgICAg ICAgIGdvdG8gRVhJVDsNCiAgICA+ICsgICAgICB9DQogICAgPiArDQogICAgPiArICAgICAgSW5m b1NpemUgPSBPRkZTRVRfT0YNCiAgICA+IChTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfVkFSX0NI RUNLX1ZBUklBQkxFX1BST1BFUlRZLCBOYW1lKSArDQogICAgPiBDb21tVmFyaWFibGVQcm9wZXJ0 eS0+TmFtZVNpemU7DQogICAgPiArDQogICAgPiArICAgICAgLy8NCiAgICA+ICsgICAgICAvLyBT TVJBTSByYW5nZSBjaGVjayBhbHJlYWR5IGNvdmVyZWQgYmVmb3JlDQogICAgPiArICAgICAgLy8N CiAgICA+ICsgICAgICBpZiAoSW5mb1NpemUgPiBDb21tQnVmZmVyUGF5bG9hZFNpemUpIHsNCiAg ICA+ICsgICAgICAgIERFQlVHICgoREVCVUdfRVJST1IsICJWYXJDaGVja1ZhcmlhYmxlUHJvcGVy dHlHZXQ6IERhdGEgc2l6ZSBleGNlZWQNCiAgICA+IGNvbW11bmljYXRpb24gYnVmZmVyIHNpemUg bGltaXQhXG4iKSk7DQogICAgPiArICAgICAgICBTdGF0dXMgPSBFRklfQUNDRVNTX0RFTklFRDsN CiAgICA+ICsgICAgICAgIGdvdG8gRVhJVDsNCiAgICA+ICsgICAgICB9DQogICAgPiArDQogICAg PiArICAgICAgLy8NCiAgICA+ICsgICAgICAvLyBUaGUgVmFyaWFibGVTcGVjdWxhdGlvbkJhcnJp ZXIoKSBjYWxsIGhlcmUgaXMgdG8gZW5zdXJlIHRoZSBwcmV2aW91cw0KICAgID4gKyAgICAgIC8v IHJhbmdlL2NvbnRlbnQgY2hlY2tzIGZvciB0aGUgQ29tbUJ1ZmZlciBoYXZlIGJlZW4gY29tcGxl dGVkIGJlZm9yZQ0KICAgID4gdGhlDQogICAgPiArICAgICAgLy8gc3Vic2VxdWVudCBjb25zdW1w dGlvbiBvZiB0aGUgQ29tbUJ1ZmZlciBjb250ZW50Lg0KICAgID4gKyAgICAgIC8vDQogICAgPiAr ICAgICAgVmFyaWFibGVTcGVjdWxhdGlvbkJhcnJpZXIgKCk7DQogICAgPiArICAgICAgaWYgKChD b21tVmFyaWFibGVQcm9wZXJ0eS0+TmFtZVNpemUgPCBzaXplb2YgKENIQVIxNikpIHx8DQogICAg PiAoQ29tbVZhcmlhYmxlUHJvcGVydHktPk5hbWVbQ29tbVZhcmlhYmxlUHJvcGVydHktPk5hbWVT aXplL3NpemVvZg0KICAgID4gKENIQVIxNikgLSAxXSAhPSBMJ1wwJykpIHsNCiAgICA+ICsgICAg ICAgIC8vDQogICAgPiArICAgICAgICAvLyBNYWtlIHN1cmUgVmFyaWFibGVOYW1lIGlzIEEgTnVs bC10ZXJtaW5hdGVkIHN0cmluZy4NCiAgICA+ICsgICAgICAgIC8vDQogICAgPiArICAgICAgICBT dGF0dXMgPSBFRklfQUNDRVNTX0RFTklFRDsNCiAgICA+ICsgICAgICAgIGdvdG8gRVhJVDsNCiAg ICA+ICsgICAgICB9DQogICAgPiArDQogICAgPiArICAgICAgU3RhdHVzID0gVmFyQ2hlY2tWYXJp YWJsZVByb3BlcnR5R2V0ICgNCiAgICA+ICsgICAgICAgICAgICAgICAgIENvbW1WYXJpYWJsZVBy b3BlcnR5LT5OYW1lLA0KICAgID4gKyAgICAgICAgICAgICAgICAgJkNvbW1WYXJpYWJsZVByb3Bl cnR5LT5HdWlkLA0KICAgID4gKyAgICAgICAgICAgICAgICAgJkNvbW1WYXJpYWJsZVByb3BlcnR5 LT5WYXJpYWJsZVByb3BlcnR5DQogICAgPiArICAgICAgICAgICAgICAgICApOw0KICAgID4gKyAg ICAgIENvcHlNZW0gKFNtbVZhcmlhYmxlRnVuY3Rpb25IZWFkZXItPkRhdGEsIG1WYXJpYWJsZUJ1 ZmZlclBheWxvYWQsDQogICAgPiBDb21tQnVmZmVyUGF5bG9hZFNpemUpOw0KICAgID4gKyAgICAg IGJyZWFrOw0KICAgID4gKyAgICBjYXNlDQogICAgPiBTTU1fVkFSSUFCTEVfRlVOQ1RJT05fSU5J VF9SVU5USU1FX1ZBUklBQkxFX0NBQ0hFX0NPTlRFWFQ6DQogICAgPiArICAgICAgaWYgKENvbW1C dWZmZXJQYXlsb2FkU2l6ZSA8IHNpemVvZg0KICAgID4gKFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FU RV9SVU5USU1FX1ZBUklBQkxFX0NBQ0hFX0NPTlRFWFQpKSB7DQogICAgPiArICAgICAgICBERUJV RyAoKERFQlVHX0VSUk9SLCAiSW5pdFJ1bnRpbWVWYXJpYWJsZUNhY2hlQ29udGV4dDogU01NDQog ICAgPiBjb21tdW5pY2F0aW9uIGJ1ZmZlciBzaXplIGludmFsaWQhXG4iKSk7DQogICAgPiArICAg ICAgICBTdGF0dXMgPSBFRklfQUNDRVNTX0RFTklFRDsNCiAgICA+ICsgICAgICAgIGdvdG8gRVhJ VDsNCiAgICA+ICsgICAgICB9DQogICAgPiArDQogICAgPiArICAgICAgaWYgKG1FbmRPZkR4ZSkg ew0KICAgID4gKyAgICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkluaXRSdW50aW1lVmFyaWFi bGVDYWNoZUNvbnRleHQ6IENhbm5vdCBpbml0DQogICAgPiBjb250ZXh0IGFmdGVyIGVuZCBvZiBE WEUhXG4iKSk7DQogICAgPiArICAgICAgICBTdGF0dXMgPSBFRklfQUNDRVNTX0RFTklFRDsNCiAg ICA+ICsgICAgICAgIGdvdG8gRVhJVDsNCiAgICA+ICsgICAgICB9DQogICAgPiArDQogICAgPiAr ICAgICAgLy8NCiAgICA+ICsgICAgICAvLyBDb3B5IHRoZSBpbnB1dCBjb21tdW5pY2F0ZSBidWZm ZXIgcGF5bG9hZCB0byB0aGUgcHJlLWFsbG9jYXRlZCBTTU0NCiAgICA+IHZhcmlhYmxlIHBheWxv YWQgYnVmZmVyLg0KICAgID4gKyAgICAgIC8vDQogICAgPiArICAgICAgQ29weU1lbSAobVZhcmlh YmxlQnVmZmVyUGF5bG9hZCwgU21tVmFyaWFibGVGdW5jdGlvbkhlYWRlci0+RGF0YSwNCiAgICA+ IENvbW1CdWZmZXJQYXlsb2FkU2l6ZSk7DQogICAgPiArICAgICAgUnVudGltZVZhcmlhYmxlQ2Fj aGVDb250ZXh0ID0NCiAgICA+IChTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfUlVOVElNRV9WQVJJ QUJMRV9DQUNIRV9DT05URVhUDQogICAgPiAqKW1WYXJpYWJsZUJ1ZmZlclBheWxvYWQ7DQogICAg PiArDQogICAgPiArICAgICAgLy8NCiAgICA+ICsgICAgICAvLyBWZXJpZnkgcmVxdWlyZWQgcnVu dGltZSBjYWNoZSBidWZmZXJzIGFyZSBwcm92aWRlZC4NCiAgICA+ICsgICAgICAvLw0KICAgID4g KyAgICAgIGlmICgoUnVudGltZVZhcmlhYmxlQ2FjaGVDb250ZXh0LT5SdW50aW1lVm9sYXRpbGVD YWNoZSA9PSBOVUxMKSB8fA0KICAgID4gKyAgICAgICAgICAoUnVudGltZVZhcmlhYmxlQ2FjaGVD b250ZXh0LT5SdW50aW1lTnZDYWNoZSA9PSBOVUxMKSB8fA0KICAgID4gKyAgICAgICAgICAoUnVu dGltZVZhcmlhYmxlQ2FjaGVDb250ZXh0LT5QZW5kaW5nVXBkYXRlID09IE5VTEwpIHx8DQogICAg PiArICAgICAgICAgIChSdW50aW1lVmFyaWFibGVDYWNoZUNvbnRleHQtPlJlYWRMb2NrID09IE5V TEwpIHx8DQogICAgPiArICAgICAgICAgIChSdW50aW1lVmFyaWFibGVDYWNoZUNvbnRleHQtPkhv YkZsdXNoQ29tcGxldGUgPT0gTlVMTCkpDQogICAgPiArICAgICAgew0KICAgID4gKyAgICAgICAg REVCVUcgKChERUJVR19FUlJPUiwgIkluaXRSdW50aW1lVmFyaWFibGVDYWNoZUNvbnRleHQ6IFJl cXVpcmVkDQogICAgPiBydW50aW1lIGNhY2hlIGJ1ZmZlciBpcyBOVUxMIVxuIikpOw0KICAgID4g KyAgICAgICAgU3RhdHVzID0gRUZJX0FDQ0VTU19ERU5JRUQ7DQogICAgPiArICAgICAgICBnb3Rv IEVYSVQ7DQogICAgPiArICAgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICAgIC8vDQogICAgPiAr ICAgICAgLy8gVmVyaWZ5IG1pbmltdW0gc2l6ZSByZXF1aXJlbWVudHMgZm9yIHRoZSBydW50aW1l IHZhcmlhYmxlIHN0b3JlIGJ1ZmZlcnMuDQogICAgPiArICAgICAgLy8NCiAgICA+ICsgICAgICBp ZiAoKChSdW50aW1lVmFyaWFibGVDYWNoZUNvbnRleHQtPlJ1bnRpbWVIb2JDYWNoZSAhPSBOVUxM KSAmJg0KICAgID4gKyAgICAgICAgICAgKFJ1bnRpbWVWYXJpYWJsZUNhY2hlQ29udGV4dC0+UnVu dGltZUhvYkNhY2hlLT5TaXplIDwgc2l6ZW9mDQogICAgPiAoVkFSSUFCTEVfU1RPUkVfSEVBREVS KSkpIHx8DQogICAgPiArICAgICAgICAgIChSdW50aW1lVmFyaWFibGVDYWNoZUNvbnRleHQtPlJ1 bnRpbWVWb2xhdGlsZUNhY2hlLT5TaXplIDwgc2l6ZW9mDQogICAgPiAoVkFSSUFCTEVfU1RPUkVf SEVBREVSKSkgfHwNCiAgICA+ICsgICAgICAgICAgKFJ1bnRpbWVWYXJpYWJsZUNhY2hlQ29udGV4 dC0+UnVudGltZU52Q2FjaGUtPlNpemUgPCBzaXplb2YNCiAgICA+IChWQVJJQUJMRV9TVE9SRV9I RUFERVIpKSkNCiAgICA+ICsgICAgICB7DQogICAgPiArICAgICAgICBERUJVRyAoKERFQlVHX0VS Uk9SLCAiSW5pdFJ1bnRpbWVWYXJpYWJsZUNhY2hlQ29udGV4dDogQSBydW50aW1lDQogICAgPiBj YWNoZSBidWZmZXIgc2l6ZSBpcyBpbnZhbGlkIVxuIikpOw0KICAgID4gKyAgICAgICAgU3RhdHVz ID0gRUZJX0FDQ0VTU19ERU5JRUQ7DQogICAgPiArICAgICAgICBnb3RvIEVYSVQ7DQogICAgPiAr ICAgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICAgIC8vDQogICAgPiArICAgICAgLy8gVmVyaWZ5 IHJ1bnRpbWUgYnVmZmVycyBkbyBub3Qgb3ZlcmxhcCB3aXRoIFNNUkFNIHJhbmdlcy4NCiAgICA+ ICsgICAgICAvLw0KICAgID4gKyAgICAgIGlmICgoUnVudGltZVZhcmlhYmxlQ2FjaGVDb250ZXh0 LT5SdW50aW1lSG9iQ2FjaGUgIT0gTlVMTCkgJiYNCiAgICA+ICsgICAgICAgICAgIVZhcmlhYmxl U21tSXNCdWZmZXJPdXRzaWRlU21tVmFsaWQgKA0KICAgID4gKyAgICAgICAgICAgICAoVUlOVE4p UnVudGltZVZhcmlhYmxlQ2FjaGVDb250ZXh0LT5SdW50aW1lSG9iQ2FjaGUsDQogICAgPiArICAg ICAgICAgICAgIChVSU5UTilSdW50aW1lVmFyaWFibGVDYWNoZUNvbnRleHQtPlJ1bnRpbWVIb2JD YWNoZS0+U2l6ZQ0KICAgID4gKyAgICAgICAgICAgICApKQ0KICAgID4gKyAgICAgIHsNCiAgICA+ ICsgICAgICAgIERFQlVHICgoREVCVUdfRVJST1IsICJJbml0UnVudGltZVZhcmlhYmxlQ2FjaGVD b250ZXh0OiBSdW50aW1lDQogICAgPiBIT0IgY2FjaGUgYnVmZmVyIGluIFNNUkFNIG9yIG92ZXJm bG93IVxuIikpOw0KICAgID4gKyAgICAgICAgU3RhdHVzID0gRUZJX0FDQ0VTU19ERU5JRUQ7DQog ICAgPiArICAgICAgICBnb3RvIEVYSVQ7DQogICAgPiArICAgICAgfQ0KICAgID4gKw0KICAgID4g KyAgICAgIGlmICghVmFyaWFibGVTbW1Jc0J1ZmZlck91dHNpZGVTbW1WYWxpZCAoDQogICAgPiAr ICAgICAgICAgICAgIChVSU5UTilSdW50aW1lVmFyaWFibGVDYWNoZUNvbnRleHQtPlJ1bnRpbWVW b2xhdGlsZUNhY2hlLA0KICAgID4gKyAgICAgICAgICAgICAoVUlOVE4pUnVudGltZVZhcmlhYmxl Q2FjaGVDb250ZXh0LT5SdW50aW1lVm9sYXRpbGVDYWNoZS0+U2l6ZQ0KICAgID4gKyAgICAgICAg ICAgICApKQ0KICAgID4gKyAgICAgIHsNCiAgICA+ICsgICAgICAgIERFQlVHICgoREVCVUdfRVJS T1IsICJJbml0UnVudGltZVZhcmlhYmxlQ2FjaGVDb250ZXh0OiBSdW50aW1lDQogICAgPiB2b2xh dGlsZSBjYWNoZSBidWZmZXIgaW4gU01SQU0gb3Igb3ZlcmZsb3chXG4iKSk7DQogICAgPiArICAg ICAgICBTdGF0dXMgPSBFRklfQUNDRVNTX0RFTklFRDsNCiAgICA+ICsgICAgICAgIGdvdG8gRVhJ VDsNCiAgICA+ICsgICAgICB9DQogICAgPiArDQogICAgPiArICAgICAgaWYgKCFWYXJpYWJsZVNt bUlzQnVmZmVyT3V0c2lkZVNtbVZhbGlkICgNCiAgICA+ICsgICAgICAgICAgICAgKFVJTlROKVJ1 bnRpbWVWYXJpYWJsZUNhY2hlQ29udGV4dC0+UnVudGltZU52Q2FjaGUsDQogICAgPiArICAgICAg ICAgICAgIChVSU5UTilSdW50aW1lVmFyaWFibGVDYWNoZUNvbnRleHQtPlJ1bnRpbWVOdkNhY2hl LT5TaXplDQogICAgPiArICAgICAgICAgICAgICkpDQogICAgPiArICAgICAgew0KICAgID4gKyAg ICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkluaXRSdW50aW1lVmFyaWFibGVDYWNoZUNvbnRl eHQ6IFJ1bnRpbWUNCiAgICA+IG5vbi12b2xhdGlsZSBjYWNoZSBidWZmZXIgaW4gU01SQU0gb3Ig b3ZlcmZsb3chXG4iKSk7DQogICAgPiArICAgICAgICBTdGF0dXMgPSBFRklfQUNDRVNTX0RFTklF RDsNCiAgICA+ICsgICAgICAgIGdvdG8gRVhJVDsNCiAgICA+ICsgICAgICB9DQogICAgPiArDQog ICAgPiArICAgICAgaWYgKCFWYXJpYWJsZVNtbUlzQnVmZmVyT3V0c2lkZVNtbVZhbGlkICgNCiAg ICA+ICsgICAgICAgICAgICAgKFVJTlROKVJ1bnRpbWVWYXJpYWJsZUNhY2hlQ29udGV4dC0+UGVu ZGluZ1VwZGF0ZSwNCiAgICA+ICsgICAgICAgICAgICAgc2l6ZW9mICgqKFJ1bnRpbWVWYXJpYWJs ZUNhY2hlQ29udGV4dC0+UGVuZGluZ1VwZGF0ZSkpDQogICAgPiArICAgICAgICAgICAgICkpDQog ICAgPiArICAgICAgew0KICAgID4gKyAgICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkluaXRS dW50aW1lVmFyaWFibGVDYWNoZUNvbnRleHQ6IFJ1bnRpbWUNCiAgICA+IGNhY2hlIHBlbmRpbmcg dXBkYXRlIGJ1ZmZlciBpbiBTTVJBTSBvciBvdmVyZmxvdyFcbiIpKTsNCiAgICA+ICsgICAgICAg IFN0YXR1cyA9IEVGSV9BQ0NFU1NfREVOSUVEOw0KICAgID4gKyAgICAgICAgZ290byBFWElUOw0K ICAgID4gKyAgICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgICBpZiAoIVZhcmlhYmxlU21tSXNC dWZmZXJPdXRzaWRlU21tVmFsaWQgKA0KICAgID4gKyAgICAgICAgICAgICAoVUlOVE4pUnVudGlt ZVZhcmlhYmxlQ2FjaGVDb250ZXh0LT5SZWFkTG9jaywNCiAgICA+ICsgICAgICAgICAgICAgc2l6 ZW9mICgqKFJ1bnRpbWVWYXJpYWJsZUNhY2hlQ29udGV4dC0+UmVhZExvY2spKQ0KICAgID4gKyAg ICAgICAgICAgICApKQ0KICAgID4gKyAgICAgIHsNCiAgICA+ICsgICAgICAgIERFQlVHICgoREVC VUdfRVJST1IsICJJbml0UnVudGltZVZhcmlhYmxlQ2FjaGVDb250ZXh0OiBSdW50aW1lDQogICAg PiBjYWNoZSByZWFkIGxvY2sgYnVmZmVyIGluIFNNUkFNIG9yIG92ZXJmbG93IVxuIikpOw0KICAg ID4gKyAgICAgICAgU3RhdHVzID0gRUZJX0FDQ0VTU19ERU5JRUQ7DQogICAgPiArICAgICAgICBn b3RvIEVYSVQ7DQogICAgPiArICAgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICAgIGlmICghVmFy aWFibGVTbW1Jc0J1ZmZlck91dHNpZGVTbW1WYWxpZCAoDQogICAgPiArICAgICAgICAgICAgIChV SU5UTilSdW50aW1lVmFyaWFibGVDYWNoZUNvbnRleHQtPkhvYkZsdXNoQ29tcGxldGUsDQogICAg PiArICAgICAgICAgICAgIHNpemVvZiAoKihSdW50aW1lVmFyaWFibGVDYWNoZUNvbnRleHQtPkhv YkZsdXNoQ29tcGxldGUpKQ0KICAgID4gKyAgICAgICAgICAgICApKQ0KICAgID4gKyAgICAgIHsN CiAgICA+ICsgICAgICAgIERFQlVHICgoREVCVUdfRVJST1IsICJJbml0UnVudGltZVZhcmlhYmxl Q2FjaGVDb250ZXh0OiBSdW50aW1lDQogICAgPiBjYWNoZSBIT0IgZmx1c2ggY29tcGxldGUgYnVm ZmVyIGluIFNNUkFNIG9yIG92ZXJmbG93IVxuIikpOw0KICAgID4gKyAgICAgICAgU3RhdHVzID0g RUZJX0FDQ0VTU19ERU5JRUQ7DQogICAgPiArICAgICAgICBnb3RvIEVYSVQ7DQogICAgPiArICAg ICAgfQ0KICAgID4gKw0KICAgID4gKyAgICAgIFZhcmlhYmxlQ2FjaGVDb250ZXh0ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJm1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCiAg ICA+ID5WYXJpYWJsZUdsb2JhbC5WYXJpYWJsZVJ1bnRpbWVDYWNoZUNvbnRleHQ7DQogICAgPiAr ICAgICAgVmFyaWFibGVDYWNoZUNvbnRleHQtPlZhcmlhYmxlUnVudGltZUhvYkNhY2hlLlN0b3Jl ICAgICAgPQ0KICAgID4gUnVudGltZVZhcmlhYmxlQ2FjaGVDb250ZXh0LT5SdW50aW1lSG9iQ2Fj aGU7DQogICAgPiArICAgICAgVmFyaWFibGVDYWNoZUNvbnRleHQtPlZhcmlhYmxlUnVudGltZVZv bGF0aWxlQ2FjaGUuU3RvcmUgPQ0KICAgID4gUnVudGltZVZhcmlhYmxlQ2FjaGVDb250ZXh0LT5S dW50aW1lVm9sYXRpbGVDYWNoZTsNCiAgICA+ICsgICAgICBWYXJpYWJsZUNhY2hlQ29udGV4dC0+ VmFyaWFibGVSdW50aW1lTnZDYWNoZS5TdG9yZSAgICAgICA9DQogICAgPiBSdW50aW1lVmFyaWFi bGVDYWNoZUNvbnRleHQtPlJ1bnRpbWVOdkNhY2hlOw0KICAgID4gKyAgICAgIFZhcmlhYmxlQ2Fj aGVDb250ZXh0LT5QZW5kaW5nVXBkYXRlICAgICAgICAgICAgICAgICAgICAgID0NCiAgICA+IFJ1 bnRpbWVWYXJpYWJsZUNhY2hlQ29udGV4dC0+UGVuZGluZ1VwZGF0ZTsNCiAgICA+ICsgICAgICBW YXJpYWJsZUNhY2hlQ29udGV4dC0+UmVhZExvY2sgICAgICAgICAgICAgICAgICAgICAgICAgICA9 DQogICAgPiBSdW50aW1lVmFyaWFibGVDYWNoZUNvbnRleHQtPlJlYWRMb2NrOw0KICAgID4gKyAg ICAgIFZhcmlhYmxlQ2FjaGVDb250ZXh0LT5Ib2JGbHVzaENvbXBsZXRlICAgICAgICAgICAgICAg ICAgID0NCiAgICA+IFJ1bnRpbWVWYXJpYWJsZUNhY2hlQ29udGV4dC0+SG9iRmx1c2hDb21wbGV0 ZTsNCiAgICA+ICsNCiAgICA+ICsgICAgICAvLyBTZXQgdXAgdGhlIGludGlhbCBwZW5kaW5nIHJl cXVlc3Qgc2luY2UgdGhlIFJUIGNhY2hlIG5lZWRzIHRvIGJlIGluIHN5bmMNCiAgICA+IHdpdGgg U01NIGNhY2hlDQogICAgPiArICAgICAgVmFyaWFibGVDYWNoZUNvbnRleHQtPlZhcmlhYmxlUnVu dGltZUhvYkNhY2hlLlBlbmRpbmdVcGRhdGVPZmZzZXQgPQ0KICAgID4gMDsNCiAgICA+ICsgICAg ICBWYXJpYWJsZUNhY2hlQ29udGV4dC0+VmFyaWFibGVSdW50aW1lSG9iQ2FjaGUuUGVuZGluZ1Vw ZGF0ZUxlbmd0aCA9DQogICAgPiAwOw0KICAgID4gKyAgICAgIGlmICgobVZhcmlhYmxlTW9kdWxl R2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5Ib2JWYXJpYWJsZUJhc2UgPiAwKSAmJg0KICAgID4gKyAg ICAgICAgICAoVmFyaWFibGVDYWNoZUNvbnRleHQtPlZhcmlhYmxlUnVudGltZUhvYkNhY2hlLlN0 b3JlICE9IE5VTEwpKQ0KICAgID4gKyAgICAgIHsNCiAgICA+ICsgICAgICAgIFZhcmlhYmxlQ2Fj aGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0g KFZBUklBQkxFX1NUT1JFX0hFQURFUg0KICAgID4gKikoVUlOVE4pbVZhcmlhYmxlTW9kdWxlR2xv YmFsLT5WYXJpYWJsZUdsb2JhbC5Ib2JWYXJpYWJsZUJhc2U7DQogICAgPiArICAgICAgICBWYXJp YWJsZUNhY2hlQ29udGV4dC0+VmFyaWFibGVSdW50aW1lSG9iQ2FjaGUuUGVuZGluZ1VwZGF0ZUxl bmd0aA0KICAgID4gPSAoVUlOVDMyKSgoVUlOVE4pR2V0RW5kUG9pbnRlciAoVmFyaWFibGVDYWNo ZSkgLSAoVUlOVE4pVmFyaWFibGVDYWNoZSk7DQogICAgPiArICAgICAgICBDb3B5R3VpZCAoJihW YXJpYWJsZUNhY2hlQ29udGV4dC0+VmFyaWFibGVSdW50aW1lSG9iQ2FjaGUuU3RvcmUtDQogICAg PiA+U2lnbmF0dXJlKSwgJihWYXJpYWJsZUNhY2hlLT5TaWduYXR1cmUpKTsNCiAgICA+ICsgICAg ICB9DQogICAgPiArDQogICAgPiArICAgICAgVmFyaWFibGVDYWNoZSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IChWQVJJQUJMRV9TVE9S RV9IRUFERVINCiAgICA+ICopKFVJTlROKW1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVH bG9iYWwuVm9sYXRpbGVWYXJpYWJsZUJhc2U7DQogICAgPiArICAgICAgVmFyaWFibGVDYWNoZUNv bnRleHQtDQogICAgPiA+VmFyaWFibGVSdW50aW1lVm9sYXRpbGVDYWNoZS5QZW5kaW5nVXBkYXRl T2Zmc2V0ID0gMDsNCiAgICA+ICsgICAgICBWYXJpYWJsZUNhY2hlQ29udGV4dC0NCiAgICA+ID5W YXJpYWJsZVJ1bnRpbWVWb2xhdGlsZUNhY2hlLlBlbmRpbmdVcGRhdGVMZW5ndGggPQ0KICAgID4g KFVJTlQzMikoKFVJTlROKUdldEVuZFBvaW50ZXIgKFZhcmlhYmxlQ2FjaGUpIC0gKFVJTlROKVZh cmlhYmxlQ2FjaGUpOw0KICAgID4gKyAgICAgIENvcHlHdWlkICgmKFZhcmlhYmxlQ2FjaGVDb250 ZXh0LT5WYXJpYWJsZVJ1bnRpbWVWb2xhdGlsZUNhY2hlLlN0b3JlLQ0KICAgID4gPlNpZ25hdHVy ZSksICYoVmFyaWFibGVDYWNoZS0+U2lnbmF0dXJlKSk7DQogICAgPiArDQogICAgPiArICAgICAg VmFyaWFibGVDYWNoZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA9IChWQVJJQUJMRV9TVE9SRV9IRUFERVINCiAgICA+ICopKFVJTlROKW1OdlZhcmlh YmxlQ2FjaGU7DQogICAgPiArICAgICAgVmFyaWFibGVDYWNoZUNvbnRleHQtPlZhcmlhYmxlUnVu dGltZU52Q2FjaGUuUGVuZGluZ1VwZGF0ZU9mZnNldCA9IDA7DQogICAgPiArICAgICAgVmFyaWFi bGVDYWNoZUNvbnRleHQtPlZhcmlhYmxlUnVudGltZU52Q2FjaGUuUGVuZGluZ1VwZGF0ZUxlbmd0 aCA9DQogICAgPiAoVUlOVDMyKSgoVUlOVE4pR2V0RW5kUG9pbnRlciAoVmFyaWFibGVDYWNoZSkg LSAoVUlOVE4pVmFyaWFibGVDYWNoZSk7DQogICAgPiArICAgICAgQ29weUd1aWQgKCYoVmFyaWFi bGVDYWNoZUNvbnRleHQtPlZhcmlhYmxlUnVudGltZU52Q2FjaGUuU3RvcmUtDQogICAgPiA+U2ln bmF0dXJlKSwgJihWYXJpYWJsZUNhY2hlLT5TaWduYXR1cmUpKTsNCiAgICA+ICsNCiAgICA+ICsg ICAgICAqKFZhcmlhYmxlQ2FjaGVDb250ZXh0LT5QZW5kaW5nVXBkYXRlKSAgICA9IFRSVUU7DQog ICAgPiArICAgICAgKihWYXJpYWJsZUNhY2hlQ29udGV4dC0+UmVhZExvY2spICAgICAgICAgPSBG QUxTRTsNCiAgICA+ICsgICAgICAqKFZhcmlhYmxlQ2FjaGVDb250ZXh0LT5Ib2JGbHVzaENvbXBs ZXRlKSA9IEZBTFNFOw0KICAgID4gKw0KICAgID4gKyAgICAgIFN0YXR1cyA9IEVGSV9TVUNDRVNT Ow0KICAgID4gKyAgICAgIGJyZWFrOw0KICAgID4gKyAgICBjYXNlIFNNTV9WQVJJQUJMRV9GVU5D VElPTl9TWU5DX1JVTlRJTUVfQ0FDSEU6DQogICAgPiArICAgICAgU3RhdHVzID0gRmx1c2hQZW5k aW5nUnVudGltZVZhcmlhYmxlQ2FjaGVVcGRhdGVzICgpOw0KICAgID4gKyAgICAgIGJyZWFrOw0K ICAgID4gKyAgICBjYXNlIFNNTV9WQVJJQUJMRV9GVU5DVElPTl9HRVRfUlVOVElNRV9DQUNIRV9J TkZPOg0KICAgID4gKyAgICAgIGlmIChDb21tQnVmZmVyUGF5bG9hZFNpemUgPCBzaXplb2YNCiAg ICA+IChTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfR0VUX1JVTlRJTUVfQ0FDSEVfSU5GTykpIHsN CiAgICA+ICsgICAgICAgIERFQlVHICgoREVCVUdfRVJST1IsICJHZXRSdW50aW1lQ2FjaGVJbmZv OiBTTU0gY29tbXVuaWNhdGlvbg0KICAgID4gYnVmZmVyIHNpemUgaW52YWxpZCFcbiIpKTsNCiAg ICA+ICsgICAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCiAgICA+ICsgICAgICB9DQogICAgPiAr DQogICAgPiArICAgICAgR2V0UnVudGltZUNhY2hlSW5mbyA9DQogICAgPiAoU01NX1ZBUklBQkxF X0NPTU1VTklDQVRFX0dFVF9SVU5USU1FX0NBQ0hFX0lORk8NCiAgICA+ICopU21tVmFyaWFibGVG dW5jdGlvbkhlYWRlci0+RGF0YTsNCiAgICA+ICsNCiAgICA+ICsgICAgICBpZiAobVZhcmlhYmxl TW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5Ib2JWYXJpYWJsZUJhc2UgPiAwKSB7DQogICAg PiArICAgICAgICBWYXJpYWJsZUNhY2hlICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gKFZB UklBQkxFX1NUT1JFX0hFQURFUg0KICAgID4gKikoVUlOVE4pbVZhcmlhYmxlTW9kdWxlR2xvYmFs LT5WYXJpYWJsZUdsb2JhbC5Ib2JWYXJpYWJsZUJhc2U7DQogICAgPiArICAgICAgICBHZXRSdW50 aW1lQ2FjaGVJbmZvLT5Ub3RhbEhvYlN0b3JhZ2VTaXplID0gVmFyaWFibGVDYWNoZS0+U2l6ZTsN CiAgICA+ICsgICAgICB9IGVsc2Ugew0KICAgID4gKyAgICAgICAgR2V0UnVudGltZUNhY2hlSW5m by0+VG90YWxIb2JTdG9yYWdlU2l6ZSA9IDA7DQogICAgPiArICAgICAgfQ0KICAgID4gKw0KICAg ID4gKyAgICAgIFZhcmlhYmxlQ2FjaGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ID0gKFZBUklBQkxFX1NUT1JFX0hFQURFUg0KICAgID4gKikoVUlOVE4pbVZhcmlhYmxlTW9kdWxl R2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5Wb2xhdGlsZVZhcmlhYmxlQmFzZTsNCiAgICA+ICsgICAg ICBHZXRSdW50aW1lQ2FjaGVJbmZvLT5Ub3RhbFZvbGF0aWxlU3RvcmFnZVNpemUgICA9IFZhcmlh YmxlQ2FjaGUtPlNpemU7DQogICAgPiArICAgICAgVmFyaWFibGVDYWNoZSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgPSAoVkFSSUFCTEVfU1RPUkVfSEVBREVSDQogICAgPiAqKShV SU5UTiltTnZWYXJpYWJsZUNhY2hlOw0KICAgID4gKyAgICAgIEdldFJ1bnRpbWVDYWNoZUluZm8t PlRvdGFsTnZTdG9yYWdlU2l6ZSAgICAgICAgID0gKFVJTlROKVZhcmlhYmxlQ2FjaGUtDQogICAg PiA+U2l6ZTsNCiAgICA+ICsgICAgICBHZXRSdW50aW1lQ2FjaGVJbmZvLT5BdXRoZW50aWNhdGVk VmFyaWFibGVVc2FnZSA9DQogICAgPiBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xv YmFsLkF1dGhGb3JtYXQ7DQogICAgPiArDQogICAgPiArICAgICAgU3RhdHVzID0gRUZJX1NVQ0NF U1M7DQogICAgPiArICAgICAgYnJlYWs7DQogICAgPiArDQogICAgPiArICAgIGRlZmF1bHQ6DQog ICAgPiArICAgICAgU3RhdHVzID0gRUZJX1VOU1VQUE9SVEVEOw0KICAgID4gKyAgfQ0KICAgID4g Kw0KICAgID4gK0VYSVQ6DQogICAgPiArDQogICAgPiArICBTbW1WYXJpYWJsZUZ1bmN0aW9uSGVh ZGVyLT5SZXR1cm5TdGF0dXMgPSBTdGF0dXM7DQogICAgPiArDQogICAgPiArICByZXR1cm4gRUZJ X1NVQ0NFU1M7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgU01NIEVO RF9PRl9EWEUgcHJvdG9jb2wgbm90aWZpY2F0aW9uIGV2ZW50IGhhbmRsZXIuDQogICAgPiArDQog ICAgPiArICBAcGFyYW0gIFByb3RvY29sICAgUG9pbnRzIHRvIHRoZSBwcm90b2NvbCdzIHVuaXF1 ZSBpZGVudGlmaWVyDQogICAgPiArICBAcGFyYW0gIEludGVyZmFjZSAgUG9pbnRzIHRvIHRoZSBp bnRlcmZhY2UgaW5zdGFuY2UNCiAgICA+ICsgIEBwYXJhbSAgSGFuZGxlICAgICBUaGUgaGFuZGxl IG9uIHdoaWNoIHRoZSBpbnRlcmZhY2Ugd2FzIGluc3RhbGxlZA0KICAgID4gKw0KICAgID4gKyAg QHJldHZhbCBFRklfU1VDQ0VTUyAgIFNtbUVuZE9mRHhlQ2FsbGJhY2sgcnVucyBzdWNjZXNzZnVs bHkNCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtFRklfU1RBVFVTDQogICAgPiArRUZJQVBJ DQogICAgPiArU21tRW5kT2ZEeGVDYWxsYmFjayAoDQogICAgPiArICBJTiBDT05TVCBFRklfR1VJ RCAgKlByb3RvY29sLA0KICAgID4gKyAgSU4gVk9JRCAgICAgICAgICAgICpJbnRlcmZhY2UsDQog ICAgPiArICBJTiBFRklfSEFORExFICAgICAgSGFuZGxlDQogICAgPiArICApDQogICAgPiArew0K ICAgID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KICAgID4gKw0KICAgID4gKyAgREVCVUcgKChE RUJVR19JTkZPLCAiW1ZhcmlhYmxlXVNNTV9FTkRfT0ZfRFhFIGlzIHNpZ25hbGVkXG4iKSk7DQog ICAgPiArICBNb3JMb2NrSW5pdEF0RW5kT2ZEeGUgKCk7DQogICAgPiArICBTdGF0dXMgPSBMb2Nr VmFyaWFibGVQb2xpY3kgKCk7DQogICAgPiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0K ICAgID4gKyAgbUVuZE9mRHhlID0gVFJVRTsNCiAgICA+ICsgIFZhckNoZWNrTGliSW5pdGlhbGl6 ZUF0RW5kT2ZEeGUgKE5VTEwpOw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIFRoZSBpbml0aWFs aXphdGlvbiBmb3IgdmFyaWFibGUgcXVvdGEuDQogICAgPiArICAvLw0KICAgID4gKyAgSW5pdGlh bGl6ZVZhcmlhYmxlUXVvdGEgKCk7DQogICAgPiArICBpZiAoUGNkR2V0Qm9vbCAoUGNkUmVjbGFp bVZhcmlhYmxlU3BhY2VBdEVuZE9mRHhlKSkgew0KICAgID4gKyAgICBSZWNsYWltRm9yT1MgKCk7 DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQogICAg PiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgSW5pdGlhbGl6ZXMgdmFyaWFibGUg d3JpdGUgc2VydmljZSBmb3IgU01NLg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK1ZPSUQN CiAgICA+ICtWYXJpYWJsZVdyaXRlU2VydmljZUluaXRpYWxpemVTbW0gKA0KICAgID4gKyAgVk9J RA0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCiAg ICA+ICsNCiAgICA+ICsgIFN0YXR1cyA9IFByb3RlY3RlZFZhcmlhYmxlTGliV3JpdGVJbml0ICgp Ow0KICAgID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSAmJiAoU3RhdHVzICE9IEVGSV9VTlNV UFBPUlRFRCkpIHsNCiAgICA+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIlZhcmlhYmxlIHBy b3RlY3Rpb24gc2VydmljZTogd3JpdGUtaW5pdCBmYWlsZWQuDQogICAgPiBTdGF0dXMgPSAlclxu IiwgU3RhdHVzKSk7DQogICAgPiArICAgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQogICAg PiArICAgIHJldHVybjsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIFN0YXR1cyA9IFZh cmlhYmxlV3JpdGVTZXJ2aWNlSW5pdGlhbGl6ZSAoKTsNCiAgICA+ICsgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCiAgICA+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIlZhcmlhYmxlIHdy aXRlIHNlcnZpY2UgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiBTdGF0dXMNCiAgICA+ID0gJXJcbiIs IFN0YXR1cykpOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8v IE5vdGlmeSB0aGUgdmFyaWFibGUgd3JhcHBlciBkcml2ZXIgdGhlIHZhcmlhYmxlIHdyaXRlIHNl cnZpY2UgaXMgcmVhZHkNCiAgICA+ICsgIC8vDQogICAgPiArICBWYXJpYWJsZU5vdGlmeVNtbVdy aXRlUmVhZHkgKCk7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgU01N IEZhdWx0IFRvbGVyYW50IFdyaXRlIHByb3RvY29sIG5vdGlmaWNhdGlvbiBldmVudCBoYW5kbGVy Lg0KICAgID4gKw0KICAgID4gKyAgTm9uLVZvbGF0aWxlIHZhcmlhYmxlIHdyaXRlIG1heSBuZWVk cyBGVFcgcHJvdG9jb2wgdG8gcmVjbGFpbSB3aGVuDQogICAgPiArICB3cml0dGluZyB2YXJpYWJs ZS4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbSAgUHJvdG9jb2wgICBQb2ludHMgdG8gdGhlIHBy b3RvY29sJ3MgdW5pcXVlIGlkZW50aWZpZXINCiAgICA+ICsgIEBwYXJhbSAgSW50ZXJmYWNlICBQ b2ludHMgdG8gdGhlIGludGVyZmFjZSBpbnN0YW5jZQ0KICAgID4gKyAgQHBhcmFtICBIYW5kbGUg ICAgIFRoZSBoYW5kbGUgb24gd2hpY2ggdGhlIGludGVyZmFjZSB3YXMgaW5zdGFsbGVkDQogICAg PiArDQogICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgU21tRXZlbnRDYWxsYmFjayBydW5z IHN1Y2Nlc3NmdWxseQ0KICAgID4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EIFRoZSBGdmIgcHJv dG9jb2wgZm9yIHZhcmlhYmxlIGlzIG5vdCBmb3VuZC4NCiAgICA+ICsNCiAgICA+ICsgKiovDQog ICAgPiArRUZJX1NUQVRVUw0KICAgID4gK0VGSUFQSQ0KICAgID4gK1NtbUZ0d05vdGlmaWNhdGlv bkV2ZW50ICgNCiAgICA+ICsgIElOIENPTlNUIEVGSV9HVUlEICAqUHJvdG9jb2wsDQogICAgPiAr ICBJTiBWT0lEICAgICAgICAgICAgKkludGVyZmFjZSwNCiAgICA+ICsgIElOIEVGSV9IQU5ETEUg ICAgICBIYW5kbGUNCiAgICA+ICsgICkNCiAgICA+ICt7DQogICAgPiArICBFRklfU1RBVFVTICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KICAgID4gKyAgRUZJX1BIWVNJQ0FM X0FERFJFU1MgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlU3RvcmVCYXNlOw0KICAgID4gKyAg RUZJX1NNTV9GSVJNV0FSRV9WT0xVTUVfQkxPQ0tfUFJPVE9DT0wgICpGdmJQcm90b2NvbDsNCiAg ICA+ICsgIEVGSV9TTU1fRkFVTFRfVE9MRVJBTlRfV1JJVEVfUFJPVE9DT0wgICAqRnR3UHJvdG9j b2w7DQogICAgPiArICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgTnZT dG9yYWdlVmFyaWFibGVCYXNlOw0KICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZ0d01heEJsb2NrU2l6ZTsNCiAgICA+ICsgIFVJTlQzMiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBOdlN0b3JhZ2VWYXJpYWJsZVNpemU7DQogICAgPiArICBV SU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnZTdG9yYWdlVmFyaWFibGVT aXplNjQ7DQogICAgPiArDQogICAgPiArICBpZiAobVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5GdmJJ bnN0YW5jZSAhPSBOVUxMKSB7DQogICAgPiArICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCiAgICA+ ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIC8vDQogICAgPiArICAvLyBFbnN1cmUgU01NIEZUVyBw cm90b2NvbCBpcyBpbnN0YWxsZWQuDQogICAgPiArICAvLw0KICAgID4gKyAgU3RhdHVzID0gR2V0 RnR3UHJvdG9jb2wgKChWT0lEICoqKSZGdHdQcm90b2NvbCk7DQogICAgPiArICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQogICAgPiArICAgIHJldHVybiBTdGF0dXM7DQogICAgPiArICB9DQog ICAgPiArDQogICAgPiArICBTdGF0dXMgPSBHZXRWYXJpYWJsZUZsYXNoTnZTdG9yYWdlSW5mbyAo Jk52U3RvcmFnZVZhcmlhYmxlQmFzZSwNCiAgICA+ICZOdlN0b3JhZ2VWYXJpYWJsZVNpemU2NCk7 DQogICAgPiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KICAgID4gKw0KICAgID4gKyAg U3RhdHVzID0gU2FmZVVpbnQ2NFRvVWludDMyIChOdlN0b3JhZ2VWYXJpYWJsZVNpemU2NCwNCiAg ICA+ICZOdlN0b3JhZ2VWYXJpYWJsZVNpemUpOw0KICAgID4gKyAgLy8gVGhpcyBkcml2ZXIgY3Vy cmVudGx5IGFzc3VtZXMgdGhlIHNpemUgd2lsbCBiZSBVSU5UMzIgc28gYXNzZXJ0IHRoZSB2YWx1 ZSBpcw0KICAgID4gc2FmZSBmb3Igbm93Lg0KICAgID4gKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3Rh dHVzKTsNCiAgICA+ICsNCiAgICA+ICsgIEFTU0VSVCAoTnZTdG9yYWdlVmFyaWFibGVCYXNlICE9 IDApOw0KICAgID4gKyAgVmFyaWFibGVTdG9yZUJhc2UgPSBOdlN0b3JhZ2VWYXJpYWJsZUJhc2Ug KyBtTnZGdkhlYWRlckNhY2hlLQ0KICAgID4gPkhlYWRlckxlbmd0aDsNCiAgICA+ICsNCiAgICA+ ICsgIFN0YXR1cyA9IEZ0d1Byb3RvY29sLT5HZXRNYXhCbG9ja1NpemUgKEZ0d1Byb3RvY29sLCAm RnR3TWF4QmxvY2tTaXplKTsNCiAgICA+ICsgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQog ICAgPiArICAgIEFTU0VSVCAoTnZTdG9yYWdlVmFyaWFibGVTaXplIDw9IEZ0d01heEJsb2NrU2l6 ZSk7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICAvLw0KICAgID4gKyAgLy8gTGV0IE5v blZvbGF0aWxlVmFyaWFibGVCYXNlIHBvaW50IHRvIGZsYXNoIHZhcmlhYmxlIHN0b3JlIGJhc2Ug ZGlyZWN0bHkgYWZ0ZXINCiAgICA+IEZUVyByZWFkeS4NCiAgICA+ICsgIC8vDQogICAgPiArICBt VmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLk5vblZvbGF0aWxlVmFyaWFibGVC YXNlID0NCiAgICA+IFZhcmlhYmxlU3RvcmVCYXNlOw0KICAgID4gKw0KICAgID4gKyAgLy8NCiAg ICA+ICsgIC8vIEZpbmQgdGhlIHByb3BlciBGVkIgcHJvdG9jb2wgZm9yIHZhcmlhYmxlLg0KICAg ID4gKyAgLy8NCiAgICA+ICsgIFN0YXR1cyA9IEdldEZ2YkluZm9CeUFkZHJlc3MgKE52U3RvcmFn ZVZhcmlhYmxlQmFzZSwgTlVMTCwgJkZ2YlByb3RvY29sKTsNCiAgICA+ICsgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCiAgICA+ICsgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQogICAgPiAr ICB9DQogICAgPiArDQogICAgPiArICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPkZ2Ykluc3RhbmNl ID0gRnZiUHJvdG9jb2w7DQogICAgPiArDQogICAgPiArICAvLw0KICAgID4gKyAgLy8gSW5pdGlh bGl6ZXMgdmFyaWFibGUgd3JpdGUgc2VydmljZSBhZnRlciBGVFcgd2FzIHJlYWR5Lg0KICAgID4g KyAgLy8NCiAgICA+ICsgIFZhcmlhYmxlV3JpdGVTZXJ2aWNlSW5pdGlhbGl6ZVNtbSAoKTsNCiAg ICA+ICsNCiAgICA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCiAgICA+ICt9DQogICAgPiArDQog ICAgPiArLyoqDQogICAgPiArICBWYXJpYWJsZSBEcml2ZXIgbWFpbiBlbnRyeSBwb2ludC4gVGhl IFZhcmlhYmxlIGRyaXZlciBwbGFjZXMgdGhlIDQgRUZJDQogICAgPiArICBydW50aW1lIHNlcnZp Y2VzIGluIHRoZSBFRkkgU3lzdGVtIFRhYmxlIGFuZCBpbnN0YWxscyBhcmNoIHByb3RvY29scw0K ICAgID4gKyAgZm9yIHZhcmlhYmxlIHJlYWQgYW5kIHdyaXRlIHNlcnZpY2VzIGJlaW5nIGF2YWls YWJsZS4gSXQgYWxzbyByZWdpc3RlcnMNCiAgICA+ICsgIGEgbm90aWZpY2F0aW9uIGZ1bmN0aW9u IGZvciBhbiBFVlRfU0lHTkFMX1ZJUlRVQUxfQUREUkVTU19DSEFOR0UNCiAgICA+IGV2ZW50Lg0K ICAgID4gKw0KICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICBWYXJpYWJsZSBzZXJ2 aWNlIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZC4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ ICtFRklfU1RBVFVTDQogICAgPiArRUZJQVBJDQogICAgPiArTW1WYXJpYWJsZVNlcnZpY2VJbml0 aWFsaXplICgNCiAgICA+ICsgIFZPSUQNCiAgICA+ICsgICkNCiAgICA+ICt7DQogICAgPiArICBF RklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KICAgID4gKyAgRUZJX0hBTkRM RSAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlSGFuZGxlOw0KICAgID4gKyAgVk9JRCAgICAg ICAgICAgICAgICAgICAgICAgICAgICpTbW1GdHdSZWdpc3RyYXRpb247DQogICAgPiArICBWT0lE ICAgICAgICAgICAgICAgICAgICAgICAgICAgKlNtbUVuZE9mRHhlUmVnaXN0cmF0aW9uOw0KICAg ID4gKyAgUFJPVEVDVEVEX1ZBUklBQkxFX0NPTlRFWFRfSU4gIENvbnRleHRJbjsNCiAgICA+ICsN CiAgICA+ICsgIC8vDQogICAgPiArICAvLyBJbml0aWFsaXplIHByb3RlY3RlZCB2YXJpYWJsZSBz ZXJ2aWNlLCBpZiBlbmFibGVkLg0KICAgID4gKyAgLy8NCiAgICA+ICsgIENvbnRleHRJbi5TdHJ1 Y3RTaXplICAgID0gc2l6ZW9mIChDb250ZXh0SW4pOw0KICAgID4gKyAgQ29udGV4dEluLlN0cnVj dFZlcnNpb24gPQ0KICAgID4gUFJPVEVDVEVEX1ZBUklBQkxFX0NPTlRFWFRfSU5fU1RSVUNUX1ZF UlNJT047DQogICAgPiArDQogICAgPiArICBDb250ZXh0SW4uRmluZFZhcmlhYmxlU21tICAgICA9 IE5VTEw7DQogICAgPiArICBDb250ZXh0SW4uR2V0VmFyaWFibGVJbmZvICAgICA9IEdldFZhcmlh YmxlSW5mbzsNCiAgICA+ICsgIENvbnRleHRJbi5HZXROZXh0VmFyaWFibGVJbmZvID0gR2V0TmV4 dFZhcmlhYmxlSW5mbzsNCiAgICA+ICsgIENvbnRleHRJbi5VcGRhdGVWYXJpYWJsZVN0b3JlID0g VmFyaWFibGVFeExpYlVwZGF0ZU52VmFyaWFibGU7DQogICAgPiArICBDb250ZXh0SW4uVXBkYXRl VmFyaWFibGUgICAgICA9IFZhcmlhYmxlRXhMaWJVcGRhdGVWYXJpYWJsZTsNCiAgICA+ICsNCiAg ICA+ICsgIENvbnRleHRJbi5NYXhWYXJpYWJsZVNpemUgICAgID0gKFVJTlQzMilHZXRNYXhWYXJp YWJsZVNpemUgKCk7DQogICAgPiArICBDb250ZXh0SW4uVmFyaWFibGVTZXJ2aWNlVXNlciA9IEZy b21TbW1Nb2R1bGU7DQogICAgPiArDQogICAgPiArICBTdGF0dXMgPSBQcm90ZWN0ZWRWYXJpYWJs ZUxpYkluaXRpYWxpemUgKCZDb250ZXh0SW4pOw0KICAgID4gKyAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSAmJiAoU3RhdHVzICE9IEVGSV9VTlNVUFBPUlRFRCkpIHsNCiAgICA+ICsgICAgQVNTRVJU X0VGSV9FUlJPUiAoU3RhdHVzKTsNCiAgICA+ICsgICAgcmV0dXJuIFN0YXR1czsNCiAgICA+ICsg IH0NCiAgICA+ICsNCiAgICA+ICsgIC8vDQogICAgPiArICAvLyBWYXJpYWJsZSBpbml0aWFsaXpl Lg0KICAgID4gKyAgLy8NCiAgICA+ICsgIFN0YXR1cyA9IFZhcmlhYmxlQ29tbW9uSW5pdGlhbGl6 ZSAoKTsNCiAgICA+ICsgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQogICAgPiArDQogICAg PiArICAvLw0KICAgID4gKyAgLy8gSW5zdGFsbCB0aGUgU21tIFZhcmlhYmxlIFByb3RvY29sIG9u IGEgbmV3IGhhbmRsZS4NCiAgICA+ICsgIC8vDQogICAgPiArICBWYXJpYWJsZUhhbmRsZSA9IE5V TEw7DQogICAgPiArICBTdGF0dXMgICAgICAgICA9IGdNbXN0LT5NbUluc3RhbGxQcm90b2NvbElu dGVyZmFjZSAoDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICZWYXJpYWJsZUhh bmRsZSwNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdFZmlTbW1WYXJpYWJs ZVByb3RvY29sR3VpZCwNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX05B VElWRV9JTlRFUkZBQ0UsDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnU21t VmFyaWFibGUNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICA+ICsg IEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQogICAgPiArDQogICAgPiArICBTdGF0dXMgPSBn TW1zdC0+TW1JbnN0YWxsUHJvdG9jb2xJbnRlcmZhY2UgKA0KICAgID4gKyAgICAgICAgICAgICAg ICAgICAgJlZhcmlhYmxlSGFuZGxlLA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgJmdFZGtp aVNtbVZhckNoZWNrUHJvdG9jb2xHdWlkLA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgRUZJ X05BVElWRV9JTlRFUkZBQ0UsDQogICAgPiArICAgICAgICAgICAgICAgICAgICAmbVNtbVZhckNo ZWNrDQogICAgPiArICAgICAgICAgICAgICAgICAgICApOw0KICAgID4gKyAgQVNTRVJUX0VGSV9F UlJPUiAoU3RhdHVzKTsNCiAgICA+ICsNCiAgICA+ICsgIG1WYXJpYWJsZUJ1ZmZlclBheWxvYWRT aXplID0gIEdldE1heFZhcmlhYmxlU2l6ZSAoKSArDQogICAgPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE9GRlNFVF9PRg0KICAgID4gKFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9W QVJfQ0hFQ0tfVkFSSUFCTEVfUFJPUEVSVFksIE5hbWUpIC0NCiAgICA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgR2V0VmFyaWFibGVIZWFkZXJTaXplIChtVmFyaWFibGVNb2R1bGVH bG9iYWwtDQogICAgPiA+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdCk7DQogICAgPiArDQogICAg PiArICBTdGF0dXMgPSBnTW1zdC0+TW1BbGxvY2F0ZVBvb2wgKA0KICAgID4gKyAgICAgICAgICAg ICAgICAgICAgRWZpUnVudGltZVNlcnZpY2VzRGF0YSwNCiAgICA+ICsgICAgICAgICAgICAgICAg ICAgIG1WYXJpYWJsZUJ1ZmZlclBheWxvYWRTaXplLA0KICAgID4gKyAgICAgICAgICAgICAgICAg ICAgKFZPSUQgKiopJm1WYXJpYWJsZUJ1ZmZlclBheWxvYWQNCiAgICA+ICsgICAgICAgICAgICAg ICAgICAgICk7DQogICAgPiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KICAgID4gKw0K ICAgID4gKyAgLy8vDQogICAgPiArICAvLy8gUmVnaXN0ZXIgU01NIHZhcmlhYmxlIFNNSSBoYW5k bGVyDQogICAgPiArICAvLy8NCiAgICA+ICsgIFZhcmlhYmxlSGFuZGxlID0gTlVMTDsNCiAgICA+ ICsgIFN0YXR1cyAgICAgICAgID0gZ01tc3QtPk1taUhhbmRsZXJSZWdpc3RlciAoU21tVmFyaWFi bGVIYW5kbGVyLA0KICAgID4gJmdFZmlTbW1WYXJpYWJsZVByb3RvY29sR3VpZCwgJlZhcmlhYmxl SGFuZGxlKTsNCiAgICA+ICsgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQogICAgPiArDQog ICAgPiArICAvLw0KICAgID4gKyAgLy8gTm90aWZ5IHRoZSB2YXJpYWJsZSB3cmFwcGVyIGRyaXZl ciB0aGUgdmFyaWFibGUgc2VydmljZSBpcyByZWFkeQ0KICAgID4gKyAgLy8NCiAgICA+ICsgIFZh cmlhYmxlTm90aWZ5U21tUmVhZHkgKCk7DQogICAgPiArDQogICAgPiArICAvLw0KICAgID4gKyAg Ly8gUmVnaXN0ZXIgRUZJX1NNTV9FTkRfT0ZfRFhFX1BST1RPQ09MX0dVSUQgbm90aWZ5IGZ1bmN0 aW9uLg0KICAgID4gKyAgLy8NCiAgICA+ICsgIFN0YXR1cyA9IGdNbXN0LT5NbVJlZ2lzdGVyUHJv dG9jb2xOb3RpZnkgKA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgJmdFZmlNbUVuZE9mRHhl UHJvdG9jb2xHdWlkLA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgU21tRW5kT2ZEeGVDYWxs YmFjaywNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICZTbW1FbmRPZkR4ZVJlZ2lzdHJhdGlv bg0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgKTsNCiAgICA+ICsgIEFTU0VSVF9FRklfRVJS T1IgKFN0YXR1cyk7DQogICAgPiArDQogICAgPiArICBpZiAoIVBjZEdldEJvb2wgKFBjZEVtdVZh cmlhYmxlTnZNb2RlRW5hYmxlKSkgew0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICAvLyBSZWdp c3RlciBGdHdOb3RpZmljYXRpb25FdmVudCAoKSBub3RpZnkgZnVuY3Rpb24uDQogICAgPiArICAg IC8vDQogICAgPiArICAgIFN0YXR1cyA9IGdNbXN0LT5NbVJlZ2lzdGVyUHJvdG9jb2xOb3RpZnkg KA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAmZ0VmaVNtbUZhdWx0VG9sZXJhbnRXcml0 ZVByb3RvY29sR3VpZCwNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgU21tRnR3Tm90aWZp Y2F0aW9uRXZlbnQsDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICZTbW1GdHdSZWdpc3Ry YXRpb24NCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICA+ICsgICAgQVNTRVJU X0VGSV9FUlJPUiAoU3RhdHVzKTsNCiAgICA+ICsNCiAgICA+ICsgICAgU21tRnR3Tm90aWZpY2F0 aW9uRXZlbnQgKE5VTEwsIE5VTEwsIE5VTEwpOw0KICAgID4gKyAgfSBlbHNlIHsNCiAgICA+ICsg ICAgLy8NCiAgICA+ICsgICAgLy8gRW11bGF0ZWQgbm9uLXZvbGF0aWxlIHZhcmlhYmxlIG1vZGUg ZG9lcyBub3QgZGVwZW5kIG9uIEZWQiBhbmQgRlRXLg0KICAgID4gKyAgICAvLw0KICAgID4gKyAg ICBWYXJpYWJsZVdyaXRlU2VydmljZUluaXRpYWxpemVTbW0gKCk7DQogICAgPiArICB9DQogICAg PiArDQogICAgPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQogICAgPiArfQ0KICAgID4gZGlmZiAt LWdpdA0KICAgID4gYS9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9S dW50aW1lRHhlL1ZhcmlhYmxlU21tUnVudA0KICAgID4gaW1lRHhlLmMNCiAgICA+IGIvTWRlTW9k dWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZVNt bVJ1bnQNCiAgICA+IGltZUR4ZS5jDQogICAgPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgID4g aW5kZXggMDAwMDAwMDAwMDAwLi5iODhmNzUzNzBhZDgNCiAgICA+IC0tLSAvZGV2L251bGwNCiAg ICA+ICsrKw0KICAgID4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3Rl ZC9SdW50aW1lRHhlL1ZhcmlhYmxlU21tUnVudA0KICAgID4gaW1lRHhlLmMNCiAgICA+IEBAIC0w LDAgKzEsMTg5NSBAQA0KICAgID4gKy8qKiBAZmlsZQ0KICAgID4gKyAgSW1wbGVtZW50IGFsbCBm b3VyIFVFRkkgUnVudGltZSBWYXJpYWJsZSBzZXJ2aWNlcyBmb3IgdGhlIG5vbnZvbGF0aWxlDQog ICAgPiArICBhbmQgdm9sYXRpbGUgc3RvcmFnZSBzcGFjZSBhbmQgaW5zdGFsbCB2YXJpYWJsZSBh cmNoaXRlY3R1cmUgcHJvdG9jb2wNCiAgICA+ICsgIGJhc2VkIG9uIFNNTSB2YXJpYWJsZSBtb2R1 bGUuDQogICAgPiArDQogICAgPiArICBDYXV0aW9uOiBUaGlzIG1vZHVsZSByZXF1aXJlcyBhZGRp dGlvbmFsIHJldmlldyB3aGVuIG1vZGlmaWVkLg0KICAgID4gKyAgVGhpcyBkcml2ZXIgd2lsbCBo YXZlIGV4dGVybmFsIGlucHV0IC0gdmFyaWFibGUgZGF0YS4NCiAgICA+ICsgIFRoaXMgZXh0ZXJu YWwgaW5wdXQgbXVzdCBiZSB2YWxpZGF0ZWQgY2FyZWZ1bGx5IHRvIGF2b2lkIHNlY3VyaXR5IGlz c3VlIGxpa2UNCiAgICA+ICsgIGJ1ZmZlciBvdmVyZmxvdywgaW50ZWdlciBvdmVyZmxvdy4NCiAg ICA+ICsNCiAgICA+ICsgIFJ1bnRpbWVTZXJ2aWNlR2V0VmFyaWFibGUoKSBhbmQgUnVudGltZVNl cnZpY2VTZXRWYXJpYWJsZSgpIGFyZSBleHRlcm5hbCBBUEkNCiAgICA+ICsgIHRvIHJlY2VpdmUg ZGF0YSBidWZmZXIuIFRoZSBzaXplIHNob3VsZCBiZSBjaGVja2VkIGNhcmVmdWxseS4NCiAgICA+ ICsNCiAgICA+ICsgIEluaXRDb21tdW5pY2F0ZUJ1ZmZlcigpIGlzIHJlYWxseSBmdW5jdGlvbiB0 byBjaGVjayB0aGUgdmFyaWFibGUgZGF0YSBzaXplLg0KICAgID4gKw0KICAgID4gK0NvcHlyaWdo dCAoYykgMjAxMCAtIDIwMjIsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk LjxCUj4NCiAgICA+ICtDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi48QlI+DQog ICAgPiArU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCiAgICA+ ICsNCiAgICA+ICsqKi8NCiAgICA+ICsjaW5jbHVkZSA8UGlEeGUuaD4NCiAgICA+ICsjaW5jbHVk ZSA8UHJvdG9jb2wvVmFyaWFibGVXcml0ZS5oPg0KICAgID4gKyNpbmNsdWRlIDxQcm90b2NvbC9W YXJpYWJsZS5oPg0KICAgID4gKyNpbmNsdWRlIDxQcm90b2NvbC9NbUNvbW11bmljYXRpb24yLmg+ DQogICAgPiArI2luY2x1ZGUgPFByb3RvY29sL1NtbVZhcmlhYmxlLmg+DQogICAgPiArI2luY2x1 ZGUgPFByb3RvY29sL1ZhcmlhYmxlTG9jay5oPg0KICAgID4gKyNpbmNsdWRlIDxQcm90b2NvbC9W YXJDaGVjay5oPg0KICAgID4gKw0KICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290U2Vy dmljZXNUYWJsZUxpYi5oPg0KICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlSdW50aW1lU2Vy dmljZXNUYWJsZUxpYi5oPg0KICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRp b25MaWIuaD4NCiAgICA+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpRHJpdmVyRW50cnlQb2ludC5o Pg0KICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlSdW50aW1lTGliLmg+DQogICAgPiArI2lu Y2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5 L0RlYnVnTGliLmg+DQogICAgPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaUxpYi5oPg0KICAgID4g KyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VMaWIuaD4NCiAgICA+ICsjaW5jbHVkZSA8TGlicmFyeS9N bVVuYmxvY2tNZW1vcnlMaWIuaD4NCiAgICA+ICsNCiAgICA+ICsjaW5jbHVkZSA8R3VpZC9FdmVu dEdyb3VwLmg+DQogICAgPiArI2luY2x1ZGUgPEd1aWQvU21tVmFyaWFibGVDb21tb24uaD4NCiAg ICA+ICsNCiAgICA+ICsjaW5jbHVkZSAiUHJpdmlsZWdlUG9seW1vcnBoaWMuaCINCiAgICA+ICsj aW5jbHVkZSAiVmFyaWFibGUuaCINCiAgICA+ICsjaW5jbHVkZSAiVmFyaWFibGVQYXJzaW5nLmgi DQogICAgPiArDQogICAgPiArRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICBtSGFuZGxl ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMOw0KICAgID4gK0VGSV9TTU1fVkFS SUFCTEVfUFJPVE9DT0wgICAgICAgKm1TbW1WYXJpYWJsZSAgICAgICAgICAgICAgICAgICAgICAg ID0gTlVMTDsNCiAgICA+ICtFRklfRVZFTlQgICAgICAgICAgICAgICAgICAgICAgIG1WaXJ0dWFs QWRkcmVzc0NoYW5nZUV2ZW50ICAgICAgICAgICA9IE5VTEw7DQogICAgPiArRUZJX01NX0NPTU1V TklDQVRJT04yX1BST1RPQ09MICAqbU1tQ29tbXVuaWNhdGlvbjIgICAgICAgICAgICAgICAgICAg PQ0KICAgID4gTlVMTDsNCiAgICA+ICtVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICpt VmFyaWFibGVCdWZmZXIgICAgICAgICAgICAgICAgICAgICA9IE5VTEw7DQogICAgPiArVUlOVDgg ICAgICAgICAgICAgICAgICAgICAgICAgICAqbVZhcmlhYmxlQnVmZmVyUGh5c2ljYWwgICAgICAg ICAgICAgPSBOVUxMOw0KICAgID4gK1ZBUklBQkxFX0lORk9fRU5UUlkgICAgICAgICAgICAgKm1W YXJpYWJsZUluZm8gICAgICAgICAgICAgICAgICAgICAgID0gTlVMTDsNCiAgICA+ICtWQVJJQUJM RV9TVE9SRV9IRUFERVIgICAgICAgICAgICptVmFyaWFibGVSdW50aW1lSG9iQ2FjaGVCdWZmZXIg ICAgICA9DQogICAgPiBOVUxMOw0KICAgID4gK1ZBUklBQkxFX1NUT1JFX0hFQURFUiAgICAgICAg ICAgKm1WYXJpYWJsZVJ1bnRpbWVOdkNhY2hlQnVmZmVyICAgICAgID0gTlVMTDsNCiAgICA+ICtW QVJJQUJMRV9TVE9SRV9IRUFERVIgICAgICAgICAgICptVmFyaWFibGVSdW50aW1lVm9sYXRpbGVD YWNoZUJ1ZmZlciA9DQogICAgPiBOVUxMOw0KICAgID4gK1ZBUklBQkxFX1NUT1JFX0hFQURFUiAg ICAgICAgICAgKm1OdlZhcmlhYmxlQ2FjaGUgICAgICAgICAgICAgICAgICAgID0gTlVMTDsNCiAg ICA+ICtWQVJJQUJMRV9NT0RVTEVfR0xPQkFMICAgICAgICAgICptVmFyaWFibGVNb2R1bGVHbG9i YWwgICAgICAgICAgICAgICA9IE5VTEw7DQogICAgPiArVUlOVE4gICAgICAgICAgICAgICAgICAg ICAgICAgICBtVmFyaWFibGVCdWZmZXJTaXplOw0KICAgID4gK1VJTlROICAgICAgICAgICAgICAg ICAgICAgICAgICAgbVZhcmlhYmxlUnVudGltZUhvYkNhY2hlQnVmZmVyU2l6ZTsNCiAgICA+ICtV SU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1WYXJpYWJsZVJ1bnRpbWVOdkNhY2hlQnVm ZmVyU2l6ZTsNCiAgICA+ICtVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1WYXJpYWJs ZVJ1bnRpbWVWb2xhdGlsZUNhY2hlQnVmZmVyU2l6ZTsNCiAgICA+ICtVSU5UTiAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1WYXJpYWJsZUJ1ZmZlclBheWxvYWRTaXplOw0KICAgID4gK0JPT0xF QU4gICAgICAgICAgICAgICAgICAgICAgICAgbVZhcmlhYmxlUnVudGltZUNhY2hlUGVuZGluZ1Vw ZGF0ZTsNCiAgICA+ICtCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIG1WYXJpYWJsZVJ1 bnRpbWVDYWNoZVJlYWRMb2NrOw0KICAgID4gK0JPT0xFQU4gICAgICAgICAgICAgICAgICAgICAg ICAgbVZhcmlhYmxlQXV0aEZvcm1hdDsNCiAgICA+ICtCT09MRUFOICAgICAgICAgICAgICAgICAg ICAgICAgIG1Ib2JGbHVzaENvbXBsZXRlOw0KICAgID4gK0VGSV9MT0NLICAgICAgICAgICAgICAg ICAgICAgICAgbVZhcmlhYmxlU2VydmljZXNMb2NrOw0KICAgID4gK0VES0lJX1ZBUklBQkxFX0xP Q0tfUFJPVE9DT0wgICAgbVZhcmlhYmxlTG9jazsNCiAgICA+ICtFREtJSV9WQVJfQ0hFQ0tfUFJP VE9DT0wgICAgICAgIG1WYXJDaGVjazsNCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIFRo ZSBsb2dpYyB0byBpbml0aWFsaXplIHRoZSBWYXJpYWJsZVBvbGljeSBlbmdpbmUgaXMgaW4gaXRz IG93biBmaWxlLg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK0VGSV9TVEFUVVMNCiAgICA+ ICtFRklBUEkNCiAgICA+ICtWYXJpYWJsZVBvbGljeVNtbUR4ZU1haW4gKA0KICAgID4gKyAgSU4g ICAgRUZJX0hBTkRMRSAgICAgICAgSW1hZ2VIYW5kbGUsDQogICAgPiArICBJTiAgICBFRklfU1lT VEVNX1RBQkxFICAqU3lzdGVtVGFibGUNCiAgICA+ICsgICk7DQogICAgPiArDQogICAgPiArLyoq DQogICAgPiArICBTb21lIFNlY3VyZSBCb290IFBvbGljeSBWYXJpYWJsZSBtYXkgdXBkYXRlIGZv bGxvd2luZyBvdGhlciB2YXJpYWJsZQ0KICAgID4gY2hhbmdlcyhTZWN1cmVCb290IGZvbGxvd3Mg UEsgY2hhbmdlLCBldGMpLg0KICAgID4gKyAgUmVjb3JkIHRoZWlyIGluaXRpYWwgU3RhdGUgd2hl biB2YXJpYWJsZSB3cml0ZSBzZXJ2aWNlIGlzIHJlYWR5Lg0KICAgID4gKw0KICAgID4gKyoqLw0K ICAgID4gK1ZPSUQNCiAgICA+ICtFRklBUEkNCiAgICA+ICtSZWNvcmRTZWN1cmVCb290UG9saWN5 VmFyRGF0YSAoDQogICAgPiArICBWT0lEDQogICAgPiArICApOw0KICAgID4gKw0KICAgID4gKy8q Kg0KICAgID4gKyAgQWNxdWlyZXMgbG9jayBvbmx5IGF0IGJvb3QgdGltZS4gU2ltcGx5IHJldHVy bnMgYXQgcnVudGltZS4NCiAgICA+ICsNCiAgICA+ICsgIFRoaXMgaXMgYSB0ZW1wZXJhcnkgZnVu Y3Rpb24gdGhhdCB3aWxsIGJlIHJlbW92ZWQgd2hlbg0KICAgID4gKyAgRWZpQWNxdWlyZUxvY2so KSBpbiBVZWZpTGliIGNhbiBoYW5kbGUgdGhlIGNhbGwgaW4gVUVGSQ0KICAgID4gKyAgUnVudGlt ZXIgZHJpdmVyIGluIFJUIHBoYXNlLg0KICAgID4gKyAgSXQgY2FsbHMgRWZpQWNxdWlyZUxvY2so KSBhdCBib290IHRpbWUsIGFuZCBzaW1wbHkgcmV0dXJucw0KICAgID4gKyAgYXQgcnVudGltZS4N CiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbSAgTG9jayAgICAgICAgIEEgcG9pbnRlciB0byB0aGUg bG9jayB0byBhY3F1aXJlLg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK1ZPSUQNCiAgICA+ ICtBY3F1aXJlTG9ja09ubHlBdEJvb3RUaW1lICgNCiAgICA+ICsgIElOIEVGSV9MT0NLICAqTG9j aw0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIGlmICghRWZpQXRSdW50aW1lICgpKSB7 DQogICAgPiArICAgIEVmaUFjcXVpcmVMb2NrIChMb2NrKTsNCiAgICA+ICsgIH0NCiAgICA+ICt9 DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBSZWxlYXNlcyBsb2NrIG9ubHkgYXQgYm9v dCB0aW1lLiBTaW1wbHkgcmV0dXJucyBhdCBydW50aW1lLg0KICAgID4gKw0KICAgID4gKyAgVGhp cyBpcyBhIHRlbXBlcmFyeSBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIHJlbW92ZWQgd2hlbg0KICAg ID4gKyAgRWZpUmVsZWFzZUxvY2soKSBpbiBVZWZpTGliIGNhbiBoYW5kbGUgdGhlIGNhbGwgaW4g VUVGSQ0KICAgID4gKyAgUnVudGltZXIgZHJpdmVyIGluIFJUIHBoYXNlLg0KICAgID4gKyAgSXQg Y2FsbHMgRWZpUmVsZWFzZUxvY2soKSBhdCBib290IHRpbWUgYW5kIHNpbXBseSByZXR1cm5zDQog ICAgPiArICBhdCBydW50aW1lLg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtICBMb2NrICAgICAg ICAgQSBwb2ludGVyIHRvIHRoZSBsb2NrIHRvIHJlbGVhc2UuDQogICAgPiArDQogICAgPiArKiov DQogICAgPiArVk9JRA0KICAgID4gK1JlbGVhc2VMb2NrT25seUF0Qm9vdFRpbWUgKA0KICAgID4g KyAgSU4gRUZJX0xPQ0sgICpMb2NrDQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgaWYg KCFFZmlBdFJ1bnRpbWUgKCkpIHsNCiAgICA+ICsgICAgRWZpUmVsZWFzZUxvY2sgKExvY2spOw0K ICAgID4gKyAgfQ0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIFJldHVy biBUUlVFIGlmIEV4aXRCb290U2VydmljZXMgKCkgaGFzIGJlZW4gY2FsbGVkLg0KICAgID4gKw0K ICAgID4gKyAgQHJldHZhbCBUUlVFIElmIEV4aXRCb290U2VydmljZXMgKCkgaGFzIGJlZW4gY2Fs bGVkLiBGQUxTRSBpZiBFeGl0Qm9vdFNlcnZpY2VzDQogICAgPiAoKSBoYXMgbm90IGJlZW4gY2Fs bGVkLg0KICAgID4gKyoqLw0KICAgID4gK0JPT0xFQU4NCiAgICA+ICtBdFJ1bnRpbWUgKA0KICAg ID4gKyAgVk9JRA0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIHJldHVybiBFZmlBdFJ1 bnRpbWUgKCk7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgSW5pdGlh bGl6ZSB0aGUgdmFyaWFibGUgY2FjaGUgYnVmZmVyIGFzIGFuIGVtcHR5IHZhcmlhYmxlIHN0b3Jl Lg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtW291dF0gICAgIFZhcmlhYmxlQ2FjaGVCdWZmZXIg ICAgIEEgcG9pbnRlciB0byBwb2ludGVyIG9mIGEgY2FjaGUNCiAgICA+IHZhcmlhYmxlIHN0b3Jl Lg0KICAgID4gKyAgQHBhcmFtW2luLG91dF0gIFRvdGFsVmFyaWFibGVDYWNoZVNpemUgIE9uIGlu cHV0LCB0aGUgbWluaW11bSBzaXplIG5lZWRlZA0KICAgID4gZm9yIHRoZSBVRUZJIHZhcmlhYmxl IHN0b3JlIGNhY2hlDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYnVmZmVyIHRoYXQgaXMgYWxsb2NhdGVkLiBPbiBvdXRwdXQsIHRoZSBhY3R1YWwgc2l6 ZSBvZiB0aGUNCiAgICA+IGJ1ZmZlciBhbGxvY2F0ZWQuDQogICAgPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgVG90YWxWYXJpYWJsZUNhY2hlU2l6ZSBpcyB6 ZXJvLCBhIGJ1ZmZlciB3aWxsIG5vdCBiZQ0KICAgID4gYWxsb2NhdGVkIGFuZCB0aGUNCiAgICA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiB3aWxs IHJldHVybiB3aXRoIEVGSV9TVUNDRVNTLg0KICAgID4gKw0KICAgID4gKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICAgICBUaGUgdmFyaWFibGUgY2FjaGUgd2FzIGFsbG9jYXRlZCBhbmQg aW5pdGlhbGl6ZWQNCiAgICA+IHN1Y2Nlc3NmdWxseS4NCiAgICA+ICsgIEByZXR2YWwgRUZJX0lO VkFMSURfUEFSQU1FVEVSICAgQSBnaXZlbiBwb2ludGVyIGlzIE5VTEwgb3IgYW4gaW52YWxpZA0K ICAgID4gdmFyaWFibGUgc3RvcmUgc2l6ZSB3YXMgc3BlY2lmaWVkLg0KICAgID4gKyAgQHJldHZh bCBFRklfT1VUX09GX1JFU09VUkNFUyAgICBJbnN1ZmZpY2llbnQgcmVzb3VyY2VzIGFyZSBhdmFp bGFibGUgdG8NCiAgICA+IGFsbG9jYXRlIHRoZSB2YXJpYWJsZSBzdG9yZSBjYWNoZSBidWZmZXIu DQogICAgPiArDQogICAgPiArKiovDQogICAgPiArRUZJX1NUQVRVUw0KICAgID4gK0luaXRWYXJp YWJsZUNhY2hlICgNCiAgICA+ICsgIE9VVCAgICBWQVJJQUJMRV9TVE9SRV9IRUFERVIgICoqVmFy aWFibGVDYWNoZUJ1ZmZlciwNCiAgICA+ICsgIElOIE9VVCBVSU5UTiAgICAgICAgICAgICAgICAg ICpUb3RhbFZhcmlhYmxlQ2FjaGVTaXplDQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAg VkFSSUFCTEVfU1RPUkVfSEVBREVSICAqVmFyaWFibGVDYWNoZVN0b3JlUHRyOw0KICAgID4gKyAg RUZJX1NUQVRVUyAgICAgICAgICAgICBTdGF0dXM7DQogICAgPiArDQogICAgPiArICBpZiAoVG90 YWxWYXJpYWJsZUNhY2hlU2l6ZSA9PSBOVUxMKSB7DQogICAgPiArICAgIHJldHVybiBFRklfSU5W QUxJRF9QQVJBTUVURVI7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICBpZiAoKlRvdGFs VmFyaWFibGVDYWNoZVNpemUgPT0gMCkgew0KICAgID4gKyAgICByZXR1cm4gRUZJX1NVQ0NFU1M7 DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICBpZiAoKFZhcmlhYmxlQ2FjaGVCdWZmZXIg PT0gTlVMTCkgfHwgKCpUb3RhbFZhcmlhYmxlQ2FjaGVTaXplIDwgc2l6ZW9mDQogICAgPiAoVkFS SUFCTEVfU1RPUkVfSEVBREVSKSkpIHsNCiAgICA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BB UkFNRVRFUjsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgICpUb3RhbFZhcmlhYmxlQ2Fj aGVTaXplID0gQUxJR05fVkFMVUUgKCpUb3RhbFZhcmlhYmxlQ2FjaGVTaXplLCBzaXplb2YNCiAg ICA+IChVSU5UMzIpKTsNCiAgICA+ICsNCiAgICA+ICsgIC8vDQogICAgPiArICAvLyBBbGxvY2F0 ZSBOViBTdG9yYWdlIENhY2hlIGFuZCBpbml0aWFsaXplIGl0IHRvIGFsbCAxJ3MgKGxpa2UgYW4g ZXJhc2VkIEZWKQ0KICAgID4gKyAgLy8NCiAgICA+ICsgICpWYXJpYWJsZUNhY2hlQnVmZmVyID0g IChWQVJJQUJMRV9TVE9SRV9IRUFERVIgKilBbGxvY2F0ZVJ1bnRpbWVQYWdlcw0KICAgID4gKA0K ICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRUZJX1NJWkVfVE9fUEFHRVMgKCpUb3RhbFZhcmlhYmxlQ2FjaGVTaXplKQ0KICAgID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAg ICA+ICsgIGlmICgqVmFyaWFibGVDYWNoZUJ1ZmZlciA9PSBOVUxMKSB7DQogICAgPiArICAgIHJl dHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsg IC8vDQogICAgPiArICAvLyBSZXF1ZXN0IHRvIHVuYmxvY2sgdGhlIG5ld2x5IGFsbG9jYXRlZCBj YWNoZSByZWdpb24gdG8gYmUgYWNjZXNzaWJsZSBmcm9tDQogICAgPiBpbnNpZGUgTU0NCiAgICA+ ICsgIC8vDQogICAgPiArICBTdGF0dXMgPSBNbVVuYmxvY2tNZW1vcnlSZXF1ZXN0ICgNCiAgICA+ ICsgICAgICAgICAgICAgKEVGSV9QSFlTSUNBTF9BRERSRVNTKShVSU5UTikqVmFyaWFibGVDYWNo ZUJ1ZmZlciwNCiAgICA+ICsgICAgICAgICAgICAgRUZJX1NJWkVfVE9fUEFHRVMgKCpUb3RhbFZh cmlhYmxlQ2FjaGVTaXplKQ0KICAgID4gKyAgICAgICAgICAgICApOw0KICAgID4gKyAgaWYgKChT dGF0dXMgIT0gRUZJX1VOU1VQUE9SVEVEKSAmJiBFRklfRVJST1IgKFN0YXR1cykpIHsNCiAgICA+ ICsgICAgcmV0dXJuIFN0YXR1czsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIFZhcmlh YmxlQ2FjaGVTdG9yZVB0ciA9ICpWYXJpYWJsZUNhY2hlQnVmZmVyOw0KICAgID4gKyAgU2V0TWVt MzIgKChWT0lEICopVmFyaWFibGVDYWNoZVN0b3JlUHRyLCAqVG90YWxWYXJpYWJsZUNhY2hlU2l6 ZSwNCiAgICA+IChVSU5UMzIpMHhGRkZGRkZGRik7DQogICAgPiArDQogICAgPiArICBaZXJvTWVt ICgoVk9JRCAqKVZhcmlhYmxlQ2FjaGVTdG9yZVB0ciwgc2l6ZW9mDQogICAgPiAoVkFSSUFCTEVf U1RPUkVfSEVBREVSKSk7DQogICAgPiArICBWYXJpYWJsZUNhY2hlU3RvcmVQdHItPlNpemUgICA9 IChVSU5UMzIpKlRvdGFsVmFyaWFibGVDYWNoZVNpemU7DQogICAgPiArICBWYXJpYWJsZUNhY2hl U3RvcmVQdHItPkZvcm1hdCA9IFZBUklBQkxFX1NUT1JFX0ZPUk1BVFRFRDsNCiAgICA+ICsgIFZh cmlhYmxlQ2FjaGVTdG9yZVB0ci0+U3RhdGUgID0gVkFSSUFCTEVfU1RPUkVfSEVBTFRIWTsNCiAg ICA+ICsNCiAgICA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCiAgICA+ICt9DQogICAgPiArDQog ICAgPiArLyoqDQogICAgPiArICBJbml0aWFsaXplIHRoZSBjb21tdW5pY2F0ZSBidWZmZXIgdXNp bmcgRGF0YVNpemUgYW5kIEZ1bmN0aW9uLg0KICAgID4gKw0KICAgID4gKyAgVGhlIGNvbW11bmlj YXRlIHNpemUgaXM6IFNNTV9DT01NVU5JQ0FURV9IRUFERVJfU0laRSArDQogICAgPiBTTU1fVkFS SUFCTEVfQ09NTVVOSUNBVEVfSEVBREVSX1NJWkUgKw0KICAgID4gKyAgRGF0YVNpemUuDQogICAg PiArDQogICAgPiArICBDYXV0aW9uOiBUaGlzIGZ1bmN0aW9uIG1heSByZWNlaXZlIHVudHJ1c3Rl ZCBpbnB1dC4NCiAgICA+ICsgIFRoZSBkYXRhIHNpemUgZXh0ZXJuYWwgaW5wdXQsIHNvIHRoaXMg ZnVuY3Rpb24gd2lsbCB2YWxpZGF0ZSBpdCBjYXJlZnVsbHkgdG8gYXZvaWQNCiAgICA+IGJ1ZmZl ciBvdmVyZmxvdy4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbVtvdXRdICAgICAgRGF0YVB0ciAg ICAgICAgICBQb2ludHMgdG8gdGhlIGRhdGEgaW4gdGhlIGNvbW11bmljYXRlIGJ1ZmZlci4NCiAg ICA+ICsgIEBwYXJhbVtpbl0gICAgICAgRGF0YVNpemUgICAgICAgICBUaGUgZGF0YSBzaXplIHRv IHNlbmQgdG8gU01NLg0KICAgID4gKyAgQHBhcmFtW2luXSAgICAgICBGdW5jdGlvbiAgICAgICAg IFRoZSBmdW5jdGlvbiBudW1iZXIgdG8gaW5pdGlhbGl6ZSB0aGUNCiAgICA+IGNvbW11bmljYXRl IGhlYWRlci4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVS ICAgICBUaGUgZGF0YSBzaXplIGlzIHRvbyBiaWcuDQogICAgPiArICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgICAgICAgICAgRmluZCB0aGUgc3BlY2lmaWVkIHZhcmlhYmxlLg0KICAgID4gKw0K ICAgID4gKyoqLw0KICAgID4gK0VGSV9TVEFUVVMNCiAgICA+ICtJbml0Q29tbXVuaWNhdGVCdWZm ZXIgKA0KICAgID4gKyAgT1VUICAgICBWT0lEICAgKipEYXRhUHRyIE9QVElPTkFMLA0KICAgID4g KyAgSU4gICAgICBVSU5UTiAgRGF0YVNpemUsDQogICAgPiArICBJTiAgICAgIFVJTlROICBGdW5j dGlvbg0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIEVGSV9NTV9DT01NVU5JQ0FURV9I RUFERVIgICAgICAgICpTbW1Db21tdW5pY2F0ZUhlYWRlcjsNCiAgICA+ICsgIFNNTV9WQVJJQUJM RV9DT01NVU5JQ0FURV9IRUFERVIgICpTbW1WYXJpYWJsZUZ1bmN0aW9uSGVhZGVyOw0KICAgID4g Kw0KICAgID4gKyAgaWYgKERhdGFTaXplICsgU01NX0NPTU1VTklDQVRFX0hFQURFUl9TSVpFICsN CiAgICA+IFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9IRUFERVJfU0laRSA+IG1WYXJpYWJsZUJ1 ZmZlclNpemUpIHsNCiAgICA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCiAg ICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIFNtbUNvbW11bmljYXRlSGVhZGVyID0gKEVGSV9N TV9DT01NVU5JQ0FURV9IRUFERVINCiAgICA+ICopbVZhcmlhYmxlQnVmZmVyOw0KICAgID4gKyAg Q29weUd1aWQgKCZTbW1Db21tdW5pY2F0ZUhlYWRlci0+SGVhZGVyR3VpZCwNCiAgICA+ICZnRWZp U21tVmFyaWFibGVQcm90b2NvbEd1aWQpOw0KICAgID4gKyAgU21tQ29tbXVuaWNhdGVIZWFkZXIt Pk1lc3NhZ2VMZW5ndGggPSBEYXRhU2l6ZSArDQogICAgPiBTTU1fVkFSSUFCTEVfQ09NTVVOSUNB VEVfSEVBREVSX1NJWkU7DQogICAgPiArDQogICAgPiArICBTbW1WYXJpYWJsZUZ1bmN0aW9uSGVh ZGVyICAgICAgICAgICA9DQogICAgPiAoU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0hFQURFUiAq KVNtbUNvbW11bmljYXRlSGVhZGVyLT5EYXRhOw0KICAgID4gKyAgU21tVmFyaWFibGVGdW5jdGlv bkhlYWRlci0+RnVuY3Rpb24gPSBGdW5jdGlvbjsNCiAgICA+ICsgIGlmIChEYXRhUHRyICE9IE5V TEwpIHsNCiAgICA+ICsgICAgKkRhdGFQdHIgPSBTbW1WYXJpYWJsZUZ1bmN0aW9uSGVhZGVyLT5E YXRhOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0K ICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIFNlbmQgdGhlIGRhdGEgaW4g Y29tbXVuaWNhdGUgYnVmZmVyIHRvIFNNTS4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbVtpbl0g ICBEYXRhU2l6ZSAgICAgICAgICAgICAgIFRoaXMgc2l6ZSBvZiB0aGUgZnVuY3Rpb24gaGVhZGVy IGFuZCB0aGUgZGF0YS4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwgICAgICBFRklfU1VDQ0VT UyAgICAgICAgICAgIFN1Y2Nlc3MgaXMgcmV0dXJuZWQgZnJvbSB0aGUgZnVuY3RpbiBpbiBTTU0u DQogICAgPiArICBAcmV0dmFsICAgICAgT3RoZXJzICAgICAgICAgICAgICAgICBGYWlsdXJlIGlz IHJldHVybmVkIGZyb20gdGhlIGZ1bmN0aW9uIGluIFNNTS4NCiAgICA+ICsNCiAgICA+ICsqKi8N CiAgICA+ICtFRklfU1RBVFVTDQogICAgPiArU2VuZENvbW11bmljYXRlQnVmZmVyICgNCiAgICA+ ICsgIElOICAgICAgVUlOVE4gIERhdGFTaXplDQogICAgPiArICApDQogICAgPiArew0KICAgID4g KyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KICAgID4gKyAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbVNpemU7DQogICAgPiArICBFRklfTU1f Q09NTVVOSUNBVEVfSEVBREVSICAgICAgICAqU21tQ29tbXVuaWNhdGVIZWFkZXI7DQogICAgPiAr ICBTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfSEVBREVSICAqU21tVmFyaWFibGVGdW5jdGlvbkhl YWRlcjsNCiAgICA+ICsNCiAgICA+ICsgIENvbW1TaXplID0gRGF0YVNpemUgKyBTTU1fQ09NTVVO SUNBVEVfSEVBREVSX1NJWkUgKw0KICAgID4gU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0hFQURF Ul9TSVpFOw0KICAgID4gKyAgU3RhdHVzICAgPSBtTW1Db21tdW5pY2F0aW9uMi0+Q29tbXVuaWNh dGUgKA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTW1Db21tdW5p Y2F0aW9uMiwNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVZhcmlh YmxlQnVmZmVyUGh5c2ljYWwsDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG1WYXJpYWJsZUJ1ZmZlciwNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJkNvbW1TaXplDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7DQogICAgPiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KICAgID4gKw0KICAgID4g KyAgU21tQ29tbXVuaWNhdGVIZWFkZXIgICAgICA9IChFRklfTU1fQ09NTVVOSUNBVEVfSEVBREVS DQogICAgPiAqKW1WYXJpYWJsZUJ1ZmZlcjsNCiAgICA+ICsgIFNtbVZhcmlhYmxlRnVuY3Rpb25I ZWFkZXIgPSAoU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0hFQURFUg0KICAgID4gKilTbW1Db21t dW5pY2F0ZUhlYWRlci0+RGF0YTsNCiAgICA+ICsgIHJldHVybiBTbW1WYXJpYWJsZUZ1bmN0aW9u SGVhZGVyLT5SZXR1cm5TdGF0dXM7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAg ID4gKyAgTWFyayBhIHZhcmlhYmxlIHRoYXQgd2lsbCBiZWNvbWUgcmVhZC1vbmx5IGFmdGVyIGxl YXZpbmcgdGhlIERYRSBwaGFzZSBvZg0KICAgID4gZXhlY3V0aW9uLg0KICAgID4gKw0KICAgID4g KyAgQHBhcmFtW2luXSBUaGlzICAgICAgICAgIFRoZSBWQVJJQUJMRV9MT0NLX1BST1RPQ09MIGlu c3RhbmNlLg0KICAgID4gKyAgQHBhcmFtW2luXSBWYXJpYWJsZU5hbWUgIEEgcG9pbnRlciB0byB0 aGUgdmFyaWFibGUgbmFtZSB0aGF0IHdpbGwgYmUgbWFkZQ0KICAgID4gcmVhZC1vbmx5IHN1YnNl cXVlbnRseS4NCiAgICA+ICsgIEBwYXJhbVtpbl0gVmVuZG9yR3VpZCAgICBBIHBvaW50ZXIgdG8g dGhlIHZlbmRvciBHVUlEIHRoYXQgd2lsbCBiZSBtYWRlDQogICAgPiByZWFkLW9ubHkgc3Vic2Vx dWVudGx5Lg0KICAgID4gKw0KICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAg VGhlIHZhcmlhYmxlIHNwZWNpZmllZCBieSB0aGUgVmFyaWFibGVOYW1lIGFuZA0KICAgID4gdGhl IFZlbmRvckd1aWQgd2FzIG1hcmtlZA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYXMgcGVuZGluZyB0byBiZSByZWFkLW9ubHkuDQogICAgPiArICBAcmV0dmFsIEVGSV9J TlZBTElEX1BBUkFNRVRFUiBWYXJpYWJsZU5hbWUgb3IgVmVuZG9yR3VpZCBpcyBOVUxMLg0KICAg ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3IgVmFyaWFibGVOYW1lIGlzIGFu IGVtcHR5IHN0cmluZy4NCiAgICA+ICsgIEByZXR2YWwgRUZJX0FDQ0VTU19ERU5JRUQgICAgIEVG SV9FTkRfT0ZfRFhFX0VWRU5UX0dST1VQX0dVSUQgb3INCiAgICA+IEVGSV9FVkVOVF9HUk9VUF9S RUFEWV9UT19CT09UIGhhcw0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YWxyZWFkeSBiZWVuIHNpZ25hbGVkLg0KICAgID4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09V UkNFUyAgVGhlcmUgaXMgbm90IGVub3VnaCByZXNvdXJjZSB0byBob2xkIHRoZQ0KICAgID4gbG9j ayByZXF1ZXN0Lg0KICAgID4gKyoqLw0KICAgID4gK0VGSV9TVEFUVVMNCiAgICA+ICtFRklBUEkN CiAgICA+ICtWYXJpYWJsZUxvY2tSZXF1ZXN0VG9Mb2NrICgNCiAgICA+ICsgIElOIENPTlNUIEVE S0lJX1ZBUklBQkxFX0xPQ0tfUFJPVE9DT0wgICpUaGlzLA0KICAgID4gKyAgSU4gICAgICAgQ0hB UjE2ICAgICAgICAgICAgICAgICAgICAgICAgKlZhcmlhYmxlTmFtZSwNCiAgICA+ICsgIElOICAg ICAgIEVGSV9HVUlEICAgICAgICAgICAgICAgICAgICAgICpWZW5kb3JHdWlkDQogICAgPiArICAp DQogICAgPiArew0KICAgID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFN0YXR1czsNCiAgICA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBWYXJpYWJsZU5hbWVTaXplOw0KICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFBheWxvYWRTaXplOw0KICAgID4gKyAgU01NX1ZBUklBQkxFX0NPTU1V TklDQVRFX0xPQ0tfVkFSSUFCTEUgICpWYXJpYWJsZVRvTG9jazsNCiAgICA+ICsNCiAgICA+ICsg IGlmICgoVmFyaWFibGVOYW1lID09IE5VTEwpIHx8IChWYXJpYWJsZU5hbWVbMF0gPT0gMCkgfHwg KFZlbmRvckd1aWQgPT0NCiAgICA+IE5VTEwpKSB7DQogICAgPiArICAgIHJldHVybiBFRklfSU5W QUxJRF9QQVJBTUVURVI7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICBWYXJpYWJsZU5h bWVTaXplID0gU3RyU2l6ZSAoVmFyaWFibGVOYW1lKTsNCiAgICA+ICsgIFZhcmlhYmxlVG9Mb2Nr ICAgPSBOVUxMOw0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIElmIFZhcmlhYmxl TmFtZSBleGNlZWRzIFNNTSBwYXlsb2FkIGxpbWl0LiBSZXR1cm4gZmFpbHVyZQ0KICAgID4gKyAg Ly8NCiAgICA+ICsgIGlmIChWYXJpYWJsZU5hbWVTaXplID4gbVZhcmlhYmxlQnVmZmVyUGF5bG9h ZFNpemUgLSBPRkZTRVRfT0YNCiAgICA+IChTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfTE9DS19W QVJJQUJMRSwgTmFtZSkpIHsNCiAgICA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRF UjsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIEFjcXVpcmVMb2NrT25seUF0Qm9vdFRp bWUgKCZtVmFyaWFibGVTZXJ2aWNlc0xvY2spOw0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ ICsgIC8vIEluaXQgdGhlIGNvbW11bmljYXRlIGJ1ZmZlci4gVGhlIGJ1ZmZlciBkYXRhIHNpemUg aXM6DQogICAgPiArICAvLyBTTU1fQ09NTVVOSUNBVEVfSEVBREVSX1NJWkUgKw0KICAgID4gU01N X1ZBUklBQkxFX0NPTU1VTklDQVRFX0hFQURFUl9TSVpFICsgUGF5bG9hZFNpemUuDQogICAgPiAr ICAvLw0KICAgID4gKyAgUGF5bG9hZFNpemUgPSBPRkZTRVRfT0YgKFNNTV9WQVJJQUJMRV9DT01N VU5JQ0FURV9MT0NLX1ZBUklBQkxFLA0KICAgID4gTmFtZSkgKyBWYXJpYWJsZU5hbWVTaXplOw0K ICAgID4gKyAgU3RhdHVzICAgICAgPSBJbml0Q29tbXVuaWNhdGVCdWZmZXIgKChWT0lEICoqKSZW YXJpYWJsZVRvTG9jaywgUGF5bG9hZFNpemUsDQogICAgPiBTTU1fVkFSSUFCTEVfRlVOQ1RJT05f TE9DS19WQVJJQUJMRSk7DQogICAgPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAg PiArICAgIGdvdG8gRG9uZTsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIEFTU0VSVCAo VmFyaWFibGVUb0xvY2sgIT0gTlVMTCk7DQogICAgPiArDQogICAgPiArICBDb3B5R3VpZCAoJlZh cmlhYmxlVG9Mb2NrLT5HdWlkLCBWZW5kb3JHdWlkKTsNCiAgICA+ICsgIFZhcmlhYmxlVG9Mb2Nr LT5OYW1lU2l6ZSA9IFZhcmlhYmxlTmFtZVNpemU7DQogICAgPiArICBDb3B5TWVtIChWYXJpYWJs ZVRvTG9jay0+TmFtZSwgVmFyaWFibGVOYW1lLCBWYXJpYWJsZVRvTG9jay0NCiAgICA+ID5OYW1l U2l6ZSk7DQogICAgPiArDQogICAgPiArICAvLw0KICAgID4gKyAgLy8gU2VuZCBkYXRhIHRvIFNN TS4NCiAgICA+ICsgIC8vDQogICAgPiArICBTdGF0dXMgPSBTZW5kQ29tbXVuaWNhdGVCdWZmZXIg KFBheWxvYWRTaXplKTsNCiAgICA+ICsNCiAgICA+ICtEb25lOg0KICAgID4gKyAgUmVsZWFzZUxv Y2tPbmx5QXRCb290VGltZSAoJm1WYXJpYWJsZVNlcnZpY2VzTG9jayk7DQogICAgPiArICByZXR1 cm4gU3RhdHVzOw0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIFJlZ2lz dGVyIFNldFZhcmlhYmxlIGNoZWNrIGhhbmRsZXIuDQogICAgPiArDQogICAgPiArICBAcGFyYW1b aW5dIEhhbmRsZXIgICAgICAgICAgICBQb2ludGVyIHRvIGNoZWNrIGhhbmRsZXIuDQogICAgPiAr DQogICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgU2V0VmFyaWFibGUg Y2hlY2sgaGFuZGxlciB3YXMgcmVnaXN0ZXJlZA0KICAgID4gc3VjY2Vzc2Z1bGx5Lg0KICAgID4g KyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgSGFuZGxlciBpcyBOVUxMLg0KICAgID4g KyAgQHJldHZhbCBFRklfQUNDRVNTX0RFTklFRCAgICAgRUZJX0VORF9PRl9EWEVfRVZFTlRfR1JP VVBfR1VJRCBvcg0KICAgID4gRUZJX0VWRU5UX0dST1VQX1JFQURZX1RPX0JPT1QgaGFzDQogICAg PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHJlYWR5IGJlZW4gc2lnbmFsZWQu DQogICAgPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBUaGVyZSBpcyBub3QgZW5v dWdoIHJlc291cmNlIGZvciB0aGUNCiAgICA+IFNldFZhcmlhYmxlIGNoZWNrIGhhbmRsZXIgcmVn aXN0ZXIgcmVxdWVzdC4NCiAgICA+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIFRo aXMgaW50ZXJmYWNlIGlzIG5vdCBpbXBsZW1lbnRlZC4NCiAgICA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpdCBpcyB1bnN1cHBvcnRlZCBpbiBWYXJDaGVj ayBwcm90b2NvbCBpZiBib3RoDQogICAgPiBWYXJDaGVjayBhbmQgU21tVmFyQ2hlY2sgcHJvdG9j b2xzIGFyZSBwcmVzZW50Lg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK0VGSV9TVEFUVVMN CiAgICA+ICtFRklBUEkNCiAgICA+ICtWYXJDaGVja1JlZ2lzdGVyU2V0VmFyaWFibGVDaGVja0hh bmRsZXIgKA0KICAgID4gKyAgSU4gVkFSX0NIRUNLX1NFVF9WQVJJQUJMRV9DSEVDS19IQU5ETEVS ICBIYW5kbGVyDQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgcmV0dXJuIEVGSV9VTlNV UFBPUlRFRDsNCiAgICA+ICt9DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBWYXJpYWJs ZSBwcm9wZXJ0eSBzZXQuDQogICAgPiArDQogICAgPiArICBAcGFyYW1baW5dIE5hbWUgICAgICAg ICAgICAgICBQb2ludGVyIHRvIHRoZSB2YXJpYWJsZSBuYW1lLg0KICAgID4gKyAgQHBhcmFtW2lu XSBHdWlkICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgdmVuZG9yIEdVSUQuDQogICAgPiAr ICBAcGFyYW1baW5dIFZhcmlhYmxlUHJvcGVydHkgICBQb2ludGVyIHRvIHRoZSBpbnB1dCB2YXJp YWJsZSBwcm9wZXJ0eS4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgIFRoZSBwcm9wZXJ0eSBvZiB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgdGhlIE5hbWUNCiAg ICA+IGFuZCBHdWlkIHdhcyBzZXQgc3VjY2Vzc2Z1bGx5Lg0KICAgID4gKyAgQHJldHZhbCBFRklf SU5WQUxJRF9QQVJBTUVURVIgTmFtZSwgR3VpZCBvciBWYXJpYWJsZVByb3BlcnR5IGlzIE5VTEws DQogICAgPiBvciBOYW1lIGlzIGFuIGVtcHR5IHN0cmluZywNCiAgICA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG9yIHRoZSBmaWVsZHMgb2YgVmFyaWFibGVQcm9wZXJ0eSBhcmUg bm90IHZhbGlkLg0KICAgID4gKyAgQHJldHZhbCBFRklfQUNDRVNTX0RFTklFRCAgICAgRUZJX0VO RF9PRl9EWEVfRVZFTlRfR1JPVVBfR1VJRCBvcg0KICAgID4gRUZJX0VWRU5UX0dST1VQX1JFQURZ X1RPX0JPT1QgaGFzDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHJl YWR5IGJlZW4gc2lnbmFsZWQuDQogICAgPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VT ICBUaGVyZSBpcyBub3QgZW5vdWdoIHJlc291cmNlIGZvciB0aGUNCiAgICA+IHZhcmlhYmxlIHBy b3BlcnR5IHNldCByZXF1ZXN0Lg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK0VGSV9TVEFU VVMNCiAgICA+ICtFRklBUEkNCiAgICA+ICtWYXJDaGVja1ZhcmlhYmxlUHJvcGVydHlTZXQgKA0K ICAgID4gKyAgSU4gQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAqTmFtZSwNCiAgICA+ICsg IElOIEVGSV9HVUlEICAgICAgICAgICAgICAgICAgICAgKkd1aWQsDQogICAgPiArICBJTiBWQVJf Q0hFQ0tfVkFSSUFCTEVfUFJPUEVSVFkgICpWYXJpYWJsZVByb3BlcnR5DQogICAgPiArICApDQog ICAgPiArew0KICAgID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgU3RhdHVzOw0KICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVOYW1lU2l6ZTsNCiAgICA+ICsg IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBh eWxvYWRTaXplOw0KICAgID4gKyAgU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX1ZBUl9DSEVDS19W QVJJQUJMRV9QUk9QRVJUWQ0KICAgID4gKkNvbW1WYXJpYWJsZVByb3BlcnR5Ow0KICAgID4gKw0K ICAgID4gKyAgaWYgKChOYW1lID09IE5VTEwpIHx8IChOYW1lWzBdID09IDApIHx8IChHdWlkID09 IE5VTEwpKSB7DQogICAgPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQogICAg PiArICB9DQogICAgPiArDQogICAgPiArICBpZiAoVmFyaWFibGVQcm9wZXJ0eSA9PSBOVUxMKSB7 DQogICAgPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQogICAgPiArICB9DQog ICAgPiArDQogICAgPiArICBpZiAoVmFyaWFibGVQcm9wZXJ0eS0+UmV2aXNpb24gIT0NCiAgICA+ IFZBUl9DSEVDS19WQVJJQUJMRV9QUk9QRVJUWV9SRVZJU0lPTikgew0KICAgID4gKyAgICByZXR1 cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAg VmFyaWFibGVOYW1lU2l6ZSAgICAgPSBTdHJTaXplIChOYW1lKTsNCiAgICA+ICsgIENvbW1WYXJp YWJsZVByb3BlcnR5ID0gTlVMTDsNCiAgICA+ICsNCiAgICA+ICsgIC8vDQogICAgPiArICAvLyBJ ZiBWYXJpYWJsZU5hbWUgZXhjZWVkcyBTTU0gcGF5bG9hZCBsaW1pdC4gUmV0dXJuIGZhaWx1cmUN CiAgICA+ICsgIC8vDQogICAgPiArICBpZiAoVmFyaWFibGVOYW1lU2l6ZSA+IG1WYXJpYWJsZUJ1 ZmZlclBheWxvYWRTaXplIC0gT0ZGU0VUX09GDQogICAgPiAoU01NX1ZBUklBQkxFX0NPTU1VTklD QVRFX1ZBUl9DSEVDS19WQVJJQUJMRV9QUk9QRVJUWSwgTmFtZSkpDQogICAgPiB7DQogICAgPiAr ICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQogICAgPiArICB9DQogICAgPiArDQog ICAgPiArICBBY3F1aXJlTG9ja09ubHlBdEJvb3RUaW1lICgmbVZhcmlhYmxlU2VydmljZXNMb2Nr KTsNCiAgICA+ICsNCiAgICA+ICsgIC8vDQogICAgPiArICAvLyBJbml0IHRoZSBjb21tdW5pY2F0 ZSBidWZmZXIuIFRoZSBidWZmZXIgZGF0YSBzaXplIGlzOg0KICAgID4gKyAgLy8gU01NX0NPTU1V TklDQVRFX0hFQURFUl9TSVpFICsNCiAgICA+IFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9IRUFE RVJfU0laRSArIFBheWxvYWRTaXplLg0KICAgID4gKyAgLy8NCiAgICA+ICsgIFBheWxvYWRTaXpl ID0gT0ZGU0VUX09GDQogICAgPiAoU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX1ZBUl9DSEVDS19W QVJJQUJMRV9QUk9QRVJUWSwgTmFtZSkgKw0KICAgID4gVmFyaWFibGVOYW1lU2l6ZTsNCiAgICA+ ICsgIFN0YXR1cyAgICAgID0gSW5pdENvbW11bmljYXRlQnVmZmVyICgoVk9JRCAqKikmQ29tbVZh cmlhYmxlUHJvcGVydHksDQogICAgPiBQYXlsb2FkU2l6ZSwNCiAgICA+IFNNTV9WQVJJQUJMRV9G VU5DVElPTl9WQVJfQ0hFQ0tfVkFSSUFCTEVfUFJPUEVSVFlfU0VUKTsNCiAgICA+ICsgIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCiAgICA+ICsgICAgZ290byBEb25lOw0KICAgID4gKyAgfQ0K ICAgID4gKw0KICAgID4gKyAgQVNTRVJUIChDb21tVmFyaWFibGVQcm9wZXJ0eSAhPSBOVUxMKTsN CiAgICA+ICsNCiAgICA+ICsgIENvcHlHdWlkICgmQ29tbVZhcmlhYmxlUHJvcGVydHktPkd1aWQs IEd1aWQpOw0KICAgID4gKyAgQ29weU1lbSAoJkNvbW1WYXJpYWJsZVByb3BlcnR5LT5WYXJpYWJs ZVByb3BlcnR5LCBWYXJpYWJsZVByb3BlcnR5LA0KICAgID4gc2l6ZW9mICgqVmFyaWFibGVQcm9w ZXJ0eSkpOw0KICAgID4gKyAgQ29tbVZhcmlhYmxlUHJvcGVydHktPk5hbWVTaXplID0gVmFyaWFi bGVOYW1lU2l6ZTsNCiAgICA+ICsgIENvcHlNZW0gKENvbW1WYXJpYWJsZVByb3BlcnR5LT5OYW1l LCBOYW1lLCBDb21tVmFyaWFibGVQcm9wZXJ0eS0NCiAgICA+ID5OYW1lU2l6ZSk7DQogICAgPiAr DQogICAgPiArICAvLw0KICAgID4gKyAgLy8gU2VuZCBkYXRhIHRvIFNNTS4NCiAgICA+ICsgIC8v DQogICAgPiArICBTdGF0dXMgPSBTZW5kQ29tbXVuaWNhdGVCdWZmZXIgKFBheWxvYWRTaXplKTsN CiAgICA+ICsNCiAgICA+ICtEb25lOg0KICAgID4gKyAgUmVsZWFzZUxvY2tPbmx5QXRCb290VGlt ZSAoJm1WYXJpYWJsZVNlcnZpY2VzTG9jayk7DQogICAgPiArICByZXR1cm4gU3RhdHVzOw0KICAg ID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIFZhcmlhYmxlIHByb3BlcnR5IGdl dC4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbVtpbl0gIE5hbWUgICAgICAgICAgICAgIFBvaW50 ZXIgdG8gdGhlIHZhcmlhYmxlIG5hbWUuDQogICAgPiArICBAcGFyYW1baW5dICBHdWlkICAgICAg ICAgICAgICBQb2ludGVyIHRvIHRoZSB2ZW5kb3IgR1VJRC4NCiAgICA+ICsgIEBwYXJhbVtvdXRd IFZhcmlhYmxlUHJvcGVydHkgIFBvaW50ZXIgdG8gdGhlIG91dHB1dCB2YXJpYWJsZSBwcm9wZXJ0 eS4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBw cm9wZXJ0eSBvZiB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgdGhlIE5hbWUNCiAgICA+IGFuZCBHdWlk IHdhcyBnb3Qgc3VjY2Vzc2Z1bGx5Lg0KICAgID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJB TUVURVIgTmFtZSwgR3VpZCBvciBWYXJpYWJsZVByb3BlcnR5IGlzIE5VTEwsDQogICAgPiBvciBO YW1lIGlzIGFuIGVtcHR5IHN0cmluZy4NCiAgICA+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAg ICAgICAgIFRoZSBwcm9wZXJ0eSBvZiB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgdGhlIE5hbWUNCiAg ICA+IGFuZCBHdWlkIHdhcyBub3QgZm91bmQuDQogICAgPiArDQogICAgPiArKiovDQogICAgPiAr RUZJX1NUQVRVUw0KICAgID4gK0VGSUFQSQ0KICAgID4gK1ZhckNoZWNrVmFyaWFibGVQcm9wZXJ0 eUdldCAoDQogICAgPiArICBJTiBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAqTmFtZSwN CiAgICA+ICsgIElOIEVGSV9HVUlEICAgICAgICAgICAgICAgICAgICAgICpHdWlkLA0KICAgID4g KyAgT1VUIFZBUl9DSEVDS19WQVJJQUJMRV9QUk9QRVJUWSAgKlZhcmlhYmxlUHJvcGVydHkNCiAg ICA+ICsgICkNCiAgICA+ICt7DQogICAgPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQogICAgPiArICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZU5hbWVTaXpl Ow0KICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUGF5bG9hZFNpemU7DQogICAgPiArICBTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVf VkFSX0NIRUNLX1ZBUklBQkxFX1BST1BFUlRZDQogICAgPiAqQ29tbVZhcmlhYmxlUHJvcGVydHk7 DQogICAgPiArDQogICAgPiArICBpZiAoKE5hbWUgPT0gTlVMTCkgfHwgKE5hbWVbMF0gPT0gMCkg fHwgKEd1aWQgPT0gTlVMTCkpIHsNCiAgICA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFN RVRFUjsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIGlmIChWYXJpYWJsZVByb3BlcnR5 ID09IE5VTEwpIHsNCiAgICA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCiAg ICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIFZhcmlhYmxlTmFtZVNpemUgICAgID0gU3RyU2l6 ZSAoTmFtZSk7DQogICAgPiArICBDb21tVmFyaWFibGVQcm9wZXJ0eSA9IE5VTEw7DQogICAgPiAr DQogICAgPiArICAvLw0KICAgID4gKyAgLy8gSWYgVmFyaWFibGVOYW1lIGV4Y2VlZHMgU01NIHBh eWxvYWQgbGltaXQuIFJldHVybiBmYWlsdXJlDQogICAgPiArICAvLw0KICAgID4gKyAgaWYgKFZh cmlhYmxlTmFtZVNpemUgPiBtVmFyaWFibGVCdWZmZXJQYXlsb2FkU2l6ZSAtIE9GRlNFVF9PRg0K ICAgID4gKFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9WQVJfQ0hFQ0tfVkFSSUFCTEVfUFJPUEVS VFksIE5hbWUpKQ0KICAgID4gew0KICAgID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1F VEVSOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgQWNxdWlyZUxvY2tPbmx5QXRCb290 VGltZSAoJm1WYXJpYWJsZVNlcnZpY2VzTG9jayk7DQogICAgPiArDQogICAgPiArICAvLw0KICAg ID4gKyAgLy8gSW5pdCB0aGUgY29tbXVuaWNhdGUgYnVmZmVyLiBUaGUgYnVmZmVyIGRhdGEgc2l6 ZSBpczoNCiAgICA+ICsgIC8vIFNNTV9DT01NVU5JQ0FURV9IRUFERVJfU0laRSArDQogICAgPiBT TU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfSEVBREVSX1NJWkUgKyBQYXlsb2FkU2l6ZS4NCiAgICA+ ICsgIC8vDQogICAgPiArICBQYXlsb2FkU2l6ZSA9IE9GRlNFVF9PRg0KICAgID4gKFNNTV9WQVJJ QUJMRV9DT01NVU5JQ0FURV9WQVJfQ0hFQ0tfVkFSSUFCTEVfUFJPUEVSVFksIE5hbWUpICsNCiAg ICA+IFZhcmlhYmxlTmFtZVNpemU7DQogICAgPiArICBTdGF0dXMgICAgICA9IEluaXRDb21tdW5p Y2F0ZUJ1ZmZlciAoKFZPSUQgKiopJkNvbW1WYXJpYWJsZVByb3BlcnR5LA0KICAgID4gUGF5bG9h ZFNpemUsDQogICAgPiBTTU1fVkFSSUFCTEVfRlVOQ1RJT05fVkFSX0NIRUNLX1ZBUklBQkxFX1BS T1BFUlRZX0dFVCk7DQogICAgPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAgPiAr ICAgIGdvdG8gRG9uZTsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIEFTU0VSVCAoQ29t bVZhcmlhYmxlUHJvcGVydHkgIT0gTlVMTCk7DQogICAgPiArDQogICAgPiArICBDb3B5R3VpZCAo JkNvbW1WYXJpYWJsZVByb3BlcnR5LT5HdWlkLCBHdWlkKTsNCiAgICA+ICsgIENvbW1WYXJpYWJs ZVByb3BlcnR5LT5OYW1lU2l6ZSA9IFZhcmlhYmxlTmFtZVNpemU7DQogICAgPiArICBDb3B5TWVt IChDb21tVmFyaWFibGVQcm9wZXJ0eS0+TmFtZSwgTmFtZSwgQ29tbVZhcmlhYmxlUHJvcGVydHkt DQogICAgPiA+TmFtZVNpemUpOw0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIFNl bmQgZGF0YSB0byBTTU0uDQogICAgPiArICAvLw0KICAgID4gKyAgU3RhdHVzID0gU2VuZENvbW11 bmljYXRlQnVmZmVyIChQYXlsb2FkU2l6ZSk7DQogICAgPiArICBpZiAoU3RhdHVzID09IEVGSV9T VUNDRVNTKSB7DQogICAgPiArICAgIENvcHlNZW0gKFZhcmlhYmxlUHJvcGVydHksICZDb21tVmFy aWFibGVQcm9wZXJ0eS0+VmFyaWFibGVQcm9wZXJ0eSwNCiAgICA+IHNpemVvZiAoKlZhcmlhYmxl UHJvcGVydHkpKTsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICtEb25lOg0KICAgID4gKyAg UmVsZWFzZUxvY2tPbmx5QXRCb290VGltZSAoJm1WYXJpYWJsZVNlcnZpY2VzTG9jayk7DQogICAg PiArICByZXR1cm4gU3RhdHVzOw0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ ICsgIFNpZ25hbHMgU01NIHRvIHN5bmNocm9uaXplIGFueSBwZW5kaW5nIHZhcmlhYmxlIHVwZGF0 ZXMgd2l0aCB0aGUgcnVudGltZQ0KICAgID4gY2FjaGUocykuDQogICAgPiArDQogICAgPiArKiov DQogICAgPiArVk9JRA0KICAgID4gK1N5bmNSdW50aW1lQ2FjaGUgKA0KICAgID4gKyAgVk9JRA0K ICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIC8vDQogICAgPiArICAvLyBJbml0IHRoZSBj b21tdW5pY2F0ZSBidWZmZXIuIFRoZSBidWZmZXIgZGF0YSBzaXplIGlzOg0KICAgID4gKyAgLy8g U01NX0NPTU1VTklDQVRFX0hFQURFUl9TSVpFICsNCiAgICA+IFNNTV9WQVJJQUJMRV9DT01NVU5J Q0FURV9IRUFERVJfU0laRS4NCiAgICA+ICsgIC8vDQogICAgPiArICBJbml0Q29tbXVuaWNhdGVC dWZmZXIgKE5VTEwsIDAsDQogICAgPiBTTU1fVkFSSUFCTEVfRlVOQ1RJT05fU1lOQ19SVU5USU1F X0NBQ0hFKTsNCiAgICA+ICsNCiAgICA+ICsgIC8vDQogICAgPiArICAvLyBTZW5kIGRhdGEgdG8g U01NLg0KICAgID4gKyAgLy8NCiAgICA+ICsgIFNlbmRDb21tdW5pY2F0ZUJ1ZmZlciAoMCk7DQog ICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgQ2hlY2sgd2hldGhlciBhIFNN SSBtdXN0IGJlIHRyaWdnZXJlZCB0byByZXRyaWV2ZSBwZW5kaW5nIGNhY2hlIHVwZGF0ZXMuDQog ICAgPiArDQogICAgPiArICBJZiB0aGUgdmFyaWFibGUgSE9CIHdhcyBmaW5pc2hlZCBiZWluZyBm bHVzaGVkIHNpbmNlIHRoZSBsYXN0IGNoZWNrIGZvciBhDQogICAgPiBydW50aW1lIGNhY2hlIHVw ZGF0ZSwgdGhpcyBmdW5jdGlvbg0KICAgID4gKyAgd2lsbCBwcmV2ZW50IHRoZSBIT0IgY2FjaGUg ZnJvbSBiZWluZyB1c2VkIGZvciBmdXR1cmUgcnVudGltZSBjYWNoZSBoaXRzLg0KICAgID4gKw0K ICAgID4gKyoqLw0KICAgID4gK1ZPSUQNCiAgICA+ICtDaGVja0ZvclJ1bnRpbWVDYWNoZVN5bmMg KA0KICAgID4gKyAgVk9JRA0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIGlmIChtVmFy aWFibGVSdW50aW1lQ2FjaGVQZW5kaW5nVXBkYXRlKSB7DQogICAgPiArICAgIFN5bmNSdW50aW1l Q2FjaGUgKCk7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICBBU1NFUlQgKCFtVmFyaWFi bGVSdW50aW1lQ2FjaGVQZW5kaW5nVXBkYXRlKTsNCiAgICA+ICsNCiAgICA+ICsgIC8vDQogICAg PiArICAvLyBUaGUgSE9CIHZhcmlhYmxlIGRhdGEgbWF5IGhhdmUgZmluaXNoZWQgYmVpbmcgZmx1 c2hlZCBpbiB0aGUgcnVudGltZSBjYWNoZQ0KICAgID4gc3luYyB1cGRhdGUNCiAgICA+ICsgIC8v DQogICAgPiArICBpZiAobUhvYkZsdXNoQ29tcGxldGUgJiYgKG1WYXJpYWJsZVJ1bnRpbWVIb2JD YWNoZUJ1ZmZlciAhPSBOVUxMKSkgew0KICAgID4gKyAgICBpZiAoIUVmaUF0UnVudGltZSAoKSkg ew0KICAgID4gKyAgICAgIEZyZWVQYWdlcyAobVZhcmlhYmxlUnVudGltZUhvYkNhY2hlQnVmZmVy LCBFRklfU0laRV9UT19QQUdFUw0KICAgID4gKG1WYXJpYWJsZVJ1bnRpbWVIb2JDYWNoZUJ1ZmZl clNpemUpKTsNCiAgICA+ICsgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICBtVmFyaWFibGVSdW50 aW1lSG9iQ2FjaGVCdWZmZXIgPSBOVUxMOw0KICAgID4gKyAgfQ0KICAgID4gK30NCiAgICA+ICsN CiAgICA+ICsvKioNCiAgICA+ICsgIEZpbmRzIHRoZSBnaXZlbiB2YXJpYWJsZSBpbiBhIHJ1bnRp bWUgY2FjaGUgdmFyaWFibGUgc3RvcmUuDQogICAgPiArDQogICAgPiArICBDYXV0aW9uOiBUaGlz IGZ1bmN0aW9uIG1heSByZWNlaXZlIHVudHJ1c3RlZCBpbnB1dC4NCiAgICA+ICsgIFRoZSBkYXRh IHNpemUgaXMgZXh0ZXJuYWwgaW5wdXQsIHNvIHRoaXMgZnVuY3Rpb24gd2lsbCB2YWxpZGF0ZSBp dCBjYXJlZnVsbHkgdG8NCiAgICA+IGF2b2lkIGJ1ZmZlciBvdmVyZmxvdy4NCiAgICA+ICsNCiAg ICA+ICsgIEBwYXJhbVtpbl0gICAgICBWYXJpYWJsZU5hbWUgICAgICAgTmFtZSBvZiBWYXJpYWJs ZSB0byBiZSBmb3VuZC4NCiAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBWZW5kb3JHdWlkICAgICAg ICAgVmFyaWFibGUgdmVuZG9yIEdVSUQuDQogICAgPiArICBAcGFyYW1bb3V0XSAgICAgQXR0cmli dXRlcyAgICAgICAgIEF0dHJpYnV0ZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgZm91bmQuDQogICAg PiArICBAcGFyYW1baW4sIG91dF0gRGF0YVNpemUgICAgICAgICAgIFNpemUgb2YgRGF0YSBmb3Vu ZC4gSWYgc2l6ZSBpcyBsZXNzIHRoYW4gdGhlDQogICAgPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRhdGEsIHRoaXMgdmFsdWUgY29udGFpbnMgdGhlIHJlcXVpcmVkIHNp emUuDQogICAgPiArICBAcGFyYW1bb3V0XSAgICAgRGF0YSAgICAgICAgICAgICAgIERhdGEgcG9p bnRlci4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAg ICAgRm91bmQgdGhlIHNwZWNpZmllZCB2YXJpYWJsZS4NCiAgICA+ICsgIEByZXR2YWwgRUZJX0lO VkFMSURfUEFSQU1FVEVSICAgICAgSW52YWxpZCBwYXJhbWV0ZXIuDQogICAgPiArICBAcmV0dmFs IEVGSV9OT1RfRk9VTkQgICAgICAgICAgICAgIFRoZSBzcGVjaWZpZWQgdmFyaWFibGUgY291bGQg bm90IGJlIGZvdW5kLg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK0VGSV9TVEFUVVMNCiAg ICA+ICtGaW5kVmFyaWFibGVJblJ1bnRpbWVDYWNoZSAoDQogICAgPiArICBJTiAgICAgIENIQVIx NiAgICAqVmFyaWFibGVOYW1lLA0KICAgID4gKyAgSU4gICAgICBFRklfR1VJRCAgKlZlbmRvckd1 aWQsDQogICAgPiArICBPVVQgICAgIFVJTlQzMiAgICAqQXR0cmlidXRlcyBPUFRJT05BTCwNCiAg ICA+ICsgIElOIE9VVCAgVUlOVE4gICAgICpEYXRhU2l6ZSwNCiAgICA+ICsgIE9VVCAgICAgVk9J RCAgICAgICpEYXRhIE9QVElPTkFMDQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgRUZJ X1NUQVRVUyAgICAgICAgICAgICAgU3RhdHVzOw0KICAgID4gKyAgVkFSSUFCTEVfUE9JTlRFUl9U UkFDSyAgUnRQdHJUcmFjazsNCiAgICA+ICsgIFZBUklBQkxFX1NUT1JFX1RZUEUgICAgIFN0b3Jl VHlwZTsNCiAgICA+ICsgIFZBUklBQkxFX1NUT1JFX0hFQURFUiAgICpWYXJpYWJsZVN0b3JlTGlz dFtWYXJpYWJsZVN0b3JlVHlwZU1heF07DQogICAgPiArDQogICAgPiArICBTdGF0dXMgPSBFRklf Tk9UX0ZPVU5EOw0KICAgID4gKw0KICAgID4gKyAgaWYgKChWYXJpYWJsZU5hbWUgPT0gTlVMTCkg fHwgKFZlbmRvckd1aWQgPT0gTlVMTCkgfHwgKERhdGFTaXplID09IE5VTEwpKSB7DQogICAgPiAr ICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQogICAgPiArICB9DQogICAgPiArDQog ICAgPiArICBaZXJvTWVtICgmUnRQdHJUcmFjaywgc2l6ZW9mIChSdFB0clRyYWNrKSk7DQogICAg PiArDQogICAgPiArICAvLw0KICAgID4gKyAgLy8gVGhlIFVFRkkgc3BlY2lmaWNhdGlvbiByZXN0 cmljdHMgUnVudGltZSBTZXJ2aWNlcyBjYWxsZXJzIGZyb20gaW52b2tpbmcgdGhlDQogICAgPiBz YW1lIG9yIGNlcnRhaW4gb3RoZXIgUnVudGltZSBTZXJ2aWNlDQogICAgPiArICAvLyBmdW5jdGlv bnMgcHJpb3IgdG8gY29tcGxldGlvbiBhbmQgcmV0dXJuIGZyb20gYSBwcmV2aW91cyBSdW50aW1l IFNlcnZpY2UNCiAgICA+IGNhbGwuIFRoZXNlIHJlc3RyaWN0aW9ucyBwcmV2ZW50DQogICAgPiAr ICAvLyBhIEdldFZhcmlhYmxlICgpIG9yIEdldE5leHRWYXJpYWJsZSAoKSBjYWxsIGZyb20gYmVp bmcgaXNzdWVkIHVudGlsIGEgcHJpb3IgY2FsbA0KICAgID4gaGFzIHJldHVybmVkLiBUaGUgcnVu dGltZQ0KICAgID4gKyAgLy8gY2FjaGUgcmVhZCBsb2NrIHNob3VsZCBhbHdheXMgYmUgZnJlZSB3 aGVuIGVudGVyaW5nIHRoaXMgZnVuY3Rpb24uDQogICAgPiArICAvLw0KICAgID4gKyAgQVNTRVJU ICghbVZhcmlhYmxlUnVudGltZUNhY2hlUmVhZExvY2spOw0KICAgID4gKw0KICAgID4gKyAgbVZh cmlhYmxlUnVudGltZUNhY2hlUmVhZExvY2sgPSBUUlVFOw0KICAgID4gKyAgQ2hlY2tGb3JSdW50 aW1lQ2FjaGVTeW5jICgpOw0KICAgID4gKw0KICAgID4gKyAgaWYgKCFtVmFyaWFibGVSdW50aW1l Q2FjaGVQZW5kaW5nVXBkYXRlKSB7DQogICAgPiArICAgIC8vDQogICAgPiArICAgIC8vIDA6IFZv bGF0aWxlLCAxOiBIT0IsIDI6IE5vbi1Wb2xhdGlsZS4NCiAgICA+ICsgICAgLy8gVGhlIGluZGV4 IGFuZCBhdHRyaWJ1dGVzIG1hcHBpbmcgbXVzdCBiZSBrZXB0IGluIHRoaXMgb3JkZXIgYXMNCiAg ICA+IEZpbmRWYXJpYWJsZQ0KICAgID4gKyAgICAvLyBtYWtlcyB1c2Ugb2YgdGhpcyBtYXBwaW5n IHRvIGltcGxlbWVudCBzZWFyY2ggYWxnb3JpdGhtLg0KICAgID4gKyAgICAvLw0KICAgID4gKyAg ICBWYXJpYWJsZVN0b3JlTGlzdFtWYXJpYWJsZVN0b3JlVHlwZVZvbGF0aWxlXSA9DQogICAgPiBt VmFyaWFibGVSdW50aW1lVm9sYXRpbGVDYWNoZUJ1ZmZlcjsNCiAgICA+ICsgICAgVmFyaWFibGVT dG9yZUxpc3RbVmFyaWFibGVTdG9yZVR5cGVIb2JdICAgICAgPQ0KICAgID4gbVZhcmlhYmxlUnVu dGltZUhvYkNhY2hlQnVmZmVyOw0KICAgID4gKyAgICBWYXJpYWJsZVN0b3JlTGlzdFtWYXJpYWJs ZVN0b3JlVHlwZU52XSAgICAgICA9DQogICAgPiBtVmFyaWFibGVSdW50aW1lTnZDYWNoZUJ1ZmZl cjsNCiAgICA+ICsNCiAgICA+ICsgICAgZm9yIChTdG9yZVR5cGUgPSAoVkFSSUFCTEVfU1RPUkVf VFlQRSkwOyBTdG9yZVR5cGUgPA0KICAgID4gVmFyaWFibGVTdG9yZVR5cGVNYXg7IFN0b3JlVHlw ZSsrKSB7DQogICAgPiArICAgICAgaWYgKFZhcmlhYmxlU3RvcmVMaXN0W1N0b3JlVHlwZV0gPT0g TlVMTCkgew0KICAgID4gKyAgICAgICAgY29udGludWU7DQogICAgPiArICAgICAgfQ0KICAgID4g Kw0KICAgID4gKyAgICAgIFJ0UHRyVHJhY2suU3RhcnRQdHIgPSBHZXRTdGFydFBvaW50ZXIgKFZh cmlhYmxlU3RvcmVMaXN0W1N0b3JlVHlwZV0pOw0KICAgID4gKyAgICAgIFJ0UHRyVHJhY2suRW5k UHRyICAgPSBHZXRFbmRQb2ludGVyIChWYXJpYWJsZVN0b3JlTGlzdFtTdG9yZVR5cGVdKTsNCiAg ICA+ICsgICAgICBSdFB0clRyYWNrLlZvbGF0aWxlID0gKEJPT0xFQU4pKFN0b3JlVHlwZSA9PSBW YXJpYWJsZVN0b3JlVHlwZVZvbGF0aWxlKTsNCiAgICA+ICsNCiAgICA+ICsgICAgICBTdGF0dXMg PSBGaW5kVmFyaWFibGVFeCAoVmFyaWFibGVOYW1lLCBWZW5kb3JHdWlkLCBGQUxTRSwgJlJ0UHRy VHJhY2ssDQogICAgPiBtVmFyaWFibGVBdXRoRm9ybWF0KTsNCiAgICA+ICsgICAgICBpZiAoIUVG SV9FUlJPUiAoU3RhdHVzKSkgew0KICAgID4gKyAgICAgICAgYnJlYWs7DQogICAgPiArICAgICAg fQ0KICAgID4gKyAgICB9DQogICAgPiArDQogICAgPiArICAgIGlmICghRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQogICAgPiArICAgICAgLy8NCiAgICA+ICsgICAgICAvLyBHZXQgZGF0YSBzaXplDQog ICAgPiArICAgICAgLy8NCiAgICA+ICsgICAgICBpZiAoIVJ0UHRyVHJhY2suVm9sYXRpbGUpIHsN CiAgICA+ICsgICAgICAgIC8vDQogICAgPiArICAgICAgICAvLyBDdXJyZW50bHkgb25seSBub24t dm9sYXRpbGUgdmFyaWFibGUgbmVlZHMgcHJvdGVjdGlvbi4NCiAgICA+ICsgICAgICAgIC8vDQog ICAgPiArICAgICAgICBTdGF0dXMgPSBQcm90ZWN0ZWRWYXJpYWJsZUxpYkdldEJ5QnVmZmVyIChS dFB0clRyYWNrLkN1cnJQdHIsIERhdGEsDQogICAgPiAoVUlOVDMyICopRGF0YVNpemUsIG1WYXJp YWJsZUF1dGhGb3JtYXQpOw0KICAgID4gKyAgICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgICBp ZiAoUnRQdHJUcmFjay5Wb2xhdGlsZSB8fCAoU3RhdHVzID09IEVGSV9VTlNVUFBPUlRFRCkpIHsN CiAgICA+ICsgICAgICAgIFN0YXR1cyA9IEdldFZhcmlhYmxlRGF0YSAoUnRQdHJUcmFjay5DdXJy UHRyLCBEYXRhLCAoVUlOVDMyICopRGF0YVNpemUsDQogICAgPiBtVmFyaWFibGVBdXRoRm9ybWF0 KTsNCiAgICA+ICsgICAgICB9DQogICAgPiArDQogICAgPiArICAgICAgaWYgKCFFRklfRVJST1Ig KFN0YXR1cykpIHsNCiAgICA+ICsgICAgICAgIFVwZGF0ZVZhcmlhYmxlSW5mbyAoVmFyaWFibGVO YW1lLCBWZW5kb3JHdWlkLCBSdFB0clRyYWNrLlZvbGF0aWxlLA0KICAgID4gVFJVRSwgRkFMU0Us IEZBTFNFLCBGQUxTRSwgJm1WYXJpYWJsZUluZm8pOw0KICAgID4gKyAgICAgIH0NCiAgICA+ICsg ICAgfQ0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgaWYgKChTdGF0dXMgPT0gRUZJX1NV Q0NFU1MpIHx8IChTdGF0dXMgPT0gRUZJX0JVRkZFUl9UT09fU01BTEwpKSB7DQogICAgPiArICAg IGlmICgoQXR0cmlidXRlcyAhPSBOVUxMKSAmJiAoUnRQdHJUcmFjay5DdXJyUHRyICE9IE5VTEwp KSB7DQogICAgPiArICAgICAgKkF0dHJpYnV0ZXMgPSBSdFB0clRyYWNrLkN1cnJQdHItPkF0dHJp YnV0ZXM7DQogICAgPiArICAgIH0NCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIG1WYXJp YWJsZVJ1bnRpbWVDYWNoZVJlYWRMb2NrID0gRkFMU0U7DQogICAgPiArDQogICAgPiArICByZXR1 cm4gU3RhdHVzOw0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIEZpbmRz IHRoZSBnaXZlbiB2YXJpYWJsZSBpbiBhIHZhcmlhYmxlIHN0b3JlIGluIFNNTS4NCiAgICA+ICsN CiAgICA+ICsgIENhdXRpb246IFRoaXMgZnVuY3Rpb24gbWF5IHJlY2VpdmUgdW50cnVzdGVkIGlu cHV0Lg0KICAgID4gKyAgVGhlIGRhdGEgc2l6ZSBpcyBleHRlcm5hbCBpbnB1dCwgc28gdGhpcyBm dW5jdGlvbiB3aWxsIHZhbGlkYXRlIGl0IGNhcmVmdWxseSB0bw0KICAgID4gYXZvaWQgYnVmZmVy IG92ZXJmbG93Lg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtW2luXSAgICAgIFZhcmlhYmxlTmFt ZSAgICAgICBOYW1lIG9mIFZhcmlhYmxlIHRvIGJlIGZvdW5kLg0KICAgID4gKyAgQHBhcmFtW2lu XSAgICAgIFZlbmRvckd1aWQgICAgICAgICBWYXJpYWJsZSB2ZW5kb3IgR1VJRC4NCiAgICA+ICsg IEBwYXJhbVtvdXRdICAgICBBdHRyaWJ1dGVzICAgICAgICAgQXR0cmlidXRlIHZhbHVlIG9mIHRo ZSB2YXJpYWJsZSBmb3VuZC4NCiAgICA+ICsgIEBwYXJhbVtpbiwgb3V0XSBEYXRhU2l6ZSAgICAg ICAgICAgU2l6ZSBvZiBEYXRhIGZvdW5kLiBJZiBzaXplIGlzIGxlc3MgdGhhbiB0aGUNCiAgICA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgdGhpcyB2YWx1ZSBj b250YWlucyB0aGUgcmVxdWlyZWQgc2l6ZS4NCiAgICA+ICsgIEBwYXJhbVtvdXRdICAgICBEYXRh ICAgICAgICAgICAgICAgRGF0YSBwb2ludGVyLg0KICAgID4gKw0KICAgID4gKyAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgICAgICAgICAgICBGb3VuZCB0aGUgc3BlY2lmaWVkIHZhcmlhYmxlLg0K ICAgID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICAgICBJbnZhbGlkIHBhcmFt ZXRlci4NCiAgICA+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICAgICAgVGhlIHNw ZWNpZmllZCB2YXJpYWJsZSBjb3VsZCBub3QgYmUgZm91bmQuDQogICAgPiArDQogICAgPiArKiov DQogICAgPiArRUZJX1NUQVRVUw0KICAgID4gK0VGSUFQSQ0KICAgID4gK0ZpbmRWYXJpYWJsZUlu U21tICgNCiAgICA+ICsgIElOICAgICAgQ0hBUjE2ICAgICpWYXJpYWJsZU5hbWUsDQogICAgPiAr ICBJTiAgICAgIEVGSV9HVUlEICAqVmVuZG9yR3VpZCwNCiAgICA+ICsgIE9VVCAgICAgVUlOVDMy ICAgICpBdHRyaWJ1dGVzIE9QVElPTkFMLA0KICAgID4gKyAgSU4gT1VUICBVSU5UTiAgICAgKkRh dGFTaXplLA0KICAgID4gKyAgT1VUICAgICBWT0lEICAgICAgKkRhdGEgT1BUSU9OQUwNCiAgICA+ ICsgICkNCiAgICA+ICt7DQogICAgPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBTdGF0dXM7DQogICAgPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQYXlsb2FkU2l6ZTsNCiAgICA+ICsgIFNNTV9WQVJJQUJMRV9DT01NVU5J Q0FURV9BQ0NFU1NfVkFSSUFCTEUgICpTbW1WYXJpYWJsZUhlYWRlcjsNCiAgICA+ICsgIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlbXBEYXRhU2l6ZTsNCiAgICA+ ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlTmFt ZVNpemU7DQogICAgPiArDQogICAgPiArICBpZiAoKFZhcmlhYmxlTmFtZSA9PSBOVUxMKSB8fCAo VmVuZG9yR3VpZCA9PSBOVUxMKSB8fCAoRGF0YVNpemUgPT0gTlVMTCkpIHsNCiAgICA+ICsgICAg cmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ ICsgIFRlbXBEYXRhU2l6ZSAgICAgID0gKkRhdGFTaXplOw0KICAgID4gKyAgVmFyaWFibGVOYW1l U2l6ZSAgPSBTdHJTaXplIChWYXJpYWJsZU5hbWUpOw0KICAgID4gKyAgU21tVmFyaWFibGVIZWFk ZXIgPSBOVUxMOw0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIElmIFZhcmlhYmxl TmFtZSBleGNlZWRzIFNNTSBwYXlsb2FkIGxpbWl0LiBSZXR1cm4gZmFpbHVyZQ0KICAgID4gKyAg Ly8NCiAgICA+ICsgIGlmIChWYXJpYWJsZU5hbWVTaXplID4gbVZhcmlhYmxlQnVmZmVyUGF5bG9h ZFNpemUgLSBPRkZTRVRfT0YNCiAgICA+IChTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfQUNDRVNT X1ZBUklBQkxFLCBOYW1lKSkgew0KICAgID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1F VEVSOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIEluaXQg dGhlIGNvbW11bmljYXRlIGJ1ZmZlci4gVGhlIGJ1ZmZlciBkYXRhIHNpemUgaXM6DQogICAgPiAr ICAvLyBTTU1fQ09NTVVOSUNBVEVfSEVBREVSX1NJWkUgKw0KICAgID4gU01NX1ZBUklBQkxFX0NP TU1VTklDQVRFX0hFQURFUl9TSVpFICsgUGF5bG9hZFNpemUuDQogICAgPiArICAvLw0KICAgID4g KyAgaWYgKFRlbXBEYXRhU2l6ZSA+IG1WYXJpYWJsZUJ1ZmZlclBheWxvYWRTaXplIC0gT0ZGU0VU X09GDQogICAgPiAoU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0FDQ0VTU19WQVJJQUJMRSwgTmFt ZSkgLQ0KICAgID4gVmFyaWFibGVOYW1lU2l6ZSkgew0KICAgID4gKyAgICAvLw0KICAgID4gKyAg ICAvLyBJZiBvdXRwdXQgZGF0YSBidWZmZXIgZXhjZWVkIFNNTSBwYXlsb2FkIGxpbWl0LiBUcmlt IG91dHB1dCBidWZmZXIgdG8NCiAgICA+IFNNTSBwYXlsb2FkIHNpemUNCiAgICA+ICsgICAgLy8N CiAgICA+ICsgICAgVGVtcERhdGFTaXplID0gbVZhcmlhYmxlQnVmZmVyUGF5bG9hZFNpemUgLSBP RkZTRVRfT0YNCiAgICA+IChTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfQUNDRVNTX1ZBUklBQkxF LCBOYW1lKSAtDQogICAgPiBWYXJpYWJsZU5hbWVTaXplOw0KICAgID4gKyAgfQ0KICAgID4gKw0K ICAgID4gKyAgUGF5bG9hZFNpemUgPSBPRkZTRVRfT0YNCiAgICA+IChTTU1fVkFSSUFCTEVfQ09N TVVOSUNBVEVfQUNDRVNTX1ZBUklBQkxFLCBOYW1lKSArDQogICAgPiBWYXJpYWJsZU5hbWVTaXpl ICsgVGVtcERhdGFTaXplOw0KICAgID4gKw0KICAgID4gKyAgU3RhdHVzID0gSW5pdENvbW11bmlj YXRlQnVmZmVyICgoVk9JRCAqKikmU21tVmFyaWFibGVIZWFkZXIsIFBheWxvYWRTaXplLA0KICAg ID4gU01NX1ZBUklBQkxFX0ZVTkNUSU9OX0dFVF9WQVJJQUJMRSk7DQogICAgPiArICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQogICAgPiArICAgIGdvdG8gRG9uZTsNCiAgICA+ICsgIH0NCiAg ICA+ICsNCiAgICA+ICsgIEFTU0VSVCAoU21tVmFyaWFibGVIZWFkZXIgIT0gTlVMTCk7DQogICAg PiArDQogICAgPiArICBDb3B5R3VpZCAoJlNtbVZhcmlhYmxlSGVhZGVyLT5HdWlkLCBWZW5kb3JH dWlkKTsNCiAgICA+ICsgIFNtbVZhcmlhYmxlSGVhZGVyLT5EYXRhU2l6ZSA9IFRlbXBEYXRhU2l6 ZTsNCiAgICA+ICsgIFNtbVZhcmlhYmxlSGVhZGVyLT5OYW1lU2l6ZSA9IFZhcmlhYmxlTmFtZVNp emU7DQogICAgPiArICBpZiAoQXR0cmlidXRlcyA9PSBOVUxMKSB7DQogICAgPiArICAgIFNtbVZh cmlhYmxlSGVhZGVyLT5BdHRyaWJ1dGVzID0gMDsNCiAgICA+ICsgIH0gZWxzZSB7DQogICAgPiAr ICAgIFNtbVZhcmlhYmxlSGVhZGVyLT5BdHRyaWJ1dGVzID0gKkF0dHJpYnV0ZXM7DQogICAgPiAr ICB9DQogICAgPiArDQogICAgPiArICBDb3B5TWVtIChTbW1WYXJpYWJsZUhlYWRlci0+TmFtZSwg VmFyaWFibGVOYW1lLCBTbW1WYXJpYWJsZUhlYWRlci0NCiAgICA+ID5OYW1lU2l6ZSk7DQogICAg PiArDQogICAgPiArICAvLw0KICAgID4gKyAgLy8gU2VuZCBkYXRhIHRvIFNNTS4NCiAgICA+ICsg IC8vDQogICAgPiArICBTdGF0dXMgPSBTZW5kQ29tbXVuaWNhdGVCdWZmZXIgKFBheWxvYWRTaXpl KTsNCiAgICA+ICsNCiAgICA+ICsgIC8vDQogICAgPiArICAvLyBHZXQgZGF0YSBmcm9tIFNNTS4N CiAgICA+ICsgIC8vDQogICAgPiArICBpZiAoKFN0YXR1cyA9PSBFRklfU1VDQ0VTUykgfHwgKFN0 YXR1cyA9PSBFRklfQlVGRkVSX1RPT19TTUFMTCkpIHsNCiAgICA+ICsgICAgLy8NCiAgICA+ICsg ICAgLy8gU01NIENvbW1CdWZmZXIgRGF0YVNpemUgY2FuIGJlIGEgdHJpbWVkIHZhbHVlDQogICAg PiArICAgIC8vIE9ubHkgdXBkYXRlIERhdGFTaXplIHdoZW4gbmVlZGVkDQogICAgPiArICAgIC8v DQogICAgPiArICAgICpEYXRhU2l6ZSA9IFNtbVZhcmlhYmxlSGVhZGVyLT5EYXRhU2l6ZTsNCiAg ICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIGlmIChBdHRyaWJ1dGVzICE9IE5VTEwpIHsNCiAg ICA+ICsgICAgKkF0dHJpYnV0ZXMgPSBTbW1WYXJpYWJsZUhlYWRlci0+QXR0cmlidXRlczsNCiAg ICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCiAg ICA+ICsgICAgZ290byBEb25lOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgaWYgKERh dGEgIT0gTlVMTCkgew0KICAgID4gKyAgICBDb3B5TWVtIChEYXRhLCAoVUlOVDggKilTbW1WYXJp YWJsZUhlYWRlci0+TmFtZSArDQogICAgPiBTbW1WYXJpYWJsZUhlYWRlci0+TmFtZVNpemUsIFNt bVZhcmlhYmxlSGVhZGVyLT5EYXRhU2l6ZSk7DQogICAgPiArICB9IGVsc2Ugew0KICAgID4gKyAg ICBTdGF0dXMgPSBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQogICAgPiArICB9DQogICAgPiArDQog ICAgPiArRG9uZToNCiAgICA+ICsgIHJldHVybiBTdGF0dXM7DQogICAgPiArfQ0KICAgID4gKw0K ICAgID4gKy8qKg0KICAgID4gKyAgVGhpcyBjb2RlIGZpbmRzIHZhcmlhYmxlIGluIHN0b3JhZ2Ug YmxvY2tzIChWb2xhdGlsZSBvciBOb24tVm9sYXRpbGUpLg0KICAgID4gKw0KICAgID4gKyAgQ2F1 dGlvbjogVGhpcyBmdW5jdGlvbiBtYXkgcmVjZWl2ZSB1bnRydXN0ZWQgaW5wdXQuDQogICAgPiAr ICBUaGUgZGF0YSBzaXplIGlzIGV4dGVybmFsIGlucHV0LCBzbyB0aGlzIGZ1bmN0aW9uIHdpbGwg dmFsaWRhdGUgaXQgY2FyZWZ1bGx5IHRvDQogICAgPiBhdm9pZCBidWZmZXIgb3ZlcmZsb3cuDQog ICAgPiArDQogICAgPiArICBAcGFyYW1baW5dICAgICAgVmFyaWFibGVOYW1lICAgICAgIE5hbWUg b2YgVmFyaWFibGUgdG8gYmUgZm91bmQuDQogICAgPiArICBAcGFyYW1baW5dICAgICAgVmVuZG9y R3VpZCAgICAgICAgIFZhcmlhYmxlIHZlbmRvciBHVUlELg0KICAgID4gKyAgQHBhcmFtW291dF0g ICAgIEF0dHJpYnV0ZXMgICAgICAgICBBdHRyaWJ1dGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIGZv dW5kLg0KICAgID4gKyAgQHBhcmFtW2luLCBvdXRdIERhdGFTaXplICAgICAgICAgICBTaXplIG9m IERhdGEgZm91bmQuIElmIHNpemUgaXMgbGVzcyB0aGFuIHRoZQ0KICAgID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLCB0aGlzIHZhbHVlIGNvbnRhaW5zIHRoZSBy ZXF1aXJlZCBzaXplLg0KICAgID4gKyAgQHBhcmFtW291dF0gICAgIERhdGEgICAgICAgICAgICAg ICBEYXRhIHBvaW50ZXIuDQogICAgPiArDQogICAgPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BB UkFNRVRFUiAgICAgIEludmFsaWQgcGFyYW1ldGVyLg0KICAgID4gKyAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgICAgICAgICBGaW5kIHRoZSBzcGVjaWZpZWQgdmFyaWFibGUuDQogICAgPiAr ICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgICAgIE5vdCBmb3VuZC4NCiAgICA+ICsg IEByZXR2YWwgRUZJX0JVRkZFUl9UT19TTUFMTCAgICAgICAgRGF0YVNpemUgaXMgdG9vIHNtYWxs IGZvciB0aGUgcmVzdWx0Lg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK0VGSV9TVEFUVVMN CiAgICA+ICtFRklBUEkNCiAgICA+ICtSdW50aW1lU2VydmljZUdldFZhcmlhYmxlICgNCiAgICA+ ICsgIElOICAgICAgQ0hBUjE2ICAgICpWYXJpYWJsZU5hbWUsDQogICAgPiArICBJTiAgICAgIEVG SV9HVUlEICAqVmVuZG9yR3VpZCwNCiAgICA+ICsgIE9VVCAgICAgVUlOVDMyICAgICpBdHRyaWJ1 dGVzIE9QVElPTkFMLA0KICAgID4gKyAgSU4gT1VUICBVSU5UTiAgICAgKkRhdGFTaXplLA0KICAg ID4gKyAgT1VUICAgICBWT0lEICAgICAgKkRhdGENCiAgICA+ICsgICkNCiAgICA+ICt7DQogICAg PiArICBFRklfU1RBVFVTICBTdGF0dXM7DQogICAgPiArDQogICAgPiArICBpZiAoKFZhcmlhYmxl TmFtZSA9PSBOVUxMKSB8fCAoVmVuZG9yR3VpZCA9PSBOVUxMKSB8fCAoRGF0YVNpemUgPT0gTlVM TCkpIHsNCiAgICA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCiAgICA+ICsg IH0NCiAgICA+ICsNCiAgICA+ICsgIGlmIChWYXJpYWJsZU5hbWVbMF0gPT0gMCkgew0KICAgID4g KyAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsg IEFjcXVpcmVMb2NrT25seUF0Qm9vdFRpbWUgKCZtVmFyaWFibGVTZXJ2aWNlc0xvY2spOw0KICAg ID4gKyAgaWYgKEZlYXR1cmVQY2RHZXQgKFBjZEVuYWJsZVZhcmlhYmxlUnVudGltZUNhY2hlKSkg ew0KICAgID4gKyAgICBTdGF0dXMgPSBGaW5kVmFyaWFibGVJblJ1bnRpbWVDYWNoZSAoVmFyaWFi bGVOYW1lLCBWZW5kb3JHdWlkLCBBdHRyaWJ1dGVzLA0KICAgID4gRGF0YVNpemUsIERhdGEpOw0K ICAgID4gKyAgfSBlbHNlIHsNCiAgICA+ICsgICAgU3RhdHVzID0gRmluZFZhcmlhYmxlSW5TbW0g KFZhcmlhYmxlTmFtZSwgVmVuZG9yR3VpZCwgQXR0cmlidXRlcywgRGF0YVNpemUsDQogICAgPiBE YXRhKTsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIFJlbGVhc2VMb2NrT25seUF0Qm9v dFRpbWUgKCZtVmFyaWFibGVTZXJ2aWNlc0xvY2spOw0KICAgID4gKw0KICAgID4gKyAgcmV0dXJu IFN0YXR1czsNCiAgICA+ICt9DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBGaW5kcyB0 aGUgbmV4dCBhdmFpbGFibGUgdmFyaWFibGUgaW4gYSBydW50aW1lIGNhY2hlIHZhcmlhYmxlIHN0 b3JlLg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtW2luLCBvdXRdIFZhcmlhYmxlTmFtZVNpemUg ICBTaXplIG9mIHRoZSB2YXJpYWJsZSBuYW1lLg0KICAgID4gKyAgQHBhcmFtW2luLCBvdXRdIFZh cmlhYmxlTmFtZSAgICAgICBQb2ludGVyIHRvIHZhcmlhYmxlIG5hbWUuDQogICAgPiArICBAcGFy YW1baW4sIG91dF0gVmVuZG9yR3VpZCAgICAgICAgIFZhcmlhYmxlIFZlbmRvciBHdWlkLg0KICAg ID4gKw0KICAgID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICAgICBJbnZhbGlk IHBhcmFtZXRlci4NCiAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAg RmluZCB0aGUgc3BlY2lmaWVkIHZhcmlhYmxlLg0KICAgID4gKyAgQHJldHZhbCBFRklfTk9UX0ZP VU5EICAgICAgICAgICAgICBOb3QgZm91bmQuDQogICAgPiArICBAcmV0dmFsIEVGSV9CVUZGRVJf VE9fU01BTEwgICAgICAgIERhdGFTaXplIGlzIHRvbyBzbWFsbCBmb3IgdGhlIHJlc3VsdC4NCiAg ICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtFRklfU1RBVFVTDQogICAgPiArR2V0TmV4dFZhcmlh YmxlTmFtZUluUnVudGltZUNhY2hlICgNCiAgICA+ICsgIElOIE9VVCAgVUlOVE4gICAgICpWYXJp YWJsZU5hbWVTaXplLA0KICAgID4gKyAgSU4gT1VUICBDSEFSMTYgICAgKlZhcmlhYmxlTmFtZSwN CiAgICA+ICsgIElOIE9VVCAgRUZJX0dVSUQgICpWZW5kb3JHdWlkDQogICAgPiArICApDQogICAg PiArew0KICAgID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICBTdGF0dXM7DQogICAgPiArICBV SU5UTiAgICAgICAgICAgICAgICAgIFZhck5hbWVTaXplOw0KICAgID4gKyAgVkFSSUFCTEVfSEVB REVSICAgICAgICAqVmFyaWFibGVQdHI7DQogICAgPiArICBWQVJJQUJMRV9TVE9SRV9IRUFERVIg ICpWYXJpYWJsZVN0b3JlSGVhZGVyW1ZhcmlhYmxlU3RvcmVUeXBlTWF4XTsNCiAgICA+ICsNCiAg ICA+ICsgIFN0YXR1cyA9IEVGSV9OT1RfRk9VTkQ7DQogICAgPiArDQogICAgPiArICAvLw0KICAg ID4gKyAgLy8gVGhlIFVFRkkgc3BlY2lmaWNhdGlvbiByZXN0cmljdHMgUnVudGltZSBTZXJ2aWNl cyBjYWxsZXJzIGZyb20gaW52b2tpbmcgdGhlDQogICAgPiBzYW1lIG9yIGNlcnRhaW4gb3RoZXIg UnVudGltZSBTZXJ2aWNlDQogICAgPiArICAvLyBmdW5jdGlvbnMgcHJpb3IgdG8gY29tcGxldGlv biBhbmQgcmV0dXJuIGZyb20gYSBwcmV2aW91cyBSdW50aW1lIFNlcnZpY2UNCiAgICA+IGNhbGwu IFRoZXNlIHJlc3RyaWN0aW9ucyBwcmV2ZW50DQogICAgPiArICAvLyBhIEdldFZhcmlhYmxlICgp IG9yIEdldE5leHRWYXJpYWJsZSAoKSBjYWxsIGZyb20gYmVpbmcgaXNzdWVkIHVudGlsIGEgcHJp b3IgY2FsbA0KICAgID4gaGFzIHJldHVybmVkLiBUaGUgcnVudGltZQ0KICAgID4gKyAgLy8gY2Fj aGUgcmVhZCBsb2NrIHNob3VsZCBhbHdheXMgYmUgZnJlZSB3aGVuIGVudGVyaW5nIHRoaXMgZnVu Y3Rpb24uDQogICAgPiArICAvLw0KICAgID4gKyAgQVNTRVJUICghbVZhcmlhYmxlUnVudGltZUNh Y2hlUmVhZExvY2spOw0KICAgID4gKw0KICAgID4gKyAgQ2hlY2tGb3JSdW50aW1lQ2FjaGVTeW5j ICgpOw0KICAgID4gKw0KICAgID4gKyAgbVZhcmlhYmxlUnVudGltZUNhY2hlUmVhZExvY2sgPSBU UlVFOw0KICAgID4gKyAgaWYgKCFtVmFyaWFibGVSdW50aW1lQ2FjaGVQZW5kaW5nVXBkYXRlKSB7 DQogICAgPiArICAgIC8vDQogICAgPiArICAgIC8vIDA6IFZvbGF0aWxlLCAxOiBIT0IsIDI6IE5v bi1Wb2xhdGlsZS4NCiAgICA+ICsgICAgLy8gVGhlIGluZGV4IGFuZCBhdHRyaWJ1dGVzIG1hcHBp bmcgbXVzdCBiZSBrZXB0IGluIHRoaXMgb3JkZXIgYXMNCiAgICA+IEZpbmRWYXJpYWJsZQ0KICAg ID4gKyAgICAvLyBtYWtlcyB1c2Ugb2YgdGhpcyBtYXBwaW5nIHRvIGltcGxlbWVudCBzZWFyY2gg YWxnb3JpdGhtLg0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICBWYXJpYWJsZVN0b3JlSGVhZGVy W1ZhcmlhYmxlU3RvcmVUeXBlVm9sYXRpbGVdID0NCiAgICA+IG1WYXJpYWJsZVJ1bnRpbWVWb2xh dGlsZUNhY2hlQnVmZmVyOw0KICAgID4gKyAgICBWYXJpYWJsZVN0b3JlSGVhZGVyW1ZhcmlhYmxl U3RvcmVUeXBlSG9iXSAgICAgID0NCiAgICA+IG1WYXJpYWJsZVJ1bnRpbWVIb2JDYWNoZUJ1ZmZl cjsNCiAgICA+ICsgICAgVmFyaWFibGVTdG9yZUhlYWRlcltWYXJpYWJsZVN0b3JlVHlwZU52XSAg ICAgICA9DQogICAgPiBtVmFyaWFibGVSdW50aW1lTnZDYWNoZUJ1ZmZlcjsNCiAgICA+ICsNCiAg ICA+ICsgICAgU3RhdHVzID0gIFZhcmlhYmxlU2VydmljZUdldE5leHRWYXJpYWJsZUludGVybmFs ICgNCiAgICA+ICsgICAgICAgICAgICAgICAgVmFyaWFibGVOYW1lLA0KICAgID4gKyAgICAgICAg ICAgICAgICBWZW5kb3JHdWlkLA0KICAgID4gKyAgICAgICAgICAgICAgICBWYXJpYWJsZVN0b3Jl SGVhZGVyLA0KICAgID4gKyAgICAgICAgICAgICAgICAmVmFyaWFibGVQdHIsDQogICAgPiArICAg ICAgICAgICAgICAgIG1WYXJpYWJsZUF1dGhGb3JtYXQNCiAgICA+ICsgICAgICAgICAgICAgICAg KTsNCiAgICA+ICsgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCiAgICA+ICsgICAgICBW YXJOYW1lU2l6ZSA9IE5hbWVTaXplT2ZWYXJpYWJsZSAoVmFyaWFibGVQdHIsIG1WYXJpYWJsZUF1 dGhGb3JtYXQpOw0KICAgID4gKyAgICAgIEFTU0VSVCAoVmFyTmFtZVNpemUgIT0gMCk7DQogICAg PiArICAgICAgaWYgKFZhck5hbWVTaXplIDw9ICpWYXJpYWJsZU5hbWVTaXplKSB7DQogICAgPiAr ICAgICAgICBDb3B5TWVtIChWYXJpYWJsZU5hbWUsIEdldFZhcmlhYmxlTmFtZVB0ciAoVmFyaWFi bGVQdHIsDQogICAgPiBtVmFyaWFibGVBdXRoRm9ybWF0KSwgVmFyTmFtZVNpemUpOw0KICAgID4g KyAgICAgICAgQ29weU1lbSAoVmVuZG9yR3VpZCwgR2V0VmVuZG9yR3VpZFB0ciAoVmFyaWFibGVQ dHIsDQogICAgPiBtVmFyaWFibGVBdXRoRm9ybWF0KSwgc2l6ZW9mIChFRklfR1VJRCkpOw0KICAg ID4gKyAgICAgICAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQogICAgPiArICAgICAgfSBlbHNlIHsN CiAgICA+ICsgICAgICAgIFN0YXR1cyA9IEVGSV9CVUZGRVJfVE9PX1NNQUxMOw0KICAgID4gKyAg ICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgICAqVmFyaWFibGVOYW1lU2l6ZSA9IFZhck5hbWVT aXplOw0KICAgID4gKyAgICB9DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICBtVmFyaWFi bGVSdW50aW1lQ2FjaGVSZWFkTG9jayA9IEZBTFNFOw0KICAgID4gKw0KICAgID4gKyAgcmV0dXJu IFN0YXR1czsNCiAgICA+ICt9DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBGaW5kcyB0 aGUgbmV4dCBhdmFpbGFibGUgdmFyaWFibGUgaW4gYSBTTU0gdmFyaWFibGUgc3RvcmUuDQogICAg PiArDQogICAgPiArICBAcGFyYW1baW4sIG91dF0gVmFyaWFibGVOYW1lU2l6ZSAgIFNpemUgb2Yg dGhlIHZhcmlhYmxlIG5hbWUuDQogICAgPiArICBAcGFyYW1baW4sIG91dF0gVmFyaWFibGVOYW1l ICAgICAgIFBvaW50ZXIgdG8gdmFyaWFibGUgbmFtZS4NCiAgICA+ICsgIEBwYXJhbVtpbiwgb3V0 XSBWZW5kb3JHdWlkICAgICAgICAgVmFyaWFibGUgVmVuZG9yIEd1aWQuDQogICAgPiArDQogICAg PiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgICAgIEludmFsaWQgcGFyYW1ldGVy Lg0KICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICBGaW5kIHRoZSBz cGVjaWZpZWQgdmFyaWFibGUuDQogICAgPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAg ICAgICAgIE5vdCBmb3VuZC4NCiAgICA+ICsgIEByZXR2YWwgRUZJX0JVRkZFUl9UT19TTUFMTCAg ICAgICAgRGF0YVNpemUgaXMgdG9vIHNtYWxsIGZvciB0aGUgcmVzdWx0Lg0KICAgID4gKw0KICAg ID4gKyoqLw0KICAgID4gK0VGSV9TVEFUVVMNCiAgICA+ICtHZXROZXh0VmFyaWFibGVOYW1lSW5T bW0gKA0KICAgID4gKyAgSU4gT1VUICBVSU5UTiAgICAgKlZhcmlhYmxlTmFtZVNpemUsDQogICAg PiArICBJTiBPVVQgIENIQVIxNiAgICAqVmFyaWFibGVOYW1lLA0KICAgID4gKyAgSU4gT1VUICBF RklfR1VJRCAgKlZlbmRvckd1aWQNCiAgICA+ICsgICkNCiAgICA+ICt7DQogICAgPiArICBFRklf U1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KICAg ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBh eWxvYWRTaXplOw0KICAgID4gKyAgU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0dFVF9ORVhUX1ZB UklBQkxFX05BTUUNCiAgICA+ICpTbW1HZXROZXh0VmFyaWFibGVOYW1lOw0KICAgID4gKyAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dFZhcmlhYmxl TmFtZVNpemU7DQogICAgPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgSW5WYXJpYWJsZU5hbWVTaXplOw0KICAgID4gKw0KICAgID4gKyAgT3V0VmFy aWFibGVOYW1lU2l6ZSAgICA9ICpWYXJpYWJsZU5hbWVTaXplOw0KICAgID4gKyAgSW5WYXJpYWJs ZU5hbWVTaXplICAgICA9IFN0clNpemUgKFZhcmlhYmxlTmFtZSk7DQogICAgPiArICBTbW1HZXRO ZXh0VmFyaWFibGVOYW1lID0gTlVMTDsNCiAgICA+ICsNCiAgICA+ICsgIC8vDQogICAgPiArICAv LyBJZiBpbnB1dCBzdHJpbmcgZXhjZWVkcyBTTU0gcGF5bG9hZCBsaW1pdC4gUmV0dXJuIGZhaWx1 cmUNCiAgICA+ICsgIC8vDQogICAgPiArICBpZiAoSW5WYXJpYWJsZU5hbWVTaXplID4gbVZhcmlh YmxlQnVmZmVyUGF5bG9hZFNpemUgLSBPRkZTRVRfT0YNCiAgICA+IChTTU1fVkFSSUFCTEVfQ09N TVVOSUNBVEVfR0VUX05FWFRfVkFSSUFCTEVfTkFNRSwgTmFtZSkpIHsNCiAgICA+ICsgICAgcmV0 dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsg IC8vDQogICAgPiArICAvLyBJbml0IHRoZSBjb21tdW5pY2F0ZSBidWZmZXIuIFRoZSBidWZmZXIg ZGF0YSBzaXplIGlzOg0KICAgID4gKyAgLy8gU01NX0NPTU1VTklDQVRFX0hFQURFUl9TSVpFICsN CiAgICA+IFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9IRUFERVJfU0laRSArIFBheWxvYWRTaXpl Lg0KICAgID4gKyAgLy8NCiAgICA+ICsgIGlmIChPdXRWYXJpYWJsZU5hbWVTaXplID4gbVZhcmlh YmxlQnVmZmVyUGF5bG9hZFNpemUgLSBPRkZTRVRfT0YNCiAgICA+IChTTU1fVkFSSUFCTEVfQ09N TVVOSUNBVEVfR0VUX05FWFRfVkFSSUFCTEVfTkFNRSwgTmFtZSkpIHsNCiAgICA+ICsgICAgLy8N CiAgICA+ICsgICAgLy8gSWYgb3V0cHV0IGJ1ZmZlciBleGNlZWQgU01NIHBheWxvYWQgbGltaXQu IFRyaW0gb3V0cHV0IGJ1ZmZlciB0byBTTU0NCiAgICA+IHBheWxvYWQgc2l6ZQ0KICAgID4gKyAg ICAvLw0KICAgID4gKyAgICBPdXRWYXJpYWJsZU5hbWVTaXplID0gbVZhcmlhYmxlQnVmZmVyUGF5 bG9hZFNpemUgLSBPRkZTRVRfT0YNCiAgICA+IChTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfR0VU X05FWFRfVkFSSUFCTEVfTkFNRSwgTmFtZSk7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiAr ICAvLw0KICAgID4gKyAgLy8gUGF5bG9hZCBzaG91bGQgYmUgR3VpZCArIE5hbWVTaXplICsgTUFY IG9mIElucHV0ICYgT3V0cHV0IGJ1ZmZlcg0KICAgID4gKyAgLy8NCiAgICA+ICsgIFBheWxvYWRT aXplID0gT0ZGU0VUX09GDQogICAgPiAoU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0dFVF9ORVhU X1ZBUklBQkxFX05BTUUsIE5hbWUpICsgTUFYDQogICAgPiAoT3V0VmFyaWFibGVOYW1lU2l6ZSwg SW5WYXJpYWJsZU5hbWVTaXplKTsNCiAgICA+ICsNCiAgICA+ICsgIFN0YXR1cyA9IEluaXRDb21t dW5pY2F0ZUJ1ZmZlciAoKFZPSUQgKiopJlNtbUdldE5leHRWYXJpYWJsZU5hbWUsDQogICAgPiBQ YXlsb2FkU2l6ZSwgU01NX1ZBUklBQkxFX0ZVTkNUSU9OX0dFVF9ORVhUX1ZBUklBQkxFX05BTUUp Ow0KICAgID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgID4gKyAgICBnb3RvIERv bmU7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICBBU1NFUlQgKFNtbUdldE5leHRWYXJp YWJsZU5hbWUgIT0gTlVMTCk7DQogICAgPiArDQogICAgPiArICAvLw0KICAgID4gKyAgLy8gU01N IGNvbW0gYnVmZmVyLT5OYW1lU2l6ZSBpcyBidWZmZXIgc2l6ZSBmb3IgcmV0dXJuIHN0cmluZw0K ICAgID4gKyAgLy8NCiAgICA+ICsgIFNtbUdldE5leHRWYXJpYWJsZU5hbWUtPk5hbWVTaXplID0g T3V0VmFyaWFibGVOYW1lU2l6ZTsNCiAgICA+ICsNCiAgICA+ICsgIENvcHlHdWlkICgmU21tR2V0 TmV4dFZhcmlhYmxlTmFtZS0+R3VpZCwgVmVuZG9yR3VpZCk7DQogICAgPiArICAvLw0KICAgID4g KyAgLy8gQ29weSB3aG9sZSBzdHJpbmcNCiAgICA+ICsgIC8vDQogICAgPiArICBDb3B5TWVtIChT bW1HZXROZXh0VmFyaWFibGVOYW1lLT5OYW1lLCBWYXJpYWJsZU5hbWUsDQogICAgPiBJblZhcmlh YmxlTmFtZVNpemUpOw0KICAgID4gKyAgaWYgKE91dFZhcmlhYmxlTmFtZVNpemUgPiBJblZhcmlh YmxlTmFtZVNpemUpIHsNCiAgICA+ICsgICAgWmVyb01lbSAoKFVJTlQ4ICopU21tR2V0TmV4dFZh cmlhYmxlTmFtZS0+TmFtZSArDQogICAgPiBJblZhcmlhYmxlTmFtZVNpemUsIE91dFZhcmlhYmxl TmFtZVNpemUgLSBJblZhcmlhYmxlTmFtZVNpemUpOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAg ID4gKyAgLy8NCiAgICA+ICsgIC8vIFNlbmQgZGF0YSB0byBTTU0NCiAgICA+ICsgIC8vDQogICAg PiArICBTdGF0dXMgPSBTZW5kQ29tbXVuaWNhdGVCdWZmZXIgKFBheWxvYWRTaXplKTsNCiAgICA+ ICsNCiAgICA+ICsgIC8vDQogICAgPiArICAvLyBHZXQgZGF0YSBmcm9tIFNNTS4NCiAgICA+ICsg IC8vDQogICAgPiArICBpZiAoKFN0YXR1cyA9PSBFRklfU1VDQ0VTUykgfHwgKFN0YXR1cyA9PSBF RklfQlVGRkVSX1RPT19TTUFMTCkpIHsNCiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgLy8gU01N IENvbW1CdWZmZXIgTmFtZVNpemUgY2FuIGJlIGEgdHJpbWVkIHZhbHVlDQogICAgPiArICAgIC8v IE9ubHkgdXBkYXRlIFZhcmlhYmxlTmFtZVNpemUgd2hlbiBuZWVkZWQNCiAgICA+ICsgICAgLy8N CiAgICA+ICsgICAgKlZhcmlhYmxlTmFtZVNpemUgPSBTbW1HZXROZXh0VmFyaWFibGVOYW1lLT5O YW1lU2l6ZTsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCiAgICA+ICsgICAgZ290byBEb25lOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAg ID4gKyAgQ29weUd1aWQgKFZlbmRvckd1aWQsICZTbW1HZXROZXh0VmFyaWFibGVOYW1lLT5HdWlk KTsNCiAgICA+ICsgIENvcHlNZW0gKFZhcmlhYmxlTmFtZSwgU21tR2V0TmV4dFZhcmlhYmxlTmFt ZS0+TmFtZSwNCiAgICA+IFNtbUdldE5leHRWYXJpYWJsZU5hbWUtPk5hbWVTaXplKTsNCiAgICA+ ICsNCiAgICA+ICtEb25lOg0KICAgID4gKyAgcmV0dXJuIFN0YXR1czsNCiAgICA+ICt9DQogICAg PiArDQogICAgPiArLyoqDQogICAgPiArICBUaGlzIGNvZGUgRmluZHMgdGhlIE5leHQgYXZhaWxh YmxlIHZhcmlhYmxlLg0KICAgID4gKw0KICAgID4gKyAgQHBhcmFtW2luLCBvdXRdIFZhcmlhYmxl TmFtZVNpemUgICBTaXplIG9mIHRoZSB2YXJpYWJsZSBuYW1lLg0KICAgID4gKyAgQHBhcmFtW2lu LCBvdXRdIFZhcmlhYmxlTmFtZSAgICAgICBQb2ludGVyIHRvIHZhcmlhYmxlIG5hbWUuDQogICAg PiArICBAcGFyYW1baW4sIG91dF0gVmVuZG9yR3VpZCAgICAgICAgIFZhcmlhYmxlIFZlbmRvciBH dWlkLg0KICAgID4gKw0KICAgID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICAg ICBJbnZhbGlkIHBhcmFtZXRlci4NCiAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAg ICAgICAgICAgRmluZCB0aGUgc3BlY2lmaWVkIHZhcmlhYmxlLg0KICAgID4gKyAgQHJldHZhbCBF RklfTk9UX0ZPVU5EICAgICAgICAgICAgICBOb3QgZm91bmQuDQogICAgPiArICBAcmV0dmFsIEVG SV9CVUZGRVJfVE9fU01BTEwgICAgICAgIERhdGFTaXplIGlzIHRvbyBzbWFsbCBmb3IgdGhlIHJl c3VsdC4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtFRklfU1RBVFVTDQogICAgPiArRUZJ QVBJDQogICAgPiArUnVudGltZVNlcnZpY2VHZXROZXh0VmFyaWFibGVOYW1lICgNCiAgICA+ICsg IElOIE9VVCAgVUlOVE4gICAgICpWYXJpYWJsZU5hbWVTaXplLA0KICAgID4gKyAgSU4gT1VUICBD SEFSMTYgICAgKlZhcmlhYmxlTmFtZSwNCiAgICA+ICsgIElOIE9VVCAgRUZJX0dVSUQgICpWZW5k b3JHdWlkDQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVz Ow0KICAgID4gKyAgVUlOVE4gICAgICAgTWF4TGVuOw0KICAgID4gKw0KICAgID4gKyAgU3RhdHVz ID0gRUZJX05PVF9GT1VORDsNCiAgICA+ICsNCiAgICA+ICsgIGlmICgoVmFyaWFibGVOYW1lU2l6 ZSA9PSBOVUxMKSB8fCAoVmFyaWFibGVOYW1lID09IE5VTEwpIHx8IChWZW5kb3JHdWlkID09DQog ICAgPiBOVUxMKSkgew0KICAgID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0K ICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIENhbGN1bGF0ZSB0 aGUgcG9zc2libGUgbWF4aW11bSBsZW5ndGggb2YgbmFtZSBzdHJpbmcsIGluY2x1ZGluZyB0aGUg TnVsbA0KICAgID4gdGVybWluYXRvci4NCiAgICA+ICsgIC8vDQogICAgPiArICBNYXhMZW4gPSAq VmFyaWFibGVOYW1lU2l6ZSAvIHNpemVvZiAoQ0hBUjE2KTsNCiAgICA+ICsgIGlmICgoTWF4TGVu ID09IDApIHx8IChTdHJuTGVuUyAoVmFyaWFibGVOYW1lLCBNYXhMZW4pID09IE1heExlbikpIHsN CiAgICA+ICsgICAgLy8NCiAgICA+ICsgICAgLy8gTnVsbC10ZXJtaW5hdG9yIGlzIG5vdCBmb3Vu ZCBpbiB0aGUgZmlyc3QgVmFyaWFibGVOYW1lU2l6ZSBieXRlcyBvZiB0aGUNCiAgICA+IGlucHV0 IFZhcmlhYmxlTmFtZSBidWZmZXIsDQogICAgPiArICAgIC8vIGZvbGxvdyBzcGVjIHRvIHJldHVy biBFRklfSU5WQUxJRF9QQVJBTUVURVIuDQogICAgPiArICAgIC8vDQogICAgPiArICAgIHJldHVy biBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICBB Y3F1aXJlTG9ja09ubHlBdEJvb3RUaW1lICgmbVZhcmlhYmxlU2VydmljZXNMb2NrKTsNCiAgICA+ ICsgIGlmIChGZWF0dXJlUGNkR2V0IChQY2RFbmFibGVWYXJpYWJsZVJ1bnRpbWVDYWNoZSkpIHsN CiAgICA+ICsgICAgU3RhdHVzID0gR2V0TmV4dFZhcmlhYmxlTmFtZUluUnVudGltZUNhY2hlIChW YXJpYWJsZU5hbWVTaXplLA0KICAgID4gVmFyaWFibGVOYW1lLCBWZW5kb3JHdWlkKTsNCiAgICA+ ICsgIH0gZWxzZSB7DQogICAgPiArICAgIFN0YXR1cyA9IEdldE5leHRWYXJpYWJsZU5hbWVJblNt bSAoVmFyaWFibGVOYW1lU2l6ZSwgVmFyaWFibGVOYW1lLA0KICAgID4gVmVuZG9yR3VpZCk7DQog ICAgPiArICB9DQogICAgPiArDQogICAgPiArICBSZWxlYXNlTG9ja09ubHlBdEJvb3RUaW1lICgm bVZhcmlhYmxlU2VydmljZXNMb2NrKTsNCiAgICA+ICsNCiAgICA+ICsgIHJldHVybiBTdGF0dXM7 DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgVGhpcyBjb2RlIHNldHMg dmFyaWFibGUgaW4gc3RvcmFnZSBibG9ja3MgKFZvbGF0aWxlIG9yIE5vbi1Wb2xhdGlsZSkuDQog ICAgPiArDQogICAgPiArICBDYXV0aW9uOiBUaGlzIGZ1bmN0aW9uIG1heSByZWNlaXZlIHVudHJ1 c3RlZCBpbnB1dC4NCiAgICA+ICsgIFRoZSBkYXRhIHNpemUgYW5kIGRhdGEgYXJlIGV4dGVybmFs IGlucHV0LCBzbyB0aGlzIGZ1bmN0aW9uIHdpbGwgdmFsaWRhdGUgaXQNCiAgICA+IGNhcmVmdWxs eSB0byBhdm9pZCBidWZmZXIgb3ZlcmZsb3cuDQogICAgPiArDQogICAgPiArICBAcGFyYW1baW5d IFZhcmlhYmxlTmFtZSAgICAgICAgICAgICAgICAgTmFtZSBvZiBWYXJpYWJsZSB0byBiZSBmb3Vu ZC4NCiAgICA+ICsgIEBwYXJhbVtpbl0gVmVuZG9yR3VpZCAgICAgICAgICAgICAgICAgICBWYXJp YWJsZSB2ZW5kb3IgR1VJRC4NCiAgICA+ICsgIEBwYXJhbVtpbl0gQXR0cmlidXRlcyAgICAgICAg ICAgICAgICAgICBBdHRyaWJ1dGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIGZvdW5kDQogICAgPiAr ICBAcGFyYW1baW5dIERhdGFTaXplICAgICAgICAgICAgICAgICAgICAgU2l6ZSBvZiBEYXRhIGZv dW5kLiBJZiBzaXplIGlzIGxlc3MgdGhhbiB0aGUNCiAgICA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkYXRhLCB0aGlzIHZhbHVlIGNvbnRhaW5zIHRoZSByZXF1 aXJlZCBzaXplLg0KICAgID4gKyAgQHBhcmFtW2luXSBEYXRhICAgICAgICAgICAgICAgICAgICAg ICAgIERhdGEgcG9pbnRlci4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURf UEFSQU1FVEVSICAgICAgICAgICBJbnZhbGlkIHBhcmFtZXRlci4NCiAgICA+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICBTZXQgc3VjY2Vzc2Z1bGx5Lg0KICAgID4g KyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgICAgICAgICAgIFJlc291cmNlIG5vdCBl bm91Z2ggdG8gc2V0IHZhcmlhYmxlLg0KICAgID4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAg ICAgICAgICAgICAgICAgIE5vdCBmb3VuZC4NCiAgICA+ICsgIEByZXR2YWwgRUZJX1dSSVRFX1BS T1RFQ1RFRCAgICAgICAgICAgICBWYXJpYWJsZSBpcyByZWFkLW9ubHkuDQogICAgPiArDQogICAg PiArKiovDQogICAgPiArRUZJX1NUQVRVUw0KICAgID4gK0VGSUFQSQ0KICAgID4gK1J1bnRpbWVT ZXJ2aWNlU2V0VmFyaWFibGUgKA0KICAgID4gKyAgSU4gQ0hBUjE2ICAgICpWYXJpYWJsZU5hbWUs DQogICAgPiArICBJTiBFRklfR1VJRCAgKlZlbmRvckd1aWQsDQogICAgPiArICBJTiBVSU5UMzIg ICAgQXR0cmlidXRlcywNCiAgICA+ICsgIElOIFVJTlROICAgICBEYXRhU2l6ZSwNCiAgICA+ICsg IElOIFZPSUQgICAgICAqRGF0YQ0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIEVGSV9T VEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCiAgICA+ICsgIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBheWxvYWRTaXplOw0KICAg ID4gKyAgU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0FDQ0VTU19WQVJJQUJMRSAgKlNtbVZhcmlh YmxlSGVhZGVyOw0KICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVmFyaWFibGVOYW1lU2l6ZTsNCiAgICA+ICsNCiAgICA+ICsgIC8vDQogICAgPiArICAv LyBDaGVjayBpbnB1dCBwYXJhbWV0ZXJzLg0KICAgID4gKyAgLy8NCiAgICA+ICsgIGlmICgoVmFy aWFibGVOYW1lID09IE5VTEwpIHx8IChWYXJpYWJsZU5hbWVbMF0gPT0gMCkgfHwgKFZlbmRvckd1 aWQgPT0NCiAgICA+IE5VTEwpKSB7DQogICAgPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJB TUVURVI7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICBpZiAoKERhdGFTaXplICE9IDAp ICYmIChEYXRhID09IE5VTEwpKSB7DQogICAgPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJB TUVURVI7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICBWYXJpYWJsZU5hbWVTaXplICA9 IFN0clNpemUgKFZhcmlhYmxlTmFtZSk7DQogICAgPiArICBTbW1WYXJpYWJsZUhlYWRlciA9IE5V TEw7DQogICAgPiArDQogICAgPiArICAvLw0KICAgID4gKyAgLy8gSWYgVmFyaWFibGVOYW1lIG9y IERhdGFTaXplIGV4Y2VlZHMgU01NIHBheWxvYWQgbGltaXQuIFJldHVybiBmYWlsdXJlDQogICAg PiArICAvLw0KICAgID4gKyAgaWYgKChWYXJpYWJsZU5hbWVTaXplID4gbVZhcmlhYmxlQnVmZmVy UGF5bG9hZFNpemUgLSBPRkZTRVRfT0YNCiAgICA+IChTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVf QUNDRVNTX1ZBUklBQkxFLCBOYW1lKSkgfHwNCiAgICA+ICsgICAgICAoRGF0YVNpemUgPiBtVmFy aWFibGVCdWZmZXJQYXlsb2FkU2l6ZSAtIE9GRlNFVF9PRg0KICAgID4gKFNNTV9WQVJJQUJMRV9D T01NVU5JQ0FURV9BQ0NFU1NfVkFSSUFCTEUsIE5hbWUpIC0NCiAgICA+IFZhcmlhYmxlTmFtZVNp emUpKQ0KICAgID4gKyAgew0KICAgID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVS Ow0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgQWNxdWlyZUxvY2tPbmx5QXRCb290VGlt ZSAoJm1WYXJpYWJsZVNlcnZpY2VzTG9jayk7DQogICAgPiArDQogICAgPiArICAvLw0KICAgID4g KyAgLy8gSW5pdCB0aGUgY29tbXVuaWNhdGUgYnVmZmVyLiBUaGUgYnVmZmVyIGRhdGEgc2l6ZSBp czoNCiAgICA+ICsgIC8vIFNNTV9DT01NVU5JQ0FURV9IRUFERVJfU0laRSArDQogICAgPiBTTU1f VkFSSUFCTEVfQ09NTVVOSUNBVEVfSEVBREVSX1NJWkUgKyBQYXlsb2FkU2l6ZS4NCiAgICA+ICsg IC8vDQogICAgPiArICBQYXlsb2FkU2l6ZSA9IE9GRlNFVF9PRg0KICAgID4gKFNNTV9WQVJJQUJM RV9DT01NVU5JQ0FURV9BQ0NFU1NfVkFSSUFCTEUsIE5hbWUpICsNCiAgICA+IFZhcmlhYmxlTmFt ZVNpemUgKyBEYXRhU2l6ZTsNCiAgICA+ICsgIFN0YXR1cyAgICAgID0gSW5pdENvbW11bmljYXRl QnVmZmVyICgoVk9JRCAqKikmU21tVmFyaWFibGVIZWFkZXIsDQogICAgPiBQYXlsb2FkU2l6ZSwg U01NX1ZBUklBQkxFX0ZVTkNUSU9OX1NFVF9WQVJJQUJMRSk7DQogICAgPiArICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQogICAgPiArICAgIGdvdG8gRG9uZTsNCiAgICA+ICsgIH0NCiAgICA+ ICsNCiAgICA+ICsgIEFTU0VSVCAoU21tVmFyaWFibGVIZWFkZXIgIT0gTlVMTCk7DQogICAgPiAr DQogICAgPiArICBDb3B5R3VpZCAoKEVGSV9HVUlEICopJlNtbVZhcmlhYmxlSGVhZGVyLT5HdWlk LCBWZW5kb3JHdWlkKTsNCiAgICA+ICsgIFNtbVZhcmlhYmxlSGVhZGVyLT5EYXRhU2l6ZSAgID0g RGF0YVNpemU7DQogICAgPiArICBTbW1WYXJpYWJsZUhlYWRlci0+TmFtZVNpemUgICA9IFZhcmlh YmxlTmFtZVNpemU7DQogICAgPiArICBTbW1WYXJpYWJsZUhlYWRlci0+QXR0cmlidXRlcyA9IEF0 dHJpYnV0ZXM7DQogICAgPiArICBDb3B5TWVtIChTbW1WYXJpYWJsZUhlYWRlci0+TmFtZSwgVmFy aWFibGVOYW1lLCBTbW1WYXJpYWJsZUhlYWRlci0NCiAgICA+ID5OYW1lU2l6ZSk7DQogICAgPiAr ICBDb3B5TWVtICgoVUlOVDggKilTbW1WYXJpYWJsZUhlYWRlci0+TmFtZSArIFNtbVZhcmlhYmxl SGVhZGVyLQ0KICAgID4gPk5hbWVTaXplLCBEYXRhLCBEYXRhU2l6ZSk7DQogICAgPiArDQogICAg PiArICAvLw0KICAgID4gKyAgLy8gU2VuZCBkYXRhIHRvIFNNTS4NCiAgICA+ICsgIC8vDQogICAg PiArICBTdGF0dXMgPSBTZW5kQ29tbXVuaWNhdGVCdWZmZXIgKFBheWxvYWRTaXplKTsNCiAgICA+ ICsNCiAgICA+ICtEb25lOg0KICAgID4gKyAgUmVsZWFzZUxvY2tPbmx5QXRCb290VGltZSAoJm1W YXJpYWJsZVNlcnZpY2VzTG9jayk7DQogICAgPiArDQogICAgPiArICBpZiAoIUVmaUF0UnVudGlt ZSAoKSkgew0KICAgID4gKyAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgID4gKyAg ICAgIFNlY3VyZUJvb3RIb29rICgNCiAgICA+ICsgICAgICAgIFZhcmlhYmxlTmFtZSwNCiAgICA+ ICsgICAgICAgIFZlbmRvckd1aWQNCiAgICA+ICsgICAgICAgICk7DQogICAgPiArICAgIH0NCiAg ICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIHJldHVybiBTdGF0dXM7DQogICAgPiArfQ0KICAg ID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgVGhpcyBjb2RlIHJldHVybnMgaW5mb3JtYXRpb24g YWJvdXQgdGhlIEVGSSB2YXJpYWJsZXMuDQogICAgPiArDQogICAgPiArICBAcGFyYW1baW5dICBB dHRyaWJ1dGVzICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZXMgYml0bWFzayB0byBzcGVjaWZ5 IHRoZSB0eXBlIG9mDQogICAgPiB2YXJpYWJsZXMNCiAgICA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgb24gd2hpY2ggdG8gcmV0dXJuIGluZm9ybWF0aW9uLg0K ICAgID4gKyAgQHBhcmFtW291dF0gTWF4aW11bVZhcmlhYmxlU3RvcmFnZVNpemUgICBQb2ludGVy IHRvIHRoZSBtYXhpbXVtIHNpemUgb2YNCiAgICA+IHRoZSBzdG9yYWdlIHNwYWNlIGF2YWlsYWJs ZQ0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig dGhlIEVGSSB2YXJpYWJsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBhdHRyaWJ1dGVzDQogICAgPiBz cGVjaWZpZWQuDQogICAgPiArICBAcGFyYW1bb3V0XSBSZW1haW5pbmdWYXJpYWJsZVN0b3JhZ2VT aXplIFBvaW50ZXIgdG8gdGhlIHJlbWFpbmluZyBzaXplIG9mDQogICAgPiB0aGUgc3RvcmFnZSBz cGFjZSBhdmFpbGFibGUNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZm9yIEVGSSB2YXJpYWJsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBhdHRyaWJ1dGVz IHNwZWNpZmllZC4NCiAgICA+ICsgIEBwYXJhbVtvdXRdIE1heGltdW1WYXJpYWJsZVNpemUgICAg ICAgICAgUG9pbnRlciB0byB0aGUgbWF4aW11bSBzaXplIG9mIGFuDQogICAgPiBpbmRpdmlkdWFs IEVGSSB2YXJpYWJsZXMNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBhdHRyaWJ1dGVzIHNwZWNpZmllZC4NCiAgICA+ ICsNCiAgICA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgICAgICAgICAgQW4g aW52YWxpZCBjb21iaW5hdGlvbiBvZiBhdHRyaWJ1dGUNCiAgICA+IGJpdHMgd2FzIHN1cHBsaWVk Lg0KICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgICBRdWVy eSBzdWNjZXNzZnVsbHkuDQogICAgPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAg ICAgICAgICAgIFRoZSBhdHRyaWJ1dGUgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzDQogICAgPiBw bGF0Zm9ybS4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtFRklfU1RBVFVTDQogICAgPiAr RUZJQVBJDQogICAgPiArUnVudGltZVNlcnZpY2VRdWVyeVZhcmlhYmxlSW5mbyAoDQogICAgPiAr ICBJTiAgVUlOVDMyICBBdHRyaWJ1dGVzLA0KICAgID4gKyAgT1VUIFVJTlQ2NCAgKk1heGltdW1W YXJpYWJsZVN0b3JhZ2VTaXplLA0KICAgID4gKyAgT1VUIFVJTlQ2NCAgKlJlbWFpbmluZ1Zhcmlh YmxlU3RvcmFnZVNpemUsDQogICAgPiArICBPVVQgVUlOVDY0ICAqTWF4aW11bVZhcmlhYmxlU2l6 ZQ0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQogICAgPiArICBVSU5UTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGF5bG9hZFNpemU7DQogICAgPiArICBTTU1f VkFSSUFCTEVfQ09NTVVOSUNBVEVfUVVFUllfVkFSSUFCTEVfSU5GTw0KICAgID4gKlNtbVF1ZXJ5 VmFyaWFibGVJbmZvOw0KICAgID4gKw0KICAgID4gKyAgU21tUXVlcnlWYXJpYWJsZUluZm8gPSBO VUxMOw0KICAgID4gKw0KICAgID4gKyAgaWYgKChNYXhpbXVtVmFyaWFibGVTdG9yYWdlU2l6ZSA9 PSBOVUxMKSB8fCAoUmVtYWluaW5nVmFyaWFibGVTdG9yYWdlU2l6ZQ0KICAgID4gPT0gTlVMTCkg fHwgKE1heGltdW1WYXJpYWJsZVNpemUgPT0gTlVMTCkgfHwgKEF0dHJpYnV0ZXMgPT0gMCkpIHsN CiAgICA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCiAgICA+ICsgIH0NCiAg ICA+ICsNCiAgICA+ICsgIEFjcXVpcmVMb2NrT25seUF0Qm9vdFRpbWUgKCZtVmFyaWFibGVTZXJ2 aWNlc0xvY2spOw0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIEluaXQgdGhlIGNv bW11bmljYXRlIGJ1ZmZlci4gVGhlIGJ1ZmZlciBkYXRhIHNpemUgaXM6DQogICAgPiArICAvLyBT TU1fQ09NTVVOSUNBVEVfSEVBREVSX1NJWkUgKw0KICAgID4gU01NX1ZBUklBQkxFX0NPTU1VTklD QVRFX0hFQURFUl9TSVpFICsgUGF5bG9hZFNpemU7DQogICAgPiArICAvLw0KICAgID4gKyAgUGF5 bG9hZFNpemUgPSBzaXplb2YNCiAgICA+IChTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfUVVFUllf VkFSSUFCTEVfSU5GTyk7DQogICAgPiArICBTdGF0dXMgICAgICA9IEluaXRDb21tdW5pY2F0ZUJ1 ZmZlciAoKFZPSUQgKiopJlNtbVF1ZXJ5VmFyaWFibGVJbmZvLA0KICAgID4gUGF5bG9hZFNpemUs IFNNTV9WQVJJQUJMRV9GVU5DVElPTl9RVUVSWV9WQVJJQUJMRV9JTkZPKTsNCiAgICA+ICsgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCiAgICA+ICsgICAgZ290byBEb25lOw0KICAgID4gKyAg fQ0KICAgID4gKw0KICAgID4gKyAgQVNTRVJUIChTbW1RdWVyeVZhcmlhYmxlSW5mbyAhPSBOVUxM KTsNCiAgICA+ICsNCiAgICA+ICsgIFNtbVF1ZXJ5VmFyaWFibGVJbmZvLT5BdHRyaWJ1dGVzID0g QXR0cmlidXRlczsNCiAgICA+ICsNCiAgICA+ICsgIC8vDQogICAgPiArICAvLyBTZW5kIGRhdGEg dG8gU01NLg0KICAgID4gKyAgLy8NCiAgICA+ICsgIFN0YXR1cyA9IFNlbmRDb21tdW5pY2F0ZUJ1 ZmZlciAoUGF5bG9hZFNpemUpOw0KICAgID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K ICAgID4gKyAgICBnb3RvIERvbmU7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICAvLw0K ICAgID4gKyAgLy8gR2V0IGRhdGEgZnJvbSBTTU0uDQogICAgPiArICAvLw0KICAgID4gKyAgKk1h eGltdW1WYXJpYWJsZVNpemUgICAgICAgICAgPSBTbW1RdWVyeVZhcmlhYmxlSW5mby0+TWF4aW11 bVZhcmlhYmxlU2l6ZTsNCiAgICA+ICsgICpNYXhpbXVtVmFyaWFibGVTdG9yYWdlU2l6ZSAgID0g U21tUXVlcnlWYXJpYWJsZUluZm8tDQogICAgPiA+TWF4aW11bVZhcmlhYmxlU3RvcmFnZVNpemU7 DQogICAgPiArICAqUmVtYWluaW5nVmFyaWFibGVTdG9yYWdlU2l6ZSA9IFNtbVF1ZXJ5VmFyaWFi bGVJbmZvLQ0KICAgID4gPlJlbWFpbmluZ1ZhcmlhYmxlU3RvcmFnZVNpemU7DQogICAgPiArDQog ICAgPiArRG9uZToNCiAgICA+ICsgIFJlbGVhc2VMb2NrT25seUF0Qm9vdFRpbWUgKCZtVmFyaWFi bGVTZXJ2aWNlc0xvY2spOw0KICAgID4gKyAgcmV0dXJuIFN0YXR1czsNCiAgICA+ICt9DQogICAg PiArDQogICAgPiArLyoqDQogICAgPiArICBFeGl0IEJvb3QgU2VydmljZXMgRXZlbnQgbm90aWZp Y2F0aW9uIGhhbmRsZXIuDQogICAgPiArDQogICAgPiArICBOb3RpZnkgU01NIHZhcmlhYmxlIGRy aXZlciBhYm91dCB0aGUgZXZlbnQuDQogICAgPiArDQogICAgPiArICBAcGFyYW1baW5dICBFdmVu dCAgICAgRXZlbnQgd2hvc2Ugbm90aWZpY2F0aW9uIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQu DQogICAgPiArICBAcGFyYW1baW5dICBDb250ZXh0ICAgUG9pbnRlciB0byB0aGUgbm90aWZpY2F0 aW9uIGZ1bmN0aW9uJ3MgY29udGV4dC4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtWT0lE DQogICAgPiArRUZJQVBJDQogICAgPiArT25FeGl0Qm9vdFNlcnZpY2VzICgNCiAgICA+ICsgIElO ICAgICAgRUZJX0VWRU5UICBFdmVudCwNCiAgICA+ICsgIElOICAgICAgVk9JRCAgICAgICAqQ29u dGV4dA0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIC8vDQogICAgPiArICAvLyBJbml0 IHRoZSBjb21tdW5pY2F0ZSBidWZmZXIuIFRoZSBidWZmZXIgZGF0YSBzaXplIGlzOg0KICAgID4g KyAgLy8gU01NX0NPTU1VTklDQVRFX0hFQURFUl9TSVpFICsNCiAgICA+IFNNTV9WQVJJQUJMRV9D T01NVU5JQ0FURV9IRUFERVJfU0laRS4NCiAgICA+ICsgIC8vDQogICAgPiArICBJbml0Q29tbXVu aWNhdGVCdWZmZXIgKE5VTEwsIDAsDQogICAgPiBTTU1fVkFSSUFCTEVfRlVOQ1RJT05fRVhJVF9C T09UX1NFUlZJQ0UpOw0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIFNlbmQgZGF0 YSB0byBTTU0uDQogICAgPiArICAvLw0KICAgID4gKyAgU2VuZENvbW11bmljYXRlQnVmZmVyICgw KTsNCiAgICA+ICt9DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBPbiBSZWFkeSBUbyBC b290IFNlcnZpY2VzIEV2ZW50IG5vdGlmaWNhdGlvbiBoYW5kbGVyLg0KICAgID4gKw0KICAgID4g KyAgTm90aWZ5IFNNTSB2YXJpYWJsZSBkcml2ZXIgYWJvdXQgdGhlIGV2ZW50Lg0KICAgID4gKw0K ICAgID4gKyAgQHBhcmFtW2luXSAgRXZlbnQgICAgIEV2ZW50IHdob3NlIG5vdGlmaWNhdGlvbiBm dW5jdGlvbiBpcyBiZWluZyBpbnZva2VkDQogICAgPiArICBAcGFyYW1baW5dICBDb250ZXh0ICAg UG9pbnRlciB0byB0aGUgbm90aWZpY2F0aW9uIGZ1bmN0aW9uJ3MgY29udGV4dA0KICAgID4gKw0K ICAgID4gKyoqLw0KICAgID4gK1ZPSUQNCiAgICA+ICtFRklBUEkNCiAgICA+ICtPblJlYWR5VG9C b290ICgNCiAgICA+ICsgIElOICAgICAgRUZJX0VWRU5UICBFdmVudCwNCiAgICA+ICsgIElOICAg ICAgVk9JRCAgICAgICAqQ29udGV4dA0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIC8v DQogICAgPiArICAvLyBJbml0IHRoZSBjb21tdW5pY2F0ZSBidWZmZXIuIFRoZSBidWZmZXIgZGF0 YSBzaXplIGlzOg0KICAgID4gKyAgLy8gU01NX0NPTU1VTklDQVRFX0hFQURFUl9TSVpFICsNCiAg ICA+IFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9IRUFERVJfU0laRS4NCiAgICA+ICsgIC8vDQog ICAgPiArICBJbml0Q29tbXVuaWNhdGVCdWZmZXIgKE5VTEwsIDAsDQogICAgPiBTTU1fVkFSSUFC TEVfRlVOQ1RJT05fUkVBRFlfVE9fQk9PVCk7DQogICAgPiArDQogICAgPiArICAvLw0KICAgID4g KyAgLy8gU2VuZCBkYXRhIHRvIFNNTS4NCiAgICA+ICsgIC8vDQogICAgPiArICBTZW5kQ29tbXVu aWNhdGVCdWZmZXIgKDApOw0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIEluc3Rh bGwgdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uIHRhYmxlIGZvciB2YXJpYWJsZSBpbmZvIGRhdGEg Y2FwdHVyZWQNCiAgICA+ICsgIC8vDQogICAgPiArICBpZiAoRmVhdHVyZVBjZEdldCAoUGNkRW5h YmxlVmFyaWFibGVSdW50aW1lQ2FjaGUpICYmIEZlYXR1cmVQY2RHZXQNCiAgICA+IChQY2RWYXJp YWJsZUNvbGxlY3RTdGF0aXN0aWNzKSkgew0KICAgID4gKyAgICBpZiAobVZhcmlhYmxlQXV0aEZv cm1hdCkgew0KICAgID4gKyAgICAgIGdCUy0+SW5zdGFsbENvbmZpZ3VyYXRpb25UYWJsZSAoJmdF ZmlBdXRoZW50aWNhdGVkVmFyaWFibGVHdWlkLA0KICAgID4gbVZhcmlhYmxlSW5mbyk7DQogICAg PiArICAgIH0gZWxzZSB7DQogICAgPiArICAgICAgZ0JTLT5JbnN0YWxsQ29uZmlndXJhdGlvblRh YmxlICgmZ0VmaVZhcmlhYmxlR3VpZCwgbVZhcmlhYmxlSW5mbyk7DQogICAgPiArICAgIH0NCiAg ICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIGdCUy0+Q2xvc2VFdmVudCAoRXZlbnQpOw0KICAg ID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIE5vdGlmaWNhdGlvbiBmdW5jdGlv biBvZiBFVlRfU0lHTkFMX1ZJUlRVQUxfQUREUkVTU19DSEFOR0UuDQogICAgPiArDQogICAgPiAr ICBUaGlzIGlzIGEgbm90aWZpY2F0aW9uIGZ1bmN0aW9uIHJlZ2lzdGVyZWQgb24NCiAgICA+IEVW VF9TSUdOQUxfVklSVFVBTF9BRERSRVNTX0NIQU5HRSBldmVudC4NCiAgICA+ICsgIEl0IGNvbnZl cnMgcG9pbnRlciB0byBuZXcgdmlydHVhbCBhZGRyZXNzLg0KICAgID4gKw0KICAgID4gKyAgQHBh cmFtW2luXSAgRXZlbnQgICAgICAgIEV2ZW50IHdob3NlIG5vdGlmaWNhdGlvbiBmdW5jdGlvbiBp cyBiZWluZyBpbnZva2VkLg0KICAgID4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAgICAgIFBvaW50 ZXIgdG8gdGhlIG5vdGlmaWNhdGlvbiBmdW5jdGlvbidzIGNvbnRleHQuDQogICAgPiArDQogICAg PiArKiovDQogICAgPiArVk9JRA0KICAgID4gK0VGSUFQSQ0KICAgID4gK1ZhcmlhYmxlQWRkcmVz c0NoYW5nZUV2ZW50ICgNCiAgICA+ICsgIElOIEVGSV9FVkVOVCAgRXZlbnQsDQogICAgPiArICBJ TiBWT0lEICAgICAgICpDb250ZXh0DQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgRWZp Q29udmVydFBvaW50ZXIgKDB4MCwgKFZPSUQgKiopJm1WYXJpYWJsZUJ1ZmZlcik7DQogICAgPiAr ICBFZmlDb252ZXJ0UG9pbnRlciAoMHgwLCAoVk9JRCAqKikmbU1tQ29tbXVuaWNhdGlvbjIpOw0K ICAgID4gKyAgRWZpQ29udmVydFBvaW50ZXIgKEVGSV9PUFRJT05BTF9QVFIsIChWT0lEDQogICAg PiAqKikmbVZhcmlhYmxlUnVudGltZUhvYkNhY2hlQnVmZmVyKTsNCiAgICA+ICsgIEVmaUNvbnZl cnRQb2ludGVyIChFRklfT1BUSU9OQUxfUFRSLCAoVk9JRA0KICAgID4gKiopJm1WYXJpYWJsZVJ1 bnRpbWVOdkNhY2hlQnVmZmVyKTsNCiAgICA+ICsgIEVmaUNvbnZlcnRQb2ludGVyIChFRklfT1BU SU9OQUxfUFRSLCAoVk9JRA0KICAgID4gKiopJm1WYXJpYWJsZVJ1bnRpbWVWb2xhdGlsZUNhY2hl QnVmZmVyKTsNCiAgICA+ICt9DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBUaGlzIGNv ZGUgZ2V0cyB2YXJpYWJsZSBwYXlsb2FkIHNpemUuDQogICAgPiArDQogICAgPiArICBAcGFyYW1b b3V0XSBWYXJpYWJsZVBheWxvYWRTaXplICAgT3V0cHV0IHBvaW50ZXIgdG8gdmFyaWFibGUgcGF5 bG9hZCBzaXplLg0KICAgID4gKw0KICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg ICAgICAgIEdldCBzdWNjZXNzZnVsbHkuDQogICAgPiArICBAcmV0dmFsIE90aGVycyAgICAgICAg ICAgICAgICAgICAgR2V0IHVuc3VjY2Vzc2Z1bGx5Lg0KICAgID4gKw0KICAgID4gKyoqLw0KICAg ID4gK0VGSV9TVEFUVVMNCiAgICA+ICtFRklBUEkNCiAgICA+ICtHZXRWYXJpYWJsZVBheWxvYWRT aXplICgNCiAgICA+ICsgIE9VVCBVSU5UTiAgKlZhcmlhYmxlUGF5bG9hZFNpemUNCiAgICA+ICsg ICkNCiAgICA+ICt7DQogICAgPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgU3RhdHVzOw0KICAgID4gKyAgU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0dFVF9Q QVlMT0FEX1NJWkUgICpTbW1HZXRQYXlsb2FkU2l6ZTsNCiAgICA+ICsgIEVGSV9NTV9DT01NVU5J Q0FURV9IRUFERVIgICAgICAgICAgICAgICAgICAqU21tQ29tbXVuaWNhdGVIZWFkZXI7DQogICAg PiArICBTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfSEVBREVSDQogICAgPiAqU21tVmFyaWFibGVG dW5jdGlvbkhlYWRlcjsNCiAgICA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBDb21tU2l6ZTsNCiAgICA+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqQ29tbUJ1ZmZlcjsNCiAgICA+ICsNCiAgICA+ICsgIFNtbUdldFBh eWxvYWRTaXplID0gTlVMTDsNCiAgICA+ICsgIENvbW1CdWZmZXIgICAgICAgID0gTlVMTDsNCiAg ICA+ICsNCiAgICA+ICsgIGlmIChWYXJpYWJsZVBheWxvYWRTaXplID09IE5VTEwpIHsNCiAgICA+ ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCiAgICA+ICsgIH0NCiAgICA+ICsN CiAgICA+ICsgIEFjcXVpcmVMb2NrT25seUF0Qm9vdFRpbWUgKCZtVmFyaWFibGVTZXJ2aWNlc0xv Y2spOw0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIEluaXQgdGhlIGNvbW11bmlj YXRlIGJ1ZmZlci4gVGhlIGJ1ZmZlciBkYXRhIHNpemUgaXM6DQogICAgPiArICAvLyBTTU1fQ09N TVVOSUNBVEVfSEVBREVSX1NJWkUgKw0KICAgID4gU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0hF QURFUl9TSVpFICsgc2l6ZW9mDQogICAgPiAoU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0dFVF9Q QVlMT0FEX1NJWkUpOw0KICAgID4gKyAgLy8NCiAgICA+ICsgIENvbW1TaXplICAgPSBTTU1fQ09N TVVOSUNBVEVfSEVBREVSX1NJWkUgKw0KICAgID4gU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0hF QURFUl9TSVpFICsgc2l6ZW9mDQogICAgPiAoU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0dFVF9Q QVlMT0FEX1NJWkUpOw0KICAgID4gKyAgQ29tbUJ1ZmZlciA9IEFsbG9jYXRlWmVyb1Bvb2wgKENv bW1TaXplKTsNCiAgICA+ICsgIGlmIChDb21tQnVmZmVyID09IE5VTEwpIHsNCiAgICA+ICsgICAg U3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQogICAgPiArICAgIGdvdG8gRG9uZTsNCiAg ICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIFNtbUNvbW11bmljYXRlSGVhZGVyID0gKEVGSV9N TV9DT01NVU5JQ0FURV9IRUFERVINCiAgICA+ICopQ29tbUJ1ZmZlcjsNCiAgICA+ICsgIENvcHlH dWlkICgmU21tQ29tbXVuaWNhdGVIZWFkZXItPkhlYWRlckd1aWQsDQogICAgPiAmZ0VmaVNtbVZh cmlhYmxlUHJvdG9jb2xHdWlkKTsNCiAgICA+ICsgIFNtbUNvbW11bmljYXRlSGVhZGVyLT5NZXNz YWdlTGVuZ3RoID0NCiAgICA+IFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9IRUFERVJfU0laRSAr IHNpemVvZg0KICAgID4gKFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9HRVRfUEFZTE9BRF9TSVpF KTsNCiAgICA+ICsNCiAgICA+ICsgIFNtbVZhcmlhYmxlRnVuY3Rpb25IZWFkZXIgICAgICAgICAg ID0NCiAgICA+IChTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfSEVBREVSICopU21tQ29tbXVuaWNh dGVIZWFkZXItPkRhdGE7DQogICAgPiArICBTbW1WYXJpYWJsZUZ1bmN0aW9uSGVhZGVyLT5GdW5j dGlvbiA9DQogICAgPiBTTU1fVkFSSUFCTEVfRlVOQ1RJT05fR0VUX1BBWUxPQURfU0laRTsNCiAg ICA+ICsgIFNtbUdldFBheWxvYWRTaXplICAgICAgICAgICAgICAgICAgID0NCiAgICA+IChTTU1f VkFSSUFCTEVfQ09NTVVOSUNBVEVfR0VUX1BBWUxPQURfU0laRQ0KICAgID4gKilTbW1WYXJpYWJs ZUZ1bmN0aW9uSGVhZGVyLT5EYXRhOw0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8v IFNlbmQgZGF0YSB0byBTTU0uDQogICAgPiArICAvLw0KICAgID4gKyAgU3RhdHVzID0gbU1tQ29t bXVuaWNhdGlvbjItPkNvbW11bmljYXRlIChtTW1Db21tdW5pY2F0aW9uMiwNCiAgICA+IENvbW1C dWZmZXIsIENvbW1CdWZmZXIsICZDb21tU2l6ZSk7DQogICAgPiArICBBU1NFUlRfRUZJX0VSUk9S IChTdGF0dXMpOw0KICAgID4gKw0KICAgID4gKyAgU3RhdHVzID0gU21tVmFyaWFibGVGdW5jdGlv bkhlYWRlci0+UmV0dXJuU3RhdHVzOw0KICAgID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KICAgID4gKyAgICBnb3RvIERvbmU7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICAv Lw0KICAgID4gKyAgLy8gR2V0IGRhdGEgZnJvbSBTTU0uDQogICAgPiArICAvLw0KICAgID4gKyAg KlZhcmlhYmxlUGF5bG9hZFNpemUgPSBTbW1HZXRQYXlsb2FkU2l6ZS0+VmFyaWFibGVQYXlsb2Fk U2l6ZTsNCiAgICA+ICsNCiAgICA+ICtEb25lOg0KICAgID4gKyAgaWYgKENvbW1CdWZmZXIgIT0g TlVMTCkgew0KICAgID4gKyAgICBGcmVlUG9vbCAoQ29tbUJ1ZmZlcik7DQogICAgPiArICB9DQog ICAgPiArDQogICAgPiArICBSZWxlYXNlTG9ja09ubHlBdEJvb3RUaW1lICgmbVZhcmlhYmxlU2Vy dmljZXNMb2NrKTsNCiAgICA+ICsgIHJldHVybiBTdGF0dXM7DQogICAgPiArfQ0KICAgID4gKw0K ICAgID4gKy8qKg0KICAgID4gKyAgVGhpcyBjb2RlIGdldHMgaW5mb3JtYXRpb24gbmVlZGVkIGZy b20gU01NIGZvciBydW50aW1lIGNhY2hlIGluaXRpYWxpemF0aW9uLg0KICAgID4gKw0KICAgID4g KyAgQHBhcmFtW291dF0gVG90YWxIb2JTdG9yYWdlU2l6ZSAgICAgICAgIE91dHB1dCBwb2ludGVy IGZvciB0aGUgdG90YWwgSE9CDQogICAgPiBzdG9yYWdlIHNpemUgaW4gYnl0ZXMuDQogICAgPiAr ICBAcGFyYW1bb3V0XSBUb3RhbE52U3RvcmFnZVNpemUgICAgICAgICAgT3V0cHV0IHBvaW50ZXIg Zm9yIHRoZSB0b3RhbCBub24tDQogICAgPiB2b2xhdGlsZSBzdG9yYWdlIHNpemUgaW4gYnl0ZXMu DQogICAgPiArICBAcGFyYW1bb3V0XSBUb3RhbFZvbGF0aWxlU3RvcmFnZVNpemUgICAgT3V0cHV0 IHBvaW50ZXIgZm9yIHRoZSB0b3RhbCB2b2xhdGlsZQ0KICAgID4gc3RvcmFnZSBzaXplIGluIGJ5 dGVzLg0KICAgID4gKyAgQHBhcmFtW291dF0gQXV0aGVudGljYXRlZFZhcmlhYmxlVXNhZ2UgIE91 dHB1dCBwb2ludGVyIHRoYXQgaW5kaWNhdGVzIGlmDQogICAgPiBhdXRoZW50aWNhdGVkIHZhcmlh YmxlcyBhcmUgdG8gYmUgdXNlZC4NCiAgICA+ICsNCiAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgICAgICAgICAgICAgICBSZXRyaWV2ZWQgdGhlIHNpemUgc3VjY2Vzc2Z1bGx5Lg0K ICAgID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICAgICAgICAgIFRvdGFsTnZT dG9yYWdlU2l6ZSBwYXJhbWV0ZXIgaXMNCiAgICA+IE5VTEwuDQogICAgPiArICBAcmV0dmFsIEVG SV9PVVRfT0ZfUkVTT1VSQ0VTICAgICAgICAgICAgVGhlIG1lbW9yeSByZXNvdXJjZXMgbmVlZGVk IGZvciBhDQogICAgPiBDb21tQnVmZmVyIGFyZSBub3QgYXZhaWxhYmxlLg0KICAgID4gKyAgQHJl dHZhbCBPdGhlcnMgICAgICAgICAgICAgICAgICAgICAgICAgIENvdWxkIG5vdCByZXRyaWV2ZSB0 aGUgc2l6ZSBzdWNjZXNzZnVsbHkuDQogICAgPiArDQogICAgPiArKiovDQogICAgPiArRUZJX1NU QVRVUw0KICAgID4gK0dldFJ1bnRpbWVDYWNoZUluZm8gKA0KICAgID4gKyAgT1VUIFVJTlROICAg ICpUb3RhbEhvYlN0b3JhZ2VTaXplLA0KICAgID4gKyAgT1VUIFVJTlROICAgICpUb3RhbE52U3Rv cmFnZVNpemUsDQogICAgPiArICBPVVQgVUlOVE4gICAgKlRvdGFsVm9sYXRpbGVTdG9yYWdlU2l6 ZSwNCiAgICA+ICsgIE9VVCBCT09MRUFOICAqQXV0aGVudGljYXRlZFZhcmlhYmxlVXNhZ2UNCiAg ICA+ICsgICkNCiAgICA+ICt7DQogICAgPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KICAgID4gKyAgU01NX1ZBUklBQkxFX0NPTU1V TklDQVRFX0dFVF9SVU5USU1FX0NBQ0hFX0lORk8NCiAgICA+ICpTbW1HZXRSdW50aW1lQ2FjaGVJ bmZvOw0KICAgID4gKyAgRUZJX01NX0NPTU1VTklDQVRFX0hFQURFUiAgICAgICAgICAgICAgICAg ICAgICAgICpTbW1Db21tdW5pY2F0ZUhlYWRlcjsNCiAgICA+ICsgIFNNTV9WQVJJQUJMRV9DT01N VU5JQ0FURV9IRUFERVINCiAgICA+ICpTbW1WYXJpYWJsZUZ1bmN0aW9uSGVhZGVyOw0KICAgID4g KyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1T aXplOw0KICAgID4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICpDb21tQnVmZmVyOw0KICAgID4gKw0KICAgID4gKyAgU21tR2V0UnVudGltZUNhY2hl SW5mbyA9IE5VTEw7DQogICAgPiArICBDb21tQnVmZmVyICAgICAgICAgICAgID0gbVZhcmlhYmxl QnVmZmVyOw0KICAgID4gKw0KICAgID4gKyAgaWYgKChUb3RhbEhvYlN0b3JhZ2VTaXplID09IE5V TEwpIHx8IChUb3RhbE52U3RvcmFnZVNpemUgPT0gTlVMTCkgfHwNCiAgICA+IChUb3RhbFZvbGF0 aWxlU3RvcmFnZVNpemUgPT0gTlVMTCkgfHwgKEF1dGhlbnRpY2F0ZWRWYXJpYWJsZVVzYWdlID09 IE5VTEwpKSB7DQogICAgPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQogICAg PiArICB9DQogICAgPiArDQogICAgPiArICBpZiAoQ29tbUJ1ZmZlciA9PSBOVUxMKSB7DQogICAg PiArICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCiAgICA+ICsgIH0NCiAgICA+ICsN CiAgICA+ICsgIEFjcXVpcmVMb2NrT25seUF0Qm9vdFRpbWUgKCZtVmFyaWFibGVTZXJ2aWNlc0xv Y2spOw0KICAgID4gKw0KICAgID4gKyAgQ29tbVNpemUgPSBTTU1fQ09NTVVOSUNBVEVfSEVBREVS X1NJWkUgKw0KICAgID4gU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0hFQURFUl9TSVpFICsgc2l6 ZW9mDQogICAgPiAoU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0dFVF9SVU5USU1FX0NBQ0hFX0lO Rk8pOw0KICAgID4gKyAgWmVyb01lbSAoQ29tbUJ1ZmZlciwgQ29tbVNpemUpOw0KICAgID4gKw0K ICAgID4gKyAgU21tQ29tbXVuaWNhdGVIZWFkZXIgPSAoRUZJX01NX0NPTU1VTklDQVRFX0hFQURF Ug0KICAgID4gKilDb21tQnVmZmVyOw0KICAgID4gKyAgQ29weUd1aWQgKCZTbW1Db21tdW5pY2F0 ZUhlYWRlci0+SGVhZGVyR3VpZCwNCiAgICA+ICZnRWZpU21tVmFyaWFibGVQcm90b2NvbEd1aWQp Ow0KICAgID4gKyAgU21tQ29tbXVuaWNhdGVIZWFkZXItPk1lc3NhZ2VMZW5ndGggPQ0KICAgID4g U01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0hFQURFUl9TSVpFICsgc2l6ZW9mDQogICAgPiAoU01N X1ZBUklBQkxFX0NPTU1VTklDQVRFX0dFVF9SVU5USU1FX0NBQ0hFX0lORk8pOw0KICAgID4gKw0K ICAgID4gKyAgU21tVmFyaWFibGVGdW5jdGlvbkhlYWRlciAgICAgICAgICAgPQ0KICAgID4gKFNN TV9WQVJJQUJMRV9DT01NVU5JQ0FURV9IRUFERVIgKilTbW1Db21tdW5pY2F0ZUhlYWRlci0+RGF0 YTsNCiAgICA+ICsgIFNtbVZhcmlhYmxlRnVuY3Rpb25IZWFkZXItPkZ1bmN0aW9uID0NCiAgICA+ IFNNTV9WQVJJQUJMRV9GVU5DVElPTl9HRVRfUlVOVElNRV9DQUNIRV9JTkZPOw0KICAgID4gKyAg U21tR2V0UnVudGltZUNhY2hlSW5mbyAgICAgICAgICAgICAgPQ0KICAgID4gKFNNTV9WQVJJQUJM RV9DT01NVU5JQ0FURV9HRVRfUlVOVElNRV9DQUNIRV9JTkZPDQogICAgPiAqKVNtbVZhcmlhYmxl RnVuY3Rpb25IZWFkZXItPkRhdGE7DQogICAgPiArDQogICAgPiArICAvLw0KICAgID4gKyAgLy8g U2VuZCBkYXRhIHRvIFNNTS4NCiAgICA+ICsgIC8vDQogICAgPiArICBTdGF0dXMgPSBtTW1Db21t dW5pY2F0aW9uMi0+Q29tbXVuaWNhdGUgKG1NbUNvbW11bmljYXRpb24yLA0KICAgID4gQ29tbUJ1 ZmZlciwgQ29tbUJ1ZmZlciwgJkNvbW1TaXplKTsNCiAgICA+ICsgIEFTU0VSVF9FRklfRVJST1Ig KFN0YXR1cyk7DQogICAgPiArICBpZiAoQ29tbVNpemUgPD0gU01NX1ZBUklBQkxFX0NPTU1VTklD QVRFX0hFQURFUl9TSVpFKSB7DQogICAgPiArICAgIFN0YXR1cyA9IEVGSV9CQURfQlVGRkVSX1NJ WkU7DQogICAgPiArICAgIGdvdG8gRG9uZTsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsg IFN0YXR1cyA9IFNtbVZhcmlhYmxlRnVuY3Rpb25IZWFkZXItPlJldHVyblN0YXR1czsNCiAgICA+ ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCiAgICA+ICsgICAgZ290byBEb25lOw0KICAg ID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIEdldCBkYXRhIGZyb20g U01NLg0KICAgID4gKyAgLy8NCiAgICA+ICsgICpUb3RhbEhvYlN0b3JhZ2VTaXplICAgICAgICA9 IFNtbUdldFJ1bnRpbWVDYWNoZUluZm8tDQogICAgPiA+VG90YWxIb2JTdG9yYWdlU2l6ZTsNCiAg ICA+ICsgICpUb3RhbE52U3RvcmFnZVNpemUgICAgICAgICA9IFNtbUdldFJ1bnRpbWVDYWNoZUlu Zm8tPlRvdGFsTnZTdG9yYWdlU2l6ZTsNCiAgICA+ICsgICpUb3RhbFZvbGF0aWxlU3RvcmFnZVNp emUgICA9IFNtbUdldFJ1bnRpbWVDYWNoZUluZm8tDQogICAgPiA+VG90YWxWb2xhdGlsZVN0b3Jh Z2VTaXplOw0KICAgID4gKyAgKkF1dGhlbnRpY2F0ZWRWYXJpYWJsZVVzYWdlID0gU21tR2V0UnVu dGltZUNhY2hlSW5mby0NCiAgICA+ID5BdXRoZW50aWNhdGVkVmFyaWFibGVVc2FnZTsNCiAgICA+ ICsNCiAgICA+ICtEb25lOg0KICAgID4gKyAgUmVsZWFzZUxvY2tPbmx5QXRCb290VGltZSAoJm1W YXJpYWJsZVNlcnZpY2VzTG9jayk7DQogICAgPiArICByZXR1cm4gU3RhdHVzOw0KICAgID4gK30N CiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIFNlbmRzIHRoZSBydW50aW1lIHZhcmlhYmxl IGNhY2hlIGNvbnRleHQgaW5mb3JtYXRpb24gdG8gU01NLg0KICAgID4gKw0KICAgID4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgIFJldHJpZXZlZCB0aGUgc2l6ZSBzdWNjZXNz ZnVsbHkuDQogICAgPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgICAgVG90YWxO dlN0b3JhZ2VTaXplIHBhcmFtZXRlciBpcyBOVUxMLg0KICAgID4gKyAgQHJldHZhbCBFRklfT1VU X09GX1JFU09VUkNFUyAgICAgIFRoZSBtZW1vcnkgcmVzb3VyY2VzIG5lZWRlZCBmb3IgYQ0KICAg ID4gQ29tbUJ1ZmZlciBhcmUgbm90IGF2YWlsYWJsZS4NCiAgICA+ICsgIEByZXR2YWwgT3RoZXJz ICAgICAgICAgICAgICAgICAgICBDb3VsZCBub3QgcmV0cmlldmUgdGhlIHNpemUgc3VjY2Vzc2Z1 bGx5LjsNCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtFRklfU1RBVFVTDQogICAgPiArU2Vu ZFJ1bnRpbWVWYXJpYWJsZUNhY2hlQ29udGV4dFRvU21tICgNCiAgICA+ICsgIFZPSUQNCiAgICA+ ICsgICkNCiAgICA+ICt7DQogICAgPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQogICAgPiArICBTTU1fVkFSSUFCTEVf Q09NTVVOSUNBVEVfUlVOVElNRV9WQVJJQUJMRV9DQUNIRV9DT05URVhUDQogICAgPiAqU21tUnVu dGltZVZhckNhY2hlQ29udGV4dDsNCiAgICA+ICsgIEVGSV9NTV9DT01NVU5JQ0FURV9IRUFERVIN CiAgICA+ICpTbW1Db21tdW5pY2F0ZUhlYWRlcjsNCiAgICA+ICsgIFNNTV9WQVJJQUJMRV9DT01N VU5JQ0FURV9IRUFERVINCiAgICA+ICpTbW1WYXJpYWJsZUZ1bmN0aW9uSGVhZGVyOw0KICAgID4g KyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQ29tbVNpemU7DQogICAgPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqQ29tbUJ1ZmZlcjsNCiAgICA+ICsNCiAgICA+ICsgIFNt bVJ1bnRpbWVWYXJDYWNoZUNvbnRleHQgPSBOVUxMOw0KICAgID4gKyAgQ29tbUJ1ZmZlciAgICAg ICAgICAgICAgICA9IG1WYXJpYWJsZUJ1ZmZlcjsNCiAgICA+ICsNCiAgICA+ICsgIGlmIChDb21t QnVmZmVyID09IE5VTEwpIHsNCiAgICA+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VT Ow0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgQWNxdWlyZUxvY2tPbmx5QXRCb290VGlt ZSAoJm1WYXJpYWJsZVNlcnZpY2VzTG9jayk7DQogICAgPiArDQogICAgPiArICAvLw0KICAgID4g KyAgLy8gSW5pdCB0aGUgY29tbXVuaWNhdGUgYnVmZmVyLiBUaGUgYnVmZmVyIGRhdGEgc2l6ZSBp czoNCiAgICA+ICsgIC8vIFNNTV9DT01NVU5JQ0FURV9IRUFERVJfU0laRSArDQogICAgPiBTTU1f VkFSSUFCTEVfQ09NTVVOSUNBVEVfSEVBREVSX1NJWkUgKyBzaXplb2YNCiAgICA+IChTTU1fVkFS SUFCTEVfQ09NTVVOSUNBVEVfUlVOVElNRV9WQVJJQUJMRV9DQUNIRV9DT05URVhUKTsNCiAgICA+ ICsgIC8vDQogICAgPiArICBDb21tU2l6ZSA9IFNNTV9DT01NVU5JQ0FURV9IRUFERVJfU0laRSAr DQogICAgPiBTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfSEVBREVSX1NJWkUgKyBzaXplb2YNCiAg ICA+IChTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfUlVOVElNRV9WQVJJQUJMRV9DQUNIRV9DT05U RVhUKTsNCiAgICA+ICsgIFplcm9NZW0gKENvbW1CdWZmZXIsIENvbW1TaXplKTsNCiAgICA+ICsN CiAgICA+ICsgIFNtbUNvbW11bmljYXRlSGVhZGVyID0gKEVGSV9NTV9DT01NVU5JQ0FURV9IRUFE RVINCiAgICA+ICopQ29tbUJ1ZmZlcjsNCiAgICA+ICsgIENvcHlHdWlkICgmU21tQ29tbXVuaWNh dGVIZWFkZXItPkhlYWRlckd1aWQsDQogICAgPiAmZ0VmaVNtbVZhcmlhYmxlUHJvdG9jb2xHdWlk KTsNCiAgICA+ICsgIFNtbUNvbW11bmljYXRlSGVhZGVyLT5NZXNzYWdlTGVuZ3RoID0NCiAgICA+ IFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9IRUFERVJfU0laRSArIHNpemVvZg0KICAgID4gKFNN TV9WQVJJQUJMRV9DT01NVU5JQ0FURV9SVU5USU1FX1ZBUklBQkxFX0NBQ0hFX0NPTlRFWFQpOw0K ICAgID4gKw0KICAgID4gKyAgU21tVmFyaWFibGVGdW5jdGlvbkhlYWRlciAgICAgICAgICAgPQ0K ICAgID4gKFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9IRUFERVIgKilTbW1Db21tdW5pY2F0ZUhl YWRlci0+RGF0YTsNCiAgICA+ICsgIFNtbVZhcmlhYmxlRnVuY3Rpb25IZWFkZXItPkZ1bmN0aW9u ID0NCiAgICA+IFNNTV9WQVJJQUJMRV9GVU5DVElPTl9JTklUX1JVTlRJTUVfVkFSSUFCTEVfQ0FD SEVfQ09OVEVYVDsNCiAgICA+ICsgIFNtbVJ1bnRpbWVWYXJDYWNoZUNvbnRleHQgICAgICAgICAg ID0NCiAgICA+IChTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfUlVOVElNRV9WQVJJQUJMRV9DQUNI RV9DT05URVhUDQogICAgPiAqKVNtbVZhcmlhYmxlRnVuY3Rpb25IZWFkZXItPkRhdGE7DQogICAg PiArDQogICAgPiArICBTbW1SdW50aW1lVmFyQ2FjaGVDb250ZXh0LT5SdW50aW1lSG9iQ2FjaGUg ICAgICA9DQogICAgPiBtVmFyaWFibGVSdW50aW1lSG9iQ2FjaGVCdWZmZXI7DQogICAgPiArICBT bW1SdW50aW1lVmFyQ2FjaGVDb250ZXh0LT5SdW50aW1lVm9sYXRpbGVDYWNoZSA9DQogICAgPiBt VmFyaWFibGVSdW50aW1lVm9sYXRpbGVDYWNoZUJ1ZmZlcjsNCiAgICA+ICsgIFNtbVJ1bnRpbWVW YXJDYWNoZUNvbnRleHQtPlJ1bnRpbWVOdkNhY2hlICAgICAgID0NCiAgICA+IG1WYXJpYWJsZVJ1 bnRpbWVOdkNhY2hlQnVmZmVyOw0KICAgID4gKyAgU21tUnVudGltZVZhckNhY2hlQ29udGV4dC0+ UGVuZGluZ1VwZGF0ZSAgICAgICAgPQ0KICAgID4gJm1WYXJpYWJsZVJ1bnRpbWVDYWNoZVBlbmRp bmdVcGRhdGU7DQogICAgPiArICBTbW1SdW50aW1lVmFyQ2FjaGVDb250ZXh0LT5SZWFkTG9jayAg ICAgICAgICAgICA9DQogICAgPiAmbVZhcmlhYmxlUnVudGltZUNhY2hlUmVhZExvY2s7DQogICAg PiArICBTbW1SdW50aW1lVmFyQ2FjaGVDb250ZXh0LT5Ib2JGbHVzaENvbXBsZXRlICAgICA9DQog ICAgPiAmbUhvYkZsdXNoQ29tcGxldGU7DQogICAgPiArDQogICAgPiArICAvLw0KICAgID4gKyAg Ly8gUmVxdWVzdCB0byB1bmJsb2NrIHRoaXMgcmVnaW9uIHRvIGJlIGFjY2Vzc2libGUgZnJvbSBp bnNpZGUgTU0NCiAgICA+IGVudmlyb25tZW50DQogICAgPiArICAvLyBUaGVzZSBmaWVsZHMgInNo b3VsZCIgYmUgYWxsIG9uIHRoZSBzYW1lIHBhZ2UsIGJ1dCBqdXN0IHRvIGJlIG9uIHRoZSBzYWZl DQogICAgPiBzaWRlLi4uDQogICAgPiArICAvLw0KICAgID4gKyAgU3RhdHVzID0gTW1VbmJsb2Nr TWVtb3J5UmVxdWVzdCAoDQogICAgPiArICAgICAgICAgICAgIChFRklfUEhZU0lDQUxfQUREUkVT UylBTElHTl9WQUxVRQ0KICAgID4gKChVSU5UTilTbW1SdW50aW1lVmFyQ2FjaGVDb250ZXh0LT5Q ZW5kaW5nVXBkYXRlIC0gRUZJX1BBR0VfU0laRSArIDEsDQogICAgPiBFRklfUEFHRV9TSVpFKSwN CiAgICA+ICsgICAgICAgICAgICAgRUZJX1NJWkVfVE9fUEFHRVMgKHNpemVvZiAobVZhcmlhYmxl UnVudGltZUNhY2hlUGVuZGluZ1VwZGF0ZSkpDQogICAgPiArICAgICAgICAgICAgICk7DQogICAg PiArICBpZiAoKFN0YXR1cyAhPSBFRklfVU5TVVBQT1JURUQpICYmIEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KICAgID4gKyAgICBnb3RvIERvbmU7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiAr ICBTdGF0dXMgPSBNbVVuYmxvY2tNZW1vcnlSZXF1ZXN0ICgNCiAgICA+ICsgICAgICAgICAgICAg KEVGSV9QSFlTSUNBTF9BRERSRVNTKUFMSUdOX1ZBTFVFDQogICAgPiAoKFVJTlROKVNtbVJ1bnRp bWVWYXJDYWNoZUNvbnRleHQtPlJlYWRMb2NrIC0gRUZJX1BBR0VfU0laRSArIDEsDQogICAgPiBF RklfUEFHRV9TSVpFKSwNCiAgICA+ICsgICAgICAgICAgICAgRUZJX1NJWkVfVE9fUEFHRVMgKHNp emVvZiAobVZhcmlhYmxlUnVudGltZUNhY2hlUmVhZExvY2spKQ0KICAgID4gKyAgICAgICAgICAg ICApOw0KICAgID4gKyAgaWYgKChTdGF0dXMgIT0gRUZJX1VOU1VQUE9SVEVEKSAmJiBFRklfRVJS T1IgKFN0YXR1cykpIHsNCiAgICA+ICsgICAgZ290byBEb25lOw0KICAgID4gKyAgfQ0KICAgID4g Kw0KICAgID4gKyAgU3RhdHVzID0gTW1VbmJsb2NrTWVtb3J5UmVxdWVzdCAoDQogICAgPiArICAg ICAgICAgICAgIChFRklfUEhZU0lDQUxfQUREUkVTUylBTElHTl9WQUxVRQ0KICAgID4gKChVSU5U TilTbW1SdW50aW1lVmFyQ2FjaGVDb250ZXh0LT5Ib2JGbHVzaENvbXBsZXRlIC0gRUZJX1BBR0Vf U0laRSArDQogICAgPiAxLCBFRklfUEFHRV9TSVpFKSwNCiAgICA+ICsgICAgICAgICAgICAgRUZJ X1NJWkVfVE9fUEFHRVMgKHNpemVvZiAobUhvYkZsdXNoQ29tcGxldGUpKQ0KICAgID4gKyAgICAg ICAgICAgICApOw0KICAgID4gKyAgaWYgKChTdGF0dXMgIT0gRUZJX1VOU1VQUE9SVEVEKSAmJiBF RklfRVJST1IgKFN0YXR1cykpIHsNCiAgICA+ICsgICAgZ290byBEb25lOw0KICAgID4gKyAgfQ0K ICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIFNlbmQgZGF0YSB0byBTTU0uDQogICAg PiArICAvLw0KICAgID4gKyAgU3RhdHVzID0gbU1tQ29tbXVuaWNhdGlvbjItPkNvbW11bmljYXRl IChtTW1Db21tdW5pY2F0aW9uMiwNCiAgICA+IENvbW1CdWZmZXIsIENvbW1CdWZmZXIsICZDb21t U2l6ZSk7DQogICAgPiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KICAgID4gKyAgaWYg KENvbW1TaXplIDw9IFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9IRUFERVJfU0laRSkgew0KICAg ID4gKyAgICBTdGF0dXMgPSBFRklfQkFEX0JVRkZFUl9TSVpFOw0KICAgID4gKyAgICBnb3RvIERv bmU7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICBTdGF0dXMgPSBTbW1WYXJpYWJsZUZ1 bmN0aW9uSGVhZGVyLT5SZXR1cm5TdGF0dXM7DQogICAgPiArICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQogICAgPiArICAgIGdvdG8gRG9uZTsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ ICtEb25lOg0KICAgID4gKyAgUmVsZWFzZUxvY2tPbmx5QXRCb290VGltZSAoJm1WYXJpYWJsZVNl cnZpY2VzTG9jayk7DQogICAgPiArICByZXR1cm4gU3RhdHVzOw0KICAgID4gK30NCiAgICA+ICsN CiAgICA+ICsvKioNCiAgICA+ICsgIEluaXRpYWxpemUgdmFyaWFibGUgc2VydmljZSBhbmQgaW5z dGFsbCBWYXJpYWJsZSBBcmNoaXRlY3R1cmFsIHByb3RvY29sLg0KICAgID4gKw0KICAgID4gKyAg QHBhcmFtW2luXSBFdmVudCAgICBFdmVudCB3aG9zZSBub3RpZmljYXRpb24gZnVuY3Rpb24gaXMg YmVpbmcgaW52b2tlZC4NCiAgICA+ICsgIEBwYXJhbVtpbl0gQ29udGV4dCAgUG9pbnRlciB0byB0 aGUgbm90aWZpY2F0aW9uIGZ1bmN0aW9uJ3MgY29udGV4dC4NCiAgICA+ICsNCiAgICA+ICsqKi8N CiAgICA+ICtWT0lEDQogICAgPiArRUZJQVBJDQogICAgPiArU21tVmFyaWFibGVSZWFkeSAoDQog ICAgPiArICBJTiAgRUZJX0VWRU5UICBFdmVudCwNCiAgICA+ICsgIElOICBWT0lEICAgICAgICpD b250ZXh0DQogICAgPiArICApDQogICAgPiArew0KICAgID4gKyAgRUZJX1NUQVRVUyAgICAgICAg ICAgICAgICAgICAgIFN0YXR1czsNCiAgICA+ICsgIFBST1RFQ1RFRF9WQVJJQUJMRV9DT05URVhU X0lOICBDb250ZXh0SW47DQogICAgPiArDQogICAgPiArICBTdGF0dXMgPSBnQlMtPkxvY2F0ZVBy b3RvY29sICgmZ0VmaVNtbVZhcmlhYmxlUHJvdG9jb2xHdWlkLCBOVUxMLCAoVk9JRA0KICAgID4g KiopJm1TbW1WYXJpYWJsZSk7DQogICAgPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQog ICAgPiArICAgIHJldHVybjsNCiAgICA+ICsgIH0NCiAgICA+ICsNCiAgICA+ICsgIFN0YXR1cyA9 IGdCUy0+TG9jYXRlUHJvdG9jb2wgKCZnRWZpTW1Db21tdW5pY2F0aW9uMlByb3RvY29sR3VpZCwg TlVMTCwNCiAgICA+IChWT0lEICoqKSZtTW1Db21tdW5pY2F0aW9uMik7DQogICAgPiArICBBU1NF UlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8v IEFsbG9jYXRlIG1lbW9yeSBmb3IgdmFyaWFibGUgY29tbXVuaWNhdGUgYnVmZmVyLg0KICAgID4g KyAgLy8NCiAgICA+ICsgIFN0YXR1cyA9IEdldFZhcmlhYmxlUGF5bG9hZFNpemUgKCZtVmFyaWFi bGVCdWZmZXJQYXlsb2FkU2l6ZSk7DQogICAgPiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMp Ow0KICAgID4gKyAgbVZhcmlhYmxlQnVmZmVyU2l6ZSA9IFNNTV9DT01NVU5JQ0FURV9IRUFERVJf U0laRSArDQogICAgPiBTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfSEVBREVSX1NJWkUgKyBtVmFy aWFibGVCdWZmZXJQYXlsb2FkU2l6ZTsNCiAgICA+ICsgIG1WYXJpYWJsZUJ1ZmZlciAgICAgPSBB bGxvY2F0ZVJ1bnRpbWVQb29sIChtVmFyaWFibGVCdWZmZXJTaXplKTsNCiAgICA+ICsgIEFTU0VS VCAobVZhcmlhYmxlQnVmZmVyICE9IE5VTEwpOw0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ ICsgIC8vIFNhdmUgdGhlIGJ1ZmZlciBwaHlzaWNhbCBhZGRyZXNzIHVzZWQgZm9yIFNNTSBjb25t dW5pY2F0aW9uLg0KICAgID4gKyAgLy8NCiAgICA+ICsgIG1WYXJpYWJsZUJ1ZmZlclBoeXNpY2Fs ID0gbVZhcmlhYmxlQnVmZmVyOw0KICAgID4gKw0KICAgID4gKyAgaWYgKEZlYXR1cmVQY2RHZXQg KFBjZEVuYWJsZVZhcmlhYmxlUnVudGltZUNhY2hlKSkgew0KICAgID4gKyAgICBERUJVRyAoKERF QlVHX0lORk8sICJWYXJpYWJsZSBkcml2ZXIgcnVudGltZSBjYWNoZSBpcyBlbmFibGVkLlxuIikp Ow0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICAvLyBBbGxvY2F0ZSBydW50aW1lIHZhcmlhYmxl IGNhY2hlIG1lbW9yeSBidWZmZXJzLg0KICAgID4gKyAgICAvLw0KICAgID4gKyAgICBTdGF0dXMg PSAgR2V0UnVudGltZUNhY2hlSW5mbyAoDQogICAgPiArICAgICAgICAgICAgICAgICZtVmFyaWFi bGVSdW50aW1lSG9iQ2FjaGVCdWZmZXJTaXplLA0KICAgID4gKyAgICAgICAgICAgICAgICAmbVZh cmlhYmxlUnVudGltZU52Q2FjaGVCdWZmZXJTaXplLA0KICAgID4gKyAgICAgICAgICAgICAgICAm bVZhcmlhYmxlUnVudGltZVZvbGF0aWxlQ2FjaGVCdWZmZXJTaXplLA0KICAgID4gKyAgICAgICAg ICAgICAgICAmbVZhcmlhYmxlQXV0aEZvcm1hdA0KICAgID4gKyAgICAgICAgICAgICAgICApOw0K ICAgID4gKyAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgID4gKyAgICAgIFN0YXR1 cyA9IEluaXRWYXJpYWJsZUNhY2hlICgmbVZhcmlhYmxlUnVudGltZUhvYkNhY2hlQnVmZmVyLA0K ICAgID4gJm1WYXJpYWJsZVJ1bnRpbWVIb2JDYWNoZUJ1ZmZlclNpemUpOw0KICAgID4gKyAgICAg IGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAgPiArICAgICAgICBTdGF0dXMgPSBJbml0 VmFyaWFibGVDYWNoZSAoJm1WYXJpYWJsZVJ1bnRpbWVOdkNhY2hlQnVmZmVyLA0KICAgID4gJm1W YXJpYWJsZVJ1bnRpbWVOdkNhY2hlQnVmZmVyU2l6ZSk7DQogICAgPiArICAgICAgICBpZiAoIUVG SV9FUlJPUiAoU3RhdHVzKSkgew0KICAgID4gKyAgICAgICAgICBTdGF0dXMgPSBJbml0VmFyaWFi bGVDYWNoZSAoJm1WYXJpYWJsZVJ1bnRpbWVWb2xhdGlsZUNhY2hlQnVmZmVyLA0KICAgID4gJm1W YXJpYWJsZVJ1bnRpbWVWb2xhdGlsZUNhY2hlQnVmZmVyU2l6ZSk7DQogICAgPiArICAgICAgICAg IGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAgPiArICAgICAgICAgICAgU3RhdHVzID0g U2VuZFJ1bnRpbWVWYXJpYWJsZUNhY2hlQ29udGV4dFRvU21tICgpOw0KICAgID4gKyAgICAgICAg ICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAgPiArICAgICAgICAgICAgICBTeW5j UnVudGltZUNhY2hlICgpOw0KICAgID4gKyAgICAgICAgICAgIH0NCiAgICA+ICsgICAgICAgICAg fQ0KICAgID4gKyAgICAgICAgfQ0KICAgID4gKyAgICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAg ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAgPiArICAgICAgICBtVmFyaWFibGVSdW50 aW1lSG9iQ2FjaGVCdWZmZXIgICAgICA9IE5VTEw7DQogICAgPiArICAgICAgICBtVmFyaWFibGVS dW50aW1lTnZDYWNoZUJ1ZmZlciAgICAgICA9IE5VTEw7DQogICAgPiArICAgICAgICBtVmFyaWFi bGVSdW50aW1lVm9sYXRpbGVDYWNoZUJ1ZmZlciA9IE5VTEw7DQogICAgPiArICAgICAgfQ0KICAg ID4gKyAgICB9DQogICAgPiArDQogICAgPiArICAgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7 DQogICAgPiArICB9IGVsc2Ugew0KICAgID4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJWYXJp YWJsZSBkcml2ZXIgcnVudGltZSBjYWNoZSBpcyBkaXNhYmxlZC5cbiIpKTsNCiAgICA+ICsgIH0N CiAgICA+ICsNCiAgICA+ICsgIGdSVC0+R2V0VmFyaWFibGUgICAgICAgICA9IFJ1bnRpbWVTZXJ2 aWNlR2V0VmFyaWFibGU7DQogICAgPiArICBnUlQtPkdldE5leHRWYXJpYWJsZU5hbWUgPSBSdW50 aW1lU2VydmljZUdldE5leHRWYXJpYWJsZU5hbWU7DQogICAgPiArICBnUlQtPlNldFZhcmlhYmxl ICAgICAgICAgPSBSdW50aW1lU2VydmljZVNldFZhcmlhYmxlOw0KICAgID4gKyAgZ1JULT5RdWVy eVZhcmlhYmxlSW5mbyAgID0gUnVudGltZVNlcnZpY2VRdWVyeVZhcmlhYmxlSW5mbzsNCiAgICA+ ICsNCiAgICA+ICsgIC8vDQogICAgPiArICAvLyBJbnN0YWxsIHRoZSBWYXJpYWJsZSBBcmNoaXRl Y3R1cmFsIFByb3RvY29sIG9uIGEgbmV3IGhhbmRsZS4NCiAgICA+ICsgIC8vDQogICAgPiArICBT dGF0dXMgPSBnQlMtPkluc3RhbGxQcm90b2NvbEludGVyZmFjZSAoDQogICAgPiArICAgICAgICAg ICAgICAgICAgJm1IYW5kbGUsDQogICAgPiArICAgICAgICAgICAgICAgICAgJmdFZmlWYXJpYWJs ZUFyY2hQcm90b2NvbEd1aWQsDQogICAgPiArICAgICAgICAgICAgICAgICAgRUZJX05BVElWRV9J TlRFUkZBQ0UsDQogICAgPiArICAgICAgICAgICAgICAgICAgTlVMTA0KICAgID4gKyAgICAgICAg ICAgICAgICAgICk7DQogICAgPiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KICAgID4g Kw0KICAgID4gKyAgbVZhcmlhYmxlTG9jay5SZXF1ZXN0VG9Mb2NrID0gVmFyaWFibGVMb2NrUmVx dWVzdFRvTG9jazsNCiAgICA+ICsgIFN0YXR1cyAgICAgICAgICAgICAgICAgICAgICA9IGdCUy0+ SW5zdGFsbE11bHRpcGxlUHJvdG9jb2xJbnRlcmZhY2VzICgNCiAgICA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmbUhhbmRsZSwNCiAgICA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmZ0Vka2lpVmFyaWFibGVMb2NrUHJvdG9jb2xHdWlk LA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtVmFyaWFi bGVMb2NrLA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V TEwNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KICAg ID4gKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCiAgICA+ICsNCiAgICA+ICsgIG1WYXJD aGVjay5SZWdpc3RlclNldFZhcmlhYmxlQ2hlY2tIYW5kbGVyID0NCiAgICA+IFZhckNoZWNrUmVn aXN0ZXJTZXRWYXJpYWJsZUNoZWNrSGFuZGxlcjsNCiAgICA+ICsgIG1WYXJDaGVjay5WYXJpYWJs ZVByb3BlcnR5U2V0ICAgICAgICAgICAgID0gVmFyQ2hlY2tWYXJpYWJsZVByb3BlcnR5U2V0Ow0K ICAgID4gKyAgbVZhckNoZWNrLlZhcmlhYmxlUHJvcGVydHlHZXQgICAgICAgICAgICAgPSBWYXJD aGVja1ZhcmlhYmxlUHJvcGVydHlHZXQ7DQogICAgPiArICBTdGF0dXMgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA9IGdCUy0+SW5zdGFsbE11bHRpcGxlUHJvdG9jb2xJbnRlcmZh Y2VzICgNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZtSGFuZGxlLA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJmdFZGtpaVZhckNoZWNrUHJvdG9jb2xHdWlkLA0KICAg ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Jm1WYXJDaGVjaywNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE5VTEwNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgPiArICBBU1NFUlRfRUZJX0VSUk9SIChT dGF0dXMpOw0KICAgID4gKw0KICAgID4gKyAgQ29udGV4dEluLlN0cnVjdFNpemUgICAgPSBzaXpl b2YgKENvbnRleHRJbik7DQogICAgPiArICBDb250ZXh0SW4uU3RydWN0VmVyc2lvbiA9DQogICAg PiBQUk9URUNURURfVkFSSUFCTEVfQ09OVEVYVF9JTl9TVFJVQ1RfVkVSU0lPTjsNCiAgICA+ICsN CiAgICA+ICsgIENvbnRleHRJbi5GaW5kVmFyaWFibGVTbW0gICAgID0gRmluZFZhcmlhYmxlSW5T bW07DQogICAgPiArICBDb250ZXh0SW4uR2V0VmFyaWFibGVJbmZvICAgICA9IEdldFZhcmlhYmxl SW5mbzsNCiAgICA+ICsgIENvbnRleHRJbi5HZXROZXh0VmFyaWFibGVJbmZvID0gR2V0TmV4dFZh cmlhYmxlSW5mbzsNCiAgICA+ICsgIENvbnRleHRJbi5WYXJpYWJsZVNlcnZpY2VVc2VyID0gRnJv bVJ1bnRpbWVNb2R1bGU7DQogICAgPiArICBDb250ZXh0SW4uTWF4VmFyaWFibGVTaXplICAgICA9 IDA7DQogICAgPiArICBDb250ZXh0SW4uVXBkYXRlVmFyaWFibGVTdG9yZSA9IE5VTEw7DQogICAg PiArICBDb250ZXh0SW4uVXBkYXRlVmFyaWFibGUgICAgICA9IE5VTEw7DQogICAgPiArDQogICAg PiArICBTdGF0dXMgPSBQcm90ZWN0ZWRWYXJpYWJsZUxpYkluaXRpYWxpemUgKCZDb250ZXh0SW4p Ow0KICAgID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgID4gKyAgICBERUJVRyAo KA0KICAgID4gKyAgICAgIERFQlVHX0lORk8sDQogICAgPiArICAgICAgIiVhOiAlZCBQcm90ZWN0 ZWRWYXJpYWJsZUxpYkluaXRpYWxpemUoKSByZXR1cm4gc3RhdHVzOiAlclxuIiwNCiAgICA+ICsg ICAgICBfX0ZVTkNUSU9OX18sDQogICAgPiArICAgICAgX19MSU5FX18sDQogICAgPiArICAgICAg U3RhdHVzDQogICAgPiArICAgICAgKSk7DQogICAgPiArICB9DQogICAgPiArDQogICAgPiArICBn QlMtPkNsb3NlRXZlbnQgKEV2ZW50KTsNCiAgICA+ICt9DQogICAgPiArDQogICAgPiArLyoqDQog ICAgPiArICBTTU0gTm9uLVZvbGF0aWxlIHZhcmlhYmxlIHdyaXRlIHNlcnZpY2UgaXMgcmVhZHkg bm90aWZ5IGV2ZW50IGhhbmRsZXIuDQogICAgPiArDQogICAgPiArICBAcGFyYW1baW5dIEV2ZW50 ICAgIEV2ZW50IHdob3NlIG5vdGlmaWNhdGlvbiBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkLg0K ICAgID4gKyAgQHBhcmFtW2luXSBDb250ZXh0ICBQb2ludGVyIHRvIHRoZSBub3RpZmljYXRpb24g ZnVuY3Rpb24ncyBjb250ZXh0Lg0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gK1ZPSUQNCiAg ICA+ICtFRklBUEkNCiAgICA+ICtTbW1WYXJpYWJsZVdyaXRlUmVhZHkgKA0KICAgID4gKyAgSU4g IEVGSV9FVkVOVCAgRXZlbnQsDQogICAgPiArICBJTiAgVk9JRCAgICAgICAqQ29udGV4dA0KICAg ID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCiAgICA+ICsg IFZPSUQgICAgICAgICpQcm90b2NvbE9wczsNCiAgICA+ICsNCiAgICA+ICsgIC8vDQogICAgPiAr ICAvLyBDaGVjayB3aGV0aGVyIHRoZSBwcm90b2NvbCBpcyBpbnN0YWxsZWQgb3Igbm90Lg0KICAg ID4gKyAgLy8NCiAgICA+ICsgIFN0YXR1cyA9IGdCUy0+TG9jYXRlUHJvdG9jb2wgKCZnU21tVmFy aWFibGVXcml0ZUd1aWQsIE5VTEwsIChWT0lEDQogICAgPiAqKikmUHJvdG9jb2xPcHMpOw0KICAg ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgID4gKyAgICByZXR1cm47DQogICAg PiArICB9DQogICAgPiArDQogICAgPiArICAvLw0KICAgID4gKyAgLy8gU29tZSBTZWN1cmUgQm9v dCBQb2xpY3kgVmFyIChTZWN1cmVCb290LCBldGMpIHVwZGF0ZXMgZm9sbG93aW5nIG90aGVyDQog ICAgPiArICAvLyBTZWN1cmUgQm9vdCBQb2xpY3kgVmFyaWFibGUgY2hhbmdlLiAgUmVjb3JkIHRo ZWlyIGluaXRpYWwgdmFsdWUuDQogICAgPiArICAvLw0KICAgID4gKyAgUmVjb3JkU2VjdXJlQm9v dFBvbGljeVZhckRhdGEgKCk7DQogICAgPiArDQogICAgPiArICBTdGF0dXMgPSBnQlMtPkluc3Rh bGxQcm90b2NvbEludGVyZmFjZSAoDQogICAgPiArICAgICAgICAgICAgICAgICAgJm1IYW5kbGUs DQogICAgPiArICAgICAgICAgICAgICAgICAgJmdFZmlWYXJpYWJsZVdyaXRlQXJjaFByb3RvY29s R3VpZCwNCiAgICA+ICsgICAgICAgICAgICAgICAgICBFRklfTkFUSVZFX0lOVEVSRkFDRSwNCiAg ICA+ICsgICAgICAgICAgICAgICAgICBOVUxMDQogICAgPiArICAgICAgICAgICAgICAgICAgKTsN CiAgICA+ICsgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQogICAgPiArDQogICAgPiArICBn QlMtPkNsb3NlRXZlbnQgKEV2ZW50KTsNCiAgICA+ICt9DQogICAgPiArDQogICAgPiArLyoqDQog ICAgPiArICBWYXJpYWJsZSBEcml2ZXIgbWFpbiBlbnRyeSBwb2ludC4gVGhlIFZhcmlhYmxlIGRy aXZlciBwbGFjZXMgdGhlIDQgRUZJDQogICAgPiArICBydW50aW1lIHNlcnZpY2VzIGluIHRoZSBF RkkgU3lzdGVtIFRhYmxlIGFuZCBpbnN0YWxscyBhcmNoIHByb3RvY29scw0KICAgID4gKyAgZm9y IHZhcmlhYmxlIHJlYWQgYW5kIHdyaXRlIHNlcnZpY2VzIGJlaW5nIGF2YWlsYWJsZS4gSXQgYWxz byByZWdpc3RlcnMNCiAgICA+ICsgIGEgbm90aWZpY2F0aW9uIGZ1bmN0aW9uIGZvciBhbiBFVlRf U0lHTkFMX1ZJUlRVQUxfQUREUkVTU19DSEFOR0UNCiAgICA+IGV2ZW50Lg0KICAgID4gKw0KICAg ID4gKyAgQHBhcmFtW2luXSBJbWFnZUhhbmRsZSAgICBUaGUgZmlybXdhcmUgYWxsb2NhdGVkIGhh bmRsZSBmb3IgdGhlIEVGSSBpbWFnZS4NCiAgICA+ICsgIEBwYXJhbVtpbl0gU3lzdGVtVGFibGUg ICAgQSBwb2ludGVyIHRvIHRoZSBFRkkgU3lzdGVtIFRhYmxlLg0KICAgID4gKw0KICAgID4gKyAg QHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICBWYXJpYWJsZSBzZXJ2aWNlIHN1Y2Nlc3NmdWxseSBp bml0aWFsaXplZC4NCiAgICA+ICsNCiAgICA+ICsqKi8NCiAgICA+ICtFRklfU1RBVFVTDQogICAg PiArRUZJQVBJDQogICAgPiArVmFyaWFibGVTbW1SdW50aW1lSW5pdGlhbGl6ZSAoDQogICAgPiAr ICBJTiBFRklfSEFORExFICAgICAgICBJbWFnZUhhbmRsZSwNCiAgICA+ICsgIElOIEVGSV9TWVNU RU1fVEFCTEUgICpTeXN0ZW1UYWJsZQ0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIFZP SUQgICAgICAgKlNtbVZhcmlhYmxlUmVnaXN0cmF0aW9uOw0KICAgID4gKyAgVk9JRCAgICAgICAq U21tVmFyaWFibGVXcml0ZVJlZ2lzdHJhdGlvbjsNCiAgICA+ICsgIEVGSV9FVkVOVCAgT25SZWFk eVRvQm9vdEV2ZW50Ow0KICAgID4gKyAgRUZJX0VWRU5UICBFeGl0Qm9vdFNlcnZpY2VFdmVudDsN CiAgICA+ICsgIEVGSV9FVkVOVCAgTGVnYWN5Qm9vdEV2ZW50Ow0KICAgID4gKw0KICAgID4gKyAg RWZpSW5pdGlhbGl6ZUxvY2sgKCZtVmFyaWFibGVTZXJ2aWNlc0xvY2ssIFRQTF9OT1RJRlkpOw0K ICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsgIC8vIFNtbSB2YXJpYWJsZSBzZXJ2aWNlIGlz IHJlYWR5DQogICAgPiArICAvLw0KICAgID4gKyAgRWZpQ3JlYXRlUHJvdG9jb2xOb3RpZnlFdmVu dCAoDQogICAgPiArICAgICZnRWZpU21tVmFyaWFibGVQcm90b2NvbEd1aWQsDQogICAgPiArICAg IFRQTF9DQUxMQkFDSywNCiAgICA+ICsgICAgU21tVmFyaWFibGVSZWFkeSwNCiAgICA+ICsgICAg TlVMTCwNCiAgICA+ICsgICAgJlNtbVZhcmlhYmxlUmVnaXN0cmF0aW9uDQogICAgPiArICAgICk7 DQogICAgPiArDQogICAgPiArICAvLw0KICAgID4gKyAgLy8gU21tIE5vbi1Wb2xhdGlsZSB2YXJp YWJsZSB3cml0ZSBzZXJ2aWNlIGlzIHJlYWR5DQogICAgPiArICAvLw0KICAgID4gKyAgRWZpQ3Jl YXRlUHJvdG9jb2xOb3RpZnlFdmVudCAoDQogICAgPiArICAgICZnU21tVmFyaWFibGVXcml0ZUd1 aWQsDQogICAgPiArICAgIFRQTF9DQUxMQkFDSywNCiAgICA+ICsgICAgU21tVmFyaWFibGVXcml0 ZVJlYWR5LA0KICAgID4gKyAgICBOVUxMLA0KICAgID4gKyAgICAmU21tVmFyaWFibGVXcml0ZVJl Z2lzdHJhdGlvbg0KICAgID4gKyAgICApOw0KICAgID4gKw0KICAgID4gKyAgLy8NCiAgICA+ICsg IC8vIFJlZ2lzdGVyIHRoZSBldmVudCB0byByZWNsYWltIHZhcmlhYmxlIGZvciBPUyB1c2FnZS4N CiAgICA+ICsgIC8vDQogICAgPiArICBFZmlDcmVhdGVFdmVudFJlYWR5VG9Cb290RXggKA0KICAg ID4gKyAgICBUUExfTk9USUZZLA0KICAgID4gKyAgICBPblJlYWR5VG9Cb290LA0KICAgID4gKyAg ICBOVUxMLA0KICAgID4gKyAgICAmT25SZWFkeVRvQm9vdEV2ZW50DQogICAgPiArICAgICk7DQog ICAgPiArDQogICAgPiArICAvLw0KICAgID4gKyAgLy8gUmVnaXN0ZXIgdGhlIGV2ZW50IHRvIGlu Zm9ybSBTTU0gdmFyaWFibGUgdGhhdCBpdCBpcyBhdCBydW50aW1lLg0KICAgID4gKyAgLy8NCiAg ICA+ICsgIGdCUy0+Q3JlYXRlRXZlbnRFeCAoDQogICAgPiArICAgICAgICAgRVZUX05PVElGWV9T SUdOQUwsDQogICAgPiArICAgICAgICAgVFBMX05PVElGWSwNCiAgICA+ICsgICAgICAgICBPbkV4 aXRCb290U2VydmljZXMsDQogICAgPiArICAgICAgICAgTlVMTCwNCiAgICA+ICsgICAgICAgICAm Z0VmaUV2ZW50RXhpdEJvb3RTZXJ2aWNlc0d1aWQsDQogICAgPiArICAgICAgICAgJkV4aXRCb290 U2VydmljZUV2ZW50DQogICAgPiArICAgICAgICAgKTsNCiAgICA+ICsNCiAgICA+ICsgIC8vDQog ICAgPiArICAvLyBSZWdpc3RlciB0aGUgZXZlbnQgdG8gaW5mb3JtIFNNTSB2YXJpYWJsZSB0aGF0 IGl0IGlzIGF0IHJ1bnRpbWUgZm9yIGxlZ2FjeQ0KICAgID4gYm9vdC4NCiAgICA+ICsgIC8vIFJl dXNlIE9uRXhpdEJvb3RTZXJ2aWNlcygpIGhlcmUuDQogICAgPiArICAvLw0KICAgID4gKyAgRWZp Q3JlYXRlRXZlbnRMZWdhY3lCb290RXggKA0KICAgID4gKyAgICBUUExfTk9USUZZLA0KICAgID4g KyAgICBPbkV4aXRCb290U2VydmljZXMsDQogICAgPiArICAgIE5VTEwsDQogICAgPiArICAgICZM ZWdhY3lCb290RXZlbnQNCiAgICA+ICsgICAgKTsNCiAgICA+ICsNCiAgICA+ICsgIC8vDQogICAg PiArICAvLyBSZWdpc3RlciB0aGUgZXZlbnQgdG8gY29udmVydCB0aGUgcG9pbnRlciBmb3IgcnVu dGltZS4NCiAgICA+ICsgIC8vDQogICAgPiArICBnQlMtPkNyZWF0ZUV2ZW50RXggKA0KICAgID4g KyAgICAgICAgIEVWVF9OT1RJRllfU0lHTkFMLA0KICAgID4gKyAgICAgICAgIFRQTF9OT1RJRlks DQogICAgPiArICAgICAgICAgVmFyaWFibGVBZGRyZXNzQ2hhbmdlRXZlbnQsDQogICAgPiArICAg ICAgICAgTlVMTCwNCiAgICA+ICsgICAgICAgICAmZ0VmaUV2ZW50VmlydHVhbEFkZHJlc3NDaGFu Z2VHdWlkLA0KICAgID4gKyAgICAgICAgICZtVmlydHVhbEFkZHJlc3NDaGFuZ2VFdmVudA0KICAg ID4gKyAgICAgICAgICk7DQogICAgPiArDQogICAgPiArICAvLyBJbml0aWFsaXplIHRoZSBWYXJp YWJsZVBvbGljeSBwcm90b2NvbCBhbmQgZW5naW5lLg0KICAgID4gKyAgVmFyaWFibGVQb2xpY3lT bW1EeGVNYWluIChJbWFnZUhhbmRsZSwgU3lzdGVtVGFibGUpOw0KICAgID4gKw0KICAgID4gKyAg cmV0dXJuIEVGSV9TVUNDRVNTOw0KICAgID4gK30NCiAgICA+IGRpZmYgLS1naXQNCiAgICA+IGEv TWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJp YWJsZVN0YW5kYWxvbg0KICAgID4gZU1tLmMNCiAgICA+IGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNh bC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZVN0YW5kYWxvbg0KICAgID4g ZU1tLmMNCiAgICA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgPiBpbmRleCAwMDAwMDAwMDAw MDAuLjk0Mzk5M2ViNjczOA0KICAgID4gLS0tIC9kZXYvbnVsbA0KICAgID4gKysrDQogICAgPiBi L01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFy aWFibGVTdGFuZGFsb24NCiAgICA+IGVNbS5jDQogICAgPiBAQCAtMCwwICsxLDg5IEBADQogICAg PiArLyoqIEBmaWxlDQogICAgPiArDQogICAgPiArICBQYXJ0cyBvZiB0aGUgU01NL01NIGltcGxl bWVudGF0aW9uIHRoYXQgYXJlIHNwZWNpZmljIHRvIHN0YW5kYWxvbmUgTU0NCiAgICA+ICsNCiAg ICA+ICtDb3B5cmlnaHQgKGMpIDIwMTEgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJp Z2h0cyByZXNlcnZlZC4gPEJSPg0KICAgID4gK0NvcHlyaWdodCAoYykgMjAxOCwgTGluYXJvLCBM dGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIDxCUj4NCiAgICA+ICtTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KICAgID4gKw0KICAgID4gKyoqLw0KICAgID4gKw0K ICAgID4gKyNpbmNsdWRlICJWYXJpYWJsZS5oIg0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4g KyAgVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIGJ1ZmZlciBpcyB2YWxpZCBwZXIgcHJvY2Vz c29yIGFyY2hpdGVjdHVyZSBhbmQNCiAgICA+ICsgIGRvZXMgbm90IG92ZXJsYXAgd2l0aCBTTVJB TS4NCiAgICA+ICsNCiAgICA+ICsgIEBwYXJhbSBCdWZmZXIgVGhlIGJ1ZmZlciBzdGFydCBhZGRy ZXNzIHRvIGJlIGNoZWNrZWQuDQogICAgPiArICBAcGFyYW0gTGVuZ3RoIFRoZSBidWZmZXIgbGVu Z3RoIHRvIGJlIGNoZWNrZWQuDQogICAgPiArDQogICAgPiArICBAcmV0dmFsIFRSVUUgIFRoaXMg YnVmZmVyIGlzIHZhbGlkIHBlciBwcm9jZXNzb3IgYXJjaGl0ZWN0dXJlIGFuZCBkb2VzIG5vdA0K ICAgID4gKyAgICAgICAgICAgICAgICBvdmVybGFwIHdpdGggU01SQU0uDQogICAgPiArICBAcmV0 dmFsIEZBTFNFIFRoaXMgYnVmZmVyIGlzIG5vdCB2YWxpZCBwZXIgcHJvY2Vzc29yIGFyY2hpdGVj dHVyZSBvciBvdmVybGFwcw0KICAgID4gKyAgICAgICAgICAgICAgICB3aXRoIFNNUkFNLg0KICAg ID4gKyoqLw0KICAgID4gK0JPT0xFQU4NCiAgICA+ICtWYXJpYWJsZVNtbUlzQnVmZmVyT3V0c2lk ZVNtbVZhbGlkICgNCiAgICA+ICsgIElOIEVGSV9QSFlTSUNBTF9BRERSRVNTICBCdWZmZXIsDQog ICAgPiArICBJTiBVSU5UNjQgICAgICAgICAgICAgICAgTGVuZ3RoDQogICAgPiArICApDQogICAg PiArew0KICAgID4gKyAgcmV0dXJuIFRSVUU7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8q Kg0KICAgID4gKyAgTm90aWZ5IHRoZSBzeXN0ZW0gdGhhdCB0aGUgU01NIHZhcmlhYmxlIGRyaXZl ciBpcyByZWFkeS4NCiAgICA+ICsqKi8NCiAgICA+ICtWT0lEDQogICAgPiArVmFyaWFibGVOb3Rp ZnlTbW1SZWFkeSAoDQogICAgPiArICBWT0lEDQogICAgPiArICApDQogICAgPiArew0KICAgID4g K30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIE5vdGlmeSB0aGUgc3lzdGVtIHRoYXQg dGhlIFNNTSB2YXJpYWJsZSB3cml0ZSBkcml2ZXIgaXMgcmVhZHkuDQogICAgPiArKiovDQogICAg PiArVk9JRA0KICAgID4gK1ZhcmlhYmxlTm90aWZ5U21tV3JpdGVSZWFkeSAoDQogICAgPiArICBW T0lEDQogICAgPiArICApDQogICAgPiArew0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioN CiAgICA+ICsgIFZhcmlhYmxlIHNlcnZpY2UgTU0gZHJpdmVyIGVudHJ5IHBvaW50Lg0KICAgID4g Kw0KICAgID4gKyAgQHBhcmFtW2luXSBJbWFnZUhhbmRsZSAgICBBIGhhbmRsZSBmb3IgdGhlIGlt YWdlIHRoYXQgaXMgaW5pdGlhbGl6aW5nIHRoaXMNCiAgICA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZHJpdmVyDQogICAgPiArICBAcGFyYW1baW5dIE1tU3lzdGVtVGFibGUgIEEgcG9p bnRlciB0byB0aGUgTU0gc3lzdGVtIHRhYmxlDQogICAgPiArDQogICAgPiArICBAcmV0dmFsIEVG SV9TVUNDRVNTICAgICAgIFZhcmlhYmxlIHNlcnZpY2Ugc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVk Lg0KICAgID4gKyoqLw0KICAgID4gK0VGSV9TVEFUVVMNCiAgICA+ICtFRklBUEkNCiAgICA+ICtW YXJpYWJsZVNlcnZpY2VJbml0aWFsaXplICgNCiAgICA+ICsgIElOIEVGSV9IQU5ETEUgICAgICAg ICAgIEltYWdlSGFuZGxlLA0KICAgID4gKyAgSU4gRUZJX01NX1NZU1RFTV9UQUJMRSAgKk1tU3lz dGVtVGFibGUNCiAgICA+ICsgICkNCiAgICA+ICt7DQogICAgPiArICByZXR1cm4gTW1WYXJpYWJs ZVNlcnZpY2VJbml0aWFsaXplICgpOw0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAg ICA+ICsgIFdoZXRoZXIgdGhlIFRDRyBvciBUQ0cyIHByb3RvY29scyBhcmUgaW5zdGFsbGVkIGlu IHRoZSBVRUZJIHByb3RvY29sDQogICAgPiBkYXRhYmFzZS4NCiAgICA+ICsgIFRoaXMgaW5mb3Jt YXRpb24gaXMgdXNlZCBieSB0aGUgTW9yTG9jayBjb2RlIHRvIGluZmVyIHdoZXRoZXIgYW4gZXhp c3RpbmcNCiAgICA+ICsgIE1PUiB2YXJpYWJsZSBpcyBsZWdpdGltYXRlIG9yIG5vdC4NCiAgICA+ ICsNCiAgICA+ICsgIEByZXR2YWwgVFJVRSAgRWl0aGVyIHRoZSBUQ0cgb3IgVENHMiBwcm90b2Nv bCBpcyBpbnN0YWxsZWQgaW4gdGhlIFVFRkkNCiAgICA+ICsgICAgICAgICAgICAgICAgcHJvdG9j b2wgZGF0YWJhc2UNCiAgICA+ICsgIEByZXR2YWwgRkFMU0UgTmVpdGhlciB0aGUgVENHIG5vciB0 aGUgVENHMiBwcm90b2NvbCBpcyBpbnN0YWxsZWQgaW4gdGhlIFVFRkkNCiAgICA+ICsgICAgICAg ICAgICAgICAgcHJvdG9jb2wgZGF0YWJhc2UNCiAgICA+ICsqKi8NCiAgICA+ICtCT09MRUFODQog ICAgPiArVmFyaWFibGVIYXZlVGNnUHJvdG9jb2xzICgNCiAgICA+ICsgIFZPSUQNCiAgICA+ICsg ICkNCiAgICA+ICt7DQogICAgPiArICByZXR1cm4gRkFMU0U7DQogICAgPiArfQ0KICAgID4gZGlm ZiAtLWdpdA0KICAgID4gYS9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3Rl ZC9SdW50aW1lRHhlL1ZhcmlhYmxlVHJhZGl0aW9uDQogICAgPiBhbE1tLmMNCiAgICA+IGIvTWRl TW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJs ZVRyYWRpdGlvbg0KICAgID4gYWxNbS5jDQogICAgPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAg ID4gaW5kZXggMDAwMDAwMDAwMDAwLi4wMzY5YzNjZDAxYjENCiAgICA+IC0tLSAvZGV2L251bGwN CiAgICA+ICsrKw0KICAgID4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3Rl Y3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlVHJhZGl0aW9uDQogICAgPiBhbE1tLmMNCiAgICA+IEBA IC0wLDAgKzEsMTMwIEBADQogICAgPiArLyoqIEBmaWxlDQogICAgPiArDQogICAgPiArICBQYXJ0 cyBvZiB0aGUgU01NL01NIGltcGxlbWVudGF0aW9uIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRyYWRp dGlvbmFsIE1NDQogICAgPiArDQogICAgPiArQ29weXJpZ2h0IChjKSAyMDExIC0gMjAxOCwgSW50 ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIDxCUj4NCiAgICA+ICtDb3B5cmln aHQgKGMpIDIwMTgsIExpbmFybywgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLiA8QlI+DQogICAg PiArU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCiAgICA+ICsN CiAgICA+ICsqKi8NCiAgICA+ICsNCiAgICA+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9vdFNl cnZpY2VzVGFibGVMaWIuaD4NCiAgICA+ICsjaW5jbHVkZSA8TGlicmFyeS9TbW1NZW1MaWIuaD4N CiAgICA+ICsjaW5jbHVkZSAiVmFyaWFibGUuaCINCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ ICsgIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBidWZmZXIgaXMgdmFsaWQgcGVyIHByb2Nl c3NvciBhcmNoaXRlY3R1cmUgYW5kDQogICAgPiArICBkb2VzIG5vdCBvdmVybGFwIHdpdGggU01S QU0uDQogICAgPiArDQogICAgPiArICBAcGFyYW0gQnVmZmVyIFRoZSBidWZmZXIgc3RhcnQgYWRk cmVzcyB0byBiZSBjaGVja2VkLg0KICAgID4gKyAgQHBhcmFtIExlbmd0aCBUaGUgYnVmZmVyIGxl bmd0aCB0byBiZSBjaGVja2VkLg0KICAgID4gKw0KICAgID4gKyAgQHJldHZhbCBUUlVFICBUaGlz IGJ1ZmZlciBpcyB2YWxpZCBwZXIgcHJvY2Vzc29yIGFyY2hpdGVjdHVyZSBhbmQgZG9lcyBub3QN CiAgICA+ICsgICAgICAgICAgICAgICAgb3ZlcmxhcCB3aXRoIFNNUkFNLg0KICAgID4gKyAgQHJl dHZhbCBGQUxTRSBUaGlzIGJ1ZmZlciBpcyBub3QgdmFsaWQgcGVyIHByb2Nlc3NvciBhcmNoaXRl Y3R1cmUgb3Igb3ZlcmxhcHMNCiAgICA+ICsgICAgICAgICAgICAgICAgd2l0aCBTTVJBTS4NCiAg ICA+ICsqKi8NCiAgICA+ICtCT09MRUFODQogICAgPiArVmFyaWFibGVTbW1Jc0J1ZmZlck91dHNp ZGVTbW1WYWxpZCAoDQogICAgPiArICBJTiBFRklfUEhZU0lDQUxfQUREUkVTUyAgQnVmZmVyLA0K ICAgID4gKyAgSU4gVUlOVDY0ICAgICAgICAgICAgICAgIExlbmd0aA0KICAgID4gKyAgKQ0KICAg ID4gK3sNCiAgICA+ICsgIHJldHVybiBTbW1Jc0J1ZmZlck91dHNpZGVTbW1WYWxpZCAoQnVmZmVy LCBMZW5ndGgpOw0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsvKioNCiAgICA+ICsgIE5vdGlm eSB0aGUgc3lzdGVtIHRoYXQgdGhlIFNNTSB2YXJpYWJsZSBkcml2ZXIgaXMgcmVhZHkuDQogICAg PiArKiovDQogICAgPiArVk9JRA0KICAgID4gK1ZhcmlhYmxlTm90aWZ5U21tUmVhZHkgKA0KICAg ID4gKyAgVk9JRA0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIEVGSV9TVEFUVVMgIFN0 YXR1czsNCiAgICA+ICsgIEVGSV9IQU5ETEUgIEhhbmRsZTsNCiAgICA+ICsNCiAgICA+ICsgIEhh bmRsZSA9IE5VTEw7DQogICAgPiArICBTdGF0dXMgPSBnQlMtPkluc3RhbGxQcm90b2NvbEludGVy ZmFjZSAoDQogICAgPiArICAgICAgICAgICAgICAgICAgJkhhbmRsZSwNCiAgICA+ICsgICAgICAg ICAgICAgICAgICAmZ0VmaVNtbVZhcmlhYmxlUHJvdG9jb2xHdWlkLA0KICAgID4gKyAgICAgICAg ICAgICAgICAgIEVGSV9OQVRJVkVfSU5URVJGQUNFLA0KICAgID4gKyAgICAgICAgICAgICAgICAg IE5VTEwNCiAgICA+ICsgICAgICAgICAgICAgICAgICApOw0KICAgID4gKyAgQVNTRVJUX0VGSV9F UlJPUiAoU3RhdHVzKTsNCiAgICA+ICt9DQogICAgPiArDQogICAgPiArLyoqDQogICAgPiArICBO b3RpZnkgdGhlIHN5c3RlbSB0aGF0IHRoZSBTTU0gdmFyaWFibGUgd3JpdGUgZHJpdmVyIGlzIHJl YWR5Lg0KICAgID4gKyoqLw0KICAgID4gK1ZPSUQNCiAgICA+ICtWYXJpYWJsZU5vdGlmeVNtbVdy aXRlUmVhZHkgKA0KICAgID4gKyAgVk9JRA0KICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsg IEVGSV9TVEFUVVMgIFN0YXR1czsNCiAgICA+ICsgIEVGSV9IQU5ETEUgIEhhbmRsZTsNCiAgICA+ ICsNCiAgICA+ICsgIEhhbmRsZSA9IE5VTEw7DQogICAgPiArICBTdGF0dXMgPSBnQlMtPkluc3Rh bGxQcm90b2NvbEludGVyZmFjZSAoDQogICAgPiArICAgICAgICAgICAgICAgICAgJkhhbmRsZSwN CiAgICA+ICsgICAgICAgICAgICAgICAgICAmZ1NtbVZhcmlhYmxlV3JpdGVHdWlkLA0KICAgID4g KyAgICAgICAgICAgICAgICAgIEVGSV9OQVRJVkVfSU5URVJGQUNFLA0KICAgID4gKyAgICAgICAg ICAgICAgICAgIE5VTEwNCiAgICA+ICsgICAgICAgICAgICAgICAgICApOw0KICAgID4gKyAgQVNT RVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCiAgICA+ICt9DQogICAgPiArDQogICAgPiArLyoqDQog ICAgPiArICBWYXJpYWJsZSBzZXJ2aWNlIE1NIGRyaXZlciBlbnRyeSBwb2ludA0KICAgID4gKw0K ICAgID4gKyAgQHBhcmFtW2luXSBJbWFnZUhhbmRsZSAgICBBIGhhbmRsZSBmb3IgdGhlIGltYWdl IHRoYXQgaXMgaW5pdGlhbGl6aW5nIHRoaXMNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZHJpdmVyDQogICAgPiArICBAcGFyYW1baW5dIFN5c3RlbVRhYmxlICAgIEEgcG9pbnRl ciB0byB0aGUgRUZJIHN5c3RlbSB0YWJsZQ0KICAgID4gKw0KICAgID4gKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICBWYXJpYWJsZSBzZXJ2aWNlIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZC4N CiAgICA+ICsqKi8NCiAgICA+ICtFRklfU1RBVFVTDQogICAgPiArRUZJQVBJDQogICAgPiArVmFy aWFibGVTZXJ2aWNlSW5pdGlhbGl6ZSAoDQogICAgPiArICBJTiBFRklfSEFORExFICAgICAgICBJ bWFnZUhhbmRsZSwNCiAgICA+ICsgIElOIEVGSV9TWVNURU1fVEFCTEUgICpTeXN0ZW1UYWJsZQ0K ICAgID4gKyAgKQ0KICAgID4gK3sNCiAgICA+ICsgIHJldHVybiBNbVZhcmlhYmxlU2VydmljZUlu aXRpYWxpemUgKCk7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKy8qKg0KICAgID4gKyAgV2hl dGhlciB0aGUgVENHIG9yIFRDRzIgcHJvdG9jb2xzIGFyZSBpbnN0YWxsZWQgaW4gdGhlIFVFRkkg cHJvdG9jb2wNCiAgICA+IGRhdGFiYXNlLg0KICAgID4gKyAgVGhpcyBpbmZvcm1hdGlvbiBpcyB1 c2VkIGJ5IHRoZSBNb3JMb2NrIGNvZGUgdG8gaW5mZXIgd2hldGhlciBhbiBleGlzdGluZw0KICAg ID4gKyAgTU9SIHZhcmlhYmxlIGlzIGxlZ2l0aW1hdGUgb3Igbm90Lg0KICAgID4gKw0KICAgID4g KyAgQHJldHZhbCBUUlVFICBFaXRoZXIgdGhlIFRDRyBvciBUQ0cyIHByb3RvY29sIGlzIGluc3Rh bGxlZCBpbiB0aGUgVUVGSQ0KICAgID4gKyAgICAgICAgICAgICAgICBwcm90b2NvbCBkYXRhYmFz ZQ0KICAgID4gKyAgQHJldHZhbCBGQUxTRSBOZWl0aGVyIHRoZSBUQ0cgbm9yIHRoZSBUQ0cyIHBy b3RvY29sIGlzIGluc3RhbGxlZCBpbiB0aGUgVUVGSQ0KICAgID4gKyAgICAgICAgICAgICAgICBw cm90b2NvbCBkYXRhYmFzZQ0KICAgID4gKyoqLw0KICAgID4gK0JPT0xFQU4NCiAgICA+ICtWYXJp YWJsZUhhdmVUY2dQcm90b2NvbHMgKA0KICAgID4gKyAgVk9JRA0KICAgID4gKyAgKQ0KICAgID4g K3sNCiAgICA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCiAgICA+ICsgIFZPSUQgICAgICAgICpJ bnRlcmZhY2U7DQogICAgPiArDQogICAgPiArICBTdGF0dXMgPSBnQlMtPkxvY2F0ZVByb3RvY29s ICgNCiAgICA+ICsgICAgICAgICAgICAgICAgICAmZ0VmaVRjZzJQcm90b2NvbEd1aWQsDQogICAg PiArICAgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvLyBSZWdpc3Ry YXRpb24NCiAgICA+ICsgICAgICAgICAgICAgICAgICAmSW50ZXJmYWNlDQogICAgPiArICAgICAg ICAgICAgICAgICAgKTsNCiAgICA+ICsgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAg PiArICAgIHJldHVybiBUUlVFOw0KICAgID4gKyAgfQ0KICAgID4gKw0KICAgID4gKyAgU3RhdHVz ID0gZ0JTLT5Mb2NhdGVQcm90b2NvbCAoDQogICAgPiArICAgICAgICAgICAgICAgICAgJmdFZmlU Y2dQcm90b2NvbEd1aWQsDQogICAgPiArICAgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAg ICAgICAgICAgICAvLyBSZWdpc3RyYXRpb24NCiAgICA+ICsgICAgICAgICAgICAgICAgICAmSW50 ZXJmYWNlDQogICAgPiArICAgICAgICAgICAgICAgICAgKTsNCiAgICA+ICsgIHJldHVybiAhRUZJ X0VSUk9SIChTdGF0dXMpOw0KICAgID4gK30NCiAgICA+IGRpZmYgLS1naXQNCiAgICA+IGEvTWRl TW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJs ZVJ1bnRpbWVEDQogICAgPiB4ZS51bmkNCiAgICA+IGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9W YXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZVJ1bnRpbWVEDQogICAgPiB4ZS51 bmkNCiAgICA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgPiBpbmRleCAwMDAwMDAwMDAwMDAu LjIyN2I4YzZmYWQyNA0KICAgID4gLS0tIC9kZXYvbnVsbA0KICAgID4gKysrDQogICAgPiBiL01k ZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFi bGVSdW50aW1lRA0KICAgID4geGUudW5pDQogICAgPiBAQCAtMCwwICsxLDIyIEBADQogICAgPiAr Ly8gLyoqIEBmaWxlDQogICAgPiArLy8gUHJvdmlkZXMgdmFyaWFibGUgc2VydmljZS4NCiAgICA+ ICsvLw0KICAgID4gKy8vIFRoaXMgbW9kdWxlIGluc3RhbGxzIHZhcmlhYmxlIGFyY2ggcHJvdG9j b2wgYW5kIHZhcmlhYmxlIHdyaXRlIGFyY2ggcHJvdG9jb2wNCiAgICA+IHRvIHByb3ZpZGUNCiAg ICA+ICsvLyB2YXJpYWJsZSBzZXJ2aWNlczogU2V0VmFyaWFibGUsIEdldFZhcmlhYmxlLCBHZXRO ZXh0VmFyaWFibGVOYW1lIGFuZA0KICAgID4gUXVlcnlWYXJpYWJsZUluZm8uDQogICAgPiArLy8N CiAgICA+ICsvLyBDYXV0aW9uOiBUaGlzIG1vZHVsZSByZXF1aXJlcyBhZGRpdGlvbmFsIHJldmll dyB3aGVuIG1vZGlmaWVkLg0KICAgID4gKy8vIFRoaXMgZHJpdmVyIHdpbGwgaGF2ZSBleHRlcm5h bCBpbnB1dCAtIHZhcmlhYmxlIGRhdGEuDQogICAgPiArLy8gVGhpcyBleHRlcm5hbCBpbnB1dCBt dXN0IGJlIHZhbGlkYXRlZCBjYXJlZnVsbHkgdG8gYXZvaWQgc2VjdXJpdHkgaXNzdWVzIHN1Y2gN CiAgICA+IGFzDQogICAgPiArLy8gYnVmZmVyIG92ZXJmbG93IG9yIGludGVnZXIgb3ZlcmZsb3cu DQogICAgPiArLy8NCiAgICA+ICsvLyBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDE1LCBJbnRlbCBD b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQogICAgPiArLy8NCiAgICA+ICsv LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KICAgID4gKy8v DQogICAgPiArLy8gKiovDQogICAgPiArDQogICAgPiArDQogICAgPiArI3N0cmluZyBTVFJfTU9E VUxFX0FCU1RSQUNUICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAiUHJvdmlkZXMgdmFyaWFi bGUNCiAgICA+IHNlcnZpY2UiDQogICAgPiArDQogICAgPiArI3N0cmluZyBTVFJfTU9EVUxFX0RF U0NSSVBUSU9OICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAiVGhpcyBtb2R1bGUNCiAgICA+IGlu c3RhbGxzIHZhcmlhYmxlIGFyY2ggcHJvdG9jb2wgYW5kIHZhcmlhYmxlIHdyaXRlIGFyY2ggcHJv dG9jb2wgdG8gcHJvdmlkZQ0KICAgID4gdmFyaWFibGUgc2VydmljZXM6IFNldFZhcmlhYmxlLCBH ZXRWYXJpYWJsZSwgR2V0TmV4dFZhcmlhYmxlTmFtZSBhbmQNCiAgICA+IFF1ZXJ5VmFyaWFibGVJ bmZvLiBDYXV0aW9uOiBUaGlzIG1vZHVsZSByZXF1aXJlcyBhZGRpdGlvbmFsIHJldmlldyB3aGVu DQogICAgPiBtb2RpZmllZC4gVGhpcyBkcml2ZXIgd2lsbCBoYXZlIGV4dGVybmFsIGlucHV0IC0g dmFyaWFibGUgZGF0YS4gVGhpcyBleHRlcm5hbCBpbnB1dA0KICAgID4gbXVzdCBiZSB2YWxpZGF0 ZWQgY2FyZWZ1bGx5IHRvIGF2b2lkIHNlY3VyaXR5IGlzc3VlcyBzdWNoIGFzIGJ1ZmZlciBvdmVy ZmxvdyBvcg0KICAgID4gaW50ZWdlciBvdmVyZmxvdy4iDQogICAgPiArDQogICAgPiBkaWZmIC0t Z2l0DQogICAgPiBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1 bnRpbWVEeGUvVmFyaWFibGVSdW50aW1lRA0KICAgID4geGVFeHRyYS51bmkNCiAgICA+IGIvTWRl TW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJs ZVJ1bnRpbWVEDQogICAgPiB4ZUV4dHJhLnVuaQ0KICAgID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN CiAgICA+IGluZGV4IDAwMDAwMDAwMDAwMC4uZjA5NzY0MThmZjgxDQogICAgPiAtLS0gL2Rldi9u dWxsDQogICAgPiArKysNCiAgICA+IGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Q cm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZVJ1bnRpbWVEDQogICAgPiB4ZUV4dHJhLnVuaQ0K ICAgID4gQEAgLTAsMCArMSwxNCBAQA0KICAgID4gKy8vIC8qKiBAZmlsZQ0KICAgID4gKy8vIFZh cmlhYmxlUnVudGltZUR4ZSBMb2NhbGl6ZWQgU3RyaW5ncyBhbmQgQ29udGVudA0KICAgID4gKy8v DQogICAgPiArLy8gQ29weXJpZ2h0IChjKSAyMDEzIC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24u IEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KICAgID4gKy8vDQogICAgPiArLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCiAgICA+ICsvLw0KICAgID4gKy8v ICoqLw0KICAgID4gKw0KICAgID4gKyNzdHJpbmcgU1RSX1BST1BFUlRJRVNfTU9EVUxFX05BTUUN CiAgICA+ICsjbGFuZ3VhZ2UgZW4tVVMNCiAgICA+ICsiVmFyaWFibGVSdW50aW1lRHhlIG1vZHVs ZSINCiAgICA+ICsNCiAgICA+ICsNCiAgICA+IGRpZmYgLS1naXQNCiAgICA+IGEvTWRlTW9kdWxl UGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZVNtbS51 bmkNCiAgICA+IGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVu dGltZUR4ZS9WYXJpYWJsZVNtbS51bmkNCiAgICA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAg PiBpbmRleCAwMDAwMDAwMDAwMDAuLjQxNGM3Y2RjN2MwNQ0KICAgID4gLS0tIC9kZXYvbnVsbA0K ICAgID4gKysrDQogICAgPiBiL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVj dGVkL1J1bnRpbWVEeGUvVmFyaWFibGVTbW0udW5pDQogICAgPiBAQCAtMCwwICsxLDI3IEBADQog ICAgPiArLy8gLyoqIEBmaWxlDQogICAgPiArLy8gUHJvdmlkZXMgU01NIHZhcmlhYmxlIHNlcnZp Y2UuDQogICAgPiArLy8NCiAgICA+ICsvLyBUaGlzIG1vZHVsZSBpbnN0YWxscyBTTU0gdmFyaWFi bGUgcHJvdG9jb2wgaW50byBTTU0gcHJvdG9jb2wgZGF0YWJhc2UsDQogICAgPiArLy8gd2hpY2gg Y2FuIGJlIHVzZWQgYnkgU01NIGRyaXZlciwgYW5kIGluc3RhbGxzIFNNTSB2YXJpYWJsZSBwcm90 b2NvbA0KICAgID4gKy8vIGludG8gQlMgcHJvdG9jb2wgZGF0YWJhc2UsIHdoaWNoIGNhbiBiZSB1 c2VkIHRvIG5vdGlmeSB0aGUgU01NIFJ1bnRpbWUNCiAgICA+ICsvLyBEeGUgZHJpdmVyIHRoYXQg dGhlIFNNTSB2YXJpYWJsZSBzZXJ2aWNlIGlzIHJlYWR5Lg0KICAgID4gKy8vIFRoaXMgbW9kdWxl IHNob3VsZCBiZSB1c2VkIHdpdGggU01NIFJ1bnRpbWUgRFhFIG1vZHVsZSB0b2dldGhlci4gVGhl DQogICAgPiArLy8gU01NIFJ1bnRpbWUgRFhFIG1vZHVsZSB3b3VsZCBpbnN0YWxsIHZhcmlhYmxl IGFyY2ggcHJvdG9jb2wgYW5kIHZhcmlhYmxlDQogICAgPiArLy8gd3JpdGUgYXJjaCBwcm90b2Nv bCBiYXNlZCBvbiBTTU0gdmFyaWFibGUgbW9kdWxlLg0KICAgID4gKy8vDQogICAgPiArLy8gQ2F1 dGlvbjogVGhpcyBtb2R1bGUgcmVxdWlyZXMgYWRkaXRpb25hbCByZXZpZXcgd2hlbiBtb2RpZmll ZC4NCiAgICA+ICsvLyBUaGlzIGRyaXZlciB3aWxsIGhhdmUgZXh0ZXJuYWwgaW5wdXQgLSB2YXJp YWJsZSBkYXRhIGFuZCBjb21tdW5pY2F0ZSBidWZmZXIgaW4NCiAgICA+IFNNTSBtb2RlLg0KICAg ID4gKy8vIFRoaXMgZXh0ZXJuYWwgaW5wdXQgbXVzdCBiZSB2YWxpZGF0ZWQgY2FyZWZ1bGx5IHRv IGF2b2lkIHNlY3VyaXR5IGlzc3VlcyBzdWNoDQogICAgPiBhcw0KICAgID4gKy8vIGJ1ZmZlciBv dmVyZmxvdyBvciBpbnRlZ2VyIG92ZXJmbG93Lg0KICAgID4gKy8vDQogICAgPiArLy8gQ29weXJp Z2h0IChjKSAyMDEwIC0gMjAxNSwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2 ZWQuPEJSPg0KICAgID4gKy8vDQogICAgPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJT RC0yLUNsYXVzZS1QYXRlbnQNCiAgICA+ICsvLw0KICAgID4gKy8vICoqLw0KICAgID4gKw0KICAg ID4gKw0KICAgID4gKyNzdHJpbmcgU1RSX01PRFVMRV9BQlNUUkFDVCAgICAgICAgICAgICAjbGFu Z3VhZ2UgZW4tVVMgIlByb3ZpZGVzIFNNTQ0KICAgID4gdmFyaWFibGUgc2VydmljZSINCiAgICA+ ICsNCiAgICA+ICsjc3RyaW5nIFNUUl9NT0RVTEVfREVTQ1JJUFRJT04gICAgICAgICAgI2xhbmd1 YWdlIGVuLVVTICJUaGlzIG1vZHVsZQ0KICAgID4gaW5zdGFsbHMgU01NIHZhcmlhYmxlIHByb3Rv Y29sIGludG8gU01NIHByb3RvY29sIGRhdGFiYXNlLCB3aGljaCBjYW4gYmUgdXNlZA0KICAgID4g YnkgU01NIGRyaXZlciwgYW5kIGluc3RhbGxzIFNNTSB2YXJpYWJsZSBwcm90b2NvbCBpbnRvIEJT IHByb3RvY29sIGRhdGFiYXNlLA0KICAgID4gd2hpY2ggY2FuIGJlIHVzZWQgdG8gbm90aWZ5IHRo ZSBTTU0gUnVudGltZSBEWEUgZHJpdmVyIHRoYXQgdGhlIFNNTSB2YXJpYWJsZQ0KICAgID4gc2Vy dmljZSBpcyByZWFkeS4gVGhpcyBtb2R1bGUgc2hvdWxkIGJlIHVzZWQgd2l0aCBTTU0gUnVudGlt ZSBEWEUgbW9kdWxlDQogICAgPiB0b2dldGhlci4gVGhlIFNNTSBSdW50aW1lIERYRSBtb2R1bGUg d291bGQgaW5zdGFsbCB2YXJpYWJsZSBhcmNoIHByb3RvY29sDQogICAgPiBhbmQgdmFyaWFibGUg d3JpdGUgYXJjaCBwcm90b2NvbCBiYXNlZCBvbiBTTU0gdmFyaWFibGUgbW9kdWxlLiBDYXV0aW9u OiBUaGlzDQogICAgPiBtb2R1bGUgcmVxdWlyZXMgYWRkaXRpb25hbCByZXZpZXcgd2hlbiBtb2Rp ZmllZC4gVGhpcyBkcml2ZXIgd2lsbCBoYXZlIGV4dGVybmFsDQogICAgPiBpbnB1dCAtIHZhcmlh YmxlIGRhdGEgYW5kIGNvbW11bmljYXRlIGJ1ZmZlciBpbiBTTU0gbW9kZS4gVGhpcyBleHRlcm5h bCBpbnB1dA0KICAgID4gbXVzdCBiZSB2YWxpZGF0ZWQgY2FyZWZ1bGx5IHRvIGF2b2lkIHNlY3Vy aXR5IGlzc3VlcyBzdWNoIGFzIGJ1ZmZlciBvdmVyZmxvdyBvcg0KICAgID4gaW50ZWdlciBvdmVy Zmxvdy4iDQogICAgPiArDQogICAgPiBkaWZmIC0tZ2l0DQogICAgPiBhL01kZU1vZHVsZVBrZy9V bml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVTbW1FeHRyDQog ICAgPiBhLnVuaQ0KICAgID4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3Rl Y3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlU21tRXh0cg0KICAgID4gYS51bmkNCiAgICA+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQogICAgPiBpbmRleCAwMDAwMDAwMDAwMDAuLmY3MjQyMDlmM2RjMg0K ICAgID4gLS0tIC9kZXYvbnVsbA0KICAgID4gKysrDQogICAgPiBiL01kZU1vZHVsZVBrZy9Vbml2 ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVTbW1FeHRyDQogICAg PiBhLnVuaQ0KICAgID4gQEAgLTAsMCArMSwxNCBAQA0KICAgID4gKy8vIC8qKiBAZmlsZQ0KICAg ID4gKy8vIFZhcmlhYmxlU21tIExvY2FsaXplZCBTdHJpbmdzIGFuZCBDb250ZW50DQogICAgPiAr Ly8NCiAgICA+ICsvLyBDb3B5cmlnaHQgKGMpIDIwMTMgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlv bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQogICAgPiArLy8NCiAgICA+ICsvLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KICAgID4gKy8vDQogICAgPiAr Ly8gKiovDQogICAgPiArDQogICAgPiArI3N0cmluZyBTVFJfUFJPUEVSVElFU19NT0RVTEVfTkFN RQ0KICAgID4gKyNsYW5ndWFnZSBlbi1VUw0KICAgID4gKyJWYXJpYWJsZVNtbSBtb2R1bGUiDQog ICAgPiArDQogICAgPiArDQogICAgPiBkaWZmIC0tZ2l0DQogICAgPiBhL01kZU1vZHVsZVBrZy9V bml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVTbW1SdW50DQog ICAgPiBpbWVEeGUudW5pDQogICAgPiBiL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUv UHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVTbW1SdW50DQogICAgPiBpbWVEeGUudW5pDQog ICAgPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgID4gaW5kZXggMDAwMDAwMDAwMDAwLi45NjM5 ZjAwMDc3YTANCiAgICA+IC0tLSAvZGV2L251bGwNCiAgICA+ICsrKw0KICAgID4gYi9NZGVNb2R1 bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlU21t UnVudA0KICAgID4gaW1lRHhlLnVuaQ0KICAgID4gQEAgLTAsMCArMSwyMyBAQA0KICAgID4gKy8v IC8qKiBAZmlsZQ0KICAgID4gKy8vIFRoaXMgbW9kdWxlIGlzIHRoZSBSdW50aW1lIERYRSBwYXJ0 IGNvcnJlc3BvbmQgdG8gU01NIHZhcmlhYmxlIG1vZHVsZS4NCiAgICA+ICsvLw0KICAgID4gKy8v IEl0IGluc3RhbGxzIHZhcmlhYmxlIGFyY2ggcHJvdG9jb2wgYW5kIHZhcmlhYmxlIHdyaXRlIGFy Y2ggcHJvdG9jb2wgdG8gcHJvdmlkZQ0KICAgID4gKy8vIGZvdXIgRUZJX1JVTlRJTUVfU0VSVklD RVM6IFNldFZhcmlhYmxlLCBHZXRWYXJpYWJsZSwNCiAgICA+IEdldE5leHRWYXJpYWJsZU5hbWUg YW5kIFF1ZXJ5VmFyaWFibGVJbmZvDQogICAgPiArLy8gYW5kIHdvcmtzIHdpdGggU01NIHZhcmlh YmxlIG1vZHVsZSB0b2dldGhlci4NCiAgICA+ICsvLw0KICAgID4gKy8vIENhdXRpb246IFRoaXMg bW9kdWxlIHJlcXVpcmVzIGFkZGl0aW9uYWwgcmV2aWV3IHdoZW4gbW9kaWZpZWQuDQogICAgPiAr Ly8gVGhpcyBkcml2ZXIgd2lsbCBoYXZlIGV4dGVybmFsIGlucHV0IC0gdmFyaWFibGUgZGF0YS4N CiAgICA+ICsvLyBUaGlzIGV4dGVybmFsIGlucHV0IG11c3QgYmUgdmFsaWRhdGVkIGNhcmVmdWxs eSB0byBhdm9pZCBzZWN1cml0eSBpc3N1ZXMgc3VjaA0KICAgID4gYXMNCiAgICA+ICsvLyBidWZm ZXIgb3ZlcmZsb3cgb3IgaW50ZWdlciBvdmVyZmxvdy4NCiAgICA+ICsvLw0KICAgID4gKy8vIENv cHlyaWdodCAoYykgMjAxMCAtIDIwMTQsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl c2VydmVkLjxCUj4NCiAgICA+ICsvLw0KICAgID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBCU0QtMi1DbGF1c2UtUGF0ZW50DQogICAgPiArLy8NCiAgICA+ICsvLyAqKi8NCiAgICA+ICsN CiAgICA+ICsNCiAgICA+ICsjc3RyaW5nIFNUUl9NT0RVTEVfQUJTVFJBQ1QgICAgICAgICAgICAg I2xhbmd1YWdlIGVuLVVTICJUaGUgUnVudGltZSBEWEUNCiAgICA+IHBhcnQgY29ycmVzcG9uZGlu ZyB0byB0aGUgU01NIHZhcmlhYmxlIG1vZHVsZSINCiAgICA+ICsNCiAgICA+ICsjc3RyaW5nIFNU Ul9NT0RVTEVfREVTQ1JJUFRJT04gICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICJJdCBpbnN0YWxs cyB2YXJpYWJsZQ0KICAgID4gYXJjaCBwcm90b2NvbCBhbmQgdmFyaWFibGUgd3JpdGUgYXJjaCBw cm90b2NvbCB0byBwcm92aWRlIGZvdXINCiAgICA+IEVGSV9SVU5USU1FX1NFUlZJQ0VTOiBTZXRW YXJpYWJsZSwgR2V0VmFyaWFibGUsIEdldE5leHRWYXJpYWJsZU5hbWUgYW5kDQogICAgPiBRdWVy eVZhcmlhYmxlSW5mbyBhbmQgd29ya3Mgd2l0aCBTTU0gdmFyaWFibGUgbW9kdWxlIHRvZ2V0aGVy LiINCiAgICA+ICsNCiAgICA+IGRpZmYgLS1naXQNCiAgICA+IGEvTWRlTW9kdWxlUGtnL1VuaXZl cnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZVNtbVJ1bnQNCiAgICA+ IGltZUR4ZUV4dHJhLnVuaQ0KICAgID4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxl L1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlU21tUnVudA0KICAgID4gaW1lRHhlRXh0cmEu dW5pDQogICAgPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgID4gaW5kZXggMDAwMDAwMDAwMDAw Li5iYmFiZGY4MjczNmINCiAgICA+IC0tLSAvZGV2L251bGwNCiAgICA+ICsrKw0KICAgID4gYi9N ZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1Zhcmlh YmxlU21tUnVudA0KICAgID4gaW1lRHhlRXh0cmEudW5pDQogICAgPiBAQCAtMCwwICsxLDE0IEBA DQogICAgPiArLy8gLyoqIEBmaWxlDQogICAgPiArLy8gVmFyaWFibGVTbW1SdW50aW1lRHhlIExv Y2FsaXplZCBTdHJpbmdzIGFuZCBDb250ZW50DQogICAgPiArLy8NCiAgICA+ICsvLyBDb3B5cmln aHQgKGMpIDIwMTMgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl ZC48QlI+DQogICAgPiArLy8NCiAgICA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNE LTItQ2xhdXNlLVBhdGVudA0KICAgID4gKy8vDQogICAgPiArLy8gKiovDQogICAgPiArDQogICAg PiArI3N0cmluZyBTVFJfUFJPUEVSVElFU19NT0RVTEVfTkFNRQ0KICAgID4gKyNsYW5ndWFnZSBl bi1VUw0KICAgID4gKyJWYXJpYWJsZVNtbVJ1bnRpbWVEeGUgbW9kdWxlIg0KICAgID4gKw0KICAg ID4gKw0KICAgID4gLS0NCiAgICA+IDIuMzUuMS53aW5kb3dzLjINCg0KDQoNCiAgICANCg0KDQoN Cg==