From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============7866062361730395497==" MIME-Version: 1.0 From: Harris, James R Subject: Re: [SPDK] Netlist storage card Date: Tue, 29 Nov 2016 21:40:10 +0000 Message-ID: In-Reply-To: CAGcKcXTQRoX91mCwqvd00hiS49gGWfccf7x1nbbwx5JD3DS-cg@mail.gmail.com List-ID: To: spdk@lists.01.org --===============7866062361730395497== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Hi Dale, You do not need any extra .ko file. You will need the libaio package insta= lled however (see the dependency list on the SPDK README). In the config file, you can create a section like this: [AIO] AIO /dev/netlist0 Replace =E2=80=9C/dev/netlist0=E2=80=9D with whatever name is used for a Ne= tlist block device node. This will create an SPDK block device named =E2=80=9CAIO0=E2=80=9D which yo= u can use as a SCSI LUN for an iSCSI target node or a virtual namespace for= an NVMe-oF subsystem. -Jim From: SPDK on behalf of Dale Corlett Reply-To: Storage Performance Development Kit Date: Tuesday, November 29, 2016 at 2:15 PM To: Storage Performance Development Kit Subject: Re: [SPDK] Netlist storage card Hi, Thank you all for your replies. Jim, I think that I will first try the AIO first, and then try writing the = userspace driver and bdev module. I am not sure of what I should do with th= e config files, or how to get the .ko file for the AIO module. Is there a m= akefile that gets the .ko module file or do I have to create one? Also, when trying to use ./scripts/setup.sh I found that it did not work be= cause I got then message: "logname: no login name". I think that this is a = problem with the 16.04 version of Ubuntu: https://bugs.launchpad.net/ubuntu= /+source/gnome-terminal/+bug/1537645 so I changed line 177 to: username=3D `echo whoami` and this seems to work. Thanks, Dale On Wed, Nov 30, 2016 at 5:01 AM, Harris, James R > wrote: From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of Dale Corlett Sent: Monday, November 28, 2016 11:06 PM To: spdk(a)lists.01.org Subject: [SPDK] Netlist storage card Hi, I am new to SPDK, and driver writing in general. I am trying to get SPDK wo= rking with a non NVMe storage card (Netlist Express Vault: http://www.netli= st.com/products/vault-memory-storage/expressvault-pcIe-ev3/default.aspx), i= t shows up as a block device in Linux. Would anyone know if there are alrea= dy utilities in SPDK to configure new devices like this (I have been lookin= g at ioat, and the SPDK bdev libraries) or do I have to create some sort of= SPDK user space driver for the Neltist card? If I do have to create and SP= DK driver for the Netlist card, how would I go about that? Hi Dale, Welcome to SPDK! The only option currently for using a Netlist storage car= d with SPDK would be using the Linux aio bdev module (see lib/bdev/aio and = the AIO sections in the config file examples in etc/spdk). This allows you= to use any Linux block device exported by the kernel. But to get the maximum performance and CPU efficiency you will want to writ= e an SPDK userspace driver for the Netlist card. This will eliminate the i= nterrupt and system call overhead incurred by using the Linux kernel mode d= river via Linux aio. Writing a new driver for the Netlist card would be a = two-step process: 1) Write the userspace device driver for the Netlist card. 2) Write a bdev module that registers a Netlist block storage device a= s an SPDK block device. The SPDK NVMe driver is broken up in this way =E2=80=93 lib/nvme contains t= he userspace NVMe driver itself, and lib/bdev/nvme contains the bdev module= for NVMe. This allows use of the NVMe driver outside the context of the S= PDK bdev framework. For #1, I would suggest using the ioat driver (lib/ioat) as a reference. T= his will show you how to probe for Netlist PCI devices, access PCI BARs for= MMIO register access, etc. The entire driver is in a single file which is= a good starting point to understand the overall process. You can also ref= er to the NVMe driver (lib/nvme) which may help to define an interface for = the Netlist driver that can be used by upper layers such as the SPDK bdev f= ramework. For #2, I would suggest using the NVMe bdev module (lib/bdev/nvme) as a ref= erence. This will show you how to register Netlist block storage as SPDK b= lock devices, as well as how to process the spdk_bdev_io structures represe= nting I/O commands (read, write, etc.) One final note - if you do develop an SPDK userspace driver and want to pus= h it into upstream SPDK, it will need to be BSD licensed. Please take this= into account if you plan to port an existing Netlist driver to userspace. Thanks, -Jim _______________________________________________ SPDK mailing list SPDK(a)lists.01.org https://lists.01.org/mailman/listinfo/spdk --===============7866062361730395497== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIiB4 bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIiB4bWxuczptPSJo dHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA0LzEyL29tbWwiIHhtbG5zPSJo dHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4NCjxoZWFkPg0KPG1ldGEgaHR0cC1lcXVp dj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPg0KPG1l dGEgbmFtZT0iVGl0bGUiIGNvbnRlbnQ9IiI+DQo8bWV0YSBuYW1lPSJLZXl3b3JkcyIgY29udGVu dD0iIj4NCjxtZXRhIG5hbWU9IkdlbmVyYXRvciIgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgMTUg KGZpbHRlcmVkIG1lZGl1bSkiPg0KPHN0eWxlPjwhLS0NCi8qIEZvbnQgRGVmaW5pdGlvbnMgKi8N CkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6IkNhbWJyaWEgTWF0aCI7DQoJcGFub3NlLTE6MiA0 IDUgMyA1IDQgNiAzIDIgNDt9DQpAZm9udC1mYWNlDQoJe2ZvbnQtZmFtaWx5OkRlbmdYaWFuOw0K CXBhbm9zZS0xOjIgMSA2IDAgMyAxIDEgMSAxIDE7fQ0KQGZvbnQtZmFjZQ0KCXtmb250LWZhbWls eTpDYWxpYnJpOw0KCXBhbm9zZS0xOjIgMTUgNSAyIDIgMiA0IDMgMiA0O30NCi8qIFN0eWxlIERl ZmluaXRpb25zICovDQpwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsDQoJ e21hcmdpbjowaW47DQoJbWFyZ2luLWJvdHRvbTouMDAwMXB0Ow0KCWZvbnQtc2l6ZToxMi4wcHQ7 DQoJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQ0KYTpsaW5rLCBzcGFuLk1zb0h5cGVy bGluaw0KCXttc28tc3R5bGUtcHJpb3JpdHk6OTk7DQoJY29sb3I6Ymx1ZTsNCgl0ZXh0LWRlY29y YXRpb246dW5kZXJsaW5lO30NCmE6dmlzaXRlZCwgc3Bhbi5Nc29IeXBlcmxpbmtGb2xsb3dlZA0K CXttc28tc3R5bGUtcHJpb3JpdHk6OTk7DQoJY29sb3I6cHVycGxlOw0KCXRleHQtZGVjb3JhdGlv bjp1bmRlcmxpbmU7fQ0Kc3Bhbi5nbWFpbC1hcHBsZS10YWItc3Bhbg0KCXttc28tc3R5bGUtbmFt ZTpnbWFpbC1hcHBsZS10YWItc3Bhbjt9DQpwLm0tODIxMDYzNDQzODM0ODEzOTUxMm1zb2xpc3Rw YXJhZ3JhcGgsIGxpLm0tODIxMDYzNDQzODM0ODEzOTUxMm1zb2xpc3RwYXJhZ3JhcGgsIGRpdi5t LTgyMTA2MzQ0MzgzNDgxMzk1MTJtc29saXN0cGFyYWdyYXBoDQoJe21zby1zdHlsZS1uYW1lOm1f LTgyMTA2MzQ0MzgzNDgxMzk1MTJtc29saXN0cGFyYWdyYXBoOw0KCW1zby1tYXJnaW4tdG9wLWFs dDphdXRvOw0KCW1hcmdpbi1yaWdodDowaW47DQoJbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87 DQoJbWFyZ2luLWxlZnQ6MGluOw0KCWZvbnQtc2l6ZToxMi4wcHQ7DQoJZm9udC1mYW1pbHk6IlRp bWVzIE5ldyBSb21hbiI7fQ0Kc3Bhbi5FbWFpbFN0eWxlMTkNCgl7bXNvLXN0eWxlLXR5cGU6cGVy c29uYWwtcmVwbHk7DQoJZm9udC1mYW1pbHk6Q2FsaWJyaTsNCgljb2xvcjp3aW5kb3d0ZXh0O30N CnNwYW4ubXNvSW5zDQoJe21zby1zdHlsZS10eXBlOmV4cG9ydC1vbmx5Ow0KCW1zby1zdHlsZS1u YW1lOiIiOw0KCXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7DQoJY29sb3I6dGVhbDt9DQouTXNv Q2hwRGVmYXVsdA0KCXttc28tc3R5bGUtdHlwZTpleHBvcnQtb25seTsNCglmb250LXNpemU6MTAu MHB0O30NCkBwYWdlIFdvcmRTZWN0aW9uMQ0KCXtzaXplOjguNWluIDExLjBpbjsNCgltYXJnaW46 MS4waW4gMS4waW4gMS4waW4gMS4waW47fQ0KZGl2LldvcmRTZWN0aW9uMQ0KCXtwYWdlOldvcmRT ZWN0aW9uMTt9DQotLT48L3N0eWxlPg0KPC9oZWFkPg0KPGJvZHkgYmdjb2xvcj0id2hpdGUiIGxh bmc9IkVOLVVTIiBsaW5rPSJibHVlIiB2bGluaz0icHVycGxlIj4NCjxkaXYgY2xhc3M9IldvcmRT ZWN0aW9uMSI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEx LjBwdDtmb250LWZhbWlseTpDYWxpYnJpIj5IaSBEYWxlLDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4N CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQt ZmFtaWx5OkNhbGlicmkiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJN c29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OkNhbGli cmkiPllvdSBkbyBub3QgbmVlZCBhbnkgZXh0cmEgLmtvIGZpbGUuJm5ic3A7IFlvdSB3aWxsIG5l ZWQgdGhlIGxpYmFpbyBwYWNrYWdlIGluc3RhbGxlZCBob3dldmVyIChzZWUgdGhlIGRlcGVuZGVu Y3kgbGlzdCBvbiB0aGUgU1BESyBSRUFETUUpLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNs YXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5 OkNhbGlicmkiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3Jt YWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OkNhbGlicmkiPklu IHRoZSBjb25maWcgZmlsZSwgeW91IGNhbiBjcmVhdGUgYSBzZWN0aW9uIGxpa2UgdGhpczo8bzpw PjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9u dC1zaXplOjExLjBwdDtmb250LWZhbWlseTpDYWxpYnJpIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bh bj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBw dDtmb250LWZhbWlseTpDYWxpYnJpIj5bQUlPXTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNs YXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5 OkNhbGlicmkiPiZuYnNwOyBBSU8gL2Rldi9uZXRsaXN0MDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4N CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQt ZmFtaWx5OkNhbGlicmkiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJN c29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OkNhbGli cmkiPlJlcGxhY2Ug4oCcL2Rldi9uZXRsaXN0MOKAnSB3aXRoIHdoYXRldmVyIG5hbWUgaXMgdXNl ZCBmb3IgYSBOZXRsaXN0IGJsb2NrIGRldmljZSBub2RlLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4N CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQt ZmFtaWx5OkNhbGlicmkiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJN c29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OkNhbGli cmkiPlRoaXMgd2lsbCBjcmVhdGUgYW4gU1BESyBibG9jayBkZXZpY2UgbmFtZWQg4oCcQUlPMOKA nSB3aGljaCB5b3UgY2FuIHVzZSBhcyBhIFNDU0kgTFVOIGZvciBhbiBpU0NTSSB0YXJnZXQgbm9k ZSBvciBhIHZpcnR1YWwgbmFtZXNwYWNlIGZvciBhbiBOVk1lLW9GIHN1YnN5c3RlbS48bzpwPjwv bzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1z aXplOjExLjBwdDtmb250LWZhbWlseTpDYWxpYnJpIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48 L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtm b250LWZhbWlseTpDYWxpYnJpIj4tSmltPG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9 Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6Q2Fs aWJyaSI+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+ PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6Q2FsaWJyaSI+PG86cD4m bmJzcDs8L286cD48L3NwYW4+PC9wPg0KPGRpdiBzdHlsZT0iYm9yZGVyOm5vbmU7Ym9yZGVyLXRv cDpzb2xpZCAjQjVDNERGIDEuMHB0O3BhZGRpbmc6My4wcHQgMGluIDBpbiAwaW4iPg0KPHAgY2xh c3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPjxiPjxzcGFuIHN0eWxlPSJm b250LWZhbWlseTpDYWxpYnJpO2NvbG9yOmJsYWNrIj5Gcm9tOg0KPC9zcGFuPjwvYj48c3BhbiBz dHlsZT0iZm9udC1mYW1pbHk6Q2FsaWJyaTtjb2xvcjpibGFjayI+U1BESyAmbHQ7c3Bkay1ib3Vu Y2VzQGxpc3RzLjAxLm9yZyZndDsgb24gYmVoYWxmIG9mIERhbGUgQ29ybGV0dCAmbHQ7ZGFsZS5j b3JsZXR0QG55cmlhZC5jb20mZ3Q7PGJyPg0KPGI+UmVwbHktVG86IDwvYj5TdG9yYWdlIFBlcmZv cm1hbmNlIERldmVsb3BtZW50IEtpdCAmbHQ7c3Bka0BsaXN0cy4wMS5vcmcmZ3Q7PGJyPg0KPGI+ RGF0ZTogPC9iPlR1ZXNkYXksIE5vdmVtYmVyIDI5LCAyMDE2IGF0IDI6MTUgUE08YnI+DQo8Yj5U bzogPC9iPlN0b3JhZ2UgUGVyZm9ybWFuY2UgRGV2ZWxvcG1lbnQgS2l0ICZsdDtzcGRrQGxpc3Rz LjAxLm9yZyZndDs8YnI+DQo8Yj5TdWJqZWN0OiA8L2I+UmU6IFtTUERLXSBOZXRsaXN0IHN0b3Jh Z2UgY2FyZDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJN c29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj48bzpwPiZuYnNwOzwvbzpwPjwvcD4N CjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDou NWluIj5IaSwgPG86cD48L286cD48L3A+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5 bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2 Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPlRoYW5rIHlv dSBhbGwgZm9yIHlvdXIgcmVwbGllcy48bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxw IGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj48bzpwPiZuYnNwOzwv bzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJn aW4tbGVmdDouNWluIj5KaW0sIEkgdGhpbmsgdGhhdCBJIHdpbGwgZmlyc3QgdHJ5IHRoZSBBSU8g Zmlyc3QsIGFuZCB0aGVuIHRyeSB3cml0aW5nIHRoZSB1c2Vyc3BhY2UgZHJpdmVyIGFuZCBiZGV2 IG1vZHVsZS4gSSBhbSBub3Qgc3VyZSBvZiB3aGF0IEkgc2hvdWxkIGRvIHdpdGggdGhlIGNvbmZp ZyBmaWxlcywgb3IgaG93IHRvIGdldCB0aGUgLmtvIGZpbGUgZm9yIHRoZSBBSU8gbW9kdWxlLg0K IElzIHRoZXJlIGEgbWFrZWZpbGUgdGhhdCBnZXRzIHRoZSAua28gbW9kdWxlIGZpbGUgb3IgZG8g SSBoYXZlIHRvIGNyZWF0ZSBvbmU/PG86cD48L286cD48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8cCBj bGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+PG86cD4mbmJzcDs8L286 cD48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2lu LWxlZnQ6LjVpbiI+QWxzbywgd2hlbiB0cnlpbmcgdG8gdXNlIC4vc2NyaXB0cy9zZXR1cC5zaCBJ IGZvdW5kIHRoYXQgaXQgZGlkIG5vdCB3b3JrIGJlY2F1c2UgSSBnb3QgdGhlbiBtZXNzYWdlOiAm cXVvdDtsb2duYW1lOiBubyBsb2dpbiBuYW1lJnF1b3Q7LiBJIHRoaW5rIHRoYXQgdGhpcyBpcyBh IHByb2JsZW0gd2l0aCB0aGUgMTYuMDQgdmVyc2lvbiBvZiBVYnVudHU6DQo8YSBocmVmPSJodHRw czovL2J1Z3MubGF1bmNocGFkLm5ldC91YnVudHUvJiM0Mztzb3VyY2UvZ25vbWUtdGVybWluYWwv JiM0MztidWcvMTUzNzY0NSI+aHR0cHM6Ly9idWdzLmxhdW5jaHBhZC5uZXQvdWJ1bnR1LyYjNDM7 c291cmNlL2dub21lLXRlcm1pbmFsLyYjNDM7YnVnLzE1Mzc2NDU8L2E+IHNvIEkgY2hhbmdlZCBs aW5lIDE3NyB0bzombmJzcDs8c3BhbiBjbGFzcz0iZ21haWwtYXBwbGUtdGFiLXNwYW4iPjxvOnA+ PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVm dDouNWluIj51c2VybmFtZT0gYGVjaG8gd2hvYW1pYCBhbmQgdGhpcyBzZWVtcyB0byB3b3JrLjxv OnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9 Im1hcmdpbi1sZWZ0Oi41aW4iPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0K PHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPlRoYW5rcyw8bzpw PjwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJt YXJnaW4tbGVmdDouNWluIj5EYWxlPG86cD48L286cD48L3A+DQo8L2Rpdj4NCjwvZGl2Pg0KPGRp dj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj48bzpwPiZu YnNwOzwvbzpwPjwvcD4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2lu LWxlZnQ6LjVpbiI+T24gV2VkLCBOb3YgMzAsIDIwMTYgYXQgNTowMSBBTSwgSGFycmlzLCBKYW1l cyBSICZsdDs8YSBocmVmPSJtYWlsdG86amFtZXMuci5oYXJyaXNAaW50ZWwuY29tIiB0YXJnZXQ9 Il9ibGFuayI+amFtZXMuci5oYXJyaXNAaW50ZWwuY29tPC9hPiZndDsgd3JvdGU6PG86cD48L286 cD48L3A+DQo8YmxvY2txdW90ZSBzdHlsZT0iYm9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQg I0NDQ0NDQyAxLjBwdDtwYWRkaW5nOjBpbiAwaW4gMGluIDYuMHB0O21hcmdpbi1sZWZ0OjQuOHB0 O21hcmdpbi1yaWdodDowaW4iPg0KPGRpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBz dHlsZT0ibXNvLW1hcmdpbi10b3AtYWx0OmF1dG87bXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87 bWFyZ2luLWxlZnQ6LjVpbiI+DQo8c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZh bWlseTpDYWxpYnJpO2NvbG9yOiMxRjQ5N0QiPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4N CjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzttc28t bWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzttYXJnaW4tbGVmdDouNWluIj4NCjxzcGFuIHN0eWxlPSJm b250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OkNhbGlicmk7Y29sb3I6IzFGNDk3RCI+Jm5ic3A7 PC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1zby1t YXJnaW4tdG9wLWFsdDphdXRvO21zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvO21hcmdpbi1sZWZ0 OjEuMGluIj4NCjxiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OkNh bGlicmkiPkZyb206PC9zcGFuPjwvYj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250 LWZhbWlseTpDYWxpYnJpIj4gU1BESyBbbWFpbHRvOjxhIGhyZWY9Im1haWx0bzpzcGRrLWJvdW5j ZXNAbGlzdHMuMDEub3JnIiB0YXJnZXQ9Il9ibGFuayI+c3Bkay1ib3VuY2VzQGxpc3RzLjAxLm9y ZzwvYT5dDQo8Yj5PbiBCZWhhbGYgT2YgPC9iPkRhbGUgQ29ybGV0dDxicj4NCjxiPlNlbnQ6PC9i PiBNb25kYXksIE5vdmVtYmVyIDI4LCAyMDE2IDExOjA2IFBNPGJyPg0KPGI+VG86PC9iPiA8YSBo cmVmPSJtYWlsdG86c3Bka0BsaXN0cy4wMS5vcmciIHRhcmdldD0iX2JsYW5rIj5zcGRrQGxpc3Rz LjAxLm9yZzwvYT48YnI+DQo8Yj5TdWJqZWN0OjwvYj4gW1NQREtdIE5ldGxpc3Qgc3RvcmFnZSBj YXJkPC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1z by1tYXJnaW4tdG9wLWFsdDphdXRvO21zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvO21hcmdpbi1s ZWZ0OjEuMGluIj4NCiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPGRpdj4NCjxwIGNsYXNzPSJNc29O b3JtYWwiIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzttc28tbWFyZ2luLWJvdHRvbS1h bHQ6YXV0bzttYXJnaW4tbGVmdDoxLjBpbiI+DQpIaSw8bzpwPjwvbzpwPjwvcD4NCjxkaXY+DQo8 cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibXNvLW1hcmdpbi10b3AtYWx0OmF1dG87bXNvLW1h cmdpbi1ib3R0b20tYWx0OmF1dG87bWFyZ2luLWxlZnQ6MS4waW4iPg0KJm5ic3A7PG86cD48L286 cD48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibXNvLW1h cmdpbi10b3AtYWx0OmF1dG87bXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87bWFyZ2luLWxlZnQ6 MS4waW4iPg0KSSBhbSBuZXcgdG8gU1BESywgYW5kIGRyaXZlciB3cml0aW5nIGluIGdlbmVyYWwu IEkgYW0gdHJ5aW5nIHRvIGdldCBTUERLIHdvcmtpbmcgd2l0aCBhIG5vbiBOVk1lIHN0b3JhZ2Ug Y2FyZCAoTmV0bGlzdCBFeHByZXNzIFZhdWx0Og0KPGEgaHJlZj0iaHR0cDovL3d3dy5uZXRsaXN0 LmNvbS9wcm9kdWN0cy92YXVsdC1tZW1vcnktc3RvcmFnZS9leHByZXNzdmF1bHQtcGNJZS1ldjMv ZGVmYXVsdC5hc3B4IiB0YXJnZXQ9Il9ibGFuayI+DQpodHRwOi8vd3d3Lm5ldGxpc3QuY29tL3By b2R1Y3RzL3ZhdWx0LW1lbW9yeS1zdG9yYWdlL2V4cHJlc3N2YXVsdC1wY0llLWV2My9kZWZhdWx0 LmFzcHg8L2E+KSwgaXQgc2hvd3MgdXAgYXMgYSBibG9jayBkZXZpY2UgaW4gTGludXguIFdvdWxk IGFueW9uZSBrbm93IGlmIHRoZXJlIGFyZSBhbHJlYWR5IHV0aWxpdGllcyBpbiBTUERLIHRvIGNv bmZpZ3VyZSBuZXcgZGV2aWNlcyBsaWtlIHRoaXMgKEkgaGF2ZSBiZWVuIGxvb2tpbmcgYXQgaW9h dCwgYW5kDQogdGhlIFNQREsgYmRldiBsaWJyYXJpZXMpIG9yIGRvIEkgaGF2ZSB0byBjcmVhdGUg c29tZSBzb3J0IG9mIFNQREsgdXNlciBzcGFjZSBkcml2ZXIgZm9yIHRoZSBOZWx0aXN0IGNhcmQ/ IElmIEkgZG8gaGF2ZSB0byBjcmVhdGUgYW5kIFNQREsgZHJpdmVyIGZvciB0aGUgTmV0bGlzdCBj YXJkLCBob3cgd291bGQgSSBnbyBhYm91dCB0aGF0PzxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8 ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1zby1tYXJnaW4tdG9wLWFsdDphdXRv O21zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvO21hcmdpbi1sZWZ0Oi41aW4iPg0KPHNwYW4gc3R5 bGU9ImNvbG9yOiMxRjQ5N0QiPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNz PSJNc29Ob3JtYWwiIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzttc28tbWFyZ2luLWJv dHRvbS1hbHQ6YXV0bzttYXJnaW4tbGVmdDouNWluIj4NCjxzcGFuIHN0eWxlPSJmb250LXNpemU6 MTEuMHB0O2ZvbnQtZmFtaWx5OkNhbGlicmk7Y29sb3I6IzFGNDk3RCI+SGkgRGFsZSw8L3NwYW4+ PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibXNvLW1hcmdpbi10 b3AtYWx0OmF1dG87bXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87bWFyZ2luLWxlZnQ6LjVpbiI+ DQo8c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTpDYWxpYnJpO2NvbG9y OiMxRjQ5N0QiPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3Jt YWwiIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzttc28tbWFyZ2luLWJvdHRvbS1hbHQ6 YXV0bzttYXJnaW4tbGVmdDouNWluIj4NCjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2Zv bnQtZmFtaWx5OkNhbGlicmk7Y29sb3I6IzFGNDk3RCI+V2VsY29tZSB0byBTUERLISZuYnNwOyBU aGUgb25seSBvcHRpb24gY3VycmVudGx5IGZvciB1c2luZyBhIE5ldGxpc3Qgc3RvcmFnZSBjYXJk IHdpdGggU1BESyB3b3VsZCBiZSB1c2luZyB0aGUgTGludXggYWlvIGJkZXYgbW9kdWxlIChzZWUg bGliL2JkZXYvYWlvIGFuZCB0aGUgQUlPIHNlY3Rpb25zIGluIHRoZSBjb25maWcgZmlsZSBleGFt cGxlcw0KIGluIGV0Yy9zcGRrKS4mbmJzcDsgVGhpcyBhbGxvd3MgeW91IHRvIHVzZSBhbnkgTGlu dXggYmxvY2sgZGV2aWNlIGV4cG9ydGVkIGJ5IHRoZSBrZXJuZWwuPC9zcGFuPjxvOnA+PC9vOnA+ PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1zby1tYXJnaW4tdG9wLWFsdDphdXRv O21zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvO21hcmdpbi1sZWZ0Oi41aW4iPg0KPHNwYW4gc3R5 bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6Q2FsaWJyaTtjb2xvcjojMUY0OTdEIj4m bmJzcDs8L3NwYW4+PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0i bXNvLW1hcmdpbi10b3AtYWx0OmF1dG87bXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87bWFyZ2lu LWxlZnQ6LjVpbiI+DQo8c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTpD YWxpYnJpO2NvbG9yOiMxRjQ5N0QiPkJ1dCB0byBnZXQgdGhlIG1heGltdW0gcGVyZm9ybWFuY2Ug YW5kIENQVSBlZmZpY2llbmN5IHlvdSB3aWxsIHdhbnQgdG8gd3JpdGUgYW4gU1BESyB1c2Vyc3Bh Y2UgZHJpdmVyIGZvciB0aGUgTmV0bGlzdCBjYXJkLiZuYnNwOyBUaGlzIHdpbGwgZWxpbWluYXRl IHRoZSBpbnRlcnJ1cHQgYW5kIHN5c3RlbSBjYWxsIG92ZXJoZWFkIGluY3VycmVkDQogYnkgdXNp bmcgdGhlIExpbnV4IGtlcm5lbCBtb2RlIGRyaXZlciB2aWEgTGludXggYWlvLiZuYnNwOyBXcml0 aW5nIGEgbmV3IGRyaXZlciBmb3IgdGhlIE5ldGxpc3QgY2FyZCB3b3VsZCBiZSBhIHR3by1zdGVw IHByb2Nlc3M6PC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5 bGU9Im1zby1tYXJnaW4tdG9wLWFsdDphdXRvO21zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvO21h cmdpbi1sZWZ0Oi41aW4iPg0KPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1p bHk6Q2FsaWJyaTtjb2xvcjojMUY0OTdEIj4mbmJzcDs8L3NwYW4+PG86cD48L286cD48L3A+DQo8 cCBjbGFzcz0ibS04MjEwNjM0NDM4MzQ4MTM5NTEybXNvbGlzdHBhcmFncmFwaCIgc3R5bGU9Im1h cmdpbi1sZWZ0Oi41aW4iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5 OkNhbGlicmk7Y29sb3I6IzFGNDk3RCI+MSk8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTo3 LjBwdDtjb2xvcjojMUY0OTdEIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCjwvc3Bh bj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTpDYWxpYnJpO2NvbG9y OiMxRjQ5N0QiPldyaXRlIHRoZSB1c2Vyc3BhY2UgZGV2aWNlIGRyaXZlciBmb3IgdGhlIE5ldGxp c3QgY2FyZC48L3NwYW4+PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0ibS04MjEwNjM0NDM4MzQ4 MTM5NTEybXNvbGlzdHBhcmFncmFwaCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPjxzcGFuIHN0 eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OkNhbGlicmk7Y29sb3I6IzFGNDk3RCI+ Mik8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTo3LjBwdDtjb2xvcjojMUY0OTdEIj4mbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXpl OjExLjBwdDtmb250LWZhbWlseTpDYWxpYnJpO2NvbG9yOiMxRjQ5N0QiPldyaXRlIGEgYmRldiBt b2R1bGUgdGhhdCByZWdpc3RlcnMgYSBOZXRsaXN0IGJsb2NrIHN0b3JhZ2UgZGV2aWNlIGFzIGFu IFNQREsgYmxvY2sgZGV2aWNlLjwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29O b3JtYWwiIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzttc28tbWFyZ2luLWJvdHRvbS1h bHQ6YXV0bzttYXJnaW4tbGVmdDouNWluIj4NCjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0 O2ZvbnQtZmFtaWx5OkNhbGlicmk7Y29sb3I6IzFGNDk3RCI+Jm5ic3A7PC9zcGFuPjxvOnA+PC9v OnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1zby1tYXJnaW4tdG9wLWFsdDph dXRvO21zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvO21hcmdpbi1sZWZ0Oi41aW4iPg0KPHNwYW4g c3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6Q2FsaWJyaTtjb2xvcjojMUY0OTdE Ij5UaGUgU1BESyBOVk1lIGRyaXZlciBpcyBicm9rZW4gdXAgaW4gdGhpcyB3YXkg4oCTIGxpYi9u dm1lIGNvbnRhaW5zIHRoZSB1c2Vyc3BhY2UgTlZNZSBkcml2ZXIgaXRzZWxmLCBhbmQgbGliL2Jk ZXYvbnZtZSBjb250YWlucyB0aGUgYmRldiBtb2R1bGUgZm9yIE5WTWUuJm5ic3A7IFRoaXMgYWxs b3dzIHVzZSBvZiB0aGUgTlZNZSBkcml2ZXIgb3V0c2lkZQ0KIHRoZSBjb250ZXh0IG9mIHRoZSBT UERLIGJkZXYgZnJhbWV3b3JrLjwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29O b3JtYWwiIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzttc28tbWFyZ2luLWJvdHRvbS1h bHQ6YXV0bzttYXJnaW4tbGVmdDouNWluIj4NCjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0 O2ZvbnQtZmFtaWx5OkNhbGlicmk7Y29sb3I6IzFGNDk3RCI+Jm5ic3A7PC9zcGFuPjxvOnA+PC9v OnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1zby1tYXJnaW4tdG9wLWFsdDph dXRvO21zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvO21hcmdpbi1sZWZ0Oi41aW4iPg0KPHNwYW4g c3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6Q2FsaWJyaTtjb2xvcjojMUY0OTdE Ij5Gb3IgIzEsIEkgd291bGQgc3VnZ2VzdCB1c2luZyB0aGUgaW9hdCBkcml2ZXIgKGxpYi9pb2F0 KSBhcyBhIHJlZmVyZW5jZS4mbmJzcDsgVGhpcyB3aWxsIHNob3cgeW91IGhvdyB0byBwcm9iZSBm b3IgTmV0bGlzdCBQQ0kgZGV2aWNlcywgYWNjZXNzIFBDSSBCQVJzIGZvciBNTUlPIHJlZ2lzdGVy IGFjY2VzcywgZXRjLiZuYnNwOyBUaGUgZW50aXJlIGRyaXZlcg0KIGlzIGluIGEgc2luZ2xlIGZp bGUgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJh bGwgcHJvY2Vzcy4mbmJzcDsgWW91IGNhbiBhbHNvIHJlZmVyIHRvIHRoZSBOVk1lIGRyaXZlciAo bGliL252bWUpIHdoaWNoIG1heSBoZWxwIHRvIGRlZmluZSBhbiBpbnRlcmZhY2UgZm9yIHRoZSBO ZXRsaXN0IGRyaXZlciB0aGF0IGNhbiBiZSB1c2VkIGJ5IHVwcGVyIGxheWVycyBzdWNoIGFzIHRo ZSBTUERLIGJkZXYgZnJhbWV3b3JrLjwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJN c29Ob3JtYWwiIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzttc28tbWFyZ2luLWJvdHRv bS1hbHQ6YXV0bzttYXJnaW4tbGVmdDouNWluIj4NCjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEu MHB0O2ZvbnQtZmFtaWx5OkNhbGlicmk7Y29sb3I6IzFGNDk3RCI+Jm5ic3A7PC9zcGFuPjxvOnA+ PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1zby1tYXJnaW4tdG9wLWFs dDphdXRvO21zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvO21hcmdpbi1sZWZ0Oi41aW4iPg0KPHNw YW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6Q2FsaWJyaTtjb2xvcjojMUY0 OTdEIj5Gb3IgIzIsIEkgd291bGQgc3VnZ2VzdCB1c2luZyB0aGUgTlZNZSBiZGV2IG1vZHVsZSAo bGliL2JkZXYvbnZtZSkgYXMgYSByZWZlcmVuY2UuJm5ic3A7IFRoaXMgd2lsbCBzaG93IHlvdSBo b3cgdG8gcmVnaXN0ZXIgTmV0bGlzdCBibG9jayBzdG9yYWdlIGFzIFNQREsgYmxvY2sgZGV2aWNl cywgYXMgd2VsbCBhcyBob3cgdG8gcHJvY2VzcyB0aGUNCiBzcGRrX2JkZXZfaW8gc3RydWN0dXJl cyByZXByZXNlbnRpbmcgSS9PIGNvbW1hbmRzIChyZWFkLCB3cml0ZSwgZXRjLik8L3NwYW4+PG86 cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibXNvLW1hcmdpbi10b3At YWx0OmF1dG87bXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87bWFyZ2luLWxlZnQ6LjVpbiI+DQo8 c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTpDYWxpYnJpO2NvbG9yOiMx RjQ5N0QiPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwi IHN0eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzttc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0 bzttYXJnaW4tbGVmdDouNWluIj4NCjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQt ZmFtaWx5OkNhbGlicmk7Y29sb3I6IzFGNDk3RCI+T25lIGZpbmFsIG5vdGUgLSBpZiB5b3UgZG8g ZGV2ZWxvcCBhbiBTUERLIHVzZXJzcGFjZSBkcml2ZXIgYW5kIHdhbnQgdG8gcHVzaCBpdCBpbnRv IHVwc3RyZWFtIFNQREssIGl0IHdpbGwgbmVlZCB0byBiZSBCU0QgbGljZW5zZWQuJm5ic3A7IFBs ZWFzZSB0YWtlIHRoaXMgaW50byBhY2NvdW50IGlmIHlvdSBwbGFuIHRvIHBvcnQgYW4gZXhpc3Rp bmcNCiBOZXRsaXN0IGRyaXZlciB0byB1c2Vyc3BhY2UuPC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0K PHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1zby1tYXJnaW4tdG9wLWFsdDphdXRvO21zby1t YXJnaW4tYm90dG9tLWFsdDphdXRvO21hcmdpbi1sZWZ0Oi41aW4iPg0KPHNwYW4gc3R5bGU9ImZv bnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6Q2FsaWJyaTtjb2xvcjojMUY0OTdEIj4mbmJzcDs8 L3NwYW4+PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibXNvLW1h cmdpbi10b3AtYWx0OmF1dG87bXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87bWFyZ2luLWxlZnQ6 LjVpbiI+DQo8c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTpDYWxpYnJp O2NvbG9yOiMxRjQ5N0QiPlRoYW5rcyw8L3NwYW4+PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0i TXNvTm9ybWFsIiBzdHlsZT0ibXNvLW1hcmdpbi10b3AtYWx0OmF1dG87bXNvLW1hcmdpbi1ib3R0 b20tYWx0OmF1dG87bWFyZ2luLWxlZnQ6LjVpbiI+DQo8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEx LjBwdDtmb250LWZhbWlseTpDYWxpYnJpO2NvbG9yOiMxRjQ5N0QiPiZuYnNwOzwvc3Bhbj48bzpw PjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1h bHQ6YXV0bzttc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzttYXJnaW4tbGVmdDouNWluIj4NCjxz cGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OkNhbGlicmk7Y29sb3I6IzFG NDk3RCI+LUppbTwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0 eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzttc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bztt YXJnaW4tbGVmdDouNWluIj4NCjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFt aWx5OkNhbGlicmk7Y29sb3I6IzFGNDk3RCI+Jm5ic3A7PC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0K PC9kaXY+DQo8L2Rpdj4NCjwvZGl2Pg0KPC9kaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHls ZT0ibXNvLW1hcmdpbi10b3AtYWx0OjBpbjttYXJnaW4tcmlnaHQ6MGluO21hcmdpbi1ib3R0b206 MTIuMHB0O21hcmdpbi1sZWZ0Oi41aW4iPg0KPGJyPg0KX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX188YnI+DQpTUERLIG1haWxpbmcgbGlzdDxicj4NCjxhIGhy ZWY9Im1haWx0bzpTUERLQGxpc3RzLjAxLm9yZyI+U1BES0BsaXN0cy4wMS5vcmc8L2E+PGJyPg0K PGEgaHJlZj0iaHR0cHM6Ly9saXN0cy4wMS5vcmcvbWFpbG1hbi9saXN0aW5mby9zcGRrIiB0YXJn ZXQ9Il9ibGFuayI+aHR0cHM6Ly9saXN0cy4wMS5vcmcvbWFpbG1hbi9saXN0aW5mby9zcGRrPC9h PjxvOnA+PC9vOnA+PC9wPg0KPC9ibG9ja3F1b3RlPg0KPC9kaXY+DQo8cCBjbGFzcz0iTXNvTm9y bWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+PG86cD4mbmJzcDs8L286cD48L3A+DQo8L2Rp dj4NCjwvZGl2Pg0KPC9ib2R5Pg0KPC9odG1sPg0K --===============7866062361730395497==--