From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============4214003897562488317==" MIME-Version: 1.0 From: helloway Subject: Re: [SPDK] Integrate OpenStack/Cyborg into SPDK Architecture Date: Sat, 28 Sep 2019 02:06:05 +0000 Message-ID: <3ae1c74f.6b95.163fc2fff9d.Coremail.simple_hlw@163.com> In-Reply-To: 82C9F782B054C94B9FC04A331649C77AAD470838@FMSMSX108.amr.corp.intel.com List-ID: To: spdk@lists.01.org --===============4214003897562488317== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Hi Paul, I am sorry for that I'm not an expert on Cinder, I=E2=80=98ll try to tell y= ou what I think. If I was wrong, please correct me. From my perspective, Ci= nder cares more about the capacity of the pool whose pool capabilities repo= rting interface is fixed, whereas, in addition to the capacity, Cyborg also= cares about the fine-grained accelerator capabilities (e.g. iops, queue, e= tc.). These capabilities, reported from the Cyborg, can be dynamic configu= red and handled through the OpenSDS=E2=80=99 profile. For this reason, it p= rovides a more flexible and simple configuration which can be called conven= iently. Thx, Helloway On 06/13/2018 22:46=EF=BC=8CLuse, Paul E wrote=EF= =BC=9A Hi Helloway, = That=E2=80=99s a great start but I still have the same open questions below= , maybe you can try and address those directly? Also, below is the link for= adding SPDK based NVMeOF as a Cinder plug-in. In addition to the question= below can you please explain for everyone how you see the approach of usin= g Cyborg and OpenSDS compares with the seemingly simpler approach of provid= ing a Cinder plug-in? = https://review.openstack.org/#/c/564229/ = Thanks!! Paul = = From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of helloway Sent: Tuesday, June 12, 2018 5:22 PM To: Storage Performance Development Kit Cc: Storage Performance Development Kit Subject: Re: [SPDK] Integrate OpenStack/Cyborg into SPDK Architecture = Hi Paul, Thank you for your response, I have submitted a trello [0] titled =E2=80= =9CIntegrate OpenStack/Cyborg into SPDK Architecture=E2=80=9D. I am trying = to answer your questions from this trello, do I make sense? I really hope t= o receive your feedback. = [0]https://trello.com/c/QfSAkLSS/121-integrate-openstack-cyborg-into-spdk-a= rchitecture = = Thx, Helloway On 06/12/2018 08:16=EF=BC=8CLuse, Paul E wrote=EF= =BC=9A Hi Helloway, = I was actually just wondering what had happened with this. Looking at the = OpenStack patch it looks like it=E2=80=99s close to landing. Somewhere out = there we have a Cinder driver that=E2=80=99s also getting fairly close I be= lieve so for sure integration with OpenStack is interesting to many in the = community. = Would you be able to summarize more specifically how your patch would work = once it lands? I of course see your high level description below that some = questions that I have, I=E2=80=99m assuming others as well, include: = - what else is required to be pushed into OpenStack for this to work - is anything required in the SPDK repo for this to work - how will the necessary SPDK components be associated with the VM in quest= ion and subsequently configured = Thanks for continuing to work on this! = -Paul = From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of helloway Sent: Monday, June 11, 2018 1:35 AM To: Storage Performance Development Kit Subject: [SPDK] Integrate OpenStack/Cyborg into SPDK Architecture = Hi Jim and all, = Do you know OpenStack/Cyborg? It is OpenStack acceleration service which pr= ovides a management framework for accelerator devices (e.g. FPGA, GPU, NVMe= SSD). There is a strong demand for OpenStack to support hardware accelerat= ed devices in a dynamic model(mentioned in OpenStack Summit Vancouver 2018 = [0]). = = For this reason, we can use Cyborg to interactive with nvmf_tgt to realize = the management of the user space accelerator NVMe SSD device, which can bad= ly promote the efficiency. It is worth mentioning that the Cyborg_SPDK_Driv= er I summitted has been merged into the OpenStack version Q [1]. The driver= can report the detailed information of the device to the Cyborg agent. Whe= n user requests a vm with a user space NVMe SSD, Cyborg agent will update t= he Nova/Placement inventory on available NVMe devices. This is a complete p= rocess to describe the connection of Cyborg and SPDK. = I wonder whether you guys are interested in integrating OpenStack/Cyborg in= to SPDK architecture? Do I make sense? Please let me know what your thought= s. = [0]https://www.openstack.org/videos/vancouver-2018/optimized-hpcai-cloud-wi= th-openstack-acceleration-service-and-composable-hardware [1]https://review.openstack.org/#/c/538164/ = = Thx, Helloway --===============4214003897562488317== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PGh0bWw+CjxoZWFkPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50 PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgo8L2hlYWQ+Cjxib2R5Pgo8c3R5bGU+CiAgICBm b250ewogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICB9CiAgICB1bCxvbHsKICAgICAgICBw YWRkaW5nLWxlZnQ6IDIwcHg7CiAgICAgICAgbGlzdC1zdHlsZS1wb3NpdGlvbjogaW5zaWRlOwog ICAgfQo8L3N0eWxlPgo8ZGl2IHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtIZWx2ZXRpY2EmcXVv dDs7IGxpbmUtaGVpZ2h0OjEuNjsiPgogICAgPGRpdj4KPGRpdj5IaSBQYXVsLDwvZGl2PjxkaXY+ PGJyPjwvZGl2PjxkaXY+SSBhbSBzb3JyeSBmb3IgdGhhdCZuYnNwO0knbSBub3QgYW4gZXhwZXJ0 IG9uIENpbmRlciwgSeKAmGxsIHRyeSB0byB0ZWxsIHlvdSB3aGF0IEkgdGhpbmsuIElmIEkgd2Fz IHdyb25nLCBwbGVhc2UgY29ycmVjdCBtZS4gRnJvbSBteSBwZXJzcGVjdGl2ZSwmbmJzcDtDaW5k ZXIgY2FyZXMgbW9yZSBhYm91dCB0aGUgY2FwYWNpdHkgb2YgdGhlIHBvb2wgd2hvc2UgcG9vbCBj YXBhYmlsaXRpZXMgcmVwb3J0aW5nIGludGVyZmFjZSBpcyBmaXhlZCwgd2hlcmVhcywgaW4gYWRk aXRpb24gdG8gdGhlIGNhcGFjaXR5LCBDeWJvcmcgYWxzbyBjYXJlcyBhYm91dCB0aGUgZmluZS1n cmFpbmVkIGFjY2VsZXJhdG9yIGNhcGFiaWxpdGllcyAoZS5nLiBpb3BzLCBxdWV1ZSwgZXRjLiku Jm5ic3A7VGhlc2UgY2FwYWJpbGl0aWVzLCByZXBvcnRlZCAmbmJzcDtmcm9tIHRoZSBDeWJvcmcs IGNhbiBiZSBkeW5hbWljIGNvbmZpZ3VyZWQgYW5kIGhhbmRsZWQgdGhyb3VnaCB0aGUgT3BlblNE U+KAmSBwcm9maWxlLiBGb3IgdGhpcyByZWFzb24sIGl0IHByb3ZpZGVzIGEgbW9yZSBmbGV4aWJs ZSBhbmQgc2ltcGxlIGNvbmZpZ3VyYXRpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBjb252ZW5pZW50 bHkuPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5UaHgsPC9kaXY+PGRpdj5IZWxsb3dheTwvZGl2 PjxkaXYgaWQ9Im50ZXMtcGNtYWlsLXNpZ25hdHVyZSIgc3R5bGU9ImZvbnQtZmFtaWx5OicnIj4K CjwvZGl2Pjxicj4KPC9kaXY+PGRpdiBjbGFzcz0iSi1yZXBseSIgc3R5bGU9ImJhY2tncm91bmQt Y29sb3I6I2YyZjJmMjtjb2xvcjpibGFjaztwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206 NnB4O2JvcmRlci1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1czozcHg7LXdlYmtpdC1ib3Jk ZXItcmFkaXVzOjNweDttYXJnaW4tdG9wOjQ1cHg7bWFyZ2luLWJvdHRvbToyMHB4O2ZvbnQtZmFt aWx5OicnOyI+CiAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxLjY7 d29yZC1icmVhazpicmVhay1hbGw7bWFyZ2luLWxlZnQ6MTBweDttYXJnaW4tcmlnaHQ6MTBweCI+ T24gPHNwYW4gY2xhc3M9Im1haWwtZGF0ZSI+MDYvMTMvMjAxOCAyMjo0Njwvc3Bhbj7vvIw8YSBj bGFzcz0ibWFpbC10byIgc3R5bGU9InRleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMyYTgzZjI7 IiBocmVmPSJtYWlsdG86cGF1bC5lLmx1c2VAaW50ZWwuY29tIj5MdXNlLCBQYXVsIEUmbHQ7cGF1 bC5lLmx1c2VAaW50ZWwuY29tJmd0OzwvYT4gd3JvdGXvvJogPC9kaXY+CjwvZGl2Pgo8YmxvY2tx dW90ZSBpZD0ibnRlcy1wY21haWwtcXVvdGUiIHN0eWxlPSJtYXJnaW46IDA7IHBhZGRpbmc6IDA7 IGZvbnQtc2l6ZTogMTRweDsgZm9udC1mYW1pbHk6ICcnOyI+Cgo8ZGl2IGNsYXNzPSJXb3JkU2Vj dGlvbjEiPgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBw dDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3 RCI+SGkgSGVsbG93YXksPG86cD48L286cD48L3NwYW4+PC9wPgo8cCBjbGFzcz0iTXNvTm9ybWFs Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJp JnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+PG86cD4mbmJzcDs8L286cD48L3NwYW4+ PC9wPgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtm b250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+ VGhhdOKAmXMgYSBncmVhdCBzdGFydCBidXQgSSBzdGlsbCBoYXZlIHRoZSBzYW1lIG9wZW4gcXVl c3Rpb25zIGJlbG93LCBtYXliZSB5b3UgY2FuIHRyeSBhbmQgYWRkcmVzcyB0aG9zZSBkaXJlY3Rs eT8gQWxzbywgYmVsb3cgaXMgdGhlIGxpbmsgZm9yIGFkZGluZyBTUERLIGJhc2VkCiBOVk1lT0Yg YXMgYSBDaW5kZXIgcGx1Zy1pbi4mbmJzcDsgSW4gYWRkaXRpb24gdG8gdGhlIHF1ZXN0aW9uIGJl bG93IGNhbiB5b3UgcGxlYXNlIGV4cGxhaW4gZm9yIGV2ZXJ5b25lIGhvdyB5b3Ugc2VlIHRoZSBh cHByb2FjaCBvZiB1c2luZyBDeWJvcmcgYW5kIE9wZW5TRFMgY29tcGFyZXMgd2l0aCB0aGUgc2Vl bWluZ2x5IHNpbXBsZXIgYXBwcm9hY2ggb2YgcHJvdmlkaW5nIGEgQ2luZGVyIHBsdWctaW4/PG86 cD48L286cD48L3NwYW4+PC9wPgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9u dC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7 Y29sb3I6IzFGNDk3RCI+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPgo8cCBjbGFzcz0iTXNv Tm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtD YWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+PGEgaHJlZj0iaHR0cHM6Ly9y ZXZpZXcub3BlbnN0YWNrLm9yZy8jL2MvNTY0MjI5LyI+aHR0cHM6Ly9yZXZpZXcub3BlbnN0YWNr Lm9yZy8jL2MvNTY0MjI5LzwvYT4KPG86cD48L286cD48L3NwYW4+PC9wPgo8cCBjbGFzcz0iTXNv Tm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtD YWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+PG86cD4mbmJzcDs8L286cD48 L3NwYW4+PC9wPgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEx LjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFG NDk3RCI+VGhhbmtzISE8bzpwPjwvbzpwPjwvc3Bhbj48L3A+CjxwIGNsYXNzPSJNc29Ob3JtYWwi PjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkm cXVvdDssc2Fucy1zZXJpZjtjb2xvcjojMUY0OTdEIj5QYXVsPG86cD48L286cD48L3NwYW4+PC9w Pgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250 LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+PG86 cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48YSBuYW1lPSJf TWFpbEVuZENvbXBvc2UiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5 OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtjb2xvcjojMUY0OTdEIj48bzpwPiZuYnNw OzwvbzpwPjwvc3Bhbj48L2E+PC9wPgo8ZGl2Pgo8ZGl2IHN0eWxlPSJib3JkZXI6bm9uZTtib3Jk ZXItdG9wOnNvbGlkICNFMUUxRTEgMS4wcHQ7cGFkZGluZzozLjBwdCAwaW4gMGluIDBpbiI+Cjxw IGNsYXNzPSJNc29Ob3JtYWwiPjxiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQt ZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZiI+RnJvbTo8L3NwYW4+PC9iPjxz cGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVv dDssc2Fucy1zZXJpZiI+IFNQREsgW21haWx0bzo8YSBocmVmPSJtYWlsdG86c3Bkay1ib3VuY2Vz QGxpc3RzLjAxLm9yZyI+c3Bkay1ib3VuY2VzQGxpc3RzLjAxLm9yZzwvYT5dCjxiPk9uIEJlaGFs ZiBPZiA8L2I+aGVsbG93YXk8YnI+CjxiPlNlbnQ6PC9iPiBUdWVzZGF5LCBKdW5lIDEyLCAyMDE4 IDU6MjIgUE08YnI+CjxiPlRvOjwvYj4gU3RvcmFnZSBQZXJmb3JtYW5jZSBEZXZlbG9wbWVudCBL aXQgJmx0OzxhIGhyZWY9Im1haWx0bzpzcGRrQGxpc3RzLjAxLm9yZyI+c3Bka0BsaXN0cy4wMS5v cmc8L2E+Jmd0Ozxicj4KPGI+Q2M6PC9iPiBTdG9yYWdlIFBlcmZvcm1hbmNlIERldmVsb3BtZW50 IEtpdCAmbHQ7PGEgaHJlZj0ibWFpbHRvOnNwZGtAbGlzdHMuMDEub3JnIj5zcGRrQGxpc3RzLjAx Lm9yZzwvYT4mZ3Q7PGJyPgo8Yj5TdWJqZWN0OjwvYj4gUmU6IFtTUERLXSBJbnRlZ3JhdGUgT3Bl blN0YWNrL0N5Ym9yZyBpbnRvIFNQREsgQXJjaGl0ZWN0dXJlPG86cD48L286cD48L3NwYW4+PC9w Pgo8L2Rpdj4KPC9kaXY+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxvOnA+Jm5ic3A7PC9vOnA+PC9w Pgo8ZGl2Pgo8ZGl2Pgo8ZGl2Pgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9u dC1mYW1pbHk6JnF1b3Q7SGVsdmV0aWNhJnF1b3Q7LHNhbnMtc2VyaWYiPkhpIFBhdWwsPG86cD48 L286cD48L3NwYW4+PC9wPgo8L2Rpdj4KPGRpdj4KPGRpdj4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+ PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0hlbHZldGljYSZxdW90OyxzYW5zLXNlcmlm Ij5UaGFuayB5b3UgZm9yIHlvdXIgcmVzcG9uc2UsIEkgaGF2ZSBzdWJtaXR0ZWQgYSB0cmVsbG8g WzBdIHRpdGxlZCAmbmJzcDvigJxJbnRlZ3JhdGUgT3BlblN0YWNrL0N5Ym9yZyBpbnRvIFNQREsg QXJjaGl0ZWN0dXJl4oCdLiBJIGFtIHRyeWluZyB0byBhbnN3ZXIgeW91ciBxdWVzdGlvbnMgZnJv bSB0aGlzIHRyZWxsbywgZG8gSSBtYWtlIHNlbnNlPwogSSByZWFsbHkgaG9wZSB0byByZWNlaXZl IHlvdXIgZmVlZGJhY2suPG86cD48L286cD48L3NwYW4+PC9wPgo8L2Rpdj4KPGRpdj4KPHAgY2xh c3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0hlbHZldGljYSZx dW90OyxzYW5zLXNlcmlmIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+CjwvZGl2Pgo8ZGl2 Pgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7SGVs dmV0aWNhJnF1b3Q7LHNhbnMtc2VyaWYiPlswXTxhIGhyZWY9Imh0dHBzOi8vdHJlbGxvLmNvbS9j L1FmU0FrTFNTLzEyMS1pbnRlZ3JhdGUtb3BlbnN0YWNrLWN5Ym9yZy1pbnRvLXNwZGstYXJjaGl0 ZWN0dXJlIj5odHRwczovL3RyZWxsby5jb20vYy9RZlNBa0xTUy8xMjEtaW50ZWdyYXRlLW9wZW5z dGFjay1jeWJvcmctaW50by1zcGRrLWFyY2hpdGVjdHVyZTwvYT4mbmJzcDs8bzpwPjwvbzpwPjwv c3Bhbj48L3A+CjwvZGl2Pgo8L2Rpdj4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9 ImZvbnQtZmFtaWx5OiZxdW90O0hlbHZldGljYSZxdW90OyxzYW5zLXNlcmlmIj48bzpwPiZuYnNw OzwvbzpwPjwvc3Bhbj48L3A+CjwvZGl2Pgo8ZGl2Pgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3Bh biBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7SGVsdmV0aWNhJnF1b3Q7LHNhbnMtc2VyaWYiPlRo eCw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+CjwvZGl2Pgo8ZGl2Pgo8cCBjbGFzcz0iTXNvTm9ybWFs Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7SGVsdmV0aWNhJnF1b3Q7LHNhbnMtc2Vy aWYiPkhlbGxvd2F5PG86cD48L286cD48L3NwYW4+PC9wPgo8L2Rpdj4KPGRpdiBzdHlsZT0ibWFy Z2luLXRvcDozMy43NXB0O21hcmdpbi1ib3R0b206MTUuMHB0O2JvcmRlci1yYWRpdXM6M3B4Oy1t b3otYm9yZGVyLXJhZGl1czozcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjNweCI+CjxkaXYgc3R5 bGU9Im1hcmdpbi1sZWZ0OjcuNXB0O21hcmdpbi1yaWdodDo3LjVwdCI+CjxwIGNsYXNzPSJNc29O b3JtYWwiIHN0eWxlPSJiYWNrZ3JvdW5kOiNGMkYyRjI7d29yZC1icmVhazpicmVhay1hbGwiPjxz cGFuIHN0eWxlPSJmb250LXNpemU6OS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7SGVsdmV0aWNhJnF1 b3Q7LHNhbnMtc2VyaWY7Y29sb3I6YmxhY2siPk9uCjxzcGFuIGNsYXNzPSJtYWlsLWRhdGUiPjA2 LzEyLzIwMTggMDg6MTY8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6OS4wcHQ7 Zm9udC1mYW1pbHk6JnF1b3Q7TVMgR290aGljJnF1b3Q7O2NvbG9yOmJsYWNrIj7vvIw8L3NwYW4+ PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTo5LjBwdDtmb250LWZhbWlseTomcXVvdDtIZWx2ZXRpY2Em cXVvdDssc2Fucy1zZXJpZjtjb2xvcjpibGFjayI+PGEgaHJlZj0ibWFpbHRvOnBhdWwuZS5sdXNl QGludGVsLmNvbSI+PHNwYW4gc3R5bGU9ImNvbG9yOiMyQTgzRjI7dGV4dC1kZWNvcmF0aW9uOm5v bmUiPkx1c2UsCiBQYXVsIEUmbHQ7cGF1bC5lLmx1c2VAaW50ZWwuY29tJmd0Ozwvc3Bhbj48L2E+ IHdyb3RlPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6OS4wcHQ7Zm9udC1mYW1pbHk6JnF1 b3Q7TVMgR290aGljJnF1b3Q7O2NvbG9yOmJsYWNrIj7vvJo8L3NwYW4+PHNwYW4gc3R5bGU9ImZv bnQtc2l6ZTo5LjBwdDtmb250LWZhbWlseTomcXVvdDtIZWx2ZXRpY2EmcXVvdDssc2Fucy1zZXJp Zjtjb2xvcjpibGFjayI+CjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4KPC9kaXY+CjwvZGl2Pgo8Ymxv Y2txdW90ZSBpZD0ibnRlcy1wY21haWwtcXVvdGUiPgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3Bh biBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7 LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+SGkgSGVsbG93YXksPC9zcGFuPjxvOnA+PC9vOnA+ PC9wPgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtm b250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+ Jm5ic3A7PC9zcGFuPjxvOnA+PC9vOnA+PC9wPgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBz dHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNh bnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+SSB3YXMgYWN0dWFsbHkganVzdCB3b25kZXJpbmcgd2hh dCBoYWQgaGFwcGVuZWQgd2l0aCB0aGlzLiZuYnNwOyBMb29raW5nIGF0IHRoZSBPcGVuU3RhY2sg cGF0Y2ggaXQgbG9va3MgbGlrZSBpdOKAmXMgY2xvc2UgdG8gbGFuZGluZy4gU29tZXdoZXJlIG91 dCB0aGVyZSB3ZSBoYXZlIGEKIENpbmRlciBkcml2ZXIgdGhhdOKAmXMgYWxzbyBnZXR0aW5nIGZh aXJseSBjbG9zZSBJIGJlbGlldmUgc28gZm9yIHN1cmUgaW50ZWdyYXRpb24gd2l0aCBPcGVuU3Rh Y2sgaXMgaW50ZXJlc3RpbmcgdG8gbWFueSBpbiB0aGUgY29tbXVuaXR5Ljwvc3Bhbj48bzpwPjwv bzpwPjwvcD4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4w cHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOiMxRjQ5 N0QiPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNw YW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90 OyxzYW5zLXNlcmlmO2NvbG9yOiMxRjQ5N0QiPldvdWxkIHlvdSBiZSBhYmxlIHRvIHN1bW1hcml6 ZSBtb3JlIHNwZWNpZmljYWxseSBob3cgeW91ciBwYXRjaCB3b3VsZCB3b3JrIG9uY2UgaXQgbGFu ZHM/IEkgb2YgY291cnNlIHNlZSB5b3VyIGhpZ2ggbGV2ZWwgZGVzY3JpcHRpb24gYmVsb3cgdGhh dCBzb21lIHF1ZXN0aW9ucwogdGhhdCBJIGhhdmUsIEnigJltIGFzc3VtaW5nIG90aGVycyBhcyB3 ZWxsLCBpbmNsdWRlOjwvc3Bhbj48bzpwPjwvbzpwPjwvcD4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+ PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZx dW90OyxzYW5zLXNlcmlmO2NvbG9yOiMxRjQ5N0QiPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwv cD4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9u dC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOiMxRjQ5N0QiPi0g d2hhdCBlbHNlIGlzIHJlcXVpcmVkIHRvIGJlIHB1c2hlZCBpbnRvIE9wZW5TdGFjayBmb3IgdGhp cyB0byB3b3JrPC9zcGFuPjxvOnA+PC9vOnA+PC9wPgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3Bh biBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7 LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+LSBpcyBhbnl0aGluZyByZXF1aXJlZCBpbiB0aGUg U1BESyByZXBvIGZvciB0aGlzIHRvIHdvcms8L3NwYW4+PG86cD48L286cD48L3A+CjxwIGNsYXNz PSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZx dW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtjb2xvcjojMUY0OTdEIj4tIGhvdyB3aWxsIHRo ZSBuZWNlc3NhcnkgU1BESyBjb21wb25lbnRzIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgVk0gaW4g cXVlc3Rpb24gYW5kIHN1YnNlcXVlbnRseSBjb25maWd1cmVkPC9zcGFuPjxvOnA+PC9vOnA+PC9w Pgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250 LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+Jm5i c3A7PC9zcGFuPjxvOnA+PC9vOnA+PC9wPgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHls ZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMt c2VyaWY7Y29sb3I6IzFGNDk3RCI+VGhhbmtzIGZvciBjb250aW51aW5nIHRvIHdvcmsgb24gdGhp cyE8L3NwYW4+PG86cD48L286cD48L3A+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxl PSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1z ZXJpZjtjb2xvcjojMUY0OTdEIj4mbmJzcDs8L3NwYW4+PG86cD48L286cD48L3A+CjxwIGNsYXNz PSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZx dW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtjb2xvcjojMUY0OTdEIj4tUGF1bDwvc3Bhbj48 bzpwPjwvbzpwPjwvcD4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6 ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO2NvbG9y OiMxRjQ5N0QiPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4KPGRpdj4KPGRpdiBzdHlsZT0i Ym9yZGVyOm5vbmU7Ym9yZGVyLXRvcDpzb2xpZCAjRTFFMUUxIDEuMHB0O3BhZGRpbmc6My4wcHQg MGluIDBpbiAwaW4iPgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48Yj48c3BhbiBzdHlsZT0iZm9udC1z aXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWYiPkZy b206PC9zcGFuPjwvYj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTom cXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWYiPiBTUERLIFttYWlsdG86PGEgaHJlZj0ibWFp bHRvOnNwZGstYm91bmNlc0BsaXN0cy4wMS5vcmciPnNwZGstYm91bmNlc0BsaXN0cy4wMS5vcmc8 L2E+XQo8Yj5PbiBCZWhhbGYgT2YgPC9iPmhlbGxvd2F5PGJyPgo8Yj5TZW50OjwvYj4gTW9uZGF5 LCBKdW5lIDExLCAyMDE4IDE6MzUgQU08YnI+CjxiPlRvOjwvYj4gU3RvcmFnZSBQZXJmb3JtYW5j ZSBEZXZlbG9wbWVudCBLaXQgJmx0OzxhIGhyZWY9Im1haWx0bzpzcGRrQGxpc3RzLjAxLm9yZyI+ c3Bka0BsaXN0cy4wMS5vcmc8L2E+Jmd0Ozxicj4KPGI+U3ViamVjdDo8L2I+IFtTUERLXSBJbnRl Z3JhdGUgT3BlblN0YWNrL0N5Ym9yZyBpbnRvIFNQREsgQXJjaGl0ZWN0dXJlPC9zcGFuPjxvOnA+ PC9vOnA+PC9wPgo8L2Rpdj4KPC9kaXY+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPiZuYnNwOzxvOnA+ PC9vOnA+PC9wPgo8ZGl2Pgo8ZGl2Pgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0i Zm9udC1mYW1pbHk6JnF1b3Q7SGVsdmV0aWNhJnF1b3Q7LHNhbnMtc2VyaWYiPkhpIEppbSBhbmQg YWxsLDwvc3Bhbj48bzpwPjwvbzpwPjwvcD4KPC9kaXY+CjxkaXY+CjxwIGNsYXNzPSJNc29Ob3Jt YWwiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtIZWx2ZXRpY2EmcXVvdDssc2Fucy1z ZXJpZiI+Jm5ic3A7PC9zcGFuPjxvOnA+PC9vOnA+PC9wPgo8L2Rpdj4KPGRpdj4KPGRpdj4KPHAg Y2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0hlbHZldGlj YSZxdW90OyxzYW5zLXNlcmlmIj5EbyB5b3Uga25vdyBPcGVuU3RhY2svQ3lib3JnPyBJdCBpcyBP cGVuU3RhY2sgYWNjZWxlcmF0aW9uIHNlcnZpY2Ugd2hpY2ggcHJvdmlkZXMgYSBtYW5hZ2VtZW50 IGZyYW1ld29yayBmb3IgYWNjZWxlcmF0b3IgZGV2aWNlcyAoZS5nLiBGUEdBLCBHUFUsIE5WTWUg U1NEKS4gVGhlcmUgaXMgYSBzdHJvbmcgZGVtYW5kIGZvciBPcGVuU3RhY2sKIHRvIHN1cHBvcnQg aGFyZHdhcmUgYWNjZWxlcmF0ZWQgZGV2aWNlcyBpbiBhIGR5bmFtaWMgbW9kZWwobWVudGlvbmVk IGluIE9wZW5TdGFjayBTdW1taXQgVmFuY291dmVyIDIwMTggWzBdKS4mbmJzcDs8L3NwYW4+PG86 cD48L286cD48L3A+CjwvZGl2Pgo8ZGl2Pgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHls ZT0iZm9udC1mYW1pbHk6JnF1b3Q7SGVsdmV0aWNhJnF1b3Q7LHNhbnMtc2VyaWYiPiZuYnNwOzwv c3Bhbj48bzpwPjwvbzpwPjwvcD4KPC9kaXY+CjxkaXY+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxz cGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtIZWx2ZXRpY2EmcXVvdDssc2Fucy1zZXJpZiI+ Rm9yIHRoaXMgcmVhc29uLCB3ZSBjYW4gdXNlIEN5Ym9yZyB0byBpbnRlcmFjdGl2ZSB3aXRoIG52 bWZfdGd0IHRvIHJlYWxpemUgdGhlIG1hbmFnZW1lbnQgb2YgdGhlIHVzZXIgc3BhY2UgYWNjZWxl cmF0b3IgTlZNZSBTU0QgZGV2aWNlLCB3aGljaCBjYW4gYmFkbHkgcHJvbW90ZSB0aGUgZWZmaWNp ZW5jeS4gSXQgaXMgd29ydGgKIG1lbnRpb25pbmcgdGhhdCB0aGUgQ3lib3JnX1NQREtfRHJpdmVy IEkgc3VtbWl0dGVkIGhhcyBiZWVuIG1lcmdlZCBpbnRvIHRoZSBPcGVuU3RhY2sgdmVyc2lvbiBR IFsxXS4gVGhlIGRyaXZlciBjYW4gcmVwb3J0IHRoZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvZiB0 aGUgZGV2aWNlIHRvIHRoZSBDeWJvcmcgYWdlbnQuIFdoZW4gdXNlciByZXF1ZXN0cyBhIHZtIHdp dGggYSB1c2VyIHNwYWNlIE5WTWUgU1NELCBDeWJvcmcgYWdlbnQgd2lsbCB1cGRhdGUKIHRoZSBO b3ZhL1BsYWNlbWVudCBpbnZlbnRvcnkgb24gYXZhaWxhYmxlIE5WTWUgZGV2aWNlcy4gVGhpcyBp cyBhIGNvbXBsZXRlIHByb2Nlc3MgdG8gZGVzY3JpYmUgdGhlIGNvbm5lY3Rpb24gb2YgQ3lib3Jn IGFuZCBTUERLLjwvc3Bhbj48bzpwPjwvbzpwPjwvcD4KPC9kaXY+CjxkaXY+CjxwIGNsYXNzPSJN c29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtIZWx2ZXRpY2EmcXVvdDss c2Fucy1zZXJpZiI+Jm5ic3A7PC9zcGFuPjxvOnA+PC9vOnA+PC9wPgo8L2Rpdj4KPGRpdj4KPHAg Y2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0hlbHZldGlj YSZxdW90OyxzYW5zLXNlcmlmIj5JIHdvbmRlciB3aGV0aGVyIHlvdSBndXlzIGFyZSBpbnRlcmVz dGVkIGluIGludGVncmF0aW5nIE9wZW5TdGFjay9DeWJvcmcgaW50byBTUERLIGFyY2hpdGVjdHVy ZT8gRG8gSSBtYWtlIHNlbnNlPyBQbGVhc2UgbGV0IG1lIGtub3cgd2hhdCB5b3VyIHRob3VnaHRz Ljwvc3Bhbj48bzpwPjwvbzpwPjwvcD4KPC9kaXY+CjwvZGl2Pgo8ZGl2Pgo8cCBjbGFzcz0iTXNv Tm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7SGVsdmV0aWNhJnF1b3Q7LHNh bnMtc2VyaWYiPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4KPC9kaXY+CjxkaXY+CjxwIGNs YXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtIZWx2ZXRpY2Em cXVvdDssc2Fucy1zZXJpZiI+WzBdPGEgaHJlZj0iaHR0cHM6Ly93d3cub3BlbnN0YWNrLm9yZy92 aWRlb3MvdmFuY291dmVyLTIwMTgvb3B0aW1pemVkLWhwY2FpLWNsb3VkLXdpdGgtb3BlbnN0YWNr LWFjY2VsZXJhdGlvbi1zZXJ2aWNlLWFuZC1jb21wb3NhYmxlLWhhcmR3YXJlIj5odHRwczovL3d3 dy5vcGVuc3RhY2sub3JnL3ZpZGVvcy92YW5jb3V2ZXItMjAxOC9vcHRpbWl6ZWQtaHBjYWktY2xv dWQtd2l0aC1vcGVuc3RhY2stYWNjZWxlcmF0aW9uLXNlcnZpY2UtYW5kLWNvbXBvc2FibGUtaGFy ZHdhcmU8L2E+PC9zcGFuPjxvOnA+PC9vOnA+PC9wPgo8L2Rpdj4KPGRpdj4KPHAgY2xhc3M9Ik1z b05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0hlbHZldGljYSZxdW90Oyxz YW5zLXNlcmlmIj5bMV08YSBocmVmPSJodHRwczovL3Jldmlldy5vcGVuc3RhY2sub3JnLyMvYy81 MzgxNjQvIj48c3BhbiBzdHlsZT0iY29sb3I6cHVycGxlIj5odHRwczovL3Jldmlldy5vcGVuc3Rh Y2sub3JnLyMvYy81MzgxNjQvPC9zcGFuPjwvYT48L3NwYW4+PG86cD48L286cD48L3A+CjwvZGl2 Pgo8ZGl2Pgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1 b3Q7SGVsdmV0aWNhJnF1b3Q7LHNhbnMtc2VyaWYiPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwv cD4KPC9kaXY+CjxkaXY+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LWZh bWlseTomcXVvdDtIZWx2ZXRpY2EmcXVvdDssc2Fucy1zZXJpZiI+Jm5ic3A7PC9zcGFuPjxvOnA+ PC9vOnA+PC9wPgo8L2Rpdj4KPGRpdj4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9 ImZvbnQtZmFtaWx5OiZxdW90O0hlbHZldGljYSZxdW90OyxzYW5zLXNlcmlmIj5UaHgsPC9zcGFu PjxvOnA+PC9vOnA+PC9wPgo8L2Rpdj4KPGRpdj4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4g c3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0hlbHZldGljYSZxdW90OyxzYW5zLXNlcmlmIj5IZWxs b3dheTwvc3Bhbj48bzpwPjwvbzpwPjwvcD4KPC9kaXY+CjwvZGl2Pgo8L2Jsb2NrcXVvdGU+Cjwv ZGl2Pgo8L2Rpdj48L2Jsb2NrcXVvdGU+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgICBh I250ZXMtcGNtYWlsLXNpZ25hdHVyZS1kZWZhdWx0OmhvdmVyIHsKICAgICAgICAgICAgdGV4dC1k ZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgICAgICAgIGNvbG9yOiAjMzU5M2RiOwogICAgICAg ICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgfQogICAgPC9zdHlsZT48IS0t77+9LS0+Cjwv ZGl2Pgo8L2JvZHk+CjwvaHRtbD4= --===============4214003897562488317==--