From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============1746075646443884262==" MIME-Version: 1.0 From: Shahar Salzman Subject: Re: [SPDK] Building spdk on CentOS6 Date: Tue, 24 Apr 2018 06:57:22 +0000 Message-ID: In-Reply-To: A5F28D4A728A7E41839CDC5C3B5A01E8B5C6C822@fmsmsx104.amr.corp.intel.com List-ID: To: spdk@lists.01.org --===============1746075646443884262== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Great, and thanks! I have been running into issues compiling dpdk 17.11 on CentOS6 (there seem= s to be a gcc issue that does not exist in other versions), I'll focus my e= fforts on dpdk 18.02. ________________________________ From: SPDK on behalf of Verkamp, Daniel Sent: Monday, April 23, 2018 9:40:36 PM To: Storage Performance Development Kit Subject: Re: [SPDK] Building spdk on CentOS6 Hi Shahar, I=E2=80=99ve pushed a patch for the SPDK master branch that should allow it= to compile with DPDK 16.07: https://review.gerrithub.io/#/c/spdk/spdk/+/40= 8743/ However, DPDK 16.07 is no longer supported upstream; I highly recommend tha= t you update to a newer version. SPDK is currently tested with DPDK 18.02. The VFIO issue you mention has also been fixed on SPDK master, and it will = be part of the SPDK v18.04 release. Thanks, -- Daniel From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of Shahar Salzman Sent: Sunday, April 22, 2018 6:41 AM To: Storage Performance Development Kit Subject: [SPDK] Building spdk on CentOS6 Hi, Finally got to looking at support of spdk build on CentOS6, things look goo= d, except for one issue. spdk is latest 18.01.x version, dpdk is 16.07 (+3 dpdk patches to allow com= pilation) and some minor patches (mainly some memory configuration stuff), = kernel is a patched 4.9.6. build succeeded except for the usage of the dpdk function pci_vfio_is_enabl= ed. I had to apply the patch bellow, removing the usage of this function and th= en compilation completed without any issues. It seems that I am missing some sort of dpdk configuration as I see that th= e function is built, but not packaged into the generated archive. I went back to square one and ran the instructions in http://www.spdk.io/do= c/getting_started.html, but I see no mention of dpdk there. Actually the ./= configure requires it. My next step is to use a more recent dpdk, but shouldn't this work with my = version? Am I missing some dpdk configuration? BTW, as we are not using vhost, on our 17.07 version we simply use CONFIG_V= HOST=3Dn in order to skip this, but I would be happier if we used a better = solution. Shahar P.S. Here is the patch to remove use of this function: diff --git a/lib/env_dpdk/vtophys.c b/lib/env_dpdk/vtophys.c index 92aa256..f38929f 100644 --- a/lib/env_dpdk/vtophys.c +++ b/lib/env_dpdk/vtophys.c @@ -53,8 +53,10 @@ #define SPDK_VFIO_ENABLED 1 #include +#if 0 /* Internal DPDK function forward declaration */ int pci_vfio_is_enabled(void); +#endif struct spdk_vfio_dma_map { struct vfio_iommu_type1_dma_map map; @@ -341,9 +343,11 @@ spdk_vtophys_iommu_init(void) DIR *dir; struct dirent *d; +#if 0 if (!pci_vfio_is_enabled()) { return; } +#endif dir =3D opendir("/proc/self/fd"); if (!dir) { --===============1746075646443884262== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRl eHQvaHRtbDsgY2hhcnNldD1XaW5kb3dzLTEyNTIiPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiIHN0 eWxlPSJkaXNwbGF5Om5vbmU7Ij48IS0tIFAge21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjA7 fSAtLT48L3N0eWxlPgo8L2hlYWQ+Cjxib2R5IGRpcj0ibHRyIj4KPGRpdiBpZD0iZGl2dGFnZGVm YXVsdHdyYXBwZXIiIHN0eWxlPSJmb250LXNpemU6MTJwdDtjb2xvcjojMDAwMDAwO2ZvbnQtZmFt aWx5OkNhbGlicmksSGVsdmV0aWNhLHNhbnMtc2VyaWY7IiBkaXI9Imx0ciI+CjxwIHN0eWxlPSJt YXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowIj5HcmVhdCwgYW5kIHRoYW5rcyE8L3A+CjxwIHN0 eWxlPSJtYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowIj48YnI+CjwvcD4KPHAgc3R5bGU9Im1h cmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjAiPkkgaGF2ZSBiZWVuIHJ1bm5pbmcgaW50byBpc3N1 ZXMgY29tcGlsaW5nIGRwZGsgMTcuMTEgb24gQ2VudE9TNiAodGhlcmUgc2VlbXMgdG8gYmUgYSBn Y2MgaXNzdWUgdGhhdCBkb2VzIG5vdCBleGlzdCBpbiBvdGhlciB2ZXJzaW9ucyksIEknbGwgZm9j dXMgbXkgZWZmb3J0cyBvbiBkcGRrJm5ic3A7MTguMDIuPC9wPgo8L2Rpdj4KPGhyIHN0eWxlPSJk aXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDo5OCUiIHRhYmluZGV4PSItMSI+CjxkaXYgaWQ9ImRp dlJwbHlGd2RNc2ciIGRpcj0ibHRyIj48Zm9udCBmYWNlPSJDYWxpYnJpLCBzYW5zLXNlcmlmIiBz dHlsZT0iZm9udC1zaXplOjExcHQiIGNvbG9yPSIjMDAwMDAwIj48Yj5Gcm9tOjwvYj4gU1BESyAm bHQ7c3Bkay1ib3VuY2VzQGxpc3RzLjAxLm9yZyZndDsgb24gYmVoYWxmIG9mIFZlcmthbXAsIERh bmllbCAmbHQ7ZGFuaWVsLnZlcmthbXBAaW50ZWwuY29tJmd0Ozxicj4KPGI+U2VudDo8L2I+IE1v bmRheSwgQXByaWwgMjMsIDIwMTggOTo0MDozNiBQTTxicj4KPGI+VG86PC9iPiBTdG9yYWdlIFBl cmZvcm1hbmNlIERldmVsb3BtZW50IEtpdDxicj4KPGI+U3ViamVjdDo8L2I+IFJlOiBbU1BES10g QnVpbGRpbmcgc3BkayBvbiBDZW50T1M2PC9mb250Pgo8ZGl2PiZuYnNwOzwvZGl2Pgo8L2Rpdj4K PHN0eWxlPgo8IS0tCkBmb250LWZhY2UKCXtmb250LWZhbWlseToiQ2FtYnJpYSBNYXRoIn0KQGZv bnQtZmFjZQoJe2ZvbnQtZmFtaWx5OkNhbGlicml9CnAueF9Nc29Ob3JtYWwsIGxpLnhfTXNvTm9y bWFsLCBkaXYueF9Nc29Ob3JtYWwKCXttYXJnaW46MGluOwoJbWFyZ2luLWJvdHRvbTouMDAwMXB0 OwoJZm9udC1zaXplOjEyLjBwdDsKCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iLHNlcmlm fQphOnhfbGluaywgc3Bhbi54X01zb0h5cGVybGluawoJe2NvbG9yOmJsdWU7Cgl0ZXh0LWRlY29y YXRpb246dW5kZXJsaW5lfQphOnhfdmlzaXRlZCwgc3Bhbi54X01zb0h5cGVybGlua0ZvbGxvd2Vk Cgl7Y29sb3I6cHVycGxlOwoJdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0KcAoJe21hcmdpbjow aW47CgltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Cglmb250LXNpemU6MTIuMHB0OwoJZm9udC1mYW1p bHk6IlRpbWVzIE5ldyBSb21hbiIsc2VyaWZ9CnAueF9Nc29MaXN0UGFyYWdyYXBoLCBsaS54X01z b0xpc3RQYXJhZ3JhcGgsIGRpdi54X01zb0xpc3RQYXJhZ3JhcGgKCXttYXJnaW4tdG9wOjBpbjsK CW1hcmdpbi1yaWdodDowaW47CgltYXJnaW4tYm90dG9tOjBpbjsKCW1hcmdpbi1sZWZ0Oi41aW47 CgltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Cglmb250LXNpemU6MTIuMHB0OwoJZm9udC1mYW1pbHk6 IlRpbWVzIE5ldyBSb21hbiIsc2VyaWZ9CnNwYW4ueF9FbWFpbFN0eWxlMTgKCXtmb250LWZhbWls eToiQ2FsaWJyaSIsc2Fucy1zZXJpZjsKCWNvbG9yOiMxRjQ5N0R9Ci54X01zb0NocERlZmF1bHQK CXtmb250LXNpemU6MTAuMHB0fQpAcGFnZSBXb3JkU2VjdGlvbjEKCXttYXJnaW46MS4waW4gMS4w aW4gMS4waW4gMS4waW59CmRpdi54X1dvcmRTZWN0aW9uMQoJe30KLS0+Cjwvc3R5bGU+CjxkaXYg bGFuZz0iRU4tVVMiIGxpbms9ImJsdWUiIHZsaW5rPSJwdXJwbGUiPgo8ZGl2IGNsYXNzPSJ4X1dv cmRTZWN0aW9uMSI+CjxwIGNsYXNzPSJ4X01zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6 ZToxMS4wcHQ7IGZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsgY29s b3I6IzFGNDk3RCI+SGkgU2hhaGFyLDwvc3Bhbj48L3A+CjxwIGNsYXNzPSJ4X01zb05vcm1hbCI+ PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7IGZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkm cXVvdDssc2Fucy1zZXJpZjsgY29sb3I6IzFGNDk3RCI+Jm5ic3A7PC9zcGFuPjwvcD4KPHAgY2xh c3M9InhfTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDsgZm9udC1mYW1p bHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmOyBjb2xvcjojMUY0OTdEIj5JknZlIHB1 c2hlZCBhIHBhdGNoIGZvciB0aGUgU1BESyBtYXN0ZXIgYnJhbmNoIHRoYXQgc2hvdWxkIGFsbG93 IGl0IHRvIGNvbXBpbGUgd2l0aCBEUERLIDE2LjA3Ogo8YSBocmVmPSJodHRwczovL3Jldmlldy5n ZXJyaXRodWIuaW8vIy9jL3NwZGsvc3Bkay8mIzQzOy80MDg3NDMvIj5odHRwczovL3Jldmlldy5n ZXJyaXRodWIuaW8vIy9jL3NwZGsvc3Bkay8mIzQzOy80MDg3NDMvPC9hPjwvc3Bhbj48L3A+Cjxw IGNsYXNzPSJ4X01zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7IGZvbnQt ZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6IzFGNDk3RCI+Jm5i c3A7PC9zcGFuPjwvcD4KPHAgY2xhc3M9InhfTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1z aXplOjExLjBwdDsgZm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmOyBj b2xvcjojMUY0OTdEIj5Ib3dldmVyLCBEUERLIDE2LjA3IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQg dXBzdHJlYW07IEkgaGlnaGx5IHJlY29tbWVuZCB0aGF0IHlvdSB1cGRhdGUgdG8gYSBuZXdlciB2 ZXJzaW9uLiBTUERLIGlzIGN1cnJlbnRseSB0ZXN0ZWQgd2l0aCBEUERLIDE4LjAyLjwvc3Bhbj48 L3A+CjxwIGNsYXNzPSJ4X01zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7 IGZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6IzFGNDk3 RCI+Jm5ic3A7PC9zcGFuPjwvcD4KPHAgY2xhc3M9InhfTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0i Zm9udC1zaXplOjExLjBwdDsgZm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNl cmlmOyBjb2xvcjojMUY0OTdEIj5UaGUgVkZJTyBpc3N1ZSB5b3UgbWVudGlvbiBoYXMgYWxzbyBi ZWVuIGZpeGVkIG9uIFNQREsgbWFzdGVyLCBhbmQgaXQgd2lsbCBiZSBwYXJ0IG9mIHRoZSBTUERL IHYxOC4wNCByZWxlYXNlLjwvc3Bhbj48L3A+CjxwIGNsYXNzPSJ4X01zb05vcm1hbCI+PHNwYW4g c3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7IGZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDss c2Fucy1zZXJpZjsgY29sb3I6IzFGNDk3RCI+Jm5ic3A7PC9zcGFuPjwvcD4KPHAgY2xhc3M9Inhf TXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDsgZm9udC1mYW1pbHk6JnF1 b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmOyBjb2xvcjojMUY0OTdEIj5UaGFua3MsPC9zcGFu PjwvcD4KPHAgY2xhc3M9InhfTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBw dDsgZm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmOyBjb2xvcjojMUY0 OTdEIj4tLSBEYW5pZWw8L3NwYW4+PC9wPgo8cCBjbGFzcz0ieF9Nc29Ob3JtYWwiPjxzcGFuIHN0 eWxlPSJmb250LXNpemU6MTEuMHB0OyBmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNh bnMtc2VyaWY7IGNvbG9yOiMxRjQ5N0QiPiZuYnNwOzwvc3Bhbj48L3A+CjxkaXYgc3R5bGU9ImJv cmRlcjpub25lOyBib3JkZXItbGVmdDpzb2xpZCBibHVlIDEuNXB0OyBwYWRkaW5nOjBpbiAwaW4g MGluIDQuMHB0Ij4KPGRpdj4KPGRpdiBzdHlsZT0iYm9yZGVyOm5vbmU7IGJvcmRlci10b3A6c29s aWQgI0UxRTFFMSAxLjBwdDsgcGFkZGluZzozLjBwdCAwaW4gMGluIDBpbiI+CjxwIGNsYXNzPSJ4 X01zb05vcm1hbCI+PGEgbmFtZT0ieF9fX19fX3JlcGx5c2VwYXJhdG9yIj48L2E+PGI+PHNwYW4g c3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7IGZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDss c2Fucy1zZXJpZiI+RnJvbTo8L3NwYW4+PC9iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0 OyBmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWYiPiBTUERLIFttYWls dG86c3Bkay1ib3VuY2VzQGxpc3RzLjAxLm9yZ10KPGI+T24gQmVoYWxmIE9mIDwvYj5TaGFoYXIg U2Fsem1hbjxicj4KPGI+U2VudDo8L2I+IFN1bmRheSwgQXByaWwgMjIsIDIwMTggNjo0MSBBTTxi cj4KPGI+VG86PC9iPiBTdG9yYWdlIFBlcmZvcm1hbmNlIERldmVsb3BtZW50IEtpdCAmbHQ7c3Bk a0BsaXN0cy4wMS5vcmcmZ3Q7PGJyPgo8Yj5TdWJqZWN0OjwvYj4gW1NQREtdIEJ1aWxkaW5nIHNw ZGsgb24gQ2VudE9TNjwvc3Bhbj48L3A+CjwvZGl2Pgo8L2Rpdj4KPHAgY2xhc3M9InhfTXNvTm9y bWFsIj4mbmJzcDs8L3A+CjxkaXYgaWQ9InhfZGl2dGFnZGVmYXVsdHdyYXBwZXIiPgo8ZGl2IGlk PSJ4X2RpdnRhZ2RlZmF1bHR3cmFwcGVyIj4KPHA+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZx dW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6YmxhY2siPkhpLDwvc3Bhbj48L3A+ CjxwPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2Vy aWY7IGNvbG9yOmJsYWNrIj4mbmJzcDs8L3NwYW4+PC9wPgo8cD48c3BhbiBzdHlsZT0iZm9udC1m YW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmOyBjb2xvcjpibGFjayI+RmluYWxs eSBnb3QgdG8gbG9va2luZyBhdCBzdXBwb3J0IG9mIHNwZGsgYnVpbGQgb24gQ2VudE9TNiwgdGhp bmdzIGxvb2sgZ29vZCwgZXhjZXB0IGZvciBvbmUgaXNzdWUuPC9zcGFuPjwvcD4KPHA+PHNwYW4g c3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6 YmxhY2siPnNwZGsgaXMgbGF0ZXN0IDE4LjAxLnggdmVyc2lvbiwgZHBkayBpcyAxNi4wNyAoJiM0 MzszIGRwZGsmbmJzcDtwYXRjaGVzIHRvIGFsbG93IGNvbXBpbGF0aW9uKSBhbmQgc29tZSBtaW5v ciBwYXRjaGVzIChtYWlubHkgc29tZSBtZW1vcnkgY29uZmlndXJhdGlvbiBzdHVmZiksIGtlcm5l bCBpcyBhIHBhdGNoZWQgNC45LjYuPC9zcGFuPjwvcD4KPHA+PHNwYW4gc3R5bGU9ImZvbnQtZmFt aWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6YmxhY2siPiZuYnNwOzwv c3Bhbj48L3A+CjxwPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7 LHNhbnMtc2VyaWY7IGNvbG9yOmJsYWNrIj5idWlsZCBzdWNjZWVkZWQgZXhjZXB0IGZvciB0aGUg dXNhZ2Ugb2YgdGhlJm5ic3A7ZHBkayBmdW5jdGlvbiZuYnNwO3BjaV92ZmlvX2lzX2VuYWJsZWQu PC9zcGFuPjwvcD4KPHA+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVv dDssc2Fucy1zZXJpZjsgY29sb3I6YmxhY2siPkkgaGFkIHRvIGFwcGx5IHRoZSBwYXRjaCBiZWxs b3csIHJlbW92aW5nIHRoZSB1c2FnZSBvZiB0aGlzIGZ1bmN0aW9uIGFuZCB0aGVuIGNvbXBpbGF0 aW9uIGNvbXBsZXRlZCB3aXRob3V0IGFueSBpc3N1ZXMuPC9zcGFuPjwvcD4KPHA+PHNwYW4gc3R5 bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6Ymxh Y2siPiZuYnNwOzwvc3Bhbj48L3A+CjxwPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtD YWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOmJsYWNrIj5JdCBzZWVtcyB0aGF0IEkgYW0g bWlzc2luZyBzb21lIHNvcnQgb2YgZHBkayBjb25maWd1cmF0aW9uIGFzIEkgc2VlIHRoYXQgdGhl IGZ1bmN0aW9uIGlzIGJ1aWx0LCBidXQgbm90IHBhY2thZ2VkIGludG8gdGhlIGdlbmVyYXRlZCBh cmNoaXZlLjwvc3Bhbj48L3A+CjxwPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDYWxp YnJpJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOmJsYWNrIj4mbmJzcDs8L3NwYW4+PC9wPgo8cD48 c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmOyBj b2xvcjpibGFjayI+SSB3ZW50IGJhY2sgdG8gc3F1YXJlIG9uZSBhbmQgcmFuIHRoZSBpbnN0cnVj dGlvbnMgaW4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3LnNwZGsuaW8vZG9jL2dldHRpbmdfc3Rh cnRlZC5odG1sIiBpZD0iTFBsbms2NDUzODMiPmh0dHA6Ly93d3cuc3Bkay5pby9kb2MvZ2V0dGlu Z19zdGFydGVkLmh0bWw8L2E+LCBidXQgSSBzZWUgbm8gbWVudGlvbgogb2YgZHBkayB0aGVyZS4g QWN0dWFsbHkgdGhlIC4vY29uZmlndXJlIHJlcXVpcmVzIGl0Ljwvc3Bhbj48L3A+CjxwPjxzcGFu IHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9y OmJsYWNrIj4mbmJzcDs8L3NwYW4+PC9wPgo8cD48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1 b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmOyBjb2xvcjpibGFjayI+TXkgbmV4dCBzdGVwIGlz IHRvIHVzZSBhIG1vcmUgcmVjZW50IGRwZGssIGJ1dCBzaG91bGRuJ3QgdGhpcyB3b3JrIHdpdGgg bXkgdmVyc2lvbj8gQW0gSSBtaXNzaW5nIHNvbWUgZHBkayBjb25maWd1cmF0aW9uPzwvc3Bhbj48 L3A+CjxwPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMt c2VyaWY7IGNvbG9yOmJsYWNrIj5CVFcsIGFzIHdlIGFyZSBub3QgdXNpbmcgdmhvc3QsIG9uIG91 ciAxNy4wNyB2ZXJzaW9uIHdlIHNpbXBseSB1c2UgQ09ORklHX1ZIT1NUPW4gaW4gb3JkZXIgdG8g c2tpcCB0aGlzLCBidXQgSSB3b3VsZCBiZSBoYXBwaWVyIGlmIHdlIHVzZWQgYSBiZXR0ZXIgc29s dXRpb24uPC9zcGFuPjwvcD4KPHA+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NhbGli cmkmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6YmxhY2siPiZuYnNwOzwvc3Bhbj48L3A+CjxwPjxz cGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7IGNv bG9yOmJsYWNrIj5TaGFoYXI8L3NwYW4+PC9wPgo8cCBjbGFzcz0ieF9Nc29Ob3JtYWwiPjxzcGFu IHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9y OmJsYWNrIj4mbmJzcDs8L3NwYW4+PC9wPgo8L2Rpdj4KPGRpdiBpZD0ieF9kaXZ0YWdkZWZhdWx0 d3JhcHBlciI+CjxwIGNsYXNzPSJ4X01zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5 OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6YmxhY2siPlAuUy4gSGVyZSBp cyB0aGUgcGF0Y2ggdG8gcmVtb3ZlIHVzZSBvZiB0aGlzIGZ1bmN0aW9uOjwvc3Bhbj48L3A+Cjwv ZGl2Pgo8ZGl2IGlkPSJ4X2RpdnRhZ2RlZmF1bHR3cmFwcGVyIj4KPGRpdj4KPHAgY2xhc3M9Inhf TXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90Oyxz YW5zLXNlcmlmOyBjb2xvcjpibGFjayI+ZGlmZiAtLWdpdCBhL2xpYi9lbnZfZHBkay92dG9waHlz LmMgYi9saWIvZW52X2RwZGsvdnRvcGh5cy5jPC9zcGFuPjwvcD4KPC9kaXY+CjxkaXY+CjxwIGNs YXNzPSJ4X01zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkm cXVvdDssc2Fucy1zZXJpZjsgY29sb3I6YmxhY2siPmluZGV4IDkyYWEyNTYuLmYzODkyOWYgMTAw NjQ0PC9zcGFuPjwvcD4KPC9kaXY+CjxkaXY+CjxwIGNsYXNzPSJ4X01zb05vcm1hbCI+PHNwYW4g c3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6 YmxhY2siPi0tLSBhL2xpYi9lbnZfZHBkay92dG9waHlzLmM8L3NwYW4+PC9wPgo8L2Rpdj4KPGRp dj4KPHAgY2xhc3M9InhfTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7 Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmOyBjb2xvcjpibGFjayI+JiM0MzsmIzQzOyYjNDM7IGIv bGliL2Vudl9kcGRrL3Z0b3BoeXMuYzwvc3Bhbj48L3A+CjwvZGl2Pgo8ZGl2Pgo8cCBjbGFzcz0i eF9Nc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7 LHNhbnMtc2VyaWY7IGNvbG9yOmJsYWNrIj5AQCAtNTMsOCAmIzQzOzUzLDEwIEBAPC9zcGFuPjwv cD4KPC9kaXY+CjxkaXY+CjxwIGNsYXNzPSJ4X01zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQt ZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6YmxhY2siPiZuYnNw OyNkZWZpbmUgU1BES19WRklPX0VOQUJMRUQgMTwvc3Bhbj48L3A+CjwvZGl2Pgo8ZGl2Pgo8cCBj bGFzcz0ieF9Nc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDYWxpYnJp JnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOmJsYWNrIj4mbmJzcDsjaW5jbHVkZSAmbHQ7bGludXgv dmZpby5oJmd0Ozwvc3Bhbj48L3A+CjwvZGl2Pgo8ZGl2Pgo8cCBjbGFzcz0ieF9Nc29Ob3JtYWwi PjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7 IGNvbG9yOmJsYWNrIj4mbmJzcDs8L3NwYW4+PC9wPgo8L2Rpdj4KPGRpdj4KPHAgY2xhc3M9Inhf TXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90Oyxz YW5zLXNlcmlmOyBjb2xvcjpibGFjayI+JiM0MzsjaWYgMDwvc3Bhbj48L3A+CjwvZGl2Pgo8ZGl2 Pgo8cCBjbGFzcz0ieF9Nc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtD YWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOmJsYWNrIj4mbmJzcDsvKiBJbnRlcm5hbCBE UERLIGZ1bmN0aW9uIGZvcndhcmQgZGVjbGFyYXRpb24gKi88L3NwYW4+PC9wPgo8L2Rpdj4KPGRp dj4KPHAgY2xhc3M9InhfTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7 Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmOyBjb2xvcjpibGFjayI+Jm5ic3A7aW50IHBjaV92Zmlv X2lzX2VuYWJsZWQodm9pZCk7PC9zcGFuPjwvcD4KPC9kaXY+CjxkaXY+CjxwIGNsYXNzPSJ4X01z b05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fu cy1zZXJpZjsgY29sb3I6YmxhY2siPiYjNDM7I2VuZGlmPC9zcGFuPjwvcD4KPC9kaXY+CjxkaXY+ CjxwIGNsYXNzPSJ4X01zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0Nh bGlicmkmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6YmxhY2siPiZuYnNwOzwvc3Bhbj48L3A+Cjwv ZGl2Pgo8ZGl2Pgo8cCBjbGFzcz0ieF9Nc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LWZhbWls eTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOmJsYWNrIj4mbmJzcDtzdHJ1 Y3Qgc3Bka192ZmlvX2RtYV9tYXAgezwvc3Bhbj48L3A+CjwvZGl2Pgo8ZGl2Pgo8cCBjbGFzcz0i eF9Nc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7 LHNhbnMtc2VyaWY7IGNvbG9yOmJsYWNrIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgc3Ry dWN0IHZmaW9faW9tbXVfdHlwZTFfZG1hX21hcCBtYXA7PC9zcGFuPjwvcD4KPC9kaXY+CjxkaXY+ CjxwIGNsYXNzPSJ4X01zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0Nh bGlicmkmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6YmxhY2siPkBAIC0zNDEsOSAmIzQzOzM0Mywx MSBAQCBzcGRrX3Z0b3BoeXNfaW9tbXVfaW5pdCh2b2lkKTwvc3Bhbj48L3A+CjwvZGl2Pgo8ZGl2 Pgo8cCBjbGFzcz0ieF9Nc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtD YWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOmJsYWNrIj4mbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgRElSICpkaXI7PC9zcGFuPjwvcD4KPC9kaXY+CjxkaXY+CjxwIGNsYXNzPSJ4X01z b05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fu cy1zZXJpZjsgY29sb3I6YmxhY2siPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBzdHJ1Y3Qg ZGlyZW50ICpkOzwvc3Bhbj48L3A+CjwvZGl2Pgo8ZGl2Pgo8cCBjbGFzcz0ieF9Nc29Ob3JtYWwi PjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7 IGNvbG9yOmJsYWNrIj4mbmJzcDs8L3NwYW4+PC9wPgo8L2Rpdj4KPGRpdj4KPHAgY2xhc3M9Inhf TXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90Oyxz YW5zLXNlcmlmOyBjb2xvcjpibGFjayI+JiM0MzsjaWYgMDwvc3Bhbj48L3A+CjwvZGl2Pgo8ZGl2 Pgo8cCBjbGFzcz0ieF9Nc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtD YWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOmJsYWNrIj4mbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgaWYgKCFwY2lfdmZpb19pc19lbmFibGVkKCkpIHs8L3NwYW4+PC9wPgo8L2Rpdj4K PGRpdj4KPHAgY2xhc3M9InhfTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1 b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmOyBjb2xvcjpibGFjayI+Jm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyByZXR1cm47PC9zcGFuPjwv cD4KPC9kaXY+CjxkaXY+CjxwIGNsYXNzPSJ4X01zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQt ZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6YmxhY2siPiZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyB9PC9zcGFuPjwvcD4KPC9kaXY+CjxkaXY+CjxwIGNsYXNz PSJ4X01zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVv dDssc2Fucy1zZXJpZjsgY29sb3I6YmxhY2siPiYjNDM7I2VuZGlmPC9zcGFuPjwvcD4KPC9kaXY+ CjxkaXY+CjxwIGNsYXNzPSJ4X01zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZx dW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6YmxhY2siPiZuYnNwOzwvc3Bhbj48 L3A+CjwvZGl2Pgo8ZGl2Pgo8cCBjbGFzcz0ieF9Nc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250 LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOmJsYWNrIj4mbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgZGlyID0gb3BlbmRpcigmcXVvdDsvcHJvYy9zZWxmL2Zk JnF1b3Q7KTs8L3NwYW4+PC9wPgo8L2Rpdj4KPGRpdj4KPHAgY2xhc3M9InhfTXNvTm9ybWFsIj48 c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmOyBj b2xvcjpibGFjayI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGlmICghZGlyKSB7PC9zcGFu PjwvcD4KPC9kaXY+CjxkaXY+CjxwIGNsYXNzPSJ4X01zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZv bnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6YmxhY2siPiZu YnNwOzwvc3Bhbj48L3A+CjwvZGl2Pgo8cCBjbGFzcz0ieF9Nc29Ob3JtYWwiPjxzcGFuIHN0eWxl PSJmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOmJsYWNr Ij4mbmJzcDs8L3NwYW4+PC9wPgo8L2Rpdj4KPC9kaXY+CjwvZGl2Pgo8L2Rpdj4KPC9kaXY+Cjwv Ym9keT4KPC9odG1sPgo= --===============1746075646443884262==--