[nhin-d] push by gm2...@cerner.com - Adding XD concurrency fix tags. on 2014-10-28 12:15 GMT

56 views
Skip to first unread message

nhi...@googlecode.com

unread,
Oct 28, 2014, 8:15:56 AM10/28/14
to nhindirec...@googlegroups.com
Revision: abb446dfe766
Branch: default
Author: gm2552
Date: Tue Oct 28 12:15:16 2014 UTC
Log: Adding XD concurrency fix tags.
https://code.google.com/p/nhin-d/source/detail?r=abb446dfe766

Added:
/java/tags/xd-1.0.3/pom.xml
/java/tags/xd-1.0.3/readme.txt
/java/tags/xd-1.0.3/src/jax-ws-catalog.xml

/java/tags/xd-1.0.3/src/main/java/com/gsihealth/auditclient/AuditMessageGenerator.java

/java/tags/xd-1.0.3/src/main/java/com/gsihealth/auditclient/CodedValueFactory.java

/java/tags/xd-1.0.3/src/main/java/com/gsihealth/auditclient/SyslogClient.java

/java/tags/xd-1.0.3/src/main/java/com/gsihealth/auditclient/type/AuditMethodEnum.java
/java/tags/xd-1.0.3/src/main/java/org/nhind/xdm/MailClient.java
/java/tags/xd-1.0.3/src/main/java/org/nhind/xdm/impl/SmtpMailClient.java
/java/tags/xd-1.0.3/src/main/java/org/nhind/xdm/package-info.java

/java/tags/xd-1.0.3/src/main/java/org/nhind/xdr/DocumentRepositoryAbstract.java

/java/tags/xd-1.0.3/src/main/java/org/nhind/xdr/DocumentRepository_Service_handler.xml
/java/tags/xd-1.0.3/src/main/java/org/nhind/xdr/XDR.java
/java/tags/xd-1.0.3/src/main/java/org/nhind/xdr/config/XdConfig.java
/java/tags/xd-1.0.3/src/main/java/org/nhind/xdr/package-info.java

/java/tags/xd-1.0.3/src/main/java/org/xml/xml/schema/_7f0d86bd/healthcare_security_audit/ActiveParticipantType.java

/java/tags/xd-1.0.3/src/main/java/org/xml/xml/schema/_7f0d86bd/healthcare_security_audit/AuditMessage.java

/java/tags/xd-1.0.3/src/main/java/org/xml/xml/schema/_7f0d86bd/healthcare_security_audit/AuditSourceIdentificationType.java

/java/tags/xd-1.0.3/src/main/java/org/xml/xml/schema/_7f0d86bd/healthcare_security_audit/CodedValueType.java

/java/tags/xd-1.0.3/src/main/java/org/xml/xml/schema/_7f0d86bd/healthcare_security_audit/EventIdentificationType.java

/java/tags/xd-1.0.3/src/main/java/org/xml/xml/schema/_7f0d86bd/healthcare_security_audit/FindAuditEventsRequest.java

/java/tags/xd-1.0.3/src/main/java/org/xml/xml/schema/_7f0d86bd/healthcare_security_audit/FindAuditEventsResponse.java

/java/tags/xd-1.0.3/src/main/java/org/xml/xml/schema/_7f0d86bd/healthcare_security_audit/ObjectFactory.java

/java/tags/xd-1.0.3/src/main/java/org/xml/xml/schema/_7f0d86bd/healthcare_security_audit/ParticipantObjectIdentificationType.java

/java/tags/xd-1.0.3/src/main/java/org/xml/xml/schema/_7f0d86bd/healthcare_security_audit/TypeValuePairType.java

/java/tags/xd-1.0.3/src/main/java/org/xml/xml/schema/_7f0d86bd/healthcare_security_audit/package-info.java
/java/tags/xd-1.0.3/src/main/resources/CCD.xsl

/java/tags/xd-1.0.3/src/main/resources/DocumentRepository_Service_handler.xml
/java/tags/xd-1.0.3/src/main/resources/request.xml
/java/tags/xd-1.0.3/src/main/resources/request_pdf.xml
/java/tags/xd-1.0.3/src/main/resources/response.xml
/java/tags/xd-1.0.3/src/main/webapp/WEB-INF/cxf-servlet.xml
/java/tags/xd-1.0.3/src/main/webapp/WEB-INF/web.xml
/java/tags/xd-1.0.3/src/main/webapp/index.jsp

/java/tags/xd-1.0.3/src/test/java/com/gsihealth/auditclient/AuditMessageGeneratorTest.java
/java/tags/xd-1.0.3/src/test/java/org/nhind/xdr/XDRTest.java
/java/tags/xd-1.0.3/src/wsdl/XDS.b_DocumentRepositoryWSDLSynchMTOM.wsdl
/java/tags/xd-1.0.3/src/wsdl/schema/IHE/XDS.b_DocumentRepositoryMTOM.xsd
/java/tags/xd-1.0.3/src/wsdl/schema/ebRS/lcm.xsd
/java/tags/xd-1.0.3/src/wsdl/schema/ebRS/query.xsd
/java/tags/xd-1.0.3/src/wsdl/schema/ebRS/rim.xsd
/java/tags/xd-1.0.3/src/wsdl/schema/ebRS/rs.xsd
/java/tags/xd-1.0.3/src/wsdl/www.w3.org/2001/xml.xsd
/java/tags/xd-common-1.0.3/pom.xml
/java/tags/xd-common-1.0.3/src/jax-ws-catalog.xml

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/common/DirectDocument2.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/common/DirectDocumentUtils.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/common/DirectDocuments.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/common/DirectMessage.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/common/XdmPackage.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/common/exception/MetadataException.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/common/type/AssociationType1Enum.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/common/type/ClassCodeEnum.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/common/type/ClassificationTypeEnum.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/common/type/ConfidentialityCodeEnum.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/common/type/DirectDocumentType.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/common/type/ExternalIdentifierTypeEnum.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/common/type/ExtrinsicObjectTypeEnum.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/common/type/FormatCodeEnum.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/common/type/HealthcareFacilityTypeCodeEnum.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/common/type/LoincEnum.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/common/type/PracticeSettingCodeEnum.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/common/type/SlotType1Enum.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/common/type/SubmitObjectsRequestEnum.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/proxy/DocumentRepositoryProxy.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/routing/RoutingResolver.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/routing/exception/ResolverException.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/routing/impl/RoutingResolverImpl.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/soap/DirectSOAPHandler.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/soap/DirectSOAPHandlerResolver.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/soap/SafeThreadData.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/soap/ThreadData.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/soap/type/MetadataLevelEnum.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/transform/MimeXdsTransformer.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/transform/XdmXdsTransformer.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/transform/XdsDirectDocumentsTransformer.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/transform/XdsXdmTransformer.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/transform/exception/TransformationException.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/transform/exception/package-info.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/transform/impl/DefaultMimeXdsTransformer.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/transform/impl/DefaultXdmXdsTransformer.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/transform/impl/DefaultXdsDirectDocumentsTransformer.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/transform/impl/DefaultXdsXdmTransformer.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/transform/impl/package-info.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/transform/package-info.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/transform/parse/Parser.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/transform/parse/ParserHL7.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/transform/parse/package-info.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/transform/pojo/SimplePerson.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/transform/util/XdConstants.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/transform/util/XmlUtils.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/transform/util/XslConversion.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/transform/util/package-info.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/transform/util/type/ClassificationNode.java

/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/transform/util/type/MimeType.java
/java/tags/xd-common-1.0.3/src/main/resources/CCD.xsl
/java/tags/xd-common-1.0.3/src/main/resources/INDEX.htm
/java/tags/xd-common-1.0.3/src/main/resources/INDEX_head.txt
/java/tags/xd-common-1.0.3/src/main/resources/INDEX_tail.txt
/java/tags/xd-common-1.0.3/src/main/resources/README.txt

/java/tags/xd-common-1.0.3/src/main/resources/XDS.b_DocumentRepositoryWSDLSynchMTOM.wsdl
/java/tags/xd-common-1.0.3/src/main/resources/ccdtoccddb.xsl

/java/tags/xd-common-1.0.3/src/main/resources/schema/IHE/XDS.b_DocumentRepositoryMTOM.xsd
/java/tags/xd-common-1.0.3/src/main/resources/schema/ebRS/lcm.xsd
/java/tags/xd-common-1.0.3/src/main/resources/schema/ebRS/query.xsd
/java/tags/xd-common-1.0.3/src/main/resources/schema/ebRS/rim.xsd
/java/tags/xd-common-1.0.3/src/main/resources/schema/ebRS/rs.xsd
/java/tags/xd-common-1.0.3/src/schema/IHE/XDS.b_DocumentRepositoryMTOM.xsd
/java/tags/xd-common-1.0.3/src/schema/ebRS/lcm.xsd
/java/tags/xd-common-1.0.3/src/schema/ebRS/query.xsd
/java/tags/xd-common-1.0.3/src/schema/ebRS/rim.xsd
/java/tags/xd-common-1.0.3/src/schema/ebRS/rs.xsd

/java/tags/xd-common-1.0.3/src/test/java/org/nhindirect/xd/common/DirectDocument2Test.java

/java/tags/xd-common-1.0.3/src/test/java/org/nhindirect/xd/common/DirectDocumentsTest.java

/java/tags/xd-common-1.0.3/src/test/java/org/nhindirect/xd/common/XdmPackageTest.java

/java/tags/xd-common-1.0.3/src/test/java/org/nhindirect/xd/routing/impl/RoutingResolverImplTest.java

/java/tags/xd-common-1.0.3/src/test/java/org/nhindirect/xd/soap/DirectSOAPHandlerResolverTest.java

/java/tags/xd-common-1.0.3/src/test/java/org/nhindirect/xd/soap/DirectSOAPHandlerTest.java

/java/tags/xd-common-1.0.3/src/test/java/org/nhindirect/xd/soap/ThreadDataTest.java

/java/tags/xd-common-1.0.3/src/test/java/org/nhindirect/xd/transform/impl/DefaultMimeXdsTransformerTest.java

/java/tags/xd-common-1.0.3/src/test/java/org/nhindirect/xd/transform/impl/DefaultXdmXdsTransformerTest.java

/java/tags/xd-common-1.0.3/src/test/java/org/nhindirect/xd/transform/impl/DefaultXdsXdmTransformerTest.java

/java/tags/xd-common-1.0.3/src/test/java/org/nhindirect/xd/transform/pojo/SimplePersonTest.java

/java/tags/xd-common-1.0.3/src/test/java/org/nhindirect/xd/transform/util/MimeTypeTest.java

/java/tags/xd-common-1.0.3/src/test/java/org/nhindirect/xd/transform/util/XmlUtilsTest.java

/java/tags/xd-common-1.0.3/src/test/java/org/nhindirect/xd/transform/util/XslConversionTest.java
/java/tags/xd-common-1.0.3/src/test/resources/ccdtoccddb_malformed.xsl
/java/tags/xd-common-1.0.3/src/test/resources/sampleccd.xml
/java/tags/xd-common-1.0.3/src/test/resources/submitobjectrequest.xml

/java/tags/xd-common-1.0.3/src/wsdl/XDS.b_DocumentRepositoryWSDLSynchMTOM.wsdl
/java/tags/xd-common-1.0.3/src/wsdl/www.w3.org/2001/xml.xsd
/java/tags/xdmail-1.1.4/pom.xml
/java/tags/xdmail-1.1.4/src/books/users-guide.xml
/java/tags/xdmail-1.1.4/src/books/users-guide/depl-james.confluence
/java/tags/xdmail-1.1.4/src/jax-ws-catalog.xml

/java/tags/xdmail-1.1.4/src/main/java/org/nhind/james/mailet/DirectXdMailet.java

/java/tags/xdmail-1.1.4/src/main/java/org/nhind/james/mailet/package-info.java

/java/tags/xdmail-1.1.4/src/main/java/org/nhind/james/matcher/RecipientIsLocalAndSMTPAuthUserIs.java

/java/tags/xdmail-1.1.4/src/main/java/org/nhind/james/matcher/RecipientIsNotXd.java

/java/tags/xdmail-1.1.4/src/main/java/org/nhind/james/matcher/RecipientIsXdAndNotSMIME.java

/java/tags/xdmail-1.1.4/src/main/java/org/nhind/mail/service/DocumentRepository.java

/java/tags/xdmail-1.1.4/src/main/java/org/nhind/mail/service/package-info.java
/java/tags/xdmail-1.1.4/src/main/resources/ccdtoccddb.xsl
/java/tags/xdmail-1.1.4/src/schema/IHE/XDS.b_DocumentRepositoryMTOM.xsd
/java/tags/xdmail-1.1.4/src/schema/ebRS/lcm.xsd
/java/tags/xdmail-1.1.4/src/schema/ebRS/query.xsd
/java/tags/xdmail-1.1.4/src/schema/ebRS/rim.xsd
/java/tags/xdmail-1.1.4/src/schema/ebRS/rs.xsd
/java/tags/xdmail-1.1.4/src/site/resources/css/site.css
/java/tags/xdmail-1.1.4/src/site/resources/images/logo.png
/java/tags/xdmail-1.1.4/src/site/site.xml
/java/tags/xdmail-1.1.4/src/site/xdoc/index.xml

/java/tags/xdmail-1.1.4/src/test/java/org/nhind/james/mailet/NHINDMailetTest.java

/java/tags/xdmail-1.1.4/src/test/java/org/nhind/testutils/MockMailetConfig.java

/java/tags/xdmail-1.1.4/src/test/resources/XDS.b_DocumentRepositoryWSDLSynchMTOM.wsdl
/java/tags/xdmail-1.1.4/src/test/resources/ccdtoccddb_malformed.xsl
/java/tags/xdmail-1.1.4/src/test/resources/sampleccd.xml
/java/tags/xdmail-1.1.4/src/test/resources/submitobjectrequest.xml
/java/tags/xdmail-1.1.4/src/wsdl/XDS.b_DocumentRepositoryWSDLSynchMTOM.wsdl
/java/tags/xdmail-1.1.4/src/wsdl/www.w3.org/2001/xml.xsd

=======================================
--- /dev/null
+++ /java/tags/xd-1.0.3/pom.xml Tue Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,447 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
+ <groupId>org.nhind</groupId>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>xd</artifactId>
+ <name>NHIN Direct XD* Web Endpoint</name>
+ <version>1.0.3</version>
+ <description>NHIN Direct XD Component</description>
+ <inceptionYear>2010</inceptionYear>
+ <packaging>war</packaging>
+
<url>http://api.nhindirect.org/x/www/api.nhindirect.org/java/site/xd/${project.version}</url>
+ <developers>
+ <developer>
+ <name>Vincent Lewis</name>
+ <email>vincen...@gsihealth.com</email>
+ </developer>
+ <developer>
+ <name>Beau Grantham</name>
+ <email>bgra...@harris.com</email>
+ </developer>
+ </developers>
+ <organization>
+ <name>HNIN Direct</name>
+ <url>http://nhindirect.org</url>
+ </organization>
+ <scm>
+ <url>https://nhin-d.googlecode.com/hg/java/xd/</url>
+ <connection>scm:hg:https://nhin-d.googlecode.com/hg/nhin-d/java/xd
+ </connection>
+ </scm>
+
+ <issueManagement>
+ <system>Google Code</system>
+ <url>http://code.google.com/p/nhin-d/issues/list</url>
+ </issueManagement>
+ <licenses>
+ <license>
+ <name>New BSD License</name>
+ <url>http://nhindirect.org/BSDLicense</url>
+ </license>
+ </licenses>
+ <dependencies>
+ <!--
+ <dependency>
+ <groupId>javax</groupId>
+ <artifactId>javaee-web-api</artifactId>
+ <version>6.0</version>
+ <scope>provided</scope>
+ </dependency>
+ -->
+ <dependency>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-rt-frontend-jaxws</artifactId>
+ <version>2.2.9</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-activation_1.1_spec</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-javamail_1.4_spec</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-rt-transports-http</artifactId>
+ <version>2.2.9</version>
+ </dependency>
+ <!-- Jetty is needed if you're are not using the CXFServlet -->
+ <dependency>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-rt-transports-http-jetty</artifactId>
+ <version>2.2.9</version>
+ </dependency>
+ <dependency>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>maven-jetty-plugin</artifactId>
+ <version>6.1.14</version>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>javax.activation</groupId>
+ <artifactId>activation</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.xml.bind</groupId>
+ <artifactId>jaxb-api</artifactId>
+ <version>2.1</version>
+ <exclusions>
+ <exclusion>
+ <groupId>javax.activation</groupId>
+ <artifactId>activation</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>2.5</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>xd-common</artifactId>
+ <version>1.0.3</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <extensions>
+ <extension>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-webdav</artifactId>
+ <version>RELEASE</version>
+ </extension>
+ </extensions>
+
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ <configuration>
+ <fork>true</fork>
+ <source>1.6</source>
+ <target>1.6</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-war-plugin</artifactId>
+ <version>2.1-beta-1</version>
+ <configuration>
+ <failOnMissingWebXml>false</failOnMissingWebXml>
+ <webResources>
+ <resource>
+ <directory>src</directory>
+ <targetPath>WEB-INF</targetPath>
+ <includes>
+ <include>jax-ws-catalog.xml</include>
+ <include>wsdl/**</include>
+ </includes>
+ </resource>
+ </webResources>
+ </configuration>
+ </plugin>
+ <plugin><!--use mvn tomcat:deploy or mvn tomcat:undeploy -->
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>tomcat-maven-plugin</artifactId>
+ <version>1.0-beta-1</version>
+ <configuration>
+ <server>myTomcat</server>
+ <path>C:\\apache-tomcat-6.0.29\\webapps</path>
+ </configuration>
+ </plugin>
+ <plugin>
+ <!--
+ JETTY 6 PLUGIN FOR IN PLACE TESTING WITH MAVEN Execute
the mvn clean
+ jetty:run in a browser use http://localhost:8080/xd/
to test the
+ connection and web app
+ -->
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>maven-jetty-plugin</artifactId>
+ <version>6.1.14</version>
+ <configuration>
+ <scanIntervalSeconds>10</scanIntervalSeconds>
+ <contextPath>/xd</contextPath>
+ <connectors>
+ <connector
implementation="org.mortbay.jetty.nio.SelectChannelConnector">
+ <port>8080</port>
+ <maxIdleTime>60000</maxIdleTime>
+ </connector>
+ </connectors>
+ <webApp>${basedir}/target/xd.war</webApp>
+ <requestLog
implementation="org.mortbay.jetty.NCSARequestLog">
+ <filename>target/yyyy_mm_dd.request.log</filename>
+ <retainDays>90</retainDays>
+ <append>true</append>
+ <extended>true</extended>
+ <logTimeZone>GMT</logTimeZone>
+ </requestLog>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>com.atlassian.maven.plugins</groupId>
+ <artifactId>maven-clover2-plugin</artifactId>
+ <version>3.0.2</version>
+ <configuration>
+ <jdk>1.6</jdk>
+ <licenseLocation>
+ ${project.basedir}/../licenses/clover.license
+ </licenseLocation>
+ </configuration>
+ <executions>
+ <execution>
+ <phase>pre-site</phase>
+ <goals>
+ <goal>instrument</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-release-plugin</artifactId>
+ <version>2.0</version>
+ <configuration>
+
<tagBase>scm:hg:https://nhin-d.googlecode.com/hg/nhin-d/java/tags</tagBase>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>endorsed</id>
+ <activation>
+ <property>
+ <name>sun.boot.class.path</name>
+ </property>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ <configuration>
+ <!--
+ javaee6 contains upgrades of APIs
contained within the JDK
+ itself. As such these need to be placed on
the bootclasspath,
+ rather than classpath of the compiler. If
you don't make use of
+ these new updated API, you can delete the
profile. On non-SUN
+ jdk, you will need to create a similar
profile for your jdk,
+ with the similar property as
sun.boot.class.path in Sun's JDK.
+ -->
+ <compilerArguments>
+
<bootclasspath>${settings.localRepository}/javax/javaee-endorsed-api/6.0/javaee-endorsed-api-6.0.jar${path.separator}${sun.boot.class.path}
+ </bootclasspath>
+ </compilerArguments>
+ </configuration>
+ <dependencies>
+ <dependency>
+ <groupId>javax</groupId>
+
<artifactId>javaee-endorsed-api</artifactId>
+ <version>6.0</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ <version>2.0.3</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <!-- for release only
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <version>2.6.1</version>
+ <configuration>
+ <charset>UTF-8</charset>
+ <docencoding>UTF-8</docencoding>
+ <docfilessubdirs>true</docfilessubdirs>
+ <detectJavaApiLink>true</detectJavaApiLink>
+ <detectLinks>true</detectLinks>
+ <source>1.6</source>
+ <show>protected</show>
+ <excludePackageNames>
+
oasis.names.tc.ebxml_regrep.xsd:ihe.iti.xds_b._2007
+ </excludePackageNames>
+ </configuration>
+ <executions>
+ <execution>
+ <phase>package</phase>
+ <id>attach-javadocs</id>
+ <goals>
+ <goal>jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-gpg-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>sign-artifacts</id>
+ <phase>package</phase>
+ <goals>
+ <goal>sign</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ -->
+ </plugins>
+ </build>
+ <pluginRepositories>
+ <pluginRepository>
+ <releases>
+ <enabled>true</enabled>
+ </releases>
+ <id>atlassian-m2-repository</id>
+ <name>Atlassian Maven 2.x Repository</name>
+ <url>http://repository.atlassian.com/maven2</url>
+ </pluginRepository>
+ </pluginRepositories>
+ </profile>
+ </profiles>
+
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-project-info-reports-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <version>2.6.1</version>
+ <configuration>
+ <charset>UTF-8</charset>
+ <docencoding>UTF-8</docencoding>
+ <docfilessubdirs>true</docfilessubdirs>
+ <detectJavaApiLink>true</detectJavaApiLink>
+ <detectLinks>true</detectLinks>
+ <source>1.6</source>
+ <show>protected</show>
+ <excludePackageNames>
+ oasis.names.tc.ebxml_regrep.xsd:ihe.iti.xds_b._2007
+ </excludePackageNames>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-pmd-plugin</artifactId>
+ <configuration>
+ <targetJdk>1.6</targetJdk>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-report-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-changelog-plugin</artifactId>
+ <configuration>
+ <dates>
+ <!-- Insert the date of the most recent release -->
+ <date>2007-01-01</date>
+ </dates>
+ <outputEncoding>UTF-8</outputEncoding>
+ <type>date</type>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>clirr-maven-plugin</artifactId>
+ <configuration>
+ <minSeverity>info</minSeverity>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>findbugs-maven-plugin</artifactId>
+ <version>1.2</version>
+ <configuration>
+ <effort>Max</effort>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>taglist-maven-plugin</artifactId>
+ <configuration>
+ <tags>
+ <tag>FIXME</tag>
+ <tag>TODO</tag>
+ <tag>WARN</tag>
+ <tag>@deprecated</tag>
+ </tags>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>com.atlassian.maven.plugins</groupId>
+ <artifactId>maven-clover2-plugin</artifactId>
+ <version>3.0.2</version>
+ <configuration>
+ <licenseLocation>
+ ${project.basedir}/../licenses/clover.license
+ </licenseLocation>
+ </configuration>
+ </plugin>
+ </plugins>
+ </reporting>
+
+ <distributionManagement>
+ <site>
+ <id>nhind-site</id>
+ <name>NHIN Direct API publication site</name>
+
<url>sftp://api.nhindirect.org/x/www/api.nhindirect.org/java/site/xd/${project.version}
+ </url>
+ </site>
+ <snapshotRepository>
+ <id>sonatype-snapshot</id>
+ <name>Sonatype OSS Maven SNAPSHOT Repository</name>
+
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
+ <uniqueVersion>false</uniqueVersion>
+ </snapshotRepository>
+ <repository>
+ <id>sonatype-release</id>
+ <name>Sonatype OSS Maven Release Repositor</name>
+
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
+ <uniqueVersion>false</uniqueVersion>
+ </repository>
+
+ </distributionManagement>
+</project>
+
+
+
+
+
+
+
+
=======================================
--- /dev/null
+++ /java/tags/xd-1.0.3/readme.txt Tue Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,39 @@
+Greetings
+
+BUILD PROCESS
+
+Currently there is one primary junit test which operates on the XDR class
during
+the "maven install" build. The java\xd\src\main\resources\request.xml is
the source for the XDR
+ProvideAndRegister message. By editting the email portion (currently
vle...@lewistower.com) of the intendedRecipient slot
+in this file you can insert a test email address where the test XDM
message will be sent.
+Currently the entire field looks like this
+
+ <rim:Slot name="intendedRecipient">
+ <rim:ValueList>
+ <rim:Value>|
vle...@lewistower.com^Smith^John^^^Dr^^^&amp;1.3.6.1.4.1.21367.3100.1&amp;ISO</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+
+If this value is used instead,
+ <rim:Value>|
john....@happyvalleyclinic.nhindirect.org^Smith^John^^^Dr^^^&amp;1.3.6.1.4.1.21367.3100.1&amp;ISO</rim:Value>
+The XDR service acts as a forward and sends the ProvideAndRegister message
on to another XDR service which is currently:
+
+http://shinnytest.gsihealth.com:8080/DocumentRepository_Service/DocumentRepository?wsdl";
+
+It is envisioned that the relationship between NHIND ID (the email address
in the recipient value) and the type of delivery (XDM or XDR forward)
+will be persisted in some provider addressing mechanism that is TBD to my
knowledge
+
+
+
+DEPLOYMENT in TOMCAT
+
+The deployment has been tested using apache-tomcat-6.0.29 . This can be
downloaded from http://tomcat.apache.org/download-60.cgi. Once Tomcat
+is installed and running, the xd.war file can be copied from the
hg\java\xd\target directory to the TOMCAT_HOME\webapps directory where it
will
+hot-deploy automatically. This deployment runs on port 8080 as is.
+
+This implementation can be tested out using the SOAP-UI test dirctory
\hg\java\xd\soapui.
+
+the endpoint for testing in standard tomcat is
http://localhost:8080/xd/services/DocumentRepository_Service
+
+
+Vince Lewis
=======================================
--- /dev/null
+++ /java/tags/xd-1.0.3/src/jax-ws-catalog.xml Tue Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"
prefer="system">
+ <system
systemId="file:/C:/NBProjects/WebServices/PIXXDS/wsdl/XDS.b_DocumentRepositoryWSDLSynchMTOM.wsdl"
uri="wsdl/XDS.b_DocumentRepositoryWSDLSynchMTOM.wsdl"/>
+ <system
systemId="file:/C:/NBProjects/WebServices/PIXXDS/schema/IHE/XDS.b_DocumentRepositoryMTOM.xsd"
uri="schema/IHE/XDS.b_DocumentRepositoryMTOM.xsd"/>
+ <system
systemId="file:/C:/NBProjects/WebServices/PIXXDS/schema/ebRS/rs.xsd"
uri="schema/ebRS/rs.xsd"/>
+ <system
systemId="file:/C:/NBProjects/WebServices/PIXXDS/schema/ebRS/rim.xsd"
uri="schema/ebRS/rim.xsd"/>
+ <system
systemId="file:/C:/NBProjects/WebServices/PIXXDS/schema/ebRS/lcm.xsd"
uri="schema/ebRS/lcm.xsd"/>
+ <system
systemId="file:/C:/NBProjects/WebServices/PIXXDS/schema/ebRS/query.xsd"
uri="schema/ebRS/query.xsd" />
+ <system systemId="http://www.w3.org/2001/xml.xsd"
uri="wsdl/www.w3.org/2001/xml.xsd"/>
+</catalog>
=======================================
--- /dev/null
+++
/java/tags/xd-1.0.3/src/main/java/com/gsihealth/auditclient/AuditMessageGenerator.java
Tue Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,341 @@
+/*
+Copyright (c) 2010, NHIN Direct Project
+All rights reserved.
+
+Authors:
+ Vincent Lewis vincen...@gsihealth.com
+
+Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
+
+Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
+Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
distribution. Neither the name of the The NHIN Direct Project
(nhindirect.org).
+nor the names of its contributors may be used to endorse or promote
products derived from this software without specific prior written
permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
+*/
+package com.gsihealth.auditclient;
+
+import java.io.FileOutputStream;
+import java.io.StringWriter;
+import java.util.List;
+
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.Marshaller;
+import javax.xml.namespace.QName;
+
+import
org.xml.xml.schema._7f0d86bd.healthcare_security_audit.ActiveParticipantType;
+import org.xml.xml.schema._7f0d86bd.healthcare_security_audit.AuditMessage;
+import
org.xml.xml.schema._7f0d86bd.healthcare_security_audit.CodedValueType;
+import
org.xml.xml.schema._7f0d86bd.healthcare_security_audit.EventIdentificationType;
+import
org.xml.xml.schema._7f0d86bd.healthcare_security_audit.ParticipantObjectIdentificationType;
+
+import com.gsihealth.auditclient.type.AuditMethodEnum;
+
+/**
+ * This class logs audit messages.
+ *
+ * @author vlewis
+ */
+public class AuditMessageGenerator {
+
+ private Short VAL1 = Short.parseShort("1");
+ private Short VAL2 = Short.parseShort("2");
+ private Short VAL20 = Short.parseShort("20");
+
+ private AuditMethodEnum auditMethod = null;
+
+ private String auditFile = null;
+
+ private String auditHost = null;
+ private String auditPort = null;
+
+ /**
+ * Construct an AuditMessageGenerator for use with a file.
+ *
+ * @param auditFile
+ * The file path.
+ */
+ public AuditMessageGenerator(String auditFile)
+ {
+ auditMethod = AuditMethodEnum.FILE;
+
+ this.auditFile=auditFile;
+ }
+
+ /**
+ * Construct an AuditMessageGenerator for user with a syslog.
+ *
+ * @param auditHost
+ * The syslog host.
+ * @param auditPort
+ * The syslog port.
+ */
+ public AuditMessageGenerator( String auditHost, String auditPort)
+ {
+ auditMethod = AuditMethodEnum.SYSLOG;
+
+ this.auditHost= auditHost;
+ this.auditPort= auditPort;
+ }
+
+ /**
+ * Audit a provideAndRegister event.
+ *
+ * @param sourceMessageId
+ * @param sourceName
+ * @param replyTo
+ * @param to
+ * @param thisName
+ * @param patientId
+ * @param subsetId
+ * @param pid
+ * @throws Exception
+ */
+ public void provideAndRegisterAudit(String sourceMessageId, String
sourceName, String replyTo, String to, String thisName, String patientId,
String subsetId, String pid) throws Exception {
+ try {
+
+ AuditMessage am = new AuditMessage();
+
+ CodedValueType importcode = null;
+ CodedValueType sourceCode = null;
+ CodedValueType pnrCode = null;
+ CodedValueType patientNumCode = null;
+ CodedValueType destCode = null;
+ CodedValueType subsetCode = null;
+ CodedValueType rCode = null;
+
+ CodedValueType tranType = null;
+ importcode = CodedValueFactory.getCodedValueType(1);
+ sourceCode = CodedValueFactory.getCodedValueType(2);
+ destCode = CodedValueFactory.getCodedValueType(3);
+ patientNumCode = CodedValueFactory.getCodedValueType(4);
+ pnrCode = CodedValueFactory.getCodedValueType(5);
+ subsetCode = CodedValueFactory.getCodedValueType(6);
+ rCode = CodedValueFactory.getCodedValueType(7);
+
+ tranType = pnrCode;
+
+
+ EventIdentificationType eit = new EventIdentificationType();
+
+ eit.setEventID(importcode);
+ eit.getEventTypeCode().add(tranType);
+ eit.setEventActionCode("C");
+
+ am.setEventIdentification(eit);
+
+ List apts = am.getActiveParticipant();
+ ActiveParticipantType source = new ActiveParticipantType();
+
+ source.setUserID(replyTo);
+ source.setUserIsRequestor(Boolean.TRUE);
+ source.getRoleIDCode().add(sourceCode);
+
+ source.setNetworkAccessPointTypeCode(VAL2);
+ source.setNetworkAccessPointID(sourceName);
+
+ apts.add(source);
+
+ ActiveParticipantType destination = new
ActiveParticipantType();
+
+ destination.setUserID(to);
+ destination.setAlternativeUserID(pid);
+ destination.setUserIsRequestor(Boolean.FALSE);
+ destination.getRoleIDCode().add(destCode);
+ destination.setNetworkAccessPointTypeCode(VAL2);
+ destination.setNetworkAccessPointID(thisName);
+
+ apts.add(destination);
+
+ List poits = am.getParticipantObjectIdentification();
+
+ ParticipantObjectIdentificationType patient = new
ParticipantObjectIdentificationType();
+
+ patient.setParticipantObjectTypeCode(VAL1);
+ patient.setParticipantObjectTypeCodeRole(VAL1);
+ patient.setParticipantObjectIDTypeCode(patientNumCode);
+ patient.setParticipantObjectID(patientId);
+
+ poits.add(patient);
+
+ ParticipantObjectIdentificationType subset = new
ParticipantObjectIdentificationType();
+
+ subset.setParticipantObjectTypeCode(VAL2);
+ subset.setParticipantObjectTypeCodeRole(VAL20);
+ subset.setParticipantObjectIDTypeCode(subsetCode);
+ subset.setParticipantObjectID(subsetId);
+
+ poits.add(subset);
+
+ QName messName = new
QName("http://www.xml.org/xml/schema/7f0d86bd/healthcare-security-audit","AuditMessage");
+ String message = marshal(messName, am,
org.xml.xml.schema._7f0d86bd.healthcare_security_audit.ObjectFactory.class);
+ System.out.println(message);
+
+ outputMessage(message);
+
+
+ } catch (Exception x) {
+
+ x.printStackTrace();
+ throw x;
+ }
+
+ }
+
+ /**
+ * Audit a provideAndRegister event.
+ *
+ * @param sourceMessageId
+ * @param sourceName
+ * @param replyTo
+ * @param to
+ * @param thisName
+ * @param patientId
+ * @param subsetId
+ * @param pid
+ * @throws Exception
+ */
+ public void provideAndRegisterAuditSource(String sourceMessageId,
String sourceName, String replyTo, String to, String thisName, String
patientId, String subsetId, String pid) throws Exception {
+ try {
+
+ AuditMessage am = new AuditMessage();
+
+ CodedValueType exportcode = null;
+ CodedValueType sourceCode = null;
+ CodedValueType pnrCode = null;
+ CodedValueType patientNumCode = null;
+ CodedValueType destCode = null;
+ CodedValueType subsetCode = null;
+
+
+ CodedValueType tranType = null;
+
+
+ exportcode = CodedValueFactory.getCodedValueType(10);
+ sourceCode = CodedValueFactory.getCodedValueType(2);
+ destCode = CodedValueFactory.getCodedValueType(3);
+ patientNumCode = CodedValueFactory.getCodedValueType(4);
+ pnrCode = CodedValueFactory.getCodedValueType(5);
+ subsetCode = CodedValueFactory.getCodedValueType(6);
+
+ tranType = pnrCode;
+
+ EventIdentificationType eit = new EventIdentificationType();
+
+ eit.setEventID(exportcode);
+ eit.getEventTypeCode().add(tranType);
+ eit.setEventActionCode("R");
+
+ am.setEventIdentification(eit);
+
+ List apts = am.getActiveParticipant();
+ ActiveParticipantType source = new ActiveParticipantType();
+
+ source.setUserID(replyTo);
+ source.setUserIsRequestor(Boolean.TRUE);
+ source.getRoleIDCode().add(sourceCode);
+ source.setNetworkAccessPointTypeCode(VAL2);
+ source.setNetworkAccessPointID(sourceName);
+
+ apts.add(source);
+
+ ActiveParticipantType destination = new
ActiveParticipantType();
+
+ destination.setUserID(to);
+ destination.setAlternativeUserID(pid);
+ destination.setUserIsRequestor(Boolean.FALSE);
+ destination.getRoleIDCode().add(destCode);
+ destination.setNetworkAccessPointTypeCode(VAL2);
+ destination.setNetworkAccessPointID(thisName);
+
+ apts.add(destination);
+
+
+ List poits = am.getParticipantObjectIdentification();
+
+ ParticipantObjectIdentificationType patient = new
ParticipantObjectIdentificationType();
+
+ patient.setParticipantObjectTypeCode(VAL1);
+ patient.setParticipantObjectTypeCodeRole(VAL1);
+ patient.setParticipantObjectIDTypeCode(patientNumCode);
+ patient.setParticipantObjectID(patientId);
+
+ poits.add(patient);
+
+ ParticipantObjectIdentificationType subset = new
ParticipantObjectIdentificationType();
+
+ subset.setParticipantObjectTypeCode(VAL2);
+ subset.setParticipantObjectTypeCodeRole(VAL20);
+ subset.setParticipantObjectIDTypeCode(subsetCode);
+ subset.setParticipantObjectID(subsetId);
+
+ poits.add(subset);
+
+
+ QName messName = new
QName("http://www.xml.org/xml/schema/7f0d86bd/healthcare-security-audit","AuditMessage");
+ String message = marshal(messName, am,
org.xml.xml.schema._7f0d86bd.healthcare_security_audit.ObjectFactory.class);
+ System.out.println(message);
+
+ outputMessage(message);
+
+ } catch (Exception x) {
+
+ x.printStackTrace();
+ throw x;
+ }
+
+ }
+
+ /**
+ * Write a audit message.
+ *
+ * @param message
+ * The audit message.
+ * @throws Exception
+ */
+ private void outputMessage(String message) throws Exception
+ {
+ String newLine = "\r\n";
+
+ if (auditMethod.equals(AuditMethodEnum.SYSLOG))
+ {
+ SyslogClient sc = new SyslogClient(auditHost,auditPort);
+ sc.sendMessage(message);
+ }
+ else if (auditMethod.equals(AuditMethodEnum.FILE))
+ {
+ if (auditFile == null)
+ throw new Exception("No Filename Foud for audit log");
+
+ FileOutputStream fos = new FileOutputStream(auditFile, true);
+ fos.write(message.getBytes());
+ fos.write(newLine.getBytes());
+ fos.close();
+ }
+ }
+
+ private static String marshal(QName altName, Object jaxb, Class<?>
factory) {
+ String ret = null;
+
+ try {
+ javax.xml.bind.JAXBContext jc =
javax.xml.bind.JAXBContext.newInstance(factory);
+ Marshaller u = jc.createMarshaller();
+
+ StringWriter sw = new StringWriter();
+ u.marshal(new JAXBElement(altName, jaxb.getClass(), jaxb), sw);
+ StringBuffer sb = sw.getBuffer();
+ ret = new String(sb);
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ System.out.println("Failed to marshal message.");
+ }
+
+ return ret;
+ }
+
+}
=======================================
--- /dev/null
+++
/java/tags/xd-1.0.3/src/main/java/com/gsihealth/auditclient/CodedValueFactory.java
Tue Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,71 @@
+/*
+Copyright (c) 2010, NHIN Direct Project
+All rights reserved.
+
+Authors:
+ Vincent Lewis vincen...@gsihealth.com
+
+Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
+
+Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
+Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
distribution. Neither the name of the The NHIN Direct Project
(nhindirect.org).
+nor the names of its contributors may be used to endorse or promote
products derived from this software without specific prior written
permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+package com.gsihealth.auditclient;
+
+import
org.xml.xml.schema._7f0d86bd.healthcare_security_audit.CodedValueType;
+
+/**
+ *
+ * @author vlewis
+ */
+public class CodedValueFactory {
+
+
+
+/*| code | codeSystem |
codeSystemName | displayName |
originalText | codedValueTypeID |*/
+
+static final String [][] codes =
{{"1","110107","DCM","DCM","Import","Import"},
+{"2","110153","DCM","DCM","Source","Source"},
+{"3","110152","DCM","DCM","Destination","Destination"},
+{"4","2","RFC-3881","RFC-3881","PatientNumber","PatientNumber"},
+{"5","ITI-41","IHETransactions","IHETransactions","ProvideandRegisterDocumentSet-b","ProvideandRegisterDocumentSet-b"},
+{"6","urn:uuid:a54d6aa5-d40d-43f9-88c5-b4633d873bdd","IHEXDSMetadata","IHEXDSMetadata","submissionsetclassificationNode","submissionsetclassificationNode"},
+{"7","ITI-42","IHETransactions","IHETransactions","RegisterDocumentSet-b","RegisterDocumentSet-b"},
+{"8","ITI-43","IHETransactions","IHETransactions","RetrieveDocumentSet-b","RetrieveDocumentSet-b"},
+{"9","ITI-18","IHETransactions","IHETransactions","RegitryStoredQuery","RegitryStoredQuery"},
+{"10","110106","DCM","DCM","Export","Export"},
+{"11","9","RFC-3881","RFC-3881","ReportNumber","ReportNumber"},
+{"12","110112","DCM","DCM","Query","Query"},
+{"13","ITI-9","IHETransactions","IHETransactions","PIXQuery","PIXQuery"},
+{"14","ITI-21","IHETransactions","IHETransactions","PatientDemographicsQuery","PatientDemographicsQuery"},
+{"15","110110","DCM","DCM","PatientRecord","PatientRecord"},
+{"16","ITI-8","IHETransactions","IHETransactions","PatientIdentityFeed","PatientIdentityFeed"}};
+
+
+ public static CodedValueType getCodedValueType(int index){
+
+ CodedValueType cvt = new CodedValueType();
+
+ String[] temp = codes[index-1];
+ cvt.setCode(temp[1]);
+ cvt.setCodeSystem(temp[2]);
+ cvt.setCodeSystemName(temp[3]);
+ cvt.setDisplayName(temp[4]);
+ cvt.setOriginalText(temp[5]);
+
+ System.out.println(cvt);
+
+
+ return cvt;
+
+ }
+}
=======================================
--- /dev/null
+++
/java/tags/xd-1.0.3/src/main/java/com/gsihealth/auditclient/SyslogClient.java
Tue Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,87 @@
+package com.gsihealth.auditclient;
+
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.net.Socket;
+
+public class SyslogClient {
+
+ private Socket client = null;
+ private int loopStart = 1;
+ private int loopEnd = 1;
+ private int delay = 10;
+ private OutputStreamWriter out = null;
+ private InputStreamReader in = null;
+ private String sendhost = "localhost";
+ private String sendport = "514";
+
+ public SyslogClient(String host, String port) {
+ sendhost = host;
+ sendport = port;
+ }
+
+ public void sendMessage(String message) throws Exception {
+
+ try {
+ connect();
+ System.out.print(message);
+ send(message);
+
+ close();
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ } // catch
+
+ }
+
+ private void connect() {
+
+
+ try {
+
+
+ client = new Socket(sendhost, new
Integer(sendport).intValue());
+ out = new
OutputStreamWriter(client.getOutputStream(), "Cp1252");
+
+ in = new InputStreamReader(client.getInputStream());
+
+ } catch (Exception x) {
+ x.printStackTrace();
+ }
+
+ }
+
+ private void close() {
+
+
+ try {
+ out.flush();
+ out.close();
+ in.close();
+
+ client.close();
+
+
+ } catch (Exception x) {
+ x.printStackTrace();
+ }
+
+ }
+
+ private void send(String s) {
+
+
+ try {
+
+ out.write(s, 0, s.length());
+ System.out.println("THE LENGTH IS " + s.length());
+ out.flush();
+
+
+ } catch (Exception x) {
+ x.printStackTrace();
+ }
+ }
+}
+
=======================================
--- /dev/null
+++
/java/tags/xd-1.0.3/src/main/java/com/gsihealth/auditclient/type/AuditMethodEnum.java
Tue Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,29 @@
+package com.gsihealth.auditclient.type;
+
+/**
+ * Enumeration of valid audit methods.
+ *
+ * @author beau
+ */
+public enum AuditMethodEnum
+{
+ FILE("file"),
+ SYSLOG("syslog");
+
+ private String method;
+
+ private AuditMethodEnum(String method)
+ {
+ this.method = method;
+ }
+
+ /**
+ * Return the value of method.
+ *
+ * @return the value of method.
+ */
+ public String getMethod()
+ {
+ return method;
+ }
+}
=======================================
--- /dev/null
+++ /java/tags/xd-1.0.3/src/main/java/org/nhind/xdm/MailClient.java Tue Oct
28 12:15:16 2014 UTC
@@ -0,0 +1,46 @@
+/*
+Copyright (c) 2010, NHIN Direct Project
+All rights reserved.
+
+Authors:
+ Vincent Lewis vincen...@gsihealth.com
+
+Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
+
+Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
+Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
distribution. Neither the name of the The NHIN Direct Project
(nhindirect.org).
+nor the names of its contributors may be used to endorse or promote
products derived from this software without specific prior written
permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+package org.nhind.xdm;
+
+import javax.mail.MessagingException;
+
+import org.nhindirect.xd.common.DirectMessage;
+
+/**
+ * This class handles the packaging and sending of XDM data over SMTP.
+ *
+ * @author vlewis
+ */
+public interface MailClient
+{
+
+ /**
+ * Mail a DirectMessage object.
+ *
+ * @param message
+ * The DirectMessage wrapper.
+ * @param messageId
+ * The message ID.
+ * @throws MessagingException
+ */
+ public void mail(DirectMessage message, String messageId, String
suffix) throws MessagingException;
+}
=======================================
--- /dev/null
+++
/java/tags/xd-1.0.3/src/main/java/org/nhind/xdm/impl/SmtpMailClient.java
Tue Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,150 @@
+/*
+Copyright (c) 2010, NHIN Direct Project
+All rights reserved.
+
+Authors:
+ Vincent Lewis vincen...@gsihealth.com
+
+Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
+
+Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
+Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
distribution. Neither the name of the The NHIN Direct Project
(nhindirect.org).
+nor the names of its contributors may be used to endorse or promote
products derived from this software without specific prior written
permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+package org.nhind.xdm.impl;
+
+import java.io.IOException;
+import java.util.Properties;
+
+import javax.activation.DataHandler;
+import javax.mail.Authenticator;
+import javax.mail.Message;
+import javax.mail.MessagingException;
+import javax.mail.Multipart;
+import javax.mail.PasswordAuthentication;
+import javax.mail.Session;
+import javax.mail.Transport;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeBodyPart;
+import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeMultipart;
+
+import org.apache.commons.lang.StringUtils;
+import org.nhind.xdm.MailClient;
+import org.nhindirect.xd.common.DirectMessage;
+
+/**
+ * This class handles the packaging and sending of XDM data over SMTP.
+ *
+ * @author vlewis
+ */
+public class SmtpMailClient implements MailClient
+{
+ final static int BUFFER = 2048;
+
+ private MimeMessage mmessage;
+ private Multipart mailBody;
+ private MimeBodyPart mainBody;
+ private MimeBodyPart mimeAttach;
+
+ private String hostname = null;
+ private String username = null;
+ private String password = null;
+
+ public SmtpMailClient(String hostname, String username, String
password)
+ {
+ if (StringUtils.isBlank(hostname) || StringUtils.isBlank(username)
|| StringUtils.isBlank(password))
+ throw new IllegalArgumentException("Hostname, username, and
password must be provided.");
+
+ this.hostname = hostname;
+ this.username = username;
+ this.password = password;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
org.nhind.xdm.MailClient#postMail(org.nhindirect.xd.common.DirectMessage,
java.lang.String)
+ */
+ public void mail(DirectMessage message, String messageId, String
suffix) throws MessagingException
+ {
+ boolean debug = false;
+ java.security.Security.addProvider(new
com.sun.net.ssl.internal.ssl.Provider());
+
+ // Set the host SMTP address
+ Properties props = new Properties();
+ props.put("mail.transport.protocol", "smtp");
+ props.put("mail.smtp.starttls.enable", "true");
+ props.put("mail.smtp.host", hostname);
+ props.put("mail.smtp.auth", "true");
+
+ Authenticator auth = new SMTPAuthenticator();
+ Session session = Session.getInstance(props, auth);
+
+ session.setDebug(debug);
+
+ InternetAddress addressFrom = new
InternetAddress(message.getSender());
+
+ InternetAddress[] addressTo = new
InternetAddress[message.getReceivers().size()];
+ int i = 0;
+ for (String recipient : message.getReceivers())
+ {
+ addressTo[i++] = new InternetAddress(recipient);
+ }
+
+ // Build message object
+ mmessage = new MimeMessage(session);
+ mmessage.setFrom(addressFrom);
+ mmessage.setRecipients(Message.RecipientType.TO, addressTo);
+ mmessage.setSubject(message.getSubject());
+
+ mailBody = new MimeMultipart();
+
+ mainBody = new MimeBodyPart();
+ mainBody.setDataHandler(new
DataHandler(message.getBody(), "text/plain"));
+ mailBody.addBodyPart(mainBody);
+
+ try
+ {
+ mimeAttach = new MimeBodyPart();
+
mimeAttach.attachFile(message.getDirectDocuments().toXdmPackage(messageId).toFile());
+ }
+ catch (IOException e)
+ {
+ throw new MessagingException("Unable to create/attach xdm zip
file", e);
+ }
+
+ mailBody.addBodyPart(mimeAttach);
+
+ mmessage.setContent(mailBody);
+ Transport.send(mmessage);
+ }
+
+ /**
+ * SimpleAuthenticator is used to do simple authentication when the
SMTP
+ * server requires it.
+ */
+ private class SMTPAuthenticator extends javax.mail.Authenticator
+ {
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see javax.mail.Authenticator#getPasswordAuthentication()
+ */
+ @Override
+ public PasswordAuthentication getPasswordAuthentication()
+ {
+ return new PasswordAuthentication(username, password);
+ }
+ }
+
+}
=======================================
--- /dev/null
+++ /java/tags/xd-1.0.3/src/main/java/org/nhind/xdm/package-info.java Tue
Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2010, NHIN Direct Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the the NHIN Direct Project (nhindirect.org)
+ * nor the names of its contributors may be used to endorse or promote
products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * Classes for handling the creation and forwarding of XDM messages.
+ */
+package org.nhind.xdm;
=======================================
--- /dev/null
+++
/java/tags/xd-1.0.3/src/main/java/org/nhind/xdr/DocumentRepositoryAbstract.java
Tue Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,478 @@
+/*
+ * Copyright (c) 2010, NHIN Direct Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the the NHIN Direct Project (nhindirect.org)
+ * nor the names of its contributors may be used to endorse or promote
products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package org.nhind.xdr;
+
+import ihe.iti.xds_b._2007.ProvideAndRegisterDocumentSetRequestType;
+import ihe.iti.xds_b._2007.RetrieveDocumentSetRequestType;
+import ihe.iti.xds_b._2007.RetrieveDocumentSetResponseType;
+import
ihe.iti.xds_b._2007.ProvideAndRegisterDocumentSetRequestType.Document;
+
+import java.io.ByteArrayOutputStream;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.UUID;
+import java.util.logging.Logger;
+
+import javax.activation.DataHandler;
+import javax.activation.DataSource;
+import javax.annotation.Resource;
+import javax.mail.util.ByteArrayDataSource;
+import javax.naming.InitialContext;
+import javax.servlet.ServletContext;
+import javax.xml.ws.WebServiceContext;
+import javax.xml.ws.handler.MessageContext;
+
+import oasis.names.tc.ebxml_regrep.xsd.rs._3.RegistryResponseType;
+
+import org.apache.commons.lang.StringUtils;
+import org.nhind.xdm.MailClient;
+import org.nhind.xdm.impl.SmtpMailClient;
+import org.nhind.xdr.config.XdConfig;
+import org.nhindirect.xd.common.DirectDocuments;
+import org.nhindirect.xd.common.DirectMessage;
+import org.nhindirect.xd.proxy.DocumentRepositoryProxy;
+import org.nhindirect.xd.routing.RoutingResolver;
+import org.nhindirect.xd.routing.impl.RoutingResolverImpl;
+import org.nhindirect.xd.soap.DirectSOAPHandlerResolver;
+import org.nhindirect.xd.soap.ThreadData;
+import org.nhindirect.xd.transform.XdsDirectDocumentsTransformer;
+import
org.nhindirect.xd.transform.impl.DefaultXdsDirectDocumentsTransformer;
+
+import com.gsihealth.auditclient.AuditMessageGenerator;
+import com.gsihealth.auditclient.type.AuditMethodEnum;
+import org.nhindirect.xd.transform.parse.ParserHL7;
+import org.nhindirect.xd.soap.SafeThreadData;
+
+
+/*
+Copyright (c) 2010, NHIN Direct Project
+All rights reserved.
+
+Authors:
+ Vincent Lewis vincen...@gsihealth.com
+
+Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
+
+Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
+Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
distribution. Neither the name of the The NHIN Direct Project
(nhindirect.org).
+nor the names of its contributors may be used to endorse or promote
products derived from this software without specific prior written
permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
+*/
+public abstract class DocumentRepositoryAbstract
+{
+ @Resource
+ protected WebServiceContext context;
+
+ private static final String PARAM_CONFIG_SERVICE = "configService";
+
+ private XdConfig config = null;
+ private RoutingResolver resolver = null;
+ private AuditMessageGenerator auditMessageGenerator = null;
+ private MailClient mailClient = null;
+ private XdsDirectDocumentsTransformer xdsDirectDocumentsTransformer =
new DefaultXdsDirectDocumentsTransformer();
+
+ private static final Logger LOGGER =
Logger.getLogger(DocumentRepositoryAbstract.class.getPackage().getName());
+
+ /**
+ * Handle an incoming XDR request with a
+ * ProvideAndRegisterDocumentSetRequestType object.
+ *
+ * @param body
+ * The ProvideAndRegisterDocumentSetRequestType object
+ * representing an XDR message
+ * @return a RegistryResponseType object
+ */
+ public abstract RegistryResponseType
documentRepositoryProvideAndRegisterDocumentSetB(ProvideAndRegisterDocumentSetRequestType
body);
+
+ /**
+ * Handle an incoming XDR request with a RetrieveDocumentSetRequestType
+ * object
+ *
+ * @param body
+ * The RetrieveDocumentSetRequestType object representing
an XDR
+ * message
+ * @return a RetrieveDocumentSetRequestType object
+ */
+ public abstract RetrieveDocumentSetResponseType
documentRepositoryRetrieveDocumentSet(RetrieveDocumentSetRequestType body);
+
+ /**
+ * Handle an incoming ProvideAndRegisterDocumentSetRequestType object
and
+ * transform to XDM or relay to another XDR endponit.
+ *
+ * @param prdst
+ * The incoming ProvideAndRegisterDocumentSetRequestType
object
+ * @return a RegistryResponseType object
+ * @throws Exception
+ */
+ protected RegistryResponseType
provideAndRegisterDocumentSet(ProvideAndRegisterDocumentSetRequestType
prdst, SafeThreadData threadData) throws Exception
+ {
+ RegistryResponseType resp = null;
+
+ try
+ {
+ @SuppressWarnings("unused")
+ InitialContext ctx = new InitialContext();
+
+ DirectDocuments documents =
xdsDirectDocumentsTransformer.transform(prdst);
+
+ List<String> forwards = new ArrayList<String>();
+
+ // Get endpoints (first check direct:to header, then go to
intendedRecipients)
+ if (StringUtils.isNotBlank(threadData.getDirectTo()))
+ forwards = Arrays.asList((new
URI(threadData.getDirectTo()).getSchemeSpecificPart()));
+ else
+ {
+ forwards = ParserHL7.parseDirectRecipients(documents);
+
+ }
+
+ // messageId = UUID.randomUUID().toString(); remove this , its
is not righ,
+ //we should keep the message id of the original message for a
lot of reasons vpl
+
+ // TODO patID and subsetId for atn
+ String patId = threadData.getMessageId();
+ String subsetId = threadData.getMessageId();
+ getAuditMessageGenerator().provideAndRegisterAudit(
threadData.getMessageId(), threadData.getRemoteHost(),
threadData.getRelatesTo(), threadData.getTo(),
+ threadData.getThisHost(), patId, subsetId,
threadData.getPid());
+
+ // Send to SMTP endpoints
+ if (getResolver().hasSmtpEndpoints(forwards))
+ {
+ String replyEmail;
+ // Get a reply address (first check direct:from header,
then go to authorPerson)
+ if (StringUtils.isNotBlank(threadData.getDirectFrom()))
+ replyEmail = (new
URI(threadData.getDirectFrom())).getSchemeSpecificPart();
+ else
+ {
+ // replyEmail =
documents.getSubmissionSet().getAuthorPerson();
+ replyEmail =
documents.getSubmissionSet().getAuthorTelecommunication();
+
+ // replyEmail =
StringUtils.splitPreserveAllTokens(replyEmail, "^")[0];
+ replyEmail = ParserHL7.parseXTN(replyEmail);
+ replyEmail = StringUtils.contains(replyEmail, "@") ?
replyEmail : "nhind...@nhindirect.org";
+ }
+
+ LOGGER.info("SENDING EMAIL TO " +
getResolver().getSmtpEndpoints(forwards) + " with message id "
+ + threadData.getMessageId());
+
+ // Construct message wrapper
+ DirectMessage message = new DirectMessage(replyEmail,
getResolver().getSmtpEndpoints(forwards));
+ message.setSubject("XD* Originated Message");
+ message.setBody("Please find the attached XDM file.");
+ message.setDirectDocuments(documents);
+
+ // Send mail
+ MailClient mailClient = getMailClient();
+ String fileName =
threadData.getMessageId().replaceAll("urn:uuid:", "");
+ mailClient.mail(message, fileName, threadData.getSuffix());
+ getAuditMessageGenerator().provideAndRegisterAuditSource(
threadData.getMessageId(), threadData.getRemoteHost(),
threadData.getRelatesTo(),
+ threadData.getTo(), threadData.getThisHost(),
patId, subsetId, threadData.getPid());
+ }
+
+ // Send to XD endpoints
+ for (String reqEndpoint :
getResolver().getXdEndpoints(forwards))
+ {
+ String endpointUrl = getResolver().resolve(reqEndpoint);
+
+ String to = StringUtils.remove(endpointUrl, "?wsdl");
+
+ threadData.setTo(to);
+ threadData.setDirectTo(to);
+ threadData.save();
+
+ List<Document> docs = prdst.getDocument();
+
+ // Make a copy of the original documents
+ List<Document> originalDocs = new ArrayList<Document>();
+ for (Document d : docs)
+ originalDocs.add(d);
+
+ // Clear document list
+ docs.clear();
+
+ // Re-add documents
+ for (Document d : originalDocs)
+ {
+ Document doc = new Document();
+ doc.setId(d.getId());
+
+ DataHandler dh = d.getValue();
+ ByteArrayOutputStream buffOS = new
ByteArrayOutputStream();
+ dh.writeTo(buffOS);
+ byte[] buff = buffOS.toByteArray();
+
+ DataSource source = new ByteArrayDataSource(buff,
documents.getDocument(d.getId()).getMetadata().getMimeType());
+ DataHandler dhnew = new DataHandler(source);
+ doc.setValue(dhnew);
+
+ docs.add(doc);
+ }
+
+ LOGGER.info(" SENDING TO ENDPOINT " + to);
+
+ DocumentRepositoryProxy proxy = new
DocumentRepositoryProxy(endpointUrl, new DirectSOAPHandlerResolver());
+
+ RegistryResponseType rrt =
proxy.provideAndRegisterDocumentSetB(prdst);
+ String test = rrt.getStatus();
+ if (test.indexOf("Failure") >= 0)
+ {
+ String error = "";
+ try{
+ error =
rrt.getRegistryErrorList().getRegistryError().get(0).getCodeContext();
+ }catch(Exception x){}
+ throw new Exception("Failure Returned from XDR
forward:" + error);
+ }
+
+ getAuditMessageGenerator().provideAndRegisterAuditSource(
threadData.getMessageId(), threadData.getRemoteHost(),
threadData.getRelatesTo(), threadData.getTo(),
+ threadData.getThisHost(), patId, subsetId,
threadData.getPid());
+ }
+
+ resp = getRepositoryProvideResponse(threadData.getMessageId());
+
+ String relatesTo = threadData.getRelatesTo();
+ threadData.setRelatesTo( threadData.getMessageId() );
+
threadData.setAction( "urn:ihe:iti:2007:ProvideAndRegisterDocumentSet-bResponse"
);
+ threadData.setTo(null);
+ threadData.save();
+
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ throw (e);
+ }
+
+ return resp;
+ }
+
+ /**
+ * Create a RegistryResponseType object.
+ *
+ * @param messageId
+ * The message ID
+ * @return a RegistryResponseType object
+ * @throws Exception
+ */
+ protected RegistryResponseType getRepositoryProvideResponse(String
messageId) throws Exception {
+ RegistryResponseType rrt = null;
+ try { // Call Web Service Operation
+
+ String status
= "urn:oasis:names:tc:ebxml-regrep:ResponseStatusType:Success"; // TODO
initialize WS operation arguments here
+
+ try {
+
+ rrt = new RegistryResponseType();
+ rrt.setStatus(status);
+
+
+ } catch (Exception ex) {
+ LOGGER.info("not sure what this ");
+ ex.printStackTrace();
+ }
+
+
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ return rrt;
+ }
+
+ private RoutingResolver getResolver()
+ {
+ if (resolver == null)
+ {
+ String configService = null;
+
+ try
+ {
+ configService =
getServletContext().getInitParameter(PARAM_CONFIG_SERVICE);
+
+ }
+ catch (Exception x)
+ {
+ // eat it
+ }
+
+ if (StringUtils.isNotBlank(configService))
+ {
+ try
+ {
+ resolver = new RoutingResolverImpl(configService);
+ config = new XdConfig(configService);
+ }
+ catch (Exception e)
+ {
+ LOGGER.warning("Unable to create resolver from URL,
falling back to default");
+ resolver = new RoutingResolverImpl();
+ }
+ }
+ else
+ {
+ resolver = new RoutingResolverImpl();
+ }
+ }
+
+ return resolver;
+ }
+
+ private ServletContext getServletContext()
+ {
+ ServletContext sc = (ServletContext)
context.getMessageContext().get(MessageContext.SERVLET_CONTEXT);
+ return sc;
+ }
+
+ private AuditMessageGenerator getAuditMessageGenerator()
+ {
+ if (auditMessageGenerator == null)
+ {
+ if(config==null){
+ config = getConfig();
+ }
+ String auditMethod = config.getAuditMethod();
+
+ if (StringUtils.equals(auditMethod,
AuditMethodEnum.SYSLOG.getMethod()))
+ {
+ String auditHost = config.getAuditHost();
+ String auditPort = config.getAuditPort();
+
+ auditMessageGenerator = new
AuditMessageGenerator(auditHost, auditPort);
+ }
+ else if (StringUtils.equals(auditMethod,
AuditMethodEnum.FILE.getMethod()))
+ {
+ String fileName = config.getAuditFile();
+
+ auditMessageGenerator = new
AuditMessageGenerator(fileName);
+ }
+ else
+ {
+ throw new IllegalArgumentException("Unknown audit
method.");
+ }
+ }
+
+ return auditMessageGenerator;
+ }
+
+ private MailClient getMailClient()
+ {
+ if(config==null){
+ config = getConfig();
+ }
+ String hostname = config.getMailHost();
+ String username = config.getMailUser();
+ String password = config.getMailPass();
+
+ return new SmtpMailClient(hostname, username, password);
+ }
+
+ /**
+ * Set the value of mailClient.
+ *
+ * @param mailClient
+ * the value of mailClient.
+ */
+ public void setMailClient(MailClient mailClient)
+ {
+ this.mailClient = mailClient;
+ }
+
+ private XdConfig getConfig()
+ {
+ XdConfig lconfig =null;
+ String configService = null;
+
+ try
+ {
+ configService =
getServletContext().getInitParameter(PARAM_CONFIG_SERVICE);
+ }
+ catch (Exception e)
+ {
+ // TODO: define a custom exception
+ throw new RuntimeException("Unable to find XD
configuration URL", e);
+ }
+
+ if (StringUtils.isNotBlank(configService))
+ {
+ try
+ {
+ lconfig = new XdConfig(configService);
+ }
+ catch (Exception e)
+ {
+ // TODO: define a custom exception
+ throw new RuntimeException("Unable to create config
from URL", e);
+ }
+ }
+ else
+ {
+ // TODO: define a custom exception
+ throw new RuntimeException("Configuration URL is blank");
+ }
+
+
+ return lconfig;
+ }
+
+ public void setConfig(XdConfig config)
+ {
+ this.config = config;
+ }
+
+ /**
+ * Set the value of auditMessageGenerator.
+ *
+ * @param auditMessageGenerator
+ * the value of auditMessageGenerator.
+ */
+ public void setAuditMessageGenerator(AuditMessageGenerator
auditMessageGenerator)
+ {
+ this.auditMessageGenerator = auditMessageGenerator;
+ }
+
+ /**
+ * Set the value of resolver.
+ *
+ * @param resolver
+ * the value of resolver.
+ */
+ public void setResolver(RoutingResolver resolver)
+ {
+ this.resolver = resolver;
+ }
+
+}
+
+
=======================================
--- /dev/null
+++
/java/tags/xd-1.0.3/src/main/java/org/nhind/xdr/DocumentRepository_Service_handler.xml
Tue Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
+ <handler-chain>
+ <handler>
+ <handler-name>org.nhindirect.xd.soap.DirectSOAPHandler</handler-name>
+
<handler-class>org.nhindirect.xd.soap.DirectSOAPHandler</handler-class>
+ </handler>
+ </handler-chain>
+</handler-chains>
=======================================
--- /dev/null
+++ /java/tags/xd-1.0.3/src/main/java/org/nhind/xdr/XDR.java Tue Oct 28
12:15:16 2014 UTC
@@ -0,0 +1,113 @@
+/*
+Copyright (c) 2010, NHIN Direct Project
+All rights reserved.
+
+Authors:
+ Vincent Lewis vincen...@gsihealth.com
+
+Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
+
+Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
+Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
distribution. Neither the name of the The NHIN Direct Project
(nhindirect.org).
+nor the names of its contributors may be used to endorse or promote
products derived from this software without specific prior written
permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+package org.nhind.xdr;
+
+import ihe.iti.xds_b._2007.ProvideAndRegisterDocumentSetRequestType;
+import ihe.iti.xds_b._2007.RetrieveDocumentSetRequestType;
+import ihe.iti.xds_b._2007.RetrieveDocumentSetResponseType;
+import java.util.List;
+import java.util.UUID;
+import javax.jws.HandlerChain;
+import javax.jws.WebService;
+import javax.xml.ws.BindingType;
+import javax.xml.ws.soap.SOAPBinding;
+import oasis.names.tc.ebxml_regrep.xsd.rs._3.RegistryError;
+import oasis.names.tc.ebxml_regrep.xsd.rs._3.RegistryErrorList;
+import oasis.names.tc.ebxml_regrep.xsd.rs._3.RegistryResponseType;
+import org.nhindirect.xd.soap.SafeThreadData;
+
+/**
+ *
+ * @author vlewis
+ */
+@WebService(serviceName = "DocumentRepository_Service",
+ portName = "DocumentRepository_Port_Soap12",
+ endpointInterface
= "ihe.iti.xds_b._2007.DocumentRepositoryPortType",
+ targetNamespace = "urn:ihe:iti:xds-b:2007",
+ wsdlLocation
= "WEB-INF/wsdl/XDS.b_DocumentRepositoryWSDLSynchMTOM.wsdl")
+@BindingType(SOAPBinding.SOAP12HTTP_BINDING)
+@HandlerChain(file = "/DocumentRepository_Service_handler.xml")
+public class XDR extends DocumentRepositoryAbstract{
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
org.nhind.xdr.DocumentRepositoryAbstract#documentRepositoryProvideAndRegisterDocumentSetB(ihe.iti.xds_b._2007.ProvideAndRegisterDocumentSetRequestType)
+ */
+ public RegistryResponseType
documentRepositoryProvideAndRegisterDocumentSetB(ProvideAndRegisterDocumentSetRequestType
body) {
+ RegistryResponseType resp = null;
+ /**
+ * Get thread data
+ */
+ Long threadID = Thread.currentThread().getId();
+ SafeThreadData threadData =
SafeThreadData.GetThreadInstance(threadID);
+ try {
+ resp = provideAndRegisterDocumentSet(body, threadData);
+ } catch (Exception x) {
+
+ threadData.setRelatesTo(threadData.getMessageId());
+
threadData.setAction("urn:ihe:iti:2007:ProvideAndRegisterDocumentSet-bResponse");
+ threadData.setMessageId(UUID.randomUUID().toString());
+ threadData.setTo(threadData.getEndpoint());
+ threadData.save();
+
+ resp = new RegistryResponseType();
+
resp.setStatus("urn:oasis:names:tc:ebxml-regrep:ResponseStatusType:Failure");
+ RegistryErrorList rel = new RegistryErrorList();
+ String error = x.getMessage();
+ if(error==null){
+ error=x.toString();
+ }
+ rel.setHighestSeverity(error);
+ List<RegistryError> rl = rel.getRegistryError();
+ RegistryError re = new RegistryError();
+ String[] mess;
+ if (error.contains(":"))
+ mess = error.split(":");
+ else
+ mess = error.split(" ");
+
+ String errorCode = mess[0];
+ re.setErrorCode(errorCode);
+ re.setSeverity("Error");
+ re.setCodeContext(error);
+ re.setLocation("XDR.java");
+ re.setValue(error);
+ rl.add(re);
+ resp.setRegistryErrorList(rel);
+
+ }
+ return resp;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ *
@seeorg.nhind.xdr.DocumentRepositoryAbstract#documentRepositoryRetrieveDocumentSet(ihe.iti.xds_b._2007.RetrieveDocumentSetRequestType)
+ */
+ public RetrieveDocumentSetResponseType
documentRepositoryRetrieveDocumentSet(RetrieveDocumentSetRequestType body) {
+
+ throw new UnsupportedOperationException("Not implemented for XDR");
+ }
+
+}
+
=======================================
--- /dev/null
+++ /java/tags/xd-1.0.3/src/main/java/org/nhind/xdr/config/XdConfig.java
Tue Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,313 @@
+/*
+ * Copyright (c) 2010, NHIN Direct Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the the NHIN Direct Project (nhindirect.org)
+ * nor the names of its contributors may be used to endorse or promote
products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package org.nhind.xdr.config;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nhind.config.ConfigurationServiceProxy;
+import org.nhind.config.Setting;
+
+/**
+ * Configuration class for XD related operations.
+ *
+ * @author beau
+ */
+public class XdConfig
+{
+ private static final Log LOGGER =
LogFactory.getFactory().getInstance(XdConfig.class);
+
+ /**
+ * Enumeration representing valid XD settings and default values.
+ *
+ * @author beau
+ */
+ private enum Settings
+ {
+ MAIL_HOST("xd.MailHost", "localhost"),
+ MAIL_USER("xd.MailUser", "direct"),
+ MAIL_PASS("xd.MailPass"),
+ AUDIT_METHOD("xd.AuditMethod"),
+ AUDIT_HOST("xd.AuditHost"),
+ AUDIT_PORT("xd.AuditPort"),
+ AUDIT_FILE("xd.AuditFile");
+
+ private String key;
+ private String dflt;
+
+ private Settings(String key)
+ {
+ this.key = key;
+ }
+
+ private Settings(String key, String dflt)
+ {
+ this(key);
+ this.dflt = dflt;
+ }
+
+ /**
+ * Return the value of key.
+ *
+ * @return the value of key.
+ */
+ public String getKey()
+ {
+ return key;
+ }
+
+ /**
+ * Return the value of dflt.
+ *
+ * @return the value of dflt.
+ */
+ public String getDefault()
+ {
+ return dflt;
+ }
+ }
+
+ private String mailHost;
+ private String mailUser;
+ private String mailPass;
+ private String auditMethod;
+ private String auditHost;
+ private String auditPort;
+ private String auditFile;
+
+ private ConfigurationServiceProxy proxy;
+
+ /**
+ * Default constructor.
+ */
+ public XdConfig()
+ {
+ this.init();
+ }
+
+ /**
+ * Constructor which takes a configuration-service endpoint.
+ *
+ * @param endpoint
+ * The endpoint for the configuration-service.
+ */
+ public XdConfig(String endpoint)
+ {
+ this.proxy = new ConfigurationServiceProxy(endpoint);
+ this.init();
+ }
+
+ /**
+ * Constructor which takes a ConfigurationServiceProxy.
+ *
+ * @param proxy
+ * The ConfigurationServiceProxy object.
+ */
+ public XdConfig(ConfigurationServiceProxy proxy)
+ {
+ this.proxy = proxy;
+ this.init();
+ }
+
+ /**
+ * Initialize the configuration object.
+ */
+ public void init()
+ {
+ if (proxy == null)
+ return;
+
+ try
+ {
+ mailHost = getValue(Settings.MAIL_HOST);
+ mailUser = getValue(Settings.MAIL_USER);
+ mailPass = getValue(Settings.MAIL_PASS);
+ auditMethod = getValue(Settings.AUDIT_METHOD);
+ auditHost = getValue(Settings.AUDIT_HOST);
+ auditPort = getValue(Settings.AUDIT_PORT);
+ auditFile = getValue(Settings.AUDIT_FILE);
+ }
+ catch (Exception e)
+ {
+ LOGGER.error("Error initializing the XD configuration");
+ }
+ }
+
+ private String getValue(Settings xdSetting) throws Exception
+ {
+ Setting tmp;
+ String value = null;
+
+ if (proxy != null)
+ {
+ tmp = proxy.getSettingByName(xdSetting.getKey());
+ if (tmp != null)
+ value = tmp.getValue();
+ else
+ value = xdSetting.getDefault();
+ }
+
+ return value;
+ }
+
+ /**
+ * @return the mailHost
+ */
+ public String getMailHost()
+ {
+ return mailHost;
+ }
+
+ /**
+ * @param mailHost
+ * the mailHost to set
+ */
+ public void setMailHost(String mailHost)
+ {
+ this.mailHost = mailHost;
+ }
+
+ /**
+ * @return the mailUser
+ */
+ public String getMailUser()
+ {
+ return mailUser;
+ }
+
+ /**
+ * @param mailUser
+ * the mailUser to set
+ */
+ public void setMailUser(String mailUser)
+ {
+ this.mailUser = mailUser;
+ }
+
+ /**
+ * @return the mailPass
+ */
+ public String getMailPass()
+ {
+ return mailPass;
+ }
+
+ /**
+ * @param mailPass
+ * the mailPass to set
+ */
+ public void setMailPass(String mailPass)
+ {
+ this.mailPass = mailPass;
+ }
+
+ /**
+ * @return the auditMethod
+ */
+ public String getAuditMethod()
+ {
+ return auditMethod;
+ }
+
+ /**
+ * @param auditMethod
+ * the auditMethod to set
+ */
+ public void setAuditMethod(String auditMethod)
+ {
+ this.auditMethod = auditMethod;
+ }
+
+ /**
+ * @return the auditHost
+ */
+ public String getAuditHost()
+ {
+ return auditHost;
+ }
+
+ /**
+ * @param auditHost
+ * the auditHost to set
+ */
+ public void setAuditHost(String auditHost)
+ {
+ this.auditHost = auditHost;
+ }
+
+ /**
+ * @return the auditPort
+ */
+ public String getAuditPort()
+ {
+ return auditPort;
+ }
+
+ /**
+ * @param auditPort
+ * the auditPort to set
+ */
+ public void setAuditPort(String auditPort)
+ {
+ this.auditPort = auditPort;
+ }
+
+ /**
+ * @return the auditFile
+ */
+ public String getAuditFile()
+ {
+ return auditFile;
+ }
+
+ /**
+ * @param auditFile
+ * the auditFile to set
+ */
+ public void setAuditFile(String auditFile)
+ {
+ this.auditFile = auditFile;
+ }
+
+ /**
+ * @return the proxy
+ */
+ public ConfigurationServiceProxy getProxy()
+ {
+ return proxy;
+ }
+
+ /**
+ * @param proxy
+ * the proxy to set
+ */
+ public void setProxy(ConfigurationServiceProxy proxy)
+ {
+ this.proxy = proxy;
+ }
+}
=======================================
--- /dev/null
+++ /java/tags/xd-1.0.3/src/main/java/org/nhind/xdr/package-info.java Tue
Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2010, NHIN Direct Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the the NHIN Direct Project (nhindirect.org)
+ * nor the names of its contributors may be used to endorse or promote
products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * Service classes for the handling of XDS messages.
+ */
+package org.nhind.xdr;
=======================================
--- /dev/null
+++
/java/tags/xd-1.0.3/src/main/java/org/xml/xml/schema/_7f0d86bd/healthcare_security_audit/ActiveParticipantType.java
Tue Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,244 @@
+
+package org.xml.xml.schema._7f0d86bd.healthcare_security_audit;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for ActiveParticipantType complex type.
+ *
+ * <p>The following schema fragment specifies the expected content
contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="ActiveParticipantType">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence minOccurs="0">
+ * &lt;element name="RoleIDCode"
type="{http://www.xml.org/xml/schema/7f0d86bd/healthcare-security-audit}CodedValueType"
maxOccurs="unbounded" minOccurs="0"/>
+ * &lt;/sequence>
+ * &lt;attribute name="UserID" use="required"
type="{http://www.w3.org/2001/XMLSchema}string" />
+ * &lt;attribute name="AlternativeUserID"
type="{http://www.w3.org/2001/XMLSchema}string" />
+ * &lt;attribute name="UserName"
type="{http://www.w3.org/2001/XMLSchema}string" />
+ * &lt;attribute name="UserIsRequestor"
type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+ * &lt;attribute name="NetworkAccessPointID"
type="{http://www.w3.org/2001/XMLSchema}string" />
+ * &lt;attribute name="NetworkAccessPointTypeCode">
+ * &lt;simpleType>
+ * &lt;restriction
base="{http://www.w3.org/2001/XMLSchema}unsignedByte">
+ * &lt;enumeration value="1"/>
+ * &lt;enumeration value="2"/>
+ * &lt;enumeration value="3"/>
+ * &lt;/restriction>
+ * &lt;/simpleType>
+ * &lt;/attribute>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ActiveParticipantType", propOrder = {
+ "roleIDCode"
+})
+public class ActiveParticipantType {
+
+ @XmlElement(name = "RoleIDCode")
+ protected List<CodedValueType> roleIDCode;
+ @XmlAttribute(name = "UserID", required = true)
+ protected String userID;
+ @XmlAttribute(name = "AlternativeUserID")
+ protected String alternativeUserID;
+ @XmlAttribute(name = "UserName")
+ protected String userName;
+ @XmlAttribute(name = "UserIsRequestor")
+ protected Boolean userIsRequestor;
+ @XmlAttribute(name = "NetworkAccessPointID")
+ protected String networkAccessPointID;
+ @XmlAttribute(name = "NetworkAccessPointTypeCode")
+ protected Short networkAccessPointTypeCode;
+
+ /**
+ * Gets the value of the roleIDCode property.
+ *
+ * <p>
+ * This accessor method returns a reference to the live list,
+ * not a snapshot. Therefore any modification you make to the
+ * returned list will be present inside the JAXB object.
+ * This is why there is not a <CODE>set</CODE> method for the
roleIDCode property.
+ *
+ * <p>
+ * For example, to add a new item, do as follows:
+ * <pre>
+ * getRoleIDCode().add(newItem);
+ * </pre>
+ *
+ *
+ * <p>
+ * Objects of the following type(s) are allowed in the list
+ * {@link CodedValueType }
+ *
+ *
+ */
+ public List<CodedValueType> getRoleIDCode() {
+ if (roleIDCode == null) {
+ roleIDCode = new ArrayList<CodedValueType>();
+ }
+ return this.roleIDCode;
+ }
+
+ /**
+ * Gets the value of the userID property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getUserID() {
+ return userID;
+ }
+
+ /**
+ * Sets the value of the userID property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setUserID(String value) {
+ this.userID = value;
+ }
+
+ /**
+ * Gets the value of the alternativeUserID property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getAlternativeUserID() {
+ return alternativeUserID;
+ }
+
+ /**
+ * Sets the value of the alternativeUserID property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setAlternativeUserID(String value) {
+ this.alternativeUserID = value;
+ }
+
+ /**
+ * Gets the value of the userName property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getUserName() {
+ return userName;
+ }
+
+ /**
+ * Sets the value of the userName property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setUserName(String value) {
+ this.userName = value;
+ }
+
+ /**
+ * Gets the value of the userIsRequestor property.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public boolean isUserIsRequestor() {
+ if (userIsRequestor == null) {
+ return true;
+ } else {
+ return userIsRequestor;
+ }
+ }
+
+ /**
+ * Sets the value of the userIsRequestor property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setUserIsRequestor(Boolean value) {
+ this.userIsRequestor = value;
+ }
+
+ /**
+ * Gets the value of the networkAccessPointID property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getNetworkAccessPointID() {
+ return networkAccessPointID;
+ }
+
+ /**
+ * Sets the value of the networkAccessPointID property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setNetworkAccessPointID(String value) {
+ this.networkAccessPointID = value;
+ }
+
+ /**
+ * Gets the value of the networkAccessPointTypeCode property.
+ *
+ * @return
+ * possible object is
+ * {@link Short }
+ *
+ */
+ public Short getNetworkAccessPointTypeCode() {
+ return networkAccessPointTypeCode;
+ }
+
+ /**
+ * Sets the value of the networkAccessPointTypeCode property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Short }
+ *
+ */
+ public void setNetworkAccessPointTypeCode(Short value) {
+ this.networkAccessPointTypeCode = value;
+ }
+
+}
=======================================
--- /dev/null
+++
/java/tags/xd-1.0.3/src/main/java/org/xml/xml/schema/_7f0d86bd/healthcare_security_audit/AuditMessage.java
Tue Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,198 @@
+
+package org.xml.xml.schema._7f0d86bd.healthcare_security_audit;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for anonymous complex type.
+ *
+ * <p>The following schema fragment specifies the expected content
contained within this class.
+ *
+ * <pre>
+ * &lt;complexType>
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="EventIdentification"
type="{http://www.xml.org/xml/schema/7f0d86bd/healthcare-security-audit}EventIdentificationType"/>
+ * &lt;element name="ActiveParticipant" maxOccurs="unbounded">
+ * &lt;complexType>
+ * &lt;complexContent>
+ * &lt;extension
base="{http://www.xml.org/xml/schema/7f0d86bd/healthcare-security-audit}ActiveParticipantType">
+ * &lt;/extension>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * &lt;/element>
+ * &lt;element name="AuditSourceIdentification"
type="{http://www.xml.org/xml/schema/7f0d86bd/healthcare-security-audit}AuditSourceIdentificationType"
maxOccurs="unbounded"/>
+ * &lt;element name="ParticipantObjectIdentification"
type="{http://www.xml.org/xml/schema/7f0d86bd/healthcare-security-audit}ParticipantObjectIdentificationType"
maxOccurs="unbounded" minOccurs="0"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "", propOrder = {
+ "eventIdentification",
+ "activeParticipant",
+ "auditSourceIdentification",
+ "participantObjectIdentification"
+})
+@XmlRootElement(name = "AuditMessage")
+public class AuditMessage {
+
+ @XmlElement(name = "EventIdentification", required = true)
+ protected EventIdentificationType eventIdentification;
+ @XmlElement(name = "ActiveParticipant", required = true)
+ protected List<AuditMessage.ActiveParticipant> activeParticipant;
+ @XmlElement(name = "AuditSourceIdentification", required = true)
+ protected List<AuditSourceIdentificationType>
auditSourceIdentification;
+ @XmlElement(name = "ParticipantObjectIdentification")
+ protected List<ParticipantObjectIdentificationType>
participantObjectIdentification;
+
+ /**
+ * Gets the value of the eventIdentification property.
+ *
+ * @return
+ * possible object is
+ * {@link EventIdentificationType }
+ *
+ */
+ public EventIdentificationType getEventIdentification() {
+ return eventIdentification;
+ }
+
+ /**
+ * Sets the value of the eventIdentification property.
+ *
+ * @param value
+ * allowed object is
+ * {@link EventIdentificationType }
+ *
+ */
+ public void setEventIdentification(EventIdentificationType value) {
+ this.eventIdentification = value;
+ }
+
+ /**
+ * Gets the value of the activeParticipant property.
+ *
+ * <p>
+ * This accessor method returns a reference to the live list,
+ * not a snapshot. Therefore any modification you make to the
+ * returned list will be present inside the JAXB object.
+ * This is why there is not a <CODE>set</CODE> method for the
activeParticipant property.
+ *
+ * <p>
+ * For example, to add a new item, do as follows:
+ * <pre>
+ * getActiveParticipant().add(newItem);
+ * </pre>
+ *
+ *
+ * <p>
+ * Objects of the following type(s) are allowed in the list
+ * {@link AuditMessage.ActiveParticipant }
+ *
+ *
+ */
+ public List<AuditMessage.ActiveParticipant> getActiveParticipant() {
+ if (activeParticipant == null) {
+ activeParticipant = new
ArrayList<AuditMessage.ActiveParticipant>();
+ }
+ return this.activeParticipant;
+ }
+
+ /**
+ * Gets the value of the auditSourceIdentification property.
+ *
+ * <p>
+ * This accessor method returns a reference to the live list,
+ * not a snapshot. Therefore any modification you make to the
+ * returned list will be present inside the JAXB object.
+ * This is why there is not a <CODE>set</CODE> method for the
auditSourceIdentification property.
+ *
+ * <p>
+ * For example, to add a new item, do as follows:
+ * <pre>
+ * getAuditSourceIdentification().add(newItem);
+ * </pre>
+ *
+ *
+ * <p>
+ * Objects of the following type(s) are allowed in the list
+ * {@link AuditSourceIdentificationType }
+ *
+ *
+ */
+ public List<AuditSourceIdentificationType>
getAuditSourceIdentification() {
+ if (auditSourceIdentification == null) {
+ auditSourceIdentification = new
ArrayList<AuditSourceIdentificationType>();
+ }
+ return this.auditSourceIdentification;
+ }
+
+ /**
+ * Gets the value of the participantObjectIdentification property.
+ *
+ * <p>
+ * This accessor method returns a reference to the live list,
+ * not a snapshot. Therefore any modification you make to the
+ * returned list will be present inside the JAXB object.
+ * This is why there is not a <CODE>set</CODE> method for the
participantObjectIdentification property.
+ *
+ * <p>
+ * For example, to add a new item, do as follows:
+ * <pre>
+ * getParticipantObjectIdentification().add(newItem);
+ * </pre>
+ *
+ *
+ * <p>
+ * Objects of the following type(s) are allowed in the list
+ * {@link ParticipantObjectIdentificationType }
+ *
+ *
+ */
+ public List<ParticipantObjectIdentificationType>
getParticipantObjectIdentification() {
+ if (participantObjectIdentification == null) {
+ participantObjectIdentification = new
ArrayList<ParticipantObjectIdentificationType>();
+ }
+ return this.participantObjectIdentification;
+ }
+
+
+ /**
+ * <p>Java class for anonymous complex type.
+ *
+ * <p>The following schema fragment specifies the expected content
contained within this class.
+ *
+ * <pre>
+ * &lt;complexType>
+ * &lt;complexContent>
+ * &lt;extension
base="{http://www.xml.org/xml/schema/7f0d86bd/healthcare-security-audit}ActiveParticipantType">
+ * &lt;/extension>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "")
+ public static class ActiveParticipant
+ extends ActiveParticipantType
+ {
+
+
+ }
+
+}
=======================================
--- /dev/null
+++
/java/tags/xd-1.0.3/src/main/java/org/xml/xml/schema/_7f0d86bd/healthcare_security_audit/AuditSourceIdentificationType.java
Tue Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,124 @@
+
+package org.xml.xml.schema._7f0d86bd.healthcare_security_audit;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for AuditSourceIdentificationType complex type.
+ *
+ * <p>The following schema fragment specifies the expected content
contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="AuditSourceIdentificationType">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="AuditSourceTypeCode"
type="{http://www.xml.org/xml/schema/7f0d86bd/healthcare-security-audit}CodedValueType"
maxOccurs="unbounded" minOccurs="0"/>
+ * &lt;/sequence>
+ * &lt;attribute name="AuditEnterpriseSiteID"
type="{http://www.w3.org/2001/XMLSchema}string" />
+ * &lt;attribute name="AuditSourceID" use="required"
type="{http://www.w3.org/2001/XMLSchema}string" />
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "AuditSourceIdentificationType", propOrder = {
+ "auditSourceTypeCode"
+})
+public class AuditSourceIdentificationType {
+
+ @XmlElement(name = "AuditSourceTypeCode")
+ protected List<CodedValueType> auditSourceTypeCode;
+ @XmlAttribute(name = "AuditEnterpriseSiteID")
+ protected String auditEnterpriseSiteID;
+ @XmlAttribute(name = "AuditSourceID", required = true)
+ protected String auditSourceID;
+
+ /**
+ * Gets the value of the auditSourceTypeCode property.
+ *
+ * <p>
+ * This accessor method returns a reference to the live list,
+ * not a snapshot. Therefore any modification you make to the
+ * returned list will be present inside the JAXB object.
+ * This is why there is not a <CODE>set</CODE> method for the
auditSourceTypeCode property.
+ *
+ * <p>
+ * For example, to add a new item, do as follows:
+ * <pre>
+ * getAuditSourceTypeCode().add(newItem);
+ * </pre>
+ *
+ *
+ * <p>
+ * Objects of the following type(s) are allowed in the list
+ * {@link CodedValueType }
+ *
+ *
+ */
+ public List<CodedValueType> getAuditSourceTypeCode() {
+ if (auditSourceTypeCode == null) {
+ auditSourceTypeCode = new ArrayList<CodedValueType>();
+ }
+ return this.auditSourceTypeCode;
+ }
+
+ /**
+ * Gets the value of the auditEnterpriseSiteID property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getAuditEnterpriseSiteID() {
+ return auditEnterpriseSiteID;
+ }
+
+ /**
+ * Sets the value of the auditEnterpriseSiteID property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setAuditEnterpriseSiteID(String value) {
+ this.auditEnterpriseSiteID = value;
+ }
+
+ /**
+ * Gets the value of the auditSourceID property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getAuditSourceID() {
+ return auditSourceID;
+ }
+
+ /**
+ * Sets the value of the auditSourceID property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setAuditSourceID(String value) {
+ this.auditSourceID = value;
+ }
+
+}
=======================================
--- /dev/null
+++
/java/tags/xd-1.0.3/src/main/java/org/xml/xml/schema/_7f0d86bd/healthcare_security_audit/CodedValueType.java
Tue Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,165 @@
+
+package org.xml.xml.schema._7f0d86bd.healthcare_security_audit;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for CodedValueType complex type.
+ *
+ * <p>The following schema fragment specifies the expected content
contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="CodedValueType">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;attGroup
ref="{http://www.xml.org/xml/schema/7f0d86bd/healthcare-security-audit}CodeSystem"/>
+ * &lt;attribute name="code" use="required"
type="{http://www.w3.org/2001/XMLSchema}string" />
+ * &lt;attribute name="displayName"
type="{http://www.w3.org/2001/XMLSchema}string" />
+ * &lt;attribute name="originalText"
type="{http://www.w3.org/2001/XMLSchema}string" />
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "CodedValueType")
+public class CodedValueType {
+
+ @XmlAttribute(required = true)
+ protected String code;
+ @XmlAttribute
+ protected String displayName;
+ @XmlAttribute
+ protected String originalText;
+ @XmlAttribute
+ protected String codeSystem;
+ @XmlAttribute
+ protected String codeSystemName;
+
+ /**
+ * Gets the value of the code property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getCode() {
+ return code;
+ }
+
+ /**
+ * Sets the value of the code property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setCode(String value) {
+ this.code = value;
+ }
+
+ /**
+ * Gets the value of the displayName property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDisplayName() {
+ return displayName;
+ }
+
+ /**
+ * Sets the value of the displayName property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDisplayName(String value) {
+ this.displayName = value;
+ }
+
+ /**
+ * Gets the value of the originalText property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getOriginalText() {
+ return originalText;
+ }
+
+ /**
+ * Sets the value of the originalText property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setOriginalText(String value) {
+ this.originalText = value;
+ }
+
+ /**
+ * Gets the value of the codeSystem property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getCodeSystem() {
+ return codeSystem;
+ }
+
+ /**
+ * Sets the value of the codeSystem property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setCodeSystem(String value) {
+ this.codeSystem = value;
+ }
+
+ /**
+ * Gets the value of the codeSystemName property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getCodeSystemName() {
+ return codeSystemName;
+ }
+
+ /**
+ * Sets the value of the codeSystemName property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setCodeSystemName(String value) {
+ this.codeSystemName = value;
+ }
+
+}
=======================================
--- /dev/null
+++
/java/tags/xd-1.0.3/src/main/java/org/xml/xml/schema/_7f0d86bd/healthcare_security_audit/EventIdentificationType.java
Tue Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,202 @@
+
+package org.xml.xml.schema._7f0d86bd.healthcare_security_audit;
+
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.datatype.XMLGregorianCalendar;
+
+
+/**
+ * <p>Java class for EventIdentificationType complex type.
+ *
+ * <p>The following schema fragment specifies the expected content
contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="EventIdentificationType">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="EventID"
type="{http://www.xml.org/xml/schema/7f0d86bd/healthcare-security-audit}CodedValueType"/>
+ * &lt;element name="EventTypeCode"
type="{http://www.xml.org/xml/schema/7f0d86bd/healthcare-security-audit}CodedValueType"
maxOccurs="unbounded" minOccurs="0"/>
+ * &lt;/sequence>
+ * &lt;attribute name="EventActionCode">
+ * &lt;simpleType>
+ * &lt;restriction
base="{http://www.w3.org/2001/XMLSchema}string">
+ * &lt;enumeration value="C"/>
+ * &lt;enumeration value="R"/>
+ * &lt;enumeration value="U"/>
+ * &lt;enumeration value="D"/>
+ * &lt;enumeration value="E"/>
+ * &lt;/restriction>
+ * &lt;/simpleType>
+ * &lt;/attribute>
+ * &lt;attribute name="EventDateTime" use="required"
type="{http://www.w3.org/2001/XMLSchema}dateTime" />
+ * &lt;attribute name="EventOutcomeIndicator" use="required">
+ * &lt;simpleType>
+ * &lt;restriction
base="{http://www.w3.org/2001/XMLSchema}integer">
+ * &lt;enumeration value="0"/>
+ * &lt;enumeration value="4"/>
+ * &lt;enumeration value="8"/>
+ * &lt;enumeration value="12"/>
+ * &lt;/restriction>
+ * &lt;/simpleType>
+ * &lt;/attribute>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "EventIdentificationType", propOrder = {
+ "eventID",
+ "eventTypeCode"
+})
+public class EventIdentificationType {
+
+ @XmlElement(name = "EventID", required = true)
+ protected CodedValueType eventID;
+ @XmlElement(name = "EventTypeCode")
+ protected List<CodedValueType> eventTypeCode;
+ @XmlAttribute(name = "EventActionCode")
+ protected String eventActionCode;
+ @XmlAttribute(name = "EventDateTime", required = true)
+ @XmlSchemaType(name = "dateTime")
+ protected XMLGregorianCalendar eventDateTime;
+ @XmlAttribute(name = "EventOutcomeIndicator", required = true)
+ protected BigInteger eventOutcomeIndicator;
+
+ /**
+ * Gets the value of the eventID property.
+ *
+ * @return
+ * possible object is
+ * {@link CodedValueType }
+ *
+ */
+ public CodedValueType getEventID() {
+ return eventID;
+ }
+
+ /**
+ * Sets the value of the eventID property.
+ *
+ * @param value
+ * allowed object is
+ * {@link CodedValueType }
+ *
+ */
+ public void setEventID(CodedValueType value) {
+ this.eventID = value;
+ }
+
+ /**
+ * Gets the value of the eventTypeCode property.
+ *
+ * <p>
+ * This accessor method returns a reference to the live list,
+ * not a snapshot. Therefore any modification you make to the
+ * returned list will be present inside the JAXB object.
+ * This is why there is not a <CODE>set</CODE> method for the
eventTypeCode property.
+ *
+ * <p>
+ * For example, to add a new item, do as follows:
+ * <pre>
+ * getEventTypeCode().add(newItem);
+ * </pre>
+ *
+ *
+ * <p>
+ * Objects of the following type(s) are allowed in the list
+ * {@link CodedValueType }
+ *
+ *
+ */
+ public List<CodedValueType> getEventTypeCode() {
+ if (eventTypeCode == null) {
+ eventTypeCode = new ArrayList<CodedValueType>();
+ }
+ return this.eventTypeCode;
+ }
+
+ /**
+ * Gets the value of the eventActionCode property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getEventActionCode() {
+ return eventActionCode;
+ }
+
+ /**
+ * Sets the value of the eventActionCode property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setEventActionCode(String value) {
+ this.eventActionCode = value;
+ }
+
+ /**
+ * Gets the value of the eventDateTime property.
+ *
+ * @return
+ * possible object is
+ * {@link XMLGregorianCalendar }
+ *
+ */
+ public XMLGregorianCalendar getEventDateTime() {
+ return eventDateTime;
+ }
+
+ /**
+ * Sets the value of the eventDateTime property.
+ *
+ * @param value
+ * allowed object is
+ * {@link XMLGregorianCalendar }
+ *
+ */
+ public void setEventDateTime(XMLGregorianCalendar value) {
+ this.eventDateTime = value;
+ }
+
+ /**
+ * Gets the value of the eventOutcomeIndicator property.
+ *
+ * @return
+ * possible object is
+ * {@link BigInteger }
+ *
+ */
+ public BigInteger getEventOutcomeIndicator() {
+ return eventOutcomeIndicator;
+ }
+
+ /**
+ * Sets the value of the eventOutcomeIndicator property.
+ *
+ * @param value
+ * allowed object is
+ * {@link BigInteger }
+ *
+ */
+ public void setEventOutcomeIndicator(BigInteger value) {
+ this.eventOutcomeIndicator = value;
+ }
+
+}
=======================================
--- /dev/null
+++
/java/tags/xd-1.0.3/src/main/java/org/xml/xml/schema/_7f0d86bd/healthcare_security_audit/FindAuditEventsRequest.java
Tue Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,152 @@
+
+package org.xml.xml.schema._7f0d86bd.healthcare_security_audit;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.datatype.XMLGregorianCalendar;
+
+
+/**
+ * <p>Java class for anonymous complex type.
+ *
+ * <p>The following schema fragment specifies the expected content
contained within this class.
+ *
+ * <pre>
+ * &lt;complexType>
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="patientId"
type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="userId"
type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="beginDateTime"
type="{http://www.w3.org/2001/XMLSchema}dateTime"/>
+ * &lt;element name="endDateTime"
type="{http://www.w3.org/2001/XMLSchema}dateTime"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "", propOrder = {
+ "patientId",
+ "userId",
+ "beginDateTime",
+ "endDateTime"
+})
+@XmlRootElement(name = "findAuditEventsRequest")
+public class FindAuditEventsRequest {
+
+ @XmlElement(required = true)
+ protected String patientId;
+ @XmlElement(required = true)
+ protected String userId;
+ @XmlElement(required = true)
+ @XmlSchemaType(name = "dateTime")
+ protected XMLGregorianCalendar beginDateTime;
+ @XmlElement(required = true)
+ @XmlSchemaType(name = "dateTime")
+ protected XMLGregorianCalendar endDateTime;
+
+ /**
+ * Gets the value of the patientId property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getPatientId() {
+ return patientId;
+ }
+
+ /**
+ * Sets the value of the patientId property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setPatientId(String value) {
+ this.patientId = value;
+ }
+
+ /**
+ * Gets the value of the userId property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getUserId() {
+ return userId;
+ }
+
+ /**
+ * Sets the value of the userId property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setUserId(String value) {
+ this.userId = value;
+ }
+
+ /**
+ * Gets the value of the beginDateTime property.
+ *
+ * @return
+ * possible object is
+ * {@link XMLGregorianCalendar }
+ *
+ */
+ public XMLGregorianCalendar getBeginDateTime() {
+ return beginDateTime;
+ }
+
+ /**
+ * Sets the value of the beginDateTime property.
+ *
+ * @param value
+ * allowed object is
+ * {@link XMLGregorianCalendar }
+ *
+ */
+ public void setBeginDateTime(XMLGregorianCalendar value) {
+ this.beginDateTime = value;
+ }
+
+ /**
+ * Gets the value of the endDateTime property.
+ *
+ * @return
+ * possible object is
+ * {@link XMLGregorianCalendar }
+ *
+ */
+ public XMLGregorianCalendar getEndDateTime() {
+ return endDateTime;
+ }
+
+ /**
+ * Sets the value of the endDateTime property.
+ *
+ * @param value
+ * allowed object is
+ * {@link XMLGregorianCalendar }
+ *
+ */
+ public void setEndDateTime(XMLGregorianCalendar value) {
+ this.endDateTime = value;
+ }
+
+}
=======================================
--- /dev/null
+++
/java/tags/xd-1.0.3/src/main/java/org/xml/xml/schema/_7f0d86bd/healthcare_security_audit/FindAuditEventsResponse.java
Tue Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,71 @@
+
+package org.xml.xml.schema._7f0d86bd.healthcare_security_audit;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for anonymous complex type.
+ *
+ * <p>The following schema fragment specifies the expected content
contained within this class.
+ *
+ * <pre>
+ * &lt;complexType>
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element
ref="{http://www.xml.org/xml/schema/7f0d86bd/healthcare-security-audit}AuditMessage"
maxOccurs="unbounded"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "", propOrder = {
+ "auditMessage"
+})
+@XmlRootElement(name = "findAuditEventsResponse")
+public class FindAuditEventsResponse {
+
+ @XmlElement(name = "AuditMessage", namespace
= "http://www.xml.org/xml/schema/7f0d86bd/healthcare-security-audit",
required = true)
+ protected List<AuditMessage> auditMessage;
+
+ /**
+ * Gets the value of the auditMessage property.
+ *
+ * <p>
+ * This accessor method returns a reference to the live list,
+ * not a snapshot. Therefore any modification you make to the
+ * returned list will be present inside the JAXB object.
+ * This is why there is not a <CODE>set</CODE> method for the
auditMessage property.
+ *
+ * <p>
+ * For example, to add a new item, do as follows:
+ * <pre>
+ * getAuditMessage().add(newItem);
+ * </pre>
+ *
+ *
+ * <p>
+ * Objects of the following type(s) are allowed in the list
+ * {@link AuditMessage }
+ *
+ *
+ */
+ public List<AuditMessage> getAuditMessage() {
+ if (auditMessage == null) {
+ auditMessage = new ArrayList<AuditMessage>();
+ }
+ return this.auditMessage;
+ }
+
+}
=======================================
--- /dev/null
+++
/java/tags/xd-1.0.3/src/main/java/org/xml/xml/schema/_7f0d86bd/healthcare_security_audit/ObjectFactory.java
Tue Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,112 @@
+
+package org.xml.xml.schema._7f0d86bd.healthcare_security_audit;
+
+import javax.xml.bind.annotation.XmlRegistry;
+
+
+/**
+ * This object contains factory methods for each
+ * Java content interface and Java element interface
+ * generated in the org.xml.xml.schema._7f0d86bd.healthcare_security_audit
package.
+ * <p>An ObjectFactory allows you to programatically
+ * construct new instances of the Java representation
+ * for XML content. The Java representation of XML
+ * content can consist of schema derived interfaces
+ * and classes representing the binding of schema
+ * type definitions, element declarations and model
+ * groups. Factory methods for each of these are
+ * provided in this class.
+ *
+ */
+@XmlRegistry
+public class ObjectFactory {
+
+
+ /**
+ * Create a new ObjectFactory that can be used to create new instances
of schema derived classes for package:
org.xml.xml.schema._7f0d86bd.healthcare_security_audit
+ *
+ */
+ public ObjectFactory() {
+ }
+
+ /**
+ * Create an instance of {@link ParticipantObjectIdentificationType }
+ *
+ */
+ public ParticipantObjectIdentificationType
createParticipantObjectIdentificationType() {
+ return new ParticipantObjectIdentificationType();
+ }
+
+ /**
+ * Create an instance of {@link FindAuditEventsRequest }
+ *
+ */
+ public FindAuditEventsRequest createFindAuditEventsRequest() {
+ return new FindAuditEventsRequest();
+ }
+
+ /**
+ * Create an instance of {@link CodedValueType }
+ *
+ */
+ public CodedValueType createCodedValueType() {
+ return new CodedValueType();
+ }
+
+ /**
+ * Create an instance of {@link TypeValuePairType }
+ *
+ */
+ public TypeValuePairType createTypeValuePairType() {
+ return new TypeValuePairType();
+ }
+
+ /**
+ * Create an instance of {@link EventIdentificationType }
+ *
+ */
+ public EventIdentificationType createEventIdentificationType() {
+ return new EventIdentificationType();
+ }
+
+ /**
+ * Create an instance of {@link AuditMessage }
+ *
+ */
+ public AuditMessage createAuditMessage() {
+ return new AuditMessage();
+ }
+
+ /**
+ * Create an instance of {@link ActiveParticipantType }
+ *
+ */
+ public ActiveParticipantType createActiveParticipantType() {
+ return new ActiveParticipantType();
+ }
+
+ /**
+ * Create an instance of {@link AuditSourceIdentificationType }
+ *
+ */
+ public AuditSourceIdentificationType
createAuditSourceIdentificationType() {
+ return new AuditSourceIdentificationType();
+ }
+
+ /**
+ * Create an instance of {@link FindAuditEventsResponse }
+ *
+ */
+ public FindAuditEventsResponse createFindAuditEventsResponse() {
+ return new FindAuditEventsResponse();
+ }
+
+ /**
+ * Create an instance of {@link AuditMessage.ActiveParticipant }
+ *
+ */
+ public AuditMessage.ActiveParticipant
createAuditMessageActiveParticipant() {
+ return new AuditMessage.ActiveParticipant();
+ }
+
+}
=======================================
--- /dev/null
+++
/java/tags/xd-1.0.3/src/main/java/org/xml/xml/schema/_7f0d86bd/healthcare_security_audit/ParticipantObjectIdentificationType.java
Tue Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,347 @@
+
+package org.xml.xml.schema._7f0d86bd.healthcare_security_audit;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for ParticipantObjectIdentificationType complex type.
+ *
+ * <p>The following schema fragment specifies the expected content
contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="ParticipantObjectIdentificationType">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="ParticipantObjectIDTypeCode"
type="{http://www.xml.org/xml/schema/7f0d86bd/healthcare-security-audit}CodedValueType"/>
+ * &lt;choice minOccurs="0">
+ * &lt;element name="ParticipantObjectName"
type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="ParticipantObjectQuery"
type="{http://www.w3.org/2001/XMLSchema}base64Binary" minOccurs="0"/>
+ * &lt;/choice>
+ * &lt;element name="ParticipantObjectDetail"
type="{http://www.xml.org/xml/schema/7f0d86bd/healthcare-security-audit}TypeValuePairType"
maxOccurs="unbounded" minOccurs="0"/>
+ * &lt;/sequence>
+ * &lt;attribute name="ParticipantObjectID" use="required"
type="{http://www.w3.org/2001/XMLSchema}string" />
+ * &lt;attribute name="ParticipantObjectTypeCode">
+ * &lt;simpleType>
+ * &lt;restriction
base="{http://www.w3.org/2001/XMLSchema}unsignedByte">
+ * &lt;enumeration value="1"/>
+ * &lt;enumeration value="2"/>
+ * &lt;enumeration value="3"/>
+ * &lt;enumeration value="4"/>
+ * &lt;/restriction>
+ * &lt;/simpleType>
+ * &lt;/attribute>
+ * &lt;attribute name="ParticipantObjectTypeCodeRole">
+ * &lt;simpleType>
+ * &lt;restriction
base="{http://www.w3.org/2001/XMLSchema}unsignedByte">
+ * &lt;enumeration value="1"/>
+ * &lt;enumeration value="2"/>
+ * &lt;enumeration value="3"/>
+ * &lt;enumeration value="4"/>
+ * &lt;enumeration value="5"/>
+ * &lt;enumeration value="6"/>
+ * &lt;enumeration value="7"/>
+ * &lt;enumeration value="8"/>
+ * &lt;enumeration value="9"/>
+ * &lt;enumeration value="10"/>
+ * &lt;enumeration value="11"/>
+ * &lt;enumeration value="12"/>
+ * &lt;enumeration value="13"/>
+ * &lt;enumeration value="14"/>
+ * &lt;enumeration value="15"/>
+ * &lt;enumeration value="16"/>
+ * &lt;enumeration value="17"/>
+ * &lt;enumeration value="18"/>
+ * &lt;enumeration value="19"/>
+ * &lt;enumeration value="20"/>
+ * &lt;enumeration value="21"/>
+ * &lt;enumeration value="22"/>
+ * &lt;enumeration value="23"/>
+ * &lt;enumeration value="24"/>
+ * &lt;/restriction>
+ * &lt;/simpleType>
+ * &lt;/attribute>
+ * &lt;attribute name="ParticipantObjectDataLifeCycle">
+ * &lt;simpleType>
+ * &lt;restriction
base="{http://www.w3.org/2001/XMLSchema}unsignedByte">
+ * &lt;enumeration value="1"/>
+ * &lt;enumeration value="2"/>
+ * &lt;enumeration value="3"/>
+ * &lt;enumeration value="4"/>
+ * &lt;enumeration value="5"/>
+ * &lt;enumeration value="6"/>
+ * &lt;enumeration value="7"/>
+ * &lt;enumeration value="8"/>
+ * &lt;enumeration value="9"/>
+ * &lt;enumeration value="10"/>
+ * &lt;enumeration value="11"/>
+ * &lt;enumeration value="12"/>
+ * &lt;enumeration value="13"/>
+ * &lt;enumeration value="14"/>
+ * &lt;enumeration value="15"/>
+ * &lt;/restriction>
+ * &lt;/simpleType>
+ * &lt;/attribute>
+ * &lt;attribute name="ParticipantObjectSensitivity"
type="{http://www.w3.org/2001/XMLSchema}string" />
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ParticipantObjectIdentificationType", propOrder = {
+ "participantObjectIDTypeCode",
+ "participantObjectName",
+ "participantObjectQuery",
+ "participantObjectDetail"
+})
+public class ParticipantObjectIdentificationType {
+
+ @XmlElement(name = "ParticipantObjectIDTypeCode", required = true)
+ protected CodedValueType participantObjectIDTypeCode;
+ @XmlElement(name = "ParticipantObjectName")
+ protected String participantObjectName;
+ @XmlElement(name = "ParticipantObjectQuery")
+ protected byte[] participantObjectQuery;
+ @XmlElement(name = "ParticipantObjectDetail")
+ protected List<TypeValuePairType> participantObjectDetail;
+ @XmlAttribute(name = "ParticipantObjectID", required = true)
+ protected String participantObjectID;
+ @XmlAttribute(name = "ParticipantObjectTypeCode")
+ protected Short participantObjectTypeCode;
+ @XmlAttribute(name = "ParticipantObjectTypeCodeRole")
+ protected Short participantObjectTypeCodeRole;
+ @XmlAttribute(name = "ParticipantObjectDataLifeCycle")
+ protected Short participantObjectDataLifeCycle;
+ @XmlAttribute(name = "ParticipantObjectSensitivity")
+ protected String participantObjectSensitivity;
+
+ /**
+ * Gets the value of the participantObjectIDTypeCode property.
+ *
+ * @return
+ * possible object is
+ * {@link CodedValueType }
+ *
+ */
+ public CodedValueType getParticipantObjectIDTypeCode() {
+ return participantObjectIDTypeCode;
+ }
+
+ /**
+ * Sets the value of the participantObjectIDTypeCode property.
+ *
+ * @param value
+ * allowed object is
+ * {@link CodedValueType }
+ *
+ */
+ public void setParticipantObjectIDTypeCode(CodedValueType value) {
+ this.participantObjectIDTypeCode = value;
+ }
+
+ /**
+ * Gets the value of the participantObjectName property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getParticipantObjectName() {
+ return participantObjectName;
+ }
+
+ /**
+ * Sets the value of the participantObjectName property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setParticipantObjectName(String value) {
+ this.participantObjectName = value;
+ }
+
+ /**
+ * Gets the value of the participantObjectQuery property.
+ *
+ * @return
+ * possible object is
+ * byte[]
+ */
+ public byte[] getParticipantObjectQuery() {
+ return participantObjectQuery;
+ }
+
+ /**
+ * Sets the value of the participantObjectQuery property.
+ *
+ * @param value
+ * allowed object is
+ * byte[]
+ */
+ public void setParticipantObjectQuery(byte[] value) {
+ this.participantObjectQuery = ((byte[]) value);
+ }
+
+ /**
+ * Gets the value of the participantObjectDetail property.
+ *
+ * <p>
+ * This accessor method returns a reference to the live list,
+ * not a snapshot. Therefore any modification you make to the
+ * returned list will be present inside the JAXB object.
+ * This is why there is not a <CODE>set</CODE> method for the
participantObjectDetail property.
+ *
+ * <p>
+ * For example, to add a new item, do as follows:
+ * <pre>
+ * getParticipantObjectDetail().add(newItem);
+ * </pre>
+ *
+ *
+ * <p>
+ * Objects of the following type(s) are allowed in the list
+ * {@link TypeValuePairType }
+ *
+ *
+ */
+ public List<TypeValuePairType> getParticipantObjectDetail() {
+ if (participantObjectDetail == null) {
+ participantObjectDetail = new ArrayList<TypeValuePairType>();
+ }
+ return this.participantObjectDetail;
+ }
+
+ /**
+ * Gets the value of the participantObjectID property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getParticipantObjectID() {
+ return participantObjectID;
+ }
+
+ /**
+ * Sets the value of the participantObjectID property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setParticipantObjectID(String value) {
+ this.participantObjectID = value;
+ }
+
+ /**
+ * Gets the value of the participantObjectTypeCode property.
+ *
+ * @return
+ * possible object is
+ * {@link Short }
+ *
+ */
+ public Short getParticipantObjectTypeCode() {
+ return participantObjectTypeCode;
+ }
+
+ /**
+ * Sets the value of the participantObjectTypeCode property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Short }
+ *
+ */
+ public void setParticipantObjectTypeCode(Short value) {
+ this.participantObjectTypeCode = value;
+ }
+
+ /**
+ * Gets the value of the participantObjectTypeCodeRole property.
+ *
+ * @return
+ * possible object is
+ * {@link Short }
+ *
+ */
+ public Short getParticipantObjectTypeCodeRole() {
+ return participantObjectTypeCodeRole;
+ }
+
+ /**
+ * Sets the value of the participantObjectTypeCodeRole property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Short }
+ *
+ */
+ public void setParticipantObjectTypeCodeRole(Short value) {
+ this.participantObjectTypeCodeRole = value;
+ }
+
+ /**
+ * Gets the value of the participantObjectDataLifeCycle property.
+ *
+ * @return
+ * possible object is
+ * {@link Short }
+ *
+ */
+ public Short getParticipantObjectDataLifeCycle() {
+ return participantObjectDataLifeCycle;
+ }
+
+ /**
+ * Sets the value of the participantObjectDataLifeCycle property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Short }
+ *
+ */
+ public void setParticipantObjectDataLifeCycle(Short value) {
+ this.participantObjectDataLifeCycle = value;
+ }
+
+ /**
+ * Gets the value of the participantObjectSensitivity property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getParticipantObjectSensitivity() {
+ return participantObjectSensitivity;
+ }
+
+ /**
+ * Sets the value of the participantObjectSensitivity property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setParticipantObjectSensitivity(String value) {
+ this.participantObjectSensitivity = value;
+ }
+
+}
=======================================
--- /dev/null
+++
/java/tags/xd-1.0.3/src/main/java/org/xml/xml/schema/_7f0d86bd/healthcare_security_audit/TypeValuePairType.java
Tue Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,83 @@
+
+package org.xml.xml.schema._7f0d86bd.healthcare_security_audit;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for TypeValuePairType complex type.
+ *
+ * <p>The following schema fragment specifies the expected content
contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="TypeValuePairType">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;attribute name="type" use="required"
type="{http://www.w3.org/2001/XMLSchema}string" />
+ * &lt;attribute name="value" use="required"
type="{http://www.w3.org/2001/XMLSchema}base64Binary" />
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "TypeValuePairType")
+public class TypeValuePairType {
+
+ @XmlAttribute(required = true)
+ protected String type;
+ @XmlAttribute(required = true)
+ protected byte[] value;
+
+ /**
+ * Gets the value of the type property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getType() {
+ return type;
+ }
+
+ /**
+ * Sets the value of the type property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setType(String value) {
+ this.type = value;
+ }
+
+ /**
+ * Gets the value of the value property.
+ *
+ * @return
+ * possible object is
+ * byte[]
+ */
+ public byte[] getValue() {
+ return value;
+ }
+
+ /**
+ * Sets the value of the value property.
+ *
+ * @param value
+ * allowed object is
+ * byte[]
+ */
+ public void setValue(byte[] value) {
+ this.value = ((byte[]) value);
+ }
+
+}
=======================================
--- /dev/null
+++
/java/tags/xd-1.0.3/src/main/java/org/xml/xml/schema/_7f0d86bd/healthcare_security_audit/package-info.java
Tue Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,2 @@
+...@javax.xml.bind.annotation.XmlSchema(namespace
= "http://www.xml.org/xml/schema/7f0d86bd/healthcare-security-audit")
+package org.xml.xml.schema._7f0d86bd.healthcare_security_audit;
=======================================
--- /dev/null
+++ /java/tags/xd-1.0.3/src/main/resources/CCD.xsl Tue Oct 28 12:15:16 2014
UTC
@@ -0,0 +1,520 @@
+<?xml version="1.0"?>
+<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:n3="http://www.w3.org/1999/xhtml" xmlns:n1="urn:hl7-org:v3"
xmlns:n2="urn:hl7-org:v3/meta/voc" xmlns:voc="urn:hl7-org:v3/voc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+<xsl:output method="html" indent="yes" version="4.01"
encoding="ISO-8859-1" doctype-public="-//W3C//DTD HTML 4.01//EN"/>
+
+<!-- CDA document -->
+
+<xsl:variable name="tableWidth">50%</xsl:variable>
+
+<xsl:variable name="title">
+ <xsl:choose>
+ <xsl:when test="/n1:ClinicalDocument/n1:title">
+ <xsl:value-of select="/n1:ClinicalDocument/n1:title"/>
+ </xsl:when>
+ <xsl:otherwise>Clinical Document</xsl:otherwise>
+ </xsl:choose>
+</xsl:variable>
+
+<xsl:template match="/">
+<xsl:apply-templates select="n1:ClinicalDocument"/>
+</xsl:template>
+
+<xsl:template match="n1:ClinicalDocument">
+ <html>
+ <head>
+ <!-- <meta name='Generator' content='&CDA-Stylesheet;'/> -->
+ <xsl:comment>
+ Do NOT edit this HTML directly, it was generated
via an XSLt
+ transformation from the original release 2 CDA
Document.
+ </xsl:comment>
+ <title>
+ <xsl:value-of select="$title"/>
+ </title>
+ </head>
+ <xsl:comment>
+ Derived from HL7 Finland R2 Tyylitiedosto:
Tyyli_R2_B3_01.xslt
+ Updated by Calvin E. Beebe, Mayo Clinic - Rochester Mn.
+ </xsl:comment>
+ <body>
+
+ <h2 align="center"><xsl:value-of select="$title"/></h2>
+ <p align='center'><b><xsl:text>Created On: </xsl:text></b>
+ <xsl:call-template name="formatDate">
+ <xsl:with-param name="date"
+ select="/n1:ClinicalDocument/n1:effectiveTime/@value"/>
+ </xsl:call-template></p>
+ <hr/>
+ <table width='100%'>
+ <xsl:variable name="patientRole"
select="/n1:ClinicalDocument/n1:recordTarget/n1:patientRole"/>
+ <tr><td width='15%' valign="top"><b><xsl:text>Patient:
</xsl:text></b></td>
+ <td width='35%' valign="top"><xsl:call-template
name="getName">
+ <xsl:with-param name="name"
+ select="$patientRole/n1:patient/n1:name"/>
+ </xsl:call-template>
+ <xsl:if test="$patientRole/n1:addr">
+ <xsl:call-template name="getAddress">
+ <xsl:with-param name="addr"
select="$patientRole/n1:addr"/>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="$patientRole/n1:telecom">
+ <xsl:call-template name="getTelecom">
+ <xsl:with-param name="telecom"
+ select="$patientRole/n1:telecom"/>
+ </xsl:call-template>
+ </xsl:if>
+ </td>
+ <td width='15%' align='right'
valign="top"><b><xsl:text>MRN: </xsl:text></b></td>
+ <td width='35%' valign="top"><xsl:value-of
select="$patientRole/n1:id/@extension"/></td>
+ </tr>
+
+ <tr><td width='15%' valign="top"><b><xsl:text>Birthdate:
</xsl:text></b></td>
+ <td width='35%' valign="top"><xsl:call-template
name="formatDate">
+ <xsl:with-param name="date"
+
select="/n1:ClinicalDocument/n1:recordTarget/n1:patientRole/n1:patient/n1:birthTime/@value"/>
+ </xsl:call-template></td>
+ <td width='15%' align='right'
valign="top"><b><xsl:text>Sex: </xsl:text></b></td>
+ <td width='35%' valign="top"><xsl:variable name="sex"
+
select="/n1:ClinicalDocument/n1:recordTarget/n1:patientRole/n1:patient/n1:administrativeGenderCode/@code"/>
+ <xsl:choose>
+ <xsl:when test="$sex='M'">Male</xsl:when>
+ <xsl:when test="$sex='F'">Female</xsl:when>
+ </xsl:choose></td>
+ </tr>
+ <tr>
+ <td width="15%" valign="top"><b>Guardian: </b></td>
+ <td width="35%" valign="top">
+ <xsl:call-template name="getParticipant">
+ <xsl:with-param name="participant"
select="/n1:ClinicalDocument/n1:participant[@typeCode='IND']/n1:associatedEntity[@classCode='GUAR']"/>
+ </xsl:call-template>
+ </td>
+ <td width="15%" valign="top" align='right'><b>Next of Kin:
</b></td>
+ <td width="35%" valign="top">
+ <xsl:call-template name="getParticipant">
+ <xsl:with-param name="participant"
select="/n1:ClinicalDocument/n1:participant[@typeCode='IND']/n1:associatedEntity[@classCode='NOK']"/>
+ </xsl:call-template>
+ </td>
+ </tr>
+
+ </table>
+
+ <hr/>
+ <div>
+ <h3><a name="toc">Table of Contents</a></h3>
+ <ul>
+ <xsl:for-each
select="n1:component/n1:structuredBody/n1:component/n1:section/n1:title">
+ <li><a href="#{generate-id(.)}"><xsl:value-of
select="."/></a></li>
+ </xsl:for-each>
+ </ul>
+ </div>
+ <xsl:apply-templates select="n1:component/n1:structuredBody"/>
+ <xsl:call-template name="bottomline"/>
+ </body>
+ </html>
+</xsl:template>
+
+<xsl:template name="getParticipant">
+ <xsl:param name="participant"/>
+
+ <p>
+ <xsl:call-template name="getName">
+ <xsl:with-param name="name"
+ select="$participant/n1:associatedPerson/n1:name"/>
+ </xsl:call-template>
+ <xsl:if test="$participant/n1:addr">
+ <xsl:call-template name="getAddress">
+ <xsl:with-param name="addr" select="$participant/n1:addr"/>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="$participant/n1:telecom">
+ <xsl:call-template name="getTelecom">
+ <xsl:with-param name="telecom"
+ select="$participant/n1:telecom"/>
+ </xsl:call-template>
+ </xsl:if>
+
+ </p>
+</xsl:template>
+
+<xsl:template name="getAddress">
+ <xsl:param name="addr"/>
+ <br/><xsl:value-of select="$addr/n1:streetAddressLine"/>
+ <br/><xsl:value-of select="$addr/n1:city"/>, <xsl:value-of
select="$addr/n1:state"/>, <xsl:value-of select="$addr/n1:postalCode"/>
+</xsl:template>
+
+<xsl:template name="getTelecom">
+ <xsl:param name="telecom"/>
+ <br/><xsl:value-of select="$telecom/@value"/>
+</xsl:template>
+
+<!-- Get a Name -->
+<xsl:template name="getName">
+ <xsl:param name="name"/>
+ <xsl:choose>
+ <xsl:when test="$name/n1:family">
+ <xsl:value-of select="$name/n1:given"/>
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="$name/n1:family"/>
+ <xsl:text> </xsl:text>
+ <xsl:if test="$name/n1:suffix">
+ <xsl:text>, </xsl:text>
+ <xsl:value-of select="$name/n1:suffix"/>
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$name"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- Format Date
+
+ outputs a date in Month Day, Year form
+ e.g., 19991207 ==> December 07, 1999
+-->
+<xsl:template name="formatDate">
+ <xsl:param name="date"/>
+ <xsl:variable name="month" select="substring ($date, 5, 2)"/>
+ <xsl:choose>
+ <xsl:when test="$month='01'">
+ <xsl:text>January </xsl:text>
+ </xsl:when>
+ <xsl:when test="$month='02'">
+ <xsl:text>February </xsl:text>
+ </xsl:when>
+ <xsl:when test="$month='03'">
+ <xsl:text>March </xsl:text>
+ </xsl:when>
+ <xsl:when test="$month='04'">
+ <xsl:text>April </xsl:text>
+ </xsl:when>
+ <xsl:when test="$month='05'">
+ <xsl:text>May </xsl:text>
+ </xsl:when>
+ <xsl:when test="$month='06'">
+ <xsl:text>June </xsl:text>
+ </xsl:when>
+ <xsl:when test="$month='07'">
+ <xsl:text>July </xsl:text>
+ </xsl:when>
+ <xsl:when test="$month='08'">
+ <xsl:text>August </xsl:text>
+ </xsl:when>
+ <xsl:when test="$month='09'">
+ <xsl:text>September </xsl:text>
+ </xsl:when>
+ <xsl:when test="$month='10'">
+ <xsl:text>October </xsl:text>
+ </xsl:when>
+ <xsl:when test="$month='11'">
+ <xsl:text>November </xsl:text>
+ </xsl:when>
+ <xsl:when test="$month='12'">
+ <xsl:text>December </xsl:text>
+ </xsl:when>
+ </xsl:choose>
+ <xsl:choose>
+ <xsl:when test='substring ($date, 7, 1)="0"'>
+ <xsl:value-of select="substring ($date, 8, 1)"/>
+ <xsl:text>, </xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="substring ($date, 7, 2)"/>
+ <xsl:text>, </xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:value-of select="substring ($date, 1, 4)"/>
+</xsl:template>
+
+<!-- StructuredBody -->
+<xsl:template match="n1:component/n1:structuredBody">
+ <xsl:apply-templates select="n1:component/n1:section"/>
+</xsl:template>
+
+<!-- Component/Section -->
+<xsl:template match="n1:component/n1:section">
+ <xsl:apply-templates select="n1:title"/>
+
+ <xsl:apply-templates select="n1:text"/>
+
+ <xsl:apply-templates select="n1:component/n1:section"/>
+
+
+</xsl:template>
+
+<!-- Title -->
+<xsl:template match="n1:title">
+
+ <h3><span style="font-weight:bold;">
+ <a name="{generate-id(.)}" href="#toc"><xsl:value-of select="."/></a>
+ </span></h3>
+
+</xsl:template>
+
+<!-- Text -->
+<xsl:template match="n1:text">
+ <xsl:apply-templates />
+</xsl:template>
+
+<!-- paragraph -->
+<xsl:template match="n1:paragraph">
+ <p><xsl:apply-templates/></p>
+</xsl:template>
+
+<!-- Content w/ deleted text is hidden -->
+<xsl:template match="n1:content[@revised='delete']"/>
+
+<!-- content -->
+<xsl:template match="n1:content">
+ <xsl:apply-templates/>
+</xsl:template>
+
+
+<!-- list -->
+<xsl:template match="n1:list">
+ <xsl:if test="n1:caption">
+ <span style="font-weight:bold; ">
+ <xsl:apply-templates select="n1:caption"/>
+ </span>
+ </xsl:if>
+ <ul>
+ <xsl:for-each select="n1:item">
+ <li>
+ <xsl:apply-templates />
+ </li>
+ </xsl:for-each>
+ </ul>
+</xsl:template>
+
+<xsl:template match="n1:list[@listType='ordered']">
+ <xsl:if test="n1:caption">
+ <span style="font-weight:bold; ">
+ <xsl:apply-templates select="n1:caption"/>
+ </span>
+ </xsl:if>
+ <ol>
+ <xsl:for-each select="n1:item">
+ <li>
+ <xsl:apply-templates />
+ </li>
+ </xsl:for-each>
+ </ol>
+</xsl:template>
+
+
+<!-- caption -->
+<xsl:template match="n1:caption">
+ <xsl:apply-templates/>
+ <xsl:text>: </xsl:text>
+</xsl:template>
+
+ <!-- Tables -->
+ <xsl:template match="n1:table/@*|n1:thead/@*|n1:tfoot/@*|n1:tbody/@*|
n1:colgroup/@*|n1:col/@*|n1:tr/@*|n1:th/@*|n1:td/@*">
+ <xsl:copy>
+
+ <xsl:copy-of select="@*"/>
+ <xsl:apply-templates/>
+ </xsl:copy>
+ </xsl:template>
+
+ <xsl:template match="n1:table">
+ <table>
+
+ <xsl:copy-of select="@*"/>
+ <xsl:apply-templates/>
+ </table>
+ </xsl:template>
+
+ <xsl:template match="n1:thead">
+ <thead>
+
+ <xsl:copy-of select="@*"/>
+ <xsl:apply-templates/>
+ </thead>
+ </xsl:template>
+
+ <xsl:template match="n1:tfoot">
+ <tfoot>
+
+ <xsl:copy-of select="@*"/>
+ <xsl:apply-templates/>
+ </tfoot>
+ </xsl:template>
+
+ <xsl:template match="n1:tbody">
+ <tbody>
+
+ <xsl:copy-of select="@*"/>
+ <xsl:apply-templates/>
+ </tbody>
+ </xsl:template>
+
+ <xsl:template match="n1:colgroup">
+ <colgroup>
+
+ <xsl:copy-of select="@*"/>
+ <xsl:apply-templates/>
+ </colgroup>
+ </xsl:template>
+
+ <xsl:template match="n1:col">
+ <col>
+
+ <xsl:copy-of select="@*"/>
+ <xsl:apply-templates/>
+ </col>
+ </xsl:template>
+
+ <xsl:template match="n1:tr">
+ <tr>
+
+ <xsl:copy-of select="@*"/>
+ <xsl:apply-templates/>
+ </tr>
+ </xsl:template>
+
+ <xsl:template match="n1:th">
+ <th>
+ <xsl:copy-of select="@*"/>
+ <xsl:apply-templates/>
+ </th>
+ </xsl:template>
+
+ <xsl:template match="n1:td">
+ <td>
+ <xsl:copy-of select="@*"/>
+ <xsl:apply-templates/>
+ </td>
+ </xsl:template>
+
+ <xsl:template match="n1:table/n1:caption">
+ <span style="font-weight:bold; ">
+ <xsl:apply-templates/>
+ </span>
+ </xsl:template>
+
+<!-- RenderMultiMedia
+
+ this currently only handles GIF's and JPEG's. It could, however,
+ be extended by including other image MIME types in the predicate
+ and/or by generating <object> or <applet> tag with the correct
+ params depending on the media type @ID =$imageRef referencedObject
+ -->
+ <xsl:template match="n1:renderMultiMedia">
+ <xsl:variable name="imageRef" select="@referencedObject"/>
+ <xsl:choose>
+ <xsl:when test="//n1:regionOfInterest[@ID=$imageRef]">
+ <!-- Here is where the Region of Interest image referencing
goes -->
+ <xsl:if
test='//n1:regionOfInterest[@ID=$imageRef]//n1:observationMedia/n1:value[@mediaType="image/gif"
or @mediaType="image/jpeg"]'>
+ <br clear='all'/>
+ <xsl:element name='img'>
+ <xsl:attribute name='src'>
+ <xsl:value-of
select='//n1:regionOfInterest[@ID=$imageRef]//n1:observationMedia/n1:value/n1:reference/@value'/>
+ </xsl:attribute>
+ </xsl:element>
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- Here is where the direct MultiMedia image referencing
goes -->
+ <xsl:if
test='//n1:observationMedia[@ID=$imageRef]/n1:value[@mediaType="image/gif"
or @mediaType="image/jpeg"]'>
+ <br clear='all'/>
+ <xsl:element name='img'>
+ <xsl:attribute name='src'>
+ <xsl:value-of
select='//n1:observationMedia[@ID=$imageRef]/n1:value/n1:reference/@value'/>
+ </xsl:attribute>
+ </xsl:element>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+<!-- Stylecode processing
+ Supports Bold, Underline and Italics display
+
+-->
+
+ <xsl:template match="//n1:*[@styleCode]">
+
+ <xsl:if test="@styleCode='Bold'">
+ <xsl:element name='b'>
+ <xsl:apply-templates/>
+ </xsl:element>
+ </xsl:if>
+
+ <xsl:if test="@styleCode='Italics'">
+ <xsl:element name='i'>
+ <xsl:apply-templates/>
+ </xsl:element>
+ </xsl:if>
+
+ <xsl:if test="@styleCode='Underline'">
+ <xsl:element name='u'>
+ <xsl:apply-templates/>
+ </xsl:element>
+ </xsl:if>
+
+ <xsl:if test="contains(@styleCode,'Bold') and
contains(@styleCode,'Italics') and not (contains(@styleCode, 'Underline'))">
+ <xsl:element name='b'>
+ <xsl:element name='i'>
+ <xsl:apply-templates/>
+ </xsl:element>
+ </xsl:element>
+ </xsl:if>
+
+ <xsl:if test="contains(@styleCode,'Bold') and
contains(@styleCode,'Underline') and not (contains(@styleCode, 'Italics'))">
+ <xsl:element name='b'>
+ <xsl:element name='u'>
+ <xsl:apply-templates/>
+ </xsl:element>
+ </xsl:element>
+ </xsl:if>
+
+ <xsl:if test="contains(@styleCode,'Italics') and
contains(@styleCode,'Underline') and not (contains(@styleCode, 'Bold'))">
+ <xsl:element name='i'>
+ <xsl:element name='u'>
+ <xsl:apply-templates/>
+ </xsl:element>
+ </xsl:element>
+ </xsl:if>
+
+ <xsl:if test="contains(@styleCode,'Italics') and
contains(@styleCode,'Underline') and contains(@styleCode, 'Bold')">
+ <xsl:element name='b'>
+ <xsl:element name='i'>
+ <xsl:element name='u'>
+ <xsl:apply-templates/>
+ </xsl:element>
+ </xsl:element>
+ </xsl:element>
+ </xsl:if>
+
+ </xsl:template>
+
+<!-- Superscript or Subscript -->
+ <xsl:template match="n1:sup">
+ <xsl:element name='sup'>
+ <xsl:apply-templates/>
+ </xsl:element>
+ </xsl:template>
+ <xsl:template match="n1:sub">
+ <xsl:element name='sub'>
+ <xsl:apply-templates/>
+ </xsl:element>
+ </xsl:template>
+
+ <!-- Bottomline -->
+
+ <xsl:template name="bottomline">
+ <p>
+ <b><xsl:text>Electronically generated by: </xsl:text></b>
+ <xsl:call-template name="getName">
+ <xsl:with-param name="name"
+
select="/n1:ClinicalDocument/n1:legalAuthenticator/n1:assignedEntity/n1:representedOrganization/n1:name"/>
+ </xsl:call-template>
+ <xsl:text> on </xsl:text>
+ <xsl:call-template name="formatDate">
+ <xsl:with-param name="date"
+
select="//n1:ClinicalDocument/n1:legalAuthenticator/n1:time/@value"/>
+ </xsl:call-template>
+ </p>
+ </xsl:template>
+
+</xsl:stylesheet>
=======================================
--- /dev/null
+++
/java/tags/xd-1.0.3/src/main/resources/DocumentRepository_Service_handler.xml
Tue Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
+ <handler-chain>
+ <handler>
+ <handler-name>org.nhindirect.xd.soap.DirectSOAPHandler</handler-name>
+
<handler-class>org.nhindirect.xd.soap.DirectSOAPHandler</handler-class>
+ </handler>
+ </handler-chain>
+</handler-chains>
=======================================
--- /dev/null
+++ /java/tags/xd-1.0.3/src/main/resources/request.xml Tue Oct 28 12:15:16
2014 UTC
@@ -0,0 +1,224 @@
+<?xml version="1.0" encoding="windows-1252"?>
+ <ns6:ProvideAndRegisterDocumentSetRequest
xmlns:rim="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0"
xmlns:ns3="urn:oasis:names:tc:ebxml-regrep:xsd:rs:3.0"
xmlns:ns4="urn:oasis:names:tc:ebxml-regrep:xsd:query:3.0"
xmlns:lcm="urn:oasis:names:tc:ebxml-regrep:xsd:lcm:3.0"
xmlns:ns6="urn:ihe:iti:xds-b:2007">
+ <lcm:SubmitObjectsRequest>
+ <rim:RegistryObjectList>
+ <rim:ExtrinsicObject id="Document01" mimeType="text/xml"
objectType="urn:uuid:7edca82f-054d-47f2-a032-9b2a5b5186c1">
+ <rim:Slot name="creationTime">
+ <rim:ValueList>
+ <rim:Value>20051224000000</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Slot name="languageCode">
+ <rim:ValueList>
+ <rim:Value>en-us</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Slot name="serviceStartTime">
+ <rim:ValueList>
+ <rim:Value>20041223080000</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Slot name="serviceStopTime">
+ <rim:ValueList>
+ <rim:Value>20041223080100</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Slot name="sourcePatientId">
+ <rim:ValueList>
+
<rim:Value>1111111111^^^&amp;GSIHealth&amp;ISO</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Slot name="sourcePatientInfo">
+ <rim:ValueList>
+ <rim:Value>PID-3|
1111111111^^^&amp;GSIHealth&amp;ISO</rim:Value>
+ <rim:Value>PID-5|Doe^John^^^</rim:Value>
+ <rim:Value>PID-7|19560527</rim:Value>
+ <rim:Value>PID-8|M</rim:Value>
+ <rim:Value>PID-11|100 Main
St^^Metropolis^Il^44130^USA</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Slot name="hash">
+ <rim:ValueList>
+
<rim:Value>2f016bdeba83855ec76bd1102d9da6a79590f1a9</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Name>
+ <rim:LocalizedString value="Physical"/>
+ </rim:Name>
+ <rim:Description/>
+ <rim:Classification id="cl01"
classificationScheme="urn:uuid:93606bcf-9494-43ec-9b4e-a7748d1a838d"
classifiedObject="Document01">
+ <rim:Slot name="authorPerson">
+ <rim:ValueList>
+
<rim:Value>vincen...@gsihealth.com^Allscripts^Provider^^^^^^&amp;1.3.6.1.4.1.21367.3100.1&amp;ISO</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Slot name="authorInstitution">
+ <rim:ValueList>
+ <rim:Value>Cleveland Clinic</rim:Value>
+ <rim:Value>Parma Community</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Slot name="authorRole">
+ <rim:ValueList>
+ <rim:Value>Attending</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Slot name="authorSpecialty">
+ <rim:ValueList>
+ <rim:Value>Orthopedic</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ </rim:Classification>
+ <rim:Classification id="cl02"
classificationScheme="urn:uuid:41a5887f-8865-4c09-adf7-e362475b143a"
classifiedObject="Document01" nodeRepresentation="History and Physical">
+ <rim:Slot name="codingScheme">
+ <rim:ValueList>
+ <rim:Value>classCode</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Name>
+ <rim:LocalizedString value="History and Physical"/>
+ </rim:Name>
+ </rim:Classification>
+ <rim:Classification id="cl03"
classificationScheme="urn:uuid:f4f85eac-e6cb-4883-b524-f2705394840f"
classifiedObject="Document01"
nodeRepresentation="1.3.6.1.4.1.21367.2006.7.101">
+ <rim:Slot name="codingScheme">
+ <rim:ValueList>
+ <rim:Value>Connect-a-thon
confidentialityCodes</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Name>
+ <rim:LocalizedString value="Clinical-Staff"/>
+ </rim:Name>
+ </rim:Classification>
+ <rim:Classification id="cl04"
classificationScheme="urn:uuid:a09d5840-386c-46f2-b5ad-9c3699a4309d"
classifiedObject="Document01" nodeRepresentation="CDAR2/IHE 1.0">
+ <rim:Slot name="codingScheme">
+ <rim:ValueList>
+ <rim:Value>Connect-a-thon
formatCodes</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Name>
+ <rim:LocalizedString value="CDAR2/IHE 1.0"/>
+ </rim:Name>
+ </rim:Classification>
+ <rim:Classification id="cl05"
classificationScheme="urn:uuid:f33fb8ac-18af-42cc-ae0e-ed0b0bdb91e1"
classifiedObject="Document01" nodeRepresentation="Outpatient">
+ <rim:Slot name="codingScheme">
+ <rim:ValueList>
+ <rim:Value>Connect-a-thon
healthcareFacilityTypeCodes</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Name>
+ <rim:LocalizedString value="Outpatient"/>
+ </rim:Name>
+ </rim:Classification>
+ <rim:Classification id="cl06"
classificationScheme="urn:uuid:cccf5598-8b07-4b77-a05e-ae952c785ead"
classifiedObject="Document01" nodeRepresentation="General Medicine">
+ <rim:Slot name="codingScheme">
+ <rim:ValueList>
+ <rim:Value>Connect-a-thon
practiceSettingCodes</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Name>
+ <rim:LocalizedString value="General Medicine"/>
+ </rim:Name>
+ </rim:Classification>
+ <rim:Classification id="cl07"
classificationScheme="urn:uuid:f0306f51-975f-434e-a61c-c59651d33983"
classifiedObject="Document01" nodeRepresentation="34133-9">
+ <rim:Slot name="codingScheme">
+ <rim:ValueList>
+ <rim:Value>LOINC</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Name>
+ <rim:LocalizedString value="Outpatient Evaluation
And Management"/>
+ </rim:Name>
+ </rim:Classification>
+ <rim:ExternalIdentifier id="ei01"
registryObject="Document01"
identificationScheme="urn:uuid:58a6f841-87b3-4a3e-92fd-a8ffeff98427"
value="111111111^^&amp;2.16.840.1.113883.4.1&amp;ISO">
+ <rim:Name>
+ <rim:LocalizedString
value="XDSDocumentEntry.patientId"/>
+ </rim:Name>
+ </rim:ExternalIdentifier>
+ <rim:ExternalIdentifier id="ei02"
registryObject="Document01"
identificationScheme="urn:uuid:2e82c1f6-a085-4c72-9da3-8640a32e42ab"
value="1.3.6.1.4.1.21367.2005.3.9999.32">
+ <rim:Name>
+ <rim:LocalizedString
value="XDSDocumentEntry.uniqueId"/>
+ </rim:Name>
+ </rim:ExternalIdentifier>
+ </rim:ExtrinsicObject>
+ <rim:RegistryPackage id="SubmissionSet01">
+ <rim:Slot name="submissionTime">
+ <rim:ValueList>
+ <rim:Value>20041225235050</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Slot name="intendedRecipient">
+ <rim:ValueList>
+ <!-- <rim:Value>|
john....@happyvalleyclinic.nhindirect.org^Smith^John^^^Dr^^^&amp;1.3.6.1.4.1.21367.3100.1&amp;ISO</rim:Value>
-->
+ <rim:Value>|
vle...@lewistower.com^Smith^John^^^Dr^^^&amp;1.3.6.1.4.1.21367.3100.1&amp;ISO</rim:Value>
+ <rim:Value>|
bea...@nologs.org^Smith^John^^^Dr^^^&amp;1.3.6.1.4.1.21367.3100.1&amp;ISO</rim:Value>
+ <rim:Value>beau-x...@nologs.org</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Name>
+ <rim:LocalizedString value="Physical"/>
+ </rim:Name>
+ <rim:Description>
+ <rim:LocalizedString value="Annual physical"/>
+ </rim:Description>
+ <rim:Classification id="cl08"
classificationScheme="urn:uuid:a7058bb9-b4e4-4307-ba5b-e3f0ab85e12d"
classifiedObject="SubmissionSet01">
+ <rim:Slot name="authorPerson">
+ <rim:ValueList>
+ <rim:Value>Sherry Dopplemeyer</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Slot name="authorInstitution">
+ <rim:ValueList>
+ <rim:Value>Cleveland Clinic</rim:Value>
+ <rim:Value>Berea Community</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Slot name="authorRole">
+ <rim:ValueList>
+ <rim:Value>Primary Surgon</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Slot name="authorSpecialty">
+ <rim:ValueList>
+ <rim:Value>Orthopedic</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ </rim:Classification>
+ <rim:Classification id="cl09"
classificationScheme="urn:uuid:aa543740-bdda-424e-8c96-df4873be8500"
classifiedObject="SubmissionSet01" nodeRepresentation="History and
Physical">
+ <rim:Slot name="codingScheme">
+ <rim:ValueList>
+ <rim:Value>Connect-a-thon
contentTypeCodes</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Name>
+ <rim:LocalizedString value="History and Physical"/>
+ </rim:Name>
+ </rim:Classification>
+ <rim:ExternalIdentifier id="ei03"
registryObject="SubmissionSet01"
identificationScheme="urn:uuid:96fdda7c-d067-4183-912e-bf5ee74998a8"
value="1.3.6.1.4.1.21367.2005.3.9999.33">
+ <rim:Name>
+ <rim:LocalizedString
value="XDSSubmissionSet.uniqueId"/>
+ </rim:Name>
+ </rim:ExternalIdentifier>
+ <rim:ExternalIdentifier id="ei04"
registryObject="SubmissionSet01"
identificationScheme="urn:uuid:554ac39e-e3fe-47fe-b233-965d2a147832"
value="3670984664">
+ <rim:Name>
+ <rim:LocalizedString
value="XDSSubmissionSet.sourceId"/>
+ </rim:Name>
+ </rim:ExternalIdentifier>
+ <rim:ExternalIdentifier id="ei05"
registryObject="SubmissionSet01"
identificationScheme="urn:uuid:6b5aea1a-874d-4603-a4bc-96a0a7b38446"
value="111111111^^^&amp;2.16.840.1.113883.4.1&amp;ISO">
+ <rim:Name>
+ <rim:LocalizedString
value="XDSSubmissionSet.patientId"/>
+ </rim:Name>
+ </rim:ExternalIdentifier>
+ </rim:RegistryPackage>
+ <rim:Classification id="cl10"
classifiedObject="SubmissionSet01"
classificationNode="urn:uuid:a54d6aa5-d40d-43f9-88c5-b4633d873bdd"/>
+ <rim:Association id="as01" associationType="HasMember"
sourceObject="SubmissionSet01" targetObject="Document01">
+ <rim:Slot name="SubmissionSetStatus">
+ <rim:ValueList>
+ <rim:Value>Original</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ </rim:Association>
+ </rim:RegistryObjectList>
+ </lcm:SubmitObjectsRequest>
+ <ns6:Document
id="Document01">PD94bWwgdmVyc2lvbj0iMS4wIj8+DQo8P3htbC1zdHlsZXNoZWV0IHR5cGU9InRleHQveHNsIiBocmVmPSJjY2R0b2NjZGRiLnhzbCI/Pg0KPCEtLSBUaGUgZm9sbG93aW5nIHNhbXBsZSBkb2N1bWVudCBkZXBpY3RzIGEgZmljdGlvbmFsIGNoYXJhY3RlcuKAmXMgaGVhbHRoIHN1bW1hcnkuIEFueSByZXNlbWJsYW5jZSB0byBhIHJlYWwgcGVyc29uIGlzIGNvaW5jaWRlbnRhbC4gLS0+DQo8Q2xpbmljYWxEb2N1bWVudCB4bWxucz0idXJuOmhsNy1vcmc6djMiIHhtbG5zOnZvYz0idXJuOmhsNy1vcmc6djMvdm9jIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249InVybjpobDctb3JnOnYzIENEQS54c2QiPg0KCTwhLS0gDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KQ0RBIEhlYWRlcg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0tPg0KCTx0eXBlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMS4zIiBleHRlbnNpb249IlBPQ0RfSEQwMDAwNDAiLz4NCgk8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xIi8+IDwhLS0gQ0NEIHYxLjAgVGVtcGxhdGVzIFJvb3QgLS0+DQoJPGlkIHJvb3Q9ImRiNzM0NjQ3LWZjOTktNDI0Yy1hODY0LTdlM2NkYTgyZTcwMyIvPg0KCTxjb2RlIGNvZGU9IjM0MTMzLTkiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuMSIgZGlzcGxheU5hbWU9IlN1bW1hcml6YXRpb24gb2YgZXBpc29kZSBub3RlIi8+DQoJPHRpdGxlPkdvb2QgSGVhbHRoIENsaW5pYyBDb250aW51aXR5IG9mIENhcmUgRG9jdW1lbnQ8L3RpdGxlPg0KCTxlZmZlY3RpdmVUaW1lIHZhbHVlPSIyMDAwMDQwNzEzMDAwMCswNTAwIi8+DQoJPGNvbmZpZGVudGlhbGl0eUNvZGUgY29kZT0iTiIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNS4yNSIvPg0KCTxsYW5ndWFnZUNvZGUgY29kZT0iZW4tVVMiLz4NCgk8cmVjb3JkVGFyZ2V0Pg0KCQk8cGF0aWVudFJvbGU+DQoJCQk8aWQgZXh0ZW5zaW9uPSIxMTExMTExMTExIiByb290PSJHU0lIZWFsdGgiLz4NCgkJCTxwYXRpZW50Pg0KCQkJCTxuYW1lPg0KCQkJCQk8Z2l2ZW4+Sm9objwvZ2l2ZW4+DQoJCQkJCTxmYW1pbHk+RG9lPC9mYW1pbHk+DQoJCQkJDQoJCQkJPC9uYW1lPg0KCQkJCTxhZG1pbmlzdHJhdGl2ZUdlbmRlckNvZGUgY29kZT0iTSIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNS4xIi8+DQoJCQkJPGJpcnRoVGltZSB2YWx1ZT0iMTk1NjA1MjciLz4NCgkJCTwvcGF0aWVudD4NCgkJCTxwcm92aWRlck9yZ2FuaXphdGlvbj4NCgkJCQk8aWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTkuNSIvPg0KCQkJCTxuYW1lPkdvb2QgSGVhbHRoIENsaW5pYzwvbmFtZT4NCgkJCTwvcHJvdmlkZXJPcmdhbml6YXRpb24+DQoJCTwvcGF0aWVudFJvbGU+DQoJPC9yZWNvcmRUYXJnZXQ+DQoJPGF1dGhvcj4NCgkJPHRpbWUgdmFsdWU9IjIwMDAwNDA3MTMwMDAwKzA1MDAiLz4NCgkJPGFzc2lnbmVkQXV0aG9yPg0KCQkJPGlkIHJvb3Q9IjIwY2YxNGZiLWI2NWMtNGM4Yy1hNTRkLWIwY2NhODM0YzE4YyIvPg0KCQkJPGFzc2lnbmVkUGVyc29uPg0KCQkJCTxuYW1lPjxwcmVmaXg+RHIuPC9wcmVmaXg+PGdpdmVuPlJvYmVydDwvZ2l2ZW4+PGZhbWlseT5Eb2xpbjwvZmFtaWx5PjwvbmFtZT4NCgkJCTwvYXNzaWduZWRQZXJzb24+DQoJCQk8cmVwcmVzZW50ZWRPcmdhbml6YXRpb24+DQoJCQkJPGlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjE5LjUiLz4NCgkJCQk8bmFtZT5Hb29kIEhlYWx0aCBDbGluaWM8L25hbWU+DQoJCQk8L3JlcHJlc2VudGVkT3JnYW5pemF0aW9uPg0KCQk8L2Fzc2lnbmVkQXV0aG9yPg0KCTwvYXV0aG9yPg0KCTxpbmZvcm1hbnQ+DQoJCTxhc3NpZ25lZEVudGl0eT4NCgkJCTxpZCBudWxsRmxhdm9yPSJOSSIvPg0KCQkJPHJlcHJlc2VudGVkT3JnYW5pemF0aW9uPg0KCQkJCTxpZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xOS41Ii8+DQoJCQkJPG5hbWU+R29vZCBIZWFsdGggQ2xpbmljPC9uYW1lPg0KCQkJPC9yZXByZXNlbnRlZE9yZ2FuaXphdGlvbj4NCgkJPC9hc3NpZ25lZEVudGl0eT4NCgk8L2luZm9ybWFudD4NCgk8Y3VzdG9kaWFuPg0KCQk8YXNzaWduZWRDdXN0b2RpYW4+DQoJCQk8cmVwcmVzZW50ZWRDdXN0b2RpYW5Pcmdhbml6YXRpb24+DQoJCQkJPGlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjE5LjUiLz4NCgkJCQk8bmFtZT5Hb29kIEhlYWx0aCBDbGluaWM8L25hbWU+DQoJCQk8L3JlcHJlc2VudGVkQ3VzdG9kaWFuT3JnYW5pemF0aW9uPg0KCQk8L2Fzc2lnbmVkQ3VzdG9kaWFuPg0KCTwvY3VzdG9kaWFuPg0KCTxsZWdhbEF1dGhlbnRpY2F0b3I+DQoJCTx0aW1lIHZhbHVlPSIyMDAwMDQwNzEzMDAwMCswNTAwIi8+DQoJCTxzaWduYXR1cmVDb2RlIGNvZGU9IlMiLz4NCgkJPGFzc2lnbmVkRW50aXR5Pg0KCQkJPGlkIG51bGxGbGF2b3I9Ik5JIi8+DQoJCQk8cmVwcmVzZW50ZWRPcmdhbml6YXRpb24+DQoJCQkJPGlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjE5LjUiLz4NCgkJCQk8bmFtZT5Hb29kIEhlYWx0aCBDbGluaWM8L25hbWU+DQoJCQk8L3JlcHJlc2VudGVkT3JnYW5pemF0aW9uPg0KCQk8L2Fzc2lnbmVkRW50aXR5Pg0KCTwvbGVnYWxBdXRoZW50aWNhdG9yPg0KCTxwYXJ0aWNpcGFudCB0eXBlQ29kZT0iSU5EIj4NCgkJPGFzc29jaWF0ZWRFbnRpdHkgY2xhc3NDb2RlPSJHVUFSIj4NCgkJCTxpZCByb290PSI0ZmY1MTU3MC04M2E5LTQ3YjctOTFmMi05M2JhMzAzNzMxNDEiLz4NCgkJCTxhZGRyPg0KCQkJCTxzdHJlZXRBZGRyZXNzTGluZT4xMDAgTWFpbiBTdDwvc3RyZWV0QWRkcmVzc0xpbmU+DQoJCQkJPGNpdHk+TWV0cm9wb2xpczwvY2l0eT4NCgkJCQk8c3RhdGU+SUw8L3N0YXRlPg0KCQkJCTxwb3N0YWxDb2RlPjQ0MTMwPC9wb3N0YWxDb2RlPg0KCQkJPC9hZGRyPg0KCQkJPGFzc29jaWF0ZWRQZXJzb24+DQoJCQkJPG5hbWU+DQoJCQkJCTxnaXZlbj5LZW5uZXRoPC9naXZlbj4NCgkJCQkJPGZhbWlseT5Sb3NzPC9mYW1pbHk+DQoJCQkJPC9uYW1lPg0KCQkJPC9hc3NvY2lhdGVkUGVyc29uPg0KCQk8L2Fzc29jaWF0ZWRFbnRpdHk+DQoJPC9wYXJ0aWNpcGFudD4NCgk8cGFydGljaXBhbnQgdHlwZUNvZGU9IklORCI+DQoJCTxhc3NvY2lhdGVkRW50aXR5IGNsYXNzQ29kZT0iTk9LIj4NCgkJCTxpZCByb290PSI0YWM3MTUxNC02YTEwLTQxNjQtOTcxNS1mOGQ5NmFmNDhlNmQiLz4NCgkJCTxjb2RlIGNvZGU9IjY1NjU2MDA1IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiBkaXNwbGF5TmFtZT0iQmlpb2xvZ2ljYWwgbW90aGVyIi8+DQoJCQk8dGVsZWNvbSB2YWx1ZT0idGVsOig5OTkpNTU1LTEyMTIiLz4NCgkJCTxhc3NvY2lhdGVkUGVyc29uPg0KCQkJCTxuYW1lPg0KCQkJCQk8Z2l2ZW4+SGVucmlldHRhPC9naXZlbj4NCgkJCQkJPGZhbWlseT5MZXZpbjwvZmFtaWx5Pg0KCQkJCTwvbmFtZT4NCgkJCTwvYXNzb2NpYXRlZFBlcnNvbj4NCgkJPC9hc3NvY2lhdGVkRW50aXR5Pg0KCTwvcGFydGljaXBhbnQ+DQoJPGRvY3VtZW50YXRpb25PZj4NCgkJPHNlcnZpY2VFdmVudCBjbGFzc0NvZGU9IlBDUFIiPg0KCQkJPGVmZmVjdGl2ZVRpbWU+PGxvdyB2YWx1ZT0iMTkzMjA5MjQiLz48aGlnaCB2YWx1ZT0iMjAwMDA0MDciLz48L2VmZmVjdGl2ZVRpbWU+DQoJCQk8cGVyZm9ybWVyIHR5cGVDb2RlPSJQUkYiPg0KCQkJCTxmdW5jdGlvbkNvZGUgY29kZT0iUENQIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My41Ljg4Ii8+DQoJCQkJPHRpbWU+PGxvdyB2YWx1ZT0iMTk5MCIvPjxoaWdoIHZhbHVlPScyMDAwMDQwNycvPjwvdGltZT4NCgkJCQk8YXNzaWduZWRFbnRpdHk+DQoJCQkJCTxpZCByb290PSIyMGNmMTRmYi1iNjVjLTRjOGMtYTU0ZC1iMGNjYTgzNGMxOGMiLz4NCgkJCQkJPGFzc2lnbmVkUGVyc29uPg0KCQkJCQkJPG5hbWU+PHByZWZpeD5Eci48L3ByZWZpeD48Z2l2ZW4+Um9iZXJ0PC9naXZlbj48ZmFtaWx5PkRvbGluPC9mYW1pbHk+PC9uYW1lPg0KCQkJCQk8L2Fzc2lnbmVkUGVyc29uPg0KCQkJCQk8cmVwcmVzZW50ZWRPcmdhbml6YXRpb24+DQoJCQkJCQk8aWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTkuNSIvPg0KCQkJCQkJPG5hbWU+R29vZCBIZWFsdGggQ2xpbmljPC9uYW1lPg0KCQkJCQk8L3JlcHJlc2VudGVkT3JnYW5pemF0aW9uPg0KCQkJCTwvYXNzaWduZWRFbnRpdHk+DQoJCQk8L3BlcmZvcm1lcj4NCgkJPC9zZXJ2aWNlRXZlbnQ+DQoJPC9kb2N1bWVudGF0aW9uT2Y+DQoJPCEtLSANCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQpDREEgQm9keQ0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0tPg0KCTxjb21wb25lbnQ+DQoJCTxzdHJ1Y3R1cmVkQm9keT4NCgkJCQkJPCEtLSANCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQpQdXJwb3NlIHNlY3Rpb24NCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotLT4NCjxjb21wb25lbnQ+DQo8c2VjdGlvbj4NCgk8dGVtcGxhdGVJZCByb290PScyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjEzJy8+IDwhLS0gUHVycG9zZSBzZWN0aW9uIHRlbXBsYXRlIC0tPg0KCTxjb2RlIGNvZGU9IjQ4NzY0LTUiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuMSIvPg0KCTx0aXRsZT5TdW1tYXJ5IFB1cnBvc2U8L3RpdGxlPg0KCTx0ZXh0PlRyYW5zZmVyIG9mIGNhcmU8L3RleHQ+DQoJPGVudHJ5IHR5cGVDb2RlPSJEUklWIj4NCgkJPGFjdCBjbGFzc0NvZGU9IkFDVCIgbW9vZENvZGU9IkVWTiI+DQoJCQk8dGVtcGxhdGVJZCByb290PScyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjMwJy8+IDwhLS0gUHVycG9zZSBhY3Rpdml0eSB0ZW1wbGF0ZSAtLT4NCgkJCTxjb2RlIGNvZGU9IjIzNzQ1MDAxIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiBkaXNwbGF5TmFtZT0iRG9jdW1lbnRhdGlvbiBwcm9jZWR1cmUiLz4NCgkJCTxzdGF0dXNDb2RlIGNvZGU9ImNvbXBsZXRlZCIvPg0KCQkJPGVudHJ5UmVsYXRpb25zaGlwIHR5cGVDb2RlPSJSU09OIj4NCgkJCQk8YWN0IGNsYXNzQ29kZT0iQUNUIiBtb29kQ29kZT0iRVZOIj4NCgkJCQkJPGNvZGUgY29kZT0iMzA4MjkyMDA3IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiBkaXNwbGF5TmFtZT0iVHJhbnNmZXIgb2YgY2FyZSIvPg0KCQkJCQk8c3RhdHVzQ29kZSBjb2RlPSJjb21wbGV0ZWQiLz4NCgkJCQk8L2FjdD4NCgkJCTwvZW50cnlSZWxhdGlvbnNoaXA+DQoJCTwvYWN0Pg0KCTwvZW50cnk+DQo8L3NlY3Rpb24+DQo8L2NvbXBvbmVudD4NCgkJCQkJPCEtLSANCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQpQYXllcnMgc2VjdGlvbg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0tPg0KPGNvbXBvbmVudD4NCjxzZWN0aW9uPg0KCTx0ZW1wbGF0ZUlkIHJvb3Q9JzIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuOScvPiA8IS0tIFBheWVycyBzZWN0aW9uIHRlbXBsYXRlIC0tPg0KCTxjb2RlIGNvZGU9IjQ4NzY4LTYiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuMSIvPg0KCTx0aXRsZT5QYXllcnM8L3RpdGxlPg0KCTx0ZXh0Pg0KCQk8dGFibGUgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSI+DQoJCQk8dGhlYWQ+DQoJCQk8dHI+PHRoPlBheWVyIG5hbWU8L3RoPjx0aD5Qb2xpY3kgdHlwZSAvIENvdmVyYWdlIHR5cGU8L3RoPjx0aD5Db3ZlcmVkIHBhcnR5IElEPC90aD4gPHRoPkF1dGhvcml6YXRpb24ocyk8L3RoPjwvdHI+DQoJCQk8L3RoZWFkPg0KCQkJPHRib2R5Pg0KCQkJCTx0cj4NCgkJCQkJPHRkPkdvb2QgSGVhbHRoIEluc3VyYW5jZTwvdGQ+IA0KCQkJCQk8dGQ+RXh0ZW5kZWQgaGVhbHRoY2FyZSAvIFNlbGY8L3RkPiANCgkJCQkJPHRkPjE0ZDRhNTIwLTdhYWUtMTFkYi05ZmUxLTA4MDAyMDBjOWE2NjwvdGQ+DQoJCQkJCTx0ZD5Db2xvbm9zY29weTwvdGQ+DQoJCQkJPC90cj4NCgkJCTwvdGJvZHk+DQoJCTwvdGFibGU+DQoJPC90ZXh0Pg0KCTxlbnRyeSB0eXBlQ29kZT0iRFJJViI+DQoJCTxhY3QgY2xhc3NDb2RlPSJBQ1QiIG1vb2RDb2RlPSJERUYiPg0KCQkJPHRlbXBsYXRlSWQgcm9vdD0nMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS4yMCcvPiA8IS0tIENvdmVyYWdlIGFjdGl2aXR5IHRlbXBsYXRlIC0tPg0KCQkJPGlkIHJvb3Q9IjFmZTJjZGQwLTdhYWQtMTFkYi05ZmUxLTA4MDAyMDBjOWE2NiIvPg0KCQkJPGNvZGUgY29kZT0iNDg3NjgtNiIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi4xIiBkaXNwbGF5TmFtZT0iUGF5bWVudCBzb3VyY2VzIi8+DQoJCQk8c3RhdHVzQ29kZSBjb2RlPSJjb21wbGV0ZWQiLz4NCgkJCTxlbnRyeVJlbGF0aW9uc2hpcCB0eXBlQ29kZT0iQ09NUCI+DQoJCQkJPGFjdCBjbGFzc0NvZGU9IkFDVCIgbW9vZENvZGU9IkVWTiI+DQoJCQkJCTx0ZW1wbGF0ZUlkIHJvb3Q9JzIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuMjYnLz4gPCEtLSBQb2xpY3kgYWN0aXZpdHkgdGVtcGxhdGUgLS0+DQoJCQkJCTxpZCByb290PSIzZTY3NmE1MC03YWFjLTExZGItOWZlMS0wODAwMjAwYzlhNjYiLz4NCgkJCQkJPGNvZGUgY29kZT0iRUhDUE9MIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My41LjQiIGRpc3BsYXlOYW1lPSJFeHRlbmRlZCBoZWFsdGhjYXJlIi8+DQoJCQkJCTxzdGF0dXNDb2RlIGNvZGU9ImNvbXBsZXRlZCIvPg0KCQkJCQk8cGVyZm9ybWVyIHR5cGVDb2RlPSJQUkYiPg0KCQkJCQkJPGFzc2lnbmVkRW50aXR5Pg0KCQkJCQkJCTxpZCByb290PSIzMjlmY2RmMC03YWIzLTExZGItOWZlMS0wODAwMjAwYzlhNjYiLz4NCgkJCQkJCQk8cmVwcmVzZW50ZWRPcmdhbml6YXRpb24+DQoJCQkJCQkJCTxuYW1lPkdvb2QgSGVhbHRoIEluc3VyYW5jZTwvbmFtZT4NCgkJCQkJCQk8L3JlcHJlc2VudGVkT3JnYW5pemF0aW9uPg0KCQkJCQkJPC9hc3NpZ25lZEVudGl0eT4NCgkJCQkJPC9wZXJmb3JtZXI+DQoJCQkJCTxwYXJ0aWNpcGFudCB0eXBlQ29kZT0iQ09WIj4NCgkJCQkJCTxwYXJ0aWNpcGFudFJvbGU+DQoJCQkJCQkJPGlkIHJvb3Q9IjE0ZDRhNTIwLTdhYWUtMTFkYi05ZmUxLTA4MDAyMDBjOWE2NiIvPg0KCQkJCQkJCTxjb2RlIGNvZGU9IlNFTEYiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjUuMTExIiBkaXNwbGF5TmFtZT0iU2VsZiIvPg0KCQkJCQkJPC9wYXJ0aWNpcGFudFJvbGU+DQoJCQkJCTwvcGFydGljaXBhbnQ+DQoJCQkJCTxlbnRyeVJlbGF0aW9uc2hpcCB0eXBlQ29kZT0iUkVGUiI+DQoJCQkJCQk8YWN0IGNsYXNzQ29kZT0iQUNUIiBtb29kQ29kZT0iRVZOIj4NCgkJCQkJCQk8dGVtcGxhdGVJZCByb290PScyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjE5Jy8+IDwhLS0gQXV0aG9yaXphdGlvbiBhY3Rpdml0eSB0ZW1wbGF0ZSAtLT4NCgkJCQkJCQk8aWQgcm9vdD0iZjRkY2U3OTAtODMyOC0xMWRiLTlmZTEtMDgwMDIwMGM5YTY2Ii8+DQoJCQkJCQkJPGNvZGUgbnVsbEZsYXZvcj0iTkEiLz4NCgkJCQkJCQk8ZW50cnlSZWxhdGlvbnNoaXAgdHlwZUNvZGU9IlNVQkoiPg0KCQkJCQkJCQk8cHJvY2VkdXJlIGNsYXNzQ29kZT0iUFJPQyIgbW9vZENvZGU9IlBSTVMiPg0KCQkJCQkJCQkJPGNvZGUgY29kZT0iNzM3NjEwMDEiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuOTYiIGRpc3BsYXlOYW1lPSJDb2xvbm9zY29weSIvPg0KCQkJCQkJCQk8L3Byb2NlZHVyZT4NCgkJCQkJCQk8L2VudHJ5UmVsYXRpb25zaGlwPg0KCQkJCQkJPC9hY3Q+DQoJCQkJCTwvZW50cnlSZWxhdGlvbnNoaXA+DQoJCQkJPC9hY3Q+DQoJCQk8L2VudHJ5UmVsYXRpb25zaGlwPg0KCQk8L2FjdD4NCgk8L2VudHJ5Pg0KPC9zZWN0aW9uPg0KPC9jb21wb25lbnQ+DQoJCQkJCTwhLS0gDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KQWR2YW5jZSBEaXJlY3RpdmVzIHNlY3Rpb24NCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotLT4NCjxjb21wb25lbnQ+DQo8c2VjdGlvbj4NCgk8dGVtcGxhdGVJZCByb290PScyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjEnLz4gPCEtLSBBZHZhbmNlIGRpcmVjdGl2ZXMgc2VjdGlvbiB0ZW1wbGF0ZSAtLT4NCgk8Y29kZSBjb2RlPSI0MjM0OC0zIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42LjEiLz4NCgk8dGl0bGU+QWR2YW5jZSBEaXJlY3RpdmVzPC90aXRsZT4NCgk8dGV4dD4NCgkJPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiPg0KCQkJPHRoZWFkPg0KCQkJPHRyPjx0aD5EaXJlY3RpdmU8L3RoPjx0aD5EZXNjcmlwdGlvbjwvdGg+PHRoPlZlcmlmaWNhdGlvbjwvdGg+PHRoPlN1cHBvcnRpbmcgRG9jdW1lbnQocyk8L3RoPjwvdHI+DQoJCQk8L3RoZWFkPg0KCQkJPHRib2R5Pg0KCQkJCTx0cj4NCgkJCQkJPHRkPlJlc3VzY2l0YXRpb24gc3RhdHVzPC90ZD4gDQoJCQkJCTx0ZD48Y29udGVudCBJRD0iQUQxIj5EbyBub3QgcmVzdXNjaXRhdGU8L2NvbnRlbnQ+PC90ZD4gDQoJCQkJCTx0ZD5Eci4gUm9iZXJ0IERvbGluLCBOb3YgMDcsIDE5OTk8L3RkPg0KCQkJCQk8dGQ+PGxpbmtIdG1sIGhyZWY9IkFkdmFuY2VEaXJlY3RpdmUuYjUwYjc5MTAtN2ZmYi00ZjRjLWJiZTQtMTc3ZWQ2OGNiYmYzLnBkZiI+QWR2YW5jZSBkaXJlY3RpdmU8L2xpbmtIdG1sPjwvdGQ+DQoJCQkJPC90cj4NCgkJCTwvdGJvZHk+DQoJCTwvdGFibGU+DQoJPC90ZXh0Pg0KCTxlbnRyeSB0eXBlQ29kZT0iRFJJViI+DQoJCTxvYnNlcnZhdGlvbiBjbGFzc0NvZGU9Ik9CUyIgbW9vZENvZGU9IkVWTiI+DQoJCQk8dGVtcGxhdGVJZCByb290PScyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjE3Jy8+IDwhLS0gQWR2YW5jZSBkaXJlY3RpdmUgb2JzZXJ2YXRpb24gdGVtcGxhdGUgLS0+DQoJCQk8aWQgcm9vdD0iOWI1NGMzYzktMTY3My00OWM3LWFlZjktYjAzN2VkNzJlZDI3Ii8+DQoJCQk8Y29kZSBjb2RlPSIzMDQyNTEwMDgiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuOTYiIGRpc3BsYXlOYW1lPSJSZXN1c2NpdGF0aW9uIi8+DQoJCQk8c3RhdHVzQ29kZSBjb2RlPSJjb21wbGV0ZWQiLz4NCgkJCTx2YWx1ZSB4c2k6dHlwZT0iQ0QiIGNvZGU9IjMwNDI1MzAwNiIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi45NiIgZGlzcGxheU5hbWU9IkRvIG5vdCByZXN1c2NpdGF0ZSI+DQoJCQkJPG9yaWdpbmFsVGV4dD48cmVmZXJlbmNlIHZhbHVlPSIjQUQxIi8+PC9vcmlnaW5hbFRleHQ+DQoJCQk8L3ZhbHVlPg0KCQkJPHBhcnRpY2lwYW50IHR5cGVDb2RlPSJWUkYiPg0KCQkJCTx0ZW1wbGF0ZUlkIHJvb3Q9JzIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuNTgnLz4gPCEtLSBWZXJpZmljYXRpb24gb2YgYW4gYWR2YW5jZSBkaXJlY3RpdmUgb2JzZXJ2YXRpb24gdGVtcGxhdGUgLS0+DQoJCQkJPHRpbWUgdmFsdWU9IjE5OTkxMTA3Ii8+DQoJCQkJPHBhcnRpY2lwYW50Um9sZT4NCgkJCQkJPGlkIHJvb3Q9IjIwY2YxNGZiLWI2NWMtNGM4Yy1hNTRkLWIwY2NhODM0YzE4YyIvPg0KCQkJCTwvcGFydGljaXBhbnRSb2xlPg0KCQkJPC9wYXJ0aWNpcGFudD4NCgkJCTxlbnRyeVJlbGF0aW9uc2hpcCB0eXBlQ29kZT0iUkVGUiI+DQoJCQkJPG9ic2VydmF0aW9uIGNsYXNzQ29kZT0iT0JTIiBtb29kQ29kZT0iRVZOIj4NCgkJCQkJPHRlbXBsYXRlSWQgcm9vdD0nMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS4zNycvPiA8IS0tIEFkdmFuY2UgZGlyZWN0aXZlIHN0YXR1cyBvYnNlcnZhdGlvbiB0ZW1wbGF0ZSAtLT4NCgkJCQkJPGNvZGUgY29kZT0iMzM5OTktNCIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi4xIiBkaXNwbGF5TmFtZT0iU3RhdHVzIi8+DQoJCQkJCTxzdGF0dXNDb2RlIGNvZGU9ImNvbXBsZXRlZCIvPg0KCQkJCQk8dmFsdWUgeHNpOnR5cGU9IkNFIiBjb2RlPSIxNTI0MDAwNyIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi45NiIgZGlzcGxheU5hbWU9IkN1cnJlbnQgYW5kIHZlcmlmaWVkIi8+DQoJCQkJPC9vYnNlcnZhdGlvbj4NCgkJCTwvZW50cnlSZWxhdGlvbnNoaXA+DQoJCQk8cmVmZXJlbmNlIHR5cGVDb2RlPSJSRUZSIj4NCgkJCQk8ZXh0ZXJuYWxEb2N1bWVudD4NCgkJCQkJPHRlbXBsYXRlSWQgcm9vdD0nMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS4zNicvPiA8IS0tIEFkdmFuY2UgZGlyZWN0aXZlIHJlZmVyZW5jZSB0ZW1wbGF0ZSAtLT4NCgkJCQkJPGlkIHJvb3Q9ImI1MGI3OTEwLTdmZmItNGY0Yy1iYmU0LTE3N2VkNjhjYmJmMyIvPg0KCQkJCQk8Y29kZSBjb2RlPSIzNzE1MzgwMDYiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuOTYiIGRpc3BsYXlOYW1lPSJBZHZhbmNlIGRpcmVjdGl2ZSIvPg0KCQkJCQk8dGV4dCBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3BkZiI+PHJlZmVyZW5jZSB2YWx1ZT0iQWR2YW5jZURpcmVjdGl2ZS5iNTBiNzkxMC03ZmZiLTRmNGMtYmJlNC0xNzdlZDY4Y2JiZjMucGRmIi8+PC90ZXh0Pg0KCQkJCTwvZXh0ZXJuYWxEb2N1bWVudD4NCgkJCTwvcmVmZXJlbmNlPg0KCQk8L29ic2VydmF0aW9uPg0KCTwvZW50cnk+DQo8L3NlY3Rpb24+DQo8L2NvbXBvbmVudD4NCgkJCQkJPCEtLSANCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQpGdW5jdGlvbmFsIFN0YXR1cyBzZWN0aW9uDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLS0+DQo8Y29tcG9uZW50Pg0KPHNlY3Rpb24+DQoJPHRlbXBsYXRlSWQgcm9vdD0nMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS41Jy8+IDwhLS0gRnVuY3Rpb25hbCBzdGF0dXMgc2VjdGlvbiB0ZW1wbGF0ZSAtLT4NCgk8Y29kZSBjb2RlPSI0NzQyMC01IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42LjEiLz4gDQoJPHRpdGxlPkZ1bmN0aW9uYWwgU3RhdHVzPC90aXRsZT4gDQoJPHRleHQ+DQoJCTx0YWJsZSBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIj4NCgkJCTx0aGVhZD4NCgkJCTx0cj48dGg+RnVuY3Rpb25hbCBDb25kaXRpb248L3RoPiA8dGg+RWZmZWN0aXZlIERhdGVzPC90aD4gPHRoPkNvbmRpdGlvbiBTdGF0dXM8L3RoPjwvdHI+DQoJCQk8L3RoZWFkPg0KCQkJPHRib2R5Pg0KCQkJPHRyPjx0ZD5EZXBlbmRlbmNlIG9uIGNhbmU8L3RkPjx0ZD4xOTk4PC90ZD48dGQ+QWN0aXZlPC90ZD48L3RyPg0KCQkJPHRyPjx0ZD5NZW1vcnkgaW1wYWlybWVudDwvdGQ+PHRkPjE5OTk8L3RkPjx0ZD5BY3RpdmU8L3RkPjwvdHI+DQoJCQk8L3Rib2R5Pg0KCQk8L3RhYmxlPg0KCTwvdGV4dD4NCgk8ZW50cnkgdHlwZUNvZGU9IkRSSVYiPg0KCQk8YWN0IGNsYXNzQ29kZT0iQUNUIiBtb29kQ29kZT0iRVZOIj4NCgkJCTx0ZW1wbGF0ZUlkIHJvb3Q9JzIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuMjcnLz4gPCEtLSBQcm9ibGVtIGFjdCB0ZW1wbGF0ZSAtLT4NCgkJCTxpZCByb290PSI2ejJmYTg4ZC00MTc0LTQ5MDktYWVjZS1kYjQ0YjYwYTNhYmIiLz4NCgkJCTxjb2RlIG51bGxGbGF2b3I9Ik5BIi8+DQoJCQk8ZW50cnlSZWxhdGlvbnNoaXAgdHlwZUNvZGU9IlNVQkoiPg0KCQkJCTxvYnNlcnZhdGlvbiBjbGFzc0NvZGU9Ik9CUyIgbW9vZENvZGU9IkVWTiI+DQoJCQkJCTx0ZW1wbGF0ZUlkIHJvb3Q9JzIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuMjgnLz4gPCEtLSBQcm9ibGVtIG9ic2VydmF0aW9uIHRlbXBsYXRlIC0tPg0KCQkJCQk8aWQgcm9vdD0iZmQwNzExMWEtYjE1Yi00ZGNlLTg1MTgtMTI3NGQwN2YxNDJhIi8+DQoJCQkJCTxjb2RlIGNvZGU9IkFTU0VSVElPTiIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNS40Ii8+DQoJCQkJCTxzdGF0dXNDb2RlIGNvZGU9ImNvbXBsZXRlZCIvPiANCgkJCQkJPGVmZmVjdGl2ZVRpbWU+PGxvdyB2YWx1ZT0iMTk5OCIvPjwvZWZmZWN0aXZlVGltZT4NCgkJCQkJPHZhbHVlIHhzaTp0eXBlPSJDRCIgY29kZT0iMTA1NTA0MDAyIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiBkaXNwbGF5TmFtZT0iRGVwZW5kZW5jZSBvbiBjYW5lIi8+DQoJCQkJCTxlbnRyeVJlbGF0aW9uc2hpcCB0eXBlQ29kZT0iUkVGUiI+DQoJCQkJCQk8b2JzZXJ2YXRpb24gY2xhc3NDb2RlPSJPQlMiIG1vb2RDb2RlPSJFVk4iPg0KCQkJCQkJCTx0ZW1wbGF0ZUlkIHJvb3Q9JzIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuNDQnLz4gPCEtLSBTdGF0dXMgb2YgZnVuY3Rpb25hbCBzdGF0dXMgb2JzZXJ2YXRpb24gdGVtcGxhdGUgLS0+DQoJCQkJCQkJPGNvZGUgY29kZT0iMzM5OTktNCIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi4xIiBkaXNwbGF5TmFtZT0iU3RhdHVzIi8+DQoJCQkJCQkJPHN0YXR1c0NvZGUgY29kZT0iY29tcGxldGVkIi8+IA0KCQkJCQkJCTx2YWx1ZSB4c2k6dHlwZT0iQ0UiIGNvZGU9IjU1NTYxMDAzIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiBkaXNwbGF5TmFtZT0iQWN0aXZlIi8+DQoJCQkJCQk8L29ic2VydmF0aW9uPg0KCQkJCQk8L2VudHJ5UmVsYXRpb25zaGlwPg0KCQkJCTwvb2JzZXJ2YXRpb24+DQoJCQk8L2VudHJ5UmVsYXRpb25zaGlwPg0KCQk8L2FjdD4JDQoJPC9lbnRyeT4NCgk8ZW50cnkgdHlwZUNvZGU9IkRSSVYiPg0KCQk8YWN0IGNsYXNzQ29kZT0iQUNUIiBtb29kQ29kZT0iRVZOIj4NCgkJCTx0ZW1wbGF0ZUlkIHJvb3Q9JzIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuMjcnLz4gPCEtLSBQcm9ibGVtIGFjdCB0ZW1wbGF0ZSAtLT4NCgkJCTxpZCByb290PSI2NDYwNmU4Ni1jMDgwLTExZGItODMxNC0wODAwMjAwYzlhNjYiLz4NCgkJCTxjb2RlIG51bGxGbGF2b3I9Ik5BIi8+DQoJCQk8ZW50cnlSZWxhdGlvbnNoaXAgdHlwZUNvZGU9IlNVQkoiPg0KCQkJCTxvYnNlcnZhdGlvbiBjbGFzc0NvZGU9Ik9CUyIgbW9vZENvZGU9IkVWTiI+DQoJCQkJCTx0ZW1wbGF0ZUlkIHJvb3Q9JzIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuMjgnLz4gPCEtLSBQcm9ibGVtIG9ic2VydmF0aW9uIHRlbXBsYXRlIC0tPg0KCQkJCQk8aWQgcm9vdD0iNmJlMjkzMGEtYzA4MC0xMWRiLTgzMTQtMDgwMDIwMGM5YTY2Ii8+DQoJCQkJCTxjb2RlIGNvZGU9IkFTU0VSVElPTiIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNS40Ii8+DQoJCQkJCTxzdGF0dXNDb2RlIGNvZGU9ImNvbXBsZXRlZCIvPiANCgkJCQkJPGVmZmVjdGl2ZVRpbWU+PGxvdyB2YWx1ZT0iMTk5OSIvPjwvZWZmZWN0aXZlVGltZT4NCgkJCQkJPHZhbHVlIHhzaTp0eXBlPSJDRCIgY29kZT0iMzg2ODA3MDA2IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiBkaXNwbGF5TmFtZT0iTWVtb3J5IGltcGFpcm1lbnQiLz4NCgkJCQkJPGVudHJ5UmVsYXRpb25zaGlwIHR5cGVDb2RlPSJSRUZSIj4NCgkJCQkJCTxvYnNlcnZhdGlvbiBjbGFzc0NvZGU9Ik9CUyIgbW9vZENvZGU9IkVWTiI+DQoJCQkJCQkJPHRlbXBsYXRlSWQgcm9vdD0nMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS40NCcvPiA8IS0tIFN0YXR1cyBvZiBmdW5jdGlvbmFsIHN0YXR1cyBvYnNlcnZhdGlvbiB0ZW1wbGF0ZSAtLT4NCgkJCQkJCQk8Y29kZSBjb2RlPSIzMzk5OS00IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42LjEiIGRpc3BsYXlOYW1lPSJTdGF0dXMiLz4NCgkJCQkJCQk8c3RhdHVzQ29kZSBjb2RlPSJjb21wbGV0ZWQiLz4gDQoJCQkJCQkJPHZhbHVlIHhzaTp0eXBlPSJDRSIgY29kZT0iNTU1NjEwMDMiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuOTYiIGRpc3BsYXlOYW1lPSJBY3RpdmUiLz4NCgkJCQkJCTwvb2JzZXJ2YXRpb24+DQoJCQkJCTwvZW50cnlSZWxhdGlvbnNoaXA+DQoJCQkJPC9vYnNlcnZhdGlvbj4NCgkJCTwvZW50cnlSZWxhdGlvbnNoaXA+DQoJCTwvYWN0PgkNCgk8L2VudHJ5Pg0KPC9zZWN0aW9uPg0KPC9jb21wb25lbnQ+DQoJCQk8IS0tIA0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNClByb2JsZW1zIHNlY3Rpb24NCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotLT4NCjxjb21wb25lbnQ+DQo8c2VjdGlvbj4NCgk8dGVtcGxhdGVJZCByb290PScyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjExJy8+IDwhLS0gUHJvYmxlbSBzZWN0aW9uIHRlbXBsYXRlIC0tPg0KCTxjb2RlIGNvZGU9IjExNDUwLTQiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuMSIvPiANCgk8dGl0bGU+UHJvYmxlbXM8L3RpdGxlPiANCgk8dGV4dD4NCgkJPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiPg0KCQkJPHRoZWFkPg0KCQkJCTx0cj48dGg+Q29uZGl0aW9uPC90aD48dGg+RWZmZWN0aXZlIERhdGVzPC90aD48dGg+Q29uZGl0aW9uIFN0YXR1czwvdGg+PC90cj4NCgkJCTwvdGhlYWQ+DQoJCQk8dGJvZHk+DQoJCQkJPHRyPjx0ZD5Bc3RobWE8L3RkPjx0ZD4xOTUwPC90ZD48dGQ+QWN0aXZlPC90ZD48L3RyPg0KCQkJCTx0cj48dGQ+UG5ldW1vbmlhPC90ZD48dGQ+SmFuIDE5OTc8L3RkPjx0ZD5SZXNvbHZlZDwvdGQ+PC90cj4NCgkJCQk8dHI+PHRkPiI8L3RkPjx0ZD5NYXIgMTk5OTwvdGQ+PHRkPlJlc29sdmVkPC90ZD48L3RyPg0KCQkJCTx0cj48dGQ+TXlvY2FyZGlhbCBJbmZhcmN0aW9uPC90ZD48dGQ+SmFuIDE5OTc8L3RkPjx0ZD5SZXNvbHZlZDwvdGQ+PC90cj4JCQkNCgkJCTwvdGJvZHk+DQoJCTwvdGFibGU+DQoJPC90ZXh0Pg0KCTxlbnRyeSB0eXBlQ29kZT0iRFJJViI+DQoJCTxhY3QgY2xhc3NDb2RlPSJBQ1QiIG1vb2RDb2RlPSJFVk4iPg0KCQkJPHRlbXBsYXRlSWQgcm9vdD0nMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS4yNycvPiA8IS0tIFByb2JsZW0gYWN0IHRlbXBsYXRlIC0tPg0KCQkJPGlkIHJvb3Q9IjZhMmZhODhkLTQxNzQtNDkwOS1hZWNlLWRiNDRiNjBhM2FiYiIvPg0KCQkJPGNvZGUgbnVsbEZsYXZvcj0iTkEiLz4NCgkJCTxlbnRyeVJlbGF0aW9uc2hpcCB0eXBlQ29kZT0iU1VCSiI+DQoJCQkJPG9ic2VydmF0aW9uIGNsYXNzQ29kZT0iT0JTIiBtb29kQ29kZT0iRVZOIj4NCgkJCQkJPHRlbXBsYXRlSWQgcm9vdD0nMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS4yOCcvPiA8IS0tIFByb2JsZW0gb2JzZXJ2YXRpb24gdGVtcGxhdGUgLS0+DQoJCQkJCTxpZCByb290PSJkMTEyNzVlNy02N2FlLTExZGItYmQxMy0wODAwMjAwYzlhNjYiLz4NCgkJCQkJPGNvZGUgY29kZT0iQVNTRVJUSU9OIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My41LjQiLz4JCQkJCQ0KCQkJCQk8c3RhdHVzQ29kZSBjb2RlPSJjb21wbGV0ZWQiLz4gDQoJCQkJCTxlZmZlY3RpdmVUaW1lPjxsb3cgdmFsdWU9IjE5NTAiLz48L2VmZmVjdGl2ZVRpbWU+DQoJCQkJCTx2YWx1ZSB4c2k6dHlwZT0iQ0QiIGNvZGU9IjE5NTk2NzAwMSIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi45NiIgZGlzcGxheU5hbWU9IkFzdGhtYSIvPg0KCQkJCQk8ZW50cnlSZWxhdGlvbnNoaXAgdHlwZUNvZGU9IlJFRlIiPg0KCQkJCQkJPG9ic2VydmF0aW9uIGNsYXNzQ29kZT0iT0JTIiBtb29kQ29kZT0iRVZOIj4NCgkJCQkJCQk8dGVtcGxhdGVJZCByb290PScyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjUwJy8+IDwhLS0gUHJvYmxlbSBzdGF0dXMgb2JzZXJ2YXRpb24gdGVtcGxhdGUgLS0+DQoJCQkJCQkJPGNvZGUgY29kZT0iMzM5OTktNCIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi4xIiBkaXNwbGF5TmFtZT0iU3RhdHVzIi8+DQoJCQkJCQkJPHN0YXR1c0NvZGUgY29kZT0iY29tcGxldGVkIi8+DQoJCQkJCQkJPHZhbHVlIHhzaTp0eXBlPSJDRSIgY29kZT0iNTU1NjEwMDMiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuOTYiIGRpc3BsYXlOYW1lPSJBY3RpdmUiLz4NCgkJCQkJCTwvb2JzZXJ2YXRpb24+DQoJCQkJCTwvZW50cnlSZWxhdGlvbnNoaXA+DQoJCQkJPC9vYnNlcnZhdGlvbj4NCgkJCTwvZW50cnlSZWxhdGlvbnNoaXA+DQoJCTwvYWN0PgkNCgk8L2VudHJ5Pg0KCTxlbnRyeSB0eXBlQ29kZT0iRFJJViI+DQoJCTxhY3QgY2xhc3NDb2RlPSJBQ1QiIG1vb2RDb2RlPSJFVk4iPg0KCQkJPHRlbXBsYXRlSWQgcm9vdD0nMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS4yNycvPiA8IS0tIFByb2JsZW0gYWN0IHRlbXBsYXRlIC0tPg0KCQkJPGlkIHJvb3Q9ImVjOGE2ZmY4LWVkNGItNGY3ZS04MmMzLWU5OGU1OGI0NWRlNyIvPg0KCQkJPGNvZGUgbnVsbEZsYXZvcj0iTkEiLz4NCgkJCTxlbnRyeVJlbGF0aW9uc2hpcCB0eXBlQ29kZT0iU1VCSiI+DQoJCQkJPG9ic2VydmF0aW9uIGNsYXNzQ29kZT0iT0JTIiBtb29kQ29kZT0iRVZOIj4NCgkJCQkJPHRlbXBsYXRlSWQgcm9vdD0nMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS4yOCcvPiA8IS0tIFByb2JsZW0gb2JzZXJ2YXRpb24gdGVtcGxhdGUgLS0+DQoJCQkJCTxpZCByb290PSJhYjE3OTFiMC01YzcxLTExZGItYjBkZS0wODAwMjAwYzlhNjYiLz4NCgkJCQkJPGNvZGUgY29kZT0iQVNTRVJUSU9OIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My41LjQiLz4NCgkJCQkJPHN0YXR1c0NvZGUgY29kZT0iY29tcGxldGVkIi8+IA0KCQkJCQk8ZWZmZWN0aXZlVGltZT48bG93IHZhbHVlPSIxOTk3MDEiLz48L2VmZmVjdGl2ZVRpbWU+DQoJCQkJCTx2YWx1ZSB4c2k6dHlwZT0iQ0QiIGNvZGU9IjIzMzYwNDAwNyIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi45NiIgZGlzcGxheU5hbWU9IlBuZXVtb25pYSIvPg0KCQkJCQk8ZW50cnlSZWxhdGlvbnNoaXAgdHlwZUNvZGU9IlJFRlIiPg0KCQkJCQkJPG9ic2VydmF0aW9uIGNsYXNzQ29kZT0iT0JTIiBtb29kQ29kZT0iRVZOIj4NCgkJCQkJCQk8dGVtcGxhdGVJZCByb290PScyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjUwJy8+IDwhLS0gUHJvYmxlbSBzdGF0dXMgb2JzZXJ2YXRpb24gdGVtcGxhdGUgLS0+DQoJCQkJCQkJPGNvZGUgY29kZT0iMzM5OTktNCIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi4xIiBkaXNwbGF5TmFtZT0iU3RhdHVzIi8+DQoJCQkJCQkJPHN0YXR1c0NvZGUgY29kZT0iY29tcGxldGVkIi8+DQoJCQkJCQkJPHZhbHVlIHhzaTp0eXBlPSJDRSIgY29kZT0iNDEzMzIyMDA5IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiBkaXNwbGF5TmFtZT0iUmVzb2x2ZWQiLz4NCgkJCQkJCTwvb2JzZXJ2YXRpb24+DQoJCQkJCTwvZW50cnlSZWxhdGlvbnNoaXA+DQoJCQkJPC9vYnNlcnZhdGlvbj4NCgkJCTwvZW50cnlSZWxhdGlvbnNoaXA+DQoJCTwvYWN0Pg0KCTwvZW50cnk+DQoJPGVudHJ5IHR5cGVDb2RlPSJEUklWIj4NCgkJPGFjdCBjbGFzc0NvZGU9IkFDVCIgbW9vZENvZGU9IkVWTiI+DQoJCQk8dGVtcGxhdGVJZCByb290PScyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjI3Jy8+IDwhLS0gUHJvYmxlbSBhY3QgdGVtcGxhdGUgLS0+DQoJCQk8aWQgcm9vdD0iZDExMjc1ZTktNjdhZS0xMWRiLWJkMTMtMDgwMDIwMGM5YTY2Ii8+DQoJCQk8Y29kZSBudWxsRmxhdm9yPSJOQSIvPg0KCQkJPGVudHJ5UmVsYXRpb25zaGlwIHR5cGVDb2RlPSJTVUJKIj4NCgkJCQk8b2JzZXJ2YXRpb24gY2xhc3NDb2RlPSJPQlMiIG1vb2RDb2RlPSJFVk4iPg0KCQkJCQk8dGVtcGxhdGVJZCByb290PScyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjI4Jy8+IDwhLS0gUHJvYmxlbSBvYnNlcnZhdGlvbiB0ZW1wbGF0ZSAtLT4NCgkJCQkJPGlkIHJvb3Q9IjlkM2Q0MTZkLTQ1YWItNGRhMS05MTJmLTQ1ODNlMDYzMjAwMCIvPg0KCQkJCQk8Y29kZSBjb2RlPSJBU1NFUlRJT04iIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjUuNCIvPg0KCQkJCQk8c3RhdHVzQ29kZSBjb2RlPSJjb21wbGV0ZWQiLz4gDQoJCQkJCTxlZmZlY3RpdmVUaW1lPjxsb3cgdmFsdWU9IjE5OTkwMyIvPjwvZWZmZWN0aXZlVGltZT4NCgkJCQkJPHZhbHVlIHhzaTp0eXBlPSJDRCIgY29kZT0iMjMzNjA0MDA3IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiBkaXNwbGF5TmFtZT0iUG5ldW1vbmlhIi8+DQoJCQkJCTxlbnRyeVJlbGF0aW9uc2hpcCB0eXBlQ29kZT0iUkVGUiI+DQoJCQkJCQk8b2JzZXJ2YXRpb24gY2xhc3NDb2RlPSJPQlMiIG1vb2RDb2RlPSJFVk4iPg0KCQkJCQkJCTx0ZW1wbGF0ZUlkIHJvb3Q9JzIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuNTAnLz4gPCEtLSBQcm9ibGVtIHN0YXR1cyBvYnNlcnZhdGlvbiB0ZW1wbGF0ZSAtLT4NCgkJCQkJCQk8Y29kZSBjb2RlPSIzMzk5OS00IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42LjEiIGRpc3BsYXlOYW1lPSJTdGF0dXMiLz4NCgkJCQkJCQk8c3RhdHVzQ29kZSBjb2RlPSJjb21wbGV0ZWQiLz4NCgkJCQkJCQk8dmFsdWUgeHNpOnR5cGU9IkNFIiBjb2RlPSI0MTMzMjIwMDkiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuOTYiIGRpc3BsYXlOYW1lPSJSZXNvbHZlZCIvPg0KCQkJCQkJPC9vYnNlcnZhdGlvbj4NCgkJCQkJPC9lbnRyeVJlbGF0aW9uc2hpcD4NCgkJCQk8L29ic2VydmF0aW9uPg0KCQkJPC9lbnRyeVJlbGF0aW9uc2hpcD4NCgkJCTxlbnRyeVJlbGF0aW9uc2hpcCB0eXBlQ29kZT0iU1VCSiIgaW52ZXJzaW9uSW5kPSJ0cnVlIj4NCgkJCQk8b2JzZXJ2YXRpb24gY2xhc3NDb2RlPSJPQlMiIG1vb2RDb2RlPSJFVk4iPg0KCQkJCQk8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjQxIi8+IDwhLS0gRXBpc29kZSBvYnNlcnZhdGlvbiB0ZW1wbGF0ZSAtLT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWQgcm9vdD0iOWQzZDQxNmQtNDVhYi00ZGExLTkxMmYtNDU4M2UwNjMyMDAxIi8+DQoJCQkJCTxjb2RlIGNvZGU9IkFTU0VSVElPTiIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNS40Ii8+DQoJCQkJCTxzdGF0dXNDb2RlIGNvZGU9ImNvbXBsZXRlZCIvPg0KCQkJCQk8dmFsdWUgeHNpOnR5cGU9IkNEIiBjb2RlPSI0MDQ2ODQwMDMiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuOTYiIGRpc3BsYXlOYW1lPSJDbGluaWNhbCBmaW5kaW5nIj4NCgkJCQkJCTxxdWFsaWZpZXI+DQoJCQkJCQkJPG5hbWUgY29kZT0iMjQ2NDU2MDAwIiBkaXNwbGF5TmFtZT0iRXBpc29kaWNpdHkiLz4NCgkJCQkJCQk8dmFsdWUgY29kZT0iMjg4NTI3MDA4IiBkaXNwbGF5TmFtZT0iTmV3IGVwaXNvZGUiLz4NCgkJCQkJCTwvcXVhbGlmaWVyPg0KCQkJCQk8L3ZhbHVlPg0KCQkJCQk8ZW50cnlSZWxhdGlvbnNoaXAgdHlwZUNvZGU9IlNBUyI+DQoJCQkJCQk8YWN0IGNsYXNzQ29kZT0iQUNUIiBtb29kQ29kZT0iRVZOIj4NCgkJCQkJCQk8aWQgcm9vdD0iZWM4YTZmZjgtZWQ0Yi00ZjdlLTgyYzMtZTk4ZTU4YjQ1ZGU3Ii8+DQoJCQkJCQkJPGNvZGUgbnVsbEZsYXZvcj0iTkEiLz4NCgkJCQkJCTwvYWN0Pg0KCQkJCQk8L2VudHJ5UmVsYXRpb25zaGlwPg0KCQkJCTwvb2JzZXJ2YXRpb24+DQoJCQk8L2VudHJ5UmVsYXRpb25zaGlwPg0KCQk8L2FjdD4JDQoJPC9lbnRyeT4NCgk8ZW50cnkgdHlwZUNvZGU9IkRSSVYiPg0KCQk8YWN0IGNsYXNzQ29kZT0iQUNUIiBtb29kQ29kZT0iRVZOIj4NCgkJCTx0ZW1wbGF0ZUlkIHJvb3Q9JzIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuMjcnLz4gPCEtLSBQcm9ibGVtIGFjdCB0ZW1wbGF0ZSAtLT4NCgkJCTxpZCByb290PSI1YTJjOTAzYy1iZDc3LTRiZDEtYWQ5ZC00NTIzODNmYmZlZmEiLz4NCgkJCTxjb2RlIG51bGxGbGF2b3I9Ik5BIi8+DQoJCQk8ZW50cnlSZWxhdGlvbnNoaXAgdHlwZUNvZGU9IlNVQkoiPg0KCQkJCTxvYnNlcnZhdGlvbiBjbGFzc0NvZGU9Ik9CUyIgbW9vZENvZGU9IkVWTiI+DQoJCQkJCTx0ZW1wbGF0ZUlkIHJvb3Q9JzIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuMjgnLz4gPCEtLSBQcm9ibGVtIG9ic2VydmF0aW9uIHRlbXBsYXRlIC0tPg0KCQkJCQkgPGlkIHJvb3Q9IjlkM2Q0MTZkLTQ1YWItNGRhMS05MTJmLTQ1ODNlMDYzMjAwMiIvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNvZGU9IkFTU0VSVElPTiIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNS40Ii8+DQoJCQkJCTxzdGF0dXNDb2RlIGNvZGU9ImNvbXBsZXRlZCIvPiANCgkJCQkJPGVmZmVjdGl2ZVRpbWU+PGxvdyB2YWx1ZT0iMTk5NzAxIi8+PC9lZmZlY3RpdmVUaW1lPg0KCQkJCQk8dmFsdWUgeHNpOnR5cGU9IkNEIiBjb2RlPSIyMjI5ODAwNiIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi45NiIgZGlzcGxheU5hbWU9Ik15b2NhcmRpYWwgaW5mYXJjdGlvbiIvPg0KCQkJCQk8ZW50cnlSZWxhdGlvbnNoaXAgdHlwZUNvZGU9IlJFRlIiPg0KCQkJCQkJPG9ic2VydmF0aW9uIGNsYXNzQ29kZT0iT0JTIiBtb29kQ29kZT0iRVZOIj4NCgkJCQkJCQk8dGVtcGxhdGVJZCByb290PScyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjUwJy8+IDwhLS0gUHJvYmxlbSBzdGF0dXMgb2JzZXJ2YXRpb24gdGVtcGxhdGUgLS0+DQoJCQkJCQkJPGNvZGUgY29kZT0iMzM5OTktNCIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi4xIiBkaXNwbGF5TmFtZT0iU3RhdHVzIi8+DQoJCQkJCQkJPHN0YXR1c0NvZGUgY29kZT0iY29tcGxldGVkIi8+DQoJCQkJCQkJPHZhbHVlIHhzaTp0eXBlPSJDRSIgY29kZT0iNDEzMzIyMDA5IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiBkaXNwbGF5TmFtZT0iUmVzb2x2ZWQiLz4NCgkJCQkJCTwvb2JzZXJ2YXRpb24+DQoJCQkJCTwvZW50cnlSZWxhdGlvbnNoaXA+DQoJCQkJPC9vYnNlcnZhdGlvbj4NCgkJCTwvZW50cnlSZWxhdGlvbnNoaXA+DQoJCTwvYWN0PgkNCgk8L2VudHJ5PgkNCjwvc2VjdGlvbj4NCjwvY29tcG9uZW50Pg0KCQkJPCEtLSANCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQpGYW1pbHkgSGlzdG9yeSBzZWN0aW9uDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLS0+DQo8Y29tcG9uZW50Pg0KPHNlY3Rpb24+DQoJPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS40Ii8+IDwhLS0gRmFtaWx5IGhpc3Rvcnkgc2VjdGlvbiB0ZW1wbGF0ZSAtLT4NCgk8Y29kZSBjb2RlPSIxMDE1Ny02IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42LjEiLz4NCgk8dGl0bGU+RmFtaWx5IGhpc3Rvcnk8L3RpdGxlPg0KCTx0ZXh0Pg0KCQk8cGFyYWdyYXBoPkZhdGhlciAoZGVjZWFzZWQpPC9wYXJhZ3JhcGg+DQoJCTx0YWJsZSBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIj4NCgkJCTx0aGVhZD4NCgkJCQk8dHI+PHRoPkRpYWdub3NpczwvdGg+PHRoPkFnZSBBdCBPbnNldDwvdGg+PC90cj4NCgkJCTwvdGhlYWQ+DQoJCQk8dGJvZHk+DQoJCQkJPHRyPjx0ZD5NeW9jYXJkaWFsIEluZmFyY3Rpb24gKGNhdXNlIG9mIGRlYXRoKTwvdGQ+PHRkPjU3PC90ZD48L3RyPg0KCQkJCTx0cj48dGQ+SHlwZXJ0ZW5zaW9uPC90ZD48dGQ+NDA8L3RkPjwvdHI+DQoJCQk8L3Rib2R5Pg0KCQk8L3RhYmxlPg0KCQk8cGFyYWdyYXBoPk1vdGhlciAoYWxpdmUpPC9wYXJhZ3JhcGg+DQoJCTx0YWJsZSBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIj4NCgkJCTx0aGVhZD4NCgkJCQk8dHI+PHRoPkRpYWdub3NpczwvdGg+PHRoPkFnZSBBdCBPbnNldDwvdGg+PC90cj4NCgkJCTwvdGhlYWQ+DQoJCQk8dGJvZHk+DQoJCQkJPHRyPjx0ZD5Bc3RobWE8L3RkPjx0ZD4zMDwvdGQ+PC90cj4NCgkJCTwvdGJvZHk+DQoJCTwvdGFibGU+DQoJPC90ZXh0Pg0KCTxlbnRyeSB0eXBlQ29kZT0iRFJJViI+DQoJCTxvcmdhbml6ZXIgbW9vZENvZGU9IkVWTiIgY2xhc3NDb2RlPSJDTFVTVEVSIj4NCgkJCTx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuMjMiLz4gPCEtLSBGYW1pbHkgaGlzdG9yeSBvcmdhbml6ZXIgdGVtcGxhdGUgLS0+DQoJCQk8c3RhdHVzQ29kZSBjb2RlPSJjb21wbGV0ZWQiLz4NCgkJCTxzdWJqZWN0Pg0KCQkJCTxyZWxhdGVkU3ViamVjdCBjbGFzc0NvZGU9IlBSUyI+DQoJCQkJCTxjb2RlIGNvZGU9Ijk5NDcwMDgiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuOTYiIGRpc3BsYXlOYW1lPSJCaW9sb2dpY2FsIGZhdGhlciIvPg0KCQkJCQk8c3ViamVjdD4NCgkJCQkJCTxhZG1pbmlzdHJhdGl2ZUdlbmRlckNvZGUgY29kZT0iTSIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNS4xIiBkaXNwbGF5TmFtZT0iTWFsZSIvPg0KCQkJCQkJPGJpcnRoVGltZSB2YWx1ZT0iMTkxMiIvPg0KCQkJCQk8L3N1YmplY3Q+DQoJCQkJPC9yZWxhdGVkU3ViamVjdD4NCgkJCTwvc3ViamVjdD4NCgkJCTxjb21wb25lbnQ+DQoJCQkJPG9ic2VydmF0aW9uIGNsYXNzQ29kZT0iT0JTIiBtb29kQ29kZT0iRVZOIj4NCgkJCQkJPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS40MiIvPiA8IS0tIEZhbWlseSBoaXN0b3J5IGNhdXNlIG9mIGRlYXRoIG9ic2VydmF0aW9uIHRlbXBsYXRlIC0tPg0KCQkJCQk8aWQgcm9vdD0iZDQyZWJmNzAtNWM4OS0xMWRiLWIwZGUtMDgwMDIwMGM5YTY2Ii8+DQoJCQkJCTxjb2RlIGNvZGU9IkFTU0VSVElPTiIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNS40Ii8+CQkNCgkJCQkJPHN0YXR1c0NvZGUgY29kZT0iY29tcGxldGVkIi8+CQkJCQkJDQoJCQkJCTx2YWx1ZSB4c2k6dHlwZT0iQ0QiIGNvZGU9IjIyMjk4MDA2IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiBkaXNwbGF5TmFtZT0iTUkiLz4NCgkJCQkJPGVudHJ5UmVsYXRpb25zaGlwIHR5cGVDb2RlPSJDQVVTIj4NCgkJCQkJCTxvYnNlcnZhdGlvbiBjbGFzc0NvZGU9Ik9CUyIgbW9vZENvZGU9IkVWTiI+DQoJCQkJCQkJPGlkIHJvb3Q9IjY4OThmYWUwLTVjOGEtMTFkYi1iMGRlLTA4MDAyMDBjOWE2NiIvPg0KCQkJCQkJCTxjb2RlIGNvZGU9IkFTU0VSVElPTiIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNS40Ii8+DQoJCQkJCQkJPHN0YXR1c0NvZGUgY29kZT0iY29tcGxldGVkIi8+DQoJCQkJCQkJPHZhbHVlIHhzaTp0eXBlPSJDRCIgY29kZT0iNDE5MDk5MDA5IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiBkaXNwbGF5TmFtZT0iRGVhZCIvPg0KCQkJCQkJPC9vYnNlcnZhdGlvbj4NCgkJCQkJPC9lbnRyeVJlbGF0aW9uc2hpcD4NCgkJCQkJPGVudHJ5UmVsYXRpb25zaGlwIHR5cGVDb2RlPSJTVUJKIiBpbnZlcnNpb25JbmQ9InRydWUiPg0KCQkJCQkJPG9ic2VydmF0aW9uIGNsYXNzQ29kZT0iT0JTIiBtb29kQ29kZT0iRVZOIj4NCgkJCQkJCQk8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjM4Ii8+IDwhLS0gQWdlIG9ic2VydmF0aW9uIHRlbXBsYXRlIC0tPg0KCQkJCQkJCTxjb2RlIGNvZGU9IjM5NzY1OTAwOCIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi45NiIgZGlzcGxheU5hbWU9IkFnZSIvPg0KCQkJCQkJCTxzdGF0dXNDb2RlIGNvZGU9ImNvbXBsZXRlZCIvPg0KCQkJCQkJCTx2YWx1ZSB4c2k6dHlwZT0iSU5UIiB2YWx1ZT0iNTciLz4NCgkJCQkJCTwvb2JzZXJ2YXRpb24+DQoJCQkJCTwvZW50cnlSZWxhdGlvbnNoaXA+DQoJCQkJPC9vYnNlcnZhdGlvbj4NCgkJCTwvY29tcG9uZW50Pg0KCQkJPGNvbXBvbmVudD4NCgkJCQk8b2JzZXJ2YXRpb24gY2xhc3NDb2RlPSJPQlMiIG1vb2RDb2RlPSJFVk4iPg0KCQkJCQk8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjIyIi8+IDwhLS0gRmFtaWx5IGhpc3Rvcnkgb2JzZXJ2YXRpb24gdGVtcGxhdGUgLS0+DQoJCQkJCTxpZCByb290PSI1YmZlM2VjMC01YzhiLTExZGItYjBkZS0wODAwMjAwYzlhNjYiLz4NCgkJCQkJPGNvZGUgY29kZT0iQVNTRVJUSU9OIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My41LjQiLz4NCgkJCQkJPHN0YXR1c0NvZGUgY29kZT0iY29tcGxldGVkIi8+DQoJCQkJCTx2YWx1ZSB4c2k6dHlwZT0iQ0QiIGNvZGU9IjU5NjIxMDAwIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiBkaXNwbGF5TmFtZT0iSFROIi8+DQoJCQkJCTxlbnRyeVJlbGF0aW9uc2hpcCB0eXBlQ29kZT0iU1VCSiIgaW52ZXJzaW9uSW5kPSJ0cnVlIj4NCgkJCQkJCTxvYnNlcnZhdGlvbiBjbGFzc0NvZGU9Ik9CUyIgbW9vZENvZGU9IkVWTiI+DQoJCQkJCQkJPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS4zOCIvPiA8IS0tIEFnZSBvYnNlcnZhdGlvbiB0ZW1wbGF0ZSAtLT4NCgkJCQkJCQk8Y29kZSBjb2RlPSIzOTc2NTkwMDgiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuOTYiIGRpc3BsYXlOYW1lPSJBZ2UiLz4NCgkJCQkJCQk8c3RhdHVzQ29kZSBjb2RlPSJjb21wbGV0ZWQiLz4NCgkJCQkJCQk8dmFsdWUgeHNpOnR5cGU9IklOVCIgdmFsdWU9IjQwIi8+DQoJCQkJCQk8L29ic2VydmF0aW9uPg0KCQkJCQk8L2VudHJ5UmVsYXRpb25zaGlwPg0KCQkJCTwvb2JzZXJ2YXRpb24+DQoJCQk8L2NvbXBvbmVudD4NCgkJPC9vcmdhbml6ZXI+DQoJPC9lbnRyeT4NCgk8ZW50cnkgdHlwZUNvZGU9IkRSSVYiPg0KCQk8b3JnYW5pemVyIG1vb2RDb2RlPSJFVk4iIGNsYXNzQ29kZT0iQ0xVU1RFUiI+DQoJCQk8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjIzIi8+IDwhLS0gRmFtaWx5IGhpc3Rvcnkgb3JnYW5pemVyIHRlbXBsYXRlIC0tPg0KCQkJPHN0YXR1c0NvZGUgY29kZT0iY29tcGxldGVkIi8+DQoJCQk8c3ViamVjdD4NCgkJCQk8cmVsYXRlZFN1YmplY3QgY2xhc3NDb2RlPSJQUlMiPg0KCQkJCQk8Y29kZSBjb2RlPSI2NTY1NjAwNSIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi45NiIgZGlzcGxheU5hbWU9IkJpb2xvZ2ljYWwgbW90aGVyIi8+DQoJCQkJCTxzdWJqZWN0Pg0KCQkJCQkJPGFkbWluaXN0cmF0aXZlR2VuZGVyQ29kZSBjb2RlPSJGIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My41LjEiIGRpc3BsYXlOYW1lPSJGZW1hbGUiLz4NCgkJCQkJCTxiaXJ0aFRpbWUgdmFsdWU9IjE5MTIiLz4NCgkJCQkJPC9zdWJqZWN0Pg0KCQkJCTwvcmVsYXRlZFN1YmplY3Q+DQoJCQk8L3N1YmplY3Q+DQoJCQk8Y29tcG9uZW50Pg0KCQkJCTxvYnNlcnZhdGlvbiBjbGFzc0NvZGU9Ik9CUyIgbW9vZENvZGU9IkVWTiI+DQoJCQkJCTx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuMjIiLz4gPCEtLSBGYW1pbHkgaGlzdG9yeSBvYnNlcnZhdGlvbiB0ZW1wbGF0ZSAtLT4NCgkJCQkJPGlkIHJvb3Q9ImExM2M2MTYwLTVjOGItMTFkYi1iMGRlLTA4MDAyMDBjOWE2NiIvPg0KCQkJCQk8Y29kZSBjb2RlPSJBU1NFUlRJT04iIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjUuNCIvPgkJCQkJCQkJDQoJCQkJCTxzdGF0dXNDb2RlIGNvZGU9ImNvbXBsZXRlZCIvPg0KCQkJCQk8ZWZmZWN0aXZlVGltZT4NCgkJCQkJCTxsb3cgdmFsdWU9IjE5NDIiLz4NCgkJCQkJPC9lZmZlY3RpdmVUaW1lPg0KCQkJCQk8dmFsdWUgeHNpOnR5cGU9IkNEIiBjb2RlPSIxOTU5NjcwMDEiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuOTYiIGRpc3BsYXlOYW1lPSJBc3RobWEiLz4NCgkJCQk8L29ic2VydmF0aW9uPg0KCQkJPC9jb21wb25lbnQ+DQoJCTwvb3JnYW5pemVyPg0KCTwvZW50cnk+DQo8L3NlY3Rpb24+DQo8L2NvbXBvbmVudD4NCgkJCTwhLS0gDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KU29jaWFsIEhpc3Rvcnkgc2VjdGlvbg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0tPg0KPGNvbXBvbmVudD4NCjxzZWN0aW9uPg0KCTx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuMTUiLz4gPCEtLSBTb2NpYWwgaGlzdG9yeSBzZWN0aW9uIHRlbXBsYXRlIC0tPg0KCTxjb2RlIGNvZGU9IjI5NzYyLTIiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuMSIvPiANCgk8dGl0bGU+U29jaWFsIEhpc3Rvcnk8L3RpdGxlPiANCgk8dGV4dD4NCgkJPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiPg0KCQkJPHRoZWFkPg0KCQkJCTx0cj48dGg+U29jaWFsIEhpc3RvcnkgRWxlbWVudDwvdGg+PHRoPkRlc2NyaXB0aW9uPC90aD48dGg+RWZmZWN0aXZlIERhdGVzPC90aD48L3RyPg0KCQkJPC90aGVhZD4NCgkJCTx0Ym9keT4NCgkJCQk8dHI+PHRkPkNpZ2FyZXR0ZSBzbW9raW5nPC90ZD48dGQ+MSBwYWNrIHBlciBkYXk8L3RkPjx0ZD4xOTQ3IC0gMTk3MjwvdGQ+PC90cj4NCgkJCQk8dHI+PHRkPiI8L3RkPjx0ZD5Ob25lPC90ZD48dGQ+MTk3MyAtIDwvdGQ+PC90cj4NCgkJCQk8dHI+PHRkPkFsY29ob2wgY29uc3VtcHRpb248L3RkPjx0ZD5Ob25lPC90ZD48dGQ+MTk3MyAtIDwvdGQ+PC90cj4JCQkNCgkJCTwvdGJvZHk+DQoJCTwvdGFibGU+DQoJPC90ZXh0PgkNCgk8ZW50cnkgdHlwZUNvZGU9IkRSSVYiPg0KCQk8b2JzZXJ2YXRpb24gY2xhc3NDb2RlPSJPQlMiIG1vb2RDb2RlPSJFVk4iPg0KCQkJPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS4zMyIvPiA8IS0tIFNvY2lhbCBoaXN0b3J5IG9ic2VydmF0aW9uIHRlbXBsYXRlIC0tPg0KCQkJPGlkIHJvb3Q9IjliNTZjMjVkLTkxMDQtNDVlZS05ZmE0LWUwZjNhZmFhMDFjMSIvPg0KCQkJPGNvZGUgY29kZT0iMjMwMDU2MDA0IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiBkaXNwbGF5TmFtZT0iQ2lnYXJldHRlIHNtb2tpbmciLz4NCgkJCTxzdGF0dXNDb2RlIGNvZGU9ImNvbXBsZXRlZCIvPiANCgkJCTxlZmZlY3RpdmVUaW1lPjxsb3cgdmFsdWU9IjE5NDciLz48aGlnaCB2YWx1ZT0iMTk3MiIvPjwvZWZmZWN0aXZlVGltZT4NCgkJCTx2YWx1ZSB4c2k6dHlwZT0iU1QiPjEgcGFjayBwZXIgZGF5PC92YWx1ZT4NCgkJPC9vYnNlcnZhdGlvbj4NCgk8L2VudHJ5PgkNCgk8ZW50cnkgdHlwZUNvZGU9IkRSSVYiPg0KCQk8b2JzZXJ2YXRpb24gY2xhc3NDb2RlPSJPQlMiIG1vb2RDb2RlPSJFVk4iPg0KCQkJPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS4zMyIvPiA8IS0tIFNvY2lhbCBoaXN0b3J5IG9ic2VydmF0aW9uIHRlbXBsYXRlIC0tPg0KCQkJPGlkIHJvb3Q9IjQ1ZWZiNjA0LTcwNDktNGEyZS1hZDMzLWQzODU1NmM5NjM2YyIvPg0KCQkJPGNvZGUgY29kZT0iMjMwMDU2MDA0IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiBkaXNwbGF5TmFtZT0iQ2lnYXJldHRlIHNtb2tpbmciLz4NCgkJCTxzdGF0dXNDb2RlIGNvZGU9ImNvbXBsZXRlZCIvPiANCgkJCTxlZmZlY3RpdmVUaW1lPjxsb3cgdmFsdWU9IjE5NzMiLz48L2VmZmVjdGl2ZVRpbWU+DQoJCQk8dmFsdWUgeHNpOnR5cGU9IlNUIj5Ob25lPC92YWx1ZT4NCgkJCTxlbnRyeVJlbGF0aW9uc2hpcCB0eXBlQ29kZT0iU1VCSiIgaW52ZXJzaW9uSW5kPSJ0cnVlIj4NCgkJCQk8b2JzZXJ2YXRpb24gY2xhc3NDb2RlPSJPQlMiIG1vb2RDb2RlPSJFVk4iPg0KCQkJCQk8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjQxIi8+IDwhLS0gRXBpc29kZSBvYnNlcnZhdGlvbiB0ZW1wbGF0ZSAtLT4NCgkJCQkJPGNvZGUgY29kZT0iQVNTRVJUSU9OIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My41LjQiLz4NCgkJCQkJPHN0YXR1c0NvZGUgY29kZT0iY29tcGxldGVkIi8+DQoJCQkJCTx2YWx1ZSB4c2k6dHlwZT0iQ0QiIGNvZGU9IjQwNDY4NDAwMyIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi45NiIgZGlzcGxheU5hbWU9IkNsaW5pY2FsIGZpbmRpbmciPg0KCQkJCQkJPHF1YWxpZmllcj4NCgkJCQkJCQk8bmFtZSBjb2RlPSIyNDY0NTYwMDAiIGRpc3BsYXlOYW1lPSJFcGlzb2RpY2l0eSIvPg0KCQkJCQkJCTx2YWx1ZSBjb2RlPSIyODg1MjcwMDgiIGRpc3BsYXlOYW1lPSJOZXcgZXBpc29kZSIvPg0KCQkJCQkJPC9xdWFsaWZpZXI+DQoJCQkJCTwvdmFsdWU+DQoJCQkJCTxlbnRyeVJlbGF0aW9uc2hpcCB0eXBlQ29kZT0iU0FTIj4NCgkJCQkJCTxvYnNlcnZhdGlvbiBjbGFzc0NvZGU9Ik9CUyIgbW9vZENvZGU9IkVWTiI+DQoJCQkJCQkJPGlkIHJvb3Q9IjliNTZjMjVkLTkxMDQtNDVlZS05ZmE0LWUwZjNhZmFhMDFjMSIvPg0KCQkJCQkJCTxjb2RlIGNvZGU9IjIzMDA1NjAwNCIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi45NiIgZGlzcGxheU5hbWU9IkNpZ2FyZXR0ZSBzbW9raW5nIi8+DQoJCQkJCQk8L29ic2VydmF0aW9uPg0KCQkJCQk8L2VudHJ5UmVsYXRpb25zaGlwPg0KCQkJCTwvb2JzZXJ2YXRpb24+DQoJCQk8L2VudHJ5UmVsYXRpb25zaGlwPg0KCQk8L29ic2VydmF0aW9uPg0KCTwvZW50cnk+CQ0KCTxlbnRyeSB0eXBlQ29kZT0iRFJJViI+DQoJCTxvYnNlcnZhdGlvbiBjbGFzc0NvZGU9Ik9CUyIgbW9vZENvZGU9IkVWTiI+DQoJCQk8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjMzIi8+IDwhLS0gU29jaWFsIGhpc3Rvcnkgb2JzZXJ2YXRpb24gdGVtcGxhdGUgLS0+DQoJCQk8aWQgcm9vdD0iMzdmNzZjNTEtNjQxMS00ZTFkLThhMzctOTU3ZmQ0OWQyY2VmIi8+DQoJCQk8Y29kZSBjb2RlPSIxNjA1NzMwMDMiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuOTYiIGRpc3BsYXlOYW1lPSJBbGNvaG9sIGNvbnN1bXB0aW9uIi8+DQoJCQk8c3RhdHVzQ29kZSBjb2RlPSJjb21wbGV0ZWQiLz4gDQoJCQk8ZWZmZWN0aXZlVGltZT48bG93IHZhbHVlPSIxOTczIi8+PC9lZmZlY3RpdmVUaW1lPg0KCQkJPHZhbHVlIHhzaTp0eXBlPSJTVCI+Tm9uZTwvdmFsdWU+DQoJCTwvb2JzZXJ2YXRpb24+DQoJPC9lbnRyeT4JDQo8L3NlY3Rpb24+DQo8L2NvbXBvbmVudD4NCgkJCTwhLS0gDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KQWxlcnRzIHNlY3Rpb24NCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotLT4NCjxjb21wb25lbnQ+DQo8c2VjdGlvbj4NCgk8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjIiLz4gPCEtLSBBbGVydHMgc2VjdGlvbiB0ZW1wbGF0ZSAtLT4NCgk8Y29kZSBjb2RlPSI0ODc2NS0yIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42LjEiLz4NCgk8dGl0bGU+QWxsZXJnaWVzLCBBZHZlcnNlIFJlYWN0aW9ucywgQWxlcnRzPC90aXRsZT4NCgk8dGV4dD4NCgkJPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiPg0KCQkJPHRoZWFkPg0KCQkJCTx0cj48dGg+U3Vic3RhbmNlPC90aD48dGg+UmVhY3Rpb248L3RoPjx0aD5TdGF0dXM8L3RoPjwvdHI+DQoJCQk8L3RoZWFkPg0KCQkJPHRib2R5Pg0KCQkJCTx0cj48dGQ+UGVuaWNpbGxpbjwvdGQ+PHRkPkhpdmVzPC90ZD48dGQ+QWN0aXZlPC90ZD48L3RyPg0KCQkJCTx0cj48dGQ+QXNwaXJpbjwvdGQ+PHRkPldoZWV6aW5nPC90ZD48dGQ+QWN0aXZlPC90ZD48L3RyPg0KCQkJCTx0cj48dGQ+Q29kZWluZTwvdGQ+PHRkPk5hdXNlYTwvdGQ+PHRkPkFjdGl2ZTwvdGQ+PC90cj4NCgkJCTwvdGJvZHk+DQoJCTwvdGFibGU+DQoJPC90ZXh0PgkNCgk8ZW50cnkgdHlwZUNvZGU9IkRSSVYiPg0KCQk8YWN0IGNsYXNzQ29kZT0iQUNUIiBtb29kQ29kZT0iRVZOIj4NCgkJCTx0ZW1wbGF0ZUlkIHJvb3Q9JzIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuMjcnLz4gPCEtLSBQcm9ibGVtIGFjdCB0ZW1wbGF0ZSAtLT4NCgkJCTxpZCByb290PSIzNmUzZTkzMC03YjE0LTExZGItOWZlMS0wODAwMjAwYzlhNjYiLz4NCgkJCTxjb2RlIG51bGxGbGF2b3I9Ik5BIi8+DQoJCQk8ZW50cnlSZWxhdGlvbnNoaXAgdHlwZUNvZGU9IlNVQkoiPg0KCQkJCTxvYnNlcnZhdGlvbiBjbGFzc0NvZGU9Ik9CUyIgbW9vZENvZGU9IkVWTiI+DQoJCQkJCTx0ZW1wbGF0ZUlkIHJvb3Q9JzIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuMTgnLz4gPCEtLSBBbGVydCBvYnNlcnZhdGlvbiB0ZW1wbGF0ZSAtLT4NCgkJCQkJPGlkIHJvb3Q9IjRhZGMxMDIwLTdiMTQtMTFkYi05ZmUxLTA4MDAyMDBjOWE2NiIvPg0KCQkJCQk8Y29kZSBjb2RlPSJBU1NFUlRJT04iIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjUuNCIvPgkJCQkJDQoJCQkJCTxzdGF0dXNDb2RlIGNvZGU9ImNvbXBsZXRlZCIvPiANCgkJCQkJPHZhbHVlIHhzaTp0eXBlPSJDRCIgY29kZT0iMjgyMTAwMDA5IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiBkaXNwbGF5TmFtZT0iQWR2ZXJzZSByZWFjdGlvbiB0byBzdWJzdGFuY2UiLz4NCgkJCQkJPHBhcnRpY2lwYW50IHR5cGVDb2RlPSJDU00iPg0KCQkJCQkJPHBhcnRpY2lwYW50Um9sZSBjbGFzc0NvZGU9Ik1BTlUiPg0KCQkJCQkJCTxwbGF5aW5nRW50aXR5IGNsYXNzQ29kZT0iTU1BVCI+DQoJCQkJCQkJCTxjb2RlIGNvZGU9IjcwNjE4IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljg4IiAgZGlzcGxheU5hbWU9IlBlbmljaWxsaW4iLz4NCgkJCQkJCQk8L3BsYXlpbmdFbnRpdHk+DQoJCQkJCQk8L3BhcnRpY2lwYW50Um9sZT4NCgkJCQkJPC9wYXJ0aWNpcGFudD4NCgkJCQkJPGVudHJ5UmVsYXRpb25zaGlwIHR5cGVDb2RlPSJNRlNUIiBpbnZlcnNpb25JbmQ9InRydWUiPg0KCQkJCQkJPG9ic2VydmF0aW9uIGNsYXNzQ29kZT0iT0JTIiBtb29kQ29kZT0iRVZOIj4NCgkJCQkJCQk8dGVtcGxhdGVJZCByb290PScyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjU0Jy8+IDwhLS0gUmVhY3Rpb24gb2JzZXJ2YXRpb24gdGVtcGxhdGUgLS0+DQoJCQkJCQkJPGNvZGUgY29kZT0iQVNTRVJUSU9OIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My41LjQiLz4NCgkJCQkJCQk8c3RhdHVzQ29kZSBjb2RlPSJjb21wbGV0ZWQiLz4NCgkJCQkJCQk8dmFsdWUgeHNpOnR5cGU9IkNEIiBjb2RlPSIyNDc0NzIwMDQiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuOTYiIGRpc3BsYXlOYW1lPSJIaXZlcyIvPg0KCQkJCQkJPC9vYnNlcnZhdGlvbj4NCgkJCQkJPC9lbnRyeVJlbGF0aW9uc2hpcD4NCgkJCQkJPGVudHJ5UmVsYXRpb25zaGlwIHR5cGVDb2RlPSJSRUZSIj4NCgkJCQkJCTxvYnNlcnZhdGlvbiBjbGFzc0NvZGU9Ik9CUyIgbW9vZENvZGU9IkVWTiI+DQoJCQkJCQkJPHRlbXBsYXRlSWQgcm9vdD0nMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS4zOScvPiA8IS0tIEFsZXJ0IHN0YXR1cyBvYnNlcnZhdGlvbiB0ZW1wbGF0ZSAtLT4NCgkJCQkJCQk8Y29kZSBjb2RlPSIzMzk5OS00IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42LjEiIGRpc3BsYXlOYW1lPSJTdGF0dXMiLz4NCgkJCQkJCQk8c3RhdHVzQ29kZSBjb2RlPSJjb21wbGV0ZWQiLz4NCgkJCQkJCQk8dmFsdWUgeHNpOnR5cGU9IkNFIiBjb2RlPSI1NTU2MTAwMyIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi45NiIgZGlzcGxheU5hbWU9IkFjdGl2ZSIvPg0KCQkJCQkJPC9vYnNlcnZhdGlvbj4NCgkJCQkJPC9lbnRyeVJlbGF0aW9uc2hpcD4NCgkJCQk8L29ic2VydmF0aW9uPg0KCQkJPC9lbnRyeVJlbGF0aW9uc2hpcD4NCgkJPC9hY3Q+CQ0KCTwvZW50cnk+DQoJPGVudHJ5IHR5cGVDb2RlPSJEUklWIj4NCgkJPGFjdCBjbGFzc0NvZGU9IkFDVCIgbW9vZENvZGU9IkVWTiI+DQoJCQk8dGVtcGxhdGVJZCByb290PScyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjI3Jy8+IDwhLS0gUHJvYmxlbSBhY3QgdGVtcGxhdGUgLS0+DQoJCQk8aWQgcm9vdD0iZWI5MzYwMTAtN2IxNy0xMWRiLTlmZTEtMDgwMDIwMGM5YTY2Ii8+DQoJCQk8Y29kZSBudWxsRmxhdm9yPSJOQSIvPg0KCQkJPGVudHJ5UmVsYXRpb25zaGlwIHR5cGVDb2RlPSJTVUJKIj4NCgkJCQk8b2JzZXJ2YXRpb24gY2xhc3NDb2RlPSJPQlMiIG1vb2RDb2RlPSJFVk4iPg0KCQkJCQk8dGVtcGxhdGVJZCByb290PScyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjE4Jy8+IDwhLS0gQWxlcnQgb2JzZXJ2YXRpb24gdGVtcGxhdGUgLS0+DQoJCQkJCTxpZCByb290PSJlYjkzNjAxMS03YjE3LTExZGItOWZlMS0wODAwMjAwYzlhNjYiLz4NCgkJCQkJPGNvZGUgY29kZT0iQVNTRVJUSU9OIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My41LjQiLz4JCQkJCQ0KCQkJCQk8c3RhdHVzQ29kZSBjb2RlPSJjb21wbGV0ZWQiLz4gDQoJCQkJCTx2YWx1ZSB4c2k6dHlwZT0iQ0QiIGNvZGU9IjI4MjEwMDAwOSIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi45NiIgZGlzcGxheU5hbWU9IkFkdmVyc2UgcmVhY3Rpb24gdG8gc3Vic3RhbmNlIi8+DQoJCQkJCTxwYXJ0aWNpcGFudCB0eXBlQ29kZT0iQ1NNIj4NCgkJCQkJCTxwYXJ0aWNpcGFudFJvbGUgY2xhc3NDb2RlPSJNQU5VIj4NCgkJCQkJCQk8cGxheWluZ0VudGl0eSBjbGFzc0NvZGU9Ik1NQVQiPg0KCQkJCQkJCQk8Y29kZSBjb2RlPSIxMTkxIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljg4IiAgZGlzcGxheU5hbWU9IkFzcGlyaW4iLz4NCgkJCQkJCQk8L3BsYXlpbmdFbnRpdHk+DQoJCQkJCQk8L3BhcnRpY2lwYW50Um9sZT4NCgkJCQkJPC9wYXJ0aWNpcGFudD4NCgkJCQkJPGVudHJ5UmVsYXRpb25zaGlwIHR5cGVDb2RlPSJNRlNUIiBpbnZlcnNpb25JbmQ9InRydWUiPg0KCQkJCQkJPG9ic2VydmF0aW9uIGNsYXNzQ29kZT0iT0JTIiBtb29kQ29kZT0iRVZOIj4NCgkJCQkJCQk8dGVtcGxhdGVJZCByb290PScyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjU0Jy8+IDwhLS0gUmVhY3Rpb24gb2JzZXJ2YXRpb24gdGVtcGxhdGUgLS0+DQoJCQkJCQkJPGNvZGUgY29kZT0iQVNTRVJUSU9OIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My41LjQiLz4NCgkJCQkJCQk8c3RhdHVzQ29kZSBjb2RlPSJjb21wbGV0ZWQiLz4NCgkJCQkJCQk8dmFsdWUgeHNpOnR5cGU9IkNEIiBjb2RlPSI1NjAxODAwNCIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi45NiIgZGlzcGxheU5hbWU9IldoZWV6aW5nIi8+DQoJCQkJCQk8L29ic2VydmF0aW9uPg0KCQkJCQk8L2VudHJ5UmVsYXRpb25zaGlwPg0KCQkJCQk8ZW50cnlSZWxhdGlvbnNoaXAgdHlwZUNvZGU9IlJFRlIiPg0KCQkJCQkJPG9ic2VydmF0aW9uIGNsYXNzQ29kZT0iT0JTIiBtb29kQ29kZT0iRVZOIj4NCgkJCQkJCQk8dGVtcGxhdGVJZCByb290PScyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjM5Jy8+IDwhLS0gQWxlcnQgc3RhdHVzIG9ic2VydmF0aW9uIHRlbXBsYXRlIC0tPg0KCQkJCQkJCTxjb2RlIGNvZGU9IjMzOTk5LTQiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuMSIgZGlzcGxheU5hbWU9IlN0YXR1cyIvPg0KCQkJCQkJCTxzdGF0dXNDb2RlIGNvZGU9ImNvbXBsZXRlZCIvPg0KCQkJCQkJCTx2YWx1ZSB4c2k6dHlwZT0iQ0UiIGNvZGU9IjU1NTYxMDAzIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiBkaXNwbGF5TmFtZT0iQWN0aXZlIi8+DQoJCQkJCQk8L29ic2VydmF0aW9uPg0KCQkJCQk8L2VudHJ5UmVsYXRpb25zaGlwPg0KCQkJCTwvb2JzZXJ2YXRpb24+DQoJCQk8L2VudHJ5UmVsYXRpb25zaGlwPg0KCQk8L2FjdD4JDQoJPC9lbnRyeT4NCgk8ZW50cnkgdHlwZUNvZGU9IkRSSVYiPg0KCQk8YWN0IGNsYXNzQ29kZT0iQUNUIiBtb29kQ29kZT0iRVZOIj4NCgkJCTx0ZW1wbGF0ZUlkIHJvb3Q9JzIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuMjcnLz4gPCEtLSBQcm9ibGVtIGFjdCB0ZW1wbGF0ZSAtLT4NCgkJCTxpZCByb290PSJjM2RmM2I2MS03YjE4LTExZGItOWZlMS0wODAwMjAwYzlhNjYiLz4NCgkJCTxjb2RlIG51bGxGbGF2b3I9Ik5BIi8+DQoJCQk8ZW50cnlSZWxhdGlvbnNoaXAgdHlwZUNvZGU9IlNVQkoiPg0KCQkJCTxvYnNlcnZhdGlvbiBjbGFzc0NvZGU9Ik9CUyIgbW9vZENvZGU9IkVWTiI+DQoJCQkJCTx0ZW1wbGF0ZUlkIHJvb3Q9JzIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuMTgnLz4gPCEtLSBBbGVydCBvYnNlcnZhdGlvbiB0ZW1wbGF0ZSAtLT4NCgkJCQkJPGlkIHJvb3Q9ImMzZGYzYjYwLTdiMTgtMTFkYi05ZmUxLTA4MDAyMDBjOWE2NiIvPg0KCQkJCQk8Y29kZSBjb2RlPSJBU1NFUlRJT04iIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjUuNCIvPgkJCQkJDQoJCQkJCTxzdGF0dXNDb2RlIGNvZGU9ImNvbXBsZXRlZCIvPiANCgkJCQkJPHZhbHVlIHhzaTp0eXBlPSJDRCIgY29kZT0iMjgyMTAwMDA5IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiBkaXNwbGF5TmFtZT0iQWR2ZXJzZSByZWFjdGlvbiB0byBzdWJzdGFuY2UiLz4NCgkJCQkJPHBhcnRpY2lwYW50IHR5cGVDb2RlPSJDU00iPg0KCQkJCQkJPHBhcnRpY2lwYW50Um9sZSBjbGFzc0NvZGU9Ik1BTlUiPg0KCQkJCQkJCTxwbGF5aW5nRW50aXR5IGNsYXNzQ29kZT0iTU1BVCI+DQoJCQkJCQkJCTxjb2RlIGNvZGU9IjI2NzAiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuODgiICBkaXNwbGF5TmFtZT0iQ29kZWluZSIvPg0KCQkJCQkJCTwvcGxheWluZ0VudGl0eT4NCgkJCQkJCTwvcGFydGljaXBhbnRSb2xlPg0KCQkJCQk8L3BhcnRpY2lwYW50Pg0KCQkJCQk8ZW50cnlSZWxhdGlvbnNoaXAgdHlwZUNvZGU9Ik1GU1QiIGludmVyc2lvbkluZD0idHJ1ZSI+DQoJCQkJCQk8b2JzZXJ2YXRpb24gY2xhc3NDb2RlPSJPQlMiIG1vb2RDb2RlPSJFVk4iPg0KCQkJCQkJCTx0ZW1wbGF0ZUlkIHJvb3Q9JzIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuNTQnLz4gPCEtLSBSZWFjdGlvbiBvYnNlcnZhdGlvbiB0ZW1wbGF0ZSAtLT4NCgkJCQkJCQk8Y29kZSBjb2RlPSJBU1NFUlRJT04iIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjUuNCIvPg0KCQkJCQkJCTxzdGF0dXNDb2RlIGNvZGU9ImNvbXBsZXRlZCIvPg0KCQkJCQkJCTx2YWx1ZSB4c2k6dHlwZT0iQ0QiIGNvZGU9IjczODc5MDA3IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiBkaXNwbGF5TmFtZT0iTmF1c2VhIi8+DQoJCQkJCQk8L29ic2VydmF0aW9uPg0KCQkJCQk8L2VudHJ5UmVsYXRpb25zaGlwPg0KCQkJCQk8ZW50cnlSZWxhdGlvbnNoaXAgdHlwZUNvZGU9IlJFRlIiPg0KCQkJCQkJPG9ic2VydmF0aW9uIGNsYXNzQ29kZT0iT0JTIiBtb29kQ29kZT0iRVZOIj4NCgkJCQkJCQk8dGVtcGxhdGVJZCByb290PScyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjM5Jy8+IDwhLS0gQWxlcnQgc3RhdHVzIG9ic2VydmF0aW9uIHRlbXBsYXRlIC0tPg0KCQkJCQkJCTxjb2RlIGNvZGU9IjMzOTk5LTQiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuMSIgZGlzcGxheU5hbWU9IlN0YXR1cyIvPg0KCQkJCQkJCTxzdGF0dXNDb2RlIGNvZGU9ImNvbXBsZXRlZCIvPg0KCQkJCQkJCTx2YWx1ZSB4c2k6dHlwZT0iQ0UiIGNvZGU9IjU1NTYxMDAzIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiBkaXNwbGF5TmFtZT0iQWN0aXZlIi8+DQoJCQkJCQk8L29ic2VydmF0aW9uPg0KCQkJCQk8L2VudHJ5UmVsYXRpb25zaGlwPg0KCQkJCTwvb2JzZXJ2YXRpb24+DQoJCQk8L2VudHJ5UmVsYXRpb25zaGlwPg0KCQk8L2FjdD4JDQoJPC9lbnRyeT4NCjwvc2VjdGlvbj4NCjwvY29tcG9uZW50Pg0KCQkJPCEtLSANCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQpNZWRpY2F0aW9ucyBzZWN0aW9uDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLS0+DQo8Y29tcG9uZW50Pg0KPHNlY3Rpb24+DQoJPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS44Ii8+IDwhLS0gTWVkaWNhdGlvbnMgc2VjdGlvbiB0ZW1wbGF0ZSAtLT4NCgk8Y29kZSBjb2RlPSIxMDE2MC0wIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42LjEiLz4NCgk8dGl0bGU+TWVkaWNhdGlvbnM8L3RpdGxlPg0KCTx0ZXh0Pg0KCQk8dGFibGUgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSI+DQoJCQk8dGhlYWQ+DQoJCQkJPHRyPjx0aD5NZWRpY2F0aW9uPC90aD48dGg+SW5zdHJ1Y3Rpb25zPC90aD48dGg+U3RhcnQgRGF0ZTwvdGg+PHRoPlN0YXR1czwvdGg+PC90cj4NCgkJCTwvdGhlYWQ+DQoJCQk8dGJvZHk+DQoJCQkJPHRyPjx0ZD5BbGJ1dGVyb2wgaW5oYWxhbnQ8L3RkPjx0ZD4yIHB1ZmZzIFFJRCBQUk4gd2hlZXppbmc8L3RkPjx0ZD4mIzE2MDs8L3RkPjx0ZD5BY3RpdmU8L3RkPjwvdHI+DQoJCQkJPHRyPjx0ZD5DbG9waWRvZ3JlbCAoUGxhdml4KTwvdGQ+PHRkPjc1bWcgUE8gZGFpbHk8L3RkPjx0ZD4mIzE2MDs8L3RkPjx0ZD5BY3RpdmU8L3RkPjwvdHI+DQoJCQkJPHRyPjx0ZD5NZXRvcHJvbG9sPC90ZD48dGQ+MjVtZyBQTyBCSUQ8L3RkPjx0ZD4mIzE2MDs8L3RkPjx0ZD5BY3RpdmU8L3RkPjwvdHI+DQoJCQkJPHRyPjx0ZD5QcmVkbmlzb25lPC90ZD48dGQ+MjBtZyBQTyBkYWlseTwvdGQ+PHRkPk1hciAyOCwgMjAwMDwvdGQ+PHRkPkFjdGl2ZTwvdGQ+PC90cj4NCgkJCQk8dHI+PHRkPkNlcGhhbGV4aW4gKEtlZmxleCk8L3RkPjx0ZD41MDBtZyBQTyBRSUQgeCA3IGRheXMgKGZvciBicm9uY2hpdGlzKTwvdGQ+PHRkPk1hciAyOCwgMjAwMDwvdGQ+PHRkPk5vIGxvbmdlciBhY3RpdmU8L3RkPjwvdHI+DQoJCQk8L3Rib2R5Pg0KCQk8L3RhYmxlPg0KCTwvdGV4dD4NCgkJPGluZm9ybWFudD4NCgkJPGFzc2lnbmVkRW50aXR5Pg0KCQkJPGlkIGV4dGVuc2lvbj0iOTk2LTc1Ni00OTUiIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjE5LjUiLz4NCgkJCTxyZXByZXNlbnRlZE9yZ2FuaXphdGlvbj4NCgkJCQk8aWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTkuNSIvPg0KCQkJCTxuYW1lPkdvb2QgSGVhbHRoIENsaW5pYzwvbmFtZT4NCgkJCTwvcmVwcmVzZW50ZWRPcmdhbml6YXRpb24+DQoJCTwvYXNzaWduZWRFbnRpdHk+DQoJPC9pbmZvcm1hbnQ+DQoJPGVudHJ5IHR5cGVDb2RlPSJEUklWIj4NCgkJPHN1YnN0YW5jZUFkbWluaXN0cmF0aW9uIGNsYXNzQ29kZT0iU0JBRE0iIG1vb2RDb2RlPSJFVk4iPg0KCQkJPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS4yNCIvPiA8IS0tIE1lZGljYXRpb24gYWN0aXZpdHkgdGVtcGxhdGUgLS0+DQoJCQk8aWQgcm9vdD0iY2RiZDMzZjAtNmNkZS0xMWRiLTlmZTEtMDgwMDIwMGM5YTY2Ii8+DQoJCQk8c3RhdHVzQ29kZSBjb2RlPSJhY3RpdmUiLz4NCgkJCTxlZmZlY3RpdmVUaW1lIHhzaTp0eXBlPSJQSVZMX1RTIj4NCgkJCQk8cGVyaW9kIHZhbHVlPSI2IiB1bml0PSJoIi8+DQoJCQk8L2VmZmVjdGl2ZVRpbWU+DQoJCQk8cm91dGVDb2RlIGNvZGU9IklQSU5ITCIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNS4xMTIiIGNvZGVTeXN0ZW1OYW1lPSJSb3V0ZU9mQWRtaW5pc3RyYXRpb24iIGRpc3BsYXlOYW1lPSJJbmhhbGF0aW9uLCBvcmFsIi8+DQoJCQk8ZG9zZVF1YW50aXR5IHZhbHVlPSIyIi8+DQoJCQk8YWRtaW5pc3RyYXRpb25Vbml0Q29kZSBjb2RlPSI0MTUyMTUwMDEiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuOTYiIGRpc3BsYXlOYW1lPSJQdWZmIi8+DQoJCQk8Y29uc3VtYWJsZT4NCgkJCQk8bWFudWZhY3R1cmVkUHJvZHVjdD4NCgkJCQkJPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS41MyIvPiA8IS0tIFByb2R1Y3QgdGVtcGxhdGUgLS0+DQoJCQkJCTxtYW51ZmFjdHVyZWRNYXRlcmlhbD4NCgkJCQkJCTxjb2RlIGNvZGU9IjMwNzc4MiIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi44OCIgIGRpc3BsYXlOYW1lPSJBbGJ1dGVyb2wgMC4wOSBNRy9BQ1RVQVQgaW5oYWxhbnQgc29sdXRpb24iPg0KCQkJCQkJCTxvcmlnaW5hbFRleHQ+QWxidXRlcm9sIGluaGFsYW50PC9vcmlnaW5hbFRleHQ+DQoJCQkJCQk8L2NvZGU+DQoJCQkJCTwvbWFudWZhY3R1cmVkTWF0ZXJpYWw+DQoJCQkJPC9tYW51ZmFjdHVyZWRQcm9kdWN0Pg0KCQkJPC9jb25zdW1hYmxlPg0KCQkJPHByZWNvbmRpdGlvbiB0eXBlQ29kZT0iUFJDTiI+DQoJCQkJPGNyaXRlcmlvbj4NCgkJCQkJPGNvZGUgY29kZT0iQVNTRVJUSU9OIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My41LjQiLz4NCgkJCQkJPHZhbHVlIHhzaTp0eXBlPSJDRSIgY29kZT0iNTYwMTgwMDQiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuOTYiICBkaXNwbGF5TmFtZT0iV2hlZXppbmciLz4NCgkJCQk8L2NyaXRlcmlvbj4NCgkJCTwvcHJlY29uZGl0aW9uPg0KCQk8L3N1YnN0YW5jZUFkbWluaXN0cmF0aW9uPg0KCTwvZW50cnk+DQoJPGVudHJ5IHR5cGVDb2RlPSJEUklWIj4NCgkJPHN1YnN0YW5jZUFkbWluaXN0cmF0aW9uIGNsYXNzQ29kZT0iU0JBRE0iIG1vb2RDb2RlPSJFVk4iPg0KCQkJPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS4yNCIvPiA8IS0tIE1lZGljYXRpb24gYWN0aXZpdHkgdGVtcGxhdGUgLS0+DQoJCQk8aWQgcm9vdD0iY2RiZDViMDUtNmNkZS0xMWRiLTlmZTEtMDgwMDIwMGM5YTY2Ii8+DQoJCQk8c3RhdHVzQ29kZSBjb2RlPSJhY3RpdmUiLz4NCgkJCTxlZmZlY3RpdmVUaW1lIHhzaTp0eXBlPSJQSVZMX1RTIj4NCgkJCQk8cGVyaW9kIHZhbHVlPSIyNCIgdW5pdD0iaCIvPg0KCQkJPC9lZmZlY3RpdmVUaW1lPg0KCQkJPHJvdXRlQ29kZSBjb2RlPSJQTyIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNS4xMTIiIGNvZGVTeXN0ZW1OYW1lPSJSb3V0ZU9mQWRtaW5pc3RyYXRpb24iLz4NCgkJCTxkb3NlUXVhbnRpdHkgdmFsdWU9IjEiLz4NCgkJCTxjb25zdW1hYmxlPg0KCQkJCTxtYW51ZmFjdHVyZWRQcm9kdWN0Pg0KCQkJCQk8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjUzIi8+IDwhLS0gUHJvZHVjdCB0ZW1wbGF0ZSAtLT4NCgkJCQkJPG1hbnVmYWN0dXJlZE1hdGVyaWFsPg0KCQkJCQkJPGNvZGUgY29kZT0iMzA5MzYyIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljg4IiAgZGlzcGxheU5hbWU9IkNsb3BpZG9ncmVsIDc1IE1HIG9yYWwgdGFibGV0Ij4NCgkJCQkJCQk8b3JpZ2luYWxUZXh0PkNsb3BpZG9ncmVsPC9vcmlnaW5hbFRleHQ+DQoJCQkJCQk8L2NvZGU+DQoJCQkJCQk8bmFtZT5QbGF2aXg8L25hbWU+DQoJCQkJCTwvbWFudWZhY3R1cmVkTWF0ZXJpYWw+DQoJCQkJPC9tYW51ZmFjdHVyZWRQcm9kdWN0Pg0KCQkJPC9jb25zdW1hYmxlPg0KCQk8L3N1YnN0YW5jZUFkbWluaXN0cmF0aW9uPg0KCTwvZW50cnk+DQoJPGVudHJ5IHR5cGVDb2RlPSJEUklWIj4NCgkJPHN1YnN0YW5jZUFkbWluaXN0cmF0aW9uIGNsYXNzQ29kZT0iU0JBRE0iIG1vb2RDb2RlPSJFVk4iPg0KCQkJPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS4yNCIvPiA8IS0tIE1lZGljYXRpb24gYWN0aXZpdHkgdGVtcGxhdGUgLS0+DQoJCQk8aWQgcm9vdD0iY2RiZDViMDEtNmNkZS0xMWRiLTlmZTEtMDgwMDIwMGM5YTY2Ii8+DQoJCQk8c3RhdHVzQ29kZSBjb2RlPSJhY3RpdmUiLz4NCgkJCTxlZmZlY3RpdmVUaW1lIHhzaTp0eXBlPSJQSVZMX1RTIj4NCgkJCQk8cGVyaW9kIHZhbHVlPSIxMiIgdW5pdD0iaCIvPg0KCQkJPC9lZmZlY3RpdmVUaW1lPg0KCQkJPHJvdXRlQ29kZSBjb2RlPSJQTyIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNS4xMTIiIGNvZGVTeXN0ZW1OYW1lPSJSb3V0ZU9mQWRtaW5pc3RyYXRpb24iLz4NCgkJCTxkb3NlUXVhbnRpdHkgdmFsdWU9IjEiLz4NCgkJCTxjb25zdW1hYmxlPg0KCQkJCTxtYW51ZmFjdHVyZWRQcm9kdWN0Pg0KCQkJCQk8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjUzIi8+IDwhLS0gUHJvZHVjdCB0ZW1wbGF0ZSAtLT4NCgkJCQkJPG1hbnVmYWN0dXJlZE1hdGVyaWFsPg0KCQkJCQkJPGNvZGUgY29kZT0iNDMwNjE4IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljg4IiAgZGlzcGxheU5hbWU9Ik1ldG9wcm9sb2wgMjUgTUcgb3JhbCB0YWJsZXQiPg0KCQkJCQkJCTxvcmlnaW5hbFRleHQ+TWV0b3Byb2xvbDwvb3JpZ2luYWxUZXh0Pg0KCQkJCQkJPC9jb2RlPg0KCQkJCQk8L21hbnVmYWN0dXJlZE1hdGVyaWFsPg0KCQkJCTwvbWFudWZhY3R1cmVkUHJvZHVjdD4NCgkJCTwvY29uc3VtYWJsZT4NCgkJPC9zdWJzdGFuY2VBZG1pbmlzdHJhdGlvbj4NCgk8L2VudHJ5PgkJCQkNCgk8ZW50cnkgdHlwZUNvZGU9IkRSSVYiPg0KCQk8c3Vic3RhbmNlQWRtaW5pc3RyYXRpb24gY2xhc3NDb2RlPSJTQkFETSIgbW9vZENvZGU9IkVWTiI+DQoJCQk8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjI0Ii8+IDwhLS0gTWVkaWNhdGlvbiBhY3Rpdml0eSB0ZW1wbGF0ZSAtLT4NCgkJCTxpZCByb290PSJjZGJkNWIwMy02Y2RlLTExZGItOWZlMS0wODAwMjAwYzlhNjYiLz4NCgkJCTxzdGF0dXNDb2RlIGNvZGU9ImFjdGl2ZSIvPg0KCQkJPGVmZmVjdGl2ZVRpbWUgeHNpOnR5cGU9IklWTF9UUyI+DQoJCQkJPGxvdyB2YWx1ZT0iMjAwMDAzMjgiLz4NCgkJCTwvZWZmZWN0aXZlVGltZT4NCgkJCTxlZmZlY3RpdmVUaW1lIHhzaTp0eXBlPSJQSVZMX1RTIiBvcGVyYXRvcj0iQSI+DQoJCQkJPHBlcmlvZCB2YWx1ZT0iMjQiIHVuaXQ9ImgiLz4NCgkJCTwvZWZmZWN0aXZlVGltZT4NCgkJCTxyb3V0ZUNvZGUgY29kZT0iUE8iIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjUuMTEyIiBjb2RlU3lzdGVtTmFtZT0iUm91dGVPZkFkbWluaXN0cmF0aW9uIi8+DQoJCQk8ZG9zZVF1YW50aXR5IHZhbHVlPSIxIi8+DQoJCQk8Y29uc3VtYWJsZT4NCgkJCQk8bWFudWZhY3R1cmVkUHJvZHVjdD4NCgkJCQkJPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS41MyIvPiA8IS0tIFByb2R1Y3QgdGVtcGxhdGUgLS0+DQoJCQkJCTxtYW51ZmFjdHVyZWRNYXRlcmlhbD4NCgkJCQkJCTxjb2RlIGNvZGU9IjMxMjYxNSIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi44OCIgIGRpc3BsYXlOYW1lPSJQcmVkbmlzb25lIDIwIE1HIG9yYWwgdGFibGV0Ij4NCgkJCQkJCQk8b3JpZ2luYWxUZXh0PlByZWRuaXNvbmU8L29yaWdpbmFsVGV4dD4NCgkJCQkJCTwvY29kZT4NCgkJCQkJPC9tYW51ZmFjdHVyZWRNYXRlcmlhbD4NCgkJCQk8L21hbnVmYWN0dXJlZFByb2R1Y3Q+DQoJCQk8L2NvbnN1bWFibGU+DQoJCTwvc3Vic3RhbmNlQWRtaW5pc3RyYXRpb24+DQoJPC9lbnRyeT4NCgk8ZW50cnkgdHlwZUNvZGU9IkRSSVYiPg0KCQk8c3Vic3RhbmNlQWRtaW5pc3RyYXRpb24gY2xhc3NDb2RlPSJTQkFETSIgbW9vZENvZGU9IkVWTiI+DQoJCQk8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjI0Ii8+IDwhLS0gTWVkaWNhdGlvbiBhY3Rpdml0eSB0ZW1wbGF0ZSAtLT4NCgkJCTxpZCByb290PSJjZGJkNWIwNy02Y2RlLTExZGItOWZlMS0wODAwMjAwYzlhNjYiLz4NCgkJCTxzdGF0dXNDb2RlIGNvZGU9ImNvbXBsZXRlZCIvPg0KCQkJPGVmZmVjdGl2ZVRpbWUgeHNpOnR5cGU9IklWTF9UUyI+DQoJCQkJPGxvdyB2YWx1ZT0iMjAwMDAzMjgiLz4NCgkJCQk8aGlnaCB2YWx1ZT0iMjAwMDA0MDQiLz4NCgkJCTwvZWZmZWN0aXZlVGltZT4NCgkJCTxlZmZlY3RpdmVUaW1lIHhzaTp0eXBlPSJQSVZMX1RTIiBvcGVyYXRvcj0iQSI+DQoJCQkJPHBlcmlvZCB2YWx1ZT0iNiIgdW5pdD0iaCIvPg0KCQkJPC9lZmZlY3RpdmVUaW1lPg0KCQkJPHJvdXRlQ29kZSBjb2RlPSJQTyIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNS4xMTIiIGNvZGVTeXN0ZW1OYW1lPSJSb3V0ZU9mQWRtaW5pc3RyYXRpb24iLz4NCgkJCTxkb3NlUXVhbnRpdHkgdmFsdWU9IjEiLz4NCgkJCTxjb25zdW1hYmxlPg0KCQkJCTxtYW51ZmFjdHVyZWRQcm9kdWN0Pg0KCQkJCQk8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjUzIi8+IDwhLS0gUHJvZHVjdCB0ZW1wbGF0ZSAtLT4NCgkJCQkJPG1hbnVmYWN0dXJlZE1hdGVyaWFsPg0KCQkJCQkJPGNvZGUgY29kZT0iMTk3NDU0IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljg4IiAgZGlzcGxheU5hbWU9IkNlcGhhbGV4aW4gNTAwIE1HIG9yYWwgdGFibGV0Ij4NCgkJCQkJCQk8b3JpZ2luYWxUZXh0PkNlcGhhbGV4aW48L29yaWdpbmFsVGV4dD4NCgkJCQkJCTwvY29kZT4NCgkJCQkJCTxuYW1lPktlZmxleDwvbmFtZT4NCgkJCQkJPC9tYW51ZmFjdHVyZWRNYXRlcmlhbD4NCgkJCQk8L21hbnVmYWN0dXJlZFByb2R1Y3Q+DQoJCQk8L2NvbnN1bWFibGU+DQoJCQk8ZW50cnlSZWxhdGlvbnNoaXAgdHlwZUNvZGU9IlJTT04iPg0KCQkJCTxvYnNlcnZhdGlvbiBjbGFzc0NvZGU9IkNPTkQiIG1vb2RDb2RlPSJFVk4iPg0KCQkJCQk8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjI4Ii8+IDwhLS0gUHJvYmxlbSBvYnNlcnZhdGlvbiB0ZW1wbGF0ZSAtLT4NCgkJCQkJPGlkIHJvb3Q9ImNkYmQ1YjA4LTZjZGUtMTFkYi05ZmUxLTA4MDAyMDBjOWE2NiIvPg0KCQkJCQk8Y29kZSBjb2RlPSJBU1NFUlRJT04iIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjUuNCIvPg0KCQkJCQk8c3RhdHVzQ29kZSBjb2RlPSJjb21wbGV0ZWQiLz4NCgkJCQkJPGVmZmVjdGl2ZVRpbWUgeHNpOnR5cGU9IklWTF9UUyI+DQoJCQkJCQk8bG93IHZhbHVlPSIyMDAwMDMyOCIvPg0KCQkJCQk8L2VmZmVjdGl2ZVRpbWU+DQoJCQkJCTx2YWx1ZSB4c2k6dHlwZT0iQ0UiIGNvZGU9IjMyMzk4MDA0IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiAgZGlzcGxheU5hbWU9IkJyb25jaGl0aXMiLz4NCgkJCQk8L29ic2VydmF0aW9uPg0KCQkJPC9lbnRyeVJlbGF0aW9uc2hpcD4NCgkJPC9zdWJzdGFuY2VBZG1pbmlzdHJhdGlvbj4NCgk8L2VudHJ5Pg0KPC9zZWN0aW9uPg0KPC9jb21wb25lbnQ+DQoJCQk8IS0tIA0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCk1lZGljYWwgRXF1aXBtZW50IHNlY3Rpb24NCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotLT4NCjxjb21wb25lbnQ+DQo8c2VjdGlvbj4NCgk8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjciLz4gPCEtLSBNZWRpY2FsIGVxdWlwbWVudCBzZWN0aW9uIHRlbXBsYXRlIC0tPg0KCTxjb2RlIGNvZGU9IjQ2MjY0LTgiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuMSIvPg0KCTx0aXRsZT5NZWRpY2FsIEVxdWlwbWVudDwvdGl0bGU+DQoJPHRleHQ+DQoJCTx0YWJsZSBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIj4NCgkJCTx0aGVhZD4NCgkJCQk8dHI+PHRoPlN1cHBseS9EZXZpY2U8L3RoPjx0aD5EYXRlIFN1cHBsaWVkPC90aD48L3RyPg0KCQkJPC90aGVhZD4NCgkJCTx0Ym9keT4NCgkJCQk8dHI+PHRkPkF1dG9tYXRpYyBpbXBsYW50YWJsZSBjYXJkaW92ZXJ0ZXIvZGVmaWJyaWxsYXRvcjwvdGQ+PHRkPk5vdiAxOTk5PC90ZD48L3RyPg0KCQkJCTx0cj48dGQ+VG90YWwgaGlwIHJlcGxhY2VtZW50IHByb3N0aGVzaXM8L3RkPjx0ZD4xOTk4PC90ZD48L3RyPg0KCQkJCTx0cj48dGQ+V2hlZWxjaGFpcjwvdGQ+PHRkPjE5OTk8L3RkPjwvdHI+DQoJCQk8L3Rib2R5Pg0KCQk8L3RhYmxlPg0KCTwvdGV4dD4NCgk8ZW50cnkgdHlwZUNvZGU9IkRSSVYiPg0KCQk8c3VwcGx5IGNsYXNzQ29kZT0iU1BMWSIgbW9vZENvZGU9IkVWTiI+DQoJCQk8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjM0Ii8+IDwhLS0gU3VwcGx5IGFjdGl2aXR5IHRlbXBsYXRlIC0tPg0KCQkJPGlkIHJvb3Q9IjI0MTM3NzNjLTIzNzItNDI5OS1iYmU2LTViMGY2MDY2NDQ0NiIvPg0KCQkJPHN0YXR1c0NvZGUgY29kZT0iY29tcGxldGVkIi8+DQoJCQk8ZWZmZWN0aXZlVGltZSB4c2k6dHlwZT0iSVZMX1RTIj48Y2VudGVyIHZhbHVlPSIxOTk5MTEiLz48L2VmZmVjdGl2ZVRpbWU+DQoJCQk8cGFydGljaXBhbnQgdHlwZUNvZGU9IkRFViI+DQoJCQkJPHBhcnRpY2lwYW50Um9sZSBjbGFzc0NvZGU9Ik1BTlUiPg0KCQkJCQk8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjUyIi8+IDwhLS0gUHJvZHVjdCBpbnN0YW5jZSB0ZW1wbGF0ZSAtLT4NCgkJCQkJPHBsYXlpbmdEZXZpY2U+DQoJCQkJCQk8Y29kZSBjb2RlPSI3MjUwNjAwMSIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi45NiIgZGlzcGxheU5hbWU9IkF1dG9tYXRpYyBpbXBsYW50YWJsZSBjYXJkaW92ZXJ0ZXIvZGVmaWJyaWxsYXRvciIvPg0KCQkJCQk8L3BsYXlpbmdEZXZpY2U+DQoJCQkJPC9wYXJ0aWNpcGFudFJvbGU+DQoJCQk8L3BhcnRpY2lwYW50Pg0KCQk8L3N1cHBseT4NCgk8L2VudHJ5Pg0KCTxlbnRyeSB0eXBlQ29kZT0iRFJJViI+DQoJCTxzdXBwbHkgY2xhc3NDb2RlPSJTUExZIiBtb29kQ29kZT0iRVZOIj4NCgkJCTx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuMzQiLz4gPCEtLSBTdXBwbHkgYWN0aXZpdHkgdGVtcGxhdGUgLS0+DQoJCQk8aWQgcm9vdD0iMjMwYjBhYjctMjA2ZC00MmQ4LWE5NDctYWI0ZjYzYWFkNzk1Ii8+DQoJCQk8c3RhdHVzQ29kZSBjb2RlPSJjb21wbGV0ZWQiLz4NCgkJCTxlZmZlY3RpdmVUaW1lIHhzaTp0eXBlPSJJVkxfVFMiPjxjZW50ZXIgdmFsdWU9IjE5OTgiLz48L2VmZmVjdGl2ZVRpbWU+DQoJCQk8cGFydGljaXBhbnQgdHlwZUNvZGU9IkRFViI+DQoJCQkJPHBhcnRpY2lwYW50Um9sZSBjbGFzc0NvZGU9Ik1BTlUiPg0KCQkJCQk8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjUyIi8+IDwhLS0gUHJvZHVjdCBpbnN0YW5jZSB0ZW1wbGF0ZSAtLT4NCgkJCQkJPGlkIHJvb3Q9IjAzY2EwMWIwLTdiZTEtMTFkYi05ZmUxLTA4MDAyMDBjOWE2NiIvPg0KCQkJCQk8cGxheWluZ0RldmljZT4NCgkJCQkJCTxjb2RlIGNvZGU9IjMwNDEyMDAwNyIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi45NiIgZGlzcGxheU5hbWU9IlRvdGFsIGhpcCByZXBsYWNlbWVudCBwcm9zdGhlc2lzIi8+DQoJCQkJCTwvcGxheWluZ0RldmljZT4NCgkJCQkJPHNjb3BpbmdFbnRpdHk+DQoJCQkJCQk8aWQgcm9vdD0iMGFiZWE5NTAtNWI0MC00YjdlLWI4ZDktMmE1ZWEzYWM1NTAwIi8+DQoJCQkJCQk8ZGVzYz5Hb29kIEhlYWx0aCBQcm9zdGhlc2VzIENvbXBhbnk8L2Rlc2M+DQoJCQkJCTwvc2NvcGluZ0VudGl0eT4NCgkJCQk8L3BhcnRpY2lwYW50Um9sZT4NCgkJCTwvcGFydGljaXBhbnQ+DQoJCTwvc3VwcGx5Pg0KCTwvZW50cnk+DQoJPGVudHJ5IHR5cGVDb2RlPSJEUklWIj4NCgkJPHN1cHBseSBjbGFzc0NvZGU9IlNQTFkiIG1vb2RDb2RlPSJFVk4iPg0KCQkJPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS4zNCIvPiA8IS0tIFN1cHBseSBhY3Rpdml0eSB0ZW1wbGF0ZSAtLT4NCgkJCTxpZCByb290PSJjNGZmZTk4ZS0zY2QzLTRjNTQtYjViZC0wOGVjYjgwMzc5ZTAiLz4NCgkJCTxzdGF0dXNDb2RlIGNvZGU9ImNvbXBsZXRlZCIvPg0KCQkJPGVmZmVjdGl2ZVRpbWUgeHNpOnR5cGU9IklWTF9UUyI+PGNlbnRlciB2YWx1ZT0iMTk5OSIvPjwvZWZmZWN0aXZlVGltZT4NCgkJCTxwYXJ0aWNpcGFudCB0eXBlQ29kZT0iREVWIj4NCgkJCQk8cGFydGljaXBhbnRSb2xlIGNsYXNzQ29kZT0iTUFOVSI+DQoJCQkJCTx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuNTIiLz4gPCEtLSBQcm9kdWN0IGluc3RhbmNlIHRlbXBsYXRlIC0tPg0KCQkJCQk8cGxheWluZ0RldmljZT4NCgkJCQkJCTxjb2RlIGNvZGU9IjU4OTM4MDA4IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiBkaXNwbGF5TmFtZT0iV2hlZWxjaGFpciIvPg0KCQkJCQk8L3BsYXlpbmdEZXZpY2U+DQoJCQkJPC9wYXJ0aWNpcGFudFJvbGU+DQoJCQk8L3BhcnRpY2lwYW50Pg0KCQk8L3N1cHBseT4NCgk8L2VudHJ5Pg0KPC9zZWN0aW9uPg0KPC9jb21wb25lbnQ+DQoJCQk8IS0tIA0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCkltbXVuaXphdGlvbnMgc2VjdGlvbg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0tPg0KPGNvbXBvbmVudD4NCjxzZWN0aW9uPg0KCTx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuNiIvPiA8IS0tIEltbXVuaXphdGlvbnMgc2VjdGlvbiB0ZW1wbGF0ZSAtLT4NCgk8Y29kZSBjb2RlPSIxMTM2OS02IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42LjEiLz4NCgk8dGl0bGU+SW1tdW5pemF0aW9uczwvdGl0bGU+DQoJPHRleHQ+DQoJCTx0YWJsZSBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIj4NCgkJCTx0aGVhZD4NCgkJCQk8dHI+PHRoPlZhY2NpbmU8L3RoPjx0aD5EYXRlPC90aD48dGg+U3RhdHVzPC90aD48L3RyPg0KCQkJPC90aGVhZD4NCgkJCTx0Ym9keT4NCgkJCQk8dHI+PHRkPkluZmx1ZW56YSB2aXJ1cyB2YWNjaW5lLCBJTTwvdGQ+PHRkPk5vdiAxOTk5PC90ZD48dGQ+Q29tcGxldGVkPC90ZD48L3RyPg0KCQkJCTx0cj48dGQ+SW5mbHVlbnphIHZpcnVzIHZhY2NpbmUsIElNPC90ZD48dGQ+RGVjIDE5OTg8L3RkPjx0ZD5Db21wbGV0ZWQ8L3RkPjwvdHI+DQoJCQkJPHRyPjx0ZD5QbmV1bW9jb2NjYWwgcG9seXNhY2NoYXJpZGUgdmFjY2luZSwgSU08L3RkPjx0ZD5EZWMgMTk5ODwvdGQ+PHRkPkNvbXBsZXRlZDwvdGQ+PC90cj4NCgkJCQk8dHI+PHRkPlRldGFudXMgYW5kIGRpcGh0aGVyaWEgdG94b2lkcywgSU08L3RkPjx0ZD4xOTk3PC90ZD48dGQ+Q29tcGxldGVkPC90ZD48L3RyPg0KCQkJPC90Ym9keT4NCgkJPC90YWJsZT4NCgk8L3RleHQ+DQoJPGVudHJ5IHR5cGVDb2RlPSJEUklWIj4NCgkJPHN1YnN0YW5jZUFkbWluaXN0cmF0aW9uIGNsYXNzQ29kZT0iU0JBRE0iIG1vb2RDb2RlPSJFVk4iPg0KCQkJPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS4yNCIvPiA8IS0tIE1lZGljYXRpb24gYWN0aXZpdHkgdGVtcGxhdGUgLS0+DQoJCQk8aWQgcm9vdD0iZTZmMWJhNDMtYzBlZC00YjliLTlmMTItZjQzNWQ4YWQ4ZjkyIi8+DQoJCQk8c3RhdHVzQ29kZSBjb2RlPSJjb21wbGV0ZWQiLz4NCgkJCTxlZmZlY3RpdmVUaW1lIHhzaTp0eXBlPSJJVkxfVFMiPjxjZW50ZXIgdmFsdWU9IjE5OTkxMSIvPjwvZWZmZWN0aXZlVGltZT4NCgkJCTxyb3V0ZUNvZGUgY29kZT0iSU0iIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjUuMTEyIiBjb2RlU3lzdGVtTmFtZT0iUm91dGVPZkFkbWluaXN0cmF0aW9uIiBkaXNwbGF5TmFtZT0iSW50cmFtdXNjdWxhciBpbmplY3Rpb24iLz4JCQ0KCQkJPGNvbnN1bWFibGU+DQoJCQkJPG1hbnVmYWN0dXJlZFByb2R1Y3Q+DQoJCQkJCTx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuNTMiLz4gPCEtLSBQcm9kdWN0IHRlbXBsYXRlIC0tPg0KCQkJCQk8bWFudWZhY3R1cmVkTWF0ZXJpYWw+DQoJCQkJCQk8Y29kZSBjb2RlPSI4OCIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi41OSIgZGlzcGxheU5hbWU9IkluZmx1ZW56YSB2aXJ1cyB2YWNjaW5lIj4NCgkJCQkJCQk8b3JpZ2luYWxUZXh0PkluZmx1ZW56YSB2aXJ1cyB2YWNjaW5lPC9vcmlnaW5hbFRleHQ+DQoJCQkJCQk8L2NvZGU+DQoJCQkJCTwvbWFudWZhY3R1cmVkTWF0ZXJpYWw+DQoJCQkJPC9tYW51ZmFjdHVyZWRQcm9kdWN0Pg0KCQkJPC9jb25zdW1hYmxlPg0KCQk8L3N1YnN0YW5jZUFkbWluaXN0cmF0aW9uPg0KCTwvZW50cnk+DQoJPGVudHJ5IHR5cGVDb2RlPSJEUklWIj4NCgkJPHN1YnN0YW5jZUFkbWluaXN0cmF0aW9uIGNsYXNzQ29kZT0iU0JBRE0iIG1vb2RDb2RlPSJFVk4iPg0KCQkJPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS4yNCIvPiA8IS0tIE1lZGljYXRpb24gYWN0aXZpdHkgdGVtcGxhdGUgLS0+DQoJCQk8aWQgcm9vdD0iMTE1ZjBmNzAtMTM0My00OTM4LWI2MmYtNjMxZGU5NzQ5YTBhIi8+DQoJCQk8c3RhdHVzQ29kZSBjb2RlPSJjb21wbGV0ZWQiLz4NCgkJCTxlZmZlY3RpdmVUaW1lIHhzaTp0eXBlPSJJVkxfVFMiPjxjZW50ZXIgdmFsdWU9IjE5OTgxMiIvPjwvZWZmZWN0aXZlVGltZT4NCgkJCTxyb3V0ZUNvZGUgY29kZT0iSU0iIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjUuMTEyIiBjb2RlU3lzdGVtTmFtZT0iUm91dGVPZkFkbWluaXN0cmF0aW9uIiBkaXNwbGF5TmFtZT0iSW50cmFtdXNjdWxhciBpbmplY3Rpb24iLz4JCQkNCgkJCTxjb25zdW1hYmxlPg0KCQkJCTxtYW51ZmFjdHVyZWRQcm9kdWN0Pg0KCQkJCQk8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjUzIi8+IDwhLS0gUHJvZHVjdCB0ZW1wbGF0ZSAtLT4NCgkJCQkJPG1hbnVmYWN0dXJlZE1hdGVyaWFsPg0KCQkJCQkJPGNvZGUgY29kZT0iODgiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuNTkiIGRpc3BsYXlOYW1lPSJJbmZsdWVuemEgdmlydXMgdmFjY2luZSI+DQoJCQkJCQkJPG9yaWdpbmFsVGV4dD5JbmZsdWVuemEgdmlydXMgdmFjY2luZTwvb3JpZ2luYWxUZXh0Pg0KCQkJCQkJPC9jb2RlPg0KCQkJCQk8L21hbnVmYWN0dXJlZE1hdGVyaWFsPg0KCQkJCTwvbWFudWZhY3R1cmVkUHJvZHVjdD4NCgkJCTwvY29uc3VtYWJsZT4NCgkJPC9zdWJzdGFuY2VBZG1pbmlzdHJhdGlvbj4NCgk8L2VudHJ5Pg0KCTxlbnRyeSB0eXBlQ29kZT0iRFJJViI+DQoJCTxzdWJzdGFuY2VBZG1pbmlzdHJhdGlvbiBjbGFzc0NvZGU9IlNCQURNIiBtb29kQ29kZT0iRVZOIj4NCgkJCTx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuMjQiLz4gPCEtLSBNZWRpY2F0aW9uIGFjdGl2aXR5IHRlbXBsYXRlIC0tPg0KCQkJPGlkIHJvb3Q9Ijc4NTk4NDA3LTlmMTYtNDJkNS04ZmZkLTA5MjgxYTYwZmUzMyIvPg0KCQkJPHN0YXR1c0NvZGUgY29kZT0iY29tcGxldGVkIi8+DQoJCQk8ZWZmZWN0aXZlVGltZSB4c2k6dHlwZT0iSVZMX1RTIj48Y2VudGVyIHZhbHVlPSIxOTk4MTIiLz48L2VmZmVjdGl2ZVRpbWU+DQoJCQk8cm91dGVDb2RlIGNvZGU9IklNIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My41LjExMiIgY29kZVN5c3RlbU5hbWU9IlJvdXRlT2ZBZG1pbmlzdHJhdGlvbiIgZGlzcGxheU5hbWU9IkludHJhbXVzY3VsYXIgaW5qZWN0aW9uIi8+CQkNCgkJCTxjb25zdW1hYmxlPg0KCQkJCTxtYW51ZmFjdHVyZWRQcm9kdWN0Pg0KCQkJCQk8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjUzIi8+IDwhLS0gUHJvZHVjdCB0ZW1wbGF0ZSAtLT4NCgkJCQkJPG1hbnVmYWN0dXJlZE1hdGVyaWFsPg0KCQkJCQkJPGNvZGUgY29kZT0iMzMiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuNTkiIGRpc3BsYXlOYW1lPSJQbmV1bW9jb2NjYWwgcG9seXNhY2NoYXJpZGUgdmFjY2luZSI+DQoJCQkJCQkJPG9yaWdpbmFsVGV4dD5QbmV1bW9jb2NjYWwgcG9seXNhY2NoYXJpZGUgdmFjY2luZTwvb3JpZ2luYWxUZXh0Pg0KCQkJCQkJPC9jb2RlPg0KCQkJCQk8L21hbnVmYWN0dXJlZE1hdGVyaWFsPg0KCQkJCTwvbWFudWZhY3R1cmVkUHJvZHVjdD4NCgkJCTwvY29uc3VtYWJsZT4NCgkJPC9zdWJzdGFuY2VBZG1pbmlzdHJhdGlvbj4NCgk8L2VudHJ5Pg0KCTxlbnRyeSB0eXBlQ29kZT0iRFJJViI+DQoJCTxzdWJzdGFuY2VBZG1pbmlzdHJhdGlvbiBjbGFzc0NvZGU9IlNCQURNIiBtb29kQ29kZT0iRVZOIj4NCgkJCTx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuMjQiLz4gPCEtLSBNZWRpY2F0aW9uIGFjdGl2aXR5IHRlbXBsYXRlIC0tPg0KCQkJPGlkIHJvb3Q9IjI2MWU5NGEwLTk1ZmItNDk3NS1iNWE1LWM4ZTEyYzAxYzFiYyIvPg0KCQkJPHN0YXR1c0NvZGUgY29kZT0iY29tcGxldGVkIi8+DQoJCQk8ZWZmZWN0aXZlVGltZSB4c2k6dHlwZT0iSVZMX1RTIj48Y2VudGVyIHZhbHVlPSIxOTk3Ii8+PC9lZmZlY3RpdmVUaW1lPg0KCQkJPHJvdXRlQ29kZSBjb2RlPSJJTSIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNS4xMTIiIGNvZGVTeXN0ZW1OYW1lPSJSb3V0ZU9mQWRtaW5pc3RyYXRpb24iIGRpc3BsYXlOYW1lPSJJbnRyYW11c2N1bGFyIGluamVjdGlvbiIvPgkJDQoJCQk8Y29uc3VtYWJsZT4NCgkJCQk8bWFudWZhY3R1cmVkUHJvZHVjdD4NCgkJCQkJPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS41MyIvPiA8IS0tIFByb2R1Y3QgdGVtcGxhdGUgLS0+DQoJCQkJCTxtYW51ZmFjdHVyZWRNYXRlcmlhbD4NCgkJCQkJCTxjb2RlIGNvZGU9IjA5IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42LjU5IiBkaXNwbGF5TmFtZT0iVGV0YW51cyBhbmQgZGlwaHRoZXJpYSB0b3hvaWRzIj4NCgkJCQkJCQk8b3JpZ2luYWxUZXh0PlRldGFudXMgYW5kIGRpcGh0aGVyaWEgdG94b2lkczwvb3JpZ2luYWxUZXh0Pg0KCQkJCQkJPC9jb2RlPg0KCQkJCQk8L21hbnVmYWN0dXJlZE1hdGVyaWFsPg0KCQkJCTwvbWFudWZhY3R1cmVkUHJvZHVjdD4NCgkJCTwvY29uc3VtYWJsZT4NCgkJPC9zdWJzdGFuY2VBZG1pbmlzdHJhdGlvbj4NCgk8L2VudHJ5Pg0KPC9zZWN0aW9uPg0KPC9jb21wb25lbnQ+DQoJCQk8IS0tIA0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNClZpdGFsIFNpZ25zIHNlY3Rpb24NCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotLT4NCjxjb21wb25lbnQ+DQo8c2VjdGlvbj4NCgk8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjE2Ii8+IDwhLS0gVml0YWwgc2lnbnMgc2VjdGlvbiB0ZW1wbGF0ZSAtLT4NCgk8Y29kZSBjb2RlPSI4NzE2LTMiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuMSIvPg0KCTx0aXRsZT5WaXRhbCBTaWduczwvdGl0bGU+DQoJPHRleHQ+DQoJCTx0YWJsZSBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIj4NCgkJCTx0aGVhZD4NCgkJCQk8dHI+PHRoIGFsaWduPSJyaWdodCI+RGF0ZSAvIFRpbWU6IDwvdGg+PHRoPk5vdiAxNCwgMTk5OTwvdGg+PHRoPkFwcmlsIDcsIDIwMDA8L3RoPjwvdHI+DQoJCQk8L3RoZWFkPg0KCQkJPHRib2R5Pg0KCQkJCTx0cj48dGggYWxpZ249ImxlZnQiPkhlaWdodDwvdGg+PHRkPjE3NyBjbTwvdGQ+PHRkPjE3NyBjbTwvdGQ+PC90cj4NCgkJCQk8dHI+PHRoIGFsaWduPSJsZWZ0Ij5XZWlnaHQ8L3RoPjx0ZD44NiBrZzwvdGQ+PHRkPjg4IGtnPC90ZD48L3RyPg0KCQkJCTx0cj48dGggYWxpZ249ImxlZnQiPkJsb29kIFByZXNzdXJlPC90aD48dGQ+MTMyLzg2IG1tSGc8L3RkPjx0ZD4xNDUvODggbW1IZzwvdGQ+PC90cj4NCgkJCTwvdGJvZHk+DQoJCTwvdGFibGU+DQoJPC90ZXh0Pg0KCTxlbnRyeSB0eXBlQ29kZT0iRFJJViI+DQoJCTxvcmdhbml6ZXIgY2xhc3NDb2RlPSJDTFVTVEVSIiBtb29kQ29kZT0iRVZOIj4NCgkJCTx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuMzUiLz4gPCEtLSBWaXRhbCBzaWducyBvcmdhbml6ZXIgdGVtcGxhdGUgLS0+DQoJCQk8aWQgcm9vdD0iYzZmODgzMjAtNjdhZC0xMWRiLWJkMTMtMDgwMDIwMGM5YTY2Ii8+DQoJCQk8Y29kZSBjb2RlPSI0NjY4MDAwNSIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi45NiIgZGlzcGxheU5hbWU9IlZpdGFsIHNpZ25zIi8+DQoJCQk8c3RhdHVzQ29kZSBjb2RlPSJjb21wbGV0ZWQiLz4NCgkJCTxlZmZlY3RpdmVUaW1lIHZhbHVlPSIxOTk5MTExNCIvPg0KCQkJPGNvbXBvbmVudD4NCgkJCQk8b2JzZXJ2YXRpb24gY2xhc3NDb2RlPSJPQlMiIG1vb2RDb2RlPSJFVk4iPg0KCQkJCQk8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjMxIi8+IDwhLS0gUmVzdWx0IG9ic2VydmF0aW9uIHRlbXBsYXRlIC0tPg0KCQkJCQk8aWQgcm9vdD0iYzZmODgzMjEtNjdhZC0xMWRiLWJkMTMtMDgwMDIwMGM5YTY2Ii8+DQoJCQkJCTxjb2RlIGNvZGU9IjUwMzczMDAwIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiBkaXNwbGF5TmFtZT0iQm9keSBoZWlnaHQiLz4NCgkJCQkJPHN0YXR1c0NvZGUgY29kZT0iY29tcGxldGVkIi8+DQoJCQkJCTxlZmZlY3RpdmVUaW1lIHZhbHVlPSIxOTk5MTExNCIvPg0KCQkJCQk8dmFsdWUgeHNpOnR5cGU9IlBRIiB2YWx1ZT0iMTc3IiB1bml0PSJjbSIvPg0KCQkJCTwvb2JzZXJ2YXRpb24+DQoJCQk8L2NvbXBvbmVudD4NCgkJCTxjb21wb25lbnQ+DQoJCQkJPG9ic2VydmF0aW9uIGNsYXNzQ29kZT0iT0JTIiBtb29kQ29kZT0iRVZOIj4NCgkJCQkJPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS4zMSIvPiA8IS0tIFJlc3VsdCBvYnNlcnZhdGlvbiB0ZW1wbGF0ZSAtLT4NCgkJCQkJPGlkIHJvb3Q9ImM2Zjg4MzIyLTY3YWQtMTFkYi1iZDEzLTA4MDAyMDBjOWE2NiIvPg0KCQkJCQk8Y29kZSBjb2RlPSIyNzExMzAwMSIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi45NiIgZGlzcGxheU5hbWU9IkJvZHkgd2VpZ2h0Ii8+DQoJCQkJCTxzdGF0dXNDb2RlIGNvZGU9ImNvbXBsZXRlZCIvPg0KCQkJCQk8ZWZmZWN0aXZlVGltZSB2YWx1ZT0iMTk5OTExMTQiLz4NCgkJCQkJPHZhbHVlIHhzaTp0eXBlPSJQUSIgdmFsdWU9Ijg2IiB1bml0PSJrZyIvPg0KCQkJCTwvb2JzZXJ2YXRpb24+DQoJCQk8L2NvbXBvbmVudD4NCgkJCTxjb21wb25lbnQ+DQoJCQkJPG9ic2VydmF0aW9uIGNsYXNzQ29kZT0iT0JTIiBtb29kQ29kZT0iRVZOIj4NCgkJCQkJPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS4zMSIvPiA8IS0tIFJlc3VsdCBvYnNlcnZhdGlvbiB0ZW1wbGF0ZSAtLT4NCgkJCQkJPGlkIHJvb3Q9ImM2Zjg4MzIzLTY3YWQtMTFkYi1iZDEzLTA4MDAyMDBjOWE2NiIvPg0KCQkJCQk8Y29kZSBjb2RlPSIyNzE2NDkwMDYiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuOTYiIGRpc3BsYXlOYW1lPSJTeXN0b2xpYyBCUCIvPg0KCQkJCQk8c3RhdHVzQ29kZSBjb2RlPSJjb21wbGV0ZWQiLz4NCgkJCQkJPGVmZmVjdGl2ZVRpbWUgdmFsdWU9IjE5OTkxMTE0Ii8+DQoJCQkJCTx2YWx1ZSB4c2k6dHlwZT0iUFEiIHZhbHVlPSIxMzIiIHVuaXQ9Im1tW0hnXSIvPg0KCQkJCTwvb2JzZXJ2YXRpb24+DQoJCQk8L2NvbXBvbmVudD4NCgkJCTxjb21wb25lbnQ+DQoJCQkJPG9ic2VydmF0aW9uIGNsYXNzQ29kZT0iT0JTIiBtb29kQ29kZT0iRVZOIj4NCgkJCQkJPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS4zMSIvPiA8IS0tIFJlc3VsdCBvYnNlcnZhdGlvbiB0ZW1wbGF0ZSAtLT4NCgkJCQkJPGlkIHJvb3Q9ImM2Zjg4MzI0LTY3YWQtMTFkYi1iZDEzLTA4MDAyMDBjOWE2NiIvPg0KCQkJCQk8Y29kZSBjb2RlPSIyNzE2NTAwMDYiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuOTYiIGRpc3BsYXlOYW1lPSJEaWFzdG9saWMgQlAiLz4NCgkJCQkJPHN0YXR1c0NvZGUgY29kZT0iY29tcGxldGVkIi8+DQoJCQkJCTxlZmZlY3RpdmVUaW1lIHZhbHVlPSIxOTk5MTExNCIvPg0KCQkJCQk8dmFsdWUgeHNpOnR5cGU9IlBRIiB2YWx1ZT0iODYiIHVuaXQ9Im1tW0hnXSIvPg0KCQkJCTwvb2JzZXJ2YXRpb24+DQoJCQk8L2NvbXBvbmVudD4NCgkJPC9vcmdhbml6ZXI+DQoJPC9lbnRyeT4NCgk8ZW50cnkgdHlwZUNvZGU9IkRSSVYiPg0KCQk8b3JnYW5pemVyIGNsYXNzQ29kZT0iQ0xVU1RFUiIgbW9vZENvZGU9IkVWTiI+DQoJCQk8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjM1Ii8+IDwhLS0gVml0YWwgc2lnbnMgb3JnYW5pemVyIHRlbXBsYXRlIC0tPg0KCQkJPGlkIHJvb3Q9ImQxMTI3NWUwLTY3YWUtMTFkYi1iZDEzLTA4MDAyMDBjOWE2NiIvPg0KCQkJPGNvZGUgY29kZT0iNDY2ODAwMDUiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuOTYiIGRpc3BsYXlOYW1lPSJWaXRhbCBzaWducyIvPg0KCQkJPHN0YXR1c0NvZGUgY29kZT0iY29tcGxldGVkIi8+DQoJCQk8ZWZmZWN0aXZlVGltZSB2YWx1ZT0iMjAwMDA0MDciLz4NCgkJCTxjb21wb25lbnQ+DQoJCQkJPG9ic2VydmF0aW9uIGNsYXNzQ29kZT0iT0JTIiBtb29kQ29kZT0iRVZOIj4NCgkJCQkJPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS4zMSIvPiA8IS0tIFJlc3VsdCBvYnNlcnZhdGlvbiB0ZW1wbGF0ZSAtLT4NCgkJCQkJPGlkIHJvb3Q9ImQxMTI3NWUxLTY3YWUtMTFkYi1iZDEzLTA4MDAyMDBjOWE2NiIvPg0KCQkJCQk8Y29kZSBjb2RlPSI1MDM3MzAwMCIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi45NiIgZGlzcGxheU5hbWU9IkJvZHkgaGVpZ2h0Ii8+DQoJCQkJCTxzdGF0dXNDb2RlIGNvZGU9ImNvbXBsZXRlZCIvPg0KCQkJCQk8ZWZmZWN0aXZlVGltZSB2YWx1ZT0iMjAwMDA0MDciLz4NCgkJCQkJPHZhbHVlIHhzaTp0eXBlPSJQUSIgdmFsdWU9IjE3NyIgdW5pdD0iY20iLz4NCgkJCQk8L29ic2VydmF0aW9uPg0KCQkJPC9jb21wb25lbnQ+DQoJCQk8Y29tcG9uZW50Pg0KCQkJCTxvYnNlcnZhdGlvbiBjbGFzc0NvZGU9Ik9CUyIgbW9vZENvZGU9IkVWTiI+DQoJCQkJCTx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuMzEiLz4gPCEtLSBSZXN1bHQgb2JzZXJ2YXRpb24gdGVtcGxhdGUgLS0+DQoJCQkJCTxpZCByb290PSJkMTEyNzVlMi02N2FlLTExZGItYmQxMy0wODAwMjAwYzlhNjYiLz4NCgkJCQkJPGNvZGUgY29kZT0iMjcxMTMwMDEiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuOTYiIGRpc3BsYXlOYW1lPSJCb2R5IHdlaWdodCIvPg0KCQkJCQk8c3RhdHVzQ29kZSBjb2RlPSJjb21wbGV0ZWQiLz4NCgkJCQkJPGVmZmVjdGl2ZVRpbWUgdmFsdWU9IjIwMDAwNDA3Ii8+DQoJCQkJCTx2YWx1ZSB4c2k6dHlwZT0iUFEiIHZhbHVlPSI4OCIgdW5pdD0ia2ciLz4NCgkJCQk8L29ic2VydmF0aW9uPg0KCQkJPC9jb21wb25lbnQ+DQoJCQk8Y29tcG9uZW50Pg0KCQkJCTxvYnNlcnZhdGlvbiBjbGFzc0NvZGU9Ik9CUyIgbW9vZENvZGU9IkVWTiI+DQoJCQkJCTx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuMzEiLz4gPCEtLSBSZXN1bHQgb2JzZXJ2YXRpb24gdGVtcGxhdGUgLS0+DQoJCQkJCTxpZCByb290PSJkMTEyNzVlMy02N2FlLTExZGItYmQxMy0wODAwMjAwYzlhNjYiLz4NCgkJCQkJPGNvZGUgY29kZT0iMjcxNjQ5MDA2IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiBkaXNwbGF5TmFtZT0iU3lzdG9saWMgQlAiLz4NCgkJCQkJPHN0YXR1c0NvZGUgY29kZT0iY29tcGxldGVkIi8+DQoJCQkJCTxlZmZlY3RpdmVUaW1lIHZhbHVlPSIyMDAwMDQwNyIvPg0KCQkJCQk8dmFsdWUgeHNpOnR5cGU9IlBRIiB2YWx1ZT0iMTQ1IiB1bml0PSJtbVtIZ10iLz4NCgkJCQk8L29ic2VydmF0aW9uPg0KCQkJPC9jb21wb25lbnQ+DQoJCQk8Y29tcG9uZW50Pg0KCQkJCTxvYnNlcnZhdGlvbiBjbGFzc0NvZGU9Ik9CUyIgbW9vZENvZGU9IkVWTiI+DQoJCQkJCTx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuMzEiLz4gPCEtLSBSZXN1bHQgb2JzZXJ2YXRpb24gdGVtcGxhdGUgLS0+DQoJCQkJCTxpZCByb290PSJkMTEyNzVlNC02N2FlLTExZGItYmQxMy0wODAwMjAwYzlhNjYiLz4NCgkJCQkJPGNvZGUgY29kZT0iMjcxNjUwMDA2IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiBkaXNwbGF5TmFtZT0iRGlhc3RvbGljIEJQIi8+DQoJCQkJCTxzdGF0dXNDb2RlIGNvZGU9ImNvbXBsZXRlZCIvPg0KCQkJCQk8ZWZmZWN0aXZlVGltZSB2YWx1ZT0iMjAwMDA0MDciLz4NCgkJCQkJPHZhbHVlIHhzaTp0eXBlPSJQUSIgdmFsdWU9Ijg4IiB1bml0PSJtbVtIZ10iLz4NCgkJCQk8L29ic2VydmF0aW9uPg0KCQkJPC9jb21wb25lbnQ+DQoJCTwvb3JnYW5pemVyPg0KCTwvZW50cnk+DQo8L3NlY3Rpb24+DQo8L2NvbXBvbmVudD4NCgkJCTwhLS0gDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KUmVzdWx0cyBzZWN0aW9uDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLS0+DQo8Y29tcG9uZW50Pg0KPHNlY3Rpb24+DQoJPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS4xNCIvPiA8IS0tIFJlc3VsdHMgc2VjdGlvbiB0ZW1wbGF0ZSAtLT4NCgk8Y29kZSBjb2RlPSIzMDk1NC0yIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42LjEiLz4NCgk8dGl0bGU+UmVzdWx0czwvdGl0bGU+DQoJPHRleHQ+DQoJCTx0YWJsZSBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIj4NCgkJCTx0aGVhZD4NCgkJCQk8dHI+PHRoPiYjMTYwOzwvdGg+PHRoPk1hcmNoIDIzLCAyMDAwPC90aD48dGg+QXByaWwgMDYsIDIwMDA8L3RoPjwvdHI+DQoJCQk8L3RoZWFkPg0KCQkJPHRib2R5Pg0KCQkJCTx0cj48dGQgY29sc3Bhbj0iMyI+PGNvbnRlbnQgc3R5bGVDb2RlPSJCb2xkSXRhbGljcyI+SGVtYXRvbG9neTwvY29udGVudD48L3RkPjwvdHI+DQoJCQkJPHRyPjx0ZD5IR0IgKE0gMTMtMTggZy9kbDsgRiAxMi0xNiBnL2RsKTwvdGQ+PHRkPjEzLjI8L3RkPjx0ZD4mIzE2MDs8L3RkPjwvdHI+DQoJCQkJPHRyPjx0ZD5XQkMgKDQuMy0xMC44IDEwKzMvdWwpPC90ZD48dGQ+Ni43PC90ZD48dGQ+JiMxNjA7PC90ZD48L3RyPg0KCQkJCTx0cj48dGQ+UExUICgxMzUtMTQ1IG1lcS9sKTwvdGQ+PHRkPjEyMyo8L3RkPjx0ZD4mIzE2MDs8L3RkPjwvdHI+DQoJCQkJPHRyPjx0ZCBjb2xzcGFuPSIzIj48Y29udGVudCBzdHlsZUNvZGU9IkJvbGRJdGFsaWNzIj5DaGVtaXN0cnk8L2NvbnRlbnQ+PC90ZD48L3RyPg0KCQkJCTx0cj48dGQ+TkEgKDEzNS0xNDVtZXEvbCk8L3RkPjx0ZD4mIzE2MDs8L3RkPjx0ZD4xNDA8L3RkPjwvdHI+DQoJCQkJPHRyPjx0ZD5LICgzLjUtNS4wIG1lcS9sKTwvdGQ+PHRkPiYjMTYwOzwvdGQ+PHRkPjQuMDwvdGQ+PC90cj4NCgkJCQk8dHI+PHRkPkNMICg5OC0xMDYgbWVxL2wpPC90ZD48dGQ+JiMxNjA7PC90ZD48dGQ+MTAyPC90ZD48L3RyPg0KCQkJCTx0cj48dGQ+SENPMyAoMTgtMjMgbWVxL2wpPC90ZD48dGQ+JiMxNjA7PC90ZD48dGQ+MzUqPC90ZD48L3RyPg0KCQkJPC90Ym9keT4NCgkJPC90YWJsZT4NCgk8L3RleHQ+DQoJPGVudHJ5IHR5cGVDb2RlPSJEUklWIj4NCgkJPG9yZ2FuaXplciBjbGFzc0NvZGU9IkJBVFRFUlkiIG1vb2RDb2RlPSJFVk4iPg0KCQkJPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS4zMiIvPiA8IS0tIFJlc3VsdCBvcmdhbml6ZXIgdGVtcGxhdGUgLS0+DQoJCQk8aWQgcm9vdD0iN2Q1YTAyYjAtNjdhNC0xMWRiLWJkMTMtMDgwMDIwMGM5YTY2Ii8+DQoJCQk8Y29kZSBjb2RlPSI0Mzc4OTAwOSIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi45NiIgZGlzcGxheU5hbWU9IkNCQyBXTyBESUZGRVJFTlRJQUwiLz4NCgkJCTxzdGF0dXNDb2RlIGNvZGU9ImNvbXBsZXRlZCIvPg0KCQkJPGVmZmVjdGl2ZVRpbWUgdmFsdWU9IjIwMDAwMzIzMTQzMCIvPg0KCQkJPGNvbXBvbmVudD4NCgkJCQk8b2JzZXJ2YXRpb24gY2xhc3NDb2RlPSJPQlMiIG1vb2RDb2RlPSJFVk4iPg0KCQkJCQk8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjMxIi8+IDwhLS0gUmVzdWx0IG9ic2VydmF0aW9uIHRlbXBsYXRlIC0tPg0KCQkJCQk8aWQgcm9vdD0iMTA3YzJkYzAtNjdhNS0xMWRiLWJkMTMtMDgwMDIwMGM5YTY2Ii8+DQoJCQkJCTxjb2RlIGNvZGU9IjMwMzEzLTEiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuMSIgZGlzcGxheU5hbWU9IkhHQiIvPg0KCQkJCQk8c3RhdHVzQ29kZSBjb2RlPSJjb21wbGV0ZWQiLz4NCgkJCQkJPGVmZmVjdGl2ZVRpbWUgdmFsdWU9IjIwMDAwMzIzMTQzMCIvPg0KCQkJCQk8dmFsdWUgeHNpOnR5cGU9IlBRIiB2YWx1ZT0iMTMuMiIgdW5pdD0iZy9kbCIvPg0KCQkJCQk8aW50ZXJwcmV0YXRpb25Db2RlIGNvZGU9Ik4iIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjUuODMiLz4NCgkJCQkJPHJlZmVyZW5jZVJhbmdlPg0KCQkJCQkJPG9ic2VydmF0aW9uUmFuZ2U+DQoJCQkJCQkJPHRleHQ+TSAxMy0xOCBnL2RsOyBGIDEyLTE2IGcvZGw8L3RleHQ+DQoJCQkJCQk8L29ic2VydmF0aW9uUmFuZ2U+DQoJCQkJCTwvcmVmZXJlbmNlUmFuZ2U+DQoJCQkJPC9vYnNlcnZhdGlvbj4NCgkJCTwvY29tcG9uZW50Pg0KCQkJPGNvbXBvbmVudD4NCgkJCQk8b2JzZXJ2YXRpb24gY2xhc3NDb2RlPSJPQlMiIG1vb2RDb2RlPSJFVk4iPg0KCQkJCQk8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjMxIi8+IDwhLS0gUmVzdWx0IG9ic2VydmF0aW9uIHRlbXBsYXRlIC0tPg0KCQkJCQk8aWQgcm9vdD0iOGIzZmEzNzAtNjdhNS0xMWRiLWJkMTMtMDgwMDIwMGM5YTY2Ii8+DQoJCQkJCTxjb2RlIGNvZGU9IjMzNzY1LTkiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuMSIgZGlzcGxheU5hbWU9IldCQyIvPg0KCQkJCQk8c3RhdHVzQ29kZSBjb2RlPSJjb21wbGV0ZWQiLz4NCgkJCQkJPGVmZmVjdGl2ZVRpbWUgdmFsdWU9IjIwMDAwMzIzMTQzMCIvPg0KCQkJCQk8dmFsdWUgeHNpOnR5cGU9IlBRIiB2YWx1ZT0iNi43IiB1bml0PSIxMCszL3VsIi8+DQoJCQkJCTxpbnRlcnByZXRhdGlvbkNvZGUgY29kZT0iTiIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNS44MyIvPg0KCQkJCQk8cmVmZXJlbmNlUmFuZ2U+DQoJCQkJCQk8b2JzZXJ2YXRpb25SYW5nZT4NCgkJCQkJCQk8dmFsdWUgeHNpOnR5cGU9IklWTF9QUSI+DQoJCQkJCQkJCTxsb3cgdmFsdWU9IjQuMyIgdW5pdD0iMTArMy91bCIvPg0KCQkJCQkJCQk8aGlnaCB2YWx1ZT0iMTAuOCIgdW5pdD0iMTArMy91bCIvPg0KCQkJCQkJCTwvdmFsdWU+DQoJCQkJCQk8L29ic2VydmF0aW9uUmFuZ2U+DQoJCQkJCTwvcmVmZXJlbmNlUmFuZ2U+DQoJCQkJPC9vYnNlcnZhdGlvbj4NCgkJCTwvY29tcG9uZW50Pg0KCQkJPGNvbXBvbmVudD4NCgkJCQk8b2JzZXJ2YXRpb24gY2xhc3NDb2RlPSJPQlMiIG1vb2RDb2RlPSJFVk4iPg0KCQkJCQk8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjMxIi8+IDwhLS0gUmVzdWx0IG9ic2VydmF0aW9uIHRlbXBsYXRlIC0tPg0KCQkJCQk8aWQgcm9vdD0iODBhNmM3NDAtNjdhNS0xMWRiLWJkMTMtMDgwMDIwMGM5YTY2Ii8+DQoJCQkJCTxjb2RlIGNvZGU9IjI2NTE1LTciIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuMSIgZGlzcGxheU5hbWU9IlBMVCIvPg0KCQkJCQk8c3RhdHVzQ29kZSBjb2RlPSJjb21wbGV0ZWQiLz4NCgkJCQkJPGVmZmVjdGl2ZVRpbWUgdmFsdWU9IjIwMDAwMzIzMTQzMCIvPg0KCQkJCQk8dmFsdWUgeHNpOnR5cGU9IlBRIiB2YWx1ZT0iMTIzIiB1bml0PSIxMCszL3VsIi8+DQoJCQkJCTxpbnRlcnByZXRhdGlvbkNvZGUgY29kZT0iTCIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNS44MyIvPg0KCQkJCQk8cmVmZXJlbmNlUmFuZ2U+DQoJCQkJCQk8b2JzZXJ2YXRpb25SYW5nZT4NCgkJCQkJCQk8dmFsdWUgeHNpOnR5cGU9IklWTF9QUSI+DQoJCQkJCQkJCTxsb3cgdmFsdWU9IjE1MCIgdW5pdD0iMTArMy91bCIvPg0KCQkJCQkJCQk8aGlnaCB2YWx1ZT0iMzUwIiB1bml0PSIxMCszL3VsIi8+DQoJCQkJCQkJPC92YWx1ZT4NCgkJCQkJCTwvb2JzZXJ2YXRpb25SYW5nZT4NCgkJCQkJPC9yZWZlcmVuY2VSYW5nZT4NCgkJCQk8L29ic2VydmF0aW9uPg0KCQkJPC9jb21wb25lbnQ+DQoJCTwvb3JnYW5pemVyPg0KCTwvZW50cnk+DQoJPGVudHJ5IHR5cGVDb2RlPSJEUklWIj4NCgkJPG9yZ2FuaXplciBjbGFzc0NvZGU9IkJBVFRFUlkiIG1vb2RDb2RlPSJFVk4iPg0KCQkJPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS4zMiIvPiA8IS0tIFJlc3VsdCBvcmdhbml6ZXIgdGVtcGxhdGUgLS0+DQoJCQk8aWQgcm9vdD0iYTQwMDI3ZTAtNjdhNS0xMWRiLWJkMTMtMDgwMDIwMGM5YTY2Ii8+DQoJCQk8Y29kZSBjb2RlPSIyMDEwOTAwNSIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi45NiIgZGlzcGxheU5hbWU9IkxZVEVTIi8+DQoJCQk8c3RhdHVzQ29kZSBjb2RlPSJjb21wbGV0ZWQiLz4NCgkJCTxlZmZlY3RpdmVUaW1lIHZhbHVlPSIyMDAwMDQwNjEzMDAiLz4NCgkJCTxjb21wb25lbnQ+DQoJCQkJPG9ic2VydmF0aW9uIGNsYXNzQ29kZT0iT0JTIiBtb29kQ29kZT0iRVZOIj4NCgkJCQkJPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS4zMSIvPiA8IS0tIFJlc3VsdCBvYnNlcnZhdGlvbiB0ZW1wbGF0ZSAtLT4NCgkJCQkJPGlkIHJvb3Q9ImE0MDAyN2UxLTY3YTUtMTFkYi1iZDEzLTA4MDAyMDBjOWE2NiIvPg0KCQkJCQk8Y29kZSBjb2RlPSIyOTUxLTIiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuMSIgZGlzcGxheU5hbWU9Ik5BIi8+DQoJCQkJCTxzdGF0dXNDb2RlIGNvZGU9ImNvbXBsZXRlZCIvPg0KCQkJCQk8ZWZmZWN0aXZlVGltZSB2YWx1ZT0iMjAwMDA0MDYxMzAwIi8+DQoJCQkJCTx2YWx1ZSB4c2k6dHlwZT0iUFEiIHZhbHVlPSIxNDAiIHVuaXQ9Im1lcS9sIi8+DQoJCQkJCTxpbnRlcnByZXRhdGlvbkNvZGUgY29kZT0iTiIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNS44MyIvPg0KCQkJCQk8cmVmZXJlbmNlUmFuZ2U+DQoJCQkJCQk8b2JzZXJ2YXRpb25SYW5nZT4NCgkJCQkJCQk8dmFsdWUgeHNpOnR5cGU9IklWTF9QUSI+DQoJCQkJCQkJCTxsb3cgdmFsdWU9IjEzNSIgdW5pdD0ibWVxL2wiLz4NCgkJCQkJCQkJPGhpZ2ggdmFsdWU9IjE0NSIgdW5pdD0ibWVxL2wiLz4NCgkJCQkJCQk8L3ZhbHVlPg0KCQkJCQkJPC9vYnNlcnZhdGlvblJhbmdlPg0KCQkJCQk8L3JlZmVyZW5jZVJhbmdlPg0KCQkJCTwvb2JzZXJ2YXRpb24+DQoJCQk8L2NvbXBvbmVudD4NCgkJCTxjb21wb25lbnQ+DQoJCQkJPG9ic2VydmF0aW9uIGNsYXNzQ29kZT0iT0JTIiBtb29kQ29kZT0iRVZOIj4NCgkJCQkJPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS4zMSIvPiA8IS0tIFJlc3VsdCBvYnNlcnZhdGlvbiB0ZW1wbGF0ZSAtLT4NCgkJCQkJPGlkIHJvb3Q9ImE0MDAyN2UyLTY3YTUtMTFkYi1iZDEzLTA4MDAyMDBjOWE2NiIvPg0KCQkJCQk8Y29kZSBjb2RlPSIyODIzLTMiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuMSIgZGlzcGxheU5hbWU9IksiLz4NCgkJCQkJPHN0YXR1c0NvZGUgY29kZT0iY29tcGxldGVkIi8+DQoJCQkJCTxlZmZlY3RpdmVUaW1lIHZhbHVlPSIyMDAwMDQwNjEzMDAiLz4NCgkJCQkJPHZhbHVlIHhzaTp0eXBlPSJQUSIgdmFsdWU9IjQuMCIgdW5pdD0ibWVxL2wiLz4NCgkJCQkJPGludGVycHJldGF0aW9uQ29kZSBjb2RlPSJOIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My41LjgzIi8+DQoJCQkJCTxyZWZlcmVuY2VSYW5nZT4NCgkJCQkJCTxvYnNlcnZhdGlvblJhbmdlPg0KCQkJCQkJCTx2YWx1ZSB4c2k6dHlwZT0iSVZMX1BRIj4NCgkJCQkJCQkJPGxvdyB2YWx1ZT0iMy41IiB1bml0PSJtZXEvbCIvPg0KCQkJCQkJCQk8aGlnaCB2YWx1ZT0iNS4wIiB1bml0PSJtZXEvbCIvPg0KCQkJCQkJCTwvdmFsdWU+DQoJCQkJCQk8L29ic2VydmF0aW9uUmFuZ2U+DQoJCQkJCTwvcmVmZXJlbmNlUmFuZ2U+DQoJCQkJPC9vYnNlcnZhdGlvbj4NCgkJCTwvY29tcG9uZW50Pg0KCQkJPGNvbXBvbmVudD4NCgkJCQk8b2JzZXJ2YXRpb24gY2xhc3NDb2RlPSJPQlMiIG1vb2RDb2RlPSJFVk4iPg0KCQkJCQk8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjMxIi8+IDwhLS0gUmVzdWx0IG9ic2VydmF0aW9uIHRlbXBsYXRlIC0tPg0KCQkJCQk8aWQgcm9vdD0iYTQwMDI3ZTMtNjdhNS0xMWRiLWJkMTMtMDgwMDIwMGM5YTY2Ii8+DQoJCQkJCTxjb2RlIGNvZGU9IjIwNzUtMCIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi4xIiBkaXNwbGF5TmFtZT0iQ0wiLz4NCgkJCQkJPHN0YXR1c0NvZGUgY29kZT0iY29tcGxldGVkIi8+DQoJCQkJCTxlZmZlY3RpdmVUaW1lIHZhbHVlPSIyMDAwMDQwNjEzMDAiLz4NCgkJCQkJPHZhbHVlIHhzaTp0eXBlPSJQUSIgdmFsdWU9IjEwMiIgdW5pdD0ibWVxL2wiLz4NCgkJCQkJPGludGVycHJldGF0aW9uQ29kZSBjb2RlPSJOIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My41LjgzIi8+DQoJCQkJCTxyZWZlcmVuY2VSYW5nZT4NCgkJCQkJCTxvYnNlcnZhdGlvblJhbmdlPg0KCQkJCQkJCTx2YWx1ZSB4c2k6dHlwZT0iSVZMX1BRIj4NCgkJCQkJCQkJPGxvdyB2YWx1ZT0iOTgiIHVuaXQ9Im1lcS9sIi8+DQoJCQkJCQkJCTxoaWdoIHZhbHVlPSIxMDYiIHVuaXQ9Im1lcS9sIi8+DQoJCQkJCQkJPC92YWx1ZT4NCgkJCQkJCTwvb2JzZXJ2YXRpb25SYW5nZT4NCgkJCQkJPC9yZWZlcmVuY2VSYW5nZT4NCgkJCQk8L29ic2VydmF0aW9uPg0KCQkJPC9jb21wb25lbnQ+DQoJCQk8Y29tcG9uZW50Pg0KCQkJCTxvYnNlcnZhdGlvbiBjbGFzc0NvZGU9Ik9CUyIgbW9vZENvZGU9IkVWTiI+DQoJCQkJCTx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuMzEiLz4gPCEtLSBSZXN1bHQgb2JzZXJ2YXRpb24gdGVtcGxhdGUgLS0+DQoJCQkJCTxpZCByb290PSJhNDAwMjdlNC02N2E1LTExZGItYmQxMy0wODAwMjAwYzlhNjYiLz4NCgkJCQkJPGNvZGUgY29kZT0iMTk2My04IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42LjEiIGRpc3BsYXlOYW1lPSJIQ08zIi8+DQoJCQkJCTxzdGF0dXNDb2RlIGNvZGU9ImNvbXBsZXRlZCIvPg0KCQkJCQk8ZWZmZWN0aXZlVGltZSB2YWx1ZT0iMjAwMDA0MDYxMzAwIi8+DQoJCQkJCTx2YWx1ZSB4c2k6dHlwZT0iUFEiIHZhbHVlPSIzNSIgdW5pdD0ibWVxL2wiLz4NCgkJCQkJPGludGVycHJldGF0aW9uQ29kZSBjb2RlPSJIIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My41LjgzIi8+DQoJCQkJCTxyZWZlcmVuY2VSYW5nZT4NCgkJCQkJCTxvYnNlcnZhdGlvblJhbmdlPg0KCQkJCQkJCTx2YWx1ZSB4c2k6dHlwZT0iSVZMX1BRIj4NCgkJCQkJCQkJPGxvdyB2YWx1ZT0iMTgiIHVuaXQ9Im1lcS9sIi8+DQoJCQkJCQkJCTxoaWdoIHZhbHVlPSIyMyIgdW5pdD0ibWVxL2wiLz4NCgkJCQkJCQk8L3ZhbHVlPg0KCQkJCQkJPC9vYnNlcnZhdGlvblJhbmdlPg0KCQkJCQk8L3JlZmVyZW5jZVJhbmdlPg0KCQkJCTwvb2JzZXJ2YXRpb24+DQoJCQk8L2NvbXBvbmVudD4NCgkJPC9vcmdhbml6ZXI+DQoJPC9lbnRyeT4NCjwvc2VjdGlvbj4JCQkNCjwvY29tcG9uZW50Pg0KCQkJPCEtLSANCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQpQcm9jZWR1cmVzIHNlY3Rpb24NCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotLT4NCjxjb21wb25lbnQ+DQo8c2VjdGlvbj4NCgk8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjEyIi8+IDwhLS0gUHJvY2VkdXJlcyBzZWN0aW9uIHRlbXBsYXRlIC0tPg0KCTxjb2RlIGNvZGU9IjQ3NTE5LTQiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuMSIvPg0KCTx0aXRsZT5Qcm9jZWR1cmVzPC90aXRsZT4NCgk8dGV4dD4NCgkJCTx0YWJsZSBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIj4NCgkJCTx0aGVhZD4NCgkJCQk8dHI+PHRoPlByb2NlZHVyZTwvdGg+PHRoPkRhdGU8L3RoPjwvdHI+DQoJCQk8L3RoZWFkPg0KCQkJPHRib2R5Pg0KCQkJCTx0cj48dGQ+PGNvbnRlbnQgSUQ9IlByb2MxIj5Ub3RhbCBoaXAgcmVwbGFjZW1lbnQsIGxlZnQ8L2NvbnRlbnQ+PC90ZD48dGQ+MTk5ODwvdGQ+PC90cj4NCgkJCTwvdGJvZHk+DQoJCTwvdGFibGU+DQoJPC90ZXh0Pg0KCTxlbnRyeSB0eXBlQ29kZT0iRFJJViI+DQoJCTxwcm9jZWR1cmUgY2xhc3NDb2RlPSJQUk9DIiBtb29kQ29kZT0iRVZOIj4NCgkJCTx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuMjkiLz4gPCEtLSBQcm9jZWR1cmUgYWN0aXZpdHkgdGVtcGxhdGUgLS0+DQoJCQk8aWQgcm9vdD0iZTQwMWYzNDAtN2JlMi0xMWRiLTlmZTEtMDgwMDIwMGM5YTY2Ii8+DQoJCQk8Y29kZSBjb2RlPSI1MjczNDAwNyIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi45NiIgZGlzcGxheU5hbWU9IlRvdGFsIGhpcCByZXBsYWNlbWVudCI+DQoJCQkJPG9yaWdpbmFsVGV4dD48cmVmZXJlbmNlIHZhbHVlPSIjUHJvYzEiLz48L29yaWdpbmFsVGV4dD4NCgkJCQk8cXVhbGlmaWVyPg0KCQkJCQk8bmFtZSBjb2RlPSIyNzI3NDEwMDMiIGRpc3BsYXlOYW1lPSJMYXRlcmFsaXR5Ii8+DQoJCQkJCTx2YWx1ZSBjb2RlPSI3NzcxMDAwIiBkaXNwbGF5TmFtZT0iTGVmdCIvPg0KCQkJCTwvcXVhbGlmaWVyPg0KCQkJPC9jb2RlPg0KCQkJPHN0YXR1c0NvZGUgY29kZT0iY29tcGxldGVkIi8+DQoJCQk8ZWZmZWN0aXZlVGltZSB2YWx1ZT0iMTk5OCIvPg0KCQkJPHBhcnRpY2lwYW50IHR5cGVDb2RlPSJERVYiPg0KCQkJCTxwYXJ0aWNpcGFudFJvbGUgY2xhc3NDb2RlPSJNQU5VIj4NCgkJCQkJPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS41MiIvPiA8IS0tIFByb2R1Y3QgaW5zdGFuY2UgdGVtcGxhdGUgLS0+DQoJCQkJCTxpZCByb290PSIwM2NhMDFiMC03YmUxLTExZGItOWZlMS0wODAwMjAwYzlhNjYiLz4NCgkJCQk8L3BhcnRpY2lwYW50Um9sZT4NCgkJCTwvcGFydGljaXBhbnQ+DQoJCTwvcHJvY2VkdXJlPg0KCTwvZW50cnk+DQo8L3NlY3Rpb24+DQo8L2NvbXBvbmVudD4NCg0KCQkJPCEtLSANCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQpFbmNvdW50ZXJzIHNlY3Rpb24NCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotLT4NCjxjb21wb25lbnQ+DQo8c2VjdGlvbj4NCgk8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjMiLz4gPCEtLSBFbmNvdW50ZXJzIHNlY3Rpb24gdGVtcGxhdGUgLS0+DQoJPGNvZGUgY29kZT0iNDYyNDAtOCIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi4xIi8+DQoJPHRpdGxlPkVuY291bnRlcnM8L3RpdGxlPg0KCTx0ZXh0Pg0KCQk8dGFibGUgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSI+DQoJCQk8dGhlYWQ+DQoJCQkJPHRyPjx0aD5FbmNvdW50ZXI8L3RoPjx0aD5Mb2NhdGlvbjwvdGg+PHRoPkRhdGU8L3RoPjwvdHI+DQoJCQk8L3RoZWFkPg0KCQkJPHRib2R5Pg0KCQkJCTx0cj48dGQ+Q2hlY2t1cCBFeGFtaW5hdGlvbjwvdGQ+PHRkPkdvb2QgSGVhbHRoIENsaW5pYzwvdGQ+PHRkPkFwciAwNywgMjAwMDwvdGQ+PC90cj4NCgkJCTwvdGJvZHk+DQoJCTwvdGFibGU+DQoJPC90ZXh0Pg0KCTxlbnRyeSB0eXBlQ29kZT0iRFJJViI+DQoJCTxlbmNvdW50ZXIgY2xhc3NDb2RlPSJFTkMiIG1vb2RDb2RlPSJFVk4iPg0KCQkJPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMS4yMSIvPiA8IS0tIEVuY291bnRlciBhY3Rpdml0eSB0ZW1wbGF0ZSAtLT4NCgkJCTxpZCByb290PSIyYTYyMDE1NS05ZDExLTQzOWUtOTJiMy01ZDk4MTVmZjRkZTgiLz4NCgkJCTxjb2RlIGNvZGU9IkdFTlJMIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My41LjQiIGRpc3BsYXlOYW1lPSJHZW5lcmFsIj4NCgkJCQk8b3JpZ2luYWxUZXh0PkNoZWNrdXAgRXhhbWluYXRpb248L29yaWdpbmFsVGV4dD4NCgkJCTwvY29kZT4NCgkJCTxlZmZlY3RpdmVUaW1lIHZhbHVlPSIyMDAwMDQwNyIvPg0KCQkJPHBhcnRpY2lwYW50IHR5cGVDb2RlPSJMT0MiPg0KCQkJCTx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuNDUiLz4gPCEtLSBMb2NhdGlvbiBwYXJ0aWNpcGF0aW9uIHRlbXBsYXRlIC0tPg0KCQkJCTxwYXJ0aWNpcGFudFJvbGUgY2xhc3NDb2RlPSJTRExPQyI+DQoJCQkJCTxpZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xOS41Ii8+DQoJCQkJCTxwbGF5aW5nRW50aXR5IGNsYXNzQ29kZT0iUExDIj4NCgkJCQkJCTxuYW1lPkdvb2QgSGVhbHRoIENsaW5pYzwvbmFtZT4NCgkJCQkJPC9wbGF5aW5nRW50aXR5Pg0KCQkJCTwvcGFydGljaXBhbnRSb2xlPg0KCQkJPC9wYXJ0aWNpcGFudD4NCgkJPC9lbmNvdW50ZXI+DQoJPC9lbnRyeT4NCjwvc2VjdGlvbj4NCjwvY29tcG9uZW50Pg0KCQkJPCEtLSANCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQpQbGFuIG9mIENhcmUgc2VjdGlvbg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0tPg0KPGNvbXBvbmVudD4NCjxzZWN0aW9uPg0KCTx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjEuMTAiLz4gPCEtLSBQbGFuIG9mIENhcmUgc2VjdGlvbiB0ZW1wbGF0ZSAtLT4NCgk8Y29kZSBjb2RlPSIxODc3Ni01IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42LjEiLz4NCgk8dGl0bGU+UGxhbjwvdGl0bGU+DQoJCTx0ZXh0Pg0KCQk8dGFibGUgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSI+DQoJCQk8dGhlYWQ+DQoJCQk8dHI+PHRoPlBsYW5uZWQgQWN0aXZpdHk8L3RoPjx0aD5QbGFubmVkIERhdGU8L3RoPjwvdHI+DQoJCQk8L3RoZWFkPg0KCQkJPHRib2R5Pg0KCQkJPHRyPjx0ZD5QdWxtb25hcnkgZnVuY3Rpb24gdGVzdDwvdGQ+PHRkPkFwcmlsIDIxLCAyMDAwPC90ZD48L3RyPg0KCQkJPC90Ym9keT4NCgkJPC90YWJsZT4NCgk8L3RleHQ+CQ0KCTxlbnRyeSB0eXBlQ29kZT0iRFJJViI+DQoJCTxvYnNlcnZhdGlvbiBjbGFzc0NvZGU9Ik9CUyIgbW9vZENvZGU9IlJRTyI+DQoJCQk8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4xLjI1Ii8+IDwhLS0gUGxhbiBvZiBBY3Rpdml0eSBhY3Rpdml0eSB0ZW1wbGF0ZSAtLT4NCgkJCTxpZCByb290PSI5YTZkMWJhYy0xN2QzLTQxOTUtODlhNC0xMTIxYmM4MDliNGEiLz4NCgkJCTxjb2RlIGNvZGU9IjIzNDI2MDA2IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiBkaXNwbGF5TmFtZT0iUHVsbW9uYXJ5IGZ1bmN0aW9uIHRlc3QiLz4NCgkJCTxzdGF0dXNDb2RlIGNvZGU9Im5ldyIvPg0KCQkJPGVmZmVjdGl2ZVRpbWU+PGNlbnRlciB2YWx1ZT0iMjAwMDA0MjEiLz48L2VmZmVjdGl2ZVRpbWU+DQoJCTwvb2JzZXJ2YXRpb24+DQoJPC9lbnRyeT4NCjwvc2VjdGlvbj4NCjwvY29tcG9uZW50Pg0KPC9zdHJ1Y3R1cmVkQm9keT4NCjwvY29tcG9uZW50Pg0KPC9DbGluaWNhbERvY3VtZW50Pg0K</ns6:Document>
+ </ns6:ProvideAndRegisterDocumentSetRequest>
+
=======================================
--- /dev/null
+++ /java/tags/xd-1.0.3/src/main/resources/request_pdf.xml Tue Oct 28
12:15:16 2014 UTC
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="windows-1252"?>
+ <ns6:ProvideAndRegisterDocumentSetRequest
xmlns:rim="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0"
xmlns:ns3="urn:oasis:names:tc:ebxml-regrep:xsd:rs:3.0"
xmlns:ns4="urn:oasis:names:tc:ebxml-regrep:xsd:query:3.0"
xmlns:lcm="urn:oasis:names:tc:ebxml-regrep:xsd:lcm:3.0"
xmlns:ns6="urn:ihe:iti:xds-b:2007">
+ <lcm:SubmitObjectsRequest>
+ <rim:RegistryObjectList>
+ <rim:ExtrinsicObject id="Document01"
mimeType="application/pdf"
objectType="urn:uuid:7edca82f-054d-47f2-a032-9b2a5b5186c1">
+ <rim:Slot name="creationTime">
+ <rim:ValueList>
+ <rim:Value>20051224000000</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Slot name="languageCode">
+ <rim:ValueList>
+ <rim:Value>en-us</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Slot name="serviceStartTime">
+ <rim:ValueList>
+ <rim:Value>20041223080000</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Slot name="serviceStopTime">
+ <rim:ValueList>
+ <rim:Value>20041223080100</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Slot name="sourcePatientId">
+ <rim:ValueList>
+
<rim:Value>1111111111^^^&amp;GSIHealth&amp;ISO</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Slot name="sourcePatientInfo">
+ <rim:ValueList>
+ <rim:Value>PID-3|
1111111111^^^&amp;GSIHealth&amp;ISO</rim:Value>
+ <rim:Value>PID-5|Doe^John^^^</rim:Value>
+ <rim:Value>PID-7|19560527</rim:Value>
+ <rim:Value>PID-8|M</rim:Value>
+ <rim:Value>PID-11|100 Main
St^^Metropolis^Il^44130^USA</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Name>
+ <rim:LocalizedString value="Physical"/>
+ </rim:Name>
+ <rim:Description/>
+ <rim:Classification id="cl01"
classificationScheme="urn:uuid:93606bcf-9494-43ec-9b4e-a7748d1a838d"
classifiedObject="Document01">
+ <rim:Slot name="authorPerson">
+ <rim:ValueList>
+ <rim:Value>Gerald Smitty</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Slot name="authorInstitution">
+ <rim:ValueList>
+ <rim:Value>Cleveland Clinic</rim:Value>
+ <rim:Value>Parma Community</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Slot name="authorRole">
+ <rim:ValueList>
+ <rim:Value>Attending</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Slot name="authorSpecialty">
+ <rim:ValueList>
+ <rim:Value>Orthopedic</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ </rim:Classification>
+ <rim:Classification id="cl02"
classificationScheme="urn:uuid:41a5887f-8865-4c09-adf7-e362475b143a"
classifiedObject="Document01" nodeRepresentation="History and Physical">
+ <rim:Slot name="codingScheme">
+ <rim:ValueList>
+ <rim:Value>classCode</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Name>
+ <rim:LocalizedString value="History and Physical"/>
+ </rim:Name>
+ </rim:Classification>
+ <rim:Classification id="cl03"
classificationScheme="urn:uuid:f4f85eac-e6cb-4883-b524-f2705394840f"
classifiedObject="Document01"
nodeRepresentation="1.3.6.1.4.1.21367.2006.7.101">
+ <rim:Slot name="codingScheme">
+ <rim:ValueList>
+ <rim:Value>Connect-a-thon
confidentialityCodes</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Name>
+ <rim:LocalizedString value="Clinical-Staff"/>
+ </rim:Name>
+ </rim:Classification>
+ <rim:Classification id="cl04"
classificationScheme="urn:uuid:a09d5840-386c-46f2-b5ad-9c3699a4309d"
classifiedObject="Document01" nodeRepresentation="CDAR2/IHE 1.0">
+ <rim:Slot name="codingScheme">
+ <rim:ValueList>
+ <rim:Value>Connect-a-thon
formatCodes</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Name>
+ <rim:LocalizedString value="CDAR2/IHE 1.0"/>
+ </rim:Name>
+ </rim:Classification>
+ <rim:Classification id="cl05"
classificationScheme="urn:uuid:f33fb8ac-18af-42cc-ae0e-ed0b0bdb91e1"
classifiedObject="Document01" nodeRepresentation="Outpatient">
+ <rim:Slot name="codingScheme">
+ <rim:ValueList>
+ <rim:Value>Connect-a-thon
healthcareFacilityTypeCodes</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Name>
+ <rim:LocalizedString value="Outpatient"/>
+ </rim:Name>
+ </rim:Classification>
+ <rim:Classification id="cl06"
classificationScheme="urn:uuid:cccf5598-8b07-4b77-a05e-ae952c785ead"
classifiedObject="Document01" nodeRepresentation="General Medicine">
+ <rim:Slot name="codingScheme">
+ <rim:ValueList>
+ <rim:Value>Connect-a-thon
practiceSettingCodes</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Name>
+ <rim:LocalizedString value="General Medicine"/>
+ </rim:Name>
+ </rim:Classification>
+ <rim:Classification id="cl07"
classificationScheme="urn:uuid:f0306f51-975f-434e-a61c-c59651d33983"
classifiedObject="Document01" nodeRepresentation="34133-9">
+ <rim:Slot name="codingScheme">
+ <rim:ValueList>
+ <rim:Value>LOINC</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Name>
+ <rim:LocalizedString value="Outpatient Evaluation
And Management"/>
+ </rim:Name>
+ </rim:Classification>
+ <rim:ExternalIdentifier id="ei01"
registryObject="Document01"
identificationScheme="urn:uuid:58a6f841-87b3-4a3e-92fd-a8ffeff98427"
value="111111111^^&amp;2.16.840.1.113883.4.1&amp;ISO">
+ <rim:Name>
+ <rim:LocalizedString
value="XDSDocumentEntry.patientId"/>
+ </rim:Name>
+ </rim:ExternalIdentifier>
+ <rim:ExternalIdentifier id="ei02"
registryObject="Document01"
identificationScheme="urn:uuid:2e82c1f6-a085-4c72-9da3-8640a32e42ab"
value="1.3.6.1.4.1.21367.2005.3.9999.32">
+ <rim:Name>
+ <rim:LocalizedString
value="XDSDocumentEntry.uniqueId"/>
+ </rim:Name>
+ </rim:ExternalIdentifier>
+ </rim:ExtrinsicObject>
+ <rim:RegistryPackage id="SubmissionSet01">
+ <rim:Slot name="submissionTime">
+ <rim:ValueList>
+ <rim:Value>20041225235050</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Slot name="intendedRecipient">
+ <rim:ValueList>
+ <!--rim:Value>|
john....@happyvalleyclinic.nhindirect.org^Smith^John^^^Dr^^^&amp;1.3.6.1.4.1.21367.3100.1&amp;ISO</rim:Value-->
+ <rim:Value>|
nhi...@nologs.org^Smith^John^^^Dr^^^&amp;1.3.6.1.4.1.21367.3100.1&amp;ISO</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Name>
+ <rim:LocalizedString value="Physical"/>
+ </rim:Name>
+ <rim:Description>
+ <rim:LocalizedString value="Annual physical"/>
+ </rim:Description>
+ <rim:Classification id="cl08"
classificationScheme="urn:uuid:a7058bb9-b4e4-4307-ba5b-e3f0ab85e12d"
classifiedObject="SubmissionSet01">
+ <rim:Slot name="authorPerson">
+ <rim:ValueList>
+ <rim:Value>Sherry Dopplemeyer</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Slot name="authorInstitution">
+ <rim:ValueList>
+ <rim:Value>Cleveland Clinic</rim:Value>
+ <rim:Value>Berea Community</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Slot name="authorRole">
+ <rim:ValueList>
+ <rim:Value>Primary Surgon</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Slot name="authorSpecialty">
+ <rim:ValueList>
+ <rim:Value>Orthopedic</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ </rim:Classification>
+ <rim:Classification id="cl09"
classificationScheme="urn:uuid:aa543740-bdda-424e-8c96-df4873be8500"
classifiedObject="SubmissionSet01" nodeRepresentation="History and
Physical">
+ <rim:Slot name="codingScheme">
+ <rim:ValueList>
+ <rim:Value>Connect-a-thon
contentTypeCodes</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ <rim:Name>
+ <rim:LocalizedString value="History and Physical"/>
+ </rim:Name>
+ </rim:Classification>
+ <rim:ExternalIdentifier id="ei03"
registryObject="SubmissionSet01"
identificationScheme="urn:uuid:96fdda7c-d067-4183-912e-bf5ee74998a8"
value="1.3.6.1.4.1.21367.2005.3.9999.33">
+ <rim:Name>
+ <rim:LocalizedString
value="XDSSubmissionSet.uniqueId"/>
+ </rim:Name>
+ </rim:ExternalIdentifier>
+ <rim:ExternalIdentifier id="ei04"
registryObject="SubmissionSet01"
identificationScheme="urn:uuid:554ac39e-e3fe-47fe-b233-965d2a147832"
value="3670984664">
+ <rim:Name>
+ <rim:LocalizedString
value="XDSSubmissionSet.sourceId"/>
+ </rim:Name>
+ </rim:ExternalIdentifier>
+ <rim:ExternalIdentifier id="ei05"
registryObject="SubmissionSet01"
identificationScheme="urn:uuid:6b5aea1a-874d-4603-a4bc-96a0a7b38446"
value="111111111^^^&amp;2.16.840.1.113883.4.1&amp;ISO">
+ <rim:Name>
+ <rim:LocalizedString
value="XDSSubmissionSet.patientId"/>
+ </rim:Name>
+ </rim:ExternalIdentifier>
+ </rim:RegistryPackage>
+ <rim:Classification id="cl10"
classifiedObject="SubmissionSet01"
classificationNode="urn:uuid:a54d6aa5-d40d-43f9-88c5-b4633d873bdd"/>
+ <rim:Association id="as01" associationType="HasMember"
sourceObject="SubmissionSet01" targetObject="Document01">
+ <rim:Slot name="SubmissionSetStatus">
+ <rim:ValueList>
+ <rim:Value>Original</rim:Value>
+ </rim:ValueList>
+ </rim:Slot>
+ </rim:Association>
+ </rim:RegistryObjectList>
+ </lcm:SubmitObjectsRequest>
+ <ns6:Document
id="Document01">JVBERi0xLjQKJcfsj6IKNSAwIG9iago8PC9MZW5ndGggNiAwIFIvRmlsdGVyIC9GbGF0ZURlY29kZT4+CnN0cmVhbQp4nI1QTUvDQBDFZPO1DWmb1Ko9zXFzcN3vj6sggrdqbsZTwV6M0Hjw75uESosnGQbmvTcD894BGBUK2Fi/w67Dd88W9l+YwePQe3zAinJjjJ3083nXwX0zrDvgHJp3zCeWA3dgjaTWeWg6/Eouaiso41KTIERRnKRZ+4mSGQryoO2LZJ4tlgPR9mWepKgKy3RRrWrBqDfaE5Rc1kpRJp0maI1WNTfUWyPIqgpPl1dlfcuotMIZT64HwJUTmipyMx1z70lVoHgTZ+t4U781T/ihwVssqOejm29sNUiuFTUCOizUGfzAL//IgDPwfzOQliovjxmM1oM4msyH0SyPx4e9ZUwLEqRtP7CzII+KLM3mUbQYVWe0G1wvy9PDW/wDE6RKeGVuZHN0cmVhbQplbmRvYmoKNiAwIG9iagoyOTAKZW5kb2JqCjQgMCBvYmoKPDwvVHlwZS9QYWdlL01lZGlhQm94IFswIDAgNjEyIDc5Ml0KL1JvdGF0ZSAwL1BhcmVudCAzIDAgUgovUmVzb3VyY2VzPDwvUHJvY1NldFsvUERGIC9UZXh0XQovRXh0R1N0YXRlIDEyIDAgUgovRm9udCAxMyAwIFIKPj4KL0NvbnRlbnRzIDUgMCBSCj4+CmVuZG9iagozIDAgb2JqCjw8IC9UeXBlIC9QYWdlcyAvS2lkcyBbCjQgMCBSCl0gL0NvdW50IDEKPj4KZW5kb2JqCjEgMCBvYmoKPDwvVHlwZSAvQ2F0YWxvZyAvUGFnZXMgMyAwIFIKL01ldGFkYXRhIDIwIDAgUgo+PgplbmRvYmoKNyAwIG9iago8PC9UeXBlL0V4dEdTdGF0ZQovT1BNIDE+PmVuZG9iagoxMiAwIG9iago8PC9SNwo3IDAgUj4+CmVuZG9iagoxMyAwIG9iago8PC9SOAo4IDAgUi9SMTAKMTAgMCBSPj4KZW5kb2JqCjE2IDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMzAxPj5zdHJlYW0KeJxdkk1ugzAQhfecghsQGxgnUjSbZJNFq6rtBRwzRCwCiJBFb1+YR6ZSLfFJ/rD5eX7F6XK+9N2cFx/TkL5kztuubyZ5DM8pSX6VW9dnzudNl+Ztpkz3OGbF6S2O3z+j5MsCaTF/j3cpPh2pcdiThkYeY0wyxf4m2XG3DD62y+BM+ubfbU/YdW3/ljs2VsSqPBvpAFWykRJUxUaqoWo2lhGK2Oh3UIGNvoXas5H2UAc20rYqspEaqCsbaXtjYmMooRo2kkAJGylAtWysKlVux0bCs5wmBQb8ttOkwLBt1KRAclCaFBg8lCYF1pvSpEDCcThNCvT4eqdJgQF5OU0KrBG006TA0mkfXge/VmPt2atWeXpOk/SzllHLtpas68X6Og7juitfruwXN/e4CAplbmRzdHJlYW0KZW5kb2JqCjggMCBvYmoKPDwvQmFzZUZvbnQvRURXTEtSK2YtMC0wL0ZvbnREZXNjcmlwdG9yIDkgMCBSL1RvVW5pY29kZSAxNiAwIFIvVHlwZS9Gb250Ci9GaXJzdENoYXIgMS9MYXN0Q2hhciAyNi9XaWR0aHNbIDU3NSAyNzggMjc4IDYxNSAzMzcgMzE4IDMzNyA2MzQgNjEyIDk3NCAyNzggNTIxIDYzNCA2MzUgNzcwCjU1MCA2MzQgMzkyIDYxMyA0MTEgNjk1IDM1MiAzMTggNTkyIDYwMyA2MzZdCi9FbmNvZGluZyAxNyAwIFIvU3VidHlwZS9UcnVlVHlwZT4+CmVuZG9iagoxNyAwIG9iago8PC9UeXBlL0VuY29kaW5nL0Jhc2VFbmNvZGluZy9XaW5BbnNpRW5jb2RpbmcvRGlmZmVyZW5jZXNbCjEvdW5pMDA0Ni91bmkwMDY5L3VuaTAwNkMvdW5pMDA2NS91bmkwMDNBL3VuaTAwMjAvdW5pMDAyRi91bmkwMDY4L3VuaTAwNkYvdW5pMDA2RC91bmkwMDZBL3VuaTAwNzMvdW5pMDA2RS91bmkwMDY3L3VuaTAwNDQvdW5pMDA2MwovdW5pMDA3NS91bmkwMDc0L3VuaTAwNjEvdW5pMDA3Mi91bmkwMDUyL3VuaTAwNjYvdW5pMDAyRS91bmkwMDc4L3VuaTAwNTAvdW5pMDAzMV0+PgplbmRvYmoKMTggMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAyNTM+PnN0cmVhbQp4nF2SQW7DIBBF95yCG9hgB9tSNJt0k0Wjqu0FMAwRi2BEnEVuX5tpplKReBIPZhZ/aE7nt3OKq2w+yuK+cJUhJl/wvjyKQznjNSahtPTRrb+nSnezWTSnd5u/nxnl9gADnS/2hs2nGqtRVOMWj/dsHRabriiO7bbgGLYFApP/d60GqprD33MFzN5BVRqYJpDqgDn0pHpgDh2pAzB1S8pUNdRehtQIzEGTmoBpDqQsMI0iNQPTTKQcMA2S8sA0nhQC04ykAjA1tVctMDtLqsZC1NRL1ViIeqohv9Lc896H95qVdI9SMK11wnWC++RiQv4Eecl7ldy2+AFwAZUICmVuZHN0cmVhbQplbmRvYmoKMTAgMCBvYmoKPDwvQmFzZUZvbnQvRFVDUkdLK2YtMS0wL0ZvbnREZXNjcmlwdG9yIDExIDAgUi9Ub1VuaWNvZGUgMTggMCBSL1R5cGUvRm9udAovRmlyc3RDaGFyIDEvTGFzdENoYXIgMTgvV2lkdGhzWyA2MDIgNjAyIDYwMiA2MDIgNjAyIDYwMiA2MDIgNjAyIDYwMiA2MDIgNjAyIDYwMiA2MDIgNjAyIDYwMgo2MDIgNjAyIDYwMl0KL0VuY29kaW5nIDE5IDAgUi9TdWJ0eXBlL1RydWVUeXBlPj4KZW5kb2JqCjE5IDAgb2JqCjw8L1R5cGUvRW5jb2RpbmcvQmFzZUVuY29kaW5nL1dpbkFuc2lFbmNvZGluZy9EaWZmZXJlbmNlc1sKMS91bmkwMDRDL3VuaTAwNkYvdW5pMDA3NC91bmkwMDczL3VuaTAwMjAvdW5pMDA2Ni91bmkwMDY3L3VuaTAwNzIvdW5pMDA2NS91bmkwMDYxL3VuaTAwNjkvdW5pMDA2RS91bmkwMDZEL3VuaTAwNjgvdW5pMDAyMS91bmkwMDNBCi91bmkwMDJEL3VuaTAwMjldPj4KZW5kb2JqCjkgMCBvYmoKPDwvVHlwZS9Gb250RGVzY3JpcHRvci9Gb250TmFtZS9FRFdMS1IrZi0wLTAvRm9udEJCb3hbLTE3IC0yMDggODg5IDc1OV0vRmxhZ3MgNAovQXNjZW50IDc1OQovQ2FwSGVpZ2h0IDc1OQovRGVzY2VudCAtMjA4Ci9JdGFsaWNBbmdsZSAwCi9TdGVtViAxMzMKL01pc3NpbmdXaWR0aCA2MDAKL0ZvbnRGaWxlMiAxNCAwIFI+PgplbmRvYmoKMTQgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlCi9MZW5ndGgxIDcwNTIvTGVuZ3RoIDUwNjI+PnN0cmVhbQp4nOVYe1gUV5a/t869Vf2mq+nm/WhoGkRFSCMqPkKHKFE0BiMxYsYZVCROJgbUGGPQoHEETXRwVDAao4xRE9EYQow2ikYnjI8oeYziN67OOlGyjjvEMBnyGITLnio0j/l2d/a//fbbqq5bdU/dxzm/86wmlBBiJcsIkLyHJqf6iH5ElGIzZdbcGaV9/bA/E0KfmvXM027y8+hMJFzBvigufXzuvMHPPEGIhH2y9/EnFxf3jTcOJiRoyZzZM4q+tDe2EhKZj8Qhc5BgCchPEgKrsJ8wZ+7Tz97Z7zQ2Tz5ZMmvGnf3qsRk2d8azpWyVPA/H78O++6kZc2ffGT8Vm9DSkgVP9/UjB2vvS+fPLh2h/BUf4RwhfA7NIAFyFs8TpI5spbuxp/E3Dym1UgNZSRYi5X16lq6WUpC2m3SQ8ziykpyFOkZoLklHKiGXuEQ6aT45gGtkUifNVGRG2ER2gD3MAuwGayFD2QLWwgrZApoOO/gUvhuvTPid5CBnSCwJ0KtkATkMNyEdmthoZiNXoQXqyGe4C8P1z5IqspOUIS9OWkLKpTLpYaSc4i1kC54l+L6FbqPnkbvDdAVpJS8Dk8aSbbQV5TpLviYrIF8qR5nTpWLk/xSu1YLzt5AFjPBWaiJCGoA05B73mqm30ZDCW/Wzg5TjzvlkpxyQnYoHd9EQ203fp+3yBlJLzsNPYB5cpiuZh73BxpKqPgSgkFTh2lu0OXIxXYyya2eZtrq0iBXSOnKTFSozce3faRLhngekh1GiYtKE1yLZjjKNoCthNXKqvY0mLUouS8X5uIKyFKUmpAQyyBP4VEb2kwaSAjWkClfS5ZWH8q9x5lb2KcpcRddKX5MWGE2SSTG7hVgTJyE1hBxSZM5AomSg214veccV1fsnTXWfLohLGfgPXbddcdeTvHrrYnegtzdvKovkBfU8qh68hnrm9Xz6X738NGXg+Lyp7vqeMaPvrDqmcDTSJk/FR62HZKSPGa2/0zat5178jSusd8+a437R/qJn+Iv22cNT0J1Q7rkiGp3x2jcXuyZZ52uUHx2ROiUS8skAModYiETsZDMxEMJcUgjeWUBa5u+9LaDLCX/3wrc++KYGvrbBVwI6BfzNC1/a4K810OGFL168j38h4FYNfF4D7V3wly74dwE3h8Ofs+GGgH/zwWdtk/lnNdCGA9smw/Vrqfx6F1xLhU8F/EnAVR/8qxP+WANXBFx2wL8shUtH4A8CLuLwi0uh9cIDvHUpXHgAzv8+kp8X8PtI+ETAxwI+EvChgJYaOHc2hp8TcDYGPvDBGQEnV6r8ZBT8LgSaBbwv4LcCTgg4LuA9AccEHBXQJOCIgMMqNFZ4eaOAwKEjPCDg0MHp/NAROLSMHXzXyw9O9/fCQT971wsHBLxTAw0C3hZQL+AtAfuL4E0b7Nvr5fuKYG+dg+/1Qp0D9iDTe7rgDQGvC9gtYJcDdgp4bYeNv+aDHTb4TRHU4pDaGtguYNurFr5NwKsW2PpKON9aBK9ssfNXwmGLHTab4GUBm2qsfJOAGitU46TqGti4wcY39oMNNljfBb9ed4T/WsC6qul83RFYt4xV/crLq6ZDlZ/9ygtrBax5aRBfI+ClQfAiivnifbB6lZmvdsIqM1QiobIIKhCpCi+sVOGXAla8oPIVAl5QYbmAZQLKBfh7n1+6lD8vYOlSWFIEZfkuXuaF5wQsFvCsDRZZ4BkTLBTwdBcs6IL5XTCvC0oFlAh4SsCTcfALAU+o2fyJyfBzAXOWwuPYKRYwW0CRgFkCZgqYMRwKu+CnFpgu4DEB0wQUTDXxgi6YaoJHQ8L5oz6YIuAR3PmRbMh3wWRq55PD4GEnTMoN5pME5JnhIQETH7TziQIetMMEAePxzXgBuePsPDcYxkVb+Tg7jLXCAwJyamBMDYwWcL+Uwu/vguwjcN948AvIEnDvKAe/1wmjRgbxUQ4YOcLKR/p7g2CEFYYLyBQwbKiTD+uCoUPsfKgThmSY+RA7ZJhhcAykW8F3j5n7BNxjhrRUM0+zQqoZBqUY+SA7pBhhoA8G9PfyAUXQP9nB+3sh2QH9kry8332Q5IVEr5knBoHXDAkCPALigyAO5YxzgLsIYrsgBkWIKYJoK0QhglECIrsgIhvCsRMuIKwIQhGpUAEhOCkkHFwCnAKCBThwgEOAirKq2WBfCkFFYBNgtYRwqwALjraEgFmAyQ5GAQYcZhCgOEEuAoYvGVqAC5AKAiOfnUspQO1ABNAALVq5lg74v3CQ/20G/tsjGiNvsahhxXwnVk0KifBb2G0i36YGXi4xktp8of0eYr/QfqE9LViNU71xalwxI90LILL7M1Gj2L79cr6cjLH8DEZuD28lRpLsd8jVTKomy9mbBk4ViCLMZO9u911ovoektne222+lNQSZKZ0eHOfC5fDynIFpPaVSXk/9B7y1Toyt6xmKqRcrAkIXy06drwF+m3yMvU2aJE4NjOQY7N0j2324YFt3e5rfbDf6jXnGQmOpkeO66apHTXd5TgTwYIW3a2XnTS0nfb9e/CGySaIGksOQMY2rNL/Vzv08jxfyUt7B5b5FcAHZ+fd2jZd5vddZOdYETsxcpf4E4qLGCsMq7tpDeaOFHglrdAQsa6IiXZLBZSDjJUfQmChcurO9WXVkIoBtne1t9lt4dt5CQpo/OSu6NLo2+uPojmieRbJolpTlyorkA5VUQ6pxoKmElNASqcRVEmmcPo9Op664GJruGzLUZaMeN1HtJN1HlEHUEy8rrLy7wdJy6IlTM2d9/AvRKU7R5O5rVAlIu1ZtabRJP5127NTgwfv7D6TDqIkG0/vFH5s3Hdi/TZOpA/F4n3l0fKMQ3xVsN1mB+AIjYd/hizKkDUUwNUA7zuMhBPMIouf43mypAXUOJMXvJBFUolIEEMiWtqPuJUIhtTlTEx5XwCJCsfPPtasgnqZTj2So6/m2jrf+fS7R1zqM9lOEugkmg/3hYCRgo3KlTQ1YNpmoZCATrUaDOcepmVGnprCR7Z3N7aojNDOtodCFpkRR44MTEQ+Xpnr1XkQrhBUFliyp3tfYmP3OwhMnpZ09P5G2bd92bGdPpezs2Ta76Iu7el2IejWTUJLrD5YbHaTREnCsCTM6giaBwzUmTFdjnwrRcv2erPAyUiaXK+WGcmO5qdxcZim3ltvKg8rt5WqZoza8I1xFfpATZwiqLGNwYpJP05gnXmulBRv37a3esG/fhg7qELc6/iq+oCpcvXHmzI0/nz51c6s4LdrF56jETNSVkw67i40SjTzGk2n+RNlhDAsicrTislRGuyEQ2RRuV4gaZDDIeaohKC8qzBCR49GA6u7ubtetL3XkyLbOkc3tPh0wf3BaQl5CacK6hFo830u4mtCbYESOdcxcP8Txe0BdfYAmjzn+wlvHGucvrNrdOH/R2t2NjVn1i5/bC6uXPPPVNQ3e32zV4JW27Xjlvdd6Klnh/sdnLtH0K/VeFlN03zOTIDLaH2WWFGI7ZlEq+VHSZHnbbrBz+SErNVhIjl23vLZM3W/addRRikzNyVW/mqcWqqVqn5M75QE0Q8O4z9lfezfnnp9P0D1+zcXjW2dslvvd1PEr6b0OpxC/JHLDP9JqkWzmybExBqOkmCbHxsZkm8wxscxFKuhq5qxwrQ5rVFmjN6Cu6RdjMsdGKuThSINNMTjjx/SzdzdjIGzT2Mm849V28dUt+1e3NGB1G7d9roZmKnpbEN9AktA2/XOjTFHmKMsgdOyB5oGWEcYRphHmERazm7hpgtTP1M/cPzjVmerqH9Ivpl9ssjs5LiGpwlRhrrBUWB2aBJIkm2QzWMAKNggCO4RDBERCFIs2JqUmZyX/LLk8eVnyuuTa5I7ksOkEQ4ZLDw5ogrE0hrqcsic+MSlDjyFokKl0EM0YPAQ1Ci9NfGPa6tUzN2Y17/rmD9Pef7L45IwX1sze69/78p8+LD7Asvb365ef7x8XZ+u/efXWgx7PsYyMgknj87xBCdUvbNsX8wPfRXyDyZAf+27Tf+67bXd990Ch6yOX9I/e6/on3otmpTkv+q6YwqbpvtsPfdcTbok2OiqCQxqDoDHRE0hqMjYGHY2ITgwnBssDssPhHpOsKbCz3afFtea2do0Pu2jtM6+Dhf2X9a/tD8hNHyu6+4bapbjvoBtFMfzGS6rdgfyFZuDn8a7qjbt2bazeFRCia8a+SZO2PfzugcyGJR92d3+4pCEzII06feXK6VNXrvxFXBM3o2PeGdj/6HuPzZpJh1OgjA6fOatOi0GYO3k9xlEDUckgv4tUG5fTartBspsID7f6SJSROfQopPbZnR6TGwqD9biXrueDOG+cfk+mdEMnzaCx4lNxVmTT7bSB1og5Ik/M4Km3F9EwVP1AGrpbbBLLxPOiRtcfxkC4gTiGkyx/JPrBKmarsK4yaX4Qin4QoTisZKxzTIS9u813NxKKTs3s0SmDIu2RyyLXRdZGci1R3bW7u9lKj3pxaGk3Jr6a987Jk+/kvTrxwV3Te8RFmkLlR3awjH0DBlxvabk+YEBdQgIGIRt10OEeLWaQ/Ribp+p25SQj/FHfW9YaE21yBixoV07zRLSwHJcGT2ZfPdDm+868SlzHNfMKxozQF4zxwZOhcZVI92vm9WYgcP/bC0+cph/Rw9Lunhnbtx/bKZXdrt1XPKsD3tCw0QqRL/k25GGYP9zGDUGwh6i0yVBpMmMEYcRgd9g02x7ZjD/fHe3osRZtquGtvtyk1TjOkBHUhRtnIAfpKl1Ey8TK8QuOHm3dUVmJX2G/reqpXT1xy/bfS4VV9F49ZpIylD8F5TcRL2nyJ4XHmkONNrInVG60qe6K2MNRjR5UT6iFhEKY5mOxYHCOSUQozl1AG1d1ZprbOrtRXSex9lAz1Uyt9ngqLTotJi02zZ0WlxafleSP9sf4Y/1uf5w/Pi86LyYvNs+dF5cXn5dUmrQyujKmMrbSXRm3Mn5dUm1SR1LM3al3J92dUBhTGFvoLowrjSmNLXWXxi2LWRa7zL0sLmz6D7LhKDr0rgK0ABSXobuakqF7vHTs6r7lJZsbA4GsplX7zvbcptLrmwoP5s8+Nu1vHVJ6cdnMBZcOJE/oWV5XPOPEjqPHHeUvDRpUl5TUfScGQS5ipZI0v1M2Y0bEj0xbwNikmGQDMeQ4NNfX7QNrsgvntCLsQF7w9mAt+vTZ7PehJxRyY8cN3Pp6Y+PwwyuDB0XBAYd69lhPAwae4lmck7s+m48+G0yiyNv+DKNBAZOsAgOuMgbZMiMuYK5qo7PautzMuAyqkUSF2LgpPJypWU5TlIVF60kabTU0U+3z65GdmF4cmdr5w4qpL5f4Y7Rckv1cMOWEUy7JoGDWclGnFAKhzEu81CslQpKcqCQaEo3umCF0iJRDc6Q5fCFbyBcFr5JXKS/LLyuxmCAwKYQGe2AQHaCF3jh3CKYIDCV6dvDA2vvK7m259F7uS89e+YCepqR7Rc9qsb66er3UFLLueTGHltfM7FnNWy/+Ye1h6aGeW5UrVqzUdJCKwHyr13AF/ihupxbDHplWkk02uckkBStEMXKDNcg8Ad1lfL0pf2ojRm7/sILx9Tb9uff4sALdjZodOhptvm7M/T4tONODfleeq9YF0zUfkqOp/tWgeZJmRtK39bMepKnik8b6+v1HZefmvDmzqrpT4ZOqiUf2Il+Xkbn9RGCdqh7CApeGk7Dv6n6ttL2sFbU4bgTmscWskJjp/f4crsqKzFCjinbjDKtb/I6VqFnFkSbVaKLazWxSDIpRNRiUbJPCKDOQ97h050kyyBb7BU3S8fVB+Y+Nr7drjZr/GAor9wnu1ASXNcGbLzSjmvXK1hf6A+0b7lz883/sYx3tf9nEmCmCuUyJplHsHtMj7FFlqqnY9Ax9jj2jPG1ay14wbWbb2SZlvWmdaTfdw95iu5TXTLWmKBMwzo0mcwS4uMsYYU6GRO419je7rcNpJgzlg5UhxkxzmnUc5PAxxlyz31pAptACqQAe5VPkAmWKYYqxwJxnLbE+S8utr9CNyl66U6m3fmS9au21pqKNGSWPkeIv3UhZkfgFrbskDovDl+g7Yv4lmkyTWWHP1Z4TNCDGSrlSiJhHq+74FVur58JgMtwfhnlQS4cOu8mAwRazYZaqpUO9mOhu70NMcxotEbliXVmun7necnE9L/YZszfOx1xOptk53SDWbtmyVgyjp29TKnpviw94as9H6ysr1u++fvmP13reQM1+ivtPw/1NxO93ZUMtk2r5coXUGg2xchSQWGrWVBqk6Y1qOmxv7jMkn84Fqg3VciAIgpg0fWicyjO86Vr0FzRXbKazP6C53Tvr2IKxgbFdrXX6/6DxZAJ5mqwn3TQKz2z6PP1Y8kml4IafwHFG2AT2K3aOz+Rb5AS5VP6lkqNUKMf0CNT3j6r2Nasl8Qi8ZL1WRMXKigFVa7HaguyqI9jpCgkNC48g/y8ORvL1lmn4dET09mJLtRb7TG8lRAxNCV1QQSszoqbNxEKsxIZfJnbMHw693nCREPwiDMOaqA84inQJT4LzMAMUp6SlpOnfwHSd1v8fHoYfdztIR++PCHf+JWctpJhtIWekTHJCu1g7mSc1kA7pJVR8A2YeBznMPiPzlLPksJTZe4UNICUajTvJPDmZnGHFZB7294OHDGU3SBnk4rsqXO8TkoprXGZNZAQ7T87wULR3+Cc8azxJE869Xf/W4Z8FjfyKxPYJcfKs/bd3799c7Em3zjc+8kMJ/wMwPR0DCmVuZHN0cmVhbQplbmRvYmoKMTEgMCBvYmoKPDwvVHlwZS9Gb250RGVzY3JpcHRvci9Gb250TmFtZS9EVUNSR0srZi0xLTAvRm9udEJCb3hbMCAtMjE0IDU2MyA3NTldL0ZsYWdzIDQKL0FzY2VudCA3NTkKL0NhcEhlaWdodCA3NTkKL0Rlc2NlbnQgLTIxNAovSXRhbGljQW5nbGUgMAovU3RlbVYgODQKL01pc3NpbmdXaWR0aCA2MDIKL0ZvbnRGaWxlMiAxNSAwIFI+PgplbmRvYmoKMTUgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlCi9MZW5ndGgxIDU4MTYvTGVuZ3RoIDM5OTM+PnN0cmVhbQp4nOVYe3hURZY/dc+t2490uu/tdCeddydtCAJJmg4BA8E0j/AGEdQJTwMEjGgICvjKRMJkeSbYMGAAYTUig4CuZpQNjcGIENQZdFiEiIIOMuI4OJFlNYCLnWLOvY06zjf7+L79Y79vt25St865dU/9zq9OnarbwAAgFmoBYeJtk/MCYBT3p1TdNady1sKo7KoAYDPnPLTYe2GTyUaKjwEk/7yF91ROk+47C4C67sV77n90XrR/jAfA0rNi7qzyi2p4N0B8LSn7V5DCHJbiqX+Y5JsqKhc/Eu0ffwtVPe+vmjPrxnhBXa6c9chCvl/Opv40HngXzKqcewPfO1QlLKxatPjG+2X684UPzl048O2DJuofATAlQxiOGv972Hq669jCsFJaCtIPVxgO03PJ6BdmR9lq9hq1d0KE6jr4mlnxbTaAWm30bqmcQdoQbDPeDOEXsAQPwAn4DZyh1hesEOlddgIy2FmytvrHUbCNpMNUV2MblrJ0Vgk72EtksZrGrIKlEt2lSWT5Pfk4ad+DlXRtgB1QRW0dWR3h/wT2Qj10wWbpAkyl9mtwhPAIsEfHYB1whSztkQZL86jfEbL2FDzF6qADFsnArNTzHO+QepPVveQBwGzYxjv4Zp0PunfwS/QEIFUJKy6Tj7zQedvJDrC+0gQ4Qe9Xwx04HR/AM2y57JMfxgsQkgDLYD4c4x2KC0ImH4SUeexRucy4qnX/pIflMrYHLpDN2fgtyRmEbJvhMcBeaRKfwCeQz/NIt82oQ9FaUeE9vEa8r5cEGyWPwGJ6Ui2Pg82wnd7MJmYAqrCARq+Car42esEeunL4Wmwk+wYbLF8aDNukeaye0F4hNqtwOAygMVL5RVjO9hJuMNXAIt5BMQf7TAqXUWLQx6s2S1mjy5uDt5d635mSkdPnb0SvavI2w8Tm2Ee94evXJ5bKyXxKM09pxixzs5zlO/cfPTyX02fsxFJvmCWUDL9htqRsOCknl1JTl0hN+pLhxjN91GaeRX+jy5q9cyq8a9Q1voFr1LkDc4DWralSpALIx79bc93F23TNTwozNHGSDXrDfaBQlKiwBcwA/GdMAw7yfqmWuV/ZOIMPSWFuaASkuhZk5qJgQRZn1E5wUq0ZbdWoHRRYyOxGO/aVP4/kQ7JYLNSQZIMsqmMgQLXVsGcxepkpSJGZjLZi9OFGWzb0aGgkQ8OCUwQKgd01GBH4ncBrAfz3Vvy2Bq9eaeBXBV49KF+5PIVfacArtfLlrh788hS8HJS7euA3X+fxb67h13n4bwIvCfzXAF504VeN2EkQOwV2hq8fD16X/zwSv7xQzr9sxAvl+CeBX/wxmX8h8I/J+LnA8/fhZwL/0IrnPk3k567hp4l4thF/L/ATgR+fcfOPBZ5x4+lG/OhDN/9I4IdrY/iHbjxVgx8MxA4SOgbiSYEn3rfyEwLft+Jxgf8i8NgajR9Lwd/F43sC323Eo/VZ/KjA3wr8TQ2+I/BtgW8JPPJULG8XeFjgIYFvCjxI9g668A0btr3eytsEvn5gBn+9FV+vlQ+0ZvEDM/BAUG7NwtcE7m/EcGgI3yewhW4t1/CfydZega+W4yvl+Gs7NjvxZYEviWA3/pPAFwW+4MQ9AnfvsvPdAdxlx+d3avz5nrhTw1/tyOG/qsEdOficwO0CnxXY9EwibyrHZ55W+TOJ+LSK/2jFbQK30iBbBT4Vi1s25/ItAjfn4iYaf1MjNj7ZyhsFPkmx9WQrPlkrb1yXxTfOwI1BeYPAXwpcT/L6VlyXhSEiIzQEnyBvn3Dh2hhsIEVDOdYTafVZuEbD1QJXCVwpcMVyja8QuFzDfxBYJ/AX2lD+i8m4TGDtI7j08Rq+VODjNViThj8XWG3HxwQ+LPAhgUsW2/gSBy4JMwielhfbcPFBeZETFwXlBwU+IHChwKoFk3lVIy6o7MkXTMbKnni/wPsCOF/gvQGsuIb3tOI8gXMFlgucMzuNzxE4G1Q+Ow1nCSwTeLfAmVNj+Ew7zijH6e/gNBKmuXBqDFJEl7rwZwLvEnhnciK/M4B3CJwscJLA22twosDbXDhB4HiWw8cLHNeKY3vimNEePmYAjh7m5KM9OKrEw0cJHEnSyHIcQdKIVizx4HBSDB+Aw4ZqfJgTh4WlYNAiDx3i4EM1HBqWgKQhQTsf4sAhYXaQpGCxjQftGAyzWpKKbRZebMPiMAsGy+VbBQ4mCIOvYZHAQT1xoMBCIriwHG/pm8RvGYsDBPbPcfH+AgvGYj9/Eu83FvPpli8wQB0DAvvS475J6E/CPGrleTDXEs9zWzGnTxzPcWFOWNKH7aNqvE8c9tHhNsq9e2Xx3gJ7Uc9eWXizNJDfLLCnwGyBPRyYFT+UZ5XgTQ70Ccx0OHimwAxvDs+oQW8Opo/FNBo5TWCqwBTiNkVgMs1KciImCUwU6BGYQBYSRmC8O4fHD0W3S+XuHHSpGEf94lzopPedAjXyXBuKKo2gaqhGuXPYbdzhQEeUO3usldttaI9yF0vcxVoxlrjbK9ssaNNja4AcI9BKnlgFWuLRrKJJoEKmFYHchUjO4TXaYHK4NBAZAWA5CCqyMCtfvpb1/r9T4H8bwP+w0LYqQYVolCv4DjoZmyD9gLEvAijM1cLMvE6SIa/9ZGdfUE92nuz0x2kZWlaGllEhQ2QRJkc+F40m+7dfP6jcHN2JT9E+rZ8yOHiCNmkTrJJZGvaFfooa6SQjeefJRL6W4c44dVQ6HinnHdc69ugYVl//TB5FZ6kYSABfME5pcEKDrc25xWNxOoaj032rR+3qjOgwznd1qhf9LFNxu+LzA/0L+vXIDjg1VfJlSprqlCoa1q1rWLtu3doLV698eeHKFTx7+oOOM2c6Pji9Tbwv/iDOiRMsh46maSxXx1tHeM38aYiDvkGPnZsd2AIaO2RusZpjLOS7ojrtLvVkUXukqD1QWEgedHYVtXcGtMJCP9P90Fzxg5jbl9mjQMsoyNDoCLZdzJy55Ni5Y3tEB+vNnxaHQt1NP5+9YedRqSzEbqUxO8hXhXzNhiXBYKxNssckpKeZLZLJmpCWnjY0Nc1jjUlLl91Qzw7Krnr3QU+DJjdktWlbeqZaY9KTTXBbsmIfbVJcmSU91a524uW85iws1OEZ9IjLF9XLF50JhaT105HLpNq/0hIKTUY9JZO5c5nP4E+nwe1SCH12QRoz2MyTcllBv/75AdrEb2uaXFM9fd+Y1Ws735/cMv+eA3c8tuKyueSZX57+7dSdcuHe3NzbJ48d47MnbavZ2erztRUUzJlS21eyp29Y+uzLGUY8HCZ+s+n0GQf9gklcZTZzi8IaYKtdOWSV4kxg4UqsI+anDJ8PRGiKA06dYmJWSWU6zz6dXx2ZnH18zni2TCwN6wTvflVxbbn9njmhSB4eD00I658bFE/VYpTsNOLpZhgVzE60pSVnW9BZHxdvaUiLb3Bgw01taY7DPQ/1yk4ExTZScTozRvWKkhkI6Dyeb9cDja6Oizq5xoT36+H7Pu7iXNKPtA2W7Cwaf8RbQkE+Tl25bOUToVVLV4YvfjFu5+TZTcOeXNVnc2X7l1+239+YF5YKj506dezYR6fFJxERSUluye2zvdlcM3M6G8hMzMwG3jV1vbGe2Hzir4780OA2WhWmGAQNN9nbLIdMVkUBs1M9ScGoc9bVefJdjVD6g1kqqEzVvOBlXs0Pfpav+rUgBNkwNahNhIlsojpRc85g0SAgXvPdtzIdt1w36LHRL7bs35/7Rt3wh/rjo7m9Pny3+4RcdubhpZk33eCVYreU8LghBUqCPSCeTsD1lrVKfAtTGmLZm4kNcW2xW1JRSlEt8QqMTnGqo1KNpduusxgN0PMGr10XnTpe5s6IMjrATSR6QVMhP+A0GehMcmnkszdeKj1Yee/haeI7cZp5L31wNSyvX7X8RVWaOVXZ984thft692aFLI7ZWFD8/sj23c36d+tywum7Mf8Lgr2sJkjy2jwOE7R4TA3OjHrvG6kUAZRfYplHTrRbFdtwr6y4b6UQ6GzXQ0AzQrH9fFckGgY6t05jQQVT/el+rz/Dn9kETaxJarI2xWyPb0po8jQlNiXZZ7AfYmRAwQDNV6CHRg8K3EGsIOpUQZTuNCa1DX72ucfu3/wS279/0Ku1L7z73TdX2YoNMw9Om9daWn9kcA+vlP/AwrkLT7x287juZTvL735ze+uh1BWP9u8Xzs6eNCmwITonr1CMDKc1ZoFYyA0mmlvA1m7dCocUqUXGcTFM4eNgrNVkp0V2vjNSpKfhzsD5iJFGM/QcRnkrg+W7ffQhdYpVRhawSnGOpYfDclkkLxTCodKwC9+v5WTiNA76BD0WO+pfOQ1am+2QlUkKjIm1KDEjXMRfQM/TeUU00ZRu9DTp06IL58dYk5P3z39gWX043HfXohd2Sy3dY6SWTU/se6F7pVy2q2zOOSN3VNJ4VTReJjwXzPY4HRbZBKnJislta/BiW/KhRNUEmsM8XpmgjXdMSPGMTyrxqV1jm213jG3W7phWuh+Srh+8ZUqkKELhRzOngyJURXr2puklcP7gSL/s537Fb/Kb/Ra/1R9THF+cUOwpTixOKk4uTilOLU6rxVq5ltcqtaZac62l1lobE4oPJYQ8ocRQUig5lBJKDaX52AxmOJbI/srZv/Va2pF575iVVbsKRkwctKtwzOjC55/PmFM8bi5eHFVyXJztflha9tWi6s+7l0rLLi3U73JZWVHxiB+4N/LoT7nf+ve57/y73Gv/BfeKq3uHQb5EOx9Ix4x93ALpQQeuVFbAKrOMJoYKWCmSOm/k6kgnJRgNfUhO+iT5qPtZ99GjvKP7AbGVze0OC5AYBY/0uZxtnC+Sg7HSdnhR3q5wliqD2bBk7KqGHR2kj12IUJGzxXFRKI5F82A5O4uVUh3Z0FqgSZIZyJT6jFOJX98eWLlk6b4q1e2gvtPF15itOGk1EHLTNtpsTCzGDB7ZGUNrINIZXduqgTze6XZJJl9/Z0E/iU1v2rRx46am5XV1irNTFJ09J4o6/8Te+uw8e0tH0QOGwuMQpsSZy+az30nx0nzpU3ThOHxftsp+eZJcIW80VmT0FwoXodXBJ9G/ojcklLliMlusMbZYu0PVnPD/qsgw3KhlnZ9LzuvXqWZ6TbJs1BIxJlPMKRQpZoo8K+VvG82jHRyg0h4YJYzRXf8tkA6p1Bfm5fTN8etaYOt0+b9ZzD8VL8Gl6z9R3PiVST4OFXSqXQ36L4xA67Ca9uRqWE5Z9zBlqMMUihcoOqdH5/o/Kbo9ady7v25++bW7HUWXIT0K4K2j6pHv79+t6Wa8zXznX6P7C2hUtZUKZW5kc3RyZWFtCmVuZG9iagoyMCAwIG9iago8PC9UeXBlL01ldGFkYXRhCi9TdWJ0eXBlL1hNTC9MZW5ndGggMTQyMz4+c3RyZWFtCjw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+Cjw/YWRvYmUteGFwLWZpbHRlcnMgZXNjPSJDUkxGIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0nYWRvYmU6bnM6bWV0YS8nIHg6eG1wdGs9J1hNUCB0b29sa2l0IDIuOS4xLTEzLCBmcmFtZXdvcmsgMS42Jz4KPHJkZjpSREYgeG1sbnM6cmRmPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjJyB4bWxuczppWD0naHR0cDovL25zLmFkb2JlLmNvbS9pWC8xLjAvJz4KPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9JzYwMWJlYmI2LWE4MmEtMTFlYS0wMDAwLWVhOWM3MDdlMjIzYicgeG1sbnM6cGRmPSdodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvJyBwZGY6UHJvZHVjZXI9J0dQTCBHaG9zdHNjcmlwdCA4LjcxJy8+CjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSc2MDFiZWJiNi1hODJhLTExZWEtMDAwMC1lYTljNzA3ZTIyM2InIHhtbG5zOnhtcD0naHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyc+PHhtcDpNb2RpZnlEYXRlPjIwMTAtMDYtMDRUMTQ6MTc6MzMtMDU6MDA8L3htcDpNb2RpZnlEYXRlPgo8eG1wOkNyZWF0ZURhdGU+MjAxMC0wNi0wNFQxNDoxNzozMy0wNTowMDwveG1wOkNyZWF0ZURhdGU+Cjx4bXA6Q3JlYXRvclRvb2w+Y2Fpcm8gMS44LjggKGh0dHA6Ly9jYWlyb2dyYXBoaWNzLm9yZyk8L3htcDpDcmVhdG9yVG9vbD48L3JkZjpEZXNjcmlwdGlvbj4KPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9JzYwMWJlYmI2LWE4MmEtMTFlYS0wMDAwLWVhOWM3MDdlMjIzYicgeG1sbnM6eGFwTU09J2h0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8nIHhhcE1NOkRvY3VtZW50SUQ9JzYwMWJlYmI2LWE4MmEtMTFlYS0wMDAwLWVhOWM3MDdlMjIzYicvPgo8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0nNjAxYmViYjYtYTgyYS0xMWVhLTAwMDAtZWE5YzcwN2UyMjNiJyB4bWxuczpkYz0naHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8nIGRjOmZvcm1hdD0nYXBwbGljYXRpb24vcGRmJz48ZGM6dGl0bGU+PHJkZjpBbHQ+PHJkZjpsaSB4bWw6bGFuZz0neC1kZWZhdWx0Jz4oUmVmZXJyYWxEb2N1bWVudC50eHQpPC9yZGY6bGk+PC9yZGY6QWx0PjwvZGM6dGl0bGU+PGRjOmNyZWF0b3I+PHJkZjpTZXE+PHJkZjpsaT4oamVpc2luZyk8L3JkZjpsaT48L3JkZjpTZXE+PC9kYzpjcmVhdG9yPjwvcmRmOkRlc2NyaXB0aW9uPgo8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9J3cnPz4KZW5kc3RyZWFtCmVuZG9iagoyIDAgb2JqCjw8L1Byb2R1Y2VyKEdQTCBHaG9zdHNjcmlwdCA4LjcxKQovQ3JlYXRpb25EYXRlKEQ6MjAxMDA2MDQxNDE3MzMtMDUnMDAnKQovTW9kRGF0ZShEOjIwMTAwNjA0MTQxNzMzLTA1JzAwJykKL0NyZWF0b3IoY2Fpcm8gMS44LjggXChodHRwOi8vY2Fpcm9ncmFwaGljcy5vcmdcKSkKL0F1dGhvcihcKGplaXNpbmdcKSkKL1RpdGxlKFwoUmVmZXJyYWxEb2N1bWVudC50eHRcKSk+PmVuZG9iagp4cmVmCjAgMjEKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwNjEzIDAwMDAwIG4gCjAwMDAwMTM2MDcgMDAwMDAgbiAKMDAwMDAwMDU1NCAwMDAwMCBuIAowMDAwMDAwMzk0IDAwMDAwIG4gCjAwMDAwMDAwMTUgMDAwMDAgbiAKMDAwMDAwMDM3NSAwMDAwMCBuIAowMDAwMDAwNjc4IDAwMDAwIG4gCjAwMDAwMDExNTkgMDAwMDAgbiAKMDAwMDAwMjQ4OCAwMDAwMCBuIAowMDAwMDAyMDMxIDAwMDAwIG4gCjAwMDAwMDc4MzMgMDAwMDAgbiAKMDAwMDAwMDcxOSAwMDAwMCBuIAowMDAwMDAwNzQ5IDAwMDAwIG4gCjAwMDAwMDI2ODggMDAwMDAgbiAKMDAwMDAwODAzMSAwMDAwMCBuIAowMDAwMDAwNzkwIDAwMDAwIG4gCjAwMDAwMDE0MjEgMDAwMDAgbiAKMDAwMDAwMTcxMCAwMDAwMCBuIAowMDAwMDAyMjYzIDAwMDAwIG4gCjAwMDAwMTIxMDcgMDAwMDAgbiAKdHJhaWxlcgo8PCAvU2l6ZSAyMSAvUm9vdCAxIDAgUiAvSW5mbyAyIDAgUgovSUQgWzxERENCM0EwNEJDNEUzQzE3QzFFMjAxNEZDQ0QzQkREOD48RERDQjNBMDRCQzRFM0MxN0MxRTIwMTRGQ0NEM0JERDg+XQo+PgpzdGFydHhyZWYKMTM4MzUKJSVFT0YK</ns6:Document>
+ </ns6:ProvideAndRegisterDocumentSetRequest>
+
+
=======================================
--- /dev/null
+++ /java/tags/xd-1.0.3/src/main/resources/response.xml Tue Oct 28 12:15:16
2014 UTC
@@ -0,0 +1,1 @@
+<?xml version="1.0" encoding="UTF-8"
standalone="yes"?><RegistryResponseType
status="urn:oasis:names:tc:ebxml-regrep:ResponseStatusType:Success"
xmlns:ns2="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0"
xmlns="urn:oasis:names:tc:ebxml-regrep:xsd:rs:3.0"
xmlns:ns4="urn:oasis:names:tc:ebxml-regrep:xsd:lcm:3.0"
xmlns:ns3="urn:oasis:names:tc:ebxml-regrep:xsd:query:3.0"/>
=======================================
--- /dev/null
+++ /java/tags/xd-1.0.3/src/main/webapp/WEB-INF/cxf-servlet.xml Tue Oct 28
12:15:16 2014 UTC
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:jaxws="http://cxf.apache.org/jaxws"
+ xmlns:soap="http://cxf.apache.org/bindings/soap"
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
+ http://cxf.apache.org/jaxws
+ http://cxf.apache.org/schemas/jaxws.xsd">
+
+ <jaxws:endpoint
+ id="XDR"
+ implementor="org.nhind.xdr.XDR"
+
wsdlLocation="WEB-INF/wsdl/XDS.b_DocumentRepositoryWSDLSynchMTOM.wsdl"
+ address="/DocumentRepository_Service">
+ </jaxws:endpoint>
+</beans>
+
=======================================
--- /dev/null
+++ /java/tags/xd-1.0.3/src/main/webapp/WEB-INF/web.xml Tue Oct 28 12:15:16
2014 UTC
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
+ http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
+ <display-name>Sample web service provider</display-name>
+ <listener>
+ <!-- For Metro, use this listener-class instead:
+
com.sun.xml.ws.transport.http.servlet.WSServletContextListener -->
+ <listener-class>
+ org.springframework.web.context.ContextLoaderListener
+ </listener-class>
+ </listener>
+ <!-- Remove below context-param element if using Metro -->
+ <context-param>
+ <param-name>contextConfigLocation</param-name>
+ <param-value>
+ classpath:META-INF/cxf/cxf.xml
+ classpath:META-INF/cxf/cxf-extension-soap.xml
+ classpath:META-INF/cxf/cxf-servlet.xml
+ </param-value>
+ </context-param>
+
+ <context-param>
+ <param-name>configService</param-name>
+
<param-value>http://localhost:8081/config-service/ConfigurationService</param-value>
+ </context-param>
+
+ <!-- Uncomment if using 'syslog' audit method -->
+ <!--
+ <context-param>
+ <param-name>auditHost</param-name>
+ <param-value>localhost</param-value>
+ </context-param>
+ <context-param>
+ <param-name>auditPort</param-name>
+ <param-value>514</param-value>
+ </context-param>
+ -->
+
+ <servlet>
+ <servlet-name>WebServicePort</servlet-name>
+ <!-- For Metro, use this servlet-class instead:
+ com.sun.xml.ws.transport.http.servlet.WSServlet -->
+
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
+ <load-on-startup>1</load-on-startup>
+ </servlet>
+ <servlet-mapping>
+ <servlet-name>WebServicePort</servlet-name>
+ <url-pattern>/services/*</url-pattern>
+ </servlet-mapping>
+ <session-config>
+ <session-timeout>60</session-timeout>
+ </session-config>
+</web-app>
+
=======================================
--- /dev/null
+++ /java/tags/xd-1.0.3/src/main/webapp/index.jsp Tue Oct 28 12:15:16 2014
UTC
@@ -0,0 +1,13 @@
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>JSP Page</title>
+ </head>
+ <body>
+ <h1>Hello World!</h1>
+ </body>
+</html>
=======================================
--- /dev/null
+++
/java/tags/xd-1.0.3/src/test/java/com/gsihealth/auditclient/AuditMessageGeneratorTest.java
Tue Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2010, NHIN Direct Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the the NHIN Direct Project (nhindirect.org)
+ * nor the names of its contributors may be used to endorse or promote
products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package com.gsihealth.auditclient;
+
+import java.io.File;
+import java.util.UUID;
+import java.util.logging.Logger;
+
+import junit.framework.TestCase;
+
+/**
+ * Test class for methods in the AuditMessageGenerator class.
+ */
+public class AuditMessageGeneratorTest extends TestCase
+{
+ private static final Logger LOGGER =
Logger.getLogger(AuditMessageGeneratorTest.class.getPackage().getName());
+
+ /**
+ * Constructor.
+ *
+ * @param testName
+ * The test name
+ */
+ public AuditMessageGeneratorTest(String testName)
+ {
+ super(testName);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see junit.framework.TestCase#setUp()
+ */
+ @Override
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see junit.framework.TestCase#tearDown()
+ */
+ @Override
+ protected void tearDown() throws Exception
+ {
+ super.tearDown();
+ }
+
+ /**
+ * Test the provideAndRegisterAudit method.
+ *
+ * @throws Exception
+ */
+ public void testAuditMessageGenerator() throws Exception
+ {
+ AuditMessageGenerator amg = new
AuditMessageGenerator(getLogfile());
+
amg.provideAndRegisterAudit("1", "2", "3", "4", "5", "6", "7", "8");
+ }
+
+ private String getLogfile() throws Exception
+ {
+ String file = File.createTempFile("xdaudit." +
UUID.randomUUID().toString(), ".log").getAbsolutePath();
+
+ LOGGER.info("Logging to file : " + file);
+
+ return file;
+ }
+}
=======================================
--- /dev/null
+++ /java/tags/xd-1.0.3/src/test/java/org/nhind/xdr/XDRTest.java Tue Oct 28
12:15:16 2014 UTC
@@ -0,0 +1,188 @@
+/*
+Copyright (c) 2010, NHIN Direct Project
+All rights reserved.
+
+Authors:
+ Vincent Lewis vincen...@gsihealth.com
+
+Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
+
+Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
+Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
distribution. Neither the name of the The NHIN Direct Project
(nhindirect.org).
+nor the names of its contributors may be used to endorse or promote
products derived from this software without specific prior written
permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+package org.nhind.xdr;
+
+import ihe.iti.xds_b._2007.ProvideAndRegisterDocumentSetRequestType;
+import ihe.iti.xds_b._2007.RetrieveDocumentSetRequestType;
+import ihe.iti.xds_b._2007.RetrieveDocumentSetResponseType;
+
+import java.io.File;
+import java.io.InputStream;
+import java.util.UUID;
+import java.util.logging.Logger;
+
+import javax.xml.bind.JAXBElement;
+import javax.xml.namespace.QName;
+
+import junit.framework.TestCase;
+import oasis.names.tc.ebxml_regrep.xsd.rs._3.RegistryResponseType;
+
+import org.nhind.xdr.config.XdConfig;
+import org.nhindirect.xd.routing.impl.RoutingResolverImpl;
+import org.nhindirect.xd.transform.util.XmlUtils;
+
+import com.gsihealth.auditclient.AuditMessageGenerator;
+
+/**
+ *
+ * @author vlewis
+ */
+public class XDRTest extends TestCase
+{
+ private static final Logger LOGGER =
Logger.getLogger(XDRTest.class.getPackage().getName());
+
+ /**
+ * Constructor
+ *
+ * @param testName The test name
+ */
+ public XDRTest(String testName) {
+ super(testName);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see junit.framework.TestCase#setUp()
+ */
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see junit.framework.TestCase#tearDown()
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ /**
+ * Test of documentRepositoryProvideAndRegisterDocumentSetB method, of
class XDR.
+ */
+ public void testDocumentRepositoryProvideAndRegisterDocumentSetB()
throws Exception {
+
System.out.println("documentRepositoryProvideAndRegisterDocumentSetB");
+ QName qname = new
QName("urn:ihe:iti:xds-b:2007", "ProvideAndRegisterDocumentSetRequestType");
+ ProvideAndRegisterDocumentSetRequestType body = null;
+ try {
+ String request = getTestRequest();
+ JAXBElement jb = (JAXBElement) XmlUtils.unmarshal(request,
ihe.iti.xds_b._2007.ObjectFactory.class);
+ body = (ProvideAndRegisterDocumentSetRequestType)
jb.getValue();
+ } catch (Exception x) {
+ x.printStackTrace();
+ fail("Failed unmarshalling request");
+ }
+
+ DocumentRepositoryAbstract instance = new XDR();
+
+ // Set test objects
+ instance.setAuditMessageGenerator(new
AuditMessageGenerator(getLogfile()));
+ // instance.setMailClient(new
SmtpMailClient("gmail-smtp.l.google.com", "lewis...@gmail.com", "hadron106"));
+ instance.setResolver(new RoutingResolverImpl());
+
+ XdConfig config = new XdConfig();
+ config.setMailHost("gmail-smtp.l.google.com");
+ config.setMailUser("lewis...@gmail.com");
+ config.setMailPass("hadron106");
+
+ instance.setConfig(config);
+
+ RegistryResponseType result =
instance.documentRepositoryProvideAndRegisterDocumentSetB(body);
+
+
+ if (result.getStatus().contains("Failure"))
+ {
+ // some organizational firewalls may block this test, so bail out
gracefully if that happens
+ return;
+ }
+
+ String sresult = null;
+
+ try {
+ qname = new
QName("urn:oasis:names:tc:ebxml-regrep:xsd:rs:3.0", "RegistryResponseType");
+
+ sresult = XmlUtils.marshal(qname, result,
oasis.names.tc.ebxml_regrep.xsd.rs._3.ObjectFactory.class);
+ } catch (Exception x) {
+ x.printStackTrace();
+ fail("Failed unmarshalling response");
+ }
+
+ // System.out.println(sresult);
+ assertTrue(sresult.indexOf("ResponseStatusType:Success") >= 0);
+
+ }
+
+ /**
+ * Test the documentRepositoryRetrieveDocumentSet method.
+ */
+ public void testDocumentRepositoryRetrieveDocumentSet() throws
Exception {
+ try {
+ DocumentRepositoryAbstract instance = new XDR();
+
+ // Set test objects
+ instance.setAuditMessageGenerator(new
AuditMessageGenerator(getLogfile()));
+ // instance.setMailClient(new
SmtpMailClient("gmail-smtp.l.google.com", "lewis...@gmail.com", "hadron106"));
+
+ XdConfig config = new XdConfig();
+ config.setMailHost("gmail-smtp.l.google.com");
+ config.setMailUser("lewis...@gmail.com");
+ config.setMailPass("hadron106");
+
+ instance.setConfig(config);
+
+ @SuppressWarnings("unused")
+ RetrieveDocumentSetResponseType response = null;
+ RetrieveDocumentSetRequestType body = new
RetrieveDocumentSetRequestType();
+
+ response =
instance.documentRepositoryRetrieveDocumentSet(body);
+ fail("Exception not thrown");
+ } catch (UnsupportedOperationException e) {
+ assertTrue(true);
+ }
+ }
+
+ /**
+ * Return the test request.xml as a string.
+ *
+ * @return the test request.xml as a string
+ * @throws Exception
+ */
+ private String getTestRequest() throws Exception {
+ InputStream is =
this.getClass().getResourceAsStream("/request.xml");
+ byte[] theBytes = new byte[is.available()];
+ is.read(theBytes);
+ return new String(theBytes);
+
+ }
+
+ private String getLogfile() throws Exception
+ {
+ String file = File.createTempFile("xdaudit." +
UUID.randomUUID().toString(), ".log").getAbsolutePath();
+
+ LOGGER.info("Logging to file : " + file);
+
+ return file;
+ }
+}
=======================================
--- /dev/null
+++ /java/tags/xd-1.0.3/src/wsdl/XDS.b_DocumentRepositoryWSDLSynchMTOM.wsdl
Tue Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="utf-8"?>
+<definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsa="http://www.w3.org/2005/08/addressing"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ihe="urn:ihe:iti:xds-b:2007"
xmlns:rs="urn:oasis:names:tc:ebxml-regrep:xsd:rs:3.0"
targetNamespace="urn:ihe:iti:xds-b:2007"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
name="DocumentRepository">
+ <documentation>IHE XDS.b Document Repository</documentation>
+ <types>
+ <xsd:schema elementFormDefault="qualified"
+ targetNamespace="urn:ihe:iti:xds-b:2007"
+ xmlns:ihe="urn:ihe:iti:xds-b:2007">
+
+ <xsd:include
schemaLocation="./schema/IHE/XDS.b_DocumentRepositoryMTOM.xsd"/>
+ </xsd:schema>
+
+ </types>
+ <wsp:Policy
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
wsu:Id="wsmtom_policy"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
+<wsoma:OptimizedMimeSerialization
xmlns:wsoma="http://schemas.xmlsoap.org/ws/2004/09/policy/optimizedmimeserialization"/>
+</wsp:Policy>
+ <message name="RetrieveDocumentSet_Message">
+ <documentation>Retrieve Document Set</documentation>
+ <part name="body" element="ihe:RetrieveDocumentSetRequest"/>
+ </message>
+ <message name="RetrieveDocumentSetResponse_Message">
+ <documentation>Retrieve Document Set Response</documentation>
+ <part name="body" element="ihe:RetrieveDocumentSetResponse"/>
+ </message>
+ <message name="ProvideAndRegisterDocumentSet-b_Message">
+ <documentation>Provide and Register Document Set</documentation>
+ <part name="body" element="ihe:ProvideAndRegisterDocumentSetRequest"/>
+ </message>
+ <message name="ProvideAndRegisterDocumentSet-bResponse_Message">
+ <documentation>Provide And Register Document Set
Response</documentation>
+ <part name="body" element="rs:RegistryResponse"/>
+ </message>
+
+
+ <portType name="DocumentRepository_PortType">
+ <operation name="DocumentRepository_RetrieveDocumentSet">
+ <input message="ihe:RetrieveDocumentSet_Message"
+ wsaw:Action="urn:ihe:iti:2007:RetrieveDocumentSet"/>
+ <output message="ihe:RetrieveDocumentSetResponse_Message"
+ wsaw:Action="urn:ihe:iti:2007:RetrieveDocumentSetResponse"/>
+ </operation>
+ <operation name="DocumentRepository_ProvideAndRegisterDocumentSet-b">
+ <input message="ihe:ProvideAndRegisterDocumentSet-b_Message"
+ wsaw:Action="urn:ihe:iti:2007:ProvideAndRegisterDocumentSet-b"/>
+ <output message="ihe:ProvideAndRegisterDocumentSet-bResponse_Message"
+
wsaw:Action="urn:ihe:iti:2007:ProvideAndRegisterDocumentSet-bResponse"/>
+ </operation>
+
+ </portType>
+ <binding name="DocumentRepository_Binding"
type="ihe:DocumentRepository_PortType">
+ <soap12:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
+ <wsp:PolicyReference
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
URI="#wsmtom_policy" required="true"/>
+ <operation name="DocumentRepository_ProvideAndRegisterDocumentSet-b">
+ <soap12:operation
soapAction="urn:ihe:iti:2007:ProvideAndRegisterDocumentSet-b"/>
+ <input>
+ <soap12:body use="literal"/>
+
+ </input>
+ <output>
+ <soap12:body use="literal"/>
+ </output>
+ </operation>
+ <operation name="DocumentRepository_RetrieveDocumentSet">
+ <soap12:operation soapAction="urn:ihe:iti:2007:RetrieveDocumentSet"/>
+ <input>
+ <soap12:body use="literal"/>
+ </input>
+ <output>
+ <soap12:body use="literal"/>
+ </output>
+ </operation>
+ </binding>
+ <service name="DocumentRepository_Service">
+ <port name="DocumentRepository_Port_Soap12"
binding="ihe:DocumentRepository_Binding">
+ <soap12:address
location="http://servicelocation/DocumentRepository_Service"/>
+ </port>
+ </service>
+</definitions>
=======================================
--- /dev/null
+++
/java/tags/xd-1.0.3/src/wsdl/schema/IHE/XDS.b_DocumentRepositoryMTOM.xsd
Tue Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns="urn:ihe:iti:xds-b:2007"
xmlns:xmime="http://www.w3.org/2005/05/xmlmime"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:rim="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0"
xmlns:query="urn:oasis:names:tc:ebxml-regrep:xsd:query:3.0"
xmlns:lcm="urn:oasis:names:tc:ebxml-regrep:xsd:lcm:3.0"
xmlns:rs="urn:oasis:names:tc:ebxml-regrep:xsd:rs:3.0"
targetNamespace="urn:ihe:iti:xds-b:2007" elementFormDefault="qualified"
attributeFormDefault="unqualified">
+ <xs:import namespace="urn:oasis:names:tc:ebxml-regrep:xsd:rs:3.0"
schemaLocation="../ebRS/rs.xsd"/>
+ <xs:import namespace="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0"
schemaLocation="../ebRS/rim.xsd"/>
+ <xs:import namespace="urn:oasis:names:tc:ebxml-regrep:xsd:lcm:3.0"
schemaLocation="../ebRS/lcm.xsd"/>
+ <xs:import namespace="urn:oasis:names:tc:ebxml-regrep:xsd:query:3.0"
schemaLocation="../ebRS/query.xsd"/>
+ <xs:complexType name="RetrieveDocumentSetRequestType">
+ <xs:sequence>
+ <xs:element name="DocumentRequest" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="HomeCommunityId" type="rim:LongName" minOccurs="0">
+ <xs:annotation>
+ <xs:documentation>This corresponds to the home attribute of the
Identifiable class in regrep RIM (regrep-rim-3.0-os.pdf, page
20)</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="RepositoryUniqueId" type="rim:LongName">
+ <xs:annotation>
+ <xs:documentation>This is the XDSDocumentEntry.repositoryUniqueId
attribute in the XDS metadata</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="DocumentUniqueId" type="rim:LongName">
+ <xs:annotation>
+ <xs:documentation>This is the XDSDocumentEntry.uniqueId attribute
in the XDS metadata</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="RetrieveDocumentSetResponseType">
+ <xs:sequence>
+ <xs:element ref="rs:RegistryResponse"/>
+ <xs:sequence minOccurs="0">
+ <xs:element name="DocumentResponse" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="HomeCommunityId" type="rim:LongName"
minOccurs="0">
+ <xs:annotation>
+ <xs:documentation>This corresponds to the home attribute of the
Identifiable class in regrep RIM (regrep-rim-3.0-os.pdf, page
20)</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="RepositoryUniqueId" type="rim:LongName">
+ <xs:annotation>
+ <xs:documentation>This is the XDSDocumentEntry.repositoryUniqueId
attribute in the XDS metadata</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="DocumentUniqueId" type="rim:LongName">
+ <xs:annotation>
+ <xs:documentation>This is the XDSDocumentEntry.uniqueId attribute
in the XDS metadata</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="mimeType" type="rim:LongName"/>
+ <xs:element name="Document" type="xs:base64Binary"
xmime:expectedContentTypes="application/octet-stream" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="RetrieveDocumentSetRequest"
type="RetrieveDocumentSetRequestType"/>
+ <xs:element name="RetrieveDocumentSetResponse"
type="RetrieveDocumentSetResponseType"/>
+ <xs:element name="RegisterDocumentSet-bResponse"
type="RetrieveDocumentSetResponseType"/>
+ <xs:complexType name="ProvideAndRegisterDocumentSetRequestType">
+ <xs:sequence>
+ <xs:element ref="lcm:SubmitObjectsRequest"/>
+ <xs:sequence minOccurs="0">
+ <xs:element name="Document" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:simpleContent>
+ <xs:extension base="xs:base64Binary"
xmime:expectedContentTypes="application/octet-stream">
+ <xs:attribute name="id" type="xs:anyURI" use="required">
+ <xs:annotation>
+ <xs:documentation>This corresponds to the ExtrinsicObject id in
the eb RIM metadata a provides a linkage between the actual document data
and its metadata</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ProvideAndRegisterDocumentSetRequest"
type="ProvideAndRegisterDocumentSetRequestType"/>
+ <xs:element name="ProvideAndRegisterDocumentSet_bRequest"
type="ProvideAndRegisterDocumentSetRequestType"/>
+</xs:schema>
=======================================
--- /dev/null
+++ /java/tags/xd-1.0.3/src/wsdl/schema/ebRS/lcm.xsd Tue Oct 28 12:15:16
2014 UTC
@@ -0,0 +1,145 @@
+<?xml version = "1.0" encoding = "UTF-8"?>
+<!-- $Header: /cvsroot/ebxmlrr/ebxmlrr-spec/misc/3.0/schema/lcm.xsd,v 1.5
2005/01/31 22:28:18 farrukh_najmi Exp $ -->
+<schema targetNamespace="urn:oasis:names:tc:ebxml-regrep:xsd:lcm:3.0"
+ xmlns="http://www.w3.org/2001/XMLSchema"
+ xmlns:rim="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0"
+ xmlns:rs="urn:oasis:names:tc:ebxml-regrep:xsd:rs:3.0"
+ xmlns:tns="urn:oasis:names:tc:ebxml-regrep:xsd:lcm:3.0"
+ elementFormDefault="qualified"
+ attributeFormDefault="unqualified"
+ >
+
+ <annotation>
+ <documentation xml:lang="en">The schema for OASIS ebXML Registry
Services</documentation>
+ </annotation>
+ <!-- Import the rim.xsd file with XML schema mappaing from RIM -->
+ <import namespace="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0"
schemaLocation="rim.xsd"/>
+ <!-- Import the rs.xsd file with XML schema for base rs related schema
-->
+ <import namespace="urn:oasis:names:tc:ebxml-regrep:xsd:rs:3.0"
schemaLocation="rs.xsd"/>
+ <element name="SubmitObjectsRequest">
+ <annotation>
+ <documentation xml:lang="en">The SubmitObjectsRequest allows one to
submit a list of RegistryObject elements. Each RegistryEntry element
provides metadata for a single submitted object. Note that the repository
item being submitted is in a separate document that is not in this DTD. The
ebXML Messaging Services Specfication defines packaging, for submission, of
the metadata of a repository item with the repository item itself. The
value of the id attribute of the ExtrinsicObject element must be the same
as the xlink:href attribute within the Reference element within the
Manifest element of the MessageHeader.</documentation>
+ </annotation>
+ <complexType>
+ <complexContent>
+ <extension base="rs:RegistryRequestType">
+ <sequence>
+ <element ref="rim:RegistryObjectList"/>
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+ </element>
+ <element name="UpdateObjectsRequest">
+ <annotation>
+ <documentation xml:lang="en">The UpdateObjectsRequest allows one to
update a list of RegistryObject elements. Each RegistryEntry element
provides metadata for a single submitted object. Note that the repository
item being submitted is in a separate document that is not in this DTD. The
ebXML Messaging Services Specfication defines packaging, for submission, of
the metadata of a repository item with the repository item itself. The
value of the id attribute of the ExtrinsicObject element must be the same
as the xlink:href attribute within the Reference element within the
Manifest element of the MessageHeader.</documentation>
+ </annotation>
+ <complexType>
+ <complexContent>
+ <extension base="rs:RegistryRequestType">
+ <sequence>
+ <element ref="rim:RegistryObjectList"/>
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+ </element>
+ <element name="ApproveObjectsRequest">
+ <annotation>
+ <documentation xml:lang="en">
+ The ObjectRefList and AdhocQuery identify the list of
+ objects being approved.
+ </documentation>
+ </annotation>
+ <complexType>
+ <complexContent>
+ <extension base="rs:RegistryRequestType">
+ <sequence>
+ <element ref="rim:AdhocQuery" minOccurs="0" maxOccurs="1" />
+ <element ref="rim:ObjectRefList" minOccurs="0" maxOccurs="1" />
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+ </element>
+ <element name="DeprecateObjectsRequest">
+ <annotation>
+ <documentation xml:lang="en">
+ The ObjectRefList and AdhocQuery identify the list of
+ objects being deprecated.
+ </documentation>
+ </annotation>
+ <complexType>
+ <complexContent>
+ <extension base="rs:RegistryRequestType">
+ <sequence>
+ <element ref="rim:AdhocQuery" minOccurs="0" maxOccurs="1" />
+ <element ref="rim:ObjectRefList" minOccurs="0" maxOccurs="1" />
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+ </element>
+ <element name="UndeprecateObjectsRequest">
+ <annotation>
+ <documentation xml:lang="en">
+ The ObjectRefList is the list of
+ refs to the registry entrys being un-deprecated.
+ </documentation>
+ </annotation>
+ <complexType>
+ <complexContent>
+ <extension base="rs:RegistryRequestType">
+ <sequence>
+ <element ref="rim:AdhocQuery" minOccurs="0" maxOccurs="1" />
+ <element ref="rim:ObjectRefList" minOccurs="0" maxOccurs="1" />
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+ </element>
+ <element name="RemoveObjectsRequest">
+ <annotation>
+ <documentation xml:lang="en">
+ The ObjectRefList is the list of
+ refs to the registry entrys being removed
+ </documentation>
+ </annotation>
+ <complexType>
+ <complexContent>
+ <extension base="rs:RegistryRequestType">
+ <sequence>
+ <element ref="rim:AdhocQuery" minOccurs="0" maxOccurs="1" />
+ <element ref="rim:ObjectRefList" minOccurs="0" maxOccurs="1" />
+ </sequence>
+ <attribute name="deletionScope"
default="urn:oasis:names:tc:ebxml-regrep:DeletionScopeType:DeleteAll"
type="rim:referenceURI" use="optional"/>
+ </extension>
+ </complexContent>
+ </complexType>
+ </element>
+ <element name="RelocateObjectsRequest">
+ <complexType>
+ <complexContent>
+ <extension base="rs:RegistryRequestType">
+ <sequence>
+ <element maxOccurs="1" minOccurs="1" ref="rim:AdhocQuery" />
+ <element maxOccurs="1" minOccurs="1" name="SourceRegistry"
type="rim:ObjectRefType"/>
+ <element maxOccurs="1" minOccurs="1"
name="DestinationRegistry" type="rim:ObjectRefType"/>
+ <element maxOccurs="1" minOccurs="1" name="OwnerAtSource"
type="rim:ObjectRefType"/>
+ <element maxOccurs="1" minOccurs="1" name="OwnerAtDestination"
type="rim:ObjectRefType"/>
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+ </element>
+ <element name="AcceptObjectsRequest">
+ <!-- The ObjectRefList must only contain local ObjectRefs such that
they do not specify home attribute -->
+ <complexType>
+ <complexContent>
+ <extension base="rs:RegistryRequestType">
+ <attribute name="correlationId" type="anyURI" use="required"/>
+ </extension>
+ </complexContent>
+ </complexType>
+ </element>
+</schema>
=======================================
--- /dev/null
+++ /java/tags/xd-1.0.3/src/wsdl/schema/ebRS/query.xsd Tue Oct 28 12:15:16
2014 UTC
@@ -0,0 +1,446 @@
+<?xml version = "1.0" encoding = "UTF-8"?>
+<!-- $Header: /cvsroot/ebxmlrr/ebxmlrr-spec/misc/3.0/schema/query.xsd,v
1.13 2005/03/29 08:52:10 farrukh_najmi Exp $ -->
+<schema attributeFormDefault="unqualified" elementFormDefault="qualified"
targetNamespace="urn:oasis:names:tc:ebxml-regrep:xsd:query:3.0"
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:rim="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0"
xmlns:rs="urn:oasis:names:tc:ebxml-regrep:xsd:rs:3.0"
xmlns:tns="urn:oasis:names:tc:ebxml-regrep:xsd:query:3.0">
+ <!-- Import the rim.xsd file with XML schema mappaing from RIM -->
+ <import namespace="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0"
schemaLocation="rim.xsd"/>
+ <import namespace="urn:oasis:names:tc:ebxml-regrep:xsd:rs:3.0"
schemaLocation="rs.xsd"/>
+ <complexType name="ResponseOptionType">
+ <attribute default="RegistryObject" name="returnType">
+ <simpleType>
+ <restriction base="NCName">
+ <enumeration value="ObjectRef"/>
+ <enumeration value="RegistryObject"/>
+ <enumeration value="LeafClass"/>
+ <enumeration value="LeafClassWithRepositoryItem"/>
+ </restriction>
+ </simpleType>
+ </attribute>
+ <attribute default="false" name="returnComposedObjects"
type="boolean"/>
+ </complexType>
+ <element name="ResponseOption" type="tns:ResponseOptionType"/>
+ <element name="AdhocQueryRequest">
+ <annotation>
+ <documentation xml:lang="en">An Ad hoc query request specifies an ad
hoc query.</documentation>
+ </annotation>
+ <complexType>
+ <complexContent>
+ <extension base="rs:RegistryRequestType">
+ <sequence>
+ <element maxOccurs="1" minOccurs="1" ref="tns:ResponseOption"/>
+ <element ref="rim:AdhocQuery"/>
+ </sequence>
+ <attribute default="false" name="federated" type="boolean"
use="optional"/>
+ <attribute name="federation" type="anyURI" use="optional"/>
+ <attribute default="0" name="startIndex" type="integer"/>
+ <attribute default="-1" name="maxResults" type="integer"/>
+ </extension>
+ </complexContent>
+ </complexType>
+ </element>
+ <element name="AdhocQueryResponse">
+ <annotation>
+ <documentation xml:lang="en">
+ The response includes a RegistryObjectList which has zero or more
+ RegistryObjects that match the query specified in
AdhocQueryRequest.
+ </documentation>
+ </annotation>
+ <complexType>
+ <complexContent>
+ <extension base="rs:RegistryResponseType">
+ <sequence>
+ <element ref="rim:RegistryObjectList"/>
+ </sequence>
+ <attribute default="0" name="startIndex" type="integer"/>
+ <attribute name="totalResultCount" type="integer"
use="optional"/>
+ </extension>
+ </complexContent>
+ </complexType>
+ </element>
+ <complexType name="FilterQueryType" abstract="true">
+ <sequence>
+ <element maxOccurs="1" minOccurs="0" name="PrimaryFilter"
type="tns:FilterType"/>
+ </sequence>
+ </complexType>
+
+ <complexType name="BranchType" abstract="true">
+ <complexContent>
+ <extension base="tns:FilterQueryType">
+ </extension>
+ </complexContent>
+ </complexType>
+ <complexType name="InternationalStringBranchType">
+ <complexContent>
+ <extension base="tns:BranchType">
+ <sequence>
+ <element maxOccurs="unbounded" minOccurs="0"
name="LocalizedStringFilter" type="tns:FilterType" />
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+
+ <complexType name="SlotBranchType">
+ <complexContent>
+ <extension base="tns:BranchType">
+ <sequence/>
+ </extension>
+ </complexContent>
+ </complexType>
+
+ <complexType name="RegistryObjectQueryType">
+ <complexContent>
+ <extension base="tns:FilterQueryType">
+ <sequence>
+ <element maxOccurs="unbounded" minOccurs="0" name="SlotBranch"
type="tns:SlotBranchType"/>
+ <element maxOccurs="1" minOccurs="0" name="NameBranch"
type="tns:InternationalStringBranchType"/>
+ <element maxOccurs="1" minOccurs="0" name="DescriptionBranch"
type="tns:InternationalStringBranchType"/>
+ <element maxOccurs="1" minOccurs="0" name="VersionInfoFilter"
type="tns:FilterType" />
+ <element maxOccurs="unbounded" minOccurs="0"
ref="tns:ClassificationQuery"/>
+ <element maxOccurs="unbounded" minOccurs="0"
ref="tns:ExternalIdentifierQuery"/>
+ <element maxOccurs="1" minOccurs="0" name="ObjectTypeQuery"
type="tns:ClassificationNodeQueryType"/>
+ <element maxOccurs="1" minOccurs="0" name="StatusQuery"
type="tns:ClassificationNodeQueryType"/>
+ <element maxOccurs="unbounded" minOccurs="0"
name="SourceAssociationQuery" type="tns:AssociationQueryType"/>
+ <element maxOccurs="unbounded" minOccurs="0"
name="TargetAssociationQuery" type="tns:AssociationQueryType"/>
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="RegistryObjectQuery" type="tns:RegistryObjectQueryType"/>
+
+ <complexType name="AssociationQueryType">
+ <complexContent>
+ <extension base="tns:RegistryObjectQueryType">
+ <sequence>
+ <element maxOccurs="1" minOccurs="0" name="AssociationTypeQuery"
type="tns:ClassificationNodeQueryType"/>
+ <element maxOccurs="1" minOccurs="0" name="SourceObjectQuery"
type="tns:RegistryObjectQueryType"/>
+ <element maxOccurs="1" minOccurs="0" name="TargetObjectQuery"
type="tns:RegistryObjectQueryType"/>
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="AssociationQuery" type="tns:AssociationQueryType"/>
+
+ <complexType name="AuditableEventQueryType">
+ <complexContent>
+ <extension base="tns:RegistryObjectQueryType">
+ <sequence>
+ <element maxOccurs="unbounded" minOccurs="0"
name="AffectedObjectQuery" type="tns:RegistryObjectQueryType" />
+ <element maxOccurs="1" minOccurs="0" name="EventTypeQuery"
type="tns:ClassificationNodeQueryType" />
+ <element maxOccurs="1" minOccurs="0" name="UserQuery"
type="tns:UserQueryType" />
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="AuditableEventQuery" type="tns:AuditableEventQueryType"/>
+
+ <complexType name="ClassificationQueryType">
+ <complexContent>
+ <extension base="tns:RegistryObjectQueryType">
+ <sequence>
+ <element maxOccurs="1" minOccurs="0"
ref="tns:ClassificationSchemeQuery"/>
+ <element maxOccurs="1" minOccurs="0"
name="ClassifiedObjectQuery" type="tns:RegistryObjectQueryType"/>
+ <element maxOccurs="1" minOccurs="0"
ref="tns:ClassificationNodeQuery"/>
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="ClassificationQuery" type="tns:ClassificationQueryType"/>
+
+ <complexType name="ClassificationNodeQueryType">
+ <complexContent>
+ <extension base="tns:RegistryObjectQueryType">
+ <sequence>
+ <element maxOccurs="1" minOccurs="0" name="ParentQuery"
type="tns:RegistryObjectQueryType"/>
+ <element maxOccurs="unbounded" minOccurs="0"
name="ChildrenQuery" type="tns:ClassificationNodeQueryType"/>
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="ClassificationNodeQuery"
type="tns:ClassificationNodeQueryType" />
+
+ <complexType name="ClassificationSchemeQueryType">
+ <complexContent>
+ <extension base="tns:RegistryObjectQueryType">
+ <sequence>
+ <element maxOccurs="unbounded" minOccurs="0"
name="ChildrenQuery" type="tns:ClassificationNodeQueryType"/>
+ <element maxOccurs="1" minOccurs="0" name="NodeTypeQuery"
type="tns:ClassificationNodeQueryType"/>
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="ClassificationSchemeQuery"
type="tns:ClassificationSchemeQueryType"/>
+
+ <complexType name="ExternalIdentifierQueryType">
+ <complexContent>
+ <extension base="tns:RegistryObjectQueryType">
+ <sequence>
+ <element maxOccurs="1" minOccurs="0"
ref="tns:RegistryObjectQuery" />
+ <element maxOccurs="1" minOccurs="0"
name="IdentificationSchemeQuery" type="tns:ClassificationSchemeQueryType"/>
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="ExternalIdentifierQuery"
type="tns:ExternalIdentifierQueryType"/>
+
+ <complexType name="ExternalLinkQueryType">
+ <complexContent>
+ <extension base="tns:RegistryObjectQueryType">
+ <sequence/>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="ExternalLinkQuery" type="tns:ExternalLinkQueryType"/>
+
+ <complexType name="ExtrinsicObjectQueryType">
+ <complexContent>
+ <extension base="tns:RegistryObjectQueryType">
+ <sequence>
+ <element maxOccurs="1" minOccurs="0"
name="ContentVersionInfoFilter" type="tns:FilterType"/>
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="ExtrinsicObjectQuery"
type="tns:ExtrinsicObjectQueryType"/>
+
+ <complexType name="OrganizationQueryType">
+ <complexContent>
+ <extension base="tns:RegistryObjectQueryType">
+ <sequence>
+ <element maxOccurs="unbounded" minOccurs="0"
name="AddressFilter" type="tns:FilterType"/>
+ <element maxOccurs="unbounded" minOccurs="0"
name="TelephoneNumberFilter" type="tns:FilterType"/>
+ <element maxOccurs="unbounded" minOccurs="0"
name="EmailAddressFilter" type="tns:FilterType"/>
+ <element maxOccurs="1" minOccurs="0" name="ParentQuery"
type="tns:OrganizationQueryType"/>
+ <element maxOccurs="unbounded" minOccurs="0"
name="ChildOrganizationQuery" type="tns:OrganizationQueryType"/>
+ <element maxOccurs="1" minOccurs="0" name="PrimaryContactQuery"
type="tns:PersonQueryType"/>
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="OrganizationQuery" type="tns:OrganizationQueryType"/>
+
+ <complexType name="RegistryPackageQueryType">
+ <complexContent>
+ <extension base="tns:RegistryObjectQueryType">
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="RegistryPackageQuery"
type="tns:RegistryPackageQueryType"/>
+
+ <complexType name="ServiceQueryType">
+ <complexContent>
+ <extension base="tns:RegistryObjectQueryType">
+ <sequence>
+ <element maxOccurs="unbounded" minOccurs="0"
ref="tns:ServiceBindingQuery"/>
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="ServiceQuery" type="tns:ServiceQueryType"/>
+
+ <complexType name="ServiceBindingQueryType">
+ <complexContent>
+ <extension base="tns:RegistryObjectQueryType">
+ <sequence>
+ <element maxOccurs="1" minOccurs="0" ref="tns:ServiceQuery"/>
+ <element maxOccurs="unbounded" minOccurs="0"
ref="tns:SpecificationLinkQuery"/>
+ <element maxOccurs="1" minOccurs="0" name="TargetBindingQuery"
type="tns:ServiceBindingQueryType"/>
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="ServiceBindingQuery" type="tns:ServiceBindingQueryType"/>
+
+ <complexType name="SpecificationLinkQueryType">
+ <complexContent>
+ <extension base="tns:RegistryObjectQueryType">
+ <sequence>
+ <element maxOccurs="1" minOccurs="0"
name="UsageDescriptionBranch" type="tns:InternationalStringBranchType"/>
+ <element maxOccurs="1" minOccurs="0"
ref="tns:ServiceBindingQuery"/>
+ <element maxOccurs="1" minOccurs="0"
name="SpecificationObjectQuery" type="tns:RegistryObjectQueryType"/>
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="SpecificationLinkQuery"
type="tns:SpecificationLinkQueryType"/>
+
+ <complexType name="PersonQueryType">
+ <complexContent>
+ <extension base="tns:RegistryObjectQueryType">
+ <sequence>
+ <element maxOccurs="unbounded" minOccurs="0"
name="AddressFilter" type="tns:FilterType"/>
+ <element maxOccurs="1" minOccurs="0" name="PersonNameFilter"
type="tns:FilterType"/>
+ <element maxOccurs="unbounded" minOccurs="0"
name="TelephoneNumberFilter" type="tns:FilterType"/>
+ <element maxOccurs="unbounded" minOccurs="0"
name="EmailAddressFilter" type="tns:FilterType"/>
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="PersonQuery" type="tns:PersonQueryType"/>
+
+ <complexType name="UserQueryType">
+ <complexContent>
+ <extension base="tns:PersonQueryType">
+ <sequence/>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="UserQuery" type="tns:UserQueryType"/>
+
+ <complexType name="RegistryQueryType">
+ <complexContent>
+ <extension base="tns:RegistryObjectQueryType">
+ <sequence>
+ <element maxOccurs="1" minOccurs="0" name="OperatorQuery"
type="tns:OrganizationQueryType"/>
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="RegistryQuery" type="tns:RegistryQueryType"/>
+
+ <complexType name="FederationQueryType">
+ <complexContent>
+ <extension base="tns:RegistryObjectQueryType">
+ <sequence/>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="FederationQuery" type="tns:FederationQueryType"/>
+
+ <complexType name="AdhocQueryQueryType">
+ <complexContent>
+ <extension base="tns:RegistryObjectQueryType">
+ <sequence>
+ <element maxOccurs="1" minOccurs="0"
name="QueryExpressionBranch" type="tns:QueryExpressionBranchType"/>
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="AdhocQueryQuery" type="tns:AdhocQueryQueryType"/>
+
+ <complexType name="QueryExpressionBranchType">
+ <complexContent>
+ <extension base="tns:BranchType">
+ <sequence>
+ <element maxOccurs="1" minOccurs="0" name="QueryLanguageQuery"
type="tns:ClassificationNodeQueryType"/>
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+
+ <complexType name="NotificationQueryType">
+ <complexContent>
+ <extension base="tns:RegistryObjectQueryType">
+ <sequence>
+ <element maxOccurs="1" minOccurs="0"
ref="tns:RegistryObjectQuery"/>
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="NotificationQuery" type="tns:NotificationQueryType"/>
+
+ <complexType name="SubscriptionQueryType">
+ <complexContent>
+ <extension base="tns:RegistryObjectQueryType">
+ <sequence>
+ <element maxOccurs="1" minOccurs="0" name="SelectorQuery"
type="tns:AdhocQueryQueryType"/>
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="SubscriptionQuery" type="tns:SubscriptionQueryType"/>
+
+ <!-- The Filter type hierarchy -->
+ <complexType name="FilterType">
+ <attribute default="false" name="negate" type="boolean"/>
+ </complexType>
+ <element abstract="true" name="Filter" type="tns:FilterType"/>
+
+ <complexType name="CompoundFilterType">
+ <complexContent>
+ <extension base="tns:FilterType">
+ <sequence>
+ <element maxOccurs="1" minOccurs="1" name="LeftFilter"
type="tns:FilterType"/>
+ <element maxOccurs="1" minOccurs="1" name="RightFilter"
type="tns:FilterType"/>
+ </sequence>
+ <attribute name="logicalOperator" use="required">
+ <simpleType>
+ <restriction base="NCName">
+ <enumeration value="AND"/>
+ <enumeration value="OR"/>
+ </restriction>
+ </simpleType>
+ </attribute>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="CompoundFilter" type="tns:CompoundFilterType"/>
+
+
+ <complexType name="SimpleFilterType" abstract="true">
+ <complexContent>
+ <extension base="tns:FilterType">
+ <attribute name="domainAttribute" type="string" use="required"/>
+ <attribute name="comparator" use="required">
+ <simpleType>
+ <restriction base="NCName">
+ <enumeration value="LE"/>
+ <enumeration value="LT"/>
+ <enumeration value="GE"/>
+ <enumeration value="GT"/>
+ <enumeration value="EQ"/>
+ <enumeration value="NE"/>
+ <enumeration value="Like"/>
+ <enumeration value="NotLike"/>
+ </restriction>
+ </simpleType>
+ </attribute>
+ </extension>
+ </complexContent>
+ </complexType>
+
+ <complexType name="BooleanFilterType">
+ <complexContent>
+ <extension base="tns:SimpleFilterType">
+ <attribute name="value" type="boolean" use="required"/>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="BooleanFilter" type="tns:BooleanFilterType"/>
+
+
+ <complexType name="IntegerFilterType">
+ <complexContent>
+ <extension base="tns:SimpleFilterType">
+ <attribute name="value" type="integer" use="required"/>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="IntegerFilter" type="tns:IntegerFilterType"/>
+
+ <complexType name="FloatFilterType">
+ <complexContent>
+ <extension base="tns:SimpleFilterType">
+ <attribute name="value" type="float" use="required"/>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="FloatFilter" type="tns:FloatFilterType"/>
+
+ <complexType name="DateTimeFilterType">
+ <complexContent>
+ <extension base="tns:SimpleFilterType">
+ <attribute name="value" type="dateTime" use="required"/>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="DateTimeFilter" type="tns:DateTimeFilterType"/>
+
+ <complexType name="StringFilterType">
+ <complexContent>
+ <extension base="tns:SimpleFilterType">
+ <attribute name="value" type="string" use="required"/>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="StringFilter" type="tns:StringFilterType"/>
+
+</schema>
=======================================
--- /dev/null
+++ /java/tags/xd-1.0.3/src/wsdl/schema/ebRS/rim.xsd Tue Oct 28 12:15:16
2014 UTC
@@ -0,0 +1,586 @@
+<?xml version = "1.0" encoding = "UTF-8"?>
+<!-- $Header: /cvsroot/ebxmlrr/ebxmlrr-spec/misc/3.0/schema/rim.xsd,v 1.20
2005/02/03 19:28:15 farrukh_najmi Exp $ -->
+<schema targetNamespace="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0"
+ xmlns="http://www.w3.org/2001/XMLSchema"
+ xmlns:tns="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0"
+ xmlns:xml="http://www.w3.org/XML/1998/namespace"
+ elementFormDefault="qualified"
+ attributeFormDefault="unqualified"
+ >
+
+ <annotation>
+ <documentation xml:lang="en">The schema for OASIS ebXML Registry
Information Model</documentation>
+ </annotation>
+ <import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="http://www.w3.org/2009/01/xml.xsd"/>
+ <!-- Begin information model mapping from ebRIM. -->
+ <!-- Define Data Types -->
+ <simpleType name="referenceURI">
+ <annotation>
+ <documentation xml:lang="en">
+ referenceURI is used by reference attributes within RIM.
+ Each attribute of type referenceURI references a RegistryObject
with
+ specified URI as id.
+ </documentation>
+ </annotation>
+ <restriction base="anyURI" />
+ </simpleType>
+ <simpleType name="String4">
+ <restriction base="string">
+ <maxLength value="4"/>
+ </restriction>
+ </simpleType>
+ <simpleType name="String8">
+ <restriction base="string">
+ <maxLength value="8"/>
+ </restriction>
+ </simpleType>
+ <simpleType name="String16">
+ <restriction base="string">
+ <maxLength value="16"/>
+ </restriction>
+ </simpleType>
+ <simpleType name="String32">
+ <restriction base="string">
+ <maxLength value="32"/>
+ </restriction>
+ </simpleType>
+ <simpleType name="ShortName">
+ <restriction base="string">
+ <maxLength value="64"/>
+ </restriction>
+ </simpleType>
+ <simpleType name="LongName">
+ <restriction base="string">
+ <maxLength value="256"/>
+ </restriction>
+ </simpleType>
+ <simpleType name="FreeFormText">
+ <restriction base="string">
+ <maxLength value="1024"/>
+ </restriction>
+ </simpleType>
+
+ <complexType name="InternationalStringType">
+ <sequence maxOccurs="unbounded" minOccurs="0">
+ <element ref="tns:LocalizedString"/>
+ </sequence>
+ </complexType>
+ <element name="InternationalString" type="tns:InternationalStringType"/>
+ <element name="Name" type="tns:InternationalStringType"/>
+ <element name="Description" type="tns:InternationalStringType"/>
+
+ <complexType name="LocalizedStringType">
+ <attribute ref="xml:lang" default="en-US"/>
+ <attribute default="UTF-8" name="charset"/>
+ <attribute name="value" type="tns:FreeFormText" use="required"/>
+ </complexType>
+ <element name="LocalizedString" type="tns:LocalizedStringType"/>
+
+ <complexType name="SlotType1">
+ <sequence>
+ <element maxOccurs="1" minOccurs="1" ref="tns:ValueList"/>
+ </sequence>
+ <attribute name="name" type="tns:LongName" use="required"/>
+ <!--slotType value MUST reference a ClassificationNode in the
canonical DataType scheme-->
+ <attribute name="slotType" type="tns:referenceURI" use="optional"/>
+ </complexType>
+ <element name="Slot" type="tns:SlotType1"/>
+ <complexType name="ValueListType">
+ <sequence maxOccurs="unbounded" minOccurs="0">
+ <element ref="tns:Value"/>
+ </sequence>
+ </complexType>
+ <element name="ValueList" type="tns:ValueListType"/>
+ <element name="Value" type="tns:LongName"/>
+ <complexType name="SlotListType">
+ <sequence>
+ <element maxOccurs="unbounded" minOccurs="0" ref="tns:Slot"/>
+ </sequence>
+ </complexType>
+ <element name="SlotList" type="tns:SlotListType"/>
+
+ <complexType name="IdentifiableType">
+ <annotation>
+ <documentation xml:lang="en">
+ Common base type for all types that have unique identity.
+ If id is provided and is not in proper URN syntax then it is used
for
+ linkage within document and is ignored by the registry. In this
case the
+ registry generates a UUID URN for id attribute.
+ id must not be null when object is retrieved from the registry.
+ </documentation>
+ </annotation>
+ <sequence>
+ <element maxOccurs="unbounded" minOccurs="0" ref="tns:Slot"/>
+ </sequence>
+ <attribute name="id" type="anyURI" use="required"/>
+ <!-- home attribute is required only for remote ObjectRef -->
+ <attribute name="home" type="anyURI" use="optional"/>
+ </complexType>
+ <element name="Identifiable" type="tns:IdentifiableType"/>
+
+ <complexType name="ObjectRefType">
+ <annotation>
+ <documentation xml:lang="en">
+ Use to reference an Object by its id.
+ Specifies the id attribute of the object as its id attribute.
+ id attribute in ObjectAttributes is exactly the same syntax and
semantics as
+ id attribute in RegistryObject.
+ </documentation>
+ </annotation>
+ <complexContent>
+ <extension base="tns:IdentifiableType">
+ <!-- When true and is a remote ObjectRef then the registry must
create a replica for this ObjectRef -->
+ <attribute default="false" name="createReplica" type="boolean"/>
+ </extension>
+ </complexContent>
+ </complexType>
+ <complexType name="ObjectRefListType">
+ <sequence maxOccurs="unbounded" minOccurs="0">
+ <element ref="tns:ObjectRef"/>
+ </sequence>
+ </complexType>
+ <element name="ObjectRefList" type="tns:ObjectRefListType"/>
+ <element name="ObjectRef" type="tns:ObjectRefType"
substitutionGroup="tns:Identifiable"/>
+
+ <complexType name="RegistryObjectType">
+ <complexContent>
+ <extension base="tns:IdentifiableType">
+ <sequence maxOccurs="1" minOccurs="0">
+ <element maxOccurs="1" minOccurs="0" ref="tns:Name"/>
+ <element maxOccurs="1" minOccurs="0" ref="tns:Description"/>
+ <element maxOccurs="1" minOccurs="0" name="VersionInfo"
type="tns:VersionInfoType"/>
+ <element maxOccurs="unbounded" minOccurs="0"
ref="tns:Classification"/>
+ <element maxOccurs="unbounded" minOccurs="0"
ref="tns:ExternalIdentifier"/>
+ </sequence>
+ <attribute name="lid" type="anyURI" use="optional"/>
+ <attribute name="objectType" type="tns:referenceURI"
use="optional"/>
+ <attribute name="status" type="tns:referenceURI" use="optional"/>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="RegistryObject" type="tns:RegistryObjectType"
substitutionGroup="tns:Identifiable" />
+
+ <complexType name="RegistryObjectListType">
+ <sequence>
+ <element maxOccurs="unbounded" minOccurs="0" ref="tns:Identifiable"/>
+ </sequence>
+ </complexType>
+ <element name="RegistryObjectList" type="tns:RegistryObjectListType"/>
+
+ <complexType name="AssociationType1">
+ <annotation>
+ <documentation xml:lang="en">
+ Association is the mapping of the same named interface in ebRIM.
+ It extends RegistryObject.
+ An Association specifies references to two previously submitted
+ registry entrys.
+ The sourceObject is id of the sourceObject in association
+ The targetObject is id of the targetObject in association
+ </documentation>
+ </annotation>
+ <complexContent>
+ <extension base="tns:RegistryObjectType">
+ <attribute name="associationType" type="tns:referenceURI"
use="required"/>
+ <attribute name="sourceObject" type="tns:referenceURI"
use="required"/>
+ <attribute name="targetObject" type="tns:referenceURI"
use="required"/>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="Association" type="tns:AssociationType1"
substitutionGroup="tns:Identifiable"/>
+ <complexType name="AuditableEventType">
+ <annotation>
+ <documentation xml:lang="en">An Event that forms an audit trail in
ebXML Registry.</documentation>
+ </annotation>
+ <complexContent>
+ <extension base="tns:RegistryObjectType">
+ <sequence>
+ <!-- List of all objects that have been effected by this event
-->
+ <element maxOccurs="1" minOccurs="1" name="affectedObjects"
type="tns:ObjectRefListType"/>
+ </sequence>
+ <attribute name="eventType" type="tns:referenceURI"
use="required"/>
+ <attribute name="timestamp" type="dateTime" use="required"/>
+ <attribute name="user" type="tns:referenceURI" use="required"/>
+ <attribute name="requestId" type="tns:referenceURI"
use="required"/>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="AuditableEvent" type="tns:AuditableEventType"
substitutionGroup="tns:Identifiable"/>
+ <complexType name="ClassificationType">
+ <annotation>
+ <documentation xml:lang="en">
+ Classification is the mapping of the same named interface in ebRIM.
+ It extends RegistryObject.
+ A Classification specifies references to two registry entrys.
+ The classifiedObject is id of the Object being classified.
+ The classificationNode is id of the ClassificationNode classying
the object
+ </documentation>
+ </annotation>
+ <complexContent>
+ <extension base="tns:RegistryObjectType">
+ <attribute name="classificationScheme" type="tns:referenceURI"
use="optional"/>
+ <attribute name="classifiedObject" type="tns:referenceURI"
use="required"/>
+ <attribute name="classificationNode" type="tns:referenceURI"
use="optional"/>
+ <attribute name="nodeRepresentation" type="tns:LongName"
use="optional"/>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="Classification" type="tns:ClassificationType"
substitutionGroup="tns:Identifiable"/>
+ <complexType name="ClassificationNodeType">
+ <annotation>
+ <documentation xml:lang="en">
+ ClassificationNode is the mapping of the same named interface in
ebRIM.
+ It extends RegistryObject.
+ ClassificationNode is used to submit a Classification tree to the
Registry.
+ The parent attribute is the id to the parent node. code is an
optional code value for a ClassificationNode
+ often defined by an external taxonomy (e.g. NAICS)
+ </documentation>
+ </annotation>
+ <complexContent>
+ <extension base="tns:RegistryObjectType">
+ <sequence>
+ <element maxOccurs="unbounded" minOccurs="0"
ref="tns:ClassificationNode"/>
+ </sequence>
+ <attribute name="parent" type="tns:referenceURI" use="optional"/>
+ <attribute name="code" type="tns:LongName" use="optional"/>
+ <attribute name="path" type="string" use="optional"/>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="ClassificationNode" type="tns:ClassificationNodeType"
substitutionGroup="tns:Identifiable"/>
+ <complexType name="ClassificationSchemeType">
+ <annotation>
+ <documentation xml:lang="en">
+ ClassificationScheme is the mapping of the same named interface in
ebRIM.
+ It extends RegistryObject.
+ </documentation>
+ </annotation>
+ <complexContent>
+ <extension base="tns:RegistryObjectType">
+ <sequence>
+ <element maxOccurs="unbounded" minOccurs="0"
ref="tns:ClassificationNode"/>
+ </sequence>
+ <attribute name="isInternal" type="boolean" use="required"/>
+ <attribute name="nodeType" type="tns:referenceURI" use="required"/>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="ClassificationScheme" type="tns:ClassificationSchemeType"
substitutionGroup="tns:Identifiable"/>
+ <complexType name="ExternalIdentifierType">
+ <annotation>
+ <documentation xml:lang="en">
+ ExternalIdentifier is the mapping of the same named interface in
ebRIM.
+ It extends RegistryObject.
+ </documentation>
+ </annotation>
+ <complexContent>
+ <extension base="tns:RegistryObjectType">
+ <attribute name="registryObject" type="tns:referenceURI"
use="required"/>
+ <attribute name="identificationScheme" type="tns:referenceURI"
use="required"/>
+ <attribute name="value" type="tns:LongName" use="required"/>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="ExternalIdentifier" type="tns:ExternalIdentifierType"
substitutionGroup="tns:Identifiable"/>
+ <complexType name="ExternalLinkType">
+ <annotation>
+ <documentation xml:lang="en">
+ ExternalLink is the mapping of the same named interface in ebRIM.
+ It extends RegistryObject.
+ </documentation>
+ </annotation>
+ <complexContent>
+ <extension base="tns:RegistryObjectType">
+ <attribute name="externalURI" type="anyURI" use="required"/>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="ExternalLink" type="tns:ExternalLinkType"
substitutionGroup="tns:Identifiable"/>
+ <complexType name="ExtrinsicObjectType">
+ <annotation>
+ <documentation xml:lang="en">
+ ExtrinsicObject is the mapping of the same named interface in
ebRIM.
+ It extends RegistryObject.
+ </documentation>
+ </annotation>
+ <complexContent>
+ <extension base="tns:RegistryObjectType">
+ <sequence>
+ <element maxOccurs="1" minOccurs="0" name="ContentVersionInfo"
type="tns:VersionInfoType"/>
+ </sequence>
+ <attribute default="application/octet-stream" name="mimeType"
type="tns:LongName"/>
+ <attribute default="false" name="isOpaque" type="boolean"/>
+ </extension>
+ </complexContent>
+ </complexType>
+ <!-- Following element decl nneds to be lower case but using upper camel
case for backward compatibility -->
+ <element name="ExtrinsicObject" type="tns:ExtrinsicObjectType"
substitutionGroup="tns:Identifiable"/>
+ <element name="Address" type="tns:PostalAddressType"/>
+ <complexType name="OrganizationType">
+ <annotation>
+ <documentation xml:lang="en">Mapping of the same named interface in
ebRIM.</documentation>
+ </annotation>
+ <complexContent>
+ <extension base="tns:RegistryObjectType">
+ <sequence>
+ <element maxOccurs="unbounded" minOccurs="0" ref="tns:Address"/>
+ <element maxOccurs="unbounded" minOccurs="0"
ref="tns:TelephoneNumber"/>
+ <element maxOccurs="unbounded" minOccurs="0"
ref="tns:EmailAddress"/>
+ </sequence>
+ <attribute name="parent" type="tns:referenceURI"/>
+ <attribute name="primaryContact" type="tns:referenceURI"
use="optional"/>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="Organization" type="tns:OrganizationType"
substitutionGroup="tns:Identifiable"/>
+ <complexType name="PersonNameType">
+ <annotation>
+ <documentation xml:lang="en">Mapping of the same named interface in
ebRIM.</documentation>
+ </annotation>
+ <attribute name="firstName" type="tns:ShortName" use="optional"/>
+ <attribute name="middleName" type="tns:ShortName" use="optional"/>
+ <attribute name="lastName" type="tns:ShortName" use="optional"/>
+ </complexType>
+ <element name="PersonName" type="tns:PersonNameType"/>
+ <complexType name="EmailAddressType">
+ <annotation>
+ <documentation xml:lang="en">Mapping of the same named interface in
ebRIM.</documentation>
+ </annotation>
+ <attribute name="address" type="tns:ShortName" use="required"/>
+ <attribute name="type" type="tns:String32" use="optional"/>
+ </complexType>
+ <element name="EmailAddress" type="tns:EmailAddressType"/>
+ <complexType name="PostalAddressType">
+ <annotation>
+ <documentation xml:lang="en">Mapping of the same named interface in
ebRIM.</documentation>
+ </annotation>
+ <attribute name="city" type="tns:ShortName" use="optional"/>
+ <attribute name="country" type="tns:ShortName" use="optional"/>
+ <attribute name="postalCode" type="tns:ShortName" use="optional"/>
+ <attribute name="stateOrProvince" type="tns:ShortName" use="optional"/>
+ <attribute name="street" type="tns:ShortName" use="optional"/>
+ <attribute name="streetNumber" type="tns:String32" use="optional"/>
+ </complexType>
+ <element name="PostalAddress" type="tns:PostalAddressType"/>
+
+ <complexType name="VersionInfoType">
+ <attribute name="versionName" type="tns:String16" use="optional"
default="1.1" />
+ <attribute name="comment" type="string" use="optional"/>
+ </complexType>
+
+ <complexType name="RegistryPackageType">
+ <annotation>
+ <documentation xml:lang="en">
+ RegistryPackage is the mapping of the same named interface in
ebRIM.
+ It extends RegistryObject.
+ A RegistryPackage is a named collection of objects.
+ </documentation>
+ </annotation>
+ <complexContent>
+ <extension base="tns:RegistryObjectType">
+ <sequence>
+ <element maxOccurs="1" minOccurs="0"
ref="tns:RegistryObjectList"/>
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="RegistryPackage" type="tns:RegistryPackageType"
substitutionGroup="tns:Identifiable"/>
+ <complexType name="ServiceType">
+ <complexContent>
+ <extension base="tns:RegistryObjectType">
+ <sequence>
+ <element maxOccurs="unbounded" minOccurs="0"
ref="tns:ServiceBinding"/>
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="Service" type="tns:ServiceType"
substitutionGroup="tns:Identifiable"/>
+ <complexType name="ServiceBindingType">
+ <complexContent>
+ <extension base="tns:RegistryObjectType">
+ <sequence>
+ <element maxOccurs="unbounded" minOccurs="0"
ref="tns:SpecificationLink"/>
+ </sequence>
+ <attribute name="service" type="tns:referenceURI" use="required"/>
+ <attribute name="accessURI" type="anyURI" use="optional"/>
+ <attribute name="targetBinding" type="tns:referenceURI"
use="optional"/>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="ServiceBinding" type="tns:ServiceBindingType"
substitutionGroup="tns:Identifiable"/>
+ <complexType name="SpecificationLinkType">
+ <complexContent>
+ <extension base="tns:RegistryObjectType">
+ <sequence>
+ <element maxOccurs="1" minOccurs="0" ref="tns:UsageDescription"/>
+ <element maxOccurs="unbounded" minOccurs="0"
ref="tns:UsageParameter"/>
+ </sequence>
+ <attribute name="serviceBinding" type="tns:referenceURI"
use="required"/>
+ <attribute name="specificationObject" type="tns:referenceURI"
use="required"/>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="SpecificationLink" type="tns:SpecificationLinkType"
substitutionGroup="tns:Identifiable"/>
+ <element name="UsageDescription" type="tns:InternationalStringType"/>
+ <element name="UsageParameter" type="tns:FreeFormText"/>
+ <complexType name="TelephoneNumberType">
+ <annotation>
+ <documentation xml:lang="en">TelephoneNumber is the mapping of the
same named interface in ebRIM.</documentation>
+ </annotation>
+ <attribute name="areaCode" type="tns:String8" use="optional"/>
+ <attribute name="countryCode" type="tns:String8" use="optional"/>
+ <attribute name="extension" type="tns:String8" use="optional"/>
+ <attribute name="number" type="tns:String16" use="optional"/>
+ <attribute name="phoneType" type="tns:String32" use="optional"/>
+ </complexType>
+ <element name="TelephoneNumber" type="tns:TelephoneNumberType"/>
+ <complexType name="TelephoneNumberListType">
+ <sequence>
+ <element maxOccurs="unbounded" minOccurs="0"
ref="tns:TelephoneNumber"/>
+ </sequence>
+ </complexType>
+ <complexType name="PersonType">
+ <annotation>
+ <documentation xml:lang="en">Mapping of the same named interface in
ebRIM.</documentation>
+ </annotation>
+ <complexContent>
+ <extension base="tns:RegistryObjectType">
+ <sequence maxOccurs="1" minOccurs="1">
+ <element maxOccurs="unbounded" minOccurs="0" ref="tns:Address"/>
+ <!--
+ PersonName is optional because it is not needed in SAML Profile
+ when an external IdentityProvider is used.
+ -->
+ <element maxOccurs="1" minOccurs="0" ref="tns:PersonName"/>
+ <element maxOccurs="unbounded" minOccurs="0"
ref="tns:TelephoneNumber"/>
+ <element maxOccurs="unbounded" minOccurs="0"
ref="tns:EmailAddress"/>
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="Person" type="tns:PersonType"
substitutionGroup="tns:Identifiable"/>
+ <complexType name="UserType">
+ <annotation>
+ <documentation xml:lang="en">Mapping of the same named interface in
ebRIM.</documentation>
+ </annotation>
+ <complexContent>
+ <extension base="tns:PersonType">
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="User" type="tns:UserType"
substitutionGroup="tns:Identifiable"/>
+ <complexType name="RegistryType">
+ <annotation>
+ <documentation xml:lang="en">Mapping of the same named interface in
ebRIM.</documentation>
+ </annotation>
+ <complexContent>
+ <extension base="tns:RegistryObjectType">
+ <attribute name="operator" type="tns:referenceURI" use="required"/>
+ <attribute name="specificationVersion" type="string"
use="required"/>
+ <attribute default="P1D" name="replicationSyncLatency"
type="duration" use="optional" />
+ <attribute default="P1D" name="catalogingLatency" type="duration"
use="optional" />
+ <attribute name="conformanceProfile" use="optional"
default="registryLite">
+ <simpleType>
+ <restriction base="NCName">
+ <enumeration value="registryFull"/>
+ <enumeration value="registryLite"/>
+ </restriction>
+ </simpleType>
+ </attribute>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="Registry" type="tns:RegistryType"
substitutionGroup="tns:Identifiable"/>
+ <complexType name="FederationType">
+ <annotation>
+ <documentation xml:lang="en">Mapping of the same named interface in
ebRIM.</documentation>
+ </annotation>
+ <complexContent>
+ <extension base="tns:RegistryObjectType">
+ <attribute default="P1D" name="replicationSyncLatency"
type="duration" use="optional" />
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="Federation" type="tns:FederationType"
substitutionGroup="tns:Identifiable"/>
+
+ <complexType name="AdhocQueryType">
+ <annotation>
+ <documentation xml:lang="en">
+ A registry query.
+ A QueryExpression child element is not required when invoking a
stored query.
+ </documentation>
+ </annotation>
+ <complexContent>
+ <extension base="tns:RegistryObjectType">
+ <sequence>
+ <element ref="tns:QueryExpression" minOccurs="0" maxOccurs="1" />
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="AdhocQuery" type="tns:AdhocQueryType"
substitutionGroup="tns:RegistryObject" />
+
+ <complexType name="QueryExpressionType" mixed="true">
+ <sequence>
+ <!--
+ MAY be any query language syntax supported.
+ MUST support FilterQuery. SHOULD support SQLQuery
+ -->
+ <any namespace="##other" processContents="lax" minOccurs="0"
maxOccurs="1" />
+ </sequence>
+ <attribute name="queryLanguage" type="tns:referenceURI"
use="required"/>
+ </complexType>
+ <element name="QueryExpression" type="tns:QueryExpressionType"/>
+
+ <complexType name="NotificationType">
+ <annotation>
+ <documentation>Notification of registry events.</documentation>
+ </annotation>
+ <complexContent>
+ <extension base="tns:RegistryObjectType">
+ <sequence>
+ <!--May contain ObjectRefs and RegistryObjects -->
+ <element maxOccurs="1" minOccurs="1"
ref="tns:RegistryObjectList"/>
+ </sequence>
+ <attribute name="subscription" type="tns:referenceURI"
use="required"/>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="Notification" type="tns:NotificationType"/>
+
+ <element name="Action" type="tns:ActionType"/>
+ <complexType name="SubscriptionType">
+ <annotation>
+ <documentation xml:lang="en">A Subscription for specified Events in
an ebXML V3+ registry.</documentation>
+ </annotation>
+ <complexContent>
+ <extension base="tns:RegistryObjectType">
+ <sequence>
+ <element ref="tns:Action" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <!-- Ref to a AdhocQueryType instance -->
+ <attribute name="selector" type="tns:referenceURI" use="required"/>
+ <attribute name="startTime" type="dateTime" use="optional"/>
+ <attribute name="endTime" type="dateTime" use="optional"/>
+ <attribute name="notificationInterval" type="duration"
use="optional" default="P1D"/>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="Subscription" type="tns:SubscriptionType"
substitutionGroup="tns:Identifiable"/>
+ <complexType abstract="true" name="ActionType">
+ <annotation>
+ <documentation>Abstract Base type for all types of
Actions.</documentation>
+ </annotation>
+ </complexType>
+ <complexType name="NotifyActionType">
+ <annotation>
+ <documentation xml:lang="en">Abstract Base type for all types of
Notify Actions</documentation>
+ </annotation>
+ <complexContent>
+ <extension base="tns:ActionType">
+ <attribute
default="urn:oasis:names:tc:ebxml-regrep:NotificationOptionType:ObjectRefs"
type="tns:referenceURI" name="notificationOption"/>
+ <attribute name="endPoint" type="anyURI" use="required"/>
+ </extension>
+ </complexContent>
+ </complexType>
+ <element name="NotifyAction" type="tns:NotifyActionType"
substitutionGroup="tns:Action"/>
+</schema>
=======================================
--- /dev/null
+++ /java/tags/xd-1.0.3/src/wsdl/schema/ebRS/rs.xsd Tue Oct 28 12:15:16
2014 UTC
@@ -0,0 +1,66 @@
+<?xml version = "1.0" encoding = "UTF-8"?>
+<!-- $Header: /cvsroot/ebxmlrr/ebxmlrr-spec/misc/3.0/schema/rs.xsd,v 1.9
2005/01/31 22:33:54 farrukh_najmi Exp $ -->
+<schema targetNamespace="urn:oasis:names:tc:ebxml-regrep:xsd:rs:3.0"
+ xmlns="http://www.w3.org/2001/XMLSchema"
+ xmlns:rim="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0"
+ xmlns:tns="urn:oasis:names:tc:ebxml-regrep:xsd:rs:3.0"
+ elementFormDefault="qualified"
+ attributeFormDefault="unqualified"
+ >
+
+ <annotation>
+ <documentation xml:lang="en">The schema for OASIS ebXML Registry
Services</documentation>
+ </annotation>
+ <!-- Import the rim.xsd file with XML schema mappaing from RIM -->
+ <import namespace="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0"
schemaLocation="rim.xsd"/>
+ <complexType name="RegistryRequestType">
+ <annotation>
+ <documentation xml:lang="en">Base type for all ebXML Registry
requests</documentation>
+ </annotation>
+ <sequence>
+ <!-- every request may be extended using Slots. -->
+ <element maxOccurs="1" minOccurs="0" name="RequestSlotList"
type="rim:SlotListType"/>
+ </sequence>
+ <attribute name="id" type="anyURI" use="optional"/>
+ <!--Comment may be used by requestor to describe the request. Used in
VersionInfo.comment-->
+ <attribute name="comment" type="string" use="optional"/>
+ </complexType>
+ <element name="RegistryRequest" type="tns:RegistryRequestType"/>
+ <element name="RegistryErrorList">
+ <annotation>
+ <documentation xml:lang="en">The RegistryErrorList is derived from
the ErrorList element from the ebXML Message Service
Specification</documentation>
+ </annotation>
+ <complexType>
+ <sequence>
+ <element maxOccurs="unbounded" ref="tns:RegistryError"/>
+ </sequence>
+ <attribute name="highestSeverity" type="rim:referenceURI"
use="optional"/>
+ </complexType>
+ </element>
+ <element name="RegistryError">
+ <complexType>
+ <simpleContent>
+ <extension base="string">
+ <attribute name="codeContext" type="string" use="required"/>
+ <attribute name="errorCode" type="string" use="required"/>
+ <attribute
default="urn:oasis:names:tc:ebxml-regrep:ErrorSeverityType:Error"
name="severity" type="rim:referenceURI" />
+ <attribute name="location" type="string" use="optional"/>
+ </extension>
+ </simpleContent>
+ </complexType>
+ </element>
+ <complexType name="RegistryResponseType">
+ <annotation>
+ <documentation xml:lang="en">Base type for all ebXML Registry
responses</documentation>
+ </annotation>
+ <sequence>
+ <!-- every response may be extended using Slots. -->
+ <element maxOccurs="1" minOccurs="0" name="ResponseSlotList"
type="rim:SlotListType"/>
+ <element minOccurs="0" ref="tns:RegistryErrorList"/>
+ </sequence>
+ <attribute name="status" type="rim:referenceURI" use="required"/>
+ <!-- id is the request if for the request for which this is a response
-->
+ <attribute name="requestId" type="anyURI" use="optional"/>
+ </complexType>
+ <element name="RegistryResponse" type="tns:RegistryResponseType"/>
+</schema>
=======================================
--- /dev/null
+++ /java/tags/xd-1.0.3/src/wsdl/www.w3.org/2001/xml.xsd Tue Oct 28
12:15:16 2014 UTC
@@ -0,0 +1,287 @@
+<?xml version='1.0'?>
+<?xml-stylesheet href="../2008/09/xsd.xsl" type="text/xsl"?>
+<xs:schema targetNamespace="http://www.w3.org/XML/1998/namespace"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns ="http://www.w3.org/1999/xhtml"
+ xml:lang="en">
+
+ <xs:annotation>
+ <xs:documentation>
+ <div>
+ <h1>About the XML namespace</h1>
+
+ <div class="bodytext">
+ <p>
+ This schema document describes the XML namespace, in a form
+ suitable for import by other schema documents.
+ </p>
+ <p>
+ See <a href="http://www.w3.org/XML/1998/namespace.html">
+ http://www.w3.org/XML/1998/namespace.html</a> and
+ <a href="http://www.w3.org/TR/REC-xml">
+ http://www.w3.org/TR/REC-xml</a> for information
+ about this namespace.
+ </p>
+ <p>
+ Note that local names in this namespace are intended to be
+ defined only by the World Wide Web Consortium or its subgroups.
+ The names currently defined in this namespace are listed below.
+ They should not be used with conflicting semantics by any Working
+ Group, specification, or document instance.
+ </p>
+ <p>
+ See further below in this document for more information about <a
+ href="#usage">how to refer to this schema document from your own
+ XSD schema documents</a> and about <a href="#nsversioning">the
+ namespace-versioning policy governing this schema document</a>.
+ </p>
+ </div>
+ </div>
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:attribute name="lang">
+ <xs:annotation>
+ <xs:documentation>
+ <div>
+
+ <h3>lang (as an attribute name)</h3>
+ <p>
+ denotes an attribute whose value
+ is a language code for the natural language of the content of
+ any element; its value is inherited. This name is reserved
+ by virtue of its definition in the XML specification.</p>
+
+ </div>
+ <div>
+ <h4>Notes</h4>
+ <p>
+ Attempting to install the relevant ISO 2- and 3-letter
+ codes as the enumerated possible values is probably never
+ going to be a realistic possibility.
+ </p>
+ <p>
+ See BCP 47 at <a href="http://www.rfc-editor.org/rfc/bcp/bcp47.txt">
+ http://www.rfc-editor.org/rfc/bcp/bcp47.txt</a>
+ and the IANA language subtag registry at
+ <a href="http://www.iana.org/assignments/language-subtag-registry">
+ http://www.iana.org/assignments/language-subtag-registry</a>
+ for further information.
+ </p>
+ <p>
+ The union allows for the 'un-declaration' of xml:lang with
+ the empty string.
+ </p>
+ </div>
+ </xs:documentation>
+ </xs:annotation>
+ <xs:simpleType>
+ <xs:union memberTypes="xs:language">
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:enumeration value=""/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+ </xs:attribute>
+
+ <xs:attribute name="space">
+ <xs:annotation>
+ <xs:documentation>
+ <div>
+
+ <h3>space (as an attribute name)</h3>
+ <p>
+ denotes an attribute whose
+ value is a keyword indicating what whitespace processing
+ discipline is intended for the content of the element; its
+ value is inherited. This name is reserved by virtue of its
+ definition in the XML specification.</p>
+
+ </div>
+ </xs:documentation>
+ </xs:annotation>
+ <xs:simpleType>
+ <xs:restriction base="xs:NCName">
+ <xs:enumeration value="default"/>
+ <xs:enumeration value="preserve"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+
+ <xs:attribute name="base" type="xs:anyURI"> <xs:annotation>
+ <xs:documentation>
+ <div>
+
+ <h3>base (as an attribute name)</h3>
+ <p>
+ denotes an attribute whose value
+ provides a URI to be used as the base for interpreting any
+ relative URIs in the scope of the element on which it
+ appears; its value is inherited. This name is reserved
+ by virtue of its definition in the XML Base specification.</p>
+
+ <p>
+ See <a
+
href="http://www.w3.org/TR/xmlbase/">http://www.w3.org/TR/xmlbase/</a>
+ for information about this attribute.
+ </p>
+ </div>
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+
+ <xs:attribute name="id" type="xs:ID">
+ <xs:annotation>
+ <xs:documentation>
+ <div>
+
+ <h3>id (as an attribute name)</h3>
+ <p>
+ denotes an attribute whose value
+ should be interpreted as if declared to be of type ID.
+ This name is reserved by virtue of its definition in the
+ xml:id specification.</p>
+
+ <p>
+ See <a
+ href="http://www.w3.org/TR/xml-id/">http://www.w3.org/TR/xml-id/</a>
+ for information about this attribute.
+ </p>
+ </div>
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+
+ <xs:attributeGroup name="specialAttrs">
+ <xs:attribute ref="xml:base"/>
+ <xs:attribute ref="xml:lang"/>
+ <xs:attribute ref="xml:space"/>
+ <xs:attribute ref="xml:id"/>
+ </xs:attributeGroup>
+
+ <xs:annotation>
+ <xs:documentation>
+ <div>
+
+ <h3>Father (in any context at all)</h3>
+
+ <div class="bodytext">
+ <p>
+ denotes Jon Bosak, the chair of
+ the original XML Working Group. This name is reserved by
+ the following decision of the W3C XML Plenary and
+ XML Coordination groups:
+ </p>
+ <blockquote>
+ <p>
+ In appreciation for his vision, leadership and
+ dedication the W3C XML Plenary on this 10th day of
+ February, 2000, reserves for Jon Bosak in perpetuity
+ the XML name "xml:Father".
+ </p>
+ </blockquote>
+ </div>
+ </div>
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:annotation>
+ <xs:documentation>
+ <div xml:id="usage" id="usage">
+ <h2><a name="usage">About this schema document</a></h2>
+
+ <div class="bodytext">
+ <p>
+ This schema defines attributes and an attribute group suitable
+ for use by schemas wishing to allow <code>xml:base</code>,
+ <code>xml:lang</code>, <code>xml:space</code> or
+ <code>xml:id</code> attributes on elements they define.
+ </p>
+ <p>
+ To enable this, such a schema must import this schema for
+ the XML namespace, e.g. as follows:
+ </p>
+ <pre>
+ &lt;schema . . .>
+ . . .
+ &lt;import namespace="http://www.w3.org/XML/1998/namespace"
+ schemaLocation="http://www.w3.org/2001/xml.xsd"/>
+ </pre>
+ <p>
+ or
+ </p>
+ <pre>
+ &lt;import namespace="http://www.w3.org/XML/1998/namespace"
+ schemaLocation="http://www.w3.org/2009/01/xml.xsd"/>
+ </pre>
+ <p>
+ Subsequently, qualified reference to any of the attributes or the
+ group defined below will have the desired effect, e.g.
+ </p>
+ <pre>
+ &lt;type . . .>
+ . . .
+ &lt;attributeGroup ref="xml:specialAttrs"/>
+ </pre>
+ <p>
+ will define a type which will schema-validate an instance element
+ with any of those attributes.
+ </p>
+ </div>
+ </div>
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:annotation>
+ <xs:documentation>
+ <div id="nsversioning" xml:id="nsversioning">
+ <h2><a name="nsversioning">Versioning policy for this schema
document</a></h2>
+ <div class="bodytext">
+ <p>
+ In keeping with the XML Schema WG's standard versioning
+ policy, this schema document will persist at
+ <a href="http://www.w3.org/2009/01/xml.xsd">
+ http://www.w3.org/2009/01/xml.xsd</a>.
+ </p>
+ <p>
+ At the date of issue it can also be found at
+ <a href="http://www.w3.org/2001/xml.xsd">
+ http://www.w3.org/2001/xml.xsd</a>.
+ </p>
+ <p>
+ The schema document at that URI may however change in the future,
+ in order to remain compatible with the latest version of XML
+ Schema itself, or with the XML namespace itself. In other words,
+ if the XML Schema or XML namespaces change, the version of this
+ document at <a href="http://www.w3.org/2001/xml.xsd">
+ http://www.w3.org/2001/xml.xsd
+ </a>
+ will change accordingly; the version at
+ <a href="http://www.w3.org/2009/01/xml.xsd">
+ http://www.w3.org/2009/01/xml.xsd
+ </a>
+ will not change.
+ </p>
+ <p>
+ Previous dated (and unchanging) versions of this schema
+ document are at:
+ </p>
+ <ul>
+ <li><a href="http://www.w3.org/2009/01/xml.xsd">
+ http://www.w3.org/2009/01/xml.xsd</a></li>
+ <li><a href="http://www.w3.org/2007/08/xml.xsd">
+ http://www.w3.org/2007/08/xml.xsd</a></li>
+ <li><a href="http://www.w3.org/2004/10/xml.xsd">
+ http://www.w3.org/2004/10/xml.xsd</a></li>
+ <li><a href="http://www.w3.org/2001/03/xml.xsd">
+ http://www.w3.org/2001/03/xml.xsd</a></li>
+ </ul>
+ </div>
+ </div>
+ </xs:documentation>
+ </xs:annotation>
+
+</xs:schema>
+
=======================================
--- /dev/null
+++ /java/tags/xd-common-1.0.3/pom.xml Tue Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,428 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <groupId>org.nhind</groupId>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>xd-common</artifactId>
+ <name>NHIN Direct XD* Common Library</name>
+ <version>1.0.3</version>
+ <description>Library for common XD* operations and
objects</description>
+ <inceptionYear>2010</inceptionYear>
+
<url>http://api.nhindirect.org/x/www/api.nhindirect.org/java/site/xd-common/${project.version}</url>
+ <developers>
+ <developer>
+ <name>Vincent Lewis</name>
+ <email>vincen...@gsihealth.com</email>
+ </developer>
+ <developer>
+ <name>Beau Grantham</name>
+ <email>bgra...@harris.com</email>
+ </developer>
+ </developers>
+ <scm>
+ <url>https://nhin-d.googlecode.com/hg/java/xd-common/</url>
+
<connection>scm:hg:https://nhin-d.googlecode.com/hg/nhin-d/java/xd-common
+ </connection>
+ </scm>
+ <licenses>
+ <license>
+ <name>New BSD License</name>
+ <url>http://nhindirect.org/BSDLicense</url>
+ </license>
+ </licenses>
+ <issueManagement>
+ <system>Google Code</system>
+ <url>http://code.google.com/p/nhin-d/issues/list</url>
+ </issueManagement>
+ <dependencies>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <version>2.5</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.nhind</groupId>
+ <artifactId>config-service-client</artifactId>
+ <version>1.0</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>1.1.1</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>2.5</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>1.4</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.activation</groupId>
+ <artifactId>activation</artifactId>
+ <version>1.1.1</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.mail</groupId>
+ <artifactId>mail</artifactId>
+ <version>1.4.1</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.directory.server</groupId>
+ <artifactId>apacheds-server-unit</artifactId>
+ <version>1.0.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>jetty-servlet-tester</artifactId>
+ <version>6.1.14</version>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>javax.activation</groupId>
+ <artifactId>activation</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>commons-codec</groupId>
+ <artifactId>commons-codec</artifactId>
+ <version>1.4</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <resources>
+ <resource>
+ <directory>src/main/resources</directory>
+ </resource>
+ <resource>
+ <directory>src/wsdl</directory>
+ <includes>
+ <include>*.wsdl</include>
+ </includes>
+ </resource>
+ </resources>
+
+ <testResources>
+ <testResource>
+ <directory>src/test/resources</directory>
+ </testResource>
+ </testResources>
+
+ <extensions>
+ <extension>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-webdav</artifactId>
+ <version>RELEASE</version>
+ </extension>
+ </extensions>
+
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ <configuration>
+ <fork>true</fork>
+ <archive>
+ <index />
+ </archive>
+ <source>1.6</source>
+ <target>1.6</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>copy</id>
+ <phase>compile</phase>
+ <goals>
+ <goal>copy</goal>
+ </goals>
+ <configuration>
+ <artifactItems>
+ <artifactItem>
+ <groupId>org.nhind</groupId>
+ <artifactId>config-service</artifactId>
+ <version>1.0</version>
+ <type>war</type>
+ <overWrite>true</overWrite>
+ <destFileName>config-service.war</destFileName>
+ </artifactItem>
+ </artifactItems>
+ <outputDirectory>
+ ${project.basedir}/war
+ </outputDirectory>
+ <overWriteReleases>true</overWriteReleases>
+ <overWriteSnapshots>true</overWriteSnapshots>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>jaxws-maven-plugin</artifactId>
+ <version>1.9</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>wsimport</goal>
+ </goals>
+ <configuration>
+ <wsdlFiles>
+
<wsdlFile>XDS.b_DocumentRepositoryWSDLSynchMTOM.wsdl</wsdlFile>
+ </wsdlFiles>
+ <wsdlLocation>
+ /XDS.b_DocumentRepositoryWSDLSynchMTOM.wsdl
+ </wsdlLocation>
+
<staleFile>${project.build.directory}/jaxws/stale/XDS.b_DocumentRepositoryWSDLSynchMTOM.stale
+ </staleFile>
+ </configuration>
+
<id>wsimport-generate-XDS.b_DocumentRepositoryWSDLSynchMTOM</id>
+ <phase>generate-sources</phase>
+ </execution>
+ </executions>
+ <dependencies>
+ <dependency>
+ <groupId>javax.xml.ws</groupId>
+ <artifactId>jaxws-api</artifactId>
+ <version>2.1</version>
+ </dependency>
+ </dependencies>
+ <configuration>
+
<sourceDestDir>${project.build.directory}/generated-sources/jaxws-wsimport
+ </sourceDestDir>
+ <xnocompile>true</xnocompile>
+ <verbose>true</verbose>
+ <extension>true</extension>
+ <catalog>${basedir}/src/jax-ws-catalog.xml</catalog>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jxr-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ <version>2.0.3</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>com.atlassian.maven.plugins</groupId>
+ <artifactId>maven-clover2-plugin</artifactId>
+ <version>3.0.2</version>
+ <configuration>
+ <jdk>1.6</jdk>
+ <licenseLocation>
+ ${project.basedir}/../licenses/clover.license
+ </licenseLocation>
+ <excludes>
+ <exclude>**/jaxb/*</exclude>
+ </excludes>
+ </configuration>
+ <executions>
+ <execution>
+ <phase>pre-site</phase>
+ <goals>
+ <goal>instrument</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <!-- for release only
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <version>2.6.1</version>
+ <configuration>
+ <charset>UTF-8</charset>
+ <docencoding>UTF-8</docencoding>
+ <docfilessubdirs>true</docfilessubdirs>
+ <detectJavaApiLink>true</detectJavaApiLink>
+ <detectLinks>true</detectLinks>
+ <source>1.6</source>
+ <show>protected</show>
+ <excludePackageNames>
+ org.nhindirect.xd.transform.parse.ccd.jaxb
+ </excludePackageNames>
+ </configuration>
+ <executions>
+ <execution>
+ <phase>package</phase>
+ <id>attach-javadocs</id>
+ <goals>
+ <goal>jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-gpg-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>sign-artifacts</id>
+ <phase>package</phase>
+ <goals>
+ <goal>sign</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ -->
+ </plugins>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-release-plugin</artifactId>
+ <version>2.0</version>
+ <configuration>
+
<tagBase>scm:hg:https://nhin-d.googlecode.com/hg/nhin-d/java/tags</tagBase>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-project-info-reports-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <version>2.6.1</version>
+ <configuration>
+ <charset>UTF-8</charset>
+ <docencoding>UTF-8</docencoding>
+ <docfilessubdirs>true</docfilessubdirs>
+ <detectJavaApiLink>true</detectJavaApiLink>
+ <detectLinks>true</detectLinks>
+ <source>1.6</source>
+ <show>protected</show>
+ <excludePackageNames>
+ org.nhindirect.xd.transform.parse.ccd.jaxb
+ </excludePackageNames>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-pmd-plugin</artifactId>
+ <configuration>
+ <targetJdk>1.6</targetJdk>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-report-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jxr-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-changelog-plugin</artifactId>
+ <configuration>
+ <dates>
+ <!-- Insert the date of the most recent release -->
+ <date>2007-01-01</date>
+ </dates>
+ <outputEncoding>UTF-8</outputEncoding>
+ <type>date</type>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>clirr-maven-plugin</artifactId>
+ <configuration>
+ <minSeverity>info</minSeverity>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>findbugs-maven-plugin</artifactId>
+ <version>1.2</version>
+ <configuration>
+ <effort>Max</effort>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>taglist-maven-plugin</artifactId>
+ <configuration>
+ <tags>
+ <tag>FIXME</tag>
+ <tag>TODO</tag>
+ <tag>WARN</tag>
+ <tag>@deprecated</tag>
+ </tags>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>com.atlassian.maven.plugins</groupId>
+ <artifactId>maven-clover2-plugin</artifactId>
+ <version>3.0.2</version>
+ <configuration>
+ <licenseLocation>
+ ${project.basedir}/../licenses/clover.license
+ </licenseLocation>
+ </configuration>
+ </plugin>
+ </plugins>
+ </reporting>
+
+ <distributionManagement>
+ <site>
+ <id>nhind-site</id>
+ <name>NHIN Direct API publication site</name>
+
<url>sftp://api.nhindirect.org/x/www/api.nhindirect.org/java/site/xd-common/${project.version}
+ </url>
+ </site>
+ <snapshotRepository>
+ <id>sonatype-snapshot</id>
+ <name>Sonatype OSS Maven SNAPSHOT Repository</name>
+
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
+ <uniqueVersion>false</uniqueVersion>
+ </snapshotRepository>
+ <repository>
+ <id>sonatype-release</id>
+ <name>Sonatype OSS Maven Release Repositor</name>
+
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
+ <uniqueVersion>false</uniqueVersion>
+ </repository>
+ </distributionManagement>
+</project>
=======================================
--- /dev/null
+++ /java/tags/xd-common-1.0.3/src/jax-ws-catalog.xml Tue Oct 28 12:15:16
2014 UTC
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"
prefer="system">
+ <system systemId="http://www.w3.org/2001/xml.xsd"
uri="wsdl/www.w3.org/2001/xml.xsd"/>
+</catalog>
=======================================
--- /dev/null
+++
/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/common/DirectDocument2.java
Tue Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,1399 @@
+/*
+ * Copyright (c) 2010, NHIN Direct Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the the NHIN Direct Project (nhindirect.org)
+ * nor the names of its contributors may be used to endorse or promote
products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package org.nhindirect.xd.common;
+
+import static org.nhindirect.xd.common.DirectDocumentUtils.addSlot;
+import static
org.nhindirect.xd.common.DirectDocumentUtils.makeInternationalStringType;
+import static org.nhindirect.xd.common.DirectDocumentUtils.makeSlot;
+import static org.nhindirect.xd.common.DirectDocumentUtils.slotNotEmpty;
+
+import java.io.File;
+import java.io.IOException;
+import java.math.BigInteger;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.UUID;
+
+import javax.activation.MimetypesFileTypeMap;
+import javax.xml.namespace.QName;
+
+import oasis.names.tc.ebxml_regrep.xsd.rim._3.ClassificationType;
+import oasis.names.tc.ebxml_regrep.xsd.rim._3.ExternalIdentifierType;
+import oasis.names.tc.ebxml_regrep.xsd.rim._3.ExtrinsicObjectType;
+import oasis.names.tc.ebxml_regrep.xsd.rim._3.SlotType1;
+
+import org.apache.commons.codec.binary.Hex;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.time.DateUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nhindirect.xd.common.exception.MetadataException;
+import org.nhindirect.xd.common.type.ClassificationTypeEnum;
+import org.nhindirect.xd.common.type.ExternalIdentifierTypeEnum;
+import org.nhindirect.xd.common.type.ExtrinsicObjectTypeEnum;
+import org.nhindirect.xd.common.type.FormatCodeEnum;
+import org.nhindirect.xd.common.type.SlotType1Enum;
+import org.nhindirect.xd.common.type.SubmitObjectsRequestEnum;
+import org.nhindirect.xd.transform.pojo.SimplePerson;
+import org.nhindirect.xd.transform.util.XmlUtils;
+
+/**
+ * Abstract representation of a document with supporting metadata.
+ *
+ * TODO: This replace DirectDocument with this class.. wanted to wait to
avoid
+ * any merge conflicts for ongoing XD* work.
+ *
+ * @author beau
+ */
+public class DirectDocument2
+{
+ private byte[] data;
+ private Metadata metadata;
+
+ private static final Log LOGGER =
LogFactory.getFactory().getInstance(DirectDocument2.class);
+
+ /**
+ * Default document constructor.
+ */
+ public DirectDocument2()
+ {
+ this.metadata = new Metadata();
+ }
+
+ /**
+ * @param file
+ * @throws IOException
+ */
+ public DirectDocument2(File file) throws IOException
+ {
+ this.data = FileUtils.readFileToByteArray(file);
+ this.metadata = new Metadata(file);
+ }
+
+ /**
+ * Get the value of metadata.
+ *
+ * @return the metadata.
+ */
+ public Metadata getMetadata()
+ {
+ return metadata;
+ }
+
+ /**
+ * Set the value of metadata.
+ *
+ * @param metadata
+ * The metadata to set.
+ */
+ public void setMetadata(Metadata metadata)
+ {
+ this.metadata = metadata;
+ }
+
+ /**
+ * Get the value of data.
+ *
+ * @return the data The value of data.
+ */
+ public byte[] getData()
+ {
+ return data;
+ }
+
+ /**
+ * Set the value of data.
+ *
+ * @param data
+ * The data to set;
+ */
+ public void setData(byte[] data)
+ {
+ this.data = data;
+
+ this.metadata.setHash(getSha1Hash(data));
+ this.metadata.setSize(new Long(data.length));
+ }
+
+ /**
+ * Abstract representation of document metadata.
+ *
+ * @author beau
+ */
+ static public class Metadata
+ {
+ private String mimeType;
+ private String id;
+ private String description;
+
+ private Date creationTime;
+ private String languageCode;
+ private Date serviceStartTime;
+ private Date serviceStopTime;
+
+ private SimplePerson sourcePatient = new SimplePerson();
+
+ private String authorPerson;
+ private List<String> authorInstitution = new ArrayList<String>();
+ private String authorRole;
+ private String authorSpecialty;
+
+ private String classCode;
+ private String classCode_localized;
+
+ private String confidentialityCode;
+ private String confidentialityCode_localized;
+
+ private String formatCode;
+ private String formatCode_localized;
+
+ private String healthcareFacilityTypeCode;
+ private String healthcareFacilityTypeCode_localized;
+
+ private String practiceSettingCode;
+ private String practiceSettingCode_localized;
+
+ private String loinc;
+ private String loinc_localized;
+
+ private String patientId;
+ private String uniqueId;
+
+ private String hash;
+ private Long size;
+
+ private String submissionSetStatus;
+
+ private String uri;
+
+ /**
+ * Default constructor.
+ */
+ public Metadata()
+ {
+ this.id = UUID.randomUUID().toString();
+ this.submissionSetStatus = "Original";
+ }
+
+ /**
+ * Construct a new DirectDocument2.Metadata with default values
given a
+ * File object.
+ *
+ * @param file
+ * A File object from which to extract metadata.
+ */
+ public Metadata(File file) throws IOException
+ {
+ super();
+
+ MimetypesFileTypeMap mimetypesFileTypeMap = new
MimetypesFileTypeMap();
+
+ mimetypesFileTypeMap.addMimeTypes("application/msword doc dot
wiz rtf");
+ mimetypesFileTypeMap.addMimeTypes("application/pdf pdf");
+ mimetypesFileTypeMap.addMimeTypes("application/postscript ai
eps ps");
+ mimetypesFileTypeMap.addMimeTypes("application/vnd.ms-excel
xls xlw xla xlc xlm xlt");
+
mimetypesFileTypeMap.addMimeTypes("application/vnd.ms-powerpoint ppt pps
pot");
+ mimetypesFileTypeMap.addMimeTypes("application/x-javascript
js");
+ mimetypesFileTypeMap.addMimeTypes("application/x-asap asp");
+ mimetypesFileTypeMap.addMimeTypes("application/x-latex latex");
+ mimetypesFileTypeMap.addMimeTypes("application/x-tar tar");
+ mimetypesFileTypeMap.addMimeTypes("application/x-texinfo
texinfo texi");
+ mimetypesFileTypeMap.addMimeTypes("application/zip zip");
+ mimetypesFileTypeMap.addMimeTypes("text/css css");
+ mimetypesFileTypeMap.addMimeTypes("text/html htm html");
+ mimetypesFileTypeMap.addMimeTypes("text/plain txt");
+ mimetypesFileTypeMap.addMimeTypes("text/richtext rtx");
+ mimetypesFileTypeMap.addMimeTypes("text/xml xml");
+
+ // Best guess at MIME type from list above
+ this.mimeType = mimetypesFileTypeMap.getContentType(file);
+
+ // File size and hash
+ this.size = file.length();
+ this.hash = getSha1Hash(FileUtils.readFileToString(file));
+ }
+
+ /**
+ * @return
+ */
+ protected ExtrinsicObjectType generateExtrinsicObjectType()
+ {
+ ExtrinsicObjectType eot = new ExtrinsicObjectType();
+
+ eot.setId(id);
+ eot.setMimeType(mimeType);
+
+ eot.setObjectType(ExtrinsicObjectTypeEnum.DOC.getObjectType());
+
+ List<SlotType1> slots = eot.getSlot();
+ addSlot(slots, makeSlot(SlotType1Enum.CREATION_TIME,
creationTime != null ? (new
SimpleDateFormat("yyyyMMdd")).format(creationTime) : null));
+ addSlot(slots, makeSlot(SlotType1Enum.LANGUAGE_CODE,
languageCode));
+ addSlot(slots, makeSlot(SlotType1Enum.SERVICE_START_TIME,
serviceStartTime != null ? (new
SimpleDateFormat("yyyyMMddHHmm")).format(serviceStartTime) : null));
+ addSlot(slots, makeSlot(SlotType1Enum.SERVICE_STOP_TIME,
serviceStopTime != null ? (new
SimpleDateFormat("yyyyMMddHHmm")).format(serviceStopTime) : null));
+ addSlot(slots, makeSlot(SlotType1Enum.SOURCE_PATIENT_ID,
sourcePatient.getLocalId() + "^^^&" + sourcePatient.getLocalOrg()
+ "&ISO"));
+ addSlot(slots, makeSlot(SlotType1Enum.SOURCE_PATIENT_INFO,
sourcePatient));
+ addSlot(slots, makeSlot(SlotType1Enum.HASH, hash));
+ addSlot(slots, makeSlot(SlotType1Enum.SIZE, size == null ?
null : String.valueOf(size)));
+ addSlot(slots, makeSlot(SlotType1Enum.URI, uri == null ?
null : uri));
+
+ eot.setName(makeInternationalStringType(classCode_localized));
+ eot.setDescription(makeInternationalStringType(description));
+
+ // author
+ ClassificationType authorClassification = new
ClassificationType();
+ authorClassification.setClassifiedObject(id);
+ authorClassification.setNodeRepresentation(""); // required
empty string
+
authorClassification.setId(ClassificationTypeEnum.DOC_AUTHOR.getClassificationId());
+
authorClassification.setClassificationScheme(ClassificationTypeEnum.DOC_AUTHOR.getClassificationScheme());
+
+ List<SlotType1> authorClassificationSlots =
authorClassification.getSlot();
+ addSlot(authorClassificationSlots,
makeSlot(SlotType1Enum.AUTHOR_PERSON, authorPerson));
+ addSlot(authorClassificationSlots,
makeSlot(SlotType1Enum.AUTHOR_INSTITUTION, authorInstitution));
+ addSlot(authorClassificationSlots,
makeSlot(SlotType1Enum.AUTHOR_ROLE, authorRole));
+ addSlot(authorClassificationSlots,
makeSlot(SlotType1Enum.AUTHOR_SPECIALTY, authorSpecialty));
+
+ eot.getClassification().add(authorClassification);
+
+ // classCode
+ if (classCode != null)
+ {
+ ClassificationType classCodeClassification = new
ClassificationType();
+ classCodeClassification.setClassifiedObject(id);
+ classCodeClassification.setNodeRepresentation(classCode);
+
classCodeClassification.setName(makeInternationalStringType(classCode_localized));
+
classCodeClassification.setId(ClassificationTypeEnum.DOC_CLASS_CODE.getClassificationId());
+
classCodeClassification.setClassificationScheme(ClassificationTypeEnum.DOC_CLASS_CODE.getClassificationScheme());
+
+ List<SlotType1> classCodeClassificationSlots =
classCodeClassification.getSlot();
+ addSlot(classCodeClassificationSlots,
makeSlot(SlotType1Enum.CODING_SCHEME,
ClassificationTypeEnum.DOC_CLASS_CODE.getCodingScheme()));
+
+ eot.getClassification().add(classCodeClassification);
+ }
+
+ // confidentialityCode
+ if (confidentialityCode != null)
+ {
+ ClassificationType confidentialityCodeClassification = new
ClassificationType();
+ confidentialityCodeClassification.setClassifiedObject(id);
+
confidentialityCodeClassification.setNodeRepresentation(confidentialityCode);
+
confidentialityCodeClassification.setName(makeInternationalStringType(confidentialityCode_localized));
+
confidentialityCodeClassification.setId(ClassificationTypeEnum.DOC_CONFIDENTIALITY_CODE.getClassificationId());
+
confidentialityCodeClassification.setClassificationScheme(ClassificationTypeEnum.DOC_CONFIDENTIALITY_CODE.getClassificationScheme());
+
+ List<SlotType1> confidentialityCodeClassificationSlots =
confidentialityCodeClassification.getSlot();
+ addSlot(confidentialityCodeClassificationSlots,
makeSlot(SlotType1Enum.CODING_SCHEME,
ClassificationTypeEnum.DOC_CONFIDENTIALITY_CODE.getCodingScheme()));
+
+
eot.getClassification().add(confidentialityCodeClassification);
+ }
+
+ // formatCode
+ if (formatCode != null)
+ {
+ ClassificationType formatCodeClassification = new
ClassificationType();
+ formatCodeClassification.setClassifiedObject(id);
+ formatCodeClassification.setNodeRepresentation(formatCode);
+
formatCodeClassification.setName(makeInternationalStringType(formatCode_localized));
+
formatCodeClassification.setId(ClassificationTypeEnum.DOC_FORMAT_CODE.getClassificationId());
+
formatCodeClassification.setClassificationScheme(ClassificationTypeEnum.DOC_FORMAT_CODE.getClassificationScheme());
+
+ List<SlotType1> formatCodeClassificationSlots =
formatCodeClassification.getSlot();
+ addSlot(formatCodeClassificationSlots,
makeSlot(SlotType1Enum.CODING_SCHEME,
ClassificationTypeEnum.DOC_FORMAT_CODE.getCodingScheme()));
+
+ eot.getClassification().add(formatCodeClassification);
+ }
+
+ // healthcareFacilityTypeCode
+ if (healthcareFacilityTypeCode != null)
+ {
+ ClassificationType
healthcareFacilityTypeCodeClassification = new ClassificationType();
+
healthcareFacilityTypeCodeClassification.setClassifiedObject(id);
+
healthcareFacilityTypeCodeClassification.setNodeRepresentation(healthcareFacilityTypeCode);
+
healthcareFacilityTypeCodeClassification.setName(makeInternationalStringType(healthcareFacilityTypeCode_localized));
+
healthcareFacilityTypeCodeClassification.setId(ClassificationTypeEnum.DOC_HEALTHCARE_FACILITY_TYPE_CODE.getClassificationId());
+
healthcareFacilityTypeCodeClassification.setClassificationScheme(ClassificationTypeEnum.DOC_HEALTHCARE_FACILITY_TYPE_CODE.getClassificationScheme());
+
+ List<SlotType1>
healthcareFacilityTypeCodeClassificationSlots =
healthcareFacilityTypeCodeClassification.getSlot();
+ addSlot(healthcareFacilityTypeCodeClassificationSlots,
makeSlot(SlotType1Enum.CODING_SCHEME,
ClassificationTypeEnum.DOC_HEALTHCARE_FACILITY_TYPE_CODE.getCodingScheme()));
+
+
eot.getClassification().add(healthcareFacilityTypeCodeClassification);
+ }
+
+ // practiceSettingCode
+ if (practiceSettingCode != null)
+ {
+ ClassificationType practiceSettingCodeClassification = new
ClassificationType();
+ practiceSettingCodeClassification.setClassifiedObject(id);
+
practiceSettingCodeClassification.setNodeRepresentation(practiceSettingCode);
+
practiceSettingCodeClassification.setName(makeInternationalStringType(practiceSettingCode_localized));
+
practiceSettingCodeClassification.setId(ClassificationTypeEnum.DOC_PRACTICE_SETTING_CODE.getClassificationId());
+
practiceSettingCodeClassification.setClassificationScheme(ClassificationTypeEnum.DOC_PRACTICE_SETTING_CODE.getClassificationScheme());
+
+ List<SlotType1> practiceSettingCodeClassificationSlots =
practiceSettingCodeClassification.getSlot();
+ addSlot(practiceSettingCodeClassificationSlots,
makeSlot(SlotType1Enum.CODING_SCHEME,
ClassificationTypeEnum.DOC_PRACTICE_SETTING_CODE.getCodingScheme()));
+
+
eot.getClassification().add(practiceSettingCodeClassification);
+ }
+
+ // loinc
+ if (loinc != null)
+ {
+ ClassificationType loincClassification = new
ClassificationType();
+ loincClassification.setClassifiedObject(id);
+ loincClassification.setNodeRepresentation(loinc);
+
loincClassification.setName(makeInternationalStringType(loinc_localized));
+
loincClassification.setId(ClassificationTypeEnum.DOC_LOINC.getClassificationId());
+
loincClassification.setClassificationScheme(ClassificationTypeEnum.DOC_LOINC.getClassificationScheme());
+
+ List<SlotType1> loincClassificationSlots =
loincClassification.getSlot();
+ addSlot(loincClassificationSlots,
makeSlot(SlotType1Enum.CODING_SCHEME,
ClassificationTypeEnum.DOC_LOINC.getCodingScheme()));
+
+ eot.getClassification().add(loincClassification);
+ }
+
+ // patientId
+ ExternalIdentifierType xdsDocumentEntry_patientId = new
ExternalIdentifierType();
+ xdsDocumentEntry_patientId.setValue(patientId);
+ xdsDocumentEntry_patientId.setRegistryObject(id);
+
xdsDocumentEntry_patientId.setId(ExternalIdentifierTypeEnum.DOC_PATIENT_ID.getIdentificationId());
+
xdsDocumentEntry_patientId.setIdentificationScheme(ExternalIdentifierTypeEnum.DOC_PATIENT_ID.getIdentificationScheme());
+
xdsDocumentEntry_patientId.setName(makeInternationalStringType(ExternalIdentifierTypeEnum.DOC_PATIENT_ID.getLocalizedString()));
+
+ eot.getExternalIdentifier().add(xdsDocumentEntry_patientId);
+
+ // uniqueId
+ ExternalIdentifierType xdsDocumentEntry_uniqueId = new
ExternalIdentifierType();
+ xdsDocumentEntry_uniqueId.setValue(uniqueId);
+ xdsDocumentEntry_uniqueId.setRegistryObject(id);
+
xdsDocumentEntry_uniqueId.setId(ExternalIdentifierTypeEnum.DOC_UNIQUE_ID.getIdentificationId());
+
xdsDocumentEntry_uniqueId.setIdentificationScheme(ExternalIdentifierTypeEnum.DOC_UNIQUE_ID.getIdentificationScheme());
+
xdsDocumentEntry_uniqueId.setName(makeInternationalStringType(ExternalIdentifierTypeEnum.DOC_UNIQUE_ID.getLocalizedString()));
+
+ eot.getExternalIdentifier().add(xdsDocumentEntry_uniqueId);
+
+ return eot;
+ }
+
+ public void setValues(ExtrinsicObjectType eot) throws
MetadataException
+ {
+ mimeType = eot.getMimeType();
+ id = eot.getId();
+
+ if (eot.getDescription() != null &&
eot.getDescription().getLocalizedString() != null
&& !eot.getDescription().getLocalizedString().isEmpty())
+ description =
eot.getDescription().getLocalizedString().get(0).getValue();
+
+ for (SlotType1 slot : eot.getSlot())
+ {
+ if (SlotType1Enum.CREATION_TIME.matches(slot.getName()))
+ {
+ if (slotNotEmpty(slot))
+ {
+ try
+ {
+ creationTime =
DateUtils.parseDate(slot.getValueList().getValue().get(0),
+ new String[]
+
{ "yyyyMMddHHmmss", "yyyyMMddHHmm", "yyyyMMdd" });
+ }
+ catch (ParseException e)
+ {
+ LOGGER.error("Unable to parse creationTime",
e);
+ throw new MetadataException("Unable to parse
creationTime", e);
+ }
+ }
+ }
+ else if
(SlotType1Enum.LANGUAGE_CODE.matches(slot.getName()))
+ {
+ if (slotNotEmpty(slot))
+ languageCode =
slot.getValueList().getValue().get(0);
+ }
+ else if
(SlotType1Enum.SERVICE_START_TIME.matches(slot.getName()))
+ {
+ if (slotNotEmpty(slot))
+ {
+ try
+ {
+ serviceStartTime =
DateUtils.parseDate(slot.getValueList().getValue().get(0),
+ new String[]
+
{ "yyyyMMddHHmmss", "yyyyMMddHHmm", "yyyyMMdd" });
+ }
+ catch (ParseException e)
+ {
+ LOGGER.error("Unable to parse
serviceStartTime", e);
+ throw new MetadataException("Unable to parse
serviceStartTime", e);
+ }
+ }
+ }
+ else if
(SlotType1Enum.SERVICE_STOP_TIME.matches(slot.getName()))
+ {
+ if (slotNotEmpty(slot))
+ {
+ try
+ {
+ serviceStopTime =
DateUtils.parseDate(slot.getValueList().getValue().get(0),
+ new String[]
+
{ "yyyyMMddHHmmss", "yyyyMMddHHmm", "yyyyMMdd" });
+ }
+ catch (ParseException e)
+ {
+ LOGGER.error("Unable to parse
serviceStopTime", e);
+ throw new MetadataException("Unable to parse
serviceStopTime", e);
+ }
+ }
+ }
+ else if
(SlotType1Enum.SOURCE_PATIENT_ID.matches(slot.getName()))
+ {
+ if (slotNotEmpty(slot))
+ {
+ String[] tokens =
StringUtils.splitPreserveAllTokens(slot.getValueList().getValue().get(0), "^");
+
+ if (tokens != null && tokens.length >= 1)
+ sourcePatient.setLocalId(tokens[0]);
+ else
+
sourcePatient.setLocalId(slot.getValueList().getValue().get(0));
+
+ if (tokens != null && tokens.length >= 4)
+ {
+ tokens =
StringUtils.splitPreserveAllTokens(slot.getValueList().getValue().get(0), "&");
+
+ if (tokens.length >= 2)
+ sourcePatient.setLocalOrg(tokens[1]);
+ }
+ }
+ }
+ else if
(SlotType1Enum.SOURCE_PATIENT_INFO.matches(slot.getName()))
+
+ {
+ if (slotNotEmpty(slot))
+ {
+ for (String value : slot.getValueList().getValue())
+ {
+ if (StringUtils.startsWith(value, "PID-3|"))
+ {
+ // Already have this from sourcePatientId
+ }
+ else if
(StringUtils.startsWith(value, "PID-5|"))
+ {
+ String[] split =
StringUtils.splitPreserveAllTokens(value, "|");
+ String[] tokens =
StringUtils.splitPreserveAllTokens(split[1], "^");
+
+ if (tokens != null && tokens.length >= 1)
+ sourcePatient.setLastName(tokens[0]);
+
+ if (tokens != null && tokens.length >= 2)
+ sourcePatient.setFirstName(tokens[1]);
+
+ if (tokens != null && tokens.length >= 3)
+ sourcePatient.setMiddleName(tokens[2]);
+ }
+ else if
(StringUtils.startsWith(value, "PID-7|"))
+ {
+ String[] split =
StringUtils.splitPreserveAllTokens(value, "|");
+
+ if (split.length >= 2)
+
sourcePatient.setBirthDateTime(split[1]);
+ }
+ else if
(StringUtils.startsWith(value, "PID-8|"))
+ {
+ String[] split =
StringUtils.splitPreserveAllTokens(value, "|");
+
+ if (split.length >= 2)
+ sourcePatient.setGenderCode(split[1]);
+ }
+ else if
(StringUtils.startsWith(value, "PID-11|"))
+ {
+ String[] split =
StringUtils.splitPreserveAllTokens(value, "|");
+ String[] tokens =
StringUtils.splitPreserveAllTokens(split[1], "^");
+
+ if (tokens != null && tokens.length >= 1)
+
sourcePatient.setStreetAddress1(tokens[0]);
+
+ if (tokens != null && tokens.length >= 3)
+ sourcePatient.setCity(tokens[2]);
+
+ if (tokens != null && tokens.length >= 4)
+ sourcePatient.setState(tokens[3]);
+
+ if (tokens != null && tokens.length >= 5)
+ sourcePatient.setZipCode(tokens[4]);
+
+ if (tokens != null && tokens.length >= 6)
+ sourcePatient.setCountry(tokens[5]);
+ }
+ }
+ }
+ }
+ else if (SlotType1Enum.HASH.matches(slot.getName()))
+ {
+ if (slotNotEmpty(slot))
+ hash = slot.getValueList().getValue().get(0);
+ }
+ else if (SlotType1Enum.URI.matches(slot.getName()))
+ {
+ if (slotNotEmpty(slot))
+ uri = slot.getValueList().getValue().get(0);
+ }
+ else if (SlotType1Enum.SIZE.matches(slot.getName()))
+ {
+ if (slotNotEmpty(slot))
+ size =
Long.valueOf(slot.getValueList().getValue().get(0));
+ }
+ }
+
+ for (ClassificationType ct : eot.getClassification())
+ {
+ if
(ClassificationTypeEnum.DOC_AUTHOR.matchesScheme(ct.getClassificationScheme()))
+ {
+ for (SlotType1 slot : ct.getSlot())
+ {
+ if
(SlotType1Enum.AUTHOR_PERSON.matches(slot.getName()))
+ {
+ if (slotNotEmpty(slot))
+ authorPerson =
slot.getValueList().getValue().get(0);
+ }
+ else if
(SlotType1Enum.AUTHOR_INSTITUTION.matches(slot.getName()))
+ {
+ if (slotNotEmpty(slot))
+ for (String value :
slot.getValueList().getValue())
+ authorInstitution.add(value);
+ }
+ else if
(SlotType1Enum.AUTHOR_ROLE.matches(slot.getName()))
+ {
+ if (slotNotEmpty(slot))
+ authorRole =
slot.getValueList().getValue().get(0);
+ }
+ else if
(SlotType1Enum.AUTHOR_SPECIALTY.matches(slot.getName()))
+ {
+ if (slotNotEmpty(slot))
+ authorSpecialty =
slot.getValueList().getValue().get(0);
+ }
+ }
+ }
+ else if
(ClassificationTypeEnum.DOC_CLASS_CODE.matchesScheme(ct.getClassificationScheme()))
+ {
+ for (SlotType1 slot : ct.getSlot())
+ {
+ if
(SlotType1Enum.CODING_SCHEME.matches(slot.getName()))
+ {
+ if (slotNotEmpty(slot))
+ {
+ @SuppressWarnings("unused") String
codingScheme = slot.getValueList().getValue().get(0);
+ }
+ }
+ }
+
+ classCode = ct.getNodeRepresentation();
+
+ if (ct.getName() != null &&
ct.getName().getLocalizedString() != null
&& !ct.getName().getLocalizedString().isEmpty())
+ classCode_localized =
ct.getName().getLocalizedString().get(0).getValue();
+ }
+ else if
(ClassificationTypeEnum.DOC_CONFIDENTIALITY_CODE.matchesScheme(ct.getClassificationScheme()))
+ {
+ for (SlotType1 slot : ct.getSlot())
+ {
+ if
(SlotType1Enum.CODING_SCHEME.matches(slot.getName()))
+ {
+ if (slotNotEmpty(slot))
+ {
+ @SuppressWarnings("unused") String
codingScheme = slot.getValueList().getValue().get(0);
+ }
+ }
+ }
+
+ confidentialityCode = ct.getNodeRepresentation();
+
+ if (ct.getName() != null &&
ct.getName().getLocalizedString() != null
&& !ct.getName().getLocalizedString().isEmpty())
+ confidentialityCode_localized =
ct.getName().getLocalizedString().get(0).getValue();
+ }
+ else if
(ClassificationTypeEnum.DOC_FORMAT_CODE.matchesScheme(ct.getClassificationScheme()))
+ {
+ for (SlotType1 slot : ct.getSlot())
+ {
+ if
(SlotType1Enum.CODING_SCHEME.matches(slot.getName()))
+ {
+ if (slotNotEmpty(slot))
+ {
+ @SuppressWarnings("unused") String
codingScheme = slot.getValueList().getValue().get(0);
+ }
+ }
+ }
+
+ formatCode = ct.getNodeRepresentation();
+
+ if (ct.getName() != null &&
ct.getName().getLocalizedString() != null
&& !ct.getName().getLocalizedString().isEmpty())
+ formatCode_localized =
ct.getName().getLocalizedString().get(0).getValue();
+ }
+ else if
(ClassificationTypeEnum.DOC_HEALTHCARE_FACILITY_TYPE_CODE.matchesScheme(ct.getClassificationScheme()))
+ {
+ for (SlotType1 slot : ct.getSlot())
+ {
+ if
(SlotType1Enum.CODING_SCHEME.matches(slot.getName()))
+ {
+ if (slotNotEmpty(slot))
+ {
+ @SuppressWarnings("unused") String
codingScheme = slot.getValueList().getValue().get(0);
+ }
+ }
+ }
+
+ healthcareFacilityTypeCode =
ct.getNodeRepresentation();
+
+ if (ct.getName() != null &&
ct.getName().getLocalizedString() != null
&& !ct.getName().getLocalizedString().isEmpty())
+ healthcareFacilityTypeCode_localized =
ct.getName().getLocalizedString().get(0).getValue();
+ }
+ else if
(ClassificationTypeEnum.DOC_PRACTICE_SETTING_CODE.matchesScheme(ct.getClassificationScheme()))
+ {
+ for (SlotType1 slot : ct.getSlot())
+ {
+ if
(SlotType1Enum.CODING_SCHEME.matches(slot.getName()))
+ {
+ if (slotNotEmpty(slot))
+ {
+ @SuppressWarnings("unused") String
codingScheme = slot.getValueList().getValue().get(0);
+ }
+ }
+ }
+
+ practiceSettingCode = ct.getNodeRepresentation();
+
+ if (ct.getName() != null &&
ct.getName().getLocalizedString() != null
&& !ct.getName().getLocalizedString().isEmpty())
+ practiceSettingCode_localized =
ct.getName().getLocalizedString().get(0).getValue();
+ }
+ else if
(ClassificationTypeEnum.DOC_LOINC.matchesScheme(ct.getClassificationScheme()))
+ {
+ for (SlotType1 slot : ct.getSlot())
+ {
+ if
(SlotType1Enum.CODING_SCHEME.matches(slot.getName()))
+ {
+ if (slotNotEmpty(slot))
+ {
+ @SuppressWarnings("unused") String
codingScheme = slot.getValueList().getValue().get(0);
+ }
+ }
+ }
+
+ loinc = ct.getNodeRepresentation();
+
+ if (ct.getName() != null &&
ct.getName().getLocalizedString() != null
&& !ct.getName().getLocalizedString().isEmpty())
+ loinc_localized =
ct.getName().getLocalizedString().get(0).getValue();
+ }
+ }
+
+ for (ExternalIdentifierType eit : eot.getExternalIdentifier())
+ {
+ if
(ExternalIdentifierTypeEnum.DOC_PATIENT_ID.matchesScheme(eit.getIdentificationScheme()))
+ {
+ patientId = eit.getValue();
+ }
+ else if
(ExternalIdentifierTypeEnum.DOC_UNIQUE_ID.matchesScheme(eit.getIdentificationScheme()))
+ {
+ uniqueId = eit.getValue();
+ }
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString()
+ {
+ QName qname = new
QName(SubmitObjectsRequestEnum.EXTRINSIC_OBJECT.getNamespaceUri(),
SubmitObjectsRequestEnum.EXTRINSIC_OBJECT.getName());
+ return XmlUtils.marshal(qname, generateExtrinsicObjectType(),
ihe.iti.xds_b._2007.ObjectFactory.class);
+ }
+
+ /**
+ * @return the mimeType
+ */
+ public String getMimeType()
+ {
+ return mimeType;
+ }
+
+ /**
+ * @param mimeType
+ * the mimeType to set
+ */
+ public void setMimeType(String mimeType)
+ {
+ this.mimeType = mimeType;
+ }
+
+ /**
+ * @return the id
+ */
+ public String getId()
+ {
+ return id;
+ }
+
+ /**
+ * @param id
+ * The id to set.
+ */
+ public void setId(String id)
+ {
+ this.id = id;
+ }
+
+ /**
+ * @return the description
+ */
+ public String getDescription()
+ {
+ return description;
+ }
+
+ /**
+ * @param description
+ * the description to set
+ */
+ public void setDescription(String description)
+ {
+ this.description = description;
+ }
+
+ /**
+ * @return the creationTime
+ */
+ public Date getCreationTime()
+ {
+ return creationTime;
+ }
+
+ /**
+ * @param creationTime
+ * the creationTime to set
+ */
+ public void setCreationTime(Date creationTime)
+ {
+ this.creationTime = creationTime;
+ }
+
+ /**
+ * @return the languageCode
+ */
+ public String getLanguageCode()
+ {
+ return languageCode;
+ }
+
+ /**
+ * @param languageCode
+ * the languageCode to set
+ */
+ public void setLanguageCode(String languageCode)
+ {
+ this.languageCode = languageCode;
+ }
+
+ /**
+ * @return the serviceStartTime
+ */
+ public Date getServiceStartTime()
+ {
+ return serviceStartTime;
+ }
+
+ /**
+ * @param serviceStartTime
+ * the serviceStartTime to set
+ */
+ public void setServiceStartTime(Date serviceStartTime)
+ {
+ this.serviceStartTime = serviceStartTime;
+ }
+
+ /**
+ * @return the serviceStopTime
+ */
+ public Date getServiceStopTime()
+ {
+ return serviceStopTime;
+ }
+
+ /**
+ * @param serviceStopTime
+ * the serviceStopTime to set
+ */
+ public void setServiceStopTime(Date serviceStopTime)
+ {
+ this.serviceStopTime = serviceStopTime;
+ }
+
+ /**
+ * @return the sourcePatient
+ */
+ public SimplePerson getSourcePatient()
+ {
+ return sourcePatient;
+ }
+
+ /**
+ * @param sourcePatient
+ * the sourcePatient to set
+ */
+ public void setSourcePatient(SimplePerson sourcePatient)
+ {
+ this.sourcePatient = sourcePatient;
+ }
+
+ /**
+ * @return the authorPerson
+ */
+ public String getAuthorPerson()
+ {
+ return authorPerson;
+ }
+
+ /**
+ * @param authorPerson
+ * the authorPerson to set
+ */
+ public void setAuthorPerson(String authorPerson)
+ {
+ this.authorPerson = authorPerson;
+ }
+
+ /**
+ * @return the authorInstitution
+ */
+ public List<String> getAuthorInstitution()
+ {
+ return authorInstitution;
+ }
+
+ /**
+ * @param authorInstitution
+ * the authorInstitution to set
+ */
+ public void setAuthorInstitution(List<String> authorInstitution)
+ {
+ this.authorInstitution = authorInstitution;
+ }
+
+ /**
+ * @return the authorRole
+ */
+ public String getAuthorRole()
+ {
+ return authorRole;
+ }
+
+ /**
+ * @param authorRole
+ * the authorRole to set
+ */
+ public void setAuthorRole(String authorRole)
+ {
+ this.authorRole = authorRole;
+ }
+
+ /**
+ * @return the authorSpecialty
+ */
+ public String getAuthorSpecialty()
+ {
+ return authorSpecialty;
+ }
+
+ /**
+ * @param authorSpecialty
+ * the authorSpecialty to set
+ */
+ public void setAuthorSpecialty(String authorSpecialty)
+ {
+ this.authorSpecialty = authorSpecialty;
+ }
+
+ /**
+ * @return the classCode
+ */
+ public String getClassCode()
+ {
+ return classCode;
+ }
+
+ /**
+ * @param classCode
+ * the classCode to set
+ */
+ public void setClassCode(String classCode)
+ {
+ setClassCode(classCode, false);
+ }
+
+ /**
+ * @param classCode
+ * the classCode to set
+ * @param setLocalized
+ * whether or not to set the localized field with the
same
+ * value
+ */
+ public void setClassCode(String classCode, boolean setLocalized)
+ {
+ this.classCode = classCode;
+
+ if (setLocalized)
+ this.classCode_localized = classCode;
+ }
+
+ /**
+ * @return the classCode_localized
+ */
+ public String getClassCode_localized()
+ {
+ return classCode_localized;
+ }
+
+ /**
+ * @param classCodeLocalized
+ * the classCode_localized to set
+ */
+ public void setClassCode_localized(String classCodeLocalized)
+ {
+ classCode_localized = classCodeLocalized;
+ }
+
+ /**
+ * @return the confidentialityCode
+ */
+ public String getConfidentialityCode()
+ {
+ return confidentialityCode;
+ }
+
+ /**
***The diff for this file has been truncated for email.***
=======================================
--- /dev/null
+++
/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/common/DirectDocumentUtils.java
Tue Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,128 @@
+package org.nhindirect.xd.common;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import oasis.names.tc.ebxml_regrep.xsd.rim._3.InternationalStringType;
+import oasis.names.tc.ebxml_regrep.xsd.rim._3.LocalizedStringType;
+import oasis.names.tc.ebxml_regrep.xsd.rim._3.SlotType1;
+import oasis.names.tc.ebxml_regrep.xsd.rim._3.ValueListType;
+
+import org.nhindirect.xd.common.type.SlotType1Enum;
+import org.nhindirect.xd.transform.pojo.SimplePerson;
+
+public class DirectDocumentUtils
+{
+ public static SlotType1 makeSlot(SlotType1Enum slotTypeEnum,
SimplePerson person)
+ {
+ SlotType1 slot = new SlotType1();
+ ValueListType values = new ValueListType();
+ List<String> vals = values.getValue();
+
+ slot.setName(slotTypeEnum.getName());
+ slot.setValueList(values);
+
+ // <rim:Value>PID-3|pid1^^^domain</rim:Value>
+ StringBuffer pid3 = new StringBuffer("PID-3|");
+ pid3.append(person.getLocalId() != null ?
person.getLocalId() : "");
+ pid3.append("^^^&");
+ pid3.append(person.getLocalOrg() != null ?
person.getLocalOrg() : "");
+ pid3.append("&ISO");
+
+ vals.add(pid3.toString());
+
+ // <rim:Value>PID-5|Doe^John^Middle^^</rim:Value>
+ StringBuffer pid5 = new StringBuffer("PID-5|");
+ pid5.append(person.getLastName() != null ?
person.getLastName() : "");
+ pid5.append("^");
+ pid5.append(person.getFirstName() != null ?
person.getFirstName() : "");
+ pid5.append("^");
+ pid5.append(person.getMiddleName() != null ?
person.getMiddleName() : "");
+ pid5.append("^^");
+
+ vals.add(pid5.toString());
+
+ // <rim:Value>PID-7|19560527</rim:Value>
+ StringBuffer pid7 = new StringBuffer("PID-7|");
+ pid7.append(person.getBirthDateTime() != null ?
person.getBirthDateTime() : "");
+
+ vals.add(pid7.toString());
+
+ // <rim:Value>PID-8|M</rim:Value>
+ StringBuffer pid8 = new StringBuffer("PID-8|");
+ pid8.append(person.getGenderCode() != null ?
person.getGenderCode() : "");
+
+ vals.add(pid8.toString());
+
+ // <rim:Value>PID-11|100 Main
St^^Metropolis^Il^44130^USA</rim:Value>
+ StringBuffer pid11 = new StringBuffer("PID-11|");
+ pid11.append(person.getStreetAddress1() != null ?
person.getStreetAddress1() : "");
+ pid11.append("^^");
+ pid11.append(person.getCity() != null ? person.getCity() : "");
+ pid11.append("^");
+ pid11.append(person.getState() != null ? person.getState() : "");
+ pid11.append("^");
+ pid11.append(person.getZipCode() != null ?
person.getZipCode() : "");
+ pid11.append("^");
+ pid11.append(person.getCountry() != null ?
person.getCountry() : "");
+
+ vals.add(pid11.toString());
+
+ return slot;
+ }
+
+ public static SlotType1 makeSlot(SlotType1Enum slotTypeEnum, String
value)
+ {
+ SlotType1 slot = new SlotType1();
+ ValueListType valueListType = new ValueListType();
+ List<String> vals = valueListType.getValue();
+
+ slot.setName(slotTypeEnum.getName());
+ slot.setValueList(valueListType);
+ vals.add(value);
+
+ return slot;
+ }
+
+ public static SlotType1 makeSlot(SlotType1Enum slotTypeEnum,
List<String> values)
+ {
+ SlotType1 slot = new SlotType1();
+ ValueListType valueListType = new ValueListType();
+ List<String> vals = valueListType.getValue();
+
+ slot.setName(slotTypeEnum.getName());
+ slot.setValueList(valueListType);
+ vals.addAll(values);
+
+ return slot;
+ }
+
+ public static void addSlot(List<SlotType1> slots, SlotType1 slot)
+ {
+ if (slots == null)
+ slots = new ArrayList<SlotType1>();
+
+ if (slotNotEmpty(slot))
+ slots.add(slot);
+ }
+
+ public static InternationalStringType
makeInternationalStringType(String value)
+ {
+ InternationalStringType name = new InternationalStringType();
+ List<LocalizedStringType> names = name.getLocalizedString();
+ LocalizedStringType lname = new LocalizedStringType();
+ lname.setValue(value);
+ names.add(lname);
+
+ return name;
+ }
+
+ public static boolean slotNotEmpty(SlotType1 slot)
+ {
+ if (slot != null && slot.getValueList() != null &&
slot.getValueList().getValue() != null
+ && !slot.getValueList().getValue().isEmpty() &&
slot.getValueList().getValue().get(0) != null)
+ return true;
+
+ return false;
+ }
+}
=======================================
--- /dev/null
+++
/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/common/DirectDocuments.java
Tue Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,919 @@
+/*
+ * Copyright (c) 2010, NHIN Direct Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the the NHIN Direct Project (nhindirect.org)
+ * nor the names of its contributors may be used to endorse or promote
products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package org.nhindirect.xd.common;
+
+import static org.nhindirect.xd.common.DirectDocumentUtils.addSlot;
+import static
org.nhindirect.xd.common.DirectDocumentUtils.makeInternationalStringType;
+import static org.nhindirect.xd.common.DirectDocumentUtils.makeSlot;
+import static org.nhindirect.xd.common.DirectDocumentUtils.slotNotEmpty;
+import ihe.iti.xds_b._2007.ProvideAndRegisterDocumentSetRequestType;
+import
ihe.iti.xds_b._2007.ProvideAndRegisterDocumentSetRequestType.Document;
+
+import java.io.IOException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.activation.DataHandler;
+import javax.activation.DataSource;
+import javax.mail.util.ByteArrayDataSource;
+import javax.xml.bind.JAXBElement;
+import javax.xml.namespace.QName;
+
+import oasis.names.tc.ebxml_regrep.xsd.lcm._3.SubmitObjectsRequest;
+import oasis.names.tc.ebxml_regrep.xsd.rim._3.AssociationType1;
+import oasis.names.tc.ebxml_regrep.xsd.rim._3.ClassificationType;
+import oasis.names.tc.ebxml_regrep.xsd.rim._3.ExternalIdentifierType;
+import oasis.names.tc.ebxml_regrep.xsd.rim._3.ExtrinsicObjectType;
+import oasis.names.tc.ebxml_regrep.xsd.rim._3.IdentifiableType;
+import oasis.names.tc.ebxml_regrep.xsd.rim._3.RegistryObjectListType;
+import oasis.names.tc.ebxml_regrep.xsd.rim._3.RegistryPackageType;
+import oasis.names.tc.ebxml_regrep.xsd.rim._3.SlotType1;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.time.DateUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nhindirect.xd.common.exception.MetadataException;
+import org.nhindirect.xd.common.type.AssociationType1Enum;
+import org.nhindirect.xd.common.type.ClassificationTypeEnum;
+import org.nhindirect.xd.common.type.ExternalIdentifierTypeEnum;
+import org.nhindirect.xd.common.type.SlotType1Enum;
+import org.nhindirect.xd.common.type.SubmitObjectsRequestEnum;
+import org.nhindirect.xd.transform.util.XmlUtils;
+
+/**
+ * Abstract representation of a collection of documents with supporting
+ * metadata.
+ *
+ * @author beau
+ */
+public class DirectDocuments {
+
+ private List<DirectDocument2> documents;
+ private SubmissionSet submissionSet;
+ private static final Log LOGGER =
LogFactory.getFactory().getInstance(DirectDocuments.class);
+
+ public DirectDocuments() {
+ this.documents = new ArrayList<DirectDocument2>();
+ this.submissionSet = new SubmissionSet();
+ }
+
+ /**
+ * @return the submissionSet
+ */
+ public SubmissionSet getSubmissionSet() {
+ return submissionSet;
+ }
+
+ /**
+ * @param submissionSet
+ * the submissionSet to set
+ */
+ public void setSubmissionSet(SubmissionSet submissionSet) {
+ if (this.submissionSet != null
&& !this.submissionSet.equals(submissionSet)) {
+ LOGGER.warn("Overwriting existing SubmissionSet values");
+ }
+
+ this.submissionSet = submissionSet;
+ }
+
+ /**
+ * @return the documents
+ */
+ public List<DirectDocument2> getDocuments() {
+ return documents;
+ }
+
+ /**
+ * @param documents
+ * the documents to set
+ */
+ public void setDocuments(List<DirectDocument2> documents) {
+ this.documents = documents;
+ }
+
+ /**
+ * Get the metadata represented as a SubmitObjectsRequest object.
+ */
+ public SubmitObjectsRequest getSubmitObjectsRequest() {
+ RegistryPackageType registryPackageType =
submissionSet.generateRegistryPackageType();
+ ClassificationType classificationType =
submissionSet.generateClassificationType();
+
+ QName qname = null;
+
+ // Generate ExtrinsicObjectType objects for each document
+ qname = new
QName(SubmitObjectsRequestEnum.EXTRINSIC_OBJECT.getNamespaceUri(),
SubmitObjectsRequestEnum.EXTRINSIC_OBJECT.getName());
+ List<JAXBElement<ExtrinsicObjectType>> jaxb_extrinsicObjectTypes =
new ArrayList<JAXBElement<ExtrinsicObjectType>>();
+ for (DirectDocument2 document : documents) {
+ ExtrinsicObjectType extrinsicObjectType =
document.getMetadata().generateExtrinsicObjectType();
+ JAXBElement<ExtrinsicObjectType> jaxb_extrinsicObjectType =
new JAXBElement<ExtrinsicObjectType>(qname, ExtrinsicObjectType.class,
extrinsicObjectType);
+ jaxb_extrinsicObjectTypes.add(jaxb_extrinsicObjectType);
+ }
+
+ // Generate the RegistryPakageType (SubmissionSet) for the group of
+ // documents
+ qname = new
QName(SubmitObjectsRequestEnum.REGISTRY_PACKAGE.getNamespaceUri(),
SubmitObjectsRequestEnum.REGISTRY_PACKAGE.getName());
+ JAXBElement<RegistryPackageType> jaxb_registryPackageType = new
JAXBElement<RegistryPackageType>(qname, RegistryPackageType.class,
registryPackageType);
+
+ // Generate the ClassificationType object
+ qname = new
QName(SubmitObjectsRequestEnum.CLASSIFICATION.getNamespaceUri(),
SubmitObjectsRequestEnum.CLASSIFICATION.getName());
+ JAXBElement<ClassificationType> jaxb_classificationType = new
JAXBElement<ClassificationType>(qname, ClassificationType.class,
classificationType);
+
+ // Generate AssociationType1 objects for each document
+ qname = new
QName(SubmitObjectsRequestEnum.ASSOCIATION.getNamespaceUri(),
SubmitObjectsRequestEnum.ASSOCIATION.getName());
+ List<JAXBElement<AssociationType1>> jaxb_associationType1s = new
ArrayList<JAXBElement<AssociationType1>>();
+ for (DirectDocument2 document : documents) {
+ AssociationType1 associationType =
submissionSet.generateAssociationType(document.getMetadata().getId(),
document.getMetadata().getSubmissionSetStatus());
+ JAXBElement<AssociationType1> jaxb_AssociationType1 = new
JAXBElement<AssociationType1>(qname, AssociationType1.class,
associationType);
+ jaxb_associationType1s.add(jaxb_AssociationType1);
+ }
+
+ SubmitObjectsRequest submitObjectsRequest = new
SubmitObjectsRequest();
+ RegistryObjectListType registryObjectListType = new
RegistryObjectListType();
+
+ List<JAXBElement<? extends IdentifiableType>> elements =
registryObjectListType.getIdentifiable();
+ elements.addAll(jaxb_extrinsicObjectTypes);
+ elements.add(jaxb_registryPackageType);
+ elements.add(jaxb_classificationType);
+ elements.addAll(jaxb_associationType1s);
+
+ submitObjectsRequest.setRegistryObjectList(registryObjectListType);
+
+ return submitObjectsRequest;
+ }
+
+ public void setValues(String submitObjectsRequestXml) throws Exception
{
+ SubmitObjectsRequest sor = (SubmitObjectsRequest)
XmlUtils.unmarshal(new String(submitObjectsRequestXml),
oasis.names.tc.ebxml_regrep.xsd.lcm._3.ObjectFactory.class);
+
+ setValues(sor);
+ }
+
+ public void setValues(SubmitObjectsRequest submitObjectsRequest)
throws MetadataException {
+ RegistryObjectListType rol =
submitObjectsRequest.getRegistryObjectList();
+
+ List<JAXBElement<? extends IdentifiableType>> elements =
rol.getIdentifiable();
+
+ for (JAXBElement<? extends IdentifiableType> element : elements) {
+ if (element.getValue() instanceof
oasis.names.tc.ebxml_regrep.xsd.rim._3.ExtrinsicObjectType) {
+ ExtrinsicObjectType eot = (ExtrinsicObjectType)
element.getValue();
+
+ DirectDocument2 document = new DirectDocument2();
+ DirectDocument2.Metadata metadata = document.getMetadata();
+
+ metadata.setValues(eot);
+
+ documents.add(document);
+ } else if (element.getValue() instanceof
oasis.names.tc.ebxml_regrep.xsd.rim._3.RegistryPackageType) {
+ RegistryPackageType rpt = (RegistryPackageType)
element.getValue();
+
+ SubmissionSet submissionSet = new SubmissionSet();
+
+ submissionSet.setValues(rpt);
+
+ this.submissionSet = submissionSet;
+ } else if (element.getValue() instanceof
oasis.names.tc.ebxml_regrep.xsd.rim._3.ClassificationType) {
+ // Empty in example
+ }
+ }
+
+ for (JAXBElement<? extends IdentifiableType> element : elements) {
+ if (element.getValue() instanceof
oasis.names.tc.ebxml_regrep.xsd.rim._3.AssociationType1) {
+ AssociationType1 at = (AssociationType1)
element.getValue();
+
+ for (SlotType1 slot : at.getSlot()) {
+ if
(SlotType1Enum.SUBMISSION_SET_STATUS.matches(slot.getName())) {
+ if (slotNotEmpty(slot)) {
+
getDocumentById(at.getTargetObject()).getMetadata().setSubmissionSetStatus(slot.getName());
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public DirectDocument2 getDocumentById(String targetObject) {
+ for (DirectDocument2 document : documents) {
+ if
(StringUtils.equalsIgnoreCase(document.getMetadata().getId(),
targetObject)) {
+ return document;
+ }
+ }
+
+ return null;
+ }
+
+ public DirectDocument2 getDocumentByUniqueId(String uniqueId) {
+ for (DirectDocument2 document : documents) {
+ if
(StringUtils.equalsIgnoreCase(document.getMetadata().getUniqueId(),
uniqueId)) {
+ return document;
+ }
+ }
+
+ return null;
+ }
+
+ public DirectDocument2 getDocumentByHash(String hash) {
+ for (DirectDocument2 document : documents) {
+ if
(StringUtils.equalsIgnoreCase(document.getMetadata().getHash(), hash)) {
+ return document;
+ }
+ }
+
+ return null;
+ }
+
+ public DirectDocument2 getDocument(String identifier) {
+ DirectDocument2 document = null;
+
+ document = getDocumentById(identifier);
+ if (document != null) {
+ return document;
+ }
+
+ document = getDocumentByUniqueId(identifier);
+ if (document != null) {
+ return document;
+ }
+
+ document = getDocumentByHash(identifier);
+ if (document != null) {
+ return document;
+ }
+
+ return document;
+ }
+
+ public String getSubmitObjectsRequestAsString() {
+ QName qname = new
QName(SubmitObjectsRequestEnum.SUBMIT_OBJECTS_REQUEST.getNamespaceUri(),
SubmitObjectsRequestEnum.SUBMIT_OBJECTS_REQUEST.getName());
+ return XmlUtils.marshal(qname, getSubmitObjectsRequest(),
ihe.iti.xds_b._2007.ObjectFactory.class);
+ }
+
+ public ProvideAndRegisterDocumentSetRequestType
toProvideAndRegisterDocumentSetRequestType() throws IOException {
+ ProvideAndRegisterDocumentSetRequestType request = new
ProvideAndRegisterDocumentSetRequestType();
+
+ request.setSubmitObjectsRequest(this.getSubmitObjectsRequest());
+
+ for (DirectDocument2 document : documents) {
+ if (document.getData() != null) {
+ DataSource source = new
ByteArrayDataSource(document.getData(),
document.getMetadata().getMimeType());
+ DataHandler dhnew = new DataHandler(source);
+
+ Document pdoc = new Document();
+ pdoc.setValue(dhnew);
+ String id = document.getMetadata().getId();
+ pdoc.setId(id);
+
+ request.getDocument().add(pdoc);
+ }
+ }
+
+ return request;
+ }
+
+ public XdmPackage toXdmPackage(String messageId) {
+ XdmPackage xdmPackage = new XdmPackage(messageId);
+ xdmPackage.setDocuments(this);
+
+ return xdmPackage;
+ }
+
+ /**
+ * Representation of a Submission Set element.
+ *
+ * @author beau
+ */
+ static public class SubmissionSet {
+
+ private String id;
+ private String name;
+ private String description;
+ private Date submissionTime;
+ private List<String> intendedRecipient = new ArrayList<String>();
+ private String authorPerson;
+ private List<String> authorInstitution = new ArrayList<String>();
+ private String authorRole;
+ private String authorSpecialty;
+ private String authorTelecommunication;
+ private String contentTypeCode;
+ private String contentTypeCode_localized;
+ private String uniqueId;
+ private String sourceId;
+ private String patientId;
+
+ public SubmissionSet() {
+ this.id = "SubmissionSet01";
+ }
+
+ protected RegistryPackageType generateRegistryPackageType() {
+ RegistryPackageType rpt = new RegistryPackageType();
+
+ rpt.setId(id);
+
+ List<SlotType1> slots = rpt.getSlot();
+ addSlot(slots, makeSlot(SlotType1Enum.SUBMISSION_TIME,
submissionTime != null ? (new
SimpleDateFormat("yyyyMMddHHmmss")).format(submissionTime) : null));
+ addSlot(slots, makeSlot(SlotType1Enum.INTENDED_RECIPIENT,
intendedRecipient));
+
+ rpt.setName(makeInternationalStringType(name));
+ rpt.setDescription(makeInternationalStringType(description));
+
+ // author
+ ClassificationType authorClassification = new
ClassificationType();
+ authorClassification.setClassifiedObject(id);
+ authorClassification.setNodeRepresentation(""); // required
empty string
+
authorClassification.setId(ClassificationTypeEnum.SS_AUTHOR.getClassificationId());
+
authorClassification.setClassificationScheme(ClassificationTypeEnum.SS_AUTHOR.getClassificationScheme());
+
+ List<SlotType1> authorClassificationSlots =
authorClassification.getSlot();
+ addSlot(authorClassificationSlots,
makeSlot(SlotType1Enum.AUTHOR_PERSON, authorPerson));
+ addSlot(authorClassificationSlots,
makeSlot(SlotType1Enum.AUTHOR_INSTITUTION, authorInstitution));
+ addSlot(authorClassificationSlots,
makeSlot(SlotType1Enum.AUTHOR_ROLE, authorRole));
+ addSlot(authorClassificationSlots,
makeSlot(SlotType1Enum.AUTHOR_SPECIALTY, authorSpecialty));
+ addSlot(authorClassificationSlots,
makeSlot(SlotType1Enum.AUTHOR_TELECOMMUNICATION, authorTelecommunication));
+
+ rpt.getClassification().add(authorClassification);
+
+ // contentTypeCode
+ ClassificationType contentTypeCodeClassification = new
ClassificationType();
+ contentTypeCodeClassification.setClassifiedObject(id);
+
contentTypeCodeClassification.setNodeRepresentation(contentTypeCode);
+
contentTypeCodeClassification.setName(makeInternationalStringType(contentTypeCode_localized));
+
contentTypeCodeClassification.setId(ClassificationTypeEnum.SS_CONTENT_TYPE_CODE.getClassificationId());
+
contentTypeCodeClassification.setClassificationScheme(ClassificationTypeEnum.SS_CONTENT_TYPE_CODE.getClassificationScheme());
+
+ List<SlotType1> contentTypeCodeClassificationSlots =
contentTypeCodeClassification.getSlot();
+ addSlot(contentTypeCodeClassificationSlots,
makeSlot(SlotType1Enum.CODING_SCHEME,
ClassificationTypeEnum.SS_CONTENT_TYPE_CODE.getCodingScheme()));
+
+ rpt.getClassification().add(contentTypeCodeClassification);
+
+ // uniqueId
+ ExternalIdentifierType xdsSubmissionSet_uniqueId = new
ExternalIdentifierType();
+ xdsSubmissionSet_uniqueId.setValue(uniqueId);
+ xdsSubmissionSet_uniqueId.setRegistryObject(id);
+
xdsSubmissionSet_uniqueId.setId(ExternalIdentifierTypeEnum.SS_UNIQUE_ID.getIdentificationId());
+
xdsSubmissionSet_uniqueId.setIdentificationScheme(ExternalIdentifierTypeEnum.SS_UNIQUE_ID.getIdentificationScheme());
+
xdsSubmissionSet_uniqueId.setName(makeInternationalStringType(ExternalIdentifierTypeEnum.SS_UNIQUE_ID.getLocalizedString()));
+
+ rpt.getExternalIdentifier().add(xdsSubmissionSet_uniqueId);
+
+ // sourceId
+ ExternalIdentifierType xdsSubmissionSet_sourceId = new
ExternalIdentifierType();
+ xdsSubmissionSet_sourceId.setValue(sourceId);
+ xdsSubmissionSet_sourceId.setRegistryObject(id);
+
xdsSubmissionSet_sourceId.setId(ExternalIdentifierTypeEnum.SS_SOURCE_ID.getIdentificationId());
+
xdsSubmissionSet_sourceId.setIdentificationScheme(ExternalIdentifierTypeEnum.SS_SOURCE_ID.getIdentificationScheme());
+
xdsSubmissionSet_sourceId.setName(makeInternationalStringType(ExternalIdentifierTypeEnum.SS_SOURCE_ID.getLocalizedString()));
+
+ rpt.getExternalIdentifier().add(xdsSubmissionSet_sourceId);
+
+ // patientId
+ ExternalIdentifierType xdsSubmissionSet_patientId = new
ExternalIdentifierType();
+ xdsSubmissionSet_patientId.setValue(patientId);
+ xdsSubmissionSet_patientId.setRegistryObject(id);
+
xdsSubmissionSet_patientId.setId(ExternalIdentifierTypeEnum.SS_PATIENT_ID.getIdentificationId());
+
xdsSubmissionSet_patientId.setIdentificationScheme(ExternalIdentifierTypeEnum.SS_PATIENT_ID.getIdentificationScheme());
+
xdsSubmissionSet_patientId.setName(makeInternationalStringType(ExternalIdentifierTypeEnum.SS_PATIENT_ID.getLocalizedString()));
+
+ rpt.getExternalIdentifier().add(xdsSubmissionSet_patientId);
+
+ return rpt;
+ }
+
+ protected ClassificationType generateClassificationType() {
+ ClassificationType ct = new ClassificationType();
+
+ ct.setClassifiedObject(id);
+ ct.setId(ClassificationTypeEnum.SS.getClassificationId());
+
ct.setClassificationScheme(ClassificationTypeEnum.SS.getClassificationScheme());
+
+ return ct;
+ }
+
+ protected AssociationType1 generateAssociationType(String
documentId, String submissionSetStatus) {
+ AssociationType1 at = new AssociationType1();
+
+ at.setSourceObject(id);
+ at.setTargetObject(documentId);
+ at.setId(AssociationType1Enum.HAS_MEMBER.getAssociationId());
+
at.setAssociationType(AssociationType1Enum.HAS_MEMBER.getAssociationType());
+
+ List<SlotType1> slots = at.getSlot();
+ addSlot(slots, makeSlot(SlotType1Enum.SUBMISSION_SET_STATUS,
submissionSetStatus));
+
+ return at;
+ }
+
+ protected void setValues(RegistryPackageType rpt) throws
MetadataException {
+ id = rpt.getId();
+ name = rpt.getName().getLocalizedString().get(0).getValue();
+ if (rpt.getDescription() != null) {
+ description =
rpt.getDescription().getLocalizedString().get(0).getValue();
+ }
+
+ for (SlotType1 slot : rpt.getSlot()) {
+ if (SlotType1Enum.SUBMISSION_TIME.matches(slot.getName()))
{
+ if (slotNotEmpty(slot)) {
+ try {
+ submissionTime =
DateUtils.parseDate(slot.getValueList().getValue().get(
+ 0), new
String[]{"yyyyMMddHHmmss", "yyyyMMddHHmm", "yyyyMMdd"});
+ } catch (ParseException e) {
+ LOGGER.error("Unable to parse submissionTime",
e);
+ throw new MetadataException("Unable to parse
submissionTime", e);
+ }
+ }
+ } else if
(SlotType1Enum.INTENDED_RECIPIENT.matches(slot.getName())) {
+ if (slotNotEmpty(slot)) {
+ for (String value :
slot.getValueList().getValue()) {
+ intendedRecipient.add(value);
+ }
+ }
+ }
+ }
+
+ for (ClassificationType ct : rpt.getClassification()) {
+ if
(ClassificationTypeEnum.SS_AUTHOR.matchesScheme(ct.getClassificationScheme()))
{
+ for (SlotType1 slot : ct.getSlot()) {
+ if
(SlotType1Enum.AUTHOR_PERSON.matches(slot.getName())) {
+ if (slotNotEmpty(slot)) {
+ authorPerson =
slot.getValueList().getValue().get(0);
+ }
+ } else if
(SlotType1Enum.AUTHOR_INSTITUTION.matches(slot.getName())) {
+ if (slotNotEmpty(slot)) {
+ for (String value :
slot.getValueList().getValue()) {
+ authorInstitution.add(value);
+ }
+ }
+ } else if
(SlotType1Enum.AUTHOR_ROLE.matches(slot.getName())) {
+ if (slotNotEmpty(slot)) {
+ authorRole =
slot.getValueList().getValue().get(0);
+ }
+ } else if
(SlotType1Enum.AUTHOR_SPECIALTY.matches(slot.getName())) {
+ if (slotNotEmpty(slot)) {
+ authorSpecialty =
slot.getValueList().getValue().get(0);
+ }
+ } else if
(SlotType1Enum.AUTHOR_TELECOMMUNICATION.matches(slot.getName())) {
+ if (slotNotEmpty(slot)) {
+ authorTelecommunication =
slot.getValueList().getValue().get(0);
+ }
+ }
+ }
+ }
+ if
(ClassificationTypeEnum.SS_CONTENT_TYPE_CODE.matchesScheme(ct.getClassificationScheme()))
{
+ for (SlotType1 slot : ct.getSlot()) {
+ if
(SlotType1Enum.CODING_SCHEME.matches(slot.getName())) {
+ if (slotNotEmpty(slot)) {
+ @SuppressWarnings("unused")
+ String codingScheme =
slot.getValueList().getValue().get(0);
+ }
+ }
+ }
+
+ contentTypeCode = ct.getNodeRepresentation();
+
+ if (ct.getName() != null &&
ct.getName().getLocalizedString() != null
&& !ct.getName().getLocalizedString().isEmpty()) {
+ contentTypeCode_localized =
ct.getName().getLocalizedString().get(0).getValue();
+ }
+ }
+ }
+
+ for (ExternalIdentifierType eit : rpt.getExternalIdentifier())
{
+ if
(ExternalIdentifierTypeEnum.SS_UNIQUE_ID.matchesScheme(eit.getIdentificationScheme()))
{
+ uniqueId = eit.getValue();
+ } else if
(ExternalIdentifierTypeEnum.SS_SOURCE_ID.matchesScheme(eit.getIdentificationScheme()))
{
+ sourceId = eit.getValue();
+ } else if
(ExternalIdentifierTypeEnum.SS_PATIENT_ID.matchesScheme(eit.getIdentificationScheme()))
{
+ patientId = eit.getValue();
+ }
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ QName qname = new
QName(SubmitObjectsRequestEnum.REGISTRY_PACKAGE.getNamespaceUri(),
SubmitObjectsRequestEnum.REGISTRY_PACKAGE.getName());
+ return XmlUtils.marshal(qname, generateRegistryPackageType(),
ihe.iti.xds_b._2007.ObjectFactory.class);
+ }
+
+ /**
+ * @return the id
+ */
+ public String getId() {
+ return id;
+ }
+
+ /**
+ * @param id
+ * the id to set
+ */
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ /**
+ * @return the name
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * @param name
+ * the name to set
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ /**
+ * @return the description
+ */
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * @param description
+ * the description to set
+ */
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ /**
+ * @return the submissionTime
+ */
+ public Date getSubmissionTime() {
+ return submissionTime;
+ }
+
+ /**
+ * @param submissionTime
+ * the submissionTime to set
+ */
+ public void setSubmissionTime(Date submissionTime) {
+ this.submissionTime = submissionTime;
+ }
+
+ /**
+ * @return the intendedRecipient
+ */
+ public List<String> getIntendedRecipient() {
+ return intendedRecipient;
+ }
+
+ /**
+ * @param intendedRecipient
+ * the intendedRecipient to set
+ */
+ public void setIntendedRecipient(List<String> intendedRecipient) {
+ this.intendedRecipient = intendedRecipient;
+ }
+
+ /**
+ * @return the authorPerson
+ */
+ public String getAuthorPerson() {
+ return authorPerson;
+ }
+
+ /**
+ * @param authorPerson
+ * the authorPerson to set
+ */
+ public void setAuthorPerson(String authorPerson) {
+ this.authorPerson = authorPerson;
+ }
+
+ /**
+ * @return the authorInstitution
+ */
+ public List<String> getAuthorInstitution() {
+ return authorInstitution;
+ }
+
+ /**
+ * @param authorInstitution
+ * the authorInstitution to set
+ */
+ public void setAuthorInstitution(List<String> authorInstitution) {
+ this.authorInstitution = authorInstitution;
+ }
+
+ /**
+ * @return the authorRole
+ */
+ public String getAuthorRole() {
+ return authorRole;
+ }
+
+ /**
+ * @param authorRole
+ * the authorRole to set
+ */
+ public void setAuthorRole(String authorRole) {
+ this.authorRole = authorRole;
+ }
+
+ /**
+ * @return the authorSpecialty
+ */
+ public String getAuthorSpecialty() {
+ return authorSpecialty;
+ }
+
+ /**
+ * @param authorSpecialty
+ * the authorSpecialty to set
+ */
+ public void setAuthorSpecialty(String authorSpecialty) {
+ this.authorSpecialty = authorSpecialty;
+ }
+
+ /**
+ * @return the authorTelecommunication
+ */
+ public String getAuthorTelecommunication() {
+ return authorTelecommunication;
+ }
+
+ /**
+ * @param authorTelecommunication
+ * the authorTelecommunication to set
+ */
+ public void setAuthorTelecommunication(String
authorTelecommunication) {
+ this.authorTelecommunication = authorTelecommunication;
+ }
+
+ /**
+ * @return the contentTypeCode
+ */
+ public String getContentTypeCode() {
+ return contentTypeCode;
+ }
+
+ /**
+ * @param contentTypeCode
+ * the contentTypeCode to set
+ */
+ public void setContentTypeCode(String contentTypeCode) {
+ setContentTypeCode(contentTypeCode, false);
+ }
+
+ /**
+ * @param contentTypeCode
+ * the contentTypeCode to set
+ * @param setLocalized
+ * whether or not to set the localized field with the
same
+ * value
+ */
+ public void setContentTypeCode(String contentTypeCode, boolean
setLocalized) {
+ this.contentTypeCode = contentTypeCode;
+
+ if (setLocalized) {
+ this.contentTypeCode_localized = contentTypeCode;
+ }
+ }
+
+ /**
+ * @return the contentTypeCode_localized
+ */
+ public String getContentTypeCode_localized() {
+ return contentTypeCode_localized;
+ }
+
+ /**
+ * @param contentTypeCodeLocalized
+ * the contentTypeCode_localized to set
+ */
+ public void setContentTypeCode_localized(String
contentTypeCodeLocalized) {
+ contentTypeCode_localized = contentTypeCodeLocalized;
+ }
+
+ /**
+ * @return the uniqueId
+ */
+ public String getUniqueId() {
+ return uniqueId;
+ }
+
+ /**
+ * @param uniqueId
+ * the uniqueId to set
+ */
+ public void setUniqueId(String uniqueId) {
+ this.uniqueId = uniqueId;
+ }
+
+ /**
+ * @return the sourceId
+ */
+ public String getSourceId() {
+ return sourceId;
+ }
+
+ /**
+ * @param sourceId
+ * the sourceId to set
+ */
+ public void setSourceId(String sourceId) {
+ this.sourceId = sourceId;
+ }
+
+ /**
+ * @return the patientId
+ */
+ public String getPatientId() {
+ return patientId;
+ }
+
+ /**
+ * @param patientId
+ * the patientId to set
+ */
+ public void setPatientId(String patientId) {
+ this.patientId = patientId;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((authorInstitution == null) ? 0 :
authorInstitution.hashCode());
+ result = prime * result + ((authorPerson == null) ? 0 :
authorPerson.hashCode());
+ result = prime * result + ((authorRole == null) ? 0 :
authorRole.hashCode());
+ result = prime * result + ((authorSpecialty == null) ? 0 :
authorSpecialty.hashCode());
+ result = prime * result + ((authorTelecommunication == null) ?
0 : authorTelecommunication.hashCode());
+ result = prime * result + ((contentTypeCode == null) ? 0 :
contentTypeCode.hashCode());
+ result = prime * result + ((contentTypeCode_localized ==
null) ? 0 : contentTypeCode_localized.hashCode());
+ result = prime * result + ((description == null) ? 0 :
description.hashCode());
+ result = prime * result + ((id == null) ? 0 : id.hashCode());
+ result = prime * result + ((intendedRecipient == null) ? 0 :
intendedRecipient.hashCode());
+ result = prime * result + ((name == null) ? 0 :
name.hashCode());
+ result = prime * result + ((patientId == null) ? 0 :
patientId.hashCode());
+ result = prime * result + ((sourceId == null) ? 0 :
sourceId.hashCode());
+ result = prime * result + ((submissionTime == null) ? 0 :
submissionTime.hashCode());
+ result = prime * result + ((uniqueId == null) ? 0 :
uniqueId.hashCode());
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (!(obj instanceof SubmissionSet)) {
+ return false;
+ }
+ SubmissionSet other = (SubmissionSet) obj;
+ if (authorInstitution == null) {
+ if (other.authorInstitution != null) {
+ return false;
+ }
+ } else if (!authorInstitution.equals(other.authorInstitution))
{
+ return false;
+ }
+ if (authorPerson == null) {
+ if (other.authorPerson != null) {
+ return false;
+ }
+ } else if (!authorPerson.equals(other.authorPerson)) {
+ return false;
+ }
+ if (authorRole == null) {
+ if (other.authorRole != null) {
+ return false;
+ }
+ } else if (!authorRole.equals(other.authorRole)) {
+ return false;
+ }
+ if (authorSpecialty == null) {
+ if (other.authorSpecialty != null) {
+ return false;
+ }
+ } else if (!authorSpecialty.equals(other.authorSpecialty)) {
+ return false;
+ }
+ if (authorTelecommunication == null) {
+ if (other.authorTelecommunication != null) {
+ return false;
+ }
+ } else if
(!authorTelecommunication.equals(other.authorTelecommunication)) {
+ return false;
+ }
+ if (contentTypeCode == null) {
+ if (other.contentTypeCode != null) {
+ return false;
+ }
+ } else if (!contentTypeCode.equals(other.contentTypeCode)) {
+ return false;
+ }
+ if (contentTypeCode_localized == null) {
+ if (other.contentTypeCode_localized != null) {
+ return false;
+ }
+ } else if
(!contentTypeCode_localized.equals(other.contentTypeCode_localized)) {
+ return false;
+ }
+ if (description == null) {
+ if (other.description != null) {
+ return false;
+ }
+ } else if (!description.equals(other.description)) {
+ return false;
+ }
+ if (id == null) {
+ if (other.id != null) {
+ return false;
+ }
+ } else if (!id.equals(other.id)) {
+ return false;
+ }
+ if (intendedRecipient == null) {
+ if (other.intendedRecipient != null) {
+ return false;
+ }
+ } else if (!intendedRecipient.equals(other.intendedRecipient))
{
+ return false;
+ }
+ if (name == null) {
+ if (other.name != null) {
+ return false;
+ }
+ } else if (!name.equals(other.name)) {
+ return false;
+ }
+ if (patientId == null) {
+ if (other.patientId != null) {
+ return false;
+ }
+ } else if (!patientId.equals(other.patientId)) {
+ return false;
+ }
+ if (sourceId == null) {
+ if (other.sourceId != null) {
+ return false;
+ }
+ } else if (!sourceId.equals(other.sourceId)) {
+ return false;
+ }
+ if (submissionTime == null) {
+ if (other.submissionTime != null) {
+ return false;
+ }
+ } else if (!submissionTime.equals(other.submissionTime)) {
+ return false;
+ }
+ if (uniqueId == null) {
+ if (other.uniqueId != null) {
+ return false;
+ }
+ } else if (!uniqueId.equals(other.uniqueId)) {
+ return false;
+ }
+ return true;
+ }
+ }
+}
=======================================
--- /dev/null
+++
/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/common/DirectMessage.java
Tue Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,197 @@
+/*
+ * Copyright (c) 2010, NHIN Direct Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the the NHIN Direct Project (nhindirect.org)
+ * nor the names of its contributors may be used to endorse or promote
products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package org.nhindirect.xd.common;
+
+import java.io.File;
+import java.util.Collection;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Abstract representation of a message sent via Direct.
+ *
+ * @author beau
+ */
+public class DirectMessage
+{
+ private String sender;
+ private Collection<String> receivers;
+ private DirectDocuments directDocuments;
+ private String body;
+ private String subject;
+
+ @SuppressWarnings("unused")
+ private static final Log LOGGER =
LogFactory.getFactory().getInstance(DirectMessage.class);
+
+ /**
+ * Create a new DirectMessage object.
+ *
+ * @param sender
+ * The value of sender.
+ * @param receivers
+ * The value of receivers.
+ */
+ public DirectMessage(String sender, Collection<String> receivers)
+ {
+ this.sender = sender;
+ this.receivers = receivers;
+
+ this.directDocuments = new DirectDocuments();
+ }
+
+ /**
+ * Add a document to the message.
+ *
+ * @param document
+ * The document to add.
+ */
+ @Deprecated
+ // public void addDocument(String document)
+ // {
+ // DirectDocument2 doc = new DirectDocument2();
+ // doc.setData(document);
+
+ // directDocuments.getDocuments().add(doc);
+ // }
+
+ public void addDocument(File file) throws Exception
+ {
+ DirectDocument2 document = new DirectDocument2(file);
+
+ directDocuments.getDocuments().add(document);
+ }
+
+ public void addDocument(DirectDocument2 document)
+ {
+ directDocuments.getDocuments().add(document);
+ }
+
+ /**
+ * Get the value of sender.
+ *
+ * @return the value of sender.
+ */
+ public String getSender()
+ {
+ return sender;
+ }
+
+ /**
+ * Set the value of sender.
+ *
+ * @param sender
+ * The value of sender.
+ */
+ public void setSender(String sender)
+ {
+ this.sender = sender;
+ }
+
+ /**
+ * Get the value of receivers.
+ *
+ * @return the value of receivers.
+ */
+ public Collection<String> getReceivers()
+ {
+ return receivers;
+ }
+
+ /**
+ * Set the value of receivers.
+ *
+ * @param receivers
+ * The value of receivers.
+ */
+ public void setReceivers(Collection<String> receivers)
+ {
+ this.receivers = receivers;
+ }
+
+ /**
+ * Get the value of body.
+ *
+ * @return the body.
+ */
+ public String getBody()
+ {
+ return body;
+ }
+
+ /**
+ * Set the value of body.
+ *
+ * @param body
+ * The body to set.
+ */
+ public void setBody(String body)
+ {
+ this.body = body;
+ }
+
+ /**
+ * Set the value of subject.
+ *
+ * @param subject
+ * The subject to set.
+ */
+ public void setSubject(String subject)
+ {
+ this.subject = subject;
+ }
+
+ /**
+ * Get the value of subject.
+ *
+ * @return the subject.
+ */
+ public String getSubject()
+ {
+ return subject;
+ }
+
+ /**
+ * @return the directDocuments
+ */
+ public DirectDocuments getDirectDocuments()
+ {
+ return directDocuments;
+ }
+
+ /**
+ * @param directDocuments
+ * the directDocuments to set
+ */
+ public void setDirectDocuments(DirectDocuments directDocuments)
+ {
+ this.directDocuments = directDocuments;
+ }
+
+}
=======================================
--- /dev/null
+++
/java/tags/xd-common-1.0.3/src/main/java/org/nhindirect/xd/common/XdmPackage.java
Tue Oct 28 12:15:16 2014 UTC
@@ -0,0 +1,425 @@
+package org.nhindirect.xd.common;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Enumeration;
+import java.util.UUID;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+import java.util.zip.ZipOutputStream;
+
+import javax.activation.DataHandler;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nhindirect.xd.transform.util.type.MimeType;
+
+public class XdmPackage {
+
+ private String messageId;
+ private DirectDocuments documents;
+ @Deprecated
+ private static final String SUFFIX = ".xml";
+ private static final int BUFFER = 2048;
+ private static final String XDM_SUB_FOLDER = "IHE_XDM/SUBSET01";
+ private static final String XDM_METADATA_FILE = "METADATA.xml";
+ private static final Log LOGGER =
LogFactory.getFactory().getInstance(XdmPackage.class);
+
+ public XdmPackage() {
+ this(UUID.randomUUID().toString());
+ }
+
+ public XdmPackage(String messageId) {
+ this.messageId = messageId;
+ this.documents = new DirectDocuments();
+ }
+
+ public void setDocuments(DirectDocuments documents) {
+ this.documents = documents;
+ }
+
+ public DirectDocuments getDocuments() {
+ return this.documents;
+ }
+
+ public File toFile() {
+ File xdmFile = null;
+
+ try {
+ xdmFile = new File(messageId + "-xdm.zip");
+
+ FileOutputStream dest = new FileOutputStream(xdmFile);
+
+ ZipOutputStream zipOutputStream = new ZipOutputStream(new
BufferedOutputStream(dest));
+ zipOutputStream.setMethod(ZipOutputStream.DEFLATED);
+
+ for (DirectDocument2 document : documents.getDocuments()) {
+ if (document.getData() != null) {
+ String fileName = document.getMetadata().getId() ;
+ fileName = fileName.replace("urn:uuid:", "");
+ fileName = fileName +
getSuffix(document.getMetadata().getMimeType());
+
+ document.getMetadata().setURI(fileName);
+ addEntry(zipOutputStream, document.getData(),
XDM_SUB_FOLDER + fileName );
+ }
+ }
+
+ addEntry(zipOutputStream,
documents.getSubmitObjectsRequestAsString().getBytes(), XDM_SUB_FOLDER +
XDM_METADATA_FILE);
+
+ addEntry(zipOutputStream, getIndex().getBytes(), "INDEX.htm");
+
+ addEntry(zipOutputStream,
getReadme().getBytes(), "README.txt");
+
+ if (SUFFIX.equals(".xml")) {
+ addEntry(zipOutputStream, getXsl().getBytes(),
XDM_SUB_FOLDER + "CCD.xsl");
+ }
+
+ zipOutputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ return xdmFile;
+ }
+
+ private void addEntry(ZipOutputStream zipOutputStream, byte[] data,
String fileName) throws IOException {
+ InputStream inputStream = new ByteArrayInputStream(data);
+ BufferedInputStream outputStream = new
BufferedInputStream(inputStream);
+
+ ZipEntry zipEntry = new ZipEntry(fileName);
+ zipOutputStream.putNextEntry(zipEntry);
+
+ int count = 0;
+ byte dataOut[] = new byte[BUFFER];
+ while ((count = outputStream.read(dataOut, 0, BUFFER)) != -1) {
+ zipOutputStream.write(dataOut, 0, count);
+ }
+ }
+
+ /*
+ * Get the index file.
+ */
+ public String getIndex() throws Exception {
+ String data;
+ byte[] bytes;
+
+ try {
+ bytes = readFile("INDEX_head.txt");
+
+ data = new String(bytes);
+
+ for (DirectDocument2 document : documents.getDocuments()) {
+ if (document.getData() != null) {
+ String file = XDM_SUB_FOLDER +
document.getMetadata().getId() +
getSuffix(document.getMetadata().getMimeType());
+ data += "<li><a href=\"" + file + "\">" + file + "</a>
- " + document.getMetadata().getDescription() + "</li>";
+ }
+ }
+
+ bytes = readFile("INDEX_tail.txt");
+
+ data += new String(bytes);
+ } catch (Exception e) {
+ LOGGER.error("Unable to access index file.", e);
+ throw e;
+ }
+
+ return data;
+ }
+
+ /*
+ * Get the readme file.
+ */
+ public String getReadme() throws Exception {
+ byte[] bytes;
+
+ try {
+ bytes = readFile("README.txt");
+ } catch (Exception e) {
+ LOGGER.error("Unable to access readme file.", e);
+ throw e;
+ }
+
+ return new String(bytes);
+ }
+
+ /*
+ * Get the xsl file.
+ */
+ public String getXsl() throws Exception {
+ byte[] bytes;
+
+ try {
+ bytes = readFile("CCD.xsl");
+ } catch (Exception e) {
+ LOGGER.error("Unable to access xsl file.", e);
+ throw e;
+ }
+
+ return new String(bytes);
+
+ }
+
+ public static XdmPackage fromXdmZipDataHandler(DataHandler
dataHandler) throws Exception {
+ File file = null;
+
+ try {
+ // Create a temporary work file
+ file = fileFromDataHandler(dataHandler);
+ } catch (Exception e) {
+ if (LOGGER.isErrorEnabled()) {
+ LOGGER.error("Error creating temporary work file, unable
to complete transformation.", e);
+ }
+ throw new Exception("Error creating temporary work file,
unable to complete transformation.", e);
+ }
+
+ XdmPackage xdmPackage = fromXdmZipFile(file);
+
+ boolean delete = file.delete();
+
+ if (delete) {
+ if (LOGGER.isTraceEnabled()) {
+ LOGGER.trace("Deleted temporary work file " +
file.getAbsolutePath());
+ }
+ } else {
+ if (LOGGER.isWarnEnabled()) {
+ LOGGER.warn("Unable to delete temporary work file " +
file.getAbsolutePath());
+ }
+ }
+
+ return xdmPackage;
+ }
+
+ public static XdmPackage fromXdmZipFile(File file) throws Exception {
+ DirectDocuments documents = new DirectDocuments();
+
+ ZipFile zipFile = new ZipFile(file, ZipFile.OPEN_READ);
+
+ Enumeration<? extends ZipEntry> zipEntries = zipFile.entries();
+ ZipEntry zipEntry = null;
+
+ // Load metadata
+ while (zipEntries.hasMoreElements()) {
+
+
+ zipEntry = zipEntries.nextElement();
+ String zname = zipEntry.getName();
+ LOGGER.info("Processing a ZipEntry named " + zname);
+ if (!zipEntry.isDirectory()) {
+ String subsetDirspec =
getSubmissionSetDirspec(zipEntry.getName());
+
+ // Read metadata
+ if (matchName(zname, subsetDirspec, XDM_METADATA_FILE)) {
+ ByteArrayOutputStream byteArrayOutputStream =
readData(zipFile, zipEntry);
+
+ documents.setValues(byteArrayOutputStream.toString());
+ }
+ }
+ }
+
+ zipEntries = zipFile.entries();
+
+ // load data
+ while (zipEntries.hasMoreElements()) {
+ LOGGER.trace("Processing a ZipEntry");
+
+ zipEntry = zipEntries.nextElement();
+ String zname = zipEntry.getName();
+
+ if (!zipEntry.isDirectory()) {
+ String subsetDirspec =
getSubmissionSetDirspec(zipEntry.getName());
+
+ // Read data
+ // if (StringUtils.contains(subsetDirspec,
StringUtils.remove(XDM_SUB_FOLDER, "/"))
+ if (StringUtils.contains(subsetDirspec,XDM_SUB_FOLDER)
+ && !StringUtils.contains(zname, ".xsl")
&& !StringUtils.contains(zname, XDM_METADATA_FILE)) {
+ ByteArrayOutputStream byteArrayOutputStream =
readData(zipFile, zipEntry);
+
+ String digest =
DirectDocument2.getSha1Hash(byteArrayOutputStream.toString());
+ System.out.println(digest);
+ DirectDocument2 document =
documents.getDocumentByHash(digest);
+
+ if (document == null) {
+ LOGGER.warn("Unable to find metadata for document
by hash. Creating document with no supporting metadata.");
+
+ document = new DirectDocument2();
+ documents.getDocuments().add(document);
+ }
+
+ document.setData(byteArrayOutputStream.toByteArray());
+ }
+ }
+ }
+
+ zipFile.close();
+
+ XdmPackage xdmPackage = new XdmPackage();
+ xdmPackage.setDocuments(documents);
+
+ return xdmPackage;
+ }
+
+ protected static String getSubmissionSetDirspec(String
zipEntryName) {
+ if (zipEntryName == null) {
+ return null;
+ }
+ String ret = "";
+ zipEntryName = zipEntryName.replaceAll("\\\\", "/");
+ String[] components = zipEntryName.split("/");
+ for (int i = 0; i < components.length - 1; i++) {
+ ret += (components[i] + "/");
+ }
+ if (ret.length() == 0) {
+ return "";
+ }
+ ret = ret.substring(0, ret.length() - 1);
+
+
+ return ret;
+ }
+
+
+ /**
+ * Given a full ZipEntry filespec, extracts the name of the folder (if
+ * present) under the IHE_XDM root specified by IHE XDM.
+ *
+ * @param zipEntryName
+ * The ZIP entry name.
+ * @return the name of the folder.
+ */
+ /* private static String getSubmissionSetDirspec(String zipEntryName) {
+ if (zipEntryName == null) {
+ return null;
+ }
+
+ String[] components = StringUtils.split(zipEntryName, "\\/");
+ return components[0];
+ }
+*/
+ protected static boolean matchName(String zname, String subsetDirspec,
String subsetFilespec) {
+ zname = zname.replaceAll("\\\\", "/");
+ String zipFilespec = subsetDirspec + "/" + subsetFilespec;
+ boolean ret = StringUtils.equals(zname, zipFilespec);
+
+
+ return ret;
+ }
+
+ /**
+ * Determine whether a filename matches the subset directory and file
name.
+ *
+ * @param zname
+ * The name to compare.
+ * @param subsetDirspec
+ * The subset directory name.
+ * @param subsetFilespec
+ * The subset file name.
+ * @return true if the names match, false otherwise.
+ */
+ /* private static boolean matchName(String zname, String subsetDirspec,
String subsetFilespec) {
+ String zipFilespec = subsetDirspec + "\\" +
subsetFilespec.replace('/', '\\');
+ boolean ret = StringUtils.equalsIgnoreCase(zname, zipFilespec);
+
+ if (!ret) {
+ zipFilespec = zipFilespec.replace('\\', '/');
+ ret = StringUtils.equalsIgnoreCase(zname, zipFilespec);
+ }
+
+ return ret;
+ }*/
+
+ /**
+ * Read data the data of a zipEntry within a zipFile.
+ *
+ * @param zipFile
+ * The ZipFile object.
+ * @param zipEntry
+ * The ZipEntry object.
+ * @return a ByteArrayOutputStream representing the data.
+ * @throws IOException
+ */
+ private static ByteArrayOutputStream readData(ZipFile zipFile,
ZipEntry zipEntry) throws IOException {
+ InputStream in = zipFile.getInputStream(zipEntry);
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+ int bytesRead = 0;
+ byte[] buffer = new byte[2048];
+
+ while ((bytesRead = in.read(buffer)) != -1) {
+ baos.write(buffer, 0, bytesRead);
+ }
+
+ in.close();
+
+ return baos;
+ }
+
+ /*
+ * Read a file and return the bytes.
+ */
+ private byte[] readFile(String filename) throws IOException {
+ byte[] bytes;
+
+ InputStream is =
this.getClass().getClassLoader().getResourceAsStream(filename);
+ bytes = new byte[is.available()];
+ is.read(bytes);
+
+ is.close();
+
+ return bytes;
+ }
+
+ private static File fileFromDataHandler(DataHandler dh) throws
Exception {
+ File f = null;
+ OutputStream out = null;
+ InputStream inputStream = null;
+
+ final String fileName = UUID.randomUUID().toString() + ".zip";
+
+ try {
+ f = new File(fileName);
+ inputStream = dh.getInputStream();
+ out = new FileOutputStream(f);
+ byte buf[] = new byte[1024];
+ int len;
+ while ((len = inputStream.read(buf)) > 0) {
+ out.write(buf, 0, len);
+ }
+ } catch (FileNotFoundException e) {
+ if (LOGGER.isErrorEnabled()) {
+ LOGGER.error("File not found - " + fileName, e);
+ }
+ throw e;
+ } catch (IOException e) {
+ if (LOGGER.isErrorEnabled()) {
+ LOGGER.error("Exception thrown while trying to read file
from DataHandler object", e);
+ }
+ throw e;
+ } finally {
+ if (inputStream != null) {
+ inputStream.close();
+ }
+ if (out != null) {
+ out.close();
+ }
+ }
+
+ if (LOGGER.isTraceEnabled()) {
+ LOGGER.trace("Created temporary work file " +
f.getAbsolutePath());
+ }
+
+ return f;
+ }
+
+ private String getSuffix(String mimeType) {
+ return "." + MimeType.lookup(mimeType).getSuffix();
+ }
+}
=======================================
***Additional files exist in this changeset.***
Reply all
Reply to author
Forward
0 new messages