From alvaro.fernandez at sivsa.com Thu Aug 20 11:19:16 2015 Content-Type: multipart/mixed; boundary="===============7441064009551444630==" MIME-Version: 1.0 From: Alvaro Jose Fernandez To: rhq-users at lists.fedorahosted.org Subject: RE: question about RHQ 2.3.1 not discovering Hibernate MBean deployedon a Jboss instance Date: Thu, 14 Jan 2010 14:17:16 +0100 Message-ID: <607D6181D9919041BE792D70EF2AEC48DAAE76@LIMENS.sivsa.int> In-Reply-To: 607D6181D9919041BE792D70EF2AEC4801A088@LIMENS.sivsa.int --===============7441064009551444630== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Hi, = Many thanks for the clarification - it works ok now. = Best regards, = Alvaro = ________________________________ De: rhq-users-bounces(a)lists.fedorahosted.org en nombre de John Mazzitelli Enviado el: mi=C3=A9 13/01/2010 23:27 Para: rhq-users(a)lists.fedorahosted.org Asunto: Re: question about RHQ 2.3.1 not discovering Hibernate MBean deploy= edon a Jboss instance From the hibernate plugin descriptor, you can see the default name of the MBean should follow this pattern "Hibernate:application=3D%application%,type=3Dstatistics" where %application% is some name you provide when you registered the MBean. Specifically, see this in the plugin-config: found in the descriptor of the hibernate plugin at modules/plugins/hibernate (fedorahosted.org is currently down, can't post a link). Here's the help text found in the descriptor file that explains how you can deploy the hibernate bean using Java code:

In order to monitor Hibernate statistics via JON, the Hibernate Session Manager MBean must be deployed to an object name of the format _"Hibernate:application=3D%application%,type=3Dstatistics"_, and statistics must be enabled.

Some example code is provided below to register the Hibernate Session MBean within an EJB3 application.

  public static void enableHibernateStatistics(EntityManager entityManager)
  {
     try
     {
        StatisticsService mBean =3D new StatisticsService();
        SessionFactory sessionFactory =3D
getHibernateSession(entityManager).getSessionFactory();
        mBean.setSessionFactory(sessionFactory);
        ObjectName objectName =3D new
ObjectName(HIBERNATE_STATISTICS_MBEAN_OBJECTNAME);
        MBeanServer jbossMBeanServer =3D getJBossMBeanServer();
        jbossMBeanServer.registerMBean(mBean, objectName);
        sessionFactory.getStatistics().setStatisticsEnabled(true);
     }
     catch (InstanceAlreadyExistsException iaee)
     {
        LOG.info("Duplicate MBean registration ignored: " +
HIBERNATE_STATISTICS_MBEAN_OBJECTNAME);
     }
     catch (Exception e)
     {
        LOG.warn("Couldn't register Hibernate statistics MBean.", e);
     }
  }

  private static Session getHibernateSession(EntityManager entityManager) {
     Session session;
     if (entityManager.getDelegate() instanceof EntityManagerImpl) {
         EntityManagerImpl entityManagerImpl =3D (EntityManagerImpl)
entityManager.getDelegate();
         session =3D entityManagerImpl.getSession();
     } else {
         session =3D (Session) entityManager.getDelegate();
     }
     return session;
  }

  private static MBeanServer getJBossMBeanServer() {
     List<MBeanServer> servers =3D
MBeanServerFactory.findMBeanServer(null);
     MBeanServer jbossServer =3D null;
     for (MBeanServer server : servers) {
         if ("jboss".equals(server.getDefaultDomain())) {
             jbossServer =3D server;
         }
     }
     if (jbossServer =3D=3D null) {
         jbossServer =3D ManagementFactory.getPlatformMBeanServer();
     }
     return jbossServer;
  }
           

See also Publishing statistics through JMX and Enabling Hibernate statistics

On 01/13/2010 05:17 PM, Alvaro Jose Fernandez wrote: > I'm having problems trying to get RHQ discover a Hibernate Statistics > mbean deployed inside an application over a Jboss 4.2.3 server. Also, it > happens the same when the app is inside a Tomcat container. > > All jmx access/level flags (unauthenticated access, no ssl, port > established) are in place in the JVM invocation , etc. > > ## run.conf for the Jboss instance > JAVA_OPTS=3D"$JAVA_OPTS -Dcom.sun.management.jmxremote" > JAVA_OPTS=3D"$JAVA_OPTS -Djavax.management.builder.initial=3Dorg.jboss.sy= stem.server.jmx.MBeanServerBuilderImpl" > JAVA_OPTS=3D"$JAVA_OPTS -Djboss.platform.mbeanserver" > JAVA_OPTS=3D"$JAVA_OPTS -Dcom.sun.management.jmxremote.port=3D9003" > JAVA_OPTS=3D"$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=3Dfalse" > JAVA_OPTS=3D"$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=3Dfal= se" > > Tried some methods from > http://www.rhq-project.org/display/RHQ/Plugins+-+Demos+-+Monitoring+Hibe > rnate to no avail (manually adding a service of type JMX Server) > > I'm and dev team are kinda puzzled by this. The app uses Spring and > Hibernate 3.1. A printscreen from Jconsole (below), or querying > explicitly the mbean via RMI ..works ok.Tried also using excellent > jmx_console app from Phillip Traeder, and works ok too: > > root(a)fuchinos:/opt/jmxtools# ./jmx_console.sh get_attribute --host=3Dj= 2ee > --port=3D9003 --object_name=3Dorg.hibernate:type=3Dstatistics > --attribute_name=3DQueries > > org.hibernate:type=3Dstatistics/Queries : select p from > ParametroConfiguracion p > > root(a)fuchinos:/opt/jmxtools# > > I'm not a java developer, but I'm guessing there would be some sort of > deviation in the manner the dev team initialized the Hibernate JMX > mbean, perhaps the naming is not being recognized by the Hibernate RHQ > plugin because of that? > > Any help is much appreciated. Sorry the length and the print screens > below, they are meant to illustrate a work ok/no ok view (the Hibernate > plugin folder missing from "j2ee" Jboss instance). > > N.b.: print screens erased, since they exceed the maximum for the list. > > Regards, > > Alvaro _______________________________________________ rhq-users mailing list rhq-users(a)lists.fedorahosted.org https://fedorahosted.org/mailman/listinfo/rhq-users --===============7441064009551444630== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PGh0bWwgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiIHhtbG5zOm89InVy bjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIgeG1sbnM6dz0idXJuOnNjaGVt YXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIgeG1sbnM6c3QxPSJ1cm46c2NoZW1hcy1taWNy b3NvZnQtY29tOm9mZmljZTpzbWFydHRhZ3MiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9S RUMtaHRtbDQwIj4KCjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50 PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+CjxtZXRhIG5hbWU9R2VuZXJhdG9yIGNv bnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDExIChmaWx0ZXJlZCBtZWRpdW0pIj4KPCEtLVtpZiAhbXNv XT4KPHN0eWxlPgp2XDoqIHtiZWhhdmlvcjp1cmwoI2RlZmF1bHQjVk1MKTt9Cm9cOioge2JlaGF2 aW9yOnVybCgjZGVmYXVsdCNWTUwpO30Kd1w6KiB7YmVoYXZpb3I6dXJsKCNkZWZhdWx0I1ZNTCk7 fQouc2hhcGUge2JlaGF2aW9yOnVybCgjZGVmYXVsdCNWTUwpO30KPC9zdHlsZT4KPCFbZW5kaWZd LS0+Cjx0aXRsZT5SZTogcXVlc3Rpb24gYWJvdXQgUkhRIDIuMy4xIG5vdCBkaXNjb3ZlcmluZyBI aWJlcm5hdGUgTUJlYW4gZGVwbG95ZWRvbgphIEpib3NzIGluc3RhbmNlPC90aXRsZT4KPG86U21h cnRUYWdUeXBlIG5hbWVzcGFjZXVyaT0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6 c21hcnR0YWdzIgogbmFtZT0iUGVyc29uTmFtZSIvPgo8IS0tW2lmICFtc29dPgo8c3R5bGU+CnN0 MVw6KntiZWhhdmlvcjp1cmwoI2RlZmF1bHQjaWVvb3VpKSB9Cjwvc3R5bGU+CjwhW2VuZGlmXS0t Pgo8c3R5bGU+CjwhLS0KIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KIEBmb250LWZhY2UKCXtmb250 LWZhbWlseTpUYWhvbWE7CglwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDt9CiAvKiBTdHls ZSBEZWZpbml0aW9ucyAqLwogcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1h bAoJe21hcmdpbjowY207CgltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Cglmb250LXNpemU6MTIuMHB0 OwoJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQphOmxpbmssIHNwYW4uTXNvSHlwZXJs aW5rCgl7Y29sb3I6Ymx1ZTsKCXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQphOnZpc2l0ZWQs IHNwYW4uTXNvSHlwZXJsaW5rRm9sbG93ZWQKCXtjb2xvcjpibHVlOwoJdGV4dC1kZWNvcmF0aW9u OnVuZGVybGluZTt9CnAKCXttc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKCW1hcmdpbi1yaWdodDow Y207Cgltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKCW1hcmdpbi1sZWZ0OjBjbTsKCWZvbnQt c2l6ZToxMi4wcHQ7Cglmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CmFkZHJlc3MKCXtt YXJnaW46MGNtOwoJbWFyZ2luLWJvdHRvbTouMDAwMXB0OwoJZm9udC1zaXplOjEyLjBwdDsKCWZv bnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwoJZm9udC1zdHlsZTppdGFsaWM7fQpwcmUKCXtt YXJnaW46MGNtOwoJbWFyZ2luLWJvdHRvbTouMDAwMXB0OwoJZm9udC1zaXplOjEwLjBwdDsKCWZv bnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7fQpzcGFuLkVzdGlsb0NvcnJlbzE4Cgl7bXNvLXN0eWxl LXR5cGU6cGVyc29uYWwtcmVwbHk7Cglmb250LWZhbWlseTpBcmlhbDsKCWNvbG9yOm5hdnk7fQpA cGFnZSBTZWN0aW9uMQoJe3NpemU6NTk1LjNwdCA4NDEuOXB0OwoJbWFyZ2luOjcwLjg1cHQgMy4w Y20gNzAuODVwdCAzLjBjbTt9CmRpdi5TZWN0aW9uMQoJe3BhZ2U6U2VjdGlvbjE7fQotLT4KPC9z dHlsZT4KCjwvaGVhZD4KCjxib2R5IGxhbmc9RVMgbGluaz1ibHVlIHZsaW5rPWJsdWU+Cgo8ZGl2 IGNsYXNzPVNlY3Rpb24xPgoKPHAgY2xhc3M9TXNvTm9ybWFsPjxmb250IHNpemU9MiBjb2xvcj1u YXZ5IGZhY2U9QXJpYWw+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToKMTAuMHB0O2ZvbnQtZmFtaWx5 OkFyaWFsO2NvbG9yOm5hdnknPkhpLDxvOnA+PC9vOnA+PC9zcGFuPjwvZm9udD48L3A+Cgo8cCBj bGFzcz1Nc29Ob3JtYWw+PGZvbnQgc2l6ZT0yIGNvbG9yPW5hdnkgZmFjZT1BcmlhbD48c3BhbiBz dHlsZT0nZm9udC1zaXplOgoxMC4wcHQ7Zm9udC1mYW1pbHk6QXJpYWw7Y29sb3I6bmF2eSc+PG86 cD4mbmJzcDs8L286cD48L3NwYW4+PC9mb250PjwvcD4KCjxwIGNsYXNzPU1zb05vcm1hbD48Zm9u dCBzaXplPTIgY29sb3I9bmF2eSBmYWNlPUFyaWFsPjxzcGFuIGxhbmc9RU4tR0IKc3R5bGU9J2Zv bnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6QXJpYWw7Y29sb3I6bmF2eSc+TWFueSB0aGFua3Mg Zm9yIHRoZQpjbGFyaWZpY2F0aW9uICYjODIxMTsgaXQgd29ya3Mgb2sgbm93LjxvOnA+PC9vOnA+ PC9zcGFuPjwvZm9udD48L3A+Cgo8cCBjbGFzcz1Nc29Ob3JtYWw+PGZvbnQgc2l6ZT0yIGNvbG9y PW5hdnkgZmFjZT1BcmlhbD48c3BhbiBsYW5nPUVOLUdCCnN0eWxlPSdmb250LXNpemU6MTAuMHB0 O2ZvbnQtZmFtaWx5OkFyaWFsO2NvbG9yOm5hdnknPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwv Zm9udD48L3A+Cgo8cCBjbGFzcz1Nc29Ob3JtYWw+PGZvbnQgc2l6ZT0yIGNvbG9yPW5hdnkgZmFj ZT1BcmlhbD48c3BhbiBsYW5nPUVOLUdCCnN0eWxlPSdmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFt aWx5OkFyaWFsO2NvbG9yOm5hdnknPkJlc3QgcmVnYXJkcyw8bzpwPjwvbzpwPjwvc3Bhbj48L2Zv bnQ+PC9wPgoKPGRpdj4KCjxwIGNsYXNzPU1zb05vcm1hbD48Zm9udCBzaXplPTMgY29sb3I9bmF2 eSBmYWNlPSJUaW1lcyBOZXcgUm9tYW4iPjxzcGFuCnN0eWxlPSdmb250LXNpemU6MTIuMHB0O2Nv bG9yOm5hdnknPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvZm9udD48L3A+Cgo8cCBjbGFzcz1N c29Ob3JtYWw+PGZvbnQgc2l6ZT0yIGNvbG9yPW5hdnkgZmFjZT1BcmlhbD48c3BhbiBzdHlsZT0n Zm9udC1zaXplOgoxMC4wcHQ7Zm9udC1mYW1pbHk6QXJpYWw7Y29sb3I6bmF2eSc+QWx2YXJvPG86 cD48L286cD48L3NwYW4+PC9mb250PjwvcD4KCjxwIGNsYXNzPU1zb05vcm1hbD48Zm9udCBzaXpl PTIgY29sb3I9bmF2eSBmYWNlPUFyaWFsPjxzcGFuIHN0eWxlPSdmb250LXNpemU6CjEwLjBwdDtm b250LWZhbWlseTpBcmlhbDtjb2xvcjpuYXZ5Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L2Zv bnQ+PC9wPgoKPGRpdiBjbGFzcz1Nc29Ob3JtYWwgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFs aWduOmNlbnRlcic+PGZvbnQgc2l6ZT0zCmZhY2U9IlRpbWVzIE5ldyBSb21hbiI+PHNwYW4gc3R5 bGU9J2ZvbnQtc2l6ZToxMi4wcHQnPgoKPGhyIHNpemU9MiB3aWR0aD0iMTAwJSIgYWxpZ249Y2Vu dGVyIHRhYkluZGV4PS0xPgoKPC9zcGFuPjwvZm9udD48L2Rpdj4KCjxwIGNsYXNzPU1zb05vcm1h bCBzdHlsZT0nbWFyZ2luLWJvdHRvbToxMi4wcHQnPjxiPjxmb250IHNpemU9MiBmYWNlPVRhaG9t YT48c3BhbgpzdHlsZT0nZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWlseTpUYWhvbWE7Zm9udC13 ZWlnaHQ6Ym9sZCc+RGU6PC9zcGFuPjwvZm9udD48L2I+PGZvbnQKc2l6ZT0yIGZhY2U9VGFob21h PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OlRhaG9tYSc+CnJocS11 c2Vycy1ib3VuY2VzQGxpc3RzLmZlZG9yYWhvc3RlZC5vcmcgZW4gbm9tYnJlIGRlIEpvaG4gTWF6 eml0ZWxsaTxicj4KPGI+PHNwYW4gc3R5bGU9J2ZvbnQtd2VpZ2h0OmJvbGQnPkVudmlhZG8gZWw6 PC9zcGFuPjwvYj4gbWnpIDEzLzAxLzIwMTAgMjM6Mjc8YnI+CjxiPjxzcGFuIHN0eWxlPSdmb250 LXdlaWdodDpib2xkJz5QYXJhOjwvc3Bhbj48L2I+IHJocS11c2Vyc0BsaXN0cy5mZWRvcmFob3N0 ZWQub3JnPGJyPgo8Yj48c3BhbiBzdHlsZT0nZm9udC13ZWlnaHQ6Ym9sZCc+QXN1bnRvOjwvc3Bh bj48L2I+IFJlOiBxdWVzdGlvbiBhYm91dCBSSFEKMi4zLjEgbm90IGRpc2NvdmVyaW5nIEhpYmVy bmF0ZSBNQmVhbiBkZXBsb3llZG9uIGEgSmJvc3MgaW5zdGFuY2U8L3NwYW4+PC9mb250PjxvOnA+ PC9vOnA+PC9wPgoKPC9kaXY+Cgo8ZGl2PgoKPHA+PGZvbnQgc2l6ZT0yIGZhY2U9IlRpbWVzIE5l dyBSb21hbiI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZuYnNwO0Zyb20KdGhlIGhp YmVybmF0ZSBwbHVnaW4gZGVzY3JpcHRvciwgeW91IGNhbiBzZWUgdGhlIGRlZmF1bHQgbmFtZSBv Zjxicj4KdGhlIE1CZWFuIHNob3VsZCBmb2xsb3cgdGhpcyBwYXR0ZXJuPGJyPgomcXVvdDtIaWJl cm5hdGU6YXBwbGljYXRpb249JWFwcGxpY2F0aW9uJSx0eXBlPXN0YXRpc3RpY3MmcXVvdDsgd2hl cmU8YnI+CiVhcHBsaWNhdGlvbiUgaXMgc29tZSBuYW1lIHlvdSBwcm92aWRlIHdoZW4geW91IHJl Z2lzdGVyZWQgdGhlIE1CZWFuLjxicj4KPGJyPgpTcGVjaWZpY2FsbHksIHNlZSB0aGlzIGluIHRo ZSBwbHVnaW4tY29uZmlnOjxicj4KPGJyPgombHQ7YzpzaW1wbGUtcHJvcGVydHkgbmFtZT0mcXVv dDtvYmplY3ROYW1lJnF1b3Q7IHJlYWRPbmx5PSZxdW90O3RydWUmcXVvdDs8YnI+CmRlZmF1bHQ9 JnF1b3Q7SGliZXJuYXRlOmFwcGxpY2F0aW9uPSVhcHBsaWNhdGlvbiUsdHlwZT1zdGF0aXN0aWNz JnF1b3Q7LyZndDs8YnI+Cjxicj4KZm91bmQgaW4gdGhlIGRlc2NyaXB0b3Igb2YgdGhlIGhpYmVy bmF0ZSBwbHVnaW4gYXQ8YnI+Cm1vZHVsZXMvcGx1Z2lucy9oaWJlcm5hdGUgKGZlZG9yYWhvc3Rl ZC5vcmcgaXMgY3VycmVudGx5IGRvd24sIGNhbid0PGJyPgpwb3N0IGEgbGluaykuPGJyPgo8YnI+ CkhlcmUncyB0aGUgaGVscCB0ZXh0IGZvdW5kIGluIHRoZSBkZXNjcmlwdG9yIGZpbGUgdGhhdCBl eHBsYWlucyBob3cgeW91PGJyPgpjYW4gZGVwbG95IHRoZSBoaWJlcm5hdGUgYmVhbiB1c2luZyBK YXZhIGNvZGU6PGJyPgo8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmbHQ7cCZndDtJbiBvcmRlcgp0byBtb25pdG9yIEhpYmVy bmF0ZSBzdGF0aXN0aWNzIHZpYSBKT04sIHRoZTxicj4KSGliZXJuYXRlIFNlc3Npb24gTWFuYWdl ciBNQmVhbjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7IG11c3QgYmUgZGVwbG95ZWQKdG8gYW4gb2JqZWN0IG5hbWUgb2YgdGhl IGZvcm1hdDxicj4KPGJyPgombHQ7dHQmZ3Q7XyZxdW90O0hpYmVybmF0ZTphcHBsaWNhdGlvbj0l YXBwbGljYXRpb24lLHR5cGU9c3RhdGlzdGljcyZxdW90O18mbHQ7L3R0Jmd0OywKYW5kPGJyPgpz dGF0aXN0aWNzIG11c3QgYmUgZW5hYmxlZC4mbHQ7L3AmZ3Q7PGJyPgo8YnI+CiZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmbHQ7cCZn dDtTb21lCmV4YW1wbGUgY29kZSBpcyBwcm92aWRlZCBiZWxvdyB0byByZWdpc3RlciB0aGU8YnI+ CkhpYmVybmF0ZSBTZXNzaW9uIE1CZWFuIHdpdGhpbiBhbiBFSkIzIGFwcGxpY2F0aW9uLiZsdDsv cCZndDs8YnI+Cjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7CiZsdDtjb2RlJmd0OyZsdDtwcmUmZ3Q7PGJyPgombmJzcDsgcHVi bGljIHN0YXRpYyB2b2lkIGVuYWJsZUhpYmVybmF0ZVN0YXRpc3RpY3MoRW50aXR5TWFuYWdlcgpl bnRpdHlNYW5hZ2VyKTxicj4KJm5ic3A7IHs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB0 cnk8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgU3RhdGlzdGljc1NlcnZpY2UgbUJlYW4gPSBuZXcKU3Rh dGlzdGljc1NlcnZpY2UoKTs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyBTZXNzaW9uRmFjdG9yeSBzZXNzaW9uRmFjdG9yeSA9PGJyPgpnZXRIaWJlcm5hdGVT ZXNzaW9uKGVudGl0eU1hbmFnZXIpLmdldFNlc3Npb25GYWN0b3J5KCk7PGJyPgombmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKbUJlYW4uc2V0U2Vzc2lvbkZhY3Rvcnko c2Vzc2lvbkZhY3RvcnkpOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7IE9iamVjdE5hbWUgb2JqZWN0TmFtZSA9IG5ldzxicj4KT2JqZWN0TmFtZShISUJFUk5B VEVfU1RBVElTVElDU19NQkVBTl9PQkpFQ1ROQU1FKTs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBNQmVhblNlcnZlciBqYm9zc01CZWFuU2VydmVyID0KZ2V0 SkJvc3NNQmVhblNlcnZlcigpOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Cmpib3NzTUJlYW5TZXJ2ZXIucmVnaXN0ZXJNQmVhbihtQmVhbiwgb2JqZWN0TmFt ZSk7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKc2Vzc2lv bkZhY3RvcnkuZ2V0U3RhdGlzdGljcygpLnNldFN0YXRpc3RpY3NFbmFibGVkKHRydWUpOzxicj4K Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IH08YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBj YXRjaCAoSW5zdGFuY2VBbHJlYWR5RXhpc3RzRXhjZXB0aW9uIGlhZWUpPGJyPgombmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsgezxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7IExPRy5pbmZvKCZxdW90O0R1cGxpY2F0ZSBNQmVhbgpyZWdpc3RyYXRpb24gaWdub3Jl ZDogJnF1b3Q7ICs8YnI+CkhJQkVSTkFURV9TVEFUSVNUSUNTX01CRUFOX09CSkVDVE5BTUUpOzxi cj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IH08YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyBjYXRjaCAoRXhjZXB0aW9uIGUpPGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgezxicj4K Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IExPRy53YXJuKCZxdW90 O0NvdWxkbid0IHJlZ2lzdGVyCkhpYmVybmF0ZSBzdGF0aXN0aWNzIE1CZWFuLiZxdW90OywgZSk7 PGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgfTxicj4KJm5ic3A7IH08YnI+Cjxicj4KJm5i c3A7IHByaXZhdGUgc3RhdGljIFNlc3Npb24gZ2V0SGliZXJuYXRlU2Vzc2lvbihFbnRpdHlNYW5h Z2VyIGVudGl0eU1hbmFnZXIpCns8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBTZXNzaW9u IHNlc3Npb247PGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgaWYgKGVudGl0eU1hbmFnZXIu Z2V0RGVsZWdhdGUoKSBpbnN0YW5jZW9mCkVudGl0eU1hbmFnZXJJbXBsKSB7PGJyPgombmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgRW50aXR5TWFuYWdlcklt cGwKZW50aXR5TWFuYWdlckltcGwgPSAoRW50aXR5TWFuYWdlckltcGwpPGJyPgplbnRpdHlNYW5h Z2VyLmdldERlbGVnYXRlKCk7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsgc2Vzc2lvbiA9CmVudGl0eU1hbmFnZXJJbXBsLmdldFNlc3Npb24oKTs8 YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB9IGVsc2Ugezxicj4KJm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHNlc3Npb24gPSAoU2Vzc2lvbikKZW50 aXR5TWFuYWdlci5nZXREZWxlZ2F0ZSgpOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IH08 YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyByZXR1cm4gc2Vzc2lvbjs8YnI+CiZuYnNwOyB9 PGJyPgo8YnI+CiZuYnNwOyBwcml2YXRlIHN0YXRpYyBNQmVhblNlcnZlciBnZXRKQm9zc01CZWFu U2VydmVyKCkgezxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IExpc3QmYW1wO2x0O01CZWFu U2VydmVyJmFtcDtndDsgc2VydmVycyA9PGJyPgpNQmVhblNlcnZlckZhY3RvcnkuZmluZE1CZWFu U2VydmVyKG51bGwpOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IE1CZWFuU2VydmVyIGpi b3NzU2VydmVyID0gbnVsbDs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBmb3IgKE1CZWFu U2VydmVyIHNlcnZlciA6IHNlcnZlcnMpIHs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBpZgooJnF1b3Q7amJvc3MmcXVvdDsuZXF1YWxzKHNlcnZl ci5nZXREZWZhdWx0RG9tYWluKCkpKSB7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKamJvc3NTZXJ2ZXIg PSBzZXJ2ZXI7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsgfTxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IH08YnI+CiZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyBpZiAoamJvc3NTZXJ2ZXIgPT0gbnVsbCkgezxicj4KJm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGpib3NzU2VydmVyID0KTWFuYWdlbWVu dEZhY3RvcnkuZ2V0UGxhdGZvcm1NQmVhblNlcnZlcigpOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7IH08YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyByZXR1cm4gamJvc3NTZXJ2ZXI7 PGJyPgombmJzcDsgfTxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7CiZsdDsvcHJlJmd0OyZsdDsvY29kZSZndDs8YnI+Cjxicj4K Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7ICZsdDtwJmd0O1NlZSBhbHNvCiZsdDthPGJyPgpocmVmPSZxdW90OzxhIGhyZWY9Imh0dHA6 Ly9oaWJlcm5hdGUub3JnLzIxNi5odG1sIj5odHRwOi8vaGliZXJuYXRlLm9yZy8yMTYuaHRtbDwv YT4mcXVvdDsmZ3Q7UHVibGlzaGluZwpzdGF0aXN0aWNzIHRocm91Z2g8YnI+CkpNWCZsdDsvYSZn dDsgYW5kPGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsgJmx0O2E8YnI+CmhyZWY9JnF1b3Q7PGEKaHJlZj0iaHR0cDovL3d3dy5y ZWRoYXQuY29tL2RvY3MvbWFudWFscy9qYm9zcy9qYm9zcy1lYXAtNC4zL2RvYy9oaWJlcm5hdGUv SGliZXJuYXRlX1JlZmVyZW5jZV9HdWlkZS9PcHRpb25hbF9jb25maWd1cmF0aW9uX3Byb3BlcnRp ZXMtSGliZXJuYXRlX3N0YXRpc3RpY3MuaHRtbCI+aHR0cDovL3d3dy5yZWRoYXQuY29tL2RvY3Mv bWFudWFscy9qYm9zcy9qYm9zcy1lYXAtNC4zL2RvYy9oaWJlcm5hdGUvSGliZXJuYXRlX1JlZmVy ZW5jZV9HdWlkZS9PcHRpb25hbF9jb25maWd1cmF0aW9uX3Byb3BlcnRpZXMtSGliZXJuYXRlX3N0 YXRpc3RpY3MuaHRtbDwvYT4mcXVvdDsmZ3Q7RW5hYmxpbmc8YnI+CkhpYmVybmF0ZSBzdGF0aXN0 aWNzJmx0Oy9hJmd0OyZsdDsvcCZndDs8YnI+Cjxicj4KPGJyPgpPbiAwMS8xMy8yMDEwIDA1OjE3 IFBNLCBBbHZhcm8gPHN0MTpQZXJzb25OYW1lIFByb2R1Y3RJRD0iSm9zZSBGZXJuYW5kZXoiCnc6 c3Q9Im9uIj5Kb3NlIEZlcm5hbmRlejwvc3QxOlBlcnNvbk5hbWU+IHdyb3RlOjxicj4KJmd0OyBJ J20gaGF2aW5nIHByb2JsZW1zIHRyeWluZyB0byBnZXQgUkhRIGRpc2NvdmVyIGEgSGliZXJuYXRl IFN0YXRpc3RpY3M8YnI+CiZndDsgbWJlYW4gZGVwbG95ZWQgaW5zaWRlIGFuIGFwcGxpY2F0aW9u IG92ZXIgYSBKYm9zcyA0LjIuMyBzZXJ2ZXIuIEFsc28sIGl0PGJyPgomZ3Q7IGhhcHBlbnMgdGhl IHNhbWUgd2hlbiB0aGUgYXBwIGlzIGluc2lkZSBhIFRvbWNhdCBjb250YWluZXIuPGJyPgomZ3Q7 PGJyPgomZ3Q7IEFsbCBqbXggYWNjZXNzL2xldmVsIGZsYWdzICh1bmF1dGhlbnRpY2F0ZWQgYWNj ZXNzLCBubyBzc2wsIHBvcnQ8YnI+CiZndDsgZXN0YWJsaXNoZWQpIGFyZSBpbiBwbGFjZSBpbiB0 aGUgSlZNIGludm9jYXRpb24gLCBldGMuPGJyPgomZ3Q7PGJyPgomZ3Q7ICMjJm5ic3A7IHJ1bi5j b25mIGZvciB0aGUgSmJvc3MgaW5zdGFuY2U8YnI+CiZndDsgSkFWQV9PUFRTPSZxdW90OyRKQVZB X09QVFMgLURjb20uc3VuLm1hbmFnZW1lbnQuam14cmVtb3RlJnF1b3Q7PGJyPgomZ3Q7IEpBVkFf T1BUUz0mcXVvdDskSkFWQV9PUFRTCi1EamF2YXgubWFuYWdlbWVudC5idWlsZGVyLmluaXRpYWw9 b3JnLmpib3NzLnN5c3RlbS5zZXJ2ZXIuam14Lk1CZWFuU2VydmVyQnVpbGRlckltcGwmcXVvdDs8 YnI+CiZndDsgSkFWQV9PUFRTPSZxdW90OyRKQVZBX09QVFMgLURqYm9zcy5wbGF0Zm9ybS5tYmVh bnNlcnZlciZxdW90Ozxicj4KJmd0OyBKQVZBX09QVFM9JnF1b3Q7JEpBVkFfT1BUUyAtRGNvbS5z dW4ubWFuYWdlbWVudC5qbXhyZW1vdGUucG9ydD05MDAzJnF1b3Q7PGJyPgomZ3Q7IEpBVkFfT1BU Uz0mcXVvdDskSkFWQV9PUFRTIC1EY29tLnN1bi5tYW5hZ2VtZW50LmpteHJlbW90ZS5zc2w9ZmFs c2UmcXVvdDs8YnI+CiZndDsgSkFWQV9PUFRTPSZxdW90OyRKQVZBX09QVFMgLURjb20uc3VuLm1h bmFnZW1lbnQuam14cmVtb3RlLmF1dGhlbnRpY2F0ZT1mYWxzZSZxdW90Ozxicj4KJmd0Ozxicj4K Jmd0OyBUcmllZCBzb21lIG1ldGhvZHMgZnJvbTxicj4KJmd0OyA8YQpocmVmPSJodHRwOi8vd3d3 LnJocS1wcm9qZWN0Lm9yZy9kaXNwbGF5L1JIUS9QbHVnaW5zKy0rRGVtb3MrLStNb25pdG9yaW5n K0hpYmUiPmh0dHA6Ly93d3cucmhxLXByb2plY3Qub3JnL2Rpc3BsYXkvUkhRL1BsdWdpbnMrLStE ZW1vcystK01vbml0b3JpbmcrSGliZTwvYT48YnI+CiZndDsgcm5hdGUgdG8gbm8gYXZhaWwgKG1h bnVhbGx5IGFkZGluZyBhIHNlcnZpY2Ugb2YgdHlwZSBKTVggU2VydmVyKTxicj4KJmd0Ozxicj4K Jmd0OyBJJ20gYW5kIGRldiB0ZWFtIGFyZSBraW5kYSBwdXp6bGVkIGJ5IHRoaXMuIFRoZSBhcHAg dXNlcyBTcHJpbmcgYW5kPGJyPgomZ3Q7IEhpYmVybmF0ZSAzLjEuIEEgcHJpbnRzY3JlZW4gZnJv bSBKY29uc29sZSAoYmVsb3cpLCBvciBxdWVyeWluZzxicj4KJmd0OyBleHBsaWNpdGx5IHRoZSBt YmVhbiB2aWEgUk1JIC4ud29ya3Mgb2suVHJpZWQgYWxzbyB1c2luZyBleGNlbGxlbnQ8YnI+CiZn dDsgam14X2NvbnNvbGUgYXBwIGZyb20gUGhpbGxpcCBUcmFlZGVyLCZuYnNwOyBhbmQgd29ya3Mg b2sgdG9vOjxicj4KJmd0Ozxicj4KJmd0OyByb290QGZ1Y2hpbm9zOi9vcHQvam14dG9vbHMjIC4v am14X2NvbnNvbGUuc2ggZ2V0X2F0dHJpYnV0ZSZuYnNwOwotLWhvc3Q9ajJlZTxicj4KJmd0OyAt LXBvcnQ9OTAwMyAtLW9iamVjdF9uYW1lPW9yZy5oaWJlcm5hdGU6dHlwZT1zdGF0aXN0aWNzPGJy PgomZ3Q7IC0tYXR0cmlidXRlX25hbWU9UXVlcmllczxicj4KJmd0Ozxicj4KJmd0OyBvcmcuaGli ZXJuYXRlOnR5cGU9c3RhdGlzdGljcy9RdWVyaWVzIDogc2VsZWN0IHAgZnJvbTxicj4KJmd0OyBQ YXJhbWV0cm9Db25maWd1cmFjaW9uIHA8YnI+CiZndDs8YnI+CiZndDsgcm9vdEBmdWNoaW5vczov b3B0L2pteHRvb2xzIzxicj4KJmd0Ozxicj4KJmd0OyBJJ20gbm90IGEgamF2YSBkZXZlbG9wZXIs IGJ1dCBJJ20gZ3Vlc3NpbmcgdGhlcmUgd291bGQgYmUgc29tZSBzb3J0IG9mPGJyPgomZ3Q7IGRl dmlhdGlvbiBpbiB0aGUgbWFubmVyIHRoZSBkZXYgdGVhbSBpbml0aWFsaXplZCB0aGUgSGliZXJu YXRlIEpNWDxicj4KJmd0OyBtYmVhbiwgcGVyaGFwcyB0aGUgbmFtaW5nIGlzIG5vdCBiZWluZyBy ZWNvZ25pemVkIGJ5IHRoZSBIaWJlcm5hdGUgUkhRPGJyPgomZ3Q7IHBsdWdpbiBiZWNhdXNlIG9m IHRoYXQ/PGJyPgomZ3Q7PGJyPgomZ3Q7IEFueSBoZWxwIGlzIG11Y2ggYXBwcmVjaWF0ZWQuIFNv cnJ5IHRoZSBsZW5ndGggYW5kIHRoZSBwcmludCBzY3JlZW5zPGJyPgomZ3Q7IGJlbG93LCB0aGV5 IGFyZSBtZWFudCB0byBpbGx1c3RyYXRlIGEgd29yayBvay9ubyBvayB2aWV3ICh0aGUgSGliZXJu YXRlPGJyPgomZ3Q7IHBsdWdpbiBmb2xkZXIgbWlzc2luZyBmcm9tICZxdW90O2oyZWUmcXVvdDsg SmJvc3MgaW5zdGFuY2UpLjxicj4KJmd0Ozxicj4KJmd0OyBOLmIuOiBwcmludCBzY3JlZW5zIGVy YXNlZCwgc2luY2UgdGhleSBleGNlZWQgdGhlIG1heGltdW0gZm9yIHRoZSBsaXN0Ljxicj4KJmd0 Ozxicj4KJmd0OyBSZWdhcmRzLDxicj4KJmd0Ozxicj4KJmd0OyBBbHZhcm88YnI+Cl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fPGJyPgpyaHEtdXNlcnMgbWFp bGluZyBsaXN0PGJyPgpyaHEtdXNlcnNAbGlzdHMuZmVkb3JhaG9zdGVkLm9yZzxicj4KPGEgaHJl Zj0iaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL21haWxtYW4vbGlzdGluZm8vcmhxLXVzZXJzIj5o dHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvbWFpbG1hbi9saXN0aW5mby9yaHEtdXNlcnM8L2E+PC9z cGFuPjwvZm9udD48bzpwPjwvbzpwPjwvcD4KCjwvZGl2PgoKPC9kaXY+Cgo8L2JvZHk+Cgo8L2h0 bWw+Cg== --===============7441064009551444630==--