[Engine-devel] Update on UI Plugins: context-sensitive button API preview

<br><span style=3D"font-family: courier new,courier,monaco,monospace,sans-= serif;"></span><span style=3D"font-family: courier new,courier,monaco,monos=
<br><span style=3D"color: rgb(0, 102, 0);"> &= nbsp; // Open new popup window</span><br style=3D"color: rgb(0, 102, = 0);"><span style=3D"color: rgb(0, 102, 0);"> &= nbsp; // In future, we might use "dialog UI" plugin API here</span><b= r style=3D"color: rgb(0, 102, 0);"> &nbs=
------=_Part_7675795_1562088388.1350047011300 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Hi guys, I've been working on implementing "custom context-sensitive button / menu item" plugin API feature recently, and wanted to share some code with you. Here's a sample code that adds "Do something with selected host(s)" button to Hosts main tab data grid: api.register({ UiInit: function() { api. addMainTabActionButton ('Host', 'Do something with selected host(s)', { onClick : function() { // 'arguments' contain host entities currently selected window.alert(arguments.length + ' host(s) selected'); window.alert('first selected host ID = ' + arguments[0].entityId); // Open new popup window // In future, we might use "dialog UI" plugin API here window.open('http://example.com', '_blank'); }, isEnabled : function() { // 'true' means the button is enabled and clickable (default) // 'false' means the button is disabled and non-clickable // Enable button only when the number of selected items > 0 return arguments.length > 0; }, isAccessible : function() { // 'true' means the button is visible (default) // 'false' means the button is hidden return true; } }); } }); The signature of addMainTabActionButton plugin API function is following: addMainTabActionButton(entityTypeName, label, actionButtonInterface) entityTypeName indicates which main tab the button should be added to, e.g. "Host" for Host main tab. [Quick question for NetApp guys: do we want to support all main tab entity types?] label is the title displayed on the button. actionButtonInterface represents an object that "implements the button interface" by declaring its functions: onClick , isEnabled , isAccessible . Since JavaScript language uses different techniques and syntax to achieve OOP programming model, I've decided to keep things simple and stay with plain objects containing functions. While some JavaScript guru could advocate different approach, from WebAdmin vs. plugin integration perspective, the above mentioned approach is the easiest way. I'm also interested to hear your opinion on this. All functions of actionButtonInterface receive currently selected item(s) as function arguments. Within a JavaScript function, "arguments" represents an implicit array of its arguments. For now, WebAdmin will pass simple JSON-like objects to these functions, for example: { entityId: "<whatever>" } In future, we can extend or modify this concept to match the contract of various oVirt REST API entities. This feature will be part of UI Plugins PoC rev.6, which should come out next week. Regards, Vojtech ------=_Part_7675795_1562088388.1350047011300 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable <html><head><style type=3D'text/css'>p { margin: 0; }</style></head><body><= div style=3D'font-family: times new roman,new york,times,serif; font-size: = 12pt; color: #000000'>Hi guys,<br><br>I've been working on implementing "cu= stom context-sensitive button / menu item" plugin API feature recently, and= wanted to share some code with you.<br><br>Here's a sample code that adds = "Do something with selected host(s)" button to Hosts main tab data grid:<br= pace,sans-serif;">api.register({</span><br style=3D"font-family: courier ne= w,courier,monaco,monospace,sans-serif;"><span style=3D"font-family: courier= new,courier,monaco,monospace,sans-serif;"> UiInit: function() {</spa= n><br><br style=3D"font-family: courier new,courier,monaco,monospace,sans-s= erif;"><span style=3D"font-family: courier new,courier,monaco,monospace,san= s-serif;"> api.<span style=3D"font-weight: bold; color: r= gb(51, 51, 255);">addMainTabActionButton</span>('Host', 'Do something with = selected host(s)', {</span><br><br style=3D"font-family: courier new,courie= r,monaco,monospace,sans-serif;"><span style=3D"font-family: courier new,cou= rier,monaco,monospace,sans-serif;"> <span sty= le=3D"color: rgb(204, 51, 204); font-weight: bold;">onClick</span>: functio= n() {</span><span style=3D"white-space:pre"><br style=3D"font-family: couri= er new,courier,monaco,monospace,sans-serif;"></span><span style=3D"font-fam= ily: courier new,courier,monaco,monospace,sans-serif;"><span style=3D"color= : rgb(0, 102, 0);"> // 'arguments= ' contain host entities currently selected</span><br style=3D"color: rgb(0,= 102, 0);"> window.alert(argument= s.length + ' host(s) selected');<br> &nb= sp; window.alert('first selected host ID =3D ' + arguments[0].entityId);<br= p; window.open('http://example.com', '_blank');<br></span><span style=3D"fo= nt-family: courier new,courier,monaco,monospace,sans-serif;"></span><span s= tyle=3D"font-family: courier new,courier,monaco,monospace,sans-serif;">&nbs= p; },</span><br><br style=3D"font-family: courier n= ew,courier,monaco,monospace,sans-serif;"><span style=3D"font-family: courie= r new,courier,monaco,monospace,sans-serif;"> = <span style=3D"font-weight: bold; color: rgb(204, 51, 204);">isEnabled</spa= n>: function() {</span><br style=3D"font-family: courier new,courier,monaco= ,monospace,sans-serif;"><span style=3D"font-family: courier new,courier,mon= aco,monospace,sans-serif; color: rgb(0, 102, 0);"> &= nbsp; // 'true' means the button is enabled and clickable (defa= ult)<br> // 'false' means the but= ton is disabled and non-clickable<br><br> &nbs= p; // Enable button only when the number of selected items > 0<br>= </span><span style=3D"font-family: courier new,courier,monaco,monospace,san= s-serif;"> return arguments.lengt= h > 0;</span><br style=3D"font-family: courier new,courier,monaco,monosp= ace,sans-serif;"><span style=3D"font-family: courier new,courier,monaco,mon= ospace,sans-serif;"> },</span><br><br style= =3D"font-family: courier new,courier,monaco,monospace,sans-serif;"><span st= yle=3D"font-family: courier new,courier,monaco,monospace,sans-serif;"> = ; <span style=3D"font-weight: bold; color: rgb(204,= 51, 204);">isAccessible</span>: function() {</span><br style=3D"font-famil= y: courier new,courier,monaco,monospace,sans-serif;"><span style=3D"font-fa= mily: courier new,courier,monaco,monospace,sans-serif; color: rgb(0, 102, 0= );"> // 'true' means the button i= s visible (default)<br> // 'false= ' means the button is hidden<br style=3D"font-family: courier new,courier,m= onaco,monospace,sans-serif;"></span><span style=3D"font-family: courier new= ,courier,monaco,monospace,sans-serif;"> = return true;</span><br style=3D"font-family: courier new,courier,mon= aco,monospace,sans-serif;"><span style=3D"font-family: courier new,courier,= monaco,monospace,sans-serif;"> }</span><br><b= r style=3D"font-family: courier new,courier,monaco,monospace,sans-serif;"><= span style=3D"font-family: courier new,courier,monaco,monospace,sans-serif;= "> });</span><br><br style=3D"font-family: courier new,co= urier,monaco,monospace,sans-serif;"><span style=3D"font-family: courier new= ,courier,monaco,monospace,sans-serif;"> }</span><br style=3D"font-fam= ily: courier new,courier,monaco,monospace,sans-serif;"><span style=3D"font-= family: courier new,courier,monaco,monospace,sans-serif;">});</span><br sty= le=3D"font-family: courier new,courier,monaco,monospace,sans-serif;"><br>Th= e signature of <strong>addMainTabActionButton</strong> plugin API function = is following:<br><br><span style=3D"font-family: courier new,courier,monaco= ,monospace,sans-serif;">addMainTabActionButton(entityTypeName, label, actio= nButtonInterface)</span><br><br><em>entityTypeName</em> indicates which mai= n tab the button should be added to, e.g. "Host" for Host main tab. [Quick = question for NetApp guys: do we want to support all main tab entity types?]= <br><br><span style=3D"font-style: italic;">label</span> is the title displ= ayed on the button.<br><br><span style=3D"font-style: italic;">actionButton= Interface</span> represents an object that "implements the button interface= " by declaring its functions: <span style=3D"font-style: italic;">onClick</= span>, <span style=3D"font-style: italic;">isEnabled</span>, <span style=3D= "font-style: italic;">isAccessible</span>. Since JavaScript language uses d= ifferent techniques and syntax to achieve OOP programming model, I've decid= ed to keep things simple and stay with plain objects containing functions. = While some JavaScript guru could advocate different approach, from WebAdmin= vs. plugin integration perspective, the above mentioned approach is the ea= siest way. I'm also interested to hear your opinion on this.<br><br>All fun= ctions of <span style=3D"font-style: italic;">actionButtonInterface</span> = receive currently selected item(s) as function arguments. Within a JavaScri= pt function, "arguments" represents an implicit array of its arguments.<br>= <br>For now, WebAdmin will pass simple JSON-like objects to these functions= , for example:<br><br><span style=3D"font-family: courier new,courier,monac= o,monospace,sans-serif;">{ entityId: "<whatever>" }</span><br><br>In = future, we can extend or modify this concept to match the contract of vario= us oVirt REST API entities.<br><br>This feature will be part of UI Plugins = PoC rev.6, which should come out next week.<br><br>Regards,<br>Vojtech<br><= br></div></body></html> ------=_Part_7675795_1562088388.1350047011300--

--_000_D290AD8432118048947689BA3AE8A9B3E9ECEASACEXCMBX04PRDhqn_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgVm9qdGVjaCwNCg0KU29ycnkgZm9yIHRoZSBsYXRlIHJlcGx5LiBUaGlzIEFQSSBsb29rcyBw ZXJmZWN0IGZvciBvdXIgbmVlZHMuIEkgbG9vayBmb3J3YXJkIHRvIGdldHRpbmcgYWNjZXNzIHRv IGl0IGFuZCB0cnlpbmcgaXQgb3V0Lg0KDQotQ2hyaXMNCg0KRnJvbTogZW5naW5lLWRldmVsLWJv dW5jZXNAb3ZpcnQub3JnIFttYWlsdG86ZW5naW5lLWRldmVsLWJvdW5jZXNAb3ZpcnQub3JnXSBP biBCZWhhbGYgT2YgVm9qdGVjaCBTem9jcw0KU2VudDogRnJpZGF5LCBPY3RvYmVyIDEyLCAyMDEy IDk6MDQgQU0NClRvOiBlbmdpbmUtZGV2ZWwNClN1YmplY3Q6IFtFbmdpbmUtZGV2ZWxdIFVwZGF0 ZSBvbiBVSSBQbHVnaW5zOiBjb250ZXh0LXNlbnNpdGl2ZSBidXR0b24gQVBJIHByZXZpZXcNCg0K SGkgZ3V5cywNCg0KSSd2ZSBiZWVuIHdvcmtpbmcgb24gaW1wbGVtZW50aW5nICJjdXN0b20gY29u dGV4dC1zZW5zaXRpdmUgYnV0dG9uIC8gbWVudSBpdGVtIiBwbHVnaW4gQVBJIGZlYXR1cmUgcmVj ZW50bHksIGFuZCB3YW50ZWQgdG8gc2hhcmUgc29tZSBjb2RlIHdpdGggeW91Lg0KDQpIZXJlJ3Mg YSBzYW1wbGUgY29kZSB0aGF0IGFkZHMgIkRvIHNvbWV0aGluZyB3aXRoIHNlbGVjdGVkIGhvc3Qo cykiIGJ1dHRvbiB0byBIb3N0cyBtYWluIHRhYiBkYXRhIGdyaWQ6DQoNCmFwaS5yZWdpc3Rlcih7 DQogIFVpSW5pdDogZnVuY3Rpb24oKSB7DQoNCiAgICBhcGkuYWRkTWFpblRhYkFjdGlvbkJ1dHRv bignSG9zdCcsICdEbyBzb21ldGhpbmcgd2l0aCBzZWxlY3RlZCBob3N0KHMpJywgew0KDQogICAg ICBvbkNsaWNrOiBmdW5jdGlvbigpIHsNCiAgICAgICAgLy8gJ2FyZ3VtZW50cycgY29udGFpbiBo b3N0IGVudGl0aWVzIGN1cnJlbnRseSBzZWxlY3RlZA0KICAgICAgICB3aW5kb3cuYWxlcnQoYXJn dW1lbnRzLmxlbmd0aCArICcgaG9zdChzKSBzZWxlY3RlZCcpOw0KICAgICAgICB3aW5kb3cuYWxl cnQoJ2ZpcnN0IHNlbGVjdGVkIGhvc3QgSUQgPSAnICsgYXJndW1lbnRzWzBdLmVudGl0eUlkKTsN Cg0KICAgICAgICAvLyBPcGVuIG5ldyBwb3B1cCB3aW5kb3cNCiAgICAgICAgLy8gSW4gZnV0dXJl LCB3ZSBtaWdodCB1c2UgImRpYWxvZyBVSSIgcGx1Z2luIEFQSSBoZXJlDQogICAgICAgIHdpbmRv dy5vcGVuKCdodHRwOi8vZXhhbXBsZS5jb20nLCAnX2JsYW5rJyk7DQogICAgICB9LA0KDQogICAg ICBpc0VuYWJsZWQ6IGZ1bmN0aW9uKCkgew0KICAgICAgICAvLyAndHJ1ZScgbWVhbnMgdGhlIGJ1 dHRvbiBpcyBlbmFibGVkIGFuZCBjbGlja2FibGUgKGRlZmF1bHQpDQogICAgICAgIC8vICdmYWxz ZScgbWVhbnMgdGhlIGJ1dHRvbiBpcyBkaXNhYmxlZCBhbmQgbm9uLWNsaWNrYWJsZQ0KDQogICAg ICAgIC8vIEVuYWJsZSBidXR0b24gb25seSB3aGVuIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgaXRl bXMgPiAwDQogICAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMDsNCiAgICAgIH0sDQoN CiAgICAgIGlzQWNjZXNzaWJsZTogZnVuY3Rpb24oKSB7DQogICAgICAgIC8vICd0cnVlJyBtZWFu cyB0aGUgYnV0dG9uIGlzIHZpc2libGUgKGRlZmF1bHQpDQogICAgICAgIC8vICdmYWxzZScgbWVh bnMgdGhlIGJ1dHRvbiBpcyBoaWRkZW4NCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICB9DQoN CiAgICB9KTsNCg0KICB9DQp9KTsNCg0KVGhlIHNpZ25hdHVyZSBvZiBhZGRNYWluVGFiQWN0aW9u QnV0dG9uIHBsdWdpbiBBUEkgZnVuY3Rpb24gaXMgZm9sbG93aW5nOg0KDQphZGRNYWluVGFiQWN0 aW9uQnV0dG9uKGVudGl0eVR5cGVOYW1lLCBsYWJlbCwgYWN0aW9uQnV0dG9uSW50ZXJmYWNlKQ0K DQplbnRpdHlUeXBlTmFtZSBpbmRpY2F0ZXMgd2hpY2ggbWFpbiB0YWIgdGhlIGJ1dHRvbiBzaG91 bGQgYmUgYWRkZWQgdG8sIGUuZy4gIkhvc3QiIGZvciBIb3N0IG1haW4gdGFiLiBbUXVpY2sgcXVl c3Rpb24gZm9yIE5ldEFwcCBndXlzOiBkbyB3ZSB3YW50IHRvIHN1cHBvcnQgYWxsIG1haW4gdGFi IGVudGl0eSB0eXBlcz9dDQoNCmxhYmVsIGlzIHRoZSB0aXRsZSBkaXNwbGF5ZWQgb24gdGhlIGJ1 dHRvbi4NCg0KYWN0aW9uQnV0dG9uSW50ZXJmYWNlIHJlcHJlc2VudHMgYW4gb2JqZWN0IHRoYXQg ImltcGxlbWVudHMgdGhlIGJ1dHRvbiBpbnRlcmZhY2UiIGJ5IGRlY2xhcmluZyBpdHMgZnVuY3Rp b25zOiBvbkNsaWNrLCBpc0VuYWJsZWQsIGlzQWNjZXNzaWJsZS4gU2luY2UgSmF2YVNjcmlwdCBs YW5ndWFnZSB1c2VzIGRpZmZlcmVudCB0ZWNobmlxdWVzIGFuZCBzeW50YXggdG8gYWNoaWV2ZSBP T1AgcHJvZ3JhbW1pbmcgbW9kZWwsIEkndmUgZGVjaWRlZCB0byBrZWVwIHRoaW5ncyBzaW1wbGUg YW5kIHN0YXkgd2l0aCBwbGFpbiBvYmplY3RzIGNvbnRhaW5pbmcgZnVuY3Rpb25zLiBXaGlsZSBz b21lIEphdmFTY3JpcHQgZ3VydSBjb3VsZCBhZHZvY2F0ZSBkaWZmZXJlbnQgYXBwcm9hY2gsIGZy b20gV2ViQWRtaW4gdnMuIHBsdWdpbiBpbnRlZ3JhdGlvbiBwZXJzcGVjdGl2ZSwgdGhlIGFib3Zl IG1lbnRpb25lZCBhcHByb2FjaCBpcyB0aGUgZWFzaWVzdCB3YXkuIEknbSBhbHNvIGludGVyZXN0 ZWQgdG8gaGVhciB5b3VyIG9waW5pb24gb24gdGhpcy4NCg0KQWxsIGZ1bmN0aW9ucyBvZiBhY3Rp b25CdXR0b25JbnRlcmZhY2UgcmVjZWl2ZSBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbShzKSBhcyBm dW5jdGlvbiBhcmd1bWVudHMuIFdpdGhpbiBhIEphdmFTY3JpcHQgZnVuY3Rpb24sICJhcmd1bWVu dHMiIHJlcHJlc2VudHMgYW4gaW1wbGljaXQgYXJyYXkgb2YgaXRzIGFyZ3VtZW50cy4NCg0KRm9y IG5vdywgV2ViQWRtaW4gd2lsbCBwYXNzIHNpbXBsZSBKU09OLWxpa2Ugb2JqZWN0cyB0byB0aGVz ZSBmdW5jdGlvbnMsIGZvciBleGFtcGxlOg0KDQp7IGVudGl0eUlkOiAiPHdoYXRldmVyPiIgfQ0K DQpJbiBmdXR1cmUsIHdlIGNhbiBleHRlbmQgb3IgbW9kaWZ5IHRoaXMgY29uY2VwdCB0byBtYXRj aCB0aGUgY29udHJhY3Qgb2YgdmFyaW91cyBvVmlydCBSRVNUIEFQSSBlbnRpdGllcy4NCg0KVGhp cyBmZWF0dXJlIHdpbGwgYmUgcGFydCBvZiBVSSBQbHVnaW5zIFBvQyByZXYuNiwgd2hpY2ggc2hv dWxkIGNvbWUgb3V0IG5leHQgd2Vlay4NCg0KUmVnYXJkcywNClZvanRlY2gNCg== --_000_D290AD8432118048947689BA3AE8A9B3E9ECEASACEXCMBX04PRDhqn_ Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: base64 PGh0bWwgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiIHhtbG5zOm89InVy bjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIgeG1sbnM6dz0idXJuOnNjaGVt YXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIgeG1sbnM6bT0iaHR0cDovL3NjaGVtYXMubWlj cm9zb2Z0LmNvbS9vZmZpY2UvMjAwNC8xMi9vbW1sIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv VFIvUkVDLWh0bWw0MCI+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIg Y29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjxtZXRhIG5hbWU9IkdlbmVyYXRv ciIgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgMTQgKGZpbHRlcmVkIG1lZGl1bSkiPg0KPHN0eWxl PjwhLS0NCi8qIEZvbnQgRGVmaW5pdGlvbnMgKi8NCkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6 Q2FsaWJyaTsNCglwYW5vc2UtMToyIDE1IDUgMiAyIDIgNCAzIDIgNDt9DQpAZm9udC1mYWNlDQoJ e2ZvbnQtZmFtaWx5OlRhaG9tYTsNCglwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDt9DQov KiBTdHlsZSBEZWZpbml0aW9ucyAqLw0KcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1z b05vcm1hbA0KCXttYXJnaW46MGluOw0KCW1hcmdpbi1ib3R0b206LjAwMDFwdDsNCglmb250LXNp emU6MTIuMHB0Ow0KCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iLCJzZXJpZiI7fQ0KYTps aW5rLCBzcGFuLk1zb0h5cGVybGluaw0KCXttc28tc3R5bGUtcHJpb3JpdHk6OTk7DQoJY29sb3I6 Ymx1ZTsNCgl0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30NCmE6dmlzaXRlZCwgc3Bhbi5Nc29I eXBlcmxpbmtGb2xsb3dlZA0KCXttc28tc3R5bGUtcHJpb3JpdHk6OTk7DQoJY29sb3I6cHVycGxl Ow0KCXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQ0KcA0KCXttc28tc3R5bGUtcHJpb3JpdHk6 OTk7DQoJbWFyZ2luOjBpbjsNCgltYXJnaW4tYm90dG9tOi4wMDAxcHQ7DQoJZm9udC1zaXplOjEy LjBwdDsNCglmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIiwic2VyaWYiO30NCnNwYW4uRW1h aWxTdHlsZTIwDQoJe21zby1zdHlsZS10eXBlOnBlcnNvbmFsLXJlcGx5Ow0KCWZvbnQtZmFtaWx5 OiJDYWxpYnJpIiwic2Fucy1zZXJpZiI7DQoJY29sb3I6IzFGNDk3RDt9DQouTXNvQ2hwRGVmYXVs dA0KCXttc28tc3R5bGUtdHlwZTpleHBvcnQtb25seTsNCglmb250LXNpemU6MTAuMHB0O30NCkBw YWdlIFdvcmRTZWN0aW9uMQ0KCXtzaXplOjguNWluIDExLjBpbjsNCgltYXJnaW46MS4waW4gMS4w aW4gMS4waW4gMS4waW47fQ0KZGl2LldvcmRTZWN0aW9uMQ0KCXtwYWdlOldvcmRTZWN0aW9uMTt9 DQotLT48L3N0eWxlPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPg0KPG86c2hhcGVkZWZhdWx0cyB2 OmV4dD0iZWRpdCIgc3BpZG1heD0iMTAyNiIgLz4NCjwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYg Z3RlIG1zbyA5XT48eG1sPg0KPG86c2hhcGVsYXlvdXQgdjpleHQ9ImVkaXQiPg0KPG86aWRtYXAg djpleHQ9ImVkaXQiIGRhdGE9IjEiIC8+DQo8L286c2hhcGVsYXlvdXQ+PC94bWw+PCFbZW5kaWZd LS0+DQo8L2hlYWQ+DQo8Ym9keSBsYW5nPSJFTi1VUyIgbGluaz0iYmx1ZSIgdmxpbms9InB1cnBs ZSI+DQo8ZGl2IGNsYXNzPSJXb3JkU2VjdGlvbjEiPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNw YW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90 OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7O2NvbG9yOiMxRjQ5N0QiPkhpIFZvanRlY2gsPG86cD48 L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQt c2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OywmcXVvdDtzYW5zLXNl cmlmJnF1b3Q7O2NvbG9yOiMxRjQ5N0QiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCjxw IGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFt aWx5OiZxdW90O0NhbGlicmkmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90Oztjb2xvcjojMUY0 OTdEIj5Tb3JyeSBmb3IgdGhlIGxhdGUgcmVwbHkuIFRoaXMgQVBJIGxvb2tzIHBlcmZlY3QgZm9y IG91ciBuZWVkcy4gSSBsb29rIGZvcndhcmQgdG8gZ2V0dGluZyBhY2Nlc3MgdG8gaXQgYW5kIHRy eWluZyBpdCBvdXQuPG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+ PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZx dW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7O2NvbG9yOiMxRjQ5N0QiPjxvOnA+Jm5ic3A7PC9v OnA+PC9zcGFuPjwvcD4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0i Zm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LCZxdW90O3Nh bnMtc2VyaWYmcXVvdDs7Y29sb3I6IzFGNDk3RCI+LUNocmlzPG86cD48L286cD48L3NwYW4+PC9w Pg0KPC9kaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEx LjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVv dDs7Y29sb3I6IzFGNDk3RCI+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KPGRpdj4NCjxk aXYgc3R5bGU9ImJvcmRlcjpub25lO2JvcmRlci10b3A6c29saWQgI0I1QzRERiAxLjBwdDtwYWRk aW5nOjMuMHB0IDBpbiAwaW4gMGluIj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxiPjxzcGFuIHN0 eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O1RhaG9tYSZxdW90OywmcXVv dDtzYW5zLXNlcmlmJnF1b3Q7Ij5Gcm9tOjwvc3Bhbj48L2I+PHNwYW4gc3R5bGU9ImZvbnQtc2l6 ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7VGFob21hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYm cXVvdDsiPiBlbmdpbmUtZGV2ZWwtYm91bmNlc0BvdmlydC5vcmcgW21haWx0bzplbmdpbmUtZGV2 ZWwtYm91bmNlc0BvdmlydC5vcmddDQo8Yj5PbiBCZWhhbGYgT2YgPC9iPlZvanRlY2ggU3pvY3M8 YnI+DQo8Yj5TZW50OjwvYj4gRnJpZGF5LCBPY3RvYmVyIDEyLCAyMDEyIDk6MDQgQU08YnI+DQo8 Yj5Ubzo8L2I+IGVuZ2luZS1kZXZlbDxicj4NCjxiPlN1YmplY3Q6PC9iPiBbRW5naW5lLWRldmVs XSBVcGRhdGUgb24gVUkgUGx1Z2luczogY29udGV4dC1zZW5zaXRpdmUgYnV0dG9uIEFQSSBwcmV2 aWV3PG86cD48L286cD48L3NwYW4+PC9wPg0KPC9kaXY+DQo8L2Rpdj4NCjxwIGNsYXNzPSJNc29O b3JtYWwiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwi IHN0eWxlPSJtYXJnaW4tYm90dG9tOjEyLjBwdCI+PHNwYW4gc3R5bGU9ImNvbG9yOmJsYWNrIj5I aSBndXlzLDxicj4NCjxicj4NCkkndmUgYmVlbiB3b3JraW5nIG9uIGltcGxlbWVudGluZyAmcXVv dDtjdXN0b20gY29udGV4dC1zZW5zaXRpdmUgYnV0dG9uIC8gbWVudSBpdGVtJnF1b3Q7IHBsdWdp biBBUEkgZmVhdHVyZSByZWNlbnRseSwgYW5kIHdhbnRlZCB0byBzaGFyZSBzb21lIGNvZGUgd2l0 aCB5b3UuPGJyPg0KPGJyPg0KSGVyZSdzIGEgc2FtcGxlIGNvZGUgdGhhdCBhZGRzICZxdW90O0Rv IHNvbWV0aGluZyB3aXRoIHNlbGVjdGVkIGhvc3QocykmcXVvdDsgYnV0dG9uIHRvIEhvc3RzIG1h aW4gdGFiIGRhdGEgZ3JpZDo8YnI+DQo8YnI+DQo8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFt aWx5OiZxdW90O0NvdXJpZXIgTmV3JnF1b3Q7O2NvbG9yOmJsYWNrIj5hcGkucmVnaXN0ZXIoezxi cj4NCiZuYnNwOyBVaUluaXQ6IGZ1bmN0aW9uKCkgezwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6 YmxhY2siPjxicj4NCjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q291cmll ciBOZXcmcXVvdDs7Y29sb3I6YmxhY2siPjxicj4NCiZuYnNwOyZuYnNwOyZuYnNwOyBhcGkuPC9z cGFuPjxiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDb3VyaWVyIE5ldyZxdW90Oztj b2xvcjojMzMzM0ZGIj5hZGRNYWluVGFiQWN0aW9uQnV0dG9uPC9zcGFuPjwvYj48c3BhbiBzdHls ZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q291cmllciBOZXcmcXVvdDs7Y29sb3I6YmxhY2siPignSG9z dCcsICdEbyBzb21ldGhpbmcgd2l0aCBzZWxlY3RlZCBob3N0KHMpJywgezwvc3Bhbj48c3BhbiBz dHlsZT0iY29sb3I6YmxhY2siPjxicj4NCjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6 JnF1b3Q7Q291cmllciBOZXcmcXVvdDs7Y29sb3I6YmxhY2siPjxicj4NCiZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyA8L3NwYW4+PGI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90 O0NvdXJpZXIgTmV3JnF1b3Q7O2NvbG9yOiNDQzMzQ0MiPm9uQ2xpY2s8L3NwYW4+PC9iPjxzcGFu IHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDb3VyaWVyIE5ldyZxdW90Oztjb2xvcjpibGFjayI+ OiBmdW5jdGlvbigpIHs8YnI+DQo8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90 O0NvdXJpZXIgTmV3JnF1b3Q7O2NvbG9yOiMwMDY2MDAiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyAvLyAnYXJndW1lbnRzJyBjb250YWluIGhvc3QgZW50aXRpZXMg Y3VycmVudGx5IHNlbGVjdGVkPGJyPg0KPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTom cXVvdDtDb3VyaWVyIE5ldyZxdW90Oztjb2xvcjpibGFjayI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHdpbmRvdy5hbGVydChhcmd1bWVudHMubGVuZ3RoICYjNDM7 ICcgaG9zdChzKSBzZWxlY3RlZCcpOzxicj4NCiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyB3aW5kb3cuYWxlcnQoJ2ZpcnN0IHNlbGVjdGVkIGhvc3QgSUQgPSAnICYj NDM7IGFyZ3VtZW50c1swXS5lbnRpdHlJZCk7PGJyPg0KPGJyPg0KPC9zcGFuPjxzcGFuIHN0eWxl PSJmb250LWZhbWlseTomcXVvdDtDb3VyaWVyIE5ldyZxdW90Oztjb2xvcjojMDA2NjAwIj4mbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgLy8gT3BlbiBuZXcgcG9wdXAg d2luZG93PGJyPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IC8v IEluIGZ1dHVyZSwgd2UgbWlnaHQgdXNlICZxdW90O2RpYWxvZyBVSSZxdW90OyBwbHVnaW4gQVBJ IGhlcmU8YnI+DQo8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NvdXJpZXIg TmV3JnF1b3Q7O2NvbG9yOmJsYWNrIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsgd2luZG93Lm9wZW4oJ2h0dHA6Ly9leGFtcGxlLmNvbScsICdfYmxhbmsnKTs8YnI+ DQombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgfSw8L3NwYW4+PHNwYW4gc3R5bGU9ImNv bG9yOmJsYWNrIj48YnI+DQo8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0Nv dXJpZXIgTmV3JnF1b3Q7O2NvbG9yOmJsYWNrIj48YnI+DQombmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsgPC9zcGFuPjxiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDb3VyaWVy IE5ldyZxdW90Oztjb2xvcjojQ0MzM0NDIj5pc0VuYWJsZWQ8L3NwYW4+PC9iPjxzcGFuIHN0eWxl PSJmb250LWZhbWlseTomcXVvdDtDb3VyaWVyIE5ldyZxdW90Oztjb2xvcjpibGFjayI+OiBmdW5j dGlvbigpIHs8YnI+DQo8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NvdXJp ZXIgTmV3JnF1b3Q7O2NvbG9yOiMwMDY2MDAiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyAvLyAndHJ1ZScgbWVhbnMgdGhlIGJ1dHRvbiBpcyBlbmFibGVkIGFuZCBj bGlja2FibGUgKGRlZmF1bHQpPGJyPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7IC8vICdmYWxzZScgbWVhbnMgdGhlIGJ1dHRvbiBpcyBkaXNhYmxlZCBhbmQgbm9u LWNsaWNrYWJsZTxicj4NCjxicj4NCiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyAvLyBFbmFibGUgYnV0dG9uIG9ubHkgd2hlbiB0aGUgbnVtYmVyIG9mIHNlbGVjdGVk IGl0ZW1zICZndDsgMDxicj4NCjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7 Q291cmllciBOZXcmcXVvdDs7Y29sb3I6YmxhY2siPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCAmZ3Q7IDA7PGJyPg0KJm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IH0sPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjpi bGFjayI+PGJyPg0KPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDb3VyaWVy IE5ldyZxdW90Oztjb2xvcjpibGFjayI+PGJyPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7IDwvc3Bhbj48Yj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q291cmllciBOZXcm cXVvdDs7Y29sb3I6I0NDMzNDQyI+aXNBY2Nlc3NpYmxlPC9zcGFuPjwvYj48c3BhbiBzdHlsZT0i Zm9udC1mYW1pbHk6JnF1b3Q7Q291cmllciBOZXcmcXVvdDs7Y29sb3I6YmxhY2siPjogZnVuY3Rp b24oKSB7PGJyPg0KPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDb3VyaWVy IE5ldyZxdW90Oztjb2xvcjojMDA2NjAwIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsgLy8gJ3RydWUnIG1lYW5zIHRoZSBidXR0b24gaXMgdmlzaWJsZSAoZGVmYXVs dCk8YnI+DQombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgLy8gJ2Zh bHNlJyBtZWFucyB0aGUgYnV0dG9uIGlzIGhpZGRlbjxicj4NCjwvc3Bhbj48c3BhbiBzdHlsZT0i Zm9udC1mYW1pbHk6JnF1b3Q7Q291cmllciBOZXcmcXVvdDs7Y29sb3I6YmxhY2siPiZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyByZXR1cm4gdHJ1ZTs8YnI+DQombmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgfTwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6Ymxh Y2siPjxicj4NCjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q291cmllciBO ZXcmcXVvdDs7Y29sb3I6YmxhY2siPjxicj4NCiZuYnNwOyZuYnNwOyZuYnNwOyB9KTs8L3NwYW4+ PHNwYW4gc3R5bGU9ImNvbG9yOmJsYWNrIj48YnI+DQo8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQt ZmFtaWx5OiZxdW90O0NvdXJpZXIgTmV3JnF1b3Q7O2NvbG9yOmJsYWNrIj48YnI+DQombmJzcDsg fTxicj4NCn0pOzxicj4NCjwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6YmxhY2siPjxicj4NClRo ZSBzaWduYXR1cmUgb2YgPHN0cm9uZz5hZGRNYWluVGFiQWN0aW9uQnV0dG9uPC9zdHJvbmc+IHBs dWdpbiBBUEkgZnVuY3Rpb24gaXMgZm9sbG93aW5nOjxicj4NCjxicj4NCjwvc3Bhbj48c3BhbiBz dHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q291cmllciBOZXcmcXVvdDs7Y29sb3I6YmxhY2siPmFk ZE1haW5UYWJBY3Rpb25CdXR0b24oZW50aXR5VHlwZU5hbWUsIGxhYmVsLCBhY3Rpb25CdXR0b25J bnRlcmZhY2UpPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjpibGFjayI+PGJyPg0KPGJyPg0KPGVt PmVudGl0eVR5cGVOYW1lPC9lbT4gaW5kaWNhdGVzIHdoaWNoIG1haW4gdGFiIHRoZSBidXR0b24g c2hvdWxkIGJlIGFkZGVkIHRvLCBlLmcuICZxdW90O0hvc3QmcXVvdDsgZm9yIEhvc3QgbWFpbiB0 YWIuIFtRdWljayBxdWVzdGlvbiBmb3IgTmV0QXBwIGd1eXM6IGRvIHdlIHdhbnQgdG8gc3VwcG9y dCBhbGwgbWFpbiB0YWIgZW50aXR5IHR5cGVzP108YnI+DQo8YnI+DQo8aT5sYWJlbDwvaT4gaXMg dGhlIHRpdGxlIGRpc3BsYXllZCBvbiB0aGUgYnV0dG9uLjxicj4NCjxicj4NCjxpPmFjdGlvbkJ1 dHRvbkludGVyZmFjZTwvaT4gcmVwcmVzZW50cyBhbiBvYmplY3QgdGhhdCAmcXVvdDtpbXBsZW1l bnRzIHRoZSBidXR0b24gaW50ZXJmYWNlJnF1b3Q7IGJ5IGRlY2xhcmluZyBpdHMgZnVuY3Rpb25z Og0KPGk+b25DbGljazwvaT4sIDxpPmlzRW5hYmxlZDwvaT4sIDxpPmlzQWNjZXNzaWJsZTwvaT4u IFNpbmNlIEphdmFTY3JpcHQgbGFuZ3VhZ2UgdXNlcyBkaWZmZXJlbnQgdGVjaG5pcXVlcyBhbmQg c3ludGF4IHRvIGFjaGlldmUgT09QIHByb2dyYW1taW5nIG1vZGVsLCBJJ3ZlIGRlY2lkZWQgdG8g a2VlcCB0aGluZ3Mgc2ltcGxlIGFuZCBzdGF5IHdpdGggcGxhaW4gb2JqZWN0cyBjb250YWluaW5n IGZ1bmN0aW9ucy4gV2hpbGUgc29tZSBKYXZhU2NyaXB0DQogZ3VydSBjb3VsZCBhZHZvY2F0ZSBk aWZmZXJlbnQgYXBwcm9hY2gsIGZyb20gV2ViQWRtaW4gdnMuIHBsdWdpbiBpbnRlZ3JhdGlvbiBw ZXJzcGVjdGl2ZSwgdGhlIGFib3ZlIG1lbnRpb25lZCBhcHByb2FjaCBpcyB0aGUgZWFzaWVzdCB3 YXkuIEknbSBhbHNvIGludGVyZXN0ZWQgdG8gaGVhciB5b3VyIG9waW5pb24gb24gdGhpcy48YnI+ DQo8YnI+DQpBbGwgZnVuY3Rpb25zIG9mIDxpPmFjdGlvbkJ1dHRvbkludGVyZmFjZTwvaT4gcmVj ZWl2ZSBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbShzKSBhcyBmdW5jdGlvbiBhcmd1bWVudHMuIFdp dGhpbiBhIEphdmFTY3JpcHQgZnVuY3Rpb24sICZxdW90O2FyZ3VtZW50cyZxdW90OyByZXByZXNl bnRzIGFuIGltcGxpY2l0IGFycmF5IG9mIGl0cyBhcmd1bWVudHMuPGJyPg0KPGJyPg0KRm9yIG5v dywgV2ViQWRtaW4gd2lsbCBwYXNzIHNpbXBsZSBKU09OLWxpa2Ugb2JqZWN0cyB0byB0aGVzZSBm dW5jdGlvbnMsIGZvciBleGFtcGxlOjxicj4NCjxicj4NCjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9u dC1mYW1pbHk6JnF1b3Q7Q291cmllciBOZXcmcXVvdDs7Y29sb3I6YmxhY2siPnsgZW50aXR5SWQ6 ICZxdW90OyZsdDt3aGF0ZXZlciZndDsmcXVvdDsgfTwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6 YmxhY2siPjxicj4NCjxicj4NCkluIGZ1dHVyZSwgd2UgY2FuIGV4dGVuZCBvciBtb2RpZnkgdGhp cyBjb25jZXB0IHRvIG1hdGNoIHRoZSBjb250cmFjdCBvZiB2YXJpb3VzIG9WaXJ0IFJFU1QgQVBJ IGVudGl0aWVzLjxicj4NCjxicj4NClRoaXMgZmVhdHVyZSB3aWxsIGJlIHBhcnQgb2YgVUkgUGx1 Z2lucyBQb0MgcmV2LjYsIHdoaWNoIHNob3VsZCBjb21lIG91dCBuZXh0IHdlZWsuPGJyPg0KPGJy Pg0KUmVnYXJkcyw8YnI+DQpWb2p0ZWNoPG86cD48L286cD48L3NwYW4+PC9wPg0KPC9kaXY+DQo8 L2Rpdj4NCjwvYm9keT4NCjwvaHRtbD4NCg== --_000_D290AD8432118048947689BA3AE8A9B3E9ECEASACEXCMBX04PRDhqn_--
participants (2)
-
Morrissey, Christopher
-
Vojtech Szocs