From blanchet at abes.fr Thu Mar 9 10:39:40 2017 Content-Type: multipart/mixed; boundary="===============3643326409701586998==" MIME-Version: 1.0 From: =?utf-8?q?Nathana=C3=ABl_Blanchet_=3Cblanchet_at_abes=2Efr=3E?= To: users at ovirt.org Subject: Re: [ovirt-users] oVirt VM backup and restore Date: Thu, 09 Mar 2017 11:39:35 +0100 Message-ID: <2c00e42b-1a6f-b718-2d3b-7ccc8df7cc78@abes.fr> In-Reply-To: CAG2kNCy-F6KF0ckEbFqWuXYQkroMZRVigPHvuhsrK=EvBBOTpQ@mail.gmail.com --===============3643326409701586998== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable This is a multi-part message in MIME format. --------------DF760123B34BA11C0A26BA44 Content-Type: text/plain; charset=3Dutf-8; format=3Dflowed Content-Transfer-Encoding: quoted-printable Le 09/03/2017 =3DC3=3DA0 10:25, Gianluca Cecchi a =3DC3=3DA9crit : > On Wed, Mar 8, 2017 at 6:05 PM, Gianluca Cecchi=3D20 > > wrote: > > > > NOTE: during the snapshot creation I see in web admin console the > VM in paused state and also not responsive in both console and ssh > session. > After a couple of seconds it comes back and as a confirmation I > see this in its messages: > > Mar 8 17:38:57 T-ORACLE73 chronyd[616]: System clock wrong by > 19.077230 seconds, adjustment started > > Is this expected? > > > > > Possibly the default changed at some point in time, so that now it=3D20 > saves memory and so this implies pause of VM Saving memory is essential in some ap=3DC3=3DA0plications like DB, so you w= on=3D 't=3D20 bypass vm pauses for such a stuff > In the mean time I verified changing backup.py this way solves the=3D20 > problem (the 3.6 api deprecation still in place... ;-): > > $ diff backup.py backup.py.orig > 123c123 > <=3D20 > vm.snapshots.add(params.Snapshot(description=3D3Dconfig.get_snapshot_desc= =3D ription(),=3D20 > vm=3D3Dvm,persist_memorystate=3D3DFalse)) > --- > >=3D20 > vm.snapshots.add(params.Snapshot(description=3D3Dconfig.get_snapshot_desc= =3D ription(),=3D20 > vm=3D3Dvm)) > > The snapshot doesn't include memory and no problem at VM OS side now > > Tested also getting the parameter from config file > > Modifications needed in this case: > > 1) > $ diff backup.py backup.py.orig > 123c123 > <=3D20 > vm.snapshots.add(params.Snapshot(description=3D3Dconfig.get_snapshot_desc= =3D ription(),=3D20 > vm=3D3Dvm,persist_memorystate=3D3Dconfig.get_persist_memorystate())) > --- > >=3D20 > vm.snapshots.add(params.Snapshot(description=3D3Dconfig.get_snapshot_desc= =3D ription(),=3D20 > vm=3D3Dvm)) > > > 2) > $ diff config.py config.py.orig > 34d33 > < self.__persist_memorystate =3D3D=3D20 > config_parser.getboolean(section, "persist_memorystate") > 113,116d111 > < > < > < def get_persist_memorystate(self): > < return self.__persist_memorystate > > > And in config file called add: > > # Save Memory in snapshot > persist_memorystate=3D3DFalse > > It could be further improved if one wants to differentiate save memory=3D= 20 > for some VMs and not for other ones.... > > HIH other ones, > Gianluca --=3D20 Nathana=3DC3=3DABl Blanchet Supervision r=3DC3=3DA9seau P=3DC3=3DB4le Infrastrutures Informatiques 227 avenue Professeur-Jean-Louis-Viala 34193 MONTPELLIER CEDEX 5 =3D09 T=3DC3=3DA9l. 33 (0)4 67 54 84 55 Fax 33 (0)4 67 54 84 14 blanchet(a)abes.fr --------------DF760123B34BA11C0A26BA44 Content-Type: text/html; charset=3Dutf-8 Content-Transfer-Encoding: quoted-printable



Le 09/03/2017 =3DC3=3DA0 10:25, Gianlu= ca C=3D ecchi a =3DC3=3DA9crit=3DC2=3DA0:
On Wed, Mar 8, 2017 at 6:05 PM, Gianluca Cecchi <gianluca.cecchi(a)gmail.com> wrote:


NOTE: during the snapshot creation I see in web admin console the VM in paused state and also not responsive in both console and ssh session.
After a couple of seconds it comes back and as a confirmation I see this in its messages:

Mar =3DC2=3DA08 17:38:57 T-ORACLE73 chronyd[616]: = Sy=3D stem clock wrong by 19.077230 seconds, adjustment started

Is this expected?




Possibly the default changed at some point in time, so that now it saves memory and so this implies pause of VM
Saving memory is essential in some ap=3DC3=3DA0plications like DB, so y= ou won't bypass vm pauses for such a stuff
In the mean time I verified changing backup.py this way solves the problem (the 3.6 api deprecation still in place... ;-):

$ diff backup.py backup.py.orig=3DC2= =3DA0=3D
123c123
< =3DC2=3DA0 =3DC2=3DA0 =3DC2=3DA= 0 =3DC2=3DA0 =3DC2=3D =3DA0 =3DC2=3DA0 =3DC2=3DA0 =3DC2=3DA0 =3DC2=3DA0 =3DC2=3DA0 vm.snapshots.add(params.Snapshot(description=3D3Dconfig.get_snapshot_descri= =3D ption(), vm=3D3Dvm,persist_memorystate=3D3DFalse))
---
> =3DC2=3DA0 =3DC2=3DA0 =3DC2=3DA= 0 =3DC2=3DA0 =3DC2=3D =3DA0 =3DC2=3DA0 =3DC2=3DA0 =3DC2=3DA0 =3DC2=3DA0 =3DC2=3DA0 vm.snapshots.add(params.Snapshot(description=3D3Dconfig.get_snapshot_descri= =3D ption(), vm=3D3Dvm))

The snapshot doesn't include memory and no problem at VM OS side now

Tested also getting the parameter from config file

Modifications needed in this case:

1)
$ diff backup.py backup.py.orig=3DC2= =3DA0=3D
123c123
< =3DC2=3DA0 =3DC2=3DA0 =3DC2= =3DA0 =3DC2=3DA0 =3DC2=3D =3DA0 =3DC2=3DA0 =3DC2=3DA0 =3DC2=3DA0 =3DC2=3DA0 =3DC2=3DA0 vm.snapshots.add(params.Snapshot(description=3D3Dconfig.get_snapshot_descri= =3D ption(), vm=3D3Dvm,persist_memorystate=3D3Dconfig.get_persist_memorystate()))
---
> =3DC2=3DA0 =3DC2=3DA0 =3DC2= =3DA0 =3DC2=3DA0 =3DC2=3D =3DA0 =3DC2=3DA0 =3DC2=3DA0 =3DC2=3DA0 =3DC2=3DA0 =3DC2=3DA0 vm.snapshots.add(params.Snapshot(description=3D3Dconfig.get_snapshot_descri= =3D ption(), vm=3D3Dvm))


2)
$ diff config.py config.py.orig=3DC2=3DA0
34d33
< =3DC2=3DA0 =3DC2=3DA0 =3DC2=3DA0 =3DC2=3DA0 =3DC2= =3DA0 =3DC2=3DA0 self.__=3D persist_memorystate =3D3D config_parser.getboolean(section, "persist_memorystate")<= =3D /div>
113,116d111
<=3DC2=3DA0
<=3DC2=3DA0
< =3DC2=3DA0 =3DC2=3DA0 def get_persist_memorystate(s= elf):<=3D /div>
< =3DC2=3DA0 =3DC2=3DA0 =3DC2=3DA0 =3DC2=3DA0 return = self.__persist=3D _memorystate


And in config file called add:

# Save Memory in snapshot
persist_memorystate=3D3DFalse

It could be further improved if one wants to differentiate save memory for some VMs and not for other ones....

HIH other ones,
Gianluca

--=3D20
Nathana=3DC3=3DABl Blanchet

Supervision r=3DC3=3DA9seau
P=3DC3=3DB4le Infrastrutures Informatiques
227 avenue Professeur-Jean-Louis-Viala
34193 MONTPELLIER CEDEX 5 =3D09
T=3DC3=3DA9l. 33 (0)4 67 54 84 55
Fax  33 (0)4 67 54 84 14
bl=3D
anchet(a)abes.fr 
--------------DF760123B34BA11C0A26BA44-- --===============3643326409701586998== Content-Type: multipart/alternative MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.bin" VGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KLS0tLS0tLS0tLS0t LS1ERjc2MDEyM0IzNEJBMTFDMEEyNkJBNDQKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFy c2V0PXV0Zi04OyBmb3JtYXQ9Zmxvd2VkCkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3Rl ZC1wcmludGFibGUKCgoKTGUgMDkvMDMvMjAxNyA9QzM9QTAgMTA6MjUsIEdpYW5sdWNhIENlY2No aSBhID1DMz1BOWNyaXQgOgo+IE9uIFdlZCwgTWFyIDgsIDIwMTcgYXQgNjowNSBQTSwgR2lhbmx1 Y2EgQ2VjY2hpPTIwCj4gPGdpYW5sdWNhLmNlY2NoaUBnbWFpbC5jb20gPG1haWx0bzpnaWFubHVj YS5jZWNjaGlAZ21haWwuY29tPj4gd3JvdGU6Cj4KPgo+Cj4gICAgIE5PVEU6IGR1cmluZyB0aGUg c25hcHNob3QgY3JlYXRpb24gSSBzZWUgaW4gd2ViIGFkbWluIGNvbnNvbGUgdGhlCj4gICAgIFZN IGluIHBhdXNlZCBzdGF0ZSBhbmQgYWxzbyBub3QgcmVzcG9uc2l2ZSBpbiBib3RoIGNvbnNvbGUg YW5kIHNzaAo+ICAgICBzZXNzaW9uLgo+ICAgICBBZnRlciBhIGNvdXBsZSBvZiBzZWNvbmRzIGl0 IGNvbWVzIGJhY2sgYW5kIGFzIGEgY29uZmlybWF0aW9uIEkKPiAgICAgc2VlIHRoaXMgaW4gaXRz IG1lc3NhZ2VzOgo+Cj4gICAgIE1hciAgOCAxNzozODo1NyBULU9SQUNMRTczIGNocm9ueWRbNjE2 XTogU3lzdGVtIGNsb2NrIHdyb25nIGJ5Cj4gICAgIDE5LjA3NzIzMCBzZWNvbmRzLCBhZGp1c3Rt ZW50IHN0YXJ0ZWQKPgo+ICAgICBJcyB0aGlzIGV4cGVjdGVkPwo+Cj4KPgo+Cj4gUG9zc2libHkg dGhlIGRlZmF1bHQgY2hhbmdlZCBhdCBzb21lIHBvaW50IGluIHRpbWUsIHNvIHRoYXQgbm93IGl0 PTIwCj4gc2F2ZXMgbWVtb3J5IGFuZCBzbyB0aGlzIGltcGxpZXMgcGF1c2Ugb2YgVk0KU2F2aW5n IG1lbW9yeSBpcyBlc3NlbnRpYWwgaW4gc29tZSBhcD1DMz1BMHBsaWNhdGlvbnMgbGlrZSBEQiwg c28geW91IHdvbj0KJ3Q9MjAKYnlwYXNzIHZtIHBhdXNlcyBmb3Igc3VjaCBhIHN0dWZmCj4gSW4g dGhlIG1lYW4gdGltZSBJIHZlcmlmaWVkIGNoYW5naW5nIGJhY2t1cC5weSB0aGlzIHdheSBzb2x2 ZXMgdGhlPTIwCj4gcHJvYmxlbSAodGhlIDMuNiBhcGkgZGVwcmVjYXRpb24gc3RpbGwgaW4gcGxh Y2UuLi4gOy0pOgo+Cj4gJCBkaWZmIGJhY2t1cC5weSBiYWNrdXAucHkub3JpZwo+IDEyM2MxMjMK PiA8PTIwCj4gdm0uc25hcHNob3RzLmFkZChwYXJhbXMuU25hcHNob3QoZGVzY3JpcHRpb249M0Rj b25maWcuZ2V0X3NuYXBzaG90X2Rlc2M9CnJpcHRpb24oKSw9MjAKPiB2bT0zRHZtLHBlcnNpc3Rf bWVtb3J5c3RhdGU9M0RGYWxzZSkpCj4gLS0tCj4gPj0yMAo+IHZtLnNuYXBzaG90cy5hZGQocGFy YW1zLlNuYXBzaG90KGRlc2NyaXB0aW9uPTNEY29uZmlnLmdldF9zbmFwc2hvdF9kZXNjPQpyaXB0 aW9uKCksPTIwCj4gdm09M0R2bSkpCj4KPiBUaGUgc25hcHNob3QgZG9lc24ndCBpbmNsdWRlIG1l bW9yeSBhbmQgbm8gcHJvYmxlbSBhdCBWTSBPUyBzaWRlIG5vdwo+Cj4gVGVzdGVkIGFsc28gZ2V0 dGluZyB0aGUgcGFyYW1ldGVyIGZyb20gY29uZmlnIGZpbGUKPgo+IE1vZGlmaWNhdGlvbnMgbmVl ZGVkIGluIHRoaXMgY2FzZToKPgo+IDEpCj4gJCBkaWZmIGJhY2t1cC5weSBiYWNrdXAucHkub3Jp Zwo+IDEyM2MxMjMKPiA8PTIwCj4gdm0uc25hcHNob3RzLmFkZChwYXJhbXMuU25hcHNob3QoZGVz Y3JpcHRpb249M0Rjb25maWcuZ2V0X3NuYXBzaG90X2Rlc2M9CnJpcHRpb24oKSw9MjAKPiB2bT0z RHZtLHBlcnNpc3RfbWVtb3J5c3RhdGU9M0Rjb25maWcuZ2V0X3BlcnNpc3RfbWVtb3J5c3RhdGUo KSkpCj4gLS0tCj4gPj0yMAo+IHZtLnNuYXBzaG90cy5hZGQocGFyYW1zLlNuYXBzaG90KGRlc2Ny aXB0aW9uPTNEY29uZmlnLmdldF9zbmFwc2hvdF9kZXNjPQpyaXB0aW9uKCksPTIwCj4gdm09M0R2 bSkpCj4KPgo+IDIpCj4gJCBkaWZmIGNvbmZpZy5weSBjb25maWcucHkub3JpZwo+IDM0ZDMzCj4g PCAgICAgICAgICAgICBzZWxmLl9fcGVyc2lzdF9tZW1vcnlzdGF0ZSA9M0Q9MjAKPiBjb25maWdf cGFyc2VyLmdldGJvb2xlYW4oc2VjdGlvbiwgInBlcnNpc3RfbWVtb3J5c3RhdGUiKQo+IDExMywx MTZkMTExCj4gPAo+IDwKPiA8ICAgICBkZWYgZ2V0X3BlcnNpc3RfbWVtb3J5c3RhdGUoc2VsZik6 Cj4gPCAgICAgICAgIHJldHVybiBzZWxmLl9fcGVyc2lzdF9tZW1vcnlzdGF0ZQo+Cj4KPiBBbmQg aW4gY29uZmlnIGZpbGUgY2FsbGVkIGFkZDoKPgo+ICMgU2F2ZSBNZW1vcnkgaW4gc25hcHNob3QK PiBwZXJzaXN0X21lbW9yeXN0YXRlPTNERmFsc2UKPgo+IEl0IGNvdWxkIGJlIGZ1cnRoZXIgaW1w cm92ZWQgaWYgb25lIHdhbnRzIHRvIGRpZmZlcmVudGlhdGUgc2F2ZSBtZW1vcnk9MjAKPiBmb3Ig c29tZSBWTXMgYW5kIG5vdCBmb3Igb3RoZXIgb25lcy4uLi4KPgo+IEhJSCBvdGhlciBvbmVzLAo+ IEdpYW5sdWNhCgotLT0yMApOYXRoYW5hPUMzPUFCbCBCbGFuY2hldAoKU3VwZXJ2aXNpb24gcj1D Mz1BOXNlYXUKUD1DMz1CNGxlIEluZnJhc3RydXR1cmVzIEluZm9ybWF0aXF1ZXMKMjI3IGF2ZW51 ZSBQcm9mZXNzZXVyLUplYW4tTG91aXMtVmlhbGEKMzQxOTMgTU9OVFBFTExJRVIgQ0VERVggNSA9 MDkKVD1DMz1BOWwuIDMzICgwKTQgNjcgNTQgODQgNTUKRmF4ICAzMyAoMCk0IDY3IDU0IDg0IDE0 CmJsYW5jaGV0QGFiZXMuZnIKCgotLS0tLS0tLS0tLS0tLURGNzYwMTIzQjM0QkExMUMwQTI2QkE0 NApDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD11dGYtOApDb250ZW50LVRyYW5zZmVy LUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlCgo8aHRtbD4KICA8aGVhZD4KICAgIDxtZXRhIGNv bnRlbnQ9M0QidGV4dC9odG1sOyBjaGFyc2V0PTNEdXRmLTgiIGh0dHAtZXF1aXY9M0QiQ29udGVu dC1UeT0KcGUiPgogIDwvaGVhZD4KICA8Ym9keSBiZ2NvbG9yPTNEIiNGRkZGRkYiIHRleHQ9M0Qi IzAwMDAwMCI+CiAgICA8cD48YnI+CiAgICA8L3A+CiAgICA8YnI+CiAgICA8ZGl2IGNsYXNzPTNE Im1vei1jaXRlLXByZWZpeCI+TGUgMDkvMDMvMjAxNyA9QzM9QTAgMTA6MjUsIEdpYW5sdWNhIEM9 CmVjY2hpCiAgICAgIGEgPUMzPUE5Y3JpdD1DMj1BMDo8YnI+CiAgICA8L2Rpdj4KICAgIDxibG9j a3F1b3RlCmNpdGU9M0QibWlkOkNBRzJrTkN5LUY2S0YwY2tFYkZxV3VYWVFrcm9NWlJWaWdQSHZ1 aHNySz0zREV2QkJPVHBRQG1haWwuZ209CmFpbC5jb20iCiAgICAgIHR5cGU9M0QiY2l0ZSI+CiAg ICAgIDxkaXYgZGlyPTNEImx0ciI+CiAgICAgICAgPGRpdiBjbGFzcz0zRCJnbWFpbF9leHRyYSI+ CiAgICAgICAgICA8ZGl2IGNsYXNzPTNEImdtYWlsX3F1b3RlIj5PbiBXZWQsIE1hciA4LCAyMDE3 IGF0IDY6MDUgUE0sCiAgICAgICAgICAgIEdpYW5sdWNhIENlY2NoaSA8c3BhbiBkaXI9M0QibHRy Ij4mbHQ7PGEKICAgICAgICAgICAgICAgIG1vei1kby1ub3Qtc2VuZD0zRCJ0cnVlIgogICAgICAg ICAgICAgICAgaHJlZj0zRCJtYWlsdG86Z2lhbmx1Y2EuY2VjY2hpQGdtYWlsLmNvbSIgdGFyZ2V0 PTNEIl9ibGFuPQprIj5naWFubHVjYS5jZWNjaGlAZ21haWwuY29tPC9hPiZndDs8L3NwYW4+CiAg ICAgICAgICAgIHdyb3RlOjxicj4KICAgICAgICAgICAgPGJsb2NrcXVvdGUgY2xhc3M9M0QiZ21h aWxfcXVvdGUiIHN0eWxlPTNEIm1hcmdpbjowcHggMHB4IDBweAogICAgICAgICAgICAgIDAuOGV4 O2JvcmRlci1sZWZ0OjFweCBzb2xpZAogICAgICAgICAgICAgIHJnYigyMDQsMjA0LDIwNCk7cGFk ZGluZy1sZWZ0OjFleCI+CiAgICAgICAgICAgICAgPGRpdiBkaXI9M0QibHRyIj4KICAgICAgICAg ICAgICAgIDxkaXYgY2xhc3M9M0QiZ21haWxfZXh0cmEiPgogICAgICAgICAgICAgICAgICA8ZGl2 IGNsYXNzPTNEImdtYWlsX3F1b3RlIj48YnI+CiAgICAgICAgICAgICAgICAgICAgPGRpdj48YnI+ CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdj5OT1RF OiBkdXJpbmcgdGhlIHNuYXBzaG90IGNyZWF0aW9uIEkgc2VlIGluIHdlYgogICAgICAgICAgICAg ICAgICAgICAgYWRtaW4gY29uc29sZSB0aGUgVk0gaW4gcGF1c2VkIHN0YXRlIGFuZCBhbHNvIG5v dAogICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2l2ZSBpbiBib3RoIGNvbnNvbGUgYW5kIHNz aCBzZXNzaW9uLjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXY+QWZ0ZXIgYSBjb3VwbGUg b2Ygc2Vjb25kcyBpdCBjb21lcyBiYWNrIGFuZCBhcwogICAgICAgICAgICAgICAgICAgICAgYSBj b25maXJtYXRpb24gSSBzZWUgdGhpcyBpbiBpdHMgbWVzc2FnZXM6PC9kaXY+CiAgICAgICAgICAg ICAgICAgICAgPGRpdj48YnI+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAg ICAgICAgICAgPGRpdj5NYXIgPUMyPUEwOCAxNzozODo1NyBULU9SQUNMRTczIGNocm9ueWRbNjE2 XTogU3k9CnN0ZW0KICAgICAgICAgICAgICAgICAgICAgIGNsb2NrIHdyb25nIGJ5IDE5LjA3NzIz MCBzZWNvbmRzLCBhZGp1c3RtZW50CiAgICAgICAgICAgICAgICAgICAgICBzdGFydGVkPGJyPgog ICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXY+PGJyPgog ICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXY+SXMgdGhp cyBleHBlY3RlZD88L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2Pjxicj4KICAgICAgICAg ICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0zRCJnbWFp bC1IT0VuWmIiPjxmb250IGNvbG9yPTNEIiM4ODg4ODgiPgogICAgICAgICAgICAgICAgICAgICAg ICA8ZGl2Pjxicj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAg ICAgICAgICAgIDxkaXY+PGJyPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAg ICAgICAgICAgICAgICAgIDwvZm9udD48L3NwYW4+PC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rp dj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9ibG9ja3F1b3RlPgogICAgICAg ICAgPC9kaXY+CiAgICAgICAgICA8YnI+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFz cz0zRCJnbWFpbF9leHRyYSI+UG9zc2libHkgdGhlIGRlZmF1bHQgY2hhbmdlZCBhdCBzb21lCiAg ICAgICAgICBwb2ludCBpbiB0aW1lLCBzbyB0aGF0IG5vdyBpdCBzYXZlcyBtZW1vcnkgYW5kIHNv IHRoaXMgaW1wbGllcwogICAgICAgICAgcGF1c2Ugb2YgVk08L2Rpdj4KICAgICAgPC9kaXY+CiAg ICA8L2Jsb2NrcXVvdGU+CiAgICBTYXZpbmcgbWVtb3J5IGlzIGVzc2VudGlhbCBpbiBzb21lIGFw PUMzPUEwcGxpY2F0aW9ucyBsaWtlIERCLCBzbyB5b3UKICAgIHdvbid0IGJ5cGFzcyB2bSBwYXVz ZXMgZm9yIHN1Y2ggYSBzdHVmZjxicj4KICAgIDxibG9ja3F1b3RlCmNpdGU9M0QibWlkOkNBRzJr TkN5LUY2S0YwY2tFYkZxV3VYWVFrcm9NWlJWaWdQSHZ1aHNySz0zREV2QkJPVHBRQG1haWwuZ209 CmFpbC5jb20iCiAgICAgIHR5cGU9M0QiY2l0ZSI+CiAgICAgIDxkaXYgZGlyPTNEImx0ciI+CiAg ICAgICAgPGRpdiBjbGFzcz0zRCJnbWFpbF9leHRyYSI+SW4gdGhlIG1lYW4gdGltZSBJIHZlcmlm aWVkIGNoYW5naW5nCiAgICAgICAgICBiYWNrdXAucHkgdGhpcyB3YXkgc29sdmVzIHRoZSBwcm9i bGVtICh0aGUgMy42IGFwaSBkZXByZWNhdGlvbgogICAgICAgICAgc3RpbGwgaW4gcGxhY2UuLi4g Oy0pOjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9M0QiZ21haWxfZXh0cmEiPjxicj4KICAgICAg ICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPTNEImdtYWlsX2V4dHJhIj4KICAgICAgICAgIDxk aXYgY2xhc3M9M0QiZ21haWxfZXh0cmEiPiQgZGlmZiBiYWNrdXAucHkgYmFja3VwLnB5Lm9yaWc9 QzI9QTA9CjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0zRCJnbWFpbF9leHRyYSI+MTIzYzEy MzwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0zRCJnbWFpbF9leHRyYSI+Jmx0OyA9QzI9QTAg PUMyPUEwID1DMj1BMCA9QzI9QTAgPUMyPQo9QTAgPUMyPUEwID1DMj1BMCA9QzI9QTAgPUMyPUEw ID1DMj1BMAp2bS5zbmFwc2hvdHMuYWRkKHBhcmFtcy5TbmFwc2hvdChkZXNjcmlwdGlvbj0zRGNv bmZpZy5nZXRfc25hcHNob3RfZGVzY3JpPQpwdGlvbigpLAogICAgICAgICAgICB2bT0zRHZtLHBl cnNpc3RfbWVtb3J5c3RhdGU9M0RGYWxzZSkpPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPTNE ImdtYWlsX2V4dHJhIj4tLS08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9M0QiZ21haWxfZXh0 cmEiPiZndDsgPUMyPUEwID1DMj1BMCA9QzI9QTAgPUMyPUEwID1DMj0KPUEwID1DMj1BMCA9QzI9 QTAgPUMyPUEwID1DMj1BMCA9QzI9QTAKdm0uc25hcHNob3RzLmFkZChwYXJhbXMuU25hcHNob3Qo ZGVzY3JpcHRpb249M0Rjb25maWcuZ2V0X3NuYXBzaG90X2Rlc2NyaT0KcHRpb24oKSwKICAgICAg ICAgICAgdm09M0R2bSkpPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPTNEImdtYWlsX2V4dHJh Ij48YnI+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9M0QiZ21haWxfZXh0 cmEiPlRoZSBzbmFwc2hvdCBkb2Vzbid0IGluY2x1ZGUgbWVtb3J5CiAgICAgICAgICAgIGFuZCBu byBwcm9ibGVtIGF0IFZNIE9TIHNpZGUgbm93PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPTNE ImdtYWlsX2V4dHJhIj48YnI+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9 M0QiZ21haWxfZXh0cmEiPlRlc3RlZCBhbHNvIGdldHRpbmcgdGhlIHBhcmFtZXRlcgogICAgICAg ICAgICBmcm9tIGNvbmZpZyBmaWxlPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPTNEImdtYWls X2V4dHJhIj48YnI+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9M0QiZ21h aWxfZXh0cmEiPk1vZGlmaWNhdGlvbnMgbmVlZGVkIGluIHRoaXMgY2FzZTo8Lz0KZGl2PgogICAg ICAgICAgPGRpdiBjbGFzcz0zRCJnbWFpbF9leHRyYSI+PGJyPgogICAgICAgICAgPC9kaXY+CiAg ICAgICAgICA8ZGl2IGNsYXNzPTNEImdtYWlsX2V4dHJhIj4xKTwvZGl2PgogICAgICAgICAgPGRp diBjbGFzcz0zRCJnbWFpbF9leHRyYSI+JCBkaWZmIGJhY2t1cC5weSBiYWNrdXAucHkub3JpZz1D Mj1BMD0KPGJyPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPTNEImdtYWls X2V4dHJhIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0zRCJnbWFpbF9leHRyYSI+MTIzYzEyMzwv ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPTNEImdtYWlsX2V4dHJhIj4mbHQ7ID1DMj1BMCA9 QzI9QTAgPUMyPUEwID1DMj1BMCA9QzI9Cj1BMCA9QzI9QTAgPUMyPUEwID1DMj1BMCA9QzI9QTAg PUMyPUEwCnZtLnNuYXBzaG90cy5hZGQocGFyYW1zLlNuYXBzaG90KGRlc2NyaXB0aW9uPTNEY29u ZmlnLmdldF9zbmFwc2hvdF9kZXNjcmk9CnB0aW9uKCksCnZtPTNEdm0scGVyc2lzdF9tZW1vcnlz dGF0ZT0zRGNvbmZpZy5nZXRfcGVyc2lzdF9tZW1vcnlzdGF0ZSgpKSk8L2Rpdj4KICAgICAgICAg ICAgPGRpdiBjbGFzcz0zRCJnbWFpbF9leHRyYSI+LS0tPC9kaXY+CiAgICAgICAgICAgIDxkaXYg Y2xhc3M9M0QiZ21haWxfZXh0cmEiPiZndDsgPUMyPUEwID1DMj1BMCA9QzI9QTAgPUMyPUEwID1D Mj0KPUEwID1DMj1BMCA9QzI9QTAgPUMyPUEwID1DMj1BMCA9QzI9QTAKdm0uc25hcHNob3RzLmFk ZChwYXJhbXMuU25hcHNob3QoZGVzY3JpcHRpb249M0Rjb25maWcuZ2V0X3NuYXBzaG90X2Rlc2Ny aT0KcHRpb24oKSwKICAgICAgICAgICAgICB2bT0zRHZtKSk8L2Rpdj4KICAgICAgICAgICAgPGRp dj48YnI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2Pjxicj4KICAgICAgICAg ICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXY+Mik8L2Rpdj4KICAgICAgICAgICAgPGRpdj4KICAg ICAgICAgICAgICA8ZGl2PiQgZGlmZiBjb25maWcucHkgY29uZmlnLnB5Lm9yaWc9QzI9QTA8L2Rp dj4KICAgICAgICAgICAgICA8ZGl2PjM0ZDMzPC9kaXY+CiAgICAgICAgICAgICAgPGRpdj4mbHQ7 ID1DMj1BMCA9QzI9QTAgPUMyPUEwID1DMj1BMCA9QzI9QTAgPUMyPUEwIHNlbGYuX189CnBlcnNp c3RfbWVtb3J5c3RhdGUgPTNECiAgICAgICAgICAgICAgICBjb25maWdfcGFyc2VyLmdldGJvb2xl YW4oc2VjdGlvbiwgInBlcnNpc3RfbWVtb3J5c3RhdGUiKTw9Ci9kaXY+CiAgICAgICAgICAgICAg PGRpdj4xMTMsMTE2ZDExMTwvZGl2PgogICAgICAgICAgICAgIDxkaXY+Jmx0Oz1DMj1BMDwvZGl2 PgogICAgICAgICAgICAgIDxkaXY+Jmx0Oz1DMj1BMDwvZGl2PgogICAgICAgICAgICAgIDxkaXY+ Jmx0OyA9QzI9QTAgPUMyPUEwIGRlZiBnZXRfcGVyc2lzdF9tZW1vcnlzdGF0ZShzZWxmKTo8PQov ZGl2PgogICAgICAgICAgICAgIDxkaXY+Jmx0OyA9QzI9QTAgPUMyPUEwID1DMj1BMCA9QzI9QTAg cmV0dXJuIHNlbGYuX19wZXJzaXN0PQpfbWVtb3J5c3RhdGU8L2Rpdj4KICAgICAgICAgICAgPC9k aXY+CiAgICAgICAgICAgIDxkaXY+PGJyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAg PGRpdj48YnI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2PkFuZCBpbiBjb25m aWcgZmlsZSBjYWxsZWQgYWRkOjwvZGl2PgogICAgICAgICAgICA8ZGl2Pjxicj4KICAgICAgICAg ICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxk aXY+IyBTYXZlIE1lbW9yeSBpbiBzbmFwc2hvdDwvZGl2PgogICAgICAgICAgICA8ZGl2PnBlcnNp c3RfbWVtb3J5c3RhdGU9M0RGYWxzZTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8 ZGl2Pjxicj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj5JdCBjb3VsZCBiZSBmdXJ0 aGVyIGltcHJvdmVkIGlmIG9uZSB3YW50cyB0bwogICAgICAgICAgICBkaWZmZXJlbnRpYXRlIHNh dmUgbWVtb3J5IGZvciBzb21lIFZNcyBhbmQgbm90IGZvciBvdGhlcgogICAgICAgICAgICBvbmVz Li4uLjwvZGl2PgogICAgICAgICAgPGRpdj48YnI+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAg IDxkaXY+SElIIG90aGVyIG9uZXMsPC9kaXY+CiAgICAgICAgICA8ZGl2PkdpYW5sdWNhPC9kaXY+ CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9ibG9ja3F1b3RlPgogICAgPGJyPgog ICAgPHByZSBjbGFzcz0zRCJtb3otc2lnbmF0dXJlIiBjb2xzPTNEIjcyIj4tLT0yMApOYXRoYW5h PUMzPUFCbCBCbGFuY2hldAoKU3VwZXJ2aXNpb24gcj1DMz1BOXNlYXUKUD1DMz1CNGxlIEluZnJh c3RydXR1cmVzIEluZm9ybWF0aXF1ZXMKMjI3IGF2ZW51ZSBQcm9mZXNzZXVyLUplYW4tTG91aXMt VmlhbGEKMzQxOTMgTU9OVFBFTExJRVIgQ0VERVggNSA9MDkKVD1DMz1BOWwuIDMzICgwKTQgNjcg NTQgODQgNTUKRmF4ICAzMyAoMCk0IDY3IDU0IDg0IDE0CjxhIGNsYXNzPTNEIm1vei10eHQtbGlu ay1hYmJyZXZpYXRlZCIgaHJlZj0zRCJtYWlsdG86YmxhbmNoZXRAYWJlcy5mciI+Ymw9CmFuY2hl dEBhYmVzLmZyPC9hPiA8L3ByZT4KICA8L2JvZHk+CjwvaHRtbD4KCi0tLS0tLS0tLS0tLS0tREY3 NjAxMjNCMzRCQTExQzBBMjZCQTQ0LS0K --===============3643326409701586998==--