From lifuqiong at cncloudsec.com Sat Jul 23 05:44:08 2016 Content-Type: multipart/mixed; boundary="===============7414911905233992293==" MIME-Version: 1.0 From: lifuqiong To: devel at ovirt.org Subject: [ovirt-devel] Debug vdsm 4.0.0 report error: libvirt: XML-RPC error : Failed to connect socket to '/var/run/libvirt/libvirt-sock': Permission denied Date: Sat, 23 Jul 2016 17:39:00 +0800 Message-ID: <001d01d1e4c6$0b528530$21f78f90$@cncloudsec.com> --===============7414911905233992293== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable This is a multipart message in MIME format. ------=3D_NextPart_000_001E_01D1E509.19780F20 Content-Type: text/plain; charset=3D"us-ascii" Content-Transfer-Encoding: 7bit I debugged vdsm with PyCharm, And I logged on my Centos 7.2 with root, and get an error as follows: = Problem: = Traceback (most recent call last): File "/usr/share/vdsm/vdsm", line 149, in run serve_clients(log) File "/usr/share/vdsm/vdsm", line 104, in serve_clients cif =3D clientIF.getInstance(irs, log, scheduler) File "/usr/share/vdsm/clientIF.py", line 204, in getInstance cls._instance =3D clientIF(irs, log, scheduler) File "/usr/share/vdsm/clientIF.py", line 106, in __init__ secret.clear() File "/usr/lib/python2.7/site-packages/vdsm/virt/secret.py", line 92, in clear con =3D libvirtconnection.get() File "/usr/lib/python2.7/site-packages/vdsm/libvirtconnection.py", line 163, in get password) File "/usr/lib/python2.7/site-packages/vdsm/libvirtconnection.py", line 99, in open_connection return utils.retry(libvirtOpen, timeout=3D10, sleep=3D0.2) File "/usr/lib/python2.7/site-packages/vdsm/utils.py", line 546, in retry return func() File "/usr/lib64/python2.7/site-packages/libvirt.py", line 105, in openAuth if ret is None:raise libvirtError('virConnectOpenAuth() failed') libvirtError: Failed to connect socket to '/var/run/libvirt/libvirt-sock': Permission denied = Investitate: According to the traceback above, the code in libvirt.py as below, and os.geteuid() get '0' which shows the current user is root; = def openAuth(uri, auth, flags=3D0): #print os.geteuid() ret =3D libvirtmod.virConnectOpenAuth(uri, auth, flags) if ret is None:raise libvirtError('virConnectOpenAuth() failed') return virConnect(_obj=3Dret) = [root(a)server117 libvirt]# ll /var/run/libvirt/libvirt-sock srwxrwx---. 1 root qemu 0 Jul 19 23:43 /var/run/libvirt/libvirt-sock = According that, root should not get an Permission denied error ? But why? = And I setenforce=3D0 , and still show Perssion denied error. = What's the reason? And how to solve it? = Thank you. ------=3D_NextPart_000_001E_01D1E509.19780F20 Content-Type: text/html; charset=3D"us-ascii" Content-Transfer-Encoding: quoted-printable

I debugg= ed =3D vdsm with PyCharm, And I logged on my Centos 7.2 with root,  and =3D get an error as follows:

 

Problem:

 

Traceback (most recent call last):

  File =3D "/usr/share/vdsm/vdsm", line 149, in =3D run

    =3D serve_clients(log)

  File "/usr/share/vdsm/vdsm", line 104, in = =3D serve_clients

    cif =3D3D clientIF.getInstance(irs, log, = =3D scheduler)

  File "/usr/share/vdsm/clientIF.py", line = =3D 204, in getInstance

    cls._instance =3D3D clientIF(irs, log, = =3D scheduler)

  File "/usr/share/vdsm/clientIF.py", line = =3D 106, in __init__

    secret.clear()

  File =3D "/usr/lib/python2.7/site-packages/vdsm/virt/secret.py", line =3D 92, in clear

    con =3D3D =3D libvirtconnection.get()

  File =3D "/usr/lib/python2.7/site-packages/vdsm/libvirtconnection.py", =3D line 163, in get

    password)

  File =3D "/usr/lib/python2.7/site-packages/vdsm/libvirtconnection.py", =3D line 99, in open_connection

    return =3D utils.retry(libvirtOpen, timeout=3D3D10, =3D sleep=3D3D0.2)

  File =3D "/usr/lib/python2.7/site-packages/vdsm/utils.py", line 546, in = =3D retry

    return func()

  File =3D "/usr/lib64/python2.7/site-packages/libvirt.py", line 105, in =3D openAuth

    if ret is None:raise =3D libvirtError('virConnectOpenAuth() failed')

libvirtError: Failed to connect = =3D socket to '/var/run/libvirt/libvirt-sock': Permission =3D denied

 

Investitate:

According to the traceback above, = =3D the code in libvirt.py as below, and  os.geteuid() get =3D ‘0’ which shows the current user is =3D root;

 

def openAuth(uri, auth, flags=3D3D0):

<= p =3D class=3D3DMsoNormal>         #print =3D os.geteuid()

    ret =3D3D =3D libvirtmod.virConnectOpenAuth(uri, auth, flags)

    if ret is =3D None:raise libvirtError('virConnectOpenAuth() =3D failed')

return =3D virConnect(_obj=3D3Dret)

 

[root(a)server117 libvirt]# ll =3D /var/run/libvirt/libvirt-sock

srwxrwx---. 1 root qemu 0 Jul 19 = =3D 23:43 /var/run/libvirt/libvirt-sock

 

According that, root should not ge= t =3D an Permission denied error ? But why?

 

And I setenforce=3D3D0 , and still= =3D show Perssion denied error.

 

What’s the reason? And how t= o =3D solve it?

 

Thank you.

------=3D_NextPart_000_001E_01D1E509.19780F20-- --===============7414911905233992293== Content-Type: multipart/alternative MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.bin" VGhpcyBpcyBhIG11bHRpcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgoKLS0tLS0tPV9OZXh0 UGFydF8wMDBfMDAxRV8wMUQxRTUwOS4xOTc4MEYyMApDb250ZW50LVR5cGU6IHRleHQvcGxhaW47 CgljaGFyc2V0PSJ1cy1hc2NpaSIKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAoKSSBk ZWJ1Z2dlZCB2ZHNtIHdpdGggUHlDaGFybSwgQW5kIEkgbG9nZ2VkIG9uIG15IENlbnRvcyA3LjIg d2l0aCByb290LCAgYW5kCmdldCBhbiBlcnJvciBhcyBmb2xsb3dzOgoKIAoKUHJvYmxlbToKCiAK ClRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKCiAgRmlsZSAiL3Vzci9zaGFyZS92 ZHNtL3Zkc20iLCBsaW5lIDE0OSwgaW4gcnVuCgogICAgc2VydmVfY2xpZW50cyhsb2cpCgogIEZp bGUgIi91c3Ivc2hhcmUvdmRzbS92ZHNtIiwgbGluZSAxMDQsIGluIHNlcnZlX2NsaWVudHMKCiAg ICBjaWYgPSBjbGllbnRJRi5nZXRJbnN0YW5jZShpcnMsIGxvZywgc2NoZWR1bGVyKQoKICBGaWxl ICIvdXNyL3NoYXJlL3Zkc20vY2xpZW50SUYucHkiLCBsaW5lIDIwNCwgaW4gZ2V0SW5zdGFuY2UK CiAgICBjbHMuX2luc3RhbmNlID0gY2xpZW50SUYoaXJzLCBsb2csIHNjaGVkdWxlcikKCiAgRmls ZSAiL3Vzci9zaGFyZS92ZHNtL2NsaWVudElGLnB5IiwgbGluZSAxMDYsIGluIF9faW5pdF9fCgog ICAgc2VjcmV0LmNsZWFyKCkKCiAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMi43L3NpdGUtcGFja2Fn ZXMvdmRzbS92aXJ0L3NlY3JldC5weSIsIGxpbmUgOTIsIGluCmNsZWFyCgogICAgY29uID0gbGli dmlydGNvbm5lY3Rpb24uZ2V0KCkKCiAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMi43L3NpdGUtcGFj a2FnZXMvdmRzbS9saWJ2aXJ0Y29ubmVjdGlvbi5weSIsIGxpbmUKMTYzLCBpbiBnZXQKCiAgICBw YXNzd29yZCkKCiAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMi43L3NpdGUtcGFja2FnZXMvdmRzbS9s aWJ2aXJ0Y29ubmVjdGlvbi5weSIsIGxpbmUKOTksIGluIG9wZW5fY29ubmVjdGlvbgoKICAgIHJl dHVybiB1dGlscy5yZXRyeShsaWJ2aXJ0T3BlbiwgdGltZW91dD0xMCwgc2xlZXA9MC4yKQoKICBG aWxlICIvdXNyL2xpYi9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy92ZHNtL3V0aWxzLnB5IiwgbGlu ZSA1NDYsIGluIHJldHJ5CgogICAgcmV0dXJuIGZ1bmMoKQoKICBGaWxlICIvdXNyL2xpYjY0L3B5 dGhvbjIuNy9zaXRlLXBhY2thZ2VzL2xpYnZpcnQucHkiLCBsaW5lIDEwNSwgaW4Kb3BlbkF1dGgK CiAgICBpZiByZXQgaXMgTm9uZTpyYWlzZSBsaWJ2aXJ0RXJyb3IoJ3ZpckNvbm5lY3RPcGVuQXV0 aCgpIGZhaWxlZCcpCgpsaWJ2aXJ0RXJyb3I6IEZhaWxlZCB0byBjb25uZWN0IHNvY2tldCB0byAn L3Zhci9ydW4vbGlidmlydC9saWJ2aXJ0LXNvY2snOgpQZXJtaXNzaW9uIGRlbmllZAoKIAoKSW52 ZXN0aXRhdGU6CgpBY2NvcmRpbmcgdG8gdGhlIHRyYWNlYmFjayBhYm92ZSwgdGhlIGNvZGUgaW4g bGlidmlydC5weSBhcyBiZWxvdywgYW5kCm9zLmdldGV1aWQoKSBnZXQgJzAnIHdoaWNoIHNob3dz IHRoZSBjdXJyZW50IHVzZXIgaXMgcm9vdDsKCiAKCmRlZiBvcGVuQXV0aCh1cmksIGF1dGgsIGZs YWdzPTApOgoKICAgICAgICAgI3ByaW50IG9zLmdldGV1aWQoKQoKICAgIHJldCA9IGxpYnZpcnRt b2QudmlyQ29ubmVjdE9wZW5BdXRoKHVyaSwgYXV0aCwgZmxhZ3MpCgogICAgaWYgcmV0IGlzIE5v bmU6cmFpc2UgbGlidmlydEVycm9yKCd2aXJDb25uZWN0T3BlbkF1dGgoKSBmYWlsZWQnKQoKcmV0 dXJuIHZpckNvbm5lY3QoX29iaj1yZXQpCgogCgpbcm9vdEBzZXJ2ZXIxMTcgbGlidmlydF0jIGxs IC92YXIvcnVuL2xpYnZpcnQvbGlidmlydC1zb2NrCgpzcnd4cnd4LS0tLiAxIHJvb3QgcWVtdSAw IEp1bCAxOSAyMzo0MyAvdmFyL3J1bi9saWJ2aXJ0L2xpYnZpcnQtc29jawoKIAoKQWNjb3JkaW5n IHRoYXQsIHJvb3Qgc2hvdWxkIG5vdCBnZXQgYW4gUGVybWlzc2lvbiBkZW5pZWQgZXJyb3IgPyBC dXQgd2h5PwoKIAoKQW5kIEkgc2V0ZW5mb3JjZT0wICwgYW5kIHN0aWxsIHNob3cgUGVyc3Npb24g ZGVuaWVkIGVycm9yLgoKIAoKV2hhdCdzIHRoZSByZWFzb24/IEFuZCBob3cgdG8gc29sdmUgaXQ/ CgogCgpUaGFuayB5b3UuCgoKLS0tLS0tPV9OZXh0UGFydF8wMDBfMDAxRV8wMUQxRTUwOS4xOTc4 MEYyMApDb250ZW50LVR5cGU6IHRleHQvaHRtbDsKCWNoYXJzZXQ9InVzLWFzY2lpIgpDb250ZW50 LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlCgo8aHRtbCB4bWxuczp2PTNEInVy bjpzY2hlbWFzLW1pY3Jvc29mdC1jb206dm1sIiA9CnhtbG5zOm89M0QidXJuOnNjaGVtYXMtbWlj cm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIiA9CnhtbG5zOnc9M0QidXJuOnNjaGVtYXMtbWljcm9z b2Z0LWNvbTpvZmZpY2U6d29yZCIgPQp4bWxuczptPTNEImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29m dC5jb20vb2ZmaWNlLzIwMDQvMTIvb21tbCIgPQp4bWxucz0zRCJodHRwOi8vd3d3LnczLm9yZy9U Ui9SRUMtaHRtbDQwIj48aGVhZD48bWV0YSA9Cmh0dHAtZXF1aXY9M0RDb250ZW50LVR5cGUgY29u dGVudD0zRCJ0ZXh0L2h0bWw7ID0KY2hhcnNldD0zRHVzLWFzY2lpIj48bWV0YSBuYW1lPTNER2Vu ZXJhdG9yIGNvbnRlbnQ9M0QiTWljcm9zb2Z0IFdvcmQgMTQgPQooZmlsdGVyZWQgbWVkaXVtKSI+ PHN0eWxlPjwhLS0KLyogRm9udCBEZWZpbml0aW9ucyAqLwpAZm9udC1mYWNlCgl7Zm9udC1mYW1p bHk6U2ltU3VuOwoJcGFub3NlLTE6MiAxIDYgMCAzIDEgMSAxIDEgMTt9CkBmb250LWZhY2UKCXtm b250LWZhbWlseTpTaW1TdW47CglwYW5vc2UtMToyIDEgNiAwIDMgMSAxIDEgMSAxO30KQGZvbnQt ZmFjZQoJe2ZvbnQtZmFtaWx5OkNhbGlicmk7CglwYW5vc2UtMToyIDE1IDUgMiAyIDIgNCAzIDIg NDt9CkBmb250LWZhY2UKCXtmb250LWZhbWlseTpTaW1TdW47CglwYW5vc2UtMToyIDEgNiAwIDMg MSAxIDEgMSAxO30KLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KcC5Nc29Ob3JtYWwsIGxpLk1zb05v cm1hbCwgZGl2Lk1zb05vcm1hbAoJe21hcmdpbjowY207CgltYXJnaW4tYm90dG9tOi4wMDAxcHQ7 Cgl0ZXh0LWFsaWduOmp1c3RpZnk7Cgl0ZXh0LWp1c3RpZnk6aW50ZXItaWRlb2dyYXBoOwoJZm9u dC1zaXplOjEwLjVwdDsKCWZvbnQtZmFtaWx5OiJDYWxpYnJpIiwic2Fucy1zZXJpZiI7fQphOmxp bmssIHNwYW4uTXNvSHlwZXJsaW5rCgl7bXNvLXN0eWxlLXByaW9yaXR5Ojk5OwoJY29sb3I6Ymx1 ZTsKCXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQphOnZpc2l0ZWQsIHNwYW4uTXNvSHlwZXJs aW5rRm9sbG93ZWQKCXttc28tc3R5bGUtcHJpb3JpdHk6OTk7Cgljb2xvcjpwdXJwbGU7Cgl0ZXh0 LWRlY29yYXRpb246dW5kZXJsaW5lO30Kc3Bhbi5FbWFpbFN0eWxlMTcKCXttc28tc3R5bGUtdHlw ZTpwZXJzb25hbC1jb21wb3NlOwoJZm9udC1mYW1pbHk6IkNhbGlicmkiLCJzYW5zLXNlcmlmIjsK CWNvbG9yOndpbmRvd3RleHQ7fQouTXNvQ2hwRGVmYXVsdAoJe21zby1zdHlsZS10eXBlOmV4cG9y dC1vbmx5OwoJZm9udC1mYW1pbHk6IkNhbGlicmkiLCJzYW5zLXNlcmlmIjt9Ci8qIFBhZ2UgRGVm aW5pdGlvbnMgKi8KQHBhZ2UgV29yZFNlY3Rpb24xCgl7c2l6ZTo2MTIuMHB0IDc5Mi4wcHQ7Cglt YXJnaW46NzIuMHB0IDkwLjBwdCA3Mi4wcHQgOTAuMHB0O30KZGl2LldvcmRTZWN0aW9uMQoJe3Bh Z2U6V29yZFNlY3Rpb24xO30KLS0+PC9zdHlsZT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KPG86 c2hhcGVkZWZhdWx0cyB2OmV4dD0zRCJlZGl0IiBzcGlkbWF4PTNEIjEwMjYiIC8+CjwveG1sPjwh W2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgo8bzpzaGFwZWxheW91dCB2OmV4dD0z RCJlZGl0Ij4KPG86aWRtYXAgdjpleHQ9M0QiZWRpdCIgZGF0YT0zRCIxIiAvPgo8L286c2hhcGVs YXlvdXQ+PC94bWw+PCFbZW5kaWZdLS0+PC9oZWFkPjxib2R5IGxhbmc9M0RaSC1DTiBsaW5rPTNE Ymx1ZSA9CnZsaW5rPTNEcHVycGxlIHN0eWxlPTNEJ3RleHQtanVzdGlmeS10cmltOnB1bmN0dWF0 aW9uJz48ZGl2ID0KY2xhc3M9M0RXb3JkU2VjdGlvbjE+PHAgY2xhc3M9M0RNc29Ob3JtYWw+PHNw YW4gbGFuZz0zREVOLVVTPkkgZGVidWdnZWQgPQp2ZHNtIHdpdGggUHlDaGFybSwgQW5kIEkgbG9n Z2VkIG9uIG15IENlbnRvcyA3LjIgd2l0aCByb290LCAmbmJzcDthbmQgPQpnZXQgYW4gZXJyb3Ig YXMgZm9sbG93czo8bzpwPjwvbzpwPjwvc3Bhbj48L3A+PHAgY2xhc3M9M0RNc29Ob3JtYWw+PHNw YW4gPQpsYW5nPTNERU4tVVM+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPjxwIGNsYXNzPTNE TXNvTm9ybWFsPjxzcGFuID0KbGFuZz0zREVOLVVTPlByb2JsZW06PG86cD48L286cD48L3NwYW4+ PC9wPjxwIGNsYXNzPTNETXNvTm9ybWFsPjxzcGFuID0KbGFuZz0zREVOLVVTPjxvOnA+Jm5ic3A7 PC9vOnA+PC9zcGFuPjwvcD48cCBjbGFzcz0zRE1zb05vcm1hbD48c3BhbiA9Cmxhbmc9M0RFTi1V Uz5UcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6PG86cD48L286cD48L3NwYW4+PC9w PjxwID0KY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gbGFuZz0zREVOLVVTPiZuYnNwOyBGaWxlID0K JnF1b3Q7L3Vzci9zaGFyZS92ZHNtL3Zkc20mcXVvdDssIGxpbmUgMTQ5LCBpbiA9CnJ1bjxvOnA+ PC9vOnA+PC9zcGFuPjwvcD48cCBjbGFzcz0zRE1zb05vcm1hbD48c3BhbiA9Cmxhbmc9M0RFTi1V Uz4mbmJzcDsmbmJzcDsmbmJzcDsgPQpzZXJ2ZV9jbGllbnRzKGxvZyk8bzpwPjwvbzpwPjwvc3Bh bj48L3A+PHAgY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gPQpsYW5nPTNERU4tVVM+Jm5ic3A7IEZp bGUgJnF1b3Q7L3Vzci9zaGFyZS92ZHNtL3Zkc20mcXVvdDssIGxpbmUgMTA0LCBpbiA9CnNlcnZl X2NsaWVudHM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+PHAgY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4g PQpsYW5nPTNERU4tVVM+Jm5ic3A7Jm5ic3A7Jm5ic3A7IGNpZiA9M0QgY2xpZW50SUYuZ2V0SW5z dGFuY2UoaXJzLCBsb2csID0Kc2NoZWR1bGVyKTxvOnA+PC9vOnA+PC9zcGFuPjwvcD48cCBjbGFz cz0zRE1zb05vcm1hbD48c3BhbiA9Cmxhbmc9M0RFTi1VUz4mbmJzcDsgRmlsZSAmcXVvdDsvdXNy L3NoYXJlL3Zkc20vY2xpZW50SUYucHkmcXVvdDssIGxpbmUgPQoyMDQsIGluIGdldEluc3RhbmNl PG86cD48L286cD48L3NwYW4+PC9wPjxwIGNsYXNzPTNETXNvTm9ybWFsPjxzcGFuID0KbGFuZz0z REVOLVVTPiZuYnNwOyZuYnNwOyZuYnNwOyBjbHMuX2luc3RhbmNlID0zRCBjbGllbnRJRihpcnMs IGxvZywgPQpzY2hlZHVsZXIpPG86cD48L286cD48L3NwYW4+PC9wPjxwIGNsYXNzPTNETXNvTm9y bWFsPjxzcGFuID0KbGFuZz0zREVOLVVTPiZuYnNwOyBGaWxlICZxdW90Oy91c3Ivc2hhcmUvdmRz bS9jbGllbnRJRi5weSZxdW90OywgbGluZSA9CjEwNiwgaW4gX19pbml0X188bzpwPjwvbzpwPjwv c3Bhbj48L3A+PHAgY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gPQpsYW5nPTNERU4tVVM+Jm5ic3A7 Jm5ic3A7Jm5ic3A7IHNlY3JldC5jbGVhcigpPG86cD48L286cD48L3NwYW4+PC9wPjxwID0KY2xh c3M9M0RNc29Ob3JtYWw+PHNwYW4gbGFuZz0zREVOLVVTPiZuYnNwOyBGaWxlID0KJnF1b3Q7L3Vz ci9saWIvcHl0aG9uMi43L3NpdGUtcGFja2FnZXMvdmRzbS92aXJ0L3NlY3JldC5weSZxdW90Oywg bGluZSA9CjkyLCBpbiBjbGVhcjxvOnA+PC9vOnA+PC9zcGFuPjwvcD48cCBjbGFzcz0zRE1zb05v cm1hbD48c3BhbiA9Cmxhbmc9M0RFTi1VUz4mbmJzcDsmbmJzcDsmbmJzcDsgY29uID0zRCA9Cmxp YnZpcnRjb25uZWN0aW9uLmdldCgpPG86cD48L286cD48L3NwYW4+PC9wPjxwIGNsYXNzPTNETXNv Tm9ybWFsPjxzcGFuID0KbGFuZz0zREVOLVVTPiZuYnNwOyBGaWxlID0KJnF1b3Q7L3Vzci9saWIv cHl0aG9uMi43L3NpdGUtcGFja2FnZXMvdmRzbS9saWJ2aXJ0Y29ubmVjdGlvbi5weSZxdW90Oywg PQpsaW5lIDE2MywgaW4gZ2V0PG86cD48L286cD48L3NwYW4+PC9wPjxwIGNsYXNzPTNETXNvTm9y bWFsPjxzcGFuID0KbGFuZz0zREVOLVVTPiZuYnNwOyZuYnNwOyZuYnNwOyBwYXNzd29yZCk8bzpw PjwvbzpwPjwvc3Bhbj48L3A+PHAgPQpjbGFzcz0zRE1zb05vcm1hbD48c3BhbiBsYW5nPTNERU4t VVM+Jm5ic3A7IEZpbGUgPQomcXVvdDsvdXNyL2xpYi9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy92 ZHNtL2xpYnZpcnRjb25uZWN0aW9uLnB5JnF1b3Q7LCA9CmxpbmUgOTksIGluIG9wZW5fY29ubmVj dGlvbjxvOnA+PC9vOnA+PC9zcGFuPjwvcD48cCA9CmNsYXNzPTNETXNvTm9ybWFsPjxzcGFuIGxh bmc9M0RFTi1VUz4mbmJzcDsmbmJzcDsmbmJzcDsgcmV0dXJuID0KdXRpbHMucmV0cnkobGlidmly dE9wZW4sIHRpbWVvdXQ9M0QxMCwgPQpzbGVlcD0zRDAuMik8bzpwPjwvbzpwPjwvc3Bhbj48L3A+ PHAgY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gPQpsYW5nPTNERU4tVVM+Jm5ic3A7IEZpbGUgPQom cXVvdDsvdXNyL2xpYi9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy92ZHNtL3V0aWxzLnB5JnF1b3Q7 LCBsaW5lIDU0NiwgaW4gPQpyZXRyeTxvOnA+PC9vOnA+PC9zcGFuPjwvcD48cCBjbGFzcz0zRE1z b05vcm1hbD48c3BhbiA9Cmxhbmc9M0RFTi1VUz4mbmJzcDsmbmJzcDsmbmJzcDsgcmV0dXJuIGZ1 bmMoKTxvOnA+PC9vOnA+PC9zcGFuPjwvcD48cCA9CmNsYXNzPTNETXNvTm9ybWFsPjxzcGFuIGxh bmc9M0RFTi1VUz4mbmJzcDsgRmlsZSA9CiZxdW90Oy91c3IvbGliNjQvcHl0aG9uMi43L3NpdGUt cGFja2FnZXMvbGlidmlydC5weSZxdW90OywgbGluZSAxMDUsIGluID0Kb3BlbkF1dGg8bzpwPjwv bzpwPjwvc3Bhbj48L3A+PHAgY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gPQpsYW5nPTNERU4tVVM+ Jm5ic3A7Jm5ic3A7Jm5ic3A7IGlmIHJldCBpcyBOb25lOnJhaXNlID0KbGlidmlydEVycm9yKCd2 aXJDb25uZWN0T3BlbkF1dGgoKSBmYWlsZWQnKTxvOnA+PC9vOnA+PC9zcGFuPjwvcD48cCA9CmNs YXNzPTNETXNvTm9ybWFsPjxzcGFuIGxhbmc9M0RFTi1VUz5saWJ2aXJ0RXJyb3I6IEZhaWxlZCB0 byBjb25uZWN0ID0Kc29ja2V0IHRvICcvdmFyL3J1bi9saWJ2aXJ0L2xpYnZpcnQtc29jayc6IFBl cm1pc3Npb24gPQpkZW5pZWQ8bzpwPjwvbzpwPjwvc3Bhbj48L3A+PHAgY2xhc3M9M0RNc29Ob3Jt YWw+PHNwYW4gPQpsYW5nPTNERU4tVVM+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPjxwIGNs YXNzPTNETXNvTm9ybWFsPjxzcGFuID0KbGFuZz0zREVOLVVTPkludmVzdGl0YXRlOjxvOnA+PC9v OnA+PC9zcGFuPjwvcD48cCA9CmNsYXNzPTNETXNvTm9ybWFsPjxzcGFuIGxhbmc9M0RFTi1VUz5B Y2NvcmRpbmcgdG8gdGhlIHRyYWNlYmFjayBhYm92ZSwgPQp0aGUgY29kZSBpbiBsaWJ2aXJ0LnB5 IGFzIGJlbG93LCBhbmQgJm5ic3A7b3MuZ2V0ZXVpZCgpIGdldCA9CiYjODIxNjswJiM4MjE3OyB3 aGljaCBzaG93cyB0aGUgY3VycmVudCB1c2VyIGlzID0Kcm9vdDs8bzpwPjwvbzpwPjwvc3Bhbj48 L3A+PHAgY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gPQpsYW5nPTNERU4tVVM+PG86cD4mbmJzcDs8 L286cD48L3NwYW4+PC9wPjxwIGNsYXNzPTNETXNvTm9ybWFsPjxzcGFuID0KbGFuZz0zREVOLVVT PmRlZiBvcGVuQXV0aCh1cmksIGF1dGgsIGZsYWdzPTNEMCk6PG86cD48L286cD48L3NwYW4+PC9w PjxwID0KY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gPQpsYW5nPTNERU4tVVM+Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICNwcmludCA9Cm9zLmdldGV1aWQo KTxvOnA+PC9vOnA+PC9zcGFuPjwvcD48cCBjbGFzcz0zRE1zb05vcm1hbD48c3BhbiA9Cmxhbmc9 M0RFTi1VUz4mbmJzcDsmbmJzcDsmbmJzcDsgcmV0ID0zRCA9CmxpYnZpcnRtb2QudmlyQ29ubmVj dE9wZW5BdXRoKHVyaSwgYXV0aCwgZmxhZ3MpPG86cD48L286cD48L3NwYW4+PC9wPjxwID0KY2xh c3M9M0RNc29Ob3JtYWw+PHNwYW4gbGFuZz0zREVOLVVTPiZuYnNwOyZuYnNwOyZuYnNwOyBpZiBy ZXQgaXMgPQpOb25lOnJhaXNlIGxpYnZpcnRFcnJvcigndmlyQ29ubmVjdE9wZW5BdXRoKCkgPQpm YWlsZWQnKTxvOnA+PC9vOnA+PC9zcGFuPjwvcD48cCBjbGFzcz0zRE1zb05vcm1hbCA9CnN0eWxl PTNEJ3RleHQtaW5kZW50OjIxLjBwdCc+PHNwYW4gbGFuZz0zREVOLVVTPnJldHVybiA9CnZpckNv bm5lY3QoX29iaj0zRHJldCk8bzpwPjwvbzpwPjwvc3Bhbj48L3A+PHAgY2xhc3M9M0RNc29Ob3Jt YWw+PHNwYW4gPQpsYW5nPTNERU4tVVM+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPjxwIGNs YXNzPTNETXNvTm9ybWFsPjxzcGFuID0KbGFuZz0zREVOLVVTPltyb290QHNlcnZlcjExNyBsaWJ2 aXJ0XSMgbGwgPQovdmFyL3J1bi9saWJ2aXJ0L2xpYnZpcnQtc29jazxvOnA+PC9vOnA+PC9zcGFu PjwvcD48cCA9CmNsYXNzPTNETXNvTm9ybWFsPjxzcGFuIGxhbmc9M0RFTi1VUz5zcnd4cnd4LS0t LiAxIHJvb3QgcWVtdSAwIEp1bCAxOSA9CjIzOjQzIC92YXIvcnVuL2xpYnZpcnQvbGlidmlydC1z b2NrPG86cD48L286cD48L3NwYW4+PC9wPjxwID0KY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gbGFu Zz0zREVOLVVTPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD48cCA9CmNsYXNzPTNETXNvTm9y bWFsPjxzcGFuIGxhbmc9M0RFTi1VUz5BY2NvcmRpbmcgdGhhdCwgcm9vdCBzaG91bGQgbm90IGdl dCA9CmFuIFBlcm1pc3Npb24gZGVuaWVkIGVycm9yID8gQnV0IHdoeT88bzpwPjwvbzpwPjwvc3Bh bj48L3A+PHAgPQpjbGFzcz0zRE1zb05vcm1hbD48c3BhbiBsYW5nPTNERU4tVVM+PG86cD4mbmJz cDs8L286cD48L3NwYW4+PC9wPjxwID0KY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gbGFuZz0zREVO LVVTPkFuZCBJIHNldGVuZm9yY2U9M0QwICwgYW5kIHN0aWxsID0Kc2hvdyBQZXJzc2lvbiBkZW5p ZWQgZXJyb3IuPG86cD48L286cD48L3NwYW4+PC9wPjxwID0KY2xhc3M9M0RNc29Ob3JtYWw+PHNw YW4gbGFuZz0zREVOLVVTPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD48cCA9CmNsYXNzPTNE TXNvTm9ybWFsPjxzcGFuIGxhbmc9M0RFTi1VUz5XaGF0JiM4MjE3O3MgdGhlIHJlYXNvbj8gQW5k IGhvdyB0byA9CnNvbHZlIGl0PzxvOnA+PC9vOnA+PC9zcGFuPjwvcD48cCBjbGFzcz0zRE1zb05v cm1hbD48c3BhbiA9Cmxhbmc9M0RFTi1VUz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+PHAg Y2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gPQpsYW5nPTNERU4tVVM+VGhhbmsgeW91LjxvOnA+PC9v OnA+PC9zcGFuPjwvcD48L2Rpdj48L2JvZHk+PC9odG1sPgotLS0tLS09X05leHRQYXJ0XzAwMF8w MDFFXzAxRDFFNTA5LjE5NzgwRjIwLS0KCg== --===============7414911905233992293==-- From sbonazzo at redhat.com Mon Jul 25 15:50:19 2016 Content-Type: multipart/mixed; boundary="===============1133264783728990383==" MIME-Version: 1.0 From: Sandro Bonazzola To: devel at ovirt.org Subject: Re: [ovirt-devel] Debug vdsm 4.0.0 report error: libvirt: XML-RPC error : Failed to connect socket to '/var/run/libvirt/libvirt-sock': Permission denied Date: Mon, 25 Jul 2016 21:50:17 +0200 Message-ID: In-Reply-To: 001d01d1e4c6$0b528530$21f78f90$@cncloudsec.com --===============1133264783728990383== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Adding some people from virt team. Il 23/Lug/2016 11:44, "lifuqiong" ha scritto: > > I debugged vdsm with PyCharm, And I logged on my Centos 7.2 with root, and get an error as follows: > > > > Problem: > > > > Traceback (most recent call last): > > File "/usr/share/vdsm/vdsm", line 149, in run > > serve_clients(log) > > File "/usr/share/vdsm/vdsm", line 104, in serve_clients > > cif =3D clientIF.getInstance(irs, log, scheduler) > > File "/usr/share/vdsm/clientIF.py", line 204, in getInstance > > cls._instance =3D clientIF(irs, log, scheduler) > > File "/usr/share/vdsm/clientIF.py", line 106, in __init__ > > secret.clear() > > File "/usr/lib/python2.7/site-packages/vdsm/virt/secret.py", line 92, in clear > > con =3D libvirtconnection.get() > > File "/usr/lib/python2.7/site-packages/vdsm/libvirtconnection.py", line 163, in get > > password) > > File "/usr/lib/python2.7/site-packages/vdsm/libvirtconnection.py", line 99, in open_connection > > return utils.retry(libvirtOpen, timeout=3D10, sleep=3D0.2) > > File "/usr/lib/python2.7/site-packages/vdsm/utils.py", line 546, in retry > > return func() > > File "/usr/lib64/python2.7/site-packages/libvirt.py", line 105, in openAuth > > if ret is None:raise libvirtError('virConnectOpenAuth() failed') > > libvirtError: Failed to connect socket to '/var/run/libvirt/libvirt-sock': Permission denied > > > > Investitate: > > According to the traceback above, the code in libvirt.py as below, and os.geteuid() get =E2=80=980=E2=80=99 which shows the current user is root; > > > > def openAuth(uri, auth, flags=3D0): > > #print os.geteuid() > > ret =3D libvirtmod.virConnectOpenAuth(uri, auth, flags) > > if ret is None:raise libvirtError('virConnectOpenAuth() failed') > > return virConnect(_obj=3Dret) > > > > [root(a)server117 libvirt]# ll /var/run/libvirt/libvirt-sock > > srwxrwx---. 1 root qemu 0 Jul 19 23:43 /var/run/libvirt/libvirt-sock > > > > According that, root should not get an Permission denied error ? But why? > > > > And I setenforce=3D0 , and still show Perssion denied error. > > > > What=E2=80=99s the reason? And how to solve it? > > > > Thank you. > > > _______________________________________________ > Devel mailing list > Devel(a)ovirt.org > http://lists.ovirt.org/mailman/listinfo/devel --===============1133264783728990383== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PHAgZGlyPSJsdHIiPkFkZGluZyBzb21lIHBlb3BsZSBmcm9tIHZpcnQgdGVhbS48L3A+CjxwIGRp cj0ibHRyIj5JbCAyMy9MdWcvMjAxNiAxMTo0NCwgJnF1b3Q7bGlmdXFpb25nJnF1b3Q7ICZsdDs8 YSBocmVmPSJtYWlsdG86bGlmdXFpb25nQGNuY2xvdWRzZWMuY29tIj5saWZ1cWlvbmdAY25jbG91 ZHNlYy5jb208L2E+Jmd0OyBoYSBzY3JpdHRvOjxicj4KJmd0Ozxicj4KJmd0OyBJIGRlYnVnZ2Vk IHZkc20gd2l0aCBQeUNoYXJtLCBBbmQgSSBsb2dnZWQgb24gbXkgQ2VudG9zIDcuMiB3aXRoIHJv b3QsIMKgYW5kIGdldCBhbiBlcnJvciBhcyBmb2xsb3dzOjxicj4KJmd0Ozxicj4KJmd0OyDCoDxi cj4KJmd0Ozxicj4KJmd0OyBQcm9ibGVtOjxicj4KJmd0Ozxicj4KJmd0OyDCoDxicj4KJmd0Ozxi cj4KJmd0OyBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6PGJyPgomZ3Q7PGJyPgom Z3Q7IMKgIEZpbGUgJnF1b3Q7L3Vzci9zaGFyZS92ZHNtL3Zkc20mcXVvdDssIGxpbmUgMTQ5LCBp biBydW48YnI+CiZndDs8YnI+CiZndDsgwqDCoMKgIHNlcnZlX2NsaWVudHMobG9nKTxicj4KJmd0 Ozxicj4KJmd0OyDCoCBGaWxlICZxdW90Oy91c3Ivc2hhcmUvdmRzbS92ZHNtJnF1b3Q7LCBsaW5l IDEwNCwgaW4gc2VydmVfY2xpZW50czxicj4KJmd0Ozxicj4KJmd0OyDCoMKgwqAgY2lmID0gY2xp ZW50SUYuZ2V0SW5zdGFuY2UoaXJzLCBsb2csIHNjaGVkdWxlcik8YnI+CiZndDs8YnI+CiZndDsg wqAgRmlsZSAmcXVvdDsvdXNyL3NoYXJlL3Zkc20vY2xpZW50SUYucHkmcXVvdDssIGxpbmUgMjA0 LCBpbiBnZXRJbnN0YW5jZTxicj4KJmd0Ozxicj4KJmd0OyDCoMKgwqAgY2xzLl9pbnN0YW5jZSA9 IGNsaWVudElGKGlycywgbG9nLCBzY2hlZHVsZXIpPGJyPgomZ3Q7PGJyPgomZ3Q7IMKgIEZpbGUg JnF1b3Q7L3Vzci9zaGFyZS92ZHNtL2NsaWVudElGLnB5JnF1b3Q7LCBsaW5lIDEwNiwgaW4gX19p bml0X188YnI+CiZndDs8YnI+CiZndDsgwqDCoMKgIHNlY3JldC5jbGVhcigpPGJyPgomZ3Q7PGJy PgomZ3Q7IMKgIEZpbGUgJnF1b3Q7L3Vzci9saWIvcHl0aG9uMi43L3NpdGUtcGFja2FnZXMvdmRz bS92aXJ0L3NlY3JldC5weSZxdW90OywgbGluZSA5MiwgaW4gY2xlYXI8YnI+CiZndDs8YnI+CiZn dDsgwqDCoMKgIGNvbiA9IGxpYnZpcnRjb25uZWN0aW9uLmdldCgpPGJyPgomZ3Q7PGJyPgomZ3Q7 IMKgIEZpbGUgJnF1b3Q7L3Vzci9saWIvcHl0aG9uMi43L3NpdGUtcGFja2FnZXMvdmRzbS9saWJ2 aXJ0Y29ubmVjdGlvbi5weSZxdW90OywgbGluZSAxNjMsIGluIGdldDxicj4KJmd0Ozxicj4KJmd0 OyDCoMKgwqAgcGFzc3dvcmQpPGJyPgomZ3Q7PGJyPgomZ3Q7IMKgIEZpbGUgJnF1b3Q7L3Vzci9s aWIvcHl0aG9uMi43L3NpdGUtcGFja2FnZXMvdmRzbS9saWJ2aXJ0Y29ubmVjdGlvbi5weSZxdW90 OywgbGluZSA5OSwgaW4gb3Blbl9jb25uZWN0aW9uPGJyPgomZ3Q7PGJyPgomZ3Q7IMKgwqDCoCBy ZXR1cm4gdXRpbHMucmV0cnkobGlidmlydE9wZW4sIHRpbWVvdXQ9MTAsIHNsZWVwPTAuMik8YnI+ CiZndDs8YnI+CiZndDsgwqAgRmlsZSAmcXVvdDsvdXNyL2xpYi9weXRob24yLjcvc2l0ZS1wYWNr YWdlcy92ZHNtL3V0aWxzLnB5JnF1b3Q7LCBsaW5lIDU0NiwgaW4gcmV0cnk8YnI+CiZndDs8YnI+ CiZndDsgwqDCoMKgIHJldHVybiBmdW5jKCk8YnI+CiZndDs8YnI+CiZndDsgwqAgRmlsZSAmcXVv dDsvdXNyL2xpYjY0L3B5dGhvbjIuNy9zaXRlLXBhY2thZ2VzL2xpYnZpcnQucHkmcXVvdDssIGxp bmUgMTA1LCBpbiBvcGVuQXV0aDxicj4KJmd0Ozxicj4KJmd0OyDCoMKgwqAgaWYgcmV0IGlzIE5v bmU6cmFpc2UgbGlidmlydEVycm9yKCYjMzk7dmlyQ29ubmVjdE9wZW5BdXRoKCkgZmFpbGVkJiMz OTspPGJyPgomZ3Q7PGJyPgomZ3Q7IGxpYnZpcnRFcnJvcjogRmFpbGVkIHRvIGNvbm5lY3Qgc29j a2V0IHRvICYjMzk7L3Zhci9ydW4vbGlidmlydC9saWJ2aXJ0LXNvY2smIzM5OzogUGVybWlzc2lv biBkZW5pZWQ8YnI+CiZndDs8YnI+CiZndDsgwqA8YnI+CiZndDs8YnI+CiZndDsgSW52ZXN0aXRh dGU6PGJyPgomZ3Q7PGJyPgomZ3Q7IEFjY29yZGluZyB0byB0aGUgdHJhY2ViYWNrIGFib3ZlLCB0 aGUgY29kZSBpbiBsaWJ2aXJ0LnB5IGFzIGJlbG93LCBhbmQgwqBvcy5nZXRldWlkKCkgZ2V0IOKA mDDigJkgd2hpY2ggc2hvd3MgdGhlIGN1cnJlbnQgdXNlciBpcyByb290Ozxicj4KJmd0Ozxicj4K Jmd0OyDCoDxicj4KJmd0Ozxicj4KJmd0OyBkZWYgb3BlbkF1dGgodXJpLCBhdXRoLCBmbGFncz0w KTo8YnI+CiZndDs8YnI+CiZndDsgwqDCoMKgwqDCoMKgwqDCoCAjcHJpbnQgb3MuZ2V0ZXVpZCgp PGJyPgomZ3Q7PGJyPgomZ3Q7IMKgwqDCoCByZXQgPSBsaWJ2aXJ0bW9kLnZpckNvbm5lY3RPcGVu QXV0aCh1cmksIGF1dGgsIGZsYWdzKTxicj4KJmd0Ozxicj4KJmd0OyDCoMKgwqAgaWYgcmV0IGlz IE5vbmU6cmFpc2UgbGlidmlydEVycm9yKCYjMzk7dmlyQ29ubmVjdE9wZW5BdXRoKCkgZmFpbGVk JiMzOTspPGJyPgomZ3Q7PGJyPgomZ3Q7IHJldHVybiB2aXJDb25uZWN0KF9vYmo9cmV0KTxicj4K Jmd0Ozxicj4KJmd0OyDCoDxicj4KJmd0Ozxicj4KJmd0OyBbcm9vdEBzZXJ2ZXIxMTcgbGlidmly dF0jIGxsIC92YXIvcnVuL2xpYnZpcnQvbGlidmlydC1zb2NrPGJyPgomZ3Q7PGJyPgomZ3Q7IHNy d3hyd3gtLS0uIDEgcm9vdCBxZW11IDAgSnVsIDE5IDIzOjQzIC92YXIvcnVuL2xpYnZpcnQvbGli dmlydC1zb2NrPGJyPgomZ3Q7PGJyPgomZ3Q7IMKgPGJyPgomZ3Q7PGJyPgomZ3Q7IEFjY29yZGlu ZyB0aGF0LCByb290IHNob3VsZCBub3QgZ2V0IGFuIFBlcm1pc3Npb24gZGVuaWVkIGVycm9yID8g QnV0IHdoeT88YnI+CiZndDs8YnI+CiZndDsgwqA8YnI+CiZndDs8YnI+CiZndDsgQW5kIEkgc2V0 ZW5mb3JjZT0wICwgYW5kIHN0aWxsIHNob3cgUGVyc3Npb24gZGVuaWVkIGVycm9yLjxicj4KJmd0 Ozxicj4KJmd0OyDCoDxicj4KJmd0Ozxicj4KJmd0OyBXaGF04oCZcyB0aGUgcmVhc29uPyBBbmQg aG93IHRvIHNvbHZlIGl0Pzxicj4KJmd0Ozxicj4KJmd0OyDCoDxicj4KJmd0Ozxicj4KJmd0OyBU aGFuayB5b3UuPGJyPgomZ3Q7PGJyPgomZ3Q7PGJyPgomZ3Q7IF9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fPGJyPgomZ3Q7IERldmVsIG1haWxpbmcgbGlzdDxi cj4KJmd0OyA8YSBocmVmPSJtYWlsdG86RGV2ZWxAb3ZpcnQub3JnIj5EZXZlbEBvdmlydC5vcmc8 L2E+PGJyPgomZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9saXN0cy5vdmlydC5vcmcvbWFpbG1hbi9saXN0 aW5mby9kZXZlbCI+aHR0cDovL2xpc3RzLm92aXJ0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RldmVs PC9hPjxicj48L3A+Cg== --===============1133264783728990383==-- From mskrivan at redhat.com Mon Jul 25 16:59:39 2016 Content-Type: multipart/mixed; boundary="===============4058146778088831846==" MIME-Version: 1.0 From: Michal Skrivanek To: devel at ovirt.org Subject: Re: [ovirt-devel] Debug vdsm 4.0.0 report error: libvirt: XML-RPC error : Failed to connect socket to '/var/run/libvirt/libvirt-sock': Permission denied Date: Mon, 25 Jul 2016 16:59:35 -0400 Message-ID: <0496C515-5866-4704-8A77-B126E727F2EC@redhat.com> In-Reply-To: CAPQRNTkMrsvY7rgp++5Hep+1n_4UN4dBEhfuBbsWksHV_FZ4XQ@mail.gmail.com --===============4058146778088831846== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable --Apple-Mail-D1347541-AC09-4E82-BD2E-44566BA8A20C Content-Type: text/plain; charset=3Dutf-8 Content-Transfer-Encoding: base64 DQoNCj4gT24gMjUgSnVsIDIwMTYsIGF0IDIxOjUwLCBTYW5kcm8gQm9uYXp6b2xhIDxzYm9uYXp6 b0ByZWRoYXQuY29tPiB3cm90ZToNCj4gDQo+IEFkZGluZyBzb21lIHBlb3BsZSBmcm9tIHZpcnQg dGVhbS4NCj4gDQo+IElsIDIzL0x1Zy8yMDE2IDExOjQ0LCAibGlmdXFpb25nIiA8bGlmdXFpb25n QGNuY2xvdWRzZWMuY29tPiBoYSBzY3JpdHRvOg0KPiA+DQo+ID4gSSBkZWJ1Z2dlZCB2ZHNtIHdp dGggUHlDaGFybSwgQW5kIEkgbG9nZ2VkIG9uIG15IENlbnRvcyA3LjIgd2l0aCByb290LCAgYW5k IGdldCBhbiBlcnJvciBhcyBmb2xsb3dzOg0KPiA+DQo+ID4gIA0KPiA+DQo+ID4gUHJvYmxlbToN Cj4gPg0KPiA+ICANCj4gPg0KPiA+IFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToN Cj4gPg0KPiA+ICAgRmlsZSAiL3Vzci9zaGFyZS92ZHNtL3Zkc20iLCBsaW5lIDE0OSwgaW4gcnVu DQo+ID4NCj4gPiAgICAgc2VydmVfY2xpZW50cyhsb2cpDQo+ID4NCj4gPiAgIEZpbGUgIi91c3Iv c2hhcmUvdmRzbS92ZHNtIiwgbGluZSAxMDQsIGluIHNlcnZlX2NsaWVudHMNCj4gPg0KPiA+ICAg ICBjaWYgPSBjbGllbnRJRi5nZXRJbnN0YW5jZShpcnMsIGxvZywgc2NoZWR1bGVyKQ0KPiA+DQo+ ID4gICBGaWxlICIvdXNyL3NoYXJlL3Zkc20vY2xpZW50SUYucHkiLCBsaW5lIDIwNCwgaW4gZ2V0 SW5zdGFuY2UNCj4gPg0KPiA+ICAgICBjbHMuX2luc3RhbmNlID0gY2xpZW50SUYoaXJzLCBsb2cs IHNjaGVkdWxlcikNCj4gPg0KPiA+ICAgRmlsZSAiL3Vzci9zaGFyZS92ZHNtL2NsaWVudElGLnB5 IiwgbGluZSAxMDYsIGluIF9faW5pdF9fDQo+ID4NCj4gPiAgICAgc2VjcmV0LmNsZWFyKCkNCj4g Pg0KPiA+ICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMi43L3NpdGUtcGFja2FnZXMvdmRzbS92aXJ0 L3NlY3JldC5weSIsIGxpbmUgOTIsIGluIGNsZWFyDQo+ID4NCj4gPiAgICAgY29uID0gbGlidmly dGNvbm5lY3Rpb24uZ2V0KCkNCj4gPg0KPiA+ICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMi43L3Np dGUtcGFja2FnZXMvdmRzbS9saWJ2aXJ0Y29ubmVjdGlvbi5weSIsIGxpbmUgMTYzLCBpbiBnZXQN Cj4gPg0KPiA+ICAgICBwYXNzd29yZCkNCj4gPg0KPiA+ICAgRmlsZSAiL3Vzci9saWIvcHl0aG9u Mi43L3NpdGUtcGFja2FnZXMvdmRzbS9saWJ2aXJ0Y29ubmVjdGlvbi5weSIsIGxpbmUgOTksIGlu IG9wZW5fY29ubmVjdGlvbg0KPiA+DQo+ID4gICAgIHJldHVybiB1dGlscy5yZXRyeShsaWJ2aXJ0 T3BlbiwgdGltZW91dD0xMCwgc2xlZXA9MC4yKQ0KPiA+DQo+ID4gICBGaWxlICIvdXNyL2xpYi9w eXRob24yLjcvc2l0ZS1wYWNrYWdlcy92ZHNtL3V0aWxzLnB5IiwgbGluZSA1NDYsIGluIHJldHJ5 DQo+ID4NCj4gPiAgICAgcmV0dXJuIGZ1bmMoKQ0KPiA+DQo+ID4gICBGaWxlICIvdXNyL2xpYjY0 L3B5dGhvbjIuNy9zaXRlLXBhY2thZ2VzL2xpYnZpcnQucHkiLCBsaW5lIDEwNSwgaW4gb3BlbkF1 dGgNCj4gPg0KPiA+ICAgICBpZiByZXQgaXMgTm9uZTpyYWlzZSBsaWJ2aXJ0RXJyb3IoJ3ZpckNv bm5lY3RPcGVuQXV0aCgpIGZhaWxlZCcpDQo+ID4NCj4gPiBsaWJ2aXJ0RXJyb3I6IEZhaWxlZCB0 byBjb25uZWN0IHNvY2tldCB0byAnL3Zhci9ydW4vbGlidmlydC9saWJ2aXJ0LXNvY2snOiBQZXJt aXNzaW9uIGRlbmllZA0KPiA+DQo+ID4gIA0KPiA+DQo+ID4gSW52ZXN0aXRhdGU6DQo+ID4NCj4g PiBBY2NvcmRpbmcgdG8gdGhlIHRyYWNlYmFjayBhYm92ZSwgdGhlIGNvZGUgaW4gbGlidmlydC5w eSBhcyBiZWxvdywgYW5kICBvcy5nZXRldWlkKCkgZ2V0IOKAmDDigJkgd2hpY2ggc2hvd3MgdGhl IGN1cnJlbnQgdXNlciBpcyByb290Ow0KPiANCg0KdmRzbSBpcyBub3Qgc3VwcG9zZWQgdG8gYmUg cnVuIHVuZGVyIHJvb3QgdXNlci4gRm9yIGRlYnVnZ2luZyB5b3Ugc2hvdWxkIGZvbGxvdyB0aGUg ZGV2ZWwgc2V0dXAgd2lraSBhbmQgbm90IGNoYW5nZSBhIHJlZ3VsYXIgaG9zdC4gDQpEZXBlbmRz IHdoYXQgeW91IG1vZGlmaWVkLCBpdCdzIGltcG9zc2libGUgdG8gc2F5IGZyb20gd2hhdCB5b3Ug ZGVzY3JpYmVkLi4uLmJ1dCBhIGdlbmVyYWwgYWR2aWNlIGlzIHlvdSBzaW1wbHkgZG9uJ3QgZG8g dGhhdDopDQo+ID4NCj4gPiAgDQo+ID4NCj4gPiBkZWYgb3BlbkF1dGgodXJpLCBhdXRoLCBmbGFn cz0wKToNCj4gPg0KPiA+ICAgICAgICAgICNwcmludCBvcy5nZXRldWlkKCkNCj4gPg0KPiA+ICAg ICByZXQgPSBsaWJ2aXJ0bW9kLnZpckNvbm5lY3RPcGVuQXV0aCh1cmksIGF1dGgsIGZsYWdzKQ0K PiA+DQo+ID4gICAgIGlmIHJldCBpcyBOb25lOnJhaXNlIGxpYnZpcnRFcnJvcigndmlyQ29ubmVj dE9wZW5BdXRoKCkgZmFpbGVkJykNCj4gPg0KPiA+IHJldHVybiB2aXJDb25uZWN0KF9vYmo9cmV0 KQ0KPiA+DQo+ID4gIA0KPiA+DQo+ID4gW3Jvb3RAc2VydmVyMTE3IGxpYnZpcnRdIyBsbCAvdmFy L3J1bi9saWJ2aXJ0L2xpYnZpcnQtc29jaw0KPiA+DQo+ID4gc3J3eHJ3eC0tLS4gMSByb290IHFl bXUgMCBKdWwgMTkgMjM6NDMgL3Zhci9ydW4vbGlidmlydC9saWJ2aXJ0LXNvY2sNCj4gPg0KPiA+ ICANCj4gPg0KPiA+IEFjY29yZGluZyB0aGF0LCByb290IHNob3VsZCBub3QgZ2V0IGFuIFBlcm1p c3Npb24gZGVuaWVkIGVycm9yID8gQnV0IHdoeT8NCj4gPg0KPiA+ICANCj4gPg0KPiA+IEFuZCBJ IHNldGVuZm9yY2U9MCAsIGFuZCBzdGlsbCBzaG93IFBlcnNzaW9uIGRlbmllZCBlcnJvci4NCj4g Pg0KPiA+ICANCj4gPg0KPiA+IFdoYXTigJlzIHRoZSByZWFzb24/IEFuZCBob3cgdG8gc29sdmUg aXQ/DQo+ID4NCj4gPiAgDQo+ID4NCj4gPiBUaGFuayB5b3UuDQo+ID4NCj4gPg0KPiA+IF9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQo+ID4gRGV2ZWwgbWFp bGluZyBsaXN0DQo+ID4gRGV2ZWxAb3ZpcnQub3JnDQo+ID4gaHR0cDovL2xpc3RzLm92aXJ0Lm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2RldmVsDQo=3D --Apple-Mail-D1347541-AC09-4E82-BD2E-44566BA8A20C Content-Type: text/html; charset=3Dutf-8 Content-Transfer-Encoding: base64 PGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0 L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPjwvaGVhZD48Ym9keSBkaXI9ImF1dG8iPjxkaXY+PC9kaXY+ PGRpdj48YnI+PC9kaXY+PGRpdj48YnI+T24gMjUgSnVsIDIwMTYsIGF0IDIxOjUwLCBTYW5kcm8g Qm9uYXp6b2xhICZsdDs8YSBocmVmPSJtYWlsdG86c2JvbmF6em9AcmVkaGF0LmNvbSI+c2JvbmF6 em9AcmVkaGF0LmNvbTwvYT4mZ3Q7IHdyb3RlOjxicj48YnI+PC9kaXY+PGJsb2NrcXVvdGUgdHlw ZT0iY2l0ZSI+PGRpdj48cCBkaXI9Imx0ciI+QWRkaW5nIHNvbWUgcGVvcGxlIGZyb20gdmlydCB0 ZWFtLjwvcD4NCjxwIGRpcj0ibHRyIj5JbCAyMy9MdWcvMjAxNiAxMTo0NCwgImxpZnVxaW9uZyIg Jmx0OzxhIGhyZWY9Im1haWx0bzpsaWZ1cWlvbmdAY25jbG91ZHNlYy5jb20iPmxpZnVxaW9uZ0Bj bmNsb3Vkc2VjLmNvbTwvYT4mZ3Q7IGhhIHNjcml0dG86PGJyPg0KJmd0Ozxicj4NCiZndDsgSSBk ZWJ1Z2dlZCB2ZHNtIHdpdGggUHlDaGFybSwgQW5kIEkgbG9nZ2VkIG9uIG15IENlbnRvcyA3LjIg d2l0aCByb290LCAmbmJzcDthbmQgZ2V0IGFuIGVycm9yIGFzIGZvbGxvd3M6PGJyPg0KJmd0Ozxi cj4NCiZndDsgJm5ic3A7PGJyPg0KJmd0Ozxicj4NCiZndDsgUHJvYmxlbTo8YnI+DQomZ3Q7PGJy Pg0KJmd0OyAmbmJzcDs8YnI+DQomZ3Q7PGJyPg0KJmd0OyBUcmFjZWJhY2sgKG1vc3QgcmVjZW50 IGNhbGwgbGFzdCk6PGJyPg0KJmd0Ozxicj4NCiZndDsgJm5ic3A7IEZpbGUgIi91c3Ivc2hhcmUv dmRzbS92ZHNtIiwgbGluZSAxNDksIGluIHJ1bjxicj4NCiZndDs8YnI+DQomZ3Q7ICZuYnNwOyZu YnNwOyZuYnNwOyBzZXJ2ZV9jbGllbnRzKGxvZyk8YnI+DQomZ3Q7PGJyPg0KJmd0OyAmbmJzcDsg RmlsZSAiL3Vzci9zaGFyZS92ZHNtL3Zkc20iLCBsaW5lIDEwNCwgaW4gc2VydmVfY2xpZW50czxi cj4NCiZndDs8YnI+DQomZ3Q7ICZuYnNwOyZuYnNwOyZuYnNwOyBjaWYgPSBjbGllbnRJRi5nZXRJ bnN0YW5jZShpcnMsIGxvZywgc2NoZWR1bGVyKTxicj4NCiZndDs8YnI+DQomZ3Q7ICZuYnNwOyBG aWxlICIvdXNyL3NoYXJlL3Zkc20vY2xpZW50SUYucHkiLCBsaW5lIDIwNCwgaW4gZ2V0SW5zdGFu Y2U8YnI+DQomZ3Q7PGJyPg0KJmd0OyAmbmJzcDsmbmJzcDsmbmJzcDsgY2xzLl9pbnN0YW5jZSA9 IGNsaWVudElGKGlycywgbG9nLCBzY2hlZHVsZXIpPGJyPg0KJmd0Ozxicj4NCiZndDsgJm5ic3A7 IEZpbGUgIi91c3Ivc2hhcmUvdmRzbS9jbGllbnRJRi5weSIsIGxpbmUgMTA2LCBpbiBfX2luaXRf Xzxicj4NCiZndDs8YnI+DQomZ3Q7ICZuYnNwOyZuYnNwOyZuYnNwOyBzZWNyZXQuY2xlYXIoKTxi cj4NCiZndDs8YnI+DQomZ3Q7ICZuYnNwOyBGaWxlICIvdXNyL2xpYi9weXRob24yLjcvc2l0ZS1w YWNrYWdlcy92ZHNtL3ZpcnQvc2VjcmV0LnB5IiwgbGluZSA5MiwgaW4gY2xlYXI8YnI+DQomZ3Q7 PGJyPg0KJmd0OyAmbmJzcDsmbmJzcDsmbmJzcDsgY29uID0gbGlidmlydGNvbm5lY3Rpb24uZ2V0 KCk8YnI+DQomZ3Q7PGJyPg0KJmd0OyAmbmJzcDsgRmlsZSAiL3Vzci9saWIvcHl0aG9uMi43L3Np dGUtcGFja2FnZXMvdmRzbS9saWJ2aXJ0Y29ubmVjdGlvbi5weSIsIGxpbmUgMTYzLCBpbiBnZXQ8 YnI+DQomZ3Q7PGJyPg0KJmd0OyAmbmJzcDsmbmJzcDsmbmJzcDsgcGFzc3dvcmQpPGJyPg0KJmd0 Ozxicj4NCiZndDsgJm5ic3A7IEZpbGUgIi91c3IvbGliL3B5dGhvbjIuNy9zaXRlLXBhY2thZ2Vz L3Zkc20vbGlidmlydGNvbm5lY3Rpb24ucHkiLCBsaW5lIDk5LCBpbiBvcGVuX2Nvbm5lY3Rpb248 YnI+DQomZ3Q7PGJyPg0KJmd0OyAmbmJzcDsmbmJzcDsmbmJzcDsgcmV0dXJuIHV0aWxzLnJldHJ5 KGxpYnZpcnRPcGVuLCB0aW1lb3V0PTEwLCBzbGVlcD0wLjIpPGJyPg0KJmd0Ozxicj4NCiZndDsg Jm5ic3A7IEZpbGUgIi91c3IvbGliL3B5dGhvbjIuNy9zaXRlLXBhY2thZ2VzL3Zkc20vdXRpbHMu cHkiLCBsaW5lIDU0NiwgaW4gcmV0cnk8YnI+DQomZ3Q7PGJyPg0KJmd0OyAmbmJzcDsmbmJzcDsm bmJzcDsgcmV0dXJuIGZ1bmMoKTxicj4NCiZndDs8YnI+DQomZ3Q7ICZuYnNwOyBGaWxlICIvdXNy L2xpYjY0L3B5dGhvbjIuNy9zaXRlLXBhY2thZ2VzL2xpYnZpcnQucHkiLCBsaW5lIDEwNSwgaW4g b3BlbkF1dGg8YnI+DQomZ3Q7PGJyPg0KJmd0OyAmbmJzcDsmbmJzcDsmbmJzcDsgaWYgcmV0IGlz IE5vbmU6cmFpc2UgbGlidmlydEVycm9yKCd2aXJDb25uZWN0T3BlbkF1dGgoKSBmYWlsZWQnKTxi cj4NCiZndDs8YnI+DQomZ3Q7IGxpYnZpcnRFcnJvcjogRmFpbGVkIHRvIGNvbm5lY3Qgc29ja2V0 IHRvICcvdmFyL3J1bi9saWJ2aXJ0L2xpYnZpcnQtc29jayc6IFBlcm1pc3Npb24gZGVuaWVkPGJy Pg0KJmd0Ozxicj4NCiZndDsgJm5ic3A7PGJyPg0KJmd0Ozxicj4NCiZndDsgSW52ZXN0aXRhdGU6 PGJyPg0KJmd0Ozxicj4NCiZndDsgQWNjb3JkaW5nIHRvIHRoZSB0cmFjZWJhY2sgYWJvdmUsIHRo ZSBjb2RlIGluIGxpYnZpcnQucHkgYXMgYmVsb3csIGFuZCAmbmJzcDtvcy5nZXRldWlkKCkgZ2V0 IOKAmDDigJkgd2hpY2ggc2hvd3MgdGhlIGN1cnJlbnQgdXNlciBpcyByb290Ozxicj48L3A+PC9k aXY+PC9ibG9ja3F1b3RlPjxkaXY+PGJyPjwvZGl2PnZkc20gaXMgbm90IHN1cHBvc2VkIHRvIGJl IHJ1biB1bmRlciByb290IHVzZXIuIEZvciBkZWJ1Z2dpbmcgeW91IHNob3VsZCBmb2xsb3cgdGhl IGRldmVsIHNldHVwIHdpa2kgYW5kIG5vdCBjaGFuZ2UgYSByZWd1bGFyIGhvc3QuJm5ic3A7PGRp dj5EZXBlbmRzIHdoYXQgeW91IG1vZGlmaWVkLCBpdCdzIGltcG9zc2libGUgdG8gc2F5IGZyb20g d2hhdCB5b3UgZGVzY3JpYmVkLi4uLmJ1dCBhIGdlbmVyYWwgYWR2aWNlIGlzIHlvdSBzaW1wbHkg ZG9uJ3QgZG8gdGhhdDopPGJyPjxibG9ja3F1b3RlIHR5cGU9ImNpdGUiPjxkaXY+PHAgZGlyPSJs dHIiPg0KJmd0Ozxicj4NCiZndDsgJm5ic3A7PGJyPg0KJmd0Ozxicj4NCiZndDsgZGVmIG9wZW5B dXRoKHVyaSwgYXV0aCwgZmxhZ3M9MCk6PGJyPg0KJmd0Ozxicj4NCiZndDsgJm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICNwcmludCBvcy5nZXRldWlkKCk8 YnI+DQomZ3Q7PGJyPg0KJmd0OyAmbmJzcDsmbmJzcDsmbmJzcDsgcmV0ID0gbGlidmlydG1vZC52 aXJDb25uZWN0T3BlbkF1dGgodXJpLCBhdXRoLCBmbGFncyk8YnI+DQomZ3Q7PGJyPg0KJmd0OyAm bmJzcDsmbmJzcDsmbmJzcDsgaWYgcmV0IGlzIE5vbmU6cmFpc2UgbGlidmlydEVycm9yKCd2aXJD b25uZWN0T3BlbkF1dGgoKSBmYWlsZWQnKTxicj4NCiZndDs8YnI+DQomZ3Q7IHJldHVybiB2aXJD b25uZWN0KF9vYmo9cmV0KTxicj4NCiZndDs8YnI+DQomZ3Q7ICZuYnNwOzxicj4NCiZndDs8YnI+ DQomZ3Q7IFtyb290QHNlcnZlcjExNyBsaWJ2aXJ0XSMgbGwgL3Zhci9ydW4vbGlidmlydC9saWJ2 aXJ0LXNvY2s8YnI+DQomZ3Q7PGJyPg0KJmd0OyBzcnd4cnd4LS0tLiAxIHJvb3QgcWVtdSAwIEp1 bCAxOSAyMzo0MyAvdmFyL3J1bi9saWJ2aXJ0L2xpYnZpcnQtc29jazxicj4NCiZndDs8YnI+DQom Z3Q7ICZuYnNwOzxicj4NCiZndDs8YnI+DQomZ3Q7IEFjY29yZGluZyB0aGF0LCByb290IHNob3Vs ZCBub3QgZ2V0IGFuIFBlcm1pc3Npb24gZGVuaWVkIGVycm9yID8gQnV0IHdoeT88YnI+DQomZ3Q7 PGJyPg0KJmd0OyAmbmJzcDs8YnI+DQomZ3Q7PGJyPg0KJmd0OyBBbmQgSSBzZXRlbmZvcmNlPTAg LCBhbmQgc3RpbGwgc2hvdyBQZXJzc2lvbiBkZW5pZWQgZXJyb3IuPGJyPg0KJmd0Ozxicj4NCiZn dDsgJm5ic3A7PGJyPg0KJmd0Ozxicj4NCiZndDsgV2hhdOKAmXMgdGhlIHJlYXNvbj8gQW5kIGhv dyB0byBzb2x2ZSBpdD88YnI+DQomZ3Q7PGJyPg0KJmd0OyAmbmJzcDs8YnI+DQomZ3Q7PGJyPg0K Jmd0OyBUaGFuayB5b3UuPGJyPg0KJmd0Ozxicj4NCiZndDs8YnI+DQomZ3Q7IF9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fPGJyPg0KJmd0OyBEZXZlbCBtYWls aW5nIGxpc3Q8YnI+DQomZ3Q7IDxhIGhyZWY9Im1haWx0bzpEZXZlbEBvdmlydC5vcmciPkRldmVs QG92aXJ0Lm9yZzwvYT48YnI+DQomZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9saXN0cy5vdmlydC5vcmcv bWFpbG1hbi9saXN0aW5mby9kZXZlbCI+aHR0cDovL2xpc3RzLm92aXJ0Lm9yZy9tYWlsbWFuL2xp c3RpbmZvL2RldmVsPC9hPjxicj48L3A+DQo8L2Rpdj48L2Jsb2NrcXVvdGU+PC9kaXY+PC9ib2R5 PjwvaHRtbD4=3D --Apple-Mail-D1347541-AC09-4E82-BD2E-44566BA8A20C-- --===============4058146778088831846== Content-Type: multipart/alternative MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.bin" Ci0tQXBwbGUtTWFpbC1EMTM0NzU0MS1BQzA5LTRFODItQkQyRS00NDU2NkJBOEEyMEMKQ29udGVu dC1UeXBlOiB0ZXh0L3BsYWluOwoJY2hhcnNldD11dGYtOApDb250ZW50LVRyYW5zZmVyLUVuY29k aW5nOiBiYXNlNjQKCkRRb05DajRnVDI0Z01qVWdTblZzSURJd01UWXNJR0YwSURJeE9qVXdMQ0JU WVc1a2NtOGdRbTl1WVhwNmIyeGhJRHh6WW05dVlYcDYKYjBCeVpXUm9ZWFF1WTI5dFBpQjNjbTkw WlRvTkNqNGdEUW8rSUVGa1pHbHVaeUJ6YjIxbElIQmxiM0JzWlNCbWNtOXRJSFpwY25RZwpkR1Zo YlM0TkNqNGdEUW8rSUVsc0lESXpMMHgxWnk4eU1ERTJJREV4T2pRMExDQWliR2xtZFhGcGIyNW5J aUE4YkdsbWRYRnBiMjVuClFHTnVZMnh2ZFdSelpXTXVZMjl0UGlCb1lTQnpZM0pwZEhSdk9nMEtQ aUErRFFvK0lENGdTU0JrWldKMVoyZGxaQ0IyWkhOdElIZHAKZEdnZ1VIbERhR0Z5YlN3Z1FXNWtJ RWtnYkc5bloyVmtJRzl1SUcxNUlFTmxiblJ2Y3lBM0xqSWdkMmwwYUNCeWIyOTBMQ0FnWVc1awpJ R2RsZENCaGJpQmxjbkp2Y2lCaGN5Qm1iMnhzYjNkek9nMEtQaUErRFFvK0lENGdJQTBLUGlBK0RR bytJRDRnVUhKdllteGxiVG9OCkNqNGdQZzBLUGlBK0lDQU5DajRnUGcwS1BpQStJRlJ5WVdObFlt RmpheUFvYlc5emRDQnlaV05sYm5RZ1kyRnNiQ0JzWVhOMEtUb04KQ2o0Z1BnMEtQaUErSUNBZ1Jt bHNaU0FpTDNWemNpOXphR0Z5WlM5MlpITnRMM1prYzIwaUxDQnNhVzVsSURFME9Td2dhVzRnY25W dQpEUW8rSUQ0TkNqNGdQaUFnSUNBZ2MyVnlkbVZmWTJ4cFpXNTBjeWhzYjJjcERRbytJRDROQ2o0 Z1BpQWdJRVpwYkdVZ0lpOTFjM0l2CmMyaGhjbVV2ZG1SemJTOTJaSE50SWl3Z2JHbHVaU0F4TURR c0lHbHVJSE5sY25abFgyTnNhV1Z1ZEhNTkNqNGdQZzBLUGlBK0lDQWcKSUNCamFXWWdQU0JqYkds bGJuUkpSaTVuWlhSSmJuTjBZVzVqWlNocGNuTXNJR3h2Wnl3Z2MyTm9aV1IxYkdWeUtRMEtQaUEr RFFvKwpJRDRnSUNCR2FXeGxJQ0l2ZFhOeUwzTm9ZWEpsTDNaa2MyMHZZMnhwWlc1MFNVWXVjSGtp TENCc2FXNWxJREl3TkN3Z2FXNGdaMlYwClNXNXpkR0Z1WTJVTkNqNGdQZzBLUGlBK0lDQWdJQ0Jq YkhNdVgybHVjM1JoYm1ObElEMGdZMnhwWlc1MFNVWW9hWEp6TENCc2IyY3MKSUhOamFHVmtkV3hs Y2lrTkNqNGdQZzBLUGlBK0lDQWdSbWxzWlNBaUwzVnpjaTl6YUdGeVpTOTJaSE50TDJOc2FXVnVk RWxHTG5CNQpJaXdnYkdsdVpTQXhNRFlzSUdsdUlGOWZhVzVwZEY5ZkRRbytJRDROQ2o0Z1BpQWdJ Q0FnYzJWamNtVjBMbU5zWldGeUtDa05DajRnClBnMEtQaUErSUNBZ1JtbHNaU0FpTDNWemNpOXNh V0l2Y0hsMGFHOXVNaTQzTDNOcGRHVXRjR0ZqYTJGblpYTXZkbVJ6YlM5MmFYSjAKTDNObFkzSmxk QzV3ZVNJc0lHeHBibVVnT1RJc0lHbHVJR05zWldGeURRbytJRDROQ2o0Z1BpQWdJQ0FnWTI5dUlE MGdiR2xpZG1seQpkR052Ym01bFkzUnBiMjR1WjJWMEtDa05DajRnUGcwS1BpQStJQ0FnUm1sc1pT QWlMM1Z6Y2k5c2FXSXZjSGwwYUc5dU1pNDNMM05wCmRHVXRjR0ZqYTJGblpYTXZkbVJ6YlM5c2FX SjJhWEowWTI5dWJtVmpkR2x2Ymk1d2VTSXNJR3hwYm1VZ01UWXpMQ0JwYmlCblpYUU4KQ2o0Z1Bn MEtQaUErSUNBZ0lDQndZWE56ZDI5eVpDa05DajRnUGcwS1BpQStJQ0FnUm1sc1pTQWlMM1Z6Y2k5 c2FXSXZjSGwwYUc5dQpNaTQzTDNOcGRHVXRjR0ZqYTJGblpYTXZkbVJ6YlM5c2FXSjJhWEowWTI5 dWJtVmpkR2x2Ymk1d2VTSXNJR3hwYm1VZ09Ua3NJR2x1CklHOXdaVzVmWTI5dWJtVmpkR2x2Ymcw S1BpQStEUW8rSUQ0Z0lDQWdJSEpsZEhWeWJpQjFkR2xzY3k1eVpYUnllU2hzYVdKMmFYSjAKVDNC bGJpd2dkR2x0Wlc5MWREMHhNQ3dnYzJ4bFpYQTlNQzR5S1EwS1BpQStEUW8rSUQ0Z0lDQkdhV3hs SUNJdmRYTnlMMnhwWWk5dwplWFJvYjI0eUxqY3ZjMmwwWlMxd1lXTnJZV2RsY3k5MlpITnRMM1Yw YVd4ekxuQjVJaXdnYkdsdVpTQTFORFlzSUdsdUlISmxkSEo1CkRRbytJRDROQ2o0Z1BpQWdJQ0Fn Y21WMGRYSnVJR1oxYm1Nb0tRMEtQaUErRFFvK0lENGdJQ0JHYVd4bElDSXZkWE55TDJ4cFlqWTAK TDNCNWRHaHZiakl1Tnk5emFYUmxMWEJoWTJ0aFoyVnpMMnhwWW5acGNuUXVjSGtpTENCc2FXNWxJ REV3TlN3Z2FXNGdiM0JsYmtGMQpkR2dOQ2o0Z1BnMEtQaUErSUNBZ0lDQnBaaUJ5WlhRZ2FYTWdU bTl1WlRweVlXbHpaU0JzYVdKMmFYSjBSWEp5YjNJb0ozWnBja052CmJtNWxZM1JQY0dWdVFYVjBh Q2dwSUdaaGFXeGxaQ2NwRFFvK0lENE5DajRnUGlCc2FXSjJhWEowUlhKeWIzSTZJRVpoYVd4bFpD QjAKYnlCamIyNXVaV04wSUhOdlkydGxkQ0IwYnlBbkwzWmhjaTl5ZFc0dmJHbGlkbWx5ZEM5c2FX SjJhWEowTFhOdlkyc25PaUJRWlhKdAphWE56YVc5dUlHUmxibWxsWkEwS1BpQStEUW8rSUQ0Z0lB MEtQaUErRFFvK0lENGdTVzUyWlhOMGFYUmhkR1U2RFFvK0lENE5DajRnClBpQkJZMk52Y21ScGJt Y2dkRzhnZEdobElIUnlZV05sWW1GamF5QmhZbTkyWlN3Z2RHaGxJR052WkdVZ2FXNGdiR2xpZG1s eWRDNXcKZVNCaGN5QmlaV3h2ZHl3Z1lXNWtJQ0J2Y3k1blpYUmxkV2xrS0NrZ1oyVjBJT0tBbURE aWdKa2dkMmhwWTJnZ2MyaHZkM01nZEdobApJR04xY25KbGJuUWdkWE5sY2lCcGN5QnliMjkwT3cw S1BpQU5DZzBLZG1SemJTQnBjeUJ1YjNRZ2MzVndjRzl6WldRZ2RHOGdZbVVnCmNuVnVJSFZ1WkdW eUlISnZiM1FnZFhObGNpNGdSbTl5SUdSbFluVm5aMmx1WnlCNWIzVWdjMmh2ZFd4a0lHWnZiR3h2 ZHlCMGFHVWcKWkdWMlpXd2djMlYwZFhBZ2QybHJhU0JoYm1RZ2JtOTBJR05vWVc1blpTQmhJSEps WjNWc1lYSWdhRzl6ZEM0Z0RRcEVaWEJsYm1SegpJSGRvWVhRZ2VXOTFJRzF2WkdsbWFXVmtMQ0Jw ZENkeklHbHRjRzl6YzJsaWJHVWdkRzhnYzJGNUlHWnliMjBnZDJoaGRDQjViM1VnClpHVnpZM0pw WW1Wa0xpNHVMbUoxZENCaElHZGxibVZ5WVd3Z1lXUjJhV05sSUdseklIbHZkU0J6YVcxd2JIa2da Rzl1SjNRZ1pHOGcKZEdoaGREb3BEUW8rSUQ0TkNqNGdQaUFnRFFvK0lENE5DajRnUGlCa1pXWWdi M0JsYmtGMWRHZ29kWEpwTENCaGRYUm9MQ0JtYkdGbgpjejB3S1RvTkNqNGdQZzBLUGlBK0lDQWdJ Q0FnSUNBZ0lDTndjbWx1ZENCdmN5NW5aWFJsZFdsa0tDa05DajRnUGcwS1BpQStJQ0FnCklDQnla WFFnUFNCc2FXSjJhWEowYlc5a0xuWnBja052Ym01bFkzUlBjR1Z1UVhWMGFDaDFjbWtzSUdGMWRH Z3NJR1pzWVdkektRMEsKUGlBK0RRbytJRDRnSUNBZ0lHbG1JSEpsZENCcGN5Qk9iMjVsT25KaGFY TmxJR3hwWW5acGNuUkZjbkp2Y2lnbmRtbHlRMjl1Ym1WagpkRTl3Wlc1QmRYUm9LQ2tnWm1GcGJH VmtKeWtOQ2o0Z1BnMEtQaUErSUhKbGRIVnliaUIyYVhKRGIyNXVaV04wS0Y5dlltbzljbVYwCktR MEtQaUErRFFvK0lENGdJQTBLUGlBK0RRbytJRDRnVzNKdmIzUkFjMlZ5ZG1WeU1URTNJR3hwWW5a cGNuUmRJeUJzYkNBdmRtRnkKTDNKMWJpOXNhV0oyYVhKMEwyeHBZblpwY25RdGMyOWphdzBLUGlB K0RRbytJRDRnYzNKM2VISjNlQzB0TFM0Z01TQnliMjkwSUhGbApiWFVnTUNCS2RXd2dNVGtnTWpN Nk5ETWdMM1poY2k5eWRXNHZiR2xpZG1seWRDOXNhV0oyYVhKMExYTnZZMnNOQ2o0Z1BnMEtQaUEr CklDQU5DajRnUGcwS1BpQStJRUZqWTI5eVpHbHVaeUIwYUdGMExDQnliMjkwSUhOb2IzVnNaQ0J1 YjNRZ1oyVjBJR0Z1SUZCbGNtMXAKYzNOcGIyNGdaR1Z1YVdWa0lHVnljbTl5SUQ4Z1FuVjBJSGRv ZVQ4TkNqNGdQZzBLUGlBK0lDQU5DajRnUGcwS1BpQStJRUZ1WkNCSgpJSE5sZEdWdVptOXlZMlU5 TUNBc0lHRnVaQ0J6ZEdsc2JDQnphRzkzSUZCbGNuTnphVzl1SUdSbGJtbGxaQ0JsY25KdmNpNE5D ajRnClBnMEtQaUErSUNBTkNqNGdQZzBLUGlBK0lGZG9ZWFRpZ0pseklIUm9aU0J5WldGemIyNC9J RUZ1WkNCb2IzY2dkRzhnYzI5c2RtVWcKYVhRL0RRbytJRDROQ2o0Z1BpQWdEUW8rSUQ0TkNqNGdQ aUJVYUdGdWF5QjViM1V1RFFvK0lENE5DajRnUGcwS1BpQStJRjlmWDE5ZgpYMTlmWDE5ZlgxOWZY MTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZkRRbytJRDRnUkdWMlpX d2diV0ZwCmJHbHVaeUJzYVhOMERRbytJRDRnUkdWMlpXeEFiM1pwY25RdWIzSm5EUW8rSUQ0Z2FI UjBjRG92TDJ4cGMzUnpMbTkyYVhKMExtOXkKWnk5dFlXbHNiV0Z1TDJ4cGMzUnBibVp2TDJSbGRt VnNEUW89CgotLUFwcGxlLU1haWwtRDEzNDc1NDEtQUMwOS00RTgyLUJEMkUtNDQ1NjZCQThBMjBD CkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOwoJY2hhcnNldD11dGYtOApDb250ZW50LVRyYW5zZmVy LUVuY29kaW5nOiBiYXNlNjQKClBHaDBiV3crUEdobFlXUStQRzFsZEdFZ2FIUjBjQzFsY1hWcGRq MGlZMjl1ZEdWdWRDMTBlWEJsSWlCamIyNTBaVzUwUFNKMFpYaDAKTDJoMGJXdzdJR05vWVhKelpY UTlkWFJtTFRnaVBqd3ZhR1ZoWkQ0OFltOWtlU0JrYVhJOUltRjFkRzhpUGp4a2FYWStQQzlrYVhZ KwpQR1JwZGo0OFluSStQQzlrYVhZK1BHUnBkajQ4WW5JK1QyNGdNalVnU25Wc0lESXdNVFlzSUdG MElESXhPalV3TENCVFlXNWtjbThnClFtOXVZWHA2YjJ4aElDWnNkRHM4WVNCb2NtVm1QU0p0WVds c2RHODZjMkp2Ym1GNmVtOUFjbVZrYUdGMExtTnZiU0krYzJKdmJtRjYKZW05QWNtVmthR0YwTG1O dmJUd3ZZVDRtWjNRN0lIZHliM1JsT2p4aWNqNDhZbkkrUEM5a2FYWStQR0pzYjJOcmNYVnZkR1Vn ZEhsdwpaVDBpWTJsMFpTSStQR1JwZGo0OGNDQmthWEk5SW14MGNpSStRV1JrYVc1bklITnZiV1Vn Y0dWdmNHeGxJR1p5YjIwZ2RtbHlkQ0IwClpXRnRMand2Y0Q0TkNqeHdJR1JwY2owaWJIUnlJajVK YkNBeU15OU1kV2N2TWpBeE5pQXhNVG8wTkN3Z0lteHBablZ4YVc5dVp5SWcKSm14ME96eGhJR2h5 WldZOUltMWhhV3gwYnpwc2FXWjFjV2x2Ym1kQVkyNWpiRzkxWkhObFl5NWpiMjBpUG14cFpuVnhh Vzl1WjBCagpibU5zYjNWa2MyVmpMbU52YlR3dllUNG1aM1E3SUdoaElITmpjbWwwZEc4NlBHSnlQ ZzBLSm1kME96eGljajROQ2labmREc2dTU0JrClpXSjFaMmRsWkNCMlpITnRJSGRwZEdnZ1VIbERh R0Z5YlN3Z1FXNWtJRWtnYkc5bloyVmtJRzl1SUcxNUlFTmxiblJ2Y3lBM0xqSWcKZDJsMGFDQnli MjkwTENBbWJtSnpjRHRoYm1RZ1oyVjBJR0Z1SUdWeWNtOXlJR0Z6SUdadmJHeHZkM002UEdKeVBn MEtKbWQwT3p4aQpjajROQ2labmREc2dKbTVpYzNBN1BHSnlQZzBLSm1kME96eGljajROQ2labmRE c2dVSEp2WW14bGJUbzhZbkkrRFFvbVozUTdQR0p5ClBnMEtKbWQwT3lBbWJtSnpjRHM4WW5JK0RR b21aM1E3UEdKeVBnMEtKbWQwT3lCVWNtRmpaV0poWTJzZ0tHMXZjM1FnY21WalpXNTAKSUdOaGJH d2diR0Z6ZENrNlBHSnlQZzBLSm1kME96eGljajROQ2labmREc2dKbTVpYzNBN0lFWnBiR1VnSWk5 MWMzSXZjMmhoY21VdgpkbVJ6YlM5MlpITnRJaXdnYkdsdVpTQXhORGtzSUdsdUlISjFianhpY2o0 TkNpWm5kRHM4WW5JK0RRb21aM1E3SUNadVluTndPeVp1ClluTndPeVp1WW5Od095QnpaWEoyWlY5 amJHbGxiblJ6S0d4dlp5azhZbkkrRFFvbVozUTdQR0p5UGcwS0ptZDBPeUFtYm1KemNEc2cKUm1s c1pTQWlMM1Z6Y2k5emFHRnlaUzkyWkhOdEwzWmtjMjBpTENCc2FXNWxJREV3TkN3Z2FXNGdjMlZ5 ZG1WZlkyeHBaVzUwY3p4aQpjajROQ2labmREczhZbkkrRFFvbVozUTdJQ1p1WW5Od095WnVZbk53 T3ladVluTndPeUJqYVdZZ1BTQmpiR2xsYm5SSlJpNW5aWFJKCmJuTjBZVzVqWlNocGNuTXNJR3h2 Wnl3Z2MyTm9aV1IxYkdWeUtUeGljajROQ2labmREczhZbkkrRFFvbVozUTdJQ1p1WW5Od095QkcK YVd4bElDSXZkWE55TDNOb1lYSmxMM1prYzIwdlkyeHBaVzUwU1VZdWNIa2lMQ0JzYVc1bElESXdO Q3dnYVc0Z1oyVjBTVzV6ZEdGdQpZMlU4WW5JK0RRb21aM1E3UEdKeVBnMEtKbWQwT3lBbWJtSnpj RHNtYm1KemNEc21ibUp6Y0RzZ1kyeHpMbDlwYm5OMFlXNWpaU0E5CklHTnNhV1Z1ZEVsR0tHbHlj eXdnYkc5bkxDQnpZMmhsWkhWc1pYSXBQR0p5UGcwS0ptZDBPenhpY2o0TkNpWm5kRHNnSm01aWMz QTcKSUVacGJHVWdJaTkxYzNJdmMyaGhjbVV2ZG1SemJTOWpiR2xsYm5SSlJpNXdlU0lzSUd4cGJt VWdNVEEyTENCcGJpQmZYMmx1YVhSZgpYenhpY2o0TkNpWm5kRHM4WW5JK0RRb21aM1E3SUNadVlu TndPeVp1WW5Od095WnVZbk53T3lCelpXTnlaWFF1WTJ4bFlYSW9LVHhpCmNqNE5DaVpuZERzOFlu SStEUW9tWjNRN0lDWnVZbk53T3lCR2FXeGxJQ0l2ZFhOeUwyeHBZaTl3ZVhSb2IyNHlMamN2YzJs MFpTMXcKWVdOcllXZGxjeTkyWkhOdEwzWnBjblF2YzJWamNtVjBMbkI1SWl3Z2JHbHVaU0E1TWl3 Z2FXNGdZMnhsWVhJOFluSStEUW9tWjNRNwpQR0p5UGcwS0ptZDBPeUFtYm1KemNEc21ibUp6Y0Rz bWJtSnpjRHNnWTI5dUlEMGdiR2xpZG1seWRHTnZibTVsWTNScGIyNHVaMlYwCktDazhZbkkrRFFv bVozUTdQR0p5UGcwS0ptZDBPeUFtYm1KemNEc2dSbWxzWlNBaUwzVnpjaTlzYVdJdmNIbDBhRzl1 TWk0M0wzTnAKZEdVdGNHRmphMkZuWlhNdmRtUnpiUzlzYVdKMmFYSjBZMjl1Ym1WamRHbHZiaTV3 ZVNJc0lHeHBibVVnTVRZekxDQnBiaUJuWlhROApZbkkrRFFvbVozUTdQR0p5UGcwS0ptZDBPeUFt Ym1KemNEc21ibUp6Y0RzbWJtSnpjRHNnY0dGemMzZHZjbVFwUEdKeVBnMEtKbWQwCk96eGljajRO Q2labmREc2dKbTVpYzNBN0lFWnBiR1VnSWk5MWMzSXZiR2xpTDNCNWRHaHZiakl1Tnk5emFYUmxM WEJoWTJ0aFoyVnoKTDNaa2MyMHZiR2xpZG1seWRHTnZibTVsWTNScGIyNHVjSGtpTENCc2FXNWxJ RGs1TENCcGJpQnZjR1Z1WDJOdmJtNWxZM1JwYjI0OApZbkkrRFFvbVozUTdQR0p5UGcwS0ptZDBP eUFtYm1KemNEc21ibUp6Y0RzbWJtSnpjRHNnY21WMGRYSnVJSFYwYVd4ekxuSmxkSEo1CktHeHBZ blpwY25SUGNHVnVMQ0IwYVcxbGIzVjBQVEV3TENCemJHVmxjRDB3TGpJcFBHSnlQZzBLSm1kME96 eGljajROQ2labmREc2cKSm01aWMzQTdJRVpwYkdVZ0lpOTFjM0l2YkdsaUwzQjVkR2h2YmpJdU55 OXphWFJsTFhCaFkydGhaMlZ6TDNaa2MyMHZkWFJwYkhNdQpjSGtpTENCc2FXNWxJRFUwTml3Z2FX NGdjbVYwY25rOFluSStEUW9tWjNRN1BHSnlQZzBLSm1kME95QW1ibUp6Y0RzbWJtSnpjRHNtCmJt SnpjRHNnY21WMGRYSnVJR1oxYm1Nb0tUeGljajROQ2labmREczhZbkkrRFFvbVozUTdJQ1p1WW5O d095QkdhV3hsSUNJdmRYTnkKTDJ4cFlqWTBMM0I1ZEdodmJqSXVOeTl6YVhSbExYQmhZMnRoWjJW ekwyeHBZblpwY25RdWNIa2lMQ0JzYVc1bElERXdOU3dnYVc0ZwpiM0JsYmtGMWRHZzhZbkkrRFFv bVozUTdQR0p5UGcwS0ptZDBPeUFtYm1KemNEc21ibUp6Y0RzbWJtSnpjRHNnYVdZZ2NtVjBJR2x6 CklFNXZibVU2Y21GcGMyVWdiR2xpZG1seWRFVnljbTl5S0NkMmFYSkRiMjV1WldOMFQzQmxia0Yx ZEdnb0tTQm1ZV2xzWldRbktUeGkKY2o0TkNpWm5kRHM4WW5JK0RRb21aM1E3SUd4cFluWnBjblJG Y25KdmNqb2dSbUZwYkdWa0lIUnZJR052Ym01bFkzUWdjMjlqYTJWMApJSFJ2SUNjdmRtRnlMM0ox Ymk5c2FXSjJhWEowTDJ4cFluWnBjblF0YzI5amF5YzZJRkJsY20xcGMzTnBiMjRnWkdWdWFXVmtQ R0p5ClBnMEtKbWQwT3p4aWNqNE5DaVpuZERzZ0ptNWljM0E3UEdKeVBnMEtKbWQwT3p4aWNqNE5D aVpuZERzZ1NXNTJaWE4wYVhSaGRHVTYKUEdKeVBnMEtKbWQwT3p4aWNqNE5DaVpuZERzZ1FXTmpi M0prYVc1bklIUnZJSFJvWlNCMGNtRmpaV0poWTJzZ1lXSnZkbVVzSUhSbwpaU0JqYjJSbElHbHVJ R3hwWW5acGNuUXVjSGtnWVhNZ1ltVnNiM2NzSUdGdVpDQW1ibUp6Y0R0dmN5NW5aWFJsZFdsa0tD a2daMlYwCklPS0FtRERpZ0prZ2QyaHBZMmdnYzJodmQzTWdkR2hsSUdOMWNuSmxiblFnZFhObGNp QnBjeUJ5YjI5ME96eGljajQ4TDNBK1BDOWsKYVhZK1BDOWliRzlqYTNGMWIzUmxQanhrYVhZK1BH SnlQand2WkdsMlBuWmtjMjBnYVhNZ2JtOTBJSE4xY0hCdmMyVmtJSFJ2SUdKbApJSEoxYmlCMWJt UmxjaUJ5YjI5MElIVnpaWEl1SUVadmNpQmtaV0oxWjJkcGJtY2dlVzkxSUhOb2IzVnNaQ0JtYjJ4 c2IzY2dkR2hsCklHUmxkbVZzSUhObGRIVndJSGRwYTJrZ1lXNWtJRzV2ZENCamFHRnVaMlVnWVNC eVpXZDFiR0Z5SUdodmMzUXVKbTVpYzNBN1BHUnAKZGo1RVpYQmxibVJ6SUhkb1lYUWdlVzkxSUcx dlpHbG1hV1ZrTENCcGRDZHpJR2x0Y0c5emMybGliR1VnZEc4Z2MyRjVJR1p5YjIwZwpkMmhoZENC NWIzVWdaR1Z6WTNKcFltVmtMaTR1TG1KMWRDQmhJR2RsYm1WeVlXd2dZV1IyYVdObElHbHpJSGx2 ZFNCemFXMXdiSGtnClpHOXVKM1FnWkc4Z2RHaGhkRG9wUEdKeVBqeGliRzlqYTNGMWIzUmxJSFI1 Y0dVOUltTnBkR1VpUGp4a2FYWStQSEFnWkdseVBTSnMKZEhJaVBnMEtKbWQwT3p4aWNqNE5DaVpu ZERzZ0ptNWljM0E3UEdKeVBnMEtKbWQwT3p4aWNqNE5DaVpuZERzZ1pHVm1JRzl3Wlc1QgpkWFJv S0hWeWFTd2dZWFYwYUN3Z1pteGhaM005TUNrNlBHSnlQZzBLSm1kME96eGljajROQ2labmREc2dK bTVpYzNBN0ptNWljM0E3CkptNWljM0E3Sm01aWMzQTdKbTVpYzNBN0ptNWljM0E3Sm01aWMzQTdK bTVpYzNBN0lDTndjbWx1ZENCdmN5NW5aWFJsZFdsa0tDazgKWW5JK0RRb21aM1E3UEdKeVBnMEtK bWQwT3lBbWJtSnpjRHNtYm1KemNEc21ibUp6Y0RzZ2NtVjBJRDBnYkdsaWRtbHlkRzF2WkM1Mgph WEpEYjI1dVpXTjBUM0JsYmtGMWRHZ29kWEpwTENCaGRYUm9MQ0JtYkdGbmN5azhZbkkrRFFvbVoz UTdQR0p5UGcwS0ptZDBPeUFtCmJtSnpjRHNtYm1KemNEc21ibUp6Y0RzZ2FXWWdjbVYwSUdseklF NXZibVU2Y21GcGMyVWdiR2xpZG1seWRFVnljbTl5S0NkMmFYSkQKYjI1dVpXTjBUM0JsYmtGMWRH Z29LU0JtWVdsc1pXUW5LVHhpY2o0TkNpWm5kRHM4WW5JK0RRb21aM1E3SUhKbGRIVnliaUIyYVhK RApiMjV1WldOMEtGOXZZbW85Y21WMEtUeGljajROQ2labmREczhZbkkrRFFvbVozUTdJQ1p1WW5O d096eGljajROQ2labmREczhZbkkrCkRRb21aM1E3SUZ0eWIyOTBRSE5sY25abGNqRXhOeUJzYVdK MmFYSjBYU01nYkd3Z0wzWmhjaTl5ZFc0dmJHbGlkbWx5ZEM5c2FXSjIKYVhKMExYTnZZMnM4WW5J K0RRb21aM1E3UEdKeVBnMEtKbWQwT3lCemNuZDRjbmQ0TFMwdExpQXhJSEp2YjNRZ2NXVnRkU0F3 SUVwMQpiQ0F4T1NBeU16bzBNeUF2ZG1GeUwzSjFiaTlzYVdKMmFYSjBMMnhwWW5acGNuUXRjMjlq YXp4aWNqNE5DaVpuZERzOFluSStEUW9tClozUTdJQ1p1WW5Od096eGljajROQ2labmREczhZbkkr RFFvbVozUTdJRUZqWTI5eVpHbHVaeUIwYUdGMExDQnliMjkwSUhOb2IzVnMKWkNCdWIzUWdaMlYw SUdGdUlGQmxjbTFwYzNOcGIyNGdaR1Z1YVdWa0lHVnljbTl5SUQ4Z1FuVjBJSGRvZVQ4OFluSStE UW9tWjNRNwpQR0p5UGcwS0ptZDBPeUFtYm1KemNEczhZbkkrRFFvbVozUTdQR0p5UGcwS0ptZDBP eUJCYm1RZ1NTQnpaWFJsYm1admNtTmxQVEFnCkxDQmhibVFnYzNScGJHd2djMmh2ZHlCUVpYSnpj Mmx2YmlCa1pXNXBaV1FnWlhKeWIzSXVQR0p5UGcwS0ptZDBPenhpY2o0TkNpWm4KZERzZ0ptNWlj M0E3UEdKeVBnMEtKbWQwT3p4aWNqNE5DaVpuZERzZ1YyaGhkT0tBbVhNZ2RHaGxJSEpsWVhOdmJq OGdRVzVrSUdodgpkeUIwYnlCemIyeDJaU0JwZEQ4OFluSStEUW9tWjNRN1BHSnlQZzBLSm1kME95 QW1ibUp6Y0RzOFluSStEUW9tWjNRN1BHSnlQZzBLCkptZDBPeUJVYUdGdWF5QjViM1V1UEdKeVBn MEtKbWQwT3p4aWNqNE5DaVpuZERzOFluSStEUW9tWjNRN0lGOWZYMTlmWDE5ZlgxOWYKWDE5Zlgx OWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmUEdKeVBnMEtKbWQwT3lC RVpYWmxiQ0J0WVdscwphVzVuSUd4cGMzUThZbkkrRFFvbVozUTdJRHhoSUdoeVpXWTlJbTFoYVd4 MGJ6cEVaWFpsYkVCdmRtbHlkQzV2Y21jaVBrUmxkbVZzClFHOTJhWEowTG05eVp6d3ZZVDQ4WW5J K0RRb21aM1E3SUR4aElHaHlaV1k5SW1oMGRIQTZMeTlzYVhOMGN5NXZkbWx5ZEM1dmNtY3YKYldG cGJHMWhiaTlzYVhOMGFXNW1ieTlrWlhabGJDSSthSFIwY0RvdkwyeHBjM1J6TG05MmFYSjBMbTl5 Wnk5dFlXbHNiV0Z1TDJ4cApjM1JwYm1adkwyUmxkbVZzUEM5aFBqeGljajQ4TDNBK0RRbzhMMlJw ZGo0OEwySnNiMk5yY1hWdmRHVStQQzlrYVhZK1BDOWliMlI1ClBqd3ZhSFJ0YkQ0PQoKLS1BcHBs ZS1NYWlsLUQxMzQ3NTQxLUFDMDktNEU4Mi1CRDJFLTQ0NTY2QkE4QTIwQy0tCg== --===============4058146778088831846==-- From mskrivan at redhat.com Tue Jul 26 02:06:35 2016 Content-Type: multipart/mixed; boundary="===============4473166451229507931==" MIME-Version: 1.0 From: Michal Skrivanek To: devel at ovirt.org Subject: Re: [ovirt-devel] Debug vdsm 4.0.0 report error: libvirt: XML-RPC error : Failed to connect socket to '/var/run/libvirt/libvirt-sock': Permission denied Date: Tue, 26 Jul 2016 08:06:32 +0200 Message-ID: <1052EB09-CF85-45F6-8B93-CBF48805B0F9@redhat.com> In-Reply-To: 00c801d1e703$4d541810$e7fc4830$@cncloudsec.com --===============4473166451229507931== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable --Apple-Mail=3D_A58705BB-94F0-41B3-912E-C81871820D95 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=3Dutf-8 > On 26 Jul 2016, at 08:02, lifuqiong wrote: >=3D20 > =3D20 > I do make a mistake because I just print os.getuid() show the user =3D root; but os.geteuid() show the current user is still vdsm; > =3D20 > Anyway , I still don=3DE2=3D80=3D99t know how to debug vdsm, I cann=3DE2= =3D80=3D99t =3D log in to centos with user VDSM, because I don=3DE2=3D80=3D99t know the pas= swd =3D of user vdsm and if I changed the password, the service vdsmd will =3D cann=3DE2=3D80=3D99t start. the vdsm account is intentionally disabled for interactive login > =3D20 > You told me =3DE2=3D80=3D9Cshould follow the devel setup wiki=3DE2=3D80= =3D9D , =3D what=3DE2=3D80=3D99s the true link of vdsm devel setup wiki ? I can=3DE2= =3D80=3D99t =3D get useful information in ovirt.org or google. http://www.ovirt.org/develop/developer-guide/vdsm/developers/ =3D has tips = =3D how to build from source and what packages are needed Anything specific you=3DE2=3D80=3D99re troubleshooting? Thanks, michal > =3D20 > =3D20 > Thank you > =3D20 > =3DE5=3D8F=3D91=3DE4=3DBB=3DB6=3DE4=3DBA=3DBA: Michal Skrivanek =3D [mailto:mskrivan(a)redhat.com]=3D20 > =3DE5=3D8F=3D91=3DE9=3D80=3D81=3DE6=3D97=3DB6=3DE9=3D97=3DB4: 2016=3DE5= =3DB9=3DB47=3DE6=3D9C=3D8826=3DE6=3D97=3DA5=3D 5:00 > =3DE6=3D94=3DB6=3DE4=3DBB=3DB6=3DE4=3DBA=3DBA: lifuqiong > =3DE6=3D8A=3D84=3DE9=3D80=3D81: users; devel > =3DE4=3DB8=3DBB=3DE9=3DA2=3D98: Re: [ovirt-devel] Debug vdsm 4.0.0 report= error: =3D libvirt: XML-RPC error : Failed to connect socket to =3D '/var/run/libvirt/libvirt-sock': Permission denied > =3D20 > =3D20 >=3D20 > On 25 Jul 2016, at 21:50, Sandro Bonazzola > wrote: >=3D20 > Adding some people from virt team. >=3D20 > Il 23/Lug/2016 11:44, "lifuqiong" > ha scritto: > > > > I debugged vdsm with PyCharm, And I logged on my Centos 7.2 with =3D root, and get an error as follows: > > > > =3D20 > > > > Problem: > > > > =3D20 > > > > Traceback (most recent call last): > > > > File "/usr/share/vdsm/vdsm", line 149, in run > > > > serve_clients(log) > > > > File "/usr/share/vdsm/vdsm", line 104, in serve_clients > > > > cif =3D3D clientIF.getInstance(irs, log, scheduler) > > > > File "/usr/share/vdsm/clientIF.py", line 204, in getInstance > > > > cls._instance =3D3D clientIF(irs, log, scheduler) > > > > File "/usr/share/vdsm/clientIF.py", line 106, in __init__ > > > > secret.clear() > > > > File "/usr/lib/python2.7/site-packages/vdsm/virt/secret.py", line =3D 92, in clear > > > > con =3D3D libvirtconnection.get() > > > > File "/usr/lib/python2.7/site-packages/vdsm/libvirtconnection.py", = =3D line 163, in get > > > > password) > > > > File "/usr/lib/python2.7/site-packages/vdsm/libvirtconnection.py", = =3D line 99, in open_connection > > > > return utils.retry(libvirtOpen, timeout=3D3D10, sleep=3D3D0.2) > > > > File "/usr/lib/python2.7/site-packages/vdsm/utils.py", line 546, =3D in retry > > > > return func() > > > > File "/usr/lib64/python2.7/site-packages/libvirt.py", line 105, in = =3D openAuth > > > > if ret is None:raise libvirtError('virConnectOpenAuth() failed') > > > > libvirtError: Failed to connect socket to =3D '/var/run/libvirt/libvirt-sock': Permission denied > > > > =3D20 > > > > Investitate: > > > > According to the traceback above, the code in libvirt.py as below, =3D and os.geteuid() get =3DE2=3D80=3D980=3DE2=3D80=3D99 which shows the curre= nt user =3D is root; >=3D20 > =3D20 > vdsm is not supposed to be run under root user. For debugging you =3D should follow the devel setup wiki and not change a regular host.=3D20 > Depends what you modified, it's impossible to say from what you =3D described....but a general advice is you simply don't do that:) >=3D20 > > > > =3D20 > > > > def openAuth(uri, auth, flags=3D3D0): > > > > #print os.geteuid() > > > > ret =3D3D libvirtmod.virConnectOpenAuth(uri, auth, flags) > > > > if ret is None:raise libvirtError('virConnectOpenAuth() failed') > > > > return virConnect(_obj=3D3Dret) > > > > =3D20 > > > > [root(a)server117 libvirt]# ll /var/run/libvirt/libvirt-sock > > > > srwxrwx---. 1 root qemu 0 Jul 19 23:43 /var/run/libvirt/libvirt-sock > > > > =3D20 > > > > According that, root should not get an Permission denied error ? But = =3D why? > > > > =3D20 > > > > And I setenforce=3D3D0 , and still show Perssion denied error. > > > > =3D20 > > > > What=3DE2=3D80=3D99s the reason? And how to solve it? > > > > =3D20 > > > > Thank you. > > > > > > _______________________________________________ > > Devel mailing list > > Devel(a)ovirt.org > > http://lists.ovirt.org/mailman/listinfo/devel =3D --Apple-Mail=3D_A58705BB-94F0-41B3-912E-C81871820D95 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=3Dutf-8
On 26 Jul 2016, at 08:02, lifuqiong <lifuqiong(a)cncloudsec.com> wrote:

 
I do make a =3D mistake because I just print os.getuid() show the user root; but =3D os.geteuid() show the current user is still vdsm;
 
Anyway , I =3D still don=3DE2=3D80=3D99t know how to debug vdsm, I cann=3DE2=3D80=3D99t lo= g in to =3D centos with user VDSM, because I don=3DE2=3D80=3D99t know the passwd of use= r =3D vdsm and if I changed the password, the service vdsmd will cann=3DE2=3D80= =3D99t =3D start.

the= =3D vdsm account is intentionally disabled for interactive =3D login

<= div =3D class=3D3D"">
 
You told me =3D =3DE2=3D80=3D9Cshould follow the= devel =3D setup wiki= =3DE2=3D =3D80=3D9D , what=3DE2=3D80=3D99s the true link of vdsm devel setup wiki ?&= nbsp; I =3D can=3DE2=3D80=3D99t get useful information in ovirt.org or =3D google.

http://www.ovirt.org/develop/developer-guide/vdsm/developers/<= /=3D a> has tips how to build from source and what packages are =3D needed
Anything specific you=3DE2=3D80=3D99re =3D troubleshooting?

Thanks,
michal

 
 
Thank you
 
=3DE5=3D8F=3D91=3DE4=3DBB=3DB6=3DE4=3DBA=3DBA: Michal Skrivanek [mailto:mskrivan(a)redhat.com] 
=3DE5=3D8F=3D9= 1=3DE9=3D80=3D81=3DE6=3D =3D97=3DB6=3DE9=3D97=3DB4: 2016=3DE5=3DB9=3DB47=3DE6=3D9C=3D8826=3DE6=3D97=3DA5 5:00
= =3DE6=3D94=3DB6=3DE4=3DBB=3DB6=3DE4=3DBA=3DBA: lifuqiong
=3DE6=3D8A=3D84=3DE9=3D80=3D81: users; devel
=3DE4=3DB8=3DBB=3DE9=3DA2=3D98: Re: [ovirt-devel] Debug =3D vdsm 4.0.0 report error: libvirt: XML-RPC error : Failed to connect =3D socket to '/var/run/libvirt/libvirt-sock': Permission denied
 
 


On 25 Jul 2016, at 21:50, Sandro Bonazzola <sbonazzo(a)redhat.com> =3D wrote:

Adding some people from virt team.

Il 23/Lug/2016 11:44, "lifuqiong" <lifuqiong(a)cncloudsec.com>= ; =3D ha scritto:
>
> I debugged vdsm with = =3D PyCharm, And I logged on my Centos 7.2 with root,  and get an error = =3D as follows:
>
>  
>
> Problem:
>
>  
>
> Tracebac= k =3D (most recent call last):
>
>   = =3D File "/usr/share/vdsm/vdsm", line 149, in run
>
>     serve_clients(log)
>
>   File "/usr/share/vdsm/vdsm", = =3D line 104, in serve_clients
>
> =3D     cif =3D3D clientIF.getInstance(irs, log, scheduler)
>
>   File =3D "/usr/share/vdsm/clientIF.py", line 204, in getInstance
>
>     cls._instance =3D= 3D =3D clientIF(irs, log, scheduler)
>
> =3D   File "/usr/share/vdsm/clientIF.py", line 106, in __init__
>
>     secret.clear()>
>   File =3D "/usr/lib/python2.7/site-packages/vdsm/virt/secret.py", line 92, in =3D clear
>
>     con =3D3= D =3D libvirtconnection.get()
>
>   = =3D File "/usr/lib/python2.7/site-packages/vdsm/libvirtconnection.py", line =3D 163, in get
>
>     = =3D password)
>
>   File =3D "/usr/lib/python2.7/site-packages/vdsm/libvirtconnection.py", line 99, =3D in open_connection
>
> =3D     return utils.retry(libvirtOpen, timeout=3D3D10, =3D sleep=3D3D0.2)
>
>   File =3D "/usr/lib/python2.7/site-packages/vdsm/utils.py", line 546, in retry
>
>     return func()
>
>   File =3D "/usr/lib64/python2.7/site-packages/libvirt.py", line 105, in =3D openAuth
>
>     if re= t =3D is None:raise libvirtError('virConnectOpenAuth() failed')
>
> libvirtError: Failed to connect =3D socket to '/var/run/libvirt/libvirt-sock': Permission denied
>
>  
>
> Investitate:
>
> = =3D According to the traceback above, the code in libvirt.py as below, and =3D  os.geteuid() get =3DE2=3D80=3D980=3DE2=3D80=3D99 which shows the curr= ent user =3D is root;

 
vdsm is =3D not supposed to be run under root user. For debugging you should follow =3D the devel setup wiki and not change a regular host. 
Depends what you modified,= =3D it's impossible to say from what you described....but a general advice =3D is you simply don't do that:)

>
> = =3D  
>
> def openAuth(uri, auth, = =3D flags=3D3D0):
>
> =3D          #print os.geteuid()
>
>     ret =3D3D =3D libvirtmod.virConnectOpenAuth(uri, auth, flags)
>
>     if ret is None:raise =3D libvirtError('virConnectOpenAuth() failed')
>
> return virConnect(_obj=3D3Dret)
>
>  
>
> =3D [root(a)server117 libvirt]# ll /var/run/libvirt/libvirt-sock
>
> srwxrwx---. 1 root qemu 0 Jul 19 =3D 23:43 /var/run/libvirt/libvirt-sock
>
&g= t; =3D  
>
> According that, root shoul= d =3D not get an Permission denied error ? But why?
>
>  
>
> And I = =3D setenforce=3D3D0 , and still show Perssion denied error.
>
>  
>
> What=3DE2=3D80=3D99s the reason? And how to solve it?
>
>  
>
> Thank you.
>
>
> _______________________________________________
> Devel mailing list
> Devel(a)ovirt.org
> http://lists.ovirt.org/mailman/listinfo/devel


=3D --Apple-Mail=3D_A58705BB-94F0-41B3-912E-C81871820D95-- --===============4473166451229507931== Content-Type: multipart/alternative MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.bin" Ci0tQXBwbGUtTWFpbD1fQTU4NzA1QkItOTRGMC00MUIzLTkxMkUtQzgxODcxODIwRDk1CkNvbnRl bnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKQ29udGVudC1UeXBlOiB0ZXh0 L3BsYWluOwoJY2hhcnNldD11dGYtOAoKCj4gT24gMjYgSnVsIDIwMTYsIGF0IDA4OjAyLCBsaWZ1 cWlvbmcgPGxpZnVxaW9uZ0BjbmNsb3Vkc2VjLmNvbT4gd3JvdGU6Cj49MjAKPiA9MjAKPiBJIGRv IG1ha2UgYSBtaXN0YWtlIGJlY2F1c2UgSSBqdXN0IHByaW50IG9zLmdldHVpZCgpIHNob3cgdGhl IHVzZXIgPQpyb290OyBidXQgb3MuZ2V0ZXVpZCgpIHNob3cgdGhlIGN1cnJlbnQgdXNlciBpcyBz dGlsbCB2ZHNtOwo+ID0yMAo+IEFueXdheSAsIEkgc3RpbGwgZG9uPUUyPTgwPTk5dCBrbm93IGhv dyB0byBkZWJ1ZyB2ZHNtLCBJIGNhbm49RTI9ODA9OTl0ID0KbG9nIGluIHRvIGNlbnRvcyB3aXRo IHVzZXIgVkRTTSwgYmVjYXVzZSBJIGRvbj1FMj04MD05OXQga25vdyB0aGUgcGFzc3dkID0Kb2Yg dXNlciB2ZHNtIGFuZCBpZiBJIGNoYW5nZWQgdGhlIHBhc3N3b3JkLCB0aGUgc2VydmljZSB2ZHNt ZCB3aWxsID0KY2Fubj1FMj04MD05OXQgc3RhcnQuCgp0aGUgdmRzbSBhY2NvdW50IGlzIGludGVu dGlvbmFsbHkgZGlzYWJsZWQgZm9yIGludGVyYWN0aXZlIGxvZ2luCgo+ID0yMAo+IFlvdSB0b2xk IG1lID1FMj04MD05Q3Nob3VsZCBmb2xsb3cgdGhlIGRldmVsIHNldHVwIHdpa2k9RTI9ODA9OUQg LCA9CndoYXQ9RTI9ODA9OTlzIHRoZSB0cnVlIGxpbmsgb2YgdmRzbSBkZXZlbCBzZXR1cCB3aWtp ID8gIEkgY2FuPUUyPTgwPTk5dCA9CmdldCB1c2VmdWwgaW5mb3JtYXRpb24gaW4gb3ZpcnQub3Jn IDxodHRwOi8vb3ZpcnQub3JnLz4gb3IgZ29vZ2xlLgoKaHR0cDovL3d3dy5vdmlydC5vcmcvZGV2 ZWxvcC9kZXZlbG9wZXItZ3VpZGUvdmRzbS9kZXZlbG9wZXJzLyA9CjxodHRwOi8vd3d3Lm92aXJ0 Lm9yZy9kZXZlbG9wL2RldmVsb3Blci1ndWlkZS92ZHNtL2RldmVsb3BlcnMvPiBoYXMgdGlwcyA9 CmhvdyB0byBidWlsZCBmcm9tIHNvdXJjZSBhbmQgd2hhdCBwYWNrYWdlcyBhcmUgbmVlZGVkCkFu eXRoaW5nIHNwZWNpZmljIHlvdT1FMj04MD05OXJlIHRyb3VibGVzaG9vdGluZz8KClRoYW5rcywK bWljaGFsCgo+ID0yMAo+ID0yMAo+IFRoYW5rIHlvdQo+ID0yMAo+ID1FNT04Rj05MT1FND1CQj1C Nj1FND1CQT1CQTogTWljaGFsIFNrcml2YW5layA9ClttYWlsdG86bXNrcml2YW5AcmVkaGF0LmNv bV09MjAKPiA9RTU9OEY9OTE9RTk9ODA9ODE9RTY9OTc9QjY9RTk9OTc9QjQ6IDIwMTY9RTU9Qjk9 QjQ3PUU2PTlDPTg4MjY9RTY9OTc9QTU9CiA1OjAwCj4gPUU2PTk0PUI2PUU0PUJCPUI2PUU0PUJB PUJBOiBsaWZ1cWlvbmcKPiA9RTY9OEE9ODQ9RTk9ODA9ODE6IHVzZXJzOyBkZXZlbAo+ID1FND1C OD1CQj1FOT1BMj05ODogUmU6IFtvdmlydC1kZXZlbF0gRGVidWcgdmRzbSA0LjAuMCByZXBvcnQg ZXJyb3I6ID0KbGlidmlydDogWE1MLVJQQyBlcnJvciA6IEZhaWxlZCB0byBjb25uZWN0IHNvY2tl dCB0byA9CicvdmFyL3J1bi9saWJ2aXJ0L2xpYnZpcnQtc29jayc6IFBlcm1pc3Npb24gZGVuaWVk Cj4gPTIwCj4gPTIwCj49MjAKPiBPbiAyNSBKdWwgMjAxNiwgYXQgMjE6NTAsIFNhbmRybyBCb25h enpvbGEgPHNib25henpvQHJlZGhhdC5jb20gPQo8bWFpbHRvOnNib25henpvQHJlZGhhdC5jb20+ PiB3cm90ZToKPj0yMAo+IEFkZGluZyBzb21lIHBlb3BsZSBmcm9tIHZpcnQgdGVhbS4KPj0yMAo+ IElsIDIzL0x1Zy8yMDE2IDExOjQ0LCAibGlmdXFpb25nIiA8bGlmdXFpb25nQGNuY2xvdWRzZWMu Y29tID0KPG1haWx0bzpsaWZ1cWlvbmdAY25jbG91ZHNlYy5jb20+PiBoYSBzY3JpdHRvOgo+ID4K PiA+IEkgZGVidWdnZWQgdmRzbSB3aXRoIFB5Q2hhcm0sIEFuZCBJIGxvZ2dlZCBvbiBteSBDZW50 b3MgNy4yIHdpdGggPQpyb290LCAgYW5kIGdldCBhbiBlcnJvciBhcyBmb2xsb3dzOgo+ID4KPiA+ ID0yMAo+ID4KPiA+IFByb2JsZW06Cj4gPgo+ID4gPTIwCj4gPgo+ID4gVHJhY2ViYWNrIChtb3N0 IHJlY2VudCBjYWxsIGxhc3QpOgo+ID4KPiA+ICAgRmlsZSAiL3Vzci9zaGFyZS92ZHNtL3Zkc20i LCBsaW5lIDE0OSwgaW4gcnVuCj4gPgo+ID4gICAgIHNlcnZlX2NsaWVudHMobG9nKQo+ID4KPiA+ ICAgRmlsZSAiL3Vzci9zaGFyZS92ZHNtL3Zkc20iLCBsaW5lIDEwNCwgaW4gc2VydmVfY2xpZW50 cwo+ID4KPiA+ICAgICBjaWYgPTNEIGNsaWVudElGLmdldEluc3RhbmNlKGlycywgbG9nLCBzY2hl ZHVsZXIpCj4gPgo+ID4gICBGaWxlICIvdXNyL3NoYXJlL3Zkc20vY2xpZW50SUYucHkiLCBsaW5l IDIwNCwgaW4gZ2V0SW5zdGFuY2UKPiA+Cj4gPiAgICAgY2xzLl9pbnN0YW5jZSA9M0QgY2xpZW50 SUYoaXJzLCBsb2csIHNjaGVkdWxlcikKPiA+Cj4gPiAgIEZpbGUgIi91c3Ivc2hhcmUvdmRzbS9j bGllbnRJRi5weSIsIGxpbmUgMTA2LCBpbiBfX2luaXRfXwo+ID4KPiA+ICAgICBzZWNyZXQuY2xl YXIoKQo+ID4KPiA+ICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMi43L3NpdGUtcGFja2FnZXMvdmRz bS92aXJ0L3NlY3JldC5weSIsIGxpbmUgPQo5MiwgaW4gY2xlYXIKPiA+Cj4gPiAgICAgY29uID0z RCBsaWJ2aXJ0Y29ubmVjdGlvbi5nZXQoKQo+ID4KPiA+ICAgRmlsZSAiL3Vzci9saWIvcHl0aG9u Mi43L3NpdGUtcGFja2FnZXMvdmRzbS9saWJ2aXJ0Y29ubmVjdGlvbi5weSIsID0KbGluZSAxNjMs IGluIGdldAo+ID4KPiA+ICAgICBwYXNzd29yZCkKPiA+Cj4gPiAgIEZpbGUgIi91c3IvbGliL3B5 dGhvbjIuNy9zaXRlLXBhY2thZ2VzL3Zkc20vbGlidmlydGNvbm5lY3Rpb24ucHkiLCA9CmxpbmUg OTksIGluIG9wZW5fY29ubmVjdGlvbgo+ID4KPiA+ICAgICByZXR1cm4gdXRpbHMucmV0cnkobGli dmlydE9wZW4sIHRpbWVvdXQ9M0QxMCwgc2xlZXA9M0QwLjIpCj4gPgo+ID4gICBGaWxlICIvdXNy L2xpYi9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy92ZHNtL3V0aWxzLnB5IiwgbGluZSA1NDYsID0K aW4gcmV0cnkKPiA+Cj4gPiAgICAgcmV0dXJuIGZ1bmMoKQo+ID4KPiA+ICAgRmlsZSAiL3Vzci9s aWI2NC9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy9saWJ2aXJ0LnB5IiwgbGluZSAxMDUsIGluID0K b3BlbkF1dGgKPiA+Cj4gPiAgICAgaWYgcmV0IGlzIE5vbmU6cmFpc2UgbGlidmlydEVycm9yKCd2 aXJDb25uZWN0T3BlbkF1dGgoKSBmYWlsZWQnKQo+ID4KPiA+IGxpYnZpcnRFcnJvcjogRmFpbGVk IHRvIGNvbm5lY3Qgc29ja2V0IHRvID0KJy92YXIvcnVuL2xpYnZpcnQvbGlidmlydC1zb2NrJzog UGVybWlzc2lvbiBkZW5pZWQKPiA+Cj4gPiA9MjAKPiA+Cj4gPiBJbnZlc3RpdGF0ZToKPiA+Cj4g PiBBY2NvcmRpbmcgdG8gdGhlIHRyYWNlYmFjayBhYm92ZSwgdGhlIGNvZGUgaW4gbGlidmlydC5w eSBhcyBiZWxvdywgPQphbmQgIG9zLmdldGV1aWQoKSBnZXQgPUUyPTgwPTk4MD1FMj04MD05OSB3 aGljaCBzaG93cyB0aGUgY3VycmVudCB1c2VyID0KaXMgcm9vdDsKPj0yMAo+ID0yMAo+IHZkc20g aXMgbm90IHN1cHBvc2VkIHRvIGJlIHJ1biB1bmRlciByb290IHVzZXIuIEZvciBkZWJ1Z2dpbmcg eW91ID0Kc2hvdWxkIGZvbGxvdyB0aGUgZGV2ZWwgc2V0dXAgd2lraSBhbmQgbm90IGNoYW5nZSBh IHJlZ3VsYXIgaG9zdC49MjAKPiBEZXBlbmRzIHdoYXQgeW91IG1vZGlmaWVkLCBpdCdzIGltcG9z c2libGUgdG8gc2F5IGZyb20gd2hhdCB5b3UgPQpkZXNjcmliZWQuLi4uYnV0IGEgZ2VuZXJhbCBh ZHZpY2UgaXMgeW91IHNpbXBseSBkb24ndCBkbyB0aGF0OikKPj0yMAo+ID4KPiA+ID0yMAo+ID4K PiA+IGRlZiBvcGVuQXV0aCh1cmksIGF1dGgsIGZsYWdzPTNEMCk6Cj4gPgo+ID4gICAgICAgICAg I3ByaW50IG9zLmdldGV1aWQoKQo+ID4KPiA+ICAgICByZXQgPTNEIGxpYnZpcnRtb2QudmlyQ29u bmVjdE9wZW5BdXRoKHVyaSwgYXV0aCwgZmxhZ3MpCj4gPgo+ID4gICAgIGlmIHJldCBpcyBOb25l OnJhaXNlIGxpYnZpcnRFcnJvcigndmlyQ29ubmVjdE9wZW5BdXRoKCkgZmFpbGVkJykKPiA+Cj4g PiByZXR1cm4gdmlyQ29ubmVjdChfb2JqPTNEcmV0KQo+ID4KPiA+ID0yMAo+ID4KPiA+IFtyb290 QHNlcnZlcjExNyBsaWJ2aXJ0XSMgbGwgL3Zhci9ydW4vbGlidmlydC9saWJ2aXJ0LXNvY2sKPiA+ Cj4gPiBzcnd4cnd4LS0tLiAxIHJvb3QgcWVtdSAwIEp1bCAxOSAyMzo0MyAvdmFyL3J1bi9saWJ2 aXJ0L2xpYnZpcnQtc29jawo+ID4KPiA+ID0yMAo+ID4KPiA+IEFjY29yZGluZyB0aGF0LCByb290 IHNob3VsZCBub3QgZ2V0IGFuIFBlcm1pc3Npb24gZGVuaWVkIGVycm9yID8gQnV0ID0Kd2h5Pwo+ ID4KPiA+ID0yMAo+ID4KPiA+IEFuZCBJIHNldGVuZm9yY2U9M0QwICwgYW5kIHN0aWxsIHNob3cg UGVyc3Npb24gZGVuaWVkIGVycm9yLgo+ID4KPiA+ID0yMAo+ID4KPiA+IFdoYXQ9RTI9ODA9OTlz IHRoZSByZWFzb24/IEFuZCBob3cgdG8gc29sdmUgaXQ/Cj4gPgo+ID4gPTIwCj4gPgo+ID4gVGhh bmsgeW91Lgo+ID4KPiA+Cj4gPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwo+ID4gRGV2ZWwgbWFpbGluZyBsaXN0Cj4gPiBEZXZlbEBvdmlydC5vcmcgPG1h aWx0bzpEZXZlbEBvdmlydC5vcmc+Cj4gPiBodHRwOi8vbGlzdHMub3ZpcnQub3JnL21haWxtYW4v bGlzdGluZm8vZGV2ZWwgPQo8aHR0cDovL2xpc3RzLm92aXJ0Lm9yZy9tYWlsbWFuL2xpc3RpbmZv L2RldmVsPgoKLS1BcHBsZS1NYWlsPV9BNTg3MDVCQi05NEYwLTQxQjMtOTEyRS1DODE4NzE4MjBE OTUKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQpDb250ZW50LVR5 cGU6IHRleHQvaHRtbDsKCWNoYXJzZXQ9dXRmLTgKCjxodG1sPjxoZWFkPjxtZXRhIGh0dHAtZXF1 aXY9M0QiQ29udGVudC1UeXBlIiBjb250ZW50PTNEInRleHQvaHRtbCA9CmNoYXJzZXQ9M0R1dGYt OCI+PC9oZWFkPjxib2R5IHN0eWxlPTNEIndvcmQtd3JhcDogYnJlYWstd29yZDsgPQotd2Via2l0 LW5ic3AtbW9kZTogc3BhY2U7IC13ZWJraXQtbGluZS1icmVhazogYWZ0ZXItd2hpdGUtc3BhY2U7 IiA9CmNsYXNzPTNEIiI+PGJyIGNsYXNzPTNEIiI+PGRpdj48YmxvY2txdW90ZSB0eXBlPTNEImNp dGUiIGNsYXNzPTNEIiI+PGRpdiA9CmNsYXNzPTNEIiI+T24gMjYgSnVsIDIwMTYsIGF0IDA4OjAy LCBsaWZ1cWlvbmcgJmx0OzxhID0KaHJlZj0zRCJtYWlsdG86bGlmdXFpb25nQGNuY2xvdWRzZWMu Y29tIiA9CmNsYXNzPTNEIiI+bGlmdXFpb25nQGNuY2xvdWRzZWMuY29tPC9hPiZndDsgd3JvdGU6 PC9kaXY+PGJyID0KY2xhc3M9M0QiQXBwbGUtaW50ZXJjaGFuZ2UtbmV3bGluZSI+PGRpdiBjbGFz cz0zRCIiPjxkaXYgPQpjbGFzcz0zRCJXb3JkU2VjdGlvbjEiIHN0eWxlPTNEInBhZ2U6IFdvcmRT ZWN0aW9uMTsgZm9udC1mYW1pbHk6ID0KSGVsdmV0aWNhOyBmb250LXNpemU6IDEycHg7IGZvbnQt c3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50LWNhcHM6ID0Kbm9ybWFsOyBmb250LXdlaWdodDog bm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBvcnBoYW5zOiBhdXRvOyA9CnRleHQtYWxp Z246IHN0YXJ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUt c3BhY2U6ID0Kbm9ybWFsOyB3aWRvd3M6IGF1dG87IHdvcmQtc3BhY2luZzogMHB4OyAtd2Via2l0 LXRleHQtc3Ryb2tlLXdpZHRoOiA9CjBweDsiPjxkaXYgc3R5bGU9M0QibWFyZ2luOiAwY20gMGNt IDAuMDAwMXB0OyBmb250LXNpemU6IDEycHQ7ID0KZm9udC1mYW1pbHk6ID1FNT1BRT04Qj1FND1C RD05MzsiIGNsYXNzPTNEIiI+PHNwYW4gbGFuZz0zRCJFTi1VUyIgPQpzdHlsZT0zRCJmb250LXNp emU6IDEwLjVwdDsgZm9udC1mYW1pbHk6IENhbGlicmksIHNhbnMtc2VyaWY7IGNvbG9yOiA9CnJn YigzMSwgNzMsIDEyNSk7IiBjbGFzcz0zRCIiPjxvOnAgPQpjbGFzcz0zRCIiPiZuYnNwOzwvbzpw Pjwvc3Bhbj48L2Rpdj48ZGl2IHN0eWxlPTNEIm1hcmdpbjogMGNtIDBjbSA9CjAuMDAwMXB0OyBm b250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiA9RTU9QUU9OEI9RTQ9QkQ9OTM7IiA9CmNsYXNz PTNEIiI+PHNwYW4gbGFuZz0zRCJFTi1VUyIgc3R5bGU9M0QiZm9udC1zaXplOiAxMC41cHQ7IGZv bnQtZmFtaWx5OiA9CkNhbGlicmksIHNhbnMtc2VyaWY7IGNvbG9yOiByZ2IoMzEsIDczLCAxMjUp OyIgY2xhc3M9M0QiIj5JIGRvIG1ha2UgYSA9Cm1pc3Rha2UgYmVjYXVzZSBJIGp1c3QgcHJpbnQg b3MuZ2V0dWlkKCkgc2hvdyB0aGUgdXNlciByb290OyBidXQgPQpvcy5nZXRldWlkKCkgc2hvdyB0 aGUgY3VycmVudCB1c2VyIGlzIHN0aWxsIHZkc207PG86cCA9CmNsYXNzPTNEIiI+PC9vOnA+PC9z cGFuPjwvZGl2PjxkaXYgc3R5bGU9M0QibWFyZ2luOiAwY20gMGNtIDAuMDAwMXB0OyA9CmZvbnQt c2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ID1FNT1BRT04Qj1FND1CRD05MzsiIGNsYXNzPTNEIiI+ PHNwYW4gPQpsYW5nPTNEIkVOLVVTIiBzdHlsZT0zRCJmb250LXNpemU6IDEwLjVwdDsgZm9udC1m YW1pbHk6IENhbGlicmksID0Kc2Fucy1zZXJpZjsgY29sb3I6IHJnYigzMSwgNzMsIDEyNSk7IiBj bGFzcz0zRCIiPjxvOnAgPQpjbGFzcz0zRCIiPiZuYnNwOzwvbzpwPjwvc3Bhbj48L2Rpdj48ZGl2 IHN0eWxlPTNEIm1hcmdpbjogMGNtIDBjbSA9CjAuMDAwMXB0OyBmb250LXNpemU6IDEycHQ7IGZv bnQtZmFtaWx5OiA9RTU9QUU9OEI9RTQ9QkQ9OTM7IiA9CmNsYXNzPTNEIiI+PHNwYW4gbGFuZz0z RCJFTi1VUyIgc3R5bGU9M0QiZm9udC1zaXplOiAxMC41cHQ7IGZvbnQtZmFtaWx5OiA9CkNhbGli cmksIHNhbnMtc2VyaWY7IGNvbG9yOiByZ2IoMzEsIDczLCAxMjUpOyIgY2xhc3M9M0QiIj5Bbnl3 YXkgLCBJID0Kc3RpbGwgZG9uPUUyPTgwPTk5dCBrbm93IGhvdyB0byBkZWJ1ZyB2ZHNtLCBJIGNh bm49RTI9ODA9OTl0IGxvZyBpbiB0byA9CmNlbnRvcyB3aXRoIHVzZXIgVkRTTSwgYmVjYXVzZSBJ IGRvbj1FMj04MD05OXQga25vdyB0aGUgcGFzc3dkIG9mIHVzZXIgPQp2ZHNtIGFuZCBpZiBJIGNo YW5nZWQgdGhlIHBhc3N3b3JkLCB0aGUgc2VydmljZSB2ZHNtZCB3aWxsIGNhbm49RTI9ODA9OTl0 ID0Kc3RhcnQuPC9zcGFuPjwvZGl2PjwvZGl2PjwvZGl2PjwvYmxvY2txdW90ZT48ZGl2PjxiciBj bGFzcz0zRCIiPjwvZGl2PnRoZSA9CnZkc20gYWNjb3VudCBpcyBpbnRlbnRpb25hbGx5IGRpc2Fi bGVkIGZvciBpbnRlcmFjdGl2ZSA9CmxvZ2luPC9kaXY+PGRpdj48YnIgY2xhc3M9M0QiIj48Ymxv Y2txdW90ZSB0eXBlPTNEImNpdGUiIGNsYXNzPTNEIiI+PGRpdiA9CmNsYXNzPTNEIiI+PGRpdiBj bGFzcz0zRCJXb3JkU2VjdGlvbjEiIHN0eWxlPTNEInBhZ2U6IFdvcmRTZWN0aW9uMTsgPQpmb250 LWZhbWlseTogSGVsdmV0aWNhOyBmb250LXNpemU6IDEycHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsg PQpmb250LXZhcmlhbnQtY2Fwczogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXIt c3BhY2luZzogbm9ybWFsOyA9Cm9ycGhhbnM6IGF1dG87IHRleHQtYWxpZ246IHN0YXJ0OyB0ZXh0 LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogPQpub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFs OyB3aWRvd3M6IGF1dG87IHdvcmQtc3BhY2luZzogMHB4OyA9Ci13ZWJraXQtdGV4dC1zdHJva2Ut d2lkdGg6IDBweDsiPjxkaXYgc3R5bGU9M0QibWFyZ2luOiAwY20gMGNtIDAuMDAwMXB0OyA9CmZv bnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ID1FNT1BRT04Qj1FND1CRD05MzsiIGNsYXNzPTNE IiI+PHNwYW4gPQpsYW5nPTNEIkVOLVVTIiBzdHlsZT0zRCJmb250LXNpemU6IDEwLjVwdDsgZm9u dC1mYW1pbHk6IENhbGlicmksID0Kc2Fucy1zZXJpZjsgY29sb3I6IHJnYigzMSwgNzMsIDEyNSk7 IiBjbGFzcz0zRCIiPjxvOnAgPQpjbGFzcz0zRCIiPjwvbzpwPjwvc3Bhbj48L2Rpdj48ZGl2IHN0 eWxlPTNEIm1hcmdpbjogMGNtIDBjbSAwLjAwMDFwdDsgPQpmb250LXNpemU6IDEycHQ7IGZvbnQt ZmFtaWx5OiA9RTU9QUU9OEI9RTQ9QkQ9OTM7IiBjbGFzcz0zRCIiPjxzcGFuID0KbGFuZz0zRCJF Ti1VUyIgc3R5bGU9M0QiZm9udC1zaXplOiAxMC41cHQ7IGZvbnQtZmFtaWx5OiBDYWxpYnJpLCA9 CnNhbnMtc2VyaWY7IGNvbG9yOiByZ2IoMzEsIDczLCAxMjUpOyIgY2xhc3M9M0QiIj48bzpwID0K Y2xhc3M9M0QiIj4mbmJzcDs8L286cD48L3NwYW4+PC9kaXY+PGRpdiBzdHlsZT0zRCJtYXJnaW46 IDBjbSAwY20gPQowLjAwMDFwdDsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogPUU1PUFF PThCPUU0PUJEPTkzOyIgPQpjbGFzcz0zRCIiPjxzcGFuIGxhbmc9M0QiRU4tVVMiIHN0eWxlPTNE ImZvbnQtc2l6ZTogMTAuNXB0OyBmb250LWZhbWlseTogPQpDYWxpYnJpLCBzYW5zLXNlcmlmOyBj b2xvcjogcmdiKDMxLCA3MywgMTI1KTsiIGNsYXNzPTNEIiI+WW91IHRvbGQgbWUgPQo9RTI9ODA9 OUM8L3NwYW4+PHNwYW4gbGFuZz0zRCJFTi1VUyIgY2xhc3M9M0QiIj5zaG91bGQgZm9sbG93IHRo ZSBkZXZlbCA9CnNldHVwIHdpa2k8L3NwYW4+PHNwYW4gbGFuZz0zRCJFTi1VUyIgc3R5bGU9M0Qi Zm9udC1zaXplOiAxMC41cHQ7ID0KZm9udC1mYW1pbHk6IENhbGlicmksIHNhbnMtc2VyaWY7IGNv bG9yOiByZ2IoMzEsIDczLCAxMjUpOyIgY2xhc3M9M0QiIj49RTI9Cj04MD05RCAsIHdoYXQ9RTI9 ODA9OTlzIHRoZSB0cnVlIGxpbmsgb2YgdmRzbSBkZXZlbCBzZXR1cCB3aWtpID8mbmJzcDsgSSA9 CmNhbj1FMj04MD05OXQgZ2V0IHVzZWZ1bCBpbmZvcm1hdGlvbiBpbjxzcGFuID0KY2xhc3M9M0Qi QXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+PGEgaHJlZj0zRCJodHRwOi8vb3Zp cnQub3JnLyI9CiBzdHlsZT0zRCJjb2xvcjogcHVycGxlOyB0ZXh0LWRlY29yYXRpb246IHVuZGVy bGluZTsiID0KY2xhc3M9M0QiIj5vdmlydC5vcmc8L2E+PHNwYW4gPQpjbGFzcz0zRCJBcHBsZS1j b252ZXJ0ZWQtc3BhY2UiPiZuYnNwOzwvc3Bhbj5vciA9Cmdvb2dsZS48L3NwYW4+PC9kaXY+PC9k aXY+PC9kaXY+PC9ibG9ja3F1b3RlPjxkaXY+PGJyIGNsYXNzPTNEIiI+PC9kaXY+PGEgPQpocmVm PTNEImh0dHA6Ly93d3cub3ZpcnQub3JnL2RldmVsb3AvZGV2ZWxvcGVyLWd1aWRlL3Zkc20vZGV2 ZWxvcGVycy8iID0KY2xhc3M9M0QiIj5odHRwOi8vd3d3Lm92aXJ0Lm9yZy9kZXZlbG9wL2RldmVs b3Blci1ndWlkZS92ZHNtL2RldmVsb3BlcnMvPC89CmE+Jm5ic3A7aGFzIHRpcHMgaG93IHRvIGJ1 aWxkIGZyb20gc291cmNlIGFuZCB3aGF0IHBhY2thZ2VzIGFyZSA9Cm5lZWRlZDwvZGl2PjxkaXY+ QW55dGhpbmcgc3BlY2lmaWMgeW91PUUyPTgwPTk5cmUgPQp0cm91Ymxlc2hvb3Rpbmc/PC9kaXY+ PGRpdj48YnIgPQpjbGFzcz0zRCIiPjwvZGl2PjxkaXY+VGhhbmtzLDwvZGl2PjxkaXY+bWljaGFs PC9kaXY+PGRpdj48YnIgPQpjbGFzcz0zRCIiPjxibG9ja3F1b3RlIHR5cGU9M0QiY2l0ZSIgY2xh c3M9M0QiIj48ZGl2IGNsYXNzPTNEIiI+PGRpdiA9CmNsYXNzPTNEIldvcmRTZWN0aW9uMSIgc3R5 bGU9M0QicGFnZTogV29yZFNlY3Rpb24xOyBmb250LWZhbWlseTogPQpIZWx2ZXRpY2E7IGZvbnQt c2l6ZTogMTJweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQtY2FwczogPQpub3Jt YWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IG9ycGhhbnM6 IGF1dG87ID0KdGV4dC1hbGlnbjogc3RhcnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNm b3JtOiBub25lOyB3aGl0ZS1zcGFjZTogPQpub3JtYWw7IHdpZG93czogYXV0bzsgd29yZC1zcGFj aW5nOiAwcHg7IC13ZWJraXQtdGV4dC1zdHJva2Utd2lkdGg6ID0KMHB4OyI+PGRpdiBzdHlsZT0z RCJtYXJnaW46IDBjbSAwY20gMC4wMDAxcHQ7IGZvbnQtc2l6ZTogMTJwdDsgPQpmb250LWZhbWls eTogPUU1PUFFPThCPUU0PUJEPTkzOyIgY2xhc3M9M0QiIj48c3BhbiBsYW5nPTNEIkVOLVVTIiA9 CnN0eWxlPTNEImZvbnQtc2l6ZTogMTAuNXB0OyBmb250LWZhbWlseTogQ2FsaWJyaSwgc2Fucy1z ZXJpZjsgY29sb3I6ID0KcmdiKDMxLCA3MywgMTI1KTsiIGNsYXNzPTNEIiI+PG86cCBjbGFzcz0z RCIiPjwvbzpwPjwvc3Bhbj48L2Rpdj48ZGl2ID0Kc3R5bGU9M0QibWFyZ2luOiAwY20gMGNtIDAu MDAwMXB0OyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiA9Cj1FNT1BRT04Qj1FND1CRD05 MzsiIGNsYXNzPTNEIiI+PHNwYW4gbGFuZz0zRCJFTi1VUyIgc3R5bGU9M0QiZm9udC1zaXplOiA9 CjEwLjVwdDsgZm9udC1mYW1pbHk6IENhbGlicmksIHNhbnMtc2VyaWY7IGNvbG9yOiByZ2IoMzEs IDczLCAxMjUpOyIgPQpjbGFzcz0zRCIiPjxvOnAgY2xhc3M9M0QiIj4mbmJzcDs8L286cD48L3Nw YW4+PC9kaXY+PGRpdiBzdHlsZT0zRCJtYXJnaW46ID0KMGNtIDBjbSAwLjAwMDFwdDsgZm9udC1z aXplOiAxMnB0OyBmb250LWZhbWlseTogPUU1PUFFPThCPUU0PUJEPTkzOyIgPQpjbGFzcz0zRCIi PjxzcGFuIGxhbmc9M0QiRU4tVVMiIHN0eWxlPTNEImZvbnQtc2l6ZTogMTAuNXB0OyBmb250LWZh bWlseTogPQpDYWxpYnJpLCBzYW5zLXNlcmlmOyBjb2xvcjogcmdiKDMxLCA3MywgMTI1KTsiIGNs YXNzPTNEIiI+PG86cCA9CmNsYXNzPTNEIiI+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvZGl2PjxkaXYg c3R5bGU9M0QibWFyZ2luOiAwY20gMGNtID0KMC4wMDAxcHQ7IGZvbnQtc2l6ZTogMTJwdDsgZm9u dC1mYW1pbHk6ID1FNT1BRT04Qj1FND1CRD05MzsiID0KY2xhc3M9M0QiIj48c3BhbiBsYW5nPTNE IkVOLVVTIiBzdHlsZT0zRCJmb250LXNpemU6IDEwLjVwdDsgZm9udC1mYW1pbHk6ID0KQ2FsaWJy aSwgc2Fucy1zZXJpZjsgY29sb3I6IHJnYigzMSwgNzMsIDEyNSk7IiBjbGFzcz0zRCIiPlRoYW5r IHlvdTxvOnAgPQpjbGFzcz0zRCIiPjwvbzpwPjwvc3Bhbj48L2Rpdj48ZGl2IHN0eWxlPTNEIm1h cmdpbjogMGNtIDBjbSAwLjAwMDFwdDsgPQpmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiA9 RTU9QUU9OEI9RTQ9QkQ9OTM7IiBjbGFzcz0zRCIiPjxzcGFuID0KbGFuZz0zRCJFTi1VUyIgc3R5 bGU9M0QiZm9udC1zaXplOiAxMC41cHQ7IGZvbnQtZmFtaWx5OiBDYWxpYnJpLCA9CnNhbnMtc2Vy aWY7IGNvbG9yOiByZ2IoMzEsIDczLCAxMjUpOyIgY2xhc3M9M0QiIj48bzpwID0KY2xhc3M9M0Qi Ij4mbmJzcDs8L286cD48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0zRCIiPjxkaXYgPQpzdHlsZT0z RCJib3JkZXItc3R5bGU6IHNvbGlkIG5vbmUgbm9uZTsgYm9yZGVyLXRvcC1jb2xvcjogcmdiKDE4 MSwgMTk2LCA9CjIyMyk7IGJvcmRlci10b3Atd2lkdGg6IDFwdDsgcGFkZGluZzogM3B0IDBjbSAw Y207IiBjbGFzcz0zRCIiPjxkaXYgPQpzdHlsZT0zRCJtYXJnaW46IDBjbSAwY20gMC4wMDAxcHQ7 IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ID0KPUU1PUFFPThCPUU0PUJEPTkzOyIgY2xh c3M9M0QiIj48YiBjbGFzcz0zRCIiPjxzcGFuIHN0eWxlPTNEImZvbnQtc2l6ZTogPQoxMHB0OyIg Y2xhc3M9M0QiIj49RTU9OEY9OTE9RTQ9QkI9QjY9RTQ9QkE9QkE8c3BhbiBsYW5nPTNEIkVOLVVT IiA9CmNsYXNzPTNEIiI+Ojwvc3Bhbj48L3NwYW4+PC9iPjxzcGFuIGxhbmc9M0QiRU4tVVMiIHN0 eWxlPTNEImZvbnQtc2l6ZTogPQoxMHB0OyIgY2xhc3M9M0QiIj48c3BhbiA9CmNsYXNzPTNEIkFw cGxlLWNvbnZlcnRlZC1zcGFjZSI+Jm5ic3A7PC9zcGFuPk1pY2hhbCBTa3JpdmFuZWsgWzxhID0K aHJlZj0zRCJtYWlsdG86bXNrcml2YW5AcmVkaGF0LmNvbSIgPQpjbGFzcz0zRCIiPm1haWx0bzpt c2tyaXZhbkByZWRoYXQuY29tPC9hPl08c3BhbiA9CmNsYXNzPTNEIkFwcGxlLWNvbnZlcnRlZC1z cGFjZSI+Jm5ic3A7PC9zcGFuPjxiciBjbGFzcz0zRCIiPjwvc3Bhbj48YiA9CmNsYXNzPTNEIiI+ PHNwYW4gc3R5bGU9M0QiZm9udC1zaXplOiAxMHB0OyIgY2xhc3M9M0QiIj49RTU9OEY9OTE9RTk9 ODA9ODE9RTY9Cj05Nz1CNj1FOT05Nz1CNDxzcGFuIGxhbmc9M0QiRU4tVVMiIGNsYXNzPTNEIiI+ Ojwvc3Bhbj48L3NwYW4+PC9iPjxzcGFuID0KbGFuZz0zRCJFTi1VUyIgc3R5bGU9M0QiZm9udC1z aXplOiAxMHB0OyIgY2xhc3M9M0QiIj48c3BhbiA9CmNsYXNzPTNEIkFwcGxlLWNvbnZlcnRlZC1z cGFjZSI+Jm5ic3A7PC9zcGFuPjIwMTY8L3NwYW4+PHNwYW4gPQpzdHlsZT0zRCJmb250LXNpemU6 IDEwcHQ7IiBjbGFzcz0zRCIiPj1FNT1COT1CNDxzcGFuIGxhbmc9M0QiRU4tVVMiID0KY2xhc3M9 M0QiIj43PC9zcGFuPj1FNj05Qz04ODxzcGFuIGxhbmc9M0QiRU4tVVMiID0KY2xhc3M9M0QiIj4y Njwvc3Bhbj49RTY9OTc9QTU8c3BhbiBsYW5nPTNEIkVOLVVTIiBjbGFzcz0zRCIiPjxzcGFuID0K Y2xhc3M9M0QiQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+NTowMDxiciBjbGFz cz0zRCIiPjwvc3Bhbj48YiA9CmNsYXNzPTNEIiI+PUU2PTk0PUI2PUU0PUJCPUI2PUU0PUJBPUJB PHNwYW4gbGFuZz0zRCJFTi1VUyIgPQpjbGFzcz0zRCIiPjo8L3NwYW4+PC9iPjxzcGFuIGxhbmc9 M0QiRU4tVVMiIGNsYXNzPTNEIiI+PHNwYW4gPQpjbGFzcz0zRCJBcHBsZS1jb252ZXJ0ZWQtc3Bh Y2UiPiZuYnNwOzwvc3Bhbj5saWZ1cWlvbmc8YnIgPQpjbGFzcz0zRCIiPjwvc3Bhbj48YiBjbGFz cz0zRCIiPj1FNj04QT04ND1FOT04MD04MTxzcGFuIGxhbmc9M0QiRU4tVVMiID0KY2xhc3M9M0Qi Ij46PC9zcGFuPjwvYj48c3BhbiBsYW5nPTNEIkVOLVVTIiBjbGFzcz0zRCIiPjxzcGFuID0KY2xh c3M9M0QiQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+dXNlcnM7IGRldmVsPGJy ID0KY2xhc3M9M0QiIj48L3NwYW4+PGIgY2xhc3M9M0QiIj49RTQ9Qjg9QkI9RTk9QTI9OTg8c3Bh biBsYW5nPTNEIkVOLVVTIiA9CmNsYXNzPTNEIiI+Ojwvc3Bhbj48L2I+PHNwYW4gbGFuZz0zRCJF Ti1VUyIgY2xhc3M9M0QiIj48c3BhbiA9CmNsYXNzPTNEIkFwcGxlLWNvbnZlcnRlZC1zcGFjZSI+ Jm5ic3A7PC9zcGFuPlJlOiBbb3ZpcnQtZGV2ZWxdIERlYnVnID0KdmRzbSA0LjAuMCByZXBvcnQg ZXJyb3I6IGxpYnZpcnQ6IFhNTC1SUEMgZXJyb3IgOiBGYWlsZWQgdG8gY29ubmVjdCA9CnNvY2tl dCB0byAnL3Zhci9ydW4vbGlidmlydC9saWJ2aXJ0LXNvY2snOiBQZXJtaXNzaW9uIGRlbmllZDxv OnAgPQpjbGFzcz0zRCIiPjwvbzpwPjwvc3Bhbj48L3NwYW4+PC9kaXY+PC9kaXY+PC9kaXY+PGRp diBzdHlsZT0zRCJtYXJnaW46ID0KMGNtIDBjbSAwLjAwMDFwdDsgZm9udC1zaXplOiAxMnB0OyBm b250LWZhbWlseTogPUU1PUFFPThCPUU0PUJEPTkzOyIgPQpjbGFzcz0zRCIiPjxzcGFuIGxhbmc9 M0QiRU4tVVMiIGNsYXNzPTNEIiI+PG86cCA9CmNsYXNzPTNEIiI+Jm5ic3A7PC9vOnA+PC9zcGFu PjwvZGl2PjxkaXYgY2xhc3M9M0QiIj48ZGl2IHN0eWxlPTNEIm1hcmdpbjogPQowY20gMGNtIDAu MDAwMXB0OyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiA9RTU9QUU9OEI9RTQ9QkQ9OTM7 IiA9CmNsYXNzPTNEIiI+PHNwYW4gbGFuZz0zRCJFTi1VUyIgY2xhc3M9M0QiIj48bzpwID0KY2xh c3M9M0QiIj4mbmJzcDs8L286cD48L3NwYW4+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0zRCIiPjxw ID0KY2xhc3M9M0QiTXNvTm9ybWFsIiBzdHlsZT0zRCJtYXJnaW46IDBjbSAwY20gMTJwdDsgZm9u dC1zaXplOiAxMnB0OyA9CmZvbnQtZmFtaWx5OiA9RTU9QUU9OEI9RTQ9QkQ9OTM7Ij48c3BhbiBs YW5nPTNEIkVOLVVTIiBjbGFzcz0zRCIiPjxiciA9CmNsYXNzPTNEIiI+T24gMjUgSnVsIDIwMTYs IGF0IDIxOjUwLCBTYW5kcm8gQm9uYXp6b2xhICZsdDs8YSA9CmhyZWY9M0QibWFpbHRvOnNib25h enpvQHJlZGhhdC5jb20iIHN0eWxlPTNEImNvbG9yOiBwdXJwbGU7ID0KdGV4dC1kZWNvcmF0aW9u OiB1bmRlcmxpbmU7IiBjbGFzcz0zRCIiPnNib25henpvQHJlZGhhdC5jb208L2E+Jmd0OyA9Cndy b3RlOjxvOnAgY2xhc3M9M0QiIj48L286cD48L3NwYW4+PC9wPjwvZGl2PjxibG9ja3F1b3RlID0K c3R5bGU9M0QibWFyZ2luLXRvcDogNXB0OyBtYXJnaW4tYm90dG9tOiA1cHQ7IiBjbGFzcz0zRCIi PjxkaXYgPQpjbGFzcz0zRCIiPjxwIHN0eWxlPTNEIm1hcmdpbi1yaWdodDogMGNtOyBtYXJnaW4t bGVmdDogMGNtOyBmb250LXNpemU6ID0KMTJwdDsgZm9udC1mYW1pbHk6ID1FNT1BRT04Qj1FND1C RD05MzsiIGNsYXNzPTNEIiI+PHNwYW4gbGFuZz0zRCJFTi1VUyIgPQpjbGFzcz0zRCIiPkFkZGlu ZyBzb21lIHBlb3BsZSBmcm9tIHZpcnQgdGVhbS48bzpwID0KY2xhc3M9M0QiIj48L286cD48L3Nw YW4+PC9wPjxwIHN0eWxlPTNEIm1hcmdpbi1yaWdodDogMGNtOyBtYXJnaW4tbGVmdDogPQowY207 IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ID1FNT1BRT04Qj1FND1CRD05MzsiIGNsYXNz PTNEIiI+PHNwYW4gPQpsYW5nPTNEIkVOLVVTIiBjbGFzcz0zRCIiPklsIDIzL0x1Zy8yMDE2IDEx OjQ0LCAibGlmdXFpb25nIiAmbHQ7PGEgPQpocmVmPTNEIm1haWx0bzpsaWZ1cWlvbmdAY25jbG91 ZHNlYy5jb20iIHN0eWxlPTNEImNvbG9yOiBwdXJwbGU7ID0KdGV4dC1kZWNvcmF0aW9uOiB1bmRl cmxpbmU7IiBjbGFzcz0zRCIiPmxpZnVxaW9uZ0BjbmNsb3Vkc2VjLmNvbTwvYT4mZ3Q7ID0KaGEg c2NyaXR0bzo8YnIgY2xhc3M9M0QiIj4mZ3Q7PGJyIGNsYXNzPTNEIiI+Jmd0OyBJIGRlYnVnZ2Vk IHZkc20gd2l0aCA9ClB5Q2hhcm0sIEFuZCBJIGxvZ2dlZCBvbiBteSBDZW50b3MgNy4yIHdpdGgg cm9vdCwgJm5ic3A7YW5kIGdldCBhbiBlcnJvciA9CmFzIGZvbGxvd3M6PGJyIGNsYXNzPTNEIiI+ Jmd0OzxiciBjbGFzcz0zRCIiPiZndDsgJm5ic3A7PGJyID0KY2xhc3M9M0QiIj4mZ3Q7PGJyIGNs YXNzPTNEIiI+Jmd0OyBQcm9ibGVtOjxiciBjbGFzcz0zRCIiPiZndDs8YnIgPQpjbGFzcz0zRCIi PiZndDsgJm5ic3A7PGJyIGNsYXNzPTNEIiI+Jmd0OzxiciBjbGFzcz0zRCIiPiZndDsgVHJhY2Vi YWNrID0KKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6PGJyIGNsYXNzPTNEIiI+Jmd0OzxiciBjbGFz cz0zRCIiPiZndDsgJm5ic3A7ID0KRmlsZSAiL3Vzci9zaGFyZS92ZHNtL3Zkc20iLCBsaW5lIDE0 OSwgaW4gcnVuPGJyIGNsYXNzPTNEIiI+Jmd0OzxiciA9CmNsYXNzPTNEIiI+Jmd0OyAmbmJzcDsm bmJzcDsmbmJzcDsgc2VydmVfY2xpZW50cyhsb2cpPGJyID0KY2xhc3M9M0QiIj4mZ3Q7PGJyIGNs YXNzPTNEIiI+Jmd0OyAmbmJzcDsgRmlsZSAiL3Vzci9zaGFyZS92ZHNtL3Zkc20iLCA9CmxpbmUg MTA0LCBpbiBzZXJ2ZV9jbGllbnRzPGJyIGNsYXNzPTNEIiI+Jmd0OzxiciBjbGFzcz0zRCIiPiZn dDsgPQombmJzcDsmbmJzcDsmbmJzcDsgY2lmID0zRCBjbGllbnRJRi5nZXRJbnN0YW5jZShpcnMs IGxvZywgc2NoZWR1bGVyKTxiciA9CmNsYXNzPTNEIiI+Jmd0OzxiciBjbGFzcz0zRCIiPiZndDsg Jm5ic3A7IEZpbGUgPQoiL3Vzci9zaGFyZS92ZHNtL2NsaWVudElGLnB5IiwgbGluZSAyMDQsIGlu IGdldEluc3RhbmNlPGJyID0KY2xhc3M9M0QiIj4mZ3Q7PGJyIGNsYXNzPTNEIiI+Jmd0OyAmbmJz cDsmbmJzcDsmbmJzcDsgY2xzLl9pbnN0YW5jZSA9M0QgPQpjbGllbnRJRihpcnMsIGxvZywgc2No ZWR1bGVyKTxiciBjbGFzcz0zRCIiPiZndDs8YnIgY2xhc3M9M0QiIj4mZ3Q7ID0KJm5ic3A7IEZp bGUgIi91c3Ivc2hhcmUvdmRzbS9jbGllbnRJRi5weSIsIGxpbmUgMTA2LCBpbiBfX2luaXRfXzxi ciA9CmNsYXNzPTNEIiI+Jmd0OzxiciBjbGFzcz0zRCIiPiZndDsgJm5ic3A7Jm5ic3A7Jm5ic3A7 IHNlY3JldC5jbGVhcigpPGJyID0KY2xhc3M9M0QiIj4mZ3Q7PGJyIGNsYXNzPTNEIiI+Jmd0OyAm bmJzcDsgRmlsZSA9CiIvdXNyL2xpYi9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy92ZHNtL3ZpcnQv c2VjcmV0LnB5IiwgbGluZSA5MiwgaW4gPQpjbGVhcjxiciBjbGFzcz0zRCIiPiZndDs8YnIgY2xh c3M9M0QiIj4mZ3Q7ICZuYnNwOyZuYnNwOyZuYnNwOyBjb24gPTNEID0KbGlidmlydGNvbm5lY3Rp b24uZ2V0KCk8YnIgY2xhc3M9M0QiIj4mZ3Q7PGJyIGNsYXNzPTNEIiI+Jmd0OyAmbmJzcDsgPQpG aWxlICIvdXNyL2xpYi9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy92ZHNtL2xpYnZpcnRjb25uZWN0 aW9uLnB5IiwgbGluZSA9CjE2MywgaW4gZ2V0PGJyIGNsYXNzPTNEIiI+Jmd0OzxiciBjbGFzcz0z RCIiPiZndDsgJm5ic3A7Jm5ic3A7Jm5ic3A7ID0KcGFzc3dvcmQpPGJyIGNsYXNzPTNEIiI+Jmd0 OzxiciBjbGFzcz0zRCIiPiZndDsgJm5ic3A7IEZpbGUgPQoiL3Vzci9saWIvcHl0aG9uMi43L3Np dGUtcGFja2FnZXMvdmRzbS9saWJ2aXJ0Y29ubmVjdGlvbi5weSIsIGxpbmUgOTksID0KaW4gb3Bl bl9jb25uZWN0aW9uPGJyIGNsYXNzPTNEIiI+Jmd0OzxiciBjbGFzcz0zRCIiPiZndDsgPQombmJz cDsmbmJzcDsmbmJzcDsgcmV0dXJuIHV0aWxzLnJldHJ5KGxpYnZpcnRPcGVuLCB0aW1lb3V0PTNE MTAsID0Kc2xlZXA9M0QwLjIpPGJyIGNsYXNzPTNEIiI+Jmd0OzxiciBjbGFzcz0zRCIiPiZndDsg Jm5ic3A7IEZpbGUgPQoiL3Vzci9saWIvcHl0aG9uMi43L3NpdGUtcGFja2FnZXMvdmRzbS91dGls cy5weSIsIGxpbmUgNTQ2LCBpbiByZXRyeTxiciA9CmNsYXNzPTNEIiI+Jmd0OzxiciBjbGFzcz0z RCIiPiZndDsgJm5ic3A7Jm5ic3A7Jm5ic3A7IHJldHVybiBmdW5jKCk8YnIgPQpjbGFzcz0zRCIi PiZndDs8YnIgY2xhc3M9M0QiIj4mZ3Q7ICZuYnNwOyBGaWxlID0KIi91c3IvbGliNjQvcHl0aG9u Mi43L3NpdGUtcGFja2FnZXMvbGlidmlydC5weSIsIGxpbmUgMTA1LCBpbiA9Cm9wZW5BdXRoPGJy IGNsYXNzPTNEIiI+Jmd0OzxiciBjbGFzcz0zRCIiPiZndDsgJm5ic3A7Jm5ic3A7Jm5ic3A7IGlm IHJldCA9CmlzIE5vbmU6cmFpc2UgbGlidmlydEVycm9yKCd2aXJDb25uZWN0T3BlbkF1dGgoKSBm YWlsZWQnKTxiciA9CmNsYXNzPTNEIiI+Jmd0OzxiciBjbGFzcz0zRCIiPiZndDsgbGlidmlydEVy cm9yOiBGYWlsZWQgdG8gY29ubmVjdCA9CnNvY2tldCB0byAnL3Zhci9ydW4vbGlidmlydC9saWJ2 aXJ0LXNvY2snOiBQZXJtaXNzaW9uIGRlbmllZDxiciA9CmNsYXNzPTNEIiI+Jmd0OzxiciBjbGFz cz0zRCIiPiZndDsgJm5ic3A7PGJyIGNsYXNzPTNEIiI+Jmd0OzxiciA9CmNsYXNzPTNEIiI+Jmd0 OyBJbnZlc3RpdGF0ZTo8YnIgY2xhc3M9M0QiIj4mZ3Q7PGJyIGNsYXNzPTNEIiI+Jmd0OyA9CkFj Y29yZGluZyB0byB0aGUgdHJhY2ViYWNrIGFib3ZlLCB0aGUgY29kZSBpbiBsaWJ2aXJ0LnB5IGFz IGJlbG93LCBhbmQgPQombmJzcDtvcy5nZXRldWlkKCkgZ2V0ID1FMj04MD05ODA9RTI9ODA9OTkg d2hpY2ggc2hvd3MgdGhlIGN1cnJlbnQgdXNlciA9CmlzIHJvb3Q7PG86cCBjbGFzcz0zRCIiPjwv bzpwPjwvc3Bhbj48L3A+PC9kaXY+PC9ibG9ja3F1b3RlPjxkaXYgPQpjbGFzcz0zRCIiPjxkaXYg c3R5bGU9M0QibWFyZ2luOiAwY20gMGNtIDAuMDAwMXB0OyBmb250LXNpemU6IDEycHQ7ID0KZm9u dC1mYW1pbHk6ID1FNT1BRT04Qj1FND1CRD05MzsiIGNsYXNzPTNEIiI+PHNwYW4gbGFuZz0zRCJF Ti1VUyIgPQpjbGFzcz0zRCIiPjxvOnAgY2xhc3M9M0QiIj4mbmJzcDs8L286cD48L3NwYW4+PC9k aXY+PC9kaXY+PGRpdiA9CnN0eWxlPTNEIm1hcmdpbjogMGNtIDBjbSAwLjAwMDFwdDsgZm9udC1z aXplOiAxMnB0OyBmb250LWZhbWlseTogPQo9RTU9QUU9OEI9RTQ9QkQ9OTM7IiBjbGFzcz0zRCIi PjxzcGFuIGxhbmc9M0QiRU4tVVMiIGNsYXNzPTNEIiI+dmRzbSBpcyA9Cm5vdCBzdXBwb3NlZCB0 byBiZSBydW4gdW5kZXIgcm9vdCB1c2VyLiBGb3IgZGVidWdnaW5nIHlvdSBzaG91bGQgZm9sbG93 ID0KdGhlIGRldmVsIHNldHVwIHdpa2kgYW5kIG5vdCBjaGFuZ2UgYSByZWd1bGFyIGhvc3QuJm5i c3A7PG86cCA9CmNsYXNzPTNEIiI+PC9vOnA+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9M0QiIj48 ZGl2IHN0eWxlPTNEIm1hcmdpbjogMGNtID0KMGNtIDAuMDAwMXB0OyBmb250LXNpemU6IDEycHQ7 IGZvbnQtZmFtaWx5OiA9RTU9QUU9OEI9RTQ9QkQ9OTM7IiA9CmNsYXNzPTNEIiI+PHNwYW4gbGFu Zz0zRCJFTi1VUyIgY2xhc3M9M0QiIj5EZXBlbmRzIHdoYXQgeW91IG1vZGlmaWVkLCA9Cml0J3Mg aW1wb3NzaWJsZSB0byBzYXkgZnJvbSB3aGF0IHlvdSBkZXNjcmliZWQuLi4uYnV0IGEgZ2VuZXJh bCBhZHZpY2UgPQppcyB5b3Ugc2ltcGx5IGRvbid0IGRvIHRoYXQ6KTxiciBjbGFzcz0zRCIiPjxi ciBjbGFzcz0zRCIiPjxvOnAgPQpjbGFzcz0zRCIiPjwvbzpwPjwvc3Bhbj48L2Rpdj48ZGl2IGNs YXNzPTNEIiI+PHAgc3R5bGU9M0QibWFyZ2luLXJpZ2h0OiA9CjBjbTsgbWFyZ2luLWxlZnQ6IDBj bTsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogPUU1PUFFPThCPUU0PUJEPTkzOyIgPQpj bGFzcz0zRCIiPjxzcGFuIGxhbmc9M0QiRU4tVVMiIGNsYXNzPTNEIiI+Jmd0OzxiciBjbGFzcz0z RCIiPiZndDsgPQombmJzcDs8YnIgY2xhc3M9M0QiIj4mZ3Q7PGJyIGNsYXNzPTNEIiI+Jmd0OyBk ZWYgb3BlbkF1dGgodXJpLCBhdXRoLCA9CmZsYWdzPTNEMCk6PGJyIGNsYXNzPTNEIiI+Jmd0Ozxi ciBjbGFzcz0zRCIiPiZndDsgPQombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsgI3ByaW50IG9zLmdldGV1aWQoKTxiciA9CmNsYXNzPTNEIiI+Jmd0OzxiciBj bGFzcz0zRCIiPiZndDsgJm5ic3A7Jm5ic3A7Jm5ic3A7IHJldCA9M0QgPQpsaWJ2aXJ0bW9kLnZp ckNvbm5lY3RPcGVuQXV0aCh1cmksIGF1dGgsIGZsYWdzKTxiciBjbGFzcz0zRCIiPiZndDs8YnIg PQpjbGFzcz0zRCIiPiZndDsgJm5ic3A7Jm5ic3A7Jm5ic3A7IGlmIHJldCBpcyBOb25lOnJhaXNl ID0KbGlidmlydEVycm9yKCd2aXJDb25uZWN0T3BlbkF1dGgoKSBmYWlsZWQnKTxiciBjbGFzcz0z RCIiPiZndDs8YnIgPQpjbGFzcz0zRCIiPiZndDsgcmV0dXJuIHZpckNvbm5lY3QoX29iaj0zRHJl dCk8YnIgY2xhc3M9M0QiIj4mZ3Q7PGJyID0KY2xhc3M9M0QiIj4mZ3Q7ICZuYnNwOzxiciBjbGFz cz0zRCIiPiZndDs8YnIgY2xhc3M9M0QiIj4mZ3Q7ID0KW3Jvb3RAc2VydmVyMTE3IGxpYnZpcnRd IyBsbCAvdmFyL3J1bi9saWJ2aXJ0L2xpYnZpcnQtc29jazxiciA9CmNsYXNzPTNEIiI+Jmd0Ozxi ciBjbGFzcz0zRCIiPiZndDsgc3J3eHJ3eC0tLS4gMSByb290IHFlbXUgMCBKdWwgMTkgPQoyMzo0 MyAvdmFyL3J1bi9saWJ2aXJ0L2xpYnZpcnQtc29jazxiciBjbGFzcz0zRCIiPiZndDs8YnIgY2xh c3M9M0QiIj4mZ3Q7ID0KJm5ic3A7PGJyIGNsYXNzPTNEIiI+Jmd0OzxiciBjbGFzcz0zRCIiPiZn dDsgQWNjb3JkaW5nIHRoYXQsIHJvb3Qgc2hvdWxkID0Kbm90IGdldCBhbiBQZXJtaXNzaW9uIGRl bmllZCBlcnJvciA/IEJ1dCB3aHk/PGJyIGNsYXNzPTNEIiI+Jmd0OzxiciA9CmNsYXNzPTNEIiI+ Jmd0OyAmbmJzcDs8YnIgY2xhc3M9M0QiIj4mZ3Q7PGJyIGNsYXNzPTNEIiI+Jmd0OyBBbmQgSSA9 CnNldGVuZm9yY2U9M0QwICwgYW5kIHN0aWxsIHNob3cgUGVyc3Npb24gZGVuaWVkIGVycm9yLjxi ciA9CmNsYXNzPTNEIiI+Jmd0OzxiciBjbGFzcz0zRCIiPiZndDsgJm5ic3A7PGJyIGNsYXNzPTNE IiI+Jmd0OzxiciA9CmNsYXNzPTNEIiI+Jmd0OyBXaGF0PUUyPTgwPTk5cyB0aGUgcmVhc29uPyBB bmQgaG93IHRvIHNvbHZlIGl0PzxiciA9CmNsYXNzPTNEIiI+Jmd0OzxiciBjbGFzcz0zRCIiPiZn dDsgJm5ic3A7PGJyIGNsYXNzPTNEIiI+Jmd0OzxiciA9CmNsYXNzPTNEIiI+Jmd0OyBUaGFuayB5 b3UuPGJyIGNsYXNzPTNEIiI+Jmd0OzxiciBjbGFzcz0zRCIiPiZndDs8YnIgPQpjbGFzcz0zRCIi PiZndDsgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX188YnIg PQpjbGFzcz0zRCIiPiZndDsgRGV2ZWwgbWFpbGluZyBsaXN0PGJyIGNsYXNzPTNEIiI+Jmd0Ozxz cGFuID0KY2xhc3M9M0QiQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+PGEgPQpo cmVmPTNEIm1haWx0bzpEZXZlbEBvdmlydC5vcmciIHN0eWxlPTNEImNvbG9yOiBwdXJwbGU7IHRl eHQtZGVjb3JhdGlvbjogPQp1bmRlcmxpbmU7IiBjbGFzcz0zRCIiPkRldmVsQG92aXJ0Lm9yZzwv YT48YnIgY2xhc3M9M0QiIj4mZ3Q7PHNwYW4gPQpjbGFzcz0zRCJBcHBsZS1jb252ZXJ0ZWQtc3Bh Y2UiPiZuYnNwOzwvc3Bhbj48YSA9CmhyZWY9M0QiaHR0cDovL2xpc3RzLm92aXJ0Lm9yZy9tYWls bWFuL2xpc3RpbmZvL2RldmVsIiBzdHlsZT0zRCJjb2xvcjogPQpwdXJwbGU7IHRleHQtZGVjb3Jh dGlvbjogdW5kZXJsaW5lOyIgPQpjbGFzcz0zRCIiPmh0dHA6Ly9saXN0cy5vdmlydC5vcmcvbWFp bG1hbi9saXN0aW5mby9kZXZlbDwvYT48L3NwYW4+PC9wPjwvZD0KaXY+PC9kaXY+PC9kaXY+PC9k aXY+PC9ibG9ja3F1b3RlPjwvZGl2PjxiciBjbGFzcz0zRCIiPjwvYm9keT48L2h0bWw+PQoKLS1B cHBsZS1NYWlsPV9BNTg3MDVCQi05NEYwLTQxQjMtOTEyRS1DODE4NzE4MjBEOTUtLQo= --===============4473166451229507931==-- From lifuqiong at cncloudsec.com Tue Jul 26 02:07:49 2016 Content-Type: multipart/mixed; boundary="===============8471773513398979987==" MIME-Version: 1.0 From: lifuqiong To: devel at ovirt.org Subject: =?utf-8?q?=5Bovirt-devel=5D_=E7=AD=94=E5=A4=8D=3A__Debug_vdsm_4=2E0=2E0_r?= =?utf-8?q?eport_error=3A_libvirt=3A_XML-RPC_error_=3A_Failed_to_connect_s?= =?utf-8?q?ocket_to_=27/var/run/libvirt/libvirt-sock=27=3A_Permission_deni?= =?utf-8?q?ed?= Date: Tue, 26 Jul 2016 14:02:33 +0800 Message-ID: <00c801d1e703$4d541810$e7fc4830$@cncloudsec.com> In-Reply-To: 0496C515-5866-4704-8A77-B126E727F2EC@redhat.com --===============8471773513398979987== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable This is a multipart message in MIME format. ------=3D_NextPart_000_00C9_01D1E746.5B825490 Content-Type: text/plain; charset=3D"utf-8" Content-Transfer-Encoding: quoted-printable =3D20 I do make a mistake because I just print os.getuid() show the user root; = =3D but os.geteuid() show the current user is still vdsm; =3D20 Anyway , I still don=3DE2=3D80=3D99t know how to debug vdsm, I cann=3DE2=3D= 80=3D99t =3D log in to centos with user VDSM, because I don=3DE2=3D80=3D99t know the pas= swd =3D of user vdsm and if I changed the password, the service vdsmd will =3D cann=3DE2=3D80=3D99t start. =3D20 You told me =3DE2=3D80=3D9Cshould follow the devel setup wiki=3DE2=3D80=3D9= D , =3D what=3DE2=3D80=3D99s the true link of vdsm devel setup wiki ? I can=3DE2= =3D80=3D99t =3D get useful information in ovirt.org or google. =3D20 =3D20 Thank you =3D20 =3DE5=3D8F=3D91=3DE4=3DBB=3DB6=3DE4=3DBA=3DBA: Michal Skrivanek =3D [mailto:mskrivan(a)redhat.com]=3D20 =3DE5=3D8F=3D91=3DE9=3D80=3D81=3DE6=3D97=3DB6=3DE9=3D97=3DB4: 2016=3DE5=3DB= 9=3DB47=3DE6=3D9C=3D8826=3DE6=3D97=3DA5 =3D 5:00 =3DE6=3D94=3DB6=3DE4=3DBB=3DB6=3DE4=3DBA=3DBA: lifuqiong =3DE6=3D8A=3D84=3DE9=3D80=3D81: users; devel =3DE4=3DB8=3DBB=3DE9=3DA2=3D98: Re: [ovirt-devel] Debug vdsm 4.0.0 report e= rror: =3D libvirt: XML-RPC error : Failed to connect socket to =3D '/var/run/libvirt/libvirt-sock': Permission denied =3D20 =3D20 On 25 Jul 2016, at 21:50, Sandro Bonazzola wrote: Adding some people from virt team. Il 23/Lug/2016 11:44, "lifuqiong" ha scritto: > > I debugged vdsm with PyCharm, And I logged on my Centos 7.2 with root, = =3D and get an error as follows: > > =3D20 > > Problem: > > =3D20 > > Traceback (most recent call last): > > File "/usr/share/vdsm/vdsm", line 149, in run > > serve_clients(log) > > File "/usr/share/vdsm/vdsm", line 104, in serve_clients > > cif =3D3D clientIF.getInstance(irs, log, scheduler) > > File "/usr/share/vdsm/clientIF.py", line 204, in getInstance > > cls._instance =3D3D clientIF(irs, log, scheduler) > > File "/usr/share/vdsm/clientIF.py", line 106, in __init__ > > secret.clear() > > File "/usr/lib/python2.7/site-packages/vdsm/virt/secret.py", line =3D 92, in clear > > con =3D3D libvirtconnection.get() > > File "/usr/lib/python2.7/site-packages/vdsm/libvirtconnection.py", =3D line 163, in get > > password) > > File "/usr/lib/python2.7/site-packages/vdsm/libvirtconnection.py", =3D line 99, in open_connection > > return utils.retry(libvirtOpen, timeout=3D3D10, sleep=3D3D0.2) > > File "/usr/lib/python2.7/site-packages/vdsm/utils.py", line 546, in =3D retry > > return func() > > File "/usr/lib64/python2.7/site-packages/libvirt.py", line 105, in =3D openAuth > > if ret is None:raise libvirtError('virConnectOpenAuth() failed') > > libvirtError: Failed to connect socket to =3D '/var/run/libvirt/libvirt-sock': Permission denied > > =3D20 > > Investitate: > > According to the traceback above, the code in libvirt.py as below, and = =3D os.geteuid() get =3DE2=3D80=3D980=3DE2=3D80=3D99 which shows the current u= ser is =3D root; =3D20 vdsm is not supposed to be run under root user. For debugging you should = =3D follow the devel setup wiki and not change a regular host.=3D20 Depends what you modified, it's impossible to say from what you =3D described....but a general advice is you simply don't do that:) > > =3D20 > > def openAuth(uri, auth, flags=3D3D0): > > #print os.geteuid() > > ret =3D3D libvirtmod.virConnectOpenAuth(uri, auth, flags) > > if ret is None:raise libvirtError('virConnectOpenAuth() failed') > > return virConnect(_obj=3D3Dret) > > =3D20 > > [root(a)server117 libvirt]# ll /var/run/libvirt/libvirt-sock > > srwxrwx---. 1 root qemu 0 Jul 19 23:43 /var/run/libvirt/libvirt-sock > > =3D20 > > According that, root should not get an Permission denied error ? But =3D why? > > =3D20 > > And I setenforce=3D3D0 , and still show Perssion denied error. > > =3D20 > > What=3DE2=3D80=3D99s the reason? And how to solve it? > > =3D20 > > Thank you. > > > _______________________________________________ > Devel mailing list > Devel(a)ovirt.org > http://lists.ovirt.org/mailman/listinfo/devel ------=3D_NextPart_000_00C9_01D1E746.5B825490 Content-Type: text/html; charset=3D"utf-8" Content-Transfer-Encoding: quoted-printable

 

I do make a mistake because I just print os.getuid() show the user =3D root; but os.geteuid() show the current user is still =3D vdsm;

 

Anyway , I still don=3DE2=3D80=3D99t know how to debug vdsm, I =3D cann=3DE2=3D80=3D99t log in to centos with user VDSM, because I don=3DE2=3D= 80=3D99t =3D know the passwd of user vdsm and if I changed the password, the service =3D vdsmd will cann=3DE2=3D80=3D99t start.

 

You told me =3DE2=3D80=3D9Cshould follow the= =3D devel setup wiki=3DE2=3D80=3D9D , what=3DE2=3D80=3D99s the true link of vdsm devel setup= wiki =3D ?=3DC2=3DA0 I can=3DE2=3D80=3D99t get useful information in ovirt.org or = =3D google.

 

 

Thank you

 

=3DE5=3D8F=3D91=3DE4=3DBB=3DB6=3DE4=3DBA=3DBA<= span =3D lang=3D3DEN-US>: Michal Skrivanek =3D [mailto:mskrivan(a)redhat.com]
=3DE5=3D8F=3D91=3DE9=3D80=3D81=3DE6=3D97=3DB6= =3DE9=3D97=3DB4: 2016=3DE5=3DB9=3DB47=3DE6=3D9C=3D8826=3DE6= =3D97=3DA5 5:00
=3DE6=3D94=3DB6=3DE4=3DBB=3DB6=3DE4=3DBA= =3DBA: =3D lifuqiong
=3DE6=3D8A=3D84=3DE9=3D80=3D81: users; =3D devel
=3DE4=3DB8=3DBB=3DE9=3DA2=3D98: Re: [ovirt-devel] Debug = =3D vdsm 4.0.0 report error: libvirt: XML-RPC error : Failed to connect =3D socket to '/var/run/libvirt/libvirt-sock': Permission =3D denied

 

<= p =3D class=3D3DMsoNormal> 


On 25 Jul 2016, a= t =3D 21:50, Sandro Bonazzola <sbonazzo(a)redhat.com> =3D wrote:

Adding some people from virt =3D team.

Il 23/Lug/2016 11:44, = =3D "lifuqiong" <lifuqiong(a)cncloudsec.com= >=3D ha scritto:
>
> I debugged vdsm with PyCharm, And I logged =3D on my Centos 7.2 with root,  and get an error as =3D follows:
>
>  
>
> Problem:
>
> = =3D  
>
> Traceback (most recent call =3D last):
>
>   File "/usr/share/vdsm/vdsm", =3D line 149, in run
>
>     =3D serve_clients(log)
>
>   File =3D "/usr/share/vdsm/vdsm", line 104, in =3D serve_clients
>
>     cif =3D3D =3D clientIF.getInstance(irs, log, scheduler)
>
>   File =3D "/usr/share/vdsm/clientIF.py", line 204, in =3D getInstance
>
>     cls._instance =3D3D =3D clientIF(irs, log, scheduler)
>
>   File =3D "/usr/share/vdsm/clientIF.py", line 106, in =3D __init__
>
>     =3D secret.clear()
>
>   File =3D "/usr/lib/python2.7/site-packages/vdsm/virt/secret.py", line =3D 92, in clear
>
>     con =3D3D =3D libvirtconnection.get()
>
>   File =3D "/usr/lib/python2.7/site-packages/vdsm/libvirtconnection.py", =3D line 163, in get
>
>     =3D password)
>
>   File =3D "/usr/lib/python2.7/site-packages/vdsm/libvirtconnection.py", =3D line 99, in open_connection
>
>     return =3D utils.retry(libvirtOpen, timeout=3D3D10, sleep=3D3D0.2)
>
> =3D   File "/usr/lib/python2.7/site-packages/vdsm/utils.py", =3D line 546, in retry
>
>     return =3D func()
>
>   File =3D "/usr/lib64/python2.7/site-packages/libvirt.py", line 105, in =3D openAuth
>
>     if ret is None:raise =3D libvirtError('virConnectOpenAuth() failed')
>
> =3D libvirtError: Failed to connect socket to =3D '/var/run/libvirt/libvirt-sock': Permission denied
>
> =3D  
>
> Investitate:
>
> According to the =3D traceback above, the code in libvirt.py as below, and  os.geteuid() = =3D get =3DE2=3D80=3D980=3DE2=3D80=3D99 which shows the current user is =3D root;

 

vdsm is not supposed to be run =3D under root user. For debugging you should follow the devel setup wiki =3D and not change a regular host. 

Depends what you modified, it's = =3D impossible to say from what you described....but a general advice is you = =3D simply don't do that:)

>
>  
>
> def openAuth(uri, auth, = =3D flags=3D3D0):
>
> =3D          #print =3D os.geteuid()
>
>     ret =3D3D =3D libvirtmod.virConnectOpenAuth(uri, auth, flags)
>
> =3D     if ret is None:raise =3D libvirtError('virConnectOpenAuth() failed')
>
> return =3D virConnect(_obj=3D3Dret)
>
>  
>
> =3D [root(a)server117 libvirt]# ll =3D /var/run/libvirt/libvirt-sock
>
> srwxrwx---. 1 root qemu 0 =3D Jul 19 23:43 /var/run/libvirt/libvirt-sock
>
> =3D  
>
> According that, root should not get an Permission = =3D denied error ? But why?
>
>  
>
> And I =3D setenforce=3D3D0 , and still show Perssion denied error.
>
> = =3D  
>
> What=3DE2=3D80=3D99s the reason? And how to solve = =3D it?
>
>  
>
> Thank =3D you.
>
>
> =3D _______________________________________________
> Devel mailing =3D list
> Devel(a)ovirt.org
> http://lists.ovirt= =3D .org/mailman/listinfo/devel

------=3D_NextPart_000_00C9_01D1E746.5B825490-- --===============8471773513398979987== Content-Type: multipart/alternative MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.bin" VGhpcyBpcyBhIG11bHRpcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgoKLS0tLS0tPV9OZXh0 UGFydF8wMDBfMDBDOV8wMUQxRTc0Ni41QjgyNTQ5MApDb250ZW50LVR5cGU6IHRleHQvcGxhaW47 CgljaGFyc2V0PSJ1dGYtOCIKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50 YWJsZQoKPTIwCgpJIGRvIG1ha2UgYSBtaXN0YWtlIGJlY2F1c2UgSSBqdXN0IHByaW50IG9zLmdl dHVpZCgpIHNob3cgdGhlIHVzZXIgcm9vdDsgPQpidXQgb3MuZ2V0ZXVpZCgpIHNob3cgdGhlIGN1 cnJlbnQgdXNlciBpcyBzdGlsbCB2ZHNtOwoKPTIwCgpBbnl3YXkgLCBJIHN0aWxsIGRvbj1FMj04 MD05OXQga25vdyBob3cgdG8gZGVidWcgdmRzbSwgSSBjYW5uPUUyPTgwPTk5dCA9CmxvZyBpbiB0 byBjZW50b3Mgd2l0aCB1c2VyIFZEU00sIGJlY2F1c2UgSSBkb249RTI9ODA9OTl0IGtub3cgdGhl IHBhc3N3ZCA9Cm9mIHVzZXIgdmRzbSBhbmQgaWYgSSBjaGFuZ2VkIHRoZSBwYXNzd29yZCwgdGhl IHNlcnZpY2UgdmRzbWQgd2lsbCA9CmNhbm49RTI9ODA9OTl0IHN0YXJ0LgoKPTIwCgpZb3UgdG9s ZCBtZSA9RTI9ODA9OUNzaG91bGQgZm9sbG93IHRoZSBkZXZlbCBzZXR1cCB3aWtpPUUyPTgwPTlE ICwgPQp3aGF0PUUyPTgwPTk5cyB0aGUgdHJ1ZSBsaW5rIG9mIHZkc20gZGV2ZWwgc2V0dXAgd2lr aSA/ICBJIGNhbj1FMj04MD05OXQgPQpnZXQgdXNlZnVsIGluZm9ybWF0aW9uIGluIG92aXJ0Lm9y ZyBvciBnb29nbGUuCgo9MjAKCj0yMAoKVGhhbmsgeW91Cgo9MjAKCj1FNT04Rj05MT1FND1CQj1C Nj1FND1CQT1CQTogTWljaGFsIFNrcml2YW5layA9ClttYWlsdG86bXNrcml2YW5AcmVkaGF0LmNv bV09MjAKPUU1PThGPTkxPUU5PTgwPTgxPUU2PTk3PUI2PUU5PTk3PUI0OiAyMDE2PUU1PUI5PUI0 Nz1FNj05Qz04ODI2PUU2PTk3PUE1ID0KNTowMAo9RTY9OTQ9QjY9RTQ9QkI9QjY9RTQ9QkE9QkE6 IGxpZnVxaW9uZwo9RTY9OEE9ODQ9RTk9ODA9ODE6IHVzZXJzOyBkZXZlbAo9RTQ9Qjg9QkI9RTk9 QTI9OTg6IFJlOiBbb3ZpcnQtZGV2ZWxdIERlYnVnIHZkc20gNC4wLjAgcmVwb3J0IGVycm9yOiA9 CmxpYnZpcnQ6IFhNTC1SUEMgZXJyb3IgOiBGYWlsZWQgdG8gY29ubmVjdCBzb2NrZXQgdG8gPQon L3Zhci9ydW4vbGlidmlydC9saWJ2aXJ0LXNvY2snOiBQZXJtaXNzaW9uIGRlbmllZAoKPTIwCgo9 MjAKCgpPbiAyNSBKdWwgMjAxNiwgYXQgMjE6NTAsIFNhbmRybyBCb25henpvbGEgPHNib25henpv QHJlZGhhdC5jb20+IHdyb3RlOgoKQWRkaW5nIHNvbWUgcGVvcGxlIGZyb20gdmlydCB0ZWFtLgoK SWwgMjMvTHVnLzIwMTYgMTE6NDQsICJsaWZ1cWlvbmciIDxsaWZ1cWlvbmdAY25jbG91ZHNlYy5j b20+IGhhIHNjcml0dG86Cj4KPiBJIGRlYnVnZ2VkIHZkc20gd2l0aCBQeUNoYXJtLCBBbmQgSSBs b2dnZWQgb24gbXkgQ2VudG9zIDcuMiB3aXRoIHJvb3QsID0KIGFuZCBnZXQgYW4gZXJyb3IgYXMg Zm9sbG93czoKPgo+ID0yMAo+Cj4gUHJvYmxlbToKPgo+ID0yMAo+Cj4gVHJhY2ViYWNrIChtb3N0 IHJlY2VudCBjYWxsIGxhc3QpOgo+Cj4gICBGaWxlICIvdXNyL3NoYXJlL3Zkc20vdmRzbSIsIGxp bmUgMTQ5LCBpbiBydW4KPgo+ICAgICBzZXJ2ZV9jbGllbnRzKGxvZykKPgo+ICAgRmlsZSAiL3Vz ci9zaGFyZS92ZHNtL3Zkc20iLCBsaW5lIDEwNCwgaW4gc2VydmVfY2xpZW50cwo+Cj4gICAgIGNp ZiA9M0QgY2xpZW50SUYuZ2V0SW5zdGFuY2UoaXJzLCBsb2csIHNjaGVkdWxlcikKPgo+ICAgRmls ZSAiL3Vzci9zaGFyZS92ZHNtL2NsaWVudElGLnB5IiwgbGluZSAyMDQsIGluIGdldEluc3RhbmNl Cj4KPiAgICAgY2xzLl9pbnN0YW5jZSA9M0QgY2xpZW50SUYoaXJzLCBsb2csIHNjaGVkdWxlcikK Pgo+ICAgRmlsZSAiL3Vzci9zaGFyZS92ZHNtL2NsaWVudElGLnB5IiwgbGluZSAxMDYsIGluIF9f aW5pdF9fCj4KPiAgICAgc2VjcmV0LmNsZWFyKCkKPgo+ICAgRmlsZSAiL3Vzci9saWIvcHl0aG9u Mi43L3NpdGUtcGFja2FnZXMvdmRzbS92aXJ0L3NlY3JldC5weSIsIGxpbmUgPQo5MiwgaW4gY2xl YXIKPgo+ICAgICBjb24gPTNEIGxpYnZpcnRjb25uZWN0aW9uLmdldCgpCj4KPiAgIEZpbGUgIi91 c3IvbGliL3B5dGhvbjIuNy9zaXRlLXBhY2thZ2VzL3Zkc20vbGlidmlydGNvbm5lY3Rpb24ucHki LCA9CmxpbmUgMTYzLCBpbiBnZXQKPgo+ICAgICBwYXNzd29yZCkKPgo+ICAgRmlsZSAiL3Vzci9s aWIvcHl0aG9uMi43L3NpdGUtcGFja2FnZXMvdmRzbS9saWJ2aXJ0Y29ubmVjdGlvbi5weSIsID0K bGluZSA5OSwgaW4gb3Blbl9jb25uZWN0aW9uCj4KPiAgICAgcmV0dXJuIHV0aWxzLnJldHJ5KGxp YnZpcnRPcGVuLCB0aW1lb3V0PTNEMTAsIHNsZWVwPTNEMC4yKQo+Cj4gICBGaWxlICIvdXNyL2xp Yi9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy92ZHNtL3V0aWxzLnB5IiwgbGluZSA1NDYsIGluID0K cmV0cnkKPgo+ICAgICByZXR1cm4gZnVuYygpCj4KPiAgIEZpbGUgIi91c3IvbGliNjQvcHl0aG9u Mi43L3NpdGUtcGFja2FnZXMvbGlidmlydC5weSIsIGxpbmUgMTA1LCBpbiA9Cm9wZW5BdXRoCj4K PiAgICAgaWYgcmV0IGlzIE5vbmU6cmFpc2UgbGlidmlydEVycm9yKCd2aXJDb25uZWN0T3BlbkF1 dGgoKSBmYWlsZWQnKQo+Cj4gbGlidmlydEVycm9yOiBGYWlsZWQgdG8gY29ubmVjdCBzb2NrZXQg dG8gPQonL3Zhci9ydW4vbGlidmlydC9saWJ2aXJ0LXNvY2snOiBQZXJtaXNzaW9uIGRlbmllZAo+ Cj4gPTIwCj4KPiBJbnZlc3RpdGF0ZToKPgo+IEFjY29yZGluZyB0byB0aGUgdHJhY2ViYWNrIGFi b3ZlLCB0aGUgY29kZSBpbiBsaWJ2aXJ0LnB5IGFzIGJlbG93LCBhbmQgPQogb3MuZ2V0ZXVpZCgp IGdldCA9RTI9ODA9OTgwPUUyPTgwPTk5IHdoaWNoIHNob3dzIHRoZSBjdXJyZW50IHVzZXIgaXMg PQpyb290OwoKPTIwCgp2ZHNtIGlzIG5vdCBzdXBwb3NlZCB0byBiZSBydW4gdW5kZXIgcm9vdCB1 c2VyLiBGb3IgZGVidWdnaW5nIHlvdSBzaG91bGQgPQpmb2xsb3cgdGhlIGRldmVsIHNldHVwIHdp a2kgYW5kIG5vdCBjaGFuZ2UgYSByZWd1bGFyIGhvc3QuPTIwCgpEZXBlbmRzIHdoYXQgeW91IG1v ZGlmaWVkLCBpdCdzIGltcG9zc2libGUgdG8gc2F5IGZyb20gd2hhdCB5b3UgPQpkZXNjcmliZWQu Li4uYnV0IGEgZ2VuZXJhbCBhZHZpY2UgaXMgeW91IHNpbXBseSBkb24ndCBkbyB0aGF0OikKCgoK Pgo+ID0yMAo+Cj4gZGVmIG9wZW5BdXRoKHVyaSwgYXV0aCwgZmxhZ3M9M0QwKToKPgo+ICAgICAg ICAgICNwcmludCBvcy5nZXRldWlkKCkKPgo+ICAgICByZXQgPTNEIGxpYnZpcnRtb2QudmlyQ29u bmVjdE9wZW5BdXRoKHVyaSwgYXV0aCwgZmxhZ3MpCj4KPiAgICAgaWYgcmV0IGlzIE5vbmU6cmFp c2UgbGlidmlydEVycm9yKCd2aXJDb25uZWN0T3BlbkF1dGgoKSBmYWlsZWQnKQo+Cj4gcmV0dXJu IHZpckNvbm5lY3QoX29iaj0zRHJldCkKPgo+ID0yMAo+Cj4gW3Jvb3RAc2VydmVyMTE3IGxpYnZp cnRdIyBsbCAvdmFyL3J1bi9saWJ2aXJ0L2xpYnZpcnQtc29jawo+Cj4gc3J3eHJ3eC0tLS4gMSBy b290IHFlbXUgMCBKdWwgMTkgMjM6NDMgL3Zhci9ydW4vbGlidmlydC9saWJ2aXJ0LXNvY2sKPgo+ ID0yMAo+Cj4gQWNjb3JkaW5nIHRoYXQsIHJvb3Qgc2hvdWxkIG5vdCBnZXQgYW4gUGVybWlzc2lv biBkZW5pZWQgZXJyb3IgPyBCdXQgPQp3aHk/Cj4KPiA9MjAKPgo+IEFuZCBJIHNldGVuZm9yY2U9 M0QwICwgYW5kIHN0aWxsIHNob3cgUGVyc3Npb24gZGVuaWVkIGVycm9yLgo+Cj4gPTIwCj4KPiBX aGF0PUUyPTgwPTk5cyB0aGUgcmVhc29uPyBBbmQgaG93IHRvIHNvbHZlIGl0Pwo+Cj4gPTIwCj4K PiBUaGFuayB5b3UuCj4KPgo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCj4gRGV2ZWwgbWFpbGluZyBsaXN0Cj4gRGV2ZWxAb3ZpcnQub3JnCj4gaHR0cDov L2xpc3RzLm92aXJ0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RldmVsCgoKLS0tLS0tPV9OZXh0UGFy dF8wMDBfMDBDOV8wMUQxRTc0Ni41QjgyNTQ5MApDb250ZW50LVR5cGU6IHRleHQvaHRtbDsKCWNo YXJzZXQ9InV0Zi04IgpDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxl Cgo8aHRtbCB4bWxuczp2PTNEInVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206dm1sIiA9CnhtbG5z Om89M0QidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIiA9CnhtbG5zOnc9 M0QidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIgPQp4bWxuczptPTNEImh0 dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDQvMTIvb21tbCIgPQp4bWxucz0z RCJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj48aGVhZD48bWV0YSA9Cmh0dHAtZXF1 aXY9M0RDb250ZW50LVR5cGUgY29udGVudD0zRCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9M0R1dGYtOCI+ PG1ldGEgPQpuYW1lPTNER2VuZXJhdG9yIGNvbnRlbnQ9M0QiTWljcm9zb2Z0IFdvcmQgMTQgKGZp bHRlcmVkID0KbWVkaXVtKSI+PHN0eWxlPjwhLS0KLyogRm9udCBEZWZpbml0aW9ucyAqLwpAZm9u dC1mYWNlCgl7Zm9udC1mYW1pbHk6PUU1PUFFPThCPUU0PUJEPTkzOwoJcGFub3NlLTE6MiAxIDYg MCAzIDEgMSAxIDEgMTt9CkBmb250LWZhY2UKCXtmb250LWZhbWlseTo9RTU9QUU9OEI9RTQ9QkQ9 OTM7CglwYW5vc2UtMToyIDEgNiAwIDMgMSAxIDEgMSAxO30KQGZvbnQtZmFjZQoJe2ZvbnQtZmFt aWx5OkNhbGlicmk7CglwYW5vc2UtMToyIDE1IDUgMiAyIDIgNCAzIDIgNDt9CkBmb250LWZhY2UK CXtmb250LWZhbWlseToiXEA9RTU9QUU9OEI9RTQ9QkQ9OTMiOwoJcGFub3NlLTE6MiAxIDYgMCAz IDEgMSAxIDEgMTt9Ci8qIFN0eWxlIERlZmluaXRpb25zICovCnAuTXNvTm9ybWFsLCBsaS5Nc29O b3JtYWwsIGRpdi5Nc29Ob3JtYWwKCXttYXJnaW46MGNtOwoJbWFyZ2luLWJvdHRvbTouMDAwMXB0 OwoJZm9udC1zaXplOjEyLjBwdDsKCWZvbnQtZmFtaWx5Oj1FNT1BRT04Qj1FND1CRD05Mzt9CmE6 bGluaywgc3Bhbi5Nc29IeXBlcmxpbmsKCXttc28tc3R5bGUtcHJpb3JpdHk6OTk7Cgljb2xvcjpi bHVlOwoJdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9CmE6dmlzaXRlZCwgc3Bhbi5Nc29IeXBl cmxpbmtGb2xsb3dlZAoJe21zby1zdHlsZS1wcmlvcml0eTo5OTsKCWNvbG9yOnB1cnBsZTsKCXRl eHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQpwCgl7bXNvLXN0eWxlLXByaW9yaXR5Ojk5OwoJbXNv LW1hcmdpbi10b3AtYWx0OmF1dG87CgltYXJnaW4tcmlnaHQ6MGNtOwoJbXNvLW1hcmdpbi1ib3R0 b20tYWx0OmF1dG87CgltYXJnaW4tbGVmdDowY207Cglmb250LXNpemU6MTIuMHB0OwoJZm9udC1m YW1pbHk6PUU1PUFFPThCPUU0PUJEPTkzO30Kc3Bhbi5FbWFpbFN0eWxlMTgKCXttc28tc3R5bGUt dHlwZTpwZXJzb25hbC1yZXBseTsKCWZvbnQtZmFtaWx5OiJDYWxpYnJpIiwic2Fucy1zZXJpZiI7 Cgljb2xvcjojMUY0OTdEO30KLk1zb0NocERlZmF1bHQKCXttc28tc3R5bGUtdHlwZTpleHBvcnQt b25seTsKCWZvbnQtc2l6ZToxMC4wcHQ7fQpAcGFnZSBXb3JkU2VjdGlvbjEKCXtzaXplOjYxMi4w cHQgNzkyLjBwdDsKCW1hcmdpbjo3Mi4wcHQgOTAuMHB0IDcyLjBwdCA5MC4wcHQ7fQpkaXYuV29y ZFNlY3Rpb24xCgl7cGFnZTpXb3JkU2VjdGlvbjE7fQotLT48L3N0eWxlPjwhLS1baWYgZ3RlIG1z byA5XT48eG1sPgo8bzpzaGFwZWRlZmF1bHRzIHY6ZXh0PTNEImVkaXQiIHNwaWRtYXg9M0QiMTAy NiIgLz4KPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CjxvOnNoYXBl bGF5b3V0IHY6ZXh0PTNEImVkaXQiPgo8bzppZG1hcCB2OmV4dD0zRCJlZGl0IiBkYXRhPTNEIjEi IC8+CjwvbzpzaGFwZWxheW91dD48L3htbD48IVtlbmRpZl0tLT48L2hlYWQ+PGJvZHkgbGFuZz0z RFpILUNOIGxpbms9M0RibHVlID0Kdmxpbms9M0RwdXJwbGU+PGRpdiBjbGFzcz0zRFdvcmRTZWN0 aW9uMT48cCBjbGFzcz0zRE1zb05vcm1hbD48c3BhbiA9Cmxhbmc9M0RFTi1VUyA9CnN0eWxlPTNE J2ZvbnQtc2l6ZToxMC41cHQ7Zm9udC1mYW1pbHk6IkNhbGlicmkiLCJzYW5zLXNlcmlmIjtjb2xv cjojMUY0OTc9CkQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD48cCBjbGFzcz0zRE1zb05v cm1hbD48c3BhbiBsYW5nPTNERU4tVVMgPQpzdHlsZT0zRCdmb250LXNpemU6MTAuNXB0O2ZvbnQt ZmFtaWx5OiJDYWxpYnJpIiwic2Fucy1zZXJpZiI7Y29sb3I6IzFGNDk3PQpEJz5JIGRvIG1ha2Ug YSBtaXN0YWtlIGJlY2F1c2UgSSBqdXN0IHByaW50IG9zLmdldHVpZCgpIHNob3cgdGhlIHVzZXIg PQpyb290OyBidXQgb3MuZ2V0ZXVpZCgpIHNob3cgdGhlIGN1cnJlbnQgdXNlciBpcyBzdGlsbCA9 CnZkc207PG86cD48L286cD48L3NwYW4+PC9wPjxwIGNsYXNzPTNETXNvTm9ybWFsPjxzcGFuIGxh bmc9M0RFTi1VUyA9CnN0eWxlPTNEJ2ZvbnQtc2l6ZToxMC41cHQ7Zm9udC1mYW1pbHk6IkNhbGli cmkiLCJzYW5zLXNlcmlmIjtjb2xvcjojMUY0OTc9CkQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFu PjwvcD48cCBjbGFzcz0zRE1zb05vcm1hbD48c3BhbiBsYW5nPTNERU4tVVMgPQpzdHlsZT0zRCdm b250LXNpemU6MTAuNXB0O2ZvbnQtZmFtaWx5OiJDYWxpYnJpIiwic2Fucy1zZXJpZiI7Y29sb3I6 IzFGNDk3PQpEJz5Bbnl3YXkgLCBJIHN0aWxsIGRvbj1FMj04MD05OXQga25vdyBob3cgdG8gZGVi dWcgdmRzbSwgSSA9CmNhbm49RTI9ODA9OTl0IGxvZyBpbiB0byBjZW50b3Mgd2l0aCB1c2VyIFZE U00sIGJlY2F1c2UgSSBkb249RTI9ODA9OTl0ID0Ka25vdyB0aGUgcGFzc3dkIG9mIHVzZXIgdmRz bSBhbmQgaWYgSSBjaGFuZ2VkIHRoZSBwYXNzd29yZCwgdGhlIHNlcnZpY2UgPQp2ZHNtZCB3aWxs IGNhbm49RTI9ODA9OTl0IHN0YXJ0LjxvOnA+PC9vOnA+PC9zcGFuPjwvcD48cCA9CmNsYXNzPTNE TXNvTm9ybWFsPjxzcGFuIGxhbmc9M0RFTi1VUyA9CnN0eWxlPTNEJ2ZvbnQtc2l6ZToxMC41cHQ7 Zm9udC1mYW1pbHk6IkNhbGlicmkiLCJzYW5zLXNlcmlmIjtjb2xvcjojMUY0OTc9CkQnPjxvOnA+ Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD48cCBjbGFzcz0zRE1zb05vcm1hbD48c3BhbiBsYW5nPTNE RU4tVVMgPQpzdHlsZT0zRCdmb250LXNpemU6MTAuNXB0O2ZvbnQtZmFtaWx5OiJDYWxpYnJpIiwi c2Fucy1zZXJpZiI7Y29sb3I6IzFGNDk3PQpEJz5Zb3UgdG9sZCBtZSA9RTI9ODA9OUM8L3NwYW4+ PHNwYW4gbGFuZz0zREVOLVVTPnNob3VsZCBmb2xsb3cgdGhlID0KZGV2ZWwgc2V0dXAgd2lraTwv c3Bhbj48c3BhbiBsYW5nPTNERU4tVVMgPQpzdHlsZT0zRCdmb250LXNpemU6MTAuNXB0O2ZvbnQt ZmFtaWx5OiJDYWxpYnJpIiwic2Fucy1zZXJpZiI7Y29sb3I6IzFGNDk3PQpEJz49RTI9ODA9OUQg LCB3aGF0PUUyPTgwPTk5cyB0aGUgdHJ1ZSBsaW5rIG9mIHZkc20gZGV2ZWwgc2V0dXAgd2lraSA9 Cj89QzI9QTAgSSBjYW49RTI9ODA9OTl0IGdldCB1c2VmdWwgaW5mb3JtYXRpb24gaW4gb3ZpcnQu b3JnIG9yID0KZ29vZ2xlLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD48cCBjbGFzcz0zRE1zb05vcm1h bD48c3BhbiBsYW5nPTNERU4tVVMgPQpzdHlsZT0zRCdmb250LXNpemU6MTAuNXB0O2ZvbnQtZmFt aWx5OiJDYWxpYnJpIiwic2Fucy1zZXJpZiI7Y29sb3I6IzFGNDk3PQpEJz48bzpwPiZuYnNwOzwv bzpwPjwvc3Bhbj48L3A+PHAgY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gbGFuZz0zREVOLVVTID0K c3R5bGU9M0QnZm9udC1zaXplOjEwLjVwdDtmb250LWZhbWlseToiQ2FsaWJyaSIsInNhbnMtc2Vy aWYiO2NvbG9yOiMxRjQ5Nz0KRCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPjxwIGNsYXNz PTNETXNvTm9ybWFsPjxzcGFuIGxhbmc9M0RFTi1VUyA9CnN0eWxlPTNEJ2ZvbnQtc2l6ZToxMC41 cHQ7Zm9udC1mYW1pbHk6IkNhbGlicmkiLCJzYW5zLXNlcmlmIjtjb2xvcjojMUY0OTc9CkQnPlRo YW5rIHlvdTxvOnA+PC9vOnA+PC9zcGFuPjwvcD48cCBjbGFzcz0zRE1zb05vcm1hbD48c3BhbiA9 Cmxhbmc9M0RFTi1VUyA9CnN0eWxlPTNEJ2ZvbnQtc2l6ZToxMC41cHQ7Zm9udC1mYW1pbHk6IkNh bGlicmkiLCJzYW5zLXNlcmlmIjtjb2xvcjojMUY0OTc9CkQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9z cGFuPjwvcD48ZGl2PjxkaXYgPQpzdHlsZT0zRCdib3JkZXI6bm9uZTtib3JkZXItdG9wOnNvbGlk ICNCNUM0REYgMS4wcHQ7cGFkZGluZzozLjBwdCAwY20gPQowY20gMGNtJz48cCBjbGFzcz0zRE1z b05vcm1hbD48Yj48c3BhbiA9CnN0eWxlPTNEJ2ZvbnQtc2l6ZToxMC4wcHQnPj1FNT04Rj05MT1F ND1CQj1CNj1FND1CQT1CQTxzcGFuID0KbGFuZz0zREVOLVVTPjo8L3NwYW4+PC9zcGFuPjwvYj48 c3BhbiBsYW5nPTNERU4tVVMgPQpzdHlsZT0zRCdmb250LXNpemU6MTAuMHB0Jz4gTWljaGFsIFNr cml2YW5layA9ClttYWlsdG86bXNrcml2YW5AcmVkaGF0LmNvbV0gPGJyPjwvc3Bhbj48Yj48c3Bh biA9CnN0eWxlPTNEJ2ZvbnQtc2l6ZToxMC4wcHQnPj1FNT04Rj05MT1FOT04MD04MT1FNj05Nz1C Nj1FOT05Nz1CNDxzcGFuID0KbGFuZz0zREVOLVVTPjo8L3NwYW4+PC9zcGFuPjwvYj48c3BhbiBs YW5nPTNERU4tVVMgPQpzdHlsZT0zRCdmb250LXNpemU6MTAuMHB0Jz4gMjAxNjwvc3Bhbj48c3Bh biA9CnN0eWxlPTNEJ2ZvbnQtc2l6ZToxMC4wcHQnPj1FNT1COT1CNDxzcGFuID0KbGFuZz0zREVO LVVTPjc8L3NwYW4+PUU2PTlDPTg4PHNwYW4gbGFuZz0zREVOLVVTPjI2PC9zcGFuPj1FNj05Nz1B NTxzcGFuID0KbGFuZz0zREVOLVVTPiA1OjAwPGJyPjwvc3Bhbj48Yj49RTY9OTQ9QjY9RTQ9QkI9 QjY9RTQ9QkE9QkE8c3BhbiA9Cmxhbmc9M0RFTi1VUz46PC9zcGFuPjwvYj48c3BhbiBsYW5nPTNE RU4tVVM+ID0KbGlmdXFpb25nPGJyPjwvc3Bhbj48Yj49RTY9OEE9ODQ9RTk9ODA9ODE8c3BhbiA9 Cmxhbmc9M0RFTi1VUz46PC9zcGFuPjwvYj48c3BhbiBsYW5nPTNERU4tVVM+IHVzZXJzOyA9CmRl dmVsPGJyPjwvc3Bhbj48Yj49RTQ9Qjg9QkI9RTk9QTI9OTg8c3BhbiA9Cmxhbmc9M0RFTi1VUz46 PC9zcGFuPjwvYj48c3BhbiBsYW5nPTNERU4tVVM+IFJlOiBbb3ZpcnQtZGV2ZWxdIERlYnVnID0K dmRzbSA0LjAuMCByZXBvcnQgZXJyb3I6IGxpYnZpcnQ6IFhNTC1SUEMgZXJyb3IgOiBGYWlsZWQg dG8gY29ubmVjdCA9CnNvY2tldCB0byAnL3Zhci9ydW4vbGlidmlydC9saWJ2aXJ0LXNvY2snOiBQ ZXJtaXNzaW9uID0KZGVuaWVkPG86cD48L286cD48L3NwYW4+PC9zcGFuPjwvcD48L2Rpdj48L2Rp dj48cCA9CmNsYXNzPTNETXNvTm9ybWFsPjxzcGFuIGxhbmc9M0RFTi1VUz48bzpwPiZuYnNwOzwv bzpwPjwvc3Bhbj48L3A+PGRpdj48cCA9CmNsYXNzPTNETXNvTm9ybWFsPjxzcGFuID0KbGFuZz0z REVOLVVTPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD48L2Rpdj48ZGl2PjxwIGNsYXNzPTNE TXNvTm9ybWFsID0Kc3R5bGU9M0QnbWFyZ2luLWJvdHRvbToxMi4wcHQnPjxzcGFuIGxhbmc9M0RF Ti1VUz48YnI+T24gMjUgSnVsIDIwMTYsIGF0ID0KMjE6NTAsIFNhbmRybyBCb25henpvbGEgJmx0 OzxhID0KaHJlZj0zRCJtYWlsdG86c2JvbmF6em9AcmVkaGF0LmNvbSI+c2JvbmF6em9AcmVkaGF0 LmNvbTwvYT4mZ3Q7ID0Kd3JvdGU6PG86cD48L286cD48L3NwYW4+PC9wPjwvZGl2PjxibG9ja3F1 b3RlID0Kc3R5bGU9M0QnbWFyZ2luLXRvcDo1LjBwdDttYXJnaW4tYm90dG9tOjUuMHB0Jz48ZGl2 PjxwPjxzcGFuID0KbGFuZz0zREVOLVVTPkFkZGluZyBzb21lIHBlb3BsZSBmcm9tIHZpcnQgPQp0 ZWFtLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD48cD48c3BhbiBsYW5nPTNERU4tVVM+SWwgMjMvTHVn LzIwMTYgMTE6NDQsID0KJnF1b3Q7bGlmdXFpb25nJnF1b3Q7ICZsdDs8YSA9CmhyZWY9M0QibWFp bHRvOmxpZnVxaW9uZ0BjbmNsb3Vkc2VjLmNvbSI+bGlmdXFpb25nQGNuY2xvdWRzZWMuY29tPC9h PiZndDs9CiBoYSBzY3JpdHRvOjxicj4mZ3Q7PGJyPiZndDsgSSBkZWJ1Z2dlZCB2ZHNtIHdpdGgg UHlDaGFybSwgQW5kIEkgbG9nZ2VkID0Kb24gbXkgQ2VudG9zIDcuMiB3aXRoIHJvb3QsICZuYnNw O2FuZCBnZXQgYW4gZXJyb3IgYXMgPQpmb2xsb3dzOjxicj4mZ3Q7PGJyPiZndDsgJm5ic3A7PGJy PiZndDs8YnI+Jmd0OyBQcm9ibGVtOjxicj4mZ3Q7PGJyPiZndDsgPQombmJzcDs8YnI+Jmd0Ozxi cj4mZ3Q7IFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCA9Cmxhc3QpOjxicj4mZ3Q7PGJyPiZn dDsgJm5ic3A7IEZpbGUgJnF1b3Q7L3Vzci9zaGFyZS92ZHNtL3Zkc20mcXVvdDssID0KbGluZSAx NDksIGluIHJ1bjxicj4mZ3Q7PGJyPiZndDsgJm5ic3A7Jm5ic3A7Jm5ic3A7ID0Kc2VydmVfY2xp ZW50cyhsb2cpPGJyPiZndDs8YnI+Jmd0OyAmbmJzcDsgRmlsZSA9CiZxdW90Oy91c3Ivc2hhcmUv dmRzbS92ZHNtJnF1b3Q7LCBsaW5lIDEwNCwgaW4gPQpzZXJ2ZV9jbGllbnRzPGJyPiZndDs8YnI+ Jmd0OyAmbmJzcDsmbmJzcDsmbmJzcDsgY2lmID0zRCA9CmNsaWVudElGLmdldEluc3RhbmNlKGly cywgbG9nLCBzY2hlZHVsZXIpPGJyPiZndDs8YnI+Jmd0OyAmbmJzcDsgRmlsZSA9CiZxdW90Oy91 c3Ivc2hhcmUvdmRzbS9jbGllbnRJRi5weSZxdW90OywgbGluZSAyMDQsIGluID0KZ2V0SW5zdGFu Y2U8YnI+Jmd0Ozxicj4mZ3Q7ICZuYnNwOyZuYnNwOyZuYnNwOyBjbHMuX2luc3RhbmNlID0zRCA9 CmNsaWVudElGKGlycywgbG9nLCBzY2hlZHVsZXIpPGJyPiZndDs8YnI+Jmd0OyAmbmJzcDsgRmls ZSA9CiZxdW90Oy91c3Ivc2hhcmUvdmRzbS9jbGllbnRJRi5weSZxdW90OywgbGluZSAxMDYsIGlu ID0KX19pbml0X188YnI+Jmd0Ozxicj4mZ3Q7ICZuYnNwOyZuYnNwOyZuYnNwOyA9CnNlY3JldC5j bGVhcigpPGJyPiZndDs8YnI+Jmd0OyAmbmJzcDsgRmlsZSA9CiZxdW90Oy91c3IvbGliL3B5dGhv bjIuNy9zaXRlLXBhY2thZ2VzL3Zkc20vdmlydC9zZWNyZXQucHkmcXVvdDssIGxpbmUgPQo5Miwg aW4gY2xlYXI8YnI+Jmd0Ozxicj4mZ3Q7ICZuYnNwOyZuYnNwOyZuYnNwOyBjb24gPTNEID0KbGli dmlydGNvbm5lY3Rpb24uZ2V0KCk8YnI+Jmd0Ozxicj4mZ3Q7ICZuYnNwOyBGaWxlID0KJnF1b3Q7 L3Vzci9saWIvcHl0aG9uMi43L3NpdGUtcGFja2FnZXMvdmRzbS9saWJ2aXJ0Y29ubmVjdGlvbi5w eSZxdW90OywgPQpsaW5lIDE2MywgaW4gZ2V0PGJyPiZndDs8YnI+Jmd0OyAmbmJzcDsmbmJzcDsm bmJzcDsgPQpwYXNzd29yZCk8YnI+Jmd0Ozxicj4mZ3Q7ICZuYnNwOyBGaWxlID0KJnF1b3Q7L3Vz ci9saWIvcHl0aG9uMi43L3NpdGUtcGFja2FnZXMvdmRzbS9saWJ2aXJ0Y29ubmVjdGlvbi5weSZx dW90OywgPQpsaW5lIDk5LCBpbiBvcGVuX2Nvbm5lY3Rpb248YnI+Jmd0Ozxicj4mZ3Q7ICZuYnNw OyZuYnNwOyZuYnNwOyByZXR1cm4gPQp1dGlscy5yZXRyeShsaWJ2aXJ0T3BlbiwgdGltZW91dD0z RDEwLCBzbGVlcD0zRDAuMik8YnI+Jmd0Ozxicj4mZ3Q7ID0KJm5ic3A7IEZpbGUgJnF1b3Q7L3Vz ci9saWIvcHl0aG9uMi43L3NpdGUtcGFja2FnZXMvdmRzbS91dGlscy5weSZxdW90OywgPQpsaW5l IDU0NiwgaW4gcmV0cnk8YnI+Jmd0Ozxicj4mZ3Q7ICZuYnNwOyZuYnNwOyZuYnNwOyByZXR1cm4g PQpmdW5jKCk8YnI+Jmd0Ozxicj4mZ3Q7ICZuYnNwOyBGaWxlID0KJnF1b3Q7L3Vzci9saWI2NC9w eXRob24yLjcvc2l0ZS1wYWNrYWdlcy9saWJ2aXJ0LnB5JnF1b3Q7LCBsaW5lIDEwNSwgaW4gPQpv cGVuQXV0aDxicj4mZ3Q7PGJyPiZndDsgJm5ic3A7Jm5ic3A7Jm5ic3A7IGlmIHJldCBpcyBOb25l OnJhaXNlID0KbGlidmlydEVycm9yKCd2aXJDb25uZWN0T3BlbkF1dGgoKSBmYWlsZWQnKTxicj4m Z3Q7PGJyPiZndDsgPQpsaWJ2aXJ0RXJyb3I6IEZhaWxlZCB0byBjb25uZWN0IHNvY2tldCB0byA9 CicvdmFyL3J1bi9saWJ2aXJ0L2xpYnZpcnQtc29jayc6IFBlcm1pc3Npb24gZGVuaWVkPGJyPiZn dDs8YnI+Jmd0OyA9CiZuYnNwOzxicj4mZ3Q7PGJyPiZndDsgSW52ZXN0aXRhdGU6PGJyPiZndDs8 YnI+Jmd0OyBBY2NvcmRpbmcgdG8gdGhlID0KdHJhY2ViYWNrIGFib3ZlLCB0aGUgY29kZSBpbiBs aWJ2aXJ0LnB5IGFzIGJlbG93LCBhbmQgJm5ic3A7b3MuZ2V0ZXVpZCgpID0KZ2V0ID1FMj04MD05 ODA9RTI9ODA9OTkgd2hpY2ggc2hvd3MgdGhlIGN1cnJlbnQgdXNlciBpcyA9CnJvb3Q7PG86cD48 L286cD48L3NwYW4+PC9wPjwvZGl2PjwvYmxvY2txdW90ZT48ZGl2PjxwID0KY2xhc3M9M0RNc29O b3JtYWw+PHNwYW4gPQpsYW5nPTNERU4tVVM+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPjwv ZGl2PjxwID0KY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gbGFuZz0zREVOLVVTPnZkc20gaXMgbm90 IHN1cHBvc2VkIHRvIGJlIHJ1biA9CnVuZGVyIHJvb3QgdXNlci4gRm9yIGRlYnVnZ2luZyB5b3Ug c2hvdWxkIGZvbGxvdyB0aGUgZGV2ZWwgc2V0dXAgd2lraSA9CmFuZCBub3QgY2hhbmdlIGEgcmVn dWxhciBob3N0LiZuYnNwOzxvOnA+PC9vOnA+PC9zcGFuPjwvcD48ZGl2PjxwID0KY2xhc3M9M0RN c29Ob3JtYWw+PHNwYW4gbGFuZz0zREVOLVVTPkRlcGVuZHMgd2hhdCB5b3UgbW9kaWZpZWQsIGl0 J3MgPQppbXBvc3NpYmxlIHRvIHNheSBmcm9tIHdoYXQgeW91IGRlc2NyaWJlZC4uLi5idXQgYSBn ZW5lcmFsIGFkdmljZSBpcyB5b3UgPQpzaW1wbHkgZG9uJ3QgZG8gdGhhdDopPGJyPjxicj48bzpw PjwvbzpwPjwvc3Bhbj48L3A+PGRpdj48cD48c3BhbiA9Cmxhbmc9M0RFTi1VUz4mZ3Q7PGJyPiZn dDsgJm5ic3A7PGJyPiZndDs8YnI+Jmd0OyBkZWYgb3BlbkF1dGgodXJpLCBhdXRoLCA9CmZsYWdz PTNEMCk6PGJyPiZndDs8YnI+Jmd0OyA9CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyAjcHJpbnQgPQpvcy5nZXRldWlkKCk8YnI+Jmd0Ozxicj4mZ3Q7ICZu YnNwOyZuYnNwOyZuYnNwOyByZXQgPTNEID0KbGlidmlydG1vZC52aXJDb25uZWN0T3BlbkF1dGgo dXJpLCBhdXRoLCBmbGFncyk8YnI+Jmd0Ozxicj4mZ3Q7ID0KJm5ic3A7Jm5ic3A7Jm5ic3A7IGlm IHJldCBpcyBOb25lOnJhaXNlID0KbGlidmlydEVycm9yKCd2aXJDb25uZWN0T3BlbkF1dGgoKSBm YWlsZWQnKTxicj4mZ3Q7PGJyPiZndDsgcmV0dXJuID0KdmlyQ29ubmVjdChfb2JqPTNEcmV0KTxi cj4mZ3Q7PGJyPiZndDsgJm5ic3A7PGJyPiZndDs8YnI+Jmd0OyA9Cltyb290QHNlcnZlcjExNyBs aWJ2aXJ0XSMgbGwgPQovdmFyL3J1bi9saWJ2aXJ0L2xpYnZpcnQtc29jazxicj4mZ3Q7PGJyPiZn dDsgc3J3eHJ3eC0tLS4gMSByb290IHFlbXUgMCA9Ckp1bCAxOSAyMzo0MyAvdmFyL3J1bi9saWJ2 aXJ0L2xpYnZpcnQtc29jazxicj4mZ3Q7PGJyPiZndDsgPQombmJzcDs8YnI+Jmd0Ozxicj4mZ3Q7 IEFjY29yZGluZyB0aGF0LCByb290IHNob3VsZCBub3QgZ2V0IGFuIFBlcm1pc3Npb24gPQpkZW5p ZWQgZXJyb3IgPyBCdXQgd2h5Pzxicj4mZ3Q7PGJyPiZndDsgJm5ic3A7PGJyPiZndDs8YnI+Jmd0 OyBBbmQgSSA9CnNldGVuZm9yY2U9M0QwICwgYW5kIHN0aWxsIHNob3cgUGVyc3Npb24gZGVuaWVk IGVycm9yLjxicj4mZ3Q7PGJyPiZndDsgPQombmJzcDs8YnI+Jmd0Ozxicj4mZ3Q7IFdoYXQ9RTI9 ODA9OTlzIHRoZSByZWFzb24/IEFuZCBob3cgdG8gc29sdmUgPQppdD88YnI+Jmd0Ozxicj4mZ3Q7 ICZuYnNwOzxicj4mZ3Q7PGJyPiZndDsgVGhhbmsgPQp5b3UuPGJyPiZndDs8YnI+Jmd0Ozxicj4m Z3Q7ID0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX188YnI+ Jmd0OyBEZXZlbCBtYWlsaW5nID0KbGlzdDxicj4mZ3Q7IDxhID0KaHJlZj0zRCJtYWlsdG86RGV2 ZWxAb3ZpcnQub3JnIj5EZXZlbEBvdmlydC5vcmc8L2E+PGJyPiZndDsgPGEgPQpocmVmPTNEImh0 dHA6Ly9saXN0cy5vdmlydC5vcmcvbWFpbG1hbi9saXN0aW5mby9kZXZlbCI+aHR0cDovL2xpc3Rz Lm92aXJ0PQoub3JnL21haWxtYW4vbGlzdGluZm8vZGV2ZWw8L2E+PG86cD48L286cD48L3NwYW4+ PC9wPjwvZGl2PjwvZGl2PjwvZGl2PjwvPQpib2R5PjwvaHRtbD4KLS0tLS0tPV9OZXh0UGFydF8w MDBfMDBDOV8wMUQxRTc0Ni41QjgyNTQ5MC0tCgo= --===============8471773513398979987==-- From lifuqiong at cncloudsec.com Tue Jul 26 02:55:20 2016 Content-Type: multipart/mixed; boundary="===============6792591252648927791==" MIME-Version: 1.0 From: lifuqiong To: devel at ovirt.org Subject: =?utf-8?q?=5Bovirt-devel=5D_=E7=AD=94=E5=A4=8D=3A__Debug_vdsm_4=2E0=2E0_r?= =?utf-8?q?eport_error=3A_libvirt=3A_XML-RPC_error_=3A_Failed_to_connect_s?= =?utf-8?q?ocket_to_=27/var/run/libvirt/libvirt-sock=27=3A_Permission_deni?= =?utf-8?q?ed?= Date: Tue, 26 Jul 2016 14:50:06 +0800 Message-ID: <00d601d1e709$f1f54500$d5dfcf00$@cncloudsec.com> In-Reply-To: 1052EB09-CF85-45F6-8B93-CBF48805B0F9@redhat.com --===============6792591252648927791== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable This is a multipart message in MIME format. ------=3D_NextPart_000_00D7_01D1E74D.001CF1D0 Content-Type: text/plain; charset=3D"utf-8" Content-Transfer-Encoding: quoted-printable =3D20 On 26 Jul 2016, at 08:02, lifuqiong wrote: =3D20 =3D20 I do make a mistake because I just print os.getuid() show the user root; = =3D but os.geteuid() show the current user is still vdsm; =3D20 Anyway , I still don=3DE2=3D80=3D99t know how to debug vdsm, I cann=3DE2=3D= 80=3D99t =3D log in to centos with user VDSM, because I don=3DE2=3D80=3D99t know the pas= swd =3D of user vdsm and if I changed the password, the service vdsmd will =3D cann=3DE2=3D80=3D99t start. =3D20 the vdsm account is intentionally disabled for interactive login =3D20 You told me =3DE2=3D80=3D9Cshould follow the devel setup wiki=3DE2=3D80=3D9= D , =3D what=3DE2=3D80=3D99s the true link of vdsm devel setup wiki ? I can=3DE2= =3D80=3D99t =3D get useful information in ovirt.org or google. =3D20 http://www.ovirt.org/develop/developer-guide/vdsm/developers/ has tips =3D how to build from source and what packages are needed Anything specific you=3DE2=3D80=3D99re troubleshooting? =3D20 I do build the source from this instruction , but I want to set = =3D breakpoint to view each step and variable value to understand the =3D vdsm=3DE2=3D80=3D99s code using python IDE such as Pycharm ,=3D20 =3D20 You know that we can implement this debug requirement in ovirt engine =3D easily, but I can=3DE2=3D80=3D99t implement local debug in vdsm easily, =3D because vdsm didn=3DE2=3D80=3D99t allow root to run or debug. =3D20 Is there any debug instruction ? =3D20 Thank you Mark =3D20 Thanks, michal =3D20 =3D20 Thank you =3D20 =3DE5=3D8F=3D91=3DE4=3DBB=3DB6=3DE4=3DBA=3DBA: Michal Skrivanek =3D [mailto:mskrivan(a)redhat.com]=3D20 =3DE5=3D8F=3D91=3DE9=3D80=3D81=3DE6=3D97=3DB6=3DE9=3D97=3DB4: 2016=3DE5=3DB= 9=3DB47=3DE6=3D9C=3D8826=3DE6=3D97=3DA5 =3D 5:00 =3DE6=3D94=3DB6=3DE4=3DBB=3DB6=3DE4=3DBA=3DBA: lifuqiong =3DE6=3D8A=3D84=3DE9=3D80=3D81: users; devel =3DE4=3DB8=3DBB=3DE9=3DA2=3D98: Re: [ovirt-devel] Debug vdsm 4.0.0 report e= rror: =3D libvirt: XML-RPC error : Failed to connect socket to =3D '/var/run/libvirt/libvirt-sock': Permission denied =3D20 =3D20 On 25 Jul 2016, at 21:50, Sandro Bonazzola < =3D sbonazzo(a)redhat.com> wrote: Adding some people from virt team. Il 23/Lug/2016 11:44, "lifuqiong" < =3D lifuqiong(a)cncloudsec.com> ha scritto: > > I debugged vdsm with PyCharm, And I logged on my Centos 7.2 with root, = =3D and get an error as follows: > > =3D20 > > Problem: > > =3D20 > > Traceback (most recent call last): > > File "/usr/share/vdsm/vdsm", line 149, in run > > serve_clients(log) > > File "/usr/share/vdsm/vdsm", line 104, in serve_clients > > cif =3D3D clientIF.getInstance(irs, log, scheduler) > > File "/usr/share/vdsm/clientIF.py", line 204, in getInstance > > cls._instance =3D3D clientIF(irs, log, scheduler) > > File "/usr/share/vdsm/clientIF.py", line 106, in __init__ > > secret.clear() > > File "/usr/lib/python2.7/site-packages/vdsm/virt/secret.py", line =3D 92, in clear > > con =3D3D libvirtconnection.get() > > File "/usr/lib/python2.7/site-packages/vdsm/libvirtconnection.py", =3D line 163, in get > > password) > > File "/usr/lib/python2.7/site-packages/vdsm/libvirtconnection.py", =3D line 99, in open_connection > > return utils.retry(libvirtOpen, timeout=3D3D10, sleep=3D3D0.2) > > File "/usr/lib/python2.7/site-packages/vdsm/utils.py", line 546, in =3D retry > > return func() > > File "/usr/lib64/python2.7/site-packages/libvirt.py", line 105, in =3D openAuth > > if ret is None:raise libvirtError('virConnectOpenAuth() failed') > > libvirtError: Failed to connect socket to =3D '/var/run/libvirt/libvirt-sock': Permission denied > > =3D20 > > Investitate: > > According to the traceback above, the code in libvirt.py as below, and = =3D os.geteuid() get =3DE2=3D80=3D980=3DE2=3D80=3D99 which shows the current u= ser is =3D root; =3D20 vdsm is not supposed to be run under root user. For debugging you should = =3D follow the devel setup wiki and not change a regular host.=3D20 Depends what you modified, it's impossible to say from what you =3D described....but a general advice is you simply don't do that:) > > =3D20 > > def openAuth(uri, auth, flags=3D3D0): > > #print os.geteuid() > > ret =3D3D libvirtmod.virConnectOpenAuth(uri, auth, flags) > > if ret is None:raise libvirtError('virConnectOpenAuth() failed') > > return virConnect(_obj=3D3Dret) > > =3D20 > > [root(a)server117 libvirt]# ll /var/run/libvirt/libvirt-sock > > srwxrwx---. 1 root qemu 0 Jul 19 23:43 /var/run/libvirt/libvirt-sock > > =3D20 > > According that, root should not get an Permission denied error ? But =3D why? > > =3D20 > > And I setenforce=3D3D0 , and still show Perssion denied error. > > =3D20 > > What=3DE2=3D80=3D99s the reason? And how to solve it? > > =3D20 > > Thank you. > > > _______________________________________________ > Devel mailing list > Devel(a)ovirt.org > =3D http://lists.ovirt.org/mailman/listinfo/devel =3D20 ------=3D_NextPart_000_00D7_01D1E74D.001CF1D0 Content-Type: text/html; charset=3D"utf-8" Content-Transfer-Encoding: quoted-printable

 

On 26 Jul 2016, at 08:02, lifuqion= g =3D <lifuqiong(a)cncloudsec.com= >=3D wrote:

 

 

I do make a mistake because I just print os.getuid() show the user =3D root; but os.geteuid() show the current user is still vdsm;

 

Anyway , I still don=3DE2=3D80=3D99t know how to debug vdsm, I =3D cann=3DE2=3D80=3D99t log in to centos with user VDSM, because I don=3DE2=3D= 80=3D99t =3D know the passwd of user vdsm and if I changed the password, the service =3D vdsmd will cann=3DE2=3D80=3D99t start.

 

the vdsm account is intentionally = =3D disabled for interactive login



 

You told me =3DE2=3D80=3D9Cshould follow the= =3D devel setup wiki=3DE2=3D80=3D9D , what=3DE2=3D80=3D99s the true link of vdsm devel setup= wiki =3D ?  I can=3DE2=3D80=3D99t get useful information in ovirt.org or google.

 

ht= =3D tp://www.ovirt.org/develop/developer-guide/vdsm/developers/ has = =3D tips how to build from source and what packages are =3D needed

Anything specific you=3DE2=3D80=3D99re =3D troubleshooting?

 

=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0= =3DC2=3DA0 I do build the =3D source from this instruction , but I want to set breakpoint to view each = =3D step and variable value to understand the vdsm=3DE2=3D80=3D99s code using = =3D python IDE such as Pycharm ,

 

You know that we can implement this debug requirement in ovirt engine = =3D easily, but I can=3DE2=3D80=3D99t implement local debug in vdsm easily, =3D because vdsm didn=3DE2=3D80=3D99t allow root to run or =3D debug.

 

Is there any debug instruction ?

 

Thank you

Mark

 

Thanks,

michal



 

 

Thank you

 

=3DE5=3D8F=3D91=3DE4=3DBB=3DB6=3DE4=3DBA=3DBA<= span =3D lang=3D3DEN-US>: Michal Skrivanek [mailto:mskrivan(a)redhat.com] 
=3DE5=3D8F=3D91=3DE9=3D80=3D81=3DE6=3D97=3DB6= =3DE9=3D97=3DB4: 2016=3DE5=3DB9=3DB47=3DE6=3D9C=3D8826=3DE6= =3D97=3DA5 5:00
=3DE6=3D94=3DB6=3DE4=3DBB=3DB6=3DE4=3DBA= =3DBA: lifuqiong
=3DE6=3D8A=3D84=3DE9=3D80=3D81: users; =3D devel
=3DE4=3DB8=3DBB=3DE9=3DA2=3D98: Re: [ovirt-devel] = =3D Debug vdsm 4.0.0 report error: libvirt: XML-RPC error : Failed to =3D connect socket to '/var/run/libvirt/libvirt-sock': Permission =3D denied

 

 


On 25 Jul 2016, at 21:50, Sandro Bonazzola <sbonazzo(a)redhat.com> =3D wrote:

Adding some people from virt team.

Il 23/Lug/2016 11:44, "lifuqiong" <lifuqiong(a)cncloudsec.com> ha =3D scritto:
>
> I debugged vdsm with PyCharm, And I logged on =3D my Centos 7.2 with root,  and get an error as =3D follows:
>
>  
>
> Problem:
>
> = =3D  
>
> Traceback (most recent call =3D last):
>
>   File "/usr/share/vdsm/vdsm", =3D line 149, in run
>
>     =3D serve_clients(log)
>
>   File =3D "/usr/share/vdsm/vdsm", line 104, in =3D serve_clients
>
>     cif =3D3D =3D clientIF.getInstance(irs, log, scheduler)
>
>   File =3D "/usr/share/vdsm/clientIF.py", line 204, in =3D getInstance
>
>     cls._instance =3D3D =3D clientIF(irs, log, scheduler)
>
>   File =3D "/usr/share/vdsm/clientIF.py", line 106, in =3D __init__
>
>     =3D secret.clear()
>
>   File =3D "/usr/lib/python2.7/site-packages/vdsm/virt/secret.py", line =3D 92, in clear
>
>     con =3D3D =3D libvirtconnection.get()
>
>   File =3D "/usr/lib/python2.7/site-packages/vdsm/libvirtconnection.py", =3D line 163, in get
>
>     =3D password)
>
>   File =3D "/usr/lib/python2.7/site-packages/vdsm/libvirtconnection.py", =3D line 99, in open_connection
>
>     return =3D utils.retry(libvirtOpen, timeout=3D3D10, sleep=3D3D0.2)
>
> =3D   File "/usr/lib/python2.7/site-packages/vdsm/utils.py", =3D line 546, in retry
>
>     return =3D func()
>
>   File =3D "/usr/lib64/python2.7/site-packages/libvirt.py", line 105, in =3D openAuth
>
>     if ret is None:raise =3D libvirtError('virConnectOpenAuth() failed')
>
> =3D libvirtError: Failed to connect socket to =3D '/var/run/libvirt/libvirt-sock': Permission denied
>
> =3D  
>
> Investitate:
>
> According to the =3D traceback above, the code in libvirt.py as below, and  os.geteuid() = =3D get
=3DE2=3D80=3D980=3DE2=3D80=3D99 which shows the current user is =3D root;

 

vdsm is not supposed to be run =3D under root user. For debugging you should follow the devel setup wiki =3D and not change a regular =3D host. 

Depends what you modified, it's = =3D impossible to say from what you described....but a general advice is you = =3D simply don't do that:)


>
>  
>
> def openAuth(uri, auth, = =3D flags=3D3D0):
>
> =3D          #print =3D os.geteuid()
>
>     ret =3D3D =3D libvirtmod.virConnectOpenAuth(uri, auth, flags)
>
> =3D     if ret is None:raise =3D libvirtError('virConnectOpenAuth() failed')
>
> return =3D virConnect(_obj=3D3Dret)
>
>  
>
> =3D [root(a)server117 libvirt]# ll =3D /var/run/libvirt/libvirt-sock
>
> srwxrwx---. 1 root qemu 0 =3D Jul 19 23:43 /var/run/libvirt/libvirt-sock
>
> =3D  
>
> According that, root should not get an Permission = =3D denied error ? But why?
>
>  
>
> And I =3D setenforce=3D3D0 , and still show Perssion denied error.
>
> = =3D  
>
> What
=3DE2=3D80=3D99s the= =3D reason? And how to solve it?
>
>  
>
> =3D Thank you.
>
>
> =3D _______________________________________________
> Devel mailing =3D list
> Devel(a)ovirt.org
> http://lists.ovirt.org/mailman/listinfo/devel

 

------=3D_NextPart_000_00D7_01D1E74D.001CF1D0-- --===============6792591252648927791== Content-Type: multipart/alternative MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.bin" VGhpcyBpcyBhIG11bHRpcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgoKLS0tLS0tPV9OZXh0 UGFydF8wMDBfMDBEN18wMUQxRTc0RC4wMDFDRjFEMApDb250ZW50LVR5cGU6IHRleHQvcGxhaW47 CgljaGFyc2V0PSJ1dGYtOCIKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50 YWJsZQoKPTIwCgpPbiAyNiBKdWwgMjAxNiwgYXQgMDg6MDIsIGxpZnVxaW9uZyA8bGlmdXFpb25n QGNuY2xvdWRzZWMuY29tPiB3cm90ZToKCj0yMAoKPTIwCgpJIGRvIG1ha2UgYSBtaXN0YWtlIGJl Y2F1c2UgSSBqdXN0IHByaW50IG9zLmdldHVpZCgpIHNob3cgdGhlIHVzZXIgcm9vdDsgPQpidXQg b3MuZ2V0ZXVpZCgpIHNob3cgdGhlIGN1cnJlbnQgdXNlciBpcyBzdGlsbCB2ZHNtOwoKPTIwCgpB bnl3YXkgLCBJIHN0aWxsIGRvbj1FMj04MD05OXQga25vdyBob3cgdG8gZGVidWcgdmRzbSwgSSBj YW5uPUUyPTgwPTk5dCA9CmxvZyBpbiB0byBjZW50b3Mgd2l0aCB1c2VyIFZEU00sIGJlY2F1c2Ug SSBkb249RTI9ODA9OTl0IGtub3cgdGhlIHBhc3N3ZCA9Cm9mIHVzZXIgdmRzbSBhbmQgaWYgSSBj aGFuZ2VkIHRoZSBwYXNzd29yZCwgdGhlIHNlcnZpY2UgdmRzbWQgd2lsbCA9CmNhbm49RTI9ODA9 OTl0IHN0YXJ0LgoKPTIwCgp0aGUgdmRzbSBhY2NvdW50IGlzIGludGVudGlvbmFsbHkgZGlzYWJs ZWQgZm9yIGludGVyYWN0aXZlIGxvZ2luCgoKCgoKPTIwCgpZb3UgdG9sZCBtZSA9RTI9ODA9OUNz aG91bGQgZm9sbG93IHRoZSBkZXZlbCBzZXR1cCB3aWtpPUUyPTgwPTlEICwgPQp3aGF0PUUyPTgw PTk5cyB0aGUgdHJ1ZSBsaW5rIG9mIHZkc20gZGV2ZWwgc2V0dXAgd2lraSA/ICBJIGNhbj1FMj04 MD05OXQgPQpnZXQgdXNlZnVsIGluZm9ybWF0aW9uIGluICA8aHR0cDovL292aXJ0Lm9yZy8+IG92 aXJ0Lm9yZyBvciBnb29nbGUuCgo9MjAKCmh0dHA6Ly93d3cub3ZpcnQub3JnL2RldmVsb3AvZGV2 ZWxvcGVyLWd1aWRlL3Zkc20vZGV2ZWxvcGVycy8gaGFzIHRpcHMgPQpob3cgdG8gYnVpbGQgZnJv bSBzb3VyY2UgYW5kIHdoYXQgcGFja2FnZXMgYXJlIG5lZWRlZAoKQW55dGhpbmcgc3BlY2lmaWMg eW91PUUyPTgwPTk5cmUgdHJvdWJsZXNob290aW5nPwoKPTIwCgogICAgICAgICBJIGRvIGJ1aWxk IHRoZSBzb3VyY2UgZnJvbSB0aGlzIGluc3RydWN0aW9uICwgYnV0IEkgd2FudCB0byBzZXQgPQpi cmVha3BvaW50IHRvIHZpZXcgZWFjaCBzdGVwIGFuZCB2YXJpYWJsZSB2YWx1ZSB0byB1bmRlcnN0 YW5kIHRoZSA9CnZkc209RTI9ODA9OTlzIGNvZGUgdXNpbmcgcHl0aG9uIElERSBzdWNoIGFzIFB5 Y2hhcm0gLD0yMAoKPTIwCgpZb3Uga25vdyB0aGF0IHdlIGNhbiBpbXBsZW1lbnQgdGhpcyBkZWJ1 ZyByZXF1aXJlbWVudCBpbiBvdmlydCBlbmdpbmUgPQplYXNpbHksIGJ1dCBJIGNhbj1FMj04MD05 OXQgaW1wbGVtZW50IGxvY2FsIGRlYnVnIGluIHZkc20gZWFzaWx5LCA9CmJlY2F1c2UgdmRzbSBk aWRuPUUyPTgwPTk5dCBhbGxvdyByb290IHRvIHJ1biBvciBkZWJ1Zy4KCj0yMAoKSXMgdGhlcmUg YW55IGRlYnVnIGluc3RydWN0aW9uID8KCj0yMAoKVGhhbmsgeW91CgpNYXJrCgo9MjAKClRoYW5r cywKCm1pY2hhbAoKCgoKCj0yMAoKPTIwCgpUaGFuayB5b3UKCj0yMAoKPUU1PThGPTkxPUU0PUJC PUI2PUU0PUJBPUJBOiBNaWNoYWwgU2tyaXZhbmVrID0KW21haWx0bzptc2tyaXZhbkByZWRoYXQu Y29tXT0yMAo9RTU9OEY9OTE9RTk9ODA9ODE9RTY9OTc9QjY9RTk9OTc9QjQ6IDIwMTY9RTU9Qjk9 QjQ3PUU2PTlDPTg4MjY9RTY9OTc9QTUgPQo1OjAwCj1FNj05ND1CNj1FND1CQj1CNj1FND1CQT1C QTogbGlmdXFpb25nCj1FNj04QT04ND1FOT04MD04MTogdXNlcnM7IGRldmVsCj1FND1COD1CQj1F OT1BMj05ODogUmU6IFtvdmlydC1kZXZlbF0gRGVidWcgdmRzbSA0LjAuMCByZXBvcnQgZXJyb3I6 ID0KbGlidmlydDogWE1MLVJQQyBlcnJvciA6IEZhaWxlZCB0byBjb25uZWN0IHNvY2tldCB0byA9 CicvdmFyL3J1bi9saWJ2aXJ0L2xpYnZpcnQtc29jayc6IFBlcm1pc3Npb24gZGVuaWVkCgo9MjAK Cj0yMAoKCk9uIDI1IEp1bCAyMDE2LCBhdCAyMTo1MCwgU2FuZHJvIEJvbmF6em9sYSA8ID0KPG1h aWx0bzpzYm9uYXp6b0ByZWRoYXQuY29tPiBzYm9uYXp6b0ByZWRoYXQuY29tPiB3cm90ZToKCkFk ZGluZyBzb21lIHBlb3BsZSBmcm9tIHZpcnQgdGVhbS4KCklsIDIzL0x1Zy8yMDE2IDExOjQ0LCAi bGlmdXFpb25nIiA8IDxtYWlsdG86bGlmdXFpb25nQGNuY2xvdWRzZWMuY29tPiA9CmxpZnVxaW9u Z0BjbmNsb3Vkc2VjLmNvbT4gaGEgc2NyaXR0bzoKPgo+IEkgZGVidWdnZWQgdmRzbSB3aXRoIFB5 Q2hhcm0sIEFuZCBJIGxvZ2dlZCBvbiBteSBDZW50b3MgNy4yIHdpdGggcm9vdCwgPQogYW5kIGdl dCBhbiBlcnJvciBhcyBmb2xsb3dzOgo+Cj4gPTIwCj4KPiBQcm9ibGVtOgo+Cj4gPTIwCj4KPiBU cmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6Cj4KPiAgIEZpbGUgIi91c3Ivc2hhcmUv dmRzbS92ZHNtIiwgbGluZSAxNDksIGluIHJ1bgo+Cj4gICAgIHNlcnZlX2NsaWVudHMobG9nKQo+ Cj4gICBGaWxlICIvdXNyL3NoYXJlL3Zkc20vdmRzbSIsIGxpbmUgMTA0LCBpbiBzZXJ2ZV9jbGll bnRzCj4KPiAgICAgY2lmID0zRCBjbGllbnRJRi5nZXRJbnN0YW5jZShpcnMsIGxvZywgc2NoZWR1 bGVyKQo+Cj4gICBGaWxlICIvdXNyL3NoYXJlL3Zkc20vY2xpZW50SUYucHkiLCBsaW5lIDIwNCwg aW4gZ2V0SW5zdGFuY2UKPgo+ICAgICBjbHMuX2luc3RhbmNlID0zRCBjbGllbnRJRihpcnMsIGxv Zywgc2NoZWR1bGVyKQo+Cj4gICBGaWxlICIvdXNyL3NoYXJlL3Zkc20vY2xpZW50SUYucHkiLCBs aW5lIDEwNiwgaW4gX19pbml0X18KPgo+ICAgICBzZWNyZXQuY2xlYXIoKQo+Cj4gICBGaWxlICIv dXNyL2xpYi9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy92ZHNtL3ZpcnQvc2VjcmV0LnB5IiwgbGlu ZSA9CjkyLCBpbiBjbGVhcgo+Cj4gICAgIGNvbiA9M0QgbGlidmlydGNvbm5lY3Rpb24uZ2V0KCkK Pgo+ICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMi43L3NpdGUtcGFja2FnZXMvdmRzbS9saWJ2aXJ0 Y29ubmVjdGlvbi5weSIsID0KbGluZSAxNjMsIGluIGdldAo+Cj4gICAgIHBhc3N3b3JkKQo+Cj4g ICBGaWxlICIvdXNyL2xpYi9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy92ZHNtL2xpYnZpcnRjb25u ZWN0aW9uLnB5IiwgPQpsaW5lIDk5LCBpbiBvcGVuX2Nvbm5lY3Rpb24KPgo+ICAgICByZXR1cm4g dXRpbHMucmV0cnkobGlidmlydE9wZW4sIHRpbWVvdXQ9M0QxMCwgc2xlZXA9M0QwLjIpCj4KPiAg IEZpbGUgIi91c3IvbGliL3B5dGhvbjIuNy9zaXRlLXBhY2thZ2VzL3Zkc20vdXRpbHMucHkiLCBs aW5lIDU0NiwgaW4gPQpyZXRyeQo+Cj4gICAgIHJldHVybiBmdW5jKCkKPgo+ICAgRmlsZSAiL3Vz ci9saWI2NC9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy9saWJ2aXJ0LnB5IiwgbGluZSAxMDUsIGlu ID0Kb3BlbkF1dGgKPgo+ICAgICBpZiByZXQgaXMgTm9uZTpyYWlzZSBsaWJ2aXJ0RXJyb3IoJ3Zp ckNvbm5lY3RPcGVuQXV0aCgpIGZhaWxlZCcpCj4KPiBsaWJ2aXJ0RXJyb3I6IEZhaWxlZCB0byBj b25uZWN0IHNvY2tldCB0byA9CicvdmFyL3J1bi9saWJ2aXJ0L2xpYnZpcnQtc29jayc6IFBlcm1p c3Npb24gZGVuaWVkCj4KPiA9MjAKPgo+IEludmVzdGl0YXRlOgo+Cj4gQWNjb3JkaW5nIHRvIHRo ZSB0cmFjZWJhY2sgYWJvdmUsIHRoZSBjb2RlIGluIGxpYnZpcnQucHkgYXMgYmVsb3csIGFuZCA9 CiBvcy5nZXRldWlkKCkgZ2V0ID1FMj04MD05ODA9RTI9ODA9OTkgd2hpY2ggc2hvd3MgdGhlIGN1 cnJlbnQgdXNlciBpcyA9CnJvb3Q7Cgo9MjAKCnZkc20gaXMgbm90IHN1cHBvc2VkIHRvIGJlIHJ1 biB1bmRlciByb290IHVzZXIuIEZvciBkZWJ1Z2dpbmcgeW91IHNob3VsZCA9CmZvbGxvdyB0aGUg ZGV2ZWwgc2V0dXAgd2lraSBhbmQgbm90IGNoYW5nZSBhIHJlZ3VsYXIgaG9zdC49MjAKCkRlcGVu ZHMgd2hhdCB5b3UgbW9kaWZpZWQsIGl0J3MgaW1wb3NzaWJsZSB0byBzYXkgZnJvbSB3aGF0IHlv dSA9CmRlc2NyaWJlZC4uLi5idXQgYSBnZW5lcmFsIGFkdmljZSBpcyB5b3Ugc2ltcGx5IGRvbid0 IGRvIHRoYXQ6KQoKCgoKPgo+ID0yMAo+Cj4gZGVmIG9wZW5BdXRoKHVyaSwgYXV0aCwgZmxhZ3M9 M0QwKToKPgo+ICAgICAgICAgICNwcmludCBvcy5nZXRldWlkKCkKPgo+ICAgICByZXQgPTNEIGxp YnZpcnRtb2QudmlyQ29ubmVjdE9wZW5BdXRoKHVyaSwgYXV0aCwgZmxhZ3MpCj4KPiAgICAgaWYg cmV0IGlzIE5vbmU6cmFpc2UgbGlidmlydEVycm9yKCd2aXJDb25uZWN0T3BlbkF1dGgoKSBmYWls ZWQnKQo+Cj4gcmV0dXJuIHZpckNvbm5lY3QoX29iaj0zRHJldCkKPgo+ID0yMAo+Cj4gW3Jvb3RA c2VydmVyMTE3IGxpYnZpcnRdIyBsbCAvdmFyL3J1bi9saWJ2aXJ0L2xpYnZpcnQtc29jawo+Cj4g c3J3eHJ3eC0tLS4gMSByb290IHFlbXUgMCBKdWwgMTkgMjM6NDMgL3Zhci9ydW4vbGlidmlydC9s aWJ2aXJ0LXNvY2sKPgo+ID0yMAo+Cj4gQWNjb3JkaW5nIHRoYXQsIHJvb3Qgc2hvdWxkIG5vdCBn ZXQgYW4gUGVybWlzc2lvbiBkZW5pZWQgZXJyb3IgPyBCdXQgPQp3aHk/Cj4KPiA9MjAKPgo+IEFu ZCBJIHNldGVuZm9yY2U9M0QwICwgYW5kIHN0aWxsIHNob3cgUGVyc3Npb24gZGVuaWVkIGVycm9y Lgo+Cj4gPTIwCj4KPiBXaGF0PUUyPTgwPTk5cyB0aGUgcmVhc29uPyBBbmQgaG93IHRvIHNvbHZl IGl0Pwo+Cj4gPTIwCj4KPiBUaGFuayB5b3UuCj4KPgo+IF9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCj4gRGV2ZWwgbWFpbGluZyBsaXN0Cj4gIDxtYWlsdG86 RGV2ZWxAb3ZpcnQub3JnPiBEZXZlbEBvdmlydC5vcmcKPiAgPGh0dHA6Ly9saXN0cy5vdmlydC5v cmcvbWFpbG1hbi9saXN0aW5mby9kZXZlbD4gPQpodHRwOi8vbGlzdHMub3ZpcnQub3JnL21haWxt YW4vbGlzdGluZm8vZGV2ZWwKCj0yMAoKCi0tLS0tLT1fTmV4dFBhcnRfMDAwXzAwRDdfMDFEMUU3 NEQuMDAxQ0YxRDAKQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7CgljaGFyc2V0PSJ1dGYtOCIKQ29u dGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQoKPGh0bWwgeG1sbnM6dj0z RCJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOnZtbCIgPQp4bWxuczpvPTNEInVybjpzY2hlbWFz LW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIgPQp4bWxuczp3PTNEInVybjpzY2hlbWFzLW1p Y3Jvc29mdC1jb206b2ZmaWNlOndvcmQiID0KeG1sbnM6bT0zRCJodHRwOi8vc2NoZW1hcy5taWNy b3NvZnQuY29tL29mZmljZS8yMDA0LzEyL29tbWwiID0KeG1sbnM9M0QiaHR0cDovL3d3dy53My5v cmcvVFIvUkVDLWh0bWw0MCI+PGhlYWQ+PG1ldGEgPQpodHRwLWVxdWl2PTNEQ29udGVudC1UeXBl IGNvbnRlbnQ9M0QidGV4dC9odG1sOyBjaGFyc2V0PTNEdXRmLTgiPjxtZXRhID0KbmFtZT0zREdl bmVyYXRvciBjb250ZW50PTNEIk1pY3Jvc29mdCBXb3JkIDE0IChmaWx0ZXJlZCA9Cm1lZGl1bSki PjxzdHlsZT48IS0tCi8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KQGZvbnQtZmFjZQoJe2ZvbnQtZmFt aWx5OkhlbHZldGljYTsKCXBhbm9zZS0xOjIgMTEgNiA0IDIgMiAyIDIgMiA0O30KQGZvbnQtZmFj ZQoJe2ZvbnQtZmFtaWx5Oj1FNT1BRT04Qj1FND1CRD05MzsKCXBhbm9zZS0xOjIgMSA2IDAgMyAx IDEgMSAxIDE7fQpAZm9udC1mYWNlCgl7Zm9udC1mYW1pbHk6PUU1PUFFPThCPUU0PUJEPTkzOwoJ cGFub3NlLTE6MiAxIDYgMCAzIDEgMSAxIDEgMTt9CkBmb250LWZhY2UKCXtmb250LWZhbWlseTpD YWxpYnJpOwoJcGFub3NlLTE6MiAxNSA1IDIgMiAyIDQgMyAyIDQ7fQpAZm9udC1mYWNlCgl7Zm9u dC1mYW1pbHk6IlxAPUU1PUFFPThCPUU0PUJEPTkzIjsKCXBhbm9zZS0xOjIgMSA2IDAgMyAxIDEg MSAxIDE7fQovKiBTdHlsZSBEZWZpbml0aW9ucyAqLwpwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFs LCBkaXYuTXNvTm9ybWFsCgl7bWFyZ2luOjBjbTsKCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKCWZv bnQtc2l6ZToxMi4wcHQ7Cglmb250LWZhbWlseTo9RTU9QUU9OEI9RTQ9QkQ9OTM7fQphOmxpbmss IHNwYW4uTXNvSHlwZXJsaW5rCgl7bXNvLXN0eWxlLXByaW9yaXR5Ojk5OwoJY29sb3I6Ymx1ZTsK CXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQphOnZpc2l0ZWQsIHNwYW4uTXNvSHlwZXJsaW5r Rm9sbG93ZWQKCXttc28tc3R5bGUtcHJpb3JpdHk6OTk7Cgljb2xvcjpwdXJwbGU7Cgl0ZXh0LWRl Y29yYXRpb246dW5kZXJsaW5lO30KcC5Nc29BY2V0YXRlLCBsaS5Nc29BY2V0YXRlLCBkaXYuTXNv QWNldGF0ZQoJe21zby1zdHlsZS1wcmlvcml0eTo5OTsKCW1zby1zdHlsZS1saW5rOiI9RTY9ODk9 Qjk9RTY9QjM9QTg9RTY9QTE9ODY9RTY9OTY9ODc9RTY9OUM9QUMgQ2hhciI7CgltYXJnaW46MGNt OwoJbWFyZ2luLWJvdHRvbTouMDAwMXB0OwoJZm9udC1zaXplOjkuMHB0OwoJZm9udC1mYW1pbHk6 PUU1PUFFPThCPUU0PUJEPTkzO30Kc3Bhbi5hcHBsZS1jb252ZXJ0ZWQtc3BhY2UKCXttc28tc3R5 bGUtbmFtZTphcHBsZS1jb252ZXJ0ZWQtc3BhY2U7fQpzcGFuLkVtYWlsU3R5bGUxOAoJe21zby1z dHlsZS10eXBlOnBlcnNvbmFsLXJlcGx5OwoJZm9udC1mYW1pbHk6IkNhbGlicmkiLCJzYW5zLXNl cmlmIjsKCWNvbG9yOiMxRjQ5N0Q7fQpzcGFuLkNoYXIKCXttc28tc3R5bGUtbmFtZToiPUU2PTg5 PUI5PUU2PUIzPUE4PUU2PUExPTg2PUU2PTk2PTg3PUU2PTlDPUFDIENoYXIiOwoJbXNvLXN0eWxl LXByaW9yaXR5Ojk5OwoJbXNvLXN0eWxlLWxpbms6PUU2PTg5PUI5PUU2PUIzPUE4PUU2PUExPTg2 PUU2PTk2PTg3PUU2PTlDPUFDOwoJZm9udC1mYW1pbHk6PUU1PUFFPThCPUU0PUJEPTkzO30KLk1z b0NocERlZmF1bHQKCXttc28tc3R5bGUtdHlwZTpleHBvcnQtb25seTsKCWZvbnQtc2l6ZToxMC4w cHQ7fQpAcGFnZSBXb3JkU2VjdGlvbjEKCXtzaXplOjYxMi4wcHQgNzkyLjBwdDsKCW1hcmdpbjo3 Mi4wcHQgOTAuMHB0IDcyLjBwdCA5MC4wcHQ7fQpkaXYuV29yZFNlY3Rpb24xCgl7cGFnZTpXb3Jk U2VjdGlvbjE7fQotLT48L3N0eWxlPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgo8bzpzaGFwZWRl ZmF1bHRzIHY6ZXh0PTNEImVkaXQiIHNwaWRtYXg9M0QiMTAyNiIgLz4KPC94bWw+PCFbZW5kaWZd LS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CjxvOnNoYXBlbGF5b3V0IHY6ZXh0PTNEImVkaXQi Pgo8bzppZG1hcCB2OmV4dD0zRCJlZGl0IiBkYXRhPTNEIjEiIC8+CjwvbzpzaGFwZWxheW91dD48 L3htbD48IVtlbmRpZl0tLT48L2hlYWQ+PGJvZHkgbGFuZz0zRFpILUNOIGxpbms9M0RibHVlID0K dmxpbms9M0RwdXJwbGU+PGRpdiBjbGFzcz0zRFdvcmRTZWN0aW9uMT48cCBjbGFzcz0zRE1zb05v cm1hbD48c3BhbiA9Cmxhbmc9M0RFTi1VUz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+PGRp dj48YmxvY2txdW90ZSA9CnN0eWxlPTNEJ21hcmdpbi10b3A6NS4wcHQ7bWFyZ2luLWJvdHRvbTo1 LjBwdCc+PGRpdj48cCA9CmNsYXNzPTNETXNvTm9ybWFsPjxzcGFuIGxhbmc9M0RFTi1VUz5PbiAy NiBKdWwgMjAxNiwgYXQgMDg6MDIsIGxpZnVxaW9uZyA9CiZsdDs8YSA9CmhyZWY9M0QibWFpbHRv OmxpZnVxaW9uZ0BjbmNsb3Vkc2VjLmNvbSI+bGlmdXFpb25nQGNuY2xvdWRzZWMuY29tPC9hPiZn dDs9CiB3cm90ZTo8bzpwPjwvbzpwPjwvc3Bhbj48L3A+PC9kaXY+PHAgY2xhc3M9M0RNc29Ob3Jt YWw+PHNwYW4gPQpsYW5nPTNERU4tVVM+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPjxkaXY+ PGRpdj48cCA9CmNsYXNzPTNETXNvTm9ybWFsPjxzcGFuIGxhbmc9M0RFTi1VUyA9CnN0eWxlPTNE J2ZvbnQtc2l6ZToxMC41cHQ7Zm9udC1mYW1pbHk6IkNhbGlicmkiLCJzYW5zLXNlcmlmIjtjb2xv cjojMUY0OTc9CkQnPiZuYnNwOzwvc3Bhbj48c3BhbiBsYW5nPTNERU4tVVM+PG86cD48L286cD48 L3NwYW4+PC9wPjwvZGl2PjxkaXY+PHAgPQpjbGFzcz0zRE1zb05vcm1hbD48c3BhbiBsYW5nPTNE RU4tVVMgPQpzdHlsZT0zRCdmb250LXNpemU6MTAuNXB0O2ZvbnQtZmFtaWx5OiJDYWxpYnJpIiwi c2Fucy1zZXJpZiI7Y29sb3I6IzFGNDk3PQpEJz5JIGRvIG1ha2UgYSBtaXN0YWtlIGJlY2F1c2Ug SSBqdXN0IHByaW50IG9zLmdldHVpZCgpIHNob3cgdGhlIHVzZXIgPQpyb290OyBidXQgb3MuZ2V0 ZXVpZCgpIHNob3cgdGhlIGN1cnJlbnQgdXNlciBpcyBzdGlsbCB2ZHNtOzwvc3Bhbj48c3BhbiA9 Cmxhbmc9M0RFTi1VUz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+PC9kaXY+PGRpdj48cCBjbGFzcz0z RE1zb05vcm1hbD48c3BhbiA9Cmxhbmc9M0RFTi1VUyA9CnN0eWxlPTNEJ2ZvbnQtc2l6ZToxMC41 cHQ7Zm9udC1mYW1pbHk6IkNhbGlicmkiLCJzYW5zLXNlcmlmIjtjb2xvcjojMUY0OTc9CkQnPiZu YnNwOzwvc3Bhbj48c3BhbiBsYW5nPTNERU4tVVM+PG86cD48L286cD48L3NwYW4+PC9wPjwvZGl2 PjxkaXY+PHAgPQpjbGFzcz0zRE1zb05vcm1hbD48c3BhbiBsYW5nPTNERU4tVVMgPQpzdHlsZT0z RCdmb250LXNpemU6MTAuNXB0O2ZvbnQtZmFtaWx5OiJDYWxpYnJpIiwic2Fucy1zZXJpZiI7Y29s b3I6IzFGNDk3PQpEJz5Bbnl3YXkgLCBJIHN0aWxsIGRvbj1FMj04MD05OXQga25vdyBob3cgdG8g ZGVidWcgdmRzbSwgSSA9CmNhbm49RTI9ODA9OTl0IGxvZyBpbiB0byBjZW50b3Mgd2l0aCB1c2Vy IFZEU00sIGJlY2F1c2UgSSBkb249RTI9ODA9OTl0ID0Ka25vdyB0aGUgcGFzc3dkIG9mIHVzZXIg dmRzbSBhbmQgaWYgSSBjaGFuZ2VkIHRoZSBwYXNzd29yZCwgdGhlIHNlcnZpY2UgPQp2ZHNtZCB3 aWxsIGNhbm49RTI9ODA9OTl0IHN0YXJ0Ljwvc3Bhbj48c3BhbiA9Cmxhbmc9M0RFTi1VUz48bzpw PjwvbzpwPjwvc3Bhbj48L3A+PC9kaXY+PC9kaXY+PC9ibG9ja3F1b3RlPjxkaXY+PHAgPQpjbGFz cz0zRE1zb05vcm1hbD48c3BhbiA9Cmxhbmc9M0RFTi1VUz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bh bj48L3A+PC9kaXY+PHAgPQpjbGFzcz0zRE1zb05vcm1hbD48c3BhbiBsYW5nPTNERU4tVVM+dGhl IHZkc20gYWNjb3VudCBpcyBpbnRlbnRpb25hbGx5ID0KZGlzYWJsZWQgZm9yIGludGVyYWN0aXZl IGxvZ2luPG86cD48L286cD48L3NwYW4+PC9wPjwvZGl2PjxkaXY+PHAgPQpjbGFzcz0zRE1zb05v cm1hbD48c3BhbiA9Cmxhbmc9M0RFTi1VUz48YnI+PGJyPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD48 ZGl2PjxkaXY+PHAgPQpjbGFzcz0zRE1zb05vcm1hbD48c3BhbiBsYW5nPTNERU4tVVMgPQpzdHls ZT0zRCdmb250LXNpemU6MTAuNXB0O2ZvbnQtZmFtaWx5OiJDYWxpYnJpIiwic2Fucy1zZXJpZiI7 Y29sb3I6IzFGNDk3PQpEJz4mbmJzcDs8L3NwYW4+PHNwYW4gbGFuZz0zREVOLVVTPjxvOnA+PC9v OnA+PC9zcGFuPjwvcD48L2Rpdj48ZGl2PjxwID0KY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gbGFu Zz0zREVOLVVTID0Kc3R5bGU9M0QnZm9udC1zaXplOjEwLjVwdDtmb250LWZhbWlseToiQ2FsaWJy aSIsInNhbnMtc2VyaWYiO2NvbG9yOiMxRjQ5Nz0KRCc+WW91IHRvbGQgbWUgPUUyPTgwPTlDPC9z cGFuPjxzcGFuIGxhbmc9M0RFTi1VUz5zaG91bGQgZm9sbG93IHRoZSA9CmRldmVsIHNldHVwIHdp a2k8L3NwYW4+PHNwYW4gbGFuZz0zREVOLVVTID0Kc3R5bGU9M0QnZm9udC1zaXplOjEwLjVwdDtm b250LWZhbWlseToiQ2FsaWJyaSIsInNhbnMtc2VyaWYiO2NvbG9yOiMxRjQ5Nz0KRCc+PUUyPTgw PTlEICwgd2hhdD1FMj04MD05OXMgdGhlIHRydWUgbGluayBvZiB2ZHNtIGRldmVsIHNldHVwIHdp a2kgPQo/Jm5ic3A7IEkgY2FuPUUyPTgwPTk5dCBnZXQgdXNlZnVsIGluZm9ybWF0aW9uIGluPHNw YW4gPQpjbGFzcz0zRGFwcGxlLWNvbnZlcnRlZC1zcGFjZT4mbmJzcDs8L3NwYW4+PGEgPQpocmVm PTNEImh0dHA6Ly9vdmlydC5vcmcvIj48c3BhbiA9CnN0eWxlPTNEJ2NvbG9yOnB1cnBsZSc+b3Zp cnQub3JnPC9zcGFuPjwvYT48c3BhbiA9CmNsYXNzPTNEYXBwbGUtY29udmVydGVkLXNwYWNlPiZu YnNwOzwvc3Bhbj5vciBnb29nbGUuPC9zcGFuPjxzcGFuID0KbGFuZz0zREVOLVVTPjxvOnA+PC9v OnA+PC9zcGFuPjwvcD48L2Rpdj48L2Rpdj48ZGl2PjxwID0KY2xhc3M9M0RNc29Ob3JtYWw+PHNw YW4gPQpsYW5nPTNERU4tVVM+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPjwvZGl2PjxwID0K Y2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gbGFuZz0zREVOLVVTPjxhID0KaHJlZj0zRCJodHRwOi8v d3d3Lm92aXJ0Lm9yZy9kZXZlbG9wL2RldmVsb3Blci1ndWlkZS92ZHNtL2RldmVsb3BlcnMvIj5o dD0KdHA6Ly93d3cub3ZpcnQub3JnL2RldmVsb3AvZGV2ZWxvcGVyLWd1aWRlL3Zkc20vZGV2ZWxv cGVycy88L2E+Jm5ic3A7aGFzID0KdGlwcyBob3cgdG8gYnVpbGQgZnJvbSBzb3VyY2UgYW5kIHdo YXQgcGFja2FnZXMgYXJlID0KbmVlZGVkPG86cD48L286cD48L3NwYW4+PC9wPjwvZGl2PjxkaXY+ PHAgY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gPQpsYW5nPTNERU4tVVM+QW55dGhpbmcgc3BlY2lm aWMgeW91PUUyPTgwPTk5cmUgPQp0cm91Ymxlc2hvb3Rpbmc/PG86cD48L286cD48L3NwYW4+PC9w PjwvZGl2PjxkaXY+PHAgPQpjbGFzcz0zRE1zb05vcm1hbD48c3BhbiBsYW5nPTNERU4tVVMgPQpz dHlsZT0zRCdjb2xvcjojMUY0OTdEJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+PHAgPQpj bGFzcz0zRE1zb05vcm1hbD48c3BhbiBsYW5nPTNERU4tVVMgPQpzdHlsZT0zRCdmb250LXNpemU6 MTAuNXB0O2ZvbnQtZmFtaWx5OiJDYWxpYnJpIiwic2Fucy1zZXJpZiI7Y29sb3I6IzFGNDk3PQpE Jz49QzI9QTA9QzI9QTA9QzI9QTA9QzI9QTA9QzI9QTA9QzI9QTA9QzI9QTA9QzI9QTAgSSBkbyBi dWlsZCB0aGUgPQpzb3VyY2UgZnJvbSB0aGlzIGluc3RydWN0aW9uICwgYnV0IEkgd2FudCB0byBz ZXQgYnJlYWtwb2ludCB0byB2aWV3IGVhY2ggPQpzdGVwIGFuZCB2YXJpYWJsZSB2YWx1ZSB0byB1 bmRlcnN0YW5kIHRoZSB2ZHNtPUUyPTgwPTk5cyBjb2RlIHVzaW5nID0KcHl0aG9uIElERSBzdWNo IGFzIFB5Y2hhcm0gLCA8bzpwPjwvbzpwPjwvc3Bhbj48L3A+PHAgPQpjbGFzcz0zRE1zb05vcm1h bD48c3BhbiBsYW5nPTNERU4tVVMgPQpzdHlsZT0zRCdmb250LXNpemU6MTAuNXB0O2ZvbnQtZmFt aWx5OiJDYWxpYnJpIiwic2Fucy1zZXJpZiI7Y29sb3I6IzFGNDk3PQpEJz48bzpwPiZuYnNwOzwv bzpwPjwvc3Bhbj48L3A+PHAgY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gbGFuZz0zREVOLVVTID0K c3R5bGU9M0QnZm9udC1zaXplOjEwLjVwdDtmb250LWZhbWlseToiQ2FsaWJyaSIsInNhbnMtc2Vy aWYiO2NvbG9yOiMxRjQ5Nz0KRCc+WW91IGtub3cgdGhhdCB3ZSBjYW4gaW1wbGVtZW50IHRoaXMg ZGVidWcgcmVxdWlyZW1lbnQgaW4gb3ZpcnQgZW5naW5lID0KZWFzaWx5LCBidXQgSSBjYW49RTI9 ODA9OTl0IGltcGxlbWVudCBsb2NhbCBkZWJ1ZyBpbiB2ZHNtIGVhc2lseSwgPQpiZWNhdXNlIHZk c20gZGlkbj1FMj04MD05OXQgYWxsb3cgcm9vdCB0byBydW4gb3IgPQpkZWJ1Zy48bzpwPjwvbzpw Pjwvc3Bhbj48L3A+PHAgY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gbGFuZz0zREVOLVVTID0Kc3R5 bGU9M0QnZm9udC1zaXplOjEwLjVwdDtmb250LWZhbWlseToiQ2FsaWJyaSIsInNhbnMtc2VyaWYi O2NvbG9yOiMxRjQ5Nz0KRCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPjxwIGNsYXNzPTNE TXNvTm9ybWFsPjxzcGFuIGxhbmc9M0RFTi1VUyA9CnN0eWxlPTNEJ2ZvbnQtc2l6ZToxMC41cHQ7 Zm9udC1mYW1pbHk6IkNhbGlicmkiLCJzYW5zLXNlcmlmIjtjb2xvcjojMUY0OTc9CkQnPklzIHRo ZXJlIGFueSBkZWJ1ZyBpbnN0cnVjdGlvbiA/PG86cD48L286cD48L3NwYW4+PC9wPjxwID0KY2xh c3M9M0RNc29Ob3JtYWw+PHNwYW4gbGFuZz0zREVOLVVTID0Kc3R5bGU9M0QnZm9udC1zaXplOjEw LjVwdDtmb250LWZhbWlseToiQ2FsaWJyaSIsInNhbnMtc2VyaWYiO2NvbG9yOiMxRjQ5Nz0KRCc+ PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPjxwIGNsYXNzPTNETXNvTm9ybWFsPjxzcGFuIGxh bmc9M0RFTi1VUyA9CnN0eWxlPTNEJ2ZvbnQtc2l6ZToxMC41cHQ7Zm9udC1mYW1pbHk6IkNhbGli cmkiLCJzYW5zLXNlcmlmIjtjb2xvcjojMUY0OTc9CkQnPlRoYW5rIHlvdTxvOnA+PC9vOnA+PC9z cGFuPjwvcD48cCBjbGFzcz0zRE1zb05vcm1hbD48c3BhbiA9Cmxhbmc9M0RFTi1VUyA9CnN0eWxl PTNEJ2ZvbnQtc2l6ZToxMC41cHQ7Zm9udC1mYW1pbHk6IkNhbGlicmkiLCJzYW5zLXNlcmlmIjtj b2xvcjojMUY0OTc9CkQnPk1hcms8bzpwPjwvbzpwPjwvc3Bhbj48L3A+PHAgY2xhc3M9M0RNc29O b3JtYWw+PHNwYW4gbGFuZz0zREVOLVVTID0Kc3R5bGU9M0QnZm9udC1zaXplOjEwLjVwdDtmb250 LWZhbWlseToiQ2FsaWJyaSIsInNhbnMtc2VyaWYiO2NvbG9yOiMxRjQ5Nz0KRCc+PG86cD4mbmJz cDs8L286cD48L3NwYW4+PC9wPjwvZGl2PjxkaXY+PHAgY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4g PQpsYW5nPTNERU4tVVM+VGhhbmtzLDxvOnA+PC9vOnA+PC9zcGFuPjwvcD48L2Rpdj48ZGl2Pjxw ID0KY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gPQpsYW5nPTNERU4tVVM+bWljaGFsPG86cD48L286 cD48L3NwYW4+PC9wPjwvZGl2PjxkaXY+PHAgPQpjbGFzcz0zRE1zb05vcm1hbD48c3BhbiA9Cmxh bmc9M0RFTi1VUz48YnI+PGJyPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD48ZGl2PjxkaXY+PHAgPQpj bGFzcz0zRE1zb05vcm1hbD48c3BhbiBsYW5nPTNERU4tVVMgPQpzdHlsZT0zRCdmb250LXNpemU6 MTAuNXB0O2ZvbnQtZmFtaWx5OiJDYWxpYnJpIiwic2Fucy1zZXJpZiI7Y29sb3I6IzFGNDk3PQpE Jz4mbmJzcDs8L3NwYW4+PHNwYW4gbGFuZz0zREVOLVVTPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD48 L2Rpdj48ZGl2PjxwID0KY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gbGFuZz0zREVOLVVTID0Kc3R5 bGU9M0QnZm9udC1zaXplOjEwLjVwdDtmb250LWZhbWlseToiQ2FsaWJyaSIsInNhbnMtc2VyaWYi O2NvbG9yOiMxRjQ5Nz0KRCc+Jm5ic3A7PC9zcGFuPjxzcGFuIGxhbmc9M0RFTi1VUz48bzpwPjwv bzpwPjwvc3Bhbj48L3A+PC9kaXY+PGRpdj48cCA9CmNsYXNzPTNETXNvTm9ybWFsPjxzcGFuIGxh bmc9M0RFTi1VUyA9CnN0eWxlPTNEJ2ZvbnQtc2l6ZToxMC41cHQ7Zm9udC1mYW1pbHk6IkNhbGli cmkiLCJzYW5zLXNlcmlmIjtjb2xvcjojMUY0OTc9CkQnPlRoYW5rIHlvdTwvc3Bhbj48c3BhbiA9 Cmxhbmc9M0RFTi1VUz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+PC9kaXY+PGRpdj48cCBjbGFzcz0z RE1zb05vcm1hbD48c3BhbiA9Cmxhbmc9M0RFTi1VUyA9CnN0eWxlPTNEJ2ZvbnQtc2l6ZToxMC41 cHQ7Zm9udC1mYW1pbHk6IkNhbGlicmkiLCJzYW5zLXNlcmlmIjtjb2xvcjojMUY0OTc9CkQnPiZu YnNwOzwvc3Bhbj48c3BhbiBsYW5nPTNERU4tVVM+PG86cD48L286cD48L3NwYW4+PC9wPjwvZGl2 PjxkaXY+PGRpdiA9CnN0eWxlPTNEJ2JvcmRlcjpub25lO2JvcmRlci10b3A6c29saWQgI0I1QzRE RiAxLjBwdDtwYWRkaW5nOjMuMHB0IDBjbSA9CjBjbSAwY20nPjxkaXY+PHAgY2xhc3M9M0RNc29O b3JtYWw+PGI+PHNwYW4gPQpzdHlsZT0zRCdmb250LXNpemU6MTAuMHB0Jz49RTU9OEY9OTE9RTQ9 QkI9QjY9RTQ9QkE9QkE8c3BhbiA9Cmxhbmc9M0RFTi1VUz46PC9zcGFuPjwvc3Bhbj48L2I+PHNw YW4gPQpjbGFzcz0zRGFwcGxlLWNvbnZlcnRlZC1zcGFjZT48c3BhbiBsYW5nPTNERU4tVVMgPQpz dHlsZT0zRCdmb250LXNpemU6MTAuMHB0Jz4mbmJzcDs8L3NwYW4+PC9zcGFuPjxzcGFuIGxhbmc9 M0RFTi1VUyA9CnN0eWxlPTNEJ2ZvbnQtc2l6ZToxMC4wcHQnPk1pY2hhbCBTa3JpdmFuZWsgWzxh ID0KaHJlZj0zRCJtYWlsdG86bXNrcml2YW5AcmVkaGF0LmNvbSI+bWFpbHRvOm1za3JpdmFuQHJl ZGhhdC5jb208L2E+XTxzcGFuID0KY2xhc3M9M0RhcHBsZS1jb252ZXJ0ZWQtc3BhY2U+Jm5ic3A7 PC9zcGFuPjxicj48L3NwYW4+PGI+PHNwYW4gPQpzdHlsZT0zRCdmb250LXNpemU6MTAuMHB0Jz49 RTU9OEY9OTE9RTk9ODA9ODE9RTY9OTc9QjY9RTk9OTc9QjQ8c3BhbiA9Cmxhbmc9M0RFTi1VUz46 PC9zcGFuPjwvc3Bhbj48L2I+PHNwYW4gPQpjbGFzcz0zRGFwcGxlLWNvbnZlcnRlZC1zcGFjZT48 c3BhbiBsYW5nPTNERU4tVVMgPQpzdHlsZT0zRCdmb250LXNpemU6MTAuMHB0Jz4mbmJzcDs8L3Nw YW4+PC9zcGFuPjxzcGFuIGxhbmc9M0RFTi1VUyA9CnN0eWxlPTNEJ2ZvbnQtc2l6ZToxMC4wcHQn PjIwMTY8L3NwYW4+PHNwYW4gPQpzdHlsZT0zRCdmb250LXNpemU6MTAuMHB0Jz49RTU9Qjk9QjQ8 c3BhbiA9Cmxhbmc9M0RFTi1VUz43PC9zcGFuPj1FNj05Qz04ODxzcGFuIGxhbmc9M0RFTi1VUz4y Njwvc3Bhbj49RTY9OTc9QTU8c3BhbiA9CmNsYXNzPTNEYXBwbGUtY29udmVydGVkLXNwYWNlPjxz cGFuID0KbGFuZz0zREVOLVVTPiZuYnNwOzwvc3Bhbj48L3NwYW4+PHNwYW4gPQpsYW5nPTNERU4t VVM+NTowMDxicj48L3NwYW4+PGI+PUU2PTk0PUI2PUU0PUJCPUI2PUU0PUJBPUJBPHNwYW4gPQps YW5nPTNERU4tVVM+Ojwvc3Bhbj48L2I+PHNwYW4gY2xhc3M9M0RhcHBsZS1jb252ZXJ0ZWQtc3Bh Y2U+PHNwYW4gPQpsYW5nPTNERU4tVVM+Jm5ic3A7PC9zcGFuPjwvc3Bhbj48c3BhbiA9Cmxhbmc9 M0RFTi1VUz5saWZ1cWlvbmc8YnI+PC9zcGFuPjxiPj1FNj04QT04ND1FOT04MD04MTxzcGFuID0K bGFuZz0zREVOLVVTPjo8L3NwYW4+PC9iPjxzcGFuIGNsYXNzPTNEYXBwbGUtY29udmVydGVkLXNw YWNlPjxzcGFuID0KbGFuZz0zREVOLVVTPiZuYnNwOzwvc3Bhbj48L3NwYW4+PHNwYW4gbGFuZz0z REVOLVVTPnVzZXJzOyA9CmRldmVsPGJyPjwvc3Bhbj48Yj49RTQ9Qjg9QkI9RTk9QTI9OTg8c3Bh biA9Cmxhbmc9M0RFTi1VUz46PC9zcGFuPjwvYj48c3BhbiBjbGFzcz0zRGFwcGxlLWNvbnZlcnRl ZC1zcGFjZT48c3BhbiA9Cmxhbmc9M0RFTi1VUz4mbmJzcDs8L3NwYW4+PC9zcGFuPjxzcGFuIGxh bmc9M0RFTi1VUz5SZTogW292aXJ0LWRldmVsXSA9CkRlYnVnIHZkc20gNC4wLjAgcmVwb3J0IGVy cm9yOiBsaWJ2aXJ0OiBYTUwtUlBDIGVycm9yIDogRmFpbGVkIHRvID0KY29ubmVjdCBzb2NrZXQg dG8gJy92YXIvcnVuL2xpYnZpcnQvbGlidmlydC1zb2NrJzogUGVybWlzc2lvbiA9CmRlbmllZDwv c3Bhbj48L3NwYW4+PHNwYW4gPQpsYW5nPTNERU4tVVM+PG86cD48L286cD48L3NwYW4+PC9wPjwv ZGl2PjwvZGl2PjwvZGl2PjxkaXY+PHAgPQpjbGFzcz0zRE1zb05vcm1hbD48c3BhbiA9Cmxhbmc9 M0RFTi1VUz4mbmJzcDs8bzpwPjwvbzpwPjwvc3Bhbj48L3A+PC9kaXY+PGRpdj48ZGl2PjxwID0K Y2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gPQpsYW5nPTNERU4tVVM+Jm5ic3A7PG86cD48L286cD48 L3NwYW4+PC9wPjwvZGl2PjwvZGl2PjxkaXY+PHAgPQpjbGFzcz0zRE1zb05vcm1hbCBzdHlsZT0z RCdtYXJnaW4tYm90dG9tOjEyLjBwdCc+PHNwYW4gPQpsYW5nPTNERU4tVVM+PGJyPk9uIDI1IEp1 bCAyMDE2LCBhdCAyMTo1MCwgU2FuZHJvIEJvbmF6em9sYSAmbHQ7PGEgPQpocmVmPTNEIm1haWx0 bzpzYm9uYXp6b0ByZWRoYXQuY29tIj48c3BhbiA9CnN0eWxlPTNEJ2NvbG9yOnB1cnBsZSc+c2Jv bmF6em9AcmVkaGF0LmNvbTwvc3Bhbj48L2E+Jmd0OyA9Cndyb3RlOjxvOnA+PC9vOnA+PC9zcGFu PjwvcD48L2Rpdj48YmxvY2txdW90ZSA9CnN0eWxlPTNEJ21hcmdpbi10b3A6NS4wcHQ7bWFyZ2lu LWJvdHRvbTo1LjBwdCc+PGRpdj48cCBjbGFzcz0zRE1zb05vcm1hbCA9CnN0eWxlPTNEJ21zby1t YXJnaW4tdG9wLWFsdDphdXRvO21zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvJz48c3BhbiA9Cmxh bmc9M0RFTi1VUz5BZGRpbmcgc29tZSBwZW9wbGUgZnJvbSB2aXJ0IHRlYW0uPG86cD48L286cD48 L3NwYW4+PC9wPjxwID0KY2xhc3M9M0RNc29Ob3JtYWwgPQpzdHlsZT0zRCdtc28tbWFyZ2luLXRv cC1hbHQ6YXV0bzttc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0byc+PHNwYW4gPQpsYW5nPTNERU4t VVM+SWwgMjMvTHVnLzIwMTYgMTE6NDQsICZxdW90O2xpZnVxaW9uZyZxdW90OyAmbHQ7PGEgPQpo cmVmPTNEIm1haWx0bzpsaWZ1cWlvbmdAY25jbG91ZHNlYy5jb20iPjxzcGFuID0Kc3R5bGU9M0Qn Y29sb3I6cHVycGxlJz5saWZ1cWlvbmdAY25jbG91ZHNlYy5jb208L3NwYW4+PC9hPiZndDsgaGEg PQpzY3JpdHRvOjxicj4mZ3Q7PGJyPiZndDsgSSBkZWJ1Z2dlZCB2ZHNtIHdpdGggUHlDaGFybSwg QW5kIEkgbG9nZ2VkIG9uID0KbXkgQ2VudG9zIDcuMiB3aXRoIHJvb3QsICZuYnNwO2FuZCBnZXQg YW4gZXJyb3IgYXMgPQpmb2xsb3dzOjxicj4mZ3Q7PGJyPiZndDsgJm5ic3A7PGJyPiZndDs8YnI+ Jmd0OyBQcm9ibGVtOjxicj4mZ3Q7PGJyPiZndDsgPQombmJzcDs8YnI+Jmd0Ozxicj4mZ3Q7IFRy YWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCA9Cmxhc3QpOjxicj4mZ3Q7PGJyPiZndDsgJm5ic3A7 IEZpbGUgJnF1b3Q7L3Vzci9zaGFyZS92ZHNtL3Zkc20mcXVvdDssID0KbGluZSAxNDksIGluIHJ1 bjxicj4mZ3Q7PGJyPiZndDsgJm5ic3A7Jm5ic3A7Jm5ic3A7ID0Kc2VydmVfY2xpZW50cyhsb2cp PGJyPiZndDs8YnI+Jmd0OyAmbmJzcDsgRmlsZSA9CiZxdW90Oy91c3Ivc2hhcmUvdmRzbS92ZHNt JnF1b3Q7LCBsaW5lIDEwNCwgaW4gPQpzZXJ2ZV9jbGllbnRzPGJyPiZndDs8YnI+Jmd0OyAmbmJz cDsmbmJzcDsmbmJzcDsgY2lmID0zRCA9CmNsaWVudElGLmdldEluc3RhbmNlKGlycywgbG9nLCBz Y2hlZHVsZXIpPGJyPiZndDs8YnI+Jmd0OyAmbmJzcDsgRmlsZSA9CiZxdW90Oy91c3Ivc2hhcmUv dmRzbS9jbGllbnRJRi5weSZxdW90OywgbGluZSAyMDQsIGluID0KZ2V0SW5zdGFuY2U8YnI+Jmd0 Ozxicj4mZ3Q7ICZuYnNwOyZuYnNwOyZuYnNwOyBjbHMuX2luc3RhbmNlID0zRCA9CmNsaWVudElG KGlycywgbG9nLCBzY2hlZHVsZXIpPGJyPiZndDs8YnI+Jmd0OyAmbmJzcDsgRmlsZSA9CiZxdW90 Oy91c3Ivc2hhcmUvdmRzbS9jbGllbnRJRi5weSZxdW90OywgbGluZSAxMDYsIGluID0KX19pbml0 X188YnI+Jmd0Ozxicj4mZ3Q7ICZuYnNwOyZuYnNwOyZuYnNwOyA9CnNlY3JldC5jbGVhcigpPGJy PiZndDs8YnI+Jmd0OyAmbmJzcDsgRmlsZSA9CiZxdW90Oy91c3IvbGliL3B5dGhvbjIuNy9zaXRl LXBhY2thZ2VzL3Zkc20vdmlydC9zZWNyZXQucHkmcXVvdDssIGxpbmUgPQo5MiwgaW4gY2xlYXI8 YnI+Jmd0Ozxicj4mZ3Q7ICZuYnNwOyZuYnNwOyZuYnNwOyBjb24gPTNEID0KbGlidmlydGNvbm5l Y3Rpb24uZ2V0KCk8YnI+Jmd0Ozxicj4mZ3Q7ICZuYnNwOyBGaWxlID0KJnF1b3Q7L3Vzci9saWIv cHl0aG9uMi43L3NpdGUtcGFja2FnZXMvdmRzbS9saWJ2aXJ0Y29ubmVjdGlvbi5weSZxdW90Oywg PQpsaW5lIDE2MywgaW4gZ2V0PGJyPiZndDs8YnI+Jmd0OyAmbmJzcDsmbmJzcDsmbmJzcDsgPQpw YXNzd29yZCk8YnI+Jmd0Ozxicj4mZ3Q7ICZuYnNwOyBGaWxlID0KJnF1b3Q7L3Vzci9saWIvcHl0 aG9uMi43L3NpdGUtcGFja2FnZXMvdmRzbS9saWJ2aXJ0Y29ubmVjdGlvbi5weSZxdW90OywgPQps aW5lIDk5LCBpbiBvcGVuX2Nvbm5lY3Rpb248YnI+Jmd0Ozxicj4mZ3Q7ICZuYnNwOyZuYnNwOyZu YnNwOyByZXR1cm4gPQp1dGlscy5yZXRyeShsaWJ2aXJ0T3BlbiwgdGltZW91dD0zRDEwLCBzbGVl cD0zRDAuMik8YnI+Jmd0Ozxicj4mZ3Q7ID0KJm5ic3A7IEZpbGUgJnF1b3Q7L3Vzci9saWIvcHl0 aG9uMi43L3NpdGUtcGFja2FnZXMvdmRzbS91dGlscy5weSZxdW90OywgPQpsaW5lIDU0NiwgaW4g cmV0cnk8YnI+Jmd0Ozxicj4mZ3Q7ICZuYnNwOyZuYnNwOyZuYnNwOyByZXR1cm4gPQpmdW5jKCk8 YnI+Jmd0Ozxicj4mZ3Q7ICZuYnNwOyBGaWxlID0KJnF1b3Q7L3Vzci9saWI2NC9weXRob24yLjcv c2l0ZS1wYWNrYWdlcy9saWJ2aXJ0LnB5JnF1b3Q7LCBsaW5lIDEwNSwgaW4gPQpvcGVuQXV0aDxi cj4mZ3Q7PGJyPiZndDsgJm5ic3A7Jm5ic3A7Jm5ic3A7IGlmIHJldCBpcyBOb25lOnJhaXNlID0K bGlidmlydEVycm9yKCd2aXJDb25uZWN0T3BlbkF1dGgoKSBmYWlsZWQnKTxicj4mZ3Q7PGJyPiZn dDsgPQpsaWJ2aXJ0RXJyb3I6IEZhaWxlZCB0byBjb25uZWN0IHNvY2tldCB0byA9CicvdmFyL3J1 bi9saWJ2aXJ0L2xpYnZpcnQtc29jayc6IFBlcm1pc3Npb24gZGVuaWVkPGJyPiZndDs8YnI+Jmd0 OyA9CiZuYnNwOzxicj4mZ3Q7PGJyPiZndDsgSW52ZXN0aXRhdGU6PGJyPiZndDs8YnI+Jmd0OyBB Y2NvcmRpbmcgdG8gdGhlID0KdHJhY2ViYWNrIGFib3ZlLCB0aGUgY29kZSBpbiBsaWJ2aXJ0LnB5 IGFzIGJlbG93LCBhbmQgJm5ic3A7b3MuZ2V0ZXVpZCgpID0KZ2V0IDwvc3Bhbj49RTI9ODA9OTg8 c3BhbiBsYW5nPTNERU4tVVM+MDwvc3Bhbj49RTI9ODA9OTk8c3BhbiA9Cmxhbmc9M0RFTi1VUz4g d2hpY2ggc2hvd3MgdGhlIGN1cnJlbnQgdXNlciBpcyA9CnJvb3Q7PG86cD48L286cD48L3NwYW4+ PC9wPjwvZGl2PjwvYmxvY2txdW90ZT48ZGl2PjxkaXY+PHAgPQpjbGFzcz0zRE1zb05vcm1hbD48 c3BhbiA9Cmxhbmc9M0RFTi1VUz4mbmJzcDs8bzpwPjwvbzpwPjwvc3Bhbj48L3A+PC9kaXY+PC9k aXY+PGRpdj48cCA9CmNsYXNzPTNETXNvTm9ybWFsPjxzcGFuIGxhbmc9M0RFTi1VUz52ZHNtIGlz IG5vdCBzdXBwb3NlZCB0byBiZSBydW4gPQp1bmRlciByb290IHVzZXIuIEZvciBkZWJ1Z2dpbmcg eW91IHNob3VsZCBmb2xsb3cgdGhlIGRldmVsIHNldHVwIHdpa2kgPQphbmQgbm90IGNoYW5nZSBh IHJlZ3VsYXIgPQpob3N0LiZuYnNwOzxvOnA+PC9vOnA+PC9zcGFuPjwvcD48L2Rpdj48ZGl2Pjxk aXY+PHAgPQpjbGFzcz0zRE1zb05vcm1hbD48c3BhbiBsYW5nPTNERU4tVVM+RGVwZW5kcyB3aGF0 IHlvdSBtb2RpZmllZCwgaXQncyA9CmltcG9zc2libGUgdG8gc2F5IGZyb20gd2hhdCB5b3UgZGVz Y3JpYmVkLi4uLmJ1dCBhIGdlbmVyYWwgYWR2aWNlIGlzIHlvdSA9CnNpbXBseSBkb24ndCBkbyB0 aGF0Oik8YnI+PGJyPjxicj48bzpwPjwvbzpwPjwvc3Bhbj48L3A+PC9kaXY+PGRpdj48cCA9CmNs YXNzPTNETXNvTm9ybWFsID0Kc3R5bGU9M0QnbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87bXNvLW1h cmdpbi1ib3R0b20tYWx0OmF1dG8nPjxzcGFuID0KbGFuZz0zREVOLVVTPiZndDs8YnI+Jmd0OyAm bmJzcDs8YnI+Jmd0Ozxicj4mZ3Q7IGRlZiBvcGVuQXV0aCh1cmksIGF1dGgsID0KZmxhZ3M9M0Qw KTo8YnI+Jmd0Ozxicj4mZ3Q7ID0KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7ICNwcmludCA9Cm9zLmdldGV1aWQoKTxicj4mZ3Q7PGJyPiZndDsgJm5ic3A7 Jm5ic3A7Jm5ic3A7IHJldCA9M0QgPQpsaWJ2aXJ0bW9kLnZpckNvbm5lY3RPcGVuQXV0aCh1cmks IGF1dGgsIGZsYWdzKTxicj4mZ3Q7PGJyPiZndDsgPQombmJzcDsmbmJzcDsmbmJzcDsgaWYgcmV0 IGlzIE5vbmU6cmFpc2UgPQpsaWJ2aXJ0RXJyb3IoJ3ZpckNvbm5lY3RPcGVuQXV0aCgpIGZhaWxl ZCcpPGJyPiZndDs8YnI+Jmd0OyByZXR1cm4gPQp2aXJDb25uZWN0KF9vYmo9M0RyZXQpPGJyPiZn dDs8YnI+Jmd0OyAmbmJzcDs8YnI+Jmd0Ozxicj4mZ3Q7ID0KW3Jvb3RAc2VydmVyMTE3IGxpYnZp cnRdIyBsbCA9Ci92YXIvcnVuL2xpYnZpcnQvbGlidmlydC1zb2NrPGJyPiZndDs8YnI+Jmd0OyBz cnd4cnd4LS0tLiAxIHJvb3QgcWVtdSAwID0KSnVsIDE5IDIzOjQzIC92YXIvcnVuL2xpYnZpcnQv bGlidmlydC1zb2NrPGJyPiZndDs8YnI+Jmd0OyA9CiZuYnNwOzxicj4mZ3Q7PGJyPiZndDsgQWNj b3JkaW5nIHRoYXQsIHJvb3Qgc2hvdWxkIG5vdCBnZXQgYW4gUGVybWlzc2lvbiA9CmRlbmllZCBl cnJvciA/IEJ1dCB3aHk/PGJyPiZndDs8YnI+Jmd0OyAmbmJzcDs8YnI+Jmd0Ozxicj4mZ3Q7IEFu ZCBJID0Kc2V0ZW5mb3JjZT0zRDAgLCBhbmQgc3RpbGwgc2hvdyBQZXJzc2lvbiBkZW5pZWQgZXJy b3IuPGJyPiZndDs8YnI+Jmd0OyA9CiZuYnNwOzxicj4mZ3Q7PGJyPiZndDsgV2hhdDwvc3Bhbj49 RTI9ODA9OTk8c3BhbiBsYW5nPTNERU4tVVM+cyB0aGUgPQpyZWFzb24/IEFuZCBob3cgdG8gc29s dmUgaXQ/PGJyPiZndDs8YnI+Jmd0OyAmbmJzcDs8YnI+Jmd0Ozxicj4mZ3Q7ID0KVGhhbmsgeW91 Ljxicj4mZ3Q7PGJyPiZndDs8YnI+Jmd0OyA9Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fPGJyPiZndDsgRGV2ZWwgbWFpbGluZyA9Cmxpc3Q8YnI+Jmd0Ozxz cGFuIGNsYXNzPTNEYXBwbGUtY29udmVydGVkLXNwYWNlPiZuYnNwOzwvc3Bhbj48YSA9CmhyZWY9 M0QibWFpbHRvOkRldmVsQG92aXJ0Lm9yZyI+PHNwYW4gPQpzdHlsZT0zRCdjb2xvcjpwdXJwbGUn PkRldmVsQG92aXJ0Lm9yZzwvc3Bhbj48L2E+PGJyPiZndDs8c3BhbiA9CmNsYXNzPTNEYXBwbGUt Y29udmVydGVkLXNwYWNlPiZuYnNwOzwvc3Bhbj48YSA9CmhyZWY9M0QiaHR0cDovL2xpc3RzLm92 aXJ0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RldmVsIj48c3BhbiA9CnN0eWxlPTNEJ2NvbG9yOnB1 cnBsZSc+aHR0cDovL2xpc3RzLm92aXJ0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RldmVsPC9zcGE9 Cm4+PC9hPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48cCA9 CmNsYXNzPTNETXNvTm9ybWFsPjxzcGFuID0KbGFuZz0zREVOLVVTPjxvOnA+Jm5ic3A7PC9vOnA+ PC9zcGFuPjwvcD48L2Rpdj48L2JvZHk+PC9odG1sPgotLS0tLS09X05leHRQYXJ0XzAwMF8wMEQ3 XzAxRDFFNzRELjAwMUNGMUQwLS0KCg== --===============6792591252648927791==-- From mskrivan at redhat.com Tue Jul 26 03:37:57 2016 Content-Type: multipart/mixed; boundary="===============7726961494268732305==" MIME-Version: 1.0 From: Michal Skrivanek To: devel at ovirt.org Subject: Re: [ovirt-devel] Debug vdsm 4.0.0 report error: libvirt: XML-RPC error : Failed to connect socket to '/var/run/libvirt/libvirt-sock': Permission denied Date: Tue, 26 Jul 2016 09:37:54 +0200 Message-ID: <8CC9732E-FAA8-4E0C-9336-5FACC3F90F05@redhat.com> In-Reply-To: 00d601d1e709$f1f54500$d5dfcf00$@cncloudsec.com --===============7726961494268732305== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable --Apple-Mail=3D_3CB844CF-51EF-43B2-815F-81DB2C6581E5 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=3Dutf-8 > On 26 Jul 2016, at 08:50, lifuqiong wrote: >=3D20 > =3D20 > On 26 Jul 2016, at 08:02, lifuqiong > wrote: > =3D20 > =3D20 > I do make a mistake because I just print os.getuid() show the user =3D root; but os.geteuid() show the current user is still vdsm; > =3D20 > Anyway , I still don=3DE2=3D80=3D99t know how to debug vdsm, I cann=3DE2= =3D80=3D99t =3D log in to centos with user VDSM, because I don=3DE2=3D80=3D99t know the pas= swd =3D of user vdsm and if I changed the password, the service vdsmd will =3D cann=3DE2=3D80=3D99t start. > =3D20 > the vdsm account is intentionally disabled for interactive login >=3D20 >=3D20 > =3D20 > You told me =3DE2=3D80=3D9Cshould follow the devel setup wiki=3DE2=3D80= =3D9D , =3D what=3DE2=3D80=3D99s the true link of vdsm devel setup wiki ? I can=3DE2= =3D80=3D99t =3D get useful information in ovirt.org or google. > =3D20 > http://www.ovirt.org/develop/developer-guide/vdsm/developers/ =3D has tips = =3D how to build from source and what packages are needed > Anything specific you=3DE2=3D80=3D99re troubleshooting? > =3D20 > I do build the source from this instruction , but I want to =3D set breakpoint to view each step and variable value to understand the =3D vdsm=3DE2=3D80=3D99s code using python IDE such as Pycharm ,=3D20 > =3D20 > You know that we can implement this debug requirement in ovirt engine =3D easily, but I can=3DE2=3D80=3D99t implement local debug in vdsm easily, =3D because vdsm didn=3DE2=3D80=3D99t allow root to run or debug. > =3D20 > Is there any debug instruction ? I don=3DE2=3D80=3D99t think it=3DE2=3D80=3D99s possible to debug it from Py= Charm, or =3D any IDE for that matter, easily.=3D20 It=3DE2=3D80=3D99s a multithreaded application, you can=3DE2=3D80=3D99t rea= lly set a =3D breakpoint without affecting other functionality since some of the =3D threads need to keep running Best advice is to add a debugging/logging code in places you need, =3D printing variables you=3DE2=3D80=3D99re interested in. Thanks, michal > =3D20 > Thank you > Mark > =3D20 > Thanks, > michal >=3D20 >=3D20 > =3D20 > =3D20 > Thank you > =3D20 > =3DE5=3D8F=3D91=3DE4=3DBB=3DB6=3DE4=3DBA=3DBA: Michal Skrivanek =3D [mailto:mskrivan(a)redhat.com ]=3D20 > =3DE5=3D8F=3D91=3DE9=3D80=3D81=3DE6=3D97=3DB6=3DE9=3D97=3DB4: 2016=3DE5= =3DB9=3DB47=3DE6=3D9C=3D8826=3DE6=3D97=3DA5=3D 5:00 > =3DE6=3D94=3DB6=3DE4=3DBB=3DB6=3DE4=3DBA=3DBA: lifuqiong > =3DE6=3D8A=3D84=3DE9=3D80=3D81: users; devel > =3DE4=3DB8=3DBB=3DE9=3DA2=3D98: Re: [ovirt-devel] Debug vdsm 4.0.0 report= error: =3D libvirt: XML-RPC error : Failed to connect socket to =3D '/var/run/libvirt/libvirt-sock': Permission denied > =3D20 > =3D20 >=3D20 > On 25 Jul 2016, at 21:50, Sandro Bonazzola > wrote: >=3D20 > Adding some people from virt team. > Il 23/Lug/2016 11:44, "lifuqiong" > ha scritto: > > > > I debugged vdsm with PyCharm, And I logged on my Centos 7.2 with =3D root, and get an error as follows: > > > > =3D20 > > > > Problem: > > > > =3D20 > > > > Traceback (most recent call last): > > > > File "/usr/share/vdsm/vdsm", line 149, in run > > > > serve_clients(log) > > > > File "/usr/share/vdsm/vdsm", line 104, in serve_clients > > > > cif =3D3D clientIF.getInstance(irs, log, scheduler) > > > > File "/usr/share/vdsm/clientIF.py", line 204, in getInstance > > > > cls._instance =3D3D clientIF(irs, log, scheduler) > > > > File "/usr/share/vdsm/clientIF.py", line 106, in __init__ > > > > secret.clear() > > > > File "/usr/lib/python2.7/site-packages/vdsm/virt/secret.py", line =3D 92, in clear > > > > con =3D3D libvirtconnection.get() > > > > File "/usr/lib/python2.7/site-packages/vdsm/libvirtconnection.py", = =3D line 163, in get > > > > password) > > > > File "/usr/lib/python2.7/site-packages/vdsm/libvirtconnection.py", = =3D line 99, in open_connection > > > > return utils.retry(libvirtOpen, timeout=3D3D10, sleep=3D3D0.2) > > > > File "/usr/lib/python2.7/site-packages/vdsm/utils.py", line 546, =3D in retry > > > > return func() > > > > File "/usr/lib64/python2.7/site-packages/libvirt.py", line 105, in = =3D openAuth > > > > if ret is None:raise libvirtError('virConnectOpenAuth() failed') > > > > libvirtError: Failed to connect socket to =3D '/var/run/libvirt/libvirt-sock': Permission denied > > > > =3D20 > > > > Investitate: > > > > According to the traceback above, the code in libvirt.py as below, =3D and os.geteuid() get =3DE2=3D80=3D980=3DE2=3D80=3D99 which shows the curre= nt user =3D is root; > =3D20 > vdsm is not supposed to be run under root user. For debugging you =3D should follow the devel setup wiki and not change a regular host.=3D20 > Depends what you modified, it's impossible to say from what you =3D described....but a general advice is you simply don't do that:) >=3D20 >=3D20 > > > > =3D20 > > > > def openAuth(uri, auth, flags=3D3D0): > > > > #print os.geteuid() > > > > ret =3D3D libvirtmod.virConnectOpenAuth(uri, auth, flags) > > > > if ret is None:raise libvirtError('virConnectOpenAuth() failed') > > > > return virConnect(_obj=3D3Dret) > > > > =3D20 > > > > [root(a)server117 libvirt]# ll /var/run/libvirt/libvirt-sock > > > > srwxrwx---. 1 root qemu 0 Jul 19 23:43 /var/run/libvirt/libvirt-sock > > > > =3D20 > > > > According that, root should not get an Permission denied error ? But = =3D why? > > > > =3D20 > > > > And I setenforce=3D3D0 , and still show Perssion denied error. > > > > =3D20 > > > > What=3DE2=3D80=3D99s the reason? And how to solve it? > > > > =3D20 > > > > Thank you. > > > > > > _______________________________________________ > > Devel mailing list > > Devel(a)ovirt.org > > http://lists.ovirt.org/mailman/listinfo/devel =3D --Apple-Mail=3D_3CB844CF-51EF-43B2-815F-81DB2C6581E5 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=3Dutf-8
On 26 Jul 2016, at 08:50, lifuqiong <lifuqiong(a)cncloudsec.com> wrote:

 
On 26 Jul 2016, at 08:02, lifuqiong <lifuqiong(a)cncloudsec.com>= ; =3D wrote:
 
<= div =3D style=3D3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: =3D =3DE5=3DAE=3D8B=3DE4=3DBD=3D93;" class=3D3D""> 
I do make a =3D mistake because I just print os.getuid() show the user root; but =3D os.geteuid() show the current user is still vdsm;
 
<= div =3D style=3D3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: =3D =3DE5=3DAE=3D8B=3DE4=3DBD=3D93;" class=3D3D"">Anyway , I still don=3DE2=3D80=3D99t know how to debug vdsm, I= =3D cann=3DE2=3D80=3D99t log in to centos with user VDSM, because I don=3DE2=3D= 80=3D99t =3D know the passwd of user vdsm and if I changed the password, the service =3D vdsmd will cann=3DE2=3D80=3D99t start.
 
the vdsm =3D account is intentionally disabled for interactive login


 
<= div =3D style=3D3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: =3D =3DE5=3DAE=3D8B=3DE4=3DBD=3D93;" class=3D3D"">You told me =3DE2=3D80=3D9Cshould follow the devel setup wiki=3DE2=3D80=3D9D , what=3DE2=3D80=3D99s the = true link =3D of vdsm devel setup wiki ?  I can=3DE2=3D80=3D99t get useful informati= on =3D in ovirt.org or google.
 

I don=3DE2=3D80=3D99t think it=3DE2=3D80=3D99s possible = to debug it =3D from PyCharm, or any IDE for that matter, easily. 
It=3DE2= =3D80=3D =3D99s a multithreaded application, you can=3DE2=3D80=3D99t really set a = =3D breakpoint without affecting other functionality since some of the =3D threads need to keep running
Best advice is to add a =3D debugging/logging code in places you need, printing variables you=3DE2=3D80= =3D99=3D re interested in.

Thanks,
michal

 
Thank you
Mark
 
Thanks,
michal


 
 
Thank =3D you
 
Adding some people from vi= rt =3D team.
Il 23/Lug/2016 11:44, =3D "lifuqiong" <lifuqiong(a)cncloudsec.com> ha scritto:
>
> I debugged vdsm with PyCharm, And I = =3D logged on my Centos 7.2 with root,  and get an error as follows:
>
>  
>
> Problem:
>
>  =
>
> Traceback (most recent call last):>
>   File "/usr/share/vdsm/vdsm", = =3D line 149, in run
>
> =3D     serve_clients(log)
>
>   File "/usr/share/vdsm/vdsm", line 104, in =3D serve_clients
>
>     = =3D cif =3D3D clientIF.getInstance(irs, log, scheduler)
>>   File "/usr/share/vdsm/clientIF.py", line 204, in = =3D getInstance
>
>     = =3D cls._instance =3D3D clientIF(irs, log, scheduler)
>
>   File "/usr/share/vdsm/clientIF.py", line 106, in = =3D __init__
>
>     =3D secret.clear()
>
>   File =3D "/usr/lib/python2.7/site-packages/vdsm/virt/secret.py", line 92, in =3D clear
>
>     con =3D3= D =3D libvirtconnection.get()
>
>   = =3D File "/usr/lib/python2.7/site-packages/vdsm/libvirtconnection.py", line =3D 163, in get
>
>     = =3D password)
>
>   File =3D "/usr/lib/python2.7/site-packages/vdsm/libvirtconnection.py", line 99, =3D in open_connection
>
> =3D     return utils.retry(libvirtOpen, timeout=3D3D10, =3D sleep=3D3D0.2)
>
>   File =3D "/usr/lib/python2.7/site-packages/vdsm/utils.py", line 546, in retry
>
>     return func()
>
>   File =3D "/usr/lib64/python2.7/site-packages/libvirt.py", line 105, in =3D openAuth
>
>     if re= t =3D is None:raise libvirtError('virConnectOpenAuth() failed')
>
> libvirtError: Failed to connect =3D socket to '/var/run/libvirt/libvirt-sock': Permission denied
>
>  
>
> Investitate:
>
> = =3D According to the traceback above, the code in libvirt.py as below, and =3D  os.geteuid() get 
=3DE2=3D80=3D980=3DE2=3D80=3D99 which =3D shows the current user is root;
 
vdsm is not supposed to be run under root user. For debugging = =3D you should follow the devel setup wiki and not change a regular =3D host. 
Depends what you modified, it's impossible to say from what = =3D you described....but a general advice is you simply don't do that:)


>
> = =3D  
>
> def openAuth(uri, auth, = =3D flags=3D3D0):
>
> =3D          #print os.geteuid()
>
>     ret =3D3D =3D libvirtmod.virConnectOpenAuth(uri, auth, flags)
>
>     if ret is None:raise =3D libvirtError('virConnectOpenAuth() failed')
>
> return virConnect(_obj=3D3Dret)
>
>  
>
> =3D [root(a)server117 libvirt]# ll /var/run/libvirt/libvirt-sock
>
> srwxrwx---. 1 root qemu 0 Jul 19 =3D 23:43 /var/run/libvirt/libvirt-sock
>
&g= t; =3D  
>
> According that, root shoul= d =3D not get an Permission denied error ? But why?
>
>  
>
> And I = =3D setenforce=3D3D0 , and still show Perssion denied error.
>
>  
>
> What
=3DE2=3D80=3D99s =3D the reason? And how to solve it?
>
> = =3D  
>
> Thank you.
>
>
> =3D _______________________________________________
> Devel = =3D mailing list
> Devel(a)ovirt.org
> http://lists.ovirt.org/mailman/listinfo/devel=3D

=3D --Apple-Mail=3D_3CB844CF-51EF-43B2-815F-81DB2C6581E5-- --===============7726961494268732305== Content-Type: multipart/alternative MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.bin" Ci0tQXBwbGUtTWFpbD1fM0NCODQ0Q0YtNTFFRi00M0IyLTgxNUYtODFEQjJDNjU4MUU1CkNvbnRl bnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKQ29udGVudC1UeXBlOiB0ZXh0 L3BsYWluOwoJY2hhcnNldD11dGYtOAoKCj4gT24gMjYgSnVsIDIwMTYsIGF0IDA4OjUwLCBsaWZ1 cWlvbmcgPGxpZnVxaW9uZ0BjbmNsb3Vkc2VjLmNvbT4gd3JvdGU6Cj49MjAKPiA9MjAKPiBPbiAy NiBKdWwgMjAxNiwgYXQgMDg6MDIsIGxpZnVxaW9uZyA8bGlmdXFpb25nQGNuY2xvdWRzZWMuY29t ID0KPG1haWx0bzpsaWZ1cWlvbmdAY25jbG91ZHNlYy5jb20+PiB3cm90ZToKPiA9MjAKPiA9MjAK PiBJIGRvIG1ha2UgYSBtaXN0YWtlIGJlY2F1c2UgSSBqdXN0IHByaW50IG9zLmdldHVpZCgpIHNo b3cgdGhlIHVzZXIgPQpyb290OyBidXQgb3MuZ2V0ZXVpZCgpIHNob3cgdGhlIGN1cnJlbnQgdXNl ciBpcyBzdGlsbCB2ZHNtOwo+ID0yMAo+IEFueXdheSAsIEkgc3RpbGwgZG9uPUUyPTgwPTk5dCBr bm93IGhvdyB0byBkZWJ1ZyB2ZHNtLCBJIGNhbm49RTI9ODA9OTl0ID0KbG9nIGluIHRvIGNlbnRv cyB3aXRoIHVzZXIgVkRTTSwgYmVjYXVzZSBJIGRvbj1FMj04MD05OXQga25vdyB0aGUgcGFzc3dk ID0Kb2YgdXNlciB2ZHNtIGFuZCBpZiBJIGNoYW5nZWQgdGhlIHBhc3N3b3JkLCB0aGUgc2Vydmlj ZSB2ZHNtZCB3aWxsID0KY2Fubj1FMj04MD05OXQgc3RhcnQuCj4gPTIwCj4gdGhlIHZkc20gYWNj b3VudCBpcyBpbnRlbnRpb25hbGx5IGRpc2FibGVkIGZvciBpbnRlcmFjdGl2ZSBsb2dpbgo+PTIw Cj49MjAKPiA9MjAKPiBZb3UgdG9sZCBtZSA9RTI9ODA9OUNzaG91bGQgZm9sbG93IHRoZSBkZXZl bCBzZXR1cCB3aWtpPUUyPTgwPTlEICwgPQp3aGF0PUUyPTgwPTk5cyB0aGUgdHJ1ZSBsaW5rIG9m IHZkc20gZGV2ZWwgc2V0dXAgd2lraSA/ICBJIGNhbj1FMj04MD05OXQgPQpnZXQgdXNlZnVsIGlu Zm9ybWF0aW9uIGluIG92aXJ0Lm9yZyA8aHR0cDovL292aXJ0Lm9yZy8+IG9yIGdvb2dsZS4KPiA9 MjAKPiBodHRwOi8vd3d3Lm92aXJ0Lm9yZy9kZXZlbG9wL2RldmVsb3Blci1ndWlkZS92ZHNtL2Rl dmVsb3BlcnMvID0KPGh0dHA6Ly93d3cub3ZpcnQub3JnL2RldmVsb3AvZGV2ZWxvcGVyLWd1aWRl L3Zkc20vZGV2ZWxvcGVycy8+IGhhcyB0aXBzID0KaG93IHRvIGJ1aWxkIGZyb20gc291cmNlIGFu ZCB3aGF0IHBhY2thZ2VzIGFyZSBuZWVkZWQKPiBBbnl0aGluZyBzcGVjaWZpYyB5b3U9RTI9ODA9 OTlyZSB0cm91Ymxlc2hvb3Rpbmc/Cj4gPTIwCj4gICAgICAgICAgSSBkbyBidWlsZCB0aGUgc291 cmNlIGZyb20gdGhpcyBpbnN0cnVjdGlvbiAsIGJ1dCBJIHdhbnQgdG8gPQpzZXQgYnJlYWtwb2lu dCB0byB2aWV3IGVhY2ggc3RlcCBhbmQgdmFyaWFibGUgdmFsdWUgdG8gdW5kZXJzdGFuZCB0aGUg PQp2ZHNtPUUyPTgwPTk5cyBjb2RlIHVzaW5nIHB5dGhvbiBJREUgc3VjaCBhcyBQeWNoYXJtICw9 MjAKPiA9MjAKPiBZb3Uga25vdyB0aGF0IHdlIGNhbiBpbXBsZW1lbnQgdGhpcyBkZWJ1ZyByZXF1 aXJlbWVudCBpbiBvdmlydCBlbmdpbmUgPQplYXNpbHksIGJ1dCBJIGNhbj1FMj04MD05OXQgaW1w bGVtZW50IGxvY2FsIGRlYnVnIGluIHZkc20gZWFzaWx5LCA9CmJlY2F1c2UgdmRzbSBkaWRuPUUy PTgwPTk5dCBhbGxvdyByb290IHRvIHJ1biBvciBkZWJ1Zy4KPiA9MjAKPiBJcyB0aGVyZSBhbnkg ZGVidWcgaW5zdHJ1Y3Rpb24gPwoKSSBkb249RTI9ODA9OTl0IHRoaW5rIGl0PUUyPTgwPTk5cyBw b3NzaWJsZSB0byBkZWJ1ZyBpdCBmcm9tIFB5Q2hhcm0sIG9yID0KYW55IElERSBmb3IgdGhhdCBt YXR0ZXIsIGVhc2lseS49MjAKSXQ9RTI9ODA9OTlzIGEgbXVsdGl0aHJlYWRlZCBhcHBsaWNhdGlv biwgeW91IGNhbj1FMj04MD05OXQgcmVhbGx5IHNldCBhID0KYnJlYWtwb2ludCB3aXRob3V0IGFm ZmVjdGluZyBvdGhlciBmdW5jdGlvbmFsaXR5IHNpbmNlIHNvbWUgb2YgdGhlID0KdGhyZWFkcyBu ZWVkIHRvIGtlZXAgcnVubmluZwpCZXN0IGFkdmljZSBpcyB0byBhZGQgYSBkZWJ1Z2dpbmcvbG9n Z2luZyBjb2RlIGluIHBsYWNlcyB5b3UgbmVlZCwgPQpwcmludGluZyB2YXJpYWJsZXMgeW91PUUy PTgwPTk5cmUgaW50ZXJlc3RlZCBpbi4KClRoYW5rcywKbWljaGFsCgo+ID0yMAo+IFRoYW5rIHlv dQo+IE1hcmsKPiA9MjAKPiBUaGFua3MsCj4gbWljaGFsCj49MjAKPj0yMAo+ID0yMAo+ID0yMAo+ IFRoYW5rIHlvdQo+ID0yMAo+ID1FNT04Rj05MT1FND1CQj1CNj1FND1CQT1CQTogTWljaGFsIFNr cml2YW5layA9ClttYWlsdG86bXNrcml2YW5AcmVkaGF0LmNvbSA8bWFpbHRvOm1za3JpdmFuQHJl ZGhhdC5jb20+XT0yMAo+ID1FNT04Rj05MT1FOT04MD04MT1FNj05Nz1CNj1FOT05Nz1CNDogMjAx Nj1FNT1COT1CNDc9RTY9OUM9ODgyNj1FNj05Nz1BNT0KIDU6MDAKPiA9RTY9OTQ9QjY9RTQ9QkI9 QjY9RTQ9QkE9QkE6IGxpZnVxaW9uZwo+ID1FNj04QT04ND1FOT04MD04MTogdXNlcnM7IGRldmVs Cj4gPUU0PUI4PUJCPUU5PUEyPTk4OiBSZTogW292aXJ0LWRldmVsXSBEZWJ1ZyB2ZHNtIDQuMC4w IHJlcG9ydCBlcnJvcjogPQpsaWJ2aXJ0OiBYTUwtUlBDIGVycm9yIDogRmFpbGVkIHRvIGNvbm5l Y3Qgc29ja2V0IHRvID0KJy92YXIvcnVuL2xpYnZpcnQvbGlidmlydC1zb2NrJzogUGVybWlzc2lv biBkZW5pZWQKPiA9MjAKPiA9MjAKPj0yMAo+IE9uIDI1IEp1bCAyMDE2LCBhdCAyMTo1MCwgU2Fu ZHJvIEJvbmF6em9sYSA8c2JvbmF6em9AcmVkaGF0LmNvbSA9CjxtYWlsdG86c2JvbmF6em9AcmVk aGF0LmNvbT4+IHdyb3RlOgo+PTIwCj4gQWRkaW5nIHNvbWUgcGVvcGxlIGZyb20gdmlydCB0ZWFt Lgo+IElsIDIzL0x1Zy8yMDE2IDExOjQ0LCAibGlmdXFpb25nIiA8bGlmdXFpb25nQGNuY2xvdWRz ZWMuY29tID0KPG1haWx0bzpsaWZ1cWlvbmdAY25jbG91ZHNlYy5jb20+PiBoYSBzY3JpdHRvOgo+ ID4KPiA+IEkgZGVidWdnZWQgdmRzbSB3aXRoIFB5Q2hhcm0sIEFuZCBJIGxvZ2dlZCBvbiBteSBD ZW50b3MgNy4yIHdpdGggPQpyb290LCAgYW5kIGdldCBhbiBlcnJvciBhcyBmb2xsb3dzOgo+ID4K PiA+ID0yMAo+ID4KPiA+IFByb2JsZW06Cj4gPgo+ID4gPTIwCj4gPgo+ID4gVHJhY2ViYWNrICht b3N0IHJlY2VudCBjYWxsIGxhc3QpOgo+ID4KPiA+ICAgRmlsZSAiL3Vzci9zaGFyZS92ZHNtL3Zk c20iLCBsaW5lIDE0OSwgaW4gcnVuCj4gPgo+ID4gICAgIHNlcnZlX2NsaWVudHMobG9nKQo+ID4K PiA+ICAgRmlsZSAiL3Vzci9zaGFyZS92ZHNtL3Zkc20iLCBsaW5lIDEwNCwgaW4gc2VydmVfY2xp ZW50cwo+ID4KPiA+ICAgICBjaWYgPTNEIGNsaWVudElGLmdldEluc3RhbmNlKGlycywgbG9nLCBz Y2hlZHVsZXIpCj4gPgo+ID4gICBGaWxlICIvdXNyL3NoYXJlL3Zkc20vY2xpZW50SUYucHkiLCBs aW5lIDIwNCwgaW4gZ2V0SW5zdGFuY2UKPiA+Cj4gPiAgICAgY2xzLl9pbnN0YW5jZSA9M0QgY2xp ZW50SUYoaXJzLCBsb2csIHNjaGVkdWxlcikKPiA+Cj4gPiAgIEZpbGUgIi91c3Ivc2hhcmUvdmRz bS9jbGllbnRJRi5weSIsIGxpbmUgMTA2LCBpbiBfX2luaXRfXwo+ID4KPiA+ICAgICBzZWNyZXQu Y2xlYXIoKQo+ID4KPiA+ICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMi43L3NpdGUtcGFja2FnZXMv dmRzbS92aXJ0L3NlY3JldC5weSIsIGxpbmUgPQo5MiwgaW4gY2xlYXIKPiA+Cj4gPiAgICAgY29u ID0zRCBsaWJ2aXJ0Y29ubmVjdGlvbi5nZXQoKQo+ID4KPiA+ICAgRmlsZSAiL3Vzci9saWIvcHl0 aG9uMi43L3NpdGUtcGFja2FnZXMvdmRzbS9saWJ2aXJ0Y29ubmVjdGlvbi5weSIsID0KbGluZSAx NjMsIGluIGdldAo+ID4KPiA+ICAgICBwYXNzd29yZCkKPiA+Cj4gPiAgIEZpbGUgIi91c3IvbGli L3B5dGhvbjIuNy9zaXRlLXBhY2thZ2VzL3Zkc20vbGlidmlydGNvbm5lY3Rpb24ucHkiLCA9Cmxp bmUgOTksIGluIG9wZW5fY29ubmVjdGlvbgo+ID4KPiA+ICAgICByZXR1cm4gdXRpbHMucmV0cnko bGlidmlydE9wZW4sIHRpbWVvdXQ9M0QxMCwgc2xlZXA9M0QwLjIpCj4gPgo+ID4gICBGaWxlICIv dXNyL2xpYi9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy92ZHNtL3V0aWxzLnB5IiwgbGluZSA1NDYs ID0KaW4gcmV0cnkKPiA+Cj4gPiAgICAgcmV0dXJuIGZ1bmMoKQo+ID4KPiA+ICAgRmlsZSAiL3Vz ci9saWI2NC9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy9saWJ2aXJ0LnB5IiwgbGluZSAxMDUsIGlu ID0Kb3BlbkF1dGgKPiA+Cj4gPiAgICAgaWYgcmV0IGlzIE5vbmU6cmFpc2UgbGlidmlydEVycm9y KCd2aXJDb25uZWN0T3BlbkF1dGgoKSBmYWlsZWQnKQo+ID4KPiA+IGxpYnZpcnRFcnJvcjogRmFp bGVkIHRvIGNvbm5lY3Qgc29ja2V0IHRvID0KJy92YXIvcnVuL2xpYnZpcnQvbGlidmlydC1zb2Nr JzogUGVybWlzc2lvbiBkZW5pZWQKPiA+Cj4gPiA9MjAKPiA+Cj4gPiBJbnZlc3RpdGF0ZToKPiA+ Cj4gPiBBY2NvcmRpbmcgdG8gdGhlIHRyYWNlYmFjayBhYm92ZSwgdGhlIGNvZGUgaW4gbGlidmly dC5weSBhcyBiZWxvdywgPQphbmQgIG9zLmdldGV1aWQoKSBnZXQgPUUyPTgwPTk4MD1FMj04MD05 OSB3aGljaCBzaG93cyB0aGUgY3VycmVudCB1c2VyID0KaXMgcm9vdDsKPiA9MjAKPiB2ZHNtIGlz IG5vdCBzdXBwb3NlZCB0byBiZSBydW4gdW5kZXIgcm9vdCB1c2VyLiBGb3IgZGVidWdnaW5nIHlv dSA9CnNob3VsZCBmb2xsb3cgdGhlIGRldmVsIHNldHVwIHdpa2kgYW5kIG5vdCBjaGFuZ2UgYSBy ZWd1bGFyIGhvc3QuPTIwCj4gRGVwZW5kcyB3aGF0IHlvdSBtb2RpZmllZCwgaXQncyBpbXBvc3Np YmxlIHRvIHNheSBmcm9tIHdoYXQgeW91ID0KZGVzY3JpYmVkLi4uLmJ1dCBhIGdlbmVyYWwgYWR2 aWNlIGlzIHlvdSBzaW1wbHkgZG9uJ3QgZG8gdGhhdDopCj49MjAKPj0yMAo+ID4KPiA+ID0yMAo+ ID4KPiA+IGRlZiBvcGVuQXV0aCh1cmksIGF1dGgsIGZsYWdzPTNEMCk6Cj4gPgo+ID4gICAgICAg ICAgI3ByaW50IG9zLmdldGV1aWQoKQo+ID4KPiA+ICAgICByZXQgPTNEIGxpYnZpcnRtb2Qudmly Q29ubmVjdE9wZW5BdXRoKHVyaSwgYXV0aCwgZmxhZ3MpCj4gPgo+ID4gICAgIGlmIHJldCBpcyBO b25lOnJhaXNlIGxpYnZpcnRFcnJvcigndmlyQ29ubmVjdE9wZW5BdXRoKCkgZmFpbGVkJykKPiA+ Cj4gPiByZXR1cm4gdmlyQ29ubmVjdChfb2JqPTNEcmV0KQo+ID4KPiA+ID0yMAo+ID4KPiA+IFty b290QHNlcnZlcjExNyBsaWJ2aXJ0XSMgbGwgL3Zhci9ydW4vbGlidmlydC9saWJ2aXJ0LXNvY2sK PiA+Cj4gPiBzcnd4cnd4LS0tLiAxIHJvb3QgcWVtdSAwIEp1bCAxOSAyMzo0MyAvdmFyL3J1bi9s aWJ2aXJ0L2xpYnZpcnQtc29jawo+ID4KPiA+ID0yMAo+ID4KPiA+IEFjY29yZGluZyB0aGF0LCBy b290IHNob3VsZCBub3QgZ2V0IGFuIFBlcm1pc3Npb24gZGVuaWVkIGVycm9yID8gQnV0ID0Kd2h5 Pwo+ID4KPiA+ID0yMAo+ID4KPiA+IEFuZCBJIHNldGVuZm9yY2U9M0QwICwgYW5kIHN0aWxsIHNo b3cgUGVyc3Npb24gZGVuaWVkIGVycm9yLgo+ID4KPiA+ID0yMAo+ID4KPiA+IFdoYXQ9RTI9ODA9 OTlzIHRoZSByZWFzb24/IEFuZCBob3cgdG8gc29sdmUgaXQ/Cj4gPgo+ID4gPTIwCj4gPgo+ID4g VGhhbmsgeW91Lgo+ID4KPiA+Cj4gPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwo+ID4gRGV2ZWwgbWFpbGluZyBsaXN0Cj4gPiBEZXZlbEBvdmlydC5vcmcg PG1haWx0bzpEZXZlbEBvdmlydC5vcmc+Cj4gPiBodHRwOi8vbGlzdHMub3ZpcnQub3JnL21haWxt YW4vbGlzdGluZm8vZGV2ZWwgPQo8aHR0cDovL2xpc3RzLm92aXJ0Lm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2RldmVsPgoKLS1BcHBsZS1NYWlsPV8zQ0I4NDRDRi01MUVGLTQzQjItODE1Ri04MURCMkM2 NTgxRTUKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQpDb250ZW50 LVR5cGU6IHRleHQvaHRtbDsKCWNoYXJzZXQ9dXRmLTgKCjxodG1sPjxoZWFkPjxtZXRhIGh0dHAt ZXF1aXY9M0QiQ29udGVudC1UeXBlIiBjb250ZW50PTNEInRleHQvaHRtbCA9CmNoYXJzZXQ9M0R1 dGYtOCI+PC9oZWFkPjxib2R5IHN0eWxlPTNEIndvcmQtd3JhcDogYnJlYWstd29yZDsgPQotd2Vi a2l0LW5ic3AtbW9kZTogc3BhY2U7IC13ZWJraXQtbGluZS1icmVhazogYWZ0ZXItd2hpdGUtc3Bh Y2U7IiA9CmNsYXNzPTNEIiI+PGJyIGNsYXNzPTNEIiI+PGRpdj48YmxvY2txdW90ZSB0eXBlPTNE ImNpdGUiIGNsYXNzPTNEIiI+PGRpdiA9CmNsYXNzPTNEIiI+T24gMjYgSnVsIDIwMTYsIGF0IDA4 OjUwLCBsaWZ1cWlvbmcgJmx0OzxhID0KaHJlZj0zRCJtYWlsdG86bGlmdXFpb25nQGNuY2xvdWRz ZWMuY29tIiA9CmNsYXNzPTNEIiI+bGlmdXFpb25nQGNuY2xvdWRzZWMuY29tPC9hPiZndDsgd3Jv dGU6PC9kaXY+PGJyID0KY2xhc3M9M0QiQXBwbGUtaW50ZXJjaGFuZ2UtbmV3bGluZSI+PGRpdiBj bGFzcz0zRCIiPjxkaXYgPQpjbGFzcz0zRCJXb3JkU2VjdGlvbjEiIHN0eWxlPTNEInBhZ2U6IFdv cmRTZWN0aW9uMTsgZm9udC1mYW1pbHk6ID0KSGVsdmV0aWNhOyBmb250LXNpemU6IDEycHg7IGZv bnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50LWNhcHM6ID0Kbm9ybWFsOyBmb250LXdlaWdo dDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBvcnBoYW5zOiBhdXRvOyA9CnRleHQt YWxpZ246IHN0YXJ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hp dGUtc3BhY2U6ID0Kbm9ybWFsOyB3aWRvd3M6IGF1dG87IHdvcmQtc3BhY2luZzogMHB4OyAtd2Vi a2l0LXRleHQtc3Ryb2tlLXdpZHRoOiA9CjBweDsiPjxkaXYgc3R5bGU9M0QibWFyZ2luOiAwY20g MGNtIDAuMDAwMXB0OyBmb250LXNpemU6IDEycHQ7ID0KZm9udC1mYW1pbHk6ID1FNT1BRT04Qj1F ND1CRD05MzsiIGNsYXNzPTNEIiI+PHNwYW4gbGFuZz0zRCJFTi1VUyIgPQpjbGFzcz0zRCIiPjxv OnAgY2xhc3M9M0QiIj4mbmJzcDs8L286cD48L3NwYW4+PC9kaXY+PGRpdiA9CmNsYXNzPTNEIiI+ PGJsb2NrcXVvdGUgc3R5bGU9M0QibWFyZ2luLXRvcDogNXB0OyBtYXJnaW4tYm90dG9tOiA1cHQ7 IiA9CmNsYXNzPTNEIiI+PGRpdiBjbGFzcz0zRCIiPjxkaXYgc3R5bGU9M0QibWFyZ2luOiAwY20g MGNtIDAuMDAwMXB0OyA9CmZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ID1FNT1BRT04Qj1F ND1CRD05MzsiIGNsYXNzPTNEIiI+PHNwYW4gPQpsYW5nPTNEIkVOLVVTIiBjbGFzcz0zRCIiPk9u IDI2IEp1bCAyMDE2LCBhdCAwODowMiwgbGlmdXFpb25nICZsdDs8YSA9CmhyZWY9M0QibWFpbHRv OmxpZnVxaW9uZ0BjbmNsb3Vkc2VjLmNvbSIgc3R5bGU9M0QiY29sb3I6IHB1cnBsZTsgPQp0ZXh0 LWRlY29yYXRpb246IHVuZGVybGluZTsiIGNsYXNzPTNEIiI+bGlmdXFpb25nQGNuY2xvdWRzZWMu Y29tPC9hPiZndDsgPQp3cm90ZTo8bzpwIGNsYXNzPTNEIiI+PC9vOnA+PC9zcGFuPjwvZGl2Pjwv ZGl2PjxkaXYgc3R5bGU9M0QibWFyZ2luOiAwY20gPQowY20gMC4wMDAxcHQ7IGZvbnQtc2l6ZTog MTJwdDsgZm9udC1mYW1pbHk6ID1FNT1BRT04Qj1FND1CRD05MzsiID0KY2xhc3M9M0QiIj48c3Bh biBsYW5nPTNEIkVOLVVTIiBjbGFzcz0zRCIiPjxvOnAgPQpjbGFzcz0zRCIiPiZuYnNwOzwvbzpw Pjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPTNEIiI+PGRpdiBjbGFzcz0zRCIiPjxkaXYgPQpzdHls ZT0zRCJtYXJnaW46IDBjbSAwY20gMC4wMDAxcHQ7IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1p bHk6ID0KPUU1PUFFPThCPUU0PUJEPTkzOyIgY2xhc3M9M0QiIj48c3BhbiBsYW5nPTNEIkVOLVVT IiBzdHlsZT0zRCJmb250LXNpemU6ID0KMTAuNXB0OyBmb250LWZhbWlseTogQ2FsaWJyaSwgc2Fu cy1zZXJpZjsgY29sb3I6IHJnYigzMSwgNzMsIDEyNSk7IiA9CmNsYXNzPTNEIiI+Jm5ic3A7PC9z cGFuPjxzcGFuIGxhbmc9M0QiRU4tVVMiIGNsYXNzPTNEIiI+PG86cCA9CmNsYXNzPTNEIiI+PC9v OnA+PC9zcGFuPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9M0QiIj48ZGl2IHN0eWxlPTNEIm1hcmdp bjogPQowY20gMGNtIDAuMDAwMXB0OyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiA9RTU9 QUU9OEI9RTQ9QkQ9OTM7IiA9CmNsYXNzPTNEIiI+PHNwYW4gbGFuZz0zRCJFTi1VUyIgc3R5bGU9 M0QiZm9udC1zaXplOiAxMC41cHQ7IGZvbnQtZmFtaWx5OiA9CkNhbGlicmksIHNhbnMtc2VyaWY7 IGNvbG9yOiByZ2IoMzEsIDczLCAxMjUpOyIgY2xhc3M9M0QiIj5JIGRvIG1ha2UgYSA9Cm1pc3Rh a2UgYmVjYXVzZSBJIGp1c3QgcHJpbnQgb3MuZ2V0dWlkKCkgc2hvdyB0aGUgdXNlciByb290OyBi dXQgPQpvcy5nZXRldWlkKCkgc2hvdyB0aGUgY3VycmVudCB1c2VyIGlzIHN0aWxsIHZkc207PC9z cGFuPjxzcGFuID0KbGFuZz0zRCJFTi1VUyIgY2xhc3M9M0QiIj48bzpwIGNsYXNzPTNEIiI+PC9v OnA+PC9zcGFuPjwvZGl2PjwvZGl2PjxkaXYgPQpjbGFzcz0zRCIiPjxkaXYgc3R5bGU9M0QibWFy Z2luOiAwY20gMGNtIDAuMDAwMXB0OyBmb250LXNpemU6IDEycHQ7ID0KZm9udC1mYW1pbHk6ID1F NT1BRT04Qj1FND1CRD05MzsiIGNsYXNzPTNEIiI+PHNwYW4gbGFuZz0zRCJFTi1VUyIgPQpzdHls ZT0zRCJmb250LXNpemU6IDEwLjVwdDsgZm9udC1mYW1pbHk6IENhbGlicmksIHNhbnMtc2VyaWY7 IGNvbG9yOiA9CnJnYigzMSwgNzMsIDEyNSk7IiBjbGFzcz0zRCIiPiZuYnNwOzwvc3Bhbj48c3Bh biBsYW5nPTNEIkVOLVVTIiA9CmNsYXNzPTNEIiI+PG86cCBjbGFzcz0zRCIiPjwvbzpwPjwvc3Bh bj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPTNEIiI+PGRpdiA9CnN0eWxlPTNEIm1hcmdpbjogMGNt IDBjbSAwLjAwMDFwdDsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogPQo9RTU9QUU9OEI9 RTQ9QkQ9OTM7IiBjbGFzcz0zRCIiPjxzcGFuIGxhbmc9M0QiRU4tVVMiIHN0eWxlPTNEImZvbnQt c2l6ZTogPQoxMC41cHQ7IGZvbnQtZmFtaWx5OiBDYWxpYnJpLCBzYW5zLXNlcmlmOyBjb2xvcjog cmdiKDMxLCA3MywgMTI1KTsiID0KY2xhc3M9M0QiIj5Bbnl3YXkgLCBJIHN0aWxsIGRvbj1FMj04 MD05OXQga25vdyBob3cgdG8gZGVidWcgdmRzbSwgSSA9CmNhbm49RTI9ODA9OTl0IGxvZyBpbiB0 byBjZW50b3Mgd2l0aCB1c2VyIFZEU00sIGJlY2F1c2UgSSBkb249RTI9ODA9OTl0ID0Ka25vdyB0 aGUgcGFzc3dkIG9mIHVzZXIgdmRzbSBhbmQgaWYgSSBjaGFuZ2VkIHRoZSBwYXNzd29yZCwgdGhl IHNlcnZpY2UgPQp2ZHNtZCB3aWxsIGNhbm49RTI9ODA9OTl0IHN0YXJ0Ljwvc3Bhbj48c3BhbiBs YW5nPTNEIkVOLVVTIiA9CmNsYXNzPTNEIiI+PG86cCA9CmNsYXNzPTNEIiI+PC9vOnA+PC9zcGFu PjwvZGl2PjwvZGl2PjwvZGl2PjwvYmxvY2txdW90ZT48ZGl2ID0KY2xhc3M9M0QiIj48ZGl2IHN0 eWxlPTNEIm1hcmdpbjogMGNtIDBjbSAwLjAwMDFwdDsgZm9udC1zaXplOiAxMnB0OyA9CmZvbnQt ZmFtaWx5OiA9RTU9QUU9OEI9RTQ9QkQ9OTM7IiBjbGFzcz0zRCIiPjxzcGFuIGxhbmc9M0QiRU4t VVMiID0KY2xhc3M9M0QiIj48bzpwIGNsYXNzPTNEIiI+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvZGl2 PjwvZGl2PjxkaXYgPQpzdHlsZT0zRCJtYXJnaW46IDBjbSAwY20gMC4wMDAxcHQ7IGZvbnQtc2l6 ZTogMTJwdDsgZm9udC1mYW1pbHk6ID0KPUU1PUFFPThCPUU0PUJEPTkzOyIgY2xhc3M9M0QiIj48 c3BhbiBsYW5nPTNEIkVOLVVTIiBjbGFzcz0zRCIiPnRoZSB2ZHNtID0KYWNjb3VudCBpcyBpbnRl bnRpb25hbGx5IGRpc2FibGVkIGZvciBpbnRlcmFjdGl2ZSBsb2dpbjxvOnAgPQpjbGFzcz0zRCIi PjwvbzpwPjwvc3Bhbj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPTNEIiI+PGRpdiBzdHlsZT0zRCJt YXJnaW46ID0KMGNtIDBjbSAwLjAwMDFwdDsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTog PUU1PUFFPThCPUU0PUJEPTkzOyIgPQpjbGFzcz0zRCIiPjxzcGFuIGxhbmc9M0QiRU4tVVMiIGNs YXNzPTNEIiI+PGJyIGNsYXNzPTNEIiI+PGJyID0KY2xhc3M9M0QiIj48bzpwIGNsYXNzPTNEIiI+ PC9vOnA+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9M0QiIj48ZGl2ID0KY2xhc3M9M0QiIj48ZGl2 IHN0eWxlPTNEIm1hcmdpbjogMGNtIDBjbSAwLjAwMDFwdDsgZm9udC1zaXplOiAxMnB0OyA9CmZv bnQtZmFtaWx5OiA9RTU9QUU9OEI9RTQ9QkQ9OTM7IiBjbGFzcz0zRCIiPjxzcGFuIGxhbmc9M0Qi RU4tVVMiID0Kc3R5bGU9M0QiZm9udC1zaXplOiAxMC41cHQ7IGZvbnQtZmFtaWx5OiBDYWxpYnJp LCBzYW5zLXNlcmlmOyBjb2xvcjogPQpyZ2IoMzEsIDczLCAxMjUpOyIgY2xhc3M9M0QiIj4mbmJz cDs8L3NwYW4+PHNwYW4gbGFuZz0zRCJFTi1VUyIgPQpjbGFzcz0zRCIiPjxvOnAgY2xhc3M9M0Qi Ij48L286cD48L3NwYW4+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0zRCIiPjxkaXYgPQpzdHlsZT0z RCJtYXJnaW46IDBjbSAwY20gMC4wMDAxcHQ7IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6 ID0KPUU1PUFFPThCPUU0PUJEPTkzOyIgY2xhc3M9M0QiIj48c3BhbiBsYW5nPTNEIkVOLVVTIiBz dHlsZT0zRCJmb250LXNpemU6ID0KMTAuNXB0OyBmb250LWZhbWlseTogQ2FsaWJyaSwgc2Fucy1z ZXJpZjsgY29sb3I6IHJnYigzMSwgNzMsIDEyNSk7IiA9CmNsYXNzPTNEIiI+WW91IHRvbGQgbWUg PUUyPTgwPTlDPC9zcGFuPjxzcGFuIGxhbmc9M0QiRU4tVVMiID0KY2xhc3M9M0QiIj5zaG91bGQg Zm9sbG93IHRoZSBkZXZlbCBzZXR1cCB3aWtpPC9zcGFuPjxzcGFuIGxhbmc9M0QiRU4tVVMiID0K c3R5bGU9M0QiZm9udC1zaXplOiAxMC41cHQ7IGZvbnQtZmFtaWx5OiBDYWxpYnJpLCBzYW5zLXNl cmlmOyBjb2xvcjogPQpyZ2IoMzEsIDczLCAxMjUpOyIgY2xhc3M9M0QiIj49RTI9ODA9OUQgLCB3 aGF0PUUyPTgwPTk5cyB0aGUgdHJ1ZSBsaW5rID0Kb2YgdmRzbSBkZXZlbCBzZXR1cCB3aWtpID8m bmJzcDsgSSBjYW49RTI9ODA9OTl0IGdldCB1c2VmdWwgaW5mb3JtYXRpb24gPQppbjxzcGFuIGNs YXNzPTNEImFwcGxlLWNvbnZlcnRlZC1zcGFjZSI+Jm5ic3A7PC9zcGFuPjxhID0KaHJlZj0zRCJo dHRwOi8vb3ZpcnQub3JnLyIgc3R5bGU9M0QiY29sb3I6IHB1cnBsZTsgdGV4dC1kZWNvcmF0aW9u OiA9CnVuZGVybGluZTsiIGNsYXNzPTNEIiI+PHNwYW4gc3R5bGU9M0QiY29sb3I6IHB1cnBsZTsi ID0KY2xhc3M9M0QiIj5vdmlydC5vcmc8L3NwYW4+PC9hPjxzcGFuID0KY2xhc3M9M0QiYXBwbGUt Y29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+b3IgZ29vZ2xlLjwvc3Bhbj48c3BhbiA9Cmxh bmc9M0QiRU4tVVMiIGNsYXNzPTNEIiI+PG86cCA9CmNsYXNzPTNEIiI+PC9vOnA+PC9zcGFuPjwv ZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9M0QiIj48ZGl2ID0Kc3R5bGU9M0QibWFyZ2luOiAw Y20gMGNtIDAuMDAwMXB0OyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiA9Cj1FNT1BRT04 Qj1FND1CRD05MzsiIGNsYXNzPTNEIiI+PHNwYW4gbGFuZz0zRCJFTi1VUyIgY2xhc3M9M0QiIj48 bzpwID0KY2xhc3M9M0QiIj4mbmJzcDs8L286cD48L3NwYW4+PC9kaXY+PC9kaXY+PGRpdiBzdHls ZT0zRCJtYXJnaW46IDBjbSAwY20gPQowLjAwMDFwdDsgZm9udC1zaXplOiAxMnB0OyBmb250LWZh bWlseTogPUU1PUFFPThCPUU0PUJEPTkzOyIgPQpjbGFzcz0zRCIiPjxzcGFuIGxhbmc9M0QiRU4t VVMiIGNsYXNzPTNEIiI+PGEgPQpocmVmPTNEImh0dHA6Ly93d3cub3ZpcnQub3JnL2RldmVsb3Av ZGV2ZWxvcGVyLWd1aWRlL3Zkc20vZGV2ZWxvcGVycy8iID0Kc3R5bGU9M0QiY29sb3I6IHB1cnBs ZTsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IiA9CmNsYXNzPTNEIiI+aHR0cDovL3d3dy5v dmlydC5vcmcvZGV2ZWxvcC9kZXZlbG9wZXItZ3VpZGUvdmRzbS9kZXZlbG9wZXJzLzwvPQphPiZu YnNwO2hhcyB0aXBzIGhvdyB0byBidWlsZCBmcm9tIHNvdXJjZSBhbmQgd2hhdCBwYWNrYWdlcyBh cmUgPQpuZWVkZWQ8bzpwIGNsYXNzPTNEIiI+PC9vOnA+PC9zcGFuPjwvZGl2PjwvZGl2PjxkaXYg Y2xhc3M9M0QiIj48ZGl2ID0Kc3R5bGU9M0QibWFyZ2luOiAwY20gMGNtIDAuMDAwMXB0OyBmb250 LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiA9Cj1FNT1BRT04Qj1FND1CRD05MzsiIGNsYXNzPTNE IiI+PHNwYW4gbGFuZz0zRCJFTi1VUyIgY2xhc3M9M0QiIj5Bbnl0aGluZyA9CnNwZWNpZmljIHlv dT1FMj04MD05OXJlIHRyb3VibGVzaG9vdGluZz88bzpwID0KY2xhc3M9M0QiIj48L286cD48L3Nw YW4+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0zRCIiPjxkaXYgc3R5bGU9M0QibWFyZ2luOiA9CjBj bSAwY20gMC4wMDAxcHQ7IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ID1FNT1BRT04Qj1F ND1CRD05MzsiID0KY2xhc3M9M0QiIj48c3BhbiBsYW5nPTNEIkVOLVVTIiBzdHlsZT0zRCJjb2xv cjogcmdiKDMxLCA3MywgMTI1KTsiID0KY2xhc3M9M0QiIj48bzpwIGNsYXNzPTNEIiI+Jm5ic3A7 PC9vOnA+PC9zcGFuPjwvZGl2PjxkaXYgc3R5bGU9M0QibWFyZ2luOiA9CjBjbSAwY20gMC4wMDAx cHQ7IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ID1FNT1BRT04Qj1FND1CRD05MzsiID0K Y2xhc3M9M0QiIj48c3BhbiBsYW5nPTNEIkVOLVVTIiBzdHlsZT0zRCJmb250LXNpemU6IDEwLjVw dDsgZm9udC1mYW1pbHk6ID0KQ2FsaWJyaSwgc2Fucy1zZXJpZjsgY29sb3I6IHJnYigzMSwgNzMs IDEyNSk7IiA9CmNsYXNzPTNEIiI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7IEkgZG8gYnVpbGQgPQp0aGUgc291cmNlIGZyb20gdGhpcyBpbnN0cnVjdGlv biAsIGJ1dCBJIHdhbnQgdG8gc2V0IGJyZWFrcG9pbnQgdG8gdmlldyA9CmVhY2ggc3RlcCBhbmQg dmFyaWFibGUgdmFsdWUgdG8gdW5kZXJzdGFuZCB0aGUgdmRzbT1FMj04MD05OXMgY29kZSB1c2lu ZyA9CnB5dGhvbiBJREUgc3VjaCBhcyBQeWNoYXJtICw8c3BhbiA9CmNsYXNzPTNEIkFwcGxlLWNv bnZlcnRlZC1zcGFjZSI+Jm5ic3A7PC9zcGFuPjxvOnAgPQpjbGFzcz0zRCIiPjwvbzpwPjwvc3Bh bj48L2Rpdj48ZGl2IHN0eWxlPTNEIm1hcmdpbjogMGNtIDBjbSAwLjAwMDFwdDsgPQpmb250LXNp emU6IDEycHQ7IGZvbnQtZmFtaWx5OiA9RTU9QUU9OEI9RTQ9QkQ9OTM7IiBjbGFzcz0zRCIiPjxz cGFuID0KbGFuZz0zRCJFTi1VUyIgc3R5bGU9M0QiZm9udC1zaXplOiAxMC41cHQ7IGZvbnQtZmFt aWx5OiBDYWxpYnJpLCA9CnNhbnMtc2VyaWY7IGNvbG9yOiByZ2IoMzEsIDczLCAxMjUpOyIgY2xh c3M9M0QiIj48bzpwID0KY2xhc3M9M0QiIj4mbmJzcDs8L286cD48L3NwYW4+PC9kaXY+PGRpdiBz dHlsZT0zRCJtYXJnaW46IDBjbSAwY20gPQowLjAwMDFwdDsgZm9udC1zaXplOiAxMnB0OyBmb250 LWZhbWlseTogPUU1PUFFPThCPUU0PUJEPTkzOyIgPQpjbGFzcz0zRCIiPjxzcGFuIGxhbmc9M0Qi RU4tVVMiIHN0eWxlPTNEImZvbnQtc2l6ZTogMTAuNXB0OyBmb250LWZhbWlseTogPQpDYWxpYnJp LCBzYW5zLXNlcmlmOyBjb2xvcjogcmdiKDMxLCA3MywgMTI1KTsiIGNsYXNzPTNEIiI+WW91IGtu b3cgdGhhdCA9CndlIGNhbiBpbXBsZW1lbnQgdGhpcyBkZWJ1ZyByZXF1aXJlbWVudCBpbiBvdmly dCBlbmdpbmUgZWFzaWx5LCBidXQgSSA9CmNhbj1FMj04MD05OXQgaW1wbGVtZW50IGxvY2FsIGRl YnVnIGluIHZkc20gZWFzaWx5LCBiZWNhdXNlIHZkc20gPQpkaWRuPUUyPTgwPTk5dCBhbGxvdyBy b290IHRvIHJ1biBvciBkZWJ1Zy48bzpwID0KY2xhc3M9M0QiIj48L286cD48L3NwYW4+PC9kaXY+ PGRpdiBzdHlsZT0zRCJtYXJnaW46IDBjbSAwY20gMC4wMDAxcHQ7ID0KZm9udC1zaXplOiAxMnB0 OyBmb250LWZhbWlseTogPUU1PUFFPThCPUU0PUJEPTkzOyIgY2xhc3M9M0QiIj48c3BhbiA9Cmxh bmc9M0QiRU4tVVMiIHN0eWxlPTNEImZvbnQtc2l6ZTogMTAuNXB0OyBmb250LWZhbWlseTogQ2Fs aWJyaSwgPQpzYW5zLXNlcmlmOyBjb2xvcjogcmdiKDMxLCA3MywgMTI1KTsiIGNsYXNzPTNEIiI+ PG86cCA9CmNsYXNzPTNEIiI+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvZGl2PjxkaXYgc3R5bGU9M0Qi bWFyZ2luOiAwY20gMGNtID0KMC4wMDAxcHQ7IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6 ID1FNT1BRT04Qj1FND1CRD05MzsiID0KY2xhc3M9M0QiIj48c3BhbiBsYW5nPTNEIkVOLVVTIiBz dHlsZT0zRCJmb250LXNpemU6IDEwLjVwdDsgZm9udC1mYW1pbHk6ID0KQ2FsaWJyaSwgc2Fucy1z ZXJpZjsgY29sb3I6IHJnYigzMSwgNzMsIDEyNSk7IiBjbGFzcz0zRCIiPklzIHRoZXJlIGFueSA9 CmRlYnVnIGluc3RydWN0aW9uID88L3NwYW4+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9ibG9j a3F1b3RlPjxkaXY+PGJyID0KY2xhc3M9M0QiIj48L2Rpdj5JIGRvbj1FMj04MD05OXQgdGhpbmsg aXQ9RTI9ODA9OTlzIHBvc3NpYmxlIHRvIGRlYnVnIGl0ID0KZnJvbSBQeUNoYXJtLCBvciBhbnkg SURFIGZvciB0aGF0IG1hdHRlciwgZWFzaWx5LiZuYnNwOzwvZGl2PjxkaXY+SXQ9RTI9ODA9Cj05 OXMgYSBtdWx0aXRocmVhZGVkIGFwcGxpY2F0aW9uLCB5b3UgY2FuPUUyPTgwPTk5dCByZWFsbHkg c2V0IGEgPQpicmVha3BvaW50IHdpdGhvdXQgYWZmZWN0aW5nIG90aGVyIGZ1bmN0aW9uYWxpdHkg c2luY2Ugc29tZSBvZiB0aGUgPQp0aHJlYWRzIG5lZWQgdG8ga2VlcCBydW5uaW5nPC9kaXY+PGRp dj5CZXN0IGFkdmljZSBpcyB0byBhZGQgYSA9CmRlYnVnZ2luZy9sb2dnaW5nIGNvZGUgaW4gcGxh Y2VzIHlvdSBuZWVkLCBwcmludGluZyB2YXJpYWJsZXMgeW91PUUyPTgwPTk5PQpyZSBpbnRlcmVz dGVkIGluLjwvZGl2PjxkaXY+PGJyID0KY2xhc3M9M0QiIj48L2Rpdj48ZGl2PlRoYW5rcyw8L2Rp dj48ZGl2Pm1pY2hhbDwvZGl2PjxkaXY+PGJyID0KY2xhc3M9M0QiIj48YmxvY2txdW90ZSB0eXBl PTNEImNpdGUiIGNsYXNzPTNEIiI+PGRpdiBjbGFzcz0zRCIiPjxkaXYgPQpjbGFzcz0zRCJXb3Jk U2VjdGlvbjEiIHN0eWxlPTNEInBhZ2U6IFdvcmRTZWN0aW9uMTsgZm9udC1mYW1pbHk6ID0KSGVs dmV0aWNhOyBmb250LXNpemU6IDEycHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50 LWNhcHM6ID0Kbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9y bWFsOyBvcnBoYW5zOiBhdXRvOyA9CnRleHQtYWxpZ246IHN0YXJ0OyB0ZXh0LWluZGVudDogMHB4 OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6ID0Kbm9ybWFsOyB3aWRvd3M6IGF1 dG87IHdvcmQtc3BhY2luZzogMHB4OyAtd2Via2l0LXRleHQtc3Ryb2tlLXdpZHRoOiA9CjBweDsi PjxkaXYgY2xhc3M9M0QiIj48ZGl2IHN0eWxlPTNEIm1hcmdpbjogMGNtIDBjbSAwLjAwMDFwdDsg Zm9udC1zaXplOiA9CjEycHQ7IGZvbnQtZmFtaWx5OiA9RTU9QUU9OEI9RTQ9QkQ9OTM7IiBjbGFz cz0zRCIiPjxzcGFuIGxhbmc9M0QiRU4tVVMiID0Kc3R5bGU9M0QiZm9udC1zaXplOiAxMC41cHQ7 IGZvbnQtZmFtaWx5OiBDYWxpYnJpLCBzYW5zLXNlcmlmOyBjb2xvcjogPQpyZ2IoMzEsIDczLCAx MjUpOyIgY2xhc3M9M0QiIj48bzpwIGNsYXNzPTNEIiI+PC9vOnA+PC9zcGFuPjwvZGl2PjxkaXYg PQpzdHlsZT0zRCJtYXJnaW46IDBjbSAwY20gMC4wMDAxcHQ7IGZvbnQtc2l6ZTogMTJwdDsgZm9u dC1mYW1pbHk6ID0KPUU1PUFFPThCPUU0PUJEPTkzOyIgY2xhc3M9M0QiIj48c3BhbiBsYW5nPTNE IkVOLVVTIiBzdHlsZT0zRCJmb250LXNpemU6ID0KMTAuNXB0OyBmb250LWZhbWlseTogQ2FsaWJy aSwgc2Fucy1zZXJpZjsgY29sb3I6IHJnYigzMSwgNzMsIDEyNSk7IiA9CmNsYXNzPTNEIiI+PG86 cCBjbGFzcz0zRCIiPiZuYnNwOzwvbzpwPjwvc3Bhbj48L2Rpdj48ZGl2IHN0eWxlPTNEIm1hcmdp bjogPQowY20gMGNtIDAuMDAwMXB0OyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiA9RTU9 QUU9OEI9RTQ9QkQ9OTM7IiA9CmNsYXNzPTNEIiI+PHNwYW4gbGFuZz0zRCJFTi1VUyIgc3R5bGU9 M0QiZm9udC1zaXplOiAxMC41cHQ7IGZvbnQtZmFtaWx5OiA9CkNhbGlicmksIHNhbnMtc2VyaWY7 IGNvbG9yOiByZ2IoMzEsIDczLCAxMjUpOyIgY2xhc3M9M0QiIj5UaGFuayB5b3U8bzpwID0KY2xh c3M9M0QiIj48L286cD48L3NwYW4+PC9kaXY+PGRpdiBzdHlsZT0zRCJtYXJnaW46IDBjbSAwY20g MC4wMDAxcHQ7ID0KZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogPUU1PUFFPThCPUU0PUJE PTkzOyIgY2xhc3M9M0QiIj48c3BhbiA9Cmxhbmc9M0QiRU4tVVMiIHN0eWxlPTNEImZvbnQtc2l6 ZTogMTAuNXB0OyBmb250LWZhbWlseTogQ2FsaWJyaSwgPQpzYW5zLXNlcmlmOyBjb2xvcjogcmdi KDMxLCA3MywgMTI1KTsiIGNsYXNzPTNEIiI+TWFyazxvOnAgPQpjbGFzcz0zRCIiPjwvbzpwPjwv c3Bhbj48L2Rpdj48ZGl2IHN0eWxlPTNEIm1hcmdpbjogMGNtIDBjbSAwLjAwMDFwdDsgPQpmb250 LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiA9RTU9QUU9OEI9RTQ9QkQ9OTM7IiBjbGFzcz0zRCIi PjxzcGFuID0KbGFuZz0zRCJFTi1VUyIgc3R5bGU9M0QiZm9udC1zaXplOiAxMC41cHQ7IGZvbnQt ZmFtaWx5OiBDYWxpYnJpLCA9CnNhbnMtc2VyaWY7IGNvbG9yOiByZ2IoMzEsIDczLCAxMjUpOyIg Y2xhc3M9M0QiIj48bzpwID0KY2xhc3M9M0QiIj4mbmJzcDs8L286cD48L3NwYW4+PC9kaXY+PC9k aXY+PGRpdiBjbGFzcz0zRCIiPjxkaXYgPQpzdHlsZT0zRCJtYXJnaW46IDBjbSAwY20gMC4wMDAx cHQ7IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ID0KPUU1PUFFPThCPUU0PUJEPTkzOyIg Y2xhc3M9M0QiIj48c3BhbiBsYW5nPTNEIkVOLVVTIiA9CmNsYXNzPTNEIiI+VGhhbmtzLDxvOnAg Y2xhc3M9M0QiIj48L286cD48L3NwYW4+PC9kaXY+PC9kaXY+PGRpdiA9CmNsYXNzPTNEIiI+PGRp diBzdHlsZT0zRCJtYXJnaW46IDBjbSAwY20gMC4wMDAxcHQ7IGZvbnQtc2l6ZTogMTJwdDsgPQpm b250LWZhbWlseTogPUU1PUFFPThCPUU0PUJEPTkzOyIgY2xhc3M9M0QiIj48c3BhbiBsYW5nPTNE IkVOLVVTIiA9CmNsYXNzPTNEIiI+bWljaGFsPG86cCBjbGFzcz0zRCIiPjwvbzpwPjwvc3Bhbj48 L2Rpdj48L2Rpdj48ZGl2ID0KY2xhc3M9M0QiIj48ZGl2IHN0eWxlPTNEIm1hcmdpbjogMGNtIDBj bSAwLjAwMDFwdDsgZm9udC1zaXplOiAxMnB0OyA9CmZvbnQtZmFtaWx5OiA9RTU9QUU9OEI9RTQ9 QkQ9OTM7IiBjbGFzcz0zRCIiPjxzcGFuIGxhbmc9M0QiRU4tVVMiID0KY2xhc3M9M0QiIj48YnIg Y2xhc3M9M0QiIj48YnIgY2xhc3M9M0QiIj48bzpwID0KY2xhc3M9M0QiIj48L286cD48L3NwYW4+ PC9kaXY+PGRpdiBjbGFzcz0zRCIiPjxkaXYgY2xhc3M9M0QiIj48ZGl2ID0Kc3R5bGU9M0QibWFy Z2luOiAwY20gMGNtIDAuMDAwMXB0OyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiA9Cj1F NT1BRT04Qj1FND1CRD05MzsiIGNsYXNzPTNEIiI+PHNwYW4gbGFuZz0zRCJFTi1VUyIgc3R5bGU9 M0QiZm9udC1zaXplOiA9CjEwLjVwdDsgZm9udC1mYW1pbHk6IENhbGlicmksIHNhbnMtc2VyaWY7 IGNvbG9yOiByZ2IoMzEsIDczLCAxMjUpOyIgPQpjbGFzcz0zRCIiPiZuYnNwOzwvc3Bhbj48c3Bh biBsYW5nPTNEIkVOLVVTIiBjbGFzcz0zRCIiPjxvOnAgPQpjbGFzcz0zRCIiPjwvbzpwPjwvc3Bh bj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPTNEIiI+PGRpdiBzdHlsZT0zRCJtYXJnaW46ID0KMGNt IDBjbSAwLjAwMDFwdDsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogPUU1PUFFPThCPUU0 PUJEPTkzOyIgPQpjbGFzcz0zRCIiPjxzcGFuIGxhbmc9M0QiRU4tVVMiIHN0eWxlPTNEImZvbnQt c2l6ZTogMTAuNXB0OyBmb250LWZhbWlseTogPQpDYWxpYnJpLCBzYW5zLXNlcmlmOyBjb2xvcjog cmdiKDMxLCA3MywgMTI1KTsiID0KY2xhc3M9M0QiIj4mbmJzcDs8L3NwYW4+PHNwYW4gbGFuZz0z RCJFTi1VUyIgY2xhc3M9M0QiIj48bzpwID0KY2xhc3M9M0QiIj48L286cD48L3NwYW4+PC9kaXY+ PC9kaXY+PGRpdiBjbGFzcz0zRCIiPjxkaXYgc3R5bGU9M0QibWFyZ2luOiA9CjBjbSAwY20gMC4w MDAxcHQ7IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ID1FNT1BRT04Qj1FND1CRD05Mzsi ID0KY2xhc3M9M0QiIj48c3BhbiBsYW5nPTNEIkVOLVVTIiBzdHlsZT0zRCJmb250LXNpemU6IDEw LjVwdDsgZm9udC1mYW1pbHk6ID0KQ2FsaWJyaSwgc2Fucy1zZXJpZjsgY29sb3I6IHJnYigzMSwg NzMsIDEyNSk7IiBjbGFzcz0zRCIiPlRoYW5rID0KeW91PC9zcGFuPjxzcGFuIGxhbmc9M0QiRU4t VVMiIGNsYXNzPTNEIiI+PG86cCA9CmNsYXNzPTNEIiI+PC9vOnA+PC9zcGFuPjwvZGl2PjwvZGl2 PjxkaXYgY2xhc3M9M0QiIj48ZGl2IHN0eWxlPTNEIm1hcmdpbjogPQowY20gMGNtIDAuMDAwMXB0 OyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiA9RTU9QUU9OEI9RTQ9QkQ9OTM7IiA9CmNs YXNzPTNEIiI+PHNwYW4gbGFuZz0zRCJFTi1VUyIgc3R5bGU9M0QiZm9udC1zaXplOiAxMC41cHQ7 IGZvbnQtZmFtaWx5OiA9CkNhbGlicmksIHNhbnMtc2VyaWY7IGNvbG9yOiByZ2IoMzEsIDczLCAx MjUpOyIgPQpjbGFzcz0zRCIiPiZuYnNwOzwvc3Bhbj48c3BhbiBsYW5nPTNEIkVOLVVTIiBjbGFz cz0zRCIiPjxvOnAgPQpjbGFzcz0zRCIiPjwvbzpwPjwvc3Bhbj48L2Rpdj48L2Rpdj48ZGl2IGNs YXNzPTNEIiI+PGRpdiA9CnN0eWxlPTNEImJvcmRlci1zdHlsZTogc29saWQgbm9uZSBub25lOyBi b3JkZXItdG9wLWNvbG9yOiByZ2IoMTgxLCAxOTYsID0KMjIzKTsgYm9yZGVyLXRvcC13aWR0aDog MXB0OyBwYWRkaW5nOiAzcHQgMGNtIDBjbTsiIGNsYXNzPTNEIiI+PGRpdiA9CmNsYXNzPTNEIiI+ PGRpdiBzdHlsZT0zRCJtYXJnaW46IDBjbSAwY20gMC4wMDAxcHQ7IGZvbnQtc2l6ZTogMTJwdDsg PQpmb250LWZhbWlseTogPUU1PUFFPThCPUU0PUJEPTkzOyIgY2xhc3M9M0QiIj48YiBjbGFzcz0z RCIiPjxzcGFuID0Kc3R5bGU9M0QiZm9udC1zaXplOiAxMHB0OyIgY2xhc3M9M0QiIj49RTU9OEY9 OTE9RTQ9QkI9QjY9RTQ9QkE9QkE8c3BhbiA9Cmxhbmc9M0QiRU4tVVMiIGNsYXNzPTNEIiI+Ojwv c3Bhbj48L3NwYW4+PC9iPjxzcGFuID0KY2xhc3M9M0QiYXBwbGUtY29udmVydGVkLXNwYWNlIj48 c3BhbiBsYW5nPTNEIkVOLVVTIiBzdHlsZT0zRCJmb250LXNpemU6ID0KMTBwdDsiIGNsYXNzPTNE IiI+Jm5ic3A7PC9zcGFuPjwvc3Bhbj48c3BhbiBsYW5nPTNEIkVOLVVTIiA9CnN0eWxlPTNEImZv bnQtc2l6ZTogMTBwdDsiIGNsYXNzPTNEIiI+TWljaGFsIFNrcml2YW5layBbPGEgPQpocmVmPTNE Im1haWx0bzptc2tyaXZhbkByZWRoYXQuY29tIiBzdHlsZT0zRCJjb2xvcjogcHVycGxlOyA9CnRl eHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyIgPQpjbGFzcz0zRCIiPm1haWx0bzptc2tyaXZhbkBy ZWRoYXQuY29tPC9hPl08c3BhbiA9CmNsYXNzPTNEImFwcGxlLWNvbnZlcnRlZC1zcGFjZSI+Jm5i c3A7PC9zcGFuPjxiciBjbGFzcz0zRCIiPjwvc3Bhbj48YiA9CmNsYXNzPTNEIiI+PHNwYW4gc3R5 bGU9M0QiZm9udC1zaXplOiAxMHB0OyIgY2xhc3M9M0QiIj49RTU9OEY9OTE9RTk9ODA9ODE9RTY9 Cj05Nz1CNj1FOT05Nz1CNDxzcGFuIGxhbmc9M0QiRU4tVVMiIGNsYXNzPTNEIiI+Ojwvc3Bhbj48 L3NwYW4+PC9iPjxzcGFuID0KY2xhc3M9M0QiYXBwbGUtY29udmVydGVkLXNwYWNlIj48c3BhbiBs YW5nPTNEIkVOLVVTIiBzdHlsZT0zRCJmb250LXNpemU6ID0KMTBwdDsiIGNsYXNzPTNEIiI+Jm5i c3A7PC9zcGFuPjwvc3Bhbj48c3BhbiBsYW5nPTNEIkVOLVVTIiA9CnN0eWxlPTNEImZvbnQtc2l6 ZTogMTBwdDsiIGNsYXNzPTNEIiI+MjAxNjwvc3Bhbj48c3BhbiBzdHlsZT0zRCJmb250LXNpemU6 PQogMTBwdDsiIGNsYXNzPTNEIiI+PUU1PUI5PUI0PHNwYW4gbGFuZz0zRCJFTi1VUyIgPQpjbGFz cz0zRCIiPjc8L3NwYW4+PUU2PTlDPTg4PHNwYW4gbGFuZz0zRCJFTi1VUyIgPQpjbGFzcz0zRCIi PjI2PC9zcGFuPj1FNj05Nz1BNTxzcGFuIGNsYXNzPTNEImFwcGxlLWNvbnZlcnRlZC1zcGFjZSI+ PHNwYW4gPQpsYW5nPTNEIkVOLVVTIiBjbGFzcz0zRCIiPiZuYnNwOzwvc3Bhbj48L3NwYW4+PHNw YW4gbGFuZz0zRCJFTi1VUyIgPQpjbGFzcz0zRCIiPjU6MDA8YnIgY2xhc3M9M0QiIj48L3NwYW4+ PGIgY2xhc3M9M0QiIj49RTY9OTQ9QjY9RTQ9QkI9QjY9RTQ9QkE9Cj1CQTxzcGFuIGxhbmc9M0Qi RU4tVVMiIGNsYXNzPTNEIiI+Ojwvc3Bhbj48L2I+PHNwYW4gPQpjbGFzcz0zRCJhcHBsZS1jb252 ZXJ0ZWQtc3BhY2UiPjxzcGFuIGxhbmc9M0QiRU4tVVMiID0KY2xhc3M9M0QiIj4mbmJzcDs8L3Nw YW4+PC9zcGFuPjxzcGFuIGxhbmc9M0QiRU4tVVMiID0KY2xhc3M9M0QiIj5saWZ1cWlvbmc8YnIg Y2xhc3M9M0QiIj48L3NwYW4+PGIgY2xhc3M9M0QiIj49RTY9OEE9ODQ9RTk9ODA9ODE9CjxzcGFu IGxhbmc9M0QiRU4tVVMiIGNsYXNzPTNEIiI+Ojwvc3Bhbj48L2I+PHNwYW4gPQpjbGFzcz0zRCJh cHBsZS1jb252ZXJ0ZWQtc3BhY2UiPjxzcGFuIGxhbmc9M0QiRU4tVVMiID0KY2xhc3M9M0QiIj4m bmJzcDs8L3NwYW4+PC9zcGFuPjxzcGFuIGxhbmc9M0QiRU4tVVMiIGNsYXNzPTNEIiI+dXNlcnM7 ID0KZGV2ZWw8YnIgY2xhc3M9M0QiIj48L3NwYW4+PGIgY2xhc3M9M0QiIj49RTQ9Qjg9QkI9RTk9 QTI9OTg8c3BhbiA9Cmxhbmc9M0QiRU4tVVMiIGNsYXNzPTNEIiI+Ojwvc3Bhbj48L2I+PHNwYW4g PQpjbGFzcz0zRCJhcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPjxzcGFuIGxhbmc9M0QiRU4tVVMiID0K Y2xhc3M9M0QiIj4mbmJzcDs8L3NwYW4+PC9zcGFuPjxzcGFuIGxhbmc9M0QiRU4tVVMiIGNsYXNz PTNEIiI+UmU6ID0KW292aXJ0LWRldmVsXSBEZWJ1ZyB2ZHNtIDQuMC4wIHJlcG9ydCBlcnJvcjog bGlidmlydDogWE1MLVJQQyBlcnJvciA6ID0KRmFpbGVkIHRvIGNvbm5lY3Qgc29ja2V0IHRvICcv dmFyL3J1bi9saWJ2aXJ0L2xpYnZpcnQtc29jayc6IFBlcm1pc3Npb24gPQpkZW5pZWQ8L3NwYW4+ PC9zcGFuPjxzcGFuIGxhbmc9M0QiRU4tVVMiIGNsYXNzPTNEIiI+PG86cCA9CmNsYXNzPTNEIiI+ PC9vOnA+PC9zcGFuPjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9M0QiIj48ZGl2 ID0Kc3R5bGU9M0QibWFyZ2luOiAwY20gMGNtIDAuMDAwMXB0OyBmb250LXNpemU6IDEycHQ7IGZv bnQtZmFtaWx5OiA9Cj1FNT1BRT04Qj1FND1CRD05MzsiIGNsYXNzPTNEIiI+PHNwYW4gbGFuZz0z RCJFTi1VUyIgY2xhc3M9M0QiIj4mbmJzcDs8bzpwPQogY2xhc3M9M0QiIj48L286cD48L3NwYW4+ PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0zRCIiPjxkaXYgY2xhc3M9M0QiIj48ZGl2ID0Kc3R5bGU9 M0QibWFyZ2luOiAwY20gMGNtIDAuMDAwMXB0OyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5 OiA9Cj1FNT1BRT04Qj1FND1CRD05MzsiIGNsYXNzPTNEIiI+PHNwYW4gbGFuZz0zRCJFTi1VUyIg Y2xhc3M9M0QiIj4mbmJzcDs8bzpwPQogY2xhc3M9M0QiIj48L286cD48L3NwYW4+PC9kaXY+PC9k aXY+PC9kaXY+PGRpdiBjbGFzcz0zRCIiPjxwID0KY2xhc3M9M0QiTXNvTm9ybWFsIiBzdHlsZT0z RCJtYXJnaW46IDBjbSAwY20gMTJwdDsgZm9udC1zaXplOiAxMnB0OyA9CmZvbnQtZmFtaWx5OiA9 RTU9QUU9OEI9RTQ9QkQ9OTM7Ij48c3BhbiBsYW5nPTNEIkVOLVVTIiBjbGFzcz0zRCIiPjxiciA9 CmNsYXNzPTNEIiI+T24gMjUgSnVsIDIwMTYsIGF0IDIxOjUwLCBTYW5kcm8gQm9uYXp6b2xhICZs dDs8YSA9CmhyZWY9M0QibWFpbHRvOnNib25henpvQHJlZGhhdC5jb20iIHN0eWxlPTNEImNvbG9y OiBwdXJwbGU7ID0KdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IiBjbGFzcz0zRCIiPjxzcGFu IHN0eWxlPTNEImNvbG9yOiBwdXJwbGU7IiA9CmNsYXNzPTNEIiI+c2JvbmF6em9AcmVkaGF0LmNv bTwvc3Bhbj48L2E+Jmd0OyB3cm90ZTo8bzpwID0KY2xhc3M9M0QiIj48L286cD48L3NwYW4+PC9w PjwvZGl2PjxibG9ja3F1b3RlIHN0eWxlPTNEIm1hcmdpbi10b3A6IDVwdDsgPQptYXJnaW4tYm90 dG9tOiA1cHQ7IiBjbGFzcz0zRCIiPjxkaXYgY2xhc3M9M0QiIj48ZGl2IHN0eWxlPTNEIm1hcmdp bjogPQowY20gMGNtIDAuMDAwMXB0OyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiA9RTU9 QUU9OEI9RTQ9QkQ9OTM7IiA9CmNsYXNzPTNEIiI+PHNwYW4gbGFuZz0zRCJFTi1VUyIgY2xhc3M9 M0QiIj5BZGRpbmcgc29tZSBwZW9wbGUgZnJvbSB2aXJ0ID0KdGVhbS48bzpwIGNsYXNzPTNEIiI+ PC9vOnA+PC9zcGFuPjwvZGl2PjxkaXYgc3R5bGU9M0QibWFyZ2luOiAwY20gMGNtID0KMC4wMDAx cHQ7IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ID1FNT1BRT04Qj1FND1CRD05MzsiID0K Y2xhc3M9M0QiIj48c3BhbiBsYW5nPTNEIkVOLVVTIiBjbGFzcz0zRCIiPklsIDIzL0x1Zy8yMDE2 IDExOjQ0LCA9CiJsaWZ1cWlvbmciICZsdDs8YSBocmVmPTNEIm1haWx0bzpsaWZ1cWlvbmdAY25j bG91ZHNlYy5jb20iID0Kc3R5bGU9M0QiY29sb3I6IHB1cnBsZTsgdGV4dC1kZWNvcmF0aW9uOiB1 bmRlcmxpbmU7IiBjbGFzcz0zRCIiPjxzcGFuID0Kc3R5bGU9M0QiY29sb3I6IHB1cnBsZTsiID0K Y2xhc3M9M0QiIj5saWZ1cWlvbmdAY25jbG91ZHNlYy5jb208L3NwYW4+PC9hPiZndDsgaGEgc2Ny aXR0bzo8YnIgPQpjbGFzcz0zRCIiPiZndDs8YnIgY2xhc3M9M0QiIj4mZ3Q7IEkgZGVidWdnZWQg dmRzbSB3aXRoIFB5Q2hhcm0sIEFuZCBJID0KbG9nZ2VkIG9uIG15IENlbnRvcyA3LjIgd2l0aCBy b290LCAmbmJzcDthbmQgZ2V0IGFuIGVycm9yIGFzIGZvbGxvd3M6PGJyID0KY2xhc3M9M0QiIj4m Z3Q7PGJyIGNsYXNzPTNEIiI+Jmd0OyAmbmJzcDs8YnIgY2xhc3M9M0QiIj4mZ3Q7PGJyID0KY2xh c3M9M0QiIj4mZ3Q7IFByb2JsZW06PGJyIGNsYXNzPTNEIiI+Jmd0OzxiciBjbGFzcz0zRCIiPiZn dDsgJm5ic3A7PGJyID0KY2xhc3M9M0QiIj4mZ3Q7PGJyIGNsYXNzPTNEIiI+Jmd0OyBUcmFjZWJh Y2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6PGJyID0KY2xhc3M9M0QiIj4mZ3Q7PGJyIGNsYXNz PTNEIiI+Jmd0OyAmbmJzcDsgRmlsZSAiL3Vzci9zaGFyZS92ZHNtL3Zkc20iLCA9CmxpbmUgMTQ5 LCBpbiBydW48YnIgY2xhc3M9M0QiIj4mZ3Q7PGJyIGNsYXNzPTNEIiI+Jmd0OyA9CiZuYnNwOyZu YnNwOyZuYnNwOyBzZXJ2ZV9jbGllbnRzKGxvZyk8YnIgY2xhc3M9M0QiIj4mZ3Q7PGJyID0KY2xh c3M9M0QiIj4mZ3Q7ICZuYnNwOyBGaWxlICIvdXNyL3NoYXJlL3Zkc20vdmRzbSIsIGxpbmUgMTA0 LCBpbiA9CnNlcnZlX2NsaWVudHM8YnIgY2xhc3M9M0QiIj4mZ3Q7PGJyIGNsYXNzPTNEIiI+Jmd0 OyAmbmJzcDsmbmJzcDsmbmJzcDsgPQpjaWYgPTNEIGNsaWVudElGLmdldEluc3RhbmNlKGlycywg bG9nLCBzY2hlZHVsZXIpPGJyIGNsYXNzPTNEIiI+Jmd0OzxiciA9CmNsYXNzPTNEIiI+Jmd0OyAm bmJzcDsgRmlsZSAiL3Vzci9zaGFyZS92ZHNtL2NsaWVudElGLnB5IiwgbGluZSAyMDQsIGluID0K Z2V0SW5zdGFuY2U8YnIgY2xhc3M9M0QiIj4mZ3Q7PGJyIGNsYXNzPTNEIiI+Jmd0OyAmbmJzcDsm bmJzcDsmbmJzcDsgPQpjbHMuX2luc3RhbmNlID0zRCBjbGllbnRJRihpcnMsIGxvZywgc2NoZWR1 bGVyKTxiciBjbGFzcz0zRCIiPiZndDs8YnIgPQpjbGFzcz0zRCIiPiZndDsgJm5ic3A7IEZpbGUg Ii91c3Ivc2hhcmUvdmRzbS9jbGllbnRJRi5weSIsIGxpbmUgMTA2LCBpbiA9Cl9faW5pdF9fPGJy IGNsYXNzPTNEIiI+Jmd0OzxiciBjbGFzcz0zRCIiPiZndDsgJm5ic3A7Jm5ic3A7Jm5ic3A7ID0K c2VjcmV0LmNsZWFyKCk8YnIgY2xhc3M9M0QiIj4mZ3Q7PGJyIGNsYXNzPTNEIiI+Jmd0OyAmbmJz cDsgRmlsZSA9CiIvdXNyL2xpYi9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy92ZHNtL3ZpcnQvc2Vj cmV0LnB5IiwgbGluZSA5MiwgaW4gPQpjbGVhcjxiciBjbGFzcz0zRCIiPiZndDs8YnIgY2xhc3M9 M0QiIj4mZ3Q7ICZuYnNwOyZuYnNwOyZuYnNwOyBjb24gPTNEID0KbGlidmlydGNvbm5lY3Rpb24u Z2V0KCk8YnIgY2xhc3M9M0QiIj4mZ3Q7PGJyIGNsYXNzPTNEIiI+Jmd0OyAmbmJzcDsgPQpGaWxl ICIvdXNyL2xpYi9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy92ZHNtL2xpYnZpcnRjb25uZWN0aW9u LnB5IiwgbGluZSA9CjE2MywgaW4gZ2V0PGJyIGNsYXNzPTNEIiI+Jmd0OzxiciBjbGFzcz0zRCIi PiZndDsgJm5ic3A7Jm5ic3A7Jm5ic3A7ID0KcGFzc3dvcmQpPGJyIGNsYXNzPTNEIiI+Jmd0Ozxi ciBjbGFzcz0zRCIiPiZndDsgJm5ic3A7IEZpbGUgPQoiL3Vzci9saWIvcHl0aG9uMi43L3NpdGUt cGFja2FnZXMvdmRzbS9saWJ2aXJ0Y29ubmVjdGlvbi5weSIsIGxpbmUgOTksID0KaW4gb3Blbl9j b25uZWN0aW9uPGJyIGNsYXNzPTNEIiI+Jmd0OzxiciBjbGFzcz0zRCIiPiZndDsgPQombmJzcDsm bmJzcDsmbmJzcDsgcmV0dXJuIHV0aWxzLnJldHJ5KGxpYnZpcnRPcGVuLCB0aW1lb3V0PTNEMTAs ID0Kc2xlZXA9M0QwLjIpPGJyIGNsYXNzPTNEIiI+Jmd0OzxiciBjbGFzcz0zRCIiPiZndDsgJm5i c3A7IEZpbGUgPQoiL3Vzci9saWIvcHl0aG9uMi43L3NpdGUtcGFja2FnZXMvdmRzbS91dGlscy5w eSIsIGxpbmUgNTQ2LCBpbiByZXRyeTxiciA9CmNsYXNzPTNEIiI+Jmd0OzxiciBjbGFzcz0zRCIi PiZndDsgJm5ic3A7Jm5ic3A7Jm5ic3A7IHJldHVybiBmdW5jKCk8YnIgPQpjbGFzcz0zRCIiPiZn dDs8YnIgY2xhc3M9M0QiIj4mZ3Q7ICZuYnNwOyBGaWxlID0KIi91c3IvbGliNjQvcHl0aG9uMi43 L3NpdGUtcGFja2FnZXMvbGlidmlydC5weSIsIGxpbmUgMTA1LCBpbiA9Cm9wZW5BdXRoPGJyIGNs YXNzPTNEIiI+Jmd0OzxiciBjbGFzcz0zRCIiPiZndDsgJm5ic3A7Jm5ic3A7Jm5ic3A7IGlmIHJl dCA9CmlzIE5vbmU6cmFpc2UgbGlidmlydEVycm9yKCd2aXJDb25uZWN0T3BlbkF1dGgoKSBmYWls ZWQnKTxiciA9CmNsYXNzPTNEIiI+Jmd0OzxiciBjbGFzcz0zRCIiPiZndDsgbGlidmlydEVycm9y OiBGYWlsZWQgdG8gY29ubmVjdCA9CnNvY2tldCB0byAnL3Zhci9ydW4vbGlidmlydC9saWJ2aXJ0 LXNvY2snOiBQZXJtaXNzaW9uIGRlbmllZDxiciA9CmNsYXNzPTNEIiI+Jmd0OzxiciBjbGFzcz0z RCIiPiZndDsgJm5ic3A7PGJyIGNsYXNzPTNEIiI+Jmd0OzxiciA9CmNsYXNzPTNEIiI+Jmd0OyBJ bnZlc3RpdGF0ZTo8YnIgY2xhc3M9M0QiIj4mZ3Q7PGJyIGNsYXNzPTNEIiI+Jmd0OyA9CkFjY29y ZGluZyB0byB0aGUgdHJhY2ViYWNrIGFib3ZlLCB0aGUgY29kZSBpbiBsaWJ2aXJ0LnB5IGFzIGJl bG93LCBhbmQgPQombmJzcDtvcy5nZXRldWlkKCkgZ2V0PHNwYW4gPQpjbGFzcz0zRCJBcHBsZS1j b252ZXJ0ZWQtc3BhY2UiPiZuYnNwOzwvc3Bhbj48L3NwYW4+PUUyPTgwPTk4PHNwYW4gPQpsYW5n PTNEIkVOLVVTIiBjbGFzcz0zRCIiPjA8L3NwYW4+PUUyPTgwPTk5PHNwYW4gbGFuZz0zRCJFTi1V UyIgPQpjbGFzcz0zRCIiPjxzcGFuIGNsYXNzPTNEIkFwcGxlLWNvbnZlcnRlZC1zcGFjZSI+Jm5i c3A7PC9zcGFuPndoaWNoID0Kc2hvd3MgdGhlIGN1cnJlbnQgdXNlciBpcyByb290OzxvOnAgPQpj bGFzcz0zRCIiPjwvbzpwPjwvc3Bhbj48L2Rpdj48L2Rpdj48L2Jsb2NrcXVvdGU+PGRpdiBjbGFz cz0zRCIiPjxkaXYgPQpjbGFzcz0zRCIiPjxkaXYgc3R5bGU9M0QibWFyZ2luOiAwY20gMGNtIDAu MDAwMXB0OyBmb250LXNpemU6IDEycHQ7ID0KZm9udC1mYW1pbHk6ID1FNT1BRT04Qj1FND1CRD05 MzsiIGNsYXNzPTNEIiI+PHNwYW4gbGFuZz0zRCJFTi1VUyIgPQpjbGFzcz0zRCIiPiZuYnNwOzxv OnAgY2xhc3M9M0QiIj48L286cD48L3NwYW4+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiA9CmNsYXNz PTNEIiI+PGRpdiBzdHlsZT0zRCJtYXJnaW46IDBjbSAwY20gMC4wMDAxcHQ7IGZvbnQtc2l6ZTog MTJwdDsgPQpmb250LWZhbWlseTogPUU1PUFFPThCPUU0PUJEPTkzOyIgY2xhc3M9M0QiIj48c3Bh biBsYW5nPTNEIkVOLVVTIiA9CmNsYXNzPTNEIiI+dmRzbSBpcyBub3Qgc3VwcG9zZWQgdG8gYmUg cnVuIHVuZGVyIHJvb3QgdXNlci4gRm9yIGRlYnVnZ2luZyA9CnlvdSBzaG91bGQgZm9sbG93IHRo ZSBkZXZlbCBzZXR1cCB3aWtpIGFuZCBub3QgY2hhbmdlIGEgcmVndWxhciA9Cmhvc3QuJm5ic3A7 PG86cCBjbGFzcz0zRCIiPjwvbzpwPjwvc3Bhbj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPTNEIiI+ PGRpdiA9CmNsYXNzPTNEIiI+PGRpdiBzdHlsZT0zRCJtYXJnaW46IDBjbSAwY20gMC4wMDAxcHQ7 IGZvbnQtc2l6ZTogMTJwdDsgPQpmb250LWZhbWlseTogPUU1PUFFPThCPUU0PUJEPTkzOyIgY2xh c3M9M0QiIj48c3BhbiBsYW5nPTNEIkVOLVVTIiA9CmNsYXNzPTNEIiI+RGVwZW5kcyB3aGF0IHlv dSBtb2RpZmllZCwgaXQncyBpbXBvc3NpYmxlIHRvIHNheSBmcm9tIHdoYXQgPQp5b3UgZGVzY3Jp YmVkLi4uLmJ1dCBhIGdlbmVyYWwgYWR2aWNlIGlzIHlvdSBzaW1wbHkgZG9uJ3QgZG8gdGhhdDop PGJyID0KY2xhc3M9M0QiIj48YnIgY2xhc3M9M0QiIj48YnIgY2xhc3M9M0QiIj48bzpwID0KY2xh c3M9M0QiIj48L286cD48L3NwYW4+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0zRCIiPjxkaXYgc3R5 bGU9M0QibWFyZ2luOiA9CjBjbSAwY20gMC4wMDAxcHQ7IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1m YW1pbHk6ID1FNT1BRT04Qj1FND1CRD05MzsiID0KY2xhc3M9M0QiIj48c3BhbiBsYW5nPTNEIkVO LVVTIiBjbGFzcz0zRCIiPiZndDs8YnIgY2xhc3M9M0QiIj4mZ3Q7ID0KJm5ic3A7PGJyIGNsYXNz PTNEIiI+Jmd0OzxiciBjbGFzcz0zRCIiPiZndDsgZGVmIG9wZW5BdXRoKHVyaSwgYXV0aCwgPQpm bGFncz0zRDApOjxiciBjbGFzcz0zRCIiPiZndDs8YnIgY2xhc3M9M0QiIj4mZ3Q7ID0KJm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICNwcmludCBvcy5nZXRl dWlkKCk8YnIgPQpjbGFzcz0zRCIiPiZndDs8YnIgY2xhc3M9M0QiIj4mZ3Q7ICZuYnNwOyZuYnNw OyZuYnNwOyByZXQgPTNEID0KbGlidmlydG1vZC52aXJDb25uZWN0T3BlbkF1dGgodXJpLCBhdXRo LCBmbGFncyk8YnIgY2xhc3M9M0QiIj4mZ3Q7PGJyID0KY2xhc3M9M0QiIj4mZ3Q7ICZuYnNwOyZu YnNwOyZuYnNwOyBpZiByZXQgaXMgTm9uZTpyYWlzZSA9CmxpYnZpcnRFcnJvcigndmlyQ29ubmVj dE9wZW5BdXRoKCkgZmFpbGVkJyk8YnIgY2xhc3M9M0QiIj4mZ3Q7PGJyID0KY2xhc3M9M0QiIj4m Z3Q7IHJldHVybiB2aXJDb25uZWN0KF9vYmo9M0RyZXQpPGJyIGNsYXNzPTNEIiI+Jmd0OzxiciA9 CmNsYXNzPTNEIiI+Jmd0OyAmbmJzcDs8YnIgY2xhc3M9M0QiIj4mZ3Q7PGJyIGNsYXNzPTNEIiI+ Jmd0OyA9Cltyb290QHNlcnZlcjExNyBsaWJ2aXJ0XSMgbGwgL3Zhci9ydW4vbGlidmlydC9saWJ2 aXJ0LXNvY2s8YnIgPQpjbGFzcz0zRCIiPiZndDs8YnIgY2xhc3M9M0QiIj4mZ3Q7IHNyd3hyd3gt LS0uIDEgcm9vdCBxZW11IDAgSnVsIDE5ID0KMjM6NDMgL3Zhci9ydW4vbGlidmlydC9saWJ2aXJ0 LXNvY2s8YnIgY2xhc3M9M0QiIj4mZ3Q7PGJyIGNsYXNzPTNEIiI+Jmd0OyA9CiZuYnNwOzxiciBj bGFzcz0zRCIiPiZndDs8YnIgY2xhc3M9M0QiIj4mZ3Q7IEFjY29yZGluZyB0aGF0LCByb290IHNo b3VsZCA9Cm5vdCBnZXQgYW4gUGVybWlzc2lvbiBkZW5pZWQgZXJyb3IgPyBCdXQgd2h5PzxiciBj bGFzcz0zRCIiPiZndDs8YnIgPQpjbGFzcz0zRCIiPiZndDsgJm5ic3A7PGJyIGNsYXNzPTNEIiI+ Jmd0OzxiciBjbGFzcz0zRCIiPiZndDsgQW5kIEkgPQpzZXRlbmZvcmNlPTNEMCAsIGFuZCBzdGls bCBzaG93IFBlcnNzaW9uIGRlbmllZCBlcnJvci48YnIgPQpjbGFzcz0zRCIiPiZndDs8YnIgY2xh c3M9M0QiIj4mZ3Q7ICZuYnNwOzxiciBjbGFzcz0zRCIiPiZndDs8YnIgPQpjbGFzcz0zRCIiPiZn dDsgV2hhdDwvc3Bhbj49RTI9ODA9OTk8c3BhbiBsYW5nPTNEIkVOLVVTIiBjbGFzcz0zRCIiPnMg PQp0aGUgcmVhc29uPyBBbmQgaG93IHRvIHNvbHZlIGl0PzxiciBjbGFzcz0zRCIiPiZndDs8YnIg Y2xhc3M9M0QiIj4mZ3Q7ID0KJm5ic3A7PGJyIGNsYXNzPTNEIiI+Jmd0OzxiciBjbGFzcz0zRCIi PiZndDsgVGhhbmsgeW91LjxiciA9CmNsYXNzPTNEIiI+Jmd0OzxiciBjbGFzcz0zRCIiPiZndDs8 YnIgY2xhc3M9M0QiIj4mZ3Q7ID0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX188YnIgY2xhc3M9M0QiIj4mZ3Q7IERldmVsID0KbWFpbGluZyBsaXN0PGJyIGNs YXNzPTNEIiI+Jmd0OzxzcGFuID0KY2xhc3M9M0QiYXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJz cDs8L3NwYW4+PGEgPQpocmVmPTNEIm1haWx0bzpEZXZlbEBvdmlydC5vcmciIHN0eWxlPTNEImNv bG9yOiBwdXJwbGU7IHRleHQtZGVjb3JhdGlvbjogPQp1bmRlcmxpbmU7IiBjbGFzcz0zRCIiPjxz cGFuIHN0eWxlPTNEImNvbG9yOiBwdXJwbGU7IiA9CmNsYXNzPTNEIiI+RGV2ZWxAb3ZpcnQub3Jn PC9zcGFuPjwvYT48YnIgY2xhc3M9M0QiIj4mZ3Q7PHNwYW4gPQpjbGFzcz0zRCJhcHBsZS1jb252 ZXJ0ZWQtc3BhY2UiPiZuYnNwOzwvc3Bhbj48YSA9CmhyZWY9M0QiaHR0cDovL2xpc3RzLm92aXJ0 Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RldmVsIiBzdHlsZT0zRCJjb2xvcjogPQpwdXJwbGU7IHRl eHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyIgY2xhc3M9M0QiIj48c3BhbiBzdHlsZT0zRCJjb2xv cjogPQpwdXJwbGU7IiA9CmNsYXNzPTNEIiI+aHR0cDovL2xpc3RzLm92aXJ0Lm9yZy9tYWlsbWFu L2xpc3RpbmZvL2RldmVsPC9zcGFuPjwvYT48L3NwYW4+PQo8L2Rpdj48L2Rpdj48L2Rpdj48L2Rp dj48L2Rpdj48L2Rpdj48L2Rpdj48L2Jsb2NrcXVvdGU+PC9kaXY+PGJyID0KY2xhc3M9M0QiIj48 L2JvZHk+PC9odG1sPj0KCi0tQXBwbGUtTWFpbD1fM0NCODQ0Q0YtNTFFRi00M0IyLTgxNUYtODFE QjJDNjU4MUU1LS0K --===============7726961494268732305==-- From lifuqiong at cncloudsec.com Tue Jul 26 04:13:59 2016 Content-Type: multipart/mixed; boundary="===============1297347777546594840==" MIME-Version: 1.0 From: lifuqiong To: devel at ovirt.org Subject: [ovirt-devel] Debug vdsm 4.0.0 report error: libvirt: XML-RPC error : Failed to connect socket to '/var/run/libvirt/libvirt-sock': Permission denied Date: Tue, 26 Jul 2016 16:08:33 +0800 Message-ID: <00ea01d1e714$e7a99d70$b6fcd850$@cncloudsec.com> In-Reply-To: 8CC9732E-FAA8-4E0C-9336-5FACC3F90F05@redhat.com --===============1297347777546594840== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable This is a multipart message in MIME format. ------=3D_NextPart_000_00EB_01D1E757.F5CF4E70 Content-Type: text/plain; charset=3D"utf-8" Content-Transfer-Encoding: quoted-printable =3D20 =3D20 I do make a mistake because I just print os.getuid() show the user root; = =3D but os.geteuid() show the current user is still vdsm; =3D20 Anyway , I still don=3DE2=3D80=3D99t know how to debug vdsm, I cann=3DE2=3D= 80=3D99t =3D log in to centos with user VDSM, because I don=3DE2=3D80=3D99t know the pas= swd =3D of user vdsm and if I changed the password, the service vdsmd will =3D cann=3DE2=3D80=3D99t start. =3D20 the vdsm account is intentionally disabled for interactive login =3D20 You told me =3DE2=3D80=3D9Cshould follow the devel setup wiki=3DE2=3D80=3D9= D , =3D what=3DE2=3D80=3D99s the true link of vdsm devel setup wiki ? I can=3DE2= =3D80=3D99t =3D get useful information in ovirt.org or google. =3D20 =3D http://www.ovirt.org/develop/developer-guide/vdsm/developers/ has tips =3D how to build from source and what packages are needed Anything specific you=3DE2=3D80=3D99re troubleshooting? =3D20 I do build the source from this instruction , but I want to set = =3D breakpoint to view each step and variable value to understand the =3D vdsm=3DE2=3D80=3D99s code using python IDE such as Pycharm ,=3D20 =3D20 You know that we can implement this debug requirement in ovirt engine =3D easily, but I can=3DE2=3D80=3D99t implement local debug in vdsm easily, =3D because vdsm didn=3DE2=3D80=3D99t allow root to run or debug. =3D20 Is there any debug instruction ? =3D20 I don=3DE2=3D80=3D99t think it=3DE2=3D80=3D99s possible to debug it from Py= Charm, or =3D any IDE for that matter, easily.=3D20 It=3DE2=3D80=3D99s a multithreaded application, you can=3DE2=3D80=3D99t rea= lly set a =3D breakpoint without affecting other functionality since some of the =3D threads need to keep running Best advice is to add a debugging/logging code in places you need, =3D printing variables you=3DE2=3D80=3D99re interested in. =3D20 I know it=3DE2=3D80=3D99s a multithreaded application , and debug = =3D vdsm is a very difficult job, but without debug, I don=3DE2=3D80=3D99t know= =3D which code I should replace or logging, Is there any remote debug =3D solution like ovirt engine? I found that=3D20 I can do remote debug in simple python application , but I =3D didn=3DE2=3D80=3D99t success yet remote debugging vdsm.=3D20 =3D20 Now one of our case I want to consider using ovirt as our =3D solution , we may do little change over ovirt. but as described above, =3D without debug , we can hardly understand vdsm clearly and cannot do =3D correctly code change. Is there some good advice ? =3D20 Thank you Mark Thanks, michal =3D20 Thank you Mark =3D20 Thanks, michal =3D20 =3D20 Thank you =3D20 =3DE5=3D8F=3D91=3DE4=3DBB=3DB6=3DE4=3DBA=3DBA: Michal Skrivanek [ =3D mailto:mskrivan(a)redhat.com]=3D20 =3DE5=3D8F=3D91=3DE9=3D80=3D81=3DE6=3D97=3DB6=3DE9=3D97=3DB4: 2016=3DE5=3DB= 9=3DB47=3DE6=3D9C=3D8826=3DE6=3D97=3DA5 =3D 5:00 =3DE6=3D94=3DB6=3DE4=3DBB=3DB6=3DE4=3DBA=3DBA: lifuqiong =3DE6=3D8A=3D84=3DE9=3D80=3D81: users; devel =3DE4=3DB8=3DBB=3DE9=3DA2=3D98: Re: [ovirt-devel] Debug vdsm 4.0.0 report e= rror: =3D libvirt: XML-RPC error : Failed to connect socket to =3D '/var/run/libvirt/libvirt-sock': Permission denied =3D20 =3D20 On 25 Jul 2016, at 21:50, Sandro Bonazzola < =3D sbonazzo(a)redhat.com> wrote: Adding some people from virt team. Il 23/Lug/2016 11:44, "lifuqiong" < =3D lifuqiong(a)cncloudsec.com> ha scritto: > > I debugged vdsm with PyCharm, And I logged on my Centos 7.2 with root, = =3D and get an error as follows: > > =3D20 > > Problem: > > =3D20 > > Traceback (most recent call last): > > File "/usr/share/vdsm/vdsm", line 149, in run > > serve_clients(log) > > File "/usr/share/vdsm/vdsm", line 104, in serve_clients > > cif =3D3D clientIF.getInstance(irs, log, scheduler) > > File "/usr/share/vdsm/clientIF.py", line 204, in getInstance > > cls._instance =3D3D clientIF(irs, log, scheduler) > > File "/usr/share/vdsm/clientIF.py", line 106, in __init__ > > secret.clear() > > File "/usr/lib/python2.7/site-packages/vdsm/virt/secret.py", line =3D 92, in clear > > con =3D3D libvirtconnection.get() > > File "/usr/lib/python2.7/site-packages/vdsm/libvirtconnection.py", =3D line 163, in get > > password) > > File "/usr/lib/python2.7/site-packages/vdsm/libvirtconnection.py", =3D line 99, in open_connection > > return utils.retry(libvirtOpen, timeout=3D3D10, sleep=3D3D0.2) > > File "/usr/lib/python2.7/site-packages/vdsm/utils.py", line 546, in =3D retry > > return func() > > File "/usr/lib64/python2.7/site-packages/libvirt.py", line 105, in =3D openAuth > > if ret is None:raise libvirtError('virConnectOpenAuth() failed') > > libvirtError: Failed to connect socket to =3D '/var/run/libvirt/libvirt-sock': Permission denied > > =3D20 > > Investitate: > > According to the traceback above, the code in libvirt.py as below, and = =3D os.geteuid() get =3DE2=3D80=3D980=3DE2=3D80=3D99 which shows the current u= ser is =3D root; =3D20 vdsm is not supposed to be run under root user. For debugging you should = =3D follow the devel setup wiki and not change a regular host.=3D20 Depends what you modified, it's impossible to say from what you =3D described....but a general advice is you simply don't do that:) > > =3D20 > > def openAuth(uri, auth, flags=3D3D0): > > #print os.geteuid() > > ret =3D3D libvirtmod.virConnectOpenAuth(uri, auth, flags) > > if ret is None:raise libvirtError('virConnectOpenAuth() failed') > > return virConnect(_obj=3D3Dret) > > =3D20 > > [root(a)server117 libvirt]# ll /var/run/libvirt/libvirt-sock > > srwxrwx---. 1 root qemu 0 Jul 19 23:43 /var/run/libvirt/libvirt-sock > > =3D20 > > According that, root should not get an Permission denied error ? But =3D why? > > =3D20 > > And I setenforce=3D3D0 , and still show Perssion denied error. > > =3D20 > > What=3DE2=3D80=3D99s the reason? And how to solve it? > > =3D20 > > Thank you. > > > _______________________________________________ > Devel mailing list > Devel(a)ovirt.org > =3D http://lists.ovirt.org/mailman/listinfo/devel =3D20 ------=3D_NextPart_000_00EB_01D1E757.F5CF4E70 Content-Type: text/html; charset=3D"utf-8" Content-Transfer-Encoding: quoted-printable

 

 

I do make a mistake because I just print os.getuid() show the user =3D root; but os.geteuid() show the current user is still vdsm;

 

Anyway , I still don=3DE2=3D80=3D99t know how to debug vdsm, I =3D cann=3DE2=3D80=3D99t log in to centos with user VDSM, because I don=3DE2=3D= 80=3D99t =3D know the passwd of user vdsm and if I changed the password, the service =3D vdsmd will cann=3DE2=3D80=3D99t start.

 

the vdsm account is intentionally = =3D disabled for interactive login




 

You told me =3DE2=3D80=3D9Cshould follow the= =3D devel setup wiki=3DE2=3D80=3D9D , what=3DE2=3D80=3D99s the true link of vdsm devel setup= wiki =3D ?  I can=3DE2=3D80=3D99t get useful information in ovirt.org or google.

 

http://www.ovirt.org/develop/developer-guide/vdsm/= =3D developers/ has tips how to build from source and what =3D packages are needed

Anything specific =3D you=3DE2=3D80=3D99re =3D troubleshooting?

 

         I do build the =3D source from this instruction , but I want to set breakpoint to view each = =3D step and variable value to understand the vdsm=3DE2=3D80=3D99s code using = =3D python IDE such as Pycharm , 

 

You know that we can implement this debug requirement in ovirt engine = =3D easily, but I can=3DE2=3D80=3D99t implement local debug in vdsm easily, =3D because vdsm didn=3DE2=3D80=3D99t allow root to run or debug.

 

Is there any debug instruction ?

 

I don=3DE2=3D80=3D99t think it=3DE= 2=3D80=3D99s =3D possible to debug it from PyCharm, or any IDE for that matter, =3D easily. 

It=3DE2=3D80=3D99s a multithreaded application, you can=3DE2= =3D80=3D99t =3D really set a breakpoint without affecting other functionality since some = =3D of the threads need to keep running

Best advice is to add a =3D debugging/logging code in places you need, printing variables =3D you=3DE2=3D80=3D99re interested in.

 

=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0= =3DC2=3DA0 I know it=3DE2=3D80=3D99s =3D a multithreaded application , and debug vdsm is a very difficult job, =3D but without debug, I don=3DE2=3D80=3D99t know which code I should replace o= r =3D logging,=3DC2=3DA0 =3DC2=3DA0Is there any remote debug solution like ovirt = =3D engine? =3DC2=3DA0I found that

I can do remote debug in simple python application , but I =3D didn=3DE2=3D80=3D99t success yet remote debugging vdsm. =3D

=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0= =3DC2=3DA0 =3D

=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0= =3DC2=3DA0 Now one of our case =3D I want to consider using ovirt as our solution , we may do little change = =3D over ovirt. but as described above, without debug , we can hardly =3D understand vdsm clearly and cannot do correctly code =3D change.

Is there some good advice ?

=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0= =3DC2=3DA0 =3D

=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0= =3DC2=3DA0 Thank =3D you

=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0=3DC2=3DA0= =3DC2=3DA0 =3D Mark

Thanks,

michal



 

Thank you

Mark

 

Thanks,

michal




 

 

Thank you

 

=3DE5=3D8F=3D91=3DE4=3DBB=3DB6=3DE4=3DBA=3DBA<= span =3D lang=3D3DEN-US>: Michal Skrivanek [mailto:mskrivan(a)redhat.com] 
=3DE5=3D8F=3D91=3DE9=3D80=3D81=3DE6=3D97=3DB6= =3DE9=3D97=3DB4: 2016=3DE5=3DB9=3DB47=3DE6=3D9C=3D8826=3DE6= =3D97=3DA5 5:00
=3DE6=3D94=3DB6=3DE4=3DBB=3DB6=3DE4=3DBA= =3DBA: lifuqiong
=3DE6=3D8A=3D84=3DE9=3D80=3D81: users; =3D devel
=3DE4=3DB8=3DBB=3DE9=3DA2=3D98: Re: [ovirt-devel] = =3D Debug vdsm 4.0.0 report error: libvirt: XML-RPC error : Failed to =3D connect socket to '/var/run/libvirt/libvirt-sock': Permission =3D denied

 

 


On 25 Jul 2016, at 21:50, Sandro Bonazzola <sbonazzo(a)redhat.com> =3D wrote:

Adding some people from virt =3D team.

Il 23/Lug/2016 11:44, "lifuqiong" <lifuqiong(a)cncloudsec.com> ha =3D scritto:
>
> I debugged vdsm with PyCharm, And I logged on =3D my Centos 7.2 with root,  and get an error as =3D follows:
>
>  
>
> Problem:
>
> = =3D  
>
> Traceback (most recent call =3D last):
>
>   File "/usr/share/vdsm/vdsm", =3D line 149, in run
>
>     =3D serve_clients(log)
>
>   File =3D "/usr/share/vdsm/vdsm", line 104, in =3D serve_clients
>
>     cif =3D3D =3D clientIF.getInstance(irs, log, scheduler)
>
>   File =3D "/usr/share/vdsm/clientIF.py", line 204, in =3D getInstance
>
>     cls._instance =3D3D =3D clientIF(irs, log, scheduler)
>
>   File =3D "/usr/share/vdsm/clientIF.py", line 106, in =3D __init__
>
>     =3D secret.clear()
>
>   File =3D "/usr/lib/python2.7/site-packages/vdsm/virt/secret.py", line =3D 92, in clear
>
>     con =3D3D =3D libvirtconnection.get()
>
>   File =3D "/usr/lib/python2.7/site-packages/vdsm/libvirtconnection.py", =3D line 163, in get
>
>     =3D password)
>
>   File =3D "/usr/lib/python2.7/site-packages/vdsm/libvirtconnection.py", =3D line 99, in open_connection
>
>     return =3D utils.retry(libvirtOpen, timeout=3D3D10, sleep=3D3D0.2)
>
> =3D   File "/usr/lib/python2.7/site-packages/vdsm/utils.py", =3D line 546, in retry
>
>     return =3D func()
>
>   File =3D "/usr/lib64/python2.7/site-packages/libvirt.py", line 105, in =3D openAuth
>
>     if ret is None:raise =3D libvirtError('virConnectOpenAuth() failed')
>
> =3D libvirtError: Failed to connect socket to =3D '/var/run/libvirt/libvirt-sock': Permission denied
>
> =3D  
>
> Investitate:
>
> According to the =3D traceback above, the code in libvirt.py as below, and  os.geteuid() = =3D get 
=3DE2=3D80=3D980=3DE2=3D80=3D99 which shows the =3D current user is =3D root;

 

vdsm is not supposed to be run =3D under root user. For debugging you should follow the devel setup wiki =3D and not change a regular =3D host. 

Depends what you modified, it's = =3D impossible to say from what you described....but a general advice is you = =3D simply don't do =3D that:)



>
>  
>
>= ; =3D def openAuth(uri, auth, flags=3D3D0):
>
> =3D          #print =3D os.geteuid()
>
>     ret =3D3D =3D libvirtmod.virConnectOpenAuth(uri, auth, flags)
>
> =3D     if ret is None:raise =3D libvirtError('virConnectOpenAuth() failed')
>
> return =3D virConnect(_obj=3D3Dret)
>
>  
>
> =3D [root(a)server117 libvirt]# ll =3D /var/run/libvirt/libvirt-sock
>
> srwxrwx---. 1 root qemu 0 =3D Jul 19 23:43 /var/run/libvirt/libvirt-sock
>
> =3D  
>
> According that, root should not get an Permission = =3D denied error ? But why?
>
>  
>
> And I =3D setenforce=3D3D0 , and still show Perssion denied error.
>
> = =3D  
>
> What
=3DE2=3D80=3D99s the= =3D reason? And how to solve it?
>
>  
>
> =3D Thank you.
>
>
> =3D _______________________________________________
> Devel mailing =3D list
> Devel(a)ovirt.org
> http://lists.ovirt.org/mailman/listinfo/devel

 

------=3D_NextPart_000_00EB_01D1E757.F5CF4E70-- --===============1297347777546594840== Content-Type: multipart/alternative MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.bin" VGhpcyBpcyBhIG11bHRpcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgoKLS0tLS0tPV9OZXh0 UGFydF8wMDBfMDBFQl8wMUQxRTc1Ny5GNUNGNEU3MApDb250ZW50LVR5cGU6IHRleHQvcGxhaW47 CgljaGFyc2V0PSJ1dGYtOCIKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50 YWJsZQoKPTIwCgo9MjAKCkkgZG8gbWFrZSBhIG1pc3Rha2UgYmVjYXVzZSBJIGp1c3QgcHJpbnQg b3MuZ2V0dWlkKCkgc2hvdyB0aGUgdXNlciByb290OyA9CmJ1dCBvcy5nZXRldWlkKCkgc2hvdyB0 aGUgY3VycmVudCB1c2VyIGlzIHN0aWxsIHZkc207Cgo9MjAKCkFueXdheSAsIEkgc3RpbGwgZG9u PUUyPTgwPTk5dCBrbm93IGhvdyB0byBkZWJ1ZyB2ZHNtLCBJIGNhbm49RTI9ODA9OTl0ID0KbG9n IGluIHRvIGNlbnRvcyB3aXRoIHVzZXIgVkRTTSwgYmVjYXVzZSBJIGRvbj1FMj04MD05OXQga25v dyB0aGUgcGFzc3dkID0Kb2YgdXNlciB2ZHNtIGFuZCBpZiBJIGNoYW5nZWQgdGhlIHBhc3N3b3Jk LCB0aGUgc2VydmljZSB2ZHNtZCB3aWxsID0KY2Fubj1FMj04MD05OXQgc3RhcnQuCgo9MjAKCnRo ZSB2ZHNtIGFjY291bnQgaXMgaW50ZW50aW9uYWxseSBkaXNhYmxlZCBmb3IgaW50ZXJhY3RpdmUg bG9naW4KCgoKCgoKPTIwCgpZb3UgdG9sZCBtZSA9RTI9ODA9OUNzaG91bGQgZm9sbG93IHRoZSBk ZXZlbCBzZXR1cCB3aWtpPUUyPTgwPTlEICwgPQp3aGF0PUUyPTgwPTk5cyB0aGUgdHJ1ZSBsaW5r IG9mIHZkc20gZGV2ZWwgc2V0dXAgd2lraSA/ICBJIGNhbj1FMj04MD05OXQgPQpnZXQgdXNlZnVs IGluZm9ybWF0aW9uIGluICA8aHR0cDovL292aXJ0Lm9yZy8+IG92aXJ0Lm9yZyBvciBnb29nbGUu Cgo9MjAKCiA8aHR0cDovL3d3dy5vdmlydC5vcmcvZGV2ZWxvcC9kZXZlbG9wZXItZ3VpZGUvdmRz bS9kZXZlbG9wZXJzLz4gPQpodHRwOi8vd3d3Lm92aXJ0Lm9yZy9kZXZlbG9wL2RldmVsb3Blci1n dWlkZS92ZHNtL2RldmVsb3BlcnMvIGhhcyB0aXBzID0KaG93IHRvIGJ1aWxkIGZyb20gc291cmNl IGFuZCB3aGF0IHBhY2thZ2VzIGFyZSBuZWVkZWQKCkFueXRoaW5nIHNwZWNpZmljIHlvdT1FMj04 MD05OXJlIHRyb3VibGVzaG9vdGluZz8KCj0yMAoKICAgICAgICAgSSBkbyBidWlsZCB0aGUgc291 cmNlIGZyb20gdGhpcyBpbnN0cnVjdGlvbiAsIGJ1dCBJIHdhbnQgdG8gc2V0ID0KYnJlYWtwb2lu dCB0byB2aWV3IGVhY2ggc3RlcCBhbmQgdmFyaWFibGUgdmFsdWUgdG8gdW5kZXJzdGFuZCB0aGUg PQp2ZHNtPUUyPTgwPTk5cyBjb2RlIHVzaW5nIHB5dGhvbiBJREUgc3VjaCBhcyBQeWNoYXJtICw9 MjAKCj0yMAoKWW91IGtub3cgdGhhdCB3ZSBjYW4gaW1wbGVtZW50IHRoaXMgZGVidWcgcmVxdWly ZW1lbnQgaW4gb3ZpcnQgZW5naW5lID0KZWFzaWx5LCBidXQgSSBjYW49RTI9ODA9OTl0IGltcGxl bWVudCBsb2NhbCBkZWJ1ZyBpbiB2ZHNtIGVhc2lseSwgPQpiZWNhdXNlIHZkc20gZGlkbj1FMj04 MD05OXQgYWxsb3cgcm9vdCB0byBydW4gb3IgZGVidWcuCgo9MjAKCklzIHRoZXJlIGFueSBkZWJ1 ZyBpbnN0cnVjdGlvbiA/Cgo9MjAKCkkgZG9uPUUyPTgwPTk5dCB0aGluayBpdD1FMj04MD05OXMg cG9zc2libGUgdG8gZGVidWcgaXQgZnJvbSBQeUNoYXJtLCBvciA9CmFueSBJREUgZm9yIHRoYXQg bWF0dGVyLCBlYXNpbHkuPTIwCgpJdD1FMj04MD05OXMgYSBtdWx0aXRocmVhZGVkIGFwcGxpY2F0 aW9uLCB5b3UgY2FuPUUyPTgwPTk5dCByZWFsbHkgc2V0IGEgPQpicmVha3BvaW50IHdpdGhvdXQg YWZmZWN0aW5nIG90aGVyIGZ1bmN0aW9uYWxpdHkgc2luY2Ugc29tZSBvZiB0aGUgPQp0aHJlYWRz IG5lZWQgdG8ga2VlcCBydW5uaW5nCgpCZXN0IGFkdmljZSBpcyB0byBhZGQgYSBkZWJ1Z2dpbmcv bG9nZ2luZyBjb2RlIGluIHBsYWNlcyB5b3UgbmVlZCwgPQpwcmludGluZyB2YXJpYWJsZXMgeW91 PUUyPTgwPTk5cmUgaW50ZXJlc3RlZCBpbi4KCj0yMAoKICAgICAgICAgSSBrbm93IGl0PUUyPTgw PTk5cyBhIG11bHRpdGhyZWFkZWQgYXBwbGljYXRpb24gLCBhbmQgZGVidWcgPQp2ZHNtIGlzIGEg dmVyeSBkaWZmaWN1bHQgam9iLCBidXQgd2l0aG91dCBkZWJ1ZywgSSBkb249RTI9ODA9OTl0IGtu b3cgPQp3aGljaCBjb2RlIEkgc2hvdWxkIHJlcGxhY2Ugb3IgbG9nZ2luZywgICBJcyB0aGVyZSBh bnkgcmVtb3RlIGRlYnVnID0Kc29sdXRpb24gbGlrZSBvdmlydCBlbmdpbmU/ICBJIGZvdW5kIHRo YXQ9MjAKCkkgY2FuIGRvIHJlbW90ZSBkZWJ1ZyBpbiBzaW1wbGUgcHl0aG9uIGFwcGxpY2F0aW9u ICwgYnV0IEkgPQpkaWRuPUUyPTgwPTk5dCBzdWNjZXNzIHlldCByZW1vdGUgZGVidWdnaW5nIHZk c20uPTIwCgogICAgICAgID0yMAoKICAgICAgICAgTm93IG9uZSBvZiBvdXIgY2FzZSBJIHdhbnQg dG8gY29uc2lkZXIgdXNpbmcgb3ZpcnQgYXMgb3VyID0Kc29sdXRpb24gLCB3ZSBtYXkgZG8gbGl0 dGxlIGNoYW5nZSBvdmVyIG92aXJ0LiBidXQgYXMgZGVzY3JpYmVkIGFib3ZlLCA9CndpdGhvdXQg ZGVidWcgLCB3ZSBjYW4gaGFyZGx5IHVuZGVyc3RhbmQgdmRzbSBjbGVhcmx5IGFuZCBjYW5ub3Qg ZG8gPQpjb3JyZWN0bHkgY29kZSBjaGFuZ2UuCgpJcyB0aGVyZSBzb21lIGdvb2QgYWR2aWNlID8K CiAgICAgICAgPTIwCgogICAgICAgICBUaGFuayB5b3UKCiAgICAgICAgIE1hcmsKClRoYW5rcywK Cm1pY2hhbAoKCgoKCj0yMAoKVGhhbmsgeW91CgpNYXJrCgo9MjAKClRoYW5rcywKCm1pY2hhbAoK CgoKCgo9MjAKCj0yMAoKVGhhbmsgeW91Cgo9MjAKCj1FNT04Rj05MT1FND1CQj1CNj1FND1CQT1C QTogTWljaGFsIFNrcml2YW5layBbID0KPG1haWx0bzptc2tyaXZhbkByZWRoYXQuY29tPiBtYWls dG86bXNrcml2YW5AcmVkaGF0LmNvbV09MjAKPUU1PThGPTkxPUU5PTgwPTgxPUU2PTk3PUI2PUU5 PTk3PUI0OiAyMDE2PUU1PUI5PUI0Nz1FNj05Qz04ODI2PUU2PTk3PUE1ID0KNTowMAo9RTY9OTQ9 QjY9RTQ9QkI9QjY9RTQ9QkE9QkE6IGxpZnVxaW9uZwo9RTY9OEE9ODQ9RTk9ODA9ODE6IHVzZXJz OyBkZXZlbAo9RTQ9Qjg9QkI9RTk9QTI9OTg6IFJlOiBbb3ZpcnQtZGV2ZWxdIERlYnVnIHZkc20g NC4wLjAgcmVwb3J0IGVycm9yOiA9CmxpYnZpcnQ6IFhNTC1SUEMgZXJyb3IgOiBGYWlsZWQgdG8g Y29ubmVjdCBzb2NrZXQgdG8gPQonL3Zhci9ydW4vbGlidmlydC9saWJ2aXJ0LXNvY2snOiBQZXJt aXNzaW9uIGRlbmllZAoKPTIwCgo9MjAKCgpPbiAyNSBKdWwgMjAxNiwgYXQgMjE6NTAsIFNhbmRy byBCb25henpvbGEgPCA9CjxtYWlsdG86c2JvbmF6em9AcmVkaGF0LmNvbT4gc2JvbmF6em9AcmVk aGF0LmNvbT4gd3JvdGU6CgpBZGRpbmcgc29tZSBwZW9wbGUgZnJvbSB2aXJ0IHRlYW0uCgpJbCAy My9MdWcvMjAxNiAxMTo0NCwgImxpZnVxaW9uZyIgPCA8bWFpbHRvOmxpZnVxaW9uZ0BjbmNsb3Vk c2VjLmNvbT4gPQpsaWZ1cWlvbmdAY25jbG91ZHNlYy5jb20+IGhhIHNjcml0dG86Cj4KPiBJIGRl YnVnZ2VkIHZkc20gd2l0aCBQeUNoYXJtLCBBbmQgSSBsb2dnZWQgb24gbXkgQ2VudG9zIDcuMiB3 aXRoIHJvb3QsID0KIGFuZCBnZXQgYW4gZXJyb3IgYXMgZm9sbG93czoKPgo+ID0yMAo+Cj4gUHJv YmxlbToKPgo+ID0yMAo+Cj4gVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgo+Cj4g ICBGaWxlICIvdXNyL3NoYXJlL3Zkc20vdmRzbSIsIGxpbmUgMTQ5LCBpbiBydW4KPgo+ICAgICBz ZXJ2ZV9jbGllbnRzKGxvZykKPgo+ICAgRmlsZSAiL3Vzci9zaGFyZS92ZHNtL3Zkc20iLCBsaW5l IDEwNCwgaW4gc2VydmVfY2xpZW50cwo+Cj4gICAgIGNpZiA9M0QgY2xpZW50SUYuZ2V0SW5zdGFu Y2UoaXJzLCBsb2csIHNjaGVkdWxlcikKPgo+ICAgRmlsZSAiL3Vzci9zaGFyZS92ZHNtL2NsaWVu dElGLnB5IiwgbGluZSAyMDQsIGluIGdldEluc3RhbmNlCj4KPiAgICAgY2xzLl9pbnN0YW5jZSA9 M0QgY2xpZW50SUYoaXJzLCBsb2csIHNjaGVkdWxlcikKPgo+ICAgRmlsZSAiL3Vzci9zaGFyZS92 ZHNtL2NsaWVudElGLnB5IiwgbGluZSAxMDYsIGluIF9faW5pdF9fCj4KPiAgICAgc2VjcmV0LmNs ZWFyKCkKPgo+ICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMi43L3NpdGUtcGFja2FnZXMvdmRzbS92 aXJ0L3NlY3JldC5weSIsIGxpbmUgPQo5MiwgaW4gY2xlYXIKPgo+ICAgICBjb24gPTNEIGxpYnZp cnRjb25uZWN0aW9uLmdldCgpCj4KPiAgIEZpbGUgIi91c3IvbGliL3B5dGhvbjIuNy9zaXRlLXBh Y2thZ2VzL3Zkc20vbGlidmlydGNvbm5lY3Rpb24ucHkiLCA9CmxpbmUgMTYzLCBpbiBnZXQKPgo+ ICAgICBwYXNzd29yZCkKPgo+ICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMi43L3NpdGUtcGFja2Fn ZXMvdmRzbS9saWJ2aXJ0Y29ubmVjdGlvbi5weSIsID0KbGluZSA5OSwgaW4gb3Blbl9jb25uZWN0 aW9uCj4KPiAgICAgcmV0dXJuIHV0aWxzLnJldHJ5KGxpYnZpcnRPcGVuLCB0aW1lb3V0PTNEMTAs IHNsZWVwPTNEMC4yKQo+Cj4gICBGaWxlICIvdXNyL2xpYi9weXRob24yLjcvc2l0ZS1wYWNrYWdl cy92ZHNtL3V0aWxzLnB5IiwgbGluZSA1NDYsIGluID0KcmV0cnkKPgo+ICAgICByZXR1cm4gZnVu YygpCj4KPiAgIEZpbGUgIi91c3IvbGliNjQvcHl0aG9uMi43L3NpdGUtcGFja2FnZXMvbGlidmly dC5weSIsIGxpbmUgMTA1LCBpbiA9Cm9wZW5BdXRoCj4KPiAgICAgaWYgcmV0IGlzIE5vbmU6cmFp c2UgbGlidmlydEVycm9yKCd2aXJDb25uZWN0T3BlbkF1dGgoKSBmYWlsZWQnKQo+Cj4gbGlidmly dEVycm9yOiBGYWlsZWQgdG8gY29ubmVjdCBzb2NrZXQgdG8gPQonL3Zhci9ydW4vbGlidmlydC9s aWJ2aXJ0LXNvY2snOiBQZXJtaXNzaW9uIGRlbmllZAo+Cj4gPTIwCj4KPiBJbnZlc3RpdGF0ZToK Pgo+IEFjY29yZGluZyB0byB0aGUgdHJhY2ViYWNrIGFib3ZlLCB0aGUgY29kZSBpbiBsaWJ2aXJ0 LnB5IGFzIGJlbG93LCBhbmQgPQogb3MuZ2V0ZXVpZCgpIGdldCA9RTI9ODA9OTgwPUUyPTgwPTk5 IHdoaWNoIHNob3dzIHRoZSBjdXJyZW50IHVzZXIgaXMgPQpyb290OwoKPTIwCgp2ZHNtIGlzIG5v dCBzdXBwb3NlZCB0byBiZSBydW4gdW5kZXIgcm9vdCB1c2VyLiBGb3IgZGVidWdnaW5nIHlvdSBz aG91bGQgPQpmb2xsb3cgdGhlIGRldmVsIHNldHVwIHdpa2kgYW5kIG5vdCBjaGFuZ2UgYSByZWd1 bGFyIGhvc3QuPTIwCgpEZXBlbmRzIHdoYXQgeW91IG1vZGlmaWVkLCBpdCdzIGltcG9zc2libGUg dG8gc2F5IGZyb20gd2hhdCB5b3UgPQpkZXNjcmliZWQuLi4uYnV0IGEgZ2VuZXJhbCBhZHZpY2Ug aXMgeW91IHNpbXBseSBkb24ndCBkbyB0aGF0OikKCgoKCgo+Cj4gPTIwCj4KPiBkZWYgb3BlbkF1 dGgodXJpLCBhdXRoLCBmbGFncz0zRDApOgo+Cj4gICAgICAgICAgI3ByaW50IG9zLmdldGV1aWQo KQo+Cj4gICAgIHJldCA9M0QgbGlidmlydG1vZC52aXJDb25uZWN0T3BlbkF1dGgodXJpLCBhdXRo LCBmbGFncykKPgo+ICAgICBpZiByZXQgaXMgTm9uZTpyYWlzZSBsaWJ2aXJ0RXJyb3IoJ3ZpckNv bm5lY3RPcGVuQXV0aCgpIGZhaWxlZCcpCj4KPiByZXR1cm4gdmlyQ29ubmVjdChfb2JqPTNEcmV0 KQo+Cj4gPTIwCj4KPiBbcm9vdEBzZXJ2ZXIxMTcgbGlidmlydF0jIGxsIC92YXIvcnVuL2xpYnZp cnQvbGlidmlydC1zb2NrCj4KPiBzcnd4cnd4LS0tLiAxIHJvb3QgcWVtdSAwIEp1bCAxOSAyMzo0 MyAvdmFyL3J1bi9saWJ2aXJ0L2xpYnZpcnQtc29jawo+Cj4gPTIwCj4KPiBBY2NvcmRpbmcgdGhh dCwgcm9vdCBzaG91bGQgbm90IGdldCBhbiBQZXJtaXNzaW9uIGRlbmllZCBlcnJvciA/IEJ1dCA9 CndoeT8KPgo+ID0yMAo+Cj4gQW5kIEkgc2V0ZW5mb3JjZT0zRDAgLCBhbmQgc3RpbGwgc2hvdyBQ ZXJzc2lvbiBkZW5pZWQgZXJyb3IuCj4KPiA9MjAKPgo+IFdoYXQ9RTI9ODA9OTlzIHRoZSByZWFz b24/IEFuZCBob3cgdG8gc29sdmUgaXQ/Cj4KPiA9MjAKPgo+IFRoYW5rIHlvdS4KPgo+Cj4gX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBEZXZlbCBtYWls aW5nIGxpc3QKPiAgPG1haWx0bzpEZXZlbEBvdmlydC5vcmc+IERldmVsQG92aXJ0Lm9yZwo+ICA8 aHR0cDovL2xpc3RzLm92aXJ0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RldmVsPiA9Cmh0dHA6Ly9s aXN0cy5vdmlydC5vcmcvbWFpbG1hbi9saXN0aW5mby9kZXZlbAoKPTIwCgoKLS0tLS0tPV9OZXh0 UGFydF8wMDBfMDBFQl8wMUQxRTc1Ny5GNUNGNEU3MApDb250ZW50LVR5cGU6IHRleHQvaHRtbDsK CWNoYXJzZXQ9InV0Zi04IgpDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRh YmxlCgo8aHRtbCB4bWxuczp2PTNEInVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206dm1sIiA9Cnht bG5zOm89M0QidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIiA9CnhtbG5z Onc9M0QidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIgPQp4bWxuczptPTNE Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDQvMTIvb21tbCIgPQp4bWxu cz0zRCJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj48aGVhZD48bWV0YSA9Cmh0dHAt ZXF1aXY9M0RDb250ZW50LVR5cGUgY29udGVudD0zRCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9M0R1dGYt OCI+PG1ldGEgPQpuYW1lPTNER2VuZXJhdG9yIGNvbnRlbnQ9M0QiTWljcm9zb2Z0IFdvcmQgMTQg KGZpbHRlcmVkID0KbWVkaXVtKSI+PHN0eWxlPjwhLS0KLyogRm9udCBEZWZpbml0aW9ucyAqLwpA Zm9udC1mYWNlCgl7Zm9udC1mYW1pbHk6SGVsdmV0aWNhOwoJcGFub3NlLTE6MiAxMSA2IDQgMiAy IDIgMiAyIDQ7fQpAZm9udC1mYWNlCgl7Zm9udC1mYW1pbHk6PUU1PUFFPThCPUU0PUJEPTkzOwoJ cGFub3NlLTE6MiAxIDYgMCAzIDEgMSAxIDEgMTt9CkBmb250LWZhY2UKCXtmb250LWZhbWlseTo9 RTU9QUU9OEI9RTQ9QkQ9OTM7CglwYW5vc2UtMToyIDEgNiAwIDMgMSAxIDEgMSAxO30KQGZvbnQt ZmFjZQoJe2ZvbnQtZmFtaWx5OkNhbGlicmk7CglwYW5vc2UtMToyIDE1IDUgMiAyIDIgNCAzIDIg NDt9CkBmb250LWZhY2UKCXtmb250LWZhbWlseToiXEA9RTU9QUU9OEI9RTQ9QkQ9OTMiOwoJcGFu b3NlLTE6MiAxIDYgMCAzIDEgMSAxIDEgMTt9Ci8qIFN0eWxlIERlZmluaXRpb25zICovCnAuTXNv Tm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKCXttYXJnaW46MGNtOwoJbWFyZ2lu LWJvdHRvbTouMDAwMXB0OwoJZm9udC1zaXplOjEyLjBwdDsKCWZvbnQtZmFtaWx5Oj1FNT1BRT04 Qj1FND1CRD05Mzt9CmE6bGluaywgc3Bhbi5Nc29IeXBlcmxpbmsKCXttc28tc3R5bGUtcHJpb3Jp dHk6OTk7Cgljb2xvcjpibHVlOwoJdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9CmE6dmlzaXRl ZCwgc3Bhbi5Nc29IeXBlcmxpbmtGb2xsb3dlZAoJe21zby1zdHlsZS1wcmlvcml0eTo5OTsKCWNv bG9yOnB1cnBsZTsKCXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQpwLk1zb0FjZXRhdGUsIGxp Lk1zb0FjZXRhdGUsIGRpdi5Nc29BY2V0YXRlCgl7bXNvLXN0eWxlLXByaW9yaXR5Ojk5OwoJbXNv LXN0eWxlLWxpbms6Ij1FNj04OT1COT1FNj1CMz1BOD1FNj1BMT04Nj1FNj05Nj04Nz1FNj05Qz1B QyBDaGFyIjsKCW1hcmdpbjowY207CgltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Cglmb250LXNpemU6 OS4wcHQ7Cglmb250LWZhbWlseTo9RTU9QUU9OEI9RTQ9QkQ9OTM7fQpzcGFuLmFwcGxlLWNvbnZl cnRlZC1zcGFjZQoJe21zby1zdHlsZS1uYW1lOmFwcGxlLWNvbnZlcnRlZC1zcGFjZTt9CnNwYW4u RW1haWxTdHlsZTE4Cgl7bXNvLXN0eWxlLXR5cGU6cGVyc29uYWwtcmVwbHk7Cglmb250LWZhbWls eToiQ2FsaWJyaSIsInNhbnMtc2VyaWYiOwoJY29sb3I6IzFGNDk3RDt9CnNwYW4uQ2hhcgoJe21z by1zdHlsZS1uYW1lOiI9RTY9ODk9Qjk9RTY9QjM9QTg9RTY9QTE9ODY9RTY9OTY9ODc9RTY9OUM9 QUMgQ2hhciI7Cgltc28tc3R5bGUtcHJpb3JpdHk6OTk7Cgltc28tc3R5bGUtbGluazo9RTY9ODk9 Qjk9RTY9QjM9QTg9RTY9QTE9ODY9RTY9OTY9ODc9RTY9OUM9QUM7Cglmb250LWZhbWlseTo9RTU9 QUU9OEI9RTQ9QkQ9OTM7fQouTXNvQ2hwRGVmYXVsdAoJe21zby1zdHlsZS10eXBlOmV4cG9ydC1v bmx5OwoJZm9udC1zaXplOjEwLjBwdDt9CkBwYWdlIFdvcmRTZWN0aW9uMQoJe3NpemU6NjEyLjBw dCA3OTIuMHB0OwoJbWFyZ2luOjcyLjBwdCA5MC4wcHQgNzIuMHB0IDkwLjBwdDt9CmRpdi5Xb3Jk U2VjdGlvbjEKCXtwYWdlOldvcmRTZWN0aW9uMTt9Ci0tPjwvc3R5bGU+PCEtLVtpZiBndGUgbXNv IDldPjx4bWw+CjxvOnNoYXBlZGVmYXVsdHMgdjpleHQ9M0QiZWRpdCIgc3BpZG1heD0zRCIxMDI2 IiAvPgo8L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KPG86c2hhcGVs YXlvdXQgdjpleHQ9M0QiZWRpdCI+CjxvOmlkbWFwIHY6ZXh0PTNEImVkaXQiIGRhdGE9M0QiMSIg Lz4KPC9vOnNoYXBlbGF5b3V0PjwveG1sPjwhW2VuZGlmXS0tPjwvaGVhZD48Ym9keSBsYW5nPTNE WkgtQ04gbGluaz0zRGJsdWUgPQp2bGluaz0zRHB1cnBsZT48ZGl2IGNsYXNzPTNEV29yZFNlY3Rp b24xPjxwIGNsYXNzPTNETXNvTm9ybWFsPjxzcGFuID0KbGFuZz0zREVOLVVTPiZuYnNwOzxvOnA+ PC9vOnA+PC9zcGFuPjwvcD48ZGl2PjxkaXY+PGRpdj48cCA9CmNsYXNzPTNETXNvTm9ybWFsPjxz cGFuIGxhbmc9M0RFTi1VUyA9CnN0eWxlPTNEJ2ZvbnQtc2l6ZToxMC41cHQ7Zm9udC1mYW1pbHk6 IkNhbGlicmkiLCJzYW5zLXNlcmlmIjtjb2xvcjojMUY0OTc9CkQnPiZuYnNwOzwvc3Bhbj48c3Bh biA9Cmxhbmc9M0RFTi1VUz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+PC9kaXY+PC9kaXY+PGRpdj48 ZGl2PjxwID0KY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gbGFuZz0zREVOLVVTID0Kc3R5bGU9M0Qn Zm9udC1zaXplOjEwLjVwdDtmb250LWZhbWlseToiQ2FsaWJyaSIsInNhbnMtc2VyaWYiO2NvbG9y OiMxRjQ5Nz0KRCc+SSBkbyBtYWtlIGEgbWlzdGFrZSBiZWNhdXNlIEkganVzdCBwcmludCBvcy5n ZXR1aWQoKSBzaG93IHRoZSB1c2VyID0Kcm9vdDsgYnV0IG9zLmdldGV1aWQoKSBzaG93IHRoZSBj dXJyZW50IHVzZXIgaXMgc3RpbGwgdmRzbTs8L3NwYW4+PHNwYW4gPQpsYW5nPTNERU4tVVM+PG86 cD48L286cD48L3NwYW4+PC9wPjwvZGl2PjwvZGl2PjxkaXY+PGRpdj48cCA9CmNsYXNzPTNETXNv Tm9ybWFsPjxzcGFuIGxhbmc9M0RFTi1VUyA9CnN0eWxlPTNEJ2ZvbnQtc2l6ZToxMC41cHQ7Zm9u dC1mYW1pbHk6IkNhbGlicmkiLCJzYW5zLXNlcmlmIjtjb2xvcjojMUY0OTc9CkQnPiZuYnNwOzwv c3Bhbj48c3BhbiA9Cmxhbmc9M0RFTi1VUz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+PC9kaXY+PC9k aXY+PGRpdj48ZGl2PjxwID0KY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gbGFuZz0zREVOLVVTID0K c3R5bGU9M0QnZm9udC1zaXplOjEwLjVwdDtmb250LWZhbWlseToiQ2FsaWJyaSIsInNhbnMtc2Vy aWYiO2NvbG9yOiMxRjQ5Nz0KRCc+QW55d2F5ICwgSSBzdGlsbCBkb249RTI9ODA9OTl0IGtub3cg aG93IHRvIGRlYnVnIHZkc20sIEkgPQpjYW5uPUUyPTgwPTk5dCBsb2cgaW4gdG8gY2VudG9zIHdp dGggdXNlciBWRFNNLCBiZWNhdXNlIEkgZG9uPUUyPTgwPTk5dCA9Cmtub3cgdGhlIHBhc3N3ZCBv ZiB1c2VyIHZkc20gYW5kIGlmIEkgY2hhbmdlZCB0aGUgcGFzc3dvcmQsIHRoZSBzZXJ2aWNlID0K dmRzbWQgd2lsbCBjYW5uPUUyPTgwPTk5dCBzdGFydC48L3NwYW4+PHNwYW4gPQpsYW5nPTNERU4t VVM+PG86cD48L286cD48L3NwYW4+PC9wPjwvZGl2PjwvZGl2PjwvZGl2PjxkaXY+PGRpdj48cCA9 CmNsYXNzPTNETXNvTm9ybWFsPjxzcGFuID0KbGFuZz0zREVOLVVTPiZuYnNwOzxvOnA+PC9vOnA+ PC9zcGFuPjwvcD48L2Rpdj48L2Rpdj48ZGl2PjxwID0KY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4g bGFuZz0zREVOLVVTPnRoZSB2ZHNtIGFjY291bnQgaXMgaW50ZW50aW9uYWxseSA9CmRpc2FibGVk IGZvciBpbnRlcmFjdGl2ZSBsb2dpbjxvOnA+PC9vOnA+PC9zcGFuPjwvcD48L2Rpdj48ZGl2Pjxk aXY+PHAgPQpjbGFzcz0zRE1zb05vcm1hbD48c3BhbiA9Cmxhbmc9M0RFTi1VUz48YnI+PGJyPjxi cj48bzpwPjwvbzpwPjwvc3Bhbj48L3A+PC9kaXY+PGRpdj48ZGl2PjxkaXY+PHAgPQpjbGFzcz0z RE1zb05vcm1hbD48c3BhbiBsYW5nPTNERU4tVVMgPQpzdHlsZT0zRCdmb250LXNpemU6MTAuNXB0 O2ZvbnQtZmFtaWx5OiJDYWxpYnJpIiwic2Fucy1zZXJpZiI7Y29sb3I6IzFGNDk3PQpEJz4mbmJz cDs8L3NwYW4+PHNwYW4gPQpsYW5nPTNERU4tVVM+PG86cD48L286cD48L3NwYW4+PC9wPjwvZGl2 PjwvZGl2PjxkaXY+PGRpdj48cCA9CmNsYXNzPTNETXNvTm9ybWFsPjxzcGFuIGxhbmc9M0RFTi1V UyA9CnN0eWxlPTNEJ2ZvbnQtc2l6ZToxMC41cHQ7Zm9udC1mYW1pbHk6IkNhbGlicmkiLCJzYW5z LXNlcmlmIjtjb2xvcjojMUY0OTc9CkQnPllvdSB0b2xkIG1lID1FMj04MD05Qzwvc3Bhbj48c3Bh biBsYW5nPTNERU4tVVM+c2hvdWxkIGZvbGxvdyB0aGUgPQpkZXZlbCBzZXR1cCB3aWtpPC9zcGFu PjxzcGFuIGxhbmc9M0RFTi1VUyA9CnN0eWxlPTNEJ2ZvbnQtc2l6ZToxMC41cHQ7Zm9udC1mYW1p bHk6IkNhbGlicmkiLCJzYW5zLXNlcmlmIjtjb2xvcjojMUY0OTc9CkQnPj1FMj04MD05RCAsIHdo YXQ9RTI9ODA9OTlzIHRoZSB0cnVlIGxpbmsgb2YgdmRzbSBkZXZlbCBzZXR1cCB3aWtpID0KPyZu YnNwOyBJIGNhbj1FMj04MD05OXQgZ2V0IHVzZWZ1bCBpbmZvcm1hdGlvbiBpbjxzcGFuID0KY2xh c3M9M0RhcHBsZS1jb252ZXJ0ZWQtc3BhY2U+Jm5ic3A7PC9zcGFuPjxhID0KaHJlZj0zRCJodHRw Oi8vb3ZpcnQub3JnLyI+PHNwYW4gPQpzdHlsZT0zRCdjb2xvcjpwdXJwbGUnPm92aXJ0Lm9yZzwv c3Bhbj48L2E+PHNwYW4gPQpjbGFzcz0zRGFwcGxlLWNvbnZlcnRlZC1zcGFjZT4mbmJzcDs8L3Nw YW4+b3IgZ29vZ2xlLjwvc3Bhbj48c3BhbiA9Cmxhbmc9M0RFTi1VUz48bzpwPjwvbzpwPjwvc3Bh bj48L3A+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdj48ZGl2PjxwID0KY2xhc3M9M0RNc29Ob3JtYWw+ PHNwYW4gPQpsYW5nPTNERU4tVVM+Jm5ic3A7PG86cD48L286cD48L3NwYW4+PC9wPjwvZGl2Pjwv ZGl2PjxkaXY+PHAgPQpjbGFzcz0zRE1zb05vcm1hbD48c3BhbiBsYW5nPTNERU4tVVM+PGEgPQpo cmVmPTNEImh0dHA6Ly93d3cub3ZpcnQub3JnL2RldmVsb3AvZGV2ZWxvcGVyLWd1aWRlL3Zkc20v ZGV2ZWxvcGVycy8iPjxzPQpwYW4gPQpzdHlsZT0zRCdjb2xvcjpwdXJwbGUnPmh0dHA6Ly93d3cu b3ZpcnQub3JnL2RldmVsb3AvZGV2ZWxvcGVyLWd1aWRlL3Zkc20vPQpkZXZlbG9wZXJzLzwvc3Bh bj48L2E+Jm5ic3A7aGFzIHRpcHMgaG93IHRvIGJ1aWxkIGZyb20gc291cmNlIGFuZCB3aGF0ID0K cGFja2FnZXMgYXJlIG5lZWRlZDxvOnA+PC9vOnA+PC9zcGFuPjwvcD48L2Rpdj48L2Rpdj48ZGl2 PjxkaXY+PHAgPQpjbGFzcz0zRE1zb05vcm1hbD48c3BhbiBsYW5nPTNERU4tVVM+QW55dGhpbmcg c3BlY2lmaWMgPQp5b3U8L3NwYW4+PUUyPTgwPTk5PHNwYW4gbGFuZz0zREVOLVVTPnJlID0KdHJv dWJsZXNob290aW5nPzxvOnA+PC9vOnA+PC9zcGFuPjwvcD48L2Rpdj48L2Rpdj48ZGl2PjxkaXY+ PHAgPQpjbGFzcz0zRE1zb05vcm1hbD48c3BhbiBsYW5nPTNERU4tVVMgPQpzdHlsZT0zRCdjb2xv cjojMUY0OTdEJz4mbmJzcDs8L3NwYW4+PHNwYW4gPQpsYW5nPTNERU4tVVM+PG86cD48L286cD48 L3NwYW4+PC9wPjwvZGl2PjxkaXY+PHAgY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gPQpsYW5nPTNE RU4tVVMgPQpzdHlsZT0zRCdmb250LXNpemU6MTAuNXB0O2ZvbnQtZmFtaWx5OiJDYWxpYnJpIiwi c2Fucy1zZXJpZiI7Y29sb3I6IzFGNDk3PQpEJz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsgSSBkbyBidWlsZCB0aGUgPQpzb3VyY2UgZnJvbSB0aGlzIGlu c3RydWN0aW9uICwgYnV0IEkgd2FudCB0byBzZXQgYnJlYWtwb2ludCB0byB2aWV3IGVhY2ggPQpz dGVwIGFuZCB2YXJpYWJsZSB2YWx1ZSB0byB1bmRlcnN0YW5kIHRoZSB2ZHNtPUUyPTgwPTk5cyBj b2RlIHVzaW5nID0KcHl0aG9uIElERSBzdWNoIGFzIFB5Y2hhcm0gLDxzcGFuID0KY2xhc3M9M0Rh cHBsZS1jb252ZXJ0ZWQtc3BhY2U+Jm5ic3A7PC9zcGFuPjwvc3Bhbj48c3BhbiA9Cmxhbmc9M0RF Ti1VUz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+PC9kaXY+PGRpdj48cCBjbGFzcz0zRE1zb05vcm1h bD48c3BhbiA9Cmxhbmc9M0RFTi1VUyA9CnN0eWxlPTNEJ2ZvbnQtc2l6ZToxMC41cHQ7Zm9udC1m YW1pbHk6IkNhbGlicmkiLCJzYW5zLXNlcmlmIjtjb2xvcjojMUY0OTc9CkQnPiZuYnNwOzwvc3Bh bj48c3BhbiBsYW5nPTNERU4tVVM+PG86cD48L286cD48L3NwYW4+PC9wPjwvZGl2PjxkaXY+PHAg PQpjbGFzcz0zRE1zb05vcm1hbD48c3BhbiBsYW5nPTNERU4tVVMgPQpzdHlsZT0zRCdmb250LXNp emU6MTAuNXB0O2ZvbnQtZmFtaWx5OiJDYWxpYnJpIiwic2Fucy1zZXJpZiI7Y29sb3I6IzFGNDk3 PQpEJz5Zb3Uga25vdyB0aGF0IHdlIGNhbiBpbXBsZW1lbnQgdGhpcyBkZWJ1ZyByZXF1aXJlbWVu dCBpbiBvdmlydCBlbmdpbmUgPQplYXNpbHksIGJ1dCBJIGNhbj1FMj04MD05OXQgaW1wbGVtZW50 IGxvY2FsIGRlYnVnIGluIHZkc20gZWFzaWx5LCA9CmJlY2F1c2UgdmRzbSBkaWRuPUUyPTgwPTk5 dCBhbGxvdyByb290IHRvIHJ1biBvciBkZWJ1Zy48L3NwYW4+PHNwYW4gPQpsYW5nPTNERU4tVVM+ PG86cD48L286cD48L3NwYW4+PC9wPjwvZGl2PjxkaXY+PHAgY2xhc3M9M0RNc29Ob3JtYWw+PHNw YW4gPQpsYW5nPTNERU4tVVMgPQpzdHlsZT0zRCdmb250LXNpemU6MTAuNXB0O2ZvbnQtZmFtaWx5 OiJDYWxpYnJpIiwic2Fucy1zZXJpZiI7Y29sb3I6IzFGNDk3PQpEJz4mbmJzcDs8L3NwYW4+PHNw YW4gbGFuZz0zREVOLVVTPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD48L2Rpdj48ZGl2PjxwID0KY2xh c3M9M0RNc29Ob3JtYWw+PHNwYW4gbGFuZz0zREVOLVVTID0Kc3R5bGU9M0QnZm9udC1zaXplOjEw LjVwdDtmb250LWZhbWlseToiQ2FsaWJyaSIsInNhbnMtc2VyaWYiO2NvbG9yOiMxRjQ5Nz0KRCc+ SXMgdGhlcmUgYW55IGRlYnVnIGluc3RydWN0aW9uID88L3NwYW4+PHNwYW4gPQpsYW5nPTNERU4t VVM+PG86cD48L286cD48L3NwYW4+PC9wPjwvZGl2PjwvZGl2PjxkaXY+PHAgPQpjbGFzcz0zRE1z b05vcm1hbD48c3BhbiA9Cmxhbmc9M0RFTi1VUz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+ PC9kaXY+PHAgPQpjbGFzcz0zRE1zb05vcm1hbD48c3BhbiBsYW5nPTNERU4tVVM+SSBkb249RTI9 ODA9OTl0IHRoaW5rIGl0PUUyPTgwPTk5cyA9CnBvc3NpYmxlIHRvIGRlYnVnIGl0IGZyb20gUHlD aGFybSwgb3IgYW55IElERSBmb3IgdGhhdCBtYXR0ZXIsID0KZWFzaWx5LiZuYnNwOzxvOnA+PC9v OnA+PC9zcGFuPjwvcD48ZGl2PjxwIGNsYXNzPTNETXNvTm9ybWFsPjxzcGFuID0KbGFuZz0zREVO LVVTPkl0PUUyPTgwPTk5cyBhIG11bHRpdGhyZWFkZWQgYXBwbGljYXRpb24sIHlvdSBjYW49RTI9 ODA9OTl0ID0KcmVhbGx5IHNldCBhIGJyZWFrcG9pbnQgd2l0aG91dCBhZmZlY3Rpbmcgb3RoZXIg ZnVuY3Rpb25hbGl0eSBzaW5jZSBzb21lID0Kb2YgdGhlIHRocmVhZHMgbmVlZCB0byBrZWVwIHJ1 bm5pbmc8bzpwPjwvbzpwPjwvc3Bhbj48L3A+PC9kaXY+PGRpdj48cCA9CmNsYXNzPTNETXNvTm9y bWFsPjxzcGFuIGxhbmc9M0RFTi1VUz5CZXN0IGFkdmljZSBpcyB0byBhZGQgYSA9CmRlYnVnZ2lu Zy9sb2dnaW5nIGNvZGUgaW4gcGxhY2VzIHlvdSBuZWVkLCBwcmludGluZyB2YXJpYWJsZXMgPQp5 b3U9RTI9ODA9OTlyZSBpbnRlcmVzdGVkIGluLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD48L2Rpdj48 ZGl2PjxwID0KY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gbGFuZz0zREVOLVVTID0Kc3R5bGU9M0Qn Y29sb3I6IzFGNDk3RCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPjxwID0KY2xhc3M9M0RN c29Ob3JtYWw+PHNwYW4gbGFuZz0zREVOLVVTID0Kc3R5bGU9M0QnZm9udC1zaXplOjEwLjVwdDtm b250LWZhbWlseToiQ2FsaWJyaSIsInNhbnMtc2VyaWYiO2NvbG9yOiMxRjQ5Nz0KRCc+PUMyPUEw PUMyPUEwPUMyPUEwPUMyPUEwPUMyPUEwPUMyPUEwPUMyPUEwPUMyPUEwIEkga25vdyBpdD1FMj04 MD05OXMgPQphIG11bHRpdGhyZWFkZWQgYXBwbGljYXRpb24gLCBhbmQgZGVidWcgdmRzbSBpcyBh IHZlcnkgZGlmZmljdWx0IGpvYiwgPQpidXQgd2l0aG91dCBkZWJ1ZywgSSBkb249RTI9ODA9OTl0 IGtub3cgd2hpY2ggY29kZSBJIHNob3VsZCByZXBsYWNlIG9yID0KbG9nZ2luZyw9QzI9QTAgPUMy PUEwSXMgdGhlcmUgYW55IHJlbW90ZSBkZWJ1ZyBzb2x1dGlvbiBsaWtlIG92aXJ0ID0KZW5naW5l PyA9QzI9QTBJIGZvdW5kIHRoYXQgPG86cD48L286cD48L3NwYW4+PC9wPjxwID0KY2xhc3M9M0RN c29Ob3JtYWw+PHNwYW4gbGFuZz0zREVOLVVTID0Kc3R5bGU9M0QnZm9udC1zaXplOjEwLjVwdDtm b250LWZhbWlseToiQ2FsaWJyaSIsInNhbnMtc2VyaWYiO2NvbG9yOiMxRjQ5Nz0KRCc+SSBjYW4g ZG8gcmVtb3RlIGRlYnVnIGluIHNpbXBsZSBweXRob24gYXBwbGljYXRpb24gLCBidXQgSSA9CmRp ZG49RTI9ODA9OTl0IHN1Y2Nlc3MgeWV0IHJlbW90ZSBkZWJ1Z2dpbmcgdmRzbS4gPQo8bzpwPjwv bzpwPjwvc3Bhbj48L3A+PHAgY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gbGFuZz0zREVOLVVTID0K c3R5bGU9M0QnZm9udC1zaXplOjEwLjVwdDtmb250LWZhbWlseToiQ2FsaWJyaSIsInNhbnMtc2Vy aWYiO2NvbG9yOiMxRjQ5Nz0KRCc+PUMyPUEwPUMyPUEwPUMyPUEwPUMyPUEwPUMyPUEwPUMyPUEw PUMyPUEwPUMyPUEwID0KPG86cD48L286cD48L3NwYW4+PC9wPjxwIGNsYXNzPTNETXNvTm9ybWFs PjxzcGFuIGxhbmc9M0RFTi1VUyA9CnN0eWxlPTNEJ2ZvbnQtc2l6ZToxMC41cHQ7Zm9udC1mYW1p bHk6IkNhbGlicmkiLCJzYW5zLXNlcmlmIjtjb2xvcjojMUY0OTc9CkQnPj1DMj1BMD1DMj1BMD1D Mj1BMD1DMj1BMD1DMj1BMD1DMj1BMD1DMj1BMD1DMj1BMCBOb3cgb25lIG9mIG91ciBjYXNlID0K SSB3YW50IHRvIGNvbnNpZGVyIHVzaW5nIG92aXJ0IGFzIG91ciBzb2x1dGlvbiAsIHdlIG1heSBk byBsaXR0bGUgY2hhbmdlID0Kb3ZlciBvdmlydC4gYnV0IGFzIGRlc2NyaWJlZCBhYm92ZSwgd2l0 aG91dCBkZWJ1ZyAsIHdlIGNhbiBoYXJkbHkgPQp1bmRlcnN0YW5kIHZkc20gY2xlYXJseSBhbmQg Y2Fubm90IGRvIGNvcnJlY3RseSBjb2RlID0KY2hhbmdlLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD48 cCBjbGFzcz0zRE1zb05vcm1hbD48c3BhbiBsYW5nPTNERU4tVVMgPQpzdHlsZT0zRCdmb250LXNp emU6MTAuNXB0O2ZvbnQtZmFtaWx5OiJDYWxpYnJpIiwic2Fucy1zZXJpZiI7Y29sb3I6IzFGNDk3 PQpEJz5JcyB0aGVyZSBzb21lIGdvb2QgYWR2aWNlID88bzpwPjwvbzpwPjwvc3Bhbj48L3A+PHAg PQpjbGFzcz0zRE1zb05vcm1hbD48c3BhbiBsYW5nPTNERU4tVVMgPQpzdHlsZT0zRCdmb250LXNp emU6MTAuNXB0O2ZvbnQtZmFtaWx5OiJDYWxpYnJpIiwic2Fucy1zZXJpZiI7Y29sb3I6IzFGNDk3 PQpEJz49QzI9QTA9QzI9QTA9QzI9QTA9QzI9QTA9QzI9QTA9QzI9QTA9QzI9QTA9QzI9QTAgPQo8 bzpwPjwvbzpwPjwvc3Bhbj48L3A+PHAgY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gbGFuZz0zREVO LVVTID0Kc3R5bGU9M0QnZm9udC1zaXplOjEwLjVwdDtmb250LWZhbWlseToiQ2FsaWJyaSIsInNh bnMtc2VyaWYiO2NvbG9yOiMxRjQ5Nz0KRCc+PUMyPUEwPUMyPUEwPUMyPUEwPUMyPUEwPUMyPUEw PUMyPUEwPUMyPUEwPUMyPUEwIFRoYW5rID0KeW91PG86cD48L286cD48L3NwYW4+PC9wPjxwIGNs YXNzPTNETXNvTm9ybWFsPjxzcGFuIGxhbmc9M0RFTi1VUyA9CnN0eWxlPTNEJ2ZvbnQtc2l6ZTox MC41cHQ7Zm9udC1mYW1pbHk6IkNhbGlicmkiLCJzYW5zLXNlcmlmIjtjb2xvcjojMUY0OTc9CkQn Pj1DMj1BMD1DMj1BMD1DMj1BMD1DMj1BMD1DMj1BMD1DMj1BMD1DMj1BMD1DMj1BMCA9Ck1hcms8 bzpwPjwvbzpwPjwvc3Bhbj48L3A+PC9kaXY+PGRpdj48cCBjbGFzcz0zRE1zb05vcm1hbD48c3Bh biA9Cmxhbmc9M0RFTi1VUz5UaGFua3MsPG86cD48L286cD48L3NwYW4+PC9wPjwvZGl2PjxkaXY+ PHAgPQpjbGFzcz0zRE1zb05vcm1hbD48c3BhbiA9Cmxhbmc9M0RFTi1VUz5taWNoYWw8bzpwPjwv bzpwPjwvc3Bhbj48L3A+PC9kaXY+PGRpdj48cCA9CmNsYXNzPTNETXNvTm9ybWFsPjxzcGFuID0K bGFuZz0zREVOLVVTPjxicj48YnI+PG86cD48L286cD48L3NwYW4+PC9wPjxkaXY+PGRpdj48ZGl2 PjxwID0KY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gbGFuZz0zREVOLVVTID0Kc3R5bGU9M0QnZm9u dC1zaXplOjEwLjVwdDtmb250LWZhbWlseToiQ2FsaWJyaSIsInNhbnMtc2VyaWYiO2NvbG9yOiMx RjQ5Nz0KRCc+Jm5ic3A7PC9zcGFuPjxzcGFuIGxhbmc9M0RFTi1VUz48bzpwPjwvbzpwPjwvc3Bh bj48L3A+PC9kaXY+PGRpdj48cCA9CmNsYXNzPTNETXNvTm9ybWFsPjxzcGFuIGxhbmc9M0RFTi1V UyA9CnN0eWxlPTNEJ2ZvbnQtc2l6ZToxMC41cHQ7Zm9udC1mYW1pbHk6IkNhbGlicmkiLCJzYW5z LXNlcmlmIjtjb2xvcjojMUY0OTc9CkQnPlRoYW5rIHlvdTwvc3Bhbj48c3BhbiA9Cmxhbmc9M0RF Ti1VUz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+PC9kaXY+PGRpdj48cCBjbGFzcz0zRE1zb05vcm1h bD48c3BhbiA9Cmxhbmc9M0RFTi1VUyA9CnN0eWxlPTNEJ2ZvbnQtc2l6ZToxMC41cHQ7Zm9udC1m YW1pbHk6IkNhbGlicmkiLCJzYW5zLXNlcmlmIjtjb2xvcjojMUY0OTc9CkQnPk1hcms8L3NwYW4+ PHNwYW4gbGFuZz0zREVOLVVTPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD48L2Rpdj48ZGl2PjxwID0K Y2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gbGFuZz0zREVOLVVTID0Kc3R5bGU9M0QnZm9udC1zaXpl OjEwLjVwdDtmb250LWZhbWlseToiQ2FsaWJyaSIsInNhbnMtc2VyaWYiO2NvbG9yOiMxRjQ5Nz0K RCc+Jm5ic3A7PC9zcGFuPjxzcGFuID0KbGFuZz0zREVOLVVTPjxvOnA+PC9vOnA+PC9zcGFuPjwv cD48L2Rpdj48L2Rpdj48ZGl2PjxkaXY+PHAgPQpjbGFzcz0zRE1zb05vcm1hbD48c3BhbiA9Cmxh bmc9M0RFTi1VUz5UaGFua3MsPG86cD48L286cD48L3NwYW4+PC9wPjwvZGl2PjwvZGl2PjxkaXY+ PGRpdj48cCA9CmNsYXNzPTNETXNvTm9ybWFsPjxzcGFuID0KbGFuZz0zREVOLVVTPm1pY2hhbDxv OnA+PC9vOnA+PC9zcGFuPjwvcD48L2Rpdj48L2Rpdj48ZGl2PjxkaXY+PHAgPQpjbGFzcz0zRE1z b05vcm1hbD48c3BhbiA9Cmxhbmc9M0RFTi1VUz48YnI+PGJyPjxicj48bzpwPjwvbzpwPjwvc3Bh bj48L3A+PC9kaXY+PGRpdj48ZGl2PjxkaXY+PHAgPQpjbGFzcz0zRE1zb05vcm1hbD48c3BhbiBs YW5nPTNERU4tVVMgPQpzdHlsZT0zRCdmb250LXNpemU6MTAuNXB0O2ZvbnQtZmFtaWx5OiJDYWxp YnJpIiwic2Fucy1zZXJpZiI7Y29sb3I6IzFGNDk3PQpEJz4mbmJzcDs8L3NwYW4+PHNwYW4gPQps YW5nPTNERU4tVVM+PG86cD48L286cD48L3NwYW4+PC9wPjwvZGl2PjwvZGl2PjxkaXY+PGRpdj48 cCA9CmNsYXNzPTNETXNvTm9ybWFsPjxzcGFuIGxhbmc9M0RFTi1VUyA9CnN0eWxlPTNEJ2ZvbnQt c2l6ZToxMC41cHQ7Zm9udC1mYW1pbHk6IkNhbGlicmkiLCJzYW5zLXNlcmlmIjtjb2xvcjojMUY0 OTc9CkQnPiZuYnNwOzwvc3Bhbj48c3BhbiA9Cmxhbmc9M0RFTi1VUz48bzpwPjwvbzpwPjwvc3Bh bj48L3A+PC9kaXY+PC9kaXY+PGRpdj48ZGl2PjxwID0KY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4g bGFuZz0zREVOLVVTID0Kc3R5bGU9M0QnZm9udC1zaXplOjEwLjVwdDtmb250LWZhbWlseToiQ2Fs aWJyaSIsInNhbnMtc2VyaWYiO2NvbG9yOiMxRjQ5Nz0KRCc+VGhhbmsgeW91PC9zcGFuPjxzcGFu ID0KbGFuZz0zREVOLVVTPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD48L2Rpdj48L2Rpdj48ZGl2Pjxk aXY+PHAgPQpjbGFzcz0zRE1zb05vcm1hbD48c3BhbiBsYW5nPTNERU4tVVMgPQpzdHlsZT0zRCdm b250LXNpemU6MTAuNXB0O2ZvbnQtZmFtaWx5OiJDYWxpYnJpIiwic2Fucy1zZXJpZiI7Y29sb3I6 IzFGNDk3PQpEJz4mbmJzcDs8L3NwYW4+PHNwYW4gPQpsYW5nPTNERU4tVVM+PG86cD48L286cD48 L3NwYW4+PC9wPjwvZGl2PjwvZGl2PjxkaXY+PGRpdiA9CnN0eWxlPTNEJ2JvcmRlcjpub25lO2Jv cmRlci10b3A6c29saWQgI0I1QzRERiAxLjBwdDtwYWRkaW5nOjMuMHB0IDBjbSA9CjBjbSAwY20n PjxkaXY+PGRpdj48cCBjbGFzcz0zRE1zb05vcm1hbD48Yj48c3BhbiA9CnN0eWxlPTNEJ2ZvbnQt c2l6ZToxMC4wcHQnPj1FNT04Rj05MT1FND1CQj1CNj1FND1CQT1CQTxzcGFuID0KbGFuZz0zREVO LVVTPjo8L3NwYW4+PC9zcGFuPjwvYj48c3BhbiA9CmNsYXNzPTNEYXBwbGUtY29udmVydGVkLXNw YWNlPjxzcGFuIGxhbmc9M0RFTi1VUyA9CnN0eWxlPTNEJ2ZvbnQtc2l6ZToxMC4wcHQnPiZuYnNw Ozwvc3Bhbj48L3NwYW4+PHNwYW4gbGFuZz0zREVOLVVTID0Kc3R5bGU9M0QnZm9udC1zaXplOjEw LjBwdCc+TWljaGFsIFNrcml2YW5layBbPGEgPQpocmVmPTNEIm1haWx0bzptc2tyaXZhbkByZWRo YXQuY29tIj48c3BhbiA9CnN0eWxlPTNEJ2NvbG9yOnB1cnBsZSc+bWFpbHRvOm1za3JpdmFuQHJl ZGhhdC5jb208L3NwYW4+PC9hPl08c3BhbiA9CmNsYXNzPTNEYXBwbGUtY29udmVydGVkLXNwYWNl PiZuYnNwOzwvc3Bhbj48YnI+PC9zcGFuPjxiPjxzcGFuID0Kc3R5bGU9M0QnZm9udC1zaXplOjEw LjBwdCc+PUU1PThGPTkxPUU5PTgwPTgxPUU2PTk3PUI2PUU5PTk3PUI0PHNwYW4gPQpsYW5nPTNE RU4tVVM+Ojwvc3Bhbj48L3NwYW4+PC9iPjxzcGFuID0KY2xhc3M9M0RhcHBsZS1jb252ZXJ0ZWQt c3BhY2U+PHNwYW4gbGFuZz0zREVOLVVTID0Kc3R5bGU9M0QnZm9udC1zaXplOjEwLjBwdCc+Jm5i c3A7PC9zcGFuPjwvc3Bhbj48c3BhbiBsYW5nPTNERU4tVVMgPQpzdHlsZT0zRCdmb250LXNpemU6 MTAuMHB0Jz4yMDE2PC9zcGFuPjxzcGFuID0Kc3R5bGU9M0QnZm9udC1zaXplOjEwLjBwdCc+PUU1 PUI5PUI0PHNwYW4gPQpsYW5nPTNERU4tVVM+Nzwvc3Bhbj49RTY9OUM9ODg8c3BhbiBsYW5nPTNE RU4tVVM+MjY8L3NwYW4+PUU2PTk3PUE1PHNwYW4gPQpjbGFzcz0zRGFwcGxlLWNvbnZlcnRlZC1z cGFjZT48c3BhbiA9Cmxhbmc9M0RFTi1VUz4mbmJzcDs8L3NwYW4+PC9zcGFuPjxzcGFuID0KbGFu Zz0zREVOLVVTPjU6MDA8YnI+PC9zcGFuPjxiPj1FNj05ND1CNj1FND1CQj1CNj1FND1CQT1CQTxz cGFuID0KbGFuZz0zREVOLVVTPjo8L3NwYW4+PC9iPjxzcGFuIGNsYXNzPTNEYXBwbGUtY29udmVy dGVkLXNwYWNlPjxzcGFuID0KbGFuZz0zREVOLVVTPiZuYnNwOzwvc3Bhbj48L3NwYW4+PHNwYW4g PQpsYW5nPTNERU4tVVM+bGlmdXFpb25nPGJyPjwvc3Bhbj48Yj49RTY9OEE9ODQ9RTk9ODA9ODE8 c3BhbiA9Cmxhbmc9M0RFTi1VUz46PC9zcGFuPjwvYj48c3BhbiBjbGFzcz0zRGFwcGxlLWNvbnZl cnRlZC1zcGFjZT48c3BhbiA9Cmxhbmc9M0RFTi1VUz4mbmJzcDs8L3NwYW4+PC9zcGFuPjxzcGFu IGxhbmc9M0RFTi1VUz51c2VyczsgPQpkZXZlbDxicj48L3NwYW4+PGI+PUU0PUI4PUJCPUU5PUEy PTk4PHNwYW4gPQpsYW5nPTNERU4tVVM+Ojwvc3Bhbj48L2I+PHNwYW4gY2xhc3M9M0RhcHBsZS1j b252ZXJ0ZWQtc3BhY2U+PHNwYW4gPQpsYW5nPTNERU4tVVM+Jm5ic3A7PC9zcGFuPjwvc3Bhbj48 c3BhbiBsYW5nPTNERU4tVVM+UmU6IFtvdmlydC1kZXZlbF0gPQpEZWJ1ZyB2ZHNtIDQuMC4wIHJl cG9ydCBlcnJvcjogbGlidmlydDogWE1MLVJQQyBlcnJvciA6IEZhaWxlZCB0byA9CmNvbm5lY3Qg c29ja2V0IHRvICcvdmFyL3J1bi9saWJ2aXJ0L2xpYnZpcnQtc29jayc6IFBlcm1pc3Npb24gPQpk ZW5pZWQ8L3NwYW4+PC9zcGFuPjxzcGFuID0KbGFuZz0zREVOLVVTPjxvOnA+PC9vOnA+PC9zcGFu PjwvcD48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2PjxkaXY+PHAgPQpjbGFzcz0zRE1zb05v cm1hbD48c3BhbiA9Cmxhbmc9M0RFTi1VUz4mbmJzcDs8bzpwPjwvbzpwPjwvc3Bhbj48L3A+PC9k aXY+PC9kaXY+PGRpdj48ZGl2PjxkaXY+PHAgPQpjbGFzcz0zRE1zb05vcm1hbD48c3BhbiA9Cmxh bmc9M0RFTi1VUz4mbmJzcDs8bzpwPjwvbzpwPjwvc3Bhbj48L3A+PC9kaXY+PC9kaXY+PC9kaXY+ PGRpdj48cCA9CmNsYXNzPTNETXNvTm9ybWFsIHN0eWxlPTNEJ21hcmdpbi1ib3R0b206MTIuMHB0 Jz48c3BhbiA9Cmxhbmc9M0RFTi1VUz48YnI+T24gMjUgSnVsIDIwMTYsIGF0IDIxOjUwLCBTYW5k cm8gQm9uYXp6b2xhICZsdDs8YSA9CmhyZWY9M0QibWFpbHRvOnNib25henpvQHJlZGhhdC5jb20i PjxzcGFuID0Kc3R5bGU9M0QnY29sb3I6cHVycGxlJz5zYm9uYXp6b0ByZWRoYXQuY29tPC9zcGFu PjwvYT4mZ3Q7ID0Kd3JvdGU6PG86cD48L286cD48L3NwYW4+PC9wPjwvZGl2PjxibG9ja3F1b3Rl ID0Kc3R5bGU9M0QnbWFyZ2luLXRvcDo1LjBwdDttYXJnaW4tYm90dG9tOjUuMHB0Jz48ZGl2Pjxk aXY+PHAgPQpjbGFzcz0zRE1zb05vcm1hbD48c3BhbiBsYW5nPTNERU4tVVM+QWRkaW5nIHNvbWUg cGVvcGxlIGZyb20gdmlydCA9CnRlYW0uPG86cD48L286cD48L3NwYW4+PC9wPjwvZGl2PjxkaXY+ PHAgY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gPQpsYW5nPTNERU4tVVM+SWwgMjMvTHVnLzIwMTYg MTE6NDQsICZxdW90O2xpZnVxaW9uZyZxdW90OyAmbHQ7PGEgPQpocmVmPTNEIm1haWx0bzpsaWZ1 cWlvbmdAY25jbG91ZHNlYy5jb20iPjxzcGFuID0Kc3R5bGU9M0QnY29sb3I6cHVycGxlJz5saWZ1 cWlvbmdAY25jbG91ZHNlYy5jb208L3NwYW4+PC9hPiZndDsgaGEgPQpzY3JpdHRvOjxicj4mZ3Q7 PGJyPiZndDsgSSBkZWJ1Z2dlZCB2ZHNtIHdpdGggUHlDaGFybSwgQW5kIEkgbG9nZ2VkIG9uID0K bXkgQ2VudG9zIDcuMiB3aXRoIHJvb3QsICZuYnNwO2FuZCBnZXQgYW4gZXJyb3IgYXMgPQpmb2xs b3dzOjxicj4mZ3Q7PGJyPiZndDsgJm5ic3A7PGJyPiZndDs8YnI+Jmd0OyBQcm9ibGVtOjxicj4m Z3Q7PGJyPiZndDsgPQombmJzcDs8YnI+Jmd0Ozxicj4mZ3Q7IFRyYWNlYmFjayAobW9zdCByZWNl bnQgY2FsbCA9Cmxhc3QpOjxicj4mZ3Q7PGJyPiZndDsgJm5ic3A7IEZpbGUgJnF1b3Q7L3Vzci9z aGFyZS92ZHNtL3Zkc20mcXVvdDssID0KbGluZSAxNDksIGluIHJ1bjxicj4mZ3Q7PGJyPiZndDsg Jm5ic3A7Jm5ic3A7Jm5ic3A7ID0Kc2VydmVfY2xpZW50cyhsb2cpPGJyPiZndDs8YnI+Jmd0OyAm bmJzcDsgRmlsZSA9CiZxdW90Oy91c3Ivc2hhcmUvdmRzbS92ZHNtJnF1b3Q7LCBsaW5lIDEwNCwg aW4gPQpzZXJ2ZV9jbGllbnRzPGJyPiZndDs8YnI+Jmd0OyAmbmJzcDsmbmJzcDsmbmJzcDsgY2lm ID0zRCA9CmNsaWVudElGLmdldEluc3RhbmNlKGlycywgbG9nLCBzY2hlZHVsZXIpPGJyPiZndDs8 YnI+Jmd0OyAmbmJzcDsgRmlsZSA9CiZxdW90Oy91c3Ivc2hhcmUvdmRzbS9jbGllbnRJRi5weSZx dW90OywgbGluZSAyMDQsIGluID0KZ2V0SW5zdGFuY2U8YnI+Jmd0Ozxicj4mZ3Q7ICZuYnNwOyZu YnNwOyZuYnNwOyBjbHMuX2luc3RhbmNlID0zRCA9CmNsaWVudElGKGlycywgbG9nLCBzY2hlZHVs ZXIpPGJyPiZndDs8YnI+Jmd0OyAmbmJzcDsgRmlsZSA9CiZxdW90Oy91c3Ivc2hhcmUvdmRzbS9j bGllbnRJRi5weSZxdW90OywgbGluZSAxMDYsIGluID0KX19pbml0X188YnI+Jmd0Ozxicj4mZ3Q7 ICZuYnNwOyZuYnNwOyZuYnNwOyA9CnNlY3JldC5jbGVhcigpPGJyPiZndDs8YnI+Jmd0OyAmbmJz cDsgRmlsZSA9CiZxdW90Oy91c3IvbGliL3B5dGhvbjIuNy9zaXRlLXBhY2thZ2VzL3Zkc20vdmly dC9zZWNyZXQucHkmcXVvdDssIGxpbmUgPQo5MiwgaW4gY2xlYXI8YnI+Jmd0Ozxicj4mZ3Q7ICZu YnNwOyZuYnNwOyZuYnNwOyBjb24gPTNEID0KbGlidmlydGNvbm5lY3Rpb24uZ2V0KCk8YnI+Jmd0 Ozxicj4mZ3Q7ICZuYnNwOyBGaWxlID0KJnF1b3Q7L3Vzci9saWIvcHl0aG9uMi43L3NpdGUtcGFj a2FnZXMvdmRzbS9saWJ2aXJ0Y29ubmVjdGlvbi5weSZxdW90OywgPQpsaW5lIDE2MywgaW4gZ2V0 PGJyPiZndDs8YnI+Jmd0OyAmbmJzcDsmbmJzcDsmbmJzcDsgPQpwYXNzd29yZCk8YnI+Jmd0Ozxi cj4mZ3Q7ICZuYnNwOyBGaWxlID0KJnF1b3Q7L3Vzci9saWIvcHl0aG9uMi43L3NpdGUtcGFja2Fn ZXMvdmRzbS9saWJ2aXJ0Y29ubmVjdGlvbi5weSZxdW90OywgPQpsaW5lIDk5LCBpbiBvcGVuX2Nv bm5lY3Rpb248YnI+Jmd0Ozxicj4mZ3Q7ICZuYnNwOyZuYnNwOyZuYnNwOyByZXR1cm4gPQp1dGls cy5yZXRyeShsaWJ2aXJ0T3BlbiwgdGltZW91dD0zRDEwLCBzbGVlcD0zRDAuMik8YnI+Jmd0Ozxi cj4mZ3Q7ID0KJm5ic3A7IEZpbGUgJnF1b3Q7L3Vzci9saWIvcHl0aG9uMi43L3NpdGUtcGFja2Fn ZXMvdmRzbS91dGlscy5weSZxdW90OywgPQpsaW5lIDU0NiwgaW4gcmV0cnk8YnI+Jmd0Ozxicj4m Z3Q7ICZuYnNwOyZuYnNwOyZuYnNwOyByZXR1cm4gPQpmdW5jKCk8YnI+Jmd0Ozxicj4mZ3Q7ICZu YnNwOyBGaWxlID0KJnF1b3Q7L3Vzci9saWI2NC9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy9saWJ2 aXJ0LnB5JnF1b3Q7LCBsaW5lIDEwNSwgaW4gPQpvcGVuQXV0aDxicj4mZ3Q7PGJyPiZndDsgJm5i c3A7Jm5ic3A7Jm5ic3A7IGlmIHJldCBpcyBOb25lOnJhaXNlID0KbGlidmlydEVycm9yKCd2aXJD b25uZWN0T3BlbkF1dGgoKSBmYWlsZWQnKTxicj4mZ3Q7PGJyPiZndDsgPQpsaWJ2aXJ0RXJyb3I6 IEZhaWxlZCB0byBjb25uZWN0IHNvY2tldCB0byA9CicvdmFyL3J1bi9saWJ2aXJ0L2xpYnZpcnQt c29jayc6IFBlcm1pc3Npb24gZGVuaWVkPGJyPiZndDs8YnI+Jmd0OyA9CiZuYnNwOzxicj4mZ3Q7 PGJyPiZndDsgSW52ZXN0aXRhdGU6PGJyPiZndDs8YnI+Jmd0OyBBY2NvcmRpbmcgdG8gdGhlID0K dHJhY2ViYWNrIGFib3ZlLCB0aGUgY29kZSBpbiBsaWJ2aXJ0LnB5IGFzIGJlbG93LCBhbmQgJm5i c3A7b3MuZ2V0ZXVpZCgpID0KZ2V0PHNwYW4gPQpjbGFzcz0zRGFwcGxlLWNvbnZlcnRlZC1zcGFj ZT4mbmJzcDs8L3NwYW4+PC9zcGFuPj1FMj04MD05ODxzcGFuID0KbGFuZz0zREVOLVVTPjA8L3Nw YW4+PUUyPTgwPTk5PHNwYW4gY2xhc3M9M0RhcHBsZS1jb252ZXJ0ZWQtc3BhY2U+PHNwYW4gPQps YW5nPTNERU4tVVM+Jm5ic3A7PC9zcGFuPjwvc3Bhbj48c3BhbiBsYW5nPTNERU4tVVM+d2hpY2gg c2hvd3MgdGhlID0KY3VycmVudCB1c2VyIGlzID0Kcm9vdDs8bzpwPjwvbzpwPjwvc3Bhbj48L3A+ PC9kaXY+PC9kaXY+PC9ibG9ja3F1b3RlPjxkaXY+PGRpdj48ZGl2PjxwID0KY2xhc3M9M0RNc29O b3JtYWw+PHNwYW4gPQpsYW5nPTNERU4tVVM+Jm5ic3A7PG86cD48L286cD48L3NwYW4+PC9wPjwv ZGl2PjwvZGl2PjwvZGl2PjxkaXY+PGRpdj48cCA9CmNsYXNzPTNETXNvTm9ybWFsPjxzcGFuIGxh bmc9M0RFTi1VUz52ZHNtIGlzIG5vdCBzdXBwb3NlZCB0byBiZSBydW4gPQp1bmRlciByb290IHVz ZXIuIEZvciBkZWJ1Z2dpbmcgeW91IHNob3VsZCBmb2xsb3cgdGhlIGRldmVsIHNldHVwIHdpa2kg PQphbmQgbm90IGNoYW5nZSBhIHJlZ3VsYXIgPQpob3N0LiZuYnNwOzxvOnA+PC9vOnA+PC9zcGFu PjwvcD48L2Rpdj48L2Rpdj48ZGl2PjxkaXY+PGRpdj48cCA9CmNsYXNzPTNETXNvTm9ybWFsPjxz cGFuIGxhbmc9M0RFTi1VUz5EZXBlbmRzIHdoYXQgeW91IG1vZGlmaWVkLCBpdCdzID0KaW1wb3Nz aWJsZSB0byBzYXkgZnJvbSB3aGF0IHlvdSBkZXNjcmliZWQuLi4uYnV0IGEgZ2VuZXJhbCBhZHZp Y2UgaXMgeW91ID0Kc2ltcGx5IGRvbid0IGRvID0KdGhhdDopPGJyPjxicj48YnI+PGJyPjxvOnA+ PC9vOnA+PC9zcGFuPjwvcD48L2Rpdj48L2Rpdj48ZGl2PjxkaXY+PHAgPQpjbGFzcz0zRE1zb05v cm1hbD48c3BhbiBsYW5nPTNERU4tVVM+Jmd0Ozxicj4mZ3Q7ICZuYnNwOzxicj4mZ3Q7PGJyPiZn dDsgPQpkZWYgb3BlbkF1dGgodXJpLCBhdXRoLCBmbGFncz0zRDApOjxicj4mZ3Q7PGJyPiZndDsg PQombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgI3ByaW50 ID0Kb3MuZ2V0ZXVpZCgpPGJyPiZndDs8YnI+Jmd0OyAmbmJzcDsmbmJzcDsmbmJzcDsgcmV0ID0z RCA9CmxpYnZpcnRtb2QudmlyQ29ubmVjdE9wZW5BdXRoKHVyaSwgYXV0aCwgZmxhZ3MpPGJyPiZn dDs8YnI+Jmd0OyA9CiZuYnNwOyZuYnNwOyZuYnNwOyBpZiByZXQgaXMgTm9uZTpyYWlzZSA9Cmxp YnZpcnRFcnJvcigndmlyQ29ubmVjdE9wZW5BdXRoKCkgZmFpbGVkJyk8YnI+Jmd0Ozxicj4mZ3Q7 IHJldHVybiA9CnZpckNvbm5lY3QoX29iaj0zRHJldCk8YnI+Jmd0Ozxicj4mZ3Q7ICZuYnNwOzxi cj4mZ3Q7PGJyPiZndDsgPQpbcm9vdEBzZXJ2ZXIxMTcgbGlidmlydF0jIGxsID0KL3Zhci9ydW4v bGlidmlydC9saWJ2aXJ0LXNvY2s8YnI+Jmd0Ozxicj4mZ3Q7IHNyd3hyd3gtLS0uIDEgcm9vdCBx ZW11IDAgPQpKdWwgMTkgMjM6NDMgL3Zhci9ydW4vbGlidmlydC9saWJ2aXJ0LXNvY2s8YnI+Jmd0 Ozxicj4mZ3Q7ID0KJm5ic3A7PGJyPiZndDs8YnI+Jmd0OyBBY2NvcmRpbmcgdGhhdCwgcm9vdCBz aG91bGQgbm90IGdldCBhbiBQZXJtaXNzaW9uID0KZGVuaWVkIGVycm9yID8gQnV0IHdoeT88YnI+ Jmd0Ozxicj4mZ3Q7ICZuYnNwOzxicj4mZ3Q7PGJyPiZndDsgQW5kIEkgPQpzZXRlbmZvcmNlPTNE MCAsIGFuZCBzdGlsbCBzaG93IFBlcnNzaW9uIGRlbmllZCBlcnJvci48YnI+Jmd0Ozxicj4mZ3Q7 ID0KJm5ic3A7PGJyPiZndDs8YnI+Jmd0OyBXaGF0PC9zcGFuPj1FMj04MD05OTxzcGFuIGxhbmc9 M0RFTi1VUz5zIHRoZSA9CnJlYXNvbj8gQW5kIGhvdyB0byBzb2x2ZSBpdD88YnI+Jmd0Ozxicj4m Z3Q7ICZuYnNwOzxicj4mZ3Q7PGJyPiZndDsgPQpUaGFuayB5b3UuPGJyPiZndDs8YnI+Jmd0Ozxi cj4mZ3Q7ID0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX188 YnI+Jmd0OyBEZXZlbCBtYWlsaW5nID0KbGlzdDxicj4mZ3Q7PHNwYW4gY2xhc3M9M0RhcHBsZS1j b252ZXJ0ZWQtc3BhY2U+Jm5ic3A7PC9zcGFuPjxhID0KaHJlZj0zRCJtYWlsdG86RGV2ZWxAb3Zp cnQub3JnIj48c3BhbiA9CnN0eWxlPTNEJ2NvbG9yOnB1cnBsZSc+RGV2ZWxAb3ZpcnQub3JnPC9z cGFuPjwvYT48YnI+Jmd0OzxzcGFuID0KY2xhc3M9M0RhcHBsZS1jb252ZXJ0ZWQtc3BhY2U+Jm5i c3A7PC9zcGFuPjxhID0KaHJlZj0zRCJodHRwOi8vbGlzdHMub3ZpcnQub3JnL21haWxtYW4vbGlz dGluZm8vZGV2ZWwiPjxzcGFuID0Kc3R5bGU9M0QnY29sb3I6cHVycGxlJz5odHRwOi8vbGlzdHMu b3ZpcnQub3JnL21haWxtYW4vbGlzdGluZm8vZGV2ZWw8L3NwYT0Kbj48L2E+PG86cD48L286cD48 L3NwYW4+PC9wPjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjxwID0K Y2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gPQpsYW5nPTNERU4tVVM+PG86cD4mbmJzcDs8L286cD48 L3NwYW4+PC9wPjwvZGl2PjwvYm9keT48L2h0bWw+Ci0tLS0tLT1fTmV4dFBhcnRfMDAwXzAwRUJf MDFEMUU3NTcuRjVDRjRFNzAtLQoK --===============1297347777546594840==-- From mzamazal at redhat.com Tue Jul 26 09:46:45 2016 Content-Type: multipart/mixed; boundary="===============1116305646861273525==" MIME-Version: 1.0 From: Milan Zamazal To: devel at ovirt.org Subject: Re: [ovirt-devel] Debug vdsm 4.0.0 report error: libvirt: XML-RPC error : Failed to connect socket to '/var/run/libvirt/libvirt-sock': Permission denied Date: Tue, 26 Jul 2016 15:46:42 +0200 Message-ID: <87shuwv7el.fsf@redhat.com> In-Reply-To: 00ea01d1e714$e7a99d70$b6fcd850$@cncloudsec.com --===============1116305646861273525== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable "lifuqiong" writes: > I know it=E2=80=99s a multithreaded application , and debug vdsm= is a very > difficult job, but without debug, I don=E2=80=99t know which co= de I should > replace or logging, Is there any remote debug solution like ovi= rt > engine? I found that > > I can do remote debug in simple python application , but I didn=E2=80=99t= success yet remote debugging vdsm. = As Michal mentioned, making a breakpoint in Vdsm may break things due to the stopped execution of the given thread. Inserting logging messages to proper places of the code, where you need to get some information about the runtime state, is typically much simpler and good enough solution. If you still want to try more interactive approach and need to access `vdsm' user, you can change the login shell of `vdsm' account to /bin/sh and then use `su - vdsm' from root account. But I don't recommend doing that on any production system. > Now one of our case I want to consider using ovirt as our soluti= on , > we may do little change over ovirt. but as described above, wit= hout > debug , we can hardly understand vdsm clearly and cannot do cor= rectly > code change. > > Is there some good advice ? If you want to study Vdsm runtime execution, read the logs, there's plenty of information there. When you are interested in a particular place in the source code, where you intend to perform the changes, and some information is missing, simply add your own debugging calls there, restart Vdsm and watch the log. I do it all the time and it works. :-) --===============1116305646861273525==-- From fromani at redhat.com Tue Jul 26 10:01:54 2016 Content-Type: multipart/mixed; boundary="===============5086312531067555423==" MIME-Version: 1.0 From: Francesco Romani To: devel at ovirt.org Subject: Re: [ovirt-devel] Debug vdsm 4.0.0 report error: libvirt: XML-RPC error : Failed to connect socket to '/var/run/libvirt/libvirt-sock': Permission denied Date: Tue, 26 Jul 2016 10:01:40 -0400 Message-ID: <516761251.6723292.1469541700613.JavaMail.zimbra@redhat.com> In-Reply-To: 87shuwv7el.fsf@redhat.com --===============5086312531067555423== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable ----- Original Message ----- > From: "Milan Zamazal" > To: "lifuqiong" > Cc: devel(a)ovirt.org > Sent: Tuesday, July 26, 2016 3:46:42 PM > Subject: Re: [ovirt-devel] Debug vdsm 4.0.0 report error: libvirt: XML-RP= C error : Failed to connect socket to > '/var/run/libvirt/libvirt-sock': Permission denied > = > "lifuqiong" writes: > = > > I know it=E2=80=99s a multithreaded application , and debug vd= sm is a very > > difficult job, but without debug, I don=E2=80=99t know which = code I > > should > > replace or logging, Is there any remote debug solution like o= virt > > engine? I found that > > > > I can do remote debug in simple python application , but I didn=E2=80= =99t success > > yet remote debugging vdsm. > = > As Michal mentioned, making a breakpoint in Vdsm may break things due to > the stopped execution of the given thread. Inserting logging messages > to proper places of the code, where you need to get some information > about the runtime state, is typically much simpler and good enough > solution. Additionally, another option is to use our manhole integration: https://pypi.python.org/pypi/manhole this is available on ovirt-4.0.z check manhole_enable in [devel] section. As the name hints, this should not be enabled in production settings. Bests, -- = Francesco Romani RedHat Engineering Virtualization R & D Phone: 8261328 IRC: fromani --===============5086312531067555423==--