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 lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 90500C36000 for ; Fri, 21 Mar 2025 17:37:01 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tvgIQ-00078T-QB; Fri, 21 Mar 2025 13:36:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvgIM-00076v-R9 for qemu-devel@nongnu.org; Fri, 21 Mar 2025 13:36:35 -0400 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1tvgIK-0002Ol-Rl for qemu-devel@nongnu.org; Fri, 21 Mar 2025 13:36:34 -0400 Received: by mail-pj1-x1036.google.com with SMTP id 98e67ed59e1d1-2ff799d99dcso3742895a91.1 for ; Fri, 21 Mar 2025 10:36:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1742578591; x=1743183391; darn=nongnu.org; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=tT69bn2UZWeYOJ1EEbQ46PGTiLI4EwXTqaOttGQp2NY=; b=CDbp8r1inST/CHWclPkzOVBr4Z/JYoX48sGrOfC608TzbPSUziVmwLqW3Js2dh6Xo7 tG+/m0uSUefM2kbTmMc1PyFsgwi3TpTaM+1Hls0FeamgcXxblpT66ZnLQpZJJ29nTLft TIEFAuOnLFV5heUxZDN7lQDXTAwaVWsAJ6KthKUu3v8tEkouqObBG/K810P3e09WWckz AcDmzJAB0sJNXMqRRhfm/HfhG5xnuqJWpU3PyfER8MYntkHmoZF/K7it+jYPtjsZky8v s0IhAHVFh97T8Q9nS106meUmvrL5ONVDSSc3CEKqpXA8rZ9WQQb0Pd1PwQv2TQI54OFY jE+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742578591; x=1743183391; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=tT69bn2UZWeYOJ1EEbQ46PGTiLI4EwXTqaOttGQp2NY=; b=GVxTDGtn29XJordRkz1l+nxEMh9gLVJakpnXiODzEFTrCOlAQlhEe3nM3V6VVBE23+ EDzRfjp3bJyG8ALAx4CEimXG4gOPe14ikrdbhqcr/3a28LI54iLFH1Xi+xd2Xpe6TXN2 uoTFp0AyP10NddbJ0ti2e87Ak5mR/M+yHjB8hXHY2gQzUkI1F7g438pIGUArpHV60y4i M5Smakj/aKDfnqyaqotiDtnQrpzwORN5R23Pwq5D6UxPg5o97MrIREvA7U5wVs6KnhJO REX9a04B7k6iD7h8w3b5FqFMnRZf3FkWDZHyEdeL7F2C/Nj6hjAo0y59gfv0lyAH0BjA Snng== X-Forwarded-Encrypted: i=1; AJvYcCW9cBlOs/yDhApn+XYawbVMVWzEF1v9EfHQg59fbrM1Z4enWNYUvWhrsvrheI+8z0RtRq94GTifgM+l@nongnu.org X-Gm-Message-State: AOJu0Yzuoy1fkEAOP99C6LDg7Efes1uhhXcOQczX9sgPCLqbEb19ftPm 5bHE5t0qnPr6YVDy2JN8mwOSQn9ZVNpUO9Z9KOwFGULJ7BSzJyIPT7kCajkOdjA= X-Gm-Gg: ASbGncvIfJzE3bxaWVue9d0mMRf588NopKq8/m/Pd4Y5u5UA2hnGhR57/tzQK344hlq Q9wJ6UC2yBOXGOTTo197eTShiW98EpB2b8n7vCn2Q6+QugBPZx1hhbGX2xTm8S26yUJ0LgMN6ZK SDHj3FFnYc5UtYG2ZWb4NhieqZUitc9psTCrPiY2lyhJUDS1vvlI1WZQJxgtQbad5fhpJ6mNc5x VhMy4gnFNvcNmhWTuEKbELyoWX2IRtGyPijQcNnkLsYIN7sUkVDlaQCdRU4L4tLk04IPS4N3Ksk sXdpa9/98Z73u0TCeLcXSRKMnjgKIQeBWSCaWh9iTqcomekaMUckyBCwzVY= X-Google-Smtp-Source: AGHT+IEEOA5xBtbEWaJk8uiq0Ls1yTNWPeoxXD3fZSLVmEoEcJqiEELfvzSouq2mLPVPJueeSc4Y3A== X-Received: by 2002:a17:90b:54cf:b0:2ff:6fc3:79c3 with SMTP id 98e67ed59e1d1-3030fe83a34mr6791060a91.9.1742578590695; Fri, 21 Mar 2025 10:36:30 -0700 (PDT) Received: from [172.16.224.217] ([209.53.90.26]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-301bf58b343sm6387578a91.15.2025.03.21.10.36.29 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 21 Mar 2025 10:36:30 -0700 (PDT) Message-ID: <471fb556-e3db-423a-96c3-8f6c33b6fbb7@linaro.org> Date: Fri, 21 Mar 2025 10:36:29 -0700 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH-for-10.1 3/4] tcg: Convert TCGState::mttcg_enabled to TriState Content-Language: en-US To: =?UTF-8?Q?Philippe_Mathieu-Daud=C3=A9?= , Richard Henderson , qemu-devel@nongnu.org Cc: Anton Johansson , Paolo Bonzini References: <20250321155925.96626-1-philmd@linaro.org> <20250321155925.96626-4-philmd@linaro.org> From: Pierrick Bouvier In-Reply-To: <20250321155925.96626-4-philmd@linaro.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 Received-SPF: pass client-ip=2607:f8b0:4864:20::1036; envelope-from=pierrick.bouvier@linaro.org; helo=mail-pj1-x1036.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org T24gMy8yMS8yNSAwODo1OSwgUGhpbGlwcGUgTWF0aGlldS1EYXVkw6kgd3JvdGU6DQo+IFVz ZSB0aGUgT25PZmZBdXRvIHR5cGUgYXMgMy1zdGF0ZS4NCj4gDQo+IFNpbmNlIHRoZSBUQ0dT dGF0ZSBpbnN0YW5jZSBpcyB6ZXJvLWluaXRpYWxpemVkLCB0aGUNCj4gbXR0Y2dfZW5hYmxl ZCBpcyBpbml0aWFsemVkIGFzIEFVVE8gKE9OX09GRl9BVVRPX0FVVE8pLg0KPiANCj4gSW4g dGNnX2luaXRfbWFjaGluZSgpLCBpZiBtdHRjZ19lbmFibGVkIGlzIHN0aWxsIEFVVE8sDQo+ IHNldCBhIGRlZmF1bHQgdmFsdWUgKGVmZmVjdGl2ZWx5IGlubGluaW5nIHRoZQ0KPiBkZWZh dWx0X210dGNnX2VuYWJsZWQoKSBtZXRob2QgY29udGVudCkuDQo+IA0KPiBJbnN0ZWFkIG9m IGVtaXRpbmcgYSB3YXJuaW5nIHdoZW4gdGhlICd0aHJlYWQnIHByb3BlcnR5DQo+IGlzIHNl dCBpbiB0Y2dfc2V0X3RocmVhZCgpLCBlbWl0IGl0IGluIHRjZ19pbml0X21hY2hpbmUoKQ0K PiB3aGVyZSBpdCBpcyBjb25zdW1lZC4NCj4gDQo+IEluIHRoZSB0Y2dfZ2V0X3RocmVhZCgp IGdldHRlciwgY29uc2lkZXIgQVVUTyAvIE9GRiBzdGF0ZXMNCj4gYXMgInNpbmdsZSIsIG90 aGVyd2lzZSBPTiBpcyAibXVsdGkiLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogUGhpbGlwcGUg TWF0aGlldS1EYXVkw6kgPHBoaWxtZEBsaW5hcm8ub3JnPg0KPiAtLS0NCj4gICBhY2NlbC90 Y2cvdGNnLWFsbC5jIHwgNjggKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQo+ICAgMSBmaWxlIGNoYW5nZWQsIDMzIGluc2VydGlvbnMoKyksIDM1IGRl bGV0aW9ucygtKQ0KPiANCj4gZGlmZiAtLWdpdCBhL2FjY2VsL3RjZy90Y2ctYWxsLmMgYi9h Y2NlbC90Y2cvdGNnLWFsbC5jDQo+IGluZGV4IGQ3NWVjZjUzMWI2Li4yYjdmODllYWEyMCAx MDA2NDQNCj4gLS0tIGEvYWNjZWwvdGNnL3RjZy1hbGwuYw0KPiArKysgYi9hY2NlbC90Y2cv dGNnLWFsbC5jDQo+IEBAIC0zMiw2ICszMiw3IEBADQo+ICAgI2luY2x1ZGUgInFlbXUvZXJy b3ItcmVwb3J0LmgiDQo+ICAgI2luY2x1ZGUgInFlbXUvYWNjZWwuaCINCj4gICAjaW5jbHVk ZSAicWVtdS9hdG9taWMuaCINCj4gKyNpbmNsdWRlICJxYXBpL3FhcGktdHlwZXMtY29tbW9u LmgiDQo+ICAgI2luY2x1ZGUgInFhcGkvcWFwaS1idWlsdGluLXZpc2l0LmgiDQo+ICAgI2lu Y2x1ZGUgInFlbXUvdW5pdHMuaCINCj4gICAjaWYgZGVmaW5lZChDT05GSUdfVVNFUl9PTkxZ KQ0KPiBAQCAtNDcsNyArNDgsNyBAQA0KPiAgIHN0cnVjdCBUQ0dTdGF0ZSB7DQo+ICAgICAg IEFjY2VsU3RhdGUgcGFyZW50X29iajsNCj4gICANCj4gLSAgICBib29sIG10dGNnX2VuYWJs ZWQ7DQo+ICsgICAgT25PZmZBdXRvIG10dGNnX2VuYWJsZWQ7DQo+ICAgICAgIGJvb2wgb25l X2luc25fcGVyX3RiOw0KPiAgICAgICBpbnQgc3BsaXR3eF9lbmFibGVkOw0KPiAgICAgICB1 bnNpZ25lZCBsb25nIHRiX3NpemU7DQo+IEBAIC02OCwzNyArNjksMTAgQEAgYm9vbCBxZW11 X3RjZ19tdHRjZ19lbmFibGVkKHZvaWQpDQo+ICAgfQ0KPiAgICNlbmRpZg0KPiAgIA0KPiAt LyoNCj4gLSAqIFdlIGRlZmF1bHQgdG8gZmFsc2UgaWYgd2Uga25vdyBvdGhlciBvcHRpb25z IGhhdmUgYmVlbiBlbmFibGVkDQo+IC0gKiB3aGljaCBhcmUgY3VycmVudGx5IGluY29tcGF0 aWJsZSB3aXRoIE1UVENHLiBPdGhlcndpc2Ugd2hlbiBlYWNoDQo+IC0gKiBndWVzdCAodGFy Z2V0KSBoYXMgYmVlbiB1cGRhdGVkIHRvIHN1cHBvcnQ6DQo+IC0gKiAgIC0gYXRvbWljIGlu c3RydWN0aW9ucw0KPiAtICogICAtIG1lbW9yeSBvcmRlcmluZyBwcmltaXRpdmVzIChiYXJy aWVycykNCj4gLSAqIHRoZXkgY2FuIHNldCB0aGUgYXBwcm9wcmlhdGUgQ09ORklHIGZsYWdz IGluICR7dGFyZ2V0fS1zb2Z0bW11Lm1haw0KPiAtICoNCj4gLSAqIE9uY2UgYSBndWVzdCBh cmNoaXRlY3R1cmUgaGFzIGJlZW4gY29udmVydGVkIHRvIHRoZSBuZXcgcHJpbWl0aXZlcw0K PiAtICogdGhlcmUgaXMgb25lIHJlbWFpbmluZyBsaW1pdGF0aW9uIHRvIGNoZWNrOg0KPiAt ICogICAtIFRoZSBndWVzdCBjYW4ndCBiZSBvdmVyc2l6ZWQgKGUuZy4gNjQgYml0IGd1ZXN0 IG9uIDMyIGJpdCBob3N0KQ0KPiAtICovDQo+IC0NCj4gLXN0YXRpYyBib29sIGRlZmF1bHRf bXR0Y2dfZW5hYmxlZCh2b2lkKQ0KPiAtew0KPiAtICAgIGlmIChpY291bnRfZW5hYmxlZCgp KSB7DQo+IC0gICAgICAgIHJldHVybiBmYWxzZTsNCj4gLSAgICB9DQo+IC0jaWZkZWYgVEFS R0VUX1NVUFBPUlRTX01UVENHDQo+IC0gICAgcmV0dXJuIHRydWU7DQo+IC0jZWxzZQ0KPiAt ICAgIHJldHVybiBmYWxzZTsNCj4gLSNlbmRpZg0KPiAtfQ0KPiAtDQo+ICAgc3RhdGljIHZv aWQgdGNnX2FjY2VsX2luc3RhbmNlX2luaXQoT2JqZWN0ICpvYmopDQo+ICAgew0KPiAgICAg ICBUQ0dTdGF0ZSAqcyA9IFRDR19TVEFURShvYmopOw0KPiAgIA0KPiAtICAgIHMtPm10dGNn X2VuYWJsZWQgPSBkZWZhdWx0X210dGNnX2VuYWJsZWQoKTsNCj4gLQ0KPiAgICAgICAvKiBJ ZiBkZWJ1Z2dpbmcgZW5hYmxlZCwgZGVmYXVsdCAiYXV0byBvbiIsIG90aGVyd2lzZSBvZmYu ICovDQo+ICAgI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX1RDRykgJiYgIWRlZmluZWQoQ09O RklHX1VTRVJfT05MWSkNCj4gICAgICAgcy0+c3BsaXR3eF9lbmFibGVkID0gLTE7DQo+IEBA IC0xMTcsOSArOTEsMzcgQEAgc3RhdGljIGludCB0Y2dfaW5pdF9tYWNoaW5lKE1hY2hpbmVT dGF0ZSAqbXMpDQo+ICAgI2Vsc2UNCj4gICAgICAgdW5zaWduZWQgbWF4X2NwdXMgPSBtcy0+ c21wLm1heF9jcHVzOw0KPiAgICNlbmRpZg0KPiArI2lmZGVmIFRBUkdFVF9TVVBQT1JUU19N VFRDRw0KPiArICAgIGJvb2wgbXR0Y2dfc3VwcG9ydGVkID0gdHJ1ZTsNCj4gKyNlbHNlDQo+ ICsgICAgYm9vbCBtdHRjZ19zdXBwb3J0ZWQgPSBmYWxzZTsNCj4gKyNlbmRpZg0KPiAgIA0K PiAgICAgICB0Y2dfYWxsb3dlZCA9IHRydWU7DQo+ICAgICAgIG10dGNnX2VuYWJsZWQgPSBz LT5tdHRjZ19lbmFibGVkOw0KPiArICAgIGlmIChtdHRjZ19lbmFibGVkID09IE9OX09GRl9B VVRPX0FVVE8pIHsNCj4gKyAgICAgICAgLyoNCj4gKyAgICAgICAgICogV2UgZGVmYXVsdCB0 byBmYWxzZSBpZiB3ZSBrbm93IG90aGVyIG9wdGlvbnMgaGF2ZSBiZWVuIGVuYWJsZWQNCj4g KyAgICAgICAgICogd2hpY2ggYXJlIGN1cnJlbnRseSBpbmNvbXBhdGlibGUgd2l0aCBNVFRD Ry4gT3RoZXJ3aXNlIHdoZW4gZWFjaA0KPiArICAgICAgICAgKiBndWVzdCAodGFyZ2V0KSBo YXMgYmVlbiB1cGRhdGVkIHRvIHN1cHBvcnQ6DQo+ICsgICAgICAgICAqICAgLSBhdG9taWMg aW5zdHJ1Y3Rpb25zDQo+ICsgICAgICAgICAqICAgLSBtZW1vcnkgb3JkZXJpbmcgcHJpbWl0 aXZlcyAoYmFycmllcnMpDQo+ICsgICAgICAgICAqIHRoZXkgY2FuIHNldCB0aGUgYXBwcm9w cmlhdGUgQ09ORklHIGZsYWdzIGluICR7dGFyZ2V0fS1zb2Z0bW11Lm1haw0KPiArICAgICAg ICAgKg0KPiArICAgICAgICAgKiBPbmNlIGEgZ3Vlc3QgYXJjaGl0ZWN0dXJlIGhhcyBiZWVu IGNvbnZlcnRlZCB0byB0aGUgbmV3IHByaW1pdGl2ZXMNCj4gKyAgICAgICAgICogdGhlcmUg aXMgb25lIHJlbWFpbmluZyBsaW1pdGF0aW9uIHRvIGNoZWNrOg0KPiArICAgICAgICAgKiAg IC0gVGhlIGd1ZXN0IGNhbid0IGJlIG92ZXJzaXplZCAoZS5nLiA2NCBiaXQgZ3Vlc3Qgb24g MzIgYml0IGhvc3QpDQo+ICsgICAgICAgICAqLw0KPiArICAgICAgICBpZiAoaWNvdW50X2Vu YWJsZWQoKSkgew0KPiArICAgICAgICAgICAgbXR0Y2dfZW5hYmxlZCA9IE9OX09GRl9BVVRP X09GRjsNCj4gKyAgICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgICAgIG10dGNnX2VuYWJs ZWQgPSBtdHRjZ19zdXBwb3J0ZWQ7DQo+ICsgICAgICAgIH0NCj4gKyAgICB9DQo+ICsgICAg aWYgKG10dGNnX2VuYWJsZWQgPT0gT05fT0ZGX0FVVE9fT04gJiYgIW10dGNnX3N1cHBvcnRl ZCkgew0KPiArICAgICAgICB3YXJuX3JlcG9ydCgiR3Vlc3Qgbm90IHlldCBjb252ZXJ0ZWQg dG8gTVRUQ0cgLSAiDQo+ICsgICAgICAgICAgICAgICAgICAgICJ5b3UgbWF5IGdldCB1bmV4 cGVjdGVkIHJlc3VsdHMiKTsNCj4gKyAgICB9DQo+ICAgDQo+ICAgICAgIHBhZ2VfaW5pdCgp Ow0KPiAgICAgICB0Yl9odGFibGVfaW5pdCgpOw0KPiBAQCAtMTQ0LDcgKzE0Niw3IEBAIHN0 YXRpYyBjaGFyICp0Y2dfZ2V0X3RocmVhZChPYmplY3QgKm9iaiwgRXJyb3IgKiplcnJwKQ0K PiAgIHsNCj4gICAgICAgVENHU3RhdGUgKnMgPSBUQ0dfU1RBVEUob2JqKTsNCj4gICANCj4g LSAgICByZXR1cm4gZ19zdHJkdXAocy0+bXR0Y2dfZW5hYmxlZCA/ICJtdWx0aSIgOiAic2lu Z2xlIik7DQo+ICsgICAgcmV0dXJuIGdfc3RyZHVwKHMtPm10dGNnX2VuYWJsZWQgPT0gT05f T0ZGX0FVVE9fT04gPyAibXVsdGkiIDogInNpbmdsZSIpOw0KPiAgIH0NCj4gICANCj4gICBz dGF0aWMgdm9pZCB0Y2dfc2V0X3RocmVhZChPYmplY3QgKm9iaiwgY29uc3QgY2hhciAqdmFs dWUsIEVycm9yICoqZXJycCkNCj4gQEAgLTE1NSwxNCArMTU3LDEwIEBAIHN0YXRpYyB2b2lk IHRjZ19zZXRfdGhyZWFkKE9iamVjdCAqb2JqLCBjb25zdCBjaGFyICp2YWx1ZSwgRXJyb3Ig KiplcnJwKQ0KPiAgICAgICAgICAgaWYgKGljb3VudF9lbmFibGVkKCkpIHsNCj4gICAgICAg ICAgICAgICBlcnJvcl9zZXRnKGVycnAsICJObyBNVFRDRyB3aGVuIGljb3VudCBpcyBlbmFi bGVkIik7DQo+ICAgICAgICAgICB9IGVsc2Ugew0KPiAtI2lmbmRlZiBUQVJHRVRfU1VQUE9S VFNfTVRUQ0cNCj4gLSAgICAgICAgICAgIHdhcm5fcmVwb3J0KCJHdWVzdCBub3QgeWV0IGNv bnZlcnRlZCB0byBNVFRDRyAtICINCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICJ5b3Ug bWF5IGdldCB1bmV4cGVjdGVkIHJlc3VsdHMiKTsNCj4gLSNlbmRpZg0KPiAtICAgICAgICAg ICAgcy0+bXR0Y2dfZW5hYmxlZCA9IHRydWU7DQo+ICsgICAgICAgICAgICBzLT5tdHRjZ19l bmFibGVkID0gT05fT0ZGX0FVVE9fT047DQo+ICAgICAgICAgICB9DQo+ICAgICAgIH0gZWxz ZSBpZiAoc3RyY21wKHZhbHVlLCAic2luZ2xlIikgPT0gMCkgew0KPiAtICAgICAgICBzLT5t dHRjZ19lbmFibGVkID0gZmFsc2U7DQo+ICsgICAgICAgIHMtPm10dGNnX2VuYWJsZWQgPSBP Tl9PRkZfQVVUT19PRkY7DQo+ICAgICAgIH0gZWxzZSB7DQo+ICAgICAgICAgICBlcnJvcl9z ZXRnKGVycnAsICJJbnZhbGlkICd0aHJlYWQnIHNldHRpbmcgJXMiLCB2YWx1ZSk7DQo+ICAg ICAgIH0NCg0KV2hhdCBhcmUgd2UgZ2FpbmluZyBieSBtb3ZpbmcgdGhpcyB3YXJuaW5nPw0K QXJlIHRoZXJlIGNhc2VzIHdoZXJlIGl0IHdhcyBub3QgcmVwb3J0ZWQgYmVmb3JlPw0K