From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id 5DB7E384802B for ; Wed, 11 Aug 2021 22:03:58 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 5DB7E384802B Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 17BLue9x008896; Wed, 11 Aug 2021 22:03:53 GMT Received: from userp3030.oracle.com (userp3030.oracle.com [156.151.31.80]) by mx0b-00069f02.pphosted.com with ESMTP id 3abt44bvmc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 11 Aug 2021 22:03:52 +0000 Received: from pps.filterd (userp3030.oracle.com [127.0.0.1]) by userp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 17BM2a0K123931; Wed, 11 Aug 2021 22:03:51 GMT Received: from nam12-dm6-obe.outbound.protection.outlook.com (mail-dm6nam12lp2176.outbound.protection.outlook.com [104.47.59.176]) by userp3030.oracle.com with ESMTP id 3abjw766e8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 11 Aug 2021 22:03:51 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BGvjns1vSjT+BQQgMPF2keEz9oZf9c39AmCww45fWWtvI4xQt0UBJgmSsPi7i+q8XYVMFUeakPbvufE6ccL3IMI2FDkdWSmPPRsBvdn96ax3sDR5JAs4v2jOIg+6jkuashJ/qhojrDYFXLIgdkI+GWBHM2+ocYmHEbMThCsauz8p7fSF9znRjPH41ZS6blESLvsBCsSJUGZ7x2AHp0TiVLKigxhBME9O9a57Txgt6aEefAd4hwvhQJC7vDFUR7pZEbygi00SXEIynYCMY+LUHTnKd70xRm1kO4LyunlgAUQ4nY+UQx+2Gq6LE9+3ZX7BpMO1qBW6r1Zyaw5mFW+mig== 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-SenderADCheck; bh=VH4oMvTC3msjSdaRm852/aiwO+hgojaM3WQTMkWgTuY=; b=mu0RaaJDNh9Jg/R487Spwzcxj+k9+r3VUJdqU78138Uk3PV7grptIMSovk3jNv9j+0PvIyXPxAKeO0Mb1Jbx4GGOivZhiu2DztJ+fLoNichdNjyeQqJYWZf2mpGA2iqvci6Li/7B+lIymufbciBhqea9aVp7kfgGDZltNVy9TuBXGutm5r25PAYeYATFoa1EYcgb2vWlhDqkL9yrTIPw2d31woFYDUTgADWGTVWfzRCaJyaRYUtPVB5T+1pc/eCBl/b8nBO/EZV7mmgifyzkoMIeE55B4Dk14RARCyfiD0AL9T1Lf5SS+WboobfEtIl/FpzDEKcnnFb4defenggCnw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none Received: from CH2PR10MB4344.namprd10.prod.outlook.com (2603:10b6:610:af::19) by CH2PR10MB3960.namprd10.prod.outlook.com (2603:10b6:610:6::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4394.17; Wed, 11 Aug 2021 22:03:49 +0000 Received: from CH2PR10MB4344.namprd10.prod.outlook.com ([fe80::f463:6b71:2491:d547]) by CH2PR10MB4344.namprd10.prod.outlook.com ([fe80::f463:6b71:2491:d547%9]) with mapi id 15.20.4415.014; Wed, 11 Aug 2021 22:03:49 +0000 From: Qing Zhao To: Richard Biener CC: Jakub Jelinek , Richard Sandiford , Nick Alcock via Gcc-patches , Kees Cook Subject: Re: [patch][version 6] add -ftrivial-auto-var-init and variable attribute "uninitialized" to gcc Thread-Topic: [patch][version 6] add -ftrivial-auto-var-init and variable attribute "uninitialized" to gcc Thread-Index: AQHXgpcfj6SO0Rka1UmU0GU91mFncqtrSzIAgAApjACAAPr8gIAAZYMAgAAKVgCAAAy9gIAABZoAgABR/YCAACR6AIAAkCQAgABtVACAAAEPAIAABLkAgAABQACAABmfAIAABkYAgAAIEICAAAlUAIAAPDYAgAAZ9wA= Date: Wed, 11 Aug 2021 22:03:49 +0000 Message-ID: <28A70D41-58C6-49FF-BDA9-661F36A2D795@oracle.com> References: <52E29277-1403-4755-901A-528116C43FB8@oracle.com> <58ADBC0C-9D44-485B-BB5A-B072664B9C4F@oracle.com> <6FD42B95-F73D-4B75-B83A-BAC4925B1714@oracle.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: Apple Mail (2.3608.120.23.2.7) x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 1eba986a-f200-47de-51f9-08d95d13e5fb x-ms-traffictypediagnostic: CH2PR10MB3960: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: oGmYMrFVm7WgesZK13Ddr0FCGVYn5w3ug5tkDThH+qbevxTsYdK8HnG/3F055TEL4W2KLV+UnjqHGTJ6lnsiieAOk0He98KcP7RarUG6lOzScIXmR68jLZ5GnRowUDqW3UzqSsErrm2e7dylnDjcGnreLWA5ZpidSWHBF9Rg5kCRLwT9Ud7JoBRcZVoUWB+mKATWmbQe+OXgk7y0AWnkgyH3awD/LNPcPcOZN6ropB3f3ROabQyqO155aj1BRcnl6RKToAMj+u7ZxJWMrAyPaNAsRLufSVQxZx5Qex3LhBfnNe+h9x+5mCiG284mEIehNFSRTxir7d+oBL/QR9IJNqxHKucswTM2fgRnSG+27SnNjNaexTR83DqxnhEqXkRoAkg6qmt7LH7c5eMMtvFuDrZRThs7AvT1I14+EWpX5rUtnvAfigfvG5vxsoYVXEjYB5Zuuqv9Bw0LwgnDtaNG7okZKdSxZvyZUmo5eGkh6c+a0Kr1uQ7v4qVMbzRtRg7eYVRMp4s6S6bFmgcHTjT7ZTq0qi5aZqqH3pxqzzgixqcxPLmWYnfuVh5/r5qZ0ggkJG2O88uUFN9gUzpigwN5CE4syAE68uFhqT9XHMB7HAe7CiHDQD7mkGJUg5FJOpllv2gu82pvQGKKGWnXzjyR0eMTUDUz74vK/EVmV8AXprRSytA7XihZBai3MuvTwrfhUXje831xjx4POIwSJggUU4I+LX48LrRIsNut8LYDRCvAhfrvlCaOAvwXAL0cf1T4 x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH2PR10MB4344.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(376002)(346002)(366004)(136003)(396003)(39860400002)(8676002)(186003)(5660300002)(71200400001)(86362001)(4326008)(83380400001)(66556008)(6916009)(66476007)(44832011)(478600001)(64756008)(76116006)(8936002)(53546011)(38100700002)(2616005)(122000001)(91956017)(66446008)(54906003)(316002)(26005)(6512007)(36756003)(2906002)(33656002)(6486002)(66946007)(38070700005)(6506007)(45980500001); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?WUJYQ2R2eWRXbWZxOURqRjZiUkFVMExHSDBQYnJxOW5sWkNmQ1FnM2Zza0xt?= =?utf-8?B?MW4xRTkyRmxjKy9PaytuN0k1b1cyeTBWUEdrNUFqYXNmT0ZEUzhLcGllOEE1?= =?utf-8?B?SG5KTHIvNW1jVDFjczcxdEJweHgyQTY0a2FoVVZlMFB1aHpHSmpYTnpJS0dl?= =?utf-8?B?RFBIcDRwZ1h2Qnk4c09EeDNKamc1VWNmZHBWbXRJTitadXZnZ0xIS1ZmMUwr?= =?utf-8?B?ZGJqZkNQMlRiVmZFZGYxcFlpOTcyY0xFZFh4eUFQTWhYczNxN2VPUXdPMnV2?= =?utf-8?B?eFJxY0R2M0k2QTE5R2Uvd082b3BYdEZObDV5REthbDlQWUY5RTBNTXVnQzlL?= =?utf-8?B?QXQ5MW9sRm9HUElWZ1JVd3AvSHBGYTFQck90c0VOdXF4MmVUdUxUWUo0OEZX?= =?utf-8?B?QjZJRlI0Mk5oaDlMaFpXcExoT3M5UzU3OU8wZCsrNXpGcGRRN0N6dDVTWVpZ?= =?utf-8?B?V2dZelR2TUl6cldWbVJpaWR1cTVaQnRvMnlRQkJBQ1RhRlhmVmRBTFlVTW5G?= =?utf-8?B?a09Ga3JmVnc3ZStJN0MzTmFvT3YxanozZmVmWlJZeVdFelM5UTRwQnBFL0dt?= =?utf-8?B?eFBIYzFIR3JMQS96bCsrck9BMFU0d2RRQ1VzdWprSlhmbHJrS2pWQ0xSSitX?= =?utf-8?B?WmFmK1pkRWdQY1BWL1hKaHN4Y0RSMzk1MlBJZEVWK3VTeWlxdEg3L2ZycUhs?= =?utf-8?B?T0tSNFltTUREcThIQk5BeVByRXppMVBOVFUwV09EdGhxYm9IalFuUVR0YWdw?= =?utf-8?B?Z3k5WFdtVnUrbTR0ZWE0K0dDVnNENWk2WEExQ045cUVnbzhFaGFxcmhudDV1?= =?utf-8?B?bkdmY0d0MXE4Z09uQVFWcGFreDNjSTJhc0ZPNGpjdmdXM1dPYTZNbXFkWk1h?= =?utf-8?B?MjM0NjRBYTk0Mk9JYTJKay9Pd213eVRjRWZPNk1HenhpeGs1TzUvbGVucFJR?= =?utf-8?B?ODQrTHNqVTZhUXJrNmw3cCtXNGd3bVQySXljc0dhRmFWQzJqM0VWbFF1V1pS?= =?utf-8?B?SmpQWTJxSEdBUjVjc2prNVhMUDFwYVh4MVdvQUdQL1JLTVpMNjB5dGdQY1ZH?= =?utf-8?B?eTI1T0ljU0xZVHkzZTh3S3lwMW41YU1HRkRWbTBRc3JQL1RPT1EvY3pLem0r?= =?utf-8?B?QkFrM1FOUWsvTDYvZ0RabTR1ZTlUNXc2L1d0Q2hmejVzejc0blNJSGl4d29w?= =?utf-8?B?cFo2bkJEQ0xxTDcwVmNiREJqSlk5bWJibFRTZEZoWDdPaDFJQ1dRd2luUTNN?= =?utf-8?B?ZkY2b1lVV3ptd1NtTTFiVVBxdUVCV014TTVuN2xCbVEwMThSY3dCN0kyZWpP?= =?utf-8?B?eGoybStub3N6UDlNbFpHdTV0TEE4MFdBK3pJSFVBbXp6WnA1VE00TkM0OUpo?= =?utf-8?B?ZndJZnM1aEhqQ2FlaThFWUZreDBlNnloanZzRERCbWtraEpIN1lIWFNlWS9B?= =?utf-8?B?Wm56YlVMSzAxS3lRUW92K2tqRnNIWUdFb3BoSVlmY0twMWhCQnVGQzFDZm9p?= =?utf-8?B?a2J4QlFJSjhoajkwU09mekVoUXExRVh1R3pvai9JTnBWWlZKbTdjdHdUOTda?= =?utf-8?B?MGg3SzNEamUxRGRYRzBHdE00ZVRJRDdRaWt4RmdNdHFZVGlLd3F1SXZ1TE1j?= =?utf-8?B?eTl3MURUTUdJeldXak00cUVEWU5ndmt3a1RwbjBkbndwaW0xSEthM2MvYTlC?= =?utf-8?B?cG1IOHFXZXZCMHdselQwdCt2UE5TR1lOeDZPTnJIeDNrRktWdVd5VW4yYTdD?= =?utf-8?Q?gmLiYUn4T07+BGBFG6qqkvjaC92Q3ViyOQMR9bi?= x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-ID: <0C75B017ECB17B458CC476F0959793C9@namprd10.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CH2PR10MB4344.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1eba986a-f200-47de-51f9-08d95d13e5fb X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Aug 2021 22:03:49.2914 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: sEjUZtym+GGPyCNX9y/xfFpoIat9vfj+t6/NDSgqdedCY3O1hF3AKB4NQpC58Ep6t1//oOHhUlxw3YGM/y3/9Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR10MB3960 X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=10073 signatures=668682 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 mlxlogscore=999 malwarescore=0 phishscore=0 bulkscore=0 suspectscore=0 mlxscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2107140000 definitions=main-2108110150 X-Proofpoint-ORIG-GUID: 72W5k1qwsLFBpp2lCK3tNpzl0YIFRBd9 X-Proofpoint-GUID: 72W5k1qwsLFBpp2lCK3tNpzl0YIFRBd9 X-Spam-Status: No, score=-10.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_BL, RCVD_IN_MSPIKE_L3, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 11 Aug 2021 22:04:09 -0000 SGksIA0KDQpJIGZpbmFsbHkgZGVjaWRlZCB0byB0YWtlIGFub3RoZXIgYXBwcm9hY2ggdG8gcmVz b2x2ZSB0aGlzIGlzc3VlLCBpdCByZXNvbHZlZCBhbGwgdGhlIHBvdGVudGlhbCBpc3N1ZXMgd2l0 aCB0aGUg4oCcYWRkcmVzcyB0YWtlbuKAnSBhdXRvIHZhcmlhYmxlLg0KDQpUaGUgYmFzaWMgaWRl YSBpcyB0byBhdm9pZCBnZW5lcmF0aW5nIHRoZSB0ZW1wb3JhcnkgdmFyaWFibGUgaW4gdGhlIGJl Z2lubmluZy4gDQpBcyB5b3UgbWVudGlvbmVkLCAiVGhlIHJlYXNvbiBpcyB0aGF0IGFsdF9yZWxv YyBpcyBtZW1vcnkgKGJlY2F1c2UgaXQgaXMgYWRkcmVzcyB0YWtlbikgYW5kIHRoYXQgR0lNUExF IHNheXMgdGhhdCByZWdpc3RlciB0eXBlZCBzdG9yZXMgDQpuZWVkIHRvIHVzZSBhIGlzX2dpbXBs ZV92YWwgUkhTIHdoaWNoIHRoZSBjYWxsIGlzIG5vdC7igJ0NCkluIG9yZGVyIHRvIGF2b2lkIGdl bmVyYXRpbmcgdGhlIHRlbXBvcmFyeSB2YXJpYWJsZSBmb3Ig4oCcYWRkcmVzcyB0YWtlbuKAnSBh dXRvIHZhcmlhYmxlLCBJIHVwZGF0ZWQgdGhlIHV0aWxpdHkgcm91dGluZSDigJxpc19naW1wbGVf dmFs4oCdIGFzIGZvbGxvd2luZzoNCg0KZGlmZiAtLWdpdCBhL2djYy9naW1wbGUtZXhwci5jIGIv Z2NjL2dpbXBsZS1leHByLmMNCmluZGV4IGEyNTYzYTQ1YzM3ZC4uZDVlZjFhZWY4Y2VhIDEwMDY0 NA0KLS0tIGEvZ2NjL2dpbXBsZS1leHByLmMNCisrKyBiL2djYy9naW1wbGUtZXhwci5jDQpAQCAt Nzg3LDggKzc4NywyMCBAQCBpc19naW1wbGVfcmVnICh0cmVlIHQpDQogICByZXR1cm4gIURFQ0xf Tk9UX0dJTVBMRV9SRUdfUCAodCk7DQogfQ0KIA0KKy8qIFJldHVybiB0cnVlIGlmIFQgaXMgYSBj YWxsIHRvIC5ERUZFUlJFRF9JTklUIGludGVybmFsIGZ1bmN0aW9uLiAgKi8gDQorc3RhdGljIGJv b2wNCitpc19kZWZlcnJlZF9pbml0X2NhbGwgKHRyZWUgdCkNCit7DQorICBpZiAoVFJFRV9DT0RF ICh0KSA9PSBDQUxMX0VYUFINCisgICAgICAmJiAgQ0FMTF9FWFBSX0lGTiAodCkgPT0gSUZOX0RF RkVSUkVEX0lOSVQpDQorICAgIHJldHVybiB0cnVlOw0KKyAgcmV0dXJuIGZhbHNlOw0KK30NCisN CiANCi0vKiBSZXR1cm4gdHJ1ZSBpZiBUIGlzIGEgR0lNUExFIHJ2YWx1ZSwgaS5lLiBhbiBpZGVu dGlmaWVyIG9yIGEgY29uc3RhbnQuICAqLw0KKy8qIFJldHVybiB0cnVlIGlmIFQgaXMgYSBHSU1Q TEUgcnZhbHVlLCBpLmUuIGFuIGlkZW50aWZpZXIgb3IgYSBjb25zdGFudCwNCisgICBvciBhIGNh bGwgdG8gLkRFRkVSUkVEX0lOSVQgaW50ZXJuYWwgZnVuY3Rpb24gYmVjYXVzZSB0aGUgY2FsbCB0 bw0KKyAgIC5ERUZFUlJFRF9JTklUIHdpbGwgZXZlbnR1YWxseSBiZSBleHBhbmRlZCBhcyBhIGNv bnN0YW50LiAgKi8NCiANCiBib29sDQogaXNfZ2ltcGxlX3ZhbCAodHJlZSB0KQ0KQEAgLTc5OSw3 ICs4MTEsOCBAQCBpc19naW1wbGVfdmFsICh0cmVlIHQpDQogICAgICAgJiYgIWlzX2dpbXBsZV9y ZWcgKHQpKQ0KICAgICByZXR1cm4gZmFsc2U7DQogDQotICByZXR1cm4gKGlzX2dpbXBsZV92YXJp YWJsZSAodCkgfHwgaXNfZ2ltcGxlX21pbl9pbnZhcmlhbnQgKHQpKTsNCisgIHJldHVybiAoaXNf Z2ltcGxlX3ZhcmlhYmxlICh0KSB8fCBpc19naW1wbGVfbWluX2ludmFyaWFudCAodCkNCisgICAg ICAgICB8fCBpc19kZWZlcnJlZF9pbml0X2NhbGwgKHQpKTsNCiB9DQogDQpXaXRoIHRoaXMgY2hh bmdlLCB0aGUgdGVtcG9yYXJ5IHZhcmlhYmxlIHdpbGwgbm90IGJlIGNyZWF0ZWQgZm9yIOKAnGFk ZHJlc3MgdGFrZW7igJ0gYXV0byB2YXJpYWJsZSwgYW5kIHVuaW5pdGlhbGl6ZWQgYW5hbHlzaXMg ZG9lcyBub3QgbmVlZCBhbnkgY2hhbmdlLiANCkV2ZXJ5dGhpbmcgd29ya3Mgd2VsbC4NCg0KQW5k IEkgYmVsaWV2ZSB0aGF0IHRyZWF0aW5nIOKAnGNhbGwgdG8gLkRFRkVSUkVEX0lOSVTigJ0gYXMg 4oCcaXNfZ2ltcGxlX3ZhbOKAnSBpcyByZWFzb25hYmxlIHNpbmNlIHRoaXMgY2FsbCBhY3R1YWxs eSBpcyBhIGNvbnN0YW50LiANCg0KTGV0IG1lIGtub3cgaWYgeW91IGhhdmUgYW55IG9iamVjdGlv biBvbiB0aGlzIHNvbHV0aW9uLg0KDQp0aGFua3MuDQoNClFpbmcNCg0KPiBPbiBBdWcgMTEsIDIw MjEsIGF0IDM6MzAgUE0sIFFpbmcgWmhhbyB2aWEgR2NjLXBhdGNoZXMgPGdjYy1wYXRjaGVzQGdj Yy5nbnUub3JnPiB3cm90ZToNCj4gDQo+IEhpLCANCj4gDQo+IEkgbWV0IGFub3RoZXIgaXNzdWUg Zm9yIOKAnGFkZHJlc3MgdGFrZW7igJ0gYXV0byB2YXJpYWJsZSwgc2VlIGJlbG93IGZvciBkZXRh aWxzOg0KPiANCj4gKioqKiB0aGUgdGVzdGluZyBjYXNlOiAoZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv dW5pbml0LTE2LmMpDQo+IA0KPiBpbnQgZm9vLCBiYXI7DQo+IA0KPiBzdGF0aWMNCj4gdm9pZCBk ZWNvZGVfcmVsb2MoaW50IHJlbG9jLCBpbnQgKmlzX2FsdCkNCj4gew0KPiAgaWYgKHJlbG9jID49 IDIwKQ0KPiAgICAgICppc19hbHQgPSAxOw0KPiAgZWxzZSBpZiAocmVsb2MgPj0gMTApDQo+ICAg ICAgKmlzX2FsdCA9IDA7DQo+IH0NCj4gDQo+IHZvaWQgdGVzdGZ1bmMoKQ0KPiB7DQo+ICBpbnQg YWx0X3JlbG9jOw0KPiANCj4gIGRlY29kZV9yZWxvYyhmb28sICZhbHRfcmVsb2MpOw0KPiANCj4g IGlmIChhbHRfcmVsb2MpIC8qIHsgZGctd2FybmluZyAibWF5IGJlIHVzZWQgdW5pbml0aWFsaXpl ZCIgfSAqLw0KPiAgICBiYXIgPSA0MjsNCj4gfQ0KPiANCj4gKioqKldoZW4gY29tcGlsZWQgd2l0 aCAtZnRyaXZpYWwtYXV0by12YXItaW5pdD16ZXJvIC1PMiAtV3VuaW5pdGlhbGl6ZWQgLWZkdW1w LXRyZWUtYWxsOg0KPiANCj4gLioqKioqKioqKioqKipnaW1wbGUgZHVtcDoNCj4gDQo+IHZvaWQg dGVzdGZ1bmMgKCkNCj4geyANCj4gIGludCBhbHRfcmVsb2M7DQo+IA0KPiAgdHJ5DQo+ICAgIHsN Cj4gICAgICBfMSA9IC5ERUZFUlJFRF9JTklUICg0LCAyLCAwKTsNCj4gICAgICBhbHRfcmVsb2Mg PSBfMTsNCj4gICAgICBmb28uMF8yID0gZm9vOw0KPiAgICAgIGRlY29kZV9yZWxvYyAoZm9vLjBf MiwgJmFsdF9yZWxvYyk7DQo+ICAgICAgYWx0X3JlbG9jLjFfMyA9IGFsdF9yZWxvYzsNCj4gICAg ICBpZiAoYWx0X3JlbG9jLjFfMyAhPSAwKSBnb3RvIDxELjE5NTI+OyBlbHNlIGdvdG8gPEQuMTk1 Mz47DQo+ICAgICAgPEQuMTk1Mj46DQo+ICAgICAgYmFyID0gNDI7DQo+ICAgICAgPEQuMTk1Mz46 DQo+ICAgIH0NCj4gIGZpbmFsbHkNCj4gICAgew0KPiAgICAgIGFsdF9yZWxvYyA9IHtDTE9CQkVS fTsNCj4gICAgfQ0KPiB9DQo+IA0KPiAqKioqKioqKioqKioqKmZyZTEgZHVtcDoNCj4gDQo+IHZv aWQgdGVzdGZ1bmMgKCkNCj4gew0KPiAgaW50IGFsdF9yZWxvYzsNCj4gIGludCBfMTsNCj4gIGlu dCBmb28uMF8yOw0KPiANCj4gIDxiYiAyPiA6DQo+ICBfMSA9IC5ERUZFUlJFRF9JTklUICg0LCAy LCAwKTsNCj4gIGZvby4wXzIgPSBmb287DQo+ICBpZiAoZm9vLjBfMiA+IDE5KQ0KPiAgICBnb3Rv IDxiYiAzPjsgWzUwLjAwJV0NCj4gIGVsc2UNCj4gICAgZ290byA8YmIgND47IFs1MC4wMCVdDQo+ IA0KPiAgPGJiIDM+IDoNCj4gIGdvdG8gPGJiIDc+OyBbMTAwLjAwJV0NCj4gDQo+ICA8YmIgND4g Og0KPiAgaWYgKGZvby4wXzIgPiA5KQ0KPiAgICBnb3RvIDxiYiA1PjsgWzUwLjAwJV0NCj4gIGVs c2UNCj4gICAgZ290byA8YmIgNj47IFs1MC4wMCVdDQo+IA0KPiAgPGJiIDU+IDoNCj4gIGdvdG8g PGJiIDg+OyBbMTAwLjAwJV0NCj4gDQo+ICA8YmIgNj4gOg0KPiAgaWYgKF8xICE9IDApDQo+ICAg IGdvdG8gPGJiIDc+OyBbSU5WXQ0KPiAgZWxzZQ0KPiAgICBnb3RvIDxiYiA4PjsgW0lOVl0NCj4g DQo+ICA8YmIgNz4gOg0KPiAgYmFyID0gNDI7DQo+IA0KPiAgPGJiIDg+IDoNCj4gIHJldHVybjsN Cj4gDQo+IH0NCj4gDQo+IEZyb20gdGhlIGFib3ZlIElSIGZpbGUgYWZ0ZXIg4oCcRlJF4oCdLCB3 ZSBjYW4gc2VlIHRoYXQgdGhlIG1ham9yIGlzc3VlIHdpdGggdGhpcyBJUiBpczoNCj4gDQo+IFRo ZSBhZGRyZXNzIHRha2VuIGF1dG8gdmFyaWFibGUg4oCcYWx0X3JlbG9j4oCdIGhhcyBiZWVuIGNv bXBsZXRlbHkgcmVwbGFjZWQgYnkgdGhlIHRlbXBvcmFyeSB2YXJpYWJsZSDigJxfMeKAnSBpbiBh bGwNCj4gdGhlIHVzZXMgb2YgdGhlIG9yaWdpbmFsIOKAnGFsdF9yZWxvY+KAnS4gDQo+IA0KPiBU aGUgbWFqb3IgcHJvYmxlbSB3aXRoIHN1Y2ggSVIgaXMsICBkdXJpbmcgdW5pbml0aWFsaXplZCBh bmFseXNpcyBwaGFzZSwgdGhlIG9yaWdpbmFsIHVzZSBvZiDigJxhbHRfcmVsb2PigJ0gZGlzYXBw ZWFyZWQgY29tcGxldGVseS4NCj4gU28sIHRoZSB3YXJuaW5nIGNhbm5vdCBiZSByZXBvcnRlZC4N Cj4gDQo+IA0KPiBNeSBxdWVzdGlvbnM6DQo+IA0KPiAxLiBJcyBpdCBwb3NzaWJsZSB0byBnZXQg dGhlIG9yaWdpbmFsIOKAnGFsdF9yZWxvY+KAnSB0aHJvdWdoIHRoZSB0ZW1wb3JhcnkgdmFyaWFi bGUg4oCcXzHigJ0gd2l0aCBzb21lIGF2YWlsYWJsZSBpbmZvcm1hdGlvbiByZWNvcmRlZCBpbiB0 aGUgSVI/DQo+IDIuIElmIG5vdCwgdGhlbiB3ZSBoYXZlIHRvIHJlY29yZCB0aGUgcmVsYXRpb25z aGlwIGJldHdlZW4g4oCcYWx0X3JlbG9j4oCdIGFuZCDigJxfMeKAnSB3aGVuIHRoZSBvcmlnaW5h bCDigJxhbHRfcmVsb2PigJ0gaXMgcmVwbGFjZWQgYnkg4oCcXzHigJ0gYW5kIGdldCBzdWNoIHJl bGF0aW9uc2hpcCBkdXJpbmcNCj4gICAgVW5pbml0aWFsaXplZCBhbmFseXNpcyBwaGFzZS4gIElz IHRoaXMgZG9hYmxlPw0KPiAzLiBMb29rcyBsaWtlIHRoYXQgZm9yIOKAnGFkZHJlc3MgdGFrZW7i gJ0gYXV0byB2YXJpYWJsZSwgaWYgd2UgaGF2ZSB0byBpbnRyb2R1Y2UgYSBuZXcgdGVtcG9yYXJ5 IHZhcmlhYmxlIGFuZCBzcGxpdCB0aGUgY2FsbCB0byAuREVGRVJSRURfSU5JVCBpbnRvIHR3bzoN Cj4gDQo+ICAgICAgdGVtcCA9IC5ERUZFUlJFRF9JTklUICg0LCAyLCAwKTsNCj4gICAgICBhbHRf cmVsb2MgPSB0ZW1wOw0KPiANCj4gICBNb3JlIGlzc3VlcyBtaWdodCBwb3NzaWJsZS4NCj4gDQo+ IEFueSBjb21tZW50cyBhbmQgc3VnZ2VzdGlvbnMgb24gdGhpcyBpc3N1ZT8NCj4gDQo+IFFpbmcN Cj4gDQo+IGoNCj4+IE9uIEF1ZyAxMSwgMjAyMSwgYXQgMTE6NTUgQU0sIFJpY2hhcmQgQmllbmVy IDxyZ3VlbnRoZXJAc3VzZS5kZT4gd3JvdGU6DQo+PiANCj4+IE9uIEF1Z3VzdCAxMSwgMjAyMSA2 OjIyOjAwIFBNIEdNVCswMjowMCwgUWluZyBaaGFvIDxxaW5nLnpoYW9Ab3JhY2xlLmNvbT4gd3Jv dGU6DQo+Pj4gDQo+Pj4gDQo+Pj4+IE9uIEF1ZyAxMSwgMjAyMSwgYXQgMTA6NTMgQU0sIFJpY2hh cmQgQmllbmVyIDxyZ3VlbnRoZXJAc3VzZS5kZT4gd3JvdGU6DQo+Pj4+IA0KPj4+PiBPbiBBdWd1 c3QgMTEsIDIwMjEgNTozMDo0MCBQTSBHTVQrMDI6MDAsIFFpbmcgWmhhbyA8cWluZy56aGFvQG9y YWNsZS5jb20+IHdyb3RlOg0KPj4+Pj4gSSBtb2RpZmllZCB0aGUgcm91dGluZSDigJxnaW1wbGVf YWRkX2luaXRfZm9yX2F1dG9fdmFy4oCdIGFzIHRoZSBmb2xsb3dpbmc6DQo+Pj4+PiA9PT09DQo+ Pj4+PiAvKiBHZW5lcmF0ZSBpbml0aWFsaXphdGlvbiB0byBhdXRvbWF0aWMgdmFyaWFibGUgREVD TCBiYXNlZCBvbiBJTklUX1RZUEUuDQo+Pj4+PiBCdWlsZCBhIGNhbGwgdG8gaW50ZXJuYWwgY29u c3QgZnVuY3Rpb24gREVGRVJSRURfSU5JVDoNCj4+Pj4+IDFzdCBhcmd1bWVudDogU0laRSBvZiB0 aGUgREVDTDsNCj4+Pj4+IDJuZCBhcmd1bWVudDogSU5JVF9UWVBFOw0KPj4+Pj4gM3JkIGFyZ3Vt ZW50OiBJU19WTEEsIDAgTk8sIDEgWUVTOw0KPj4+Pj4gDQo+Pj4+PiBhcyBERUZFUlJFRF9JTklU IChTSVpFIG9mIHRoZSBERUNMLCBJTklUX1RZUEUsIElTX1ZMQSkuICAqLw0KPj4+Pj4gc3RhdGlj IHZvaWQNCj4+Pj4+IGdpbXBsZV9hZGRfaW5pdF9mb3JfYXV0b192YXIgKHRyZWUgZGVjbCwNCj4+ Pj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBhdXRvX2luaXRfdHlwZSBpbml0X3R5 cGUsDQo+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfdmxhLA0KPj4+Pj4g ICAgICAgICAgICAgICAgICAgICAgICAgICBnaW1wbGVfc2VxICpzZXFfcCkNCj4+Pj4+IHsNCj4+ Pj4+IGdjY19hc3NlcnQgKFZBUl9QIChkZWNsKSAmJiAhREVDTF9FWFRFUk5BTCAoZGVjbCkgJiYg IVRSRUVfU1RBVElDIChkZWNsKSk7DQo+Pj4+PiBnY2NfYXNzZXJ0IChpbml0X3R5cGUgPiBBVVRP X0lOSVRfVU5JTklUSUFMSVpFRCk7DQo+Pj4+PiB0cmVlIGRlY2xfc2l6ZSA9IFRZUEVfU0laRV9V TklUIChUUkVFX1RZUEUgKGRlY2wpKTsNCj4+Pj4+IA0KPj4+Pj4gdHJlZSBpbml0X3R5cGVfbm9k ZQ0KPj4+Pj4gPSBidWlsZF9pbnRfY3N0IChpbnRlZ2VyX3R5cGVfbm9kZSwgKGludCkgaW5pdF90 eXBlKTsNCj4+Pj4+IHRyZWUgaXNfdmxhX25vZGUNCj4+Pj4+ID0gYnVpbGRfaW50X2NzdCAoaW50 ZWdlcl90eXBlX25vZGUsIChpbnQpIGlzX3ZsYSk7DQo+Pj4+PiANCj4+Pj4+IHRyZWUgY2FsbCA9 IGJ1aWxkX2NhbGxfZXhwcl9pbnRlcm5hbF9sb2MgKFVOS05PV05fTE9DQVRJT04sIElGTl9ERUZF UlJFRF9JTklULA0KPj4+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFRSRUVfVFlQRSAoZGVjbCksIDMsDQo+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGVjbF9zaXplLCBpbml0X3R5cGVfbm9kZSwNCj4+Pj4+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc192bGFfbm9kZSk7DQo+Pj4+PiANCj4+Pj4+ IC8qIElmIHRoaXMgREVDTCBpcyBhIFZMQSwgYSB0ZW1wb3JhcnkgYWRkcmVzcyB2YXJpYWJsZSBm b3IgaXQgaGFzIGJlZW4NCj4+Pj4+ICBjcmVhdGVkLCB0aGUgcmVwbGFjZW1lbnQgZm9yIERFQ0wg aXMgcmVjb3JkZWQgaW4gREVDTF9WQUxVRV9FWFBSIChkZWNsKSwNCj4+Pj4+ICB3ZSBzaG91bGQg dXNlIGl0IGFzIHRoZSBMSFMgb2YgdGhlIGNhbGwuICAqLw0KPj4+Pj4gDQo+Pj4+PiB0cmVlIGxo c19jYWxsDQo+Pj4+PiA9IGlzX3ZsYSA/IERFQ0xfVkFMVUVfRVhQUiAoZGVjbCkgOiBkZWNsOw0K Pj4+Pj4gZ2ltcGxpZnlfYXNzaWduIChsaHNfY2FsbCwgY2FsbCwgc2VxX3ApOw0KPj4+Pj4gfQ0K Pj4+Pj4gDQo+Pj4+PiBXaXRoIHRoaXMgY2hhbmdlLCB0aGUgY3VycmVudCBpc3N1ZSBpcyByZXNv bHZlZCwgdGhlIGdpbXBsZSBkdW1wIG5vdyBpczoNCj4+Pj4+IA0KPj4+Pj4gKCphcnIuMSkgPSAu REVGRVJSRURfSU5JVCAoRC4xOTUyLCAyLCAxKTsNCj4+Pj4+IA0KPj4+Pj4gSG93ZXZlciwgdGhl cmUgaXMgYW5vdGhlciBuZXcgaXNzdWU6DQo+Pj4+PiANCj4+Pj4+IEZvciB0aGUgZm9sbG93aW5n IHRlc3RpbmcgY2FzZToNCj4+Pj4+IA0KPj4+Pj4gPT09PT09DQo+Pj4+PiBbb3BjQHFpbnpoYW8t b2w4dTMteDg2IGdjY10kIGNhdCB0LmMNCj4+Pj4+IGludCBiYXI7DQo+Pj4+PiANCj4+Pj4+IGV4 dGVybiB2b2lkIGRlY29kZV9yZWxvYyhpbnQgKik7DQo+Pj4+PiANCj4+Pj4+IHZvaWQgdGVzdGZ1 bmMoKQ0KPj4+Pj4gew0KPj4+Pj4gaW50IGFsdF9yZWxvYzsNCj4+Pj4+IA0KPj4+Pj4gZGVjb2Rl X3JlbG9jKCZhbHRfcmVsb2MpOw0KPj4+Pj4gDQo+Pj4+PiBpZiAoYWx0X3JlbG9jKSAvKiB7IGRn LXdhcm5pbmcgIm1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQiIH0gKi8NCj4+Pj4+IGJhciA9IDQy OyANCj4+Pj4+IH0NCj4+Pj4+ID09PT09DQo+Pj4+PiANCj4+Pj4+IEluIHRoZSBhYm92ZSwgdGhl IGF1dG8gdmFyIOKAnGFsdF9yZWxvY+KAnSBpcyBhZGRyZXNzIHRha2VuLCB0aGVuIHRoZSBnaW1w bGUgZHVtcCBmb3IgaXQgd2hlbiBjb21waWxlZCB3aXRoIC1mdHJpdmlhbC1hdXRvLXZhci1pbml0 PXplcm8gaXM6DQo+Pj4+PiANCj4+Pj4+IHZvaWQgdGVzdGZ1bmMgKCkNCj4+Pj4+IHsNCj4+Pj4+ IGludCBhbHRfcmVsb2M7DQo+Pj4+PiANCj4+Pj4+IHRyeQ0KPj4+Pj4gew0KPj4+Pj4gICBfMSA9 IC5ERUZFUlJFRF9JTklUICg0LCAyLCAwKTsNCj4+Pj4+ICAgYWx0X3JlbG9jID0gXzE7DQo+Pj4+ PiAgIGRlY29kZV9yZWxvYyAoJmFsdF9yZWxvYyk7DQo+Pj4+PiAgIGFsdF9yZWxvYy4wXzIgPSBh bHRfcmVsb2M7DQo+Pj4+PiAgIGlmIChhbHRfcmVsb2MuMF8yICE9IDApIGdvdG8gPEQuMTk0OT47 IGVsc2UgZ290byA8RC4xOTUwPjsNCj4+Pj4+ICAgPEQuMTk0OT46DQo+Pj4+PiAgIGJhciA9IDQy Ow0KPj4+Pj4gICA8RC4xOTUwPjoNCj4+Pj4+IH0NCj4+Pj4+IGZpbmFsbHkNCj4+Pj4+IHsNCj4+ Pj4+ICAgYWx0X3JlbG9jID0ge0NMT0JCRVJ9Ow0KPj4+Pj4gfQ0KPj4+Pj4gfQ0KPj4+Pj4gDQo+ Pj4+PiBJLmUsIGluc3RlYWQgb2YgdGhlIGV4cGVjdGVkIElSOg0KPj4+Pj4gDQo+Pj4+PiBhbHRf cmVsb2MgPSAuREVGRVJSRURfSU5JVCAoNCwgMiwgMCk7DQo+Pj4+PiANCj4+Pj4+IFdlIGdvdCB0 aGUgZm9sbG93aW5nOg0KPj4+Pj4gDQo+Pj4+PiBfMSA9IC5ERUZFUlJFRF9JTklUICg0LCAyLCAw KTsNCj4+Pj4+ICAgYWx0X3JlbG9jID0gXzE7DQo+Pj4+PiANCj4+Pj4+IEkgZ3Vlc3MgdGhlIHRl bXAg4oCcXzHigJ0gaXMgY3JlYXRlZCBiZWNhdXNlIOKAnGFsdF9yZWxvY+KAnSBpcyBhZGRyZXNz IHRha2VuLiANCj4+Pj4gDQo+Pj4+IFllcyBhbmQgbm8uIFRoZSByZWFzb24gaXMgdGhhdCBhbHRf cmVsb2MgaXMgbWVtb3J5IChiZWNhdXNlIGl0IGlzIGFkZHJlc3MgdGFrZW4pIGFuZCB0aGF0IEdJ TVBMRSBzYXlzIHRoYXQgcmVnaXN0ZXIgdHlwZWQgc3RvcmVzIG5lZWQgdG8gdXNlIGEgaXNfZ2lt cGxlX3ZhbCBSSFMgd2hpY2ggdGhlIGNhbGwgaXMgbm90Lg0KPj4+IA0KPj4+IE9rYXkuDQo+Pj4+ IA0KPj4+Pj4gTXkgcXVlc3Rpb25zOg0KPj4+Pj4gDQo+Pj4+PiBTaGFsbCB3ZSBhY2NlcHQgc3Vj aCBJUiBmb3IgLkRFRkVSUkVEX0lOSVQgcHVycG9zZSB3aGVuIHRoZSBhdXRvIHZhciBpcyBhZGRy ZXNzIHRha2VuPyANCj4+Pj4gDQo+Pj4+IEkgdGhpbmsgc28uIE5vdGUgaXQgZG9lc24ndCBuZWNl c3NhcmlseSBuZWVkIGFkZHJlc3MgdGFraW5nIGJ1dCBhbnkgb3RoZXIgcmVhc29uIHRoYXQgcHJl dmVudHMgU1NBIHJld3JpdGluZyB0aGUgdmFyaWFibGUgc3VmZmljZXMuIA0KPj4+IA0KPj4+IFlv dSBtZWFuLCBpbiBhZGRpdGlvbiB0byDigJxhZGRyZXNzIHRha2Vu4oCdLCB0aGVyZSBhcmUgb3Ro ZXIgc2l0dWF0aW9ucyB0aGF0IHdpbGwgaW50cm9kdWNlIHN1Y2ggSVI6DQo+Pj4gDQo+Pj4gdGVt cCA9IC5ERUZFUlJFRF9JTklUKCk7DQo+Pj4gYXV0b192YXIgPSB0ZW1wOw0KPj4+IA0KPj4+IFNv LCBzdWNoIElSIGlzIHVuYXZvaWRhYmxlIGFuZCB3ZSBoYXZlIHRvIGhhbmRsZSBpdD8NCj4+IA0K Pj4gWWVzLiANCj4+IA0KPj4+IElmIHdlIGhhdmUgdG8gaGFuZGxlIGl0LCAgd2hhdOKAmSB0aGUg YmVzdCB3YXkgdG8gZG8gaXQ/DQo+Pj4gDQo+Pj4gVGhlIHNvbHV0aW9uIGluIG15IG1pbmQgaXM6 DQo+Pj4gMS4gRHVyaW5nIHVuaW5pdGlhbGl6ZWQgYW5hbHlzaXMgcGhhc2UsIGZvbGxvd2luZyB0 aGUgZGF0YSBmbG93IHRvIGNvbm5lY3QgLkRFRkVSUkVEX0lOSVQgdG8g4oCcYXV0b192YXLigJ0s IGFuZCB0aGVuIGRlY2lkZSB0aGF0IOKAnGF1dG9fdmFy4oCdIGlzIHVuaW5pdGlhbGl6ZWQuDQo+ PiANCj4+IFllcy4gQmFzaWNhbGx5IGlmIHRoZXJlJ3MgYW4gYXJ0aWZpY2lhbCB2YXJpYWJsZSBh dXRvIGluaXRpYWxpemVkIHlvdSBoYXZlIHRvIGxvb2sgYXQgaXRzIHVzZXMuIA0KPj4gDQo+Pj4g Mi4gRHVyaW5nIFJUTCBleHBhbnNpb24sIGZvbGxvd2luZyB0aGUgZGF0YSBmbG93IHRvIGNvbm5l Y3QgLkRFRkVSUkVEX0lOSVQgdG8g4oCcYXV0b192YXLigJ0sIGFuZCB0aGVuIGRlbGV0ZSDigJx0 ZW1w4oCdLCBhbmQgdGhlbiBleHBhbmQgLkRFRkVSUkVEX0lOSVQgdG8gYXV0b192YXIuDQo+PiAN Cj4+IFRoYXQgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeS4gWW91J2QgaW5pdGlhbGl6ZSBhIHRlbXBv cmFyeSByZWdpc3RlciB3aGljaCBpcyB0aGVuIGNvcGllZCB0byB0aGUgcmVhbCB2YXJpYWJsZS4g VGhhdCdzIGdvb2QgZW5vdWdoIGFuZCBzaG91bGQgYmUgb3B0aW1pemVkIGJ5IHRoZSBSVEwgcGlw ZWxpbmUuIA0KPj4gDQo+Pj4gTGV0IG1lIGtub3cgeW91ciBjb21tZW50cyBhbmQgc3VnZ2VzdGlv bnMgb24gdGhpcy4NCj4+PiANCj4+PiANCj4+Pj4gDQo+Pj4+IFRoZSBvbmx5IG90aGVyIG9wdGlv biBpcyB0byBmb3JjZS4gREVGRVJFRF9JTklUIG1ha2luZyB0aGUgTEhTIGFkZHJlc3MgdGFrZW4g d2hpY2ggSSB0aGluayBjb3VsZCBiZSBhY2hpZXZlZCBieSBwYXNzaW5nIGl0IHRoZSBhZGRyZXNz IGFzIGFyZ3VtZW50IGluc3RlYWQgb2YgaGF2aW5nIGEgTEhTLiBCdXQgbGV0J3Mgbm90IGdvIGRv d24gdGhpcyByb3V0ZSAtIGl0IHdpbGwgaGF2ZSBxdWl0ZSBiYWQgYmVoYXZpb3Igb24gYWxpYXMg YW5hbHlzaXMgYW5kIG9wdGltaXphdGlvbi4gDQo+Pj4gDQo+Pj4gT2theS4NCj4+PiANCj4+PiBR aW5nDQo+Pj4+IA0KPj4+Pj4gSWYgc28sIOKAnHVuaW5pdGlhbGl6ZWQgYW5hbHlzaXPigJ0gcGhh c2UgbmVlZCB0byBiZSBmdXJ0aGVyIGFkanVzdGVkIHRvIHNwZWNpYWxseSBoYW5kbGUgc3VjaCBJ Ui4gDQo+Pj4+PiANCj4+Pj4+IElmIG5vdCwgd2hhdCBzaG91bGQgd2UgZG8gd2hlbiB0aGUgYXV0 byB2YXIgaXMgYWRkcmVzcyB0YWtlbj8NCg0K