From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A2298C4332F for ; Mon, 12 Dec 2022 00:17:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230435AbiLLARP (ORCPT ); Sun, 11 Dec 2022 19:17:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41214 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230031AbiLLARO (ORCPT ); Sun, 11 Dec 2022 19:17:14 -0500 Received: from mail-wm1-x329.google.com (mail-wm1-x329.google.com [IPv6:2a00:1450:4864:20::329]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8D884D105 for ; Sun, 11 Dec 2022 16:17:11 -0800 (PST) Received: by mail-wm1-x329.google.com with SMTP id 129-20020a1c0287000000b003d21f02fbaaso56605wmc.4 for ; Sun, 11 Dec 2022 16:17:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=in-reply-to:references:to:from:content-language:subject:user-agent :mime-version:date:message-id:from:to:cc:subject:date:message-id :reply-to; bh=5G85shA+fDGCDFm/22lohUjScFst638cG+yQqnmech0=; b=MOzf6b9pVc5tvc1L9nK9vz+vwxBXNwmh+bFc4MIaOPIoHfYQgEInk9Be28wia40nQL BzAxFEK8ua8YQJdTIGSoFZ6FQrXb9hiresxrbI9NRQkwcqmz8SkEOO0g7EvaWOBoNjUM J8r8QQcQF/O3O+xHlFTfoWMwfQK1YwzDayNw6ayqCETmUHcBSbKPxNBJ1ZofECykZHEC 4ECBBVvbckmtpWEAqiKgpi/DLlAh6Mzl+2cfSIflrrCalFfkguvFFaLI/UME7z4udk7Y p3LkBMYWN39AOqMeOr00A0G8E2in0vrZULfEl4nCkBQ7g4hLK5VMauqV1sEiW3OlWEfx sjWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:references:to:from:content-language:subject:user-agent :mime-version:date:message-id:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=5G85shA+fDGCDFm/22lohUjScFst638cG+yQqnmech0=; b=lGQlCUwgEc+aKdKZMIYHsUJGuDN3r+Jq6owWUr4gS0vJpzW1lewtoogwT8MvuN9Nc3 Qo2S3/6eD5ghaKaknHCPG77tuzl5096W/sscwPbV4v+7JDiWZiHqL03KyOYnCvPerY47 mPXQ9njIlXbQn9LVGKRPJ0b9fNrj/JQOTako+CANnOrXzENPN+ulRb148ny9a40+042c AIjv8c6NJdZC/g63rllvE+IkuRZhv+BAw/DdGwtLeWohG71qwiXNUliUQURmpilYIkH9 a+Jlt8dPitNvm6yQ16Wxzg5/t8U0in4QwltKMmdNM6LO2okMtciaqO44pP5HAy4qLiJj MneA== X-Gm-Message-State: ANoB5pmcEOXPsM/iFF/Q4hOxj7iORYTERNnWbMOQSDcRxflKQMkzcGsM Dcw1vaxpxDltkh9+TrZi4IqTjj0UESA= X-Google-Smtp-Source: AA0mqf5ZAxAOzD3jX7EDE0EKjU4X96T9Sw40E8Sry9lrRqXxh4AnQZIzGhq8/Oykm156G1pqgK1eRQ== X-Received: by 2002:a7b:c406:0:b0:3cf:a0f6:1942 with SMTP id k6-20020a7bc406000000b003cfa0f61942mr11505718wmi.34.1670804229904; Sun, 11 Dec 2022 16:17:09 -0800 (PST) Received: from [192.168.0.160] ([170.253.36.171]) by smtp.gmail.com with ESMTPSA id bj5-20020a0560001e0500b002362f6fcaf5sm7542474wrb.48.2022.12.11.16.17.09 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 11 Dec 2022 16:17:09 -0800 (PST) Message-ID: Date: Mon, 12 Dec 2022 01:17:02 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.5.1 Subject: Re: string_copy(7): New manual page documenting string copying functions. Content-Language: en-US From: Alejandro Colomar To: linux-man References: <176225b0-4b0e-698b-b79e-f8ed78b4cf8c@gmail.com> In-Reply-To: <176225b0-4b0e-698b-b79e-f8ed78b4cf8c@gmail.com> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------zUyPGq1UJ9XLILP2oj0q2bby" Precedence: bulk List-ID: X-Mailing-List: linux-man@vger.kernel.org This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------zUyPGq1UJ9XLILP2oj0q2bby Content-Type: multipart/mixed; boundary="------------wqE0kqfhViycH47ZnWHSshNf"; protected-headers="v1" From: Alejandro Colomar To: linux-man Message-ID: Subject: Re: string_copy(7): New manual page documenting string copying functions. References: <176225b0-4b0e-698b-b79e-f8ed78b4cf8c@gmail.com> In-Reply-To: <176225b0-4b0e-698b-b79e-f8ed78b4cf8c@gmail.com> --------------wqE0kqfhViycH47ZnWHSshNf Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 DQoNCk9uIDEyLzEyLzIyIDAwOjU5LCBBbGVqYW5kcm8gQ29sb21hciB3cm90ZToNCj4gSGkg YWxsIQ0KPiANCj4gSSdtIHBsYW5uaW5nIHRvIGFkZCBhIG5ldyBtYW51YWwgcGFnZSB0aGF0 IGRvY3VtZW50cyBhbGwgc3RyaW5nIGNvcHlpbmcgDQo+IGZ1bmN0aW9ucy7CoCBJdCBjb3Zl cnMgbW9yZSBkZXRhaWwgdGhhbiBhbnkgb2YgdGhlIGV4aXN0aW5nIG1hbnVhbCBwYWdlcyAo YW5kIGluIA0KPiBmYWN0LCBJJ3ZlIGRpc2NvdmVyZWQgc29tZSBwcm9wZXJ0aWVzIG9mIHRo ZSBmdW5jdGlvbnMgZG9jdW1lbnRlZCB3aGlsZSB3b3JraW5nIA0KPiBvbiB0aGlzIHBhZ2Up LsKgIFRoZSBpbnRlbnRpb24gaXMgdG8gcmVtb3ZlIHRoZSBleGlzdGluZyBzZXBhcmF0ZSBt YW51YWwgcGFnZXMgDQo+IGZvciBhbGwgc3RyaW5nIGNvcHlpbmcgZnVuY3Rpb25zLCBhbmQg bWFrZSB0aGVtIGxpbmtzIHRvIHRoaXMgbmV3IHBhZ2UuwqAgSXQgDQo+IGludGVuZHMgdG8g YmUgdGhlIG9ubHkgcmVmZXJlbmNlIGRvY3VtZW50YXRpb24gZm9yIGNvcHlpbmcgc3RyaW5n cyBpbiBDLCBhbmQgDQo+IGhvcGVmdWxseSBmaXggdGhlIGhhbGYgY2VudHVyeSBvZiBzdWJv cHRpbWFsIHN0cmluZyBjb3B5aW5nIGxpYnJhcnkgd2l0aCB3aGljaCANCj4gd2UndmUgbGl2 ZWQuwqAgKFNheSBnb29kYnllIHRvIHN0ZDo6c3RyaW5nLCBoZXJlIGNvbWUgYmFjayBDIHN0 cmluZ3MgOykNCj4gDQo+IFRoZSBmb3JtYXR0ZWQgbWFudWFsIHBhZ2UgaXMgYmVsb3cuDQo+ IA0KPiBBbGV4DQo+IA0KPiBQLlMuOiBJJ20gc29ycnkgZm9yIHlvdXIgYmVsb3ZlZCBzdHJp bmcgY29weWluZyBmdW5jdGlvbihzKTsgaXQgaGFzIGhpZ2ggY2hhbmNlcyANCj4gb2YgYmVp bmcgZHJlYWRlZCBieSB0aGUgcGFnZSBiZWxvdy7CoCBOb3Qgc29ycnkuwqAgT2ggd2VsbCwg YXQgbGVhc3QgSSBqdXN0aWZpZWQgDQo+IGl0LCBvciBJIHRyaWVkIDotKQ0KPiANCj4gLS0t DQo+IA0KPiBzdHJpbmdfY29weSg3KcKgwqDCoMKgwqDCoMKgwqAgTWlzY2VsbGFuZW91cyBJ bmZvcm1hdGlvbiBNYW51YWzCoMKgwqDCoMKgwqDCoMKgIHN0cmluZ19jb3B5KDcpDQo+IA0K PiBOQU1FDQo+ICDCoMKgwqDCoMKgwqAgc3RwY3B5LMKgIHN0cGVjcHkswqAgc3RwZWNweXgs IHN0cmxjcHksIHN0cmxjYXQsIHN0cnNjcHksIHN0cmNweSwgc3RyY2F0LA0KPiAgwqDCoMKg wqDCoMKgIHN0cG5jcHksIHVzdHIyc3RwLCBzdHJuY3B5LCBzdHJuY2F0LCBtZW1wY3B5IC0g Y29weSBzdHJpbmdzDQo+IA0KPiBTWU5PUFNJUw0KPiAgwqDCoCAoTnVsbOKAkHRlcm1pbmF0 ZWQpIHN0cmluZ3MNCj4gIMKgwqDCoMKgwqDCoCAvLyBDaGFpbuKAkGNvcHkgYSBzdHJpbmcu DQo+ICDCoMKgwqDCoMKgwqAgY2hhciAqc3RwY3B5KGNoYXIgKnJlc3RyaWN0IGRzdCwgY29u c3QgY2hhciAqcmVzdHJpY3Qgc3JjKTsNCj4gDQo+ICDCoMKgwqDCoMKgwqAgLy8gQ2hhaW7i gJBjb3B5IGEgc3RyaW5nIHdpdGggdHJ1bmNhdGlvbiAobm90IGluIGxpYmMpLg0KPiAgwqDC oMKgwqDCoMKgIGNoYXIgKnN0cGVjcHkoY2hhciAqZHN0LCBjaGFyIHBhc3RfZW5kWzBdLCBj b25zdCBjaGFyICpyZXN0cmljdCBzcmMpOw0KPiANCj4gIMKgwqDCoMKgwqDCoCAvLyBDaGFp buKAkGNvcHkgYSBzdHJpbmcgd2l0aCB0cnVuY2F0aW9uIGFuZCBTSUdTRUdWIG9uIGludmFs aWQgaW5wdXQuDQo+ICDCoMKgwqDCoMKgwqAgY2hhciAqc3RwZWNweXgoY2hhciAqZHN0LCBj aGFyIHBhc3RfZW5kWzBdLCBjb25zdCBjaGFyICpyZXN0cmljdCBzcmMpOw0KPiANCj4gIMKg wqDCoMKgwqDCoCAvLyBDb3B5IGEgc3RyaW5nIHdpdGggdHJ1bmNhdGlvbiBhbmQgU0lHU0VH ViBvbiBpbnZhbGlkIGlucHV0Lg0KPiAgwqDCoMKgwqDCoMKgIFtbZGVwcmVjYXRlZF1dwqAg Ly8gVXNlIHN0cGVjcHl4KCkgaW5zdGVhZC4NCj4gIMKgwqDCoMKgwqDCoCBzaXplX3Qgc3Ry bGNweShjaGFyIGRzdFtyZXN0cmljdCAuc3pdLCBjb25zdCBjaGFyICpyZXN0cmljdCBzcmMs DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZV90 IHN6KTsNCj4gDQo+ICDCoMKgwqDCoMKgwqAgLy8gQ29uY2F0ZW5hdGUgYSBzdHJpbmcgd2l0 aCB0cnVuY2F0aW9uLg0KPiAgwqDCoMKgwqDCoMKgIFtbZGVwcmVjYXRlZF1dwqAgLy8gVXNl IHN0cGVjcHl4KCkgaW5zdGVhZC4NCj4gIMKgwqDCoMKgwqDCoCBzaXplX3Qgc3RybGNhdChj aGFyIGRzdFtyZXN0cmljdCAuc3pdLCBjb25zdCBjaGFyICpyZXN0cmljdCBzcmMsDQo+ICDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZV90IHN6KTsN Cj4gDQo+ICDCoMKgwqDCoMKgwqAgLy8gQ29weSBhIHN0cmluZyB3aXRoIHRydW5jYXRpb24g KG5vdCBpbiBsaWJjKS4NCj4gIMKgwqDCoMKgwqDCoCBbW2RlcHJlY2F0ZWRdXcKgIC8vIFVz ZSBzdHBlY3B5KCkgaW5zdGVhZC4NCj4gIMKgwqDCoMKgwqDCoCBzc2l6ZV90IHN0cnNjcHko Y2hhciBkc3RbcmVzdHJpY3QgLnN6XSwgY29uc3QgY2hhciBzcmNbcmVzdHJpY3QgLnN6XSwN Cj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplX3Qg c3opOw0KPiANCj4gIMKgwqDCoMKgwqDCoCAvLyBDb3B5IGEgc3RyaW5nLg0KPiAgwqDCoMKg wqDCoMKgIFtbZGVwcmVjYXRlZF1dwqAgLy8gVXNlIHN0cGNweSgzKSBpbnN0ZWFkLg0KPiAg wqDCoMKgwqDCoMKgIGNoYXIgKnN0cmNweShjaGFyICpyZXN0cmljdCBkc3QsIGNvbnN0IGNo YXIgKnJlc3RyaWN0IHNyYyk7DQo+IA0KPiAgwqDCoMKgwqDCoMKgIC8vIENvbmNhdGVuYXRl IGEgc3RyaW5nLg0KPiAgwqDCoMKgwqDCoMKgIFtbZGVwcmVjYXRlZF1dwqAgLy8gVXNlIHN0 cGNweSgzKSBpbnN0ZWFkLg0KPiAgwqDCoMKgwqDCoMKgIGNoYXIgKnN0cmNhdChjaGFyICpy ZXN0cmljdCBkc3QsIGNvbnN0IGNoYXIgKnJlc3RyaWN0IHNyYyk7DQo+IA0KPiAgwqDCoCBV bnRlcm1pbmF0ZWQgc3RyaW5ncyAobnVsbOKAkHBhZGRlZCBmaXhlZOKAkHdpZHRoIGJ1ZmZl cnMpDQo+ICDCoMKgwqDCoMKgwqAgLy8gWmVybyBhIGZpeGVk4oCQd2lkdGggYnVmZmVyLCBh bmQNCj4gIMKgwqDCoMKgwqDCoCAvLyBjb3B5IGEgc3RyaW5nIHdpdGggdHJ1bmNhdGlvbiBp bnRvIGFuIHVudGVybWluYXRlZCBzdHJpbmcuDQo+ICDCoMKgwqDCoMKgwqAgY2hhciAqc3Rw bmNweShjaGFyIGRzdFtyZXN0cmljdCAuc3pdLCBjb25zdCBjaGFyICpyZXN0cmljdCBzcmMs DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZV90 IHN6KTsNCj4gDQo+ICDCoMKgwqDCoMKgwqAgLy8gQ2hhaW7igJBjb3B5IGFuIHVudGVybWlu YXRlZCBzdHJpbmcgaW50byBhIHN0cmluZyAobm90IGluIGxpYmMpLg0KPiAgwqDCoMKgwqDC oMKgIGNoYXIgKnVzdHIyc3RwKGNoYXIgKnJlc3RyaWN0IGRzdCwgY29uc3QgY2hhciBzcmNb cmVzdHJpY3QgLnN6XSwNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBzaXplX3Qgc3opOw0KPiANCj4gIMKgwqDCoMKgwqDCoCAvLyBaZXJvIGEgZml4 ZWTigJB3aWR0aCBidWZmZXIsIGFuZA0KPiAgwqDCoMKgwqDCoMKgIC8vIGNvcHkgYSBzdHJp bmcgd2l0aCB0cnVuY2F0aW9uIGludG8gYW4gdW50ZXJtaW5hdGVkIHN0cmluZw0KPiAgwqDC oMKgwqDCoMKgIFtbZGVwcmVjYXRlZF1dwqAgLy8gVXNlIHN0cG5jcHkoMykgaW5zdGVhZC4N Cj4gIMKgwqDCoMKgwqDCoCBjaGFyICpzdHJuY3B5KGNoYXIgZGVzdFtyZXN0cmljdCAuc3pd LCBjb25zdCBjaGFyICpyZXN0cmljdCBzcmMsDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZV90IHN6KTsNCj4gDQo+ICDCoMKgwqDCoMKgwqAg Ly8gQ29uY2F0ZW5hdGUgYW4gdW50ZXJtaW5hdGVkIHN0cmluZyBpbnRvIGEgc3RyaW5nLg0K PiAgwqDCoMKgwqDCoMKgIFtbZGVwcmVjYXRlZF1dwqAgLy8gVXNlIHVzdHIyc3RwKCkgaW5z dGVhZC4NCj4gIMKgwqDCoMKgwqDCoCBjaGFyICpzdHJuY2F0KGNoYXIgKnJlc3RyaWN0IGRz dCwgY29uc3QgY2hhciBzcmNbcmVzdHJpY3QgLnN6XSwNCj4gIMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplX3Qgc3opOw0KPiANCj4gIMKgwqAgU3Ry aW5nIHN0cnVjdHVyZXMNCj4gIMKgwqDCoMKgwqDCoCAvLyAoTnVsbOKAkHRlcm1pbmF0ZWQp IHN0cmluZyBzdHJ1Y3R1cmUuDQo+ICDCoMKgwqDCoMKgwqAgc3RydWN0IHN0cl9zIHsNCj4g IMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVfdMKgIGxlbjsNCj4gIMKgwqDCoMKgwqDCoMKg wqDCoMKgIGNoYXLCoMKgwqAgKnN0cjsNCj4gIMKgwqDCoMKgwqDCoCB9Ow0KPiANCj4gIMKg wqDCoMKgwqDCoCAvLyBVbnRlcm1pbmF0ZWQgc3RyaW5nIHN0cnVjdHVyZSAob3ZlcmxhcHBp bmcgc3RyaW5ncykuDQo+ICDCoMKgwqDCoMKgwqAgc3RydWN0IHVzdHJfcyB7DQo+ICDCoMKg wqDCoMKgwqDCoMKgwqDCoCBzaXplX3TCoCBsZW47DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDC oCBjaGFywqDCoMKgICp1c3RyOw0KPiAgwqDCoMKgwqDCoMKgIH07DQo+IA0KPiAgwqDCoMKg wqDCoMKgIC8vIENoYWlu4oCQY29weSBhIHN0cmluZyBzdHJ1Y3R1cmUgaW50byBhbiB1bnRl cm1pbmF0ZWQgc3RyaW5nLg0KPiAgwqDCoMKgwqDCoMKgIHZvaWQgKm1lbXBjcHkodm9pZCAq cmVzdHJpY3QgZHN0LCBjb25zdCB2b2lkIHNyY1tyZXN0cmljdCBsZW5dLA0KPiAgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVfdCBsZW4pOw0KPiAN Cj4gREVTQ1JJUFRJT04NCj4gIMKgwqAgVGVybXMgKGFuZCBhYmJyZXZpYXRpb25zKQ0KPiAg wqDCoMKgwqDCoMKgIHN0cmluZyAoc3RyKQ0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgaXMgYSBzZXF1ZW5jZSBvZiB6ZXJvIG9yIG1vcmUgbm9u4oCQbnVsbCBjaGFyYWN0ZXJz LCBmb2xsb3dlZCBieSBhDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBudWxsIGJ5 dGUuDQo+IA0KPiAgwqDCoMKgwqDCoMKgIHVudGVybWluYXRlZCBzdHJpbmcgKHVzdHIpDQo+ ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpcyBhIHNlcXVlbmNlIG9mIHplcm8gb3Ig bW9yZcKgIG5vbuKAkG51bGzCoCBjaGFyYWN0ZXJzLsKgwqAgVGhlecKgIGFyZQ0KPiAgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc29tZXRpbWVzwqAgY29udGFpbmVkwqAgaW4gZml4 ZWTigJB3aWR0aCBidWZmZXJzLCB3aGljaCB1c3VhbGx5IGNvbuKAkA0KPiAgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgdGFpbiBwYWRkaW5nIG51bGwgYnl0ZXMgYWZ0ZXIgdGhlIHVu dGVybWluYXRlZCBzdHJpbmcswqAgdG/CoCBmaWxsDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB0aGXCoCByZXN0wqAgb2bCoCB0aGXCoCBidWZmZXLCoCB3aXRob3V0wqAgYWZm ZWN0aW5nwqAgdGhlIHVudGVybWluYXRlZA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc3RyaW5nOyBob3dldmVyLCB0aG9zZSBwYWRkaW5nIG51bGwgYnl0ZXMgYXJlIG5vdMKg IHBhcnTCoCBvZsKgIHRoZQ0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW50ZXJt aW5hdGVkIHN0cmluZy4NCj4gDQo+ICDCoMKgwqDCoMKgwqAgbGVuZ3RoIChsZW4pDQo+ICDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpcyB0aGUgbnVtYmVyIG9mIG5vbuKAkG51bGwg Y2hhcmFjdGVycyBpbiBhIHN0cmluZy7CoCBJdCBpcyB0aGUgcmXigJANCj4gIMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHR1cm4gdmFsdWUgb2Ygc3RybGVuKHN0cikgYW5kIG9mIHN0 cm5sZW4odXN0ciwgc3opLg0KPiANCj4gIMKgwqDCoMKgwqDCoCBzaXplIChzeikNCj4gIMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlZmVycyB0byB0aGUgZW50aXJlIGJ1ZmZlciB3 aGVyZSB0aGUgc3RyaW5nIGlzIGNvbnRhaW5lZC4NCj4gDQo+ICDCoMKgwqDCoMKgwqAgZW5k wqDCoMKgIGlzwqAgdGhlwqAgbmFtZcKgIG9mwqAgYcKgIHBvaW50ZXLCoCB0byB0aGUgdGVy bWluYXRpbmcgbnVsbCBieXRlIG9mIGENCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHN0cmluZywgb3IgYSBwb2ludGVyIHRvIG9uZSBwYXN0IHRoZSBsYXN0IGNoYXJhY3RlciBv ZiBhbiB1bnRlcuKAkA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbWluYXRlZCBz dHJpbmcuwqAgVGhpcyBpcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGZ1bmN0aW9ucyB0aGF0wqAg YWzigJANCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxvdyBjaGFpbmluZy7CoCBJ dCBpcyBlcXVpdmFsZW50IHRvICZzdHJbbGVuXS4NCj4gDQo+ICDCoMKgwqDCoMKgwqAgcGFz dF9lbmQNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlzwqAgdGhlIG5hbWUgb2Yg YSBwb2ludGVyIHRvIG9uZSBwYXN0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciB0aGF0DQo+ICDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250YWlucyBhIHN0cmluZy7CoCBJdCBpcyBl cXVpdmFsZW50IHRvICZzdHJbc3pdLsKgIEl0IGlzIHVzZWQgYXMNCj4gIMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGEgc2VudGluZWwgdmFsdWUsIHRvIGJlIGFibGXCoCB0b8KgIHRy dW5jYXRlwqAgc3RyaW5nc8KgIGluc3RlYWTCoCBvZg0KPiAgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgb3ZlcnJ1bm5pbmcgYSBidWZmZXIuDQo+IA0KPiAgwqDCoMKgwqDCoMKgIHN0 cmluZyBzdHJ1Y3R1cmUNCj4gIMKgwqDCoMKgwqDCoCB1bnRlcm1pbmF0ZWQgc3RyaW5nIHN0 cnVjdHVyZQ0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgU3RydWN0dXJlwqAgdGhh dMKgIGNvbnRhaW5zIHRoZSBsZW5ndGggb2YgYSBzdHJpbmcsIGFzIHdlbGwgYXMgdGhlDQo+ ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJpbmcgb3IgdGhlIHVudGVybWluYXRl ZCBzdHJpbmcuDQo+IA0KPiAgwqDCoCBUeXBlcyBvZiBmdW5jdGlvbnMNCj4gIMKgwqDCoMKg wqDCoCBDb3B5LCBjb25jYXRlbmF0ZSwgYW5kIGNoYWlu4oCQY29weQ0KPiAgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgT3JpZ2luYWxseSwgdGhlcmUgd2FzIGEgZGlzdGluY3Rpb24g YmV0d2VlbiBmdW5jdGlvbnMgdGhhdMKgIGNvcHkNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGFuZMKgIHRob3NlIHRoYXQgY29uY2F0ZW5hdGUuwqAgSG93ZXZlciwgbmV3ZXIg ZnVuY3Rpb25zIHRoYXQgY29weQ0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgd2hp bGUgYWxsb3dpbmcgY2hhaW5pbmcgY292ZXIgYm90aCB1c2UgY2FzZXMgd2l0aCBhIHNpbmds ZcKgIEFQSS4NCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFRoZXnCoCBhcmXCoCBh bHNvIGFsZ29yaXRobWljYWxseSBmYXN0ZXIsIHNpbmNlIHRoZXkgZG9u4oCZdCBuZWVkIHRv DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZWFyY2ggZm9yIHRoZSBlbmQgb2Yg dGhlIGV4aXN0aW5nIHN0cmluZy4NCj4gDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBUbyBjaGFpbiBjb3B5IGZ1bmN0aW9ucywgdGhleSBuZWVkIHRvIHJldHVybiBhwqAgcG9p bnRlcsKgIHRvwqAgdGhlDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbmQuwqDC oCBUaGF04oCZc8KgIGHCoCBieXByb2R1Y3TCoCBvZiB0aGUgY29weSBvcGVyYXRpb24sIHNv IGl0IGhhcyBubw0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGVyZm9ybWFuY2Ug Y29zdHMuwqAgVGhlc2UgZnVuY3Rpb25zIGFyZSBwcmVmZXJyZWQgb3ZlcsKgIGNvcHnCoCBv cg0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uY2F0ZW5hdGlvbsKgIGZ1bmN0 aW9ucy7CoCBGdW5jdGlvbnMgdGhhdCByZXR1cm4gc3VjaCBhIHBvaW50ZXIsDQo+ICDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhbmQgdGh1cyBjYW4gYmUgY2hhaW5lZCwgaGF2ZSBu YW1lcyBvZiB0aGUgZm9ybcKgICpzdHAqKCkswqAgc2luY2UNCj4gIMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGl04oCZcyBhbHNvIGNvbW1vbiB0byBuYW1lIHRoZSBwb2ludGVyIGp1 c3QgcC4NCj4gDQo+ICDCoMKgwqDCoMKgwqAgVHJ1bmNhdGUgb3Igbm90Pw0KPiAgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgVGhlwqAgZmlyc3TCoCB0aGluZ8KgIHRvIG5vdGUgaXMg dGhhdCBwcm9ncmFtbWVycyBzaG91bGQgYmUgY2FyZWZ1bA0KPiAgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgd2l0aCBidWZmZXJzLCBzbyB0aGV5IGFsd2F5cyBoYXZlIHRoZSBjb3Jy ZWN0IHNpemUsIGFuZMKgIHRydW5jYeKAkA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgdGlvbiBpcyBub3QgbmVjZXNzYXJ5Lg0KPiANCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIEluwqAgbW9zdMKgIGNhc2VzLCB0cnVuY2F0aW9uIGlzIG5vdCBkZXNpcmVkLCBh bmQgaXQgaXMgc2ltcGxlciB0bw0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAganVz dCBkbyB0aGUgY29weS7CoCBTaW1wbGVywqAgY29kZcKgIGlzwqAgc2FmZXLCoCBjb2RlLsKg wqAgUHJvZ3JhbW1pbmcNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFnYWluc3TC oCBwcm9ncmFtbWluZyBtaXN0YWtlcyBieSBhZGRpbmcgbW9yZSBjb2RlIGp1c3QgYWRkcyBt b3JlDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwb2ludHMgd2hlcmUgbWlzdGFr ZXMgY2FuIGJlIG1hZGUuDQo+IA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgTm93 YWRheXMsIGNvbXBpbGVycyBjYW4gZGV0ZWN0IG1vc3QgcHJvZ3JhbW1lciBlcnJvcnMgd2l0 aMKgIGZlYeKAkA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdHVyZXPCoMKgwqAg bGlrZcKgwqAgY29tcGlsZXLCoMKgIHdhcm5pbmdzLMKgwqAgc3RhdGljwqDCoCBhbmFseXpl cnMswqDCoCBhbmQNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9GT1JUSUZZX1NP VVJDRSAoc2VlIGZ0bSg3KSkuwqAgS2VlcGluZ8KgIHRoZcKgIGNvZGXCoCBzaW1wbGXCoCBo ZWxwcw0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdGhlc2UgZXJyb3LigJBkZXRl Y3Rpb24gZmVhdHVyZXMgYmUgbW9yZSBwcmVjaXNlLg0KPiANCj4gIMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIFdoZW4gdmFsaWRhdGluZyB1c2VyIGlucHV0LCBob3dldmVyLCBpdCBt YWtlcyBzZW5zZSB0byB0cnVuY2F0ZS4NCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IFJlbWVtYmVyIHRvIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgb2Ygc3VjaCBmdW5jdGlvbiBj YWxscy4NCj4gDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBGdW5jdGlvbnMgdGhh dCB0cnVuY2F0ZToNCj4gDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCDigKLCoCBz dHBlY3B5KCnCoCBpc8KgIHRoZcKgIG1vc3TCoCBlZmZpY2llbnQgc3RyaW5nIGNvcHkgZnVu Y3Rpb24gdGhhdA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGVyZm9y bXMgdHJ1bmNhdGlvbi7CoCBJdCBvbmx5IHJlcXVpcmVzIHRvIGNoZWNrwqAgZm9ywqAgdHJ1 bmNh4oCQDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0aW9uIG9uY2Ug YWZ0ZXIgYWxsIGNoYWluZWQgY2FsbHMuDQo+IA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAg4oCiwqAgc3RwZWNweXgoKSBpcyBhIHZhcmlhbnQgb2Ygc3RwZWNweSgpIHRoYXQg Y29uc3VtZXMgdGhlIGVudGlyZQ0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc291cmNlIHN0cmluZywgdG8gY2F0Y2ggYnVncyBpbiB0aGUgcHJvZ3JhbSBieSBmb3Jj aW5nIGEgc2Vn4oCQDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtZW50 YXRpb24gZmF1bHQgKGFzIHN0cmxjcHkoM2JzZCkgYW5kIHN0cmxjYXQoM2JzZCkgZG8pLg0K PiANCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIOKAosKgIHN0cmxjcHkoM2JzZCkg YW5kIHN0cmxjYXQoM2JzZCksIHdoaWNoIG9yaWdpbmF0ZWQgaW4gT3BlbkJTRCwNCj4gIMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFyZSBkZXNpZ25lZCB0byBjcmFzaCBp ZiB0aGUgaW5wdXQgc3RyaW5nIGlzIGludmFsaWQgKGRvZXNu4oCZdA0KPiAgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29udGFpbiBhIG51bGwgYnl0ZSkuDQo+IA0KPiAg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg4oCiwqAgc3Ryc2NweSg5KSBpcyBhIGZ1bmN0 aW9uIGluIHRoZSBMaW51eCBrZXJuZWwgd2hpY2ggcmVwb3J0cyBhbg0KPiAgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZXJyb3IgaW5zdGVhZCBvZiBjcmFzaGluZy4NCj4g DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCDigKLCoCBzdHBuY3B5KDMpIGFuZCBz dHJuY3B5KDMpIGFsc28gdHJ1bmNhdGUsIGJ1dCB0aGV5IGRvbuKAmXQgd3JpdGUNCj4gIMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cmluZ3MsIGJ1dCByYXRoZXIgdW50 ZXJtaW5hdGVkIHN0cmluZ3MuDQo+IA0KPiAgwqDCoCBVbnRlcm1pbmF0ZWQgc3RyaW5ncyAo bnVsbOKAkHBhZGRlZCBmaXhlZOKAkHdpZHRoIGJ1ZmZlcnMpDQo+ICDCoMKgwqDCoMKgwqAg Rm9ywqAgaGlzdG9yaWMgcmVhc29ucywgc29tZSBzdGFuZGFyZCBBUElzLCBzdWNoIGFzIHV0 bXB4KDUpLCB1c2UgdW50ZXLigJANCj4gIMKgwqDCoMKgwqDCoCBtaW5hdGVkIHN0cmluZ3Mg aW4gZml4ZWTigJB3aWR0aCBidWZmZXJzLsKgIFRvIGludGVyZmFjZSB3aXRowqAgdGhlbSzC oCBzcGXigJANCj4gIMKgwqDCoMKgwqDCoCBjaWFsaXplZCBmdW5jdGlvbnMgbmVlZCB0byBi ZSB1c2VkLg0KPiANCj4gIMKgwqDCoMKgwqDCoCBUbyBjb3B5IHN0cmluZ3MgaW50byB0aGVt LCB1c2Ugc3RwbmNweSgzKS4NCj4gDQo+ICDCoMKgwqDCoMKgwqAgVG/CoCBjb3B5IGZyb20g YW4gdW50ZXJtaW5hdGVkIHN0cmluZyB3aXRoaW4gYSBmaXhlZOKAkHdpZHRoIGJ1ZmZlciBp bnRvIGENCj4gIMKgwqDCoMKgwqDCoCBzdHJpbmcsIGlnbm9yaW5nIGFueSB0cmFpbGluZyBu dWxswqAgYnl0ZXPCoCBpbsKgIHRoZcKgIHNvdXJjZcKgIGZpeGVk4oCQd2lkdGgNCj4gIMKg wqDCoMKgwqDCoCBidWZmZXIsIHlvdSBzaG91bGQgdXNlIHVzdHIyc3RwKCkuDQo+IA0KPiAg wqDCoCBTdHJpbmcgc3RydWN0dXJlcw0KPiAgwqDCoMKgwqDCoMKgIFRoZSBzaW1wbGVzdCBz dHJpbmcgY29weWluZyBmdW5jdGlvbiBpcyBtZW1wY3B5KDMpLsKgIEl0IHJlcXVpcmVzIGFs d2F5cw0KPiAgwqDCoMKgwqDCoMKgIGtub3dpbmfCoCB0aGUgbGVuZ3RoIG9mIHlvdXIgc3Ry aW5ncywgZm9yIHdoaWNoIHN0cmluZyBzdHJ1Y3R1cmVzIGNhbiBiZQ0KPiAgwqDCoMKgwqDC oMKgIHVzZWQuwqAgSXQgbWFrZXMgdGhlIGNvZGUgc2ltcGxlciwgc2luY2UgeW91IGFsd2F5 cyBrbm93IHRoZcKgIGxlbmd0aMKgIG9mDQo+ICDCoMKgwqDCoMKgwqAgeW91ciBzdHJpbmdz LCBhbmQgaXTigJlzIGFsc28gZmFzdGVyLCBzaW5jZSBpdCBkb2VzbuKAmXQgbmVlZCB0byBy ZXBlYXRlZGx5DQo+ICDCoMKgwqDCoMKgwqAgY2FsY3VsYXRlwqAgdGhvc2XCoCBsZW5ndGhz LsKgwqAgbWVtcGNweSgzKcKgIGFsd2F5cyBjcmVhdGVzIGFuIHVudGVybWluYXRlZA0KPiAg wqDCoMKgwqDCoMKgIHN0cmluZywgc28geW91IG5lZWQgdG8gZXhwbGljaXRseSBzZXQgdGhl IHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4NCj4gDQo+ICDCoMKgwqDCoMKgwqAgU3RyaW5nIHN0 cnVjdHVyZQ0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgVGhlIGZvbGxvd2luZyBj b2RlIGNhbiBiZcKgIHVzZWTCoCB0b8KgIGNoYWlu4oCQY29wecKgIGZyb23CoCBhwqAgc3Ry aW5nDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3R1cmUgaW50byBhIHN0 cmluZzoNCj4gDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHAgPSBt ZW1wY3B5KHAsIHNyYy0+c3RyLCBzcmMtPmxlbik7DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICpwID0gJ1wwJzsNCj4gDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBUaGXCoCBmb2xsb3dpbmfCoCBjb2RlwqAgY2FuwqAgYmXCoCB1c2VkwqAgdG8g Y2hhaW7igJBjb3B5IGZyb20gYSBzdHJpbmcNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHN0cnVjdHVyZSBpbnRvIGFuIHVudGVybWluYXRlZCBzdHJpbmc6DQo+IA0KPiAgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwID0gbWVtcGNweShwLCBzcmMtPnN0 ciwgc3JjLT5sZW4pOw0KPiANCj4gIMKgwqDCoMKgwqDCoCBVbnRlcm1pbmF0ZWQgc3RyaW5n IHN0cnVjdHVyZSAob3ZlcmxhcHBpbmcgc3RyaW5ncykNCj4gIMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIEluIHByb2dyYW1zIHRoYXQgbWFrZSBjb25zaWRlcmFibGUgdXNlIG9mIHN0 cmluZ3MsIGFuZCBuZWVkwqAgdGhlDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBi ZXN0wqAgcGVyZm9ybWFuY2UsIHVzaW5nIG92ZXJsYXBwaW5nIHN0cmluZ3MgY2FuIG1ha2Ug YSBiaWcgZGlm4oCQDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmZXJlbmNlLsKg IEl0IGFsbG93cyBob2xkaW5nIHN1YnN0cmluZ3Mgb2YgYSBiaWdnZXIgc3RyaW5nwqAgd2hp bGUNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5vdCBkdXBsaWNhdGluZyBtZW1v cnkgbm9yIHVzaW5nIHRpbWUgdG8gZG8gYSBjb3B5Lg0KPiANCj4gIMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIEhvd2V2ZXIswqAgdGhpcyBpcyBkZWxpY2F0ZSwgc2luY2UgaXQgcmVx dWlyZXMgdXNpbmcgdW50ZXJtaW5hdGVkDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBzdHJpbmdzLsKgIEMgbGlicmFyeSBBUElzIHVzZSBzdHJpbmdzLCBzbyBwcm9ncmFtcyB0 aGF0wqAgdXNlwqAgdW7igJANCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRlcm1p bmF0ZWTCoCBzdHJpbmdzwqAgd2lsbMKgIGhhdmXCoCB0b8KgIHRha2XCoCBjYXJlIHRvIGRp ZmZlcmVudGlhdGUNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cmluZ3MgZnJv bSB1bnRlcm1pbmF0ZWQgc3RyaW5ncy4NCj4gDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBUaGUgZm9sbG93aW5nIGNvZGUgY2FuIGJlIHVzZWQgdG8gY2hhaW7igJBjb3B5wqAg ZnJvbcKgIGFuwqAgdW50ZXJtaeKAkA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg bmF0ZWQgc3RyaW5nIHN0cnVjdHVyZSB0byBhIHN0cmluZzoNCj4gDQo+ICDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHAgPSBtZW1wY3B5KHAsIHNyYy0+dXN0ciwgc3Jj LT5sZW4pOw0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqcCA9ICdc MCc7DQo+IA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgVGhlwqAgZm9sbG93aW5n wqAgY29kZcKgIGNhbiBiZSB1c2VkIHRvIGNoYWlu4oCQY29weSBmcm9tIGFuIHVudGVybWni gJANCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5hdGVkIHN0cmluZyBzdHJ1Y3R1 cmUgdG8gYW4gdW50ZXJtaW5hdGVkIHN0cmluZzoNCj4gDQo+ICDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHAgPSBtZW1wY3B5KHAsIHNyYy0+dXN0ciwgc3JjLT5sZW4p Ow0KPiANCj4gIMKgwqAgRnVuY3Rpb25zDQo+ICDCoMKgwqDCoMKgwqAgc3RwY3B5KDMpDQo+ ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBUaGlzIGZ1bmN0aW9uIGNvcGllcyB0aGUg aW5wdXQgc3RyaW5nIGludG8gYSBkZXN0aW5hdGlvbiBzdHJpbmcuDQo+ICDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBUaGUgcHJvZ3JhbW1lciBpcyByZXNwb25zaWJsZcKgIGZvcsKg IGFsbG9jYXRpbmfCoCBhwqAgYnVmZmVywqAgbGFyZ2UNCj4gIMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGVub3VnaC7CoCBJdCByZXR1cm5zIGEgcG9pbnRlciBzdWl0YWJsZSBmb3Ig Y2hhaW5pbmcuDQo+IA0KPiAgwqDCoMKgwqDCoMKgIHN0cGVjcHkoKQ0KPiAgwqDCoMKgwqDC oMKgIHN0cGVjcHl4KCkNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFRoZXNlIGZ1 bmN0aW9ucyBjb3B5IHRoZSBpbnB1dCBzdHJpbmcgaW50byBhIGRlc3RpbmF0aW9uIHN0cmlu Zy4NCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIElmwqAgdGhlIGRlc3RpbmF0aW9u IGJ1ZmZlciwgbGltaXRlZCBieSBhIHBvaW50ZXIgdG8gb25lIHBhc3QgdGhlDQo+ICDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbmQgb2YgaXQsIGlzbuKAmXQgbGFyZ2UgZW5vdWdo IHRvIGhvbGQgdGhlwqAgY29weSzCoCB0aGXCoCByZXN1bHRpbmcNCj4gIMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHN0cmluZ8KgIGlzwqAgdHJ1bmNhdGVkwqAgKGJ1dMKgIGl0wqAg aXMgZ3VhcmFudGVlZCB0byBiZSBudWxs4oCQdGVybWnigJANCj4gIMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIG5hdGVkKS7CoCBUaGV5IHJldHVybiBhIHBvaW50ZXIgc3VpdGFibGUg Zm9ywqAgY2hhaW5pbmcuwqDCoCBUcnVuY2HigJANCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHRpb24gbmVlZHMgdG8gYmUgZGV0ZWN0ZWQgb25seSBvbmNlIGFmdGVyIHRoZSBs YXN0IGNoYWluZWQgY2FsbC4NCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cGVj cHl4KCnCoCBoYXMgaWRlbnRpY2FsIHNlbWFudGljcyB0byBzdHBlY3B5KCksIGV4Y2VwdCB0 aGF0IGl0DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb3JjZXMgYSBTSUdTRUdW IG9uIFVuZGVmaW5lZCBCZWhhdmlvci4NCj4gDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBUaGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBwcm92aWRlZCBieSBhbnkgbGlicmFyeSwg YnV0IHlvdSBjYW4gZGXigJANCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZpbmUg dGhlbSB3aXRoIHRoZSBmb2xsb3dpbmcgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uczoNCj4g DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIFRoaXMgY29kZSBp cyBpbiB0aGUgcHVibGljIGRvbWFpbi4gKi8NCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgY2hhciAqDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHN0cGVjcHkoY2hhciAqZHN0LCBjaGFyIHBhc3RfZW5kWzBdLA0KPiAgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3QgY2hhciAq cmVzdHJpY3Qgc3JjKQ0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB7 DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2hhciAq cDsNCj4gDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg aWYgKGRzdCA9PSBwYXN0X2VuZCkNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBwYXN0X2VuZDsNCj4gDQo+ICDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcCA9IG1lbWNjcHkoZHN0LCBz cmMsICdcMCcsIHBhc3RfZW5kIC0gZHN0KTsNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAocCAhPSBOVUxMKQ0KPiAgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHAgLSAxOw0KPiAN Cj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiB0cnVu Y2F0aW9uIGRldGVjdGVkICovDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcGFzdF9lbmRbLTFdID0gJ1wwJzsNCj4gIMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcGFzdF9lbmQ7DQo+ICDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0NCj4gDQo+ICDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIC8qIFRoaXMgY29kZSBpcyBpbiB0aGUgcHVibGljIGRvbWFp bi4gKi8NCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2hhciAqDQo+ ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cGVjcHl4KGNoYXIgKmRz dCwgY2hhciBwYXN0X2VuZFswXSwNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3QgY2hhciAqcmVzdHJpY3Qgc3JjKQ0KPiAg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB7DQo+ICDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHNyY1tzdHJsZW4oc3JjKV0gIT0g J1wwJykNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHJhaXNlKFNJR1NFR1YpOw0KPiANCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gc3RwZWNweShkc3QsIHBhc3RfZW5kLCBzcmMp Ow0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9DQo+IA0KPiAgwqDC oMKgwqDCoMKgIHN0cG5jcHkoMykNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFRo aXMgZnVuY3Rpb24gY29waWVzIHRoZSBpbnB1dCBzdHJpbmcgaW50byBhwqAgZGVzdGluYXRp b27CoCBudWxs4oCQDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwYWRkZWTCoCBm aXhlZOKAkHdpZHRowqAgdW50ZXJtaW5hdGVkwqAgc3RyaW5nLsKgwqAgSWbCoCB0aGUgZGVz dGluYXRpb24NCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ1ZmZlciwgbGltaXRl ZCBieSBpdHMgc2l6ZSwgaXNu4oCZdMKgIGxhcmdlwqAgZW5vdWdowqAgdG/CoCBob2xkwqAg dGhlDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb3B5LMKgIHRoZcKgIHJlc3Vs dGluZ8KgIHN0cmluZyBpcyB0cnVuY2F0ZWQuwqAgU2luY2UgaXQgY3JlYXRlcyBhbg0KPiAg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW50ZXJtaW5hdGVkIHN0cmluZywgaXQgZG9l c27igJl0IG5lZWQgdG8gd3JpdGUgYSB0ZXJtaW5hdGluZyBudWxsDQo+ICDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBieXRlLsKgIEl0IHJldHVybnMgYSBwb2ludGVyIHN1aXRhYmxl IGZvciBjaGFpbmluZywgYnV0IGl04oCZc8KgIG5vdA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgaWRlYWwgZm9yIHRoYXQuwqAgVHJ1bmNhdGlvbiBuZWVkcyB0byBiZSBkZXRl Y3RlZCBvbmx5IG9uY2UgYWZ0ZXINCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRo ZSBsYXN0IGNoYWluZWQgY2FsbC4NCj4gDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBJZsKgIHlvdeKAmXJlIGdvaW5nIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIGluIGNoYWluZWQg Y2FsbHMsIGl0IHdvdWxkDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwcm9iYWJs eSBiZSB1c2VmdWwgdG8gZGV2ZWxvcCBhIGZ1bmN0aW9uIHNpbWlsYXIgdG8gc3RwZWNweSgp Lg0KPiANCj4gIMKgwqDCoMKgwqDCoCB1c3RyMnN0cCgpDQo+ICDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBUaGlzIGZ1bmN0aW9uIGNvcGllcyB0aGUgaW5wdXQgdW50ZXJtaW5hdGVk IHN0cmluZyBjb250YWluZWTCoCBpbg0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg YcKgIG51bGzigJBwYWRkZWQgd2l4ZWTigJB3aWR0aCBidWZmZXIsIGludG8gYSBkZXN0aW5h dGlvbiAobnVsbOKAkHRlcuKAkA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbWlu YXRlZCkgc3RyaW5nLsKgIFRoZSBwcm9ncmFtbWVyIGlzIHJlc3BvbnNpYmxlIGZvciBhbGxv Y2F0aW5nIGENCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ1ZmZlciBsYXJnZSBl bm91Z2guwqAgSXQgcmV0dXJucyBhIHBvaW50ZXIgc3VpdGFibGXCoCBmb3LCoCBjaGFpbuKA kA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW5nLg0KPiANCj4gIMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIFRoaXPCoCBmdW5jdGlvbiBpcyBub3QgcHJvdmlkZWQgYnkg YW55IGxpYnJhcnksIGJ1dCB5b3UgY2FuIHdyaXRlDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBpdCB3aXRoIHRoZSBkZWZpbml0aW9uIGFib3ZlIGluIHRoaXMgcGFnZS4NCj4g DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBBIHRydW5jYXRpbmcgdmVyc2lvbiBv ZiB0aGlzIGZ1bmN0aW9uIGRvZXNu4oCZdCBleGlzdCzCoCBzaW5jZcKgIHRoZQ0KPiAgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZcKgIG9mwqAgdGhlIG9yaWdpbmFsIHN0cmlu ZyBpcyBhbHdheXMga25vd24sIHNvIGl0IHdvdWxkbuKAmXQgYmUNCj4gIMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHZlcnkgdXNlZnVsLg0KPiANCj4gIMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHByb3ZpZGVkIGJ5IGFueSBsaWJyYXJ5 LCBidXQgeW91IGNhbiBkZWZpbmUNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGl0 IHdpdGggdGhlIGZvbGxvd2luZyByZWZlcmVuY2UgaW1wbGVtZW50YXRpb246DQo+IA0KPiAg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBUaGlzIGNvZGUgaXMgaW4g dGhlIHB1YmxpYyBkb21haW4uICovDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGNoYXIgKg0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1 c3RyMnN0cChjaGFyICpyZXN0cmljdCBkc3QsIGNvbnN0IGNoYXIgKnJlc3RyaWN0IHNyYywN Cj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc2l6ZV90IHN6KQ0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB7 DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2hhcsKg ICplbmQ7DQo+IA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGVuZCA9IG1lbWNjcHkoZHN0LCBzcmMsICdcMCcsIHN6KSkgPzogZHN0ICsgc3o7DQo+ ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKmVuZCA9ICdc MCc7DQo+IA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHJldHVybiBlbmQ7DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0N Cj4gDQo+ICDCoMKgwqDCoMKgwqAgbWVtcGNweSgzKQ0KPiAgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgVGhpcyBmdW5jdGlvbiBjb3BpZXMgdGhlIGlucHV0IHN0cmluZywgbGltaXRl ZMKgIGJ5wqAgaXRzwqAgbGVuZ3RoLA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg aW50b8KgIGHCoCBkZXN0aW5hdGlvbiB1bnRlcm1pbmF0ZWQgc3RyaW5nLsKgIFRoZSBwcm9n cmFtbWVyIGlzIHJl4oCQDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzcG9uc2li bGUgZm9yIGFsbG9jYXRpbmcgYSBidWZmZXIgbGFyZ2UgZW5vdWdoLsKgwqAgSXTCoCByZXR1 cm5zwqAgYQ0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcG9pbnRlciBzdWl0YWJs ZSBmb3IgY2hhaW5pbmcuDQo+IA0KPiAgwqDCoCBEZXByZWNhdGVkIGZ1bmN0aW9ucw0KPiAg wqDCoMKgwqDCoMKgIHN0cmxjcHkoM2JzZCkNCj4gIMKgwqDCoMKgwqDCoCBzdHJsY2F0KDNi c2QpDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBEZXByZWNhdGVkLsKgIFRoZXNl IGZ1bmN0aW9ucyBjb3B5IHRoZSBpbnB1dCBzdHJpbmcgaW50byBhIGRlc3Rp4oCQDQo+ICDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBuYXRpb27CoCBzdHJpbmcuwqAgSWYgdGhlIGRl c3RpbmF0aW9uIGJ1ZmZlciwgbGltaXRlZCBieSBpdHMgc2l6ZSwNCj4gIMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGlzbuKAmXQgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIGNvcHks wqAgdGhlwqAgcmVzdWx0aW5nwqAgc3RyaW5nwqAgaXMNCj4gIMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHRydW5jYXRlZMKgIChidXTCoCBpdMKgIGlzIGd1YXJhbnRlZWQgdG8gYmUg bnVsbOKAkHRlcm1pbmF0ZWQpLsKgIFRoZXkNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSB0b3RhbMKgIHN0cmluZ8KgIHRoZXnCoCB0 cmllZMKgIHRvwqAgY3JlYXRlLg0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgVGhl c2UgZnVuY3Rpb25zIGZvcmNlIGEgU0lHU0VHViBvbiBVbmRlZmluZWQgQmVoYXZpb3IuDQo+ IA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RwZWNweXgoKcKgIGlzwqAgYSBi ZXR0ZXIgcmVwbGFjZW1lbnQgZm9yIHRoZXNlIGZ1bmN0aW9ucyBmb3IgdGhlDQo+ICDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb2xsb3dpbmcgcmVhc29uczoNCj4gDQo+ICDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCDigKLCoCBCZXR0ZXIgcGVyZm9ybWFuY2UgKGNoYWlu IGNvcHkgaW5zdGVhZCBvZiBjb25jYXRlbmF0aW5nKS4NCj4gDQo+ICDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCDigKLCoCBPbmx5IHJlcXVpcmVzIGRldGVjdGluZyB0cnVuY2F0aW9u IG9uY2UgcGVyIGNoYWluIG9mIGNhbGxzLg0KPiANCj4gIMKgwqDCoMKgwqDCoCBzdHJzY3B5 KDkpDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBEZXByZWNhdGVkLsKgIFRoaXMg ZnVuY3Rpb24gY29waWVzIHRoZSBpbnB1dCBzdHJpbmcgaW50byBhIGRlc3Rp4oCQDQo+ICDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBuYXRpb24gc3RyaW5nLsKgIElmIHRoZSBkZXN0 aW5hdGlvbiBidWZmZXIsIGxpbWl0ZWQgYnkgaXRzwqAgc2l6ZSwNCj4gIMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGlzbuKAmXTCoCBsYXJnZcKgIGVub3VnaMKgIHRvwqAgaG9sZCB0 aGUgY29weSwgdGhlIHJlc3VsdGluZyBzdHJpbmcgaXMNCj4gIMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHRydW5jYXRlZCAoYnV0IGl0IGlzIGd1YXJhbnRlZWQgdG8gYmUgbnVsbOKA kHRlcm1pbmF0ZWQpLsKgIEl0wqAgcmXigJANCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGRlc3RpbmF0aW9uIHN0cmluZywgb3IgLUUy QklHIG9uIHRydW5jYeKAkA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdGlvbi4N Cj4gDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHBlY3B5KCnCoCBpc8KgIGHC oCBiZXR0ZXIgcmVwbGFjZW1lbnQgZm9yIHRoaXMgZnVuY3Rpb24sIHNpbmNlIGl0DQo+ICDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBoYXMgYSBtdWNoIHNpbXBsZXIgaW50ZXJmYWNl Lg0KPiANCj4gIMKgwqDCoMKgwqDCoCBzdHJjcHkoMykNCj4gIMKgwqDCoMKgwqDCoCBzdHJj YXQoMykNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIERlcHJlY2F0ZWQuwqAgVGhl c2UgZnVuY3Rpb25zIGNvcHkgdGhlIGlucHV0IHN0cmluZyBpbnRvIGEgZGVzdGnigJANCj4g IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5hdGlvbiBzdHJpbmcuwqAgVGhlIHByb2dy YW1tZXIgaXMgcmVzcG9uc2libGUgZm9ywqAgYWxsb2NhdGluZ8KgIGENCj4gIMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGJ1ZmZlciBsYXJnZSBlbm91Z2guwqAgVGhlIHJldHVybiB2 YWx1ZSBpcyB1c2VsZXNzLg0KPiANCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0 cmNweSgzKcKgIGlzwqAgaWRlbnRpY2FsIHRvIHN0cGNweSgzKSBleGNlcHQgZm9yIHRoZSB1 c2VsZXNzIHJl4oCQDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0dXJuIHZhbHVl Lg0KPiANCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cGNweSgzKSBpcyBhIGJl dHRlciByZXBsYWNlbWVudCBmb3IgdGhlc2XCoCBmdW5jdGlvbnPCoCBmb3LCoCB0aGUNCj4g IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZvbGxvd2luZyByZWFzb25zOg0KPiANCj4g IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIOKAosKgIEJldHRlciBwZXJmb3JtYW5jZSAo Y2hhaW4gY29weSBpbnN0ZWFkIG9mIGNvbmNhdGVuYXRpbmcpLg0KPiANCj4gIMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIOKAosKgIE5vIG5lZWQgdG8gY2FsbCBzdHJsZW4oMyksIHRo YW5rcyB0byB0aGUgdXNlZnVsIHJldHVybiB2YWx1ZS4NCj4gDQo+ICDCoMKgwqDCoMKgwqAg c3RybmNweSgzKQ0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRGVwcmVjYXRlZC7C oMKgIHN0cm5jcHkoMynCoCBpc8KgIGlkZW50aWNhbCB0byBzdHBuY3B5KDMpIGV4Y2VwdCBm b3INCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRoZSB1c2VsZXNzIHJldHVybiB2 YWx1ZS7CoCBEdWUgdG8gdGhlIHJldHVybsKgIHZhbHVlLMKgIHdpdGjCoCB0aGlzDQo+ICDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmdW5jdGlvbsKgIGl04oCZcyBoYXJkIHRvIGNv cnJlY3RseSBjaGVjayBmb3IgdHJ1bmNhdGlvbi7CoCBVc2Ugc3Rw4oCQDQo+ICDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBuY3B5KDMpIGluc3RlYWQuDQo+IA0KPiAgwqDCoMKgwqDC oMKgIHN0cm5jYXQoMykNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIERlcHJlY2F0 ZWQuwqAgRG8gbm90IGNvbmZ1c2UgdGhpcyBmdW5jdGlvbiB3aXRoIHN0cm5jcHkoMyk7wqAg dGhleQ0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXJlIG5vdCByZWxhdGVkIGF0 IGFsbC4NCj4gDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBUaGlzwqAgZnVuY3Rp b27CoCBjb25jYXRlbmF0ZXPCoCB0aGUgaW5wdXQgdW50ZXJtaW5hdGVkIHN0cmluZyBjb27i gJANCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRhaW5lZCBpbiBhIG51bGzigJBw YWRkZWQgd2l4ZWTigJB3aWR0aCBidWZmZXIsIGludG/CoCBhwqAgZGVzdGluYXRpb24NCj4g IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChudWxs4oCQdGVybWluYXRlZCkgc3RyaW5n LsKgIFRoZSBwcm9ncmFtbWVyIGlzIHJlc3BvbnNpYmxlIGZvciBhbOKAkA0KPiAgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgbG9jYXRpbmcgYSBidWZmZXIgbGFyZ2UgZW5vdWdoLsKg IFRoZSByZXR1cm4gdmFsdWUgaXMgdXNlbGVzcy4NCj4gDQo+ICDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB1c3RyMnN0cCgpwqAgaXPCoCBhwqAgYmV0dGVywqAgcmVwbGFjZW1lbnQg Zm9yIHRoaXMgZnVuY3Rpb24gZm9yIHRoZQ0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZm9sbG93aW5nIHJlYXNvbnM6DQo+IA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAg4oCiwqAgQmV0dGVyIHBlcmZvcm1hbmNlIChjaGFpbiBjb3B5IGluc3RlYWQgb2YgY29u Y2F0ZW5hdGluZykuDQo+IA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg4oCiwqAg Tm8gbmVlZCB0byBjYWxsIHN0cmxlbigzKSwgdGhhbmtzIHRvIHRoZSB1c2VmdWwgcmV0dXJu IHZhbHVlLg0KPiANCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIOKAosKgIEZ1bmN0 aW9uIG5hbWUgdGhhdCBpcyBub3QgYWN0aXZlbHkgY29uZnVzaW5nLg0KPiANCj4gUkVUVVJO IFZBTFVFDQo+ICDCoMKgwqDCoMKgwqAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgcmV0dXJu IGEgcG9pbnRlciB0byB0aGUgdGVybWluYXRpbmfCoCBudWxswqAgYnl0ZQ0KPiAgwqDCoMKg wqDCoMKgIGluIHRoZSBkZXN0aW5hdGlvbiBzdHJpbmcgKHRoZXkgbmV2ZXIgdHJ1bmNhdGUp Lg0KPiANCj4gIMKgwqDCoMKgwqDCoCDigKLCoCBzdHBjcHkoMykNCj4gDQo+ICDCoMKgwqDC oMKgwqAg4oCiwqAgdXN0cjJzdHAoKQ0KPiANCj4gIMKgwqDCoMKgwqDCoCDigKLCoCBtZW1w Y3B5KDMpDQo+IA0KPiAgwqDCoMKgwqDCoMKgIFRoZcKgIGZvbGxvd2luZ8KgIGZ1bmN0aW9u cyByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUNCj4gIMKg wqDCoMKgwqDCoCBpbiB0aGUgZGVzdGluYXRpb24gc3RyaW5nLCBleGNlcHQgd2hlbiB0cnVu Y2F0aW9uIG9jY3VyczsgaWYgdHJ1bmNhdGlvbg0KPiAgwqDCoMKgwqDCoMKgIG9jY3Vycywg dGhleSByZXR1cm4gYSBwb2ludGVyIHRvIG9uZSBwYXN0IHRoZSBlbmTCoCBvZsKgIHRoZcKg IGRlc3RpbmF0aW9uDQo+ICDCoMKgwqDCoMKgwqAgYnVmZmVyLg0KPiANCj4gIMKgwqDCoMKg wqDCoCDigKLCoCBzdHBlY3B5KCkNCj4gDQo+ICDCoMKgwqDCoMKgwqAg4oCiwqAgc3RwZWNw eXgoKQ0KPiANCj4gIMKgwqDCoMKgwqDCoCBUaGXCoCBmb2xsb3dpbmcgZnVuY3Rpb24gcmV0 dXJucyBhIHBvaW50ZXIgdG8gb25lIGFmdGVyIHRoZSBsYXN0IGNoYXJhY+KAkA0KPiAgwqDC oMKgwqDCoMKgIHRlciBpbiB0aGUgZGVzdGluYXRpb24gdW50ZXJtaW5hdGVkIHN0cmluZzsg aWYgdHJ1bmNhdGlvbiBvY2N1cnMswqAgdGhhdA0KPiAgwqDCoMKgwqDCoMKgIHBvaW50ZXLC oCBpcyBlcXVpdmFsZW50IHRvIGEgcG9pbnRlciB0byBvbmUgcGFzdCB0aGUgZW5kIG9mIHRo ZSBkZXN0aW5h4oCQDQo+ICDCoMKgwqDCoMKgwqAgdGlvbiBidWZmZXIuDQo+IA0KPiAgwqDC oMKgwqDCoMKgIOKAosKgIHN0cG5jcHkoMykNCj4gDQo+ICDCoMKgIERlcHJlY2F0ZWQNCj4g IMKgwqDCoMKgwqDCoCBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyByZXR1cm4gdGhlIGxlbmd0 aCBvZiB0aGUgdG90YWwgc3RyaW5nIHRoYXQgdGhleQ0KPiAgwqDCoMKgwqDCoMKgIHRyaWVk IHRvIGNyZWF0ZSAoYXMgaWYgdHJ1bmNhdGlvbiBkaWRu4oCZdCBvY2N1cikuDQo+IA0KPiAg wqDCoMKgwqDCoMKgIOKAosKgIHN0cmxjcHkoM2JzZCkNCj4gDQo+ICDCoMKgwqDCoMKgwqAg 4oCiwqAgc3RybGNhdCgzYnNkKQ0KPiANCj4gIMKgwqDCoMKgwqDCoCBUaGUgZm9sbG93aW5n IGZ1bmN0aW9uIHJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgZGVzdGluYXRpb24gc3RyaW5n LCBvcg0KPiAgwqDCoMKgwqDCoMKgIC1FMkJJRyBvbiB0cnVuY2F0aW9uLg0KPiANCj4gIMKg wqDCoMKgwqDCoCDigKLCoCBzdHJzY3B5KDkpDQo+IA0KPiAgwqDCoMKgwqDCoMKgIFRoZSBm b2xsb3dpbmcgZnVuY3Rpb25zIHJldHVybiB0aGUgZHN0IHBvaW50ZXIsIHdoaWNoIGlzIHVz ZWxlc3MuDQo+IA0KPiAgwqDCoMKgwqDCoMKgIOKAosKgIHN0cmNweSgzKQ0KPiANCj4gIMKg wqDCoMKgwqDCoCDigKLCoCBzdHJjYXQoMykNCj4gDQo+ICDCoMKgwqDCoMKgwqAg4oCiwqAg c3RybmNweSgzKQ0KPiANCj4gIMKgwqDCoMKgwqDCoCDigKLCoCBzdHJuY2F0KDMpDQoNCkFu ZCBoZXJlIGdvZXMgdGhlIFNUQU5EQVJEUyBzZWN0aW9uOg0KDQpTVEFOREFSRFMNCiAgICAg ICAgc3RwY3B5KDMpDQogICAgICAgICAgICAgICBQT1NJWC4x4oCQMjAwOC4NCg0KICAgICAg ICBzdHBlY3B5KCkNCiAgICAgICAgc3RwZWNweXgoKQ0KICAgICAgICB1c3RyMnN0cCgpDQog ICAgICAgICAgICAgICBOb3QgZGVmaW5lZCBieSBhbnkgc3RhbmRhcmRzIG5vciBsaWJyYXJp ZXMuDQoNCiAgICAgICAgc3RwbmNweSgzKQ0KICAgICAgICAgICAgICAgUE9TSVguMeKAkDIw MDguDQoNCiAgICAgICAgbWVtcGNweSgzKQ0KICAgICAgICAgICAgICAgVGhpcyBmdW5jdGlv biBpcyBhIEdOVSBleHRlbnNpb24uDQoNCiAgICAgICAgc3RybGNweSgzYnNkKQ0KICAgICAg ICBzdHJsY2F0KDNic2QpDQogICAgICAgICAgICAgICBGdW5jdGlvbnMgIG9yaWdpbmF0ZWQg IGluICBPcGVuQlNEIGFuZCBwcmVzZW50IGluIHNvbWUgVW5peCBzeXPigJANCiAgICAgICAg ICAgICAgIHRlbXMuICBUaGV5IGFyZSBwcm92aWRlZCBpbiBHTlUvTGludXggc3lzdGVtcyBi eSBsaWJic2QuDQoNCiAgICAgICAgc3Ryc2NweSg5KQ0KICAgICAgICAgICAgICAgTGludXgg a2VybmVsIGludGVybmFsIGZ1bmN0aW9uLg0KDQogICAgICAgIHN0cmNweSgzKQ0KICAgICAg ICBzdHJjYXQoMykNCiAgICAgICAgICAgICAgIFBPU0lYLjHigJAyMDAxLCBQT1NJWC4x4oCQ MjAwOCwgQzg5LCBDOTksIFNWcjQsIDQuM0JTRC4NCg0KICAgICAgICBzdHJuY3B5KDMpDQog ICAgICAgICAgICAgICBQT1NJWC4x4oCQMjAwMSwgUE9TSVguMeKAkDIwMDgsIEM4OSwgQzk5 LCBTVnI0LCA0LjNCU0QuDQoNCiAgICAgICAgc3RybmNhdCgzKQ0KICAgICAgICAgICAgICAg UE9TSVguMeKAkDIwMDEsIFBPU0lYLjHigJAyMDA4LCBDODksIEM5OSwgU1ZyNCwgNC4zQlNE Lg0KDQoNCj4gDQo+IENBVkVBVFMNCj4gIMKgwqDCoMKgwqDCoCBTb21lIG9mIHRoZSBmdW5j dGlvbnMgZGVzY3JpYmVkIGhlcmUgYXJlIG5vdCBwcm92aWRlZCBiecKgIGFuecKgIGxpYnJh cnk7DQo+ICDCoMKgwqDCoMKgwqAgeW91IHNob3VsZCB3cml0ZSB5b3VyIG93biBjb3B5IGlm IHlvdSB3YW50IHRvIHVzZSB0aGVtLg0KPiANCj4gIMKgwqDCoMKgwqDCoCBUaGXCoCBkZXBy ZWNhdGVkIHN0YXR1cyBvZiB0aGVzZSBmdW5jdGlvbnMgdmFyaWVzIGZyb20gc3lzdGVtIHRv IHN5c3RlbS4NCj4gIMKgwqDCoMKgwqDCoCBUaGlzIHBhZ2UgZGVjbGFyZXMgYXMgZGVwcmVj YXRlZCB0aG9zZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGEgYmV0dGVyIHJl4oCQDQo+ICDCoMKg wqDCoMKgwqAgcGxhY2VtZW50IGRvY3VtZW50ZWQgaW4gdGhpcyBzYW1lIHBhZ2UuDQo+IA0K PiBFWEFNUExFUw0KPiAgwqDCoMKgwqDCoMKgIFRoZSBmb2xsb3dpbmcgYXJlIGV4YW1wbGVz IG9mIGNvcnJlY3QgdXNlIG9mIGVhY2ggb2YgdGhlc2UgZnVuY3Rpb25zLg0KPiANCj4gIMKg wqDCoMKgwqDCoCBzdHBjcHkoMykNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgcCA9IGJ1ZjsNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cCA9IHN0cGNweShwLCAiSGVsbG8gIik7DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHAgPSBzdHBjcHkocCwgIndvcmxkIik7DQo+ICDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHAgPSBzdHBjcHkocCwgIiEiKTsNCj4gIMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGVuID0gcCAtIGJ1ZjsNCj4gIMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHV0cyhidWYpOw0KPiANCj4gIMKgwqDCoMKgwqDC oCBzdHBlY3B5KCkNCj4gIMKgwqDCoMKgwqDCoCBzdHBlY3B5eCgpDQo+ICDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBhc3RfZW5kID0gYnVmICsgc2l6ZW9mKGJ1Zik7 DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHAgPSBidWY7DQo+ICDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHAgPSBzdHBlY3B5KHAsIHBhc3Rf ZW5kLCAiSGVsbG8gIik7DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHAgPSBzdHBlY3B5KHAsIHBhc3RfZW5kLCAid29ybGQiKTsNCj4gIMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcCA9IHN0cGVjcHkocCwgcGFzdF9lbmQsICIhIik7DQo+ ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChwID09IHBhc3RfZW5k KSB7DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcC0t Ow0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8g dG9vbG9uZzsNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQ0KPiAg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsZW4gPSBwIC0gYnVmOw0KPiAg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwdXRzKGJ1Zik7DQo+IA0KPiAg wqDCoMKgwqDCoMKgIHN0cG5jcHkoMykNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcGFzdF9lbmQgPSBidWYgKyBzaXplb2YoYnVmKTsNCj4gIMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW5kID0gc3RwbmNweShidWYsICJIZWxsbyB3b3Js ZCEiLCBzaXplb2YoYnVmKSk7DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGlmIChlbmQgPT0gcGFzdF9lbmQpDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgZ290byB0b29sb25nOw0KPiAgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBsZW4gPSBlbmQgLSBidWY7DQo+ICDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKGJ1Zik7 IGkrKykNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBw dXRjaGFyKGJ1ZltpXSk7DQo+IA0KPiAgwqDCoMKgwqDCoMKgIHVzdHIyc3RwKCkNCj4gIMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcCA9IGJ1ZjsNCj4gIMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcCA9IHVzdHIyc3RwKHAsICJIZWxsbyAiLCA2 KTsNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcCA9IHVzdHIyc3Rw KHAsICJ3b3JsZCIsIDQyKTvCoCAvLyBQYWRkaW5nIG51bGwgYnl0ZXMgaWdub3JlZC4NCj4g IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcCA9IHVzdHIyc3RwKHAsICIh IiwgMSk7DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxlbiA9IHAg LSBidWY7DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHB1dHMoYnVm KTsNCj4gDQo+ICDCoMKgwqDCoMKgwqAgbWVtcGNweSgzKQ0KPiAgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBwID0gYnVmOw0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBwID0gbWVtcGNweShwLCAiSGVsbG8gIiwgNik7DQo+ICDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHAgPSBtZW1wY3B5KHAsICJ3b3JsZCIsIDUp Ow0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwID0gbWVtcGNweShw LCAiISIsIDEpOw0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwID0g J1wwJzsNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGVuID0gcCAt IGJ1ZjsNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHV0cyhidWYp Ow0KPiANCj4gIMKgwqAgRGVwcmVjYXRlZA0KPiAgwqDCoMKgwqDCoMKgIHN0cmxjcHkoM2Jz ZCkNCj4gIMKgwqDCoMKgwqDCoCBzdHJsY2F0KDNic2QpDQo+ICDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGlmIChzdHJsY3B5KGJ1ZiwgIkhlbGxvICIsIHNpemVvZihi dWYpKSA+PSBzaXplb2YoYnVmKSkNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBnb3RvIHRvb2xvbmc7DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGlmIChzdHJsY2F0KGJ1ZiwgIndvcmxkIiwgc2l6ZW9mKGJ1ZikpID49 IHNpemVvZihidWYpKQ0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGdvdG8gdG9vbG9uZzsNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgbGVuID0gc3RybGNhdChidWYsICIhIiwgc2l6ZW9mKGJ1ZikpOw0KPiAgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAobGVuID49IHNpemVvZihidWYpKQ0K PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gdG9v bG9uZzsNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHV0cyhidWYp Ow0KPiANCj4gIMKgwqDCoMKgwqDCoCBzdHJzY3B5KDkpDQo+ICDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGxlbiA9IHN0cnNjcHkoYnVmLCAiSGVsbG8gd29ybGQhIiwg c2l6ZW9mKGJ1ZikpOw0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBp ZiAobGVuID09IC1FMkJJRykNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBnb3RvIHRvb2xvbmc7DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHB1dHMoYnVmKTsNCj4gDQo+ICDCoMKgwqDCoMKgwqAgc3RyY3B5KDMpDQo+ ICDCoMKgwqDCoMKgwqAgc3RyY2F0KDMpDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHN0cmNweShidWYsICJIZWxsbyAiKTsNCj4gIMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgc3RyY2F0KGJ1ZiwgIndvcmxkIik7DQo+ICDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cmNhdChidWYsICIhIik7DQo+ICDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxlbiA9IHN0cmxlbihidWYpOw0KPiAgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwdXRzKGJ1Zik7DQo+IA0KPiAgwqDC oMKgwqDCoMKgIHN0cm5jcHkoMykNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc3RybmNweShidWYsICJIZWxsbyB3b3JsZCEiLCBzaXplb2YoYnVmKSk7DQo+ICDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChidWYgKyBzaXplb2YoYnVm KSAtIDEgPT0gJ1wwJykNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBnb3RvIHRvb2xvbmc7DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGxlbiA9IHN0cm5sZW4oYnVmLCBzaXplb2YoYnVmKSk7DQo+ICDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9m KGJ1Zik7IGkrKykNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBwdXRjaGFyKGJ1ZltpXSk7DQo+IA0KPiAgwqDCoMKgwqDCoMKgIHN0cm5jYXQoMykN Cj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RybmNweShidWYsICJI ZWxsbyAiLCA2KTsNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3Ry bmNhdChidWYsICJ3b3JsZCIsIDQyKTvCoCAvLyBQYWRkaW5nIG51bGwgYnl0ZXMgaWdub3Jl ZC4NCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RybmNhdChidWYs ICIhIiwgMSk7DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHB1dHMo YnVmKTsNCj4gDQo+IFNFRSBBTFNPDQo+ICDCoMKgwqDCoMKgwqAgbWVtY3B5KDMpLCBtZW1j Y3B5KDMpLCBtZW1wY3B5KDMpLCBzdHJpbmcoMykNCj4gDQo+IExpbnV4IG1hbuKAkHBhZ2Vz ICh1bnJlbGVhc2VkKcKgwqDCoMKgwqDCoMKgIChkYXRlKcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJpbmdfY29weSg3KQ0KPiANCj4gDQo+IA0KDQot LSANCjxodHRwOi8vd3d3LmFsZWphbmRyby1jb2xvbWFyLmVzLz4NCg== --------------wqE0kqfhViycH47ZnWHSshNf-- --------------zUyPGq1UJ9XLILP2oj0q2bby Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature" -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEE6jqH8KTroDDkXfJAnowa+77/2zIFAmOWcv4ACgkQnowa+77/ 2zLd8w/9Esir2VjZSNeSon6AOpQXVvN0sE/Ndm0c9AyvZpa3/JXAmqKLSJ91DuBD DQ5XKEtP7dBhxfp4wsVGfbOy9paJPhF+vMRscJVRAq4mt6DvuMZUsU0H5qKX1iwV AsWSKZcTUqDbO0CAASc4PmVD6Dgcxh7EdPL014E2Q/yUgjMEYUSj5DXHpTNglGLo yPOQRDAFcb3MRep83yl6bnBojJmoCvwzCBjzkOEhtUGX1f2R5vxNQ5F8rbOeOA/I i4+6d36qi47bcWbB6kgqSjDP9t7WkDP2T9k/WEtknCF4oc5Rzeyuoq3Ho1IYLvPv 4geS0/pmXaO2kJTWFqXJAHSKBnkwfzTY84/EO4lJntGYNli6cS2BVZWTt052V5J6 Jm5pU3vrrJgTzNAMpeBf6yZF0RKKsnmKXt6N4e9fZ4KTPlKLSTPuT4nmaU+J5OBr 8/bgoa4vMqawZ8iUSCt9qNH/kBeOTjd5B43wh2Vz64iB3Ql8S1ZhKyQi8PwrxyE6 We4VttALvibh5IChyfI63TfaXWcWcymjnXpJGJEL3EBqpY+vudXISBB9w/BHR/pp /nOquH6DR3qV6rkCuK2DT9wxWrIMu9wQGqh0IB3Qth1pwGv7OKkxz0wQJQzZA5n4 AC0iDrO9JQO7GBVtd0l/ECM4HgefPiOHdHfW3HM6oW/eiYXpsbw= =m59u -----END PGP SIGNATURE----- --------------zUyPGq1UJ9XLILP2oj0q2bby--