From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04on2049.outbound.protection.outlook.com [40.107.8.49]) by sourceware.org (Postfix) with ESMTPS id 2689E3858D33 for ; Mon, 17 Jul 2023 10:56:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2689E3858D33 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9D9bfXoX2KxBSXfJ0lO7zfKKNZSDmSm3gEjXdqNVMj8=; b=H/OgI1wQW9pHGtRHtrgQF7V4iuxBHlnzm6bzt+zui3+N4IgLcxfgNNn0zSwGLb2HQmRfL53G5iu+bUojRL4R0TnxpJi6ywF5aarMYQOcxb7lZaIk2SMgxrcnBOfdqxuWvInMgs3iOjuulKu1+VvVNP8e4txbImIh0lZo3rnlS+w= Received: from DU2PR04CA0307.eurprd04.prod.outlook.com (2603:10a6:10:2b5::12) by AS8PR08MB10004.eurprd08.prod.outlook.com (2603:10a6:20b:63d::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6588.31; Mon, 17 Jul 2023 10:56:44 +0000 Received: from DBAEUR03FT054.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:2b5:cafe::6f) by DU2PR04CA0307.outlook.office365.com (2603:10a6:10:2b5::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6588.32 via Frontend Transport; Mon, 17 Jul 2023 10:56:43 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by DBAEUR03FT054.mail.protection.outlook.com (100.127.142.218) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6588.32 via Frontend Transport; Mon, 17 Jul 2023 10:56:43 +0000 Received: ("Tessian outbound 95df046a2e2c:v145"); Mon, 17 Jul 2023 10:56:43 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 4bcc541b62ee6b43 X-CR-MTA-TID: 64aa7808 Received: from 3407c99efb16.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id C67DDB48-36A6-449A-A298-5A908DBAB9C3.1; Mon, 17 Jul 2023 10:56:37 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 3407c99efb16.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Mon, 17 Jul 2023 10:56:37 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=It4Wf+vu85rm4ONkZAGBfgM5N6dpn9t6MSoqELU8SGNq23UPw9WlonaROmE34/ErEQD6OfEpAZSNYyfSFZgLyaYeHOO+IREhSMvc+cO/KU6TXgnJ62kU1ar+qXFW10oR2qFntQA+pSBt3/e33W81U3e2Cca9QDk8Fy4/c1LV58NzzOu09n0On2D5MB4QcHUZJTwo4Zuh8/eF+LIdL6kdQtkZ9m3+41vwUE6CwXNt9r8iSydKQJMMWm62Tew8/lfSVC+xzUjqAX7vZEBWZyxI0RW3pJX3QJRnuTsGeHPTqOOgWY+dsuWxyx4tMN3jyXYf2BpyGaOYMcBUKoBt79RKGw== 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=9D9bfXoX2KxBSXfJ0lO7zfKKNZSDmSm3gEjXdqNVMj8=; b=nVQBnRE8yEaTXSytoj48Bwh8bketdTq1Vfbc6slydOLobcNBIfssItbMskwsXSPA4TvlTosWa9q2S8MtN+WnBznvnfYPRTKz9Aa53u7b5y24a8q7UQ5j/szTb4Ll+47qfa/cKMuGMCePqyaf9JF7B1t2CDvi/8Xi5+JDdBpbaaEc4+hxbNHchh9YMAO4vElTSb05WV1wh8xkD7e5icUaG2kMIPP1MjDxxYQsRuiHgbGm0fXZLI4WlFpXozd+vDgvDHSQB3S6OVXQoUm4myKdajP+JVZbwGpgIofnvWGioy2IL69kdQ3gdEsWEymyjEeAt+7DEE9kXD77uG1Q11oogw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9D9bfXoX2KxBSXfJ0lO7zfKKNZSDmSm3gEjXdqNVMj8=; b=H/OgI1wQW9pHGtRHtrgQF7V4iuxBHlnzm6bzt+zui3+N4IgLcxfgNNn0zSwGLb2HQmRfL53G5iu+bUojRL4R0TnxpJi6ywF5aarMYQOcxb7lZaIk2SMgxrcnBOfdqxuWvInMgs3iOjuulKu1+VvVNP8e4txbImIh0lZo3rnlS+w= Received: from VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) by AS8PR08MB10223.eurprd08.prod.outlook.com (2603:10a6:20b:629::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6565.31; Mon, 17 Jul 2023 10:56:29 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::a85:6d3:5dd7:7d3]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::a85:6d3:5dd7:7d3%7]) with mapi id 15.20.6588.031; Mon, 17 Jul 2023 10:56:28 +0000 From: Tamar Christina To: Richard Biener CC: "gcc-patches@gcc.gnu.org" , nd , "jlaw@ventanamicro.com" Subject: RE: [PATCH 12/19]middle-end: implement loop peeling and IV updates for early break. Thread-Topic: [PATCH 12/19]middle-end: implement loop peeling and IV updates for early break. Thread-Index: AQHZqccHX5IjMK39iE64m4nr7rdxO6+4DBQAgAAQ3sCAAT9ugIAEUu5A Date: Mon, 17 Jul 2023 10:56:28 +0000 Message-ID: References: <2s4ro37o-pnn0-7750-4286-5982q36opn5@fhfr.qr> In-Reply-To: <2s4ro37o-pnn0-7750-4286-5982q36opn5@fhfr.qr> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: VI1PR08MB5325:EE_|AS8PR08MB10223:EE_|DBAEUR03FT054:EE_|AS8PR08MB10004:EE_ X-MS-Office365-Filtering-Correlation-Id: 133a9280-1ced-4219-68f7-08db86b48212 x-checkrecipientrouted: true nodisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: Ge4kDUMHx02VdmuqAIpPxItIkN+VcAbcMJYWLkRvKcbdgTVclZbPh0Ho/VtgeUFgRBZSVOv6ZgZgSd9FeCegN+UrYUxbChgneo/tdp/TRNVQkVn9DwAs31CilBA9RxdX18cxWYtUeFYVUEdLLXb+pHah7NfdvJ5o7zictGjI6yZ2v9niMg4puJMXcWc+mKQFPsiyUstruGx1cuC5MKBt8bVIKJOpJmMWp5+MhFDKh0usDWwPV1UKnQRcY/5e/M52TE6oe/fVo4z3HNhcB0Cgco4cGvnq9HhrD3MrCLB9YMTEetzsqtw0K52eqTdbBP0Ql7Ws36XcBKXTx+OzurCXTg6lOo4ZYXxOEtShHs3mX3OnSlF8v95+UwsHL0b6UtMRnv/ohT1cWKip18UBxUiNunZfAhx9qQQv5FLwa8bb1i0/YIv59Nq5y3As8lIhlCKSf/iCIrR1h5Fp/YUlhWU7LmWQ5MhJiL7xC8P5pVCDL6NB+s3Z1pmcEA+puqNwfwq0JN/nhggiYxDzXTUl76KvFyo7tp+oh+va1XW6KsA6KMFLIjw5RZrDu3w3fbowmVpk1zlgolDP9wt88bW+2WZp+0odSpCRkkwxS4fUVbVT9HKKy6sFcb5U8yZ6NV46k+vl X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR08MB5325.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(376002)(136003)(396003)(346002)(39860400002)(366004)(451199021)(7696005)(66899021)(478600001)(54906003)(71200400001)(122000001)(6916009)(86362001)(8936002)(52536014)(30864003)(5660300002)(2906002)(33656002)(8676002)(38070700005)(15650500001)(55016003)(4326008)(66476007)(64756008)(76116006)(66946007)(66446008)(316002)(38100700002)(66556008)(26005)(53546011)(9686003)(6506007)(41300700001)(83380400001)(186003)(559001)(579004);DIR:OUT;SFP:1101; Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB10223 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DBAEUR03FT054.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 11d371ec-893e-4edc-abef-08db86b478e6 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: p/c8oL5N7U/hR1z2LtBucOVlO1pLhFFfTDtY+N3T+jRA/anUQr9j1+D+t4sJxpaMlPXMvs5ADuOcXoqzbTlscxJRKdPhRrTM2njFg0LObPtYiI5yQNx8lV6LdjhK7UojcTtAaUmiC6r26NfvkhT3KTKPuDW8YD+uspbgGHrF9LiS1RQv1FGzup5KkgKmpDdcqh8sAwQ9PpFljcuEFXwXpkFSJSLndiaaWbBQ21tj9glQSSDRVCQRA1OgcoljkL2Zzw/6Wp/phaQaF5fPFcQVEDkW0Pdd9M+Vr1iVnS+NZWupXSaSNAEItj46fY3JClpqZbyMLRNF86ZxHOwZkS1A9oMpMttXJ2FwhdS+720AHN+EX5FFd7/nL3AtlGqJ8oGZHhrwvQSJ4Gz9XfcrphVhYkpCyO65IGQAILzz5AkHuptpFrip6QZ6GDaMIs1kTGcQ51shdnr3LZEwiiuY93gjVVALEVUR8z6J9UpIqDbdvEovtgxNqPQ1la5K7kXw0TXAyo8HFzoCcFn1j+xuZW+eZAQasVy9dJ2jT3SXTBP4zJAAS/EST3hhjiKErmkW2CwVESQqBfG/ZeFdnpUhAlKiPWile0kMaOa+eL1q25SrLurIoOlsDnkyMzZ/NZlst6/l4m1CWYxvI4NTGVgJDGzc6hiXk5P9PUBHzqQN7f0rO4H9/h2tpnJ/R8WUmXkIZ6kiknvo2oAFFqBTse/VctjNPNKnZr/Lb8zR/x7HwIhpM2TSRWsajZvUP75/8vw8CLwg X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(13230028)(4636009)(136003)(346002)(376002)(39860400002)(396003)(82310400008)(451199021)(36840700001)(40470700004)(46966006)(478600001)(82740400003)(356005)(47076005)(83380400001)(36860700001)(336012)(186003)(26005)(6506007)(66899021)(53546011)(40460700003)(9686003)(40480700001)(107886003)(55016003)(41300700001)(6862004)(8676002)(33656002)(4326008)(2906002)(30864003)(316002)(5660300002)(86362001)(7696005)(8936002)(54906003)(70586007)(70206006)(15650500001)(52536014)(81166007)(559001)(579004);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jul 2023 10:56:43.7380 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 133a9280-1ced-4219-68f7-08db86b48212 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: DBAEUR03FT054.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB10004 X-Spam-Status: No, score=-11.7 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SCC_5_SHORT_WORD_LINES,SPF_HELO_PASS,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogUmljaGFyZCBCaWVuZXIg PHJndWVudGhlckBzdXNlLmRlPg0KPiBTZW50OiBGcmlkYXksIEp1bHkgMTQsIDIwMjMgMjozNSBQ TQ0KPiBUbzogVGFtYXIgQ2hyaXN0aW5hIDxUYW1hci5DaHJpc3RpbmFAYXJtLmNvbT4NCj4gQ2M6 IGdjYy1wYXRjaGVzQGdjYy5nbnUub3JnOyBuZCA8bmRAYXJtLmNvbT47IGpsYXdAdmVudGFuYW1p Y3JvLmNvbQ0KPiBTdWJqZWN0OiBSRTogW1BBVENIIDEyLzE5XW1pZGRsZS1lbmQ6IGltcGxlbWVu dCBsb29wIHBlZWxpbmcgYW5kIElWDQo+IHVwZGF0ZXMgZm9yIGVhcmx5IGJyZWFrLg0KPiANCj4g T24gVGh1LCAxMyBKdWwgMjAyMywgVGFtYXIgQ2hyaXN0aW5hIHdyb3RlOg0KPiANCj4gPiA+IC0t LS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiBGcm9tOiBSaWNoYXJkIEJpZW5lciA8cmd1 ZW50aGVyQHN1c2UuZGU+DQo+ID4gPiBTZW50OiBUaHVyc2RheSwgSnVseSAxMywgMjAyMyA2OjMx IFBNDQo+ID4gPiBUbzogVGFtYXIgQ2hyaXN0aW5hIDxUYW1hci5DaHJpc3RpbmFAYXJtLmNvbT4N Cj4gPiA+IENjOiBnY2MtcGF0Y2hlc0BnY2MuZ251Lm9yZzsgbmQgPG5kQGFybS5jb20+Ow0KPiBq bGF3QHZlbnRhbmFtaWNyby5jb20NCj4gPiA+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggMTIvMTldbWlk ZGxlLWVuZDogaW1wbGVtZW50IGxvb3AgcGVlbGluZyBhbmQgSVYNCj4gPiA+IHVwZGF0ZXMgZm9y IGVhcmx5IGJyZWFrLg0KPiA+ID4NCj4gPiA+IE9uIFdlZCwgMjggSnVuIDIwMjMsIFRhbWFyIENo cmlzdGluYSB3cm90ZToNCj4gPiA+DQo+ID4gPiA+IEhpIEFsbCwNCj4gPiA+ID4NCj4gPiA+ID4g VGhpcyBwYXRjaCB1cGRhdGVzIHRoZSBwZWVsaW5nIGNvZGUgdG8gbWFpbnRhaW4gTENTU0EgZHVy aW5nIHBlZWxpbmcuDQo+ID4gPiA+IFRoZSByZXdyaXRlIGFsc28gbmF0dXJhbGx5IHRha2VzIGlu dG8gYWNjb3VudCBtdWx0aXBsZSBleGl0cyBhbmQgc28gaXQgZGlkbid0DQo+ID4gPiA+IG1ha2Ug c2Vuc2UgdG8gc3BsaXQgdGhlbSBvZmYuDQo+ID4gPiA+DQo+ID4gPiA+IEZvciB0aGUgcHVycG9z ZXMgb2YgcGVlbGluZyB0aGUgb25seSBjaGFuZ2UgZm9yIG11bHRpcGxlIGV4aXRzIGlzIHRoYXQg dGhlDQo+ID4gPiA+IHNlY29uZGFyeSBleGl0cyBhcmUgYWxsIHdpcmVkIHRvIHRoZSBzdGFydCBv ZiB0aGUgbmV3IGxvb3AgcHJlaGVhZGVyIHdoZW4NCj4gPiA+IGRvaW5nDQo+ID4gPiA+IGVwaWxv Z3VlIHBlZWxpbmcuDQo+ID4gPiA+DQo+ID4gPiA+IFdoZW4gZG9pbmcgcHJvbG9ndWUgcGVlbGlu ZyB0aGUgQ0ZHIGlzIGtlcHQgaW4gdGFjdC4NCj4gPiA+ID4NCj4gPiA+ID4gRm9yIGJvdGggZXBp bG9ndWUgYW5kIHByb2xvZ3VlIHBlZWxpbmcgd2Ugd2lyZSB0aHJvdWdoIGJldHdlZW4gdGhlDQo+ IHR3bw0KPiA+ID4gbG9vcHMgYW55DQo+ID4gPiA+IFBISSBub2RlcyB0aGF0IGVzY2FwZSB0aGUg Zmlyc3QgbG9vcCBpbnRvIHRoZSBzZWNvbmQgbG9vcCBpZiBmbG93X2xvb3BzIGlzDQo+ID4gPiA+ IHNwZWNpZmllZC4gIFRoZSByZWFzb24gZm9yIHRoaXMgY29uZGl0aW9uYWxpdHkgaXMgYmVjYXVz ZQ0KPiA+ID4gPiBzbHBlZWxfdHJlZV9kdXBsaWNhdGVfbG9vcF90b19lZGdlX2NmZyBpcyB1c2Vk IGluIHRoZSBjb21waWxlciBpbiAzIHdheXM6DQo+ID4gPiA+ICAgLSBwcm9sb2d1ZSBwZWVsaW5n DQo+ID4gPiA+ICAgLSBlcGlsb2d1ZSBwZWVsaW5nDQo+ID4gPiA+ICAgLSBsb29wIGRpc3RyaWJ1 dGlvbg0KPiA+ID4gPg0KPiA+ID4gPiBmb3IgdGhlIGxhc3QgY2FzZSB0aGUgbG9vcHMgc2hvdWxk IHJlbWFpbiBpbmRlcGVuZGVudCwgYW5kIHNvIG5vdCBiZQ0KPiA+ID4gY29ubmVjdGVkLg0KPiA+ ID4gPiBCZWNhdXNlIG9mIHRoaXMgcHJvcGFnYXRpb24gb2Ygb25seSB1c2VkIHBoaSBub2RlcyBn ZXRfY3VycmVudF9kZWYgY2FuDQo+IGJlDQo+ID4gPiB1c2VkDQo+ID4gPiA+IHRvIGVhc2lseSBm aW5kIHRoZSBwcmV2aW91cyBkZWZpbml0aW9ucy4gIEhvd2V2ZXIgbGl2ZSBzdGF0ZW1lbnRzIHRo YXQgYXJlDQo+ID4gPiA+IG5vdCB1c2VkIGluc2lkZSB0aGUgbG9vcCBpdHNlbGYgYXJlIG5vdCBw cm9wYWdhdGVkIChzaW5jZSBpZiB1bnVzZWQsIHRoZQ0KPiA+ID4gbW9tZW50DQo+ID4gPiA+IHdl IGFkZCB0aGUgZ3VhcmQgaW4gYmV0d2VlbiB0aGUgdHdvIGxvb3BzIHRoZSB2YWx1ZSBhY3Jvc3Mg dGhlIGJ5cGFzcw0KPiBlZGdlDQo+ID4gPiBjYW4NCj4gPiA+ID4gYmUgd3JvbmcgaWYgdGhlIGxv b3AgaGFzIGJlZW4gcGVlbGVkLikNCj4gPiA+ID4NCj4gPiA+ID4gVGhpcyBpcyBkZWFsdCB3aXRo IGVhc2lseSBlbm91Z2ggaW4gZmluZF9ndWFyZF9hcmcuDQo+ID4gPiA+DQo+ID4gPiA+IEZvciBt dWx0aXBsZSBleGl0cywgd2hpbGUgd2UgYXJlIGluIExDU1NBIGZvcm0sIGFuZCBoYXZlIGEgY29y cmVjdCBET00NCj4gdHJlZSwNCj4gPiA+IHRoZQ0KPiA+ID4gPiBtb21lbnQgd2UgYWRkIHRoZSBn dWFyZCBibG9jayB3ZSB3aWxsIGNoYW5nZSB0aGUgZG9taW5hdG9ycyBhZ2Fpbi4gIFRvDQo+ID4g PiBkZWFsIHdpdGgNCj4gPiA+ID4gdGhpcyBzbHBlZWxfdHJlZV9kdXBsaWNhdGVfbG9vcF90b19l ZGdlX2NmZyBjYW4gb3B0aW9uYWxseSByZXR1cm4gdGhlDQo+IGJsb2Nrcw0KPiA+ID4gdG8NCj4g PiA+ID4gdXBkYXRlIHdpdGhvdXQgaGF2aW5nIHRvIHJlY29tcHV0ZSB0aGUgbGlzdCBvZiBibG9j a3MgdG8gdXBkYXRlIGFnYWluLg0KPiA+ID4gPg0KPiA+ID4gPiBXaGVuIG11bHRpcGxlIGV4aXRz IGFuZCBkb2luZyBlcGlsb2d1ZSBwZWVsaW5nIHdlIHdpbGwgYWxzbyB0ZW1wb3JhcmlseQ0KPiBo YXZlDQo+ID4gPiBhbg0KPiA+ID4gPiBpbmNvcnJlY3QgVlVTRVMgY2hhaW4gZm9yIHRoZSBzZWNv bmRhcnkgZXhpdHMgYXMgaXQgYW50aWNpcGF0ZXMgdGhlIGZpbmFsDQo+IHJlc3VsdA0KPiA+ID4g PiBhZnRlciB0aGUgVkRFRnMgaGF2ZSBiZWVuIG1vdmVkLiAgVGhpcyB3aWxsIHRodXMgYmUgY29y cmVjdGVkIG9uY2UgdGhlDQo+IGNvZGUNCj4gPiA+ID4gbW90aW9uIGlzIGFwcGxpZWQuDQo+ID4g PiA+DQo+ID4gPiA+IExhc3RseSBieSBkb2luZyB0aGluZ3MgdGhpcyB3YXkgd2UgY2FuIHJlbW92 ZSB0aGUgaGVscGVyIGZ1bmN0aW9ucyB0aGF0DQo+ID4gPiA+IHByZXZpb3VzbHkgZGlkIGxvY2sg c3RlcCBpdGVyYXRpb25zIHRvIHVwZGF0ZSB0aGluZ3MgYXMgaXQgd2VudCBhbG9uZy4NCj4gPiA+ ID4NCj4gPiA+ID4gQm9vdHN0cmFwcGVkIFJlZ3Rlc3RlZCBvbiBhYXJjaDY0LW5vbmUtbGludXgt Z251IGFuZCBubyBpc3N1ZXMuDQo+ID4gPiA+DQo+ID4gPiA+IE9rIGZvciBtYXN0ZXI/DQo+ID4g Pg0KPiA+ID4gTm90IHN1cmUgaWYgSSBnZXQgdGhyb3VnaCBhbGwgb2YgdGhpcyBpbiBvbmUgZ28g LSBzbyBiZSBwcmVwYXJlZCB0aGF0DQo+ID4gPiB0aGUgcmVzdCBvZiB0aGUgcmV2aWV3IGZvbGxv d3MgYW5vdGhlciBkYXkuDQo+ID4NCj4gPiBObyB3b3JyaWVzLCBJIGFwcHJlY2lhdGUgdGhlIHJl dmlld3MhDQo+ID4gSnVzdCBnaXZpbmcgc29tZSBxdWljayByZXBsaWVzIGZvciB3aGVuIHlvdSBj b250aW51ZS4NCj4gDQo+IENvbnRpbnVlaW5nLg0KPiANCj4gPiA+DQo+ID4gPiA+IFRoYW5rcywN Cj4gPiA+ID4gVGFtYXINCj4gPiA+ID4NCj4gPiA+ID4gZ2NjL0NoYW5nZUxvZzoNCj4gPiA+ID4N Cj4gPiA+ID4gCSogdHJlZS1sb29wLWRpc3RyaWJ1dGlvbi5jYyAoY29weV9sb29wX2JlZm9yZSk6 IFBhc3MgZmxvd19sb29wcyA9DQo+ID4gPiBmYWxzZS4NCj4gPiA+ID4gCSogdHJlZS1zc2EtbG9v cC1uaXRlci5jYyAobG9vcF9vbmx5X2V4aXRfcCk6ICBGaXggYnVnIHdoZW4gZXhpdD09bnVsbC4N Cj4gPiA+ID4gCSogdHJlZS12ZWN0LWxvb3AtbWFuaXAuY2MgKGFkanVzdF9waGlfYW5kX2RlYnVn X3N0bXRzKTogQWRkDQo+ID4gPiBhZGRpdGlvbmFsDQo+ID4gPiA+IAlhc3NlcnQuDQo+ID4gPiA+ IAkodmVjdF9zZXRfbG9vcF9jb25kaXRpb25fbm9ybWFsKTogU2tpcCBtb2RpZnlpbmcgbG9vcCBJ ViBmb3IgbXVsdGlwbGUNCj4gPiA+ID4gCWV4aXRzLg0KPiA+ID4gPiAJKHNscGVlbF90cmVlX2R1 cGxpY2F0ZV9sb29wX3RvX2VkZ2VfY2ZnKTogU3VwcG9ydCBtdWx0aXBsZSBleGl0DQo+ID4gPiBw ZWVsaW5nLg0KPiA+ID4gPiAJKHNscGVlbF9jYW5fZHVwbGljYXRlX2xvb3BfcCk6IExpa2V3aXNl Lg0KPiA+ID4gPiAJKHZlY3RfdXBkYXRlX2l2c19hZnRlcl92ZWN0b3JpemVyKTogRG9uJ3QgZW50 ZXIgdGhpcy4uLg0KPiA+ID4gPiAJKHZlY3RfdXBkYXRlX2l2c19hZnRlcl9lYXJseV9icmVhayk6 IC4uLmJ1dCBpbnN0ZWFkIGVudGVyIGhlcmUuDQo+ID4gPiA+IAkoZmluZF9ndWFyZF9hcmcpOiBV cGRhdGUgZm9yIG5ldyBwZWVsaW5nIGNvZGUuDQo+ID4gPiA+IAkoc2xwZWVsX3VwZGF0ZV9waGlf bm9kZXNfZm9yX2xvb3BzKTogUmVtb3ZlLg0KPiA+ID4gPiAJKHNscGVlbF91cGRhdGVfcGhpX25v ZGVzX2Zvcl9ndWFyZDIpOiBSZW1vdmUgaGFyZGNvZGVkIGVkZ2UgMA0KPiA+ID4gY2hlY2tzLg0K PiA+ID4gPiAJKHNscGVlbF91cGRhdGVfcGhpX25vZGVzX2Zvcl9sY3NzYSk6IFJlbW92ZS4NCj4g PiA+ID4gCSh2ZWN0X2RvX3BlZWxpbmcpOiBGaXggVkYgZm9yIG11bHRpcGxlIGV4aXRzIGFuZCBm b3JjZSBlcGlsb2d1ZS4NCj4gPiA+ID4gCSogdHJlZS12ZWN0LWxvb3AuY2MgKF9sb29wX3ZlY19p bmZvOjpfbG9vcF92ZWNfaW5mbyk6IEluaXRpYWxpemUNCj4gPiA+ID4gCW5vbl9icmVha19jb250 cm9sX2Zsb3cgYW5kIGVhcmx5X2JyZWFrcy4NCj4gPiA+ID4gCSh2ZWN0X25lZWRfcGVlbGluZ19v cl9wYXJ0aWFsX3ZlY3RvcnNfcCk6IEZvcmNlIHBhcnRpYWwgdmVjdG9yIGlmDQo+ID4gPiA+IAlt dWx0aXBsZSBleGl0cyBhbmQgVkxBLg0KPiA+ID4gPiAJKHZlY3RfYW5hbHl6ZV9sb29wX2Zvcm0p OiBTdXBwb3J0IGlubmVyIGxvb3AgbXVsdGlwbGUgZXhpdHMuDQo+ID4gPiA+IAkodmVjdF9jcmVh dGVfbG9vcF92aW5mbyk6IFNldCBMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUy4NCj4gPiA+ID4gCSh2 ZWN0X2NyZWF0ZV9lcGlsb2dfZm9yX3JlZHVjdGlvbik6ICBVcGRhdGUgbGl2ZSBwaGkgbm9kZXMu DQo+ID4gPiA+IAkodmVjdG9yaXphYmxlX2xpdmVfb3BlcmF0aW9uKTogSWdub3JlIGxpdmUgb3Bl cmF0aW9ucyBpbiB2ZWN0b3IgbG9vcA0KPiA+ID4gPiAJd2hlbiBtdWx0aXBsZSBleGl0cy4NCj4g PiA+ID4gCSh2ZWN0X3RyYW5zZm9ybV9sb29wKTogRm9yY2UgdW5yb2xsaW5nIGZvciBWRiBsb29w cyBhbmQgbXVsdGlwbGUgZXhpdHMuDQo+ID4gPiA+IAkqIHRyZWUtdmVjdC1zdG10cy5jYyAodmVj dF9zdG10X3JlbGV2YW50X3ApOiBBbmFseXplIGN0cmwgc3RhdGVtZW50cy4NCj4gPiA+ID4gCSh2 ZWN0X21hcmtfc3RtdHNfdG9fYmVfdmVjdG9yaXplZCk6IENoZWNrIGZvciBub24tZXhpdCBjb250 cm9sIGZsb3cNCj4gPiA+IGFuZA0KPiA+ID4gPiAJYW5hbHl6ZSBnY29uZCBwYXJhbXMuDQo+ID4g PiA+IAkodmVjdF9hbmFseXplX3N0bXQpOiBTdXBwb3J0IGdjb25kLg0KPiA+ID4gPiAJKiB0cmVl LXZlY3Rvcml6ZXIuY2MgKHBhc3NfdmVjdG9yaXplOjpleGVjdXRlKTogU3VwcG9ydCBtdWx0aXBs ZSBleGl0cw0KPiA+ID4gPiAJaW4gUlBPIHBhc3MuDQo+ID4gPiA+IAkqIHRyZWUtdmVjdG9yaXpl ci5oIChlbnVtIHZlY3RfZGVmX3R5cGUpOiBBZGQgdmVjdF9lYXJseV9leGl0X2RlZi4NCj4gPiA+ ID4gCShMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUywgTE9PUF9WSU5GT19HRU5FUkFMX0NUUl9GTE9X KToNCj4gPiA+IE5ldy4NCj4gPiA+ID4gCShsb29wX3ZlY19pbmZvX2Zvcl9sb29wKTogQ2hhbmdl IHRvIGNvbnN0IGFuZCBzdGF0aWMuDQo+ID4gPiA+IAkoaXNfbG9vcF9oZWFkZXJfYmJfcCk6IERy b3AgYXNzZXJ0Lg0KPiA+ID4gPiAJKHNscGVlbF9jYW5fZHVwbGljYXRlX2xvb3BfcCk6IFVwZGF0 ZSBwcm90b3R5cGUuDQo+ID4gPiA+IAkoY2xhc3MgbG9vcCk6IEFkZCBlYXJseV9icmVha3MgYW5k IG5vbl9icmVha19jb250cm9sX2Zsb3cuDQo+ID4gPiA+DQo+ID4gPiA+IC0tLSBpbmxpbmUgY29w eSBvZiBwYXRjaCAtLQ0KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtbG9vcC1kaXN0cmli dXRpb24uY2MgYi9nY2MvdHJlZS1sb29wLWRpc3RyaWJ1dGlvbi5jYw0KPiA+ID4gPiBpbmRleA0K PiA+ID4NCj4gOTc4Nzk0OThkYjQ2ZGQzYzM0MTgxYWU5YWE2ZTU0NzYwMDRkZDViNS4uZDc5MGNl NWZmZmFiM2FhM2RmYzQwDQo+ID4gPiBkODMzYTk2ODMxNGE0NDQyYjllIDEwMDY0NA0KPiA+ID4g PiAtLS0gYS9nY2MvdHJlZS1sb29wLWRpc3RyaWJ1dGlvbi5jYw0KPiA+ID4gPiArKysgYi9nY2Mv dHJlZS1sb29wLWRpc3RyaWJ1dGlvbi5jYw0KPiA+ID4gPiBAQCAtOTQ4LDcgKzk0OCw3IEBAIGNv cHlfbG9vcF9iZWZvcmUgKGNsYXNzIGxvb3AgKmxvb3AsIGJvb2wNCj4gPiA+IHJlZGlyZWN0X2xj X3BoaV9kZWZzKQ0KPiA+ID4gPiAgICBlZGdlIHByZWhlYWRlciA9IGxvb3BfcHJlaGVhZGVyX2Vk Z2UgKGxvb3ApOw0KPiA+ID4gPg0KPiA+ID4gPiAgICBpbml0aWFsaXplX29yaWdpbmFsX2NvcHlf dGFibGVzICgpOw0KPiA+ID4gPiAtICByZXMgPSBzbHBlZWxfdHJlZV9kdXBsaWNhdGVfbG9vcF90 b19lZGdlX2NmZyAobG9vcCwgTlVMTCwgcHJlaGVhZGVyKTsNCj4gPiA+ID4gKyAgcmVzID0gc2xw ZWVsX3RyZWVfZHVwbGljYXRlX2xvb3BfdG9fZWRnZV9jZmcgKGxvb3AsIE5VTEwsIHByZWhlYWRl ciwNCj4gPiA+IGZhbHNlKTsNCj4gPiA+ID4gICAgZ2NjX2Fzc2VydCAocmVzICE9IE5VTEwpOw0K PiA+ID4gPg0KPiA+ID4gPiAgICAvKiBXaGVuIGEgbm90IGxhc3QgcGFydGl0aW9uIGlzIHN1cHBv c2VkIHRvIGtlZXAgdGhlIExDIFBISXMgY29tcHV0ZWQNCj4gPiA+ID4gZGlmZiAtLWdpdCBhL2dj Yy90cmVlLXNzYS1sb29wLW5pdGVyLmNjIGIvZ2NjL3RyZWUtc3NhLWxvb3Atbml0ZXIuY2MNCj4g PiA+ID4gaW5kZXgNCj4gPiA+DQo+IDVkMzk4YjY3ZTY4YzcwNzY3NjA4NTQxMTk1OTBmMThiMTlj NjIyYjYuLjc5Njg2ZjZjNDk0NWI3MTM5YmENCj4gPiA+IDM3NzMwMDQzMGMwNGI3YWVlZmU2YyAx MDA2NDQNCj4gPiA+ID4gLS0tIGEvZ2NjL3RyZWUtc3NhLWxvb3Atbml0ZXIuY2MNCj4gPiA+ID4g KysrIGIvZ2NjL3RyZWUtc3NhLWxvb3Atbml0ZXIuY2MNCj4gPiA+ID4gQEAgLTMwNzIsNyArMzA3 MiwxMiBAQCBsb29wX29ubHlfZXhpdF9wIChjb25zdCBjbGFzcyBsb29wICpsb29wLA0KPiA+ID4g YmFzaWNfYmxvY2sgKmJvZHksIGNvbnN0X2VkZ2UgZXhpdCkNCj4gPiA+ID4gICAgZ2ltcGxlX3N0 bXRfaXRlcmF0b3IgYnNpOw0KPiA+ID4gPiAgICB1bnNpZ25lZCBpOw0KPiA+ID4gPg0KPiA+ID4g PiAtICBpZiAoZXhpdCAhPSBzaW5nbGVfZXhpdCAobG9vcCkpDQo+ID4gPiA+ICsgIC8qIFdlIG5l ZWQgdG8gY2hlY2sgZm9yIGFsdGVybmF0aXZlIGV4aXRzIHNpbmNlIGV4aXQgY2FuIGJlIE5VTEwu ICAqLw0KPiA+ID4NCj4gPiA+IFlvdSBtZWFuIHdlIHBhc3MgaW4gZXhpdCA9PSBOVUxMIGluIHNv bWUgY2FzZXM/ICBJJ20gbm90IHN1cmUgd2hhdA0KPiA+ID4gdGhlIGRlc2lyZWQgYmVoYXZpb3Ig aW4gdGhhdCBjYXNlIGlzIC0gY2FuIHlvdSBwb2ludCBvdXQgdGhlDQo+ID4gPiBjYWxsZXJzIHlv dSBhcmUgZml4aW5nIGhlcmU/DQo+ID4gPg0KPiA+ID4gSSB0aGluayB3ZSBzaG91bGQgYWRkIGdj Y19hc3NlcnQgKGV4aXQgIT0gbnVsbHB0cikNCj4gPiA+DQo+ID4gPiA+ICAgIGZvciAoaSA9IDA7 IGkgPCBsb29wLT5udW1fbm9kZXM7IGkrKykNCj4gPiA+ID4gZGlmZiAtLWdpdCBhL2djYy90cmVl LXZlY3QtbG9vcC1tYW5pcC5jYyBiL2djYy90cmVlLXZlY3QtbG9vcC1tYW5pcC5jYw0KPiA+ID4g PiBpbmRleA0KPiA+ID4NCj4gNmI5M2ZiM2Y5YWY4ZjJiYmRmNWRlYzI4ZjAwMDkxNzdhYTUxNzFh Yi4uNTUwZDdmNDAwMDJjZjBiNThmOGE5Mg0KPiA+ID4gN2NiMTUwZWRkN2MyYWE5OTk5IDEwMDY0 NA0KPiA+ID4gPiAtLS0gYS9nY2MvdHJlZS12ZWN0LWxvb3AtbWFuaXAuY2MNCj4gPiA+ID4gKysr IGIvZ2NjL3RyZWUtdmVjdC1sb29wLW1hbmlwLmNjDQo+ID4gPiA+IEBAIC0yNTIsNiArMjUyLDkg QEAgYWRqdXN0X3BoaV9hbmRfZGVidWdfc3RtdHMgKGdpbXBsZQ0KPiAqdXBkYXRlX3BoaSwNCj4g PiA+IGVkZ2UgZSwgdHJlZSBuZXdfZGVmKQ0KPiA+ID4gPiAgew0KPiA+ID4gPiAgICB0cmVlIG9y aWdfZGVmID0gUEhJX0FSR19ERUZfRlJPTV9FREdFICh1cGRhdGVfcGhpLCBlKTsNCj4gPiA+ID4N Cj4gPiA+ID4gKyAgZ2NjX2Fzc2VydCAoVFJFRV9DT0RFIChvcmlnX2RlZikgIT0gU1NBX05BTUUN Cj4gPiA+ID4gKwkgICAgICB8fCBvcmlnX2RlZiAhPSBuZXdfZGVmKTsNCj4gPiA+ID4gKw0KPiA+ ID4gPiAgICBTRVRfUEhJX0FSR19ERUYgKHVwZGF0ZV9waGksIGUtPmRlc3RfaWR4LCBuZXdfZGVm KTsNCj4gPiA+ID4NCj4gPiA+ID4gICAgaWYgKE1BWV9IQVZFX0RFQlVHX0JJTkRfU1RNVFMpDQo+ ID4gPiA+IEBAIC0xMjkyLDcgKzEyOTUsOCBAQCB2ZWN0X3NldF9sb29wX2NvbmRpdGlvbl9ub3Jt YWwNCj4gKGxvb3BfdmVjX2luZm8NCj4gPiA+IGxvb3BfdmluZm8sDQo+ID4gPiA+ICAgIGdzaV9p bnNlcnRfYmVmb3JlICgmbG9vcF9jb25kX2dzaSwgY29uZF9zdG10LCBHU0lfU0FNRV9TVE1UKTsN Cj4gPiA+ID4NCj4gPiA+ID4gICAgLyogUmVjb3JkIHRoZSBudW1iZXIgb2YgbGF0Y2ggaXRlcmF0 aW9ucy4gICovDQo+ID4gPiA+IC0gIGlmIChsaW1pdCA9PSBuaXRlcnMpDQo+ID4gPiA+ICsgIGlm IChsaW1pdCA9PSBuaXRlcnMNCj4gPiA+ID4gKyAgICAgIHx8IExPT1BfVklORk9fRUFSTFlfQlJF QUtTIChsb29wX3ZpbmZvKSkNCj4gPiA+ID4gICAgICAvKiBDYXNlIEE6IHRoZSBsb29wIGl0ZXJh dGVzIE5JVEVSUyB0aW1lcy4gIFN1YnRyYWN0IG9uZSB0byBnZXQgdGhlDQo+ID4gPiA+ICAgICAg ICAgbGF0Y2ggY291bnQuICAqLw0KPiA+ID4gPiAgICAgIGxvb3AtPm5iX2l0ZXJhdGlvbnMgPSBm b2xkX2J1aWxkMiAoTUlOVVNfRVhQUiwgbml0ZXJzX3R5cGUsIG5pdGVycywNCj4gPiA+ID4gQEAg LTEzMDMsNyArMTMwNywxMyBAQCB2ZWN0X3NldF9sb29wX2NvbmRpdGlvbl9ub3JtYWwNCj4gPiA+ IChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+ID4gPiA+ICAgICAgbG9vcC0+bmJfaXRlcmF0 aW9ucyA9IGZvbGRfYnVpbGQyIChUUlVOQ19ESVZfRVhQUiwgbml0ZXJzX3R5cGUsDQo+ID4gPiA+ ICAJCQkJICAgICAgIGxpbWl0LCBzdGVwKTsNCj4gPiA+ID4NCj4gPiA+ID4gLSAgaWYgKGZpbmFs X2l2KQ0KPiA+ID4gPiArICAvKiBGb3IgbXVsdGlwbGUgZXhpdHMgd2UndmUgYWxyZWFkeSBtYWlu dGFpbmVkIExDU1NBIGZvcm0gYW5kIGhhbmRsZWQNCj4gPiA+ID4gKyAgICAgdGhlIHNjYWxhciBp dGVyYXRpb24gdXBkYXRlIGluIHRoZSBjb2RlIHRoYXQgZGVhbHMgd2l0aCB0aGUgbWVyZ2UNCj4g PiA+ID4gKyAgICAgYmxvY2sgYW5kIGl0cyB1cGRhdGVkIGd1YXJkLiAgSSBjb3VsZCBtb3ZlIHRo YXQgY29kZSBoZXJlIGluc3RlYWQNCj4gPiA+ID4gKyAgICAgb2YgaW4gdmVjdF91cGRhdGVfaXZz X2FmdGVyX2Vhcmx5X2JyZWFrIGJ1dCBJIGhhdmUgdG8gc3RpbGwgZGVhbA0KPiA+ID4gPiArICAg ICB3aXRoIHRoZSB1cGRhdGVzIHRvIHRoZSBjb3VudGVyIGBpYC4gIFNvIGZvciBub3cgSSdsbCBr ZWVwIHRoZW0NCj4gPiA+ID4gKyAgICAgdG9nZXRoZXIuICAqLw0KPiA+ID4gPiArICBpZiAoZmlu YWxfaXYgJiYgIUxPT1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29wX3ZpbmZvKSkNCj4gPiA+ID4g ICAgICB7DQo+ID4gPiA+ICAgICAgICBnYXNzaWduICphc3NpZ247DQo+ID4gPiA+ICAgICAgICBl ZGdlIGV4aXQgPSBMT09QX1ZJTkZPX0lWX0VYSVQgKGxvb3BfdmluZm8pOw0KPiA+ID4gPiBAQCAt MTUwOSwxMSArMTUxOSwxOSBAQCB2ZWNfaW5pdF9leGl0X2luZm8gKGNsYXNzIGxvb3AgKmxvb3Ap DQo+ID4gPiA+ICAgICBvbiBFIHdoaWNoIGlzIGVpdGhlciB0aGUgZW50cnkgb3IgZXhpdCBvZiBM T09QLiAgSWYgU0NBTEFSX0xPT1AgaXMNCj4gPiA+ID4gICAgIG5vbi1OVUxMLCBhc3N1bWUgTE9P UCBhbmQgU0NBTEFSX0xPT1AgYXJlIGVxdWl2YWxlbnQgYW5kIGNvcHkNCj4gdGhlDQo+ID4gPiA+ ICAgICBiYXNpYyBibG9ja3MgZnJvbSBTQ0FMQVJfTE9PUCBpbnN0ZWFkIG9mIExPT1AsIGJ1dCB0 byBlaXRoZXIgdGhlDQo+ID4gPiA+IC0gICBlbnRyeSBvciBleGl0IG9mIExPT1AuICAqLw0KPiA+ ID4gPiArICAgZW50cnkgb3IgZXhpdCBvZiBMT09QLiAgSWYgRkxPV19MT09QUyB0aGVuIGNvbm5l Y3QgTE9PUCB0bw0KPiA+ID4gU0NBTEFSX0xPT1AgYXMgYQ0KPiA+ID4gPiArICAgY29udGludWF0 aW9uLiAgVGhpcyBpcyBjb3JyZWN0IGZvciBjYXNlcyB3aGVyZSBvbmUgbG9vcCBjb250aW51ZXMg ZnJvbQ0KPiB0aGUNCj4gPiA+ID4gKyAgIG90aGVyIGxpa2UgaW4gdGhlIHZlY3Rvcml6ZXIsIGJ1 dCBub3QgdHJ1ZSBmb3IgdXNlcyBpbiBlLmcuIGxvb3ANCj4gZGlzdHJpYnV0aW9uDQo+ID4gPiA+ ICsgICB3aGVyZSB0aGUgbG9vcCBpcyBkdXBsaWNhdGVkIGFuZCB0aGVuIG1vZGlmaWVkLg0KPiA+ ID4gPiArDQo+ID4gPg0KPiA+ID4gYnV0IGZvciBsb29wIGRpc3RyaWJ1dGlvbiB0aGUgZmxvdyBh bHNvIGNvbnRpbnVlcz8gIEknbSBub3Qgc3VyZSB3aGF0IHlvdQ0KPiA+ID4gYXJlIHJlZmVyaW5n IHRvIGhlcmUuICBEbyB5b3UgYnkgY2hhbmNlIGhhdmUgYSBicmFuY2ggd2l0aCB0aGUgcGF0Y2hl cw0KPiA+ID4gaW5zdGFsbGVkPw0KPiA+DQo+ID4gWXVwLCB0aGV5J3JlIGF0IHJlZnMvdXNlcnMv dG5mY2hyaXMvaGVhZHMvZ2NjLTE0LWVhcmx5LWJyZWFrIGluIHRoZSByZXBvLg0KPiA+DQo+ID4g Pg0KPiA+ID4gPiArICAgSWYgVVBEQVRFRF9ET01TIGlzIG5vdCBOVUxMIGl0IGlzIHVwZGF0ZSB3 aXRoIHRoZSBsaXN0IG9mIGJhc2ljIGJsb2Nrcw0KPiA+ID4gd2hvbXMNCj4gPiA+ID4gKyAgIGRv bWluYXRvcnMgd2VyZSB1cGRhdGVkIGR1cmluZyB0aGUgcGVlbGluZy4gICovDQo+ID4gPiA+DQo+ ID4gPiA+ICBjbGFzcyBsb29wICoNCj4gPiA+ID4gIHNscGVlbF90cmVlX2R1cGxpY2F0ZV9sb29w X3RvX2VkZ2VfY2ZnIChjbGFzcyBsb29wICpsb29wLA0KPiA+ID4gPiAtCQkJCQljbGFzcyBsb29w ICpzY2FsYXJfbG9vcCwgZWRnZSBlKQ0KPiA+ID4gPiArCQkJCQljbGFzcyBsb29wICpzY2FsYXJf bG9vcCwgZWRnZSBlLA0KPiA+ID4gPiArCQkJCQlib29sIGZsb3dfbG9vcHMsDQo+ID4gPiA+ICsJ CQkJCXZlYzxiYXNpY19ibG9jaz4gKnVwZGF0ZWRfZG9tcykNCj4gPiA+ID4gIHsNCj4gPiA+ID4g ICAgY2xhc3MgbG9vcCAqbmV3X2xvb3A7DQo+ID4gPiA+ICAgIGJhc2ljX2Jsb2NrICpuZXdfYmJz LCAqYmJzLCAqcGJiczsNCj4gPiA+ID4gQEAgLTE2MDIsNiArMTYyMCwxOSBAQCBzbHBlZWxfdHJl ZV9kdXBsaWNhdGVfbG9vcF90b19lZGdlX2NmZw0KPiAoY2xhc3MNCj4gPiA+IGxvb3AgKmxvb3As DQo+ID4gPiA+ICAgIGZvciAodW5zaWduZWQgaSA9IChhdF9leGl0ID8gMCA6IDEpOyBpIDwgc2Nh bGFyX2xvb3AtPm51bV9ub2RlcyArIDE7IGkrKykNCj4gPiA+ID4gICAgICByZW5hbWVfdmFyaWFi bGVzX2luX2JiIChuZXdfYmJzW2ldLCBkdXBsaWNhdGVfb3V0ZXJfbG9vcCk7DQo+ID4gPiA+DQo+ ID4gPiA+ICsgIC8qIFJlbmFtZSB0aGUgZXhpdCB1c2VzLiAgKi8NCj4gPiA+ID4gKyAgZm9yIChl ZGdlIGV4aXQgOiBnZXRfbG9vcF9leGl0X2VkZ2VzIChuZXdfbG9vcCkpDQo+ID4gPiA+ICsgICAg Zm9yIChhdXRvIGdzaSA9IGdzaV9zdGFydF9waGlzIChleGl0LT5kZXN0KTsNCj4gPiA+ID4gKwkg IWdzaV9lbmRfcCAoZ3NpKTsgZ3NpX25leHQgKCZnc2kpKQ0KPiA+ID4gPiArICAgICAgew0KPiA+ ID4gPiArCXRyZWUgb3JpZ19kZWYgPSBQSElfQVJHX0RFRl9GUk9NX0VER0UgKGdzaS5waGkgKCks IGV4aXQpOw0KPiA+ID4gPiArCXJlbmFtZV91c2Vfb3AgKFBISV9BUkdfREVGX1BUUl9GUk9NX0VE R0UgKGdzaS5waGkgKCksIGV4aXQpKTsNCj4gPiA+ID4gKwlpZiAoTUFZX0hBVkVfREVCVUdfQklO RF9TVE1UUykNCj4gPiA+ID4gKwkgIGFkanVzdF9kZWJ1Z19zdG10cyAob3JpZ19kZWYsIFBISV9S RVNVTFQgKGdzaS5waGkgKCkpLCBleGl0LT5kZXN0KTsNCj4gPiA+ID4gKyAgICAgIH0NCj4gPiA+ ID4gKw0KPiA+ID4gPiArICAvKiBUaGlzIGNvbmRpdGlvbiBoYXBwZW5zIHdoZW4gdGhlIGxvb3Ag aGFzIGJlZW4gdmVyc2lvbmVkLiBlLmcuIGR1ZQ0KPiB0bw0KPiA+ID4gaWZjdnQNCj4gPiA+ID4g KyAgICAgdmVyc2lvbmluZyB0aGUgbG9vcC4gICovDQo+ID4gPiA+ICAgIGlmIChzY2FsYXJfbG9v cCAhPSBsb29wKQ0KPiA+ID4gPiAgICAgIHsNCj4gPiA+ID4gICAgICAgIC8qIElmIHdlIGNvcGll ZCBmcm9tIFNDQUxBUl9MT09QIHJhdGhlciB0aGFuIExPT1AsIFNTQV9OQU1Fcw0KPiBmcm9tDQo+ ID4gPiA+IEBAIC0xNjE2LDI4ICsxNjQ3LDEwNiBAQCBzbHBlZWxfdHJlZV9kdXBsaWNhdGVfbG9v cF90b19lZGdlX2NmZw0KPiA+ID4gKGNsYXNzIGxvb3AgKmxvb3AsDQo+ID4gPiA+ICAJCQkJCQlF REdFX1NVQ0MgKGxvb3AtPmxhdGNoLCAwKSk7DQo+ID4gPiA+ICAgICAgfQ0KPiA+ID4gPg0KPiA+ ID4gPiArICB2ZWM8ZWRnZT4gYWx0X2V4aXRzID0gbG9vcC0+dmVjX2xvb3BfYWx0X2V4aXRzOw0K PiA+ID4NCj4gPiA+IFNvICdlJyBpcyBub3Qgb25lIG9mIGFsdF9leGl0cywgcmlnaHQ/ICBJIHdv bmRlciBpZiB3ZSBjYW4gc2ltcGx5DQo+ID4gPiBjb21wdXRlIHRoZSB2ZWN0b3IgZnJvbSBhbGwg ZXhpdHMgb2YgJ2xvb3AnIGFuZCByZW1vdmluZyAnZSc/DQo+ID4gPg0KPiA+ID4gPiArICBib29s IG11bHRpcGxlX2V4aXRzX3AgPSAhYWx0X2V4aXRzLmlzX2VtcHR5ICgpOw0KPiA+ID4gPiArICBh dXRvX3ZlYzxiYXNpY19ibG9jaz4gZG9tczsNCj4gPiA+ID4gKyAgY2xhc3MgbG9vcCAqdXBkYXRl X2xvb3AgPSBOVUxMOw0KPiA+ID4gPiArDQo+ID4gPiA+ICAgIGlmIChhdF9leGl0KSAvKiBBZGQg dGhlIGxvb3AgY29weSBhdCBleGl0LiAgKi8NCj4gPiA+ID4gICAgICB7DQo+ID4gPiA+IC0gICAg ICBpZiAoc2NhbGFyX2xvb3AgIT0gbG9vcCkNCj4gPiA+ID4gKyAgICAgIGlmIChzY2FsYXJfbG9v cCAhPSBsb29wICYmIG5ld19leGl0LT5kZXN0ICE9IGV4aXRfZGVzdCkNCj4gPiA+ID4gIAl7DQo+ ID4gPiA+IC0JICBncGhpX2l0ZXJhdG9yIGdzaTsNCj4gPiA+ID4gIAkgIG5ld19leGl0ID0gcmVk aXJlY3RfZWRnZV9hbmRfYnJhbmNoIChuZXdfZXhpdCwgZXhpdF9kZXN0KTsNCj4gPiA+ID4gKwkg IGZsdXNoX3BlbmRpbmdfc3RtdHMgKG5ld19leGl0KTsNCj4gPiA+ID4gKwl9DQo+ID4gPiA+DQo+ ID4gPiA+IC0JICBmb3IgKGdzaSA9IGdzaV9zdGFydF9waGlzIChleGl0X2Rlc3QpOyAhZ3NpX2Vu ZF9wIChnc2kpOw0KPiA+ID4gPiAtCSAgICAgICBnc2lfbmV4dCAoJmdzaSkpDQo+ID4gPiA+ICsg ICAgICBhdXRvIGxvb3BfZXhpdHMgPSBnZXRfbG9vcF9leGl0X2VkZ2VzIChsb29wKTsNCj4gPiA+ ID4gKyAgICAgIGZvciAoZWRnZSBleGl0IDogbG9vcF9leGl0cykNCj4gPiA+ID4gKwlyZWRpcmVj dF9lZGdlX2FuZF9icmFuY2ggKGV4aXQsIG5ld19wcmVoZWFkZXIpOw0KPiA+ID4gPiArDQo+ID4g PiA+ICsNCj4gPiA+DQo+ID4gPiBvbmUgbGluZSB2ZXJ0aWNhbCBzcGFjZSB0b28gbXVjaA0KPiA+ ID4NCj4gPiA+ID4gKyAgICAgIC8qIENvcHkgdGhlIGN1cnJlbnQgbG9vcCBMQyBQSEkgbm9kZXMg YmV0d2VlbiB0aGUgb3JpZ2luYWwgbG9vcCBleGl0DQo+ID4gPiA+ICsJIGJsb2NrIGFuZCB0aGUg bmV3IGxvb3AgaGVhZGVyLiAgVGhpcyBhbGxvd3MgdXMgdG8gbGF0ZXIgc3BsaXQgdGhlDQo+ID4g PiA+ICsJIHByZWhlYWRlciBibG9jayBhbmQgc3RpbGwgZmluZCB0aGUgcmlnaHQgTEMgbm9kZXMu ICAqLw0KPiA+ID4gPiArICAgICAgZWRnZSBsYXRjaF9uZXcgPSBzaW5nbGVfc3VjY19lZGdlIChu ZXdfcHJlaGVhZGVyKTsNCj4gPiA+ID4gKyAgICAgIGVkZ2UgbGF0Y2hfb2xkID0gbG9vcF9sYXRj aF9lZGdlIChsb29wKTsNCj4gPiA+ID4gKyAgICAgIGhhc2hfc2V0IDx0cmVlPiBsY3NzYV92YXJz Ow0KPiA+ID4gPiArICAgICAgZm9yIChhdXRvIGdzaV9mcm9tID0gZ3NpX3N0YXJ0X3BoaXMgKGxh dGNoX29sZC0+ZGVzdCksDQo+ID4gPg0KPiA+ID4gc28gdGhhdCdzIGxvb3AtPmhlYWRlciAoYW5k IG1ha2VzIGl0IG1vcmUgY2xlYXIgd2hpY2ggUEhJIG5vZGVzIHlvdSBhcmUNCj4gPiA+IGxvb2tp bmcgYXQpDQo+IA0KPiANCj4gU28gSSdtIG5vdyBpbiBhIGRlYnVnIHNlc3Npb24gLSBJIHRoaW5r IHRoYXQgY29uY2VwdHVhbGx5IGl0IHdvdWxkDQo+IG1ha2UgbW9yZSBzZW5zZSB0byBjcmVhdGUg dGhlIExDIFBISSBub2RlcyB0aGF0IGFyZSBwcmVzZW50IGF0IHRoZQ0KPiBvbGQgZXhpdCBkZXN0 aW5hdGlvbiBpbiB0aGUgbmV3IHByZWhlYWRlciBfYmVmb3JlXyB5b3UgcmVkaXJlY3QgdGhlbQ0K PiBhYm92ZSBhbmQgdGhlbiBmbHVzaF9wZW5kaW5nX3N0bXRzIGFmdGVyIHJlZGlyZWN0aW5nLCB0 aGF0IHNob3VsZCBkZWFsDQo+IHdpdGggdGhlIGNvcHlpbmcuDQo+IA0KDQpUaGlzIHdhcyB0aGUg Zmlyc3QgdGhpbmcgSSB0cmllZCwgaG93ZXZlciBhcyBzb29uIGFzIHlvdSByZWRpcmVjdCBvbmUg ZWRnZQ0KeW91IGRlc3Ryb3kgYWxsIG90aGVyIHBoaSBub2RlcyBvbiB0aGUgb3JpZ2luYWwgYmxv Y2suDQoNCkFzIGluIGlmIEkgaGF2ZSAzIHBoaSBub2RlcywgSSBuZWVkIHRvIG1vdmUgdGhlbSBh bGwgYXQgdGhlIHNhbWUgdGltZSwgd2hpY2gNCmJyaW5ncyB0aGUgbmV4dCBwcm9ibGVtIGluIHRo YXQgSSBjYW4ndCBhZGQgbW9yZSBlbnRyaWVzIHRvIGEgcGhpIHRoYW4gaXQgaGFzDQppbmNvbWlu ZyBlZGdlcy4gIFRoYXQgaXMgSSBjYW4ndCBqdXN0IG1ha2UgdGhlIGZpbmFsIHBoaSBub2RlcyBv biB0aGUgZGVzdGluYXRpb24NCndpdGhvdXQgaGF2aW5nIGFuIGVkZ2UgZm9yIGl0Lg0KDQpBbmQg dG8gbWFrZSBhbiBlZGdlIGZvciBpdCBJIG5lZWQgdG8gaGF2ZSBhIGNvbmRpdGlvbiB0byBhdHRh Y2ggdG8gdGhlIGVkZ2UuDQpUbyB3b3JrIGFyb3VuZCBpdCBJIHRyaWVkIG1haW50YWluaW5nIGEg Y2FjaGUgb2YgdGhlIG5vZGVzIEkgbmVlZCB0byBtYWtlIG9uDQp0aGUgbmV3IGRlc3RpbmF0aW9u IGFuZCBhZnRlciByZWRpcmVjdGluZyBqdXN0IGNyZWF0ZSB0aGVtLCAgYnV0IHRoYXQgaGFzIG1l DQpsb29waW5nIG92ZXIgdGhlIHNhbWUgUEhJcyBtdWx0aXBsZSB0aW1lcy4NCg0KQW55IHN1Z2dl c3Rpb25zPw0KDQo+IE5vdywgeW91ciBjb3B5aW5nIGFjdHVhbGx5IGl0ZXJhdGVzIG92ZXIgYWxs IFBISXMgaW4gdGhlIGxvb3AgX2hlYWRlcl8sDQo+IHNvIGl0IGRvZXNuJ3QgYWN0dWFsbHkgY29w eSBMQyBQSEkgbm9kZXMgYnV0IHBvc3NpYmx5IGNyZWF0ZXMgYWRkaXRpb25hbA0KPiBvbmVzLiAg VGhlIGludGVudCBkb2VzIHNlZW0gdG8gZG8gdGhpcyBzaW5jZSB5b3Ugd2FudCBhIGRpZmZlcmVu dCB2YWx1ZQ0KPiBvbiB0aG9zZSBlZGdlcyBmb3IgYWxsIGJ1dCB0aGUgbWFpbiBsb29wIGV4aXQu ICBCdXQgdGhlbiB0aGUNCj4gb3ZlcmFsbCBjb21tZW50cyBzaG91bGQgYmV0dGVyIHJlZmxlY3Qg dGhhdCBhbmQgbWF5YmUgeW91IHNob3VsZA0KPiBkbyB3aGF0IEkgc3VnZ2VzdGVkIGFueXdheSBh bmQgaGF2ZSB0aGlzIGxvb3AgYWx0ZXIgb25seSB0aGUgYWx0ZXJuYXRlDQo+IGV4aXQgTEMgUEhJ cz8NCg0KSXQgZG9lcyBjcmVhdGUgdGhlIExDIFBISSBub2RlcyBmb3IgYWxsIGV4aXRzLCBpdCdz IGp1c3QgdGhhdCBmb3IgYWx0ZXJuYXRlIGV4aXRzDQphbGwgdGhlIG5vZGVzIGFyZSB0aGUgc2Ft ZSBzaW5jZSB3ZSBvbmx5IGNhcmUgYWJvdXQgdGhlIHZhbHVlIGZvciBmdWxsDQppdGVyYXRpb25z LiANCg0KSSdtIG5vdCBzdXJlIHdoYXQgeW91J3JlIHN1Z2dlc3Rpbmcgd2l0aCBhbHRlciBvbmx5 IHRoZSBhbHRlcm5hdGl2ZSBleGl0cy4NCkkgbmVlZCB0byBzdGlsbCBjcmVhdGUgdGhlIG9uZSBm b3IgdGhlIG1haW4gbG9vcCBhbmQgc2VlbXMgZWFzaWVyIHRvIGRvIHRoZW0NCkluIG9uZSBsb29w IHJhdGhlciB0aGFuIHR3bz8NCg0KRG9pbmcgdGhpcyBoZXJlIGFsbG93cyB0aGUgcmVtb3ZhbCBv ZiBhbGwgdGhlIGNvZGUgbGF0ZXIgb24gdGhhdCB0aGUgdmVjdG9yaXplcg0KdXNlcyB0byB0cnkg dG8gZmluZCB0aGUgbWFpbiBleGl0J3MgUEhJcy4NCg0KPiANCj4gSWYgeW91IGRvbid0IGZsdXNo X3BlbmRpbmdfc3RtdHMgb24gYW4gZWRnZSBhZnRlciByZWRpcmVjdGluZyB5b3UNCj4gc2hvdWxk IGNhbGwgcmVkaXJlY3RfZWRnZV92YXJfbWFwX2NsZWFyIChlZGdlKSwgb3RoZXJ3aXNlIHRoZSBz dGFsZQ0KPiBpbmZvIG1pZ2h0IGJyZWFrIHRoaW5ncyBsYXRlci4NCj4gDQo+ID4gPiA+ICsJICAg Z3NpX3RvID0gZ3NpX3N0YXJ0X3BoaXMgKGxhdGNoX25ldy0+ZGVzdCk7DQo+ID4gPg0KPiA+ID4g bGlrZXdpc2UgbmV3X2xvb3AtPmhlYWRlcg0KPiA+ID4NCj4gPiA+ID4gKwkgICBmbG93X2xvb3Bz ICYmICFnc2lfZW5kX3AgKGdzaV9mcm9tKSAmJiAhZ3NpX2VuZF9wIChnc2lfdG8pOw0KPiA+ID4g PiArCSAgIGdzaV9uZXh0ICgmZ3NpX2Zyb20pLCBnc2lfbmV4dCAoJmdzaV90bykpDQo+ID4gPiA+ ICsJew0KPiA+ID4gPiArCSAgZ2ltcGxlICpmcm9tX3BoaSA9IGdzaV9zdG10IChnc2lfZnJvbSk7 DQo+ID4gPiA+ICsJICBnaW1wbGUgKnRvX3BoaSA9IGdzaV9zdG10IChnc2lfdG8pOw0KPiA+ID4g PiArCSAgdHJlZSBuZXdfYXJnID0gUEhJX0FSR19ERUZfRlJPTV9FREdFIChmcm9tX3BoaSwgbGF0 Y2hfb2xkKTsNCj4gPiA+ID4gKwkgIC8qIEluIGFsbCBjYXNlcywgZXZlbiBpbiBlYXJseSBicmVh ayBzaXR1YXRpb25zIHdlJ3JlIG9ubHkNCj4gPiA+ID4gKwkgICAgIGludGVyZXN0ZWQgaW4gdGhl IG51bWJlciBvZiBmdWxseSBleGVjdXRlZCBsb29wIGl0ZXJzLiAgQXMgc3VjaA0KPiA+ID4gPiAr CSAgICAgd2UgZGlzY2FyZCBhbnkgcGFydGlhbGx5IGRvbmUgaXRlcmF0aW9uLiAgU28gd2Ugc2lt cGx5IHByb3BhZ2F0ZQ0KPiA+ID4gPiArCSAgICAgdGhlIHBoaSBub2RlcyBmcm9tIHRoZSBsYXRj aCB0byB0aGUgbWVyZ2UgYmxvY2suICAqLw0KPiA+ID4gPiArCSAgdHJlZSBuZXdfcmVzID0gY29w eV9zc2FfbmFtZSAoZ2ltcGxlX3BoaV9yZXN1bHQgKGZyb21fcGhpKSk7DQo+ID4gPiA+ICsJICBn cGhpICpsY3NzYV9waGkgPSBjcmVhdGVfcGhpX25vZGUgKG5ld19yZXMsIGUtPmRlc3QpOw0KPiA+ ID4gPiArDQo+ID4gPiA+ICsJICBsY3NzYV92YXJzLmFkZCAobmV3X2FyZyk7DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKwkgIC8qIE1haW4gbG9vcCBleGl0IHNob3VsZCB1c2UgdGhlIGZpbmFsIGl0ZXIg dmFsdWUuICAqLw0KPiA+ID4gPiArCSAgYWRkX3BoaV9hcmcgKGxjc3NhX3BoaSwgbmV3X2FyZywg bG9vcC0+dmVjX2xvb3BfaXYsDQo+ID4gPiBVTktOT1dOX0xPQ0FUSU9OKTsNCj4gPiA+DQo+ID4g PiBhYm92ZSB5b3UgYXJlIGNyZWF0aW5nIHRoZSBQSEkgbm9kZSBhdCBlLT5kZXN0IGJ1dCBoZXJl IGFkZCB0aGUgUEhJIGFyZyB0bw0KPiA+ID4gbG9vcC0+dmVjX2xvb3BfaXYgLSB0aGF0J3MgJ2Un IGhlcmUsIG5vPyAgQ29uc2lzdGVuY3kgbWFrZXMgaXQgZWFzaWVyDQo+ID4gPiB0byBmb2xsb3cu ICBJIF90aGlua18gdGhpcyBjb2RlIGRvZXNuJ3QgbmVlZCB0byBrbm93IGFib3V0IHRoZSAic3Bl Y2lhbCINCj4gPiA+IGVkZ2UuDQo+ID4gPg0KPiA+ID4gPiArDQo+ID4gPiA+ICsJICAvKiBBbGwg b3RoZXIgZXhpdHMgdXNlIHRoZSBwcmV2aW91cyBpdGVycy4gICovDQo+ID4gPiA+ICsJICBmb3Ig KGVkZ2UgZSA6IGFsdF9leGl0cykNCj4gPiA+ID4gKwkgICAgYWRkX3BoaV9hcmcgKGxjc3NhX3Bo aSwgZ2ltcGxlX3BoaV9yZXN1bHQgKGZyb21fcGhpKSwgZSwNCj4gPiA+ID4gKwkJCSBVTktOT1dO X0xPQ0FUSU9OKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCSAgYWRqdXN0X3BoaV9hbmRfZGVidWdf c3RtdHMgKHRvX3BoaSwgbGF0Y2hfbmV3LCBuZXdfcmVzKTsNCj4gPiA+ID4gKwl9DQo+ID4gPiA+ ICsNCj4gPiA+ID4gKyAgICAgIC8qIENvcHkgb3ZlciBhbnkgbGl2ZSBTU0EgdmFycyB0aGF0IG1h eSBub3QgaGF2ZSBiZWVuIG1hdGVyaWFsaXplZCBpbg0KPiA+ID4gdGhlDQo+ID4gPiA+ICsJIGxv b3BzIHRoZW1zZWx2ZXMgYnV0IHdvdWxkIGJlIGluIHRoZSBleGl0IGJsb2NrLiAgSG93ZXZlciB3 aGVuIHRoZQ0KPiA+ID4gbGl2ZQ0KPiA+ID4gPiArCSB2YWx1ZSBpcyBub3QgdXNlZCBpbnNpZGUg dGhlIGxvb3AgdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGRvIHRoaXMsICBpZiB3ZQ0KPiA+ID4gZG8N Cj4gPiA+ID4gKwkgdGhlbiB3aGVuIHdlIHNwbGl0IHRoZSBndWFyZCBibG9jayB0aGUgYnJhbmNo IGVkZ2UgY2FuIGVuZCB1cA0KPiA+ID4gY29udGFpbmluZyB0aGUNCj4gPiA+ID4gKwkgd3Jvbmcg cmVmZXJlbmNlLCAgcGFydGljdWxhcmx5IGlmIGl0IHNoYXJlcyBhbiBlZGdlIHdpdGggc29tZXRo aW5nIHRoYXQNCj4gPiA+IGhhcw0KPiA+ID4gPiArCSBieXBhc3NlZCB0aGUgbG9vcC4gIFRoaXMg aXMgbm90IHNvbWV0aGluZyBwZWVsaW5nIGNhbiBjaGVjayBzbyB3ZQ0KPiA+ID4gbmVlZCB0bw0K PiA+ID4gPiArCSBhbnRpY2lwYXRlIHRoZSB1c2FnZSBvZiB0aGUgbGl2ZSB2YXJpYWJsZSBoZXJl LiAgKi8NCj4gPiA+ID4gKyAgICAgIGF1dG8gZXhpdF9tYXAgPSByZWRpcmVjdF9lZGdlX3Zhcl9t YXBfdmVjdG9yIChleGl0KTsNCj4gPiA+DQo+ID4gPiBIbW0sIGRpZCBJIHVzZSB0aGF0IGluIG15 IGF0dGVtdCB0byByZWZhY3RvciB0aGluZ3M/IC4uLg0KPiA+DQo+ID4gSW5kZWVkLCBJIGRpZG4n dCBhbHdheXMgdXNlIGl0LCBidXQgZm91bmQgaXQgd2FzIHRoZSBiZXN0IHdheSB0byBkZWFsIHdp dGggdGhlDQo+ID4gdmFyaWFibGVzIGJlaW5nIGxpdmUgaW4gdmFyaW91cyBCQiBhZnRlciB0aGUg bG9vcC4NCj4gDQo+IEFzIHNhaWQgdGhpcyB3aG9sZSBwaWVjZSBvZiBjb2RlIGlzIHBvc3NpYmx5 IG1vcmUgY29tcGxpY2F0ZWQgdGhhbg0KPiBuZWNlc3NhcnkuICBGaXJzdCBjb3B5aW5nL2NyZWF0 aW5nIHRoZSBQSEkgbm9kZXMgdGhhdCBhcmUgcHJlc2VudA0KPiBhdCB0aGUgZXhpdCAodGhlIG9s ZCBMQyBQSEkgbm9kZXMpLCB0aGVuIHJlZGlyZWN0aW5nIGVkZ2VzIGFuZCBmbHVzaGluZw0KPiBz dG10cyBzaG91bGQgZGVhbCB3aXRoIGhhbGYgb2YgdGhpcy4NCj4NCj4gPiA+DQo+ID4gPiA+ICsg ICAgICBpZiAoZXhpdF9tYXApDQo+ID4gPiA+ICsgICAgICAgIGZvciAoYXV0byB2bSA6IGV4aXRf bWFwKQ0KPiA+ID4gPiArCXsNCj4gPiA+ID4gKwkgIGlmIChsY3NzYV92YXJzLmNvbnRhaW5zICh2 bS5kZWYpDQo+ID4gPiA+ICsJICAgICAgfHwgVFJFRV9DT0RFICh2bS5kZWYpICE9IFNTQV9OQU1F KQ0KPiA+ID4NCj4gPiA+IHRoZSBsYXR0ZXIgY2hlY2sgaXMgY2hlYXBlciBzbyBpdCBzaG91bGQg Y29tZSBmaXJzdA0KPiA+ID4NCj4gPiA+ID4gKwkgICAgY29udGludWU7DQo+ID4gPiA+ICsNCj4g PiA+ID4gKwkgIGltbV91c2VfaXRlcmF0b3IgaW1tX2l0ZXI7DQo+ID4gPiA+ICsJICB1c2Vfb3Bl cmFuZF9wIHVzZV9wOw0KPiA+ID4gPiArCSAgYm9vbCB1c2VfaW5fbG9vcCA9IGZhbHNlOw0KPiA+ ID4gPiArDQo+ID4gPiA+ICsJICBGT1JfRUFDSF9JTU1fVVNFX0ZBU1QgKHVzZV9wLCBpbW1faXRl ciwgdm0uZGVmKQ0KPiA+ID4gPiAgCSAgICB7DQo+ID4gPiA+IC0JICAgICAgZ3BoaSAqcGhpID0g Z3NpLnBoaSAoKTsNCj4gPiA+ID4gLQkgICAgICB0cmVlIG9yaWdfYXJnID0gUEhJX0FSR19ERUZf RlJPTV9FREdFIChwaGksIGUpOw0KPiA+ID4gPiAtCSAgICAgIGxvY2F0aW9uX3Qgb3JpZ19sb2N1 cw0KPiA+ID4gPiAtCQk9IGdpbXBsZV9waGlfYXJnX2xvY2F0aW9uX2Zyb21fZWRnZSAocGhpLCBl KTsNCj4gPiA+ID4gKwkgICAgICBiYXNpY19ibG9jayBiYiA9IGdpbXBsZV9iYiAoVVNFX1NUTVQg KHVzZV9wKSk7DQo+ID4gPiA+ICsJICAgICAgaWYgKGZsb3dfYmJfaW5zaWRlX2xvb3BfcCAobG9v cCwgYmIpDQo+ID4gPiA+ICsJCSAgJiYgIWdpbXBsZV92dXNlIChVU0VfU1RNVCAodXNlX3ApKSkN Cj4gDQo+IHdoYXQncyB0aGlzIGdpbXBsZV92dXNlIGNoZWNrPyAgSSBzZWUgbm93IGZvciB2ZWN0 LWVhcmx5LWJyZWFrXzE3LmMgdGhpcw0KPiBjb2RlIHRyaWdnZXJzIGFuZCBpZ25vcmVzDQo+IA0K PiAgIHZlY3RfYltpXzE4XSA9IF8yOw0KPiANCj4gPiA+ID4gKwkJew0KPiA+ID4gPiArCQkgIHVz ZV9pbl9sb29wID0gdHJ1ZTsNCj4gPiA+ID4gKwkJICBicmVhazsNCj4gPiA+ID4gKwkJfQ0KPiA+ ID4gPiArCSAgICB9DQo+ID4gPiA+DQo+ID4gPiA+IC0JICAgICAgYWRkX3BoaV9hcmcgKHBoaSwg b3JpZ19hcmcsIG5ld19leGl0LCBvcmlnX2xvY3VzKTsNCj4gPiA+ID4gKwkgIGlmICghdXNlX2lu X2xvb3ApDQo+ID4gPiA+ICsJICAgIHsNCj4gPiA+ID4gKwkgICAgICAgLyogRG8gYSBmaW5hbCBj aGVjayB0byBzZWUgaWYgaXQncyBwZXJoYXBzIGRlZmluZWQgaW4gdGhlIGxvb3AuICBUaGlzDQo+ ID4gPiA+ICsJCSAgbWlycm9ycyB0aGUgcmVsZXZhbmN5IGFuYWx5c2lzJ3MgdXNlZF9vdXRzaWRl X3Njb3BlLiAgKi8NCj4gPiA+ID4gKwkgICAgICBnaW1wbGUgKnN0bXQgPSBTU0FfTkFNRV9ERUZf U1RNVCAodm0uZGVmKTsNCj4gPiA+ID4gKwkgICAgICBpZiAoIXN0bXQgfHwgIWZsb3dfYmJfaW5z aWRlX2xvb3BfcCAobG9vcCwgZ2ltcGxlX2JiIChzdG10KSkpDQo+ID4gPiA+ICsJCWNvbnRpbnVl Ow0KPiA+ID4gPiAgCSAgICB9DQo+IA0KPiBzaW5jZSB0aGUgZGVmIHdhcyBvbiBhIExDIFBISSB0 aGUgZGVmIHNob3VsZCBhbHdheXMgYmUgZGVmaW5lZCBpbnNpZGUgdGhlDQo+IGxvb3AuDQo+IA0K PiA+ID4gPiArDQo+ID4gPiA+ICsJICB0cmVlIG5ld19yZXMgPSBjb3B5X3NzYV9uYW1lICh2bS5y ZXN1bHQpOw0KPiA+ID4gPiArCSAgZ3BoaSAqbGNzc2FfcGhpID0gY3JlYXRlX3BoaV9ub2RlIChu ZXdfcmVzLCBlLT5kZXN0KTsNCj4gPiA+ID4gKwkgIGZvciAoZWRnZSBleGl0IDogbG9vcF9leGl0 cykNCj4gPiA+ID4gKwkgICAgIGFkZF9waGlfYXJnIChsY3NzYV9waGksIHZtLmRlZiwgZXhpdCwg dm0ubG9jdXMpOw0KPiA+ID4NCj4gPiA+IG5vdCBzdXJlIHdoYXQgeW91IGFyZSBkb2luZyBhYm92 ZSAtIEkgZ3Vlc3MgSSBoYXZlIHRvIHBsYXkgd2l0aCBpdA0KPiA+ID4gaW4gYSBkZWJ1ZyBzZXNz aW9uLg0KPiA+DQo+ID4gWWVhaCBpZiB5b3UgY29tbWVudCBpdCBvdXQgb25lIG9mIHRoZSB0ZXN0 Y2FzZXMgc2hvdWxkIGZhaWwuDQo+IA0KPiB1c2luZyBuZXdfcHJlaGVhZGVyIGluc3RlYWQgb2Yg ZS0+ZGVzdCB3b3VsZCBtYWtlIHRoaW5ncyBjbGVhcmVyLg0KPiANCj4gWW91IGFyZSBub3cgYWRk aW5nIHRoZSBzYW1lIGFyZyB0byBldmVyeSBleGl0ICh5b3UndmUganVzdCBxdWVyaWVkIHRoZQ0K PiBtYWluIGV4aXQgcmVkaXJlY3RfZWRnZV92YXJfbWFwX3ZlY3RvcikuDQo+IA0KPiBPSywgc28g SSB0aGluayBJIHVuZGVyc3RhbmQgd2hhdCB5b3UncmUgZG9pbmcuICBJZiBJIHVuZGVyc3RhbmQN Cj4gY29ycmVjdGx5IHdlIGtub3cgdGhhdCB3aGVuIHdlIGV4aXQgdGhlIG1haW4gbG9vcCB2aWEg b25lIG9mIHRoZQ0KPiBlYXJseSBleGl0cyB3ZSBhcmUgZGVmaW5pdGVseSBnb2luZyB0byBlbnRl ciB0aGUgZXBpbG9nIGJ1dCB3aGVuDQo+IHdlIHRha2UgdGhlIG1haW4gZXhpdCB3ZSBtaWdodCBu b3QuDQoNCkNvcnJlY3QNCg0KPiANCj4gTG9va2luZyBhdCB0aGUgQ0ZHIHdlIGNyZWF0ZSBjdXJy ZW50bHkgdGhpcyBpc24ndCByZWZsZWN0ZWQgYW5kDQo+IHRoaXMgY29tcGxpY2F0ZXMgdGhpcyBQ SEkgbm9kZSB1cGRhdGluZy4gIFdoYXQgSSdkIHRyeSB0byBkbw0KPiBpcyBsZWF2ZSByZWRpcmVj dGluZyB0aGUgYWx0ZXJuYXRlIGV4aXRzIHVudGlsIGFmdGVyDQo+IHNscGVlbF90cmVlX2R1cGxp Y2F0ZV9sb29wX3RvX2VkZ2VfY2ZnIGZpbmlzaGVkIHdoaWNoIHByb2JhYmx5DQo+IG1lYW5zIGxl YXZpbmcgaXQgYWxtb3N0IHVuY2hhbmdlZCBiZXNpZGVzIHRoZSBMQyBTU0EgbWFpbnRhaW5pbmcN Cj4gY2hhbmdlcy4gIEFmdGVyIHRoYXQgZm9yIHRoZSBtdWx0aS1leGl0IGNhc2Ugc3BsaXQgdGhl DQo+IGVwaWxvZyBwcmVoZWFkZXIgZWRnZSBhbmQgcmVkaXJlY3QgYWxsIHRoZSBhbHRlcm5hdGUg ZXhpdHMgdG8gdGhlDQo+IG5ldyBwcmVoZWFkZXIuICBTbyB0aGUgQ0ZHIGJlY29tZXMNCj4gDQo+ ICAgICAgICAgICAgICAgICAgPG9yaWdpbmFsIGxvb3A+DQo+ICAgICAgICAgICAgICAgICAvICAg ICAgfA0KPiAgICAgICAgICAgICAgICAvICAgIDxtYWluIGV4aXQgdy8gb3JpZ2luYWwgTEMgUEhJ Pg0KPiAgICAgICAgICAgICAgIC8gICAgICBpZiAoZXBpbG9nKQ0KPiAgICBhbHQgZXhpdHMgLyAg ICAgICAgLyAgXA0KPiAgICAgICAgICAgICAvICAgICAgICAvICAgIGxvb3AgYXJvdW5kDQo+ICAg ICAgICAgICAgIHwgICAgICAgLw0KPiAgICAgICAgICAgIHByZWhlYWRlciB3aXRoICJoZWFkZXIi IFBISXMNCj4gICAgICAgICAgICAgICB8DQo+ICAgICAgICAgICA8ZXBpbG9nPg0KPiANCj4gbm90 ZSB5b3UgbmVlZCB0aGUgaGVhZGVyIFBISXMgYWxzbyBvbiB0aGUgbWFpbiBleGl0IHBhdGggYnV0 IHlvdQ0KPiBvbmx5IG5lZWQgdGhlIGxvb3AgZW5kIFBISXMgdGhlcmUuDQoNCkFoLCBoYWRuJ3Qg Y29uc2lkZXJlZCB0aGlzIG9uZS4gIEknbGwgZ2l2ZSBpdCBhIHRyeS4NCg0KPiANCj4gSXQgc2Vl bXMgc28gdGhhdCBhdCBsZWFzdCBjdXJyZW50bHkgdGhlIG9yZGVyIG9mIHRoaW5ncyBtYWtlcw0K PiB0aGVtIG1vcmUgY29tcGxpY2F0ZWQgdGhhbiBuZWNlc3NhcnkuDQoNClBvc3NpYmx5IHllYWgs IHRoZXJlJ3MgYSBsb3Qgb2Ygd29yayB0byBtYWludGFpbiB0aGUgZG9taW5hdG9ycw0KYW5kIHBo aSBub2RlcyBiZWNhdXNlIHRoZSBleGl0cyBhcmUgcmV3cml0dGVuIGVhcmx5Lg0KDQpJJ2xsIGdp dmUgdGhpcyBhIGdvIQ0KDQo+IA0KPiA+ID4NCj4gPiA+ID4gIAl9DQo+ID4gPiA+IC0gICAgICBy ZWRpcmVjdF9lZGdlX2FuZF9icmFuY2hfZm9yY2UgKGUsIG5ld19wcmVoZWFkZXIpOw0KPiA+ID4g PiAtICAgICAgZmx1c2hfcGVuZGluZ19zdG10cyAoZSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gICAg ICAgIHNldF9pbW1lZGlhdGVfZG9taW5hdG9yIChDRElfRE9NSU5BVE9SUywgbmV3X3ByZWhlYWRl ciwgZS0NCj4gPnNyYyk7DQo+ID4gPiA+IC0gICAgICBpZiAod2FzX2ltbV9kb20gfHwgZHVwbGlj YXRlX291dGVyX2xvb3ApDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgIGlmICgod2FzX2ltbV9k b20gfHwgZHVwbGljYXRlX291dGVyX2xvb3ApICYmICFtdWx0aXBsZV9leGl0c19wKQ0KPiA+ID4g PiAgCXNldF9pbW1lZGlhdGVfZG9taW5hdG9yIChDRElfRE9NSU5BVE9SUywgZXhpdF9kZXN0LCBu ZXdfZXhpdC0NCj4gPiA+ID5zcmMpOw0KPiA+ID4gPg0KPiA+ID4gPiAgICAgICAgLyogQW5kIHJl bW92ZSB0aGUgbm9uLW5lY2Vzc2FyeSBmb3J3YXJkZXIgYWdhaW4uICBLZWVwIHRoZSBvdGhlcg0K PiA+ID4gPiBAQCAtMTY0Nyw5ICsxNzU2LDQyIEBAIHNscGVlbF90cmVlX2R1cGxpY2F0ZV9sb29w X3RvX2VkZ2VfY2ZnDQo+IChjbGFzcw0KPiA+ID4gbG9vcCAqbG9vcCwNCj4gPiA+ID4gICAgICAg IGRlbGV0ZV9iYXNpY19ibG9jayAocHJlaGVhZGVyKTsNCj4gPiA+ID4gICAgICAgIHNldF9pbW1l ZGlhdGVfZG9taW5hdG9yIChDRElfRE9NSU5BVE9SUywgc2NhbGFyX2xvb3AtPmhlYWRlciwNCj4g PiA+ID4gIAkJCSAgICAgICBsb29wX3ByZWhlYWRlcl9lZGdlIChzY2FsYXJfbG9vcCktPnNyYyk7 DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgIC8qIEZpbmFsbHkgYWZ0ZXIgd2lyaW5nIHRoZSBu ZXcgZXBpbG9ndWUgd2UgbmVlZCB0byB1cGRhdGUgaXRzIG1haW4NCj4gZXhpdA0KPiA+ID4gPiAr CSB0byB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gZXhpdCB3ZSByZWNvcmRlZC4gIE90aGVyIGV4aXRz IGFyZSBhbHJlYWR5DQo+ID4gPiA+ICsJIGNvcnJlY3QuICAqLw0KPiA+ID4gPiArICAgICAgaWYg KG11bHRpcGxlX2V4aXRzX3ApDQo+ID4gPiA+ICsJew0KPiA+ID4gPiArCSAgZm9yIChlZGdlIGUg OiBnZXRfbG9vcF9leGl0X2VkZ2VzIChsb29wKSkNCj4gPiA+ID4gKwkgICAgZG9tcy5zYWZlX3B1 c2ggKGUtPmRlc3QpOw0KPiA+ID4gPiArCSAgdXBkYXRlX2xvb3AgPSBuZXdfbG9vcDsNCj4gPiA+ ID4gKwkgIGRvbXMuc2FmZV9wdXNoIChleGl0X2Rlc3QpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJ ICAvKiBMaWtlbHkgYSBmYWxsLXRocm91Z2ggZWRnZSwgc28gdXBkYXRlIGlmIG5lZWRlZC4gICov DQo+ID4gPiA+ICsJICBpZiAoc2luZ2xlX3N1Y2NfcCAoZXhpdF9kZXN0KSkNCj4gPiA+ID4gKwkg ICAgZG9tcy5zYWZlX3B1c2ggKHNpbmdsZV9zdWNjIChleGl0X2Rlc3QpKTsNCj4gPiA+ID4gKwl9 DQo+ID4gPiA+ICAgICAgfQ0KPiA+ID4gPiAgICBlbHNlIC8qIEFkZCB0aGUgY29weSBhdCBlbnRy eS4gICovDQo+ID4gPiA+ICAgICAgew0KPiA+ID4gPiArICAgICAgLyogQ29weSB0aGUgY3VycmVu dCBsb29wIExDIFBISSBub2RlcyBiZXR3ZWVuIHRoZSBvcmlnaW5hbCBsb29wIGV4aXQNCj4gPiA+ ID4gKwkgYmxvY2sgYW5kIHRoZSBuZXcgbG9vcCBoZWFkZXIuICBUaGlzIGFsbG93cyB1cyB0byBs YXRlciBzcGxpdCB0aGUNCj4gPiA+ID4gKwkgcHJlaGVhZGVyIGJsb2NrIGFuZCBzdGlsbCBmaW5k IHRoZSByaWdodCBMQyBub2Rlcy4gICovDQo+ID4gPiA+ICsgICAgICBlZGdlIG9sZF9sYXRjaF9s b29wID0gbG9vcF9sYXRjaF9lZGdlIChsb29wKTsNCj4gPiA+ID4gKyAgICAgIGVkZ2Ugb2xkX2xh dGNoX2luaXQgPSBsb29wX3ByZWhlYWRlcl9lZGdlIChsb29wKTsNCj4gPiA+ID4gKyAgICAgIGVk Z2UgbmV3X2xhdGNoX2xvb3AgPSBsb29wX2xhdGNoX2VkZ2UgKG5ld19sb29wKTsNCj4gPiA+ID4g KyAgICAgIGVkZ2UgbmV3X2xhdGNoX2luaXQgPSBsb29wX3ByZWhlYWRlcl9lZGdlIChuZXdfbG9v cCk7DQo+ID4gPiA+ICsgICAgICBmb3IgKGF1dG8gZ3NpX2Zyb20gPSBnc2lfc3RhcnRfcGhpcyAo bmV3X2xhdGNoX2luaXQtPmRlc3QpLA0KPiA+ID4NCj4gPiA+IHNlZSBhYm92ZQ0KPiA+ID4NCj4g PiA+ID4gKwkgICBnc2lfdG8gPSBnc2lfc3RhcnRfcGhpcyAob2xkX2xhdGNoX2xvb3AtPmRlc3Qp Ow0KPiA+ID4gPiArCSAgIGZsb3dfbG9vcHMgJiYgIWdzaV9lbmRfcCAoZ3NpX2Zyb20pICYmICFn c2lfZW5kX3AgKGdzaV90byk7DQo+ID4gPiA+ICsJICAgZ3NpX25leHQgKCZnc2lfZnJvbSksIGdz aV9uZXh0ICgmZ3NpX3RvKSkNCj4gPiA+ID4gKwl7DQo+ID4gPiA+ICsJICBnaW1wbGUgKmZyb21f cGhpID0gZ3NpX3N0bXQgKGdzaV9mcm9tKTsNCj4gPiA+ID4gKwkgIGdpbXBsZSAqdG9fcGhpID0g Z3NpX3N0bXQgKGdzaV90byk7DQo+ID4gPiA+ICsJICB0cmVlIG5ld19hcmcgPSBQSElfQVJHX0RF Rl9GUk9NX0VER0UgKGZyb21fcGhpLA0KPiA+ID4gbmV3X2xhdGNoX2xvb3ApOw0KPiA+ID4gPiAr CSAgYWRqdXN0X3BoaV9hbmRfZGVidWdfc3RtdHMgKHRvX3BoaSwgb2xkX2xhdGNoX2luaXQsIG5l d19hcmcpOw0KPiA+ID4gPiArCX0NCj4gPiA+ID4gKw0KPiA+ID4gPiAgICAgICAgaWYgKHNjYWxh cl9sb29wICE9IGxvb3ApDQo+ID4gPiA+ICAJew0KPiA+ID4gPiAgCSAgLyogUmVtb3ZlIHRoZSBu b24tbmVjZXNzYXJ5IGZvcndhcmRlciBvZiBzY2FsYXJfbG9vcCBhZ2Fpbi4gICovDQo+ID4gPiA+ IEBAIC0xNjc3LDMxICsxODE5LDM2IEBAIHNscGVlbF90cmVlX2R1cGxpY2F0ZV9sb29wX3RvX2Vk Z2VfY2ZnDQo+IChjbGFzcw0KPiA+ID4gbG9vcCAqbG9vcCwNCj4gPiA+ID4gICAgICAgIGRlbGV0 ZV9iYXNpY19ibG9jayAobmV3X3ByZWhlYWRlcik7DQo+ID4gPiA+ICAgICAgICBzZXRfaW1tZWRp YXRlX2RvbWluYXRvciAoQ0RJX0RPTUlOQVRPUlMsIG5ld19sb29wLT5oZWFkZXIsDQo+ID4gPiA+ ICAJCQkgICAgICAgbG9vcF9wcmVoZWFkZXJfZWRnZSAobmV3X2xvb3ApLT5zcmMpOw0KPiA+ID4g PiArDQo+ID4gPiA+ICsgICAgICBpZiAobXVsdGlwbGVfZXhpdHNfcCkNCj4gPiA+ID4gKwl1cGRh dGVfbG9vcCA9IGxvb3A7DQo+ID4gPiA+ICAgICAgfQ0KPiA+ID4gPg0KPiA+ID4gPiAtICBpZiAo c2NhbGFyX2xvb3AgIT0gbG9vcCkNCj4gPiA+ID4gKyAgaWYgKG11bHRpcGxlX2V4aXRzX3ApDQo+ ID4gPiA+ICAgICAgew0KPiA+ID4gPiAtICAgICAgLyogVXBkYXRlIG5ld19sb29wLT5oZWFkZXIg UEhJcywgc28gdGhhdCBvbiB0aGUgcHJlaGVhZGVyDQo+ID4gPiA+IC0JIGVkZ2UgdGhleSBhcmUg dGhlIG9uZXMgZnJvbSBsb29wIHJhdGhlciB0aGFuIHNjYWxhcl9sb29wLiAgKi8NCj4gPiA+ID4g LSAgICAgIGdwaGlfaXRlcmF0b3IgZ3NpX29yaWcsIGdzaV9uZXc7DQo+ID4gPiA+IC0gICAgICBl ZGdlIG9yaWdfZSA9IGxvb3BfcHJlaGVhZGVyX2VkZ2UgKGxvb3ApOw0KPiA+ID4gPiAtICAgICAg ZWRnZSBuZXdfZSA9IGxvb3BfcHJlaGVhZGVyX2VkZ2UgKG5ld19sb29wKTsNCj4gPiA+ID4gLQ0K PiA+ID4gPiAtICAgICAgZm9yIChnc2lfb3JpZyA9IGdzaV9zdGFydF9waGlzIChsb29wLT5oZWFk ZXIpLA0KPiA+ID4gPiAtCSAgIGdzaV9uZXcgPSBnc2lfc3RhcnRfcGhpcyAobmV3X2xvb3AtPmhl YWRlcik7DQo+ID4gPiA+IC0JICAgIWdzaV9lbmRfcCAoZ3NpX29yaWcpICYmICFnc2lfZW5kX3Ag KGdzaV9uZXcpOw0KPiA+ID4gPiAtCSAgIGdzaV9uZXh0ICgmZ3NpX29yaWcpLCBnc2lfbmV4dCAo JmdzaV9uZXcpKQ0KPiA+ID4gPiArICAgICAgZm9yIChlZGdlIGUgOiBnZXRfbG9vcF9leGl0X2Vk Z2VzICh1cGRhdGVfbG9vcCkpDQo+ID4gPiA+ICAJew0KPiA+ID4gPiAtCSAgZ3BoaSAqb3JpZ19w aGkgPSBnc2lfb3JpZy5waGkgKCk7DQo+ID4gPiA+IC0JICBncGhpICpuZXdfcGhpID0gZ3NpX25l dy5waGkgKCk7DQo+ID4gPiA+IC0JICB0cmVlIG9yaWdfYXJnID0gUEhJX0FSR19ERUZfRlJPTV9F REdFIChvcmlnX3BoaSwgb3JpZ19lKTsNCj4gPiA+ID4gLQkgIGxvY2F0aW9uX3Qgb3JpZ19sb2N1 cw0KPiA+ID4gPiAtCSAgICA9IGdpbXBsZV9waGlfYXJnX2xvY2F0aW9uX2Zyb21fZWRnZSAob3Jp Z19waGksIG9yaWdfZSk7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQkgIGFkZF9waGlfYXJnIChuZXdf cGhpLCBvcmlnX2FyZywgbmV3X2UsIG9yaWdfbG9jdXMpOw0KPiA+ID4gPiArCSAgZWRnZSBleDsN Cj4gPiA+ID4gKwkgIGVkZ2VfaXRlcmF0b3IgZWk7DQo+ID4gPiA+ICsJICBGT1JfRUFDSF9FREdF IChleCwgZWksIGUtPmRlc3QtPnN1Y2NzKQ0KPiA+ID4gPiArCSAgICB7DQo+ID4gPiA+ICsJICAg ICAgLyogRmluZCB0aGUgZmlyc3Qgbm9uLWZhbGx0aHJvdWdoIGJsb2NrIGFzIGZhbGwtdGhyb3Vn aHMgY2FuJ3QNCj4gPiA+ID4gKwkJIGRvbWluYXRlIG90aGVyIGJsb2Nrcy4gICovDQo+ID4gPiA+ ICsJICAgICAgd2hpbGUgKChleC0+ZmxhZ3MgJiBFREdFX0ZBTExUSFJVKQ0KPiANCj4gRm9yIHRo ZSBwcm9sb2d1ZSBwZWVsaW5nIGFueSBlYXJseSBleGl0IHdlIHRha2Ugd291bGQgc2tpcCBhbGwg b3RoZXINCj4gbG9vcHMgc28gd2UgY2FuIHNpbXBseSBsZWF2ZSB0aGVtIGFuZCB0aGVpciBMQyBQ SEkgbm9kZXMgaW4gcGxhY2UuDQo+IFdlIG5lZWQgZXh0cmEgUEhJcyBvbmx5IG9uIHRoZSBwYXRo IHRvIHRoZSBtYWluIHZlY3RvciBsb29wLiAgSQ0KPiB0aGluayB0aGUgY29tbWVudCBpc24ndCBh Y2N1cmF0ZWx5IHJlZmxlY3Rpbmcgd2hhdCB3ZSBkby4gIEluDQo+IGZhY3Qgd2UgZG8gbm90IGFk ZCBhbnkgTEMgUEhJIG5vZGVzIGhlcmUgYnV0IHNpbXBseSBhZGp1c3QgdGhlDQo+IG1haW4gbG9v cCBoZWFkZXIgUEhJIGFyZ3VtZW50cz8NCg0KWWVhaCB3ZSBkb24ndCBjcmVhdGUgYW55IG5ldyBu b2RlcyBhZnRlciBwZWVsaW5nIGluIHRoaXMgdmVyc2lvbi4NCg0KPiANCj4gPiA+IEkgZG9uJ3Qg dGhpbmsgRURHRV9GQUxMVEhSVSBpcyBzZXQgY29ycmVjdGx5LCB3aGF0J3Mgd3Jvbmcgd2l0aA0K PiA+ID4ganVzdCB1c2luZyBzaW5nbGVfc3VjY19wIGhlcmU/ICBBIGZhbGx0aHJ1IGVkZ2Ugc3Jj IGRvbWluYXRlcyB0aGUNCj4gPiA+IGZhbGx0aHJ1IGVkZ2UgZGVzdCwgc28gdGhlIHNlbnRlbmNl IGFib3ZlIGRvZXNuJ3QgbWFrZSBzZW5zZS4NCj4gPg0KPiA+IEkgd2FudGVkIHRvIHNheSwgdGhh dCB0aGUgaW1tZWRpYXRlIGRvbWluYXRvciBvZiBhIGJsb2NrIGlzIG5ldmVyDQo+ID4gYW4gZmFs bCB0aHJvdWdoIGJsb2NrLiAgQXQgbGVhc3QgZnJvbSB3aGF0IEkgdW5kZXJzdG9vZCBmcm9tIGhv dw0KPiA+IHRoZSBkb21pbmF0b3JzIGFyZSBjYWxjdWxhdGVkIGluIHRoZSBjb2RlLCB0aG91Z2gg bWF5IGhhdmUgbWlzc2VkDQo+ID4gc29tZXRoaW5nLg0KPiANCj4gIEJCMQ0KPiAgIHwNCj4gIEJC Mg0KPiAgIHwNCj4gIEJCMw0KPiANCj4gaGVyZSB0aGUgaW1tZWRpYXRlIGRvbWluYXRvciBvZiBC QjMgaXMgQkIyIGFuZCB0aGF0IG9mIEJCMiBpcyBCQjEuDQo+IA0KPiA+ID4NCj4gPiA+ID4gKwkJ ICAgICAmJiBzaW5nbGVfc3VjY19wIChleC0+ZGVzdCkpDQo+ID4gPiA+ICsJCXsNCj4gPiA+ID4g KwkJICBkb21zLnNhZmVfcHVzaCAoZXgtPmRlc3QpOw0KPiA+ID4gPiArCQkgIGV4ID0gc2luZ2xl X3N1Y2NfZWRnZSAoZXgtPmRlc3QpOw0KPiA+ID4gPiArCQl9DQo+ID4gPiA+ICsJICAgICAgZG9t cy5zYWZlX3B1c2ggKGV4LT5kZXN0KTsNCj4gPiA+ID4gKwkgICAgfQ0KPiA+ID4gPiArCSAgZG9t cy5zYWZlX3B1c2ggKGUtPmRlc3QpOw0KPiA+ID4gPiAgCX0NCj4gPiA+ID4gLSAgICB9DQo+ID4g PiA+DQo+ID4gPiA+ICsgICAgICBpdGVyYXRlX2ZpeF9kb21pbmF0b3JzIChDRElfRE9NSU5BVE9S UywgZG9tcywgZmFsc2UpOw0KPiA+ID4gPiArICAgICAgaWYgKHVwZGF0ZWRfZG9tcykNCj4gPiA+ ID4gKwl1cGRhdGVkX2RvbXMtPnNhZmVfc3BsaWNlIChkb21zKTsNCj4gPiA+ID4gKyAgICB9DQo+ ID4gPiA+ICAgIGZyZWUgKG5ld19iYnMpOw0KPiA+ID4gPiAgICBmcmVlIChiYnMpOw0KPiA+ID4g Pg0KPiA+ID4gPiBAQCAtMTc3Nyw2ICsxOTI0LDkgQEAgc2xwZWVsX2Nhbl9kdXBsaWNhdGVfbG9v cF9wIChjb25zdA0KPiA+ID4gbG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLCBjb25zdF9lZGdlIGUp DQo+ID4gPiA+ICAgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGxvb3BfZXhpdF9nc2kgPSBnc2lfbGFz dF9iYiAoZXhpdF9lLT5zcmMpOw0KPiA+ID4gPiAgICB1bnNpZ25lZCBpbnQgbnVtX2JiID0gbG9v cC0+aW5uZXI/IDUgOiAyOw0KPiA+ID4gPg0KPiA+ID4gPiArICBpZiAoTE9PUF9WSU5GT19FQVJM WV9CUkVBS1MgKGxvb3BfdmluZm8pKQ0KPiA+ID4gPiArICAgIG51bV9iYiArPSBMT09QX1ZJTkZP X0FMVF9FWElUUyAobG9vcF92aW5mbykubGVuZ3RoICgpOw0KPiA+ID4gPiArDQo+ID4gPg0KPiA+ ID4gSSB0aGluayBjaGVja2luZyB0aGUgbnVtYmVyIG9mIEJCcyBpcyBvZGQsIEkgZG9uJ3QgcmVt ZW1iZXIgYW55dGhpbmcNCj4gPiA+IGluIHNscGVlbCBpcyBzcGVjaWZpY2FsbHkgdGllZCB0byB0 aGF0PyAgSSB0aGluayB3ZSBjYW4gc2ltcGx5IGRyb3ANCj4gPiA+IHRoaXMgb3IgZG8geW91IHJl bWVtYmVyIGFueXRoaW5nIHRoYXQgd291bGQgZGVwZW5kIG9uIC0+bnVtX25vZGVzDQo+ID4gPiBi ZWluZyBvbmx5IGV4YWN0bHkgNSBvciAyPw0KPiA+DQo+ID4gTmV2ZXIgYWN0dWFsbHkgc2VlbWVk IHRvIHJlcXVpcmUgaXQsIGJ1dCB0aGV5J3JlIHVzZWQgYXMgc29tZSBjaGVjayB0bw0KPiA+IHNl ZSBpZiB0aGVyZSBhcmUgdW5leHBlY3RlZCBjb250cm9sIGZsb3cgaW4gdGhlIGxvb3AuDQo+ID4N Cj4gPiBpLmUuIHRoaXMgd291bGQgc2F5IG5vIGlmIHlvdSBoYXZlIGFuIGlmIHN0YXRlbWVudCBp biB0aGUgbG9vcCB0aGF0IHdhc24ndA0KPiA+IGNvbnZlcnRlZC4gIFRoZSBvdGhlciBwYXJ0IG9m IHRoaXMgYW5kIHRoZSBhY2NvbXBhbnlpbmcgZXhwbGFuYXRpb24gaXMgaW4NCj4gPiB2ZWN0X2Fu YWx5emVfbG9vcF9mb3JtLiAgSW4gdGhlIHBhdGNoIHNlcmllcyBJIGhhZCB0byByZW1vdmUgdGhl IGhhcmQNCj4gPiBudW1fbm9kZXMgPT0gMiBjaGVjayBmcm9tIHRoZXJlIGJlY2F1c2UgbnVtYmVy IG9mIG5vZGVzIHJlc3RyaWN0ZWQNCj4gPiB0aGluZ3MgdG9vIG11Y2guICBJZiB5b3UgaGF2ZSBh biBlbXB0eSBmYWxsIHRocm91Z2ggYmxvY2ssIHdoaWNoIHNlZW1zIHRvDQo+ID4gaGFwcGVuIG9m dGVuIGJldHdlZW4gdGhlIG1haW4gZXhpdCBhbmQgdGhlIGxhdGNoIGJsb2NrIHRoZW4gd2UnZCBu b3QNCj4gPiB2ZWN0b3JpemUuDQo+ID4NCj4gPiBTbyBpbnN0ZWFkIEkgbm93IHJlamVjdHMgbG9v cHMgYWZ0ZXIgYW5hbHl6aW5nIHRoZSBnY29uZC4gIFNvIHRoaW5rIHRoaXMgY2hlY2sNCj4gPiBj YW4gZ28vbmVlZHMgdG8gYmUgZGlmZmVyZW50Lg0KPiANCj4gTGV0cyByZW1vdmUgaXQgZnJvbSB0 aGlzIGZ1bmN0aW9uIHRoZW4uDQoNCk9rLCBJIGNhbiByZW1vdmUgaXQgZnJvbSB0aGUgb3V0ZXJs b29wIHZlY3QgdGhlbiB0b28sIHNpbmNlIGl0J3MgbW9zdGx5IGRlYWQgY29kZS4NCldpbGwgZG8g c28gYW5kIHJlZy10ZXN0IHRoYXQgYXMgd2VsbC4NCg0KPiANCj4gPiA+DQo+ID4gPiA+ICAgIC8q IEFsbCBsb29wcyBoYXZlIGFuIG91dGVyIHNjb3BlOyB0aGUgb25seSBjYXNlIGxvb3AtPm91dGVy IGlzIE5VTEwgaXMgZm9yDQo+ID4gPiA+ICAgICAgIHRoZSBmdW5jdGlvbiBpdHNlbGYuICAqLw0K PiA+ID4gPiAgICBpZiAoIWxvb3Bfb3V0ZXIgKGxvb3ApDQo+ID4gPiA+IEBAIC0yMDQ0LDYgKzIx OTQsMTEgQEAgdmVjdF91cGRhdGVfaXZzX2FmdGVyX3ZlY3Rvcml6ZXINCj4gPiA+IChsb29wX3Zl Y19pbmZvIGxvb3BfdmluZm8sDQo+ID4gPiA+ICAgIGNsYXNzIGxvb3AgKmxvb3AgPSBMT09QX1ZJ TkZPX0xPT1AgKGxvb3BfdmluZm8pOw0KPiA+ID4gPiAgICBiYXNpY19ibG9jayB1cGRhdGVfYmIg PSB1cGRhdGVfZS0+ZGVzdDsNCj4gPiA+ID4NCj4gPiA+ID4gKyAgLyogRm9yIGVhcmx5IGV4aXRz IHdlJ2xsIHVwZGF0ZSB0aGUgSVZzIGluDQo+ID4gPiA+ICsgICAgIHZlY3RfdXBkYXRlX2l2c19h ZnRlcl9lYXJseV9icmVhay4gICovDQo+ID4gPiA+ICsgIGlmIChMT09QX1ZJTkZPX0VBUkxZX0JS RUFLUyAobG9vcF92aW5mbykpDQo+ID4gPiA+ICsgICAgcmV0dXJuOw0KPiA+ID4gPiArDQo+ID4g PiA+ICAgIGJhc2ljX2Jsb2NrIGV4aXRfYmIgPSBMT09QX1ZJTkZPX0lWX0VYSVQgKGxvb3Bfdmlu Zm8pLT5kZXN0Ow0KPiA+ID4gPg0KPiA+ID4gPiAgICAvKiBNYWtlIHN1cmUgdGhlcmUgZXhpc3Rz IGEgc2luZ2xlLXByZWRlY2Vzc29yIGV4aXQgYmI6ICAqLw0KPiA+ID4gPiBAQCAtMjEzMSw2ICsy Mjg2LDIwOCBAQCB2ZWN0X3VwZGF0ZV9pdnNfYWZ0ZXJfdmVjdG9yaXplcg0KPiA+ID4gKGxvb3Bf dmVjX2luZm8gbG9vcF92aW5mbywNCj4gPiA+ID4gICAgICAgIC8qIEZpeCBwaGkgZXhwcmVzc2lv bnMgaW4gdGhlIHN1Y2Nlc3NvciBiYi4gICovDQo+ID4gPiA+ICAgICAgICBhZGp1c3RfcGhpX2Fu ZF9kZWJ1Z19zdG10cyAocGhpMSwgdXBkYXRlX2UsIG5pX25hbWUpOw0KPiA+ID4gPiAgICAgIH0N Cj4gPiA+ID4gKyAgcmV0dXJuOw0KPiA+ID4NCj4gPiA+IHdlIGRvbid0IHVzdWFsbHkgcGxhY2Ug YSByZXR1cm4gYXQgdGhlIGVuZCBvZiB2b2lkIGZ1bmN0aW9ucw0KPiA+ID4NCj4gPiA+ID4gK30N Cj4gPiA+ID4gKw0KPiA+ID4gPiArLyogICBGdW5jdGlvbiB2ZWN0X3VwZGF0ZV9pdnNfYWZ0ZXJf ZWFybHlfYnJlYWsuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgIkFkdmFuY2UiIHRoZSBpbmR1 Y3Rpb24gdmFyaWFibGVzIG9mIExPT1AgdG8gdGhlIHZhbHVlIHRoZXkgc2hvdWxkDQo+IHRha2UN Cj4gPiA+ID4gKyAgICAgYWZ0ZXIgdGhlIGV4ZWN1dGlvbiBvZiBMT09QLiAgVGhpcyBpcyBjdXJy ZW50bHkgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlDQo+ID4gPiA+ICsgICAgIHZlY3Rvcml6ZXIgZG9l cyBub3QgaGFuZGxlIGluZHVjdGlvbiB2YXJpYWJsZXMgdGhhdCBhcmUgdXNlZCBhZnRlciB0aGUN Cj4gPiA+ID4gKyAgICAgbG9vcC4gIFN1Y2ggYSBzaXR1YXRpb24gb2NjdXJzIHdoZW4gdGhlIGxh c3QgaXRlcmF0aW9ucyBvZiBMT09QIGFyZQ0KPiA+ID4gPiArICAgICBwZWVsZWQsIGJlY2F1c2Ug b2YgdGhlIGVhcmx5IGV4aXQuICBXaXRoIGFuIGVhcmx5IGV4aXQgd2UgYWx3YXlzIHBlZWwNCj4g dGhlDQo+ID4gPiA+ICsgICAgIGxvb3AuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgSW5wdXQ6 DQo+ID4gPiA+ICsgICAgIC0gTE9PUF9WSU5GTyAtIGEgbG9vcCBpbmZvIHN0cnVjdHVyZSBmb3Ig dGhlIGxvb3AgdGhhdCBpcyBnb2luZyB0byBiZQ0KPiA+ID4gPiArCQkgICAgdmVjdG9yaXplZC4g VGhlIGxhc3QgZmV3IGl0ZXJhdGlvbnMgb2YgTE9PUCB3ZXJlIHBlZWxlZC4NCj4gPiA+ID4gKyAg ICAgLSBMT09QIC0gYSBsb29wIHRoYXQgaXMgZ29pbmcgdG8gYmUgdmVjdG9yaXplZC4gVGhlIGxh c3QgZmV3IGl0ZXJhdGlvbnMNCj4gPiA+ID4gKwkgICAgICBvZiBMT09QIHdlcmUgcGVlbGVkLg0K PiA+ID4gPiArICAgICAtIFZGIC0gVGhlIGxvb3AgdmVjdG9yaXphdGlvbiBmYWN0b3IuDQo+ID4g PiA+ICsgICAgIC0gTklURVJTX09SSUcgLSB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgdGhhdCBM T09QIGV4ZWN1dGVzIChiZWZvcmUNCj4gaXQgaXMNCj4gPiA+ID4gKwkJICAgICB2ZWN0b3JpemVk KS4gaS5lLCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBpdnMgc2hvdWxkIGJlDQo+ID4gPiA+ICsJ CSAgICAgYnVtcGVkLg0KPiA+ID4gPiArICAgICAtIE5JVEVSU19WRUNUT1IgLSBUaGUgbnVtYmVy IG9mIGl0ZXJhdGlvbnMgdGhhdCB0aGUgdmVjdG9yIExPT1ANCj4gPiA+IGV4ZWN1dGVzLg0KPiA+ ID4gPiArICAgICAtIFVQREFURV9FIC0gYSBzdWNjZXNzb3IgZWRnZSBvZiBMT09QLT5leGl0IHRo YXQgaXMgb24gdGhlIChvbmx5KQ0KPiBwYXRoDQo+ID4gPiA+ICsJCSAgY29taW5nIG91dCBmcm9t IExPT1Agb24gd2hpY2ggdGhlcmUgYXJlIHVzZXMgb2YgdGhlIExPT1ANCj4gPiA+IGl2cw0KPiA+ ID4gPiArCQkgICh0aGlzIGlzIHRoZSBwYXRoIGZyb20gTE9PUC0+ZXhpdCB0byBlcGlsb2dfbG9v cC0+cHJlaGVhZGVyKS4NCj4gPiA+ID4gKw0KPiA+ID4gPiArCQkgIFRoZSBuZXcgZGVmaW5pdGlv bnMgb2YgdGhlIGl2cyBhcmUgcGxhY2VkIGluIExPT1AtPmV4aXQuDQo+ID4gPiA+ICsJCSAgVGhl IHBoaSBhcmdzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZWRnZSBVUERBVEVfRSBpbiB0aGUgYmINCj4g PiA+ID4gKwkJICBVUERBVEVfRS0+ZGVzdCBhcmUgdXBkYXRlZCBhY2NvcmRpbmdseS4NCj4gPiA+ ID4gKw0KPiA+ID4gPiArICAgICBPdXRwdXQ6DQo+ID4gPiA+ICsgICAgICAgLSBJZiBhdmFpbGFi bGUsIHRoZSBMQ1NTQSBwaGkgbm9kZSBmb3IgdGhlIGxvb3AgSVYgdGVtcC4NCj4gPiA+ID4gKw0K PiA+ID4gPiArICAgICBBc3N1bXB0aW9uIDE6IExpa2UgdGhlIHJlc3Qgb2YgdGhlIHZlY3Rvcml6 ZXIsIHRoaXMgZnVuY3Rpb24gYXNzdW1lcw0KPiA+ID4gPiArICAgICBhIHNpbmdsZSBsb29wIGV4 aXQgdGhhdCBoYXMgYSBzaW5nbGUgcHJlZGVjZXNzb3IuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAg ICAgQXNzdW1wdGlvbiAyOiBUaGUgcGhpIG5vZGVzIGluIHRoZSBMT09QIGhlYWRlciBhbmQgaW4g dXBkYXRlX2JiDQo+IGFyZQ0KPiA+ID4gPiArICAgICBvcmdhbml6ZWQgaW4gdGhlIHNhbWUgb3Jk ZXIuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgQXNzdW1wdGlvbiAzOiBUaGUgYWNjZXNzIGZ1 bmN0aW9uIG9mIHRoZSBpdnMgaXMgc2ltcGxlIGVub3VnaCAoc2VlDQo+ID4gPiA+ICsgICAgIHZl Y3RfY2FuX2FkdmFuY2VfaXZzX3ApLiAgVGhpcyBhc3N1bXB0aW9uIHdpbGwgYmUgcmVsYXhlZCBp biB0aGUNCj4gZnV0dXJlLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgIEFzc3VtcHRpb24gNDog RXhhY3RseSBvbmUgb2YgdGhlIHN1Y2Nlc3NvcnMgb2YgTE9PUCBleGl0LWJiIGlzIG9uIGENCj4g cGF0aA0KPiA+ID4gPiArICAgICBjb21pbmcgb3V0IG9mIExPT1Agb24gd2hpY2ggdGhlIGl2cyBv ZiBMT09QIGFyZSB1c2VkICh0aGlzIGlzIHRoZQ0KPiBwYXRoDQo+ID4gPiA+ICsgICAgIHRoYXQg bGVhZHMgdG8gdGhlIGVwaWxvZyBsb29wOyBvdGhlciBwYXRocyBza2lwIHRoZSBlcGlsb2cgbG9v cCkuICBUaGlzDQo+ID4gPiA+ICsgICAgIHBhdGggc3RhcnRzIHdpdGggdGhlIGVkZ2UgVVBEQVRF X0UsIGFuZCBpdHMgZGVzdGluYXRpb24gKGRlbm90ZWQNCj4gPiA+IHVwZGF0ZV9iYikNCj4gPiA+ ID4gKyAgICAgbmVlZHMgdG8gaGF2ZSBpdHMgcGhpcyB1cGRhdGVkLg0KPiA+ID4gPiArICovDQo+ ID4gPiA+ICsNCj4gPiA+ID4gK3N0YXRpYyB0cmVlDQo+ID4gPiA+ICt2ZWN0X3VwZGF0ZV9pdnNf YWZ0ZXJfZWFybHlfYnJlYWsgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywgY2xhc3MNCj4gbG9v cCAqDQo+ID4gPiBlcGlsb2csDQo+ID4gPiA+ICsJCQkJICAgcG9seV9pbnQ2NCB2ZiwgdHJlZSBu aXRlcnNfb3JpZywNCj4gPiA+ID4gKwkJCQkgICB0cmVlIG5pdGVyc192ZWN0b3IsIGVkZ2UgdXBk YXRlX2UpDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsgIGlmICghTE9PUF9WSU5GT19FQVJMWV9CUkVB S1MgKGxvb3BfdmluZm8pKQ0KPiA+ID4gPiArICAgIHJldHVybiBOVUxMOw0KPiA+ID4gPiArDQo+ ID4gPiA+ICsgIGdwaGlfaXRlcmF0b3IgZ3NpLCBnc2kxOw0KPiA+ID4gPiArICB0cmVlIG5pX25h bWUsIGl2dG1wID0gTlVMTDsNCj4gPiA+ID4gKyAgYmFzaWNfYmxvY2sgdXBkYXRlX2JiID0gdXBk YXRlX2UtPmRlc3Q7DQo+ID4gPiA+ICsgIHZlYzxlZGdlPiBhbHRfZXhpdHMgPSBMT09QX1ZJTkZP X0FMVF9FWElUUyAobG9vcF92aW5mbyk7DQo+ID4gPiA+ICsgIGVkZ2UgbG9vcF9pdiA9IExPT1Bf VklORk9fSVZfRVhJVCAobG9vcF92aW5mbyk7DQo+ID4gPiA+ICsgIGJhc2ljX2Jsb2NrIGV4aXRf YmIgPSBsb29wX2l2LT5kZXN0Ow0KPiA+ID4gPiArICBjbGFzcyBsb29wICpsb29wID0gTE9PUF9W SU5GT19MT09QIChsb29wX3ZpbmZvKTsNCj4gPiA+ID4gKyAgZ2NvbmQgKmNvbmQgPSBMT09QX1ZJ TkZPX0xPT1BfSVZfQ09ORCAobG9vcF92aW5mbyk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgZ2Nj X2Fzc2VydCAoY29uZCk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgZm9yIChnc2kgPSBnc2lfc3Rh cnRfcGhpcyAobG9vcC0+aGVhZGVyKSwgZ3NpMSA9IGdzaV9zdGFydF9waGlzDQo+ICh1cGRhdGVf YmIpOw0KPiA+ID4gPiArICAgICAgICFnc2lfZW5kX3AgKGdzaSkgJiYgIWdzaV9lbmRfcCAoZ3Np MSk7DQo+ID4gPiA+ICsgICAgICAgZ3NpX25leHQgKCZnc2kpLCBnc2lfbmV4dCAoJmdzaTEpKQ0K PiA+ID4gPiArICAgIHsNCj4gPiA+ID4gKyAgICAgIHRyZWUgaW5pdF9leHByLCBmaW5hbF9leHBy LCBzdGVwX2V4cHI7DQo+ID4gPiA+ICsgICAgICB0cmVlIHR5cGU7DQo+ID4gPiA+ICsgICAgICB0 cmVlIHZhciwgbmksIG9mZjsNCj4gPiA+ID4gKyAgICAgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGxh c3RfZ3NpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgICBncGhpICpwaGkgPSBnc2kxLnBoaSAo KTsNCj4gPiA+ID4gKyAgICAgIHRyZWUgcGhpX3NzYSA9IFBISV9BUkdfREVGX0ZST01fRURHRSAo cGhpLA0KPiBsb29wX3ByZWhlYWRlcl9lZGdlDQo+ID4gPiAoZXBpbG9nKSk7DQo+ID4gPg0KPiA+ ID4gSSdtIGNvbmZ1c2VkIGFib3V0IHRoZSBzZXR1cC4gIHVwZGF0ZV9iYiBsb29rcyBsaWtlIHRo ZSBibG9jayB3aXRoIHRoZQ0KPiA+ID4gbG9vcC1jbG9zZWQgUEhJIG5vZGVzIG9mICdsb29wJyBh bmQgdGhlIGV4aXQgKHVwZGF0ZV9lKT8gIEhvdyBkb2VzDQo+ID4gPiBsb29wX3ByZWhlYWRlcl9l ZGdlIChlcGlsb2cpIGNvbWUgaW50byBwbGF5IGhlcmU/ICBUaGF0IHdvdWxkIGZlZWQgaW50bw0K PiA+ID4gZXBpbG9nLT5oZWFkZXIgUEhJcz8hDQo+ID4NCj4gPiBXZSBjYW4ndCBxdWVyeSB0aGUg dHlwZSBvZiB0aGUgcGhpcyBpbiB0aGUgYmxvY2sgd2l0aCB0aGUgTEMgUEhJIG5vZGVzLCBzbyB0 aGUNCj4gPiBUeXBpY2FsIHBhdHRlcm4gc2VlbXMgdG8gYmUgdGhhdCB3ZSBpdGVyYXRlIG92ZXIg YSBibG9jayB0aGF0J3MgcGFydCBvZiB0aGUNCj4gbG9vcA0KPiA+IGFuZCB0aGF0IHdvdWxkIGhh dmUgdGhlIFBISXMgaW4gdGhlIHNhbWUgb3JkZXIsIGp1c3Qgc28gd2UgY2FuIGdldCB0byB0aGUN Cj4gPiBzdG10X3ZlY19pbmZvLg0KPiA+DQo+ID4gPg0KPiA+ID4gSXQgd291bGQgYmUgbmljZSB0 byBuYW1lICdnc2lbMV0nLCAndXBkYXRlX2UnIGFuZCAndXBkYXRlX2JiJyBpbiBhDQo+ID4gPiBi ZXR0ZXIgd2F5PyAgSXMgdXBkYXRlX2JiIHJlYWxseSBlcGlsb2ctPmhlYWRlcj8hDQo+ID4gPg0K PiA+ID4gV2UncmUgbWlzc2luZyBjaGVja2luZyBpbiBQSElfQVJHX0RFRl9GUk9NX0VER0UsIG5h bWVseSB0aGF0DQo+ID4gPiBFLT5kZXN0ID09IGdpbXBsZV9iYiAoUEhJKSAtIHdlJ3JlIGp1c3Qg dXNpbmcgRS0+ZGVzdF9pZHggdGhlcmUNCj4gPiA+IHdoaWNoICJ3b3JrcyIgZXZlbiBmb3IgdG90 YWxseSB1bnJlbGF0ZWQgZWRnZXMuDQo+ID4gPg0KPiA+ID4gPiArICAgICAgZ3BoaSAqcGhpMSA9 IGR5bl9jYXN0IDxncGhpICo+IChTU0FfTkFNRV9ERUZfU1RNVCAocGhpX3NzYSkpOw0KPiA+ID4g PiArICAgICAgaWYgKCFwaGkxKQ0KPiA+ID4NCj4gPiA+IHNob3VsZG4ndCB0aGF0IGJlIGFuIGFz c2VydD8NCj4gPiA+DQo+ID4gPiA+ICsJY29udGludWU7DQo+ID4gPiA+ICsgICAgICBzdG10X3Zl Y19pbmZvIHBoaV9pbmZvID0gbG9vcF92aW5mby0+bG9va3VwX3N0bXQgKGdzaS5waGkgKCkpOw0K PiA+ID4gPiArICAgICAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0KPiA+ID4gPiArCWR1bXBfcHJp bnRmX2xvYyAoTVNHX05PVEUsIHZlY3RfbG9jYXRpb24sDQo+ID4gPiA+ICsJCQkgInZlY3RfdXBk YXRlX2l2c19hZnRlcl9lYXJseV9icmVhazogcGhpOiAlRyIsDQo+ID4gPiA+ICsJCQkgKGdpbXBs ZSAqKXBoaSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgIC8qIFNraXAgcmVkdWN0aW9uIGFu ZCB2aXJ0dWFsIHBoaXMuICAqLw0KPiA+ID4gPiArICAgICAgaWYgKCFpdl9waGlfcCAocGhpX2lu Zm8pKQ0KPiA+ID4gPiArCXsNCj4gPiA+ID4gKwkgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkNCj4g PiA+ID4gKwkgICAgZHVtcF9wcmludGZfbG9jIChNU0dfTk9URSwgdmVjdF9sb2NhdGlvbiwNCj4g PiA+ID4gKwkJCSAgICAgInJlZHVjIG9yIHZpcnR1YWwgcGhpLiBza2lwLlxuIik7DQo+ID4gPiA+ ICsJICBjb250aW51ZTsNCj4gPiA+ID4gKwl9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgIC8q IEZvciBtdWx0aXBsZSBleGl0cyB3aGVyZSB3ZSBoYW5kbGUgZWFybHkgZXhpdHMgd2UgbmVlZCB0 byBjYXJyeSBvbg0KPiA+ID4gPiArCSB3aXRoIHRoZSBwcmV2aW91cyBJViBhcyBsb29wIGl0ZXJh dGlvbiB3YXMgbm90IGRvbmUgYmVjYXVzZSB3ZSBleGl0ZWQNCj4gPiA+ID4gKwkgZWFybHkuICBB cyBzdWNoIGp1c3QgZ3JhYiB0aGUgb3JpZ2luYWwgSVYuICAqLw0KPiA+ID4gPiArICAgICAgcGhp X3NzYSA9IFBISV9BUkdfREVGX0ZST01fRURHRSAoZ3NpLnBoaSAoKSwgbG9vcF9sYXRjaF9lZGdl DQo+ID4gPiAobG9vcCkpOw0KPiA+ID4NCj4gPiA+IGJ1dCB0aGlzIHNob3VsZCBiZSB0YWtlbiBj YXJlIG9mIGJ5IExDIFNTQT8NCj4gPg0KPiA+IEl0IGlzLCB0aGUgY29tbWVudCBpcyBwcm9iYWJs eSBtaXNzaW5nIGRldGFpbHMsIHRoaXMgcGFydCBqdXN0IHNjYWxlcyB0aGUNCj4gY291bnRlcg0K PiA+IGZyb20gVkYgdG8gc2NhbGFyIGNvdW50cy4gIEl0J3MganVzdCBhIHJlbWluZGVyIHRoYXQg dGhpcyBzY2FsaW5nIGlzIGRvbmUNCj4gZGlmZmVyZW50bHkNCj4gPiBmcm9tIG5vcm1hbCBzaW5n bGUgZXhpdCB2ZWN0b3JpemF0aW9uLg0KPiA+DQo+ID4gPg0KPiA+ID4gT0ssIGhhdmUgdG8gY29u dGludWUgdG9tb3Jyb3cgZnJvbSBoZXJlLg0KPiA+DQo+ID4gQ2hlZXJzLCBUaGFuayB5b3UhDQo+ ID4NCj4gPiBUYW1hcg0KPiA+DQo+ID4gPg0KPiA+ID4gUmljaGFyZC4NCj4gPiA+DQo+ID4gPiA+ ICsgICAgICBpZiAoZ2ltcGxlX2NvbmRfbGhzIChjb25kKSAhPSBwaGlfc3NhDQo+ID4gPiA+ICsJ ICAmJiBnaW1wbGVfY29uZF9yaHMgKGNvbmQpICE9IHBoaV9zc2EpDQo+IA0KPiBzbyB0aGlzIGlz IGEgd2F5IHRvIGF2b2lkIHRvdWNoaW5nIHRoZSBtYWluIElWPyAgTG9va3MgYSBiaXQgZnJhZ2ls ZSB0bw0KPiBtZS4gIEhtbSwgd2UncmUgaXRlcmF0aW5nIG92ZXIgdGhlIG1haW4gbG9vcCBoZWFk ZXIgUEhJcyBoZXJlPw0KPiBDYW4ndCB5b3UgY2hlY2ssIHNheSwgdGhlIHJlbGV2YW5jeSBvZiB0 aGUgUEhJIG5vZGUgaW5zdGVhZD8gIFRob3VnaA0KPiBpdCBtaWdodCBhbHNvIGJlIHVzZWQgYXMg aW5kdWN0aW9uLiAgQ2FuJ3QgaXQgYmUgdXNlZCBhcyBhbHRlcm5hdGUNCj4gZXhpdCBsaWtlDQo+ IA0KPiAgIGZvciAoaSkNCj4gICAgew0KPiAgICAgIGlmIChpICYgYml0KQ0KPiAgICAgICAgYnJl YWs7DQo+ICAgIH0NCj4gDQo+IGFuZCB3b3VsZCB3ZSBuZWVkIHRvIGFkanVzdCAnaScgdGhlbj8N Cg0KSG1tIHlvdSdyZSByaWdodCwgSSBjb3VsZCByZWplY3QgdGhlbSBiYXNlZCBvbiB0aGUgZGVm aW5pdGlvbiBCQiBhbmQgdGhlDQpsb2NhdGlvbiB0aGUgbWFpbiBJViBpcywgdGhhdCdzIHByb2Jh Ymx5IHNhZmVzdC4NCg0KPiANCj4gPiA+ID4gKwl7DQo+ID4gPiA+ICsJICB0eXBlID0gVFJFRV9U WVBFIChnaW1wbGVfcGhpX3Jlc3VsdCAocGhpKSk7DQo+ID4gPiA+ICsJICBzdGVwX2V4cHIgPSBT VE1UX1ZJTkZPX0xPT1BfUEhJX0VWT0xVVElPTl9QQVJUIChwaGlfaW5mbyk7DQo+ID4gPiA+ICsJ ICBzdGVwX2V4cHIgPSB1bnNoYXJlX2V4cHIgKHN0ZXBfZXhwcik7DQo+ID4gPiA+ICsNCj4gPiA+ ID4gKwkgIC8qIFdlIHByZXZpb3VzbHkgZ2VuZXJhdGVkIHRoZSBuZXcgbWVyZ2VkIHBoaSBpbiB0 aGUgc2FtZSBCQiBhcw0KPiA+ID4gdGhlDQo+ID4gPiA+ICsJICAgICBndWFyZC4gIFNvIHVzZSB0 aGF0IHRvIHBlcmZvcm0gdGhlIHNjYWxpbmcgb24gcmF0aGVyIHRoYW4gdGhlDQo+ID4gPiA+ICsJ ICAgICBub3JtYWwgbG9vcCBwaGkgd2hpY2ggZG9uJ3QgdGFrZSB0aGUgZWFybHkgYnJlYWtzIGlu dG8gYWNjb3VudC4gICovDQo+ID4gPiA+ICsJICBmaW5hbF9leHByID0gZ2ltcGxlX3BoaV9yZXN1 bHQgKHBoaTEpOw0KPiA+ID4gPiArCSAgaW5pdF9leHByID0gUEhJX0FSR19ERUZfRlJPTV9FREdF IChnc2kucGhpICgpLA0KPiA+ID4gbG9vcF9wcmVoZWFkZXJfZWRnZSAobG9vcCkpOw0KPiA+ID4g PiArDQo+ID4gPiA+ICsJICB0cmVlIHN0eXBlID0gVFJFRV9UWVBFIChzdGVwX2V4cHIpOw0KPiA+ ID4gPiArCSAgLyogRm9yIGVhcmx5IGJyZWFrIHRoZSBmaW5hbCBsb29wIElWIGlzOg0KPiA+ID4g PiArCSAgICAgaW5pdCArIChmaW5hbCAtIGluaXQpICogdmYgd2hpY2ggdGFrZXMgaW50byBhY2Nv dW50IHBlZWxpbmcNCj4gPiA+ID4gKwkgICAgIHZhbHVlcyBhbmQgbm9uLXNpbmdsZSBzdGVwcy4g ICovDQo+ID4gPiA+ICsJICBvZmYgPSBmb2xkX2J1aWxkMiAoTUlOVVNfRVhQUiwgc3R5cGUsDQo+ ID4gPiA+ICsJCQkgICAgIGZvbGRfY29udmVydCAoc3R5cGUsIGZpbmFsX2V4cHIpLA0KPiA+ID4g PiArCQkJICAgICBmb2xkX2NvbnZlcnQgKHN0eXBlLCBpbml0X2V4cHIpKTsNCj4gPiA+ID4gKwkg IC8qIE5vdyBhZGp1c3QgZm9yIFZGIHRvIGdldCB0aGUgZmluYWwgaXRlcmF0aW9uIHZhbHVlLiAg Ki8NCj4gPiA+ID4gKwkgIG9mZiA9IGZvbGRfYnVpbGQyIChNVUxUX0VYUFIsIHN0eXBlLCBvZmYs IGJ1aWxkX2ludF9jc3QgKHN0eXBlLCB2ZikpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJICAvKiBB ZGp1c3QgdGhlIHZhbHVlIHdpdGggdGhlIG9mZnNldC4gICovDQo+ID4gPiA+ICsJICBpZiAoUE9J TlRFUl9UWVBFX1AgKHR5cGUpKQ0KPiA+ID4gPiArCSAgICBuaSA9IGZvbGRfYnVpbGRfcG9pbnRl cl9wbHVzIChpbml0X2V4cHIsIG9mZik7DQo+ID4gPiA+ICsJICBlbHNlDQo+ID4gPiA+ICsJICAg IG5pID0gZm9sZF9jb252ZXJ0ICh0eXBlLA0KPiA+ID4gPiArCQkJICAgICAgIGZvbGRfYnVpbGQy IChQTFVTX0VYUFIsIHN0eXBlLA0KPiA+ID4gPiArCQkJCQkgICAgZm9sZF9jb252ZXJ0IChzdHlw ZSwgaW5pdF9leHByKSwNCj4gPiA+ID4gKwkJCQkJICAgIG9mZikpOw0KPiA+ID4gPiArCSAgdmFy ID0gY3JlYXRlX3RtcF92YXIgKHR5cGUsICJ0bXAiKTsNCj4gDQo+IHNvIGhvdyBkb2VzIHRoZSBu b24tZWFybHkgYnJlYWsgY29kZSBkZWFsIHdpdGggdXBkYXRpbmcgaW5kdWN0aW9ucz8NCg0Kbm9u LWVhcmx5IGJyZWFrIGNvZGUgZG9lcyB0aGlzIGVzc2VudGlhbGx5IHRoZSBzYW1lLCBzZWUgdmVj dF91cGRhdGVfaXZzX2FmdGVyX3ZlY3Rvcml6ZXINCndoaWNoIHdhcyBtb2RpZmllZCB0byBza2lw IGVhcmx5IGV4aXRzLiAgVGhlIG1ham9yIGRpZmZlcmVuY2UgaXMgdGhhdCBvbiBhIG5vbi1lYXJs eQ0KZXhpdCB0aGUgdmFsdWUgY2FuIGp1c3QgYmUgYWRqdXN0ZWQgbGluZWFybHk6IGlfc2NhbGFy ID0gaV92ZWN0ICogVkYgKyBpbml0IGFuZCBwZWVsaW5nIGlzIHRha2VuDQppbnRvIGFjY291bnQg YnkgdmVjdF9wZWVsX25vbmxpbmVhcl9pdl9pbml0LiANCg0KSSB3YW50ZWQgdG8ga2VlcCB0aGVt IHNlcGFyYXRlbHkgYXMgdGhlcmUncyBhIHNpZ25pZmljYW50IGVub3VnaCBkaWZmZXJlbmNlIGlu IHRoZQ0KY2FsY3VsYXRpb24gb2YgdGhlIGxvb3AgYm9kaWVzIHRoZW1zZWx2ZXMgdGhhdCBoYXZp bmcgb25lIGZ1bmN0aW9uIGJlY2FtZSB1bndpZWxkeS4NCg0KVGhhdCBhbmQgd2UgZG9uJ3Qgc3Vw cG9ydCBhbGwgb2YgdGhlIGluZHVjdGlvbiBzdGVwcyBhIG5vbi1lYXJseSBleGl0IHN1cHBvcnRz IHNvIEkgaW5saW5lZA0KYSBzaW1wbGVyIGNhbGN1bGF0aW9uLg0KDQpOb3cgdGhlcmUncyBhIGJp ZyBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG5vcm1hbCBsb29wIHZlY3Rvcml6YXRpb24gYW5kIGVh cmx5IGJyZWFrLg0KRHVyaW5nIHRoZSBtYWluIGxvb3AgdmVjdG9yaXphdGlvbiB0aGUgaXZ0bXAg aXMgYWRqdXN0ZWQgZm9yIHBlZWxpbmcuICBUaGF0IGlzIHRoZSBhbW91bnQgaXMNCmFscmVhZHkg YWRqdXN0ZWQgaW4gdGhlIHBoaSBub2RlIGl0c2VsZi4NCg0KRm9yIGVhcmx5IGJyZWFrIHRoaXMg aXNuJ3QgZG9uZSBiZWNhdXNlIHRoZSBib3VuZHMgYXJlIGZpeGVkLCBpLmUuIGZvciBldmVyeSBl eGl0IHdlIGNhbiBhdA0KbW9zdCBkbyBWRiBpdGVyYXRpb25zLg0KDQo+IEFuZCBob3cgZG8geW91 IGF2b2lkIGFsdGVyaW5nIHRoaXMgd2hlbiB3ZSBmbG93IGluIGZyb20gdGhlIG5vcm1hbA0KPiBl eGl0PyAgVGhhdCBpcywgeW91IGFyZSB1cGRhdGluZyB0aGUgdmFsdWUgaW4gdGhlIGVwaWxvZyBs b29wDQo+IGhlYWRlciBidXQgZG9uJ3QgeW91IG5lZWQgdG8gaW5zdGVhZCB1cGRhdGUgdGhlIHZh bHVlIG9ubHkgb24NCj4gdGhlIGFsdGVybmF0ZSBleGl0IGVkZ2VzIGZyb20gdGhlIG1haW4gbG9v cCAoYW5kIGtlZXAgdGhlIG5vdA0KPiB1cGRhdGVkIHZhbHVlIG9uIHRoZSBtYWluIGV4aXQgZWRn ZSk/DQoNCkJlY2F1c2UgdGhlIGl2dG1wcyBoYXMgbm90IGJlZW4gYWRqdXN0ZWQgZm9yIHBlZWxp bmcsIHdlIGFkanVzdCBmb3IgaXQgaGVyZS4gIFRoaXMgYWxsb3dzIHVzDQp0byBoYXZlIHRoZSBz YW1lIHVwZGF0ZSByZXF1aXJlZCBmb3IgYWxsIGV4aXRzLCBzbyBJIGRvbid0IGhhdmUgdG8gZGlm ZmVyZW50aWF0ZSBiZXR3ZWVuIHRoZQ0KdHdvIGhlcmUgYmVjYXVzZSBJIGRpZG4ndCBkbyBzbyBk dXJpbmcgY3JlYXRpb24gb2YgdGhlIFBISSBub2RlLg0KDQo+IA0KPiA+ID4gPiArCSAgbGFzdF9n c2kgPSBnc2lfbGFzdF9iYiAoZXhpdF9iYik7DQo+ID4gPiA+ICsJICBnaW1wbGVfc2VxIG5ld19z dG10cyA9IE5VTEw7DQo+ID4gPiA+ICsJICBuaV9uYW1lID0gZm9yY2VfZ2ltcGxlX29wZXJhbmQg KG5pLCAmbmV3X3N0bXRzLCBmYWxzZSwgdmFyKTsNCj4gPiA+ID4gKwkgIC8qIEV4aXRfYmIgc2hv dWxkbid0IGJlIGVtcHR5LiAgKi8NCj4gPiA+ID4gKwkgIGlmICghZ3NpX2VuZF9wIChsYXN0X2dz aSkpDQo+ID4gPiA+ICsJICAgIGdzaV9pbnNlcnRfc2VxX2FmdGVyICgmbGFzdF9nc2ksIG5ld19z dG10cywgR1NJX1NBTUVfU1RNVCk7DQo+ID4gPiA+ICsJICBlbHNlDQo+ID4gPiA+ICsJICAgIGdz aV9pbnNlcnRfc2VxX2JlZm9yZSAoJmxhc3RfZ3NpLCBuZXdfc3RtdHMsIEdTSV9TQU1FX1NUTVQp Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICsJICAvKiBGaXggcGhpIGV4cHJlc3Npb25zIGluIHRoZSBz dWNjZXNzb3IgYmIuICAqLw0KPiA+ID4gPiArCSAgYWRqdXN0X3BoaV9hbmRfZGVidWdfc3RtdHMg KHBoaSwgdXBkYXRlX2UsIG5pX25hbWUpOw0KPiA+ID4gPiArCX0NCj4gPiA+ID4gKyAgICAgIGVs c2UNCj4gPiA+ID4gKwl7DQo+ID4gPiA+ICsJICB0eXBlID0gVFJFRV9UWVBFIChnaW1wbGVfcGhp X3Jlc3VsdCAocGhpKSk7DQo+ID4gPiA+ICsJICBzdGVwX2V4cHIgPSBTVE1UX1ZJTkZPX0xPT1Bf UEhJX0VWT0xVVElPTl9QQVJUIChwaGlfaW5mbyk7DQo+ID4gPiA+ICsJICBzdGVwX2V4cHIgPSB1 bnNoYXJlX2V4cHIgKHN0ZXBfZXhwcik7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkgIC8qIFdlIHBy ZXZpb3VzbHkgZ2VuZXJhdGVkIHRoZSBuZXcgbWVyZ2VkIHBoaSBpbiB0aGUgc2FtZSBCQiBhcw0K PiA+ID4gdGhlDQo+ID4gPiA+ICsJICAgICBndWFyZC4gIFNvIHVzZSB0aGF0IHRvIHBlcmZvcm0g dGhlIHNjYWxpbmcgb24gcmF0aGVyIHRoYW4gdGhlDQo+ID4gPiA+ICsJICAgICBub3JtYWwgbG9v cCBwaGkgd2hpY2ggZG9uJ3QgdGFrZSB0aGUgZWFybHkgYnJlYWtzIGludG8gYWNjb3VudC4gICov DQo+ID4gPiA+ICsJICBpbml0X2V4cHIgPSBQSElfQVJHX0RFRl9GUk9NX0VER0UgKHBoaTEsIGxv b3BfcHJlaGVhZGVyX2VkZ2UNCj4gPiA+IChsb29wKSk7DQo+ID4gPiA+ICsJICB0cmVlIHN0eXBl ID0gVFJFRV9UWVBFIChzdGVwX2V4cHIpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJICBpZiAodmYu aXNfY29uc3RhbnQgKCkpDQo+ID4gPiA+ICsJICAgIHsNCj4gPiA+ID4gKwkgICAgICBuaSA9IGZv bGRfYnVpbGQyIChNVUxUX0VYUFIsIHN0eXBlLA0KPiA+ID4gPiArCQkJCWZvbGRfY29udmVydCAo c3R5cGUsDQo+ID4gPiA+ICsJCQkJCSAgICAgIG5pdGVyc192ZWN0b3IpLA0KPiA+ID4gPiArCQkJ CWJ1aWxkX2ludF9jc3QgKHN0eXBlLCB2ZikpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJICAgICAg bmkgPSBmb2xkX2J1aWxkMiAoTUlOVVNfRVhQUiwgc3R5cGUsDQo+ID4gPiA+ICsJCQkJZm9sZF9j b252ZXJ0IChzdHlwZSwNCj4gPiA+ID4gKwkJCQkJICAgICAgbml0ZXJzX29yaWcpLA0KPiA+ID4g PiArCQkJCWZvbGRfY29udmVydCAoc3R5cGUsIG5pKSk7DQo+ID4gPiA+ICsJICAgIH0NCj4gPiA+ ID4gKwkgIGVsc2UNCj4gPiA+ID4gKwkgICAgLyogSWYgdGhlIGxvb3AncyBWRiBpc24ndCBjb25z dGFudCB0aGVuIHRoZSBsb29wIG11c3QgaGF2ZSBiZWVuDQo+ID4gPiA+ICsJICAgICAgIG1hc2tl ZCwgc28gYXQgdGhlIGVuZCBvZiB0aGUgbG9vcCB3ZSBrbm93IHdlIGhhdmUgZmluaXNoZWQNCj4g PiA+ID4gKwkgICAgICAgdGhlIGVudGlyZSBsb29wIGFuZCBmb3VuZCBub3RoaW5nLiAgKi8NCj4g PiA+ID4gKwkgICAgbmkgPSBidWlsZF96ZXJvX2NzdCAoc3R5cGUpOw0KPiA+ID4gPiArDQo+ID4g PiA+ICsJICBuaSA9IGZvbGRfY29udmVydCAodHlwZSwgbmkpOw0KPiA+ID4gPiArCSAgLyogV2Ug ZG9uJ3Qgc3VwcG9ydCB2YXJpYWJsZSBuIGluIHRoaXMgdmVyc2lvbiB5ZXQuICAqLw0KPiA+ID4g PiArCSAgZ2NjX2Fzc2VydCAoVFJFRV9DT0RFIChuaSkgPT0gSU5URUdFUl9DU1QpOw0KPiA+ID4g PiArDQo+ID4gPiA+ICsJICB2YXIgPSBjcmVhdGVfdG1wX3ZhciAodHlwZSwgInRtcCIpOw0KPiA+ ID4gPiArDQo+ID4gPiA+ICsJICBsYXN0X2dzaSA9IGdzaV9sYXN0X2JiIChleGl0X2JiKTsNCj4g PiA+ID4gKwkgIGdpbXBsZV9zZXEgbmV3X3N0bXRzID0gTlVMTDsNCj4gPiA+ID4gKwkgIG5pX25h bWUgPSBmb3JjZV9naW1wbGVfb3BlcmFuZCAobmksICZuZXdfc3RtdHMsIGZhbHNlLCB2YXIpOw0K PiA+ID4gPiArCSAgLyogRXhpdF9iYiBzaG91bGRuJ3QgYmUgZW1wdHkuICAqLw0KPiA+ID4gPiAr CSAgaWYgKCFnc2lfZW5kX3AgKGxhc3RfZ3NpKSkNCj4gPiA+ID4gKwkgICAgZ3NpX2luc2VydF9z ZXFfYWZ0ZXIgKCZsYXN0X2dzaSwgbmV3X3N0bXRzLCBHU0lfU0FNRV9TVE1UKTsNCj4gPiA+ID4g KwkgIGVsc2UNCj4gPiA+ID4gKwkgICAgZ3NpX2luc2VydF9zZXFfYmVmb3JlICgmbGFzdF9nc2ks IG5ld19zdG10cywgR1NJX1NBTUVfU1RNVCk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkgIGFkanVz dF9waGlfYW5kX2RlYnVnX3N0bXRzIChwaGkxLCBsb29wX2l2LCBuaV9uYW1lKTsNCj4gPiA+ID4g Kw0KPiA+ID4gPiArCSAgZm9yIChlZGdlIGV4aXQgOiBhbHRfZXhpdHMpDQo+ID4gPiA+ICsJICAg IGFkanVzdF9waGlfYW5kX2RlYnVnX3N0bXRzIChwaGkxLCBleGl0LA0KPiA+ID4gPiArCQkJCQli dWlsZF9pbnRfY3N0IChUUkVFX1RZUEUgKHN0ZXBfZXhwciksDQo+ID4gPiA+ICsJCQkJCQkgICAg ICAgdmYpKTsNCj4gPiA+ID4gKwkgIGl2dG1wID0gZ2ltcGxlX3BoaV9yZXN1bHQgKHBoaTEpOw0K PiA+ID4gPiArCX0NCj4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgcmV0dXJu IGl2dG1wOw0KPiA+ID4gPiAgfQ0KPiA+ID4gPg0KPiA+ID4gPiAgLyogUmV0dXJuIGEgZ2ltcGxl IHZhbHVlIGNvbnRhaW5pbmcgdGhlIG1pc2FsaWdubWVudCAobWVhc3VyZWQgaW4NCj4gdmVjdG9y DQo+ID4gPiA+IEBAIC0yNjMyLDEzNyArMjk4OSwzNCBAQCB2ZWN0X2dlbl92ZWN0b3JfbG9vcF9u aXRlcnNfbXVsdF92Zg0KPiA+ID4gKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywNCj4gPiA+ID4N Cj4gPiA+ID4gIC8qIExDU1NBX1BISSBpcyBhIGxjc3NhIHBoaSBvZiBFUElMT0cgbG9vcCB3aGlj aCBpcyBjb3BpZWQgZnJvbSBMT09QLA0KPiA+ID4gPiAgICAgdGhpcyBmdW5jdGlvbiBzZWFyY2hl cyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgbGNzc2EgcGhpIG5vZGUgaW4gZXhpdA0KPiA+ID4gPiAt ICAgYmIgb2YgTE9PUC4gIElmIGl0IGlzIGZvdW5kLCByZXR1cm4gdGhlIHBoaSByZXN1bHQ7IG90 aGVyd2lzZSByZXR1cm4NCj4gPiA+ID4gLSAgIE5VTEwuICAqLw0KPiA+ID4gPiArICAgYmIgb2Yg TE9PUCBmb2xsb3dpbmcgdGhlIExDU1NBX0VER0UgdG8gdGhlIGV4aXQgbm9kZS4gIElmIGl0IGlz IGZvdW5kLA0KPiA+ID4gPiArICAgcmV0dXJuIHRoZSBwaGkgcmVzdWx0OyBvdGhlcndpc2UgcmV0 dXJuIE5VTEwuICAqLw0KPiA+ID4gPg0KPiA+ID4gPiAgc3RhdGljIHRyZWUNCj4gPiA+ID4gIGZp bmRfZ3VhcmRfYXJnIChjbGFzcyBsb29wICpsb29wLCBjbGFzcyBsb29wICplcGlsb2cNCj4gQVRU UklCVVRFX1VOVVNFRCwNCj4gPiA+ID4gLQkJZ3BoaSAqbGNzc2FfcGhpKQ0KPiA+ID4gPiArCQln cGhpICpsY3NzYV9waGksIGludCBsY3NzYV9lZGdlID0gMCkNCj4gPiA+ID4gIHsNCj4gPiA+ID4g ICAgZ3BoaV9pdGVyYXRvciBnc2k7DQo+ID4gPiA+ICAgIGVkZ2UgZSA9IGxvb3AtPnZlY19sb29w X2l2Ow0KPiA+ID4gPg0KPiA+ID4gPiAtICBnY2NfYXNzZXJ0IChzaW5nbGVfcHJlZF9wIChlLT5k ZXN0KSk7DQo+ID4gPiA+ICAgIGZvciAoZ3NpID0gZ3NpX3N0YXJ0X3BoaXMgKGUtPmRlc3QpOyAh Z3NpX2VuZF9wIChnc2kpOyBnc2lfbmV4dCAoJmdzaSkpDQo+ID4gPiA+ICAgICAgew0KPiA+ID4g PiAgICAgICAgZ3BoaSAqcGhpID0gZ3NpLnBoaSAoKTsNCj4gPiA+ID4gLSAgICAgIGlmIChvcGVy YW5kX2VxdWFsX3AgKFBISV9BUkdfREVGIChwaGksIDApLA0KPiA+ID4gPiAtCQkJICAgUEhJX0FS R19ERUYgKGxjc3NhX3BoaSwgMCksIDApKQ0KPiA+ID4gPiAtCXJldHVybiBQSElfUkVTVUxUIChw aGkpOw0KPiA+ID4gPiAtICAgIH0NCj4gPiA+ID4gLSAgcmV0dXJuIE5VTExfVFJFRTsNCj4gPiA+ ID4gLX0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtLyogRnVuY3Rpb24gc2xwZWVsX3RyZWVfZHVwbGlj YXRlX2xvb3BfdG9fZWRnZV9jZmcgZHVwbGNpYXRlcw0KPiA+ID4gRklSU1QvU0VDT05EDQo+ID4g PiA+IC0gICBmcm9tIFNFQ09ORC9GSVJTVCBhbmQgcHV0cyBpdCBhdCB0aGUgb3JpZ2luYWwgbG9v cCdzIHByZWhlYWRlci9leGl0DQo+ID4gPiA+IC0gICBlZGdlLCB0aGUgdHdvIGxvb3BzIGFyZSBh cnJhbmdlZCBhcyBiZWxvdzoNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICAgICAgIHByZWhlYWRlcl9h Og0KPiA+ID4gPiAtICAgICBmaXJzdF9sb29wOg0KPiA+ID4gPiAtICAgICAgIGhlYWRlcl9hOg0K PiA+ID4gPiAtCSBpXzEgPSBQSEk8aV8wLCBpXzI+Ow0KPiA+ID4gPiAtCSAuLi4NCj4gPiA+ID4g LQkgaV8yID0gaV8xICsgMTsNCj4gPiA+ID4gLQkgaWYgKGNvbmRfYSkNCj4gPiA+ID4gLQkgICBn b3RvIGxhdGNoX2E7DQo+ID4gPiA+IC0JIGVsc2UNCj4gPiA+ID4gLQkgICBnb3RvIGJldHdlZW5f YmI7DQo+ID4gPiA+IC0gICAgICAgbGF0Y2hfYToNCj4gPiA+ID4gLQkgZ290byBoZWFkZXJfYTsN Cj4gPiA+ID4gLQ0KPiA+ID4gPiAtICAgICAgIGJldHdlZW5fYmI6DQo+ID4gPiA+IC0JIDs7IGlf eCA9IFBISTxpXzI+OyAgIDs7IExDU1NBIHBoaSBub2RlIHRvIGJlIGNyZWF0ZWQgZm9yIEZJUlNU LA0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gICAgIHNlY29uZF9sb29wOg0KPiA+ID4gPiAtICAgICAg IGhlYWRlcl9iOg0KPiA+ID4gPiAtCSBpXzMgPSBQSEk8aV8wLCBpXzQ+OyA7OyBVc2Ugb2YgaV8w IHRvIGJlIHJlcGxhY2VkIHdpdGggaV94LA0KPiA+ID4gPiAtCQkJCSBvciB3aXRoIGlfMiBpZiBu byBMQ1NTQSBwaGkgaXMgY3JlYXRlZA0KPiA+ID4gPiAtCQkJCSB1bmRlciBjb25kaXRpb24gb2YN Cj4gPiA+IENSRUFURV9MQ1NTQV9GT1JfSVZfUEhJUy4NCj4gPiA+ID4gLQkgLi4uDQo+ID4gPiA+ IC0JIGlfNCA9IGlfMyArIDE7DQo+ID4gPiA+IC0JIGlmIChjb25kX2IpDQo+ID4gPiA+IC0JICAg Z290byBsYXRjaF9iOw0KPiA+ID4gPiAtCSBlbHNlDQo+ID4gPiA+IC0JICAgZ290byBleGl0X2Ji Ow0KPiA+ID4gPiAtICAgICAgIGxhdGNoX2I6DQo+ID4gPiA+IC0JIGdvdG8gaGVhZGVyX2I7DQo+ ID4gPiA+IC0NCj4gPiA+ID4gLSAgICAgICBleGl0X2JiOg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0g ICBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgbG9vcCBjbG9zZWQgU1NBIGZvciB0aGUgZmlyc3QgbG9v cDsgdXBkYXRlIHRoZQ0KPiA+ID4gPiAtICAgc2Vjb25kIGxvb3AncyBQSEkgbm9kZXMgYnkgcmVw bGFjaW5nIGFyZ3VtZW50IG9uIGluY29taW5nIGVkZ2Ugd2l0aA0KPiB0aGUNCj4gPiA+ID4gLSAg IHJlc3VsdCBvZiBuZXdseSBjcmVhdGVkIGxjc3NhIFBISSBub2Rlcy4gIElGDQo+IENSRUFURV9M Q1NTQV9GT1JfSVZfUEhJUw0KPiA+ID4gPiAtICAgaXMgZmFsc2UsIExvb3AgY2xvc2VkIHNzYSBw aGlzIHdpbGwgb25seSBiZSBjcmVhdGVkIGZvciBub24taXYgcGhpcyBmb3INCj4gPiA+ID4gLSAg IHRoZSBmaXJzdCBsb29wLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gICBUaGlzIGZ1bmN0aW9uIGFz c3VtZXMgZXhpdCBiYiBvZiB0aGUgZmlyc3QgbG9vcCBpcyBwcmVoZWFkZXIgYmIgb2YgdGhlDQo+ ID4gPiA+IC0gICBzZWNvbmQgbG9vcCwgaS5lLCBiZXR3ZWVuX2JiIGluIHRoZSBleGFtcGxlIGNv ZGUuICBXaXRoIFBISXMgdXBkYXRlZCwNCj4gPiA+ID4gLSAgIHRoZSBzZWNvbmQgbG9vcCB3aWxs IGV4ZWN1dGUgcmVzdCBpdGVyYXRpb25zIG9mIHRoZSBmaXJzdC4gICovDQo+ID4gPiA+IC0NCj4g PiA+ID4gLXN0YXRpYyB2b2lkDQo+ID4gPiA+IC1zbHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19mb3Jf bG9vcHMgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywNCj4gPiA+ID4gLQkJCQkgICBjbGFzcyBs b29wICpmaXJzdCwgY2xhc3MgbG9vcCAqc2Vjb25kLA0KPiA+ID4gPiAtCQkJCSAgIGJvb2wgY3Jl YXRlX2xjc3NhX2Zvcl9pdl9waGlzKQ0KPiA+ID4gPiAtew0KPiA+ID4gPiAtICBncGhpX2l0ZXJh dG9yIGdzaV91cGRhdGUsIGdzaV9vcmlnOw0KPiA+ID4gPiAtICBjbGFzcyBsb29wICpsb29wID0g TE9PUF9WSU5GT19MT09QIChsb29wX3ZpbmZvKTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBlZGdl IGZpcnN0X2xhdGNoX2UgPSBFREdFX1NVQ0MgKGZpcnN0LT5sYXRjaCwgMCk7DQo+ID4gPiA+IC0g IGVkZ2Ugc2Vjb25kX3ByZWhlYWRlcl9lID0gbG9vcF9wcmVoZWFkZXJfZWRnZSAoc2Vjb25kKTsN Cj4gPiA+ID4gLSAgYmFzaWNfYmxvY2sgYmV0d2Vlbl9iYiA9IHNpbmdsZV9leGl0IChmaXJzdCkt PmRlc3Q7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgZ2NjX2Fzc2VydCAoYmV0d2Vlbl9iYiA9PSBz ZWNvbmRfcHJlaGVhZGVyX2UtPnNyYyk7DQo+ID4gPiA+IC0gIGdjY19hc3NlcnQgKHNpbmdsZV9w cmVkX3AgKGJldHdlZW5fYmIpICYmIHNpbmdsZV9zdWNjX3ANCj4gKGJldHdlZW5fYmIpKTsNCj4g PiA+ID4gLSAgLyogRWl0aGVyIHRoZSBmaXJzdCBsb29wIG9yIHRoZSBzZWNvbmQgaXMgdGhlIGxv b3AgdG8gYmUgdmVjdG9yaXplZC4gICovDQo+ID4gPiA+IC0gIGdjY19hc3NlcnQgKGxvb3AgPT0g Zmlyc3QgfHwgbG9vcCA9PSBzZWNvbmQpOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIGZvciAoZ3Np X29yaWcgPSBnc2lfc3RhcnRfcGhpcyAoZmlyc3QtPmhlYWRlciksDQo+ID4gPiA+IC0gICAgICAg Z3NpX3VwZGF0ZSA9IGdzaV9zdGFydF9waGlzIChzZWNvbmQtPmhlYWRlcik7DQo+ID4gPiA+IC0g ICAgICAgIWdzaV9lbmRfcCAoZ3NpX29yaWcpICYmICFnc2lfZW5kX3AgKGdzaV91cGRhdGUpOw0K PiA+ID4gPiAtICAgICAgIGdzaV9uZXh0ICgmZ3NpX29yaWcpLCBnc2lfbmV4dCAoJmdzaV91cGRh dGUpKQ0KPiA+ID4gPiAtICAgIHsNCj4gPiA+ID4gLSAgICAgIGdwaGkgKm9yaWdfcGhpID0gZ3Np X29yaWcucGhpICgpOw0KPiA+ID4gPiAtICAgICAgZ3BoaSAqdXBkYXRlX3BoaSA9IGdzaV91cGRh dGUucGhpICgpOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gICAgICB0cmVlIGFyZyA9IFBISV9BUkdf REVGX0ZST01fRURHRSAob3JpZ19waGksIGZpcnN0X2xhdGNoX2UpOw0KPiA+ID4gPiAtICAgICAg LyogR2VuZXJhdGUgbGNzc2EgUEhJIG5vZGUgZm9yIHRoZSBmaXJzdCBsb29wLiAgKi8NCj4gPiA+ ID4gLSAgICAgIGdwaGkgKnZlY3RfcGhpID0gKGxvb3AgPT0gZmlyc3QpID8gb3JpZ19waGkgOiB1 cGRhdGVfcGhpOw0KPiA+ID4gPiAtICAgICAgc3RtdF92ZWNfaW5mbyB2ZWN0X3BoaV9pbmZvID0g bG9vcF92aW5mby0+bG9va3VwX3N0bXQgKHZlY3RfcGhpKTsNCj4gPiA+ID4gLSAgICAgIGlmIChj cmVhdGVfbGNzc2FfZm9yX2l2X3BoaXMgfHwgIWl2X3BoaV9wICh2ZWN0X3BoaV9pbmZvKSkNCj4g PiA+ID4gKyAgICAgIC8qIE5lc3RlZCBsb29wcyB3aXRoIG11bHRpcGxlIGV4aXRzIGNhbiBoYXZl IGRpZmZlcmVudCBubyMgcGhpIG5vZGUNCj4gPiA+ID4gKwkgYXJndW1lbnRzIGJldHdlZW4gdGhl IG1haW4gbG9vcCBhbmQgZXBpbG9nIGFzIGVwaWxvZyBmYWxscyB0byB0aGUNCj4gPiA+ID4gKwkg c2Vjb25kIGxvb3AuICAqLw0KPiA+ID4gPiArICAgICAgaWYgKGdpbXBsZV9waGlfbnVtX2FyZ3Mg KHBoaSkgPiBlLT5kZXN0X2lkeCkNCj4gPiA+ID4gIAl7DQo+ID4gPiA+IC0JICB0cmVlIG5ld19y ZXMgPSBjb3B5X3NzYV9uYW1lIChQSElfUkVTVUxUIChvcmlnX3BoaSkpOw0KPiA+ID4gPiAtCSAg Z3BoaSAqbGNzc2FfcGhpID0gY3JlYXRlX3BoaV9ub2RlIChuZXdfcmVzLCBiZXR3ZWVuX2JiKTsN Cj4gPiA+ID4gLQkgIGFkZF9waGlfYXJnIChsY3NzYV9waGksIGFyZywgc2luZ2xlX2V4aXQgKGZp cnN0KSwNCj4gPiA+IFVOS05PV05fTE9DQVRJT04pOw0KPiA+ID4gPiAtCSAgYXJnID0gbmV3X3Jl czsNCj4gPiA+ID4gLQl9DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgICAgIC8qIFVwZGF0ZSBQSEkg bm9kZSBpbiB0aGUgc2Vjb25kIGxvb3AgYnkgcmVwbGFjaW5nIGFyZyBvbiB0aGUgbG9vcCdzDQo+ ID4gPiA+IC0JIGluY29taW5nIGVkZ2UuICAqLw0KPiA+ID4gPiAtICAgICAgYWRqdXN0X3BoaV9h bmRfZGVidWdfc3RtdHMgKHVwZGF0ZV9waGksIHNlY29uZF9wcmVoZWFkZXJfZSwNCj4gYXJnKTsN Cj4gPiA+ID4gLSAgICB9DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgLyogRm9yIGVwaWxvZ3VlIHBl ZWxpbmcgd2UgaGF2ZSB0byBtYWtlIHN1cmUgdG8gY29weSBhbGwgTEMgUEhJcw0KPiA+ID4gPiAt ICAgICBmb3IgY29ycmVjdCB2ZWN0b3JpemF0aW9uIG9mIGxpdmUgc3RtdHMuICAqLw0KPiA+ID4g PiAtICBpZiAobG9vcCA9PSBmaXJzdCkNCj4gPiA+ID4gLSAgICB7DQo+ID4gPiA+IC0gICAgICBi YXNpY19ibG9jayBvcmlnX2V4aXQgPSBzaW5nbGVfZXhpdCAoc2Vjb25kKS0+ZGVzdDsNCj4gPiA+ ID4gLSAgICAgIGZvciAoZ3NpX29yaWcgPSBnc2lfc3RhcnRfcGhpcyAob3JpZ19leGl0KTsNCj4g PiA+ID4gLQkgICAhZ3NpX2VuZF9wIChnc2lfb3JpZyk7IGdzaV9uZXh0ICgmZ3NpX29yaWcpKQ0K PiA+ID4gPiAtCXsNCj4gPiA+ID4gLQkgIGdwaGkgKm9yaWdfcGhpID0gZ3NpX29yaWcucGhpICgp Ow0KPiA+ID4gPiAtCSAgdHJlZSBvcmlnX2FyZyA9IFBISV9BUkdfREVGIChvcmlnX3BoaSwgMCk7 DQo+ID4gPiA+IC0JICBpZiAoVFJFRV9DT0RFIChvcmlnX2FyZykgIT0gU1NBX05BTUUgfHwgdmly dHVhbF9vcGVyYW5kX3ANCj4gPiA+IChvcmlnX2FyZykpDQo+ID4gPiA+IC0JICAgIGNvbnRpbnVl Ow0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JICAvKiBBbHJlYWR5IGNyZWF0ZWQgaW4gdGhlIGFib3Zl IGxvb3AuICAgKi8NCj4gPiA+ID4gLQkgIGlmIChmaW5kX2d1YXJkX2FyZyAoZmlyc3QsIHNlY29u ZCwgb3JpZ19waGkpKQ0KPiA+ID4gPiArCSAgdHJlZSB2YXIgPSBQSElfQVJHX0RFRiAocGhpLCBl LT5kZXN0X2lkeCk7DQo+ID4gPiA+ICsJICBpZiAoVFJFRV9DT0RFICh2YXIpICE9IFNTQV9OQU1F KQ0KPiA+ID4gPiAgCSAgICBjb250aW51ZTsNCj4gPiA+ID4NCj4gPiA+ID4gLQkgIHRyZWUgbmV3 X3JlcyA9IGNvcHlfc3NhX25hbWUgKG9yaWdfYXJnKTsNCj4gPiA+ID4gLQkgIGdwaGkgKmxjcGhp ID0gY3JlYXRlX3BoaV9ub2RlIChuZXdfcmVzLCBiZXR3ZWVuX2JiKTsNCj4gPiA+ID4gLQkgIGFk ZF9waGlfYXJnIChsY3BoaSwgb3JpZ19hcmcsIHNpbmdsZV9leGl0IChmaXJzdCksDQo+ID4gPiBV TktOT1dOX0xPQ0FUSU9OKTsNCj4gPiA+ID4gKwkgIGlmIChvcGVyYW5kX2VxdWFsX3AgKGdldF9j dXJyZW50X2RlZiAodmFyKSwNCj4gPiA+ID4gKwkJCSAgICAgICBQSElfQVJHX0RFRiAobGNzc2Ff cGhpLCBsY3NzYV9lZGdlKSwgMCkpDQo+ID4gPiA+ICsJICAgIHJldHVybiBQSElfUkVTVUxUIChw aGkpOw0KPiA+ID4gPiAgCX0NCj4gPiA+ID4gICAgICB9DQo+ID4gPiA+ICsgIHJldHVybiBOVUxM X1RSRUU7DQo+ID4gPiA+ICB9DQo+ID4gPiA+DQo+ID4gPiA+ICAvKiBGdW5jdGlvbiBzbHBlZWxf YWRkX2xvb3BfZ3VhcmQgYWRkcyBndWFyZCBza2lwcGluZyBmcm9tIHRoZQ0KPiBiZWdpbm5pbmcN Cj4gPiA+ID4gQEAgLTI5MTAsMTMgKzMxNjQsMTEgQEAgc2xwZWVsX3VwZGF0ZV9waGlfbm9kZXNf Zm9yX2d1YXJkMg0KPiAoY2xhc3MNCj4gPiA+IGxvb3AgKmxvb3AsIGNsYXNzIGxvb3AgKmVwaWxv ZywNCj4gPiA+ID4gICAgZ2NjX2Fzc2VydCAoc2luZ2xlX3N1Y2NfcCAobWVyZ2VfYmIpKTsNCj4g PiA+ID4gICAgZWRnZSBlID0gc2luZ2xlX3N1Y2NfZWRnZSAobWVyZ2VfYmIpOw0KPiA+ID4gPiAg ICBiYXNpY19ibG9jayBleGl0X2JiID0gZS0+ZGVzdDsNCj4gPiA+ID4gLSAgZ2NjX2Fzc2VydCAo c2luZ2xlX3ByZWRfcCAoZXhpdF9iYikpOw0KPiA+ID4gPiAtICBnY2NfYXNzZXJ0IChzaW5nbGVf cHJlZCAoZXhpdF9iYikgPT0gc2luZ2xlX2V4aXQgKGVwaWxvZyktPmRlc3QpOw0KPiA+ID4gPg0K PiA+ID4gPiAgICBmb3IgKGdzaSA9IGdzaV9zdGFydF9waGlzIChleGl0X2JiKTsgIWdzaV9lbmRf cCAoZ3NpKTsgZ3NpX25leHQgKCZnc2kpKQ0KPiA+ID4gPiAgICAgIHsNCj4gPiA+ID4gICAgICAg IGdwaGkgKnVwZGF0ZV9waGkgPSBnc2kucGhpICgpOw0KPiA+ID4gPiAtICAgICAgdHJlZSBvbGRf YXJnID0gUEhJX0FSR19ERUYgKHVwZGF0ZV9waGksIDApOw0KPiA+ID4gPiArICAgICAgdHJlZSBv bGRfYXJnID0gUEhJX0FSR19ERUYgKHVwZGF0ZV9waGksIGUtPmRlc3RfaWR4KTsNCj4gPiA+ID4N Cj4gPiA+ID4gICAgICAgIHRyZWUgbWVyZ2VfYXJnID0gTlVMTF9UUkVFOw0KPiA+ID4gPg0KPiA+ ID4gPiBAQCAtMjkyOCw3ICszMTgwLDcgQEAgc2xwZWVsX3VwZGF0ZV9waGlfbm9kZXNfZm9yX2d1 YXJkMiAoY2xhc3MNCj4gbG9vcA0KPiA+ID4gKmxvb3AsIGNsYXNzIGxvb3AgKmVwaWxvZywNCj4g PiA+ID4gICAgICAgIGlmICghbWVyZ2VfYXJnKQ0KPiA+ID4gPiAgCW1lcmdlX2FyZyA9IG9sZF9h cmc7DQo+ID4gPiA+DQo+ID4gPiA+IC0gICAgICB0cmVlIGd1YXJkX2FyZyA9IGZpbmRfZ3VhcmRf YXJnIChsb29wLCBlcGlsb2csIHVwZGF0ZV9waGkpOw0KPiA+ID4gPiArICAgICAgdHJlZSBndWFy ZF9hcmcgPSBmaW5kX2d1YXJkX2FyZyAobG9vcCwgZXBpbG9nLCB1cGRhdGVfcGhpLCBlLQ0KPiA+ ZGVzdF9pZHgpOw0KPiA+ID4gPiAgICAgICAgLyogSWYgdGhlIHZhciBpcyBsaXZlIGFmdGVyIGxv b3AgYnV0IG5vdCBhIHJlZHVjdGlvbiwgd2Ugc2ltcGx5DQo+ID4gPiA+ICAJIHVzZSB0aGUgb2xk IGFyZy4gICovDQo+ID4gPiA+ICAgICAgICBpZiAoIWd1YXJkX2FyZykNCj4gPiA+ID4gQEAgLTI5 NDgsMjEgKzMyMDAsNiBAQCBzbHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19mb3JfZ3VhcmQyIChjbGFz cw0KPiA+ID4gbG9vcCAqbG9vcCwgY2xhc3MgbG9vcCAqZXBpbG9nLA0KPiA+ID4gPiAgICAgIH0N Cj4gPiA+ID4gIH0NCj4gPiA+ID4NCj4gPiA+ID4gLS8qIEVQSUxPRyBsb29wIGlzIGR1cGxpY2F0 ZWQgZnJvbSB0aGUgb3JpZ2luYWwgbG9vcCBmb3IgdmVjdG9yaXppbmcsDQo+ID4gPiA+IC0gICB0 aGUgYXJnIG9mIGl0cyBsb29wIGNsb3NlZCBzc2EgUEhJIG5lZWRzIHRvIGJlIHVwZGF0ZWQuICAq Lw0KPiA+ID4gPiAtDQo+ID4gPiA+IC1zdGF0aWMgdm9pZA0KPiA+ID4gPiAtc2xwZWVsX3VwZGF0 ZV9waGlfbm9kZXNfZm9yX2xjc3NhIChjbGFzcyBsb29wICplcGlsb2cpDQo+ID4gPiA+IC17DQo+ ID4gPiA+IC0gIGdwaGlfaXRlcmF0b3IgZ3NpOw0KPiA+ID4gPiAtICBiYXNpY19ibG9jayBleGl0 X2JiID0gc2luZ2xlX2V4aXQgKGVwaWxvZyktPmRlc3Q7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAg Z2NjX2Fzc2VydCAoc2luZ2xlX3ByZWRfcCAoZXhpdF9iYikpOw0KPiA+ID4gPiAtICBlZGdlIGUg PSBFREdFX1BSRUQgKGV4aXRfYmIsIDApOw0KPiA+ID4gPiAtICBmb3IgKGdzaSA9IGdzaV9zdGFy dF9waGlzIChleGl0X2JiKTsgIWdzaV9lbmRfcCAoZ3NpKTsgZ3NpX25leHQgKCZnc2kpKQ0KPiA+ ID4gPiAtICAgIHJlbmFtZV91c2Vfb3AgKFBISV9BUkdfREVGX1BUUl9GUk9NX0VER0UgKGdzaS5w aGkgKCksIGUpKTsNCj4gPiA+ID4gLX0NCj4gPiA+ID4gLQ0KPiANCj4gSSB3b25kZXIgaWYgd2Ug Y2FuIHN0aWxsIHNwbGl0IHRoZXNlIGNoYW5nZXMgb3V0IHRvIGJlZm9yZSBlYXJseSBicmVhaw0K PiB2ZWN0Pw0KDQpNYXliZSwgSSBoYWRuJ3QgZG9uZSBzbyBiZWZvcmUgYmVjYXVzZSBJIHdhcyBy ZWRpcmVjdGluZyB0aGUgZWRnZXMgZHVyaW5nIHBlZWxpbmcuDQpJZiB3ZSBubyBsb25nZXIgZG8g dGhhdCB0aGF0IG1heSBiZSBlYXNpZXIuICBMZXQgbWUgdHJ5IHRvLg0KDQo+IA0KPiA+ID4gPiAg LyogRVBJTE9HVUVfVklORk8gaXMgYW4gZXBpbG9ndWUgbG9vcCB0aGF0IHdlIG5vdyBrbm93IHdv dWxkIG5lZWQNCj4gdG8NCj4gPiA+ID4gICAgIGl0ZXJhdGUgZXhhY3RseSBDT05TVF9OSVRFUlMg dGltZXMuICBNYWtlIGEgZmluYWwgZGVjaXNpb24gYWJvdXQNCj4gPiA+ID4gICAgIHdoZXRoZXIg dGhlIGVwaWxvZ3VlIGxvb3Agc2hvdWxkIGJlIHVzZWQsIHJldHVybmluZyB0cnVlIGlmIHNvLiAg Ki8NCj4gPiA+ID4gQEAgLTMxMzgsNiArMzM3NSwxNCBAQCB2ZWN0X2RvX3BlZWxpbmcgKGxvb3Bf dmVjX2luZm8gbG9vcF92aW5mbywNCj4gdHJlZQ0KPiA+ID4gbml0ZXJzLCB0cmVlIG5pdGVyc20x LA0KPiA+ID4gPiAgICAgIGJvdW5kX2VwaWxvZyArPSB2ZiAtIDE7DQo+ID4gPiA+ICAgIGlmIChM T09QX1ZJTkZPX1BFRUxJTkdfRk9SX0dBUFMgKGxvb3BfdmluZm8pKQ0KPiA+ID4gPiAgICAgIGJv dW5kX2VwaWxvZyArPSAxOw0KPiA+ID4gPiArICAvKiBGb3IgZWFybHkgYnJlYWtzIHRoZSBzY2Fs YXIgbG9vcCBuZWVkcyB0byBleGVjdXRlIGF0IG1vc3QgVkYgdGltZXMNCj4gPiA+ID4gKyAgICAg dG8gZmluZCB0aGUgZWxlbWVudCB0aGF0IGNhdXNlZCB0aGUgYnJlYWsuICAqLw0KPiA+ID4gPiAr ICBpZiAoTE9PUF9WSU5GT19FQVJMWV9CUkVBS1MgKGxvb3BfdmluZm8pKQ0KPiA+ID4gPiArICAg IHsNCj4gPiA+ID4gKyAgICAgIGJvdW5kX2VwaWxvZyA9IHZmOw0KPiA+ID4gPiArICAgICAgLyog Rm9yY2UgYSBzY2FsYXIgZXBpbG9ndWUgYXMgd2UgY2FuJ3QgdmVjdG9yaXplIHRoZSBpbmRleCBm aW5kaW5nLiAgKi8NCj4gPiA+ID4gKyAgICAgIHZlY3RfZXBpbG9ndWVzID0gZmFsc2U7DQo+ID4g PiA+ICsgICAgfQ0KPiA+ID4gPiAgICBib29sIGVwaWxvZ19wZWVsaW5nID0gbWF5YmVfbmUgKGJv dW5kX2VwaWxvZywgMFUpOw0KPiA+ID4gPiAgICBwb2x5X3VpbnQ2NCBib3VuZF9zY2FsYXIgPSBi b3VuZF9lcGlsb2c7DQo+ID4gPiA+DQo+ID4gPiA+IEBAIC0zMjk3LDE2ICszNTQyLDI0IEBAIHZl Y3RfZG9fcGVlbGluZyAobG9vcF92ZWNfaW5mbw0KPiBsb29wX3ZpbmZvLA0KPiA+ID4gdHJlZSBu aXRlcnMsIHRyZWUgbml0ZXJzbTEsDQo+ID4gPiA+ICAJCQkJICBib3VuZF9wcm9sb2cgKyBib3Vu ZF9lcGlsb2cpDQo+ID4gPiA+ICAJCSAgICAgIDogKCFMT09QX1JFUVVJUkVTX1ZFUlNJT05JTkcg KGxvb3BfdmluZm8pDQo+ID4gPiA+ICAJCQkgfHwgdmVjdF9lcGlsb2d1ZXMpKTsNCj4gPiA+ID4g Kw0KPiA+ID4gPiArICAvKiBXZSBvbmx5IHN1cHBvcnQgZWFybHkgYnJlYWsgdmVjdG9yaXphdGlv biBvbiBrbm93biBib3VuZHMgYXQgdGhpcw0KPiA+ID4gdGltZS4NCj4gPiA+ID4gKyAgICAgVGhp cyBtZWFucyB0aGF0IGlmIHRoZSB2ZWN0b3IgbG9vcCBjYW4ndCBiZSBlbnRlcmVkIHRoZW4gd2Ug d29uJ3QNCj4gPiA+IGdlbmVyYXRlDQo+ID4gPiA+ICsgICAgIGl0IGF0IGFsbC4gIFNvIGZvciBu b3cgZm9yY2Ugc2tpcF92ZWN0b3Igb2ZmIGJlY2F1c2UgdGhlIGFkZGl0aW9uYWwNCj4gY29udHJv bA0KPiA+ID4gPiArICAgICBmbG93IG1lc3NlcyB3aXRoIHRoZSBCQiBleGl0cyBhbmQgd2UndmUg YWxyZWFkeSBhbmFseXplZCB0aGVtLiAgKi8NCj4gPiA+ID4gKyBza2lwX3ZlY3RvciA9IHNraXBf dmVjdG9yICYmICFMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUw0KPiAobG9vcF92aW5mbyk7DQo+ID4g PiA+ICsNCj4gDQo+IEkgdGhpbmsgaXQgc2hvdWxkIGJlIGFzICJlYXN5IiBhcyBlbnRlcmluZyB0 aGUgZXBpbG9nIHZpYSB0aGUgYmxvY2sgdGFraW5nDQo+IHRoZSByZWd1bGFyIGV4aXQ/DQo+IA0K PiA+ID4gPiAgICAvKiBFcGlsb2cgbG9vcCBtdXN0IGJlIGV4ZWN1dGVkIGlmIHRoZSBudW1iZXIg b2YgaXRlcmF0aW9ucyBmb3IgZXBpbG9nDQo+ID4gPiA+ICAgICAgIGxvb3AgaXMga25vd24gYXQg Y29tcGlsZSB0aW1lLCBvdGhlcndpc2Ugd2UgbmVlZCB0byBhZGQgYSBjaGVjayBhdA0KPiA+ID4g PiAgICAgICB0aGUgZW5kIG9mIHZlY3RvciBsb29wIGFuZCBza2lwIHRvIHRoZSBlbmQgb2YgZXBp bG9nIGxvb3AuICAqLw0KPiA+ID4gPiAgICBib29sIHNraXBfZXBpbG9nID0gKHByb2xvZ19wZWVs aW5nIDwgMA0KPiA+ID4gPiAgCQkgICAgICB8fCAhTE9PUF9WSU5GT19OSVRFUlNfS05PV05fUCAo bG9vcF92aW5mbykNCj4gPiA+ID4gIAkJICAgICAgfHwgIXZmLmlzX2NvbnN0YW50ICgpKTsNCj4g PiA+ID4gLSAgLyogUEVFTElOR19GT1JfR0FQUyBpcyBzcGVjaWFsIGJlY2F1c2UgZXBpbG9nIGxv b3AgbXVzdCBiZSBleGVjdXRlZC4NCj4gKi8NCj4gPiA+ID4gLSAgaWYgKExPT1BfVklORk9fUEVF TElOR19GT1JfR0FQUyAobG9vcF92aW5mbykpDQo+ID4gPiA+ICsgIC8qIFBFRUxJTkdfRk9SX0dB UFMgYW5kIHBlZWxpbmcgZm9yIGVhcmx5IGJyZWFrcyBhcmUgc3BlY2lhbCBiZWNhdXNlDQo+ID4g PiBlcGlsb2cNCj4gPiA+ID4gKyAgICAgbG9vcCBtdXN0IGJlIGV4ZWN1dGVkLiAgKi8NCj4gPiA+ ID4gKyAgaWYgKExPT1BfVklORk9fUEVFTElOR19GT1JfR0FQUyAobG9vcF92aW5mbykNCj4gPiA+ ID4gKyAgICAgIHx8IExPT1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29wX3ZpbmZvKSkNCj4gPiA+ ID4gICAgICBza2lwX2VwaWxvZyA9IGZhbHNlOw0KPiA+ID4gPiAtDQo+ID4gPiA+ICAgIGNsYXNz IGxvb3AgKnNjYWxhcl9sb29wID0gTE9PUF9WSU5GT19TQ0FMQVJfTE9PUCAobG9vcF92aW5mbyk7 DQo+ID4gPiA+ICAgIGF1dG9fdmVjPHByb2ZpbGVfY291bnQ+IG9yaWdpbmFsX2NvdW50czsNCj4g PiA+ID4gICAgYmFzaWNfYmxvY2sgKm9yaWdpbmFsX2JicyA9IE5VTEw7DQo+ID4gPiA+IEBAIC0z MzQ0LDEzICszNTk3LDEzIEBAIHZlY3RfZG9fcGVlbGluZyAobG9vcF92ZWNfaW5mbw0KPiBsb29w X3ZpbmZvLA0KPiA+ID4gdHJlZSBuaXRlcnMsIHRyZWUgbml0ZXJzbTEsDQo+ID4gPiA+ICAgIGlm IChwcm9sb2dfcGVlbGluZykNCj4gPiA+ID4gICAgICB7DQo+ID4gPiA+ICAgICAgICBlID0gbG9v cF9wcmVoZWFkZXJfZWRnZSAobG9vcCk7DQo+ID4gPiA+IC0gICAgICBnY2NfY2hlY2tpbmdfYXNz ZXJ0IChzbHBlZWxfY2FuX2R1cGxpY2F0ZV9sb29wX3AgKGxvb3AsIGUpKTsNCj4gPiA+ID4gLQ0K PiA+ID4gPiArICAgICAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoc2xwZWVsX2Nhbl9kdXBsaWNhdGVf bG9vcF9wIChsb29wX3ZpbmZvLCBlKSk7DQo+ID4gPiA+ICAgICAgICAvKiBQZWVsIHByb2xvZyBh bmQgcHV0IGl0IG9uIHByZWhlYWRlciBlZGdlIG9mIGxvb3AuICAqLw0KPiA+ID4gPiAtICAgICAg cHJvbG9nID0gc2xwZWVsX3RyZWVfZHVwbGljYXRlX2xvb3BfdG9fZWRnZV9jZmcgKGxvb3AsIHNj YWxhcl9sb29wLA0KPiBlKTsNCj4gPiA+ID4gKyAgICAgIHByb2xvZyA9IHNscGVlbF90cmVlX2R1 cGxpY2F0ZV9sb29wX3RvX2VkZ2VfY2ZnIChsb29wLCBzY2FsYXJfbG9vcCwNCj4gZSwNCj4gPiA+ ID4gKwkJCQkJCSAgICAgICB0cnVlKTsNCj4gPiA+ID4gICAgICAgIGdjY19hc3NlcnQgKHByb2xv Zyk7DQo+ID4gPiA+ICAgICAgICBwcm9sb2ctPmZvcmNlX3ZlY3Rvcml6ZSA9IGZhbHNlOw0KPiA+ ID4gPiAtICAgICAgc2xwZWVsX3VwZGF0ZV9waGlfbm9kZXNfZm9yX2xvb3BzIChsb29wX3ZpbmZv LCBwcm9sb2csIGxvb3AsIHRydWUpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICAgICAgICBmaXJzdF9s b29wID0gcHJvbG9nOw0KPiA+ID4gPiAgICAgICAgcmVzZXRfb3JpZ2luYWxfY29weV90YWJsZXMg KCk7DQo+ID4gPiA+DQo+ID4gPiA+IEBAIC0zNDIwLDExICszNjczLDEyIEBAIHZlY3RfZG9fcGVl bGluZyAobG9vcF92ZWNfaW5mbw0KPiBsb29wX3ZpbmZvLA0KPiA+ID4gdHJlZSBuaXRlcnMsIHRy ZWUgbml0ZXJzbTEsDQo+ID4gPiA+ICAJIGFzIHRoZSB0cmFuc2Zvcm1hdGlvbnMgbWVudGlvbmVk IGFib3ZlIG1ha2UgbGVzcyBvciBubyBzZW5zZSB3aGVuDQo+ID4gPiBub3QNCj4gPiA+ID4gIAkg dmVjdG9yaXppbmcuICAqLw0KPiA+ID4gPiAgICAgICAgZXBpbG9nID0gdmVjdF9lcGlsb2d1ZXMg PyBnZXRfbG9vcF9jb3B5IChsb29wKSA6IHNjYWxhcl9sb29wOw0KPiA+ID4gPiAtICAgICAgZXBp bG9nID0gc2xwZWVsX3RyZWVfZHVwbGljYXRlX2xvb3BfdG9fZWRnZV9jZmcgKGxvb3AsIGVwaWxv ZywgZSk7DQo+ID4gPiA+ICsgICAgICBhdXRvX3ZlYzxiYXNpY19ibG9jaz4gZG9tczsNCj4gPiA+ ID4gKyAgICAgIGVwaWxvZyA9IHNscGVlbF90cmVlX2R1cGxpY2F0ZV9sb29wX3RvX2VkZ2VfY2Zn IChsb29wLCBlcGlsb2csIGUsDQo+IHRydWUsDQo+ID4gPiA+ICsJCQkJCQkgICAgICAgJmRvbXMp Ow0KPiA+ID4gPiAgICAgICAgZ2NjX2Fzc2VydCAoZXBpbG9nKTsNCj4gPiA+ID4NCj4gPiA+ID4g ICAgICAgIGVwaWxvZy0+Zm9yY2VfdmVjdG9yaXplID0gZmFsc2U7DQo+ID4gPiA+IC0gICAgICBz bHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19mb3JfbG9vcHMgKGxvb3BfdmluZm8sIGxvb3AsIGVwaWxv ZywgZmFsc2UpOw0KPiA+ID4gPg0KPiA+ID4gPiAgICAgICAgLyogU2NhbGFyIHZlcnNpb24gbG9v cCBtYXkgYmUgcHJlZmVycmVkLiAgSW4gdGhpcyBjYXNlLCBhZGQgZ3VhcmQNCj4gPiA+ID4gIAkg YW5kIHNraXAgdG8gZXBpbG9nLiAgTm90ZSB0aGlzIG9ubHkgaGFwcGVucyB3aGVuIHRoZSBudW1i ZXIgb2YNCj4gPiA+ID4gQEAgLTM0OTYsNiArMzc1MCw1NCBAQCB2ZWN0X2RvX3BlZWxpbmcgKGxv b3BfdmVjX2luZm8gbG9vcF92aW5mbywNCj4gdHJlZQ0KPiA+ID4gbml0ZXJzLCB0cmVlIG5pdGVy c20xLA0KPiA+ID4gPiAgICAgICAgdmVjdF91cGRhdGVfaXZzX2FmdGVyX3ZlY3Rvcml6ZXIgKGxv b3BfdmluZm8sIG5pdGVyc192ZWN0b3JfbXVsdF92ZiwNCj4gPiA+ID4gIAkJCQkJdXBkYXRlX2Up Ow0KPiA+ID4gPg0KPiA+ID4gPiArICAgICAgLyogRm9yIGVhcmx5IGJyZWFrcyB3ZSBtdXN0IGNy ZWF0ZSBhIGd1YXJkIHRvIGNoZWNrIGhvdyBtYW55DQo+IGl0ZXJhdGlvbnMNCj4gPiA+ID4gKwkg b2YgdGhlIHNjYWxhciBsb29wIGFyZSB5ZXQgdG8gYmUgcGVyZm9ybWVkLiAgKi8NCj4gDQo+IFdl IGhhdmUgdGhpcyBjaGVjayBhbnl3YXksIG5vPyAgSW4gZmFjdCBkb24ndCB3ZSBrbm93IHRoYXQg d2UgYWx3YXlzIGVudGVyDQo+IHRoZSBlcGlsb2cgKHNlZSBhYm92ZSk/DQoNCk5vdCBhbHdheXMs IG1hc2tlZCBsb29wcyBmb3IgaW5zdGFuY2UgbmV2ZXIgZW50ZXIgdGhlIGVwaWxvZ3VlIGlmIHRo ZSBtYWluIGxvb3ANCmZpbmlzaGVkIGNvbXBsZXRlbHkgc2luY2UgdGhlcmUgaXMgbm8gInJlbWFp bmRlciIuDQoNCj4gDQo+ID4gPiA+ICsgICAgICBpZiAoTE9PUF9WSU5GT19FQVJMWV9CUkVBS1Mg KGxvb3BfdmluZm8pKQ0KPiA+ID4gPiArCXsNCj4gPiA+ID4gKwkgIHRyZWUgaXZ0bXAgPQ0KPiA+ ID4gPiArCSAgICB2ZWN0X3VwZGF0ZV9pdnNfYWZ0ZXJfZWFybHlfYnJlYWsgKGxvb3BfdmluZm8s IGVwaWxvZywgdmYsIG5pdGVycywNCj4gPiA+ID4gKwkJCQkJICAgICAgICpuaXRlcnNfdmVjdG9y LCB1cGRhdGVfZSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkgIGdjY19hc3NlcnQgKGl2dG1wKTsN Cj4gPiA+ID4gKwkgIHRyZWUgZ3VhcmRfY29uZCA9IGZvbGRfYnVpbGQyIChFUV9FWFBSLCBib29s ZWFuX3R5cGVfbm9kZSwNCj4gPiA+ID4gKwkJCQkJIGZvbGRfY29udmVydCAoVFJFRV9UWVBFIChu aXRlcnMpLA0KPiA+ID4gPiArCQkJCQkJICAgICAgIGl2dG1wKSwNCj4gPiA+ID4gKwkJCQkJIGJ1 aWxkX3plcm9fY3N0IChUUkVFX1RZUEUgKG5pdGVycykpKTsNCj4gPiA+ID4gKwkgIGJhc2ljX2Js b2NrIGd1YXJkX2JiID0gTE9PUF9WSU5GT19JVl9FWElUIChsb29wX3ZpbmZvKS0+ZGVzdDsNCj4g PiA+ID4gKw0KPiA+ID4gPiArCSAgLyogSWYgd2UgaGFkIGEgZmFsbHRocm91Z2ggZWRnZSwgdGhl IGd1YXJkIHdpbGwgdGhlIHRocmVhZGVkIHRocm91Z2gNCj4gPiA+ID4gKwkgICAgIGFuZCBzbyB3 ZSBtYXkgbmVlZCB0byBmaW5kIHRoZSBhY3R1YWwgZmluYWwgZWRnZS4gICovDQo+ID4gPiA+ICsJ ICBlZGdlIGZpbmFsX2VkZ2UgPSBlcGlsb2ctPnZlY19sb29wX2l2Ow0KPiA+ID4gPiArCSAgLyog c2xwZWVsX3VwZGF0ZV9waGlfbm9kZXNfZm9yX2d1YXJkMiBleHBlY3RzIGFuIGVtcHR5IGJsb2Nr IGluDQo+ID4gPiA+ICsJICAgICBiZXR3ZWVuIHRoZSBndWFyZCBhbmQgdGhlIGV4aXQgZWRnZS4g IEl0IG9ubHkgYWRkcyBuZXcgbm9kZXMgYW5kDQo+ID4gPiA+ICsJICAgICBkb2Vzbid0IHVwZGF0 ZSBleGlzdGluZyBvbmUgaW4gdGhlIGN1cnJlbnQgc2NoZW1lLiAgKi8NCj4gPiA+ID4gKwkgIGJh c2ljX2Jsb2NrIGd1YXJkX3RvID0gc3BsaXRfZWRnZSAoZmluYWxfZWRnZSk7DQo+ID4gPiA+ICsJ ICBlZGdlIGd1YXJkX2UgPSBzbHBlZWxfYWRkX2xvb3BfZ3VhcmQgKGd1YXJkX2JiLCBndWFyZF9j b25kLA0KPiA+ID4gZ3VhcmRfdG8sDQo+ID4gPiA+ICsJCQkJCQlndWFyZF9iYiwgcHJvYl9lcGls b2cuaW52ZXJ0DQo+ID4gPiAoKSwNCj4gPiA+ID4gKwkJCQkJCWlycmVkX2ZsYWcpOw0KPiA+ID4g PiArCSAgZG9tcy5zYWZlX3B1c2ggKGd1YXJkX2JiKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCSAg aXRlcmF0ZV9maXhfZG9taW5hdG9ycyAoQ0RJX0RPTUlOQVRPUlMsIGRvbXMsIGZhbHNlKTsNCj4g PiA+ID4gKw0KPiA+ID4gPiArCSAgLyogV2UgbXVzdCB1cGRhdGUgYWxsIHRoZSBlZGdlcyBmcm9t IHRoZSBuZXcgZ3VhcmRfYmIuICAqLw0KPiA+ID4gPiArCSAgc2xwZWVsX3VwZGF0ZV9waGlfbm9k ZXNfZm9yX2d1YXJkMiAobG9vcCwgZXBpbG9nLCBndWFyZF9lLA0KPiA+ID4gPiArCQkJCQkgICAg ICBmaW5hbF9lZGdlKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCSAgLyogSWYgdGhlIGxvb3Agd2Fz IHZlcnNpb25lZCB3ZSdsbCBoYXZlIGFuIGludGVybWVkaWF0ZSBCQiBiZXR3ZWVuDQo+ID4gPiA+ ICsJICAgICB0aGUgZ3VhcmQgYW5kIHRoZSBleGl0LiAgVGhpcyBpbnRlcm1lZGlhdGUgYmxvY2sg aXMgcmVxdWlyZWQNCj4gPiA+ID4gKwkgICAgIGJlY2F1c2UgaW4gdGhlIGN1cnJlbnQgc2NoZW1l IG9mIHRoaW5ncyB0aGUgZ3VhcmQgYmxvY2sgcGhpDQo+ID4gPiA+ICsJICAgICB1cGRhdGluZyBj YW4gb25seSBtYWludGFpbiBMQ1NTQSBieSBjcmVhdGluZyBuZXcgYmxvY2tzLiAgSW4gdGhpcw0K PiA+ID4gPiArCSAgICAgY2FzZSB3ZSBqdXN0IG5lZWQgdG8gdXBkYXRlIHRoZSB1c2VzIGluIHRo aXMgYmxvY2sgYXMgd2VsbC4gICovDQo+ID4gPiA+ICsJICBpZiAobG9vcCAhPSBzY2FsYXJfbG9v cCkNCj4gPiA+ID4gKwkgICAgew0KPiA+ID4gPiArCSAgICAgIGZvciAoZ3BoaV9pdGVyYXRvciBn c2kgPSBnc2lfc3RhcnRfcGhpcyAoZ3VhcmRfdG8pOw0KPiA+ID4gPiArCQkgICAhZ3NpX2VuZF9w IChnc2kpOyBnc2lfbmV4dCAoJmdzaSkpDQo+ID4gPiA+ICsJCXJlbmFtZV91c2Vfb3AgKFBISV9B UkdfREVGX1BUUl9GUk9NX0VER0UgKGdzaS5waGkgKCksDQo+ID4gPiBndWFyZF9lKSk7DQo+ID4g PiA+ICsJICAgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArCSAgZmx1c2hfcGVuZGluZ19zdG10cyAo Z3VhcmRfZSk7DQo+ID4gPiA+ICsJfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICAgICAgICBpZiAoc2tp cF9lcGlsb2cpDQo+ID4gPiA+ICAJew0KPiA+ID4gPiAgCSAgZ3VhcmRfY29uZCA9IGZvbGRfYnVp bGQyIChFUV9FWFBSLCBib29sZWFuX3R5cGVfbm9kZSwNCj4gPiA+ID4gQEAgLTM1MjAsOCArMzgy Miw2IEBAIHZlY3RfZG9fcGVlbGluZyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLA0KPiB0cmVl DQo+ID4gPiBuaXRlcnMsIHRyZWUgbml0ZXJzbTEsDQo+ID4gPiA+ICAJICAgIH0NCj4gPiA+ID4g IAkgIHNjYWxlX2xvb3BfcHJvZmlsZSAoZXBpbG9nLCBwcm9iX2VwaWxvZywgMCk7DQo+ID4gPiA+ ICAJfQ0KPiA+ID4gPiAtICAgICAgZWxzZQ0KPiA+ID4gPiAtCXNscGVlbF91cGRhdGVfcGhpX25v ZGVzX2Zvcl9sY3NzYSAoZXBpbG9nKTsNCj4gPiA+ID4NCj4gPiA+ID4gICAgICAgIHVuc2lnbmVk IEhPU1RfV0lERV9JTlQgYm91bmQ7DQo+ID4gPiA+ICAgICAgICBpZiAoYm91bmRfc2NhbGFyLmlz X2NvbnN0YW50ICgmYm91bmQpKQ0KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdC1s b29wLmNjIGIvZ2NjL3RyZWUtdmVjdC1sb29wLmNjDQo+ID4gPiA+IGluZGV4DQo+ID4gPg0KPiBi NGE5OGRlODBhYTM5MDU3ZmM5YjE3OTc3ZGQwZTM0N2I0ZjBmYjVkLi5hYjlhMjA0ODE4NmY0NjFm NWVjNDkNCj4gPiA+IGYyMTQyMTk1OGU3ZWUyNWVhZGEgMTAwNjQ0DQo+ID4gPiA+IC0tLSBhL2dj Yy90cmVlLXZlY3QtbG9vcC5jYw0KPiA+ID4gPiArKysgYi9nY2MvdHJlZS12ZWN0LWxvb3AuY2MN Cj4gPiA+ID4gQEAgLTEwMDcsNiArMTAwNyw4IEBAIF9sb29wX3ZlY19pbmZvOjpfbG9vcF92ZWNf aW5mbyAoY2xhc3MgbG9vcA0KPiA+ID4gKmxvb3BfaW4sIHZlY19pbmZvX3NoYXJlZCAqc2hhcmVk KQ0KPiA+ID4gPiAgICAgIHBhcnRpYWxfbG9hZF9zdG9yZV9iaWFzICgwKSwNCj4gPiA+ID4gICAg ICBwZWVsaW5nX2Zvcl9nYXBzIChmYWxzZSksDQo+ID4gPiA+ICAgICAgcGVlbGluZ19mb3Jfbml0 ZXIgKGZhbHNlKSwNCj4gPiA+ID4gKyAgICBlYXJseV9icmVha3MgKGZhbHNlKSwNCj4gPiA+ID4g KyAgICBub25fYnJlYWtfY29udHJvbF9mbG93IChmYWxzZSksDQo+ID4gPiA+ICAgICAgbm9fZGF0 YV9kZXBlbmRlbmNpZXMgKGZhbHNlKSwNCj4gPiA+ID4gICAgICBoYXNfbWFza19zdG9yZSAoZmFs c2UpLA0KPiA+ID4gPiAgICAgIHNjYWxhcl9sb29wX3NjYWxpbmcgKHByb2ZpbGVfcHJvYmFiaWxp dHk6OnVuaW5pdGlhbGl6ZWQgKCkpLA0KPiA+ID4gPiBAQCAtMTE5OSw2ICsxMjAxLDE0IEBAIHZl Y3RfbmVlZF9wZWVsaW5nX29yX3BhcnRpYWxfdmVjdG9yc19wDQo+ID4gPiAobG9vcF92ZWNfaW5m byBsb29wX3ZpbmZvKQ0KPiA+ID4gPiAgICAgIHRoID0gTE9PUF9WSU5GT19DT1NUX01PREVMX1RI UkVTSE9MRA0KPiA+ID4gKExPT1BfVklORk9fT1JJR19MT09QX0lORk8NCj4gPiA+ID4gIAkJCQkJ ICAobG9vcF92aW5mbykpOw0KPiA+ID4gPg0KPiA+ID4gPiArICAvKiBXaGVuIHdlIGhhdmUgbXVs dGlwbGUgZXhpdHMgYW5kIFZGIGlzIHVua25vd24sIHdlIG11c3QgcmVxdWlyZQ0KPiA+ID4gcGFy dGlhbA0KPiA+ID4gPiArICAgICB2ZWN0b3JzIGJlY2F1c2UgdGhlIGxvb3AgYm91bmRzIGlzIG5v dCBhIG1pbmltdW0gYnV0IGEgbWF4aW11bS4NCj4gPiA+IFRoYXQgaXMgdG8NCj4gPiA+ID4gKyAg ICAgc2F5IHdlIGNhbm5vdCB1bnByZWRpY2F0ZSB0aGUgbWFpbiBsb29wIHVubGVzcyB3ZSBwZWVs IG9yIHVzZSBwYXJ0aWFsDQo+ID4gPiA+ICsgICAgIHZlY3RvcnMgaW4gdGhlIGVwaWxvZ3VlLiAg Ki8NCj4gPiA+ID4gKyAgaWYgKExPT1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29wX3ZpbmZvKQ0K PiA+ID4gPiArICAgICAgJiYgIUxPT1BfVklORk9fVkVDVF9GQUNUT1IgKGxvb3BfdmluZm8pLmlz X2NvbnN0YW50ICgpKQ0KPiA+ID4gPiArICAgIHJldHVybiB0cnVlOw0KPiA+ID4gPiArDQo+ID4g PiA+ICAgIGlmIChMT09QX1ZJTkZPX05JVEVSU19LTk9XTl9QIChsb29wX3ZpbmZvKQ0KPiA+ID4g PiAgICAgICAgJiYgTE9PUF9WSU5GT19QRUVMSU5HX0ZPUl9BTElHTk1FTlQgKGxvb3BfdmluZm8p ID49IDApDQo+ID4gPiA+ICAgICAgew0KPiA+ID4gPiBAQCAtMTY1MiwxMiArMTY2MiwxMiBAQCB2 ZWN0X2NvbXB1dGVfc2luZ2xlX3NjYWxhcl9pdGVyYXRpb25fY29zdA0KPiA+ID4gKGxvb3BfdmVj X2luZm8gbG9vcF92aW5mbykNCj4gPiA+ID4gICAgbG9vcF92aW5mby0+c2NhbGFyX2Nvc3RzLT5m aW5pc2hfY29zdCAobnVsbHB0cik7DQo+ID4gPiA+ICB9DQo+ID4gPiA+DQo+ID4gPiA+IC0NCj4g PiA+ID4gIC8qIEZ1bmN0aW9uIHZlY3RfYW5hbHl6ZV9sb29wX2Zvcm0uDQo+ID4gPiA+DQo+ID4g PiA+ICAgICBWZXJpZnkgdGhhdCBjZXJ0YWluIENGRyByZXN0cmljdGlvbnMgaG9sZCwgaW5jbHVk aW5nOg0KPiA+ID4gPiAgICAgLSB0aGUgbG9vcCBoYXMgYSBwcmUtaGVhZGVyDQo+ID4gPiA+IC0g ICAtIHRoZSBsb29wIGhhcyBhIHNpbmdsZSBlbnRyeSBhbmQgZXhpdA0KPiA+ID4gPiArICAgLSB0 aGUgbG9vcCBoYXMgYSBzaW5nbGUgZW50cnkNCj4gPiA+ID4gKyAgIC0gbmVzdGVkIGxvb3BzIGNh biBoYXZlIG9ubHkgYSBzaW5nbGUgZXhpdC4NCj4gPiA+ID4gICAgIC0gdGhlIGxvb3AgZXhpdCBj b25kaXRpb24gaXMgc2ltcGxlIGVub3VnaA0KPiA+ID4gPiAgICAgLSB0aGUgbnVtYmVyIG9mIGl0 ZXJhdGlvbnMgY2FuIGJlIGFuYWx5emVkLCBpLmUsIGEgY291bnRhYmxlIGxvb3AuICBUaGUNCj4g PiA+ID4gICAgICAgbml0ZXIgY291bGQgYmUgYW5hbHl6ZWQgdW5kZXIgc29tZSBhc3N1bXB0aW9u cy4gICovDQo+ID4gPiA+IEBAIC0xNjkzLDExICsxNzAzLDYgQEAgdmVjdF9hbmFseXplX2xvb3Bf Zm9ybSAoY2xhc3MgbG9vcCAqbG9vcCwNCj4gPiA+IHZlY3RfbG9vcF9mb3JtX2luZm8gKmluZm8p DQo+ID4gPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQo+ID4gPiA+ICAgICAgICAg ICAgICAgICAgICAgICAgICAoZXhpdC1iYikgICovDQo+ID4gPiA+DQo+ID4gPiA+IC0gICAgICBp ZiAobG9vcC0+bnVtX25vZGVzICE9IDIpDQo+ID4gPiA+IC0JcmV0dXJuIG9wdF9yZXN1bHQ6OmZh aWx1cmVfYXQgKHZlY3RfbG9jYXRpb24sDQo+ID4gPiA+IC0JCQkJICAgICAgICJub3QgdmVjdG9y aXplZDoiDQo+ID4gPiA+IC0JCQkJICAgICAgICIgY29udHJvbCBmbG93IGluIGxvb3AuXG4iKTsN Cj4gPiA+ID4gLQ0KPiA+ID4gPiAgICAgICAgaWYgKGVtcHR5X2Jsb2NrX3AgKGxvb3AtPmhlYWRl cikpDQo+ID4gPiA+ICAJcmV0dXJuIG9wdF9yZXN1bHQ6OmZhaWx1cmVfYXQgKHZlY3RfbG9jYXRp b24sDQo+ID4gPiA+ICAJCQkJICAgICAgICJub3QgdmVjdG9yaXplZDogZW1wdHkgbG9vcC5cbiIp Ow0KPiA+ID4gPiBAQCAtMTc2OCwxMSArMTc3MywxMyBAQCB2ZWN0X2FuYWx5emVfbG9vcF9mb3Jt IChjbGFzcyBsb29wICpsb29wLA0KPiA+ID4gdmVjdF9sb29wX2Zvcm1faW5mbyAqaW5mbykNCj4g PiA+ID4gICAgICAgICAgZHVtcF9wcmludGZfbG9jIChNU0dfTk9URSwgdmVjdF9sb2NhdGlvbiwN Cj4gPiA+ID4gIAkJCSAiQ29uc2lkZXJpbmcgb3V0ZXItbG9vcCB2ZWN0b3JpemF0aW9uLlxuIik7 DQo+ID4gPiA+ICAgICAgICBpbmZvLT5pbm5lcl9sb29wX2NvbmQgPSBpbm5lci5sb29wX2NvbmQ7 DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgIGlmICghc2luZ2xlX2V4aXQgKGxvb3ApKQ0KPiA+ ID4gPiArCXJldHVybiBvcHRfcmVzdWx0OjpmYWlsdXJlX2F0ICh2ZWN0X2xvY2F0aW9uLA0KPiA+ ID4gPiArCQkJCSAgICAgICAibm90IHZlY3Rvcml6ZWQ6IG11bHRpcGxlIGV4aXRzLlxuIik7DQo+ ID4gPiA+ICsNCj4gPiA+ID4gICAgICB9DQo+ID4gPiA+DQo+ID4gPiA+IC0gIGlmICghc2luZ2xl X2V4aXQgKGxvb3ApKQ0KPiA+ID4gPiAtICAgIHJldHVybiBvcHRfcmVzdWx0OjpmYWlsdXJlX2F0 ICh2ZWN0X2xvY2F0aW9uLA0KPiA+ID4gPiAtCQkJCSAgICJub3QgdmVjdG9yaXplZDogbXVsdGlw bGUgZXhpdHMuXG4iKTsNCj4gPiA+ID4gICAgaWYgKEVER0VfQ09VTlQgKGxvb3AtPmhlYWRlci0+ cHJlZHMpICE9IDIpDQo+ID4gPiA+ICAgICAgcmV0dXJuIG9wdF9yZXN1bHQ6OmZhaWx1cmVfYXQg KHZlY3RfbG9jYXRpb24sDQo+ID4gPiA+ICAJCQkJICAgIm5vdCB2ZWN0b3JpemVkOiINCj4gPiA+ ID4gQEAgLTE3ODgsMTEgKzE3OTUsMzYgQEAgdmVjdF9hbmFseXplX2xvb3BfZm9ybSAoY2xhc3Mg bG9vcCAqbG9vcCwNCj4gPiA+IHZlY3RfbG9vcF9mb3JtX2luZm8gKmluZm8pDQo+ID4gPiA+ICAJ CQkJICAgIm5vdCB2ZWN0b3JpemVkOiBsYXRjaCBibG9jayBub3QgZW1wdHkuXG4iKTsNCj4gPiA+ ID4NCj4gPiA+ID4gICAgLyogTWFrZSBzdXJlIHRoZSBleGl0IGlzIG5vdCBhYm5vcm1hbC4gICov DQo+ID4gPiA+IC0gIGVkZ2UgZSA9IHNpbmdsZV9leGl0IChsb29wKTsNCj4gPiA+ID4gLSAgaWYg KGUtPmZsYWdzICYgRURHRV9BQk5PUk1BTCkNCj4gPiA+ID4gLSAgICByZXR1cm4gb3B0X3Jlc3Vs dDo6ZmFpbHVyZV9hdCAodmVjdF9sb2NhdGlvbiwNCj4gPiA+ID4gLQkJCQkgICAibm90IHZlY3Rv cml6ZWQ6Ig0KPiA+ID4gPiAtCQkJCSAgICIgYWJub3JtYWwgbG9vcCBleGl0IGVkZ2UuXG4iKTsN Cj4gPiA+ID4gKyAgYXV0b192ZWM8ZWRnZT4gZXhpdHMgPSBnZXRfbG9vcF9leGl0X2VkZ2VzIChs b29wKTsNCj4gPiA+ID4gKyAgZWRnZSBuZXhpdCA9IGxvb3AtPnZlY19sb29wX2l2Ow0KPiA+ID4g PiArICBmb3IgKGVkZ2UgZSA6IGV4aXRzKQ0KPiA+ID4gPiArICAgIHsNCj4gPiA+ID4gKyAgICAg IGlmIChlLT5mbGFncyAmIEVER0VfQUJOT1JNQUwpDQo+ID4gPiA+ICsJcmV0dXJuIG9wdF9yZXN1 bHQ6OmZhaWx1cmVfYXQgKHZlY3RfbG9jYXRpb24sDQo+ID4gPiA+ICsJCQkJICAgICAgICJub3Qg dmVjdG9yaXplZDoiDQo+ID4gPiA+ICsJCQkJICAgICAgICIgYWJub3JtYWwgbG9vcCBleGl0IGVk Z2UuXG4iKTsNCj4gPiA+ID4gKyAgICAgIC8qIEVhcmx5IGJyZWFrIEJCIG11c3QgYmUgYWZ0ZXIg dGhlIG1haW4gZXhpdCBCQi4gIEluIHRoZW9yeSB3ZSBzaG91bGQNCj4gPiA+ID4gKwkgYmUgYWJs ZSB0byB2ZWN0b3JpemUgdGhlIGludmVyc2Ugb3JkZXIsIGJ1dCB0aGUgY3VycmVudCBmbG93IGlu IHRoZQ0KPiA+ID4gPiArCSB0aGUgdmVjdG9yaXplciBhbHdheXMgYXNzdW1lcyB5b3UgdXBkYXRl IHN1Y2Nlc3NvciBQSEkgbm9kZXMsIG5vdA0KPiA+ID4gPiArCSBwcmVkcy4gICovDQo+ID4gPiA+ ICsgICAgICBpZiAoZSAhPSBuZXhpdCAmJiAhZG9taW5hdGVkX2J5X3AgKENESV9ET01JTkFUT1JT LCBuZXhpdC0+c3JjLCBlLQ0KPiA+ID4gPnNyYykpDQo+ID4gPiA+ICsJcmV0dXJuIG9wdF9yZXN1 bHQ6OmZhaWx1cmVfYXQgKHZlY3RfbG9jYXRpb24sDQo+ID4gPiA+ICsJCQkJICAgICAgICJub3Qg dmVjdG9yaXplZDoiDQo+ID4gPiA+ICsJCQkJICAgICAgICIgYWJub3JtYWwgbG9vcCBleGl0IGVk Z2Ugb3JkZXIuXG4iKTsNCj4gDQo+ICJ1bnN1cHBvcnRlZCBsb29wIGV4aXQgb3JkZXIiLCBidXQg SSBkb24ndCB1bmRlcnN0YW5kIHRoZSBjb21tZW50Lg0KPiANCg0KT25lIGZhaWx1cmUgSSBmb3Vu ZCBkdXJpbmcgYm9vdHN0cmFwIGlzIHRoYXQgdGhlcmUgd2FzIGEgQ0ZHIHdoZXJlIHRoZSBCQnMg d2VyZSBhbGwNCnJldmVyc2VkLiAgU2hvdWxkIGhhdmUgaXQgaW4gdGhlIHRlc3RzdWl0ZSwgSSds bCBkaWcgaXQgb3V0IGFuZCBjb21lIGJhY2sgdG8geW91Lg0KDQo+ID4gPiA+ICsgICAgfQ0KPiA+ ID4gPiArDQo+ID4gPiA+ICsgIC8qIFdlIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgZWFybHkgZXhp dCBsb29wcyB3aXRoIGtub3duIGJvdW5kcy4gICAqLw0KPiANCj4gQnR3LCB3aHkncyB0aGF0PyAg SXMgdGhhdCBiZWNhdXNlIHdlIGRvbid0IHN1cHBvcnQgdGhlIGxvb3AtYXJvdW5kIGVkZ2U/DQo+ IElNSE8gdGhpcyBpcyB0aGUgbW9zdCBzZXJpb3VzIGxpbWl0YXRpb24gKGFuZCBhcyBzYWlkIGFi b3ZlIGl0IHNob3VsZCBiZQ0KPiB0cml2aWFsIHRvIGZpeCkuDQoNCk5haCwgaXQncyBqdXN0IHRp bWUg8J+YiiBJIHdhbnRlZCB0byBzdGFydCBnZXR0aW5nIGZlZWRiYWNrIGJlZm9yZSByZWxheGlu ZyBpdC4NCk15IHBhdGNoIDAvMTkgaGFzIGFuIGltcGxlbWVudGF0aW9uIHBsYW4gZm9yIHRoZSBy ZW1haW5pbmcgd29yay4NCg0KSSBwbGFuIHRvIHJlbGF4IHRoaXMgaW4gdGhpcyByZWxlYXNlLCBt b3N0IGxpa2VseSBpbiB0aGlzIHNlcmllcyBpdHNlbGYuDQoNCj4gDQo+ID4gPiA+ICsgIGlmIChl eGl0cy5sZW5ndGggKCkgPiAxKQ0KPiA+ID4gPiArICAgIHsNCj4gPiA+ID4gKyAgICAgIGNsYXNz IHRyZWVfbml0ZXJfZGVzYyBuaXRlcjsNCj4gPiA+ID4gKyAgICAgIGlmICghbnVtYmVyX29mX2l0 ZXJhdGlvbnNfZXhpdF9hc3N1bXB0aW9ucyAobG9vcCwgbmV4aXQsICZuaXRlciwNCj4gTlVMTCkN Cj4gPiA+ID4gKwkgIHx8IGNocmVjX2NvbnRhaW5zX3VuZGV0ZXJtaW5lZCAobml0ZXIubml0ZXIp DQo+ID4gPiA+ICsJICB8fCAhZXZvbHV0aW9uX2Z1bmN0aW9uX2lzX2NvbnN0YW50X3AgKG5pdGVy Lm5pdGVyKSkNCj4gPiA+ID4gKwlyZXR1cm4gb3B0X3Jlc3VsdDo6ZmFpbHVyZV9hdCAodmVjdF9s b2NhdGlvbiwNCj4gPiA+ID4gKwkJCQkgICAgICAgIm5vdCB2ZWN0b3JpemVkOiINCj4gPiA+ID4g KwkJCQkgICAgICAgIiBlYXJseSBicmVha3Mgb25seSBzdXBwb3J0ZWQgb24gbG9vcHMiDQo+ID4g PiA+ICsJCQkJICAgICAgICIgd2l0aCBrbm93biBpdGVyYXRpb24gYm91bmRzLlxuIik7DQo+ID4g PiA+ICsgICAgfQ0KPiA+ID4gPg0KPiA+ID4gPiAgICBpbmZvLT5jb25kcw0KPiA+ID4gPiAgICAg ID0gdmVjdF9nZXRfbG9vcF9uaXRlcnMgKGxvb3AsICZpbmZvLT5hc3N1bXB0aW9ucywNCj4gPiA+ ID4gQEAgLTE4NjYsNiArMTg5OCwxMCBAQCB2ZWN0X2NyZWF0ZV9sb29wX3ZpbmZvIChjbGFzcyBs b29wICpsb29wLA0KPiA+ID4gdmVjX2luZm9fc2hhcmVkICpzaGFyZWQsDQo+ID4gPiA+ICAgIExP T1BfVklORk9fTE9PUF9DT05EUyAobG9vcF92aW5mbykuc2FmZV9zcGxpY2UgKGluZm8tDQo+ID4g PiA+YWx0X2xvb3BfY29uZHMpOw0KPiA+ID4gPiAgICBMT09QX1ZJTkZPX0xPT1BfSVZfQ09ORCAo bG9vcF92aW5mbykgPSBpbmZvLT5sb29wX2NvbmQ7DQo+ID4gPiA+DQo+ID4gPiA+ICsgIC8qIENo ZWNrIHRvIHNlZSBpZiB3ZSdyZSB2ZWN0b3JpemluZyBtdWx0aXBsZSBleGl0cy4gICovDQo+ID4g PiA+ICsgIExPT1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29wX3ZpbmZvKQ0KPiA+ID4gPiArICAg ID0gIUxPT1BfVklORk9fTE9PUF9DT05EUyAobG9vcF92aW5mbykuaXNfZW1wdHkgKCk7DQo+ID4g PiA+ICsNCj4gPiA+ID4gICAgaWYgKGluZm8tPmlubmVyX2xvb3BfY29uZCkNCj4gPiA+ID4gICAg ICB7DQo+ID4gPiA+ICAgICAgICBzdG10X3ZlY19pbmZvIGlubmVyX2xvb3BfY29uZF9pbmZvDQo+ ID4gPiA+IEBAIC0zMDcwLDcgKzMxMDYsOCBAQCBzdGFydF9vdmVyOg0KPiA+ID4gPg0KPiA+ID4g PiAgICAvKiBJZiBhbiBlcGlsb2d1ZSBsb29wIGlzIHJlcXVpcmVkIG1ha2Ugc3VyZSB3ZSBjYW4g Y3JlYXRlIG9uZS4gICovDQo+ID4gPiA+ICAgIGlmIChMT09QX1ZJTkZPX1BFRUxJTkdfRk9SX0dB UFMgKGxvb3BfdmluZm8pDQo+ID4gPiA+IC0gICAgICB8fCBMT09QX1ZJTkZPX1BFRUxJTkdfRk9S X05JVEVSIChsb29wX3ZpbmZvKSkNCj4gPiA+ID4gKyAgICAgIHx8IExPT1BfVklORk9fUEVFTElO R19GT1JfTklURVIgKGxvb3BfdmluZm8pDQo+ID4gPiA+ICsgICAgICB8fCBMT09QX1ZJTkZPX0VB UkxZX0JSRUFLUyAobG9vcF92aW5mbykpDQo+ID4gPiA+ICAgICAgew0KPiA+ID4gPiAgICAgICAg aWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0KPiA+ID4gPiAgICAgICAgICBkdW1wX3ByaW50Zl9sb2Mg KE1TR19OT1RFLCB2ZWN0X2xvY2F0aW9uLCAiZXBpbG9nIGxvb3ANCj4gcmVxdWlyZWRcbiIpOw0K PiA+ID4gPiBAQCAtNTc5Nyw3ICs1ODM0LDcgQEAgdmVjdF9jcmVhdGVfZXBpbG9nX2Zvcl9yZWR1 Y3Rpb24NCj4gKGxvb3BfdmVjX2luZm8NCj4gPiA+IGxvb3BfdmluZm8sDQo+ID4gPiA+ICAgIGJh c2ljX2Jsb2NrIGV4aXRfYmI7DQo+ID4gPiA+ICAgIHRyZWUgc2NhbGFyX2Rlc3Q7DQo+ID4gPiA+ ICAgIHRyZWUgc2NhbGFyX3R5cGU7DQo+ID4gPiA+IC0gIGdpbXBsZSAqbmV3X3BoaSA9IE5VTEws ICpwaGk7DQo+ID4gPiA+ICsgIGdpbXBsZSAqbmV3X3BoaSA9IE5VTEwsICpwaGkgPSBOVUxMOw0K PiA+ID4gPiAgICBnaW1wbGVfc3RtdF9pdGVyYXRvciBleGl0X2dzaTsNCj4gPiA+ID4gICAgdHJl ZSBuZXdfdGVtcCA9IE5VTExfVFJFRSwgbmV3X25hbWUsIG5ld19zY2FsYXJfZGVzdDsNCj4gPiA+ ID4gICAgZ2ltcGxlICplcGlsb2dfc3RtdCA9IE5VTEw7DQo+ID4gPiA+IEBAIC02MDM5LDYgKzYw NzYsMzMgQEAgdmVjdF9jcmVhdGVfZXBpbG9nX2Zvcl9yZWR1Y3Rpb24NCj4gPiA+IChsb29wX3Zl Y19pbmZvIGxvb3BfdmluZm8sDQo+ID4gPiA+ICAJICBuZXdfZGVmID0gZ2ltcGxlX2NvbnZlcnQg KCZzdG10cywgdmVjdHlwZSwgbmV3X2RlZik7DQo+ID4gPiA+ICAJICByZWR1Y19pbnB1dHMucXVp Y2tfcHVzaCAobmV3X2RlZik7DQo+ID4gPiA+ICAJfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsJLyog VXBkYXRlIHRoZSBvdGhlciBleGl0cy4gICovDQo+ID4gPiA+ICsJaWYgKExPT1BfVklORk9fRUFS TFlfQlJFQUtTIChsb29wX3ZpbmZvKSkNCj4gPiA+ID4gKwkgIHsNCj4gPiA+ID4gKwkgICAgdmVj PGVkZ2U+IGFsdF9leGl0cyA9IExPT1BfVklORk9fQUxUX0VYSVRTIChsb29wX3ZpbmZvKTsNCj4g PiA+ID4gKwkgICAgZ3BoaV9pdGVyYXRvciBnc2ksIGdzaTE7DQo+ID4gPiA+ICsJICAgIGZvciAo ZWRnZSBleGl0IDogYWx0X2V4aXRzKQ0KPiA+ID4gPiArCSAgICAgIHsNCj4gPiA+ID4gKwkJLyog RmluZCB0aGUgcGhpIG5vZGUgdG8gcHJvcGFnZXQgaW50byB0aGUgZXhpdCBibG9jayBmb3IgZWFj aA0KPiA+ID4gPiArCQkgICBleGl0IGVkZ2UuICAqLw0KPiA+ID4gPiArCQlmb3IgKGdzaSA9IGdz aV9zdGFydF9waGlzIChleGl0X2JiKSwNCj4gPiA+ID4gKwkJICAgICBnc2kxID0gZ3NpX3N0YXJ0 X3BoaXMgKGV4aXQtPnNyYyk7DQo+IA0KPiBleGl0LT5zcmMgPT0gbG9vcC0+aGVhZGVyLCByaWdo dD8gIEkgdGhpbmsgdGhpcyB3b24ndCB3b3JrIGZvciBtdWx0aXBsZQ0KPiBhbHRlcm5hdGUgZXhp dHMuICBJdCdzIHByb2JhYmx5IGVhc2llciB0byBkbyB0aGlzIHdoZXJlIHdlIGNyZWF0ZSB0aGUN Cj4gTEMgUEhJIG5vZGUgZm9yIHRoZSByZWR1Y3Rpb24gcmVzdWx0Pw0KDQpObyBleGl0LT5zcmMg PT0gZGVmaW5pdGlvbiBibG9jayBvZiB0aGUgZ2NvbmQuIA0KDQo+IA0KPiA+ID4gPiArCQkgICAg ICFnc2lfZW5kX3AgKGdzaSkgJiYgIWdzaV9lbmRfcCAoZ3NpMSk7DQo+ID4gPiA+ICsJCSAgICAg Z3NpX25leHQgKCZnc2kpLCBnc2lfbmV4dCAoJmdzaTEpKQ0KPiA+ID4gPiArCQkgIHsNCj4gPiA+ ID4gKwkJICAgIC8qIFRoZXJlIHJlYWxseSBzaG91bGQgYmUgYSBmdW5jdGlvbiB0byBqdXN0IGdl dCB0aGUgbnVtYmVyDQo+ID4gPiA+ICsJCSAgICAgICBvZiBwaGlzIGluc2lkZSBhIGJiLiAgKi8N Cj4gPiA+ID4gKwkJICAgIGlmIChwaGkgJiYgcGhpID09IGdzaS5waGkgKCkpDQo+ID4gPiA+ICsJ CSAgICAgIHsNCj4gPiA+ID4gKwkJCWdwaGkgKnBoaTEgPSBnc2kxLnBoaSAoKTsNCj4gPiA+ID4g KwkJCVNFVF9QSElfQVJHX0RFRiAocGhpLCBleGl0LT5kZXN0X2lkeCwNCj4gPiA+ID4gKwkJCQkJ IFBISV9SRVNVTFQgKHBoaTEpKTsNCj4gDQo+IEkgdGhpbmsgd2Uga25vdyB0aGUgaGVhZGVyIFBI SSBvZiBhIHJlZHVjdGlvbiBwZXJmZWN0bHkgd2VsbCwgdGhlcmUNCj4gc2hvdWxkbid0IGJlIHRo ZSBuZWVkIHRvICJzZWFyY2giIGZvciBpdC4NCj4gDQo+ID4gPiA+ICsJCQlicmVhazsNCj4gPiA+ ID4gKwkJICAgICAgfQ0KPiA+ID4gPiArCQkgIH0NCj4gPiA+ID4gKwkgICAgICB9DQo+ID4gPiA+ ICsJICB9DQo+ID4gPiA+ICAgICAgICBnc2lfaW5zZXJ0X3NlcV9iZWZvcmUgKCZleGl0X2dzaSwg c3RtdHMsIEdTSV9TQU1FX1NUTVQpOw0KPiA+ID4gPiAgICAgIH0NCj4gPiA+ID4NCj4gPiA+ID4g QEAgLTEwMzU1LDYgKzEwNDE5LDEzIEBAIHZlY3Rvcml6YWJsZV9saXZlX29wZXJhdGlvbiAodmVj X2luZm8NCj4gKnZpbmZvLA0KPiA+ID4gPiAgCSAgIG5ld190cmVlID0gbGFuZV9leHRyYWN0IDx2 ZWNfbGhzJywgLi4uPjsNCj4gPiA+ID4gIAkgICBsaHMnID0gbmV3X3RyZWU7ICAqLw0KPiA+ID4g Pg0KPiA+ID4gPiArICAgICAgLyogV2hlbiB2ZWN0b3JpemluZyBhbiBlYXJseSBicmVhaywgYW55 IGxpdmUgc3RhdGVtZW50IHRoYXQgaXMgdXNlZA0KPiA+ID4gPiArCSBvdXRzaWRlIG9mIHRoZSBs b29wIGFyZSBkZWFkLiAgVGhlIGxvb3Agd2lsbCBuZXZlciBnZXQgdG8gdGhlbS4NCj4gPiA+ID4g KwkgV2UgY291bGQgY2hhbmdlIHRoZSBsaXZlbmVzcyB2YWx1ZSBkdXJpbmcgYW5hbHlzaXMgaW5z dGVhZCBidXQgc2luY2UNCj4gPiA+ID4gKwkgdGhlIGJlbG93IGNvZGUgaXMgaW52YWxpZCBhbnl3 YXkganVzdCBpZ25vcmUgaXQgZHVyaW5nIGNvZGVnZW4uICAqLw0KPiA+ID4gPiArICAgICAgaWYg KExPT1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29wX3ZpbmZvKSkNCj4gPiA+ID4gKwlyZXR1cm4g dHJ1ZTsNCj4gDQo+IEJ1dCB3aGF0IGFib3V0IHRoZSB2YWx1ZSB0aGF0J3MgbGl2ZSBhY3Jvc3Mg dGhlIG1haW4gZXhpdCB3aGVuIHRoZQ0KPiBlcGlsb2d1ZSBpcyBub3QgZW50ZXJlZD8NCg0KTXkg dW5kZXJzdGFuZGluZyBpcyB0aGF0IHZlY3Rvcml6YWJsZV9saXZlX29wZXJhdGlvbiBvbmx5IHZl Y3Rvcml6ZXMgc3RhdGVtZW50cyB3aXRoaW4NCmEgbG9vcCB0aGF0IGNhbiBiZSBsaXZlIG91dHNp ZGUsIEluIHRoaXMgY2FzZSBlLmcuIHN0YXRlbWVudHMgaW5zaWRlIHRoZSBib2R5IG9mIHRoZSBJ Ri4NCg0KV2hhdCB5b3UncmUgZGVzY3JpYmluZyBhYm92ZSBpcyBkb25lIGJ5IG90aGVyIHZlY3Rv cml6YWJsZV9yZWR1Y3Rpb24gZXRjLg0KDQpUaGF0IHNhaWQsIEkgY2FuIG1ha2UgdGhpcyBtdWNo IHNhZmVyIGJ5IGp1c3QgcmVzdHJpY3RpbmcgaXQgdG8gc3RhdGVtZW50cyBpbnNpZGUgdGhlIHNh bWUgQkINCmFzIGFuIGFsdCBleGl0IEJCLg0KDQo+IA0KPiA+ID4gPiArDQo+ID4gPiA+ICAgICAg ICBjbGFzcyBsb29wICpsb29wID0gTE9PUF9WSU5GT19MT09QIChsb29wX3ZpbmZvKTsNCj4gPiA+ ID4gICAgICAgIGJhc2ljX2Jsb2NrIGV4aXRfYmIgPSBMT09QX1ZJTkZPX0lWX0VYSVQgKGxvb3Bf dmluZm8pLT5kZXN0Ow0KPiA+ID4gPiAgICAgICAgZ2NjX2Fzc2VydCAoc2luZ2xlX3ByZWRfcCAo ZXhpdF9iYikpOw0KPiA+ID4gPiBAQCAtMTEyNzcsNyArMTEzNDgsNyBAQCB2ZWN0X3RyYW5zZm9y bV9sb29wIChsb29wX3ZlY19pbmZvDQo+ID4gPiBsb29wX3ZpbmZvLCBnaW1wbGUgKmxvb3BfdmVj dG9yaXplZF9jYWxsKQ0KPiA+ID4gPiAgICAvKiBNYWtlIHN1cmUgdGhlcmUgZXhpc3RzIGEgc2lu Z2xlLXByZWRlY2Vzc29yIGV4aXQgYmIuICBEbyB0aGlzIGJlZm9yZQ0KPiA+ID4gPiAgICAgICB2 ZXJzaW9uaW5nLiAgICovDQo+ID4gPiA+ICAgIGVkZ2UgZSA9IExPT1BfVklORk9fSVZfRVhJVCAo bG9vcF92aW5mbyk7DQo+ID4gPiA+IC0gIGlmICghIHNpbmdsZV9wcmVkX3AgKGUtPmRlc3QpKQ0K PiA+ID4gPiArICBpZiAoZSAmJiAhIHNpbmdsZV9wcmVkX3AgKGUtPmRlc3QpICYmICFMT09QX1ZJ TkZPX0VBUkxZX0JSRUFLUw0KPiA+ID4gKGxvb3BfdmluZm8pKQ0KPiANCj4gZSBjYW4gYmUgTlVM TCBoZXJlPyAgSSB0aGluayB3ZSBzaG91bGQgcmVqZWN0IHN1Y2ggbG9vcHMgZWFybGllci4NCj4g DQoNCkFoIG5vLCB0aGF0J3MgbGVmdC1vdmVyIGZyb20gd2hlbiB0aGlzIHVzZWQgc2luZ2xlX2V4 aXQuICBJdCBzaG91bGQgYmUgcmVtb3ZlZA0KSW4gdGhpcyBwYXRjaC4gIEhhZCBtaXNzZWQgaXQs IHNvcnJ5Lg0KDQo+ID4gPiA+ICAgICAgew0KPiA+ID4gPiAgICAgICAgc3BsaXRfbG9vcF9leGl0 X2VkZ2UgKGUsIHRydWUpOw0KPiA+ID4gPiAgICAgICAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0K PiA+ID4gPiBAQCAtMTEzMDMsNyArMTEzNzQsNyBAQCB2ZWN0X3RyYW5zZm9ybV9sb29wIChsb29w X3ZlY19pbmZvDQo+ID4gPiBsb29wX3ZpbmZvLCBnaW1wbGUgKmxvb3BfdmVjdG9yaXplZF9jYWxs KQ0KPiA+ID4gPiAgICBpZiAoTE9PUF9WSU5GT19TQ0FMQVJfTE9PUCAobG9vcF92aW5mbykpDQo+ ID4gPiA+ICAgICAgew0KPiA+ID4gPiAgICAgICAgZSA9IHNpbmdsZV9leGl0IChMT09QX1ZJTkZP X1NDQUxBUl9MT09QIChsb29wX3ZpbmZvKSk7DQo+ID4gPiA+IC0gICAgICBpZiAoISBzaW5nbGVf cHJlZF9wIChlLT5kZXN0KSkNCj4gPiA+ID4gKyAgICAgIGlmIChlICYmICEgc2luZ2xlX3ByZWRf cCAoZS0+ZGVzdCkpDQo+ID4gPiA+ICAJew0KPiA+ID4gPiAgCSAgc3BsaXRfbG9vcF9leGl0X2Vk Z2UgKGUsIHRydWUpOw0KPiA+ID4gPiAgCSAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0KPiA+ID4g PiBAQCAtMTE2NDEsNyArMTE3MTIsOCBAQCB2ZWN0X3RyYW5zZm9ybV9sb29wIChsb29wX3ZlY19p bmZvDQo+ID4gPiBsb29wX3ZpbmZvLCBnaW1wbGUgKmxvb3BfdmVjdG9yaXplZF9jYWxsKQ0KPiA+ ID4gPg0KPiA+ID4gPiAgICAvKiBMb29wcyB2ZWN0b3JpemVkIHdpdGggYSB2YXJpYWJsZSBmYWN0 b3Igd29uJ3QgYmVuZWZpdCBmcm9tDQo+ID4gPiA+ICAgICAgIHVucm9sbGluZy9wZWVsaW5nLiAg Ki8NCj4gDQo+IHVwZGF0ZSB0aGUgY29tbWVudD8gIFdoeSB3b3VsZCB3ZSB1bnJvbGwgYSBWTEEg bG9vcCB3aXRoIGVhcmx5IGJyZWFrcz8NCj4gT3IgZGlkIHlvdSBtZWFuIHRvIHVzZSB8fCBMT09Q X1ZJTkZPX0VBUkxZX0JSRUFLUyAobG9vcF92aW5mbyk/DQo+IA0KDQpBaCBpbmRlZWQsIHNob3Vs ZCBiZSB8fC4NCg0KPiA+ID4gPiAtICBpZiAoIXZmLmlzX2NvbnN0YW50ICgpKQ0KPiA+ID4gPiAr ICBpZiAoIXZmLmlzX2NvbnN0YW50ICgpDQo+ID4gPiA+ICsgICAgICAmJiAhTE9PUF9WSU5GT19F QVJMWV9CUkVBS1MgKGxvb3BfdmluZm8pKQ0KPiA+ID4gPiAgICAgIHsNCj4gPiA+ID4gICAgICAg IGxvb3AtPnVucm9sbCA9IDE7DQo+ID4gPiA+ICAgICAgICBpZiAoZHVtcF9lbmFibGVkX3AgKCkp DQo+ID4gPiA+IGRpZmYgLS1naXQgYS9nY2MvdHJlZS12ZWN0LXN0bXRzLmNjIGIvZ2NjL3RyZWUt dmVjdC1zdG10cy5jYw0KPiA+ID4gPiBpbmRleA0KPiA+ID4NCj4gODdjNDM1M2ZhNTE4MGZjYjdm NjBiMTkyODk3NDU2Y2YyNGYzZmRiZS4uMDM1MjRlODUwMGVlMDZkZjQyZjgyYWYNCj4gPiA+IGU3 OGVlMmE3YzYyN2JlNDViIDEwMDY0NA0KPiA+ID4gPiAtLS0gYS9nY2MvdHJlZS12ZWN0LXN0bXRz LmNjDQo+ID4gPiA+ICsrKyBiL2djYy90cmVlLXZlY3Qtc3RtdHMuY2MNCj4gPiA+ID4gQEAgLTM0 NCw5ICszNDQsMzQgQEAgdmVjdF9zdG10X3JlbGV2YW50X3AgKHN0bXRfdmVjX2luZm8NCj4gc3Rt dF9pbmZvLA0KPiA+ID4gbG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLA0KPiA+ID4gPiAgICAqbGl2 ZV9wID0gZmFsc2U7DQo+ID4gPiA+DQo+ID4gPiA+ICAgIC8qIGNvbmQgc3RtdCBvdGhlciB0aGFu IGxvb3AgZXhpdCBjb25kLiAgKi8NCj4gPiA+ID4gLSAgaWYgKGlzX2N0cmxfc3RtdCAoc3RtdF9p bmZvLT5zdG10KQ0KPiA+ID4gPiAtICAgICAgJiYgU1RNVF9WSU5GT19UWVBFIChzdG10X2luZm8p ICE9IGxvb3BfZXhpdF9jdHJsX3ZlY19pbmZvX3R5cGUpDQo+ID4gPiA+IC0gICAgKnJlbGV2YW50 ID0gdmVjdF91c2VkX2luX3Njb3BlOw0KPiANCj4gaG93IHdhcyB0aGF0IGV2ZXIgaGl0IGJlZm9y ZT8gIEZvciBvdXRlciBsb29wIHByb2Nlc3Npbmcgd2l0aCBvdXRlciBsb29wDQo+IHZlY3Rvcml6 YXRpb24/DQo+DQoNCkkgYmVsaWV2ZSBzbywgYmVjYXVzZSB0aGUgb3V0ZXItbG9vcCB3b3VsZCBz ZWUgdGhlIGV4aXQgY29uZCBvZiB0aGUgaW5uZXIgbG9vcCBhcyB3ZWxsLg0KDQo+ID4gPiA+ICsg IGlmIChpc19jdHJsX3N0bXQgKHN0bXRfaW5mby0+c3RtdCkpDQo+ID4gPiA+ICsgICAgew0KPiA+ ID4gPiArICAgICAgLyogSWRlYWxseSBFREdFX0xPT1BfRVhJVCB3b3VsZCBoYXZlIGJlZW4gc2V0 IG9uIHRoZSBleGl0IGVkZ2UsDQo+IGJ1dA0KPiA+ID4gPiArCSBpdCBsb29rcyBsaWtlIGxvb3Bf bWFuaXAgZG9lc24ndCBkbyB0aGF0Li4gIFNvIHdlIGhhdmUgdG8gZG8gaXQNCj4gPiA+ID4gKwkg dGhlIGhhcmQgd2F5LiAgKi8NCj4gPiA+ID4gKyAgICAgIGJhc2ljX2Jsb2NrIGJiID0gZ2ltcGxl X2JiIChzdG10X2luZm8tPnN0bXQpOw0KPiA+ID4gPiArICAgICAgYm9vbCBleGl0X2JiID0gZmFs c2UsIGVhcmx5X2V4aXQgPSBmYWxzZTsNCj4gPiA+ID4gKyAgICAgIGVkZ2VfaXRlcmF0b3IgZWk7 DQo+ID4gPiA+ICsgICAgICBlZGdlIGU7DQo+ID4gPiA+ICsgICAgICBGT1JfRUFDSF9FREdFIChl LCBlaSwgYmItPnN1Y2NzKQ0KPiA+ID4gPiArICAgICAgICBpZiAoIWZsb3dfYmJfaW5zaWRlX2xv b3BfcCAobG9vcCwgZS0+ZGVzdCkpDQo+ID4gPiA+ICsJICB7DQo+ID4gPiA+ICsJICAgIGV4aXRf YmIgPSB0cnVlOw0KPiA+ID4gPiArCSAgICBlYXJseV9leGl0ID0gbG9vcC0+dmVjX2xvb3BfaXYt PnNyYyAhPSBiYjsNCj4gPiA+ID4gKwkgICAgYnJlYWs7DQo+ID4gPiA+ICsJICB9DQo+ID4gPiA+ ICsNCj4gPiA+ID4gKyAgICAgIC8qIFdlIHNob3VsZCBoYXZlIHByb2Nlc3NlZCBhbnkgZXhpdCBl ZGdlLCBzbyBhbiBlZGdlIG5vdCBhbiBlYXJseQ0KPiA+ID4gPiArCSBicmVhayBtdXN0IGJlIGEg bG9vcCBJViBlZGdlLiAgV2UgbmVlZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZQ0KPiA+ID4g PiArCSB0d28gYXMgd2UgZG9uJ3Qgd2FudCB0byBnZW5lcmF0ZSBjb2RlIGZvciB0aGUgbWFpbiBs b29wIElWLiAgKi8NCj4gPiA+ID4gKyAgICAgIGlmIChleGl0X2JiKQ0KPiA+ID4gPiArCXsNCj4g PiA+ID4gKwkgIGlmIChlYXJseV9leGl0KQ0KPiA+ID4gPiArCSAgICAqcmVsZXZhbnQgPSB2ZWN0 X3VzZWRfaW5fc2NvcGU7DQo+ID4gPiA+ICsJfQ0KPiANCj4gSSB3b25kZXIgd2h5IHlvdSBjYW4n dCBzaW1wbHkgZG8NCj4gDQo+ICAgICAgICAgIGlmIChpc19jdHJsX3N0bXQgKHN0bXRfaW5mby0+ c3RtdCkNCj4gICAgICAgICAgICAgICYmIHN0bXRfaW5mby0+c3RtdCAhPSBMT09QX1ZJTkZPX0NP TkQgKGxvb3BfaW5mbykpDQo+IA0KPiA/DQo+IA0KPiA+ID4gPiArICAgICAgZWxzZSBpZiAoYmIt Pmxvb3BfZmF0aGVyID09IGxvb3ApDQo+ID4gPiA+ICsJTE9PUF9WSU5GT19HRU5FUkFMX0NUUl9G TE9XIChsb29wX3ZpbmZvKSA9IHRydWU7DQo+IA0KPiBzbyBmb3IgY29udHJvbCBmbG93IG5vdCBl eGl0aW5nIHRoZSBsb29wIHlvdSBjYW4gY2hlY2sNCj4gbG9vcF9leGl0c19mcm9tX2JiX3AgKCku DQo+IA0KPiA+ID4gPiArICAgIH0NCj4gPiA+ID4NCj4gPiA+ID4gICAgLyogY2hhbmdpbmcgbWVt b3J5LiAgKi8NCj4gPiA+ID4gICAgaWYgKGdpbXBsZV9jb2RlIChzdG10X2luZm8tPnN0bXQpICE9 IEdJTVBMRV9QSEkpDQo+ID4gPiA+IEBAIC0zNTksNiArMzg0LDExIEBAIHZlY3Rfc3RtdF9yZWxl dmFudF9wIChzdG10X3ZlY19pbmZvDQo+IHN0bXRfaW5mbywNCj4gPiA+IGxvb3BfdmVjX2luZm8g bG9vcF92aW5mbywNCj4gPiA+ID4gIAkqcmVsZXZhbnQgPSB2ZWN0X3VzZWRfaW5fc2NvcGU7DQo+ ID4gPiA+ICAgICAgICB9DQo+ID4gPiA+DQo+ID4gPiA+ICsgIGF1dG9fdmVjPGVkZ2U+IGV4aXRz ID0gZ2V0X2xvb3BfZXhpdF9lZGdlcyAobG9vcCk7DQo+ID4gPiA+ICsgIGF1dG9fYml0bWFwIGV4 aXRfYmJzOw0KPiA+ID4gPiArICBmb3IgKGVkZ2UgZXhpdCA6IGV4aXRzKQ0KPiA+ID4gPiArICAg IGJpdG1hcF9zZXRfYml0IChleGl0X2JicywgZXhpdC0+ZGVzdC0+aW5kZXgpOw0KPiA+ID4gPiAr DQo+ID4gPiA+ICAgIC8qIHVzZXMgb3V0c2lkZSB0aGUgbG9vcC4gICovDQo+ID4gPiA+ICAgIEZP Ul9FQUNIX1BISV9PUl9TVE1UX0RFRiAoZGVmX3AsIHN0bXRfaW5mby0+c3RtdCwgb3BfaXRlciwN Cj4gPiA+IFNTQV9PUF9ERUYpDQo+ID4gPiA+ICAgICAgew0KPiA+ID4gPiBAQCAtMzc3LDcgKzQw Nyw3IEBAIHZlY3Rfc3RtdF9yZWxldmFudF9wIChzdG10X3ZlY19pbmZvIHN0bXRfaW5mbywNCj4g PiA+IGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywNCj4gPiA+ID4gIAkgICAgICAvKiBXZSBleHBl Y3QgYWxsIHN1Y2ggdXNlcyB0byBiZSBpbiB0aGUgbG9vcCBleGl0IHBoaXMNCj4gPiA+ID4gIAkJ IChiZWNhdXNlIG9mIGxvb3AgY2xvc2VkIGZvcm0pICAgKi8NCj4gPiA+ID4gIAkgICAgICBnY2Nf YXNzZXJ0IChnaW1wbGVfY29kZSAoVVNFX1NUTVQgKHVzZV9wKSkgPT0gR0lNUExFX1BISSk7DQo+ ID4gPiA+IC0JICAgICAgZ2NjX2Fzc2VydCAoYmIgPT0gc2luZ2xlX2V4aXQgKGxvb3ApLT5kZXN0 KTsNCj4gPiA+ID4gKwkgICAgICBnY2NfYXNzZXJ0IChiaXRtYXBfYml0X3AgKGV4aXRfYmJzLCBi Yi0+aW5kZXgpKTsNCj4gDQo+IFRoYXQgbm93IGJlY29tZXMgcXVpdGUgZXhwZW5zaXZlIGNoZWNr aW5nIGFscmVhZHkgY292ZXJlZCBieSB0aGUgTEMgU1NBDQo+IHZlcmlmaWVyIHNvIEkgc3VnZ2Vz dCB0byBzaW1wbHkgZHJvcCB0aGlzIGFzc2VydCBpbnN0ZWFkLg0KPiANCj4gPiA+ID4gICAgICAg ICAgICAgICAgKmxpdmVfcCA9IHRydWU7DQo+ID4gPiA+ICAJICAgIH0NCj4gPiA+ID4gQEAgLTY4 Myw2ICs3MTMsMTMgQEAgdmVjdF9tYXJrX3N0bXRzX3RvX2JlX3ZlY3Rvcml6ZWQNCj4gPiA+IChs b29wX3ZlY19pbmZvIGxvb3BfdmluZm8sIGJvb2wgKmZhdGFsKQ0KPiA+ID4gPiAgCX0NCj4gPiA+ ID4gICAgICB9DQo+ID4gPiA+DQo+ID4gPiA+ICsgIC8qIElkZWFsbHkgdGhpcyBzaG91bGQgYmUg aW4gdmVjdF9hbmFseXplX2xvb3BfZm9ybSBidXQgd2UgaGF2ZW4ndA0KPiBzZWVuIGFsbA0KPiA+ ID4gPiArICAgICB0aGUgY29uZHMgeWV0IGF0IHRoYXQgcG9pbnQgYW5kIHRoZXJlJ3Mgbm8gcXVp Y2sgd2F5IHRvIHJldHJpZXZlIHRoZW0uDQo+ICovDQo+ID4gPiA+ICsgIGlmIChMT09QX1ZJTkZP X0dFTkVSQUxfQ1RSX0ZMT1cgKGxvb3BfdmluZm8pKQ0KPiA+ID4gPiArICAgIHJldHVybiBvcHRf cmVzdWx0OjpmYWlsdXJlX2F0ICh2ZWN0X2xvY2F0aW9uLA0KPiA+ID4gPiArCQkJCSAgICJub3Qg dmVjdG9yaXplZDoiDQo+ID4gPiA+ICsJCQkJICAgIiB1bnN1cHBvcnRlZCBjb250cm9sIGZsb3cg aW4gbG9vcC5cbiIpOw0KPiANCj4gc28gd2UgZGlkbid0IGRvIHRoaXMgYmVmb3JlPyAgQnV0IHNl ZSBhYm92ZSB3aGVyZSBJIHdvbmRlcmVkLiAgU28gd2hlbg0KPiBkb2VzIHRoaXMgaGl0IHdpdGgg ZWFybHkgZXhpdHMgYW5kIHdoeSBjYW4ndCB3ZSBjaGVjayBmb3IgdGhpcyBpbg0KPiB2ZWN0X3Zl cmlmeV9sb29wX2Zvcm0/DQo+IA0KDQpXZSBkaWQsIGJ1dCBpdCB3YXMgZG9uZSBpbiB2ZWN0X2Fu YWx5emVfbG9vcF9mb3JtIGJ1dCBpdCB3YXMgZG9uZSBwdXJlbHkgYmFzZWQNCm9uIG51bWJlciBv ZiBCQiBpbiB0aGUgbG9vcC4gIFRoaXMgcmVxdWlyZWQgbG9vcHMgdG8gYmUgaGlnaGx5IG5vcm1h bGl6ZWQgd2hpY2gNCmlzbid0IHRoZSBjYXNlIHdpdGggbXVsdGlwbGUgZXhpdHMuIFRoYXQgaXMg SSd2ZSBzZWVuIHZhcmlvdXMgbG9vcHMgd2l0aCBkaWZmZXJlbnQNCm51bWJlcnMgb2YgcmFuZG9t IGVtcHR5IGZhbGwgdGhyb3VnaCBCQiBpbiB0aGUgYm9keSBvciBhZnRlciB0aGUgbWFpbiBleGl0 IGJlZm9yZQ0KdGhlIGxhdGNoLg0KDQpXZSBjYW4gZG8gaXQgaW4gdmVjdF9hbmFseXplX2xvb3Bf Zm9ybSBidXQgdGhhdCByZXF1aXJlcyB1cyB0byB3YWxrIGFsbCB0aGUNCnN0YXRlbWVudHMgaW4g YWxsIHRoZSBiYXNpYyBibG9ja3MsIGJlY2F1c2UgdGhlIGxvb3BzIHRyYWNrIGV4aXQgZWRnZXMg YW5kIGEgZ2VuZXJhbA0KY29udHJvbCBmbG93IGVkZ2UgaXMgbm90IGVhc3kgdG8gZmluZCBhcyBm YXIgYXMgSSBrbm93LiAgSSBhZGRlZCBpdCBhdCB0aGlzIHBvaW50DQpiZWNhdXNlIGJ5IGhlcmUg YmVjYXVzZSBieSB0aGlzIHBvaW50IHdlIHdvdWxkIGhhdmUgd2Fsa2VkIGFsbCB0aGUgc3RhdGVt ZW50cy4NCg0KPiA+ID4gPiArDQo+ID4gPiA+ICAgIC8qIDIuIFByb2Nlc3Nfd29ya2xpc3QgKi8N Cj4gPiA+ID4gICAgd2hpbGUgKHdvcmtsaXN0Lmxlbmd0aCAoKSA+IDApDQo+ID4gPiA+ICAgICAg ew0KPiA+ID4gPiBAQCAtNzc4LDYgKzgxNSwyMCBAQCB2ZWN0X21hcmtfc3RtdHNfdG9fYmVfdmVj dG9yaXplZA0KPiA+ID4gKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywgYm9vbCAqZmF0YWwpDQo+ ID4gPiA+ICAJCQlyZXR1cm4gcmVzOw0KPiA+ID4gPiAgCQkgICAgfQ0KPiA+ID4gPiAgICAgICAg ICAgICAgICAgICB9DQo+ID4gPiA+ICsJICAgIH0NCj4gPiA+ID4gKwkgIGVsc2UgaWYgKGdjb25k ICpjb25kID0gZHluX2Nhc3QgPGdjb25kICo+IChzdG10X3ZpbmZvLT5zdG10KSkNCj4gPiA+ID4g KwkgICAgew0KPiA+ID4gPiArCSAgICAgIGVudW0gdHJlZV9jb2RlIHJoc19jb2RlID0gZ2ltcGxl X2NvbmRfY29kZSAoY29uZCk7DQo+ID4gPiA+ICsJICAgICAgZ2NjX2Fzc2VydCAoVFJFRV9DT0RF X0NMQVNTIChyaHNfY29kZSkgPT0gdGNjX2NvbXBhcmlzb24pOw0KPiA+ID4gPiArCSAgICAgIG9w dF9yZXN1bHQgcmVzDQo+ID4gPiA+ICsJCT0gcHJvY2Vzc191c2UgKHN0bXRfdmluZm8sIGdpbXBs ZV9jb25kX2xocyAoY29uZCksDQo+ID4gPiA+ICsJCQkgICAgICAgbG9vcF92aW5mbywgcmVsZXZh bnQsICZ3b3JrbGlzdCwgZmFsc2UpOw0KPiA+ID4gPiArCSAgICAgIGlmICghcmVzKQ0KPiA+ID4g PiArCQlyZXR1cm4gcmVzOw0KPiA+ID4gPiArCSAgICAgIHJlcyA9IHByb2Nlc3NfdXNlIChzdG10 X3ZpbmZvLCBnaW1wbGVfY29uZF9yaHMgKGNvbmQpLA0KPiA+ID4gPiArCQkJCWxvb3BfdmluZm8s IHJlbGV2YW50LCAmd29ya2xpc3QsIGZhbHNlKTsNCj4gPiA+ID4gKwkgICAgICBpZiAoIXJlcykN Cj4gPiA+ID4gKwkJcmV0dXJuIHJlczsNCj4gPiA+ID4gICAgICAgICAgICAgIH0NCj4gPiA+ID4g IAkgIGVsc2UgaWYgKGdjYWxsICpjYWxsID0gZHluX2Nhc3QgPGdjYWxsICo+IChzdG10X3ZpbmZv LT5zdG10KSkNCj4gPiA+ID4gIAkgICAgew0KPiA+ID4gPiBAQCAtMTE5MTksMTEgKzExOTcwLDE1 IEBAIHZlY3RfYW5hbHl6ZV9zdG10ICh2ZWNfaW5mbyAqdmluZm8sDQo+ID4gPiA+ICAJCQkgICAg IG5vZGVfaW5zdGFuY2UsIGNvc3RfdmVjKTsNCj4gPiA+ID4gICAgICAgIGlmICghcmVzKQ0KPiA+ ID4gPiAgCXJldHVybiByZXM7DQo+ID4gPiA+IC0gICB9DQo+ID4gPiA+ICsgICAgfQ0KPiA+ID4g PiArDQo+ID4gPiA+ICsgIGlmIChpc19jdHJsX3N0bXQgKHN0bXRfaW5mby0+c3RtdCkpDQo+ID4g PiA+ICsgICAgU1RNVF9WSU5GT19ERUZfVFlQRSAoc3RtdF9pbmZvKSA9IHZlY3RfZWFybHlfZXhp dF9kZWY7DQo+ID4gPiA+DQo+ID4gPiA+ICAgIHN3aXRjaCAoU1RNVF9WSU5GT19ERUZfVFlQRSAo c3RtdF9pbmZvKSkNCj4gPiA+ID4gICAgICB7DQo+ID4gPiA+ICAgICAgICBjYXNlIHZlY3RfaW50 ZXJuYWxfZGVmOg0KPiA+ID4gPiArICAgICAgY2FzZSB2ZWN0X2Vhcmx5X2V4aXRfZGVmOg0KPiA+ ID4gPiAgICAgICAgICBicmVhazsNCj4gPiA+ID4NCj4gPiA+ID4gICAgICAgIGNhc2UgdmVjdF9y ZWR1Y3Rpb25fZGVmOg0KPiA+ID4gPiBAQCAtMTE5NTYsNiArMTIwMTEsNyBAQCB2ZWN0X2FuYWx5 emVfc3RtdCAodmVjX2luZm8gKnZpbmZvLA0KPiA+ID4gPiAgICAgIHsNCj4gPiA+ID4gICAgICAg IGdjYWxsICpjYWxsID0gZHluX2Nhc3QgPGdjYWxsICo+IChzdG10X2luZm8tPnN0bXQpOw0KPiA+ ID4gPiAgICAgICAgZ2NjX2Fzc2VydCAoU1RNVF9WSU5GT19WRUNUWVBFIChzdG10X2luZm8pDQo+ ID4gPiA+ICsJCSAgfHwgZ2ltcGxlX2NvZGUgKHN0bXRfaW5mby0+c3RtdCkgPT0gR0lNUExFX0NP TkQNCj4gPiA+ID4gIAkJICB8fCAoY2FsbCAmJiBnaW1wbGVfY2FsbF9saHMgKGNhbGwpID09IE5V TExfVFJFRSkpOw0KPiA+ID4gPiAgICAgICAgKm5lZWRfdG9fdmVjdG9yaXplID0gdHJ1ZTsNCj4g PiA+ID4gICAgICB9DQo+ID4gPiA+IGRpZmYgLS1naXQgYS9nY2MvdHJlZS12ZWN0b3JpemVyLmgg Yi9nY2MvdHJlZS12ZWN0b3JpemVyLmgNCj4gPiA+ID4gaW5kZXgNCj4gPiA+DQo+IGVjNjViNjVi NTkxMGU5Y2JhZDBhOGM3ZTgzYzk1MGI2MTY4Yjk4YmYuLjI0YTA1NjdhMmYyM2YxYjNkOGIzDQo+ ID4gPiA0MGJhZmY2MWQxOGRhOGUyNDJkZCAxMDA2NDQNCj4gPiA+ID4gLS0tIGEvZ2NjL3RyZWUt dmVjdG9yaXplci5oDQo+ID4gPiA+ICsrKyBiL2djYy90cmVlLXZlY3Rvcml6ZXIuaA0KPiA+ID4g PiBAQCAtNjMsNiArNjMsNyBAQCBlbnVtIHZlY3RfZGVmX3R5cGUgew0KPiA+ID4gPiAgICB2ZWN0 X2ludGVybmFsX2RlZiwNCj4gPiA+ID4gICAgdmVjdF9pbmR1Y3Rpb25fZGVmLA0KPiA+ID4gPiAg ICB2ZWN0X3JlZHVjdGlvbl9kZWYsDQo+ID4gPiA+ICsgIHZlY3RfZWFybHlfZXhpdF9kZWYsDQo+ IA0KPiBjYW4geW91IGF2b2lkIHB1dHRpbmcgdGhpcyBpbmJldHdlZW4gcmVkdWN0aW9uIGFuZCBk b3VibGUgcmVkdWN0aW9uDQo+IHBsZWFzZT8gIEp1c3QgcHV0IGl0IGJlZm9yZSB2ZWN0X3Vua25v d25fZGVmX3R5cGUuICBJbiBmYWN0IHRoZSBDT05EDQo+IGlzbid0IGEgZGVmIC4uLiBtYXliZSB3 ZSBzaG91bGQgaGF2ZSBwYXR0ZXJuIHJlY29naXplZA0KPiANCj4gIGlmIChhIDwgYikgZXhpdDsN Cj4gDQo+IGFzDQo+IA0KPiAgY29uZCA9IGEgPCBiOw0KPiAgaWYgKGNvbmQgIT0gMCkgZXhpdDsN Cj4gDQo+IHNvIHRoZSBwYXJ0IHRoYXQgd2UgbmVlZCB0byB2ZWN0b3JpemUgaXMgbW9yZSBjbGVh ci4NCg0KSG1tIGZhaXIgZW5vdWdoLCBJIHN0aWxsIGZpbmQgaXQgdXNlZnVsIHRvIGJlIGFibGUg dG8gZGlzdGluZ3Vpc2gNCmJldHdlZW4gdGhpcyBhbmQgZ2VuZXJhbCBjb250cm9sIGZsb3cgdGhv dWdoLiAgSW4gZmFjdCBkZXBlbmRpbmcNCm9uIHdoZW4gd2UgZmluaXNoIHJldmlld2luZy91cHN0 cmVhbWluZyB0aGlzIEl0IHNob3VsZCBiZSBlYXN5IHRvDQpzdXBwb3J0IGdlbmVyYWwgY29udHJv bCBmbG93IGluIHN1Y2ggbG9vcHMuDQoNCj4gDQo+ID4gPiA+ICAgIHZlY3RfZG91YmxlX3JlZHVj dGlvbl9kZWYsDQo+ID4gPiA+ICAgIHZlY3RfbmVzdGVkX2N5Y2xlLA0KPiA+ID4gPiAgICB2ZWN0 X2ZpcnN0X29yZGVyX3JlY3VycmVuY2UsDQo+ID4gPiA+IEBAIC04NzYsNiArODc3LDEzIEBAIHB1 YmxpYzoNCj4gPiA+ID4gICAgICAgd2UgbmVlZCB0byBwZWVsIG9mZiBpdGVyYXRpb25zIGF0IHRo ZSBlbmQgdG8gZm9ybSBhbiBlcGlsb2d1ZSBsb29wLiAgKi8NCj4gPiA+ID4gICAgYm9vbCBwZWVs aW5nX2Zvcl9uaXRlcjsNCj4gPiA+ID4NCj4gPiA+ID4gKyAgLyogV2hlbiB0aGUgbG9vcCBoYXMg ZWFybHkgYnJlYWtzIHRoYXQgd2UgY2FuIHZlY3Rvcml6ZSB3ZSBuZWVkIHRvDQo+IHBlZWwNCj4g PiA+ID4gKyAgICAgdGhlIGxvb3AgZm9yIHRoZSBicmVhayBmaW5kaW5nIGxvb3AuICAqLw0KPiA+ ID4gPiArICBib29sIGVhcmx5X2JyZWFrczsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAvKiBXaGVu IHRoZSBsb29wIGhhcyBhIG5vbi1lYXJseSBicmVhayBjb250cm9sIGZsb3cgaW5zaWRlLiAgKi8N Cj4gPiA+ID4gKyAgYm9vbCBub25fYnJlYWtfY29udHJvbF9mbG93Ow0KPiA+ID4gPiArDQo+ID4g PiA+ICAgIC8qIExpc3Qgb2YgbG9vcCBhZGRpdGlvbmFsIElWIGNvbmRpdGlvbmFscyBmb3VuZCBp biB0aGUgbG9vcC4gICovDQo+ID4gPiA+ICAgIGF1dG9fdmVjPGdjb25kICo+IGNvbmRzOw0KPiA+ ID4gPg0KPiA+ID4gPiBAQCAtOTg1LDkgKzk5MywxMSBAQCBwdWJsaWM6DQo+ID4gPiA+ICAjZGVm aW5lIExPT1BfVklORk9fUkVEVUNUSU9OX0NIQUlOUyhMKSAgICAgKEwpLT5yZWR1Y3Rpb25fY2hh aW5zDQo+ID4gPiA+ICAjZGVmaW5lIExPT1BfVklORk9fUEVFTElOR19GT1JfR0FQUyhMKSAgICAg KEwpLT5wZWVsaW5nX2Zvcl9nYXBzDQo+ID4gPiA+ICAjZGVmaW5lIExPT1BfVklORk9fUEVFTElO R19GT1JfTklURVIoTCkgICAgKEwpLT5wZWVsaW5nX2Zvcl9uaXRlcg0KPiA+ID4gPiArI2RlZmlu ZSBMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUyhMKSAgICAgICAgIChMKS0+ZWFybHlfYnJlYWtzDQo+ ID4gPiA+ICAjZGVmaW5lIExPT1BfVklORk9fRUFSTFlfQlJLX0NPTkZMSUNUX1NUTVRTKEwpIChM KS0NCj4gPiA+ID5lYXJseV9icmVha19jb25mbGljdA0KPiA+ID4gPiAgI2RlZmluZSBMT09QX1ZJ TkZPX0VBUkxZX0JSS19ERVNUX0JCKEwpICAgIChMKS0NCj4gPmVhcmx5X2JyZWFrX2Rlc3RfYmIN Cj4gPiA+ID4gICNkZWZpbmUgTE9PUF9WSU5GT19FQVJMWV9CUktfVlVTRVMoTCkgICAgICAoTCkt PmVhcmx5X2JyZWFrX3Z1c2VzDQo+ID4gPiA+ICsjZGVmaW5lIExPT1BfVklORk9fR0VORVJBTF9D VFJfRkxPVyhMKSAgICAgKEwpLQ0KPiA+ID4gPm5vbl9icmVha19jb250cm9sX2Zsb3cNCj4gPiA+ ID4gICNkZWZpbmUgTE9PUF9WSU5GT19MT09QX0NPTkRTKEwpICAgICAgICAgICAoTCktPmNvbmRz DQo+ID4gPiA+ICAjZGVmaW5lIExPT1BfVklORk9fTE9PUF9JVl9DT05EKEwpICAgICAgICAgKEwp LT5sb29wX2l2X2NvbmQNCj4gPiA+ID4gICNkZWZpbmUgTE9PUF9WSU5GT19OT19EQVRBX0RFUEVO REVOQ0lFUyhMKSAoTCktDQo+ID4gPiA+bm9fZGF0YV9kZXBlbmRlbmNpZXMNCj4gPiA+ID4gQEAg LTEwMzgsOCArMTA0OCw4IEBAIHB1YmxpYzoNCj4gPiA+ID4gICAgIHN0YWNrLiAgKi8NCj4gPiA+ ID4gIHR5cGVkZWYgb3B0X3BvaW50ZXJfd3JhcHBlciA8bG9vcF92ZWNfaW5mbz4gb3B0X2xvb3Bf dmVjX2luZm87DQo+ID4gPiA+DQo+ID4gPiA+IC1pbmxpbmUgbG9vcF92ZWNfaW5mbw0KPiA+ID4g PiAtbG9vcF92ZWNfaW5mb19mb3JfbG9vcCAoY2xhc3MgbG9vcCAqbG9vcCkNCj4gPiA+ID4gK3N0 YXRpYyBpbmxpbmUgbG9vcF92ZWNfaW5mbw0KPiA+ID4gPiArbG9vcF92ZWNfaW5mb19mb3JfbG9v cCAoY29uc3QgY2xhc3MgbG9vcCAqbG9vcCkNCj4gPiA+ID4gIHsNCj4gPiA+ID4gICAgcmV0dXJu IChsb29wX3ZlY19pbmZvKSBsb29wLT5hdXg7DQo+ID4gPiA+ICB9DQo+ID4gPiA+IEBAIC0xNzg5 LDcgKzE3OTksNyBAQCBpc19sb29wX2hlYWRlcl9iYl9wIChiYXNpY19ibG9jayBiYikNCj4gPiA+ ID4gIHsNCj4gPiA+ID4gICAgaWYgKGJiID09IChiYi0+bG9vcF9mYXRoZXIpLT5oZWFkZXIpDQo+ ID4gPiA+ICAgICAgcmV0dXJuIHRydWU7DQo+ID4gPiA+IC0gIGdjY19jaGVja2luZ19hc3NlcnQg KEVER0VfQ09VTlQgKGJiLT5wcmVkcykgPT0gMSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gICAgcmV0 dXJuIGZhbHNlOw0KPiA+ID4gPiAgfQ0KPiA+ID4gPg0KPiA+ID4gPiBAQCAtMjE3Niw5ICsyMTg2 LDEwIEBAIGNsYXNzIGF1dG9fcHVyZ2VfdmVjdF9sb2NhdGlvbg0KPiA+ID4gPiAgICAgaW4gdHJl ZS12ZWN0LWxvb3AtbWFuaXAuY2MuICAqLw0KPiA+ID4gPiAgZXh0ZXJuIHZvaWQgdmVjdF9zZXRf bG9vcF9jb25kaXRpb24gKGNsYXNzIGxvb3AgKiwgbG9vcF92ZWNfaW5mbywNCj4gPiA+ID4gIAkJ CQkgICAgIHRyZWUsIHRyZWUsIHRyZWUsIGJvb2wpOw0KPiA+ID4gPiAtZXh0ZXJuIGJvb2wgc2xw ZWVsX2Nhbl9kdXBsaWNhdGVfbG9vcF9wIChjb25zdCBjbGFzcyBsb29wICosDQo+IGNvbnN0X2Vk Z2UpOw0KPiA+ID4gPiArZXh0ZXJuIGJvb2wgc2xwZWVsX2Nhbl9kdXBsaWNhdGVfbG9vcF9wIChj b25zdCBsb29wX3ZlY19pbmZvLA0KPiA+ID4gY29uc3RfZWRnZSk7DQo+ID4gPiA+ICBjbGFzcyBs b29wICpzbHBlZWxfdHJlZV9kdXBsaWNhdGVfbG9vcF90b19lZGdlX2NmZyAoY2xhc3MgbG9vcCAq LA0KPiA+ID4gPiAtCQkJCQkJICAgICBjbGFzcyBsb29wICosIGVkZ2UpOw0KPiA+ID4gPiArCQkJ CQkJICAgIGNsYXNzIGxvb3AgKiwgZWRnZSwgYm9vbCwNCj4gPiA+ID4gKwkJCQkJCSAgICB2ZWM8 YmFzaWNfYmxvY2s+ICogPSBOVUxMKTsNCj4gPiA+ID4gIGNsYXNzIGxvb3AgKnZlY3RfbG9vcF92 ZXJzaW9uaW5nIChsb29wX3ZlY19pbmZvLCBnaW1wbGUgKik7DQo+ID4gPiA+ICBleHRlcm4gY2xh c3MgbG9vcCAqdmVjdF9kb19wZWVsaW5nIChsb29wX3ZlY19pbmZvLCB0cmVlLCB0cmVlLA0KPiA+ ID4gPiAgCQkJCSAgICB0cmVlICosIHRyZWUgKiwgdHJlZSAqLCBpbnQsIGJvb2wsIGJvb2wsDQo+ ID4gPiA+IGRpZmYgLS1naXQgYS9nY2MvdHJlZS12ZWN0b3JpemVyLmNjIGIvZ2NjL3RyZWUtdmVj dG9yaXplci5jYw0KPiA+ID4gPiBpbmRleA0KPiA+ID4NCj4gYTA0OGU5ZDg5MTc4YTM3NDU1YmQ3 YjgzYWIwZjJhMjM4YTRjZTY5ZS4uMGRjNTQ3OWRjOTIwNThiNmM3MGMNCj4gPiA+IDY3ZjI5ZjVk YzlhOGQ3MjIzNWY0IDEwMDY0NA0KPiA+ID4gPiAtLS0gYS9nY2MvdHJlZS12ZWN0b3JpemVyLmNj DQo+ID4gPiA+ICsrKyBiL2djYy90cmVlLXZlY3Rvcml6ZXIuY2MNCj4gPiA+ID4gQEAgLTEzNzks NyArMTM3OSw5IEBAIHBhc3NfdmVjdG9yaXplOjpleGVjdXRlIChmdW5jdGlvbiAqZnVuKQ0KPiA+ ID4gPiAgCSBwcmVkaWNhdGVzIHRoYXQgbmVlZCB0byBiZSBzaGFyZWQgZm9yIG9wdGltYWwgcHJl ZGljYXRlIHVzYWdlLg0KPiA+ID4gPiAgCSBIb3dldmVyIHJlYXNzb2Mgd2lsbCByZS1vcmRlciB0 aGVtIGFuZCBwcmV2ZW50IENTRSBmcm9tIHdvcmtpbmcNCj4gPiA+ID4gIAkgYXMgaXQgc2hvdWxk LiAgQ1NFIG9ubHkgdGhlIGxvb3AgYm9keSwgbm90IHRoZSBlbnRyeS4gICovDQo+ID4gPiA+IC0g ICAgICBiaXRtYXBfc2V0X2JpdCAoZXhpdF9iYnMsIHNpbmdsZV9leGl0IChsb29wKS0+ZGVzdC0+ aW5kZXgpOw0KPiA+ID4gPiArICAgICAgYXV0b192ZWM8ZWRnZT4gZXhpdHMgPSBnZXRfbG9vcF9l eGl0X2VkZ2VzIChsb29wKTsNCj4gDQo+IHNlZWluZyB0aGlzIG1vcmUgYW5kIG1vcmUgSSB0aGlu ayB3ZSB3YW50IGEgc2ltcGxlIHdheSB0byBpdGVyYXRlIG92ZXINCj4gYWxsIGV4aXRzIHdpdGhv dXQgY29weWluZyB0byBhIHZlY3RvciB3aGVuIHdlIGhhdmUgdGhlbSByZWNvcmRlZC4gIE15DQo+ IEMrKyBmdSBpcyB0b28gbGltaXRlZCB0byBzdXBwb3J0DQo+IA0KPiAgIGZvciAoYXV0byBleGl0 IDogcmVjb3JkZWRfZXhpdHMgKGxvb3ApKQ0KPiAgICAgLi4uDQo+IA0KPiAobWF5YmUgdGhhdCdz IGVub3VnaCBmb3Igc29tZWJvZHkgdG8ganVtcCBvbnRvIHRoaXMgOykpDQo+IA0KPiBEb24ndCB0 cmVhdCBhbGwgcmV2aWV3IGNvbW1lbnRzIGFzIGNoYW5nZSBvcmRlcnMsIGJ1dCBpdCBzaG91bGQg YmUgY2xlYXINCj4gdGhlIGNvZGUgaXNuJ3QgMTAwJSBvYnZpb3VzLiAgTWF5YmUgdGhlIHBhdGNo IGNhbiBiZSBzaW1wbGlmaWVkIGJ5DQo+IHNwbGl0dGluZyBvdXQgdGhlIExDIFNTQSBjbGVhbnVw IHBhcnRzLg0KDQpXaWxsIGdpdmUgaXQgYSB0cnksDQoNClRoYW5rcyENClRhbWFyDQoNCj4gDQo+ IFRoYW5rcywNCj4gUmljaGFyZC4NCj4gDQo+ID4gPiA+ICsgICAgICBmb3IgKGVkZ2UgZXhpdCA6 IGV4aXRzKQ0KPiA+ID4gPiArCWJpdG1hcF9zZXRfYml0IChleGl0X2JicywgZXhpdC0+ZGVzdC0+ aW5kZXgpOw0KPiA+ID4gPg0KPiA+ID4gPiAgICAgICAgZWRnZSBlbnRyeSA9IEVER0VfUFJFRCAo bG9vcF9wcmVoZWFkZXJfZWRnZSAobG9vcCktPnNyYywgMCk7DQo+ID4gPiA+ICAgICAgICBkb19y cG9fdm4gKGZ1biwgZW50cnksIGV4aXRfYmJzKTsNCj4gPiA+ID4NCj4gPiA+ID4NCj4gPiA+ID4N Cj4gPiA+ID4NCj4gPiA+ID4NCj4gPiA+DQo+ID4gPiAtLQ0KPiA+ID4gUmljaGFyZCBCaWVuZXIg PHJndWVudGhlckBzdXNlLmRlPg0KPiA+ID4gU1VTRSBTb2Z0d2FyZSBTb2x1dGlvbnMgR2VybWFu eSBHbWJILCBGcmFua2Vuc3RyYXNzZSAxNDYsIDkwNDYxDQo+ID4gPiBOdWVybmJlcmcsDQo+ID4g PiBHZXJtYW55OyBHRjogSXZvIFRvdGV2LCBBbmRyZXcgTXllcnMsIEFuZHJldyBNY0RvbmFsZCwg Qm91ZGllbg0KPiA+ID4gTW9lcm1hbjsNCj4gPiA+IEhSQiAzNjgwOSAoQUcgTnVlcm5iZXJnKQ0K PiA+DQo=