From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AD42812880A for ; Mon, 26 Feb 2024 14:19:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.41 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708957146; cv=none; b=BRnzaTpsPn0fvOzkiexRgA3pka8gYhLA9Tw84IfW5EyB1i6vN0v4KEihoFmv9apdUnyDkNTT5CdmZHQI7AdpSNsca2LDY1seF2W5xrNLVXPdgD1zT5RUjpXXuK2Nkl6RCr5jshhuJ9ByeEMZ/phq8sTWuOPM2CDEVYu6Nm8Dkpo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708957146; c=relaxed/simple; bh=G4XBBEq03XlPZBzlU4Ah4X9LDm3fiTWJHJycT/zZUeA=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=NZ4FzBLOhJlTCRklaZgGRm5WeBXNNgM6RL7yj4Qx4vU8Lsy1a4pV/E5AwOSjTiecK5PnwFMnbnnNQPDMzt5kFp9ObkKnFV1dbyFN+j1PWHFuJcQ3yxJiTgPVfCOnzQfQwIOUnuWHyVTfzFJ340W1WbJkb1jthIh76dzoQJs6tj0= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=dVHue20P; arc=none smtp.client-ip=209.85.128.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="dVHue20P" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-412a3903586so8602965e9.3 for ; Mon, 26 Feb 2024 06:19:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1708957143; x=1709561943; darn=lists.linux.dev; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=zU9gWhI8YTP8O4Ezh9O8H/Onb4RDBW/HUckw6weGVNA=; b=dVHue20PotCfBpCm3ERYNB4Bi4rhlYe4ZojnrizdSVtxGeJImqrcmVgNWmfJl3leSo 8ZvZBwt8qOjB0IaZShIjmN/m2qUlypMXlXsCCJ4Mk4LEZbtTlSFcH+E+iYI51T1J70g1 4IWIxGmGDSwp0du0A1Xo67eJMVWt0X0P8Hvl7/TwXUj2/ChFgT1UWWU51EzDGFhrzbN5 MZ2QfMF4BKEbm1d3pEYW63yxGsfs3PGa807P7gXaHblvjyiUi/3g1xKyTZBMFiacaFj6 aJ5P/46VFZNjZnwpuwJPANK+z7xCWNNiXKl1L43UZ7IOcG9dGJ7o60voIwnB5efgoolP LSfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1708957143; x=1709561943; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=zU9gWhI8YTP8O4Ezh9O8H/Onb4RDBW/HUckw6weGVNA=; b=DW5j9DbbS0pLQz/41knA3bCyaCL1sei4+KL00zxN65P08iYKTm1sV4Dx5ji4z70Qub ajWtmkDNcUNxJiw6ftod6x1QKFnVxV0G2B73bgkLfT4XXfheXsE80TNtXL1/yAJfDo3/ 0xymwjJ4efV1ah8cs61IiReIcUMyoUKwGhpRjESqh6CIR6JU+rrTvw1+jdGpC8JDSf6j RKhr+TCIYYCUBor5fj4pYKeOYXd4gEcmhzZ/0u3u1U5AAXcyt+vW+Pr//SbHbhKuBrQC eUvpnKzsYsG+f82BYHBwDDckVoKzvTgndtWVnCO1coerq0zPQA/TscdajxG7qonSR6Om u3sQ== X-Forwarded-Encrypted: i=1; AJvYcCX9vbWMgW25JxIN+ejlW+HhT705a7DJJAzAk7QOIwUE5ssQBGUrh2gbx3diyzP23wKLntIHy63gsFjelbSRnED03oNrR6VC X-Gm-Message-State: AOJu0YwlpgP9u+FdMs0GojzvbecbRiUZH/5zaqbPgcEfuYUGm1v8h8PR dkCt2Pr6FN20qJrbK9YDvxAZcu2JUT083mNkZKSFHdHL/nCmcTS3y2EiCYeQ6IM= X-Google-Smtp-Source: AGHT+IHzzvgW8Msmz96TO0YqlIxP9hO9Z+i87SeD3gDrTADwH6etGKaustJAeoEB7ymtgh99PSfMOA== X-Received: by 2002:adf:ef87:0:b0:33d:942f:6784 with SMTP id d7-20020adfef87000000b0033d942f6784mr4978622wro.57.1708957143064; Mon, 26 Feb 2024 06:19:03 -0800 (PST) Received: from myrica ([2.221.137.100]) by smtp.gmail.com with ESMTPSA id q8-20020a7bce88000000b004101543e843sm12070934wmj.10.2024.02.26.06.19.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Feb 2024 06:19:02 -0800 (PST) Date: Mon, 26 Feb 2024 14:18:39 +0000 From: Jean-Philippe Brucker To: Mostafa Saleh Cc: maz@kernel.org, catalin.marinas@arm.com, will@kernel.org, joro@8bytes.org, robin.murphy@arm.com, james.morse@arm.com, suzuki.poulose@arm.com, oliver.upton@linux.dev, yuzenghui@huawei.com, dbrazdil@google.com, ryan.roberts@arm.com, linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, iommu@lists.linux.dev, Daniel Mentz Subject: Re: [RFC PATCH 27/45] KVM: arm64: smmu-v3: Setup domains and page table configuration Message-ID: <20240226141839.GD1579460@myrica> References: <20230201125328.2186498-1-jean-philippe@linaro.org> <20230201125328.2186498-28-jean-philippe@linaro.org> <20240123195053.GC40099@myrica> Precedence: bulk X-Mailing-List: kvmarm@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: On Fri, Feb 16, 2024 at 12:11:48PM +0000, Mostafa Saleh wrote: > On Tue, Jan 23, 2024 at 7:50 PM Jean-Philippe Brucker > wrote: > > > > On Mon, Jan 15, 2024 at 02:34:12PM +0000, Mostafa Saleh wrote: > > > > +static void smmu_tlb_inv_range(struct kvm_iommu_tlb_cookie *data, > > > > + unsigned long iova, size_t size, size_t granule, > > > > + bool leaf) > > > > +{ > > > > + struct hyp_arm_smmu_v3_device *smmu = to_smmu(data->iommu); > > > > + unsigned long end = iova + size; > > > > + struct arm_smmu_cmdq_ent cmd = { > > > > + .opcode = CMDQ_OP_TLBI_S2_IPA, > > > > + .tlbi.vmid = data->domain_id, > > > > + .tlbi.leaf = leaf, > > > > + }; > > > > + > > > > + /* > > > > + * There are no mappings at high addresses since we don't use TTB1, so > > > > + * no overflow possible. > > > > + */ > > > > + BUG_ON(end < iova); > > > > + > > > > + while (iova < end) { > > > > + cmd.tlbi.addr = iova; > > > > + WARN_ON(smmu_send_cmd(smmu, &cmd)); > > > > > > This would issue a sync command between each range, which is not needed, > > > maybe we can build the command first and then issue the sync, similar > > > to what the upstream driver does, what do you think? > > > > Yes, moving the sync out of the loop would be better. To keep things > > simple I'd just replace this with smmu_add_cmd() and add a smmu_sync_cmd() > > at the end, but maybe some implementations won't consume the TLBI itself > > fast enough, and we need to build a command list in software. Do you think > > smmu_add_cmd() is sufficient here? > > Replacing this with smmu_add_cmd makes sense. > We only poll the queue at SYNC, which is the last command, so it > doesn't matter the pace > of the TLBI consumption I believe? Yes only smmu_sync_cmd() waits for consumption (unless the queue is full when we attempt to add a cmd). And submitting the TLBIs early could allow the hardware to do some processing while we prepare the next commands, but I don't know if it actually works that way. > > One advantage of building the command list first, is that we also > avoid MMIO access for the queue which can be slow. Yes, I'm curious about the overhead of MMIO on some of these platforms. Maybe we should do some software batching if you're able to measure a performance impact from reading and writing CMDQ indices, but I suspect the map/unmap context switches completely overshadow it at the moment. Thanks, Jean 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (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 46EDAC54E41 for ; Mon, 26 Feb 2024 14:19:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=nteoQBX3lIMRQ7k7One1MJ9DDuWV3N4xCMnYOVy+qG4=; b=zSo5mH8GyApHEV 6IWnQp1RqydBpHeZp8aUivaZhEYg8T6QZ2P1lqi09+jiZ9Y8+LndLLongGeuJtAXJUVoe1LX9CTd8 voZU06RseVL4NieuQ1VTFnFTID+vbagfS2nATbl1YurgHNzRPvvB2vZRiliRso3DrRw26SrI2QgG6 Om8MfEwOKYs4hJdpkdvemFDcktiD37Ygg1x/9lHM+UC6lJoNLF58URiUXnqAIaZOEd2xGq8OQahD6 /tzb1XiukEo8AoxP8cZRYGfIqtK6Uw9fJY3/Mi8zC1Z4OKtbo3sITSC2Kyktot5lKeHzlqdIHqL1U Sfc8DxV8/qQi9nzam6wg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rebox-000000015PC-1p0k; Mon, 26 Feb 2024 14:19:07 +0000 Received: from mail-wm1-x331.google.com ([2a00:1450:4864:20::331]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rebov-000000015Ol-06q2 for linux-arm-kernel@lists.infradead.org; Mon, 26 Feb 2024 14:19:06 +0000 Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-412a8b79b46so2914135e9.1 for ; Mon, 26 Feb 2024 06:19:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1708957143; x=1709561943; darn=lists.infradead.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=zU9gWhI8YTP8O4Ezh9O8H/Onb4RDBW/HUckw6weGVNA=; b=jP70g9iVrl/dOoo19QaVXHkjzMUcz+dkVr6zYleYWFHEpgRZa80Gyk2gXIx2OCIGun yxXx3yH9RAs/GG4Mql2gwUOmIcUbO2e0KbwvI/hPZUztj1KCxWK5Zo5usaNmXp2JzoLt eBsk/W6VZgPs/gqOqqvbOcsuWLV+nkC3asvBfcQ8LUtH/eO2ktjeoRkVs3m+fa8xvSUb X8/ZiJQBwpNCNYRqSN6WXeEgwp5EwM17eIF+JCltU6cRsyxcUYNh5NLxPvcU5u1U02vV RXu+cpf8VT/BMu+w55ZyAPSGsBBwRGsCioZ8qawG+F02A8fGc4v/v00NsnS1jZPpn9AA ZnJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1708957143; x=1709561943; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=zU9gWhI8YTP8O4Ezh9O8H/Onb4RDBW/HUckw6weGVNA=; b=A3hWTM7JndsR49RUUosBi3BKkFo4cNGYvxF0sMk0yDRz2FdfjVIByOD/JQ7gcMLSny WIao588YwIt2KMHDkyAkhMve0FF3UijfpKBw9rq3I3+bUuTNVR2VDqfpi1CYkXWM8+mi B68ItE5IKQv87XDfj4utvqzQZuZ/DaitqAQaltnyDbExw7PUDbGFoulHsNF9p1e5PIyy 6IWNN6i9KOXPyZ77uLMRFzixlPQKbidxbP9P57951FvWLjZ6hG+bBJ/GiLdbYz0ithKk lv6ZZwzO7x+kPgA2XmUTumueu19UoJqR88UgXmHcHl5DsNQ1n2UwENdetDyC8iQ4lu76 /wmQ== X-Forwarded-Encrypted: i=1; AJvYcCWjVXjFXfas3dvVQv37i1lsM3B+R2ZFQi/P0D5LI4ukVSyhk+hH2/1I5OWG9n6x3nx9zHIPeVhWyABdKGKzPRx1pVVIhjRfMCbSOyQeqaa1Y9qg+xM= X-Gm-Message-State: AOJu0YxDVkp9Odyl/9wsdSvJK2AcsMPa/sORJqAU4IJrr8rG4doXSLyP 5uLe4lWoCQnNAV7MtQmkkbzZ0gj/vbusZGEgjfB7ByNDg1afUwKbNrnFz/WsGaYUVw/+KC8WdBS s X-Google-Smtp-Source: AGHT+IHzzvgW8Msmz96TO0YqlIxP9hO9Z+i87SeD3gDrTADwH6etGKaustJAeoEB7ymtgh99PSfMOA== X-Received: by 2002:adf:ef87:0:b0:33d:942f:6784 with SMTP id d7-20020adfef87000000b0033d942f6784mr4978622wro.57.1708957143064; Mon, 26 Feb 2024 06:19:03 -0800 (PST) Received: from myrica ([2.221.137.100]) by smtp.gmail.com with ESMTPSA id q8-20020a7bce88000000b004101543e843sm12070934wmj.10.2024.02.26.06.19.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Feb 2024 06:19:02 -0800 (PST) Date: Mon, 26 Feb 2024 14:18:39 +0000 From: Jean-Philippe Brucker To: Mostafa Saleh Cc: maz@kernel.org, catalin.marinas@arm.com, will@kernel.org, joro@8bytes.org, robin.murphy@arm.com, james.morse@arm.com, suzuki.poulose@arm.com, oliver.upton@linux.dev, yuzenghui@huawei.com, dbrazdil@google.com, ryan.roberts@arm.com, linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, iommu@lists.linux.dev, Daniel Mentz Subject: Re: [RFC PATCH 27/45] KVM: arm64: smmu-v3: Setup domains and page table configuration Message-ID: <20240226141839.GD1579460@myrica> References: <20230201125328.2186498-1-jean-philippe@linaro.org> <20230201125328.2186498-28-jean-philippe@linaro.org> <20240123195053.GC40099@myrica> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240226_061905_109180_8B4700A3 X-CRM114-Status: GOOD ( 30.56 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gRnJpLCBGZWIgMTYsIDIwMjQgYXQgMTI6MTE6NDhQTSArMDAwMCwgTW9zdGFmYSBTYWxlaCB3 cm90ZToKPiBPbiBUdWUsIEphbiAyMywgMjAyNCBhdCA3OjUw4oCvUE0gSmVhbi1QaGlsaXBwZSBC cnVja2VyCj4gPGplYW4tcGhpbGlwcGVAbGluYXJvLm9yZz4gd3JvdGU6Cj4gPgo+ID4gT24gTW9u LCBKYW4gMTUsIDIwMjQgYXQgMDI6MzQ6MTJQTSArMDAwMCwgTW9zdGFmYSBTYWxlaCB3cm90ZToK PiA+ID4gPiArc3RhdGljIHZvaWQgc21tdV90bGJfaW52X3JhbmdlKHN0cnVjdCBrdm1faW9tbXVf dGxiX2Nvb2tpZSAqZGF0YSwKPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgbG9uZyBpb3ZhLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IGdyYW51bGUsCj4gPiA+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbGVhZikKPiA+ID4gPiArewo+ID4g PiA+ICsgICAgICAgc3RydWN0IGh5cF9hcm1fc21tdV92M19kZXZpY2UgKnNtbXUgPSB0b19zbW11 KGRhdGEtPmlvbW11KTsKPiA+ID4gPiArICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kID0gaW92YSAr IHNpemU7Cj4gPiA+ID4gKyAgICAgICBzdHJ1Y3QgYXJtX3NtbXVfY21kcV9lbnQgY21kID0gewo+ ID4gPiA+ICsgICAgICAgICAgICAgICAub3Bjb2RlID0gQ01EUV9PUF9UTEJJX1MyX0lQQSwKPiA+ ID4gPiArICAgICAgICAgICAgICAgLnRsYmkudm1pZCA9IGRhdGEtPmRvbWFpbl9pZCwKPiA+ID4g PiArICAgICAgICAgICAgICAgLnRsYmkubGVhZiA9IGxlYWYsCj4gPiA+ID4gKyAgICAgICB9Owo+ ID4gPiA+ICsKPiA+ID4gPiArICAgICAgIC8qCj4gPiA+ID4gKyAgICAgICAgKiBUaGVyZSBhcmUg bm8gbWFwcGluZ3MgYXQgaGlnaCBhZGRyZXNzZXMgc2luY2Ugd2UgZG9uJ3QgdXNlIFRUQjEsIHNv Cj4gPiA+ID4gKyAgICAgICAgKiBubyBvdmVyZmxvdyBwb3NzaWJsZS4KPiA+ID4gPiArICAgICAg ICAqLwo+ID4gPiA+ICsgICAgICAgQlVHX09OKGVuZCA8IGlvdmEpOwo+ID4gPiA+ICsKPiA+ID4g PiArICAgICAgIHdoaWxlIChpb3ZhIDwgZW5kKSB7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIGNt ZC50bGJpLmFkZHIgPSBpb3ZhOwo+ID4gPiA+ICsgICAgICAgICAgICAgICBXQVJOX09OKHNtbXVf c2VuZF9jbWQoc21tdSwgJmNtZCkpOwo+ID4gPgo+ID4gPiBUaGlzIHdvdWxkIGlzc3VlIGEgc3lu YyBjb21tYW5kIGJldHdlZW4gZWFjaCByYW5nZSwgd2hpY2ggaXMgbm90IG5lZWRlZCwKPiA+ID4g bWF5YmUgd2UgY2FuIGJ1aWxkIHRoZSBjb21tYW5kIGZpcnN0IGFuZCB0aGVuIGlzc3VlIHRoZSBz eW5jLCBzaW1pbGFyCj4gPiA+IHRvIHdoYXQgdGhlIHVwc3RyZWFtIGRyaXZlciBkb2VzLCB3aGF0 IGRvIHlvdSB0aGluaz8KPiA+Cj4gPiBZZXMsIG1vdmluZyB0aGUgc3luYyBvdXQgb2YgdGhlIGxv b3Agd291bGQgYmUgYmV0dGVyLiBUbyBrZWVwIHRoaW5ncwo+ID4gc2ltcGxlIEknZCBqdXN0IHJl cGxhY2UgdGhpcyB3aXRoIHNtbXVfYWRkX2NtZCgpIGFuZCBhZGQgYSBzbW11X3N5bmNfY21kKCkK PiA+IGF0IHRoZSBlbmQsIGJ1dCBtYXliZSBzb21lIGltcGxlbWVudGF0aW9ucyB3b24ndCBjb25z dW1lIHRoZSBUTEJJIGl0c2VsZgo+ID4gZmFzdCBlbm91Z2gsIGFuZCB3ZSBuZWVkIHRvIGJ1aWxk IGEgY29tbWFuZCBsaXN0IGluIHNvZnR3YXJlLiBEbyB5b3UgdGhpbmsKPiA+IHNtbXVfYWRkX2Nt ZCgpIGlzIHN1ZmZpY2llbnQgaGVyZT8KPiAKPiBSZXBsYWNpbmcgdGhpcyB3aXRoIHNtbXVfYWRk X2NtZCBtYWtlcyBzZW5zZS4KPiBXZSBvbmx5IHBvbGwgdGhlIHF1ZXVlIGF0IFNZTkMsIHdoaWNo IGlzIHRoZSBsYXN0IGNvbW1hbmQsIHNvIGl0Cj4gZG9lc24ndCBtYXR0ZXIgdGhlIHBhY2UKPiBv ZiB0aGUgVExCSSBjb25zdW1wdGlvbiBJIGJlbGlldmU/CgpZZXMgb25seSBzbW11X3N5bmNfY21k KCkgd2FpdHMgZm9yIGNvbnN1bXB0aW9uICh1bmxlc3MgdGhlIHF1ZXVlIGlzIGZ1bGwKd2hlbiB3 ZSBhdHRlbXB0IHRvIGFkZCBhIGNtZCkuIEFuZCBzdWJtaXR0aW5nIHRoZSBUTEJJcyBlYXJseSBj b3VsZCBhbGxvdwp0aGUgaGFyZHdhcmUgdG8gZG8gc29tZSBwcm9jZXNzaW5nIHdoaWxlIHdlIHBy ZXBhcmUgdGhlIG5leHQgY29tbWFuZHMsIGJ1dApJIGRvbid0IGtub3cgaWYgaXQgYWN0dWFsbHkg d29ya3MgdGhhdCB3YXkuCgo+IAo+IE9uZSBhZHZhbnRhZ2Ugb2YgYnVpbGRpbmcgdGhlIGNvbW1h bmQgbGlzdCBmaXJzdCwgaXMgdGhhdCB3ZSBhbHNvCj4gYXZvaWQgTU1JTyBhY2Nlc3MgZm9yIHRo ZSBxdWV1ZSB3aGljaCBjYW4gYmUgc2xvdy4KClllcywgSSdtIGN1cmlvdXMgYWJvdXQgdGhlIG92 ZXJoZWFkIG9mIE1NSU8gb24gc29tZSBvZiB0aGVzZSBwbGF0Zm9ybXMuCk1heWJlIHdlIHNob3Vs ZCBkbyBzb21lIHNvZnR3YXJlIGJhdGNoaW5nIGlmIHlvdSdyZSBhYmxlIHRvIG1lYXN1cmUgYQpw ZXJmb3JtYW5jZSBpbXBhY3QgZnJvbSByZWFkaW5nIGFuZCB3cml0aW5nIENNRFEgaW5kaWNlcywg YnV0IEkgc3VzcGVjdAp0aGUgbWFwL3VubWFwIGNvbnRleHQgc3dpdGNoZXMgY29tcGxldGVseSBv dmVyc2hhZG93IGl0IGF0IHRoZSBtb21lbnQuCgpUaGFua3MsCkplYW4KCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGlu ZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMu aW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK