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 6C12CC77B60 for ; Tue, 28 Mar 2023 20:20:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229762AbjC1UUM (ORCPT ); Tue, 28 Mar 2023 16:20:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39740 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229532AbjC1UUJ (ORCPT ); Tue, 28 Mar 2023 16:20:09 -0400 Received: from mail-yb1-xb32.google.com (mail-yb1-xb32.google.com [IPv6:2607:f8b0:4864:20::b32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3AC6040EF for ; Tue, 28 Mar 2023 13:20:07 -0700 (PDT) Received: by mail-yb1-xb32.google.com with SMTP id b18so16751467ybp.1 for ; Tue, 28 Mar 2023 13:20:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=paul-moore.com; s=google; t=1680034806; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=YTUjsnH0pjAMPCdWUs8KgtrmbEQ7uRQfh39xHtc1mOI=; b=ZISzzUBAp2B86WTvie3LaaTm+XXMV1NsBYT+ss9Ay2P2TZV18c736vvSEzIoAMgiAD yyMfrBITnvGzSe0zitTngdlv9FE5B7kqtcVHa5dUfi5qBhCuM018z5BcpYSoI7bEVt2z ZC3kowL2cQRNQzFOhwJRwPeyH2MQqrp8NURsIr5JDzQpyL3WseVUnD7mAC626z6TQglg UoOeDKCOiKNAkc7HGHrpOlFtTEimlh5Dg4uX3bQo4lcrs02hnNHTYJq/Kw3dPuYr2VQI hXkP49aeyOtDyuAYueE49r0lldY98MycnxQ5Y1KBuHU/CwgwrBTDgx/qGu38MPY3mDw7 CiGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680034806; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YTUjsnH0pjAMPCdWUs8KgtrmbEQ7uRQfh39xHtc1mOI=; b=DO7FMQE2CzTVHJflFrH53n1SFwa+/OS8uHLLaDweDkMteumDwlpn2dDOVfBPRyYrpN wC5A1mGIlG+x+nsnkfygRZxBTLPaSMhCNlxxVHALXYsDUJR9AmLNR6TxqvSYryhHlo9M ChH5vmlzU6H6cHXC4e7QTtdCINR3wFbX5GLVd0LcC6QHSH7m+V70/GFFux4vigUY7vFn MDey5IXPOu7aHKXMNeovv0EWE9WPcwQt2zf/JgNJhjeAhLd2ewVEA4aEX3dpadQi/+lo vggk9L6RfV/BnYqlOt2DSFf6hhOsoV42P+OVygb/yG8XW5PkmD5hB+ftSUwVHFtAxz6A xwiA== X-Gm-Message-State: AAQBX9f0af9qK9eNMqA010sf9/AvvUulqo1YM/QWThF6X6a0ybiihIiI vCjd2FYULFIkoPD4cFh+c+rIIBl1jvWeCaXZOPJT X-Google-Smtp-Source: AKy350ZEFOCwjRsMkv4tCJSQFPlfwfLVNNFZyIK63atBOV/sH54NXrYaRWqhboUJbp5+ys+9+LucpxgK3fri3wARgIs= X-Received: by 2002:a05:6902:102a:b0:b71:f49f:8d22 with SMTP id x10-20020a056902102a00b00b71f49f8d22mr8605060ybt.3.1680034806304; Tue, 28 Mar 2023 13:20:06 -0700 (PDT) MIME-Version: 1.0 References: <20230314081720.4158676-1-roberto.sassu@huaweicloud.com> <20230314081720.4158676-5-roberto.sassu@huaweicloud.com> <939e6c88662ad90b963993c4cc1b702083e74a7a.camel@huaweicloud.com> <8b63d00d8ac3f686e51889ea4fc8d83f8ecb300d.camel@huaweicloud.com> <1e08006f9011efa48deaf656c358ca3d438b9768.camel@huaweicloud.com> In-Reply-To: <1e08006f9011efa48deaf656c358ca3d438b9768.camel@huaweicloud.com> From: Paul Moore Date: Tue, 28 Mar 2023 16:19:55 -0400 Message-ID: Subject: Re: [PATCH v8 4/6] security: Allow all LSMs to provide xattrs for inode_init_security hook To: Roberto Sassu Cc: mark@fasheh.com, jlbec@evilplan.org, joseph.qi@linux.alibaba.com, zohar@linux.ibm.com, dmitry.kasatkin@gmail.com, jmorris@namei.org, serge@hallyn.com, stephen.smalley.work@gmail.com, eparis@parisplace.org, casey@schaufler-ca.com, ocfs2-devel@oss.oracle.com, reiserfs-devel@vger.kernel.org, linux-integrity@vger.kernel.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, linux-kernel@vger.kernel.org, keescook@chromium.org, nicolas.bouchinet@clip-os.org, Roberto Sassu Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Mar 28, 2023 at 3:47=E2=80=AFAM Roberto Sassu wrote: > > On Mon, 2023-03-27 at 17:02 -0400, Paul Moore wrote: > > On Mon, Mar 27, 2023 at 3:30=E2=80=AFAM Roberto Sassu > > wrote: > > > On Fri, 2023-03-24 at 17:39 -0400, Paul Moore wrote: > > > > On Fri, Mar 24, 2023 at 9:26=E2=80=AFAM Roberto Sassu > > > > wrote: > > > > > On Fri, 2023-03-24 at 11:18 +0100, Roberto Sassu wrote: > > > > > > On Thu, 2023-03-23 at 20:09 -0400, Paul Moore wrote: > > > > > > > On Tue, Mar 14, 2023 at 4:19=E2=80=AFAM Roberto Sassu > > > > > > > wrote: > > > > > > > > From: Roberto Sassu ... > > Okay, that's fair, but we could still pass the full xattrs array and a > > reference to the current count which could be both read and updated by > > the individual LSMs, right? > > Yes, we could do. > > > The issue is that the separate compaction stage is not something we > > want to have to do if we can avoid it. Maybe we're stuck with it, but > > I'm not yet convinced that we can't make some minor changes to the > > LSMs to avoid the compaction step. > > I liked more the idea that LSMs do what they are most familiar with, > get an offset in a security blob or, in this case, a starting slot in > the new_xattrs array, and write there. > > v3 had the lsm_find_xattr_slot() helper, to get the starting slot, but > somehow I find it less intuitive. > > Ok, if you prefer to avoid the compaction stage, I will rewrite this > patch. My concern is having to look through the xattr array after each LSM has been run and in at least one case having to then do a memcpy() to keep the array packed. There are some cases where there is no way to avoid all that extra work, but here I think we have the LSMs do the Right Thing with respect to packing the xattr array without overly burdening the individual LSMs. Does that make sense? It basically comes down to being smart about our abstractions and both selectively, and carefully, breaking them when there is a reasonable performance gain to be had. --=20 paul-moore.com 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 aib29ajc246.phx1.oracleemaildelivery.com (aib29ajc246.phx1.oracleemaildelivery.com [192.29.103.246]) (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 EA5A0C6FD18 for ; Tue, 28 Mar 2023 20:20:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; s=oss-phx-1109; d=oss.oracle.com; h=Date:To:From:Subject:Message-Id:MIME-Version:Sender; bh=4KdoTOdH6ef+lDPQE4jos8nzN+ESPcAPYv4taKcx9ac=; b=wSHnyw1i54mq1waNo7Q7YfbGtU2dXSkORQmP4TC03htUqgIH2yGUFpiUFbhRuz9e2rtgTX/U1CVT AdKGUCgQzMr/f+bBIXUmOLn/7Kk6Ap5aD3fE96Yf8GSNDsOausQ4dsEUfB9EdgZIGorV3BQMmi8x 5L9xIUtV1xzeADQv/tkof80fXw+4J4iJUiUQxZJ6nUf4Ux1ORmKkULMh8B8LykGhwITRDUhmRwOl B/6GfxpyGk1btdBvyzLjBxqSakrNWIxJmlW2U4KsBCb1LbcMkfqL02AzLyPDtJ/p2IIYUa983jZD OsOH2PbvUQoK8HpTAwBjC5+sRqfp/jOT81gCpA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; s=prod-phx-20191217; d=phx1.rp.oracleemaildelivery.com; h=Date:To:From:Subject:Message-Id:MIME-Version:Sender; bh=4KdoTOdH6ef+lDPQE4jos8nzN+ESPcAPYv4taKcx9ac=; b=UNkj9GQhvjJ6cPhj0DannQ7vaMirBJJ3Z7U7+pt5aXfROkq3QhdQULdhOgtUDf6OdnCT4iSq+pSW zaug447hgMuJ2Q0oqnF9Gc68y+Nu3f1E439ajBCnWMU2xbCvxZ92Y6NWVIufOhiqwfofSeDKXAdv 5p6TAtkdsskLdHgb6ExvjdD6+wZno0T4F+Xgrja83mLW+fhiI/0buTRd1zZqgREbBkMGuahEoSE/ JJJwqWvDQ4yFAiDkDY4qhb3K9DtTYJJGCULqn+EW/5F1ZR7MFXMK0I9hqiVG4aeAkCBimKbysymf CXTO2j+rL7WAZOFTBI6klapehgxiMOS03SILTA== Received: by omta-ad1-fd3-101-us-phoenix-1.omtaad1.vcndpphx.oraclevcn.com (Oracle Communications Messaging Server 8.1.0.1.20230317 64bit (built Mar 17 2023)) with ESMTPS id <0RS800GB5Z5U7J80@omta-ad1-fd3-101-us-phoenix-1.omtaad1.vcndpphx.oraclevcn.com> for ocfs2-devel@archiver.kernel.org; Tue, 28 Mar 2023 20:20:18 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=paul-moore.com; s=google; t=1680034806; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=YTUjsnH0pjAMPCdWUs8KgtrmbEQ7uRQfh39xHtc1mOI=; b=ZISzzUBAp2B86WTvie3LaaTm+XXMV1NsBYT+ss9Ay2P2TZV18c736vvSEzIoAMgiAD yyMfrBITnvGzSe0zitTngdlv9FE5B7kqtcVHa5dUfi5qBhCuM018z5BcpYSoI7bEVt2z ZC3kowL2cQRNQzFOhwJRwPeyH2MQqrp8NURsIr5JDzQpyL3WseVUnD7mAC626z6TQglg UoOeDKCOiKNAkc7HGHrpOlFtTEimlh5Dg4uX3bQo4lcrs02hnNHTYJq/Kw3dPuYr2VQI hXkP49aeyOtDyuAYueE49r0lldY98MycnxQ5Y1KBuHU/CwgwrBTDgx/qGu38MPY3mDw7 CiGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680034806; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YTUjsnH0pjAMPCdWUs8KgtrmbEQ7uRQfh39xHtc1mOI=; b=Z7BTuTDlO/oelxIuFiy1PWANZyeUgRijiVgYvlxQcNFb9rh20Hrrm1mI0HAHjU68hB fN8bZhwoRq5HWL9vlVO/69WQG4kBnEoJTziRgyfliEYOpHJLSUC8NaHQOO1eYRFalaXt PjSeHkQUoiZ0crk92r4RXObPj1ZHFfK12bXV+QqwoTCT9B10XLBjPhsD1nss/WFlDHOG 30butzJ7/yHejZfxAVZJX2i/m6cKVm8dI/MFEPLH7UgPvPNlapOF35HxS3s9fW5qpuof GlOXSof8Db/E00+GDxBVY5ArOAH+pT8VZmfYB85dDl96XV7izfb4Gk/EOsEpRVliilSY /YgQ== X-Gm-Message-State: AAQBX9fLNRlt2i29MHdE8uX8LaJgdNTwEzwhTIbExuQLA+SOq38cyQDG IKYoU6tSM7+TAYL6OrVGohaYSw+8x8PxqH9+PgHp X-Received: by 2002:a05:6902:102a:b0:b71:f49f:8d22 with SMTP id x10-20020a056902102a00b00b71f49f8d22mr8605060ybt.3.1680034806304; Tue, 28 Mar 2023 13:20:06 -0700 (PDT) MIME-version: 1.0 References: <20230314081720.4158676-1-roberto.sassu@huaweicloud.com> <20230314081720.4158676-5-roberto.sassu@huaweicloud.com> <939e6c88662ad90b963993c4cc1b702083e74a7a.camel@huaweicloud.com> <8b63d00d8ac3f686e51889ea4fc8d83f8ecb300d.camel@huaweicloud.com> <1e08006f9011efa48deaf656c358ca3d438b9768.camel@huaweicloud.com> In-reply-to: <1e08006f9011efa48deaf656c358ca3d438b9768.camel@huaweicloud.com> Date: Tue, 28 Mar 2023 16:19:55 -0400 Message-id: To: Roberto Sassu X-Source-IP: 209.85.219.172 X-Proofpoint-Virus-Version: vendor=nai engine=6500 definitions=10663 signatures=596816 X-Proofpoint-Spam-Details: rule=tap_notspam policy=tap score=0 adultscore=0 bulkscore=0 priorityscore=60 suspectscore=0 mlxscore=0 spamscore=0 mlxlogscore=767 lowpriorityscore=0 phishscore=0 impostorscore=0 clxscore=178 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2303200000 definitions=main-2303280156 Cc: nicolas.bouchinet@clip-os.org, linux-kernel@vger.kernel.org, keescook@chromium.org, selinux@vger.kernel.org, dmitry.kasatkin@gmail.com, Roberto Sassu , jmorris@namei.org, zohar@linux.ibm.com, reiserfs-devel@vger.kernel.org, linux-security-module@vger.kernel.org, casey@schaufler-ca.com, eparis@parisplace.org, linux-integrity@vger.kernel.org, stephen.smalley.work@gmail.com, ocfs2-devel@oss.oracle.com, serge@hallyn.com Subject: Re: [Ocfs2-devel] [PATCH v8 4/6] security: Allow all LSMs to provide xattrs for inode_init_security hook X-BeenThere: ocfs2-devel@oss.oracle.com X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Paul Moore via Ocfs2-devel Reply-to: Paul Moore Content-type: text/plain; charset="utf-8" Content-transfer-encoding: base64 Errors-to: ocfs2-devel-bounces@oss.oracle.com X-Google-Smtp-Source: AKy350ZEFOCwjRsMkv4tCJSQFPlfwfLVNNFZyIK63atBOV/sH54NXrYaRWqhboUJbp5+ys+9+LucpxgK3fri3wARgIs= X-ServerName: mail-yb1-f172.google.com X-Proofpoint-SPF-Result: pass X-Proofpoint-SPF-Record: v=spf1 include:_spf.google.com ~all X-Spam: Clean X-Proofpoint-GUID: tu9IPTj9ujAI-sJ7j-8wXJSfhcJPs4dl X-Proofpoint-ORIG-GUID: tu9IPTj9ujAI-sJ7j-8wXJSfhcJPs4dl Reporting-Meta: AAGWbReQSnwFyn7Tgnq+ar6Dc6bfIBlpc9Lyw32mjAsyk8dlklvmhNOEyxhfq6ew bbY6iPic910SXCP4w4YA8M7I9oRMoWK1JlIXaUOBztNFCTaRnrFCEOMsfWoULgbD 5LUyqR08bV2vipqFtjyBsfHC6G4DzFItgzUXkjNnNpt6VzqjNlPimz9mpuXj1d4H 881oNa/biGiOn0aWNFmnHpeEo1EU1FDYKZVRBQx5vP1YHEJBpejor5f5AEe0p1fo l70i231HIyzt/iAyGFcLFzllGsPtPthwfZlHENosGSHZHIC1rO+1ampNErFf9m/Y Mjlhp2h13CZS6ZHLKZFAD+mrYLeqqrTA3D54pfcvmM2p5vqUNBhO4iEZ3XX0FpUY ut4rpoiZ07vQzM2AcRXWE3SjoHGpCxSDiHX+nhiZJp0yq+Ju1tSesXxHdFgZ9/Z8 NmmF6kjsNHwFTrQBjYQ5Kn40CjdWy+4fwygiAI/uxKQ4Zacm7oGRAVPBvLamt90U ZSSDTjXjauHD8kdLW/2Wi4I2tt6QI9OiUhEgiaVn61vj T24gVHVlLCBNYXIgMjgsIDIwMjMgYXQgMzo0N+KAr0FNIFJvYmVydG8gU2Fzc3UKPHJvYmVydG8u c2Fzc3VAaHVhd2VpY2xvdWQuY29tPiB3cm90ZToKPgo+IE9uIE1vbiwgMjAyMy0wMy0yNyBhdCAx NzowMiAtMDQwMCwgUGF1bCBNb29yZSB3cm90ZToKPiA+IE9uIE1vbiwgTWFyIDI3LCAyMDIzIGF0 IDM6MzDigK9BTSBSb2JlcnRvIFNhc3N1Cj4gPiA8cm9iZXJ0by5zYXNzdUBodWF3ZWljbG91ZC5j b20+IHdyb3RlOgo+ID4gPiBPbiBGcmksIDIwMjMtMDMtMjQgYXQgMTc6MzkgLTA0MDAsIFBhdWwg TW9vcmUgd3JvdGU6Cj4gPiA+ID4gT24gRnJpLCBNYXIgMjQsIDIwMjMgYXQgOToyNuKAr0FNIFJv YmVydG8gU2Fzc3UKPiA+ID4gPiA8cm9iZXJ0by5zYXNzdUBodWF3ZWljbG91ZC5jb20+IHdyb3Rl Ogo+ID4gPiA+ID4gT24gRnJpLCAyMDIzLTAzLTI0IGF0IDExOjE4ICswMTAwLCBSb2JlcnRvIFNh c3N1IHdyb3RlOgo+ID4gPiA+ID4gPiBPbiBUaHUsIDIwMjMtMDMtMjMgYXQgMjA6MDkgLTA0MDAs IFBhdWwgTW9vcmUgd3JvdGU6Cj4gPiA+ID4gPiA+ID4gT24gVHVlLCBNYXIgMTQsIDIwMjMgYXQg NDoxOeKAr0FNIFJvYmVydG8gU2Fzc3UKPiA+ID4gPiA+ID4gPiA8cm9iZXJ0by5zYXNzdUBodWF3 ZWljbG91ZC5jb20+IHdyb3RlOgo+ID4gPiA+ID4gPiA+ID4gRnJvbTogUm9iZXJ0byBTYXNzdSA8 cm9iZXJ0by5zYXNzdUBodWF3ZWkuY29tPgoKLi4uCgo+ID4gT2theSwgdGhhdCdzIGZhaXIsIGJ1 dCB3ZSBjb3VsZCBzdGlsbCBwYXNzIHRoZSBmdWxsIHhhdHRycyBhcnJheSBhbmQgYQo+ID4gcmVm ZXJlbmNlIHRvIHRoZSBjdXJyZW50IGNvdW50IHdoaWNoIGNvdWxkIGJlIGJvdGggcmVhZCBhbmQg dXBkYXRlZCBieQo+ID4gdGhlIGluZGl2aWR1YWwgTFNNcywgcmlnaHQ/Cj4KPiBZZXMsIHdlIGNv dWxkIGRvLgo+Cj4gPiBUaGUgaXNzdWUgaXMgdGhhdCB0aGUgc2VwYXJhdGUgY29tcGFjdGlvbiBz dGFnZSBpcyBub3Qgc29tZXRoaW5nIHdlCj4gPiB3YW50IHRvIGhhdmUgdG8gZG8gaWYgd2UgY2Fu IGF2b2lkIGl0LiAgTWF5YmUgd2UncmUgc3R1Y2sgd2l0aCBpdCwgYnV0Cj4gPiBJJ20gbm90IHll dCBjb252aW5jZWQgdGhhdCB3ZSBjYW4ndCBtYWtlIHNvbWUgbWlub3IgY2hhbmdlcyB0byB0aGUK PiA+IExTTXMgdG8gYXZvaWQgdGhlIGNvbXBhY3Rpb24gc3RlcC4KPgo+IEkgbGlrZWQgbW9yZSB0 aGUgaWRlYSB0aGF0IExTTXMgZG8gd2hhdCB0aGV5IGFyZSBtb3N0IGZhbWlsaWFyIHdpdGgsCj4g Z2V0IGFuIG9mZnNldCBpbiBhIHNlY3VyaXR5IGJsb2Igb3IsIGluIHRoaXMgY2FzZSwgYSBzdGFy dGluZyBzbG90IGluCj4gdGhlIG5ld194YXR0cnMgYXJyYXksIGFuZCB3cml0ZSB0aGVyZS4KPgo+ IHYzIGhhZCB0aGUgbHNtX2ZpbmRfeGF0dHJfc2xvdCgpIGhlbHBlciwgdG8gZ2V0IHRoZSBzdGFy dGluZyBzbG90LCBidXQKPiBzb21laG93IEkgZmluZCBpdCBsZXNzIGludHVpdGl2ZS4KPgo+IE9r LCBpZiB5b3UgcHJlZmVyIHRvIGF2b2lkIHRoZSBjb21wYWN0aW9uIHN0YWdlLCBJIHdpbGwgcmV3 cml0ZSB0aGlzCj4gcGF0Y2guCgpNeSBjb25jZXJuIGlzIGhhdmluZyB0byBsb29rIHRocm91Z2gg dGhlIHhhdHRyIGFycmF5IGFmdGVyIGVhY2ggTFNNCmhhcyBiZWVuIHJ1biBhbmQgaW4gYXQgbGVh c3Qgb25lIGNhc2UgaGF2aW5nIHRvIHRoZW4gZG8gYSBtZW1jcHkoKSB0bwprZWVwIHRoZSBhcnJh eSBwYWNrZWQuICBUaGVyZSBhcmUgc29tZSBjYXNlcyB3aGVyZSB0aGVyZSBpcyBubyB3YXkgdG8K YXZvaWQgYWxsIHRoYXQgZXh0cmEgd29yaywgYnV0IGhlcmUgSSB0aGluayB3ZSBoYXZlIHRoZSBM U01zIGRvIHRoZQpSaWdodCBUaGluZyB3aXRoIHJlc3BlY3QgdG8gcGFja2luZyB0aGUgeGF0dHIg YXJyYXkgd2l0aG91dCBvdmVybHkKYnVyZGVuaW5nIHRoZSBpbmRpdmlkdWFsIExTTXMuCgpEb2Vz IHRoYXQgbWFrZSBzZW5zZT8gIEl0IGJhc2ljYWxseSBjb21lcyBkb3duIHRvIGJlaW5nIHNtYXJ0 IGFib3V0Cm91ciBhYnN0cmFjdGlvbnMgYW5kIGJvdGggc2VsZWN0aXZlbHksIGFuZCBjYXJlZnVs bHksIGJyZWFraW5nIHRoZW0Kd2hlbiB0aGVyZSBpcyBhIHJlYXNvbmFibGUgcGVyZm9ybWFuY2Ug Z2FpbiB0byBiZSBoYWQuCgotLSAKcGF1bC1tb29yZS5jb20KCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCk9jZnMyLWRldmVsIG1haWxpbmcgbGlzdApPY2Zz Mi1kZXZlbEBvc3Mub3JhY2xlLmNvbQpodHRwczovL29zcy5vcmFjbGUuY29tL21haWxtYW4vbGlz dGluZm8vb2NmczItZGV2ZWw=