[tsvwg] Re: [EXTERNAL] Re: [gwhiteCL/NQBdraft] Should traffic protection be mandatory to implement? (Issue #48)

Sebastian Moeller <moeller0@gmx.de> Wed, 24 July 2024 14:53 UTC

Return-Path: <moeller0@gmx.de>
X-Original-To: tsvwg@ietfa.amsl.com
Delivered-To: tsvwg@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 0E0EFC180B50; Wed, 24 Jul 2024 07:53:38 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.853
X-Spam-Level:
X-Spam-Status: No, score=-1.853 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01, URIBL_BLOCKED=0.001, URIBL_DBL_BLOCKED_OPENDNS=0.001, URIBL_ZEN_BLOCKED_OPENDNS=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmx.de
Received: from mail.ietf.org ([50.223.129.194]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id RajjyTuFnv6W; Wed, 24 Jul 2024 07:53:33 -0700 (PDT)
Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 56FB3C1840D3; Wed, 24 Jul 2024 07:53:33 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1721832805; x=1722437605; i=moeller0@gmx.de; bh=qJX9ITZkZIWE4FESVtzbwfsdEuPj8RVkAakExGxaOZo=; h=X-UI-Sender-Class:Date:From:To:CC:Subject:In-Reply-To:References: Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=X8wAhPNvc6N6RHr7AXTrnfKVNiH9LHMQHK5vADRc/N922n/SJw4OSlqmSGpDRGMh EIP9f0DoXmBTrI+SeaFpKpQ0/9QgAvmTakrpMaY0GFpBWIKIw0CjXxr2WXDmsDmml TPbtkFUZCy4EMkr4pkzw9aMAuRi/bkq8PB+Spg7CjhBZyzzOrxXpIEPZz3saw9JDs i8Nnv5tKc0VxKmgSjNbGveae9L7aX9pbJbMqpoRyWO/ZHGfgqocWKKCUcFiGq+vxj FlZgYQmpv1ErBh6lp1WikCXK6U//HXFQkI9U36ZWEXIg7Plzb1H/eyTTBDnAPaDom RntA2LGZWOUWlepIMQ==
X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a
Received: from [127.0.0.1] ([80.187.115.240]) by mail.gmx.net (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MSc1B-1shT6x3HY1-00PHkT; Wed, 24 Jul 2024 16:53:25 +0200
Date: Wed, 24 Jul 2024 16:51:50 +0200
From: Sebastian Moeller <moeller0@gmx.de>
To: "Overcash, Michael (CCI-Atlanta)" <michael.overcash=40cox.com@dmarc.ietf.org>, "tsvwg@ietf.org" <tsvwg@ietf.org>, "Black, David" <David.Black@dell.com>, gwhiteCL/NQBdraft <reply+AB2VULW2XRH6MPK23ABRZQOEVLRFREVBNHHI5USV5Y@reply.github.com>, gwhiteCL/NQBdraft <NQBdraft@noreply.github.com>
User-Agent: K-9 Mail for Android
In-Reply-To: <LV2PR01MB7622DEBFDC0223096F6768CC9FAA2@LV2PR01MB7622.prod.exchangelabs.com>
References: <gwhiteCL/NQBdraft/issues/48@github.com> <gwhiteCL/NQBdraft/issues/48/2244060936@github.com> <MN2PR19MB404591B9BAA1AEED7BBB900983A92@MN2PR19MB4045.namprd19.prod.outlook.com> <LV2PR01MB7622B7EA53C95951987C9B0B9FA92@LV2PR01MB7622.prod.exchangelabs.com> <26D2AD7F-108B-4655-87F6-EF5E127B3BB8@gmx.de> <LV2PR01MB7622DEBFDC0223096F6768CC9FAA2@LV2PR01MB7622.prod.exchangelabs.com>
Message-ID: <AC02F73F-3E71-4FDA-9686-6006192FF0BA@gmx.de>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
X-Provags-ID: V03:K1:Ds5+P8IoT/DgPv6oRqCkUMwO8Q87yGAfgkbzK0FSd+AMdc2xK8t xluAjbRH4bmAukCw/qufF6GdyG8t6vOHiURjYm052fDegma3GYGT7iBYlYtnp0SGZWBYRSd UFZJTeOy6FDG1DFtfVr1xMNdDieK9IHqR07NrkeVoTuymel6j0j1k7Mnkl2VHtXE4COo+9i Iki+UxryjKDdHLlsTB2Iw==
UI-OutboundReport: notjunk:1;M01:P0:JrM7pmqhC7s=;6qZNiSuVZndo63JvmYy1QP41GMo wy+LyPgFb2aa0GunnDno4+5SEUneKleYq9ZIxl52F/PV/PFbKaPoggC/7cgsXZhsy7Sf2vnqe qoD7RJaIAPuCZDI4leXOV5ezEZ95i7LN+nJwUS69+6wMVtPg5Y2EEfHjhn+o3SSZgt5UWmSXp GddtmksvwEn/FjGlQSpjWy19TislHo9HY14Yq9cvPGHL3kTlR1p6Q/wVrr0hEinUAJAr4swsF 3xWK63PfrUkSKTtb1x2eWYUSDzgLPyuofxp9SP6Y7SPeAqhzUf0l2oC9y5do8mciq8q1QPl/H 5D9H+ugaZfWsnpaARJAJ1OWhX8oUk3hw5TaPlJTRQYScAZFyGnsnvcAWX8upNr7R53KnnGPMe WCy5PaMF4hg+JK/3CNYh7iyKAW6Sn3z0S5c0mOliMJmUTRkhzjuJMrnMjuDO/DLUJDe0yNL2Q j+3rnpVQAPhmKLv+yOKyP1oXSV16Tz1M1IcmhMHLq5qyJXWARVNkU+7rQ/A7b8R0o6aYv/lPf gXuAAdJruj0evbr/+8FmhW54C+aTu6QeFmxgClXqAGwY1uuFa87ix2vasuyzvi3koQJ0kJ2vY ddz6LmzMZNwHsoEa1Wkx+NoigsVBxF1VK8+afJQogfWWZ2mBheIPV5jyEb1S7Sbnn3rHGvBs1 t6KvB4DaQx4szpvmbwm81S2Nrf+UaACUXfo1a150wzbhVBkL4kHbJAdg1LVIR5FNNZza+AWEu WV2hU6fomh2JmT/PbDAh5wK7Kc3aeHdDgq4V7hYiLL2z3X7EXWEH7IK2KffDtSK/PlzNOaFlJ yzvp3iRX7hQvCzK9AqmGg34Q9Tq1LnAJ+/i4opfp8zgFo=
Message-ID-Hash: MHFPI7HO5TBZYLHII5VG36U6N2DA3QOR
X-Message-ID-Hash: MHFPI7HO5TBZYLHII5VG36U6N2DA3QOR
X-MailFrom: moeller0@gmx.de
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-tsvwg.ietf.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
CC: tsvwg IETF list <tsvwg@ietf.org>
X-Mailman-Version: 3.3.9rc4
Precedence: list
Subject: [tsvwg] Re: [EXTERNAL] Re: [gwhiteCL/NQBdraft] Should traffic protection be mandatory to implement? (Issue #48)
List-Id: Transport Area Working Group <tsvwg.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/tsvwg/zhwhUgqLoTiTlgv-qfnlR7K9chw>
List-Archive: <https://mailarchive.ietf.org/arch/browse/tsvwg>
List-Help: <mailto:tsvwg-request@ietf.org?subject=help>
List-Owner: <mailto:tsvwg-owner@ietf.org>
List-Post: <mailto:tsvwg@ietf.org>
List-Subscribe: <mailto:tsvwg-join@ietf.org>
List-Unsubscribe: <mailto:tsvwg-leave@ietf.org>


On 24 July 2024 14:49:26 CEST, "Overcash, Michael (CCI-Atlanta)" <michael.overcash=40cox.com@dmarc.ietf.org> wrote:
>> I wonder, what makes you believe that L4S is so special that abuse will not happen?
>
>Abuse needs an incentive. Can anyone think of a way to abuse L4S that provides a benefit to the abuser? (Other than the intended benefit of improved latency of course.)/

[SM] For a single flow getting access to (by default) 80% of link capacity as reward for ignoring CE marks is IMHO a pretty clear benefit...
Really, the idea that packet scheduling with a work conserving scheduler can be anything but a zero sum game requires a very good explanation (that so far l4s/nqb proponents have not offered)... But a zero sum game really implies the advantage of one class comes at the expense of the other. L4S 'solution' to this challenge is to rely on all flows to play nice and pretend there is no incentive to not play nice. You might consider this a robust and reliably engineered solution....

I wonder what the Nash equilibria of the L4S game actually are and whether they support the hypothesis that there is no incentive to abuse...  (I am not volunteering a game theoretic analysis, but I note this would be a way to massively support the incentive argument for both NQB and L4S.)


Regards
        Sebastian

>
>--
>Michael Overcash
>Principal Architect, CPE Premises Engineering, Cox Communications
>
>-----Original Message-----
>From: Sebastian Moeller <moeller0=40gmx.de@dmarc.ietf.org>
>Sent: Wednesday, July 24, 2024 2:41 AM
>To: tsvwg@ietf.org; Overcash, Michael (CCI-Atlanta) <michael.overcash@cox.com>; Black, David <David.Black@dell.com>; gwhiteCL/NQBdraft <reply+AB2VULW2XRH6MPK23ABRZQOEVLRFREVBNHHI5USV5Y@reply.github.com>; gwhiteCL/NQBdraft <NQBdraft@noreply.github.com>
>Cc: Black, David <David.Black@dell.com>; tsvwg IETF list <tsvwg@ietf.org>
>Subject: Re: [tsvwg] Re: [EXTERNAL] Re: [gwhiteCL/NQBdraft] Should traffic protection be mandatory to implement? (Issue #48)
>
>See [SM] below...
>
>On 23 July 2024 21:52:11 CEST, "Overcash, Michael (CCI-Atlanta)" <michael.overcash=40cox.com@dmarc.ietf.org> wrote:
>>I don't think you've really fully addressed Greg's main point here.
>>
>>"if the NQB queue is configured as specified (i.e. with a shallow buffer), there is a disincentive for QB applications to mis-mark their traffic because they will see excessive packet drops."
>>
>>Traditional QoS/Priority approaches created an incentive to cheat by creating a "fast lane" for latency sensitive services. This is emphatically not how L4S and other similar AQM based methods work.
>
>[SM] Both DualQ and the low latency DOCSIS scheduler it was based upon are at their core (conditional) priority schedulers. This is pretty much the same technology that in traditional QoS approaches is used to implement higher priority fast lanes. L4S adds a few heuristics to ameliorate this (like the coupling between the queues) but for these to work traffic in the L queue needs to respond properly to CE marks.
>So if we think about reasonably well-paced mischievous traffic that happens to be application limited to under the default 80 to 90% capacity share of the L-queue that ignores CE marks, this will pretty much get its way without suffering adverse effects.
>I predict that if you deploy an non-policed priority scheduler into the wild, people will find ways to abuse it.
>I wonder, what makes you believe that L4S is so special that abuse will not happen?
>
>
>
>The shallow-buffer queue is not a fast lane [SM] Indeed it is not the shallow buffer but the underlaying priority scheduler, but IMHO that distinction is not all that important, the gist is l4s attempts to deploy a priority scheduler into the wild where the main admission control is whether a flow set the ECT(1) ECN codepoint. This is a rather risky proposition, and IMHO not helped by arguing that the priority scheduler itself is an implementation and not an architechtural feature of l4s... (l4s really needs a priority scheduler explicit or implicit, as that is exactly what it promises to do, prioritise ECT(1) packets over other packets and treat them to lower queuing delay, but I understand that I appear to be in the rough with this analysis).
>
> and will only improve latency performance for endpoints that implement the appropriate algorithms. An endpoint that tries to "cheat" will just end up policed and will experience worse performance.
>
>[SM] How? And what if that flow is well paced and stays below the l-queue capacity share, how can you assert that this flow will reliably get targeted by the policer? Keep in mind that queue protection has no concept of relative throughput of flows , but only looks at the queuing a flow causes. That is the goal of an attacker, likely getting an unfair throughput advantage is only policed indirectly. This is not what I would consider robust and reliable engineering...
>
>>Why would anyone go out of their way to use the shallow-buffer queue to get worse performance?
>
>[SM] Again, what makes you so certain an attacker would get worse performance?
>
>>
>>I don't think it is productive to rigorously define "shallow buffered" here. The exact buffer depth is a function of the algorithm and vendor implementation.
>>
>>I also don't think it is necessary or helpful to try to solve for malicious actors here. Any malicious actor can fill up queues and crowd out other traffic simply by sending high rate UDP. Shallow buffers are not uniquely vulnerable here.
>On the contrary, there is no buffer so large that a malicious actor cannot easily fill it.
>
>[SM] I gently disagree you can always opt to drop packets even before putting them into a queue.
>
>>
>>Just my two cents...
>>
>>Michael Overcash
>>Principal Architect, Cox Communications michael.overcash@cox.com
>>
>>From: Black, David <David.Black=40dell.com@dmarc.ietf.org>
>>Sent: Tuesday, July 23, 2024 11:12 AM
>>To: gwhiteCL/NQBdraft
>><reply+AB2VULW2XRH6MPK23ABRZQOEVLRFREVBNHHI5USV5Y@reply.github.com>;
>>gwhiteCL/NQBdraft <NQBdraft@noreply.github.com>
>>Cc: Black, David <David.Black@dell.com>; tsvwg IETF list
>><tsvwg@ietf.org>
>>Subject: [EXTERNAL] [tsvwg] Re: [gwhiteCL/NQBdraft] Should traffic
>>protection be mandatory to implement? (Issue #48)
>>
>>[+tsvwg list]
>>
>>> I continue to disagree that traffic protection needs to be made mandatory to implement, and I have some suggestions on a way forward that provides a compromise.
>>This overall direction looks promising, but the suggested compromise is not (yet) good enough.  Significant work on the draft will be needed, specifically on items 1 and 4:
>>
>>> 1. Necessity: NQB is a shallow-buffered best-effort service. It is understood that performance is not guaranteed for any best-effort service.
>>I understand the overall intent, and I'm fine with that as a high-level goal/direction.  The problem is that in the -24 version of the draft, "shallow-buffered" is an all-but-undefined term.
>>
>>To do better, the draft needs to provide a concrete specification of "shallow-buffered" and require that NQB implementations use shallow buffers. If this specification of "shallow-buffered" requirements is done well, it should lead to corresponding (hopefully minor) revisions of the incentives framework discussion that result in an acceptable resolution to points 2 and 3 on Incentives.
>>
>>OTOH, the comment that "performance is not guaranteed for any best-effort service" appears to have missed the point. I definitely agree that the draft is not guaranteeing any performance for NQB traffic, but this line of reasoning is claiming to guarantee non-performance(!) for QB traffic that uses (abuses) the NQB service. Specifically, the claim is being made that a shallow-buffered NQB service provides a sufficient non-performance guarantee to ensure that QB traffic has nothing to gain (and quite a bit to lose) by using (abusing) the shallow-buffered NQB service. The detailed requirements for sufficiently shallow buffers that realize that non-performance guarantee need to be specified and mandated, e.g., in Section 5.1 of the draft.
>>
>>> 4. Security: The incentives above don't address malicious sources.
>>> While traffic protection is the remedy for this, some network environments have other ways to address malicious sources (e.g. only approved applications are deployed in the network, or traffic conditioning is performed at the network edge).
>>
>>Proceeding in this direction ... if traffic protection is not mandatory to implement, then the draft will need to restrict NQB implementation and usage (using "MUST" and "MUST NOT" or equivalent RFC 2119 keywords) to network environments that have "other ways to address malicious sources."  The nature and/or results of those "other ways" will need to be specified in a sufficiently concrete fashion that a network operator can readily determine whether or not her network has sufficient "other ways to address malicious sources."
>>
>>Turning to the suggested compromise:
>>
>>> Specifically, the suggestion is that we address your concern about
>>> abuse of the code point by adding a mandatory requirement that NQB PHB implementations provide statistics that can be used by the network operator to detect whether abuse is occurring.
>>> These statistics could be as simple as packet and drop counters.
>>That could work in combination with a solution to the "4. Security" problem suggested above.  By themselves, requiring collection/provision of statistics is not sufficient to resolve the security problem.
>>
>>> Regarding the paragraph in 5.2 discussing situations where traffic protection is potentially not needed, we could rework the paragraph ...
>>That would help ... after the security problem (4) is resolved (see above)..
>>
>>The bottom line is that items 1 (e.g., What is the concrete specification of "shallow-buffered" ?) and 4 (e.g., What are other ways that are sufficient to address malicious sources?) need to be addressed.
>>
>>Thanks, --David
>>
>>From: gwhiteCL
>><notifications@github.com<mailto:notifications@github.com>>
>>Sent: Monday, July 22, 2024 9:03 PM
>>To: gwhiteCL/NQBdraft
>><NQBdraft@noreply.github.com<mailto:NQBdraft@noreply.github.com>>
>>Cc: Black, David <David.Black@dell.com<mailto:David.Black@dell.com>>;
>>Mention <mention@noreply.github.com<mailto:mention@noreply.github.com>>
>>Subject: Re: [gwhiteCL/NQBdraft] Should traffic protection be mandatory
>>to implement? (Issue #48)
>>
>>
>>[EXTERNAL EMAIL]
>>
>>@dlb237 [github.com]<https://urldefense.com/v3/__https:/github.com/dlb237__;!!LpKI!jyiVIyRb0wHGFj6E5pa6Rm73RYDbMxjO3w3_EPIu0Igv6c7N8-NWOQisrmDR8o9RxjsUqJKazSDQ4_HKgrTj_EGiYA$> I continue to disagree that traffic protection needs to be made mandatory to implement, and I have some suggestions on a way forward that provides a compromise. Here are some of the reasons why I disagree:
>>
>>1.      Necessity: NQB is a shallow-buffered best-effort service. It is understood that performance is not guaranteed for any best-effort service. For example, the IETF doesn't mandate that implementations of the Default PHB provide mechanisms to police/prevent applications from inducing delay and/or loss.
>>
>>2.      Incentives: As I wrote in #47 (comment) [github.com]<https://urldefense.com/v3/__https:/github.com/gwhiteCL/NQBdraft/issues/47*issuecomment-2215318283__;Iw!!LpKI!jyiVIyRb0wHGFj6E5pa6Rm73RYDbMxjO3w3_EPIu0Igv6c7N8-NWOQisrmDR8o9RxjsUqJKazSDQ4_HKgrT6fDk_CQ$>, even without traffic protection, if the NQB queue is configured as specified (i.e. with a shallow buffer), there is a disincentive for QB applications to mis-mark their traffic because they will see excessive packet drops. So, I disagree with your assertion that the incentives framework fundamentally depends on the presence of traffic protection. Traffic protection as defined in DOCSIS Queue Protection [ietf.org]<https://urldefense.com/v3/__https:/www.ietf.org/archive/id/draft-briscoe-docsis-q-protection-07.html__;!!LpKI!jyiVIyRb0wHGFj6E5pa6Rm73RYDbMxjO3w3_EPIu0Igv6c7N8-NWOQisrmDR8o9RxjsUqJKazSDQ4_HKgrSwpL2vsw$> arguably provides less of a disincentive for inappropriate marking than would be the case in the absence of QP, because it results in significantly less packet loss for the offending application.
>>
>>3.      Incentives: Incentives apply more broadly than on a hop-by-hop basis, and also generally apply more broadly than on a path-by-path basis. In other words, a QB application developer would (generally) need to make a decision as to whether to mark their packets as NQB without specific knowledge whether the traffic would be subjected to traffic protection or not. So, again, I disagree with the assertion that the incentives framework fundamentally depends on the presence of traffic protection.
>>
>>4.      Security: The incentives above don't address malicious sources. While traffic protection is the remedy for this, some network environments have other ways to address malicious sources (e.g. only approved applications are deployed in the network, or traffic conditioning is performed at the network edge).
>>
>>I definitely agree that traffic protection is the preferred implementation, but I disagree that it needs to be made mandatory to implement.
>>
>>As a compromise, I'd like to suggest that we strengthen the recommendation around the implementation of traffic protection, and eliminate some of the language that seems of offer rationales to ignore that recommendation, futher I'd like to suggest that we mandate some mechanism that a network operator can use to detect and avoid abuse.
>>
>>Specifically, the suggestion is that we address your concern about abuse of the code point by adding a mandatory requirement that NQB PHB implementations provide statistics that can be used by the network operator to detect whether abuse is occurring. These statistics could be as simple as packet and drop counters. This requirement would ensure that operators who configure the NQB PHB have the ability to track the amount of packet drop that is occurring due to traffic overrunning the shallow buffer, and then take action if they feel as though the PHB is causing more issues than it is solving in their environment. Those actions could include disabling the PHB, identifying and dealing with the sources of malicious traffic directly, or pursuing a feature request with the equipment manufacturer to add a traffic protection function.
>>
>>In addition, I think we can delete the words in section 10: "but recognizes that other options might be more desirable in certain situations." so that the recommendation to implement traffic protection isn't watered down.
>>
>>Regarding the paragraph in 5.2 discussing situations where traffic protection is potentially not needed, we could rework the paragraph to emphasize that the decision by an implementer to not implement traffic protection might limit the deployment/usage of their NQB PHB implementation to a small subset of potential sitations, and it would put the onus on the operator to monitor usage and take remediations manually rather than automatically dealing with misbehaving traffic. We can also add text to more fully specify the implications of ignoring the recommendation. That, I think, would strengthen the SHOULD as opposed to offering rationales for ignoring it.
>>
>>-
>>Reply to this email directly, view it on GitHub [github.com]<https://urldefense.com/v3/__https:/github.com/gwhiteCL/NQBdraft/issues/48*issuecomment-2244060936__;Iw!!LpKI!jyiVIyRb0wHGFj6E5pa6Rm73RYDbMxjO3w3_EPIu0Igv6c7N8-NWOQisrmDR8o9RxjsUqJKazSDQ4_HKgrRJn3skGw$>, or unsubscribe [github.com]<https://urldefense.com/v3/__https:/github.com/notifications/unsubscribe-auth/AB2VULQNPSLLSSFSGIZRZP3ZNWTVRAVCNFSM6AAAAABKRH2VICVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDENBUGA3DAOJTGY__;!!LpKI!jyiVIyRb0wHGFj6E5pa6Rm73RYDbMxjO3w3_EPIu0Igv6c7N8-NWOQisrmDR8o9RxjsUqJKazSDQ4_HKgrRNUJ0Ebg$>.
>>You are receiving this because you were mentioned.Message ID:
>><gwhiteCL/NQBdraft/issues/48/2244060936@github.com<mailto:gwhiteCL/NQBd
>>raft/issues/48/2244060936@github.com>>
>
>--
>Sent from my Android device with K-9 Mail. Please excuse my brevity.

-- 
Sent from my Android device with K-9 Mail. Please excuse my brevity.