From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 8A85F4647B for ; Tue, 25 Mar 2025 14:17:13 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1615D40E37; Tue, 25 Mar 2025 14:17:13 +0100 (CET) Received: from office2.cesnet.cz (office2.cesnet.cz [78.128.248.237]) by mails.dpdk.org (Postfix) with ESMTP id A72AA4027C for ; Tue, 25 Mar 2025 14:17:11 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cesnet.cz; s=office2-2020; t=1742908631; bh=LpXNTmNZ6FbWKUqGciv2gRkwkDn0ZflsG8vpDJYISpg=; h=Date:Subject:To:References:From:In-Reply-To; b=htfdqUBzu8p8VvsEvIpDPFWpCXHceODC5vXIm6HsiRitaAel3cg3Q0MeGQCa88BNr c5dKKyUxBt2C0RPN/6N7JapC+UcAtUXL/Zn4+GfNsVEJ3BgrPNFPCPO/GrrmEnonoP lEhXCD39d5UZQUfGIx7DGhXAfs4hIacxiw4LGQn2159RG2FhSXOFYhQAZT5P+pkpQY atTfLgy73Wmx+B24QMcaAvg7DIlG4anr0xMXkU/sK1xcWo1+iuR2ursDFFK+/IU4Pd 16Y9PrfubmfTUBqn5RnFMvygKLfs6qjWuXkUXxERNoDHOc8gYf0ItTLaoH1gS2/Il6 cDDolenbgcIjg== Received: from [IPV6:2001:718:811:7000::334] (unknown [IPv6:2001:718:811:7000::334]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by office2.cesnet.cz (Postfix) with ESMTPSA id D0B7A1180078; Tue, 25 Mar 2025 14:17:09 +0100 (CET) Message-ID: Date: Tue, 25 Mar 2025 20:17:06 +0700 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: RSS/Flow Rule Configuration Issue on Intel X710 (i40e Driver) To: Sid ali cherrati , users@dpdk.org References: Content-Language: en-US From: =?UTF-8?B?THVrw6HFoSDFoGnFoW1pxaE=?= In-Reply-To: Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="------------ms010800080300080802090402" X-BeenThere: users@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK usage discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: users-bounces@dpdk.org This is a cryptographically signed message in MIME format. --------------ms010800080300080802090402 Content-Type: multipart/alternative; boundary="------------sso7knDlGIHcNhW0d9I0B6m1" --------------sso7knDlGIHcNhW0d9I0B6m1 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 SGkgU2lkQWxpLA0KDQoNCmlmIHRoYXQgaXMgdGhlIG9ubHkgcnVsZSB5b3UgYXJlIGNyZWF0 aW5nIHRoZW4gSSBkb24ndCB0aGluayBpdCBpcyANCmVub3VnaC4gUGxlYXNlIGhhdmUgYSBs b29rIGF0IHRoaXMgc25pcHBldCBJIG1hZGUgZmV3IHllYXJzIGJhY2suDQoNCmh0dHBzOi8v Z2lzdC5naXRodWIuY29tL2x1a2FzaGluby84ZmUzODdjYWFiZTI3NTBkMzk2YmM5N2YyZDY2 MDY2YQ0KDQoNClRoZXJlIHlvdSBmaXJzdCBpbml0aWFsaXplIHRoZSBudW1iZXIgb2YgcXVl dWVzIGFuZCB0aGVuIGluIHRoZSANCmZvbGxvdy11cCBydWxlcyB0aGUgcGF0dGVybnMgeW91 IHdhbnQgdG8gYXBwbHkgUlNTIHRvLg0KDQoNCkNoZWVycywNCg0KTHVrYXMNCg0KT24gMy8y NS8yNSAxNzo0MiwgU2lkIGFsaSBjaGVycmF0aSB3cm90ZToNCj4gRGVhciBEUERLIFRlYW0s DQo+DQo+IEkgaG9wZSB0aGlzIG1lc3NhZ2UgZmluZHMgeW91IHdlbGwuIEkgYW0gcmVhY2hp bmcgb3V0IHRvIHNlZWsgeW91ciANCj4gZXhwZXJ0aXNlIHJlZ2FyZGluZyBhbiBpc3N1ZSBJ IGFtIGVuY291bnRlcmluZyB3aGlsZSBjb25maWd1cmluZyAqRFBESyANCj4gZmxvdyBydWxl cyB3aXRoIFJTUyogb24gYW4gKkludGVsIFg3MTAgTklDKiAodXNpbmcgdGhlIHxpNDBlfCBk cml2ZXIpLiANCj4gRGVzcGl0ZSBtdWx0aXBsZSBhdHRlbXB0cywgSSBoYXZlIGJlZW4gdW5h YmxlIHRvIHJlc29sdmUgdGhlIGVycm9yIGFuZCANCj4gd291bGQgZ3JlYXRseSBhcHByZWNp YXRlIHlvdXIgZ3VpZGFuY2UuDQo+DQo+ICpPYmplY3RpdmUqIDoNCj4gUmVkaXJlY3QgVURQ IHRyYWZmaWMgKHNwZWNpZmljIGRlc3RpbmF0aW9uIElQL3BvcnQpIHRvICptdWx0aXBsZSBS WCANCj4gcXVldWVzKiB1c2luZyB8cnRlX2Zsb3d8IHdpdGggUlNTLg0KPg0KPiAqRXJyb3Ig OiAqDQo+IFZhbGlkYXRpb24gZmFpbGVkOiBSU1MgUXVldWVzIG5vdCBzdXBwb3J0ZWQgd2hl biBwYXR0ZXJuIHNwZWNpZmllZCAuDQo+DQo+ICpIYXJkd2FyZS9Tb2Z0d2FyZSo6DQo+DQo+ ICAqDQo+DQo+ICAgICBOSUM6IEludGVsIFg3MTANCj4NCj4gICAqIERyaXZlcjogfGk0MGV8 DQo+ICAqDQo+DQo+ICAgICBEUERLIFZlcnNpb246IDIzLjExDQo+DQo+ICpDb2RlIFNuaXBw ZXQ6Kg0KPiBpbnRmbG93X2ZpbHRlcmluZyh1aW50MTZfdHBvcnRfaWQsIHVpbnQzMl90aXBf YWRkciwgdWludDE2X3R1ZHBfcG9ydCkgew0KPiBzdHJ1Y3RydGVfZmxvd19lcnJvcmVycm9y Ow0KPiBzdHJ1Y3RydGVfZmxvd19hdHRyYXR0cj17IC5pbmdyZXNzPTEsIC5wcmlvcml0eT0w fTsNCj4gc3RydWN0cnRlX2Zsb3dfaXRlbXBhdHRlcm5bNF07DQo+IHN0cnVjdHJ0ZV9mbG93 X2FjdGlvbmFjdGlvblsyXTsNCj4gc3RydWN0cnRlX2Zsb3cqZmxvdzsNCj4gLy8gRXRoZXJu ZXQNCj4gbWVtc2V0KHBhdHRlcm4sIDAsIHNpemVvZihwYXR0ZXJuKSk7DQo+IHBhdHRlcm5b MF0udHlwZT1SVEVfRkxPV19JVEVNX1RZUEVfRVRIOw0KPiAvLyBJUHY0DQo+IHN0cnVjdHJ0 ZV9mbG93X2l0ZW1faXB2NGlwdjRfc3BlYz17IC5oZHIuZHN0X2FkZHI9UlRFX0JFMzIoaXBf YWRkcikgfTsNCj4gc3RydWN0cnRlX2Zsb3dfaXRlbV9pcHY0aXB2NF9tYXNrPXsgLmhkci5k c3RfYWRkcj1SVEVfQkUzMigweEZGRkZGRkZGKSB9Ow0KPiBwYXR0ZXJuWzFdLnR5cGU9UlRF X0ZMT1dfSVRFTV9UWVBFX0lQVjQ7DQo+IHBhdHRlcm5bMV0uc3BlYz0maXB2NF9zcGVjOw0K PiBwYXR0ZXJuWzFdLm1hc2s9JmlwdjRfbWFzazsNCj4gLy8gVURQDQo+IHN0cnVjdHJ0ZV9m bG93X2l0ZW1fdWRwdWRwX3NwZWM9eyAuaGRyLmRzdF9wb3J0PVJURV9CRTE2KHVkcF9wb3J0 KSB9Ow0KPiBzdHJ1Y3RydGVfZmxvd19pdGVtX3VkcHVkcF9tYXNrPXsgLmhkci5kc3RfcG9y dD1SVEVfQkUxNigweEZGRkYpIH07DQo+IHBhdHRlcm5bMl0udHlwZT1SVEVfRkxPV19JVEVN X1RZUEVfVURQOw0KPiBwYXR0ZXJuWzJdLnNwZWM9JnVkcF9zcGVjOw0KPiBwYXR0ZXJuWzJd Lm1hc2s9JnVkcF9tYXNrOw0KPiBwYXR0ZXJuWzNdLnR5cGU9UlRFX0ZMT1dfSVRFTV9UWVBF X0VORDsNCj4gLy8gYWN0aW9uDQo+IGFjdGlvblswXS50eXBlPVJURV9GTE9XX0FDVElPTl9U WVBFX1JTUzsNCj4gLy8gc3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9xdWV1ZSBxdWV1ZV9hY3Rp b24gPSB7IC5pbmRleCA9IFJYX0lEIH07DQo+IC8vIGFjdGlvblswXS5jb25mID0gJnF1ZXVl X2FjdGlvbjsNCj4gLy8gQ29uZmlndXJhdGlvbiBSU1MNCj4gdWludDE2X3RxdWV1ZXNbXT17 MSwgMiwgM307DQo+IHN0cnVjdHJ0ZV9mbG93X2FjdGlvbl9yc3Nyc3NfY29uZj17DQo+IC5m dW5jPVJURV9FVEhfSEFTSF9GVU5DVElPTl9ERUZBVUxULA0KPiAudHlwZXM9DQo+IFJURV9F VEhfUlNTX0lQVjR8DQo+IFJURV9FVEhfUlNTX1VEUCwNCj4gLmtleV9sZW49MCwNCj4gLnF1 ZXVlX251bT0zLA0KPiAucXVldWU9cXVldWVzLA0KPiB9Ow0KPiBhY3Rpb25bMF0udHlwZT1S VEVfRkxPV19BQ1RJT05fVFlQRV9SU1M7DQo+IGFjdGlvblswXS5jb25mPSZyc3NfY29uZjsN Cj4gYWN0aW9uWzFdLnR5cGU9UlRFX0ZMT1dfQUNUSU9OX1RZUEVfRU5EOw0KPiBpZihydGVf Zmxvd192YWxpZGF0ZShwb3J0X2lkLCAmYXR0ciwgcGF0dGVybiwgYWN0aW9uLCAmZXJyb3Ip ICE9MCkgew0KPiBwcmludGYoIlZhbGlkYXRpb24gRmFpbHVyZTogJXNcbiIsIGVycm9yLm1l c3NhZ2UpOw0KPiByZXR1cm4tMTsNCj4gfQ0KPiAvLyBGbG93IHJ1bGUgY3JlYXRpb24NCj4g Zmxvdz1ydGVfZmxvd19jcmVhdGUocG9ydF9pZCwgJmF0dHIsIHBhdHRlcm4sIGFjdGlvbiwg JmVycm9yKTsNCj4gaWYoZmxvdz09TlVMTCkgew0KPiBwcmludGYoIkVycm9yIGNyZWF0aW5n IGZsb3cgcnVsZSA6ICVzXG4iLCBlcnJvci5tZXNzYWdlKTsNCj4gcmV0dXJuLTE7DQo+IH0N Cj4gcHJpbnRmKCJGbG93IHJ1bGUgY3JlYXRlZCBmb3IgSVAgJXUuJXUuJXUuJXVhbmQgVURQ IHBvcnQgJXVcbiIsDQo+IChpcF9hZGRyPj4yNCkgJjB4RkYsIChpcF9hZGRyPj4xNikgJjB4 RkYsDQo+IChpcF9hZGRyPj44KSAmMHhGRiwgaXBfYWRkciYweEZGLCB1ZHBfcG9ydCk7DQo+ IHJldHVybjA7DQo+IH0NCj4NCj4gSSB3b3VsZCBiZSBncmF0ZWZ1bCBmb3IgYW55IGluc2ln aHRzLCBjb2RlIGV4YW1wbGVzLCBvciBkb2N1bWVudGF0aW9uIA0KPiByZWZlcmVuY2VzIHRv IHJlc29sdmUgdGhpcyBpc3N1ZS4gUGxlYXNlIGxldCBtZSBrbm93IGlmIGFkZGl0aW9uYWwg DQo+IGRldGFpbHMgYXJlIHJlcXVpcmVkLg0KPg0KPiBUaGFuayB5b3UgaW4gYWR2YW5jZSBm b3IgeW91ciB0aW1lIGFuZCBzdXBwb3J0Lg0KPg0KPiBCZXN0IHJlZ2FyZHMsDQo+DQo+IFNp ZEFsaQ0KPg0KPg0K --------------sso7knDlGIHcNhW0d9I0B6m1 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable

Hi SidAli,


if that is the only rule you are creating then I don't think it is enough. Please have a look at this snippet I made few years back.

https://gist.github.com/luka= shino/8fe387caabe2750d396bc97f2d66066a


There you first initialize the number of queues and then in the follow-up rules the patterns you want to apply RSS to.


Cheers,

Lukas

On 3/25/25 17:42, Sid ali cherrati wrote:
Dear DPDK Team,

I hope this message finds you well. I am reaching out to seek your expertise regarding an issue I am encountering while configuring DPDK flow rules with RSS on an In= tel X710 NIC (using the i40e driver). Despite multiple attempts, I have been unable to resolve the error and would greatly appreciate your guidance.

Objective :
Redirect UDP traffic (specific destination IP/port) to = multiple RX queues using rte_flow with RSS.

Error :
Validation failed: RSS Queues not supported when pattern specified .

Hardware/Software:

  • NIC: Intel X710

  • Driver: i40e
  • DPDK Version: 23.11

Code Snippet:
int flow_filtering(uint16_t port_id, uint32_t ip_addr, uint16_t udp_port) {
struct rte_flow_error error;
struct rte_flow_attr attr =3D { .ingress =3D 1, .priority =3D 0 };
struct rte_flow_item pattern[4];
struct rte_flow_action action[2];
struct rte_flow *flow;
// Ethernet
= memset(pattern, 0, sizeof(pattern));
pattern[0].type =3D RTE_FLOW_ITEM_TYPE_ETH= ;
// IPv4
struct rte_flow_item_ipv4 ipv4_spec =3D { .hdr.dst_addr =3D RTE_BE32(ip_addr) };
struct rte_flow_item_ipv4 ipv4_mask =3D { .hdr.dst_addr =3D RTE_BE32(0xFFFFFFFF) };
pattern[1].type =3D RTE_FLOW_ITEM_TYPE_IPV4;
pattern[1].spec =3D &ipv4_spec;
pattern[1].mask =3D &ipv4_mask;
// UDP
struct rte_flow_item_udp udp_spec =3D { .hdr.dst_port =3D RTE_BE16(udp_port) };
struct rte_flow_item_udp udp_mask =3D { .hdr.dst_port =3D RTE_BE16(0xFFFF) };
pattern[2].type =3D RTE_FLOW_ITEM_TYPE_UDP= ;
pattern[2].spec =3D &udp_spec;
pattern[2].mask =3D &udp_mask;
pattern[3].type =3D RTE_FLOW_ITEM_TYPE_END= ;
// action
action[0].type =3D RTE_FLOW_ACTION_TYPE_RSS;
// struct rte_flow_action_que= ue queue_action =3D { .index =3D RX_ID };
// action[0].conf =3D &qu= eue_action;
// Configuration RSS
uint16_t queues[] =3D {1, 2, 3};
struct rte_flow_action_rss rss_conf =3D {
.func =3D RTE_ETH_HASH_FUNCTION_DEFAULT= ,
.types =3D
RTE_ETH_RSS_IPV4 |
RTE_ETH_RSS_UDP,
.key_len =3D 0,
.queue_num =3D 3,
.queue =3D queues,
};
action[0].type =3D RTE_FLOW_ACTION_TYPE_RSS;
action[0].conf =3D &rss_conf;
action[1].type =3D RTE_FLOW_ACTION_TYPE_END;
if (rte_flow_validate(port_id, &attr, pattern, action, &error) !=3D 0) {
printf("Validation Failure: = %s\n", error.message);
return -1;
}
// Flow rule creation<= /div>
flow =3D rte_flow_create(port_id, &attr, pattern, action, &error);
if (flow =3D=3D NULL) {
printf("Error creating flow rule : = %s\n", error.message);
return -1;
}
printf("Flow rule created for IP %u.%u.%u.%u and UDP port %u\n",
(ip_addr >> 24) & 0xFF, (ip_addr >> 16) & 0xFF,
(ip_addr >> 8) & 0xFF, ip_addr & 0xFF, udp_port);
return 0;
}

I would be grateful for any insights, code examples, or documentation references to resolve this issue. Please let me know if additional details are required.

Thank you in advance for your time and support.

Best regards,

SidAli


--------------sso7knDlGIHcNhW0d9I0B6m1-- --------------ms010800080300080802090402 Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature 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 VQQDDBFMdWvDocWhIMWgacWhbWnFoTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB AIYjV/QwJbJj3C5WpRO3kOru0hGrrdFHQywBGTowDWLYzrLYDIdj9Mj4BruCM1rIw2mkjDs/ Igeb2IAjZ65XhvRiLHEnFhNfWTSEDnhaEVY9f1vXq1W2T9ayjAMxiL79ZlZsNCPaOBV/YvP6 uhHHqmzaXqryWYC3Kl+KOVwEuI/oVOdqW81zSdKFp/vyFfRI/SgmOilaKeor/wcdJLILMY5i VjXxY5kuw3LUP1TpzUFl9RtQprkWoLIo2fnSHnF2Pn++sEB0c009NDaE/RqkVRNmBRW1mpIr WJQcJB5Q4A7rkTohElnJFYWiO/4p8ZvkQfKgcxfX5cQcwIQuSYRgE6sCAwEAAaOCAcYwggHC MB8GA1UdIwQYMBaAFGkAocchWPjgxRsgsArdp1G/E9nkMB0GA1UdDgQWBBRy6YIe/EKtTKXE vjA6c+W4oURcuDAOBgNVHQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggr BgEFBQcDBAYIKwYBBQUHAwIwUAYDVR0gBEkwRzA6BgwrBgEEAbIxAQIBCgQwKjAoBggrBgEF BQcCARYcaHR0cHM6Ly9zZWN0aWdvLmNvbS9TTUlNRUNQUzAJBgdngQwBBQMCMEIGA1UdHwQ7 MDkwN6A1oDOGMWh0dHA6Ly9HRUFOVC5jcmwuc2VjdGlnby5jb20vR0VBTlRQZXJzb25hbENB NC5jcmwweAYIKwYBBQUHAQEEbDBqMD0GCCsGAQUFBzAChjFodHRwOi8vR0VBTlQuY3J0LnNl Y3RpZ28uY29tL0dFQU5UUGVyc29uYWxDQTQuY3J0MCkGCCsGAQUFBzABhh1odHRwOi8vR0VB TlQub2NzcC5zZWN0aWdvLmNvbTAzBgNVHREELDAqgRZMdWthcy5TaXNtaXNAY2VzbmV0LmN6 gRBzaXNtaXNAY2VzbmV0LmN6MA0GCSqGSIb3DQEBDAUAA4ICAQAUruvh/0xaYOuFuIb5DxaL wU9162yIq0yfVn4genAF8EPfW6tPmZBgS6n/ZDRd2AMMlMczUI4PDkkXqcubNv/59ry5xD3t 344cVoxEYXch+kXzbN/mgguuzsghyN8cvN7etv4ZRRrvjBC6U++GYpAzHooAYsBc/JYCyEiN jsDZldJbOWEuFZ0H7DQwDXcN53TqM2Nq7+DwkwLby7ZjesdUKwg83HgqSOSNpHwRtKmMEzmb e/vFE/MvH/GWvWk1AwwN559+eGXu5k0c0i8G+bR+vt4fyekmq/PREvsHKvpCkEWrOengsmHV l8z22uoFfLRSCus5scmw5FRAG/iwNvgDsju19W5HoP3iU/OyIYr9yyn6FQPZl4fktVJJLyrT wE07Ze9Ybpy5kHmO0WvGeybloszs8+zos0uQNWi34ABWnZcStLsh+DnUghSqYNjNfmVaOo0i NubUM5egWEAVeQEHMntQaeyNnsOSbN1r5SBwRj3VYlwSbKa5FG23Lz4H5JhLuJR+HGCTH3+T JuDzOKddWXUAI5s9811r8sJo9StMBlEnoOkCJ3jyN8eKZLg1w3BmA1zvW+sAXn9qPU81J38n mpKr5OkPrDfQG7hL2/mPwQo9amFWTfZ8I5279GqdnIivNnK+OvEHeDRdBb5iFjT5x71doVON 6apyxSX1oIohIzCCBuYwggTOoAMCAQICEDECcNQ1vpskmvhW0OHihUkwDQYJKoZIhvcNAQEM BQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5MRQwEgYDVQQHEwtKZXJz ZXkgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMS4wLAYDVQQDEyVVU0VS VHJ1c3QgUlNBIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTIwMDIxODAwMDAwMFoXDTMz MDUwMTIzNTk1OVowRjELMAkGA1UEBhMCTkwxGTAXBgNVBAoTEEdFQU5UIFZlcmVuaWdpbmcx HDAaBgNVBAMTE0dFQU5UIFBlcnNvbmFsIENBIDQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw ggIKAoICAQCzSuIiXidb6QRbFAQ1MiAUrrTSMUDGzVDAHqFEyq+eSmF/LZDeYpszai2kQsqW ATz/cBA9gGjunvJ45G48ycC4D6gwZFvbBt5JotxlunBeB8K+crGar3v+RCQ4VfvToX07v+HT J6EeEONR3IzJPTMyzgAwENGsAWf9va9HePQFJiChCzXqhKpp0zen53S+8f9itEy06GS8aku7 Mvyb4tMBBa9An3Y3ALIqIeymg/iYs8m9WkSkMyekNtFRB1+1KlnNUpM05G8+sY9EucnQQRUI dHzYsvqjP3XlaSuB4Jj0ia66UGfi5Wx31mm5sKAz8Re9UGVWIqq6wKFKxkSfuO4iwYiIPJoi GEux3dqabwFLduAroDF1IxE40PqGIdPXzYuZ/wL6BEfFAb0xy8bfm5S9G7y/ts9mIlFpPtkL Z/nQ/iVOWdsu9ale/nK/uGF47xsxeW2LIvB4sH5U2+D4ad8vpNbcCrXIXXKtkBnNHgxumNNZ 0R1Isq/Pz7TALCxxDzWdsM7AO32/Jn7R4ldtGRZmKpJyfACDn8HU1QPhOtiWsjifrMWnanJh Q6K7M/5qz8BmfPrca+MUrr1Y4NHZb9MrgPtWKQQyGDXy+G5F/iHGdZk7LS+F8NH+Ddolt2wZ pz52JqGMTDPIH5Qok4LLO95wbxtn+79Tw+wQxmDTuIg+LwIDAQABo4IBizCCAYcwHwYDVR0j BBgwFoAUU3m/WqorSs9UgOHYm8Cd8rIDZsswHQYDVR0OBBYEFGkAocchWPjgxRsgsArdp1G/ E9nkMA4GA1UdDwEB/wQEAwIBhjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdJQQWMBQGCCsG AQUFBwMCBggrBgEFBQcDBDA4BgNVHSAEMTAvMC0GBFUdIAAwJTAjBggrBgEFBQcCARYXaHR0 cHM6Ly9zZWN0aWdvLmNvbS9DUFMwUAYDVR0fBEkwRzBFoEOgQYY/aHR0cDovL2NybC51c2Vy dHJ1c3QuY29tL1VTRVJUcnVzdFJTQUNlcnRpZmljYXRpb25BdXRob3JpdHkuY3JsMHYGCCsG AQUFBwEBBGowaDA/BggrBgEFBQcwAoYzaHR0cDovL2NydC51c2VydHJ1c3QuY29tL1VTRVJU cnVzdFJTQUFkZFRydXN0Q0EuY3J0MCUGCCsGAQUFBzABhhlodHRwOi8vb2NzcC51c2VydHJ1 c3QuY29tMA0GCSqGSIb3DQEBDAUAA4ICAQAKBU57DY8fEzkA/W/sYsbD7e0XquMBzHjcP0eX XXRD4EAEAGCWSs+QRL9XIxmx+52zx9wMa8YTejlR+NKejiyKPTF0q63zMxrO/z/hUwo8IDcR RLS0NSgvTW6AN2rCXJe5iLN5fIfYgIBB9cy1L6trPuZ/vjUJm87nQ7ExQzGqWN5F9U8MlAk0 c5iLanG7GCMoNjHiF1n0baj6guUeG7n5qcwOQTyDS19+NEqfwjUPUGasN1ZH8h1sE6PrzvRp ti+rKzWpiU+i2/k3l2b5fFDy+Wu9jv6R9BoBh47es/UMzwEZ2kSrIVVr4jSukk+FpmR5Zbtw iYNAV6sdb1srMGsILzXlrdasSE2nGHvZklk2zUdgn7b01MHq67g0mNozGmT6Dam41Kbhv25W MFs871XqwVIb4gGoT1yRf/VePMm1jwauqijhKJFvrNweGnebGPeipaLxIo2iEA4qdRztEg/q yzWGogXK/TFdmivg322fMPQWjQkMhRGMM8SCjlZN22L8x0ZOYoVA2rHJm5P25IjZe+HPyn7i kJiSJmqlqFmUeowXF3D1dFlCCs/5yC06RYRqI2REFu+28t2nswIvY6xCFAR0RtS8Mz2yXNld 0js2MmiRUGrc7imWzdUPbPcv9sdUF7SsERGPIzYL8dIiHzit+YCoGCSXMg6peF37hHNp1TGC BCgwggQkAgEBMFswRjELMAkGA1UEBhMCTkwxGTAXBgNVBAoTEEdFQU5UIFZlcmVuaWdpbmcx HDAaBgNVBAMTE0dFQU5UIFBlcnNvbmFsIENBIDQCEQC/Y2YvY/AU1z9zfvc7WYidMA0GCWCG SAFlAwQCAQUAoIICnjAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEP Fw0yNTAzMjUxMzE3MDZaMC8GCSqGSIb3DQEJBDEiBCCoZeiYlGt1oGN6GfBzeXJjQxjN/t7U JVz6PQv8AytN/DBqBgkrBgEEAYI3EAQxXTBbMEYxCzAJBgNVBAYTAk5MMRkwFwYDVQQKExBH RUFOVCBWZXJlbmlnaW5nMRwwGgYDVQQDExNHRUFOVCBQZXJzb25hbCBDQSA0AhEAv2NmL2Pw FNc/c373O1mInTBsBgsqhkiG9w0BCRACCzFdoFswRjELMAkGA1UEBhMCTkwxGTAXBgNVBAoT EEdFQU5UIFZlcmVuaWdpbmcxHDAaBgNVBAMTE0dFQU5UIFBlcnNvbmFsIENBIDQCEQC/Y2Yv Y/AU1z9zfvc7WYidMIIBVwYJKoZIhvcNAQkPMYIBSDCCAUQwCwYJYIZIAWUDBAEqMAsGCWCG SAFlAwQBAjAKBggqhkiG9w0DBzANBggqhkiG9w0DAgIBBTANBggqhkiG9w0DAgIBBTAHBgUr DgMCBzANBggqhkiG9w0DAgIBBTAHBgUrDgMCGjALBglghkgBZQMEAgEwCwYJYIZIAWUDBAIC MAsGCWCGSAFlAwQCAzALBglghkgBZQMEAgQwCwYJYIZIAWUDBAIHMAsGCWCGSAFlAwQCCDAL BglghkgBZQMEAgkwCwYJYIZIAWUDBAIKMAsGCSqGSIb3DQEBATALBgkrgQUQhkg/AAIwCAYG K4EEAQsAMAgGBiuBBAELATAIBgYrgQQBCwIwCAYGK4EEAQsDMAsGCSuBBRCGSD8AAzAIBgYr gQQBDgAwCAYGK4EEAQ4BMAgGBiuBBAEOAjAIBgYrgQQBDgMwDQYJKoZIhvcNAQEBBQAEggEA WvfVC8DfGAmzvH5vfeqytL9iwpOnViP9Uq6v403BXQ1S3k8vNmin+p09Uf2F7nHa9JLDj7Bv aFyYTFnlKYyrEc8bPVZs98ZHF30MFD1aM1v7QMIqjuAxu0SSRow66tErc0pEsIyGZKySs35M oPRQDIFa/u7MUqVWJsswTHJFxuch1/9KGg5U4X0HV/8UualSnkNpUeZ6WwXfMnTmJ6QiYesF 5Ws1tJjkX/MW1Bhv1SaKoyOmTH00PFf0Nmh0icPESbkqDVtjdOuY2q8hi13pByXI4DAXwbEV 5gWwKhLpEzQQevdHPCGmmuJX4e7CO0u/b93tsQH+iGcyuE9UFeIIaAAAAAAAAA== --------------ms010800080300080802090402--