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 X-Spam-Level: X-Spam-Status: No, score=-10.8 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 101E2C433E2 for ; Tue, 30 Mar 2021 17:24:32 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 6B43F619D1 for ; Tue, 30 Mar 2021 17:24:31 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6B43F619D1 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=nvidia.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id E809C6B0080; Tue, 30 Mar 2021 13:24:30 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E5B3F6B0081; Tue, 30 Mar 2021 13:24:30 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CD6BE6B0082; Tue, 30 Mar 2021 13:24:30 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0052.hostedemail.com [216.40.44.52]) by kanga.kvack.org (Postfix) with ESMTP id AEDDD6B0080 for ; Tue, 30 Mar 2021 13:24:30 -0400 (EDT) Received: from smtpin38.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay03.hostedemail.com (Postfix) with ESMTP id 69520824999B for ; Tue, 30 Mar 2021 17:24:30 +0000 (UTC) X-FDA: 77977214700.38.A65ACF8 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2070.outbound.protection.outlook.com [40.107.236.70]) by imf08.hostedemail.com (Postfix) with ESMTP id 551F3801A80B for ; Tue, 30 Mar 2021 17:24:16 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HdfrFQL2rYeAb0nsQb4OJlsndLVCYFO1DNhnR0XJlOjU+iWNNEQnlKDrZfuu8X+IV5m2MH/80wp/2itY5vyESKhds9mu7difjKJJSfXfHQWK+8F08jXhNJ88S7Hs028U97exKtU4k/4MbaS1LikfWde6x4Zy0RUDOQzSvE0AhtBTk0KRugKwQwe5gIBHi+mml8y84oIuBxXor7w8BDYwyRjXmR0e68EWpZfy+/tx4OwLSdADfcq8ysPq3ycgrNtDh4EANOt7slIFWz2F9wrb9f7S9oFNT2vmSQnftTAaDOCfKOy5/i8vGQAdgQG+H80qtbIHKwXu7ZaRyKWiNA1JKg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+VtItEy4f2u6PZyreBbJf+aMesQOMauGZD+Nbpj56Hk=; b=W+gr26+KyidK1H27vaC1pUg+4fmHt7ovc/tN6A/g7Ere+vOLoGRNts7xvwuHIlyOhW/qzJwvnVHC9avZK32hxnQzQzkRYNMy92EtWFJV/faetIKwkdONscRP1LyFbFb6fEJCN+6DkzlbwNxFe4UR3SBg+agnZ62nb1BfuBM5wsFm2XH+2kGxi3ztkgk5brt9N9/UZxH6rhdnm4MuKtqDGKJpj5CMVulPV07YVN9fbOhMWBxU+og7jt+2JZyNpl1Op2CkcF1dFsde+YMvOOTHLDo0+5fw12H21+4Mm13XUxjxf+VWj9g6P+3iDpFuQ6MGv2aN7Ctx3fItZ004k+MRSw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+VtItEy4f2u6PZyreBbJf+aMesQOMauGZD+Nbpj56Hk=; b=b0TXM9BTt5wke1fO4HAfRQiIcCbtPld9IZM9Ee3OGWpZCLZgWItSgl7LxRCbTyky+vz333YHd/1mYLkgG6xNLONtFXp70m8S/aFYro8Ds1J0yhCnXPkImu5DvVC0PspuV0HP/9Z8dU8JD7Pw3y7YC+FB2IdtyJJpvE/tbB/dXRCyI0S+lEPN6yXw0//iD4WPxFj7VZuvKuUUAPeHItUTMQZBbR6i10NougexEbhnxRqgPjTGyTVFPVDgZ6UlAFYc8Fur8yiOUEQMsRLVsGAEyx/W//1DhU2w66c1nEWZ/gMfYdJk0kUlKtJBLfIzF51p9CahGZ00r5YHzNAQwxykrQ== Authentication-Results: fb.com; dkim=none (message not signed) header.d=none;fb.com; dmarc=none action=none header.from=nvidia.com; Received: from MN2PR12MB3823.namprd12.prod.outlook.com (2603:10b6:208:168::26) by BL0PR12MB4994.namprd12.prod.outlook.com (2603:10b6:208:1ca::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3977.29; Tue, 30 Mar 2021 17:24:21 +0000 Received: from MN2PR12MB3823.namprd12.prod.outlook.com ([fe80::a1b1:5d8:47d7:4b60]) by MN2PR12MB3823.namprd12.prod.outlook.com ([fe80::a1b1:5d8:47d7:4b60%7]) with mapi id 15.20.3977.033; Tue, 30 Mar 2021 17:24:21 +0000 From: "Zi Yan" To: "Roman Gushchin" Cc: linux-mm@kvack.org, "Matthew Wilcox" , "Kirill A . Shutemov" , "Andrew Morton" , "Yang Shi" , "Michal Hocko" , "John Hubbard" , "Ralph Campbell" , "David Nellans" , "Jason Gunthorpe" , "David Rientjes" , "Vlastimil Babka" , "David Hildenbrand" , "Mike Kravetz" , "Song Liu" Subject: Re: [RFC PATCH v3 00/49] 1GB PUD THP support on x86_64 Date: Tue, 30 Mar 2021 13:24:14 -0400 X-Mailer: MailMate (1.14r5757) Message-ID: <06D1034A-DE8B-4970-9056-6CA1C436D2E8@nvidia.com> In-Reply-To: References: <20210224223536.803765-1-zi.yan@sent.com> <890DE8FE-DAF6-49A2-8C62-40B6FD593B4A@nvidia.com> Content-Type: multipart/signed; boundary="=_MailMate_AA5EDDDF-2DFE-491D-96A5-2F7C5AA86425_="; micalg=pgp-sha512; protocol="application/pgp-signature" X-Originating-IP: [216.228.112.21] X-ClientProxiedBy: BL0PR02CA0076.namprd02.prod.outlook.com (2603:10b6:208:51::17) To MN2PR12MB3823.namprd12.prod.outlook.com (2603:10b6:208:168::26) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from [10.2.57.140] (216.228.112.21) by BL0PR02CA0076.namprd02.prod.outlook.com (2603:10b6:208:51::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3977.24 via Frontend Transport; Tue, 30 Mar 2021 17:24:17 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9896a47f-eb7a-431c-1672-08d8f3a0a7fb X-MS-TrafficTypeDiagnostic: BL0PR12MB4994: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:9508; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: hBNprml4fQdIOVGEuA5xPtgIYldHkLkbeXiPVt61YohOBL2eSoxYBMR1YWJC6PCE9ESrDRm0lJCEfB21tR+I7pA2WwLgdkJYXMesby0Fvo4OPN46Icjc7+WcPRooLryIDr494VXciSlXbtUglem3GqFdO7XKCxL/t+bdC+Z57c/Zj7DDbVlCCP9TY6unQUf7zkQDlelUSWlgPSBbFgJ8zqUxihGk5Ziw6xo2/hqZmryEP7SZGcBTCSEjqgHzmnrbSWnrmQxvtg2Dztefe4wCu+VhQCX7r1B5E/xI6ifNagfl3/nzMneb3DZA8MH6CyoAEYwnfE/opz74A7EAI+5ecC9ncZzvpRDLIqmyzE7I0Ux/FuouN0P39tXSgfAM+d7UA4j9c35SAGI3t9+4ErpL64BjsLJFPCfFpsYitSIAJljM+JsMBuRYOQ83iHmEr1TnPAKyWVYaFQmlirT2yHEWE7GHsgwmpySRmxk+yI+4nok0Q58DWfZaSpm9oFKqVCP3qtKsszD9q2tc1hNAoUCPzgtGaFaJloNt9mRd5jjj1OIcNArioYMV/kttevi+Sutc3yd6BwcySWVHgxRUXqPWRXpTvAQRnvk63XBDkP+dZqnsSz4M2N+lu1GxEeK8bv4IFeT49XLXjD/+L4XMatQgDUJKAEMNm4TKrs7uxfD03LbXHmNuRTkKC1kwc39DYZxqvsNprDDygcNCgJyIyMQJUr97YCZkWzqWW1jnJ3utuvDoMpQjl5cUaszk9/QUSHCaw+ILVjyx272CuZaWP0MrnOHblp2b6rx3aQ7oMEM9Mc4= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR12MB3823.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(366004)(376002)(396003)(39860400002)(136003)(6916009)(6666004)(53546011)(2616005)(8676002)(956004)(26005)(8936002)(5660300002)(33656002)(66556008)(36756003)(235185007)(6486002)(83380400001)(7416002)(4326008)(66946007)(2906002)(38100700001)(186003)(16526019)(54906003)(478600001)(316002)(86362001)(66476007)(966005)(33964004)(16576012)(45980500001)(72826003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?cnN3ZFVYRktEQld0TnRiRFdSYUo4NURVVzF4M2k0Y3d1MXhMeGh6YTExTDFJ?= =?utf-8?B?K25aaTFUWmUrdEUrMitNMmoveXZXdkduZzRUZWE1Q1h1NE52SGc0QVkvUll2?= =?utf-8?B?U0tmRXRqOXhyNTBnWmFPSld5aVZobzJvRjk2U1E2dm56VGxWUkZGRUFSMk5J?= =?utf-8?B?STNjYlV0Z0RSZlZyNlo3aWVscWgzRTJ1NkVhQ01SYk8ySW14Q2crN0V4UmRS?= =?utf-8?B?SldvdnVqZ3A0U2JxODdmSzdWRzdNM3RRbkRQSkxqS1FEbWVUVzNCejNyTXQ1?= =?utf-8?B?U2cwU01GNERYcmdoWHpmQ205RjFWUHBFOU53SzBESStCT2E1UVNZVG5POHA3?= =?utf-8?B?bnhNYWZXWmYwemFzZ0FnOENEcVNkUUJWQnUxYnUyYmF6OWZ4aWlDMnVRUS9G?= =?utf-8?B?OGh0b09sYnFrYXF5UVk2QWFEV1B5U2xXWVdMQk9vVG94d1JHUDdPaGx1MWlL?= =?utf-8?B?ZS94aWNUTUFZQldsWmtud3RRQkdqVDdtelE1WE15SDhuK3dFNzhNZFBPWUlF?= =?utf-8?B?dUZJSXZRWEhWNkxHekxlcUhEN2ZrUVlLUjJpZHFFSTBkbFgxODlZUGh2cFov?= =?utf-8?B?anpLYjZGK3J4RzBzOThjRFlWZ3VwNHZKcUdBVERrNlZWMCtPckNtSU05Tlk3?= =?utf-8?B?NzZuenMzYkFQN29ET1p5REVoUEREaU0yOGlmQzJKbGhZd3V0b29OK2pTQ3Z0?= =?utf-8?B?RTcydDEyTzhMWmIwVjZrb1ViT0tzTlRVdXY4dldsQ0RmZytKNXdtSzdBOGE1?= =?utf-8?B?THloSlE1Y3ZpZFVMVjNLQlNpcVlEUm1rQnNNMGErUDJnb3NjNTR5aFg0bGk3?= =?utf-8?B?S2xnOTZJaGhGVjZPd0F0engrOXJhWXdJRysyN1NrSHRFZ2Y5SVdURkk1QnRp?= =?utf-8?B?eDloZG1DaCs1UlNoRkZ4ZVZROFhUcjQrTVNnMlNYYVV5MjdubkRvQURadkVZ?= =?utf-8?B?VVFTbzV2L1dOODY3eVlYSWx4UmV3WEZrZnFxbE5mTkgyNzNRY2RCRFBKRWk0?= =?utf-8?B?TkltNmU4QzEydU9MWUxtR3pjTnlBSTdtNHFHTWljUUpjYVFkWVo2bjY4QUFI?= =?utf-8?B?Yk1VeUhyUmZocDMvampGL2NjMVlCTlZnL2FoeFgxTmVlWXlEVTg2MVM1a2xk?= =?utf-8?B?TmYzUGxZWGh4dG0wS0lrOEhSSVlhcjdIVFlheXBDRXFHQVFZWG5SNmYwTzFo?= =?utf-8?B?VCtlK3ZUN1NzaVREanJsQ20rbkNXMXR3eHNEbDlHTUN2bTVaM3ROdFVIWU9s?= =?utf-8?B?OUJsVWNYRW5xVEdjRHpyZlpKa3ZGRkREci9UV2pmRFNXZzJCZGFzYzZyVTd6?= =?utf-8?B?eUg2cUl5RlFUQllIOFN2VDZzZ1Y4R3RpYVBBNnB2VzhNVi9pWXNvTnBidFNY?= =?utf-8?B?OXJiY0JjcW8vT2VTbitHVXNWMHJZL0xJSUFJcW9PbVNsVTVxUy94OURub2s5?= =?utf-8?B?dlIxRzAxN0kzZU1zRmZkM0pkMU93VjA2SXhUd1l0eFR3Qk5zNzdvMWVVZ2to?= =?utf-8?B?WHRQeWM3V3JxUGhGT3IyWGNrd1d4c09kNnprOHNjUTErU0k4WWxwbUFwektO?= =?utf-8?B?Zzh3MzM2VUdxZEZycDI2MVpxc09RcE1HdGRVbnk4ZVdjY0hmMlJLckpWTHBR?= =?utf-8?B?ZTZNYkJlcDBiZklBSGZEck44Uy9IVmowNFRVWWF5eWhqT3dIcUZSM2JLK21I?= =?utf-8?B?d2U0cE96NkQ5bFlkay9ESjlnbW1VaG42WVpFTHhaWmJxWUozR0oyTmR1aElM?= =?utf-8?Q?kTsKB1GOWWBtXrqkzgq54WLKds1fXLl2eP3wnau?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9896a47f-eb7a-431c-1672-08d8f3a0a7fb X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB3823.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Mar 2021 17:24:21.4380 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: OeeIUSHhD+r6dMco6FztaGYxCaExbLkOD+MizRbcXAJkPonv6/oPgXODSRY2k4aQ X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL0PR12MB4994 X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 551F3801A80B X-Stat-Signature: qi8fshedc6ad8tk8w7ozrnf6q7pygpp4 Received-SPF: none (nvidia.com>: No applicable sender policy available) receiver=imf08; identity=mailfrom; envelope-from=""; helo=NAM11-BN8-obe.outbound.protection.outlook.com; client-ip=40.107.236.70 X-HE-DKIM-Result: pass/pass X-HE-Tag: 1617125056-64060 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: --=_MailMate_AA5EDDDF-2DFE-491D-96A5-2F7C5AA86425_= Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Roman, On 4 Mar 2021, at 11:45, Roman Gushchin wrote: > On Thu, Mar 04, 2021 at 11:26:03AM -0500, Zi Yan wrote: >> On 1 Mar 2021, at 20:59, Roman Gushchin wrote: >> >>> On Wed, Feb 24, 2021 at 05:35:36PM -0500, Zi Yan wrote: >>>> From: Zi Yan >>>> >>>> Hi all, >>>> >>>> I have rebased my 1GB PUD THP support patches on v5.11-mmotm-2021-02= -18-18-29 >>>> and the code is available at >>>> https://github.com/x-y-z/linux-1gb-thp/tree/1gb_thp_v5.11-mmotm-2021= -02-18-18-29 >>>> if you want to give it a try. The actual 49 patches are not sent out= with this >>>> cover letter. :) >>>> >>>> Instead of asking for code review, I would like to discuss on the co= ncerns I got >>>> from previous RFCs. I think there are two major ones: >>>> >>>> 1. 1GB page allocation. Current implementation allocates 1GB pages f= rom CMA >>>> regions that are reserved at boot time like hugetlbfs. The concer= ns on >>>> using CMA is that an educated guess is needed to avoid depleting = kernel >>>> memory in case CMA regions are set too large. Recently David Rien= tjes >>>> proposes to use process_madvise() for hugepage collapse, which is= an >>>> alternative [1] but might not work for 1GB pages, since there is = no way of >>>> _allocating_ a 1GB page to which collapse pages. I proposed a sim= ilar >>>> approach at LSF/MM 2019, generating physically contiguous memory = after pages >>>> are allocated [2], which is usable for 1GB THPs. This approach do= es in-place >>>> huge page promotion thus does not require page allocation. >>> >>> Well, I don't think there an alternative to cma as now. When the memo= ry is almost >>> filled at least once, any subsequent activity leading to substantial = slab allocations >>> (e.g. run git gc) will fragment the memory, so that there are virtual= ly no chances >>> to find a continuous GB. >>> >>> It's possible in theory to reduce the fragmentation on 1GB scale by g= rouping >>> non-movable pageblocks, but it seems a separate project. >> >> My experiments showed that finding continuous GBs is possible, but I a= gree that >> CMA is more reliable and 1GB scale defragmentation should be a separat= e project. > > I actually ran a large scale experiment (on tens of thousands of machin= es) in the last > several months. It was about hugetlbfs 1GB pages, but the allocation me= chanism is the same. Thanks for the information. I finally have time to come back to this. Do = you mind sharing the total memory of these machines? I want to have some idea on the scale= of this issue to make sure I reproduce in a proper machine. Are you trying to get <20% of = 10s GBs, 100s GBs, or TBs memory? > > My goal as to allocate a relatively small number of 1GB pages (<20% of = the total memory). > Without cma chances are reaching 0% very fast after reboot, and even ma= nual manipulations > like shutting down all workloads, dropping caches, calling sync, compac= tion, etc. do not > help much. Sometimes you can allocate maybe 1-2 pages, but that's about= it. Is there a way of replicating such an environment with publicly available= software? I really want to understand the root cause and am willing to find a possi= ble solution. It would be much easier if I can reproduce this locally. > > Even with cma we had to fix a number of additional problems (like sub-o= ptimal placement > of cma areas, 2MB THP migration, some ext4 and btrfs page migration iss= ues) to have > a reasonable success rate about ~95-99%. And it's not 100% anyway. > > The problem with artificial tests is that you're likely experimenting o= n a freshly > rebooted machine which isn't/wasn't doing much. It's a bad model of the= real memory > state of a production server. Yes, I agree that my experiment is not representative. Can you provide mo= re information on what application behavior(s) leading to this memory fragmentation? I g= uess it is because non-moveable pages spread across the entire physical memory space= =2E Is there a quick reproducer for that? Thanks. =E2=80=94 Best Regards, Yan Zi --=_MailMate_AA5EDDDF-2DFE-491D-96A5-2F7C5AA86425_= Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc -----BEGIN PGP SIGNATURE----- iQJDBAEBCgAtFiEEh7yFAW3gwjwQ4C9anbJR82th+ooFAmBjXr4PHHppeUBudmlk aWEuY29tAAoJEJ2yUfNrYfqK8fsP/2pRZZvp84M90CSKFv8AJUDFscbCTdK6HKpB 8PqpAG2fY3v2C5D1x/f+BNVBX7WEMx/B5/i0YyqL2WHr6JITz0by5omCy82nixfN I6a4zNavN1rNIXB9fMPEGAeTwPfWmRvH4Ok2TWeCe+w4Y5IFW1ezjaMY4qawb6Xa 0gFet/cg7ZADMTKAnZcv/8nrLvOaQbmXFEvSlW8i9VMpWXyYIgDBjD5fwee6NTZO kvQEwoT2eW4xOUJ/qBJDXnYag3MTThf2et1Zuk5Qp5UK2bhhRhY42XVp7gge6yua HzrqEvy79hXJnZF3GY3aN4zQC/vLbMN5+eVZLHg0Ti2gs4BDiZYscr7riltXiJDB 6Qi9hmsCDrbch65lsHOCQY5nyRVsUp1tfVcDq61JkhRJYo9bsjdbTZWOxTbg1e3s PKURsIyNADtf2B7j2/skROGC8oSNkzQxbnjJLvk//JV+XvLf4gfARiQVaQJIJH4S Ed2Cl0RGffzY5iK2RLgQyLrQgzPsgU4IiFWprBCz4yycUiu76cm4RZAUljvKAZgp hfaa3ITRYVjIvwEwHUMfnRAlnyXO0GmER/RFSyuzd21h4BjPESYbEN0h2csONYhK INcIpPGoOJoCzxl7whxJeuJxjDzTudijyT/AIrpDfWt1F7PJqKfw04H0V8ZBr6ZZ ybNORgFz =55B2 -----END PGP SIGNATURE----- --=_MailMate_AA5EDDDF-2DFE-491D-96A5-2F7C5AA86425_=--