From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from emea01-am1-obe.outbound.protection.outlook.com (mail-am1on0092.outbound.protection.outlook.com [157.56.112.92]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client CN "mail.protection.outlook.com", Issuer "MSIT Machine Auth CA 2" (verified OK)) by huchra.bufferbloat.net (Postfix) with ESMTPS id 42FDD21F696 for ; Thu, 17 Dec 2015 13:39:53 -0800 (PST) Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=kevin@darbyshire-bryant.me.uk; Received: from [IPv6:2001:470:183f:da2b::632f:a7da] (2001:470:183f:da2b::632f:a7da) by DB5PR07MB0936.eurprd07.prod.outlook.com (10.161.200.143) with Microsoft SMTP Server (TLS) id 15.1.361.13; Thu, 17 Dec 2015 21:39:49 +0000 To: References: <56587A42.7030905@darbyshire-bryant.me.uk> From: Kevin Darbyshire-Bryant X-Enigmail-Draft-Status: N1110 Message-ID: <56732BA1.8060306@darbyshire-bryant.me.uk> Date: Thu, 17 Dec 2015 21:39:45 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.4.0 MIME-Version: 1.0 In-Reply-To: <56587A42.7030905@darbyshire-bryant.me.uk> Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-512; boundary="------------ms050209090707090507000206" X-Originating-IP: [2001:470:183f:da2b::632f:a7da] X-ClientProxiedBy: DB4PR04CA0032.eurprd04.prod.outlook.com (25.160.41.42) To DB5PR07MB0936.eurprd07.prod.outlook.com (25.161.200.143) X-Microsoft-Exchange-Diagnostics: 1; DB5PR07MB0936; 2:yQQ5tvH7TDwcHHjQQXPntxUMYSah9cpEEe6v107PEIRbbprDEVMgCjfrU40vCvdScYL9v3Em5CKfsZLr6gsC2VH2okiUCFiQBI44GeJ3fau9T79t1ws/9879xRWt380RjV8Fkgmf+kqOMqbQ2OEqag==; 3:FWwwKYkW5mv7y/VvXpe5nXCRgQLt/Ux/gjoZB3KTDtqbNGCJ8rLOQ61/d3GrxuLTS/PCiegAkTFIhH2+ihyInFnQGzzkJkorMYk1mSDgpyPKBQn2bpkF4ySMc21Zj7oX; 25:ToJQHIPYf+GfwSsA3A7Q3rbr49Ts/NQhEqtI9RJ0OR6Qj8l/GkBoOVOlINdbj07+KQ7n6ag7DfXY1vwjGtI/beqzbAF/pjOpl9DR9uT4tmoda82V4RGNhsTNZ/UpggAjKIYZH6PkCNWh6NafSS0vOhDa0JEMd7X2avnEUeUMaqkWDvZfVmI6DLjyg4QBrzo2tEByrYe91/5K+k5tGbel69K8MfUbHeKGwR8uQ4u9zLSJ86LlBiBdy0ufRA7J5zc0qmKuoDRYIth+/QgDVAggyw==; 4:FXOE6jnOF0agqd79BCM5ID6fz49reyizFeNXbhGVtdJftHutktMLZvXLoG+Eb+Bl1h2s5KrRVqZNZCNyY2IAf/dgSLyAONWJ67EB2cyMb0CmWkNWbrQ4GJcMiHmnFEMbjQIU5XGURRlrdtavMCA00BlqXA6SrXBPY2PqyemEofM/+beIwHsSgSnr1G2f+p0kWIHgMY2CMrenaTqd5Qz0ruMb3dVZ1vcoI8Meim72zWRTIu/nglzj/tNr1b8x5ngnMTv2sfkDAsgxFpVxlGeG7tFPb+CogqbaggqxB97wkmoQbNnvKoYfBG6miZ4kny1qZM4MWKEEpVLzkjuiESw+ZMznMIxHVJ4bj1b0g/5ZtWu00eOM1L+qO/jImtzvhYTx X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB5PR07MB0936; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(520078)(8121501046)(5005006)(3002001)(10201501046); SRVR:DB5PR07MB0936; BCL:0; PCL:0; RULEID:; SRVR:DB5PR07MB0936; X-Forefront-PRVS: 07935ACF08 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(199003)(24454002)(479174004)(189002)(81156007)(1706002)(59896002)(2950100001)(5890100001)(450100001)(77096005)(5008740100001)(97736004)(4001350100001)(40100003)(6116002)(5001960100002)(110136002)(586003)(1096002)(15975445007)(122386002)(92566002)(189998001)(106356001)(568964002)(5004730100002)(2351001)(107886002)(36756003)(105586002)(76176999)(65806001)(33656002)(80316001)(19580395003)(512944002)(50986999)(65956001)(42186005)(87976001)(84326002)(83506001)(99136001)(101416001)(54356999)(64126003)(65816999)(87266999)(74482002)(575784001)(19580405001)(86362001)(3826002); DIR:OUT; SFP:1101; SCL:1; SRVR:DB5PR07MB0936; H:[IPv6:2001:470:183f:da2b::632f:a7da]; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: darbyshire-bryant.me.uk does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB5PR07MB0936; 23:hnLR1+Movvvqv7bXKj5CVVRp9BBO9X8fBM0EEcfpB?= =?us-ascii?Q?evLa+UlpnvJODWRuVxHT0DunmvwlhnwUoPqKEu0PioNU5lzGsr2ab1x5M72P?= =?us-ascii?Q?quOPmP/8h24BaFvvLpdlEvsuD+Ep/GgYfrKeTh5tRc9oqdWQorrixNybwOBo?= =?us-ascii?Q?onKbglAR5toifdHtL7Z6P17pq5H9CZnCEEwcDdIpYebE5F+hOGh7md+1ikcM?= =?us-ascii?Q?skG3bmka/CRVeRvNlC78mzHFVB+n9rzgscYlT6dd749OmCewU1Jzr1mRb1z2?= =?us-ascii?Q?gHdNUuORGyD2MKdkwCQGJrOfGGV8pOI6NTjFme8d6A3tOxzSgzUGduSfkOcn?= =?us-ascii?Q?YhmbAAxFZNMGPu6UHuiNx8lQXFva8tTQgVMRq8DMj520kqFso+/Bqcz9Ay1r?= =?us-ascii?Q?QvozfHYZYXs0+8UVaLRz1Dmr4/GXz1OAYveKvzfCuBkmJmmTEOt7D6V+Rzyf?= =?us-ascii?Q?vply2NisnaoW6Eo1o5N1NhFNPIXb0CmIqcwyiBIPEeGAmXjc+e8RCu8dGSY+?= =?us-ascii?Q?DB7Qcy1zYbrcO8622aPFwYEqVRd1hOqhLCG4kC3Oh+/ex784w4K5LA9KhwQQ?= =?us-ascii?Q?x6a6ltQS7fjpr6A7YWUezDLGkcZKd7WQ36A1uRR+D6VIzup5X71TkNTfG91n?= =?us-ascii?Q?Fgk/lWBZqAAOpXsYbR3C2Vh7pzxS2w7LkwrJvionAim5/3VTjD5nRmAHV9ge?= =?us-ascii?Q?Lr5VrPdS51Slufbv9tA+z8Hq+qMyuGC7nJTl7QbUoHLpEOfOovtK/OfS3y3X?= =?us-ascii?Q?/B8Wz4aJWKyI68++ebHm4gBMkwrsV3Kuj013yNb+13hJdKRGKEmWK7ao00Gb?= =?us-ascii?Q?sjSNak7kdQxO0C+b2IWKkV4PVqDhAoM9UfBP5lNhUbq3eaFQZ/3Sy7Dxwvto?= =?us-ascii?Q?Fd5alpyMmwxGhsVZTkJB6fIUXFHhUYIUsljac+k3ZIsmNbExAbOiDHYx5FMg?= =?us-ascii?Q?yqPIHWKymKJ4GZpYXZdkKURTYa3lLJOi4vOlaiP3ZWF6pVuS7Y2e83dTzrOh?= =?us-ascii?Q?2Uv+mKcop/zNHfZJsqYSF1GaDIQVmH3zH+aFqOygfuXf/kQebBQ6FYMzkv3e?= =?us-ascii?Q?Cr8Bo0MYu1hf1jYwK3ysv9LRU5eHXFLaM8mFXEC9QDaw03HM7J+ufHi6ydl2?= =?us-ascii?Q?ePd12rhliEC/IHFRG6+76Lhln82LwGYOiOfDR88uTS/65v3q+zX+ZmhziPsb?= =?us-ascii?Q?I5uHgzCbGu9mfQdjOH9d2X5G2HxgfJuX2jqgW6NLf8yTT8ia/ZpIwXDEhMvN?= =?us-ascii?Q?oDvyMArmrqm/FjLpCTk/MvvkpNCXXxCBgG+yn6e0iPcwP7qvjG3k1PyY3PgD?= =?us-ascii?Q?dxiFxZC+1exZLBGbKQl/wcAClJgDiv+W2Wj8aVT6cahq0R7SrcKPOM4dTbb9?= =?us-ascii?Q?E/CopxQtBAHZqEaF+yAVp5At5k9jepg9CesduxwkeQr8DHk?= X-Microsoft-Exchange-Diagnostics: 1; DB5PR07MB0936; 5:y3USvRUyXCAz/JCkgxffDSlyyFPD9Uevqhxpar5GBMg8rxDZyEOQNfmRlPNs+Ks94Ynrb6QFLcFl14aZcOJXitCWprFuGwZRLXx3TxhtFilVGpP7is8b+0N4xX7Cj9RA8EQVns5IbkbwvYws7ZD2jA==; 24:ZzwWpkyvHZihaYGqKn1Wqq84+0bp8W9uSmybGkir7Afvj9Mnwz3q2Kxqq8mGRmqKO6RAMfq4gN7WYKR0Bwo7DyEiPQVUYhZgkpTix6RHHdo= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: darbyshire-bryant.me.uk X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2015 21:39:49.7562 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR07MB0936 Subject: Re: [Cake] NET_XMIT_CN question X-BeenThere: cake@lists.bufferbloat.net X-Mailman-Version: 2.1.13 Precedence: list List-Id: Cake - FQ_codel the next generation List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 17 Dec 2015 21:40:16 -0000 --------------ms050209090707090507000206 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable Eric Dumazet very kindly answered a few of my questions regarding XMIT_CN= =2E I think the cake 'NET_XMIT_CN' optimisation has been prematurely ripped o= ut. Eric's helpful comments: " If a packet scheduler returns NET_XMIT_CN , caller know a packet was dropped. =20 If a packet scheduler returns NET_XMIT_SUCCESS , caller does not know= a(nother) packet was dropped. =20 Look for example in htb this part : =20 } else if ((ret =3D qdisc_enqueue(skb, cl->un.leaf.q)) !=3D NET_XMIT_SUCCESS) { .... return ret; } else { .... } =20 sch->q.qlen++; // HERE : this part wont be run if NET_XMIT_CN was returned. =20 A packet scheduler returns NET_XMIT_CN when it wants to tell the uppe= r stack (like TCP) that it is worthless trying to push more packets for= this flow, as it is (self) inflicting losses. =20 Basically it is a (best effort) signal/hint to backoff. =20 IP fragmentation layer for example aborts its attempt to send following fragments. " Kevin On 27/11/15 15:44, Kevin Darbyshire-Bryant wrote: > > On 27/11/15 15:16, Dave Taht wrote: >> We decreased the size of the queue, regardless of what flow we dropped= >> from... so why do we not need to decrease the queue size when using >> NET_XMIT_CN? Where is that done by the caller? I have grepped and >> googled... >> >> As best as I recall the semantics of NET_XMIT_CN changed over time, it= used to >> only work on enqueue on a tail drop queue, where it would push back on= >> the stack to not, actually, drop the packet, but to halve the window >> and requeue. >> >> Staring at the code now, I don't see how it could be right... here OR >> in the existing fq_codel code in the mainline. >> >> /* Return Congestion Notification only if we dropped a packet >> * from this flow. >> */ >> if (fq_codel_drop(sch) =3D=3D idx) >> return NET_XMIT_CN; >> >> /* As we dropped a packet, better let upper stack know this */= >> qdisc_tree_decrease_qlen(sch, 1); >> return NET_XMIT_SUCCESS; >> >> >> (I am not sure NET_XMIT_CN works right when there is a hash collision,= >> for example, although the updated doc does seem to indicate that, >> >> ... still, then, where does (an equivalent for) >> qdisc_tree_decrease_qlen kick in?) >> >> So I ripped it out. Otherwise... the code does look correct, now that >> I've reviewed it further. >> But does putting it back in have any measurable effect? > I've no realistic way of testing & finding out. I'd say that if that > bit of code ever gets executed then things are in an unfortunate place > already, however if there's a way of telling a 'very active talker' (an= d > they must be 'cos they've just queued a packet *and* cake_drop() has > chosen them as having the biggest b->backlogs[i] - and that may help > answer one of your todo items as well) to back off, then we should take= it. > > Spaghetti monster knows what *actually* happens further up the stack :-= ) > >> ... >> >> Also I note there was a bunch of commits to sch_fq_codel mainline sinc= e july, >> notably this one. >> >> c0afd9ce4d6a646fb6433536f95a418bb348fab1 >> >> >> Dave T=E4ht >> Let's go make home routers and wifi faster! With better software! >> https://www.gofundme.com/savewifi >> > > > > _______________________________________________ > Cake mailing list > Cake@lists.bufferbloat.net > https://lists.bufferbloat.net/listinfo/cake --------------ms050209090707090507000206 Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQMEAgMFADCABgkqhkiG9w0BBwEAAKCC DYEwggY0MIIEHKADAgECAgEeMA0GCSqGSIb3DQEBBQUAMH0xCzAJBgNVBAYTAklMMRYwFAYD VQQKEw1TdGFydENvbSBMdGQuMSswKQYDVQQLEyJTZWN1cmUgRGlnaXRhbCBDZXJ0aWZpY2F0 ZSBTaWduaW5nMSkwJwYDVQQDEyBTdGFydENvbSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe Fw0wNzEwMjQyMTAxNTVaFw0xNzEwMjQyMTAxNTVaMIGMMQswCQYDVQQGEwJJTDEWMBQGA1UE ChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUg U2lnbmluZzE4MDYGA1UEAxMvU3RhcnRDb20gQ2xhc3MgMSBQcmltYXJ5IEludGVybWVkaWF0 ZSBDbGllbnQgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDHCYPMzi3YGrEp pC4Tq5a+ijKDjKaIQZZVR63UbxIP6uq/I0fhCu+cQhoUfE6ERKKnu8zPf1Jwuk0tsvVCk6U9 b+0UjM0dLep3ZdE1gblK/1FwYT5Pipsu2yOMluLqwvsuz9/9f1+1PKHG/FaR/wpbfuIqu54q zHDYeqiUfsYzoVflR80DAC7hmJ+SmZnNTWyUGHJbBpA8Q89lGxahNvuryGaC/o2/ceD2uYDX 9U8Eg5DpIpGQdcbQeGarV04WgAUjjXX5r/2dabmtxWMZwhZna//jdiSyrrSMTGKkDiXm6/3/ 4ebfeZuCYKzN2P8O2F/Xe2AC/Y7zeEsnR7FOp+uXAgMBAAGjggGtMIIBqTAPBgNVHRMBAf8E BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUU3Ltkpzg2ssBXHx+ljVO8tS4UYIw HwYDVR0jBBgwFoAUTgvvGqRAW6UXaYcwyjRoQ9BBrvIwZgYIKwYBBQUHAQEEWjBYMCcGCCsG AQUFBzABhhtodHRwOi8vb2NzcC5zdGFydHNzbC5jb20vY2EwLQYIKwYBBQUHMAKGIWh0dHA6 Ly93d3cuc3RhcnRzc2wuY29tL3Nmc2NhLmNydDBbBgNVHR8EVDBSMCegJaAjhiFodHRwOi8v d3d3LnN0YXJ0c3NsLmNvbS9zZnNjYS5jcmwwJ6AloCOGIWh0dHA6Ly9jcmwuc3RhcnRzc2wu Y29tL3Nmc2NhLmNybDCBgAYDVR0gBHkwdzB1BgsrBgEEAYG1NwECATBmMC4GCCsGAQUFBwIB FiJodHRwOi8vd3d3LnN0YXJ0c3NsLmNvbS9wb2xpY3kucGRmMDQGCCsGAQUFBwIBFihodHRw Oi8vd3d3LnN0YXJ0c3NsLmNvbS9pbnRlcm1lZGlhdGUucGRmMA0GCSqGSIb3DQEBBQUAA4IC AQAKgwh9eKssBly4Y4xerhy5I3dNoXHYfYa8PlVLL/qtXnkFgdtY1o95CfegFJTwqBBmf8py TUnFsukDFUI22zF5bVHzuJ+GxhnSqN2sD1qetbYwBYK2iyYA5Pg7Er1A+hKMIzEzcduRkIMm CeUTyMyikfbUFvIBivtvkR8ZFAk22BZy+pJfAoedO61HTz4qSfQoCRcLN5A0t4DkuVhTMXIz uQ8CnykhExD6x4e6ebIbrjZLb7L+ocR0y4YjCl/Pd4MXU91y0vTipgr/O75CDUHDRHCCKBVm z/Rzkc/b970MEeHt5LC3NiWTgBSvrLEuVzBKM586YoRD9Dy3OHQgWI270g+5MYA8GfgI/EPT 5G7xPbCDz+zjdH89PeR3U4So4lSXur6H6vp+m9TQXPF3a0LwZrp8MQ+Z77U1uL7TelWO5lAp sbAonrqASfTpaprFVkL4nyGH+NHST2ZJPWIBk81i6Vw0ny0qZW2Niy/QvVNKbb43A43ny076 khXO7cNbBIRdJ/6qQNq9Bqb5C0Q5nEsFcj75oxQRqlKf6TcvGbjxkJh8BYtv9ePsXklAxtm8 J7GCUBthHSQgepbkOexhJ0wP8imUkyiPHQ0GvEnd83129fZjoEhdGwXV27ioRKbj/cIq7JRX un0NbeY+UdMYu9jGfIpDLtUUGSgsg2zMGs5R4jCCB0UwggYtoAMCAQICAw5ySjANBgkqhkiG 9w0BAQsFADCBjDELMAkGA1UEBhMCSUwxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4xKzApBgNV BAsTIlNlY3VyZSBEaWdpdGFsIENlcnRpZmljYXRlIFNpZ25pbmcxODA2BgNVBAMTL1N0YXJ0 Q29tIENsYXNzIDEgUHJpbWFyeSBJbnRlcm1lZGlhdGUgQ2xpZW50IENBMB4XDTE1MDYyMDIw MzA1MloXDTE2MDYyMDE0MjY0N1owVjEmMCQGA1UEAwwda2V2aW5AZGFyYnlzaGlyZS1icnlh bnQubWUudWsxLDAqBgkqhkiG9w0BCQEWHWtldmluQGRhcmJ5c2hpcmUtYnJ5YW50Lm1lLnVr MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAugCNtDhytCJ9HOfenUHr/vUGUECv PL1IJXgHMl4cIJmwgLOkXhIcTMxHnX+kFweqvT+eDWv1hzA9yMWhvjLFC4eLoFaV0xiAat8O XQ7t3MwKY5DW0mB1dOnjiFIcc/XMwyYI4KfEGnFMJQkzon0rDVpkl/Q1f/hu1sELO7Zc6TFL wuuDuiP7S73zrz50TRoq0+Ob3x0uOMW2uVwVzf6NLwHgBE2LFleMXblyUMx0IlIcLan2nWiI Vsa3XYd+C6KAGGwlmO4VAZ25KuX7hkj8f82lSapvtKTtvrSoDghXlHH2JXiIQX+Sn0UgOmbX 1KyOe9vN7WzQ+tpPRzpFRffnnnp1VQye3wVRPBumjDxQSFTOhUtslnvbefUQSPw6p5w9ZiXI GJICLkX/MkYN/TwGCvuUG2PxBybSR1A2I5ap+VI/zGSG3XGVEA69SOZQyD+8YjJZfaY2nCu+ DuM64JrJUi2CvX6fwcdHNschJNrrfetpnrx3JrGnG9o+pWuUG1phBg+KKN2bhrdzY79qm7ha 86EMKSUOn5nBdGY3YxdXq/naoUQeOCUV2JMFGOulu7sKpiWcz7HVFacXjd9ebisVLv+jOwll z14BWRb87s1+LBEJn/Ybn3ekhtgyEAhB4kgj0scl4hI8xCU6zrZyDnbXmxSvDXbClZA0PACt f/jhGvUCAwEAAaOCAuMwggLfMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdJQQWMBQG CCsGAQUFBwMCBggrBgEFBQcDBDAdBgNVHQ4EFgQULkW2CpDiQpRNumQ7wdspjFfgX+AwHwYD VR0jBBgwFoAUU3Ltkpzg2ssBXHx+ljVO8tS4UYIwKAYDVR0RBCEwH4Eda2V2aW5AZGFyYnlz aGlyZS1icnlhbnQubWUudWswggFMBgNVHSAEggFDMIIBPzCCATsGCysGAQQBgbU3AQIDMIIB KjAuBggrBgEFBQcCARYiaHR0cDovL3d3dy5zdGFydHNzbC5jb20vcG9saWN5LnBkZjCB9wYI KwYBBQUHAgIwgeowJxYgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwAwIBARqB vlRoaXMgY2VydGlmaWNhdGUgd2FzIGlzc3VlZCBhY2NvcmRpbmcgdG8gdGhlIENsYXNzIDEg VmFsaWRhdGlvbiByZXF1aXJlbWVudHMgb2YgdGhlIFN0YXJ0Q29tIENBIHBvbGljeSwgcmVs aWFuY2Ugb25seSBmb3IgdGhlIGludGVuZGVkIHB1cnBvc2UgaW4gY29tcGxpYW5jZSBvZiB0 aGUgcmVseWluZyBwYXJ0eSBvYmxpZ2F0aW9ucy4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDov L2NybC5zdGFydHNzbC5jb20vY3J0dTEtY3JsLmNybDCBjgYIKwYBBQUHAQEEgYEwfzA5Bggr BgEFBQcwAYYtaHR0cDovL29jc3Auc3RhcnRzc2wuY29tL3N1Yi9jbGFzczEvY2xpZW50L2Nh MEIGCCsGAQUFBzAChjZodHRwOi8vYWlhLnN0YXJ0c3NsLmNvbS9jZXJ0cy9zdWIuY2xhc3Mx LmNsaWVudC5jYS5jcnQwIwYDVR0SBBwwGoYYaHR0cDovL3d3dy5zdGFydHNzbC5jb20vMA0G CSqGSIb3DQEBCwUAA4IBAQBicQWe98eF/o09TXFsExc+WSyYjt3oSnXyocLzXQp82CQhIg21 5RqNZ1e+hsO7tq8S6hdItUDbKpecpIV59+57ke1zVl2slTRIT19fhYINHH78rVVRPzuHoiDt MXnGrp9hbq3Cz8P4mm8INKDiYK46kyplRAQ3ZMouPG1lsnDzgQAvbCj74H8yAp7fK8if6cxs 28BCUmdP8D3c6M1ffdNNaqNT+4Z3mtOujXXg7zOfmXN0Zg/mEtZ0NrWE2uICGdWjTv9KZiI7 fi4hk2CRpCL63qzmu6BwtcgtwhgYYtuAk2N43+SiyDkyLKGAcjEor3t5f9HivN29E0F0MXTH 1OdgMYIFDTCCBQkCAQEwgZQwgYwxCzAJBgNVBAYTAklMMRYwFAYDVQQKEw1TdGFydENvbSBM dGQuMSswKQYDVQQLEyJTZWN1cmUgRGlnaXRhbCBDZXJ0aWZpY2F0ZSBTaWduaW5nMTgwNgYD VQQDEy9TdGFydENvbSBDbGFzcyAxIFByaW1hcnkgSW50ZXJtZWRpYXRlIENsaWVudCBDQQID DnJKMA0GCWCGSAFlAwQCAwUAoIICSTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqG SIb3DQEJBTEPFw0xNTEyMTcyMTM5NDVaME8GCSqGSIb3DQEJBDFCBEC4hU91KuaZXeaj1+ni XNdRlO7CjaJYiPmnQiI2oqXM1/OdnQTS3Eq05F0jLbLeYAQ29ZNUgj18NpRwvvfJaM18MGwG CSqGSIb3DQEJDzFfMF0wCwYJYIZIAWUDBAEqMAsGCWCGSAFlAwQBAjAKBggqhkiG9w0DBzAO BggqhkiG9w0DAgICAIAwDQYIKoZIhvcNAwICAUAwBwYFKw4DAgcwDQYIKoZIhvcNAwICASgw gaUGCSsGAQQBgjcQBDGBlzCBlDCBjDELMAkGA1UEBhMCSUwxFjAUBgNVBAoTDVN0YXJ0Q29t IEx0ZC4xKzApBgNVBAsTIlNlY3VyZSBEaWdpdGFsIENlcnRpZmljYXRlIFNpZ25pbmcxODA2 BgNVBAMTL1N0YXJ0Q29tIENsYXNzIDEgUHJpbWFyeSBJbnRlcm1lZGlhdGUgQ2xpZW50IENB AgMOckowgacGCyqGSIb3DQEJEAILMYGXoIGUMIGMMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2ln bmluZzE4MDYGA1UEAxMvU3RhcnRDb20gQ2xhc3MgMSBQcmltYXJ5IEludGVybWVkaWF0ZSBD bGllbnQgQ0ECAw5ySjANBgkqhkiG9w0BAQEFAASCAgBDR4Rg5zGO9DOt4Vc6qM2vQLsE/RVL t4YI72zwMfl6E7ZwdP84748fpAEm/jE/1Wrxo2P0G+jveSAJKAtnwsYzdOf7qi7TgkGg7Wmq G6ohD92SQ6BkPeI4SQNp/tIuFkyZZgXfcect1U6VdBNOIOnX9SM5IU1hgL0+MFsoPgQe4xHS 8R+GoL5rOYlf8ssHlvtXV1L4omKw0nb39Cfyt+KW7U1fsqMke2M8Yu9rQBzaj0QF6BN/hQ25 cT5Fi/zdat2OIuFcdfPNO6RubyKb9yIM9rmvg5LerXKQv9lbxC8JISm+PTWARiXpWZ3ttpBG CXt+rNn4vQHApKiKQREmXQAXAtXUgMtV59TwwGIM834TP2AYLanhIKLdGUQkAM2ZAYFXq9fd RZSXi08k4td+FCMXGx5ofDb35ckVqg5dVkguywW5VfJzEWBnPlfQEehMGh3N6sUlW6rAGfHh gLHWmPPqdXvNS6Fgce64XsHr8PZkdKbAKAqfowaFlaRqof/0YZ1abJa8IQEgHSJ+Ru90qZhR dYyx3V/zK7OyD8P4/+D9iZ5/MBTzHlsYAmd/r0AogVQgl0ze4nASFGzLLYcQKA8lLo58hN9f 7qy6bTIxv/GA9Ov8cLUSnDkIvjPXPekSyVuvFMRWYpkY+DlixWxpev5t7Zp44MBFUEWmpT+p a+i72AAAAAAAAA== --------------ms050209090707090507000206--