From jliu at redhat.com Thu May 5 13:17:29 2011 Content-Type: multipart/mixed; boundary="===============5875741936319121448==" MIME-Version: 1.0 From: Jervis Liu To: rules-users at lists.jboss.org Subject: Re: [rules-users] Guvnor service to compile part of a package ? Date: Fri, 06 May 2011 01:17:21 +0800 Message-ID: <4DC2DBA1.60601@redhat.com> In-Reply-To: 1937742691.10646.1304597589816.JavaMail.root@confiance.eurodecision.fr --===============5875741936319121448== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable On 2011/5/5 20:13, Vincent LEGENDRE wrote: > Ok, thanks > > I had a look to this, and indeed you can query indiviual resource, or get= a list of resources in one package. > But If i understand well you idea, it is still necessary to compile manua= lly some package using filters, and put then into separate snapshots by ins= tance. > > I think it is really close to what I need, but I need to provide the filt= er in a query to get filtered assets (results got from REST query looses th= e Guvnor metadata, it only returns asset's content). > Something like this would be perfect : > http://localhost:8080/path/to/guvnor/api/packages/my.sample.package?c= ategory=3Dfoo&category=3Dbar&status=3Dprod > -> return the list of assert having categories "foo" and "bar" and statu= s set to "prod" I am not sure if I understand you correctly. You want to return a = compiled package binary based on certain criteria or you want to return = individual assets based on certain criteria? If its the former, you can do this through Guvnor REST API (to be = precise, it is the new JAX-RS based REST api). In this case, you dont = provide filters through the URL. When you hit the REST URL for example = http://localhost:8080/drools-guvnor/rest/packages/mortgage, the REST = service will first check if this package's binary is up-to-date. If not, = it will build the package first, then return compiled binary. It is the = Guvnor selector in charge of which assets get into the build. At the = moment, we dont have a REST API to control which selector is taking = effect during the build, but if this is what you need, I am sure we can = figure this out. > I am not familiar with feeds, but the last XML sample of your link seems = to allow some filtering ? Or is it just metadata set in the package ? Or it= is possible to create feed with filtered assets, and then query them (that= would be perfect too). > > If what you want is to return individual assets, you can send a HTTP GET = request to URL = http://host:portnumber/drools-guvnor/rest/packages/mortgage/assets = with = Accept=3D"application/atom+xml", this returns a list of assets under the = mortgage package in Atom feed format. An example looks like below: drools-guvno= r/rest = /packages/mo= rtgage/assets = "> testPackage1's asset mortgage = /as= sets = "> testAsset1 dro= ols-guvnor/rest = /packages/ <= http://localhost:9080/repository/packages/packageName/asset/testAsset1>mort= gage = /as= sets/testAsset1 = " /> drools-guvno= r/rest = /packages/ <= http://localhost:9080/repository/packages/testPackage1/assets>mortgage = /as= sets = "> testAsset2 dro= ols-guvnor/rest = /packages/mo= rtgage/assets/testAsset2 = " /> Then you can further navigate to individual assets using the link = returned. For example a GET request to http://host:portnumber/ = drools-guvnor/rest = /packages/mo= rtgage/assets = /te= stAsset1 = with = Accept=3D"application/atom+xml" returns an atom entry which is the meta = data info of that asset. Or URL http://host:portnumber/ = drools-guvnor/rest = /packages/mo= rtgage/assets = /te= stAsset1/source = to return source and URL = http://host:portnumber/ = drools-guvnor/rest = /packages/mo= rtgage/assets = /te= stAsset1/binary = to return binary content. JAX-RS does support query using URL like = http://host:portnumber/drools-guvnor/rest/packages/mortgage/assets = ?category=3Dfoo&category=3Dbar&s= tatus=3Dprod = (and several other query mechanisms). But we have not implemented query = in Guvnor yet. Of course you will be very welcome if you want to help ;-) For more information about Guvnor REST interface please check: = http://blog.athico.com/2011/03/atompub-interface-for-guvnor.html and = http://community.jboss.org/wiki/AtomPubinterfaceforGuvnor Cheers, Jervis > Otherwise I think I di have to write my own servlet doing that (like Mich= ael suggests), or find another solution. > > > > ----- Mail original ----- > De: "Jervis Liu" > =C3=80: rules-users(a)lists.jboss.org > Envoy=C3=A9: Jeudi 5 Mai 2011 04:48:45 > Objet: Re: [rules-users] Guvnor service to compile part of a package ? > > On 2011/5/4 22:57, Vincent Legendre wrote: >> Hi all, >> >> I am looking for a clever way to compile only parts of a Guvnor package >> according to some criteria on items (categories, metadata ...), but >> outside Guvnor if possible. >> The main idea starts by the fact that it is a little bit complex for a >> business user to manage packages and compilations, and even more if he >> has to manage conditional compilations (using selectors) of a single >> package to produce multiple KB compiled according to business criterions. >> >> I want to compile automatically some KB according to categories (more >> generally asset's fields) with something external to Guvnor. Thus I need >> a way to query Guvnor repository with criterion to get either : >> - the corresponding ressources (DRL) >> - the filtered compiled KB (PKG ressource) >> Filtering with DRL (like custom selectors in Guvnor) will be perfect, >> using a custom class too. >> >> Is there such service ? >> Does the KnowledgeAgent allow filtering (did not see anything in docs) ? > Not sure about KnowledgeAgent, I ll leave this question to someone more > familiar with KnowledgeAgent. At the same time, you can probably use > Guvnor REST service to achieve same goal. Check this example: > http://community.jboss.org/wiki/PublishDroolsartifactsfromaproductionenvi= ronment. > This example polls package feed periodically to check if there is a new > version of package available. If there is a new version created, it will > download the package compiled binary. Package binary is compiled against > selectors, so it is filtered as you need. > > Cheers, > Jervis > > > > > >> Or do I need to add a new service in Guvnor war directly ? >> >> Thanks! >> _______________________________________________ >> rules-users mailing list >> rules-users(a)lists.jboss.org >> https://lists.jboss.org/mailman/listinfo/rules-users > _______________________________________________ > rules-users mailing list > rules-users(a)lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users > > _______________________________________________ > rules-users mailing list > rules-users(a)lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users --===============5875741936319121448== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFs Ly9FTiI+CjxodG1sPgogIDxoZWFkPgogICAgPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFy c2V0PVVURi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiPgogIDwvaGVhZD4KICA8Ym9keSBi Z2NvbG9yPSIjZmZmZmZmIiB0ZXh0PSIjMDAwMDAwIj4KICAgIE9uIDIwMTEvNS81IDIwOjEzLCBW aW5jZW50IExFR0VORFJFIHdyb3RlOgogICAgPGJsb2NrcXVvdGUKY2l0ZT0ibWlkOjE5Mzc3NDI2 OTEuMTA2NDYuMTMwNDU5NzU4OTgxNi5KYXZhTWFpbC5yb290QGNvbmZpYW5jZS5ldXJvZGVjaXNp b24uZnIiCiAgICAgIHR5cGU9ImNpdGUiPgogICAgICA8cHJlIHdyYXA9IiI+T2ssIHRoYW5rcwoK SSBoYWQgYSBsb29rIHRvIHRoaXMsIGFuZCBpbmRlZWQgeW91IGNhbiBxdWVyeSBpbmRpdml1YWwg cmVzb3VyY2UsIG9yIGdldCBhIGxpc3Qgb2YgcmVzb3VyY2VzIGluIG9uZSBwYWNrYWdlLgpCdXQg SWYgaSB1bmRlcnN0YW5kIHdlbGwgeW91IGlkZWEsIGl0IGlzIHN0aWxsIG5lY2Vzc2FyeSB0byBj b21waWxlIG1hbnVhbGx5IHNvbWUgcGFja2FnZSB1c2luZyBmaWx0ZXJzLCBhbmQgcHV0IHRoZW4g aW50byBzZXBhcmF0ZSBzbmFwc2hvdHMgYnkgaW5zdGFuY2UuCgpJIHRoaW5rIGl0IGlzIHJlYWxs eSBjbG9zZSB0byB3aGF0IEkgbmVlZCwgYnV0IEkgbmVlZCB0byBwcm92aWRlIHRoZSBmaWx0ZXIg aW4gYSBxdWVyeSB0byBnZXQgZmlsdGVyZWQgYXNzZXRzIChyZXN1bHRzIGdvdCBmcm9tIFJFU1Qg cXVlcnkgbG9vc2VzIHRoZSBHdXZub3IgbWV0YWRhdGEsIGl0IG9ubHkgcmV0dXJucyBhc3NldCdz IGNvbnRlbnQpLiAKU29tZXRoaW5nIGxpa2UgdGhpcyB3b3VsZCBiZSBwZXJmZWN0IDoKICAgPGEg Y2xhc3M9Im1vei10eHQtbGluay1mcmVldGV4dCIgaHJlZj0iaHR0cDovL2xvY2FsaG9zdDo4MDgw L3BhdGgvdG8vZ3V2bm9yL2FwaS9wYWNrYWdlcy9teS5zYW1wbGUucGFja2FnZT9jYXRlZ29yeT1m b28mYW1wO2NhdGVnb3J5PWJhciZhbXA7c3RhdHVzPXByb2QiPmh0dHA6Ly9sb2NhbGhvc3Q6ODA4 MC9wYXRoL3RvL2d1dm5vci9hcGkvcGFja2FnZXMvbXkuc2FtcGxlLnBhY2thZ2U/Y2F0ZWdvcnk9 Zm9vJmFtcDtjYXRlZ29yeT1iYXImYW1wO3N0YXR1cz1wcm9kPC9hPgotJmd0OyByZXR1cm4gdGhl IGxpc3Qgb2YgYXNzZXJ0IGhhdmluZyBjYXRlZ29yaWVzICJmb28iIGFuZCAiYmFyIiBhbmQgc3Rh dHVzIHNldCB0byAicHJvZCI8YmlnPjxiaWc+PGJpZz48L2JpZz48L2JpZz48L2JpZz4KPC9wcmU+ CiAgICA8L2Jsb2NrcXVvdGU+CiAgICBJIGFtIG5vdCBzdXJlIGlmIEkgdW5kZXJzdGFuZCB5b3Ug Y29ycmVjdGx5LiBZb3Ugd2FudCB0byByZXR1cm4gYQogICAgY29tcGlsZWQgcGFja2FnZSBiaW5h cnkgYmFzZWQgb24gY2VydGFpbiBjcml0ZXJpYSBvciB5b3Ugd2FudCB0bwogICAgcmV0dXJuIGlu ZGl2aWR1YWwgYXNzZXRzIGJhc2VkIG9uIGNlcnRhaW4gY3JpdGVyaWE/IDxicj4KICAgIElmIGl0 cyB0aGUgZm9ybWVyLCB5b3UgY2FuIGRvIHRoaXMgdGhyb3VnaCBHdXZub3IgUkVTVCBBUEkgKHRv IGJlCiAgICBwcmVjaXNlLCBpdCBpcyB0aGUgbmV3IEpBWC1SUyBiYXNlZCBSRVNUIGFwaSkuIElu IHRoaXMgY2FzZSwgeW91CiAgICBkb250IHByb3ZpZGUgZmlsdGVycyB0aHJvdWdoIHRoZSBVUkwu IFdoZW4geW91IGhpdCB0aGUgUkVTVCBVUkwgZm9yCiAgICBleGFtcGxlIDxhIGNsYXNzPSJtb3ot dHh0LWxpbmstZnJlZXRleHQiIGhyZWY9Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9kcm9vbHMtZ3V2 bm9yL3Jlc3QvcGFja2FnZXMvbW9ydGdhZ2UiPmh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9kcm9vbHMt Z3V2bm9yL3Jlc3QvcGFja2FnZXMvbW9ydGdhZ2U8L2E+LAogICAgdGhlIFJFU1Qgc2VydmljZSB3 aWxsIGZpcnN0IGNoZWNrIGlmIHRoaXMgcGFja2FnZSdzIGJpbmFyeSBpcwogICAgdXAtdG8tZGF0 ZS4gSWYgbm90LCBpdCB3aWxsIGJ1aWxkIHRoZSBwYWNrYWdlIGZpcnN0LCB0aGVuIHJldHVybgog ICAgY29tcGlsZWQgYmluYXJ5LiBJdCBpcyB0aGUgR3V2bm9yIHNlbGVjdG9yIGluIGNoYXJnZSBv ZiB3aGljaCBhc3NldHMKICAgIGdldCBpbnRvIHRoZSBidWlsZC4gQXQgdGhlIG1vbWVudCwgd2Ug ZG9udCBoYXZlIGEgUkVTVCBBUEkgdG8KICAgIGNvbnRyb2wgd2hpY2ggc2VsZWN0b3IgaXMgdGFr aW5nIGVmZmVjdCBkdXJpbmcgdGhlIGJ1aWxkLCBidXQgaWYKICAgIHRoaXMgaXMgd2hhdCB5b3Ug bmVlZCwgSSBhbSBzdXJlIHdlIGNhbiBmaWd1cmUgdGhpcyBvdXQuPGJyPgogICAgPGJyPgogICAg PGJsb2NrcXVvdGUKY2l0ZT0ibWlkOjE5Mzc3NDI2OTEuMTA2NDYuMTMwNDU5NzU4OTgxNi5KYXZh TWFpbC5yb290QGNvbmZpYW5jZS5ldXJvZGVjaXNpb24uZnIiCiAgICAgIHR5cGU9ImNpdGUiPgog ICAgICA8cHJlIHdyYXA9IiI+SSBhbSBub3QgZmFtaWxpYXIgd2l0aCBmZWVkcywgYnV0IHRoZSBs YXN0IFhNTCBzYW1wbGUgb2YgeW91ciBsaW5rIHNlZW1zIHRvIGFsbG93IHNvbWUgZmlsdGVyaW5n ID8gT3IgaXMgaXQganVzdCBtZXRhZGF0YSBzZXQgaW4gdGhlIHBhY2thZ2UgPyBPciBpdCBpcyBw b3NzaWJsZSB0byBjcmVhdGUgZmVlZCB3aXRoIGZpbHRlcmVkIGFzc2V0cywgYW5kIHRoZW4gcXVl cnkgdGhlbSAodGhhdCB3b3VsZCBiZSBwZXJmZWN0IHRvbykuCgoKPC9wcmU+CiAgICA8L2Jsb2Nr cXVvdGU+CiAgICBJZiB3aGF0IHlvdSB3YW50IGlzIHRvIHJldHVybiBpbmRpdmlkdWFsIGFzc2V0 cywgeW91IGNhbiBzZW5kIGEgSFRUUAogICAgR0VUIHJlcXVlc3QgdG8gVVJMIDxhIGNsYXNzPSJq aXZlLWxpbmstd2lraS1zbWFsbCIKICAgICAgaHJlZj0iaHR0cDovL2NvbW11bml0eS5qYm9zcy5v cmcvZG9jcy9ET0MtMTYyMTciIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vaG9zdDpwb3J0bnVtYmVy L2Ryb29scy1ndXZub3IvcmVzdC9wYWNrYWdlcy9tb3J0Z2FnZS9hc3NldHM8L2E+CiAgICB3aXRo IEFjY2VwdD0iYXBwbGljYXRpb24vYXRvbSt4bWwiLCB0aGlzIHJldHVybnMgYSBsaXN0IG9mIGFz c2V0cwogICAgdW5kZXIgdGhlIG1vcnRnYWdlIHBhY2thZ2UgaW4gQXRvbSBmZWVkIGZvcm1hdC4g QW4gZXhhbXBsZSBsb29rcwogICAgbGlrZSBiZWxvdzogPGJyPgogICAgPHA+Jmx0O2ZlZWQgeG1s bnM9IjxhIGNsYXNzPSJqaXZlLWxpbmstZXh0ZXJuYWwtc21hbGwiCiAgICAgICAgaHJlZj0iaHR0 cDovL3d3dy53My5vcmcvMjAwNS9BdG9tIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3d3dy53My5v cmcvMjAwNS9BdG9tPC9hPiIKICAgICAgeG1sbnM6eG1sPSI8YSBjbGFzcz0iaml2ZS1saW5rLWV4 dGVybmFsLXNtYWxsIgogICAgICAgIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25h bWVzcGFjZSIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVz cGFjZTwvYT4iCiAgICAgIHhtbDpiYXNlPSI8YSBjbGFzcz0iaml2ZS1saW5rLWV4dGVybmFsLXNt YWxsIgogICAgICAgIGhyZWY9Imh0dHA6Ly9sb2NhbGhvc3Q6OTA4MC9yZXBvc2l0b3J5L3BhY2th Z2VzL3Rlc3RQYWNrYWdlMS9hc3NldHMiCiAgICAgICAgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9s b2NhbGhvc3Q6OTA4MC88L2E+PGEKICAgICAgICBjbGFzcz0iaml2ZS1saW5rLWV4dGVybmFsLXNt YWxsIgogICAgICAgIGhyZWY9Imh0dHA6Ly9sb2NhbGhvc3Q6OTA4MC9yZXBvc2l0b3J5L3BhY2th Z2VzL3Rlc3RQYWNrYWdlMS9hc3NldHMiCiAgICAgICAgdGFyZ2V0PSJfYmxhbmsiPmRyb29scy1n dXZub3IvcmVzdDwvYT48YQogICAgICAgIGNsYXNzPSJqaXZlLWxpbmstZXh0ZXJuYWwtc21hbGwi CiAgICAgICAgaHJlZj0iaHR0cDovL2xvY2FsaG9zdDo5MDgwL3JlcG9zaXRvcnkvcGFja2FnZXMv dGVzdFBhY2thZ2UxL2Fzc2V0cyIKICAgICAgICB0YXJnZXQ9Il9ibGFuayI+L3BhY2thZ2VzL21v cnRnYWdlL2Fzc2V0czwvYT4iJmd0Ozxicj4KICAgICAgwqDCoCAmbHQ7dGl0bGUmZ3Q7dGVzdFBh Y2thZ2UxJ3MgYXNzZXQmbHQ7L3RpdGxlJmd0OzwvcD4KICAgIDxwPsKgwqAgJmx0O2VudHJ5IHht bDpiYXNlPSI8YSBjbGFzcz0iaml2ZS1saW5rLWV4dGVybmFsLXNtYWxsIgogICAgICAgIGhyZWY9 Imh0dHA6Ly9sb2NhbGhvc3Q6OTA4MC9yZXBvc2l0b3J5L3BhY2thZ2VzL3Rlc3RQYWNrYWdlMS9h c3NldHMiCiAgICAgICAgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9sb2NhbGhvc3Q6OTA4MC9kcm9v bHMtZ3V2bm9yL3Jlc3QvcGFja2FnZXMvPC9hPjxhCiAgICAgICAgY2xhc3M9ImppdmUtbGluay1l eHRlcm5hbC1zbWFsbCIKaHJlZj0iaHR0cDovL2xvY2FsaG9zdDo5MDgwL3JlcG9zaXRvcnkvcGFj a2FnZXMvcGFja2FnZU5hbWUvYXNzZXQvdGVzdEFzc2V0MiIKICAgICAgICB0YXJnZXQ9Il9ibGFu ayI+bW9ydGdhZ2U8L2E+PGEgY2xhc3M9ImppdmUtbGluay1leHRlcm5hbC1zbWFsbCIKaHJlZj0i aHR0cDovL2xvY2FsaG9zdDo5MDgwL3JlcG9zaXRvcnkvcGFja2FnZXMvdGVzdFBhY2thZ2UxL2Fz c2V0cyIKICAgICAgICB0YXJnZXQ9Il9ibGFuayI+L2Fzc2V0czwvYT4iJmd0Ozxicj4KICAgICAg wqDCoMKgwqAgJmx0O3RpdGxlJmd0O3Rlc3RBc3NldDEmbHQ7L3RpdGxlJmd0Ozxicj4KICAgICAg wqDCoMKgwqAgJmx0O2xpbmsgaHJlZj0iPGEgY2xhc3M9ImppdmUtbGluay1leHRlcm5hbC1zbWFs bCIKaHJlZj0iaHR0cDovL2xvY2FsaG9zdDo5MDgwL3JlcG9zaXRvcnkvcGFja2FnZXMvcGFja2Fn ZU5hbWUvYXNzZXQvdGVzdEFzc2V0MSIKICAgICAgICB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL2xv Y2FsaG9zdDo5MDgwLzwvYT48YQogICAgICAgIGNsYXNzPSJqaXZlLWxpbmstZXh0ZXJuYWwtc21h bGwiCiAgICAgICAgaHJlZj0iaHR0cDovL2xvY2FsaG9zdDo5MDgwL3JlcG9zaXRvcnkvcGFja2Fn ZXMvdGVzdFBhY2thZ2UxL2Fzc2V0cyIKICAgICAgICB0YXJnZXQ9Il9ibGFuayI+ZHJvb2xzLWd1 dm5vci9yZXN0PC9hPjxhCiAgICAgICAgY2xhc3M9ImppdmUtbGluay1leHRlcm5hbC1zbWFsbCIK aHJlZj0iaHR0cDovL2xvY2FsaG9zdDo5MDgwL3JlcG9zaXRvcnkvcGFja2FnZXMvcGFja2FnZU5h bWUvYXNzZXQvdGVzdEFzc2V0MSIKICAgICAgICB0YXJnZXQ9Il9ibGFuayI+L3BhY2thZ2VzLzwv YT48YQogICAgICAgIGNsYXNzPSJqaXZlLWxpbmstZXh0ZXJuYWwtc21hbGwiCmhyZWY9Imh0dHA6 Ly9sb2NhbGhvc3Q6OTA4MC9yZXBvc2l0b3J5L3BhY2thZ2VzL3BhY2thZ2VOYW1lL2Fzc2V0L3Rl c3RBc3NldDIiCiAgICAgICAgdGFyZ2V0PSJfYmxhbmsiPm1vcnRnYWdlPC9hPjxhIGNsYXNzPSJq aXZlLWxpbmstZXh0ZXJuYWwtc21hbGwiCmhyZWY9Imh0dHA6Ly9sb2NhbGhvc3Q6OTA4MC9yZXBv c2l0b3J5L3BhY2thZ2VzL3BhY2thZ2VOYW1lL2Fzc2V0L3Rlc3RBc3NldDEiCiAgICAgICAgdGFy Z2V0PSJfYmxhbmsiPi9hc3NldHMvdGVzdEFzc2V0MTwvYT4iIC8mZ3Q7PGJyPgogICAgICDCoMKg ICZsdDsvZW50cnkmZ3Q7PC9wPgogICAgPHA+wqDCoMKgICZsdDtlbnRyeSB4bWw6YmFzZT0iPGEg Y2xhc3M9ImppdmUtbGluay1leHRlcm5hbC1zbWFsbCIKICAgICAgICBocmVmPSJodHRwOi8vbG9j YWxob3N0OjkwODAvcmVwb3NpdG9yeS9wYWNrYWdlcy90ZXN0UGFja2FnZTEvYXNzZXRzIgogICAg ICAgIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vbG9jYWxob3N0OjkwODAvPC9hPjxhCiAgICAgICAg Y2xhc3M9ImppdmUtbGluay1leHRlcm5hbC1zbWFsbCIKICAgICAgICBocmVmPSJodHRwOi8vbG9j YWxob3N0OjkwODAvcmVwb3NpdG9yeS9wYWNrYWdlcy90ZXN0UGFja2FnZTEvYXNzZXRzIgogICAg ICAgIHRhcmdldD0iX2JsYW5rIj5kcm9vbHMtZ3V2bm9yL3Jlc3Q8L2E+PGEKICAgICAgICBjbGFz cz0iaml2ZS1saW5rLWV4dGVybmFsLXNtYWxsIgogICAgICAgIGhyZWY9Imh0dHA6Ly9sb2NhbGhv c3Q6OTA4MC9yZXBvc2l0b3J5L3BhY2thZ2VzL3Rlc3RQYWNrYWdlMS9hc3NldHMiCiAgICAgICAg dGFyZ2V0PSJfYmxhbmsiPi9wYWNrYWdlcy88L2E+PGEKICAgICAgICBjbGFzcz0iaml2ZS1saW5r LWV4dGVybmFsLXNtYWxsIgpocmVmPSJodHRwOi8vbG9jYWxob3N0OjkwODAvcmVwb3NpdG9yeS9w YWNrYWdlcy9wYWNrYWdlTmFtZS9hc3NldC90ZXN0QXNzZXQyIgogICAgICAgIHRhcmdldD0iX2Js YW5rIj5tb3J0Z2FnZTwvYT48YSBjbGFzcz0iaml2ZS1saW5rLWV4dGVybmFsLXNtYWxsIgpocmVm PSJodHRwOi8vbG9jYWxob3N0OjkwODAvcmVwb3NpdG9yeS9wYWNrYWdlcy90ZXN0UGFja2FnZTEv YXNzZXRzIgogICAgICAgIHRhcmdldD0iX2JsYW5rIj4vYXNzZXRzPC9hPiImZ3Q7PGJyPgogICAg ICDCoMKgwqDCoCAmbHQ7dGl0bGUmZ3Q7dGVzdEFzc2V0MiZsdDsvdGl0bGUmZ3Q7PGJyPgogICAg ICDCoMKgwqDCoCAmbHQ7bGluayBocmVmPSI8YSBjbGFzcz0iaml2ZS1saW5rLWV4dGVybmFsLXNt YWxsIgpocmVmPSJodHRwOi8vbG9jYWxob3N0OjkwODAvcmVwb3NpdG9yeS9wYWNrYWdlcy9wYWNr YWdlTmFtZS9hc3NldC90ZXN0QXNzZXQyIgogICAgICAgIHRhcmdldD0iX2JsYW5rIj5odHRwOi8v bG9jYWxob3N0OjkwODAvPC9hPjxhCiAgICAgICAgY2xhc3M9ImppdmUtbGluay1leHRlcm5hbC1z bWFsbCIKICAgICAgICBocmVmPSJodHRwOi8vbG9jYWxob3N0OjkwODAvcmVwb3NpdG9yeS9wYWNr YWdlcy90ZXN0UGFja2FnZTEvYXNzZXRzIgogICAgICAgIHRhcmdldD0iX2JsYW5rIj5kcm9vbHMt Z3V2bm9yL3Jlc3Q8L2E+PGEKICAgICAgICBjbGFzcz0iaml2ZS1saW5rLWV4dGVybmFsLXNtYWxs IgpocmVmPSJodHRwOi8vbG9jYWxob3N0OjkwODAvcmVwb3NpdG9yeS9wYWNrYWdlcy9wYWNrYWdl TmFtZS9hc3NldC90ZXN0QXNzZXQyIgogICAgICAgIHRhcmdldD0iX2JsYW5rIj4vcGFja2FnZXMv bW9ydGdhZ2UvYXNzZXRzL3Rlc3RBc3NldDI8L2E+IiAvJmd0Ozxicj4KICAgICAgwqDCoCAmbHQ7 L2VudHJ5Jmd0Ozxicj4KICAgICAgJmx0Oy9mZWVkJmd0Ozxicj4KICAgIDwvcD4KICAgIDxwPlRo ZW4geW91IGNhbiBmdXJ0aGVyIG5hdmlnYXRlIHRvIGluZGl2aWR1YWwgYXNzZXRzIHVzaW5nIHRo ZSBsaW5rCiAgICAgIHJldHVybmVkLiBGb3IgZXhhbXBsZSBhIEdFVCByZXF1ZXN0IHRvIDxhCiAg ICAgICAgY2xhc3M9ImppdmUtbGluay13aWtpLXNtYWxsIgogICAgICAgIGhyZWY9Imh0dHA6Ly9j b21tdW5pdHkuamJvc3Mub3JnL2RvY3MvRE9DLTE2MjE3IiB0YXJnZXQ9Il9ibGFuayI+aHR0cDov L2hvc3Q6cG9ydG51bWJlci88L2E+PGEKICAgICAgICBjbGFzcz0iaml2ZS1saW5rLWV4dGVybmFs LXNtYWxsIgogICAgICAgIGhyZWY9Imh0dHA6Ly9sb2NhbGhvc3Q6OTA4MC9yZXBvc2l0b3J5L3Bh Y2thZ2VzL3Rlc3RQYWNrYWdlMS9hc3NldHMiCiAgICAgICAgdGFyZ2V0PSJfYmxhbmsiPmRyb29s cy1ndXZub3IvcmVzdDwvYT48YQogICAgICAgIGNsYXNzPSJqaXZlLWxpbmstZXh0ZXJuYWwtc21h bGwiCmhyZWY9Imh0dHA6Ly9sb2NhbGhvc3Q6OTA4MC9yZXBvc2l0b3J5L3BhY2thZ2VzL3BhY2th Z2VOYW1lL2Fzc2V0L3Rlc3RBc3NldDIiCiAgICAgICAgdGFyZ2V0PSJfYmxhbmsiPi9wYWNrYWdl cy9tb3J0Z2FnZS9hc3NldHM8L2E+PGEKICAgICAgICBjbGFzcz0iaml2ZS1saW5rLXdpa2ktc21h bGwiCiAgICAgICAgaHJlZj0iaHR0cDovL2NvbW11bml0eS5qYm9zcy5vcmcvZG9jcy9ET0MtMTYy MTciIHRhcmdldD0iX2JsYW5rIj4vdGVzdEFzc2V0MTwvYT4KICAgICAgd2l0aCBBY2NlcHQ9ImFw cGxpY2F0aW9uL2F0b20reG1sIiByZXR1cm5zIGFuIGF0b20gZW50cnkgd2hpY2ggaXMKICAgICAg dGhlIG1ldGEgZGF0YSBpbmZvIG9mIHRoYXQgYXNzZXQuIE9yIFVSTCA8YQogICAgICAgIGNsYXNz PSJqaXZlLWxpbmstd2lraS1zbWFsbCIKICAgICAgICBocmVmPSJodHRwOi8vY29tbXVuaXR5Lmpi b3NzLm9yZy9kb2NzL0RPQy0xNjIxNyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9ob3N0OnBvcnRu dW1iZXIvPC9hPjxhCiAgICAgICAgY2xhc3M9ImppdmUtbGluay1leHRlcm5hbC1zbWFsbCIKICAg ICAgICBocmVmPSJodHRwOi8vbG9jYWxob3N0OjkwODAvcmVwb3NpdG9yeS9wYWNrYWdlcy90ZXN0 UGFja2FnZTEvYXNzZXRzIgogICAgICAgIHRhcmdldD0iX2JsYW5rIj5kcm9vbHMtZ3V2bm9yL3Jl c3Q8L2E+PGEKICAgICAgICBjbGFzcz0iaml2ZS1saW5rLWV4dGVybmFsLXNtYWxsIgpocmVmPSJo dHRwOi8vbG9jYWxob3N0OjkwODAvcmVwb3NpdG9yeS9wYWNrYWdlcy9wYWNrYWdlTmFtZS9hc3Nl dC90ZXN0QXNzZXQyIgogICAgICAgIHRhcmdldD0iX2JsYW5rIj4vcGFja2FnZXMvbW9ydGdhZ2Uv YXNzZXRzPC9hPjxhCiAgICAgICAgY2xhc3M9ImppdmUtbGluay13aWtpLXNtYWxsIgogICAgICAg IGhyZWY9Imh0dHA6Ly9jb21tdW5pdHkuamJvc3Mub3JnL2RvY3MvRE9DLTE2MjE3IiB0YXJnZXQ9 Il9ibGFuayI+L3Rlc3RBc3NldDEvc291cmNlPC9hPgogICAgICB0byByZXR1cm4gc291cmNlIGFu ZCBVUkwgPGEgY2xhc3M9ImppdmUtbGluay13aWtpLXNtYWxsIgogICAgICAgIGhyZWY9Imh0dHA6 Ly9jb21tdW5pdHkuamJvc3Mub3JnL2RvY3MvRE9DLTE2MjE3IiB0YXJnZXQ9Il9ibGFuayI+aHR0 cDovL2hvc3Q6cG9ydG51bWJlci88L2E+PGEKICAgICAgICBjbGFzcz0iaml2ZS1saW5rLWV4dGVy bmFsLXNtYWxsIgogICAgICAgIGhyZWY9Imh0dHA6Ly9sb2NhbGhvc3Q6OTA4MC9yZXBvc2l0b3J5 L3BhY2thZ2VzL3Rlc3RQYWNrYWdlMS9hc3NldHMiCiAgICAgICAgdGFyZ2V0PSJfYmxhbmsiPmRy b29scy1ndXZub3IvcmVzdDwvYT48YQogICAgICAgIGNsYXNzPSJqaXZlLWxpbmstZXh0ZXJuYWwt c21hbGwiCmhyZWY9Imh0dHA6Ly9sb2NhbGhvc3Q6OTA4MC9yZXBvc2l0b3J5L3BhY2thZ2VzL3Bh Y2thZ2VOYW1lL2Fzc2V0L3Rlc3RBc3NldDIiCiAgICAgICAgdGFyZ2V0PSJfYmxhbmsiPi9wYWNr YWdlcy9tb3J0Z2FnZS9hc3NldHM8L2E+PGEKICAgICAgICBjbGFzcz0iaml2ZS1saW5rLXdpa2kt c21hbGwiCiAgICAgICAgaHJlZj0iaHR0cDovL2NvbW11bml0eS5qYm9zcy5vcmcvZG9jcy9ET0Mt MTYyMTciIHRhcmdldD0iX2JsYW5rIj4vdGVzdEFzc2V0MS9iaW5hcnk8L2E+CiAgICAgIHRvIHJl dHVybiBiaW5hcnkgY29udGVudC48YnI+CiAgICA8L3A+CiAgICA8cD5KQVgtUlMgZG9lcyBzdXBw b3J0IHF1ZXJ5IHVzaW5nIFVSTCBsaWtlIDxhCiAgICAgICAgY2xhc3M9ImppdmUtbGluay13aWtp LXNtYWxsIgogICAgICAgIGhyZWY9Imh0dHA6Ly9jb21tdW5pdHkuamJvc3Mub3JnL2RvY3MvRE9D LTE2MjE3IiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL2hvc3Q6cG9ydG51bWJlci9kcm9vbHMtZ3V2 bm9yL3Jlc3QvcGFja2FnZXMvbW9ydGdhZ2UvYXNzZXRzPC9hPj9jYXRlZ29yeT1mb28mYW1wO2Nh dGVnb3J5PWJhciZhbXA7c3RhdHVzPXByb2QKICAgICAgKGFuZCBzZXZlcmFsIG90aGVyIHF1ZXJ5 IG1lY2hhbmlzbXMpLiBCdXQgd2UgaGF2ZSBub3QgaW1wbGVtZW50ZWQKICAgICAgcXVlcnkgaW4g R3V2bm9yIHlldC4gT2YgY291cnNlIHlvdSB3aWxsIGJlIHZlcnkgd2VsY29tZSBpZiB5b3UKICAg ICAgd2FudCB0byBoZWxwIDstKTwvcD4KICAgIDxwPgogICAgICBGb3IgbW9yZSBpbmZvcm1hdGlv biBhYm91dCBHdXZub3IgUkVTVCBpbnRlcmZhY2UgcGxlYXNlIGNoZWNrOgogICAgICA8YSBjbGFz cz0ibW96LXR4dC1saW5rLWZyZWV0ZXh0IiBocmVmPSJodHRwOi8vYmxvZy5hdGhpY28uY29tLzIw MTEvMDMvYXRvbXB1Yi1pbnRlcmZhY2UtZm9yLWd1dm5vci5odG1sIj5odHRwOi8vYmxvZy5hdGhp Y28uY29tLzIwMTEvMDMvYXRvbXB1Yi1pbnRlcmZhY2UtZm9yLWd1dm5vci5odG1sPC9hPgogICAg ICBhbmQgPGEgY2xhc3M9Im1vei10eHQtbGluay1mcmVldGV4dCIgaHJlZj0iaHR0cDovL2NvbW11 bml0eS5qYm9zcy5vcmcvd2lraS9BdG9tUHViaW50ZXJmYWNlZm9yR3V2bm9yIj5odHRwOi8vY29t bXVuaXR5Lmpib3NzLm9yZy93aWtpL0F0b21QdWJpbnRlcmZhY2Vmb3JHdXZub3I8L2E+PGJyPgog ICAgICA8YnI+CiAgICA8L3A+CiAgICA8cD5DaGVlcnMsPGJyPgogICAgICBKZXJ2aXM8YnI+CiAg ICAgIDxicj4KICAgIDwvcD4KICAgIDxibG9ja3F1b3RlCmNpdGU9Im1pZDoxOTM3NzQyNjkxLjEw NjQ2LjEzMDQ1OTc1ODk4MTYuSmF2YU1haWwucm9vdEBjb25maWFuY2UuZXVyb2RlY2lzaW9uLmZy IgogICAgICB0eXBlPSJjaXRlIj4KICAgICAgPHByZSB3cmFwPSIiPk90aGVyd2lzZSBJIHRoaW5r IEkgZGkgaGF2ZSB0byB3cml0ZSBteSBvd24gc2VydmxldCBkb2luZyB0aGF0IChsaWtlIE1pY2hh ZWwgc3VnZ2VzdHMpLCBvciBmaW5kIGFub3RoZXIgc29sdXRpb24uCgoKCi0tLS0tIE1haWwgb3Jp Z2luYWwgLS0tLS0KRGU6ICJKZXJ2aXMgTGl1IiA8YSBjbGFzcz0ibW96LXR4dC1saW5rLXJmYzIz OTZFIiBocmVmPSJtYWlsdG86amxpdUByZWRoYXQuY29tIj4mbHQ7amxpdUByZWRoYXQuY29tJmd0 OzwvYT4Kw4A6IDxhIGNsYXNzPSJtb3otdHh0LWxpbmstYWJicmV2aWF0ZWQiIGhyZWY9Im1haWx0 bzpydWxlcy11c2Vyc0BsaXN0cy5qYm9zcy5vcmciPnJ1bGVzLXVzZXJzQGxpc3RzLmpib3NzLm9y ZzwvYT4KRW52b3nDqTogSmV1ZGkgNSBNYWkgMjAxMSAwNDo0ODo0NQpPYmpldDogUmU6IFtydWxl cy11c2Vyc10gR3V2bm9yIHNlcnZpY2UgdG8gY29tcGlsZSBwYXJ0IG9mIGEgcGFja2FnZSA/CgpP biAyMDExLzUvNCAyMjo1NywgVmluY2VudCBMZWdlbmRyZSB3cm90ZToKPC9wcmU+CiAgICAgIDxi bG9ja3F1b3RlIHR5cGU9ImNpdGUiPgogICAgICAgIDxwcmUgd3JhcD0iIj5IaSBhbGwsCgpJIGFt IGxvb2tpbmcgZm9yIGEgY2xldmVyIHdheSB0byBjb21waWxlIG9ubHkgcGFydHMgb2YgYSBHdXZu b3IgcGFja2FnZQphY2NvcmRpbmcgdG8gc29tZSBjcml0ZXJpYSBvbiBpdGVtcyAoY2F0ZWdvcmll cywgbWV0YWRhdGEgLi4uKSwgYnV0Cm91dHNpZGUgR3V2bm9yIGlmIHBvc3NpYmxlLgpUaGUgbWFp biBpZGVhIHN0YXJ0cyBieSB0aGUgZmFjdCB0aGF0IGl0IGlzIGEgbGl0dGxlIGJpdCBjb21wbGV4 IGZvciBhCmJ1c2luZXNzIHVzZXIgdG8gbWFuYWdlIHBhY2thZ2VzIGFuZCBjb21waWxhdGlvbnMs IGFuZCBldmVuIG1vcmUgaWYgaGUKaGFzIHRvIG1hbmFnZSBjb25kaXRpb25hbCBjb21waWxhdGlv bnMgKHVzaW5nIHNlbGVjdG9ycykgb2YgYSBzaW5nbGUKcGFja2FnZSB0byBwcm9kdWNlIG11bHRp cGxlIEtCIGNvbXBpbGVkIGFjY29yZGluZyB0byBidXNpbmVzcyBjcml0ZXJpb25zLgoKSSB3YW50 IHRvIGNvbXBpbGUgYXV0b21hdGljYWxseSBzb21lIEtCIGFjY29yZGluZyB0byBjYXRlZ29yaWVz IChtb3JlCmdlbmVyYWxseSBhc3NldCdzIGZpZWxkcykgd2l0aCBzb21ldGhpbmcgZXh0ZXJuYWwg dG8gR3V2bm9yLiBUaHVzIEkgbmVlZAphIHdheSB0byBxdWVyeSBHdXZub3IgcmVwb3NpdG9yeSB3 aXRoIGNyaXRlcmlvbiB0byBnZXQgZWl0aGVyIDoKICAgICAgLSB0aGUgY29ycmVzcG9uZGluZyBy ZXNzb3VyY2VzIChEUkwpCiAgICAgIC0gdGhlIGZpbHRlcmVkIGNvbXBpbGVkIEtCIChQS0cgcmVz c291cmNlKQpGaWx0ZXJpbmcgd2l0aCBEUkwgKGxpa2UgY3VzdG9tIHNlbGVjdG9ycyBpbiBHdXZu b3IpIHdpbGwgYmUgcGVyZmVjdCwKdXNpbmcgYSBjdXN0b20gY2xhc3MgdG9vLgoKSXMgdGhlcmUg c3VjaCBzZXJ2aWNlID8KRG9lcyB0aGUgS25vd2xlZGdlQWdlbnQgYWxsb3cgZmlsdGVyaW5nIChk aWQgbm90IHNlZSBhbnl0aGluZyBpbiBkb2NzKSA/CjwvcHJlPgogICAgICA8L2Jsb2NrcXVvdGU+ CiAgICAgIDxwcmUgd3JhcD0iIj5Ob3Qgc3VyZSBhYm91dCBLbm93bGVkZ2VBZ2VudCwgSSBsbCBs ZWF2ZSB0aGlzIHF1ZXN0aW9uIHRvIHNvbWVvbmUgbW9yZSAKZmFtaWxpYXIgd2l0aCBLbm93bGVk Z2VBZ2VudC4gQXQgdGhlIHNhbWUgdGltZSwgeW91IGNhbiBwcm9iYWJseSB1c2UgCkd1dm5vciBS RVNUIHNlcnZpY2UgdG8gYWNoaWV2ZSBzYW1lIGdvYWwuIENoZWNrIHRoaXMgZXhhbXBsZTogCjxh IGNsYXNzPSJtb3otdHh0LWxpbmstZnJlZXRleHQiIGhyZWY9Imh0dHA6Ly9jb21tdW5pdHkuamJv c3Mub3JnL3dpa2kvUHVibGlzaERyb29sc2FydGlmYWN0c2Zyb21hcHJvZHVjdGlvbmVudmlyb25t ZW50Ij5odHRwOi8vY29tbXVuaXR5Lmpib3NzLm9yZy93aWtpL1B1Ymxpc2hEcm9vbHNhcnRpZmFj dHNmcm9tYXByb2R1Y3Rpb25lbnZpcm9ubWVudDwvYT4uIApUaGlzIGV4YW1wbGUgcG9sbHMgcGFj a2FnZSBmZWVkIHBlcmlvZGljYWxseSB0byBjaGVjayBpZiB0aGVyZSBpcyBhIG5ldyAKdmVyc2lv biBvZiBwYWNrYWdlIGF2YWlsYWJsZS4gSWYgdGhlcmUgaXMgYSBuZXcgdmVyc2lvbiBjcmVhdGVk LCBpdCB3aWxsIApkb3dubG9hZCB0aGUgcGFja2FnZSBjb21waWxlZCBiaW5hcnkuIFBhY2thZ2Ug YmluYXJ5IGlzIGNvbXBpbGVkIGFnYWluc3QgCnNlbGVjdG9ycywgc28gaXQgaXMgZmlsdGVyZWQg YXMgeW91IG5lZWQuCgpDaGVlcnMsCkplcnZpcwoKCgoKCjwvcHJlPgogICAgICA8YmxvY2txdW90 ZSB0eXBlPSJjaXRlIj4KICAgICAgICA8cHJlIHdyYXA9IiI+T3IgZG8gSSBuZWVkIHRvIGFkZCBh IG5ldyBzZXJ2aWNlIGluIEd1dm5vciB3YXIgZGlyZWN0bHkgPwoKVGhhbmtzIQpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpydWxlcy11c2VycyBtYWlsaW5n IGxpc3QKPGEgY2xhc3M9Im1vei10eHQtbGluay1hYmJyZXZpYXRlZCIgaHJlZj0ibWFpbHRvOnJ1 bGVzLXVzZXJzQGxpc3RzLmpib3NzLm9yZyI+cnVsZXMtdXNlcnNAbGlzdHMuamJvc3Mub3JnPC9h Pgo8YSBjbGFzcz0ibW96LXR4dC1saW5rLWZyZWV0ZXh0IiBocmVmPSJodHRwczovL2xpc3RzLmpi b3NzLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3J1bGVzLXVzZXJzIj5odHRwczovL2xpc3RzLmpib3Nz Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3J1bGVzLXVzZXJzPC9hPgo8L3ByZT4KICAgICAgPC9ibG9j a3F1b3RlPgogICAgICA8cHJlIHdyYXA9IiI+Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCnJ1bGVzLXVzZXJzIG1haWxpbmcgbGlzdAo8YSBjbGFzcz0ibW96 LXR4dC1saW5rLWFiYnJldmlhdGVkIiBocmVmPSJtYWlsdG86cnVsZXMtdXNlcnNAbGlzdHMuamJv c3Mub3JnIj5ydWxlcy11c2Vyc0BsaXN0cy5qYm9zcy5vcmc8L2E+CjxhIGNsYXNzPSJtb3otdHh0 LWxpbmstZnJlZXRleHQiIGhyZWY9Imh0dHBzOi8vbGlzdHMuamJvc3Mub3JnL21haWxtYW4vbGlz dGluZm8vcnVsZXMtdXNlcnMiPmh0dHBzOi8vbGlzdHMuamJvc3Mub3JnL21haWxtYW4vbGlzdGlu Zm8vcnVsZXMtdXNlcnM8L2E+CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpydWxlcy11c2VycyBtYWlsaW5nIGxpc3QKPGEgY2xhc3M9Im1vei10eHQtbGlu ay1hYmJyZXZpYXRlZCIgaHJlZj0ibWFpbHRvOnJ1bGVzLXVzZXJzQGxpc3RzLmpib3NzLm9yZyI+ cnVsZXMtdXNlcnNAbGlzdHMuamJvc3Mub3JnPC9hPgo8YSBjbGFzcz0ibW96LXR4dC1saW5rLWZy ZWV0ZXh0IiBocmVmPSJodHRwczovL2xpc3RzLmpib3NzLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3J1 bGVzLXVzZXJzIj5odHRwczovL2xpc3RzLmpib3NzLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3J1bGVz LXVzZXJzPC9hPgo8L3ByZT4KICAgIDwvYmxvY2txdW90ZT4KICAgIDxicj4KICA8L2JvZHk+Cjwv aHRtbD4K --===============5875741936319121448==--