From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by mx.groups.io with SMTP id smtpd.web11.8473.1663777299199910626 for ; Wed, 21 Sep 2022 09:21:39 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=Y0Ci+46d; spf=pass (domain: intel.com, ip: 134.134.136.24, mailfrom: michael.d.kinney@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1663777299; x=1695313299; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=A78HOkGeLAjPxVEkD8rYpsrx/EVArUYFlgML4X0KQ68=; b=Y0Ci+46dFnbGQ8hV1WGjVrguHV8LilAj/6JLr1pc1i5aVsuR/2W6lBVG ytlOi4Qt1UHYzL6jMZF1xhmFODUP/IeeSioNJtSECa5R91Mb4+djiy5/E 8hLZ/VxKe9Totj2oBaDMw0PUX8rDXT9noce5o9y4QC/6yuKwAgY1YnPiR WChwgYOz0M76lU9XVsd2wix9f40vdib4DWy+10hXYwHbJ8AHDUO5Eg/do zucnIEKqmbcSMds1yVF9eZCMUQWwLKz79iuVAjlLfHevhvDSIsV1D/b+v Kk7Xzpag0+32YySYDG/Ct51twscVkbF9c37av7yLc7bamJ028WVD7tvAp Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10477"; a="300892627" X-IronPort-AV: E=Sophos;i="5.93,333,1654585200"; d="scan'208";a="300892627" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Sep 2022 09:21:38 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,333,1654585200"; d="scan'208";a="650144383" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by orsmga008.jf.intel.com with ESMTP; 21 Sep 2022 09:21:38 -0700 Received: from fmsmsx607.amr.corp.intel.com (10.18.126.87) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Wed, 21 Sep 2022 09:21:37 -0700 Received: from fmsmsx612.amr.corp.intel.com (10.18.126.92) by fmsmsx607.amr.corp.intel.com (10.18.126.87) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Wed, 21 Sep 2022 09:21:36 -0700 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) 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.2375.31 via Frontend Transport; Wed, 21 Sep 2022 09:21:36 -0700 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (104.47.59.168) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2375.31; Wed, 21 Sep 2022 09:21:34 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LhPDp+ifVM5Ic30lkAWCtUTtBWX/entogaLXQ8C1EJefxrkTlH8z2c63mTUvic5hjgDHGEifknM7n/XhV8WrAQUpZrSaYmJiqFeTGTQ6v9dva0bEhyyarfiOYnKilA5RtRdJ4NFE0Sz+CqMGlEYAlRYQj1J1AM0H9H0rb2NMrMRDzzM96w6+3eMv9TtgkYdnuehp5kf475D+prphFstuu2rOB1USEmdyvB15CykfszLeM7zQcIxTBce33nDRyXeWH+FzM9yspYiYOse9x9hhTlQKBWrXsOIG5LTRBLfKROnEyDkwv3cafoiG2U6HqNyidI+1EygISw/xs5+mSyvEew== 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=A78HOkGeLAjPxVEkD8rYpsrx/EVArUYFlgML4X0KQ68=; b=KN3A1KUNw7DfUt+FCbdDT+7yvghu+MzlCt79mreCmt/CtWvnayJEVh3CtWDABmlRArcD+wyQJCXmSG/BzxYQs6ARkrrfLQtB+GCBbKB+ACcIm6iW/yBX7ymd+2f0JuEFftRao/OOkt8Qw3CBTX05UulpQs2KWJywumlnh8HTNdjiPPAR0tjzHw2MV2CUVzS7UcUk95HDGcOSs3fKJDa8Pp568YZPpAIb0ZPpVb0izZN7HRecPTOsQdotfxKPNTZsRR6rxbw7iDvm9Bmqef8VkdTvAFqZ053giXa35ARQDBjiWViE0OjaMsroRgLYpntgk6sLxfXdoNg/JEfdCSYtwg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from CO1PR11MB4929.namprd11.prod.outlook.com (2603:10b6:303:6d::19) by MW3PR11MB4537.namprd11.prod.outlook.com (2603:10b6:303:5d::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.14; Wed, 21 Sep 2022 16:21:32 +0000 Received: from CO1PR11MB4929.namprd11.prod.outlook.com ([fe80::ce64:b1b4:e087:4cc2]) by CO1PR11MB4929.namprd11.prod.outlook.com ([fe80::ce64:b1b4:e087:4cc2%7]) with mapi id 15.20.5654.014; Wed, 21 Sep 2022 16:21:32 +0000 From: "Michael D Kinney" To: "devel@edk2.groups.io" , "Li, Yi1" , "Kinney, Michael D" CC: "Yao, Jiewen" , "Wang, Jian J" , "Lu, Xiaoyu1" , "Jiang, Guomin" Subject: Re: [edk2-devel] [PATCH V2 1/3] CryptoPkg: Add EC support Thread-Topic: [edk2-devel] [PATCH V2 1/3] CryptoPkg: Add EC support Thread-Index: AQHYzXZUSlj4dA4GnU+byMn1X74/Xa3qEDxA Date: Wed, 21 Sep 2022 16:21:31 +0000 Message-ID: References: <9dcccc674996fa3fdcb8858e3609437e66ce82ac.1663735439.git.yi1.li@intel.com> In-Reply-To: <9dcccc674996fa3fdcb8858e3609437e66ce82ac.1663735439.git.yi1.li@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.6.500.17 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CO1PR11MB4929:EE_|MW3PR11MB4537:EE_ x-ms-office365-filtering-correlation-id: 3b2b3d7d-d05d-47b7-cdde-08da9bed5868 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: q1U0fzK7LJ5OkQoY2D3Z3YyxXFr2RkjTLQ5tGd11b8xes8EkFqZxrCiFX4gB1g3irefDHUGPXuW4++D+vaMRkzqejSWxW5d4gJyYo21P3l2/ONMtLx0RQXGi7nvwkV3p6HoPxjPldCvQ8Y0JZNJjo4AfLldKPAOmBIrVKLU3/lvaz5GdX6QVmffzfO70R6pA0D9z1YxLDbfDsJJiumrfNl63FVGFpDtmHPh95nRBA2X9X4zJ0hczFm4Llti/yg5V8dl3OLAVmUX3TNDC878xPQ2wVDID1u+KHjb0Wp5a7zbQXsMZMDRuB19+sNsIluRhrpgK5xoAHnWQ+xKQ+jLlqj2l4zcciIyzrF/C+Je4keAlEWLCj038oL5sLGpOyjJ6fCCVGDFpdYJ6vSX/Z6nT3SnvbQwxq3fg8Qa6tinde+KON/L2c7A5pVy4XFtsLSrlxutIzc6hLheUN6Lc0Wqkg1PzIwll5VlHzp8Ji3VijGluFnlU2cFksGFyEeN1vnUlLUR3EbZeDbczHjq5XwqL8eLlWqM+5b9kZFb720IfTcnikRLjdZQbwY+gOytrHtEc0Wkxcv1zvIBsdfvYNK4jcl4WAVPgO874/PybPhT5+VxU94OCoMwqimXPcYp1A+Ld6z3l44XQnquKkxMw/cCXGFg2fWik5zp8zorcMKVrNhsEyioirJG/psaT/yfxZZnvZZ/8smCP5Jc6oC+iLx4L+rA7PfCJTeTxZ8F5sUtwJzmeFRAZ81hYDgdzu1vLk07dHyPvjR5+ysb3z2Mk3pzqRnS5RyhPdkuvHc23rSaPlvypK+IkR/kAL+/knsWCd/lboPZK7GVHN0gu19Rg3QkEag== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CO1PR11MB4929.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(346002)(136003)(39860400002)(376002)(396003)(366004)(451199015)(478600001)(41300700001)(38070700005)(71200400001)(107886003)(86362001)(52536014)(66476007)(76116006)(4326008)(5660300002)(8676002)(966005)(66946007)(55016003)(66446008)(64756008)(66556008)(30864003)(82960400001)(33656002)(38100700002)(2906002)(19627235002)(122000001)(8936002)(316002)(54906003)(110136005)(186003)(26005)(7696005)(9686003)(83380400001)(6506007)(53546011)(559001)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?TzJYT3dPWmRHSWlYMHVZS0liLzlldWQxNXNhZGpTQ2ZVMzh4WVV3SFY0SVEy?= =?utf-8?B?NTkwSzF5dE54b0w5aW5lTFVqT0xnNlNkOE1VQm9zTWZJc0RGYy9JQkVjaytu?= =?utf-8?B?aUZENm95bmtDSUtmWURkVnRwcGp2Sm05MUljeWo5b0VRM1pCNlp3TXRuRjQ0?= =?utf-8?B?RmtpQmtadk9qc01Qb3RVbHNjaWdPZHQ2V1Y4VlN1dGNNYllZaGYvc0RUTER3?= =?utf-8?B?NnY5Q1FtckRLM1Bjb3BxaDMxMkk3Y0Y3eEVnWS9kNFpMMkx0bUF5RGFzL3Rw?= =?utf-8?B?bDE5eUNmTGRwS1VvR01LN1IzOEtLcERZMmVJdHh3T1R6bis2ODFseC9ocnBp?= =?utf-8?B?QkdsVmZXOFl0UFpxUjR6WmJVZm05aVNjTkIzZ2tWUm9kbTRhMk15NlVnL1BZ?= =?utf-8?B?N3o2dTRwaFRzQUJmaGZVaHNmM1VkTmJucGJjOXZZdVl2a1JTaXplRDYxRko1?= =?utf-8?B?RTdQZi9IQWYzQkxlV1JoVElnSXhQSC9OTzJWK2dKM2JkOHlBRDFZWEx6VVZp?= =?utf-8?B?K3FCczFmREhoV2xseDNIWHZYSDVPdklJMUE1Y3l6MU85aEJOT0kyK3NTdmQ1?= =?utf-8?B?QUp2dGp2MFdzZ0JVMzc1L1ErWnFJTlh5SjRXWldZYms5cStMYzZjL2N3dGpw?= =?utf-8?B?ak04ZkV6MWplcUR3dzJaV2RjMWc4Qlk0Rmpodkx6Mm9Mek40cTVOZFZxVE1a?= =?utf-8?B?aDhXN1Rxa045Y0lDYWZzS1VXMWl5Zkl5S0NWMXF4c2RjaUhGemduVi85ZWhF?= =?utf-8?B?VTRMZFpDbW85TkRjZXNFNDd0Y0hxbE1OQU9XNmVrRXdtSVpjVlpSNzdHZHgv?= =?utf-8?B?TXVqR1pVR3pWS3lPRHBVOG9vaUJEVTBldUJjZlc2bjB2S2FFM0g0WFJodVpD?= =?utf-8?B?c1FpUFQ0R1p0WjUvMWYxaytOaTlWcnFuZ2dFQUlCZm5mYThWMnFDK00vYjE3?= =?utf-8?B?YlVQdE91dEVjcGhLRnlkWk1odVgvaTNiTlR2VU0wR3d5STBNVk5nbDlwT2Q4?= =?utf-8?B?S2k5YjNoMHp4ZmNFbDRIVEFmUkFUV3gxZEZqeldhcjZrRnBES0N0aFBFcWZR?= =?utf-8?B?NUwxbmJIMGhKL1R0cnY2RzgyQWJlM0REUk1JYXVpbjk5bFRoYkF1UDBHbEJ2?= =?utf-8?B?SGVlQ01ZZTE2NEx4Zi9RSm1IQUFzSWVIWjFWbmZGMUE1TVhPZ050NE9NN3ps?= =?utf-8?B?M0RwV01kY0Juak1oY0ZYeXJiUlQrYzJrL0tZSmtwMEhqK1VEL01OUGVwTWlS?= =?utf-8?B?ZWJhVnpwVVk5dEN5WjlIeGJHQW5BN1pWcC8rUjFRTXBMa3lHSHNBQVNOaUlR?= =?utf-8?B?VUZoYWs4KzB2eVUvdU03M2VKZXpLZHQ5THVFZnRiWGhyUm15cmh3NHF5QWZr?= =?utf-8?B?Wm9jM0NxOHh0RWwyem1wT24za0Z3dllSQnFPWkhrMitJY0R2QVNLUHMrcENh?= =?utf-8?B?Z1F3RlFySThyU1RSU1M4MGVTWFJQWDJkUnRDTnBaYmxOR09Ic1NZUjlKNk5j?= =?utf-8?B?NFZQbUpFdHBqT0xVVGpVcUZPSUQ5ZXhYOE95RzYwU2piZm1Td1p2dEdYbDQ2?= =?utf-8?B?MlBFSnVlbm5aMm8xNEp5TjB4TGpMbGNjSDhiK2c5V2FIL3ZvSWdRZnFPc3hQ?= =?utf-8?B?TThsS0VzTVBHcUFqcXEwN0Q0OGx6V0Z6Lyt4UVVjK3NaY3J2R040QjROQkJB?= =?utf-8?B?RS83cGdtK050WlJQaXJhQU1MeDJMRkl6bHlHSlE4UWJJRWYyUGxjUHhFTk90?= =?utf-8?B?allXazVJNGlBaWJGdk9GaytiYkhubHdybW1xZ3AwUXpnUm1oc1pRNFIxZGNM?= =?utf-8?B?TlllY1oxemdFaC9lbDV3bUd6cCs4Rm1obXZqa0JzSzhHUS9ER0JSVjJ1OXBn?= =?utf-8?B?KzdqakJBREoyNXkyc1hhcmxqNWhPL0c5K2M1c0lWazFWRWJwc0wwOW10QzZx?= =?utf-8?B?OGkrN0o3elJRWkdOcERDUkVpNEJYQ1IvV1Y4eXUrc1RWQ1p1c0xDZ0h0aWRl?= =?utf-8?B?YU9zbzgybjFWdXdnZk5sUitDTmNLOGh5RThlc3dVeExqR1RvcVdkaExUaTc2?= =?utf-8?B?NjlMd0FxT2EvSWtJNHJqU0puQUhOMjM1WWV0QjF5emZyUjBjUzhmc3o1cjJR?= =?utf-8?B?V21OSzJrcWw2Q2hLUGVaZ2UzSXUwU3hUanpOUjdsNWRBUGUzdHhHRUVjSm1m?= =?utf-8?B?Qmc9PQ==?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CO1PR11MB4929.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3b2b3d7d-d05d-47b7-cdde-08da9bed5868 X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Sep 2022 16:21:31.8851 (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: GcsHCEeoiLgvrAgBLFgGAxEPmGIHJWtoPBqiRNrPVlW0cz8RxUN0Dkd3Mi+Aiongakl9jcyUNgCyqS8Y4h7CjBZUMDpCBZ8u6t5xT246ESo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW3PR11MB4537 Return-Path: michael.d.kinney@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Q29tbWVudHMgZW1iZWRkZWQgYmVsb3cuDQoNCk1pa2UNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3Nh Z2UtLS0tLQ0KPiBGcm9tOiBkZXZlbEBlZGsyLmdyb3Vwcy5pbyA8ZGV2ZWxAZWRrMi5ncm91cHMu aW8+IE9uIEJlaGFsZiBPZiB5aTEgbGkNCj4gU2VudDogVHVlc2RheSwgU2VwdGVtYmVyIDIwLCAy MDIyIDk6NTUgUE0NCj4gVG86IGRldmVsQGVkazIuZ3JvdXBzLmlvDQo+IENjOiBMaSwgWWkxIDx5 aTEubGlAaW50ZWwuY29tPjsgWWFvLCBKaWV3ZW4gPGppZXdlbi55YW9AaW50ZWwuY29tPjsgV2Fu ZywgSmlhbiBKIDxqaWFuLmoud2FuZ0BpbnRlbC5jb20+OyBMdSwgWGlhb3l1MQ0KPiA8eGlhb3l1 MS5sdUBpbnRlbC5jb20+OyBKaWFuZywgR3VvbWluIDxndW9taW4uamlhbmdAaW50ZWwuY29tPg0K PiBTdWJqZWN0OiBbZWRrMi1kZXZlbF0gW1BBVENIIFYyIDEvM10gQ3J5cHRvUGtnOiBBZGQgRUMg c3VwcG9ydA0KPiANCj4gUkVGOiBodHRwczovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hvd19i dWcuY2dpP2lkPTM4MjgNCj4gDQo+IFRoaXMgcGF0Y2ggaXMgdXNlZCB0byBhZGQgQ3J5cHRFYyBs aWJyYXJ5LCB3aGljaCBpcyB3cmFwcGVkDQo+IG92ZXIgT3BlblNTTC4NCj4gDQo+IENjOiBKaWV3 ZW4gWWFvIDxqaWV3ZW4ueWFvQGludGVsLmNvbT4NCj4gQ2M6IEppYW4gSiBXYW5nIDxqaWFuLmou d2FuZ0BpbnRlbC5jb20+DQo+IENjOiBYaWFveXUgTHUgPHhpYW95dTEubHVAaW50ZWwuY29tPg0K PiBDYzogR3VvbWluIEppYW5nIDxndW9taW4uamlhbmdAaW50ZWwuY29tPg0KPiANCj4gU2lnbmVk LW9mZi1ieTogWWkgTGkgPHlpMS5saUBpbnRlbC5jb20+DQo+IC0tLQ0KPiAgQ3J5cHRvUGtnL0lu Y2x1ZGUvTGlicmFyeS9CYXNlQ3J5cHRMaWIuaCAgICAgIHwgNDI0ICsrKysrKysrKysNCj4gIC4u Li9MaWJyYXJ5L0Jhc2VDcnlwdExpYi9CYXNlQ3J5cHRMaWIuaW5mICAgICB8ICAgMiArDQo+ICAu Li4vTGlicmFyeS9CYXNlQ3J5cHRMaWIvUGVpQ3J5cHRMaWIuaW5mICAgICAgfCAgIDEgKw0KPiAg Q3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1BrL0NyeXB0RWMuYyAgIHwgNzY1ICsrKysr KysrKysrKysrKysrKw0KPiAgLi4uL0xpYnJhcnkvQmFzZUNyeXB0TGliL1BrL0NyeXB0RWNOdWxs LmMgICAgIHwgNDk2ICsrKysrKysrKysrKw0KPiAgLi4uL0xpYnJhcnkvQmFzZUNyeXB0TGliL1Nt bUNyeXB0TGliLmluZiAgICAgIHwgICAxICsNCj4gIC4uLi9CYXNlQ3J5cHRMaWJOdWxsL0Jhc2VD cnlwdExpYk51bGwuaW5mICAgICB8ICAgMSArDQo+ICAuLi4vTGlicmFyeS9CYXNlQ3J5cHRMaWJO dWxsL1BrL0NyeXB0RWNOdWxsLmMgfCA0OTYgKysrKysrKysrKysrDQo+ICA4IGZpbGVzIGNoYW5n ZWQsIDIxODYgaW5zZXJ0aW9ucygrKQ0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IENyeXB0b1BrZy9M aWJyYXJ5L0Jhc2VDcnlwdExpYi9Qay9DcnlwdEVjLmMNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBD cnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvUGsvQ3J5cHRFY051bGwuYw0KPiAgY3JlYXRl IG1vZGUgMTAwNjQ0IENyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYk51bGwvUGsvQ3J5cHRF Y051bGwuYw0KPiANCj4gZGlmZiAtLWdpdCBhL0NyeXB0b1BrZy9JbmNsdWRlL0xpYnJhcnkvQmFz ZUNyeXB0TGliLmggYi9DcnlwdG9Qa2cvSW5jbHVkZS9MaWJyYXJ5L0Jhc2VDcnlwdExpYi5oDQo+ IGluZGV4IGIyNTM5MjNkZDguLmQ3NGZjMjFjMWUgMTAwNjQ0DQo+IC0tLSBhL0NyeXB0b1BrZy9J bmNsdWRlL0xpYnJhcnkvQmFzZUNyeXB0TGliLmgNCj4gKysrIGIvQ3J5cHRvUGtnL0luY2x1ZGUv TGlicmFyeS9CYXNlQ3J5cHRMaWIuaA0KPiBAQCAtMTQsNiArMTQsMTMgQEAgU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gDQo+ICAjaW5jbHVkZSA8VWVmaS9V ZWZpQmFzZVR5cGUuaD4NCj4gDQo+ICsjZGVmaW5lIENSWVBUT19OSURfTlVMTCAgMHgwMDAwDQo+ ICsNCj4gKy8vIEtleSBFeGNoYW5nZQ0KPiArI2RlZmluZSBDUllQVE9fTklEX1NFQ1AyNTZSMSAg MHgwMjA0DQo+ICsjZGVmaW5lIENSWVBUT19OSURfU0VDUDM4NFIxICAweDAyMDUNCj4gKyNkZWZp bmUgQ1JZUFRPX05JRF9TRUNQNTIxUjEgIDB4MDIwNg0KPiArDQo+ICAvLy8NCj4gIC8vLyBNRDUg ZGlnZXN0IHNpemUgaW4gYnl0ZXMNCj4gIC8vLw0KPiBAQCAtMjg1MCw0ICsyODU3LDQyMSBAQCBC aWdOdW1BZGRNb2QgKA0KPiAgICBPVVQgVk9JRCAgICAgICAqQm5SZXMNCj4gICAgKTsNCj4gDQo+ ICsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ICsvLyAgICBCYXNpYyBFbGxpcHRp YyBDdXJ2ZSBQcmltaXRpdmVzDQo+ICsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ ICsNCj4gKy8qKg0KPiArICBJbml0aWFsaXplIG5ldyBvcGFxdWUgRWNHcm91cCBvYmplY3QuIFRo aXMgb2JqZWN0IHJlcHJlc2VudHMgYW4gRUMgY3VydmUgYW5kDQo+ICsgIGFuZCBpcyB1c2VkIGZv ciBjYWxjdWxhdGlvbiB3aXRoaW4gdGhpcyBncm91cC4gVGhpcyBvYmplY3Qgc2hvdWxkIGJlIGZy ZWVkDQo+ICsgIHVzaW5nIEVjR3JvdXBGcmVlKCkgZnVuY3Rpb24uDQo+ICsNCj4gKyAgQHBhcmFt W2luXSAgQ3J5cHRvTmlkICAgSWRlbnRpZnlpbmcgbnVtYmVyIGZvciB0aGUgRUNDIGN1cnZlIChE ZWZpbmVkIGluDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2VDcnlwdExpYi5oKS4N Cj4gKw0KPiArICBAcmV0dmFsIEVjR3JvdXAgb2JqZWN0ICBPbiBzdWNjZXNzLg0KPiArICBAcmV0 dmFsIE5VTEwgICAgICAgICAgICBPbiBmYWlsdXJlLg0KPiArKiovDQo+ICtWT0lEICoNCj4gK0VG SUFQSQ0KPiArRWNHcm91cEluaXQgKA0KPiArICBJTiBVSU5UTiAgQ3J5cHRvTmlkDQo+ICsgICk7 DQo+ICsNCj4gKy8qKg0KPiArICBHZXQgRUMgY3VydmUgcGFyYW1ldGVycy4gV2hpbGUgZWxsaXB0 aWMgY3VydmUgZXF1YXRpb24gaXMgWV4yIG1vZCBQID0gKFheMyArIEFYICsgQikgTW9kIFAuDQo+ ICsgIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgdGhlIHByb3ZpZGVkIEJpZyBOdW1iZXIgb2JqZWN0 cyAgdG8gdGhlIGNvcnJlc3BvbmRpbmcNCj4gKyAgdmFsdWVzLiBUaGUgY2FsbGVyIG5lZWRzIHRv IG1ha2Ugc3VyZSBhbGwgdGhlICJvdXQiIEJpZ051bWJlciBwYXJhbWV0ZXJzDQo+ICsgIGFyZSBw cm9wZXJseSBpbml0aWFsaXplZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBFY0dyb3VwICAgIEVD IGdyb3VwIG9iamVjdC4NCj4gKyAgQHBhcmFtW291dF0gQm5QcmltZSAgICBHcm91cCBwcmltZSBu dW1iZXIuDQo+ICsgIEBwYXJhbVtvdXRdIEJuQSAgICAgICAgQSBjb2VmZmljaWVudC4NCj4gKyAg QHBhcmFtW291dF0gQm5CICAgICAgICBCIGNvZWZmaWNpZW50Lg0KPiArICBAcGFyYW1baW5dICBC bkN0eCAgICAgIEJOIGNvbnRleHQuDQo+ICsNCj4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgIE9u IHN1Y2Nlc3MuDQo+ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndpc2UuDQo+ICsqKi8N Cj4gK0JPT0xFQU4NCj4gK0VGSUFQSQ0KPiArRWNHcm91cEdldEN1cnZlICgNCj4gKyAgSU4gQ09O U1QgVk9JRCAgKkVjR3JvdXAsDQo+ICsgIE9VVCBWT0lEICAgICAgICpCblByaW1lLA0KPiArICBP VVQgVk9JRCAgICAgICAqQm5BLA0KPiArICBPVVQgVk9JRCAgICAgICAqQm5CLA0KPiArICBJTiBW T0lEICAgICAgICAqQm5DdHgNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIEdldCBFQyBncm91 cCBvcmRlci4NCj4gKyAgVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgcHJvdmlkZWQgQmlnIE51 bWJlciBvYmplY3QgdG8gdGhlIGNvcnJlc3BvbmRpbmcNCj4gKyAgdmFsdWUuIFRoZSBjYWxsZXIg bmVlZHMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlICJvdXQiIEJpZ051bWJlciBwYXJhbWV0ZXINCj4g KyAgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgRWNHcm91 cCAgIEVDIGdyb3VwIG9iamVjdC4NCj4gKyAgQHBhcmFtW291dF0gQm5PcmRlciAgIEdyb3VwIHBy aW1lIG51bWJlci4NCj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24gc3VjY2Vzcy4N Cj4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4NCj4gKyoqLw0KPiArQk9PTEVB Tg0KPiArRUZJQVBJDQo+ICtFY0dyb3VwR2V0T3JkZXIgKA0KPiArICBJTiBWT0lEICAgKkVjR3Jv dXAsDQo+ICsgIE9VVCBWT0lEICAqQm5PcmRlcg0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAg RnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBFQyBncm91cCBvYmplY3QgdXNpbmcgRWNHcm91cElu aXQoKS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBFY0dyb3VwICAgRUMgZ3JvdXAgb2JqZWN0IHRv IGZyZWUuDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0VGSUFQSQ0KPiArRWNHcm91cEZyZWUgKA0KPiAr ICBJTiBWT0lEICAqRWNHcm91cA0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgSW5pdGlhbGl6 ZSBuZXcgb3BhcXVlIEVDIFBvaW50IG9iamVjdC4gVGhpcyBvYmplY3QgcmVwcmVzZW50cyBhbiBF QyBwb2ludA0KPiArICB3aXRoaW4gdGhlIGdpdmVuIEVDIGdyb3VwIChjdXJ2ZSkuDQo+ICsNCj4g KyAgQHBhcmFtW2luXSAgRUMgR3JvdXAsIHByb3Blcmx5IGluaXRpYWxpemVkIHVzaW5nIEVjR3Jv dXBJbml0KCkuDQo+ICsNCj4gKyAgQHJldHZhbCBFQyBQb2ludCBvYmplY3QgIE9uIHN1Y2Nlc3Mu DQo+ICsgIEByZXR2YWwgTlVMTCAgICAgICAgICAgICBPbiBmYWlsdXJlLg0KPiArKiovDQo+ICtW T0lEICoNCj4gK0VGSUFQSQ0KPiArRWNQb2ludEluaXQgKA0KPiArICBJTiBDT05TVCBWT0lEICAq RWNHcm91cA0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgRnJlZSBwcmV2aW91c2x5IGFsbG9j YXRlZCBFQyBQb2ludCBvYmplY3QgdXNpbmcgRWNQb2ludEluaXQoKS4NCj4gKw0KPiArICBAcGFy YW1baW5dICBFY1BvaW50ICAgRUMgUG9pbnQgdG8gZnJlZS4NCj4gKyAgQHBhcmFtW2luXSAgQ2xl YXIgICAgIFRSVUUgaWZmIHRoZSBtZW1vcnkgc2hvdWxkIGJlIGNsZWFyZWQuDQo+ICsqKi8NCj4g K1ZPSUQNCj4gK0VGSUFQSQ0KPiArRWNQb2ludERlSW5pdCAoDQo+ICsgIElOIFZPSUQgICAgICpF Y1BvaW50LA0KPiArICBJTiBCT09MRUFOICBDbGVhcg0KPiArICApOw0KPiArDQo+ICsvKioNCj4g KyAgR2V0IEVDIHBvaW50IGFmZmluZSAoeCx5KSBjb29yZGluYXRlcy4NCj4gKyAgVGhpcyBmdW5j dGlvbiB3aWxsIHNldCB0aGUgcHJvdmlkZWQgQmlnIE51bWJlciBvYmplY3RzIHRvIHRoZSBjb3Jy ZXNwb25kaW5nDQo+ICsgIHZhbHVlcy4gVGhlIGNhbGxlciBuZWVkcyB0byBtYWtlIHN1cmUgYWxs IHRoZSAib3V0IiBCaWdOdW1iZXIgcGFyYW1ldGVycw0KPiArICBhcmUgcHJvcGVybHkgaW5pdGlh bGl6ZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgRWNHcm91cCAgICBFQyBncm91cCBvYmplY3Qu DQo+ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnQgICAgRUMgcG9pbnQgb2JqZWN0Lg0KPiArICBAcGFy YW1bb3V0XSBCblggICAgICAgIFggY29vcmRpbmF0ZS4NCj4gKyAgQHBhcmFtW291dF0gQm5ZICAg ICAgICBZIGNvb3JkaW5hdGUuDQo+ICsgIEBwYXJhbVtpbl0gIEJuQ3R4ICAgICAgQk4gY29udGV4 dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5ld0NvbnRleHQoKS4NCj4gKw0KPiArICBAcmV0dmFsIFRS VUUgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVy d2lzZS4NCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArRUZJQVBJDQo+ICtFY1BvaW50R2V0QWZmaW5l Q29vcmRpbmF0ZXMgKA0KPiArICBJTiBDT05TVCBWT0lEICAqRWNHcm91cCwNCj4gKyAgSU4gQ09O U1QgVk9JRCAgKkVjUG9pbnQsDQo+ICsgIE9VVCBWT0lEICAgICAgICpCblgsDQo+ICsgIE9VVCBW T0lEICAgICAgICpCblksDQo+ICsgIElOIFZPSUQgICAgICAgICpCbkN0eA0KPiArICApOw0KPiAr DQo+ICsvKioNCj4gKyAgU2V0IEVDIHBvaW50IGFmZmluZSAoeCx5KSBjb29yZGluYXRlcy4NCj4g Kw0KPiArICBAcGFyYW1baW5dICBFY0dyb3VwICAgIEVDIGdyb3VwIG9iamVjdC4NCj4gKyAgQHBh cmFtW2luXSAgRWNQb2ludCAgICBFQyBwb2ludCBvYmplY3QuDQo+ICsgIEBwYXJhbVtpbl0gIEJu WCAgICAgICAgWCBjb29yZGluYXRlLg0KPiArICBAcGFyYW1baW5dICBCblkgICAgICAgIFkgY29v cmRpbmF0ZS4NCj4gKyAgQHBhcmFtW2luXSAgQm5DdHggICAgICBCTiBjb250ZXh0LCBjcmVhdGVk IHdpdGggQmlnTnVtTmV3Q29udGV4dCgpLg0KPiArDQo+ICsgIEByZXR2YWwgVFJVRSAgICAgICAg ICBPbiBzdWNjZXNzLg0KPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiAr KiovDQo+ICtCT09MRUFODQo+ICtFRklBUEkNCj4gK0VjUG9pbnRTZXRBZmZpbmVDb29yZGluYXRl cyAoDQo+ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiArICBJTiBWT0lEICAgICAgICAq RWNQb2ludCwNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuWCwNCj4gKyAgSU4gQ09OU1QgVk9JRCAg KkJuWSwNCj4gKyAgSU4gVk9JRCAgICAgICAgKkJuQ3R4DQo+ICsgICk7DQo+ICsNCj4gKy8qKg0K PiArICBFQyBQb2ludCBhZGRpdGlvbi4gRWNQb2ludFJlc3VsdCA9IEVjUG9pbnRBICsgRWNQb2lu dEIuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgRWNHcm91cCAgICAgICAgICBFQyBncm91cCBvYmpl Y3QuDQo+ICsgIEBwYXJhbVtvdXRdIEVjUG9pbnRSZXN1bHQgICAgRUMgcG9pbnQgdG8gaG9sZCB0 aGUgcmVzdWx0LiBUaGUgcG9pbnQgc2hvdWxkDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuDQo+ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnRB ICAgICAgICAgRUMgUG9pbnQuDQo+ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnRCICAgICAgICAgRUMg UG9pbnQuDQo+ICsgIEBwYXJhbVtpbl0gIEJuQ3R4ICAgICAgICAgICAgQk4gY29udGV4dCwgY3Jl YXRlZCB3aXRoIEJpZ051bU5ld0NvbnRleHQoKS4NCj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICAg ICAgICAgT24gc3VjY2Vzcy4NCj4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4N Cj4gKyoqLw0KPiArQk9PTEVBTg0KPiArRUZJQVBJDQo+ICtFY1BvaW50QWRkICgNCj4gKyAgSU4g Q09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ICsgIE9VVCBWT0lEICAgICAgICpFY1BvaW50UmVzdWx0 LA0KPiArICBJTiBDT05TVCBWT0lEICAqRWNQb2ludEEsDQo+ICsgIElOIENPTlNUIFZPSUQgICpF Y1BvaW50QiwNCj4gKyAgSU4gVk9JRCAgICAgICAgKkJuQ3R4DQo+ICsgICk7DQo+ICsNCj4gKy8q Kg0KPiArICBWYXJpYWJsZSBFQyBwb2ludCBtdWx0aXBsaWNhdGlvbi4gRWNQb2ludFJlc3VsdCA9 IEVjUG9pbnQgKiBCblBTY2FsYXIuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgRWNHcm91cCAgICAg ICAgICBFQyBncm91cCBvYmplY3QuDQo+ICsgIEBwYXJhbVtvdXRdIEVjUG9pbnRSZXN1bHQgICAg RUMgcG9pbnQgdG8gaG9sZCB0aGUgcmVzdWx0LiBUaGUgcG9pbnQgc2hvdWxkDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuDQo+ICsgIEBw YXJhbVtpbl0gIEVjUG9pbnQgICAgICAgICAgRUMgUG9pbnQuDQo+ICsgIEBwYXJhbVtpbl0gIEJu UFNjYWxhciAgICAgICAgUCBTY2FsYXIuDQo+ICsgIEBwYXJhbVtpbl0gIEJuQ3R4ICAgICAgICAg ICAgQk4gY29udGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5ld0NvbnRleHQoKS4NCj4gKw0KPiAr ICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gKyAgQHJldHZhbCBGQUxTRSAg ICAgICAgIE90aGVyd2lzZS4NCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArRUZJQVBJDQo+ICtFY1Bv aW50TXVsICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ICsgIE9VVCBWT0lEICAg ICAgICpFY1BvaW50UmVzdWx0LA0KPiArICBJTiBDT05TVCBWT0lEICAqRWNQb2ludCwNCj4gKyAg SU4gQ09OU1QgVk9JRCAgKkJuUFNjYWxhciwNCj4gKyAgSU4gVk9JRCAgICAgICAgKkJuQ3R4DQo+ ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBDYWxjdWxhdGUgdGhlIGludmVyc2Ugb2YgdGhlIHN1 cHBsaWVkIEVDIHBvaW50Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAgIEVjR3JvdXAgICBFQyBn cm91cCBvYmplY3QuDQo+ICsgIEBwYXJhbVtpbixvdXRdIEVjUG9pbnQgICBFQyBwb2ludCB0byBp bnZlcnQuDQo+ICsgIEBwYXJhbVtpbl0gICAgIEJuQ3R4ICAgICBCTiBjb250ZXh0LCBjcmVhdGVk IHdpdGggQmlnTnVtTmV3Q29udGV4dCgpLg0KPiArDQo+ICsgIEByZXR2YWwgVFJVRSAgICAgICAg ICBPbiBzdWNjZXNzLg0KPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiAr KiovDQo+ICtCT09MRUFODQo+ICtFRklBUEkNCj4gK0VjUG9pbnRJbnZlcnQgKA0KPiArICBJTiBD T05TVCBWT0lEICAqRWNHcm91cCwNCj4gKyAgSU4gT1VUIFZPSUQgICAgKkVjUG9pbnQsDQo+ICsg IElOIFZPSUQgICAgICAgICpCbkN0eA0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgQ2hlY2sg aWYgdGhlIHN1cHBsaWVkIHBvaW50IGlzIG9uIEVDIGN1cnZlLg0KPiArDQo+ICsgIEBwYXJhbVtp bl0gIEVjR3JvdXAgICBFQyBncm91cCBvYmplY3QuDQo+ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnQg ICBFQyBwb2ludCB0byBjaGVjay4NCj4gKyAgQHBhcmFtW2luXSAgQm5DdHggICAgIEJOIGNvbnRl eHQsIGNyZWF0ZWQgd2l0aCBCaWdOdW1OZXdDb250ZXh0KCkuDQo+ICsNCj4gKyAgQHJldHZhbCBU UlVFICAgICAgICAgIE9uIGN1cnZlLg0KPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3 aXNlLg0KPiArKiovDQo+ICtCT09MRUFODQo+ICtFRklBUEkNCj4gK0VjUG9pbnRJc09uQ3VydmUg KA0KPiArICBJTiBDT05TVCBWT0lEICAqRWNHcm91cCwNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVj UG9pbnQsDQo+ICsgIElOIFZPSUQgICAgICAgICpCbkN0eA0KPiArICApOw0KPiArDQo+ICsvKioN Cj4gKyAgQ2hlY2sgaWYgdGhlIHN1cHBsaWVkIHBvaW50IGlzIGF0IGluZmluaXR5Lg0KPiArDQo+ ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICBFQyBncm91cCBvYmplY3QuDQo+ICsgIEBwYXJhbVtp bl0gIEVjUG9pbnQgICBFQyBwb2ludCB0byBjaGVjay4NCj4gKw0KPiArICBAcmV0dmFsIFRSVUUg ICAgICAgICAgQXQgaW5maW5pdHkuDQo+ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndp c2UuDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0VGSUFQSQ0KPiArRWNQb2ludElzQXRJbmZpbml0 eSAoDQo+ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiArICBJTiBDT05TVCBWT0lEICAq RWNQb2ludA0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgQ2hlY2sgaWYgRUMgcG9pbnRzIGFy ZSBlcXVhbC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBFY0dyb3VwICAgRUMgZ3JvdXAgb2JqZWN0 Lg0KPiArICBAcGFyYW1baW5dICBFY1BvaW50QSAgRUMgcG9pbnQgQS4NCj4gKyAgQHBhcmFtW2lu XSAgRWNQb2ludEIgIEVDIHBvaW50IEIuDQo+ICsgIEBwYXJhbVtpbl0gIEJuQ3R4ICAgICBCTiBj b250ZXh0LCBjcmVhdGVkIHdpdGggQmlnTnVtTmV3Q29udGV4dCgpLg0KPiArDQo+ICsgIEByZXR2 YWwgVFJVRSAgICAgICAgICBBID09IEIuDQo+ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICBPdGhl cndpc2UuDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0VGSUFQSQ0KPiArRWNQb2ludEVxdWFsICgN Cj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ICsgIElOIENPTlNUIFZPSUQgICpFY1Bv aW50QSwNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjUG9pbnRCLA0KPiArICBJTiBWT0lEICAgICAg ICAqQm5DdHgNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFNldCBFQyBwb2ludCBjb21wcmVz c2VkIGNvb3JkaW5hdGVzLiBQb2ludHMgY2FuIGJlIGRlc2NyaWJlZCBpbiB0ZXJtcyBvZg0KPiAr ICB0aGVpciBjb21wcmVzc2VkIGNvb3JkaW5hdGVzLiBGb3IgYSBwb2ludCAoeCwgeSksIGZvciBh bnkgZ2l2ZW4gdmFsdWUgZm9yIHgNCj4gKyAgc3VjaCB0aGF0IHRoZSBwb2ludCBpcyBvbiB0aGUg Y3VydmUgdGhlcmUgd2lsbCBvbmx5IGV2ZXIgYmUgdHdvIHBvc3NpYmxlDQo+ICsgIHZhbHVlcyBm b3IgeS4gVGhlcmVmb3JlLCBhIHBvaW50IGNhbiBiZSBzZXQgdXNpbmcgdGhpcyBmdW5jdGlvbiB3 aGVyZSBCblggaXMNCj4gKyAgdGhlIHggY29vcmRpbmF0ZSBhbmQgWUJpdCBpcyBhIHZhbHVlIDAg b3IgMSB0byBpZGVudGlmeSB3aGljaCBvZiB0aGUgdHdvDQo+ICsgIHBvc3NpYmxlIHZhbHVlcyBm b3IgeSBzaG91bGQgYmUgdXNlZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBFY0dyb3VwICAgIEVD IGdyb3VwIG9iamVjdC4NCj4gKyAgQHBhcmFtW2luXSAgRWNQb2ludCAgICBFQyBQb2ludC4NCj4g KyAgQHBhcmFtW2luXSAgQm5YICAgICAgICBYIGNvb3JkaW5hdGUuDQo+ICsgIEBwYXJhbVtpbl0g IFlCaXQgICAgICAgMCBvciAxIHRvIGlkZW50aWZ5IHdoaWNoIFkgdmFsdWUgaXMgdXNlZC4NCj4g KyAgQHBhcmFtW2luXSAgQm5DdHggICAgICBCTiBjb250ZXh0LCBjcmVhdGVkIHdpdGggQmlnTnVt TmV3Q29udGV4dCgpLg0KPiArDQo+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBPbiBzdWNjZXNz Lg0KPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiArKiovDQo+ICtCT09M RUFODQo+ICtFRklBUEkNCj4gK0VjUG9pbnRTZXRDb21wcmVzc2VkQ29vcmRpbmF0ZXMgKA0KPiAr ICBJTiBDT05TVCBWT0lEICAqRWNHcm91cCwNCj4gKyAgSU4gVk9JRCAgICAgICAgKkVjUG9pbnQs DQo+ICsgIElOIENPTlNUIFZPSUQgICpCblgsDQo+ICsgIElOIFVJTlQ4ICAgICAgIFlCaXQsDQo+ ICsgIElOIFZPSUQgICAgICAgICpCbkN0eA0KPiArICApOw0KPiArDQo+ICsvLyA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09DQo+ICsvLyAgICBFbGxpcHRpYyBDdXJ2ZSBEaWZmaWUgSGVsbG1h biBQcmltaXRpdmVzDQo+ICsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ICsNCj4g Ky8qKg0KPiArICBBbGxvY2F0ZXMgYW5kIEluaXRpYWxpemVzIG9uZSBFbGxpcHRpYyBDdXJ2ZSBD b250ZXh0IGZvciBzdWJzZXF1ZW50IHVzZQ0KPiArICB3aXRoIHRoZSBOSUQuDQo+ICsNCj4gKyAg QHBhcmFtW2luXSAgTmlkIGNpcGhlciBOSUQNCj4gKyAgQHJldHVybiAgICAgUG9pbnRlciB0byB0 aGUgRWxsaXB0aWMgQ3VydmUgQ29udGV4dCB0aGF0IGhhcyBiZWVuIGluaXRpYWxpemVkLg0KPiAr ICAgICAgICAgICAgICBJZiB0aGUgYWxsb2NhdGlvbnMgZmFpbHMsIEVjTmV3QnlOaWQoKSByZXR1 cm5zIE5VTEwuDQo+ICsqKi8NCj4gK1ZPSUQgKg0KPiArRUZJQVBJDQo+ICtFY05ld0J5TmlkICgN Cj4gKyAgSU4gVUlOVE4gIE5pZA0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgUmVsZWFzZSB0 aGUgc3BlY2lmaWVkIEVDIGNvbnRleHQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgRWNDb250ZXh0 ICBQb2ludGVyIHRvIHRoZSBFQyBjb250ZXh0IHRvIGJlIHJlbGVhc2VkLg0KPiArKiovDQo+ICtW T0lEDQo+ICtFRklBUEkNCj4gK0VjRnJlZSAoDQo+ICsgIElOICBWT0lEICAqRWNDb250ZXh0DQo+ ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBHZW5lcmF0ZXMgRUMga2V5IGFuZCByZXR1cm5zIEVD IHB1YmxpYyBrZXkgKFgsIFkpLCBQbGVhc2Ugbm90ZSwgdGhpcyBmdW5jdGlvbiB1c2VzDQo+ICsg IHBzZXVkbyByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4gVGhlIGNhbGxlciBtdXN0IG1ha2Ugc3Vy ZSBSYW5kb21TZWVkKCkNCj4gKyAgZnVuY3Rpb24gd2FzIHByb3Blcmx5IGNhbGxlZCBiZWZvcmUu DQo+ICsgIFRoZSBFYyBjb250ZXh0IHNob3VsZCBiZSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgYnkg RWNOZXdCeU5pZC4NCj4gKyAgVGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMgcmFuZG9tIHNlY3JldCwg YW5kIGNvbXB1dGVzIHRoZSBwdWJsaWMga2V5IChYLCBZKSwgd2hpY2ggaXMNCj4gKyAgcmV0dXJu ZWQgdmlhIHBhcmFtZXRlciBQdWJsaWMsIFB1YmxpY1NpemUuDQo+ICsgIFggaXMgdGhlIGZpcnN0 IGhhbGYgb2YgUHVibGljIHdpdGggc2l6ZSBiZWluZyBQdWJsaWNTaXplIC8gMiwNCj4gKyAgWSBp cyB0aGUgc2Vjb25kIGhhbGYgb2YgUHVibGljIHdpdGggc2l6ZSBiZWluZyBQdWJsaWNTaXplIC8g Mi4NCj4gKyAgRUMgY29udGV4dCBpcyB1cGRhdGVkIGFjY29yZGluZ2x5Lg0KPiArICBJZiB0aGUg UHVibGljIGJ1ZmZlciBpcyB0b28gc21hbGwgdG8gaG9sZCB0aGUgcHVibGljIFgsIFksIEZBTFNF IGlzIHJldHVybmVkIGFuZA0KPiArICBQdWJsaWNTaXplIGlzIHNldCB0byB0aGUgcmVxdWlyZWQg YnVmZmVyIHNpemUgdG8gb2J0YWluIHRoZSBwdWJsaWMgWCwgWS4NCj4gKyAgRm9yIFAtMjU2LCB0 aGUgUHVibGljU2l6ZSBpcyA2NC4gRmlyc3QgMzItYnl0ZSBpcyBYLCBTZWNvbmQgMzItYnl0ZSBp cyBZLg0KPiArICBGb3IgUC0zODQsIHRoZSBQdWJsaWNTaXplIGlzIDk2LiBGaXJzdCA0OC1ieXRl IGlzIFgsIFNlY29uZCA0OC1ieXRlIGlzIFkuDQo+ICsgIEZvciBQLTUyMSwgdGhlIFB1YmxpY1Np emUgaXMgMTMyLiBGaXJzdCA2Ni1ieXRlIGlzIFgsIFNlY29uZCA2Ni1ieXRlIGlzIFkuDQo+ICsg IElmIEVjQ29udGV4dCBpcyBOVUxMLCB0aGVuIHJldHVybiBGQUxTRS4NCj4gKyAgSWYgUHVibGlj U2l6ZSBpcyBOVUxMLCB0aGVuIHJldHVybiBGQUxTRS4NCj4gKyAgSWYgUHVibGljU2l6ZSBpcyBs YXJnZSBlbm91Z2ggYnV0IFB1YmxpYyBpcyBOVUxMLCB0aGVuIHJldHVybiBGQUxTRS4NCj4gKyAg QHBhcmFtW2luLCBvdXRdICBFY0NvbnRleHQgICAgICBQb2ludGVyIHRvIHRoZSBFQyBjb250ZXh0 Lg0KPiArICBAcGFyYW1bb3V0XSAgICAgIFB1YmxpY0tleSAgICAgIFBvaW50ZXIgdG8gdCBidWZm ZXIgdG8gcmVjZWl2ZSBnZW5lcmF0ZWQgcHVibGljIFgsWS4NCj4gKyAgQHBhcmFtW2luLCBvdXRd ICBQdWJsaWNLZXlTaXplICBPbiBpbnB1dCwgdGhlIHNpemUgb2YgUHVibGljIGJ1ZmZlciBpbiBi eXRlcy4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiBvdXRwdXQsIHRo ZSBzaXplIG9mIGRhdGEgcmV0dXJuZWQgaW4gUHVibGljIGJ1ZmZlciBpbiBieXRlcy4NCj4gKyAg QHJldHZhbCBUUlVFICAgRUMgcHVibGljIFgsWSBnZW5lcmF0aW9uIHN1Y2NlZWRlZC4NCj4gKyAg QHJldHZhbCBGQUxTRSAgRUMgcHVibGljIFgsWSBnZW5lcmF0aW9uIGZhaWxlZC4NCj4gKyAgQHJl dHZhbCBGQUxTRSAgUHVibGljS2V5U2l6ZSBpcyBub3QgbGFyZ2UgZW5vdWdoLg0KPiArKiovDQo+ ICtCT09MRUFODQo+ICtFRklBUEkNCj4gK0VjR2VuZXJhdGVLZXkgKA0KPiArICBJTiBPVVQgIFZP SUQgICAqRWNDb250ZXh0LA0KPiArICBPVVQgICAgIFVJTlQ4ICAqUHVibGljS2V5LA0KPiArICBJ TiBPVVQgIFVJTlROICAqUHVibGljS2V5U2l6ZQ0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAg R2V0cyB0aGUgcHVibGljIGtleSBjb21wb25lbnQgZnJvbSB0aGUgZXN0YWJsaXNoZWQgRUMgY29u dGV4dC4NCj4gKyAgVGhlIEVjIGNvbnRleHQgc2hvdWxkIGJlIGNvcnJlY3RseSBpbml0aWFsaXpl ZCBieSBFY05ld0J5TmlkLCBhbmQgc3VjY2Vzc2Z1bGx5DQo+ICsgIGdlbmVyYXRlIGtleSBwYWly IGZyb20gRWNHZW5lcmF0ZUtleSgpLg0KPiArICBGb3IgUC0yNTYsIHRoZSBQdWJsaWNTaXplIGlz IDY0LiBGaXJzdCAzMi1ieXRlIGlzIFgsIFNlY29uZCAzMi1ieXRlIGlzIFkuDQo+ICsgIEZvciBQ LTM4NCwgdGhlIFB1YmxpY1NpemUgaXMgOTYuIEZpcnN0IDQ4LWJ5dGUgaXMgWCwgU2Vjb25kIDQ4 LWJ5dGUgaXMgWS4NCj4gKyAgRm9yIFAtNTIxLCB0aGUgUHVibGljU2l6ZSBpcyAxMzIuIEZpcnN0 IDY2LWJ5dGUgaXMgWCwgU2Vjb25kIDY2LWJ5dGUgaXMgWS4NCj4gKyAgQHBhcmFtW2luLCBvdXRd ICBFY0NvbnRleHQgICAgICBQb2ludGVyIHRvIEVDIGNvbnRleHQgYmVpbmcgc2V0Lg0KPiArICBA cGFyYW1bb3V0XSAgICAgIFB1YmxpY0tleSAgICAgIFBvaW50ZXIgdG8gdCBidWZmZXIgdG8gcmVj ZWl2ZSBnZW5lcmF0ZWQgcHVibGljIFgsWS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdICBQdWJsaWNL ZXlTaXplICBPbiBpbnB1dCwgdGhlIHNpemUgb2YgUHVibGljIGJ1ZmZlciBpbiBieXRlcy4NCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiBvdXRwdXQsIHRoZSBzaXplIG9m IGRhdGEgcmV0dXJuZWQgaW4gUHVibGljIGJ1ZmZlciBpbiBieXRlcy4NCj4gKyAgQHJldHZhbCAg VFJVRSAgIEVDIGtleSBjb21wb25lbnQgd2FzIHJldHJpZXZlZCBzdWNjZXNzZnVsbHkuDQo+ICsg IEByZXR2YWwgIEZBTFNFICBJbnZhbGlkIEVDIGtleSBjb21wb25lbnQuDQo+ICsqKi8NCj4gK0JP T0xFQU4NCj4gK0VGSUFQSQ0KPiArRWNHZXRQdWJLZXkgKA0KPiArICBJTiBPVVQgIFZPSUQgICAq RWNDb250ZXh0LA0KPiArICBPVVQgICAgIFVJTlQ4ICAqUHVibGljS2V5LA0KPiArICBJTiBPVVQg IFVJTlROICAqUHVibGljS2V5U2l6ZQ0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgQ29tcHV0 ZXMgZXhjaGFuZ2VkIGNvbW1vbiBrZXkuDQo+ICsgIEdpdmVuIHBlZXIncyBwdWJsaWMga2V5IChY LCBZKSwgdGhpcyBmdW5jdGlvbiBjb21wdXRlcyB0aGUgZXhjaGFuZ2VkIGNvbW1vbiBrZXksDQo+ ICsgIGJhc2VkIG9uIGl0cyBvd24gY29udGV4dCBpbmNsdWRpbmcgdmFsdWUgb2YgY3VydmUgcGFy YW1ldGVyIGFuZCByYW5kb20gc2VjcmV0Lg0KPiArICBYIGlzIHRoZSBmaXJzdCBoYWxmIG9mIFBl ZXJQdWJsaWMgd2l0aCBzaXplIGJlaW5nIFBlZXJQdWJsaWNTaXplIC8gMiwNCj4gKyAgWSBpcyB0 aGUgc2Vjb25kIGhhbGYgb2YgUGVlclB1YmxpYyB3aXRoIHNpemUgYmVpbmcgUGVlclB1YmxpY1Np emUgLyAyLg0KPiArICBJZiBFY0NvbnRleHQgaXMgTlVMTCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ ICsgIElmIFBlZXJQdWJsaWMgaXMgTlVMTCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ICsgIElmIFBl ZXJQdWJsaWNTaXplIGlzIDAsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiArICBJZiBLZXkgaXMgTlVM TCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ICsgIElmIEtleVNpemUgaXMgbm90IGxhcmdlIGVub3Vn aCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ICsgIEZvciBQLTI1NiwgdGhlIFBlZXJQdWJsaWNTaXpl IGlzIDY0LiBGaXJzdCAzMi1ieXRlIGlzIFgsIFNlY29uZCAzMi1ieXRlIGlzIFkuDQo+ICsgIEZv ciBQLTM4NCwgdGhlIFBlZXJQdWJsaWNTaXplIGlzIDk2LiBGaXJzdCA0OC1ieXRlIGlzIFgsIFNl Y29uZCA0OC1ieXRlIGlzIFkuDQo+ICsgIEZvciBQLTUyMSwgdGhlIFBlZXJQdWJsaWNTaXplIGlz IDEzMi4gRmlyc3QgNjYtYnl0ZSBpcyBYLCBTZWNvbmQgNjYtYnl0ZSBpcyBZLg0KPiArICBAcGFy YW1baW4sIG91dF0gIEVjQ29udGV4dCAgICAgICAgICBQb2ludGVyIHRvIHRoZSBFQyBjb250ZXh0 Lg0KPiArICBAcGFyYW1baW5dICAgICAgIFBlZXJQdWJsaWMgICAgICAgICBQb2ludGVyIHRvIHRo ZSBwZWVyJ3MgcHVibGljIFgsWS4NCj4gKyAgQHBhcmFtW2luXSAgICAgICBQZWVyUHVibGljU2l6 ZSAgICAgU2l6ZSBvZiBwZWVyJ3MgcHVibGljIFgsWSBpbiBieXRlcy4NCj4gKyAgQHBhcmFtW2lu XSAgICAgICBDb21wcmVzc0ZsYWcgICAgICAgRmxhZyBvZiBQZWVyUHVibGljIGlzIGNvbXByZXNz ZWQgb3Igbm90Lg0KPiArICBAcGFyYW1bb3V0XSAgICAgIEtleSAgICAgICAgICAgICAgICBQb2lu dGVyIHRvIHRoZSBidWZmZXIgdG8gcmVjZWl2ZSBnZW5lcmF0ZWQga2V5Lg0KPiArICBAcGFyYW1b aW4sIG91dF0gIEtleVNpemUgICAgICAgICAgICBPbiBpbnB1dCwgdGhlIHNpemUgb2YgS2V5IGJ1 ZmZlciBpbiBieXRlcy4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg T24gb3V0cHV0LCB0aGUgc2l6ZSBvZiBkYXRhIHJldHVybmVkIGluIEtleSBidWZmZXIgaW4gYnl0 ZXMuDQo+ICsgIEByZXR2YWwgVFJVRSAgIEVDIGV4Y2hhbmdlZCBrZXkgZ2VuZXJhdGlvbiBzdWNj ZWVkZWQuDQo+ICsgIEByZXR2YWwgRkFMU0UgIEVDIGV4Y2hhbmdlZCBrZXkgZ2VuZXJhdGlvbiBm YWlsZWQuDQo+ICsgIEByZXR2YWwgRkFMU0UgIEtleVNpemUgaXMgbm90IGxhcmdlIGVub3VnaC4N Cj4gKyoqLw0KPiArQk9PTEVBTg0KPiArRUZJQVBJDQo+ICtFY0RoQ29tcHV0ZUtleSAoDQo+ICsg IElOIE9VVCAgVk9JRCAgICAgICAgICpFY0NvbnRleHQsDQo+ICsgIElOICAgICAgQ09OU1QgVUlO VDggICpQZWVyUHVibGljLA0KPiArICBJTiAgICAgIFVJTlROICAgICAgICBQZWVyUHVibGljU2l6 ZSwNCj4gKyAgSU4gICAgICBDT05TVCBJTlQzMiAgKkNvbXByZXNzRmxhZywNCj4gKyAgT1VUICAg ICBVSU5UOCAgICAgICAgKktleSwNCj4gKyAgSU4gT1VUICBVSU5UTiAgICAgICAgKktleVNpemUN Cj4gKyAgKTsNCj4gKw0KPiAgI2VuZGlmIC8vIF9fQkFTRV9DUllQVF9MSUJfSF9fDQo+IGRpZmYg LS1naXQgYS9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvQmFzZUNyeXB0TGliLmluZiBi L0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYi9CYXNlQ3J5cHRMaWIuaW5mDQo+IGluZGV4 IDllNGJlMmZiMGQuLmFkZTZlZTNmZGQgMTAwNjQ0DQo+IC0tLSBhL0NyeXB0b1BrZy9MaWJyYXJ5 L0Jhc2VDcnlwdExpYi9CYXNlQ3J5cHRMaWIuaW5mDQo+ICsrKyBiL0NyeXB0b1BrZy9MaWJyYXJ5 L0Jhc2VDcnlwdExpYi9CYXNlQ3J5cHRMaWIuaW5mDQo+IEBAIC01Miw2ICs1Miw4IEBADQo+ICAg IFBrL0NyeXB0VHMuYw0KPiAgICBQay9DcnlwdFJzYVBzcy5jDQo+ICAgIFBrL0NyeXB0UnNhUHNz U2lnbi5jDQo+ICsgIFBrL0NyeXB0RWNOdWxsLmMgICAgfCp8KnwqfCFnRWZpQ3J5cHRvUGtnVG9r ZW5TcGFjZUd1aWQuUGNkT3BlbnNzbEVjRW5hYmxlZA0KPiArICBQay9DcnlwdEVjLmMgICAgfCp8 KnwqfGdFZmlDcnlwdG9Qa2dUb2tlblNwYWNlR3VpZC5QY2RPcGVuc3NsRWNFbmFibGVkDQoNClRo ZSB1c2Ugb2YgdGhlIFBDRCB0byBzZWxlY3QgdGhlIGZpbGUgc2hvdWxkIG5vdCBiZSBuZWVkZWQg aGVyZS4gIFRoZSANCkVjIEZhbWlseSBhbmQgaW5kaXZpZHVhbCBzZXJ2aWNlIGVuYWJsZS9kaXNh YmxlIGZpZWxkcyBpbiB0aGUgDQpQQ0RfQ1JZUFRPX1NFUlZJQ0VfRkFNSUxZX0VOQUJMRSBzdHJ1 Y3R1cmVkIFBDRCBhcmUgYWxsIHRoYXQgaXMgbmVlZGVkIHRvDQpkaXNhYmxlIHRoZSBFYyBzZXJ2 aWNlcy4NCg0KVGhlIFBDRCBnRWZpQ3J5cHRvUGtnVG9rZW5TcGFjZUd1aWQuUGNkT3BlbnNzbEVj RW5hYmxlZCBzaG91bGQgYmUgcmVtb3ZlZCANCmNvbXBsZXRlbHkgYXMgcGFydCBvZiB0aGlzIHBh dGNoIHNlcmllcy4NCg0KPiAgICBQZW0vQ3J5cHRQZW0uYw0KPiAgICBCbi9DcnlwdEJuLmMNCj4g DQo+IGRpZmYgLS1naXQgYS9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvUGVpQ3J5cHRM aWIuaW5mIGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1BlaUNyeXB0TGliLmluZg0K PiBpbmRleCA2NWFkMjNmYjgxLi4zODNkZjJiMjNjIDEwMDY0NA0KPiAtLS0gYS9DcnlwdG9Qa2cv TGlicmFyeS9CYXNlQ3J5cHRMaWIvUGVpQ3J5cHRMaWIuaW5mDQo+ICsrKyBiL0NyeXB0b1BrZy9M aWJyYXJ5L0Jhc2VDcnlwdExpYi9QZWlDcnlwdExpYi5pbmYNCj4gQEAgLTU4LDYgKzU4LDcgQEAN Cj4gICAgUGsvQ3J5cHRUc051bGwuYw0KPiAgICBQay9DcnlwdFJzYVBzcy5jDQo+ICAgIFBrL0Ny eXB0UnNhUHNzU2lnbk51bGwuYw0KPiArICBQay9DcnlwdEVjTnVsbC5jDQo+ICAgIFBlbS9Dcnlw dFBlbU51bGwuYw0KPiAgICBSYW5kL0NyeXB0UmFuZE51bGwuYw0KPiAgICBCbi9DcnlwdEJuTnVs bC5jDQo+IGRpZmYgLS1naXQgYS9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvUGsvQ3J5 cHRFYy5jIGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1BrL0NyeXB0RWMuYw0KPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi4zOTZjODE5ODM0DQo+IC0t LSAvZGV2L251bGwNCj4gKysrIGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1BrL0Ny eXB0RWMuYw0KPiBAQCAtMCwwICsxLDc2NSBAQA0KPiArLyoqIEBmaWxlDQo+ICsgIEVsbGlwdGlj IEN1cnZlIGFuZCBFQ0RIIEFQSSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBPcGVuU1NMDQo+ICsN Cj4gKyAgQ29weXJpZ2h0IChjKSAyMDIyLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC48QlI+DQo+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2Ut UGF0ZW50DQo+ICsNCj4gKyoqLw0KPiArDQo+ICsjaW5jbHVkZSAiSW50ZXJuYWxDcnlwdExpYi5o Ig0KPiArI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPg0KPiArI2luY2x1ZGUgPG9wZW5zc2wv Ym4uaD4NCj4gKyNpbmNsdWRlIDxvcGVuc3NsL2VjLmg+DQo+ICsNCj4gKy8vID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0NCj4gKy8vICAgIEJhc2ljIEVsbGlwdGljIEN1cnZlIFByaW1pdGl2 ZXMNCj4gKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCj4gKw0KPiArLyoqDQo+ICsg IFJldHVybiB0aGUgTmlkIG9mIGNlcnRhaW4gRUNDIGN1cnZlLg0KPiArDQo+ICsgIEBwYXJhbVtp bl0gIENyeXB0b05pZCAgIElkZW50aWZ5aW5nIG51bWJlciBmb3IgdGhlIEVDQyBjdXJ2ZSAoRGVm aW5lZCBpbg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNlQ3J5cHRMaWIuaCkuDQo+ ICsNCj4gKyAgQHJldHZhbCAhPS0xICAgIE9uIHN1Y2Nlc3MuDQo+ICsgIEByZXR2YWwgLTEgICAg ICBFQ0MgY3VydmUgbm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArU1RBVElDDQo+ICtJTlQzMg0K PiArQ3J5cHRvTmlkVG9PcGVuc3NsTmlkICgNCj4gKyAgSU4gVUlOVE4gIENyeXB0b05pZA0KPiAr ICApDQo+ICt7DQo+ICsgIElOVDMyICBOaWQ7DQo+ICsNCj4gKyAgc3dpdGNoIChDcnlwdG9OaWQp IHsNCj4gKyAgICBjYXNlIENSWVBUT19OSURfU0VDUDI1NlIxOg0KPiArICAgICAgTmlkID0gTklE X1g5XzYyX3ByaW1lMjU2djE7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBjYXNlIENSWVBUT19O SURfU0VDUDM4NFIxOg0KPiArICAgICAgTmlkID0gTklEX3NlY3AzODRyMTsNCj4gKyAgICAgIGJy ZWFrOw0KPiArICAgIGNhc2UgQ1JZUFRPX05JRF9TRUNQNTIxUjE6DQo+ICsgICAgICBOaWQgPSBO SURfc2VjcDUyMXIxOw0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgZGVmYXVsdDoNCj4gKyAgICAg IHJldHVybiAtMTsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBOaWQ7DQo+ICt9DQo+ICsNCj4g Ky8qKg0KPiArICBJbml0aWFsaXplIG5ldyBvcGFxdWUgRWNHcm91cCBvYmplY3QuIFRoaXMgb2Jq ZWN0IHJlcHJlc2VudHMgYW4gRUMgY3VydmUgYW5kDQo+ICsgIGFuZCBpcyB1c2VkIGZvciBjYWxj dWxhdGlvbiB3aXRoaW4gdGhpcyBncm91cC4gVGhpcyBvYmplY3Qgc2hvdWxkIGJlIGZyZWVkDQo+ ICsgIHVzaW5nIEVjR3JvdXBGcmVlKCkgZnVuY3Rpb24uDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAg Q3J5cHRvTmlkICAgSWRlbnRpZnlpbmcgbnVtYmVyIGZvciB0aGUgRUNDIGN1cnZlIChEZWZpbmVk IGluDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2VDcnlwdExpYi5oKS4NCj4gKw0K PiArICBAcmV0dmFsIEVjR3JvdXAgb2JqZWN0ICBPbiBzdWNjZXNzLg0KPiArICBAcmV0dmFsIE5V TEwgICAgICAgICAgICBPbiBmYWlsdXJlLg0KPiArKiovDQo+ICtWT0lEICoNCj4gK0VGSUFQSQ0K PiArRWNHcm91cEluaXQgKA0KPiArICBJTiBVSU5UTiAgQ3J5cHRvTmlkDQo+ICsgICkNCj4gK3sN Cj4gKyAgSU5UMzIgIE5pZDsNCj4gKw0KPiArICBOaWQgPSBDcnlwdG9OaWRUb09wZW5zc2xOaWQg KENyeXB0b05pZCk7DQo+ICsNCj4gKyAgaWYgKE5pZCA8IDApIHsNCj4gKyAgICByZXR1cm4gTlVM TDsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBFQ19HUk9VUF9uZXdfYnlfY3VydmVfbmFtZSAo TmlkKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEdldCBFQyBjdXJ2ZSBwYXJhbWV0ZXJzLiBX aGlsZSBlbGxpcHRpYyBjdXJ2ZSBlcXVhdGlvbiBpcyBZXjIgbW9kIFAgPSAoWF4zICsgQVggKyBC KSBNb2QgUC4NCj4gKyAgVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgcHJvdmlkZWQgQmlnIE51 bWJlciBvYmplY3RzICB0byB0aGUgY29ycmVzcG9uZGluZw0KPiArICB2YWx1ZXMuIFRoZSBjYWxs ZXIgbmVlZHMgdG8gbWFrZSBzdXJlIGFsbCB0aGUgIm91dCIgQmlnTnVtYmVyIHBhcmFtZXRlcnMN Cj4gKyAgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIEVj R3JvdXAgICAgRUMgZ3JvdXAgb2JqZWN0Lg0KPiArICBAcGFyYW1bb3V0XSBCblByaW1lICAgIEdy b3VwIHByaW1lIG51bWJlci4NCj4gKyAgQHBhcmFtW291dF0gQm5BICAgICAgICBBIGNvZWZmaWNp ZW50Lg0KPiArICBAcGFyYW1bb3V0XSBCbkIgICAgICAgIEIgY29lZmZpY2llbnQuLg0KPiArICBA cGFyYW1baW5dICBCbkN0eCAgICAgIEJOIGNvbnRleHQuDQo+ICsNCj4gKyAgQHJldHZhbCBUUlVF ICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndp c2UuDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0VGSUFQSQ0KPiArRWNHcm91cEdldEN1cnZlICgN Cj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ICsgIE9VVCBWT0lEICAgICAgICpCblBy aW1lLA0KPiArICBPVVQgVk9JRCAgICAgICAqQm5BLA0KPiArICBPVVQgVk9JRCAgICAgICAqQm5C LA0KPiArICBJTiBWT0lEICAgICAgICAqQm5DdHgNCj4gKyAgKQ0KPiArew0KPiArICByZXR1cm4g KEJPT0xFQU4pRUNfR1JPVVBfZ2V0X2N1cnZlIChFY0dyb3VwLCBCblByaW1lLCBCbkEsIEJuQiwg Qm5DdHgpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgR2V0IEVDIGdyb3VwIG9yZGVyLg0KPiAr ICBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBwcm92aWRlZCBCaWcgTnVtYmVyIG9iamVjdCB0 byB0aGUgY29ycmVzcG9uZGluZw0KPiArICB2YWx1ZS4gVGhlIGNhbGxlciBuZWVkcyB0byBtYWtl IHN1cmUgdGhhdCB0aGUgIm91dCIgQmlnTnVtYmVyIHBhcmFtZXRlcg0KPiArICBpcyBwcm9wZXJs eSBpbml0aWFsaXplZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBFY0dyb3VwICAgRUMgZ3JvdXAg b2JqZWN0Lg0KPiArICBAcGFyYW1bb3V0XSBCbk9yZGVyICAgR3JvdXAgcHJpbWUgbnVtYmVyLg0K PiArDQo+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBPbiBzdWNjZXNzLg0KPiArICBAcmV0dmFs IEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiArKiovDQo+ICtCT09MRUFODQo+ICtFRklBUEkN Cj4gK0VjR3JvdXBHZXRPcmRlciAoDQo+ICsgIElOIFZPSUQgICAqRWNHcm91cCwNCj4gKyAgT1VU IFZPSUQgICpCbk9yZGVyDQo+ICsgICkNCj4gK3sNCj4gKyAgcmV0dXJuIChCT09MRUFOKUVDX0dS T1VQX2dldF9vcmRlciAoRWNHcm91cCwgQm5PcmRlciwgTlVMTCk7DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICBGcmVlIHByZXZpb3VzbHkgYWxsb2NhdGVkIEVDIGdyb3VwIG9iamVjdCB1c2luZyBF Y0dyb3VwSW5pdCgpLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICBFQyBncm91cCBv YmplY3QgdG8gZnJlZS4NCj4gKyoqLw0KPiArVk9JRA0KPiArRUZJQVBJDQo+ICtFY0dyb3VwRnJl ZSAoDQo+ICsgIElOIFZPSUQgICpFY0dyb3VwDQo+ICsgICkNCj4gK3sNCj4gKyAgRUNfR1JPVVBf ZnJlZSAoRWNHcm91cCk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBJbml0aWFsaXplIG5ldyBv cGFxdWUgRUMgUG9pbnQgb2JqZWN0LiBUaGlzIG9iamVjdCByZXByZXNlbnRzIGFuIEVDIHBvaW50 DQo+ICsgIHdpdGhpbiB0aGUgZ2l2ZW4gRUMgZ3JvdXAgKGN1cnZlKS4NCj4gKw0KPiArICBAcGFy YW1baW5dICBFQyBHcm91cCwgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdXNpbmcgRWNHcm91cEluaXQo KS4NCj4gKw0KPiArICBAcmV0dmFsIEVDIFBvaW50IG9iamVjdCAgT24gc3VjY2Vzcy4NCj4gKyAg QHJldHZhbCBOVUxMICAgICAgICAgICAgIE9uIGZhaWx1cmUuDQo+ICsqKi8NCj4gK1ZPSUQgKg0K PiArRUZJQVBJDQo+ICtFY1BvaW50SW5pdCAoDQo+ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3Vw DQo+ICsgICkNCj4gK3sNCj4gKyAgcmV0dXJuIEVDX1BPSU5UX25ldyAoRWNHcm91cCk7DQo+ICt9 DQo+ICsNCj4gKy8qKg0KPiArICBGcmVlIHByZXZpb3VzbHkgYWxsb2NhdGVkIEVDIFBvaW50IG9i amVjdCB1c2luZyBFY1BvaW50SW5pdCgpLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnQg ICBFQyBQb2ludCB0byBmcmVlLg0KPiArICBAcGFyYW1baW5dICBDbGVhciAgICAgVFJVRSBpZmYg dGhlIG1lbW9yeSBzaG91bGQgYmUgY2xlYXJlZC4NCj4gKyoqLw0KPiArVk9JRA0KPiArRUZJQVBJ DQo+ICtFY1BvaW50RGVJbml0ICgNCj4gKyAgSU4gVk9JRCAgICAgKkVjUG9pbnQsDQo+ICsgIElO IEJPT0xFQU4gIENsZWFyDQo+ICsgICkNCj4gK3sNCj4gKyAgaWYgKENsZWFyKSB7DQo+ICsgICAg RUNfUE9JTlRfY2xlYXJfZnJlZSAoRWNQb2ludCk7DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgRUNf UE9JTlRfZnJlZSAoRWNQb2ludCk7DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEdl dCBFQyBwb2ludCBhZmZpbmUgKHgseSkgY29vcmRpbmF0ZXMuDQo+ICsgIFRoaXMgZnVuY3Rpb24g d2lsbCBzZXQgdGhlIHByb3ZpZGVkIEJpZyBOdW1iZXIgb2JqZWN0cyB0byB0aGUgY29ycmVzcG9u ZGluZw0KPiArICB2YWx1ZXMuIFRoZSBjYWxsZXIgbmVlZHMgdG8gbWFrZSBzdXJlIGFsbCB0aGUg Im91dCIgQmlnTnVtYmVyIHBhcmFtZXRlcnMNCj4gKyAgYXJlIHByb3Blcmx5IGluaXRpYWxpemVk Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICAgRUMgZ3JvdXAgb2JqZWN0Lg0KPiAr ICBAcGFyYW1baW5dICBFY1BvaW50ICAgIEVDIHBvaW50IG9iamVjdC4NCj4gKyAgQHBhcmFtW291 dF0gQm5YICAgICAgICBYIGNvb3JkaW5hdGUuDQo+ICsgIEBwYXJhbVtvdXRdIEJuWSAgICAgICAg WSBjb29yZGluYXRlLg0KPiArICBAcGFyYW1baW5dICBCbkN0eCAgICAgIEJOIGNvbnRleHQsIGNy ZWF0ZWQgd2l0aCBCaWdOdW1OZXdDb250ZXh0KCkuDQo+ICsNCj4gKyAgQHJldHZhbCBUUlVFICAg ICAgICAgIE9uIHN1Y2Nlc3MuDQo+ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndpc2Uu DQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0VGSUFQSQ0KPiArRWNQb2ludEdldEFmZmluZUNvb3Jk aW5hdGVzICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ICsgIElOIENPTlNUIFZP SUQgICpFY1BvaW50LA0KPiArICBPVVQgVk9JRCAgICAgICAqQm5YLA0KPiArICBPVVQgVk9JRCAg ICAgICAqQm5ZLA0KPiArICBJTiBWT0lEICAgICAgICAqQm5DdHgNCj4gKyAgKQ0KPiArew0KPiAr ICByZXR1cm4gKEJPT0xFQU4pRUNfUE9JTlRfZ2V0X2FmZmluZV9jb29yZGluYXRlcyAoRWNHcm91 cCwgRWNQb2ludCwgQm5YLCBCblksIEJuQ3R4KTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFNl dCBFQyBwb2ludCBhZmZpbmUgKHgseSkgY29vcmRpbmF0ZXMuDQo+ICsNCj4gKyAgQHBhcmFtW2lu XSAgRWNHcm91cCAgICBFQyBncm91cCBvYmplY3QuDQo+ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnQg ICAgRUMgcG9pbnQgb2JqZWN0Lg0KPiArICBAcGFyYW1baW5dICBCblggICAgICAgIFggY29vcmRp bmF0ZS4NCj4gKyAgQHBhcmFtW2luXSAgQm5ZICAgICAgICBZIGNvb3JkaW5hdGUuDQo+ICsgIEBw YXJhbVtpbl0gIEJuQ3R4ICAgICAgQk4gY29udGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5ld0Nv bnRleHQoKS4NCj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24gc3VjY2Vzcy4NCj4g KyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4NCj4gKyoqLw0KPiArQk9PTEVBTg0K PiArRUZJQVBJDQo+ICtFY1BvaW50U2V0QWZmaW5lQ29vcmRpbmF0ZXMgKA0KPiArICBJTiBDT05T VCBWT0lEICAqRWNHcm91cCwNCj4gKyAgSU4gVk9JRCAgICAgICAgKkVjUG9pbnQsDQo+ICsgIElO IENPTlNUIFZPSUQgICpCblgsDQo+ICsgIElOIENPTlNUIFZPSUQgICpCblksDQo+ICsgIElOIFZP SUQgICAgICAgICpCbkN0eA0KPiArICApDQo+ICt7DQo+ICsgIHJldHVybiAoQk9PTEVBTilFQ19Q T0lOVF9zZXRfYWZmaW5lX2Nvb3JkaW5hdGVzIChFY0dyb3VwLCBFY1BvaW50LCBCblgsIEJuWSwg Qm5DdHgpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgRUMgUG9pbnQgYWRkaXRpb24uIEVjUG9p bnRSZXN1bHQgPSBFY1BvaW50QSArIEVjUG9pbnRCLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIEVj R3JvdXAgICAgICAgICAgRUMgZ3JvdXAgb2JqZWN0Lg0KPiArICBAcGFyYW1bb3V0XSBFY1BvaW50 UmVzdWx0ICAgIEVDIHBvaW50IHRvIGhvbGQgdGhlIHJlc3VsdC4gVGhlIHBvaW50IHNob3VsZA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHByb3Blcmx5IGluaXRpYWxpemVk Lg0KPiArICBAcGFyYW1baW5dICBFY1BvaW50QSAgICAgICAgIEVDIFBvaW50Lg0KPiArICBAcGFy YW1baW5dICBFY1BvaW50QiAgICAgICAgIEVDIFBvaW50Lg0KPiArICBAcGFyYW1baW5dICBCbkN0 eCAgICAgICAgICAgIEJOIGNvbnRleHQsIGNyZWF0ZWQgd2l0aCBCaWdOdW1OZXdDb250ZXh0KCku DQo+ICsNCj4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+ICsgIEByZXR2 YWwgRkFMU0UgICAgICAgICBPdGhlcndpc2UuDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0VGSUFQ SQ0KPiArRWNQb2ludEFkZCAoDQo+ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiArICBP VVQgVk9JRCAgICAgICAqRWNQb2ludFJlc3VsdCwNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjUG9p bnRBLA0KPiArICBJTiBDT05TVCBWT0lEICAqRWNQb2ludEIsDQo+ICsgIElOIFZPSUQgICAgICAg ICpCbkN0eA0KPiArICApDQo+ICt7DQo+ICsgIHJldHVybiAoQk9PTEVBTilFQ19QT0lOVF9hZGQg KEVjR3JvdXAsIEVjUG9pbnRSZXN1bHQsIEVjUG9pbnRBLCBFY1BvaW50QiwgQm5DdHgpOw0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAgVmFyaWFibGUgRUMgcG9pbnQgbXVsdGlwbGljYXRpb24uIEVj UG9pbnRSZXN1bHQgPSBFY1BvaW50ICogQm5QU2NhbGFyLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0g IEVjR3JvdXAgICAgICAgICAgRUMgZ3JvdXAgb2JqZWN0Lg0KPiArICBAcGFyYW1bb3V0XSBFY1Bv aW50UmVzdWx0ICAgIEVDIHBvaW50IHRvIGhvbGQgdGhlIHJlc3VsdC4gVGhlIHBvaW50IHNob3Vs ZA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHByb3Blcmx5IGluaXRpYWxp emVkLg0KPiArICBAcGFyYW1baW5dICBFY1BvaW50ICAgICAgICAgIEVDIFBvaW50Lg0KPiArICBA cGFyYW1baW5dICBCblBTY2FsYXIgICAgICAgIFAgU2NhbGFyLg0KPiArICBAcGFyYW1baW5dICBC bkN0eCAgICAgICAgICAgIEJOIGNvbnRleHQsIGNyZWF0ZWQgd2l0aCBCaWdOdW1OZXdDb250ZXh0 KCkuDQo+ICsNCj4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+ICsgIEBy ZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndpc2UuDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0VG SUFQSQ0KPiArRWNQb2ludE11bCAoDQo+ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiAr ICBPVVQgVk9JRCAgICAgICAqRWNQb2ludFJlc3VsdCwNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVj UG9pbnQsDQo+ICsgIElOIENPTlNUIFZPSUQgICpCblBTY2FsYXIsDQo+ICsgIElOIFZPSUQgICAg ICAgICpCbkN0eA0KPiArICApDQo+ICt7DQo+ICsgIHJldHVybiAoQk9PTEVBTilFQ19QT0lOVF9t dWwgKEVjR3JvdXAsIEVjUG9pbnRSZXN1bHQsIE5VTEwsIEVjUG9pbnQsIEJuUFNjYWxhciwgQm5D dHgpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIG9mIHRo ZSBzdXBwbGllZCBFQyBwb2ludC4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgICBFY0dyb3VwICAg RUMgZ3JvdXAgb2JqZWN0Lg0KPiArICBAcGFyYW1baW4sb3V0XSBFY1BvaW50ICAgRUMgcG9pbnQg dG8gaW52ZXJ0Lg0KPiArICBAcGFyYW1baW5dICAgICBCbkN0eCAgICAgQk4gY29udGV4dCwgY3Jl YXRlZCB3aXRoIEJpZ051bU5ld0NvbnRleHQoKS4NCj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICAg ICAgICAgT24gc3VjY2Vzcy4NCj4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4N Cj4gKyoqLw0KPiArQk9PTEVBTg0KPiArRUZJQVBJDQo+ICtFY1BvaW50SW52ZXJ0ICgNCj4gKyAg SU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ICsgIElOIE9VVCBWT0lEICAgICpFY1BvaW50LA0K PiArICBJTiBWT0lEICAgICAgICAqQm5DdHgNCj4gKyAgKQ0KPiArew0KPiArICByZXR1cm4gKEJP T0xFQU4pRUNfUE9JTlRfaW52ZXJ0IChFY0dyb3VwLCBFY1BvaW50LCBCbkN0eCk7DQo+ICt9DQo+ ICsNCj4gKy8qKg0KPiArICBDaGVjayBpZiB0aGUgc3VwcGxpZWQgcG9pbnQgaXMgb24gRUMgY3Vy dmUuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgRWNHcm91cCAgIEVDIGdyb3VwIG9iamVjdC4NCj4g KyAgQHBhcmFtW2luXSAgRWNQb2ludCAgIEVDIHBvaW50IHRvIGNoZWNrLg0KPiArICBAcGFyYW1b aW5dICBCbkN0eCAgICAgQk4gY29udGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5ld0NvbnRleHQo KS4NCj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24gY3VydmUuDQo+ICsgIEByZXR2 YWwgRkFMU0UgICAgICAgICBPdGhlcndpc2UuDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0VGSUFQ SQ0KPiArRWNQb2ludElzT25DdXJ2ZSAoDQo+ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0K PiArICBJTiBDT05TVCBWT0lEICAqRWNQb2ludCwNCj4gKyAgSU4gVk9JRCAgICAgICAgKkJuQ3R4 DQo+ICsgICkNCj4gK3sNCj4gKyAgcmV0dXJuIEVDX1BPSU5UX2lzX29uX2N1cnZlIChFY0dyb3Vw LCBFY1BvaW50LCBCbkN0eCkgPT0gMTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENoZWNrIGlm IHRoZSBzdXBwbGllZCBwb2ludCBpcyBhdCBpbmZpbml0eS4NCj4gKw0KPiArICBAcGFyYW1baW5d ICBFY0dyb3VwICAgRUMgZ3JvdXAgb2JqZWN0Lg0KPiArICBAcGFyYW1baW5dICBFY1BvaW50ICAg RUMgcG9pbnQgdG8gY2hlY2suDQo+ICsNCj4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgIEF0IGlu ZmluaXR5Lg0KPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiArKiovDQo+ ICtCT09MRUFODQo+ICtFRklBUEkNCj4gK0VjUG9pbnRJc0F0SW5maW5pdHkgKA0KPiArICBJTiBD T05TVCBWT0lEICAqRWNHcm91cCwNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjUG9pbnQNCj4gKyAg KQ0KPiArew0KPiArICByZXR1cm4gRUNfUE9JTlRfaXNfYXRfaW5maW5pdHkgKEVjR3JvdXAsIEVj UG9pbnQpID09IDE7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDaGVjayBpZiBFQyBwb2ludHMg YXJlIGVxdWFsLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICBFQyBncm91cCBvYmpl Y3QuDQo+ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnRBICBFQyBwb2ludCBBLg0KPiArICBAcGFyYW1b aW5dICBFY1BvaW50QiAgRUMgcG9pbnQgQi4NCj4gKyAgQHBhcmFtW2luXSAgQm5DdHggICAgIEJO IGNvbnRleHQsIGNyZWF0ZWQgd2l0aCBCaWdOdW1OZXdDb250ZXh0KCkuDQo+ICsNCj4gKyAgQHJl dHZhbCBUUlVFICAgICAgICAgIEEgPT0gQi4NCj4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90 aGVyd2lzZS4NCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArRUZJQVBJDQo+ICtFY1BvaW50RXF1YWwg KA0KPiArICBJTiBDT05TVCBWT0lEICAqRWNHcm91cCwNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVj UG9pbnRBLA0KPiArICBJTiBDT05TVCBWT0lEICAqRWNQb2ludEIsDQo+ICsgIElOIFZPSUQgICAg ICAgICpCbkN0eA0KPiArICApDQo+ICt7DQo+ICsgIHJldHVybiBFQ19QT0lOVF9jbXAgKEVjR3Jv dXAsIEVjUG9pbnRBLCBFY1BvaW50QiwgQm5DdHgpID09IDA7DQo+ICt9DQo+ICsNCj4gKy8qKg0K PiArICBTZXQgRUMgcG9pbnQgY29tcHJlc3NlZCBjb29yZGluYXRlcy4gUG9pbnRzIGNhbiBiZSBk ZXNjcmliZWQgaW4gdGVybXMgb2YNCj4gKyAgdGhlaXIgY29tcHJlc3NlZCBjb29yZGluYXRlcy4g Rm9yIGEgcG9pbnQgKHgsIHkpLCBmb3IgYW55IGdpdmVuIHZhbHVlIGZvciB4DQo+ICsgIHN1Y2gg dGhhdCB0aGUgcG9pbnQgaXMgb24gdGhlIGN1cnZlIHRoZXJlIHdpbGwgb25seSBldmVyIGJlIHR3 byBwb3NzaWJsZQ0KPiArICB2YWx1ZXMgZm9yIHkuIFRoZXJlZm9yZSwgYSBwb2ludCBjYW4gYmUg c2V0IHVzaW5nIHRoaXMgZnVuY3Rpb24gd2hlcmUgQm5YIGlzDQo+ICsgIHRoZSB4IGNvb3JkaW5h dGUgYW5kIFlCaXQgaXMgYSB2YWx1ZSAwIG9yIDEgdG8gaWRlbnRpZnkgd2hpY2ggb2YgdGhlIHR3 bw0KPiArICBwb3NzaWJsZSB2YWx1ZXMgZm9yIHkgc2hvdWxkIGJlIHVzZWQuDQo+ICsNCj4gKyAg QHBhcmFtW2luXSAgRWNHcm91cCAgICBFQyBncm91cCBvYmplY3QuDQo+ICsgIEBwYXJhbVtpbl0g IEVjUG9pbnQgICAgRUMgUG9pbnQuDQo+ICsgIEBwYXJhbVtpbl0gIEJuWCAgICAgICAgWCBjb29y ZGluYXRlLg0KPiArICBAcGFyYW1baW5dICBZQml0ICAgICAgIDAgb3IgMSB0byBpZGVudGlmeSB3 aGljaCBZIHZhbHVlIGlzIHVzZWQuDQo+ICsgIEBwYXJhbVtpbl0gIEJuQ3R4ICAgICAgQk4gY29u dGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5ld0NvbnRleHQoKS4NCj4gKw0KPiArICBAcmV0dmFs IFRSVUUgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90 aGVyd2lzZS4NCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArRUZJQVBJDQo+ICtFY1BvaW50U2V0Q29t cHJlc3NlZENvb3JkaW5hdGVzICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ICsg IElOIFZPSUQgICAgICAgICpFY1BvaW50LA0KPiArICBJTiBDT05TVCBWT0lEICAqQm5YLA0KPiAr ICBJTiBVSU5UOCAgICAgICBZQml0LA0KPiArICBJTiBWT0lEICAgICAgICAqQm5DdHgNCj4gKyAg KQ0KPiArew0KPiArICByZXR1cm4gKEJPT0xFQU4pRUNfUE9JTlRfc2V0X2NvbXByZXNzZWRfY29v cmRpbmF0ZXMgKEVjR3JvdXAsIEVjUG9pbnQsIEJuWCwgWUJpdCwgQm5DdHgpOw0KPiArfQ0KPiAr DQo+ICsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ICsvLyAgICBFbGxpcHRpYyBD dXJ2ZSBEaWZmaWUgSGVsbG1hbiBQcmltaXRpdmVzDQo+ICsvLyA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09DQo+ICsNCj4gKy8qKg0KPiArICBBbGxvY2F0ZXMgYW5kIEluaXRpYWxpemVzIG9u ZSBFbGxpcHRpYyBDdXJ2ZSBDb250ZXh0IGZvciBzdWJzZXF1ZW50IHVzZQ0KPiArICB3aXRoIHRo ZSBOSUQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgTmlkICAgSWRlbnRpZnlpbmcgbnVtYmVyIGZv ciB0aGUgRUNDIGN1cnZlIChEZWZpbmVkIGluDQo+ICsgICAgICAgICAgICAgICAgICAgIEJhc2VD cnlwdExpYi5oKS4NCj4gKyAgQHJldHVybiAgICAgUG9pbnRlciB0byB0aGUgRWxsaXB0aWMgQ3Vy dmUgQ29udGV4dCB0aGF0IGhhcyBiZWVuIGluaXRpYWxpemVkLg0KPiArICAgICAgICAgICAgICBJ ZiB0aGUgYWxsb2NhdGlvbnMgZmFpbHMsIEVjTmV3QnlOaWQoKSByZXR1cm5zIE5VTEwuDQo+ICsq Ki8NCj4gK1ZPSUQgKg0KPiArRUZJQVBJDQo+ICtFY05ld0J5TmlkICgNCj4gKyAgSU4gVUlOVE4g IE5pZA0KPiArICApDQo+ICt7DQo+ICsgIElOVDMyICBPcGVuU3NsTmlkOw0KPiArDQo+ICsgIE9w ZW5Tc2xOaWQgPSBDcnlwdG9OaWRUb09wZW5zc2xOaWQgKE5pZCk7DQo+ICsgIGlmIChPcGVuU3Ns TmlkIDwgMCkgew0KPiArICAgIHJldHVybiBOVUxMOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJu IChWT0lEICopRUNfS0VZX25ld19ieV9jdXJ2ZV9uYW1lIChPcGVuU3NsTmlkKTsNCj4gK30NCj4g Kw0KPiArLyoqDQo+ICsgIFJlbGVhc2UgdGhlIHNwZWNpZmllZCBFQyBjb250ZXh0Lg0KPiArDQo+ ICsgIEBwYXJhbVtpbl0gIEVjQ29udGV4dCAgUG9pbnRlciB0byB0aGUgRUMgY29udGV4dCB0byBi ZSByZWxlYXNlZC4NCj4gKyoqLw0KPiArVk9JRA0KPiArRUZJQVBJDQo+ICtFY0ZyZWUgKA0KPiAr ICBJTiAgVk9JRCAgKkVjQ29udGV4dA0KPiArICApDQo+ICt7DQo+ICsgIEVDX0tFWV9mcmVlICgo RUNfS0VZICopRWNDb250ZXh0KTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEdlbmVyYXRlcyBF QyBrZXkgYW5kIHJldHVybnMgRUMgcHVibGljIGtleSAoWCwgWSksIFBsZWFzZSBub3RlLCB0aGlz IGZ1bmN0aW9uIHVzZXMNCj4gKyAgcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLiBUaGUg Y2FsbGVyIG11c3QgbWFrZSBzdXJlIFJhbmRvbVNlZWQoKQ0KPiArICBmdW5jdGlvbiB3YXMgcHJv cGVybHkgY2FsbGVkIGJlZm9yZS4NCj4gKyAgVGhlIEVjIGNvbnRleHQgc2hvdWxkIGJlIGNvcnJl Y3RseSBpbml0aWFsaXplZCBieSBFY05ld0J5TmlkLg0KPiArICBUaGlzIGZ1bmN0aW9uIGdlbmVy YXRlcyByYW5kb20gc2VjcmV0LCBhbmQgY29tcHV0ZXMgdGhlIHB1YmxpYyBrZXkgKFgsIFkpLCB3 aGljaCBpcw0KPiArICByZXR1cm5lZCB2aWEgcGFyYW1ldGVyIFB1YmxpYywgUHVibGljU2l6ZS4N Cj4gKyAgWCBpcyB0aGUgZmlyc3QgaGFsZiBvZiBQdWJsaWMgd2l0aCBzaXplIGJlaW5nIFB1Ymxp Y1NpemUgLyAyLA0KPiArICBZIGlzIHRoZSBzZWNvbmQgaGFsZiBvZiBQdWJsaWMgd2l0aCBzaXpl IGJlaW5nIFB1YmxpY1NpemUgLyAyLg0KPiArICBFQyBjb250ZXh0IGlzIHVwZGF0ZWQgYWNjb3Jk aW5nbHkuDQo+ICsgIElmIHRoZSBQdWJsaWMgYnVmZmVyIGlzIHRvbyBzbWFsbCB0byBob2xkIHRo ZSBwdWJsaWMgWCwgWSwgRkFMU0UgaXMgcmV0dXJuZWQgYW5kDQo+ICsgIFB1YmxpY1NpemUgaXMg c2V0IHRvIHRoZSByZXF1aXJlZCBidWZmZXIgc2l6ZSB0byBvYnRhaW4gdGhlIHB1YmxpYyBYLCBZ Lg0KPiArICBGb3IgUC0yNTYsIHRoZSBQdWJsaWNTaXplIGlzIDY0LiBGaXJzdCAzMi1ieXRlIGlz IFgsIFNlY29uZCAzMi1ieXRlIGlzIFkuDQo+ICsgIEZvciBQLTM4NCwgdGhlIFB1YmxpY1NpemUg aXMgOTYuIEZpcnN0IDQ4LWJ5dGUgaXMgWCwgU2Vjb25kIDQ4LWJ5dGUgaXMgWS4NCj4gKyAgRm9y IFAtNTIxLCB0aGUgUHVibGljU2l6ZSBpcyAxMzIuIEZpcnN0IDY2LWJ5dGUgaXMgWCwgU2Vjb25k IDY2LWJ5dGUgaXMgWS4NCj4gKyAgSWYgRWNDb250ZXh0IGlzIE5VTEwsIHRoZW4gcmV0dXJuIEZB TFNFLg0KPiArICBJZiBQdWJsaWNTaXplIGlzIE5VTEwsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiAr ICBJZiBQdWJsaWNTaXplIGlzIGxhcmdlIGVub3VnaCBidXQgUHVibGljIGlzIE5VTEwsIHRoZW4g cmV0dXJuIEZBTFNFLg0KPiArICBAcGFyYW1baW4sIG91dF0gIEVjQ29udGV4dCAgICAgIFBvaW50 ZXIgdG8gdGhlIEVDIGNvbnRleHQuDQo+ICsgIEBwYXJhbVtvdXRdICAgICAgUHVibGljS2V5ICAg ICAgUG9pbnRlciB0byB0IGJ1ZmZlciB0byByZWNlaXZlIGdlbmVyYXRlZCBwdWJsaWMgWCxZLg0K PiArICBAcGFyYW1baW4sIG91dF0gIFB1YmxpY0tleVNpemUgIE9uIGlucHV0LCB0aGUgc2l6ZSBv ZiBQdWJsaWMgYnVmZmVyIGluIGJ5dGVzLg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE9uIG91dHB1dCwgdGhlIHNpemUgb2YgZGF0YSByZXR1cm5lZCBpbiBQdWJsaWMgYnVm ZmVyIGluIGJ5dGVzLg0KPiArICBAcmV0dmFsIFRSVUUgICBFQyBwdWJsaWMgWCxZIGdlbmVyYXRp b24gc3VjY2VlZGVkLg0KPiArICBAcmV0dmFsIEZBTFNFICBFQyBwdWJsaWMgWCxZIGdlbmVyYXRp b24gZmFpbGVkLg0KPiArICBAcmV0dmFsIEZBTFNFICBQdWJsaWNLZXlTaXplIGlzIG5vdCBsYXJn ZSBlbm91Z2guDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0VGSUFQSQ0KPiArRWNHZW5lcmF0ZUtl eSAoDQo+ICsgIElOIE9VVCAgVk9JRCAgICpFY0NvbnRleHQsDQo+ICsgIE9VVCAgICAgVUlOVDgg ICpQdWJsaWNLZXksDQo+ICsgIElOIE9VVCAgVUlOVE4gICpQdWJsaWNLZXlTaXplDQo+ICsgICkN Cj4gK3sNCj4gKyAgRUNfS0VZICAgICAgICAgICpFY0tleTsNCj4gKyAgQ09OU1QgRUNfR1JPVVAg ICpHcm91cDsNCj4gKyAgQ09OU1QgRUNfUE9JTlQgICpFY1BvaW50Ow0KPiArICBCT09MRUFOICAg ICAgICAgUmV0VmFsOw0KPiArICBCSUdOVU0gICAgICAgICAgKkJuWDsNCj4gKyAgQklHTlVNICAg ICAgICAgICpCblk7DQo+ICsgIFVJTlROICAgICAgICAgICBIYWxmU2l6ZTsNCj4gKyAgSU5UTiAg ICAgICAgICAgIFhTaXplOw0KPiArICBJTlROICAgICAgICAgICAgWVNpemU7DQo+ICsNCj4gKyAg aWYgKChFY0NvbnRleHQgPT0gTlVMTCkgfHwgKFB1YmxpY0tleVNpemUgPT0gTlVMTCkpIHsNCj4g KyAgICByZXR1cm4gRkFMU0U7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoKFB1YmxpY0tleSA9PSBO VUxMKSAmJiAoKlB1YmxpY0tleVNpemUgIT0gMCkpIHsNCj4gKyAgICByZXR1cm4gRkFMU0U7DQo+ ICsgIH0NCj4gKw0KPiArICBFY0tleSAgICA9IChFQ19LRVkgKilFY0NvbnRleHQ7DQo+ICsgIEdy b3VwICAgID0gRUNfS0VZX2dldDBfZ3JvdXAgKEVjS2V5KTsNCj4gKyAgSGFsZlNpemUgPSAoRUNf R1JPVVBfZ2V0X2RlZ3JlZSAoR3JvdXApICsgNykgLyA4Ow0KPiArDQo+ICsgIC8vIEFzc3VtZSBS QU5EX3NlZWQgd2FzIGNhbGxlZA0KPiArICBpZiAoRUNfS0VZX2dlbmVyYXRlX2tleSAoRWNLZXkp ICE9IDEpIHsNCj4gKyAgICByZXR1cm4gRkFMU0U7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoKlB1 YmxpY0tleVNpemUgPCBIYWxmU2l6ZSAqIDIpIHsNCj4gKyAgICAqUHVibGljS2V5U2l6ZSA9IEhh bGZTaXplICogMjsNCj4gKyAgICByZXR1cm4gRkFMU0U7DQo+ICsgIH0NCj4gKw0KPiArICAqUHVi bGljS2V5U2l6ZSA9IEhhbGZTaXplICogMjsNCj4gKw0KPiArICBFY1BvaW50ID0gRUNfS0VZX2dl dDBfcHVibGljX2tleSAoRWNLZXkpOw0KPiArICBpZiAoRWNQb2ludCA9PSBOVUxMKSB7DQo+ICsg ICAgcmV0dXJuIEZBTFNFOw0KPiArICB9DQo+ICsNCj4gKyAgUmV0VmFsID0gRkFMU0U7DQo+ICsg IEJuWCAgICA9IEJOX25ldyAoKTsNCj4gKyAgQm5ZICAgID0gQk5fbmV3ICgpOw0KPiArICBpZiAo KEJuWCA9PSBOVUxMKSB8fCAoQm5ZID09IE5VTEwpKSB7DQo+ICsgICAgZ290byBmYWlsOw0KPiAr ICB9DQo+ICsNCj4gKyAgaWYgKEVDX1BPSU5UX2dldF9hZmZpbmVfY29vcmRpbmF0ZXMgKEdyb3Vw LCBFY1BvaW50LCBCblgsIEJuWSwgTlVMTCkgIT0gMSkgew0KPiArICAgIGdvdG8gZmFpbDsNCj4g KyAgfQ0KPiArDQo+ICsgIFhTaXplID0gQk5fbnVtX2J5dGVzIChCblgpOw0KPiArICBZU2l6ZSA9 IEJOX251bV9ieXRlcyAoQm5ZKTsNCj4gKyAgaWYgKChYU2l6ZSA8PSAwKSB8fCAoWVNpemUgPD0g MCkpIHsNCj4gKyAgICBnb3RvIGZhaWw7DQo+ICsgIH0NCj4gKw0KPiArICBBU1NFUlQgKChVSU5U TilYU2l6ZSA8PSBIYWxmU2l6ZSAmJiAoVUlOVE4pWVNpemUgPD0gSGFsZlNpemUpOw0KPiArDQo+ ICsgIFplcm9NZW0gKFB1YmxpY0tleSwgKlB1YmxpY0tleVNpemUpOw0KPiArICBCTl9ibjJiaW4g KEJuWCwgJlB1YmxpY0tleVswICsgSGFsZlNpemUgLSBYU2l6ZV0pOw0KPiArICBCTl9ibjJiaW4g KEJuWSwgJlB1YmxpY0tleVtIYWxmU2l6ZSArIEhhbGZTaXplIC0gWVNpemVdKTsNCj4gKw0KPiAr ICBSZXRWYWwgPSBUUlVFOw0KPiArDQo+ICtmYWlsOg0KPiArICBCTl9mcmVlIChCblgpOw0KPiAr ICBCTl9mcmVlIChCblkpOw0KPiArICByZXR1cm4gUmV0VmFsOw0KPiArfQ0KPiArDQo+ICsvKioN Cj4gKyAgR2V0cyB0aGUgcHVibGljIGtleSBjb21wb25lbnQgZnJvbSB0aGUgZXN0YWJsaXNoZWQg RUMgY29udGV4dC4NCj4gKyAgVGhlIEVjIGNvbnRleHQgc2hvdWxkIGJlIGNvcnJlY3RseSBpbml0 aWFsaXplZCBieSBFY05ld0J5TmlkLCBhbmQgc3VjY2Vzc2Z1bGx5DQo+ICsgIGdlbmVyYXRlIGtl eSBwYWlyIGZyb20gRWNHZW5lcmF0ZUtleSgpLg0KPiArICBGb3IgUC0yNTYsIHRoZSBQdWJsaWNT aXplIGlzIDY0LiBGaXJzdCAzMi1ieXRlIGlzIFgsIFNlY29uZCAzMi1ieXRlIGlzIFkuDQo+ICsg IEZvciBQLTM4NCwgdGhlIFB1YmxpY1NpemUgaXMgOTYuIEZpcnN0IDQ4LWJ5dGUgaXMgWCwgU2Vj b25kIDQ4LWJ5dGUgaXMgWS4NCj4gKyAgRm9yIFAtNTIxLCB0aGUgUHVibGljU2l6ZSBpcyAxMzIu IEZpcnN0IDY2LWJ5dGUgaXMgWCwgU2Vjb25kIDY2LWJ5dGUgaXMgWS4NCj4gKyAgQHBhcmFtW2lu LCBvdXRdICBFY0NvbnRleHQgICAgICBQb2ludGVyIHRvIEVDIGNvbnRleHQgYmVpbmcgc2V0Lg0K PiArICBAcGFyYW1bb3V0XSAgICAgIFB1YmxpY0tleSAgICAgIFBvaW50ZXIgdG8gdCBidWZmZXIg dG8gcmVjZWl2ZSBnZW5lcmF0ZWQgcHVibGljIFgsWS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdICBQ dWJsaWNLZXlTaXplICBPbiBpbnB1dCwgdGhlIHNpemUgb2YgUHVibGljIGJ1ZmZlciBpbiBieXRl cy4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiBvdXRwdXQsIHRoZSBz aXplIG9mIGRhdGEgcmV0dXJuZWQgaW4gUHVibGljIGJ1ZmZlciBpbiBieXRlcy4NCj4gKyAgQHJl dHZhbCAgVFJVRSAgIEVDIGtleSBjb21wb25lbnQgd2FzIHJldHJpZXZlZCBzdWNjZXNzZnVsbHku DQo+ICsgIEByZXR2YWwgIEZBTFNFICBJbnZhbGlkIEVDIGtleSBjb21wb25lbnQuDQo+ICsqKi8N Cj4gK0JPT0xFQU4NCj4gK0VGSUFQSQ0KPiArRWNHZXRQdWJLZXkgKA0KPiArICBJTiBPVVQgIFZP SUQgICAqRWNDb250ZXh0LA0KPiArICBPVVQgICAgIFVJTlQ4ICAqUHVibGljS2V5LA0KPiArICBJ TiBPVVQgIFVJTlROICAqUHVibGljS2V5U2l6ZQ0KPiArICApDQo+ICt7DQo+ICsgIEVDX0tFWSAg ICAgICAgICAqRWNLZXk7DQo+ICsgIENPTlNUIEVDX0dST1VQICAqR3JvdXA7DQo+ICsgIENPTlNU IEVDX1BPSU5UICAqRWNQb2ludDsNCj4gKyAgQklHTlVNICAgICAgICAgICpCblg7DQo+ICsgIEJJ R05VTSAgICAgICAgICAqQm5ZOw0KPiArICBVSU5UTiAgICAgICAgICAgSGFsZlNpemU7DQo+ICsg IElOVE4gICAgICAgICAgICBYU2l6ZTsNCj4gKyAgSU5UTiAgICAgICAgICAgIFlTaXplOw0KPiAr ICBCT09MRUFOICAgICAgICAgUmV0VmFsOw0KPiArDQo+ICsgIGlmICgoRWNDb250ZXh0ID09IE5V TEwpIHx8IChQdWJsaWNLZXlTaXplID09IE5VTEwpKSB7DQo+ICsgICAgcmV0dXJuIEZBTFNFOw0K PiArICB9DQo+ICsNCj4gKyAgaWYgKChQdWJsaWNLZXkgPT0gTlVMTCkgJiYgKCpQdWJsaWNLZXlT aXplICE9IDApKSB7DQo+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiArICB9DQo+ICsNCj4gKyAgRWNL ZXkgICAgPSAoRUNfS0VZICopRWNDb250ZXh0Ow0KPiArICBHcm91cCAgICA9IEVDX0tFWV9nZXQw X2dyb3VwIChFY0tleSk7DQo+ICsgIEhhbGZTaXplID0gKEVDX0dST1VQX2dldF9kZWdyZWUgKEdy b3VwKSArIDcpIC8gODsNCj4gKyAgaWYgKCpQdWJsaWNLZXlTaXplIDwgSGFsZlNpemUgKiAyKSB7 DQo+ICsgICAgKlB1YmxpY0tleVNpemUgPSBIYWxmU2l6ZSAqIDI7DQo+ICsgICAgcmV0dXJuIEZB TFNFOw0KPiArICB9DQo+ICsNCj4gKyAgKlB1YmxpY0tleVNpemUgPSBIYWxmU2l6ZSAqIDI7DQo+ ICsNCj4gKyAgRWNQb2ludCA9IEVDX0tFWV9nZXQwX3B1YmxpY19rZXkgKEVjS2V5KTsNCj4gKyAg aWYgKEVjUG9pbnQgPT0gTlVMTCkgew0KPiArICAgIHJldHVybiBGQUxTRTsNCj4gKyAgfQ0KPiAr DQo+ICsgIFJldFZhbCA9IEZBTFNFOw0KPiArICBCblggICAgPSBCTl9uZXcgKCk7DQo+ICsgIEJu WSAgICA9IEJOX25ldyAoKTsNCj4gKyAgaWYgKChCblggPT0gTlVMTCkgfHwgKEJuWSA9PSBOVUxM KSkgew0KPiArICAgIGdvdG8gZmFpbDsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChFQ19QT0lOVF9n ZXRfYWZmaW5lX2Nvb3JkaW5hdGVzIChHcm91cCwgRWNQb2ludCwgQm5YLCBCblksIE5VTEwpICE9 IDEpIHsNCj4gKyAgICBnb3RvIGZhaWw7DQo+ICsgIH0NCj4gKw0KPiArICBYU2l6ZSA9IEJOX251 bV9ieXRlcyAoQm5YKTsNCj4gKyAgWVNpemUgPSBCTl9udW1fYnl0ZXMgKEJuWSk7DQo+ICsgIGlm ICgoWFNpemUgPD0gMCkgfHwgKFlTaXplIDw9IDApKSB7DQo+ICsgICAgZ290byBmYWlsOw0KPiAr ICB9DQo+ICsNCj4gKyAgQVNTRVJUICgoVUlOVE4pWFNpemUgPD0gSGFsZlNpemUgJiYgKFVJTlRO KVlTaXplIDw9IEhhbGZTaXplKTsNCj4gKw0KPiArICBpZiAoUHVibGljS2V5ICE9IE5VTEwpIHsN Cj4gKyAgICBaZXJvTWVtIChQdWJsaWNLZXksICpQdWJsaWNLZXlTaXplKTsNCj4gKyAgICBCTl9i bjJiaW4gKEJuWCwgJlB1YmxpY0tleVswICsgSGFsZlNpemUgLSBYU2l6ZV0pOw0KPiArICAgIEJO X2JuMmJpbiAoQm5ZLCAmUHVibGljS2V5W0hhbGZTaXplICsgSGFsZlNpemUgLSBZU2l6ZV0pOw0K PiArICB9DQo+ICsNCj4gKyAgUmV0VmFsID0gVFJVRTsNCj4gKw0KPiArZmFpbDoNCj4gKyAgQk5f ZnJlZSAoQm5YKTsNCj4gKyAgQk5fZnJlZSAoQm5ZKTsNCj4gKyAgcmV0dXJuIFJldFZhbDsNCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgIENvbXB1dGVzIGV4Y2hhbmdlZCBjb21tb24ga2V5Lg0KPiAr ICBHaXZlbiBwZWVyJ3MgcHVibGljIGtleSAoWCwgWSksIHRoaXMgZnVuY3Rpb24gY29tcHV0ZXMg dGhlIGV4Y2hhbmdlZCBjb21tb24ga2V5LA0KPiArICBiYXNlZCBvbiBpdHMgb3duIGNvbnRleHQg aW5jbHVkaW5nIHZhbHVlIG9mIGN1cnZlIHBhcmFtZXRlciBhbmQgcmFuZG9tIHNlY3JldC4NCj4g KyAgWCBpcyB0aGUgZmlyc3QgaGFsZiBvZiBQZWVyUHVibGljIHdpdGggc2l6ZSBiZWluZyBQZWVy UHVibGljU2l6ZSAvIDIsDQo+ICsgIFkgaXMgdGhlIHNlY29uZCBoYWxmIG9mIFBlZXJQdWJsaWMg d2l0aCBzaXplIGJlaW5nIFBlZXJQdWJsaWNTaXplIC8gMi4NCj4gKyAgSWYgcHVibGljIGtleSBp cyBjb21wcmVzc2VkLCB0aGUgUGVlclB1YmxpYyB3aWxsIG9ubHkgY29udGFpbiBoYWxmIGtleSAo WCkuDQo+ICsgIElmIEVjQ29udGV4dCBpcyBOVUxMLCB0aGVuIHJldHVybiBGQUxTRS4NCj4gKyAg SWYgUGVlclB1YmxpYyBpcyBOVUxMLCB0aGVuIHJldHVybiBGQUxTRS4NCj4gKyAgSWYgUGVlclB1 YmxpY1NpemUgaXMgMCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ICsgIElmIEtleSBpcyBOVUxMLCB0 aGVuIHJldHVybiBGQUxTRS4NCj4gKyAgSWYgS2V5U2l6ZSBpcyBub3QgbGFyZ2UgZW5vdWdoLCB0 aGVuIHJldHVybiBGQUxTRS4NCj4gKyAgRm9yIFAtMjU2LCB0aGUgUGVlclB1YmxpY1NpemUgaXMg NjQuIEZpcnN0IDMyLWJ5dGUgaXMgWCwgU2Vjb25kIDMyLWJ5dGUgaXMgWS4NCj4gKyAgRm9yIFAt Mzg0LCB0aGUgUGVlclB1YmxpY1NpemUgaXMgOTYuIEZpcnN0IDQ4LWJ5dGUgaXMgWCwgU2Vjb25k IDQ4LWJ5dGUgaXMgWS4NCj4gKyAgRm9yIFAtNTIxLCB0aGUgUGVlclB1YmxpY1NpemUgaXMgMTMy LiBGaXJzdCA2Ni1ieXRlIGlzIFgsIFNlY29uZCA2Ni1ieXRlIGlzIFkuDQo+ICsgIEBwYXJhbVtp biwgb3V0XSAgRWNDb250ZXh0ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIEVDIGNvbnRleHQuDQo+ ICsgIEBwYXJhbVtpbl0gICAgICAgUGVlclB1YmxpYyAgICAgICAgIFBvaW50ZXIgdG8gdGhlIHBl ZXIncyBwdWJsaWMgWCxZLg0KPiArICBAcGFyYW1baW5dICAgICAgIFBlZXJQdWJsaWNTaXplICAg ICBTaXplIG9mIHBlZXIncyBwdWJsaWMgWCxZIGluIGJ5dGVzLg0KPiArICBAcGFyYW1baW5dICAg ICAgIENvbXByZXNzRmxhZyAgICAgICBGbGFnIG9mIFBlZXJQdWJsaWMgaXMgY29tcHJlc3NlZCBv ciBub3QuDQo+ICsgIEBwYXJhbVtvdXRdICAgICAgS2V5ICAgICAgICAgICAgICAgIFBvaW50ZXIg dG8gdGhlIGJ1ZmZlciB0byByZWNlaXZlIGdlbmVyYXRlZCBrZXkuDQo+ICsgIEBwYXJhbVtpbiwg b3V0XSAgS2V5U2l6ZSAgICAgICAgICAgIE9uIGlucHV0LCB0aGUgc2l6ZSBvZiBLZXkgYnVmZmVy IGluIGJ5dGVzLg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiBv dXRwdXQsIHRoZSBzaXplIG9mIGRhdGEgcmV0dXJuZWQgaW4gS2V5IGJ1ZmZlciBpbiBieXRlcy4N Cj4gKyAgQHJldHZhbCBUUlVFICAgRUMgZXhjaGFuZ2VkIGtleSBnZW5lcmF0aW9uIHN1Y2NlZWRl ZC4NCj4gKyAgQHJldHZhbCBGQUxTRSAgRUMgZXhjaGFuZ2VkIGtleSBnZW5lcmF0aW9uIGZhaWxl ZC4NCj4gKyAgQHJldHZhbCBGQUxTRSAgS2V5U2l6ZSBpcyBub3QgbGFyZ2UgZW5vdWdoLg0KPiAr KiovDQo+ICtCT09MRUFODQo+ICtFRklBUEkNCj4gK0VjRGhDb21wdXRlS2V5ICgNCj4gKyAgSU4g T1VUICBWT0lEICAgICAgICAgKkVjQ29udGV4dCwNCj4gKyAgSU4gICAgICBDT05TVCBVSU5UOCAg KlBlZXJQdWJsaWMsDQo+ICsgIElOICAgICAgVUlOVE4gICAgICAgIFBlZXJQdWJsaWNTaXplLA0K PiArICBJTiAgICAgIENPTlNUIElOVDMyICAqQ29tcHJlc3NGbGFnLA0KPiArICBPVVQgICAgIFVJ TlQ4ICAgICAgICAqS2V5LA0KPiArICBJTiBPVVQgIFVJTlROICAgICAgICAqS2V5U2l6ZQ0KPiAr ICApDQo+ICt7DQo+ICsgIEVDX0tFWSAgICAgICAgICAqRWNLZXk7DQo+ICsgIEVDX0tFWSAgICAg ICAgICAqUGVlckVjS2V5Ow0KPiArICBDT05TVCBFQ19HUk9VUCAgKkdyb3VwOw0KPiArICBCT09M RUFOICAgICAgICAgUmV0VmFsOw0KPiArICBCSUdOVU0gICAgICAgICAgKkJuWDsNCj4gKyAgQklH TlVNICAgICAgICAgICpCblk7DQo+ICsgIEVDX1BPSU5UICAgICAgICAqUG9pbnQ7DQo+ICsgIElO VDMyICAgICAgICAgICBPcGVuU3NsTmlkOw0KPiArICBVSU5UTiAgICAgICAgICAgSGFsZlNpemU7 DQo+ICsNCj4gKyAgaWYgKChFY0NvbnRleHQgPT0gTlVMTCkgfHwgKFBlZXJQdWJsaWMgPT0gTlVM TCkgfHwgKEtleVNpemUgPT0gTlVMTCkpIHsNCj4gKyAgICByZXR1cm4gRkFMU0U7DQo+ICsgIH0N Cj4gKw0KPiArICBpZiAoKEtleSA9PSBOVUxMKSAmJiAoKktleVNpemUgIT0gMCkpIHsNCj4gKyAg ICByZXR1cm4gRkFMU0U7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoUGVlclB1YmxpY1NpemUgPiBJ TlRfTUFYKSB7DQo+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiArICB9DQo+ICsNCj4gKyAgRWNLZXkg ICAgPSAoRUNfS0VZICopRWNDb250ZXh0Ow0KPiArICBHcm91cCAgICA9IEVDX0tFWV9nZXQwX2dy b3VwIChFY0tleSk7DQo+ICsgIEhhbGZTaXplID0gKEVDX0dST1VQX2dldF9kZWdyZWUgKEdyb3Vw KSArIDcpIC8gODsNCj4gKyAgaWYgKChDb21wcmVzc0ZsYWcgPT0gTlVMTCkgJiYgKFBlZXJQdWJs aWNTaXplICE9IEhhbGZTaXplICogMikpIHsNCj4gKyAgICByZXR1cm4gRkFMU0U7DQo+ICsgIH0N Cj4gKw0KPiArICBpZiAoKENvbXByZXNzRmxhZyAhPSBOVUxMKSAmJiAoUGVlclB1YmxpY1NpemUg IT0gSGFsZlNpemUpKSB7DQo+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiArICB9DQo+ICsNCj4gKyAg aWYgKCpLZXlTaXplIDwgSGFsZlNpemUpIHsNCj4gKyAgICAqS2V5U2l6ZSA9IEhhbGZTaXplOw0K PiArICAgIHJldHVybiBGQUxTRTsNCj4gKyAgfQ0KPiArDQo+ICsgICpLZXlTaXplID0gSGFsZlNp emU7DQo+ICsNCj4gKyAgUmV0VmFsICAgID0gRkFMU0U7DQo+ICsgIFBvaW50ICAgICA9IE5VTEw7 DQo+ICsgIEJuWCAgICAgICA9IEJOX2JpbjJibiAoUGVlclB1YmxpYywgKElOVDMyKUhhbGZTaXpl LCBOVUxMKTsNCj4gKyAgQm5ZICAgICAgID0gTlVMTDsNCj4gKyAgUG9pbnQgICAgID0gRUNfUE9J TlRfbmV3IChHcm91cCk7DQo+ICsgIFBlZXJFY0tleSA9IE5VTEw7DQo+ICsgIGlmICgoQm5YID09 IE5VTEwpIHx8IChQb2ludCA9PSBOVUxMKSkgew0KPiArICAgIGdvdG8gZmFpbDsNCj4gKyAgfQ0K PiArDQo+ICsgIGlmIChDb21wcmVzc0ZsYWcgPT0gTlVMTCkgew0KPiArICAgIEJuWSA9IEJOX2Jp bjJibiAoUGVlclB1YmxpYyArIEhhbGZTaXplLCAoSU5UMzIpSGFsZlNpemUsIE5VTEwpOw0KPiAr ICAgIGlmIChCblkgPT0gTlVMTCkgew0KPiArICAgICAgZ290byBmYWlsOw0KPiArICAgIH0NCj4g Kw0KPiArICAgIGlmIChFQ19QT0lOVF9zZXRfYWZmaW5lX2Nvb3JkaW5hdGVzIChHcm91cCwgUG9p bnQsIEJuWCwgQm5ZLCBOVUxMKSAhPSAxKSB7DQo+ICsgICAgICBnb3RvIGZhaWw7DQo+ICsgICAg fQ0KPiArICB9IGVsc2Ugew0KPiArICAgIGlmIChFQ19QT0lOVF9zZXRfY29tcHJlc3NlZF9jb29y ZGluYXRlcyAoR3JvdXAsIFBvaW50LCBCblgsICpDb21wcmVzc0ZsYWcsIE5VTEwpICE9IDEpIHsN Cj4gKyAgICAgIGdvdG8gZmFpbDsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICAvLyBWYWxp ZGF0ZSBOSVNUIEVDREggcHVibGljIGtleQ0KPiArICBPcGVuU3NsTmlkID0gRUNfR1JPVVBfZ2V0 X2N1cnZlX25hbWUgKEdyb3VwKTsNCj4gKyAgUGVlckVjS2V5ICA9IEVDX0tFWV9uZXdfYnlfY3Vy dmVfbmFtZSAoT3BlblNzbE5pZCk7DQo+ICsgIGlmIChQZWVyRWNLZXkgPT0gTlVMTCkgew0KPiAr ICAgIGdvdG8gZmFpbDsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChFQ19LRVlfc2V0X3B1YmxpY19r ZXkgKFBlZXJFY0tleSwgUG9pbnQpICE9IDEpIHsNCj4gKyAgICBnb3RvIGZhaWw7DQo+ICsgIH0N Cj4gKw0KPiArICBpZiAoRUNfS0VZX2NoZWNrX2tleSAoUGVlckVjS2V5KSAhPSAxKSB7DQo+ICsg ICAgZ290byBmYWlsOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKEVDREhfY29tcHV0ZV9rZXkgKEtl eSwgKktleVNpemUsIFBvaW50LCBFY0tleSwgTlVMTCkgPD0gMCkgew0KPiArICAgIGdvdG8gZmFp bDsNCj4gKyAgfQ0KPiArDQo+ICsgIFJldFZhbCA9IFRSVUU7DQo+ICsNCj4gK2ZhaWw6DQo+ICsg IEJOX2ZyZWUgKEJuWCk7DQo+ICsgIEJOX2ZyZWUgKEJuWSk7DQo+ICsgIEVDX1BPSU5UX2ZyZWUg KFBvaW50KTsNCj4gKyAgRUNfS0VZX2ZyZWUgKFBlZXJFY0tleSk7DQo+ICsgIHJldHVybiBSZXRW YWw7DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIv UGsvQ3J5cHRFY051bGwuYyBiL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYi9Qay9Dcnlw dEVjTnVsbC5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLmQ5 ZjEwMDRmNmMNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9DcnlwdG9Qa2cvTGlicmFyeS9CYXNl Q3J5cHRMaWIvUGsvQ3J5cHRFY051bGwuYw0KPiBAQCAtMCwwICsxLDQ5NiBAQA0KPiArLyoqIEBm aWxlDQo+ICsgIEVsbGlwdGljIEN1cnZlIGFuZCBFQ0RIIEFQSSBpbXBsZW1lbnRhdGlvbiBiYXNl ZCBvbiBPcGVuU1NMDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDIyLCBJbnRlbCBDb3Jwb3Jh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsNCj4gKyoqLw0KPiArDQo+ICsjaW5jbHVkZSA8 TGlicmFyeS9CYXNlQ3J5cHRMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+ DQo+ICsNCj4gKy8qKg0KPiArICBJbml0aWFsaXplIG5ldyBvcGFxdWUgRWNHcm91cCBvYmplY3Qu IFRoaXMgb2JqZWN0IHJlcHJlc2VudHMgYW4gRUMgY3VydmUgYW5kDQo+ICsgIGFuZCBpcyB1c2Vk IGZvciBjYWxjdWxhdGlvbiB3aXRoaW4gdGhpcyBncm91cC4gVGhpcyBvYmplY3Qgc2hvdWxkIGJl IGZyZWVkDQo+ICsgIHVzaW5nIEVjR3JvdXBGcmVlKCkgZnVuY3Rpb24uDQo+ICsNCj4gKyAgQHBh cmFtW2luXSAgQ3J5cHRvTmlkICAgSWRlbnRpZnlpbmcgbnVtYmVyIGZvciB0aGUgRUNDIGN1cnZl IChEZWZpbmVkIGluDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2VDcnlwdExpYi5o KS4NCj4gKw0KPiArICBAcmV0dmFsIEVjR3JvdXAgb2JqZWN0ICBPbiBzdWNjZXNzLg0KPiArICBA cmV0dmFsIE5VTEwgICAgICAgICAgICBPbiBmYWlsdXJlLg0KPiArKiovDQo+ICtWT0lEICoNCj4g K0VGSUFQSQ0KPiArRWNHcm91cEluaXQgKA0KPiArICBJTiBVSU5UTiAgQ3J5cHRvTmlkDQo+ICsg ICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiBOVUxMOw0KPiArfQ0K PiArDQo+ICsvKioNCj4gKyAgR2V0IEVDIGN1cnZlIHBhcmFtZXRlcnMuIFdoaWxlIGVsbGlwdGlj IGN1cnZlIGVxdWF0aW9uIGlzIFleMiBtb2QgUCA9IChYXjMgKyBBWCArIEIpIE1vZCBQLg0KPiAr ICBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBwcm92aWRlZCBCaWcgTnVtYmVyIG9iamVjdHMg IHRvIHRoZSBjb3JyZXNwb25kaW5nDQo+ICsgIHZhbHVlcy4gVGhlIGNhbGxlciBuZWVkcyB0byBt YWtlIHN1cmUgYWxsIHRoZSAib3V0IiBCaWdOdW1iZXIgcGFyYW1ldGVycw0KPiArICBhcmUgcHJv cGVybHkgaW5pdGlhbGl6ZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgRWNHcm91cCAgICBFQyBn cm91cCBvYmplY3QuDQo+ICsgIEBwYXJhbVtvdXRdIEJuUHJpbWUgICAgR3JvdXAgcHJpbWUgbnVt YmVyLg0KPiArICBAcGFyYW1bb3V0XSBCbkEgICAgICAgIEEgY29lZmZpY2llbnQuDQo+ICsgIEBw YXJhbVtvdXRdIEJuQiAgICAgICAgQiBjb2VmZmljaWVudC4uDQo+ICsgIEBwYXJhbVtpbl0gIEJu Q3R4ICAgICAgQk4gY29udGV4dC4NCj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24g c3VjY2Vzcy4NCj4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4NCj4gKyoqLw0K PiArQk9PTEVBTg0KPiArRUZJQVBJDQo+ICtFY0dyb3VwR2V0Q3VydmUgKA0KPiArICBJTiBDT05T VCBWT0lEICAqRWNHcm91cCwNCj4gKyAgT1VUIFZPSUQgICAgICAgKkJuUHJpbWUsDQo+ICsgIE9V VCBWT0lEICAgICAgICpCbkEsDQo+ICsgIE9VVCBWT0lEICAgICAgICpCbkIsDQo+ICsgIElOIFZP SUQgICAgICAgICpCbkN0eA0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiAr ICByZXR1cm4gRkFMU0U7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBHZXQgRUMgZ3JvdXAgb3Jk ZXIuDQo+ICsgIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgdGhlIHByb3ZpZGVkIEJpZyBOdW1iZXIg b2JqZWN0IHRvIHRoZSBjb3JyZXNwb25kaW5nDQo+ICsgIHZhbHVlLiBUaGUgY2FsbGVyIG5lZWRz IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSAib3V0IiBCaWdOdW1iZXIgcGFyYW1ldGVyDQo+ICsgIGlz IHByb3Blcmx5IGluaXRpYWxpemVkLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICBF QyBncm91cCBvYmplY3QuDQo+ICsgIEBwYXJhbVtvdXRdIEJuT3JkZXIgICBHcm91cCBwcmltZSBu dW1iZXIuDQo+ICsNCj4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+ICsg IEByZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndpc2UuDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4g K0VGSUFQSQ0KPiArRWNHcm91cEdldE9yZGVyICgNCj4gKyAgSU4gVk9JRCAgICpFY0dyb3VwLA0K PiArICBPVVQgVk9JRCAgKkJuT3JkZXINCj4gKyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNF KTsNCj4gKyAgcmV0dXJuIEZBTFNFOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgRnJlZSBwcmV2 aW91c2x5IGFsbG9jYXRlZCBFQyBncm91cCBvYmplY3QgdXNpbmcgRWNHcm91cEluaXQoKS4NCj4g Kw0KPiArICBAcGFyYW1baW5dICBFY0dyb3VwICAgRUMgZ3JvdXAgb2JqZWN0IHRvIGZyZWUuDQo+ ICsqKi8NCj4gK1ZPSUQNCj4gK0VGSUFQSQ0KPiArRWNHcm91cEZyZWUgKA0KPiArICBJTiBWT0lE ICAqRWNHcm91cA0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKyAgSW5pdGlhbGl6ZSBuZXcgb3BhcXVlIEVDIFBvaW50IG9iamVjdC4gVGhp cyBvYmplY3QgcmVwcmVzZW50cyBhbiBFQyBwb2ludA0KPiArICB3aXRoaW4gdGhlIGdpdmVuIEVD IGdyb3VwIChjdXJ2ZSkuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgRUMgR3JvdXAsIHByb3Blcmx5 IGluaXRpYWxpemVkIHVzaW5nIEVjR3JvdXBJbml0KCkuDQo+ICsNCj4gKyAgQHJldHZhbCBFQyBQ b2ludCBvYmplY3QgIE9uIHN1Y2Nlc3MuDQo+ICsgIEByZXR2YWwgTlVMTCAgICAgICAgICAgICBP biBmYWlsdXJlLg0KPiArKiovDQo+ICtWT0lEICoNCj4gK0VGSUFQSQ0KPiArRWNQb2ludEluaXQg KA0KPiArICBJTiBDT05TVCBWT0lEICAqRWNHcm91cA0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VS VCAoRkFMU0UpOw0KPiArICByZXR1cm4gTlVMTDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEZy ZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgRUMgUG9pbnQgb2JqZWN0IHVzaW5nIEVjUG9pbnRJbml0 KCkuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgRWNQb2ludCAgIEVDIFBvaW50IHRvIGZyZWUuDQo+ ICsgIEBwYXJhbVtpbl0gIENsZWFyICAgICBUUlVFIGlmZiB0aGUgbWVtb3J5IHNob3VsZCBiZSBj bGVhcmVkLg0KPiArKiovDQo+ICtWT0lEDQo+ICtFRklBUEkNCj4gK0VjUG9pbnREZUluaXQgKA0K PiArICBJTiBWT0lEICAgICAqRWNQb2ludCwNCj4gKyAgSU4gQk9PTEVBTiAgQ2xlYXINCj4gKyAg KQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEdl dCBFQyBwb2ludCBhZmZpbmUgKHgseSkgY29vcmRpbmF0ZXMuDQo+ICsgIFRoaXMgZnVuY3Rpb24g d2lsbCBzZXQgdGhlIHByb3ZpZGVkIEJpZyBOdW1iZXIgb2JqZWN0cyB0byB0aGUgY29ycmVzcG9u ZGluZw0KPiArICB2YWx1ZXMuIFRoZSBjYWxsZXIgbmVlZHMgdG8gbWFrZSBzdXJlIGFsbCB0aGUg Im91dCIgQmlnTnVtYmVyIHBhcmFtZXRlcnMNCj4gKyAgYXJlIHByb3Blcmx5IGluaXRpYWxpemVk Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICAgRUMgZ3JvdXAgb2JqZWN0Lg0KPiAr ICBAcGFyYW1baW5dICBFY1BvaW50ICAgIEVDIHBvaW50IG9iamVjdC4NCj4gKyAgQHBhcmFtW291 dF0gQm5YICAgICAgICBYIGNvb3JkaW5hdGUuDQo+ICsgIEBwYXJhbVtvdXRdIEJuWSAgICAgICAg WSBjb29yZGluYXRlLg0KPiArICBAcGFyYW1baW5dICBCbkN0eCAgICAgIEJOIGNvbnRleHQsIGNy ZWF0ZWQgd2l0aCBCaWdOdW1OZXdDb250ZXh0KCkuDQo+ICsNCj4gKyAgQHJldHZhbCBUUlVFICAg ICAgICAgIE9uIHN1Y2Nlc3MuDQo+ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndpc2Uu DQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0VGSUFQSQ0KPiArRWNQb2ludEdldEFmZmluZUNvb3Jk aW5hdGVzICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ICsgIElOIENPTlNUIFZP SUQgICpFY1BvaW50LA0KPiArICBPVVQgVk9JRCAgICAgICAqQm5YLA0KPiArICBPVVQgVk9JRCAg ICAgICAqQm5ZLA0KPiArICBJTiBWT0lEICAgICAgICAqQm5DdHgNCj4gKyAgKQ0KPiArew0KPiAr ICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIEZBTFNFOw0KPiArfQ0KPiArDQo+ICsvKioN Cj4gKyAgU2V0IEVDIHBvaW50IGFmZmluZSAoeCx5KSBjb29yZGluYXRlcy4NCj4gKw0KPiArICBA cGFyYW1baW5dICBFY0dyb3VwICAgIEVDIGdyb3VwIG9iamVjdC4NCj4gKyAgQHBhcmFtW2luXSAg RWNQb2ludCAgICBFQyBwb2ludCBvYmplY3QuDQo+ICsgIEBwYXJhbVtpbl0gIEJuWCAgICAgICAg WCBjb29yZGluYXRlLg0KPiArICBAcGFyYW1baW5dICBCblkgICAgICAgIFkgY29vcmRpbmF0ZS4N Cj4gKyAgQHBhcmFtW2luXSAgQm5DdHggICAgICBCTiBjb250ZXh0LCBjcmVhdGVkIHdpdGggQmln TnVtTmV3Q29udGV4dCgpLg0KPiArDQo+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBPbiBzdWNj ZXNzLg0KPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiArKiovDQo+ICtC T09MRUFODQo+ICtFRklBUEkNCj4gK0VjUG9pbnRTZXRBZmZpbmVDb29yZGluYXRlcyAoDQo+ICsg IElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiArICBJTiBWT0lEICAgICAgICAqRWNQb2ludCwN Cj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuWCwNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuWSwNCj4g KyAgSU4gVk9JRCAgICAgICAgKkJuQ3R4DQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxT RSk7DQo+ICsgIHJldHVybiBGQUxTRTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEVDIFBvaW50 IGFkZGl0aW9uLiBFY1BvaW50UmVzdWx0ID0gRWNQb2ludEEgKyBFY1BvaW50Qi4NCj4gKw0KPiAr ICBAcGFyYW1baW5dICBFY0dyb3VwICAgICAgICAgIEVDIGdyb3VwIG9iamVjdC4NCj4gKyAgQHBh cmFtW291dF0gRWNQb2ludFJlc3VsdCAgICBFQyBwb2ludCB0byBob2xkIHRoZSByZXN1bHQuIFRo ZSBwb2ludCBzaG91bGQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBwcm9w ZXJseSBpbml0aWFsaXplZC4NCj4gKyAgQHBhcmFtW2luXSAgRWNQb2ludEEgICAgICAgICBFQyBQ b2ludC4NCj4gKyAgQHBhcmFtW2luXSAgRWNQb2ludEIgICAgICAgICBFQyBQb2ludC4NCj4gKyAg QHBhcmFtW2luXSAgQm5DdHggICAgICAgICAgICBCTiBjb250ZXh0LCBjcmVhdGVkIHdpdGggQmln TnVtTmV3Q29udGV4dCgpLg0KPiArDQo+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBPbiBzdWNj ZXNzLg0KPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiArKiovDQo+ICtC T09MRUFODQo+ICtFRklBUEkNCj4gK0VjUG9pbnRBZGQgKA0KPiArICBJTiBDT05TVCBWT0lEICAq RWNHcm91cCwNCj4gKyAgT1VUIFZPSUQgICAgICAgKkVjUG9pbnRSZXN1bHQsDQo+ICsgIElOIENP TlNUIFZPSUQgICpFY1BvaW50QSwNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjUG9pbnRCLA0KPiAr ICBJTiBWT0lEICAgICAgICAqQm5DdHgNCj4gKyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNF KTsNCj4gKyAgcmV0dXJuIEZBTFNFOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVmFyaWFibGUg RUMgcG9pbnQgbXVsdGlwbGljYXRpb24uIEVjUG9pbnRSZXN1bHQgPSBFY1BvaW50ICogQm5QU2Nh bGFyLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICAgICAgICAgRUMgZ3JvdXAgb2Jq ZWN0Lg0KPiArICBAcGFyYW1bb3V0XSBFY1BvaW50UmVzdWx0ICAgIEVDIHBvaW50IHRvIGhvbGQg dGhlIHJlc3VsdC4gVGhlIHBvaW50IHNob3VsZA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJlIHByb3Blcmx5IGluaXRpYWxpemVkLg0KPiArICBAcGFyYW1baW5dICBFY1BvaW50 ICAgICAgICAgIEVDIFBvaW50Lg0KPiArICBAcGFyYW1baW5dICBCblBTY2FsYXIgICAgICAgIFAg U2NhbGFyLg0KPiArICBAcGFyYW1baW5dICBCbkN0eCAgICAgICAgICAgIEJOIGNvbnRleHQsIGNy ZWF0ZWQgd2l0aCBCaWdOdW1OZXdDb250ZXh0KCkuDQo+ICsNCj4gKyAgQHJldHZhbCBUUlVFICAg ICAgICAgIE9uIHN1Y2Nlc3MuDQo+ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndpc2Uu DQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0VGSUFQSQ0KPiArRWNQb2ludE11bCAoDQo+ICsgIElO IENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiArICBPVVQgVk9JRCAgICAgICAqRWNQb2ludFJlc3Vs dCwNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjUG9pbnQsDQo+ICsgIElOIENPTlNUIFZPSUQgICpC blBTY2FsYXIsDQo+ICsgIElOIFZPSUQgICAgICAgICpCbkN0eA0KPiArICApDQo+ICt7DQo+ICsg IEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gRkFMU0U7DQo+ICt9DQo+ICsNCj4gKy8qKg0K PiArICBDYWxjdWxhdGUgdGhlIGludmVyc2Ugb2YgdGhlIHN1cHBsaWVkIEVDIHBvaW50Lg0KPiAr DQo+ICsgIEBwYXJhbVtpbl0gICAgIEVjR3JvdXAgICBFQyBncm91cCBvYmplY3QuDQo+ICsgIEBw YXJhbVtpbixvdXRdIEVjUG9pbnQgICBFQyBwb2ludCB0byBpbnZlcnQuDQo+ICsgIEBwYXJhbVtp bl0gICAgIEJuQ3R4ICAgICBCTiBjb250ZXh0LCBjcmVhdGVkIHdpdGggQmlnTnVtTmV3Q29udGV4 dCgpLg0KPiArDQo+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBPbiBzdWNjZXNzLg0KPiArICBA cmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiArKiovDQo+ICtCT09MRUFODQo+ICtF RklBUEkNCj4gK0VjUG9pbnRJbnZlcnQgKA0KPiArICBJTiBDT05TVCBWT0lEICAqRWNHcm91cCwN Cj4gKyAgSU4gT1VUIFZPSUQgICAgKkVjUG9pbnQsDQo+ICsgIElOIFZPSUQgICAgICAgICpCbkN0 eA0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gRkFMU0U7 DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDaGVjayBpZiB0aGUgc3VwcGxpZWQgcG9pbnQgaXMg b24gRUMgY3VydmUuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgRWNHcm91cCAgIEVDIGdyb3VwIG9i amVjdC4NCj4gKyAgQHBhcmFtW2luXSAgRWNQb2ludCAgIEVDIHBvaW50IHRvIGNoZWNrLg0KPiAr ICBAcGFyYW1baW5dICBCbkN0eCAgICAgQk4gY29udGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5l d0NvbnRleHQoKS4NCj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24gY3VydmUuDQo+ ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndpc2UuDQo+ICsqKi8NCj4gK0JPT0xFQU4N Cj4gK0VGSUFQSQ0KPiArRWNQb2ludElzT25DdXJ2ZSAoDQo+ICsgIElOIENPTlNUIFZPSUQgICpF Y0dyb3VwLA0KPiArICBJTiBDT05TVCBWT0lEICAqRWNQb2ludCwNCj4gKyAgSU4gVk9JRCAgICAg ICAgKkJuQ3R4DQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVy biBGQUxTRTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENoZWNrIGlmIHRoZSBzdXBwbGllZCBw b2ludCBpcyBhdCBpbmZpbml0eS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBFY0dyb3VwICAgRUMg Z3JvdXAgb2JqZWN0Lg0KPiArICBAcGFyYW1baW5dICBFY1BvaW50ICAgRUMgcG9pbnQgdG8gY2hl Y2suDQo+ICsNCj4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgIEF0IGluZmluaXR5Lg0KPiArICBA cmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiArKiovDQo+ICtCT09MRUFODQo+ICtF RklBUEkNCj4gK0VjUG9pbnRJc0F0SW5maW5pdHkgKA0KPiArICBJTiBDT05TVCBWT0lEICAqRWNH cm91cCwNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjUG9pbnQNCj4gKyAgKQ0KPiArew0KPiArICBB U1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIEZBTFNFOw0KPiArfQ0KPiArDQo+ICsvKioNCj4g KyAgQ2hlY2sgaWYgRUMgcG9pbnRzIGFyZSBlcXVhbC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBF Y0dyb3VwICAgRUMgZ3JvdXAgb2JqZWN0Lg0KPiArICBAcGFyYW1baW5dICBFY1BvaW50QSAgRUMg cG9pbnQgQS4NCj4gKyAgQHBhcmFtW2luXSAgRWNQb2ludEIgIEVDIHBvaW50IEIuDQo+ICsgIEBw YXJhbVtpbl0gIEJuQ3R4ICAgICBCTiBjb250ZXh0LCBjcmVhdGVkIHdpdGggQmlnTnVtTmV3Q29u dGV4dCgpLg0KPiArDQo+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBBID09IEIuDQo+ICsgIEBy ZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndpc2UuDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0VG SUFQSQ0KPiArRWNQb2ludEVxdWFsICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ ICsgIElOIENPTlNUIFZPSUQgICpFY1BvaW50QSwNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjUG9p bnRCLA0KPiArICBJTiBWT0lEICAgICAgICAqQm5DdHgNCj4gKyAgKQ0KPiArew0KPiArICBBU1NF UlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIEZBTFNFOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAg U2V0IEVDIHBvaW50IGNvbXByZXNzZWQgY29vcmRpbmF0ZXMuIFBvaW50cyBjYW4gYmUgZGVzY3Jp YmVkIGluIHRlcm1zIG9mDQo+ICsgIHRoZWlyIGNvbXByZXNzZWQgY29vcmRpbmF0ZXMuIEZvciBh IHBvaW50ICh4LCB5KSwgZm9yIGFueSBnaXZlbiB2YWx1ZSBmb3IgeA0KPiArICBzdWNoIHRoYXQg dGhlIHBvaW50IGlzIG9uIHRoZSBjdXJ2ZSB0aGVyZSB3aWxsIG9ubHkgZXZlciBiZSB0d28gcG9z c2libGUNCj4gKyAgdmFsdWVzIGZvciB5LiBUaGVyZWZvcmUsIGEgcG9pbnQgY2FuIGJlIHNldCB1 c2luZyB0aGlzIGZ1bmN0aW9uIHdoZXJlIEJuWCBpcw0KPiArICB0aGUgeCBjb29yZGluYXRlIGFu ZCBZQml0IGlzIGEgdmFsdWUgMCBvciAxIHRvIGlkZW50aWZ5IHdoaWNoIG9mIHRoZSB0d28NCj4g KyAgcG9zc2libGUgdmFsdWVzIGZvciB5IHNob3VsZCBiZSB1c2VkLg0KPiArDQo+ICsgIEBwYXJh bVtpbl0gIEVjR3JvdXAgICAgRUMgZ3JvdXAgb2JqZWN0Lg0KPiArICBAcGFyYW1baW5dICBFY1Bv aW50ICAgIEVDIFBvaW50Lg0KPiArICBAcGFyYW1baW5dICBCblggICAgICAgIFggY29vcmRpbmF0 ZS4NCj4gKyAgQHBhcmFtW2luXSAgWUJpdCAgICAgICAwIG9yIDEgdG8gaWRlbnRpZnkgd2hpY2gg WSB2YWx1ZSBpcyB1c2VkLg0KPiArICBAcGFyYW1baW5dICBCbkN0eCAgICAgIEJOIGNvbnRleHQs IGNyZWF0ZWQgd2l0aCBCaWdOdW1OZXdDb250ZXh0KCkuDQo+ICsNCj4gKyAgQHJldHZhbCBUUlVF ICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndp c2UuDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0VGSUFQSQ0KPiArRWNQb2ludFNldENvbXByZXNz ZWRDb29yZGluYXRlcyAoDQo+ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiArICBJTiBW T0lEICAgICAgICAqRWNQb2ludCwNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuWCwNCj4gKyAgSU4g VUlOVDggICAgICAgWUJpdCwNCj4gKyAgSU4gVk9JRCAgICAgICAgKkJuQ3R4DQo+ICsgICkNCj4g K3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiBGQUxTRTsNCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgIEFsbG9jYXRlcyBhbmQgSW5pdGlhbGl6ZXMgb25lIEVsbGlwdGljIEN1cnZl IENvbnRleHQgZm9yIHN1YnNlcXVlbnQgdXNlDQo+ICsgIHdpdGggdGhlIE5JRC4NCj4gKw0KPiAr ICBAcGFyYW1baW5dICBOaWQgY2lwaGVyIE5JRA0KPiArICBAcmV0dXJuICAgICBQb2ludGVyIHRv IHRoZSBFbGxpcHRpYyBDdXJ2ZSBDb250ZXh0IHRoYXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuDQo+ ICsgICAgICAgICAgICAgIElmIHRoZSBhbGxvY2F0aW9ucyBmYWlscywgRWNOZXdCeU5pZCgpIHJl dHVybnMgTlVMTC4NCj4gKyoqLw0KPiArVk9JRCAqDQo+ICtFRklBUEkNCj4gK0VjTmV3QnlOaWQg KA0KPiArICBJTiBVSU5UTiAgTmlkDQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7 DQo+ICsgIHJldHVybiBOVUxMOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmVsZWFzZSB0aGUg c3BlY2lmaWVkIEVDIGNvbnRleHQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgRWNDb250ZXh0ICBQ b2ludGVyIHRvIHRoZSBFQyBjb250ZXh0IHRvIGJlIHJlbGVhc2VkLg0KPiArKiovDQo+ICtWT0lE DQo+ICtFRklBUEkNCj4gK0VjRnJlZSAoDQo+ICsgIElOICBWT0lEICAqRWNDb250ZXh0DQo+ICsg ICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBH ZW5lcmF0ZXMgRUMga2V5IGFuZCByZXR1cm5zIEVDIHB1YmxpYyBrZXkgKFgsIFkpLCBQbGVhc2Ug bm90ZSwgdGhpcyBmdW5jdGlvbiB1c2VzDQo+ICsgIHBzZXVkbyByYW5kb20gbnVtYmVyIGdlbmVy YXRvci4gVGhlIGNhbGxlciBtdXN0IG1ha2Ugc3VyZSBSYW5kb21TZWVkKCkNCj4gKyAgZnVuY3Rp b24gd2FzIHByb3Blcmx5IGNhbGxlZCBiZWZvcmUuDQo+ICsgIFRoZSBFYyBjb250ZXh0IHNob3Vs ZCBiZSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgYnkgRWNOZXdCeU5pZC4NCj4gKyAgVGhpcyBmdW5j dGlvbiBnZW5lcmF0ZXMgcmFuZG9tIHNlY3JldCwgYW5kIGNvbXB1dGVzIHRoZSBwdWJsaWMga2V5 IChYLCBZKSwgd2hpY2ggaXMNCj4gKyAgcmV0dXJuZWQgdmlhIHBhcmFtZXRlciBQdWJsaWMsIFB1 YmxpY1NpemUuDQo+ICsgIFggaXMgdGhlIGZpcnN0IGhhbGYgb2YgUHVibGljIHdpdGggc2l6ZSBi ZWluZyBQdWJsaWNTaXplIC8gMiwNCj4gKyAgWSBpcyB0aGUgc2Vjb25kIGhhbGYgb2YgUHVibGlj IHdpdGggc2l6ZSBiZWluZyBQdWJsaWNTaXplIC8gMi4NCj4gKyAgRUMgY29udGV4dCBpcyB1cGRh dGVkIGFjY29yZGluZ2x5Lg0KPiArICBJZiB0aGUgUHVibGljIGJ1ZmZlciBpcyB0b28gc21hbGwg dG8gaG9sZCB0aGUgcHVibGljIFgsIFksIEZBTFNFIGlzIHJldHVybmVkIGFuZA0KPiArICBQdWJs aWNTaXplIGlzIHNldCB0byB0aGUgcmVxdWlyZWQgYnVmZmVyIHNpemUgdG8gb2J0YWluIHRoZSBw dWJsaWMgWCwgWS4NCj4gKyAgRm9yIFAtMjU2LCB0aGUgUHVibGljU2l6ZSBpcyA2NC4gRmlyc3Qg MzItYnl0ZSBpcyBYLCBTZWNvbmQgMzItYnl0ZSBpcyBZLg0KPiArICBGb3IgUC0zODQsIHRoZSBQ dWJsaWNTaXplIGlzIDk2LiBGaXJzdCA0OC1ieXRlIGlzIFgsIFNlY29uZCA0OC1ieXRlIGlzIFku DQo+ICsgIEZvciBQLTUyMSwgdGhlIFB1YmxpY1NpemUgaXMgMTMyLiBGaXJzdCA2Ni1ieXRlIGlz IFgsIFNlY29uZCA2Ni1ieXRlIGlzIFkuDQo+ICsgIElmIEVjQ29udGV4dCBpcyBOVUxMLCB0aGVu IHJldHVybiBGQUxTRS4NCj4gKyAgSWYgUHVibGljU2l6ZSBpcyBOVUxMLCB0aGVuIHJldHVybiBG QUxTRS4NCj4gKyAgSWYgUHVibGljU2l6ZSBpcyBsYXJnZSBlbm91Z2ggYnV0IFB1YmxpYyBpcyBO VUxMLCB0aGVuIHJldHVybiBGQUxTRS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdICBFY0NvbnRleHQg ICAgICBQb2ludGVyIHRvIHRoZSBFQyBjb250ZXh0Lg0KPiArICBAcGFyYW1bb3V0XSAgICAgIFB1 YmxpY0tleSAgICAgIFBvaW50ZXIgdG8gdCBidWZmZXIgdG8gcmVjZWl2ZSBnZW5lcmF0ZWQgcHVi bGljIFgsWS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdICBQdWJsaWNLZXlTaXplICBPbiBpbnB1dCwg dGhlIHNpemUgb2YgUHVibGljIGJ1ZmZlciBpbiBieXRlcy4NCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBPbiBvdXRwdXQsIHRoZSBzaXplIG9mIGRhdGEgcmV0dXJuZWQgaW4g UHVibGljIGJ1ZmZlciBpbiBieXRlcy4NCj4gKyAgQHJldHZhbCBUUlVFICAgRUMgcHVibGljIFgs WSBnZW5lcmF0aW9uIHN1Y2NlZWRlZC4NCj4gKyAgQHJldHZhbCBGQUxTRSAgRUMgcHVibGljIFgs WSBnZW5lcmF0aW9uIGZhaWxlZC4NCj4gKyAgQHJldHZhbCBGQUxTRSAgUHVibGljS2V5U2l6ZSBp cyBub3QgbGFyZ2UgZW5vdWdoLg0KPiArKiovDQo+ICtCT09MRUFODQo+ICtFRklBUEkNCj4gK0Vj R2VuZXJhdGVLZXkgKA0KPiArICBJTiBPVVQgIFZPSUQgICAqRWNDb250ZXh0LA0KPiArICBPVVQg ICAgIFVJTlQ4ICAqUHVibGljS2V5LA0KPiArICBJTiBPVVQgIFVJTlROICAqUHVibGljS2V5U2l6 ZQ0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gRkFMU0U7 DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBHZXRzIHRoZSBwdWJsaWMga2V5IGNvbXBvbmVudCBm cm9tIHRoZSBlc3RhYmxpc2hlZCBFQyBjb250ZXh0Lg0KPiArICBUaGUgRWMgY29udGV4dCBzaG91 bGQgYmUgY29ycmVjdGx5IGluaXRpYWxpemVkIGJ5IEVjTmV3QnlOaWQsIGFuZCBzdWNjZXNzZnVs bHkNCj4gKyAgZ2VuZXJhdGUga2V5IHBhaXIgZnJvbSBFY0dlbmVyYXRlS2V5KCkuDQo+ICsgIEZv ciBQLTI1NiwgdGhlIFB1YmxpY1NpemUgaXMgNjQuIEZpcnN0IDMyLWJ5dGUgaXMgWCwgU2Vjb25k IDMyLWJ5dGUgaXMgWS4NCj4gKyAgRm9yIFAtMzg0LCB0aGUgUHVibGljU2l6ZSBpcyA5Ni4gRmly c3QgNDgtYnl0ZSBpcyBYLCBTZWNvbmQgNDgtYnl0ZSBpcyBZLg0KPiArICBGb3IgUC01MjEsIHRo ZSBQdWJsaWNTaXplIGlzIDEzMi4gRmlyc3QgNjYtYnl0ZSBpcyBYLCBTZWNvbmQgNjYtYnl0ZSBp cyBZLg0KPiArICBAcGFyYW1baW4sIG91dF0gIEVjQ29udGV4dCAgICAgIFBvaW50ZXIgdG8gRUMg Y29udGV4dCBiZWluZyBzZXQuDQo+ICsgIEBwYXJhbVtvdXRdICAgICAgUHVibGljS2V5ICAgICAg UG9pbnRlciB0byB0IGJ1ZmZlciB0byByZWNlaXZlIGdlbmVyYXRlZCBwdWJsaWMgWCxZLg0KPiAr ICBAcGFyYW1baW4sIG91dF0gIFB1YmxpY0tleVNpemUgIE9uIGlucHV0LCB0aGUgc2l6ZSBvZiBQ dWJsaWMgYnVmZmVyIGluIGJ5dGVzLg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE9uIG91dHB1dCwgdGhlIHNpemUgb2YgZGF0YSByZXR1cm5lZCBpbiBQdWJsaWMgYnVmZmVy IGluIGJ5dGVzLg0KPiArICBAcmV0dmFsICBUUlVFICAgRUMga2V5IGNvbXBvbmVudCB3YXMgcmV0 cmlldmVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCAgRkFMU0UgIEludmFsaWQgRUMga2V5 IGNvbXBvbmVudC4NCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArRUZJQVBJDQo+ICtFY0dldFB1Yktl eSAoDQo+ICsgIElOIE9VVCAgVk9JRCAgICpFY0NvbnRleHQsDQo+ICsgIE9VVCAgICAgVUlOVDgg ICpQdWJsaWNLZXksDQo+ICsgIElOIE9VVCAgVUlOVE4gICpQdWJsaWNLZXlTaXplDQo+ICsgICkN Cj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiBGQUxTRTsNCj4gK30NCj4g Kw0KPiArLyoqDQo+ICsgIENvbXB1dGVzIGV4Y2hhbmdlZCBjb21tb24ga2V5Lg0KPiArICBHaXZl biBwZWVyJ3MgcHVibGljIGtleSAoWCwgWSksIHRoaXMgZnVuY3Rpb24gY29tcHV0ZXMgdGhlIGV4 Y2hhbmdlZCBjb21tb24ga2V5LA0KPiArICBiYXNlZCBvbiBpdHMgb3duIGNvbnRleHQgaW5jbHVk aW5nIHZhbHVlIG9mIGN1cnZlIHBhcmFtZXRlciBhbmQgcmFuZG9tIHNlY3JldC4NCj4gKyAgWCBp cyB0aGUgZmlyc3QgaGFsZiBvZiBQZWVyUHVibGljIHdpdGggc2l6ZSBiZWluZyBQZWVyUHVibGlj U2l6ZSAvIDIsDQo+ICsgIFkgaXMgdGhlIHNlY29uZCBoYWxmIG9mIFBlZXJQdWJsaWMgd2l0aCBz aXplIGJlaW5nIFBlZXJQdWJsaWNTaXplIC8gMi4NCj4gKyAgSWYgRWNDb250ZXh0IGlzIE5VTEws IHRoZW4gcmV0dXJuIEZBTFNFLg0KPiArICBJZiBQZWVyUHVibGljIGlzIE5VTEwsIHRoZW4gcmV0 dXJuIEZBTFNFLg0KPiArICBJZiBQZWVyUHVibGljU2l6ZSBpcyAwLCB0aGVuIHJldHVybiBGQUxT RS4NCj4gKyAgSWYgS2V5IGlzIE5VTEwsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiArICBJZiBLZXlT aXplIGlzIG5vdCBsYXJnZSBlbm91Z2gsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiArICBGb3IgUC0y NTYsIHRoZSBQZWVyUHVibGljU2l6ZSBpcyA2NC4gRmlyc3QgMzItYnl0ZSBpcyBYLCBTZWNvbmQg MzItYnl0ZSBpcyBZLg0KPiArICBGb3IgUC0zODQsIHRoZSBQZWVyUHVibGljU2l6ZSBpcyA5Ni4g Rmlyc3QgNDgtYnl0ZSBpcyBYLCBTZWNvbmQgNDgtYnl0ZSBpcyBZLg0KPiArICBGb3IgUC01MjEs IHRoZSBQZWVyUHVibGljU2l6ZSBpcyAxMzIuIEZpcnN0IDY2LWJ5dGUgaXMgWCwgU2Vjb25kIDY2 LWJ5dGUgaXMgWS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdICBFY0NvbnRleHQgICAgICAgICAgUG9p bnRlciB0byB0aGUgRUMgY29udGV4dC4NCj4gKyAgQHBhcmFtW2luXSAgICAgICBQZWVyUHVibGlj ICAgICAgICAgUG9pbnRlciB0byB0aGUgcGVlcidzIHB1YmxpYyBYLFkuDQo+ICsgIEBwYXJhbVtp bl0gICAgICAgUGVlclB1YmxpY1NpemUgICAgIFNpemUgb2YgcGVlcidzIHB1YmxpYyBYLFkgaW4g Ynl0ZXMuDQo+ICsgIEBwYXJhbVtpbl0gICAgICAgQ29tcHJlc3NGbGFnICAgICAgIEZsYWcgb2Yg UGVlclB1YmxpYyBpcyBjb21wcmVzc2VkIG9yIG5vdC4NCj4gKyAgQHBhcmFtW291dF0gICAgICBL ZXkgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgYnVmZmVyIHRvIHJlY2VpdmUgZ2VuZXJh dGVkIGtleS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdICBLZXlTaXplICAgICAgICAgICAgT24gaW5w dXQsIHRoZSBzaXplIG9mIEtleSBidWZmZXIgaW4gYnl0ZXMuDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE9uIG91dHB1dCwgdGhlIHNpemUgb2YgZGF0YSByZXR1cm5l ZCBpbiBLZXkgYnVmZmVyIGluIGJ5dGVzLg0KPiArICBAcmV0dmFsIFRSVUUgICBFQyBleGNoYW5n ZWQga2V5IGdlbmVyYXRpb24gc3VjY2VlZGVkLg0KPiArICBAcmV0dmFsIEZBTFNFICBFQyBleGNo YW5nZWQga2V5IGdlbmVyYXRpb24gZmFpbGVkLg0KPiArICBAcmV0dmFsIEZBTFNFICBLZXlTaXpl IGlzIG5vdCBsYXJnZSBlbm91Z2guDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0VGSUFQSQ0KPiAr RWNEaENvbXB1dGVLZXkgKA0KPiArICBJTiBPVVQgIFZPSUQgICAgICAgICAqRWNDb250ZXh0LA0K PiArICBJTiAgICAgIENPTlNUIFVJTlQ4ICAqUGVlclB1YmxpYywNCj4gKyAgSU4gICAgICBVSU5U TiAgICAgICAgUGVlclB1YmxpY1NpemUsDQo+ICsgIElOICAgICAgQ09OU1QgSU5UMzIgICpDb21w cmVzc0ZsYWcsDQo+ICsgIE9VVCAgICAgVUlOVDggICAgICAgICpLZXksDQo+ICsgIElOIE9VVCAg VUlOVE4gICAgICAgICpLZXlTaXplDQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7 DQo+ICsgIHJldHVybiBGQUxTRTsNCj4gK30NCj4gZGlmZiAtLWdpdCBhL0NyeXB0b1BrZy9MaWJy YXJ5L0Jhc2VDcnlwdExpYi9TbW1DcnlwdExpYi5pbmYgYi9DcnlwdG9Qa2cvTGlicmFyeS9CYXNl Q3J5cHRMaWIvU21tQ3J5cHRMaWIuaW5mDQo+IGluZGV4IGNlNmE3ODlkZmQuLjRiYzMwNjM0ODUg MTAwNjQ0DQo+IC0tLSBhL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYi9TbW1DcnlwdExp Yi5pbmYNCj4gKysrIGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1NtbUNyeXB0TGli LmluZg0KPiBAQCAtNTksNiArNTksNyBAQA0KPiAgICBQay9DcnlwdFRzTnVsbC5jDQo+ICAgIFBr L0NyeXB0UnNhUHNzLmMNCj4gICAgUGsvQ3J5cHRSc2FQc3NTaWduTnVsbC5jDQo+ICsgIFBrL0Ny eXB0RWNOdWxsLmMNCj4gICAgUGVtL0NyeXB0UGVtLmMNCj4gICAgQm4vQ3J5cHRCbk51bGwuYw0K PiANCj4gZGlmZiAtLWdpdCBhL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYk51bGwvQmFz ZUNyeXB0TGliTnVsbC5pbmYgYi9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWJOdWxsL0Jh c2VDcnlwdExpYk51bGwuaW5mDQo+IGluZGV4IDM1NGYzZDgwYWEuLmUxYTU3ZWYwOWYgMTAwNjQ0 DQo+IC0tLSBhL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYk51bGwvQmFzZUNyeXB0TGli TnVsbC5pbmYNCj4gKysrIGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliTnVsbC9CYXNl Q3J5cHRMaWJOdWxsLmluZg0KPiBAQCAtNDksNiArNDksNyBAQA0KPiAgICBQay9DcnlwdFg1MDlO dWxsLmMNCj4gICAgUGsvQ3J5cHRBdXRoZW50aWNvZGVOdWxsLmMNCj4gICAgUGsvQ3J5cHRUc051 bGwuYw0KPiArICBQay9DcnlwdEVjTnVsbC5jDQo+ICAgIFBlbS9DcnlwdFBlbU51bGwuYw0KPiAg ICBSYW5kL0NyeXB0UmFuZE51bGwuYw0KPiAgICBQay9DcnlwdFJzYVBzc051bGwuYw0KPiBkaWZm IC0tZ2l0IGEvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliTnVsbC9Qay9DcnlwdEVjTnVs bC5jIGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliTnVsbC9Qay9DcnlwdEVjTnVsbC5j DQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLmQ5ZjEwMDRmNmMN Cj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWJO dWxsL1BrL0NyeXB0RWNOdWxsLmMNCj4gQEAgLTAsMCArMSw0OTYgQEANCj4gKy8qKiBAZmlsZQ0K PiArICBFbGxpcHRpYyBDdXJ2ZSBhbmQgRUNESCBBUEkgaW1wbGVtZW50YXRpb24gYmFzZWQgb24g T3BlblNTTA0KPiArDQo+ICsgIENvcHlyaWdodCAoYykgMjAyMiwgSW50ZWwgQ29ycG9yYXRpb24u IEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog QlNELTItQ2xhdXNlLVBhdGVudA0KPiArDQo+ICsqKi8NCj4gKw0KPiArI2luY2x1ZGUgPExpYnJh cnkvQmFzZUNyeXB0TGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KPiAr DQo+ICsvKioNCj4gKyAgSW5pdGlhbGl6ZSBuZXcgb3BhcXVlIEVjR3JvdXAgb2JqZWN0LiBUaGlz IG9iamVjdCByZXByZXNlbnRzIGFuIEVDIGN1cnZlIGFuZA0KPiArICBhbmQgaXMgdXNlZCBmb3Ig Y2FsY3VsYXRpb24gd2l0aGluIHRoaXMgZ3JvdXAuIFRoaXMgb2JqZWN0IHNob3VsZCBiZSBmcmVl ZA0KPiArICB1c2luZyBFY0dyb3VwRnJlZSgpIGZ1bmN0aW9uLg0KPiArDQo+ICsgIEBwYXJhbVtp bl0gIENyeXB0b05pZCAgIElkZW50aWZ5aW5nIG51bWJlciBmb3IgdGhlIEVDQyBjdXJ2ZSAoRGVm aW5lZCBpbg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNlQ3J5cHRMaWIuaCkuDQo+ ICsNCj4gKyAgQHJldHZhbCBFY0dyb3VwIG9iamVjdCAgT24gc3VjY2Vzcy4NCj4gKyAgQHJldHZh bCBOVUxMICAgICAgICAgICAgT24gZmFpbHVyZS4NCj4gKyoqLw0KPiArVk9JRCAqDQo+ICtFRklB UEkNCj4gK0VjR3JvdXBJbml0ICgNCj4gKyAgSU4gVUlOVE4gIENyeXB0b05pZA0KPiArICApDQo+ ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gTlVMTDsNCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgIEdldCBFQyBjdXJ2ZSBwYXJhbWV0ZXJzLiBXaGlsZSBlbGxpcHRpYyBjdXJ2 ZSBlcXVhdGlvbiBpcyBZXjIgbW9kIFAgPSAoWF4zICsgQVggKyBCKSBNb2QgUC4NCj4gKyAgVGhp cyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgcHJvdmlkZWQgQmlnIE51bWJlciBvYmplY3RzICB0byB0 aGUgY29ycmVzcG9uZGluZw0KPiArICB2YWx1ZXMuIFRoZSBjYWxsZXIgbmVlZHMgdG8gbWFrZSBz dXJlIGFsbCB0aGUgIm91dCIgQmlnTnVtYmVyIHBhcmFtZXRlcnMNCj4gKyAgYXJlIHByb3Blcmx5 IGluaXRpYWxpemVkLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICAgRUMgZ3JvdXAg b2JqZWN0Lg0KPiArICBAcGFyYW1bb3V0XSBCblByaW1lICAgIEdyb3VwIHByaW1lIG51bWJlci4N Cj4gKyAgQHBhcmFtW291dF0gQm5BICAgICAgICBBIGNvZWZmaWNpZW50Lg0KPiArICBAcGFyYW1b b3V0XSBCbkIgICAgICAgIEIgY29lZmZpY2llbnQuLg0KPiArICBAcGFyYW1baW5dICBCbkN0eCAg ICAgIEJOIGNvbnRleHQuDQo+ICsNCj4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgIE9uIHN1Y2Nl c3MuDQo+ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndpc2UuDQo+ICsqKi8NCj4gK0JP T0xFQU4NCj4gK0VGSUFQSQ0KPiArRWNHcm91cEdldEN1cnZlICgNCj4gKyAgSU4gQ09OU1QgVk9J RCAgKkVjR3JvdXAsDQo+ICsgIE9VVCBWT0lEICAgICAgICpCblByaW1lLA0KPiArICBPVVQgVk9J RCAgICAgICAqQm5BLA0KPiArICBPVVQgVk9JRCAgICAgICAqQm5CLA0KPiArICBJTiBWT0lEICAg ICAgICAqQm5DdHgNCj4gKyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0 dXJuIEZBTFNFOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgR2V0IEVDIGdyb3VwIG9yZGVyLg0K PiArICBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBwcm92aWRlZCBCaWcgTnVtYmVyIG9iamVj dCB0byB0aGUgY29ycmVzcG9uZGluZw0KPiArICB2YWx1ZS4gVGhlIGNhbGxlciBuZWVkcyB0byBt YWtlIHN1cmUgdGhhdCB0aGUgIm91dCIgQmlnTnVtYmVyIHBhcmFtZXRlcg0KPiArICBpcyBwcm9w ZXJseSBpbml0aWFsaXplZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBFY0dyb3VwICAgRUMgZ3Jv dXAgb2JqZWN0Lg0KPiArICBAcGFyYW1bb3V0XSBCbk9yZGVyICAgR3JvdXAgcHJpbWUgbnVtYmVy Lg0KPiArDQo+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBPbiBzdWNjZXNzLg0KPiArICBAcmV0 dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiArKiovDQo+ICtCT09MRUFODQo+ICtFRklB UEkNCj4gK0VjR3JvdXBHZXRPcmRlciAoDQo+ICsgIElOIFZPSUQgICAqRWNHcm91cCwNCj4gKyAg T1VUIFZPSUQgICpCbk9yZGVyDQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ ICsgIHJldHVybiBGQUxTRTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEZyZWUgcHJldmlvdXNs eSBhbGxvY2F0ZWQgRUMgZ3JvdXAgb2JqZWN0IHVzaW5nIEVjR3JvdXBJbml0KCkuDQo+ICsNCj4g KyAgQHBhcmFtW2luXSAgRWNHcm91cCAgIEVDIGdyb3VwIG9iamVjdCB0byBmcmVlLg0KPiArKiov DQo+ICtWT0lEDQo+ICtFRklBUEkNCj4gK0VjR3JvdXBGcmVlICgNCj4gKyAgSU4gVk9JRCAgKkVj R3JvdXANCj4gKyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gK30NCj4gKw0KPiAr LyoqDQo+ICsgIEluaXRpYWxpemUgbmV3IG9wYXF1ZSBFQyBQb2ludCBvYmplY3QuIFRoaXMgb2Jq ZWN0IHJlcHJlc2VudHMgYW4gRUMgcG9pbnQNCj4gKyAgd2l0aGluIHRoZSBnaXZlbiBFQyBncm91 cCAoY3VydmUpLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIEVDIEdyb3VwLCBwcm9wZXJseSBpbml0 aWFsaXplZCB1c2luZyBFY0dyb3VwSW5pdCgpLg0KPiArDQo+ICsgIEByZXR2YWwgRUMgUG9pbnQg b2JqZWN0ICBPbiBzdWNjZXNzLg0KPiArICBAcmV0dmFsIE5VTEwgICAgICAgICAgICAgT24gZmFp bHVyZS4NCj4gKyoqLw0KPiArVk9JRCAqDQo+ICtFRklBUEkNCj4gK0VjUG9pbnRJbml0ICgNCj4g KyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXANCj4gKyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEZB TFNFKTsNCj4gKyAgcmV0dXJuIE5VTEw7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBGcmVlIHBy ZXZpb3VzbHkgYWxsb2NhdGVkIEVDIFBvaW50IG9iamVjdCB1c2luZyBFY1BvaW50SW5pdCgpLg0K PiArDQo+ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnQgICBFQyBQb2ludCB0byBmcmVlLg0KPiArICBA cGFyYW1baW5dICBDbGVhciAgICAgVFJVRSBpZmYgdGhlIG1lbW9yeSBzaG91bGQgYmUgY2xlYXJl ZC4NCj4gKyoqLw0KPiArVk9JRA0KPiArRUZJQVBJDQo+ICtFY1BvaW50RGVJbml0ICgNCj4gKyAg SU4gVk9JRCAgICAgKkVjUG9pbnQsDQo+ICsgIElOIEJPT0xFQU4gIENsZWFyDQo+ICsgICkNCj4g K3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBHZXQgRUMg cG9pbnQgYWZmaW5lICh4LHkpIGNvb3JkaW5hdGVzLg0KPiArICBUaGlzIGZ1bmN0aW9uIHdpbGwg c2V0IHRoZSBwcm92aWRlZCBCaWcgTnVtYmVyIG9iamVjdHMgdG8gdGhlIGNvcnJlc3BvbmRpbmcN Cj4gKyAgdmFsdWVzLiBUaGUgY2FsbGVyIG5lZWRzIHRvIG1ha2Ugc3VyZSBhbGwgdGhlICJvdXQi IEJpZ051bWJlciBwYXJhbWV0ZXJzDQo+ICsgIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4NCj4g Kw0KPiArICBAcGFyYW1baW5dICBFY0dyb3VwICAgIEVDIGdyb3VwIG9iamVjdC4NCj4gKyAgQHBh cmFtW2luXSAgRWNQb2ludCAgICBFQyBwb2ludCBvYmplY3QuDQo+ICsgIEBwYXJhbVtvdXRdIEJu WCAgICAgICAgWCBjb29yZGluYXRlLg0KPiArICBAcGFyYW1bb3V0XSBCblkgICAgICAgIFkgY29v cmRpbmF0ZS4NCj4gKyAgQHBhcmFtW2luXSAgQm5DdHggICAgICBCTiBjb250ZXh0LCBjcmVhdGVk IHdpdGggQmlnTnVtTmV3Q29udGV4dCgpLg0KPiArDQo+ICsgIEByZXR2YWwgVFJVRSAgICAgICAg ICBPbiBzdWNjZXNzLg0KPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiAr KiovDQo+ICtCT09MRUFODQo+ICtFRklBUEkNCj4gK0VjUG9pbnRHZXRBZmZpbmVDb29yZGluYXRl cyAoDQo+ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiArICBJTiBDT05TVCBWT0lEICAq RWNQb2ludCwNCj4gKyAgT1VUIFZPSUQgICAgICAgKkJuWCwNCj4gKyAgT1VUIFZPSUQgICAgICAg KkJuWSwNCj4gKyAgSU4gVk9JRCAgICAgICAgKkJuQ3R4DQo+ICsgICkNCj4gK3sNCj4gKyAgQVNT RVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiBGQUxTRTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsg IFNldCBFQyBwb2ludCBhZmZpbmUgKHgseSkgY29vcmRpbmF0ZXMuDQo+ICsNCj4gKyAgQHBhcmFt W2luXSAgRWNHcm91cCAgICBFQyBncm91cCBvYmplY3QuDQo+ICsgIEBwYXJhbVtpbl0gIEVjUG9p bnQgICAgRUMgcG9pbnQgb2JqZWN0Lg0KPiArICBAcGFyYW1baW5dICBCblggICAgICAgIFggY29v cmRpbmF0ZS4NCj4gKyAgQHBhcmFtW2luXSAgQm5ZICAgICAgICBZIGNvb3JkaW5hdGUuDQo+ICsg IEBwYXJhbVtpbl0gIEJuQ3R4ICAgICAgQk4gY29udGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5l d0NvbnRleHQoKS4NCj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24gc3VjY2Vzcy4N Cj4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4NCj4gKyoqLw0KPiArQk9PTEVB Tg0KPiArRUZJQVBJDQo+ICtFY1BvaW50U2V0QWZmaW5lQ29vcmRpbmF0ZXMgKA0KPiArICBJTiBD T05TVCBWT0lEICAqRWNHcm91cCwNCj4gKyAgSU4gVk9JRCAgICAgICAgKkVjUG9pbnQsDQo+ICsg IElOIENPTlNUIFZPSUQgICpCblgsDQo+ICsgIElOIENPTlNUIFZPSUQgICpCblksDQo+ICsgIElO IFZPSUQgICAgICAgICpCbkN0eA0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0K PiArICByZXR1cm4gRkFMU0U7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBFQyBQb2ludCBhZGRp dGlvbi4gRWNQb2ludFJlc3VsdCA9IEVjUG9pbnRBICsgRWNQb2ludEIuDQo+ICsNCj4gKyAgQHBh cmFtW2luXSAgRWNHcm91cCAgICAgICAgICBFQyBncm91cCBvYmplY3QuDQo+ICsgIEBwYXJhbVtv dXRdIEVjUG9pbnRSZXN1bHQgICAgRUMgcG9pbnQgdG8gaG9sZCB0aGUgcmVzdWx0LiBUaGUgcG9p bnQgc2hvdWxkDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgcHJvcGVybHkg aW5pdGlhbGl6ZWQuDQo+ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnRBICAgICAgICAgRUMgUG9pbnQu DQo+ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnRCICAgICAgICAgRUMgUG9pbnQuDQo+ICsgIEBwYXJh bVtpbl0gIEJuQ3R4ICAgICAgICAgICAgQk4gY29udGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5l d0NvbnRleHQoKS4NCj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24gc3VjY2Vzcy4N Cj4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4NCj4gKyoqLw0KPiArQk9PTEVB Tg0KPiArRUZJQVBJDQo+ICtFY1BvaW50QWRkICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3Jv dXAsDQo+ICsgIE9VVCBWT0lEICAgICAgICpFY1BvaW50UmVzdWx0LA0KPiArICBJTiBDT05TVCBW T0lEICAqRWNQb2ludEEsDQo+ICsgIElOIENPTlNUIFZPSUQgICpFY1BvaW50QiwNCj4gKyAgSU4g Vk9JRCAgICAgICAgKkJuQ3R4DQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ ICsgIHJldHVybiBGQUxTRTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFZhcmlhYmxlIEVDIHBv aW50IG11bHRpcGxpY2F0aW9uLiBFY1BvaW50UmVzdWx0ID0gRWNQb2ludCAqIEJuUFNjYWxhci4N Cj4gKw0KPiArICBAcGFyYW1baW5dICBFY0dyb3VwICAgICAgICAgIEVDIGdyb3VwIG9iamVjdC4N Cj4gKyAgQHBhcmFtW291dF0gRWNQb2ludFJlc3VsdCAgICBFQyBwb2ludCB0byBob2xkIHRoZSBy ZXN1bHQuIFRoZSBwb2ludCBzaG91bGQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBiZSBwcm9wZXJseSBpbml0aWFsaXplZC4NCj4gKyAgQHBhcmFtW2luXSAgRWNQb2ludCAgICAg ICAgICBFQyBQb2ludC4NCj4gKyAgQHBhcmFtW2luXSAgQm5QU2NhbGFyICAgICAgICBQIFNjYWxh ci4NCj4gKyAgQHBhcmFtW2luXSAgQm5DdHggICAgICAgICAgICBCTiBjb250ZXh0LCBjcmVhdGVk IHdpdGggQmlnTnVtTmV3Q29udGV4dCgpLg0KPiArDQo+ICsgIEByZXR2YWwgVFJVRSAgICAgICAg ICBPbiBzdWNjZXNzLg0KPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiAr KiovDQo+ICtCT09MRUFODQo+ICtFRklBUEkNCj4gK0VjUG9pbnRNdWwgKA0KPiArICBJTiBDT05T VCBWT0lEICAqRWNHcm91cCwNCj4gKyAgT1VUIFZPSUQgICAgICAgKkVjUG9pbnRSZXN1bHQsDQo+ ICsgIElOIENPTlNUIFZPSUQgICpFY1BvaW50LA0KPiArICBJTiBDT05TVCBWT0lEICAqQm5QU2Nh bGFyLA0KPiArICBJTiBWT0lEICAgICAgICAqQm5DdHgNCj4gKyAgKQ0KPiArew0KPiArICBBU1NF UlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIEZBTFNFOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAg Q2FsY3VsYXRlIHRoZSBpbnZlcnNlIG9mIHRoZSBzdXBwbGllZCBFQyBwb2ludC4NCj4gKw0KPiAr ICBAcGFyYW1baW5dICAgICBFY0dyb3VwICAgRUMgZ3JvdXAgb2JqZWN0Lg0KPiArICBAcGFyYW1b aW4sb3V0XSBFY1BvaW50ICAgRUMgcG9pbnQgdG8gaW52ZXJ0Lg0KPiArICBAcGFyYW1baW5dICAg ICBCbkN0eCAgICAgQk4gY29udGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5ld0NvbnRleHQoKS4N Cj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gKyAgQHJldHZh bCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4NCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArRUZJQVBJ DQo+ICtFY1BvaW50SW52ZXJ0ICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ICsg IElOIE9VVCBWT0lEICAgICpFY1BvaW50LA0KPiArICBJTiBWT0lEICAgICAgICAqQm5DdHgNCj4g KyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIEZBTFNFOw0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAgQ2hlY2sgaWYgdGhlIHN1cHBsaWVkIHBvaW50IGlzIG9uIEVD IGN1cnZlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICBFQyBncm91cCBvYmplY3Qu DQo+ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnQgICBFQyBwb2ludCB0byBjaGVjay4NCj4gKyAgQHBh cmFtW2luXSAgQm5DdHggICAgIEJOIGNvbnRleHQsIGNyZWF0ZWQgd2l0aCBCaWdOdW1OZXdDb250 ZXh0KCkuDQo+ICsNCj4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgIE9uIGN1cnZlLg0KPiArICBA cmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiArKiovDQo+ICtCT09MRUFODQo+ICtF RklBUEkNCj4gK0VjUG9pbnRJc09uQ3VydmUgKA0KPiArICBJTiBDT05TVCBWT0lEICAqRWNHcm91 cCwNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjUG9pbnQsDQo+ICsgIElOIFZPSUQgICAgICAgICpC bkN0eA0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gRkFM U0U7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDaGVjayBpZiB0aGUgc3VwcGxpZWQgcG9pbnQg aXMgYXQgaW5maW5pdHkuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgRWNHcm91cCAgIEVDIGdyb3Vw IG9iamVjdC4NCj4gKyAgQHBhcmFtW2luXSAgRWNQb2ludCAgIEVDIHBvaW50IHRvIGNoZWNrLg0K PiArDQo+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBBdCBpbmZpbml0eS4NCj4gKyAgQHJldHZh bCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4NCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArRUZJQVBJ DQo+ICtFY1BvaW50SXNBdEluZmluaXR5ICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAs DQo+ICsgIElOIENPTlNUIFZPSUQgICpFY1BvaW50DQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJU IChGQUxTRSk7DQo+ICsgIHJldHVybiBGQUxTRTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENo ZWNrIGlmIEVDIHBvaW50cyBhcmUgZXF1YWwuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgRWNHcm91 cCAgIEVDIGdyb3VwIG9iamVjdC4NCj4gKyAgQHBhcmFtW2luXSAgRWNQb2ludEEgIEVDIHBvaW50 IEEuDQo+ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnRCICBFQyBwb2ludCBCLg0KPiArICBAcGFyYW1b aW5dICBCbkN0eCAgICAgQk4gY29udGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5ld0NvbnRleHQo KS4NCj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgQSA9PSBCLg0KPiArICBAcmV0dmFs IEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiArKiovDQo+ICtCT09MRUFODQo+ICtFRklBUEkN Cj4gK0VjUG9pbnRFcXVhbCAoDQo+ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiArICBJ TiBDT05TVCBWT0lEICAqRWNQb2ludEEsDQo+ICsgIElOIENPTlNUIFZPSUQgICpFY1BvaW50QiwN Cj4gKyAgSU4gVk9JRCAgICAgICAgKkJuQ3R4DQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChG QUxTRSk7DQo+ICsgIHJldHVybiBGQUxTRTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFNldCBF QyBwb2ludCBjb21wcmVzc2VkIGNvb3JkaW5hdGVzLiBQb2ludHMgY2FuIGJlIGRlc2NyaWJlZCBp biB0ZXJtcyBvZg0KPiArICB0aGVpciBjb21wcmVzc2VkIGNvb3JkaW5hdGVzLiBGb3IgYSBwb2lu dCAoeCwgeSksIGZvciBhbnkgZ2l2ZW4gdmFsdWUgZm9yIHgNCj4gKyAgc3VjaCB0aGF0IHRoZSBw b2ludCBpcyBvbiB0aGUgY3VydmUgdGhlcmUgd2lsbCBvbmx5IGV2ZXIgYmUgdHdvIHBvc3NpYmxl DQo+ICsgIHZhbHVlcyBmb3IgeS4gVGhlcmVmb3JlLCBhIHBvaW50IGNhbiBiZSBzZXQgdXNpbmcg dGhpcyBmdW5jdGlvbiB3aGVyZSBCblggaXMNCj4gKyAgdGhlIHggY29vcmRpbmF0ZSBhbmQgWUJp dCBpcyBhIHZhbHVlIDAgb3IgMSB0byBpZGVudGlmeSB3aGljaCBvZiB0aGUgdHdvDQo+ICsgIHBv c3NpYmxlIHZhbHVlcyBmb3IgeSBzaG91bGQgYmUgdXNlZC4NCj4gKw0KPiArICBAcGFyYW1baW5d ICBFY0dyb3VwICAgIEVDIGdyb3VwIG9iamVjdC4NCj4gKyAgQHBhcmFtW2luXSAgRWNQb2ludCAg ICBFQyBQb2ludC4NCj4gKyAgQHBhcmFtW2luXSAgQm5YICAgICAgICBYIGNvb3JkaW5hdGUuDQo+ ICsgIEBwYXJhbVtpbl0gIFlCaXQgICAgICAgMCBvciAxIHRvIGlkZW50aWZ5IHdoaWNoIFkgdmFs dWUgaXMgdXNlZC4NCj4gKyAgQHBhcmFtW2luXSAgQm5DdHggICAgICBCTiBjb250ZXh0LCBjcmVh dGVkIHdpdGggQmlnTnVtTmV3Q29udGV4dCgpLg0KPiArDQo+ICsgIEByZXR2YWwgVFJVRSAgICAg ICAgICBPbiBzdWNjZXNzLg0KPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0K PiArKiovDQo+ICtCT09MRUFODQo+ICtFRklBUEkNCj4gK0VjUG9pbnRTZXRDb21wcmVzc2VkQ29v cmRpbmF0ZXMgKA0KPiArICBJTiBDT05TVCBWT0lEICAqRWNHcm91cCwNCj4gKyAgSU4gVk9JRCAg ICAgICAgKkVjUG9pbnQsDQo+ICsgIElOIENPTlNUIFZPSUQgICpCblgsDQo+ICsgIElOIFVJTlQ4 ICAgICAgIFlCaXQsDQo+ICsgIElOIFZPSUQgICAgICAgICpCbkN0eA0KPiArICApDQo+ICt7DQo+ ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gRkFMU0U7DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICBBbGxvY2F0ZXMgYW5kIEluaXRpYWxpemVzIG9uZSBFbGxpcHRpYyBDdXJ2ZSBDb250 ZXh0IGZvciBzdWJzZXF1ZW50IHVzZQ0KPiArICB3aXRoIHRoZSBOSUQuDQo+ICsNCj4gKyAgQHBh cmFtW2luXSAgTmlkIGNpcGhlciBOSUQNCj4gKyAgQHJldHVybiAgICAgUG9pbnRlciB0byB0aGUg RWxsaXB0aWMgQ3VydmUgQ29udGV4dCB0aGF0IGhhcyBiZWVuIGluaXRpYWxpemVkLg0KPiArICAg ICAgICAgICAgICBJZiB0aGUgYWxsb2NhdGlvbnMgZmFpbHMsIEVjTmV3QnlOaWQoKSByZXR1cm5z IE5VTEwuDQo+ICsqKi8NCj4gK1ZPSUQgKg0KPiArRUZJQVBJDQo+ICtFY05ld0J5TmlkICgNCj4g KyAgSU4gVUlOVE4gIE5pZA0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiAr ICByZXR1cm4gTlVMTDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFJlbGVhc2UgdGhlIHNwZWNp ZmllZCBFQyBjb250ZXh0Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIEVjQ29udGV4dCAgUG9pbnRl ciB0byB0aGUgRUMgY29udGV4dCB0byBiZSByZWxlYXNlZC4NCj4gKyoqLw0KPiArVk9JRA0KPiAr RUZJQVBJDQo+ICtFY0ZyZWUgKA0KPiArICBJTiAgVk9JRCAgKkVjQ29udGV4dA0KPiArICApDQo+ ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgR2VuZXJh dGVzIEVDIGtleSBhbmQgcmV0dXJucyBFQyBwdWJsaWMga2V5IChYLCBZKSwgUGxlYXNlIG5vdGUs IHRoaXMgZnVuY3Rpb24gdXNlcw0KPiArICBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3Iu IFRoZSBjYWxsZXIgbXVzdCBtYWtlIHN1cmUgUmFuZG9tU2VlZCgpDQo+ICsgIGZ1bmN0aW9uIHdh cyBwcm9wZXJseSBjYWxsZWQgYmVmb3JlLg0KPiArICBUaGUgRWMgY29udGV4dCBzaG91bGQgYmUg Y29ycmVjdGx5IGluaXRpYWxpemVkIGJ5IEVjTmV3QnlOaWQuDQo+ICsgIFRoaXMgZnVuY3Rpb24g Z2VuZXJhdGVzIHJhbmRvbSBzZWNyZXQsIGFuZCBjb21wdXRlcyB0aGUgcHVibGljIGtleSAoWCwg WSksIHdoaWNoIGlzDQo+ICsgIHJldHVybmVkIHZpYSBwYXJhbWV0ZXIgUHVibGljLCBQdWJsaWNT aXplLg0KPiArICBYIGlzIHRoZSBmaXJzdCBoYWxmIG9mIFB1YmxpYyB3aXRoIHNpemUgYmVpbmcg UHVibGljU2l6ZSAvIDIsDQo+ICsgIFkgaXMgdGhlIHNlY29uZCBoYWxmIG9mIFB1YmxpYyB3aXRo IHNpemUgYmVpbmcgUHVibGljU2l6ZSAvIDIuDQo+ICsgIEVDIGNvbnRleHQgaXMgdXBkYXRlZCBh Y2NvcmRpbmdseS4NCj4gKyAgSWYgdGhlIFB1YmxpYyBidWZmZXIgaXMgdG9vIHNtYWxsIHRvIGhv bGQgdGhlIHB1YmxpYyBYLCBZLCBGQUxTRSBpcyByZXR1cm5lZCBhbmQNCj4gKyAgUHVibGljU2l6 ZSBpcyBzZXQgdG8gdGhlIHJlcXVpcmVkIGJ1ZmZlciBzaXplIHRvIG9idGFpbiB0aGUgcHVibGlj IFgsIFkuDQo+ICsgIEZvciBQLTI1NiwgdGhlIFB1YmxpY1NpemUgaXMgNjQuIEZpcnN0IDMyLWJ5 dGUgaXMgWCwgU2Vjb25kIDMyLWJ5dGUgaXMgWS4NCj4gKyAgRm9yIFAtMzg0LCB0aGUgUHVibGlj U2l6ZSBpcyA5Ni4gRmlyc3QgNDgtYnl0ZSBpcyBYLCBTZWNvbmQgNDgtYnl0ZSBpcyBZLg0KPiAr ICBGb3IgUC01MjEsIHRoZSBQdWJsaWNTaXplIGlzIDEzMi4gRmlyc3QgNjYtYnl0ZSBpcyBYLCBT ZWNvbmQgNjYtYnl0ZSBpcyBZLg0KPiArICBJZiBFY0NvbnRleHQgaXMgTlVMTCwgdGhlbiByZXR1 cm4gRkFMU0UuDQo+ICsgIElmIFB1YmxpY1NpemUgaXMgTlVMTCwgdGhlbiByZXR1cm4gRkFMU0Uu DQo+ICsgIElmIFB1YmxpY1NpemUgaXMgbGFyZ2UgZW5vdWdoIGJ1dCBQdWJsaWMgaXMgTlVMTCwg dGhlbiByZXR1cm4gRkFMU0UuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSAgRWNDb250ZXh0ICAgICAg UG9pbnRlciB0byB0aGUgRUMgY29udGV4dC4NCj4gKyAgQHBhcmFtW291dF0gICAgICBQdWJsaWNL ZXkgICAgICBQb2ludGVyIHRvIHQgYnVmZmVyIHRvIHJlY2VpdmUgZ2VuZXJhdGVkIHB1YmxpYyBY LFkuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSAgUHVibGljS2V5U2l6ZSAgT24gaW5wdXQsIHRoZSBz aXplIG9mIFB1YmxpYyBidWZmZXIgaW4gYnl0ZXMuDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgT24gb3V0cHV0LCB0aGUgc2l6ZSBvZiBkYXRhIHJldHVybmVkIGluIFB1Ymxp YyBidWZmZXIgaW4gYnl0ZXMuDQo+ICsgIEByZXR2YWwgVFJVRSAgIEVDIHB1YmxpYyBYLFkgZ2Vu ZXJhdGlvbiBzdWNjZWVkZWQuDQo+ICsgIEByZXR2YWwgRkFMU0UgIEVDIHB1YmxpYyBYLFkgZ2Vu ZXJhdGlvbiBmYWlsZWQuDQo+ICsgIEByZXR2YWwgRkFMU0UgIFB1YmxpY0tleVNpemUgaXMgbm90 IGxhcmdlIGVub3VnaC4NCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArRUZJQVBJDQo+ICtFY0dlbmVy YXRlS2V5ICgNCj4gKyAgSU4gT1VUICBWT0lEICAgKkVjQ29udGV4dCwNCj4gKyAgT1VUICAgICBV SU5UOCAgKlB1YmxpY0tleSwNCj4gKyAgSU4gT1VUICBVSU5UTiAgKlB1YmxpY0tleVNpemUNCj4g KyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIEZBTFNFOw0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAgR2V0cyB0aGUgcHVibGljIGtleSBjb21wb25lbnQgZnJvbSB0 aGUgZXN0YWJsaXNoZWQgRUMgY29udGV4dC4NCj4gKyAgVGhlIEVjIGNvbnRleHQgc2hvdWxkIGJl IGNvcnJlY3RseSBpbml0aWFsaXplZCBieSBFY05ld0J5TmlkLCBhbmQgc3VjY2Vzc2Z1bGx5DQo+ ICsgIGdlbmVyYXRlIGtleSBwYWlyIGZyb20gRWNHZW5lcmF0ZUtleSgpLg0KPiArICBGb3IgUC0y NTYsIHRoZSBQdWJsaWNTaXplIGlzIDY0LiBGaXJzdCAzMi1ieXRlIGlzIFgsIFNlY29uZCAzMi1i eXRlIGlzIFkuDQo+ICsgIEZvciBQLTM4NCwgdGhlIFB1YmxpY1NpemUgaXMgOTYuIEZpcnN0IDQ4 LWJ5dGUgaXMgWCwgU2Vjb25kIDQ4LWJ5dGUgaXMgWS4NCj4gKyAgRm9yIFAtNTIxLCB0aGUgUHVi bGljU2l6ZSBpcyAxMzIuIEZpcnN0IDY2LWJ5dGUgaXMgWCwgU2Vjb25kIDY2LWJ5dGUgaXMgWS4N Cj4gKyAgQHBhcmFtW2luLCBvdXRdICBFY0NvbnRleHQgICAgICBQb2ludGVyIHRvIEVDIGNvbnRl eHQgYmVpbmcgc2V0Lg0KPiArICBAcGFyYW1bb3V0XSAgICAgIFB1YmxpY0tleSAgICAgIFBvaW50 ZXIgdG8gdCBidWZmZXIgdG8gcmVjZWl2ZSBnZW5lcmF0ZWQgcHVibGljIFgsWS4NCj4gKyAgQHBh cmFtW2luLCBvdXRdICBQdWJsaWNLZXlTaXplICBPbiBpbnB1dCwgdGhlIHNpemUgb2YgUHVibGlj IGJ1ZmZlciBpbiBieXRlcy4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP biBvdXRwdXQsIHRoZSBzaXplIG9mIGRhdGEgcmV0dXJuZWQgaW4gUHVibGljIGJ1ZmZlciBpbiBi eXRlcy4NCj4gKyAgQHJldHZhbCAgVFJVRSAgIEVDIGtleSBjb21wb25lbnQgd2FzIHJldHJpZXZl ZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgIEZBTFNFICBJbnZhbGlkIEVDIGtleSBjb21w b25lbnQuDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0VGSUFQSQ0KPiArRWNHZXRQdWJLZXkgKA0K PiArICBJTiBPVVQgIFZPSUQgICAqRWNDb250ZXh0LA0KPiArICBPVVQgICAgIFVJTlQ4ICAqUHVi bGljS2V5LA0KPiArICBJTiBPVVQgIFVJTlROICAqUHVibGljS2V5U2l6ZQ0KPiArICApDQo+ICt7 DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gRkFMU0U7DQo+ICt9DQo+ICsNCj4g Ky8qKg0KPiArICBDb21wdXRlcyBleGNoYW5nZWQgY29tbW9uIGtleS4NCj4gKyAgR2l2ZW4gcGVl cidzIHB1YmxpYyBrZXkgKFgsIFkpLCB0aGlzIGZ1bmN0aW9uIGNvbXB1dGVzIHRoZSBleGNoYW5n ZWQgY29tbW9uIGtleSwNCj4gKyAgYmFzZWQgb24gaXRzIG93biBjb250ZXh0IGluY2x1ZGluZyB2 YWx1ZSBvZiBjdXJ2ZSBwYXJhbWV0ZXIgYW5kIHJhbmRvbSBzZWNyZXQuDQo+ICsgIFggaXMgdGhl IGZpcnN0IGhhbGYgb2YgUGVlclB1YmxpYyB3aXRoIHNpemUgYmVpbmcgUGVlclB1YmxpY1NpemUg LyAyLA0KPiArICBZIGlzIHRoZSBzZWNvbmQgaGFsZiBvZiBQZWVyUHVibGljIHdpdGggc2l6ZSBi ZWluZyBQZWVyUHVibGljU2l6ZSAvIDIuDQo+ICsgIElmIEVjQ29udGV4dCBpcyBOVUxMLCB0aGVu IHJldHVybiBGQUxTRS4NCj4gKyAgSWYgUGVlclB1YmxpYyBpcyBOVUxMLCB0aGVuIHJldHVybiBG QUxTRS4NCj4gKyAgSWYgUGVlclB1YmxpY1NpemUgaXMgMCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ ICsgIElmIEtleSBpcyBOVUxMLCB0aGVuIHJldHVybiBGQUxTRS4NCj4gKyAgSWYgS2V5U2l6ZSBp cyBub3QgbGFyZ2UgZW5vdWdoLCB0aGVuIHJldHVybiBGQUxTRS4NCj4gKyAgRm9yIFAtMjU2LCB0 aGUgUGVlclB1YmxpY1NpemUgaXMgNjQuIEZpcnN0IDMyLWJ5dGUgaXMgWCwgU2Vjb25kIDMyLWJ5 dGUgaXMgWS4NCj4gKyAgRm9yIFAtMzg0LCB0aGUgUGVlclB1YmxpY1NpemUgaXMgOTYuIEZpcnN0 IDQ4LWJ5dGUgaXMgWCwgU2Vjb25kIDQ4LWJ5dGUgaXMgWS4NCj4gKyAgRm9yIFAtNTIxLCB0aGUg UGVlclB1YmxpY1NpemUgaXMgMTMyLiBGaXJzdCA2Ni1ieXRlIGlzIFgsIFNlY29uZCA2Ni1ieXRl IGlzIFkuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSAgRWNDb250ZXh0ICAgICAgICAgIFBvaW50ZXIg dG8gdGhlIEVDIGNvbnRleHQuDQo+ICsgIEBwYXJhbVtpbl0gICAgICAgUGVlclB1YmxpYyAgICAg ICAgIFBvaW50ZXIgdG8gdGhlIHBlZXIncyBwdWJsaWMgWCxZLg0KPiArICBAcGFyYW1baW5dICAg ICAgIFBlZXJQdWJsaWNTaXplICAgICBTaXplIG9mIHBlZXIncyBwdWJsaWMgWCxZIGluIGJ5dGVz Lg0KPiArICBAcGFyYW1baW5dICAgICAgIENvbXByZXNzRmxhZyAgICAgICBGbGFnIG9mIFBlZXJQ dWJsaWMgaXMgY29tcHJlc3NlZCBvciBub3QuDQo+ICsgIEBwYXJhbVtvdXRdICAgICAgS2V5ICAg ICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0byByZWNlaXZlIGdlbmVyYXRlZCBr ZXkuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSAgS2V5U2l6ZSAgICAgICAgICAgIE9uIGlucHV0LCB0 aGUgc2l6ZSBvZiBLZXkgYnVmZmVyIGluIGJ5dGVzLg0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBPbiBvdXRwdXQsIHRoZSBzaXplIG9mIGRhdGEgcmV0dXJuZWQgaW4g S2V5IGJ1ZmZlciBpbiBieXRlcy4NCj4gKyAgQHJldHZhbCBUUlVFICAgRUMgZXhjaGFuZ2VkIGtl eSBnZW5lcmF0aW9uIHN1Y2NlZWRlZC4NCj4gKyAgQHJldHZhbCBGQUxTRSAgRUMgZXhjaGFuZ2Vk IGtleSBnZW5lcmF0aW9uIGZhaWxlZC4NCj4gKyAgQHJldHZhbCBGQUxTRSAgS2V5U2l6ZSBpcyBu b3QgbGFyZ2UgZW5vdWdoLg0KPiArKiovDQo+ICtCT09MRUFODQo+ICtFRklBUEkNCj4gK0VjRGhD b21wdXRlS2V5ICgNCj4gKyAgSU4gT1VUICBWT0lEICAgICAgICAgKkVjQ29udGV4dCwNCj4gKyAg SU4gICAgICBDT05TVCBVSU5UOCAgKlBlZXJQdWJsaWMsDQo+ICsgIElOICAgICAgVUlOVE4gICAg ICAgIFBlZXJQdWJsaWNTaXplLA0KPiArICBJTiAgICAgIENPTlNUIElOVDMyICAqQ29tcHJlc3NG bGFnLA0KPiArICBPVVQgICAgIFVJTlQ4ICAgICAgICAqS2V5LA0KPiArICBJTiBPVVQgIFVJTlRO ICAgICAgICAqS2V5U2l6ZQ0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiAr ICByZXR1cm4gRkFMU0U7DQo+ICt9DQo+IC0tDQo+IDIuMzEuMS53aW5kb3dzLjENCj4gDQo+IA0K PiANCj4gDQo+IA0KDQo=