From wlbleaboy at 126.com Thu May 2 00:30:08 2013 Content-Type: multipart/mixed; boundary="===============2519634945507061781==" MIME-Version: 1.0 From: leaboy at 126 To: devel at ovirt.org Subject: [Engine-devel] about ovirt-engine-sdk Date: Thu, 02 May 2013 10:53:54 +0800 Message-ID: <000f01ce46e0$490d4c70$db27e550$@com> --===============2519634945507061781== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable =C3=95=C3=A2=C3=8A=C3=87=C3=92=C2=BB=C2=B7=C3=A2 MIME =C5=BE=C3=B1=C3=8A=C5= =93=C2=B5=C3=84=C2=B6=C3=A0=C2=B2=C2=BF=C2=B7=C3=96=C3=93=C3=8A=C5=92=C3=BE= =C2=A1=C2=A3 ------=3D_NextPart_000_0010_01CE4723.57308C70 Content-Type: text/plain; charset=3D"us-ascii" Content-Transfer-Encoding: 7bit Hi,all How can I use overt-engine-sdk in the python environment below python2.7, For example, when I use it in python 2.6.5 like thus: = percy(a)percy-desktop:~/thtf-client$ python --version Python 2.6.5 percy(a)percy-desktop:~/thtf-client$ python Python 2.6.5 (r265:79063, Oct 1 2012, 22:04:36) = [GCC 4.4.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> from ovirtsdk.api import API >>> from ovirtsdk.xml import params >>> api =3D API('http://192.168.1.181', 'admin(a)internal', '111111', None, None, '~/.spicec/ca.crt', None, None, True) Traceback (most recent call last): File "", line 1, in File "ovirtsdk/api.py", line 107, in __init__ url=3D'/api') File "ovirtsdk/infrastructure/proxy.py", line 129, in request last=3Dlast) File "ovirtsdk/infrastructure/proxy.py", line 171, in __doRequest return params.parseString(response_body) if response_body is not None and response_body is not '' \ File "ovirtsdk/xml/params.py", line 21229, in parseString rootObj.build(rootNode) File "ovirtsdk/xml/params.py", line 20304, in build self.buildAttributes(node, node.attrib, []) File "ovirtsdk/xml/params.py", line 20309, in buildAttributes super(API, self).buildAttributes(node, attrs, already_processed) File "ovirtsdk/xml/params.py", line 4160, in buildAttributes value =3D find_attr_value_('xsi:type', node) File "ovirtsdk/xml/params.py", line 316, in find_attr_value_ namespace =3D node.nsmap.get(prefix) AttributeError: nsmap >>> = = = But, when I use it in python 2.7.3, it's ok = leaboy(a)leaboy:~/workspace/thtf-client$ python --version Python 2.7.3 leaboy(a)leaboy:~/workspace/thtf-client$ python Python 2.7.3 (default, Aug 1 2012, 05:16:07) = [GCC 4.6.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> from ovirtsdk.api import API >>> from ovirtsdk.xml import params >>> api =3D API('http://192.168.1.181', 'admin(a)internal', '111111', None, None, '~/.spicec/ca.crt', None, True) >>> = ------=3D_NextPart_000_0010_01CE4723.57308C70 Content-Type: text/html; charset=3D"us-ascii" Content-Transfer-Encoding: quoted-printable

Hi,all

         How can I use overt-engine-sdk in the python environment below =3D python2.7,

For example, when I use it in = =3D python 2.6.5 like thus:

 

percy(a)percy-desktop:~/thtf-client$ python --version

Python =3D 2.6.5

percy(a)percy-desktop:~/thtf-client$ =3D python

Python 2.6.5 (r265:79063, =3D Oct  1 2012, 22:04:36)

[GCC 4.4.3] on =3D linux2

Type "help", "copyright", "credits" or "license" for =3D more information.

>>> from ovirtsdk.api = =3D import API

>>> from ovirtsdk.xml = =3D import params

>>> api =3D3D API('http://192.168.1.181', 'admin(a)internal', '111111', None, None, '~/.spicec/ca.crt', None, None, True)

Traceback (most recent call = =3D last):

  File =3D "<stdin>", line 1, in <module>

  File =3D "ovirtsdk/api.py", line 107, in __init__

    =3D url=3D3D'/api')

  File "ovirtsdk/infrastructure/proxy.py", line 129, in =3D request

    =3D last=3D3Dlast)

  File "ovirtsdk/infrastructure/proxy.py", line 171, in =3D __doRequest

    return params.parseString(response_body) if response_body is not None and response_body is not '' \

  File "ovirtsdk/xml/params.py", line 21229, in =3D parseString

    rootObj.build(rootNode)

  File "ovirtsdk/xml/params.py", line 20304, in =3D build

    self.buildAttributes(node, node.attrib, [])

  File "ovirtsdk/xml/params.py", line 20309, in =3D buildAttributes

    super(API, self).buildAttributes(node, attrs, =3D already_processed)

  File "ovirtsdk/xml/params.py", line 4160, in =3D buildAttributes

    value =3D= 3D find_attr_value_('xsi:type', node)

  File "ovirtsdk/xml/params.py", line 316, in =3D find_attr_value_

    namespace= =3D =3D3D node.nsmap.get(prefix)

AttributeError: =3D nsmap

>>> 

 

 

But, when I use it in python = =3D 2.7.3, it’s ok

 

leaboy(a)leaboy:~/workspace/thtf-client$ python --version

Python =3D 2.7.3

leaboy(a)leaboy:~/workspace/thtf-client$ python

Python 2.7.3 (default, Aug = ; =3D 1 2012, 05:16:07)

[GCC 4.6.3] on =3D linux2

Type "help", "copyright", "credits" or "license" for =3D more information.

>>> from ovirtsdk.api = =3D import API

>>> from ovirtsdk.xml = =3D import params

>>> api =3D3D API('http://192.168.1.181', 'admin(a)internal', '111111', None, None, '~/.spicec/ca.crt', None, True)

>>> 

------=3D_NextPart_000_0010_01CE4723.57308C70-- --===============2519634945507061781== Content-Type: multipart/alternative MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.bin" 1eLKx9K7t+IgTUlNRSC48cq9tcS24LK/t9bTyrz+oaMKCi0tLS0tLT1fTmV4dFBhcnRfMDAwXzAw MTBfMDFDRTQ3MjMuNTczMDhDNzAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOwoJY2hhcnNldD0i dXMtYXNjaWkiCkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKCkhpLGFsbAoKICAgICAg ICAgSG93IGNhbiBJIHVzZSBvdmVydC1lbmdpbmUtc2RrIGluIHRoZSBweXRob24gZW52aXJvbm1l bnQgYmVsb3cKcHl0aG9uMi43LAoKRm9yIGV4YW1wbGUsIHdoZW4gSSB1c2UgaXQgaW4gcHl0aG9u IDIuNi41IGxpa2UgdGh1czoKCiAKCnBlcmN5QHBlcmN5LWRlc2t0b3A6fi90aHRmLWNsaWVudCQg cHl0aG9uIC0tdmVyc2lvbgoKUHl0aG9uIDIuNi41CgpwZXJjeUBwZXJjeS1kZXNrdG9wOn4vdGh0 Zi1jbGllbnQkIHB5dGhvbgoKUHl0aG9uIDIuNi41IChyMjY1Ojc5MDYzLCBPY3QgIDEgMjAxMiwg MjI6MDQ6MzYpIAoKW0dDQyA0LjQuM10gb24gbGludXgyCgpUeXBlICJoZWxwIiwgImNvcHlyaWdo dCIsICJjcmVkaXRzIiBvciAibGljZW5zZSIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCgo+Pj4gZnJv bSBvdmlydHNkay5hcGkgaW1wb3J0IEFQSQoKPj4+IGZyb20gb3ZpcnRzZGsueG1sIGltcG9ydCBw YXJhbXMKCj4+PiBhcGkgPSBBUEkoJ2h0dHA6Ly8xOTIuMTY4LjEuMTgxJywgJ2FkbWluQGludGVy bmFsJywgJzExMTExMScsIE5vbmUsCk5vbmUsICd+Ly5zcGljZWMvY2EuY3J0JywgTm9uZSwgTm9u ZSwgVHJ1ZSkKClRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKCiAgRmlsZSAiPHN0 ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT4KCiAgRmlsZSAib3ZpcnRzZGsvYXBpLnB5IiwgbGlu ZSAxMDcsIGluIF9faW5pdF9fCgogICAgdXJsPScvYXBpJykKCiAgRmlsZSAib3ZpcnRzZGsvaW5m cmFzdHJ1Y3R1cmUvcHJveHkucHkiLCBsaW5lIDEyOSwgaW4gcmVxdWVzdAoKICAgIGxhc3Q9bGFz dCkKCiAgRmlsZSAib3ZpcnRzZGsvaW5mcmFzdHJ1Y3R1cmUvcHJveHkucHkiLCBsaW5lIDE3MSwg aW4gX19kb1JlcXVlc3QKCiAgICByZXR1cm4gcGFyYW1zLnBhcnNlU3RyaW5nKHJlc3BvbnNlX2Jv ZHkpIGlmIHJlc3BvbnNlX2JvZHkgaXMgbm90IE5vbmUKYW5kIHJlc3BvbnNlX2JvZHkgaXMgbm90 ICcnIFwKCiAgRmlsZSAib3ZpcnRzZGsveG1sL3BhcmFtcy5weSIsIGxpbmUgMjEyMjksIGluIHBh cnNlU3RyaW5nCgogICAgcm9vdE9iai5idWlsZChyb290Tm9kZSkKCiAgRmlsZSAib3ZpcnRzZGsv eG1sL3BhcmFtcy5weSIsIGxpbmUgMjAzMDQsIGluIGJ1aWxkCgogICAgc2VsZi5idWlsZEF0dHJp YnV0ZXMobm9kZSwgbm9kZS5hdHRyaWIsIFtdKQoKICBGaWxlICJvdmlydHNkay94bWwvcGFyYW1z LnB5IiwgbGluZSAyMDMwOSwgaW4gYnVpbGRBdHRyaWJ1dGVzCgogICAgc3VwZXIoQVBJLCBzZWxm KS5idWlsZEF0dHJpYnV0ZXMobm9kZSwgYXR0cnMsIGFscmVhZHlfcHJvY2Vzc2VkKQoKICBGaWxl ICJvdmlydHNkay94bWwvcGFyYW1zLnB5IiwgbGluZSA0MTYwLCBpbiBidWlsZEF0dHJpYnV0ZXMK CiAgICB2YWx1ZSA9IGZpbmRfYXR0cl92YWx1ZV8oJ3hzaTp0eXBlJywgbm9kZSkKCiAgRmlsZSAi b3ZpcnRzZGsveG1sL3BhcmFtcy5weSIsIGxpbmUgMzE2LCBpbiBmaW5kX2F0dHJfdmFsdWVfCgog ICAgbmFtZXNwYWNlID0gbm9kZS5uc21hcC5nZXQocHJlZml4KQoKQXR0cmlidXRlRXJyb3I6IG5z bWFwCgo+Pj4gCgogCgogCgpCdXQsIHdoZW4gSSB1c2UgaXQgaW4gcHl0aG9uIDIuNy4zLCBpdCdz IG9rCgogCgpsZWFib3lAbGVhYm95On4vd29ya3NwYWNlL3RodGYtY2xpZW50JCBweXRob24gLS12 ZXJzaW9uCgpQeXRob24gMi43LjMKCmxlYWJveUBsZWFib3k6fi93b3Jrc3BhY2UvdGh0Zi1jbGll bnQkIHB5dGhvbgoKUHl0aG9uIDIuNy4zIChkZWZhdWx0LCBBdWcgIDEgMjAxMiwgMDU6MTY6MDcp IAoKW0dDQyA0LjYuM10gb24gbGludXgyCgpUeXBlICJoZWxwIiwgImNvcHlyaWdodCIsICJjcmVk aXRzIiBvciAibGljZW5zZSIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCgo+Pj4gZnJvbSBvdmlydHNk ay5hcGkgaW1wb3J0IEFQSQoKPj4+IGZyb20gb3ZpcnRzZGsueG1sIGltcG9ydCBwYXJhbXMKCj4+ PiBhcGkgPSBBUEkoJ2h0dHA6Ly8xOTIuMTY4LjEuMTgxJywgJ2FkbWluQGludGVybmFsJywgJzEx MTExMScsIE5vbmUsCk5vbmUsICd+Ly5zcGljZWMvY2EuY3J0JywgTm9uZSwgVHJ1ZSkKCj4+PiAK CgotLS0tLS09X05leHRQYXJ0XzAwMF8wMDEwXzAxQ0U0NzIzLjU3MzA4QzcwCkNvbnRlbnQtVHlw ZTogdGV4dC9odG1sOwoJY2hhcnNldD0idXMtYXNjaWkiCkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rp bmc6IHF1b3RlZC1wcmludGFibGUKCjxodG1sIHhtbG5zOnY9M0QidXJuOnNjaGVtYXMtbWljcm9z b2Z0LWNvbTp2bWwiID0KeG1sbnM6bz0zRCJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmlj ZTpvZmZpY2UiID0KeG1sbnM6dz0zRCJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3 b3JkIiA9CnhtbG5zOm09M0QiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAw NC8xMi9vbW1sIiA9CnhtbG5zPTNEImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgoK PGhlYWQ+CjxNRVRBIEhUVFAtRVFVSVY9M0QiQ29udGVudC1UeXBlIiBDT05URU5UPTNEInRleHQv aHRtbDsgPQpjaGFyc2V0PTNEdXMtYXNjaWkiPgo8bWV0YSBuYW1lPTNER2VuZXJhdG9yIGNvbnRl bnQ9M0QiTWljcm9zb2Z0IFdvcmQgMTIgKGZpbHRlcmVkIG1lZGl1bSkiPgo8c3R5bGU+CjwhLS0K IC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KIEBmb250LWZhY2UKCXtmb250LWZhbWlseTpTaW1TdW47 CglwYW5vc2UtMToyIDEgNiAwIDMgMSAxIDEgMSAxO30KQGZvbnQtZmFjZQoJe2ZvbnQtZmFtaWx5 OiJDYW1icmlhIE1hdGgiOwoJcGFub3NlLTE6MiA0IDUgMyA1IDQgNiAzIDIgNDt9CkBmb250LWZh Y2UKCXtmb250LWZhbWlseTpDYWxpYnJpOwoJcGFub3NlLTE6MiAxNSA1IDIgMiAyIDQgMyAyIDQ7 fQpAZm9udC1mYWNlCgl7Zm9udC1mYW1pbHk6U2ltU3VuOwoJcGFub3NlLTE6MiAxIDYgMCAzIDEg MSAxIDEgMTt9CiAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLwogcC5Nc29Ob3JtYWwsIGxpLk1zb05v cm1hbCwgZGl2Lk1zb05vcm1hbAoJe21hcmdpbjowY207CgltYXJnaW4tYm90dG9tOi4wMDAxcHQ7 Cgl0ZXh0LWFsaWduOmp1c3RpZnk7Cglmb250LXNpemU6MTAuNXB0OwoJZm9udC1mYW1pbHk6IkNh bGlicmkiLCJzYW5zLXNlcmlmIjt9CmE6bGluaywgc3Bhbi5Nc29IeXBlcmxpbmsKCXttc28tc3R5 bGUtcHJpb3JpdHk6OTk7Cgljb2xvcjpibHVlOwoJdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9 CmE6dmlzaXRlZCwgc3Bhbi5Nc29IeXBlcmxpbmtGb2xsb3dlZAoJe21zby1zdHlsZS1wcmlvcml0 eTo5OTsKCWNvbG9yOnB1cnBsZTsKCXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQpwLk1zb0Fj ZXRhdGUsIGxpLk1zb0FjZXRhdGUsIGRpdi5Nc29BY2V0YXRlCgl7bXNvLXN0eWxlLXByaW9yaXR5 Ojk5OwoJbXNvLXN0eWxlLWxpbms6Ilw2Mjc5XDZDRThcNjg0Nlw2NTg3XDY3MkMgQ2hhciI7Cglt YXJnaW46MGNtOwoJbWFyZ2luLWJvdHRvbTouMDAwMXB0OwoJdGV4dC1hbGlnbjpqdXN0aWZ5OwoJ Zm9udC1zaXplOjkuMHB0OwoJZm9udC1mYW1pbHk6IkNhbGlicmkiLCJzYW5zLXNlcmlmIjt9CnNw YW4uQ2hhcgoJe21zby1zdHlsZS1uYW1lOiJcNjI3OVw2Q0U4XDY4NDZcNjU4N1w2NzJDIENoYXIi OwoJbXNvLXN0eWxlLXByaW9yaXR5Ojk5OwoJbXNvLXN0eWxlLWxpbms6XDYyNzlcNkNFOFw2ODQ2 XDY1ODdcNjcyQzt9CnNwYW4uRW1haWxTdHlsZTE5Cgl7bXNvLXN0eWxlLXR5cGU6cGVyc29uYWw7 Cglmb250LWZhbWlseToiQ2FsaWJyaSIsInNhbnMtc2VyaWYiOwoJY29sb3I6d2luZG93dGV4dDt9 CnNwYW4uRW1haWxTdHlsZTIwCgl7bXNvLXN0eWxlLXR5cGU6cGVyc29uYWwtcmVwbHk7Cglmb250 LWZhbWlseToiQ2FsaWJyaSIsInNhbnMtc2VyaWYiOwoJY29sb3I6IzFGNDk3RDt9Ci5Nc29DaHBE ZWZhdWx0Cgl7bXNvLXN0eWxlLXR5cGU6ZXhwb3J0LW9ubHk7Cglmb250LXNpemU6MTAuMHB0O30K QHBhZ2UgU2VjdGlvbjEKCXtzaXplOjYxMi4wcHQgNzkyLjBwdDsKCW1hcmdpbjo3Mi4wcHQgOTAu MHB0IDcyLjBwdCA5MC4wcHQ7fQpkaXYuU2VjdGlvbjEKCXtwYWdlOlNlY3Rpb24xO30KLS0+Cjwv c3R5bGU+CjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgogPG86c2hhcGVkZWZhdWx0cyB2OmV4dD0z RCJlZGl0IiBzcGlkbWF4PTNEIjEwMjYiIC8+CjwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3Rl IG1zbyA5XT48eG1sPgogPG86c2hhcGVsYXlvdXQgdjpleHQ9M0QiZWRpdCI+CiAgPG86aWRtYXAg djpleHQ9M0QiZWRpdCIgZGF0YT0zRCIxIiAvPgogPC9vOnNoYXBlbGF5b3V0PjwveG1sPjwhW2Vu ZGlmXS0tPgo8L2hlYWQ+Cgo8Ym9keSBsYW5nPTNEWkgtQ04gbGluaz0zRGJsdWUgdmxpbms9M0Rw dXJwbGUgPQpzdHlsZT0zRCd0ZXh0LWp1c3RpZnktdHJpbTpwdW5jdHVhdGlvbic+Cgo8ZGl2IGNs YXNzPTNEU2VjdGlvbjE+Cgo8cCBjbGFzcz0zRE1zb05vcm1hbD48c3BhbiBsYW5nPTNERU4tVVM+ SGksYWxsPG86cD48L286cD48L3NwYW4+PC9wPgoKPHAgY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4g PQpsYW5nPTNERU4tVVM+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7CkhvdyBjYW4gSSB1c2Ugb3ZlcnQtZW5naW5lLXNkayBpbiB0aGUgcHl0aG9uIGVudmly b25tZW50IGJlbG93ID0KcHl0aG9uMi43LDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4KCjxwIGNsYXNz PTNETXNvTm9ybWFsPjxzcGFuIGxhbmc9M0RFTi1VUz5Gb3IgZXhhbXBsZSwgd2hlbiBJIHVzZSBp dCBpbiA9CnB5dGhvbiAyLjYuNQpsaWtlIHRodXM6PG86cD48L286cD48L3NwYW4+PC9wPgoKPHAg Y2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gbGFuZz0zREVOLVVTPjxvOnA+Jm5ic3A7PC9vOnA+PC9z cGFuPjwvcD4KCjxwIGNsYXNzPTNETXNvTm9ybWFsPjxzcGFuID0KbGFuZz0zREVOLVVTPnBlcmN5 QHBlcmN5LWRlc2t0b3A6fi90aHRmLWNsaWVudCQgcHl0aG9uCi0tdmVyc2lvbjxvOnA+PC9vOnA+ PC9zcGFuPjwvcD4KCjxwIGNsYXNzPTNETXNvTm9ybWFsPjxzcGFuIGxhbmc9M0RFTi1VUz5QeXRo b24gPQoyLjYuNTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4KCjxwIGNsYXNzPTNETXNvTm9ybWFsPjxz cGFuID0KbGFuZz0zREVOLVVTPnBlcmN5QHBlcmN5LWRlc2t0b3A6fi90aHRmLWNsaWVudCQgPQpw eXRob248bzpwPjwvbzpwPjwvc3Bhbj48L3A+Cgo8cCBjbGFzcz0zRE1zb05vcm1hbD48c3BhbiBs YW5nPTNERU4tVVM+UHl0aG9uIDIuNi41IChyMjY1Ojc5MDYzLCA9Ck9jdCZuYnNwOyAxIDIwMTIs CjIyOjA0OjM2KSA8bzpwPjwvbzpwPjwvc3Bhbj48L3A+Cgo8cCBjbGFzcz0zRE1zb05vcm1hbD48 c3BhbiBsYW5nPTNERU4tVVM+W0dDQyA0LjQuM10gb24gPQpsaW51eDI8bzpwPjwvbzpwPjwvc3Bh bj48L3A+Cgo8cCBjbGFzcz0zRE1zb05vcm1hbD48c3BhbiBsYW5nPTNERU4tVVM+VHlwZSAmcXVv dDtoZWxwJnF1b3Q7LAomcXVvdDtjb3B5cmlnaHQmcXVvdDssICZxdW90O2NyZWRpdHMmcXVvdDsg b3IgJnF1b3Q7bGljZW5zZSZxdW90OyBmb3IgPQptb3JlCmluZm9ybWF0aW9uLjxvOnA+PC9vOnA+ PC9zcGFuPjwvcD4KCjxwIGNsYXNzPTNETXNvTm9ybWFsPjxzcGFuIGxhbmc9M0RFTi1VUz4mZ3Q7 Jmd0OyZndDsgZnJvbSBvdmlydHNkay5hcGkgPQppbXBvcnQgQVBJPG86cD48L286cD48L3NwYW4+ PC9wPgoKPHAgY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gbGFuZz0zREVOLVVTPiZndDsmZ3Q7Jmd0 OyBmcm9tIG92aXJ0c2RrLnhtbCA9CmltcG9ydApwYXJhbXM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+ Cgo8cCBjbGFzcz0zRE1zb05vcm1hbD48c3BhbiBsYW5nPTNERU4tVVM+Jmd0OyZndDsmZ3Q7IGFw aSA9M0QKQVBJKCdodHRwOi8vMTkyLjE2OC4xLjE4MScsICdhZG1pbkBpbnRlcm5hbCcsICcxMTEx MTEnLCBOb25lLCBOb25lLAonfi8uc3BpY2VjL2NhLmNydCcsIE5vbmUsIE5vbmUsIFRydWUpPG86 cD48L286cD48L3NwYW4+PC9wPgoKPHAgY2xhc3M9M0RNc29Ob3JtYWw+PGI+PHNwYW4gbGFuZz0z REVOLVVTPlRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCA9Cmxhc3QpOjxvOnA+PC9vOnA+PC9z cGFuPjwvYj48L3A+Cgo8cCBjbGFzcz0zRE1zb05vcm1hbD48Yj48c3BhbiBsYW5nPTNERU4tVVM+ Jm5ic3A7IEZpbGUgPQomcXVvdDsmbHQ7c3RkaW4mZ3Q7JnF1b3Q7LApsaW5lIDEsIGluICZsdDtt b2R1bGUmZ3Q7PG86cD48L286cD48L3NwYW4+PC9iPjwvcD4KCjxwIGNsYXNzPTNETXNvTm9ybWFs PjxiPjxzcGFuIGxhbmc9M0RFTi1VUz4mbmJzcDsgRmlsZSA9CiZxdW90O292aXJ0c2RrL2FwaS5w eSZxdW90OywKbGluZSAxMDcsIGluIF9faW5pdF9fPG86cD48L286cD48L3NwYW4+PC9iPjwvcD4K CjxwIGNsYXNzPTNETXNvTm9ybWFsPjxiPjxzcGFuIGxhbmc9M0RFTi1VUz4mbmJzcDsmbmJzcDsm bmJzcDsgPQp1cmw9M0QnL2FwaScpPG86cD48L286cD48L3NwYW4+PC9iPjwvcD4KCjxwIGNsYXNz PTNETXNvTm9ybWFsPjxiPjxzcGFuIGxhbmc9M0RFTi1VUz4mbmJzcDsgRmlsZQomcXVvdDtvdmly dHNkay9pbmZyYXN0cnVjdHVyZS9wcm94eS5weSZxdW90OywgbGluZSAxMjksIGluID0KcmVxdWVz dDxvOnA+PC9vOnA+PC9zcGFuPjwvYj48L3A+Cgo8cCBjbGFzcz0zRE1zb05vcm1hbD48Yj48c3Bh biBsYW5nPTNERU4tVVM+Jm5ic3A7Jm5ic3A7Jm5ic3A7ID0KbGFzdD0zRGxhc3QpPG86cD48L286 cD48L3NwYW4+PC9iPjwvcD4KCjxwIGNsYXNzPTNETXNvTm9ybWFsPjxiPjxzcGFuIGxhbmc9M0RF Ti1VUz4mbmJzcDsgRmlsZQomcXVvdDtvdmlydHNkay9pbmZyYXN0cnVjdHVyZS9wcm94eS5weSZx dW90OywgbGluZSAxNzEsIGluID0KX19kb1JlcXVlc3Q8bzpwPjwvbzpwPjwvc3Bhbj48L2I+PC9w PgoKPHAgY2xhc3M9M0RNc29Ob3JtYWw+PGI+PHNwYW4gbGFuZz0zREVOLVVTPiZuYnNwOyZuYnNw OyZuYnNwOyByZXR1cm4KcGFyYW1zLnBhcnNlU3RyaW5nKHJlc3BvbnNlX2JvZHkpIGlmIHJlc3Bv bnNlX2JvZHkgaXMgbm90IE5vbmUgYW5kCnJlc3BvbnNlX2JvZHkgaXMgbm90ICcnIFw8bzpwPjwv bzpwPjwvc3Bhbj48L2I+PC9wPgoKPHAgY2xhc3M9M0RNc29Ob3JtYWw+PGI+PHNwYW4gbGFuZz0z REVOLVVTPiZuYnNwOyBGaWxlCiZxdW90O292aXJ0c2RrL3htbC9wYXJhbXMucHkmcXVvdDssIGxp bmUgMjEyMjksIGluID0KcGFyc2VTdHJpbmc8bzpwPjwvbzpwPjwvc3Bhbj48L2I+PC9wPgoKPHAg Y2xhc3M9M0RNc29Ob3JtYWw+PGI+PHNwYW4gbGFuZz0zREVOLVVTPiZuYnNwOyZuYnNwOyZuYnNw Owpyb290T2JqLmJ1aWxkKHJvb3ROb2RlKTxvOnA+PC9vOnA+PC9zcGFuPjwvYj48L3A+Cgo8cCBj bGFzcz0zRE1zb05vcm1hbD48Yj48c3BhbiBsYW5nPTNERU4tVVM+Jm5ic3A7IEZpbGUKJnF1b3Q7 b3ZpcnRzZGsveG1sL3BhcmFtcy5weSZxdW90OywgbGluZSAyMDMwNCwgaW4gPQpidWlsZDxvOnA+ PC9vOnA+PC9zcGFuPjwvYj48L3A+Cgo8cCBjbGFzcz0zRE1zb05vcm1hbD48Yj48c3BhbiBsYW5n PTNERU4tVVM+Jm5ic3A7Jm5ic3A7Jm5ic3A7CnNlbGYuYnVpbGRBdHRyaWJ1dGVzKG5vZGUsIG5v ZGUuYXR0cmliLCBbXSk8bzpwPjwvbzpwPjwvc3Bhbj48L2I+PC9wPgoKPHAgY2xhc3M9M0RNc29O b3JtYWw+PGI+PHNwYW4gbGFuZz0zREVOLVVTPiZuYnNwOyBGaWxlCiZxdW90O292aXJ0c2RrL3ht bC9wYXJhbXMucHkmcXVvdDssIGxpbmUgMjAzMDksIGluID0KYnVpbGRBdHRyaWJ1dGVzPG86cD48 L286cD48L3NwYW4+PC9iPjwvcD4KCjxwIGNsYXNzPTNETXNvTm9ybWFsPjxiPjxzcGFuIGxhbmc9 M0RFTi1VUz4mbmJzcDsmbmJzcDsmbmJzcDsgc3VwZXIoQVBJLApzZWxmKS5idWlsZEF0dHJpYnV0 ZXMobm9kZSwgYXR0cnMsID0KYWxyZWFkeV9wcm9jZXNzZWQpPG86cD48L286cD48L3NwYW4+PC9i PjwvcD4KCjxwIGNsYXNzPTNETXNvTm9ybWFsPjxiPjxzcGFuIGxhbmc9M0RFTi1VUz4mbmJzcDsg RmlsZQomcXVvdDtvdmlydHNkay94bWwvcGFyYW1zLnB5JnF1b3Q7LCBsaW5lIDQxNjAsIGluID0K YnVpbGRBdHRyaWJ1dGVzPG86cD48L286cD48L3NwYW4+PC9iPjwvcD4KCjxwIGNsYXNzPTNETXNv Tm9ybWFsPjxiPjxzcGFuIGxhbmc9M0RFTi1VUz4mbmJzcDsmbmJzcDsmbmJzcDsgdmFsdWUgPTNE CmZpbmRfYXR0cl92YWx1ZV8oJ3hzaTp0eXBlJywgbm9kZSk8bzpwPjwvbzpwPjwvc3Bhbj48L2I+ PC9wPgoKPHAgY2xhc3M9M0RNc29Ob3JtYWw+PGI+PHNwYW4gbGFuZz0zREVOLVVTPiZuYnNwOyBG aWxlCiZxdW90O292aXJ0c2RrL3htbC9wYXJhbXMucHkmcXVvdDssIGxpbmUgMzE2LCBpbiA9CmZp bmRfYXR0cl92YWx1ZV88bzpwPjwvbzpwPjwvc3Bhbj48L2I+PC9wPgoKPHAgY2xhc3M9M0RNc29O b3JtYWw+PGI+PHNwYW4gbGFuZz0zREVOLVVTPiZuYnNwOyZuYnNwOyZuYnNwOyBuYW1lc3BhY2Ug PQo9M0QKbm9kZS5uc21hcC5nZXQocHJlZml4KTxvOnA+PC9vOnA+PC9zcGFuPjwvYj48L3A+Cgo8 cCBjbGFzcz0zRE1zb05vcm1hbD48Yj48c3BhbiBsYW5nPTNERU4tVVM+QXR0cmlidXRlRXJyb3I6 ID0KbnNtYXA8L3NwYW4+PC9iPjxzcGFuCmxhbmc9M0RFTi1VUz48bzpwPjwvbzpwPjwvc3Bhbj48 L3A+Cgo8cCBjbGFzcz0zRE1zb05vcm1hbD48c3BhbiA9Cmxhbmc9M0RFTi1VUz4mZ3Q7Jmd0OyZn dDs8bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+Cgo8cCBjbGFzcz0zRE1zb05vcm1hbD48c3Bh biBsYW5nPTNERU4tVVM+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPgoKPHAgY2xhc3M9M0RN c29Ob3JtYWw+PHNwYW4gbGFuZz0zREVOLVVTPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4K CjxwIGNsYXNzPTNETXNvTm9ybWFsPjxzcGFuIGxhbmc9M0RFTi1VUz5CdXQsIHdoZW4gSSB1c2Ug aXQgaW4gcHl0aG9uID0KMi43LjMsIGl0JiM4MjE3O3Mgb2s8bzpwPjwvbzpwPjwvc3Bhbj48L3A+ Cgo8cCBjbGFzcz0zRE1zb05vcm1hbD48c3BhbiBsYW5nPTNERU4tVVM+PG86cD4mbmJzcDs8L286 cD48L3NwYW4+PC9wPgoKPHAgY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gPQpsYW5nPTNERU4tVVM+ bGVhYm95QGxlYWJveTp+L3dvcmtzcGFjZS90aHRmLWNsaWVudCQKcHl0aG9uIC0tdmVyc2lvbjxv OnA+PC9vOnA+PC9zcGFuPjwvcD4KCjxwIGNsYXNzPTNETXNvTm9ybWFsPjxzcGFuIGxhbmc9M0RF Ti1VUz5QeXRob24gPQoyLjcuMzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4KCjxwIGNsYXNzPTNETXNv Tm9ybWFsPjxzcGFuID0KbGFuZz0zREVOLVVTPmxlYWJveUBsZWFib3k6fi93b3Jrc3BhY2UvdGh0 Zi1jbGllbnQkCnB5dGhvbjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4KCjxwIGNsYXNzPTNETXNvTm9y bWFsPjxzcGFuIGxhbmc9M0RFTi1VUz5QeXRob24gMi43LjMgKGRlZmF1bHQsIEF1ZyZuYnNwOyA9 CjEgMjAxMiwKMDU6MTY6MDcpIDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4KCjxwIGNsYXNzPTNETXNv Tm9ybWFsPjxzcGFuIGxhbmc9M0RFTi1VUz5bR0NDIDQuNi4zXSBvbiA9CmxpbnV4MjxvOnA+PC9v OnA+PC9zcGFuPjwvcD4KCjxwIGNsYXNzPTNETXNvTm9ybWFsPjxzcGFuIGxhbmc9M0RFTi1VUz5U eXBlICZxdW90O2hlbHAmcXVvdDssCiZxdW90O2NvcHlyaWdodCZxdW90OywgJnF1b3Q7Y3JlZGl0 cyZxdW90OyBvciAmcXVvdDtsaWNlbnNlJnF1b3Q7IGZvciA9Cm1vcmUKaW5mb3JtYXRpb24uPG86 cD48L286cD48L3NwYW4+PC9wPgoKPHAgY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gbGFuZz0zREVO LVVTPiZndDsmZ3Q7Jmd0OyBmcm9tIG92aXJ0c2RrLmFwaSA9CmltcG9ydCBBUEk8bzpwPjwvbzpw Pjwvc3Bhbj48L3A+Cgo8cCBjbGFzcz0zRE1zb05vcm1hbD48c3BhbiBsYW5nPTNERU4tVVM+Jmd0 OyZndDsmZ3Q7IGZyb20gb3ZpcnRzZGsueG1sID0KaW1wb3J0CnBhcmFtczxvOnA+PC9vOnA+PC9z cGFuPjwvcD4KCjxwIGNsYXNzPTNETXNvTm9ybWFsPjxzcGFuIGxhbmc9M0RFTi1VUz4mZ3Q7Jmd0 OyZndDsgYXBpID0zRApBUEkoJ2h0dHA6Ly8xOTIuMTY4LjEuMTgxJywgJ2FkbWluQGludGVybmFs JywgJzExMTExMScsIE5vbmUsIE5vbmUsCid+Ly5zcGljZWMvY2EuY3J0JywgTm9uZSwgVHJ1ZSk8 bzpwPjwvbzpwPjwvc3Bhbj48L3A+Cgo8cCBjbGFzcz0zRE1zb05vcm1hbD48c3BhbiA9Cmxhbmc9 M0RFTi1VUz4mZ3Q7Jmd0OyZndDs8bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+Cgo8L2Rpdj4K CjwvYm9keT4KCjwvaHRtbD4KCi0tLS0tLT1fTmV4dFBhcnRfMDAwXzAwMTBfMDFDRTQ3MjMuNTcz MDhDNzAtLQoKCg== --===============2519634945507061781==--