From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by mx.groups.io with SMTP id smtpd.web08.8766.1644309053456066791 for ; Tue, 08 Feb 2022 00:30:54 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=fUTKG/0D; spf=pass (domain: intel.com, ip: 134.134.136.100, mailfrom: yi1.li@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1644309053; x=1675845053; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=aHIgV6Yg+Z3oazQDzMxbxIyxwQPqk+Y8HqzpvNPviTo=; b=fUTKG/0Dhf76R6xfGQLSSf61PE1XCaKjIablqJle6+FvSUpuLSmUHxWG orGmqMxbnYxTjeBPNkML4SucUGrn7P6Gz4JAT905ZqA86NXAadHwzPT22 TUGYIvfWxNRDooEO5Bbb+xTQ83Igmq7JuU5GK+OgflFEjdt0rN7KYG4D3 Cyn6L5KlckDA7uyJiLTcTZbTD78R9nJ6IruDf7pLn4fbJz3uuodgkD2xI Id+Fzr7dhwsp5iJ3/Wo8w2gL3ECBOUZicdquH31pP4OHcGLMubQ4FCya/ 749ApeMUydWClbBQ9rR8F2yguORcUTB3eT7rAsBv6SPWckokEYV3hUx3l A==; X-IronPort-AV: E=McAfee;i="6200,9189,10251"; a="312198086" X-IronPort-AV: E=Sophos;i="5.88,352,1635231600"; d="scan'208";a="312198086" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Feb 2022 00:30:42 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,352,1635231600"; d="scan'208";a="481870722" Received: from fmsmsx605.amr.corp.intel.com ([10.18.126.85]) by orsmga003.jf.intel.com with ESMTP; 08 Feb 2022 00:30:42 -0800 Received: from fmsmsx611.amr.corp.intel.com (10.18.126.91) by fmsmsx605.amr.corp.intel.com (10.18.126.85) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Tue, 8 Feb 2022 00:30:42 -0800 Received: from fmsmsx612.amr.corp.intel.com (10.18.126.92) by fmsmsx611.amr.corp.intel.com (10.18.126.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Tue, 8 Feb 2022 00:30:41 -0800 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by fmsmsx612.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20 via Frontend Transport; Tue, 8 Feb 2022 00:30:41 -0800 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (104.47.57.169) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.20; Tue, 8 Feb 2022 00:30:41 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FMWG2PWQLky+LE3iWiEIfQ6bR8Qhk+g4I0NlET7yFe6w7N8+a6dHRcA2us3JC46L710YG6RynkS4IU8Ivs0inHx1ZEtPtN761axSrXEImwqsk3Y5LxlGsenb4PiCBzwT8LWLimeVlUPzP8R6H2qitgYJbzNsognnIBq0HASVSFShf5Ult4EOtFEUjc02FPWX9s2KBHKPflVN361gH9nuS3TMUAOXOLr83HPo8V2+v8EQ3rl3JI2gsTUAdHwpmC4ZuxhJc3Yh73x8rtwVlW8GtJd0Rx4FvtcbsDXsZsaAi3BiTrXpdfXCPnYjblfWrbaymj30K4vWIjMBVZRJ8hPq9w== 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=aHIgV6Yg+Z3oazQDzMxbxIyxwQPqk+Y8HqzpvNPviTo=; b=NH/2tK7VmM7ABwZz7Gic+qXw+JOVzGNyAzv6wHMjY5x9YG8ytlE+O6DsOEUqu4qksCTActcro8ubJVKsFXdLCA4ua08kbSlJWtznYmAETubQXHQhMbaFTwDPgvnpicVaAje6z55wy7QWvwce0iiUABsFAwbn7K1hRG1fXiB6tM502fyepK42Qrfj7VSjvkZsFgq5jboOx7C5e46+eQW3xgMHwV3Y8s8S2bTZDh7BtHRkLpEdD2fgDN9Qa9aIjkwu+G47Zxzf0D9tW/01fg5gdq3cWNCjFy/Fgk3T2R/IoVuyjTl56PzKIUoqy3P87plxpDKxmtgn8ACTS3eBa/hI8Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none Received: from MWHPR11MB1597.namprd11.prod.outlook.com (2603:10b6:301:d::13) by MWHPR11MB1694.namprd11.prod.outlook.com (2603:10b6:300:21::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4951.17; Tue, 8 Feb 2022 08:30:39 +0000 Received: from MWHPR11MB1597.namprd11.prod.outlook.com ([fe80::551c:c7d3:9cc6:b10f]) by MWHPR11MB1597.namprd11.prod.outlook.com ([fe80::551c:c7d3:9cc6:b10f%10]) with mapi id 15.20.4951.019; Tue, 8 Feb 2022 08:30:39 +0000 From: "yi1 li" To: "Yao, Jiewen" CC: "devel@edk2.groups.io" , "Wang, Jian J" , Xiaoyu Lu , "Jiang, Guomin" Subject: Re: [PATCH 2/2] CryptoPkg: Add BigNum NullLib Thread-Topic: [PATCH 2/2] CryptoPkg: Add BigNum NullLib Thread-Index: AQHYFVz43+17lvOh4EuV8AynuyvYAax6rxuAgAEaukCAAIoFgIANAwZQ Date: Tue, 8 Feb 2022 08:30:39 +0000 Message-ID: References: <2453B62F-8856-4915-A6B4-7819F9B991C4@intel.com> <4E330833-C8B3-4ECF-8F14-B8FE54F31420@intel.com> In-Reply-To: <4E330833-C8B3-4ECF-8F14-B8FE54F31420@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.6.200.16 dlp-reaction: no-action authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 499e27e6-19ba-4e36-8132-08d9eadd4999 x-ms-traffictypediagnostic: MWHPR11MB1694:EE_ x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:4714; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: mrW0VfNmwmmrd8YXatiIJzdOGehE8EliUo0op7WaWN5FvrEs0aucI5589wDVBy67PB/QfmeOKi0PQF0k1qpgl9TAc/J8EHOpgAaObRRXQtQC3f23FOFP+rDq8lwKD5DMm9qnmhvEyZ9KBksziOfWy5yL56UOdjznedb0xQwCeYZbKONBQBBe1dk9bAIrghUN4kI11T5/7h9D7xDZVeEwHqBz1BdTrZoWMZiUbRudsVift40owsCbq7+wbcdFR50F6j+JZp28RFFyTKhMFd+NPH4Vu5k6pWto1q+zn2pwuxobqvcDgTZ9WspRHctSxOQjgF23SvoPotvMqCNnuQSILosg1OtowCIwKsrmxXlKQmXA9IX89u+mZu1jokleR00/xrFqQEIL1ptgJnHXPWLfqKFQ6V7IkhMIyxg7W0LUd9YOjtPoRT+wLVfKI1H6I5gvqhjbgyUp4WCUwG3X7NGT6CtbhUE1CzcSxIaJ1Bz+g2UnpXAKi75WoWsLz/d9UQz9R8ieD36o+NxtDiwCe2AlkdqPfU/2tAU9hjtBBOennjNveJgHP7D1qwivXApEHqc/xK2vxsUjbB0/WzWrk6x9Qf7qpi63JWig/djp7DMIjKU/dYzZhUnLYBOrLfYx/8mKGT4cFupL8h9UjElowuuun1iHTdzbrNukXiVQHNRluX4RX0vSudvXpkG1pQbiPePNF9cicgfbYoiTDQHBphz886xxxx3p4FdezkPZrJpuuxoRFwyHdX5sya1qYqg0BWDM6ehGZi2ym6odGfhmeldTtg== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MWHPR11MB1597.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(38100700002)(33656002)(83380400001)(186003)(26005)(122000001)(2906002)(107886003)(6636002)(54906003)(316002)(30864003)(66556008)(66946007)(76116006)(66476007)(66446008)(6506007)(5660300002)(52536014)(53546011)(7696005)(8676002)(508600001)(4326008)(9686003)(38070700005)(55016003)(71200400001)(86362001)(966005)(64756008)(6862004)(8936002)(82960400001)(579004)(559001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?aDFueUpQZGhCL1czSm14V2xDcTFKeTZJVWlxYmptZTU2MllGd3lXd3VQRGxj?= =?utf-8?B?bW1NbE1RNUJwckl2Vk43OGU0V2J3UkhxOEJtOXErMStreGZ5dEF3SlN4TWNU?= =?utf-8?B?dk9YZkJjNjEzU3M3V2Z4c3JEb0pZcHgwVWUyUVN5U29rUC8wcy9GMFJ3UU5i?= =?utf-8?B?RUFPNDNYZzZyZmg1ajlxQVVaSkZVZUd4Wm44NWQxTmxTaTdHUWhPVFJGRTZY?= =?utf-8?B?NFE2OGpCYlhHVERpMHYwTFdXWlEyVlY3QWM1b2VVQkVRWUVjNk1Mb1lSS213?= =?utf-8?B?eW9tMTlzeDRKWjZBakxkWlE2MVU4aHRMaGIxQ09QcWdPU2ZmV2ZmUldYNUUz?= =?utf-8?B?NDRETTMweW9xbndXZlVId3Y5WXM2ZnVRTkhjeFRIQnA4RDhsZzNzTE84ekRu?= =?utf-8?B?WXN2SHZmTTFsK3dxNHlsYTJOeDJneWVZTys1YlpUSHpmUDVCcVl6MUpRdExw?= =?utf-8?B?Qkc5UWZ0Ri9EU21kUWJoOFNGaHJvR1FhYWRFeTI4d0NzTlJtOGlBWHhvWTZH?= =?utf-8?B?d1RrZStOamVhd2NWMzF0ZjFWWkhIRXpneW81YnhrcmdCMzlaamJCdmxWdHpY?= =?utf-8?B?b2VpZnRCbzhHRXE5Z2hGdmdPN2dzd3ZZdUh5T0JJZC92Z0U1KytydHVIdi8x?= =?utf-8?B?aHhSZURsRFRaQnVmTktpS1VXRUhLUUJLa0ZBNlFmVjZIb1BsaThBcGhVWDZH?= =?utf-8?B?VmRXdU4zaW0wVUdmVTVxOVNvNGhEOTdocXR3bnBCUXhsREpwSGlHR0pUOTV0?= =?utf-8?B?cGxxY2Jjelc5ak5EeHVPWVdnU2N0Z2R5dUplVWprdFM2b1ZScTFMYW1HSkpJ?= =?utf-8?B?dENPY2U1anRUTVBYS2VudnJSVGpVN1FwVTdMWlN4VWNicUk3T1BWQURTTEMy?= =?utf-8?B?T09JM3NyeDNXUDM1RWFLcGF0aUNOaUt2OFlLT2ZnNEJVQlJQdExHWE05NUNp?= =?utf-8?B?cFdhQWdTWFNZWDI3MjYrYkwzTTBIQzBpWC9DUkZtbjQ3amNOckIvb2hPNE90?= =?utf-8?B?NkZMbnlJZlpaZXhSYVUrVUJTd1Y4MzNjTmNCMWovUklUejlGYTlDWGNmd21S?= =?utf-8?B?dXlYRk5XbS95M2liMkcrMGRZc2taVmMzWjlaVnhNRExTaS9tSkxmV0t3MTQ4?= =?utf-8?B?bTgrQmJCNHNPQWNvd3g0V09uUGsyRmttcThwS3djMEdiREpqU0NFUzU3L2tH?= =?utf-8?B?OWFMNENnWEdrdDFLallFVUQwMjF1K0dScGl3NUIyeVJneXNFVlczUThPSis1?= =?utf-8?B?MHVLQm5LcHhTeUJQOHdyeWQzYVR5czA3eFFpaHdJcFVjRzkzak16c2NXbGE2?= =?utf-8?B?N1lQa29NK3lPbnU0b0MyWmdzWFd1OEh3WCtzckdGdFZpZC9jN1IxRGx5NUV3?= =?utf-8?B?UGZOQlFXQlBRT2QxcG1wamVOQWlraHVQOFl4TlNDOWtLS3dRQWkwclJmNk4x?= =?utf-8?B?ay85Y3NYZzRxckV4YUowTEZHaUFQSmo4L0FTK200N1BCYURzSEdIVjZSeW1W?= =?utf-8?B?SSs0MVVNQmdaekxEK045TXlVZHBkRXNmcnBFT2pWOEZiTGxaeDdEbTRLSXh0?= =?utf-8?B?T3VjYUdOREJzZ2VkK2t3bUk5SktTTXVjUTB3QWYwWW5WdnZnQThxOVlGSHlI?= =?utf-8?B?aUNISWdaTTJGQmkyVEhVSloxcS9tbGh1VjVwbzl0Z3BXWkNQdVBnQjVFenVB?= =?utf-8?B?SXlGQ3hlaysyL0hwbnNPYktLbVA5WW1kSi9VVUVUZkx0ZmlwUGR2RW10Rndp?= =?utf-8?B?OS8xSlFkQ0JDdUJ1UERsV0RwQ0M4WmdBNGVIdkpSUEo4MkJMMVlUQlVzRGd6?= =?utf-8?B?OWJwb2x4YmV0am05NmxnRTFESHl5aFdjQmJGWkh5NWE0bkJ6NkVVN2d4cGdW?= =?utf-8?B?Ym9GeEdENUovS3RBT0N2TkRXVWpEQlE2eEVpNC9WbVFtOFBmNkVOcW9xQzlv?= =?utf-8?B?WG1RaHFCZ2JlZis4ODFKaHcxQnZyVFNNZVdjdmp2Z0tWNTBLWXZpMENrbENX?= =?utf-8?B?TkVJc1M0cDhmYjRmR21mVjZJWkVocE95dWZwM3F3SmVFQ1ZXKzlVdENlbkQ4?= =?utf-8?B?dlAyR2dHRmlEZy85KzBKL0ZIUE1WalI1OTl6UUNiZ2QrRmJwT1h0L0x4U3pq?= =?utf-8?B?Mm51WkZmNGNPREhnc28yejhyV3BlWllUcG5HanFYNmVKeGhRenBTR3ZycU93?= =?utf-8?B?eFE9PQ==?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MWHPR11MB1597.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 499e27e6-19ba-4e36-8132-08d9eadd4999 X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Feb 2022 08:30:39.2323 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: oqLgg1cUPOY78ZXwrObQ3LHvnHknKWiY49pC3wyjgDpThm1aKXYEOnud87focXRNLnZA+TqfylCcbZpHfU7A+g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR11MB1694 Return-Path: yi1.li@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkNCkkgaGF2ZSBjcmVhdGVkIEJ1Z3ppbGxhIHRvIGRlc2NyaWJlIHdoeSB3ZSBuZWVkIHRvIGFk ZCAgdGhpcyBmZWF0dXJlOiBodHRwczovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hvd19idWcu Y2dpP2lkPTM4MjguDQpXZSB3aWxsIHByb3ZpZGUgcmVsYXRlZCBpbmZvcm1hdGlvbiBieSBjb21t ZW50cyBzdWNoIEJpbiBzaXplIGRpZmZlcmVuY2UgYW5kIG1vcmUuDQoNClRoYW5rcyENCi0tLS0t T3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRl bC5jb20+IA0KU2VudDogTW9uZGF5LCBKYW51YXJ5IDMxLCAyMDIyIDk6MTAgQU0NClRvOiBMaSwg WWkxIDx5aTEubGlAaW50ZWwuY29tPg0KQ2M6IGRldmVsQGVkazIuZ3JvdXBzLmlvOyBXYW5nLCBK aWFuIEogPGppYW4uai53YW5nQGludGVsLmNvbT47IFhpYW95dSBMdSA8eGlhb3l1eC5sdUBpbnRl bC5jb20+OyBKaWFuZywgR3VvbWluIDxndW9taW4uamlhbmdAaW50ZWwuY29tPg0KU3ViamVjdDog UmU6IFtQQVRDSCAyLzJdIENyeXB0b1BrZzogQWRkIEJpZ051bSBOdWxsTGliDQoNCkhpDQpUaGVu IEkgZG9u4oCZdCB1bmRlcnN0YW5kIHdoeSB3ZSBuZWVkIHRoaXMgZmVhdHVyZS4gUGxlYXNlIHN1 Ym1pdCBhIGJ1Z3ppbGxhIHRvIGRlc2NyaWJlIHRoZSBwcm9ibGVtIHN0YXRlbWVudC4gKE5vdCB0 aGUgc29sdXRpb24pDQoNCkFsc28gcGxlYXNlIHByb3ZpZGUgdGhlIHNpemUgZGlmZmVyZW5jZSBp biBwZWkgYW5kIHNtbSBiZWZvcmUgYW5kIGFmdGVyIHlvdXIgcGF0Y2guDQpOb3Qgb25seSB0aGUg Y3J5cHRvIGJpbiBidXQgYWxzbyB0aGUgaW5kaXZpZHVhbCBkcml2ZXIgdXNpbmcgY3J5cHRvIGxp Yiwgc3VjaCBhcyB2YXIgYXV0aCBkcml2ZXIuIFdlIA0KDQp0aGFuayB5b3UhDQpZYW8sIEppZXdl bg0KDQoNCj4g5ZyoIDIwMjLlubQx5pyIMzHml6XvvIzkuIrljYgxOjA477yMTGksIFlpMSA8eWkx LmxpQGludGVsLmNvbT4g5YaZ6YGT77yaDQo+IA0KPiDvu79IaSBKaWV3ZW4NCj4gV2l0aCBidWls ZCBjbWQgJ2J1aWxkIC1wIC5cRWRrMlxDcnlwdG9Qa2dcQ3J5cHRvUGtnLmRzYyAtdCBWUzIwMTkg LWEgWDY0IC1EIENSWVBUT19TRVJWSUNFUz1BTEwnOg0KPiBDcnlwdER4ZS5lZmkgd2lsbCBiZSA4 MTMsNTA0IGJ5dGVzIHdpdGhvdXQgQ3J5cHRCbjsgd2lsbCBiZSA4MTUsMDQwIA0KPiBieXRlcyB3 aXRoIENyeXB0Qm5OdWxsOyB3aWxsIGJlIDgxNSwzNjAgYnl0ZXMgd2l0aCBDcnlwdEJuOyBUaGlz IHBhdGNoIA0KPiBoYXMgbGl0dGxlIGVmZmVjdCBvbiBiaW5hcnkgc2l6ZSBzaW5jZSB0aGUgZGVw ZW5kZW50IE9wZW5zc2wgbGlicmFyeSBpcyBhbHJlYWR5IGVuYWJsZWQgaW4gRURLMi4NCj4gQW5k IENyeXB0Qm5OdWxsIGNhbiBhbHNvIGJlIHVzZWQgaW4gZHJpdmVycyhzdWNoIHBlaSxzbW0pIHdo aWNoIGRvIG5vdCBuZWVkIEJuIGluc3RhbmNlLg0KPiANCj4gVGhhbmtzLg0KPiAtLS0tLU9yaWdp bmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5j b20+DQo+IFNlbnQ6IFN1bmRheSwgSmFudWFyeSAzMCwgMjAyMiA4OjA0IEFNDQo+IFRvOiBMaSwg WWkxIDx5aTEubGlAaW50ZWwuY29tPg0KPiBDYzogZGV2ZWxAZWRrMi5ncm91cHMuaW87IFdhbmcs IEppYW4gSiA8amlhbi5qLndhbmdAaW50ZWwuY29tPjsgWGlhb3l1IA0KPiBMdSA8eGlhb3l1eC5s dUBpbnRlbC5jb20+OyBKaWFuZywgR3VvbWluIDxndW9taW4uamlhbmdAaW50ZWwuY29tPg0KPiBT dWJqZWN0OiBSZTogW1BBVENIIDIvMl0gQ3J5cHRvUGtnOiBBZGQgQmlnTnVtIE51bGxMaWINCj4g DQo+IHRoYW5rIHlvdQ0KPiBzaW5jZSB5b3UgYXJlIHRhbGtpbmcgYWJvdXQgc2l6ZSBvcHRpbWl6 YXRpb24sIHdvdWxkIHlvdSBwbGVhc2Ugc2hhcmUgdGhlIHJlc3VsdD8NCj4gDQo+IHRoYW5rIHlv dSENCj4gWWFvLCBKaWV3ZW4NCj4gDQo+IA0KPj4g5ZyoIDIwMjLlubQx5pyIMzDml6XvvIzkuIrl jYg2OjEw77yMTGksIFlpMSA8eWkxLmxpQGludGVsLmNvbT4g5YaZ6YGT77yaDQo+PiANCj4+IO+7 v1RoaXMgcGF0Y2ggaXMgdXNlZCB0byBhZGQgQ3J5cHRCbk51bGwgbGlicmFyeSwgd2hpY2ggaXMg dXNlZCB0byANCj4+IG9wdGltaXplIGNvZGUgc2l6ZS4NCj4+IA0KPj4gU2lnbmVkLW9mZi1ieTog eWkxIGxpIDx5aTEubGlAaW50ZWwuY29tPg0KPj4gDQo+PiBDYzogSmlld2VuIFlhbyA8amlld2Vu Lnlhb0BpbnRlbC5jb20+DQo+PiBDYzogSmlhbiBKIFdhbmcgPGppYW4uai53YW5nQGludGVsLmNv bT4NCj4+IENjOiBYaWFveXUgTHUgPHhpYW95dXgubHVAaW50ZWwuY29tPg0KPj4gQ2M6IEd1b21p biBKaWFuZyA8Z3VvbWluLmppYW5nQGludGVsLmNvbT4NCj4+IC0tLQ0KPj4gLi4uL0xpYnJhcnkv QmFzZUNyeXB0TGliL0JuL0NyeXB0Qm5OdWxsLmMgICAgIHwgNTI1ICsrKysrKysrKysrKysrKysr Kw0KPj4gLi4uL0xpYnJhcnkvQmFzZUNyeXB0TGliL1BlaUNyeXB0TGliLmluZiAgICAgIHwgICAy ICstDQo+PiAuLi4vTGlicmFyeS9CYXNlQ3J5cHRMaWIvU21tQ3J5cHRMaWIuaW5mICAgICAgfCAg IDIgKy0NCj4+IC4uLi9CYXNlQ3J5cHRMaWJOdWxsL0Jhc2VDcnlwdExpYk51bGwuaW5mICAgICB8 ICAgMSArDQo+PiAuLi4vTGlicmFyeS9CYXNlQ3J5cHRMaWJOdWxsL0JuL0NyeXB0Qm5OdWxsLmMg fCA1MjUgDQo+PiArKysrKysrKysrKysrKysrKysNCj4+IDUgZmlsZXMgY2hhbmdlZCwgMTA1MyBp bnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKSBjcmVhdGUgbW9kZSANCj4+IDEwMDY0NCBDcnlw dG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvQm4vQ3J5cHRCbk51bGwuYw0KPj4gY3JlYXRlIG1v ZGUgMTAwNjQ0IA0KPj4gQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliTnVsbC9Cbi9Dcnlw dEJuTnVsbC5jDQo+PiANCj4+IGRpZmYgLS1naXQgYS9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5 cHRMaWIvQm4vQ3J5cHRCbk51bGwuYw0KPj4gYi9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRM aWIvQm4vQ3J5cHRCbk51bGwuYw0KPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4+IGluZGV4IDAw MDAwMDAwMDAwMC4uOWYyMjBiYTQxMDU4DQo+PiAtLS0gL2Rldi9udWxsDQo+PiArKysgYi9Dcnlw dG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvQm4vQ3J5cHRCbk51bGwuYw0KPj4gQEAgLTAsMCAr MSw1MjUgQEANCj4+ICsvKiogQGZpbGUNCj4+ICsgIEJpZyBudW1iZXIgQVBJIGltcGxlbWVudGF0 aW9uIGJhc2VkIG9uIE9wZW5TU0wNCj4+ICsNCj4+ICsgIENvcHlyaWdodCAoYykgMjAyMiwgSW50 ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPj4gKyAgU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4+ICsNCj4+ICsqKi8NCj4+ICsN Cj4+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlQ3J5cHRMaWIuaD4NCj4+ICsjaW5jbHVkZSA8TGli cmFyeS9EZWJ1Z0xpYi5oPg0KPj4gKw0KPj4gKy8qKg0KPj4gKyAgQWxsb2NhdGUgbmV3IEJpZyBO dW1iZXIuDQo+PiArDQo+PiArICBAcmV0dmFsIE5ldyBCaWdOdW0gb3BhcXVlIHN0cnVjdHVyZSBv ciBOVUxMIG9uIGZhaWx1cmUuDQo+PiArKiovDQo+PiArVk9JRCAqDQo+PiArRUZJQVBJDQo+PiAr QmlnTnVtSW5pdCAoDQo+PiArICBWT0lEDQo+PiArICApDQo+PiArew0KPj4gKyAgQVNTRVJUIChG QUxTRSk7DQo+PiArICByZXR1cm4gTlVMTDsNCj4+ICt9DQo+PiArDQo+PiArLyoqDQo+PiArICBB bGxvY2F0ZSBuZXcgQmlnIE51bWJlciBhbmQgYXNzaWduIHRoZSBwcm92aWRlZCB2YWx1ZSB0byBp dC4NCj4+ICsNCj4+ICsgIEBwYXJhbVtpbl0gICBCdWYgICAgQmlnIGVuZGlhbiBlbmNvZGVkIGJ1 ZmZlci4NCj4+ICsgIEBwYXJhbVtpbl0gICBMZW4gICAgQnVmZmVyIGxlbmd0aC4NCj4+ICsNCj4+ ICsgIEByZXR2YWwgTmV3IEJpZ051bSBvcGFxdWUgc3RydWN0dXJlIG9yIE5VTEwgb24gZmFpbHVy ZS4NCj4+ICsqKi8NCj4+ICtWT0lEICoNCj4+ICtFRklBUEkNCj4+ICtCaWdOdW1Gcm9tQmluICgN Cj4+ICsgIElOIENPTlNUIFVJTlQ4ICAqQnVmLA0KPj4gKyAgSU4gVUlOVE4gICAgICAgIExlbg0K Pj4gKyAgKQ0KPj4gK3sNCj4+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPj4gKyAgcmV0dXJuIE5VTEw7 DQo+PiArfQ0KPj4gKw0KPj4gKy8qKg0KPj4gKyAgQ29udmVydCB0aGUgYWJzb2x1dGUgdmFsdWUg b2YgQm4gaW50byBiaWctZW5kaWFuIGZvcm0gYW5kIHN0b3JlIGl0IGF0IEJ1Zi4NCj4+ICsgIFRo ZSBCdWYgYXJyYXkgc2hvdWxkIGhhdmUgYXQgbGVhc3QgQmlnTnVtQnl0ZXMoKSBpbiBpdC4NCj4+ ICsNCj4+ICsgIEBwYXJhbVtpbl0gICBCbiAgICAgQmlnIG51bWJlciB0byBjb252ZXJ0Lg0KPj4g KyAgQHBhcmFtW291dF0gIEJ1ZiAgICBPdXRwdXQgYnVmZmVyLg0KPj4gKw0KPj4gKyAgQHJldHZh bCBUaGUgbGVuZ3RoIG9mIHRoZSBiaWctZW5kaWFuIG51bWJlciBwbGFjZWQgYXQgQnVmIG9yIC0x IG9uIGVycm9yLg0KPj4gKyoqLw0KPj4gK0lOVE4NCj4+ICtFRklBUEkNCj4+ICtCaWdOdW1Ub0Jp biAoDQo+PiArICBJTiBWT0lEICAgICpCbiwNCj4+ICsgIE9VVCBVSU5UOCAgKkJ1Zg0KPj4gKyAg KQ0KPj4gK3sNCj4+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPj4gKyAgcmV0dXJuIC0xOw0KPj4gK30N Cj4+ICsNCj4+ICsvKioNCj4+ICsgIEZyZWUgdGhlIEJpZyBOdW1iZXIuDQo+PiArDQo+PiArICBA cGFyYW1baW5dICAgQm4gICAgICBCaWcgbnVtYmVyIHRvIGZyZWUuDQo+PiArICBAcGFyYW1baW5d ICAgQ2xlYXIgICBUUlVFIGlmIHRoZSBidWZmZXIgc2hvdWxkIGJlIGNsZWFyZWQuDQo+PiArKiov DQo+PiArVk9JRA0KPj4gK0VGSUFQSQ0KPj4gK0JpZ051bUZyZWUgKA0KPj4gKyAgSU4gVk9JRCAg ICAgKkJuLA0KPj4gKyAgSU4gQk9PTEVBTiAgQ2xlYXINCj4+ICsgICkNCj4+ICt7DQo+PiArICBB U1NFUlQgKEZBTFNFKTsNCj4+ICt9DQo+PiArDQo+PiArLyoqDQo+PiArICBDYWxjdWxhdGUgdGhl IHN1bSBvZiB0d28gQmlnIE51bWJlcnMuDQo+PiArICBQbGVhc2Ugbm90ZSwgYWxsICJvdXQiIEJp ZyBudW1iZXIgYXJndW1lbnRzIHNob3VsZCBiZSBwcm9wZXJseSANCj4+ICtpbml0aWFsaXplZA0K Pj4gKyAgYnkgY2FsbGluZyB0byBCaWdOdW1Jbml0KCkgb3IgQmlnTnVtRnJvbUJpbigpIGZ1bmN0 aW9ucy4NCj4+ICsNCj4+ICsgIEBwYXJhbVtpbl0gICBCbkEgICAgIEJpZyBudW1iZXIuDQo+PiAr ICBAcGFyYW1baW5dICAgQm5CICAgICBCaWcgbnVtYmVyLg0KPj4gKyAgQHBhcmFtW291dF0gIEJu UmVzICAgVGhlIHJlc3VsdCBvZiBCbkEgKyBCbkIuDQo+PiArDQo+PiArICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+PiArICBAcmV0dmFsIEVGSV9QUk9UT0NPTF9F UlJPUiAgIE90aGVyd2lzZS4NCj4+ICsqKi8NCj4+ICtFRklfU1RBVFVTDQo+PiArRUZJQVBJDQo+ PiArQmlnTnVtQWRkICgNCj4+ICsgIElOIENPTlNUIFZPSUQgICpCbkEsDQo+PiArICBJTiBDT05T VCBWT0lEICAqQm5CLA0KPj4gKyAgT1VUIFZPSUQgICAgICAgKkJuUmVzDQo+PiArICApDQo+PiAr ew0KPj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+PiArICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0K Pj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ICsgIFN1YnRyYWN0IHR3byBCaWcgTnVtYmVycy4NCj4+ ICsgIFBsZWFzZSBub3RlLCBhbGwgIm91dCIgQmlnIG51bWJlciBhcmd1bWVudHMgc2hvdWxkIGJl IHByb3Blcmx5IA0KPj4gK2luaXRpYWxpemVkDQo+PiArICBieSBjYWxsaW5nIHRvIEJpZ051bUlu aXQoKSBvciBCaWdOdW1Gcm9tQmluKCkgZnVuY3Rpb25zLg0KPj4gKw0KPj4gKyAgQHBhcmFtW2lu XSAgIEJuQSAgICAgQmlnIG51bWJlci4NCj4+ICsgIEBwYXJhbVtpbl0gICBCbkIgICAgIEJpZyBu dW1iZXIuDQo+PiArICBAcGFyYW1bb3V0XSAgQm5SZXMgICBUaGUgcmVzdWx0IG9mIEJuQSAtIEJu Qi4NCj4+ICsNCj4+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgT24gc3VjY2Vzcy4N Cj4+ICsgIEByZXR2YWwgRUZJX1BST1RPQ09MX0VSUk9SICAgT3RoZXJ3aXNlLg0KPj4gKyoqLw0K Pj4gK0VGSV9TVEFUVVMNCj4+ICtFRklBUEkNCj4+ICtCaWdOdW1TdWIgKA0KPj4gKyAgSU4gQ09O U1QgVk9JRCAgKkJuQSwNCj4+ICsgIElOIENPTlNUIFZPSUQgICpCbkIsDQo+PiArICBPVVQgVk9J RCAgICAgICAqQm5SZXMNCj4+ICsgICkNCj4+ICt7DQo+PiArICBBU1NFUlQgKEZBTFNFKTsNCj4+ ICsgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+PiArfQ0KPj4gKw0KPj4gKy8qKg0KPj4gKyAg Q2FsY3VsYXRlIHJlbWFpbmRlcjogQm5SZXMgPSBCbkEgJSBCbkIuDQo+PiArICBQbGVhc2Ugbm90 ZSwgYWxsICJvdXQiIEJpZyBudW1iZXIgYXJndW1lbnRzIHNob3VsZCBiZSBwcm9wZXJseSANCj4+ ICtpbml0aWFsaXplZA0KPj4gKyAgYnkgY2FsbGluZyB0byBCaWdOdW1Jbml0KCkgb3IgQmlnTnVt RnJvbUJpbigpIGZ1bmN0aW9ucy4NCj4+ICsNCj4+ICsgIEBwYXJhbVtpbl0gICBCbkEgICAgIEJp ZyBudW1iZXIuDQo+PiArICBAcGFyYW1baW5dICAgQm5CICAgICBCaWcgbnVtYmVyLg0KPj4gKyAg QHBhcmFtW291dF0gIEJuUmVzICAgVGhlIHJlc3VsdCBvZiBCbkEgJSBCbkIuDQo+PiArDQo+PiAr ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+PiArICBAcmV0dmFs IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTIEluIGNhc2Ugb2YgaW50ZXJuYWwgYWxsb2NhdGlvbiBmYWls dXJlcy4NCj4+ICsgIEByZXR2YWwgRUZJX1BST1RPQ09MX0VSUk9SICAgT3RoZXJ3aXNlLg0KPj4g KyoqLw0KPj4gK0VGSV9TVEFUVVMNCj4+ICtFRklBUEkNCj4+ICtCaWdOdW1Nb2QgKA0KPj4gKyAg SU4gQ09OU1QgVk9JRCAgKkJuQSwNCj4+ICsgIElOIENPTlNUIFZPSUQgICpCbkIsDQo+PiArICBP VVQgVk9JRCAgICAgICAqQm5SZXMNCj4+ICsgICkNCj4+ICt7DQo+PiArICBBU1NFUlQgKEZBTFNF KTsNCj4+ICsgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+PiArfQ0KPj4gKw0KPj4gKy8qKg0K Pj4gKyAgQ29tcHV0ZSBCbkEgdG8gdGhlIEJuUC10aCBwb3dlciBtb2R1bG8gQm5NLg0KPj4gKyAg UGxlYXNlIG5vdGUsIGFsbCAib3V0IiBCaWcgbnVtYmVyIGFyZ3VtZW50cyBzaG91bGQgYmUgcHJv cGVybHkgaW5pdGlhbGl6ZWQuDQo+PiArICBieSBjYWxsaW5nIHRvIEJpZ051bUluaXQoKSBvciBC aWdOdW1Gcm9tQmluKCkgZnVuY3Rpb25zLg0KPj4gKw0KPj4gKyAgQHBhcmFtW2luXSAgIEJuQSAg ICAgQmlnIG51bWJlci4NCj4+ICsgIEBwYXJhbVtpbl0gICBCblAgICAgIEJpZyBudW1iZXIgKHBv d2VyKS4NCj4+ICsgIEBwYXJhbVtpbl0gICBCbk0gICAgIEJpZyBudW1iZXIgKG1vZHVsbykuDQo+ PiArICBAcGFyYW1bb3V0XSAgQm5SZXMgICBUaGUgcmVzdWx0IG9mIChCbkEgXiBCblApICUgQm5N Lg0KPj4gKw0KPj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICBPbiBzdWNjZXNzLg0K Pj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyBJbiBjYXNlIG9mIGludGVybmFsIGFs bG9jYXRpb24gZmFpbHVyZXMuDQo+PiArICBAcmV0dmFsIEVGSV9QUk9UT0NPTF9FUlJPUiAgIE90 aGVyd2lzZS4NCj4+ICsqKi8NCj4+ICtFRklfU1RBVFVTDQo+PiArRUZJQVBJDQo+PiArQmlnTnVt RXhwTW9kICgNCj4+ICsgIElOIFZPSUQgICAqQm5BLA0KPj4gKyAgSU4gVk9JRCAgICpCblAsDQo+ PiArICBJTiBWT0lEICAgKkJuTSwNCj4+ICsgIE9VVCBWT0lEICAqQm5SZXMNCj4+ICsgICkNCj4+ ICt7DQo+PiArICBBU1NFUlQgKEZBTFNFKTsNCj4+ICsgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7 DQo+PiArfQ0KPj4gKw0KPj4gKy8qKg0KPj4gKyAgQ29tcHV0ZSBCbkEgaW52ZXJzZSBtb2R1bG8g Qm5NLg0KPj4gKyAgUGxlYXNlIG5vdGUsIGFsbCAib3V0IiBCaWcgbnVtYmVyIGFyZ3VtZW50cyBz aG91bGQgYmUgcHJvcGVybHkgDQo+PiAraW5pdGlhbGl6ZWQNCj4+ICsgIGJ5IGNhbGxpbmcgdG8g QmlnTnVtSW5pdCgpIG9yIEJpZ051bUZyb21CaW4oKSBmdW5jdGlvbnMuDQo+PiArDQo+PiArICBA cGFyYW1baW5dICAgQm5BICAgICBCaWcgbnVtYmVyLg0KPj4gKyAgQHBhcmFtW2luXSAgIEJuTSAg ICAgQmlnIG51bWJlciAobW9kdWxvKS4NCj4+ICsgIEBwYXJhbVtvdXRdICBCblJlcyAgIFRoZSBy ZXN1bHQsIHN1Y2ggdGhhdCAoQm5BICogQm5SZXMpICUgQm5NID09IDEuDQo+PiArDQo+PiArICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+PiArICBAcmV0dmFsIEVG SV9PVVRfT0ZfUkVTT1VSQ0VTIEluIGNhc2Ugb2YgaW50ZXJuYWwgYWxsb2NhdGlvbiBmYWlsdXJl cy4NCj4+ICsgIEByZXR2YWwgRUZJX1BST1RPQ09MX0VSUk9SICAgT3RoZXJ3aXNlLg0KPj4gKyoq Lw0KPj4gK0VGSV9TVEFUVVMNCj4+ICtFRklBUEkNCj4+ICtCaWdOdW1JbnZlcnNlTW9kICgNCj4+ ICsgIElOIENPTlNUIFZPSUQgICpCbkEsDQo+PiArICBJTiBDT05TVCBWT0lEICAqQm5NLA0KPj4g KyAgT1VUIFZPSUQgICAgICAgKkJuUmVzDQo+PiArICApDQo+PiArew0KPj4gKyAgQVNTRVJUIChG QUxTRSk7DQo+PiArICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPj4gK30NCj4+ICsNCj4+ICsv KioNCj4+ICsgIERpdmlkZSB0d28gQmlnIE51bWJlcnMuDQo+PiArICBQbGVhc2Ugbm90ZSwgYWxs ICJvdXQiIEJpZyBudW1iZXIgYXJndW1lbnRzIHNob3VsZCBiZSBwcm9wZXJseSANCj4+ICtpbml0 aWFsaXplZA0KPj4gKyAgYnkgY2FsbGluZyB0byBCaWdOdW1Jbml0KCkgb3IgQmlnTnVtRnJvbUJp bigpIGZ1bmN0aW9ucy4NCj4+ICsNCj4+ICsgIEBwYXJhbVtpbl0gICBCbkEgICAgIEJpZyBudW1i ZXIuDQo+PiArICBAcGFyYW1baW5dICAgQm5NICAgICBCaWcgbnVtYmVyIChtb2R1bG8pLg0KPj4g KyAgQHBhcmFtW291dF0gIEJuUmVzICAgVGhlIHJlc3VsdCwgc3VjaCB0aGF0IEJuQSAvIEJuQi4N Cj4+ICsNCj4+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgT24gc3VjY2Vzcy4NCj4+ ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgSW4gY2FzZSBvZiBpbnRlcm5hbCBhbGxv Y2F0aW9uIGZhaWx1cmVzLg0KPj4gKyAgQHJldHZhbCBFRklfUFJPVE9DT0xfRVJST1IgICBPdGhl cndpc2UuDQo+PiArKiovDQo+PiArRUZJX1NUQVRVUw0KPj4gK0VGSUFQSQ0KPj4gK0JpZ051bURp diAoDQo+PiArICBJTiBDT05TVCBWT0lEICAqQm5BLA0KPj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJu TSwNCj4+ICsgIE9VVCBWT0lEICAgICAgICpCblJlcw0KPj4gKyAgKQ0KPj4gK3sNCj4+ICsgIEFT U0VSVCAoRkFMU0UpOw0KPj4gKyAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4+ICt9DQo+PiAr DQo+PiArLyoqDQo+PiArICBNdWx0aXBseSB0d28gQmlnIE51bWJlcnMgbW9kdWxvIEJuTS4NCj4+ ICsgIFBsZWFzZSBub3RlLCBhbGwgIm91dCIgQmlnIG51bWJlciBhcmd1bWVudHMgc2hvdWxkIGJl IHByb3Blcmx5IA0KPj4gK2luaXRpYWxpemVkDQo+PiArICBieSBjYWxsaW5nIHRvIEJpZ051bUlu aXQoKSBvciBCaWdOdW1Gcm9tQmluKCkgZnVuY3Rpb25zLg0KPj4gKw0KPj4gKyAgQHBhcmFtW2lu XSAgIEJuQSAgICAgQmlnIG51bWJlci4NCj4+ICsgIEBwYXJhbVtpbl0gICBCbkIgICAgIEJpZyBu dW1iZXIuDQo+PiArICBAcGFyYW1baW5dICAgQm5NICAgICBCaWcgbnVtYmVyIChtb2R1bG8pLg0K Pj4gKyAgQHBhcmFtW291dF0gIEJuUmVzICAgVGhlIHJlc3VsdCwgc3VjaCB0aGF0IChCbkEgKiBC bkIpICUgQm5NLg0KPj4gKw0KPj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICBPbiBz dWNjZXNzLg0KPj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyBJbiBjYXNlIG9mIGlu dGVybmFsIGFsbG9jYXRpb24gZmFpbHVyZXMuDQo+PiArICBAcmV0dmFsIEVGSV9QUk9UT0NPTF9F UlJPUiAgIE90aGVyd2lzZS4NCj4+ICsqKi8NCj4+ICtFRklfU1RBVFVTDQo+PiArRUZJQVBJDQo+ PiArQmlnTnVtTXVsTW9kICgNCj4+ICsgIElOIENPTlNUIFZPSUQgICpCbkEsDQo+PiArICBJTiBD T05TVCBWT0lEICAqQm5CLA0KPj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuTSwNCj4+ICsgIE9VVCBW T0lEICAgICAgICpCblJlcw0KPj4gKyAgKQ0KPj4gK3sNCj4+ICsgIEFTU0VSVCAoRkFMU0UpOw0K Pj4gKyAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4+ICt9DQo+PiArDQo+PiArLyoqDQo+PiAr ICBDb21wYXJlIHR3byBCaWcgTnVtYmVycy4NCj4+ICsNCj4+ICsgIEBwYXJhbVtpbl0gICBCbkEg ICAgIEJpZyBudW1iZXIuDQo+PiArICBAcGFyYW1baW5dICAgQm5CICAgICBCaWcgbnVtYmVyLg0K Pj4gKw0KPj4gKyAgQHJldHZhbCAwICAgICAgICAgIEJuQSA9PSBCbkIuDQo+PiArICBAcmV0dmFs IDEgICAgICAgICAgQm5BID4gQm5CLg0KPj4gKyAgQHJldHZhbCAtMSAgICAgICAgIEJuQSA8IEJu Qi4NCj4+ICsqKi8NCj4+ICtJTlRODQo+PiArRUZJQVBJDQo+PiArQmlnTnVtQ21wICgNCj4+ICsg IElOIENPTlNUIFZPSUQgICpCbkEsDQo+PiArICBJTiBDT05TVCBWT0lEICAqQm5CDQo+PiArICAp DQo+PiArew0KPj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+PiArICByZXR1cm4gMDsNCj4+ICt9DQo+ PiArDQo+PiArLyoqDQo+PiArICBHZXQgbnVtYmVyIG9mIGJpdHMgaW4gQm4uDQo+PiArDQo+PiAr ICBAcGFyYW1baW5dICAgQm4gICAgIEJpZyBudW1iZXIuDQo+PiArDQo+PiArICBAcmV0dmFsIE51 bWJlciBvZiBiaXRzLg0KPj4gKyoqLw0KPj4gK1VJTlRODQo+PiArRUZJQVBJDQo+PiArQmlnTnVt Qml0cyAoDQo+PiArICBJTiBDT05TVCBWT0lEICAqQm4NCj4+ICsgICkNCj4+ICt7DQo+PiArICBB U1NFUlQgKEZBTFNFKTsNCj4+ICsgIHJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ ICsgIEdldCBudW1iZXIgb2YgYnl0ZXMgaW4gQm4uDQo+PiArDQo+PiArICBAcGFyYW1baW5dICAg Qm4gICAgIEJpZyBudW1iZXIuDQo+PiArDQo+PiArICBAcmV0dmFsIE51bWJlciBvZiBieXRlcy4N Cj4+ICsqKi8NCj4+ICtVSU5UTg0KPj4gK0VGSUFQSQ0KPj4gK0JpZ051bUJ5dGVzICgNCj4+ICsg IElOIENPTlNUIFZPSUQgICpCbg0KPj4gKyAgKQ0KPj4gK3sNCj4+ICsgIEFTU0VSVCAoRkFMU0Up Ow0KPj4gKyAgcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gKy8qKg0KPj4gKyAgQ2hlY2tzIGlm IEJpZyBOdW1iZXIgZXF1YWxzIHRvIHRoZSBnaXZlbiBOdW0uDQo+PiArDQo+PiArICBAcGFyYW1b aW5dICAgQm4gICAgIEJpZyBudW1iZXIuDQo+PiArICBAcGFyYW1baW5dICAgTnVtICAgIE51bWJl ci4NCj4+ICsNCj4+ICsgIEByZXR2YWwgVFJVRSAgIGlmZiBCbiA9PSBOdW0uDQo+PiArICBAcmV0 dmFsIEZBTFNFICBvdGhlcndpc2UuDQo+PiArKiovDQo+PiArQk9PTEVBTg0KPj4gK0VGSUFQSQ0K Pj4gK0JpZ051bUlzV29yZCAoDQo+PiArICBJTiBDT05TVCBWT0lEICAqQm4sDQo+PiArICBJTiBV SU5UTiAgICAgICBOdW0NCj4+ICsgICkNCj4+ICt7DQo+PiArICBBU1NFUlQgKEZBTFNFKTsNCj4+ ICsgIHJldHVybiBGQUxTRTsNCj4+ICt9DQo+PiArDQo+PiArLyoqDQo+PiArICBDaGVja3MgaWYg QmlnIE51bWJlciBpcyBvZGQuDQo+PiArDQo+PiArICBAcGFyYW1baW5dICAgQm4gICAgIEJpZyBu dW1iZXIuDQo+PiArDQo+PiArICBAcmV0dmFsIFRSVUUgICBCbiBpcyBvZGQgKEJuICUgMiA9PSAx KS4NCj4+ICsgIEByZXR2YWwgRkFMU0UgIG90aGVyd2lzZS4NCj4+ICsqKi8NCj4+ICtCT09MRUFO DQo+PiArRUZJQVBJDQo+PiArQmlnTnVtSXNPZGQgKA0KPj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJu DQo+PiArICApDQo+PiArew0KPj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+PiArICByZXR1cm4gRkFM U0U7DQo+PiArfQ0KPj4gKw0KPj4gKy8qKg0KPj4gKyAgQ29weSBCaWcgbnVtYmVyLg0KPj4gKw0K Pj4gKyAgQHBhcmFtW291dF0gIEJuRHN0ICAgICBEZXN0aW5hdGlvbi4NCj4+ICsgIEBwYXJhbVtp bl0gICBCblNyYyAgICAgU291cmNlLg0KPj4gKw0KPj4gKyAgQHJldHZhbCBCbkRzdCBvbiBzdWNj ZXNzLg0KPj4gKyAgQHJldHZhbCBOVUxMIG90aGVyd2lzZS4NCj4+ICsqKi8NCj4+ICtWT0lEICoN Cj4+ICtFRklBUEkNCj4+ICtCaWdOdW1Db3B5ICgNCj4+ICsgIE9VVCBWT0lEICAgICAgICpCbkRz dCwNCj4+ICsgIElOIENPTlNUIFZPSUQgICpCblNyYw0KPj4gKyAgKQ0KPj4gK3sNCj4+ICsgIEFT U0VSVCAoRkFMU0UpOw0KPj4gKyAgcmV0dXJuIE5VTEw7DQo+PiArfQ0KPj4gKw0KPj4gKy8qKg0K Pj4gKyAgR2V0IGNvbnN0YW50IEJpZyBudW1iZXIgd2l0aCB2YWx1ZSBvZiAiMSIuDQo+PiArICBU aGlzIG1heSBiZSB1c2VkIHRvIHNhdmUgZXhwZW5zaXZlIGFsbG9jYXRpb25zLg0KPj4gKw0KPj4g KyAgQHJldHZhbCBCaWcgTnVtYmVyIHdpdGggdmFsdWUgb2YgMS4NCj4+ICsqKi8NCj4+ICtDT05T VCBWT0lEICoNCj4+ICtFRklBUEkNCj4+ICtCaWdOdW1WYWx1ZU9uZSAoDQo+PiArICBWT0lEDQo+ PiArICApDQo+PiArew0KPj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+PiArICByZXR1cm4gTlVMTDsN Cj4+ICt9DQo+PiArDQo+PiArLyoqDQo+PiArICBTaGlmdCByaWdodCBCaWcgTnVtYmVyLg0KPj4g KyAgUGxlYXNlIG5vdGUsIGFsbCAib3V0IiBCaWcgbnVtYmVyIGFyZ3VtZW50cyBzaG91bGQgYmUg cHJvcGVybHkgDQo+PiAraW5pdGlhbGl6ZWQNCj4+ICsgIGJ5IGNhbGxpbmcgdG8gQmlnTnVtSW5p dCgpIG9yIEJpZ051bUZyb21CaW4oKSBmdW5jdGlvbnMuDQo+PiArDQo+PiArICBAcGFyYW1baW5d ICAgQm4gICAgICBCaWcgbnVtYmVyLg0KPj4gKyAgQHBhcmFtW2luXSAgIG4gICAgICAgTnVtYmVy IG9mIGJpdHMgdG8gc2hpZnQuDQo+PiArICBAcGFyYW1bb3V0XSAgQm5SZXMgICBUaGUgcmVzdWx0 Lg0KPj4gKw0KPj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICBPbiBzdWNjZXNzLg0K Pj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyBJbiBjYXNlIG9mIGludGVybmFsIGFs bG9jYXRpb24gZmFpbHVyZXMuDQo+PiArICBAcmV0dmFsIEVGSV9QUk9UT0NPTF9FUlJPUiAgIE90 aGVyd2lzZS4NCj4+ICsqKi8NCj4+ICtFRklfU1RBVFVTDQo+PiArRUZJQVBJDQo+PiArQmlnTnVt UlNoaWZ0ICgNCj4+ICsgIElOIENPTlNUIFZPSUQgICpCbiwNCj4+ICsgIElOIFVJTlROICAgICAg IG4sDQo+PiArICBPVVQgVk9JRCAgICAgICAqQm5SZXMNCj4+ICsgICkNCj4+ICt7DQo+PiArICBB U1NFUlQgKEZBTFNFKTsNCj4+ICsgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+PiArfQ0KPj4g Kw0KPj4gKy8qKg0KPj4gKyAgTWFyayBCaWcgTnVtYmVyIGZvciBjb25zdGFudCB0aW1lIGNvbXB1 dGF0aW9ucy4NCj4+ICsgIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgYW55 IGNvbnN0YW50IHRpbWUgDQo+PiArY29tcHV0YXRpb25zIGFyZQ0KPj4gKyAgcGVyZm9ybWVkIG9u IHRoZSBnaXZlbiBCaWcgbnVtYmVyLg0KPj4gKw0KPj4gKyAgQHBhcmFtW2luXSAgIEJuICAgICBC aWcgbnVtYmVyLg0KPj4gKyoqLw0KPj4gK1ZPSUQNCj4+ICtFRklBUEkNCj4+ICtCaWdOdW1Db25z dHRpbWUgKA0KPj4gKyAgSU4gVk9JRCAgKkJuDQo+PiArICApDQo+PiArew0KPj4gKyAgQVNTRVJU IChGQUxTRSk7DQo+PiArfQ0KPj4gKw0KPj4gKy8qKg0KPj4gKyAgQ2FsY3VsYXRlIHNxdWFyZSBt b2R1bG8uDQo+PiArICBQbGVhc2Ugbm90ZSwgYWxsICJvdXQiIEJpZyBudW1iZXIgYXJndW1lbnRz IHNob3VsZCBiZSBwcm9wZXJseSANCj4+ICtpbml0aWFsaXplZA0KPj4gKyAgYnkgY2FsbGluZyB0 byBCaWdOdW1Jbml0KCkgb3IgQmlnTnVtRnJvbUJpbigpIGZ1bmN0aW9ucy4NCj4+ICsNCj4+ICsg IEBwYXJhbVtpbl0gICBCbkEgICAgIEJpZyBudW1iZXIuDQo+PiArICBAcGFyYW1baW5dICAgQm5N ICAgICBCaWcgbnVtYmVyIChtb2R1bG8pLg0KPj4gKyAgQHBhcmFtW291dF0gIEJuUmVzICAgVGhl IHJlc3VsdCwgc3VjaCB0aGF0IChCbkEgXiAyKSAlIEJuTS4NCj4+ICsNCj4+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgT24gc3VjY2Vzcy4NCj4+ICsgIEByZXR2YWwgRUZJX09VVF9P Rl9SRVNPVVJDRVMgSW4gY2FzZSBvZiBpbnRlcm5hbCBhbGxvY2F0aW9uIGZhaWx1cmVzLg0KPj4g KyAgQHJldHZhbCBFRklfUFJPVE9DT0xfRVJST1IgICBPdGhlcndpc2UuDQo+PiArKiovDQo+PiAr RUZJX1NUQVRVUw0KPj4gK0VGSUFQSQ0KPj4gK0JpZ051bVNxck1vZCAoDQo+PiArICBJTiBDT05T VCBWT0lEICAqQm5BLA0KPj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuTSwNCj4+ICsgIE9VVCBWT0lE ICAgICAgICpCblJlcw0KPj4gKyAgKQ0KPj4gK3sNCj4+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPj4g KyAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4+ICt9DQo+PiArDQo+PiArLyoqDQo+PiArICBD cmVhdGUgbmV3IEJpZyBOdW1iZXIgY29tcHV0YXRpb24gY29udGV4dC4gVGhpcyBpcyBhbiBvcGFx dWUgDQo+PiArc3RydWN0dXJlDQo+PiArICB3aGljaCBzaG91bGQgYmUgcGFzc2VkIHRvIGFueSBm dW5jdGlvbiB0aGF0IHJlcXVpcmVzIGl0LiBUaGUgQk4gDQo+PiArY29udGV4dCBpcw0KPj4gKyAg bmVlZGVkIHRvIG9wdGltaXplIGNhbGN1bGF0aW9ucyBhbmQgZXhwZW5zaXZlIGFsbG9jYXRpb25z Lg0KPj4gKw0KPj4gKyAgQHJldHZhbCBCaWcgTnVtYmVyIGNvbnRleHQgc3RydWN0IG9yIE5VTEwg b24gZmFpbHVyZS4NCj4+ICsqKi8NCj4+ICtWT0lEICoNCj4+ICtFRklBUEkNCj4+ICtCaWdOdW1O ZXdDb250ZXh0ICgNCj4+ICsgIFZPSUQNCj4+ICsgICkNCj4+ICt7DQo+PiArICBBU1NFUlQgKEZB TFNFKTsNCj4+ICsgIHJldHVybiBOVUxMOw0KPj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ICsgIEZy ZWUgQmlnIE51bWJlciBjb250ZXh0IHRoYXQgd2FzIGFsbG9jYXRlZCB3aXRoIEJpZ051bU5ld0Nv bnRleHQoKS4NCj4+ICsNCj4+ICsgIEBwYXJhbVtpbl0gICBCbkN0eCAgICAgQmlnIG51bWJlciBj b250ZXh0IHRvIGZyZWUuDQo+PiArKiovDQo+PiArVk9JRA0KPj4gK0VGSUFQSQ0KPj4gK0JpZ051 bUNvbnRleHRGcmVlICgNCj4+ICsgIElOIFZPSUQgICpCbkN0eA0KPj4gKyAgKQ0KPj4gK3sNCj4+ ICsgIEFTU0VSVCAoRkFMU0UpOw0KPj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ICsgIFNldCBCaWcg TnVtYmVyIHRvIGEgZ2l2ZW4gdmFsdWUuDQo+PiArDQo+PiArICBAcGFyYW1baW5dICAgQm4gICAg IEJpZyBudW1iZXIgdG8gc2V0Lg0KPj4gKyAgQHBhcmFtW2luXSAgIFZhbCAgICBWYWx1ZSB0byBz ZXQuDQo+PiArKiovDQo+PiArRUZJX1NUQVRVUw0KPj4gK0VGSUFQSQ0KPj4gK0JpZ051bVNldFVp bnQgKA0KPj4gKyAgSU4gVk9JRCAgICpCbiwNCj4+ICsgIElOIFVJTlROICBWYWwNCj4+ICsgICkN Cj4+ICt7DQo+PiArICBBU1NFUlQgKEZBTFNFKTsNCj4+ICsgIHJldHVybiBFRklfVU5TVVBQT1JU RUQ7DQo+PiArfQ0KPj4gKw0KPj4gKy8qKg0KPj4gKyAgQWRkIHR3byBCaWcgTnVtYmVycyBtb2R1 bG8gQm5NLg0KPj4gKw0KPj4gKyAgQHBhcmFtW2luXSAgIEJuQSAgICAgICBCaWcgbnVtYmVyLg0K Pj4gKyAgQHBhcmFtW2luXSAgIEJuQiAgICAgICBCaWcgbnVtYmVyLg0KPj4gKyAgQHBhcmFtW2lu XSAgIEJuTSAgICAgICBCaWcgbnVtYmVyIChtb2R1bG8pLg0KPj4gKyAgQHBhcmFtW291dF0gIEJu UmVzICAgICBUaGUgcmVzdWx0LCBzdWNoIHRoYXQgKEJuQSArIEJuQikgJSBCbk0uDQo+PiArDQo+ PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+PiArICBAcmV0 dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTIEluIGNhc2Ugb2YgaW50ZXJuYWwgYWxsb2NhdGlvbiBm YWlsdXJlcy4NCj4+ICsgIEByZXR2YWwgRUZJX1BST1RPQ09MX0VSUk9SICAgT3RoZXJ3aXNlLg0K Pj4gKyoqLw0KPj4gK0VGSV9TVEFUVVMNCj4+ICtFRklBUEkNCj4+ICtCaWdOdW1BZGRNb2QgKA0K Pj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuQSwNCj4+ICsgIElOIENPTlNUIFZPSUQgICpCbkIsDQo+ PiArICBJTiBDT05TVCBWT0lEICAqQm5NLA0KPj4gKyAgT1VUIFZPSUQgICAgICAgKkJuUmVzDQo+ PiArICApDQo+PiArew0KPj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+PiArICByZXR1cm4gRUZJX1VO U1VQUE9SVEVEOw0KPj4gK30NCj4+IGRpZmYgLS1naXQgYS9DcnlwdG9Qa2cvTGlicmFyeS9CYXNl Q3J5cHRMaWIvUGVpQ3J5cHRMaWIuaW5mDQo+PiBiL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlw dExpYi9QZWlDcnlwdExpYi5pbmYNCj4+IGluZGV4IDc1ZDg3YWZiZGMwMy4uZDA4MGU2NjVjMjE4 IDEwMDY0NA0KPj4gLS0tIGEvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1BlaUNyeXB0 TGliLmluZg0KPj4gKysrIGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1BlaUNyeXB0 TGliLmluZg0KPj4gQEAgLTU5LDcgKzU5LDcgQEANCj4+ICBQay9DcnlwdFJzYVBzc1NpZ25OdWxs LmMNCj4+ICBQZW0vQ3J5cHRQZW1OdWxsLmMNCj4+ICBSYW5kL0NyeXB0UmFuZE51bGwuYw0KPj4g LSAgQm4vQ3J5cHRCbi5jDQo+PiArICBCbi9DcnlwdEJuTnVsbC5jDQo+PiANCj4+ICBTeXNDYWxs L0NydFdyYXBwZXIuYw0KPj4gIFN5c0NhbGwvQ29uc3RhbnRUaW1lQ2xvY2suYw0KPj4gZGlmZiAt LWdpdCBhL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYi9TbW1DcnlwdExpYi5pbmYNCj4+ IGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1NtbUNyeXB0TGliLmluZg0KPj4gaW5k ZXggNDIwY2VmODhlZmIxLi44YTNmZWM5YjA3NmMgMTAwNjQ0DQo+PiAtLS0gYS9DcnlwdG9Qa2cv TGlicmFyeS9CYXNlQ3J5cHRMaWIvU21tQ3J5cHRMaWIuaW5mDQo+PiArKysgYi9DcnlwdG9Qa2cv TGlicmFyeS9CYXNlQ3J5cHRMaWIvU21tQ3J5cHRMaWIuaW5mDQo+PiBAQCAtNTYsNyArNTYsNyBA QA0KPj4gIFBrL0NyeXB0UnNhUHNzLmMNCj4+ICBQay9DcnlwdFJzYVBzc1NpZ25OdWxsLmMNCj4+ ICBQZW0vQ3J5cHRQZW0uYw0KPj4gLSAgQm4vQ3J5cHRCbi5jDQo+PiArICBCbi9DcnlwdEJuTnVs bC5jDQo+PiAgU3lzQ2FsbC9DcnRXcmFwcGVyLmMNCj4+ICBTeXNDYWxsL0NvbnN0YW50VGltZUNs b2NrLmMNCj4+ICBTeXNDYWxsL0Jhc2VNZW1BbGxvY2F0aW9uLmMNCj4+IGRpZmYgLS1naXQgYS9D cnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWJOdWxsL0Jhc2VDcnlwdExpYk51bGwuaW5mDQo+ PiBiL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYk51bGwvQmFzZUNyeXB0TGliTnVsbC5p bmYNCj4+IGluZGV4IGZhZjk1OTgyN2I5MC4uMWZiNGQ1YzU0ZDRmIDEwMDY0NA0KPj4gLS0tIGEv Q3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliTnVsbC9CYXNlQ3J5cHRMaWJOdWxsLmluZg0K Pj4gKysrIGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliTnVsbC9CYXNlQ3J5cHRMaWJO dWxsLmluZg0KPj4gQEAgLTUyLDYgKzUyLDcgQEANCj4+ICBSYW5kL0NyeXB0UmFuZE51bGwuYw0K Pj4gIFBrL0NyeXB0UnNhUHNzTnVsbC5jDQo+PiAgUGsvQ3J5cHRSc2FQc3NTaWduTnVsbC5jDQo+ PiArICBCbi9DcnlwdEJuTnVsbC5jDQo+PiANCj4+IFtQYWNrYWdlc10NCj4+ICBNZGVQa2cvTWRl UGtnLmRlYw0KPj4gZGlmZiAtLWdpdCBhL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYk51 bGwvQm4vQ3J5cHRCbk51bGwuYw0KPj4gYi9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWJO dWxsL0JuL0NyeXB0Qm5OdWxsLmMNCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+PiBpbmRleCAw MDAwMDAwMDAwMDAuLjlmMjIwYmE0MTA1OA0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIvQ3J5 cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliTnVsbC9Cbi9DcnlwdEJuTnVsbC5jDQo+PiBAQCAt MCwwICsxLDUyNSBAQA0KPj4gKy8qKiBAZmlsZQ0KPj4gKyAgQmlnIG51bWJlciBBUEkgaW1wbGVt ZW50YXRpb24gYmFzZWQgb24gT3BlblNTTA0KPj4gKw0KPj4gKyAgQ29weXJpZ2h0IChjKSAyMDIy LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+PiArICBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPj4gKw0KPj4gKyoqLw0K Pj4gKw0KPj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VDcnlwdExpYi5oPg0KPj4gKyNpbmNsdWRl IDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+PiArDQo+PiArLyoqDQo+PiArICBBbGxvY2F0ZSBuZXcg QmlnIE51bWJlci4NCj4+ICsNCj4+ICsgIEByZXR2YWwgTmV3IEJpZ051bSBvcGFxdWUgc3RydWN0 dXJlIG9yIE5VTEwgb24gZmFpbHVyZS4NCj4+ICsqKi8NCj4+ICtWT0lEICoNCj4+ICtFRklBUEkN Cj4+ICtCaWdOdW1Jbml0ICgNCj4+ICsgIFZPSUQNCj4+ICsgICkNCj4+ICt7DQo+PiArICBBU1NF UlQgKEZBTFNFKTsNCj4+ICsgIHJldHVybiBOVUxMOw0KPj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ ICsgIEFsbG9jYXRlIG5ldyBCaWcgTnVtYmVyIGFuZCBhc3NpZ24gdGhlIHByb3ZpZGVkIHZhbHVl IHRvIGl0Lg0KPj4gKw0KPj4gKyAgQHBhcmFtW2luXSAgIEJ1ZiAgICBCaWcgZW5kaWFuIGVuY29k ZWQgYnVmZmVyLg0KPj4gKyAgQHBhcmFtW2luXSAgIExlbiAgICBCdWZmZXIgbGVuZ3RoLg0KPj4g Kw0KPj4gKyAgQHJldHZhbCBOZXcgQmlnTnVtIG9wYXF1ZSBzdHJ1Y3R1cmUgb3IgTlVMTCBvbiBm YWlsdXJlLg0KPj4gKyoqLw0KPj4gK1ZPSUQgKg0KPj4gK0VGSUFQSQ0KPj4gK0JpZ051bUZyb21C aW4gKA0KPj4gKyAgSU4gQ09OU1QgVUlOVDggICpCdWYsDQo+PiArICBJTiBVSU5UTiAgICAgICAg TGVuDQo+PiArICApDQo+PiArew0KPj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+PiArICByZXR1cm4g TlVMTDsNCj4+ICt9DQo+PiArDQo+PiArLyoqDQo+PiArICBDb252ZXJ0IHRoZSBhYnNvbHV0ZSB2 YWx1ZSBvZiBCbiBpbnRvIGJpZy1lbmRpYW4gZm9ybSBhbmQgc3RvcmUgaXQgYXQgQnVmLg0KPj4g KyAgVGhlIEJ1ZiBhcnJheSBzaG91bGQgaGF2ZSBhdCBsZWFzdCBCaWdOdW1CeXRlcygpIGluIGl0 Lg0KPj4gKw0KPj4gKyAgQHBhcmFtW2luXSAgIEJuICAgICBCaWcgbnVtYmVyIHRvIGNvbnZlcnQu DQo+PiArICBAcGFyYW1bb3V0XSAgQnVmICAgIE91dHB1dCBidWZmZXIuDQo+PiArDQo+PiArICBA cmV0dmFsIFRoZSBsZW5ndGggb2YgdGhlIGJpZy1lbmRpYW4gbnVtYmVyIHBsYWNlZCBhdCBCdWYg b3IgLTEgb24gZXJyb3IuDQo+PiArKiovDQo+PiArSU5UTg0KPj4gK0VGSUFQSQ0KPj4gK0JpZ051 bVRvQmluICgNCj4+ICsgIElOIFZPSUQgICAgKkJuLA0KPj4gKyAgT1VUIFVJTlQ4ICAqQnVmDQo+ PiArICApDQo+PiArew0KPj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+PiArICByZXR1cm4gLTE7DQo+ PiArfQ0KPj4gKw0KPj4gKy8qKg0KPj4gKyAgRnJlZSB0aGUgQmlnIE51bWJlci4NCj4+ICsNCj4+ ICsgIEBwYXJhbVtpbl0gICBCbiAgICAgIEJpZyBudW1iZXIgdG8gZnJlZS4NCj4+ICsgIEBwYXJh bVtpbl0gICBDbGVhciAgIFRSVUUgaWYgdGhlIGJ1ZmZlciBzaG91bGQgYmUgY2xlYXJlZC4NCj4+ ICsqKi8NCj4+ICtWT0lEDQo+PiArRUZJQVBJDQo+PiArQmlnTnVtRnJlZSAoDQo+PiArICBJTiBW T0lEICAgICAqQm4sDQo+PiArICBJTiBCT09MRUFOICBDbGVhcg0KPj4gKyAgKQ0KPj4gK3sNCj4+ ICsgIEFTU0VSVCAoRkFMU0UpOw0KPj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ICsgIENhbGN1bGF0 ZSB0aGUgc3VtIG9mIHR3byBCaWcgTnVtYmVycy4NCj4+ICsgIFBsZWFzZSBub3RlLCBhbGwgIm91 dCIgQmlnIG51bWJlciBhcmd1bWVudHMgc2hvdWxkIGJlIHByb3Blcmx5IA0KPj4gK2luaXRpYWxp emVkDQo+PiArICBieSBjYWxsaW5nIHRvIEJpZ051bUluaXQoKSBvciBCaWdOdW1Gcm9tQmluKCkg ZnVuY3Rpb25zLg0KPj4gKw0KPj4gKyAgQHBhcmFtW2luXSAgIEJuQSAgICAgQmlnIG51bWJlci4N Cj4+ICsgIEBwYXJhbVtpbl0gICBCbkIgICAgIEJpZyBudW1iZXIuDQo+PiArICBAcGFyYW1bb3V0 XSAgQm5SZXMgICBUaGUgcmVzdWx0IG9mIEJuQSArIEJuQi4NCj4+ICsNCj4+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgT24gc3VjY2Vzcy4NCj4+ICsgIEByZXR2YWwgRUZJX1BST1RP Q09MX0VSUk9SICAgT3RoZXJ3aXNlLg0KPj4gKyoqLw0KPj4gK0VGSV9TVEFUVVMNCj4+ICtFRklB UEkNCj4+ICtCaWdOdW1BZGQgKA0KPj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuQSwNCj4+ICsgIElO IENPTlNUIFZPSUQgICpCbkIsDQo+PiArICBPVVQgVk9JRCAgICAgICAqQm5SZXMNCj4+ICsgICkN Cj4+ICt7DQo+PiArICBBU1NFUlQgKEZBTFNFKTsNCj4+ICsgIHJldHVybiBFRklfVU5TVVBQT1JU RUQ7DQo+PiArfQ0KPj4gKw0KPj4gKy8qKg0KPj4gKyAgU3VidHJhY3QgdHdvIEJpZyBOdW1iZXJz Lg0KPj4gKyAgUGxlYXNlIG5vdGUsIGFsbCAib3V0IiBCaWcgbnVtYmVyIGFyZ3VtZW50cyBzaG91 bGQgYmUgcHJvcGVybHkgDQo+PiAraW5pdGlhbGl6ZWQNCj4+ICsgIGJ5IGNhbGxpbmcgdG8gQmln TnVtSW5pdCgpIG9yIEJpZ051bUZyb21CaW4oKSBmdW5jdGlvbnMuDQo+PiArDQo+PiArICBAcGFy YW1baW5dICAgQm5BICAgICBCaWcgbnVtYmVyLg0KPj4gKyAgQHBhcmFtW2luXSAgIEJuQiAgICAg QmlnIG51bWJlci4NCj4+ICsgIEBwYXJhbVtvdXRdICBCblJlcyAgIFRoZSByZXN1bHQgb2YgQm5B IC0gQm5CLg0KPj4gKw0KPj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICBPbiBzdWNj ZXNzLg0KPj4gKyAgQHJldHZhbCBFRklfUFJPVE9DT0xfRVJST1IgICBPdGhlcndpc2UuDQo+PiAr KiovDQo+PiArRUZJX1NUQVRVUw0KPj4gK0VGSUFQSQ0KPj4gK0JpZ051bVN1YiAoDQo+PiArICBJ TiBDT05TVCBWT0lEICAqQm5BLA0KPj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuQiwNCj4+ICsgIE9V VCBWT0lEICAgICAgICpCblJlcw0KPj4gKyAgKQ0KPj4gK3sNCj4+ICsgIEFTU0VSVCAoRkFMU0Up Ow0KPj4gKyAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4+ICt9DQo+PiArDQo+PiArLyoqDQo+ PiArICBDYWxjdWxhdGUgcmVtYWluZGVyOiBCblJlcyA9IEJuQSAlIEJuQi4NCj4+ICsgIFBsZWFz ZSBub3RlLCBhbGwgIm91dCIgQmlnIG51bWJlciBhcmd1bWVudHMgc2hvdWxkIGJlIHByb3Blcmx5 IA0KPj4gK2luaXRpYWxpemVkDQo+PiArICBieSBjYWxsaW5nIHRvIEJpZ051bUluaXQoKSBvciBC aWdOdW1Gcm9tQmluKCkgZnVuY3Rpb25zLg0KPj4gKw0KPj4gKyAgQHBhcmFtW2luXSAgIEJuQSAg ICAgQmlnIG51bWJlci4NCj4+ICsgIEBwYXJhbVtpbl0gICBCbkIgICAgIEJpZyBudW1iZXIuDQo+ PiArICBAcGFyYW1bb3V0XSAgQm5SZXMgICBUaGUgcmVzdWx0IG9mIEJuQSAlIEJuQi4NCj4+ICsN Cj4+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgT24gc3VjY2Vzcy4NCj4+ICsgIEBy ZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgSW4gY2FzZSBvZiBpbnRlcm5hbCBhbGxvY2F0aW9u IGZhaWx1cmVzLg0KPj4gKyAgQHJldHZhbCBFRklfUFJPVE9DT0xfRVJST1IgICBPdGhlcndpc2Uu DQo+PiArKiovDQo+PiArRUZJX1NUQVRVUw0KPj4gK0VGSUFQSQ0KPj4gK0JpZ051bU1vZCAoDQo+ PiArICBJTiBDT05TVCBWT0lEICAqQm5BLA0KPj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuQiwNCj4+ ICsgIE9VVCBWT0lEICAgICAgICpCblJlcw0KPj4gKyAgKQ0KPj4gK3sNCj4+ICsgIEFTU0VSVCAo RkFMU0UpOw0KPj4gKyAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4+ICt9DQo+PiArDQo+PiAr LyoqDQo+PiArICBDb21wdXRlIEJuQSB0byB0aGUgQm5QLXRoIHBvd2VyIG1vZHVsbyBCbk0uDQo+ PiArICBQbGVhc2Ugbm90ZSwgYWxsICJvdXQiIEJpZyBudW1iZXIgYXJndW1lbnRzIHNob3VsZCBi ZSBwcm9wZXJseSBpbml0aWFsaXplZC4NCj4+ICsgIGJ5IGNhbGxpbmcgdG8gQmlnTnVtSW5pdCgp IG9yIEJpZ051bUZyb21CaW4oKSBmdW5jdGlvbnMuDQo+PiArDQo+PiArICBAcGFyYW1baW5dICAg Qm5BICAgICBCaWcgbnVtYmVyLg0KPj4gKyAgQHBhcmFtW2luXSAgIEJuUCAgICAgQmlnIG51bWJl ciAocG93ZXIpLg0KPj4gKyAgQHBhcmFtW2luXSAgIEJuTSAgICAgQmlnIG51bWJlciAobW9kdWxv KS4NCj4+ICsgIEBwYXJhbVtvdXRdICBCblJlcyAgIFRoZSByZXN1bHQgb2YgKEJuQSBeIEJuUCkg JSBCbk0uDQo+PiArDQo+PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgIE9uIHN1Y2Nl c3MuDQo+PiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTIEluIGNhc2Ugb2YgaW50ZXJu YWwgYWxsb2NhdGlvbiBmYWlsdXJlcy4NCj4+ICsgIEByZXR2YWwgRUZJX1BST1RPQ09MX0VSUk9S ICAgT3RoZXJ3aXNlLg0KPj4gKyoqLw0KPj4gK0VGSV9TVEFUVVMNCj4+ICtFRklBUEkNCj4+ICtC aWdOdW1FeHBNb2QgKA0KPj4gKyAgSU4gVk9JRCAgICpCbkEsDQo+PiArICBJTiBWT0lEICAgKkJu UCwNCj4+ICsgIElOIFZPSUQgICAqQm5NLA0KPj4gKyAgT1VUIFZPSUQgICpCblJlcw0KPj4gKyAg KQ0KPj4gK3sNCj4+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPj4gKyAgcmV0dXJuIEVGSV9VTlNVUFBP UlRFRDsNCj4+ICt9DQo+PiArDQo+PiArLyoqDQo+PiArICBDb21wdXRlIEJuQSBpbnZlcnNlIG1v ZHVsbyBCbk0uDQo+PiArICBQbGVhc2Ugbm90ZSwgYWxsICJvdXQiIEJpZyBudW1iZXIgYXJndW1l bnRzIHNob3VsZCBiZSBwcm9wZXJseSANCj4+ICtpbml0aWFsaXplZA0KPj4gKyAgYnkgY2FsbGlu ZyB0byBCaWdOdW1Jbml0KCkgb3IgQmlnTnVtRnJvbUJpbigpIGZ1bmN0aW9ucy4NCj4+ICsNCj4+ ICsgIEBwYXJhbVtpbl0gICBCbkEgICAgIEJpZyBudW1iZXIuDQo+PiArICBAcGFyYW1baW5dICAg Qm5NICAgICBCaWcgbnVtYmVyIChtb2R1bG8pLg0KPj4gKyAgQHBhcmFtW291dF0gIEJuUmVzICAg VGhlIHJlc3VsdCwgc3VjaCB0aGF0IChCbkEgKiBCblJlcykgJSBCbk0gPT0gMS4NCj4+ICsNCj4+ ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgT24gc3VjY2Vzcy4NCj4+ICsgIEByZXR2 YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgSW4gY2FzZSBvZiBpbnRlcm5hbCBhbGxvY2F0aW9uIGZh aWx1cmVzLg0KPj4gKyAgQHJldHZhbCBFRklfUFJPVE9DT0xfRVJST1IgICBPdGhlcndpc2UuDQo+ PiArKiovDQo+PiArRUZJX1NUQVRVUw0KPj4gK0VGSUFQSQ0KPj4gK0JpZ051bUludmVyc2VNb2Qg KA0KPj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuQSwNCj4+ICsgIElOIENPTlNUIFZPSUQgICpCbk0s DQo+PiArICBPVVQgVk9JRCAgICAgICAqQm5SZXMNCj4+ICsgICkNCj4+ICt7DQo+PiArICBBU1NF UlQgKEZBTFNFKTsNCj4+ICsgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+PiArfQ0KPj4gKw0K Pj4gKy8qKg0KPj4gKyAgRGl2aWRlIHR3byBCaWcgTnVtYmVycy4NCj4+ICsgIFBsZWFzZSBub3Rl LCBhbGwgIm91dCIgQmlnIG51bWJlciBhcmd1bWVudHMgc2hvdWxkIGJlIHByb3Blcmx5IA0KPj4g K2luaXRpYWxpemVkDQo+PiArICBieSBjYWxsaW5nIHRvIEJpZ051bUluaXQoKSBvciBCaWdOdW1G cm9tQmluKCkgZnVuY3Rpb25zLg0KPj4gKw0KPj4gKyAgQHBhcmFtW2luXSAgIEJuQSAgICAgQmln IG51bWJlci4NCj4+ICsgIEBwYXJhbVtpbl0gICBCbk0gICAgIEJpZyBudW1iZXIgKG1vZHVsbyku DQo+PiArICBAcGFyYW1bb3V0XSAgQm5SZXMgICBUaGUgcmVzdWx0LCBzdWNoIHRoYXQgQm5BIC8g Qm5CLg0KPj4gKw0KPj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICBPbiBzdWNjZXNz Lg0KPj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyBJbiBjYXNlIG9mIGludGVybmFs IGFsbG9jYXRpb24gZmFpbHVyZXMuDQo+PiArICBAcmV0dmFsIEVGSV9QUk9UT0NPTF9FUlJPUiAg IE90aGVyd2lzZS4NCj4+ICsqKi8NCj4+ICtFRklfU1RBVFVTDQo+PiArRUZJQVBJDQo+PiArQmln TnVtRGl2ICgNCj4+ICsgIElOIENPTlNUIFZPSUQgICpCbkEsDQo+PiArICBJTiBDT05TVCBWT0lE ICAqQm5NLA0KPj4gKyAgT1VUIFZPSUQgICAgICAgKkJuUmVzDQo+PiArICApDQo+PiArew0KPj4g KyAgQVNTRVJUIChGQUxTRSk7DQo+PiArICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPj4gK30N Cj4+ICsNCj4+ICsvKioNCj4+ICsgIE11bHRpcGx5IHR3byBCaWcgTnVtYmVycyBtb2R1bG8gQm5N Lg0KPj4gKyAgUGxlYXNlIG5vdGUsIGFsbCAib3V0IiBCaWcgbnVtYmVyIGFyZ3VtZW50cyBzaG91 bGQgYmUgcHJvcGVybHkgDQo+PiAraW5pdGlhbGl6ZWQNCj4+ICsgIGJ5IGNhbGxpbmcgdG8gQmln TnVtSW5pdCgpIG9yIEJpZ051bUZyb21CaW4oKSBmdW5jdGlvbnMuDQo+PiArDQo+PiArICBAcGFy YW1baW5dICAgQm5BICAgICBCaWcgbnVtYmVyLg0KPj4gKyAgQHBhcmFtW2luXSAgIEJuQiAgICAg QmlnIG51bWJlci4NCj4+ICsgIEBwYXJhbVtpbl0gICBCbk0gICAgIEJpZyBudW1iZXIgKG1vZHVs bykuDQo+PiArICBAcGFyYW1bb3V0XSAgQm5SZXMgICBUaGUgcmVzdWx0LCBzdWNoIHRoYXQgKEJu QSAqIEJuQikgJSBCbk0uDQo+PiArDQo+PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAg IE9uIHN1Y2Nlc3MuDQo+PiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTIEluIGNhc2Ug b2YgaW50ZXJuYWwgYWxsb2NhdGlvbiBmYWlsdXJlcy4NCj4+ICsgIEByZXR2YWwgRUZJX1BST1RP Q09MX0VSUk9SICAgT3RoZXJ3aXNlLg0KPj4gKyoqLw0KPj4gK0VGSV9TVEFUVVMNCj4+ICtFRklB UEkNCj4+ICtCaWdOdW1NdWxNb2QgKA0KPj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuQSwNCj4+ICsg IElOIENPTlNUIFZPSUQgICpCbkIsDQo+PiArICBJTiBDT05TVCBWT0lEICAqQm5NLA0KPj4gKyAg T1VUIFZPSUQgICAgICAgKkJuUmVzDQo+PiArICApDQo+PiArew0KPj4gKyAgQVNTRVJUIChGQUxT RSk7DQo+PiArICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPj4gK30NCj4+ICsNCj4+ICsvKioN Cj4+ICsgIENvbXBhcmUgdHdvIEJpZyBOdW1iZXJzLg0KPj4gKw0KPj4gKyAgQHBhcmFtW2luXSAg IEJuQSAgICAgQmlnIG51bWJlci4NCj4+ICsgIEBwYXJhbVtpbl0gICBCbkIgICAgIEJpZyBudW1i ZXIuDQo+PiArDQo+PiArICBAcmV0dmFsIDAgICAgICAgICAgQm5BID09IEJuQi4NCj4+ICsgIEBy ZXR2YWwgMSAgICAgICAgICBCbkEgPiBCbkIuDQo+PiArICBAcmV0dmFsIC0xICAgICAgICAgQm5B IDwgQm5CLg0KPj4gKyoqLw0KPj4gK0lOVE4NCj4+ICtFRklBUEkNCj4+ICtCaWdOdW1DbXAgKA0K Pj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuQSwNCj4+ICsgIElOIENPTlNUIFZPSUQgICpCbkINCj4+ ICsgICkNCj4+ICt7DQo+PiArICBBU1NFUlQgKEZBTFNFKTsNCj4+ICsgIHJldHVybiAwOw0KPj4g K30NCj4+ICsNCj4+ICsvKioNCj4+ICsgIEdldCBudW1iZXIgb2YgYml0cyBpbiBCbi4NCj4+ICsN Cj4+ICsgIEBwYXJhbVtpbl0gICBCbiAgICAgQmlnIG51bWJlci4NCj4+ICsNCj4+ICsgIEByZXR2 YWwgTnVtYmVyIG9mIGJpdHMuDQo+PiArKiovDQo+PiArVUlOVE4NCj4+ICtFRklBUEkNCj4+ICtC aWdOdW1CaXRzICgNCj4+ICsgIElOIENPTlNUIFZPSUQgICpCbg0KPj4gKyAgKQ0KPj4gK3sNCj4+ ICsgIEFTU0VSVCAoRkFMU0UpOw0KPj4gKyAgcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gKy8q Kg0KPj4gKyAgR2V0IG51bWJlciBvZiBieXRlcyBpbiBCbi4NCj4+ICsNCj4+ICsgIEBwYXJhbVtp bl0gICBCbiAgICAgQmlnIG51bWJlci4NCj4+ICsNCj4+ICsgIEByZXR2YWwgTnVtYmVyIG9mIGJ5 dGVzLg0KPj4gKyoqLw0KPj4gK1VJTlRODQo+PiArRUZJQVBJDQo+PiArQmlnTnVtQnl0ZXMgKA0K Pj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuDQo+PiArICApDQo+PiArew0KPj4gKyAgQVNTRVJUIChG QUxTRSk7DQo+PiArICByZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArLyoqDQo+PiArICBDaGVj a3MgaWYgQmlnIE51bWJlciBlcXVhbHMgdG8gdGhlIGdpdmVuIE51bS4NCj4+ICsNCj4+ICsgIEBw YXJhbVtpbl0gICBCbiAgICAgQmlnIG51bWJlci4NCj4+ICsgIEBwYXJhbVtpbl0gICBOdW0gICAg TnVtYmVyLg0KPj4gKw0KPj4gKyAgQHJldHZhbCBUUlVFICAgaWZmIEJuID09IE51bS4NCj4+ICsg IEByZXR2YWwgRkFMU0UgIG90aGVyd2lzZS4NCj4+ICsqKi8NCj4+ICtCT09MRUFODQo+PiArRUZJ QVBJDQo+PiArQmlnTnVtSXNXb3JkICgNCj4+ICsgIElOIENPTlNUIFZPSUQgICpCbiwNCj4+ICsg IElOIFVJTlROICAgICAgIE51bQ0KPj4gKyAgKQ0KPj4gK3sNCj4+ICsgIEFTU0VSVCAoRkFMU0Up Ow0KPj4gKyAgcmV0dXJuIEZBTFNFOw0KPj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ICsgIENoZWNr cyBpZiBCaWcgTnVtYmVyIGlzIG9kZC4NCj4+ICsNCj4+ICsgIEBwYXJhbVtpbl0gICBCbiAgICAg QmlnIG51bWJlci4NCj4+ICsNCj4+ICsgIEByZXR2YWwgVFJVRSAgIEJuIGlzIG9kZCAoQm4gJSAy ID09IDEpLg0KPj4gKyAgQHJldHZhbCBGQUxTRSAgb3RoZXJ3aXNlLg0KPj4gKyoqLw0KPj4gK0JP T0xFQU4NCj4+ICtFRklBUEkNCj4+ICtCaWdOdW1Jc09kZCAoDQo+PiArICBJTiBDT05TVCBWT0lE ICAqQm4NCj4+ICsgICkNCj4+ICt7DQo+PiArICBBU1NFUlQgKEZBTFNFKTsNCj4+ICsgIHJldHVy biBGQUxTRTsNCj4+ICt9DQo+PiArDQo+PiArLyoqDQo+PiArICBDb3B5IEJpZyBudW1iZXIuDQo+ PiArDQo+PiArICBAcGFyYW1bb3V0XSAgQm5Ec3QgICAgIERlc3RpbmF0aW9uLg0KPj4gKyAgQHBh cmFtW2luXSAgIEJuU3JjICAgICBTb3VyY2UuDQo+PiArDQo+PiArICBAcmV0dmFsIEJuRHN0IG9u IHN1Y2Nlc3MuDQo+PiArICBAcmV0dmFsIE5VTEwgb3RoZXJ3aXNlLg0KPj4gKyoqLw0KPj4gK1ZP SUQgKg0KPj4gK0VGSUFQSQ0KPj4gK0JpZ051bUNvcHkgKA0KPj4gKyAgT1VUIFZPSUQgICAgICAg KkJuRHN0LA0KPj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuU3JjDQo+PiArICApDQo+PiArew0KPj4g KyAgQVNTRVJUIChGQUxTRSk7DQo+PiArICByZXR1cm4gTlVMTDsNCj4+ICt9DQo+PiArDQo+PiAr LyoqDQo+PiArICBHZXQgY29uc3RhbnQgQmlnIG51bWJlciB3aXRoIHZhbHVlIG9mICIxIi4NCj4+ ICsgIFRoaXMgbWF5IGJlIHVzZWQgdG8gc2F2ZSBleHBlbnNpdmUgYWxsb2NhdGlvbnMuDQo+PiAr DQo+PiArICBAcmV0dmFsIEJpZyBOdW1iZXIgd2l0aCB2YWx1ZSBvZiAxLg0KPj4gKyoqLw0KPj4g K0NPTlNUIFZPSUQgKg0KPj4gK0VGSUFQSQ0KPj4gK0JpZ051bVZhbHVlT25lICgNCj4+ICsgIFZP SUQNCj4+ICsgICkNCj4+ICt7DQo+PiArICBBU1NFUlQgKEZBTFNFKTsNCj4+ICsgIHJldHVybiBO VUxMOw0KPj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ICsgIFNoaWZ0IHJpZ2h0IEJpZyBOdW1iZXIu DQo+PiArICBQbGVhc2Ugbm90ZSwgYWxsICJvdXQiIEJpZyBudW1iZXIgYXJndW1lbnRzIHNob3Vs ZCBiZSBwcm9wZXJseSANCj4+ICtpbml0aWFsaXplZA0KPj4gKyAgYnkgY2FsbGluZyB0byBCaWdO dW1Jbml0KCkgb3IgQmlnTnVtRnJvbUJpbigpIGZ1bmN0aW9ucy4NCj4+ICsNCj4+ICsgIEBwYXJh bVtpbl0gICBCbiAgICAgIEJpZyBudW1iZXIuDQo+PiArICBAcGFyYW1baW5dICAgbiAgICAgICBO dW1iZXIgb2YgYml0cyB0byBzaGlmdC4NCj4+ICsgIEBwYXJhbVtvdXRdICBCblJlcyAgIFRoZSBy ZXN1bHQuDQo+PiArDQo+PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgIE9uIHN1Y2Nl c3MuDQo+PiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTIEluIGNhc2Ugb2YgaW50ZXJu YWwgYWxsb2NhdGlvbiBmYWlsdXJlcy4NCj4+ICsgIEByZXR2YWwgRUZJX1BST1RPQ09MX0VSUk9S ICAgT3RoZXJ3aXNlLg0KPj4gKyoqLw0KPj4gK0VGSV9TVEFUVVMNCj4+ICtFRklBUEkNCj4+ICtC aWdOdW1SU2hpZnQgKA0KPj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuLA0KPj4gKyAgSU4gVUlOVE4g ICAgICAgbiwNCj4+ICsgIE9VVCBWT0lEICAgICAgICpCblJlcw0KPj4gKyAgKQ0KPj4gK3sNCj4+ ICsgIEFTU0VSVCAoRkFMU0UpOw0KPj4gKyAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4+ICt9 DQo+PiArDQo+PiArLyoqDQo+PiArICBNYXJrIEJpZyBOdW1iZXIgZm9yIGNvbnN0YW50IHRpbWUg Y29tcHV0YXRpb25zLg0KPj4gKyAgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlZm9y ZSBhbnkgY29uc3RhbnQgdGltZSANCj4+ICtjb21wdXRhdGlvbnMgYXJlDQo+PiArICBwZXJmb3Jt ZWQgb24gdGhlIGdpdmVuIEJpZyBudW1iZXIuDQo+PiArDQo+PiArICBAcGFyYW1baW5dICAgQm4g ICAgIEJpZyBudW1iZXIuDQo+PiArKiovDQo+PiArVk9JRA0KPj4gK0VGSUFQSQ0KPj4gK0JpZ051 bUNvbnN0dGltZSAoDQo+PiArICBJTiBWT0lEICAqQm4NCj4+ICsgICkNCj4+ICt7DQo+PiArICBB U1NFUlQgKEZBTFNFKTsNCj4+ICt9DQo+PiArDQo+PiArLyoqDQo+PiArICBDYWxjdWxhdGUgc3F1 YXJlIG1vZHVsby4NCj4+ICsgIFBsZWFzZSBub3RlLCBhbGwgIm91dCIgQmlnIG51bWJlciBhcmd1 bWVudHMgc2hvdWxkIGJlIHByb3Blcmx5IA0KPj4gK2luaXRpYWxpemVkDQo+PiArICBieSBjYWxs aW5nIHRvIEJpZ051bUluaXQoKSBvciBCaWdOdW1Gcm9tQmluKCkgZnVuY3Rpb25zLg0KPj4gKw0K Pj4gKyAgQHBhcmFtW2luXSAgIEJuQSAgICAgQmlnIG51bWJlci4NCj4+ICsgIEBwYXJhbVtpbl0g ICBCbk0gICAgIEJpZyBudW1iZXIgKG1vZHVsbykuDQo+PiArICBAcGFyYW1bb3V0XSAgQm5SZXMg ICBUaGUgcmVzdWx0LCBzdWNoIHRoYXQgKEJuQSBeIDIpICUgQm5NLg0KPj4gKw0KPj4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICBPbiBzdWNjZXNzLg0KPj4gKyAgQHJldHZhbCBFRklf T1VUX09GX1JFU09VUkNFUyBJbiBjYXNlIG9mIGludGVybmFsIGFsbG9jYXRpb24gZmFpbHVyZXMu DQo+PiArICBAcmV0dmFsIEVGSV9QUk9UT0NPTF9FUlJPUiAgIE90aGVyd2lzZS4NCj4+ICsqKi8N Cj4+ICtFRklfU1RBVFVTDQo+PiArRUZJQVBJDQo+PiArQmlnTnVtU3FyTW9kICgNCj4+ICsgIElO IENPTlNUIFZPSUQgICpCbkEsDQo+PiArICBJTiBDT05TVCBWT0lEICAqQm5NLA0KPj4gKyAgT1VU IFZPSUQgICAgICAgKkJuUmVzDQo+PiArICApDQo+PiArew0KPj4gKyAgQVNTRVJUIChGQUxTRSk7 DQo+PiArICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ ICsgIENyZWF0ZSBuZXcgQmlnIE51bWJlciBjb21wdXRhdGlvbiBjb250ZXh0LiBUaGlzIGlzIGFu IG9wYXF1ZSANCj4+ICtzdHJ1Y3R1cmUNCj4+ICsgIHdoaWNoIHNob3VsZCBiZSBwYXNzZWQgdG8g YW55IGZ1bmN0aW9uIHRoYXQgcmVxdWlyZXMgaXQuIFRoZSBCTiANCj4+ICtjb250ZXh0IGlzDQo+ PiArICBuZWVkZWQgdG8gb3B0aW1pemUgY2FsY3VsYXRpb25zIGFuZCBleHBlbnNpdmUgYWxsb2Nh dGlvbnMuDQo+PiArDQo+PiArICBAcmV0dmFsIEJpZyBOdW1iZXIgY29udGV4dCBzdHJ1Y3Qgb3Ig TlVMTCBvbiBmYWlsdXJlLg0KPj4gKyoqLw0KPj4gK1ZPSUQgKg0KPj4gK0VGSUFQSQ0KPj4gK0Jp Z051bU5ld0NvbnRleHQgKA0KPj4gKyAgVk9JRA0KPj4gKyAgKQ0KPj4gK3sNCj4+ICsgIEFTU0VS VCAoRkFMU0UpOw0KPj4gKyAgcmV0dXJuIE5VTEw7DQo+PiArfQ0KPj4gKw0KPj4gKy8qKg0KPj4g KyAgRnJlZSBCaWcgTnVtYmVyIGNvbnRleHQgdGhhdCB3YXMgYWxsb2NhdGVkIHdpdGggQmlnTnVt TmV3Q29udGV4dCgpLg0KPj4gKw0KPj4gKyAgQHBhcmFtW2luXSAgIEJuQ3R4ICAgICBCaWcgbnVt YmVyIGNvbnRleHQgdG8gZnJlZS4NCj4+ICsqKi8NCj4+ICtWT0lEDQo+PiArRUZJQVBJDQo+PiAr QmlnTnVtQ29udGV4dEZyZWUgKA0KPj4gKyAgSU4gVk9JRCAgKkJuQ3R4DQo+PiArICApDQo+PiAr ew0KPj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+PiArfQ0KPj4gKw0KPj4gKy8qKg0KPj4gKyAgU2V0 IEJpZyBOdW1iZXIgdG8gYSBnaXZlbiB2YWx1ZS4NCj4+ICsNCj4+ICsgIEBwYXJhbVtpbl0gICBC biAgICAgQmlnIG51bWJlciB0byBzZXQuDQo+PiArICBAcGFyYW1baW5dICAgVmFsICAgIFZhbHVl IHRvIHNldC4NCj4+ICsqKi8NCj4+ICtFRklfU1RBVFVTDQo+PiArRUZJQVBJDQo+PiArQmlnTnVt U2V0VWludCAoDQo+PiArICBJTiBWT0lEICAgKkJuLA0KPj4gKyAgSU4gVUlOVE4gIFZhbA0KPj4g KyAgKQ0KPj4gK3sNCj4+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPj4gKyAgcmV0dXJuIEVGSV9VTlNV UFBPUlRFRDsNCj4+ICt9DQo+PiArDQo+PiArLyoqDQo+PiArICBBZGQgdHdvIEJpZyBOdW1iZXJz IG1vZHVsbyBCbk0uDQo+PiArDQo+PiArICBAcGFyYW1baW5dICAgQm5BICAgICAgIEJpZyBudW1i ZXIuDQo+PiArICBAcGFyYW1baW5dICAgQm5CICAgICAgIEJpZyBudW1iZXIuDQo+PiArICBAcGFy YW1baW5dICAgQm5NICAgICAgIEJpZyBudW1iZXIgKG1vZHVsbykuDQo+PiArICBAcGFyYW1bb3V0 XSAgQm5SZXMgICAgIFRoZSByZXN1bHQsIHN1Y2ggdGhhdCAoQm5BICsgQm5CKSAlIEJuTS4NCj4+ ICsNCj4+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgT24gc3VjY2Vzcy4NCj4+ICsg IEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgSW4gY2FzZSBvZiBpbnRlcm5hbCBhbGxvY2F0 aW9uIGZhaWx1cmVzLg0KPj4gKyAgQHJldHZhbCBFRklfUFJPVE9DT0xfRVJST1IgICBPdGhlcndp c2UuDQo+PiArKiovDQo+PiArRUZJX1NUQVRVUw0KPj4gK0VGSUFQSQ0KPj4gK0JpZ051bUFkZE1v ZCAoDQo+PiArICBJTiBDT05TVCBWT0lEICAqQm5BLA0KPj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJu QiwNCj4+ICsgIElOIENPTlNUIFZPSUQgICpCbk0sDQo+PiArICBPVVQgVk9JRCAgICAgICAqQm5S ZXMNCj4+ICsgICkNCj4+ICt7DQo+PiArICBBU1NFUlQgKEZBTFNFKTsNCj4+ICsgIHJldHVybiBF RklfVU5TVVBQT1JURUQ7DQo+PiArfQ0KPj4gLS0NCj4+IDIuMzMuMC53aW5kb3dzLjINCj4+IA0K