<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.17 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-wang-ppm-dap-taskprov-01" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.15.1 -->
  <front>
    <title>In-band Task Provisioning for DAP</title>
    <seriesInfo name="Internet-Draft" value="draft-wang-ppm-dap-taskprov-01"/>
    <author fullname="Shan Wang">
      <organization>Apple Inc.</organization>
      <address>
        <email>shan_wang@apple.com</email>
      </address>
    </author>
    <author fullname="Christopher Patton">
      <organization>Cloudflare</organization>
      <address>
        <email>chrispatton+ietf@gmail.com</email>
      </address>
    </author>
    <date year="2022" month="October" day="24"/>
    <area>Security</area>
    <workgroup>Privacy Preserving Measurement</workgroup>
    <keyword>next generation</keyword>
    <keyword>unicorn</keyword>
    <keyword>sparkling distributed ledger</keyword>
    <abstract>
      <t>An extension for the Distributed Aggregation Protocol (DAP) is specified that
allows the task configuration to be provisioned in-band.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://wangshan.github.io/draft-wang-ppm-dap-taskprov/draft-wang-ppm-dap-taskprov.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-wang-ppm-dap-taskprov/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Privacy Preserving Measurement Working Group mailing list (<eref target="mailto:ppm@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/ppm/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/ppm/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/wangshan/draft-wang-ppm-dap-taskprov"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>The DAP protocol <xref target="DAP"/> enables secure aggregation
of a set of reports submitted by Clients. This process is centered around a
"task" that determines, among other things, the cryptographic scheme to use for
the secure computation (a Verifiable Distributed Aggregation Function
<xref target="VDAF"/>), how reports are partitioned into
batches, and privacy parameters such as the minimum size of each batch. Before a
task can be executed, it is necessary to first provision the Clients,
Aggregators, and Collector with the task's configuration.</t>
      <t>However, The core DAP specification does not define a mechanism for provisioning
tasks. this document describes a mechanism designed to fill this gap. Its key
feature is that task configuration is performed completely in-band. It relies
solely on the upload channel and the metadata carried by reports themselves.</t>
      <t>This method presumes the existence of a logical "task author" (written as
"Author" hereafter) who is capable of pushing configurations to Clients. All
parameters required by downstream entities (the Aggregators and Collector) are
encoded in an extension field of the Client's report. There is no need for
out-of-band task orchestration between Leader and Helpers, therefore making
adoption of DAP easier.</t>
      <t>The extension is designed with the same security and privacy considerations of
the core DAP protocol. The Author is not regarded as a trusted third party: It
is incumbent on all protocol participants to verify the task configuration
disseminated by the Author and opt-out if the parameters are deemed insufficient
for privacy. In particular, adopters of this extension should presume the
Author is under the adversary's control. In fact, we expect in a real-world
deployment that the Author may be implemented by one of the Aggregators or
Collector.</t>
      <t>Finally, the DAP protocol requires configuring the entities with a variety of
assets that are not task-specific, but are important for establishing
Client-Aggregator, Collector-Aggregator, and Aggregator-Aggregator
relationships. These include:</t>
      <ul spacing="normal">
        <li>The Collector's HPKE <xref target="RFC9180"/> configuration used by the Aggregators to
encrypt aggregate shares.</li>
        <li>Any assets required for authenticating HTTP requests.</li>
      </ul>
      <t>This specification does not specify a mechanism for provisioning these assets;
as in the core DAP protocol, these are presumed to be configured out-of-band.</t>
      <t>Note that we consider the VDAF verification key <xref target="VDAF"/>, used by the
Aggregators to aggregate reports, to be a task-specific asset. This document
specifies how to derive this key for a given task from a pre-shared secret,
which in turn is presumed to be configured out-of-band.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <t>This document uses the same conventions for error handling as
<xref target="DAP"/>. In addition, this document extends the core
specification by adding the following error types:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Type</th>
            <th align="left">Description</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">invalidTask</td>
            <td align="left">An Aggregator has opted out of the indicated task as described in <xref target="provisioning-a-task"/></td>
          </tr>
        </tbody>
      </table>
      <t>The terms used follow those described in <xref target="DAP"/>. The
following new terms are used:</t>
      <dl>
        <dt>Task configuration:</dt>
        <dd>
          <t>The non-secret parameters required to create a task in task provision.</t>
        </dd>
        <dt>Task author:</dt>
        <dd>
          <t>The entity that defines a task's configuration.</t>
        </dd>
      </dl>
    </section>
    <section anchor="the-taskprov-extension">
      <name>The "task_prov" Extension</name>
      <t>A new extension is defined:</t>
      <artwork><![CDATA[
enum {
    task_prov(0xff00),
    (65535)
} ExtensionType;
]]></artwork>
      <t>When the Client includes this extension with its report, the body of the
extension is a <tt>TaskConfig</tt> defined follows:</t>
      <artwork><![CDATA[
struct {
    /* Info specific for a task. */
    opaque task_info<1..2^8-1>;

    /* A list of URLs relative to which an Aggregator's API endpoints
    can be found. Defined in I-D.draft-ietf-ppm-dap-02. */
    Url aggregator_endpoints<1..2^16-1>;

    /* This determines the query type for batch selection and the
    properties that all batches for this task must have. */
    QueryConfig query_config;

    /* Time up to which Clients are allowed to upload to this task.
    Defined in I-D.draft-ietf-ppm-dap-02. */
    Time task_expiration;

    /* Determines the VDAF type and its config parameters. */
    VdafConfig vdaf_config;
} TaskConfig;
]]></artwork>
      <t>The purpose of <tt>TaskConfig</tt> is to define all parameters that are necessary for
configuring an Aggregator. It includes all the fields to be associated with a
task. (See task configuration in <xref target="DAP"/>.) In
addition to the Aggregator endpoints, maximum batch query count, and task
expiration, the structure includes an opaque <tt>task_info</tt> field that is specific
to a deployment. For example, this can be a string describing the purpose of
this task.</t>
      <t>The <tt>query_config</tt> field defines the DAP query configuration used to guide batch
selection. It is defined as follows:</t>
      <artwork><![CDATA[
struct {
    Duration time_precision;      /* I-D.draft-ietf-ppm-dap-02 */
    uint16 max_batch_query_count; /* I-D.draft-ietf-ppm-dap-02 */
    uint32 min_batch_size;
    QueryType query_type;         /* I-D.draft-ietf-ppm-dap-02 */
    select (QueryConfig.query_type) {
        case time_interval: Empty;
        case fixed_size:    uint32 max_batch_size;
    }
} QueryConfig;
]]></artwork>
      <t>The <tt>vdaf_config</tt> defines the configuration of the VDAF in use for this task. It
is structured as follows (codepoints are as defined in <xref target="VDAF"/>):</t>
      <artwork><![CDATA[
enum {
    prio3_aes128_count(0x00000000),
    prio3_aes128_sum(0x00000001),
    prio3_aes128_histogram(0x00000002),
    poplar1_aes128(0x00001000),
    (2^32-1)
} VdafType;

struct {
    DpConfig dp_config;
    VdafType vdaf_type;
    select (VdafConfig.vdaf_type) {
        case prio3_aes128_count: Empty;
        case prio3_aes128_sum: uint8; /* bit length of the summand */
        case prio3_aes128_histogram: uint64<8..2^24-8>; /* buckets */
        case poplar1_aes128: uint16; /* bit length of input string */
    }
} VdafConfig;
]]></artwork>
      <t>Apart from the VDAF-specific parameters, this structure includes a mechanism for
differential privacy (DP). This field, <tt>dp_config</tt>, is structured as follows:</t>
      <artwork><![CDATA[
enum {
    reserved(0), /* Reserved for testing purposes */
    none(1),
    (255)
} DpMechanism;

struct {
    DpMechanism dp_mechanism;
    select (DpConfig.dp_mechanism) {
        case none: Empty;
    }
} DpConfig;
]]></artwork>
      <ul empty="true">
        <li>
          <t>OPEN ISSUE: Should spell out definition of <tt>DpConfig</tt> for various differential
privacy mechanisms and parameters. See issue
<eref target="https://github.com/cfrg/draft-irtf-cfrg-vdaf/issues/94">#94</eref> for discussion.</t>
        </li>
      </ul>
      <t>The definition of <tt>Time</tt>, <tt>Duration</tt>, <tt>Url</tt>, and <tt>QueryType</tt> follow those in
<xref target="DAP"/>.</t>
      <section anchor="construct-task-id">
        <name>Deriving the Task ID</name>
        <t>When using the <tt>task_prov</tt> extension, the task ID is computed as follows:</t>
        <artwork><![CDATA[
task_id = SHA-256(task_config)
]]></artwork>
        <t>where <tt>task_config</tt> is the <tt>TaskConfig</tt> structure disseminated by the Author.
Function SHA-256() is as defined in <xref target="SHS"/>.</t>
      </section>
      <section anchor="vdaf-verify-key">
        <name>Deriving the VDAF Verification Key</name>
        <t>When a Leader and Helper implement the <tt>task_prov</tt> extension in the context of a
particular DAP deployment, they <bcp14>SHOULD</bcp14> compute the shared VDAF verification key
<xref target="VDAF"/> as described in this section.</t>
        <t>The Aggregators are presumed to have securely exchanged a pre-shared secret
out-of-band. The length of this secret <bcp14>MUST</bcp14> be 32 bytes. Let us denote this
secret by <tt>verify_key_init</tt>.</t>
        <t>Let <tt>VERIFY_KEY_SIZE</tt> denote the length of the verification key for the VDAF
indicated by the task configuration. (See <xref target="VDAF"/>, Section 5.)</t>
        <t>The VDAF verification key used for the task is computed as follows:</t>
        <artwork><![CDATA[
verify_key = HKDF-Expand(
    HKDF-Extract(
        task_prov_salt,  # salt
        verify_key_init, # IKM
    ),
    task_id,             # info
    VERIFY_KEY_SIZE,     # L
)
]]></artwork>
        <t>where <tt>task_prov_salt</tt> is defined to be the SHA-256 hash of the octet string
"dap-taskprov" and <tt>task_id</tt> is as defined in <xref target="construct-task-id"/>. Functions
HKDF-Extract() and HKDF-Expand() are as defined in <xref target="RFC5869"/>. Both functions
are instantiated with SHA-256.</t>
      </section>
      <section anchor="provisioning-a-task">
        <name>Configuring a Task</name>
        <t>Prior to participating in a task, each protocol participant must determine if
the <tt>TaskConfig</tt> disseminated by the Author can be configured. The participant
is said to "opt in" to the task if the derived task ID (see
<xref target="construct-task-id"/>) corresponds to an already configured task or the task ID
is unrecognized and therefore corresponds to a new task.</t>
        <t>A protocol participant <bcp14>MAY</bcp14> "opt out" of a task if:</t>
        <ol spacing="normal" type="1"><li>The derived task ID corresponds to an already configured task, but the task
configuration disseminated by the Author does not match the existing
configuration.</li>
          <li>The VDAF, DP, or query configuration is deemed insufficient for privacy.</li>
          <li>A secure connection to one or both of the Aggregator endpoints could not be
established.</li>
          <li>The task lifetime is too long.</li>
        </ol>
        <t>A protocol participant <bcp14>MUST</bcp14> opt out if the task has expired.</t>
        <t>The behavior of each protocol participant is determined by whether or not they
opt in to a task.</t>
      </section>
      <section anchor="hpke-config-no-task-id">
        <name>Supporting HPKE Configurations Independent of Tasks</name>
        <t>In DAP, Clients need to know the HPKE configuration of each Aggregator before
sending reports. (See HPKE Configuration Request in
<xref target="DAP"/>.) However, in a DAP deployment that supports
the <tt>task_prov</tt> extension, if a Client requests the Aggregator's HPKE
configuration with the task ID computed as described in <xref target="construct-task-id"/>,
the task ID may not be configured in the Aggregator yet, because the Aggregator
is still waiting for the first Client report with the <tt>task_prov</tt> extension
to arrive.</t>
        <t>To mitigate this issue, if an Aggregator wants to support the <tt>task_prov</tt>
extension, it <bcp14>SHOULD</bcp14> choose which HPKE configuration to advertise to Clients
independent of the task ID. It <bcp14>MAY</bcp14> continue to support per-task HPKE
configurations for other tasks that are configured out-of-band.</t>
        <t>In addition, if a Client wants to include the <tt>task_prov</tt> extension in its
report, it <bcp14>SHOULD NOT</bcp14> specify the <tt>task_id</tt> parameter when requesting the HPKE
configuration from an Aggregator.</t>
      </section>
    </section>
    <section anchor="client-behavior">
      <name>Client Behavior</name>
      <t>Upon receiving a <tt>TaskConfig</tt> from the Author, the Client decides whether to
opt in to the task as described in <xref target="provisioning-a-task"/>. If the Client opts
out, it <bcp14>MUST</bcp14> not attempt to upload reports for the task.</t>
      <ul empty="true">
        <li>
          <t>OPEN ISSUE: In case of opt-out, would it be useful to specify how to report
this to the Author?</t>
        </li>
      </ul>
      <t>Once the client opts in to a task, it <bcp14>MAY</bcp14> begin uploading reports for the task.
Each report <bcp14>MUST</bcp14> offer the <tt>task_prov</tt> extension with the <tt>TaskConfig</tt>
disseminated by the Author as the extension payload. In addition, the report's
task ID <bcp14>MUST</bcp14> be computed as described in <xref target="construct-task-id"/>.</t>
    </section>
    <section anchor="leader-behavior">
      <name>Leader Behavior</name>
      <section anchor="upload-protocol">
        <name>Upload Protocol</name>
        <t>Upon receiving a <tt>Report</tt> from the Client with the <tt>task_prov</tt> extension, if the
Leader does not support the extension, it <bcp14>MUST</bcp14> ignore the extension payload and
proceed as usual. In particular, if the task ID is not recognized, then it <bcp14>MUST</bcp14>
abort the upload request with "unrecognizedTask".</t>
        <ul empty="true">
          <li>
            <t>NOTE: This behavior assumes unrecognized extensions are to be ignored. See
<eref target="https://github.com/ietf-wg-ppm/draft-ietf-ppm-dap/issues/334">#334</eref> for
discussion.</t>
          </li>
        </ul>
        <t>Otherwise, if the Leader does support the extension, it first attempts to parse
the payload. If parsing fails, it <bcp14>MUST</bcp14> abort with "unrecognizedMessage".</t>
        <t>Next, it checks that the task ID included in the report matches the task ID
derived from the extension payload as specified in <xref target="construct-task-id"/>. If the
task ID does not match, then the Leader <bcp14>MUST</bcp14> abort with "unrecognizedTask".</t>
        <t>The Leader then decides whether to opt in to the task as described in
<xref target="provisioning-a-task"/>. If it opts out, it <bcp14>MUST</bcp14> abort the upload request with
"invalidTask".</t>
        <ul empty="true">
          <li>
            <t>OPEN ISSUE: In case of opt-out, would it be useful to specify how to report
this to the Author?</t>
          </li>
        </ul>
        <t>Finally, once the Leader has opted in to the task, it completes the upload
request as usual.</t>
      </section>
      <section anchor="aggregate-protocol">
        <name>Aggregate Protocol</name>
        <t>When the Leader opts in to a task, it derives the VDAF verification key for that
task as described in <xref target="vdaf-verify-key"/>.</t>
      </section>
      <section anchor="collect-protocol">
        <name>Collect Protocol</name>
        <t>The Collector might issue a collect request for a task provisioned by the
<tt>task_prov</tt> extension prior to opting in to the task. In this case, the Leader
would need to abort the collect request with "unrecognizedTask". When it does
so, it <bcp14>SHOULD</bcp14> also include a "Retry-After" header in its HTTP response
indicating the time after which the Collector should retry its request.</t>
        <ul empty="true">
          <li>
            <t>TODO: Find RFC reference for "Retry-After".</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t>OPEN ISSUE: This semantics is awkward, as there's no way for the Leader to
distinguish between Collectors who support the extension and those that don't.
We should consider adding an extension field to <tt>CollectReq</tt>.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="helper-behavior">
      <name>Helper Behavior</name>
      <t>Upon receiving of an <tt>AggregateInitializeReq</tt> from the Leader, If the Helper
does not support the <tt>task_prov</tt> extension, it <bcp14>MUST</bcp14> ignore the extension
payload and process each <tt>ReportShare</tt> as usual. In particular, if the Helper
does not recognize the task ID, it <bcp14>MUST</bcp14> abort the aggregate request with error
"unrecognizedTask". Otherwise, if the Helper supports the extension, it proceeds
as follows.</t>
      <t>First, the Helper checks that all report shares carried by the request pertain
to the same task. In particular, it checks that:</t>
      <ol spacing="normal" type="1"><li>Either all report shares have the <tt>task_prov</tt> extension or none do. If not
the Helper <bcp14>MUST</bcp14> abort with "unrecognizedMessage".</li>
        <li>All report shares with the <tt>task_prov</tt> extension have the same extension payload. If
not, the Helper <bcp14>MUST</bcp14> abort with "unrecognizedMessage".</li>
      </ol>
      <ul empty="true">
        <li>
          <t>OPEN ISSUE: This awkward input validation step could be skipped if
<tt>AggregateInitializeReq</tt> had an extension field that we could stick the task
configuration in. This would also save significantly in overhead.</t>
        </li>
      </ul>
      <t>Next, the Helper attempts to parse the extension payload. If parsing fails, it
<bcp14>MUST</bcp14> abort with "unrecognizedMessage".</t>
      <t>Next, the Helper checks that the task ID included in the message matches the
task ID derived from the extension payload as defined in <xref target="construct-task-id"/>.
If not, the Helper <bcp14>MUST</bcp14> abort with "unrecognizedTask".</t>
      <t>Next, the Helper decides whether to opt in to the task as described in
<xref target="provisioning-a-task"/>. If it opts out, it <bcp14>MUST</bcp14> abort the aggregate request
with "invalidTask".</t>
      <ul empty="true">
        <li>
          <t>OPEN ISSUE: In case of opt-out, would it be useful to specify how to report
this to the Author?</t>
        </li>
      </ul>
      <t>Finally, the Helper completes the aggregate initialize request as usual, deriving the VDAF
verification key for the task as described in <xref target="vdaf-verify-key"/>.</t>
    </section>
    <section anchor="collector-behavior">
      <name>Collector Behavior</name>
      <t>Upon receiving a <tt>TaskConfig</tt> from the Author, the Collector first decides
whether to opt in to the task as described in <xref target="provisioning-a-task"/>. If the
Collector opts out, it <bcp14>MUST</bcp14> not attempt to upload reports for the task.</t>
      <t>Otherwise, once opted in, the Collector <bcp14>MAY</bcp14> begin to issue collect requests for
the task. The task ID for each request <bcp14>MUST</bcp14> be derived from the <tt>TaskConfig</tt> as
described in <xref target="provisioning-a-task"/>.</t>
      <t>If the Leader responds to a collect request with an "unrecognizedTask" error,
but the HTTP response includes a "Retry-After" header, the Collector <bcp14>SHOULD</bcp14>
retry its collect request after waiting for the duration indicated by the
header.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This document has the same security and privacy considerations as the core DAP
specification. In particular, for privacy we consider the Author to be under
control of the adversary. It is therefore incumbent on protocol participants to
verify the privacy parameters of a task before opting in.</t>
      <t>In addition, the <tt>task_prov</tt> extension is designed to maintain robustness even
when the Author misbehaves, or is merely misconfigured. In particular, if the
Clients and Aggregators have an inconsistent view of the the task configuration,
then aggregation of reports will fail. This is guaranteed by the binding of
report metadata to encrypted input shares provided by HPKE encryption.</t>
      <ul empty="true">
        <li>
          <t>OPEN ISSUE: What if the Collector and Aggregators don't agree on the task
configuration? Decryption should fail.</t>
        </li>
      </ul>
      <t>A malicious coalition of Clients might attempt to pollute an Aggregator's
long-term storage by uploading reports for many (thousands or perhaps millions)
of distinct tasks. While this does not directly impact tasks used by honest
Clients, it does present a Denial-of-Service risk for the Aggregators
themselves.</t>
      <ul empty="true">
        <li>
          <t>TODO: Suggest mitigations for this. Perhaps the Aggregators need to keep track
of how many tasks in total they are opted in to?</t>
        </li>
      </ul>
      <t>The HKDF <xref target="RFC5869"/> extraction function is used to derive the task ID. An
extractor is not required for security. In fact, a collision-resistant hash
function would be sufficient for our application. The choice to use an extractor
is conservative in that it allows the derived task ID to be treated as
pseudorandom whenever the task configuration itself has high min-entropy from
the perspective of the adversary. However, whether this is the case depends on
the specific threat model. We note that, in the the threat model for the core
DAP protocol, the task configuration is known to the attacker and thus has no
entropy.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <ul empty="true">
        <li>
          <t>NOTE(cjpatton) Eventually we'll have IANA considerations (at the very least
we'll need to allocate a codepoint) but we can leave this blank for now.</t>
        </li>
      </ul>
    </section>
  </middle>
  <back>
    <references>
      <name>Normative References</name>
      <reference anchor="SHS">
        <front>
          <title>Secure Hash Standard</title>
          <author>
            <organization/>
          </author>
          <date year="2015" month="August" day="04"/>
        </front>
        <seriesInfo name="FIPS PUB 180-4" value=""/>
      </reference>
      <reference anchor="DAP">
        <front>
          <title>Distributed Aggregation Protocol for Privacy Preserving Measurement</title>
          <author fullname="Tim Geoghegan" initials="T." surname="Geoghegan">
            <organization>ISRG</organization>
          </author>
          <author fullname="Christopher Patton" initials="C." surname="Patton">
            <organization>Cloudflare</organization>
          </author>
          <author fullname="Eric Rescorla" initials="E." surname="Rescorla">
            <organization>Mozilla</organization>
          </author>
          <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
            <organization>Cloudflare</organization>
          </author>
          <date day="22" month="September" year="2022"/>
          <abstract>
            <t>   There are many situations in which it is desirable to take
   measurements of data which people consider sensitive.  In these
   cases, the entity taking the measurement is usually not interested in
   people's individual responses but rather in aggregated data.
   Conventional methods require collecting individual responses and then
   aggregating them, thus representing a threat to user privacy and
   rendering many such measurements difficult and impractical.  This
   document describes a multi-party distributed aggregation protocol
   (DAP) for privacy preserving measurement (PPM) which can be used to
   collect aggregate data without revealing any individual user's data.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-ppm-dap-02"/>
      </reference>
      <reference anchor="VDAF">
        <front>
          <title>Verifiable Distributed Aggregation Functions</title>
          <author fullname="Richard Barnes" initials="R." surname="Barnes">
            <organization>Cisco</organization>
          </author>
          <author fullname="Christopher Patton" initials="C." surname="Patton">
            <organization>Cloudflare</organization>
          </author>
          <author fullname="Phillipp Schoppmann" initials="P." surname="Schoppmann">
            <organization>Google</organization>
          </author>
          <date day="24" month="August" year="2022"/>
          <abstract>
            <t>   This document describes Verifiable Distributed Aggregation Functions
   (VDAFs), a family of multi-party protocols for computing aggregate
   statistics over user measurements.  These protocols are designed to
   ensure that, as long as at least one aggregation server executes the
   protocol honestly, individual measurements are never seen by any
   server in the clear.  At the same time, VDAFs allow the servers to
   detect if a malicious or misconfigured client submitted an input that
   would result in an incorrect aggregate result.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-vdaf-03"/>
      </reference>
      <reference anchor="RFC9180">
        <front>
          <title>Hybrid Public Key Encryption</title>
          <author fullname="R. Barnes" initials="R." surname="Barnes">
            <organization/>
          </author>
          <author fullname="K. Bhargavan" initials="K." surname="Bhargavan">
            <organization/>
          </author>
          <author fullname="B. Lipp" initials="B." surname="Lipp">
            <organization/>
          </author>
          <author fullname="C. Wood" initials="C." surname="Wood">
            <organization/>
          </author>
          <date month="February" year="2022"/>
          <abstract>
            <t>This document describes a scheme for hybrid public key encryption (HPKE). This scheme provides a variant of public key encryption of arbitrary-sized plaintexts for a recipient public key. It also includes three authenticated variants, including one that authenticates possession of a pre-shared key and two optional ones that authenticate possession of a key encapsulation mechanism (KEM) private key. HPKE works for any combination of an asymmetric KEM, key derivation function (KDF), and authenticated encryption with additional data (AEAD) encryption function. Some authenticated variants may not be supported by all KEMs. We provide instantiations of the scheme using widely used and efficient primitives, such as Elliptic Curve Diffie-Hellman (ECDH) key agreement, HMAC-based key derivation function (HKDF), and SHA2.</t>
            <t>This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9180"/>
        <seriesInfo name="DOI" value="10.17487/RFC9180"/>
      </reference>
      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner">
            <organization/>
          </author>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba">
            <organization/>
          </author>
          <date month="May" year="2017"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
      <reference anchor="RFC5869">
        <front>
          <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
          <author fullname="H. Krawczyk" initials="H." surname="Krawczyk">
            <organization/>
          </author>
          <author fullname="P. Eronen" initials="P." surname="Eronen">
            <organization/>
          </author>
          <date month="May" year="2010"/>
          <abstract>
            <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications.  The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions.  This document is not an Internet  Standards Track specification; it is published for informational  purposes.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="5869"/>
        <seriesInfo name="DOI" value="10.17487/RFC5869"/>
      </reference>
    </references>
    <section numbered="false" anchor="contributors">
      <name>Contributors</name>
      <ul empty="true">
        <li>
          <t>CP: Unless the order is meaningful, consider alphabetizing these names.</t>
        </li>
      </ul>
      <t>Junye Chen
Apple Inc.
junyec@apple.com</t>
      <t>Suman Ganta
Apple Inc.
sganta2@apple.com</t>
      <t>Gianni Parsa
Apple Inc.
gianni_parsa@apple.com</t>
      <t>Michael Scaria
Apple Inc.
mscaria@apple.com</t>
      <t>Kunal Talwar
Apple Inc.
ktalwar@apple.com</t>
      <t>Christopher A. Wood
Cloudflare
caw@heapingbits.net</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA8U863bbNpr/8RRY5UftriTHuXRTZ6ZTNXYm3iaNJ3aa050z
a0EkJGFCkVyCtKKmnmeZZ5kn2+8CgKBEue7ZObM+p41NgcB3v0Oj0UjUps70
iRyc56OZylN5pexHeVEVN8aaIjf5Qs6LSp5OLgYiUbVeFNXmRJp8XgiRFkmu
VvByWql5PVqrfDEqy9UoVeWohm1K2GX08FjYZrYyFrerNyUsPz+7einlA6ky
W8DJJk91qeF/eT0YAiCT7+AfOHNw/u7q5UDkzWqmqxORwuknIilyq3Pb2BNZ
V40WNyfysVCVVrDRpU6aytSbgVgX1cdFVTQlPL2ozI1KNoCTtrq6QYzeaGWb
Sq/wRPFRb2B5eiLkSOb6Uy0XOteVqgFcfNTkJikq+tWWqvqY4QapsXVlZk2t
U5npdKErcaPzBuCT8r7nSsnUGHwAYPHTP+KL+HylTAbPgZTfGl3Px0W1wMeq
SpbweFnXpT05OsJV+Mjc6LFfdoQPjmZVsbb6CN4/wvcWpl42M3gTGWSXKj+6
g1/4QgaUtnV0lH9xzFuNTXHXFnd9Nl7Wq2wghGrqZVEhzeE8KedNlrEoXcIx
8gO8Ss8BJZWbn4kZJ3JSlpmW53kypg+1oxNCdo2nfatwwTgpVnDCzs4vlhVw
rSiXupIXqq6RvTtHvMiKJp0DXXXniATfLemlf0daf7vAD9xJeVGt4PUb4D68
dPnq8oTelV6zSCy1fKXsUl7WoGOqSge8hGRaPnp4/HT08Nno4RN+CuJitEUd
O5Evzy8u5cX77+Txs4ejJ0Lg0/Y4MRqNpJqBMKqkFmKSSxBgUA/AhdS2Xmp5
GsnqZLGo9IJwRR2vi6TI5AEo96E0FuRbJ2ZuYF29VLVQWQZyRHsg+ySo3tws
GlYNWRdypmXpDQW8ZNiCjB1YK5OmmRbiAXCsroq0SUilxBXCNLnAV/n8z5//
Df7+/fnodMySgxQOkvPw0e2t1LmaZRogZFKqFg1RzKWC57WEXypdFlUNy9Dg
1IjwbAMsNaBvdiyvloAjnJpoaxHdBB7rChYpUDywfEoMEM8BYS9TDR+uTK7t
UKpVAfpZ1Cg69RJ0FZ4hWZJqU9bFolLl0iTSJktQbSRMYzWSX+AaBzKIStnU
TLoDJX8EFs8NIrWXPy+bnCkG9PnxdPIyJlAFBErm1WJ0k6r56OHj29vDoVwW
60ABEGAJ1gpE0POmLsRM1QAi4gPYls48wSpQD8AVyZYspWKOA+Zm1aykNT9r
JK1W8BltMJbfaUAOuCBYLEBhQRL0J0AUcBhKUyN1c410VtUGCTI3la1bYaET
HF+GwiNdVA60F0WW6QT+lmuwN0EAv7BdEQRBe1Ws9Y2uhhKFKkGgULKcHCdM
x7QAwckL5Ogc2AnSstIJmAxjV6QjZeTrCCMQlRpFBdxbg6YaXrQJcAi2id+F
p2aBtCX8soxfWqhyLM+BA+BWxFyrGplvLMtUjxqhSOoKdRp2QiHJgBfZJigT
7AVMBVJZYYsMP3Hka8qsUPAKQJPrjOhGfNO1AquigC1VZVgDvFDA5yursxtt
x6iGcDSsXhYoC9oCqsx5/QkEUucJsV3JrFgAJTNJuiHZbg/kwbpCBctBXMRg
4h6CemgQT10dyvWyIBVTJck47FQ2FjWni75F4gUFnWSZiMSx0v/TmIpRSIt1
Dmqi1QpsAUo1AHuA0EbC05WdQ9QBAXgUKck/fBobR6OzFMFqJfEL6wiFlkIz
1/IC5BheR2UumnpUzDlIIloUFWpT7Rg50/VaA0Fea5WCmcBVr3QGvGVbUbHO
rBS6eqHSoqS3AAKUWIgLjK7GbBxbKFEIvZQFVbBAH7YqEOp0VBljI5NqT9pi
TgYoqIU3uISfZKYxkihiC/BKaAtRyCGysjW5AVOlZEcg5juvBSw2eYLxGGgF
wAceojXjZG4SU6q8JrbeoInb7HEfAiIoq8HIKGel6xYkRAnIMwKCS8MciqQC
LVuq9YqYaps56DlyT7AqEyFAaXIHTgOuHIwKkhtfJoYDFi2J7bJosqABeJho
KQNeQbMTVSmgg9aMjRD4s4xOmYPfHco1Mg2MTk1yBsRU2QhiyiwVENlmxQat
yD/+ziagxXOlNmg4Deo8rmBCgLn2chnLNghgEG2Qk5dAuSzbsBvqeFOnNa2t
RKUjvfZ6Q5Kk5I0C+wASBGKigBe1s1FIX5QI5NnIW9KhBP9EHwG0oCLAY7Kd
IP6g34Y0W7AajVqoh602dp4ig9u/o48EWDoW3qUpyWND6IwilzUphjtfkuSG
TYEXry6+P8MA4t3LF19DhAShQte8giduxSsiJ3hDiO5ycuAhnAC1WgKOaB2/
lJMclIvpEgwRoowWEEmJ3gUo++rq6oIWACmCWd3jgPjx5k4PhJACznzyc+AM
ilSvGg/9UnT1LL6pi8o8DeBBZLUAuh+KWjOb1zqYC9oeIwxWWQ82ODDpQo/b
22FMSdGlZEQ/52mGDg7VlSLGygVi3rsKH3VaCmDgRQAJoltWVASCqA5ZDGRY
bEnmVbGCJ4D0iBiWojmsdD0Ua4jDlkSxpmLfek/CPACpym+Qr2g5UUBPMVqg
8MmyWUZQMFG0cvDm/eUVpqr4r/zhLf3+7uxP78/fnZ3i75evJq9fh1+EW3H5
6u3716ftb+2bL96+eXP2wym/DE9l55EYvJn8NGC1Gby9uDp/+8Pk9YDlIg5T
UBAYTYOBLaBek0EXPn4hN/jdi4t//P34iVOaR8fHX4PS8B/Pjv/jCfyxBvnm
04oc4g3+E9i+EZBfaVWRkQPLD87d1JDDD9FpgB1d5xQBoPb8GSnzlxP5u1lS
Hj/5xj1AhDsPPc06D4lmu092XmYi9jzqOSZQs/N8i9JdeCc/df72dI8eOmUP
9AcNsa2HTiJ5IlNZVfB/0PqUKgjAll/Pe8jFqDQlMRxusZt8WGqDcRBdqwOq
im864z8vMJnDvxgOLD1YsKi/yCv4TbqfX0DqUVQ4Nvnn/vwifjkZRT/dv/65
P3AWCOmNykxK5axfwJpH5h+4YDHCYCvgva3JU6SddtGdsrKjN58/x2Z6pKik
AdryC1sHTBYtG0mmNexZWL29x69zHDYTLbdyvXZbo3bj9sC0q51w6kSckGvM
i3zEtlD2BdJgHeAzNNRsmcmG4L8BtbHb3ddneFsKHTY+L8YsyrodenKyB/QK
pQvXVFGSZz7aEmJCGG1FuLgh4vW3v/0NAnZIOj9THSTscPDw03z+8OHhkB4f
fPX06eOnh+K23Rdl+Dm9Lj4sdZxe+uDBbsd9FASZ2sf8HEjNinTjxEF0YFRy
imR5QahOPciO09aBDqlAAyEgA3/0JejuvAihgPNiiNNYfnnEpadSQdzAeGJd
53fH4/Gj/342Ov7mufCbTCSEVySj79+9Rmgzqv0gK9nZqViygR2Ti3PgV1oW
4AQs7eIS9DkWOcbs11gc98phgPB9lQXvXlTXYV+G9PirDqhsDUPZhCgK+GEF
AG0MEoAKCOCtMX5D0rqslXYATkO2RBEqB6LgYlzFwtWyMI1G4VxBdgI6fKMD
nH/CY5g7fOQ1S2UEnFlhztzSzWWdpFdU6WL9cGk1/BbO42rjb6IbnUZ8hbzA
sGq0sJx2aUShF5EIyYEyycBHKhw2/jFVc4cnln4CmreylU+nCaiFZVOVaIVA
fDoCbCwHWlwQybLYWrRZQKjgYPobpxMdmaMSRVAzRYUQzQm29XGgtUViyLZy
8iFYDw4udW9t8X6m8hA0THjvyByLg/xWC4aQan2iahbLHwtlAvpQc5yDIIiW
U2wMWJ2pfBOQy73OToPSTl0tgcgWxf4CA2PZ5n9j+RJh+qQw3XO+3GmmwrOo
rcDOwjvtlnsiEkZi7DSWcg+CN80+J/R47iREANqigdCf6SGCPjIrg0lGH3iH
iTsNpWCQdjDUgDfay+fs79EA7mOel+YGuHP8FXLnmiC59lgBZ57fe4fHj7Ba
6XbAeuXz1iZQdMO7ooY9D+HIfTZnusiDyLqM270OHRnYxAKbiAwUekPkcSLP
VmW9ed5dMjefdEownsTQB/xb6G9BpaNzI52eRoo/7fC8y2kX1pB1MbmvSUdm
zVV0gpzH/JYHWDdj9WET2UoFayfnhYe7brusTPH4Wml7/OgZsxL890P343x4
Zw0kaO2K474VS2zcLMBCtese+XVFmanq2K10nx+3Jx08+u/Hj0bHGC6g7eRI
YUuOS2dR0zLYU29rSX6I4CQ+HbFobfE4rNgRil1q9EvGNkVOSDiekRbMTC0z
nS/AcjqmwoIVGi4nqP27BKrxXl89+d0z9NqPnoyefcP7NslHrG/s7NKh6YlT
0x5QTF5C/OyMl9vl1lG6I7cTrMZx3u5lsq0KtL7HmcU+y9stmYjUzOeQa0Jc
qrJQ/zw4vTh01QUyiEM5DSydDuU+Wd8VYe7Y6vQApAixfuf+ZgXSlio/zjoH
8kHsrQ+Og9g9pRD1tHzj4d4VuzdtL6G8XrXrYiHzwjmOl+xIGZ7dkatbOrvD
g2/k24uzH+T55eX7M+yzUt0TmAAOG7OgNNQ7KFrwL08JZ6wVFg2YgIjssKEn
fACMSydx3IIe3ljbaFj+5wdfP/nLgW8qu15yUqyOsJV11NfaOqJX7dHXTw4J
jtTYpLE+UVnqbagx7gJOT71rwt8hhp2ym58GlzDtJmkmv08yDqnNA4jdAGfv
oClVOj+Vnx9gLY2YS2nhyKS3LhVprF88DfnMtM1Dhm19HPbBkID6hH3yyRFH
Kn8vL19NRo+efnVAT1i8D5nHa2pcTKMPONbD4+P4r9Ww/XX4sfAdyHAgdYm3
PcHlq8te4pDj+TGuKH6PFcUH1LLk5sDoo954QqndzklbGt9PwLY8Co73EyVK
SrS1f4qD2iCM61jS1YkcrdmiciGxtwwqgrvbqQqwvXLRE4tkpyO1VZvFpMV1
hLMNIIFqs0Bm7xYz434Td2xiF8CnYp5PhTUIIiGOmG3ANo2BjliLAjhzrvYa
K9xa4O+UKX8NaF2j5kwBanxh+uPZu/OXP11/f/bT9eX5f51N2/f1lvPZqRL7
SQOkkWjLKLN9zR8X+EfF5UuXDz4dHzIR+8vRrrxStfveqTEtqqA0r74/fTk6
+1QCOQ/IRLoHNDpxEMxpkLFrqzKQF/lA4i/h8y3yDeHz8+/f0MfO9Ds9Hcr4
5wGPTFFY0SX00H3+WvTocABkGoflnFQhDZxiYkErsKdIau2dshh0ZnvYCjoA
p33KvGvHbsdhEsGKDs0OWVUjuh72h4rvXr54+uyrr3Gr7wqQo3nYjzpKcKJC
jxLSQ4cV25QXcd7JFvfzg75SnBAX4KQqpE5oRZKjpp4cLhnyFENfx5JrCqF4
IQ33TrtVn/0tS5fIte0F1tjoAIq0lSHmDYoSM+aBz1lZkpl73PxIg0s4sFqL
Xr4cYtUXbEtZ5JxoKyzLV2BEN3Gfw7WqYz8jqLUJ+VqxyCHhSH0ZxvWot7fl
IiTnnpN+6r2Z/MRYgdEa8NyAQwpU8ZiJsY3ZvaHn5qOHH3Wom+jcwZfQeltR
4h/GGwzPl22XLh2kaHyG8vSCphD7kmjSxZ0WtIxb0LTZpJ3+yXNn4gBVavFW
cla0NrWvbIEVCgjREPwZlchCt1WnLbBEzszMNaafXNgpZFbkizu4hS7DccvL
HW2DdXEqg9ABuPtMg8tCrfIjQL0bxnU/YgHYMBqWghepl4zNIxZ6lignTaDe
l02J9VdqpWIv90VMaCvP29lQBAHV0YL+L8uPesQ8GeVFFHOd5+jxh6G6R9Mb
cOTHnII9zYfsJMqEWsSDGWkCuM2cOiiuren81i6ckCBQA/iegeShDHNLZJu6
MQpXkizTxYo7QkeDeubq3L4FvSVNrkUuuhh3xqpYF1sfutWx6LE8QxG/i2MM
LKOx4rqwLKLpRoO3nOlEYSWi+xmXIXCGaq1M7WeOuYyIg2MBRyRJC30vWaju
VqGpQREu5Ao2pN40BU2UTzDlOh2htZ9acXTf3l/EZK9DALksMH3ggnKPZCEo
ODhSG6ujSSdhulIdUZMqcGhNMZ41eaNjmCAkJib0sJRL5G5CkZQklHH39rw7
vcVYlgIxXPp9d/RtACHfRGlJg71VP+/Qvo5RR8gOqbPsBddnDT3Syu3+TsmZ
GvYM7HfOQgnxHnwJbJdozkG2ejah+MCuYRg3iVKAE6sM3mzVRWStAnfu2REE
FsZjZWhoLQbzRB0yvagtqq41pOtRy8FP6cXx7Xg7bQeeUcIPUuNGpIZyTW7C
kAaCbs2bjITGEd8NVfDusBvX/4qIFH8Q4i2O+1Ea1cLcMdYMPMjlTC+wmEgg
R6ZxC+oztKdOXdnbYN3gDjlqdTri2Z1DYn5Y0e9Qqg3CtNMy90MpX1jhLZZP
mX6b1SOhczlqK3Tgwt4z//w8dZ8gviMQIiH0mnanKRs65yzcqe0gUWSkuoaJ
UDOLHOO4XvpgrCdoCJrxbmyjsp2BOdMxSu2QoI8YibC5P1ComYcmyDL7Q8Jv
EMeayN4BiTVYiLMTrtaFKENZnkPtRKcBBxuPuBCOKRWYqLT0+HF/bYnc75pu
IhztOmRfYIK3qcIEW3VqTG/RHqzBfAeaxLzYzwf2W07JrctJrBY8zOgldU5P
yd8pg4M0noNM0F3qvcGG3EIjAX+AA+mFZKkTb+87TGPjHVyxU8eVa6nG+YAP
zYN49ohNfD1gf6rIpi9oWjf+dlITUfFOZL2oXLXr6f1day1/3VqLu6y1cRav
Y6XvFGoxiOZLBv8qMx2mPgtvrx1d2oGWLhVYQNxUuY2QER6ZYALIlE3CJF9r
zT5s8azfN7AIRQ3tPVUiVYs9znS7Lnjr83+a9owAuopnQCG+WyxrjusAnsSt
9ui1UxedqypujrHfF5W+jIAz2lw/iEhKttJ1b60eRpQRzGGfcrTysw3UPlGX
H5xRRbURtojjKbwrF+IxJQfvdF1tRhOctsfBe+IMB2N+JBVTa7A4rh7n4yvK
EmlI34WtdYeabhy6wt3deAzBTBJ+9fb07YkEIUzlu5cv4CPqBSTcV+xAtKMQ
PBarV1joSej2jVp/XKsqHTpPXukvaNx+rdp6olf6gq0y4tBA9htG7QPYlu4b
9FpjV9sorJt7TYv8C8DmG/lBe2TDHKybl+u5KADsnLrTINWbUijgatR748+C
coxpUKlz7FOAyfhZ4xatrWUshz5q5G1Fr6/fFyXc4fdF5PfD5SdKd11QcolF
5+mvhgLbYAXZjR1Jn/GMh4Mj8acxRNGnBLsu11Hap8Q97tYFNFa0NWAakgcn
PIy3iH0lTqo4n8hj3/GVGXaYDC9OJSlDiWXtpzuDJeiQquOMufJ1ZshH7R5G
rYD9ATFVTnIN8koeCkiOFaAIlfvGCcd0r2br8LvjzhY2wrUvxp4L6nh2qXtf
kHpMg7MGrqNMnpU9h6116Qph4DftR1OW6DDmsMle1VqSuO8qcZh7p84nsO1j
W1X8ZmcEyXWS2aiT+bXUvQEtI8eW13RNSxbgs9AAh5gsoshOALg3aekJBcVv
CwX3iPldIeGK94hjwjZ0u1dM+KvNA8HCe3858QHVDlL/8rBvx3IJhvb/NfKL
udyJ61poTdAGuR3lDZmtcYtW7G3n/ZY4LQoh/m8FmbANZ1CO6eI3Mf3XKjPt
Taoe/v+m4kzkqygk9zH4NjJt5QSrahSrbgWFNlwYZtdyFaktXR/gigqz0xcw
dnS0Q+Dtmx/7qCLEeSe17TZ/eoNXsK67Sss+fSh8t6YTh8ajPH3B6zbFOOwV
bSC6DYeLYbfqxWlrv7ttaMHHkKz674nAIn50YXL7PsdSRdc57nPhUrWXMbCm
372QsRMtRN2indtYrsjFpQ66hSjcrUNfLw4XEv3MZh36d50rmvuuZ4roembP
VfC2hcetkDYX2i4c31Ebjm6vAiYriKEwjpJVMWtsnVMgeqNzsfYJpr8XaSwV
hPCmOt/DXGmal4AP4g5rb6Aqwlx355Khi7cUCgZRGq84Q6Bh9DpU4L3GdQIB
6nXk8TcOxF80sMaeBTpsFyzgBfAGqJjXuo0jZ4a7SMVc+BqMv6QNZHGXELWP
fVyERqqa8ibUWXDruCzV9TkfaPR4vqVB2wSgzAcQqbT2d8j7Ip8/yFPtT/IZ
EmGI7cQVuJWEJsGSAn715PA051w8sp4lQIMTNluXFAT2J0fYMIQwrKgwBAE0
+4vKkDJu8Ko3HKrQKKHWQMClSjwuy1DxDvFLIDhBTPjiqsVc2mSu6dN+A4AB
k0Vh26pUfmm42biEeBucvP9eAp+I0wAP3a8DyuTgWLGFconf6AIGvzJ4H9EZ
n4jaKDXtXXufOl82iwXaLteTCn0bhHIsLxxaW1u1PUwNoTCOXiDPAGMMHIg6
jAY5l1rR+P2GKqVRRegPXDbBYY3ORAaqKw5zUJTsx72MDWPi4S5m1KGa5MK9
Fd8fj67IelsZ3ZBmP0K+ZwTkNDTyQWMrIhy7DlF+t6VeNCDMZZkFQ4qYJMsC
6e++bIOjfQZJ0ExQjhObfFWGgl3UkFpGX2myPY7ghmroehTdmiytblIQzjwF
54o2Cju2e6wEeiidzcllLEEJcCB9pNFglxvyzlz4BcuKt8QRqF0zHnrCIdZx
FoV8iqK7ZCXd+MMmJ/olP0BbLxFquSpSDYboA93f5nLH0Ef6/F+7LMgs3Rzc
uVa855sqsIseIi9QcxBFN7BXLxtL2OeFcHiTqz2f/DDZcbNc+z9I/srfqHMo
z/CmZIMBLnjCL8CkkrGmd7dc7IHLaG5wKCPTymLEzO+EuhvwOOE7bmGG/ZBG
SNDLgqTAa/568SxTOesvYDbm762ZoYLxhWD+XhZU588n/DVUOv39YA7JoB7c
Ih4vLk7k+zxDV4ZQFRWV4dBhKYyxINIfRuWlrFyqma7Nz+09b/xqIrQQ/9nk
GzDeIGUi+pajv+LTpP1aIyEuG9B4+UdQHhUvtAt88ihe+Uej8tzIC8gqO0sX
9Pwas00Vr39jkqUCwbhMVGU6b6wsPYoXf99AOiKvVAZJe7z0Y02P4qXx1y5N
QDqLIhXRtywlav0thGYlkGQGSjTOdS3+F/inFy6XTAAA

-->

</rfc>
