From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: MIME-Version: 1.0 From: Jiri Horky Date: Mon, 15 Aug 2011 02:57:23 -0600 Subject: Re: fio memory allocation problems Message-ID: <4E48DF73.10700@cesnet.cz> References: <4E453BE0.5060708@cesnet.cz> <4E48D901.6030603@fusionio.com> In-Reply-To: <4E48D901.6030603@fusionio.com> Content-Language: en-US Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha1; boundary="------------ms060009000206010602020103" To: Jens Axboe Cc: "fio@vger.kernel.org" , 'Jan Furman' , =?utf-8?B?UGV0ZXIgVmVyxI1pbcOhaw==?= List-ID: --------------ms060009000206010602020103 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable Hi Jens, the patch is attached. It resolves the issue but I would not bet it=20 works in all scenarios. Cheers Jiri ------------ --- fio-head/smalloc.c 2011-08-15 10:40:24.000000000 +0200 +++ fio-head-patched/smalloc.c 2011-08-15 10:49:32.000000000 +0200 @@ -168,11 +168,11 @@ blocks_iter(pool, pool_idx, idx, nr_blocks, mask_clear); } -static int find_next_zero(int word, int start) +static int find_zero(int word, int start) { assert(word !=3D -1U); - word >>=3D (start + 1); - return ffz(word) + start + 1; + word >>=3D (start); + return ffz(word) + start; } static int add_pool(struct pool *pool, unsigned int alloc_size) @@ -374,7 +374,7 @@ continue; } - idx =3D find_next_zero(pool->bitmap[i], last_idx); + idx =3D find_zero(pool->bitmap[i], last_idx); if (!blocks_free(pool, i, idx, nr_blocks)) { idx +=3D nr_blocks; if (idx < SMALLOC_BPI) On 08/15/2011 10:29 AM, Jens Axboe wrote: > On 2011-08-12 16:42, Jiri Horky wrote: >> Hi, >> >> I think I found a bug. If the device (file) used in fio has "wrong" si= ze, and is used with "wrong" block size, the fio fails to allocate memory= for randommap. >> Following conditions must be true, considering just one thread for sim= plicity: >> >> 1) number of blocks on the device are too big to fill in the default= 's pool >> 2) number of blocks on the device must be "right", so the size of ne= wly allocated pool by smalloc.c:add_pool is exactly as big as requested s= ize (there are some roundings in place, so not every size triggers this e= rror) >> >> When this is true, function smalloc.c:__smalloc_pool fails to use the = newly created (exactly big enough) pool, because of this line: >> >> idx =3D find_next_zero(pool->bitmap[i], last_idx); >> >> which always returns non-zero value (the minimum returned value is las= t_idx +1), and so in our case the idx is 1 even though, the block number = 0 is free. As the direct consequence, the function doesn't find enough fr= ee space in the given pool and returns NULL pointer. This leads to anothe= r try to allocate enough memory in smalloc.c:smalloc_real function, and s= o on... >> >> The behavior could be reprocuded using both stable 1.57 and git versio= n of the tool. The values that triggers the error are: >> init_random_map - real_file_size: 21999995584512, o.rw_min_bs: 4096, b= locks: 5371092672, num_maps: 83923323, alloc size: 671386584 >> >> whereas this block device is fine: >> init_random_map - real_file_size: 19999995985920, o.rw_min_bs: 4096, b= locks: 4882811520, num_maps: 76293930, alloc size: 610351440 >> >> the configuration file used: >> >> [global] >> description=3DCESNET_test >> [cesnet] >> filename=3D/dev/sdd >> rw=3Drandread >> size=3D10000g >> ioengine=3Dlibaio >> iodepth=3D4 >> bs=3D4k >> runtime=3D10m >> time_based >> numjobs=3D1 >> #norandommap >> group_reporting >> >> >> I am not sure I fully understand all the logic in smalloc.c so I am af= raid I would break something with a trivial patch. >> >> Let me know, if you need more information > That does indeed look like a bug in smalloc, bummer. I'll try and take = a > look at it, if you do have a test patch you are using, please send it > along. > --------------ms060009000206010602020103 Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIXsjCC BGYwggNOoAMCAQICEFEmCpMc4n+cw6VfeeByroIwDQYJKoZIhvcNAQEFBQAwgZMxCzAJBgNV BAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAcBgNVBAoT FVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2VydHJ1c3Qu Y29tMRswGQYDVQQDExJVVE4gLSBEQVRBQ29ycCBTR0MwHhcNMDUwNjA3MDgwOTEwWhcNMTkw NjI0MTkwNjMwWjBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNV BAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBF eHRlcm5hbCBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt/caM+by AAQtOeBOW+0fvGwPzbX6I7bO3psRM5ekKUx9k5+9SryT7QMa44/P5W1QWtaXKZRagLBJetsu lf24yr83OC0ePpFBrXBWx/BPP+gynnTKyJBU6cZfD3idmkA8Dqxhql4Uj56HoWpQ3NeaTq8F s6ZxlJxxs1BgCscTnTgHhgKo6ahpJhiQq0ywTyOrOk+E2N/On+Fpb7vXQtdrROTHre5tQV9y WnEIN7N5ZaRZoJQ39wAvDcKSctrQOHLbFKhFxF0qfbe01sTurM0TRLfJK91DACX6Yblpalgj EbenM49WdVn1zSnXRrcKK2W200JvFbK4e/vv6V1T1TRaJwIDAQABo4HYMIHVMB8GA1UdIwQY MBaAFFMy0bPPf/rg8aBdhU6S0p5FHbRPMB0GA1UdDgQWBBStvZh6NLQm9/rEJlTvA73gJMtU GjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zARBglghkgBhvhCAQEEBAMCAQIw IAYDVR0lBBkwFwYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMD0GA1UdHwQ2MDQwMqAwoC6GLGh0 dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tREFUQUNvcnBTR0MuY3JsMA0GCSqGSIb3DQEB BQUAA4IBAQDG7lMXaBSyUSIekFgNlP298XDlhi3DNjGPVEhG5y0IN7xsCmDhDq1RNOASk+m+ uKu4JrTplj0oj65kB/7gAezF45HrGKDxdX7bCuafkduvrnXfI5Fo3RcAWkv/ZGxw6wEa0JDZ x6bWbfYT5P+1ydIeKsuxJUMmeNkwm04NHr5p79/q/i2zzPmw3bUUypHUsrWl+wEZo0d5n52M lYc0+B84kto2phH6a+tr6dxFeBU5BtdNQeQhyNwvh9G3v0hgdaViyyTeO2GgKSCmvsVsnMTp Cmki75E6+iav0VtBpzri+DgHQqvBW/jObboPBD8yNKzcBCjXcDAUJgbE5JuY1c94MIIEijCC A3KgAwIBAgIQJ/TqEfR6hsRunbtuqRcHBzANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJT RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRU UCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTA1MDYw NzA4MDkxMFoXDTIwMDUzMDEwNDgzOFowga4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEX MBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29y azEhMB8GA1UECxMYaHR0cDovL3d3dy51c2VydHJ1c3QuY29tMTYwNAYDVQQDEy1VVE4tVVNF UkZpcnN0LUNsaWVudCBBdXRoZW50aWNhdGlvbiBhbmQgRW1haWwwggEiMA0GCSqGSIb3DQEB AQUAA4IBDwAwggEKAoIBAQCyOYWk8n2rQTtiRjeuzcFgdbw5ZflKGkeiucxIzGqY1U01Gbmk QuXOSeKKLx580jEHx060g2SdLinVomTEhb2FUTV5pE5okHsceqSSqBfymBXyk8zJpDKVuwxP ML2YoAuL5W4bokb6eLyib6tZXqUvz8rabaov66yhs2qqty5nNYt54R5piOLmRs2gpeq+C852 OnoOm+r82idbPXMfIuZIYcZM82mxqC4bttQxICy8goqOpA6l14lD/BZarx1x1xFZ2rqHDa/6 8+HC8KTFZ4zW1lQ63gqkugN3s2XI/R7TdGKqGMpokx6hhX71R2XL+E1XKHTSNP8wtu72YjAU jCzrAgMBAAGjgeEwgd4wHwYDVR0jBBgwFoAUrb2YejS0Jvf6xCZU7wO94CTLVBowHQYDVR0O BBYEFImCZ33EnSZwAEu0UEh83j2uBG59MA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTAD AQH/MHsGA1UdHwR0MHIwOKA2oDSGMmh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL0FkZFRydXN0 RXh0ZXJuYWxDQVJvb3QuY3JsMDagNKAyhjBodHRwOi8vY3JsLmNvbW9kby5uZXQvQWRkVHJ1 c3RFeHRlcm5hbENBUm9vdC5jcmwwDQYJKoZIhvcNAQEFBQADggEBABnYiRFvKKymAKLnh8Gb kAPbfqES/R7z4vABqZRUQmuaCcSgbdeQkgQDZnlDcfz4b6/bdkXiNxo93eRZBHisHPSDRvN6 z1uEci3lRsG6GBEp88tJeYc8um0FnaRtaE+tchQ2qLmx/b/Pf/CkapQ1UI/PgW1Vsd1ZMErf baCcZB9JfO82u/TjafT4OY9arUuFOrcO7dPPDUSi+wS/5C9wjiX7WlQGs9DEvG2N+3MyLOmb hCQt1n+RemgCUB8OP03pzPW7Z+jcHC47/E7N/gKO46gTCqUmRGXpEPJNUqeu3D7KazJcQWz+ 9V2g6v/R+puGWG09lkfl/i6VBMIAzI6h8rswggTaMIIDwqADAgECAhBd/1Dq/g9TRoifgEGP 50LIMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNV BAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAf BgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UEAxMtVVROLVVTRVJGaXJz dC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWlsMB4XDTA5MDUxODAwMDAwMFoXDTI4 MTIzMTIzNTk1OVowRDELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEkMCIGA1UEAxMb VEVSRU5BIGVTY2llbmNlIFBlcnNvbmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB CgKCAQEAxLwlfc3vWQSrdCcptmOK78Q1cKFGCK9uUJsbcXiXAoXANf+QGBFm+jM5FJ6kEvc9 7gUsgef3LS42eEMOObZ/enTDy1U/L7PLwzdq4ZUDIxuzIpgTg1gwX6w8kUXTbQsuy9GRYbLK cfrCiQx7CdaSv6OBFxFVIN83gZ8eJgkd0hcZQ8uLmSV0QVvmMirQp1Pc0iGNzZHPe2z0yf7Q 5dIGaxphQhuAkQfcFEknOwqKsuI7aQiEy4GZ17oUH9h+kmO99i0x+pVOzTYNme8Ruq1K+6jE eLl8Wj7I9QgywKkFx4waKI8wuhej8bniB6e4+1W/n2Ja1RQPCLQTmdISeVrw/QIDAQABo4IB WzCCAVcwHwYDVR0jBBgwFoAUiYJnfcSdJnAAS7RQSHzePa4Ebn0wHQYDVR0OBBYEFMiJc5mn XVEWU0VUfKPCOXzL16qBMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMCYG A1UdIAQfMB0wDQYLKwYBBAGyMQECAh0wDAYKKoZIhvdMBQICBTBYBgNVHR8EUTBPME2gS6BJ hkdodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGllbnRBdXRoZW50 aWNhdGlvbmFuZEVtYWlsLmNybDBvBggrBgEFBQcBAQRjMGEwOAYIKwYBBQUHMAKGLGh0dHA6 Ly9jcnQudXNlcnRydXN0LmNvbS9VVE5BQUFDbGllbnRfQ0EuY3J0MCUGCCsGAQUFBzABhhlo dHRwOi8vb2NzcC51c2VydHJ1c3QuY29tMA0GCSqGSIb3DQEBBQUAA4IBAQAIF6Qc+RVrsBlh b6BI43ok70FVmqBQcNgj1VOGSmeO6NpWFhgsGxghibqYJO5WNOMXhia9IVrUGZNK6mF0TbbE hI1H7souZW02k5ix4pJmiOJOe3XHXkRpIdwSajD8YYD+D/Cd0tx+ruXCU00LcINhVkX7Pd9y 9gJCdeuIiphXYPWfonJJsXo+QWc1w1UrDQc16MYr1bqHeYB055I2vUaBei4p4mq+4RcTNXwW pCUzL2HuzslS4EDb0745Ws/PTBTlf8VDV4tNuVqOwg8GTd7ISZ2Bc7rkP5ilkzxZTtubNd/+ Tb9Voelkw0V8rI98R9E68U512ZBnQOixL54XL1w1MIIE6jCCA9KgAwIBAgIQOhkExlgrlDBI rXauLbctajANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5B MSQwIgYDVQQDExtURVJFTkEgZVNjaWVuY2UgUGVyc29uYWwgQ0EwHhcNMTEwNjA4MDAwMDAw WhcNMTIwNzA3MjM1OTU5WjB6MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQB GRYGdGVyZW5hMRMwEQYKCZImiZPyLGQBGRYDdGNzMQswCQYDVQQGEwJDWjEPMA0GA1UEChMG Q0VTTkVUMRgwFgYDVQQDEw9KaXJpIEhvcmt5IDM1NzAwggEiMA0GCSqGSIb3DQEBAQUAA4IB DwAwggEKAoIBAQDLFeAtUK2Re8qxCvEtMyMKDCKYhu9e9TxSuAjgL1ifAdpcFshlA949pGLo ZATdYvJtgmUZ1WQd38VUFDia0i2mwu8DyDzGdo3a/zc2FW5ic2xsS4jmESKCLkmjf2DTQxV8 RHIw9rqMimhubnvwmaCKDvoGLwuqwwNkdXUa/PmaLo+252LPlK0Ft325pO2xSYaOXIC6ssAs M1AD1PaGN3QRfjB3liP3blOpeKd7zJoXz6Aywd553dmg2It0Qacilv4Gn+nYcht7FaliOICa 0qixcFxx9pxD2etMC475NJcNqRDe70CaGPlyLr0tSHkcPWjsuoRdYEifGhHROCg0zZjVAgMB AAGjggGgMIIBnDAfBgNVHSMEGDAWgBTIiXOZp11RFlNFVHyjwjl8y9eqgTAdBgNVHQ4EFgQU ioOz8ezQ7T74Io5DNvk1Zbz72cYwDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYD VR0lBBYwFAYIKwYBBQUHAwQGCCsGAQUFBwMCMCYGA1UdIAQfMB0wDQYLKwYBBAGyMQECAh0w DAYKKoZIhvdMBQICBTBHBgNVHR8EQDA+MDygOqA4hjZodHRwOi8vY3JsLnRjcy50ZXJlbmEu b3JnL1RFUkVOQWVTY2llbmNlUGVyc29uYWxDQS5jcmwwegYIKwYBBQUHAQEEbjBsMEIGCCsG AQUFBzAChjZodHRwOi8vY3J0LnRjcy50ZXJlbmEub3JnL1RFUkVOQWVTY2llbmNlUGVyc29u YWxDQS5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6Ly9vY3NwLnRjcy50ZXJlbmEub3JnMDAGA1Ud EQQpMCeBD2hvcmt5QGNlc25ldC5jeoEUamlyaS5ob3JreUBjZXNuZXQuY3owDQYJKoZIhvcN AQEFBQADggEBACeDvPBzQ5M5dvmb6JBEIyLrLpsXziSHzYEnOvng+wQ+DdZpEqh4bIJyi/6s r8QS48wKe/UV5N73KSQu5dSlzARuzj9J8f4b/5vu0GvPcyzFABk/bKAIqH96GBgAjJTECLbS hYJbxnkFrq6gsgTcPNagQpGoazyYzDaTd3YEt2JUzbkuzQLFtyU+h7UcF9hEhamkpTkOi2/x QpApCzT7TM9b1AzCVsb9ag5+WtYABcbvuBbiF1dx7Y01PhcQsKOWGn6Osv+cF1zWQ39U0O5t 88LPLwaEseIm3fFiH+crodZkEKTUyEZkm0vz7+PIXxKbsAPEV9yfZhq2j1o7DKb9MBMwggTq MIID0qADAgECAhA6GQTGWCuUMEitdq4tty1qMA0GCSqGSIb3DQEBBQUAMEQxCzAJBgNVBAYT Ak5MMQ8wDQYDVQQKEwZURVJFTkExJDAiBgNVBAMTG1RFUkVOQSBlU2NpZW5jZSBQZXJzb25h bCBDQTAeFw0xMTA2MDgwMDAwMDBaFw0xMjA3MDcyMzU5NTlaMHoxEzARBgoJkiaJk/IsZAEZ FgNvcmcxFjAUBgoJkiaJk/IsZAEZFgZ0ZXJlbmExEzARBgoJkiaJk/IsZAEZFgN0Y3MxCzAJ BgNVBAYTAkNaMQ8wDQYDVQQKEwZDRVNORVQxGDAWBgNVBAMTD0ppcmkgSG9ya3kgMzU3MDCC ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMsV4C1QrZF7yrEK8S0zIwoMIpiG7171 PFK4COAvWJ8B2lwWyGUD3j2kYuhkBN1i8m2CZRnVZB3fxVQUOJrSLabC7wPIPMZ2jdr/NzYV bmJzbGxLiOYRIoIuSaN/YNNDFXxEcjD2uoyKaG5ue/CZoIoO+gYvC6rDA2R1dRr8+Zouj7bn Ys+UrQW3fbmk7bFJho5cgLqywCwzUAPU9oY3dBF+MHeWI/duU6l4p3vMmhfPoDLB3nnd2aDY i3RBpyKW/gaf6dhyG3sVqWI4gJrSqLFwXHH2nEPZ60wLjvk0lw2pEN7vQJoY+XIuvS1IeRw9 aOy6hF1gSJ8aEdE4KDTNmNUCAwEAAaOCAaAwggGcMB8GA1UdIwQYMBaAFMiJc5mnXVEWU0VU fKPCOXzL16qBMB0GA1UdDgQWBBSKg7Px7NDtPvgijkM2+TVlvPvZxjAOBgNVHQ8BAf8EBAMC BaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDBAYIKwYBBQUHAwIwJgYDVR0g BB8wHTANBgsrBgEEAbIxAQICHTAMBgoqhkiG90wFAgIFMEcGA1UdHwRAMD4wPKA6oDiGNmh0 dHA6Ly9jcmwudGNzLnRlcmVuYS5vcmcvVEVSRU5BZVNjaWVuY2VQZXJzb25hbENBLmNybDB6 BggrBgEFBQcBAQRuMGwwQgYIKwYBBQUHMAKGNmh0dHA6Ly9jcnQudGNzLnRlcmVuYS5vcmcv VEVSRU5BZVNjaWVuY2VQZXJzb25hbENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3Au dGNzLnRlcmVuYS5vcmcwMAYDVR0RBCkwJ4EPaG9ya3lAY2VzbmV0LmN6gRRqaXJpLmhvcmt5 QGNlc25ldC5jejANBgkqhkiG9w0BAQUFAAOCAQEAJ4O88HNDkzl2+ZvokEQjIusumxfOJIfN gSc6+eD7BD4N1mkSqHhsgnKL/qyvxBLjzAp79RXk3vcpJC7l1KXMBG7OP0nx/hv/m+7Qa89z LMUAGT9soAiof3oYGACMlMQIttKFglvGeQWurqCyBNw81qBCkahrPJjMNpN3dgS3YlTNuS7N AsW3JT6HtRwX2ESFqaSlOQ6Lb/FCkCkLNPtMz1vUDMJWxv1qDn5a1gAFxu+4FuIXV3HtjTU+ FxCwo5Yafo6y/5wXXNZDf1TQ7m3zws8vBoSx4ibd8WIf5yuh1mQQpNTIRmSbS/Pv48hfEpuw A8RX3J9mGraPWjsMpv0wEzGCAxUwggMRAgEBMFgwRDELMAkGA1UEBhMCTkwxDzANBgNVBAoT BlRFUkVOQTEkMCIGA1UEAxMbVEVSRU5BIGVTY2llbmNlIFBlcnNvbmFsIENBAhA6GQTGWCuU MEitdq4tty1qMAkGBSsOAwIaBQCgggGSMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJ KoZIhvcNAQkFMQ8XDTExMDgxNTA4NTcyM1owIwYJKoZIhvcNAQkEMRYEFMcAWcQTtqvI79jL RQoIxE0MB8A6MF8GCSqGSIb3DQEJDzFSMFAwCwYJYIZIAWUDBAECMAoGCCqGSIb3DQMHMA4G CCqGSIb3DQMCAgIAgDANBggqhkiG9w0DAgIBQDAHBgUrDgMCBzANBggqhkiG9w0DAgIBKDBn BgkrBgEEAYI3EAQxWjBYMEQxCzAJBgNVBAYTAk5MMQ8wDQYDVQQKEwZURVJFTkExJDAiBgNV BAMTG1RFUkVOQSBlU2NpZW5jZSBQZXJzb25hbCBDQQIQOhkExlgrlDBIrXauLbctajBpBgsq hkiG9w0BCRACCzFaoFgwRDELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEkMCIGA1UE AxMbVEVSRU5BIGVTY2llbmNlIFBlcnNvbmFsIENBAhA6GQTGWCuUMEitdq4tty1qMA0GCSqG SIb3DQEBAQUABIIBAF6cVYBlqfxouAkAkLAN2d/FHV8yHxvva8IHDFIuKOH2FU/riMxyuz9I h0Rg3JuOtojYLyVoYeoUuaU5nob/56VUfbRpYDfZOMH9mkQ1w8vrSVi7hmLi6qE7pbEqJ9g1 VNEGvb+bl5cHsqGOUHDUIgPD6G+weTXWnUVeb9DTSxclypHrWRSlI59ir8GGl95Bcwy7AH/0 OEs4sgfF+oZHD8lGED7b8OXb52wvnLdLi21T2O4zLmPLaW1L8Rs4jaRF9MMvZGVau3yfi6ZY GYCcdmiETwnvzfN2nJqetqULT1uLKstusevbMt07RMqXGwjirkgz9ZhkHWofaoDMr1/K8EIA AAAAAAA= --------------ms060009000206010602020103--